]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/smc/if_smcreg.h
Fix a race in tty_signal_sessleader() with unlocked read of s_leader.
[FreeBSD/FreeBSD.git] / sys / dev / smc / if_smcreg.h
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2006 Benno Rice.  All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  *
28  */
29
30 #ifndef _IF_SMCREG_H_
31 #define _IF_SMCREG_H_
32
33 /* All Banks, Offset 0xe: Bank Select Register */
34 #define BSR                     0xe
35 #define BSR_BANK_MASK           0x0007  /* Which bank is currently selected */
36 #define BSR_IDENTIFY            0x3300  /* Static value for identification */
37 #define BSR_IDENTIFY_MASK       0xff00
38
39 /* Bank 0, Offset 0x0: Transmit Control Register */
40 #define TCR                     0x0
41 #define TCR_TXENA               0x0001  /* Enable/disable transmitter */
42 #define TCR_LOOP                0x0002  /* Put the PHY into loopback mode */
43 #define TCR_FORCOL              0x0004  /* Force a collision */
44 #define TCR_PAD_EN              0x0080  /* Pad TX frames to 64 bytes */
45 #define TCR_NOCRC               0x0100  /* Disable/enable CRC */
46 #define TCR_MON_CSN             0x0400  /* Monitor carrier signal */
47 #define TCR_FDUPLX              0x0800  /* Enable/disable full duplex */
48 #define TCR_STP_SQET            0x1000  /* Stop TX on signal quality error */
49 #define TCR_EPH_LOOP            0x2000  /* Internal loopback */
50 #define TCR_SWFDUP              0x8000  /* Switched full duplex */
51
52 /* Bank 0, Offset 0x2: EPH Status Register */
53 #define EPHSR                   0x2
54 #define EPHSR_TX_SUC            0x0001  /* Last TX was successful */
55 #define EPHSR_SNGLCOL           0x0002  /* Single collision on last TX */
56 #define EPHSR_MULCOL            0x0004  /* Multiple collisions on last TX */
57 #define EPHSR_LTX_MULT          0x0008  /* Last TX was multicast */
58 #define EPHSR_16COL             0x0010  /* 16 collisions on last TX */
59 #define EPHSR_SQET              0x0020  /* Signal quality error test */
60 #define EPHSR_LTX_BRD           0x0040  /* Last TX was broadcast */
61 #define EPHSR_TX_DEFR           0x0080  /* Transmit deferred */
62 #define EPHSR_LATCOL            0x0200  /* Late collision on last TX */
63 #define EPHSR_LOST_CARR         0x0400  /* Lost carrier sense */
64 #define EPHSR_EXC_DEF           0x0800  /* Excessive deferral */
65 #define EPHSR_CTR_ROL           0x1000  /* Counter rollover */
66 #define EPHSR_LINK_OK           0x4000  /* Inverse of nLNK pin */
67 #define EPHSR_TXUNRN            0x8000  /* Transmit underrun */
68
69 /* Bank 0, Offset 0x4: Receive Control Register */
70 #define RCR                     0x4
71 #define RCR_RX_ABORT            0x0001  /* RX aborted */
72 #define RCR_PRMS                0x0002  /* Enable/disable promiscuous mode */
73 #define RCR_ALMUL               0x0004  /* Accept all multicast frames */
74 #define RCR_RXEN                0x0100  /* Enable/disable receiver */
75 #define RCR_STRIP_CRC           0x0200  /* Strip CRC from RX packets */
76 #define RCR_ABORT_ENB           0x2000  /* Abort RX on collision */
77 #define RCR_FILT_CAR            0x4000  /* Filter leading 12 bits of carrier */
78 #define RCR_SOFT_RST            0x8000  /* Software reset */
79
80 /* Bank 0, Offset 0x6: Counter Register */
81 #define ECR                     0x6
82 #define ECR_SNGLCOL_MASK        0x000f  /* Single collisions */
83 #define ECR_SNGLCOL_SHIFT       0
84 #define ECR_MULCOL_MASK         0x00f0  /* Multiple collisions */
85 #define ECR_MULCOL_SHIFT        4
86 #define ECR_TX_DEFR_MASK        0x0f00  /* Transmit deferrals */
87 #define ECR_TX_DEFR_SHIFT       8
88 #define ECR_EXC_DEF_MASK        0xf000  /* Excessive deferrals */
89 #define ECR_EXC_DEF_SHIFT       12
90
91 /* Bank 0, Offset 0x8: Memory Information Register */
92 #define MIR                     0x8
93 #define MIR_SIZE_MASK           0x00ff  /* Memory size (2k pages) */
94 #define MIR_SIZE_SHIFT          0
95 #define MIR_FREE_MASK           0xff00  /* Memory free (2k pages) */
96 #define MIR_FREE_SHIFT          8
97 #define MIR_PAGE_SIZE           2048
98
99 /* Bank 0, Offset 0xa: Receive/PHY Control Reigster */
100 #define RPCR                    0xa
101 #define RPCR_ANEG               0x0800  /* Put PHY in autonegotiation mode */
102 #define RPCR_DPLX               0x1000  /* Put PHY in full-duplex mode */
103 #define RPCR_SPEED              0x2000  /* Manual speed selection */
104 #define RPCR_LSA_MASK           0x00e0  /* Select LED A function */
105 #define RPCR_LSA_SHIFT          5
106 #define RPCR_LSB_MASK           0x001c  /* Select LED B function */
107 #define RPCR_LSB_SHIFT          2
108 #define RPCR_LED_LINK_ANY       0x0     /* 10baseT or 100baseTX link detected */
109 #define RPCR_LED_LINK_10        0x2     /* 10baseT link detected */
110 #define RPCR_LED_LINK_FDX       0x3     /* Full-duplex link detected */
111 #define RPCR_LED_LINK_100       0x5     /* 100baseTX link detected */
112 #define RPCR_LED_ACT_ANY        0x4     /* TX or RX activity detected */
113 #define RPCR_LED_ACT_RX         0x6     /* RX activity detected */
114 #define RPCR_LED_ACT_TX         0x7     /* TX activity detected */
115
116 /* Bank 1, Offset 0x0: Configuration Register */
117 #define CR                      0x0
118 #define CR_EXT_PHY              0x0200  /* Enable/disable external PHY */
119 #define CR_GPCNTRL              0x0400  /* Inverse drives nCNTRL pin */
120 #define CR_NO_WAIT              0x1000  /* Do not request additional waits */
121 #define CR_EPH_POWER_EN         0x8000  /* Disable/enable low power mode */
122
123 /* Bank 1, Offset 0x2: Base Address Register */
124 #define BAR                     0x2
125 #define BAR_HIGH_MASK           0xe000
126 #define BAR_LOW_MASK            0x1f00
127 #define BAR_LOW_SHIFT           4
128 #define BAR_ADDRESS(val)        \
129         ((val & BAR_HIGH_MASK) | ((val & BAR_LOW_MASK) >> BAR_LOW_SHIFT))
130
131 /* Bank 1, Offsets 0x4: Individual Address Registers */
132 #define IAR0                    0x4
133 #define IAR1                    0x5
134 #define IAR2                    0x6
135 #define IAR3                    0x7
136 #define IAR4                    0x8
137 #define IAR5                    0x9
138
139 /* Bank 1, Offset 0xa: General Purpose Register */
140 #define GPR                     0xa
141
142 /* Bank 1, Offset 0xc: Control Register */
143 #define CTR                     0xa
144 #define CTR_STORE               0x0001  /* Store registers to EEPROM */
145 #define CTR_RELOAD              0x0002  /* Reload registers from EEPROM */
146 #define CTR_EEPROM_SELECT       0x0004  /* Select registers to store/reload */
147 #define CTR_TE_ENABLE           0x0020  /* TX error causes EPH interrupt */
148 #define CTR_CR_ENABLE           0x0040  /* Ctr rollover causes EPH interrupt */
149 #define CTR_LE_ENABLE           0x0080  /* Link error causes EPH interrupt */
150 #define CTR_AUTO_RELEASE        0x0800  /* Automatically release TX packets */
151 #define CTR_RCV_BAD             0x4000  /* Receive/discard bad CRC packets */
152
153 /* Bank 2, Offset 0x0: MMU Command Register */
154 #define MMUCR                   0x0
155 #define MMUCR_BUSY              0x0001  /* MMU is busy */
156 #define MMUCR_CMD_NOOP          (0<<5)  /* No operation */
157 #define MMUCR_CMD_TX_ALLOC      (1<<5)  /* Alloc TX memory (256b chunks) */
158 #define MMUCR_CMD_MMU_RESET     (2<<5)  /* Reset MMU */
159 #define MMUCR_CMD_REMOVE        (3<<5)  /* Remove frame from RX FIFO */
160 #define MMUCR_CMD_RELEASE       (4<<5)  /* Remove and release from RX FIFO */
161 #define MMUCR_CMD_RELEASE_PKT   (5<<5)  /* Release packet specified in PNR */
162 #define MMUCR_CMD_ENQUEUE       (6<<5)  /* Enqueue packet for TX */
163 #define MMUCR_CMD_TX_RESET      (7<<5)  /* Reset TX FIFOs */
164
165 /* Bank 2, Offset 0x2: Packet Number Register */
166 #define PNR                     0x2
167 #define PNR_MASK                0x3fff
168
169 /* Bank 2, Offset 0x3: Allocation Result Register */
170 #define ARR                     0x3
171 #define ARR_FAILED              0x8000  /* Last allocation request failed */
172 #define ARR_MASK                0x3000
173
174 /* Bank 2, Offset 0x4: FIFO Ports Register */
175 #define FIFO_TX                 0x4
176 #define FIFO_RX                 0x5
177 #define FIFO_EMPTY              0x80    /* FIFO empty */
178 #define FIFO_PACKET_MASK        0x3f    /* Packet number mask */
179
180 /* Bank 2, Offset 0x6: Pointer Register */
181 #define PTR                     0x6
182 #define PTR_MASK                0x07ff  /* Address accessible within TX/RX */
183 #define PTR_NOT_EMPTY           0x0800  /* Write Data FIFO not empty */
184 #define PTR_ETEN                0x1000  /* Enable early TX underrun detection */
185 #define PTR_READ                0x2000  /* Set read/write */
186 #define PTR_AUTO_INCR           0x4000  /* Auto increment on read/write */
187 #define PTR_RCV                 0x8000  /* Read/write to/from RX/TX */
188
189 /* Bank 2, Offset 0x8: Data Registers */
190 #define DATA0                   0x8
191 #define DATA1                   0xa
192
193 /* Bank 2, Offset 0xc: Interrupt Status Registers */
194 #define IST                     0xc     /* read only */
195 #define ACK                     0xc     /* write only */
196 #define MSK                     0xd
197
198 #define RCV_INT                 0x0001  /* RX */
199 #define TX_INT                  0x0002  /* TX */
200 #define TX_EMPTY_INT            0x0004  /* TX empty */
201 #define ALLOC_INT               0x0008  /* Allocation complete */
202 #define RX_OVRN_INT             0x0010  /* RX overrun */
203 #define EPH_INT                 0x0020  /* EPH interrupt */
204 #define ERCV_INT                0x0040  /* Early RX */
205 #define MD_INT                  0x0080  /* MII */
206
207 #define IST_PRINTF              "\20\01RCV\02TX\03TX_EMPTY\04ALLOC" \
208                                 "\05RX_OVRN\06EPH\07ERCV\10MD"
209
210 /* Bank 3, Offset 0x0: Multicast Table Registers */
211 #define MT                      0x0
212
213 /* Bank 3, Offset 0x8: Management Interface */
214 #define MGMT                    0x8
215 #define MGMT_MDO                0x0001  /* MII management output */
216 #define MGMT_MDI                0x0002  /* MII management input */
217 #define MGMT_MCLK               0x0004  /* MII management clock */
218 #define MGMT_MDOE               0x0008  /* MII management output enable */
219 #define MGMT_MSK_CRS100         0x4000  /* Disable CRS100 detection during TX */
220
221 /* Bank 3, Offset 0xa: Revision Register */
222 #define REV                     0xa
223 #define REV_CHIP_MASK           0x00f0  /* Chip ID */
224 #define REV_CHIP_SHIFT          4
225 #define REV_REV_MASK            0x000f  /* Revision ID */
226 #define REV_REV_SHIFT           0
227
228 #define REV_CHIP_9192           3
229 #define REV_CHIP_9194           4
230 #define REV_CHIP_9195           5
231 #define REV_CHIP_9196           6
232 #define REV_CHIP_91100          7
233 #define REV_CHIP_91100FD        8
234 #define REV_CHIP_91110FD        9
235
236 /* Bank 3, Offset 0xc: Early RCV Register */
237 #define ERCV                    0xc
238 #define ERCV_THRESHOLD_MASK     0x001f  /* ERCV int threshold (64b chunks) */
239 #define ERCV_RCV_DISCARD        0x0080  /* Discard packet being received */
240
241 /* Control Byte */
242 #define CTRL_CRC                0x10    /* Frame has CRC */
243 #define CTRL_ODD                0x20    /* Frame has odd byte count */
244
245 /* Receive Frame Status */
246 #define RX_MULTCAST             0x0001  /* Frame was multicast */
247 #define RX_HASH_MASK            0x007e  /* Hash value for multicast */
248 #define RX_HASH_SHIFT           1
249 #define RX_TOOSHORT             0x0400  /* Frame was too short */
250 #define RX_TOOLNG               0x0800  /* Frame was too long */
251 #define RX_ODDFRM               0x1000  /* Frame has odd number of bytes */
252 #define RX_BADCRC               0x2000  /* Frame failed CRC */
253 #define RX_BROADCAST            0x4000  /* Frame was broadcast */
254 #define RX_ALGNERR              0x8000  /* Frame had alignment error */
255 #define RX_LEN_MASK             0x07ff
256
257 /* Length of status word + byte count + control bytes for packets */
258 #define PKT_CTRL_DATA_LEN       6
259
260 /* Number of times to spin on TX allocations */
261 #define TX_ALLOC_WAIT_TIME      1000
262
263 #endif /* IF_SMCREG_H_ */