xref: /freebsd/sys/contrib/dev/athk/ath10k/targaddrs.h (revision da8fa4e37a0c048a67d7baa3b5a9bed637d02564)
1*da8fa4e3SBjoern A. Zeeb /* SPDX-License-Identifier: ISC */
2*da8fa4e3SBjoern A. Zeeb /*
3*da8fa4e3SBjoern A. Zeeb  * Copyright (c) 2005-2011 Atheros Communications Inc.
4*da8fa4e3SBjoern A. Zeeb  * Copyright (c) 2011-2016 Qualcomm Atheros, Inc.
5*da8fa4e3SBjoern A. Zeeb  */
6*da8fa4e3SBjoern A. Zeeb 
7*da8fa4e3SBjoern A. Zeeb #ifndef __TARGADDRS_H__
8*da8fa4e3SBjoern A. Zeeb #define __TARGADDRS_H__
9*da8fa4e3SBjoern A. Zeeb 
10*da8fa4e3SBjoern A. Zeeb #include "hw.h"
11*da8fa4e3SBjoern A. Zeeb 
12*da8fa4e3SBjoern A. Zeeb /*
13*da8fa4e3SBjoern A. Zeeb  * xxx_HOST_INTEREST_ADDRESS is the address in Target RAM of the
14*da8fa4e3SBjoern A. Zeeb  * host_interest structure.  It must match the address of the _host_interest
15*da8fa4e3SBjoern A. Zeeb  * symbol (see linker script).
16*da8fa4e3SBjoern A. Zeeb  *
17*da8fa4e3SBjoern A. Zeeb  * Host Interest is shared between Host and Target in order to coordinate
18*da8fa4e3SBjoern A. Zeeb  * between the two, and is intended to remain constant (with additions only
19*da8fa4e3SBjoern A. Zeeb  * at the end) across software releases.
20*da8fa4e3SBjoern A. Zeeb  *
21*da8fa4e3SBjoern A. Zeeb  * All addresses are available here so that it's possible to
22*da8fa4e3SBjoern A. Zeeb  * write a single binary that works with all Target Types.
23*da8fa4e3SBjoern A. Zeeb  * May be used in assembler code as well as C.
24*da8fa4e3SBjoern A. Zeeb  */
25*da8fa4e3SBjoern A. Zeeb #define QCA988X_HOST_INTEREST_ADDRESS    0x00400800
26*da8fa4e3SBjoern A. Zeeb #define HOST_INTEREST_MAX_SIZE          0x200
27*da8fa4e3SBjoern A. Zeeb 
28*da8fa4e3SBjoern A. Zeeb /*
29*da8fa4e3SBjoern A. Zeeb  * These are items that the Host may need to access via BMI or via the
30*da8fa4e3SBjoern A. Zeeb  * Diagnostic Window. The position of items in this structure must remain
31*da8fa4e3SBjoern A. Zeeb  * constant across firmware revisions! Types for each item must be fixed
32*da8fa4e3SBjoern A. Zeeb  * size across target and host platforms. More items may be added at the end.
33*da8fa4e3SBjoern A. Zeeb  */
34*da8fa4e3SBjoern A. Zeeb struct host_interest {
35*da8fa4e3SBjoern A. Zeeb 	/*
36*da8fa4e3SBjoern A. Zeeb 	 * Pointer to application-defined area, if any.
37*da8fa4e3SBjoern A. Zeeb 	 * Set by Target application during startup.
38*da8fa4e3SBjoern A. Zeeb 	 */
39*da8fa4e3SBjoern A. Zeeb 	u32 hi_app_host_interest;			/* 0x00 */
40*da8fa4e3SBjoern A. Zeeb 
41*da8fa4e3SBjoern A. Zeeb 	/* Pointer to register dump area, valid after Target crash. */
42*da8fa4e3SBjoern A. Zeeb 	u32 hi_failure_state;				/* 0x04 */
43*da8fa4e3SBjoern A. Zeeb 
44*da8fa4e3SBjoern A. Zeeb 	/* Pointer to debug logging header */
45*da8fa4e3SBjoern A. Zeeb 	u32 hi_dbglog_hdr;				/* 0x08 */
46*da8fa4e3SBjoern A. Zeeb 
47*da8fa4e3SBjoern A. Zeeb 	u32 hi_unused0c;				/* 0x0c */
48*da8fa4e3SBjoern A. Zeeb 
49*da8fa4e3SBjoern A. Zeeb 	/*
50*da8fa4e3SBjoern A. Zeeb 	 * General-purpose flag bits, similar to SOC_OPTION_* flags.
51*da8fa4e3SBjoern A. Zeeb 	 * Can be used by application rather than by OS.
52*da8fa4e3SBjoern A. Zeeb 	 */
53*da8fa4e3SBjoern A. Zeeb 	u32 hi_option_flag;				/* 0x10 */
54*da8fa4e3SBjoern A. Zeeb 
55*da8fa4e3SBjoern A. Zeeb 	/*
56*da8fa4e3SBjoern A. Zeeb 	 * Boolean that determines whether or not to
57*da8fa4e3SBjoern A. Zeeb 	 * display messages on the serial port.
58*da8fa4e3SBjoern A. Zeeb 	 */
59*da8fa4e3SBjoern A. Zeeb 	u32 hi_serial_enable;				/* 0x14 */
60*da8fa4e3SBjoern A. Zeeb 
61*da8fa4e3SBjoern A. Zeeb 	/* Start address of DataSet index, if any */
62*da8fa4e3SBjoern A. Zeeb 	u32 hi_dset_list_head;				/* 0x18 */
63*da8fa4e3SBjoern A. Zeeb 
64*da8fa4e3SBjoern A. Zeeb 	/* Override Target application start address */
65*da8fa4e3SBjoern A. Zeeb 	u32 hi_app_start;				/* 0x1c */
66*da8fa4e3SBjoern A. Zeeb 
67*da8fa4e3SBjoern A. Zeeb 	/* Clock and voltage tuning */
68*da8fa4e3SBjoern A. Zeeb 	u32 hi_skip_clock_init;				/* 0x20 */
69*da8fa4e3SBjoern A. Zeeb 	u32 hi_core_clock_setting;			/* 0x24 */
70*da8fa4e3SBjoern A. Zeeb 	u32 hi_cpu_clock_setting;			/* 0x28 */
71*da8fa4e3SBjoern A. Zeeb 	u32 hi_system_sleep_setting;			/* 0x2c */
72*da8fa4e3SBjoern A. Zeeb 	u32 hi_xtal_control_setting;			/* 0x30 */
73*da8fa4e3SBjoern A. Zeeb 	u32 hi_pll_ctrl_setting_24ghz;			/* 0x34 */
74*da8fa4e3SBjoern A. Zeeb 	u32 hi_pll_ctrl_setting_5ghz;			/* 0x38 */
75*da8fa4e3SBjoern A. Zeeb 	u32 hi_ref_voltage_trim_setting;		/* 0x3c */
76*da8fa4e3SBjoern A. Zeeb 	u32 hi_clock_info;				/* 0x40 */
77*da8fa4e3SBjoern A. Zeeb 
78*da8fa4e3SBjoern A. Zeeb 	/* Host uses BE CPU or not */
79*da8fa4e3SBjoern A. Zeeb 	u32 hi_be;					/* 0x44 */
80*da8fa4e3SBjoern A. Zeeb 
81*da8fa4e3SBjoern A. Zeeb 	u32 hi_stack;	/* normal stack */			/* 0x48 */
82*da8fa4e3SBjoern A. Zeeb 	u32 hi_err_stack; /* error stack */		/* 0x4c */
83*da8fa4e3SBjoern A. Zeeb 	u32 hi_desired_cpu_speed_hz;			/* 0x50 */
84*da8fa4e3SBjoern A. Zeeb 
85*da8fa4e3SBjoern A. Zeeb 	/* Pointer to Board Data  */
86*da8fa4e3SBjoern A. Zeeb 	u32 hi_board_data;				/* 0x54 */
87*da8fa4e3SBjoern A. Zeeb 
88*da8fa4e3SBjoern A. Zeeb 	/*
89*da8fa4e3SBjoern A. Zeeb 	 * Indication of Board Data state:
90*da8fa4e3SBjoern A. Zeeb 	 *    0: board data is not yet initialized.
91*da8fa4e3SBjoern A. Zeeb 	 *    1: board data is initialized; unknown size
92*da8fa4e3SBjoern A. Zeeb 	 *   >1: number of bytes of initialized board data
93*da8fa4e3SBjoern A. Zeeb 	 */
94*da8fa4e3SBjoern A. Zeeb 	u32 hi_board_data_initialized;			/* 0x58 */
95*da8fa4e3SBjoern A. Zeeb 
96*da8fa4e3SBjoern A. Zeeb 	u32 hi_dset_ram_index_table;			/* 0x5c */
97*da8fa4e3SBjoern A. Zeeb 
98*da8fa4e3SBjoern A. Zeeb 	u32 hi_desired_baud_rate;			/* 0x60 */
99*da8fa4e3SBjoern A. Zeeb 	u32 hi_dbglog_config;				/* 0x64 */
100*da8fa4e3SBjoern A. Zeeb 	u32 hi_end_ram_reserve_sz;			/* 0x68 */
101*da8fa4e3SBjoern A. Zeeb 	u32 hi_mbox_io_block_sz;			/* 0x6c */
102*da8fa4e3SBjoern A. Zeeb 
103*da8fa4e3SBjoern A. Zeeb 	u32 hi_num_bpatch_streams;			/* 0x70 -- unused */
104*da8fa4e3SBjoern A. Zeeb 	u32 hi_mbox_isr_yield_limit;			/* 0x74 */
105*da8fa4e3SBjoern A. Zeeb 
106*da8fa4e3SBjoern A. Zeeb 	u32 hi_refclk_hz;				/* 0x78 */
107*da8fa4e3SBjoern A. Zeeb 	u32 hi_ext_clk_detected;			/* 0x7c */
108*da8fa4e3SBjoern A. Zeeb 	u32 hi_dbg_uart_txpin;				/* 0x80 */
109*da8fa4e3SBjoern A. Zeeb 	u32 hi_dbg_uart_rxpin;				/* 0x84 */
110*da8fa4e3SBjoern A. Zeeb 	u32 hi_hci_uart_baud;				/* 0x88 */
111*da8fa4e3SBjoern A. Zeeb 	u32 hi_hci_uart_pin_assignments;		/* 0x8C */
112*da8fa4e3SBjoern A. Zeeb 
113*da8fa4e3SBjoern A. Zeeb 	u32 hi_hci_uart_baud_scale_val;			/* 0x90 */
114*da8fa4e3SBjoern A. Zeeb 	u32 hi_hci_uart_baud_step_val;			/* 0x94 */
115*da8fa4e3SBjoern A. Zeeb 
116*da8fa4e3SBjoern A. Zeeb 	u32 hi_allocram_start;				/* 0x98 */
117*da8fa4e3SBjoern A. Zeeb 	u32 hi_allocram_sz;				/* 0x9c */
118*da8fa4e3SBjoern A. Zeeb 	u32 hi_hci_bridge_flags;			/* 0xa0 */
119*da8fa4e3SBjoern A. Zeeb 	u32 hi_hci_uart_support_pins;			/* 0xa4 */
120*da8fa4e3SBjoern A. Zeeb 
121*da8fa4e3SBjoern A. Zeeb 	u32 hi_hci_uart_pwr_mgmt_params;		/* 0xa8 */
122*da8fa4e3SBjoern A. Zeeb 
123*da8fa4e3SBjoern A. Zeeb 	/*
124*da8fa4e3SBjoern A. Zeeb 	 * 0xa8 - [1]: 0 = UART FC active low, 1 = UART FC active high
125*da8fa4e3SBjoern A. Zeeb 	 *        [31:16]: wakeup timeout in ms
126*da8fa4e3SBjoern A. Zeeb 	 */
127*da8fa4e3SBjoern A. Zeeb 	/* Pointer to extended board Data  */
128*da8fa4e3SBjoern A. Zeeb 	u32 hi_board_ext_data;				/* 0xac */
129*da8fa4e3SBjoern A. Zeeb 	u32 hi_board_ext_data_config;			/* 0xb0 */
130*da8fa4e3SBjoern A. Zeeb 	/*
131*da8fa4e3SBjoern A. Zeeb 	 * Bit [0]  :   valid
132*da8fa4e3SBjoern A. Zeeb 	 * Bit[31:16:   size
133*da8fa4e3SBjoern A. Zeeb 	 */
134*da8fa4e3SBjoern A. Zeeb 	/*
135*da8fa4e3SBjoern A. Zeeb 	 * hi_reset_flag is used to do some stuff when target reset.
136*da8fa4e3SBjoern A. Zeeb 	 * such as restore app_start after warm reset or
137*da8fa4e3SBjoern A. Zeeb 	 * preserve host Interest area, or preserve ROM data, literals etc.
138*da8fa4e3SBjoern A. Zeeb 	 */
139*da8fa4e3SBjoern A. Zeeb 	u32  hi_reset_flag;				/* 0xb4 */
140*da8fa4e3SBjoern A. Zeeb 	/* indicate hi_reset_flag is valid */
141*da8fa4e3SBjoern A. Zeeb 	u32  hi_reset_flag_valid;			/* 0xb8 */
142*da8fa4e3SBjoern A. Zeeb 	u32 hi_hci_uart_pwr_mgmt_params_ext;		/* 0xbc */
143*da8fa4e3SBjoern A. Zeeb 	/* 0xbc - [31:0]: idle timeout in ms */
144*da8fa4e3SBjoern A. Zeeb 	/* ACS flags */
145*da8fa4e3SBjoern A. Zeeb 	u32 hi_acs_flags;				/* 0xc0 */
146*da8fa4e3SBjoern A. Zeeb 	u32 hi_console_flags;				/* 0xc4 */
147*da8fa4e3SBjoern A. Zeeb 	u32 hi_nvram_state;				/* 0xc8 */
148*da8fa4e3SBjoern A. Zeeb 	u32 hi_option_flag2;				/* 0xcc */
149*da8fa4e3SBjoern A. Zeeb 
150*da8fa4e3SBjoern A. Zeeb 	/* If non-zero, override values sent to Host in WMI_READY event. */
151*da8fa4e3SBjoern A. Zeeb 	u32 hi_sw_version_override;			/* 0xd0 */
152*da8fa4e3SBjoern A. Zeeb 	u32 hi_abi_version_override;			/* 0xd4 */
153*da8fa4e3SBjoern A. Zeeb 
154*da8fa4e3SBjoern A. Zeeb 	/*
155*da8fa4e3SBjoern A. Zeeb 	 * Percentage of high priority RX traffic to total expected RX traffic
156*da8fa4e3SBjoern A. Zeeb 	 * applicable only to ar6004
157*da8fa4e3SBjoern A. Zeeb 	 */
158*da8fa4e3SBjoern A. Zeeb 	u32 hi_hp_rx_traffic_ratio;			/* 0xd8 */
159*da8fa4e3SBjoern A. Zeeb 
160*da8fa4e3SBjoern A. Zeeb 	/* test applications flags */
161*da8fa4e3SBjoern A. Zeeb 	u32 hi_test_apps_related;			/* 0xdc */
162*da8fa4e3SBjoern A. Zeeb 	/* location of test script */
163*da8fa4e3SBjoern A. Zeeb 	u32 hi_ota_testscript;				/* 0xe0 */
164*da8fa4e3SBjoern A. Zeeb 	/* location of CAL data */
165*da8fa4e3SBjoern A. Zeeb 	u32 hi_cal_data;				/* 0xe4 */
166*da8fa4e3SBjoern A. Zeeb 
167*da8fa4e3SBjoern A. Zeeb 	/* Number of packet log buffers */
168*da8fa4e3SBjoern A. Zeeb 	u32 hi_pktlog_num_buffers;			/* 0xe8 */
169*da8fa4e3SBjoern A. Zeeb 
170*da8fa4e3SBjoern A. Zeeb 	/* wow extension configuration */
171*da8fa4e3SBjoern A. Zeeb 	u32 hi_wow_ext_config;				/* 0xec */
172*da8fa4e3SBjoern A. Zeeb 	u32 hi_pwr_save_flags;				/* 0xf0 */
173*da8fa4e3SBjoern A. Zeeb 
174*da8fa4e3SBjoern A. Zeeb 	/* Spatial Multiplexing Power Save (SMPS) options */
175*da8fa4e3SBjoern A. Zeeb 	u32 hi_smps_options;				/* 0xf4 */
176*da8fa4e3SBjoern A. Zeeb 
177*da8fa4e3SBjoern A. Zeeb 	/* Interconnect-specific state */
178*da8fa4e3SBjoern A. Zeeb 	u32 hi_interconnect_state;			/* 0xf8 */
179*da8fa4e3SBjoern A. Zeeb 
180*da8fa4e3SBjoern A. Zeeb 	/* Coex configuration flags */
181*da8fa4e3SBjoern A. Zeeb 	u32 hi_coex_config;				/* 0xfc */
182*da8fa4e3SBjoern A. Zeeb 
183*da8fa4e3SBjoern A. Zeeb 	/* Early allocation support */
184*da8fa4e3SBjoern A. Zeeb 	u32 hi_early_alloc;				/* 0x100 */
185*da8fa4e3SBjoern A. Zeeb 	/* FW swap field */
186*da8fa4e3SBjoern A. Zeeb 	/*
187*da8fa4e3SBjoern A. Zeeb 	 * Bits of this 32bit word will be used to pass specific swap
188*da8fa4e3SBjoern A. Zeeb 	 * instruction to FW
189*da8fa4e3SBjoern A. Zeeb 	 */
190*da8fa4e3SBjoern A. Zeeb 	/*
191*da8fa4e3SBjoern A. Zeeb 	 * Bit 0 -- AP Nart descriptor no swap. When this bit is set
192*da8fa4e3SBjoern A. Zeeb 	 * FW will not swap TX descriptor. Meaning packets are formed
193*da8fa4e3SBjoern A. Zeeb 	 * on the target processor.
194*da8fa4e3SBjoern A. Zeeb 	 */
195*da8fa4e3SBjoern A. Zeeb 	/* Bit 1 - unused */
196*da8fa4e3SBjoern A. Zeeb 	u32 hi_fw_swap;					/* 0x104 */
197*da8fa4e3SBjoern A. Zeeb 
198*da8fa4e3SBjoern A. Zeeb 	/* global arenas pointer address, used by host driver debug */
199*da8fa4e3SBjoern A. Zeeb 	u32 hi_dynamic_mem_arenas_addr;			/* 0x108 */
200*da8fa4e3SBjoern A. Zeeb 
201*da8fa4e3SBjoern A. Zeeb 	/* allocated bytes of DRAM use by allocated */
202*da8fa4e3SBjoern A. Zeeb 	u32 hi_dynamic_mem_allocated;			/* 0x10C */
203*da8fa4e3SBjoern A. Zeeb 
204*da8fa4e3SBjoern A. Zeeb 	/* remaining bytes of DRAM */
205*da8fa4e3SBjoern A. Zeeb 	u32 hi_dynamic_mem_remaining;			/* 0x110 */
206*da8fa4e3SBjoern A. Zeeb 
207*da8fa4e3SBjoern A. Zeeb 	/* memory track count, configured by host */
208*da8fa4e3SBjoern A. Zeeb 	u32 hi_dynamic_mem_track_max;			/* 0x114 */
209*da8fa4e3SBjoern A. Zeeb 
210*da8fa4e3SBjoern A. Zeeb 	/* minidump buffer */
211*da8fa4e3SBjoern A. Zeeb 	u32 hi_minidump;				/* 0x118 */
212*da8fa4e3SBjoern A. Zeeb 
213*da8fa4e3SBjoern A. Zeeb 	/* bdata's sig and key addr */
214*da8fa4e3SBjoern A. Zeeb 	u32 hi_bd_sig_key;				/* 0x11c */
215*da8fa4e3SBjoern A. Zeeb } __packed;
216*da8fa4e3SBjoern A. Zeeb 
217*da8fa4e3SBjoern A. Zeeb #define HI_ITEM(item)  offsetof(struct host_interest, item)
218*da8fa4e3SBjoern A. Zeeb 
219*da8fa4e3SBjoern A. Zeeb /* Bits defined in hi_option_flag */
220*da8fa4e3SBjoern A. Zeeb 
221*da8fa4e3SBjoern A. Zeeb /* Enable timer workaround */
222*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_TIMER_WAR         0x01
223*da8fa4e3SBjoern A. Zeeb /* Limit BMI command credits */
224*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_BMI_CRED_LIMIT    0x02
225*da8fa4e3SBjoern A. Zeeb /* Relay Dot11 hdr to/from host */
226*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_RELAY_DOT11_HDR   0x04
227*da8fa4e3SBjoern A. Zeeb /* MAC addr method 0-locally administred 1-globally unique addrs */
228*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_MAC_ADDR_METHOD   0x08
229*da8fa4e3SBjoern A. Zeeb /* Firmware Bridging */
230*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_BRIDGE         0x10
231*da8fa4e3SBjoern A. Zeeb /* Enable CPU profiling */
232*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_ENABLE_PROFILE    0x20
233*da8fa4e3SBjoern A. Zeeb /* Disable debug logging */
234*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_DISABLE_DBGLOG    0x40
235*da8fa4e3SBjoern A. Zeeb /* Skip Era Tracking */
236*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_SKIP_ERA_TRACKING 0x80
237*da8fa4e3SBjoern A. Zeeb /* Disable PAPRD (debug) */
238*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_PAPRD_DISABLE     0x100
239*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_NUM_DEV_LSB       0x200
240*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_NUM_DEV_MSB       0x800
241*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_DEV_MODE_LSB      0x1000
242*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_DEV_MODE_MSB      0x8000000
243*da8fa4e3SBjoern A. Zeeb /* Disable LowFreq Timer Stabilization */
244*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_NO_LFT_STBL       0x10000000
245*da8fa4e3SBjoern A. Zeeb /* Skip regulatory scan */
246*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_SKIP_REG_SCAN     0x20000000
247*da8fa4e3SBjoern A. Zeeb /*
248*da8fa4e3SBjoern A. Zeeb  * Do regulatory scan during init before
249*da8fa4e3SBjoern A. Zeeb  * sending WMI ready event to host
250*da8fa4e3SBjoern A. Zeeb  */
251*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_INIT_REG_SCAN     0x40000000
252*da8fa4e3SBjoern A. Zeeb 
253*da8fa4e3SBjoern A. Zeeb /* REV6: Do not adjust memory map */
254*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_SKIP_MEMMAP       0x80000000
255*da8fa4e3SBjoern A. Zeeb 
256*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_MAC_ADDR_METHOD_SHIFT 3
257*da8fa4e3SBjoern A. Zeeb 
258*da8fa4e3SBjoern A. Zeeb /* 2 bits of hi_option_flag are used to represent 3 modes */
259*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_MODE_IBSS    0x0 /* IBSS Mode */
260*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_MODE_BSS_STA 0x1 /* STA Mode */
261*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_MODE_AP      0x2 /* AP Mode */
262*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_MODE_BT30AMP 0x3 /* BT30 AMP Mode */
263*da8fa4e3SBjoern A. Zeeb 
264*da8fa4e3SBjoern A. Zeeb /* 2 bits of hi_option flag are usedto represent 4 submodes */
265*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_SUBMODE_NONE    0x0  /* Normal mode */
266*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_SUBMODE_P2PDEV  0x1  /* p2p device mode */
267*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_SUBMODE_P2PCLIENT 0x2 /* p2p client mode */
268*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_SUBMODE_P2PGO   0x3 /* p2p go mode */
269*da8fa4e3SBjoern A. Zeeb 
270*da8fa4e3SBjoern A. Zeeb /* Num dev Mask */
271*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_NUM_DEV_MASK    0x7
272*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_NUM_DEV_SHIFT   0x9
273*da8fa4e3SBjoern A. Zeeb 
274*da8fa4e3SBjoern A. Zeeb /* firmware bridging */
275*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_BRIDGE_SHIFT 0x04
276*da8fa4e3SBjoern A. Zeeb 
277*da8fa4e3SBjoern A. Zeeb /*
278*da8fa4e3SBjoern A. Zeeb  * Fw Mode/SubMode Mask
279*da8fa4e3SBjoern A. Zeeb  *-----------------------------------------------------------------------------
280*da8fa4e3SBjoern A. Zeeb  *  SUB   |   SUB   |   SUB   |  SUB    |         |         |         |
281*da8fa4e3SBjoern A. Zeeb  *MODE[3] | MODE[2] | MODE[1] | MODE[0] | MODE[3] | MODE[2] | MODE[1] | MODE[0]
282*da8fa4e3SBjoern A. Zeeb  *  (2)   |   (2)   |   (2)   |   (2)   |   (2)   |   (2)   |   (2)   |   (2)
283*da8fa4e3SBjoern A. Zeeb  *-----------------------------------------------------------------------------
284*da8fa4e3SBjoern A. Zeeb  */
285*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_MODE_BITS         0x2
286*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_MODE_MASK         0x3
287*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_MODE_SHIFT        0xC
288*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_ALL_FW_MODE_MASK     0xFF
289*da8fa4e3SBjoern A. Zeeb 
290*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_SUBMODE_BITS      0x2
291*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_SUBMODE_MASK      0x3
292*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_FW_SUBMODE_SHIFT     0x14
293*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_ALL_FW_SUBMODE_MASK  0xFF00
294*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_ALL_FW_SUBMODE_SHIFT 0x8
295*da8fa4e3SBjoern A. Zeeb 
296*da8fa4e3SBjoern A. Zeeb /* hi_option_flag2 options */
297*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_OFFLOAD_AMSDU     0x01
298*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_DFS_SUPPORT       0x02 /* Enable DFS support */
299*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_ENABLE_RFKILL     0x04 /* RFKill Enable Feature*/
300*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_RADIO_RETENTION_DISABLE 0x08 /* Disable radio retention */
301*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_EARLY_CFG_DONE    0x10 /* Early configuration is complete */
302*da8fa4e3SBjoern A. Zeeb 
303*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_RF_KILL_SHIFT     0x2
304*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_RF_KILL_MASK      0x1
305*da8fa4e3SBjoern A. Zeeb 
306*da8fa4e3SBjoern A. Zeeb /* hi_reset_flag */
307*da8fa4e3SBjoern A. Zeeb /* preserve App Start address */
308*da8fa4e3SBjoern A. Zeeb #define HI_RESET_FLAG_PRESERVE_APP_START         0x01
309*da8fa4e3SBjoern A. Zeeb /* preserve host interest */
310*da8fa4e3SBjoern A. Zeeb #define HI_RESET_FLAG_PRESERVE_HOST_INTEREST     0x02
311*da8fa4e3SBjoern A. Zeeb /* preserve ROM data */
312*da8fa4e3SBjoern A. Zeeb #define HI_RESET_FLAG_PRESERVE_ROMDATA           0x04
313*da8fa4e3SBjoern A. Zeeb #define HI_RESET_FLAG_PRESERVE_NVRAM_STATE       0x08
314*da8fa4e3SBjoern A. Zeeb #define HI_RESET_FLAG_PRESERVE_BOOT_INFO         0x10
315*da8fa4e3SBjoern A. Zeeb #define HI_RESET_FLAG_WARM_RESET	0x20
316*da8fa4e3SBjoern A. Zeeb 
317*da8fa4e3SBjoern A. Zeeb /* define hi_fw_swap bits */
318*da8fa4e3SBjoern A. Zeeb #define HI_DESC_IN_FW_BIT	0x01
319*da8fa4e3SBjoern A. Zeeb 
320*da8fa4e3SBjoern A. Zeeb /* indicate the reset flag is valid */
321*da8fa4e3SBjoern A. Zeeb #define HI_RESET_FLAG_IS_VALID  0x12345678
322*da8fa4e3SBjoern A. Zeeb 
323*da8fa4e3SBjoern A. Zeeb /* ACS is enabled */
324*da8fa4e3SBjoern A. Zeeb #define HI_ACS_FLAGS_ENABLED        (1 << 0)
325*da8fa4e3SBjoern A. Zeeb /* Use physical WWAN device */
326*da8fa4e3SBjoern A. Zeeb #define HI_ACS_FLAGS_USE_WWAN       (1 << 1)
327*da8fa4e3SBjoern A. Zeeb /* Use test VAP */
328*da8fa4e3SBjoern A. Zeeb #define HI_ACS_FLAGS_TEST_VAP       (1 << 2)
329*da8fa4e3SBjoern A. Zeeb /* SDIO/mailbox ACS flag definitions */
330*da8fa4e3SBjoern A. Zeeb #define HI_ACS_FLAGS_SDIO_SWAP_MAILBOX_SET       (1 << 0)
331*da8fa4e3SBjoern A. Zeeb #define HI_ACS_FLAGS_SDIO_REDUCE_TX_COMPL_SET    (1 << 1)
332*da8fa4e3SBjoern A. Zeeb #define HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE        (1 << 2)
333*da8fa4e3SBjoern A. Zeeb #define HI_ACS_FLAGS_SDIO_SWAP_MAILBOX_FW_ACK    (1 << 16)
334*da8fa4e3SBjoern A. Zeeb #define HI_ACS_FLAGS_SDIO_REDUCE_TX_COMPL_FW_ACK (1 << 17)
335*da8fa4e3SBjoern A. Zeeb 
336*da8fa4e3SBjoern A. Zeeb /*
337*da8fa4e3SBjoern A. Zeeb  * If both SDIO_CRASH_DUMP_ENHANCEMENT_HOST and SDIO_CRASH_DUMP_ENHANCEMENT_FW
338*da8fa4e3SBjoern A. Zeeb  * flags are set, then crashdump upload will be done using the BMI host/target
339*da8fa4e3SBjoern A. Zeeb  * communication channel.
340*da8fa4e3SBjoern A. Zeeb  */
341*da8fa4e3SBjoern A. Zeeb /* HOST to support using BMI dump FW memory when hit assert */
342*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_SDIO_CRASH_DUMP_ENHANCEMENT_HOST 0x400
343*da8fa4e3SBjoern A. Zeeb 
344*da8fa4e3SBjoern A. Zeeb /* FW to support using BMI dump FW memory when hit assert */
345*da8fa4e3SBjoern A. Zeeb #define HI_OPTION_SDIO_CRASH_DUMP_ENHANCEMENT_FW   0x800
346*da8fa4e3SBjoern A. Zeeb 
347*da8fa4e3SBjoern A. Zeeb /*
348*da8fa4e3SBjoern A. Zeeb  * CONSOLE FLAGS
349*da8fa4e3SBjoern A. Zeeb  *
350*da8fa4e3SBjoern A. Zeeb  * Bit Range  Meaning
351*da8fa4e3SBjoern A. Zeeb  * ---------  --------------------------------
352*da8fa4e3SBjoern A. Zeeb  *   2..0     UART ID (0 = Default)
353*da8fa4e3SBjoern A. Zeeb  *    3       Baud Select (0 = 9600, 1 = 115200)
354*da8fa4e3SBjoern A. Zeeb  *   30..4    Reserved
355*da8fa4e3SBjoern A. Zeeb  *    31      Enable Console
356*da8fa4e3SBjoern A. Zeeb  *
357*da8fa4e3SBjoern A. Zeeb  */
358*da8fa4e3SBjoern A. Zeeb 
359*da8fa4e3SBjoern A. Zeeb #define HI_CONSOLE_FLAGS_ENABLE       (1 << 31)
360*da8fa4e3SBjoern A. Zeeb #define HI_CONSOLE_FLAGS_UART_MASK    (0x7)
361*da8fa4e3SBjoern A. Zeeb #define HI_CONSOLE_FLAGS_UART_SHIFT   0
362*da8fa4e3SBjoern A. Zeeb #define HI_CONSOLE_FLAGS_BAUD_SELECT  (1 << 3)
363*da8fa4e3SBjoern A. Zeeb 
364*da8fa4e3SBjoern A. Zeeb /* SM power save options */
365*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_ALLOW_MASK            (0x00000001)
366*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_MODE_MASK             (0x00000002)
367*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_MODE_STATIC           (0x00000000)
368*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_MODE_DYNAMIC          (0x00000002)
369*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_DISABLE_AUTO_MODE     (0x00000004)
370*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_DATA_THRESH_MASK      (0x000007f8)
371*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_DATA_THRESH_SHIFT     (3)
372*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_RSSI_THRESH_MASK      (0x0007f800)
373*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_RSSI_THRESH_SHIFT     (11)
374*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_LOWPWR_CM_MASK        (0x00380000)
375*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_LOWPWR_CM_SHIFT       (15)
376*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_HIPWR_CM_MASK         (0x03c00000)
377*da8fa4e3SBjoern A. Zeeb #define HI_SMPS_HIPWR_CM_SHIFT        (19)
378*da8fa4e3SBjoern A. Zeeb 
379*da8fa4e3SBjoern A. Zeeb /*
380*da8fa4e3SBjoern A. Zeeb  * WOW Extension configuration
381*da8fa4e3SBjoern A. Zeeb  *
382*da8fa4e3SBjoern A. Zeeb  * Bit Range  Meaning
383*da8fa4e3SBjoern A. Zeeb  * ---------  --------------------------------
384*da8fa4e3SBjoern A. Zeeb  *   8..0     Size of each WOW pattern (max 511)
385*da8fa4e3SBjoern A. Zeeb  *   15..9    Number of patterns per list (max 127)
386*da8fa4e3SBjoern A. Zeeb  *   17..16   Number of lists (max 4)
387*da8fa4e3SBjoern A. Zeeb  *   30..18   Reserved
388*da8fa4e3SBjoern A. Zeeb  *   31       Enabled
389*da8fa4e3SBjoern A. Zeeb  *
390*da8fa4e3SBjoern A. Zeeb  *  set values (except enable) to zeros for default settings
391*da8fa4e3SBjoern A. Zeeb  */
392*da8fa4e3SBjoern A. Zeeb 
393*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_ENABLED_MASK        (1 << 31)
394*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_NUM_LIST_SHIFT      16
395*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_NUM_LIST_MASK       (0x3 << HI_WOW_EXT_NUM_LIST_SHIFT)
396*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_NUM_PATTERNS_SHIFT  9
397*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_NUM_PATTERNS_MASK   (0x7F << HI_WOW_EXT_NUM_PATTERNS_SHIFT)
398*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_PATTERN_SIZE_SHIFT  0
399*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_PATTERN_SIZE_MASK   (0x1FF << HI_WOW_EXT_PATTERN_SIZE_SHIFT)
400*da8fa4e3SBjoern A. Zeeb 
401*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_MAKE_CONFIG(num_lists, count, size) \
402*da8fa4e3SBjoern A. Zeeb 	((((num_lists) << HI_WOW_EXT_NUM_LIST_SHIFT) & \
403*da8fa4e3SBjoern A. Zeeb 		HI_WOW_EXT_NUM_LIST_MASK) | \
404*da8fa4e3SBjoern A. Zeeb 	(((count) << HI_WOW_EXT_NUM_PATTERNS_SHIFT) & \
405*da8fa4e3SBjoern A. Zeeb 		HI_WOW_EXT_NUM_PATTERNS_MASK) | \
406*da8fa4e3SBjoern A. Zeeb 	(((size) << HI_WOW_EXT_PATTERN_SIZE_SHIFT) & \
407*da8fa4e3SBjoern A. Zeeb 		HI_WOW_EXT_PATTERN_SIZE_MASK))
408*da8fa4e3SBjoern A. Zeeb 
409*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_GET_NUM_LISTS(config) \
410*da8fa4e3SBjoern A. Zeeb 	(((config) & HI_WOW_EXT_NUM_LIST_MASK) >> HI_WOW_EXT_NUM_LIST_SHIFT)
411*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_GET_NUM_PATTERNS(config) \
412*da8fa4e3SBjoern A. Zeeb 	(((config) & HI_WOW_EXT_NUM_PATTERNS_MASK) >> \
413*da8fa4e3SBjoern A. Zeeb 		HI_WOW_EXT_NUM_PATTERNS_SHIFT)
414*da8fa4e3SBjoern A. Zeeb #define HI_WOW_EXT_GET_PATTERN_SIZE(config) \
415*da8fa4e3SBjoern A. Zeeb 	(((config) & HI_WOW_EXT_PATTERN_SIZE_MASK) >> \
416*da8fa4e3SBjoern A. Zeeb 		HI_WOW_EXT_PATTERN_SIZE_SHIFT)
417*da8fa4e3SBjoern A. Zeeb 
418*da8fa4e3SBjoern A. Zeeb /*
419*da8fa4e3SBjoern A. Zeeb  * Early allocation configuration
420*da8fa4e3SBjoern A. Zeeb  * Support RAM bank configuration before BMI done and this eases the memory
421*da8fa4e3SBjoern A. Zeeb  * allocation at very early stage
422*da8fa4e3SBjoern A. Zeeb  * Bit Range  Meaning
423*da8fa4e3SBjoern A. Zeeb  * ---------  ----------------------------------
424*da8fa4e3SBjoern A. Zeeb  * [0:3]      number of bank assigned to be IRAM
425*da8fa4e3SBjoern A. Zeeb  * [4:15]     reserved
426*da8fa4e3SBjoern A. Zeeb  * [16:31]    magic number
427*da8fa4e3SBjoern A. Zeeb  *
428*da8fa4e3SBjoern A. Zeeb  * Note:
429*da8fa4e3SBjoern A. Zeeb  * 1. target firmware would check magic number and if it's a match, firmware
430*da8fa4e3SBjoern A. Zeeb  *    would consider the bits[0:15] are valid and base on that to calculate
431*da8fa4e3SBjoern A. Zeeb  *    the end of DRAM. Early allocation would be located at that area and
432*da8fa4e3SBjoern A. Zeeb  *    may be reclaimed when necessary
433*da8fa4e3SBjoern A. Zeeb  * 2. if no magic number is found, early allocation would happen at "_end"
434*da8fa4e3SBjoern A. Zeeb  *    symbol of ROM which is located before the app-data and might NOT be
435*da8fa4e3SBjoern A. Zeeb  *    re-claimable. If this is adopted, link script should keep this in
436*da8fa4e3SBjoern A. Zeeb  *    mind to avoid data corruption.
437*da8fa4e3SBjoern A. Zeeb  */
438*da8fa4e3SBjoern A. Zeeb #define HI_EARLY_ALLOC_MAGIC		0x6d8a
439*da8fa4e3SBjoern A. Zeeb #define HI_EARLY_ALLOC_MAGIC_MASK	0xffff0000
440*da8fa4e3SBjoern A. Zeeb #define HI_EARLY_ALLOC_MAGIC_SHIFT	16
441*da8fa4e3SBjoern A. Zeeb #define HI_EARLY_ALLOC_IRAM_BANKS_MASK	0x0000000f
442*da8fa4e3SBjoern A. Zeeb #define HI_EARLY_ALLOC_IRAM_BANKS_SHIFT	0
443*da8fa4e3SBjoern A. Zeeb 
444*da8fa4e3SBjoern A. Zeeb #define HI_EARLY_ALLOC_VALID() \
445*da8fa4e3SBjoern A. Zeeb 	((((HOST_INTEREST->hi_early_alloc) & HI_EARLY_ALLOC_MAGIC_MASK) >> \
446*da8fa4e3SBjoern A. Zeeb 	HI_EARLY_ALLOC_MAGIC_SHIFT) == (HI_EARLY_ALLOC_MAGIC))
447*da8fa4e3SBjoern A. Zeeb #define HI_EARLY_ALLOC_GET_IRAM_BANKS() \
448*da8fa4e3SBjoern A. Zeeb 	(((HOST_INTEREST->hi_early_alloc) & HI_EARLY_ALLOC_IRAM_BANKS_MASK) \
449*da8fa4e3SBjoern A. Zeeb 	>> HI_EARLY_ALLOC_IRAM_BANKS_SHIFT)
450*da8fa4e3SBjoern A. Zeeb 
451*da8fa4e3SBjoern A. Zeeb /*power save flag bit definitions*/
452*da8fa4e3SBjoern A. Zeeb #define HI_PWR_SAVE_LPL_ENABLED   0x1
453*da8fa4e3SBjoern A. Zeeb /*b1-b3 reserved*/
454*da8fa4e3SBjoern A. Zeeb /*b4-b5 : dev0 LPL type : 0 - none
455*da8fa4e3SBjoern A. Zeeb  *			  1- Reduce Pwr Search
456*da8fa4e3SBjoern A. Zeeb  *			  2- Reduce Pwr Listen
457*da8fa4e3SBjoern A. Zeeb  */
458*da8fa4e3SBjoern A. Zeeb /*b6-b7 : dev1 LPL type and so on for Max 8 devices*/
459*da8fa4e3SBjoern A. Zeeb #define HI_PWR_SAVE_LPL_DEV0_LSB   4
460*da8fa4e3SBjoern A. Zeeb #define HI_PWR_SAVE_LPL_DEV_MASK   0x3
461*da8fa4e3SBjoern A. Zeeb /*power save related utility macros*/
462*da8fa4e3SBjoern A. Zeeb #define HI_LPL_ENABLED() \
463*da8fa4e3SBjoern A. Zeeb 	((HOST_INTEREST->hi_pwr_save_flags & HI_PWR_SAVE_LPL_ENABLED))
464*da8fa4e3SBjoern A. Zeeb #define HI_DEV_LPL_TYPE_GET(_devix) \
465*da8fa4e3SBjoern A. Zeeb 	(HOST_INTEREST->hi_pwr_save_flags & ((HI_PWR_SAVE_LPL_DEV_MASK) << \
466*da8fa4e3SBjoern A. Zeeb 	 (HI_PWR_SAVE_LPL_DEV0_LSB + (_devix) * 2)))
467*da8fa4e3SBjoern A. Zeeb 
468*da8fa4e3SBjoern A. Zeeb #define HOST_INTEREST_SMPS_IS_ALLOWED() \
469*da8fa4e3SBjoern A. Zeeb 	((HOST_INTEREST->hi_smps_options & HI_SMPS_ALLOW_MASK))
470*da8fa4e3SBjoern A. Zeeb 
471*da8fa4e3SBjoern A. Zeeb /* Reserve 1024 bytes for extended board data */
472*da8fa4e3SBjoern A. Zeeb #define QCA988X_BOARD_DATA_SZ     7168
473*da8fa4e3SBjoern A. Zeeb #define QCA988X_BOARD_EXT_DATA_SZ 0
474*da8fa4e3SBjoern A. Zeeb 
475*da8fa4e3SBjoern A. Zeeb #define QCA9887_BOARD_DATA_SZ     7168
476*da8fa4e3SBjoern A. Zeeb #define QCA9887_BOARD_EXT_DATA_SZ 0
477*da8fa4e3SBjoern A. Zeeb 
478*da8fa4e3SBjoern A. Zeeb #define QCA6174_BOARD_DATA_SZ     8192
479*da8fa4e3SBjoern A. Zeeb #define QCA6174_BOARD_EXT_DATA_SZ 0
480*da8fa4e3SBjoern A. Zeeb 
481*da8fa4e3SBjoern A. Zeeb #define QCA9377_BOARD_DATA_SZ     QCA6174_BOARD_DATA_SZ
482*da8fa4e3SBjoern A. Zeeb #define QCA9377_BOARD_EXT_DATA_SZ 0
483*da8fa4e3SBjoern A. Zeeb 
484*da8fa4e3SBjoern A. Zeeb #define QCA99X0_BOARD_DATA_SZ	  12288
485*da8fa4e3SBjoern A. Zeeb #define QCA99X0_BOARD_EXT_DATA_SZ 0
486*da8fa4e3SBjoern A. Zeeb 
487*da8fa4e3SBjoern A. Zeeb /* Dual band extended board data */
488*da8fa4e3SBjoern A. Zeeb #define QCA99X0_EXT_BOARD_DATA_SZ 2048
489*da8fa4e3SBjoern A. Zeeb #define EXT_BOARD_ADDRESS_OFFSET 0x3000
490*da8fa4e3SBjoern A. Zeeb 
491*da8fa4e3SBjoern A. Zeeb #define QCA4019_BOARD_DATA_SZ	  12064
492*da8fa4e3SBjoern A. Zeeb #define QCA4019_BOARD_EXT_DATA_SZ 0
493*da8fa4e3SBjoern A. Zeeb 
494*da8fa4e3SBjoern A. Zeeb #endif /* __TARGADDRS_H__ */
495