wmi.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413
  1. /*
  2. * Copyright (c) 2012-2016 Qualcomm Atheros, Inc.
  3. * Copyright (c) 2006-2012 Wilocity
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any
  6. * purpose with or without fee is hereby granted, provided that the above
  7. * copyright notice and this permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  10. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  11. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  12. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  13. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  14. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  15. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  16. */
  17. /*
  18. * This file contains the definitions of the WMI protocol specified in the
  19. * Wireless Module Interface (WMI) for the Qualcomm
  20. * 60 GHz wireless solution.
  21. * It includes definitions of all the commands and events.
  22. * Commands are messages from the host to the WM.
  23. * Events are messages from the WM to the host.
  24. *
  25. * This is an automatically generated file.
  26. */
  27. #ifndef __WILOCITY_WMI_H__
  28. #define __WILOCITY_WMI_H__
  29. /* General */
  30. #define WMI_MAX_ASSOC_STA (8)
  31. #define WMI_DEFAULT_ASSOC_STA (1)
  32. #define WMI_MAC_LEN (6)
  33. #define WMI_PROX_RANGE_NUM (3)
  34. #define WMI_MAX_LOSS_DMG_BEACONS (20)
  35. /* Mailbox interface
  36. * used for commands and events
  37. */
  38. enum wmi_mid {
  39. MID_DEFAULT = 0x00,
  40. FIRST_DBG_MID_ID = 0x10,
  41. LAST_DBG_MID_ID = 0xFE,
  42. MID_BROADCAST = 0xFF,
  43. };
  44. /* WMI_CMD_HDR */
  45. struct wmi_cmd_hdr {
  46. u8 mid;
  47. u8 reserved;
  48. __le16 command_id;
  49. __le32 fw_timestamp;
  50. } __packed;
  51. /* List of Commands */
  52. enum wmi_command_id {
  53. WMI_CONNECT_CMDID = 0x01,
  54. WMI_DISCONNECT_CMDID = 0x03,
  55. WMI_DISCONNECT_STA_CMDID = 0x04,
  56. WMI_START_SCAN_CMDID = 0x07,
  57. WMI_SET_BSS_FILTER_CMDID = 0x09,
  58. WMI_SET_PROBED_SSID_CMDID = 0x0A,
  59. WMI_SET_LISTEN_INT_CMDID = 0x0B,
  60. WMI_BCON_CTRL_CMDID = 0x0F,
  61. WMI_ADD_CIPHER_KEY_CMDID = 0x16,
  62. WMI_DELETE_CIPHER_KEY_CMDID = 0x17,
  63. WMI_PCP_CONF_CMDID = 0x18,
  64. WMI_SET_APPIE_CMDID = 0x3F,
  65. WMI_SET_WSC_STATUS_CMDID = 0x41,
  66. WMI_PXMT_RANGE_CFG_CMDID = 0x42,
  67. WMI_PXMT_SNR2_RANGE_CFG_CMDID = 0x43,
  68. WMI_MEM_READ_CMDID = 0x800,
  69. WMI_MEM_WR_CMDID = 0x801,
  70. WMI_ECHO_CMDID = 0x803,
  71. WMI_DEEP_ECHO_CMDID = 0x804,
  72. WMI_CONFIG_MAC_CMDID = 0x805,
  73. WMI_CONFIG_PHY_DEBUG_CMDID = 0x806,
  74. WMI_ADD_DEBUG_TX_PCKT_CMDID = 0x808,
  75. WMI_PHY_GET_STATISTICS_CMDID = 0x809,
  76. WMI_FS_TUNE_CMDID = 0x80A,
  77. WMI_CORR_MEASURE_CMDID = 0x80B,
  78. WMI_READ_RSSI_CMDID = 0x80C,
  79. WMI_TEMP_SENSE_CMDID = 0x80E,
  80. WMI_DC_CALIB_CMDID = 0x80F,
  81. WMI_SEND_TONE_CMDID = 0x810,
  82. WMI_IQ_TX_CALIB_CMDID = 0x811,
  83. WMI_IQ_RX_CALIB_CMDID = 0x812,
  84. WMI_SET_UCODE_IDLE_CMDID = 0x813,
  85. WMI_SET_WORK_MODE_CMDID = 0x815,
  86. WMI_LO_LEAKAGE_CALIB_CMDID = 0x816,
  87. WMI_MARLON_R_READ_CMDID = 0x818,
  88. WMI_MARLON_R_WRITE_CMDID = 0x819,
  89. WMI_MARLON_R_TXRX_SEL_CMDID = 0x81A,
  90. MAC_IO_STATIC_PARAMS_CMDID = 0x81B,
  91. MAC_IO_DYNAMIC_PARAMS_CMDID = 0x81C,
  92. WMI_SILENT_RSSI_CALIB_CMDID = 0x81D,
  93. WMI_RF_RX_TEST_CMDID = 0x81E,
  94. WMI_CFG_RX_CHAIN_CMDID = 0x820,
  95. WMI_VRING_CFG_CMDID = 0x821,
  96. WMI_BCAST_VRING_CFG_CMDID = 0x822,
  97. WMI_VRING_BA_EN_CMDID = 0x823,
  98. WMI_VRING_BA_DIS_CMDID = 0x824,
  99. WMI_RCP_ADDBA_RESP_CMDID = 0x825,
  100. WMI_RCP_DELBA_CMDID = 0x826,
  101. WMI_SET_SSID_CMDID = 0x827,
  102. WMI_GET_SSID_CMDID = 0x828,
  103. WMI_SET_PCP_CHANNEL_CMDID = 0x829,
  104. WMI_GET_PCP_CHANNEL_CMDID = 0x82A,
  105. WMI_SW_TX_REQ_CMDID = 0x82B,
  106. WMI_READ_MAC_RXQ_CMDID = 0x830,
  107. WMI_READ_MAC_TXQ_CMDID = 0x831,
  108. WMI_WRITE_MAC_RXQ_CMDID = 0x832,
  109. WMI_WRITE_MAC_TXQ_CMDID = 0x833,
  110. WMI_WRITE_MAC_XQ_FIELD_CMDID = 0x834,
  111. WMI_MLME_PUSH_CMDID = 0x835,
  112. WMI_BEAMFORMING_MGMT_CMDID = 0x836,
  113. WMI_BF_TXSS_MGMT_CMDID = 0x837,
  114. WMI_BF_SM_MGMT_CMDID = 0x838,
  115. WMI_BF_RXSS_MGMT_CMDID = 0x839,
  116. WMI_BF_TRIG_CMDID = 0x83A,
  117. WMI_SET_SECTORS_CMDID = 0x849,
  118. WMI_MAINTAIN_PAUSE_CMDID = 0x850,
  119. WMI_MAINTAIN_RESUME_CMDID = 0x851,
  120. WMI_RS_MGMT_CMDID = 0x852,
  121. WMI_RF_MGMT_CMDID = 0x853,
  122. WMI_THERMAL_THROTTLING_CTRL_CMDID = 0x854,
  123. WMI_THERMAL_THROTTLING_GET_STATUS_CMDID = 0x855,
  124. WMI_OTP_READ_CMDID = 0x856,
  125. WMI_OTP_WRITE_CMDID = 0x857,
  126. WMI_LED_CFG_CMDID = 0x858,
  127. /* Performance monitoring commands */
  128. WMI_BF_CTRL_CMDID = 0x862,
  129. WMI_NOTIFY_REQ_CMDID = 0x863,
  130. WMI_GET_STATUS_CMDID = 0x864,
  131. WMI_UNIT_TEST_CMDID = 0x900,
  132. WMI_HICCUP_CMDID = 0x901,
  133. WMI_FLASH_READ_CMDID = 0x902,
  134. WMI_FLASH_WRITE_CMDID = 0x903,
  135. /* P2P */
  136. WMI_P2P_CFG_CMDID = 0x910,
  137. WMI_PORT_ALLOCATE_CMDID = 0x911,
  138. WMI_PORT_DELETE_CMDID = 0x912,
  139. WMI_POWER_MGMT_CFG_CMDID = 0x913,
  140. WMI_START_LISTEN_CMDID = 0x914,
  141. WMI_START_SEARCH_CMDID = 0x915,
  142. WMI_DISCOVERY_START_CMDID = 0x916,
  143. WMI_DISCOVERY_STOP_CMDID = 0x917,
  144. WMI_PCP_START_CMDID = 0x918,
  145. WMI_PCP_STOP_CMDID = 0x919,
  146. WMI_GET_PCP_FACTOR_CMDID = 0x91B,
  147. WMI_SET_MAC_ADDRESS_CMDID = 0xF003,
  148. WMI_ABORT_SCAN_CMDID = 0xF007,
  149. WMI_SET_PROMISCUOUS_MODE_CMDID = 0xF041,
  150. WMI_GET_PMK_CMDID = 0xF048,
  151. WMI_SET_PASSPHRASE_CMDID = 0xF049,
  152. WMI_SEND_ASSOC_RES_CMDID = 0xF04A,
  153. WMI_SET_ASSOC_REQ_RELAY_CMDID = 0xF04B,
  154. WMI_MAC_ADDR_REQ_CMDID = 0xF04D,
  155. WMI_FW_VER_CMDID = 0xF04E,
  156. WMI_PMC_CMDID = 0xF04F,
  157. };
  158. /* WMI_CONNECT_CMDID */
  159. enum wmi_network_type {
  160. WMI_NETTYPE_INFRA = 0x01,
  161. WMI_NETTYPE_ADHOC = 0x02,
  162. WMI_NETTYPE_ADHOC_CREATOR = 0x04,
  163. WMI_NETTYPE_AP = 0x10,
  164. WMI_NETTYPE_P2P = 0x20,
  165. /* PCIE over 60g */
  166. WMI_NETTYPE_WBE = 0x40,
  167. };
  168. enum wmi_dot11_auth_mode {
  169. WMI_AUTH11_OPEN = 0x01,
  170. WMI_AUTH11_SHARED = 0x02,
  171. WMI_AUTH11_LEAP = 0x04,
  172. WMI_AUTH11_WSC = 0x08,
  173. };
  174. enum wmi_auth_mode {
  175. WMI_AUTH_NONE = 0x01,
  176. WMI_AUTH_WPA = 0x02,
  177. WMI_AUTH_WPA2 = 0x04,
  178. WMI_AUTH_WPA_PSK = 0x08,
  179. WMI_AUTH_WPA2_PSK = 0x10,
  180. WMI_AUTH_WPA_CCKM = 0x20,
  181. WMI_AUTH_WPA2_CCKM = 0x40,
  182. };
  183. enum wmi_crypto_type {
  184. WMI_CRYPT_NONE = 0x01,
  185. WMI_CRYPT_AES_GCMP = 0x20,
  186. };
  187. enum wmi_connect_ctrl_flag_bits {
  188. WMI_CONNECT_ASSOC_POLICY_USER = 0x01,
  189. WMI_CONNECT_SEND_REASSOC = 0x02,
  190. WMI_CONNECT_IGNORE_WPA_GROUP_CIPHER = 0x04,
  191. WMI_CONNECT_PROFILE_MATCH_DONE = 0x08,
  192. WMI_CONNECT_IGNORE_AAC_BEACON = 0x10,
  193. WMI_CONNECT_CSA_FOLLOW_BSS = 0x20,
  194. WMI_CONNECT_DO_WPA_OFFLOAD = 0x40,
  195. WMI_CONNECT_DO_NOT_DEAUTH = 0x80,
  196. };
  197. #define WMI_MAX_SSID_LEN (32)
  198. /* WMI_CONNECT_CMDID */
  199. struct wmi_connect_cmd {
  200. u8 network_type;
  201. u8 dot11_auth_mode;
  202. u8 auth_mode;
  203. u8 pairwise_crypto_type;
  204. u8 pairwise_crypto_len;
  205. u8 group_crypto_type;
  206. u8 group_crypto_len;
  207. u8 ssid_len;
  208. u8 ssid[WMI_MAX_SSID_LEN];
  209. u8 channel;
  210. u8 reserved0;
  211. u8 bssid[WMI_MAC_LEN];
  212. __le32 ctrl_flags;
  213. u8 dst_mac[WMI_MAC_LEN];
  214. u8 reserved1[2];
  215. } __packed;
  216. /* WMI_DISCONNECT_STA_CMDID */
  217. struct wmi_disconnect_sta_cmd {
  218. u8 dst_mac[WMI_MAC_LEN];
  219. __le16 disconnect_reason;
  220. } __packed;
  221. #define WMI_MAX_KEY_INDEX (3)
  222. #define WMI_MAX_KEY_LEN (32)
  223. #define WMI_PASSPHRASE_LEN (64)
  224. /* WMI_SET_PASSPHRASE_CMDID */
  225. struct wmi_set_passphrase_cmd {
  226. u8 ssid[WMI_MAX_SSID_LEN];
  227. u8 passphrase[WMI_PASSPHRASE_LEN];
  228. u8 ssid_len;
  229. u8 passphrase_len;
  230. } __packed;
  231. /* WMI_ADD_CIPHER_KEY_CMDID */
  232. enum wmi_key_usage {
  233. WMI_KEY_USE_PAIRWISE = 0x00,
  234. WMI_KEY_USE_RX_GROUP = 0x01,
  235. WMI_KEY_USE_TX_GROUP = 0x02,
  236. };
  237. struct wmi_add_cipher_key_cmd {
  238. u8 key_index;
  239. u8 key_type;
  240. /* enum wmi_key_usage */
  241. u8 key_usage;
  242. u8 key_len;
  243. /* key replay sequence counter */
  244. u8 key_rsc[8];
  245. u8 key[WMI_MAX_KEY_LEN];
  246. /* Additional Key Control information */
  247. u8 key_op_ctrl;
  248. u8 mac[WMI_MAC_LEN];
  249. } __packed;
  250. /* WMI_DELETE_CIPHER_KEY_CMDID */
  251. struct wmi_delete_cipher_key_cmd {
  252. u8 key_index;
  253. u8 mac[WMI_MAC_LEN];
  254. } __packed;
  255. /* WMI_START_SCAN_CMDID
  256. *
  257. * Start L1 scan operation
  258. *
  259. * Returned events:
  260. * - WMI_RX_MGMT_PACKET_EVENTID - for every probe resp.
  261. * - WMI_SCAN_COMPLETE_EVENTID
  262. */
  263. enum wmi_scan_type {
  264. WMI_ACTIVE_SCAN = 0x00,
  265. WMI_SHORT_SCAN = 0x01,
  266. WMI_PASSIVE_SCAN = 0x02,
  267. WMI_DIRECT_SCAN = 0x03,
  268. WMI_LONG_SCAN = 0x04,
  269. };
  270. /* WMI_START_SCAN_CMDID */
  271. struct wmi_start_scan_cmd {
  272. u8 direct_scan_mac_addr[WMI_MAC_LEN];
  273. /* DMG Beacon frame is transmitted during active scanning */
  274. u8 discovery_mode;
  275. /* reserved */
  276. u8 reserved;
  277. /* Max duration in the home channel(ms) */
  278. __le32 dwell_time;
  279. /* Time interval between scans (ms) */
  280. __le32 force_scan_interval;
  281. /* enum wmi_scan_type */
  282. u8 scan_type;
  283. /* how many channels follow */
  284. u8 num_channels;
  285. /* channels ID's:
  286. * 0 - 58320 MHz
  287. * 1 - 60480 MHz
  288. * 2 - 62640 MHz
  289. */
  290. struct {
  291. u8 channel;
  292. u8 reserved;
  293. } channel_list[0];
  294. } __packed;
  295. /* WMI_SET_PROBED_SSID_CMDID */
  296. #define MAX_PROBED_SSID_INDEX (3)
  297. enum wmi_ssid_flag {
  298. /* disables entry */
  299. WMI_SSID_FLAG_DISABLE = 0x00,
  300. /* probes specified ssid */
  301. WMI_SSID_FLAG_SPECIFIC = 0x01,
  302. /* probes for any ssid */
  303. WMI_SSID_FLAG_ANY = 0x02,
  304. };
  305. struct wmi_probed_ssid_cmd {
  306. /* 0 to MAX_PROBED_SSID_INDEX */
  307. u8 entry_index;
  308. /* enum wmi_ssid_flag */
  309. u8 flag;
  310. u8 ssid_len;
  311. u8 ssid[WMI_MAX_SSID_LEN];
  312. } __packed;
  313. /* WMI_SET_APPIE_CMDID
  314. * Add Application specified IE to a management frame
  315. */
  316. #define WMI_MAX_IE_LEN (1024)
  317. /* Frame Types */
  318. enum wmi_mgmt_frame_type {
  319. WMI_FRAME_BEACON = 0x00,
  320. WMI_FRAME_PROBE_REQ = 0x01,
  321. WMI_FRAME_PROBE_RESP = 0x02,
  322. WMI_FRAME_ASSOC_REQ = 0x03,
  323. WMI_FRAME_ASSOC_RESP = 0x04,
  324. WMI_NUM_MGMT_FRAME = 0x05,
  325. };
  326. struct wmi_set_appie_cmd {
  327. /* enum wmi_mgmt_frame_type */
  328. u8 mgmt_frm_type;
  329. u8 reserved;
  330. /* Length of the IE to be added to MGMT frame */
  331. __le16 ie_len;
  332. u8 ie_info[0];
  333. } __packed;
  334. /* WMI_PXMT_RANGE_CFG_CMDID */
  335. struct wmi_pxmt_range_cfg_cmd {
  336. u8 dst_mac[WMI_MAC_LEN];
  337. __le16 range;
  338. } __packed;
  339. /* WMI_PXMT_SNR2_RANGE_CFG_CMDID */
  340. struct wmi_pxmt_snr2_range_cfg_cmd {
  341. s8 snr2range_arr[2];
  342. } __packed;
  343. /* WMI_RF_MGMT_CMDID */
  344. enum wmi_rf_mgmt_type {
  345. WMI_RF_MGMT_W_DISABLE = 0x00,
  346. WMI_RF_MGMT_W_ENABLE = 0x01,
  347. WMI_RF_MGMT_GET_STATUS = 0x02,
  348. };
  349. /* WMI_RF_MGMT_CMDID */
  350. struct wmi_rf_mgmt_cmd {
  351. __le32 rf_mgmt_type;
  352. } __packed;
  353. /* WMI_THERMAL_THROTTLING_CTRL_CMDID */
  354. #define THERMAL_THROTTLING_USE_DEFAULT_MAX_TXOP_LENGTH (0xFFFFFFFF)
  355. /* WMI_THERMAL_THROTTLING_CTRL_CMDID */
  356. struct wmi_thermal_throttling_ctrl_cmd {
  357. __le32 time_on_usec;
  358. __le32 time_off_usec;
  359. __le32 max_txop_length_usec;
  360. } __packed;
  361. /* WMI_RF_RX_TEST_CMDID */
  362. struct wmi_rf_rx_test_cmd {
  363. __le32 sector;
  364. } __packed;
  365. /* WMI_CORR_MEASURE_CMDID */
  366. struct wmi_corr_measure_cmd {
  367. __le32 freq_mhz;
  368. __le32 length_samples;
  369. __le32 iterations;
  370. } __packed;
  371. /* WMI_SET_SSID_CMDID */
  372. struct wmi_set_ssid_cmd {
  373. __le32 ssid_len;
  374. u8 ssid[WMI_MAX_SSID_LEN];
  375. } __packed;
  376. /* WMI_SET_PCP_CHANNEL_CMDID */
  377. struct wmi_set_pcp_channel_cmd {
  378. u8 channel;
  379. u8 reserved[3];
  380. } __packed;
  381. /* WMI_BCON_CTRL_CMDID */
  382. struct wmi_bcon_ctrl_cmd {
  383. __le16 bcon_interval;
  384. __le16 frag_num;
  385. __le64 ss_mask;
  386. u8 network_type;
  387. u8 pcp_max_assoc_sta;
  388. u8 disable_sec_offload;
  389. u8 disable_sec;
  390. u8 hidden_ssid;
  391. u8 is_go;
  392. u8 reserved[2];
  393. } __packed;
  394. /* WMI_PORT_ALLOCATE_CMDID */
  395. enum wmi_port_role {
  396. WMI_PORT_STA = 0x00,
  397. WMI_PORT_PCP = 0x01,
  398. WMI_PORT_AP = 0x02,
  399. WMI_PORT_P2P_DEV = 0x03,
  400. WMI_PORT_P2P_CLIENT = 0x04,
  401. WMI_PORT_P2P_GO = 0x05,
  402. };
  403. /* WMI_PORT_ALLOCATE_CMDID */
  404. struct wmi_port_allocate_cmd {
  405. u8 mac[WMI_MAC_LEN];
  406. u8 port_role;
  407. u8 mid;
  408. } __packed;
  409. /* WMI_PORT_DELETE_CMDID */
  410. struct wmi_port_delete_cmd {
  411. u8 mid;
  412. u8 reserved[3];
  413. } __packed;
  414. /* WMI_P2P_CFG_CMDID */
  415. enum wmi_discovery_mode {
  416. WMI_DISCOVERY_MODE_NON_OFFLOAD = 0x00,
  417. WMI_DISCOVERY_MODE_OFFLOAD = 0x01,
  418. WMI_DISCOVERY_MODE_PEER2PEER = 0x02,
  419. };
  420. struct wmi_p2p_cfg_cmd {
  421. /* enum wmi_discovery_mode */
  422. u8 discovery_mode;
  423. u8 channel;
  424. /* base to listen/search duration calculation */
  425. __le16 bcon_interval;
  426. } __packed;
  427. /* WMI_POWER_MGMT_CFG_CMDID */
  428. enum wmi_power_source_type {
  429. WMI_POWER_SOURCE_BATTERY = 0x00,
  430. WMI_POWER_SOURCE_OTHER = 0x01,
  431. };
  432. struct wmi_power_mgmt_cfg_cmd {
  433. /* enum wmi_power_source_type */
  434. u8 power_source;
  435. u8 reserved[3];
  436. } __packed;
  437. /* WMI_PCP_START_CMDID */
  438. struct wmi_pcp_start_cmd {
  439. __le16 bcon_interval;
  440. u8 pcp_max_assoc_sta;
  441. u8 hidden_ssid;
  442. u8 is_go;
  443. u8 reserved0[7];
  444. u8 network_type;
  445. u8 channel;
  446. u8 disable_sec_offload;
  447. u8 disable_sec;
  448. } __packed;
  449. /* WMI_SW_TX_REQ_CMDID */
  450. struct wmi_sw_tx_req_cmd {
  451. u8 dst_mac[WMI_MAC_LEN];
  452. __le16 len;
  453. u8 payload[0];
  454. } __packed;
  455. struct wmi_sw_ring_cfg {
  456. __le64 ring_mem_base;
  457. __le16 ring_size;
  458. __le16 max_mpdu_size;
  459. } __packed;
  460. /* wmi_vring_cfg_schd */
  461. struct wmi_vring_cfg_schd {
  462. __le16 priority;
  463. __le16 timeslot_us;
  464. } __packed;
  465. enum wmi_vring_cfg_encap_trans_type {
  466. WMI_VRING_ENC_TYPE_802_3 = 0x00,
  467. WMI_VRING_ENC_TYPE_NATIVE_WIFI = 0x01,
  468. };
  469. enum wmi_vring_cfg_ds_cfg {
  470. WMI_VRING_DS_PBSS = 0x00,
  471. WMI_VRING_DS_STATION = 0x01,
  472. WMI_VRING_DS_AP = 0x02,
  473. WMI_VRING_DS_ADDR4 = 0x03,
  474. };
  475. enum wmi_vring_cfg_nwifi_ds_trans_type {
  476. WMI_NWIFI_TX_TRANS_MODE_NO = 0x00,
  477. WMI_NWIFI_TX_TRANS_MODE_AP2PBSS = 0x01,
  478. WMI_NWIFI_TX_TRANS_MODE_STA2PBSS = 0x02,
  479. };
  480. enum wmi_vring_cfg_schd_params_priority {
  481. WMI_SCH_PRIO_REGULAR = 0x00,
  482. WMI_SCH_PRIO_HIGH = 0x01,
  483. };
  484. #define CIDXTID_CID_POS (0)
  485. #define CIDXTID_CID_LEN (4)
  486. #define CIDXTID_CID_MSK (0xF)
  487. #define CIDXTID_TID_POS (4)
  488. #define CIDXTID_TID_LEN (4)
  489. #define CIDXTID_TID_MSK (0xF0)
  490. #define VRING_CFG_MAC_CTRL_LIFETIME_EN_POS (0)
  491. #define VRING_CFG_MAC_CTRL_LIFETIME_EN_LEN (1)
  492. #define VRING_CFG_MAC_CTRL_LIFETIME_EN_MSK (0x1)
  493. #define VRING_CFG_MAC_CTRL_AGGR_EN_POS (1)
  494. #define VRING_CFG_MAC_CTRL_AGGR_EN_LEN (1)
  495. #define VRING_CFG_MAC_CTRL_AGGR_EN_MSK (0x2)
  496. #define VRING_CFG_TO_RESOLUTION_VALUE_POS (0)
  497. #define VRING_CFG_TO_RESOLUTION_VALUE_LEN (6)
  498. #define VRING_CFG_TO_RESOLUTION_VALUE_MSK (0x3F)
  499. struct wmi_vring_cfg {
  500. struct wmi_sw_ring_cfg tx_sw_ring;
  501. /* 0-23 vrings */
  502. u8 ringid;
  503. u8 cidxtid;
  504. u8 encap_trans_type;
  505. /* 802.3 DS cfg */
  506. u8 ds_cfg;
  507. u8 nwifi_ds_trans_type;
  508. u8 mac_ctrl;
  509. u8 to_resolution;
  510. u8 agg_max_wsize;
  511. struct wmi_vring_cfg_schd schd_params;
  512. } __packed;
  513. enum wmi_vring_cfg_cmd_action {
  514. WMI_VRING_CMD_ADD = 0x00,
  515. WMI_VRING_CMD_MODIFY = 0x01,
  516. WMI_VRING_CMD_DELETE = 0x02,
  517. };
  518. /* WMI_VRING_CFG_CMDID */
  519. struct wmi_vring_cfg_cmd {
  520. __le32 action;
  521. struct wmi_vring_cfg vring_cfg;
  522. } __packed;
  523. struct wmi_bcast_vring_cfg {
  524. struct wmi_sw_ring_cfg tx_sw_ring;
  525. /* 0-23 vrings */
  526. u8 ringid;
  527. u8 encap_trans_type;
  528. /* 802.3 DS cfg */
  529. u8 ds_cfg;
  530. u8 nwifi_ds_trans_type;
  531. } __packed;
  532. /* WMI_BCAST_VRING_CFG_CMDID */
  533. struct wmi_bcast_vring_cfg_cmd {
  534. __le32 action;
  535. struct wmi_bcast_vring_cfg vring_cfg;
  536. } __packed;
  537. /* WMI_VRING_BA_EN_CMDID */
  538. struct wmi_vring_ba_en_cmd {
  539. u8 ringid;
  540. u8 agg_max_wsize;
  541. __le16 ba_timeout;
  542. u8 amsdu;
  543. u8 reserved[3];
  544. } __packed;
  545. /* WMI_VRING_BA_DIS_CMDID */
  546. struct wmi_vring_ba_dis_cmd {
  547. u8 ringid;
  548. u8 reserved;
  549. __le16 reason;
  550. } __packed;
  551. /* WMI_NOTIFY_REQ_CMDID */
  552. struct wmi_notify_req_cmd {
  553. u8 cid;
  554. u8 year;
  555. u8 month;
  556. u8 day;
  557. __le32 interval_usec;
  558. u8 hour;
  559. u8 minute;
  560. u8 second;
  561. u8 miliseconds;
  562. } __packed;
  563. /* WMI_CFG_RX_CHAIN_CMDID */
  564. enum wmi_sniffer_cfg_mode {
  565. WMI_SNIFFER_OFF = 0x00,
  566. WMI_SNIFFER_ON = 0x01,
  567. };
  568. enum wmi_sniffer_cfg_phy_info_mode {
  569. WMI_SNIFFER_PHY_INFO_DISABLED = 0x00,
  570. WMI_SNIFFER_PHY_INFO_ENABLED = 0x01,
  571. };
  572. enum wmi_sniffer_cfg_phy_support {
  573. WMI_SNIFFER_CP = 0x00,
  574. WMI_SNIFFER_DP = 0x01,
  575. WMI_SNIFFER_BOTH_PHYS = 0x02,
  576. };
  577. /* wmi_sniffer_cfg */
  578. struct wmi_sniffer_cfg {
  579. /* enum wmi_sniffer_cfg_mode */
  580. __le32 mode;
  581. /* enum wmi_sniffer_cfg_phy_info_mode */
  582. __le32 phy_info_mode;
  583. /* enum wmi_sniffer_cfg_phy_support */
  584. __le32 phy_support;
  585. u8 channel;
  586. u8 reserved[3];
  587. } __packed;
  588. enum wmi_cfg_rx_chain_cmd_action {
  589. WMI_RX_CHAIN_ADD = 0x00,
  590. WMI_RX_CHAIN_DEL = 0x01,
  591. };
  592. enum wmi_cfg_rx_chain_cmd_decap_trans_type {
  593. WMI_DECAP_TYPE_802_3 = 0x00,
  594. WMI_DECAP_TYPE_NATIVE_WIFI = 0x01,
  595. WMI_DECAP_TYPE_NONE = 0x02,
  596. };
  597. enum wmi_cfg_rx_chain_cmd_nwifi_ds_trans_type {
  598. WMI_NWIFI_RX_TRANS_MODE_NO = 0x00,
  599. WMI_NWIFI_RX_TRANS_MODE_PBSS2AP = 0x01,
  600. WMI_NWIFI_RX_TRANS_MODE_PBSS2STA = 0x02,
  601. };
  602. enum wmi_cfg_rx_chain_cmd_reorder_type {
  603. WMI_RX_HW_REORDER = 0x00,
  604. WMI_RX_SW_REORDER = 0x01,
  605. };
  606. #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_POS (0)
  607. #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_LEN (1)
  608. #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_MSK (0x1)
  609. #define L2_802_3_OFFLOAD_CTRL_SNAP_KEEP_POS (1)
  610. #define L2_802_3_OFFLOAD_CTRL_SNAP_KEEP_LEN (1)
  611. #define L2_802_3_OFFLOAD_CTRL_SNAP_KEEP_MSK (0x2)
  612. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_POS (0)
  613. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_LEN (1)
  614. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_MSK (0x1)
  615. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_POS (1)
  616. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_LEN (1)
  617. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_MSK (0x2)
  618. #define L3_L4_CTRL_IPV4_CHECKSUM_EN_POS (0)
  619. #define L3_L4_CTRL_IPV4_CHECKSUM_EN_LEN (1)
  620. #define L3_L4_CTRL_IPV4_CHECKSUM_EN_MSK (0x1)
  621. #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_POS (1)
  622. #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_LEN (1)
  623. #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_MSK (0x2)
  624. #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_POS (0)
  625. #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_LEN (1)
  626. #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_MSK (0x1)
  627. #define RING_CTRL_OVERRIDE_WB_THRSH_POS (1)
  628. #define RING_CTRL_OVERRIDE_WB_THRSH_LEN (1)
  629. #define RING_CTRL_OVERRIDE_WB_THRSH_MSK (0x2)
  630. #define RING_CTRL_OVERRIDE_ITR_THRSH_POS (2)
  631. #define RING_CTRL_OVERRIDE_ITR_THRSH_LEN (1)
  632. #define RING_CTRL_OVERRIDE_ITR_THRSH_MSK (0x4)
  633. #define RING_CTRL_OVERRIDE_HOST_THRSH_POS (3)
  634. #define RING_CTRL_OVERRIDE_HOST_THRSH_LEN (1)
  635. #define RING_CTRL_OVERRIDE_HOST_THRSH_MSK (0x8)
  636. /* WMI_CFG_RX_CHAIN_CMDID */
  637. struct wmi_cfg_rx_chain_cmd {
  638. __le32 action;
  639. struct wmi_sw_ring_cfg rx_sw_ring;
  640. u8 mid;
  641. u8 decap_trans_type;
  642. u8 l2_802_3_offload_ctrl;
  643. u8 l2_nwifi_offload_ctrl;
  644. u8 vlan_id;
  645. u8 nwifi_ds_trans_type;
  646. u8 l3_l4_ctrl;
  647. u8 ring_ctrl;
  648. __le16 prefetch_thrsh;
  649. __le16 wb_thrsh;
  650. __le32 itr_value;
  651. __le16 host_thrsh;
  652. u8 reorder_type;
  653. u8 reserved;
  654. struct wmi_sniffer_cfg sniffer_cfg;
  655. __le16 max_rx_pl_per_desc;
  656. } __packed;
  657. /* WMI_RCP_ADDBA_RESP_CMDID */
  658. struct wmi_rcp_addba_resp_cmd {
  659. u8 cidxtid;
  660. u8 dialog_token;
  661. __le16 status_code;
  662. /* ieee80211_ba_parameterset field to send */
  663. __le16 ba_param_set;
  664. __le16 ba_timeout;
  665. } __packed;
  666. /* WMI_RCP_DELBA_CMDID */
  667. struct wmi_rcp_delba_cmd {
  668. u8 cidxtid;
  669. u8 reserved;
  670. __le16 reason;
  671. } __packed;
  672. /* WMI_RCP_ADDBA_REQ_CMDID */
  673. struct wmi_rcp_addba_req_cmd {
  674. u8 cidxtid;
  675. u8 dialog_token;
  676. /* ieee80211_ba_parameterset field as it received */
  677. __le16 ba_param_set;
  678. __le16 ba_timeout;
  679. /* ieee80211_ba_seqstrl field as it received */
  680. __le16 ba_seq_ctrl;
  681. } __packed;
  682. /* WMI_SET_MAC_ADDRESS_CMDID */
  683. struct wmi_set_mac_address_cmd {
  684. u8 mac[WMI_MAC_LEN];
  685. u8 reserved[2];
  686. } __packed;
  687. /* WMI_ECHO_CMDID
  688. * Check FW is alive
  689. * WMI_DEEP_ECHO_CMDID
  690. * Check FW and ucode are alive
  691. * Returned event: WMI_ECHO_RSP_EVENTID
  692. * same event for both commands
  693. */
  694. struct wmi_echo_cmd {
  695. __le32 value;
  696. } __packed;
  697. /* WMI_OTP_READ_CMDID */
  698. struct wmi_otp_read_cmd {
  699. __le32 addr;
  700. __le32 size;
  701. __le32 values;
  702. } __packed;
  703. /* WMI_OTP_WRITE_CMDID */
  704. struct wmi_otp_write_cmd {
  705. __le32 addr;
  706. __le32 size;
  707. __le32 values;
  708. } __packed;
  709. /* WMI_TEMP_SENSE_CMDID
  710. *
  711. * Measure MAC and radio temperatures
  712. *
  713. * Possible modes for temperature measurement
  714. */
  715. enum wmi_temperature_measure_mode {
  716. TEMPERATURE_USE_OLD_VALUE = 0x01,
  717. TEMPERATURE_MEASURE_NOW = 0x02,
  718. };
  719. /* WMI_TEMP_SENSE_CMDID */
  720. struct wmi_temp_sense_cmd {
  721. __le32 measure_baseband_en;
  722. __le32 measure_rf_en;
  723. __le32 measure_mode;
  724. } __packed;
  725. enum wmi_pmc_op {
  726. WMI_PMC_ALLOCATE = 0x00,
  727. WMI_PMC_RELEASE = 0x01,
  728. };
  729. /* WMI_PMC_CMDID */
  730. struct wmi_pmc_cmd {
  731. /* enum wmi_pmc_cmd_op_type */
  732. u8 op;
  733. u8 reserved;
  734. __le16 ring_size;
  735. __le64 mem_base;
  736. } __packed;
  737. /* WMI Events
  738. * List of Events (target to host)
  739. */
  740. enum wmi_event_id {
  741. WMI_READY_EVENTID = 0x1001,
  742. WMI_CONNECT_EVENTID = 0x1002,
  743. WMI_DISCONNECT_EVENTID = 0x1003,
  744. WMI_SCAN_COMPLETE_EVENTID = 0x100A,
  745. WMI_REPORT_STATISTICS_EVENTID = 0x100B,
  746. WMI_RD_MEM_RSP_EVENTID = 0x1800,
  747. WMI_FW_READY_EVENTID = 0x1801,
  748. WMI_EXIT_FAST_MEM_ACC_MODE_EVENTID = 0x200,
  749. WMI_ECHO_RSP_EVENTID = 0x1803,
  750. WMI_FS_TUNE_DONE_EVENTID = 0x180A,
  751. WMI_CORR_MEASURE_EVENTID = 0x180B,
  752. WMI_READ_RSSI_EVENTID = 0x180C,
  753. WMI_TEMP_SENSE_DONE_EVENTID = 0x180E,
  754. WMI_DC_CALIB_DONE_EVENTID = 0x180F,
  755. WMI_IQ_TX_CALIB_DONE_EVENTID = 0x1811,
  756. WMI_IQ_RX_CALIB_DONE_EVENTID = 0x1812,
  757. WMI_SET_WORK_MODE_DONE_EVENTID = 0x1815,
  758. WMI_LO_LEAKAGE_CALIB_DONE_EVENTID = 0x1816,
  759. WMI_MARLON_R_READ_DONE_EVENTID = 0x1818,
  760. WMI_MARLON_R_WRITE_DONE_EVENTID = 0x1819,
  761. WMI_MARLON_R_TXRX_SEL_DONE_EVENTID = 0x181A,
  762. WMI_SILENT_RSSI_CALIB_DONE_EVENTID = 0x181D,
  763. WMI_RF_RX_TEST_DONE_EVENTID = 0x181E,
  764. WMI_CFG_RX_CHAIN_DONE_EVENTID = 0x1820,
  765. WMI_VRING_CFG_DONE_EVENTID = 0x1821,
  766. WMI_BA_STATUS_EVENTID = 0x1823,
  767. WMI_RCP_ADDBA_REQ_EVENTID = 0x1824,
  768. WMI_RCP_ADDBA_RESP_SENT_EVENTID = 0x1825,
  769. WMI_DELBA_EVENTID = 0x1826,
  770. WMI_GET_SSID_EVENTID = 0x1828,
  771. WMI_GET_PCP_CHANNEL_EVENTID = 0x182A,
  772. WMI_SW_TX_COMPLETE_EVENTID = 0x182B,
  773. WMI_READ_MAC_RXQ_EVENTID = 0x1830,
  774. WMI_READ_MAC_TXQ_EVENTID = 0x1831,
  775. WMI_WRITE_MAC_RXQ_EVENTID = 0x1832,
  776. WMI_WRITE_MAC_TXQ_EVENTID = 0x1833,
  777. WMI_WRITE_MAC_XQ_FIELD_EVENTID = 0x1834,
  778. WMI_BEAMFORMING_MGMT_DONE_EVENTID = 0x1836,
  779. WMI_BF_TXSS_MGMT_DONE_EVENTID = 0x1837,
  780. WMI_BF_RXSS_MGMT_DONE_EVENTID = 0x1839,
  781. WMI_RS_MGMT_DONE_EVENTID = 0x1852,
  782. WMI_RF_MGMT_STATUS_EVENTID = 0x1853,
  783. WMI_THERMAL_THROTTLING_STATUS_EVENTID = 0x1855,
  784. WMI_BF_SM_MGMT_DONE_EVENTID = 0x1838,
  785. WMI_RX_MGMT_PACKET_EVENTID = 0x1840,
  786. WMI_TX_MGMT_PACKET_EVENTID = 0x1841,
  787. WMI_OTP_READ_RESULT_EVENTID = 0x1856,
  788. WMI_LED_CFG_DONE_EVENTID = 0x1858,
  789. /* Performance monitoring events */
  790. WMI_DATA_PORT_OPEN_EVENTID = 0x1860,
  791. WMI_WBE_LINK_DOWN_EVENTID = 0x1861,
  792. WMI_BF_CTRL_DONE_EVENTID = 0x1862,
  793. WMI_NOTIFY_REQ_DONE_EVENTID = 0x1863,
  794. WMI_GET_STATUS_DONE_EVENTID = 0x1864,
  795. WMI_VRING_EN_EVENTID = 0x1865,
  796. WMI_UNIT_TEST_EVENTID = 0x1900,
  797. WMI_FLASH_READ_DONE_EVENTID = 0x1902,
  798. WMI_FLASH_WRITE_DONE_EVENTID = 0x1903,
  799. /* P2P */
  800. WMI_P2P_CFG_DONE_EVENTID = 0x1910,
  801. WMI_PORT_ALLOCATED_EVENTID = 0x1911,
  802. WMI_PORT_DELETED_EVENTID = 0x1912,
  803. WMI_LISTEN_STARTED_EVENTID = 0x1914,
  804. WMI_SEARCH_STARTED_EVENTID = 0x1915,
  805. WMI_DISCOVERY_STARTED_EVENTID = 0x1916,
  806. WMI_DISCOVERY_STOPPED_EVENTID = 0x1917,
  807. WMI_PCP_STARTED_EVENTID = 0x1918,
  808. WMI_PCP_STOPPED_EVENTID = 0x1919,
  809. WMI_PCP_FACTOR_EVENTID = 0x191A,
  810. WMI_SET_CHANNEL_EVENTID = 0x9000,
  811. WMI_ASSOC_REQ_EVENTID = 0x9001,
  812. WMI_EAPOL_RX_EVENTID = 0x9002,
  813. WMI_MAC_ADDR_RESP_EVENTID = 0x9003,
  814. WMI_FW_VER_EVENTID = 0x9004,
  815. WMI_ACS_PASSIVE_SCAN_COMPLETE_EVENTID = 0x9005,
  816. };
  817. /* Events data structures */
  818. enum wmi_fw_status {
  819. WMI_FW_STATUS_SUCCESS = 0x00,
  820. WMI_FW_STATUS_FAILURE = 0x01,
  821. };
  822. /* WMI_RF_MGMT_STATUS_EVENTID */
  823. enum wmi_rf_status {
  824. WMI_RF_ENABLED = 0x00,
  825. WMI_RF_DISABLED_HW = 0x01,
  826. WMI_RF_DISABLED_SW = 0x02,
  827. WMI_RF_DISABLED_HW_SW = 0x03,
  828. };
  829. /* WMI_RF_MGMT_STATUS_EVENTID */
  830. struct wmi_rf_mgmt_status_event {
  831. __le32 rf_status;
  832. } __packed;
  833. /* WMI_THERMAL_THROTTLING_STATUS_EVENTID */
  834. struct wmi_thermal_throttling_status_event {
  835. __le32 time_on_usec;
  836. __le32 time_off_usec;
  837. __le32 max_txop_length_usec;
  838. } __packed;
  839. /* WMI_GET_STATUS_DONE_EVENTID */
  840. struct wmi_get_status_done_event {
  841. __le32 is_associated;
  842. u8 cid;
  843. u8 reserved0[3];
  844. u8 bssid[WMI_MAC_LEN];
  845. u8 channel;
  846. u8 reserved1;
  847. u8 network_type;
  848. u8 reserved2[3];
  849. __le32 ssid_len;
  850. u8 ssid[WMI_MAX_SSID_LEN];
  851. __le32 rf_status;
  852. __le32 is_secured;
  853. } __packed;
  854. /* WMI_FW_VER_EVENTID */
  855. struct wmi_fw_ver_event {
  856. u8 major;
  857. u8 minor;
  858. __le16 subminor;
  859. __le16 build;
  860. } __packed;
  861. /* WMI_MAC_ADDR_RESP_EVENTID */
  862. struct wmi_mac_addr_resp_event {
  863. u8 mac[WMI_MAC_LEN];
  864. u8 auth_mode;
  865. u8 crypt_mode;
  866. __le32 offload_mode;
  867. } __packed;
  868. /* WMI_EAPOL_RX_EVENTID */
  869. struct wmi_eapol_rx_event {
  870. u8 src_mac[WMI_MAC_LEN];
  871. __le16 eapol_len;
  872. u8 eapol[0];
  873. } __packed;
  874. /* WMI_READY_EVENTID */
  875. enum wmi_phy_capability {
  876. WMI_11A_CAPABILITY = 0x01,
  877. WMI_11G_CAPABILITY = 0x02,
  878. WMI_11AG_CAPABILITY = 0x03,
  879. WMI_11NA_CAPABILITY = 0x04,
  880. WMI_11NG_CAPABILITY = 0x05,
  881. WMI_11NAG_CAPABILITY = 0x06,
  882. WMI_11AD_CAPABILITY = 0x07,
  883. WMI_11N_CAPABILITY_OFFSET = 0x03,
  884. };
  885. struct wmi_ready_event {
  886. __le32 sw_version;
  887. __le32 abi_version;
  888. u8 mac[WMI_MAC_LEN];
  889. /* enum wmi_phy_capability */
  890. u8 phy_capability;
  891. u8 numof_additional_mids;
  892. } __packed;
  893. /* WMI_NOTIFY_REQ_DONE_EVENTID */
  894. struct wmi_notify_req_done_event {
  895. /* beamforming status, 0: fail; 1: OK; 2: retrying */
  896. __le32 status;
  897. __le64 tsf;
  898. __le32 snr_val;
  899. __le32 tx_tpt;
  900. __le32 tx_goodput;
  901. __le32 rx_goodput;
  902. __le16 bf_mcs;
  903. __le16 my_rx_sector;
  904. __le16 my_tx_sector;
  905. __le16 other_rx_sector;
  906. __le16 other_tx_sector;
  907. __le16 range;
  908. u8 sqi;
  909. u8 reserved[3];
  910. } __packed;
  911. /* WMI_CONNECT_EVENTID */
  912. struct wmi_connect_event {
  913. u8 channel;
  914. u8 reserved0;
  915. u8 bssid[WMI_MAC_LEN];
  916. __le16 listen_interval;
  917. __le16 beacon_interval;
  918. u8 network_type;
  919. u8 reserved1[3];
  920. u8 beacon_ie_len;
  921. u8 assoc_req_len;
  922. u8 assoc_resp_len;
  923. u8 cid;
  924. u8 reserved2[3];
  925. /* not in use */
  926. u8 assoc_info[0];
  927. } __packed;
  928. /* WMI_DISCONNECT_EVENTID */
  929. enum wmi_disconnect_reason {
  930. WMI_DIS_REASON_NO_NETWORK_AVAIL = 0x01,
  931. /* bmiss */
  932. WMI_DIS_REASON_LOST_LINK = 0x02,
  933. WMI_DIS_REASON_DISCONNECT_CMD = 0x03,
  934. WMI_DIS_REASON_BSS_DISCONNECTED = 0x04,
  935. WMI_DIS_REASON_AUTH_FAILED = 0x05,
  936. WMI_DIS_REASON_ASSOC_FAILED = 0x06,
  937. WMI_DIS_REASON_NO_RESOURCES_AVAIL = 0x07,
  938. WMI_DIS_REASON_CSERV_DISCONNECT = 0x08,
  939. WMI_DIS_REASON_INVALID_PROFILE = 0x0A,
  940. WMI_DIS_REASON_DOT11H_CHANNEL_SWITCH = 0x0B,
  941. WMI_DIS_REASON_PROFILE_MISMATCH = 0x0C,
  942. WMI_DIS_REASON_CONNECTION_EVICTED = 0x0D,
  943. WMI_DIS_REASON_IBSS_MERGE = 0x0E,
  944. };
  945. struct wmi_disconnect_event {
  946. /* reason code, see 802.11 spec. */
  947. __le16 protocol_reason_status;
  948. /* set if known */
  949. u8 bssid[WMI_MAC_LEN];
  950. /* see enum wmi_disconnect_reason */
  951. u8 disconnect_reason;
  952. /* last assoc req may passed to host - not in used */
  953. u8 assoc_resp_len;
  954. /* last assoc req may passed to host - not in used */
  955. u8 assoc_info[0];
  956. } __packed;
  957. /* WMI_SCAN_COMPLETE_EVENTID */
  958. enum scan_status {
  959. WMI_SCAN_SUCCESS = 0x00,
  960. WMI_SCAN_FAILED = 0x01,
  961. WMI_SCAN_ABORTED = 0x02,
  962. WMI_SCAN_REJECTED = 0x03,
  963. WMI_SCAN_ABORT_REJECTED = 0x04,
  964. };
  965. struct wmi_scan_complete_event {
  966. /* enum scan_status */
  967. __le32 status;
  968. } __packed;
  969. /* WMI_ACS_PASSIVE_SCAN_COMPLETE_EVENT */
  970. enum wmi_acs_info_bitmask {
  971. WMI_ACS_INFO_BITMASK_BEACON_FOUND = 0x01,
  972. WMI_ACS_INFO_BITMASK_BUSY_TIME = 0x02,
  973. WMI_ACS_INFO_BITMASK_TX_TIME = 0x04,
  974. WMI_ACS_INFO_BITMASK_RX_TIME = 0x08,
  975. WMI_ACS_INFO_BITMASK_NOISE = 0x10,
  976. };
  977. struct scan_acs_info {
  978. u8 channel;
  979. u8 beacon_found;
  980. /* msec */
  981. __le16 busy_time;
  982. __le16 tx_time;
  983. __le16 rx_time;
  984. u8 noise;
  985. u8 reserved[3];
  986. } __packed;
  987. struct wmi_acs_passive_scan_complete_event {
  988. __le32 dwell_time;
  989. /* valid fields within channel info according to
  990. * their appearance in struct order
  991. */
  992. __le16 filled;
  993. u8 num_scanned_channels;
  994. u8 reserved;
  995. struct scan_acs_info scan_info_list[0];
  996. } __packed;
  997. /* WMI_BA_STATUS_EVENTID */
  998. enum wmi_vring_ba_status {
  999. WMI_BA_AGREED = 0x00,
  1000. WMI_BA_NON_AGREED = 0x01,
  1001. /* BA_EN in middle of teardown flow */
  1002. WMI_BA_TD_WIP = 0x02,
  1003. /* BA_DIS or BA_EN in middle of BA SETUP flow */
  1004. WMI_BA_SETUP_WIP = 0x03,
  1005. /* BA_EN when the BA session is already active */
  1006. WMI_BA_SESSION_ACTIVE = 0x04,
  1007. /* BA_DIS when the BA session is not active */
  1008. WMI_BA_SESSION_NOT_ACTIVE = 0x05,
  1009. };
  1010. struct wmi_ba_status_event {
  1011. /* enum wmi_vring_ba_status */
  1012. __le16 status;
  1013. u8 reserved[2];
  1014. u8 ringid;
  1015. u8 agg_wsize;
  1016. __le16 ba_timeout;
  1017. u8 amsdu;
  1018. } __packed;
  1019. /* WMI_DELBA_EVENTID */
  1020. struct wmi_delba_event {
  1021. u8 cidxtid;
  1022. u8 from_initiator;
  1023. __le16 reason;
  1024. } __packed;
  1025. /* WMI_VRING_CFG_DONE_EVENTID */
  1026. struct wmi_vring_cfg_done_event {
  1027. u8 ringid;
  1028. u8 status;
  1029. u8 reserved[2];
  1030. __le32 tx_vring_tail_ptr;
  1031. } __packed;
  1032. /* WMI_RCP_ADDBA_RESP_SENT_EVENTID */
  1033. struct wmi_rcp_addba_resp_sent_event {
  1034. u8 cidxtid;
  1035. u8 reserved;
  1036. __le16 status;
  1037. } __packed;
  1038. /* WMI_RCP_ADDBA_REQ_EVENTID */
  1039. struct wmi_rcp_addba_req_event {
  1040. u8 cidxtid;
  1041. u8 dialog_token;
  1042. /* ieee80211_ba_parameterset as it received */
  1043. __le16 ba_param_set;
  1044. __le16 ba_timeout;
  1045. /* ieee80211_ba_seqstrl field as it received */
  1046. __le16 ba_seq_ctrl;
  1047. } __packed;
  1048. /* WMI_CFG_RX_CHAIN_DONE_EVENTID */
  1049. enum wmi_cfg_rx_chain_done_event_status {
  1050. WMI_CFG_RX_CHAIN_SUCCESS = 0x01,
  1051. };
  1052. struct wmi_cfg_rx_chain_done_event {
  1053. /* V-Ring Tail pointer */
  1054. __le32 rx_ring_tail_ptr;
  1055. __le32 status;
  1056. } __packed;
  1057. /* WMI_WBE_LINK_DOWN_EVENTID */
  1058. enum wmi_wbe_link_down_event_reason {
  1059. WMI_WBE_REASON_USER_REQUEST = 0x00,
  1060. WMI_WBE_REASON_RX_DISASSOC = 0x01,
  1061. WMI_WBE_REASON_BAD_PHY_LINK = 0x02,
  1062. };
  1063. /* WMI_WBE_LINK_DOWN_EVENTID */
  1064. struct wmi_wbe_link_down_event {
  1065. u8 cid;
  1066. u8 reserved[3];
  1067. __le32 reason;
  1068. } __packed;
  1069. /* WMI_DATA_PORT_OPEN_EVENTID */
  1070. struct wmi_data_port_open_event {
  1071. u8 cid;
  1072. u8 reserved[3];
  1073. } __packed;
  1074. /* WMI_VRING_EN_EVENTID */
  1075. struct wmi_vring_en_event {
  1076. u8 vring_index;
  1077. u8 reserved[3];
  1078. } __packed;
  1079. /* WMI_GET_PCP_CHANNEL_EVENTID */
  1080. struct wmi_get_pcp_channel_event {
  1081. u8 channel;
  1082. u8 reserved[3];
  1083. } __packed;
  1084. /* WMI_P2P_CFG_DONE_EVENTID */
  1085. struct wmi_p2p_cfg_done_event {
  1086. /* wmi_fw_status */
  1087. u8 status;
  1088. u8 reserved[3];
  1089. } __packed;
  1090. /* WMI_PORT_ALLOCATED_EVENTID */
  1091. struct wmi_port_allocated_event {
  1092. /* wmi_fw_status */
  1093. u8 status;
  1094. u8 reserved[3];
  1095. } __packed;
  1096. /* WMI_PORT_DELETED_EVENTID */
  1097. struct wmi_port_deleted_event {
  1098. /* wmi_fw_status */
  1099. u8 status;
  1100. u8 reserved[3];
  1101. } __packed;
  1102. /* WMI_LISTEN_STARTED_EVENTID */
  1103. struct wmi_listen_started_event {
  1104. /* wmi_fw_status */
  1105. u8 status;
  1106. u8 reserved[3];
  1107. } __packed;
  1108. /* WMI_SEARCH_STARTED_EVENTID */
  1109. struct wmi_search_started_event {
  1110. /* wmi_fw_status */
  1111. u8 status;
  1112. u8 reserved[3];
  1113. } __packed;
  1114. /* WMI_PCP_STARTED_EVENTID */
  1115. struct wmi_pcp_started_event {
  1116. /* wmi_fw_status */
  1117. u8 status;
  1118. u8 reserved[3];
  1119. } __packed;
  1120. /* WMI_PCP_FACTOR_EVENTID */
  1121. struct wmi_pcp_factor_event {
  1122. __le32 pcp_factor;
  1123. } __packed;
  1124. enum wmi_sw_tx_status {
  1125. WMI_TX_SW_STATUS_SUCCESS = 0x00,
  1126. WMI_TX_SW_STATUS_FAILED_NO_RESOURCES = 0x01,
  1127. WMI_TX_SW_STATUS_FAILED_TX = 0x02,
  1128. };
  1129. /* WMI_SW_TX_COMPLETE_EVENTID */
  1130. struct wmi_sw_tx_complete_event {
  1131. /* enum wmi_sw_tx_status */
  1132. u8 status;
  1133. u8 reserved[3];
  1134. } __packed;
  1135. /* WMI_CORR_MEASURE_EVENTID */
  1136. struct wmi_corr_measure_event {
  1137. /* signed */
  1138. __le32 i;
  1139. /* signed */
  1140. __le32 q;
  1141. /* signed */
  1142. __le32 image_i;
  1143. /* signed */
  1144. __le32 image_q;
  1145. } __packed;
  1146. /* WMI_READ_RSSI_EVENTID */
  1147. struct wmi_read_rssi_event {
  1148. __le32 ina_rssi_adc_dbm;
  1149. } __packed;
  1150. /* WMI_GET_SSID_EVENTID */
  1151. struct wmi_get_ssid_event {
  1152. __le32 ssid_len;
  1153. u8 ssid[WMI_MAX_SSID_LEN];
  1154. } __packed;
  1155. /* wmi_rx_mgmt_info */
  1156. struct wmi_rx_mgmt_info {
  1157. u8 mcs;
  1158. s8 snr;
  1159. u8 range;
  1160. u8 sqi;
  1161. __le16 stype;
  1162. __le16 status;
  1163. __le32 len;
  1164. /* Not resolved when == 0xFFFFFFFF ==> Broadcast to all MIDS */
  1165. u8 qid;
  1166. /* Not resolved when == 0xFFFFFFFF ==> Broadcast to all MIDS */
  1167. u8 mid;
  1168. u8 cid;
  1169. /* From Radio MNGR */
  1170. u8 channel;
  1171. } __packed;
  1172. /* wmi_otp_read_write_cmd */
  1173. struct wmi_otp_read_write_cmd {
  1174. __le32 addr;
  1175. __le32 size;
  1176. u8 values[0];
  1177. } __packed;
  1178. /* WMI_OTP_READ_RESULT_EVENTID */
  1179. struct wmi_otp_read_result_event {
  1180. u8 payload[0];
  1181. } __packed;
  1182. /* WMI_TX_MGMT_PACKET_EVENTID */
  1183. struct wmi_tx_mgmt_packet_event {
  1184. u8 payload[0];
  1185. } __packed;
  1186. /* WMI_RX_MGMT_PACKET_EVENTID */
  1187. struct wmi_rx_mgmt_packet_event {
  1188. struct wmi_rx_mgmt_info info;
  1189. u8 payload[0];
  1190. } __packed;
  1191. /* WMI_ECHO_RSP_EVENTID */
  1192. struct wmi_echo_rsp_event {
  1193. __le32 echoed_value;
  1194. } __packed;
  1195. /* WMI_TEMP_SENSE_DONE_EVENTID
  1196. *
  1197. * Measure MAC and radio temperatures
  1198. */
  1199. struct wmi_temp_sense_done_event {
  1200. /* Temperature times 1000 (actual temperature will be achieved by
  1201. * dividing the value by 1000)
  1202. */
  1203. __le32 baseband_t1000;
  1204. /* Temperature times 1000 (actual temperature will be achieved by
  1205. * dividing the value by 1000)
  1206. */
  1207. __le32 rf_t1000;
  1208. } __packed;
  1209. #define WMI_SCAN_DWELL_TIME_MS (100)
  1210. #define WMI_SURVEY_TIMEOUT_MS (10000)
  1211. enum wmi_hidden_ssid {
  1212. WMI_HIDDEN_SSID_DISABLED = 0x00,
  1213. WMI_HIDDEN_SSID_SEND_EMPTY = 0x10,
  1214. WMI_HIDDEN_SSID_CLEAR = 0xFE,
  1215. };
  1216. /* WMI_LED_CFG_CMDID
  1217. *
  1218. * Configure LED On\Off\Blinking operation
  1219. *
  1220. * Returned events:
  1221. * - WMI_LED_CFG_DONE_EVENTID
  1222. */
  1223. enum led_mode {
  1224. LED_DISABLE = 0x00,
  1225. LED_ENABLE = 0x01,
  1226. };
  1227. /* The names of the led as
  1228. * described on HW schemes.
  1229. */
  1230. enum wmi_led_id {
  1231. WMI_LED_WLAN = 0x00,
  1232. WMI_LED_WPAN = 0x01,
  1233. WMI_LED_WWAN = 0x02,
  1234. };
  1235. /* Led polarity mode. */
  1236. enum wmi_led_polarity {
  1237. LED_POLARITY_HIGH_ACTIVE = 0x00,
  1238. LED_POLARITY_LOW_ACTIVE = 0x01,
  1239. };
  1240. /* Combination of on and off
  1241. * creates the blinking period
  1242. */
  1243. struct wmi_led_blink_mode {
  1244. __le32 blink_on;
  1245. __le32 blink_off;
  1246. } __packed;
  1247. /* WMI_LED_CFG_CMDID */
  1248. struct wmi_led_cfg_cmd {
  1249. /* enum led_mode_e */
  1250. u8 led_mode;
  1251. /* enum wmi_led_id_e */
  1252. u8 id;
  1253. /* slow speed blinking combination */
  1254. struct wmi_led_blink_mode slow_blink_cfg;
  1255. /* medium speed blinking combination */
  1256. struct wmi_led_blink_mode medium_blink_cfg;
  1257. /* high speed blinking combination */
  1258. struct wmi_led_blink_mode fast_blink_cfg;
  1259. /* polarity of the led */
  1260. u8 led_polarity;
  1261. /* reserved */
  1262. u8 reserved;
  1263. } __packed;
  1264. /* WMI_LED_CFG_DONE_EVENTID */
  1265. struct wmi_led_cfg_done_event {
  1266. /* led config status */
  1267. __le32 status;
  1268. } __packed;
  1269. #endif /* __WILOCITY_WMI_H__ */