Module Name: src
Committed By: christos
Date: Tue Nov 23 04:33:10 UTC 2010
Modified Files:
src/sys/dev/ic: wi.c wivar.h
src/sys/dev/pci: if_wi_pci.c
src/sys/dev/pcmcia: if_wi_pcmcia.c
Log Message:
split if_wi
To generate a diff of this commit:
cvs rdiff -u -r1.233 -r1.234 src/sys/dev/ic/wi.c
cvs rdiff -u -r1.63 -r1.64 src/sys/dev/ic/wivar.h
cvs rdiff -u -r1.50 -r1.51 src/sys/dev/pci/if_wi_pci.c
cvs rdiff -u -r1.85 -r1.86 src/sys/dev/pcmcia/if_wi_pcmcia.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/ic/wi.c
diff -u src/sys/dev/ic/wi.c:1.233 src/sys/dev/ic/wi.c:1.234
--- src/sys/dev/ic/wi.c:1.233 Mon Apr 5 03:19:37 2010
+++ src/sys/dev/ic/wi.c Mon Nov 22 23:33:09 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: wi.c,v 1.233 2010/04/05 07:19:37 joerg Exp $ */
+/* $NetBSD: wi.c,v 1.234 2010/11/23 04:33:09 christos Exp $ */
/*-
* Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -99,7 +99,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wi.c,v 1.233 2010/04/05 07:19:37 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wi.c,v 1.234 2010/11/23 04:33:09 christos Exp $");
#define WI_HERMES_AUTOINC_WAR /* Work around data write autoinc bug. */
#define WI_HERMES_STATS_WAR /* Work around stats counter bug. */
@@ -405,7 +405,7 @@
/* Read NIC identification */
wi_read_nicid(sc);
- memcpy(ifp->if_xname, device_xname(&sc->sc_dev), IFNAMSIZ);
+ memcpy(ifp->if_xname, device_xname(sc->sc_dev), IFNAMSIZ);
ifp->if_softc = sc;
ifp->if_start = wi_start;
ifp->if_ioctl = wi_ioctl;
@@ -426,7 +426,7 @@
/* Find available channel */
if (wi_read_xrid(sc, WI_RID_CHANNEL_LIST, &chanavail,
sizeof(chanavail)) != 0) {
- aprint_normal_dev(&sc->sc_dev, "using default channel list\n");
+ aprint_normal_dev(sc->sc_dev, "using default channel list\n");
chanavail = htole16(0x1fff); /* assume 1-13 */
}
for (chan = 16; chan > 0; chan--) {
@@ -445,7 +445,7 @@
ic->ic_ibss_chan = &ic->ic_channels[chan];
}
if (ic->ic_ibss_chan == NULL) {
- aprint_error_dev(&sc->sc_dev, "no available channel\n");
+ aprint_error_dev(sc->sc_dev, "no available channel\n");
return 1;
}
@@ -526,7 +526,7 @@
&ratebuf.rates[0], nrate);
ic->ic_sup_rates[IEEE80211_MODE_11B].rs_nrates = nrate;
} else {
- aprint_error_dev(&sc->sc_dev, "no supported rate list\n");
+ aprint_error_dev(sc->sc_dev, "no supported rate list\n");
return 1;
}
@@ -621,7 +621,7 @@
u_int16_t status;
if (sc->sc_enabled == 0 ||
- !device_is_active(&sc->sc_dev) ||
+ !device_is_active(sc->sc_dev) ||
(ifp->if_flags & IFF_RUNNING) == 0)
return 0;
@@ -730,7 +730,7 @@
DPRINTF(("wi_init: enabled %d\n", sc->sc_enabled));
wasenabled = sc->sc_enabled;
if (!sc->sc_enabled) {
- if ((error = (*sc->sc_enable)(sc)) != 0)
+ if ((error = (*sc->sc_enable)(sc->sc_dev, 1)) != 0)
goto out;
sc->sc_enabled = 1;
} else
@@ -878,7 +878,8 @@
error = wi_alloc_fid(sc, sc->sc_buflen,
&sc->sc_txd[i].d_fid);
if (error) {
- aprint_error_dev(&sc->sc_dev, "tx buffer allocation failed\n");
+ aprint_error_dev(sc->sc_dev,
+ "tx buffer allocation failed\n");
goto out;
}
DPRINTF2(("wi_init: txbuf %d allocated %x\n", i,
@@ -930,7 +931,7 @@
out:
if (error) {
- printf("%s: interface not running\n", device_xname(&sc->sc_dev));
+ printf("%s: interface not running\n", device_xname(sc->sc_dev));
wi_stop(ifp, 0);
}
DPRINTF(("wi_init: return %d\n", error));
@@ -988,8 +989,7 @@
ifp->if_timer = 0;
if (disable) {
- if (sc->sc_disable)
- (*sc->sc_disable)(sc);
+ (*sc->sc_enable)(sc->sc_dev, 0);
sc->sc_enabled = 0;
}
splx(s);
@@ -1191,7 +1191,7 @@
off = sizeof(frmhdr);
if (wi_write_bap(sc, fid, 0, &frmhdr, sizeof(frmhdr)) != 0 ||
wi_mwrite_bap(sc, fid, off, m0, m0->m_pkthdr.len) != 0) {
- aprint_error_dev(&sc->sc_dev, "%s write fid %x failed\n",
+ aprint_error_dev(sc->sc_dev, "%s write fid %x failed\n",
__func__, fid);
ifp->if_oerrors++;
m_freem(m0);
@@ -1204,13 +1204,13 @@
#ifdef DIAGNOSTIC
if (cur != sc->sc_txstart)
printf("%s: ring is desynchronized\n",
- device_xname(&sc->sc_dev));
+ device_xname(sc->sc_dev));
#endif
wi_push_packet(sc);
} else {
#ifdef WI_RING_DEBUG
printf("%s: queue %04x, alloc %d queue %d start %d alloced %d queued %d started %d\n",
- device_xname(&sc->sc_dev), fid,
+ device_xname(sc->sc_dev), fid,
sc->sc_txalloc, sc->sc_txqueue, sc->sc_txstart,
sc->sc_txalloced, sc->sc_txqueued, sc->sc_txstarted);
#endif
@@ -1245,7 +1245,7 @@
break;
}
if (error) {
- aprint_error_dev(&sc->sc_dev, "init failed\n");
+ aprint_error_dev(sc->sc_dev, "init failed\n");
return error;
}
CSR_WRITE_2(sc, WI_INT_EN, 0);
@@ -1297,7 +1297,7 @@
struct ifreq *ifr = (struct ifreq *)data;
int s, error = 0;
- if (!device_is_active(&sc->sc_dev))
+ if (!device_is_active(sc->sc_dev))
return ENXIO;
s = splnet();
@@ -1537,7 +1537,7 @@
/* First read in the frame header */
if (wi_read_bap(sc, fid, 0, &frmhdr, sizeof(frmhdr))) {
- aprint_error_dev(&sc->sc_dev, "%s read fid %x failed\n",
+ aprint_error_dev(sc->sc_dev, "%s read fid %x failed\n",
__func__, fid);
ifp->if_ierrors++;
return;
@@ -1655,7 +1655,7 @@
fid = CSR_READ_2(sc, WI_TX_CMP_FID);
/* Read in the frame header */
if (wi_read_bap(sc, fid, 0, &frmhdr, sizeof(frmhdr)) != 0) {
- aprint_error_dev(&sc->sc_dev, "%s read fid %x failed\n",
+ aprint_error_dev(sc->sc_dev, "%s read fid %x failed\n",
__func__, fid);
wi_rssdescs_reset(ic, &sc->sc_rssd, &sc->sc_rssdfree,
&sc->sc_txpending);
@@ -1663,8 +1663,8 @@
}
if (frmhdr.wi_tx_idx >= WI_NTXRSS) {
- printf("%s: %s bad idx %02x\n",
- device_xname(&sc->sc_dev), __func__, frmhdr.wi_tx_idx);
+ aprint_error_dev(sc->sc_dev, "%s bad idx %02x\n",
+ __func__, frmhdr.wi_tx_idx);
wi_rssdescs_reset(ic, &sc->sc_rssd, &sc->sc_rssdfree,
&sc->sc_txpending);
goto out;
@@ -1678,7 +1678,7 @@
* as an output error.
*/
if (ppsratecheck(&lasttxerror, &curtxeps, wi_txerate)) {
- aprint_error_dev(&sc->sc_dev, "tx failed");
+ aprint_error_dev(sc->sc_dev, "tx failed");
if (status & WI_TXSTAT_RET_ERR)
printf(", retry limit exceeded");
if (status & WI_TXSTAT_AGED_ERR)
@@ -1703,13 +1703,13 @@
id->id_node = NULL;
if (ni == NULL) {
- aprint_error_dev(&sc->sc_dev, "%s null node, rssdesc %02x\n",
+ aprint_error_dev(sc->sc_dev, "%s null node, rssdesc %02x\n",
__func__, frmhdr.wi_tx_idx);
goto out;
}
if (sc->sc_txpending[id->id_rateidx]-- == 0) {
- aprint_error_dev(&sc->sc_dev, "%s txpending[%i] wraparound",
+ aprint_error_dev(sc->sc_dev, "%s txpending[%i] wraparound",
__func__, id->id_rateidx);
sc->sc_txpending[id->id_rateidx] = 0;
}
@@ -1731,7 +1731,7 @@
#ifdef DIAGNOSTIC
if (sc->sc_txstarted == 0) {
printf("%s: spurious alloc %x != %x, alloc %d queue %d start %d alloced %d queued %d started %d\n",
- device_xname(&sc->sc_dev), fid, sc->sc_txd[cur].d_fid, cur,
+ device_xname(sc->sc_dev), fid, sc->sc_txd[cur].d_fid, cur,
sc->sc_txqueue, sc->sc_txstart, sc->sc_txalloced, sc->sc_txqueued, sc->sc_txstarted);
return;
}
@@ -1742,7 +1742,7 @@
sc->sc_txalloc = (cur + 1) % WI_NTXBUF;
#ifdef WI_RING_DEBUG
printf("%s: alloc %04x, alloc %d queue %d start %d alloced %d queued %d started %d\n",
- device_xname(&sc->sc_dev), fid,
+ device_xname(sc->sc_dev), fid,
sc->sc_txalloc, sc->sc_txqueue, sc->sc_txstart,
sc->sc_txalloced, sc->sc_txqueued, sc->sc_txstarted);
#endif
@@ -1768,7 +1768,7 @@
ifp->if_flags &= ~IFF_OACTIVE;
#ifdef WI_RING_DEBUG
printf("%s: cmd , alloc %d queue %d start %d alloced %d queued %d started %d\n",
- device_xname(&sc->sc_dev),
+ device_xname(sc->sc_dev),
sc->sc_txalloc, sc->sc_txqueue, sc->sc_txstart,
sc->sc_txalloced, sc->sc_txqueued, sc->sc_txstarted);
#endif
@@ -1788,7 +1788,7 @@
KASSERT(sc->sc_txcmds == 0);
if (wi_cmd_start(sc, WI_CMD_TX | WI_RECLAIM, fid, 0, 0)) {
- aprint_error_dev(&sc->sc_dev, "xmit failed\n");
+ aprint_error_dev(sc->sc_dev, "xmit failed\n");
/* XXX ring might have a hole */
}
@@ -1798,14 +1798,14 @@
++sc->sc_txstarted;
#ifdef DIAGNOSTIC
if (sc->sc_txstarted > WI_NTXBUF)
- aprint_error_dev(&sc->sc_dev, "too many buffers started\n");
+ aprint_error_dev(sc->sc_dev, "too many buffers started\n");
#endif
sc->sc_txstart = (cur + 1) % WI_NTXBUF;
sc->sc_tx_timer = 5;
ifp->if_timer = 1;
#ifdef WI_RING_DEBUG
printf("%s: push %04x, alloc %d queue %d start %d alloced %d queued %d started %d\n",
- device_xname(&sc->sc_dev), fid,
+ device_xname(sc->sc_dev), fid,
sc->sc_txalloc, sc->sc_txqueue, sc->sc_txstart,
sc->sc_txalloced, sc->sc_txqueued, sc->sc_txstarted);
#endif
@@ -1826,7 +1826,7 @@
/* Read in the frame header */
if (wi_read_bap(sc, fid, offsetof(struct wi_frame, wi_tx_swsup2),
&frmhdr.wi_tx_swsup2, 2) != 0) {
- aprint_error_dev(&sc->sc_dev, "%s read fid %x failed\n",
+ aprint_error_dev(sc->sc_dev, "%s read fid %x failed\n",
__func__, fid);
wi_rssdescs_reset(ic, &sc->sc_rssd, &sc->sc_rssdfree,
&sc->sc_txpending);
@@ -1834,7 +1834,7 @@
}
if (frmhdr.wi_tx_idx >= WI_NTXRSS) {
- aprint_error_dev(&sc->sc_dev, "%s bad idx %02x\n",
+ aprint_error_dev(sc->sc_dev, "%s bad idx %02x\n",
__func__, frmhdr.wi_tx_idx);
wi_rssdescs_reset(ic, &sc->sc_rssd, &sc->sc_rssdfree,
&sc->sc_txpending);
@@ -1849,13 +1849,13 @@
id->id_node = NULL;
if (ni == NULL) {
- aprint_error_dev(&sc->sc_dev, "%s null node, rssdesc %02x\n",
+ aprint_error_dev(sc->sc_dev, "%s null node, rssdesc %02x\n",
__func__, frmhdr.wi_tx_idx);
goto out;
}
if (sc->sc_txpending[id->id_rateidx]-- == 0) {
- aprint_error_dev(&sc->sc_dev, "%s txpending[%i] wraparound",
+ aprint_error_dev(sc->sc_dev, "%s txpending[%i] wraparound",
__func__, id->id_rateidx);
sc->sc_txpending[id->id_rateidx] = 0;
}
@@ -1994,7 +1994,7 @@
memset(ver, 0, sizeof(ver));
len = sizeof(ver);
wi_read_rid(sc, WI_RID_CARD_ID, ver, &len);
- printf("%s: using ", device_xname(&sc->sc_dev));
+ printf("%s: using ", device_xname(sc->sc_dev));
DPRINTF2(("wi_read_nicid: CARD_ID: %x %x %x %x\n", le16toh(ver[0]), le16toh(ver[1]), le16toh(ver[2]), le16toh(ver[3])));
sc->sc_firmware_type = WI_NOTYPE;
@@ -2047,7 +2047,7 @@
}
}
- printf("\n%s: %s Firmware: ", device_xname(&sc->sc_dev),
+ printf("\n%s: %s Firmware: ", device_xname(sc->sc_dev),
sc->sc_firmware_type == WI_LUCENT ? "Lucent" :
(sc->sc_firmware_type == WI_SYMBOL ? "Symbol" : "Intersil"));
if (sc->sc_firmware_type != WI_LUCENT) /* XXX */
@@ -2632,7 +2632,7 @@
DELAY(1000); /* 1 m sec */
}
if (i == 0) {
- aprint_error_dev(&sc->sc_dev, "wi_cmd: busy bit won't clear.\n");
+ aprint_error_dev(sc->sc_dev, "wi_cmd: busy bit won't clear.\n");
return(ETIMEDOUT);
}
#ifdef WI_HISTOGRAM
@@ -2643,7 +2643,7 @@
if (++hist1count == 1000) {
hist1count = 0;
printf("%s: hist1: %d %d %d %d %d %d %d %d %d %d %d\n",
- device_xname(&sc->sc_dev),
+ device_xname(sc->sc_dev),
hist1[0], hist1[1], hist1[2], hist1[3], hist1[4],
hist1[5], hist1[6], hist1[7], hist1[8], hist1[9],
hist1[10]);
@@ -2730,7 +2730,7 @@
if (++hist2count == 1000) {
hist2count = 0;
printf("%s: hist2: %d %d %d %d %d %d %d %d %d %d %d\n",
- device_xname(&sc->sc_dev),
+ device_xname(sc->sc_dev),
hist2[0], hist2[1], hist2[2], hist2[3], hist2[4],
hist2[5], hist2[6], hist2[7], hist2[8], hist2[9],
hist2[10]);
@@ -2740,7 +2740,8 @@
status = CSR_READ_2(sc, WI_STATUS);
if (i == WI_TIMEOUT) {
- aprint_error_dev(&sc->sc_dev, "command timed out, cmd=0x%x, arg=0x%x\n",
+ aprint_error_dev(sc->sc_dev,
+ "command timed out, cmd=0x%x, arg=0x%x\n",
cmd, val0);
return ETIMEDOUT;
}
@@ -2748,7 +2749,8 @@
CSR_WRITE_2(sc, WI_EVENT_ACK, WI_EV_CMD);
if (status & WI_STAT_CMD_RESULT) {
- aprint_error_dev(&sc->sc_dev, "command failed, cmd=0x%x, arg=0x%x\n",
+ aprint_error_dev(sc->sc_dev,
+ "command failed, cmd=0x%x, arg=0x%x\n",
cmd, val0);
return EIO;
}
@@ -2772,7 +2774,8 @@
if ((status & WI_OFF_BUSY) == 0)
break;
if (i == WI_TIMEOUT) {
- aprint_error_dev(&sc->sc_dev, "timeout in wi_seek to %x/%x\n",
+ aprint_error_dev(sc->sc_dev,
+ "timeout in wi_seek to %x/%x\n",
id, off);
sc->sc_bap_off = WI_OFF_ERR; /* invalidate */
return ETIMEDOUT;
@@ -2789,7 +2792,7 @@
if (++hist4count == 2500) {
hist4count = 0;
printf("%s: hist4: %d %d %d %d %d %d %d %d %d %d %d\n",
- device_xname(&sc->sc_dev),
+ device_xname(sc->sc_dev),
hist4[0], hist4[1], hist4[2], hist4[3], hist4[4],
hist4[5], hist4[6], hist4[7], hist4[8], hist4[9],
hist4[10]);
@@ -2797,7 +2800,7 @@
#endif
if (status & WI_OFF_ERR) {
printf("%s: failed in wi_seek to %x/%x\n",
- device_xname(&sc->sc_dev), id, off);
+ device_xname(sc->sc_dev), id, off);
sc->sc_bap_off = WI_OFF_ERR; /* invalidate */
return EIO;
}
@@ -2863,7 +2866,8 @@
sc->sc_bap_off = WI_OFF_ERR; /* invalidate */
if (CSR_READ_2(sc, WI_DATA0) != 0x1234 ||
CSR_READ_2(sc, WI_DATA0) != 0x5678) {
- aprint_error_dev(&sc->sc_dev, "detect auto increment bug, try again\n");
+ aprint_error_dev(sc->sc_dev,
+ "detect auto increment bug, try again\n");
goto again;
}
}
@@ -2904,7 +2908,7 @@
int i;
if (wi_cmd(sc, WI_CMD_ALLOC_MEM, len, 0, 0)) {
- aprint_error_dev(&sc->sc_dev, "failed to allocate %d bytes on NIC\n", len);
+ aprint_error_dev(sc->sc_dev, "failed to allocate %d bytes on NIC\n", len);
return ENOMEM;
}
@@ -2914,7 +2918,7 @@
DELAY(1);
}
if (i == WI_TIMEOUT) {
- aprint_error_dev(&sc->sc_dev, "timeout in alloc\n");
+ aprint_error_dev(sc->sc_dev, "timeout in alloc\n");
return ETIMEDOUT;
}
*idp = CSR_READ_2(sc, WI_ALLOC_FID);
@@ -2940,13 +2944,14 @@
if (le16toh(ltbuf[0]) == 0)
return EOPNOTSUPP;
if (le16toh(ltbuf[1]) != rid) {
- aprint_error_dev(&sc->sc_dev, "record read mismatch, rid=%x, got=%x\n",
+ aprint_error_dev(sc->sc_dev,
+ "record read mismatch, rid=%x, got=%x\n",
rid, le16toh(ltbuf[1]));
return EIO;
}
len = (le16toh(ltbuf[0]) - 1) * 2; /* already got rid */
if (*buflenp < len) {
- aprint_error_dev(&sc->sc_dev, "record buffer is too small, "
+ aprint_error_dev(sc->sc_dev, "record buffer is too small, "
"rid=%x, size=%d, len=%d\n",
rid, *buflenp, len);
return ENOSPC;
@@ -3067,8 +3072,8 @@
IEEE80211_ADDR_COPY(ni->ni_macaddr, &bssid);
wi_read_xrid(sc, WI_RID_CURRENT_CHAN, &val, sizeof(val));
if (!isset(ic->ic_chan_avail, le16toh(val)))
- panic("%s: invalid channel %d\n", device_xname(&sc->sc_dev),
- le16toh(val));
+ panic("%s: invalid channel %d\n",
+ device_xname(sc->sc_dev), le16toh(val));
ni->ni_chan = &ic->ic_channels[le16toh(val)];
if (ic->ic_opmode == IEEE80211_M_HOSTAP) {
@@ -3183,7 +3188,8 @@
szbuf = sizeof(struct wi_scan_data);
break;
default:
- aprint_error_dev(&sc->sc_dev, "wi_scan_result: unknown firmware type %u\n",
+ aprint_error_dev(sc->sc_dev,
+ "wi_scan_result: unknown firmware type %u\n",
sc->sc_firmware_type);
naps = 0;
goto done;
Index: src/sys/dev/ic/wivar.h
diff -u src/sys/dev/ic/wivar.h:1.63 src/sys/dev/ic/wivar.h:1.64
--- src/sys/dev/ic/wivar.h:1.63 Sun Jan 17 14:45:06 2010
+++ src/sys/dev/ic/wivar.h Mon Nov 22 23:33:09 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: wivar.h,v 1.63 2010/01/17 19:45:06 pooka Exp $ */
+/* $NetBSD: wivar.h,v 1.64 2010/11/23 04:33:09 christos Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
@@ -74,13 +74,12 @@
* Oslo IETF plenary meeting.
*/
struct wi_softc {
- struct device sc_dev;
+ device_t sc_dev;
struct ethercom sc_ec;
struct ieee80211com sc_ic;
u_int32_t sc_ic_flags; /* backup of ic->ic_flags */
void *sc_ih; /* interrupt handler */
- int (*sc_enable)(struct wi_softc *);
- void (*sc_disable)(struct wi_softc *);
+ int (*sc_enable)(device_t, int);
void (*sc_reset)(struct wi_softc *);
int (*sc_newstate)(struct ieee80211com *,
Index: src/sys/dev/pci/if_wi_pci.c
diff -u src/sys/dev/pci/if_wi_pci.c:1.50 src/sys/dev/pci/if_wi_pci.c:1.51
--- src/sys/dev/pci/if_wi_pci.c:1.50 Thu Nov 26 10:17:10 2009
+++ src/sys/dev/pci/if_wi_pci.c Mon Nov 22 23:33:09 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: if_wi_pci.c,v 1.50 2009/11/26 15:17:10 njoly Exp $ */
+/* $NetBSD: if_wi_pci.c,v 1.51 2010/11/23 04:33:09 christos Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wi_pci.c,v 1.50 2009/11/26 15:17:10 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wi_pci.c,v 1.51 2010/11/23 04:33:09 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -90,14 +90,13 @@
static int wi_pci_match(device_t, cfdata_t, void *);
static void wi_pci_attach(device_t, device_t, void *);
-static int wi_pci_enable(struct wi_softc *);
-static void wi_pci_disable(struct wi_softc *);
+static int wi_pci_enable(device_t, int);
static void wi_pci_reset(struct wi_softc *);
static const struct wi_pci_product
*wi_pci_lookup(struct pci_attach_args *);
-CFATTACH_DECL(wi_pci, sizeof(struct wi_pci_softc),
+CFATTACH_DECL_NEW(wi_pci, sizeof(struct wi_pci_softc),
wi_pci_match, wi_pci_attach, NULL, NULL);
static const struct wi_pci_product {
@@ -128,31 +127,28 @@
};
static int
-wi_pci_enable(struct wi_softc *sc)
+wi_pci_enable(device_t self, int onoff)
{
- struct wi_pci_softc *psc = (struct wi_pci_softc *)sc;
+ struct wi_pci_softc *psc = device_pivate(self);
+ struct wi_softc *sc = &psc->sc_wi;
- /* establish the interrupt. */
- sc->sc_ih = pci_intr_establish(psc->psc_pc,
- psc->psc_ih, IPL_NET, wi_intr, sc);
- if (sc->sc_ih == NULL) {
- aprint_error_dev(&sc->sc_dev, "couldn't establish interrupt\n");
- return (EIO);
- }
-
- /* reset HFA3842 MAC core */
- if (sc->sc_reset != NULL)
- wi_pci_reset(sc);
-
- return (0);
-}
+ if (onoff) {
+ /* establish the interrupt. */
+ sc->sc_ih = pci_intr_establish(psc->psc_pc,
+ psc->psc_ih, IPL_NET, wi_intr, sc);
+ if (sc->sc_ih == NULL) {
+ aprint_error_dev(sc->sc_dev,
+ "couldn't establish interrupt\n");
+ return EIO;
+ }
-static void
-wi_pci_disable(struct wi_softc *sc)
-{
- struct wi_pci_softc *psc = (struct wi_pci_softc *)sc;
+ /* reset HFA3842 MAC core */
+ if (sc->sc_reset != NULL)
+ wi_pci_reset(sc);
- pci_intr_disestablish(psc->psc_pc, sc->sc_ih);
+ } else
+ pci_intr_disestablish(psc->psc_pc, sc->sc_ih);
+ return 0;
}
static void
@@ -175,14 +171,14 @@
break;
if (i < 0) {
- printf("%s: PCI reset timed out\n", device_xname(&sc->sc_dev));
+ printf("%s: PCI reset timed out\n", device_xname(sc->sc_dev));
} else if (sc->sc_if.if_flags & IFF_DEBUG) {
usecs = (200000 - i) * 10;
secs = usecs / 1000000;
usecs %= 1000000;
printf("%s: PCI reset in %d.%06d seconds\n",
- device_xname(&sc->sc_dev), secs, usecs);
+ device_xname(sc->sc_dev), secs, usecs);
}
return;
@@ -224,6 +220,7 @@
bus_space_tag_t memt, iot, plxt, tmdt;
bus_space_handle_t memh, ioh, plxh, tmdh;
+ sc->sc_dev = self;
psc->psc_pc = pc;
psc->psc_pcitag = pa->pa_tag;
@@ -303,7 +300,6 @@
sc->sc_enabled = 1;
sc->sc_enable = wi_pci_enable;
- sc->sc_disable = wi_pci_disable;
sc->sc_iot = iot;
sc->sc_ioh = ioh;
Index: src/sys/dev/pcmcia/if_wi_pcmcia.c
diff -u src/sys/dev/pcmcia/if_wi_pcmcia.c:1.85 src/sys/dev/pcmcia/if_wi_pcmcia.c:1.86
--- src/sys/dev/pcmcia/if_wi_pcmcia.c:1.85 Sat Sep 5 10:44:59 2009
+++ src/sys/dev/pcmcia/if_wi_pcmcia.c Mon Nov 22 23:33:10 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: if_wi_pcmcia.c,v 1.85 2009/09/05 14:44:59 tsutsui Exp $ */
+/* $NetBSD: if_wi_pcmcia.c,v 1.86 2010/11/23 04:33:10 christos Exp $ */
/*-
* Copyright (c) 2001, 2004 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wi_pcmcia.c,v 1.85 2009/09/05 14:44:59 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wi_pcmcia.c,v 1.86 2010/11/23 04:33:10 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -78,8 +78,7 @@
static int wi_pcmcia_validate_config(struct pcmcia_config_entry *);
static void wi_pcmcia_attach(device_t, device_t, void *);
static int wi_pcmcia_detach(device_t, int);
-static int wi_pcmcia_enable(struct wi_softc *);
-static void wi_pcmcia_disable(struct wi_softc *);
+static int wi_pcmcia_enable(device_t, int);
#if WI_PCMCIA_SPECTRUM24T_FW
/* support to download firmware for symbol CF card */
@@ -98,7 +97,7 @@
#define WI_PCMCIA_ATTACHED 3
};
-CFATTACH_DECL(wi_pcmcia, sizeof(struct wi_pcmcia_softc),
+CFATTACH_DECL_NEW(wi_pcmcia, sizeof(struct wi_pcmcia_softc),
wi_pcmcia_match, wi_pcmcia_attach, wi_pcmcia_detach, wi_activate);
static const struct pcmcia_product wi_pcmcia_products[] = {
@@ -251,8 +250,7 @@
sizeof(wi_pcmcia_products) / sizeof(wi_pcmcia_products[0]);
static int
-wi_pcmcia_match(device_t parent, cfdata_t match,
- void *aux)
+wi_pcmcia_match(device_t parent, cfdata_t match, void *aux)
{
struct pcmcia_attach_args *pa = aux;
@@ -263,51 +261,50 @@
}
static int
-wi_pcmcia_enable(struct wi_softc *sc)
+wi_pcmcia_enable(device_t self, int onoff)
{
- struct wi_pcmcia_softc *psc = (struct wi_pcmcia_softc *)sc;
+ struct wi_pcmcia_softc *psc = device_private(self);
+ struct wi_softc *sc = &psc->sc_wi;
struct pcmcia_function *pf = psc->sc_pf;
int error;
- /* establish the interrupt. */
- sc->sc_ih = pcmcia_intr_establish(pf, IPL_NET, wi_intr, sc);
- if (!sc->sc_ih)
- return (EIO);
-
- error = pcmcia_function_enable(pf);
- if (error) {
- pcmcia_intr_disestablish(pf, sc->sc_ih);
- sc->sc_ih = 0;
- return (EIO);
- }
+ if (onoff) {
+ /* establish the interrupt. */
+ sc->sc_ih = pcmcia_intr_establish(pf, IPL_NET, wi_intr, sc);
+ if (!sc->sc_ih)
+ return EIO;
+
+ error = pcmcia_function_enable(pf);
+ if (error) {
+ pcmcia_intr_disestablish(pf, sc->sc_ih);
+ sc->sc_ih = 0;
+ return EIO;
+ }
- if (psc->sc_symbol_cf) {
+ if (psc->sc_symbol_cf) {
#if WI_PCMCIA_SPECTRUM24T_FW
- if (wi_pcmcia_load_firm(sc,
- spectrum24t_primsym, sizeof(spectrum24t_primsym),
- spectrum24t_secsym, sizeof(spectrum24t_secsym))) {
- aprint_error_dev(&sc->sc_dev, "couldn't load firmware\n");
- wi_pcmcia_disable(sc);
- return (EIO);
- }
+ if (wi_pcmcia_load_firm(sc,
+ spectrum24t_primsym, sizeof(spectrum24t_primsym),
+ spectrum24t_secsym, sizeof(spectrum24t_secsym))) {
+ aprint_error_dev(sc->sc_dev,
+ "couldn't load firmware\n");
+ wi_pcmcia_enable(self, 0);
+ return EIO;
+ }
#else
- aprint_error_dev(&sc->sc_dev, "firmware load not configured\n");
- return EIO;
+ aprint_error_dev(sc->sc_dev,
+ "firmware load not configured\n");
+ return EIO;
#endif
+ }
+ DELAY(1000);
+ } else {
+ pcmcia_function_disable(psc->sc_pf);
+ pcmcia_intr_disestablish(psc->sc_pf, sc->sc_ih);
+ sc->sc_ih = 0;
}
- DELAY(1000);
-
- return (0);
-}
-static void
-wi_pcmcia_disable(struct wi_softc *sc)
-{
- struct wi_pcmcia_softc *psc = (struct wi_pcmcia_softc *)sc;
-
- pcmcia_function_disable(psc->sc_pf);
- pcmcia_intr_disestablish(psc->sc_pf, sc->sc_ih);
- sc->sc_ih = 0;
+ return 0;
}
static int
@@ -322,10 +319,9 @@
}
static void
-wi_pcmcia_attach(struct device *parent, device_t self,
- void *aux)
+wi_pcmcia_attach(device_t parent, device_t self, void *aux)
{
- struct wi_pcmcia_softc *psc = (void *)self;
+ struct wi_pcmcia_softc *psc = device_private(self);
struct wi_softc *sc = &psc->sc_wi;
struct pcmcia_attach_args *pa = aux;
struct pcmcia_config_entry *cfe;
@@ -334,6 +330,7 @@
aprint_naive("\n");
+ sc->sc_dev = self;
psc->sc_pf = pa->pf;
error = pcmcia_function_configure(pa->pf, wi_pcmcia_validate_config);
@@ -360,13 +357,12 @@
CSR_READ_2(sc, WI_COR) == WI_COR_IOMODE)
psc->sc_symbol_cf = 1;
- error = wi_pcmcia_enable(sc);
+ error = wi_pcmcia_enable(self, 1);
if (error)
goto fail;
sc->sc_pci = 0;
sc->sc_enable = wi_pcmcia_enable;
- sc->sc_disable = wi_pcmcia_disable;
printf("%s:", device_xname(self));
@@ -381,12 +377,12 @@
else
aprint_error_dev(self, "couldn't establish power handler\n");
- wi_pcmcia_disable(sc);
+ wi_pcmcia_enable(self, 0);
psc->sc_state = WI_PCMCIA_ATTACHED;
return;
fail2:
- wi_pcmcia_disable(sc);
+ wi_pcmcia_enable(self, 0);
fail:
pcmcia_function_unconfigure(pa->pf);
}
@@ -394,7 +390,7 @@
static int
wi_pcmcia_detach(device_t self, int flags)
{
- struct wi_pcmcia_softc *psc = (struct wi_pcmcia_softc *)self;
+ struct wi_pcmcia_softc *psc = device_private(self);
int error;
if (psc->sc_state != WI_PCMCIA_ATTACHED)
@@ -422,7 +418,8 @@
#if WI_PCMCIA_SPECTRUM24T_FW
static int
-wi_pcmcia_load_firm(struct wi_softc *sc, const void *primsym, int primlen, const void *secsym, int seclen)
+wi_pcmcia_load_firm(struct wi_softc *sc, const void *primsym, int primlen,
+ const void *secsym, int seclen)
{
u_int8_t ebuf[256];
int i;
@@ -469,7 +466,8 @@
}
static int
-wi_pcmcia_write_firm(struct wi_softc *sc, const void *buf, int buflen, const void *ebuf, int ebuflen)
+wi_pcmcia_write_firm(struct wi_softc *sc, const void *buf, int buflen,
+ const void *ebuf, int ebuflen)
{
const u_int8_t *p, *ep, *q, *eq;
char *endp;