linux/drivers/bluetooth/btintel.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 *
   4 *  Bluetooth support for Intel devices
   5 *
   6 *  Copyright (C) 2015  Intel Corporation
   7 */
   8
   9struct intel_version {
  10        u8 status;
  11        u8 hw_platform;
  12        u8 hw_variant;
  13        u8 hw_revision;
  14        u8 fw_variant;
  15        u8 fw_revision;
  16        u8 fw_build_num;
  17        u8 fw_build_ww;
  18        u8 fw_build_yy;
  19        u8 fw_patch_num;
  20} __packed;
  21
  22struct intel_boot_params {
  23        __u8     status;
  24        __u8     otp_format;
  25        __u8     otp_content;
  26        __u8     otp_patch;
  27        __le16   dev_revid;
  28        __u8     secure_boot;
  29        __u8     key_from_hdr;
  30        __u8     key_type;
  31        __u8     otp_lock;
  32        __u8     api_lock;
  33        __u8     debug_lock;
  34        bdaddr_t otp_bdaddr;
  35        __u8     min_fw_build_nn;
  36        __u8     min_fw_build_cw;
  37        __u8     min_fw_build_yy;
  38        __u8     limited_cce;
  39        __u8     unlocked_state;
  40} __packed;
  41
  42struct intel_bootup {
  43        __u8     zero;
  44        __u8     num_cmds;
  45        __u8     source;
  46        __u8     reset_type;
  47        __u8     reset_reason;
  48        __u8     ddc_status;
  49} __packed;
  50
  51struct intel_secure_send_result {
  52        __u8     result;
  53        __le16   opcode;
  54        __u8     status;
  55} __packed;
  56
  57struct intel_reset {
  58        __u8     reset_type;
  59        __u8     patch_enable;
  60        __u8     ddc_reload;
  61        __u8     boot_option;
  62        __le32   boot_param;
  63} __packed;
  64
  65#if IS_ENABLED(CONFIG_BT_INTEL)
  66
  67int btintel_check_bdaddr(struct hci_dev *hdev);
  68int btintel_enter_mfg(struct hci_dev *hdev);
  69int btintel_exit_mfg(struct hci_dev *hdev, bool reset, bool patched);
  70int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
  71int btintel_set_diag(struct hci_dev *hdev, bool enable);
  72int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable);
  73void btintel_hw_error(struct hci_dev *hdev, u8 code);
  74
  75void btintel_version_info(struct hci_dev *hdev, struct intel_version *ver);
  76int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen,
  77                        const void *param);
  78int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name);
  79int btintel_set_event_mask(struct hci_dev *hdev, bool debug);
  80int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug);
  81int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver);
  82
  83struct regmap *btintel_regmap_init(struct hci_dev *hdev, u16 opcode_read,
  84                                   u16 opcode_write);
  85int btintel_send_intel_reset(struct hci_dev *hdev, u32 boot_param);
  86int btintel_read_boot_params(struct hci_dev *hdev,
  87                             struct intel_boot_params *params);
  88int btintel_download_firmware(struct hci_dev *dev, const struct firmware *fw,
  89                              u32 *boot_param);
  90void btintel_reset_to_bootloader(struct hci_dev *hdev);
  91#else
  92
  93static inline int btintel_check_bdaddr(struct hci_dev *hdev)
  94{
  95        return -EOPNOTSUPP;
  96}
  97
  98static inline int btintel_enter_mfg(struct hci_dev *hdev)
  99{
 100        return -EOPNOTSUPP;
 101}
 102
 103static inline int btintel_exit_mfg(struct hci_dev *hdev, bool reset, bool patched)
 104{
 105        return -EOPNOTSUPP;
 106}
 107
 108static inline int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
 109{
 110        return -EOPNOTSUPP;
 111}
 112
 113static inline int btintel_set_diag(struct hci_dev *hdev, bool enable)
 114{
 115        return -EOPNOTSUPP;
 116}
 117
 118static inline int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable)
 119{
 120        return -EOPNOTSUPP;
 121}
 122
 123static inline void btintel_hw_error(struct hci_dev *hdev, u8 code)
 124{
 125}
 126
 127static inline void btintel_version_info(struct hci_dev *hdev,
 128                                        struct intel_version *ver)
 129{
 130}
 131
 132static inline int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type,
 133                                      u32 plen, const void *param)
 134{
 135        return -EOPNOTSUPP;
 136}
 137
 138static inline int btintel_load_ddc_config(struct hci_dev *hdev,
 139                                          const char *ddc_name)
 140{
 141        return -EOPNOTSUPP;
 142}
 143
 144static inline int btintel_set_event_mask(struct hci_dev *hdev, bool debug)
 145{
 146        return -EOPNOTSUPP;
 147}
 148
 149static inline int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug)
 150{
 151        return -EOPNOTSUPP;
 152}
 153
 154static inline int btintel_read_version(struct hci_dev *hdev,
 155                                       struct intel_version *ver)
 156{
 157        return -EOPNOTSUPP;
 158}
 159
 160static inline struct regmap *btintel_regmap_init(struct hci_dev *hdev,
 161                                                 u16 opcode_read,
 162                                                 u16 opcode_write)
 163{
 164        return ERR_PTR(-EINVAL);
 165}
 166
 167static inline int btintel_send_intel_reset(struct hci_dev *hdev,
 168                                           u32 reset_param)
 169{
 170        return -EOPNOTSUPP;
 171}
 172
 173static inline int btintel_read_boot_params(struct hci_dev *hdev,
 174                                           struct intel_boot_params *params)
 175{
 176        return -EOPNOTSUPP;
 177}
 178
 179static inline int btintel_download_firmware(struct hci_dev *dev,
 180                                            const struct firmware *fw,
 181                                            u32 *boot_param)
 182{
 183        return -EOPNOTSUPP;
 184}
 185
 186static inline void btintel_reset_to_bootloader(struct hci_dev *hdev)
 187{
 188}
 189#endif
 190