0001
0002
0003
0004
0005
0006
0007
0008 #ifndef WFX_HIF_API_GENERAL_H
0009 #define WFX_HIF_API_GENERAL_H
0010
0011 #include <linux/types.h>
0012 #include <linux/if_ether.h>
0013
0014 #define HIF_ID_IS_INDICATION 0x80
0015 #define HIF_COUNTER_MAX 7
0016
0017 struct wfx_hif_msg {
0018 __le16 len;
0019 u8 id;
0020 u8 reserved:1;
0021 u8 interface:2;
0022 u8 seqnum:3;
0023 u8 encrypted:2;
0024 u8 body[];
0025 } __packed;
0026
0027 enum wfx_hif_general_requests_ids {
0028 HIF_REQ_ID_CONFIGURATION = 0x09,
0029 HIF_REQ_ID_CONTROL_GPIO = 0x26,
0030 HIF_REQ_ID_SET_SL_MAC_KEY = 0x27,
0031 HIF_REQ_ID_SL_EXCHANGE_PUB_KEYS = 0x28,
0032 HIF_REQ_ID_SL_CONFIGURE = 0x29,
0033 HIF_REQ_ID_PREVENT_ROLLBACK = 0x2a,
0034 HIF_REQ_ID_PTA_SETTINGS = 0x2b,
0035 HIF_REQ_ID_PTA_PRIORITY = 0x2c,
0036 HIF_REQ_ID_PTA_STATE = 0x2d,
0037 HIF_REQ_ID_SHUT_DOWN = 0x32,
0038 };
0039
0040 enum wfx_hif_general_confirmations_ids {
0041 HIF_CNF_ID_CONFIGURATION = 0x09,
0042 HIF_CNF_ID_CONTROL_GPIO = 0x26,
0043 HIF_CNF_ID_SET_SL_MAC_KEY = 0x27,
0044 HIF_CNF_ID_SL_EXCHANGE_PUB_KEYS = 0x28,
0045 HIF_CNF_ID_SL_CONFIGURE = 0x29,
0046 HIF_CNF_ID_PREVENT_ROLLBACK = 0x2a,
0047 HIF_CNF_ID_PTA_SETTINGS = 0x2b,
0048 HIF_CNF_ID_PTA_PRIORITY = 0x2c,
0049 HIF_CNF_ID_PTA_STATE = 0x2d,
0050 HIF_CNF_ID_SHUT_DOWN = 0x32,
0051 };
0052
0053 enum wfx_hif_general_indications_ids {
0054 HIF_IND_ID_EXCEPTION = 0xe0,
0055 HIF_IND_ID_STARTUP = 0xe1,
0056 HIF_IND_ID_WAKEUP = 0xe2,
0057 HIF_IND_ID_GENERIC = 0xe3,
0058 HIF_IND_ID_ERROR = 0xe4,
0059 HIF_IND_ID_SL_EXCHANGE_PUB_KEYS = 0xe5
0060 };
0061
0062 #define HIF_STATUS_SUCCESS (cpu_to_le32(0x0000))
0063 #define HIF_STATUS_FAIL (cpu_to_le32(0x0001))
0064 #define HIF_STATUS_INVALID_PARAMETER (cpu_to_le32(0x0002))
0065 #define HIF_STATUS_WARNING (cpu_to_le32(0x0003))
0066 #define HIF_STATUS_UNKNOWN_REQUEST (cpu_to_le32(0x0004))
0067 #define HIF_STATUS_RX_FAIL_DECRYPT (cpu_to_le32(0x0010))
0068 #define HIF_STATUS_RX_FAIL_MIC (cpu_to_le32(0x0011))
0069 #define HIF_STATUS_RX_FAIL_NO_KEY (cpu_to_le32(0x0012))
0070 #define HIF_STATUS_TX_FAIL_RETRIES (cpu_to_le32(0x0013))
0071 #define HIF_STATUS_TX_FAIL_TIMEOUT (cpu_to_le32(0x0014))
0072 #define HIF_STATUS_TX_FAIL_REQUEUE (cpu_to_le32(0x0015))
0073 #define HIF_STATUS_REFUSED (cpu_to_le32(0x0016))
0074 #define HIF_STATUS_BUSY (cpu_to_le32(0x0017))
0075 #define HIF_STATUS_SLK_SET_KEY_SUCCESS (cpu_to_le32(0x005A))
0076 #define HIF_STATUS_SLK_SET_KEY_ALREADY_BURNED (cpu_to_le32(0x006B))
0077 #define HIF_STATUS_SLK_SET_KEY_DISALLOWED_MODE (cpu_to_le32(0x007C))
0078 #define HIF_STATUS_SLK_SET_KEY_UNKNOWN_MODE (cpu_to_le32(0x008D))
0079 #define HIF_STATUS_SLK_NEGO_SUCCESS (cpu_to_le32(0x009E))
0080 #define HIF_STATUS_SLK_NEGO_FAILED (cpu_to_le32(0x00AF))
0081 #define HIF_STATUS_ROLLBACK_SUCCESS (cpu_to_le32(0x1234))
0082 #define HIF_STATUS_ROLLBACK_FAIL (cpu_to_le32(0x1256))
0083
0084 enum wfx_hif_api_rate_index {
0085 API_RATE_INDEX_B_1MBPS = 0,
0086 API_RATE_INDEX_B_2MBPS = 1,
0087 API_RATE_INDEX_B_5P5MBPS = 2,
0088 API_RATE_INDEX_B_11MBPS = 3,
0089 API_RATE_INDEX_PBCC_22MBPS = 4,
0090 API_RATE_INDEX_PBCC_33MBPS = 5,
0091 API_RATE_INDEX_G_6MBPS = 6,
0092 API_RATE_INDEX_G_9MBPS = 7,
0093 API_RATE_INDEX_G_12MBPS = 8,
0094 API_RATE_INDEX_G_18MBPS = 9,
0095 API_RATE_INDEX_G_24MBPS = 10,
0096 API_RATE_INDEX_G_36MBPS = 11,
0097 API_RATE_INDEX_G_48MBPS = 12,
0098 API_RATE_INDEX_G_54MBPS = 13,
0099 API_RATE_INDEX_N_6P5MBPS = 14,
0100 API_RATE_INDEX_N_13MBPS = 15,
0101 API_RATE_INDEX_N_19P5MBPS = 16,
0102 API_RATE_INDEX_N_26MBPS = 17,
0103 API_RATE_INDEX_N_39MBPS = 18,
0104 API_RATE_INDEX_N_52MBPS = 19,
0105 API_RATE_INDEX_N_58P5MBPS = 20,
0106 API_RATE_INDEX_N_65MBPS = 21,
0107 API_RATE_NUM_ENTRIES = 22
0108 };
0109
0110 struct wfx_hif_ind_startup {
0111 __le32 status;
0112 __le16 hardware_id;
0113 u8 opn[14];
0114 u8 uid[8];
0115 __le16 num_inp_ch_bufs;
0116 __le16 size_inp_ch_buf;
0117 u8 num_links_ap;
0118 u8 num_interfaces;
0119 u8 mac_addr[2][ETH_ALEN];
0120 u8 api_version_minor;
0121 u8 api_version_major;
0122 u8 link_mode:2;
0123 u8 reserved1:6;
0124 u8 reserved2;
0125 u8 reserved3;
0126 u8 reserved4;
0127 u8 firmware_build;
0128 u8 firmware_minor;
0129 u8 firmware_major;
0130 u8 firmware_type;
0131 u8 disabled_channel_list[2];
0132 u8 region_sel_mode:4;
0133 u8 reserved5:4;
0134 u8 phy1_region:3;
0135 u8 phy0_region:3;
0136 u8 otp_phy_ver:2;
0137 __le32 supported_rate_mask;
0138 u8 firmware_label[128];
0139 } __packed;
0140
0141 struct wfx_hif_ind_wakeup {
0142 } __packed;
0143
0144 struct wfx_hif_req_configuration {
0145 __le16 length;
0146 u8 pds_data[];
0147 } __packed;
0148
0149 struct wfx_hif_cnf_configuration {
0150 __le32 status;
0151 } __packed;
0152
0153 enum wfx_hif_gpio_mode {
0154 HIF_GPIO_MODE_D0 = 0x0,
0155 HIF_GPIO_MODE_D1 = 0x1,
0156 HIF_GPIO_MODE_OD0 = 0x2,
0157 HIF_GPIO_MODE_OD1 = 0x3,
0158 HIF_GPIO_MODE_TRISTATE = 0x4,
0159 HIF_GPIO_MODE_TOGGLE = 0x5,
0160 HIF_GPIO_MODE_READ = 0x6
0161 };
0162
0163 struct wfx_hif_req_control_gpio {
0164 u8 gpio_label;
0165 u8 gpio_mode;
0166 } __packed;
0167
0168 struct wfx_hif_cnf_control_gpio {
0169 __le32 status;
0170 __le32 value;
0171 } __packed;
0172
0173 enum wfx_hif_generic_indication_type {
0174 HIF_GENERIC_INDICATION_TYPE_RAW = 0x0,
0175 HIF_GENERIC_INDICATION_TYPE_STRING = 0x1,
0176 HIF_GENERIC_INDICATION_TYPE_RX_STATS = 0x2,
0177 HIF_GENERIC_INDICATION_TYPE_TX_POWER_LOOP_INFO = 0x3,
0178 };
0179
0180 struct wfx_hif_rx_stats {
0181 __le32 nb_rx_frame;
0182 __le32 nb_crc_frame;
0183 __le32 per_total;
0184 __le32 throughput;
0185 __le32 nb_rx_by_rate[API_RATE_NUM_ENTRIES];
0186 __le16 per[API_RATE_NUM_ENTRIES];
0187 __le16 snr[API_RATE_NUM_ENTRIES];
0188 __le16 rssi[API_RATE_NUM_ENTRIES];
0189 __le16 cfo[API_RATE_NUM_ENTRIES];
0190 __le32 date;
0191 __le32 pwr_clk_freq;
0192 u8 is_ext_pwr_clk;
0193 s8 current_temp;
0194 } __packed;
0195
0196 struct wfx_hif_tx_power_loop_info {
0197 __le16 tx_gain_dig;
0198 __le16 tx_gain_pa;
0199 __le16 target_pout;
0200 __le16 p_estimation;
0201 __le16 vpdet;
0202 u8 measurement_index;
0203 u8 reserved;
0204 } __packed;
0205
0206 struct wfx_hif_ind_generic {
0207 __le32 type;
0208 union {
0209 struct wfx_hif_rx_stats rx_stats;
0210 struct wfx_hif_tx_power_loop_info tx_power_loop_info;
0211 } data;
0212 } __packed;
0213
0214 enum wfx_hif_error {
0215 HIF_ERROR_FIRMWARE_ROLLBACK = 0x00,
0216 HIF_ERROR_FIRMWARE_DEBUG_ENABLED = 0x01,
0217 HIF_ERROR_SLK_OUTDATED_SESSION_KEY = 0x02,
0218 HIF_ERROR_SLK_SESSION_KEY = 0x03,
0219 HIF_ERROR_OOR_VOLTAGE = 0x04,
0220 HIF_ERROR_PDS_PAYLOAD = 0x05,
0221 HIF_ERROR_OOR_TEMPERATURE = 0x06,
0222 HIF_ERROR_SLK_REQ_DURING_KEY_EXCHANGE = 0x07,
0223 HIF_ERROR_SLK_MULTI_TX_UNSUPPORTED = 0x08,
0224 HIF_ERROR_SLK_OVERFLOW = 0x09,
0225 HIF_ERROR_SLK_DECRYPTION = 0x0a,
0226 HIF_ERROR_SLK_WRONG_ENCRYPTION_STATE = 0x0b,
0227 HIF_ERROR_HIF_BUS_FREQUENCY_TOO_LOW = 0x0c,
0228 HIF_ERROR_HIF_RX_DATA_TOO_LARGE = 0x0e,
0229 HIF_ERROR_HIF_TX_QUEUE_FULL = 0x0d,
0230 HIF_ERROR_HIF_BUS = 0x0f,
0231 HIF_ERROR_PDS_TESTFEATURE = 0x10,
0232 HIF_ERROR_SLK_UNCONFIGURED = 0x11,
0233 };
0234
0235 struct wfx_hif_ind_error {
0236 __le32 type;
0237 u8 data[];
0238 } __packed;
0239
0240 struct wfx_hif_ind_exception {
0241 __le32 type;
0242 u8 data[];
0243 } __packed;
0244
0245 enum wfx_hif_secure_link_state {
0246 SEC_LINK_UNAVAILABLE = 0x0,
0247 SEC_LINK_RESERVED = 0x1,
0248 SEC_LINK_EVAL = 0x2,
0249 SEC_LINK_ENFORCED = 0x3
0250 };
0251
0252 #endif