Hi Luiz, On 14/03/17 13:08, Luiz Augusto von Dentz wrote: > Hi Felipe, > > On Mon, Mar 13, 2017 at 7:54 PM, Felipe F. Tonello <eu@xxxxxxxxxxxxxxxxx> wrote: >> This signaling command is useful for any connection parameter change >> procedure, thus it is important to allow access to it from outside this >> translation unit. >> >> Signed-off-by: Felipe F. Tonello <eu@xxxxxxxxxxxxxxxxx> >> --- >> include/net/bluetooth/l2cap.h | 3 +++ >> net/bluetooth/l2cap_core.c | 36 +++++++++++++++++++++++------------- >> 2 files changed, 26 insertions(+), 13 deletions(-) >> >> diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h >> index 5ee3c689c863..ab9ad42d8ed0 100644 >> --- a/include/net/bluetooth/l2cap.h >> +++ b/include/net/bluetooth/l2cap.h >> @@ -948,4 +948,7 @@ void l2cap_conn_put(struct l2cap_conn *conn); >> int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user); >> void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user); >> >> +void l2cap_le_conn_req(struct l2cap_conn *conn, u8 min_interval, >> + u8 max_interval, u8 latency, u8 supv_timeout); >> + >> #endif /* __L2CAP_H */ >> diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c >> index fc7f321a3823..50bf68074b44 100644 >> --- a/net/bluetooth/l2cap_core.c >> +++ b/net/bluetooth/l2cap_core.c >> @@ -1483,6 +1483,24 @@ static void l2cap_conn_start(struct l2cap_conn *conn) >> mutex_unlock(&conn->chan_lock); >> } >> >> +void l2cap_le_conn_req(struct l2cap_conn *conn, u8 min_interval, >> + u8 max_interval, u8 latency, u8 supv_timeout) >> +{ >> + struct l2cap_conn_param_update_req req; >> + >> + if (conn->hcon->role != HCI_ROLE_SLAVE) >> + return; I believe this should be removed, since it makes sense for callers to check if the role is master, causing the code to be clearer on it. >> + >> + req.min = cpu_to_le16(min_interval); >> + req.max = cpu_to_le16(max_interval); >> + req.latency = cpu_to_le16(latency); >> + req.to_multiplier = cpu_to_le16(supv_timeout); >> + >> + l2cap_send_cmd(conn, l2cap_get_ident(conn), >> + L2CAP_CONN_PARAM_UPDATE_REQ, sizeof(req), &req); >> +} >> + >> + >> static void l2cap_le_conn_ready(struct l2cap_conn *conn) >> { >> struct hci_conn *hcon = conn->hcon; >> @@ -1501,19 +1519,11 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn) >> * been configured for this connection. If not, then trigger >> * the connection update procedure. >> */ >> - if (hcon->role == HCI_ROLE_SLAVE && >> - (hcon->le_conn_interval < hcon->le_conn_min_interval || >> - hcon->le_conn_interval > hcon->le_conn_max_interval)) { >> - struct l2cap_conn_param_update_req req; >> - >> - req.min = cpu_to_le16(hcon->le_conn_min_interval); >> - req.max = cpu_to_le16(hcon->le_conn_max_interval); >> - req.latency = cpu_to_le16(hcon->le_conn_latency); >> - req.to_multiplier = cpu_to_le16(hcon->le_supv_timeout); >> - >> - l2cap_send_cmd(conn, l2cap_get_ident(conn), >> - L2CAP_CONN_PARAM_UPDATE_REQ, sizeof(req), &req); >> - } >> + if (hcon->le_conn_interval < hcon->le_conn_min_interval || >> + hcon->le_conn_interval > hcon->le_conn_max_interval) >> + l2cap_le_conn_req(conn, hcon->le_conn_min_interval, >> + hcon->le_conn_max_interval, hcon->le_conn_latency, >> + hcon->le_supv_timeout); >> } >> >> static void l2cap_conn_ready(struct l2cap_conn *conn) >> -- >> 2.12.0 > > Reviewed-By: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> > -- Felipe
Attachment:
0x92698E6A.asc
Description: application/pgp-keys