From owner-p4-projects@FreeBSD.ORG Tue Jul 31 14:49:08 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A915316A421; Tue, 31 Jul 2007 14:49:08 +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 6CD4216A41B for ; Tue, 31 Jul 2007 14:49:08 +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 51A3413C45D for ; Tue, 31 Jul 2007 14:49:08 +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 l6VEn89c049153 for ; Tue, 31 Jul 2007 14:49:08 GMT (envelope-from loafier@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l6VEn8Jq049150 for perforce@freebsd.org; Tue, 31 Jul 2007 14:49:08 GMT (envelope-from loafier@FreeBSD.org) Date: Tue, 31 Jul 2007 14:49:08 GMT Message-Id: <200707311449.l6VEn8Jq049150@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 124425 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 14:49:09 -0000 http://perforce.freebsd.org/chv.cgi?CH=124425 Change 124425 by loafier@chrisdsoc on 2007/07/31 14:48:19 Edit tags & handles, write functions, etc. Affected files ... .. //depot/projects/soc2007/loafier_busalloc/src/sys/dev/sound/pci/vibes.c#2 edit Differences ... ==== //depot/projects/soc2007/loafier_busalloc/src/sys/dev/sound/pci/vibes.c#2 (text+ko) ==== @@ -72,15 +72,11 @@ /* Enhanced register resources */ struct resource *enh_reg; - bus_space_tag_t enh_st; - bus_space_handle_t enh_sh; int enh_type; int enh_rid; /* DMA configuration */ struct resource *dmaa_reg, *dmac_reg; - bus_space_tag_t dmaa_st, dmac_st; - bus_space_handle_t dmaa_sh, dmac_sh; int dmaa_type, dmac_type; int dmaa_rid, dmac_rid; @@ -114,14 +110,14 @@ static u_int8_t sv_direct_get(struct sc_info *sc, u_int8_t reg) { - return bus_space_read_1(sc->enh_st, sc->enh_sh, reg); + return bus_read_1(sc->enh_reg, reg); } static void _sv_direct_set(struct sc_info *sc, u_int8_t reg, u_int8_t val, int line) { u_int8_t n; - bus_space_write_1(sc->enh_st, sc->enh_sh, reg, val); + bus_write_1(sc->enh_reg, reg, val); n = sv_direct_get(sc, reg); if (n != val) { @@ -135,8 +131,8 @@ if (reg == SV_REG_FORMAT || reg == SV_REG_ANALOG_PWR) reg |= SV_CM_INDEX_MCE; - bus_space_write_1(sc->enh_st, sc->enh_sh, SV_CM_INDEX, reg); - return bus_space_read_1(sc->enh_st, sc->enh_sh, SV_CM_DATA); + bus_write_1(sc->enh_reg, SV_CM_INDEX, reg); + return bus_read_1(sc->enh_reg, SV_CM_DATA); } #define sv_indirect_set(x, y, z) _sv_indirect_set(x, y, z, __LINE__) @@ -147,8 +143,8 @@ if (reg == SV_REG_FORMAT || reg == SV_REG_ANALOG_PWR) reg |= SV_CM_INDEX_MCE; - bus_space_write_1(sc->enh_st, sc->enh_sh, SV_CM_INDEX, reg); - bus_space_write_1(sc->enh_st, sc->enh_sh, SV_CM_DATA, val); + bus_write_1(sc->enh_reg, SV_CM_INDEX, reg); + bus_write_1(sc->enh_reg, SV_CM_DATA, val); reg &= ~SV_CM_INDEX_MCE; if (reg != SV_REG_ADC_PLLM) { @@ -161,21 +157,21 @@ } static void -sv_dma_set_config(bus_space_tag_t st, bus_space_handle_t sh, +sv_dma_set_config(struct resource *reg, u_int32_t base, u_int32_t count, u_int8_t mode) { - bus_space_write_4(st, sh, SV_DMA_ADDR, base); - bus_space_write_4(st, sh, SV_DMA_COUNT, count & 0xffffff); - bus_space_write_1(st, sh, SV_DMA_MODE, mode); + bus_write_4(reg, SV_DMA_ADDR, base); + bus_write_4(reg, SV_DMA_COUNT, count & 0xffffff); + bus_write_1(reg, SV_DMA_MODE, mode); DEB(printf("base 0x%08x count %5d mode 0x%02x\n", base, count, mode)); } static u_int32_t -sv_dma_get_count(bus_space_tag_t st, bus_space_handle_t sh) +sv_dma_get_count(struct resource *reg) { - return bus_space_read_4(st, sh, SV_DMA_COUNT) & 0xffffff; + return bus_read_4(reg, SV_DMA_COUNT) & 0xffffff; } /* ------------------------------------------------------------------------- */ @@ -323,7 +319,7 @@ /* Program DMA */ count = sndbuf_getsize(ch->buffer) / 2; /* DMAC uses words */ - sv_dma_set_config(sc->dmac_st, sc->dmac_sh, + sv_dma_set_config(sc->dmac_reg, sndbuf_getbufaddr(ch->buffer), count - 1, SV_DMA_MODE_AUTO | SV_DMA_MODE_RD); @@ -356,7 +352,7 @@ sz = sndbuf_getsize(ch->buffer); /* DMAC uses words */ - remain = (sv_dma_get_count(sc->dmac_st, sc->dmac_sh) + 1) * 2; + remain = (sv_dma_get_count(sc->dmac_reg) + 1) * 2; return sz - remain; } @@ -399,7 +395,7 @@ /* Program DMA */ count = sndbuf_getsize(ch->buffer); - sv_dma_set_config(sc->dmaa_st, sc->dmaa_sh, + sv_dma_set_config(sc->dmaa_reg, sndbuf_getbufaddr(ch->buffer), count - 1, SV_DMA_MODE_AUTO | SV_DMA_MODE_WR); @@ -433,7 +429,7 @@ sz = sndbuf_getsize(ch->buffer); /* DMAA uses bytes */ - remain = sv_dma_get_count(sc->dmaa_st, sc->dmaa_sh) + 1; + remain = sv_dma_get_count(sc->dmaa_reg) + 1; return (sz - remain); } @@ -700,6 +696,26 @@ return; } +static void +sv_destroy(device_t dev, struct sc_info *sc) +{ + if (!sc) + return; + + if (sc->parent_dmat) + bus_dma_tag_destroy(sc->parent_dmat); + if (sc->ih) + bus_teardown_intr(dev, sc->irq, sc->ih); + if (sc->irq) + bus_release_resource(dev, SYS_RES_IRQ, sc->irqid, sc->irq); + if (sc->enh_reg) + bus_release_resource(dev, sc->enh_type, sc->enh_rid, sc->enh_reg); + if (sc->dmaa_reg) + bus_release_resource(dev, sc->dmaa_type, sc->dmaa_rid, sc->dmaa_reg); + if (sc->dmac_reg) + bus_release_resource(dev, sc->dmac_type, sc->dmac_rid, sc->dmac_reg); +} + static int sv_probe(device_t dev) { @@ -722,10 +738,8 @@ sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->dev = dev; - 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); #if __FreeBSD_version > 500000 if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) { @@ -743,8 +757,6 @@ device_printf(dev, "sv_attach: cannot allocate enh\n"); return ENXIO; } - sc->enh_st = rman_get_bustag(sc->enh_reg); - sc->enh_sh = rman_get_bushandle(sc->enh_reg); data = pci_read_config(dev, SV_PCI_DMAA, 4); DEB(printf("sv_attach: initial dmaa 0x%08x\n", data)); @@ -757,8 +769,8 @@ /* Register IRQ handler */ sc->irqid = 0; - sc->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &sc->irqid, - 0, ~0, 1, RF_ACTIVE | RF_SHAREABLE); + sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irqid, + RF_ACTIVE | RF_SHAREABLE); if (!sc->irq || snd_setup_intr(dev, sc->irq, 0, sv_intr, sc, &sc->ih)) { device_printf(dev, "sv_attach: Unable to map interrupt\n"); @@ -836,8 +848,6 @@ device_printf(dev, "sv_attach: cannot allocate dmaa\n"); goto fail; } - sc->dmaa_st = rman_get_bustag(sc->dmaa_reg); - sc->dmaa_sh = rman_get_bushandle(sc->dmaa_reg); /* Poke port into dma_a configuration, nb bit flags to enable dma */ data = pci_read_config(dev, SV_PCI_DMAA, 4) | SV_PCI_DMA_ENABLE | SV_PCI_DMA_EXTENDED; @@ -855,8 +865,6 @@ device_printf(dev, "sv_attach: cannot allocate dmac\n"); goto fail; } - sc->dmac_st = rman_get_bustag(sc->dmac_reg); - sc->dmac_sh = rman_get_bushandle(sc->dmac_reg); /* Poke port into dma_c configuration, nb bit flags to enable dma */ data = pci_read_config(dev, SV_PCI_DMAC, 4) | SV_PCI_DMA_ENABLE | SV_PCI_DMA_EXTENDED; @@ -884,18 +892,8 @@ return 0; fail: - if (sc->parent_dmat) - bus_dma_tag_destroy(sc->parent_dmat); - if (sc->ih) - bus_teardown_intr(dev, sc->irq, sc->ih); - if (sc->irq) - bus_release_resource(dev, SYS_RES_IRQ, sc->irqid, sc->irq); - if (sc->enh_reg) - bus_release_resource(dev, sc->enh_type, sc->enh_rid, sc->enh_reg); - if (sc->dmaa_reg) - bus_release_resource(dev, sc->dmaa_type, sc->dmaa_rid, sc->dmaa_reg); - if (sc->dmac_reg) - bus_release_resource(dev, sc->dmac_type, sc->dmac_rid, sc->dmac_reg); + sv_destroy(dev, sc); + return ENXIO; } @@ -910,15 +908,7 @@ sc = pcm_getdevinfo(dev); sv_mix_mute_all(sc); sv_power(sc, 3); - - bus_dma_tag_destroy(sc->parent_dmat); - bus_teardown_intr(dev, sc->irq, sc->ih); - bus_release_resource(dev, SYS_RES_IRQ, sc->irqid, sc->irq); - bus_release_resource(dev, sc->enh_type, sc->enh_rid, sc->enh_reg); - bus_release_resource(dev, sc->dmaa_type, sc->dmaa_rid, sc->dmaa_reg); - bus_release_resource(dev, sc->dmac_type, sc->dmac_rid, sc->dmac_reg); - - free(sc, M_DEVBUF); + sv_destroy(dev, sc); return 0; }