bpa10x.c (95a0c7c2d6cfde3fb5fdb713428ed0df4d6bdd58) bpa10x.c (2064ee332e4c1b7495cf68b84355c213d8fe71fd)
1/*
2 *
3 * Digianswer Bluetooth USB driver
4 *
5 * Copyright (C) 2004-2007 Marcel Holtmann <marcel@holtmann.org>
6 *
7 *
8 * This program is free software; you can redistribute it and/or modify

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

112 bool idx = usb_pipebulk(urb->pipe);
113
114 data->rx_skb[idx] = h4_recv_buf(hdev, data->rx_skb[idx],
115 urb->transfer_buffer,
116 urb->actual_length,
117 bpa10x_recv_pkts,
118 ARRAY_SIZE(bpa10x_recv_pkts));
119 if (IS_ERR(data->rx_skb[idx])) {
1/*
2 *
3 * Digianswer Bluetooth USB driver
4 *
5 * Copyright (C) 2004-2007 Marcel Holtmann <marcel@holtmann.org>
6 *
7 *
8 * This program is free software; you can redistribute it and/or modify

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

112 bool idx = usb_pipebulk(urb->pipe);
113
114 data->rx_skb[idx] = h4_recv_buf(hdev, data->rx_skb[idx],
115 urb->transfer_buffer,
116 urb->actual_length,
117 bpa10x_recv_pkts,
118 ARRAY_SIZE(bpa10x_recv_pkts));
119 if (IS_ERR(data->rx_skb[idx])) {
120 BT_ERR("%s corrupted event packet", hdev->name);
120 bt_dev_err(hdev, "corrupted event packet");
121 hdev->stat.err_rx++;
122 data->rx_skb[idx] = NULL;
123 }
124 }
125
126 usb_anchor_urb(urb, &data->rx_anchor);
127
128 err = usb_submit_urb(urb, GFP_ATOMIC);
129 if (err < 0) {
121 hdev->stat.err_rx++;
122 data->rx_skb[idx] = NULL;
123 }
124 }
125
126 usb_anchor_urb(urb, &data->rx_anchor);
127
128 err = usb_submit_urb(urb, GFP_ATOMIC);
129 if (err < 0) {
130 BT_ERR("%s urb %p failed to resubmit (%d)",
131 hdev->name, urb, -err);
130 bt_dev_err(hdev, "urb %p failed to resubmit (%d)", urb, -err);
132 usb_unanchor_urb(urb);
133 }
134}
135
136static inline int bpa10x_submit_intr_urb(struct hci_dev *hdev)
137{
138 struct bpa10x_data *data = hci_get_drvdata(hdev);
139 struct urb *urb;

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

159 bpa10x_rx_complete, hdev, 1);
160
161 urb->transfer_flags |= URB_FREE_BUFFER;
162
163 usb_anchor_urb(urb, &data->rx_anchor);
164
165 err = usb_submit_urb(urb, GFP_KERNEL);
166 if (err < 0) {
131 usb_unanchor_urb(urb);
132 }
133}
134
135static inline int bpa10x_submit_intr_urb(struct hci_dev *hdev)
136{
137 struct bpa10x_data *data = hci_get_drvdata(hdev);
138 struct urb *urb;

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

158 bpa10x_rx_complete, hdev, 1);
159
160 urb->transfer_flags |= URB_FREE_BUFFER;
161
162 usb_anchor_urb(urb, &data->rx_anchor);
163
164 err = usb_submit_urb(urb, GFP_KERNEL);
165 if (err < 0) {
167 BT_ERR("%s urb %p submission failed (%d)",
168 hdev->name, urb, -err);
166 bt_dev_err(hdev, "urb %p submission failed (%d)", urb, -err);
169 usb_unanchor_urb(urb);
170 }
171
172 usb_free_urb(urb);
173
174 return err;
175}
176

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

200 buf, size, bpa10x_rx_complete, hdev);
201
202 urb->transfer_flags |= URB_FREE_BUFFER;
203
204 usb_anchor_urb(urb, &data->rx_anchor);
205
206 err = usb_submit_urb(urb, GFP_KERNEL);
207 if (err < 0) {
167 usb_unanchor_urb(urb);
168 }
169
170 usb_free_urb(urb);
171
172 return err;
173}
174

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

198 buf, size, bpa10x_rx_complete, hdev);
199
200 urb->transfer_flags |= URB_FREE_BUFFER;
201
202 usb_anchor_urb(urb, &data->rx_anchor);
203
204 err = usb_submit_urb(urb, GFP_KERNEL);
205 if (err < 0) {
208 BT_ERR("%s urb %p submission failed (%d)",
209 hdev->name, urb, -err);
206 bt_dev_err(hdev, "urb %p submission failed (%d)", urb, -err);
210 usb_unanchor_urb(urb);
211 }
212
213 usb_free_urb(urb);
214
215 return err;
216}
217

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

267
268 BT_DBG("%s", hdev->name);
269
270 /* Read revision string */
271 skb = __hci_cmd_sync(hdev, 0xfc0e, sizeof(req), req, HCI_INIT_TIMEOUT);
272 if (IS_ERR(skb))
273 return PTR_ERR(skb);
274
207 usb_unanchor_urb(urb);
208 }
209
210 usb_free_urb(urb);
211
212 return err;
213}
214

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

264
265 BT_DBG("%s", hdev->name);
266
267 /* Read revision string */
268 skb = __hci_cmd_sync(hdev, 0xfc0e, sizeof(req), req, HCI_INIT_TIMEOUT);
269 if (IS_ERR(skb))
270 return PTR_ERR(skb);
271
275 BT_INFO("%s: %s", hdev->name, (char *)(skb->data + 1));
272 bt_dev_info(hdev, "%s", (char *)(skb->data + 1));
276
277 hci_set_fw_info(hdev, "%s", skb->data + 1);
278
279 kfree_skb(skb);
280 return 0;
281}
282
283static int bpa10x_send_frame(struct hci_dev *hdev, struct sk_buff *skb)

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

343 usb_free_urb(urb);
344 return -EILSEQ;
345 }
346
347 usb_anchor_urb(urb, &data->tx_anchor);
348
349 err = usb_submit_urb(urb, GFP_ATOMIC);
350 if (err < 0) {
273
274 hci_set_fw_info(hdev, "%s", skb->data + 1);
275
276 kfree_skb(skb);
277 return 0;
278}
279
280static int bpa10x_send_frame(struct hci_dev *hdev, struct sk_buff *skb)

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

340 usb_free_urb(urb);
341 return -EILSEQ;
342 }
343
344 usb_anchor_urb(urb, &data->tx_anchor);
345
346 err = usb_submit_urb(urb, GFP_ATOMIC);
347 if (err < 0) {
351 BT_ERR("%s urb %p submission failed", hdev->name, urb);
348 bt_dev_err(hdev, "urb %p submission failed", urb);
352 kfree(urb->setup_packet);
353 usb_unanchor_urb(urb);
354 }
355
356 usb_free_urb(urb);
357
358 return 0;
359}

--- 103 unchanged lines hidden ---
349 kfree(urb->setup_packet);
350 usb_unanchor_urb(urb);
351 }
352
353 usb_free_urb(urb);
354
355 return 0;
356}

--- 103 unchanged lines hidden ---