Bluetooth: Update SSP OOB data EIR definitions
[firefly-linux-kernel-4.4.55.git] / include / net / bluetooth / hci.h
index 40129b3838b2aa8d811756a61900de4ecf7e850c..2f8c830e600c35b3371a3260804f89cbcae6ef35 100644 (file)
@@ -102,6 +102,28 @@ enum {
         */
        HCI_QUIRK_FIXUP_BUFFER_SIZE,
 
+       /* When this quirk is set, then a controller that does not
+        * indicate support for Inquiry Result with RSSI is assumed to
+        * support it anyway. Some early Bluetooth 1.2 controllers had
+        * wrongly configured local features that will require forcing
+        * them to enable this mode. Getting RSSI information with the
+        * inquiry responses is preferred since it allows for a better
+        * user expierence.
+        *
+        * This quirk must be set before hci_register_dev is called.
+        */
+       HCI_QUIRK_FIXUP_INQUIRY_MODE,
+
+       /* When this quirk is set, then the HCI Read Local Supported
+        * Commands command is not supported. In general Bluetooth 1.2
+        * and later controllers should support this command. However
+        * some controllers indicate Bluetooth 1.2 support, but do
+        * not support this command.
+        *
+        * This quirk must be set before hci_register_dev is called.
+        */
+       HCI_QUIRK_BROKEN_LOCAL_COMMANDS,
+
        /* When this quirk is set, then no stored link key handling
         * is performed. This is mainly due to the fact that the
         * HCI Delete Stored Link Key command is advertised, but
@@ -138,6 +160,14 @@ enum {
         * during the hdev->setup vendor callback.
         */
        HCI_QUIRK_STRICT_DUPLICATE_FILTER,
+
+       /* When this quirk is set, LE scan and BR/EDR inquiry is done
+        * simultaneously, otherwise it's interleaved.
+        *
+        * This quirk can be set before hci_register_dev is called or
+        * during the hdev->setup vendor callback.
+        */
+       HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
 };
 
 /* HCI device flags */
@@ -157,14 +187,14 @@ enum {
        HCI_RESET,
 };
 
-/* BR/EDR and/or LE controller flags: the flags defined here should represent
- * states configured via debugfs for debugging and testing purposes only.
- */
+/* HCI socket flags */
 enum {
-       HCI_DUT_MODE,
-       HCI_FORCE_SC,
-       HCI_FORCE_LESC,
-       HCI_FORCE_STATIC_ADDR,
+       HCI_SOCK_TRUSTED,
+       HCI_MGMT_INDEX_EVENTS,
+       HCI_MGMT_UNCONF_INDEX_EVENTS,
+       HCI_MGMT_EXT_INDEX_EVENTS,
+       HCI_MGMT_GENERIC_EVENTS,
+       HCI_MGMT_OOB_DATA_EVENTS,
 };
 
 /*
@@ -196,6 +226,8 @@ enum {
        HCI_HS_ENABLED,
        HCI_LE_ENABLED,
        HCI_ADVERTISING,
+       HCI_ADVERTISING_CONNECTABLE,
+       HCI_ADVERTISING_INSTANCE,
        HCI_CONNECTABLE,
        HCI_DISCOVERABLE,
        HCI_LIMITED_DISCOVERABLE,
@@ -204,13 +236,13 @@ enum {
        HCI_FAST_CONNECTABLE,
        HCI_BREDR_ENABLED,
        HCI_LE_SCAN_INTERRUPTED,
-};
 
-/* A mask for the flags that are supposed to remain when a reset happens
- * or the HCI device is closed.
- */
-#define HCI_PERSISTENT_MASK (BIT(HCI_LE_SCAN) | BIT(HCI_PERIODIC_INQ) | \
-                             BIT(HCI_FAST_CONNECTABLE) | BIT(HCI_LE_ADV))
+       HCI_DUT_MODE,
+       HCI_FORCE_BREDR_SMP,
+       HCI_FORCE_STATIC_ADDR,
+
+       __HCI_NUM_FLAGS,
+};
 
 /* HCI timeouts */
 #define HCI_DISCONN_TIMEOUT    msecs_to_jiffies(2000)  /* 2 seconds */
