xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852be/phl/phl_sta.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2019 Realtek Corporation.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun  * under the terms of version 2 of the GNU General Public License as
7*4882a593Smuzhiyun  * published by the Free Software Foundation.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful, but WITHOUT
10*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12*4882a593Smuzhiyun  * more details.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  *****************************************************************************/
15*4882a593Smuzhiyun #ifndef _PHL_STA_H_
16*4882a593Smuzhiyun #define _PHL_STA_H_
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun /*********** macid ctrl section ***********/
19*4882a593Smuzhiyun enum rtw_phl_status
20*4882a593Smuzhiyun phl_macid_ctrl_init(struct phl_info_t *phl);
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun enum rtw_phl_status
23*4882a593Smuzhiyun phl_macid_ctrl_deinit(struct phl_info_t *phl);
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun u16 rtw_phl_get_macid_max_num(void *phl);
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun u16 rtw_phl_wrole_bcmc_id_get(void *phl, struct rtw_wifi_role_t *wrole);
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun u8 rtw_phl_macid_is_bmc(void *phl, u16 macid);
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun u8 rtw_phl_macid_is_used(void *phl, u16 macid);
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun static inline bool
phl_macid_is_valid(struct phl_info_t * phl_info,u16 macid)34*4882a593Smuzhiyun phl_macid_is_valid(struct phl_info_t *phl_info, u16 macid)
35*4882a593Smuzhiyun {
36*4882a593Smuzhiyun 	return (macid < phl_info->macid_ctrl.max_num) ? true : false;
37*4882a593Smuzhiyun }
38*4882a593Smuzhiyun u16 rtw_phl_get_macid_by_addr(void *phl, u8 *addr);
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /*********** stainfo_ctrl section ***********/
41*4882a593Smuzhiyun enum rtw_phl_status
42*4882a593Smuzhiyun phl_stainfo_ctrl_init(struct phl_info_t *phl_info);
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun enum rtw_phl_status
45*4882a593Smuzhiyun phl_stainfo_ctrl_deinie(struct phl_info_t *phl_info);
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun void phl_clean_sta_bcn_info(struct phl_info_t *phl, struct rtw_phl_stainfo_t *sta);
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun struct rtw_bcn_offset * phl_get_sta_bcn_offset_info(struct phl_info_t *phl,
50*4882a593Smuzhiyun 					struct rtw_wifi_role_t *wrole);
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun void phl_bcn_watchdog(struct phl_info_t *phl);
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun bool phl_calc_offset_from_tbtt(struct phl_info_t *phl,
55*4882a593Smuzhiyun 			struct rtw_wifi_role_t *wrole, u64 cur_t, u16 *ofst);
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun enum rtw_phl_status rtw_phl_tbtt_sync(struct phl_info_t *phl,
58*4882a593Smuzhiyun 		struct rtw_wifi_role_t *src_role,
59*4882a593Smuzhiyun 		struct rtw_wifi_role_t *tgt_role,
60*4882a593Smuzhiyun 		u16 sync_ofst, bool sync_now_once, u16 *diff_t);
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #ifdef DBG_PHL_STAINFO
63*4882a593Smuzhiyun void phl_dump_stactrl(const char *caller,
64*4882a593Smuzhiyun                       const int line,
65*4882a593Smuzhiyun                       bool show_caller,
66*4882a593Smuzhiyun                       struct phl_info_t *phl_info);
67*4882a593Smuzhiyun #define PHL_DUMP_STACTRL(_phl_info) phl_dump_stactrl(__FUNCTION__, __LINE__, false, _phl_info);
68*4882a593Smuzhiyun #define PHL_DUMP_STACTRL_EX(_phl_info) phl_dump_stactrl(__FUNCTION__, __LINE__, true, _phl_info);
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun void phl_dump_stainfo_all(const char *caller,
71*4882a593Smuzhiyun                           const int line, bool show_caller,
72*4882a593Smuzhiyun                           struct phl_info_t *phl_info);
73*4882a593Smuzhiyun #define PHL_DUMP_STAINFO(_phl_info) phl_dump_stainfo_all(__FUNCTION__, __LINE__, false, _phl_info);
74*4882a593Smuzhiyun #define PHL_DUMP_STAINFO_EX(_phl_info) phl_dump_stainfo_all(__FUNCTION__, __LINE__, true, _phl_info);
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun void phl_dump_stainfo_per_role(const char *caller,
77*4882a593Smuzhiyun                                const int line,
78*4882a593Smuzhiyun                                bool show_caller,
79*4882a593Smuzhiyun                                struct phl_info_t *phl_info,
80*4882a593Smuzhiyun                                struct rtw_wifi_role_t *wrole);
81*4882a593Smuzhiyun #define PHL_DUMP_ROLE_STAINFO(_phl_info, wrole) phl_dump_stainfo_per_role(__FUNCTION__, __LINE__, false, _phl_info, wrole);
82*4882a593Smuzhiyun #define PHL_DUMP_ROLE_STAINFO_EX(_phl_info, wrole) phl_dump_stainfo_per_role(__FUNCTION__, __LINE__, true, _phl_info, wrole);
83*4882a593Smuzhiyun #else
84*4882a593Smuzhiyun #define PHL_DUMP_STACTRL(_phl_info)
85*4882a593Smuzhiyun #define PHL_DUMP_STACTRL_EX(_phl_info)
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun #define PHL_DUMP_STAINFO(_phl_info)
88*4882a593Smuzhiyun #define PHL_DUMP_STAINFO_EX(_phl_info)
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #define PHL_DUMP_ROLE_STAINFO(_phl_info, wrole)
91*4882a593Smuzhiyun #define PHL_DUMP_ROLE_STAINFO_EX(_phl_info, wrole)
92*4882a593Smuzhiyun #endif
93*4882a593Smuzhiyun /*********** phl stainfo section ***********/
94*4882a593Smuzhiyun /*WIFI sta_info management section*/
95*4882a593Smuzhiyun struct rtw_phl_stainfo_t *
96*4882a593Smuzhiyun phl_alloc_stainfo_sw(struct phl_info_t *phl_info,
97*4882a593Smuzhiyun                      u8 *sta_addr,
98*4882a593Smuzhiyun                      struct rtw_wifi_role_t *wrole);
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun enum rtw_phl_status
101*4882a593Smuzhiyun phl_alloc_stainfo_hw(struct phl_info_t *phl_info, struct rtw_phl_stainfo_t *sta);
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun enum rtw_phl_status
104*4882a593Smuzhiyun phl_free_stainfo_sw(struct phl_info_t *phl_info, struct rtw_phl_stainfo_t *sta);
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun enum rtw_phl_status
107*4882a593Smuzhiyun phl_free_stainfo_hw(struct phl_info_t *phl_info, struct rtw_phl_stainfo_t *sta);
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun enum rtw_phl_status
110*4882a593Smuzhiyun rtw_phl_cmd_alloc_stainfo(void *phl,
111*4882a593Smuzhiyun 						struct rtw_phl_stainfo_t **sta,
112*4882a593Smuzhiyun 						u8 *sta_addr,
113*4882a593Smuzhiyun 						struct rtw_wifi_role_t *wrole,
114*4882a593Smuzhiyun 						bool alloc, bool only_hw,
115*4882a593Smuzhiyun 						enum phl_cmd_type cmd_type,
116*4882a593Smuzhiyun 						u32 cmd_timeout);
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun enum rtw_phl_status
119*4882a593Smuzhiyun phl_wifi_role_free_stainfo_hw(struct phl_info_t *phl_info,
120*4882a593Smuzhiyun 						struct rtw_wifi_role_t *wrole);
121*4882a593Smuzhiyun enum rtw_phl_status
122*4882a593Smuzhiyun phl_wifi_role_free_stainfo_sw(struct phl_info_t *phl_info,
123*4882a593Smuzhiyun 				struct rtw_wifi_role_t *role);
124*4882a593Smuzhiyun enum rtw_phl_status
125*4882a593Smuzhiyun phl_wifi_role_free_stainfo(struct phl_info_t *phl_info,
126*4882a593Smuzhiyun                            struct rtw_wifi_role_t *role);
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #ifdef CONFIG_CMD_DISP
129*4882a593Smuzhiyun enum rtw_phl_status
130*4882a593Smuzhiyun phl_update_media_status_hdl(struct phl_info_t *phl_info, u8 *param);
131*4882a593Smuzhiyun #endif
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun struct rtw_phl_stainfo_t *
134*4882a593Smuzhiyun rtw_phl_get_stainfo_by_macid(void *phl, u16 macid);
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun struct rtw_phl_stainfo_t *
137*4882a593Smuzhiyun rtw_phl_get_stainfo_by_addr(void *phl, struct rtw_wifi_role_t *wrole, u8 *addr);
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun struct rtw_phl_stainfo_t *
140*4882a593Smuzhiyun rtw_phl_get_stainfo_by_addr_ex(void *phl, u8 *addr);
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun struct rtw_phl_stainfo_t *
143*4882a593Smuzhiyun rtw_phl_get_stainfo_self(void *phl, struct rtw_wifi_role_t *wrole);
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun u8 phl_get_min_rssi_bcn(struct phl_info_t *phl_info);
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun #ifdef CONFIG_CMD_DISP
148*4882a593Smuzhiyun enum rtw_phl_status
149*4882a593Smuzhiyun phl_cmd_change_stainfo_hdl(struct phl_info_t *phl_info, u8 *param);
150*4882a593Smuzhiyun #endif
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun enum rtw_phl_status
153*4882a593Smuzhiyun phl_change_stainfo(struct phl_info_t *phl_info,
154*4882a593Smuzhiyun                    struct rtw_phl_stainfo_t *sta,
155*4882a593Smuzhiyun                    enum phl_upd_mode mode);
156*4882a593Smuzhiyun void
157*4882a593Smuzhiyun phl_sta_trx_tfc_upd(struct phl_info_t *phl_info);
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun #ifdef CONFIG_CMD_DISP
160*4882a593Smuzhiyun enum rtw_phl_status
161*4882a593Smuzhiyun phl_cmd_set_key_hdl(struct phl_info_t *phl_info, u8 *param);
162*4882a593Smuzhiyun enum rtw_phl_status
163*4882a593Smuzhiyun phl_cmd_alloc_stainfo_hdl(struct phl_info_t *phl_info, u8 *param);
164*4882a593Smuzhiyun #endif /* CONFIG_CMD_DISP */
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun bool phl_self_stainfo_chk(struct phl_info_t *phl_info,
167*4882a593Smuzhiyun                           struct rtw_wifi_role_t *wrole,
168*4882a593Smuzhiyun                           struct rtw_phl_stainfo_t *sta);
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun #endif  /*_PHL_STA_H_*/
171