Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reverse Engineering libbl602_wifi #29

Draft
wants to merge 150 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
150 commits
Select commit Hold shift + click to select a range
7486028
ignore build folder
Yangff Jul 21, 2021
39ab9ce
Plan: replace object files in libbl602_wifi one by one
Yangff Jul 21, 2021
d17771e
return field after added
Yangff Jul 21, 2021
80db0ac
add more reg from phy_bl602.o
Yangff Jul 21, 2021
fed3a5a
update mdm.h with regs found in phy_bl602.o
Yangff Jul 21, 2021
8898ba5
add missing bit
Yangff Jul 21, 2021
2a14d5a
add bit
Yangff Jul 21, 2021
b778274
add missing rxndpnstsmax
Yangff Jul 21, 2021
427e66d
generate agc code automatically
Yangff Jul 21, 2021
1eda44a
add used functions in header
Yangff Jul 21, 2021
2e9d772
finish phy_bl602
Yangff Jul 21, 2021
d395b9a
support parse bl svd file and find reg with addr and mask
Yangff Jul 22, 2021
ad428c3
no longer need to print the access code
Yangff Jul 22, 2021
d77652c
add missing bit
Yangff Jul 21, 2021
f910c82
add bit
Yangff Jul 21, 2021
cfbeae3
add missing rxndpnstsmax
Yangff Jul 21, 2021
26793ff
add bz_phyfunc
Yangff Jul 22, 2021
377b3c2
add bz_phy.h
Yangff Jul 22, 2021
3ce657a
add support for 0x
Yangff Jul 22, 2021
55be85b
foreach in scan
Yangff Jul 22, 2021
7261e1c
add support for 0x
Yangff Jul 22, 2021
ec71269
fix bz_phy.c
Yangff Jul 22, 2021
f32ad88
add bz_phy_reset
Yangff Jul 22, 2021
c98ef5a
new header
Yangff Jul 22, 2021
fc7f9f8
support parse bl svd file and find reg with addr and mask
Yangff Jul 22, 2021
58095db
add bz_phyfunc
Yangff Jul 22, 2021
c8111a7
more stable name
Yangff Jul 23, 2021
5a877e6
add extra information from DWARF
Yangff Jul 24, 2021
95cf6ec
add extra names
Yangff Jul 24, 2021
80069a9
import other DWARF info and done
Yangff Jul 24, 2021
16d67b8
padding to 32
Yangff Jul 24, 2021
89d1c9c
done
Yangff Jul 24, 2021
5968b95
put irqmacccatimeouten as field name
Yangff Jul 24, 2021
bdac239
fix agc
Yangff Jul 24, 2021
5ab3eca
fix var names
Yangff Jul 24, 2021
c158eea
fix regs and add phy_adapt
Yangff Jul 25, 2021
e7b27ce
fix error and warn
Yangff Jul 25, 2021
81745e5
add offset fixed svd
Yangff Jul 25, 2021
17a12b1
bug fix for field iterator
Yangff Jul 25, 2021
e3d7c8f
add phy_hal
Yangff Jul 25, 2021
da8f1d5
add phy_helper
Yangff Jul 25, 2021
b346a66
add rf_priv header
Yangff Jul 25, 2021
49a3fd6
fix return true
Yangff Jul 25, 2021
1106214
add tcal
Yangff Jul 25, 2021
9088483
add trpc
Yangff Jul 25, 2021
1ffd6cb
fix redefinition and memset
Yangff Jul 25, 2021
184aa2c
using rv32 and c11
Yangff Jul 25, 2021
f4959fc
add memcpy and min/max
Yangff Jul 25, 2021
f20f255
fix type
Yangff Jul 25, 2021
9079d1e
add phyif_utils
Yangff Jul 25, 2021
0a747be
add rf
Yangff Jul 25, 2021
7144472
typo
Yangff Jul 25, 2021
306eed0
update phy
Yangff Jul 25, 2021
9195c86
Merge branch 'bl602_wifi' into nc_wifi
Yangff Jul 26, 2021
c2828b0
update rf header
Yangff Jul 26, 2021
ddf9615
back to * -510
Yangff Jul 30, 2021
29e8a77
fix ;
Yangff Sep 22, 2021
ceb548b
headers for SOC
Yangff Oct 28, 2021
63427a3
partial link library
Yangff Oct 28, 2021
ad04214
reg scanner
Yangff Oct 28, 2021
9f91b71
preliminary decompiled code
Yangff Oct 28, 2021
50d981a
add clang build option
Yangff Dec 19, 2021
c126e6a
add github action
Yangff Dec 19, 2021
e85555d
update command
Yangff Dec 19, 2021
d140eee
update artifact path
Yangff Dec 19, 2021
babe32b
update path
Yangff Dec 19, 2021
09b7916
add ble
Yangff Dec 19, 2021
b1b6e33
implementation of bl602 wifi phy with reverse eng and existed code
Yangff Dec 19, 2021
28e501e
update readme
Yangff Dec 19, 2021
c5250a0
fix dup symbols
Yangff Dec 21, 2021
d0fa9a1
add rf_dump_status
Yangff Dec 21, 2021
5b994a0
fix volatile attr in the pointer
Yangff Dec 23, 2021
d9ccd5d
modify retry logic
Yangff Dec 23, 2021
65ad969
change volatile order in the type
Yangff Dec 23, 2021
9803c20
add some ignores
Yangff Dec 23, 2021
d65e629
move macro to global
Yangff Dec 23, 2021
05d666f
adding sysctrl and ipc
Yangff Dec 23, 2021
becea0d
update IPC regs
Yangff Dec 23, 2021
1845f40
use new macro
Yangff Dec 23, 2021
6537668
reduce warning
Yangff Dec 23, 2021
db03980
sysctrl_init()
Yangff Dec 23, 2021
0231b45
ipc and related headers
Yangff Dec 23, 2021
c1258fa
bl602_demo_wifi.elf built w/o -Wl,--gc-sections
Yangff Dec 23, 2021
935e56a
use freertos ram by default
Yangff Dec 23, 2021
450227c
add intc and fix bug on agc.h
Yangff Dec 23, 2021
d95a37f
add intc from alios
Yangff Dec 23, 2021
501051b
fix irq_index size
Yangff Dec 23, 2021
748ad2e
add hals on hal folder
Yangff Dec 23, 2021
5757b40
update hal location
Yangff Dec 23, 2021
a384bd2
add intc
Yangff Dec 23, 2021
fe5858e
fix intc
Yangff Dec 23, 2021
43d8932
fix intc
Yangff Dec 23, 2021
0a5f4ad
add hal_dma
Yangff Dec 23, 2021
c95092d
add diag_trigger
Yangff Dec 23, 2021
7e68b0b
update mac core
Yangff Dec 24, 2021
f5aae1f
add coexAutoPTIAdjEnable
Yangff Dec 24, 2021
d48da67
add arch related init code
Yangff Dec 24, 2021
0c3f483
add a useless enum
Yangff Dec 24, 2021
ab03273
use ll.h
Yangff Dec 24, 2021
29dfc41
remove dup ipc_host_disable_irq_e2a(void)
Yangff Dec 24, 2021
60f8152
satisfying bl602 linker script
Yangff Dec 24, 2021
db41e5a
fix txdesc copy
Yangff Dec 24, 2021
56ae7f5
add finished drivers
Yangff Dec 24, 2021
262c848
fix gcc build
Yangff Dec 24, 2021
7b1f08e
add header
Yangff Dec 24, 2021
f104c24
remove duplicated bz_phy_reset
Yangff Dec 24, 2021
3c14da3
add includes
Yangff Dec 24, 2021
26f7119
use stdbool.h for bool
Yangff Dec 24, 2021
9852398
add modules/common
Yangff Dec 24, 2021
181c583
ke_event
Yangff Dec 25, 2021
7cc6378
add some common functions
Yangff Dec 25, 2021
5331917
fix ABS_TIMER array
Yangff Dec 25, 2021
73b6ee3
prevent included twice
Yangff Dec 25, 2021
6f745be
fix ABS_TIMER
Yangff Dec 25, 2021
f1b74df
use ke_event
Yangff Dec 25, 2021
9252f4a
ke_task
Yangff Dec 25, 2021
3774c8d
memory management
Yangff Dec 25, 2021
7ff1855
ke_task
Yangff Dec 25, 2021
081015b
add return value
Yangff Dec 25, 2021
c9842db
other ke impl
Yangff Dec 25, 2021
8bef6a3
use assert in arch
Yangff Dec 25, 2021
8cf8ace
use ke_param2msg and ke_msg2param
Yangff Dec 25, 2021
5b5be2c
Finish ke_task
Yangff Dec 25, 2021
fc3bd59
mac
Yangff Dec 25, 2021
f692811
mac_ie
Yangff Dec 25, 2021
b5ae586
modules/dbg
Yangff Dec 26, 2021
18a9299
lmac/bl
Yangff Dec 26, 2021
3faaafb
add memcmp
Yangff Dec 28, 2021
3b6915c
add ASSERT_WARN
Yangff Dec 28, 2021
85d5ef6
moving config to seperated file
Yangff Dec 28, 2021
76d15fc
use config
Yangff Dec 28, 2021
65bf905
lmac/chan
Yangff Dec 28, 2021
3b1ba35
add CHAN_SWITCH_TO_DUR
Yangff Dec 28, 2021
cd4a68f
enable lmac/chan
Yangff Dec 28, 2021
c19b312
format, using space
Yangff Dec 28, 2021
448cf71
working on lmac/mm
Yangff Dec 30, 2021
de1eef4
update phy_init decl
Yangff Jan 1, 2022
c7761ee
add encr_ram_config
Yangff Jan 1, 2022
a72bb1c
add mm_task and mm_timer
Yangff Jan 1, 2022
9ff4dc2
finish mm_hw_config_handler
Yangff Jan 1, 2022
9086529
add more constants
Yangff Jan 1, 2022
126c182
move ipc_emb_tx_q_has_data to header
Yangff Jan 3, 2022
7b2dc52
update headers
Yangff Jan 3, 2022
cc218f1
add mm_traffic_req_ind
Yangff Jan 3, 2022
e395df6
add BCN_MAX_CSA_CPT
Yangff Jan 3, 2022
bb20810
add mm_bcn
Yangff Jan 3, 2022
4abff2d
adding new codes
Yangff Jan 31, 2023
3c5d1c0
vif done, only txl left
Yangff Feb 1, 2023
1603c92
typo
Yangff Feb 1, 2023
d10e3e2
working on txl
Yangff Feb 6, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add more constants
  • Loading branch information
