Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * Shared Atheros AR9170 Header
0003  *
0004  * Register map, hardware-specific definitions
0005  *
0006  * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
0007  * Copyright 2009-2011 Christian Lamparter <chunkeey@googlemail.com>
0008  *
0009  * This program is free software; you can redistribute it and/or modify
0010  * it under the terms of the GNU General Public License as published by
0011  * the Free Software Foundation; either version 2 of the License.
0012  *
0013  * This program is distributed in the hope that it will be useful,
0014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0016  * GNU General Public License for more details.
0017  *
0018  * You should have received a copy of the GNU General Public License
0019  * along with this program; see the file COPYING.  If not, see
0020  * http://www.gnu.org/licenses/.
0021  *
0022  * This file incorporates work covered by the following copyright and
0023  * permission notice:
0024  *    Copyright (c) 2007-2008 Atheros Communications, Inc.
0025  *
0026  *    Permission to use, copy, modify, and/or distribute this software for any
0027  *    purpose with or without fee is hereby granted, provided that the above
0028  *    copyright notice and this permission notice appear in all copies.
0029  *
0030  *    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
0031  *    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
0032  *    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
0033  *    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
0034  *    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
0035  *    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
0036  *    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
0037  */
0038 
0039 #ifndef __CARL9170_SHARED_HW_H
0040 #define __CARL9170_SHARED_HW_H
0041 
0042 /* High Speed UART */
0043 #define AR9170_UART_REG_BASE            0x1c0000
0044 
0045 /* Definitions of interrupt registers */
0046 #define AR9170_UART_REG_RX_BUFFER       (AR9170_UART_REG_BASE + 0x000)
0047 #define AR9170_UART_REG_TX_HOLDING      (AR9170_UART_REG_BASE + 0x004)
0048 #define AR9170_UART_REG_FIFO_CONTROL        (AR9170_UART_REG_BASE + 0x010)
0049 #define     AR9170_UART_FIFO_CTRL_RESET_RX_FIFO 0x02
0050 #define     AR9170_UART_FIFO_CTRL_RESET_TX_FIFO 0x04
0051 
0052 #define AR9170_UART_REG_LINE_CONTROL        (AR9170_UART_REG_BASE + 0x014)
0053 #define AR9170_UART_REG_MODEM_CONTROL       (AR9170_UART_REG_BASE + 0x018)
0054 #define     AR9170_UART_MODEM_CTRL_DTR_BIT      0x01
0055 #define     AR9170_UART_MODEM_CTRL_RTS_BIT      0x02
0056 #define     AR9170_UART_MODEM_CTRL_INTERNAL_LOOP_BACK   0x10
0057 #define     AR9170_UART_MODEM_CTRL_AUTO_RTS     0x20
0058 #define     AR9170_UART_MODEM_CTRL_AUTO_CTR     0x40
0059 
0060 #define AR9170_UART_REG_LINE_STATUS     (AR9170_UART_REG_BASE + 0x01c)
0061 #define     AR9170_UART_LINE_STS_RX_DATA_READY  0x01
0062 #define     AR9170_UART_LINE_STS_RX_BUFFER_OVERRUN  0x02
0063 #define     AR9170_UART_LINE_STS_RX_BREAK_IND   0x10
0064 #define     AR9170_UART_LINE_STS_TX_FIFO_NEAR_EMPTY 0x20
0065 #define     AR9170_UART_LINE_STS_TRANSMITTER_EMPTY  0x40
0066 
0067 #define AR9170_UART_REG_MODEM_STATUS        (AR9170_UART_REG_BASE + 0x020)
0068 #define     AR9170_UART_MODEM_STS_CTS_CHANGE    0x01
0069 #define     AR9170_UART_MODEM_STS_DSR_CHANGE    0x02
0070 #define     AR9170_UART_MODEM_STS_DCD_CHANGE    0x08
0071 #define     AR9170_UART_MODEM_STS_CTS_COMPL     0x10
0072 #define     AR9170_UART_MODEM_STS_DSR_COMPL     0x20
0073 #define     AR9170_UART_MODEM_STS_DCD_COMPL     0x80
0074 
0075 #define AR9170_UART_REG_SCRATCH         (AR9170_UART_REG_BASE + 0x024)
0076 #define AR9170_UART_REG_DIVISOR_LSB     (AR9170_UART_REG_BASE + 0x028)
0077 #define AR9170_UART_REG_DIVISOR_MSB     (AR9170_UART_REG_BASE + 0x02c)
0078 #define AR9170_UART_REG_WORD_RX_BUFFER      (AR9170_UART_REG_BASE + 0x034)
0079 #define AR9170_UART_REG_WORD_TX_HOLDING     (AR9170_UART_REG_BASE + 0x038)
0080 #define AR9170_UART_REG_FIFO_COUNT      (AR9170_UART_REG_BASE + 0x03c)
0081 #define AR9170_UART_REG_REMAINDER       (AR9170_UART_REG_BASE + 0x04c)
0082 
0083 /* Timer */
0084 #define AR9170_TIMER_REG_BASE           0x1c1000
0085 
0086 #define AR9170_TIMER_REG_WATCH_DOG      (AR9170_TIMER_REG_BASE + 0x000)
0087 #define AR9170_TIMER_REG_TIMER0         (AR9170_TIMER_REG_BASE + 0x010)
0088 #define AR9170_TIMER_REG_TIMER1         (AR9170_TIMER_REG_BASE + 0x014)
0089 #define AR9170_TIMER_REG_TIMER2         (AR9170_TIMER_REG_BASE + 0x018)
0090 #define AR9170_TIMER_REG_TIMER3         (AR9170_TIMER_REG_BASE + 0x01c)
0091 #define AR9170_TIMER_REG_TIMER4         (AR9170_TIMER_REG_BASE + 0x020)
0092 #define AR9170_TIMER_REG_CONTROL        (AR9170_TIMER_REG_BASE + 0x024)
0093 #define     AR9170_TIMER_CTRL_DISABLE_CLOCK     0x100
0094 
0095 #define AR9170_TIMER_REG_INTERRUPT      (AR9170_TIMER_REG_BASE + 0x028)
0096 #define     AR9170_TIMER_INT_TIMER0         0x001
0097 #define     AR9170_TIMER_INT_TIMER1         0x002
0098 #define     AR9170_TIMER_INT_TIMER2         0x004
0099 #define     AR9170_TIMER_INT_TIMER3         0x008
0100 #define     AR9170_TIMER_INT_TIMER4         0x010
0101 #define     AR9170_TIMER_INT_TICK_TIMER     0x100
0102 
0103 #define AR9170_TIMER_REG_TICK_TIMER     (AR9170_TIMER_REG_BASE + 0x030)
0104 #define AR9170_TIMER_REG_CLOCK_LOW      (AR9170_TIMER_REG_BASE + 0x040)
0105 #define AR9170_TIMER_REG_CLOCK_HIGH     (AR9170_TIMER_REG_BASE + 0x044)
0106 
0107 #define AR9170_MAC_REG_BASE         0x1c3000
0108 
0109 #define AR9170_MAC_REG_POWER_STATE_CTRL     (AR9170_MAC_REG_BASE + 0x500)
0110 #define     AR9170_MAC_POWER_STATE_CTRL_RESET   0x20
0111 
0112 #define AR9170_MAC_REG_MAC_POWER_STATE_CTRL (AR9170_MAC_REG_BASE + 0x50c)
0113 
0114 #define AR9170_MAC_REG_INT_CTRL         (AR9170_MAC_REG_BASE + 0x510)
0115 #define     AR9170_MAC_INT_TXC          BIT(0)
0116 #define     AR9170_MAC_INT_RXC          BIT(1)
0117 #define     AR9170_MAC_INT_RETRY_FAIL       BIT(2)
0118 #define     AR9170_MAC_INT_WAKEUP           BIT(3)
0119 #define     AR9170_MAC_INT_ATIM         BIT(4)
0120 #define     AR9170_MAC_INT_DTIM         BIT(5)
0121 #define     AR9170_MAC_INT_CFG_BCN          BIT(6)
0122 #define     AR9170_MAC_INT_ABORT            BIT(7)
0123 #define     AR9170_MAC_INT_QOS          BIT(8)
0124 #define     AR9170_MAC_INT_MIMO_PS          BIT(9)
0125 #define     AR9170_MAC_INT_KEY_GEN          BIT(10)
0126 #define     AR9170_MAC_INT_DECRY_NOUSER     BIT(11)
0127 #define     AR9170_MAC_INT_RADAR            BIT(12)
0128 #define     AR9170_MAC_INT_QUIET_FRAME      BIT(13)
0129 #define     AR9170_MAC_INT_PRETBTT          BIT(14)
0130 
0131 #define AR9170_MAC_REG_TSF_L            (AR9170_MAC_REG_BASE + 0x514)
0132 #define AR9170_MAC_REG_TSF_H            (AR9170_MAC_REG_BASE + 0x518)
0133 
0134 #define AR9170_MAC_REG_ATIM_WINDOW      (AR9170_MAC_REG_BASE + 0x51c)
0135 #define     AR9170_MAC_ATIM_PERIOD_S        0
0136 #define     AR9170_MAC_ATIM_PERIOD          0x0000ffff
0137 
0138 #define AR9170_MAC_REG_BCN_PERIOD       (AR9170_MAC_REG_BASE + 0x520)
0139 #define     AR9170_MAC_BCN_PERIOD_S         0
0140 #define     AR9170_MAC_BCN_PERIOD           0x0000ffff
0141 #define     AR9170_MAC_BCN_DTIM_S           16
0142 #define     AR9170_MAC_BCN_DTIM         0x00ff0000
0143 #define     AR9170_MAC_BCN_AP_MODE          BIT(24)
0144 #define     AR9170_MAC_BCN_IBSS_MODE        BIT(25)
0145 #define     AR9170_MAC_BCN_PWR_MGT          BIT(26)
0146 #define     AR9170_MAC_BCN_STA_PS           BIT(27)
0147 
0148 #define AR9170_MAC_REG_PRETBTT          (AR9170_MAC_REG_BASE + 0x524)
0149 #define     AR9170_MAC_PRETBTT_S            0
0150 #define     AR9170_MAC_PRETBTT          0x0000ffff
0151 #define     AR9170_MAC_PRETBTT2_S           16
0152 #define     AR9170_MAC_PRETBTT2         0xffff0000
0153 
0154 #define AR9170_MAC_REG_MAC_ADDR_L       (AR9170_MAC_REG_BASE + 0x610)
0155 #define AR9170_MAC_REG_MAC_ADDR_H       (AR9170_MAC_REG_BASE + 0x614)
0156 #define AR9170_MAC_REG_BSSID_L          (AR9170_MAC_REG_BASE + 0x618)
0157 #define AR9170_MAC_REG_BSSID_H          (AR9170_MAC_REG_BASE + 0x61c)
0158 
0159 #define AR9170_MAC_REG_GROUP_HASH_TBL_L     (AR9170_MAC_REG_BASE + 0x624)
0160 #define AR9170_MAC_REG_GROUP_HASH_TBL_H     (AR9170_MAC_REG_BASE + 0x628)
0161 
0162 #define AR9170_MAC_REG_RX_TIMEOUT       (AR9170_MAC_REG_BASE + 0x62c)
0163 
0164 #define AR9170_MAC_REG_BASIC_RATE       (AR9170_MAC_REG_BASE + 0x630)
0165 #define AR9170_MAC_REG_MANDATORY_RATE       (AR9170_MAC_REG_BASE + 0x634)
0166 #define AR9170_MAC_REG_RTS_CTS_RATE     (AR9170_MAC_REG_BASE + 0x638)
0167 #define AR9170_MAC_REG_BACKOFF_PROTECT      (AR9170_MAC_REG_BASE + 0x63c)
0168 #define AR9170_MAC_REG_RX_THRESHOLD     (AR9170_MAC_REG_BASE + 0x640)
0169 #define AR9170_MAC_REG_AFTER_PNP        (AR9170_MAC_REG_BASE + 0x648)
0170 #define AR9170_MAC_REG_RX_PE_DELAY      (AR9170_MAC_REG_BASE + 0x64c)
0171 
0172 #define AR9170_MAC_REG_DYNAMIC_SIFS_ACK     (AR9170_MAC_REG_BASE + 0x658)
0173 #define AR9170_MAC_REG_SNIFFER          (AR9170_MAC_REG_BASE + 0x674)
0174 #define     AR9170_MAC_SNIFFER_ENABLE_PROMISC   BIT(0)
0175 #define     AR9170_MAC_SNIFFER_DEFAULTS     0x02000000
0176 #define AR9170_MAC_REG_ENCRYPTION       (AR9170_MAC_REG_BASE + 0x678)
0177 #define     AR9170_MAC_ENCRYPTION_MGMT_RX_SOFTWARE  BIT(2)
0178 #define     AR9170_MAC_ENCRYPTION_RX_SOFTWARE   BIT(3)
0179 #define     AR9170_MAC_ENCRYPTION_DEFAULTS      0x70
0180 
0181 #define AR9170_MAC_REG_MISC_680         (AR9170_MAC_REG_BASE + 0x680)
0182 #define AR9170_MAC_REG_MISC_684         (AR9170_MAC_REG_BASE + 0x684)
0183 #define AR9170_MAC_REG_TX_UNDERRUN      (AR9170_MAC_REG_BASE + 0x688)
0184 
0185 #define AR9170_MAC_REG_FRAMETYPE_FILTER     (AR9170_MAC_REG_BASE + 0x68c)
0186 #define     AR9170_MAC_FTF_ASSOC_REQ        BIT(0)
0187 #define     AR9170_MAC_FTF_ASSOC_RESP       BIT(1)
0188 #define     AR9170_MAC_FTF_REASSOC_REQ      BIT(2)
0189 #define     AR9170_MAC_FTF_REASSOC_RESP     BIT(3)
0190 #define     AR9170_MAC_FTF_PRB_REQ          BIT(4)
0191 #define     AR9170_MAC_FTF_PRB_RESP         BIT(5)
0192 #define     AR9170_MAC_FTF_BIT6         BIT(6)
0193 #define     AR9170_MAC_FTF_BIT7         BIT(7)
0194 #define     AR9170_MAC_FTF_BEACON           BIT(8)
0195 #define     AR9170_MAC_FTF_ATIM         BIT(9)
0196 #define     AR9170_MAC_FTF_DEASSOC          BIT(10)
0197 #define     AR9170_MAC_FTF_AUTH         BIT(11)
0198 #define     AR9170_MAC_FTF_DEAUTH           BIT(12)
0199 #define     AR9170_MAC_FTF_BIT13            BIT(13)
0200 #define     AR9170_MAC_FTF_BIT14            BIT(14)
0201 #define     AR9170_MAC_FTF_BIT15            BIT(15)
0202 #define     AR9170_MAC_FTF_BAR          BIT(24)
0203 #define     AR9170_MAC_FTF_BA           BIT(25)
0204 #define     AR9170_MAC_FTF_PSPOLL           BIT(26)
0205 #define     AR9170_MAC_FTF_RTS          BIT(27)
0206 #define     AR9170_MAC_FTF_CTS          BIT(28)
0207 #define     AR9170_MAC_FTF_ACK          BIT(29)
0208 #define     AR9170_MAC_FTF_CFE          BIT(30)
0209 #define     AR9170_MAC_FTF_CFE_ACK          BIT(31)
0210 #define     AR9170_MAC_FTF_DEFAULTS         0x0500ffff
0211 #define     AR9170_MAC_FTF_MONITOR          0xff00ffff
0212 
0213 #define AR9170_MAC_REG_ACK_EXTENSION        (AR9170_MAC_REG_BASE + 0x690)
0214 #define AR9170_MAC_REG_ACK_TPC          (AR9170_MAC_REG_BASE + 0x694)
0215 #define AR9170_MAC_REG_EIFS_AND_SIFS        (AR9170_MAC_REG_BASE + 0x698)
0216 #define AR9170_MAC_REG_RX_TIMEOUT_COUNT     (AR9170_MAC_REG_BASE + 0x69c)
0217 #define AR9170_MAC_REG_RX_TOTAL         (AR9170_MAC_REG_BASE + 0x6a0)
0218 #define AR9170_MAC_REG_RX_CRC32         (AR9170_MAC_REG_BASE + 0x6a4)
0219 #define AR9170_MAC_REG_RX_CRC16         (AR9170_MAC_REG_BASE + 0x6a8)
0220 #define AR9170_MAC_REG_RX_ERR_DECRYPTION_UNI    (AR9170_MAC_REG_BASE + 0x6ac)
0221 #define AR9170_MAC_REG_RX_OVERRUN       (AR9170_MAC_REG_BASE + 0x6b0)
0222 #define AR9170_MAC_REG_RX_ERR_DECRYPTION_MUL    (AR9170_MAC_REG_BASE + 0x6bc)
0223 #define AR9170_MAC_REG_TX_BLOCKACKS     (AR9170_MAC_REG_BASE + 0x6c0)
0224 #define AR9170_MAC_REG_NAV_COUNT        (AR9170_MAC_REG_BASE + 0x6c4)
0225 #define AR9170_MAC_REG_BACKOFF_STATUS       (AR9170_MAC_REG_BASE + 0x6c8)
0226 #define     AR9170_MAC_BACKOFF_CCA          BIT(24)
0227 #define     AR9170_MAC_BACKOFF_TX_PEX       BIT(25)
0228 #define     AR9170_MAC_BACKOFF_RX_PE        BIT(26)
0229 #define     AR9170_MAC_BACKOFF_MD_READY     BIT(27)
0230 #define     AR9170_MAC_BACKOFF_TX_PE        BIT(28)
0231 
0232 #define AR9170_MAC_REG_TX_RETRY         (AR9170_MAC_REG_BASE + 0x6cc)
0233 
0234 #define AR9170_MAC_REG_TX_COMPLETE      (AR9170_MAC_REG_BASE + 0x6d4)
0235 
0236 #define AR9170_MAC_REG_CHANNEL_BUSY     (AR9170_MAC_REG_BASE + 0x6e8)
0237 #define AR9170_MAC_REG_EXT_BUSY         (AR9170_MAC_REG_BASE + 0x6ec)
0238 
0239 #define AR9170_MAC_REG_SLOT_TIME        (AR9170_MAC_REG_BASE + 0x6f0)
0240 #define AR9170_MAC_REG_TX_TOTAL         (AR9170_MAC_REG_BASE + 0x6f4)
0241 #define AR9170_MAC_REG_ACK_FC           (AR9170_MAC_REG_BASE + 0x6f8)
0242 
0243 #define AR9170_MAC_REG_CAM_MODE         (AR9170_MAC_REG_BASE + 0x700)
0244 #define     AR9170_MAC_CAM_IBSS         0xe0
0245 #define     AR9170_MAC_CAM_AP           0xa1
0246 #define     AR9170_MAC_CAM_STA          0x2
0247 #define     AR9170_MAC_CAM_AP_WDS           0x3
0248 #define     AR9170_MAC_CAM_DEFAULTS         (0xf << 24)
0249 #define     AR9170_MAC_CAM_HOST_PENDING     0x80000000
0250 
0251 #define AR9170_MAC_REG_CAM_ROLL_CALL_TBL_L  (AR9170_MAC_REG_BASE + 0x704)
0252 #define AR9170_MAC_REG_CAM_ROLL_CALL_TBL_H  (AR9170_MAC_REG_BASE + 0x708)
0253 
0254 #define AR9170_MAC_REG_CAM_ADDR         (AR9170_MAC_REG_BASE + 0x70c)
0255 #define     AR9170_MAC_CAM_ADDR_WRITE       0x80000000
0256 #define AR9170_MAC_REG_CAM_DATA0        (AR9170_MAC_REG_BASE + 0x720)
0257 #define AR9170_MAC_REG_CAM_DATA1        (AR9170_MAC_REG_BASE + 0x724)
0258 #define AR9170_MAC_REG_CAM_DATA2        (AR9170_MAC_REG_BASE + 0x728)
0259 #define AR9170_MAC_REG_CAM_DATA3        (AR9170_MAC_REG_BASE + 0x72c)
0260 
0261 #define AR9170_MAC_REG_CAM_DBG0         (AR9170_MAC_REG_BASE + 0x730)
0262 #define AR9170_MAC_REG_CAM_DBG1         (AR9170_MAC_REG_BASE + 0x734)
0263 #define AR9170_MAC_REG_CAM_DBG2         (AR9170_MAC_REG_BASE + 0x738)
0264 #define AR9170_MAC_REG_CAM_STATE        (AR9170_MAC_REG_BASE + 0x73c)
0265 #define     AR9170_MAC_CAM_STATE_READ_PENDING   0x40000000
0266 #define     AR9170_MAC_CAM_STATE_WRITE_PENDING  0x80000000
0267 
0268 #define AR9170_MAC_REG_CAM_TXKEY        (AR9170_MAC_REG_BASE + 0x740)
0269 #define AR9170_MAC_REG_CAM_RXKEY        (AR9170_MAC_REG_BASE + 0x750)
0270 
0271 #define AR9170_MAC_REG_CAM_TX_ENC_TYPE      (AR9170_MAC_REG_BASE + 0x760)
0272 #define AR9170_MAC_REG_CAM_RX_ENC_TYPE      (AR9170_MAC_REG_BASE + 0x770)
0273 #define AR9170_MAC_REG_CAM_TX_SERACH_HIT    (AR9170_MAC_REG_BASE + 0x780)
0274 #define AR9170_MAC_REG_CAM_RX_SERACH_HIT    (AR9170_MAC_REG_BASE + 0x790)
0275 
0276 #define AR9170_MAC_REG_AC0_CW           (AR9170_MAC_REG_BASE + 0xb00)
0277 #define AR9170_MAC_REG_AC1_CW           (AR9170_MAC_REG_BASE + 0xb04)
0278 #define AR9170_MAC_REG_AC2_CW           (AR9170_MAC_REG_BASE + 0xb08)
0279 #define AR9170_MAC_REG_AC3_CW           (AR9170_MAC_REG_BASE + 0xb0c)
0280 #define AR9170_MAC_REG_AC4_CW           (AR9170_MAC_REG_BASE + 0xb10)
0281 #define AR9170_MAC_REG_AC2_AC1_AC0_AIFS     (AR9170_MAC_REG_BASE + 0xb14)
0282 #define AR9170_MAC_REG_AC4_AC3_AC2_AIFS     (AR9170_MAC_REG_BASE + 0xb18)
0283 #define AR9170_MAC_REG_TXOP_ACK_EXTENSION   (AR9170_MAC_REG_BASE + 0xb1c)
0284 #define AR9170_MAC_REG_TXOP_ACK_INTERVAL    (AR9170_MAC_REG_BASE + 0xb20)
0285 #define AR9170_MAC_REG_CONTENTION_POINT     (AR9170_MAC_REG_BASE + 0xb24)
0286 #define AR9170_MAC_REG_RETRY_MAX        (AR9170_MAC_REG_BASE + 0xb28)
0287 #define AR9170_MAC_REG_TID_CFACK_CFEND_RATE (AR9170_MAC_REG_BASE + 0xb2c)
0288 #define AR9170_MAC_REG_TXOP_NOT_ENOUGH_IND  (AR9170_MAC_REG_BASE + 0xb30)
0289 #define AR9170_MAC_REG_TKIP_TSC         (AR9170_MAC_REG_BASE + 0xb34)
0290 #define AR9170_MAC_REG_TXOP_DURATION        (AR9170_MAC_REG_BASE + 0xb38)
0291 #define AR9170_MAC_REG_TX_QOS_THRESHOLD     (AR9170_MAC_REG_BASE + 0xb3c)
0292 #define AR9170_MAC_REG_QOS_PRIORITY_VIRTUAL_CCA (AR9170_MAC_REG_BASE + 0xb40)
0293 #define     AR9170_MAC_VIRTUAL_CCA_Q0       BIT(15)
0294 #define     AR9170_MAC_VIRTUAL_CCA_Q1       BIT(16)
0295 #define     AR9170_MAC_VIRTUAL_CCA_Q2       BIT(17)
0296 #define     AR9170_MAC_VIRTUAL_CCA_Q3       BIT(18)
0297 #define     AR9170_MAC_VIRTUAL_CCA_Q4       BIT(19)
0298 #define     AR9170_MAC_VIRTUAL_CCA_ALL      (0xf8000)
0299 
0300 #define AR9170_MAC_REG_AC1_AC0_TXOP     (AR9170_MAC_REG_BASE + 0xb44)
0301 #define AR9170_MAC_REG_AC3_AC2_TXOP     (AR9170_MAC_REG_BASE + 0xb48)
0302 
0303 #define AR9170_MAC_REG_AMPDU_COUNT      (AR9170_MAC_REG_BASE + 0xb88)
0304 #define AR9170_MAC_REG_MPDU_COUNT       (AR9170_MAC_REG_BASE + 0xb8c)
0305 
0306 #define AR9170_MAC_REG_AMPDU_FACTOR     (AR9170_MAC_REG_BASE + 0xb9c)
0307 #define     AR9170_MAC_AMPDU_FACTOR         0x7f0000
0308 #define     AR9170_MAC_AMPDU_FACTOR_S       16
0309 #define AR9170_MAC_REG_AMPDU_DENSITY        (AR9170_MAC_REG_BASE + 0xba0)
0310 #define     AR9170_MAC_AMPDU_DENSITY        0x7
0311 #define     AR9170_MAC_AMPDU_DENSITY_S      0
0312 
0313 #define AR9170_MAC_REG_FCS_SELECT       (AR9170_MAC_REG_BASE + 0xbb0)
0314 #define     AR9170_MAC_FCS_SWFCS            0x1
0315 #define     AR9170_MAC_FCS_FIFO_PROT        0x4
0316 
0317 #define AR9170_MAC_REG_RTS_CTS_TPC      (AR9170_MAC_REG_BASE + 0xbb4)
0318 #define AR9170_MAC_REG_CFEND_QOSNULL_TPC    (AR9170_MAC_REG_BASE + 0xbb8)
0319 
0320 #define AR9170_MAC_REG_ACK_TABLE        (AR9170_MAC_REG_BASE + 0xc00)
0321 #define AR9170_MAC_REG_RX_CONTROL       (AR9170_MAC_REG_BASE + 0xc40)
0322 #define     AR9170_MAC_RX_CTRL_DEAGG        0x1
0323 #define     AR9170_MAC_RX_CTRL_SHORT_FILTER     0x2
0324 #define     AR9170_MAC_RX_CTRL_SA_DA_SEARCH     0x20
0325 #define     AR9170_MAC_RX_CTRL_PASS_TO_HOST     BIT(28)
0326 #define     AR9170_MAC_RX_CTRL_ACK_IN_SNIFFER   BIT(30)
0327 
0328 #define AR9170_MAC_REG_RX_CONTROL_1     (AR9170_MAC_REG_BASE + 0xc44)
0329 
0330 #define AR9170_MAC_REG_AMPDU_RX_THRESH      (AR9170_MAC_REG_BASE + 0xc50)
0331 
0332 #define AR9170_MAC_REG_RX_MPDU          (AR9170_MAC_REG_BASE + 0xca0)
0333 #define AR9170_MAC_REG_RX_DROPPED_MPDU      (AR9170_MAC_REG_BASE + 0xca4)
0334 #define AR9170_MAC_REG_RX_DEL_MPDU      (AR9170_MAC_REG_BASE + 0xca8)
0335 #define AR9170_MAC_REG_RX_PHY_MISC_ERROR    (AR9170_MAC_REG_BASE + 0xcac)
0336 #define AR9170_MAC_REG_RX_PHY_XR_ERROR      (AR9170_MAC_REG_BASE + 0xcb0)
0337 #define AR9170_MAC_REG_RX_PHY_OFDM_ERROR    (AR9170_MAC_REG_BASE + 0xcb4)
0338 #define AR9170_MAC_REG_RX_PHY_CCK_ERROR     (AR9170_MAC_REG_BASE + 0xcb8)
0339 #define AR9170_MAC_REG_RX_PHY_HT_ERROR      (AR9170_MAC_REG_BASE + 0xcbc)
0340 #define AR9170_MAC_REG_RX_PHY_TOTAL     (AR9170_MAC_REG_BASE + 0xcc0)
0341 
0342 #define AR9170_MAC_REG_DMA_TXQ_ADDR     (AR9170_MAC_REG_BASE + 0xd00)
0343 #define AR9170_MAC_REG_DMA_TXQ_CURR_ADDR    (AR9170_MAC_REG_BASE + 0xd04)
0344 #define AR9170_MAC_REG_DMA_TXQ0_ADDR        (AR9170_MAC_REG_BASE + 0xd00)
0345 #define AR9170_MAC_REG_DMA_TXQ0_CURR_ADDR   (AR9170_MAC_REG_BASE + 0xd04)
0346 #define AR9170_MAC_REG_DMA_TXQ1_ADDR        (AR9170_MAC_REG_BASE + 0xd08)
0347 #define AR9170_MAC_REG_DMA_TXQ1_CURR_ADDR   (AR9170_MAC_REG_BASE + 0xd0c)
0348 #define AR9170_MAC_REG_DMA_TXQ2_ADDR        (AR9170_MAC_REG_BASE + 0xd10)
0349 #define AR9170_MAC_REG_DMA_TXQ2_CURR_ADDR   (AR9170_MAC_REG_BASE + 0xd14)
0350 #define AR9170_MAC_REG_DMA_TXQ3_ADDR        (AR9170_MAC_REG_BASE + 0xd18)
0351 #define AR9170_MAC_REG_DMA_TXQ3_CURR_ADDR   (AR9170_MAC_REG_BASE + 0xd1c)
0352 #define AR9170_MAC_REG_DMA_TXQ4_ADDR        (AR9170_MAC_REG_BASE + 0xd20)
0353 #define AR9170_MAC_REG_DMA_TXQ4_CURR_ADDR   (AR9170_MAC_REG_BASE + 0xd24)
0354 #define AR9170_MAC_REG_DMA_RXQ_ADDR     (AR9170_MAC_REG_BASE + 0xd28)
0355 #define AR9170_MAC_REG_DMA_RXQ_CURR_ADDR    (AR9170_MAC_REG_BASE + 0xd2c)
0356 
0357 #define AR9170_MAC_REG_DMA_TRIGGER      (AR9170_MAC_REG_BASE + 0xd30)
0358 #define     AR9170_DMA_TRIGGER_TXQ0         BIT(0)
0359 #define     AR9170_DMA_TRIGGER_TXQ1         BIT(1)
0360 #define     AR9170_DMA_TRIGGER_TXQ2         BIT(2)
0361 #define     AR9170_DMA_TRIGGER_TXQ3         BIT(3)
0362 #define     AR9170_DMA_TRIGGER_TXQ4         BIT(4)
0363 #define     AR9170_DMA_TRIGGER_RXQ          BIT(8)
0364 
0365 #define AR9170_MAC_REG_DMA_WLAN_STATUS      (AR9170_MAC_REG_BASE + 0xd38)
0366 #define AR9170_MAC_REG_DMA_STATUS       (AR9170_MAC_REG_BASE + 0xd3c)
0367 #define AR9170_MAC_REG_DMA_TXQ_LAST_ADDR    (AR9170_MAC_REG_BASE + 0xd40)
0368 #define AR9170_MAC_REG_DMA_TXQ0_LAST_ADDR   (AR9170_MAC_REG_BASE + 0xd40)
0369 #define AR9170_MAC_REG_DMA_TXQ1_LAST_ADDR   (AR9170_MAC_REG_BASE + 0xd44)
0370 #define AR9170_MAC_REG_DMA_TXQ2_LAST_ADDR   (AR9170_MAC_REG_BASE + 0xd48)
0371 #define AR9170_MAC_REG_DMA_TXQ3_LAST_ADDR   (AR9170_MAC_REG_BASE + 0xd4c)
0372 #define AR9170_MAC_REG_DMA_TXQ4_LAST_ADDR   (AR9170_MAC_REG_BASE + 0xd50)
0373 #define AR9170_MAC_REG_DMA_TXQ0Q1_LEN       (AR9170_MAC_REG_BASE + 0xd54)
0374 #define AR9170_MAC_REG_DMA_TXQ2Q3_LEN       (AR9170_MAC_REG_BASE + 0xd58)
0375 #define AR9170_MAC_REG_DMA_TXQ4_LEN     (AR9170_MAC_REG_BASE + 0xd5c)
0376 
0377 #define AR9170_MAC_REG_DMA_TXQX_LAST_ADDR   (AR9170_MAC_REG_BASE + 0xd74)
0378 #define AR9170_MAC_REG_DMA_TXQX_FAIL_ADDR   (AR9170_MAC_REG_BASE + 0xd78)
0379 #define AR9170_MAC_REG_TXRX_MPI         (AR9170_MAC_REG_BASE + 0xd7c)
0380 #define     AR9170_MAC_TXRX_MPI_TX_MPI_MASK     0x0000000f
0381 #define     AR9170_MAC_TXRX_MPI_TX_TO_MASK      0x0000fff0
0382 #define     AR9170_MAC_TXRX_MPI_RX_MPI_MASK     0x000f0000
0383 #define     AR9170_MAC_TXRX_MPI_RX_TO_MASK      0xfff00000
0384 
0385 #define AR9170_MAC_REG_BCN_ADDR         (AR9170_MAC_REG_BASE + 0xd84)
0386 #define AR9170_MAC_REG_BCN_LENGTH       (AR9170_MAC_REG_BASE + 0xd88)
0387 #define     AR9170_MAC_BCN_LENGTH_MAX       (512 - 32)
0388 
0389 #define AR9170_MAC_REG_BCN_STATUS       (AR9170_MAC_REG_BASE + 0xd8c)
0390 
0391 #define AR9170_MAC_REG_BCN_PLCP         (AR9170_MAC_REG_BASE + 0xd90)
0392 #define AR9170_MAC_REG_BCN_CTRL         (AR9170_MAC_REG_BASE + 0xd94)
0393 #define     AR9170_BCN_CTRL_READY           0x01
0394 #define     AR9170_BCN_CTRL_LOCK            0x02
0395 
0396 #define AR9170_MAC_REG_BCN_CURR_ADDR        (AR9170_MAC_REG_BASE + 0xd98)
0397 #define AR9170_MAC_REG_BCN_COUNT        (AR9170_MAC_REG_BASE + 0xd9c)
0398 #define AR9170_MAC_REG_BCN_HT1          (AR9170_MAC_REG_BASE + 0xda0)
0399 #define     AR9170_MAC_BCN_HT1_HT_EN        BIT(0)
0400 #define     AR9170_MAC_BCN_HT1_GF_PMB       BIT(1)
0401 #define     AR9170_MAC_BCN_HT1_SP_EXP       BIT(2)
0402 #define     AR9170_MAC_BCN_HT1_TX_BF        BIT(3)
0403 #define     AR9170_MAC_BCN_HT1_PWR_CTRL_S       4
0404 #define     AR9170_MAC_BCN_HT1_PWR_CTRL     0x70
0405 #define     AR9170_MAC_BCN_HT1_TX_ANT1      BIT(7)
0406 #define     AR9170_MAC_BCN_HT1_TX_ANT0      BIT(8)
0407 #define     AR9170_MAC_BCN_HT1_NUM_LFT_S        9
0408 #define     AR9170_MAC_BCN_HT1_NUM_LFT      0x600
0409 #define     AR9170_MAC_BCN_HT1_BWC_20M_EXT      BIT(16)
0410 #define     AR9170_MAC_BCN_HT1_BWC_40M_SHARED   BIT(17)
0411 #define     AR9170_MAC_BCN_HT1_BWC_40M_DUP      (BIT(16) | BIT(17))
0412 #define     AR9170_MAC_BCN_HT1_BF_MCS_S     18
0413 #define     AR9170_MAC_BCN_HT1_BF_MCS       0x1c0000
0414 #define     AR9170_MAC_BCN_HT1_TPC_S        21
0415 #define     AR9170_MAC_BCN_HT1_TPC          0x7e00000
0416 #define     AR9170_MAC_BCN_HT1_CHAIN_MASK_S     27
0417 #define     AR9170_MAC_BCN_HT1_CHAIN_MASK       0x38000000
0418 
0419 #define AR9170_MAC_REG_BCN_HT2          (AR9170_MAC_REG_BASE + 0xda4)
0420 #define     AR9170_MAC_BCN_HT2_MCS_S        0
0421 #define     AR9170_MAC_BCN_HT2_MCS          0x7f
0422 #define     AR9170_MAC_BCN_HT2_BW40         BIT(8)
0423 #define     AR9170_MAC_BCN_HT2_SMOOTHING        BIT(9)
0424 #define     AR9170_MAC_BCN_HT2_SS           BIT(10)
0425 #define     AR9170_MAC_BCN_HT2_NSS          BIT(11)
0426 #define     AR9170_MAC_BCN_HT2_STBC_S       12
0427 #define     AR9170_MAC_BCN_HT2_STBC         0x3000
0428 #define     AR9170_MAC_BCN_HT2_ADV_COD      BIT(14)
0429 #define     AR9170_MAC_BCN_HT2_SGI          BIT(15)
0430 #define     AR9170_MAC_BCN_HT2_LEN_S        16
0431 #define     AR9170_MAC_BCN_HT2_LEN          0xffff0000
0432 
0433 #define AR9170_MAC_REG_DMA_TXQX_ADDR_CURR   (AR9170_MAC_REG_BASE + 0xdc0)
0434 
0435 /* Random number generator */
0436 #define AR9170_RAND_REG_BASE            0x1d0000
0437 
0438 #define AR9170_RAND_REG_NUM         (AR9170_RAND_REG_BASE + 0x000)
0439 #define AR9170_RAND_REG_MODE            (AR9170_RAND_REG_BASE + 0x004)
0440 #define     AR9170_RAND_MODE_MANUAL         0x000
0441 #define     AR9170_RAND_MODE_FREE           0x001
0442 
0443 /* GPIO */
0444 #define AR9170_GPIO_REG_BASE            0x1d0100
0445 #define AR9170_GPIO_REG_PORT_TYPE       (AR9170_GPIO_REG_BASE + 0x000)
0446 #define AR9170_GPIO_REG_PORT_DATA       (AR9170_GPIO_REG_BASE + 0x004)
0447 #define     AR9170_GPIO_PORT_LED_0          1
0448 #define     AR9170_GPIO_PORT_LED_1          2
0449 /* WPS Button GPIO for TP-Link TL-WN821N */
0450 #define     AR9170_GPIO_PORT_WPS_BUTTON_PRESSED 4
0451 
0452 /* Memory Controller */
0453 #define AR9170_MC_REG_BASE          0x1d1000
0454 
0455 #define AR9170_MC_REG_FLASH_WAIT_STATE      (AR9170_MC_REG_BASE + 0x000)
0456 
0457 #define AR9170_SPI_REG_BASE         (AR9170_MC_REG_BASE + 0x200)
0458 #define AR9170_SPI_REG_CONTROL0         (AR9170_SPI_REG_BASE + 0x000)
0459 #define     AR9170_SPI_CONTROL0_BUSY        BIT(0)
0460 #define     AR9170_SPI_CONTROL0_CMD_GO      BIT(1)
0461 #define     AR9170_SPI_CONTROL0_PAGE_WR     BIT(2)
0462 #define     AR9170_SPI_CONTROL0_SEQ_RD      BIT(3)
0463 #define     AR9170_SPI_CONTROL0_CMD_ABORT       BIT(4)
0464 #define     AR9170_SPI_CONTROL0_CMD_LEN_S       8
0465 #define     AR9170_SPI_CONTROL0_CMD_LEN     0x00000f00
0466 #define     AR9170_SPI_CONTROL0_RD_LEN_S        12
0467 #define     AR9170_SPI_CONTROL0_RD_LEN      0x00007000
0468 
0469 #define AR9170_SPI_REG_CONTROL1         (AR9170_SPI_REG_BASE + 0x004)
0470 #define     AR9170_SPI_CONTROL1_SCK_RATE        BIT(0)
0471 #define     AR9170_SPI_CONTROL1_DRIVE_SDO       BIT(1)
0472 #define     AR9170_SPI_CONTROL1_MODE_SEL_S      2
0473 #define     AR9170_SPI_CONTROL1_MODE_SEL        0x000000c0
0474 #define     AR9170_SPI_CONTROL1_WRITE_PROTECT   BIT(4)
0475 
0476 #define AR9170_SPI_REG_COMMAND_PORT0        (AR9170_SPI_REG_BASE + 0x008)
0477 #define     AR9170_SPI_COMMAND_PORT0_CMD0_S     0
0478 #define     AR9170_SPI_COMMAND_PORT0_CMD0       0x000000ff
0479 #define     AR9170_SPI_COMMAND_PORT0_CMD1_S     8
0480 #define     AR9170_SPI_COMMAND_PORT0_CMD1       0x0000ff00
0481 #define     AR9170_SPI_COMMAND_PORT0_CMD2_S     16
0482 #define     AR9170_SPI_COMMAND_PORT0_CMD2       0x00ff0000
0483 #define     AR9170_SPI_COMMAND_PORT0_CMD3_S     24
0484 #define     AR9170_SPI_COMMAND_PORT0_CMD3       0xff000000
0485 
0486 #define AR9170_SPI_REG_COMMAND_PORT1        (AR9170_SPI_REG_BASE + 0x00C)
0487 #define     AR9170_SPI_COMMAND_PORT1_CMD4_S     0
0488 #define     AR9170_SPI_COMMAND_PORT1_CMD4       0x000000ff
0489 #define     AR9170_SPI_COMMAND_PORT1_CMD5_S     8
0490 #define     AR9170_SPI_COMMAND_PORT1_CMD5       0x0000ff00
0491 #define     AR9170_SPI_COMMAND_PORT1_CMD6_S     16
0492 #define     AR9170_SPI_COMMAND_PORT1_CMD6       0x00ff0000
0493 #define     AR9170_SPI_COMMAND_PORT1_CMD7_S     24
0494 #define     AR9170_SPI_COMMAND_PORT1_CMD7       0xff000000
0495 
0496 #define AR9170_SPI_REG_DATA_PORT        (AR9170_SPI_REG_BASE + 0x010)
0497 #define AR9170_SPI_REG_PAGE_WRITE_LEN       (AR9170_SPI_REG_BASE + 0x014)
0498 
0499 #define AR9170_EEPROM_REG_BASE          (AR9170_MC_REG_BASE + 0x400)
0500 #define AR9170_EEPROM_REG_WP_MAGIC1     (AR9170_EEPROM_REG_BASE + 0x000)
0501 #define     AR9170_EEPROM_WP_MAGIC1         0x12345678
0502 
0503 #define AR9170_EEPROM_REG_WP_MAGIC2     (AR9170_EEPROM_REG_BASE + 0x004)
0504 #define     AR9170_EEPROM_WP_MAGIC2         0x55aa00ff
0505 
0506 #define AR9170_EEPROM_REG_WP_MAGIC3     (AR9170_EEPROM_REG_BASE + 0x008)
0507 #define     AR9170_EEPROM_WP_MAGIC3         0x13579ace
0508 
0509 #define AR9170_EEPROM_REG_CLOCK_DIV     (AR9170_EEPROM_REG_BASE + 0x00C)
0510 #define     AR9170_EEPROM_CLOCK_DIV_FAC_S       0
0511 #define     AR9170_EEPROM_CLOCK_DIV_FAC     0x000001ff
0512 #define     AR9170_EEPROM_CLOCK_DIV_FAC_39KHZ   0xff
0513 #define     AR9170_EEPROM_CLOCK_DIV_FAC_78KHZ   0x7f
0514 #define     AR9170_EEPROM_CLOCK_DIV_FAC_312KHZ  0x1f
0515 #define     AR9170_EEPROM_CLOCK_DIV_FAC_10MHZ   0x0
0516 #define AR9170_EEPROM_CLOCK_DIV_SOFT_RST        BIT(9)
0517 
0518 #define AR9170_EEPROM_REG_MODE          (AR9170_EEPROM_REG_BASE + 0x010)
0519 #define AR9170_EEPROM_MODE_EEPROM_SIZE_16K_PLUS     BIT(31)
0520 
0521 #define AR9170_EEPROM_REG_WRITE_PROTECT     (AR9170_EEPROM_REG_BASE + 0x014)
0522 #define     AR9170_EEPROM_WRITE_PROTECT_WP_STATUS   BIT(0)
0523 #define     AR9170_EEPROM_WRITE_PROTECT_WP_SET  BIT(8)
0524 
0525 /* Interrupt Controller */
0526 #define AR9170_MAX_INT_SRC          9
0527 #define AR9170_INT_REG_BASE         0x1d2000
0528 
0529 #define AR9170_INT_REG_FLAG         (AR9170_INT_REG_BASE + 0x000)
0530 #define AR9170_INT_REG_FIQ_MASK         (AR9170_INT_REG_BASE + 0x004)
0531 #define AR9170_INT_REG_IRQ_MASK         (AR9170_INT_REG_BASE + 0x008)
0532 /* INT_REG_FLAG, INT_REG_FIQ_MASK and INT_REG_IRQ_MASK */
0533 #define     AR9170_INT_FLAG_WLAN            0x001
0534 #define     AR9170_INT_FLAG_PTAB_BIT        0x002
0535 #define     AR9170_INT_FLAG_SE_BIT          0x004
0536 #define     AR9170_INT_FLAG_UART_BIT        0x008
0537 #define     AR9170_INT_FLAG_TIMER_BIT       0x010
0538 #define     AR9170_INT_FLAG_EXT_BIT         0x020
0539 #define     AR9170_INT_FLAG_SW_BIT          0x040
0540 #define     AR9170_INT_FLAG_USB_BIT         0x080
0541 #define     AR9170_INT_FLAG_ETHERNET_BIT        0x100
0542 
0543 #define AR9170_INT_REG_PRIORITY1        (AR9170_INT_REG_BASE + 0x00c)
0544 #define AR9170_INT_REG_PRIORITY2        (AR9170_INT_REG_BASE + 0x010)
0545 #define AR9170_INT_REG_PRIORITY3        (AR9170_INT_REG_BASE + 0x014)
0546 #define AR9170_INT_REG_EXT_INT_CONTROL      (AR9170_INT_REG_BASE + 0x018)
0547 #define AR9170_INT_REG_SW_INT_CONTROL       (AR9170_INT_REG_BASE + 0x01c)
0548 #define     AR9170_INT_SW_INT_ENABLE        0x1
0549 
0550 #define AR9170_INT_REG_FIQ_ENCODE       (AR9170_INT_REG_BASE + 0x020)
0551 #define AR9170_INT_INT_IRQ_ENCODE       (AR9170_INT_REG_BASE + 0x024)
0552 
0553 /* Power Management */
0554 #define AR9170_PWR_REG_BASE         0x1d4000
0555 
0556 #define AR9170_PWR_REG_POWER_STATE      (AR9170_PWR_REG_BASE + 0x000)
0557 
0558 #define AR9170_PWR_REG_RESET            (AR9170_PWR_REG_BASE + 0x004)
0559 #define     AR9170_PWR_RESET_COMMIT_RESET_MASK  BIT(0)
0560 #define     AR9170_PWR_RESET_WLAN_MASK      BIT(1)
0561 #define     AR9170_PWR_RESET_DMA_MASK       BIT(2)
0562 #define     AR9170_PWR_RESET_BRIDGE_MASK        BIT(3)
0563 #define     AR9170_PWR_RESET_AHB_MASK       BIT(9)
0564 #define     AR9170_PWR_RESET_BB_WARM_RESET      BIT(10)
0565 #define     AR9170_PWR_RESET_BB_COLD_RESET      BIT(11)
0566 #define     AR9170_PWR_RESET_ADDA_CLK_COLD_RESET    BIT(12)
0567 #define     AR9170_PWR_RESET_PLL            BIT(13)
0568 #define     AR9170_PWR_RESET_USB_PLL        BIT(14)
0569 
0570 #define AR9170_PWR_REG_CLOCK_SEL        (AR9170_PWR_REG_BASE + 0x008)
0571 #define     AR9170_PWR_CLK_AHB_40MHZ        0
0572 #define     AR9170_PWR_CLK_AHB_20_22MHZ     1
0573 #define     AR9170_PWR_CLK_AHB_40_44MHZ     2
0574 #define     AR9170_PWR_CLK_AHB_80_88MHZ     3
0575 #define     AR9170_PWR_CLK_DAC_160_INV_DLY      0x70
0576 
0577 #define AR9170_PWR_REG_CHIP_REVISION        (AR9170_PWR_REG_BASE + 0x010)
0578 #define AR9170_PWR_REG_PLL_ADDAC        (AR9170_PWR_REG_BASE + 0x014)
0579 #define     AR9170_PWR_PLL_ADDAC_DIV_S      2
0580 #define     AR9170_PWR_PLL_ADDAC_DIV        0xffc
0581 #define AR9170_PWR_REG_WATCH_DOG_MAGIC      (AR9170_PWR_REG_BASE + 0x020)
0582 
0583 /* Faraday USB Controller */
0584 #define AR9170_USB_REG_BASE         0x1e1000
0585 
0586 #define AR9170_USB_REG_MAIN_CTRL        (AR9170_USB_REG_BASE + 0x000)
0587 #define     AR9170_USB_MAIN_CTRL_REMOTE_WAKEUP  BIT(0)
0588 #define     AR9170_USB_MAIN_CTRL_ENABLE_GLOBAL_INT  BIT(2)
0589 #define     AR9170_USB_MAIN_CTRL_GO_TO_SUSPEND  BIT(3)
0590 #define     AR9170_USB_MAIN_CTRL_RESET      BIT(4)
0591 #define     AR9170_USB_MAIN_CTRL_CHIP_ENABLE    BIT(5)
0592 #define     AR9170_USB_MAIN_CTRL_HIGHSPEED      BIT(6)
0593 
0594 #define AR9170_USB_REG_DEVICE_ADDRESS       (AR9170_USB_REG_BASE + 0x001)
0595 #define     AR9170_USB_DEVICE_ADDRESS_CONFIGURE BIT(7)
0596 
0597 #define AR9170_USB_REG_TEST         (AR9170_USB_REG_BASE + 0x002)
0598 #define AR9170_USB_REG_PHY_TEST_SELECT      (AR9170_USB_REG_BASE + 0x008)
0599 #define AR9170_USB_REG_CX_CONFIG_STATUS     (AR9170_USB_REG_BASE + 0x00b)
0600 #define AR9170_USB_REG_EP0_DATA         (AR9170_USB_REG_BASE + 0x00c)
0601 #define AR9170_USB_REG_EP0_DATA1        (AR9170_USB_REG_BASE + 0x00c)
0602 #define AR9170_USB_REG_EP0_DATA2        (AR9170_USB_REG_BASE + 0x00d)
0603 
0604 #define AR9170_USB_REG_INTR_MASK_BYTE_0     (AR9170_USB_REG_BASE + 0x011)
0605 #define AR9170_USB_REG_INTR_MASK_BYTE_1     (AR9170_USB_REG_BASE + 0x012)
0606 #define AR9170_USB_REG_INTR_MASK_BYTE_2     (AR9170_USB_REG_BASE + 0x013)
0607 #define AR9170_USB_REG_INTR_MASK_BYTE_3     (AR9170_USB_REG_BASE + 0x014)
0608 #define AR9170_USB_REG_INTR_MASK_BYTE_4     (AR9170_USB_REG_BASE + 0x015)
0609 #define     AR9170_USB_INTR_DISABLE_OUT_INT     (BIT(7) | BIT(6))
0610 
0611 #define AR9170_USB_REG_INTR_MASK_BYTE_5     (AR9170_USB_REG_BASE + 0x016)
0612 #define AR9170_USB_REG_INTR_MASK_BYTE_6     (AR9170_USB_REG_BASE + 0x017)
0613 #define     AR9170_USB_INTR_DISABLE_IN_INT      BIT(6)
0614 
0615 #define AR9170_USB_REG_INTR_MASK_BYTE_7     (AR9170_USB_REG_BASE + 0x018)
0616 
0617 #define AR9170_USB_REG_INTR_GROUP       (AR9170_USB_REG_BASE + 0x020)
0618 
0619 #define AR9170_USB_REG_INTR_SOURCE_0        (AR9170_USB_REG_BASE + 0x021)
0620 #define     AR9170_USB_INTR_SRC0_SETUP      BIT(0)
0621 #define     AR9170_USB_INTR_SRC0_IN         BIT(1)
0622 #define     AR9170_USB_INTR_SRC0_OUT        BIT(2)
0623 #define     AR9170_USB_INTR_SRC0_FAIL       BIT(3) /* ??? */
0624 #define     AR9170_USB_INTR_SRC0_END        BIT(4) /* ??? */
0625 #define     AR9170_USB_INTR_SRC0_ABORT      BIT(7)
0626 
0627 #define AR9170_USB_REG_INTR_SOURCE_1        (AR9170_USB_REG_BASE + 0x022)
0628 #define AR9170_USB_REG_INTR_SOURCE_2        (AR9170_USB_REG_BASE + 0x023)
0629 #define AR9170_USB_REG_INTR_SOURCE_3        (AR9170_USB_REG_BASE + 0x024)
0630 #define AR9170_USB_REG_INTR_SOURCE_4        (AR9170_USB_REG_BASE + 0x025)
0631 #define AR9170_USB_REG_INTR_SOURCE_5        (AR9170_USB_REG_BASE + 0x026)
0632 #define AR9170_USB_REG_INTR_SOURCE_6        (AR9170_USB_REG_BASE + 0x027)
0633 #define AR9170_USB_REG_INTR_SOURCE_7        (AR9170_USB_REG_BASE + 0x028)
0634 #define     AR9170_USB_INTR_SRC7_USB_RESET      BIT(1)
0635 #define     AR9170_USB_INTR_SRC7_USB_SUSPEND    BIT(2)
0636 #define     AR9170_USB_INTR_SRC7_USB_RESUME     BIT(3)
0637 #define     AR9170_USB_INTR_SRC7_ISO_SEQ_ERR    BIT(4)
0638 #define     AR9170_USB_INTR_SRC7_ISO_SEQ_ABORT  BIT(5)
0639 #define     AR9170_USB_INTR_SRC7_TX0BYTE        BIT(6)
0640 #define     AR9170_USB_INTR_SRC7_RX0BYTE        BIT(7)
0641 
0642 #define AR9170_USB_REG_IDLE_COUNT       (AR9170_USB_REG_BASE + 0x02f)
0643 
0644 #define AR9170_USB_REG_EP_MAP           (AR9170_USB_REG_BASE + 0x030)
0645 #define AR9170_USB_REG_EP1_MAP          (AR9170_USB_REG_BASE + 0x030)
0646 #define AR9170_USB_REG_EP2_MAP          (AR9170_USB_REG_BASE + 0x031)
0647 #define AR9170_USB_REG_EP3_MAP          (AR9170_USB_REG_BASE + 0x032)
0648 #define AR9170_USB_REG_EP4_MAP          (AR9170_USB_REG_BASE + 0x033)
0649 #define AR9170_USB_REG_EP5_MAP          (AR9170_USB_REG_BASE + 0x034)
0650 #define AR9170_USB_REG_EP6_MAP          (AR9170_USB_REG_BASE + 0x035)
0651 #define AR9170_USB_REG_EP7_MAP          (AR9170_USB_REG_BASE + 0x036)
0652 #define AR9170_USB_REG_EP8_MAP          (AR9170_USB_REG_BASE + 0x037)
0653 #define AR9170_USB_REG_EP9_MAP          (AR9170_USB_REG_BASE + 0x038)
0654 #define AR9170_USB_REG_EP10_MAP         (AR9170_USB_REG_BASE + 0x039)
0655 
0656 #define AR9170_USB_REG_EP_IN_MAX_SIZE_HIGH  (AR9170_USB_REG_BASE + 0x03f)
0657 #define     AR9170_USB_EP_IN_STALL          0x8
0658 #define     AR9170_USB_EP_IN_TOGGLE         0x10
0659 
0660 #define AR9170_USB_REG_EP_IN_MAX_SIZE_LOW   (AR9170_USB_REG_BASE + 0x03e)
0661 
0662 #define AR9170_USB_REG_EP_OUT_MAX_SIZE_HIGH (AR9170_USB_REG_BASE + 0x05f)
0663 #define     AR9170_USB_EP_OUT_STALL         0x8
0664 #define     AR9170_USB_EP_OUT_TOGGLE        0x10
0665 
0666 #define AR9170_USB_REG_EP_OUT_MAX_SIZE_LOW  (AR9170_USB_REG_BASE + 0x05e)
0667 
0668 #define AR9170_USB_REG_EP3_BYTE_COUNT_HIGH  (AR9170_USB_REG_BASE + 0x0ae)
0669 #define AR9170_USB_REG_EP3_BYTE_COUNT_LOW   (AR9170_USB_REG_BASE + 0x0be)
0670 #define AR9170_USB_REG_EP4_BYTE_COUNT_HIGH  (AR9170_USB_REG_BASE + 0x0af)
0671 #define AR9170_USB_REG_EP4_BYTE_COUNT_LOW   (AR9170_USB_REG_BASE + 0x0bf)
0672 
0673 #define AR9170_USB_REG_FIFO_MAP         (AR9170_USB_REG_BASE + 0x080)
0674 #define AR9170_USB_REG_FIFO0_MAP        (AR9170_USB_REG_BASE + 0x080)
0675 #define AR9170_USB_REG_FIFO1_MAP        (AR9170_USB_REG_BASE + 0x081)
0676 #define AR9170_USB_REG_FIFO2_MAP        (AR9170_USB_REG_BASE + 0x082)
0677 #define AR9170_USB_REG_FIFO3_MAP        (AR9170_USB_REG_BASE + 0x083)
0678 #define AR9170_USB_REG_FIFO4_MAP        (AR9170_USB_REG_BASE + 0x084)
0679 #define AR9170_USB_REG_FIFO5_MAP        (AR9170_USB_REG_BASE + 0x085)
0680 #define AR9170_USB_REG_FIFO6_MAP        (AR9170_USB_REG_BASE + 0x086)
0681 #define AR9170_USB_REG_FIFO7_MAP        (AR9170_USB_REG_BASE + 0x087)
0682 #define AR9170_USB_REG_FIFO8_MAP        (AR9170_USB_REG_BASE + 0x088)
0683 #define AR9170_USB_REG_FIFO9_MAP        (AR9170_USB_REG_BASE + 0x089)
0684 
0685 #define AR9170_USB_REG_FIFO_CONFIG      (AR9170_USB_REG_BASE + 0x090)
0686 #define AR9170_USB_REG_FIFO0_CONFIG     (AR9170_USB_REG_BASE + 0x090)
0687 #define AR9170_USB_REG_FIFO1_CONFIG     (AR9170_USB_REG_BASE + 0x091)
0688 #define AR9170_USB_REG_FIFO2_CONFIG     (AR9170_USB_REG_BASE + 0x092)
0689 #define AR9170_USB_REG_FIFO3_CONFIG     (AR9170_USB_REG_BASE + 0x093)
0690 #define AR9170_USB_REG_FIFO4_CONFIG     (AR9170_USB_REG_BASE + 0x094)
0691 #define AR9170_USB_REG_FIFO5_CONFIG     (AR9170_USB_REG_BASE + 0x095)
0692 #define AR9170_USB_REG_FIFO6_CONFIG     (AR9170_USB_REG_BASE + 0x096)
0693 #define AR9170_USB_REG_FIFO7_CONFIG     (AR9170_USB_REG_BASE + 0x097)
0694 #define AR9170_USB_REG_FIFO8_CONFIG     (AR9170_USB_REG_BASE + 0x098)
0695 #define AR9170_USB_REG_FIFO9_CONFIG     (AR9170_USB_REG_BASE + 0x099)
0696 
0697 #define AR9170_USB_REG_EP3_DATA         (AR9170_USB_REG_BASE + 0x0f8)
0698 #define AR9170_USB_REG_EP4_DATA         (AR9170_USB_REG_BASE + 0x0fc)
0699 
0700 #define AR9170_USB_REG_FIFO_SIZE        (AR9170_USB_REG_BASE + 0x100)
0701 #define AR9170_USB_REG_DMA_CTL          (AR9170_USB_REG_BASE + 0x108)
0702 #define     AR9170_USB_DMA_CTL_ENABLE_TO_DEVICE BIT(0)
0703 #define     AR9170_USB_DMA_CTL_ENABLE_FROM_DEVICE   BIT(1)
0704 #define     AR9170_USB_DMA_CTL_HIGH_SPEED       BIT(2)
0705 #define     AR9170_USB_DMA_CTL_UP_PACKET_MODE   BIT(3)
0706 #define     AR9170_USB_DMA_CTL_UP_STREAM_S      4
0707 #define     AR9170_USB_DMA_CTL_UP_STREAM        (BIT(4) | BIT(5))
0708 #define     AR9170_USB_DMA_CTL_UP_STREAM_4K     (0)
0709 #define     AR9170_USB_DMA_CTL_UP_STREAM_8K     BIT(4)
0710 #define     AR9170_USB_DMA_CTL_UP_STREAM_16K    BIT(5)
0711 #define     AR9170_USB_DMA_CTL_UP_STREAM_32K    (BIT(4) | BIT(5))
0712 #define     AR9170_USB_DMA_CTL_DOWN_STREAM      BIT(6)
0713 
0714 #define AR9170_USB_REG_DMA_STATUS       (AR9170_USB_REG_BASE + 0x10c)
0715 #define     AR9170_USB_DMA_STATUS_UP_IDLE       BIT(8)
0716 #define     AR9170_USB_DMA_STATUS_DN_IDLE       BIT(16)
0717 
0718 #define AR9170_USB_REG_MAX_AGG_UPLOAD       (AR9170_USB_REG_BASE + 0x110)
0719 #define AR9170_USB_REG_UPLOAD_TIME_CTL      (AR9170_USB_REG_BASE + 0x114)
0720 
0721 #define AR9170_USB_REG_WAKE_UP          (AR9170_USB_REG_BASE + 0x120)
0722 #define     AR9170_USB_WAKE_UP_WAKE         BIT(0)
0723 
0724 #define AR9170_USB_REG_CBUS_CTRL        (AR9170_USB_REG_BASE + 0x1f0)
0725 #define     AR9170_USB_CBUS_CTRL_BUFFER_END     (BIT(1))
0726 
0727 /* PCI/USB to AHB Bridge */
0728 #define AR9170_PTA_REG_BASE         0x1e2000
0729 
0730 #define AR9170_PTA_REG_CMD          (AR9170_PTA_REG_BASE + 0x000)
0731 #define AR9170_PTA_REG_PARAM1           (AR9170_PTA_REG_BASE + 0x004)
0732 #define AR9170_PTA_REG_PARAM2           (AR9170_PTA_REG_BASE + 0x008)
0733 #define AR9170_PTA_REG_PARAM3           (AR9170_PTA_REG_BASE + 0x00c)
0734 #define AR9170_PTA_REG_RSP          (AR9170_PTA_REG_BASE + 0x010)
0735 #define AR9170_PTA_REG_STATUS1          (AR9170_PTA_REG_BASE + 0x014)
0736 #define AR9170_PTA_REG_STATUS2          (AR9170_PTA_REG_BASE + 0x018)
0737 #define AR9170_PTA_REG_STATUS3          (AR9170_PTA_REG_BASE + 0x01c)
0738 #define AR9170_PTA_REG_AHB_INT_FLAG     (AR9170_PTA_REG_BASE + 0x020)
0739 #define AR9170_PTA_REG_AHB_INT_MASK     (AR9170_PTA_REG_BASE + 0x024)
0740 #define AR9170_PTA_REG_AHB_INT_ACK      (AR9170_PTA_REG_BASE + 0x028)
0741 #define AR9170_PTA_REG_AHB_SCRATCH1     (AR9170_PTA_REG_BASE + 0x030)
0742 #define AR9170_PTA_REG_AHB_SCRATCH2     (AR9170_PTA_REG_BASE + 0x034)
0743 #define AR9170_PTA_REG_AHB_SCRATCH3     (AR9170_PTA_REG_BASE + 0x038)
0744 #define AR9170_PTA_REG_AHB_SCRATCH4     (AR9170_PTA_REG_BASE + 0x03c)
0745 
0746 #define AR9170_PTA_REG_SHARE_MEM_CTRL       (AR9170_PTA_REG_BASE + 0x124)
0747 
0748 /*
0749  * PCI to AHB Bridge
0750  */
0751 
0752 #define AR9170_PTA_REG_INT_FLAG         (AR9170_PTA_REG_BASE + 0x100)
0753 #define     AR9170_PTA_INT_FLAG_DN          0x01
0754 #define     AR9170_PTA_INT_FLAG_UP          0x02
0755 #define     AR9170_PTA_INT_FLAG_CMD         0x04
0756 
0757 #define AR9170_PTA_REG_INT_MASK         (AR9170_PTA_REG_BASE + 0x104)
0758 #define AR9170_PTA_REG_DN_DMA_ADDRL     (AR9170_PTA_REG_BASE + 0x108)
0759 #define AR9170_PTA_REG_DN_DMA_ADDRH     (AR9170_PTA_REG_BASE + 0x10c)
0760 #define AR9170_PTA_REG_UP_DMA_ADDRL     (AR9170_PTA_REG_BASE + 0x110)
0761 #define AR9170_PTA_REG_UP_DMA_ADDRH     (AR9170_PTA_REG_BASE + 0x114)
0762 #define AR9170_PTA_REG_DN_PEND_TIME     (AR9170_PTA_REG_BASE + 0x118)
0763 #define AR9170_PTA_REG_UP_PEND_TIME     (AR9170_PTA_REG_BASE + 0x11c)
0764 #define AR9170_PTA_REG_CONTROL          (AR9170_PTA_REG_BASE + 0x120)
0765 #define     AR9170_PTA_CTRL_4_BEAT_BURST        0x00
0766 #define     AR9170_PTA_CTRL_8_BEAT_BURST        0x01
0767 #define     AR9170_PTA_CTRL_16_BEAT_BURST       0x02
0768 #define     AR9170_PTA_CTRL_LOOPBACK_MODE       0x10
0769 
0770 #define AR9170_PTA_REG_MEM_CTRL         (AR9170_PTA_REG_BASE + 0x124)
0771 #define AR9170_PTA_REG_MEM_ADDR         (AR9170_PTA_REG_BASE + 0x128)
0772 #define AR9170_PTA_REG_DN_DMA_TRIGGER       (AR9170_PTA_REG_BASE + 0x12c)
0773 #define AR9170_PTA_REG_UP_DMA_TRIGGER       (AR9170_PTA_REG_BASE + 0x130)
0774 #define AR9170_PTA_REG_DMA_STATUS       (AR9170_PTA_REG_BASE + 0x134)
0775 #define AR9170_PTA_REG_DN_CURR_ADDRL        (AR9170_PTA_REG_BASE + 0x138)
0776 #define AR9170_PTA_REG_DN_CURR_ADDRH        (AR9170_PTA_REG_BASE + 0x13c)
0777 #define AR9170_PTA_REG_UP_CURR_ADDRL        (AR9170_PTA_REG_BASE + 0x140)
0778 #define AR9170_PTA_REG_UP_CURR_ADDRH        (AR9170_PTA_REG_BASE + 0x144)
0779 #define AR9170_PTA_REG_DMA_MODE_CTRL        (AR9170_PTA_REG_BASE + 0x148)
0780 #define     AR9170_PTA_DMA_MODE_CTRL_RESET      BIT(0)
0781 #define     AR9170_PTA_DMA_MODE_CTRL_DISABLE_USB    BIT(1)
0782 
0783 /* Protocol Controller Module */
0784 #define AR9170_MAC_REG_PC_REG_BASE      (AR9170_MAC_REG_BASE + 0xe00)
0785 
0786 
0787 #define AR9170_NUM_LEDS             2
0788 
0789 /* CAM */
0790 #define AR9170_CAM_MAX_USER         64
0791 #define AR9170_CAM_MAX_KEY_LENGTH       16
0792 
0793 #define AR9170_SRAM_OFFSET      0x100000
0794 #define AR9170_SRAM_SIZE        0x18000
0795 
0796 #define AR9170_PRAM_OFFSET      0x200000
0797 #define AR9170_PRAM_SIZE        0x8000
0798 
0799 enum cpu_clock {
0800     AHB_STATIC_40MHZ = 0,
0801     AHB_GMODE_22MHZ = 1,
0802     AHB_AMODE_20MHZ = 1,
0803     AHB_GMODE_44MHZ = 2,
0804     AHB_AMODE_40MHZ = 2,
0805     AHB_GMODE_88MHZ = 3,
0806     AHB_AMODE_80MHZ = 3
0807 };
0808 
0809 /* USB endpoints */
0810 enum ar9170_usb_ep {
0811     /*
0812      * Control EP is always EP 0 (USB SPEC)
0813      *
0814      * The weird thing is: the original firmware has a few
0815      * comments that suggest that the actual EP numbers
0816      * are in the 1 to 10 range?!
0817      */
0818     AR9170_USB_EP_CTRL      = 0,
0819 
0820     AR9170_USB_EP_TX,
0821     AR9170_USB_EP_RX,
0822     AR9170_USB_EP_IRQ,
0823     AR9170_USB_EP_CMD,
0824     AR9170_USB_NUM_EXTRA_EP     = 4,
0825 
0826     __AR9170_USB_NUM_EP,
0827 
0828     __AR9170_USB_NUM_MAX_EP     = 10
0829 };
0830 
0831 enum ar9170_usb_fifo {
0832     __AR9170_USB_NUM_MAX_FIFO   = 10
0833 };
0834 
0835 enum ar9170_tx_queues {
0836     AR9170_TXQ0 = 0,
0837     AR9170_TXQ1,
0838     AR9170_TXQ2,
0839     AR9170_TXQ3,
0840     AR9170_TXQ_SPECIAL,
0841 
0842     /* keep last */
0843     __AR9170_NUM_TX_QUEUES = 5
0844 };
0845 
0846 #define AR9170_TX_STREAM_TAG        0x697e
0847 #define AR9170_RX_STREAM_TAG        0x4e00
0848 #define AR9170_RX_STREAM_MAX_SIZE   0xffff
0849 
0850 struct ar9170_stream {
0851     __le16 length;
0852     __le16 tag;
0853 
0854     u8 payload[];
0855 } __packed __aligned(4);
0856 #define AR9170_STREAM_LEN               4
0857 
0858 #define AR9170_MAX_ACKTABLE_ENTRIES         8
0859 #define AR9170_MAX_VIRTUAL_MAC              7
0860 
0861 #define AR9170_USB_EP_CTRL_MAX              64
0862 #define AR9170_USB_EP_TX_MAX                512
0863 #define AR9170_USB_EP_RX_MAX                512
0864 #define AR9170_USB_EP_IRQ_MAX               64
0865 #define AR9170_USB_EP_CMD_MAX               64
0866 
0867 /* Trigger PRETBTT interrupt 6 Kus earlier */
0868 #define CARL9170_PRETBTT_KUS                6
0869 
0870 #define AR5416_MAX_RATE_POWER               63
0871 
0872 #define SET_VAL(reg, value, newvalue)                   \
0873     (value = ((value) & ~reg) | (((newvalue) << reg##_S) & reg))
0874 
0875 #define SET_CONSTVAL(reg, newvalue)                 \
0876     (((newvalue) << reg##_S) & reg)
0877 
0878 #define MOD_VAL(reg, value, newvalue)                   \
0879     (((value) & ~reg) | (((newvalue) << reg##_S) & reg))
0880 
0881 #define GET_VAL(reg, value)                     \
0882     (((value) & reg) >> reg##_S)
0883 
0884 #endif  /* __CARL9170_SHARED_HW_H */