aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2013-05-15 03:07:15 -0400
committerMarcel Holtmann <marcel@holtmann.org>2013-12-05 10:05:32 -0500
commit203e639ecbcc66c7c4d55f1f59bc61a1c1ca495d (patch)
treea9b9d0eab2ea3106ad6b21b6418984536a42ff1d
parenta17de2fe02b1853f115a841bf707f6a75bc6da22 (diff)
Bluetooth: Pass command length to LE signaling channel handlers
The LE signaling PDU length is already calculated in the l2cap_le_sig_channel function so we can just pass the value to the various handler functions to avoid unnecessary recalculations (byte order conversions). Right now the only user is the connection parameter update procedure, but as new LE signaling operations become available (for connection oriented channels) they will also be able to make use of the value. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
-rw-r--r--net/bluetooth/l2cap_core.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 510a17cefd26..eafcdf65718b 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -5165,18 +5165,17 @@ static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
5165 5165
5166static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn, 5166static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
5167 struct l2cap_cmd_hdr *cmd, 5167 struct l2cap_cmd_hdr *cmd,
5168 u8 *data) 5168 u16 cmd_len, u8 *data)
5169{ 5169{
5170 struct hci_conn *hcon = conn->hcon; 5170 struct hci_conn *hcon = conn->hcon;
5171 struct l2cap_conn_param_update_req *req; 5171 struct l2cap_conn_param_update_req *req;
5172 struct l2cap_conn_param_update_rsp rsp; 5172 struct l2cap_conn_param_update_rsp rsp;
5173 u16 min, max, latency, to_multiplier, cmd_len; 5173 u16 min, max, latency, to_multiplier;
5174 int err; 5174 int err;
5175 5175
5176 if (!(hcon->link_mode & HCI_LM_MASTER)) 5176 if (!(hcon->link_mode & HCI_LM_MASTER))
5177 return -EINVAL; 5177 return -EINVAL;
5178 5178
5179 cmd_len = __le16_to_cpu(cmd->len);
5180 if (cmd_len != sizeof(struct l2cap_conn_param_update_req)) 5179 if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
5181 return -EPROTO; 5180 return -EPROTO;
5182 5181
@@ -5287,14 +5286,15 @@ static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
5287} 5286}
5288 5287
5289static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn, 5288static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
5290 struct l2cap_cmd_hdr *cmd, u8 *data) 5289 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5290 u8 *data)
5291{ 5291{
5292 switch (cmd->code) { 5292 switch (cmd->code) {
5293 case L2CAP_COMMAND_REJ: 5293 case L2CAP_COMMAND_REJ:
5294 return 0; 5294 return 0;
5295 5295
5296 case L2CAP_CONN_PARAM_UPDATE_REQ: 5296 case L2CAP_CONN_PARAM_UPDATE_REQ:
5297 return l2cap_conn_param_update_req(conn, cmd, data); 5297 return l2cap_conn_param_update_req(conn, cmd, cmd_len, data);
5298 5298
5299 case L2CAP_CONN_PARAM_UPDATE_RSP: 5299 case L2CAP_CONN_PARAM_UPDATE_RSP:
5300 return 0; 5300 return 0;
@@ -5331,7 +5331,7 @@ static inline void l2cap_le_sig_channel(struct l2cap_conn *conn,
5331 goto drop; 5331 goto drop;
5332 } 5332 }
5333 5333
5334 err = l2cap_le_sig_cmd(conn, cmd, skb->data); 5334 err = l2cap_le_sig_cmd(conn, cmd, len, skb->data);
5335 if (err) { 5335 if (err) {
5336 struct l2cap_cmd_rej_unk rej; 5336 struct l2cap_cmd_rej_unk rej;
5337 5337