Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Apr 2010 00:22:17 +0000 (UTC)
From:      Weongyo Jeong <weongyo@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r206969 - in stable/8/sys/dev: bwn siba
Message-ID:  <201004210022.o3L0MHNg089763@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: weongyo
Date: Wed Apr 21 00:22:16 2010
New Revision: 206969
URL: http://svn.freebsd.org/changeset/base/206969

Log:
  MFC r205003:
    Revert r204992 and just wrap it all in ifdef INVARIANTS to fix the debug
    and non-debug cases
  
  MFC r204992:
    fixes a compile error if INVARIANTS is disabled.
  
    Pointy hat to: me
    Submitted by: Michael Butler <imb at protected-networks dot net>
  
  MFC r204983:
    Fix build breakage introduced in r204922.
  
  MFC r204923:
    uses KOBJMETHOD_END macro to indicate the end of method table.
  
    Submitted by: yongari
  
  MFC r204922:
    o uses bus accessor macros to read values from ivar so no more values
      are referenced directly from ivar pointer.  It's to do like what other
      buses do. [1]
    o changes exported prototypes.  It doesn't use struct siba_* structures
      anymore that instead of it it uses only device_t.
    o removes duplicate code and debug messages.
    o style(9)
  
    Pointed out by:        imp [1]

Modified:
  stable/8/sys/dev/bwn/if_bwn.c
  stable/8/sys/dev/bwn/if_bwnvar.h
  stable/8/sys/dev/siba/siba.c
  stable/8/sys/dev/siba/siba_bwn.c
  stable/8/sys/dev/siba/siba_cc.c   (contents, props changed)
  stable/8/sys/dev/siba/siba_core.c
  stable/8/sys/dev/siba/siba_pcib.c
  stable/8/sys/dev/siba/sibavar.h
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/dev/uath/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/geom/sched/   (props changed)

