Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 31 Jul 2007 04:38:22 GMT
From:      Christopher Davis <loafier@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 124400 for review
Message-ID:  <200707310438.l6V4cMFe044822@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=124400

Change 124400 by loafier@chrisdsoc on 2007/07/31 04:38:19

	Edit for bus_alloc_resources(), etc.

Affected files ...

.. //depot/projects/soc2007/loafier_busalloc/src/sys/dev/sound/pci/envy24ht.c#2 edit

Differences ...

==== //depot/projects/soc2007/loafier_busalloc/src/sys/dev/sound/pci/envy24ht.c#2 (text+ko) ====

@@ -118,27 +118,34 @@
 	struct codec_entry *codec;
 };
 
+enum {
+	RES_CS,
+	RES_MT,
+	RES_IRQ,
+	RES_SZ
+};
+
+static struct resource_spec envy24ht_res_spec[] = {
+	{SYS_RES_IOPORT, PCIR_CCS, RF_ACTIVE},
+	{SYS_RES_IOPORT, ENVY24HT_PCIR_MT, RF_ACTIVE},
+	{SYS_RES_IRQ, 0, RF_ACTIVE | RF_SHAREABLE},
+	{-1, 0, 0}
+};
+
+
 /* device private data */
 struct sc_info {
 	device_t	dev;
 	struct mtx	*lock;
 
 	/* Control/Status registor */
-	struct resource *cs;
-	int		csid;
-	bus_space_tag_t cst;
-	bus_space_handle_t csh;
 	/* MultiTrack registor */
-	struct resource *mt;
-	int		mtid;
-	bus_space_tag_t mtt;
-	bus_space_handle_t mth;
+	/* IRQ resource */
+	struct resource *res[RES_SZ];
+	void		*ih;
+
 	/* DMA tag */
 	bus_dma_tag_t dmat;
-	/* IRQ resource */
-	struct resource *irq;
-	int		irqid;
-	void		*ih;
 
 	/* system configuration data */
 	struct cfg_info *cfg;
@@ -439,68 +446,27 @@
 /* -------------------------------------------------------------------- */
 
 /* common routines */
-static u_int32_t
-envy24ht_rdcs(struct sc_info *sc, int regno, int size)
-{
-	switch (size) {
-	case 1:
-		return bus_space_read_1(sc->cst, sc->csh, regno);
-	case 2:
-		return bus_space_read_2(sc->cst, sc->csh, regno);
-	case 4:
-		return bus_space_read_4(sc->cst, sc->csh, regno);
-	default:
-		return 0xffffffff;
-	}
-}
+#define envy24ht_rdcs1(_sc, _reg) bus_read_1((_sc)->res[RES_CS], _reg)
+#define envy24ht_rdcs2(_sc, _reg) bus_read_2((_sc)->res[RES_CS], _reg)
+#define envy24ht_rdcs4(_sc, _reg) bus_read_4((_sc)->res[RES_CS], _reg)
+#define envy24ht_wrcs1(_sc, _reg, _val) \
+	bus_write_1((_sc)->res[RES_CS], _reg, _val)
+#define envy24ht_wrcs2(_sc, _reg, _val) \
+	bus_write_2((_sc)->res[RES_CS], _reg, _val)
+#define envy24ht_wrcs4(_sc, _reg, _val) \
+	bus_write_4((_sc)->res[RES_CS], _reg, _val)
 
-static void
-envy24ht_wrcs(struct sc_info *sc, int regno, u_int32_t data, int size)
-{
-	switch (size) {
-	case 1:
-		bus_space_write_1(sc->cst, sc->csh, regno, data);
-		break;
-	case 2:
-		bus_space_write_2(sc->cst, sc->csh, regno, data);
-		break;
-	case 4:
-		bus_space_write_4(sc->cst, sc->csh, regno, data);
-		break;
-	}
-}
+#define envy24ht_rdmt1(_sc, _reg) bus_read_1((_sc)->res[RES_MT], _reg)
+#define envy24ht_rdmt2(_sc, _reg) bus_read_2((_sc)->res[RES_MT], _reg)
+#define envy24ht_rdmt4(_sc, _reg) bus_read_4((_sc)->res[RES_MT], _reg)
+#define envy24ht_wrmt1(_sc, _reg, _val) \
+	bus_write_1((_sc)->res[RES_MT], _reg, _val)
+#define envy24ht_wrmt2(_sc, _reg, _val) \
+	bus_write_2((_sc)->res[RES_MT], _reg, _val)
+#define envy24ht_wrmt4(_sc, _reg, _val) \
+	bus_write_4((_sc)->res[RES_MT], _reg, _val)
 
-static u_int32_t
-envy24ht_rdmt(struct sc_info *sc, int regno, int size)
-{
-	switch (size) {
-	case 1:
-		return bus_space_read_1(sc->mtt, sc->mth, regno);
-	case 2:
-		return bus_space_read_2(sc->mtt, sc->mth, regno);
-	case 4:
-		return bus_space_read_4(sc->mtt, sc->mth, regno);
-	default:
-		return 0xffffffff;
-	}
-}
 
-static void
-envy24ht_wrmt(struct sc_info *sc, int regno, u_int32_t data, int size)
-{
-	switch (size) {
-	case 1:
-		bus_space_write_1(sc->mtt, sc->mth, regno, data);
-		break;
-	case 2:
-		bus_space_write_2(sc->mtt, sc->mth, regno, data);
-		break;
-	case 4:
-		bus_space_write_4(sc->mtt, sc->mth, regno, data);
-		break;
-	}
-}
-
 /* -------------------------------------------------------------------- */
 
 /* I2C port/E2PROM access routines */
@@ -515,7 +481,7 @@
 	device_printf(sc->dev, "envy24ht_rdi2c(sc, 0x%02x, 0x%02x)\n", dev, addr);
 #endif
 	for (i = 0; i < ENVY24HT_TIMEOUT; i++) {
-		data = envy24ht_rdcs(sc, ENVY24HT_CCS_I2CSTAT, 1);
+		data = envy24ht_rdcs1(sc, ENVY24HT_CCS_I2CSTAT);
 		if ((data & ENVY24HT_CCS_I2CSTAT_BSY) == 0)
 			break;
 		DELAY(32); /* 31.25kHz */
@@ -523,11 +489,11 @@
 	if (i == ENVY24HT_TIMEOUT) {
 		return -1;
 	}
-	envy24ht_wrcs(sc, ENVY24HT_CCS_I2CADDR, addr, 1);
-	envy24ht_wrcs(sc, ENVY24HT_CCS_I2CDEV,
-	    (dev & ENVY24HT_CCS_I2CDEV_ADDR) | ENVY24HT_CCS_I2CDEV_RD, 1);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_I2CADDR, addr);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_I2CDEV,
+	    (dev & ENVY24HT_CCS_I2CDEV_ADDR) | ENVY24HT_CCS_I2CDEV_RD);
 	for (i = 0; i < ENVY24HT_TIMEOUT; i++) {
-		data = envy24ht_rdcs(sc, ENVY24HT_CCS_I2CSTAT, 1);
+		data = envy24ht_rdcs1(sc, ENVY24HT_CCS_I2CSTAT);
 		if ((data & ENVY24HT_CCS_I2CSTAT_BSY) == 0)
 			break;
 		DELAY(32); /* 31.25kHz */
@@ -535,7 +501,7 @@
 	if (i == ENVY24HT_TIMEOUT) {
 		return -1;
 	}
-	data = envy24ht_rdcs(sc, ENVY24HT_CCS_I2CDATA, 1);
+	data = envy24ht_rdcs1(sc, ENVY24HT_CCS_I2CDATA);
 
 #if(0)
 	device_printf(sc->dev, "envy24ht_rdi2c(): return 0x%x\n", data);
@@ -553,7 +519,7 @@
 	device_printf(sc->dev, "envy24ht_rdi2c(sc, 0x%02x, 0x%02x)\n", dev, addr);
 #endif
 	for (i = 0; i < ENVY24HT_TIMEOUT; i++) {
-		tmp = envy24ht_rdcs(sc, ENVY24HT_CCS_I2CSTAT, 1);
+		tmp = envy24ht_rdcs1(sc, ENVY24HT_CCS_I2CSTAT);
 		if ((tmp & ENVY24HT_CCS_I2CSTAT_BSY) == 0)
 			break;
 		DELAY(32); /* 31.25kHz */
@@ -561,12 +527,12 @@
 	if (i == ENVY24HT_TIMEOUT) {
 		return -1;
 	}
-	envy24ht_wrcs(sc, ENVY24HT_CCS_I2CADDR, addr, 1);
-	envy24ht_wrcs(sc, ENVY24HT_CCS_I2CDATA, data, 1);
-	envy24ht_wrcs(sc, ENVY24HT_CCS_I2CDEV,
-	    (dev & ENVY24HT_CCS_I2CDEV_ADDR) | ENVY24HT_CCS_I2CDEV_WR, 1);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_I2CADDR, addr);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_I2CDATA, data);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_I2CDEV,
+	    (dev & ENVY24HT_CCS_I2CDEV_ADDR) | ENVY24HT_CCS_I2CDEV_WR);
 	for (i = 0; i < ENVY24HT_TIMEOUT; i++) {
-		data = envy24ht_rdcs(sc, ENVY24HT_CCS_I2CSTAT, 1);
+		data = envy24ht_rdcs1(sc, ENVY24HT_CCS_I2CSTAT);
 		if ((data & ENVY24HT_CCS_I2CSTAT_BSY) == 0)
 			break;
 		DELAY(32); /* 31.25kHz */
@@ -586,7 +552,7 @@
 #if(0)
 	device_printf(sc->dev, "envy24ht_rdrom(sc, 0x%02x)\n", addr);
 #endif
-	data = envy24ht_rdcs(sc, ENVY24HT_CCS_I2CSTAT, 1);
+	data = envy24ht_rdcs1(sc, ENVY24HT_CCS_I2CSTAT);
 	if ((data & ENVY24HT_CCS_I2CSTAT_ROM) == 0) {
 #if(0)
 		device_printf(sc->dev, "envy24ht_rdrom(): E2PROM not presented\n");
@@ -712,12 +678,12 @@
 #if(0)
 	device_printf(sc->dev, "envy24ht_coldcd()\n");
 #endif
-	envy24ht_wrmt(sc, ENVY24HT_MT_AC97CMD, ENVY24HT_MT_AC97CMD_CLD, 1);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_AC97CMD, ENVY24HT_MT_AC97CMD_CLD);
 	DELAY(10);
-	envy24ht_wrmt(sc, ENVY24HT_MT_AC97CMD, 0, 1);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_AC97CMD, 0);
 	DELAY(1000);
 	for (i = 0; i < ENVY24HT_TIMEOUT; i++) {
-		data = envy24ht_rdmt(sc, ENVY24HT_MT_AC97CMD, 1);
+		data = envy24ht_rdmt1(sc, ENVY24HT_MT_AC97CMD);
 		if (data & ENVY24HT_MT_AC97CMD_RDY) {
 			return 0;
 		}
@@ -738,10 +704,10 @@
 	envy24ht_wrmt(sc, ENVY24HT_MT_AC97CMD,
 	    ENVY24HT_MT_AC97CMD_CLD | ENVY24HT_MT_AC97CMD_WRM, 1);
 	DELAY(10);
-	envy24ht_wrmt(sc, ENVY24HT_MT_AC97CMD, 0, 1);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_AC97CMD, 0);
 	DELAY(1000);
 	for (i = 0; i < ENVY24HT_TIMEOUT; i++) {
-		data = envy24ht_rdmt(sc, ENVY24HT_MT_AC97CMD, 1);
+		data = envy24ht_rdmt1(sc, ENVY24HT_MT_AC97CMD);
 		if (data & ENVY24HT_MT_AC97CMD_RDY) {
 			return 0;
 		}
@@ -760,14 +726,14 @@
 #if(0)
 	device_printf(sc->dev, "envy24ht_rdcd(obj, sc, 0x%02x)\n", regno);
 #endif
-	envy24ht_wrmt(sc, ENVY24HT_MT_AC97IDX, (u_int32_t)regno, 1);
-	envy24ht_wrmt(sc, ENVY24HT_MT_AC97CMD, ENVY24HT_MT_AC97CMD_RD, 1);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_AC97IDX, (u_int32_t)regno);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_AC97CMD, ENVY24HT_MT_AC97CMD_RD);
 	for (i = 0; i < ENVY24HT_TIMEOUT; i++) {
-		data = envy24ht_rdmt(sc, ENVY24HT_MT_AC97CMD, 1);
+		data = envy24ht_rdmt1(sc, ENVY24HT_MT_AC97CMD);
 		if ((data & ENVY24HT_MT_AC97CMD_RD) == 0)
 			break;
 	}
