diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2013-10-10 19:52:43 -0400 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2013-10-11 03:45:34 -0400 |
commit | e1a26170692dc1e5fbe0ccd98ef86cc9fcd31a64 (patch) | |
tree | e0960ade9f09c39dc44c92604e7f758760ea1fce /drivers/bluetooth/hci_ll.c | |
parent | 8909f6d2c450d0a878bcb1d1184ed0114c5724c9 (diff) |
Bluetooth: Provide hdev parameter to hci_recv_frame() driver callback
To avoid casting skb->dev into hdev, just let the drivers provide
the hdev directly when calling hci_recv_frame() function.
This patch also fixes up all drivers to provide the hdev.
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'drivers/bluetooth/hci_ll.c')
-rw-r--r-- | drivers/bluetooth/hci_ll.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/bluetooth/hci_ll.c b/drivers/bluetooth/hci_ll.c index cfc767938589..58a9541feba6 100644 --- a/drivers/bluetooth/hci_ll.c +++ b/drivers/bluetooth/hci_ll.c | |||
@@ -346,14 +346,14 @@ static int ll_enqueue(struct hci_uart *hu, struct sk_buff *skb) | |||
346 | return 0; | 346 | return 0; |
347 | } | 347 | } |
348 | 348 | ||
349 | static inline int ll_check_data_len(struct ll_struct *ll, int len) | 349 | static inline int ll_check_data_len(struct hci_dev *hdev, struct ll_struct *ll, int len) |
350 | { | 350 | { |
351 | int room = skb_tailroom(ll->rx_skb); | 351 | int room = skb_tailroom(ll->rx_skb); |
352 | 352 | ||
353 | BT_DBG("len %d room %d", len, room); | 353 | BT_DBG("len %d room %d", len, room); |
354 | 354 | ||
355 | if (!len) { | 355 | if (!len) { |
356 | hci_recv_frame(ll->rx_skb); | 356 | hci_recv_frame(hdev, ll->rx_skb); |
357 | } else if (len > room) { | 357 | } else if (len > room) { |
358 | BT_ERR("Data length is too large"); | 358 | BT_ERR("Data length is too large"); |
359 | kfree_skb(ll->rx_skb); | 359 | kfree_skb(ll->rx_skb); |
@@ -395,7 +395,7 @@ static int ll_recv(struct hci_uart *hu, void *data, int count) | |||
395 | switch (ll->rx_state) { | 395 | switch (ll->rx_state) { |
396 | case HCILL_W4_DATA: | 396 | case HCILL_W4_DATA: |
397 | BT_DBG("Complete data"); | 397 | BT_DBG("Complete data"); |
398 | hci_recv_frame(ll->rx_skb); | 398 | hci_recv_frame(hu->hdev, ll->rx_skb); |
399 | 399 | ||
400 | ll->rx_state = HCILL_W4_PACKET_TYPE; | 400 | ll->rx_state = HCILL_W4_PACKET_TYPE; |
401 | ll->rx_skb = NULL; | 401 | ll->rx_skb = NULL; |
@@ -406,7 +406,7 @@ static int ll_recv(struct hci_uart *hu, void *data, int count) | |||
406 | 406 | ||
407 | BT_DBG("Event header: evt 0x%2.2x plen %d", eh->evt, eh->plen); | 407 | BT_DBG("Event header: evt 0x%2.2x plen %d", eh->evt, eh->plen); |
408 | 408 | ||
409 | ll_check_data_len(ll, eh->plen); | 409 | ll_check_data_len(hu->hdev, ll, eh->plen); |
410 | continue; | 410 | continue; |
411 | 411 | ||
412 | case HCILL_W4_ACL_HDR: | 412 | case HCILL_W4_ACL_HDR: |
@@ -415,7 +415,7 @@ static int ll_recv(struct hci_uart *hu, void *data, int count) | |||
415 | 415 | ||
416 | BT_DBG("ACL header: dlen %d", dlen); | 416 | BT_DBG("ACL header: dlen %d", dlen); |
417 | 417 | ||
418 | ll_check_data_len(ll, dlen); | 418 | ll_check_data_len(hu->hdev, ll, dlen); |
419 | continue; | 419 | continue; |
420 | 420 | ||
421 | case HCILL_W4_SCO_HDR: | 421 | case HCILL_W4_SCO_HDR: |
@@ -423,7 +423,7 @@ static int ll_recv(struct hci_uart *hu, void *data, int count) | |||
423 | 423 | ||
424 | BT_DBG("SCO header: dlen %d", sh->dlen); | 424 | BT_DBG("SCO header: dlen %d", sh->dlen); |
425 | 425 | ||
426 | ll_check_data_len(ll, sh->dlen); | 426 | ll_check_data_len(hu->hdev, ll, sh->dlen); |
427 | continue; | 427 | continue; |
428 | } | 428 | } |
429 | } | 429 | } |
@@ -494,7 +494,6 @@ static int ll_recv(struct hci_uart *hu, void *data, int count) | |||
494 | return -ENOMEM; | 494 | return -ENOMEM; |
495 | } | 495 | } |
496 | 496 | ||
497 | ll->rx_skb->dev = (void *) hu->hdev; | ||
498 | bt_cb(ll->rx_skb)->pkt_type = type; | 497 | bt_cb(ll->rx_skb)->pkt_type = type; |
499 | } | 498 | } |
500 | 499 | ||