diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-05 15:49:38 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-05 15:49:38 +0200 |
commit | 2f457f5f1987a36db6e07bf8883f1f47bab9803d (patch) | |
tree | a2de4ad9ab0c859898b56b6d914c94c57603055e /sys | |
parent | 4de62918a318391390f2c39673366f2a198c552c (diff) |
audioac97: reserve ioport ranges
Diffstat (limited to 'sys')
-rw-r--r-- | sys/src/9/pc/audioac97.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/sys/src/9/pc/audioac97.c b/sys/src/9/pc/audioac97.c index e0732dd6b..977fa4cf3 100644 --- a/sys/src/9/pc/audioac97.c +++ b/sys/src/9/pc/audioac97.c @@ -408,25 +408,33 @@ ac97reset(Audio *adev) Found: adev->ctlr = ctlr; ctlr->adev = adev; - if(p->vid == 0x1039 && p->did == 0x7012) - ctlr->sis7012 = 1; - if(p->mem[0].size == 64){ - ctlr->port = p->mem[0].bar & ~3; - ctlr->mixport = p->mem[1].bar & ~3; - } else if(p->mem[1].size == 64){ - ctlr->port = p->mem[1].bar & ~3; - ctlr->mixport = p->mem[0].bar & ~3; - } else if(p->mem[0].size == 256){ /* sis7012 */ - ctlr->port = p->mem[1].bar & ~3; - ctlr->mixport = p->mem[0].bar & ~3; - } else if(p->mem[1].size == 256){ - ctlr->port = p->mem[0].bar & ~3; - ctlr->mixport = p->mem[1].bar & ~3; + i = 1; + if(p->mem[0].size == 64) + i = 0; + else if(p->mem[1].size == 64) + i = 1; + else if(p->mem[0].size == 256) /* sis7012 */ + i = 1; + else if(p->mem[1].size == 256) + i = 0; + ctlr->port = p->mem[i].bar & ~3; + if(ioalloc(ctlr->port, p->mem[i].size, 0, "ac97") < 0){ + print("ac97: ioalloc failed for port 0x%04lux\n", ctlr->port); + return -1; + } + i = (i+1) & 1; + ctlr->mixport = p->mem[i].bar & ~3; + if(ioalloc(ctlr->mixport, p->mem[i].size, 0, "ac97mix") < 0){ + print("ac97: ioalloc failed for mixport 0x%04lux\n", ctlr->mixport); + iofree(ctlr->port); + return -1; } irq = p->intl; tbdf = p->tbdf; + if(p->vid == 0x1039 && p->did == 0x7012) + ctlr->sis7012 = 1; print("#A%d: ac97 port 0x%04lux mixport 0x%04lux irq %d\n", adev->ctlrno, ctlr->port, ctlr->mixport, irq); |