vhci_rx.c (8c57a5e7b2820f349c95b8c8393fec1e0f4070d2) vhci_rx.c (0775a9cbc694e8c7276688be3bbd2f386167ab54)
1/*
2 * Copyright (C) 2003-2008 Takahiro Hirofuchi
3 *
4 * This is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *

--- 56 unchanged lines hidden (view full) ---

65 }
66
67 return urb;
68}
69
70static void vhci_recv_ret_submit(struct vhci_device *vdev,
71 struct usbip_header *pdu)
72{
1/*
2 * Copyright (C) 2003-2008 Takahiro Hirofuchi
3 *
4 * This is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *

--- 56 unchanged lines hidden (view full) ---

65 }
66
67 return urb;
68}
69
70static void vhci_recv_ret_submit(struct vhci_device *vdev,
71 struct usbip_header *pdu)
72{
73 struct vhci_hcd *vhci = vdev_to_vhci(vdev);
73 struct usbip_device *ud = &vdev->ud;
74 struct urb *urb;
75 unsigned long flags;
76
77 spin_lock_irqsave(&vdev->priv_lock, flags);
78 urb = pickup_urb_and_free_priv(vdev, pdu->base.seqnum);
79 spin_unlock_irqrestore(&vdev->priv_lock, flags);
80
81 if (!urb) {
82 pr_err("cannot find a urb of seqnum %u\n", pdu->base.seqnum);
83 pr_info("max seqnum %d\n",
74 struct usbip_device *ud = &vdev->ud;
75 struct urb *urb;
76 unsigned long flags;
77
78 spin_lock_irqsave(&vdev->priv_lock, flags);
79 urb = pickup_urb_and_free_priv(vdev, pdu->base.seqnum);
80 spin_unlock_irqrestore(&vdev->priv_lock, flags);
81
82 if (!urb) {
83 pr_err("cannot find a urb of seqnum %u\n", pdu->base.seqnum);
84 pr_info("max seqnum %d\n",
84 atomic_read(&the_controller->seqnum));
85 atomic_read(&vhci->seqnum));
85 usbip_event_add(ud, VDEV_EVENT_ERROR_TCP);
86 return;
87 }
88
89 /* unpack the pdu to a urb */
90 usbip_pack_pdu(pdu, urb, USBIP_RET_SUBMIT, 0);
91
92 /* recv transfer buffer */

--- 7 unchanged lines hidden (view full) ---

100 /* restore the padding in iso packets */
101 usbip_pad_iso(ud, urb);
102
103 if (usbip_dbg_flag_vhci_rx)
104 usbip_dump_urb(urb);
105
106 usbip_dbg_vhci_rx("now giveback urb %p\n", urb);
107
86 usbip_event_add(ud, VDEV_EVENT_ERROR_TCP);
87 return;
88 }
89
90 /* unpack the pdu to a urb */
91 usbip_pack_pdu(pdu, urb, USBIP_RET_SUBMIT, 0);
92
93 /* recv transfer buffer */

--- 7 unchanged lines hidden (view full) ---

101 /* restore the padding in iso packets */
102 usbip_pad_iso(ud, urb);
103
104 if (usbip_dbg_flag_vhci_rx)
105 usbip_dump_urb(urb);
106
107 usbip_dbg_vhci_rx("now giveback urb %p\n", urb);
108
108 spin_lock_irqsave(&the_controller->lock, flags);
109 usb_hcd_unlink_urb_from_ep(vhci_to_hcd(the_controller), urb);
110 spin_unlock_irqrestore(&the_controller->lock, flags);
109 spin_lock_irqsave(&vhci->lock, flags);
110 usb_hcd_unlink_urb_from_ep(vhci_to_hcd(vhci), urb);
111 spin_unlock_irqrestore(&vhci->lock, flags);
111
112
112 usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb, urb->status);
113 usb_hcd_giveback_urb(vhci_to_hcd(vhci), urb, urb->status);
113
114 usbip_dbg_vhci_rx("Leave\n");
115}
116
117static struct vhci_unlink *dequeue_pending_unlink(struct vhci_device *vdev,
118 struct usbip_header *pdu)
119{
120 struct vhci_unlink *unlink, *tmp;

--- 16 unchanged lines hidden (view full) ---

137 spin_unlock_irqrestore(&vdev->priv_lock, flags);
138
139 return NULL;
140}
141
142static void vhci_recv_ret_unlink(struct vhci_device *vdev,
143 struct usbip_header *pdu)
144{
114
115 usbip_dbg_vhci_rx("Leave\n");
116}
117
118static struct vhci_unlink *dequeue_pending_unlink(struct vhci_device *vdev,
119 struct usbip_header *pdu)
120{
121 struct vhci_unlink *unlink, *tmp;

--- 16 unchanged lines hidden (view full) ---

138 spin_unlock_irqrestore(&vdev->priv_lock, flags);
139
140 return NULL;
141}
142
143static void vhci_recv_ret_unlink(struct vhci_device *vdev,
144 struct usbip_header *pdu)
145{
146 struct vhci_hcd *vhci = vdev_to_vhci(vdev);
145 struct vhci_unlink *unlink;
146 struct urb *urb;
147 unsigned long flags;
148
149 usbip_dump_header(pdu);
150
151 unlink = dequeue_pending_unlink(vdev, pdu);
152 if (!unlink) {

--- 16 unchanged lines hidden (view full) ---

169 pdu->base.seqnum);
170 } else {
171 usbip_dbg_vhci_rx("now giveback urb %p\n", urb);
172
173 /* If unlink is successful, status is -ECONNRESET */
174 urb->status = pdu->u.ret_unlink.status;
175 pr_info("urb->status %d\n", urb->status);
176
147 struct vhci_unlink *unlink;
148 struct urb *urb;
149 unsigned long flags;
150
151 usbip_dump_header(pdu);
152
153 unlink = dequeue_pending_unlink(vdev, pdu);
154 if (!unlink) {

--- 16 unchanged lines hidden (view full) ---

171 pdu->base.seqnum);
172 } else {
173 usbip_dbg_vhci_rx("now giveback urb %p\n", urb);
174
175 /* If unlink is successful, status is -ECONNRESET */
176 urb->status = pdu->u.ret_unlink.status;
177 pr_info("urb->status %d\n", urb->status);
178
177 spin_lock_irqsave(&the_controller->lock, flags);
178 usb_hcd_unlink_urb_from_ep(vhci_to_hcd(the_controller), urb);
179 spin_unlock_irqrestore(&the_controller->lock, flags);
179 spin_lock_irqsave(&vhci->lock, flags);
180 usb_hcd_unlink_urb_from_ep(vhci_to_hcd(vhci), urb);
181 spin_unlock_irqrestore(&vhci->lock, flags);
180
182
181 usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb,
182 urb->status);
183 usb_hcd_giveback_urb(vhci_to_hcd(vhci), urb, urb->status);
183 }
184
185 kfree(unlink);
186}
187
188static int vhci_priv_tx_empty(struct vhci_device *vdev)
189{
190 int empty = 0;

--- 82 unchanged lines hidden ---
184 }
185
186 kfree(unlink);
187}
188
189static int vhci_priv_tx_empty(struct vhci_device *vdev)
190{
191 int empty = 0;

--- 82 unchanged lines hidden ---