mirror of https://gitee.com/openkylin/linux.git
Bluetooth: L2CAP: Add module option to enable ECRED mode
This should make it safe to have the code upstream without affecting stable systems since there are a few details not sort out with ECRED mode e.g: how to initiate multiple connections at once. Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
15f02b9105
commit
4be5ca67d5
|
@ -958,6 +958,7 @@ static inline long l2cap_chan_no_get_sndtimeo(struct l2cap_chan *chan)
|
||||||
}
|
}
|
||||||
|
|
||||||
extern bool disable_ertm;
|
extern bool disable_ertm;
|
||||||
|
extern bool enable_ecred;
|
||||||
|
|
||||||
int l2cap_init_sockets(void);
|
int l2cap_init_sockets(void);
|
||||||
void l2cap_cleanup_sockets(void);
|
void l2cap_cleanup_sockets(void);
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#define LE_FLOWCTL_MAX_CREDITS 65535
|
#define LE_FLOWCTL_MAX_CREDITS 65535
|
||||||
|
|
||||||
bool disable_ertm;
|
bool disable_ertm;
|
||||||
|
bool enable_ecred;
|
||||||
|
|
||||||
static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN | L2CAP_FEAT_UCD;
|
static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN | L2CAP_FEAT_UCD;
|
||||||
|
|
||||||
|
@ -5849,6 +5850,9 @@ static inline int l2cap_ecred_conn_req(struct l2cap_conn *conn,
|
||||||
int i, num_scid;
|
int i, num_scid;
|
||||||
bool defer = false;
|
bool defer = false;
|
||||||
|
|
||||||
|
if (!enable_ecred)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (cmd_len < sizeof(*req) || cmd_len - sizeof(*req) % sizeof(u16)) {
|
if (cmd_len < sizeof(*req) || cmd_len - sizeof(*req) % sizeof(u16)) {
|
||||||
result = L2CAP_CR_LE_INVALID_PARAMS;
|
result = L2CAP_CR_LE_INVALID_PARAMS;
|
||||||
goto response;
|
goto response;
|
||||||
|
@ -6092,6 +6096,9 @@ static inline int l2cap_ecred_reconf_req(struct l2cap_conn *conn,
|
||||||
struct l2cap_chan *chan;
|
struct l2cap_chan *chan;
|
||||||
int i, num_scid;
|
int i, num_scid;
|
||||||
|
|
||||||
|
if (!enable_ecred)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (cmd_len < sizeof(*req) || cmd_len - sizeof(*req) % sizeof(u16)) {
|
if (cmd_len < sizeof(*req) || cmd_len - sizeof(*req) % sizeof(u16)) {
|
||||||
result = L2CAP_CR_LE_INVALID_PARAMS;
|
result = L2CAP_CR_LE_INVALID_PARAMS;
|
||||||
goto respond;
|
goto respond;
|
||||||
|
@ -7723,7 +7730,12 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
|
||||||
case L2CAP_MODE_BASIC:
|
case L2CAP_MODE_BASIC:
|
||||||
break;
|
break;
|
||||||
case L2CAP_MODE_LE_FLOWCTL:
|
case L2CAP_MODE_LE_FLOWCTL:
|
||||||
|
break;
|
||||||
case L2CAP_MODE_EXT_FLOWCTL:
|
case L2CAP_MODE_EXT_FLOWCTL:
|
||||||
|
if (!enable_ecred) {
|
||||||
|
err = -EOPNOTSUPP;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case L2CAP_MODE_ERTM:
|
case L2CAP_MODE_ERTM:
|
||||||
case L2CAP_MODE_STREAMING:
|
case L2CAP_MODE_STREAMING:
|
||||||
|
@ -8301,3 +8313,6 @@ void l2cap_exit(void)
|
||||||
|
|
||||||
module_param(disable_ertm, bool, 0644);
|
module_param(disable_ertm, bool, 0644);
|
||||||
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");
|
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");
|
||||||
|
|
||||||
|
module_param(enable_ecred, bool, 0644);
|
||||||
|
MODULE_PARM_DESC(enable_ecred, "Enable enhanced credit flow control mode");
|
||||||
|
|
|
@ -273,7 +273,12 @@ static int l2cap_sock_listen(struct socket *sock, int backlog)
|
||||||
switch (chan->mode) {
|
switch (chan->mode) {
|
||||||
case L2CAP_MODE_BASIC:
|
case L2CAP_MODE_BASIC:
|
||||||
case L2CAP_MODE_LE_FLOWCTL:
|
case L2CAP_MODE_LE_FLOWCTL:
|
||||||
|
break;
|
||||||
case L2CAP_MODE_EXT_FLOWCTL:
|
case L2CAP_MODE_EXT_FLOWCTL:
|
||||||
|
if (!enable_ecred) {
|
||||||
|
err = -EOPNOTSUPP;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case L2CAP_MODE_ERTM:
|
case L2CAP_MODE_ERTM:
|
||||||
case L2CAP_MODE_STREAMING:
|
case L2CAP_MODE_STREAMING:
|
||||||
|
|
Loading…
Reference in New Issue