-	data = envy24ht_rdmt(sc, ENVY24HT_MT_AC97DLO, 2);
+	data = envy24ht_rdmt2(sc, ENVY24HT_MT_AC97DLO);
 
 #if(0)
 	device_printf(sc->dev, "envy24ht_rdcd(): return 0x%x\n", data);
@@ -785,11 +751,11 @@
 #if(0)
 	device_printf(sc->dev, "envy24ht_wrcd(obj, sc, 0x%02x, 0x%04x)\n", regno, data);
 #endif
-	envy24ht_wrmt(sc, ENVY24HT_MT_AC97IDX, (u_int32_t)regno, 1);
-	envy24ht_wrmt(sc, ENVY24HT_MT_AC97DLO, (u_int32_t)data, 2);
-	envy24ht_wrmt(sc, ENVY24HT_MT_AC97CMD, ENVY24HT_MT_AC97CMD_WR, 1);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_AC97IDX, (u_int32_t)regno);
+	envy24ht_wrmt2(sc, ENVY24HT_MT_AC97DLO, (u_int32_t)data);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_AC97CMD, ENVY24HT_MT_AC97CMD_WR);
 	for (i = 0; i < ENVY24HT_TIMEOUT; i++) {
-		cmd = envy24ht_rdmt(sc, ENVY24HT_MT_AC97CMD, 1);
+		cmd = envy24ht_rdmt1(sc, ENVY24HT_MT_AC97CMD);
 		if ((cmd & ENVY24HT_MT_AC97CMD_WR) == 0)
 			break;
 	}
