Skip to content

Commit

Permalink
Bluetooth: Add hdev parameter to hdev->send driver callback
Browse files Browse the repository at this point in the history
Instead of masking hdev inside the skb->dev parameter, hand it
directly to the driver as a parameter to hdev->send. This makes
the driver interface more clear and simpler.

This patch fixes all drivers to accept and handle the new parameter
of hdev->send callback. Special care has been taken for bpa10x
and btusb drivers that require having skb->dev set to hdev for
the URB transmit complete handlers.

Signed-off-by: Marcel Holtmann <[email protected]>
Signed-off-by: Johan Hedberg <[email protected]>
  • Loading branch information
holtmann authored and Johan Hedberg committed Oct 11, 2013
1 parent e1a2617 commit 7bd8f09
Show file tree
Hide file tree
Showing 15 changed files with 18 additions and 32 deletions.
3 changes: 1 addition & 2 deletions drivers/bluetooth/bfusb.c
Original file line number Diff line number Diff line change
Expand Up @@ -464,9 +464,8 @@ static int bfusb_close(struct hci_dev *hdev)
return 0;
}

static int bfusb_send_frame(struct sk_buff *skb)
static int bfusb_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
struct bfusb_data *data;
struct sk_buff *nskb;
unsigned char buf[3];
Expand Down
3 changes: 1 addition & 2 deletions drivers/bluetooth/bluecard_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -658,10 +658,9 @@ static int bluecard_hci_close(struct hci_dev *hdev)
}


static int bluecard_hci_send_frame(struct sk_buff *skb)
static int bluecard_hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
bluecard_info_t *info;
struct hci_dev *hdev = (struct hci_dev *)(skb->dev);

if (!hdev) {
BT_ERR("Frame for unknown HCI device (hdev=NULL)");
Expand Down
5 changes: 3 additions & 2 deletions drivers/bluetooth/bpa10x.c
Original file line number Diff line number Diff line change
Expand Up @@ -350,9 +350,8 @@ static int bpa10x_flush(struct hci_dev *hdev)
return 0;
}

static int bpa10x_send_frame(struct sk_buff *skb)
static int bpa10x_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
struct bpa10x_data *data = hci_get_drvdata(hdev);
struct usb_ctrlrequest *dr;
struct urb *urb;
Expand All @@ -364,6 +363,8 @@ static int bpa10x_send_frame(struct sk_buff *skb)
if (!test_bit(HCI_RUNNING, &hdev->flags))
return -EBUSY;

skb->dev = (void *) hdev;

urb = usb_alloc_urb(0, GFP_ATOMIC);
if (!urb)
return -ENOMEM;
Expand Down
3 changes: 1 addition & 2 deletions drivers/bluetooth/bt3c_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -415,10 +415,9 @@ static int bt3c_hci_close(struct hci_dev *hdev)
}


static int bt3c_hci_send_frame(struct sk_buff *skb)
static int bt3c_hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
bt3c_info_t *info;
struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
unsigned long flags;

if (!hdev) {
Expand Down
4 changes: 1 addition & 3 deletions drivers/bluetooth/btmrvl_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,6 @@ static int btmrvl_send_sync_cmd(struct btmrvl_private *priv, u16 cmd_no,

bt_cb(skb)->pkt_type = MRVL_VENDOR_PKT;

skb->dev = (void *) priv->btmrvl_dev.hcidev;
skb_queue_head(&priv->adapter->tx_queue, skb);

priv->btmrvl_dev.sendcmdflag = true;
Expand Down Expand Up @@ -356,9 +355,8 @@ static void btmrvl_free_adapter(struct btmrvl_private *priv)
priv->adapter = NULL;
}

static int btmrvl_send_frame(struct sk_buff *skb)
static int btmrvl_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
struct btmrvl_private *priv = NULL;

BT_DBG("type=%d, len=%d", skb->pkt_type, skb->len);
Expand Down
3 changes: 1 addition & 2 deletions drivers/bluetooth/btsdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,8 @@ static int btsdio_flush(struct hci_dev *hdev)
return 0;
}

static int btsdio_send_frame(struct sk_buff *skb)
static int btsdio_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
struct btsdio_data *data = hci_get_drvdata(hdev);

BT_DBG("%s", hdev->name);
Expand Down
3 changes: 1 addition & 2 deletions drivers/bluetooth/btuart_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -423,10 +423,9 @@ static int btuart_hci_close(struct hci_dev *hdev)
}


