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 mm_task and mm_timer
  • Loading branch information
Yangff committed Jan 1, 2022
commit a72bb1c7c895d02d2832736f1664deaa1b56e490
844 changes: 844 additions & 0 deletions src/bl602_wifi/ip/lmac/mm/mm_task.c

Large diffs are not rendered by default.

102 changes: 102 additions & 0 deletions src/bl602_wifi/ip/lmac/mm/mm_timer.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#include <blconfig.h>

#include <stdbool.h>

#include <lmac/mm/mm_timer.h>
#include <lmac/mm/mm.h>

#include <modules/ke/ke_event.h>

#include <modules/common/co_list.h>

#include <hal/hal_machw.h>

#include <phy/mac_pl.h>
#include <phy/mac_core.h>

#include <arch/rv32i/ll.h>

#include <utils.h>

struct mm_timer_env_tag mm_timer_env;

void mm_timer_init(void) {
co_list_init(&mm_timer_env.prog);
}

static void mm_timer_hw_set(struct mm_timer_tag *timer) {
__disable_irq();
if (!timer) {
MAC_PL->TIMERS_INT_UN_MASK.maskabsTimers7 = 0;
} else {
MAC_CORE->ABS_TIMER[7] = timer->time;
if (MAC_PL->TIMERS_INT_UN_MASK.maskabsTimers7 == 0) {
MAC_PL->TIMERS_INT_EVENT_CLEAR.value = 0x80;
MAC_PL->TIMERS_INT_UN_MASK.maskabsTimers7 = 1;
}
}
__enable_irq();
}

static bool cmp_abs_time(const struct co_list_hdr *timerA, const struct co_list_hdr *timerB) {
uint32_t timeA = ((struct mm_timer_tag*)timerA)->time;
uint32_t timeB = ((struct mm_timer_tag*)timerB)->time;

return (hal_machw_time_cmp(timeA, timeB));
}

// this 3 functions have no irq disable

void mm_timer_set(struct mm_timer_tag *timer, uint32_t value) {
bool hw_prog = false;
if (hal_machw_time_past(value)) {
puts("\r\n-------------------[FW] Timer is past due to flash operation. Try to fix\r\n");
value = hal_machw_time() + 3000;
}
if (co_list_pick(&mm_timer_env.prog) == (struct co_list_hdr*) timer) {
// pop the timer from the list
co_list_pop_front(&mm_timer_env.prog);
// force the HW timer to be reprogrammed
hw_prog = true;
} else {
co_list_extract(&mm_timer_env.prog, &timer->list_hdr);
}
timer->time = value;
co_list_insert(&mm_timer_env.prog, &timer->list_hdr, cmp_abs_time);
if (hw_prog || (co_list_pick(&mm_timer_env.prog) == &timer->list_hdr)) {
mm_timer_hw_set((struct mm_timer_tag *)co_list_pick(&mm_timer_env.prog));
}
if (hal_machw_time_past(value)) {
ke_evt_set(KE_EVT_MM_TIMER_BIT);
}
}

void mm_timer_clear(struct mm_timer_tag *timer) {
if (co_list_pick(&mm_timer_env.prog) == &timer->list_hdr) {
co_list_pop_front(&mm_timer_env.prog);
mm_timer_hw_set((struct mm_timer_tag *)co_list_pick(&mm_timer_env.prog));
} else {
co_list_extract(&mm_timer_env.prog, &timer->list_hdr);
}
}

void mm_timer_schedule(int dummy) {
while (true) {
ke_evt_clear(KE_EVT_MM_TIMER_BIT);
struct mm_timer_tag *timer = (struct mm_timer_tag *)co_list_pick(&mm_timer_env.prog);
if (!timer) {
mm_timer_hw_set((struct mm_timer_tag *)NULL);
break ;
}

if (!hal_machw_time_past(timer->time - 50)) {
mm_timer_hw_set(timer);
if (!hal_machw_time_past(timer->time))
break ;
}

co_list_pop_front(&mm_timer_env.prog);
ASSERT_ERR(timer->cb);
timer->cb(timer->env);
}
}
34 changes: 34 additions & 0 deletions src/include/bl602_wifi/lmac/mm/mm.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,31 @@ enum mm_features {
MM_FEAT_TDLS_BIT = 24,
};

