xref: /freebsd/sys/dev/ath/ath_hal/ar5312/ar5312reg.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1*6e778a7eSPedro F. Giffuni /*-
2*6e778a7eSPedro F. Giffuni  * SPDX-License-Identifier: ISC
3*6e778a7eSPedro F. Giffuni  *
414779705SSam Leffler  * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
514779705SSam Leffler  * Copyright (c) 2002-2008 Atheros Communications, Inc.
614779705SSam Leffler  *
714779705SSam Leffler  * Permission to use, copy, modify, and/or distribute this software for any
814779705SSam Leffler  * purpose with or without fee is hereby granted, provided that the above
914779705SSam Leffler  * copyright notice and this permission notice appear in all copies.
1014779705SSam Leffler  *
1114779705SSam Leffler  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1214779705SSam Leffler  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1314779705SSam Leffler  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1414779705SSam Leffler  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1514779705SSam Leffler  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1614779705SSam Leffler  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1714779705SSam Leffler  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1814779705SSam Leffler  */
1914779705SSam Leffler #ifndef _DEV_ATH_AR5312REG_H_
2014779705SSam Leffler #define _DEV_ATH_AR5312REG_H_
2114779705SSam Leffler 
2214779705SSam Leffler #include "ar5212/ar5212reg.h"
2314779705SSam Leffler /*
2414779705SSam Leffler  * Definitions for the Atheros 5312 chipset.
2514779705SSam Leffler  */
2614779705SSam Leffler 
2714779705SSam Leffler /* Register base addresses for modules which are not wmac modules */
2814779705SSam Leffler /* 531X has a fixed memory map */
2914779705SSam Leffler 
3014779705SSam Leffler #define REG_WRITE(_reg,_val)		*((volatile uint32_t *)(_reg)) = (_val);
3114779705SSam Leffler #define REG_READ(_reg)		*((volatile uint32_t *)(_reg))
3214779705SSam Leffler /*
3314779705SSam Leffler  * PCI-MAC Configuration registers (AR2315+)
3414779705SSam Leffler  */
3514779705SSam Leffler #define AR5315_RSTIMER_BASE 0xb1000000  /* Address for reset/timer registers */
3614779705SSam Leffler #define AR5315_GPIO_BASE    0xb1000000  /* Address for GPIO registers */
3714779705SSam Leffler #define AR5315_WLAN0            0xb0000000
3814779705SSam Leffler 
3914779705SSam Leffler #define AR5315_RESET   0x0004      /* Offset of reset control register */
4014779705SSam Leffler #define AR5315_SREV    0x0014      /* Offset of reset control register */
4114779705SSam Leffler #define AR5315_ENDIAN_CTL  0x000c  /* offset of the endian control register */
4214779705SSam Leffler #define AR5315_CONFIG_WLAN     0x00000002      /* WLAN byteswap */
4314779705SSam Leffler 
4414779705SSam Leffler #define AR5315_REV_MAJ                     0x00f0
4514779705SSam Leffler #define AR5315_REV_MIN                     0x000f
4614779705SSam Leffler 
4714779705SSam Leffler #define AR5315_GPIODIR      0x0098      /* GPIO direction register */
4814779705SSam Leffler #define AR5315_GPIODO       0x0090      /* GPIO data output access reg */
4914779705SSam Leffler #define AR5315_GPIODI       0x0088      /* GPIO data input access reg*/
5014779705SSam Leffler #define AR5315_GPIOINT      0x00a0      /* GPIO interrupt control */
5114779705SSam Leffler 
5214779705SSam Leffler #define AR5315_GPIODIR_M(x) (1 << (x))  /* mask for i/o */
5314779705SSam Leffler #define AR5315_GPIODIR_O(x) (1 << (x))  /* output */
5414779705SSam Leffler #define AR5315_GPIODIR_I(x) 0           /* input */
5514779705SSam Leffler 
5614779705SSam Leffler #define AR5315_GPIOINT_S    0
5714779705SSam Leffler #define AR5315_GPIOINT_M    0x3F
5814779705SSam Leffler #define AR5315_GPIOINTLVL_S 6
5914779705SSam Leffler #define AR5315_GPIOINTLVL_M (3 << AR5315_GPIOINTLVL_S)
6014779705SSam Leffler 
6114779705SSam Leffler #define AR5315_WREV         (-0xefbfe0)      /* Revision ID register offset */
6214779705SSam Leffler #define AR5315_WREV_S       0           /* Shift for WMAC revision info */
6314779705SSam Leffler #define AR5315_WREV_ID      0x000000FF  /* Mask for WMAC revision info */
6414779705SSam Leffler #define AR5315_WREV_ID_S    4           /* Shift for WMAC Rev ID */
6514779705SSam Leffler #define AR5315_WREV_REVISION 0x0000000F /* Mask for WMAN Revsion version */
6614779705SSam Leffler 
6714779705SSam Leffler #define AR5315_RC_BB0_CRES   0x00000002  /* Cold reset to WMAC0 & WBB0 */
6814779705SSam Leffler #define AR5315_RC_BB1_CRES   0x00000200  /* Cold reset to WMAC1 & WBB1n */
6914779705SSam Leffler #define AR5315_RC_WMAC0_RES  0x00000001  /* Warm reset to WMAC 0 */
7014779705SSam Leffler #define AR5315_RC_WBB0_RES  0x00000002  /* Warm reset to WBB0 */
7114779705SSam Leffler #define AR5315_RC_WMAC1_RES  0x00020000  /* Warm reset to WMAC1 */
7214779705SSam Leffler #define AR5315_RC_WBB1_RES   0x00040000  /* Warm reset to WBB */
7314779705SSam Leffler 
7414779705SSam Leffler /*
7514779705SSam Leffler  * PCI-MAC Configuration registers (AR5312)
7614779705SSam Leffler  */
7714779705SSam Leffler #define AR5312_RSTIMER_BASE 0xbc003000  /* Address for reset/timer registers */
7814779705SSam Leffler #define AR5312_GPIO_BASE    0xbc002000  /* Address for GPIO registers */
7914779705SSam Leffler #define AR5312_WLAN0            0xb8000000
8014779705SSam Leffler #define AR5312_WLAN1            0xb8500000
8114779705SSam Leffler 
8214779705SSam Leffler #define AR5312_RESET	0x0020      /* Offset of reset control register */
8314779705SSam Leffler #define	AR5312_PCICFG	0x00B0	    /* MAC/PCI configuration reg (LEDs) */
8414779705SSam Leffler 
8514779705SSam Leffler #define AR5312_PCICFG_LEDMODE  0x0000001c	/* LED Mode mask */
8614779705SSam Leffler #define AR5312_PCICFG_LEDMODE_S  2	/* LED Mode shift */
8714779705SSam Leffler #define AR5312_PCICFG_LEDMOD0  0	/* Blnk prop to Tx and filtered Rx */
8814779705SSam Leffler #define AR5312_PCICFG_LEDMOD1  1	/* Blnk prop to all Tx and Rx */
8914779705SSam Leffler #define AR5312_PCICFG_LEDMOD2  2	/* DEBG flash */
9014779705SSam Leffler #define AR5312_PCICFG_LEDMOD3  3	/* BLNK Randomly */
9114779705SSam Leffler 
9214779705SSam Leffler #define	AR5312_PCICFG_LEDSEL   0x000000e0 /* LED Throughput select */
9314779705SSam Leffler #define AR5312_PCICFG_LEDSEL_S 5
9414779705SSam Leffler #define AR5312_PCICFG_LEDSEL0  0	/* See blink rate table on p. 143 */
9514779705SSam Leffler #define AR5312_PCICFG_LEDSEL1  1	/* of AR5212 data sheet */
9614779705SSam Leffler #define AR5312_PCICFG_LEDSEL2  2
9714779705SSam Leffler #define AR5312_PCICFG_LEDSEL3  3
9814779705SSam Leffler #define AR5312_PCICFG_LEDSEL4  4
9914779705SSam Leffler #define AR5312_PCICFG_LEDSEL5  5
10014779705SSam Leffler #define AR5312_PCICFG_LEDSEL6  6
10114779705SSam Leffler #define AR5312_PCICFG_LEDSEL7  7
10214779705SSam Leffler 
10314779705SSam Leffler #define AR5312_PCICFG_LEDSBR   0x00000100 /* Slow blink rate if no
10414779705SSam Leffler 			   		     activity. 0 = blink @ lowest
10514779705SSam Leffler 					     rate */
10614779705SSam Leffler 
10714779705SSam Leffler #undef AR_GPIOCR
10814779705SSam Leffler #undef AR_GPIODO                    /* Undefine the 5212 defs */
10914779705SSam Leffler #undef AR_GPIODI
11014779705SSam Leffler 
11114779705SSam Leffler #define AR5312_GPIOCR       0x0008      /* GPIO Control register */
11214779705SSam Leffler #define AR5312_GPIODO       0x0000      /* GPIO data output access reg */
11314779705SSam Leffler #define AR5312_GPIODI       0x0004      /* GPIO data input access reg*/
11414779705SSam Leffler /* NB: AR5312 uses AR5212 defines for GPIOCR definitions */
11514779705SSam Leffler 
11614779705SSam Leffler #define AR5312_WREV         0x0090      /* Revision ID register offset */
11714779705SSam Leffler #define AR5312_WREV_S       8           /* Shift for WMAC revision info */
11814779705SSam Leffler #define AR5312_WREV_ID      0x000000FF  /* Mask for WMAC revision info */
11914779705SSam Leffler #define AR5312_WREV_ID_S    4           /* Shift for WMAC Rev ID */
12014779705SSam Leffler #define AR5312_WREV_REVISION 0x0000000F /* Mask for WMAN Revsion version */
12114779705SSam Leffler 
12214779705SSam Leffler #define AR5312_RC_BB0_CRES   0x00000004  /* Cold reset to WMAC0 & WBB0 */
12314779705SSam Leffler #define AR5312_RC_BB1_CRES   0x00000200  /* Cold reset to WMAC1 & WBB1n */
12414779705SSam Leffler #define AR5312_RC_WMAC0_RES  0x00002000  /* Warm reset to WMAC 0 */
12514779705SSam Leffler #define AR5312_RC_WBB0_RES  0x00004000  /* Warm reset to WBB0 */
12614779705SSam Leffler #define AR5312_RC_WMAC1_RES  0x00020000  /* Warm reset to WMAC1 */
12714779705SSam Leffler #define AR5312_RC_WBB1_RES   0x00040000  /* Warm reset to WBB */
12814779705SSam Leffler 
12914779705SSam Leffler #define AR_RAD2112_SREV_MAJOR   0x40    /* 2112 Major Rev */
13014779705SSam Leffler 
13114779705SSam Leffler enum AR5312PowerMode {
13214779705SSam Leffler     AR5312_POWER_MODE_FORCE_SLEEP  = 0,
13314779705SSam Leffler     AR5312_POWER_MODE_FORCE_WAKE   = 1,
13414779705SSam Leffler     AR5312_POWER_MODE_NORMAL       = 2,
13514779705SSam Leffler };
13614779705SSam Leffler 
13714779705SSam Leffler #endif /* _DEV_AR5312REG_H_ */
138