From: 黄涛 Date: Sat, 30 Jul 2011 14:26:23 +0000 (+0800) Subject: Revert "Bluetooth: Use non-flushable pb flag by default for ACL data on capable chips... X-Git-Tag: firefly_0821_release~9998 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1cd04b76d61db0b0588cb233a00de8f0321846a5;p=firefly-linux-kernel-4.4.55.git Revert "Bluetooth: Use non-flushable pb flag by default for ACL data on capable chipsets." This reverts commit a47633bdbcc9b87f2a72e9bdf317f05e2e6c8051. --- diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index bfd23aeedc46..9716e5a2024f 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h @@ -145,14 +145,11 @@ enum { EDR_ESCO_MASK) /* ACL flags */ -#define ACL_START_NO_FLUSH 0x00 #define ACL_CONT 0x01 #define ACL_START 0x02 #define ACL_ACTIVE_BCAST 0x04 #define ACL_PICO_BCAST 0x08 -#define ACL_PB_MASK (ACL_CONT | ACL_START) - /* Baseband links */ #define SCO_LINK 0x00 #define ACL_LINK 0x01 @@ -191,7 +188,6 @@ enum { #define LMP_EDR_ESCO_3M 0x40 #define LMP_EDR_3S_ESCO 0x80 -#define LMP_NO_FLUSH 0x01 #define LMP_SIMPLE_PAIR 0x08 /* Connection modes */ diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index f5da4e6cfc25..cbcc5b102cdb 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -479,7 +479,6 @@ void hci_conn_del_sysfs(struct hci_conn *conn); #define lmp_sniffsubr_capable(dev) ((dev)->features[5] & LMP_SNIFF_SUBR) #define lmp_esco_capable(dev) ((dev)->features[3] & LMP_ESCO) #define lmp_ssp_capable(dev) ((dev)->features[6] & LMP_SIMPLE_PAIR) -#define lmp_no_flush_capable(dev) ((dev)->features[6] & LMP_NO_FLUSH) /* ----- HCI protocols ----- */ struct hci_proto { diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index 23f37b487977..9516f4b4a3c2 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h @@ -70,7 +70,6 @@ struct l2cap_conninfo { #define L2CAP_LM_TRUSTED 0x0008 #define L2CAP_LM_RELIABLE 0x0010 #define L2CAP_LM_SECURE 0x0020 -#define L2CAP_LM_FLUSHABLE 0x0040 /* L2CAP command codes */ #define L2CAP_COMMAND_REJ 0x01 @@ -317,7 +316,6 @@ struct l2cap_pinfo { __u8 sec_level; __u8 role_switch; __u8 force_reliable; - __u8 flushable; __u8 conf_req[64]; __u8 conf_len; diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 84a9d75b0c61..e1da8f68759c 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -1239,7 +1239,7 @@ int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags) skb->dev = (void *) hdev; bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT; - hci_add_acl_hdr(skb, conn->handle, flags); + hci_add_acl_hdr(skb, conn->handle, flags | ACL_START); if (!(list = skb_shinfo(skb)->frag_list)) { /* Non fragmented */ @@ -1256,14 +1256,12 @@ int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags) spin_lock_bh(&conn->data_q.lock); __skb_queue_tail(&conn->data_q, skb); - flags &= ~ACL_PB_MASK; - flags |= ACL_CONT; do { skb = list; list = list->next; skb->dev = (void *) hdev; bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT; - hci_add_acl_hdr(skb, conn->handle, flags); + hci_add_acl_hdr(skb, conn->handle, flags | ACL_CONT); BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len); diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c index 4529e99b2940..6e3b59690d0e 100644 --- a/net/bluetooth/l2cap.c +++ b/net/bluetooth/l2cap.c @@ -325,19 +325,13 @@ static inline u8 l2cap_get_ident(struct l2cap_conn *conn) static inline int l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data) { struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data); - u8 flags; BT_DBG("code 0x%2.2x", code); if (!skb) return -ENOMEM; - if (lmp_no_flush_capable(conn->hcon->hdev)) - flags = ACL_START_NO_FLUSH; - else - flags = ACL_START; - - return hci_send_acl(conn->hcon, skb, flags); + return hci_send_acl(conn->hcon, skb, 0); } static inline int l2cap_send_sframe(struct l2cap_pinfo *pi, u16 control) @@ -776,7 +770,6 @@ static void l2cap_sock_init(struct sock *sk, struct sock *parent) pi->sec_level = l2cap_pi(parent)->sec_level; pi->role_switch = l2cap_pi(parent)->role_switch; pi->force_reliable = l2cap_pi(parent)->force_reliable; - pi->flushable = l2cap_pi(parent)->flushable; } else { pi->imtu = L2CAP_DEFAULT_MTU; pi->omtu = 0; @@ -785,7 +778,6 @@ static void l2cap_sock_init(struct sock *sk, struct sock *parent) pi->sec_level = BT_SECURITY_LOW; pi->role_switch = 0; pi->force_reliable = 0; - pi->flushable = 0; } /* Default config options */ @@ -1266,18 +1258,11 @@ static void l2cap_drop_acked_frames(struct sock *sk) static inline int l2cap_do_send(struct sock *sk, struct sk_buff *skb) { struct l2cap_pinfo *pi = l2cap_pi(sk); - struct hci_conn *hcon = pi->conn->hcon; int err; - u16 flags; BT_DBG("sk %p, skb %p len %d", sk, skb, skb->len); - if (lmp_no_flush_capable(hcon->hdev) && !l2cap_pi(sk)->flushable) - flags = ACL_START_NO_FLUSH; - else - flags = ACL_START; - - err = hci_send_acl(hcon, skb, flags); + err = hci_send_acl(pi->conn->hcon, skb, 0); if (err < 0) kfree_skb(skb); @@ -1762,7 +1747,6 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __us l2cap_pi(sk)->role_switch = (opt & L2CAP_LM_MASTER); l2cap_pi(sk)->force_reliable = (opt & L2CAP_LM_RELIABLE); - l2cap_pi(sk)->flushable = (opt & L2CAP_LM_FLUSHABLE); break; default: @@ -1890,9 +1874,6 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __us if (l2cap_pi(sk)->force_reliable) opt |= L2CAP_LM_RELIABLE; - if (l2cap_pi(sk)->flushable) - opt |= L2CAP_LM_FLUSHABLE; - if (put_user(opt, (u32 __user *) optval)) err = -EFAULT; break; @@ -3820,7 +3801,7 @@ static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 fl BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags); - if (!(flags & ACL_CONT)) { + if (flags & ACL_START) { struct l2cap_hdr *hdr; int len;