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