VSF Documented
vsf_wifi_aic8800d_priv.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * *
7 * You may obtain a copy of the License at *
8 * *
9 * http://www.apache.org/licenses/LICENSE-2.0 *
10 * *
11 * Unless required by applicable law or agreed to in writing, software *
12 * distributed under the License is distributed on an "AS IS" BASIS, *
13 * either express or implied. See the License for the specific language *
14 * governing permissions and limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_WIFI_AIC8800D_PRIV_H__
19#define __VSF_WIFI_AIC8800D_PRIV_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "./vsf_wifi_aic8800d.h"
24#include "../../vsf_wifi_priv.h"
25
26#if VSF_USE_WIFI == ENABLED && VSF_WIFI_USE_AIC8800D == ENABLED
27
28#include <stdint.h>
29#include <stdbool.h>
30#include <stddef.h>
31#include <stdio.h>
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
37/*============================ MACROS ========================================*/
38
39#define AIC8800D_CMD_TIMEOUT_MS 5000
40#define AIC8800D_CMD_BUF_SIZE 1536
41#define AIC8800D_MAX_CMD_PARAM 1024
42#define AIC8800D_MAX_PENDING_CMDS 4
43
44/* Default RF config for AIC8800D80 U02 (pll trx, matches Linux rf_tbl_masked) */
45#define AIC8800D_RF_CFG_COUNT 1
46static const uint32_t __aic8800d_rf_cfg[AIC8800D_RF_CFG_COUNT][3] = {
47 {0x40344058, 0x00800000, 0x00000000}, /* pll trx */
48};
49
50/* System config tables for AIC8800D80 (matches Linux syscfg_tbl / syscfg_tbl_masked) */
51#define AIC8800D_SYSCFG_COUNT 3
52static const uint32_t __aic8800d_syscfg[AIC8800D_SYSCFG_COUNT][2] = {
53 {0x40500014, 0x00000101},
54 {0x40500018, 0x0000010D},
55 {0x40500004, 0x00000010},
56};
57
58#define AIC8800D_SYSCFG_MASKED_COUNT 1
59static const uint32_t __aic8800d_syscfg_masked[AIC8800D_SYSCFG_MASKED_COUNT][3] = {
60 {0x40506024, 0x000000FF, 0x000000DF},
61};
62
63/* Firmware binary is embedded as a C array in vsf_wifi_aic8800d_firmware_data.c.
64 * The source binary is fmacfw_8800d80_u02.bin from the Linux reference driver.
65 * Regenerate the C array when switching to a different firmware file. */
66#define AIC8800D_FW_LOAD_ADDR 0x00120000
67#define AIC8800D_FW_CHUNK_SIZE 1024
68#define AIC8800D_FW_START_APP_TYPE 1 /* HOST_START_APP_AUTO */
69#define AIC8800D_START_APP_REBOOT 3 /* HOST_START_APP_REBOOT: reset to boot ROM */
70
71/* USB packet types */
72#define AIC8800D_USB_TYPE_DATA 0x00
73#define AIC8800D_USB_TYPE_CFG 0x10
74#define AIC8800D_USB_TYPE_CFG_CMD_RSP 0x11
75#define AIC8800D_USB_TYPE_CFG_DATA_CFM 0x12
76#define AIC8800D_USB_TYPE_CFG_PRINT 0x13
77
78/* LMAC tasks */
79#define AIC8800D_TASK_MM 0
80#define AIC8800D_TASK_DBG 1
81#define AIC8800D_TASK_SCAN 2
82#define AIC8800D_TASK_SCANU 4
83#define AIC8800D_TASK_ME 5
84#define AIC8800D_TASK_SM 6
85#define AIC8800D_DRV_TASK_ID 100
86
87#define AIC8800D_LMAC_FIRST_MSG(task) ((uint16_t)((task) << 10))
88#define AIC8800D_MSG_I(msg) ((msg) & ((1u << 10) - 1))
89#define AIC8800D_MSG_T(msg) ((uint8_t)((msg) >> 10))
90
91/* LMAC message IDs - must match AIC8800 reference lmac_msg.h offsets */
92#define AIC8800D_MM_RESET_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 0)
93#define AIC8800D_MM_RESET_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 1)
94#define AIC8800D_MM_START_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 2)
95#define AIC8800D_MM_START_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 3)
96#define AIC8800D_MM_VERSION_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 4)
97#define AIC8800D_MM_VERSION_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 5)
98#define AIC8800D_MM_ADD_IF_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 6)
99#define AIC8800D_MM_ADD_IF_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 7)
100#define AIC8800D_MM_REMOVE_IF_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 8)
101#define AIC8800D_MM_REMOVE_IF_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 9)
102/* MM_STA_ADD/DEL skipped (10-13) */
103#define AIC8800D_MM_SET_FILTER_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 14)
104#define AIC8800D_MM_SET_FILTER_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 15)
105#define AIC8800D_MM_SET_CHANNEL_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 16)
106#define AIC8800D_MM_SET_CHANNEL_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 17)
107#define AIC8800D_MM_KEY_ADD_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 36)
108#define AIC8800D_MM_KEY_ADD_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 37)
109/* ... many MM messages omitted ... */
110#define AIC8800D_MM_GET_MAC_ADDR_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 115)
111#define AIC8800D_MM_GET_MAC_ADDR_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 116)
112#define AIC8800D_MM_GET_FW_VERSION_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 128)
113#define AIC8800D_MM_GET_FW_VERSION_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 129)
114
115#define AIC8800D_MM_SET_STACK_START_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 123)
116#define AIC8800D_MM_SET_STACK_START_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 124)
117
118#define AIC8800D_MM_SET_RF_CALIB_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 105)
119#define AIC8800D_MM_SET_RF_CALIB_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 106)
120#define AIC8800D_MM_SET_COEX_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 101)
121#define AIC8800D_MM_SET_COEX_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 102)
122#define AIC8800D_MM_SET_TXPWR_IDX_LVL_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 119)
123#define AIC8800D_MM_SET_TXPWR_IDX_LVL_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 120)
124#define AIC8800D_MM_SET_TXPWR_OFST_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 121)
125#define AIC8800D_MM_SET_TXPWR_OFST_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 122)
126#define AIC8800D_MM_SET_TXPWR_LVL_ADJ_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 131)
127#define AIC8800D_MM_SET_TXPWR_LVL_ADJ_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_MM) + 132)
128
129#define AIC8800D_ME_CONFIG_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_ME) + 0)
130#define AIC8800D_ME_CONFIG_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_ME) + 1)
131#define AIC8800D_ME_CHAN_CONFIG_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_ME) + 2)
132#define AIC8800D_ME_CHAN_CONFIG_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_ME) + 3)
133#define AIC8800D_ME_SET_CONTROL_PORT_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_ME) + 4)
134#define AIC8800D_ME_SET_CONTROL_PORT_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_ME) + 5)
135#define AIC8800D_ME_TRAFFIC_IND_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_ME) + 12)
136#define AIC8800D_ME_TRAFFIC_IND_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_ME) + 13)
137
138#define AIC8800D_SCANU_START_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SCANU) + 0)
139#define AIC8800D_SCANU_START_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SCANU) + 1)
140#define AIC8800D_SCANU_RESULT_IND (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SCANU) + 4)
141#define AIC8800D_SCANU_START_CFM_ADDTIONAL (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SCANU) + 9)
142#define AIC8800D_SCANU_CANCEL_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SCANU) + 10)
143#define AIC8800D_SCANU_CANCEL_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SCANU) + 11)
144
145#define AIC8800D_SM_CONNECT_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 0)
146#define AIC8800D_SM_CONNECT_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 1)
147#define AIC8800D_SM_CONNECT_IND (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 2)
148#define AIC8800D_SM_DISCONNECT_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 3)
149#define AIC8800D_SM_DISCONNECT_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 4)
150#define AIC8800D_SM_DISCONNECT_IND (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 5)
151#define AIC8800D_SM_EXTERNAL_AUTH_REQUIRED_IND (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 6)
152#define AIC8800D_SM_EXTERNAL_AUTH_REQUIRED_RSP (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 7)
153#define AIC8800D_SM_FT_AUTH_IND (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 8)
154#define AIC8800D_SM_FT_AUTH_RSP (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_SM) + 9)
155
156#define AIC8800D_DBG_MEM_READ_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 0)
157#define AIC8800D_DBG_MEM_READ_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 1)
158#define AIC8800D_DBG_MEM_WRITE_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 2)
159#define AIC8800D_DBG_MEM_WRITE_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 3)
160/* DBG_SET_MOD/SEV_FILTER, DBG_ERROR_IND, DBG_GET_SYS_STAT skipped (4-10) */
161#define AIC8800D_DBG_MEM_BLOCK_WRITE_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 11)
162#define AIC8800D_DBG_MEM_BLOCK_WRITE_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 12)
163#define AIC8800D_DBG_START_APP_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 13)
164#define AIC8800D_DBG_START_APP_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 14)
165#define AIC8800D_DBG_MEM_MASK_WRITE_REQ (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 17)
166#define AIC8800D_DBG_MEM_MASK_WRITE_CFM (AIC8800D_LMAC_FIRST_MSG(AIC8800D_TASK_DBG) + 18)
167
168#define AIC8800D_CO_OK 0
169#define AIC8800D_CO_FAIL 1
170
171/*============================ TYPES =========================================*/
172
177typedef bool aic_bool;
178
182
187
195
203
212
213/* Request parameter structures */
220
224
229
233
235 aic_u32 get; /* matches Linux mm_get_mac_addr_req */
236};
237
241
243 aic_u8 type; /* MM_STA / MM_AP / ... */
244 aic_u8 __pad0; /* mac_addr is 2-byte aligned -> addr at offset 2 */
247 aic_u8 __pad1; /* total 10 bytes, matches Linux mm_add_if_req */
248};
249
253
254/* TX power level configurations (v1/v2/v3/v4 unions) */
267
274
284
297
306
312
316
327
333
340
351
358
368
369/* Confirmation parameter structures */
375
380
392
396
400
404
405/* MM_SET_COEX_REQ (16 bytes, matches Linux struct mm_set_coex_req) */
415
421
425
430
431/* ME */
432#define AIC8800D_MAC_DOMAINCHANNEL_24G_MAX 14
433#define AIC8800D_MAC_DOMAINCHANNEL_5G_MAX 28
434
435#define AIC8800D_MAC_MCS_MAX_LEN 16
436#define AIC8800D_MAC_HE_MAC_CAPA_LEN 6
437#define AIC8800D_MAC_HE_PHY_CAPA_LEN 11
438#define AIC8800D_MAC_HE_PPE_THRES_MAX_LEN 25
439
448
456
465
472
487
494
495/* SCANU */
496#define AIC8800D_SCAN_CHANNEL_MAX 42
497#define AIC8800D_SCAN_SSID_MAX 3
498
502 /* Field offsets MUST match the golden Linux SCANU_START_REQ byte-for-byte
503 * (verified from aic_connect_linux_success.pcap frame 17, param_len=376):
504 * bssid@352 (2-aligned, implicit pad after the 33B ssid entries),
505 * add_ies@358, add_ie_len@362, vif_idx@364, chan_cnt@367, ssid_cnt@368,
506 * no_cck@369, duration@372.
507 * If these offsets drift (e.g. C alignment pads add_ies to 4 bytes), the
508 * firmware reads chan_cnt/ssid_cnt as 0 and silently scans a default
509 * profile, returning only a small subset of the APs in range. */
511 aic_u16 add_ies[2]; /* @358 host ptr, unused -> 0 */
512 aic_u16 add_ie_len; /* @362 */
513 aic_u8 vif_idx; /* @364 */
514 aic_u8 __pad0[2]; /* @365..366 */
515 aic_u8 chan_cnt; /* @367 */
516 aic_u8 ssid_cnt; /* @368 */
517 aic_u8 no_cck; /* @369 */
518 aic_u8 __pad1; /* @370 */
519 aic_u32 duration; /* @372 (implicit pad @371) */
520};
521
522/* The firmware parses this message by fixed offsets; lock the layout down so
523 * a careless struct edit cannot silently re-break scanning. */
524VSF_STATIC_ASSERT(sizeof(struct aic8800d_scanu_start_req) == 376, scan_req_size);
525VSF_STATIC_ASSERT(offsetof(struct aic8800d_scanu_start_req, bssid) == 352, scan_req_bssid_off);
526VSF_STATIC_ASSERT(offsetof(struct aic8800d_scanu_start_req, vif_idx) == 364, scan_req_vif_off);
527VSF_STATIC_ASSERT(offsetof(struct aic8800d_scanu_start_req, chan_cnt) == 367, scan_req_chancnt_off);
528VSF_STATIC_ASSERT(offsetof(struct aic8800d_scanu_start_req, ssid_cnt) == 368, scan_req_ssidcnt_off);
529VSF_STATIC_ASSERT(offsetof(struct aic8800d_scanu_start_req, duration) == 372, scan_req_duration_off);
530
536
539
543
554
555/* SM */
556#define AIC8800D_SM_ASSOC_IE_LEN 256
557
558/* mac_connection_flags from Linux lmac_mac.h */
559#define AIC8800D_CONNECTION_FLAG_CONTROL_PORT_HOST (1u << 0)
560#define AIC8800D_CONNECTION_FLAG_CONTROL_PORT_NO_ENC (1u << 1)
561#define AIC8800D_CONNECTION_FLAG_DISABLE_HT (1u << 2)
562#define AIC8800D_CONNECTION_FLAG_WPA_WPA2_IN_USE (1u << 3)
563#define AIC8800D_CONNECTION_FLAG_MFP_IN_USE (1u << 4)
564#define AIC8800D_CONNECTION_FLAG_REASSOCIATION (1u << 5)
565
566/* TX/RX data descriptor sizes */
567#define AIC8800D_TXDESC_API_SIZE 28 /* sizeof(struct hostdesc) */
568#define AIC8800D_RX_HWHDR_LEN 60 /* RX_HWHRD_LEN in Linux driver */
569#define AIC8800D_USB_TX_HEADER_LEN 4 /* USB data TX header: [len u16][type u8][rsvd u8] */
570#define AIC8800D_USB_RX_ALIGNMENT 4
571
588
592
593/* SM_CONNECT_IND carries assoc IEs in a SM_ASSOC_IE_LEN(800)-byte buffer,
594 * larger than the 256-byte ie_buf of SM_CONNECT_REQ (Linux lmac_msg.h). */
595#define AIC8800D_SM_ASSOC_IND_IE_LEN 800
596
617
622
627
628/* MM_KEY_ADD_REQ (44 bytes, matches Linux struct mm_key_add_req with
629 * mac_sec_key { u8 length; pad[3]; u32 array[8]; }) */
630#define AIC8800D_SEC_KEY_LEN 32
631#define AIC8800D_CIPHER_CCMP 2
644
649
654
668
672
673/* USB bulk TX aggregation header (8 bytes) */
684
686 /* hw_rxhdr is 60 bytes; we only need the fields used for routing.
687 * The full layout includes hwvect (36 bytes), phy_info (8 bytes),
688 * flags (4 bytes), pattern (4 bytes). Keep opaque for now. */
690};
691
692/* DBG */
693#define AIC8800D_PATCH_MAGIC_NUM 0x48435450 /* "PTCH" */
694#define AIC8800D_PATCH_MAGIC_NUM_2 0x50544348 /* "HCTP" */
695#define AIC8800D_PATCH_BLOCK_MAX 4
696
706
707/* Default patch table for AIC8800D80 U02 (2.4G/5G selection, aggregation) */
708#define AIC8800D_PATCH_TBL_COUNT 2
709static const uint32_t __aic8800d_patch_tbl[AIC8800D_PATCH_TBL_COUNT][2] = {
710 {0x00b4, 0xf3010001}, /* 5G + ... */
711 {0x0170, 0x0001000A}, /* rx aggr counter */
712};
713
714/* Boot-time upload addresses (from fw_patch_table INF record:
715 * addr_adid=0x00201940, addr_patch=0x001E0000, ext patch 0 -> 0x0020B43C;
716 * the hardcoded defaults in Linux aic_compat_8800d80.h are overridden by
717 * aicbt_patch_info_unpack()) */
718#define AIC8800D_ADID_ADDR 0x00201940
719#define AIC8800D_PATCH_ADDR 0x001E0000
720#define AIC8800D_PATCH_EXT_ADDR 0x0020B43C
721
722/* Firmware binary (auto-generated from fmacfw_8800d80_u02.bin) */
723extern const uint8_t __aic8800d_firmware_data[];
725/* ADID (chip trim/calibration data), auto-generated from fw_adid_8800d80_u02.bin */
726extern const uint8_t __aic8800d_adid_data[];
727extern const uint32_t __aic8800d_adid_size;
728/* Boot patch code, auto-generated from fw_patch_8800d80_u02.bin */
729extern const uint8_t __aic8800d_patch_data[];
731/* Boot patch ext data, auto-generated from fw_patch_8800d80_u02_ext0.bin */
734/* Boot patch table, auto-generated from fw_patch_table_8800d80_u02.bin */
737
741
746
751
756
762
767
773
774/* Firmware bundle selection. The AIC8800D series has several chip variants
775 * (D80/D81/D40/DC/X2, and chip revisions U01/U02/U03/U04) each requiring a
776 * matching firmware image + patch table; using the wrong image either fails
777 * the download or misbehaves at runtime (e.g. no data forwarding). The
778 * driver picks the bundle from the chip identification (chip_rev /
779 * chip_sub_rev / USB VID:PID) read during system_config. */
780#define AIC8800D_FW_IMG_ADID 0
781#define AIC8800D_FW_IMG_PATCH 1
782#define AIC8800D_FW_IMG_EXT 2
783#define AIC8800D_FW_IMG_MAIN 3
784#define AIC8800D_FW_IMG_NUM 4
785
786typedef struct aic8800d_fw_variant_t {
787 const char *name;
788 struct {
789 uint32_t addr; /* upload address, 0 = image not used */
790 const uint8_t *data;
791 uint32_t size; /* 0 = image skipped */
796
801
807
813
817
818/* Pending command record */
819typedef struct aic8800d_cmd_t {
820 uint16_t id; /* A2E request message id */
821 uint16_t cfm_id; /* expected E2A confirmation id */
822 uint8_t token; /* local token for matching */
823 bool busy;
824 vsf_wifi_done_t done; /* caller completion callback */
825 void *cfm_param; /* buffer to copy E2A param into */
826 uint16_t cfm_param_len; /* size of cfm_param buffer */
828
829/* Chip driver private state */
830typedef struct aic8800d_priv_t {
833
837
838 /* Command manager */
841
842 /* Init state machine */
845
846 /* Firmware load state */
856 uint8_t chip_rev; /* chip_id read from 0x40500000 */
858
859 /* Boot patch table (fw_patch_table_8800d80_u02.bin) write state */
863
864 /* Patch config state */
872
873 /* System config state */
876
877 /* RF config state */
879
880 /* Scan state */
888#define AIC8800D_SCAN_RSN_CAP_CACHE_SIZE 8
889 struct {
894
895 /* Connect state */
900
901 /* Link state (cached from SM_CONNECT_IND) */
904 bool qos;
905
906 /* Key install state (MM_KEY_ADD_REQ -> optional ME_SET_CONTROL_PORT_REQ) */
910
911 /* Init watchdog (stale-firmware self-heal): armed when the init chain runs
912 * on a runtime-mode device; if the chain stalls (stale firmware does not
913 * answer MM_SET_STACK_START_REQ), the timer fires and reboots the chip
914 * into boot ROM so the cold download flow can run. */
917
918/*============================ GLOBAL VARIABLES ==============================*/
919
920/*============================ LOCAL VARIABLES ===============================*/
921
922/*============================ PROTOTYPES ====================================*/
923
926 const void *param, uint16_t param_len,
927 uint16_t cfm_id, void *cfm_param, uint16_t cfm_param_len,
928 vsf_wifi_done_t done);
930 const struct aic8800d_ipc_e2a_msg *msg);
931
932#ifdef __cplusplus
933}
934#endif
935
936#endif /* VSF_USE_WIFI == ENABLED && VSF_WIFI_USE_AIC8800D == ENABLED */
937#endif /* __VSF_WIFI_AIC8800D_PRIV_H__ */
#define VSF_STATIC_ASSERT(__COND,...)
Definition __type.h:199
vsf_err_t
Definition __type.h:42
bool
Definition type.h:60
Definition vsf_eda.h:851
__le16 duration
Definition ieee80211.h:1
u8 bssid[ETH_ALEN]
Definition ieee80211.h:2
#define offsetof(__type, __member)
Definition stddef.h:84
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
signed char int8_t
Definition stdint.h:4
Definition vsf_wifi_aic8800d_priv.h:819
uint8_t token
Definition vsf_wifi_aic8800d_priv.h:822
uint16_t id
Definition vsf_wifi_aic8800d_priv.h:820
vsf_wifi_done_t done
Definition vsf_wifi_aic8800d_priv.h:824
uint16_t cfm_param_len
Definition vsf_wifi_aic8800d_priv.h:826
bool busy
Definition vsf_wifi_aic8800d_priv.h:823
uint16_t cfm_id
Definition vsf_wifi_aic8800d_priv.h:821
void * cfm_param
Definition vsf_wifi_aic8800d_priv.h:825
Definition vsf_wifi_aic8800d_priv.h:802
aic_u32 mem_addr
Definition vsf_wifi_aic8800d_priv.h:803
aic_u32 mem_data[]
Definition vsf_wifi_aic8800d_priv.h:805
aic_u32 mem_size
Definition vsf_wifi_aic8800d_priv.h:804
Definition vsf_wifi_aic8800d_priv.h:797
aic_u32 mem_addr
Definition vsf_wifi_aic8800d_priv.h:798
aic_u32 mem_size
Definition vsf_wifi_aic8800d_priv.h:799
Definition vsf_wifi_aic8800d_priv.h:768
aic_u32 mem_addr
Definition vsf_wifi_aic8800d_priv.h:769
aic_u32 mem_size
Definition vsf_wifi_aic8800d_priv.h:770
aic_u32 mem_data[]
Definition vsf_wifi_aic8800d_priv.h:771
Definition vsf_wifi_aic8800d_priv.h:763
aic_u32 mem_addr
Definition vsf_wifi_aic8800d_priv.h:764
aic_u32 mem_data
Definition vsf_wifi_aic8800d_priv.h:765
Definition vsf_wifi_aic8800d_priv.h:757
aic_u32 mem_mask
Definition vsf_wifi_aic8800d_priv.h:759
aic_u32 mem_data
Definition vsf_wifi_aic8800d_priv.h:760
aic_u32 mem_addr
Definition vsf_wifi_aic8800d_priv.h:758
Definition vsf_wifi_aic8800d_priv.h:742
aic_u32 mem_addr
Definition vsf_wifi_aic8800d_priv.h:743
aic_u32 mem_data
Definition vsf_wifi_aic8800d_priv.h:744
Definition vsf_wifi_aic8800d_priv.h:738
aic_u32 mem_addr
Definition vsf_wifi_aic8800d_priv.h:739
Definition vsf_wifi_aic8800d_priv.h:752
aic_u32 mem_addr
Definition vsf_wifi_aic8800d_priv.h:753
aic_u32 mem_data
Definition vsf_wifi_aic8800d_priv.h:754
Definition vsf_wifi_aic8800d_priv.h:747
aic_u32 mem_addr
Definition vsf_wifi_aic8800d_priv.h:748
aic_u32 mem_data
Definition vsf_wifi_aic8800d_priv.h:749
Definition vsf_wifi_aic8800d_priv.h:814
aic_u32 status
Definition vsf_wifi_aic8800d_priv.h:815
Definition vsf_wifi_aic8800d_priv.h:808
aic_u32 boot_param
Definition vsf_wifi_aic8800d_priv.h:811
aic_u32 boot_addr
Definition vsf_wifi_aic8800d_priv.h:809
aic_u32 boot_type
Definition vsf_wifi_aic8800d_priv.h:810
Definition vsf_wifi_aic8800d_priv.h:786
const uint8_t * data
Definition vsf_wifi_aic8800d_priv.h:790
const char * name
Definition vsf_wifi_aic8800d_priv.h:787
struct aic8800d_fw_variant_t::@332 img[AIC8800D_FW_IMG_NUM]
uint32_t patch_table_size
Definition vsf_wifi_aic8800d_priv.h:794
uint32_t size
Definition vsf_wifi_aic8800d_priv.h:791
const uint8_t * patch_table
Definition vsf_wifi_aic8800d_priv.h:793
uint32_t addr
Definition vsf_wifi_aic8800d_priv.h:789
Definition vsf_wifi_aic8800d_priv.h:655
aic_u16 packet_len
Definition vsf_wifi_aic8800d_priv.h:656
aic_u8 staid
Definition vsf_wifi_aic8800d_priv.h:665
aic_u16 flags_ext
Definition vsf_wifi_aic8800d_priv.h:657
struct aic8800d_mac_addr eth_dest_addr
Definition vsf_wifi_aic8800d_priv.h:659
aic_u16 ethertype
Definition vsf_wifi_aic8800d_priv.h:661
aic_u8 ac
Definition vsf_wifi_aic8800d_priv.h:662
aic_u32 status_desc_addr
Definition vsf_wifi_aic8800d_priv.h:658
aic_u8 tid
Definition vsf_wifi_aic8800d_priv.h:663
struct aic8800d_mac_addr eth_src_addr
Definition vsf_wifi_aic8800d_priv.h:660
aic_u8 vif_idx
Definition vsf_wifi_aic8800d_priv.h:664
aic_u16 flags
Definition vsf_wifi_aic8800d_priv.h:666
Definition vsf_wifi_aic8800d_priv.h:685
aic_u8 raw[AIC8800D_RX_HWHDR_LEN]
Definition vsf_wifi_aic8800d_priv.h:689
Definition vsf_wifi_aic8800d_priv.h:204
aic_u32 pattern
Definition vsf_wifi_aic8800d_priv.h:209
aic_u16 dummy_dest_id
Definition vsf_wifi_aic8800d_priv.h:206
aic_u16 param_len
Definition vsf_wifi_aic8800d_priv.h:208
aic_u32 param[(AIC8800D_MAX_CMD_PARAM+3)/4]
Definition vsf_wifi_aic8800d_priv.h:210
aic_u16 id
Definition vsf_wifi_aic8800d_priv.h:205
aic_u16 dummy_src_id
Definition vsf_wifi_aic8800d_priv.h:207
Definition vsf_wifi_aic8800d_priv.h:196
aic_u16 param_len
Definition vsf_wifi_aic8800d_priv.h:200
aic_u16 id
Definition vsf_wifi_aic8800d_priv.h:197
aic_u32 param[]
Definition vsf_wifi_aic8800d_priv.h:201
aic_u16 dest_id
Definition vsf_wifi_aic8800d_priv.h:198
aic_u16 src_id
Definition vsf_wifi_aic8800d_priv.h:199
Definition vsf_wifi_aic8800d_priv.h:179
aic_u16 array[3]
Definition vsf_wifi_aic8800d_priv.h:180
Definition vsf_wifi_aic8800d_priv.h:188
aic_u8 __pad
Definition vsf_wifi_aic8800d_priv.h:193
aic_u8 band
Definition vsf_wifi_aic8800d_priv.h:190
aic_s8 tx_power
Definition vsf_wifi_aic8800d_priv.h:192
aic_u16 freq
Definition vsf_wifi_aic8800d_priv.h:189
aic_u8 flags
Definition vsf_wifi_aic8800d_priv.h:191
Definition vsf_wifi_aic8800d_priv.h:466
aic_u8 mac_cap_info[AIC8800D_MAC_HE_MAC_CAPA_LEN]
Definition vsf_wifi_aic8800d_priv.h:467
struct aic8800d_mac_he_mcs_nss_supp mcs_supp
Definition vsf_wifi_aic8800d_priv.h:469
aic_u8 phy_cap_info[AIC8800D_MAC_HE_PHY_CAPA_LEN]
Definition vsf_wifi_aic8800d_priv.h:468
aic_u8 ppe_thres[AIC8800D_MAC_HE_PPE_THRES_MAX_LEN]
Definition vsf_wifi_aic8800d_priv.h:470
Definition vsf_wifi_aic8800d_priv.h:457
aic_u16 tx_mcs_160
Definition vsf_wifi_aic8800d_priv.h:461
aic_u16 rx_mcs_80p80
Definition vsf_wifi_aic8800d_priv.h:462
aic_u16 tx_mcs_80p80
Definition vsf_wifi_aic8800d_priv.h:463
aic_u16 rx_mcs_80
Definition vsf_wifi_aic8800d_priv.h:458
aic_u16 tx_mcs_80
Definition vsf_wifi_aic8800d_priv.h:459
aic_u16 rx_mcs_160
Definition vsf_wifi_aic8800d_priv.h:460
Definition vsf_wifi_aic8800d_priv.h:440
aic_u8 mcs_rate[AIC8800D_MAC_MCS_MAX_LEN]
Definition vsf_wifi_aic8800d_priv.h:443
aic_u16 ht_capa_info
Definition vsf_wifi_aic8800d_priv.h:441
aic_u8 a_mpdu_param
Definition vsf_wifi_aic8800d_priv.h:442
aic_u16 ht_extended_capa
Definition vsf_wifi_aic8800d_priv.h:444
aic_u8 asel_capa
Definition vsf_wifi_aic8800d_priv.h:446
aic_u32 tx_beamforming_capa
Definition vsf_wifi_aic8800d_priv.h:445
Definition vsf_wifi_aic8800d_priv.h:183
aic_u8 length
Definition vsf_wifi_aic8800d_priv.h:184
aic_u8 array[32]
Definition vsf_wifi_aic8800d_priv.h:185
Definition vsf_wifi_aic8800d_priv.h:449
aic_u16 tx_highest
Definition vsf_wifi_aic8800d_priv.h:454
aic_u16 rx_highest
Definition vsf_wifi_aic8800d_priv.h:452
aic_u16 rx_mcs_map
Definition vsf_wifi_aic8800d_priv.h:451
aic_u32 vht_capa_info
Definition vsf_wifi_aic8800d_priv.h:450
aic_u16 tx_mcs_map
Definition vsf_wifi_aic8800d_priv.h:453
Definition vsf_wifi_aic8800d_priv.h:488
struct aic8800d_mac_chan_def chan5G[AIC8800D_MAC_DOMAINCHANNEL_5G_MAX]
Definition vsf_wifi_aic8800d_priv.h:490
aic_u8 chan2G4_cnt
Definition vsf_wifi_aic8800d_priv.h:491
struct aic8800d_mac_chan_def chan2G4[AIC8800D_MAC_DOMAINCHANNEL_24G_MAX]
Definition vsf_wifi_aic8800d_priv.h:489
aic_u8 chan5G_cnt
Definition vsf_wifi_aic8800d_priv.h:492
Definition vsf_wifi_aic8800d_priv.h:473
aic_u8 phy_bw_max
Definition vsf_wifi_aic8800d_priv.h:478
aic_bool ht_supp
Definition vsf_wifi_aic8800d_priv.h:479
aic_bool he_supp
Definition vsf_wifi_aic8800d_priv.h:481
aic_bool he_ul_on
Definition vsf_wifi_aic8800d_priv.h:482
aic_bool ant_div_on
Definition vsf_wifi_aic8800d_priv.h:484
aic_bool dpsm
Definition vsf_wifi_aic8800d_priv.h:485
aic_u16 tx_lft
Definition vsf_wifi_aic8800d_priv.h:477
struct aic8800d_mac_vht_capability vht_cap
Definition vsf_wifi_aic8800d_priv.h:475
struct aic8800d_mac_he_capability he_cap
Definition vsf_wifi_aic8800d_priv.h:476
struct aic8800d_mac_ht_capability ht_cap
Definition vsf_wifi_aic8800d_priv.h:474
aic_bool ps_on
Definition vsf_wifi_aic8800d_priv.h:483
aic_bool vht_supp
Definition vsf_wifi_aic8800d_priv.h:480
Definition vsf_wifi_aic8800d_priv.h:650
aic_u8 control_port_open
Definition vsf_wifi_aic8800d_priv.h:652
aic_u8 sta_idx
Definition vsf_wifi_aic8800d_priv.h:651
Definition vsf_wifi_aic8800d_priv.h:376
aic_u8 inst_nbr
Definition vsf_wifi_aic8800d_priv.h:378
aic_u8 status
Definition vsf_wifi_aic8800d_priv.h:377
Definition vsf_wifi_aic8800d_priv.h:242
aic_u8 type
Definition vsf_wifi_aic8800d_priv.h:243
aic_u8 p2p
Definition vsf_wifi_aic8800d_priv.h:246
aic_u8 __pad1
Definition vsf_wifi_aic8800d_priv.h:247
struct aic8800d_mac_addr addr
Definition vsf_wifi_aic8800d_priv.h:245
aic_u8 __pad0
Definition vsf_wifi_aic8800d_priv.h:244
Definition vsf_wifi_aic8800d_priv.h:225
aic_u8 fw_version[63]
Definition vsf_wifi_aic8800d_priv.h:227
aic_u8 fw_version_len
Definition vsf_wifi_aic8800d_priv.h:226
Definition vsf_wifi_aic8800d_priv.h:221
aic_u8 dummy
Definition vsf_wifi_aic8800d_priv.h:222
Definition vsf_wifi_aic8800d_priv.h:370
aic_u8 status
Definition vsf_wifi_aic8800d_priv.h:372
aic_u8 mac_addr[6]
Definition vsf_wifi_aic8800d_priv.h:371
aic_u8 pad
Definition vsf_wifi_aic8800d_priv.h:373
Definition vsf_wifi_aic8800d_priv.h:234
aic_u32 get
Definition vsf_wifi_aic8800d_priv.h:235
Definition vsf_wifi_aic8800d_priv.h:645
aic_u8 hw_key_idx
Definition vsf_wifi_aic8800d_priv.h:647
aic_u8 status
Definition vsf_wifi_aic8800d_priv.h:646
Definition vsf_wifi_aic8800d_priv.h:632
aic_u8 sta_idx
Definition vsf_wifi_aic8800d_priv.h:634
aic_u8 pairwise
Definition vsf_wifi_aic8800d_priv.h:642
aic_u8 cipher_suite
Definition vsf_wifi_aic8800d_priv.h:639
aic_u32 key[AIC8800D_SEC_KEY_LEN/4]
Definition vsf_wifi_aic8800d_priv.h:638
aic_u8 key_len
Definition vsf_wifi_aic8800d_priv.h:636
aic_u8 __pad0[2]
Definition vsf_wifi_aic8800d_priv.h:635
aic_u8 __pad1[3]
Definition vsf_wifi_aic8800d_priv.h:637
aic_u8 inst_nbr
Definition vsf_wifi_aic8800d_priv.h:640
aic_u8 key_idx
Definition vsf_wifi_aic8800d_priv.h:633
aic_u8 spp
Definition vsf_wifi_aic8800d_priv.h:641
Definition vsf_wifi_aic8800d_priv.h:393
aic_u32 dummy
Definition vsf_wifi_aic8800d_priv.h:394
Definition vsf_wifi_aic8800d_priv.h:230
aic_u32 dummy
Definition vsf_wifi_aic8800d_priv.h:231
Definition vsf_wifi_aic8800d_priv.h:397
aic_u32 radio_cnt
Definition vsf_wifi_aic8800d_priv.h:398
Definition vsf_wifi_aic8800d_priv.h:359
aic_u8 band
Definition vsf_wifi_aic8800d_priv.h:360
aic_u16 center2_freq
Definition vsf_wifi_aic8800d_priv.h:364
aic_u8 dummy
Definition vsf_wifi_aic8800d_priv.h:366
aic_u8 type
Definition vsf_wifi_aic8800d_priv.h:361
aic_u16 prim20_freq
Definition vsf_wifi_aic8800d_priv.h:362
aic_u16 center1_freq
Definition vsf_wifi_aic8800d_priv.h:363
aic_u8 index
Definition vsf_wifi_aic8800d_priv.h:365
Definition vsf_wifi_aic8800d_priv.h:406
aic_u8 bt_on
Definition vsf_wifi_aic8800d_priv.h:407
aic_u8 enable_nullcts
Definition vsf_wifi_aic8800d_priv.h:409
aic_u8 disable_coexnull
Definition vsf_wifi_aic8800d_priv.h:408
aic_u8 __pad[3]
Definition vsf_wifi_aic8800d_priv.h:412
aic_u8 enable_periodic_timer
Definition vsf_wifi_aic8800d_priv.h:410
aic_u32 coex_timeslot[2]
Definition vsf_wifi_aic8800d_priv.h:413
aic_u8 coex_timeslot_set
Definition vsf_wifi_aic8800d_priv.h:411
Definition vsf_wifi_aic8800d_priv.h:401
aic_u32 dummy
Definition vsf_wifi_aic8800d_priv.h:402
Definition vsf_wifi_aic8800d_priv.h:250
aic_u32 filter
Definition vsf_wifi_aic8800d_priv.h:251
Definition vsf_wifi_aic8800d_priv.h:352
aic_u32 rxgain_24g_addr
Definition vsf_wifi_aic8800d_priv.h:353
aic_u32 txgain_5g_addr
Definition vsf_wifi_aic8800d_priv.h:356
aic_u32 rxgain_5g_addr
Definition vsf_wifi_aic8800d_priv.h:354
aic_u32 txgain_24g_addr
Definition vsf_wifi_aic8800d_priv.h:355
Definition vsf_wifi_aic8800d_priv.h:341
aic_u32 param_alpha
Definition vsf_wifi_aic8800d_priv.h:344
aic_u8 xtal_cap_fine
Definition vsf_wifi_aic8800d_priv.h:348
aic_u8 xtal_cap
Definition vsf_wifi_aic8800d_priv.h:347
aic_u32 bt_calib_en
Definition vsf_wifi_aic8800d_priv.h:345
aic_u32 cal_cfg_24g
Definition vsf_wifi_aic8800d_priv.h:342
aic_u8 __pad[2]
Definition vsf_wifi_aic8800d_priv.h:349
aic_u32 cal_cfg_5g
Definition vsf_wifi_aic8800d_priv.h:343
aic_u32 bt_calib_param
Definition vsf_wifi_aic8800d_priv.h:346
Definition vsf_wifi_aic8800d_priv.h:426
aic_u8 is_5g_support
Definition vsf_wifi_aic8800d_priv.h:427
aic_u8 vendor_info
Definition vsf_wifi_aic8800d_priv.h:428
Definition vsf_wifi_aic8800d_priv.h:214
aic_u8 efuse_valid
Definition vsf_wifi_aic8800d_priv.h:216
aic_u8 is_stack_start
Definition vsf_wifi_aic8800d_priv.h:215
aic_u8 fwtrace_redir
Definition vsf_wifi_aic8800d_priv.h:218
aic_u8 set_vendor_info
Definition vsf_wifi_aic8800d_priv.h:217
Definition vsf_wifi_aic8800d_priv.h:313
struct aic8800d_txpwr_lvl_adj_conf txpwr_lvl_adj
Definition vsf_wifi_aic8800d_priv.h:314
Definition vsf_wifi_aic8800d_priv.h:298
struct aic8800d_txpwr_lvl_conf_v4 txpwr_lvl_v4
Definition vsf_wifi_aic8800d_priv.h:303
struct aic8800d_txpwr_lvl_conf_v3 txpwr_lvl_v3
Definition vsf_wifi_aic8800d_priv.h:302
struct aic8800d_txpwr_lvl_conf_v2 txpwr_lvl_v2
Definition vsf_wifi_aic8800d_priv.h:301
struct aic8800d_txpwr_lvl_conf txpwr_lvl
Definition vsf_wifi_aic8800d_priv.h:300
union aic8800d_mm_set_txpwr_lvl_req::@330 u
Definition vsf_wifi_aic8800d_priv.h:334
struct aic8800d_txpwr_ofst_conf txpwr_ofst
Definition vsf_wifi_aic8800d_priv.h:336
struct aic8800d_txpwr_ofst2x_conf txpwr_ofst2x
Definition vsf_wifi_aic8800d_priv.h:337
union aic8800d_mm_set_txpwr_ofst_req::@331 u
Definition vsf_wifi_aic8800d_priv.h:422
aic_u32 dummy
Definition vsf_wifi_aic8800d_priv.h:423
Definition vsf_wifi_aic8800d_priv.h:416
aic_u32 phy_cfg[16]
Definition vsf_wifi_aic8800d_priv.h:417
aic_u16 lp_clk_accuracy
Definition vsf_wifi_aic8800d_priv.h:419
aic_u32 uapsd_timeout
Definition vsf_wifi_aic8800d_priv.h:418
Definition vsf_wifi_aic8800d_priv.h:381
aic_u32 version_machw_1
Definition vsf_wifi_aic8800d_priv.h:383
aic_u32 version_machw_2
Definition vsf_wifi_aic8800d_priv.h:384
aic_u8 pad
Definition vsf_wifi_aic8800d_priv.h:390
aic_u32 version_phy_1
Definition vsf_wifi_aic8800d_priv.h:385
aic_u8 max_vif_nb
Definition vsf_wifi_aic8800d_priv.h:389
aic_u32 features
Definition vsf_wifi_aic8800d_priv.h:387
aic_u32 version_lmac
Definition vsf_wifi_aic8800d_priv.h:382
aic_u32 version_phy_2
Definition vsf_wifi_aic8800d_priv.h:386
aic_u16 max_sta_nb
Definition vsf_wifi_aic8800d_priv.h:388
Definition vsf_wifi_aic8800d_priv.h:238
aic_u32 dummy
Definition vsf_wifi_aic8800d_priv.h:239
Definition vsf_wifi_aic8800d_priv.h:697
aic_u32 pair_start
Definition vsf_wifi_aic8800d_priv.h:699
aic_u32 magic_num_2
Definition vsf_wifi_aic8800d_priv.h:700
aic_u32 pair_count
Definition vsf_wifi_aic8800d_priv.h:701
aic_u32 magic_num
Definition vsf_wifi_aic8800d_priv.h:698
aic_u32 block_size[AIC8800D_PATCH_BLOCK_MAX]
Definition vsf_wifi_aic8800d_priv.h:704
aic_u32 block_src[AIC8800D_PATCH_BLOCK_MAX]
Definition vsf_wifi_aic8800d_priv.h:703
aic_u32 block_dst[AIC8800D_PATCH_BLOCK_MAX]
Definition vsf_wifi_aic8800d_priv.h:702
Definition vsf_wifi_aic8800d_priv.h:830
bool connect_active
Definition vsf_wifi_aic8800d_priv.h:898
uint8_t fw_img_idx
Definition vsf_wifi_aic8800d_priv.h:852
uint8_t syscfg_idx
Definition vsf_wifi_aic8800d_priv.h:874
uint8_t scan_finish_retries
Definition vsf_wifi_aic8800d_priv.h:884
uint8_t scan_results_received
Definition vsf_wifi_aic8800d_priv.h:886
uint16_t rsn_cap
Definition vsf_wifi_aic8800d_priv.h:891
uint8_t sta_idx
Definition vsf_wifi_aic8800d_priv.h:903
bool scan_active
Definition vsf_wifi_aic8800d_priv.h:882
const vsf_wifi_aic8800d_bus_ops_t * bus_ops
Definition vsf_wifi_aic8800d_priv.h:832
vsf_wifi_t * wifi
Definition vsf_wifi_aic8800d_priv.h:831
vsf_callback_timer_t scan_finish_timer
Definition vsf_wifi_aic8800d_priv.h:887
uint8_t vif_idx
Definition vsf_wifi_aic8800d_priv.h:834
vsf_wifi_done_t connect_done
Definition vsf_wifi_aic8800d_priv.h:897
uint32_t patch_tbl_pairs[160][2]
Definition vsf_wifi_aic8800d_priv.h:862
uint32_t fw_size
Definition vsf_wifi_aic8800d_priv.h:849
uint8_t mac_addr[6]
Definition vsf_wifi_aic8800d_priv.h:835
uint32_t fw_offset
Definition vsf_wifi_aic8800d_priv.h:850
uint8_t patch_step
Definition vsf_wifi_aic8800d_priv.h:865
uint32_t fw_version
Definition vsf_wifi_aic8800d_priv.h:869
vsf_wifi_done_t fw_done
Definition vsf_wifi_aic8800d_priv.h:853
struct aic8800d_dbg_mem_read_cfm sysconfig_rd_cfm
Definition vsf_wifi_aic8800d_priv.h:854
uint8_t next_token
Definition vsf_wifi_aic8800d_priv.h:840
bool scan_finish_pending
Definition vsf_wifi_aic8800d_priv.h:883
uint16_t ap_rsn_cap
Definition vsf_wifi_aic8800d_priv.h:899
bool mac_addr_valid
Definition vsf_wifi_aic8800d_priv.h:836
uint8_t init_step
Definition vsf_wifi_aic8800d_priv.h:843
uint8_t ap_idx
Definition vsf_wifi_aic8800d_priv.h:902
vsf_wifi_done_t init_done
Definition vsf_wifi_aic8800d_priv.h:844
uint8_t syscfg_masked_idx
Definition vsf_wifi_aic8800d_priv.h:875
aic8800d_cmd_t cmds[AIC8800D_MAX_PENDING_CMDS]
Definition vsf_wifi_aic8800d_priv.h:839
uint32_t patch_buff_base
Definition vsf_wifi_aic8800d_priv.h:870
uint8_t scan_results_expected
Definition vsf_wifi_aic8800d_priv.h:885
struct aic8800d_mm_key_add_cfm key_add_cfm
Definition vsf_wifi_aic8800d_priv.h:908
bool key_open_port
Definition vsf_wifi_aic8800d_priv.h:909
uint32_t config_base
Definition vsf_wifi_aic8800d_priv.h:867
uint32_t patch_str_base
Definition vsf_wifi_aic8800d_priv.h:868
uint8_t scan_rsn_cap_cache_num
Definition vsf_wifi_aic8800d_priv.h:893
struct aic8800d_sm_connect_req connect_req
Definition vsf_wifi_aic8800d_priv.h:896
aic8800d_fw_variant_t fw_variant
Definition vsf_wifi_aic8800d_priv.h:857
uint8_t chip_mcu_id
Definition vsf_wifi_aic8800d_priv.h:855
vsf_wifi_done_t scan_done
Definition vsf_wifi_aic8800d_priv.h:881
uint8_t chip_rev
Definition vsf_wifi_aic8800d_priv.h:856
bool qos
Definition vsf_wifi_aic8800d_priv.h:904
uint16_t patch_tbl_count
Definition vsf_wifi_aic8800d_priv.h:861
uint16_t patch_tbl_idx
Definition vsf_wifi_aic8800d_priv.h:860
uint8_t rf_cfg_idx
Definition vsf_wifi_aic8800d_priv.h:878
uint8_t patch_write_idx
Definition vsf_wifi_aic8800d_priv.h:871
struct aic8800d_priv_t::@333 scan_rsn_cap_cache[AIC8800D_SCAN_RSN_CAP_CACHE_SIZE]
uint32_t fw_addr
Definition vsf_wifi_aic8800d_priv.h:851
uint8_t * fw_buf
Definition vsf_wifi_aic8800d_priv.h:848
struct aic8800d_dbg_mem_read_cfm patch_rd_cfm
Definition vsf_wifi_aic8800d_priv.h:866
uint8_t fw_load_step
Definition vsf_wifi_aic8800d_priv.h:847
vsf_callback_timer_t init_wd_timer
Definition vsf_wifi_aic8800d_priv.h:915
vsf_wifi_done_t key_done
Definition vsf_wifi_aic8800d_priv.h:907
Definition vsf_wifi_aic8800d_priv.h:540
aic_u8 status
Definition vsf_wifi_aic8800d_priv.h:541
Definition vsf_wifi_aic8800d_priv.h:537
Definition vsf_wifi_aic8800d_priv.h:544
aic_s8 rssi
Definition vsf_wifi_aic8800d_priv.h:551
aic_u8 sta_idx
Definition vsf_wifi_aic8800d_priv.h:549
aic_u8 band
Definition vsf_wifi_aic8800d_priv.h:548
aic_u16 length
Definition vsf_wifi_aic8800d_priv.h:545
aic_u8 inst_nbr
Definition vsf_wifi_aic8800d_priv.h:550
aic_u16 center_freq
Definition vsf_wifi_aic8800d_priv.h:547
aic_u16 framectrl
Definition vsf_wifi_aic8800d_priv.h:546
aic_u32 payload[]
Definition vsf_wifi_aic8800d_priv.h:552
Definition vsf_wifi_aic8800d_priv.h:531
aic_u8 vif_idx
Definition vsf_wifi_aic8800d_priv.h:532
aic_u8 result_cnt
Definition vsf_wifi_aic8800d_priv.h:534
aic_u8 status
Definition vsf_wifi_aic8800d_priv.h:533
Definition vsf_wifi_aic8800d_priv.h:499
struct aic8800d_mac_ssid ssid[AIC8800D_SCAN_SSID_MAX]
Definition vsf_wifi_aic8800d_priv.h:501
aic_u8 __pad0[2]
Definition vsf_wifi_aic8800d_priv.h:514
struct aic8800d_mac_chan_def chan[AIC8800D_SCAN_CHANNEL_MAX]
Definition vsf_wifi_aic8800d_priv.h:500
aic_u8 vif_idx
Definition vsf_wifi_aic8800d_priv.h:513
aic_u8 no_cck
Definition vsf_wifi_aic8800d_priv.h:517
aic_u8 chan_cnt
Definition vsf_wifi_aic8800d_priv.h:515
aic_u8 ssid_cnt
Definition vsf_wifi_aic8800d_priv.h:516
aic_u32 duration
Definition vsf_wifi_aic8800d_priv.h:519
aic_u8 __pad1
Definition vsf_wifi_aic8800d_priv.h:518
struct aic8800d_mac_addr bssid
Definition vsf_wifi_aic8800d_priv.h:510
aic_u16 add_ies[2]
Definition vsf_wifi_aic8800d_priv.h:511
aic_u16 add_ie_len
Definition vsf_wifi_aic8800d_priv.h:512
Definition vsf_wifi_aic8800d_priv.h:589
aic_u8 status
Definition vsf_wifi_aic8800d_priv.h:590
Definition vsf_wifi_aic8800d_priv.h:597
aic_u8 width
Definition vsf_wifi_aic8800d_priv.h:612
aic_u8 vif_idx
Definition vsf_wifi_aic8800d_priv.h:601
aic_u8 ap_idx
Definition vsf_wifi_aic8800d_priv.h:602
aic_u8 band
Definition vsf_wifi_aic8800d_priv.h:610
aic_u16 assoc_rsp_ie_len
Definition vsf_wifi_aic8800d_priv.h:607
aic_u8 qos
Definition vsf_wifi_aic8800d_priv.h:604
aic_u16 assoc_req_ie_len
Definition vsf_wifi_aic8800d_priv.h:606
aic_u8 roamed
Definition vsf_wifi_aic8800d_priv.h:600
aic_u32 assoc_ie_buf[AIC8800D_SM_ASSOC_IND_IE_LEN/4]
Definition vsf_wifi_aic8800d_priv.h:608
aic_u32 center_freq1
Definition vsf_wifi_aic8800d_priv.h:613
aic_u32 ac_param[4]
Definition vsf_wifi_aic8800d_priv.h:615
aic_u8 acm
Definition vsf_wifi_aic8800d_priv.h:605
aic_u16 aid
Definition vsf_wifi_aic8800d_priv.h:609
aic_u16 status_code
Definition vsf_wifi_aic8800d_priv.h:598
aic_u8 ch_idx
Definition vsf_wifi_aic8800d_priv.h:603
struct aic8800d_mac_addr bssid
Definition vsf_wifi_aic8800d_priv.h:599
aic_u32 center_freq2
Definition vsf_wifi_aic8800d_priv.h:614
aic_u16 center_freq
Definition vsf_wifi_aic8800d_priv.h:611
Definition vsf_wifi_aic8800d_priv.h:572
struct aic8800d_mac_chan_def chan
Definition vsf_wifi_aic8800d_priv.h:576
aic_u32 ie_buf[AIC8800D_SM_ASSOC_IE_LEN/4]
Definition vsf_wifi_aic8800d_priv.h:586
aic_u16 listen_interval
Definition vsf_wifi_aic8800d_priv.h:581
aic_u8 __pad_after_chan[2]
Definition vsf_wifi_aic8800d_priv.h:577
aic_u8 dont_wait_bcmc
Definition vsf_wifi_aic8800d_priv.h:582
struct aic8800d_mac_addr bssid
Definition vsf_wifi_aic8800d_priv.h:575
aic_u8 uapsd_queues
Definition vsf_wifi_aic8800d_priv.h:584
aic_u16 ie_len
Definition vsf_wifi_aic8800d_priv.h:580
struct aic8800d_mac_ssid ssid
Definition vsf_wifi_aic8800d_priv.h:573
aic_u8 auth_type
Definition vsf_wifi_aic8800d_priv.h:583
aic_u16 ctrl_port_ethertype
Definition vsf_wifi_aic8800d_priv.h:579
aic_u32 flags
Definition vsf_wifi_aic8800d_priv.h:578
aic_u8 vif_idx
Definition vsf_wifi_aic8800d_priv.h:585
aic_u8 __pad_after_ssid
Definition vsf_wifi_aic8800d_priv.h:574
Definition vsf_wifi_aic8800d_priv.h:623
aic_u16 reason_code
Definition vsf_wifi_aic8800d_priv.h:624
aic_u8 vif_idx
Definition vsf_wifi_aic8800d_priv.h:625
Definition vsf_wifi_aic8800d_priv.h:618
aic_u16 reason_code
Definition vsf_wifi_aic8800d_priv.h:620
aic_u8 vif_idx
Definition vsf_wifi_aic8800d_priv.h:619
Definition vsf_wifi_aic8800d_priv.h:669
struct aic8800d_hostdesc host
Definition vsf_wifi_aic8800d_priv.h:670
Definition vsf_wifi_aic8800d_priv.h:307
aic_s8 pwrlvl_adj_tbl_2g4[3]
Definition vsf_wifi_aic8800d_priv.h:309
aic_s8 pwrlvl_adj_tbl_5g[6]
Definition vsf_wifi_aic8800d_priv.h:310
aic_u8 enable
Definition vsf_wifi_aic8800d_priv.h:308
Definition vsf_wifi_aic8800d_priv.h:268
aic_u8 enable
Definition vsf_wifi_aic8800d_priv.h:269
aic_s8 pwrlvl_11b_11ag_2g4[12]
Definition vsf_wifi_aic8800d_priv.h:270
aic_s8 pwrlvl_11n_11ac_2g4[10]
Definition vsf_wifi_aic8800d_priv.h:271
aic_s8 pwrlvl_11ax_2g4[12]
Definition vsf_wifi_aic8800d_priv.h:272
Definition vsf_wifi_aic8800d_priv.h:275
aic_s8 pwrlvl_11a_5g[12]
Definition vsf_wifi_aic8800d_priv.h:280
aic_s8 pwrlvl_11ax_2g4[12]
Definition vsf_wifi_aic8800d_priv.h:279
aic_u8 enable
Definition vsf_wifi_aic8800d_priv.h:276
aic_s8 pwrlvl_11ax_5g[12]
Definition vsf_wifi_aic8800d_priv.h:282
aic_s8 pwrlvl_11n_11ac_2g4[10]
Definition vsf_wifi_aic8800d_priv.h:278
aic_s8 pwrlvl_11n_11ac_5g[10]
Definition vsf_wifi_aic8800d_priv.h:281
aic_s8 pwrlvl_11b_11ag_2g4[12]
Definition vsf_wifi_aic8800d_priv.h:277
Definition vsf_wifi_aic8800d_priv.h:285
aic_s8 pwrlvl_11a_5g[12]
Definition vsf_wifi_aic8800d_priv.h:290
aic_s8 pwrlvl_11ax_6g[12]
Definition vsf_wifi_aic8800d_priv.h:295
aic_s8 pwrlvl_11n_11ac_2g4[10]
Definition vsf_wifi_aic8800d_priv.h:288
aic_s8 pwrlvl_11a_6g[8]
Definition vsf_wifi_aic8800d_priv.h:293
aic_s8 pwrlvl_11ax_5g[12]
Definition vsf_wifi_aic8800d_priv.h:292
aic_s8 pwrlvl_11n_11ac_6g[10]
Definition vsf_wifi_aic8800d_priv.h:294
aic_s8 pwrlvl_11ax_2g4[12]
Definition vsf_wifi_aic8800d_priv.h:289
aic_s8 pwrlvl_11b_11ag_2g4[12]
Definition vsf_wifi_aic8800d_priv.h:287
aic_u8 enable
Definition vsf_wifi_aic8800d_priv.h:286
aic_s8 pwrlvl_11n_11ac_5g[10]
Definition vsf_wifi_aic8800d_priv.h:291
Definition vsf_wifi_aic8800d_priv.h:255
aic_s8 ofdmlowrate_2g4
Definition vsf_wifi_aic8800d_priv.h:258
aic_s8 ofdmlowrate_5g
Definition vsf_wifi_aic8800d_priv.h:262
aic_s8 ofdm256qam_2g4
Definition vsf_wifi_aic8800d_priv.h:260
aic_s8 ofdm64qam_5g
Definition vsf_wifi_aic8800d_priv.h:263
aic_u8 enable
Definition vsf_wifi_aic8800d_priv.h:256
aic_s8 ofdm1024qam_5g
Definition vsf_wifi_aic8800d_priv.h:265
aic_s8 ofdm1024qam_2g4
Definition vsf_wifi_aic8800d_priv.h:261
aic_s8 ofdm64qam_2g4
Definition vsf_wifi_aic8800d_priv.h:259
aic_s8 dsss
Definition vsf_wifi_aic8800d_priv.h:257
aic_s8 ofdm256qam_5g
Definition vsf_wifi_aic8800d_priv.h:264
Definition vsf_wifi_aic8800d_priv.h:328
aic_s8 pwrofst2x_tbl_2g4[3][3]
Definition vsf_wifi_aic8800d_priv.h:330
aic_s8 pwrofst2x_tbl_5g[3][6]
Definition vsf_wifi_aic8800d_priv.h:331
aic_u8 enable
Definition vsf_wifi_aic8800d_priv.h:329
Definition vsf_wifi_aic8800d_priv.h:317
aic_s8 chan_5_9
Definition vsf_wifi_aic8800d_priv.h:320
aic_s8 chan_10_13
Definition vsf_wifi_aic8800d_priv.h:321
aic_s8 chan_142_165
Definition vsf_wifi_aic8800d_priv.h:325
aic_u8 enable
Definition vsf_wifi_aic8800d_priv.h:318
aic_s8 chan_36_64
Definition vsf_wifi_aic8800d_priv.h:322
aic_s8 chan_100_120
Definition vsf_wifi_aic8800d_priv.h:323
aic_s8 chan_122_140
Definition vsf_wifi_aic8800d_priv.h:324
aic_s8 chan_1_4
Definition vsf_wifi_aic8800d_priv.h:319
Definition vsf_wifi_aic8800d_priv.h:674
aic_u8 type
Definition vsf_wifi_aic8800d_priv.h:681
aic_u8 len_lsb
Definition vsf_wifi_aic8800d_priv.h:675
aic_u8 len2_lsb
Definition vsf_wifi_aic8800d_priv.h:677
aic_u8 len3_msb
Definition vsf_wifi_aic8800d_priv.h:680
aic_u8 len2_msb
Definition vsf_wifi_aic8800d_priv.h:678
aic_u8 reserved
Definition vsf_wifi_aic8800d_priv.h:682
aic_u8 len_msb
Definition vsf_wifi_aic8800d_priv.h:676
aic_u8 len3_lsb
Definition vsf_wifi_aic8800d_priv.h:679
Definition vsf_wifi_aic8800d.h:55
Definition vsf_wifi_priv.h:57
void(* vsf_wifi_done_t)(vsf_wifi_t *wifi, vsf_err_t err)
Definition vsf_wifi.h:123
int8_t aic_s8
Definition vsf_wifi_aic8800d_priv.h:174
struct aic8800d_cmd_t aic8800d_cmd_t
struct aic8800d_fw_variant_t aic8800d_fw_variant_t
void __aic8800d_cmd_cfm(vsf_wifi_t *wifi, aic8800d_cmd_t *cmd, const struct aic8800d_ipc_e2a_msg *msg)
Definition vsf_wifi_aic8800d.c:206
#define AIC8800D_SCAN_CHANNEL_MAX
Definition vsf_wifi_aic8800d_priv.h:496
#define AIC8800D_SYSCFG_MASKED_COUNT
Definition vsf_wifi_aic8800d_priv.h:58
#define AIC8800D_SCAN_RSN_CAP_CACHE_SIZE
Definition vsf_wifi_aic8800d_priv.h:888
#define AIC8800D_MAC_DOMAINCHANNEL_5G_MAX
Definition vsf_wifi_aic8800d_priv.h:433
const uint32_t __aic8800d_patch_ext_size
Definition vsf_wifi_aic8800d_firmware_data.c:20491
#define AIC8800D_SM_ASSOC_IE_LEN
Definition vsf_wifi_aic8800d_priv.h:556
#define AIC8800D_MAC_DOMAINCHANNEL_24G_MAX
Definition vsf_wifi_aic8800d_priv.h:432
#define AIC8800D_SEC_KEY_LEN
Definition vsf_wifi_aic8800d_priv.h:630
uint16_t aic_u16
Definition vsf_wifi_aic8800d_priv.h:175
const uint8_t __aic8800d_adid_data[]
Definition vsf_wifi_aic8800d_firmware_data.c:20484
#define AIC8800D_MAX_PENDING_CMDS
Definition vsf_wifi_aic8800d_priv.h:42
uint32_t aic_u32
Definition vsf_wifi_aic8800d_priv.h:176
#define AIC8800D_MAX_CMD_PARAM
Definition vsf_wifi_aic8800d_priv.h:41
const uint32_t __aic8800d_patch_table_size
Definition vsf_wifi_aic8800d_firmware_data.c:20557
#define AIC8800D_MAC_HE_MAC_CAPA_LEN
Definition vsf_wifi_aic8800d_priv.h:436
const uint8_t __aic8800d_patch_ext_data[]
Definition vsf_wifi_aic8800d_firmware_data.c:20490
vsf_err_t __aic8800d_send_msg(vsf_wifi_t *wifi, uint16_t id, const void *param, uint16_t param_len, uint16_t cfm_id, void *cfm_param, uint16_t cfm_param_len, vsf_wifi_done_t done)
Definition vsf_wifi_aic8800d.c:98
const uint8_t __aic8800d_patch_table_data[]
Definition vsf_wifi_aic8800d_firmware_data.c:20493
#define AIC8800D_MAC_HE_PPE_THRES_MAX_LEN
Definition vsf_wifi_aic8800d_priv.h:438
struct aic8800d_priv_t aic8800d_priv_t
const uint8_t __aic8800d_firmware_data[]
Definition vsf_wifi_aic8800d_firmware_data.c:3
#define AIC8800D_RX_HWHDR_LEN
Definition vsf_wifi_aic8800d_priv.h:568
#define AIC8800D_SYSCFG_COUNT
Definition vsf_wifi_aic8800d_priv.h:51
#define AIC8800D_SM_ASSOC_IND_IE_LEN
Definition vsf_wifi_aic8800d_priv.h:595
#define AIC8800D_PATCH_TBL_COUNT
Definition vsf_wifi_aic8800d_priv.h:708
const uint32_t __aic8800d_firmware_size
Definition vsf_wifi_aic8800d_firmware_data.c:20482
#define AIC8800D_RF_CFG_COUNT
Definition vsf_wifi_aic8800d_priv.h:45
#define AIC8800D_SCAN_SSID_MAX
Definition vsf_wifi_aic8800d_priv.h:497
#define AIC8800D_MAC_HE_PHY_CAPA_LEN
Definition vsf_wifi_aic8800d_priv.h:437
aic8800d_priv_t * __aic8800d_priv(vsf_wifi_t *wifi)
Definition vsf_wifi_aic8800d.c:59
const uint32_t __aic8800d_patch_size
Definition vsf_wifi_aic8800d_firmware_data.c:20488
bool aic_bool
Definition vsf_wifi_aic8800d_priv.h:177
#define AIC8800D_MAC_MCS_MAX_LEN
Definition vsf_wifi_aic8800d_priv.h:435
const uint32_t __aic8800d_adid_size
Definition vsf_wifi_aic8800d_firmware_data.c:20485
#define AIC8800D_FW_IMG_NUM
Definition vsf_wifi_aic8800d_priv.h:784
const uint8_t __aic8800d_patch_data[]
Definition vsf_wifi_aic8800d_firmware_data.c:20487
uint8_t aic_u8
Definition vsf_wifi_aic8800d_priv.h:173
#define AIC8800D_PATCH_BLOCK_MAX
Definition vsf_wifi_aic8800d_priv.h:695
Generated from commit: vsfteam/vsf@5de27dd