1 /* SPDX-License-Identifier: Apache-2.0 */
3 * WFx hardware interface definitions
5 * Copyright (c) 2018-2020, Silicon Laboratories Inc.
8 #ifndef WFX_HIF_API_GENERAL_H
9 #define WFX_HIF_API_GENERAL_H
11 #define HIF_ID_IS_INDICATION 0x80
12 #define HIF_COUNTER_MAX 7
24 enum hif_general_requests_ids {
25 HIF_REQ_ID_CONFIGURATION = 0x09,
26 HIF_REQ_ID_CONTROL_GPIO = 0x26,
27 HIF_REQ_ID_SET_SL_MAC_KEY = 0x27,
28 HIF_REQ_ID_SL_EXCHANGE_PUB_KEYS = 0x28,
29 HIF_REQ_ID_SL_CONFIGURE = 0x29,
30 HIF_REQ_ID_PREVENT_ROLLBACK = 0x2a,
31 HIF_REQ_ID_PTA_SETTINGS = 0x2b,
32 HIF_REQ_ID_PTA_PRIORITY = 0x2c,
33 HIF_REQ_ID_PTA_STATE = 0x2d,
34 HIF_REQ_ID_SHUT_DOWN = 0x32,
37 enum hif_general_confirmations_ids {
38 HIF_CNF_ID_CONFIGURATION = 0x09,
39 HIF_CNF_ID_CONTROL_GPIO = 0x26,
40 HIF_CNF_ID_SET_SL_MAC_KEY = 0x27,
41 HIF_CNF_ID_SL_EXCHANGE_PUB_KEYS = 0x28,
42 HIF_CNF_ID_SL_CONFIGURE = 0x29,
43 HIF_CNF_ID_PREVENT_ROLLBACK = 0x2a,
44 HIF_CNF_ID_PTA_SETTINGS = 0x2b,
45 HIF_CNF_ID_PTA_PRIORITY = 0x2c,
46 HIF_CNF_ID_PTA_STATE = 0x2d,
47 HIF_CNF_ID_SHUT_DOWN = 0x32,
50 enum hif_general_indications_ids {
51 HIF_IND_ID_EXCEPTION = 0xe0,
52 HIF_IND_ID_STARTUP = 0xe1,
53 HIF_IND_ID_WAKEUP = 0xe2,
54 HIF_IND_ID_GENERIC = 0xe3,
55 HIF_IND_ID_ERROR = 0xe4,
56 HIF_IND_ID_SL_EXCHANGE_PUB_KEYS = 0xe5
59 #define HIF_STATUS_SUCCESS (cpu_to_le32(0x0000))
60 #define HIF_STATUS_FAIL (cpu_to_le32(0x0001))
61 #define HIF_STATUS_INVALID_PARAMETER (cpu_to_le32(0x0002))
62 #define HIF_STATUS_WARNING (cpu_to_le32(0x0003))
63 #define HIF_STATUS_UNKNOWN_REQUEST (cpu_to_le32(0x0004))
64 #define HIF_STATUS_RX_FAIL_DECRYPT (cpu_to_le32(0x0010))
65 #define HIF_STATUS_RX_FAIL_MIC (cpu_to_le32(0x0011))
66 #define HIF_STATUS_RX_FAIL_NO_KEY (cpu_to_le32(0x0012))
67 #define HIF_STATUS_TX_FAIL_RETRIES (cpu_to_le32(0x0013))
68 #define HIF_STATUS_TX_FAIL_TIMEOUT (cpu_to_le32(0x0014))
69 #define HIF_STATUS_TX_FAIL_REQUEUE (cpu_to_le32(0x0015))
70 #define HIF_STATUS_REFUSED (cpu_to_le32(0x0016))
71 #define HIF_STATUS_BUSY (cpu_to_le32(0x0017))
72 #define HIF_STATUS_SLK_SET_KEY_SUCCESS (cpu_to_le32(0x005A))
73 #define HIF_STATUS_SLK_SET_KEY_ALREADY_BURNED (cpu_to_le32(0x006B))
74 #define HIF_STATUS_SLK_SET_KEY_DISALLOWED_MODE (cpu_to_le32(0x007C))
75 #define HIF_STATUS_SLK_SET_KEY_UNKNOWN_MODE (cpu_to_le32(0x008D))
76 #define HIF_STATUS_SLK_NEGO_SUCCESS (cpu_to_le32(0x009E))
77 #define HIF_STATUS_SLK_NEGO_FAILED (cpu_to_le32(0x00AF))
78 #define HIF_STATUS_ROLLBACK_SUCCESS (cpu_to_le32(0x1234))
79 #define HIF_STATUS_ROLLBACK_FAIL (cpu_to_le32(0x1256))
81 enum hif_api_rate_index {
82 API_RATE_INDEX_B_1MBPS = 0,
83 API_RATE_INDEX_B_2MBPS = 1,
84 API_RATE_INDEX_B_5P5MBPS = 2,
85 API_RATE_INDEX_B_11MBPS = 3,
86 API_RATE_INDEX_PBCC_22MBPS = 4,
87 API_RATE_INDEX_PBCC_33MBPS = 5,
88 API_RATE_INDEX_G_6MBPS = 6,
89 API_RATE_INDEX_G_9MBPS = 7,
90 API_RATE_INDEX_G_12MBPS = 8,
91 API_RATE_INDEX_G_18MBPS = 9,
92 API_RATE_INDEX_G_24MBPS = 10,
93 API_RATE_INDEX_G_36MBPS = 11,
94 API_RATE_INDEX_G_48MBPS = 12,
95 API_RATE_INDEX_G_54MBPS = 13,
96 API_RATE_INDEX_N_6P5MBPS = 14,
97 API_RATE_INDEX_N_13MBPS = 15,
98 API_RATE_INDEX_N_19P5MBPS = 16,
99 API_RATE_INDEX_N_26MBPS = 17,
100 API_RATE_INDEX_N_39MBPS = 18,
101 API_RATE_INDEX_N_52MBPS = 19,
102 API_RATE_INDEX_N_58P5MBPS = 20,
103 API_RATE_INDEX_N_65MBPS = 21,
104 API_RATE_NUM_ENTRIES = 22
108 HIF_FW_TYPE_ETF = 0x0,
109 HIF_FW_TYPE_WFM = 0x1,
110 HIF_FW_TYPE_WSM = 0x2
113 struct hif_ind_startup {
114 // As the others, this struct is interpreted as little endian by the
115 // device. However, this struct is also used by the driver. We prefer to
116 // declare it in native order and doing byte swap on reception.
125 u8 mac_addr[2][ETH_ALEN];
126 u8 api_version_minor;
127 u8 api_version_major;
137 u8 disabled_channel_list[2];
138 u8 region_sel_mode:4;
143 u32 supported_rate_mask;
144 u8 firmware_label[128];
147 struct hif_ind_wakeup {
150 struct hif_req_configuration {
155 struct hif_cnf_configuration {
160 HIF_GPIO_MODE_D0 = 0x0,
161 HIF_GPIO_MODE_D1 = 0x1,
162 HIF_GPIO_MODE_OD0 = 0x2,
163 HIF_GPIO_MODE_OD1 = 0x3,
164 HIF_GPIO_MODE_TRISTATE = 0x4,
165 HIF_GPIO_MODE_TOGGLE = 0x5,
166 HIF_GPIO_MODE_READ = 0x6
169 struct hif_req_control_gpio {
174 struct hif_cnf_control_gpio {
179 enum hif_generic_indication_type {
180 HIF_GENERIC_INDICATION_TYPE_RAW = 0x0,
181 HIF_GENERIC_INDICATION_TYPE_STRING = 0x1,
182 HIF_GENERIC_INDICATION_TYPE_RX_STATS = 0x2,
183 HIF_GENERIC_INDICATION_TYPE_TX_POWER_LOOP_INFO = 0x3,
186 struct hif_rx_stats {
191 __le32 nb_rx_by_rate[API_RATE_NUM_ENTRIES];
192 __le16 per[API_RATE_NUM_ENTRIES];
193 __le16 snr[API_RATE_NUM_ENTRIES]; // signed value
194 __le16 rssi[API_RATE_NUM_ENTRIES]; // signed value
195 __le16 cfo[API_RATE_NUM_ENTRIES]; // signed value
202 struct hif_tx_power_loop_info {
205 __le16 target_pout; // signed value
206 __le16 p_estimation; // signed value
208 u8 measurement_index;
212 struct hif_ind_generic {
215 struct hif_rx_stats rx_stats;
216 struct hif_tx_power_loop_info tx_power_loop_info;
221 HIF_ERROR_FIRMWARE_ROLLBACK = 0x00,
222 HIF_ERROR_FIRMWARE_DEBUG_ENABLED = 0x01,
223 HIF_ERROR_SLK_OUTDATED_SESSION_KEY = 0x02,
224 HIF_ERROR_SLK_SESSION_KEY = 0x03,
225 HIF_ERROR_OOR_VOLTAGE = 0x04,
226 HIF_ERROR_PDS_PAYLOAD = 0x05,
227 HIF_ERROR_OOR_TEMPERATURE = 0x06,
228 HIF_ERROR_SLK_REQ_DURING_KEY_EXCHANGE = 0x07,
229 HIF_ERROR_SLK_MULTI_TX_UNSUPPORTED = 0x08,
230 HIF_ERROR_SLK_OVERFLOW = 0x09,
231 HIF_ERROR_SLK_DECRYPTION = 0x0a,
232 HIF_ERROR_SLK_WRONG_ENCRYPTION_STATE = 0x0b,
233 HIF_ERROR_HIF_BUS_FREQUENCY_TOO_LOW = 0x0c,
234 HIF_ERROR_HIF_RX_DATA_TOO_LARGE = 0x0e,
235 HIF_ERROR_HIF_TX_QUEUE_FULL = 0x0d,
236 HIF_ERROR_HIF_BUS = 0x0f,
237 HIF_ERROR_PDS_TESTFEATURE = 0x10,
238 HIF_ERROR_SLK_UNCONFIGURED = 0x11,
241 struct hif_ind_error {
246 struct hif_ind_exception {
251 enum hif_secure_link_state {
252 SEC_LINK_UNAVAILABLE = 0x0,
253 SEC_LINK_RESERVED = 0x1,
255 SEC_LINK_ENFORCED = 0x3