summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/sound/mad16.h
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1999-01-01 08:18:13 +0000
committerpeter <peter@FreeBSD.org>1999-01-01 08:18:13 +0000
commitd713c6aca4942e88e9afb66a012c176a3b3c93dd (patch)
tree145a2f9aaed47d75ef5882d97d90e8835c70db2c /sys/i386/isa/sound/mad16.h
parentcfef427a396353878f1fdad225686030324bda8e (diff)
downloadFreeBSD-src-d713c6aca4942e88e9afb66a012c176a3b3c93dd.zip
FreeBSD-src-d713c6aca4942e88e9afb66a012c176a3b3c93dd.tar.gz
Part 2 of pcvt/voxware revival. I hope I have not clobbered any other
deltas, but it is possible since I had a few merge conflicts over the last few days while this has been sitting ready to go. (Part 1 was committed to the config files, but cvs aborted grrr..) Approved by: core
Diffstat (limited to 'sys/i386/isa/sound/mad16.h')
-rw-r--r--sys/i386/isa/sound/mad16.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/sys/i386/isa/sound/mad16.h b/sys/i386/isa/sound/mad16.h
new file mode 100644
index 0000000..0370973
--- /dev/null
+++ b/sys/i386/isa/sound/mad16.h
@@ -0,0 +1,91 @@
+
+/*
+ * Initialization code for OPTI MAD16 interface chip by
+ * Davor Jadrijevic <davor@emard.pub.hr>
+ * (Included by ad1848.c when MAD16 support is enabled)
+ *
+ * It looks like MAD16 is similar than the Mozart chip (OAK OTI-601).
+ * It could be even possible that these chips are exactly the same. Can
+ * anybody confirm this?
+ */
+
+static void wr_a_mad16(int base, int v, int a)
+{
+ OUTB(a, base + 0xf);
+ OUTB(v, base + 0x11);
+}
+
+static void wr_b_mad16(int base, int v, int a)
+{
+ OUTB(a, base + 0xf);
+ OUTB(v, base + 0xd);
+}
+
+/*
+static int rd_a_mad16(int base, int a)
+{
+ OUTB(a, base + 0xf);
+ return INB(base + 0x11);
+}
+*/
+
+static int rd_b_mad16(int base, int a)
+{
+ OUTB(a, base + 0xf);
+ return INB(base + 0xd);
+}
+
+/*
+static int rd_0_mad16(int base, int a)
+{
+ OUTB(a, base + 0xf);
+ return INB(base + 0xf);
+}
+
+static void wr_ad(int base, int v, int a)
+{
+ OUTB(a, base + 4);
+ OUTB(v, base + 5);
+}
+
+static int rd_ad(int base, int a)
+{
+ OUTB(a, base + 4);
+ return INB(base + 5);
+}
+*/
+
+static int mad16init(int adr)
+{
+ int j;
+ long i;
+
+ static int ad1848_bases[] =
+{ 0x220, -1, -1, 0x240, -1, -1, -1, -1, 0x530, 0xE80, 0xF40, 0x604, 0 };
+
+ int mad16_base = 0xf80, ad1848_base;
+
+
+ for(j = 0; (j < 16) && (ad1848_bases[j] != 0); j++)
+ if(adr == ad1848_bases[j])
+ break;
+
+ if( (ad1848_base = ad1848_bases[j]) < 0x530)
+ {
+ printk("Unknown MAD16 setting 0x%3X\n", adr);
+ return -1;
+ }
+
+ /* printk("OPTi MAD16 WSS at 0x%3X\n", ad1848_base); */
+
+ rd_b_mad16(mad16_base, 0xe2);
+ wr_a_mad16(mad16_base, 0x1a, 0xe2);
+ wr_b_mad16(mad16_base, j * 16 + 1, 0xe2);
+ wr_a_mad16(mad16_base, 0x1a, 0xe2);
+ for( i = 0; i < 10000; i++)
+ if( (INB(ad1848_base+4) & 0x80) == 0 )
+ break;
+
+ return 0;
+};
+
OpenPOWER on IntegriCloud