* [RFC 1/5] Bluetooth: AMP: Check that AMP is present and active
@ 2012-11-28 15:59 Andrei Emeltchenko
2012-11-28 15:59 ` [RFC 2/5] Bluetooth: Refactor l2cap_send_disconn_req Andrei Emeltchenko
` (3 more replies)
0 siblings, 4 replies; 14+ messages in thread
From: Andrei Emeltchenko @ 2012-11-28 15:59 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Before starting quering remote AMP controllers make sure
that there is local active AMP controller.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
---
include/net/bluetooth/hci_core.h | 16 ++++++++++++++++
net/bluetooth/l2cap_core.c | 1 +
2 files changed, 17 insertions(+)
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 2f2b743..014a2ea 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -779,6 +779,22 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
#define lmp_host_le_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE)
#define lmp_host_le_br_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE_BREDR)
+/* returns true if at least one AMP active */
+static inline bool hci_amp_capable(void)
+{
+ struct hci_dev *hdev;
+ bool ret = false;
+
+ read_lock(&hci_dev_list_lock);
+ list_for_each_entry(hdev, &hci_dev_list, list)
+ if (hdev->amp_type == HCI_AMP &&
+ test_bit(HCI_UP, &hdev->flags))
+ ret = true;
+ read_unlock(&hci_dev_list_lock);
+
+ return ret;
+}
+
/* ----- HCI protocols ----- */
#define HCI_PROTO_DEFER 0x01
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index b52f66d..39e144f 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -1014,6 +1014,7 @@ static bool __amp_capable(struct l2cap_chan *chan)
struct l2cap_conn *conn = chan->conn;
if (enable_hs &&
+ hci_amp_capable() &&
chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED &&
conn->fixed_chan_mask & L2CAP_FC_A2MP)
return true;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 14+ messages in thread* [RFC 2/5] Bluetooth: Refactor l2cap_send_disconn_req 2012-11-28 15:59 [RFC 1/5] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko @ 2012-11-28 15:59 ` Andrei Emeltchenko 2012-11-28 15:59 ` [RFC 3/5] Bluetooth: Fix missing L2CAP EWS Conf parameter Andrei Emeltchenko ` (2 subsequent siblings) 3 siblings, 0 replies; 14+ messages in thread From: Andrei Emeltchenko @ 2012-11-28 15:59 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> l2cap_send_disconn_req takes 3 parameters of which conn might be derived from chan. Make this conversion inside l2cap_send_disconn_req. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- net/bluetooth/l2cap_core.c | 56 ++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 39e144f..d8cffdb 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -53,8 +53,7 @@ static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data); static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data); -static void l2cap_send_disconn_req(struct l2cap_conn *conn, - struct l2cap_chan *chan, int err); +static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err); static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control, struct sk_buff_head *skbs, u8 event); @@ -632,7 +631,7 @@ void l2cap_chan_close(struct l2cap_chan *chan, int reason) if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && conn->hcon->type == ACL_LINK) { __set_chan_timer(chan, sk->sk_sndtimeo); - l2cap_send_disconn_req(conn, chan, reason); + l2cap_send_disconn_req(chan, reason); } else l2cap_chan_del(chan, reason); break; @@ -1181,10 +1180,10 @@ static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask) } } -static void l2cap_send_disconn_req(struct l2cap_conn *conn, - struct l2cap_chan *chan, int err) +static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err) { struct sock *sk = chan->sk; + struct l2cap_conn *conn = chan->conn; struct l2cap_disconn_req req; if (!conn) @@ -1961,7 +1960,7 @@ static void l2cap_ertm_resend(struct l2cap_chan *chan) if (chan->max_tx != 0 && bt_cb(skb)->control.retries > chan->max_tx) { BT_DBG("Retry limit exceeded (%d)", chan->max_tx); - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); l2cap_seq_list_clear(&chan->retrans_list); break; } @@ -2667,7 +2666,7 @@ static void l2cap_tx_state_wait_f(struct l2cap_chan *chan, __set_monitor_timer(chan); chan->retry_count++; } else { - l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED); + l2cap_send_disconn_req(chan, ECONNABORTED); } break; default: @@ -3878,7 +3877,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, /* Complete config. */ len = l2cap_parse_conf_req(chan, rsp); if (len < 0) { - l2cap_send_disconn_req(conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); goto unlock; } @@ -3900,7 +3899,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, err = l2cap_ertm_init(chan); if (err < 0) - l2cap_send_disconn_req(chan->conn, chan, -err); + l2cap_send_disconn_req(chan, -err); else l2cap_chan_ready(chan); @@ -3968,7 +3967,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, len = l2cap_parse_conf_rsp(chan, rsp->data, len, buf, &result); if (len < 0) { - l2cap_send_disconn_req(conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); goto done; } @@ -3989,7 +3988,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, char req[64]; if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) { - l2cap_send_disconn_req(conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); goto done; } @@ -3998,7 +3997,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, len = l2cap_parse_conf_rsp(chan, rsp->data, len, req, &result); if (len < 0) { - l2cap_send_disconn_req(conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); goto done; } @@ -4014,7 +4013,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, l2cap_chan_set_err(chan, ECONNRESET); __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT); - l2cap_send_disconn_req(conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); goto done; } @@ -4031,7 +4030,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, err = l2cap_ertm_init(chan); if (err < 0) - l2cap_send_disconn_req(chan->conn, chan, -err); + l2cap_send_disconn_req(chan, -err); else l2cap_chan_ready(chan); } @@ -4393,7 +4392,7 @@ static void l2cap_logical_fail(struct l2cap_chan *chan) /* Logical link setup failed */ if (chan->state != BT_CONNECTED) { /* Create channel failure, disconnect */ - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); return; } @@ -4436,7 +4435,7 @@ static void l2cap_logical_finish_create(struct l2cap_chan *chan, err = l2cap_ertm_init(chan); if (err < 0) - l2cap_send_disconn_req(chan->conn, chan, -err); + l2cap_send_disconn_req(chan, -err); else l2cap_chan_ready(chan); } @@ -5401,7 +5400,7 @@ static void l2cap_handle_srej(struct l2cap_chan *chan, if (control->reqseq == chan->next_tx_seq) { BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq); - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); return; } @@ -5415,7 +5414,7 @@ static void l2cap_handle_srej(struct l2cap_chan *chan, if (chan->max_tx != 0 && bt_cb(skb)->control.retries >= chan->max_tx) { BT_DBG("Retry limit exceeded (%d)", chan->max_tx); - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); return; } @@ -5459,7 +5458,7 @@ static void l2cap_handle_rej(struct l2cap_chan *chan, if (control->reqseq == chan->next_tx_seq) { BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq); - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); return; } @@ -5468,7 +5467,7 @@ static void l2cap_handle_rej(struct l2cap_chan *chan, if (chan->max_tx && skb && bt_cb(skb)->control.retries >= chan->max_tx) { BT_DBG("Retry limit exceeded (%d)", chan->max_tx); - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); return; } @@ -5652,8 +5651,7 @@ static int l2cap_rx_state_recv(struct l2cap_chan *chan, break; case L2CAP_TXSEQ_INVALID: default: - l2cap_send_disconn_req(chan->conn, chan, - ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); break; } break; @@ -5786,8 +5784,7 @@ static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan, break; case L2CAP_TXSEQ_INVALID: default: - l2cap_send_disconn_req(chan->conn, chan, - ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); break; } break; @@ -5982,7 +5979,7 @@ static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control, BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d", control->reqseq, chan->next_tx_seq, chan->expected_ack_seq); - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); } return err; @@ -6051,7 +6048,7 @@ static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb) len -= L2CAP_FCS_SIZE; if (len > chan->mps) { - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); goto drop; } @@ -6076,8 +6073,7 @@ static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb) } if (err) - l2cap_send_disconn_req(chan->conn, chan, - ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); } else { const u8 rx_func_to_event[4] = { L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ, @@ -6094,7 +6090,7 @@ static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb) if (len != 0) { BT_ERR("Trailing bytes: %d in sframe", len); - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); goto drop; } @@ -6105,7 +6101,7 @@ static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb) event = rx_func_to_event[control->super]; if (l2cap_rx(chan, control, skb, event)) - l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); + l2cap_send_disconn_req(chan, ECONNRESET); } return 0; -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [RFC 3/5] Bluetooth: Fix missing L2CAP EWS Conf parameter 2012-11-28 15:59 [RFC 1/5] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko 2012-11-28 15:59 ` [RFC 2/5] Bluetooth: Refactor l2cap_send_disconn_req Andrei Emeltchenko @ 2012-11-28 15:59 ` Andrei Emeltchenko 2012-11-29 10:25 ` Gustavo Padovan 2012-11-28 15:59 ` [RFC 4/5] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp Andrei Emeltchenko 2012-11-28 15:59 ` [RFC 5/5] Bluetooth: AMP: Mark controller radio powered down after HCIDEVDOWN Andrei Emeltchenko 3 siblings, 1 reply; 14+ messages in thread From: Andrei Emeltchenko @ 2012-11-28 15:59 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> If L2CAP_FEAT_FCS is not supported we sould miss EWS option configuration because of break. Make code more readable by combining FCS configuration in the single block. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- net/bluetooth/l2cap_core.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index d8cffdb..f10e4be 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -3106,18 +3106,16 @@ done: if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) l2cap_add_opt_efs(&ptr, chan); - if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS)) - break; - - if (chan->fcs == L2CAP_FCS_NONE || - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { - chan->fcs = L2CAP_FCS_NONE; - l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); - } - if (test_bit(FLAG_EXT_CTRL, &chan->flags)) l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2, chan->tx_win); + + if (chan->conn->feat_mask & L2CAP_FEAT_FCS) + if (chan->fcs == L2CAP_FCS_NONE || + test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { + chan->fcs = L2CAP_FCS_NONE; + l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); + } break; case L2CAP_MODE_STREAMING: @@ -3139,14 +3137,12 @@ done: if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) l2cap_add_opt_efs(&ptr, chan); - if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS)) - break; - - if (chan->fcs == L2CAP_FCS_NONE || - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { - chan->fcs = L2CAP_FCS_NONE; - l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); - } + if (chan->conn->feat_mask & L2CAP_FEAT_FCS) + if (chan->fcs == L2CAP_FCS_NONE || + test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { + chan->fcs = L2CAP_FCS_NONE; + l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); + } break; } -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [RFC 3/5] Bluetooth: Fix missing L2CAP EWS Conf parameter 2012-11-28 15:59 ` [RFC 3/5] Bluetooth: Fix missing L2CAP EWS Conf parameter Andrei Emeltchenko @ 2012-11-29 10:25 ` Gustavo Padovan 2012-11-29 10:38 ` Andrei Emeltchenko 0 siblings, 1 reply; 14+ messages in thread From: Gustavo Padovan @ 2012-11-29 10:25 UTC (permalink / raw) To: Andrei Emeltchenko; +Cc: linux-bluetooth Hi Andrei, * Andrei Emeltchenko <Andrei.Emeltchenko.news@gmail.com> [2012-11-28 17:59:40 +0200]: > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > If L2CAP_FEAT_FCS is not supported we sould miss EWS option > configuration because of break. Make code more readable by > combining FCS configuration in the single block. > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > --- > net/bluetooth/l2cap_core.c | 30 +++++++++++++----------------- > 1 file changed, 13 insertions(+), 17 deletions(-) > > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c > index d8cffdb..f10e4be 100644 > --- a/net/bluetooth/l2cap_core.c > +++ b/net/bluetooth/l2cap_core.c > @@ -3106,18 +3106,16 @@ done: > if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) > l2cap_add_opt_efs(&ptr, chan); > > - if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS)) > - break; > - > - if (chan->fcs == L2CAP_FCS_NONE || > - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { > - chan->fcs = L2CAP_FCS_NONE; > - l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); > - } > - > if (test_bit(FLAG_EXT_CTRL, &chan->flags)) > l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2, > chan->tx_win); > + > + if (chan->conn->feat_mask & L2CAP_FEAT_FCS) > + if (chan->fcs == L2CAP_FCS_NONE || > + test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { > + chan->fcs = L2CAP_FCS_NONE; > + l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); Can you break a line here, please? > + } > break; > > case L2CAP_MODE_STREAMING: > @@ -3139,14 +3137,12 @@ done: > if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) > l2cap_add_opt_efs(&ptr, chan); > > - if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS)) > - break; > - > - if (chan->fcs == L2CAP_FCS_NONE || > - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { > - chan->fcs = L2CAP_FCS_NONE; > - l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); > - } > + if (chan->conn->feat_mask & L2CAP_FEAT_FCS) > + if (chan->fcs == L2CAP_FCS_NONE || > + test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { > + chan->fcs = L2CAP_FCS_NONE; > + l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); here as well. Gustavo ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RFC 3/5] Bluetooth: Fix missing L2CAP EWS Conf parameter 2012-11-29 10:25 ` Gustavo Padovan @ 2012-11-29 10:38 ` Andrei Emeltchenko 0 siblings, 0 replies; 14+ messages in thread From: Andrei Emeltchenko @ 2012-11-29 10:38 UTC (permalink / raw) To: Gustavo Padovan, linux-bluetooth Hi Gustavo, On Thu, Nov 29, 2012 at 08:25:17AM -0200, Gustavo Padovan wrote: > Hi Andrei, > > * Andrei Emeltchenko <Andrei.Emeltchenko.news@gmail.com> [2012-11-28 17:59:40 +0200]: > > > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > > > If L2CAP_FEAT_FCS is not supported we sould miss EWS option > > configuration because of break. Make code more readable by > > combining FCS configuration in the single block. > > > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > --- > > net/bluetooth/l2cap_core.c | 30 +++++++++++++----------------- > > 1 file changed, 13 insertions(+), 17 deletions(-) > > > > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c > > index d8cffdb..f10e4be 100644 > > --- a/net/bluetooth/l2cap_core.c > > +++ b/net/bluetooth/l2cap_core.c > > @@ -3106,18 +3106,16 @@ done: > > if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) > > l2cap_add_opt_efs(&ptr, chan); > > > > - if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS)) > > - break; > > - > > - if (chan->fcs == L2CAP_FCS_NONE || > > - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { > > - chan->fcs = L2CAP_FCS_NONE; > > - l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); > > - } > > - > > if (test_bit(FLAG_EXT_CTRL, &chan->flags)) > > l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2, > > chan->tx_win); > > + > > + if (chan->conn->feat_mask & L2CAP_FEAT_FCS) > > + if (chan->fcs == L2CAP_FCS_NONE || > > + test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { > > + chan->fcs = L2CAP_FCS_NONE; > > + l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); > > Can you break a line here, please? OK, will do that. Best regards Andrei Emeltchenko ^ permalink raw reply [flat|nested] 14+ messages in thread
* [RFC 4/5] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp 2012-11-28 15:59 [RFC 1/5] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko 2012-11-28 15:59 ` [RFC 2/5] Bluetooth: Refactor l2cap_send_disconn_req Andrei Emeltchenko 2012-11-28 15:59 ` [RFC 3/5] Bluetooth: Fix missing L2CAP EWS Conf parameter Andrei Emeltchenko @ 2012-11-28 15:59 ` Andrei Emeltchenko 2012-11-29 10:27 ` Gustavo Padovan 2012-11-28 15:59 ` [RFC 5/5] Bluetooth: AMP: Mark controller radio powered down after HCIDEVDOWN Andrei Emeltchenko 3 siblings, 1 reply; 14+ messages in thread From: Andrei Emeltchenko @ 2012-11-28 15:59 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Process L2CAP Config rsp Pending with FCS Option 0x00 (No FCS) which is sent by Motorola Windows 7 Bluetooth stack. The trace is shown below (all other options are skipped). ... < ACL data: handle 1 flags 0x00 dlen 48 L2CAP(s): Config req: dcid 0x0043 flags 0x00 clen 36 ... FCS Option 0x00 (No FCS) > ACL data: handle 1 flags 0x02 dlen 48 L2CAP(s): Config req: dcid 0x0041 flags 0x00 clen 36 ... FCS Option 0x01 (CRC16 Check) < ACL data: handle 1 flags 0x00 dlen 47 L2CAP(s): Config rsp: scid 0x0043 flags 0x00 result 4 clen 33 Pending ... > ACL data: handle 1 flags 0x02 dlen 50 L2CAP(s): Config rsp: scid 0x0041 flags 0x00 result 4 clen 36 Pending ... FCS Option 0x00 (No FCS) < ACL data: handle 1 flags 0x00 dlen 14 L2CAP(s): Config rsp: scid 0x0043 flags 0x00 result 0 clen 0 Success > ACL data: handle 1 flags 0x02 dlen 14 L2CAP(s): Config rsp: scid 0x0041 flags 0x00 result 0 clen 0 Success ... Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- net/bluetooth/l2cap_core.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index f10e4be..d30978b 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -3429,6 +3429,12 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs), (unsigned long) &efs); break; + + case L2CAP_CONF_FCS: + if (*result == L2CAP_CONF_PENDING) + if (val == L2CAP_FCS_NONE) + set_bit(CONF_NO_FCS_RECV, &chan->conf_state); + break; } } -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [RFC 4/5] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp 2012-11-28 15:59 ` [RFC 4/5] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp Andrei Emeltchenko @ 2012-11-29 10:27 ` Gustavo Padovan 0 siblings, 0 replies; 14+ messages in thread From: Gustavo Padovan @ 2012-11-29 10:27 UTC (permalink / raw) To: Andrei Emeltchenko; +Cc: linux-bluetooth Hi Andrei, * Andrei Emeltchenko <Andrei.Emeltchenko.news@gmail.com> [2012-11-28 17:59:41 +0200]: > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > Process L2CAP Config rsp Pending with FCS Option 0x00 (No FCS) > which is sent by Motorola Windows 7 Bluetooth stack. The trace > is shown below (all other options are skipped). > > ... > < ACL data: handle 1 flags 0x00 dlen 48 > L2CAP(s): Config req: dcid 0x0043 flags 0x00 clen 36 > ... > FCS Option 0x00 (No FCS) > > ACL data: handle 1 flags 0x02 dlen 48 > L2CAP(s): Config req: dcid 0x0041 flags 0x00 clen 36 > ... > FCS Option 0x01 (CRC16 Check) > < ACL data: handle 1 flags 0x00 dlen 47 > L2CAP(s): Config rsp: scid 0x0043 flags 0x00 result 4 clen 33 > Pending > ... > > ACL data: handle 1 flags 0x02 dlen 50 > L2CAP(s): Config rsp: scid 0x0041 flags 0x00 result 4 clen 36 > Pending > ... > FCS Option 0x00 (No FCS) > < ACL data: handle 1 flags 0x00 dlen 14 > L2CAP(s): Config rsp: scid 0x0043 flags 0x00 result 0 clen 0 > Success > > ACL data: handle 1 flags 0x02 dlen 14 > L2CAP(s): Config rsp: scid 0x0041 flags 0x00 result 0 clen 0 > Success > ... > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > --- > net/bluetooth/l2cap_core.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c > index f10e4be..d30978b 100644 > --- a/net/bluetooth/l2cap_core.c > +++ b/net/bluetooth/l2cap_core.c > @@ -3429,6 +3429,12 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, > l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs), > (unsigned long) &efs); > break; > + > + case L2CAP_CONF_FCS: > + if (*result == L2CAP_CONF_PENDING) > + if (val == L2CAP_FCS_NONE) > + set_bit(CONF_NO_FCS_RECV, &chan->conf_state); Please break a line here as well. Gustavo ^ permalink raw reply [flat|nested] 14+ messages in thread
* [RFC 5/5] Bluetooth: AMP: Mark controller radio powered down after HCIDEVDOWN 2012-11-28 15:59 [RFC 1/5] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko ` (2 preceding siblings ...) 2012-11-28 15:59 ` [RFC 4/5] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp Andrei Emeltchenko @ 2012-11-28 15:59 ` Andrei Emeltchenko 2012-11-29 10:34 ` Gustavo Padovan 3 siblings, 1 reply; 14+ messages in thread From: Andrei Emeltchenko @ 2012-11-28 15:59 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> After getting HCIDEVDOWN controller did not mark itself as 0x00 which means: "The Controller radio is available but is currently physically powered down". The result was even if the hdev was down we return in controller list value 0x01 "status 0x01 (Bluetooth only)". Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- net/bluetooth/hci_core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 69eb644..ec7d3a7 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -861,6 +861,9 @@ static int hci_dev_do_close(struct hci_dev *hdev) /* Clear flags */ hdev->flags = 0; + /* Controller radio is available but is currently powered down */ + hdev->amp_status = 0; + memset(hdev->eir, 0, sizeof(hdev->eir)); memset(hdev->dev_class, 0, sizeof(hdev->dev_class)); -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [RFC 5/5] Bluetooth: AMP: Mark controller radio powered down after HCIDEVDOWN 2012-11-28 15:59 ` [RFC 5/5] Bluetooth: AMP: Mark controller radio powered down after HCIDEVDOWN Andrei Emeltchenko @ 2012-11-29 10:34 ` Gustavo Padovan 2012-11-29 15:46 ` [PATCHv2 1/4] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko 0 siblings, 1 reply; 14+ messages in thread From: Gustavo Padovan @ 2012-11-29 10:34 UTC (permalink / raw) To: Andrei Emeltchenko; +Cc: linux-bluetooth Hi Andrei, * Andrei Emeltchenko <Andrei.Emeltchenko.news@gmail.com> [2012-11-28 17:59:42 +0200]: > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > After getting HCIDEVDOWN controller did not mark itself as 0x00 which > means: "The Controller radio is available but is currently physically > powered down". The result was even if the hdev was down we return > in controller list value 0x01 "status 0x01 (Bluetooth only)". > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > --- > net/bluetooth/hci_core.c | 3 +++ > 1 file changed, 3 insertions(+) Patches 2 and 5 of this series were applied. Thanks. Gustavo ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCHv2 1/4] Bluetooth: AMP: Check that AMP is present and active 2012-11-29 10:34 ` Gustavo Padovan @ 2012-11-29 15:46 ` Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 2/4] Bluetooth: Fix missing L2CAP EWS Conf parameter Andrei Emeltchenko ` (2 more replies) 0 siblings, 3 replies; 14+ messages in thread From: Andrei Emeltchenko @ 2012-11-29 15:46 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Before starting quering remote AMP controllers make sure that there is local active AMP controller. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- include/net/bluetooth/hci_core.h | 16 ++++++++++++++++ net/bluetooth/l2cap_core.c | 1 + 2 files changed, 17 insertions(+) diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 2f2b743..014a2ea 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -779,6 +779,22 @@ void hci_conn_del_sysfs(struct hci_conn *conn); #define lmp_host_le_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE) #define lmp_host_le_br_capable(dev) !!((dev)->host_features[0] & LMP_HOST_LE_BREDR) +/* returns true if at least one AMP active */ +static inline bool hci_amp_capable(void) +{ + struct hci_dev *hdev; + bool ret = false; + + read_lock(&hci_dev_list_lock); + list_for_each_entry(hdev, &hci_dev_list, list) + if (hdev->amp_type == HCI_AMP && + test_bit(HCI_UP, &hdev->flags)) + ret = true; + read_unlock(&hci_dev_list_lock); + + return ret; +} + /* ----- HCI protocols ----- */ #define HCI_PROTO_DEFER 0x01 diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index f7ee037..d8cffdb 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -1013,6 +1013,7 @@ static bool __amp_capable(struct l2cap_chan *chan) struct l2cap_conn *conn = chan->conn; if (enable_hs && + hci_amp_capable() && chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED && conn->fixed_chan_mask & L2CAP_FC_A2MP) return true; -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCHv2 2/4] Bluetooth: Fix missing L2CAP EWS Conf parameter 2012-11-29 15:46 ` [PATCHv2 1/4] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko @ 2012-11-29 15:46 ` Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 3/4] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 4/4] Bluetooth: trivial: Change NO_FCS_RECV to RECV_NO_FCS Andrei Emeltchenko 2 siblings, 0 replies; 14+ messages in thread From: Andrei Emeltchenko @ 2012-11-29 15:46 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> If L2CAP_FEAT_FCS is not supported we sould miss EWS option configuration because of break. Make code more readable by combining FCS configuration in the single block. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- net/bluetooth/l2cap_core.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index d8cffdb..d22d183 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -3106,18 +3106,17 @@ done: if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) l2cap_add_opt_efs(&ptr, chan); - if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS)) - break; - - if (chan->fcs == L2CAP_FCS_NONE || - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { - chan->fcs = L2CAP_FCS_NONE; - l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); - } - if (test_bit(FLAG_EXT_CTRL, &chan->flags)) l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2, chan->tx_win); + + if (chan->conn->feat_mask & L2CAP_FEAT_FCS) + if (chan->fcs == L2CAP_FCS_NONE || + test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { + chan->fcs = L2CAP_FCS_NONE; + l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, + chan->fcs); + } break; case L2CAP_MODE_STREAMING: @@ -3139,14 +3138,13 @@ done: if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) l2cap_add_opt_efs(&ptr, chan); - if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS)) - break; - - if (chan->fcs == L2CAP_FCS_NONE || - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { - chan->fcs = L2CAP_FCS_NONE; - l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); - } + if (chan->conn->feat_mask & L2CAP_FEAT_FCS) + if (chan->fcs == L2CAP_FCS_NONE || + test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { + chan->fcs = L2CAP_FCS_NONE; + l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, + chan->fcs); + } break; } -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCHv2 3/4] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp 2012-11-29 15:46 ` [PATCHv2 1/4] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 2/4] Bluetooth: Fix missing L2CAP EWS Conf parameter Andrei Emeltchenko @ 2012-11-29 15:46 ` Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 4/4] Bluetooth: trivial: Change NO_FCS_RECV to RECV_NO_FCS Andrei Emeltchenko 2 siblings, 0 replies; 14+ messages in thread From: Andrei Emeltchenko @ 2012-11-29 15:46 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Process L2CAP Config rsp Pending with FCS Option 0x00 (No FCS) which is sent by Motorola Windows 7 Bluetooth stack. The trace is shown below (all other options are skipped). ... < ACL data: handle 1 flags 0x00 dlen 48 L2CAP(s): Config req: dcid 0x0043 flags 0x00 clen 36 ... FCS Option 0x00 (No FCS) > ACL data: handle 1 flags 0x02 dlen 48 L2CAP(s): Config req: dcid 0x0041 flags 0x00 clen 36 ... FCS Option 0x01 (CRC16 Check) < ACL data: handle 1 flags 0x00 dlen 47 L2CAP(s): Config rsp: scid 0x0043 flags 0x00 result 4 clen 33 Pending ... > ACL data: handle 1 flags 0x02 dlen 50 L2CAP(s): Config rsp: scid 0x0041 flags 0x00 result 4 clen 36 Pending ... FCS Option 0x00 (No FCS) < ACL data: handle 1 flags 0x00 dlen 14 L2CAP(s): Config rsp: scid 0x0043 flags 0x00 result 0 clen 0 Success > ACL data: handle 1 flags 0x02 dlen 14 L2CAP(s): Config rsp: scid 0x0041 flags 0x00 result 0 clen 0 Success ... Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- net/bluetooth/l2cap_core.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index d22d183..8c43277 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -3431,6 +3431,13 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs), (unsigned long) &efs); break; + + case L2CAP_CONF_FCS: + if (*result == L2CAP_CONF_PENDING) + if (val == L2CAP_FCS_NONE) + set_bit(CONF_NO_FCS_RECV, + &chan->conf_state); + break; } } -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCHv2 4/4] Bluetooth: trivial: Change NO_FCS_RECV to RECV_NO_FCS 2012-11-29 15:46 ` [PATCHv2 1/4] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 2/4] Bluetooth: Fix missing L2CAP EWS Conf parameter Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 3/4] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp Andrei Emeltchenko @ 2012-11-29 15:46 ` Andrei Emeltchenko 2012-11-30 17:50 ` Gustavo Padovan 2 siblings, 1 reply; 14+ messages in thread From: Andrei Emeltchenko @ 2012-11-29 15:46 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Make code more readable by changing CONF_NO_FCS_RECV which is read as "No L2CAP FCS option received" to CONF_RECV_NO_FCS which means "Received L2CAP option NO_FCS". This flag really means that we have received L2CAP FRAME CHECK SEQUENCE (FCS) OPTION with value "No FCS". Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- include/net/bluetooth/l2cap.h | 2 +- net/bluetooth/l2cap_core.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index f57fab0..7588ef4 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h @@ -611,7 +611,7 @@ enum { CONF_MTU_DONE, CONF_MODE_DONE, CONF_CONNECT_PEND, - CONF_NO_FCS_RECV, + CONF_RECV_NO_FCS, CONF_STATE2_DEVICE, CONF_EWS_RECV, CONF_LOC_CONF_PEND, diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 8c43277..2c78208 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -3112,7 +3112,7 @@ done: if (chan->conn->feat_mask & L2CAP_FEAT_FCS) if (chan->fcs == L2CAP_FCS_NONE || - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { + test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) { chan->fcs = L2CAP_FCS_NONE; l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); @@ -3140,7 +3140,7 @@ done: if (chan->conn->feat_mask & L2CAP_FEAT_FCS) if (chan->fcs == L2CAP_FCS_NONE || - test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { + test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) { chan->fcs = L2CAP_FCS_NONE; l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); @@ -3196,7 +3196,7 @@ static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data) case L2CAP_CONF_FCS: if (val == L2CAP_FCS_NONE) - set_bit(CONF_NO_FCS_RECV, &chan->conf_state); + set_bit(CONF_RECV_NO_FCS, &chan->conf_state); break; case L2CAP_CONF_EFS: @@ -3435,7 +3435,7 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, case L2CAP_CONF_FCS: if (*result == L2CAP_CONF_PENDING) if (val == L2CAP_FCS_NONE) - set_bit(CONF_NO_FCS_RECV, + set_bit(CONF_RECV_NO_FCS, &chan->conf_state); break; } @@ -3807,7 +3807,7 @@ static inline void set_default_fcs(struct l2cap_chan *chan) */ if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING) chan->fcs = L2CAP_FCS_NONE; - else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) + else if (!test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) chan->fcs = L2CAP_FCS_CRC16; } -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCHv2 4/4] Bluetooth: trivial: Change NO_FCS_RECV to RECV_NO_FCS 2012-11-29 15:46 ` [PATCHv2 4/4] Bluetooth: trivial: Change NO_FCS_RECV to RECV_NO_FCS Andrei Emeltchenko @ 2012-11-30 17:50 ` Gustavo Padovan 0 siblings, 0 replies; 14+ messages in thread From: Gustavo Padovan @ 2012-11-30 17:50 UTC (permalink / raw) To: Andrei Emeltchenko; +Cc: linux-bluetooth Hi Andrei, * Andrei Emeltchenko <Andrei.Emeltchenko.news@gmail.com> [2012-11-29 17:46:08 +0200]: > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > Make code more readable by changing CONF_NO_FCS_RECV which is read > as "No L2CAP FCS option received" to CONF_RECV_NO_FCS which means > "Received L2CAP option NO_FCS". This flag really means that we have > received L2CAP FRAME CHECK SEQUENCE (FCS) OPTION with value "No FCS". > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > --- > include/net/bluetooth/l2cap.h | 2 +- > net/bluetooth/l2cap_core.c | 10 +++++----- > 2 files changed, 6 insertions(+), 6 deletions(-) All patches have been applied to bluetooth-next. Thanks. Gustavo ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2012-11-30 17:50 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-11-28 15:59 [RFC 1/5] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko 2012-11-28 15:59 ` [RFC 2/5] Bluetooth: Refactor l2cap_send_disconn_req Andrei Emeltchenko 2012-11-28 15:59 ` [RFC 3/5] Bluetooth: Fix missing L2CAP EWS Conf parameter Andrei Emeltchenko 2012-11-29 10:25 ` Gustavo Padovan 2012-11-29 10:38 ` Andrei Emeltchenko 2012-11-28 15:59 ` [RFC 4/5] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp Andrei Emeltchenko 2012-11-29 10:27 ` Gustavo Padovan 2012-11-28 15:59 ` [RFC 5/5] Bluetooth: AMP: Mark controller radio powered down after HCIDEVDOWN Andrei Emeltchenko 2012-11-29 10:34 ` Gustavo Padovan 2012-11-29 15:46 ` [PATCHv2 1/4] Bluetooth: AMP: Check that AMP is present and active Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 2/4] Bluetooth: Fix missing L2CAP EWS Conf parameter Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 3/4] Bluetooth: Process receiving FCS_NONE in L2CAP Conf Rsp Andrei Emeltchenko 2012-11-29 15:46 ` [PATCHv2 4/4] Bluetooth: trivial: Change NO_FCS_RECV to RECV_NO_FCS Andrei Emeltchenko 2012-11-30 17:50 ` Gustavo Padovan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).