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