Path: blob/master/ALFA-W1F1/RTL8814AU/hal/hal_halmac.h
1307 views
/******************************************************************************1*2* Copyright(c) 2015 - 2018 Realtek Corporation.3*4* This program is free software; you can redistribute it and/or modify it5* under the terms of version 2 of the GNU General Public License as6* published by the Free Software Foundation.7*8* This program is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for11* more details.12*13*****************************************************************************/14#ifndef _HAL_HALMAC_H_15#define _HAL_HALMAC_H_1617#include <drv_types.h> /* adapter_to_dvobj(), struct intf_hdl and etc. */18#include <hal_data.h> /* struct hal_spec_t */19#include "halmac/halmac_api.h" /* struct halmac_adapter* and etc. */2021/* HALMAC Definition for Driver */22#define RTW_HALMAC_H2C_MAX_SIZE 823#define RTW_HALMAC_BA_SSN_RPT_SIZE 42425#define dvobj_set_halmac(d, mac) ((d)->halmac = (mac))26#define dvobj_to_halmac(d) ((struct halmac_adapter *)((d)->halmac))27#define adapter_to_halmac(p) dvobj_to_halmac(adapter_to_dvobj(p))2829/* for H2C cmd */30#define MAX_H2C_BOX_NUMS 431#define MESSAGE_BOX_SIZE 432#define EX_MESSAGE_BOX_SIZE 43334typedef enum _RTW_HALMAC_MODE {35RTW_HALMAC_MODE_NORMAL,36RTW_HALMAC_MODE_WIFI_TEST,37} RTW_HALMAC_MODE;3839union rtw_phy_para_data {40struct _mac {41u32 value; /* value to be set in bit mask(msk) */42u32 msk; /* bit mask */43u16 offset; /* address */44u8 msk_en; /* 0/1 for msk invalid/valid */45u8 size; /* Unit is bytes, and value should be 1/2/4 */46} mac;47struct _bb {48u32 value;49u32 msk;50u16 offset;51u8 msk_en;52u8 size;53} bb;54struct _rf {55u32 value;56u32 msk;57u8 offset;58u8 msk_en;59/*60* 0: path A61* 1: path B62* 2: path C63* 3: path D64*/65u8 path;66} rf;67struct _delay {68/*69* 0: microsecond (us)70* 1: millisecond (ms)71*/72u8 unit;73u16 value;74} delay;75};7677struct rtw_phy_parameter {78/*79* 0: MAC register80* 1: BB register81* 2: RF register82* 3: Delay83* 0xFF: Latest(End) command84*/85u8 cmd;86union rtw_phy_para_data data;87};8889struct rtw_halmac_bcn_ctrl {90u8 rx_bssid_fit:1; /* 0:HW handle beacon, 1:ignore */91u8 txbcn_rpt:1; /* Enable TXBCN report in ad hoc and AP mode */92u8 tsf_update:1; /* Update TSF when beacon or probe response */93u8 enable_bcn:1; /* Enable beacon related functions */94u8 rxbcn_rpt:1; /* Enable RXBCNOK report */95u8 p2p_ctwin:1; /* Enable P2P CTN WINDOWS function */96u8 p2p_bcn_area:1; /* Enable P2P BCN area on function */97};9899extern struct halmac_platform_api rtw_halmac_platform_api;100101/* HALMAC API for Driver(HAL) */102u8 rtw_halmac_read8(struct intf_hdl *, u32 addr);103u16 rtw_halmac_read16(struct intf_hdl *, u32 addr);104u32 rtw_halmac_read32(struct intf_hdl *, u32 addr);105void rtw_halmac_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);106#ifdef CONFIG_SDIO_INDIRECT_ACCESS107u8 rtw_halmac_iread8(struct intf_hdl *pintfhdl, u32 addr);108u16 rtw_halmac_iread16(struct intf_hdl *pintfhdl, u32 addr);109u32 rtw_halmac_iread32(struct intf_hdl *pintfhdl, u32 addr);110#endif /* CONFIG_SDIO_INDIRECT_ACCESS */111int rtw_halmac_write8(struct intf_hdl *, u32 addr, u8 value);112int rtw_halmac_write16(struct intf_hdl *, u32 addr, u16 value);113int rtw_halmac_write32(struct intf_hdl *, u32 addr, u32 value);114115/* Software Information */116void rtw_halmac_get_version(char *str, u32 len);117118/* Software Initialization */119int rtw_halmac_init_adapter(struct dvobj_priv *d, struct halmac_platform_api *pf_api);120int rtw_halmac_deinit_adapter(struct dvobj_priv *);121122/* Get operations */123int rtw_halmac_get_hw_value(struct dvobj_priv *d, enum halmac_hw_id hw_id, void *pvalue);124int rtw_halmac_get_tx_fifo_size(struct dvobj_priv *d, u32 *size);125int rtw_halmac_get_rx_fifo_size(struct dvobj_priv *d, u32 *size);126int rtw_halmac_get_rsvd_drv_pg_bndy(struct dvobj_priv *d, u16 *bndy);127int rtw_halmac_get_page_size(struct dvobj_priv *d, u32 *size);128int rtw_halmac_get_tx_agg_align_size(struct dvobj_priv *d, u16 *size);129int rtw_halmac_get_rx_agg_align_size(struct dvobj_priv *d, u8 *size);130int rtw_halmac_get_rx_drv_info_sz(struct dvobj_priv *, u8 *sz);131int rtw_halmac_get_tx_desc_size(struct dvobj_priv *d, u32 *size);132int rtw_halmac_get_rx_desc_size(struct dvobj_priv *d, u32 *size);133int rtw_halmac_get_tx_dma_ch_map(struct dvobj_priv *d, u8 *dma_ch_map, u8 map_size);134int rtw_halmac_get_ori_h2c_size(struct dvobj_priv *d, u32 *size);135int rtw_halmac_get_oqt_size(struct dvobj_priv *d, u8 *size);136int rtw_halmac_get_ac_queue_number(struct dvobj_priv *d, u8 *num);137int rtw_halmac_get_mac_address(struct dvobj_priv *d, enum _hw_port hwport, u8 *addr);138int rtw_halmac_get_network_type(struct dvobj_priv *d, enum _hw_port hwport, u8 *type);139int rtw_halmac_get_bcn_ctrl(struct dvobj_priv *d, enum _hw_port hwport, struct rtw_halmac_bcn_ctrl *bcn_ctrl);140/*int rtw_halmac_get_wow_reason(struct dvobj_priv *, u8 *reason);*/141142/* Set operations */143int rtw_halmac_config_rx_info(struct dvobj_priv *d, enum halmac_drv_info info);144int rtw_halmac_set_max_dl_fw_size(struct dvobj_priv *d, u32 size);145int rtw_halmac_set_mac_address(struct dvobj_priv *d, enum _hw_port hwport, u8 *addr);146int rtw_halmac_set_bssid(struct dvobj_priv *d, enum _hw_port hwport, u8 *addr);147int rtw_halmac_set_tx_address(struct dvobj_priv *d, enum _hw_port hwport, u8 *addr);148int rtw_halmac_set_network_type(struct dvobj_priv *d, enum _hw_port hwport, u8 type);149int rtw_halmac_reset_tsf(struct dvobj_priv *d, enum _hw_port hwport);150int rtw_halmac_set_bcn_interval(struct dvobj_priv *d, enum _hw_port hwport, u32 space);151int rtw_halmac_set_bcn_ctrl(struct dvobj_priv *d, enum _hw_port hwport, struct rtw_halmac_bcn_ctrl *bcn_ctrl);152int rtw_halmac_set_aid(struct dvobj_priv *d, enum _hw_port hwport, u16 aid);153int rtw_halmac_set_bandwidth(struct dvobj_priv *d, u8 channel, u8 pri_ch_idx, u8 bw);154int rtw_halmac_set_edca(struct dvobj_priv *d, u8 queue, u8 aifs, u8 cw, u16 txop);155int rtw_halmac_set_rts_full_bw(struct dvobj_priv *d, u8 enable);156157/* Functions */158int rtw_halmac_poweron(struct dvobj_priv *);159int rtw_halmac_poweroff(struct dvobj_priv *);160int rtw_halmac_init_hal(struct dvobj_priv *);161int rtw_halmac_init_hal_fw(struct dvobj_priv *, u8 *fw, u32 fwsize);162int rtw_halmac_init_hal_fw_file(struct dvobj_priv *, u8 *fwpath);163int rtw_halmac_deinit_hal(struct dvobj_priv *);164int rtw_halmac_self_verify(struct dvobj_priv *);165int rtw_halmac_txfifo_wait_empty(struct dvobj_priv *d, u32 timeout);166int rtw_halmac_dlfw(struct dvobj_priv *, u8 *fw, u32 fwsize);167int rtw_halmac_dlfw_from_file(struct dvobj_priv *, u8 *fwpath);168int rtw_halmac_dlfw_mem(struct dvobj_priv *d, u8 *fw, u32 fwsize, enum fw_mem mem);169int rtw_halmac_dlfw_mem_from_file(struct dvobj_priv *d, u8 *fwpath, enum fw_mem mem);170int rtw_halmac_phy_power_switch(struct dvobj_priv *, u8 enable);171int rtw_halmac_send_h2c(struct dvobj_priv *, u8 *h2c);172int rtw_halmac_c2h_handle(struct dvobj_priv *, u8 *c2h, u32 size);173174/* eFuse */175int rtw_halmac_get_available_efuse_size(struct dvobj_priv *d, u32 *size);176int rtw_halmac_get_physical_efuse_size(struct dvobj_priv *, u32 *size);177int rtw_halmac_read_physical_efuse_map(struct dvobj_priv *, u8 *map, u32 size);178int rtw_halmac_read_physical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);179int rtw_halmac_write_physical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);180int rtw_halmac_get_logical_efuse_size(struct dvobj_priv *, u32 *size);181int rtw_halmac_read_logical_efuse_map(struct dvobj_priv *, u8 *map, u32 size, u8 *maskmap, u32 masksize);182int rtw_halmac_write_logical_efuse_map(struct dvobj_priv *, u8 *map, u32 size, u8 *maskmap, u32 masksize);183int rtw_halmac_read_logical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);184int rtw_halmac_write_logical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);185186int rtw_halmac_write_bt_physical_efuse(struct dvobj_priv *, u32 offset, u32 cnt, u8 *data);187int rtw_halmac_read_bt_physical_efuse_map(struct dvobj_priv *, u8 *map, u32 size);188189int rtw_halmac_dump_fifo(struct dvobj_priv *d, u8 fifo_sel, u32 addr, u32 size, u8 *buffer);190int rtw_halmac_rx_agg_switch(struct dvobj_priv *, u8 enable);191192/* Specific function APIs*/193int rtw_halmac_download_rsvd_page(struct dvobj_priv *dvobj, u8 pg_offset, u8 *pbuf, u32 size);194int rtw_halmac_fill_hal_spec(struct dvobj_priv *, struct hal_spec_t *);195int rtw_halmac_p2pps(struct dvobj_priv *dvobj, PHAL_P2P_PS_PARA pp2p_ps_para);196int rtw_halmac_iqk(struct dvobj_priv *d, u8 clear, u8 segment);197int rtw_halmac_cfg_phy_para(struct dvobj_priv *d, struct rtw_phy_parameter *para);198int rtw_halmac_led_cfg(struct dvobj_priv *d, u8 enable, u8 mode);199void rtw_halmac_led_switch(struct dvobj_priv *d, u8 on);200int rtw_halmac_bt_wake_cfg(struct dvobj_priv *d, u8 enable);201#ifdef CONFIG_PNO_SUPPORT202int rtw_halmac_pno_scanoffload(struct dvobj_priv *d, u32 enable);203#endif204205#ifdef CONFIG_SDIO_HCI206int rtw_halmac_query_tx_page_num(struct dvobj_priv *);207int rtw_halmac_get_tx_queue_page_num(struct dvobj_priv *, u8 queue, u32 *page);208u32 rtw_halmac_sdio_get_tx_addr(struct dvobj_priv *, u8 *desc, u32 size);209int rtw_halmac_sdio_tx_allowed(struct dvobj_priv *, u8 *buf, u32 size);210u32 rtw_halmac_sdio_get_rx_addr(struct dvobj_priv *, u8 *seq);211int rtw_halmac_sdio_set_tx_format(struct dvobj_priv *d, enum halmac_sdio_tx_format format);212#endif /* CONFIG_SDIO_HCI */213214#ifdef CONFIG_USB_HCI215u8 rtw_halmac_usb_get_bulkout_id(struct dvobj_priv *, u8 *buf, u32 size);216int rtw_halmac_usb_get_txagg_desc_num(struct dvobj_priv *d, u8 *num);217u8 rtw_halmac_switch_usb_mode(struct dvobj_priv *d, enum RTW_USB_SPEED usb_mode);218#endif /* CONFIG_USB_HCI */219220#ifdef CONFIG_SUPPORT_TRX_SHARED221void dump_trx_share_mode(void *sel, _adapter *adapter);222#endif223224#ifdef CONFIG_BEAMFORMING225#ifdef RTW_BEAMFORMING_VERSION_2226int rtw_halmac_bf_add_mu_bfer(struct dvobj_priv *d, u16 paid, u16 csi_para,227u16 my_aid, enum halmac_csi_seg_len sel, u8 *addr);228int rtw_halmac_bf_del_mu_bfer(struct dvobj_priv *d);229230int rtw_halmac_bf_cfg_sounding(struct dvobj_priv *d, enum halmac_snd_role role,231enum halmac_data_rate rate);232int rtw_halmac_bf_del_sounding(struct dvobj_priv *d, enum halmac_snd_role role);233234int rtw_halmac_bf_cfg_csi_rate(struct dvobj_priv *d, u8 rssi, u8 current_rate,235u8 fixrate_en, u8 *new_rate, u8 *bmp_ofdm54);236237int rtw_halmac_bf_cfg_mu_mimo(struct dvobj_priv *d, enum halmac_snd_role role,238u8 *sounding_sts, u16 grouping_bitmap, u8 mu_tx_en,239u32 *given_gid_tab, u32 *given_user_pos);240#define rtw_halmac_bf_cfg_mu_bfee(d, gid_tab, user_pos) \241rtw_halmac_bf_cfg_mu_mimo(d, HAL_BFEE, NULL, 0, 0, gid_tab, user_pos)242243#endif /* RTW_BEAMFORMING_VERSION_2 */244#endif /* CONFIG_BEAMFORMING */245246#endif /* _HAL_HALMAC_H_ */247248249