From owner-p4-projects@FreeBSD.ORG Tue Jul 31 13:42:43 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3B31C16A46B; Tue, 31 Jul 2007 13:42:43 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C538E16A418 for ; Tue, 31 Jul 2007 13:42:41 +0000 (UTC) (envelope-from loafier@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 747E613C45A for ; Tue, 31 Jul 2007 13:42:41 +0000 (UTC) (envelope-from loafier@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l6VDgfkK043559 for ; Tue, 31 Jul 2007 13:42:41 GMT (envelope-from loafier@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l6VDgemI043556 for perforce@freebsd.org; Tue, 31 Jul 2007 13:42:40 GMT (envelope-from loafier@FreeBSD.org) Date: Tue, 31 Jul 2007 13:42:40 GMT Message-Id: <200707311342.l6VDgemI043556@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to loafier@FreeBSD.org using -f From: Christopher Davis To: Perforce Change Reviews Cc: Subject: PERFORCE change 124420 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Jul 2007 13:42:43 -0000 http://perforce.freebsd.org/chv.cgi?CH=124420 Change 124420 by loafier@chrisdsoc on 2007/07/31 13:41:49 Use bus_alloc_resources(), update read/write functions. Affected files ... .. //depot/projects/soc2007/loafier_busalloc/src/sys/dev/sound/pci/emu10kx.c#2 edit Differences ... ==== //depot/projects/soc2007/loafier_busalloc/src/sys/dev/sound/pci/emu10kx.c#2 (text+ko) ==== @@ -280,6 +280,18 @@ uint32_t(*irq_func) (void *softc, uint32_t irq); }; +enum { + RES_MEM, + RES_IRQ, + RES_SZ +}; + +static struct resource_spec emu_res_spec[] = { + {SYS_RES_IOPORT, PCIR_BAR(0), RF_ACTIVE}, + {SYS_RES_IRQ, 0, RF_ACTIVE | RF_SHAREABLE}, + {-1, 0, 0} +}; + struct emu_sc_info { struct mtx lock; struct mtx rw; /* Hardware exclusive access lock */ @@ -291,9 +303,6 @@ uint32_t type; uint32_t rev; - bus_space_tag_t st; - bus_space_handle_t sh; - struct cdev *cdev; /* /dev/emu10k character device */ struct mtx emu10kx_lock; int emu10kx_isopen; @@ -302,8 +311,7 @@ /* Resources */ - struct resource *reg; - struct resource *irq; + struct resource *res[RES_SZ]; void *ih; /* IRQ handlers */ @@ -556,11 +564,11 @@ KASSERT(sc != NULL, ("emu_rd: NULL sc")); switch (size) { case 1: - return (bus_space_read_1(sc->st, sc->sh, regno)); + return (bus_read_1(sc->res[RES_MEM], regno)); case 2: - return (bus_space_read_2(sc->st, sc->sh, regno)); + return (bus_read_2(sc->res[RES_MEM], regno)); case 4: - return (bus_space_read_4(sc->st, sc->sh, regno)); + return (bus_read_4(sc->res[RES_MEM], regno)); } return (0xffffffff); } @@ -572,13 +580,13 @@ KASSERT(sc != NULL, ("emu_rd: NULL sc")); switch (size) { case 1: - bus_space_write_1(sc->st, sc->sh, regno, data); + bus_write_1(sc->res[RES_MEM], regno, data); break; case 2: - bus_space_write_2(sc->st, sc->sh, regno, data); + bus_write_2(sc->res[RES_MEM], regno, data); break; case 4: - bus_space_write_4(sc->st, sc->sh, regno, data); + bus_write_4(sc->res[RES_MEM], regno, data); break; } } @@ -2697,7 +2705,6 @@ struct emu_sc_info *sc; struct emu_pcminfo *pcminfo; struct emu_midiinfo *midiinfo[3]; - uint32_t data; int i; int device_flags; char status[255]; @@ -2811,28 +2818,19 @@ if (sc->opcode_shift == 0) goto bad; - data = pci_read_config(dev, PCIR_COMMAND, 2); - data |= (PCIM_CMD_PORTEN | PCIM_CMD_BUSMASTEREN); - pci_write_config(dev, PCIR_COMMAND, data, 2); - data = pci_read_config(dev, PCIR_COMMAND, 2); - pci_enable_busmaster(dev); + pci_enable_io(dev, SYS_RES_IOPORT); - i = PCIR_BAR(0); - sc->reg = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &i, RF_ACTIVE); - if (sc->reg == NULL) { - device_printf(dev, "unable to map register space\n"); + if (bus_alloc_resources(dev, emu_res_spec, sc->res) != 0) { + device_printf(dev, "unable to allocate resources\n"); goto bad; } - sc->st = rman_get_bustag(sc->reg); - sc->sh = rman_get_bushandle(sc->reg); for (i = 0; i < EMU_MAX_IRQ_CONSUMERS; i++) sc->timer[i] = 0; /* disable it */ - i = 0; - sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &i, RF_ACTIVE | RF_SHAREABLE); - if ((sc->irq == NULL) || snd_setup_intr(dev, sc->irq, INTR_MPSAFE, emu_intr, sc, &sc->ih)) { + if (snd_setup_intr(dev, sc->res[RES_IRQ], INTR_MPSAFE, + emu_intr, sc, &sc->ih)) { device_printf(dev, "unable to map interrupt\n"); goto bad; } @@ -2859,7 +2857,10 @@ device_printf(dev, "unable to create control device\n"); goto bad; } - snprintf(status, 255, "rev %d at io 0x%lx irq %ld", sc->rev, rman_get_start(sc->reg), rman_get_start(sc->irq)); + snprintf(status, 255, "rev %d at io 0x%lx irq %ld", + sc->rev, + rman_get_start(sc->res[RES_MEM]), + rman_get_start(sc->res[RES_IRQ])); /* Voices */ for (i = 0; i < NUM_G; i++) { @@ -3052,12 +3053,9 @@ emu10kx_dev_uninit(sc); if (sc->rm != NULL) emu_rm_uninit(sc); - if (sc->reg) - bus_release_resource(dev, SYS_RES_IOPORT, PCIR_BAR(0), sc->reg); if (sc->ih) - bus_teardown_intr(dev, sc->irq, sc->ih); - if (sc->irq) - bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); + bus_teardown_intr(dev, sc->res[RES_IRQ], sc->ih); + bus_release_resources(dev, emu_res_spec, sc->res); mtx_destroy(&sc->lock); mtx_destroy(&sc->rw); return (error); @@ -3104,10 +3102,8 @@ if (sc->mem.dmat) bus_dma_tag_destroy(sc->mem.dmat); - if (sc->reg) - bus_release_resource(dev, SYS_RES_IOPORT, PCIR_BAR(0), sc->reg); - bus_teardown_intr(dev, sc->irq, sc->ih); - bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); + bus_teardown_intr(dev, sc->res[RES_IRQ], sc->ih); + bus_release_resources(dev, emu_res_spec, sc->res); mtx_destroy(&sc->lock); mtx_destroy(&sc->rw); return (bus_generic_detach(dev));