xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852be/phl/phl_struct.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c) 2019 - 2021 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_STRUCT_H_
16*4882a593Smuzhiyun #define _PHL_STRUCT_H_
17*4882a593Smuzhiyun #define PHL_MACID_MAX_ARRAY_NUM 8 /* 8x32=256 */
18*4882a593Smuzhiyun #define PHL_MACID_MAX_NUM (PHL_MACID_MAX_ARRAY_NUM * 32)
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define PHL_STA_TID_NUM (16)    /* TODO: */
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun struct hci_info_t {
23*4882a593Smuzhiyun 	/* enum rtw_hci_type hci_type; */
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #if defined(CONFIG_PCI_HCI)
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun 	u8 total_txch_num;
28*4882a593Smuzhiyun 	u8 total_rxch_num;
29*4882a593Smuzhiyun 	u8 *txbd_buf;
30*4882a593Smuzhiyun 	u8 *rxbd_buf;
31*4882a593Smuzhiyun #if defined(PCIE_TRX_MIT_EN)
32*4882a593Smuzhiyun 	u8 fixed_mitigation; /*no watchdog dynamic setting*/
33*4882a593Smuzhiyun #endif
34*4882a593Smuzhiyun 	void *wd_dma_pool;
35*4882a593Smuzhiyun #elif defined(CONFIG_USB_HCI)
36*4882a593Smuzhiyun 	u16 usb_bulkout_size;
37*4882a593Smuzhiyun #elif defined(CONFIG_SDIO_HCI)
38*4882a593Smuzhiyun 	u32 tx_drop_cnt;	/* bit31 means overflow or not */
39*4882a593Smuzhiyun #ifdef SDIO_TX_THREAD
40*4882a593Smuzhiyun 	_os_sema tx_thrd_sema;
41*4882a593Smuzhiyun 	_os_thread tx_thrd;
42*4882a593Smuzhiyun #endif /* SDIO_TX_THREAD */
43*4882a593Smuzhiyun #endif
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun 	u8 *wd_ring;
46*4882a593Smuzhiyun 	u8 *txbuf_pool;
47*4882a593Smuzhiyun 	u8 *rxbuf_pool;
48*4882a593Smuzhiyun 	u8 *wp_tag;
49*4882a593Smuzhiyun 	u16 wp_seq[PHL_MACID_MAX_NUM]; 	/* maximum macid number */
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun };
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #if defined(CONFIG_PCI_HCI)
54*4882a593Smuzhiyun enum rx_channel_type {
55*4882a593Smuzhiyun 	RX_CH = 0,
56*4882a593Smuzhiyun 	RP_CH = 1,
57*4882a593Smuzhiyun 	RX_CH_TYPE_MAX = 0xFF
58*4882a593Smuzhiyun };
59*4882a593Smuzhiyun #endif
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #define MAX_PHL_RING_STATUS_NUMBER 64
63*4882a593Smuzhiyun #define RX_REORDER_RING_NUMBER PHL_MACID_MAX_NUM
64*4882a593Smuzhiyun #define PCIE_BUS_EFFICIENCY 4
65*4882a593Smuzhiyun #define ETH_ALEN 6
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun struct phl_ring_status {
68*4882a593Smuzhiyun 	_os_list list;
69*4882a593Smuzhiyun 	u16 macid;
70*4882a593Smuzhiyun 	u8 band;/*0 or 1*/
71*4882a593Smuzhiyun 	u8 wmm;/*0 or 1*/
72*4882a593Smuzhiyun 	u8 port;
73*4882a593Smuzhiyun 	/*u8 mbssid*/
74*4882a593Smuzhiyun 	u16 req_busy;
75*4882a593Smuzhiyun 	struct rtw_phl_tx_ring *ring_ptr;
76*4882a593Smuzhiyun };
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun struct phl_ring_sts_pool {
79*4882a593Smuzhiyun 	struct phl_ring_status ring_sts[MAX_PHL_RING_STATUS_NUMBER];
80*4882a593Smuzhiyun 	_os_list idle;
81*4882a593Smuzhiyun 	_os_list busy;
82*4882a593Smuzhiyun 	_os_lock idle_lock;
83*4882a593Smuzhiyun 	_os_lock busy_lock;
84*4882a593Smuzhiyun };
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /**
87*4882a593Smuzhiyun  * struct phl_hci_trx_ops - interface specific operations
88*4882a593Smuzhiyun  *
89*4882a593Smuzhiyun  * @hci_trx_init: the function for HCI trx init
90*4882a593Smuzhiyun  * @hci_trx_deinit: the function for HCI trx deinit
91*4882a593Smuzhiyun  * @prepare_tx: prepare packets for hal transmission
92*4882a593Smuzhiyun  * @recycle_rx_buf: recycle rx buffer
93*4882a593Smuzhiyun  * @tx: tx packet to hw
94*4882a593Smuzhiyun  * @rx: rx packet to sw
95*4882a593Smuzhiyun  */
96*4882a593Smuzhiyun struct phl_info_t;
97*4882a593Smuzhiyun struct phl_hci_trx_ops {
98*4882a593Smuzhiyun 	enum rtw_phl_status (*hci_trx_init)(struct phl_info_t *phl);
99*4882a593Smuzhiyun 	void (*hci_trx_deinit)(struct phl_info_t *phl);
100*4882a593Smuzhiyun 	enum rtw_phl_status (*prepare_tx)(struct phl_info_t *phl,
101*4882a593Smuzhiyun 					struct rtw_xmit_req *tx_req);
102*4882a593Smuzhiyun 	enum rtw_phl_status (*recycle_rx_buf)(struct phl_info_t *phl,
103*4882a593Smuzhiyun 					void *r, u8 ch, enum rtw_rx_type type);
104*4882a593Smuzhiyun 	enum rtw_phl_status (*tx)(struct phl_info_t *phl);
105*4882a593Smuzhiyun 	enum rtw_phl_status (*rx)(struct phl_info_t *phl);
106*4882a593Smuzhiyun 	enum rtw_phl_status (*trx_cfg)(struct phl_info_t *phl);
107*4882a593Smuzhiyun 	void (*trx_stop)(struct phl_info_t *phl);
108*4882a593Smuzhiyun 	enum rtw_phl_status (*pltfm_tx)(struct phl_info_t *phl, void *pkt);
109*4882a593Smuzhiyun 	void (*free_h2c_pkt_buf)(struct phl_info_t *phl_info,
110*4882a593Smuzhiyun 				   struct rtw_h2c_pkt *_h2c_pkt);
111*4882a593Smuzhiyun 	enum rtw_phl_status (*alloc_h2c_pkt_buf)(struct phl_info_t *phl_info,
112*4882a593Smuzhiyun 		struct rtw_h2c_pkt *_h2c_pkt, u32 buf_len);
113*4882a593Smuzhiyun 	void (*trx_reset)(struct phl_info_t *phl, u8 type);
114*4882a593Smuzhiyun 	void (*trx_resume)(struct phl_info_t *phl, u8 type);
115*4882a593Smuzhiyun 	void (*req_tx_stop)(struct phl_info_t *phl);
116*4882a593Smuzhiyun 	void (*req_rx_stop)(struct phl_info_t *phl);
117*4882a593Smuzhiyun 	bool (*is_tx_pause)(struct phl_info_t *phl);
118*4882a593Smuzhiyun 	bool (*is_rx_pause)(struct phl_info_t *phl);
119*4882a593Smuzhiyun 	void *(*get_txbd_buf)(struct phl_info_t *phl);
120*4882a593Smuzhiyun 	void *(*get_rxbd_buf)(struct phl_info_t *phl);
121*4882a593Smuzhiyun 	void (*recycle_rx_pkt)(struct phl_info_t *phl,
122*4882a593Smuzhiyun 			       struct rtw_phl_rx_pkt *phl_rx);
123*4882a593Smuzhiyun 	enum rtw_phl_status (*register_trx_hdlr)(struct phl_info_t *phl);
124*4882a593Smuzhiyun 	void (*rx_handle_normal)(struct phl_info_t *phl_info,
125*4882a593Smuzhiyun 						struct rtw_phl_rx_pkt *phl_rx);
126*4882a593Smuzhiyun 	void (*tx_watchdog)(struct phl_info_t *phl_info);
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun #ifdef CONFIG_PCI_HCI
129*4882a593Smuzhiyun 	enum rtw_phl_status (*recycle_busy_wd)(struct phl_info_t *phl);
130*4882a593Smuzhiyun 	enum rtw_phl_status (*recycle_busy_h2c)(struct phl_info_t *phl);
131*4882a593Smuzhiyun 	void (*read_hw_rx)(struct phl_info_t *phl, enum rx_channel_type rx_ch);
132*4882a593Smuzhiyun #endif
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun #ifdef CONFIG_USB_HCI
135*4882a593Smuzhiyun 	enum rtw_phl_status (*pend_rxbuf)(struct phl_info_t *phl, void *rxobj,
136*4882a593Smuzhiyun 						u32 inbuf_len, u8 status_code);
137*4882a593Smuzhiyun 	enum rtw_phl_status (*recycle_tx_buf)(void *phl, u8 *tx_buf_ptr);
138*4882a593Smuzhiyun #endif
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun #if defined(CONFIG_SDIO_HCI) && defined(CONFIG_PHL_SDIO_READ_RXFF_IN_INT)
141*4882a593Smuzhiyun 	enum rtw_phl_status (*recv_rxfifo)(struct phl_info_t *phl);
142*4882a593Smuzhiyun #endif
143*4882a593Smuzhiyun };
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun /**
146*4882a593Smuzhiyun  * struct phl_tid_ampdu_rx - TID aggregation information (Rx).
147*4882a593Smuzhiyun  *
148*4882a593Smuzhiyun  * @reorder_buf: buffer to reorder incoming aggregated MPDUs.
149*4882a593Smuzhiyun  * @reorder_time: time when frame was added
150*4882a593Smuzhiyun  * @sta: station we are attached to
151*4882a593Smuzhiyun  * @head_seq_num: head sequence number in reordering buffer.
152*4882a593Smuzhiyun  * @stored_mpdu_num: number of MPDUs in reordering buffer
153*4882a593Smuzhiyun  * @ssn: Starting Sequence Number expected to be aggregated.
154*4882a593Smuzhiyun  * @buf_size: buffer size for incoming A-MPDUs
155*4882a593Smuzhiyun  * @timeout: reset timer value (in TUs).
156*4882a593Smuzhiyun  * @tid: TID number
157*4882a593Smuzhiyun  * @started: this session has started (head ssn or higher was received)
158*4882a593Smuzhiyun  */
159*4882a593Smuzhiyun struct phl_tid_ampdu_rx {
160*4882a593Smuzhiyun 	struct rtw_phl_rx_pkt **reorder_buf;
161*4882a593Smuzhiyun 	u32 *reorder_time;
162*4882a593Smuzhiyun 	struct rtw_phl_stainfo_t *sta;
163*4882a593Smuzhiyun 	u16 head_seq_num;
164*4882a593Smuzhiyun 	u16 stored_mpdu_num;
165*4882a593Smuzhiyun 	u16 ssn;
166*4882a593Smuzhiyun 	u16 buf_size;
167*4882a593Smuzhiyun 	u16 tid;
168*4882a593Smuzhiyun 	u8 started:1,
169*4882a593Smuzhiyun  	   removed:1,
170*4882a593Smuzhiyun 	   sleep:1;
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun 	void *drv_priv;
173*4882a593Smuzhiyun 	struct phl_info_t *phl_info;
174*4882a593Smuzhiyun };
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun struct macid_ctl_t {
177*4882a593Smuzhiyun 	_os_lock lock;
178*4882a593Smuzhiyun 	/*  used macid bitmap share for all wifi role */
179*4882a593Smuzhiyun 	u32 used_map[PHL_MACID_MAX_ARRAY_NUM];
180*4882a593Smuzhiyun 	/* record bmc macid bitmap for all wifi role */
181*4882a593Smuzhiyun 	u32 bmc_map[PHL_MACID_MAX_ARRAY_NUM];
182*4882a593Smuzhiyun 	/* record used macid bitmap for each wifi role */
183*4882a593Smuzhiyun 	u32 wifi_role_usedmap[MAX_WIFI_ROLE_NUMBER][PHL_MACID_MAX_ARRAY_NUM];
184*4882a593Smuzhiyun 	/* record bmc TX macid for wifi role */
185*4882a593Smuzhiyun 	u16 wrole_bmc[MAX_WIFI_ROLE_NUMBER];
186*4882a593Smuzhiyun 	/* record total stainfo by macid */
187*4882a593Smuzhiyun 	struct rtw_phl_stainfo_t *sta[PHL_MACID_MAX_NUM];
188*4882a593Smuzhiyun 	u16 max_num;
189*4882a593Smuzhiyun };
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun struct stainfo_ctl_t {
192*4882a593Smuzhiyun 	struct phl_info_t *phl_info;
193*4882a593Smuzhiyun 	u8 *allocated_stainfo_buf;
194*4882a593Smuzhiyun 	int allocated_stainfo_sz;
195*4882a593Smuzhiyun 	u8 *stainfo_buf;
196*4882a593Smuzhiyun 	struct phl_queue free_sta_queue;
197*4882a593Smuzhiyun };
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun struct phl_h2c_pkt_pool {
200*4882a593Smuzhiyun 	struct rtw_h2c_pkt *h2c_pkt_buf;
201*4882a593Smuzhiyun 	struct phl_queue idle_h2c_pkt_cmd_list;
202*4882a593Smuzhiyun 	struct phl_queue idle_h2c_pkt_data_list;
203*4882a593Smuzhiyun 	struct phl_queue idle_h2c_pkt_ldata_list;
204*4882a593Smuzhiyun 	struct phl_queue busy_h2c_pkt_list;
205*4882a593Smuzhiyun 	_os_lock recycle_lock;
206*4882a593Smuzhiyun };
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun #ifdef CONFIG_RTW_ACS
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun #ifndef MAX_CHANNEL_NUM
211*4882a593Smuzhiyun #define	MAX_CHANNEL_NUM		42
212*4882a593Smuzhiyun #endif
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun struct auto_chan_sel {
215*4882a593Smuzhiyun 	u8 clm_ratio[MAX_CHANNEL_NUM];
216*4882a593Smuzhiyun 	u8 nhm_pwr[MAX_CHANNEL_NUM];
217*4882a593Smuzhiyun 	u8 curr_idx;
218*4882a593Smuzhiyun 	u16 chset[MAX_CHANNEL_NUM];
219*4882a593Smuzhiyun };
220*4882a593Smuzhiyun #endif
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun enum phl_tx_status {
224*4882a593Smuzhiyun 	PHL_TX_STATUS_IDLE = 0,
225*4882a593Smuzhiyun 	PHL_TX_STATUS_RUNNING = 1,
226*4882a593Smuzhiyun 	PHL_TX_STATUS_STOP_INPROGRESS = 2,
227*4882a593Smuzhiyun 	PHL_TX_STATUS_SW_PAUSE = 3,
228*4882a593Smuzhiyun 	PHL_TX_STATUS_MAX = 0xFF
229*4882a593Smuzhiyun };
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun enum phl_rx_status {
232*4882a593Smuzhiyun 	PHL_RX_STATUS_IDLE = 0,
233*4882a593Smuzhiyun 	PHL_RX_STATUS_RUNNING = 1,
234*4882a593Smuzhiyun 	PHL_RX_STATUS_STOP_INPROGRESS = 2,
235*4882a593Smuzhiyun 	PHL_RX_STATUS_SW_PAUSE = 3,
236*4882a593Smuzhiyun 	PHL_RX_STATUS_MAX = 0xFF
237*4882a593Smuzhiyun };
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun enum data_ctrl_mdl {
240*4882a593Smuzhiyun 	DATA_CTRL_MDL_NONE = 0,
241*4882a593Smuzhiyun 	DATA_CTRL_MDL_CMD_CTRLER = BIT0,
242*4882a593Smuzhiyun 	DATA_CTRL_MDL_SER = BIT1,
243*4882a593Smuzhiyun 	DATA_CTRL_MDL_PS = BIT2,
244*4882a593Smuzhiyun 	DATA_CTRL_MDL_MAX = BIT7
245*4882a593Smuzhiyun };
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun enum data_ctrl_err_code {
248*4882a593Smuzhiyun 	CTRL_ERR_SW_TX_PAUSE_POLLTO = 1,
249*4882a593Smuzhiyun 	CTRL_ERR_SW_TX_PAUSE_FAIL = 2,
250*4882a593Smuzhiyun 	CTRL_ERR_SW_TX_RESUME_FAIL = 3,
251*4882a593Smuzhiyun 	CTRL_ERR_SW_RX_PAUSE_POLLTO = 4,
252*4882a593Smuzhiyun 	CTRL_ERR_SW_RX_PAUSE_FAIL = 5,
253*4882a593Smuzhiyun 	CTRL_ERR_SW_RX_RESUME_FAIL = 6,
254*4882a593Smuzhiyun 	CTRL_ERR_HW_TRX_PAUSE_FAIL = 7,
255*4882a593Smuzhiyun 	CTRL_ERR_HW_TRX_RESUME_FAIL = 8,
256*4882a593Smuzhiyun 	CTRL_ERR_MAX = 0xFF
257*4882a593Smuzhiyun };
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun #ifdef CONFIG_POWER_SAVE
260*4882a593Smuzhiyun struct phl_ps_info {
261*4882a593Smuzhiyun 	bool init;
262*4882a593Smuzhiyun 	_os_atomic tx_ntfy;
263*4882a593Smuzhiyun };
264*4882a593Smuzhiyun #endif
265*4882a593Smuzhiyun 
266*4882a593Smuzhiyun #define PHL_CTRL_TX BIT0
267*4882a593Smuzhiyun #define PHL_CTRL_RX BIT1
268*4882a593Smuzhiyun #define POLL_SW_TX_PAUSE_CNT 100
269*4882a593Smuzhiyun #define POLL_SW_TX_PAUSE_MS 5
270*4882a593Smuzhiyun #define POLL_SW_RX_PAUSE_CNT 100
271*4882a593Smuzhiyun #define POLL_SW_RX_PAUSE_MS 5
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun struct phl_info_t {
274*4882a593Smuzhiyun 	struct macid_ctl_t macid_ctrl;
275*4882a593Smuzhiyun 	struct stainfo_ctl_t sta_ctrl;
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun 	struct rtw_regulation regulation;
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun 	struct rtw_phl_com_t *phl_com;
280*4882a593Smuzhiyun 	struct rtw_phl_handler phl_tx_handler;
281*4882a593Smuzhiyun 	struct rtw_phl_handler phl_rx_handler;
282*4882a593Smuzhiyun 	struct rtw_phl_handler phl_ser_handler;
283*4882a593Smuzhiyun 	struct rtw_phl_handler phl_event_handler;
284*4882a593Smuzhiyun 	struct rtw_phl_rx_ring phl_rx_ring;
285*4882a593Smuzhiyun 	_os_atomic phl_sw_tx_sts;
286*4882a593Smuzhiyun 	_os_atomic phl_sw_tx_more;
287*4882a593Smuzhiyun 	_os_atomic phl_sw_tx_req_pwr;
288*4882a593Smuzhiyun 	_os_atomic phl_sw_rx_sts;
289*4882a593Smuzhiyun 	_os_atomic phl_sw_rx_more;
290*4882a593Smuzhiyun 	_os_atomic phl_sw_rx_req_pwr;
291*4882a593Smuzhiyun 	_os_atomic is_hw_trx_pause;
292*4882a593Smuzhiyun 	enum data_ctrl_mdl pause_tx_id;
293*4882a593Smuzhiyun 	enum data_ctrl_mdl pause_rx_id;
294*4882a593Smuzhiyun 	_os_lock t_ring_list_lock;
295*4882a593Smuzhiyun 	_os_lock rx_ring_lock;
296*4882a593Smuzhiyun 	_os_lock t_fctrl_result_lock;
297*4882a593Smuzhiyun 	_os_lock t_ring_free_list_lock;
298*4882a593Smuzhiyun 	_os_list t_ring_list;
299*4882a593Smuzhiyun 	_os_list t_fctrl_result;
300*4882a593Smuzhiyun 	_os_list t_ring_free_list;
301*4882a593Smuzhiyun 	void *ring_sts_pool;
302*4882a593Smuzhiyun 	void *rx_pkt_pool;
303*4882a593Smuzhiyun 	struct phl_h2c_pkt_pool *h2c_pool;
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun 	struct hci_info_t *hci;
306*4882a593Smuzhiyun 	struct phl_hci_trx_ops *hci_trx_ops;
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun 	struct pkt_ofld_obj *pkt_ofld;
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun 	struct phl_cmd_dispatch_engine disp_eng;
311*4882a593Smuzhiyun 	struct phl_watchdog wdog;
312*4882a593Smuzhiyun 	void *msg_hub;
313*4882a593Smuzhiyun 	void *cmd_que;
314*4882a593Smuzhiyun 	void *hal;
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun #ifdef CONFIG_FSM
317*4882a593Smuzhiyun 	void *fsm_root;
318*4882a593Smuzhiyun 	void *cmd_fsm;
319*4882a593Smuzhiyun 	void *cmd_obj;
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun 	void *scan_fsm;
322*4882a593Smuzhiyun 	void *scan_obj;
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun 	void *ser_fsm;
325*4882a593Smuzhiyun 	void *ser_obj;
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun 	void *btc_fsm;
328*4882a593Smuzhiyun 	void *btc_obj;
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun 	void *snd_fsm;
331*4882a593Smuzhiyun #endif /*CONFIG_FSM*/
332*4882a593Smuzhiyun 	void *snd_obj;
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun 	void *ps_obj;
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun 	void *led_ctrl;
337*4882a593Smuzhiyun 
338*4882a593Smuzhiyun 	void *ecsa_ctrl;
339*4882a593Smuzhiyun 	void *phl_twt_info; /* struct phl_twt_info */
340*4882a593Smuzhiyun #ifdef PHL_RX_BATCH_IND
341*4882a593Smuzhiyun 	u8 rx_new_pending;
342*4882a593Smuzhiyun #endif
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun 	struct phl_wow_info wow_info;
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun #ifdef CONFIG_POWER_SAVE
347*4882a593Smuzhiyun 	struct phl_ps_info ps_info;
348*4882a593Smuzhiyun #endif
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun #ifdef CONFIG_RTW_ACS
351*4882a593Smuzhiyun 	struct auto_chan_sel acs;
352*4882a593Smuzhiyun #endif
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun #ifdef CONFIG_PHL_TEST_SUITE
355*4882a593Smuzhiyun 	void *trx_test;
356*4882a593Smuzhiyun #endif
357*4882a593Smuzhiyun };
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun #define phl_to_drvpriv(_phl)		(_phl->phl_com->drv_priv)
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun #define phlcom_to_test_mgnt(_phl_com)	((_phl_com)->test_mgnt)
362*4882a593Smuzhiyun #define phlcom_to_mr_ctrl(_phl_com)	(&(_phl_com->mr_ctrl))
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun #define phl_to_mr_ctrl(_phl)	(&(((struct phl_info_t *)_phl)->phl_com->mr_ctrl))
365*4882a593Smuzhiyun #define phl_to_mac_ctrl(_phlinfo)	(&(_phlinfo->macid_ctrl))
366*4882a593Smuzhiyun #define phl_to_sta_ctrl(_phlinfo)	(&(_phlinfo->sta_ctrl))
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun #define get_band_ctrl(_phl, _band)	(&(phl_to_mr_ctrl(_phl)->band_ctrl[_band]))
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun #define phl_to_p2pps_info(_phl)	(((_phl)->phl_com->p2pps_info))
371*4882a593Smuzhiyun #define get_role_idx(_wrole) (_wrole->id)
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun #endif /*_PHL_STRUCT_H_*/
374