svn commit: r260064 - head/sys/dev/wpi

Marius Strobl marius at FreeBSD.org
Sun Dec 29 23:47:00 UTC 2013


Author: marius
Date: Sun Dec 29 23:46:59 2013
New Revision: 260064
URL: http://svnweb.freebsd.org/changeset/base/260064

Log:
  - Probe with BUS_PROBE_DEFAULT instead of 0.
  - Nuke code setting PCI_POWERSTATE_D0; pci(4) already does that for type 0
    devices.
  - There's no need to keep track of resource IDs.
  - Quiesce the interrupt before actually detaching.
  - Use DEVMETHOD_END.
  - Use NULL instead of 0 for pointers.
  
  MFC after:	1 week

Modified:
  head/sys/dev/wpi/if_wpi.c
  head/sys/dev/wpi/if_wpivar.h

Modified: head/sys/dev/wpi/if_wpi.c
==============================================================================
--- head/sys/dev/wpi/if_wpi.c	Sun Dec 29 23:05:01 2013	(r260063)
+++ head/sys/dev/wpi/if_wpi.c	Sun Dec 29 23:46:59 2013	(r260064)
@@ -253,7 +253,6 @@ static int wpi_shutdown(device_t);
 static int wpi_suspend(device_t);
 static int wpi_resume(device_t);
 
-
 static device_method_t wpi_methods[] = {
 	/* Device interface */
 	DEVMETHOD(device_probe,		wpi_probe),
@@ -263,7 +262,7 @@ static device_method_t wpi_methods[] = {
 	DEVMETHOD(device_suspend,	wpi_suspend),
 	DEVMETHOD(device_resume,	wpi_resume),
 
-	{ 0, 0 }
+	DEVMETHOD_END
 };
 
 static driver_t wpi_driver = {
@@ -274,7 +273,7 @@ static driver_t wpi_driver = {
 
 static devclass_t wpi_devclass;
 
-DRIVER_MODULE(wpi, pci, wpi_driver, wpi_devclass, 0, 0);
+DRIVER_MODULE(wpi, pci, wpi_driver, wpi_devclass, NULL, NULL);
 
 MODULE_VERSION(wpi, 1);
 
@@ -285,12 +284,12 @@ static const uint8_t wpi_ridx_to_plcp[] 
 	/* CCK: device-dependent */
 	10, 20, 55, 110
 };
+
 static const uint8_t wpi_ridx_to_rate[] = {
 	12, 18, 24, 36, 48, 72, 96, 108, /* OFDM */
 	2, 4, 11, 22 /*CCK */
 };
 
-
 static int
 wpi_probe(device_t dev)
 {
@@ -300,7 +299,7 @@ wpi_probe(device_t dev)
 		if (pci_get_vendor(dev) == ident->vendor &&
 		    pci_get_device(dev) == ident->device) {
 			device_set_desc(dev, ident->name);
-			return 0;
+			return (BUS_PROBE_DEFAULT);
 		}
 	}
 	return ENXIO;
@@ -493,7 +492,7 @@ wpi_attach(device_t dev)
 	struct wpi_softc *sc = device_get_softc(dev);
 	struct ifnet *ifp;
 	struct ieee80211com *ic;
-	int ac, error, supportsa = 1;
+	int ac, error, rid, supportsa = 1;
 	uint32_t tmp;
 	const struct wpi_ident *ident;
 	uint8_t macaddr[IEEE80211_ADDR_LEN];
@@ -525,20 +524,14 @@ wpi_attach(device_t dev)
 	callout_init_mtx(&sc->calib_to, &sc->sc_mtx, 0);
 	callout_init_mtx(&sc->watchdog_to, &sc->sc_mtx, 0);
 
-	if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) {
-		device_printf(dev, "chip is in D%d power mode "
-		    "-- setting to D0\n", pci_get_powerstate(dev));
-		pci_set_powerstate(dev, PCI_POWERSTATE_D0);
-	}
-
 	/* disable the retry timeout register */
 	pci_write_config(dev, 0x41, 0, 1);
 
 	/* enable bus-mastering */
 	pci_enable_busmaster(dev);
 
-	sc->mem_rid = PCIR_BAR(0);
-	sc->mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->mem_rid,
+	rid = PCIR_BAR(0);
+	sc->mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
 	    RF_ACTIVE);
 	if (sc->mem == NULL) {
 		device_printf(dev, "could not allocate memory resource\n");
@@ -549,8 +542,8 @@ wpi_attach(device_t dev)
 	sc->sc_st = rman_get_bustag(sc->mem);
 	sc->sc_sh = rman_get_bushandle(sc->mem);
 
-	sc->irq_rid = 0;
-	sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irq_rid,
+	rid = 0;
+	sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
 	    RF_ACTIVE | RF_SHAREABLE);
 	if (sc->irq == NULL) {
 		device_printf(dev, "could not allocate interrupt resource\n");
@@ -717,6 +710,9 @@ wpi_detach(device_t dev)
 	struct ieee80211com *ic;
 	int ac;
 
+	if (sc->irq != NULL)
+		bus_teardown_intr(dev, sc->irq, sc->sc_ih);
+
 	if (ifp != NULL) {
 		ic = ifp->if_l2com;
 
@@ -746,13 +742,12 @@ wpi_detach(device_t dev)
 		wpi_free_fwmem(sc);
 	WPI_UNLOCK(sc);
 
-	if (sc->irq != NULL) {
-		bus_teardown_intr(dev, sc->irq, sc->sc_ih);
-		bus_release_resource(dev, SYS_RES_IRQ, sc->irq_rid, sc->irq);
-	}
-
+	if (sc->irq != NULL)
+		bus_release_resource(dev, SYS_RES_IRQ, rman_get_rid(sc->irq),
+		    sc->irq);
 	if (sc->mem != NULL)
-		bus_release_resource(dev, SYS_RES_MEMORY, sc->mem_rid, sc->mem);
+		bus_release_resource(dev, SYS_RES_MEMORY,
+		    rman_get_rid(sc->mem), sc->mem);
 
 	if (ifp != NULL)
 		if_free(ifp);
@@ -3192,7 +3187,6 @@ wpi_stop_locked(struct wpi_softc *sc)
 	callout_stop(&sc->watchdog_to);
 	callout_stop(&sc->calib_to);
 
-
 	/* disable interrupts */
 	WPI_WRITE(sc, WPI_MASK, 0);
 	WPI_WRITE(sc, WPI_INTR, WPI_INTR_MASK);

Modified: head/sys/dev/wpi/if_wpivar.h
==============================================================================
--- head/sys/dev/wpi/if_wpivar.h	Sun Dec 29 23:05:01 2013	(r260063)
+++ head/sys/dev/wpi/if_wpivar.h	Sun Dec 29 23:46:59 2013	(r260064)
@@ -162,8 +162,6 @@ struct wpi_softc {
 	bus_space_tag_t		sc_st;
 	bus_space_handle_t	sc_sh;
 	void			*sc_ih;
-	int			mem_rid;
-	int			irq_rid;
 
 	struct wpi_config	config;
 	int			temp;


More information about the svn-src-head mailing list