static int btuart_hci_send_frame(struct sk_buff *skb)
static int btuart_hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
btuart_info_t *info;
struct hci_dev *hdev = (struct hci_dev *)(skb->dev);

if (!hdev) {
BT_ERR("Frame for unknown HCI device (hdev=NULL)");
Expand Down
5 changes: 3 additions & 2 deletions drivers/bluetooth/btusb.c
Original file line number Diff line number Diff line change
Expand Up @@ -716,9 +716,8 @@ static int btusb_flush(struct hci_dev *hdev)
return 0;
}

static int btusb_send_frame(struct sk_buff *skb)
static int btusb_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
struct btusb_data *data = hci_get_drvdata(hdev);
struct usb_ctrlrequest *dr;
struct urb *urb;
Expand All @@ -730,6 +729,8 @@ static int btusb_send_frame(struct sk_buff *skb)
if (!test_bit(HCI_RUNNING, &hdev->flags))
return -EBUSY;

skb->dev = (void *) hdev;

switch (bt_cb(skb)->pkt_type) {
case HCI_COMMAND_PKT:
urb = usb_alloc_urb(0, GFP_ATOMIC);
Expand Down
5 changes: 1 addition & 4 deletions drivers/bluetooth/btwilink.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,14 +251,11 @@ static int ti_st_close(struct hci_dev *hdev)
return err;
}

static int ti_st_send_frame(struct sk_buff *skb)
static int ti_st_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_dev *hdev;
struct ti_st *hst;
long len;

hdev = (struct hci_dev *)skb->dev;

if (!test_bit(HCI_RUNNING, &hdev->flags))
return -EBUSY;

Expand Down
3 changes: 1 addition & 2 deletions drivers/bluetooth/dtl1_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -382,10 +382,9 @@ static int dtl1_hci_close(struct hci_dev *hdev)
}


static int dtl1_hci_send_frame(struct sk_buff *skb)
static int dtl1_hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
dtl1_info_t *info;
struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
struct sk_buff *s;
nsh_t nsh;

Expand Down
3 changes: 1 addition & 2 deletions drivers/bluetooth/hci_ldisc.c
Original file line number Diff line number Diff line change
Expand Up @@ -234,9 +234,8 @@ static int hci_uart_close(struct hci_dev *hdev)
}

/* Send frames from HCI layer */
static int hci_uart_send_frame(struct sk_buff *skb)
static int hci_uart_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_dev* hdev = (struct hci_dev *) skb->dev;
struct hci_uart *hu;

if (!hdev) {
Expand Down
1 change: 0 additions & 1 deletion drivers/bluetooth/hci_ll.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,6 @@ static int send_hcill_cmd(u8 cmd, struct hci_uart *hu)
/* prepare packet */
hcill_packet = (struct hcill_cmd *) skb_put(skb, 1);
hcill_packet->cmd = cmd;
skb->dev = (void *) hu->hdev;

/* send packet */
skb_queue_tail(&ll->txq, skb);
Expand Down
3 changes: 1 addition & 2 deletions drivers/bluetooth/hci_vhci.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,8 @@ static int vhci_flush(struct hci_dev *hdev)
return 0;
}

static int vhci_send_frame(struct sk_buff *skb)
static int vhci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_dev* hdev = (struct hci_dev *) skb->dev;
struct vhci_data *data;

if (!hdev) {
Expand Down
2 changes: 1 addition & 1 deletion include/net/bluetooth/hci_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ struct hci_dev {
int (*close)(struct hci_dev *hdev);
int (*flush)(struct hci_dev *hdev);
int (*setup)(struct hci_dev *hdev);
int (*send)(struct sk_buff *skb);
int (*send)(struct hci_dev *hdev, struct sk_buff *skb);
void (*notify)(struct hci_dev *hdev, unsigned int evt);
};

Expand Down
4 changes: 1 addition & 3 deletions net/bluetooth/hci_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -2713,9 +2713,7 @@ static void hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
/* Get rid of skb owner, prior to sending to the driver. */
skb_orphan(skb);

skb->dev = (void *) hdev;

if (hdev->send(skb) < 0)
if (hdev->send(hdev, skb) < 0)
BT_ERR("%s sending frame failed", hdev->name);
}

Expand Down

0 comments on commit 7bd8f09

Please sign in to comment.