Bluetooth: HCI: Remove HCI_AMP support
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 6 May 2024 22:33:52 +0000 (18:33 -0400)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 14 May 2024 14:54:49 +0000 (10:54 -0400)
Since BT_HS has been remove HCI_AMP controllers no longer has any use so
remove it along with the capability of creating AMP controllers.

Since we no longer need to differentiate between AMP and Primary
controllers, as only HCI_PRIMARY is left, this also remove
hdev->dev_type altogether.

Fixes: e7b02296fb40 ("Bluetooth: Remove BT_HS")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
20 files changed:
drivers/bluetooth/btmrvl_main.c
drivers/bluetooth/btrsi.c
drivers/bluetooth/btsdio.c
drivers/bluetooth/btusb.c
drivers/bluetooth/hci_bcm4377.c
drivers/bluetooth/hci_ldisc.c
drivers/bluetooth/hci_serdev.c
drivers/bluetooth/hci_uart.h
drivers/bluetooth/hci_vhci.c
drivers/bluetooth/virtio_bt.c
include/net/bluetooth/hci.h
include/net/bluetooth/hci_core.h
include/uapi/linux/virtio_bt.h
net/bluetooth/hci_conn.c
net/bluetooth/hci_core.c
net/bluetooth/hci_event.c
net/bluetooth/hci_sock.c
net/bluetooth/hci_sync.c
net/bluetooth/l2cap_core.c
net/bluetooth/mgmt.c

index 9658b33c824a70c94c4a20182360267a58ba337f..18f34998a1204a3bf94ecae8a19bed5155a7e42f 100644 (file)
@@ -121,13 +121,6 @@ int btmrvl_process_event(struct btmrvl_private *priv, struct sk_buff *skb)
                                ((event->data[2] == MODULE_BROUGHT_UP) ||
                                (event->data[2] == MODULE_ALREADY_UP)) ?
                                "Bring-up succeed" : "Bring-up failed");