Yangff committed Jan 1, 2022
commit 9086529ff12ae2576394e9650fc011fdf538aa1f
18 changes: 18 additions & 0 deletions src/include/bl602_wifi/hal/hal_desc.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@

#ifndef _HAL_DESC_H_
#define _HAL_DESC_H_
#include <blconfig.h>

#include <stdint.h>
#include <phy_rf/phy.h>

Expand Down Expand Up @@ -169,4 +171,20 @@ struct tx_agg_desc {
/// Descriptor done bit: Set by SW for TX DMA
#define DESC_DONE_SW_TX_BIT CO_BIT(30)

// TODO: check why tx_hw_descX are not existing in binary
// It seems that the entire tx_swdesc is not exists in bl602
extern struct dma_desc bcn_dwnld_desc;
extern struct rx_dmadesc rx_dma_hdrdesc[]; // NX_RXDESC_CNT
extern struct rx_payloaddesc rx_payload_desc[]; // NX_RX_PAYLOAD_DESC_CNT
extern uint32_t rx_payload_desc_buffer[NX_RX_PAYLOAD_DESC_CNT][212];
extern struct tx_hw_desc tx_hw_desc0[RW_USER_MAX * NX_TXDESC_CNT0];
extern struct tx_hw_desc tx_hw_desc1[RW_USER_MAX * NX_TXDESC_CNT0];
extern struct tx_hw_desc tx_hw_desc2[RW_USER_MAX * NX_TXDESC_CNT0];
extern struct tx_hw_desc tx_hw_desc3[RW_USER_MAX * NX_TXDESC_CNT0];
#if (NX_BEACONING)
/// Array of HW descriptors for BCN queue
extern struct tx_hw_desc tx_hw_desc4[NX_TXDESC_CNT4];
#endif
extern struct tx_cfm_tag tx_hw_cfms[RW_USER_MAX * NX_TXDESC_CNT0];

#endif
68 changes: 56 additions & 12 deletions src/include/bl602_wifi/lmac/tx/txl/txl_frame.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
#include <lmac/tx/txl/txl_buffer.h>
#include <lmac/tx/tx_swdesc.h>

#include <modules/mac/mac_frame.h>

#include <blconfig.h>

typedef void (*cfm_func_ptr)(void *, uint32_t);
struct txl_frame_cfm_tag {
Expand All @@ -28,20 +31,61 @@ struct txl_frame_env_tag {
};

extern struct txl_frame_env_tag txl_frame_env;
extern uint32_t txl_frame_pool[147];
extern uint32_t txl_tim_ie_pool[2];
extern uint32_t txl_tim_bitmap_pool[63];
extern struct tx_pbd txl_tim_desc[2];
extern uint32_t txl_bcn_pool[211];
extern struct tx_hw_desc txl_bcn_hwdesc_pool[2];
extern struct tx_cfm_tag txl_bcn_hwdesc_cfms[2];
extern struct tx_pbd txl_bcn_end_desc[2];
extern struct txl_buffer_control txl_bcn_buf_ctrl[2];
extern struct tx_hw_desc txl_frame_hwdesc_pool[4];
extern struct tx_cfm_tag txl_frame_hwdesc_cfms[4];

/// TX frame buffer pool
// (332 + NX_TXFRAME_LEN) / 4 == 147
// NX_TXFRAME_LEN == 256
extern uint32_t txl_frame_pool[NX_TXFRAME_CNT][(sizeof(struct txl_buffer_tag) + NX_TXFRAME_LEN) / 4];

#if NX_BCN_AUTONOMOUS_TX
/// Pool of TIM IE buffers
extern uint32_t txl_tim_ie_pool[NX_VIRT_DEV_MAX][CO_ALIGN4_HI(MAC_TIM_BMP_OFT + 1)/4];
/// Pool of TIM virtual bitmap
extern uint32_t txl_tim_bitmap_pool[NX_VIRT_DEV_MAX][CO_ALIGN4_HI(MAC_TIM_SIZE)/4];
/// Pool of TIM descriptors
extern struct tx_pbd txl_tim_desc[NX_VIRT_DEV_MAX][2];
/// Beacon buffer pool
// 211 == (332 + NX_BCNFRAME_LEN) / 4
extern uint32_t txl_bcn_pool[NX_VIRT_DEV_MAX][(sizeof(struct txl_buffer_tag) + NX_BCNFRAME_LEN) / 4];
/// TX beacon header descriptor pool
extern struct tx_hw_desc txl_bcn_hwdesc_pool[NX_VIRT_DEV_MAX];
/// TX payload buffer descriptor for the post-TIM part of the beacon
extern struct tx_pbd txl_bcn_end_desc[NX_VIRT_DEV_MAX];
extern struct txl_buffer_control txl_bcn_buf_ctrl[NX_VIRT_DEV_MAX];

#if (NX_P2P_GO)
/// Pool of P2P NOA payload descriptors
extern struct tx_pbd txl_p2p_noa_desc[NX_VIRT_DEV_MAX];
/// Pool of P2P NOA Attributes
extern uint16_t txl_p2p_noa_ie_pool[NX_VIRT_DEV_MAX][P2P_NOA_IE_BUFFER_LEN];
#endif //(NX_P2P_GO)

#if (RW_MESH_EN)
// Payload Descriptor for additional IEs of Mesh Beacon
extern struct tx_pbd txl_mesh_add_ies_desc[RW_MESH_VIF_NB];
// Buffer containing the additional IEs of Mesh Beacon
extern struct mesh_add_ies_tag txl_mesh_add_ies[RW_MESH_VIF_NB];
#endif //(RW_MESH_EN)
#endif //(NX_BCN_AUTONOMOUS_TX)

/// TX frame header descriptor pool
extern struct tx_hw_desc txl_frame_hwdesc_pool[NX_TXFRAME_CNT];

/// Default policy table for 2.4GHz band
extern struct txl_buffer_control txl_buffer_control_24G;
/// Default policy table for 5GHz band
extern struct txl_buffer_control txl_buffer_control_5G;
extern struct tx_policy_tbl txl_frame_pol_24G ;
extern struct tx_policy_tbl txl_frame_pol_5G ;

extern struct txl_buffer_control txl_frame_buf_ctrl[NX_TXFRAME_CNT];
extern struct tx_cfm_tag txl_bcn_hwdesc_cfms[NX_VIRT_DEV_MAX];

extern struct tx_cfm_tag txl_frame_hwdesc_cfms[NX_TXFRAME_CNT];

extern struct txl_buffer_control txl_buffer_control_24G;
extern struct txl_buffer_control txl_buffer_control_5G;
extern struct txl_buffer_control txl_frame_buf_ctrl[4];
extern struct txl_buffer_control txl_frame_buf_ctrl[NX_TXFRAME_CNT];

void txl_frame_init(bool reset);
void txl_frame_init_desc(struct txl_frame_desc_tag *frame, struct txl_buffer_tag *buffer, struct tx_hw_desc *hwdesc, struct txl_buffer_control *bufctrl);
Expand Down
62 changes: 62 additions & 0 deletions src/include/blconfig.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
#ifndef _BLCONFIG_H_
#define _BLCONFIG_H_

// from hal_machw_init nxmac_max_rx_length_set(0x1000)
#define CFG_AMSDU_4K

#ifndef CFG_TXDESC
#define CFG_TXDESC 4
#endif
Expand Down Expand Up @@ -42,6 +45,54 @@
#define RW_WAPI_EN 0
#define NX_VHT 0

/// == 13 not 17, because of the loop in rxl_hwdesc_init
/// Number of RX descriptors (SW and Header descriptors)
#define NX_RXDESC_CNT 13

/// Maximum size of A-MSDU supported in reception
#if defined CFG_AMSDU_4K
#define RWNX_MAX_AMSDU_RX 4096
#elif defined CFG_AMSDU_8K
#define RWNX_MAX_AMSDU_RX 8192
#elif defined CFG_AMSDU_12K
#define RWNX_MAX_AMSDU_RX 12288
#endif

/// Beamformer support
#if defined CFG_BFMER
#define RW_BFMER_EN 1
#define RW_BFR_TXFRAME_CNT CFG_MU_CNT
#else //defined CFG_BFMER
#define RW_BFMER_EN 0
#define RW_BFR_TXFRAME_CNT 0
// Disable MU-MIMO TX if Beamformer is not supported
#undef CFG_MU_CNT
#define CFG_MU_CNT 1
#endif //defined CFG_BFMER

/// Number of users supported
#define RW_USER_MAX CFG_MU_CNT

#if (NX_BEACONING)
/// Number of TX descriptors available in the system (BCN)
#define CFG_TXDESC4 4
#define NX_TXDESC_CNT4 CFG_TXDESC4
#if (NX_TXDESC_CNT4 & (NX_TXDESC_CNT4 - 1))
#error "Not a power of 2"
#endif
#endif

#define NX_BCNFRAME_LEN 512

// == 4 for some reason?
#define NX_TXFRAME_CNT NX_VIRT_DEV_MAX + RW_BFR_TXFRAME_CNT + 2

#if (NX_P2P)
#define NX_TXFRAME_LEN 384
#else
#define NX_TXFRAME_LEN 256
#endif //(NX_P2P)

/// Wireless Mesh Networking support
#if defined CFG_MESH
#define RW_MESH_EN (1)
Expand All @@ -62,6 +113,17 @@
#define RW_MESH_PATH_NB (0)
#define RW_MESH_PROXY_NB (0)
#endif //defined CFG_MESH

/// RX Payload buffer size
#define NX_RX_PAYLOAD_LEN 848

/// Number of RX payload descriptors - defined to be twice the maximum A-MSDU size
/// plus one extra one used for HW flow control
// NX_RX_PAYLOAD_DESC_CNT == 13 based on sizeof rx_payload_desc
// RWNX_MAX_AMSDU_RX / NX_RX_PAYLOAD_LEN == 6
// * 2 only gets 9, I guess it's *3
#define NX_RX_PAYLOAD_DESC_CNT ((RWNX_MAX_AMSDU_RX / NX_RX_PAYLOAD_LEN) * 3 + 1)

#define CFG_MODE_SWITCH 0
#undef CONFIG_AOS_MESH

Expand Down