21 #include <linux/socket.h>
30 kfree(urb->setup_packet);
31 kfree(urb->transfer_buffer);
73 switch (urb->status) {
78 dev_info(&urb->dev->dev,
"stopped by a call to usb_kill_urb() "
79 "because of cleaning up a virtual connection\n");
82 dev_info(&urb->dev->dev,
"unlinked by a call to "
83 "usb_unlink_urb()\n");
86 dev_info(&urb->dev->dev,
"endpoint %d is stalled\n",
87 usb_pipeendpoint(urb->pipe));
90 dev_info(&urb->dev->dev,
"device removed?\n");
93 dev_info(&urb->dev->dev,
"urb completion with non-zero status "
102 stub_free_priv_and_urb(priv);
104 list_move_tail(&priv->
list, &
sdev->priv_tx);
106 spin_unlock_irqrestore(&
sdev->priv_lock,
flags);
130 static void setup_ret_unlink_pdu(
struct usbip_header *rpdu,
146 spin_unlock_irqrestore(&sdev->
priv_lock, flags);
150 spin_unlock_irqrestore(&sdev->
priv_lock, flags);
165 while ((priv = dequeue_from_priv_tx(sdev)) !=
NULL) {
167 struct urb *urb = priv->
urb;
169 void *iso_buffer =
NULL;
174 memset(&pdu_header, 0,
sizeof(pdu_header));
177 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)
178 iovnum = 2 + urb->number_of_packets;
192 setup_ret_submit_pdu(&pdu_header, urb);
194 pdu_header.base.seqnum, urb);
199 iov[iovnum].
iov_len =
sizeof(pdu_header);
201 txsize +=
sizeof(pdu_header);
204 if (usb_pipein(urb->pipe) &&
205 usb_pipetype(urb->pipe) != PIPE_ISOCHRONOUS &&
206 urb->actual_length > 0) {
207 iov[iovnum].
iov_base = urb->transfer_buffer;
208 iov[iovnum].
iov_len = urb->actual_length;
210 txsize += urb->actual_length;
211 }
else if (usb_pipein(urb->pipe) &&
212 usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
222 for (i = 0; i < urb->number_of_packets; i++) {
223 iov[iovnum].
iov_base = urb->transfer_buffer +
224 urb->iso_frame_desc[
i].offset;
226 urb->iso_frame_desc[
i].actual_length;
228 txsize += urb->iso_frame_desc[
i].actual_length;
231 if (txsize !=
sizeof(pdu_header) + urb->actual_length) {
233 "actual length of urb %d does not "
234 "match iso packet sizes %zu\n",
236 txsize-
sizeof(pdu_header));
245 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
263 iov, iovnum, txsize);
266 "sendmsg failed!, retval %d for %zd\n",
277 total_size += txsize;
282 stub_free_priv_and_urb(priv);
284 spin_unlock_irqrestore(&sdev->
priv_lock, flags);
298 spin_unlock_irqrestore(&sdev->
priv_lock, flags);
302 spin_unlock_irqrestore(&sdev->
priv_lock, flags);
307 static int stub_send_ret_unlink(
struct stub_device *sdev)
316 size_t total_size = 0;
318 while ((unlink = dequeue_from_unlink_tx(sdev)) !=
NULL) {
323 memset(&pdu_header, 0,
sizeof(pdu_header));
325 memset(&iov, 0,
sizeof(iov));
330 setup_ret_unlink_pdu(&pdu_header, unlink);
334 iov[0].
iov_len =
sizeof(pdu_header);
335 txsize +=
sizeof(pdu_header);
341 "sendmsg failed!, retval %d for %zd\n",
348 total_size += txsize;
358 spin_unlock_irqrestore(&sdev->
priv_lock, flags);
386 if (stub_send_ret_submit(sdev) < 0)
389 if (stub_send_ret_unlink(sdev) < 0)
393 (!list_empty(&sdev->
priv_tx) ||