PERFORCE change 124425 for review
Christopher Davis
loafier at FreeBSD.org
Tue Jul 31 14:49:09 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=124425
Change 124425 by loafier at 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;
}
More information about the p4-projects
mailing list