From: "Gustavo F. Padovan" <gustavo@padovan.org>
To: suraj <suraj@atheros.com>
Cc: linux-bluetooth@vger.kernel.org, marcel@holtmann.org,
Luis.Rodriguez@Atheros.com, Jothikumar.Mothilal@Atheros.com
Subject: Re: [PATCH v4 3/3] Implemented HCI frame reassembly for Rx from stream
Date: Fri, 9 Jul 2010 09:59:12 -0300 [thread overview]
Message-ID: <20100709125912.GA22985@vigoh> (raw)
In-Reply-To: <1278672821.4048.24.camel@atheros013-desktop>
Hi Suraj,
* suraj <suraj@atheros.com> [2010-07-09 16:23:41 +0530]:
> Implemented frame reassembly implementation for reassembling fragments
> received from stream.
>
> Signed-off-by: Suraj Sumangala <suraj@atheros.com>
> ---
> include/net/bluetooth/hci_core.h | 2 +
> net/bluetooth/hci_core.c | 43
> ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 45 insertions(+), 0 deletions(-)
>
> diff --git a/include/net/bluetooth/hci_core.h
> b/include/net/bluetooth/hci_core.h
> index e42f6ed..cd89d66 100644
> --- a/include/net/bluetooth/hci_core.h
> +++ b/include/net/bluetooth/hci_core.h
> @@ -119,6 +119,7 @@ struct hci_dev {
>
> struct sk_buff *sent_cmd;
> struct sk_buff *reassembly[3];
> + struct sk_buff *stream_reassembly;
>
> struct mutex req_lock;
> wait_queue_head_t req_wait_q;
> @@ -428,6 +429,7 @@ void hci_event_packet(struct hci_dev *hdev, struct
> sk_buff *skb);
>
> int hci_recv_frame(struct sk_buff *skb);
> int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int
> count);
> +int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int
> count);
>
> int hci_register_sysfs(struct hci_dev *hdev);
> void hci_unregister_sysfs(struct hci_dev *hdev);
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index db6ca71..ee75c42 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -916,6 +916,8 @@ int hci_register_dev(struct hci_dev *hdev)
> for (i = 0; i < 3; i++)
> hdev->reassembly[i] = NULL;
>
> + hdev->stream_reassembly = NULL;
> +
> init_waitqueue_head(&hdev->req_wait_q);
> mutex_init(&hdev->req_lock);
>
> @@ -973,6 +975,8 @@ int hci_unregister_dev(struct hci_dev *hdev)
> for (i = 0; i < 3; i++)
> kfree_skb(hdev->reassembly[i]);
>
> + kfree_skb(hdev->stream_reassembly);
> +
> hci_notify(hdev, HCI_DEV_UNREG);
>
> if (hdev->rfkill) {
> @@ -1145,6 +1149,45 @@ static int hci_reassembly(struct hci_dev *hdev,
> int type, void *data,
>
> return 0;
> }
> +
> +#define __stream_reassembly(hdev) ((hdev)->stream_reassembly)
That's pointless. Your macro has about the same length of
hdev->stream_reassembly.
> +
> +int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int
> count)
> +{
> + int type;
> + int remaining = 0;
> + int err = 0;
> +
> + do {
> + struct sk_buff *skb = __stream_reassembly(hdev);
> + if (!skb) {
> + struct { char type; } *pkt;
> +
> + /* Start of the frame */
> + pkt = data;
> + type = pkt->type;
> +
> + data++;
> + count--;
> + } else
> + type = bt_cb(skb)->pkt_type;
> +
> + err = hci_reassembly(hdev, type, data, count, &skb, &remaining);
> +
> + if (err < 0)
> + return err;
> +
> + __stream_reassembly(hdev) = skb;
> +
> + data += (count - remaining);
> + count = remaining;
> +
> + } while (count);
> +
> + return err;
> +}
> +EXPORT_SYMBOL(hci_recv_stream_fragment);
> +
> /* Receive packet type fragment */
> #define __reassembly(hdev, type) ((hdev)->reassembly[(type) - 2])
>
> --
> 1.7.0.4
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Gustavo F. Padovan
http://padovan.org
next prev parent reply other threads:[~2010-07-09 12:59 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-09 10:49 [PATCH v4 1/3] Implements hci_reassembly to reassemble Rx packets suraj
2010-07-09 10:51 ` [PATCH v4 2/3] Modified hci_recv_fragment() to use hci_reassembly suraj
2010-07-09 10:53 ` [PATCH v4 3/3] Implemented HCI frame reassembly for Rx from stream suraj
2010-07-09 12:59 ` Gustavo F. Padovan [this message]
2010-07-09 13:16 ` [PATCH v4 1/3] Implements hci_reassembly to reassemble Rx packets Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100709125912.GA22985@vigoh \
--to=gustavo@padovan.org \
--cc=Jothikumar.Mothilal@Atheros.com \
--cc=Luis.Rodriguez@Atheros.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcel@holtmann.org \
--cc=suraj@atheros.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.