@@ -343,6 +375,7 @@ enum {
 #define HCI_LE_ENCRYPTION              0x01
 #define HCI_LE_CONN_PARAM_REQ_PROC     0x02
 #define HCI_LE_PING                    0x10
+#define HCI_LE_DATA_LEN_EXT            0x20
 #define HCI_LE_EXT_SCAN_POLICY         0x80
 
 /* Connection modes */
@@ -430,9 +463,16 @@ enum {
 #define EIR_NAME_COMPLETE      0x09 /* complete local name */
 #define EIR_TX_POWER           0x0A /* transmit power level */
 #define EIR_CLASS_OF_DEV       0x0D /* Class of Device */
-#define EIR_SSP_HASH_C         0x0E /* Simple Pairing Hash C */
-#define EIR_SSP_RAND_R         0x0F /* Simple Pairing Randomizer R */
+#define EIR_SSP_HASH_C192      0x0E /* Simple Pairing Hash C-192 */
+#define EIR_SSP_RAND_R192      0x0F /* Simple Pairing Randomizer R-192 */
 #define EIR_DEVICE_ID          0x10 /* device ID */
+#define EIR_APPEARANCE         0x19 /* Device appearance */
+#define EIR_LE_BDADDR          0x1B /* LE Bluetooth device address */
+#define EIR_LE_ROLE            0x1C /* LE role */
+#define EIR_SSP_HASH_C256      0x1D /* Simple Pairing Hash C-256 */
+#define EIR_SSP_RAND_R256      0x1E /* Simple Pairing Rand R-256 */
+#define EIR_LE_SC_CONFIRM      0x22 /* LE SC Confirmation Value */
+#define EIR_LE_SC_RANDOM       0x23 /* LE SC Random Value */
 
 /* Low Energy Advertising Flags */
 #define LE_AD_LIMITED          0x01 /* Limited Discoverable */
@@ -833,11 +873,26 @@ struct hci_cp_set_event_flt {
 #define HCI_CONN_SETUP_AUTO_OFF        0x01
 #define HCI_CONN_SETUP_AUTO_ON 0x02
 
+#define HCI_OP_READ_STORED_LINK_KEY    0x0c0d
+struct hci_cp_read_stored_link_key {
+       bdaddr_t bdaddr;
+       __u8     read_all;
+} __packed;
+struct hci_rp_read_stored_link_key {
+       __u8     status;
+       __u8     max_keys;
+       __u8     num_keys;
+} __packed;
+
 #define HCI_OP_DELETE_STORED_LINK_KEY  0x0c12
 struct hci_cp_delete_stored_link_key {
        bdaddr_t bdaddr;
        __u8     delete_all;
 } __packed;
+struct hci_rp_delete_stored_link_key {
+       __u8     status;
+       __u8     num_keys;
+} __packed;
 
 #define HCI_MAX_NAME_LENGTH            248
 
@@ -1371,6 +1426,39 @@ struct hci_cp_le_conn_param_req_neg_reply {
        __u8    reason;
 } __packed;
 
+#define HCI_OP_LE_SET_DATA_LEN         0x2022
+struct hci_cp_le_set_data_len {
+       __le16  handle;
+       __le16  tx_len;
+       __le16  tx_time;
+} __packed;
+struct hci_rp_le_set_data_len {
+       __u8    status;
+       __le16  handle;
+} __packed;
+
+#define HCI_OP_LE_READ_DEF_DATA_LEN    0x2023
+struct hci_rp_le_read_def_data_len {
+       __u8    status;
+       __le16  tx_len;
+       __le16  tx_time;
+} __packed;
+
+#define HCI_OP_LE_WRITE_DEF_DATA_LEN   0x2024
+struct hci_cp_le_write_def_data_len {
+       __le16  tx_len;
+       __le16  tx_time;
+} __packed;
+
+#define HCI_OP_LE_READ_MAX_DATA_LEN    0x202f
+struct hci_rp_le_read_max_data_len {
+       __u8    status;
+       __le16  tx_len;
+       __le16  tx_time;
+       __le16  rx_len;
+       __le16  rx_time;
+} __packed;
+
 /* ---- HCI Events ---- */
 #define HCI_EV_INQUIRY_COMPLETE                0x01
 
@@ -1796,6 +1884,15 @@ struct hci_ev_le_remote_conn_param_req {
        __le16 timeout;
 } __packed;
 
+#define HCI_EV_LE_DATA_LEN_CHANGE      0x07
+struct hci_ev_le_data_len_change {
+       __le16  handle;
+       __le16  tx_len;
+       __le16  tx_time;
+       __le16  rx_len;
+       __le16  rx_time;
+} __packed;
+
 #define HCI_EV_LE_DIRECT_ADV_REPORT    0x0B
 struct hci_ev_le_direct_adv_info {
        __u8     evt_type;