Hi Marcel, On Tue, Aug 16, 2016 at 09:05:19AM +0200, Marcel Holtmann wrote: > Hi Sebatian, > > > This will be used by Nokia's H4+ protocol, which > > adds padding to packets to reach word alignment. > > --- > > drivers/bluetooth/hci_h4.c | 10 ++++++++++ > > drivers/bluetooth/hci_uart.h | 1 + > > 2 files changed, 11 insertions(+) > > > > diff --git a/drivers/bluetooth/hci_h4.c b/drivers/bluetooth/hci_h4.c > > index 635597b6e168..a934e4eb692b 100644 > > --- a/drivers/bluetooth/hci_h4.c > > +++ b/drivers/bluetooth/hci_h4.c > > @@ -253,11 +253,21 @@ struct sk_buff *h4_recv_buf(struct hci_dev *hdev, struct sk_buff *skb, > > } > > > > if (!dlen) { > > + if ((&pkts[i])->wordaligned && !(skb->len % 2)) { > > + buffer++; > > + count--; > > + } > > + > > /* No more data, complete frame */ > > (&pkts[i])->recv(hdev, skb); > > skb = NULL; > > } > > } else { > > + if ((&pkts[i])->wordaligned && !(skb->len % 2)) { > > + buffer++; > > + count--; > > + } > > + > > /* Complete frame */ > > (&pkts[i])->recv(hdev, skb); > > skb = NULL; > > diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h > > index 839bad1d8152..a7d67aec3632 100644 > > --- a/drivers/bluetooth/hci_uart.h > > +++ b/drivers/bluetooth/hci_uart.h > > @@ -121,6 +121,7 @@ struct h4_recv_pkt { > > u8 loff; /* Data length offset in header */ > > u8 lsize; /* Data length field size */ > > u16 maxlen; /* Max overall packet length */ > > + bool wordaligned; /* packets are word aligned */ > > I wonder if not a u8 align would be a way better choice here. We > set it to 1 for all existing packet types. And the Nokia driver > can use 2 here. Sounds less hacky than my approach. Also it made me notice, that my code is not safe, since the buffer size is not checked. I will use u8 align and fix the buffer size check. -- Sebastian
Attachment:
signature.asc
Description: PGP signature