Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nu11secur1ty
GitHub Repository: nu11secur1ty/Kali-Linux
Path: blob/master/ALFA-W1F1/RTL8814AU/hal/hal_halmac.h
1307 views
1
/******************************************************************************
2
*
3
* Copyright(c) 2015 - 2018 Realtek Corporation.
4
*
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms of version 2 of the GNU General Public License as
7
* published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
* more details.
13
*
14
*****************************************************************************/
15
#ifndef _HAL_HALMAC_H_
16
#define _HAL_HALMAC_H_
17
18
#include <drv_types.h> /* adapter_to_dvobj(), struct intf_hdl and etc. */
19
#include <hal_data.h> /* struct hal_spec_t */
20
#include "halmac/halmac_api.h" /* struct halmac_adapter* and etc. */
21
22
/* HALMAC Definition for Driver */
23
#define RTW_HALMAC_H2C_MAX_SIZE 8
24
#define RTW_HALMAC_BA_SSN_RPT_SIZE 4
25
26
#define dvobj_set_halmac(d, mac) ((d)->halmac = (mac))
27
#define dvobj_to_halmac(d) ((struct halmac_adapter *)((d)->halmac))
28
#define adapter_to_halmac(p) dvobj_to_halmac(adapter_to_dvobj(p))
29
30
/* for H2C cmd */
31
#define MAX_H2C_BOX_NUMS 4
32
#define MESSAGE_BOX_SIZE 4
33
#define EX_MESSAGE_BOX_SIZE 4
34
35
typedef enum _RTW_HALMAC_MODE {
36
RTW_HALMAC_MODE_NORMAL,
37
RTW_HALMAC_MODE_WIFI_TEST,
38
} RTW_HALMAC_MODE;
39
40
union rtw_phy_para_data {
41
struct _mac {
42
u32 value; /* value to be set in bit mask(msk) */
43
u32 msk; /* bit mask */
44
u16 offset; /* address */
45
u8 msk_en; /* 0/1 for msk invalid/valid */
46
u8 size; /* Unit is bytes, and value should be 1/2/4 */
47
} mac;
48
struct _bb {
49
u32 value;
50
u32 msk;
51
u16 offset;
52
u8 msk_en;
53
u8 size;
54
} bb;
55
struct _rf {
56
u32 value;
57
u32 msk;
58
u8 offset;
59
u8 msk_en;
60
/*
61
* 0: path A
62
* 1: path B
63
* 2: path C
64
* 3: path D
65
*/
66
u8 path;
67
} rf;
68
struct _delay {
69
/*
70
* 0: microsecond (us)
71
* 1: millisecond (ms)
72
*/
73
u8 unit;
74
u16 value;
75
} delay;
76
};
77
78
struct rtw_phy_parameter {
79
/*
80
* 0: MAC register
81
* 1: BB register
82
* 2: RF register
83
* 3: Delay
84
* 0xFF: Latest(End) command
85
*/
86
u8 cmd;
87
union rtw_phy_para_data data;
88
};
89
90
struct rtw_halmac_bcn_ctrl {
91
u8 rx_bssid_fit:1; /* 0:HW handle beacon, 1:ignore */
92
u8 txbcn_rpt:1; /* Enable TXBCN report in ad hoc and AP mode */
93
u8 tsf_update:1; /* Update TSF when beacon or probe response */
94
u8 enable_bcn:1; /* Enable beacon related functions */
95
u8 rxbcn_rpt:1; /* Enable RXBCNOK report */
96
u8 p2p_ctwin:1; /* Enable P2P CTN WINDOWS function */
97
u8 p2p_bcn_area:1; /* Enable P2P BCN area on function */
98
};
99
100
extern struct halmac_platform_api rtw_halmac_platform_api;
101
102
/* HALMAC API for Driver(HAL) */
103
u8 rtw_halmac_read8(struct intf_hdl *, u32 addr);
104
u16 rtw_halmac_read16(struct intf_hdl *, u32 addr);
105
u32 rtw_halmac_read32(struct intf_hdl *, u32 addr);
106
void rtw_halmac_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
107
#ifdef CONFIG_SDIO_INDIRECT_ACCESS
108
u8 rtw_halmac_iread8(struct intf_hdl *pintfhdl, u32 addr);
109
u16 rtw_halmac_iread16(struct intf_hdl *pintfhdl, u32 addr);
110
u32 rtw_halmac_iread32(struct intf_hdl *pintfhdl, u32 addr);
111
#endif /* CONFIG_SDIO_INDIRECT_ACCESS */
112
int rtw_halmac_write8(struct intf_hdl *, u32 addr, u8 value);
113
int rtw_halmac_write16(struct intf_hdl *, u32 addr, u16 value);
114
int rtw_halmac_write32(struct intf_hdl *, u32 addr, u32 value);
115
116
/* Software Information */
117
void rtw_halmac_get_version(char *str, u32 len);
118
119
/* Software Initialization */
120
int rtw_halmac_init_adapter(struct dvobj_priv *d, struct halmac_platform_api *pf_api);
121
int rtw_halmac_deinit_adapter(struct dvobj_priv *);
122
123
/* Get operations */
124
int rtw_halmac_get_hw_value(struct dvobj_priv *d, enum halmac_hw_id hw_id, void *pvalue);
125
int rtw_halmac_get_tx_fifo_size(struct dvobj_priv *d, u32 *size);
126
int rtw_halmac_get_rx_fifo_size(struct dvobj_priv *d, u32 *size);
127
int rtw_halmac_get_rsvd_drv_pg_bndy(struct dvobj_priv *d, u16 *bndy);
128
int rtw_halmac_get_page_size(struct dvobj_priv *d, u32 *size);
129
int rtw_halmac_get_tx_agg_align_size(struct dvobj_priv *d, u16 *size);
130
int rtw_halmac_get_rx_agg_align_size(struct dvobj_priv *d, u8 *size);
131
int rtw_halmac_get_rx_drv_info_sz(struct dvobj_priv *, u8 *sz);
132
int rtw_halmac_get_tx_desc_size(struct dvobj_priv *d, u32 *size);
133
int rtw_halmac_get_rx_desc_size(struct dvobj_priv *d, u32 *size);
134
int rtw_halmac_get_tx_dma_ch_map(struct dvobj_priv *d, u8 *dma_ch_map, u8 map_size);
135
int rtw_halmac_get_ori_h2c_size(struct dvobj_priv *d, u32 *size);
136
int rtw_halmac_get_oqt_size(struct dvobj_priv *d, u8 *size);
137
int rtw_halmac_get_ac_queue_number(struct dvobj_priv *d, u8 *num);
138
int rtw_halmac_get_mac_address(struct dvobj_priv *d, enum _hw_port hwport, u8 *addr);
139
int rtw_halmac_get_network_type(struct dvobj_priv *d, enum _hw_port hwport, u8 *type);
140
int rtw_halmac_get_bcn_ctrl(struct dvobj_priv *d, enum _hw_port hwport, struct rtw_halmac_bcn_ctrl *bcn_ctrl);
141
/*int rtw_halmac_get_wow_reason(struct dvobj_priv *, u8 *reason);*/
142
143
/* Set operations */
144
int rtw_halmac_config_rx_info(struct dvobj_priv *d, enum halmac_drv_info info);
145
int rtw_halmac_set_max_dl_fw_size(struct dvobj_priv *d, u32 size);
146
int rtw_halmac_set_mac_address(struct dvobj_priv *d, enum _hw_port hwport, u8 *addr);
147
int rtw_halmac_set_bssid(struct dvobj_priv *d, enum _hw_port hwport, u8 *addr);
148
int rtw_halmac_set_tx_address(struct dvobj_priv *d, enum _hw_port hwport, u8 *addr);
149
int rtw_halmac_set_network_type(struct dvobj_priv *d, enum _hw_port hwport, u8 type);
150
int rtw_halmac_reset_tsf(struct dvobj_priv *d, enum _hw_port hwport);
151
int rtw_halmac_set_bcn_interval(struct dvobj_priv *d, enum _hw_port hwport, u32 space);
152
int rtw_halmac_set_bcn_ctrl(struct dvobj_priv *d, enum _hw_port hwport, struct rtw_halmac_bcn_ctrl *bcn_ctrl);
153
int rtw_halmac_set_aid(struct dvobj_priv *d, enum _hw_port hwport, u16 aid);
154
int rtw_halmac_set_bandwidth(struct dvobj_priv *d, u8 channel, u8 pri_ch_idx, u8 bw);
155
int rtw_halmac_set_edca(struct dvobj_priv *d, u8 queue, u8 aifs, u8 cw, u16 txop);
156
int rtw_halmac_set_rts_full_bw(struct dvobj_priv *d, u8 enable);
157
158
/* Functions */
159
int rtw_halmac_poweron(struct dvobj_priv *);
160
int rtw_halmac_poweroff(struct dvobj_priv *);
161
int rtw_halmac_init_hal(struct dvobj_priv *);
162
int rtw_halmac_init_hal_fw(struct dvobj_priv *, u8 *fw, u32 fwsize);
163
int rtw_halmac_init_hal_fw_file(struct dvobj_priv *, u8 *fwpath);
164
int rtw_halmac_deinit_hal(struct dvobj_priv *);
165
int rtw_halmac_self_verify(struct dvobj_priv *);
166
int rtw_halmac_txfifo_wait_empty(struct dvobj_priv *d, u32 timeout);
167
int rtw_halmac_dlfw(struct dvobj_priv *, u8 *fw, u32 fwsize);
168
int rtw_halmac_dlfw_from_file(struct dvobj_priv *, u8 *fwpath);
169
int rtw_halmac_dlfw_mem(struct dvobj_priv *d, u8 *fw, u32 fwsize, enum fw_mem mem);
170
int rtw_halmac_dlfw_mem_from_file(struct dvobj_priv *d, u8 *fwpath, enum fw_mem mem);
171
int rtw_halmac_phy_power_switch(struct dvobj_priv *, u8 enable);
172
int rtw_halmac_send_h2c(struct dvobj_priv *, u8 *h2c);
173
int rtw_halmac_c2h_handle(struct dvobj_priv *, u8 *c2h, u32 size);
174
175
/* eFuse */
176
int rtw_halmac_get_available_efuse_size(struct dvobj_priv *d, u32 *size);
177
int rtw_halmac_get_physical_efuse_size(struct dvobj_priv *, u32 *size);
178
int rtw_halmac_read_physical_efuse_map(struct dvobj_priv *, u8 *map, u32 size);
179
int rtw_halmac_read_physical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);
180
int rtw_halmac_write_physical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);
181
int rtw_halmac_get_logical_efuse_size(struct dvobj_priv *, u32 *size);
182
int rtw_halmac_read_logical_efuse_map(struct dvobj_priv *, u8 *map, u32 size, u8 *maskmap, u32 masksize);
183
int rtw_halmac_write_logical_efuse_map(struct dvobj_priv *, u8 *map, u32 size, u8 *maskmap, u32 masksize);
184
int rtw_halmac_read_logical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);
185
int rtw_halmac_write_logical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);
186
187
int rtw_halmac_write_bt_physical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);
188
int rtw_halmac_read_bt_physical_efuse_map(struct dvobj_priv *, u8 *map, u32 size);
189
190
int rtw_halmac_dump_fifo(struct dvobj_priv *d, u8 fifo_sel, u32 addr, u32 size, u8 *buffer);
191
int rtw_halmac_rx_agg_switch(struct dvobj_priv *, u8 enable);
192
193
/* Specific function APIs*/
194
int rtw_halmac_download_rsvd_page(struct dvobj_priv *dvobj, u8 pg_offset, u8 *pbuf, u32 size);
195
int rtw_halmac_fill_hal_spec(struct dvobj_priv *, struct hal_spec_t *);
196
int rtw_halmac_p2pps(struct dvobj_priv *dvobj, PHAL_P2P_PS_PARA pp2p_ps_para);
197
int rtw_halmac_iqk(struct dvobj_priv *d, u8 clear, u8 segment);
198
int rtw_halmac_cfg_phy_para(struct dvobj_priv *d, struct rtw_phy_parameter *para);
199
int rtw_halmac_led_cfg(struct dvobj_priv *d, u8 enable, u8 mode);
200
void rtw_halmac_led_switch(struct dvobj_priv *d, u8 on);
201
int rtw_halmac_bt_wake_cfg(struct dvobj_priv *d, u8 enable);
202
#ifdef CONFIG_PNO_SUPPORT
203
int rtw_halmac_pno_scanoffload(struct dvobj_priv *d, u32 enable);
204
#endif
205
206
#ifdef CONFIG_SDIO_HCI
207
int rtw_halmac_query_tx_page_num(struct dvobj_priv *);
208
int rtw_halmac_get_tx_queue_page_num(struct dvobj_priv *, u8 queue, u32 *page);
209
u32 rtw_halmac_sdio_get_tx_addr(struct dvobj_priv *, u8 *desc, u32 size);
210
int rtw_halmac_sdio_tx_allowed(struct dvobj_priv *, u8 *buf, u32 size);
211
u32 rtw_halmac_sdio_get_rx_addr(struct dvobj_priv *, u8 *seq);
212
int rtw_halmac_sdio_set_tx_format(struct dvobj_priv *d, enum halmac_sdio_tx_format format);
213
#endif /* CONFIG_SDIO_HCI */
214
215
#ifdef CONFIG_USB_HCI
216
u8 rtw_halmac_usb_get_bulkout_id(struct dvobj_priv *, u8 *buf, u32 size);
217
int rtw_halmac_usb_get_txagg_desc_num(struct dvobj_priv *d, u8 *num);
218
u8 rtw_halmac_switch_usb_mode(struct dvobj_priv *d, enum RTW_USB_SPEED usb_mode);
219
#endif /* CONFIG_USB_HCI */
220
221
#ifdef CONFIG_SUPPORT_TRX_SHARED
222
void dump_trx_share_mode(void *sel, _adapter *adapter);
223
#endif
224
225
#ifdef CONFIG_BEAMFORMING
226
#ifdef RTW_BEAMFORMING_VERSION_2
227
int rtw_halmac_bf_add_mu_bfer(struct dvobj_priv *d, u16 paid, u16 csi_para,
228
u16 my_aid, enum halmac_csi_seg_len sel, u8 *addr);
229
int rtw_halmac_bf_del_mu_bfer(struct dvobj_priv *d);
230
231
int rtw_halmac_bf_cfg_sounding(struct dvobj_priv *d, enum halmac_snd_role role,
232
enum halmac_data_rate rate);
233
int rtw_halmac_bf_del_sounding(struct dvobj_priv *d, enum halmac_snd_role role);
234
235
int rtw_halmac_bf_cfg_csi_rate(struct dvobj_priv *d, u8 rssi, u8 current_rate,
236
u8 fixrate_en, u8 *new_rate, u8 *bmp_ofdm54);
237
238
int rtw_halmac_bf_cfg_mu_mimo(struct dvobj_priv *d, enum halmac_snd_role role,
239
u8 *sounding_sts, u16 grouping_bitmap, u8 mu_tx_en,
240
u32 *given_gid_tab, u32 *given_user_pos);
241
#define rtw_halmac_bf_cfg_mu_bfee(d, gid_tab, user_pos) \
242
rtw_halmac_bf_cfg_mu_mimo(d, HAL_BFEE, NULL, 0, 0, gid_tab, user_pos)
243
244
#endif /* RTW_BEAMFORMING_VERSION_2 */
245
#endif /* CONFIG_BEAMFORMING */
246
247
#endif /* _HAL_HALMAC_H_ */
248
249