root/drivers/bluetooth/btqca.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. qca_is_wcn399x
  2. qca_set_bdaddr_rome
  3. qca_uart_setup
  4. qca_read_soc_version
  5. qca_set_bdaddr
  6. qca_is_wcn399x
  7. qca_send_pre_shutdown_cmd

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  *  Bluetooth supports for Qualcomm Atheros ROME chips
   4  *
   5  *  Copyright (c) 2015 The Linux Foundation. All rights reserved.
   6  */
   7 
   8 #define EDL_PATCH_CMD_OPCODE            (0xFC00)
   9 #define EDL_NVM_ACCESS_OPCODE           (0xFC0B)
  10 #define EDL_WRITE_BD_ADDR_OPCODE        (0xFC14)
  11 #define EDL_PATCH_CMD_LEN               (1)
  12 #define EDL_PATCH_VER_REQ_CMD           (0x19)
  13 #define EDL_PATCH_TLV_REQ_CMD           (0x1E)
  14 #define EDL_NVM_ACCESS_SET_REQ_CMD      (0x01)
  15 #define MAX_SIZE_PER_TLV_SEGMENT        (243)
  16 #define QCA_PRE_SHUTDOWN_CMD            (0xFC08)
  17 
  18 #define EDL_CMD_REQ_RES_EVT             (0x00)
  19 #define EDL_PATCH_VER_RES_EVT           (0x19)
  20 #define EDL_APP_VER_RES_EVT             (0x02)
  21 #define EDL_TVL_DNLD_RES_EVT            (0x04)
  22 #define EDL_CMD_EXE_STATUS_EVT          (0x00)
  23 #define EDL_SET_BAUDRATE_RSP_EVT        (0x92)
  24 #define EDL_NVM_ACCESS_CODE_EVT         (0x0B)
  25 
  26 #define EDL_TAG_ID_HCI                  (17)
  27 #define EDL_TAG_ID_DEEP_SLEEP           (27)
  28 
  29 #define QCA_WCN3990_POWERON_PULSE       0xFC
  30 #define QCA_WCN3990_POWEROFF_PULSE      0xC0
  31 
  32 #define QCA_HCI_CC_OPCODE               0xFC00
  33 #define QCA_HCI_CC_SUCCESS              0x00
  34 
  35 enum qca_baudrate {
  36         QCA_BAUDRATE_115200     = 0,
  37         QCA_BAUDRATE_57600,
  38         QCA_BAUDRATE_38400,
  39         QCA_BAUDRATE_19200,
  40         QCA_BAUDRATE_9600,
  41         QCA_BAUDRATE_230400,
  42         QCA_BAUDRATE_250000,
  43         QCA_BAUDRATE_460800,
  44         QCA_BAUDRATE_500000,
  45         QCA_BAUDRATE_720000,
  46         QCA_BAUDRATE_921600,
  47         QCA_BAUDRATE_1000000,
  48         QCA_BAUDRATE_1250000,
  49         QCA_BAUDRATE_2000000,
  50         QCA_BAUDRATE_3000000,
  51         QCA_BAUDRATE_4000000,
  52         QCA_BAUDRATE_1600000,
  53         QCA_BAUDRATE_3200000,
  54         QCA_BAUDRATE_3500000,
  55         QCA_BAUDRATE_AUTO       = 0xFE,
  56         QCA_BAUDRATE_RESERVED
  57 };
  58 
  59 enum rome_tlv_dnld_mode {
  60         ROME_SKIP_EVT_NONE,
  61         ROME_SKIP_EVT_VSE,
  62         ROME_SKIP_EVT_CC,
  63         ROME_SKIP_EVT_VSE_CC
  64 };
  65 
  66 enum rome_tlv_type {
  67         TLV_TYPE_PATCH = 1,
  68         TLV_TYPE_NVM
  69 };
  70 
  71 struct rome_config {
  72         u8 type;
  73         char fwname[64];
  74         uint8_t user_baud_rate;
  75         enum rome_tlv_dnld_mode dnld_mode;
  76         enum rome_tlv_dnld_mode dnld_type;
  77 };
  78 
  79 struct edl_event_hdr {
  80         __u8 cresp;
  81         __u8 rtype;
  82         __u8 data[0];
  83 } __packed;
  84 
  85 struct rome_version {
  86         __le32 product_id;
  87         __le16 patch_ver;
  88         __le16 rome_ver;
  89         __le32 soc_id;
  90 } __packed;
  91 
  92 struct tlv_seg_resp {
  93         __u8 result;
  94 } __packed;
  95 
  96 struct tlv_type_patch {
  97         __le32 total_size;
  98         __le32 data_length;
  99         __u8   format_version;
 100         __u8   signature;
 101         __u8   download_mode;
 102         __u8   reserved1;
 103         __le16 product_id;
 104         __le16 rom_build;
 105         __le16 patch_version;
 106         __le16 reserved2;
 107         __le32 entry;
 108 } __packed;
 109 
 110 struct tlv_type_nvm {
 111         __le16 tag_id;
 112         __le16 tag_len;
 113         __le32 reserve1;
 114         __le32 reserve2;
 115         __u8   data[0];
 116 } __packed;
 117 
 118 struct tlv_type_hdr {
 119         __le32 type_len;
 120         __u8   data[0];
 121 } __packed;
 122 
 123 enum qca_btsoc_type {
 124         QCA_INVALID = -1,
 125         QCA_AR3002,
 126         QCA_ROME,
 127         QCA_WCN3990,
 128         QCA_WCN3998,
 129 };
 130 
 131 #if IS_ENABLED(CONFIG_BT_QCA)
 132 
 133 int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr);
 134 int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
 135                    enum qca_btsoc_type soc_type, u32 soc_ver,
 136                    const char *firmware_name);
 137 int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version);
 138 int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
 139 int qca_send_pre_shutdown_cmd(struct hci_dev *hdev);
 140 static inline bool qca_is_wcn399x(enum qca_btsoc_type soc_type)
 141 {
 142         return soc_type == QCA_WCN3990 || soc_type == QCA_WCN3998;
 143 }
 144 #else
 145 
 146 static inline int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr)
 147 {
 148         return -EOPNOTSUPP;
 149 }
 150 
 151 static inline int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
 152                                  enum qca_btsoc_type soc_type, u32 soc_ver,
 153                                  const char *firmware_name)
 154 {
 155         return -EOPNOTSUPP;
 156 }
 157 
 158 static inline int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
 159 {
 160         return -EOPNOTSUPP;
 161 }
 162 
 163 static inline int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
 164 {
 165         return -EOPNOTSUPP;
 166 }
 167 
 168 static inline bool qca_is_wcn399x(enum qca_btsoc_type soc_type)
 169 {
 170         return false;
 171 }
 172 
 173 static inline int qca_send_pre_shutdown_cmd(struct hci_dev *hdev)
 174 {
 175         return -EOPNOTSUPP;
 176 }
 177 #endif

/* [<][>][^][v][top][bottom][index][help] */