@@ -813,9 +779,9 @@
 envy24ht_gpiord(struct sc_info *sc)
 {
 	if (sc->cfg->subvendor == 0x153b  && sc->cfg->subdevice == 0x1150) 
-	return envy24ht_rdcs(sc, ENVY24HT_CCS_GPIO_LDATA, 2);
+	return envy24ht_rdcs2(sc, ENVY24HT_CCS_GPIO_LDATA);
 	else
-	return (envy24ht_rdcs(sc, ENVY24HT_CCS_GPIO_HDATA, 1) << 16 | envy24ht_rdcs(sc, ENVY24HT_CCS_GPIO_LDATA, 2));
+	return (envy24ht_rdcs1(sc, ENVY24HT_CCS_GPIO_HDATA) << 16 | envy24ht_rdcs2(sc, ENVY24HT_CCS_GPIO_LDATA));
 }
 
 static void
@@ -825,9 +791,9 @@
 	device_printf(sc->dev, "envy24ht_gpiowr(sc, 0x%02x)\n", data & 0x7FFFFF);
 	return;
 #endif
-	envy24ht_wrcs(sc, ENVY24HT_CCS_GPIO_LDATA, data, 2);
+	envy24ht_wrcs2(sc, ENVY24HT_CCS_GPIO_LDATA, data);
 	if (sc->cfg->subdevice != 0x1150)