Modified: stable/8/sys/dev/bwn/if_bwn.c
==============================================================================
--- stable/8/sys/dev/bwn/if_bwn.c	Wed Apr 21 00:15:58 2010	(r206968)
+++ stable/8/sys/dev/bwn/if_bwn.c	Wed Apr 21 00:22:16 2010	(r206969)
@@ -134,7 +134,7 @@ SYSCTL_INT(_hw_bwn, OID_AUTO, wme, CTLFL
 
 static int	bwn_attach_pre(struct bwn_softc *);
 static int	bwn_attach_post(struct bwn_softc *);
-static void	bwn_sprom_bugfixes(struct siba_softc *);
+static void	bwn_sprom_bugfixes(device_t);
 static void	bwn_init(void *);
 static int	bwn_init_locked(struct bwn_softc *);
 static int	bwn_ioctl(struct ifnet *, u_long, caddr_t);
@@ -205,7 +205,6 @@ static void	bwn_stop_locked(struct bwn_s
 static int	bwn_core_init(struct bwn_mac *);
 static void	bwn_core_start(struct bwn_mac *);
 static void	bwn_core_exit(struct bwn_mac *);
-static void	bwn_fix_imcfglobug(struct bwn_mac *);
 static void	bwn_bt_disable(struct bwn_mac *);
 static int	bwn_chip_init(struct bwn_mac *);
 static uint64_t	bwn_hf_read(struct bwn_mac *);
@@ -225,7 +224,6 @@ static int	bwn_fw_loadinitvals(struct bw
 static int	bwn_phy_init(struct bwn_mac *);
 static void	bwn_set_txantenna(struct bwn_mac *, int);
 static void	bwn_set_opmode(struct bwn_mac *);
-static void	bwn_gpio_cleanup(struct bwn_mac *);
 static void	bwn_rate_write(struct bwn_mac *, uint16_t, int);
 static uint8_t	bwn_plcp_getcck(const uint8_t);
 static uint8_t	bwn_plcp_getofdm(const uint8_t);
@@ -910,13 +908,12 @@ static const struct siba_devid bwn_devs[
 static int
 bwn_probe(device_t dev)
 {
-	struct siba_dev_softc *sd = device_get_ivars(dev);
 	int i;
 
 	for (i = 0; i < sizeof(bwn_devs) / sizeof(bwn_devs[0]); i++) {
-		if (sd->sd_id.sd_vendor == bwn_devs[i].sd_vendor &&
-		    sd->sd_id.sd_device == bwn_devs[i].sd_device &&
-		    sd->sd_id.sd_rev == bwn_devs[i].sd_rev)
+		if (siba_get_vendor(dev) == bwn_devs[i].sd_vendor &&
+		    siba_get_device(dev) == bwn_devs[i].sd_device &&
+		    siba_get_revid(dev) == bwn_devs[i].sd_rev)
 			return (BUS_PROBE_DEFAULT);
 	}
 
@@ -928,12 +925,9 @@ bwn_attach(device_t dev)
 {
 	struct bwn_mac *mac;
 	struct bwn_softc *sc = device_get_softc(dev);
-	struct siba_dev_softc *sd = device_get_ivars(dev);
-	struct siba_softc *siba = sd->sd_bus;
 	int error, i, msic, reg;
 
 	sc->sc_dev = dev;
-	sc->sc_sd = sd;
 #ifdef BWN_DEBUG
 	sc->sc_debug = bwn_debug;
 #endif
@@ -942,14 +936,14 @@ bwn_attach(device_t dev)
 		error = bwn_attach_pre(sc);
 		if (error != 0)
 			return (error);
-		bwn_sprom_bugfixes(sd->sd_bus);
+		bwn_sprom_bugfixes(dev);
 		sc->sc_flags |= BWN_FLAG_ATTACHED;
 	}
 
 	if (!TAILQ_EMPTY(&sc->sc_maclist)) {
-		if (siba->siba_pci_did != 0x4313 &&
-		    siba->siba_pci_did != 0x431a &&
-		    siba->siba_pci_did != 0x4321) {
+		if (siba_get_pci_device(dev) != 0x4313 &&
+		    siba_get_pci_device(dev) != 0x431a &&
+		    siba_get_pci_device(dev) != 0x4321) {
 			device_printf(sc->sc_dev,
 			    "skip 802.11 cores\n");
 			return (ENODEV);
@@ -961,7 +955,6 @@ bwn_attach(device_t dev)
 	if (mac == NULL)
 		return (ENOMEM);
 	mac->mac_sc = sc;
-	mac->mac_sd = sd;
 	mac->mac_status = BWN_MAC_STATUS_UNINIT;
 	if (bwn_bfp != 0)
 		mac->mac_flags |= BWN_MAC_FLAG_BADFRAME_PREEMP;
@@ -977,7 +970,7 @@ bwn_attach(device_t dev)
 
 	device_printf(sc->sc_dev, "WLAN (chipid %#x rev %u) "
 	    "PHY (analog %d type %d rev %d) RADIO (manuf %#x ver %#x rev %d)\n",
-	    sd->sd_bus->siba_chipid, sd->sd_id.sd_rev,
+	    siba_get_chipid(sc->sc_dev), siba_get_revid(sc->sc_dev),
 	    mac->mac_phy.analog, mac->mac_phy.type, mac->mac_phy.rev,
 	    mac->mac_phy.rf_manuf, mac->mac_phy.rf_ver,
 	    mac->mac_phy.rf_rev);
@@ -1065,8 +1058,6 @@ bwn_attach_post(struct bwn_softc *sc)
 {
 	struct ieee80211com *ic;
 	struct ifnet *ifp = sc->sc_ifp;
-	struct siba_dev_softc *sd = sc->sc_sd;
-	struct siba_sprom *sprom = &sd->sd_bus->siba_sprom;
 
 	ic = ifp->if_l2com;
 	ic->ic_ifp = ifp;
@@ -1087,8 +1078,9 @@ bwn_attach_post(struct bwn_softc *sc)
 
 	/* call MI attach routine. */
 	ieee80211_ifattach(ic,
-	    bwn_is_valid_ether_addr(sprom->mac_80211a) ? sprom->mac_80211a :
-	    sprom->mac_80211bg);
+	    bwn_is_valid_ether_addr(siba_sprom_get_mac_80211a(sc->sc_dev)) ?
+	    siba_sprom_get_mac_80211a(sc->sc_dev) :
+	    siba_sprom_get_mac_80211bg(sc->sc_dev));
 
 	ic->ic_headroom = sizeof(struct bwn_txhdr);
 
@@ -1219,21 +1211,24 @@ fail:	BWN_LOCK_DESTROY(sc);
 }
 
 static void
-bwn_sprom_bugfixes(struct siba_softc *siba)
+bwn_sprom_bugfixes(device_t dev)
 {
 #define	BWN_ISDEV(_vendor, _device, _subvendor, _subdevice)		\
-	((siba->siba_pci_vid == PCI_VENDOR_##_vendor) &&		\
-	 (siba->siba_pci_did == _device) &&				\
-	 (siba->siba_pci_subvid == PCI_VENDOR_##_subvendor) &&		\
-	 (siba->siba_pci_subdid == _subdevice))
-
-	if (siba->siba_board_vendor == PCI_VENDOR_APPLE &&
-	    siba->siba_board_type == 0x4e && siba->siba_board_rev > 0x40)
-		siba->siba_sprom.bf_lo |= BWN_BFL_PACTRL;
-	if (siba->siba_board_vendor == SIBA_BOARDVENDOR_DELL &&
-	    siba->siba_chipid == 0x4301 && siba->siba_board_rev == 0x74)
-		siba->siba_sprom.bf_lo |= BWN_BFL_BTCOEXIST;
-	if (siba->siba_type == SIBA_TYPE_PCI) {
+	((siba_get_pci_vendor(dev) == PCI_VENDOR_##_vendor) &&		\
+	 (siba_get_pci_device(dev) == _device) &&			\
+	 (siba_get_pci_subvendor(dev) == PCI_VENDOR_##_subvendor) &&	\
+	 (siba_get_pci_subdevice(dev) == _subdevice))
+
+	if (siba_get_pci_subvendor(dev) == PCI_VENDOR_APPLE &&
+	    siba_get_pci_subdevice(dev) == 0x4e &&
+	    siba_get_pci_revid(dev) > 0x40)
+		siba_sprom_set_bf_lo(dev,
+		    siba_sprom_get_bf_lo(dev) | BWN_BFL_PACTRL);
+	if (siba_get_pci_subvendor(dev) == SIBA_BOARDVENDOR_DELL &&
+	    siba_get_chipid(dev) == 0x4301 && siba_get_pci_revid(dev) == 0x74)
+		siba_sprom_set_bf_lo(dev,
+		    siba_sprom_get_bf_lo(dev) | BWN_BFL_BTCOEXIST);
+	if (siba_get_type(dev) == SIBA_TYPE_PCI) {
 		if (BWN_ISDEV(BROADCOM, 0x4318, ASUSTEK, 0x100f) ||
 		    BWN_ISDEV(BROADCOM, 0x4320, DELL, 0x0003) ||
 		    BWN_ISDEV(BROADCOM, 0x4320, HP, 0x12f8) ||
@@ -1241,7 +1236,8 @@ bwn_sprom_bugfixes(struct siba_softc *si
 		    BWN_ISDEV(BROADCOM, 0x4320, LINKSYS, 0x0014) ||
 		    BWN_ISDEV(BROADCOM, 0x4320, LINKSYS, 0x0015) ||
 		    BWN_ISDEV(BROADCOM, 0x4320, MOTOROLA, 0x7010))
-			siba->siba_sprom.bf_lo &= ~BWN_BFL_BTCOEXIST;
+			siba_sprom_set_bf_lo(dev,
+			    siba_sprom_get_bf_lo(dev) & ~BWN_BFL_BTCOEXIST);
 	}
 #undef	BWN_ISDEV
 }
@@ -1434,7 +1430,7 @@ bwn_pio_tx_start(struct bwn_mac *mac, st
 	tq->tq_used += roundup(m->m_pkthdr.len + BWN_HDRSIZE(mac), 4);
 	tq->tq_free--;
 
-	if (mac->mac_sd->sd_id.sd_rev >= 8) {
+	if (siba_get_revid(sc->sc_dev) >= 8) {
 		/*
 		 * XXX please removes m_defrag(9)
 		 */
@@ -1606,17 +1602,15 @@ static int
 bwn_attach_core(struct bwn_mac *mac)
 {
 	struct bwn_softc *sc = mac->mac_sc;
-	struct siba_dev_softc *sd = mac->mac_sd;
-	struct siba_softc *siba = sd->sd_bus;
 	int error, have_bg = 0, have_a = 0;
 	uint32_t high;
 
-	KASSERT(sd->sd_id.sd_rev >= 5,
-	    ("unsupported revision %d", sd->sd_id.sd_rev));
+	KASSERT(siba_get_revid(sc->sc_dev) >= 5,
+	    ("unsupported revision %d", siba_get_revid(sc->sc_dev)));
 
-	siba_powerup(siba, 0);
+	siba_powerup(sc->sc_dev, 0);
 
-	high = siba_read_4(sd, SIBA_TGSHIGH);
+	high = siba_read_4(sc->sc_dev, SIBA_TGSHIGH);
 	bwn_reset_core(mac,
 	    (high & BWN_TGSHIGH_HAVE_2GHZ) ? BWN_TGSLOW_SUPPORT_G : 0);
 	error = bwn_phy_getinfo(mac, high);
@@ -1625,8 +1619,9 @@ bwn_attach_core(struct bwn_mac *mac)
 
 	have_a = (high & BWN_TGSHIGH_HAVE_5GHZ) ? 1 : 0;
 	have_bg = (high & BWN_TGSHIGH_HAVE_2GHZ) ? 1 : 0;
-	if (siba->siba_pci_did != 0x4312 && siba->siba_pci_did != 0x4319 &&
-	    siba->siba_pci_did != 0x4324) {
+	if (siba_get_pci_device(sc->sc_dev) != 0x4312 &&
+	    siba_get_pci_device(sc->sc_dev) != 0x4319 &&
+	    siba_get_pci_device(sc->sc_dev) != 0x4324) {
 		have_a = have_bg = 0;
 		if (mac->mac_phy.type == BWN_PHYTYPE_A)
 			have_a = 1;
@@ -1719,30 +1714,30 @@ bwn_attach_core(struct bwn_mac *mac)
 
 	mac->mac_phy.switch_analog(mac, 0);
 
-	siba_dev_down(sd, 0);
+	siba_dev_down(sc->sc_dev, 0);
 fail:
-	siba_powerdown(siba);
+	siba_powerdown(sc->sc_dev);
 	return (error);
 }
 
 static void
 bwn_reset_core(struct bwn_mac *mac, uint32_t flags)
 {
-	struct siba_dev_softc *sd = mac->mac_sd;
+	struct bwn_softc *sc = mac->mac_sc;
 	uint32_t low, ctl;
 
 	flags |= (BWN_TGSLOW_PHYCLOCK_ENABLE | BWN_TGSLOW_PHYRESET);
 
-	siba_dev_up(sd, flags);
+	siba_dev_up(sc->sc_dev, flags);
 	DELAY(2000);
 
-	low = (siba_read_4(sd, SIBA_TGSLOW) | SIBA_TGSLOW_FGC) &
+	low = (siba_read_4(sc->sc_dev, SIBA_TGSLOW) | SIBA_TGSLOW_FGC) &
 	    ~BWN_TGSLOW_PHYRESET;
-	siba_write_4(sd, SIBA_TGSLOW, low);
-	siba_read_4(sd, SIBA_TGSLOW);
+	siba_write_4(sc->sc_dev, SIBA_TGSLOW, low);
+	siba_read_4(sc->sc_dev, SIBA_TGSLOW);
 	DELAY(1000);
-	siba_write_4(sd, SIBA_TGSLOW, low & ~SIBA_TGSLOW_FGC);
-	siba_read_4(sd, SIBA_TGSLOW);
+	siba_write_4(sc->sc_dev, SIBA_TGSLOW, low & ~SIBA_TGSLOW_FGC);
+	siba_read_4(sc->sc_dev, SIBA_TGSLOW);
 	DELAY(1000);
 
 	if (mac->mac_phy.switch_analog != NULL)
@@ -1759,8 +1754,6 @@ bwn_phy_getinfo(struct bwn_mac *mac, int
 {
 	struct bwn_phy *phy = &mac->mac_phy;
 	struct bwn_softc *sc = mac->mac_sc;
-	struct siba_dev_softc *sd = mac->mac_sd;
-	struct siba_softc *siba = sd->sd_bus;
 	uint32_t tmp;
 
 	/* PHY */
@@ -1779,10 +1772,10 @@ bwn_phy_getinfo(struct bwn_mac *mac, int
 		goto unsupphy;
 
 	/* RADIO */
-	if (siba->siba_chipid == 0x4317) {
-		if (siba->siba_chiprev == 0)
+	if (siba_get_chipid(sc->sc_dev) == 0x4317) {
+		if (siba_get_chiprev(sc->sc_dev) == 0)
 			tmp = 0x3205017f;
-		else if (siba->siba_chiprev == 1)
+		else if (siba_get_chiprev(sc->sc_dev) == 1)
 			tmp = 0x4205017f;
 		else
 			tmp = 0x5205017f;
@@ -1826,7 +1819,6 @@ bwn_chiptest(struct bwn_mac *mac)
 #define	TESTVAL0	0x55aaaa55
 #define	TESTVAL1	0xaa5555aa
 	struct bwn_softc *sc = mac->mac_sc;
-	struct siba_dev_softc *sd = mac->mac_sd;
 	uint32_t v, backup;
 
 	BWN_LOCK(sc);
@@ -1842,7 +1834,8 @@ bwn_chiptest(struct bwn_mac *mac)
 
 	bwn_shm_write_4(mac, BWN_SHARED, 0, backup);
 
-	if ((sd->sd_id.sd_rev >= 3) && (sd->sd_id.sd_rev <= 10)) {
+	if ((siba_get_revid(sc->sc_dev) >= 3) &&
+	    (siba_get_revid(sc->sc_dev) <= 10)) {
 		BWN_WRITE_2(mac, BWN_TSF_CFP_START, 0xaaaa);
 		BWN_WRITE_4(mac, BWN_TSF_CFP_START, 0xccccbbbb);
 		if (BWN_READ_2(mac, BWN_TSF_CFP_START_LOW) != 0xbbbb)
@@ -2070,15 +2063,17 @@ bwn_phy_g_attach(struct bwn_mac *mac)
 	struct bwn_softc *sc = mac->mac_sc;
 	struct bwn_phy *phy = &mac->mac_phy;
 	struct bwn_phy_g *pg = &phy->phy_g;
-	struct siba_dev_softc *sd = mac->mac_sd;
-	struct siba_sprom *sprom = &sd->sd_bus->siba_sprom;
 	unsigned int i;
-	int16_t pab0 = (int16_t)(sprom->pa0b0), pab1 = (int16_t)(sprom->pa0b1),
-	    pab2 = (int16_t)(sprom->pa0b2);
+	int16_t pab0, pab1, pab2;
 	static int8_t bwn_phy_g_tssi2dbm_table[] = BWN_PHY_G_TSSI2DBM_TABLE;
-	int8_t bg = (int8_t)sprom->tssi_bg;
+	int8_t bg;
+
+	bg = (int8_t)siba_sprom_get_tssi_bg(sc->sc_dev);
+	pab0 = (int16_t)siba_sprom_get_pa0b0(sc->sc_dev);
+	pab1 = (int16_t)siba_sprom_get_pa0b1(sc->sc_dev);
+	pab2 = (int16_t)siba_sprom_get_pa0b2(sc->sc_dev);
 
-	if ((sd->sd_bus->siba_chipid == 0x4301) && (phy->rf_ver != 0x2050))
+	if ((siba_get_chipid(sc->sc_dev) == 0x4301) && (phy->rf_ver != 0x2050))
 		device_printf(sc->sc_dev, "not supported anymore\n");
 
 	pg->pg_flags = 0;
@@ -2175,8 +2170,8 @@ bwn_phy_g_prepare_hw(struct bwn_mac *mac
 {
 	struct bwn_phy *phy = &mac->mac_phy;
 	struct bwn_phy_g *pg = &phy->phy_g;
+	struct bwn_softc *sc = mac->mac_sc;
 	struct bwn_txpwr_loctl *lo = &pg->pg_loctl;
-	struct siba_softc *bus = mac->mac_sd->sd_bus;
 	static const struct bwn_rfatt rfatt0[] = {
 		{ 3, 0 }, { 1, 0 }, { 5, 0 }, { 7, 0 },	{ 9, 0 }, { 2, 0 },
 		{ 0, 0 }, { 4, 0 }, { 6, 0 }, { 8, 0 }, { 1, 1 }, { 2, 1 },
@@ -2204,12 +2199,12 @@ bwn_phy_g_prepare_hw(struct bwn_mac *mac
 	/* prepare Radio Attenuation */
 	pg->pg_rfatt.padmix = 0;
 
-	if (bus->siba_board_vendor == SIBA_BOARDVENDOR_BCM &&
-	    bus->siba_board_type == SIBA_BOARD_BCM4309G) {
-		if (bus->siba_board_rev < 0x43) {
+	if (siba_get_pci_subvendor(sc->sc_dev) == SIBA_BOARDVENDOR_BCM &&
+	    siba_get_pci_subdevice(sc->sc_dev) == SIBA_BOARD_BCM4309G) {
+		if (siba_get_pci_revid(sc->sc_dev) < 0x43) {
 			pg->pg_rfatt.att = 2;
 			goto done;
-		} else if (bus->siba_board_rev < 0x51) {
+		} else if (siba_get_pci_revid(sc->sc_dev) < 0x51) {
 			pg->pg_rfatt.att = 3;
 			goto done;
 		}
@@ -2228,24 +2223,25 @@ bwn_phy_g_prepare_hw(struct bwn_mac *mac
 			goto done;
 		case 1:
 			if (phy->type == BWN_PHYTYPE_G) {
-				if (bus->siba_board_vendor ==
+				if (siba_get_pci_subvendor(sc->sc_dev) ==
 				    SIBA_BOARDVENDOR_BCM &&
-				    bus->siba_board_type ==
+				    siba_get_pci_subdevice(sc->sc_dev) ==
 				    SIBA_BOARD_BCM4309G &&
-				    bus->siba_board_rev >= 30)
+				    siba_get_pci_revid(sc->sc_dev) >= 30)
 					pg->pg_rfatt.att = 3;
-				else if (bus->siba_board_vendor ==
+				else if (siba_get_pci_subvendor(sc->sc_dev) ==
 				    SIBA_BOARDVENDOR_BCM &&
-				    bus->siba_board_type == SIBA_BOARD_BU4306)
+				    siba_get_pci_subdevice(sc->sc_dev) ==
+				    SIBA_BOARD_BU4306)
 					pg->pg_rfatt.att = 3;
 				else
 					pg->pg_rfatt.att = 1;
 			} else {
-				if (bus->siba_board_vendor ==
+				if (siba_get_pci_subvendor(sc->sc_dev) ==
 				    SIBA_BOARDVENDOR_BCM &&
-				    bus->siba_board_type ==
+				    siba_get_pci_subdevice(sc->sc_dev) ==
 				    SIBA_BOARD_BCM4309G &&
-				    bus->siba_board_rev >= 30)
+				    siba_get_pci_revid(sc->sc_dev) >= 30)
 					pg->pg_rfatt.att = 7;
 				else
 					pg->pg_rfatt.att = 6;
@@ -2253,17 +2249,18 @@ bwn_phy_g_prepare_hw(struct bwn_mac *mac
 			goto done;
 		case 2:
 			if (phy->type == BWN_PHYTYPE_G) {
-				if (bus->siba_board_vendor ==
+				if (siba_get_pci_subvendor(sc->sc_dev) ==
 				    SIBA_BOARDVENDOR_BCM &&
-				    bus->siba_board_type ==
+				    siba_get_pci_subdevice(sc->sc_dev) ==
 				    SIBA_BOARD_BCM4309G &&
-				    bus->siba_board_rev >= 30)
+				    siba_get_pci_revid(sc->sc_dev) >= 30)
 					pg->pg_rfatt.att = 3;
-				else if (bus->siba_board_vendor ==
+				else if (siba_get_pci_subvendor(sc->sc_dev) ==
 				    SIBA_BOARDVENDOR_BCM &&
-				    bus->siba_board_type == SIBA_BOARD_BU4306)
+				    siba_get_pci_subdevice(sc->sc_dev) ==
+				    SIBA_BOARD_BU4306)
 					pg->pg_rfatt.att = 5;
-				else if (bus->siba_chipid == 0x4320)
+				else if (siba_get_chipid(sc->sc_dev) == 0x4320)
 					pg->pg_rfatt.att = 4;
 				else
 					pg->pg_rfatt.att = 3;
@@ -2547,7 +2544,6 @@ bwn_phy_g_recalc_txpwr(struct bwn_mac *m
 	struct bwn_phy *phy = &mac->mac_phy;
 	struct bwn_phy_g *pg = &phy->phy_g;
 	struct bwn_softc *sc = mac->mac_sc;
-	struct siba_softc *siba = mac->mac_sd->sd_bus;
 	unsigned int tssi;
 	int cck, ofdm;
 	int power;
@@ -2570,12 +2566,13 @@ bwn_phy_g_recalc_txpwr(struct bwn_mac *m
 	pg->pg_avgtssi = tssi;
 	KASSERT(tssi < BWN_TSSI_MAX, ("%s:%d: fail", __func__, __LINE__));
 
-	max = siba->siba_sprom.maxpwr_bg;
-	if (siba->siba_sprom.bf_lo & BWN_BFL_PACTRL)
+	max = siba_sprom_get_maxpwr_bg(sc->sc_dev);
+	if (siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_PACTRL)
 		max -= 3;
 	if (max >= 120) {
 		device_printf(sc->sc_dev, "invalid max TX-power value\n");
-		siba->siba_sprom.maxpwr_bg = max = 80;
+		max = 80;
+		siba_sprom_set_maxpwr_bg(sc->sc_dev, max);
 	}
 
 	power = MIN(MAX((phy->txpower < 0) ? 0 : (phy->txpower << 2), 0), max) -
@@ -2619,9 +2616,8 @@ bwn_phy_g_set_txpwr(struct bwn_mac *mac)
 				txctl = BWN_TXCTL_PA2DB | BWN_TXCTL_TXMIX;
 				rfatt += 2;
 				bbatt += 2;
-			} else if (mac->mac_sd->sd_bus->siba_sprom.
-				   bf_lo &
-				   BWN_BFL_PACTRL) {
+			} else if (siba_sprom_get_bf_lo(sc->sc_dev) &
+			    BWN_BFL_PACTRL) {
 				bbatt += 4 * (rfatt - 2);
 				rfatt = 2;
 			}
@@ -2716,9 +2712,10 @@ static void
 bwn_phy_g_task_60s(struct bwn_mac *mac)
 {
 	struct bwn_phy *phy = &mac->mac_phy;
+	struct bwn_softc *sc = mac->mac_sc;
 	uint8_t old = phy->chan;
 
-	if (!(mac->mac_sd->sd_bus->siba_sprom.bf_lo & BWN_BFL_RSSI))
+	if (!(siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_RSSI))
 		return;
 
 	bwn_mac_suspend(mac);
@@ -3182,20 +3179,15 @@ bwn_wme_clear(struct bwn_softc *sc)
 static int
 bwn_core_init(struct bwn_mac *mac)
 {
-#ifdef BWN_DEBUG
 	struct bwn_softc *sc = mac->mac_sc;
-#endif
-	struct siba_dev_softc *sd = mac->mac_sd;
-	struct siba_softc *siba = sd->sd_bus;
-	struct siba_sprom *sprom = &siba->siba_sprom;
 	uint64_t hf;
 	int error;
 
 	KASSERT(mac->mac_status == BWN_MAC_STATUS_UNINIT,
 	    ("%s:%d: fail", __func__, __LINE__));
 
-	siba_powerup(siba, 0);
-	if (!siba_dev_isup(sd))
+	siba_powerup(sc->sc_dev, 0);
+	if (!siba_dev_isup(sc->sc_dev))
 		bwn_reset_core(mac,
 		    mac->mac_phy.gmode ? BWN_TGSLOW_SUPPORT_G : 0);
 
@@ -3219,9 +3211,9 @@ bwn_core_init(struct bwn_mac *mac)
 
 	mac->mac_phy.init_pre(mac);
 
-	siba_pcicore_intr(&siba->siba_pci, sd);
+	siba_pcicore_intr(sc->sc_dev);
 
-	bwn_fix_imcfglobug(mac);
+	siba_fix_imcfglobug(sc->sc_dev);
 	bwn_bt_disable(mac);
 	if (mac->mac_phy.prepare_hw) {
 		error = mac->mac_phy.prepare_hw(mac);
@@ -3232,11 +3224,11 @@ bwn_core_init(struct bwn_mac *mac)
 	if (error)
 		goto fail0;
 	bwn_shm_write_2(mac, BWN_SHARED, BWN_SHARED_COREREV,
-	    mac->mac_sd->sd_id.sd_rev);
+	    siba_get_revid(sc->sc_dev));
 	hf = bwn_hf_read(mac);
 	if (mac->mac_phy.type == BWN_PHYTYPE_G) {
 		hf |= BWN_HF_GPHY_SYM_WORKAROUND;
-		if (sprom->bf_lo & BWN_BFL_PACTRL)
+		if (siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_PACTRL)
 			hf |= BWN_HF_PAGAINBOOST_OFDM_ON;
 		if (mac->mac_phy.rev == 1)
 			hf |= BWN_HF_GPHY_DC_CANCELFILTER;
@@ -3247,10 +3239,10 @@ bwn_core_init(struct bwn_mac *mac)
 		if (mac->mac_phy.rf_rev == 6)
 			hf |= BWN_HF_4318_TSSI;
 	}
-	if (sprom->bf_lo & BWN_BFL_CRYSTAL_NOSLOW)
+	if (siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_CRYSTAL_NOSLOW)
 		hf |= BWN_HF_SLOWCLOCK_REQ_OFF;
-	if ((siba->siba_type == SIBA_TYPE_PCI) &&
-	    (siba->siba_pci.spc_dev->sd_id.sd_rev <= 10))
+	if ((siba_get_type(sc->sc_dev) == SIBA_TYPE_PCI) &&
+	    (siba_get_pcicore_revid(sc->sc_dev) <= 10))
 		hf |= BWN_HF_PCI_SLOWCLOCK_WORKAROUND;
 	hf &= ~BWN_HF_SKIP_CFP_UPDATE;
 	bwn_hf_write(mac, hf);
@@ -3267,7 +3259,7 @@ bwn_core_init(struct bwn_mac *mac)
 	    (mac->mac_phy.type == BWN_PHYTYPE_B) ? 0x1f : 0xf);
 	bwn_shm_write_2(mac, BWN_SCRATCH, BWN_SCRATCH_CONT_MAX, 0x3ff);
 
-	if (siba->siba_type == SIBA_TYPE_PCMCIA || bwn_usedma == 0)
+	if (siba_get_type(sc->sc_dev) == SIBA_TYPE_PCMCIA || bwn_usedma == 0)
 		bwn_pio_init(mac);
 	else
 		bwn_dma_init(mac);
@@ -3277,7 +3269,8 @@ bwn_core_init(struct bwn_mac *mac)
 	bwn_spu_setdelay(mac, 1);
 	bwn_bt_enable(mac);
 
-	siba_powerup(siba, !(sprom->bf_lo & BWN_BFL_CRYSTAL_NOSLOW));
+	siba_powerup(sc->sc_dev,
+	    !(siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_CRYSTAL_NOSLOW));
 	bwn_set_macaddr(mac);
 	bwn_crypt_init(mac);
 
@@ -3290,7 +3283,7 @@ bwn_core_init(struct bwn_mac *mac)
 fail1:
 	bwn_chip_exit(mac);
 fail0:
-	siba_powerdown(siba);
+	siba_powerdown(sc->sc_dev);
 	KASSERT(mac->mac_status == BWN_MAC_STATUS_UNINIT,
 	    ("%s:%d: fail", __func__, __LINE__));
 	return (error);
@@ -3305,7 +3298,7 @@ bwn_core_start(struct bwn_mac *mac)
 	KASSERT(mac->mac_status == BWN_MAC_STATUS_INITED,
 	    ("%s:%d: fail", __func__, __LINE__));
 
-	if (mac->mac_sd->sd_id.sd_rev < 5)
+	if (siba_get_revid(sc->sc_dev) < 5)
 		return;
 
 	while (1) {
@@ -3325,6 +3318,7 @@ bwn_core_start(struct bwn_mac *mac)
 static void
 bwn_core_exit(struct bwn_mac *mac)
 {
+	struct bwn_softc *sc = mac->mac_sc;
 	uint32_t macctl;
 
 	BWN_ASSERT_LOCKED(mac->mac_sc);
@@ -3345,35 +3339,8 @@ bwn_core_exit(struct bwn_mac *mac)
 	bwn_pio_stop(mac);
 	bwn_chip_exit(mac);
 	mac->mac_phy.switch_analog(mac, 0);
-	siba_dev_down(mac->mac_sd, 0);
-	siba_powerdown(mac->mac_sd->sd_bus);
-}
-
-static void
-bwn_fix_imcfglobug(struct bwn_mac *mac)
-{
-	struct siba_dev_softc *sd = mac->mac_sd;
-	struct siba_softc *siba = sd->sd_bus;
-	uint32_t tmp;
-
-	if (siba->siba_pci.spc_dev == NULL)
-		return;
-	if (siba->siba_pci.spc_dev->sd_id.sd_device != SIBA_DEVID_PCI ||
-	    siba->siba_pci.spc_dev->sd_id.sd_rev > 5)
-		return;
-
-	tmp = siba_read_4(sd, SIBA_IMCFGLO) &
-	    ~(SIBA_IMCFGLO_REQTO | SIBA_IMCFGLO_SERTO);
-	switch (siba->siba_type) {
-	case SIBA_TYPE_PCI:
-	case SIBA_TYPE_PCMCIA:
-		tmp |= 0x32;
-		break;
-	case SIBA_TYPE_SSB:
-		tmp |= 0x53;
-		break;
-	}
-	siba_write_4(sd, SIBA_IMCFGLO, tmp);
+	siba_dev_down(sc->sc_dev, 0);
+	siba_powerdown(sc->sc_dev);
 }
 
 static void
@@ -3388,6 +3355,7 @@ bwn_bt_disable(struct bwn_mac *mac)
 static int
 bwn_chip_init(struct bwn_mac *mac)
 {
+	struct bwn_softc *sc = mac->mac_sc;
 	struct bwn_phy *phy = &mac->mac_phy;
 	uint32_t macctl;
 	int error;
@@ -3410,13 +3378,13 @@ bwn_chip_init(struct bwn_mac *mac)
 
 	error = bwn_fw_loadinitvals(mac);
 	if (error) {
-		bwn_gpio_cleanup(mac);
+		siba_gpio_set(sc->sc_dev, 0);
 		return (error);
 	}
 	phy->switch_analog(mac, 1);
 	error = bwn_phy_init(mac);
 	if (error) {
-		bwn_gpio_cleanup(mac);
+		siba_gpio_set(sc->sc_dev, 0);
 		return (error);
 	}
 	if (phy->set_im)
@@ -3428,7 +3396,7 @@ bwn_chip_init(struct bwn_mac *mac)
 	if (phy->type == BWN_PHYTYPE_B)
 		BWN_WRITE_2(mac, 0x005e, BWN_READ_2(mac, 0x005e) | 0x0004);
 	BWN_WRITE_4(mac, 0x0100, 0x01000000);
-	if (mac->mac_sd->sd_id.sd_rev < 5)
+	if (siba_get_revid(sc->sc_dev) < 5)
 		BWN_WRITE_4(mac, 0x010c, 0x01000000);
 
 	BWN_WRITE_4(mac, BWN_MACCTL,
@@ -3438,7 +3406,7 @@ bwn_chip_init(struct bwn_mac *mac)
 	bwn_shm_write_2(mac, BWN_SHARED, 0x0074, 0x0000);
 
 	bwn_set_opmode(mac);
-	if (mac->mac_sd->sd_id.sd_rev < 3) {
+	if (siba_get_revid(sc->sc_dev) < 3) {
 		BWN_WRITE_2(mac, 0x060e, 0x0000);
 		BWN_WRITE_2(mac, 0x0610, 0x8000);
 		BWN_WRITE_2(mac, 0x0604, 0x0000);
@@ -3454,10 +3422,9 @@ bwn_chip_init(struct bwn_mac *mac)
 	BWN_WRITE_4(mac, BWN_DMA3_INTR_MASK, 0x0001dc00);
 	BWN_WRITE_4(mac, BWN_DMA4_INTR_MASK, 0x0000dc00);
 	BWN_WRITE_4(mac, BWN_DMA5_INTR_MASK, 0x0000dc00);
-	siba_write_4(mac->mac_sd, SIBA_TGSLOW,
-	    siba_read_4(mac->mac_sd, SIBA_TGSLOW) | 0x00100000);
-	BWN_WRITE_2(mac, BWN_POWERUP_DELAY,
-	    mac->mac_sd->sd_bus->siba_cc.scc_powerup_delay);
+	siba_write_4(sc->sc_dev, SIBA_TGSLOW,
+	    siba_read_4(sc->sc_dev, SIBA_TGSLOW) | 0x00100000);
+	BWN_WRITE_2(mac, BWN_POWERUP_DELAY, siba_get_cc_powerdelay(sc->sc_dev));
 	return (error);
 }
 
@@ -3619,13 +3586,14 @@ bwn_pio_set_txqueue(struct bwn_mac *mac,
     int index)
 {
 	struct bwn_pio_txpkt *tp;
+	struct bwn_softc *sc = mac->mac_sc;
 	unsigned int i;
 
 	tq->tq_base = bwn_pio_idx2base(mac, index) + BWN_PIO_TXQOFFSET(mac);
 	tq->tq_index = index;
 
 	tq->tq_free = BWN_PIO_MAX_TXPACKETS;
-	if (mac->mac_sd->sd_id.sd_rev >= 8)
+	if (siba_get_revid(sc->sc_dev) >= 8)
 		tq->tq_size = 1920;
 	else {
 		tq->tq_size = bwn_pio_read_2(mac, tq, BWN_PIO_TXQBUFSIZE);
@@ -3664,7 +3632,7 @@ bwn_pio_idx2base(struct bwn_mac *mac, in
 		BWN_PIO11_BASE5,
 	};
 
-	if (mac->mac_sd->sd_id.sd_rev >= 11) {
+	if (siba_get_revid(sc->sc_dev) >= 11) {
 		if (index >= N(bases_rev11))
 			device_printf(sc->sc_dev, "%s: warning\n", __func__);
 		return (bases_rev11[index]);
@@ -3678,9 +3646,10 @@ static void
 bwn_pio_setupqueue_rx(struct bwn_mac *mac, struct bwn_pio_rxqueue *prq,
     int index)
 {
+	struct bwn_softc *sc = mac->mac_sc;
 
 	prq->prq_mac = mac;
-	prq->prq_rev = mac->mac_sd->sd_id.sd_rev;
+	prq->prq_rev = siba_get_revid(sc->sc_dev);
 	prq->prq_base = bwn_pio_idx2base(mac, index) + BWN_PIO_RXQOFFSET(mac);
 	bwn_dma_rxdirectfifo(mac, index, 1);
 }
@@ -4027,6 +3996,7 @@ bwn_dma_32_setdesc(struct bwn_dma_ring *
     int start, int end, int irq)
 {
 	struct bwn_dmadesc32 *descbase = dr->dr_ring_descbase;
+	struct bwn_softc *sc = dr->dr_mac->mac_sc;
 	uint32_t addr, addrext, ctl;
 	int slot;
 
@@ -4036,7 +4006,7 @@ bwn_dma_32_setdesc(struct bwn_dma_ring *
 
 	addr = (uint32_t) (dmaaddr & ~SIBA_DMA_TRANSLATION_MASK);
 	addrext = (uint32_t) (dmaaddr & SIBA_DMA_TRANSLATION_MASK) >> 30;
-	addr |= siba_dma_translation(dr->dr_mac->mac_sd);
+	addr |= siba_dma_translation(sc->sc_dev);
 	ctl = bufsize & BWN_DMA32_DCTL_BYTECNT;
 	if (slot == dr->dr_numslots - 1)
 		ctl |= BWN_DMA32_DCTL_DTABLEEND;
@@ -4115,6 +4085,7 @@ bwn_dma_64_setdesc(struct bwn_dma_ring *
     int start, int end, int irq)
 {
 	struct bwn_dmadesc64 *descbase = dr->dr_ring_descbase;
+	struct bwn_softc *sc = dr->dr_mac->mac_sc;
 	int slot;
 	uint32_t ctl0 = 0, ctl1 = 0;
 	uint32_t addrlo, addrhi;
@@ -4128,7 +4099,7 @@ bwn_dma_64_setdesc(struct bwn_dma_ring *
 	addrhi = (((uint64_t) dmaaddr >> 32) & ~SIBA_DMA_TRANSLATION_MASK);
 	addrext = (((uint64_t) dmaaddr >> 32) & SIBA_DMA_TRANSLATION_MASK) >>
 	    30;
-	addrhi |= (siba_dma_translation(dr->dr_mac->mac_sd) << 1);
+	addrhi |= (siba_dma_translation(sc->sc_dev) << 1);
 	if (slot == dr->dr_numslots - 1)
 		ctl0 |= BWN_DMA64_DCTL0_DTABLEEND;
 	if (start)
@@ -4238,9 +4209,10 @@ bwn_dma_allocringmemory(struct bwn_dma_r
 static void
 bwn_dma_setup(struct bwn_dma_ring *dr)
 {
+	struct bwn_softc *sc = dr->dr_mac->mac_sc;
 	uint64_t ring64;
 	uint32_t addrext, ring32, value;
-	uint32_t trans = siba_dma_translation(dr->dr_mac->mac_sd);
+	uint32_t trans = siba_dma_translation(sc->sc_dev);
 
 	if (dr->dr_tx) {
 		dr->dr_curslot = -1;
@@ -4536,18 +4508,18 @@ bwn_spu_setdelay(struct bwn_mac *mac, in
 static void
 bwn_bt_enable(struct bwn_mac *mac)
 {
-	struct siba_sprom *sprom = &mac->mac_sd->sd_bus->siba_sprom;
+	struct bwn_softc *sc = mac->mac_sc;
 	uint64_t hf;
 
 	if (bwn_bluetooth == 0)
 		return;
-	if ((sprom->bf_lo & BWN_BFL_BTCOEXIST) == 0)
+	if ((siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_BTCOEXIST) == 0)
 		return;
 	if (mac->mac_phy.type != BWN_PHYTYPE_B && !mac->mac_phy.gmode)
 		return;
 
 	hf = bwn_hf_read(mac);
-	if (sprom->bf_lo & BWN_BFL_BTCMOD)
+	if (siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_BTCMOD)
 		hf |= BWN_HF_BT_COEXISTALT;
 	else
 		hf |= BWN_HF_BT_COEXIST;
@@ -4584,25 +4556,25 @@ bwn_clear_keys(struct bwn_mac *mac)
 static void
 bwn_crypt_init(struct bwn_mac *mac)
 {
+	struct bwn_softc *sc = mac->mac_sc;
 
-	mac->mac_max_nr_keys = (mac->mac_sd->sd_id.sd_rev >= 5) ? 58 : 20;
+	mac->mac_max_nr_keys = (siba_get_revid(sc->sc_dev) >= 5) ? 58 : 20;
 	KASSERT(mac->mac_max_nr_keys <= N(mac->mac_key),
 	    ("%s:%d: fail", __func__, __LINE__));
 	mac->mac_ktp = bwn_shm_read_2(mac, BWN_SHARED, BWN_SHARED_KEY_TABLEP);
 	mac->mac_ktp *= 2;
-	if (mac->mac_sd->sd_id.sd_rev >= 5) {
-		BWN_WRITE_2(mac, BWN_RCMTA_COUNT,
-		    mac->mac_max_nr_keys - 8);
-	}
+	if (siba_get_revid(sc->sc_dev) >= 5)
+		BWN_WRITE_2(mac, BWN_RCMTA_COUNT, mac->mac_max_nr_keys - 8);
 	bwn_clear_keys(mac);
 }
 
 static void
 bwn_chip_exit(struct bwn_mac *mac)
 {
+	struct bwn_softc *sc = mac->mac_sc;
 
 	bwn_phy_exit(mac);
-	bwn_gpio_cleanup(mac);
+	siba_gpio_set(sc->sc_dev, 0);
 }
 
 static int
@@ -4622,33 +4594,31 @@ bwn_fw_fillinfo(struct bwn_mac *mac)
 static int
 bwn_gpio_init(struct bwn_mac *mac)
 {
-	struct siba_softc *bus = mac->mac_sd->sd_bus;
-	struct siba_dev_softc *sd;
-	uint32_t mask = 0x0000001f, set = 0x0000000f;
+	struct bwn_softc *sc = mac->mac_sc;
+	uint32_t mask = 0x1f, set = 0xf, value;
 
 	BWN_WRITE_4(mac, BWN_MACCTL,
 	    BWN_READ_4(mac, BWN_MACCTL) & ~BWN_MACCTL_GPOUT_MASK);
 	BWN_WRITE_2(mac, BWN_GPIO_MASK,
 	    BWN_READ_2(mac, BWN_GPIO_MASK) | 0x000f);
 
-	if (bus->siba_chipid == 0x4301) {
+	if (siba_get_chipid(sc->sc_dev) == 0x4301) {
 		mask |= 0x0060;
 		set |= 0x0060;
 	}
-	if (bus->siba_sprom.bf_lo & BWN_BFL_PACTRL) {
+	if (siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_PACTRL) {
 		BWN_WRITE_2(mac, BWN_GPIO_MASK,
 		    BWN_READ_2(mac, BWN_GPIO_MASK) | 0x0200);
 		mask |= 0x0200;
 		set |= 0x0200;
 	}
-	if (mac->mac_sd->sd_id.sd_rev >= 2)
+	if (siba_get_revid(sc->sc_dev) >= 2)
 		mask |= 0x0010;
-	sd = (bus->siba_cc.scc_dev != NULL) ? bus->siba_cc.scc_dev :
-	    bus->siba_pci.spc_dev;
-	if (sd == NULL)
+
+	value = siba_gpio_get(sc->sc_dev);
+	if (value == -1)
 		return (0);
-	siba_write_4(sd, BWN_GPIOCTL,
-	    (siba_read_4(sd, BWN_GPIOCTL) & mask) | set);
+	siba_gpio_set(sc->sc_dev, (value & mask) | set);
 
 	return (0);
 }
@@ -4749,15 +4719,15 @@ bwn_set_opmode(struct bwn_mac *mac)
 		ctl &= ~BWN_MACCTL_STA;
 	ctl |= sc->sc_filters;
 
-	if (mac->mac_sd->sd_id.sd_rev <= 4)
+	if (siba_get_revid(sc->sc_dev) <= 4)
 		ctl |= BWN_MACCTL_PROMISC;
 
 	BWN_WRITE_4(mac, BWN_MACCTL, ctl);
 
 	cfp_pretbtt = 2;
 	if ((ctl & BWN_MACCTL_STA) && !(ctl & BWN_MACCTL_HOSTAP)) {
-		if (mac->mac_sd->sd_bus->siba_chipid == 0x4306 &&
-		    mac->mac_sd->sd_bus->siba_chiprev == 3)
+		if (siba_get_chipid(sc->sc_dev) == 0x4306 &&
+		    siba_get_chiprev(sc->sc_dev) == 3)
 			cfp_pretbtt = 100;
 		else
 			cfp_pretbtt = 50;
@@ -4765,19 +4735,6 @@ bwn_set_opmode(struct bwn_mac *mac)
 	BWN_WRITE_2(mac, 0x612, cfp_pretbtt);
 }
 
-static void
-bwn_gpio_cleanup(struct bwn_mac *mac)
-{
-	struct siba_softc *bus = mac->mac_sd->sd_bus;
-	struct siba_dev_softc *gpiodev, *pcidev = NULL;
-
-	pcidev = bus->siba_pci.spc_dev;
-	gpiodev = bus->siba_cc.scc_dev ? bus->siba_cc.scc_dev : pcidev;
-	if (!gpiodev)
-		return;
-	siba_write_4(gpiodev, BWN_GPIOCTL, 0);
-}
-
 static int
 bwn_dma_gettype(struct bwn_mac *mac)
 {
@@ -4810,6 +4767,7 @@ bwn_phy_g_init_sub(struct bwn_mac *mac)
 {
 	struct bwn_phy *phy = &mac->mac_phy;
 	struct bwn_phy_g *pg = &phy->phy_g;
+	struct bwn_softc *sc = mac->mac_sc;
 	uint16_t i, tmp;
 
 	if (phy->rev == 1)
@@ -4872,7 +4830,7 @@ bwn_phy_g_init_sub(struct bwn_mac *mac)
 		BWN_PHY_SETMASK(mac, BWN_PHY_CCK(0x36), 0x0fff,
 		    (pg->pg_loctl.tx_bias << 12));
 	}
-	if (mac->mac_sd->sd_bus->siba_sprom.bf_lo & BWN_BFL_PACTRL)
+	if (siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_PACTRL)
 		BWN_PHY_WRITE(mac, BWN_PHY_CCK(0x2e), 0x8075);
 	else
 		BWN_PHY_WRITE(mac, BWN_PHY_CCK(0x2e), 0x807f);
@@ -4885,7 +4843,7 @@ bwn_phy_g_init_sub(struct bwn_mac *mac)
 		BWN_PHY_WRITE(mac, BWN_PHY_LO_MASK, 0x8078);
 	}
 
-	if (!(mac->mac_sd->sd_bus->siba_sprom.bf_lo & BWN_BFL_RSSI)) {
+	if (!(siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_RSSI)) {
 		for (i = 0; i < 64; i++) {
 			BWN_PHY_WRITE(mac, BWN_PHY_NRSSI_CTRL, i);
 			BWN_PHY_WRITE(mac, BWN_PHY_NRSSI_DATA,
@@ -4904,8 +4862,8 @@ bwn_phy_g_init_sub(struct bwn_mac *mac)
 	if (phy->rf_rev == 8)
 		BWN_PHY_WRITE(mac, BWN_PHY_EXTG(0x05), 0x3230);
 	bwn_phy_hwpctl_init(mac);
-	if ((mac->mac_sd->sd_bus->siba_chipid == 0x4306
-	     && mac->mac_sd->sd_bus->siba_chippkg == 2) || 0) {
+	if ((siba_get_chipid(sc->sc_dev) == 0x4306
+	     && siba_get_chippkg(sc->sc_dev) == 2) || 0) {
 		BWN_PHY_MASK(mac, BWN_PHY_CRS0, 0xbfff);
 		BWN_PHY_MASK(mac, BWN_PHY_OFDM(0xc3), 0x7fff);
 	}
@@ -4923,16 +4881,16 @@ bwn_has_hwpctl(struct bwn_mac *mac)
 static void
 bwn_phy_init_b5(struct bwn_mac *mac)
 {
-	struct siba_softc *bus = mac->mac_sd->sd_bus;
 	struct bwn_phy *phy = &mac->mac_phy;
 	struct bwn_phy_g *pg = &phy->phy_g;
+	struct bwn_softc *sc = mac->mac_sc;
 	uint16_t offset, value;
 	uint8_t old_channel;
 
 	if (phy->analog == 1)
 		BWN_RF_SET(mac, 0x007a, 0x0050);
-	if ((bus->siba_board_vendor != SIBA_BOARDVENDOR_BCM) &&
-	    (bus->siba_board_type != SIBA_BOARD_BU4306)) {
+	if ((siba_get_pci_subvendor(sc->sc_dev) != SIBA_BOARDVENDOR_BCM) &&
+	    (siba_get_pci_subdevice(sc->sc_dev) != SIBA_BOARD_BU4306)) {
 		value = 0x2120;
 		for (offset = 0x00a8; offset < 0x00c7; offset++) {
 			BWN_PHY_WRITE(mac, offset, value);
@@ -5021,6 +4979,7 @@ bwn_loopback_calcgain(struct bwn_mac *ma
 {
 	struct bwn_phy *phy = &mac->mac_phy;
 	struct bwn_phy_g *pg = &phy->phy_g;
+	struct bwn_softc *sc = mac->mac_sc;
 	uint16_t backup_phy[16] = { 0 };
 	uint16_t backup_radio[3];
 	uint16_t backup_bband;
@@ -5099,7 +5058,7 @@ bwn_loopback_calcgain(struct bwn_mac *ma
 	BWN_PHY_SET(mac, BWN_PHY_RFOVER, 0x0100);
 	BWN_PHY_MASK(mac, BWN_PHY_RFOVERVAL, 0xcfff);
 
-	if (mac->mac_sd->sd_bus->siba_sprom.bf_lo & BWN_BFL_EXTLNA) {
+	if (siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_EXTLNA) {
 		if (phy->rev >= 7) {
 			BWN_PHY_SET(mac, BWN_PHY_RFOVER, 0x0800);
 			BWN_PHY_SET(mac, BWN_PHY_RFOVERVAL, 0x8000);
@@ -5399,6 +5358,7 @@ bwn_phy_init_b6(struct bwn_mac *mac)
 {
 	struct bwn_phy *phy = &mac->mac_phy;
 	struct bwn_phy_g *pg = &phy->phy_g;
+	struct bwn_softc *sc = mac->mac_sc;
 	uint16_t offset, val;
 	uint8_t old_channel;
 
@@ -5428,7 +5388,7 @@ bwn_phy_init_b6(struct bwn_mac *mac)
 		BWN_RF_WRITE(mac, 0x5a, 0x88);
 		BWN_RF_WRITE(mac, 0x5b, 0x6b);
 		BWN_RF_WRITE(mac, 0x5c, 0x0f);
-		if (mac->mac_sd->sd_bus->siba_sprom.bf_lo & BWN_BFL_ALTIQ) {
+		if (siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_ALTIQ) {
 			BWN_RF_WRITE(mac, 0x5d, 0xfa);
 			BWN_RF_WRITE(mac, 0x5e, 0xd8);
 		} else {
@@ -5509,6 +5469,7 @@ static void
 bwn_phy_init_a(struct bwn_mac *mac)
 {
 	struct bwn_phy *phy = &mac->mac_phy;
+	struct bwn_softc *sc = mac->mac_sc;
 
 	KASSERT(phy->type == BWN_PHYTYPE_A || phy->type == BWN_PHYTYPE_G,
 	    ("%s:%d: fail", __func__, __LINE__));
@@ -5525,7 +5486,7 @@ bwn_phy_init_a(struct bwn_mac *mac)
 	bwn_wa_init(mac);
 
 	if (phy->type == BWN_PHYTYPE_G &&
-	    (mac->mac_sd->sd_bus->siba_sprom.bf_lo & BWN_BFL_PACTRL))
+	    (siba_sprom_get_bf_lo(sc->sc_dev) & BWN_BFL_PACTRL))
 		BWN_PHY_SETMASK(mac, BWN_PHY_OFDM(0x6e), 0xe000, 0x3cf);
 }
 
@@ -5776,7 +5737,7 @@ static void
 bwn_wa_init(struct bwn_mac *mac)
 {
 	struct bwn_phy *phy = &mac->mac_phy;
-	struct siba_softc *bus = mac->mac_sd->sd_bus;
+	struct bwn_softc *sc = mac->mac_sc;
 
 	KASSERT(phy->type == BWN_PHYTYPE_G, ("%s fail", __func__));
 
@@ -5795,9 +5756,9 @@ bwn_wa_init(struct bwn_mac *mac)
 		KASSERT(0 == 1, ("%s:%d: fail", __func__, __LINE__));
 	}
 
-	if (bus->siba_board_vendor != SIBA_BOARDVENDOR_BCM ||
-	    bus->siba_board_type != SIBA_BOARD_BU4306 ||
-	    bus->siba_board_rev != 0x17) {
+	if (siba_get_pci_subvendor(sc->sc_dev) != SIBA_BOARDVENDOR_BCM ||
+	    siba_get_pci_subdevice(sc->sc_dev) != SIBA_BOARD_BU4306 ||
+	    siba_get_pci_revid(sc->sc_dev) != 0x17) {
 		if (phy->rev < 2) {
 			bwn_ofdmtab_write_2(mac, BWN_OFDMTAB_GAINX_R1, 1,
 			    0x0002);
@@ -5806,7 +5767,8 @@ bwn_wa_init(struct bwn_mac *mac)
 		} else {
 			bwn_ofdmtab_write_2(mac, BWN_OFDMTAB_GAINX, 1, 0x0002);
 			bwn_ofdmtab_write_2(mac, BWN_OFDMTAB_GAINX, 2, 0x0001);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004210022.o3L0MHNg089763>