acx.h 5.9 KB
Newer Older
L
Luciano Coelho 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/*
 * This file is part of wl18xx
 *
 * Copyright (C) 2011 Texas Instruments. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 *
 */

#ifndef __WL18XX_ACX_H__
#define __WL18XX_ACX_H__

#include "../wlcore/wlcore.h"
26
#include "../wlcore/acx.h"
L
Luciano Coelho 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

/* numbers of bits the length field takes (add 1 for the actual number) */
#define WL18XX_HOST_IF_LEN_SIZE_FIELD 15

struct wl18xx_acx_host_config_bitmap {
	struct acx_header header;

	__le32 host_cfg_bitmap;

	__le32 host_sdio_block_size;

	/* extra mem blocks per frame in TX. */
	__le32 extra_mem_blocks;

	/*
	 * number of bits of the length field in the first TX word
	 * (up to 15 - for using the entire 16 bits).
	 */
	__le32 length_field_size;

} __packed;

49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
enum {
	CHECKSUM_OFFLOAD_DISABLED = 0,
	CHECKSUM_OFFLOAD_ENABLED  = 1,
	CHECKSUM_OFFLOAD_FAKE_RX  = 2,
	CHECKSUM_OFFLOAD_INVALID  = 0xFF
};

struct wl18xx_acx_checksum_state {
	struct acx_header header;

	 /* enum acx_checksum_state */
	u8 checksum_state;
	u8 pad[3];
} __packed;

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
struct wl18xx_acx_debug_stats {
	u32 debug1;
	u32 debug2;
	u32 debug3;
	u32 debug4;
	u32 debug5;
	u32 debug6;
} __packed;

struct wl18xx_acx_ring_stats {
	u32 tx_procs;
	u32 prepared_descs;
	u32 tx_xfr;
	u32 tx_dma;
	u32 tx_cmplt;
	u32 rx_procs;
	u32 rx_data;
} __packed;

struct wl18xx_acx_tx_stats {
	u32 tx_template_prepared;
	u32 tx_data_prepared;
	u32 tx_template_programmed;
	u32 tx_data_programmed;
	u32 tx_burst_programmed;
	u32 tx_starts;
	u32 tx_imm_resp;
	u32 tx_start_templates;
	u32 tx_start_int_templates;
	u32 tx_start_fw_gen;
	u32 tx_start_data;
	u32 tx_start_null_frame;
	u32 tx_exch;
	u32 tx_retry_template;
	u32 tx_retry_data;
	u32 tx_exch_pending;
	u32 tx_exch_expiry;
	u32 tx_exch_mismatch;
	u32 tx_done_template;
	u32 tx_done_data;
	u32 tx_done_int_template;
	u32 tx_pre_xfr;
	u32 tx_xfr;
	u32 tx_xfr_out_of_mem;
	u32 tx_dma_programmed;
	u32 tx_dma_done;
} __packed;

struct wl18xx_acx_rx_stats {
	u32 rx_out_of_mem;
	u32 rx_hdr_overflow;
	u32 rx_hw_stuck;
	u32 rx_dropped_frame;
	u32 rx_complete_dropped_frame;
	u32 rx_alloc_frame;
	u32 rx_done_queue;
	u32 rx_done;
	u32 rx_defrag;
	u32 rx_defrag_end;
	u32 rx_mic;
	u32 rx_mic_end;
	u32 rx_xfr;
	u32 rx_xfr_end;
	u32 rx_cmplt;
	u32 rx_pre_complt;
	u32 rx_cmplt_task;
	u32 rx_phy_hdr;
	u32 rx_timeout;
} __packed;

struct wl18xx_acx_dma_stats {
	u32 rx_dma_errors;
	u32 tx_dma_errors;
} __packed;

struct wl18xx_acx_isr_stats {
	u32 irqs;
} __packed;

struct wl18xx_acx_wep_stats {
	u32 wep_add_key_count;
	u32 wep_default_key_count;
	u32 wep_key_not_found;
	u32 wep_decrypt_fail;
	u32 wep_encrypt_fail;
	u32 wep_dec_packets;
	u32 wep_dec_interrupt;
	u32 wep_enc_packets;
	u32 wep_enc_interrupts;
} __packed;

#define PWR_STAT_MAX_CONT_MISSED_BCNS_SPREAD 10

