wmi.h 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293
  1. /*
  2. * Copyright (c) 2012 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 Wilocity
  20. * MARLON 60 Gigabit 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. #ifndef __WILOCITY_WMI_H__
  26. #define __WILOCITY_WMI_H__
  27. /* General */
  28. #define WILOCITY_MAX_ASSOC_STA (8)
  29. #define WMI_MAC_LEN (6)
  30. #define WMI_PROX_RANGE_NUM (3)
  31. /* List of Commands */
  32. enum wmi_command_id {
  33. WMI_CONNECT_CMDID = 0x0001,
  34. WMI_DISCONNECT_CMDID = 0x0003,
  35. WMI_DISCONNECT_STA_CMDID = 0x0004,
  36. WMI_START_SCAN_CMDID = 0x0007,
  37. WMI_SET_BSS_FILTER_CMDID = 0x0009,
  38. WMI_SET_PROBED_SSID_CMDID = 0x000a,
  39. WMI_SET_LISTEN_INT_CMDID = 0x000b,
  40. WMI_BCON_CTRL_CMDID = 0x000f,
  41. WMI_ADD_CIPHER_KEY_CMDID = 0x0016,
  42. WMI_DELETE_CIPHER_KEY_CMDID = 0x0017,
  43. WMI_SET_APPIE_CMDID = 0x003f,
  44. WMI_SET_WSC_STATUS_CMDID = 0x0041,
  45. WMI_PXMT_RANGE_CFG_CMDID = 0x0042,
  46. WMI_PXMT_SNR2_RANGE_CFG_CMDID = 0x0043,
  47. WMI_FAST_MEM_ACC_MODE_CMDID = 0x0300,
  48. WMI_MEM_READ_CMDID = 0x0800,
  49. WMI_MEM_WR_CMDID = 0x0801,
  50. WMI_ECHO_CMDID = 0x0803,
  51. WMI_DEEP_ECHO_CMDID = 0x0804,
  52. WMI_CONFIG_MAC_CMDID = 0x0805,
  53. WMI_CONFIG_PHY_DEBUG_CMDID = 0x0806,
  54. WMI_ADD_DEBUG_TX_PCKT_CMDID = 0x0808,
  55. WMI_PHY_GET_STATISTICS_CMDID = 0x0809,
  56. WMI_FS_TUNE_CMDID = 0x080a,
  57. WMI_CORR_MEASURE_CMDID = 0x080b,
  58. WMI_READ_RSSI_CMDID = 0x080c,
  59. WMI_TEMP_SENSE_CMDID = 0x080e,
  60. WMI_DC_CALIB_CMDID = 0x080f,
  61. WMI_SEND_TONE_CMDID = 0x0810,
  62. WMI_IQ_TX_CALIB_CMDID = 0x0811,
  63. WMI_IQ_RX_CALIB_CMDID = 0x0812,
  64. WMI_SET_UCODE_IDLE_CMDID = 0x0813,
  65. WMI_SET_WORK_MODE_CMDID = 0x0815,
  66. WMI_LO_LEAKAGE_CALIB_CMDID = 0x0816,
  67. WMI_MARLON_R_ACTIVATE_CMDID = 0x0817,
  68. WMI_MARLON_R_READ_CMDID = 0x0818,
  69. WMI_MARLON_R_WRITE_CMDID = 0x0819,
  70. WMI_MARLON_R_TXRX_SEL_CMDID = 0x081a,
  71. MAC_IO_STATIC_PARAMS_CMDID = 0x081b,
  72. MAC_IO_DYNAMIC_PARAMS_CMDID = 0x081c,
  73. WMI_SILENT_RSSI_CALIB_CMDID = 0x081d,
  74. WMI_RF_RX_TEST_CMDID = 0x081e,
  75. WMI_CFG_RX_CHAIN_CMDID = 0x0820,
  76. WMI_VRING_CFG_CMDID = 0x0821,
  77. WMI_VRING_BA_EN_CMDID = 0x0823,
  78. WMI_VRING_BA_DIS_CMDID = 0x0824,
  79. WMI_RCP_ADDBA_RESP_CMDID = 0x0825,
  80. WMI_RCP_DELBA_CMDID = 0x0826,
  81. WMI_SET_SSID_CMDID = 0x0827,
  82. WMI_GET_SSID_CMDID = 0x0828,
  83. WMI_SET_PCP_CHANNEL_CMDID = 0x0829,
  84. WMI_GET_PCP_CHANNEL_CMDID = 0x082a,
  85. WMI_SW_TX_REQ_CMDID = 0x082b,
  86. WMI_READ_MAC_RXQ_CMDID = 0x0830,
  87. WMI_READ_MAC_TXQ_CMDID = 0x0831,
  88. WMI_WRITE_MAC_RXQ_CMDID = 0x0832,
  89. WMI_WRITE_MAC_TXQ_CMDID = 0x0833,
  90. WMI_WRITE_MAC_XQ_FIELD_CMDID = 0x0834,
  91. WMI_MLME_PUSH_CMDID = 0x0835,
  92. WMI_BEAMFORMING_MGMT_CMDID = 0x0836,
  93. WMI_BF_TXSS_MGMT_CMDID = 0x0837,
  94. WMI_BF_SM_MGMT_CMDID = 0x0838,
  95. WMI_BF_RXSS_MGMT_CMDID = 0x0839,
  96. WMI_SET_SECTORS_CMDID = 0x0849,
  97. WMI_MAINTAIN_PAUSE_CMDID = 0x0850,
  98. WMI_MAINTAIN_RESUME_CMDID = 0x0851,
  99. WMI_RS_MGMT_CMDID = 0x0852,
  100. WMI_RF_MGMT_CMDID = 0x0853,
  101. /* Performance monitoring commands */
  102. WMI_BF_CTRL_CMDID = 0x0862,
  103. WMI_NOTIFY_REQ_CMDID = 0x0863,
  104. WMI_GET_STATUS_CMDID = 0x0864,
  105. WMI_UNIT_TEST_CMDID = 0x0900,
  106. WMI_HICCUP_CMDID = 0x0901,
  107. WMI_FLASH_READ_CMDID = 0x0902,
  108. WMI_FLASH_WRITE_CMDID = 0x0903,
  109. WMI_SECURITY_UNIT_TEST_CMDID = 0x0904,
  110. /*P2P*/
  111. WMI_P2P_CFG_CMDID = 0x0910,
  112. WMI_PORT_ALLOCATE_CMDID = 0x0911,
  113. WMI_PORT_DELETE_CMDID = 0x0912,
  114. WMI_POWER_MGMT_CFG_CMDID = 0x0913,
  115. WMI_START_LISTEN_CMDID = 0x0914,
  116. WMI_START_SEARCH_CMDID = 0x0915,
  117. WMI_DISCOVERY_START_CMDID = 0x0916,
  118. WMI_DISCOVERY_STOP_CMDID = 0x0917,
  119. WMI_PCP_START_CMDID = 0x0918,
  120. WMI_PCP_STOP_CMDID = 0x0919,
  121. WMI_GET_PCP_FACTOR_CMDID = 0x091b,
  122. WMI_SET_MAC_ADDRESS_CMDID = 0xf003,
  123. WMI_ABORT_SCAN_CMDID = 0xf007,
  124. WMI_SET_PMK_CMDID = 0xf028,
  125. WMI_SET_PROMISCUOUS_MODE_CMDID = 0xf041,
  126. WMI_GET_PMK_CMDID = 0xf048,
  127. WMI_SET_PASSPHRASE_CMDID = 0xf049,
  128. WMI_SEND_ASSOC_RES_CMDID = 0xf04a,
  129. WMI_SET_ASSOC_REQ_RELAY_CMDID = 0xf04b,
  130. WMI_EAPOL_TX_CMDID = 0xf04c,
  131. WMI_MAC_ADDR_REQ_CMDID = 0xf04d,
  132. WMI_FW_VER_CMDID = 0xf04e,
  133. };
  134. /*
  135. * Commands data structures
  136. */
  137. /*
  138. * WMI_CONNECT_CMDID
  139. */
  140. enum wmi_network_type {
  141. WMI_NETTYPE_INFRA = 0x01,
  142. WMI_NETTYPE_ADHOC = 0x02,
  143. WMI_NETTYPE_ADHOC_CREATOR = 0x04,
  144. WMI_NETTYPE_AP = 0x10,
  145. WMI_NETTYPE_P2P = 0x20,
  146. WMI_NETTYPE_WBE = 0x40, /* PCIE over 60g */
  147. };
  148. enum wmi_dot11_auth_mode {
  149. WMI_AUTH11_OPEN = 0x01,
  150. WMI_AUTH11_SHARED = 0x02,
  151. WMI_AUTH11_LEAP = 0x04,
  152. WMI_AUTH11_WSC = 0x08,
  153. };
  154. enum wmi_auth_mode {
  155. WMI_AUTH_NONE = 0x01,
  156. WMI_AUTH_WPA = 0x02,
  157. WMI_AUTH_WPA2 = 0x04,
  158. WMI_AUTH_WPA_PSK = 0x08,
  159. WMI_AUTH_WPA2_PSK = 0x10,
  160. WMI_AUTH_WPA_CCKM = 0x20,
  161. WMI_AUTH_WPA2_CCKM = 0x40,
  162. };
  163. enum wmi_crypto_type {
  164. WMI_CRYPT_NONE = 0x01,
  165. WMI_CRYPT_WEP = 0x02,
  166. WMI_CRYPT_TKIP = 0x04,
  167. WMI_CRYPT_AES = 0x08,
  168. WMI_CRYPT_AES_GCMP = 0x20,
  169. };
  170. enum wmi_connect_ctrl_flag_bits {
  171. WMI_CONNECT_ASSOC_POLICY_USER = 0x0001,
  172. WMI_CONNECT_SEND_REASSOC = 0x0002,
  173. WMI_CONNECT_IGNORE_WPA_GROUP_CIPHER = 0x0004,
  174. WMI_CONNECT_PROFILE_MATCH_DONE = 0x0008,
  175. WMI_CONNECT_IGNORE_AAC_BEACON = 0x0010,
  176. WMI_CONNECT_CSA_FOLLOW_BSS = 0x0020,
  177. WMI_CONNECT_DO_WPA_OFFLOAD = 0x0040,
  178. WMI_CONNECT_DO_NOT_DEAUTH = 0x0080,
  179. };
  180. #define WMI_MAX_SSID_LEN (32)
  181. struct wmi_connect_cmd {
  182. u8 network_type;
  183. u8 dot11_auth_mode;
  184. u8 auth_mode;
  185. u8 pairwise_crypto_type;
  186. u8 pairwise_crypto_len;
  187. u8 group_crypto_type;
  188. u8 group_crypto_len;
  189. u8 ssid_len;
  190. u8 ssid[WMI_MAX_SSID_LEN];
  191. u8 channel;
  192. u8 reserved0;
  193. u8 bssid[WMI_MAC_LEN];
  194. __le32 ctrl_flags;
  195. u8 dst_mac[WMI_MAC_LEN];
  196. u8 reserved1[2];
  197. } __packed;
  198. /*
  199. * WMI_DISCONNECT_STA_CMDID
  200. */
  201. struct wmi_disconnect_sta_cmd {
  202. u8 dst_mac[WMI_MAC_LEN];
  203. __le16 disconnect_reason;
  204. } __packed;
  205. /*
  206. * WMI_SET_PMK_CMDID
  207. */
  208. #define WMI_MIN_KEY_INDEX (0)
  209. #define WMI_MAX_KEY_INDEX (3)
  210. #define WMI_MAX_KEY_LEN (32)
  211. #define WMI_PASSPHRASE_LEN (64)
  212. #define WMI_PMK_LEN (32)
  213. struct wmi_set_pmk_cmd {
  214. u8 pmk[WMI_PMK_LEN];
  215. } __packed;
  216. /*
  217. * WMI_SET_PASSPHRASE_CMDID
  218. */
  219. struct wmi_set_passphrase_cmd {
  220. u8 ssid[WMI_MAX_SSID_LEN];
  221. u8 passphrase[WMI_PASSPHRASE_LEN];
  222. u8 ssid_len;
  223. u8 passphrase_len;
  224. } __packed;
  225. /*
  226. * WMI_ADD_CIPHER_KEY_CMDID
  227. */
  228. enum wmi_key_usage {
  229. WMI_KEY_USE_PAIRWISE = 0,
  230. WMI_KEY_USE_GROUP = 1,
  231. WMI_KEY_USE_TX = 2, /* default Tx Key - Static WEP only */
  232. };
  233. struct wmi_add_cipher_key_cmd {
  234. u8 key_index;
  235. u8 key_type;
  236. u8 key_usage; /* enum wmi_key_usage */
  237. u8 key_len;
  238. u8 key_rsc[8]; /* key replay sequence counter */
  239. u8 key[WMI_MAX_KEY_LEN];
  240. u8 key_op_ctrl; /* Additional Key Control information */
  241. u8 mac[WMI_MAC_LEN];
  242. } __packed;
  243. /*
  244. * WMI_DELETE_CIPHER_KEY_CMDID
  245. */
  246. struct wmi_delete_cipher_key_cmd {
  247. u8 key_index;
  248. u8 mac[WMI_MAC_LEN];
  249. } __packed;
  250. /*
  251. * WMI_START_SCAN_CMDID
  252. *
  253. * Start L1 scan operation
  254. *
  255. * Returned events:
  256. * - WMI_RX_MGMT_PACKET_EVENTID - for every probe resp.
  257. * - WMI_SCAN_COMPLETE_EVENTID
  258. */
  259. enum wmi_scan_type {
  260. WMI_LONG_SCAN = 0,
  261. WMI_SHORT_SCAN = 1,
  262. WMI_PBC_SCAN = 2,
  263. WMI_ACTIVE_SCAN = 3,
  264. WMI_DIRECT_SCAN = 4,
  265. };
  266. struct wmi_start_scan_cmd {
  267. u8 direct_scan_mac_addr[6];
  268. u8 reserved[2];
  269. __le32 home_dwell_time; /* Max duration in the home channel(ms) */
  270. __le32 force_scan_interval; /* Time interval between scans (ms)*/
  271. u8 scan_type; /* wmi_scan_type */
  272. u8 num_channels; /* how many channels follow */
  273. struct {
  274. u8 channel;
  275. u8 reserved;
  276. } channel_list[0]; /* channels ID's */
  277. /* 0 - 58320 MHz */
  278. /* 1 - 60480 MHz */
  279. /* 2 - 62640 MHz */
  280. } __packed;
  281. /*
  282. * WMI_SET_PROBED_SSID_CMDID
  283. */
  284. #define MAX_PROBED_SSID_INDEX (3)
  285. enum wmi_ssid_flag {
  286. WMI_SSID_FLAG_DISABLE = 0, /* disables entry */
  287. WMI_SSID_FLAG_SPECIFIC = 1, /* probes specified ssid */
  288. WMI_SSID_FLAG_ANY = 2, /* probes for any ssid */
  289. };
  290. struct wmi_probed_ssid_cmd {
  291. u8 entry_index; /* 0 to MAX_PROBED_SSID_INDEX */
  292. u8 flag; /* enum wmi_ssid_flag */
  293. u8 ssid_len;
  294. u8 ssid[WMI_MAX_SSID_LEN];
  295. } __packed;
  296. /*
  297. * WMI_SET_APPIE_CMDID
  298. * Add Application specified IE to a management frame
  299. */
  300. #define WMI_MAX_IE_LEN (1024)
  301. /*
  302. * Frame Types
  303. */
  304. enum wmi_mgmt_frame_type {
  305. WMI_FRAME_BEACON = 0,
  306. WMI_FRAME_PROBE_REQ = 1,
  307. WMI_FRAME_PROBE_RESP = 2,
  308. WMI_FRAME_ASSOC_REQ = 3,
  309. WMI_FRAME_ASSOC_RESP = 4,
  310. WMI_NUM_MGMT_FRAME,
  311. };
  312. struct wmi_set_appie_cmd {
  313. u8 mgmt_frm_type; /* enum wmi_mgmt_frame_type */
  314. u8 reserved;
  315. __le16 ie_len; /* Length of the IE to be added to MGMT frame */
  316. u8 ie_info[0];
  317. } __packed;
  318. /*
  319. * WMI_PXMT_RANGE_CFG_CMDID
  320. */
  321. struct wmi_pxmt_range_cfg_cmd {
  322. u8 dst_mac[WMI_MAC_LEN];
  323. __le16 range;
  324. } __packed;
  325. /*
  326. * WMI_PXMT_SNR2_RANGE_CFG_CMDID
  327. */
  328. struct wmi_pxmt_snr2_range_cfg_cmd {
  329. s8 snr2range_arr[WMI_PROX_RANGE_NUM-1];
  330. } __packed;
  331. /*
  332. * WMI_RF_MGMT_CMDID
  333. */
  334. enum wmi_rf_mgmt_type {
  335. WMI_RF_MGMT_W_DISABLE = 0,
  336. WMI_RF_MGMT_W_ENABLE = 1,
  337. WMI_RF_MGMT_GET_STATUS = 2,
  338. };
  339. struct wmi_rf_mgmt_cmd {
  340. __le32 rf_mgmt_type;
  341. } __packed;
  342. /*
  343. * WMI_RF_RX_TEST_CMDID
  344. */
  345. struct wmi_rf_rx_test_cmd {
  346. __le32 sector;
  347. } __packed;
  348. /*
  349. * WMI_CORR_MEASURE_CMDID
  350. */
  351. struct wmi_corr_measure_cmd {
  352. s32 freq_mhz;
  353. __le32 length_samples;
  354. __le32 iterations;
  355. } __packed;
  356. /*
  357. * WMI_SET_SSID_CMDID
  358. */
  359. struct wmi_set_ssid_cmd {
  360. __le32 ssid_len;
  361. u8 ssid[WMI_MAX_SSID_LEN];
  362. } __packed;
  363. /*
  364. * WMI_SET_PCP_CHANNEL_CMDID
  365. */
  366. struct wmi_set_pcp_channel_cmd {
  367. u8 channel;
  368. u8 reserved[3];
  369. } __packed;
  370. /*
  371. * WMI_BCON_CTRL_CMDID
  372. */
  373. struct wmi_bcon_ctrl_cmd {
  374. __le16 bcon_interval;
  375. __le16 frag_num;
  376. __le64 ss_mask;
  377. u8 network_type;
  378. u8 pcp_max_assoc_sta;
  379. u8 disable_sec_offload;
  380. u8 disable_sec;
  381. } __packed;
  382. /******* P2P ***********/
  383. /*
  384. * WMI_PORT_ALLOCATE_CMDID
  385. */
  386. enum wmi_port_role {
  387. WMI_PORT_STA = 0,
  388. WMI_PORT_PCP = 1,
  389. WMI_PORT_AP = 2,
  390. WMI_PORT_P2P_DEV = 3,
  391. WMI_PORT_P2P_CLIENT = 4,
  392. WMI_PORT_P2P_GO = 5,
  393. };
  394. struct wmi_port_allocate_cmd {
  395. u8 mac[WMI_MAC_LEN];
  396. u8 port_role;
  397. u8 mid;
  398. } __packed;
  399. /*
  400. * WMI_PORT_DELETE_CMDID
  401. */
  402. struct wmi_delete_port_cmd {
  403. u8 mid;
  404. u8 reserved[3];
  405. } __packed;
  406. /*
  407. * WMI_P2P_CFG_CMDID
  408. */
  409. enum wmi_discovery_mode {
  410. WMI_DISCOVERY_MODE_NON_OFFLOAD = 0,
  411. WMI_DISCOVERY_MODE_OFFLOAD = 1,
  412. WMI_DISCOVERY_MODE_PEER2PEER = 2,
  413. };
  414. struct wmi_p2p_cfg_cmd {
  415. u8 discovery_mode; /* wmi_discovery_mode */
  416. u8 channel;
  417. __le16 bcon_interval; /* base to listen/search duration calculation */
  418. } __packed;
  419. /*
  420. * WMI_POWER_MGMT_CFG_CMDID
  421. */
  422. enum wmi_power_source_type {
  423. WMI_POWER_SOURCE_BATTERY = 0,
  424. WMI_POWER_SOURCE_OTHER = 1,
  425. };
  426. struct wmi_power_mgmt_cfg_cmd {
  427. u8 power_source; /* wmi_power_source_type */
  428. u8 reserved[3];
  429. } __packed;
  430. /*
  431. * WMI_PCP_START_CMDID
  432. */
  433. struct wmi_pcp_start_cmd {
  434. __le16 bcon_interval;
  435. u8 pcp_max_assoc_sta;
  436. u8 reserved0[9];
  437. u8 network_type;
  438. u8 channel;
  439. u8 disable_sec_offload;
  440. u8 disable_sec;
  441. } __packed;
  442. /*
  443. * WMI_SW_TX_REQ_CMDID
  444. */
  445. struct wmi_sw_tx_req_cmd {
  446. u8 dst_mac[WMI_MAC_LEN];
  447. __le16 len;
  448. u8 payload[0];
  449. } __packed;
  450. /*
  451. * WMI_VRING_CFG_CMDID
  452. */
  453. struct wmi_sw_ring_cfg {
  454. __le64 ring_mem_base;
  455. __le16 ring_size;
  456. __le16 max_mpdu_size;
  457. } __packed;
  458. struct wmi_vring_cfg_schd {
  459. __le16 priority;
  460. __le16 timeslot_us;
  461. } __packed;
  462. enum wmi_vring_cfg_encap_trans_type {
  463. WMI_VRING_ENC_TYPE_802_3 = 0,
  464. WMI_VRING_ENC_TYPE_NATIVE_WIFI = 1,
  465. };
  466. enum wmi_vring_cfg_ds_cfg {
  467. WMI_VRING_DS_PBSS = 0,
  468. WMI_VRING_DS_STATION = 1,
  469. WMI_VRING_DS_AP = 2,
  470. WMI_VRING_DS_ADDR4 = 3,
  471. };
  472. enum wmi_vring_cfg_nwifi_ds_trans_type {
  473. WMI_NWIFI_TX_TRANS_MODE_NO = 0,
  474. WMI_NWIFI_TX_TRANS_MODE_AP2PBSS = 1,
  475. WMI_NWIFI_TX_TRANS_MODE_STA2PBSS = 2,
  476. };
  477. enum wmi_vring_cfg_schd_params_priority {
  478. WMI_SCH_PRIO_REGULAR = 0,
  479. WMI_SCH_PRIO_HIGH = 1,
  480. };
  481. #define CIDXTID_CID_POS (0)
  482. #define CIDXTID_CID_LEN (4)
  483. #define CIDXTID_CID_MSK (0xF)
  484. #define CIDXTID_TID_POS (4)
  485. #define CIDXTID_TID_LEN (4)
  486. #define CIDXTID_TID_MSK (0xF0)
  487. struct wmi_vring_cfg {
  488. struct wmi_sw_ring_cfg tx_sw_ring;
  489. u8 ringid; /* 0-23 vrings */
  490. u8 cidxtid;
  491. u8 encap_trans_type;
  492. u8 ds_cfg; /* 802.3 DS cfg */
  493. u8 nwifi_ds_trans_type;
  494. #define VRING_CFG_MAC_CTRL_LIFETIME_EN_POS (0)
  495. #define VRING_CFG_MAC_CTRL_LIFETIME_EN_LEN (1)
  496. #define VRING_CFG_MAC_CTRL_LIFETIME_EN_MSK (0x1)
  497. #define VRING_CFG_MAC_CTRL_AGGR_EN_POS (1)
  498. #define VRING_CFG_MAC_CTRL_AGGR_EN_LEN (1)
  499. #define VRING_CFG_MAC_CTRL_AGGR_EN_MSK (0x2)
  500. u8 mac_ctrl;
  501. #define VRING_CFG_TO_RESOLUTION_VALUE_POS (0)
  502. #define VRING_CFG_TO_RESOLUTION_VALUE_LEN (6)
  503. #define VRING_CFG_TO_RESOLUTION_VALUE_MSK (0x3F)
  504. u8 to_resolution;
  505. u8 agg_max_wsize;
  506. struct wmi_vring_cfg_schd schd_params;
  507. } __packed;
  508. enum wmi_vring_cfg_cmd_action {
  509. WMI_VRING_CMD_ADD = 0,
  510. WMI_VRING_CMD_MODIFY = 1,
  511. WMI_VRING_CMD_DELETE = 2,
  512. };
  513. struct wmi_vring_cfg_cmd {
  514. __le32 action;
  515. struct wmi_vring_cfg vring_cfg;
  516. } __packed;
  517. /*
  518. * WMI_VRING_BA_EN_CMDID
  519. */
  520. struct wmi_vring_ba_en_cmd {
  521. u8 ringid;
  522. u8 agg_max_wsize;
  523. __le16 ba_timeout;
  524. } __packed;
  525. /*
  526. * WMI_VRING_BA_DIS_CMDID
  527. */
  528. struct wmi_vring_ba_dis_cmd {
  529. u8 ringid;
  530. u8 reserved;
  531. __le16 reason;
  532. } __packed;
  533. /*
  534. * WMI_NOTIFY_REQ_CMDID
  535. */
  536. struct wmi_notify_req_cmd {
  537. u8 cid;
  538. u8 year;
  539. u8 month;
  540. u8 day;
  541. __le32 interval_usec;
  542. u8 hour;
  543. u8 minute;
  544. u8 second;
  545. u8 miliseconds;
  546. } __packed;
  547. /*
  548. * WMI_CFG_RX_CHAIN_CMDID
  549. */
  550. enum wmi_sniffer_cfg_mode {
  551. WMI_SNIFFER_OFF = 0,
  552. WMI_SNIFFER_ON = 1,
  553. };
  554. enum wmi_sniffer_cfg_phy_info_mode {
  555. WMI_SNIFFER_PHY_INFO_DISABLED = 0,
  556. WMI_SNIFFER_PHY_INFO_ENABLED = 1,
  557. };
  558. enum wmi_sniffer_cfg_phy_support {
  559. WMI_SNIFFER_CP = 0,
  560. WMI_SNIFFER_DP = 1,
  561. WMI_SNIFFER_BOTH_PHYS = 2,
  562. };
  563. struct wmi_sniffer_cfg {
  564. __le32 mode; /* enum wmi_sniffer_cfg_mode */
  565. __le32 phy_info_mode; /* enum wmi_sniffer_cfg_phy_info_mode */
  566. __le32 phy_support; /* enum wmi_sniffer_cfg_phy_support */
  567. u8 channel;
  568. u8 reserved[3];
  569. } __packed;
  570. enum wmi_cfg_rx_chain_cmd_action {
  571. WMI_RX_CHAIN_ADD = 0,
  572. WMI_RX_CHAIN_DEL = 1,
  573. };
  574. enum wmi_cfg_rx_chain_cmd_decap_trans_type {
  575. WMI_DECAP_TYPE_802_3 = 0,
  576. WMI_DECAP_TYPE_NATIVE_WIFI = 1,
  577. };
  578. enum wmi_cfg_rx_chain_cmd_nwifi_ds_trans_type {
  579. WMI_NWIFI_RX_TRANS_MODE_NO = 0,
  580. WMI_NWIFI_RX_TRANS_MODE_PBSS2AP = 1,
  581. WMI_NWIFI_RX_TRANS_MODE_PBSS2STA = 2,
  582. };
  583. enum wmi_cfg_rx_chain_cmd_reorder_type {
  584. WMI_RX_HW_REORDER = 0,
  585. WMI_RX_SW_REORDER = 1,
  586. };
  587. struct wmi_cfg_rx_chain_cmd {
  588. __le32 action;
  589. struct wmi_sw_ring_cfg rx_sw_ring;
  590. u8 mid;
  591. u8 decap_trans_type;
  592. #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_POS (0)
  593. #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_LEN (1)
  594. #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_MSK (0x1)
  595. u8 l2_802_3_offload_ctrl;
  596. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_POS (0)
  597. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_LEN (1)
  598. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_MSK (0x1)
  599. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_POS (1)
  600. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_LEN (1)
  601. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_MSK (0x2)
  602. u8 l2_nwifi_offload_ctrl;
  603. u8 vlan_id;
  604. u8 nwifi_ds_trans_type;
  605. #define L3_L4_CTRL_IPV4_CHECKSUM_EN_POS (0)
  606. #define L3_L4_CTRL_IPV4_CHECKSUM_EN_LEN (1)
  607. #define L3_L4_CTRL_IPV4_CHECKSUM_EN_MSK (0x1)
  608. #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_POS (1)
  609. #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_LEN (1)
  610. #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_MSK (0x2)
  611. u8 l3_l4_ctrl;
  612. #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_POS (0)
  613. #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_LEN (1)
  614. #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_MSK (0x1)
  615. #define RING_CTRL_OVERRIDE_WB_THRSH_POS (1)
  616. #define RING_CTRL_OVERRIDE_WB_THRSH_LEN (1)
  617. #define RING_CTRL_OVERRIDE_WB_THRSH_MSK (0x2)
  618. #define RING_CTRL_OVERRIDE_ITR_THRSH_POS (2)
  619. #define RING_CTRL_OVERRIDE_ITR_THRSH_LEN (1)
  620. #define RING_CTRL_OVERRIDE_ITR_THRSH_MSK (0x4)
  621. #define RING_CTRL_OVERRIDE_HOST_THRSH_POS (3)
  622. #define RING_CTRL_OVERRIDE_HOST_THRSH_LEN (1)
  623. #define RING_CTRL_OVERRIDE_HOST_THRSH_MSK (0x8)
  624. u8 ring_ctrl;
  625. __le16 prefetch_thrsh;
  626. __le16 wb_thrsh;
  627. __le32 itr_value;
  628. __le16 host_thrsh;
  629. u8 reorder_type;
  630. u8 reserved;
  631. struct wmi_sniffer_cfg sniffer_cfg;
  632. } __packed;
  633. /*
  634. * WMI_RCP_ADDBA_RESP_CMDID
  635. */
  636. struct wmi_rcp_addba_resp_cmd {
  637. u8 cidxtid;
  638. u8 dialog_token;
  639. __le16 status_code;
  640. __le16 ba_param_set; /* ieee80211_ba_parameterset field to send */
  641. __le16 ba_timeout;
  642. } __packed;
  643. /*
  644. * WMI_RCP_DELBA_CMDID
  645. */
  646. struct wmi_rcp_delba_cmd {
  647. u8 cidxtid;
  648. u8 reserved;
  649. __le16 reason;
  650. } __packed;
  651. /*
  652. * WMI_RCP_ADDBA_REQ_CMDID
  653. */
  654. struct wmi_rcp_addba_req_cmd {
  655. u8 cidxtid;
  656. u8 dialog_token;
  657. /* ieee80211_ba_parameterset field as it received */
  658. __le16 ba_param_set;
  659. __le16 ba_timeout;
  660. /* ieee80211_ba_seqstrl field as it received */
  661. __le16 ba_seq_ctrl;
  662. } __packed;
  663. /*
  664. * WMI_SET_MAC_ADDRESS_CMDID
  665. */
  666. struct wmi_set_mac_address_cmd {
  667. u8 mac[WMI_MAC_LEN];
  668. u8 reserved[2];
  669. } __packed;
  670. /*
  671. * WMI_EAPOL_TX_CMDID
  672. */
  673. struct wmi_eapol_tx_cmd {
  674. u8 dst_mac[WMI_MAC_LEN];
  675. __le16 eapol_len;
  676. u8 eapol[0];
  677. } __packed;
  678. /*
  679. * WMI_ECHO_CMDID
  680. *
  681. * Check FW is alive
  682. *
  683. * WMI_DEEP_ECHO_CMDID
  684. *
  685. * Check FW and ucode are alive
  686. *
  687. * Returned event: WMI_ECHO_RSP_EVENTID
  688. * same event for both commands
  689. */
  690. struct wmi_echo_cmd {
  691. __le32 value;
  692. } __packed;
  693. /*
  694. * WMI_TEMP_SENSE_CMDID
  695. *
  696. * Measure MAC and radio temperatures
  697. */
  698. struct wmi_temp_sense_cmd {
  699. __le32 measure_marlon_m_en;
  700. __le32 measure_marlon_r_en;
  701. } __packed;
  702. /*
  703. * WMI Events
  704. */
  705. /*
  706. * List of Events (target to host)
  707. */
  708. enum wmi_event_id {
  709. WMI_READY_EVENTID = 0x1001,
  710. WMI_CONNECT_EVENTID = 0x1002,
  711. WMI_DISCONNECT_EVENTID = 0x1003,
  712. WMI_SCAN_COMPLETE_EVENTID = 0x100a,
  713. WMI_REPORT_STATISTICS_EVENTID = 0x100b,
  714. WMI_RD_MEM_RSP_EVENTID = 0x1800,
  715. WMI_FW_READY_EVENTID = 0x1801,
  716. WMI_EXIT_FAST_MEM_ACC_MODE_EVENTID = 0x0200,
  717. WMI_ECHO_RSP_EVENTID = 0x1803,
  718. WMI_FS_TUNE_DONE_EVENTID = 0x180a,
  719. WMI_CORR_MEASURE_EVENTID = 0x180b,
  720. WMI_READ_RSSI_EVENTID = 0x180c,
  721. WMI_TEMP_SENSE_DONE_EVENTID = 0x180e,
  722. WMI_DC_CALIB_DONE_EVENTID = 0x180f,
  723. WMI_IQ_TX_CALIB_DONE_EVENTID = 0x1811,
  724. WMI_IQ_RX_CALIB_DONE_EVENTID = 0x1812,
  725. WMI_SET_WORK_MODE_DONE_EVENTID = 0x1815,
  726. WMI_LO_LEAKAGE_CALIB_DONE_EVENTID = 0x1816,
  727. WMI_MARLON_R_ACTIVATE_DONE_EVENTID = 0x1817,
  728. WMI_MARLON_R_READ_DONE_EVENTID = 0x1818,
  729. WMI_MARLON_R_WRITE_DONE_EVENTID = 0x1819,
  730. WMI_MARLON_R_TXRX_SEL_DONE_EVENTID = 0x181a,
  731. WMI_SILENT_RSSI_CALIB_DONE_EVENTID = 0x181d,
  732. WMI_RF_RX_TEST_DONE_EVENTID = 0x181e,
  733. WMI_CFG_RX_CHAIN_DONE_EVENTID = 0x1820,
  734. WMI_VRING_CFG_DONE_EVENTID = 0x1821,
  735. WMI_BA_STATUS_EVENTID = 0x1823,
  736. WMI_RCP_ADDBA_REQ_EVENTID = 0x1824,
  737. WMI_ADDBA_RESP_SENT_EVENTID = 0x1825,
  738. WMI_DELBA_EVENTID = 0x1826,
  739. WMI_GET_SSID_EVENTID = 0x1828,
  740. WMI_GET_PCP_CHANNEL_EVENTID = 0x182a,
  741. WMI_SW_TX_COMPLETE_EVENTID = 0x182b,
  742. WMI_READ_MAC_RXQ_EVENTID = 0x1830,
  743. WMI_READ_MAC_TXQ_EVENTID = 0x1831,
  744. WMI_WRITE_MAC_RXQ_EVENTID = 0x1832,
  745. WMI_WRITE_MAC_TXQ_EVENTID = 0x1833,
  746. WMI_WRITE_MAC_XQ_FIELD_EVENTID = 0x1834,
  747. WMI_BEAFORMING_MGMT_DONE_EVENTID = 0x1836,
  748. WMI_BF_TXSS_MGMT_DONE_EVENTID = 0x1837,
  749. WMI_BF_RXSS_MGMT_DONE_EVENTID = 0x1839,
  750. WMI_RS_MGMT_DONE_EVENTID = 0x1852,
  751. WMI_RF_MGMT_STATUS_EVENTID = 0x1853,
  752. WMI_BF_SM_MGMT_DONE_EVENTID = 0x1838,
  753. WMI_RX_MGMT_PACKET_EVENTID = 0x1840,
  754. WMI_TX_MGMT_PACKET_EVENTID = 0x1841,
  755. /* Performance monitoring events */
  756. WMI_DATA_PORT_OPEN_EVENTID = 0x1860,
  757. WMI_WBE_LINKDOWN_EVENTID = 0x1861,
  758. WMI_BF_CTRL_DONE_EVENTID = 0x1862,
  759. WMI_NOTIFY_REQ_DONE_EVENTID = 0x1863,
  760. WMI_GET_STATUS_DONE_EVENTID = 0x1864,
  761. WMI_UNIT_TEST_EVENTID = 0x1900,
  762. WMI_FLASH_READ_DONE_EVENTID = 0x1902,
  763. WMI_FLASH_WRITE_DONE_EVENTID = 0x1903,
  764. /*P2P*/
  765. WMI_PORT_ALLOCATED_EVENTID = 0x1911,
  766. WMI_PORT_DELETED_EVENTID = 0x1912,
  767. WMI_LISTEN_STARTED_EVENTID = 0x1914,
  768. WMI_SEARCH_STARTED_EVENTID = 0x1915,
  769. WMI_DISCOVERY_STARTED_EVENTID = 0x1916,
  770. WMI_DISCOVERY_STOPPED_EVENTID = 0x1917,
  771. WMI_PCP_STARTED_EVENTID = 0x1918,
  772. WMI_PCP_STOPPED_EVENTID = 0x1919,
  773. WMI_PCP_FACTOR_EVENTID = 0x191a,
  774. WMI_SET_CHANNEL_EVENTID = 0x9000,
  775. WMI_ASSOC_REQ_EVENTID = 0x9001,
  776. WMI_EAPOL_RX_EVENTID = 0x9002,
  777. WMI_MAC_ADDR_RESP_EVENTID = 0x9003,
  778. WMI_FW_VER_EVENTID = 0x9004,
  779. };
  780. /*
  781. * Events data structures
  782. */
  783. enum wmi_fw_status {
  784. WMI_FW_STATUS_SUCCESS,
  785. WMI_FW_STATUS_FAILURE,
  786. };
  787. /*
  788. * WMI_RF_MGMT_STATUS_EVENTID
  789. */
  790. enum wmi_rf_status {
  791. WMI_RF_ENABLED = 0,
  792. WMI_RF_DISABLED_HW = 1,
  793. WMI_RF_DISABLED_SW = 2,
  794. WMI_RF_DISABLED_HW_SW = 3,
  795. };
  796. struct wmi_rf_mgmt_status_event {
  797. __le32 rf_status;
  798. } __packed;
  799. /*
  800. * WMI_GET_STATUS_DONE_EVENTID
  801. */
  802. struct wmi_get_status_done_event {
  803. __le32 is_associated;
  804. u8 cid;
  805. u8 reserved0[3];
  806. u8 bssid[WMI_MAC_LEN];
  807. u8 channel;
  808. u8 reserved1;
  809. u8 network_type;
  810. u8 reserved2[3];
  811. __le32 ssid_len;
  812. u8 ssid[WMI_MAX_SSID_LEN];
  813. __le32 rf_status;
  814. __le32 is_secured;
  815. } __packed;
  816. /*
  817. * WMI_FW_VER_EVENTID
  818. */
  819. struct wmi_fw_ver_event {
  820. u8 major;
  821. u8 minor;
  822. __le16 subminor;
  823. __le16 build;
  824. } __packed;
  825. /*
  826. * WMI_MAC_ADDR_RESP_EVENTID
  827. */
  828. struct wmi_mac_addr_resp_event {
  829. u8 mac[WMI_MAC_LEN];
  830. u8 auth_mode;
  831. u8 crypt_mode;
  832. __le32 offload_mode;
  833. } __packed;
  834. /*
  835. * WMI_EAPOL_RX_EVENTID
  836. */
  837. struct wmi_eapol_rx_event {
  838. u8 src_mac[WMI_MAC_LEN];
  839. __le16 eapol_len;
  840. u8 eapol[0];
  841. } __packed;
  842. /*
  843. * WMI_READY_EVENTID
  844. */
  845. enum wmi_phy_capability {
  846. WMI_11A_CAPABILITY = 1,
  847. WMI_11G_CAPABILITY = 2,
  848. WMI_11AG_CAPABILITY = 3,
  849. WMI_11NA_CAPABILITY = 4,
  850. WMI_11NG_CAPABILITY = 5,
  851. WMI_11NAG_CAPABILITY = 6,
  852. WMI_11AD_CAPABILITY = 7,
  853. WMI_11N_CAPABILITY_OFFSET = WMI_11NA_CAPABILITY - WMI_11A_CAPABILITY,
  854. };
  855. struct wmi_ready_event {
  856. __le32 sw_version;
  857. __le32 abi_version;
  858. u8 mac[WMI_MAC_LEN];
  859. u8 phy_capability; /* enum wmi_phy_capability */
  860. u8 numof_additional_mids;
  861. } __packed;
  862. /*
  863. * WMI_NOTIFY_REQ_DONE_EVENTID
  864. */
  865. struct wmi_notify_req_done_event {
  866. __le32 status;
  867. __le64 tsf;
  868. __le32 snr_val;
  869. __le32 tx_tpt;
  870. __le32 tx_goodput;
  871. __le32 rx_goodput;
  872. __le16 bf_mcs;
  873. __le16 my_rx_sector;
  874. __le16 my_tx_sector;
  875. __le16 other_rx_sector;
  876. __le16 other_tx_sector;
  877. __le16 range;
  878. u8 sqi;
  879. u8 reserved[3];
  880. } __packed;
  881. /*
  882. * WMI_CONNECT_EVENTID
  883. */
  884. struct wmi_connect_event {
  885. u8 channel;
  886. u8 reserved0;
  887. u8 bssid[WMI_MAC_LEN];
  888. __le16 listen_interval;
  889. __le16 beacon_interval;
  890. u8 network_type;
  891. u8 reserved1[3];
  892. u8 beacon_ie_len;
  893. u8 assoc_req_len;
  894. u8 assoc_resp_len;
  895. u8 cid;
  896. u8 reserved2[3];
  897. u8 assoc_info[0];
  898. } __packed;
  899. /*
  900. * WMI_DISCONNECT_EVENTID
  901. */
  902. enum wmi_disconnect_reason {
  903. WMI_DIS_REASON_NO_NETWORK_AVAIL = 1,
  904. WMI_DIS_REASON_LOST_LINK = 2, /* bmiss */
  905. WMI_DIS_REASON_DISCONNECT_CMD = 3,
  906. WMI_DIS_REASON_BSS_DISCONNECTED = 4,
  907. WMI_DIS_REASON_AUTH_FAILED = 5,
  908. WMI_DIS_REASON_ASSOC_FAILED = 6,
  909. WMI_DIS_REASON_NO_RESOURCES_AVAIL = 7,
  910. WMI_DIS_REASON_CSERV_DISCONNECT = 8,
  911. WMI_DIS_REASON_INVALID_PROFILE = 10,
  912. WMI_DIS_REASON_DOT11H_CHANNEL_SWITCH = 11,
  913. WMI_DIS_REASON_PROFILE_MISMATCH = 12,
  914. WMI_DIS_REASON_CONNECTION_EVICTED = 13,
  915. WMI_DIS_REASON_IBSS_MERGE = 14,
  916. };
  917. struct wmi_disconnect_event {
  918. __le16 protocol_reason_status; /* reason code, see 802.11 spec. */
  919. u8 bssid[WMI_MAC_LEN]; /* set if known */
  920. u8 disconnect_reason; /* see wmi_disconnect_reason */
  921. u8 assoc_resp_len; /* not in use */
  922. u8 assoc_info[0]; /* not in use */
  923. } __packed;
  924. /*
  925. * WMI_SCAN_COMPLETE_EVENTID
  926. */
  927. enum scan_status {
  928. WMI_SCAN_SUCCESS = 0,
  929. WMI_SCAN_FAILED = 1,
  930. WMI_SCAN_ABORTED = 2,
  931. WMI_SCAN_REJECTED = 3,
  932. };
  933. struct wmi_scan_complete_event {
  934. __le32 status; /* scan_status */
  935. } __packed;
  936. /*
  937. * WMI_BA_STATUS_EVENTID
  938. */
  939. enum wmi_vring_ba_status {
  940. WMI_BA_AGREED = 0,
  941. WMI_BA_NON_AGREED = 1,
  942. };
  943. struct wmi_vring_ba_status_event {
  944. __le16 status;
  945. u8 reserved[2];
  946. u8 ringid;
  947. u8 agg_wsize;
  948. __le16 ba_timeout;
  949. } __packed;
  950. /*
  951. * WMI_DELBA_EVENTID
  952. */
  953. struct wmi_delba_event {
  954. u8 cidxtid;
  955. u8 from_initiator;
  956. __le16 reason;
  957. } __packed;
  958. /*
  959. * WMI_VRING_CFG_DONE_EVENTID
  960. */
  961. struct wmi_vring_cfg_done_event {
  962. u8 ringid;
  963. u8 status;
  964. u8 reserved[2];
  965. __le32 tx_vring_tail_ptr;
  966. } __packed;
  967. /*
  968. * WMI_ADDBA_RESP_SENT_EVENTID
  969. */
  970. struct wmi_rcp_addba_resp_sent_event {
  971. u8 cidxtid;
  972. u8 reserved;
  973. __le16 status;
  974. } __packed;
  975. /*
  976. * WMI_RCP_ADDBA_REQ_EVENTID
  977. */
  978. struct wmi_rcp_addba_req_event {
  979. u8 cidxtid;
  980. u8 dialog_token;
  981. __le16 ba_param_set; /* ieee80211_ba_parameterset as it received */
  982. __le16 ba_timeout;
  983. __le16 ba_seq_ctrl; /* ieee80211_ba_seqstrl field as it received */
  984. } __packed;
  985. /*
  986. * WMI_CFG_RX_CHAIN_DONE_EVENTID
  987. */
  988. enum wmi_cfg_rx_chain_done_event_status {
  989. WMI_CFG_RX_CHAIN_SUCCESS = 1,
  990. };
  991. struct wmi_cfg_rx_chain_done_event {
  992. __le32 rx_ring_tail_ptr; /* Rx V-Ring Tail pointer */
  993. __le32 status;
  994. } __packed;
  995. /*
  996. * WMI_WBE_LINKDOWN_EVENTID
  997. */
  998. enum wmi_wbe_link_down_event_reason {
  999. WMI_WBE_REASON_USER_REQUEST = 0,
  1000. WMI_WBE_REASON_RX_DISASSOC = 1,
  1001. WMI_WBE_REASON_BAD_PHY_LINK = 2,
  1002. };
  1003. struct wmi_wbe_link_down_event {
  1004. u8 cid;
  1005. u8 reserved[3];
  1006. __le32 reason;
  1007. } __packed;
  1008. /*
  1009. * WMI_DATA_PORT_OPEN_EVENTID
  1010. */
  1011. struct wmi_data_port_open_event {
  1012. u8 cid;
  1013. u8 reserved[3];
  1014. } __packed;
  1015. /*
  1016. * WMI_GET_PCP_CHANNEL_EVENTID
  1017. */
  1018. struct wmi_get_pcp_channel_event {
  1019. u8 channel;
  1020. u8 reserved[3];
  1021. } __packed;
  1022. /*
  1023. * WMI_PORT_ALLOCATED_EVENTID
  1024. */
  1025. struct wmi_port_allocated_event {
  1026. u8 status; /* wmi_fw_status */
  1027. u8 reserved[3];
  1028. } __packed;
  1029. /*
  1030. * WMI_PORT_DELETED_EVENTID
  1031. */
  1032. struct wmi_port_deleted_event {
  1033. u8 status; /* wmi_fw_status */
  1034. u8 reserved[3];
  1035. } __packed;
  1036. /*
  1037. * WMI_LISTEN_STARTED_EVENTID
  1038. */
  1039. struct wmi_listen_started_event {
  1040. u8 status; /* wmi_fw_status */
  1041. u8 reserved[3];
  1042. } __packed;
  1043. /*
  1044. * WMI_SEARCH_STARTED_EVENTID
  1045. */
  1046. struct wmi_search_started_event {
  1047. u8 status; /* wmi_fw_status */
  1048. u8 reserved[3];
  1049. } __packed;
  1050. /*
  1051. * WMI_PCP_STARTED_EVENTID
  1052. */
  1053. struct wmi_pcp_started_event {
  1054. u8 status; /* wmi_fw_status */
  1055. u8 reserved[3];
  1056. } __packed;
  1057. /*
  1058. * WMI_PCP_FACTOR_EVENTID
  1059. */
  1060. struct wmi_pcp_factor_event {
  1061. __le32 pcp_factor;
  1062. } __packed;
  1063. /*
  1064. * WMI_SW_TX_COMPLETE_EVENTID
  1065. */
  1066. enum wmi_sw_tx_status {
  1067. WMI_TX_SW_STATUS_SUCCESS = 0,
  1068. WMI_TX_SW_STATUS_FAILED_NO_RESOURCES = 1,
  1069. WMI_TX_SW_STATUS_FAILED_TX = 2,
  1070. };
  1071. struct wmi_sw_tx_complete_event {
  1072. u8 status; /* enum wmi_sw_tx_status */
  1073. u8 reserved[3];
  1074. } __packed;
  1075. /*
  1076. * WMI_CORR_MEASURE_EVENTID
  1077. */
  1078. struct wmi_corr_measure_event {
  1079. s32 i;
  1080. s32 q;
  1081. s32 image_i;
  1082. s32 image_q;
  1083. } __packed;
  1084. /*
  1085. * WMI_READ_RSSI_EVENTID
  1086. */
  1087. struct wmi_read_rssi_event {
  1088. __le32 ina_rssi_adc_dbm;
  1089. } __packed;
  1090. /*
  1091. * WMI_GET_SSID_EVENTID
  1092. */
  1093. struct wmi_get_ssid_event {
  1094. __le32 ssid_len;
  1095. u8 ssid[WMI_MAX_SSID_LEN];
  1096. } __packed;
  1097. /*
  1098. * WMI_RX_MGMT_PACKET_EVENTID
  1099. */
  1100. struct wmi_rx_mgmt_info {
  1101. u8 mcs;
  1102. s8 snr;
  1103. u8 range;
  1104. u8 sqi;
  1105. __le16 stype;
  1106. __le16 status;
  1107. __le32 len;
  1108. u8 qid;
  1109. u8 mid;
  1110. u8 cid;
  1111. u8 channel; /* From Radio MNGR */
  1112. } __packed;
  1113. /*
  1114. * WMI_TX_MGMT_PACKET_EVENTID
  1115. */
  1116. struct wmi_tx_mgmt_packet_event {
  1117. u8 payload[0];
  1118. } __packed;
  1119. struct wmi_rx_mgmt_packet_event {
  1120. struct wmi_rx_mgmt_info info;
  1121. u8 payload[0];
  1122. } __packed;
  1123. /*
  1124. * WMI_ECHO_RSP_EVENTID
  1125. */
  1126. struct wmi_echo_event {
  1127. __le32 echoed_value;
  1128. } __packed;
  1129. /*
  1130. * WMI_TEMP_SENSE_DONE_EVENTID
  1131. *
  1132. * Measure MAC and radio temperatures
  1133. */
  1134. struct wmi_temp_sense_done_event {
  1135. __le32 marlon_m_t1000;
  1136. __le32 marlon_r_t1000;
  1137. } __packed;
  1138. #endif /* __WILOCITY_WMI_H__ */