2 * Copyright (c) 2007 Bruce M. Simpson.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 #ifndef _SIBA_SIBAVAR_H_
30 #define _SIBA_SIBAVAR_H_
35 struct siba_dev_softc;
43 enum siba_device_ivars {
50 SIBA_IVAR_PCI_SUBVENDOR,
51 SIBA_IVAR_PCI_SUBDEVICE,
59 SIBA_IVAR_CC_POWERDELAY,
60 SIBA_IVAR_PCICORE_REVID
63 #define SIBA_ACCESSOR(var, ivar, type) \
64 __BUS_ACCESSOR(siba, var, SIBA, ivar, type)
66 SIBA_ACCESSOR(vendor, VENDOR, uint16_t)
67 SIBA_ACCESSOR(device, DEVICE, uint16_t)
68 SIBA_ACCESSOR(revid, REVID, uint8_t)
69 SIBA_ACCESSOR(core_index, CORE_INDEX, uint8_t)
70 SIBA_ACCESSOR(pci_vendor, PCI_VENDOR, uint16_t)
71 SIBA_ACCESSOR(pci_device, PCI_DEVICE, uint16_t)
72 SIBA_ACCESSOR(pci_subvendor, PCI_SUBVENDOR, uint16_t)
73 SIBA_ACCESSOR(pci_subdevice, PCI_SUBDEVICE, uint16_t)
74 SIBA_ACCESSOR(pci_revid, PCI_REVID, uint8_t)
75 SIBA_ACCESSOR(chipid, CHIPID, uint16_t)
76 SIBA_ACCESSOR(chiprev, CHIPREV, uint16_t)
77 SIBA_ACCESSOR(chippkg, CHIPPKG, uint8_t)
78 SIBA_ACCESSOR(type, TYPE, enum siba_type)
79 SIBA_ACCESSOR(cc_pmufreq, CC_PMUFREQ, uint32_t)
80 SIBA_ACCESSOR(cc_caps, CC_CAPS, uint32_t)
81 SIBA_ACCESSOR(cc_powerdelay, CC_POWERDELAY, uint16_t)
82 SIBA_ACCESSOR(pcicore_revid, PCICORE_REVID, uint8_t)
86 /* XXX just for SPROM1? */
94 SIBA_CCODE_USA_CANADA_ANZ,
97 SIBA_CCODE_JAPAN_HIGH,
102 #define siba_mips_read_2(sc, core, reg) \
103 bus_space_read_2((sc)->siba_mem_bt, (sc)->siba_mem_bh, \
104 (core * SIBA_CORE_LEN) + (reg))
106 #define siba_mips_read_4(sc, core, reg) \
107 bus_space_read_4((sc)->siba_mem_bt, (sc)->siba_mem_bh, \
108 (core * SIBA_CORE_LEN) + (reg))
110 #define siba_mips_write_2(sc, core, reg, val) \
111 bus_space_write_2((sc)->siba_mem_bt, (sc)->siba_mem_bh, \
112 (core * SIBA_CORE_LEN) + (reg), (val))
114 #define siba_mips_write_4(sc, core, reg, val) \
115 bus_space_write_4((sc)->siba_mem_bt, (sc)->siba_mem_bh, \
116 (core * SIBA_CORE_LEN) + (reg), (val))
118 #define SIBA_READ_4(siba, reg) \
119 bus_space_read_4((siba)->siba_mem_bt, (siba)->siba_mem_bh, (reg))
120 #define SIBA_READ_2(siba, reg) \
121 bus_space_read_2((siba)->siba_mem_bt, (siba)->siba_mem_bh, (reg))
122 #define SIBA_READ_MULTI_1(siba, reg, addr, count) \
123 bus_space_read_multi_1((siba)->siba_mem_bt, (siba)->siba_mem_bh,\
124 (reg), (addr), (count))
125 #define SIBA_READ_MULTI_2(siba, reg, addr, count) \
126 bus_space_read_multi_2((siba)->siba_mem_bt, (siba)->siba_mem_bh,\
127 (reg), (addr), (count))
128 #define SIBA_READ_MULTI_4(siba, reg, addr, count) \
129 bus_space_read_multi_4((siba)->siba_mem_bt, (siba)->siba_mem_bh,\
130 (reg), (addr), (count))
132 #define SIBA_WRITE_4(siba, reg, val) \
133 bus_space_write_4((siba)->siba_mem_bt, (siba)->siba_mem_bh, \
135 #define SIBA_WRITE_2(siba, reg, val) \
136 bus_space_write_2((siba)->siba_mem_bt, (siba)->siba_mem_bh, \
138 #define SIBA_WRITE_MULTI_1(siba, reg, addr, count) \
139 bus_space_write_multi_1((siba)->siba_mem_bt, (siba)->siba_mem_bh,\
140 (reg), (addr), (count))
141 #define SIBA_WRITE_MULTI_2(siba, reg, addr, count) \
142 bus_space_write_multi_2((siba)->siba_mem_bt, (siba)->siba_mem_bh,\
143 (reg), (addr), (count))
144 #define SIBA_WRITE_MULTI_4(siba, reg, addr, count) \
145 bus_space_write_multi_4((siba)->siba_mem_bt, (siba)->siba_mem_bh,\
146 (reg), (addr), (count))
148 #define SIBA_BARRIER(siba, flags) \
149 bus_space_barrier((siba)->siba_mem_bt, (siba)->siba_mem_bh, (0),\
152 #define SIBA_SETBITS_4(siba, reg, bits) \
153 SIBA_WRITE_4((siba), (reg), SIBA_READ_4((siba), (reg)) | (bits))
154 #define SIBA_SETBITS_2(siba, reg, bits) \
155 SIBA_WRITE_2((siba), (reg), SIBA_READ_2((siba), (reg)) | (bits))
157 #define SIBA_FILT_SETBITS_4(siba, reg, filt, bits) \
158 SIBA_WRITE_4((siba), (reg), (SIBA_READ_4((siba), \
159 (reg)) & (filt)) | (bits))
160 #define SIBA_FILT_SETBITS_2(siba, reg, filt, bits) \
161 SIBA_WRITE_2((siba), (reg), (SIBA_READ_2((siba), \
162 (reg)) & (filt)) | (bits))
164 #define SIBA_CLRBITS_4(siba, reg, bits) \
165 SIBA_WRITE_4((siba), (reg), SIBA_READ_4((siba), (reg)) & ~(bits))
166 #define SIBA_CLRBITS_2(siba, reg, bits) \
167 SIBA_WRITE_2((siba), (reg), SIBA_READ_2((siba), (reg)) & ~(bits))
169 #define SIBA_CC_READ32(scc, offset) \
170 siba_read_4_sub((scc)->scc_dev, offset)
171 #define SIBA_CC_WRITE32(scc, offset, val) \
172 siba_write_4_sub((scc)->scc_dev, offset, val)
173 #define SIBA_CC_MASK32(scc, offset, mask) \
174 SIBA_CC_WRITE32(scc, offset, SIBA_CC_READ32(scc, offset) & (mask))
175 #define SIBA_CC_SET32(scc, offset, set) \
176 SIBA_CC_WRITE32(scc, offset, SIBA_CC_READ32(scc, offset) | (set))
177 #define SIBA_CC_MASKSET32(scc, offset, mask, set) \
178 SIBA_CC_WRITE32(scc, offset, \
179 (SIBA_CC_READ32(scc, offset) & (mask)) | (set))
189 SIBA_CC_CLKSRC_CRYSTAL,
190 SIBA_CC_CLKSRC_LOWPW,
193 struct siba_cc_pmu0_plltab {
194 uint16_t freq; /* in kHz.*/
195 uint8_t xf; /* crystal frequency */
200 struct siba_cc_pmu1_plltab {
209 struct siba_cc_pmu_res_updown {
214 #define SIBA_CC_PMU_DEP_SET 1
215 #define SIBA_CC_PMU_DEP_ADD 2
216 #define SIBA_CC_PMU_DEP_REMOVE 3
218 struct siba_cc_pmu_res_depend {
224 enum siba_sprom_vars {
226 SIBA_SPROMVAR_MAC_80211BG,
227 SIBA_SPROMVAR_MAC_ETH,
228 SIBA_SPROMVAR_MAC_80211A,
229 SIBA_SPROMVAR_MII_ETH0,
230 SIBA_SPROMVAR_MII_ETH1,
231 SIBA_SPROMVAR_MDIO_ETH0,
232 SIBA_SPROMVAR_MDIO_ETH1,
236 SIBA_SPROMVAR_ANT_BG,
243 SIBA_SPROMVAR_PA1LOB0,
244 SIBA_SPROMVAR_PA1LOB1,
245 SIBA_SPROMVAR_PA1LOB2,
246 SIBA_SPROMVAR_PA1HIB0,
247 SIBA_SPROMVAR_PA1HIB1,
248 SIBA_SPROMVAR_PA1HIB2,
253 SIBA_SPROMVAR_MAXPWR_AL,
254 SIBA_SPROMVAR_MAXPWR_A,
255 SIBA_SPROMVAR_MAXPWR_AH,
256 SIBA_SPROMVAR_MAXPWR_BG,
257 SIBA_SPROMVAR_RXPO2G,
258 SIBA_SPROMVAR_RXPO5G,
259 SIBA_SPROMVAR_TSSI_A,
260 SIBA_SPROMVAR_TSSI_BG,
262 SIBA_SPROMVAR_TRI5GL,
264 SIBA_SPROMVAR_TRI5GH,
265 SIBA_SPROMVAR_RSSISAV2G,
266 SIBA_SPROMVAR_RSSISMC2G,
267 SIBA_SPROMVAR_RSSISMF2G,
269 SIBA_SPROMVAR_RSSISAV5G,
270 SIBA_SPROMVAR_RSSISMC5G,
271 SIBA_SPROMVAR_RSSISMF5G,
273 SIBA_SPROMVAR_CCK2GPO,
274 SIBA_SPROMVAR_OFDM2GPO,
275 SIBA_SPROMVAR_OFDM5GLPO,
276 SIBA_SPROMVAR_OFDM5GPO,
277 SIBA_SPROMVAR_OFDM5GHPO,
280 SIBA_SPROMVAR_BF2_LO,
281 SIBA_SPROMVAR_BF2_HI,
282 SIBA_SPROMVAR_FEM_2GHZ_TSSIPOS,
283 SIBA_SPROMVAR_FEM_2GHZ_EXTPAGAIN,
284 SIBA_SPROMVAR_FEM_2GHZ_PDET_RANGE,
285 SIBA_SPROMVAR_FEM_2GHZ_TR_ISO,
286 SIBA_SPROMVAR_FEM_2GHZ_ANTSWLUT,
287 SIBA_SPROMVAR_FEM_5GHZ_TSSIPOS,
288 SIBA_SPROMVAR_FEM_5GHZ_EXTPAGAIN,
289 SIBA_SPROMVAR_FEM_5GHZ_PDET_RANGE,
290 SIBA_SPROMVAR_FEM_5GHZ_TR_ISO,
291 SIBA_SPROMVAR_FEM_5GHZ_ANTSWLUT,
292 SIBA_SPROMVAR_TXPID_2G_0,
293 SIBA_SPROMVAR_TXPID_2G_1,
294 SIBA_SPROMVAR_TXPID_2G_2,
295 SIBA_SPROMVAR_TXPID_2G_3,
296 SIBA_SPROMVAR_TXPID_5GL_0,
297 SIBA_SPROMVAR_TXPID_5GL_1,
298 SIBA_SPROMVAR_TXPID_5GL_2,
299 SIBA_SPROMVAR_TXPID_5GL_3,
300 SIBA_SPROMVAR_TXPID_5G_0,
301 SIBA_SPROMVAR_TXPID_5G_1,
302 SIBA_SPROMVAR_TXPID_5G_2,
303 SIBA_SPROMVAR_TXPID_5G_3,
304 SIBA_SPROMVAR_TXPID_5GH_0,
305 SIBA_SPROMVAR_TXPID_5GH_1,
306 SIBA_SPROMVAR_TXPID_5GH_2,
307 SIBA_SPROMVAR_TXPID_5GH_3,
308 SIBA_SPROMVAR_STBCPO,
312 int siba_read_sprom(device_t, device_t, int, uintptr_t *);
313 int siba_write_sprom(device_t, device_t, int, uintptr_t);
316 * Generic sprom accessor generation macros for siba(4) drivers
318 #define __SPROM_ACCESSOR(varp, var, ivarp, ivar, type) \
320 static __inline type varp ## _get_ ## var(device_t dev) \
323 siba_read_sprom(device_get_parent(dev), dev, \
324 ivarp ## _SPROMVAR_ ## ivar, &v); \
328 static __inline void varp ## _set_ ## var(device_t dev, type t) \
330 uintptr_t v = (uintptr_t) t; \
331 siba_write_sprom(device_get_parent(dev), dev, \
332 ivarp ## _SPROMVAR_ ## ivar, v); \
335 #define SIBA_SPROM_ACCESSOR(var, ivar, type) \
336 __SPROM_ACCESSOR(siba_sprom, var, SIBA, ivar, type)
338 SIBA_SPROM_ACCESSOR(rev, REV, uint8_t);
339 SIBA_SPROM_ACCESSOR(mac_80211bg, MAC_80211BG, uint8_t *);
340 SIBA_SPROM_ACCESSOR(mac_eth, MAC_ETH, uint8_t *);
341 SIBA_SPROM_ACCESSOR(mac_80211a, MAC_80211A, uint8_t *);
342 SIBA_SPROM_ACCESSOR(mii_eth0, MII_ETH0, uint8_t);
343 SIBA_SPROM_ACCESSOR(mii_eth1, MII_ETH1, uint8_t);
344 SIBA_SPROM_ACCESSOR(mdio_eth0, MDIO_ETH0, uint8_t);
345 SIBA_SPROM_ACCESSOR(mdio_eth1, MDIO_ETH1, uint8_t);
346 SIBA_SPROM_ACCESSOR(brev, BREV, uint8_t);
347 SIBA_SPROM_ACCESSOR(ccode, CCODE, uint8_t);
348 SIBA_SPROM_ACCESSOR(ant_a, ANT_A, uint8_t);
349 SIBA_SPROM_ACCESSOR(ant_bg, ANT_BG, uint8_t);
350 SIBA_SPROM_ACCESSOR(pa0b0, PA0B0, uint16_t);
351 SIBA_SPROM_ACCESSOR(pa0b1, PA0B1, uint16_t);
352 SIBA_SPROM_ACCESSOR(pa0b2, PA0B2, uint16_t);
353 SIBA_SPROM_ACCESSOR(pa1b0, PA1B0, uint16_t);
354 SIBA_SPROM_ACCESSOR(pa1b1, PA1B1, uint16_t);
355 SIBA_SPROM_ACCESSOR(pa1b2, PA1B2, uint16_t);
356 SIBA_SPROM_ACCESSOR(pa1lob0, PA1LOB0, uint16_t);
357 SIBA_SPROM_ACCESSOR(pa1lob1, PA1LOB1, uint16_t);
358 SIBA_SPROM_ACCESSOR(pa1lob2, PA1LOB2, uint16_t);
359 SIBA_SPROM_ACCESSOR(pa1hib0, PA1HIB0, uint16_t);
360 SIBA_SPROM_ACCESSOR(pa1hib1, PA1HIB1, uint16_t);
361 SIBA_SPROM_ACCESSOR(pa1hib2, PA1HIB2, uint16_t);
362 SIBA_SPROM_ACCESSOR(gpio0, GPIO0, uint8_t);
363 SIBA_SPROM_ACCESSOR(gpio1, GPIO1, uint8_t);
364 SIBA_SPROM_ACCESSOR(gpio2, GPIO2, uint8_t);
365 SIBA_SPROM_ACCESSOR(gpio3, GPIO3, uint8_t);
366 SIBA_SPROM_ACCESSOR(maxpwr_al, MAXPWR_AL, uint16_t);
367 SIBA_SPROM_ACCESSOR(maxpwr_a, MAXPWR_A, uint16_t);
368 SIBA_SPROM_ACCESSOR(maxpwr_ah, MAXPWR_AH, uint16_t);
369 SIBA_SPROM_ACCESSOR(maxpwr_bg, MAXPWR_BG, uint16_t);
370 SIBA_SPROM_ACCESSOR(rxpo2g, RXPO2G, uint8_t);
371 SIBA_SPROM_ACCESSOR(rxpo5g, RXPO5G, uint8_t);
372 SIBA_SPROM_ACCESSOR(tssi_a, TSSI_A, uint8_t);
373 SIBA_SPROM_ACCESSOR(tssi_bg, TSSI_BG, uint8_t);
374 SIBA_SPROM_ACCESSOR(tri2g, TRI2G, uint8_t);
375 SIBA_SPROM_ACCESSOR(tri5gl, TRI5GL, uint8_t);
376 SIBA_SPROM_ACCESSOR(tri5g, TRI5G, uint8_t);
377 SIBA_SPROM_ACCESSOR(tri5gh, TRI5GH, uint8_t);
378 SIBA_SPROM_ACCESSOR(rssisav2g, RSSISAV2G, uint8_t);
379 SIBA_SPROM_ACCESSOR(rssismc2g, RSSISMC2G, uint8_t);
380 SIBA_SPROM_ACCESSOR(rssismf2g, RSSISMF2G, uint8_t);
381 SIBA_SPROM_ACCESSOR(bxa2g, BXA2G, uint8_t);
382 SIBA_SPROM_ACCESSOR(rssisav5g, RSSISAV5G, uint8_t);
383 SIBA_SPROM_ACCESSOR(rssismc5g, RSSISMC5G, uint8_t);
384 SIBA_SPROM_ACCESSOR(rssismf5g, RSSISMF5G, uint8_t);
385 SIBA_SPROM_ACCESSOR(bxa5g, BXA5G, uint8_t);
386 SIBA_SPROM_ACCESSOR(cck2gpo, CCK2GPO, uint16_t);
387 SIBA_SPROM_ACCESSOR(ofdm2gpo, OFDM2GPO, uint32_t);
388 SIBA_SPROM_ACCESSOR(ofdm5glpo, OFDM5GLPO, uint32_t);
389 SIBA_SPROM_ACCESSOR(ofdm5gpo, OFDM5GPO, uint32_t);
390 SIBA_SPROM_ACCESSOR(ofdm5ghpo, OFDM5GHPO, uint32_t);
391 SIBA_SPROM_ACCESSOR(bf_lo, BF_LO, uint16_t);
392 SIBA_SPROM_ACCESSOR(bf_hi, BF_HI, uint16_t);
393 SIBA_SPROM_ACCESSOR(bf2_lo, BF2_LO, uint16_t);
394 SIBA_SPROM_ACCESSOR(bf2_hi, BF2_HI, uint16_t);
396 SIBA_SPROM_ACCESSOR(fem_2ghz_tssipos, FEM_2GHZ_TSSIPOS, uint8_t);
397 SIBA_SPROM_ACCESSOR(fem_2ghz_extpa_gain, FEM_2GHZ_EXTPAGAIN, uint8_t);
398 SIBA_SPROM_ACCESSOR(fem_2ghz_pdet_range, FEM_2GHZ_PDET_RANGE, uint8_t);
399 SIBA_SPROM_ACCESSOR(fem_2ghz_tr_iso, FEM_2GHZ_TR_ISO, uint8_t);
400 SIBA_SPROM_ACCESSOR(fem_2ghz_antswlut, FEM_2GHZ_ANTSWLUT, uint8_t);
402 SIBA_SPROM_ACCESSOR(fem_5ghz_tssipos, FEM_5GHZ_TSSIPOS, uint8_t);
403 SIBA_SPROM_ACCESSOR(fem_5ghz_extpa_gain, FEM_5GHZ_EXTPAGAIN, uint8_t);
404 SIBA_SPROM_ACCESSOR(fem_5ghz_pdet_range, FEM_5GHZ_PDET_RANGE, uint8_t);
405 SIBA_SPROM_ACCESSOR(fem_5ghz_tr_iso, FEM_5GHZ_TR_ISO, uint8_t);
406 SIBA_SPROM_ACCESSOR(fem_5ghz_antswlut, FEM_5GHZ_ANTSWLUT, uint8_t);
408 SIBA_SPROM_ACCESSOR(txpid_2g_0, TXPID_2G_0, uint8_t);
409 SIBA_SPROM_ACCESSOR(txpid_2g_1, TXPID_2G_1, uint8_t);
410 SIBA_SPROM_ACCESSOR(txpid_2g_2, TXPID_2G_2, uint8_t);
411 SIBA_SPROM_ACCESSOR(txpid_2g_3, TXPID_2G_3, uint8_t);
412 SIBA_SPROM_ACCESSOR(txpid_5gl_0, TXPID_5GL_0, uint8_t);
413 SIBA_SPROM_ACCESSOR(txpid_5gl_1, TXPID_5GL_1, uint8_t);
414 SIBA_SPROM_ACCESSOR(txpid_5gl_2, TXPID_5GL_2, uint8_t);
415 SIBA_SPROM_ACCESSOR(txpid_5gl_3, TXPID_5GL_3, uint8_t);
416 SIBA_SPROM_ACCESSOR(txpid_5g_0, TXPID_5G_0, uint8_t);
417 SIBA_SPROM_ACCESSOR(txpid_5g_1, TXPID_5G_1, uint8_t);
418 SIBA_SPROM_ACCESSOR(txpid_5g_2, TXPID_5G_2, uint8_t);
419 SIBA_SPROM_ACCESSOR(txpid_5g_3, TXPID_5G_3, uint8_t);
420 SIBA_SPROM_ACCESSOR(txpid_5gh_0, TXPID_5GH_0, uint8_t);
421 SIBA_SPROM_ACCESSOR(txpid_5gh_1, TXPID_5GH_1, uint8_t);
422 SIBA_SPROM_ACCESSOR(txpid_5gh_2, TXPID_5GH_2, uint8_t);
423 SIBA_SPROM_ACCESSOR(txpid_5gh_3, TXPID_5GH_3, uint8_t);
424 SIBA_SPROM_ACCESSOR(stbcpo, STBCPO, uint16_t);
425 SIBA_SPROM_ACCESSOR(cddpo, CDDPO, uint16_t);
427 #undef SIBA_SPROM_ACCESSOR
429 struct siba_sprom_core_pwr_info {
430 uint8_t itssi_2g, itssi_5g;
431 uint8_t maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh;
432 uint8_t pa_2g[4], pa_5gl[4], pa_5g[4], pa_5gh[4];
436 uint8_t rev; /* revision */
437 uint8_t mac_80211bg[6]; /* address for 802.11b/g */
438 uint8_t mac_eth[6]; /* address for Ethernet */
439 uint8_t mac_80211a[6]; /* address for 802.11a */
440 uint8_t mii_eth0; /* MII address for eth0 */
441 uint8_t mii_eth1; /* MII address for eth1 */
442 uint8_t mdio_eth0; /* MDIO for eth0 */
443 uint8_t mdio_eth1; /* MDIO for eth1 */
444 uint8_t brev; /* board revision */
445 uint8_t ccode; /* Country Code */
446 uint8_t ant_a; /* A-PHY antenna */
447 uint8_t ant_bg; /* B/G-PHY antenna */
465 uint16_t maxpwr_a; /* A-PHY Max Power */
467 uint16_t maxpwr_bg; /* BG-PHY Max Power */
470 uint8_t tssi_a; /* Idle TSSI */
471 uint8_t tssi_bg; /* Idle TSSI */
476 uint8_t txpid2g[4]; /* 2GHz TX power index */
477 uint8_t txpid5gl[4]; /* 4.9 - 5.1GHz TX power index */
478 uint8_t txpid5g[4]; /* 5.1 - 5.5GHz TX power index */
479 uint8_t txpid5gh[4]; /* 5.5 - 5.9GHz TX power index */
493 uint16_t bf_lo; /* boardflags */
494 uint16_t bf_hi; /* boardflags */
498 struct siba_sprom_core_pwr_info core_pwr_info[4];
502 int8_t a0, a1, a2, a3;
505 int8_t a0, a1, a2, a3;
507 } again; /* antenna gain */
511 uint8_t tssipos, extpa_gain, pdet_range, tr_iso;
515 uint8_t tssipos, extpa_gain, pdet_range, tr_iso;
522 uint16_t mcs5glpo[8];
523 uint16_t mcs5ghpo[8];
529 #define SIBA_LDO_PAREF 0
530 #define SIBA_LDO_VOLT1 1
531 #define SIBA_LDO_VOLT2 2
532 #define SIBA_LDO_VOLT3 3
535 uint8_t rev; /* PMU rev */
536 uint32_t freq; /* crystal freq in kHz */
540 struct siba_dev_softc *scc_dev;
542 struct siba_cc_pmu scc_pmu;
543 uint16_t scc_powerup_delay;
547 struct siba_dev_softc *spc_dev;
549 uint8_t spc_hostmode;
552 struct siba_bus_ops {
553 uint16_t (*read_2)(struct siba_dev_softc *,
555 uint32_t (*read_4)(struct siba_dev_softc *,
557 void (*write_2)(struct siba_dev_softc *,
559 void (*write_4)(struct siba_dev_softc *,
561 void (*read_multi_1)(struct siba_dev_softc *,
562 void *, size_t, uint16_t);
563 void (*read_multi_2)(struct siba_dev_softc *,
564 void *, size_t, uint16_t);
565 void (*read_multi_4)(struct siba_dev_softc *,
566 void *, size_t, uint16_t);
567 void (*write_multi_1)(struct siba_dev_softc *,
568 const void *, size_t, uint16_t);
569 void (*write_multi_2)(struct siba_dev_softc *,
570 const void *, size_t, uint16_t);
571 void (*write_multi_4)(struct siba_dev_softc *,
572 const void *, size_t, uint16_t);
575 struct siba_dev_softc {
576 struct siba_softc *sd_bus;
577 struct siba_devid sd_id;
578 const struct siba_bus_ops *sd_ops;
583 struct siba_devinfo {
584 struct resource_list sdi_rl;
585 /*devhandle_t sdi_devhandle; XXX*/
586 /*struct rman sdi_intr_rman;*/
588 /* Accessors are needed for ivars below. */
592 uint8_t sdi_idx; /* core index on bus */
593 uint8_t sdi_irq; /* TODO */
598 * common variables which used for siba(4) bus and siba_bwn bridge.
600 device_t siba_dev; /* Device ID */
601 struct resource *siba_mem_res;
602 bus_space_tag_t siba_mem_bt;
603 bus_space_handle_t siba_mem_bh;
604 bus_addr_t siba_maddr;
605 bus_size_t siba_msize;
610 * the following variables are only used for siba_bwn bridge.
613 enum siba_type siba_type;
616 struct siba_dev_softc *siba_curdev; /* only for PCI */
617 struct siba_dev_softc siba_devs[SIBA_MAX_CORES];
620 uint16_t siba_pci_vid;
621 uint16_t siba_pci_did;
622 uint16_t siba_pci_subvid;
623 uint16_t siba_pci_subdid;
624 uint8_t siba_pci_revid;
627 uint16_t siba_chipid; /* for CORE 0 */
628 uint16_t siba_chiprev;
629 uint8_t siba_chippkg;
631 struct siba_cc siba_cc; /* ChipCommon */
632 struct siba_pci siba_pci; /* PCI-core */
633 const struct siba_bus_ops *siba_ops;
635 struct siba_sprom siba_sprom; /* SPROM */
636 uint16_t siba_spromsize; /* in word size */
639 void siba_powerup(device_t, int);
640 int siba_powerdown(device_t);
641 uint16_t siba_read_2(device_t, uint16_t);
642 void siba_write_2(device_t, uint16_t, uint16_t);
643 uint32_t siba_read_4(device_t, uint16_t);
644 void siba_write_4(device_t, uint16_t, uint32_t);
645 void siba_dev_up(device_t, uint32_t);
646 void siba_dev_down(device_t, uint32_t);
647 int siba_dev_isup(device_t);
648 void siba_pcicore_intr(device_t);
649 uint32_t siba_dma_translation(device_t);
650 void siba_read_multi_1(device_t, void *, size_t, uint16_t);
651 void siba_read_multi_2(device_t, void *, size_t, uint16_t);
652 void siba_read_multi_4(device_t, void *, size_t, uint16_t);
653 void siba_write_multi_1(device_t, const void *, size_t, uint16_t);
654 void siba_write_multi_2(device_t, const void *, size_t, uint16_t);
655 void siba_write_multi_4(device_t, const void *, size_t, uint16_t);
656 void siba_barrier(device_t, int);
657 void siba_cc_pmu_set_ldovolt(device_t, int, uint32_t);
658 void siba_cc_pmu_set_ldoparef(device_t, uint8_t);
659 void siba_gpio_set(device_t, uint32_t);
660 uint32_t siba_gpio_get(device_t);
661 void siba_fix_imcfglobug(device_t);
662 int siba_sprom_get_core_power_info(device_t, int,
663 struct siba_sprom_core_pwr_info *);
664 int siba_sprom_get_mcs2gpo(device_t, uint16_t *);
665 int siba_sprom_get_mcs5glpo(device_t, uint16_t *);
666 int siba_sprom_get_mcs5gpo(device_t, uint16_t *);
667 int siba_sprom_get_mcs5ghpo(device_t, uint16_t *);
668 void siba_pmu_spuravoid_pllupdate(device_t, int);
669 void siba_cc_set32(device_t dev, uint32_t, uint32_t);
670 void siba_cc_mask32(device_t dev, uint32_t, uint32_t);
671 uint32_t siba_cc_read32(device_t dev, uint32_t);
672 void siba_cc_write32(device_t dev, uint32_t, uint32_t);
674 #endif /* _SIBA_SIBAVAR_H_ */