| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374 |
- #ifndef __INC_PHYDM_BEAMFORMING_H
- #define __INC_PHYDM_BEAMFORMING_H
- #ifndef BEAMFORMING_SUPPORT
- #define BEAMFORMING_SUPPORT 0
- #endif
- /*Beamforming Related*/
- #include "txbf/halcomtxbf.h"
- #include "txbf/haltxbfjaguar.h"
- #include "txbf/haltxbf8192e.h"
- #include "txbf/haltxbf8814a.h"
- #include "txbf/haltxbf8822b.h"
- #include "txbf/haltxbfinterface.h"
- #if (BEAMFORMING_SUPPORT == 1)
- #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
- #define eq_mac_addr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
- #define cp_mac_addr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5])
- #endif
- #define MAX_BEAMFORMEE_SU 2
- #define MAX_BEAMFORMER_SU 2
- #if (RTL8822B_SUPPORT == 1)
- #define MAX_BEAMFORMEE_MU 6
- #define MAX_BEAMFORMER_MU 1
- #else
- #define MAX_BEAMFORMEE_MU 0
- #define MAX_BEAMFORMER_MU 0
- #endif
- #define BEAMFORMEE_ENTRY_NUM (MAX_BEAMFORMEE_SU + MAX_BEAMFORMEE_MU)
- #define BEAMFORMER_ENTRY_NUM (MAX_BEAMFORMER_SU + MAX_BEAMFORMER_MU)
- #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
- /*for different naming between WIN and CE*/
- #define BEACON_QUEUE BCN_QUEUE_INX
- #define NORMAL_QUEUE MGT_QUEUE_INX
- #define RT_DISABLE_FUNC RTW_DISABLE_FUNC
- #define RT_ENABLE_FUNC RTW_ENABLE_FUNC
- #endif
- enum beamforming_entry_state {
- BEAMFORMING_ENTRY_STATE_UNINITIALIZE,
- BEAMFORMING_ENTRY_STATE_INITIALIZEING,
- BEAMFORMING_ENTRY_STATE_INITIALIZED,
- BEAMFORMING_ENTRY_STATE_PROGRESSING,
- BEAMFORMING_ENTRY_STATE_PROGRESSED
- };
- enum beamforming_notify_state {
- BEAMFORMING_NOTIFY_NONE,
- BEAMFORMING_NOTIFY_ADD,
- BEAMFORMING_NOTIFY_DELETE,
- BEAMFORMEE_NOTIFY_ADD_SU,
- BEAMFORMEE_NOTIFY_DELETE_SU,
- BEAMFORMEE_NOTIFY_ADD_MU,
- BEAMFORMEE_NOTIFY_DELETE_MU,
- BEAMFORMING_NOTIFY_RESET
- };
- enum beamforming_cap {
- BEAMFORMING_CAP_NONE = 0x0,
- BEAMFORMER_CAP_HT_EXPLICIT = BIT(1),
- BEAMFORMEE_CAP_HT_EXPLICIT = BIT(2),
- BEAMFORMER_CAP_VHT_SU = BIT(5), /* Self has er Cap, because Reg er & peer ee */
- BEAMFORMEE_CAP_VHT_SU = BIT(6), /* Self has ee Cap, because Reg ee & peer er */
- BEAMFORMER_CAP_VHT_MU = BIT(7), /* Self has er Cap, because Reg er & peer ee */
- BEAMFORMEE_CAP_VHT_MU = BIT(8), /* Self has ee Cap, because Reg ee & peer er */
- BEAMFORMER_CAP = BIT(9),
- BEAMFORMEE_CAP = BIT(10),
- };
- enum sounding_mode {
- SOUNDING_SW_VHT_TIMER = 0x0,
- SOUNDING_SW_HT_TIMER = 0x1,
- sounding_stop_all_timer = 0x2,
- SOUNDING_HW_VHT_TIMER = 0x3,
- SOUNDING_HW_HT_TIMER = 0x4,
- SOUNDING_STOP_OID_TIMER = 0x5,
- SOUNDING_AUTO_VHT_TIMER = 0x6,
- SOUNDING_AUTO_HT_TIMER = 0x7,
- SOUNDING_FW_VHT_TIMER = 0x8,
- SOUNDING_FW_HT_TIMER = 0x9,
- };
- struct _RT_BEAMFORM_STAINFO {
- u8 *ra;
- u16 aid;
- u16 mac_id;
- u8 my_mac_addr[6];
- WIRELESS_MODE wireless_mode;
- CHANNEL_WIDTH bw;
- enum beamforming_cap beamform_cap;
- u8 ht_beamform_cap;
- u16 vht_beamform_cap;
- u8 cur_beamform;
- u16 cur_beamform_vht;
- };
- struct _RT_BEAMFORMEE_ENTRY {
- boolean is_used;
- boolean is_txbf;
- boolean is_sound;
- u16 aid; /*Used to construct AID field of NDPA packet.*/
- u16 mac_id; /*Used to Set Reg42C in IBSS mode. */
- u16 p_aid; /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */
- u16 g_id; /*Used to fill Tx DESC*/
- u8 my_mac_addr[6];
- u8 mac_addr[6]; /*Used to fill Reg6E4 to fill Mac address of CSI report frame.*/
- CHANNEL_WIDTH sound_bw; /*Sounding band_width*/
- u16 sound_period;
- enum beamforming_cap beamform_entry_cap;
- enum beamforming_entry_state beamform_entry_state;
- boolean is_beamforming_in_progress;
- /*u8 log_seq; // Move to _RT_BEAMFORMER_ENTRY*/
- /*u16 log_retry_cnt:3; // 0~4 // Move to _RT_BEAMFORMER_ENTRY*/
- /*u16 LogSuccessCnt:2; // 0~2 // Move to _RT_BEAMFORMER_ENTRY*/
- u16 log_status_fail_cnt:5; /* 0~21 */
- u16 default_csi_cnt:5; /* 0~21 */
- u8 csi_matrix[327];
- u16 csi_matrix_len;
- u8 num_of_sounding_dim;
- u8 comp_steering_num_of_bfer;
- u8 su_reg_index;
- /*For MU-MIMO*/
- boolean is_mu_sta;
- u8 mu_reg_index;
- u8 gid_valid[8];
- u8 user_position[16];
- };
- struct _RT_BEAMFORMER_ENTRY {
- boolean is_used;
- /*P_AID of BFer entry is probably not used*/
- u16 p_aid; /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */
- u16 g_id;
- u8 my_mac_addr[6];
- u8 mac_addr[6];
- enum beamforming_cap beamform_entry_cap;
- u8 num_of_sounding_dim;
- u8 clock_reset_times; /*Modified by Jeffery @2015-04-10*/
- u8 pre_log_seq; /*Modified by Jeffery @2015-03-30*/
- u8 log_seq; /*Modified by Jeffery @2014-10-29*/
- u16 log_retry_cnt:3; /*Modified by Jeffery @2014-10-29*/
- u16 log_success:2; /*Modified by Jeffery @2014-10-29*/
- u8 su_reg_index;
- /*For MU-MIMO*/
- boolean is_mu_ap;
- u8 gid_valid[8];
- u8 user_position[16];
- u16 aid;
- };
- struct _RT_SOUNDING_INFO {
- u8 sound_idx;
- CHANNEL_WIDTH sound_bw;
- enum sounding_mode sound_mode;
- u16 sound_period;
- };
- struct _RT_BEAMFORMING_OID_INFO {
- u8 sound_oid_idx;
- CHANNEL_WIDTH sound_oid_bw;
- enum sounding_mode sound_oid_mode;
- u16 sound_oid_period;
- };
- struct _RT_BEAMFORMING_INFO {
- enum beamforming_cap beamform_cap;
- struct _RT_BEAMFORMEE_ENTRY beamformee_entry[BEAMFORMEE_ENTRY_NUM];
- struct _RT_BEAMFORMER_ENTRY beamformer_entry[BEAMFORMER_ENTRY_NUM];
- struct _RT_BEAMFORM_STAINFO beamform_sta_info;
- u8 beamformee_cur_idx;
- struct timer_list beamforming_timer;
- struct timer_list mu_timer;
- struct _RT_SOUNDING_INFO sounding_info;
- struct _RT_BEAMFORMING_OID_INFO beamforming_oid_info;
- struct _HAL_TXBF_INFO txbf_info;
- u8 sounding_sequence;
- u8 beamformee_su_cnt;
- u8 beamformer_su_cnt;
- u32 beamformee_su_reg_maping;
- u32 beamformer_su_reg_maping;
- /*For MU-MINO*/
- u8 beamformee_mu_cnt;
- u8 beamformer_mu_cnt;
- u32 beamformee_mu_reg_maping;
- u8 mu_ap_index;
- boolean is_mu_sounding;
- u8 first_mu_bfee_index;
- boolean is_mu_sounding_in_progress;
- boolean dbg_disable_mu_tx;
- boolean apply_v_matrix;
- boolean snding3ss;
- #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
- struct _ADAPTER *source_adapter;
- #endif
- /* Control register */
- u32 reg_mu_tx_ctrl; /* For USB/SDIO interfaces aync I/O */
- };
- struct _RT_NDPA_STA_INFO {
- u16 aid:12;
- u16 feedback_type:1;
- u16 nc_index:3;
- };
- enum phydm_acting_type {
- phydm_acting_as_ibss = 0,
- phydm_acting_as_ap = 1
- };
- enum beamforming_cap
- phydm_beamforming_get_entry_beam_cap_by_mac_id(
- void *p_dm_void,
- u8 mac_id
- );
- struct _RT_BEAMFORMEE_ENTRY *
- phydm_beamforming_get_bfee_entry_by_addr(
- void *p_dm_void,
- u8 *RA,
- u8 *idx
- );
- struct _RT_BEAMFORMER_ENTRY *
- phydm_beamforming_get_bfer_entry_by_addr(
- void *p_dm_void,
- u8 *TA,
- u8 *idx
- );
- void
- phydm_beamforming_notify(
- void *p_dm_void
- );
- boolean
- phydm_acting_determine(
- void *p_dm_void,
- enum phydm_acting_type type
- );
- void
- beamforming_enter(
- void *p_dm_void,
- u16 sta_idx
- );
- void
- beamforming_leave(
- void *p_dm_void,
- u8 *RA
- );
- boolean
- beamforming_start_fw(
- void *p_dm_void,
- u8 idx
- );
- void
- beamforming_check_sounding_success(
- void *p_dm_void,
- boolean status
- );
- void
- phydm_beamforming_end_sw(
- void *p_dm_void,
- boolean status
- );
- void
- beamforming_timer_callback(
- void *p_dm_void
- );
- void
- phydm_beamforming_init(
- void *p_dm_void
- );
- enum beamforming_cap
- phydm_beamforming_get_beam_cap(
- void *p_dm_void,
- struct _RT_BEAMFORMING_INFO *p_beam_info
- );
- boolean
- beamforming_control_v1(
- void *p_dm_void,
- u8 *RA,
- u8 AID,
- u8 mode,
- CHANNEL_WIDTH BW,
- u8 rate
- );
- boolean
- phydm_beamforming_control_v2(
- void *p_dm_void,
- u8 idx,
- u8 mode,
- CHANNEL_WIDTH BW,
- u16 period
- );
- void
- phydm_beamforming_watchdog(
- void *p_dm_void
- );
- void
- beamforming_sw_timer_callback(
- #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
- struct timer_list *p_timer
- #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
- void *function_context
- #endif
- );
- boolean
- beamforming_send_ht_ndpa_packet(
- void *p_dm_void,
- u8 *RA,
- CHANNEL_WIDTH BW,
- u8 q_idx
- );
- boolean
- beamforming_send_vht_ndpa_packet(
- void *p_dm_void,
- u8 *RA,
- u16 AID,
- CHANNEL_WIDTH BW,
- u8 q_idx
- );
- #else
- #define beamforming_gid_paid(adapter, p_tcb)
- #define phydm_acting_determine(p_dm_odm, type) false
- #define beamforming_enter(p_dm_odm, sta_idx)
- #define beamforming_leave(p_dm_odm, RA)
- #define beamforming_end_fw(p_dm_odm)
- #define beamforming_control_v1(p_dm_odm, RA, AID, mode, BW, rate) true
- #define beamforming_control_v2(p_dm_odm, idx, mode, BW, period) true
- #define phydm_beamforming_end_sw(p_dm_odm, _status)
- #define beamforming_timer_callback(p_dm_odm)
- #define phydm_beamforming_init(p_dm_odm)
- #define phydm_beamforming_control_v2(p_dm_odm, _idx, _mode, _BW, _period) false
- #define beamforming_watchdog(p_dm_odm)
- #define phydm_beamforming_watchdog(p_dm_odm)
- #endif
- #endif
|