From owner-p4-projects@FreeBSD.ORG Tue Jul 31 05:28:24 2007 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4ABD916A46B; Tue, 31 Jul 2007 05:28:24 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1D04416A420 for ; Tue, 31 Jul 2007 05:28:24 +0000 (UTC) (envelope-from loafier@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 8AFF313C46B for ; Tue, 31 Jul 2007 05:28:23 +0000 (UTC) (envelope-from loafier@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id l6V5SNOa073984 for ; Tue, 31 Jul 2007 05:28:23 GMT (envelope-from loafier@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id l6V5SNNe073981 for perforce@freebsd.org; Tue, 31 Jul 2007 05:28:23 GMT (envelope-from loafier@FreeBSD.org) Date: Tue, 31 Jul 2007 05:28:23 GMT Message-Id: <200707310528.l6V5SNNe073981@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to loafier@FreeBSD.org using -f From: Christopher Davis To: Perforce Change Reviews Cc: Subject: PERFORCE change 124402 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Jul 2007 05:28:24 -0000 http://perforce.freebsd.org/chv.cgi?CH=124402 Change 124402 by loafier@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) {