-
-                       if (event->length > 3 && event->data[3])
-                               priv->btmrvl_dev.dev_type = HCI_AMP;
-                       else
-                               priv->btmrvl_dev.dev_type = HCI_PRIMARY;
-
-                       BT_DBG("dev_type: %d", priv->btmrvl_dev.dev_type);
                } else if (priv->btmrvl_dev.sendcmdflag &&
                                event->data[1] == MODULE_SHUTDOWN_REQ) {
                        BT_DBG("EVENT:%s", (event->data[2]) ?
@@ -686,8 +679,6 @@ int btmrvl_register_hdev(struct btmrvl_private *priv)
        hdev->wakeup = btmrvl_wakeup;
        SET_HCIDEV_DEV(hdev, &card->func->dev);
 
-       hdev->dev_type = priv->btmrvl_dev.dev_type;
-
        ret = hci_register_dev(hdev);
        if (ret < 0) {
                BT_ERR("Can not register HCI device");
index 634cf8f5ed2dbd844614af56b06b554e01f096ac..0c91d7635ac39e9082eabe3ece06efeabefb1588 100644 (file)
@@ -134,7 +134,6 @@ static int rsi_hci_attach(void *priv, struct rsi_proto_ops *ops)
                hdev->bus = HCI_USB;
 
        hci_set_drvdata(hdev, h_adapter);
-       hdev->dev_type = HCI_PRIMARY;
        hdev->open = rsi_hci_open;
        hdev->close = rsi_hci_close;
        hdev->flush = rsi_hci_flush;
index f19d31ee37ea89fd074490651273300187888881..fdcfe9c50313ea056d7aca495259c380b4bebe81 100644 (file)
@@ -32,9 +32,6 @@ static const struct sdio_device_id btsdio_table[] = {
        /* Generic Bluetooth Type-B SDIO device */
        { SDIO_DEVICE_CLASS(SDIO_CLASS_BT_B) },
 
-       /* Generic Bluetooth AMP controller */
-       { SDIO_DEVICE_CLASS(SDIO_CLASS_BT_AMP) },
-
        { }     /* Terminating entry */
 };
 
@@ -319,11 +316,6 @@ static int btsdio_probe(struct sdio_func *func,
        hdev->bus = HCI_SDIO;
        hci_set_drvdata(hdev, data);
 
-       if (id->class == SDIO_CLASS_BT_AMP)
-               hdev->dev_type = HCI_AMP;
-       else
-               hdev->dev_type = HCI_PRIMARY;
-
        data->hdev = hdev;
 
        SET_HCIDEV_DEV(hdev, &func->dev);
index 90d1f1697357f97fd13a39821ad59ea74e913174..e384ef6ff050d945a014fa4651a44caf84653672 100644 (file)
@@ -4359,11 +4359,6 @@ static int btusb_probe(struct usb_interface *intf,
        hdev->bus = HCI_USB;
        hci_set_drvdata(hdev, data);
 
-       if (id->driver_info & BTUSB_AMP)
-               hdev->dev_type = HCI_AMP;
-       else
-               hdev->dev_type = HCI_PRIMARY;
-
        data->hdev = hdev;
 
        SET_HCIDEV_DEV(hdev, &intf->dev);
index 9a7243d5db71ff35697cf26cf7a744910f2741fd..0c2f15235b4cdaa42930dd3bf7eba4ffc2fa3c63 100644 (file)
@@ -2361,7 +2361,6 @@ static int bcm4377_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        bcm4377->hdev = hdev;
 
        hdev->bus = HCI_PCI;
-       hdev->dev_type = HCI_PRIMARY;
        hdev->open = bcm4377_hci_open;
        hdev->close = bcm4377_hci_close;
        hdev->send = bcm4377_hci_send_frame;
index a26367e9fb197c367059907d8a58760d90e81f76..17a2f158a0dfab2b7832819cfe01f1d004508dc0 100644 (file)
@@ -667,11 +667,6 @@ static int hci_uart_register_dev(struct hci_uart *hu)
        if (!test_bit(HCI_UART_RESET_ON_INIT, &hu->hdev_flags))
                set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
 
-       if (test_bit(HCI_UART_CREATE_AMP, &hu->hdev_flags))
-               hdev->dev_type = HCI_AMP;
-       else
-               hdev->dev_type = HCI_PRIMARY;
-
        /* Only call open() for the protocol after hdev is fully initialized as
         * open() (or a timer/workqueue it starts) may attempt to reference it.
         */
@@ -722,7 +717,6 @@ static int hci_uart_set_flags(struct hci_uart *hu, unsigned long flags)
 {
        unsigned long valid_flags = BIT(HCI_UART_RAW_DEVICE) |
                                    BIT(HCI_UART_RESET_ON_INIT) |
-                                   BIT(HCI_UART_CREATE_AMP) |
                                    BIT(HCI_UART_INIT_PENDING) |
                                    BIT(HCI_UART_EXT_CONFIG) |
                                    BIT(HCI_UART_VND_DETECT);
index 85c0d9b68f5f76f5274f2ba049c9eaa949274381..89a22e9b3253a8605fe19e652a7a8f0498d4b5df 100644 (file)
@@ -366,11 +366,6 @@ int hci_uart_register_device_priv(struct hci_uart *hu,
        if (test_bit(HCI_UART_EXT_CONFIG, &hu->hdev_flags))
                set_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks);
 
-       if (test_bit(HCI_UART_CREATE_AMP, &hu->hdev_flags))
-               hdev->dev_type = HCI_AMP;
-       else
-               hdev->dev_type = HCI_PRIMARY;
-
        if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags))
                return 0;
 
index 68c8c7e95d64dc6007f276b29cf2992815726baa..00bf7ae82c5b721366474e5b3af9597e39682273 100644 (file)
@@ -37,7 +37,6 @@
 
 #define HCI_UART_RAW_DEVICE    0
 #define HCI_UART_RESET_ON_INIT 1
-#define HCI_UART_CREATE_AMP    2
 #define HCI_UART_INIT_PENDING  3
 #define HCI_UART_EXT_CONFIG    4
 #define HCI_UART_VND_DETECT    5
index 572d68d52965f640aef81e18962d59f0e6232e40..28750a40f0ed52aab23f519e47bdd886d46780bd 100644 (file)
@@ -384,17 +384,10 @@ static int __vhci_create_device(struct vhci_data *data, __u8 opcode)
 {
        struct hci_dev *hdev;
        struct sk_buff *skb;
-       __u8 dev_type;
 
        if (data->hdev)
                return -EBADFD;
 
-       /* bits 0-1 are dev_type (Primary or AMP) */
-       dev_type = opcode & 0x03;
-
-       if (dev_type != HCI_PRIMARY && dev_type != HCI_AMP)
-               return -EINVAL;
-
        /* bits 2-5 are reserved (must be zero) */
        if (opcode & 0x3c)
                return -EINVAL;
@@ -412,7 +405,6 @@ static int __vhci_create_device(struct vhci_data *data, __u8 opcode)
        data->hdev = hdev;
 
        hdev->bus = HCI_VIRTUAL;
-       hdev->dev_type = dev_type;
        hci_set_drvdata(hdev, data);
 
        hdev->open  = vhci_open_dev;
@@ -634,7 +626,7 @@ static void vhci_open_timeout(struct work_struct *work)
        struct vhci_data *data = container_of(work, struct vhci_data,
                                              open_timeout.work);
 
-       vhci_create_device(data, amp ? HCI_AMP : HCI_PRIMARY);
+       vhci_create_device(data, 0x00);
 }
 
 static int vhci_open(struct inode *inode, struct file *file)
index 2ac70b560c46db16bef8b7ca86196c53c23b508e..18208e152a3675b6366016aedc16c50154bd7775 100644 (file)
@@ -274,7 +274,6 @@ static int virtbt_probe(struct virtio_device *vdev)
 
        switch (type) {
        case VIRTIO_BT_CONFIG_TYPE_PRIMARY:
-       case VIRTIO_BT_CONFIG_TYPE_AMP:
                break;
        default:
                return -EINVAL;
@@ -303,7 +302,6 @@ static int virtbt_probe(struct virtio_device *vdev)
        vbt->hdev = hdev;
 
        hdev->bus = HCI_VIRTIO;
-       hdev->dev_type = type;
        hci_set_drvdata(hdev, vbt);
 
        hdev->open  = virtbt_open;
index de530262d8240668fc11bfbb383897e64ec5816a..fe932ca3bc8ca973a7c220a6cb729673657856e9 100644 (file)
@@ -33,9 +33,6 @@
 #define HCI_MAX_FRAME_SIZE     (HCI_MAX_ACL_SIZE + 4)
 
 #define HCI_LINK_KEY_SIZE      16
-#define HCI_AMP_LINK_KEY_SIZE  (2 * HCI_LINK_KEY_SIZE)
-
-#define HCI_MAX_AMP_ASSOC_SIZE 672
 
 #define HCI_MAX_CPB_DATA_SIZE  252
 
 #define HCI_SMD                9
 #define HCI_VIRTIO     10
 
-/* HCI controller types */
-#define HCI_PRIMARY    0x00
-#define HCI_AMP                0x01
-
-/* First BR/EDR Controller shall have ID = 0 */
-#define AMP_ID_BREDR   0x00
-
-/* AMP controller types */
-#define AMP_TYPE_BREDR 0x00
-#define AMP_TYPE_80211 0x01
-
-/* AMP controller status */
-#define AMP_STATUS_POWERED_DOWN                        0x00
-#define AMP_STATUS_BLUETOOTH_ONLY              0x01
-#define AMP_STATUS_NO_CAPACITY                 0x02
-#define AMP_STATUS_LOW_CAPACITY                        0x03
-#define AMP_STATUS_MEDIUM_CAPACITY             0x04
-#define AMP_STATUS_HIGH_CAPACITY               0x05
-#define AMP_STATUS_FULL_CAPACITY               0x06
-
 /* HCI device quirks */
 enum {
        /* When this quirk is set, the HCI Reset command is send when
@@ -527,7 +504,6 @@ enum {
 #define ESCO_LINK      0x02
 /* Low Energy links do not have defined link type. Use invented one */
 #define LE_LINK                0x80
-#define AMP_LINK       0x81
 #define ISO_LINK       0x82
 #define INVALID_LINK   0xff
 
@@ -943,56 +919,6 @@ struct hci_cp_io_capability_neg_reply {
        __u8     reason;
 } __packed;
 
-#define HCI_OP_CREATE_PHY_LINK         0x0435
-struct hci_cp_create_phy_link {
-       __u8     phy_handle;
-       __u8     key_len;
-       __u8     key_type;
-       __u8     key[HCI_AMP_LINK_KEY_SIZE];
-} __packed;
-
-#define HCI_OP_ACCEPT_PHY_LINK         0x0436
-struct hci_cp_accept_phy_link {
-       __u8     phy_handle;
-       __u8     key_len;
-       __u8     key_type;
-       __u8     key[HCI_AMP_LINK_KEY_SIZE];
-} __packed;
-
-#define HCI_OP_DISCONN_PHY_LINK                0x0437
-struct hci_cp_disconn_phy_link {
-       __u8     phy_handle;
-       __u8     reason;
-} __packed;
-
-struct ext_flow_spec {
-       __u8       id;
-       __u8       stype;
-       __le16     msdu;
-       __le32     sdu_itime;
-       __le32     acc_lat;
-       __le32     flush_to;
-} __packed;
-
-#define HCI_OP_CREATE_LOGICAL_LINK     0x0438
-#define HCI_OP_ACCEPT_LOGICAL_LINK     0x0439
-struct hci_cp_create_accept_logical_link {
-       __u8                  phy_handle;
-       struct ext_flow_spec  tx_flow_spec;
-       struct ext_flow_spec  rx_flow_spec;
-} __packed;
-
-#define HCI_OP_DISCONN_LOGICAL_LINK    0x043a
-struct hci_cp_disconn_logical_link {
-       __le16   log_handle;
-} __packed;
-
-#define HCI_OP_LOGICAL_LINK_CANCEL     0x043b
-struct hci_cp_logical_link_cancel {
-       __u8     phy_handle;
-       __u8     flow_spec_id;
-} __packed;
-
 #define HCI_OP_ENHANCED_SETUP_SYNC_CONN                0x043d
 struct hci_coding_format {
        __u8    id;
@@ -1614,46 +1540,6 @@ struct hci_rp_read_enc_key_size {
        __u8     key_size;
 } __packed;
 
-#define HCI_OP_READ_LOCAL_AMP_INFO     0x1409
-struct hci_rp_read_local_amp_info {
-       __u8     status;
-       __u8     amp_status;
-       __le32   total_bw;
-       __le32   max_bw;
-       __le32   min_latency;
-       __le32   max_pdu;
-       __u8     amp_type;
-       __le16   pal_cap;
-       __le16   max_assoc_size;
-       __le32   max_flush_to;
-       __le32   be_flush_to;
-} __packed;
-
-#define HCI_OP_READ_LOCAL_AMP_ASSOC    0x140a
-struct hci_cp_read_local_amp_assoc {
-       __u8     phy_handle;
-       __le16   len_so_far;
-       __le16   max_len;
-} __packed;
-struct hci_rp_read_local_amp_assoc {
-       __u8     status;
-       __u8     phy_handle;
-       __le16   rem_len;
-       __u8     frag[];
-} __packed;
-
-#define HCI_OP_WRITE_REMOTE_AMP_ASSOC  0x140b
-struct hci_cp_write_remote_amp_assoc {
-       __u8     phy_handle;
-       __le16   len_so_far;
-       __le16   rem_len;
-       __u8     frag[];
-} __packed;
-struct hci_rp_write_remote_amp_assoc {
-       __u8     status;
-       __u8     phy_handle;
-} __packed;
-
 #define HCI_OP_GET_MWS_TRANSPORT_CONFIG        0x140c
 
 #define HCI_OP_ENABLE_DUT_MODE         0x1803
index be012f393bcb5ace1906d311aaca52e65e8f9739..431d0c8a0e27a9d423bd774a81d2b02b11f9e07f 100644 (file)
@@ -126,7 +126,6 @@ enum suspended_state {
 struct hci_conn_hash {
        struct list_head list;
        unsigned int     acl_num;
-       unsigned int     amp_num;
        unsigned int     sco_num;
        unsigned int     iso_num;
        unsigned int     le_num;
@@ -341,14 +340,6 @@ struct adv_monitor {
 /* Default authenticated payload timeout 30s */
 #define DEFAULT_AUTH_PAYLOAD_TIMEOUT   0x0bb8
 
-struct amp_assoc {
-       __u16   len;
-       __u16   offset;
-       __u16   rem_len;
-       __u16   len_so_far;
-       __u8    data[HCI_MAX_AMP_ASSOC_SIZE];
-};
-
 #define HCI_MAX_PAGES  3
 
 struct hci_dev {
@@ -361,7 +352,6 @@ struct hci_dev {
        unsigned long   flags;
        __u16           id;
        __u8            bus;
-       __u8            dev_type;
        bdaddr_t        bdaddr;
        bdaddr_t        setup_addr;
        bdaddr_t        public_addr;
@@ -467,21 +457,6 @@ struct hci_dev {
        __u16           sniff_min_interval;
        __u16           sniff_max_interval;
 
-       __u8            amp_status;
-       __u32           amp_total_bw;
-       __u32           amp_max_bw;
-       __u32           amp_min_latency;
-       __u32           amp_max_pdu;
-       __u8            amp_type;
-       __u16           amp_pal_cap;
-       __u16           amp_assoc_size;
-       __u32           amp_max_flush_to;
-       __u32           amp_be_flush_to;
-
-       struct amp_assoc        loc_assoc;
-
-       __u8            flow_ctl_mode;
-
        unsigned int    auto_accept_delay;
 
        unsigned long   quirks;
@@ -501,11 +476,6 @@ struct hci_dev {
        unsigned int    le_pkts;
        unsigned int    iso_pkts;
 
-       __u16           block_len;
-       __u16           block_mtu;
-       __u16           num_blocks;
-       __u16           block_cnt;
-
        unsigned long   acl_last_tx;
        unsigned long   sco_last_tx;
        unsigned long   le_last_tx;
@@ -778,7 +748,6 @@ struct hci_conn {
        void            *l2cap_data;
        void            *sco_data;
        void            *iso_data;
-       struct amp_mgr  *amp_mgr;
 
        struct list_head link_list;
        struct hci_conn *parent;
@@ -805,7 +774,6 @@ struct hci_chan {
        struct sk_buff_head data_q;
        unsigned int    sent;
        __u8            state;
-       bool            amp;
 };
 
 struct hci_conn_params {
@@ -1014,9 +982,6 @@ static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
        case ACL_LINK:
                h->acl_num++;
                break;
-       case AMP_LINK:
-               h->amp_num++;
-               break;
        case LE_LINK:
                h->le_num++;
                if (c->role == HCI_ROLE_SLAVE)
@@ -1043,9 +1008,6 @@ static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
        case ACL_LINK:
                h->acl_num--;
                break;
-       case AMP_LINK:
-               h->amp_num--;
-               break;
        case LE_LINK:
                h->le_num--;
                if (c->role == HCI_ROLE_SLAVE)
@@ -1067,8 +1029,6 @@ static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
        switch (type) {
        case ACL_LINK:
                return h->acl_num;
-       case AMP_LINK:
-               return h->amp_num;
        case LE_LINK:
                return h->le_num;
        case SCO_LINK:
@@ -1085,7 +1045,7 @@ static inline unsigned int hci_conn_count(struct hci_dev *hdev)
 {
        struct hci_conn_hash *c = &hdev->conn_hash;
 
-       return c->acl_num + c->amp_num + c->sco_num + c->le_num + c->iso_num;
+       return c->acl_num + c->sco_num + c->le_num + c->iso_num;
 }
 
 static inline bool hci_conn_valid(struct hci_dev *hdev, struct hci_conn *conn)
@@ -1610,10 +1570,6 @@ static inline void hci_conn_drop(struct hci_conn *conn)
                        }
                        break;
 
-               case AMP_LINK:
-                       timeo = conn->disc_timeout;
-                       break;
-
                default:
                        timeo = 0;
                        break;
index af798f4c9680420f794370a3f3fe6b445974dcc7..3cc7d633456b6b446b3b35bb8f9999d87da496f6 100644 (file)
@@ -13,7 +13,6 @@
 
 enum virtio_bt_config_type {
        VIRTIO_BT_CONFIG_TYPE_PRIMARY   = 0,
-       VIRTIO_BT_CONFIG_TYPE_AMP       = 1,
 };
 
 enum virtio_bt_config_vendor {
index f21e7c73021d8fde21d5a83c38accc9f4d3df6a1..0c76dcde53619627cdb4544b36b02a8bfc8cc936 100644 (file)
@@ -1168,8 +1168,7 @@ struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, uint8_t src_type)
 
        list_for_each_entry(d, &hci_dev_list, list) {
                if (!test_bit(HCI_UP, &d->flags) ||
-                   hci_dev_test_flag(d, HCI_USER_CHANNEL) ||
-                   d->dev_type != HCI_PRIMARY)
+                   hci_dev_test_flag(d, HCI_USER_CHANNEL))
                        continue;
 
                /* Simple routing:
index b5212551298558a89cd3e9fd1a5a277985529f44..7bc431af7b04e692bc140e01f796829f788d78b7 100644 (file)
@@ -402,11 +402,6 @@ int hci_inquiry(void __user *arg)
                goto done;
        }
 
-       if (hdev->dev_type != HCI_PRIMARY) {
-               err = -EOPNOTSUPP;
-               goto done;
-       }
-
        if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
                err = -EOPNOTSUPP;
                goto done;
@@ -759,11 +754,6 @@ int hci_dev_cmd(unsigned int cmd, void __user *arg)
                goto done;
        }
 
-       if (hdev->dev_type != HCI_PRIMARY) {
-               err = -EOPNOTSUPP;
-               goto done;
-       }
-
        if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
                err = -EOPNOTSUPP;
                goto done;
@@ -917,7 +907,7 @@ int hci_get_dev_info(void __user *arg)
 
        strscpy(di.name, hdev->name, sizeof(di.name));
        di.bdaddr   = hdev->bdaddr;
-       di.type     = (hdev->bus & 0x0f) | ((hdev->dev_type & 0x03) << 4);
+       di.type     = (hdev->bus & 0x0f);
        di.flags    = flags;
        di.pkt_type = hdev->pkt_type;
        if (lmp_bredr_capable(hdev)) {
@@ -1033,8 +1023,7 @@ static void hci_power_on(struct work_struct *work)
         */
        if (hci_dev_test_flag(hdev, HCI_RFKILLED) ||
            hci_dev_test_flag(hdev, HCI_UNCONFIGURED) ||
-           (hdev->dev_type == HCI_PRIMARY &&
-            !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
+           (!bacmp(&hdev->bdaddr, BDADDR_ANY) &&
             !bacmp(&hdev->static_addr, BDADDR_ANY))) {
                hci_dev_clear_flag(hdev, HCI_AUTO_OFF);
                hci_dev_do_close(hdev);
@@ -2642,21 +2631,7 @@ int hci_register_dev(struct hci_dev *hdev)
        if (!hdev->open || !hdev->close || !hdev->send)
                return -EINVAL;
 
-       /* Do not allow HCI_AMP devices to register at index 0,
-        * so the index can be used as the AMP controller ID.
-        */
-       switch (hdev->dev_type) {
-       case HCI_PRIMARY:
-               id = ida_alloc_max(&hci_index_ida, HCI_MAX_ID - 1, GFP_KERNEL);
-               break;
-       case HCI_AMP:
-               id = ida_alloc_range(&hci_index_ida, 1, HCI_MAX_ID - 1,
-                                    GFP_KERNEL);
-               break;
-       default:
-               return -EINVAL;
-       }
-
+       id = ida_alloc_max(&hci_index_ida, HCI_MAX_ID - 1, GFP_KERNEL);
        if (id < 0)
                return id;
 
@@ -2708,12 +2683,10 @@ int hci_register_dev(struct hci_dev *hdev)
        hci_dev_set_flag(hdev, HCI_SETUP);
        hci_dev_set_flag(hdev, HCI_AUTO_OFF);
 
-       if (hdev->dev_type == HCI_PRIMARY) {
-               /* Assume BR/EDR support until proven otherwise (such as
-                * through reading supported features during init.
-                */
-               hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
-       }
+       /* Assume BR/EDR support until proven otherwise (such as
+        * through reading supported features during init.
+        */
+       hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
 
        write_lock(&hci_dev_list_lock);
        list_add(&hdev->list, &hci_dev_list);
@@ -3249,17 +3222,7 @@ static void hci_queue_acl(struct hci_chan *chan, struct sk_buff_head *queue,
 
        hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT;
 
-       switch (hdev->dev_type) {
-       case HCI_PRIMARY:
-               hci_add_acl_hdr(skb, conn->handle, flags);
-               break;
-       case HCI_AMP:
-               hci_add_acl_hdr(skb, chan->handle, flags);
-               break;
-       default:
-               bt_dev_err(hdev, "unknown dev_type %d", hdev->dev_type);
-               return;
-       }
+       hci_add_acl_hdr(skb, conn->handle, flags);
 
        list = skb_shinfo(skb)->frag_list;
        if (!list) {
@@ -3419,9 +3382,6 @@ static inline void hci_quote_sent(struct hci_conn *conn, int num, int *quote)
        case ACL_LINK:
                cnt = hdev->acl_cnt;
                break;
-       case AMP_LINK:
-               cnt = hdev->block_cnt;
-               break;
        case SCO_LINK:
        case ESCO_LINK:
                cnt = hdev->sco_cnt;
@@ -3619,12 +3579,6 @@ static void hci_prio_recalculate(struct hci_dev *hdev, __u8 type)
 
 }
 
-static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb)
-{
-       /* Calculate count of blocks used by this packet */
-       return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len);
-}
-
 static void __check_timeout(struct hci_dev *hdev, unsigned int cnt, u8 type)
 {
        unsigned long last_tx;
@@ -3738,81 +3692,15 @@ static void hci_sched_acl_pkt(struct hci_dev *hdev)
                hci_prio_recalculate(hdev, ACL_LINK);
 }
 
-static void hci_sched_acl_blk(struct hci_dev *hdev)
-{
-       unsigned int cnt = hdev->block_cnt;
-       struct hci_chan *chan;
-       struct sk_buff *skb;
-       int quote;
-       u8 type;
-
-       BT_DBG("%s", hdev->name);
-
-       if (hdev->dev_type == HCI_AMP)
-               type = AMP_LINK;
-       else
-               type = ACL_LINK;
-
-       __check_timeout(hdev, cnt, type);
-
-       while (hdev->block_cnt > 0 &&
-              (chan = hci_chan_sent(hdev, type, &quote))) {
-               u32 priority = (skb_peek(&chan->data_q))->priority;
-               while (quote > 0 && (skb = skb_peek(&chan->data_q))) {
-                       int blocks;
-
-                       BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
-                              skb->len, skb->priority);
-
-                       /* Stop if priority has changed */
-                       if (skb->priority < priority)
-                               break;
-
-                       skb = skb_dequeue(&chan->data_q);
-
-                       blocks = __get_blocks(hdev, skb);
-                       if (blocks > hdev->block_cnt)
-                               return;
-
-                       hci_conn_enter_active_mode(chan->conn,
-                                                  bt_cb(skb)->force_active);
-
-                       hci_send_frame(hdev, skb);
-                       hdev->acl_last_tx = jiffies;
-
-                       hdev->block_cnt -= blocks;
-                       quote -= blocks;
-
-                       chan->sent += blocks;
-                       chan->conn->sent += blocks;
-               }
-       }
-
-       if (cnt != hdev->block_cnt)
-               hci_prio_recalculate(hdev, type);
-}
-
 static void hci_sched_acl(struct hci_dev *hdev)
 {
        BT_DBG("%s", hdev->name);
 
        /* No ACL link over BR/EDR controller */
-       if (!hci_conn_num(hdev, ACL_LINK) && hdev->dev_type == HCI_PRIMARY)
-               return;
-
-       /* No AMP link over AMP controller */
-       if (!hci_conn_num(hdev, AMP_LINK) && hdev->dev_type == HCI_AMP)
+       if (!hci_conn_num(hdev, ACL_LINK))
                return;
 
-       switch (hdev->flow_ctl_mode) {
-       case HCI_FLOW_CTL_MODE_PACKET_BASED:
-               hci_sched_acl_pkt(hdev);
-               break;
-
-       case HCI_FLOW_CTL_MODE_BLOCK_BASED:
-               hci_sched_acl_blk(hdev);
-               break;
-       }
+       hci_sched_acl_pkt(hdev);
 }
 
 static void hci_sched_le(struct hci_dev *hdev)
index 97c6f34ba64020e0635a2e3152b2724a692f0972..a487f9df81450fe92b58b67503e9c9fddc888c14 100644 (file)
@@ -913,21 +913,6 @@ static u8 hci_cc_read_local_ext_features(struct hci_dev *hdev, void *data,
        return rp->status;
 }
 
-static u8 hci_cc_read_flow_control_mode(struct hci_dev *hdev, void *data,
-                                       struct sk_buff *skb)
-{
-       struct hci_rp_read_flow_control_mode *rp = data;
-
-       bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
-
-       if (rp->status)
-               return rp->status;
-
-       hdev->flow_ctl_mode = rp->mode;
-
-       return rp->status;
-}
-
 static u8 hci_cc_read_buffer_size(struct hci_dev *hdev, void *data,
                                  struct sk_buff *skb)
 {
@@ -1071,28 +1056,6 @@ static u8 hci_cc_write_page_scan_type(struct hci_dev *hdev, void *data,
        return rp->status;
 }
 
-static u8 hci_cc_read_data_block_size(struct hci_dev *hdev, void *data,
-                                     struct sk_buff *skb)
-{
-       struct hci_rp_read_data_block_size *rp = data;
-
-       bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
-
-       if (rp->status)
-               return rp->status;
-
-       hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
-       hdev->block_len = __le16_to_cpu(rp->block_len);
-       hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
-
-       hdev->block_cnt = hdev->num_blocks;
-
-       BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
-              hdev->block_cnt, hdev->block_len);
-
-       return rp->status;
-}
-
 static u8 hci_cc_read_clock(struct hci_dev *hdev, void *data,
                            struct sk_buff *skb)
 {
@@ -1127,30 +1090,6 @@ unlock:
        return rp->status;
 }
 
-static u8 hci_cc_read_local_amp_info(struct hci_dev *hdev, void *data,
-                                    struct sk_buff *skb)
-{
-       struct hci_rp_read_local_amp_info *rp = data;
-
-       bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
-
-       if (rp->status)
-               return rp->status;
-
-       hdev->amp_status = rp->amp_status;
-       hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
-       hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
-       hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
-       hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
-       hdev->amp_type = rp->amp_type;
-       hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
-       hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
-       hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
-       hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
-
-       return rp->status;
-}
-
 static u8 hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev, void *data,
                                       struct sk_buff *skb)
 {
@@ -4120,12 +4059,6 @@ static const struct hci_cc {
        HCI_CC(HCI_OP_READ_PAGE_SCAN_TYPE, hci_cc_read_page_scan_type,
               sizeof(struct hci_rp_read_page_scan_type)),
        HCI_CC_STATUS(HCI_OP_WRITE_PAGE_SCAN_TYPE, hci_cc_write_page_scan_type),
-       HCI_CC(HCI_OP_READ_DATA_BLOCK_SIZE, hci_cc_read_data_block_size,
-              sizeof(struct hci_rp_read_data_block_size)),
-       HCI_CC(HCI_OP_READ_FLOW_CONTROL_MODE, hci_cc_read_flow_control_mode,
-              sizeof(struct hci_rp_read_flow_control_mode)),
-       HCI_CC(HCI_OP_READ_LOCAL_AMP_INFO, hci_cc_read_local_amp_info,
-              sizeof(struct hci_rp_read_local_amp_info)),
        HCI_CC(HCI_OP_READ_CLOCK, hci_cc_read_clock,
               sizeof(struct hci_rp_read_clock)),
        HCI_CC(HCI_OP_READ_ENC_KEY_SIZE, hci_cc_read_enc_key_size,
@@ -4461,11 +4394,6 @@ static void hci_num_comp_pkts_evt(struct hci_dev *hdev, void *data,
                             flex_array_size(ev, handles, ev->num)))
                return;
 
-       if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
-               bt_dev_err(hdev, "wrong event for mode %d", hdev->flow_ctl_mode);
-               return;
-       }
-
        bt_dev_dbg(hdev, "num %d", ev->num);
 
        for (i = 0; i < ev->num; i++) {
@@ -4533,78 +4461,6 @@ static void hci_num_comp_pkts_evt(struct hci_dev *hdev, void *data,
        queue_work(hdev->workqueue, &hdev->tx_work);
 }
 
-static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
-                                                __u16 handle)
-{
-       struct hci_chan *chan;
-
-       switch (hdev->dev_type) {
-       case HCI_PRIMARY:
-               return hci_conn_hash_lookup_handle(hdev, handle);
-       case HCI_AMP:
-               chan = hci_chan_lookup_handle(hdev, handle);
-               if (chan)
-                       return chan->conn;
-               break;
-       default:
-               bt_dev_err(hdev, "unknown dev_type %d", hdev->dev_type);
-               break;
-       }
-
-       return NULL;
-}
-
-static void hci_num_comp_blocks_evt(struct hci_dev *hdev, void *data,
-                                   struct sk_buff *skb)
-{
-       struct hci_ev_num_comp_blocks *ev = data;
-       int i;
-
-       if (!hci_ev_skb_pull(hdev, skb, HCI_EV_NUM_COMP_BLOCKS,
-                            flex_array_size(ev, handles, ev->num_hndl)))
-               return;
-
-       if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
-               bt_dev_err(hdev, "wrong event for mode %d",
-                          hdev->flow_ctl_mode);
-               return;
-       }
-
-       bt_dev_dbg(hdev, "num_blocks %d num_hndl %d", ev->num_blocks,
-                  ev->num_hndl);
-
-       for (i = 0; i < ev->num_hndl; i++) {
-               struct hci_comp_blocks_info *info = &ev->handles[i];
-               struct hci_conn *conn = NULL;
-               __u16  handle, block_count;
-
-               handle = __le16_to_cpu(info->handle);
-               block_count = __le16_to_cpu(info->blocks);
-
-               conn = __hci_conn_lookup_handle(hdev, handle);
-               if (!conn)
-                       continue;
-
-               conn->sent -= block_count;
-
-               switch (conn->type) {
-               case ACL_LINK:
-               case AMP_LINK:
-                       hdev->block_cnt += block_count;
-                       if (hdev->block_cnt > hdev->num_blocks)
-                               hdev->block_cnt = hdev->num_blocks;
-                       break;
-
-               default:
-                       bt_dev_err(hdev, "unknown type %d conn %p",
-                                  conn->type, conn);
-                       break;
-               }
-       }
-
-       queue_work(hdev->workqueue, &hdev->tx_work);
-}
-
 static void hci_mode_change_evt(struct hci_dev *hdev, void *data,
                                struct sk_buff *skb)
 {
@@ -7520,9 +7376,6 @@ static const struct hci_ev {
        /* [0x3e = HCI_EV_LE_META] */
        HCI_EV_REQ_VL(HCI_EV_LE_META, hci_le_meta_evt,
                      sizeof(struct hci_ev_le_meta), HCI_MAX_EVENT_SIZE),
-       /* [0x48 = HCI_EV_NUM_COMP_BLOCKS] */
-       HCI_EV(HCI_EV_NUM_COMP_BLOCKS, hci_num_comp_blocks_evt,
-              sizeof(struct hci_ev_num_comp_blocks)),
        /* [0xff = HCI_EV_VENDOR] */
        HCI_EV_VL(HCI_EV_VENDOR, msft_vendor_evt, 0, HCI_MAX_EVENT_SIZE),
 };
index 703b84bd48d5befc51d787bcd6c04dcbcff61675..69c2ba1e843eb4bb0effcffba307f227b7bb0a70 100644 (file)
@@ -485,7 +485,7 @@ static struct sk_buff *create_monitor_event(struct hci_dev *hdev, int event)
                        return NULL;
 
                ni = skb_put(skb, HCI_MON_NEW_INDEX_SIZE);
-               ni->type = hdev->dev_type;
+               ni->type = 0x00; /* Old hdev->dev_type */
                ni->bus = hdev->bus;
                bacpy(&ni->bdaddr, &hdev->bdaddr);
                memcpy_and_pad(ni->name, sizeof(ni->name), hdev->name,
@@ -1007,9 +1007,6 @@ static int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd,
        if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
                return -EOPNOTSUPP;
 
-       if (hdev->dev_type != HCI_PRIMARY)
-               return -EOPNOTSUPP;
-
        switch (cmd) {
        case HCISETRAW:
                if (!capable(CAP_NET_ADMIN))
index 813c11d61bca8084e053550f0bc14113ae4ea98e..891cae8a30da0ed2549acdc38af79e0fbbdda4a2 100644 (file)
@@ -3511,10 +3511,6 @@ static int hci_unconf_init_sync(struct hci_dev *hdev)
 /* Read Local Supported Features. */
 static int hci_read_local_features_sync(struct hci_dev *hdev)
 {
-        /* Not all AMP controllers support this command */
-       if (hdev->dev_type == HCI_AMP && !(hdev->commands[14] & 0x20))
-               return 0;
-
        return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCAL_FEATURES,
                                     0, NULL, HCI_CMD_TIMEOUT);
 }
@@ -3549,51 +3545,6 @@ static int hci_read_local_cmds_sync(struct hci_dev *hdev)
        return 0;
 }
 
-/* Read Local AMP Info */
-static int hci_read_local_amp_info_sync(struct hci_dev *hdev)
-{
-       return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCAL_AMP_INFO,
-                                    0, NULL, HCI_CMD_TIMEOUT);
-}
-
-/* Read Data Blk size */
-static int hci_read_data_block_size_sync(struct hci_dev *hdev)
-{
-       return __hci_cmd_sync_status(hdev, HCI_OP_READ_DATA_BLOCK_SIZE,
-                                    0, NULL, HCI_CMD_TIMEOUT);
-}
-
-/* Read Flow Control Mode */
-static int hci_read_flow_control_mode_sync(struct hci_dev *hdev)
-{
-       return __hci_cmd_sync_status(hdev, HCI_OP_READ_FLOW_CONTROL_MODE,
-                                    0, NULL, HCI_CMD_TIMEOUT);
-}
-
-/* Read Location Data */
-static int hci_read_location_data_sync(struct hci_dev *hdev)
-{
-       return __hci_cmd_sync_status(hdev, HCI_OP_READ_LOCATION_DATA,
-                                    0, NULL, HCI_CMD_TIMEOUT);
-}
-
-/* AMP Controller init stage 1 command sequence */
-static const struct hci_init_stage amp_init1[] = {
-       /* HCI_OP_READ_LOCAL_VERSION */
-       HCI_INIT(hci_read_local_version_sync),
-       /* HCI_OP_READ_LOCAL_COMMANDS */
-       HCI_INIT(hci_read_local_cmds_sync),
-       /* HCI_OP_READ_LOCAL_AMP_INFO */
-       HCI_INIT(hci_read_local_amp_info_sync),
-       /* HCI_OP_READ_DATA_BLOCK_SIZE */
-       HCI_INIT(hci_read_data_block_size_sync),
-       /* HCI_OP_READ_FLOW_CONTROL_MODE */
-       HCI_INIT(hci_read_flow_control_mode_sync),
-       /* HCI_OP_READ_LOCATION_DATA */
-       HCI_INIT(hci_read_location_data_sync),
-       {}
-};
-
 static int hci_init1_sync(struct hci_dev *hdev)
 {
        int err;
@@ -3607,28 +3558,9 @@ static int hci_init1_sync(struct hci_dev *hdev)
                        return err;
        }
 
-       switch (hdev->dev_type) {
-       case HCI_PRIMARY:
-               hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_PACKET_BASED;
-               return hci_init_stage_sync(hdev, br_init1);
-       case HCI_AMP:
-               hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_BLOCK_BASED;
-               return hci_init_stage_sync(hdev, amp_init1);
-       default:
-               bt_dev_err(hdev, "Unknown device type %d", hdev->dev_type);
-               break;
-       }
-
-       return 0;
+       return hci_init_stage_sync(hdev, br_init1);
 }
 
-/* AMP Controller init stage 2 command sequence */
-static const struct hci_init_stage amp_init2[] = {
-       /* HCI_OP_READ_LOCAL_FEATURES */
-       HCI_INIT(hci_read_local_features_sync),
-       {}
-};
-
 /* Read Buffer Size (ACL mtu, max pkt, etc.) */
 static int hci_read_buffer_size_sync(struct hci_dev *hdev)
 {
@@ -3886,9 +3818,6 @@ static int hci_init2_sync(struct hci_dev *hdev)
 
        bt_dev_dbg(hdev, "");
 
-       if (hdev->dev_type == HCI_AMP)
-               return hci_init_stage_sync(hdev, amp_init2);
-
        err = hci_init_stage_sync(hdev, hci_init2);
        if (err)
                return err;
@@ -4716,13 +4645,6 @@ static int hci_init_sync(struct hci_dev *hdev)
        if (err < 0)
                return err;
 
-       /* HCI_PRIMARY covers both single-mode LE, BR/EDR and dual-mode
-        * BR/EDR/LE type controllers. AMP controllers only need the
-        * first two stages of init.
-        */
-       if (hdev->dev_type != HCI_PRIMARY)
-               return 0;
-
        err = hci_init3_sync(hdev);
        if (err < 0)
                return err;
@@ -4951,12 +4873,8 @@ int hci_dev_open_sync(struct hci_dev *hdev)
                 * In case of user channel usage, it is not important
                 * if a public address or static random address is
                 * available.
-                *
-                * This check is only valid for BR/EDR controllers
-                * since AMP controllers do not have an address.
                 */
                if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
-                   hdev->dev_type == HCI_PRIMARY &&
                    !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
                    !bacmp(&hdev->static_addr, BDADDR_ANY)) {
                        ret = -EADDRNOTAVAIL;
@@ -4991,8 +4909,7 @@ int hci_dev_open_sync(struct hci_dev *hdev)
                    !hci_dev_test_flag(hdev, HCI_CONFIG) &&
                    !hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
                    !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
-                   hci_dev_test_flag(hdev, HCI_MGMT) &&
-                   hdev->dev_type == HCI_PRIMARY) {
+                   hci_dev_test_flag(hdev, HCI_MGMT)) {
                        ret = hci_powered_update_sync(hdev);
                        mgmt_power_on(hdev, ret);
                }
@@ -5137,8 +5054,7 @@ int hci_dev_close_sync(struct hci_dev *hdev)
 
        auto_off = hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF);
 
-       if (!auto_off && hdev->dev_type == HCI_PRIMARY &&
-           !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
+       if (!auto_off && !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
            hci_dev_test_flag(hdev, HCI_MGMT))
                __mgmt_power_off(hdev);
 
@@ -5200,9 +5116,6 @@ int hci_dev_close_sync(struct hci_dev *hdev)
        hdev->flags &= BIT(HCI_RAW);
        hci_dev_clear_volatile_flags(hdev);
 
-       /* Controller radio is available but is currently powered down */
-       hdev->amp_status = AMP_STATUS_POWERED_DOWN;
-
        memset(hdev->eir, 0, sizeof(hdev->eir));
        memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
        bacpy(&hdev->random_addr, BDADDR_ANY);
@@ -5239,8 +5152,7 @@ static int hci_power_on_sync(struct hci_dev *hdev)
         */
        if (hci_dev_test_flag(hdev, HCI_RFKILLED) ||
            hci_dev_test_flag(hdev, HCI_UNCONFIGURED) ||
-           (hdev->dev_type == HCI_PRIMARY &&
-            !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
+           (!bacmp(&hdev->bdaddr, BDADDR_ANY) &&
             !bacmp(&hdev->static_addr, BDADDR_ANY))) {
                hci_dev_clear_flag(hdev, HCI_AUTO_OFF);
                hci_dev_close_sync(hdev);
@@ -5342,27 +5254,11 @@ int hci_stop_discovery_sync(struct hci_dev *hdev)
        return 0;
 }
 
-static int hci_disconnect_phy_link_sync(struct hci_dev *hdev, u16 handle,
-                                       u8 reason)
-{
-       struct hci_cp_disconn_phy_link cp;
-
-       memset(&cp, 0, sizeof(cp));
-       cp.phy_handle = HCI_PHY_HANDLE(handle);
-       cp.reason = reason;
-
-       return __hci_cmd_sync_status(hdev, HCI_OP_DISCONN_PHY_LINK,
-                                    sizeof(cp), &cp, HCI_CMD_TIMEOUT);
-}
-
 static int hci_disconnect_sync(struct hci_dev *hdev, struct hci_conn *conn,
                               u8 reason)
 {
        struct hci_cp_disconnect cp;
 
-       if (conn->type == AMP_LINK)
-               return hci_disconnect_phy_link_sync(hdev, conn->handle, reason);
-
        if (test_bit(HCI_CONN_BIG_CREATED, &conn->flags)) {
                /* This is a BIS connection, hci_conn_del will
                 * do the necessary cleanup.
index adc8f990f13e14038ac3f63d37edebc06516dca4..5b509b767557230689f037635d70e9a2897137d1 100644 (file)
@@ -3932,7 +3932,7 @@ static inline int l2cap_command_rej(struct l2cap_conn *conn,
 }
 
 static void l2cap_connect(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd,
-                         u8 *data, u8 rsp_code, u8 amp_id)
+                         u8 *data, u8 rsp_code)
 {
        struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
        struct l2cap_conn_rsp rsp;
@@ -4011,17 +4011,8 @@ static void l2cap_connect(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd,
                                status = L2CAP_CS_AUTHOR_PEND;
                                chan->ops->defer(chan);
                        } else {
-                               /* Force pending result for AMP controllers.
-                                * The connection will succeed after the
-                                * physical link is up.
-                                */
-                               if (amp_id == AMP_ID_BREDR) {
-                                       l2cap_state_change(chan, BT_CONFIG);
-                                       result = L2CAP_CR_SUCCESS;
-                               } else {
-                                       l2cap_state_change(chan, BT_CONNECT2);
-                                       result = L2CAP_CR_PEND;
-                               }
+                               l2cap_state_change(chan, BT_CONNECT2);
+                               result = L2CAP_CR_PEND;
                                status = L2CAP_CS_NO_INFO;
                        }
                } else {
@@ -4086,7 +4077,7 @@ static int l2cap_connect_req(struct l2cap_conn *conn,
                mgmt_device_connected(hdev, hcon, NULL, 0);
        hci_dev_unlock(hdev);
 
-       l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP, 0);
+       l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP);
        return 0;
 }
 
@@ -7491,10 +7482,6 @@ void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
        struct l2cap_conn *conn = hcon->l2cap_data;
        int len;
 
-       /* For AMP controller do not create l2cap conn */
-       if (!conn && hcon->hdev->dev_type != HCI_PRIMARY)
-               goto drop;
-
        if (!conn)
                conn = l2cap_conn_add(hcon);
 
index 965f621ef865adb607a6ccf71f6b2e7429a10a99..80f220b7e19d5560df42e807c20c70622e3bc205 100644 (file)
@@ -443,8 +443,7 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
 
        count = 0;
        list_for_each_entry(d, &hci_dev_list, list) {
-               if (d->dev_type == HCI_PRIMARY &&
-                   !hci_dev_test_flag(d, HCI_UNCONFIGURED))
+               if (!hci_dev_test_flag(d, HCI_UNCONFIGURED))
                        count++;
        }
 
@@ -468,8 +467,7 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
                if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
                        continue;
 
-               if (d->dev_type == HCI_PRIMARY &&
-                   !hci_dev_test_flag(d, HCI_UNCONFIGURED)) {
+               if (!hci_dev_test_flag(d, HCI_UNCONFIGURED)) {
                        rp->index[count++] = cpu_to_le16(d->id);
                        bt_dev_dbg(hdev, "Added hci%u", d->id);
                }
@@ -503,8 +501,7 @@ static int read_unconf_index_list(struct sock *sk, struct hci_dev *hdev,
 
        count = 0;
        list_for_each_entry(d, &hci_dev_list, list) {
-               if (d->dev_type == HCI_PRIMARY &&
-                   hci_dev_test_flag(d, HCI_UNCONFIGURED))
+               if (hci_dev_test_flag(d, HCI_UNCONFIGURED))
                        count++;
        }
 
@@ -528,8 +525,7 @@ static int read_unconf_index_list(struct sock *sk, struct hci_dev *hdev,
                if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
                        continue;
 
-               if (d->dev_type == HCI_PRIMARY &&
-                   hci_dev_test_flag(d, HCI_UNCONFIGURED)) {
+               if (hci_dev_test_flag(d, HCI_UNCONFIGURED)) {
                        rp->index[count++] = cpu_to_le16(d->id);
                        bt_dev_dbg(hdev, "Added hci%u", d->id);
                }
@@ -561,10 +557,8 @@ static int read_ext_index_list(struct sock *sk, struct hci_dev *hdev,
        read_lock(&hci_dev_list_lock);
 
        count = 0;
-       list_for_each_entry(d, &hci_dev_list, list) {
-               if (d->dev_type == HCI_PRIMARY || d->dev_type == HCI_AMP)
-                       count++;
-       }
+       list_for_each_entry(d, &hci_dev_list, list)
+               count++;
 
        rp = kmalloc(struct_size(rp, entry, count), GFP_ATOMIC);
        if (!rp) {
@@ -585,16 +579,10 @@ static int read_ext_index_list(struct sock *sk, struct hci_dev *hdev,
                if (test_bit(HCI_QUIRK_RAW_DEVICE, &d->quirks))
                        continue;
 
-               if (d->dev_type == HCI_PRIMARY) {
-                       if (hci_dev_test_flag(d, HCI_UNCONFIGURED))
-                               rp->entry[count].type = 0x01;
-                       else
-                               rp->entry[count].type = 0x00;
-               } else if (d->dev_type == HCI_AMP) {
-                       rp->entry[count].type = 0x02;
-               } else {
-                       continue;
-               }
+               if (hci_dev_test_flag(d, HCI_UNCONFIGURED))
+                       rp->entry[count].type = 0x01;
+               else
+                       rp->entry[count].type = 0x00;
 
                rp->entry[count].bus = d->bus;
                rp->entry[count++].index = cpu_to_le16(d->id);
@@ -9331,23 +9319,14 @@ void mgmt_index_added(struct hci_dev *hdev)
        if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
                return;
 
-       switch (hdev->dev_type) {
-       case HCI_PRIMARY:
-               if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
-                       mgmt_index_event(MGMT_EV_UNCONF_INDEX_ADDED, hdev,
-                                        NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS);
-                       ev.type = 0x01;
-               } else {
-                       mgmt_index_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0,
-                                        HCI_MGMT_INDEX_EVENTS);
-                       ev.type = 0x00;
-               }
-               break;
-       case HCI_AMP:
-               ev.type = 0x02;
-               break;
-       default:
-               return;
+       if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
+               mgmt_index_event(MGMT_EV_UNCONF_INDEX_ADDED, hdev, NULL, 0,
+                                HCI_MGMT_UNCONF_INDEX_EVENTS);
+               ev.type = 0x01;
+       } else {
+               mgmt_index_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0,
+                                HCI_MGMT_INDEX_EVENTS);
+               ev.type = 0x00;
        }
 
        ev.bus = hdev->bus;
@@ -9364,25 +9343,16 @@ void mgmt_index_removed(struct hci_dev *hdev)
        if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
                return;
 
-       switch (hdev->dev_type) {
-       case HCI_PRIMARY:
-               mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status);
+       mgmt_pending_foreach(0, hdev, cmd_complete_rsp, &status);
 
-               if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
-                       mgmt_index_event(MGMT_EV_UNCONF_INDEX_REMOVED, hdev,
-                                        NULL, 0, HCI_MGMT_UNCONF_INDEX_EVENTS);
-                       ev.type = 0x01;
-               } else {
-                       mgmt_index_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0,
-                                        HCI_MGMT_INDEX_EVENTS);
-                       ev.type = 0x00;
-               }
-               break;
-       case HCI_AMP:
-               ev.type = 0x02;
-               break;
-       default:
-               return;
+       if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
+               mgmt_index_event(MGMT_EV_UNCONF_INDEX_REMOVED, hdev, NULL, 0,
+                                HCI_MGMT_UNCONF_INDEX_EVENTS);
+               ev.type = 0x01;
+       } else {
+               mgmt_index_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0,
+                                HCI_MGMT_INDEX_EVENTS);
+               ev.type = 0x00;
        }
 
        ev.bus = hdev->bus;