struct wl18xx_acx_pwr_stats {
	u32 missing_bcns_cnt;
	u32 rcvd_bcns_cnt;
	u32 connection_out_of_sync;
	u32 cont_miss_bcns_spread[PWR_STAT_MAX_CONT_MISSED_BCNS_SPREAD];
	u32 rcvd_awake_bcns_cnt;
} __packed;

struct wl18xx_acx_mic_stats {
	u32 mic_rx_pkts;
	u32 mic_calc_failure;
} __packed;

struct wl18xx_acx_aes_stats {
	u32 aes_encrypt_fail;
	u32 aes_decrypt_fail;
	u32 aes_encrypt_packets;
	u32 aes_decrypt_packets;
	u32 aes_encrypt_interrupt;
	u32 aes_decrypt_interrupt;
} __packed;

struct wl18xx_acx_gem_stats {
	u32 gem_encrypt_fail;
	u32 gem_decrypt_fail;
	u32 gem_encrypt_packets;
	u32 gem_decrypt_packets;
	u32 gem_encrypt_interrupt;
	u32 gem_decrypt_interrupt;
} __packed;

struct wl18xx_acx_event_stats {
	u32 calibration;
	u32 rx_mismatch;
	u32 rx_mem_empty;
} __packed;

struct wl18xx_acx_ps_poll_stats {
	u32 ps_poll_timeouts;
	u32 upsd_timeouts;
	u32 upsd_max_ap_turn;
	u32 ps_poll_max_ap_turn;
	u32 ps_poll_utilization;
	u32 upsd_utilization;
} __packed;

struct wl18xx_acx_rx_filter_stats {
	u32 beacon_filter;
	u32 arp_filter;
	u32 mc_filter;
	u32 dup_filter;
	u32 data_filter;
	u32 ibss_filter;
	u32 protection_filter;
} __packed;

struct wl18xx_acx_calibration_stats {
	u32 init_cal_total;
	u32 init_radio_bands_fail;
	u32 init_set_params;
	u32 init_tx_clpc_fail;
	u32 init_rx_iw_mm_fail;
	u32 tune_cal_total;
	u32 tune_drpw_rtrim_fail;
	u32 tune_drpw_pd_buf_fail;
	u32 tune_drpw_tx_mix_freq_fail;
	u32 tune_drpw_ta_cal;
	u32 tune_drpw_rx_if_2_gain;
	u32 tune_drpw_rx_dac;
	u32 tune_drpw_chan_tune;
	u32 tune_drpw_rx_tx_lpf;
	u32 tune_drpw_lna_tank;
	u32 tune_tx_lo_leak_fail;
	u32 tune_tx_iq_mm_fail;
	u32 tune_tx_pdet_fail;
	u32 tune_tx_ppa_fail;
	u32 tune_tx_clpc_fail;
	u32 tune_rx_ana_dc_fail;
	u32 tune_rx_dig_dc_fail; /* check if this is needed */
	u32 tune_rx_iq_mm_fail;
	u32 cal_state_fail;
} __packed;

struct wl18xx_acx_statistics {
	struct acx_header header;

	struct wl18xx_acx_ring_stats		ring;
	struct wl18xx_acx_debug_stats		debug;
	struct wl18xx_acx_tx_stats		tx;
	struct wl18xx_acx_rx_stats		rx;
	struct wl18xx_acx_dma_stats		dma;
	struct wl18xx_acx_isr_stats		isr;
	struct wl18xx_acx_wep_stats		wep;
	struct wl18xx_acx_pwr_stats		pwr;
	struct wl18xx_acx_aes_stats		aes;
	struct wl18xx_acx_mic_stats		mic;
	struct wl18xx_acx_event_stats		event;
	struct wl18xx_acx_ps_poll_stats		ps_poll;
	struct wl18xx_acx_rx_filter_stats	rx_filter;
	struct wl18xx_acx_calibration_stats	calibration;
	struct wl18xx_acx_gem_stats		gem;
} __packed;

L
Luciano Coelho 已提交
260 261 262
int wl18xx_acx_host_if_cfg_bitmap(struct wl1271 *wl, u32 host_cfg_bitmap,
				  u32 sdio_blk_size, u32 extra_mem_blks,
				  u32 len_field_size);
263
int wl18xx_acx_set_checksum_state(struct wl1271 *wl);
L
Luciano Coelho 已提交
264

265
#endif /* __WL18XX_ACX_H__ */