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