Hi Tedd, > This patch adds a data structure for btintel for btintel object, and the > definition of bootloder states. > > Signed-off-by: Tedd Ho-Jeong An <tedd.an@xxxxxxxxx> > --- > drivers/bluetooth/btintel.c | 8 ++++++++ > drivers/bluetooth/btintel.h | 15 +++++++++++++++ > drivers/bluetooth/btusb.c | 6 ++++-- > 3 files changed, 27 insertions(+), 2 deletions(-) > > diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c > index cfc097694b53..bf0ad05b80fe 100644 > --- a/drivers/bluetooth/btintel.c > +++ b/drivers/bluetooth/btintel.c > @@ -1753,6 +1753,14 @@ int btintel_shutdown_combined(struct hci_dev *hdev) > } > EXPORT_SYMBOL_GPL(btintel_shutdown_combined); > > +void btintel_set_flags(struct hci_dev *hdev, unsigned int flag) > +{ > + struct btintel_data *intel = hci_get_priv(hdev); > + > + set_bit(flag, &intel->flags); > +} > +EXPORT_SYMBOL_GPL(btintel_set_flags); > + > MODULE_AUTHOR("Marcel Holtmann <marcel@xxxxxxxxxxxx>"); > MODULE_DESCRIPTION("Bluetooth support for Intel devices ver " VERSION); > MODULE_VERSION(VERSION); > diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h > index 68ffa84fa87a..df7aa30142b4 100644 > --- a/drivers/bluetooth/btintel.h > +++ b/drivers/bluetooth/btintel.h > @@ -138,6 +138,16 @@ struct intel_debug_features { > #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_BOOTLOADER 0 > +#define INTEL_DOWNLOADING 1 > +#define INTEL_FIRMWARE_LOADED 2 > +#define INTEL_FIRMWARE_FAILED 3 > +#define INTEL_BOOTING 4 > + > +struct btintel_data { > + unsigned long flags; So I don’t know how many flags we have for this to matter. But maybe DECLARE_BITMAP(flags, __NUM); might be a good idea. We also do things like #define hci_dev_set_flag(hdev, nr) set_bit((nr), (hdev)->dev_flags) and it looks like using a define is a better approach than a function. #define btintel_set_flag(hdev, nr) do { \ struct btintel_data *intel = hci_get_priv((hdev)); \ set_bit(nr, &intel->flags); \ } while (0) > +}; > + > #if IS_ENABLED(CONFIG_BT_INTEL) > > int btintel_check_bdaddr(struct hci_dev *hdev); > @@ -167,6 +177,7 @@ int btintel_download_firmware(struct hci_dev *dev, struct intel_version *ver, > const struct firmware *fw, u32 *boot_param); > int btintel_setup_combined(struct hci_dev *hdev); > int btintel_shutdown_combined(struct hci_dev *hdev); > +void btintel_set_flags(struct hci_dev *hdev, unsigned int flag); > int btintel_download_firmware_newgen(struct hci_dev *hdev, > struct intel_version_tlv *ver, > const struct firmware *fw, > @@ -295,6 +306,10 @@ static inline int btintel_shutdown_combined(struct hci_dev *hdev) > return -EOPNOTSUPP; > } > > +static inline void btintel_set_flags(struct hci_dev *hdev, unsigned int flag) > +{ > +} > + > static inline int btintel_download_firmware_newgen(struct hci_dev *hdev, > const struct firmware *fw, > u32 *boot_param, > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > index 42f7176a6c70..8c54ab03ee63 100644 > --- a/drivers/bluetooth/btusb.c > +++ b/drivers/bluetooth/btusb.c > @@ -4133,7 +4133,7 @@ static int btusb_probe(struct usb_interface *intf, > struct btusb_data *data; > struct hci_dev *hdev; > unsigned ifnum_base; > - int i, err; > + int i, err, priv_size; > > BT_DBG("intf %p id %p", intf, id); > > @@ -4219,6 +4219,8 @@ static int btusb_probe(struct usb_interface *intf, > init_usb_anchor(&data->ctrl_anchor); > spin_lock_init(&data->rxlock); > > + priv_size = 0; > + > if (id->driver_info & BTUSB_INTEL_NEW) { > data->recv_event = btusb_recv_event_intel; > data->recv_bulk = btusb_recv_bulk_intel; > @@ -4228,7 +4230,7 @@ static int btusb_probe(struct usb_interface *intf, > data->recv_bulk = btusb_recv_bulk; > } > But your are not setting the size in case of BTUSB_INTEL_COMBINED. > - hdev = hci_alloc_dev(); > + hdev = hci_alloc_dev_priv(priv_size); > if (!hdev) > return -ENOMEM; Regards Marcel