-	envy24ht_wrcs(sc, ENVY24HT_CCS_GPIO_HDATA, data >> 16, 1);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_GPIO_HDATA, data >> 16);
 	return;
 }
 
@@ -835,16 +801,16 @@
 static u_int32_t
 envy24ht_gpiogetmask(struct sc_info *sc)
 {
-	return (envy24ht_rdcs(sc, ENVY24HT_CCS_GPIO_HMASK, 1) << 16 | envy24ht_rdcs(sc, ENVY24HT_CCS_GPIO_LMASK, 2));
+	return (envy24ht_rdcs1(sc, ENVY24HT_CCS_GPIO_HMASK) << 16 | envy24ht_rdcs2(sc, ENVY24HT_CCS_GPIO_LMASK));
 }
 #endif
 
 static void
 envy24ht_gpiosetmask(struct sc_info *sc, u_int32_t mask)
 {
-        envy24ht_wrcs(sc, ENVY24HT_CCS_GPIO_LMASK, mask, 2);
+        envy24ht_wrcs2(sc, ENVY24HT_CCS_GPIO_LMASK, mask);
 	if (sc->cfg->subdevice != 0x1150)
-        envy24ht_wrcs(sc, ENVY24HT_CCS_GPIO_HMASK, mask >> 16, 1);
+        envy24ht_wrcs1(sc, ENVY24HT_CCS_GPIO_HMASK, mask >> 16);
 	return;
 }
 
@@ -852,7 +818,7 @@
 static u_int32_t
 envy24ht_gpiogetdir(struct sc_info *sc)
 {
-	return envy24ht_rdcs(sc, ENVY24HT_CCS_GPIO_CTLDIR, 4);
+	return envy24ht_rdcs4(sc, ENVY24HT_CCS_GPIO_CTLDIR);
 }
 #endif
 
@@ -860,9 +826,9 @@
 envy24ht_gpiosetdir(struct sc_info *sc, u_int32_t dir)
 {
 	if (sc->cfg->subvendor == 0x153b  && sc->cfg->subdevice == 0x1150)
-	envy24ht_wrcs(sc, ENVY24HT_CCS_GPIO_CTLDIR, dir, 2);
+	envy24ht_wrcs2(sc, ENVY24HT_CCS_GPIO_CTLDIR, dir);
 	else 
-	envy24ht_wrcs(sc, ENVY24HT_CCS_GPIO_CTLDIR, dir, 4);
+	envy24ht_wrcs4(sc, ENVY24HT_CCS_GPIO_CTLDIR, dir);
 	return;
 }
 
@@ -1051,19 +1017,19 @@
 	device_printf(sc->dev, "envy24ht_setspeed(): speed %d/code 0x%04x\n", envy24ht_speedtab[i].speed, code);
 #endif
 	if (code < 0x10) {
-		envy24ht_wrmt(sc, ENVY24HT_MT_RATE, code, 1);
+		envy24ht_wrmt1(sc, ENVY24HT_MT_RATE, code);
 		if ((((sc->cfg->scfg & ENVY24HT_CCSM_SCFG_XIN2) == 0x00) && (code == ENVY24HT_MT_RATE_192000)) || \
 									    (code == ENVY24HT_MT_RATE_176400)) {
-			i2sfmt = envy24ht_rdmt(sc, ENVY24HT_MT_I2S, 1);
+			i2sfmt = envy24ht_rdmt1(sc, ENVY24HT_MT_I2S);
 			i2sfmt |= ENVY24HT_MT_I2S_MLR128;
-			envy24ht_wrmt(sc, ENVY24HT_MT_I2S, i2sfmt, 1);
+			envy24ht_wrmt1(sc, ENVY24HT_MT_I2S, i2sfmt);
 		}
 		else {
-			i2sfmt = envy24ht_rdmt(sc, ENVY24HT_MT_I2S, 1);
+			i2sfmt = envy24ht_rdmt1(sc, ENVY24HT_MT_I2S);
 			i2sfmt &= ~ENVY24HT_MT_I2S_MLR128;
-			envy24ht_wrmt(sc, ENVY24HT_MT_I2S, i2sfmt, 1);
+			envy24ht_wrmt1(sc, ENVY24HT_MT_I2S, i2sfmt);
 		}
-		code = envy24ht_rdmt(sc, ENVY24HT_MT_RATE, 1);
+		code = envy24ht_rdmt1(sc, ENVY24HT_MT_RATE);
 		code &= ENVY24HT_MT_RATE_MASK;
 		for (i = 0; envy24ht_speedtab[i].code < 0x10; i++) {
 			if (envy24ht_speedtab[i].code == code)
@@ -1085,10 +1051,10 @@
 {
 #if(0)
 	device_printf(sc->dev, "envy24ht_setvolume(sc, %d)\n", ch);
-	envy24ht_wrmt(sc, ENVY24HT_MT_VOLIDX, ch * 2, 1);
-	envy24ht_wrmt(sc, ENVY24HT_MT_VOLUME, 0x7f00 | sc->left[ch], 2);
-	envy24ht_wrmt(sc, ENVY24HT_MT_VOLIDX, ch * 2 + 1, 1);
-	envy24ht_wrmt(sc, ENVY24HT_MT_VOLUME, (sc->right[ch] << 8) | 0x7f, 2);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_VOLIDX, ch * 2);
+	envy24ht_wrmt2(sc, ENVY24HT_MT_VOLUME, 0x7f00 | sc->left[ch]);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_VOLIDX, ch * 2 + 1);
+	envy24ht_wrmt2(sc, ENVY24HT_MT_VOLUME, (sc->right[ch] << 8) | 0x7f);
 #endif
 }
 
@@ -1100,10 +1066,10 @@
 
 	device_printf(sc->dev, "envy24ht_mutevolume(sc, %d)\n", ch);
 	vol = ENVY24HT_VOL_MUTE << 8 | ENVY24HT_VOL_MUTE;
-	envy24ht_wrmt(sc, ENVY24HT_MT_VOLIDX, ch * 2, 1);
-	envy24ht_wrmt(sc, ENVY24HT_MT_VOLUME, vol, 2);
-	envy24ht_wrmt(sc, ENVY24HT_MT_VOLIDX, ch * 2 + 1, 1);
-	envy24ht_wrmt(sc, ENVY24HT_MT_VOLUME, vol, 2);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_VOLIDX, ch * 2);
+	envy24ht_wrmt2(sc, ENVY24HT_MT_VOLUME, vol);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_VOLIDX, ch * 2 + 1);
+	envy24ht_wrmt2(sc, ENVY24HT_MT_VOLUME, vol);
 #endif
 }
 
@@ -1127,7 +1093,7 @@
 		regno = ENVY24HT_MT_RCNT;
 	}
 
-	ptr = envy24ht_rdmt(sc, regno, 2);
+	ptr = envy24ht_rdmt2(sc, regno);
 	rtn -= (ptr + 1);
 	rtn /= unit;
 
@@ -1163,7 +1129,7 @@
 		mask = ~ENVY24HT_MT_INT_RMASK;
 	}
 
-	ptr = size - envy24ht_rdmt(sc, regptr, 2) - 1;
+	ptr = size - envy24ht_rdmt2(sc, regptr) - 1;
 	/*
 	cnt = blk - ptr % blk - 1;
 	if (cnt == 0)
@@ -1173,15 +1139,15 @@
 #if(0)
 	device_printf(sc->dev, "envy24ht_updintr():ptr = %d, blk = %d, cnt = %d\n", ptr, blk, cnt);
 #endif
-	envy24ht_wrmt(sc, regintr, cnt, 2);
-	intr = envy24ht_rdmt(sc, ENVY24HT_MT_INT_MASK, 1);
+	envy24ht_wrmt2(sc, regintr, cnt);
+	intr = envy24ht_rdmt1(sc, ENVY24HT_MT_INT_MASK);
 #if(0)
 	device_printf(sc->dev, "envy24ht_updintr():intr = 0x%02x, mask = 0x%02x\n", intr, mask);
 #endif
-	envy24ht_wrmt(sc, ENVY24HT_MT_INT_MASK, intr & mask, 1);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_INT_MASK, intr & mask);
 #if(0)
 	device_printf(sc->dev, "envy24ht_updintr():INT-->0x%02x\n",
-		      envy24ht_rdmt(sc, ENVY24HT_MT_INT_MASK, 1));
+		      envy24ht_rdmt1(sc, ENVY24HT_MT_INT_MASK));
 #endif
 
 	return;
@@ -1200,8 +1166,8 @@
 		mask = ENVY24HT_MT_INT_PMASK;
 	else
 		mask = ENVY24HT_MT_INT_RMASK;
-	intr = envy24ht_rdmt(sc, ENVY24HT_MT_INT, 1);
-	envy24ht_wrmt(sc, ENVY24HT_MT_INT, intr | mask, 1);
+	intr = envy24ht_rdmt1(sc, ENVY24HT_MT_INT);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_INT, intr | mask);
 
 	return;
 }
@@ -1215,14 +1181,14 @@
 #if(0)
 	device_printf(sc->dev, "envy24ht_checkintr(sc, %d)\n", dir);
 #endif
-	intr = envy24ht_rdmt(sc, ENVY24HT_MT_INT_STAT, 1);
+	intr = envy24ht_rdmt1(sc, ENVY24HT_MT_INT_STAT);
 	if (dir == PCMDIR_PLAY) {
 		if ((rtn = intr & ENVY24HT_MT_INT_PSTAT) != 0) {
 			mask = ~ENVY24HT_MT_INT_RSTAT;
-			envy24ht_wrmt(sc, 0x1a, 0x01, 1);
-			envy24ht_wrmt(sc, ENVY24HT_MT_INT_STAT, (intr & mask) | ENVY24HT_MT_INT_PSTAT | 0x08, 1);	
-			stat = envy24ht_rdmt(sc, ENVY24HT_MT_INT_MASK, 1);
-			envy24ht_wrmt(sc, ENVY24HT_MT_INT_MASK, stat | ENVY24HT_MT_INT_PMASK, 1);
+			envy24ht_wrmt1(sc, 0x1a, 0x01);
+			envy24ht_wrmt1(sc, ENVY24HT_MT_INT_STAT, (intr & mask) | ENVY24HT_MT_INT_PSTAT | 0x08);	
+			stat = envy24ht_rdmt1(sc, ENVY24HT_MT_INT_MASK);
+			envy24ht_wrmt1(sc, ENVY24HT_MT_INT_MASK, stat | ENVY24HT_MT_INT_PMASK);
 		}
 	}
 	else {
@@ -1231,9 +1197,9 @@
 #if 0
 			stat = ENVY24HT_MT_INT_RSTAT | ENVY24HT_MT_INT_RMASK;
 #endif
-			envy24ht_wrmt(sc, ENVY24HT_MT_INT_STAT, (intr & mask) | ENVY24HT_MT_INT_RSTAT, 1);
-			stat = envy24ht_rdmt(sc, ENVY24HT_MT_INT_MASK, 1);
-			envy24ht_wrmt(sc, ENVY24HT_MT_INT_MASK, stat | ENVY24HT_MT_INT_RMASK, 1);
+			envy24ht_wrmt1(sc, ENVY24HT_MT_INT_STAT, (intr & mask) | ENVY24HT_MT_INT_RSTAT);
+			stat = envy24ht_rdmt1(sc, ENVY24HT_MT_INT_MASK);
+			envy24ht_wrmt1(sc, ENVY24HT_MT_INT_MASK, stat | ENVY24HT_MT_INT_RMASK);
 		}
 	}
 
@@ -1253,12 +1219,12 @@
 	else
 		sw = ENVY24HT_MT_PCTL_RSTART;
 
-	stat = envy24ht_rdmt(sc, ENVY24HT_MT_PCTL, 1);
-	envy24ht_wrmt(sc, ENVY24HT_MT_PCTL, stat | sw, 1);
+	stat = envy24ht_rdmt1(sc, ENVY24HT_MT_PCTL);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_PCTL, stat | sw);
 #if(0)
 	DELAY(100);
-	device_printf(sc->dev, "PADDR:0x%08x\n", envy24ht_rdmt(sc, ENVY24HT_MT_PADDR, 4));
-	device_printf(sc->dev, "PCNT:%ld\n", envy24ht_rdmt(sc, ENVY24HT_MT_PCNT, 2));
+	device_printf(sc->dev, "PADDR:0x%08x\n", envy24ht_rdmt4(sc, ENVY24HT_MT_PADDR));
+	device_printf(sc->dev, "PCNT:%ld\n", envy24ht_rdmt2(sc, ENVY24HT_MT_PCNT));
 #endif
 
 	return;
@@ -1277,8 +1243,8 @@
 	else
 		sw = ~ENVY24HT_MT_PCTL_RSTART;
 
-	stat = envy24ht_rdmt(sc, ENVY24HT_MT_PCTL, 1);
-	envy24ht_wrmt(sc, ENVY24HT_MT_PCTL, stat & sw, 1);
+	stat = envy24ht_rdmt1(sc, ENVY24HT_MT_PCTL);
+	envy24ht_wrmt1(sc, ENVY24HT_MT_PCTL, stat & sw);
 
 	return;
 }
@@ -1846,7 +1812,7 @@
 	/* set volume control rate */
 	snd_mtxlock(sc->lock);
 #if 0
-	envy24ht_wrmt(sc, ENVY24HT_MT_VOLRATE, 0x30, 1); /* 0x30 is default value */
+	envy24ht_wrmt1(sc, ENVY24HT_MT_VOLRATE, 0x30); /* 0x30 is default value */
 #endif
 
 	pcm_setflags(sc->dev, pcm_getflags(sc->dev) | SD_F_SOFTPCMVOL);
@@ -1973,7 +1939,7 @@
 		device_printf(sc->dev, "envy24ht_intr(): play\n");
 #endif
 		dsize = sc->psize / 4;
-		ptr = dsize - envy24ht_rdmt(sc, ENVY24HT_MT_PCNT, 2) - 1;
+		ptr = dsize - envy24ht_rdmt2(sc, ENVY24HT_MT_PCNT) - 1;
 #if(0)
 		device_printf(sc->dev, "envy24ht_intr(): ptr = %d-->", ptr);
 #endif
@@ -2002,7 +1968,7 @@
 		device_printf(sc->dev, "envy24ht_intr(): rec\n");
 #endif
 		dsize = sc->rsize / 4;
-		ptr = dsize - envy24ht_rdmt(sc, ENVY24HT_MT_RCNT, 2) - 1;
+		ptr = dsize - envy24ht_rdmt2(sc, ENVY24HT_MT_RCNT) - 1;
 		ptr -= ptr % sc->blk[1];
 		feed = (ptr + dsize - sc->intr[1]) % dsize; 
 		for (i = ENVY24HT_CHAN_REC_ADC1; i <= ENVY24HT_CHAN_REC_SPDIF; i++) {
@@ -2172,18 +2138,18 @@
 #if(0)
 	device_printf(sc->dev, "pbuf(0x%08x)\n", addr);
 #endif
-	envy24ht_wrmt(sc, ENVY24HT_MT_PADDR, addr, 4);
+	envy24ht_wrmt4(sc, ENVY24HT_MT_PADDR, addr);
 #if(0)
-	device_printf(sc->dev, "PADDR-->(0x%08x)\n", envy24ht_rdmt(sc, ENVY24HT_MT_PADDR, 4));
+	device_printf(sc->dev, "PADDR-->(0x%08x)\n", envy24ht_rdmt4(sc, ENVY24HT_MT_PADDR));
 	device_printf(sc->dev, "psize(%ld)\n", sc->psize / 4 - 1);
 #endif
-	envy24ht_wrmt(sc, ENVY24HT_MT_PCNT, sc->psize / 4 - 1, 2);
+	envy24ht_wrmt2(sc, ENVY24HT_MT_PCNT, sc->psize / 4 - 1);
 #if(0)
-	device_printf(sc->dev, "PCNT-->(%ld)\n", envy24ht_rdmt(sc, ENVY24HT_MT_PCNT, 2));
+	device_printf(sc->dev, "PCNT-->(%ld)\n", envy24ht_rdmt2(sc, ENVY24HT_MT_PCNT));
 #endif
 	addr = vtophys(sc->rbuf);
-	envy24ht_wrmt(sc, ENVY24HT_MT_RADDR, addr, 4);
-	envy24ht_wrmt(sc, ENVY24HT_MT_RCNT, sc->rsize / 4 - 1, 2);
+	envy24ht_wrmt4(sc, ENVY24HT_MT_RADDR, addr);
+	envy24ht_wrmt2(sc, ENVY24HT_MT_RCNT, sc->rsize / 4 - 1);
 
 	return 0;
  bad:
@@ -2299,9 +2265,9 @@
 
 	/* reset chip */
 #if 0
-	envy24ht_wrcs(sc, ENVY24HT_CCS_CTL, ENVY24HT_CCS_CTL_RESET, 1);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_CTL, ENVY24HT_CCS_CTL_RESET);
 	DELAY(200);
-	envy24ht_wrcs(sc, ENVY24HT_CCS_CTL, ENVY24HT_CCS_CTL_NATIVE, 1);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_CTL, ENVY24HT_CCS_CTL_NATIVE);
 	DELAY(200);
 
 	/* legacy hardware disable */
@@ -2336,10 +2302,10 @@
 	}
 
 	/* set system configuration */
-	envy24ht_wrcs(sc, ENVY24HT_CCS_SCFG, sc->cfg->scfg, 1);
-	envy24ht_wrcs(sc, ENVY24HT_CCS_ACL, sc->cfg->acl, 1);
-	envy24ht_wrcs(sc, ENVY24HT_CCS_I2S, sc->cfg->i2s, 1);
-	envy24ht_wrcs(sc, ENVY24HT_CCS_SPDIF, sc->cfg->spdif, 1);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_SCFG, sc->cfg->scfg);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_ACL, sc->cfg->acl);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_I2S, sc->cfg->i2s);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_SPDIF, sc->cfg->spdif);
 	envy24ht_gpiosetmask(sc, sc->cfg->gpiomask);
 	envy24ht_gpiosetdir(sc, sc->cfg->gpiodir);
 	envy24ht_gpiowr(sc, sc->cfg->gpiostate);
@@ -2381,9 +2347,9 @@
 #endif
 
 	/* set macro interrupt mask */
-	data = envy24ht_rdcs(sc, ENVY24HT_CCS_IMASK, 1);
-	envy24ht_wrcs(sc, ENVY24HT_CCS_IMASK, data & ~ENVY24HT_CCS_IMASK_PMT, 1);
-	data = envy24ht_rdcs(sc, ENVY24HT_CCS_IMASK, 1);
+	data = envy24ht_rdcs1(sc, ENVY24HT_CCS_IMASK);
+	envy24ht_wrcs1(sc, ENVY24HT_CCS_IMASK, data & ~ENVY24HT_CCS_IMASK_PMT);
+	data = envy24ht_rdcs1(sc, ENVY24HT_CCS_IMASK);
 #if(0)
 	device_printf(sc->dev, "envy24ht_init(): CCS_IMASK-->0x%02x\n", data);
 #endif
@@ -2395,20 +2361,11 @@
 envy24ht_alloc_resource(struct sc_info *sc)
 {
 	/* allocate I/O port resource */
-	sc->csid = PCIR_CCS;
-	sc->cs = bus_alloc_resource(sc->dev, SYS_RES_IOPORT,
-	    &sc->csid, 0, ~0, 1, RF_ACTIVE);
-	sc->mtid = ENVY24HT_PCIR_MT;
-	sc->mt = bus_alloc_resource(sc->dev, SYS_RES_IOPORT,
-	    &sc->mtid, 0, ~0, 1, RF_ACTIVE);
-	if (!sc->cs || !sc->mt) {
-		device_printf(sc->dev, "unable to map IO port space\n");
+	if (bus_alloc_resources(sc->dev, envy24ht_res_spec, sc->res) != 0) {
+		device_printf(sc->dev, "unable to allocate resources\n");
 		return ENXIO;
 	}
-	sc->cst = rman_get_bustag(sc->cs);
-	sc->csh = rman_get_bushandle(sc->cs);
-	sc->mtt = rman_get_bustag(sc->mt);
-	sc->mth = rman_get_bushandle(sc->mt);
+	
 #if(0)
 	device_printf(sc->dev,
 	    "IO port register values\nCCS: 0x%lx\nMT: 0x%lx\n",
@@ -2417,11 +2374,8 @@
 #endif
 
 	/* allocate interupt resource */
-	sc->irqid = 0;
-	sc->irq = bus_alloc_resource(sc->dev, SYS_RES_IRQ, &sc->irqid,
-				 0, ~0, 1, RF_ACTIVE | RF_SHAREABLE);
-	if (!sc->irq ||
-	    snd_setup_intr(sc->dev, sc->irq, 0, envy24ht_intr, sc, &sc->ih)) {
+	if (snd_setup_intr(sc->dev, sc->res[RES_IRQ], 
+	    0, envy24ht_intr, sc, &sc->ih)) {
 		device_printf(sc->dev, "unable to map interrupt\n");
 		return ENXIO;
 	}
@@ -2444,10 +2398,32 @@
 	return 0;
 }
 
+static void
+envy24ht_destroy(device_t dev, struct sc_info *sc)
+{
+	int i;
+
+	if (sc->ih)
+		bus_teardown_intr(dev, sc->res[RES_IRQ], sc->ih);
+	bus_release_resources(dev, envy24ht_res_spec, sc->res);
+	envy24ht_dmafree(sc);
+	if (sc->dmat)
+		bus_dma_tag_destroy(sc->dmat);
+        if (sc->cfg->codec->destroy != NULL) {
+                for (i = 0; i < sc->adcn; i++)
+                        sc->cfg->codec->destroy(sc->adc[i]);
+                for (i = 0; i < sc->dacn; i++)
+                        sc->cfg->codec->destroy(sc->dac[i]);
+        }
+	envy24ht_cfgfree(sc->cfg);
+	if (sc->lock)
+		snd_mtxfree(sc->lock);
+	free(sc, M_ENVY24HT);
+}
+
 static int
 envy24ht_pci_attach(device_t dev)
 {
-	u_int32_t		data;
 	struct sc_info 		*sc;
 	char 			status[SND_STATUSLEN];
 	int			err = 0;
@@ -2468,10 +2444,8 @@
 	sc->dev = dev;
 
 	/* initialize PCI interface */
-	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);
 
 	/* allocate resources */
 	err = envy24ht_alloc_resource(sc);
@@ -2508,37 +2482,16 @@
 	/* set status iformation */
 	snprintf(status, SND_STATUSLEN,
 	    "at io 0x%lx:%ld,0x%lx:%ld irq %ld",
-	    rman_get_start(sc->cs),
-	    rman_get_end(sc->cs) - rman_get_start(sc->cs) + 1,
-	    rman_get_start(sc->mt),
-	    rman_get_end(sc->mt) - rman_get_start(sc->mt) + 1,
-	    rman_get_start(sc->irq));
+	    rman_get_start(sc->res[RES_CS]), rman_get_size(sc->res[RES_CS]),
+	    rman_get_start(sc->res[RES_MT]), rman_get_size(sc->res[RES_MT]),
+	    rman_get_start(sc->res[RES_IRQ]));
 	pcm_setstatus(dev, status);
 
 	return 0;
 
 bad:
-	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);
-	envy24ht_dmafree(sc);
-	if (sc->dmat)
-		bus_dma_tag_destroy(sc->dmat);
-        if (sc->cfg->codec->destroy != NULL) {
-                for (i = 0; i < sc->adcn; i++)
-                        sc->cfg->codec->destroy(sc->adc[i]);
-                for (i = 0; i < sc->dacn; i++)
-                        sc->cfg->codec->destroy(sc->dac[i]);
-        }
-	envy24ht_cfgfree(sc->cfg);
-	if (sc->cs)
-		bus_release_resource(dev, SYS_RES_IOPORT, sc->csid, sc->cs);
-	if (sc->mt)
-		bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt);
-	if (sc->lock)
-		snd_mtxfree(sc->lock);
-	free(sc, M_ENVY24HT);
+	envy24ht_destroy(dev, sc);
+
 	return err;
 }
 
@@ -2547,7 +2500,6 @@
 {
 	struct sc_info *sc;
 	int r;
-	int i;
 
 #if(0)
 	device_printf(dev, "envy24ht_pci_detach()\n");
@@ -2559,21 +2511,8 @@
 	if (r)
 		return r;
 
-	envy24ht_dmafree(sc);
-	if (sc->cfg->codec->destroy != NULL) {
-		for (i = 0; i < sc->adcn; i++)
-			sc->cfg->codec->destroy(sc->adc[i]);
-		for (i = 0; i < sc->dacn; i++)
-			sc->cfg->codec->destroy(sc->dac[i]);
-	}
-	envy24ht_cfgfree(sc->cfg);
-	bus_dma_tag_destroy(sc->dmat);
-	bus_teardown_intr(dev, sc->irq, sc->ih);
-	bus_release_resource(dev, SYS_RES_IRQ, sc->irqid, sc->irq);
-	bus_release_resource(dev, SYS_RES_IOPORT, sc->csid, sc->cs);
-	bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt);
-	snd_mtxfree(sc->lock);
-	free(sc, M_ENVY24HT);
+	envy24ht_destroy(dev, sc);
+
 	return 0;
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707310438.l6V4cMFe044822>