Bluetooth: btintel: Add btintel data struct
This patch adds a data structure for btintel for btintel object, and the definition of bootloder states. It also adds macros to set/test/clear the flags. Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
Родитель
83f2dafe2a
Коммит
53492a668e
|
@ -138,6 +138,46 @@ struct intel_debug_features {
|
||||||
#define INTEL_CNVX_TOP_STEP(cnvx_top) (((cnvx_top) & 0x0f000000) >> 24)
|
#define INTEL_CNVX_TOP_STEP(cnvx_top) (((cnvx_top) & 0x0f000000) >> 24)
|
||||||
#define INTEL_CNVX_TOP_PACK_SWAB(t, s) __swab16(((__u16)(((t) << 4) | (s))))
|
#define INTEL_CNVX_TOP_PACK_SWAB(t, s) __swab16(((__u16)(((t) << 4) | (s))))
|
||||||
|
|
||||||
|
enum {
|
||||||
|
INTEL_BOOTLOADER,
|
||||||
|
INTEL_DOWNLOADING,
|
||||||
|
INTEL_FIRMWARE_LOADED,
|
||||||
|
INTEL_FIRMWARE_FAILED,
|
||||||
|
INTEL_BOOTING,
|
||||||
|
|
||||||
|
__INTEL_NUM_FLAGS,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct btintel_data {
|
||||||
|
DECLARE_BITMAP(flags, __INTEL_NUM_FLAGS);
|
||||||
|
};
|
||||||
|
|
||||||
|
#define btintel_set_flag(hdev, nr) \
|
||||||
|
do { \
|
||||||
|
struct btintel_data *intel = hci_get_priv((hdev)); \
|
||||||
|
set_bit((nr), intel->flags); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define btintel_clear_flag(hdev, nr) \
|
||||||
|
do { \
|
||||||
|
struct btintel_data *intel = hci_get_priv((hdev)); \
|
||||||
|
clear_bit((nr), intel->flags); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define btintel_wake_up_flag(hdev, nr) \
|
||||||
|
do { \
|
||||||
|
struct btintel_data *intel = hci_get_priv((hdev)); \
|
||||||
|
wake_up_bit(intel->flags, (nr)); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define btintel_get_flag(hdev) \
|
||||||
|
(((struct btintel_data *)hci_get_priv(hdev))->flags)
|
||||||
|
|
||||||
|
#define btintel_test_flag(hdev, nr) test_bit((nr), btintel_get_flag(hdev))
|
||||||
|
#define btintel_test_and_clear_flag(hdev, nr) test_and_clear_bit((nr), btintel_get_flag(hdev))
|
||||||
|
#define btintel_wait_on_flag_timeout(hdev, nr, m, to) \
|
||||||
|
wait_on_bit_timeout(btintel_get_flag(hdev), (nr), m, to)
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_BT_INTEL)
|
#if IS_ENABLED(CONFIG_BT_INTEL)
|
||||||
|
|
||||||
int btintel_check_bdaddr(struct hci_dev *hdev);
|
int btintel_check_bdaddr(struct hci_dev *hdev);
|
||||||
|
|
|
@ -4299,7 +4299,7 @@ static int btusb_probe(struct usb_interface *intf,
|
||||||
struct btusb_data *data;
|
struct btusb_data *data;
|
||||||
struct hci_dev *hdev;
|
struct hci_dev *hdev;
|
||||||
unsigned ifnum_base;
|
unsigned ifnum_base;
|
||||||
int i, err;
|
int i, err, priv_size;
|
||||||
|
|
||||||
BT_DBG("intf %p id %p", intf, id);
|
BT_DBG("intf %p id %p", intf, id);
|
||||||
|
|
||||||
|
@ -4385,6 +4385,13 @@ static int btusb_probe(struct usb_interface *intf,
|
||||||
init_usb_anchor(&data->ctrl_anchor);
|
init_usb_anchor(&data->ctrl_anchor);
|
||||||
spin_lock_init(&data->rxlock);
|
spin_lock_init(&data->rxlock);
|
||||||
|
|
||||||
|
priv_size = 0;
|
||||||
|
|
||||||
|
if (id->driver_info & BTUSB_INTEL_COMBINED) {
|
||||||
|
/* Allocate extra space for Intel device */
|
||||||
|
priv_size += sizeof(struct btintel_data);
|
||||||
|
}
|
||||||
|
|
||||||
if (id->driver_info & BTUSB_INTEL_NEW) {
|
if (id->driver_info & BTUSB_INTEL_NEW) {
|
||||||
data->recv_event = btusb_recv_event_intel;
|
data->recv_event = btusb_recv_event_intel;
|
||||||
data->recv_bulk = btusb_recv_bulk_intel;
|
data->recv_bulk = btusb_recv_bulk_intel;
|
||||||
|
@ -4396,7 +4403,7 @@ static int btusb_probe(struct usb_interface *intf,
|
||||||
|
|
||||||
data->recv_acl = hci_recv_frame;
|
data->recv_acl = hci_recv_frame;
|
||||||
|
|
||||||
hdev = hci_alloc_dev();
|
hdev = hci_alloc_dev_priv(priv_size);
|
||||||
if (!hdev)
|
if (!hdev)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче