Loading...
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 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 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 | /* * Copyright (c) 2004-2010 Atheros Communications Inc. * Copyright (c) 2011 Qualcomm Atheros, Inc. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef TARGET_H #define TARGET_H #define AR6003_BOARD_DATA_SZ 1024 #define AR6003_BOARD_EXT_DATA_SZ 768 #define AR6003_BOARD_EXT_DATA_SZ_V2 1024 #define AR6004_BOARD_DATA_SZ 6144 #define AR6004_BOARD_EXT_DATA_SZ 0 #define RESET_CONTROL_ADDRESS 0x00004000 #define RESET_CONTROL_COLD_RST 0x00000100 #define RESET_CONTROL_MBOX_RST 0x00000004 #define CPU_CLOCK_STANDARD_S 0 #define CPU_CLOCK_STANDARD 0x00000003 #define CPU_CLOCK_ADDRESS 0x00000020 #define CLOCK_CONTROL_ADDRESS 0x00000028 #define CLOCK_CONTROL_LF_CLK32_S 2 #define CLOCK_CONTROL_LF_CLK32 0x00000004 #define SYSTEM_SLEEP_ADDRESS 0x000000c4 #define SYSTEM_SLEEP_DISABLE_S 0 #define SYSTEM_SLEEP_DISABLE 0x00000001 #define LPO_CAL_ADDRESS 0x000000e0 #define LPO_CAL_ENABLE_S 20 #define LPO_CAL_ENABLE 0x00100000 #define GPIO_PIN9_ADDRESS 0x0000004c #define GPIO_PIN10_ADDRESS 0x00000050 #define GPIO_PIN11_ADDRESS 0x00000054 #define GPIO_PIN12_ADDRESS 0x00000058 #define GPIO_PIN13_ADDRESS 0x0000005c #define HOST_INT_STATUS_ADDRESS 0x00000400 #define HOST_INT_STATUS_ERROR_S 7 #define HOST_INT_STATUS_ERROR 0x00000080 #define HOST_INT_STATUS_CPU_S 6 #define HOST_INT_STATUS_CPU 0x00000040 #define HOST_INT_STATUS_COUNTER_S 4 #define HOST_INT_STATUS_COUNTER 0x00000010 #define CPU_INT_STATUS_ADDRESS 0x00000401 #define ERROR_INT_STATUS_ADDRESS 0x00000402 #define ERROR_INT_STATUS_WAKEUP_S 2 #define ERROR_INT_STATUS_WAKEUP 0x00000004 #define ERROR_INT_STATUS_RX_UNDERFLOW_S 1 #define ERROR_INT_STATUS_RX_UNDERFLOW 0x00000002 #define ERROR_INT_STATUS_TX_OVERFLOW_S 0 #define ERROR_INT_STATUS_TX_OVERFLOW 0x00000001 #define COUNTER_INT_STATUS_ADDRESS 0x00000403 #define COUNTER_INT_STATUS_COUNTER_S 0 #define COUNTER_INT_STATUS_COUNTER 0x000000ff #define RX_LOOKAHEAD_VALID_ADDRESS 0x00000405 #define INT_STATUS_ENABLE_ADDRESS 0x00000418 #define INT_STATUS_ENABLE_ERROR_S 7 #define INT_STATUS_ENABLE_ERROR 0x00000080 #define INT_STATUS_ENABLE_CPU_S 6 #define INT_STATUS_ENABLE_CPU 0x00000040 #define INT_STATUS_ENABLE_INT_S 5 #define INT_STATUS_ENABLE_INT 0x00000020 #define INT_STATUS_ENABLE_COUNTER_S 4 #define INT_STATUS_ENABLE_COUNTER 0x00000010 #define INT_STATUS_ENABLE_MBOX_DATA_S 0 #define INT_STATUS_ENABLE_MBOX_DATA 0x0000000f #define CPU_INT_STATUS_ENABLE_ADDRESS 0x00000419 #define CPU_INT_STATUS_ENABLE_BIT_S 0 #define CPU_INT_STATUS_ENABLE_BIT 0x000000ff #define ERROR_STATUS_ENABLE_ADDRESS 0x0000041a #define ERROR_STATUS_ENABLE_RX_UNDERFLOW_S 1 #define ERROR_STATUS_ENABLE_RX_UNDERFLOW 0x00000002 #define ERROR_STATUS_ENABLE_TX_OVERFLOW_S 0 #define ERROR_STATUS_ENABLE_TX_OVERFLOW 0x00000001 #define COUNTER_INT_STATUS_ENABLE_ADDRESS 0x0000041b #define COUNTER_INT_STATUS_ENABLE_BIT_S 0 #define COUNTER_INT_STATUS_ENABLE_BIT 0x000000ff #define COUNT_ADDRESS 0x00000420 #define COUNT_DEC_ADDRESS 0x00000440 #define WINDOW_DATA_ADDRESS 0x00000474 #define WINDOW_WRITE_ADDR_ADDRESS 0x00000478 #define WINDOW_READ_ADDR_ADDRESS 0x0000047c #define CPU_DBG_SEL_ADDRESS 0x00000483 #define CPU_DBG_ADDRESS 0x00000484 #define LOCAL_SCRATCH_ADDRESS 0x000000c0 #define ATH6KL_OPTION_SLEEP_DISABLE 0x08 #define RTC_BASE_ADDRESS 0x00004000 #define GPIO_BASE_ADDRESS 0x00014000 #define MBOX_BASE_ADDRESS 0x00018000 #define ANALOG_INTF_BASE_ADDRESS 0x0001c000 /* real name of the register is unknown */ #define ATH6KL_ANALOG_PLL_REGISTER (ANALOG_INTF_BASE_ADDRESS + 0x284) #define SM(f, v) (((v) << f##_S) & f) #define MS(f, v) (((v) & f) >> f##_S) /* * xxx_HOST_INTEREST_ADDRESS is the address in Target RAM of the * host_interest structure. * * Host Interest is shared between Host and Target in order to coordinate * between the two, and is intended to remain constant (with additions only * at the end). */ #define ATH6KL_AR6003_HI_START_ADDR 0x00540600 #define ATH6KL_AR6004_HI_START_ADDR 0x00400800 /* * These are items that the Host may need to access * via BMI or via the Diagnostic Window. The position * of items in this structure must remain constant. * across firmware revisions! * * Types for each item must be fixed size across target and host platforms. * The structure is used only to calculate offset for each register with * HI_ITEM() macro, no values are stored to it. * * More items may be added at the end. */ struct host_interest { /* * Pointer to application-defined area, if any. * Set by Target application during startup. */ u32 hi_app_host_interest; /* 0x00 */ /* Pointer to register dump area, valid after Target crash. */ u32 hi_failure_state; /* 0x04 */ /* Pointer to debug logging header */ u32 hi_dbglog_hdr; /* 0x08 */ u32 hi_unused1; /* 0x0c */ /* * General-purpose flag bits, similar to ATH6KL_OPTION_* flags. * Can be used by application rather than by OS. */ u32 hi_option_flag; /* 0x10 */ /* * Boolean that determines whether or not to * display messages on the serial port. */ u32 hi_serial_enable; /* 0x14 */ /* Start address of DataSet index, if any */ u32 hi_dset_list_head; /* 0x18 */ /* Override Target application start address */ u32 hi_app_start; /* 0x1c */ /* Clock and voltage tuning */ u32 hi_skip_clock_init; /* 0x20 */ u32 hi_core_clock_setting; /* 0x24 */ u32 hi_cpu_clock_setting; /* 0x28 */ u32 hi_system_sleep_setting; /* 0x2c */ u32 hi_xtal_control_setting; /* 0x30 */ u32 hi_pll_ctrl_setting_24ghz; /* 0x34 */ u32 hi_pll_ctrl_setting_5ghz; /* 0x38 */ u32 hi_ref_voltage_trim_setting; /* 0x3c */ u32 hi_clock_info; /* 0x40 */ /* * Flash configuration overrides, used only * when firmware is not executing from flash. * (When using flash, modify the global variables * with equivalent names.) */ u32 hi_bank0_addr_value; /* 0x44 */ u32 hi_bank0_read_value; /* 0x48 */ u32 hi_bank0_write_value; /* 0x4c */ u32 hi_bank0_config_value; /* 0x50 */ /* Pointer to Board Data */ u32 hi_board_data; /* 0x54 */ u32 hi_board_data_initialized; /* 0x58 */ u32 hi_dset_ram_index_tbl; /* 0x5c */ u32 hi_desired_baud_rate; /* 0x60 */ u32 hi_dbglog_config; /* 0x64 */ u32 hi_end_ram_reserve_sz; /* 0x68 */ u32 hi_mbox_io_block_sz; /* 0x6c */ u32 hi_num_bpatch_streams; /* 0x70 -- unused */ u32 hi_mbox_isr_yield_limit; /* 0x74 */ u32 hi_refclk_hz; /* 0x78 */ u32 hi_ext_clk_detected; /* 0x7c */ u32 hi_dbg_uart_txpin; /* 0x80 */ u32 hi_dbg_uart_rxpin; /* 0x84 */ u32 hi_hci_uart_baud; /* 0x88 */ u32 hi_hci_uart_pin_assignments; /* 0x8C */ /* * NOTE: byte [0] = tx pin, [1] = rx pin, [2] = rts pin, [3] = cts * pin */ u32 hi_hci_uart_baud_scale_val; /* 0x90 */ u32 hi_hci_uart_baud_step_val; /* 0x94 */ u32 hi_allocram_start; /* 0x98 */ u32 hi_allocram_sz; /* 0x9c */ u32 hi_hci_bridge_flags; /* 0xa0 */ u32 hi_hci_uart_support_pins; /* 0xa4 */ /* * NOTE: byte [0] = RESET pin (bit 7 is polarity), * bytes[1]..bytes[3] are for future use */ u32 hi_hci_uart_pwr_mgmt_params; /* 0xa8 */ /* * 0xa8 - [1]: 0 = UART FC active low, 1 = UART FC active high * [31:16]: wakeup timeout in ms */ /* Pointer to extended board data */ u32 hi_board_ext_data; /* 0xac */ u32 hi_board_ext_data_config; /* 0xb0 */ /* * Bit [0] : valid * Bit[31:16: size */ /* * hi_reset_flag is used to do some stuff when target reset. * such as restore app_start after warm reset or * preserve host Interest area, or preserve ROM data, literals etc. */ u32 hi_reset_flag; /* 0xb4 */ /* indicate hi_reset_flag is valid */ u32 hi_reset_flag_valid; /* 0xb8 */ u32 hi_hci_uart_pwr_mgmt_params_ext; /* 0xbc */ /* * 0xbc - [31:0]: idle timeout in ms */ /* ACS flags */ u32 hi_acs_flags; /* 0xc0 */ u32 hi_console_flags; /* 0xc4 */ u32 hi_nvram_state; /* 0xc8 */ u32 hi_option_flag2; /* 0xcc */ /* If non-zero, override values sent to Host in WMI_READY event. */ u32 hi_sw_version_override; /* 0xd0 */ u32 hi_abi_version_override; /* 0xd4 */ /* * Percentage of high priority RX traffic to total expected RX traffic - * applicable only to ar6004 */ u32 hi_hp_rx_traffic_ratio; /* 0xd8 */ /* test applications flags */ u32 hi_test_apps_related; /* 0xdc */ /* location of test script */ u32 hi_ota_testscript; /* 0xe0 */ /* location of CAL data */ u32 hi_cal_data; /* 0xe4 */ /* Number of packet log buffers */ u32 hi_pktlog_num_buffers; /* 0xe8 */ } __packed; #define HI_ITEM(item) offsetof(struct host_interest, item) #define HI_OPTION_MAC_ADDR_METHOD_SHIFT 3 #define HI_OPTION_FW_MODE_IBSS 0x0 #define HI_OPTION_FW_MODE_BSS_STA 0x1 #define HI_OPTION_FW_MODE_AP 0x2 #define HI_OPTION_FW_SUBMODE_NONE 0x0 #define HI_OPTION_FW_SUBMODE_P2PDEV 0x1 #define HI_OPTION_FW_SUBMODE_P2PCLIENT 0x2 #define HI_OPTION_FW_SUBMODE_P2PGO 0x3 #define HI_OPTION_NUM_DEV_SHIFT 0x9 #define HI_OPTION_FW_BRIDGE_SHIFT 0x04 /* Fw Mode/SubMode Mask |------------------------------------------------------------------------------| | SUB | SUB | SUB | SUB | | | | | MODE[3] | MODE[2] | MODE[1] | MODE[0] | MODE[3] | MODE[2] | MODE[1] | MODE[0| | (2) | (2) | (2) | (2) | (2) | (2) | (2) | (2) |------------------------------------------------------------------------------| */ #define HI_OPTION_FW_MODE_BITS 0x2 #define HI_OPTION_FW_MODE_SHIFT 0xC #define HI_OPTION_FW_SUBMODE_BITS 0x2 #define HI_OPTION_FW_SUBMODE_SHIFT 0x14 /* Convert a Target virtual address into a Target physical address */ #define AR6003_VTOP(vaddr) ((vaddr) & 0x001fffff) #define AR6004_VTOP(vaddr) (vaddr) #define TARG_VTOP(target_type, vaddr) \ (((target_type) == TARGET_TYPE_AR6003) ? AR6003_VTOP(vaddr) : \ (((target_type) == TARGET_TYPE_AR6004) ? AR6004_VTOP(vaddr) : 0)) #define ATH6KL_FWLOG_PAYLOAD_SIZE 1500 struct ath6kl_dbglog_buf { __le32 next; __le32 buffer_addr; __le32 bufsize; __le32 length; __le32 count; __le32 free; } __packed; struct ath6kl_dbglog_hdr { __le32 dbuf_addr; __le32 dropped; } __packed; #endif |