///BA agreement related status
enum {
/// Correct BA agreement establishment
BA_AGMT_ESTABLISHED,
/// BA agreement already exists for STA+TID requested, cannot override it (should have been deleted first)
BA_AGMT_ALREADY_EXISTS,
/// Correct BA agreement deletion
BA_AGMT_DELETED,
/// BA agreement for the (STA, TID) doesn't exist so nothing to delete
BA_AGMT_DOESNT_EXIST,
/// No more BA agreement can be added for the specified type
BA_AGMT_NO_MORE_BA_AGMT,
/// BA agreement type not supported
BA_AGMT_NOT_SUPPORTED
};

///BA agreement types
enum
{
///BlockAck agreement for TX
BA_AGMT_TX,
///BlockAck agreement for RX
BA_AGMT_RX,
};

struct mm_env_tag {
uint32_t rx_filter_umac; // +0
uint32_t rx_filter_lmac_enable; // +4
Expand Down Expand Up @@ -90,6 +115,8 @@ void mm_hw_idle_evt(int dummy);
#define MM_BEACON_LOSS_THD (100) // not 30
/// Periodicity of keep-alive NULL frame transmission
#define MM_KEEP_ALIVE_PERIOD (30 * 1000000) ///< 30s
/// Default peer device accuracy (in ppm)
#define MM_AP_CLK_ACCURACY 20

#define NXMAC_EN_DUPLICATE_DETECTION_BIT ((uint32_t)0x80000000)
#define NXMAC_EN_DUPLICATE_DETECTION_POS 31
Expand Down Expand Up @@ -215,6 +242,13 @@ void mm_hw_idle_evt(int dummy);
// bl602 has one moer NXMAC_ACCEPT_PROBE_REQ_BIT
#endif

/// Number of supported Default+Pairwise keys
#if NX_KEY_RAM_CONFIG
#define MM_SEC_MAX_KEY_NBR ((MAC_CORE->encr_ram_config.max) + 1)
#else
#define MM_SEC_MAX_KEY_NBR 64
#endif

static inline void mm_ps_change_ind(uint8_t sta_idx, uint8_t ps_state) {
struct sta_info_tag *sta = sta_info_tab + sta_idx;

Expand Down
1 change: 1 addition & 0 deletions src/include/bl602_wifi/lmac/ps/ps.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ enum
PS_MODE_ON,
/// Power-save on - Dynamic mode
PS_MODE_ON_DYN,
PS_DENOISE,
};

struct ps_env_tag {
Expand Down
1 change: 1 addition & 0 deletions src/include/bl602_wifi/modules/ke/ke_msg.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ static inline void *ke_msg2param(const struct ke_msg *msg) {
}

void *ke_msg_alloc(const ke_msg_id_t id, const ke_task_id_t dest_id, const ke_task_id_t src_id, const uint16_t param_len);
#define KE_MSG_ALLOC(id, dest_id, src_id, type) ((struct type*) ke_msg_alloc(id, dest_id, src_id, sizeof(struct type)))
void ke_msg_send(const void *param_ptr);
void ke_msg_send_basic(const ke_msg_id_t id, const ke_task_id_t dest_id, const ke_task_id_t src_id);
void ke_msg_forward_and_change_id(const void *param_ptr, const ke_msg_id_t msg_id, const ke_task_id_t dest_id, const ke_task_id_t src_id);
Expand Down
6 changes: 6 additions & 0 deletions src/include/bl602_wifi/modules/ke/ke_task.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,10 @@ ke_state_t ke_state_get(const ke_task_id_t id);
void ke_state_set(const ke_task_id_t id, const ke_state_t state_id);
void ke_task_schedule(int dummy);


#define KE_STATE_HANDLER(hdl) {hdl, sizeof(hdl)/sizeof(struct ke_msg_handler)}

/// Helps writing empty states.
#define KE_STATE_HANDLER_NONE {NULL, 0}

#endif // __KE_TASK_H__
2 changes: 2 additions & 0 deletions src/include/bl602_wifi/modules/ke/ke_timer.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ void ke_timer_clear(const ke_msg_id_t timer_id, const ke_task_id_t task_id);
void ke_timer_schedule(int dummy);

#define KE_TIMER_DELAY_MAX 300000000
/// Standard Multiplier
#define MILLI2MICRO 1000

static inline bool ke_time_abs_cmp(uint32_t time1, uint32_t time2) {
uint32_t diff = time1 - time2;
Expand Down
5 changes: 5 additions & 0 deletions src/include/bl602_wifi/modules/mac/mac.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ enum {
#define MAC_DEFAULT_KEY_COUNT 4
#define MAC_DEFAULT_MFP_KEY_COUNT 6

#define MAC_SEC_KEY_LEN 32 // TKIP keys 256 bits (max length) with MIC keys

/// duration of a Time Unit in microseconds
#define TU_DURATION 1024

struct mac_addr {
uint16_t array[3]; // +0
};
Expand Down
1 change: 1 addition & 0 deletions src/include/bl602_wifi/umac/me/me.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include <umac/me/me_task.h>
#include <modules/ke/ke_task.h>
#include <modules/ke/ke_msg.h>
#include <modules/supplicant/keyMgmtStatTypes.h>
#include <modules/mac/mac.h>

Expand Down
27 changes: 27 additions & 0 deletions src/include/blconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,20 @@
#define NX_BCN_AUTONOMOUS_TX 1
#define NX_MFP 0
#define NX_KEY_RAM_CONFIG 1
#define NX_UAPSD 1
#define NX_DPSM 1
#define NX_AMPDU_TX 0
#define NX_AMSDU_TX 0
#define NX_P2P 0
#define NX_P2P_GO 0
#define NX_REORD 0
#define TDLS_ENABLE 0
#define RW_BFMEE_EN 0
#define RW_BFMER_EN 0
#define RW_MUMIMO_RX_EN 0
#define RW_MUMIMO_TX_EN 0
#define RW_WAPI_EN 0
#define NX_VHT 0

/// Wireless Mesh Networking support
#if defined CFG_MESH
Expand All @@ -50,4 +64,17 @@
#endif //defined CFG_MESH
#define CFG_MODE_SWITCH 0
#undef CONFIG_AOS_MESH

#define NX_VERSION_MAJ 5
/// Minor version number
#define NX_VERSION_MIN 0
/// Release number
#define NX_VERSION_REL 4
/// Patch number
#define NX_VERSION_PAT 0

/// Version word
#define NX_VERSION ((NX_VERSION_MAJ << 24) | (NX_VERSION_MIN << 16) | \
(NX_VERSION_REL << 8) | NX_VERSION_PAT)

#endif
2 changes: 1 addition & 1 deletion src/include/macro.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,6 @@

#define PACK(var, name) for (int tip = 1; tip;) for (__typeof__ (var) name = var; tip; tip = 0, var = name)
#define PACK0(var, name) for (int tip = 1; tip;) for (__typeof__ (var) name = {0}; tip; tip = 0, var = name)
#define EXTRACT(var, name) for (int tip = 1; tip;) for (__typeof__ (var) name = var; tip; tip = 0, )
#define EXTRACT(var, name) for (int tip = 1; tip;) for (__typeof__ (var) name = var; tip; tip = 0)
#define STATIC_ASSERT(COND,MSG) typedef char static_assertion_##MSG[(COND)?1:-1]
#endif