1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
//! aic8800_fdrv 驱动内部常量
//!
//! 仅包含本驱动特有的配置常量(缓冲区大小、队列、TX 功率、超时、延迟等)。
//! 协议层常量(消息 ID、认证类型、加密套件、结构体大小等)统一在 protocol::lmac_msg 中定义。
//! 芯片级常量(寄存器地址、SDIO 类型、固件地址等)统一在 aic8800_common 中定义。
// ============================================================
// SDIO 帧构造常量(驱动内部使用的别名)
// ============================================================
/// SDIO 功能块大小 (字节) — 驱动内部使用 usize 类型
pub const SDIOWIFI_FUNC_BLOCKSIZE: usize = 512;
/// Dummy word 长度 (字节)
pub const DUMMY_WORD_LEN: usize = 4;
/// 尾部长度 (字节)
pub const TAIL_LEN: usize = 4;
/// 发送对齐 (字节)
pub const TX_ALIGNMENT: usize = 4;
// ============================================================
// 流控常量
// ============================================================
/// 流控重试最大次数
pub const FLOW_CONTROL_MAX_RETRY: u32 = 100;
// ============================================================
// 响应等待常量
// ============================================================
/// SDIO_OTHER_INTERRUPT 标志位
pub const SDIO_OTHER_INTERRUPT: u8 = 0x80;
/// 块计数掩码 (低 7 位)
pub const BLOCK_COUNT_MASK: u8 = 0x7F;
/// 响应超时最大重试次数
pub const RESPONSE_MAX_RETRY: u32 = 10_000;
// ============================================================
// 芯片初始化常量
// ============================================================
/// 中断配置寄存器值 (使能所有中断)
pub const INTR_CONFIG_VALUE: u8 = 0x07;
/// 堆栈起始参数
pub const STACK_START_PARAM: = ;
// ============================================================
// 协议头部常量
// ============================================================
/// SDIO 头部大小 (字节)
pub const SDIO_HEADER_SIZE: usize = 4;
/// LMAC 消息头部大小 (字节)
pub const LMAC_MSG_HEADER_SIZE: usize = 8;
/// 完整协议头部大小 (SDIO + Dummy + LMAC)
pub const PROTO_HEADER_SIZE: usize = SDIO_HEADER_SIZE + DUMMY_WORD_LEN + LMAC_MSG_HEADER_SIZE; // = 16
// ============================================================
// 超时常量 (毫秒)
// ============================================================
/// 默认命令超时
pub const DEFAULT_CMD_TIMEOUT_MS: u64 = 2000;
/// 扫描超时
pub const SCAN_TIMEOUT_MS: u64 = 15000;
/// 连接超时
pub const CONNECT_TIMEOUT_MS: u64 = 10000;
/// 断连超时
pub const DISCONNECT_TIMEOUT_MS: u64 = 5000;
// ============================================================
// WiFi 配置常量
// ============================================================
/// 默认 VIF 索引
pub const DEFAULT_VIF_IDX: u8 = 0;
/// 最大 SSID 长度
pub const MAX_SSID_LEN: usize = 32;
/// 最大密码长度
pub const MAX_PASSPHRASE_LEN: usize = 64;
/// 默认信道
pub const DEFAULT_CHANNEL: u8 = 6;
// ============================================================
// 缓冲区大小常量
// ============================================================
/// 命令响应缓冲区大小
pub const CMD_RESPONSE_BUF_SIZE: usize = 512;
/// 扫描结果最大数量
pub const MAX_SCAN_RESULTS: usize = 64;
/// TX 队列大小
pub const TX_QUEUE_SIZE: usize = 128;
/// RX 队列大小
pub const RX_QUEUE_SIZE: usize = 256;
// ============================================================
// 数据掩码常量
// ============================================================
/// 字节低 8 位掩码
pub const U8_MASK: u8 = 0xFF;
/// 字节低 4 位掩码
pub const LOW_NIBBLE_MASK: u8 = 0x0F;
/// u16 低 8 位掩码
pub const U16_LOW_MASK: u16 = 0xFF;
/// u16 高 4 位掩码
pub const U16_HIGH_NIBBLE_MASK: u16 = 0x0F;
/// u16 低 10 位掩码 (用于 msg_id 提取)
pub const MSG_INDEX_MASK: u16 = - 1; // = 0x3FF
// ============================================================
// HostDesc 常量
// ============================================================
/// HostDesc 大小 (字节)
pub const HOSTDESC_SIZE: usize = 28;
/// HostDesc 中 hostid 需要设置 TX 确认标志
pub const HOSTDESC_TX_CFM_FLAG: u32 = 0x8000_0000;
// ============================================================
// 802.11 帧常量
// ============================================================
/// 802.11 帧头部大小 (字节)
pub const IEEE80211_HDR_SIZE: usize = 24;
/// 802.11 管理 Beacon 帧最小大小 (字节)
pub const IEEE80211_BEACON_MIN_SIZE: usize = 36;
/// 802.3 Ethernet 头部大小 (字节)
pub const ETH_HDR_SIZE: usize = 14;
// ============================================================
// EAPOL / 802.1X 常量
// ============================================================
/// 802.1X Authentication EtherType
pub const ETH_P_PAE: u16 = 0x888E;
/// EAPOL 帧版本 (802.1X-2004)
pub const EAPOL_VERSION: u8 = 0x01;
/// EAPOL 帧类型:EAPOL-Packet
pub const EAPOL_PACKET: u8 = 0x00;
/// EAPOL 帧类型:EAPOL-Start
pub const EAPOL_START: u8 = 0x01;
/// EAPOL 帧类型:EAPOL-Logoff
pub const EAPOL_LOGOFF: u8 = 0x02;
/// EAPOL 帧类型:EAPOL-Key
pub const EAPOL_KEY: u8 = 0x03;
/// EAPOL 帧类型:EAPOL-Encapsulated-ASF-Alert
pub const EAPOL_ASF_ALERT: u8 = 0x04;
// ============================================================
// TX Power 常量
// ============================================================
/// 默认 TX Power Index (AIC8801)
pub const DEFAULT_TXPWR_DSSS: u8 = 9;
/// 默认 TX Power Index (2.4GHz OFDM 低速率)
pub const DEFAULT_TXPWR_OFDM_LOW_2G4: u8 = 8;
/// 默认 TX Power Index (2.4GHz OFDM 64QAM)
pub const DEFAULT_TXPWR_OFDM64_2G4: u8 = 8;
/// 默认 TX Power Index (2.4GHz OFDM 256QAM)
pub const DEFAULT_TXPWR_OFDM256_2G4: u8 = 8;
/// 默认 TX Power Index (2.4GHz OFDM 1024QAM)
pub const DEFAULT_TXPWR_OFDM1024_2G4: u8 = 8;
/// 默认 TX Power Index (5GHz OFDM 低速率)
pub const DEFAULT_TXPWR_OFDM_LOW_5G: u8 = 11;
/// 默认 TX Power Index (5GHz OFDM 64QAM)
pub const DEFAULT_TXPWR_OFDM64_5G: u8 = 10;
/// 默认 TX Power Index (5GHz OFDM 256QAM)
pub const DEFAULT_TXPWR_OFDM256_5G: u8 = 9;
/// 默认 TX Power Index (5GHz OFDM 1024QAM)
pub const DEFAULT_TXPWR_OFDM1024_5G: u8 = 9;
/// 默认 TX Power Offset
pub const DEFAULT_TXPWR_OFST: = ;
// ============================================================
// RF 校准常量
// ============================================================
/// RF 校准配置:2.4GHz
pub const RF_CALIB_CFG_24G: u32 = 0x0000_00BF;
/// RF 校准配置:5GHz
pub const RF_CALIB_CFG_5G: u32 = 0x0000_003F;
/// RF 校准参数 alpha
pub const RF_CALIB_PARAM_ALPHA: u32 = 0x0C34_C008;
/// RF 校准 BT 参数
pub const RF_CALIB_BT_PARAM: u32 = 0x0026_4203;
// ============================================================
// MM 启动配置常量
// ============================================================
/// 默认 UAPSD 超时值 (ms)
pub const DEFAULT_UAPSD_TIMEOUT: u32 = 300;
/// 默认低功耗时钟精度 (ppm)
pub const DEFAULT_LP_CLK_ACCURACY: u16 = 20;
// ============================================================
// 时钟配置常量
// ============================================================
// DEFAULT_CLOCK_FREQ, FIRMWARE_START_CLOCK_FREQ 定义在 aic8800_fw::chip::variant,此处不再重复
/// 初始化时钟频率 (Hz)
pub const INIT_CLOCK_FREQ: u32 = 400_000;
/// 高速时钟频率 (Hz)
pub const HIGH_SPEED_CLOCK_FREQ: u32 = 50_000_000;
// ============================================================
// RX 线程常量
// ============================================================
/// RX 硬件头部长度
pub const RX_HWHRD_LEN: usize = 60;
/// RX 对齐
pub const RX_ALIGNMENT: usize = 4;
/// 最大包长度
pub const MAX_PKT_LEN: u16 = 1600;
// ============================================================
// TX 线程常量
// ============================================================
/// TX 缓冲区大小
pub const BUFFER_SIZE: usize = 1536;
/// 流控命令重试次数
pub const FLOW_CTRL_CMD_RETRY: u32 = 10;
/// TX 批量发送上限
pub const TX_BATCH_LIMIT: u32 = 64;
/// TX 队列最大长度
pub const MAX_TX_QUEUE_LEN: usize = 256;
/// 数据帧流控阈值(credits <= 此值时暂停发送)
pub const DATA_FLOW_CTRL_THRESH: u8 = 2;
// ============================================================
// 过滤器常量 (NXMAC RX filter)
//
// 位定义照搬 vendor reg_access.h。注意:早期版本这里的位偏移是错的
// (用了 0/1/2/3),导致 AP 模式收不到 Auth 帧。真实位偏移见下。
// STA 模式实际用的是硬编码的 RWNX_DEFAULT_RX_FILTER 值,一直正确;
// AP 模式之前误用错误位拼出的值,故 Auth/Assoc 被固件丢弃。
// ============================================================
/// 接收发往本机 MAC 的单播帧 (Auth/单播管理帧依赖此位)
pub const NXMAC_ACCEPT_MY_UNICAST_BIT: u32 = 1 << 7;
/// 接收任意单播帧 (混杂)
pub const NXMAC_ACCEPT_UNICAST_BIT: u32 = 1 << 6;
/// 接收多播帧
pub const NXMAC_ACCEPT_MULTICAST_BIT: u32 = 1 << 2;
/// 接收广播帧
pub const NXMAC_ACCEPT_BROADCAST_BIT: u32 = 1 << 3;
/// 接收 Probe Request 帧 (AP 模式)
pub const NXMAC_ACCEPT_PROBE_REQ_BIT: u32 = 1 << 8;
/// 接收 Probe Response 帧
pub const NXMAC_ACCEPT_PROBE_RESP_BIT: u32 = 1 << 9;
/// 接收 Beacon 帧
pub const NXMAC_ACCEPT_BEACON_BIT: u32 = 1 << 10;
/// 接收所有 Beacon
pub const NXMAC_ACCEPT_ALL_BEACON_BIT: u32 = 1 << 13;
/// 接收其他 BSSID 的帧
pub const NXMAC_ACCEPT_OTHER_BSSID_BIT: u32 = 1 << 4;
/// 接收 Auth/Assoc 等"其他管理帧" (AP 接客必需)
pub const NXMAC_ACCEPT_OTHER_MGMT_FRAMES_BIT: u32 = 1 << 15;
/// 接收 QoS-Null 帧
pub const NXMAC_ACCEPT_QO_S_NULL_BIT: u32 = 1 << 28;
/// 接收 QoS 数据帧
pub const NXMAC_ACCEPT_Q_DATA_BIT: u32 = 1 << 26;
/// 接收数据帧
pub const NXMAC_ACCEPT_DATA_BIT: u32 = 1 << 24;
/// 接收 Block-Ack 帧
pub const NXMAC_ACCEPT_BA_BIT: u32 = 1 << 17;
/// STA 模式过滤器:vendor 已验证的硬编码值 (RWNX_DEFAULT_RX_FILTER)。
/// 含 MY_UNICAST/OTHER_MGMT/DATA/MULTICAST/BA 等接收必需位。
pub const STA_MODE_FILTER_DEFAULT: u32 = 0x1502_868C;
/// AP 模式过滤器:在已验证的 STA filter 基础上,叠加 AP 接客所需的
/// ProbeReq(8) + AllBeacon(13) + OtherBSSID(4)。直接派生而非手拼,
/// 确保 Auth 帧依赖的 MY_UNICAST(7)/OTHER_MGMT(15) 一定在位。
/// = 0x1502A79C。对齐 vendor AP set_filter(FIF_PROBE_REQ|FIF_OTHER_BSS|...)。
pub const AP_MODE_FILTER_DEFAULT: u32 = STA_MODE_FILTER_DEFAULT
| NXMAC_ACCEPT_PROBE_REQ_BIT
| NXMAC_ACCEPT_ALL_BEACON_BIT
| NXMAC_ACCEPT_OTHER_BSSID_BIT;