Message ID | 20200218123747.3006-1-sathish.narasimman@intel.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Marcel Holtmann |
Headers | show |
Series | Bluetooth: Fix - During le_conn_timeout disable EXT_ADV | expand |
Hi Sathish, > Disabling LE_LEGACY_ADV when LE_EXT_ADV is enabled causes 'command > disallowed . This patch fixes that issue and disables EXT_ADV if > enabled. > > Signed-off-by: Sathish Narsimman <sathish.narasimman@intel.com> > --- > net/bluetooth/hci_conn.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c > index a582c676e584..a8d8a876363c 100644 > --- a/net/bluetooth/hci_conn.c > +++ b/net/bluetooth/hci_conn.c > @@ -481,9 +481,19 @@ static void le_conn_timeout(struct work_struct *work) > * (which doesn't have a timeout of its own). > */ > if (conn->role == HCI_ROLE_SLAVE) { > - u8 enable = 0x00; > - hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), > - &enable); > + if (ext_adv_capable(hdev)) { > + struct hci_cp_le_set_ext_adv_enable cp; > + > + cp.enable = 0x00; > + cp.num_of_sets = 0x00; > + > + hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, > + sizeof(cp), &cp); > + } else { > + u8 enable = 0x00; > + hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, > + sizeof(enable), &enable); > + } hmmm, I wonder if it is better to create a helper function for this. Regards Marcel
Hi Marcel On Tue, Feb 18, 2020 at 7:40 PM Marcel Holtmann <marcel@holtmann.org> wrote: > > Hi Sathish, > > > Disabling LE_LEGACY_ADV when LE_EXT_ADV is enabled causes 'command > > disallowed . This patch fixes that issue and disables EXT_ADV if > > enabled. > > > > Signed-off-by: Sathish Narsimman <sathish.narasimman@intel.com> > > --- > > net/bluetooth/hci_conn.c | 16 +++++++++++++--- > > 1 file changed, 13 insertions(+), 3 deletions(-) > > > > diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c > > index a582c676e584..a8d8a876363c 100644 > > --- a/net/bluetooth/hci_conn.c > > +++ b/net/bluetooth/hci_conn.c > > @@ -481,9 +481,19 @@ static void le_conn_timeout(struct work_struct *work) > > * (which doesn't have a timeout of its own). > > */ > > if (conn->role == HCI_ROLE_SLAVE) { > > - u8 enable = 0x00; > > - hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), > > - &enable); > > + if (ext_adv_capable(hdev)) { > > + struct hci_cp_le_set_ext_adv_enable cp; > > + > > + cp.enable = 0x00; > > + cp.num_of_sets = 0x00; > > + > > + hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, > > + sizeof(cp), &cp); > > + } else { > > + u8 enable = 0x00; > > + hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, > > + sizeof(enable), &enable); > > + } > > hmmm, I wonder if it is better to create a helper function for this. > > Regards > > Marcel > let me verify and submit patch with __hci_req_disable_advertising Regards Sathish N
Hi Marcel On Tue, Feb 18, 2020 at 8:17 PM Sathish Narasimman <nsathish41@gmail.com> wrote: > > Hi Marcel > > On Tue, Feb 18, 2020 at 7:40 PM Marcel Holtmann <marcel@holtmann.org> wrote: > > > > Hi Sathish, > > > > > Disabling LE_LEGACY_ADV when LE_EXT_ADV is enabled causes 'command > > > disallowed . This patch fixes that issue and disables EXT_ADV if > > > enabled. > > > > > > Signed-off-by: Sathish Narsimman <sathish.narasimman@intel.com> > > > --- > > > net/bluetooth/hci_conn.c | 16 +++++++++++++--- > > > 1 file changed, 13 insertions(+), 3 deletions(-) > > > > > > diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c > > > index a582c676e584..a8d8a876363c 100644 > > > --- a/net/bluetooth/hci_conn.c > > > +++ b/net/bluetooth/hci_conn.c > > > @@ -481,9 +481,19 @@ static void le_conn_timeout(struct work_struct *work) > > > * (which doesn't have a timeout of its own). > > > */ > > > if (conn->role == HCI_ROLE_SLAVE) { > > > - u8 enable = 0x00; > > > - hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), > > > - &enable); > > > + if (ext_adv_capable(hdev)) { > > > + struct hci_cp_le_set_ext_adv_enable cp; > > > + > > > + cp.enable = 0x00; > > > + cp.num_of_sets = 0x00; > > > + > > > + hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, > > > + sizeof(cp), &cp); > > > + } else { > > > + u8 enable = 0x00; > > > + hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, > > > + sizeof(enable), &enable); > > > + } > > > > hmmm, I wonder if it is better to create a helper function for this. > > > > Regards > > > > Marcel > > > > let me verify and submit patch with __hci_req_disable_advertising > > Regards > Sathish N calling __hci_req_disable_advertising is not working. the command is not getting executed I hope the below method is fine? where it works +static void le_disable_advertising(struct hci_dev *hdev) +{ + if (ext_adv_capable(hdev)) { + struct hci_cp_le_set_ext_adv_enable cp; + cp.enable = 0x00; + cp.num_of_sets = 0x00; + + hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, sizeof(cp), + &cp); + } else { + u8 enable = 0x00; + hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, + sizeof(enable), &enable); + } + +} Regards Sathish N
Hi Sathish, >>>> Disabling LE_LEGACY_ADV when LE_EXT_ADV is enabled causes 'command >>>> disallowed . This patch fixes that issue and disables EXT_ADV if >>>> enabled. >>>> >>>> Signed-off-by: Sathish Narsimman <sathish.narasimman@intel.com> >>>> --- >>>> net/bluetooth/hci_conn.c | 16 +++++++++++++--- >>>> 1 file changed, 13 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c >>>> index a582c676e584..a8d8a876363c 100644 >>>> --- a/net/bluetooth/hci_conn.c >>>> +++ b/net/bluetooth/hci_conn.c >>>> @@ -481,9 +481,19 @@ static void le_conn_timeout(struct work_struct *work) >>>> * (which doesn't have a timeout of its own). >>>> */ >>>> if (conn->role == HCI_ROLE_SLAVE) { >>>> - u8 enable = 0x00; >>>> - hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), >>>> - &enable); >>>> + if (ext_adv_capable(hdev)) { >>>> + struct hci_cp_le_set_ext_adv_enable cp; >>>> + >>>> + cp.enable = 0x00; >>>> + cp.num_of_sets = 0x00; >>>> + >>>> + hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, >>>> + sizeof(cp), &cp); >>>> + } else { >>>> + u8 enable = 0x00; >>>> + hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, >>>> + sizeof(enable), &enable); >>>> + } >>> >>> hmmm, I wonder if it is better to create a helper function for this. >>> >>> Regards >>> >>> Marcel >>> >> >> let me verify and submit patch with __hci_req_disable_advertising >> >> Regards >> Sathish N > > calling __hci_req_disable_advertising is not working. the command is > not getting executed > I hope the below method is fine? where it works > > +static void le_disable_advertising(struct hci_dev *hdev) > +{ > + if (ext_adv_capable(hdev)) { > + struct hci_cp_le_set_ext_adv_enable cp; > + cp.enable = 0x00; > + cp.num_of_sets = 0x00; > + > + hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, sizeof(cp), > + &cp); > + } else { > + u8 enable = 0x00; > + hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, > + sizeof(enable), &enable); > + } > + > +} at first glance this looks fine. Regards Marcel
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index a582c676e584..a8d8a876363c 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c @@ -481,9 +481,19 @@ static void le_conn_timeout(struct work_struct *work) * (which doesn't have a timeout of its own). */ if (conn->role == HCI_ROLE_SLAVE) { - u8 enable = 0x00; - hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), - &enable); + if (ext_adv_capable(hdev)) { + struct hci_cp_le_set_ext_adv_enable cp; + + cp.enable = 0x00; + cp.num_of_sets = 0x00; + + hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, + sizeof(cp), &cp); + } else { + u8 enable = 0x00; + hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, + sizeof(enable), &enable); + } hci_le_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT); return; }
Disabling LE_LEGACY_ADV when LE_EXT_ADV is enabled causes 'command disallowed . This patch fixes that issue and disables EXT_ADV if enabled. Signed-off-by: Sathish Narsimman <sathish.narasimman@intel.com> --- net/bluetooth/hci_conn.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)