Home | History | Annotate | Line # | Download | only in pcmcia
      1 /*	$NetBSD: if_xireg.h,v 1.9 2019/05/28 08:59:35 msaitoh Exp $	*/
      2 /*	OpenBSD: if_xereg.h,v 1.1 1999/05/18 19:18:21 niklas Exp	*/
      3 
      4 /*
      5  * Copyright (c) 1999 Niklas Hallqvist, Brandon Creighton, Job de Haas
      6  * All rights reserved.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  * 1. Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  * 2. Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in the
     15  *    documentation and/or other materials provided with the distribution.
     16  * 3. All advertising materials mentioning features or use of this software
     17  *    must display the following acknowledgement:
     18  *      This product includes software developed by Niklas Hallqvist,
     19  *	Brandon Creighton and Job de Haas.
     20  * 4. The name of the author may not be used to endorse or promote products
     21  *    derived from this software without specific prior written permission
     22  *
     23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     24  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     25  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     26  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     28  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     32  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     33  */
     34 
     35 #define PCMCIA_CCR_ECOR
     36 
     37 /* Additional Card Configuration Registers (CCR) on Dingo */
     38 
     39 #define PCMCIA_CCR_DCOR0		0x20
     40 #define PCMCIA_CCR_DCOR0_MRST_SFRST		0x80
     41 #define PCMCIA_CCR_DCOR0_MRST_SFPWDN		0x40
     42 #define PCMCIA_CCR_DCOR0_LED3_SFRST		0x20
     43 #define PCMCIA_CCR_DCOR0_LED3_SFPWDN		0x10
     44 #define PCMCIA_CCR_DCOR0_BUS			0x08
     45 #define PCMCIA_CCR_DCOR0_DECODE			0x04
     46 #define PCMCIA_CCR_DCOR0_SFINT			0x01
     47 #define PCMCIA_CCR_DCOR1		0x22
     48 #define PCMCIA_CCR_DCOR1_SFCSR_WAIT		0xC0
     49 #define PCMCIA_CCR_DCOR1_SHADOW_SFIOB		0x20
     50 #define PCMCIA_CCR_DCOR1_SHADOW_SFCSR		0x10
     51 #define PCMCIA_CCR_DCOR1_FORCE_LEVIREQ		0x08
     52 #define PCMCIA_CCR_DCOR1_D6			0x04
     53 #define PCMCIA_CCR_DCOR1_SF_STSCHG		0x02
     54 #define PCMCIA_CCR_DCOR1_SF_IREQ		0x01
     55 #define PCMCIA_CCR_DCOR2		0x24
     56 #define PCMCIA_CCR_DCOR2_SHADOW_SFCOR		0x10
     57 #define PCMCIA_CCR_DCOR2_SMEM_BASE		0x0F
     58 #define PCMCIA_CCR_DCOR3		0x26
     59 #define PCMCIA_CCR_DCOR4		0x28
     60 #define PCMCIA_CCR_SFCOR		0x40
     61 #define PCMCIA_CCR_SFCOR_SRESET			0x80
     62 #define PCMCIA_CCR_SFCOR_LEVIREQ		0x40
     63 #define PCMCIA_CCR_SFCOR_IRQ_STSCHG		0x20
     64 #define PCMCIA_CCR_SFCOR_CFINDEX		0x18
     65 #define PCMCIA_CCR_SFCOR_IREQ_ENABLE		0x04
     66 #define PCMCIA_CCR_SFCOR_ADDR_DECODE		0x02
     67 #define PCMCIA_CCR_SFCOR_FUNC_ENABLE		0x01
     68 #define PCMCIA_CCR_SFCSR		0x42
     69 #define PCMCIA_CCR_SFCSR_IOIS8			0x20
     70 #define PCMCIA_CCR_SFCSR_AUDIO			0x08
     71 #define PCMCIA_CCR_SFCSR_PWRDWN			0x04
     72 #define PCMCIA_CCR_SFCSR_INTR			0x02
     73 #define PCMCIA_CCR_SFCSR_INTRACK		0x01
     74 #define PCMCIA_CCR_SFIOBASE0		0x4A
     75 #define PCMCIA_CCR_SFIOBASE1		0x4C
     76 #define PCMCIA_CCR_SFILR		0x52
     77 
     78 #define PCMCIA_CCR_SIZE_DINGO		0x54
     79 
     80 #define XI_IOSIZE 	16
     81 
     82 /* All pages */
     83 #define CR	0x0	/* W  - Command register */
     84 #define ESR	0x0	/* R  - Ethernet status register */
     85 #define PR	0x1	/* RW - Page register select */
     86 #define EDP	0x4	/* RW - Ethernet data port, 4 registers */
     87 #define ISR0	0x6	/* R  - Ethernet interrupt status register */
     88 #define GIR	0x7	/* RW - Global interrupt register - dingo only */
     89 #define PTR	0xd	/* R  - Packets Transmitted register */
     90 
     91 /* Page 0 */
     92 #define TSO	0x8	/* R  - Transmit space open, 3 registers */
     93 #define TRS	0xa	/* W  - Transmit reservation size */
     94 #define DO0	0xc	/* W  - Data offset, 2 registers */
     95 #define DO1	0xd
     96 #define RSR	0xc	/* R  - Rx status register */
     97 #define TPR	0xd	/* R  - Tx packets register */
     98 #define RBC0	0xe	/* R  - Rx byte count, 2 registers */
     99 #define RBC1	0xf
    100 
    101 /* Page 1 */
    102 #define IMR0	0xc	/* RW - Interrupt mask, 2 registers */
    103 #define IMR1	0xd
    104 #define ECR	0xe	/* RW - Ethernet config register */
    105 
    106 /* Page 2 */
    107 #define RBS0	0x8	/* RW - Receive buffer start, 2 registers */
    108 #define RBS1	0x9
    109 #define LED	0xa	/* RW - LED control register */
    110 #define LED3	0xb	/* RW - LED3 control register */
    111 #define MSR	0xc	/* RW - Misc. setup register */
    112 #define GP2	0xd	/* RW - General purpose register 2 */
    113 
    114 /* Page 3 */
    115 #define TPT0	0xa	/* RW - Tx packet threshold, 2 registers */
    116 #define TPT1	0xb
    117 
    118 /* Page 4 */
    119 #define GP0	0x8	/* RW - General purpose register 0 */
    120 #define GP1	0x9	/* RW - General purpose register 1 */
    121 #define BV	0xa	/* R  - Bonding version register */
    122 #define EES	0xb	/* RW - EEPROM control register */
    123 
    124 /* Page 5 */
    125 #define RHSA0	0xa	/* RX host start address */
    126 
    127 /* Page 6 */
    128 
    129 /* Page 7 */
    130 
    131 /* Page 8 */
    132 
    133 /* Page 16 */
    134 
    135 /* Page 0x40 */
    136 #define CMD0	0x8	/* W  - Receive status register */
    137 #define RXST0	0x9	/* RW - Receive status register */
    138 #define TXST0	0xb	/* RW - Transmit status, 2 registers */
    139 #define TXST1	0xc
    140 #define RX0MSK	0xd	/* RW - Receive status mask register */
    141 #define TX0MSK	0xe	/* RW - Transmit status mask, 2 registers */
    142 #define TX1MSK	0xf	/* RW - Dingo does not define this register */
    143 
    144 /* Page 0x42 */
    145 #define SWC0	0x8	/* RW - Software configuration, 2 registers */
    146 #define SWC1	0x9
    147 
    148 /* Page 0x50-0x57 */
    149 #define	IA	0x8	/* RW - Individual address */
    150 
    151 /* CR register bits */
    152 #define TX_PKT		0x01	/* Transmit packet. */
    153 #define SOFT_RESET	0x02	/* Software reset. */
    154 #define ENABLE_INT	0x04	/* Enable interrupt. */
    155 #define FORCE_INT	0x08	/* Force interrupt. */
    156 #define CLR_TX_FIFO	0x10	/* Clear transmit FIFO. */
    157 #define CLR_RX_OVERRUN	0x20	/* Clear receive overrun. */
    158 #define RESTART_TX	0x40	/* Restart transmit process. */
    159 
    160 /* ESR register bits */
    161 #define FULL_PKT_RCV	0x01	/* Full packet received. */
    162 #define PKT_REJECTED	0x04	/* A packet was rejected. */
    163 #define TX_PKT_PEND	0x08	/* TX Packet Pending. */
    164 #define INCOR_POLARITY	0x10	/* XXX from linux driver, but not used there */
    165 #define MEDIA_SELECT	0x20	/* set if TP, clear if AUI */
    166 
    167 /* DO register bits */
    168 #define DO_OFF_MASK	0x1fff	/* Mask for offset value. */
    169 #define DO_CHG_OFFSET	0x2000	/* Change offset command. */
    170 #define DO_SHM_MODE	0x4000	/* Shared memory mode. */
    171 #define DO_SKIP_RX_PKT	0x8000	/* Skip Rx packet. */
    172 
    173 /* RBC register bits */
    174 #define RBC_COUNT_MASK	0x1fff	/* Mask for byte count. */
    175 #define RBC_RX_FULL	0x2000	/* Receive full packet. */
    176 #define RBC_RX_PARTIAL	0x4000	/* Receive partial packet. */
    177 #define RBC_RX_PKT_REJ	0x8000	/* Receive packet rejected. */
    178 
    179 /* ISR0(/IMR0) register bits */
    180 #define ISR_TX_OFLOW	0x01	/* Transmit buffer overflow. */
    181 #define ISR_PKT_TX	0x02	/* Packet transmitted. */
    182 #define ISR_MAC_INT	0x04	/* MAC interrupt. */
    183 #define ISR_RX_EARLY	0x10	/* Receive early packet. */
    184 #define ISR_RX_FULL	0x20	/* Receive full packet. */
    185 #define ISR_RX_PKT_REJ	0x40	/* Receive packet rejected. */
    186 #define ISR_FORCED_INT	0x80	/* Forced interrupt. */
    187 
    188 /* ECR register bits */
    189 #define ECR_EARLY_TX	0x01	/* Early transmit mode. */
    190 #define ECR_EARLY_RX	0x02	/* Early receive mode. */
    191 #define ECR_FULL_DUPLEX	0x04	/* Full duplex select. */
    192 #define ECR_LNK_PLS_DIS	0x20	/* Link pulse disable. */
    193 #define ECR_SW_COMPAT	0x80	/* Software compatibility switch. */
    194 
    195 /* GP0 register bits */
    196 #define GP1_WR		0x01	/* GP1 pin output value. */
    197 #define GP2_WR		0x02	/* GP2 pin output value. */
    198 #define GP1_OUT		0x04	/* GP1 pin output select. */
    199 #define GP2_OUT		0x08	/* GP2 pin output select. */
    200 #define GP1_RD		0x10	/* GP1 pin input value. */
    201 #define GP2_RD		0x20	/* GP2 pin input value. */
    202 
    203 /* GP1 register bits */
    204 #define POWER_UP	0x01	/* When 0, power down analogue part of chip. */
    205 
    206 /* LED register bits */
    207 #define LED0_SHIFT	0	/* LED0 Output shift & mask */
    208 #define LED0_MASK	0x7
    209 #define LED1_SHIFT	3	/* LED1 Output shift & mask */
    210 #define LED1_MASK	0x38
    211 #define LED0_RX_ENA	0x40	/* LED0 - receive enable */
    212 #define LED1_RX_ENA	0x80	/* LED1 - receive enable */
    213 
    214 /* LED3 register bits */
    215 #define LED3_SHIFT	0	/* LED0 output shift & mask */
    216 #define LED3_MASK	0x7
    217 #define LED3_RX_ENA	0x40	/* LED0 - receive enable */
    218 
    219 /* LED output values */
    220 #define LED_DISABLE	0	/* LED disabled */
    221 #define LED_COLL_ACT	1	/* Collision activity */
    222 #define LED_COLL_INACT	2	/* (NOT) Collision activity */
    223 #define LED_10MB_LINK	3	/* 10 Mb link detected */
    224 #define LED_100MB_LINK	4	/* 100 Mb link detected */
    225 #define LED_LINK	5	/* 10 Mb or 100 Mb link detected */
    226 #define LED_AUTO	6	/* Automatic assertion */
    227 #define LED_TX_ACT	7	/* Transmit activity */
    228 
    229 /* MSR register bits */
    230 #define SRAM_128K_EXT	0x01	/* 128K SRAM extension */
    231 #define RBS_BIT16	0x02	/* RBS bit 16 */
    232 #define SELECT_MII	0x08	/* Select MII */
    233 #define HASH_TBL_ENA	0x20	/* Hash table enable */
    234 
    235 /* GP2 register bits */
    236 #define GP3_WR		0x01	/* GP3 pin output value. */
    237 #define GP4_WR		0x02	/* GP4 pin output value. */
    238 #define GP3_OUT		0x04	/* GP3 pin output select. */
    239 #define GP4_OUT		0x08	/* GP4 pin output select. */
    240 #define GP3_RD		0x10	/* GP3 pin input value. */
    241 #define GP4_RD		0x20	/* GP4 pin input value. */
    242 
    243 /* RSR register bits */
    244 #define RSR_NOTMCAST	0x01	/* clear when multicast packet */
    245 #define RSR_BCAST	0x02	/* set when broadcast packet */
    246 #define RSR_TOO_LONG	0x04	/* set if packet is longer than 1518 octets */
    247 #define RSR_ALIGNERR	0x10	/* incorrect CRC and last octet not complete */
    248 #define RSR_CRCERR	0x20	/* incorrect CRC and last octet complete */
    249 #define RSR_RX_OK	0x80	/* packet received okay */
    250 
    251 /* CMD0 register bits */
    252 #define ONLINE		0x04	/* Online */
    253 #define OFFLINE		0x08	/* Online */
    254 #define ENABLE_RX	0x20	/* Enable receiver */
    255 #define DISABLE_RX	0x80	/* Disable receiver */
    256 
    257 /* RX0Msk register bits */
    258 #define PKT_TOO_LONG	0x02	/* Packet too long mask. */
    259 #define CRC_ERR		0x08	/* CRC error mask. */
    260 #define RX_OVERRUN	0x10	/* Receive overrun mask. */
    261 #define RX_ABORT	0x40	/* Receive abort mask. */
    262 #define RX_OK		0x80	/* Receive OK mask. */
    263 
    264 /* TX0Msk register bits */
    265 #define CARRIER_LOST	0x01	/* Carrier sense lost. */
    266 #define EXCESSIVE_COLL	0x02	/* Excessive collisions mask. */
    267 #define TX_UNDERRUN	0x08	/* Transmit underrun mask. */
    268 #define LATE_COLLISION	0x10	/* Late collision mask. */
    269 #define SQE		0x20	/* Signal quality error mask.. */
    270 #define TX_ABORT	0x40	/* Transmit abort mask. */
    271 #define TX_OK		0x80	/* Transmit OK mask. */
    272 
    273 /* SWC1 register bits */
    274 #define SWC1_IND_ADDR	0x01	/* Individual address enable. */
    275 #define SWC1_MCAST_PROM	0x02	/* Multicast promiscuous enable. */
    276 #define SWC1_PROMISC	0x04	/* Promiscuous mode enable. */
    277 #define SWC1_BCAST_DIS	0x08	/* Broadcast disable. */
    278 #define SWC1_MEDIA_SEL	0x40	/* Media select (Mohawk). */
    279 #define SWC1_AUTO_MEDIA	0x80	/* Automatic media select (Mohawk). */
    280 
    281 /* Misc. defines. */
    282 
    283 #define PAGE(sc, page)	\
    284     bus_space_write_1((sc->sc_bst), (sc->sc_bsh), PR, (page))
    285 
    286 /*
    287  * GP3 is connected to the MDC pin of the NS DP83840A PHY, GP4 is
    288  * connected to the MDIO pin.  These are utility macros to enhance
    289  * readability of the code.
    290  */
    291 #define MDC_LOW		GP3_OUT
    292 #define MDC_HIGH	(GP3_OUT | GP3_WR)
    293 #define MDIO_LOW	GP4_OUT
    294 #define MDIO_HIGH	(GP4_OUT | GP4_WR)
    295 #define MDIO		GP4_RD
    296 
    297 /* Values found in MANFID. */
    298 #define XIMEDIA_ETHER		0x01
    299 #define XIMEDIA_TOKEN		0x02
    300 #define XIMEDIA_ARC		0x04
    301 #define XIMEDIA_WIRELESS	0x08
    302 #define XIMEDIA_MODEM		0x10
    303 #define XIMEDIA_GSM		0x20
    304 
    305 #define XIPROD_IDMASK		0x0f
    306 #define XIPROD_POCKET		0x10
    307 #define XIPROD_EXTERNAL		0x20
    308 #define XIPROD_CREDITCARD	0x40
    309 #define XIPROD_CARDBUS		0x80
    310