PERFORCE change 124402 for review

Christopher Davis loafier at FreeBSD.org
Tue Jul 31 05:28:24 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=124402

Change 124402 by loafier at chrisdsoc on 2007/07/31 05:28:08

	Modified write functions and tags.

Affected files ...

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

Differences ...

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

@@ -130,8 +130,6 @@
 
 struct fm801_info {
 	int			type;
-	bus_space_tag_t		st;
-	bus_space_handle_t	sh;
 	bus_dma_tag_t		parent_dmat;
 
 	device_t		dev;
@@ -166,37 +164,13 @@
 };
 
 /* Bus Read / Write routines */
-static u_int32_t
-fm801_rd(struct fm801_info *fm801, int regno, int size)
-{
-	switch(size) {
-	case 1:
-		return (bus_space_read_1(fm801->st, fm801->sh, regno));
-	case 2:
-		return (bus_space_read_2(fm801->st, fm801->sh, regno));
-	case 4:
-		return (bus_space_read_4(fm801->st, fm801->sh, regno));
-	default:
-		return 0xffffffff;
-	}
-}
-
-static void
-fm801_wr(struct fm801_info *fm801, int regno, u_int32_t data, int size)
-{
+#define fm801_rd1(_sc, _reg) bus_read_1((_sc)->reg, _reg)
+#define fm801_rd2(_sc, _reg) bus_read_2((_sc)->reg, _reg)
+#define fm801_rd4(_sc, _reg) bus_read_4((_sc)->reg, _reg)
+#define fm801_wr1(_sc, _reg, _val) bus_write_1((_sc)->reg, _reg, _val)
+#define fm801_wr2(_sc, _reg, _val) bus_write_2((_sc)->reg, _reg, _val)
+#define fm801_wr4(_sc, _reg, _val) bus_write_4((_sc)->reg, _reg, _val)
 
-	switch(size) {
-	case 1:
-		bus_space_write_1(fm801->st, fm801->sh, regno, data);
-		break;
-	case 2:
-		bus_space_write_2(fm801->st, fm801->sh, regno, data);
-		break;
-	case 4:
-		bus_space_write_4(fm801->st, fm801->sh, regno, data);
-		break;
-	}
-}
 
 /* -------------------------------------------------------------------- */
 /*
@@ -209,7 +183,7 @@
 	struct fm801_info *fm801 = (struct fm801_info *)devinfo;
 	int i;
 
-	for (i = 0; i < TIMO && fm801_rd(fm801,FM_CODEC_CMD,2) & FM_CODEC_CMD_BUSY; i++) {
+	for (i = 0; i < TIMO && fm801_rd2(fm801,FM_CODEC_CMD) & FM_CODEC_CMD_BUSY; i++) {
 		DELAY(10000);
 		DPRINT("fm801 rdcd: 1 - DELAY\n");
 	}
@@ -218,9 +192,9 @@
 		return 0;
 	}
 
-	fm801_wr(fm801,FM_CODEC_CMD, regno|FM_CODEC_CMD_READ,2);
+	fm801_wr2(fm801,FM_CODEC_CMD, regno|FM_CODEC_CMD_READ);
 
-	for (i = 0; i < TIMO && !(fm801_rd(fm801,FM_CODEC_CMD,2) & FM_CODEC_CMD_VALID); i++)
+	for (i = 0; i < TIMO && !(fm801_rd2(fm801,FM_CODEC_CMD) & FM_CODEC_CMD_VALID); i++)
 	{
 		DELAY(10000);
 		DPRINT("fm801 rdcd: 2 - DELAY\n");
@@ -230,7 +204,7 @@
 		return 0;
 	}
 
-	return fm801_rd(fm801,FM_CODEC_DATA,2);
+	return fm801_rd2(fm801,FM_CODEC_DATA);
 }
 
 static int
@@ -244,7 +218,7 @@
 	if(regno == AC97_REG_RECSEL)	return;
 */
 	/* Poll until codec is ready */
-	for (i = 0; i < TIMO && fm801_rd(fm801,FM_CODEC_CMD,2) & FM_CODEC_CMD_BUSY; i++) {
+	for (i = 0; i < TIMO && fm801_rd2(fm801,FM_CODEC_CMD) & FM_CODEC_CMD_BUSY; i++) {
 		DELAY(10000);
 		DPRINT("fm801 rdcd: 1 - DELAY\n");
 	}
@@ -253,11 +227,11 @@
 		return -1;
 	}
 
-	fm801_wr(fm801,FM_CODEC_DATA,data, 2);
-	fm801_wr(fm801,FM_CODEC_CMD, regno,2);
+	fm801_wr2(fm801,FM_CODEC_DATA,data);
+	fm801_wr2(fm801,FM_CODEC_CMD, regno);
 
 	/* wait until codec is ready */
-	for (i = 0; i < TIMO && fm801_rd(fm801,FM_CODEC_CMD,2) & FM_CODEC_CMD_BUSY; i++) {
+	for (i = 0; i < TIMO && fm801_rd2(fm801,FM_CODEC_CMD) & FM_CODEC_CMD_BUSY; i++) {
 		DELAY(10000);
 		DPRINT("fm801 wrcd: 2 - DELAY\n");
 	}
@@ -285,40 +259,40 @@
 fm801_intr(void *p)
 {
 	struct fm801_info 	*fm801 = (struct fm801_info *)p;
-	u_int32_t       	intsrc = fm801_rd(fm801, FM_INTSTATUS, 2);
+	u_int32_t       	intsrc = fm801_rd2(fm801, FM_INTSTATUS);
 
 	DPRINT("\nfm801_intr intsrc 0x%x ", intsrc);
 
 	if(intsrc & FM_INTSTATUS_PLAY) {
 		fm801->play_flip++;
 		if(fm801->play_flip & 1) {
-			fm801_wr(fm801, FM_PLAY_DMABUF1, fm801->play_start,4);
+			fm801_wr4(fm801, FM_PLAY_DMABUF1, fm801->play_start);
 		} else
-			fm801_wr(fm801, FM_PLAY_DMABUF2, fm801->play_nextblk,4);
+			fm801_wr4(fm801, FM_PLAY_DMABUF2, fm801->play_nextblk);
 		chn_intr(fm801->pch.channel);
 	}
 
 	if(intsrc & FM_INTSTATUS_REC) {
 		fm801->rec_flip++;
 		if(fm801->rec_flip & 1) {
-			fm801_wr(fm801, FM_REC_DMABUF1, fm801->rec_start,4);
+			fm801_wr4(fm801, FM_REC_DMABUF1, fm801->rec_start);
 		} else
-			fm801_wr(fm801, FM_REC_DMABUF2, fm801->rec_nextblk,4);
+			fm801_wr4(fm801, FM_REC_DMABUF2, fm801->rec_nextblk);
 		chn_intr(fm801->rch.channel);
 	}
 
 	if ( intsrc & FM_INTSTATUS_MPU ) {
 		/* This is a TODOish thing... */
-		fm801_wr(fm801, FM_INTSTATUS, intsrc & FM_INTSTATUS_MPU,2);
+		fm801_wr2(fm801, FM_INTSTATUS, intsrc & FM_INTSTATUS_MPU);
 	}
 
 	if ( intsrc & FM_INTSTATUS_VOL ) {
 		/* This is a TODOish thing... */
-		fm801_wr(fm801, FM_INTSTATUS, intsrc & FM_INTSTATUS_VOL,2);
+		fm801_wr2(fm801, FM_INTSTATUS, intsrc & FM_INTSTATUS_VOL);
 	}
 
 	DPRINT("fm801_intr clear\n\n");
-	fm801_wr(fm801, FM_INTSTATUS, intsrc & (FM_INTSTATUS_PLAY | FM_INTSTATUS_REC), 2);
+	fm801_wr2(fm801, FM_INTSTATUS, intsrc & (FM_INTSTATUS_PLAY | FM_INTSTATUS_REC));
 }
 
 /* -------------------------------------------------------------------- */
@@ -452,36 +426,34 @@
 			fm801->play_start = baseaddr;
 			fm801->play_nextblk = fm801->play_start + fm801->play_blksize;
 			fm801->play_flip = 0;
-			fm801_wr(fm801, FM_PLAY_DMALEN, fm801->play_blksize - 1, 2);
-			fm801_wr(fm801, FM_PLAY_DMABUF1,fm801->play_start,4);
-			fm801_wr(fm801, FM_PLAY_DMABUF2,fm801->play_nextblk,4);
-			fm801_wr(fm801, FM_PLAY_CTL,
-					FM_PLAY_START | FM_PLAY_STOPNOW | fm801->play_fmt | fm801->play_shift,
-					2 );
+			fm801_wr2(fm801, FM_PLAY_DMALEN, fm801->play_blksize - 1);
+			fm801_wr4(fm801, FM_PLAY_DMABUF1,fm801->play_start);
+			fm801_wr4(fm801, FM_PLAY_DMABUF2,fm801->play_nextblk);
+			fm801_wr2(fm801, FM_PLAY_CTL,
+					FM_PLAY_START | FM_PLAY_STOPNOW | fm801->play_fmt | fm801->play_shift);
 			} else {
 			fm801->play_flip = 0;
-			k1 = fm801_rd(fm801, FM_PLAY_CTL,2);
-			fm801_wr(fm801, FM_PLAY_CTL,
+			k1 = fm801_rd2(fm801, FM_PLAY_CTL);
+			fm801_wr2(fm801, FM_PLAY_CTL,
 				(k1 & ~(FM_PLAY_STOPNOW | FM_PLAY_START)) |
-				FM_PLAY_BUF1_LAST | FM_PLAY_BUF2_LAST, 2 );
+				FM_PLAY_BUF1_LAST | FM_PLAY_BUF2_LAST);
 		}
 	} else if(ch->dir == PCMDIR_REC) {
 		if (go == PCMTRIG_START) {
 			fm801->rec_start = baseaddr;
 			fm801->rec_nextblk = fm801->rec_start + fm801->rec_blksize;
 			fm801->rec_flip = 0;
-			fm801_wr(fm801, FM_REC_DMALEN, fm801->rec_blksize - 1, 2);
-			fm801_wr(fm801, FM_REC_DMABUF1,fm801->rec_start,4);
-			fm801_wr(fm801, FM_REC_DMABUF2,fm801->rec_nextblk,4);
-			fm801_wr(fm801, FM_REC_CTL,
-					FM_REC_START | FM_REC_STOPNOW | fm801->rec_fmt | fm801->rec_shift,
-					2 );
+			fm801_wr2(fm801, FM_REC_DMALEN, fm801->rec_blksize - 1);
+			fm801_wr4(fm801, FM_REC_DMABUF1,fm801->rec_start);
+			fm801_wr4(fm801, FM_REC_DMABUF2,fm801->rec_nextblk);
+			fm801_wr2(fm801, FM_REC_CTL,
+					FM_REC_START | FM_REC_STOPNOW | fm801->rec_fmt | fm801->rec_shift);
 			} else {
 			fm801->rec_flip = 0;
-			k1 = fm801_rd(fm801, FM_REC_CTL,2);
-			fm801_wr(fm801, FM_REC_CTL,
+			k1 = fm801_rd2(fm801, FM_REC_CTL);
+			fm801_wr2(fm801, FM_REC_CTL,
 				(k1 & ~(FM_REC_STOPNOW | FM_REC_START)) |
-				FM_REC_BUF1_LAST | FM_REC_BUF2_LAST, 2);
+				FM_REC_BUF1_LAST | FM_REC_BUF2_LAST);
 		}
 	}
 
@@ -497,15 +469,15 @@
 	int result = 0;
 
 	if (ch->dir == PCMDIR_PLAY) {
-		result = fm801_rd(fm801,
+		result = fm801_rd4(fm801,
 			(fm801->play_flip&1) ?
-			FM_PLAY_DMABUF2:FM_PLAY_DMABUF1, 4) - fm801->play_start;
+			FM_PLAY_DMABUF2:FM_PLAY_DMABUF1) - fm801->play_start;
 	}
 
 	if (ch->dir == PCMDIR_REC) {
-		result = fm801_rd(fm801,
+		result = fm801_rd4(fm801,
 			(fm801->rec_flip&1) ?
-			FM_REC_DMABUF2:FM_REC_DMABUF1, 4) - fm801->rec_start;
+			FM_REC_DMABUF2:FM_REC_DMABUF1) - fm801->rec_start;
 	}
 
 	return result;
@@ -540,26 +512,26 @@
 	u_int32_t k1;
 
 	/* reset codec */
-	fm801_wr(fm801, FM_CODEC_CTL, 0x0020,2);
+	fm801_wr2(fm801, FM_CODEC_CTL, 0x0020);
 	DELAY(100000);
-	fm801_wr(fm801, FM_CODEC_CTL, 0x0000,2);
+	fm801_wr2(fm801, FM_CODEC_CTL, 0x0000);
 	DELAY(100000);
 
-	fm801_wr(fm801, FM_PCM_VOLUME, 0x0808,2);
-	fm801_wr(fm801, FM_FM_VOLUME, 0x0808,2);
-	fm801_wr(fm801, FM_I2S_VOLUME, 0x0808,2);
-	fm801_wr(fm801, 0x40,0x107f,2);	/* enable legacy audio */
+	fm801_wr2(fm801, FM_PCM_VOLUME, 0x0808);
+	fm801_wr2(fm801, FM_FM_VOLUME, 0x0808);
+	fm801_wr2(fm801, FM_I2S_VOLUME, 0x0808);
+	fm801_wr2(fm801, 0x40,0x107f);	/* enable legacy audio */
 
-	fm801_wr((void *)fm801, FM_RECORD_SOURCE, 0x0000,2);
+	fm801_wr2(fm801, FM_RECORD_SOURCE, 0x0000);
 
 	/* Unmask playback, record and mpu interrupts, mask the rest */
-	k1 = fm801_rd((void *)fm801, FM_INTMASK,2);
-	fm801_wr(fm801, FM_INTMASK,
+	k1 = fm801_rd2(fm801, FM_INTMASK);
+	fm801_wr2(fm801, FM_INTMASK,
 		(k1 & ~(FM_INTMASK_PLAY | FM_INTMASK_REC | FM_INTMASK_MPU)) |
-		FM_INTMASK_VOL,2);
-	fm801_wr(fm801, FM_INTSTATUS,
+		FM_INTMASK_VOL);
+	fm801_wr2(fm801, FM_INTSTATUS,
 		FM_INTSTATUS_PLAY | FM_INTSTATUS_REC | FM_INTSTATUS_MPU |
-		FM_INTSTATUS_VOL,2);
+		FM_INTSTATUS_VOL);
 
 	DPRINT("FM801 init Ok\n");
 	return 0;
@@ -568,7 +540,6 @@
 static int
 fm801_pci_attach(device_t dev)
 {
-	u_int32_t 		data;
 	struct ac97_info 	*codec = 0;
 	struct fm801_info 	*fm801;
 	int 			i;
@@ -578,10 +549,9 @@
 	fm801 = malloc(sizeof(*fm801), M_DEVBUF, M_WAITOK | M_ZERO);
 	fm801->type = pci_get_devid(dev);
 
-	data = pci_read_config(dev, PCIR_COMMAND, 2);
-	data |= (PCIM_CMD_PORTEN|PCIM_CMD_MEMEN|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_MEMORY);
+	pci_enable_io(dev, SYS_RES_IOPORT);
 
 	for (i = 0; (mapped == 0) && (i < PCI_MAXMAPS_0); i++) {
 		fm801->regid = PCIR_BAR(i);
@@ -597,11 +567,8 @@
 							    RF_ACTIVE);
 		}
 
-		if(fm801->reg) {
-			fm801->st = rman_get_bustag(fm801->reg);
-			fm801->sh = rman_get_bushandle(fm801->reg);
+		if(fm801->reg)
 			mapped++;
-		}
 	}
 
 	if (mapped == 0) {


More information about the p4-projects mailing list