1 /*
2  * This file and its contents are supplied under the terms of the
3  * Common Development and Distribution License ("CDDL"), version 1.0.
4  * You may only use this file in accordance with the terms of version
5  * 1.0 of the CDDL.
6  *
7  * A full copy of the text of the CDDL should have accompanied this
8  * source. A copy of the CDDL is also available via the Internet at
9  * http://www.illumos.org/license/CDDL.
10  */
11 
12 /*
13  * This file is part of the Chelsio T4 support code.
14  *
15  * Copyright (C) 2010-2013 Chelsio Communications.  All rights reserved.
16  *
17  * This program is distributed in the hope that it will be useful, but WITHOUT
18  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19  * FITNESS FOR A PARTICULAR PURPOSE.  See the LICENSE file included in this
20  * release for licensing terms and conditions.
21  */
22 
23 #ifndef __CXGBE_OSDEP_H
24 #define	__CXGBE_OSDEP_H
25 
26 #include <sys/ddi.h>
27 #include <sys/sunddi.h>
28 #include <sys/byteorder.h>
29 #include <sys/cmn_err.h>
30 #include <sys/pcie.h>
31 #include <sys/sysmacros.h>
32 #include <sys/inttypes.h>
33 
34 /* sys/user.h defines u, and that bothers us. */
35 #undef u
36 
37 #define	isdigit(x) ((x) >= '0' && (x) <= '9')
38 #define	isspace(x) ((x) == ' ' || (x) == '\t')
39 #define	toupper(x) (((x) >= 'a' && (x) <= 'z') ? (x) - 'a' + 'A' : (x))
40 #define	fls(x) ddi_fls(x)
41 
42 #define	CH_ERR(sc, ...)		cxgb_printf(sc->dip, CE_WARN, ##__VA_ARGS__)
43 #define	CH_WARN(sc, ...)	cxgb_printf(sc->dip, CE_WARN, ##__VA_ARGS__)
44 #define	CH_WARN_RATELIMIT(sc, ...) cxgb_printf(sc->dip, CE_WARN, ##__VA_ARGS__)
45 #define	CH_ALERT(sc, ...)	cxgb_printf(sc->dip, CE_NOTE, ##__VA_ARGS__)
46 #define	CH_INFO(sc, ...)	cxgb_printf(sc->dip, CE_NOTE, ##__VA_ARGS__)
47 
48 #define CH_MSG(sc, level, category, fmt, ...)
49 #ifdef DEBUG
50 #define CH_DBG(sc, category, fmt, ...) cxgb_printf(sc->dip, CE_NOTE, ##__VA_ARGS__)
51 #else
52 #define CH_DBG(sc, category, fmt, ...)
53 #endif
54 #define CH_DUMP_MBOX(adap, mbox, data_reg, size)
55 
56 #define	MII_BMCR	0x00
57 #define	MII_BMSR	0x01
58 #define	MII_PHYSID1	0x02
59 #define	MII_PHYSID2	0x03
60 #define	MII_ADVERTISE	0x04
61 #define	MII_LPA		0x05
62 #define	MII_EXPANSION	0x06
63 #define	MII_CTRL1000	0x09
64 #define	MII_DCOUNTER	0x12
65 #define	MII_FCSCOUNTER	0x13
66 #define	MII_NWAYTEST	0x14
67 #define	MII_RERRCOUNTER	0x15
68 #define	MII_SREVISION	0x16
69 #define	MII_RESV1	0x17
70 #define	MII_LBRERROR	0x18
71 #define	MII_PHYADDR	0x19
72 #define	MII_RESV2	0x1a
73 #define	MII_TPISTATUS	0x1b
74 #define	MII_NCONFIG	0x1c
75 
76 #define	BMCR_RESV	0x007f
77 #define	BMCR_SPEED1000	0x0040
78 #define	BMCR_CTST	0x0080
79 #define	BMCR_FULLDPLX	0x0100
80 #define	BMCR_ANRESTART	0x0200
81 #define	BMCR_ISOLATE	0x0400
82 #define	BMCR_PDOWN	0x0800
83 #define	BMCR_ANENABLE	0x1000
84 #define	BMCR_SPEED100	0x2000
85 #define	BMCR_LOOPBACK	0x4000
86 #define	BMCR_RESET	0x8000
87 
88 #define	BMSR_ERCAP		0x0001
89 #define	BMSR_JCD		0x0002
90 #define	BMSR_LSTATUS		0x0004
91 #define	BMSR_ANEGCAPABLE	0x0008
92 #define	BMSR_RFAULT		0x0010
93 #define	BMSR_ANEGCOMPLETE	0x0020
94 #define	BMSR_RESV		0x07c0
95 #define	BMSR_10HALF		0x0800
96 #define	BMSR_10FULL		0x1000
97 #define	BMSR_100HALF		0x2000
98 #define	BMSR_100FULL		0x4000
99 #define	BMSR_100BASE4		0x8000
100 
101 #define	ADVERTISE_SLCT		0x001f
102 #define	ADVERTISE_CSMA		0x0001
103 #define	ADVERTISE_10HALF	0x0020
104 #define	ADVERTISE_1000XFULL	0x0020
105 #define	ADVERTISE_10FULL	0x0040
106 #define	ADVERTISE_1000XHALF	0x0040
107 #define	ADVERTISE_100HALF	0x0080
108 #define	ADVERTISE_1000XPAUSE	0x0080
109 #define	ADVERTISE_100FULL	0x0100
110 #define	ADVERTISE_1000XPSE_ASYM 0x0100
111 #define	ADVERTISE_100BASE4	0x0200
112 #define	ADVERTISE_PAUSE_CAP	0x0400
113 #define	ADVERTISE_PAUSE_ASYM	0x0800
114 #define	ADVERTISE_RESV		0x1c00
115 #define	ADVERTISE_RFAULT	0x2000
116 #define	ADVERTISE_LPACK		0x4000
117 #define	ADVERTISE_NPAGE		0x8000
118 
119 #define	ADVERTISE_1000FULL	0x0200
120 #define	ADVERTISE_1000HALF	0x0100
121 
122 #define PCI_VENDOR_ID           0x00
123 #define PCI_DEVICE_ID           0x02
124 
125 #define PCI_BASE_ADDRESS_0	0x10
126 #define PCI_BASE_ADDRESS_1	0x14
127 #define PCI_BASE_ADDRESS_2	0x18
128 #define PCI_BASE_ADDRESS_MEM_MASK	(~0x0fUL)
129 
130 #define	PCI_CAP_ID_EXP		PCI_CAP_ID_PCI_E
131 #define	PCI_EXP_DEVCTL		PCIE_DEVCTL
132 #define	PCI_EXP_DEVCTL_PAYLOAD	PCIE_DEVCTL_MAX_PAYLOAD_MASK
133 #define	PCI_EXP_DEVCTL_READRQ	PCIE_DEVCTL_MAX_READ_REQ_MASK
134 #define	PCI_EXP_LNKCTL		PCIE_LINKCTL
135 #define	PCI_EXP_LNKSTA		PCIE_LINKSTS
136 #define	PCI_EXP_LNKSTA_CLS	PCIE_LINKSTS_SPEED_MASK
137 #define	PCI_EXP_LNKSTA_NLW	PCIE_LINKSTS_NEG_WIDTH_MASK
138 #define	PCI_EXP_DEVCTL2		0x28
139 
140 #define	PCI_VPD_ADDR	2
141 #define	PCI_VPD_ADDR_F	0x8000
142 #define	PCI_VPD_DATA	4
143 
144 #define	__devinit
145 #ifndef ARRAY_SIZE
146 #define	ARRAY_SIZE(x) (sizeof (x) / sizeof ((x)[0]))
147 #endif
148 #define	DIV_ROUND_UP(x, y) howmany(x, y)
149 
150 #define	udelay(x) drv_usecwait(x)
151 #define	msleep(x) delay(drv_usectohz(1000ULL * (x)))
152 #define	mdelay(x) drv_usecwait(1000UL * (x))
153 
154 #define	le16_to_cpu(x) LE_16((uint16_t)(x))
155 #define	le32_to_cpu(x) LE_32((uint32_t)(x))
156 #define	le64_to_cpu(x) LE_64((uint64_t)(x))
157 #define	cpu_to_le16(x) LE_16((uint16_t)(x))
158 #define	cpu_to_le32(x) LE_32((uint32_t)(x))
159 #define	cpu_to_le64(x) LE_64((uint64_t)(x))
160 #define	be16_to_cpu(x) BE_16((uint16_t)(x))
161 #define	be32_to_cpu(x) BE_32((uint32_t)(x))
162 #define	be64_to_cpu(x) BE_64((uint64_t)(x))
163 #define	cpu_to_be16(x) BE_16((uint16_t)(x))
164 #define	cpu_to_be32(x) BE_32((uint32_t)(x))
165 #define	cpu_to_be64(x) BE_64((uint64_t)(x))
166 #define	swab32(x) BSWAP_32(x)
167 
168 typedef uint8_t 	u8;
169 typedef uint16_t 	u16;
170 typedef uint32_t 	u32;
171 typedef uint64_t 	u64;
172 
173 typedef uint8_t		__u8;
174 typedef uint16_t	__u16;
175 typedef uint32_t	__u32;
176 typedef uint64_t	__u64;
177 typedef uint8_t		__be8;
178 typedef uint16_t	__be16;
179 typedef uint32_t	__be32;
180 typedef uint64_t	__be64;
181 
182 typedef uint32_t	__le32;
183 
184 typedef int8_t		s8;
185 typedef int16_t		s16;
186 typedef int32_t		s32;
187 typedef int64_t		s64;
188 
189 typedef boolean_t	bool;
190 #define	true		B_TRUE
191 #define	false		B_FALSE
192 
193 #if defined(__sparc)
194 #define	__BIG_ENDIAN_BITFIELD
195 #define	PAGE_SIZE 8192
196 #define	PAGE_SHIFT 13
197 #define	CACHE_LINE 64
198 #else
199 #define	__LITTLE_ENDIAN_BITFIELD
200 #define	PAGE_SIZE 4096
201 #define	PAGE_SHIFT 12
202 #define	CACHE_LINE 32
203 #endif
204 
205 #define	SUPPORTED_10baseT_Half		(1 << 0)
206 #define	SUPPORTED_10baseT_Full		(1 << 1)
207 #define	SUPPORTED_100baseT_Half		(1 << 2)
208 #define	SUPPORTED_100baseT_Full		(1 << 3)
209 #define	SUPPORTED_1000baseT_Half	(1 << 4)
210 #define	SUPPORTED_1000baseT_Full	(1 << 5)
211 #define	SUPPORTED_Autoneg		(1 << 6)
212 #define	SUPPORTED_TP			(1 << 7)
213 #define	SUPPORTED_AUI			(1 << 8)
214 #define	SUPPORTED_MII			(1 << 9)
215 #define	SUPPORTED_FIBRE			(1 << 10)
216 #define	SUPPORTED_BNC			(1 << 11)
217 #define	SUPPORTED_10000baseT_Full	(1 << 12)
218 #define	SUPPORTED_Pause			(1 << 13)
219 #define	SUPPORTED_Asym_Pause		(1 << 14)
220 
221 #define	ADVERTISED_10baseT_Half		(1 << 0)
222 #define	ADVERTISED_10baseT_Full		(1 << 1)
223 #define	ADVERTISED_100baseT_Half	(1 << 2)
224 #define	ADVERTISED_100baseT_Full	(1 << 3)
225 #define	ADVERTISED_1000baseT_Half	(1 << 4)
226 #define	ADVERTISED_1000baseT_Full	(1 << 5)
227 #define	ADVERTISED_Autoneg		(1 << 6)
228 #define	ADVERTISED_TP			(1 << 7)
229 #define	ADVERTISED_AUI			(1 << 8)
230 #define	ADVERTISED_MII			(1 << 9)
231 #define	ADVERTISED_FIBRE		(1 << 10)
232 #define	ADVERTISED_BNC			(1 << 11)
233 #define	ADVERTISED_10000baseT_Full	(1 << 12)
234 #define	ADVERTISED_Pause		(1 << 13)
235 #define	ADVERTISED_Asym_Pause		(1 << 14)
236 
237 #define	AUTONEG_DISABLE		0
238 #define	AUTONEG_ENABLE		1
239 #define	SPEED_10		10
240 #define	SPEED_100		100
241 #define	SPEED_1000		1000
242 #define	SPEED_10000		10000
243 #define	SPEED_40000		40000
244 #define	DUPLEX_HALF		0
245 #define	DUPLEX_FULL		1
246 
247 #define ETH_ALEN		6
248 int ilog2(long x);
249 unsigned char *strstrip(unsigned char *s);
250 
251 #endif /* __CXGBE_OSDEP_H */
252