1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| --- atiixp.cFri Jul 25 10:32:00 2008
+++ atiixp.c.ozzFri Jul 25 10:32:46 2008
@@ -56,8 +56,8 @@
#include <dev /sound/pcm/sound.h>
#include </dev><dev /sound/pcm/ac97.h>
-#include </dev><dev /pci/pcireg.h>
-#include </dev><dev /pci/pcivar.h>
+#include <pci /pcireg.h>
+#include </pci><pci /pcivar.h>
#include <sys /sysctl.h>
#include </sys><sys /endian.h>
@@ -65,6 +65,8 @@
+#define ATI_IXP_DEFAULT_BUFSZ 16384
+
struct atiixp_dma_op {
volatile uint32_t addr;
volatile uint16_t status;
@@ -521,7 +523,7 @@
uint32_t addr, blksz;
int i;
-addr = sndbuf_getbufaddr(ch->buffer);
+addr = vtophys(sndbuf_getbuf(ch->buffer));
blksz = sndbuf_getblksz(ch->buffer);
for (i = 0; i < ch->dma_segs; i++) {
@@ -586,7 +588,7 @@
uint32_t addr, align, retry, sz;
volatile uint32_t ptr;
-addr = sndbuf_getbufaddr(ch->buffer);
+addr = vtophys(sndbuf_getbuf(ch->buffer));
align = (ch->fmt & AFMT_32BIT) ? 7 : 3;
retry = 100;
sz = sndbuf_getblksz(ch->buffer) * ch->dma_segs;
@@ -744,7 +746,10 @@
/* wait for the interrupts to happen */
timeout = 100;
while (--timeout) {
-msleep(sc, sc->lock, PWAIT, "ixpslp", 1);
+/*msleep(sc, sc->lock, PWAIT, "ixpslp", 1); */
+atiixp_unlock(sc);
+DELAY(1000);
+atiixp_lock(sc);
if (sc->codec_not_ready_bits)
break;
}
@@ -816,8 +821,7 @@
pcm_addchan(sc->dev, PCMDIR_REC, &atiixp_chan_class, sc);
snprintf(status, SND_STATUSLEN, "at memory 0x%lx irq %ld %s",
-rman_get_start(sc->reg), rman_get_start(sc->irq),
-PCM_KLDSTRING(snd_atiixp));
+rman_get_start(sc->reg), rman_get_start(sc->irq));
pcm_setstatus(sc->dev, status);
@@ -882,7 +886,8 @@
if (vendor == atiixp_hw[i].vendor &&
devid == atiixp_hw[i].devid) {
device_set_desc(dev, atiixp_hw[i].desc);
-return BUS_PROBE_DEFAULT;
+/*return BUS_PROBE_DEFAULT; */
+return 0;
}
}
@@ -968,7 +973,6 @@
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
-/*flags*/0, /*lockfunc*/NULL,
/*lockarg*/NULL, &sc->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
@@ -981,7 +985,6 @@
/*maxsize*/sc->dma_segs * ATI_IXP_NCHANS *
sizeof(struct atiixp_dma_op),
/*nsegments*/1, /*maxsegz*/0x3ffff,
-/*flags*/0, /*lockfunc*/NULL,
/*lockarg*/NULL, &sc->sgd_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
@@ -1127,5 +1130,5 @@
};
DRIVER_MODULE(snd_atiixp, pci, atiixp_driver, pcm_devclass, 0, 0);
-MODULE_DEPEND(snd_atiixp, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
+MODULE_DEPEND(snd_atiixp, snd_pcm, PCM_MINVER, PCM_PREFVER, PCM_MAXVER);
MODULE_VERSION(snd_atiixp, 1);
</sys></pci></dev> |