MIB Counter
MIB Counter
SW MAC team
Confidential
SW stack
SSV WiFi SW
Application
Open source SW
Supplicant Customer SW
TCP/IP
OS (Linux) Hostapd
Host (APP) netdev cfg80211
processor
Wi-Fi driver
HCI TX HCI RX
IPC TX IPC RX
WiFi (EMB)
RTOS
processor MACIF
2
Confidential
Host TX data path function
HCI TX handler
wake up
HCI TX task FMAC XMIT
(5)
(1) ./cli mac txq show
(6)
DR HCI XMIT
HCI TX enqueue
(2)
HCI TX Q (4)
HCI TX wakeup
sta 0
Pop Push
front back
sta n
H USB/SDIO
W
3
Confidential
interrupt
Host RX data path function
DR (6)
RX upload
(6)
Pop Push
V front
./cli hci rxq show
back
(5)
(2)
HCI RX handler
(1) (1)
H USB or SDIO
W
4
Confidential
Firmware Task transfer flow function
WiFi
task
TX RX
F
W
IPC TX IPC RX
TX task task RX
TX ISR RX ISR
sta 0, tid 0
WiFi task (10) IPC TX task (8)
Pop
front
WiFi TX enqueue
wake up Push
(7)
WiFi TX handler WiFi task back
F (12)
(9)
IPC TX enqueue
Push (6)
back sta n, tid 7
W (7) (11) WiFi TX Q
WiFi XMIT (5)
Pop
front
IPC TX handler IPC TX FIFO Q
(13) Pop
※ 每個 STA+TID 有固定的 TX credits 可用 , front
1. TX credit 為 0 則不能丟封包到 WiFi task, (4)
2. 每 1 筆 TX 封包放到 WiFi TX Q 後 , 會消耗 1 個 TX credit wake up
3. 待 TX confirm 回 IPC TX task 才會依序補回被消耗的 TX credits (3)
IPC TX task
(2) Push
TX BMU pool TX ISR back
page 0
(1)
H MAC TX HCI TX
page n
W
※ 每個 TX 封包皆是 HCI TX 從 TX BMU pool 分配的 memory
6
Confidential
interrupt
Firmware RX data path function
wake up (4)
IPC RX handler IPC RX enqueue
IPC RX task
Push
F (7) back
(3)
IPC RX Q
W (6)
(7)
HCI RX push Pop
WiFi RX handler
front
(8)
※ 每個送到 IPC RX 封包使用 IPC RX buffer pool 的 memory,
從 MAC RX 用的 RXL buffer 轉存到 IPC RX buffer
wake up
※ IPC RX 將封包 aggr. 在一起 , 轉存到 RX aggr. buffer 後 , (2)
接著將 IPC RX buffer 釋放 , 再把 aggr. 的 RX 封包往 HCI RX 送 WiFi task
RX aggr. buffer IPC RX buffer pool RXL buffer pool
RX ISR
Buffer 0
Buffer 0 Buffer 0
(1)
H
Buffer n
HCI RX Buffer n Buffer n MAC RX
W
7
Confidential ※ MAC RX 封包使用 RXL buffer pool 的 memory
MIB counter
# Item Plan
8
Confidential
Command mapping
Host
FMAC TX: ./cli mac txq show
RX: ./cli mac rxq show
Host HCI TX: ./cli hci txq show
RX: ./cli hci rxq show
HWIF TX/RX: ./cli mib hwif
HW MIB counter TX: ./cli mib tx
RX: ./cli mib rx
HW MIB table register ./cli mib list
HW MIB table reset ./cli mib reset
FW
SW data path mib dbg
HW MIB table register mib list
HW MIB table reset mib reset
SW used buffer mib buf
mib pktdump length [length]
9
Confidential
Host
1. SW counter
1) TX: 顯示 HCI TXQ status, HWIF SEND counter
2) RX: 顯示 HCI RXQ counter, HWIF READ counter
2. HW counter
1) TX: 顯示 HW MIB TX
2) RX: 顯示 HW MIB RX
3) 顯示 HW MIB table 的 register values
10
Confidential
Firmware
1. SW counter
1) Data path counter
2. HW counter
1) 顯示 HW MIB table 的 register values
11
Confidential
SW counter (firmware)
1. IPC TX
1) total ok count
?>mib dbg
(host 到 fw, fw 有往後處理的封包 ( 含 packet & msg) 總數 , 不代表 tx 到 air 個數 )
2) total free count [ipc]
(host 到 fw, fw 釋放的封包 ( 含 packet & msg) 總數 , 小於等於 ok 個數 , 而 host 沒 tx 時應相等於 ok 個數 ) tx ok(11113), free(11113), error(0)
3) total error count tx fifo q = 0
(host 到 fw, fw 發現異常 (page id error) 的封包總數 , 應為 0, 大於 0 可能 HW 異常 ) rx q = 0
4) tx fifo ready count IPC TX FIFO Q rx msg q = 0
(ipc tx fifo q 中待處理封包個數 ) rx msg free = 3
IPC TX Q
5) tx ready count [wifi]
(ipc tx q 中待處理封包個數 , 因 tx q 依據 sta+tid 區分 , 個數眾多 , 故只有某 tx q 待處理封包個數大於等於 1 時才會顯示 ) tx q = 0
rx buf free = 12
2. IPC RX [mac]
IPC RX Q
1) rx ready cnt txl ac(0) q = 0
(ipc rx q 中待處理封包個數 ) txl ac(1) q = 0
2) rx msg ready cnt IPC RX MSG Q txl ac(2) q = 0
(ipc rx msg q 中待處理封包個數 ) txl ac(3) q = 0
3) rx msg buffer free count
IPC RX MSG buffer txl cur = 0
(ipc rx 剩餘給 msg 使用的 buffer 個數 )
rxl total = 171259
rxl no buf = 13074
3. WiFi task WiFi TX Q
drop dup rx = 13
1) tx current count
(wifi tx q 待處理封包個數 )
IPC RX buffer
2) rx buffer free count
(wifi rx 剩餘給封包使用的 buffer 個數 )
4. TXL TX
1) ppdu current count in each queue
(txl 的 ac q 上目前的 ppdu 個數 )
2) packet current count in tx path
(txl data path 上目前的封包個數 )
5. RXL RX
1) rxl total cnt
(rxl 收到的封包個數 )
2) rxl no rx buf cnt
(rxl 從 wifi rx 要不到給封包使用的 buffer 次數 ) 12
Confidential
HW MIB register
14
Confidential
HCI status - Host
# ./cli hci txq show # ./cli hci rxq show
>> txq[0] pause 0 lock 0 cur_qsize 0 >> rxq cur_qsize 0, rx packet 28259, post rx packet 100458
Total 11091 frame sent
>> txq[1] pause 0 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[2] pause 0 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[3] pause 0 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[4] pause 0 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[5] pause 0 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[6] pause 0 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[7] pause 0 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[8] pause 0 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[9] pause 0 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[10] pause 1 lock 0 cur_qsize 0
Total 0 frame sent
>> txq[11] pause 0 lock 0 cur_qsize 0
Total 10 frame sent
15
Confidential
HWIF status - Host
# ./cli mib hwif
===== HWIF status =====
- TX
Total 2454 frame sent
- RX
Total 17173 frame received
16
Confidential
MIB TX/RX - Host
# ./cli mib tx # ./cli mib rx
===== MAC TX status ===== ===== MAC RX status =====
- EDCA set - Basic set
tid 0: FCS error : 38922, PHY error : 7679, FIFO overflow: 578,
Unicast MPDU: 2686, Group MPDU : 0,
Failed : 0, Retry : 33, ACK failure : 109, - EDCA set
RTS success : 0, RTS failure : 0, tid 0:
tid 1: Unicast MPDU: 163873, Group MPDU : 19418,
Unicast MPDU: 7, Group MPDU : 12, Other MPDU : 6505, Retry MPDU : 32365,
Failed : 0, Retry : 0, ACK failure : 0, tid 1:
RTS success : 0, RTS failure : 0, Unicast MPDU: 0, Group MPDU : 0,
tid 2: Other MPDU : 0, Retry MPDU : 0,
Unicast MPDU: 0, Group MPDU : 0, tid 2:
Failed : 0, Retry : 0, ACK failure : 0, Unicast MPDU: 0, Group MPDU : 0,
RTS success : 0, RTS failure : 0, Other MPDU : 0, Retry MPDU : 0,
tid 3: tid 3:
Unicast MPDU: 0, Group MPDU : 0, Unicast MPDU: 0, Group MPDU : 0,
Failed : 0, Retry : 0, ACK failure : 0, Other MPDU : 0, Retry MPDU : 0,
RTS success : 0, RTS failure : 0, tid 4:
tid 4: Unicast MPDU: 0, Group MPDU : 0,
Unicast MPDU: 2, Group MPDU : 0, Other MPDU : 0, Retry MPDU : 0,
Failed : 1, Retry : 0, ACK failure : 290, tid 5:
RTS success : 0, RTS failure : 0, Unicast MPDU: 0, Group MPDU : 0,
tid 5: Other MPDU : 0, Retry MPDU : 0,
Unicast MPDU: 0, Group MPDU : 0, tid 6:
Failed : 0, Retry : 0, ACK failure : 0, Unicast MPDU: 0, Group MPDU : 0,
RTS success : 0, RTS failure : 0, Other MPDU : 0, Retry MPDU : 0,
tid 6: tid 7:
Unicast MPDU: 2, Group MPDU : 0, Unicast MPDU: 0, Group MPDU : 0,
Failed : 0, Retry : 2, ACK failure : 3, Other MPDU : 0, Retry MPDU : 0,
RTS success : 0, RTS failure : 0,
tid 7: - A-MPDU set
Unicast MPDU: 0, Group MPDU : 0, Unicast : 4852, Group : 0, Other : 0,
Failed : 0, Retry : 0, ACK failure : 0, MPDUs : 130108, Bytes : 219766504,
RTS success : 0, RTS failure : 0, CRC error : 736, I. BAR FAIL : 282, E. BAR FAIL : 289,
- A-MPDU set
A-MPDUs : 3105, MPDUs : 13017, Bytes : 18508943,
17
Confidential
MIB table register - Host
# ./cli mib list
08000800: 0001607e 00007e88 00001afc 000001b4 00000000 00000000 00000000 00000000
08000820: 00000000 00000000 00000000 00000000 00000a7b 00000007 00000000 00000000
08000840: 00000002 00000000 00000002 00000000 00000000 0000000c 00000000 00000000
08000860: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000880: 00000001 00000000 00000000 00000000 00000020 00000000 00000000 00000000
080008a0: 00000000 00000000 00000002 00000000 00000000 00000000 00000000 00000000
080008c0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
080008e0: 00000000 00000000 00000000 00000000 00000069 00000000 00000000 00000000
08000900: 00000122 00000000 00000003 00000000 0001d773 00000000 00000000 00000000
08000920: 00000000 00000000 00000000 00000000 000044b1 00000000 00000000 00000000
08000940: 00000000 00000000 00000000 00000000 00001701 00000000 00000000 00000000
08000960: 00000000 00000000 00000000 00000000 00005d8e 00000000 00000000 00000000
08000980: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
080009a0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
080009c0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
080009e0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000a00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000a20: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000a40: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000a60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000a80: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000aa0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000ac0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000ae0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000b00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000b20: 00000000 00000000 00000000 00000000 00000c21 000032d9 011a6c8f 00000de8
08000b40: 00000000 00000000 00017614 09a55942 00000206 0000011a 00000121 00000000
08000b60: 00000000 00000000 00000000 00000000 00000687 000078bd 00000000 00000000
08000b80: 00006288 00001d38 00000000 00000000 0000000c 00000233 0000033a 000005e3
08000ba0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000bc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
08000be0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000
18
The details to see Confidential
the reference “MIB table” .
Data path - FW (1/2)
?>mib dbg
[ipc]
tx ok(11113), free(11113), error(0)
tx fifo q = 0
rx q = 0
rx msg q = 0
rx msg free = 3
[wifi]
tx q = 0
rx buf free = 12
[mac]
txl ac(0) q = 0
txl ac(1) q = 0
txl ac(2) q = 0
txl ac(3) q = 0
txl cur = 0
rxl total = 171259
rxl no buf = 13074
drop dup rx = 13
19
Confidential
Data path - FW (2/2)
[ipc]
tx ok TX 成功放到 IPC TX Q 總個數 ( 不等於打到 air)
tx free TX 成功 free 總個數 ( 小於等於 TX OK 總個數 )
tx error TX FIFO 異常總個數 (TX FIFO error 總個數 )
tx fifo q TX FIFIO Q 待處理個數
rx q RX Q 待處理丟到 HW HCI 個數
rx msg q RX MSG Q 待處理丟到 HW HCI 個數
rx msg free RX MSG 用的 buffer free 個數
[wifi]
tx q WiFi TX Q 待處理個數
rx buf free RX 用的 buffer free 個數
[mac]
txl ac(0) q txl BK 待處理的 PPDU 個數
txl ac(1) q txl BE 待處理的 PPDU 個數
txl ac(2) q txl VI 待處理的 PPDU 個數
txl ac(3) q txl VO 待處理的 PPDU 個數
txl cur txl data path 上的 packet 個數
rxl total rxl 收到的 packet 總個數
rxl no buf rxl 要不到 IPC RX buffer 總次數
drop dup rx 20
RX drop 重複收到的
Confidential packet 個數
MIB table register - FW
?>mib list 080009f0: 0x00000000 0x00000000 0x00000000 0x00000000
08000a00: 0x00000000 0x00000000 0x00000000 0x00000000
00000000: 0x00017fce 0x00009e90 0x00001fd3 0x00000251 08000a10: 0x00000000 0x00000000 0x00000000 0x00000000
08000810: 0x00000000 0x00000000 0x00000000 0x00000000 08000a20: 0x00000000 0x00000000 0x00000000 0x00000000
08000820: 0x00000000 0x00000000 0x00000000 0x00000000 08000a30: 0x00000000 0x00000000 0x00000000 0x00000000
08000830: 0x00000a85 0x00000007 0x00000000 0x00000000 08000a40: 0x00000000 0x00000000 0x00000000 0x00000000
08000840: 0x00000002 0x00000000 0x00000002 0x00000000 08000a50: 0x00000000 0x00000000 0x00000000 0x00000000
08000850: 0x00000000 0x0000000c 0x00000000 0x00000000 08000a60: 0x00000000 0x00000000 0x00000000 0x00000000
08000860: 0x00000000 0x00000000 0x00000000 0x00000000 08000a70: 0x00000000 0x00000000 0x00000000 0x00000000
08000870: 0x00000000 0x00000000 0x00000000 0x00000000 08000a80: 0x00000000 0x00000000 0x00000000 0x00000000
08000880: 0x00000001 0x00000000 0x00000000 0x00000000 08000a90: 0x00000000 0x00000000 0x00000000 0x00000000
08000890: 0x00000022 0x00000000 0x00000000 0x00000000 08000aa0: 0x00000000 0x00000000 0x00000000 0x00000000
080008a0: 0x00000000 0x00000000 0x00000002 0x00000000 08000ab0: 0x00000000 0x00000000 0x00000000 0x00000000
080008b0: 0x00000000 0x00000000 0x00000000 0x00000000 08000ac0: 0x00000000 0x00000000 0x00000000 0x00000000
080008c0: 0x00000000 0x00000000 0x00000000 0x00000000 08000ad0: 0x00000000 0x00000000 0x00000000 0x00000000
080008d0: 0x00000000 0x00000000 0x00000000 0x00000000 08000ae0: 0x00000000 0x00000000 0x00000000 0x00000000
080008e0: 0x00000000 0x00000000 0x00000000 0x00000000 08000af0: 0x00000000 0x00000000 0x00000000 0x00000000
080008f0: 0x00000071 0x00000000 0x00000000 0x00000000 08000b00: 0x00000000 0x00000000 0x00000000 0x00000000
08000900: 0x00000122 0x00000000 0x00000003 0x00000000 08000b10: 0x00000000 0x00000000 0x00000000 0x00000000
08000910: 0x00028022 0x00000000 0x00000000 0x00000000 08000b20: 0x00000000 0x00000000 0x00000000 0x00000000
08000920: 0x00000000 0x00000000 0x00000000 0x00000000 08000b30: 0x00000c21 0x000032d9 0x011a6c8f 0x000012f4
08000930: 0x00004f19 0x00000000 0x00000000 0x00000000 08000b40: 0x00000000 0x00000000 0x0001fc3c 0x0d195ee8
08000940: 0x00000000 0x00000000 0x00000000 0x00000000 08000b50: 0x000002e0 0x0000011a 0x00000121 0x00000000
08000950: 0x000019ae 0x00000000 0x00000000 0x00000000 08000b60: 0x00000000 0x00000000 0x00000000 0x00000000
08000960: 0x00000000 0x00000000 0x00000000 0x00000000 08000b70: 0x000006bb 0x0000a038 0x00000000 0x00000000
08000970: 0x00007e84 0x00000000 0x00000000 0x00000000 08000b80: 0x00006fcd 0x00002792 0x00000000 0x00000000
08000980: 0x00000000 0x00000000 0x00000000 0x00000000 08000b90: 0x0000000c 0x0000023a 0x00000341 0x000005ee
08000990: 0x00000000 0x00000000 0x00000000 0x00000000 08000ba0: 0x00000000 0x00000000 0x00000000 0x00000000
080009a0: 0x00000000 0x00000000 0x00000000 0x00000000 08000bb0: 0x00000000 0x00000000 0x00000000 0x00000000
080009b0: 0x00000000 0x00000000 0x00000000 0x00000000 08000bc0: 0x00000000 0x00000000 0x00000000 0x00000000
080009c0: 0x00000000 0x00000000 0x00000000 0x00000000 08000bd0: 0x00000000 0x00000000 0x00000000 0x00000000
080009d0: 0x00000000 0x00000000 0x00000000 0x00000000 08000be0: 0x00000000 0x00000000 0x00000000 0x00000000
080009e0: 0x00000000 0x00000000 0x00000000 0x00000000 08000bf0: 0x00000000 0x00000000 0x00000000
21
The details to see Confidential
the reference “MIB table” .
MIB table (1/8)
22
Confidential
MIB table (2/8)
23
Confidential
MIB table (3/8)
24
Confidential
MIB table (4/8)
25
Confidential
MIB table (5/8)
26
Confidential
MIB table (6/8)
27
Confidential
MIB table (7/8)
28
Confidential
MIB table (8/8)
29
Confidential
Black board for paste code
30
Confidential
Thank you
Confidential