summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrishna Kumaar Natarajan <kknatara@qca.qualcomm.com>2014-09-16 11:12:36 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-09-17 13:54:35 -0700
commitb58a5c025dad4a4f3ce51e30cb489459bd813480 (patch)
treeadbaae4b7cc951556156785219f06441ba276a0d
parentc7e5be4c397d4b2c283c4f21ec69a45688e8f69d (diff)
qcacld: CL 1074397 - update fw common interface files
This change set update the fw common interface files associated with the CL 1074397 Change-Id: Idb9d8482baf73564156487b00677f6611e109f2a CRs-Fixed: 725315
-rw-r--r--CORE/SERVICES/COMMON/wlan_defs.h246
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h5
2 files changed, 248 insertions, 3 deletions
diff --git a/CORE/SERVICES/COMMON/wlan_defs.h b/CORE/SERVICES/COMMON/wlan_defs.h
index a1c890788b6f..ffe4664af2ee 100644
--- a/CORE/SERVICES/COMMON/wlan_defs.h
+++ b/CORE/SERVICES/COMMON/wlan_defs.h
@@ -40,8 +40,11 @@
* This file contains WLAN definitions that may be used across both
* Host and Target software.
*/
-
+#if defined(CONFIG_AR900B_SUPPORT) || defined(AR900B)
+#define MAX_SPATIAL_STREAM 4
+#else
#define MAX_SPATIAL_STREAM 3
+#endif
typedef enum {
@@ -79,7 +82,11 @@ typedef enum {
}WLAN_CAPABILITY;
+#if defined(CONFIG_AR900B_SUPPORT) || defined(AR900B)
+#define A_RATEMASK A_UINT64
+#else
#define A_RATEMASK A_UINT32
+#endif
#define A_RATEMASK_NUM_OCTET (sizeof (A_RATEMASK))
#define A_RATEMASK_NUM_BITS ((sizeof (A_RATEMASK)) << 3)
@@ -223,6 +230,11 @@ typedef struct {
(_dst).time_stamp = (_ts); \
} while (0)
+#define RC_SET_TXBF_DONE_INFO(_dst, _f) \
+ do { \
+ (_dst).flags |= (_f); \
+ } while (0)
+
/* NOTE: NUM_DYN_BW and NUM_SCHED_ENTRIES cannot be changed without breaking WMI Compatibility */
#define NUM_SCHED_ENTRIES 2
#define NUM_DYN_BW_MAX 4
@@ -239,6 +251,35 @@ typedef A_UINT8 A_RATE;
#error "Extend rate table module for 80+80/160 MHz first"
#endif
+#if defined(CONFIG_AR900B_SUPPORT) || defined(AR900B)
+typedef struct{
+ A_UINT32 psdu_len [NUM_DYN_BW * NUM_SCHED_ENTRIES];
+ A_UINT16 flags[NUM_SCHED_ENTRIES][NUM_DYN_BW];
+ A_RATE rix[NUM_SCHED_ENTRIES][NUM_DYN_BW];
+ A_UINT8 tpc[NUM_SCHED_ENTRIES][NUM_DYN_BW];
+ A_UINT32 antmask[NUM_SCHED_ENTRIES];
+ A_UINT8 num_mpdus [NUM_DYN_BW * NUM_SCHED_ENTRIES];
+ A_UINT16 txbf_cv_len;
+ A_UINT32 txbf_cv_ptr;
+ A_UINT16 txbf_flags;
+ A_UINT16 txbf_cv_size;
+ A_UINT8 txbf_nc_idx;
+ A_UINT8 tries[NUM_SCHED_ENTRIES];
+ A_UINT8 bw_mask[NUM_SCHED_ENTRIES];
+ A_UINT8 max_bw[NUM_SCHED_ENTRIES];
+ A_UINT8 num_sched_entries;
+ A_UINT8 paprd_mask;
+ A_UINT8 rts_rix;
+ A_UINT8 sh_pream;
+ A_UINT8 min_spacing_1_4_us;
+ A_UINT8 fixed_delims;
+ A_UINT8 bw_in_service;
+ A_RATE probe_rix;
+ A_UINT8 num_valid_rates;
+ A_UINT8 rtscts_tpc;
+} RC_TX_RATE_SCHEDULE;
+
+#else
typedef struct{
A_UINT32 psdu_len [NUM_DYN_BW * NUM_SCHED_ENTRIES];
A_UINT16 flags [NUM_DYN_BW * NUM_SCHED_ENTRIES];
@@ -258,6 +299,7 @@ typedef struct{
A_UINT8 bw_in_service;
A_RATE probe_rix;
} RC_TX_RATE_SCHEDULE;
+#endif
typedef struct{
A_UINT16 flags [NUM_DYN_BW * NUM_SCHED_ENTRIES];
@@ -328,7 +370,6 @@ typedef struct {
A_UINT32 num_units;
} wlan_host_mem_req;
-
typedef enum {
IGNORE_DTIM = 0x01,
NORMAL_DTIM = 0x02,
@@ -336,6 +377,35 @@ typedef enum {
AUTO_DTIM = 0x04,
} BEACON_DTIM_POLICY;
+#if defined (AR900B)
+/* During test it is observed that 6 * 400 = 2400 can
+ * be alloced in addition to CFG_TGT_NUM_MSDU_DESC.
+ * If there is any change memory requirement, this number
+ * needs to be revisited. */
+#define TOTAL_VOW_ALLOCABLE 2400
+#define VOW_DESC_GRAB_MAX 800
+
+#define VOW_GET_NUM_VI_STA(vow_config) (((vow_config) & 0xffff0000) >> 16)
+#define VOW_GET_DESC_PER_VI_STA(vow_config) ((vow_config) & 0x0000ffff)
+
+/***TODO!!! Get these values dynamically in WMI_READY event and use it to calculate the mem req*/
+/* size in bytes required for msdu descriptor. If it changes, this should be updated. LARGE_AP
+ * case is not considered. LARGE_AP is disabled when VoW is enabled.*/
+#define MSDU_DESC_SIZE 20
+
+/* size in bytes required to support a peer in target.
+ * This obtained by considering Two tids per peer.
+ * peer structure = 168 bytes
+ * tid = 96 bytes (per sta 2 means we need 192 bytes)
+ * peer_cb = 16 * 2
+ * key = 52 * 2
+ * AST = 12 * 2
+ * rate, reorder.. = 384
+ * smart antenna = 50
+ */
+#define MEMORY_REQ_FOR_PEER 800
+#endif
+
/*
* NB: it is important to keep all the fields in the structure dword long
* so that it is easy to handle the statistics in BE host.
@@ -362,12 +432,19 @@ struct wlan_dbg_tx_stats {
A_INT32 hw_reaped;
/* Num underruns */
A_INT32 underrun;
+#if defined(AR900B)
+ /* HW Paused. */
+ A_UINT32 hw_paused;
+#endif
/* Num PPDUs cleaned up in TX abort */
A_INT32 tx_abort;
/* Num MPDUs requed by SW */
A_INT32 mpdus_requed;
/* excessive retries */
A_UINT32 tx_ko;
+#if defined(AR900B)
+ A_UINT32 tx_xretry;
+#endif
/* data hw rate code */
A_UINT32 data_rc;
/* Scheduler self triggers */
@@ -384,9 +461,34 @@ struct wlan_dbg_tx_stats {
A_UINT32 pdev_resets;
/* frames dropped due to non-availability of stateless TIDs */
A_UINT32 stateless_tid_alloc_failure;
+ /* PhY/BB underrun */
A_UINT32 phy_underrun;
/* MPDU is more than txop limit */
A_UINT32 txop_ovf;
+#if defined(AR900B)
+ /* Number of Sequences posted */
+ A_UINT32 seq_posted;
+ /* Number of Sequences failed queueing */
+ A_UINT32 seq_failed_queueing;
+ /* Number of Sequences completed */
+ A_UINT32 seq_completed;
+ /* Number of Sequences restarted */
+ A_UINT32 seq_restarted;
+ /* Number of MU Sequences posted */
+ A_UINT32 mu_seq_posted;
+ /* Num MPDUs flushed by SW, HWPAUSED, SW TXABORT (Reset,channel change) */
+ A_INT32 mpdus_sw_flush;
+ /* Num MPDUs filtered by HW, all filter condition (TTL expired) */
+ A_INT32 mpdus_hw_filter;
+ /* Num MPDUs truncated by PDG (TXOP, TBTT, PPDU_duration based on rate, dyn_bw) */
+ A_INT32 mpdus_truncated;
+ /* Num MPDUs that was tried but didn't receive ACK or BA */
+ A_INT32 mpdus_ack_failed;
+ /* Num MPDUs that was dropped du to expiry. */
+ A_INT32 mpdus_expired;
+ /* Num mc drops */
+ //A_UINT32 mc_drop;
+#endif
};
struct wlan_dbg_rx_stats {
@@ -413,8 +515,19 @@ struct wlan_dbg_rx_stats {
A_INT32 phy_err_drop;
/* Number of mpdu errors - FCS, MIC, ENC etc. */
A_INT32 mpdu_errs;
+#if defined(AR900B)
+ /* Number of rx overflow errors. */
+ A_INT32 rx_ovfl_errs;
+#endif
};
+#if defined(AR900B)
+struct wlan_dbg_mem_stats {
+ A_UINT32 iram_free_size;
+ A_UINT32 dram_free_size;
+};
+#endif
+
struct wlan_dbg_peer_stats {
A_INT32 dummy; /* REMOVE THIS ONCE REAL PEER STAT COUNTERS ARE ADDED */
@@ -435,12 +548,19 @@ typedef struct {
A_UINT32 rssi_chain0;
A_UINT32 rssi_chain1;
A_UINT32 rssi_chain2;
+#if defined(AR900B)
+ A_UINT32 rssi_chain3;
+#endif
} wlan_dbg_rx_rate_info_t ;
typedef struct {
A_UINT32 mcs[10];
A_UINT32 sgi[10];
+#if defined(CONFIG_AR900B_SUPPORT) || defined(AR900B)
+ A_UINT32 nss[4];
+#else
A_UINT32 nss[3];
+#endif
A_UINT32 stbc[10];
A_UINT32 bw[3];
A_UINT32 pream[4];
@@ -449,17 +569,137 @@ typedef struct {
A_UINT32 ack_rssi;
} wlan_dbg_tx_rate_info_t ;
+#if defined(AR900B)
+#define WHAL_DBG_PHY_ERR_MAXCNT 18
+#define WHAL_DBG_SIFS_STATUS_MAXCNT 8
+#define WHAL_DBG_SIFS_ERR_MAXCNT 8
+#define WHAL_DBG_CMD_RESULT_MAXCNT 8
+#define WHAL_DBG_CMD_STALL_ERR_MAXCNT 4
+#define WHAL_DBG_CMD_RESULT_MAXCNT 8
+#define WHAL_DBG_FLUSH_REASON_MAXCNT 18
+
+#define WHAL_DBG_PHY_ERR_MAXCNT 18
+#define WHAL_DBG_SIFS_ERR_MAXCNT 8
+#define WHAL_DBG_CMD_STALL_ERR_MAXCNT 4
+#define WHAL_DBG_FLUSH_REASON_MAXCNT 18
+typedef enum {
+ WIFI_URRN_STATS_FIRST_PKT,
+ WIFI_URRN_STATS_BETWEEN_MPDU,
+ WIFI_URRN_STATS_WITHIN_MPDU,
+ WHAL_MAX_URRN_STATS
+} wifi_urrn_type_t;
+
+typedef struct wlan_dbg_txbf_snd_stats {
+ A_UINT32 cbf_20[4];
+ A_UINT32 cbf_40[4];
+ A_UINT32 cbf_80[4];
+ A_UINT32 sounding[9];
+}wlan_dbg_txbf_snd_stats_t;
+
+typedef struct wlan_dbg_wifi2_error_stats {
+ A_UINT32 urrn_stats[WHAL_MAX_URRN_STATS];
+ A_UINT32 flush_errs[WHAL_DBG_FLUSH_REASON_MAXCNT];
+ A_UINT32 schd_stall_errs[WHAL_DBG_CMD_STALL_ERR_MAXCNT];
+ A_UINT32 schd_cmd_result[WHAL_DBG_CMD_RESULT_MAXCNT];
+ A_UINT32 sifs_status[WHAL_DBG_SIFS_STATUS_MAXCNT];
+ A_UINT8 phy_errs[WHAL_DBG_PHY_ERR_MAXCNT];
+ A_UINT32 rx_rate_inval;
+}wlan_dbg_wifi2_error_stats_t;
+
+typedef struct wlan_dbg_wifi2_error2_stats {
+ A_UINT32 schd_errs[WHAL_DBG_CMD_STALL_ERR_MAXCNT];
+ A_UINT32 sifs_errs[WHAL_DBG_SIFS_ERR_MAXCNT];
+}wlan_dbg_wifi2_error2_stats_t;
+
+typedef struct wlan_dbg_txbf_data_stats {
+ A_UINT32 tx_txbf_vht[10];
+ A_UINT32 rx_txbf_vht[10];
+ A_UINT32 tx_txbf_ht[8];
+ A_UINT32 tx_txbf_ofdm[8];
+ A_UINT32 tx_txbf_cck[7];
+} wlan_dbg_txbf_data_stats_t;
+
+struct wlan_dbg_tx_mu_stats {
+ A_UINT32 mu_sch_nusers_2;
+ A_UINT32 mu_sch_nusers_3;
+ A_UINT32 mu_mpdus_queued_usr[4];
+ A_UINT32 mu_mpdus_tried_usr[4];
+ A_UINT32 mu_mpdus_failed_usr[4];
+ A_UINT32 mu_mpdus_requeued_usr[4];
+ A_UINT32 mu_err_no_ba_usr[4];
+ A_UINT32 mu_mpdu_underrun_usr[4];
+ A_UINT32 mu_ampdu_underrun_usr[4];
+};
+
+struct wlan_dbg_tx_selfgen_stats {
+ A_UINT32 su_ndpa;
+ A_UINT32 su_ndp;
+ A_UINT32 mu_ndpa;
+ A_UINT32 mu_ndp;
+ A_UINT32 mu_brpoll_1;
+ A_UINT32 mu_brpoll_2;
+ A_UINT32 mu_bar_1;
+ A_UINT32 mu_bar_2;
+ A_UINT32 cts_burst;
+ A_UINT32 su_ndp_err;
+ A_UINT32 mu_ndp_err;
+ A_UINT32 mu_brp1_err;
+ A_UINT32 mu_brp2_err;
+};
+
+typedef struct wlan_dbg_sifs_resp_stats {
+ A_UINT32 ps_poll_trigger; /* num ps-poll trigger frames */
+ A_UINT32 uapsd_trigger; /* num uapsd trigger frames */
+ A_UINT32 qb_data_trigger[2]; /* num data trigger frames; idx 0: explicit and idx 1: implicit */
+ A_UINT32 qb_bar_trigger[2]; /* num bar trigger frames; idx 0: explicit and idx 1: implicit */
+ A_UINT32 sifs_resp_data; /* num ppdus transmitted at SIFS interval */
+ A_UINT32 sifs_resp_err; /* num ppdus failed to meet SIFS resp timing */
+} wlan_dgb_sifs_resp_stats_t;
+
+
+
+/** wlan_dbg_wifi2_error_stats_t is not grouped with the
+ * following structure as it is allocated differently and only
+ * belongs to whal
+ */
+typedef struct wlan_dbg_stats_wifi2 {
+ wlan_dbg_txbf_snd_stats_t txbf_snd_info;
+ wlan_dbg_txbf_data_stats_t txbf_data_info;
+ struct wlan_dbg_tx_selfgen_stats tx_selfgen;
+ struct wlan_dbg_tx_mu_stats tx_mu;
+ wlan_dgb_sifs_resp_stats_t sifs_resp_info;
+} wlan_dbg_wifi2_stats_t;
+#endif
+
typedef struct {
wlan_dbg_rx_rate_info_t rx_phy_info;
wlan_dbg_tx_rate_info_t tx_rate_info;
} wlan_dbg_rate_info_t;
-/* Add functional stats in groups */
struct wlan_dbg_stats {
struct wlan_dbg_tx_stats tx;
struct wlan_dbg_rx_stats rx;
+#if defined(AR900B)
+ struct wlan_dbg_mem_stats mem;
+#endif
struct wlan_dbg_peer_stats peer;
};
+#if defined(AR900B)
+#define DBG_STATS_MAX_HWQ_NUM 10
+#define DBG_STATS_MAX_TID_NUM 20
+#define DBG_STATS_MAX_CONG_NUM 16
+struct wlan_dbg_txq_stats {
+ A_UINT16 num_pkts_queued[DBG_STATS_MAX_HWQ_NUM];
+ A_UINT16 tid_hw_qdepth[DBG_STATS_MAX_TID_NUM];//WAL_MAX_TID is 20
+ A_UINT16 tid_sw_qdepth[DBG_STATS_MAX_TID_NUM];//WAL_MAX_TID is 20
+};
+
+struct wlan_dbg_tidq_stats{
+ A_UINT32 wlan_dbg_tid_txq_status;
+ struct wlan_dbg_txq_stats txq_st;
+};
+#endif
+
#endif /* __WLANDEFS_H__ */
diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h
index ff933d9981d7..ec4863276c07 100644
--- a/CORE/SERVICES/COMMON/wmi_unified.h
+++ b/CORE/SERVICES/COMMON/wmi_unified.h
@@ -3603,7 +3603,12 @@ typedef struct {
mutxbfee : 1,
sutxbfer : 1,
mutxbfer : 1,
+#if defined(AR900B)
+ txb_sts_cap : 3,
+ implicit_bf:1;
+#else
reserved : 4;
+#endif
} wmi_vdev_txbf_en;
/** Upto 8 bits are available for Roaming module to be sent along with