summaryrefslogtreecommitdiffstats
path: root/drivers/sound
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-06-19 22:45:37 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-06-19 22:45:37 +0000
commit6d403070f28cd44860fdb3a53be5da0275c65cf4 (patch)
tree0d0e7fe7b5fb7568d19e11d7d862b77a866ce081 /drivers/sound
parentecf1bf5f6c2e668d03b0a9fb026db7aa41e292e1 (diff)
Merge with 2.4.0-test1-ac21 + pile of MIPS cleanups to make merging
possible. Chainsawed RM200 kernel to compile again. Jazz machine status unknown.
Diffstat (limited to 'drivers/sound')
-rw-r--r--drivers/sound/724hwmcode.h1575
-rw-r--r--drivers/sound/Config.in9
-rw-r--r--drivers/sound/Hwmcode.h804
-rw-r--r--drivers/sound/Makefile1
-rw-r--r--drivers/sound/ac97_codec.c63
-rw-r--r--drivers/sound/awe_wave.c9
-rw-r--r--drivers/sound/cmpci.c16
-rw-r--r--drivers/sound/cs4232.c5
-rw-r--r--drivers/sound/dmasound/dmasound_awacs.c6
-rw-r--r--drivers/sound/dmasound/dmasound_core.c13
-rw-r--r--drivers/sound/emu10k1/audio.c7
-rw-r--r--drivers/sound/emu10k1/main.c2
-rw-r--r--drivers/sound/emu10k1/midi.c12
-rw-r--r--drivers/sound/emu10k1/mixer.c4
-rw-r--r--drivers/sound/es1370.c12
-rw-r--r--drivers/sound/es1371.c16
-rw-r--r--drivers/sound/esssolo1.c12
-rw-r--r--drivers/sound/i810_audio.c105
-rw-r--r--drivers/sound/maestro.c17
-rw-r--r--drivers/sound/msnd.c1
-rw-r--r--drivers/sound/nm256_audio.c1
-rw-r--r--drivers/sound/pas2_mixer.c2
-rw-r--r--drivers/sound/sb_card.c13
-rw-r--r--drivers/sound/skeleton.c8
-rw-r--r--drivers/sound/sonicvibes.c12
-rw-r--r--drivers/sound/sound_core.c22
-rw-r--r--drivers/sound/soundcard.c4
-rw-r--r--drivers/sound/trident.c123
-rw-r--r--drivers/sound/via82cxxx_audio.c325
-rw-r--r--drivers/sound/wavfront.c3
-rw-r--r--drivers/sound/ymf_sb.c867
31 files changed, 3815 insertions, 254 deletions
diff --git a/drivers/sound/724hwmcode.h b/drivers/sound/724hwmcode.h
new file mode 100644
index 000000000..756583529
--- /dev/null
+++ b/drivers/sound/724hwmcode.h
@@ -0,0 +1,1575 @@
+//=============================================================================
+// Copyright (c) 1997-1999 Yamaha Corporation. All Rights Reserved.
+//
+// Title:
+// hwmcode.c
+// Desc:
+// micro-code for CTRL & DSP
+//=============================================================================
+#ifndef _HWMCODE_
+#define _HWMCODE_
+
+static unsigned long int DspInst[] = {
+ 0x00000081, 0x000001a4, 0x0000000a, 0x0000002f,
+ 0x00080253, 0x01800317, 0x0000407b, 0x0000843f,
+ 0x0001483c, 0x0001943c, 0x0005d83c, 0x00001c3c,
+ 0x0000c07b, 0x00050c3f, 0x0121503c, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000
+};
+
+static unsigned long int CntrlInst[] = {
+ 0x000007, 0x240007, 0x0C0007, 0x1C0007,
+ 0x060007, 0x700002, 0x000020, 0x030040,
+ 0x007104, 0x004286, 0x030040, 0x000F0D,
+ 0x000810, 0x20043A, 0x000282, 0x00020D,
+ 0x000810, 0x20043A, 0x001282, 0x200E82,
+ 0x001A82, 0x032D0D, 0x000810, 0x10043A,
+ 0x02D38D, 0x000810, 0x18043A, 0x00010D,
+ 0x020015, 0x0000FD, 0x000020, 0x038860,
+ 0x039060, 0x038060, 0x038040, 0x038040,
+ 0x038040, 0x018040, 0x000A7D, 0x038040,
+ 0x038040, 0x018040, 0x200402, 0x000882,
+ 0x08001A, 0x000904, 0x015986, 0x000007,
+ 0x260007, 0x000007, 0x000007, 0x018A06,
+ 0x000007, 0x030C8D, 0x000810, 0x18043A,
+ 0x260007, 0x00087D, 0x018042, 0x00160A,
+ 0x04A206, 0x000007, 0x00218D, 0x000810,
+ 0x08043A, 0x21C206, 0x000007, 0x0007FD,
+ 0x018042, 0x08000A, 0x000904, 0x029386,
+ 0x000195, 0x090D04, 0x000007, 0x000820,
+ 0x0000F5, 0x000B7D, 0x01F060, 0x0000FD,
+ 0x032206, 0x018040, 0x000A7D, 0x038042,
+ 0x13804A, 0x18000A, 0x001820, 0x059060,
+ 0x058860, 0x018040, 0x0000FD, 0x018042,
+ 0x70000A, 0x000115, 0x071144, 0x032386,
+ 0x030000, 0x007020, 0x034A06, 0x018040,
+ 0x00348D, 0x000810, 0x08043A, 0x21EA06,
+ 0x000007, 0x02D38D, 0x000810, 0x18043A,
+ 0x018206, 0x000007, 0x240007, 0x000F8D,
+ 0x000810, 0x00163A, 0x002402, 0x005C02,
+ 0x0028FD, 0x000020, 0x018040, 0x08000D,
+ 0x000815, 0x510984, 0x000007, 0x00004D,
+ 0x000E5D, 0x000E02, 0x00418D, 0x000810,
+ 0x08043A, 0x2C8A06, 0x000007, 0x00008D,
+ 0x000924, 0x000F02, 0x00458D, 0x000810,
+ 0x08043A, 0x2C8A06, 0x000007, 0x00387D,
+ 0x018042, 0x08000A, 0x001015, 0x010984,
+ 0x018386, 0x000007, 0x01AA06, 0x000007,
+ 0x0008FD, 0x018042, 0x18000A, 0x001904,
+ 0x218086, 0x280007, 0x001810, 0x28043A,
+ 0x280C02, 0x00000D, 0x000810, 0x28143A,
+ 0x08808D, 0x000820, 0x0002FD, 0x018040,
+ 0x200007, 0x00020D, 0x189904, 0x000007,
+ 0x00402D, 0x0000BD, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x055A86, 0x000007,
+ 0x000100, 0x000A20, 0x00047D, 0x018040,
+ 0x018042, 0x20000A, 0x003015, 0x012144,
+ 0x034986, 0x000007, 0x002104, 0x034986,
+ 0x000007, 0x000F8D, 0x000810, 0x280C3A,
+ 0x023944, 0x06C986, 0x000007, 0x001810,
+ 0x28043A, 0x08810D, 0x000820, 0x0002FD,
+ 0x018040, 0x200007, 0x002810, 0x78003A,
+ 0x00688D, 0x000810, 0x08043A, 0x288A06,
+ 0x000007, 0x00400D, 0x001015, 0x189904,
+ 0x292904, 0x393904, 0x000007, 0x060206,
+ 0x000007, 0x0004F5, 0x00007D, 0x000020,
+ 0x00008D, 0x010860, 0x018040, 0x00047D,
+ 0x038042, 0x21804A, 0x18000A, 0x021944,
+ 0x215886, 0x000007, 0x004075, 0x71F104,
+ 0x000007, 0x010042, 0x28000A, 0x002904,
+ 0x212086, 0x000007, 0x003C0D, 0x30A904,
+ 0x000007, 0x00077D, 0x018042, 0x08000A,
+ 0x000904, 0x07DA86, 0x00057D, 0x002820,
+ 0x03B060, 0x07F206, 0x018040, 0x003020,
+ 0x03A860, 0x018040, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x07FA86, 0x000007,
+ 0x00057D, 0x018042, 0x28040A, 0x000E8D,
+ 0x000810, 0x280C3A, 0x00000D, 0x000810,
+ 0x28143A, 0x09000D, 0x000820, 0x0002FD,
+ 0x018040, 0x200007, 0x003DFD, 0x000020,
+ 0x018040, 0x00107D, 0x008D8D, 0x000810,
+ 0x08043A, 0x288A06, 0x000007, 0x000815,
+ 0x08001A, 0x010984, 0x095186, 0x00137D,
+ 0x200500, 0x280F20, 0x338F60, 0x3B8F60,
+ 0x438F60, 0x4B8F60, 0x538F60, 0x5B8F60,
+ 0x038A60, 0x018040, 0x007FBD, 0x383DC4,
+ 0x000007, 0x001A7D, 0x001375, 0x018042,
+ 0x09004A, 0x10000A, 0x0B8D04, 0x139504,
+ 0x000007, 0x000820, 0x019060, 0x001104,
+ 0x212086, 0x010040, 0x0017FD, 0x018042,
+ 0x08000A, 0x000904, 0x212286, 0x000007,
+ 0x00197D, 0x038042, 0x09804A, 0x10000A,
+ 0x000924, 0x001664, 0x0011FD, 0x038042,
+ 0x2B804A, 0x19804A, 0x00008D, 0x218944,
+ 0x000007, 0x002244, 0x0AE186, 0x000007,
+ 0x001A64, 0x002A24, 0x00197D, 0x080102,
+ 0x100122, 0x000820, 0x039060, 0x018040,
+ 0x003DFD, 0x00008D, 0x000820, 0x018040,
+ 0x001375, 0x001A7D, 0x010042, 0x09804A,
+ 0x10000A, 0x00021D, 0x0189E4, 0x2992E4,
+ 0x309144, 0x000007, 0x00060D, 0x000A15,
+ 0x000C1D, 0x001025, 0x00A9E4, 0x012BE4,
+ 0x000464, 0x01B3E4, 0x0232E4, 0x000464,
+ 0x000464, 0x000464, 0x000464, 0x00040D,
+ 0x08B1C4, 0x000007, 0x000820, 0x000BF5,
+ 0x030040, 0x00197D, 0x038042, 0x09804A,
+ 0x000A24, 0x08000A, 0x080E64, 0x000007,
+ 0x100122, 0x000820, 0x031060, 0x010040,
+ 0x0064AC, 0x00027D, 0x000020, 0x018040,
+ 0x00107D, 0x018042, 0x0011FD, 0x3B804A,
+ 0x09804A, 0x20000A, 0x000095, 0x1A1144,
+ 0x00A144, 0x0D2086, 0x00040D, 0x00B984,
+ 0x0D2186, 0x0018FD, 0x018042, 0x0010FD,
+ 0x09804A, 0x28000A, 0x000095, 0x010924,
+ 0x002A64, 0x0D1186, 0x000007, 0x002904,
+ 0x0D2286, 0x000007, 0x0D2A06, 0x080002,
+ 0x00008D, 0x00387D, 0x000820, 0x018040,
+ 0x00127D, 0x018042, 0x10000A, 0x003904,
+ 0x0DD186, 0x00080D, 0x7FFFB5, 0x00B984,
+ 0x0DA186, 0x000025, 0x0E7A06, 0x00002D,
+ 0x000015, 0x00082D, 0x02C78D, 0x000820,
+ 0x0EC206, 0x00000D, 0x7F8035, 0x00B984,
+ 0x0E7186, 0x400025, 0x00008D, 0x110944,
+ 0x000007, 0x00018D, 0x109504, 0x000007,
+ 0x009164, 0x000424, 0x000424, 0x000424,
+ 0x100102, 0x280002, 0x02C68D, 0x000820,
+ 0x0EC206, 0x00018D, 0x00042D, 0x00008D,
+ 0x109504, 0x000007, 0x00020D, 0x109184,
+ 0x000007, 0x02C70D, 0x000820, 0x00008D,
+ 0x0038FD, 0x018040, 0x003BFD, 0x001020,
+ 0x03A860, 0x000815, 0x313184, 0x212184,
+ 0x000007, 0x03B060, 0x03A060, 0x018040,
+ 0x0022FD, 0x000095, 0x010924, 0x000424,
+ 0x000424, 0x001264, 0x100102, 0x000820,
+ 0x039060, 0x018040, 0x001924, 0x00FB8D,
+ 0x00397D, 0x000820, 0x058040, 0x038042,
+ 0x09844A, 0x000606, 0x08040A, 0x000424,
+ 0x000424, 0x00117D, 0x018042, 0x08000A,
+ 0x000A24, 0x280502, 0x280C02, 0x09800D,
+ 0x000820, 0x0002FD, 0x018040, 0x200007,
+ 0x0022FD, 0x018042, 0x08000A, 0x000095,
+ 0x280DC4, 0x011924, 0x00197D, 0x018042,
+ 0x0011FD, 0x09804A, 0x10000A, 0x0000B5,
+ 0x113144, 0x0A8D04, 0x000007, 0x080A44,
+ 0x129504, 0x000007, 0x0023FD, 0x001020,
+ 0x038040, 0x101244, 0x000007, 0x000820,
+ 0x039060, 0x018040, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x10FA86, 0x000007,
+ 0x003BFD, 0x000100, 0x000A10, 0x0B807A,
+ 0x13804A, 0x090984, 0x000007, 0x000095,
+ 0x013D04, 0x118086, 0x10000A, 0x100002,
+ 0x090984, 0x000007, 0x038042, 0x11804A,
+ 0x090D04, 0x000007, 0x10000A, 0x090D84,
+ 0x000007, 0x00257D, 0x000820, 0x018040,
+ 0x00010D, 0x000810, 0x28143A, 0x00127D,
+ 0x018042, 0x20000A, 0x00197D, 0x018042,
+ 0x00117D, 0x31804A, 0x10000A, 0x003124,
+ 0x01280D, 0x00397D, 0x000820, 0x058040,
+ 0x038042, 0x09844A, 0x000606, 0x08040A,
+ 0x300102, 0x003124, 0x000424, 0x000424,
+ 0x001224, 0x280502, 0x001A4C, 0x130186,
+ 0x700002, 0x00002D, 0x030000, 0x00387D,
+ 0x018042, 0x10000A, 0x132A06, 0x002124,
+ 0x0000AD, 0x100002, 0x00010D, 0x000924,
+ 0x006B24, 0x01368D, 0x00397D, 0x000820,
+ 0x058040, 0x038042, 0x09844A, 0x000606,
+ 0x08040A, 0x003264, 0x00008D, 0x000A24,
+ 0x001020, 0x00227D, 0x018040, 0x013C0D,
+ 0x000810, 0x08043A, 0x29D206, 0x000007,
+ 0x002820, 0x00207D, 0x018040, 0x00117D,
+ 0x038042, 0x13804A, 0x33800A, 0x00387D,
+ 0x018042, 0x08000A, 0x000904, 0x163A86,
+ 0x000007, 0x00008D, 0x030964, 0x01478D,
+ 0x00397D, 0x000820, 0x058040, 0x038042,
+ 0x09844A, 0x000606, 0x08040A, 0x380102,
+ 0x000424, 0x000424, 0x001224, 0x0002FD,
+ 0x018042, 0x08000A, 0x000904, 0x14A286,
+ 0x000007, 0x280502, 0x001A4C, 0x163986,
+ 0x000007, 0x032164, 0x00632C, 0x003DFD,
+ 0x018042, 0x08000A, 0x000095, 0x090904,
+ 0x000007, 0x000820, 0x001A4C, 0x156186,
+ 0x018040, 0x030000, 0x157A06, 0x002124,
+ 0x00010D, 0x000924, 0x006B24, 0x015B8D,
+ 0x00397D, 0x000820, 0x058040, 0x038042,
+ 0x09844A, 0x000606, 0x08040A, 0x003A64,
+ 0x000095, 0x001224, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x15DA86, 0x000007,
+ 0x01628D, 0x000810, 0x08043A, 0x29D206,
+ 0x000007, 0x14D206, 0x000007, 0x007020,
+ 0x08010A, 0x10012A, 0x0020FD, 0x038860,
+ 0x039060, 0x018040, 0x00227D, 0x018042,
+ 0x003DFD, 0x08000A, 0x31844A, 0x000904,
+ 0x16D886, 0x18008B, 0x00008D, 0x189904,
+ 0x00312C, 0x17AA06, 0x000007, 0x00324C,
+ 0x173386, 0x000007, 0x001904, 0x173086,
+ 0x000007, 0x000095, 0x199144, 0x00222C,
+ 0x003124, 0x00636C, 0x000E3D, 0x001375,
+ 0x000BFD, 0x010042, 0x09804A, 0x10000A,
+ 0x038AEC, 0x0393EC, 0x00224C, 0x17A986,
+ 0x000007, 0x00008D, 0x189904, 0x00226C,
+ 0x00322C, 0x30050A, 0x301DAB, 0x002083,
+ 0x0018FD, 0x018042, 0x08000A, 0x018924,
+ 0x300502, 0x001083, 0x001875, 0x010042,
+ 0x10000A, 0x00008D, 0x010924, 0x001375,
+ 0x330542, 0x330CCB, 0x332CCB, 0x3334CB,
+ 0x333CCB, 0x3344CB, 0x334CCB, 0x3354CB,
+ 0x305C8B, 0x006083, 0x0002F5, 0x010042,
+ 0x08000A, 0x000904, 0x187A86, 0x000007,
+ 0x001E2D, 0x0005FD, 0x018042, 0x08000A,
+ 0x028924, 0x280502, 0x00060D, 0x000810,
+ 0x280C3A, 0x00008D, 0x000810, 0x28143A,
+ 0x0A808D, 0x000820, 0x0002F5, 0x010040,
+ 0x220007, 0x001275, 0x030042, 0x21004A,
+ 0x00008D, 0x1A0944, 0x000007, 0x01980D,
+ 0x000810, 0x08043A, 0x2B2206, 0x000007,
+ 0x0001F5, 0x030042, 0x0D004A, 0x10000A,
+ 0x089144, 0x000007, 0x000820, 0x010040,
+ 0x0025F5, 0x0A3144, 0x000007, 0x000820,
+ 0x032860, 0x030040, 0x00217D, 0x038042,
+ 0x0B804A, 0x10000A, 0x000820, 0x031060,
+ 0x030040, 0x00008D, 0x000124, 0x00012C,
+ 0x000E64, 0x001A64, 0x00636C, 0x08010A,
+ 0x10012A, 0x000820, 0x031060, 0x030040,
+ 0x0020FD, 0x018042, 0x08000A, 0x00227D,
+ 0x018042, 0x10000A, 0x000820, 0x031060,
+ 0x030040, 0x00197D, 0x018042, 0x08000A,
+ 0x0022FD, 0x038042, 0x10000A, 0x000820,
+ 0x031060, 0x030040, 0x090D04, 0x000007,
+ 0x000820, 0x030040, 0x038042, 0x0B804A,
+ 0x10000A, 0x000820, 0x031060, 0x030040,
+ 0x038042, 0x13804A, 0x19804A, 0x110D04,
+ 0x198D04, 0x000007, 0x08000A, 0x001020,
+ 0x031860, 0x030860, 0x030040, 0x00008D,
+ 0x0B0944, 0x000007, 0x000820, 0x010040,
+ 0x0005F5, 0x030042, 0x08000A, 0x000820,
+ 0x010040, 0x0000F5, 0x010042, 0x08000A,
+ 0x000904, 0x1C6086, 0x001E75, 0x030042,
+ 0x01044A, 0x000C0A, 0x1C7206, 0x000007,
+ 0x000402, 0x000C02, 0x00177D, 0x001AF5,
+ 0x018042, 0x03144A, 0x031C4A, 0x03244A,
+ 0x032C4A, 0x03344A, 0x033C4A, 0x03444A,
+ 0x004C0A, 0x00043D, 0x0013F5, 0x001AFD,
+ 0x030042, 0x0B004A, 0x1B804A, 0x13804A,
+ 0x20000A, 0x089144, 0x19A144, 0x0389E4,
+ 0x0399EC, 0x005502, 0x005D0A, 0x030042,
+ 0x0B004A, 0x1B804A, 0x13804A, 0x20000A,
+ 0x089144, 0x19A144, 0x0389E4, 0x0399EC,
+ 0x006502, 0x006D0A, 0x030042, 0x0B004A,
+ 0x19004A, 0x2B804A, 0x13804A, 0x21804A,
+ 0x30000A, 0x089144, 0x19A144, 0x2AB144,
+ 0x0389E4, 0x0399EC, 0x007502, 0x007D0A,
+ 0x03A9E4, 0x000702, 0x00107D, 0x000415,
+ 0x018042, 0x08000A, 0x0109E4, 0x000F02,
+ 0x002AF5, 0x0019FD, 0x010042, 0x09804A,
+ 0x10000A, 0x000934, 0x001674, 0x0029F5,
+ 0x010042, 0x10000A, 0x00917C, 0x002075,
+ 0x010042, 0x08000A, 0x000904, 0x1ED286,
+ 0x0026F5, 0x0027F5, 0x030042, 0x09004A,
+ 0x10000A, 0x000A3C, 0x00167C, 0x001A75,
+ 0x000BFD, 0x010042, 0x51804A, 0x48000A,
+ 0x160007, 0x001075, 0x010042, 0x282C0A,
+ 0x281D12, 0x282512, 0x001F32, 0x1E0007,
+ 0x0E0007, 0x001975, 0x010042, 0x002DF5,
+ 0x0D004A, 0x10000A, 0x009144, 0x1FB286,
+ 0x010042, 0x28340A, 0x000E5D, 0x00008D,
+ 0x000375, 0x000820, 0x010040, 0x05D2F4,
+ 0x54D104, 0x00735C, 0x205386, 0x000007,
+ 0x0C0007, 0x080007, 0x0A0007, 0x02040D,
+ 0x000810, 0x08043A, 0x332206, 0x000007,
+ 0x205A06, 0x000007, 0x080007, 0x002275,
+ 0x010042, 0x20000A, 0x002104, 0x212086,
+ 0x001E2D, 0x0002F5, 0x010042, 0x08000A,
+ 0x000904, 0x209286, 0x000007, 0x002010,
+ 0x30043A, 0x00057D, 0x0180C3, 0x08000A,
+ 0x028924, 0x280502, 0x280C02, 0x0A810D,
+ 0x000820, 0x0002F5, 0x010040, 0x220007,
+ 0x0004FD, 0x018042, 0x70000A, 0x030000,
+ 0x007020, 0x06FA06, 0x018040, 0x02180D,
+ 0x000810, 0x08043A, 0x2B2206, 0x000007,
+ 0x0002FD, 0x018042, 0x08000A, 0x000904,
+ 0x218A86, 0x000007, 0x01F206, 0x000007,
+ 0x000875, 0x0009FD, 0x00010D, 0x220A06,
+ 0x000295, 0x000B75, 0x00097D, 0x00000D,
+ 0x000515, 0x010042, 0x18000A, 0x001904,
+ 0x287886, 0x0006F5, 0x001020, 0x010040,
+ 0x0004F5, 0x000820, 0x010040, 0x000775,
+ 0x010042, 0x09804A, 0x10000A, 0x001124,
+ 0x000904, 0x22BA86, 0x000815, 0x080102,
+ 0x101204, 0x22DA06, 0x000575, 0x081204,
+ 0x000007, 0x100102, 0x000575, 0x000425,
+ 0x021124, 0x100102, 0x000820, 0x031060,
+ 0x010040, 0x001924, 0x287886, 0x00008D,
+ 0x000464, 0x009D04, 0x278886, 0x180102,
+ 0x000575, 0x010042, 0x28040A, 0x00018D,
+ 0x000924, 0x280D02, 0x00000D, 0x000924,
+ 0x281502, 0x10000D, 0x000820, 0x0002F5,
+ 0x010040, 0x200007, 0x001175, 0x0002FD,
+ 0x018042, 0x08000A, 0x000904, 0x23C286,
+ 0x000007, 0x000100, 0x080B20, 0x130B60,
+ 0x1B0B60, 0x030A60, 0x010040, 0x050042,
+ 0x3D004A, 0x35004A, 0x2D004A, 0x20000A,
+ 0x0006F5, 0x010042, 0x28140A, 0x0004F5,
+ 0x010042, 0x08000A, 0x000315, 0x010D04,
+ 0x24CA86, 0x004015, 0x000095, 0x010D04,
+ 0x24B886, 0x100022, 0x10002A, 0x24E206,
+ 0x000007, 0x333104, 0x2AA904, 0x000007,
+ 0x032124, 0x280502, 0x001124, 0x000424,
+ 0x000424, 0x003224, 0x00292C, 0x00636C,
+ 0x25F386, 0x000007, 0x02B164, 0x000464,
+ 0x000464, 0x00008D, 0x000A64, 0x280D02,
+ 0x10008D, 0x000820, 0x0002F5, 0x010040,
+ 0x220007, 0x00008D, 0x38B904, 0x000007,
+ 0x03296C, 0x30010A, 0x0002F5, 0x010042,
+ 0x08000A, 0x000904, 0x25BA86, 0x000007,
+ 0x02312C, 0x28050A, 0x00008D, 0x01096C,
+ 0x280D0A, 0x10010D, 0x000820, 0x0002F5,
+ 0x010040, 0x220007, 0x001124, 0x000424,
+ 0x000424, 0x003224, 0x300102, 0x032944,
+ 0x267A86, 0x000007, 0x300002, 0x0004F5,
+ 0x010042, 0x08000A, 0x000315, 0x010D04,
+ 0x26C086, 0x003124, 0x000464, 0x300102,
+ 0x0002F5, 0x010042, 0x08000A, 0x000904,
+ 0x26CA86, 0x000007, 0x003124, 0x300502,
+ 0x003924, 0x300583, 0x000883, 0x0005F5,
+ 0x010042, 0x28040A, 0x00008D, 0x008124,
+ 0x280D02, 0x00008D, 0x008124, 0x281502,
+ 0x10018D, 0x000820, 0x0002F5, 0x010040,
+ 0x220007, 0x001025, 0x000575, 0x030042,
+ 0x09004A, 0x10000A, 0x0A0904, 0x121104,
+ 0x000007, 0x001020, 0x050860, 0x050040,
+ 0x0006FD, 0x018042, 0x09004A, 0x10000A,
+ 0x0000A5, 0x0A0904, 0x121104, 0x000007,
+ 0x000820, 0x019060, 0x010040, 0x0002F5,
+ 0x010042, 0x08000A, 0x000904, 0x284286,
+ 0x000007, 0x230A06, 0x000007, 0x000606,
+ 0x000007, 0x0002F5, 0x010042, 0x08000A,
+ 0x000904, 0x289286, 0x000007, 0x000100,
+ 0x080B20, 0x138B60, 0x1B8B60, 0x238B60,
+ 0x2B8B60, 0x338B60, 0x3B8B60, 0x438B60,
+ 0x4B8B60, 0x538B60, 0x5B8B60, 0x638B60,
+ 0x6B8B60, 0x738B60, 0x7B8B60, 0x038F60,
+ 0x0B8F60, 0x138F60, 0x1B8F60, 0x238F60,
+ 0x2B8F60, 0x338F60, 0x3B8F60, 0x438F60,
+ 0x4B8F60, 0x538F60, 0x5B8F60, 0x638F60,
+ 0x6B8F60, 0x738F60, 0x7B8F60, 0x038A60,
+ 0x000606, 0x018040, 0x00008D, 0x000A64,
+ 0x280D02, 0x000A24, 0x00027D, 0x018042,
+ 0x10000A, 0x001224, 0x0003FD, 0x018042,
+ 0x08000A, 0x000904, 0x2A8286, 0x000007,
+ 0x00018D, 0x000A24, 0x000464, 0x000464,
+ 0x080102, 0x000924, 0x000424, 0x000424,
+ 0x100102, 0x02000D, 0x009144, 0x2AD986,
+ 0x000007, 0x0001FD, 0x018042, 0x08000A,
+ 0x000A44, 0x2ABB86, 0x018042, 0x0A000D,
+ 0x000820, 0x0002FD, 0x018040, 0x200007,
+ 0x00027D, 0x001020, 0x000606, 0x018040,
+ 0x0002F5, 0x010042, 0x08000A, 0x000904,
+ 0x2B2A86, 0x000007, 0x00037D, 0x018042,
+ 0x08000A, 0x000904, 0x2B5A86, 0x000007,
+ 0x000075, 0x002E7D, 0x010042, 0x0B804A,
+ 0x000020, 0x000904, 0x000686, 0x010040,
+ 0x31844A, 0x30048B, 0x000883, 0x00008D,
+ 0x000810, 0x28143A, 0x00008D, 0x000810,
+ 0x280C3A, 0x000675, 0x010042, 0x08000A,
+ 0x003815, 0x010924, 0x280502, 0x0B000D,
+ 0x000820, 0x0002F5, 0x010040, 0x000606,
+ 0x220007, 0x000464, 0x000464, 0x000606,
+ 0x000007, 0x000134, 0x007F8D, 0x00093C,
+ 0x281D12, 0x282512, 0x001F32, 0x0E0007,
+ 0x00010D, 0x00037D, 0x000820, 0x018040,
+ 0x05D2F4, 0x000007, 0x080007, 0x00037D,
+ 0x018042, 0x08000A, 0x000904, 0x2D0286,
+ 0x000007, 0x000606, 0x000007, 0x000007,
+ 0x000012, 0x100007, 0x320007, 0x600007,
+ 0x100080, 0x48001A, 0x004904, 0x2D6186,
+ 0x000007, 0x001210, 0x58003A, 0x000145,
+ 0x5C5D04, 0x000007, 0x000080, 0x48001A,
+ 0x004904, 0x2DB186, 0x000007, 0x001210,
+ 0x50003A, 0x005904, 0x2E0886, 0x000045,
+ 0x0000C5, 0x7FFFF5, 0x7FFF7D, 0x07D524,
+ 0x004224, 0x500102, 0x200502, 0x000082,
+ 0x40001A, 0x004104, 0x2E3986, 0x000007,
+ 0x003865, 0x40001A, 0x004020, 0x00104D,
+ 0x04C184, 0x301B86, 0x000040, 0x040007,
+ 0x000165, 0x000145, 0x004020, 0x000040,
+ 0x000765, 0x080080, 0x40001A, 0x004104,
+ 0x2EC986, 0x000007, 0x001210, 0x40003A,
+ 0x004104, 0x2F2286, 0x00004D, 0x0000CD,
+ 0x004810, 0x20043A, 0x000882, 0x40001A,
+ 0x004104, 0x2F3186, 0x000007, 0x004820,
+ 0x005904, 0x300886, 0x000040, 0x0007E5,
+ 0x200480, 0x2816A0, 0x3216E0, 0x3A16E0,
+ 0x4216E0, 0x021260, 0x000040, 0x000032,
+ 0x400075, 0x00007D, 0x07D574, 0x200512,
+ 0x000082, 0x40001A, 0x004104, 0x2FE186,
+ 0x000007, 0x037206, 0x640007, 0x060007,
+ 0x0000E5, 0x000020, 0x000040, 0x000A65,
+ 0x000020, 0x020040, 0x020040, 0x000040,
+ 0x000165, 0x000042, 0x70000A, 0x007104,
+ 0x30A286, 0x000007, 0x018206, 0x640007,
+ 0x050000, 0x007020, 0x000040, 0x037206,
+ 0x640007, 0x000007, 0x00306D, 0x028860,
+ 0x029060, 0x08000A, 0x028860, 0x008040,
+ 0x100012, 0x00100D, 0x009184, 0x314186,
+ 0x000E0D, 0x009184, 0x325186, 0x000007,
+ 0x300007, 0x001020, 0x003B6D, 0x008040,
+ 0x000080, 0x08001A, 0x000904, 0x316186,
+ 0x000007, 0x001220, 0x000DED, 0x008040,
+ 0x008042, 0x10000A, 0x40000D, 0x109544,
+ 0x000007, 0x001020, 0x000DED, 0x008040,
+ 0x008042, 0x20040A, 0x000082, 0x08001A,
+ 0x000904, 0x31F186, 0x000007, 0x003B6D,
+ 0x008042, 0x08000A, 0x000E15, 0x010984,
+ 0x329B86, 0x600007, 0x08001A, 0x000C15,
+ 0x010984, 0x328386, 0x000020, 0x1A0007,
+ 0x0002ED, 0x008040, 0x620007, 0x00306D,
+ 0x028042, 0x0A804A, 0x000820, 0x0A804A,
+ 0x000606, 0x10804A, 0x000007, 0x282512,
+ 0x001F32, 0x05D2F4, 0x54D104, 0x00735C,
+ 0x000786, 0x000007, 0x0C0007, 0x0A0007,
+ 0x1C0007, 0x003465, 0x020040, 0x004820,
+ 0x025060, 0x40000A, 0x024060, 0x000040,
+ 0x454944, 0x000007, 0x004020, 0x003AE5,
+ 0x000040, 0x0028E5, 0x000042, 0x48000A,
+ 0x004904, 0x386886, 0x002C65, 0x000042,
+ 0x40000A, 0x0000D5, 0x454104, 0x000007,
+ 0x000655, 0x054504, 0x34F286, 0x0001D5,
+ 0x054504, 0x34F086, 0x002B65, 0x000042,
+ 0x003AE5, 0x50004A, 0x40000A, 0x45C3D4,
+ 0x000007, 0x454504, 0x000007, 0x0000CD,
+ 0x444944, 0x000007, 0x454504, 0x000007,
+ 0x00014D, 0x554944, 0x000007, 0x045144,
+ 0x34E986, 0x002C65, 0x000042, 0x48000A,
+ 0x4CD104, 0x000007, 0x04C144, 0x34F386,
+ 0x000007, 0x160007, 0x002CE5, 0x040042,
+ 0x40000A, 0x004020, 0x000040, 0x002965,
+ 0x000042, 0x40000A, 0x004104, 0x356086,
+ 0x000007, 0x002402, 0x36A206, 0x005C02,
+ 0x0025E5, 0x000042, 0x40000A, 0x004274,
+ 0x002AE5, 0x000042, 0x40000A, 0x004274,
+ 0x500112, 0x0029E5, 0x000042, 0x40000A,
+ 0x004234, 0x454104, 0x000007, 0x004020,
+ 0x000040, 0x003EE5, 0x000020, 0x000040,
+ 0x002DE5, 0x400152, 0x50000A, 0x045144,
+ 0x364A86, 0x0000C5, 0x003EE5, 0x004020,
+ 0x000040, 0x002BE5, 0x000042, 0x40000A,
+ 0x404254, 0x000007, 0x002AE5, 0x004020,
+ 0x000040, 0x500132, 0x040134, 0x005674,
+ 0x0029E5, 0x020042, 0x42000A, 0x000042,
+ 0x50000A, 0x05417C, 0x0028E5, 0x000042,
+ 0x48000A, 0x0000C5, 0x4CC144, 0x371086,
+ 0x0026E5, 0x0027E5, 0x020042, 0x40004A,
+ 0x50000A, 0x00423C, 0x00567C, 0x0028E5,
+ 0x004820, 0x000040, 0x281D12, 0x282512,
+ 0x001F72, 0x002965, 0x000042, 0x40000A,
+ 0x004104, 0x37AA86, 0x0E0007, 0x160007,
+ 0x1E0007, 0x003EE5, 0x000042, 0x40000A,
+ 0x004104, 0x37E886, 0x002D65, 0x000042,
+ 0x28340A, 0x003465, 0x020042, 0x42004A,
+ 0x004020, 0x4A004A, 0x50004A, 0x05D2F4,
+ 0x54D104, 0x00735C, 0x385186, 0x000007,
+ 0x000606, 0x080007, 0x0C0007, 0x080007,
+ 0x0A0007, 0x0001E5, 0x020045, 0x004020,
+ 0x000060, 0x000365, 0x000040, 0x002E65,
+ 0x001A20, 0x0A1A60, 0x000040, 0x003465,
+ 0x020042, 0x42004A, 0x004020, 0x4A004A,
+ 0x000606, 0x50004A, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000
+};
+
+// --------------------------------------------
+// DS-1E Controller InstructionRAM Code
+// 1999/06/21
+// Buf441 slot is Enabled.
+// --------------------------------------------
+// 04/09?@creat
+// 04/12 stop nise fix
+// 06/21?@WorkingOff timming
+static unsigned long int CntrlInst1E[] = {
+ 0x000007, 0x240007, 0x0C0007, 0x1C0007,
+ 0x060007, 0x700002, 0x000020, 0x030040,
+ 0x007104, 0x004286, 0x030040, 0x000F0D,
+ 0x000810, 0x20043A, 0x000282, 0x00020D,
+ 0x000810, 0x20043A, 0x001282, 0x200E82,
+ 0x00800D, 0x000810, 0x20043A, 0x001A82,
+ 0x03460D, 0x000810, 0x10043A, 0x02EC0D,
+ 0x000810, 0x18043A, 0x00010D, 0x020015,
+ 0x0000FD, 0x000020, 0x038860, 0x039060,
+ 0x038060, 0x038040, 0x038040, 0x038040,
+ 0x018040, 0x000A7D, 0x038040, 0x038040,
+ 0x018040, 0x200402, 0x000882, 0x08001A,
+ 0x000904, 0x017186, 0x000007, 0x260007,
+ 0x400007, 0x000007, 0x03258D, 0x000810,
+ 0x18043A, 0x260007, 0x284402, 0x00087D,
+ 0x018042, 0x00160A, 0x05A206, 0x000007,
+ 0x440007, 0x00230D, 0x000810, 0x08043A,
+ 0x22FA06, 0x000007, 0x0007FD, 0x018042,
+ 0x08000A, 0x000904, 0x02AB86, 0x000195,
+ 0x090D04, 0x000007, 0x000820, 0x0000F5,
+ 0x000B7D, 0x01F060, 0x0000FD, 0x033A06,
+ 0x018040, 0x000A7D, 0x038042, 0x13804A,
+ 0x18000A, 0x001820, 0x059060, 0x058860,
+ 0x018040, 0x0000FD, 0x018042, 0x70000A,
+ 0x000115, 0x071144, 0x033B86, 0x030000,
+ 0x007020, 0x036206, 0x018040, 0x00360D,
+ 0x000810, 0x08043A, 0x232206, 0x000007,
+ 0x02EC0D, 0x000810, 0x18043A, 0x019A06,
+ 0x000007, 0x240007, 0x000F8D, 0x000810,
+ 0x00163A, 0x002402, 0x005C02, 0x0028FD,
+ 0x000020, 0x018040, 0x08000D, 0x000815,
+ 0x510984, 0x000007, 0x00004D, 0x000E5D,
+ 0x000E02, 0x00430D, 0x000810, 0x08043A,
+ 0x2E1206, 0x000007, 0x00008D, 0x000924,
+ 0x000F02, 0x00470D, 0x000810, 0x08043A,
+ 0x2E1206, 0x000007, 0x480480, 0x001210,
+ 0x28043A, 0x00778D, 0x000810, 0x280C3A,
+ 0x00068D, 0x000810, 0x28143A, 0x284402,
+ 0x03258D, 0x000810, 0x18043A, 0x07FF8D,
+ 0x000820, 0x0002FD, 0x018040, 0x260007,
+ 0x200007, 0x0002FD, 0x018042, 0x08000A,
+ 0x000904, 0x051286, 0x000007, 0x240007,
+ 0x02EC0D, 0x000810, 0x18043A, 0x00387D,
+ 0x018042, 0x08000A, 0x001015, 0x010984,
+ 0x019B86, 0x000007, 0x01B206, 0x000007,
+ 0x0008FD, 0x018042, 0x18000A, 0x001904,
+ 0x22B886, 0x280007, 0x001810, 0x28043A,
+ 0x280C02, 0x00000D, 0x000810, 0x28143A,
+ 0x08808D, 0x000820, 0x0002FD, 0x018040,
+ 0x200007, 0x00020D, 0x189904, 0x000007,
+ 0x00402D, 0x0000BD, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x065A86, 0x000007,
+ 0x000100, 0x000A20, 0x00047D, 0x018040,
+ 0x018042, 0x20000A, 0x003015, 0x012144,
+ 0x036186, 0x000007, 0x002104, 0x036186,
+ 0x000007, 0x000F8D, 0x000810, 0x280C3A,
+ 0x023944, 0x07C986, 0x000007, 0x001810,
+ 0x28043A, 0x08810D, 0x000820, 0x0002FD,
+ 0x018040, 0x200007, 0x002810, 0x78003A,
+ 0x00788D, 0x000810, 0x08043A, 0x2A1206,
+ 0x000007, 0x00400D, 0x001015, 0x189904,
+ 0x292904, 0x393904, 0x000007, 0x070206,
+ 0x000007, 0x0004F5, 0x00007D, 0x000020,
+ 0x00008D, 0x010860, 0x018040, 0x00047D,
+ 0x038042, 0x21804A, 0x18000A, 0x021944,
+ 0x229086, 0x000007, 0x004075, 0x71F104,
+ 0x000007, 0x010042, 0x28000A, 0x002904,
+ 0x225886, 0x000007, 0x003C0D, 0x30A904,
+ 0x000007, 0x00077D, 0x018042, 0x08000A,
+ 0x000904, 0x08DA86, 0x00057D, 0x002820,
+ 0x03B060, 0x08F206, 0x018040, 0x003020,
+ 0x03A860, 0x018040, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x08FA86, 0x000007,
+ 0x00057D, 0x018042, 0x28040A, 0x000E8D,
+ 0x000810, 0x280C3A, 0x00000D, 0x000810,
+ 0x28143A, 0x09000D, 0x000820, 0x0002FD,
+ 0x018040, 0x200007, 0x003DFD, 0x000020,
+ 0x018040, 0x00107D, 0x009D8D, 0x000810,
+ 0x08043A, 0x2A1206, 0x000007, 0x000815,
+ 0x08001A, 0x010984, 0x0A5186, 0x00137D,
+ 0x200500, 0x280F20, 0x338F60, 0x3B8F60,
+ 0x438F60, 0x4B8F60, 0x538F60, 0x5B8F60,
+ 0x038A60, 0x018040, 0x00107D, 0x018042,
+ 0x08000A, 0x000215, 0x010984, 0x3A8186,
+ 0x000007, 0x007FBD, 0x383DC4, 0x000007,
+ 0x001A7D, 0x001375, 0x018042, 0x09004A,
+ 0x10000A, 0x0B8D04, 0x139504, 0x000007,
+ 0x000820, 0x019060, 0x001104, 0x225886,
+ 0x010040, 0x0017FD, 0x018042, 0x08000A,
+ 0x000904, 0x225A86, 0x000007, 0x00197D,
+ 0x038042, 0x09804A, 0x10000A, 0x000924,
+ 0x001664, 0x0011FD, 0x038042, 0x2B804A,
+ 0x19804A, 0x00008D, 0x218944, 0x000007,
+ 0x002244, 0x0C1986, 0x000007, 0x001A64,
+ 0x002A24, 0x00197D, 0x080102, 0x100122,
+ 0x000820, 0x039060, 0x018040, 0x003DFD,
+ 0x00008D, 0x000820, 0x018040, 0x001375,
+ 0x001A7D, 0x010042, 0x09804A, 0x10000A,
+ 0x00021D, 0x0189E4, 0x2992E4, 0x309144,
+ 0x000007, 0x00060D, 0x000A15, 0x000C1D,
+ 0x001025, 0x00A9E4, 0x012BE4, 0x000464,
+ 0x01B3E4, 0x0232E4, 0x000464, 0x000464,
+ 0x000464, 0x000464, 0x00040D, 0x08B1C4,
+ 0x000007, 0x000820, 0x000BF5, 0x030040,
+ 0x00197D, 0x038042, 0x09804A, 0x000A24,
+ 0x08000A, 0x080E64, 0x000007, 0x100122,
+ 0x000820, 0x031060, 0x010040, 0x0064AC,
+ 0x00027D, 0x000020, 0x018040, 0x00107D,
+ 0x018042, 0x0011FD, 0x3B804A, 0x09804A,
+ 0x20000A, 0x000095, 0x1A1144, 0x00A144,
+ 0x0E5886, 0x00040D, 0x00B984, 0x0E5986,
+ 0x0018FD, 0x018042, 0x0010FD, 0x09804A,
+ 0x28000A, 0x000095, 0x010924, 0x002A64,
+ 0x0E4986, 0x000007, 0x002904, 0x0E5A86,
+ 0x000007, 0x0E6206, 0x080002, 0x00008D,
+ 0x00387D, 0x000820, 0x018040, 0x00127D,
+ 0x018042, 0x10000A, 0x003904, 0x0F0986,
+ 0x00080D, 0x7FFFB5, 0x00B984, 0x0ED986,
+ 0x000025, 0x0FB206, 0x00002D, 0x000015,
+ 0x00082D, 0x02E00D, 0x000820, 0x0FFA06,
+ 0x00000D, 0x7F8035, 0x00B984, 0x0FA986,
+ 0x400025, 0x00008D, 0x110944, 0x000007,
+ 0x00018D, 0x109504, 0x000007, 0x009164,
+ 0x000424, 0x000424, 0x000424, 0x100102,
+ 0x280002, 0x02DF0D, 0x000820, 0x0FFA06,
+ 0x00018D, 0x00042D, 0x00008D, 0x109504,
+ 0x000007, 0x00020D, 0x109184, 0x000007,
+ 0x02DF8D, 0x000820, 0x00008D, 0x0038FD,
+ 0x018040, 0x003BFD, 0x001020, 0x03A860,
+ 0x000815, 0x313184, 0x212184, 0x000007,
+ 0x03B060, 0x03A060, 0x018040, 0x0022FD,
+ 0x000095, 0x010924, 0x000424, 0x000424,
+ 0x001264, 0x100102, 0x000820, 0x039060,
+ 0x018040, 0x001924, 0x010F0D, 0x00397D,
+ 0x000820, 0x058040, 0x038042, 0x09844A,
+ 0x000606, 0x08040A, 0x000424, 0x000424,
+ 0x00117D, 0x018042, 0x08000A, 0x000A24,
+ 0x280502, 0x280C02, 0x09800D, 0x000820,
+ 0x0002FD, 0x018040, 0x200007, 0x0022FD,
+ 0x018042, 0x08000A, 0x000095, 0x280DC4,
+ 0x011924, 0x00197D, 0x018042, 0x0011FD,
+ 0x09804A, 0x10000A, 0x0000B5, 0x113144,
+ 0x0A8D04, 0x000007, 0x080A44, 0x129504,
+ 0x000007, 0x0023FD, 0x001020, 0x038040,
+ 0x101244, 0x000007, 0x000820, 0x039060,
+ 0x018040, 0x0002FD, 0x018042, 0x08000A,
+ 0x000904, 0x123286, 0x000007, 0x003BFD,
+ 0x000100, 0x000A10, 0x0B807A, 0x13804A,
+ 0x090984, 0x000007, 0x000095, 0x013D04,
+ 0x12B886, 0x10000A, 0x100002, 0x090984,
+ 0x000007, 0x038042, 0x11804A, 0x090D04,
+ 0x000007, 0x10000A, 0x090D84, 0x000007,
+ 0x00257D, 0x000820, 0x018040, 0x00010D,
+ 0x000810, 0x28143A, 0x00127D, 0x018042,
+ 0x20000A, 0x00197D, 0x018042, 0x00117D,
+ 0x31804A, 0x10000A, 0x003124, 0x013B8D,
+ 0x00397D, 0x000820, 0x058040, 0x038042,
+ 0x09844A, 0x000606, 0x08040A, 0x300102,
+ 0x003124, 0x000424, 0x000424, 0x001224,
+ 0x280502, 0x001A4C, 0x143986, 0x700002,
+ 0x00002D, 0x030000, 0x00387D, 0x018042,
+ 0x10000A, 0x146206, 0x002124, 0x0000AD,
+ 0x100002, 0x00010D, 0x000924, 0x006B24,
+ 0x014A0D, 0x00397D, 0x000820, 0x058040,
+ 0x038042, 0x09844A, 0x000606, 0x08040A,
+ 0x003264, 0x00008D, 0x000A24, 0x001020,
+ 0x00227D, 0x018040, 0x014F8D, 0x000810,
+ 0x08043A, 0x2B5A06, 0x000007, 0x002820,
+ 0x00207D, 0x018040, 0x00117D, 0x038042,
+ 0x13804A, 0x33800A, 0x00387D, 0x018042,
+ 0x08000A, 0x000904, 0x177286, 0x000007,
+ 0x00008D, 0x030964, 0x015B0D, 0x00397D,
+ 0x000820, 0x058040, 0x038042, 0x09844A,
+ 0x000606, 0x08040A, 0x380102, 0x000424,
+ 0x000424, 0x001224, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x15DA86, 0x000007,
+ 0x280502, 0x001A4C, 0x177186, 0x000007,
+ 0x032164, 0x00632C, 0x003DFD, 0x018042,
+ 0x08000A, 0x000095, 0x090904, 0x000007,
+ 0x000820, 0x001A4C, 0x169986, 0x018040,
+ 0x030000, 0x16B206, 0x002124, 0x00010D,
+ 0x000924, 0x006B24, 0x016F0D, 0x00397D,
+ 0x000820, 0x058040, 0x038042, 0x09844A,
+ 0x000606, 0x08040A, 0x003A64, 0x000095,
+ 0x001224, 0x0002FD, 0x018042, 0x08000A,
+ 0x000904, 0x171286, 0x000007, 0x01760D,
+ 0x000810, 0x08043A, 0x2B5A06, 0x000007,
+ 0x160A06, 0x000007, 0x007020, 0x08010A,
+ 0x10012A, 0x0020FD, 0x038860, 0x039060,
+ 0x018040, 0x00227D, 0x018042, 0x003DFD,
+ 0x08000A, 0x31844A, 0x000904, 0x181086,
+ 0x18008B, 0x00008D, 0x189904, 0x00312C,
+ 0x18E206, 0x000007, 0x00324C, 0x186B86,
+ 0x000007, 0x001904, 0x186886, 0x000007,
+ 0x000095, 0x199144, 0x00222C, 0x003124,
+ 0x00636C, 0x000E3D, 0x001375, 0x000BFD,
+ 0x010042, 0x09804A, 0x10000A, 0x038AEC,
+ 0x0393EC, 0x00224C, 0x18E186, 0x000007,
+ 0x00008D, 0x189904, 0x00226C, 0x00322C,
+ 0x30050A, 0x301DAB, 0x002083, 0x0018FD,
+ 0x018042, 0x08000A, 0x018924, 0x300502,
+ 0x001083, 0x001875, 0x010042, 0x10000A,
+ 0x00008D, 0x010924, 0x001375, 0x330542,
+ 0x330CCB, 0x332CCB, 0x3334CB, 0x333CCB,
+ 0x3344CB, 0x334CCB, 0x3354CB, 0x305C8B,
+ 0x006083, 0x0002F5, 0x010042, 0x08000A,
+ 0x000904, 0x19B286, 0x000007, 0x001E2D,
+ 0x0005FD, 0x018042, 0x08000A, 0x028924,
+ 0x280502, 0x00060D, 0x000810, 0x280C3A,
+ 0x00008D, 0x000810, 0x28143A, 0x0A808D,
+ 0x000820, 0x0002F5, 0x010040, 0x220007,
+ 0x001275, 0x030042, 0x21004A, 0x00008D,
+ 0x1A0944, 0x000007, 0x01AB8D, 0x000810,
+ 0x08043A, 0x2CAA06, 0x000007, 0x0001F5,
+ 0x030042, 0x0D004A, 0x10000A, 0x089144,
+ 0x000007, 0x000820, 0x010040, 0x0025F5,
+ 0x0A3144, 0x000007, 0x000820, 0x032860,
+ 0x030040, 0x00217D, 0x038042, 0x0B804A,
+ 0x10000A, 0x000820, 0x031060, 0x030040,
+ 0x00008D, 0x000124, 0x00012C, 0x000E64,
+ 0x001A64, 0x00636C, 0x08010A, 0x10012A,
+ 0x000820, 0x031060, 0x030040, 0x0020FD,
+ 0x018042, 0x08000A, 0x00227D, 0x018042,
+ 0x10000A, 0x000820, 0x031060, 0x030040,
+ 0x00197D, 0x018042, 0x08000A, 0x0022FD,
+ 0x038042, 0x10000A, 0x000820, 0x031060,
+ 0x030040, 0x090D04, 0x000007, 0x000820,
+ 0x030040, 0x038042, 0x0B804A, 0x10000A,
+ 0x000820, 0x031060, 0x030040, 0x038042,
+ 0x13804A, 0x19804A, 0x110D04, 0x198D04,
+ 0x000007, 0x08000A, 0x001020, 0x031860,
+ 0x030860, 0x030040, 0x00008D, 0x0B0944,
+ 0x000007, 0x000820, 0x010040, 0x0005F5,
+ 0x030042, 0x08000A, 0x000820, 0x010040,
+ 0x0000F5, 0x010042, 0x08000A, 0x000904,
+ 0x1D9886, 0x001E75, 0x030042, 0x01044A,
+ 0x000C0A, 0x1DAA06, 0x000007, 0x000402,
+ 0x000C02, 0x00177D, 0x001AF5, 0x018042,
+ 0x03144A, 0x031C4A, 0x03244A, 0x032C4A,
+ 0x03344A, 0x033C4A, 0x03444A, 0x004C0A,
+ 0x00043D, 0x0013F5, 0x001AFD, 0x030042,
+ 0x0B004A, 0x1B804A, 0x13804A, 0x20000A,
+ 0x089144, 0x19A144, 0x0389E4, 0x0399EC,
+ 0x005502, 0x005D0A, 0x030042, 0x0B004A,
+ 0x1B804A, 0x13804A, 0x20000A, 0x089144,
+ 0x19A144, 0x0389E4, 0x0399EC, 0x006502,
+ 0x006D0A, 0x030042, 0x0B004A, 0x19004A,
+ 0x2B804A, 0x13804A, 0x21804A, 0x30000A,
+ 0x089144, 0x19A144, 0x2AB144, 0x0389E4,
+ 0x0399EC, 0x007502, 0x007D0A, 0x03A9E4,
+ 0x000702, 0x00107D, 0x000415, 0x018042,
+ 0x08000A, 0x0109E4, 0x000F02, 0x002AF5,
+ 0x0019FD, 0x010042, 0x09804A, 0x10000A,
+ 0x000934, 0x001674, 0x0029F5, 0x010042,
+ 0x10000A, 0x00917C, 0x002075, 0x010042,
+ 0x08000A, 0x000904, 0x200A86, 0x0026F5,
+ 0x0027F5, 0x030042, 0x09004A, 0x10000A,
+ 0x000A3C, 0x00167C, 0x001A75, 0x000BFD,
+ 0x010042, 0x51804A, 0x48000A, 0x160007,
+ 0x001075, 0x010042, 0x282C0A, 0x281D12,
+ 0x282512, 0x001F32, 0x1E0007, 0x0E0007,
+ 0x001975, 0x010042, 0x002DF5, 0x0D004A,
+ 0x10000A, 0x009144, 0x20EA86, 0x010042,
+ 0x28340A, 0x000E5D, 0x00008D, 0x000375,
+ 0x000820, 0x010040, 0x05D2F4, 0x54D104,
+ 0x00735C, 0x218B86, 0x000007, 0x0C0007,
+ 0x080007, 0x0A0007, 0x02178D, 0x000810,
+ 0x08043A, 0x34B206, 0x000007, 0x219206,
+ 0x000007, 0x080007, 0x002275, 0x010042,
+ 0x20000A, 0x002104, 0x225886, 0x001E2D,
+ 0x0002F5, 0x010042, 0x08000A, 0x000904,
+ 0x21CA86, 0x000007, 0x002010, 0x30043A,
+ 0x00057D, 0x0180C3, 0x08000A, 0x028924,
+ 0x280502, 0x280C02, 0x0A810D, 0x000820,
+ 0x0002F5, 0x010040, 0x220007, 0x0004FD,
+ 0x018042, 0x70000A, 0x030000, 0x007020,
+ 0x07FA06, 0x018040, 0x022B8D, 0x000810,
+ 0x08043A, 0x2CAA06, 0x000007, 0x0002FD,
+ 0x018042, 0x08000A, 0x000904, 0x22C286,
+ 0x000007, 0x020206, 0x000007, 0x000875,
+ 0x0009FD, 0x00010D, 0x234206, 0x000295,
+ 0x000B75, 0x00097D, 0x00000D, 0x000515,
+ 0x010042, 0x18000A, 0x001904, 0x2A0086,
+ 0x0006F5, 0x001020, 0x010040, 0x0004F5,
+ 0x000820, 0x010040, 0x000775, 0x010042,
+ 0x09804A, 0x10000A, 0x001124, 0x000904,
+ 0x23F286, 0x000815, 0x080102, 0x101204,
+ 0x241206, 0x000575, 0x081204, 0x000007,
+ 0x100102, 0x000575, 0x000425, 0x021124,
+ 0x100102, 0x000820, 0x031060, 0x010040,
+ 0x001924, 0x2A0086, 0x00008D, 0x000464,
+ 0x009D04, 0x291086, 0x180102, 0x000575,
+ 0x010042, 0x28040A, 0x00018D, 0x000924,
+ 0x280D02, 0x00000D, 0x000924, 0x281502,
+ 0x10000D, 0x000820, 0x0002F5, 0x010040,
+ 0x200007, 0x001175, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x24FA86, 0x000007,
+ 0x000100, 0x080B20, 0x130B60, 0x1B0B60,
+ 0x030A60, 0x010040, 0x050042, 0x3D004A,
+ 0x35004A, 0x2D004A, 0x20000A, 0x0006F5,
+ 0x010042, 0x28140A, 0x0004F5, 0x010042,
+ 0x08000A, 0x000315, 0x010D04, 0x260286,
+ 0x004015, 0x000095, 0x010D04, 0x25F086,
+ 0x100022, 0x10002A, 0x261A06, 0x000007,
+ 0x333104, 0x2AA904, 0x000007, 0x032124,
+ 0x280502, 0x284402, 0x001124, 0x400102,
+ 0x000424, 0x000424, 0x003224, 0x00292C,
+ 0x00636C, 0x277386, 0x000007, 0x02B164,
+ 0x000464, 0x000464, 0x00008D, 0x000A64,
+ 0x280D02, 0x10008D, 0x000820, 0x0002F5,
+ 0x010040, 0x220007, 0x00008D, 0x38B904,
+ 0x000007, 0x03296C, 0x30010A, 0x0002F5,
+ 0x010042, 0x08000A, 0x000904, 0x270286,
+ 0x000007, 0x00212C, 0x28050A, 0x00316C,
+ 0x00046C, 0x00046C, 0x28450A, 0x001124,
+ 0x006B64, 0x100102, 0x00008D, 0x01096C,
+ 0x280D0A, 0x10010D, 0x000820, 0x0002F5,
+ 0x010040, 0x220007, 0x004124, 0x000424,
+ 0x000424, 0x003224, 0x300102, 0x032944,
+ 0x27FA86, 0x000007, 0x300002, 0x0004F5,
+ 0x010042, 0x08000A, 0x000315, 0x010D04,
+ 0x284086, 0x003124, 0x000464, 0x300102,
+ 0x0002F5, 0x010042, 0x08000A, 0x000904,
+ 0x284A86, 0x000007, 0x284402, 0x003124,
+ 0x300502, 0x003924, 0x300583, 0x000883,
+ 0x0005F5, 0x010042, 0x28040A, 0x00008D,
+ 0x008124, 0x280D02, 0x00008D, 0x008124,
+ 0x281502, 0x10018D, 0x000820, 0x0002F5,
+ 0x010040, 0x220007, 0x001025, 0x000575,
+ 0x030042, 0x09004A, 0x10000A, 0x0A0904,
+ 0x121104, 0x000007, 0x001020, 0x050860,
+ 0x050040, 0x0006FD, 0x018042, 0x09004A,
+ 0x10000A, 0x0000A5, 0x0A0904, 0x121104,
+ 0x000007, 0x000820, 0x019060, 0x010040,
+ 0x0002F5, 0x010042, 0x08000A, 0x000904,
+ 0x29CA86, 0x000007, 0x244206, 0x000007,
+ 0x000606, 0x000007, 0x0002F5, 0x010042,
+ 0x08000A, 0x000904, 0x2A1A86, 0x000007,
+ 0x000100, 0x080B20, 0x138B60, 0x1B8B60,
+ 0x238B60, 0x2B8B60, 0x338B60, 0x3B8B60,
+ 0x438B60, 0x4B8B60, 0x538B60, 0x5B8B60,
+ 0x638B60, 0x6B8B60, 0x738B60, 0x7B8B60,
+ 0x038F60, 0x0B8F60, 0x138F60, 0x1B8F60,
+ 0x238F60, 0x2B8F60, 0x338F60, 0x3B8F60,
+ 0x438F60, 0x4B8F60, 0x538F60, 0x5B8F60,
+ 0x638F60, 0x6B8F60, 0x738F60, 0x7B8F60,
+ 0x038A60, 0x000606, 0x018040, 0x00008D,
+ 0x000A64, 0x280D02, 0x000A24, 0x00027D,
+ 0x018042, 0x10000A, 0x001224, 0x0003FD,
+ 0x018042, 0x08000A, 0x000904, 0x2C0A86,
+ 0x000007, 0x00018D, 0x000A24, 0x000464,
+ 0x000464, 0x080102, 0x000924, 0x000424,
+ 0x000424, 0x100102, 0x02000D, 0x009144,
+ 0x2C6186, 0x000007, 0x0001FD, 0x018042,
+ 0x08000A, 0x000A44, 0x2C4386, 0x018042,
+ 0x0A000D, 0x000820, 0x0002FD, 0x018040,
+ 0x200007, 0x00027D, 0x001020, 0x000606,
+ 0x018040, 0x0002F5, 0x010042, 0x08000A,
+ 0x000904, 0x2CB286, 0x000007, 0x00037D,
+ 0x018042, 0x08000A, 0x000904, 0x2CE286,
+ 0x000007, 0x000075, 0x002E7D, 0x010042,
+ 0x0B804A, 0x000020, 0x000904, 0x000686,
+ 0x010040, 0x31844A, 0x30048B, 0x000883,
+ 0x00008D, 0x000810, 0x28143A, 0x00008D,
+ 0x000810, 0x280C3A, 0x000675, 0x010042,
+ 0x08000A, 0x003815, 0x010924, 0x280502,
+ 0x0B000D, 0x000820, 0x0002F5, 0x010040,
+ 0x000606, 0x220007, 0x000464, 0x000464,
+ 0x000606, 0x000007, 0x000134, 0x007F8D,
+ 0x00093C, 0x281D12, 0x282512, 0x001F32,
+ 0x0E0007, 0x00010D, 0x00037D, 0x000820,
+ 0x018040, 0x05D2F4, 0x000007, 0x080007,
+ 0x00037D, 0x018042, 0x08000A, 0x000904,
+ 0x2E8A86, 0x000007, 0x000606, 0x000007,
+ 0x000007, 0x000012, 0x100007, 0x320007,
+ 0x600007, 0x460007, 0x100080, 0x48001A,
+ 0x004904, 0x2EF186, 0x000007, 0x001210,
+ 0x58003A, 0x000145, 0x5C5D04, 0x000007,
+ 0x000080, 0x48001A, 0x004904, 0x2F4186,
+ 0x000007, 0x001210, 0x50003A, 0x005904,
+ 0x2F9886, 0x000045, 0x0000C5, 0x7FFFF5,
+ 0x7FFF7D, 0x07D524, 0x004224, 0x500102,
+ 0x200502, 0x000082, 0x40001A, 0x004104,
+ 0x2FC986, 0x000007, 0x003865, 0x40001A,
+ 0x004020, 0x00104D, 0x04C184, 0x31AB86,
+ 0x000040, 0x040007, 0x000165, 0x000145,
+ 0x004020, 0x000040, 0x000765, 0x080080,
+ 0x40001A, 0x004104, 0x305986, 0x000007,
+ 0x001210, 0x40003A, 0x004104, 0x30B286,
+ 0x00004D, 0x0000CD, 0x004810, 0x20043A,
+ 0x000882, 0x40001A, 0x004104, 0x30C186,
+ 0x000007, 0x004820, 0x005904, 0x319886,
+ 0x000040, 0x0007E5, 0x200480, 0x2816A0,
+ 0x3216E0, 0x3A16E0, 0x4216E0, 0x021260,
+ 0x000040, 0x000032, 0x400075, 0x00007D,
+ 0x07D574, 0x200512, 0x000082, 0x40001A,
+ 0x004104, 0x317186, 0x000007, 0x038A06,
+ 0x640007, 0x0000E5, 0x000020, 0x000040,
+ 0x000A65, 0x000020, 0x020040, 0x020040,
+ 0x000040, 0x000165, 0x000042, 0x70000A,
+ 0x007104, 0x323286, 0x000007, 0x060007,
+ 0x019A06, 0x640007, 0x050000, 0x007020,
+ 0x000040, 0x038A06, 0x640007, 0x000007,
+ 0x00306D, 0x028860, 0x029060, 0x08000A,
+ 0x028860, 0x008040, 0x100012, 0x00100D,
+ 0x009184, 0x32D186, 0x000E0D, 0x009184,
+ 0x33E186, 0x000007, 0x300007, 0x001020,
+ 0x003B6D, 0x008040, 0x000080, 0x08001A,
+ 0x000904, 0x32F186, 0x000007, 0x001220,
+ 0x000DED, 0x008040, 0x008042, 0x10000A,
+ 0x40000D, 0x109544, 0x000007, 0x001020,
+ 0x000DED, 0x008040, 0x008042, 0x20040A,
+ 0x000082, 0x08001A, 0x000904, 0x338186,
+ 0x000007, 0x003B6D, 0x008042, 0x08000A,
+ 0x000E15, 0x010984, 0x342B86, 0x600007,
+ 0x08001A, 0x000C15, 0x010984, 0x341386,
+ 0x000020, 0x1A0007, 0x0002ED, 0x008040,
+ 0x620007, 0x00306D, 0x028042, 0x0A804A,
+ 0x000820, 0x0A804A, 0x000606, 0x10804A,
+ 0x000007, 0x282512, 0x001F32, 0x05D2F4,
+ 0x54D104, 0x00735C, 0x000786, 0x000007,
+ 0x0C0007, 0x0A0007, 0x1C0007, 0x003465,
+ 0x020040, 0x004820, 0x025060, 0x40000A,
+ 0x024060, 0x000040, 0x454944, 0x000007,
+ 0x004020, 0x003AE5, 0x000040, 0x0028E5,
+ 0x000042, 0x48000A, 0x004904, 0x39F886,
+ 0x002C65, 0x000042, 0x40000A, 0x0000D5,
+ 0x454104, 0x000007, 0x000655, 0x054504,
+ 0x368286, 0x0001D5, 0x054504, 0x368086,
+ 0x002B65, 0x000042, 0x003AE5, 0x50004A,
+ 0x40000A, 0x45C3D4, 0x000007, 0x454504,
+ 0x000007, 0x0000CD, 0x444944, 0x000007,
+ 0x454504, 0x000007, 0x00014D, 0x554944,
+ 0x000007, 0x045144, 0x367986, 0x002C65,
+ 0x000042, 0x48000A, 0x4CD104, 0x000007,
+ 0x04C144, 0x368386, 0x000007, 0x160007,
+ 0x002CE5, 0x040042, 0x40000A, 0x004020,
+ 0x000040, 0x002965, 0x000042, 0x40000A,
+ 0x004104, 0x36F086, 0x000007, 0x002402,
+ 0x383206, 0x005C02, 0x0025E5, 0x000042,
+ 0x40000A, 0x004274, 0x002AE5, 0x000042,
+ 0x40000A, 0x004274, 0x500112, 0x0029E5,
+ 0x000042, 0x40000A, 0x004234, 0x454104,
+ 0x000007, 0x004020, 0x000040, 0x003EE5,
+ 0x000020, 0x000040, 0x002DE5, 0x400152,
+ 0x50000A, 0x045144, 0x37DA86, 0x0000C5,
+ 0x003EE5, 0x004020, 0x000040, 0x002BE5,
+ 0x000042, 0x40000A, 0x404254, 0x000007,
+ 0x002AE5, 0x004020, 0x000040, 0x500132,
+ 0x040134, 0x005674, 0x0029E5, 0x020042,
+ 0x42000A, 0x000042, 0x50000A, 0x05417C,
+ 0x0028E5, 0x000042, 0x48000A, 0x0000C5,
+ 0x4CC144, 0x38A086, 0x0026E5, 0x0027E5,
+ 0x020042, 0x40004A, 0x50000A, 0x00423C,
+ 0x00567C, 0x0028E5, 0x004820, 0x000040,
+ 0x281D12, 0x282512, 0x001F72, 0x002965,
+ 0x000042, 0x40000A, 0x004104, 0x393A86,
+ 0x0E0007, 0x160007, 0x1E0007, 0x003EE5,
+ 0x000042, 0x40000A, 0x004104, 0x397886,
+ 0x002D65, 0x000042, 0x28340A, 0x003465,
+ 0x020042, 0x42004A, 0x004020, 0x4A004A,
+ 0x50004A, 0x05D2F4, 0x54D104, 0x00735C,
+ 0x39E186, 0x000007, 0x000606, 0x080007,
+ 0x0C0007, 0x080007, 0x0A0007, 0x0001E5,
+ 0x020045, 0x004020, 0x000060, 0x000365,
+ 0x000040, 0x002E65, 0x001A20, 0x0A1A60,
+ 0x000040, 0x003465, 0x020042, 0x42004A,
+ 0x004020, 0x4A004A, 0x000606, 0x50004A,
+ 0x0017FD, 0x018042, 0x08000A, 0x000904,
+ 0x225A86, 0x000007, 0x00107D, 0x018042,
+ 0x0011FD, 0x33804A, 0x19804A, 0x20000A,
+ 0x000095, 0x2A1144, 0x01A144, 0x3B9086,
+ 0x00040D, 0x00B184, 0x3B9186, 0x0018FD,
+ 0x018042, 0x0010FD, 0x09804A, 0x38000A,
+ 0x000095, 0x010924, 0x003A64, 0x3B8186,
+ 0x000007, 0x003904, 0x3B9286, 0x000007,
+ 0x3B9A06, 0x00000D, 0x00008D, 0x000820,
+ 0x00387D, 0x018040, 0x700002, 0x00117D,
+ 0x018042, 0x00197D, 0x29804A, 0x30000A,
+ 0x380002, 0x003124, 0x000424, 0x000424,
+ 0x002A24, 0x280502, 0x00068D, 0x000810,
+ 0x28143A, 0x00750D, 0x00B124, 0x002264,
+ 0x3D0386, 0x284402, 0x000810, 0x280C3A,
+ 0x0B800D, 0x000820, 0x0002FD, 0x018040,
+ 0x200007, 0x00758D, 0x00B124, 0x100102,
+ 0x012144, 0x3E4986, 0x001810, 0x10003A,
+ 0x00387D, 0x018042, 0x08000A, 0x000904,
+ 0x3E4886, 0x030000, 0x3E4A06, 0x0000BD,
+ 0x00008D, 0x023164, 0x000A64, 0x280D02,
+ 0x0B808D, 0x000820, 0x0002FD, 0x018040,
+ 0x200007, 0x00387D, 0x018042, 0x08000A,
+ 0x000904, 0x3E3286, 0x030000, 0x0002FD,
+ 0x018042, 0x08000A, 0x000904, 0x3D8286,
+ 0x000007, 0x002810, 0x28043A, 0x00750D,
+ 0x030924, 0x002264, 0x280D02, 0x02316C,
+ 0x28450A, 0x0B810D, 0x000820, 0x0002FD,
+ 0x018040, 0x200007, 0x00008D, 0x000A24,
+ 0x3E4A06, 0x100102, 0x001810, 0x10003A,
+ 0x0000BD, 0x003810, 0x30043A, 0x00187D,
+ 0x018042, 0x0018FD, 0x09804A, 0x20000A,
+ 0x0000AD, 0x028924, 0x07212C, 0x001010,
+ 0x300583, 0x300D8B, 0x3014BB, 0x301C83,
+ 0x002083, 0x00137D, 0x038042, 0x33844A,
+ 0x33ACCB, 0x33B4CB, 0x33BCCB, 0x33C4CB,
+ 0x33CCCB, 0x33D4CB, 0x305C8B, 0x006083,
+ 0x001E0D, 0x0005FD, 0x018042, 0x20000A,
+ 0x020924, 0x00068D, 0x00A96C, 0x00009D,
+ 0x0002FD, 0x018042, 0x08000A, 0x000904,
+ 0x3F6A86, 0x000007, 0x280502, 0x280D0A,
+ 0x284402, 0x001810, 0x28143A, 0x0C008D,
+ 0x000820, 0x0002FD, 0x018040, 0x220007,
+ 0x003904, 0x225886, 0x001E0D, 0x00057D,
+ 0x018042, 0x20000A, 0x020924, 0x0000A5,
+ 0x0002FD, 0x018042, 0x08000A, 0x000904,
+ 0x402A86, 0x000007, 0x280502, 0x280C02,
+ 0x002010, 0x28143A, 0x0C010D, 0x000820,
+ 0x0002FD, 0x018040, 0x225A06, 0x220007,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000
+};
+
+#endif //_HWMCODE_
+
+
diff --git a/drivers/sound/Config.in b/drivers/sound/Config.in
index eea182f5e..640d9b219 100644
--- a/drivers/sound/Config.in
+++ b/drivers/sound/Config.in
@@ -3,9 +3,6 @@
# 18 Apr 1998, Michael Elizabeth Chastain, <mailto:mec@shout.net>
# More hacking for modularisation.
#
-# See drivers/sound/README.CONFIG for more information.
-
-
# Prompt user for primary drivers.
@@ -27,7 +24,7 @@ if [ "$CONFIG_VISWS" = "y" ]; then
dep_tristate ' SGI Visual Workstation Sound' CONFIG_SOUND_VWSND $CONFIG_SOUND
fi
-dep_tristate ' Trident 4DWave DX/NX or SiS 7018 PCI Audio Core' CONFIG_SOUND_TRIDENT $CONFIG_SOUND
+dep_tristate ' Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core' CONFIG_SOUND_TRIDENT $CONFIG_SOUND
dep_tristate ' Support for Turtle Beach MultiSound Classic, Tahiti, Monterey' CONFIG_SOUND_MSNDCLAS $CONFIG_SOUND
if [ "$CONFIG_SOUND_MSNDCLAS" = "y" -o "$CONFIG_SOUND_MSNDCLAS" = "m" ]; then
@@ -79,7 +76,7 @@ if [ "$CONFIG_SOUND_MSNDPIN" = "y" -o "$CONFIG_SOUND_MSNDCLAS" = "y" ]; then
int 'MSND buffer size (kB)' CONFIG_MSND_FIFOSIZE 128
fi
-tristate ' VIA 82C686 Audio Codec' CONFIG_SOUND_VIA82CXXX
+dep_tristate ' VIA 82C686 Audio Codec' CONFIG_SOUND_VIA82CXXX $CONFIG_PCI
dep_tristate ' OSS sound modules' CONFIG_SOUND_OSS $CONFIG_SOUND
@@ -149,6 +146,7 @@ if [ "$CONFIG_SOUND_OSS" = "y" -o "$CONFIG_SOUND_OSS" = "m" ]; then
dep_tristate ' Yamaha FM synthesizer (YM3812/OPL-3) support' CONFIG_SOUND_YM3812 $CONFIG_SOUND_OSS
dep_tristate ' Yamaha OPL3-SA1 audio controller' CONFIG_SOUND_OPL3SA1 $CONFIG_SOUND_OSS
dep_tristate ' Yamaha OPL3-SA2, SA3, and SAx based PnP cards' CONFIG_SOUND_OPL3SA2 $CONFIG_SOUND_OSS
+ dep_tristate ' Yamaha PCI legacy mode support' CONFIG_SOUND_YMPCI $CONFIG_SOUND_OSS $CONFIG_PCI
dep_tristate ' 6850 UART support' CONFIG_SOUND_UART6850 $CONFIG_SOUND_OSS
dep_tristate ' Gallant Audio Cards (SC-6000 and SC-6600 based)' CONFIG_SOUND_AEDSP16 $CONFIG_SOUND_OSS
@@ -181,3 +179,4 @@ if [ "$CONFIG_SOUND_OSS" = "y" -o "$CONFIG_SOUND_OSS" = "m" ]; then
fi
+dep_tristate ' TV card (bt848) mixer support' CONFIG_SOUND_TVMIXER $CONFIG_SOUND $CONFIG_I2C
diff --git a/drivers/sound/Hwmcode.h b/drivers/sound/Hwmcode.h
new file mode 100644
index 000000000..e4d9a68fa
--- /dev/null
+++ b/drivers/sound/Hwmcode.h
@@ -0,0 +1,804 @@
+//=============================================================================
+// Copyright (c) 1997 Yamaha Corporation. All Rights Reserved.
+//
+// Title:
+// hwmcode.c
+// Desc:
+// micro-code for CTRL & DSP
+// HISTORY:
+// April 03, 1997: 1st try by M. Mukojima
+//=============================================================================
+#define YDSXG_DSPLENGTH 0x0080
+#define YDSXG_CTRLLENGTH 0x3000
+
+
+static unsigned long int gdwDSPCode[YDSXG_DSPLENGTH >> 2] = {
+ 0x00000081, 0x000001a4, 0x0000000a, 0x0000002f,
+ 0x00080253, 0x01800317, 0x0000407b, 0x0000843f,
+ 0x0001483c, 0x0001943c, 0x0005d83c, 0x00001c3c,
+ 0x0000c07b, 0x00050c3f, 0x0121503c, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000
+};
+
+
+// --------------------------------------------
+// DS-1E Controller InstructionRAM Code
+// 1999/06/21
+// Buf441 slot is Enabled.
+// --------------------------------------------
+// 04/09?@creat
+// 04/12 stop nise fix
+// 06/21?@WorkingOff timming
+static unsigned long gdwCtrl1eCode[YDSXG_CTRLLENGTH >> 2] = {
+ 0x000007, 0x240007, 0x0C0007, 0x1C0007,
+ 0x060007, 0x700002, 0x000020, 0x030040,
+ 0x007104, 0x004286, 0x030040, 0x000F0D,
+ 0x000810, 0x20043A, 0x000282, 0x00020D,
+ 0x000810, 0x20043A, 0x001282, 0x200E82,
+ 0x00800D, 0x000810, 0x20043A, 0x001A82,
+ 0x03460D, 0x000810, 0x10043A, 0x02EC0D,
+ 0x000810, 0x18043A, 0x00010D, 0x020015,
+ 0x0000FD, 0x000020, 0x038860, 0x039060,
+ 0x038060, 0x038040, 0x038040, 0x038040,
+ 0x018040, 0x000A7D, 0x038040, 0x038040,
+ 0x018040, 0x200402, 0x000882, 0x08001A,
+ 0x000904, 0x017186, 0x000007, 0x260007,
+ 0x400007, 0x000007, 0x03258D, 0x000810,
+ 0x18043A, 0x260007, 0x284402, 0x00087D,
+ 0x018042, 0x00160A, 0x05A206, 0x000007,
+ 0x440007, 0x00230D, 0x000810, 0x08043A,
+ 0x22FA06, 0x000007, 0x0007FD, 0x018042,
+ 0x08000A, 0x000904, 0x02AB86, 0x000195,
+ 0x090D04, 0x000007, 0x000820, 0x0000F5,
+ 0x000B7D, 0x01F060, 0x0000FD, 0x033A06,
+ 0x018040, 0x000A7D, 0x038042, 0x13804A,
+ 0x18000A, 0x001820, 0x059060, 0x058860,
+ 0x018040, 0x0000FD, 0x018042, 0x70000A,
+ 0x000115, 0x071144, 0x033B86, 0x030000,
+ 0x007020, 0x036206, 0x018040, 0x00360D,
+ 0x000810, 0x08043A, 0x232206, 0x000007,
+ 0x02EC0D, 0x000810, 0x18043A, 0x019A06,
+ 0x000007, 0x240007, 0x000F8D, 0x000810,
+ 0x00163A, 0x002402, 0x005C02, 0x0028FD,
+ 0x000020, 0x018040, 0x08000D, 0x000815,
+ 0x510984, 0x000007, 0x00004D, 0x000E5D,
+ 0x000E02, 0x00430D, 0x000810, 0x08043A,
+ 0x2E1206, 0x000007, 0x00008D, 0x000924,
+ 0x000F02, 0x00470D, 0x000810, 0x08043A,
+ 0x2E1206, 0x000007, 0x480480, 0x001210,
+ 0x28043A, 0x00778D, 0x000810, 0x280C3A,
+ 0x00068D, 0x000810, 0x28143A, 0x284402,
+ 0x03258D, 0x000810, 0x18043A, 0x07FF8D,
+ 0x000820, 0x0002FD, 0x018040, 0x260007,
+ 0x200007, 0x0002FD, 0x018042, 0x08000A,
+ 0x000904, 0x051286, 0x000007, 0x240007,
+ 0x02EC0D, 0x000810, 0x18043A, 0x00387D,
+ 0x018042, 0x08000A, 0x001015, 0x010984,
+ 0x019B86, 0x000007, 0x01B206, 0x000007,
+ 0x0008FD, 0x018042, 0x18000A, 0x001904,
+ 0x22B886, 0x280007, 0x001810, 0x28043A,
+ 0x280C02, 0x00000D, 0x000810, 0x28143A,
+ 0x08808D, 0x000820, 0x0002FD, 0x018040,
+ 0x200007, 0x00020D, 0x189904, 0x000007,
+ 0x00402D, 0x0000BD, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x065A86, 0x000007,
+ 0x000100, 0x000A20, 0x00047D, 0x018040,
+ 0x018042, 0x20000A, 0x003015, 0x012144,
+ 0x036186, 0x000007, 0x002104, 0x036186,
+ 0x000007, 0x000F8D, 0x000810, 0x280C3A,
+ 0x023944, 0x07C986, 0x000007, 0x001810,
+ 0x28043A, 0x08810D, 0x000820, 0x0002FD,
+ 0x018040, 0x200007, 0x002810, 0x78003A,
+ 0x00788D, 0x000810, 0x08043A, 0x2A1206,
+ 0x000007, 0x00400D, 0x001015, 0x189904,
+ 0x292904, 0x393904, 0x000007, 0x070206,
+ 0x000007, 0x0004F5, 0x00007D, 0x000020,
+ 0x00008D, 0x010860, 0x018040, 0x00047D,
+ 0x038042, 0x21804A, 0x18000A, 0x021944,
+ 0x229086, 0x000007, 0x004075, 0x71F104,
+ 0x000007, 0x010042, 0x28000A, 0x002904,
+ 0x225886, 0x000007, 0x003C0D, 0x30A904,
+ 0x000007, 0x00077D, 0x018042, 0x08000A,
+ 0x000904, 0x08DA86, 0x00057D, 0x002820,
+ 0x03B060, 0x08F206, 0x018040, 0x003020,
+ 0x03A860, 0x018040, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x08FA86, 0x000007,
+ 0x00057D, 0x018042, 0x28040A, 0x000E8D,
+ 0x000810, 0x280C3A, 0x00000D, 0x000810,
+ 0x28143A, 0x09000D, 0x000820, 0x0002FD,
+ 0x018040, 0x200007, 0x003DFD, 0x000020,
+ 0x018040, 0x00107D, 0x009D8D, 0x000810,
+ 0x08043A, 0x2A1206, 0x000007, 0x000815,
+ 0x08001A, 0x010984, 0x0A5186, 0x00137D,
+ 0x200500, 0x280F20, 0x338F60, 0x3B8F60,
+ 0x438F60, 0x4B8F60, 0x538F60, 0x5B8F60,
+ 0x038A60, 0x018040, 0x00107D, 0x018042,
+ 0x08000A, 0x000215, 0x010984, 0x3A8186,
+ 0x000007, 0x007FBD, 0x383DC4, 0x000007,
+ 0x001A7D, 0x001375, 0x018042, 0x09004A,
+ 0x10000A, 0x0B8D04, 0x139504, 0x000007,
+ 0x000820, 0x019060, 0x001104, 0x225886,
+ 0x010040, 0x0017FD, 0x018042, 0x08000A,
+ 0x000904, 0x225A86, 0x000007, 0x00197D,
+ 0x038042, 0x09804A, 0x10000A, 0x000924,
+ 0x001664, 0x0011FD, 0x038042, 0x2B804A,
+ 0x19804A, 0x00008D, 0x218944, 0x000007,
+ 0x002244, 0x0C1986, 0x000007, 0x001A64,
+ 0x002A24, 0x00197D, 0x080102, 0x100122,
+ 0x000820, 0x039060, 0x018040, 0x003DFD,
+ 0x00008D, 0x000820, 0x018040, 0x001375,
+ 0x001A7D, 0x010042, 0x09804A, 0x10000A,
+ 0x00021D, 0x0189E4, 0x2992E4, 0x309144,
+ 0x000007, 0x00060D, 0x000A15, 0x000C1D,
+ 0x001025, 0x00A9E4, 0x012BE4, 0x000464,
+ 0x01B3E4, 0x0232E4, 0x000464, 0x000464,
+ 0x000464, 0x000464, 0x00040D, 0x08B1C4,
+ 0x000007, 0x000820, 0x000BF5, 0x030040,
+ 0x00197D, 0x038042, 0x09804A, 0x000A24,
+ 0x08000A, 0x080E64, 0x000007, 0x100122,
+ 0x000820, 0x031060, 0x010040, 0x0064AC,
+ 0x00027D, 0x000020, 0x018040, 0x00107D,
+ 0x018042, 0x0011FD, 0x3B804A, 0x09804A,
+ 0x20000A, 0x000095, 0x1A1144, 0x00A144,
+ 0x0E5886, 0x00040D, 0x00B984, 0x0E5986,
+ 0x0018FD, 0x018042, 0x0010FD, 0x09804A,
+ 0x28000A, 0x000095, 0x010924, 0x002A64,
+ 0x0E4986, 0x000007, 0x002904, 0x0E5A86,
+ 0x000007, 0x0E6206, 0x080002, 0x00008D,
+ 0x00387D, 0x000820, 0x018040, 0x00127D,
+ 0x018042, 0x10000A, 0x003904, 0x0F0986,
+ 0x00080D, 0x7FFFB5, 0x00B984, 0x0ED986,
+ 0x000025, 0x0FB206, 0x00002D, 0x000015,
+ 0x00082D, 0x02E00D, 0x000820, 0x0FFA06,
+ 0x00000D, 0x7F8035, 0x00B984, 0x0FA986,
+ 0x400025, 0x00008D, 0x110944, 0x000007,
+ 0x00018D, 0x109504, 0x000007, 0x009164,
+ 0x000424, 0x000424, 0x000424, 0x100102,
+ 0x280002, 0x02DF0D, 0x000820, 0x0FFA06,
+ 0x00018D, 0x00042D, 0x00008D, 0x109504,
+ 0x000007, 0x00020D, 0x109184, 0x000007,
+ 0x02DF8D, 0x000820, 0x00008D, 0x0038FD,
+ 0x018040, 0x003BFD, 0x001020, 0x03A860,
+ 0x000815, 0x313184, 0x212184, 0x000007,
+ 0x03B060, 0x03A060, 0x018040, 0x0022FD,
+ 0x000095, 0x010924, 0x000424, 0x000424,
+ 0x001264, 0x100102, 0x000820, 0x039060,
+ 0x018040, 0x001924, 0x010F0D, 0x00397D,
+ 0x000820, 0x058040, 0x038042, 0x09844A,
+ 0x000606, 0x08040A, 0x000424, 0x000424,
+ 0x00117D, 0x018042, 0x08000A, 0x000A24,
+ 0x280502, 0x280C02, 0x09800D, 0x000820,
+ 0x0002FD, 0x018040, 0x200007, 0x0022FD,
+ 0x018042, 0x08000A, 0x000095, 0x280DC4,
+ 0x011924, 0x00197D, 0x018042, 0x0011FD,
+ 0x09804A, 0x10000A, 0x0000B5, 0x113144,
+ 0x0A8D04, 0x000007, 0x080A44, 0x129504,
+ 0x000007, 0x0023FD, 0x001020, 0x038040,
+ 0x101244, 0x000007, 0x000820, 0x039060,
+ 0x018040, 0x0002FD, 0x018042, 0x08000A,
+ 0x000904, 0x123286, 0x000007, 0x003BFD,
+ 0x000100, 0x000A10, 0x0B807A, 0x13804A,
+ 0x090984, 0x000007, 0x000095, 0x013D04,
+ 0x12B886, 0x10000A, 0x100002, 0x090984,
+ 0x000007, 0x038042, 0x11804A, 0x090D04,
+ 0x000007, 0x10000A, 0x090D84, 0x000007,
+ 0x00257D, 0x000820, 0x018040, 0x00010D,
+ 0x000810, 0x28143A, 0x00127D, 0x018042,
+ 0x20000A, 0x00197D, 0x018042, 0x00117D,
+ 0x31804A, 0x10000A, 0x003124, 0x013B8D,
+ 0x00397D, 0x000820, 0x058040, 0x038042,
+ 0x09844A, 0x000606, 0x08040A, 0x300102,
+ 0x003124, 0x000424, 0x000424, 0x001224,
+ 0x280502, 0x001A4C, 0x143986, 0x700002,
+ 0x00002D, 0x030000, 0x00387D, 0x018042,
+ 0x10000A, 0x146206, 0x002124, 0x0000AD,
+ 0x100002, 0x00010D, 0x000924, 0x006B24,
+ 0x014A0D, 0x00397D, 0x000820, 0x058040,
+ 0x038042, 0x09844A, 0x000606, 0x08040A,
+ 0x003264, 0x00008D, 0x000A24, 0x001020,
+ 0x00227D, 0x018040, 0x014F8D, 0x000810,
+ 0x08043A, 0x2B5A06, 0x000007, 0x002820,
+ 0x00207D, 0x018040, 0x00117D, 0x038042,
+ 0x13804A, 0x33800A, 0x00387D, 0x018042,
+ 0x08000A, 0x000904, 0x177286, 0x000007,
+ 0x00008D, 0x030964, 0x015B0D, 0x00397D,
+ 0x000820, 0x058040, 0x038042, 0x09844A,
+ 0x000606, 0x08040A, 0x380102, 0x000424,
+ 0x000424, 0x001224, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x15DA86, 0x000007,
+ 0x280502, 0x001A4C, 0x177186, 0x000007,
+ 0x032164, 0x00632C, 0x003DFD, 0x018042,
+ 0x08000A, 0x000095, 0x090904, 0x000007,
+ 0x000820, 0x001A4C, 0x169986, 0x018040,
+ 0x030000, 0x16B206, 0x002124, 0x00010D,
+ 0x000924, 0x006B24, 0x016F0D, 0x00397D,
+ 0x000820, 0x058040, 0x038042, 0x09844A,
+ 0x000606, 0x08040A, 0x003A64, 0x000095,
+ 0x001224, 0x0002FD, 0x018042, 0x08000A,
+ 0x000904, 0x171286, 0x000007, 0x01760D,
+ 0x000810, 0x08043A, 0x2B5A06, 0x000007,
+ 0x160A06, 0x000007, 0x007020, 0x08010A,
+ 0x10012A, 0x0020FD, 0x038860, 0x039060,
+ 0x018040, 0x00227D, 0x018042, 0x003DFD,
+ 0x08000A, 0x31844A, 0x000904, 0x181086,
+ 0x18008B, 0x00008D, 0x189904, 0x00312C,
+ 0x18E206, 0x000007, 0x00324C, 0x186B86,
+ 0x000007, 0x001904, 0x186886, 0x000007,
+ 0x000095, 0x199144, 0x00222C, 0x003124,
+ 0x00636C, 0x000E3D, 0x001375, 0x000BFD,
+ 0x010042, 0x09804A, 0x10000A, 0x038AEC,
+ 0x0393EC, 0x00224C, 0x18E186, 0x000007,
+ 0x00008D, 0x189904, 0x00226C, 0x00322C,
+ 0x30050A, 0x301DAB, 0x002083, 0x0018FD,
+ 0x018042, 0x08000A, 0x018924, 0x300502,
+ 0x001083, 0x001875, 0x010042, 0x10000A,
+ 0x00008D, 0x010924, 0x001375, 0x330542,
+ 0x330CCB, 0x332CCB, 0x3334CB, 0x333CCB,
+ 0x3344CB, 0x334CCB, 0x3354CB, 0x305C8B,
+ 0x006083, 0x0002F5, 0x010042, 0x08000A,
+ 0x000904, 0x19B286, 0x000007, 0x001E2D,
+ 0x0005FD, 0x018042, 0x08000A, 0x028924,
+ 0x280502, 0x00060D, 0x000810, 0x280C3A,
+ 0x00008D, 0x000810, 0x28143A, 0x0A808D,
+ 0x000820, 0x0002F5, 0x010040, 0x220007,
+ 0x001275, 0x030042, 0x21004A, 0x00008D,
+ 0x1A0944, 0x000007, 0x01AB8D, 0x000810,
+ 0x08043A, 0x2CAA06, 0x000007, 0x0001F5,
+ 0x030042, 0x0D004A, 0x10000A, 0x089144,
+ 0x000007, 0x000820, 0x010040, 0x0025F5,
+ 0x0A3144, 0x000007, 0x000820, 0x032860,
+ 0x030040, 0x00217D, 0x038042, 0x0B804A,
+ 0x10000A, 0x000820, 0x031060, 0x030040,
+ 0x00008D, 0x000124, 0x00012C, 0x000E64,
+ 0x001A64, 0x00636C, 0x08010A, 0x10012A,
+ 0x000820, 0x031060, 0x030040, 0x0020FD,
+ 0x018042, 0x08000A, 0x00227D, 0x018042,
+ 0x10000A, 0x000820, 0x031060, 0x030040,
+ 0x00197D, 0x018042, 0x08000A, 0x0022FD,
+ 0x038042, 0x10000A, 0x000820, 0x031060,
+ 0x030040, 0x090D04, 0x000007, 0x000820,
+ 0x030040, 0x038042, 0x0B804A, 0x10000A,
+ 0x000820, 0x031060, 0x030040, 0x038042,
+ 0x13804A, 0x19804A, 0x110D04, 0x198D04,
+ 0x000007, 0x08000A, 0x001020, 0x031860,
+ 0x030860, 0x030040, 0x00008D, 0x0B0944,
+ 0x000007, 0x000820, 0x010040, 0x0005F5,
+ 0x030042, 0x08000A, 0x000820, 0x010040,
+ 0x0000F5, 0x010042, 0x08000A, 0x000904,
+ 0x1D9886, 0x001E75, 0x030042, 0x01044A,
+ 0x000C0A, 0x1DAA06, 0x000007, 0x000402,
+ 0x000C02, 0x00177D, 0x001AF5, 0x018042,
+ 0x03144A, 0x031C4A, 0x03244A, 0x032C4A,
+ 0x03344A, 0x033C4A, 0x03444A, 0x004C0A,
+ 0x00043D, 0x0013F5, 0x001AFD, 0x030042,
+ 0x0B004A, 0x1B804A, 0x13804A, 0x20000A,
+ 0x089144, 0x19A144, 0x0389E4, 0x0399EC,
+ 0x005502, 0x005D0A, 0x030042, 0x0B004A,
+ 0x1B804A, 0x13804A, 0x20000A, 0x089144,
+ 0x19A144, 0x0389E4, 0x0399EC, 0x006502,
+ 0x006D0A, 0x030042, 0x0B004A, 0x19004A,
+ 0x2B804A, 0x13804A, 0x21804A, 0x30000A,
+ 0x089144, 0x19A144, 0x2AB144, 0x0389E4,
+ 0x0399EC, 0x007502, 0x007D0A, 0x03A9E4,
+ 0x000702, 0x00107D, 0x000415, 0x018042,
+ 0x08000A, 0x0109E4, 0x000F02, 0x002AF5,
+ 0x0019FD, 0x010042, 0x09804A, 0x10000A,
+ 0x000934, 0x001674, 0x0029F5, 0x010042,
+ 0x10000A, 0x00917C, 0x002075, 0x010042,
+ 0x08000A, 0x000904, 0x200A86, 0x0026F5,
+ 0x0027F5, 0x030042, 0x09004A, 0x10000A,
+ 0x000A3C, 0x00167C, 0x001A75, 0x000BFD,
+ 0x010042, 0x51804A, 0x48000A, 0x160007,
+ 0x001075, 0x010042, 0x282C0A, 0x281D12,
+ 0x282512, 0x001F32, 0x1E0007, 0x0E0007,
+ 0x001975, 0x010042, 0x002DF5, 0x0D004A,
+ 0x10000A, 0x009144, 0x20EA86, 0x010042,
+ 0x28340A, 0x000E5D, 0x00008D, 0x000375,
+ 0x000820, 0x010040, 0x05D2F4, 0x54D104,
+ 0x00735C, 0x218B86, 0x000007, 0x0C0007,
+ 0x080007, 0x0A0007, 0x02178D, 0x000810,
+ 0x08043A, 0x34B206, 0x000007, 0x219206,
+ 0x000007, 0x080007, 0x002275, 0x010042,
+ 0x20000A, 0x002104, 0x225886, 0x001E2D,
+ 0x0002F5, 0x010042, 0x08000A, 0x000904,
+ 0x21CA86, 0x000007, 0x002010, 0x30043A,
+ 0x00057D, 0x0180C3, 0x08000A, 0x028924,
+ 0x280502, 0x280C02, 0x0A810D, 0x000820,
+ 0x0002F5, 0x010040, 0x220007, 0x0004FD,
+ 0x018042, 0x70000A, 0x030000, 0x007020,
+ 0x07FA06, 0x018040, 0x022B8D, 0x000810,
+ 0x08043A, 0x2CAA06, 0x000007, 0x0002FD,
+ 0x018042, 0x08000A, 0x000904, 0x22C286,
+ 0x000007, 0x020206, 0x000007, 0x000875,
+ 0x0009FD, 0x00010D, 0x234206, 0x000295,
+ 0x000B75, 0x00097D, 0x00000D, 0x000515,
+ 0x010042, 0x18000A, 0x001904, 0x2A0086,
+ 0x0006F5, 0x001020, 0x010040, 0x0004F5,
+ 0x000820, 0x010040, 0x000775, 0x010042,
+ 0x09804A, 0x10000A, 0x001124, 0x000904,
+ 0x23F286, 0x000815, 0x080102, 0x101204,
+ 0x241206, 0x000575, 0x081204, 0x000007,
+ 0x100102, 0x000575, 0x000425, 0x021124,
+ 0x100102, 0x000820, 0x031060, 0x010040,
+ 0x001924, 0x2A0086, 0x00008D, 0x000464,
+ 0x009D04, 0x291086, 0x180102, 0x000575,
+ 0x010042, 0x28040A, 0x00018D, 0x000924,
+ 0x280D02, 0x00000D, 0x000924, 0x281502,
+ 0x10000D, 0x000820, 0x0002F5, 0x010040,
+ 0x200007, 0x001175, 0x0002FD, 0x018042,
+ 0x08000A, 0x000904, 0x24FA86, 0x000007,
+ 0x000100, 0x080B20, 0x130B60, 0x1B0B60,
+ 0x030A60, 0x010040, 0x050042, 0x3D004A,
+ 0x35004A, 0x2D004A, 0x20000A, 0x0006F5,
+ 0x010042, 0x28140A, 0x0004F5, 0x010042,
+ 0x08000A, 0x000315, 0x010D04, 0x260286,
+ 0x004015, 0x000095, 0x010D04, 0x25F086,
+ 0x100022, 0x10002A, 0x261A06, 0x000007,
+ 0x333104, 0x2AA904, 0x000007, 0x032124,
+ 0x280502, 0x284402, 0x001124, 0x400102,
+ 0x000424, 0x000424, 0x003224, 0x00292C,
+ 0x00636C, 0x277386, 0x000007, 0x02B164,
+ 0x000464, 0x000464, 0x00008D, 0x000A64,
+ 0x280D02, 0x10008D, 0x000820, 0x0002F5,
+ 0x010040, 0x220007, 0x00008D, 0x38B904,
+ 0x000007, 0x03296C, 0x30010A, 0x0002F5,
+ 0x010042, 0x08000A, 0x000904, 0x270286,
+ 0x000007, 0x00212C, 0x28050A, 0x00316C,
+ 0x00046C, 0x00046C, 0x28450A, 0x001124,
+ 0x006B64, 0x100102, 0x00008D, 0x01096C,
+ 0x280D0A, 0x10010D, 0x000820, 0x0002F5,
+ 0x010040, 0x220007, 0x004124, 0x000424,
+ 0x000424, 0x003224, 0x300102, 0x032944,
+ 0x27FA86, 0x000007, 0x300002, 0x0004F5,
+ 0x010042, 0x08000A, 0x000315, 0x010D04,
+ 0x284086, 0x003124, 0x000464, 0x300102,
+ 0x0002F5, 0x010042, 0x08000A, 0x000904,
+ 0x284A86, 0x000007, 0x284402, 0x003124,
+ 0x300502, 0x003924, 0x300583, 0x000883,
+ 0x0005F5, 0x010042, 0x28040A, 0x00008D,
+ 0x008124, 0x280D02, 0x00008D, 0x008124,
+ 0x281502, 0x10018D, 0x000820, 0x0002F5,
+ 0x010040, 0x220007, 0x001025, 0x000575,
+ 0x030042, 0x09004A, 0x10000A, 0x0A0904,
+ 0x121104, 0x000007, 0x001020, 0x050860,
+ 0x050040, 0x0006FD, 0x018042, 0x09004A,
+ 0x10000A, 0x0000A5, 0x0A0904, 0x121104,
+ 0x000007, 0x000820, 0x019060, 0x010040,
+ 0x0002F5, 0x010042, 0x08000A, 0x000904,
+ 0x29CA86, 0x000007, 0x244206, 0x000007,
+ 0x000606, 0x000007, 0x0002F5, 0x010042,
+ 0x08000A, 0x000904, 0x2A1A86, 0x000007,
+ 0x000100, 0x080B20, 0x138B60, 0x1B8B60,
+ 0x238B60, 0x2B8B60, 0x338B60, 0x3B8B60,
+ 0x438B60, 0x4B8B60, 0x538B60, 0x5B8B60,
+ 0x638B60, 0x6B8B60, 0x738B60, 0x7B8B60,
+ 0x038F60, 0x0B8F60, 0x138F60, 0x1B8F60,
+ 0x238F60, 0x2B8F60, 0x338F60, 0x3B8F60,
+ 0x438F60, 0x4B8F60, 0x538F60, 0x5B8F60,
+ 0x638F60, 0x6B8F60, 0x738F60, 0x7B8F60,
+ 0x038A60, 0x000606, 0x018040, 0x00008D,
+ 0x000A64, 0x280D02, 0x000A24, 0x00027D,
+ 0x018042, 0x10000A, 0x001224, 0x0003FD,
+ 0x018042, 0x08000A, 0x000904, 0x2C0A86,
+ 0x000007, 0x00018D, 0x000A24, 0x000464,
+ 0x000464, 0x080102, 0x000924, 0x000424,
+ 0x000424, 0x100102, 0x02000D, 0x009144,
+ 0x2C6186, 0x000007, 0x0001FD, 0x018042,
+ 0x08000A, 0x000A44, 0x2C4386, 0x018042,
+ 0x0A000D, 0x000820, 0x0002FD, 0x018040,
+ 0x200007, 0x00027D, 0x001020, 0x000606,
+ 0x018040, 0x0002F5, 0x010042, 0x08000A,
+ 0x000904, 0x2CB286, 0x000007, 0x00037D,
+ 0x018042, 0x08000A, 0x000904, 0x2CE286,
+ 0x000007, 0x000075, 0x002E7D, 0x010042,
+ 0x0B804A, 0x000020, 0x000904, 0x000686,
+ 0x010040, 0x31844A, 0x30048B, 0x000883,
+ 0x00008D, 0x000810, 0x28143A, 0x00008D,
+ 0x000810, 0x280C3A, 0x000675, 0x010042,
+ 0x08000A, 0x003815, 0x010924, 0x280502,
+ 0x0B000D, 0x000820, 0x0002F5, 0x010040,
+ 0x000606, 0x220007, 0x000464, 0x000464,
+ 0x000606, 0x000007, 0x000134, 0x007F8D,
+ 0x00093C, 0x281D12, 0x282512, 0x001F32,
+ 0x0E0007, 0x00010D, 0x00037D, 0x000820,
+ 0x018040, 0x05D2F4, 0x000007, 0x080007,
+ 0x00037D, 0x018042, 0x08000A, 0x000904,
+ 0x2E8A86, 0x000007, 0x000606, 0x000007,
+ 0x000007, 0x000012, 0x100007, 0x320007,
+ 0x600007, 0x460007, 0x100080, 0x48001A,
+ 0x004904, 0x2EF186, 0x000007, 0x001210,
+ 0x58003A, 0x000145, 0x5C5D04, 0x000007,
+ 0x000080, 0x48001A, 0x004904, 0x2F4186,
+ 0x000007, 0x001210, 0x50003A, 0x005904,
+ 0x2F9886, 0x000045, 0x0000C5, 0x7FFFF5,
+ 0x7FFF7D, 0x07D524, 0x004224, 0x500102,
+ 0x200502, 0x000082, 0x40001A, 0x004104,
+ 0x2FC986, 0x000007, 0x003865, 0x40001A,
+ 0x004020, 0x00104D, 0x04C184, 0x31AB86,
+ 0x000040, 0x040007, 0x000165, 0x000145,
+ 0x004020, 0x000040, 0x000765, 0x080080,
+ 0x40001A, 0x004104, 0x305986, 0x000007,
+ 0x001210, 0x40003A, 0x004104, 0x30B286,
+ 0x00004D, 0x0000CD, 0x004810, 0x20043A,
+ 0x000882, 0x40001A, 0x004104, 0x30C186,
+ 0x000007, 0x004820, 0x005904, 0x319886,
+ 0x000040, 0x0007E5, 0x200480, 0x2816A0,
+ 0x3216E0, 0x3A16E0, 0x4216E0, 0x021260,
+ 0x000040, 0x000032, 0x400075, 0x00007D,
+ 0x07D574, 0x200512, 0x000082, 0x40001A,
+ 0x004104, 0x317186, 0x000007, 0x038A06,
+ 0x640007, 0x0000E5, 0x000020, 0x000040,
+ 0x000A65, 0x000020, 0x020040, 0x020040,
+ 0x000040, 0x000165, 0x000042, 0x70000A,
+ 0x007104, 0x323286, 0x000007, 0x060007,
+ 0x019A06, 0x640007, 0x050000, 0x007020,
+ 0x000040, 0x038A06, 0x640007, 0x000007,
+ 0x00306D, 0x028860, 0x029060, 0x08000A,
+ 0x028860, 0x008040, 0x100012, 0x00100D,
+ 0x009184, 0x32D186, 0x000E0D, 0x009184,
+ 0x33E186, 0x000007, 0x300007, 0x001020,
+ 0x003B6D, 0x008040, 0x000080, 0x08001A,
+ 0x000904, 0x32F186, 0x000007, 0x001220,
+ 0x000DED, 0x008040, 0x008042, 0x10000A,
+ 0x40000D, 0x109544, 0x000007, 0x001020,
+ 0x000DED, 0x008040, 0x008042, 0x20040A,
+ 0x000082, 0x08001A, 0x000904, 0x338186,
+ 0x000007, 0x003B6D, 0x008042, 0x08000A,
+ 0x000E15, 0x010984, 0x342B86, 0x600007,
+ 0x08001A, 0x000C15, 0x010984, 0x341386,
+ 0x000020, 0x1A0007, 0x0002ED, 0x008040,
+ 0x620007, 0x00306D, 0x028042, 0x0A804A,
+ 0x000820, 0x0A804A, 0x000606, 0x10804A,
+ 0x000007, 0x282512, 0x001F32, 0x05D2F4,
+ 0x54D104, 0x00735C, 0x000786, 0x000007,
+ 0x0C0007, 0x0A0007, 0x1C0007, 0x003465,
+ 0x020040, 0x004820, 0x025060, 0x40000A,
+ 0x024060, 0x000040, 0x454944, 0x000007,
+ 0x004020, 0x003AE5, 0x000040, 0x0028E5,
+ 0x000042, 0x48000A, 0x004904, 0x39F886,
+ 0x002C65, 0x000042, 0x40000A, 0x0000D5,
+ 0x454104, 0x000007, 0x000655, 0x054504,
+ 0x368286, 0x0001D5, 0x054504, 0x368086,
+ 0x002B65, 0x000042, 0x003AE5, 0x50004A,
+ 0x40000A, 0x45C3D4, 0x000007, 0x454504,
+ 0x000007, 0x0000CD, 0x444944, 0x000007,
+ 0x454504, 0x000007, 0x00014D, 0x554944,
+ 0x000007, 0x045144, 0x367986, 0x002C65,
+ 0x000042, 0x48000A, 0x4CD104, 0x000007,
+ 0x04C144, 0x368386, 0x000007, 0x160007,
+ 0x002CE5, 0x040042, 0x40000A, 0x004020,
+ 0x000040, 0x002965, 0x000042, 0x40000A,
+ 0x004104, 0x36F086, 0x000007, 0x002402,
+ 0x383206, 0x005C02, 0x0025E5, 0x000042,
+ 0x40000A, 0x004274, 0x002AE5, 0x000042,
+ 0x40000A, 0x004274, 0x500112, 0x0029E5,
+ 0x000042, 0x40000A, 0x004234, 0x454104,
+ 0x000007, 0x004020, 0x000040, 0x003EE5,
+ 0x000020, 0x000040, 0x002DE5, 0x400152,
+ 0x50000A, 0x045144, 0x37DA86, 0x0000C5,
+ 0x003EE5, 0x004020, 0x000040, 0x002BE5,
+ 0x000042, 0x40000A, 0x404254, 0x000007,
+ 0x002AE5, 0x004020, 0x000040, 0x500132,
+ 0x040134, 0x005674, 0x0029E5, 0x020042,
+ 0x42000A, 0x000042, 0x50000A, 0x05417C,
+ 0x0028E5, 0x000042, 0x48000A, 0x0000C5,
+ 0x4CC144, 0x38A086, 0x0026E5, 0x0027E5,
+ 0x020042, 0x40004A, 0x50000A, 0x00423C,
+ 0x00567C, 0x0028E5, 0x004820, 0x000040,
+ 0x281D12, 0x282512, 0x001F72, 0x002965,
+ 0x000042, 0x40000A, 0x004104, 0x393A86,
+ 0x0E0007, 0x160007, 0x1E0007, 0x003EE5,
+ 0x000042, 0x40000A, 0x004104, 0x397886,
+ 0x002D65, 0x000042, 0x28340A, 0x003465,
+ 0x020042, 0x42004A, 0x004020, 0x4A004A,
+ 0x50004A, 0x05D2F4, 0x54D104, 0x00735C,
+ 0x39E186, 0x000007, 0x000606, 0x080007,
+ 0x0C0007, 0x080007, 0x0A0007, 0x0001E5,
+ 0x020045, 0x004020, 0x000060, 0x000365,
+ 0x000040, 0x002E65, 0x001A20, 0x0A1A60,
+ 0x000040, 0x003465, 0x020042, 0x42004A,
+ 0x004020, 0x4A004A, 0x000606, 0x50004A,
+ 0x0017FD, 0x018042, 0x08000A, 0x000904,
+ 0x225A86, 0x000007, 0x00107D, 0x018042,
+ 0x0011FD, 0x33804A, 0x19804A, 0x20000A,
+ 0x000095, 0x2A1144, 0x01A144, 0x3B9086,
+ 0x00040D, 0x00B184, 0x3B9186, 0x0018FD,
+ 0x018042, 0x0010FD, 0x09804A, 0x38000A,
+ 0x000095, 0x010924, 0x003A64, 0x3B8186,
+ 0x000007, 0x003904, 0x3B9286, 0x000007,
+ 0x3B9A06, 0x00000D, 0x00008D, 0x000820,
+ 0x00387D, 0x018040, 0x700002, 0x00117D,
+ 0x018042, 0x00197D, 0x29804A, 0x30000A,
+ 0x380002, 0x003124, 0x000424, 0x000424,
+ 0x002A24, 0x280502, 0x00068D, 0x000810,
+ 0x28143A, 0x00750D, 0x00B124, 0x002264,
+ 0x3D0386, 0x284402, 0x000810, 0x280C3A,
+ 0x0B800D, 0x000820, 0x0002FD, 0x018040,
+ 0x200007, 0x00758D, 0x00B124, 0x100102,
+ 0x012144, 0x3E4986, 0x001810, 0x10003A,
+ 0x00387D, 0x018042, 0x08000A, 0x000904,
+ 0x3E4886, 0x030000, 0x3E4A06, 0x0000BD,
+ 0x00008D, 0x023164, 0x000A64, 0x280D02,
+ 0x0B808D, 0x000820, 0x0002FD, 0x018040,
+ 0x200007, 0x00387D, 0x018042, 0x08000A,
+ 0x000904, 0x3E3286, 0x030000, 0x0002FD,
+ 0x018042, 0x08000A, 0x000904, 0x3D8286,
+ 0x000007, 0x002810, 0x28043A, 0x00750D,
+ 0x030924, 0x002264, 0x280D02, 0x02316C,
+ 0x28450A, 0x0B810D, 0x000820, 0x0002FD,
+ 0x018040, 0x200007, 0x00008D, 0x000A24,
+ 0x3E4A06, 0x100102, 0x001810, 0x10003A,
+ 0x0000BD, 0x003810, 0x30043A, 0x00187D,
+ 0x018042, 0x0018FD, 0x09804A, 0x20000A,
+ 0x0000AD, 0x028924, 0x07212C, 0x001010,
+ 0x300583, 0x300D8B, 0x3014BB, 0x301C83,
+ 0x002083, 0x00137D, 0x038042, 0x33844A,
+ 0x33ACCB, 0x33B4CB, 0x33BCCB, 0x33C4CB,
+ 0x33CCCB, 0x33D4CB, 0x305C8B, 0x006083,
+ 0x001E0D, 0x0005FD, 0x018042, 0x20000A,
+ 0x020924, 0x00068D, 0x00A96C, 0x00009D,
+ 0x0002FD, 0x018042, 0x08000A, 0x000904,
+ 0x3F6A86, 0x000007, 0x280502, 0x280D0A,
+ 0x284402, 0x001810, 0x28143A, 0x0C008D,
+ 0x000820, 0x0002FD, 0x018040, 0x220007,
+ 0x003904, 0x225886, 0x001E0D, 0x00057D,
+ 0x018042, 0x20000A, 0x020924, 0x0000A5,
+ 0x0002FD, 0x018042, 0x08000A, 0x000904,
+ 0x402A86, 0x000007, 0x280502, 0x280C02,
+ 0x002010, 0x28143A, 0x0C010D, 0x000820,
+ 0x0002FD, 0x018040, 0x225A06, 0x220007,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000
+};
diff --git a/drivers/sound/Makefile b/drivers/sound/Makefile
index ec43a1d26..10fbd5871 100644
--- a/drivers/sound/Makefile
+++ b/drivers/sound/Makefile
@@ -67,6 +67,7 @@ obj-$(CONFIG_SOUND_ACI_MIXER) += aci.o
obj-$(CONFIG_SOUND_AWE32_SYNTH) += awe_wave.o
obj-$(CONFIG_SOUND_VIA82CXXX) += via82cxxx_audio.o ac97_codec.o
+obj-$(CONFIG_SOUND_YMPCI) += ymf_sb.o sb_lib.o uart401.o
obj-$(CONFIG_SOUND_MSNDCLAS) += msnd.o msnd_classic.o
obj-$(CONFIG_SOUND_MSNDPIN) += msnd.o msnd_pinnacle.o
obj-$(CONFIG_SOUND_VWSND) += vwsnd.o
diff --git a/drivers/sound/ac97_codec.c b/drivers/sound/ac97_codec.c
index b26c3a8d5..23e94845a 100644
--- a/drivers/sound/ac97_codec.c
+++ b/drivers/sound/ac97_codec.c
@@ -21,7 +21,7 @@
*
* History
* v0.4 Mar 15 2000 Ollie Lho
- * dual codec support verified with 4 channel output
+ * dual codecs support verified with 4 channels output
* v0.3 Feb 22 2000 Ollie Lho
* bug fix for record mask setting
* v0.2 Feb 10 2000 Ollie Lho
@@ -332,9 +332,10 @@ static int ac97_recmask_io(struct ac97_codec *codec, int rw, int mask)
/* else, write the first set in the mask as the
output */
/* clear out current set value first (AC97 supports only 1 input!) */
- val = (1 << ac97_rm2oss[codec->codec_read(codec, AC97_RECORD_SELECT)&0x07]);
- if (mask != val) mask &= ~val;
-
+ val = (1 << ac97_rm2oss[codec->codec_read(codec, AC97_RECORD_SELECT) & 0x07]);
+ if (mask != val)
+ mask &= ~val;
+
val = ffs(mask);
val = ac97_oss_rm[val-1];
val |= val << 8; /* set both channels */
@@ -423,7 +424,7 @@ static int ac97_mixer_ioctl(struct ac97_codec *codec, unsigned int cmd, unsigned
switch (_IOC_NR(cmd)) {
case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */
if (!codec->recmask_io) return -EINVAL;
- if(!val) return 0;
+ if (!val) return 0;
if (!(val &= codec->record_sources)) return -EINVAL;
codec->recmask_io(codec, 0, val);
@@ -449,6 +450,7 @@ int ac97_read_proc (char *page, char **start, off_t off,
{
int len = 0, cap, extid, val, id1, id2;
struct ac97_codec *codec;
+ int is_ac97_20 = 0;
if ((codec = data) == NULL)
return -ENODEV;
@@ -462,6 +464,7 @@ int ac97_read_proc (char *page, char **start, off_t off,
extid &= ~((1<<2)|(1<<4)|(1<<5)|(1<<10)|(1<<11)|(1<<12)|(1<<13));
len += sprintf (page+len, "AC97 Version : %s\n",
extid ? "2.0 or later" : "1.0");
+ if (extid) is_ac97_20 = 1;
cap = codec->codec_read(codec, AC97_RESET);
len += sprintf (page+len, "Capabilities :%s%s%s%s%s%s\n",
@@ -500,6 +503,7 @@ int ac97_read_proc (char *page, char **start, off_t off,
val & 0x0100 ? "MIC2" : "MIC1",
val & 0x0080 ? "on" : "off");
+ extid = codec->codec_read(codec, AC97_EXTENDED_ID);
cap = extid;
len += sprintf (page+len, "Ext Capabilities :%s%s%s%s%s%s%s\n",
cap & 0x0001 ? " -var rate PCM audio-" : "",
@@ -509,10 +513,37 @@ int ac97_read_proc (char *page, char **start, off_t off,
cap & 0x0080 ? " -PCM surround DAC-" : "",
cap & 0x0100 ? " -PCM LFE DAC-" : "",
cap & 0x0200 ? " -slot/DAC mappings-" : "");
+ if (is_ac97_20) {
+ len += sprintf (page+len, "Front DAC rate : %d\n",
+ codec->codec_read(codec, AC97_PCM_FRONT_DAC_RATE));
+ }
return len;
}
+/**
+ * ac97_probe_codec - Initialize and setup AC97-compatible codec
+ * @codec: (in/out) Kernel info for a single AC97 codec
+ *
+ * Reset the AC97 codec, then initialize the mixer and
+ * the rest of the @codec structure.
+ *
+ * The codec_read and codec_write fields of @codec are
+ * required to be setup and working when this function
+ * is called. All other fields are set by this function.
+ *
+ * codec_wait field of @codec can optionally be provided
+ * when calling this function. If codec_wait is not %NULL,
+ * this function will call codec_wait any time it is
+ * necessary to wait for the audio chip to reach the
+ * codec-ready state. If codec_wait is %NULL, then
+ * the default behavior is to call schedule_timeout.
+ * Currently codec_wait is used to wait for AC97 codec
+ * reset to complete.
+ *
+ * Returns 1 (true) on success, or 0 (false) on failure.
+ */
+
int ac97_probe_codec(struct ac97_codec *codec)
{
u16 id1, id2;
@@ -520,8 +551,19 @@ int ac97_probe_codec(struct ac97_codec *codec)
int i;
/* probing AC97 codec, AC97 2.0 says that bit 15 of register 0x00 (reset) should
- be read zero. Probing of AC97 in this way is not reliable, it is not even SAFE !! */
+ * be read zero.
+ *
+ * FIXME: is the following comment outdated? -jgarzik
+ * Probing of AC97 in this way is not reliable, it is not even SAFE !!
+ */
codec->codec_write(codec, AC97_RESET, 0L);
+
+ /* also according to spec, we wait for codec-ready state */
+ if (codec->codec_wait)
+ codec->codec_wait(codec);
+ else
+ schedule_timeout(5);
+
if ((audio = codec->codec_read(codec, AC97_RESET)) & 0x8000) {
printk(KERN_ERR "ac97_codec: %s ac97 codec not present\n",
codec->id ? "Secondary" : "Primary");
@@ -546,8 +588,8 @@ int ac97_probe_codec(struct ac97_codec *codec)
}
if (codec->name == NULL)
codec->name = "Unknown";
- printk(KERN_INFO "ac97_codec: AC97 %s codec, vendor id1: 0x%04x, "
- "id2: 0x%04x (%s)\n", audio ? "Audio" : (modem ? "Modem" : ""),
+ printk(KERN_INFO "ac97_codec: AC97%s codec, id: 0x%04x:0x%04x (%s)\n",
+ audio ? " audio" : (modem ? " modem" : ""),
id1, id2, codec->name);
return ac97_init_mixer(codec);
@@ -597,11 +639,6 @@ static int ac97_init_mixer(struct ac97_codec *codec)
return 1;
}
-static int ac97_init_modem(struct ac97_codec *codec)
-{
- return 0;
-}
-
static int sigmatel_init(struct ac97_codec * codec)
{
codec->codec_write(codec, AC97_SURROUND_MASTER, 0L);
diff --git a/drivers/sound/awe_wave.c b/drivers/sound/awe_wave.c
index ac00add8f..4fee7b72f 100644
--- a/drivers/sound/awe_wave.c
+++ b/drivers/sound/awe_wave.c
@@ -3252,7 +3252,7 @@ remove_info(sf_list *sf, int bank, int instr)
int removed = 0;
prev = NULL;
- for (p = sf->infos; p; prev = p, p = next) {
+ for (p = sf->infos; p; p = next) {
next = p->next;
if (p->type == V_ST_NORMAL &&
p->bank == bank && p->instr == instr) {
@@ -3266,8 +3266,11 @@ remove_info(sf_list *sf, int bank, int instr)
sf->num_info--;
removed++;
kfree(p);
- }
+ } else
+ prev = p;
}
+ if (removed)
+ rebuild_preset_list();
return removed;
}
@@ -3318,7 +3321,7 @@ awe_load_info(awe_patch_info *patch, const char *addr, int count)
}
break;
case AWE_WR_REPLACE:
- /* replace mode - remoe the instrument if it already exists */
+ /* replace mode - remove the instrument if it already exists */
remove_info(sf, hdr.bank, hdr.instr);
break;
}
diff --git a/drivers/sound/cmpci.c b/drivers/sound/cmpci.c
index df05c9b64..527d570cf 100644
--- a/drivers/sound/cmpci.c
+++ b/drivers/sound/cmpci.c
@@ -1161,7 +1161,6 @@ static int cm_open_mixdev(struct inode *inode, struct file *file)
return -ENODEV;
VALIDATE_STATE(s);
file->private_data = s;
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1170,7 +1169,6 @@ static int cm_release_mixdev(struct inode *inode, struct file *file)
struct cm_state *s = (struct cm_state *)file->private_data;
VALIDATE_STATE(s);
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -1180,6 +1178,7 @@ static int cm_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int
}
static /*const*/ struct file_operations cm_mixer_fops = {
+ owner: THIS_MODULE,
llseek: cm_llseek,
ioctl: cm_ioctl_mixdev,
open: cm_open_mixdev,
@@ -1765,7 +1764,6 @@ static int cm_open(struct inode *inode, struct file *file)
set_fmt(s, fmtm, fmts);
s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1788,11 +1786,11 @@ static int cm_release(struct inode *inode, struct file *file)
s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
up(&s->open_sem);
wake_up(&s->open_wait);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations cm_audio_fops = {
+ owner: THIS_MODULE,
llseek: cm_llseek,
read: cm_read,
write: cm_write,
@@ -2012,7 +2010,6 @@ static int cm_midi_open(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2062,11 +2059,11 @@ static int cm_midi_release(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
up(&s->open_sem);
wake_up(&s->open_wait);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations cm_midi_fops = {
+ owner: THIS_MODULE,
llseek: cm_llseek,
read: cm_midi_read,
write: cm_midi_write,
@@ -2207,7 +2204,6 @@ static int cm_dmfm_open(struct inode *inode, struct file *file)
outb(1, s->iosynth+3); /* enable OPL3 */
s->open_mode |= FMODE_DMFM;
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2227,11 +2223,11 @@ static int cm_dmfm_release(struct inode *inode, struct file *file)
}
up(&s->open_sem);
wake_up(&s->open_wait);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations cm_dmfm_fops = {
+ owner: THIS_MODULE,
llseek: cm_llseek,
ioctl: cm_dmfm_ioctl,
open: cm_dmfm_open,
@@ -2321,6 +2317,8 @@ int __init init_cmpci(void)
(pcidev = pci_find_device(PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338A, pcidev)) ||
(pcidev = pci_find_device(PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338B, pcidev)) ||
(pcidev = pci_find_device(PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8738, pcidev)))) {
+ if (pci_enable_device(pcidev))
+ continue;
if (pcidev->irq == 0)
continue;
if (!(s = kmalloc(sizeof(struct cm_state), GFP_KERNEL))) {
@@ -2345,7 +2343,7 @@ int __init init_cmpci(void)
init_MUTEX(&s->open_sem);
spin_lock_init(&s->lock);
s->magic = CM_MAGIC;
- s->iobase = pcidev->resource[0].start;
+ s->iobase = pci_resource_start(pcidev, 0);
s->iosynth = 0x388;
s->iomidi = 0x330;
spin_lock_init(&s->lock);
diff --git a/drivers/sound/cs4232.c b/drivers/sound/cs4232.c
index 2098c85a8..8c7f90777 100644
--- a/drivers/sound/cs4232.c
+++ b/drivers/sound/cs4232.c
@@ -346,6 +346,11 @@ static int __init init_cs4232(void)
if(synthio != -1)
printk(KERN_WARNING "cs4232: wavefront support not enabled in this driver.\n");
#endif
+ if(io==-1||irq==-1||dma==-1)
+ {
+ printk(KERN_ERR "cs4232: Must set io, irq and dma.\n");
+ return -ENODEV;
+ }
cfg.io_base = io;
cfg.irq = irq;
diff --git a/drivers/sound/dmasound/dmasound_awacs.c b/drivers/sound/dmasound/dmasound_awacs.c
index 3893f9b58..f80ada7fd 100644
--- a/drivers/sound/dmasound/dmasound_awacs.c
+++ b/drivers/sound/dmasound/dmasound_awacs.c
@@ -1184,7 +1184,7 @@ static void awacs_nosound(unsigned long xx)
}
static struct timer_list beep_timer = {
- NULL, NULL, 0, 0, awacs_nosound
+ function: awacs_nosound
};
static void awacs_mksound(unsigned int hz, unsigned int ticks)
@@ -1703,14 +1703,14 @@ static int awacs_mixer_ioctl(u_int cmd, u_long arg)
case SOUND_MIXER_READ_RECLEV:
data = awacs_get_volume(awacs_reg[0], 4);
return IOCTL_OUT(arg, data);
- case MIXER_WRITE(SOUND_MASK_MONITOR):
+ case MIXER_WRITE(SOUND_MIXER_MONITOR):
IOCTL_IN(arg, data);
awacs_reg[1] &= ~MASK_LOOPTHRU;
if ((data & 0xff) >= 50)
awacs_reg[1] |= MASK_LOOPTHRU;
awacs_write(MASK_ADDR1 | awacs_reg[1]);
/* fall through */
- case MIXER_READ(SOUND_MASK_MONITOR):
+ case MIXER_READ(SOUND_MIXER_MONITOR):
data = (awacs_reg[1] & MASK_LOOPTHRU)? 100: 0;
return IOCTL_OUT(arg, data);
}
diff --git a/drivers/sound/dmasound/dmasound_core.c b/drivers/sound/dmasound/dmasound_core.c
index 4aed3953e..da60c783b 100644
--- a/drivers/sound/dmasound/dmasound_core.c
+++ b/drivers/sound/dmasound/dmasound_core.c
@@ -494,7 +494,6 @@ static struct {
static int mixer_open(struct inode *inode, struct file *file)
{
- MOD_INC_USE_COUNT;
dmasound.mach.open();
mixer.busy = 1;
return 0;
@@ -504,7 +503,6 @@ static int mixer_release(struct inode *inode, struct file *file)
{
mixer.busy = 0;
dmasound.mach.release();
- MOD_DEC_USE_COUNT;
return 0;
}
static int mixer_ioctl(struct inode *inode, struct file *file, u_int cmd,
@@ -533,6 +531,7 @@ static int mixer_ioctl(struct inode *inode, struct file *file, u_int cmd,
static struct file_operations mixer_fops =
{
+ owner: THIS_MODULE,
llseek: sound_lseek,
ioctl: mixer_ioctl,
open: mixer_open,
@@ -843,11 +842,9 @@ static int sq_open(struct inode *inode, struct file *file)
{
int rc;
- MOD_INC_USE_COUNT;
dmasound.mach.open();
if ((rc = write_sq_open(file)) || (rc = read_sq_open(file))) {
dmasound.mach.release();
- MOD_DEC_USE_COUNT;
return rc;
}
@@ -917,7 +914,6 @@ static int sq_release(struct inode *inode, struct file *file)
write_sq_release_buffers();
read_sq_release_buffers();
dmasound.mach.release();
- MOD_DEC_USE_COUNT;
/* There is probably a DOS atack here. They change the mode flag. */
/* XXX add check here */
@@ -1029,6 +1025,7 @@ static int sq_ioctl(struct inode *inode, struct file *file, u_int cmd,
static struct file_operations sq_fops =
{
+ owner: THIS_MODULE,
llseek: sound_lseek,
write: sq_write,
ioctl: sq_ioctl,
@@ -1088,7 +1085,6 @@ static int state_open(struct inode *inode, struct file *file)
if (state.busy)
return -EBUSY;
- MOD_INC_USE_COUNT;
dmasound.mach.open();
state.ptr = 0;
state.busy = 1;
@@ -1147,7 +1143,6 @@ static int state_release(struct inode *inode, struct file *file)
{
state.busy = 0;
dmasound.mach.release();
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -1165,8 +1160,8 @@ static ssize_t state_read(struct file *file, char *buf, size_t count,
return n;
}
-static struct file_operations state_fops =
-{
+static struct file_operations state_fops = {
+ owner: THIS_MODULE,
llseek: sound_lseek,
read: state_read,
open: state_open,
diff --git a/drivers/sound/emu10k1/audio.c b/drivers/sound/emu10k1/audio.c
index a68287984..06f84dfc3 100644
--- a/drivers/sound/emu10k1/audio.c
+++ b/drivers/sound/emu10k1/audio.c
@@ -969,12 +969,9 @@ static int emu10k1_audio_open(struct inode *inode, struct file *file)
if (entry == &emu10k1_devs)
return -ENODEV;
- MOD_INC_USE_COUNT;
-
if ((wave_dev = (struct emu10k1_wavedevice *)
kmalloc(sizeof(struct emu10k1_wavedevice), GFP_KERNEL)) == NULL) {
ERROR();
- MOD_DEC_USE_COUNT;
return -EINVAL;
}
@@ -988,7 +985,6 @@ static int emu10k1_audio_open(struct inode *inode, struct file *file)
if ((woinst = (struct woinst *) kmalloc(sizeof(struct woinst), GFP_KERNEL)) == NULL) {
ERROR();
- MOD_DEC_USE_COUNT;
return -ENODEV;
}
@@ -1055,7 +1051,6 @@ static int emu10k1_audio_open(struct inode *inode, struct file *file)
if ((wiinst = (struct wiinst *) kmalloc(sizeof(struct wiinst), GFP_KERNEL)) == NULL) {
ERROR();
- MOD_DEC_USE_COUNT;
return -ENODEV;
}
@@ -1176,7 +1171,6 @@ static int emu10k1_audio_release(struct inode *inode, struct file *file)
kfree(wave_dev);
wake_up_interruptible(&card->open_wait);
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -1430,6 +1424,7 @@ void emu10k1_waveout_bh(unsigned long refdata)
}
struct file_operations emu10k1_audio_fops = {
+ owner:THIS_MODULE,
llseek:emu10k1_audio_llseek,
read:emu10k1_audio_read,
write:emu10k1_audio_write,
diff --git a/drivers/sound/emu10k1/main.c b/drivers/sound/emu10k1/main.c
index bce892fe3..acb65d7e5 100644
--- a/drivers/sound/emu10k1/main.c
+++ b/drivers/sound/emu10k1/main.c
@@ -622,7 +622,7 @@ static int __devinit emu10k1_probe(struct pci_dev *pci_dev, const struct pci_dev
pci_set_master(pci_dev);
- card->iobase = pci_dev->resource[0].start;
+ card->iobase = pci_resource_start(pci_dev, 0);
if (request_region(card->iobase, EMU10K1_EXTENT, card_names[pci_id->driver_data]) == NULL) {
printk(KERN_ERR "emu10k1: IO space in use\n");
diff --git a/drivers/sound/emu10k1/midi.c b/drivers/sound/emu10k1/midi.c
index 497e48113..04b1424a8 100644
--- a/drivers/sound/emu10k1/midi.c
+++ b/drivers/sound/emu10k1/midi.c
@@ -98,14 +98,11 @@ static int emu10k1_midi_open(struct inode *inode, struct file *file)
if (entry == &emu10k1_devs)
return -ENODEV;
- MOD_INC_USE_COUNT;
-
/* Wait for device to become free */
down(&card->open_sem);
while (card->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
if (file->f_flags & O_NONBLOCK) {
up(&card->open_sem);
- MOD_DEC_USE_COUNT;
return -EBUSY;
}
@@ -113,7 +110,6 @@ static int emu10k1_midi_open(struct inode *inode, struct file *file)
interruptible_sleep_on(&card->open_wait);
if (signal_pending(current)) {
- MOD_DEC_USE_COUNT;
return -ERESTARTSYS;
}
@@ -121,7 +117,6 @@ static int emu10k1_midi_open(struct inode *inode, struct file *file)
}
if ((midi_dev = (struct emu10k1_mididevice *) kmalloc(sizeof(*midi_dev), GFP_KERNEL)) == NULL) {
- MOD_DEC_USE_COUNT;
return -EINVAL;
}
@@ -145,14 +140,12 @@ static int emu10k1_midi_open(struct inode *inode, struct file *file)
!= CTSTATUS_SUCCESS) {
ERROR();
kfree(midi_dev);
- MOD_DEC_USE_COUNT;
return -ENODEV;
}
/* Add two buffers to receive sysex buffer */
if (midiin_add_buffer(midi_dev, &midihdr1) != CTSTATUS_SUCCESS) {
kfree(midi_dev);
- MOD_DEC_USE_COUNT;
return -ENODEV;
}
@@ -161,7 +154,6 @@ static int emu10k1_midi_open(struct inode *inode, struct file *file)
kfree(midihdr1->data);
kfree(midihdr1);
kfree(midi_dev);
- MOD_DEC_USE_COUNT;
return -ENODEV;
}
}
@@ -175,7 +167,6 @@ static int emu10k1_midi_open(struct inode *inode, struct file *file)
!= CTSTATUS_SUCCESS) {
ERROR();
kfree(midi_dev);
- MOD_DEC_USE_COUNT;
return -ENODEV;
}
}
@@ -237,8 +228,6 @@ static int emu10k1_midi_release(struct inode *inode, struct file *file)
up(&card->open_sem);
wake_up_interruptible(&card->open_wait);
- MOD_DEC_USE_COUNT;
-
return 0;
}
@@ -438,6 +427,7 @@ int emu10k1_midi_callback(unsigned long msg, unsigned long refdata, unsigned lon
/* MIDI file operations */
struct file_operations emu10k1_midi_fops = {
+ owner:THIS_MODULE,
read:emu10k1_midi_read,
write:emu10k1_midi_write,
poll:emu10k1_midi_poll,
diff --git a/drivers/sound/emu10k1/mixer.c b/drivers/sound/emu10k1/mixer.c
index fa54ca435..62796146f 100644
--- a/drivers/sound/emu10k1/mixer.c
+++ b/drivers/sound/emu10k1/mixer.c
@@ -803,8 +803,6 @@ static int emu10k1_mixer_open(struct inode *inode, struct file *file)
if (entry == &emu10k1_devs)
return -ENODEV;
- MOD_INC_USE_COUNT;
-
file->private_data = card;
return 0;
}
@@ -812,11 +810,11 @@ static int emu10k1_mixer_open(struct inode *inode, struct file *file)
static int emu10k1_mixer_release(struct inode *inode, struct file *file)
{
DPF(3, "emu10k1_mixer_release()\n");
- MOD_DEC_USE_COUNT;
return 0;
}
struct file_operations emu10k1_mixer_fops = {
+ owner:THIS_MODULE,
llseek:emu10k1_mixer_llseek,
ioctl:emu10k1_mixer_ioctl,
open:emu10k1_mixer_open,
diff --git a/drivers/sound/es1370.c b/drivers/sound/es1370.c
index ec3849a74..171106bb8 100644
--- a/drivers/sound/es1370.c
+++ b/drivers/sound/es1370.c
@@ -1030,7 +1030,6 @@ static int es1370_open_mixdev(struct inode *inode, struct file *file)
}
VALIDATE_STATE(s);
file->private_data = s;
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1039,7 +1038,6 @@ static int es1370_release_mixdev(struct inode *inode, struct file *file)
struct es1370_state *s = (struct es1370_state *)file->private_data;
VALIDATE_STATE(s);
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -1049,6 +1047,7 @@ static int es1370_ioctl_mixdev(struct inode *inode, struct file *file, unsigned
}
static /*const*/ struct file_operations es1370_mixer_fops = {
+ owner: THIS_MODULE,
llseek: es1370_llseek,
ioctl: es1370_ioctl_mixdev,
open: es1370_open_mixdev,
@@ -1710,7 +1709,6 @@ static int es1370_open(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1734,11 +1732,11 @@ static int es1370_release(struct inode *inode, struct file *file)
s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
wake_up(&s->open_wait);
up(&s->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations es1370_audio_fops = {
+ owner: THIS_MODULE,
llseek: es1370_llseek,
read: es1370_read,
write: es1370_write,
@@ -2116,7 +2114,6 @@ static int es1370_open_dac(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
s->open_mode |= FMODE_DAC;
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2132,11 +2129,11 @@ static int es1370_release_dac(struct inode *inode, struct file *file)
s->open_mode &= ~FMODE_DAC;
wake_up(&s->open_wait);
up(&s->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations es1370_dac_fops = {
+ owner: THIS_MODULE,
llseek: es1370_llseek,
write: es1370_write_dac,
poll: es1370_poll_dac,
@@ -2357,7 +2354,6 @@ static int es1370_midi_open(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2403,11 +2399,11 @@ static int es1370_midi_release(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
wake_up(&s->open_wait);
up(&s->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations es1370_midi_fops = {
+ owner: THIS_MODULE,
llseek: es1370_llseek,
read: es1370_midi_read,
write: es1370_midi_write,
diff --git a/drivers/sound/es1371.c b/drivers/sound/es1371.c
index 44189f010..a4d3c8fa1 100644
--- a/drivers/sound/es1371.c
+++ b/drivers/sound/es1371.c
@@ -168,6 +168,7 @@
#define CT5880REV_CT5880_C 0x02
#define ES1371REV_ES1371_B 0x09
#define EV1938REV_EV1938_A 0x00
+#define ES1371REV_ES1373_8 0x08
#define ES1371_MAGIC ((PCI_VENDOR_ID_ENSONIQ<<16)|PCI_DEVICE_ID_ENSONIQ_ES1371)
@@ -1216,7 +1217,6 @@ static int es1371_open_mixdev(struct inode *inode, struct file *file)
}
VALIDATE_STATE(s);
file->private_data = s;
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1225,7 +1225,6 @@ static int es1371_release_mixdev(struct inode *inode, struct file *file)
struct es1371_state *s = (struct es1371_state *)file->private_data;
VALIDATE_STATE(s);
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -1238,6 +1237,7 @@ static int es1371_ioctl_mixdev(struct inode *inode, struct file *file, unsigned
}
static /*const*/ struct file_operations es1371_mixer_fops = {
+ owner: THIS_MODULE,
llseek: es1371_llseek,
ioctl: es1371_ioctl_mixdev,
open: es1371_open_mixdev,
@@ -1895,7 +1895,6 @@ static int es1371_open(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1918,11 +1917,11 @@ static int es1371_release(struct inode *inode, struct file *file)
s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
up(&s->open_sem);
wake_up(&s->open_wait);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations es1371_audio_fops = {
+ owner: THIS_MODULE,
llseek: es1371_llseek,
read: es1371_read,
write: es1371_write,
@@ -2290,7 +2289,6 @@ static int es1371_open_dac(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
s->open_mode |= FMODE_DAC;
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2306,11 +2304,11 @@ static int es1371_release_dac(struct inode *inode, struct file *file)
s->open_mode &= ~FMODE_DAC;
up(&s->open_sem);
wake_up(&s->open_wait);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations es1371_dac_fops = {
+ owner: THIS_MODULE,
llseek: es1371_llseek,
write: es1371_write_dac,
poll: es1371_poll_dac,
@@ -2531,7 +2529,6 @@ static int es1371_midi_open(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2576,11 +2573,11 @@ static int es1371_midi_release(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
up(&s->open_sem);
wake_up(&s->open_wait);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations es1371_midi_fops = {
+ owner: THIS_MODULE,
llseek: es1371_llseek,
read: es1371_midi_read,
write: es1371_midi_write,
@@ -2778,7 +2775,8 @@ static int __devinit es1371_probe(struct pci_dev *pcidev, const struct pci_devic
/* if we are a 5880 turn on the AC97 */
if (s->vendor == PCI_VENDOR_ID_ENSONIQ &&
((s->device == PCI_DEVICE_ID_ENSONIQ_CT5880 && s->rev == CT5880REV_CT5880_C) ||
- (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_CT5880_A))) {
+ (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_CT5880_A) ||
+ (s->device == PCI_DEVICE_ID_ENSONIQ_ES1371 && s->rev == ES1371REV_ES1373_8))) {
cssr |= CSTAT_5880_AC97_RST;
outl(cssr, s->io+ES1371_REG_STATUS);
/* need to delay around 20ms(bleech) to give
diff --git a/drivers/sound/esssolo1.c b/drivers/sound/esssolo1.c
index 2d7e15f51..930e58f46 100644
--- a/drivers/sound/esssolo1.c
+++ b/drivers/sound/esssolo1.c
@@ -909,7 +909,6 @@ static int solo1_open_mixdev(struct inode *inode, struct file *file)
}
VALIDATE_STATE(s);
file->private_data = s;
- MOD_INC_USE_COUNT;
return 0;
}
@@ -918,7 +917,6 @@ static int solo1_release_mixdev(struct inode *inode, struct file *file)
struct solo1_state *s = (struct solo1_state *)file->private_data;
VALIDATE_STATE(s);
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -928,6 +926,7 @@ static int solo1_ioctl_mixdev(struct inode *inode, struct file *file, unsigned i
}
static /*const*/ struct file_operations solo1_mixer_fops = {
+ owner: THIS_MODULE,
llseek: solo1_llseek,
ioctl: solo1_ioctl_mixdev,
open: solo1_open_mixdev,
@@ -1526,7 +1525,6 @@ static int solo1_release(struct inode *inode, struct file *file)
s->open_mode &= ~(FMODE_READ | FMODE_WRITE);
wake_up(&s->open_wait);
up(&s->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -1572,12 +1570,12 @@ static int solo1_open(struct inode *inode, struct file *file)
s->dma_dac.ossfragshift = s->dma_dac.ossmaxfrags = s->dma_dac.subdivision = 0;
s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
prog_codec(s);
return 0;
}
static /*const*/ struct file_operations solo1_audio_fops = {
+ owner: THIS_MODULE,
llseek: solo1_llseek,
read: solo1_read,
write: solo1_write,
@@ -1869,7 +1867,6 @@ static int solo1_midi_open(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1915,11 +1912,11 @@ static int solo1_midi_release(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
wake_up(&s->open_wait);
up(&s->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations solo1_midi_fops = {
+ owner: THIS_MODULE,
llseek: solo1_llseek,
read: solo1_midi_read,
write: solo1_midi_write,
@@ -2075,7 +2072,6 @@ static int solo1_dmfm_open(struct inode *inode, struct file *file)
outb(1, s->sbbase+3); /* enable OPL3 */
s->open_mode |= FMODE_DMFM;
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2096,11 +2092,11 @@ static int solo1_dmfm_release(struct inode *inode, struct file *file)
release_region(s->sbbase, FMSYNTH_EXTENT);
wake_up(&s->open_wait);
up(&s->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations solo1_dmfm_fops = {
+ owner: THIS_MODULE,
llseek: solo1_llseek,
ioctl: solo1_dmfm_ioctl,
open: solo1_dmfm_open,
diff --git a/drivers/sound/i810_audio.c b/drivers/sound/i810_audio.c
index 76bfcc3c0..bd40922c0 100644
--- a/drivers/sound/i810_audio.c
+++ b/drivers/sound/i810_audio.c
@@ -46,6 +46,18 @@
* There is no midi support, no synth support. Use timidity. To get
* esd working you need to use esd -r 48000 as it won't probe 48KHz
* by default. mpg123 can't handle 48Khz only audio so use xmms.
+ *
+ * Fix The Sound On Dell
+ *
+ * Not everyone uses 48KHz. We know of no way to detect this reliably
+ * and certainly not to get the right data. If your i810 audio sounds
+ * stupid you may need to investigate other speeds. According to Analog
+ * they tend to use a 14.318MHz clock which gives you a base rate of
+ * 41194Hz.
+ *
+ * This is available via the 'ftsodell=1' option.
+ *
+ * If you need to force a specific rate set the clocking= option
*/
#include <linux/module.h>
@@ -74,10 +86,17 @@
#ifndef PCI_DEVICE_ID_INTEL_82901
#define PCI_DEVICE_ID_INTEL_82901 0x2425
#endif
+#ifndef PCI_DEVICE_ID_INTEL_ICH2
+#define PCI_DEVICE_ID_INTEL_ICH2 0x2445
+#endif
#ifndef PCI_DEVICE_ID_INTEL_440MX
#define PCI_DEVICE_ID_INTEL_440MX 0x7195
#endif
+static int ftsodell=0;
+static int clocking=48000;
+
+
#define ADC_RUNNING 1
#define DAC_RUNNING 2
@@ -180,13 +199,15 @@ static const unsigned sample_shift[] = { 0, 1, 1, 2 };
enum {
ICH82801AA = 0,
ICH82901AB,
- INTEL440MX
+ INTEL440MX,
+ INTELICH2,
};
static char * card_names[] = {
"Intel ICH 82801AA",
"Intel ICH 82901AB",
- "Intel 440MX"
+ "Intel 440MX",
+ "Intel ICH2"
};
static struct pci_device_id i810_pci_tbl [] __initdata = {
@@ -196,6 +217,8 @@ static struct pci_device_id i810_pci_tbl [] __initdata = {
PCI_ANY_ID, PCI_ANY_ID, 0, 0, ICH82901AB},
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_440MX,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTEL440MX},
+ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH2,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTELICH2},
{0,}
};
@@ -295,7 +318,6 @@ struct i810_card {
static struct i810_card *devs = NULL;
static int i810_open_mixdev(struct inode *inode, struct file *file);
-static int i810_release_mixdev(struct inode *inode, struct file *file);
static int i810_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg);
static loff_t i810_llseek(struct file *file, loff_t offset, int origin);
@@ -363,12 +385,27 @@ static unsigned int i810_set_dac_rate(struct i810_state * state, unsigned int ra
struct ac97_codec *codec=state->card->ac97_codec[0];
if(!(state->card->ac97_features&0x0001))
- return 48000;
+ {
+ dmabuf->rate = clocking;
+ return clocking;
+ }
if (rate > 48000)
rate = 48000;
- if (rate < 4000)
- rate = 4000;
+ if (rate < 8000)
+ rate = 8000;
+
+ /*
+ * Adjust for misclocked crap
+ */
+
+ rate = ( rate * clocking)/48000;
+
+ /* Analog codecs can go lower via magic registers but others
+ might not */
+
+ if(rate < 8000)
+ rate = 8000;
/* Power down the DAC */
dacp=i810_ac97_get(codec, AC97_POWER_CONTROL);
@@ -378,10 +415,10 @@ static unsigned int i810_set_dac_rate(struct i810_state * state, unsigned int ra
i810_ac97_set(codec, AC97_PCM_FRONT_DAC_RATE, rate);
rp=i810_ac97_get(codec, AC97_PCM_FRONT_DAC_RATE);
- printk("DAC rate set to %d Returned %d\n",
- rate, (int)rp);
+// printk("DAC rate set to %d Returned %d\n",
+// rate, (int)rp);
- rate=rp;
+ rate=(rp * 48000) / clocking;
/* Power it back up */
i810_ac97_set(codec, AC97_POWER_CONTROL, dacp);
@@ -402,25 +439,41 @@ static unsigned int i810_set_adc_rate(struct i810_state * state, unsigned int ra
struct ac97_codec *codec=state->card->ac97_codec[0];
if(!(state->card->ac97_features&0x0001))
- return 48000;
+ {
+ dmabuf->rate = clocking;
+ return clocking;
+ }
if (rate > 48000)
rate = 48000;
- if (rate < 4000)
- rate = 4000;
+ if (rate < 8000)
+ rate = 8000;
+
+ /*
+ * Adjust for misclocked crap
+ */
+
+ rate = ( rate * clocking)/48000;
+
+ /* Analog codecs can go lower via magic registers but others
+ might not */
+
+ if(rate < 8000)
+ rate = 8000;
+
/* Power down the ADC */
dacp=i810_ac97_get(codec, AC97_POWER_CONTROL);
i810_ac97_set(codec, AC97_POWER_CONTROL, dacp|0x0100);
/* Load the rate and read the effective rate */
- i810_ac97_set(codec, AC97_PCM_LR_ADC_RATE, rate);
- rp=i810_ac97_get(codec, AC97_PCM_LR_ADC_RATE);
+ i810_ac97_set(codec, AC97_PCM_LR_DAC_RATE, rate);
+ rp=i810_ac97_get(codec, AC97_PCM_LR_DAC_RATE);
- printk("ADC rate set to %d Returned %d\n",
- rate, (int)rp);
+// printk("ADC rate set to %d Returned %d\n",
+// rate, (int)rp);
- rate=rp;
+ rate = (rp * 48000) / clocking;
/* Power it back up */
i810_ac97_set(codec, AC97_POWER_CONTROL, dacp);
@@ -1547,7 +1600,6 @@ static int i810_open(struct inode *inode, struct file *file)
state->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
up(&state->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1582,11 +1634,11 @@ static int i810_release(struct inode *inode, struct file *file)
/* we're covered by the open_sem */
up(&state->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations i810_audio_fops = {
+ owner: THIS_MODULE,
llseek: i810_llseek,
read: i810_read,
write: i810_write,
@@ -1640,13 +1692,6 @@ static int i810_open_mixdev(struct inode *inode, struct file *file)
match:
file->private_data = card->ac97_codec[i];
- MOD_INC_USE_COUNT;
- return 0;
-}
-
-static int i810_release_mixdev(struct inode *inode, struct file *file)
-{
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -1659,10 +1704,10 @@ static int i810_ioctl_mixdev(struct inode *inode, struct file *file, unsigned in
}
static /*const*/ struct file_operations i810_mixer_fops = {
+ owner: THIS_MODULE,
llseek: i810_llseek,
ioctl: i810_ioctl_mixdev,
open: i810_open_mixdev,
- release: i810_release_mixdev,
};
/* AC97 codec initialisation. */
@@ -1828,8 +1873,11 @@ static void __exit i810_remove(struct pci_dev *pci_dev)
kfree(card);
}
+
MODULE_AUTHOR("");
MODULE_DESCRIPTION("Intel 810 audio support");
+MODULE_PARM(ftsodell, "i");
+MODULE_PARM(clocking, "i");
#define I810_MODULE_NAME "intel810_audio"
@@ -1845,6 +1893,9 @@ static int __init i810_init_module (void)
if (!pci_present()) /* No PCI bus in this machine! */
return -ENODEV;
+ if(ftsodell=1)
+ clocking=41194;
+
printk(KERN_INFO "Intel 810 + AC97 Audio, version "
DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n");
diff --git a/drivers/sound/maestro.c b/drivers/sound/maestro.c
index 81a7d21d2..cd5a2bc27 100644
--- a/drivers/sound/maestro.c
+++ b/drivers/sound/maestro.c
@@ -236,6 +236,7 @@
#include <linux/reboot.h>
#include <asm/uaccess.h>
#include <asm/hardirq.h>
+#include <linux/bitops.h>
#include <linux/pm.h>
static int maestro_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *d);
@@ -2081,7 +2082,6 @@ static int ess_open_mixdev(struct inode *inode, struct file *file)
return -ENODEV;
file->private_data = card;
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2091,7 +2091,6 @@ static int ess_release_mixdev(struct inode *inode, struct file *file)
VALIDATE_CARD(card);
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -2105,6 +2104,7 @@ static int ess_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int
}
static /*const*/ struct file_operations ess_mixer_fops = {
+ owner: THIS_MODULE,
llseek: ess_llseek,
ioctl: ess_ioctl_mixdev,
open: ess_open_mixdev,
@@ -2976,7 +2976,6 @@ ess_open(struct inode *inode, struct file *file)
s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -3007,11 +3006,11 @@ ess_release(struct inode *inode, struct file *file)
}
up(&s->open_sem);
wake_up(&s->open_wait);
- MOD_DEC_USE_COUNT;
return 0;
}
static struct file_operations ess_audio_fops = {
+ owner: THIS_MODULE,
llseek: ess_llseek,
read: ess_read,
write: ess_write,
@@ -3447,11 +3446,7 @@ maestro_install(struct pci_dev *pcidev, int card_type)
return 1;
}
-#ifdef MODULE
-int init_module(void)
-#else
-int SILLY_MAKE_INIT(init_maestro(void))
-#endif
+int __init init_maestro(void)
{
struct pci_dev *pcidev = NULL;
int foundone = 0;
@@ -3558,8 +3553,6 @@ void cleanup_module(void) {
nuke_maestros();
}
-#else /* MODULE */
-__initcall(init_maestro);
#endif
/* --------------------------------------------------------------------- */
@@ -3718,3 +3711,5 @@ maestro_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data)
out:
return 0;
}
+
+module_init(init_maestro);
diff --git a/drivers/sound/msnd.c b/drivers/sound/msnd.c
index e47c30f90..d0b4f9d6c 100644
--- a/drivers/sound/msnd.c
+++ b/drivers/sound/msnd.c
@@ -31,6 +31,7 @@
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/malloc.h>
+#include <linux/vmalloc.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/mm.h>
diff --git a/drivers/sound/nm256_audio.c b/drivers/sound/nm256_audio.c
index ef0a1ce2e..ef87c6293 100644
--- a/drivers/sound/nm256_audio.c
+++ b/drivers/sound/nm256_audio.c
@@ -18,6 +18,7 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/pm.h>
+#include <linux/delay.h>
#include "sound_config.h"
#include "soundmodule.h"
#include "nm256.h"
diff --git a/drivers/sound/pas2_mixer.c b/drivers/sound/pas2_mixer.c
index 86e9a50ca..fa85a9278 100644
--- a/drivers/sound/pas2_mixer.c
+++ b/drivers/sound/pas2_mixer.c
@@ -69,7 +69,7 @@ mix_write(unsigned char data, int ioaddr)
if (pas_model == 4)
{
- outw(data | (data << 8), (ioaddr ^ translate_code) - 1);
+ outw(data | (data << 8), (ioaddr + translate_code) - 1);
outb((0x80), 0);
} else
pas_write(data, ioaddr);
diff --git a/drivers/sound/sb_card.c b/drivers/sound/sb_card.c
index a6e544856..f66c0b604 100644
--- a/drivers/sound/sb_card.c
+++ b/drivers/sound/sb_card.c
@@ -42,6 +42,9 @@
*
* 06-05-2000 added another card. Daniel M. Newman <dmnewman@pobox.com>
*
+ * 25-05-2000 Added Creative SB AWE64 Gold (CTL00B2).
+ * Pål-Kristian Engstad <engstad@att.net>
+ *
*/
#include <linux/config.h>
@@ -265,6 +268,11 @@ static struct {
0,0,0,0,
0,1,1,-1},
{"Sound Blaster 16",
+ ISAPNP_VENDOR('C','T','L'), ISAPNP_DEVICE(0x0028),
+ ISAPNP_VENDOR('C','T','L'), ISAPNP_FUNCTION(0x0031),
+ 0,0,0,0,
+ 0,1,1,-1},
+ {"Sound Blaster 16",
ISAPNP_VENDOR('C','T','L'), ISAPNP_DEVICE(0x0029),
ISAPNP_VENDOR('C','T','L'), ISAPNP_FUNCTION(0x0031),
0,0,0,0,
@@ -344,6 +352,11 @@ static struct {
ISAPNP_VENDOR('C','T','L'), ISAPNP_FUNCTION(0x0044),
0,0,0,0,
0,1,1,-1},
+ {"Sound Blaster AWE 64 Gold",
+ ISAPNP_VENDOR('C','T','L'), ISAPNP_DEVICE(0x00B2),
+ ISAPNP_VENDOR('C','T','L'), ISAPNP_FUNCTION(0x0044),
+ 0,0,0,0,
+ 0,1,1,-1},
{"Sound Blaster AWE 64",
ISAPNP_VENDOR('C','T','L'), ISAPNP_DEVICE(0x00C1),
ISAPNP_VENDOR('C','T','L'), ISAPNP_FUNCTION(0x0042),
diff --git a/drivers/sound/skeleton.c b/drivers/sound/skeleton.c
index f011058a2..fcd5c9ed1 100644
--- a/drivers/sound/skeleton.c
+++ b/drivers/sound/skeleton.c
@@ -78,9 +78,9 @@ static int mycard_install(struct pci_dev *pcidev)
* For the example we will only initialise the MSS
*/
- iobase = pcidev->base_address[0] & PCI_BASE_ADDRESS_IO_MASK;
- mssbase = pcidev->base_address[1] & PCI_BASE_ADDRESS_IO_MASK;
- mpubase = pcidev->base_address[2] & PCI_BASE_ADDRESS_IO_MASK;
+ iobase = pci_resource_start(pcidev, 0);
+ mssbase = pci_resource_start(pcidev, 1);
+ mpubase = pci_resource_start(pcidev, 2);
/*
* Reset the board
@@ -160,6 +160,8 @@ int init_mycard(void)
while((pcidev = pci_find_device(PCI_VENDOR_MYIDENT, PCI_DEVICE_ID_MYIDENT_MYCARD1, pcidev))!=NULL)
{
+ if (pci_enable_device(pcidev))
+ continue;
count+=mycard_install(pcidev);
if(count)
return 0;
diff --git a/drivers/sound/sonicvibes.c b/drivers/sound/sonicvibes.c
index 7a8a7117b..0d50924d8 100644
--- a/drivers/sound/sonicvibes.c
+++ b/drivers/sound/sonicvibes.c
@@ -1240,7 +1240,6 @@ static int sv_open_mixdev(struct inode *inode, struct file *file)
}
VALIDATE_STATE(s);
file->private_data = s;
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1249,7 +1248,6 @@ static int sv_release_mixdev(struct inode *inode, struct file *file)
struct sv_state *s = (struct sv_state *)file->private_data;
VALIDATE_STATE(s);
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -1259,6 +1257,7 @@ static int sv_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int
}
static /*const*/ struct file_operations sv_mixer_fops = {
+ owner: THIS_MODULE,
llseek: sv_llseek,
ioctl: sv_ioctl_mixdev,
open: sv_open_mixdev,
@@ -1900,7 +1899,6 @@ static int sv_open(struct inode *inode, struct file *file)
set_fmt(s, fmtm, fmts);
s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1923,11 +1921,11 @@ static int sv_release(struct inode *inode, struct file *file)
s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
wake_up(&s->open_wait);
up(&s->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations sv_audio_fops = {
+ owner: THIS_MODULE,
llseek: sv_llseek,
read: sv_read,
write: sv_write,
@@ -2157,7 +2155,6 @@ static int sv_midi_open(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2203,11 +2200,11 @@ static int sv_midi_release(struct inode *inode, struct file *file)
spin_unlock_irqrestore(&s->lock, flags);
wake_up(&s->open_wait);
up(&s->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations sv_midi_fops = {
+ owner: THIS_MODULE,
llseek: sv_llseek,
read: sv_midi_read,
write: sv_midi_write,
@@ -2357,7 +2354,6 @@ static int sv_dmfm_open(struct inode *inode, struct file *file)
outb(1, s->iosynth+3); /* enable OPL3 */
s->open_mode |= FMODE_DMFM;
up(&s->open_sem);
- MOD_INC_USE_COUNT;
return 0;
}
@@ -2377,11 +2373,11 @@ static int sv_dmfm_release(struct inode *inode, struct file *file)
}
wake_up(&s->open_wait);
up(&s->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations sv_dmfm_fops = {
+ owner: THIS_MODULE,
llseek: sv_llseek,
ioctl: sv_dmfm_ioctl,
open: sv_dmfm_open,
diff --git a/drivers/sound/sound_core.c b/drivers/sound/sound_core.c
index 053b43160..da0cfe51c 100644
--- a/drivers/sound/sound_core.c
+++ b/drivers/sound/sound_core.c
@@ -456,6 +456,7 @@ static int soundcore_open(struct inode *, struct file *);
static struct file_operations soundcore_fops=
{
+ owner: THIS_MODULE,
open: soundcore_open,
};
@@ -508,12 +509,25 @@ int soundcore_open(struct inode *inode, struct file *file)
s = __look_for_unit(chain, unit);
}
if (s) {
- file->f_op=s->unit_fops;
+ /*
+ * We rely upon the fact that we can't be unloaded while the
+ * subdriver is there, so if ->open() is successful we can
+ * safely drop the reference counter and if it is not we can
+ * revert to old ->f_op. Ugly, indeed, but that's the cost of
+ * switching ->f_op in the first place.
+ */
+ int err = 0;
+ struct file_operations *old_fops = file->f_op;
+ file->f_op = fops_get(s->unit_fops);
spin_unlock(&sound_loader_lock);
if(file->f_op->open)
- return file->f_op->open(inode,file);
- else
- return 0;
+ err = file->f_op->open(inode,file);
+ if (err) {
+ fops_put(file->f_op);
+ file->f_op = fops_get(old_fops);
+ }
+ fops_put(old_fops);
+ return err;
}
spin_unlock(&sound_loader_lock);
return -ENODEV;
diff --git a/drivers/sound/soundcard.c b/drivers/sound/soundcard.c
index 0bf2b8e0f..5018ad1e7 100644
--- a/drivers/sound/soundcard.c
+++ b/drivers/sound/soundcard.c
@@ -495,8 +495,8 @@ static int sound_mmap(struct file *file, struct vm_area_struct *vma)
return 0;
}
-struct file_operations oss_sound_fops =
-{
+struct file_operations oss_sound_fops = {
+ owner: THIS_MODULE,
llseek: sound_lseek,
read: sound_read,
write: sound_write,
diff --git a/drivers/sound/trident.c b/drivers/sound/trident.c
index 6a3b8b4d6..2eb458274 100644
--- a/drivers/sound/trident.c
+++ b/drivers/sound/trident.c
@@ -1,6 +1,6 @@
/*
*
- * Trident 4D-Wave/SiS 7018 OSS driver for Linux 2.2.x
+ * Trident 4D-Wave/SiS 7018/ALi 5451 OSS driver for Linux 2.2.x
*
* Driver: Alan Cox <alan@redhat.com>
*
@@ -12,6 +12,7 @@
* Hacked up by:
* Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
* Ollie Lho <ollie@sis.com.tw> SiS 7018 Audio Core Support
+ * Ching Ling Lee <cling-li@ali.com.tw> ALi 5451 Audio Core Support
*
*
* This program is free software; you can redistribute it and/or modify
@@ -29,10 +30,14 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* History
- * v0.14.3 May 20 2000 Aaron Holtzman
- * Fix kfree'd memory access in release
- * Fix race in open while looking for a free virtual channel slot
- * remove open_wait wq (which appears to be unused)
+ * v0.14.5 May 23 2000 Ollie Lho
+ * Misc bug fix from the Net
+ * v0.14.4 May 20 2000 Aaron Holtzman
+ * Fix kfree'd memory access in release
+ * Fix race in open while looking for a free virtual channel slot
+ * remove open_wait wq (which appears to be unused)
+ * v0.14.3 May 10 2000 Ollie Lho
+ * fixed a small bug in trident_update_ptr, xmms 1.0.1 no longer uses 100% CPU
* v0.14.2 Mar 29 2000 Ching Ling Lee
* Add clear to silence advance in trident_update_ptr
* fix invalid data of the end of the sound
@@ -109,13 +114,13 @@
#include "trident.h"
-#define DRIVER_VERSION "0.14"
+#define DRIVER_VERSION "0.14.5"
/* magic numbers to protect our data structures */
#define TRIDENT_CARD_MAGIC 0x5072696E /* "Prin" */
#define TRIDENT_STATE_MAGIC 0x63657373 /* "cess" */
-#define TRIDENT_DMA_MASK 0x3fffffff /* DMA buffer mask for pci_alloc_consist */
+#define TRIDENT_DMA_MASK 0x3fffffff /* DMA buffer mask for pci_alloc_consist */
#define NR_HW_CH 32
@@ -151,7 +156,7 @@ static char * card_names[] = {
"ALi Audio Accelerator"
};
-static struct pci_device_id trident_pci_tbl [] __initdata = {
+static struct pci_device_id trident_pci_tbl [] __devinitdata = {
{PCI_VENDOR_ID_TRIDENT, PCI_DEVICE_ID_TRIDENT_4DWAVE_DX,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, TRIDENT_4D_DX},
{PCI_VENDOR_ID_TRIDENT, PCI_DEVICE_ID_TRIDENT_4DWAVE_NX,
@@ -314,7 +319,6 @@ static void trident_ac97_set(struct ac97_codec *codec, u8 reg, u16 val);
static u16 trident_ac97_get(struct ac97_codec *codec, u8 reg);
static int trident_open_mixdev(struct inode *inode, struct file *file);
-static int trident_release_mixdev(struct inode *inode, struct file *file);
static int trident_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg);
static loff_t trident_llseek(struct file *file, loff_t offset, int origin);
@@ -438,16 +442,14 @@ static void trident_stop_voice(struct trident_card * card, unsigned int channel)
#endif
}
-static u32 trident_get_interrupt_mask (struct trident_card * card,
- unsigned int b)
+static u32 trident_get_interrupt_mask (struct trident_card * card, unsigned int channel)
{
- struct trident_pcm_bank *bank = &card->banks[b];
+ struct trident_pcm_bank *bank = &card->banks[channel];
u32 addr = bank->addresses->aint;
return inl(TRID_REG(card, addr));
}
-static int trident_check_channel_interrupt(struct trident_card * card,
- unsigned int channel)
+static int trident_check_channel_interrupt(struct trident_card * card, unsigned int channel)
{
unsigned int mask = 1 << (channel & 0x1f);
u32 reg = trident_get_interrupt_mask (card, channel >> 5);
@@ -460,8 +462,7 @@ static int trident_check_channel_interrupt(struct trident_card * card,
return (reg & mask) ? TRUE : FALSE;
}
-static void trident_ack_channel_interrupt(struct trident_card * card,
- unsigned int channel)
+static void trident_ack_channel_interrupt(struct trident_card * card, unsigned int channel)
{
unsigned int mask = 1 << (channel & 0x1f);
struct trident_pcm_bank *bank = &card->banks[channel >> 5];
@@ -537,8 +538,7 @@ static struct trident_channel *ali_alloc_rec_pcm_channel(struct trident_card *ca
}
-static void trident_free_pcm_channel(struct trident_card *card,
- unsigned int channel)
+static void trident_free_pcm_channel(struct trident_card *card, int channel)
{
int bank;
@@ -551,7 +551,7 @@ static void trident_free_pcm_channel(struct trident_card *card,
card->banks[bank].bitmap &= ~(1 << (channel));
}
-static void ali_free_pcm_channel(struct trident_card *card, unsigned int channel)
+static void ali_free_pcm_channel(struct trident_card *card, int channel)
{
int bank;
@@ -574,18 +574,16 @@ static int trident_load_channel_registers(struct trident_card *card, u32 *data,
if (channel > 63)
return FALSE;
- /* select hardware channel to write */
+ /* select hardware channel to write */
outb(channel, TRID_REG(card, T4D_LFO_GC_CIR));
/* Output the channel registers, but don't write register
three to an ALI chip. */
-
for (i = 0; i < CHANNEL_REGS; i++) {
if (i == 3 && card->pci_id == PCI_DEVICE_ID_ALI_5451)
continue;
outl(data[i], TRID_REG(card, CHANNEL_START + 4*i));
}
-
return TRUE;
}
@@ -1141,7 +1139,7 @@ static void trident_update_ptr(struct trident_state *state)
dmabuf->hwptr = hwptr;
dmabuf->total_bytes += diff;
- /* error handling and process wake up for DAC */
+ /* error handling and process wake up for ADC */
if (dmabuf->enable == ADC_RUNNING) {
if (dmabuf->mapped) {
dmabuf->count -= diff;
@@ -1171,7 +1169,10 @@ static void trident_update_ptr(struct trident_state *state)
//there is invalid data in the end of half buffer
if ((clear_cnt = half_dmasize - swptr) < 0)
clear_cnt += half_dmasize;
- memset (dmabuf->rawbuf + swptr, silence, clear_cnt); //clear the invalid data
+ //clear the invalid data
+ memset (dmabuf->rawbuf + swptr,
+ silence, clear_cnt);
+
dmabuf->endcleared = 1;
}
} else if (dmabuf->count < (signed) dmabuf->fragsize) {
@@ -1181,12 +1182,15 @@ static void trident_update_ptr(struct trident_state *state)
memset (dmabuf->rawbuf + swptr, silence, clear_cnt);
dmabuf->endcleared = 1;
}
- }
- /* since dma machine only interrupts at ESO and ESO/2, we sure have at
- least half of dma buffer free, so wake up the process unconditionally */
- wake_up(&dmabuf->wait);
+ }
+ /* trident_update_ptr is called by interrupt handler or by process via
+ ioctl/poll, we only wake up the waiting process when we have more
+ than 1/2 buffer of data to process (always true for interrupt handler) */
+ if (dmabuf->count > (signed)dmabuf->dmasize/2)
+ wake_up(&dmabuf->wait);
}
}
+
/* error handling and process wake up for DAC */
if (dmabuf->enable == DAC_RUNNING) {
if (dmabuf->mapped) {
@@ -1203,9 +1207,11 @@ static void trident_update_ptr(struct trident_state *state)
__stop_dac(state);
dmabuf->error++;
}
- /* since dma machine only interrupts at ESO and ESO/2, we sure have at
- least half of dma buffer free, so wake up the process unconditionally */
- wake_up(&dmabuf->wait);
+ /* trident_update_ptr is called by interrupt handler or by process via
+ ioctl/poll, we only wake up the waiting process when we have more
+ than 1/2 buffer free (always true for interrupt handler) */
+ if (dmabuf->count < (signed)dmabuf->dmasize/2)
+ wake_up(&dmabuf->wait);
}
}
dmabuf->update_flag &= ~ALI_ADDRESS_INT_UPDATE;
@@ -1336,7 +1342,8 @@ static ssize_t trident_read(struct file *file, char *buffer, size_t count, loff_
ret = 0;
if (state->card->pci_id == PCI_DEVICE_ID_ALI_5451)
- outl ( inl (TRID_REG (state->card, ALI_GLOBAL_CONTROL)) | ALI_PCM_IN_ENABLE, TRID_REG (state->card, ALI_GLOBAL_CONTROL));
+ outl(inl(TRID_REG (state->card, ALI_GLOBAL_CONTROL)) | ALI_PCM_IN_ENABLE,
+ TRID_REG (state->card, ALI_GLOBAL_CONTROL));
while (count > 0) {
spin_lock_irqsave(&state->card->lock, flags);
@@ -1439,7 +1446,8 @@ static ssize_t trident_write(struct file *file, const char *buffer, size_t count
if (state->card->pci_id == PCI_DEVICE_ID_ALI_5451)
if (dmabuf->channel->num == ALI_PCM_IN_CHANNEL)
- outl ( inl (TRID_REG (state->card, ALI_GLOBAL_CONTROL)) & ALI_PCM_IN_DISABLE, TRID_REG (state->card, ALI_GLOBAL_CONTROL));
+ outl ( inl (TRID_REG (state->card, ALI_GLOBAL_CONTROL)) &
+ ALI_PCM_IN_DISABLE, TRID_REG (state->card, ALI_GLOBAL_CONTROL));
while (count > 0) {
spin_lock_irqsave(&state->card->lock, flags);
@@ -1912,8 +1920,9 @@ static int trident_open(struct inode *inode, struct file *file)
if (card->states[i] == NULL) {
state = card->states[i] = (struct trident_state *)
kmalloc(sizeof(struct trident_state), GFP_KERNEL);
- if (state == NULL)
+ if (state == NULL) {
return -ENOMEM;
+ }
memset(state, 0, sizeof(struct trident_state));
dmabuf = &state->dmabuf;
goto found_virt;
@@ -1923,9 +1932,9 @@ static int trident_open(struct inode *inode, struct file *file)
card = card->next;
}
/* no more virtual channel avaiable */
- if (!state)
+ if (!state) {
return -ENODEV;
-
+ }
found_virt:
/* found a free virtual channel, allocate hardware channels */
if(file->f_mode & FMODE_READ)
@@ -1946,7 +1955,6 @@ static int trident_open(struct inode *inode, struct file *file)
init_waitqueue_head(&dmabuf->wait);
file->private_data = state;
-
/* set default sample format. According to OSS Programmer's Guide /dev/dsp
should be default to unsigned 8-bits, mono, with sample rate 8kHz and
/dev/dspW will accept 16-bits sample */
@@ -1991,11 +1999,10 @@ static int trident_open(struct inode *inode, struct file *file)
up(&card->open_sem);
#ifdef DEBUG
- printk(KERN_ERR "trident: open virtual channel %d, hard channel %d\n",
- state->virt,
- dmabuf->channel->num);
+ printk(KERN_ERR "trident: open virtual channel %d, hard channel %d\n",
+ state->virt, dmabuf->channel->num);
#endif
- MOD_INC_USE_COUNT;
+
return 0;
}
@@ -2020,7 +2027,6 @@ static int trident_release(struct inode *inode, struct file *file)
dealloc_dmabuf(state);
state->card->free_pcm_channel(state->card, dmabuf->channel->num);
}
-
if (file->f_mode & FMODE_READ) {
stop_adc(state);
dealloc_dmabuf(state);
@@ -2033,11 +2039,11 @@ static int trident_release(struct inode *inode, struct file *file)
/* we're covered by the open_sem */
up(&card->open_sem);
- MOD_DEC_USE_COUNT;
return 0;
}
static /*const*/ struct file_operations trident_audio_fops = {
+ owner: THIS_MODULE,
llseek: trident_llseek,
read: trident_read,
write: trident_write,
@@ -2261,19 +2267,13 @@ static int trident_open_mixdev(struct inode *inode, struct file *file)
card->ac97_codec[i]->dev_mixer == minor)
goto match;
- if (!card)
+ if (!card) {
return -ENODEV;
-
+ }
match:
file->private_data = card->ac97_codec[i];
- MOD_INC_USE_COUNT;
- return 0;
-}
-static int trident_release_mixdev(struct inode *inode, struct file *file)
-{
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -2286,10 +2286,10 @@ static int trident_ioctl_mixdev(struct inode *inode, struct file *file, unsigned
}
static /*const*/ struct file_operations trident_mixer_fops = {
+ owner: THIS_MODULE,
llseek: trident_llseek,
ioctl: trident_ioctl_mixdev,
open: trident_open_mixdev,
- release: trident_release_mixdev,
};
/* AC97 codec initialisation. */
@@ -2385,7 +2385,7 @@ static int __init trident_probe(struct pci_dev *pci_dev, const struct pci_device
}
pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &revision);
- iobase = pci_resource_start (pci_dev, 0);
+ iobase = pci_resource_start(pci_dev, 0);
if (check_region(iobase, 256)) {
printk(KERN_ERR "trident: can't allocate I/O space at 0x%4.4lx\n",
iobase);
@@ -2393,7 +2393,7 @@ static int __init trident_probe(struct pci_dev *pci_dev, const struct pci_device
}
if (pci_enable_device(pci_dev))
- return -ENODEV;
+ return -ENODEV;
if ((card = kmalloc(sizeof(struct trident_card), GFP_KERNEL)) == NULL) {
printk(KERN_ERR "trident: out of memory\n");
@@ -2421,20 +2421,19 @@ static int __init trident_probe(struct pci_dev *pci_dev, const struct pci_device
printk(KERN_INFO "trident: %s found at IO 0x%04lx, IRQ %d\n",
card_names[pci_id->driver_data], card->iobase, card->irq);
- if(card->pci_id == PCI_DEVICE_ID_ALI_5451)
- {
+ if(card->pci_id == PCI_DEVICE_ID_ALI_5451) {
card->alloc_pcm_channel = ali_alloc_pcm_channel;
card->alloc_rec_pcm_channel = ali_alloc_rec_pcm_channel;
card->free_pcm_channel = ali_free_pcm_channel;
card->address_interrupt = ali_address_interrupt;
}
- else
- {
+ else {
card->alloc_pcm_channel = trident_alloc_pcm_channel;
card->alloc_rec_pcm_channel = trident_alloc_pcm_channel;
card->free_pcm_channel = trident_free_pcm_channel;
card->address_interrupt = trident_address_interrupt;
}
+
/* claim our iospace and irq */
request_region(card->iobase, 256, card_names[pci_id->driver_data]);
if (request_irq(card->irq, &trident_interrupt, SA_SHIRQ,
@@ -2462,12 +2461,12 @@ static int __init trident_probe(struct pci_dev *pci_dev, const struct pci_device
}
outl(0x00, TRID_REG(card, T4D_MUSICVOL_WAVEVOL));
- if (card->pci_id == PCI_DEVICE_ID_ALI_5451)
- {
+ if (card->pci_id == PCI_DEVICE_ID_ALI_5451) {
/* edited by HMSEO for GT sound */
#ifdef CONFIG_ALPHA_NAUTILUS
- ac97_data = trident_ac97_get (card->ac97_codec[0], AC97_POWER_CONTROL);
- trident_ac97_set (card->ac97_codec[0], AC97_POWER_CONTROL, ac97_data | ALI_EAPD_POWER_DOWN);
+ u16 ac97_data = trident_ac97_get (card->ac97_codec[0], AC97_POWER_CONTROL);
+ trident_ac97_set (card->ac97_codec[0], AC97_POWER_CONTROL,
+ ac97_data | ALI_EAPD_POWER_DOWN);
#endif
/* edited by HMSEO for GT sound*/
}
diff --git a/drivers/sound/via82cxxx_audio.c b/drivers/sound/via82cxxx_audio.c
index e4403d966..ab14427d6 100644
--- a/drivers/sound/via82cxxx_audio.c
+++ b/drivers/sound/via82cxxx_audio.c
@@ -6,12 +6,16 @@
* See the "COPYING" file distributed with this software for more info.
*
* For a list of known bugs (errata) and documentation,
- * see via82cxxx.txt in linux/Documentation/sound.
+ * see via-audio.pdf in linux/Documentation/DocBook.
+ * If this documentation does not exist, run "make pdfdocs".
+ * If "make pdfdocs" fails, obtain the documentation from
+ * the driver's Website at
+ * http://gtf.org/garzik/drivers/via82cxxx/
*
*/
-#define VIA_VERSION "1.1.6"
+#define VIA_VERSION "1.1.8"
#include <linux/config.h>
@@ -304,7 +308,7 @@ static void via_chan_pcm_fmt (struct via_info *card,
static struct pci_device_id via_pci_tbl[] __initdata = {
- { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+ { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, PCI_ANY_ID, PCI_ANY_ID, },
{ 0, }
};
MODULE_DEVICE_TABLE(pci,via_pci_tbl);
@@ -325,12 +329,40 @@ static struct pci_driver via_driver = {
*
*/
+/**
+ * via_chan_stop - Terminate DMA on specified PCM channel
+ * @iobase: PCI base address for SGD channel registers
+ *
+ * Terminate scatter-gather DMA operation for given
+ * channel (derived from @iobase), if DMA is active.
+ *
+ * Note that @iobase is not the PCI base address,
+ * but the PCI base address plus an offset to
+ * one of three PCM channels supported by the chip.
+ *
+ */
+
static inline void via_chan_stop (int iobase)
{
if (inb (iobase + VIA_PCM_STATUS) & VIA_SGD_ACTIVE)
outb (VIA_SGD_TERMINATE, iobase + VIA_PCM_CONTROL);
}
+
+/**
+ * via_chan_status_clear - Clear status flags on specified DMA channel
+ * @iobase: PCI base address for SGD channel registers
+ *
+ * Clear any pending status flags for the given
+ * DMA channel (derived from @iobase), if any
+ * flags are asserted.
+ *
+ * Note that @iobase is not the PCI base address,
+ * but the PCI base address plus an offset to
+ * one of three PCM channels supported by the chip.
+ *
+ */
+
static inline void via_chan_status_clear (int iobase)
{
u8 tmp = inb (iobase + VIA_PCM_STATUS);
@@ -339,12 +371,33 @@ static inline void via_chan_status_clear (int iobase)
outb (tmp, iobase + VIA_PCM_STATUS);
}
+
+/**
+ * sg_begin - Begin recording or playback on a PCM channel
+ * @chan: Channel for which DMA operation shall begin
+ *
+ * Start scatter-gather DMA for the given channel.
+ *
+ */
+
static inline void sg_begin (struct via_channel *chan)
{
outb (VIA_SGD_START, chan->iobase + VIA_PCM_CONTROL);
}
+/**
+ * via_chan_bufs_in_use - Number of buffers waiting to be consumed
+ * @chan: Channel for which DMA buffers will be counted
+ *
+ * Count the number of buffers waiting to be consumed. For a
+ * playback operation, this is the number of buffers which have
+ * yet to be sent to the DAC. For a recording operation, this
+ * is the number of buffers waiting to be consumed by software
+ * calling read() system call.
+ *
+ */
+
static inline int via_chan_bufs_in_use (struct via_channel *chan)
{
return atomic_read(&chan->next_buf) -
@@ -352,12 +405,31 @@ static inline int via_chan_bufs_in_use (struct via_channel *chan)
}
+/**
+ * via_chan_full - Check for no-free-buffers condition
+ * @chan: Channel for which DMA full condition will be checked
+ *
+ * Count the number of buffers waiting to be consumed, and return
+ * true (non-zero) if no buffers are available to be filled on the
+ * given DMA channel.
+ *
+ */
+
static inline int via_chan_full (struct via_channel *chan)
{
return (via_chan_bufs_in_use (chan) == VIA_DMA_BUFFERS);
}
+/**
+ * via_chan_empty - Check for no-buffers-in-use condition
+ * @chan: Channel for which DMA empty condition will be checked
+ *
+ * Count the number of buffers waiting to be consumed, and return
+ * true (non-zero) if no buffers are currently in use.
+ *
+ */
+
static inline int via_chan_empty (struct via_channel *chan)
{
return (atomic_read(&chan->next_buf) ==
@@ -372,6 +444,15 @@ static inline int via_chan_empty (struct via_channel *chan)
*
*/
+
+/**
+ * via_stop_everything - Stop all audio operations
+ * @card: Private info for specified board
+ *
+ * Stops all DMA operations and interrupts, and clear
+ * any pending status bits resulting from those operations.
+ */
+
static void via_stop_everything (struct via_info *card)
{
DPRINTK ("ENTER\n");
@@ -402,6 +483,24 @@ static void via_stop_everything (struct via_info *card)
}
+/**
+ * via_set_rate - Set PCM rate for given channel
+ * @card: Private info for specified board
+ * @rate: Desired PCM sample rate, in Khz
+ * @inhale_deeply: Boolean. If non-zero (true), the recording sample rate
+ * is set. If zero (false), the playback sample rate
+ * is set.
+ *
+ * Sets the PCM sample rate for a channel.
+ *
+ * Values for @rate are clamped to a range of 4000 Khz through 48000 Khz,
+ * due to hardware constraints.
+ *
+ * FIXME: @inhale_deeply argument is ignored, and %AC97_PCM_FRONT_DAC_RATE
+ * is the only rate which is really set. This needs to be fixed when
+ * recording support is added.
+ */
+
static int via_set_rate (struct via_info *card, unsigned rate, int inhale_deeply)
{
@@ -423,12 +522,32 @@ static int via_set_rate (struct via_info *card, unsigned rate, int inhale_deeply
}
+/**
+ * via_set_adc_rate - Set PCM rate for recording channel
+ * @card: Private info for specified board
+ * @rate: Desired PCM sample rate, in Khz
+ *
+ * Sets the PCM sample rate for a recording channel.
+ *
+ * FIXME: @inhale_deeply argument to via_set_rate is ignored, and %AC97_PCM_FRONT_DAC_RATE
+ * is the only rate which is really set. Thus, this function will
+ * not work until via_set_rate is fixed.
+ */
+
static inline int via_set_adc_rate (struct via_info *card, int rate)
{
return via_set_rate (card, rate, 1);
}
+/**
+ * via_set_dac_rate - Set PCM rate for playback channel
+ * @card: Private info for specified board
+ * @rate: Desired PCM sample rate, in Khz
+ *
+ * Sets the PCM sample rate for a playback channel.
+ */
+
static inline int via_set_dac_rate (struct via_info *card, int rate)
{
return via_set_rate (card, rate, 0);
@@ -442,6 +561,27 @@ static inline int via_set_dac_rate (struct via_info *card, int rate)
*
*/
+/**
+ * via_chan_init - Initialize PCM channel
+ * @card: Private audio chip info
+ * @chan: Channel to be initialized
+ * @chan_ofs: Offset from PCI address, which determines the
+ * set of SGD registers to use.
+ *
+ * Performs all the preparations necessary to begin
+ * using a PCM channel.
+ *
+ * Currently the preparations include allocating the
+ * scatter-gather DMA table and buffers, setting the
+ * PCM channel to a known state, and passing the
+ * address of the DMA table to the hardware.
+ *
+ * Note that special care is taken when passing the
+ * DMA table address to hardware, because it was found
+ * during driver development that the hardware did not
+ * always "take" the address.
+ */
+
static int via_chan_init (struct via_info *card,
struct via_channel *chan, long chan_ofs)
{
@@ -533,6 +673,20 @@ err_out_nomem:
}
+/**
+ * via_chan_free - Release a PCM channel
+ * @card: Private audio chip info
+ * @chan: Channel to be released
+ *
+ * Performs all the functions necessary to clean up
+ * an initialized channel.
+ *
+ * Currently these functions include disabled any
+ * active DMA operations, setting the PCM channel
+ * back to a known state, and releasing any allocated
+ * sound buffers.
+ */
+
static void via_chan_free (struct via_info *card, struct via_channel *chan)
{
int i;
@@ -575,6 +729,22 @@ static void via_chan_free (struct via_info *card, struct via_channel *chan)
}
+/**
+ * via_chan_pcm_fmt - Update PCM channel settings
+ * @card: Private audio chip info
+ * @chan: Channel to be updated
+ * @reset: Boolean. If non-zero, channel will be reset
+ * to 8-bit mono mode.
+ *
+ * Stores the settings of the current PCM format,
+ * 8-bit or 16-bit, and mono/stereo, into the
+ * hardware settings for the specified channel.
+ * If @reset is non-zero, the channel is reset
+ * to 8-bit mono mode. Otherwise, the channel
+ * is set to the values stored in the channel
+ * information struct @chan.
+ */
+
static void via_chan_pcm_fmt (struct via_info *card,
struct via_channel *chan, int reset)
{
@@ -603,6 +773,14 @@ static void via_chan_pcm_fmt (struct via_info *card,
}
+/**
+ * via_chan_clear - Stop DMA channel operation, and reset pointers
+ * @chan: Channel to be cleared
+ *
+ * Call via_chan_stop to halt DMA operations, and then resets
+ * all software pointers which track DMA operation.
+ */
+
static void via_chan_clear (struct via_channel *chan)
{
via_chan_stop (chan->iobase);
@@ -612,6 +790,21 @@ static void via_chan_clear (struct via_channel *chan)
}
+/**
+ * via_chan_set_speed - Set PCM sample rate for given channel
+ * @card: Private info for specified board
+ * @chan: Channel whose sample rate will be adjusted
+ * @val: New sample rate, in Khz
+ *
+ * Helper function for the %SNDCTL_DSP_SPEED ioctl. OSS semantics
+ * demand that all audio operations halt (if they are not already
+ * halted) when the %SNDCTL_DSP_SPEED is given.
+ *
+ * This function halts all audio operations for the given channel
+ * @chan, and then calls via_set_rate to set the audio hardware
+ * to the new rate.
+ */
+
static int via_chan_set_speed (struct via_info *card,
struct via_channel *chan, int val)
{
@@ -626,6 +819,21 @@ static int via_chan_set_speed (struct via_info *card,
}
+/**
+ * via_chan_set_fmt - Set PCM sample size for given channel
+ * @card: Private info for specified board
+ * @chan: Channel whose sample size will be adjusted
+ * @val: New sample size, use the %AFMT_xxx constants
+ *
+ * Helper function for the %SNDCTL_DSP_SETFMT ioctl. OSS semantics
+ * demand that all audio operations halt (if they are not already
+ * halted) when the %SNDCTL_DSP_SETFMT is given.
+ *
+ * This function halts all audio operations for the given channel
+ * @chan, and then calls via_chan_pcm_fmt to set the audio hardware
+ * to the new sample size, either 8-bit or 16-bit.
+ */
+
static int via_chan_set_fmt (struct via_info *card,
struct via_channel *chan, int val)
{
@@ -656,6 +864,21 @@ static int via_chan_set_fmt (struct via_info *card,
}
+/**
+ * via_chan_set_stereo - Enable or disable stereo for a DMA channel
+ * @card: Private info for specified board
+ * @chan: Channel whose stereo setting will be adjusted
+ * @val: New sample size, use the %AFMT_xxx constants
+ *
+ * Helper function for the %SNDCTL_DSP_CHANNELS and %SNDCTL_DSP_STEREO ioctls. OSS semantics
+ * demand that all audio operations halt (if they are not already
+ * halted) when %SNDCTL_DSP_CHANNELS or SNDCTL_DSP_STEREO is given.
+ *
+ * This function halts all audio operations for the given channel
+ * @chan, and then calls via_chan_pcm_fmt to set the audio hardware
+ * to enable or disable stereo.
+ */
+
static int via_chan_set_stereo (struct via_info *card,
struct via_channel *chan, int val)
{
@@ -690,6 +913,14 @@ static int via_chan_set_stereo (struct via_info *card,
#if 0
+/**
+ * via_chan_dump_bufs - Display DMA table contents
+ * @chan: Channel whose DMA table will be displayed
+ *
+ * Debugging function which displays the contents of the
+ * scatter-gather DMA table for the given channel @chan.
+ */
+
static void via_chan_dump_bufs (struct via_channel *chan)
{
int i;
@@ -715,6 +946,15 @@ static void via_chan_dump_bufs (struct via_channel *chan)
*
*/
+/**
+ * via_ac97_wait_idle - Wait until AC97 codec is not busy
+ * @card: Private info for specified board
+ *
+ * Sleep until the AC97 codec is no longer busy.
+ * Returns the final value read from the SGD
+ * register being polled.
+ */
+
static u8 via_ac97_wait_idle (struct via_info *card)
{
u8 tmp8;
@@ -740,6 +980,21 @@ static u8 via_ac97_wait_idle (struct via_info *card)
}
+/**
+ * via_ac97_read_reg - Read AC97 standard register
+ * @codec: Pointer to generic AC97 codec info
+ * @reg: Index of AC97 register to be read
+ *
+ * Read the value of a single AC97 codec register,
+ * as defined by the Intel AC97 specification.
+ *
+ * Defines the standard AC97 read-register operation
+ * required by the kernel's ac97_codec interface.
+ *
+ * Returns the 16-bit value stored in the specified
+ * register.
+ */
+
static u16 via_ac97_read_reg (struct ac97_codec *codec, u8 reg)
{
u32 data;
@@ -788,6 +1043,19 @@ err_out:
}
+/**
+ * via_ac97_write_reg - Write AC97 standard register
+ * @codec: Pointer to generic AC97 codec info
+ * @reg: Index of AC97 register to be written
+ * @value: Value to be written to AC97 register
+ *
+ * Write the value of a single AC97 codec register,
+ * as defined by the Intel AC97 specification.
+ *
+ * Defines the standard AC97 write-register operation
+ * required by the kernel's ac97_codec interface.
+ */
+
static void via_ac97_write_reg (struct ac97_codec *codec, u8 reg, u16 value)
{
u32 data;
@@ -829,8 +1097,6 @@ static int via_mixer_open (struct inode *inode, struct file *file)
DPRINTK ("ENTER\n");
- MOD_INC_USE_COUNT;
-
pci_for_each_dev(pdev) {
drvr = pci_dev_driver (pdev);
if (drvr == &via_driver) {
@@ -843,7 +1109,6 @@ static int via_mixer_open (struct inode *inode, struct file *file)
}
DPRINTK ("EXIT, returning -ENODEV\n");
- MOD_DEC_USE_COUNT;
return -ENODEV;
match:
@@ -853,18 +1118,6 @@ match:
return 0;
}
-
-static int via_mixer_release (struct inode *inode, struct file *file)
-{
- DPRINTK ("ENTER\n");
-
- MOD_DEC_USE_COUNT;
-
- DPRINTK ("EXIT, returning 0\n");
- return 0;
-}
-
-
static int via_mixer_ioctl (struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg)
{
@@ -889,8 +1142,8 @@ static loff_t via_llseek(struct file *file, loff_t offset, int origin)
static struct file_operations via_mixer_fops = {
+ owner: THIS_MODULE,
open: via_mixer_open,
- release: via_mixer_release,
llseek: via_llseek,
ioctl: via_mixer_ioctl,
};
@@ -971,9 +1224,11 @@ static int __init via_ac97_reset (struct via_info *card)
VIA_CR41_VRA | VIA_CR41_AC97_RESET);
udelay (100);
+#if 0 /* this breaks on K7M */
/* disable legacy stuff */
pci_write_config_byte (pdev, 0x42, 0x00);
udelay(10);
+#endif
/* route FM trap to IRQ, disable FM trap */
pci_write_config_byte (pdev, 0x48, 0x05);
@@ -1097,50 +1352,36 @@ static void via_interrupt(int irq, void *dev_id, struct pt_regs *regs)
struct via_info *card = dev_id;
struct via_channel *chan;
u8 status;
- int unhandled = 1;
- static long intcount = 0;
- assert (irq == card->pdev->irq);
-
- intcount++;
-
status = inb (card->baseaddr + 0x00);
if (status) {
assert (card->open_mode & FMODE_WRITE);
chan = &card->ch_out;
- unhandled = 0;
if (status & VIA_SGD_FLAG) {
assert ((status & VIA_SGD_EOL) == 0);
outb (VIA_SGD_FLAG, chan->iobase + 0x00);
- DPRINTK("FLAG intr, status=0x%02X, intcount=%ld\n",
- status, intcount);
+ DPRINTK("FLAG intr, status=0x%02X\n", status);
via_interrupt_write (chan);
}
if (status & VIA_SGD_EOL) {
assert ((status & VIA_SGD_FLAG) == 0);
outb (VIA_SGD_EOL, chan->iobase + 0x00);
- DPRINTK("EOL intr, status=0x%02X, intcount=%ld\n",
- status, intcount);
+ DPRINTK("EOL intr, status=0x%02X\n", status);
via_interrupt_write (chan);
}
if (status & VIA_SGD_STOPPED) {
outb (VIA_SGD_STOPPED, chan->iobase + 0x00);
- DPRINTK("STOPPED intr, status=0x%02X, intcount=%ld\n",
- status, intcount);
+ DPRINTK("STOPPED intr, status=0x%02X\n", status);
}
#if 0
via_chan_dump_bufs (&card->ch_out);
#endif
}
-
- if (unhandled)
- printk (KERN_WARNING PFX "unhandled interrupt, st=%02x, st32=%08x\n",
- status, inl (card->baseaddr + 0x84));
}
@@ -1229,6 +1470,7 @@ static void via_interrupt_cleanup (struct via_info *card)
*/
static struct file_operations via_dsp_fops = {
+ owner: THIS_MODULE,
open: via_dsp_open,
release: via_dsp_release,
read: via_dsp_read,
@@ -1860,8 +2102,6 @@ static int via_dsp_open (struct inode *inode, struct file *file)
DPRINTK ("ENTER, minor=%d, file->f_mode=0x%x\n", minor, file->f_mode);
- MOD_INC_USE_COUNT;
-
if (file->f_mode & FMODE_READ) /* no input ATM */
goto err_out;
@@ -1951,7 +2191,6 @@ err_out_clear_mode:
card->open_mode &= ~file->f_mode;
spin_unlock_irqrestore (&card->lock, flags);
err_out:
- MOD_DEC_USE_COUNT;
DPRINTK("ERROR EXIT, returning %d\n", rc);
return rc;
}
@@ -1981,7 +2220,6 @@ static int via_dsp_release(struct inode *inode, struct file *file)
spin_unlock_irqrestore (&card->lock, flags);
wake_up (&card->open_wait);
- MOD_DEC_USE_COUNT;
DPRINTK("EXIT, returning 0\n");
return 0;
@@ -2331,6 +2569,7 @@ static void __exit via_remove_one (struct pci_dev *pdev)
via_interrupt_cleanup (card);
via_card_cleanup_proc (card);
via_dsp_cleanup (card);
+ via_ac97_cleanup (card);
release_region (pci_resource_start (pdev, 0), pci_resource_len (pdev, 0));
@@ -2360,12 +2599,9 @@ static int __init init_via82cxxx_audio(void)
int rc;
DPRINTK ("ENTER\n");
-
- MOD_INC_USE_COUNT;
rc = via_init_proc ();
if (rc) {
- MOD_DEC_USE_COUNT;
DPRINTK ("EXIT, returning %d\n", rc);
return rc;
}
@@ -2375,13 +2611,10 @@ static int __init init_via82cxxx_audio(void)
if (rc == 0)
pci_unregister_driver (&via_driver);
via_cleanup_proc ();
- MOD_DEC_USE_COUNT;
DPRINTK ("EXIT, returning -ENODEV\n");
return -ENODEV;
}
- MOD_DEC_USE_COUNT;
-
DPRINTK ("EXIT, returning 0\n");
return 0;
}
diff --git a/drivers/sound/wavfront.c b/drivers/sound/wavfront.c
index 4bf595f86..a8f826031 100644
--- a/drivers/sound/wavfront.c
+++ b/drivers/sound/wavfront.c
@@ -1953,7 +1953,6 @@ wavefront_open (struct inode *inode, struct file *file)
{
/* XXX fix me */
dev.opened = file->f_flags;
- MOD_INC_USE_COUNT;
return 0;
}
@@ -1962,7 +1961,6 @@ wavefront_release(struct inode *inode, struct file *file)
{
dev.opened = 0;
dev.debug = 0;
- MOD_DEC_USE_COUNT;
return 0;
}
@@ -1996,6 +1994,7 @@ wavefront_ioctl(struct inode *inode, struct file *file,
}
static /*const*/ struct file_operations wavefront_fops = {
+ owner: THIS_MODULE,
llseek: wavefront_llseek,
ioctl: wavefront_ioctl,
open: wavefront_open,
diff --git a/drivers/sound/ymf_sb.c b/drivers/sound/ymf_sb.c
new file mode 100644
index 000000000..a221a05d0
--- /dev/null
+++ b/drivers/sound/ymf_sb.c
@@ -0,0 +1,867 @@
+/*
+ Legacy audio driver for YMF724, 740, 744, 754 series.
+ Copyright 2000 Daisuke Nagano <breeze.nagano@nifty.ne.jp>
+
+ Based on the VIA 82Cxxx driver by Jeff Garzik <jgarzik@pobox.com>
+ And ported to 2.3.x by Jeff Garzik too :) My it is a small world.
+
+ Distribued under the GNU PUBLIC LICENSE (GPL) Version 2.
+ See the "COPYING" file distributed with kernel source tree for more info.
+
+ -------------------------------------------------------------------------
+
+ It only supports SBPro compatible function of YMF7xx series s.t.
+ * 22.05kHz, 8-bit and stereo sample
+ * OPL3-compatible FM synthesizer
+ * MPU-401 compatible "external" MIDI interface
+
+ -------------------------------------------------------------------------
+
+ Revision history
+
+ Tue May 14 19:00:00 2000 0.0.1
+ * initial release
+
+ Tue May 16 19:29:29 2000 0.0.2
+
+ * add a little delays for reset devices.
+ * fixed addressing bug.
+
+ Sun May 21 15:14:37 2000 0.0.3
+
+ * Add 'master_vol' module parameter to change 'PCM out Vol' of AC'97.
+ * remove native UART401 support. External MIDI port should be supported
+ by sb_midi driver.
+ * add support for SPDIF OUT. Module parameter 'spdif_out' is now available.
+
+ Wed May 31 00:13:57 2000 0.0.4
+
+ * remove entries in Hwmcode.h. Now YMF744 / YMF754 sets instructions
+ in 724hwmcode.h.
+ * fixed wrong legacy_io setting on YMF744/YMF754 .
+
+ */
+
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/kernel.h>
+#include <linux/pci.h>
+#include <linux/init.h>
+#include <linux/ac97_codec.h>
+
+#include <asm/io.h>
+
+#include "sound_config.h"
+#include "soundmodule.h"
+#include "sb.h"
+
+#include "724hwmcode.h"
+
+#undef YMF_DEBUG
+#define SUPPORT_UART401_MIDI 1
+
+/* ---------------------------------------------------------------------- */
+
+#ifndef SOUND_LOCK
+#define SOUND_LOCK do {} while (0)
+#define SOUND_LOCK_END do {} while (0)
+#endif
+
+#ifndef PCI_VENDOR_ID_YAMAHA
+#define PCI_VENDOR_ID_YAMAHA 0x1073
+#endif
+#ifndef PCI_DEVICE_ID_YMF724
+#define PCI_DEVICE_ID_YMF724 0x0004
+#endif
+#ifndef PCI_DEVICE_ID_YMF740
+#define PCI_DEVICE_ID_YMF740 0x000A
+#endif
+#ifndef PCI_DEVICE_ID_YMF740C
+#define PCI_DEVICE_ID_YMF740C 0x000C
+#endif
+#ifndef PCI_DEVICE_ID_YMF724F
+#define PCI_DEVICE_ID_YMF724F 0x000D
+#endif
+#ifndef PCI_DEVICE_ID_YMF744
+#define PCI_DEVICE_ID_YMF744 0x0010
+#endif
+#ifndef PCI_DEVICE_ID_YMF754
+#define PCI_DEVICE_ID_YMF754 0x0012
+#endif
+
+/* ---------------------------------------------------------------------- */
+
+#define YMFSB_RESET_DELAY 5
+
+#define YMFSB_REGSIZE 0x8000
+
+#define YMFSB_AC97TIMEOUT 2000
+
+#define YMFSB_WORKBITTIMEOUT 250000
+
+#define YMFSB_DSPLENGTH 0x0080
+#define YMFSB_CTRLLENGTH 0x3000
+
+#define YMFSB_PCIR_VENDORID 0x00
+#define YMFSB_PCIR_DEVICEID 0x02
+#define YMFSB_PCIR_CMD 0x04
+#define YMFSB_PCIR_REVISIONID 0x08
+#define YMFSB_PCIR_BASEADDR 0x10
+#define YMFSB_PCIR_IRQ 0x3c
+
+#define YMFSB_PCIR_LEGCTRL 0x40
+#define YMFSB_PCIR_ELEGCTRL 0x42
+#define YMFSB_PCIR_DSXGCTRL 0x48
+#define YMFSB_PCIR_OPLADR 0x60
+#define YMFSB_PCIR_SBADR 0x62
+#define YMFSB_PCIR_MPUADR 0x64
+
+#define YMFSB_INTFLAG 0x0004
+#define YMFSB_ACTIVITY 0x0006
+#define YMFSB_GLOBALCTRL 0x0008
+#define YMFSB_ZVCTRL 0x000A
+#define YMFSB_TIMERCTRL 0x0010
+#define YMFSB_TIMERCOUNT 0x0012
+#define YMFSB_SPDIFOUTCTRL 0x0018
+#define YMFSB_SPDIFOUTSTATUS 0x001C
+#define YMFSB_EEPROMCTRL 0x0020
+#define YMFSB_SPDIFINCTRL 0x0034
+#define YMFSB_SPDIFINSTATUS 0x0038
+#define YMFSB_DSPPROGRAMDL 0x0048
+#define YMFSB_DLCNTRL 0x004C
+#define YMFSB_GPIOININTFLAG 0x0050
+#define YMFSB_GPIOININTENABLE 0x0052
+#define YMFSB_GPIOINSTATUS 0x0054
+#define YMFSB_GPIOOUTCTRL 0x0056
+#define YMFSB_GPIOFUNCENABLE 0x0058
+#define YMFSB_GPIOTYPECONFIG 0x005A
+#define YMFSB_AC97CMDDATA 0x0060
+#define YMFSB_AC97CMDADR 0x0062
+#define YMFSB_PRISTATUSDATA 0x0064
+#define YMFSB_PRISTATUSADR 0x0066
+#define YMFSB_SECSTATUSDATA 0x0068
+#define YMFSB_SECSTATUSADR 0x006A
+#define YMFSB_SECCONFIG 0x0070
+#define YMFSB_LEGACYOUTVOL 0x0080
+#define YMFSB_LEGACYOUTVOLL 0x0080
+#define YMFSB_LEGACYOUTVOLR 0x0082
+#define YMFSB_NATIVEDACOUTVOL 0x0084
+#define YMFSB_NATIVEDACOUTVOLL 0x0084
+#define YMFSB_NATIVEDACOUTVOLR 0x0086
+#define YMFSB_SPDIFOUTVOL 0x0088
+#define YMFSB_SPDIFOUTVOLL 0x0088
+#define YMFSB_SPDIFOUTVOLR 0x008A
+#define YMFSB_AC3OUTVOL 0x008C
+#define YMFSB_AC3OUTVOLL 0x008C
+#define YMFSB_AC3OUTVOLR 0x008E
+#define YMFSB_PRIADCOUTVOL 0x0090
+#define YMFSB_PRIADCOUTVOLL 0x0090
+#define YMFSB_PRIADCOUTVOLR 0x0092
+#define YMFSB_LEGACYLOOPVOL 0x0094
+#define YMFSB_LEGACYLOOPVOLL 0x0094
+#define YMFSB_LEGACYLOOPVOLR 0x0096
+#define YMFSB_NATIVEDACLOOPVOL 0x0098
+#define YMFSB_NATIVEDACLOOPVOLL 0x0098
+#define YMFSB_NATIVEDACLOOPVOLR 0x009A
+#define YMFSB_SPDIFLOOPVOL 0x009C
+#define YMFSB_SPDIFLOOPVOLL 0x009E
+#define YMFSB_SPDIFLOOPVOLR 0x009E
+#define YMFSB_AC3LOOPVOL 0x00A0
+#define YMFSB_AC3LOOPVOLL 0x00A0
+#define YMFSB_AC3LOOPVOLR 0x00A2
+#define YMFSB_PRIADCLOOPVOL 0x00A4
+#define YMFSB_PRIADCLOOPVOLL 0x00A4
+#define YMFSB_PRIADCLOOPVOLR 0x00A6
+#define YMFSB_NATIVEADCINVOL 0x00A8
+#define YMFSB_NATIVEADCINVOLL 0x00A8
+#define YMFSB_NATIVEADCINVOLR 0x00AA
+#define YMFSB_NATIVEDACINVOL 0x00AC
+#define YMFSB_NATIVEDACINVOLL 0x00AC
+#define YMFSB_NATIVEDACINVOLR 0x00AE
+#define YMFSB_BUF441OUTVOL 0x00B0
+#define YMFSB_BUF441OUTVOLL 0x00B0
+#define YMFSB_BUF441OUTVOLR 0x00B2
+#define YMFSB_BUF441LOOPVOL 0x00B4
+#define YMFSB_BUF441LOOPVOLL 0x00B4
+#define YMFSB_BUF441LOOPVOLR 0x00B6
+#define YMFSB_SPDIFOUTVOL2 0x00B8
+#define YMFSB_SPDIFOUTVOL2L 0x00B8
+#define YMFSB_SPDIFOUTVOL2R 0x00BA
+#define YMFSB_SPDIFLOOPVOL2 0x00BC
+#define YMFSB_SPDIFLOOPVOL2L 0x00BC
+#define YMFSB_SPDIFLOOPVOL2R 0x00BE
+#define YMFSB_ADCSLOTSR 0x00C0
+#define YMFSB_RECSLOTSR 0x00C4
+#define YMFSB_ADCFORMAT 0x00C8
+#define YMFSB_RECFORMAT 0x00CC
+#define YMFSB_P44SLOTSR 0x00D0
+#define YMFSB_STATUS 0x0100
+#define YMFSB_CTRLSELECT 0x0104
+#define YMFSB_MODE 0x0108
+#define YMFSB_SAMPLECOUNT 0x010C
+#define YMFSB_NUMOFSAMPLES 0x0110
+#define YMFSB_CONFIG 0x0114
+#define YMFSB_PLAYCTRLSIZE 0x0140
+#define YMFSB_RECCTRLSIZE 0x0144
+#define YMFSB_EFFCTRLSIZE 0x0148
+#define YMFSB_WORKSIZE 0x014C
+#define YMFSB_MAPOFREC 0x0150
+#define YMFSB_MAPOFEFFECT 0x0154
+#define YMFSB_PLAYCTRLBASE 0x0158
+#define YMFSB_RECCTRLBASE 0x015C
+#define YMFSB_EFFCTRLBASE 0x0160
+#define YMFSB_WORKBASE 0x0164
+#define YMFSB_DSPINSTRAM 0x1000
+#define YMFSB_CTRLINSTRAM 0x4000
+
+
+/* ---------------------------------------------------------------------- */
+
+#define MAX_CARDS 4
+
+#define PFX "ymf_sb: "
+
+#define YMFSB_VERSION "0.0.4"
+#define YMFSB_CARD_NAME "YMF7xx Legacy Audio driver " YMFSB_VERSION
+
+#ifdef SUPPORT_UART401_MIDI
+#if 0
+# define ymf7xxsb_probe_midi probe_uart401
+# define ymf7xxsb_attach_midi attach_uart401
+# define ymf7xxsb_unload_midi unload_uart401
+#else
+# define ymf7xxsb_probe_midi probe_sbmpu
+# define ymf7xxsb_attach_midi attach_sbmpu
+# define ymf7xxsb_unload_midi unload_sbmpu
+#endif
+#endif
+
+/* ---------------------------------------------------------------------- */
+
+static struct address_info sb_data[MAX_CARDS];
+static struct address_info opl3_data[MAX_CARDS];
+#ifdef SUPPORT_UART401_MIDI
+static struct address_info mpu_data[MAX_CARDS];
+#endif
+static unsigned cards = 0;
+static unsigned short *ymfbase[MAX_CARDS];
+
+/* ---------------------------------------------------------------------- */
+
+#ifdef MODULE
+#ifdef SUPPORT_UART401_MIDI
+static int mpu_io = 0;
+#endif
+static int synth_io = 0;
+static int io = 0;
+static int dma = 0;
+static int master_vol = -1;
+static int spdif_out = 0;
+#ifdef SUPPORT_UART401_MIDI
+MODULE_PARM(mpu_io, "i");
+#endif
+MODULE_PARM(synth_io, "i");
+MODULE_PARM(io,"i");
+MODULE_PARM(dma,"i");
+MODULE_PARM(master_vol,"i");
+MODULE_PARM(spdif_out,"i");
+#else
+#ifdef SUPPORT_UART401_MIDI
+static int mpu_io = 0x330;
+#endif
+static int synth_io = 0x388;
+static int io = 0x220;
+static int dma = 1;
+static int master_vol = 80;
+static int spdif_out = 0;
+#endif
+
+/* ---------------------------------------------------------------------- */
+
+static int readRegWord( int adr ) {
+
+ if (ymfbase[cards]==NULL) return 0;
+
+ return readw(ymfbase[cards]+adr/2);
+}
+
+static void writeRegWord( int adr, int val ) {
+
+ if (ymfbase[cards]==NULL) return;
+
+ writew((unsigned short)(val&0xffff), ymfbase[cards] + adr/2);
+
+ return;
+}
+
+static int readRegDWord( int adr ) {
+
+ if (ymfbase[cards]==NULL) return 0;
+
+ return (readl(ymfbase[cards]+adr/2));
+}
+
+static void writeRegDWord( int adr, int val ) {
+
+ if (ymfbase[cards]==NULL) return;
+
+ writel((unsigned int)(val&0xffffffff), ymfbase[cards]+adr/2);
+
+ return;
+}
+
+/* ---------------------------------------------------------------------- */
+
+static int checkPrimaryBusy( void )
+{
+ int timeout=0;
+
+ while ( timeout++ < YMFSB_AC97TIMEOUT )
+ {
+ if ( (readRegWord(YMFSB_PRISTATUSADR) & 0x8000) == 0x0000 )
+ return 0;
+ }
+ return -1;
+}
+
+static int writeAc97( int adr, unsigned short val )
+{
+
+ if ( adr > 0x7f || adr < 0x00 ) return -1;
+
+ if ( checkPrimaryBusy() ) return -1;
+
+#ifdef YMF_DEBUG
+ printk(KERN_INFO PFX "AC97 0x%0x = 0x%0x\n",adr,val);
+#endif
+
+ writeRegWord( YMFSB_AC97CMDADR, 0x0000 | adr );
+ writeRegWord( YMFSB_AC97CMDDATA, val );
+
+ return 0;
+}
+
+static int checkCodec( struct pci_dev *pcidev )
+{
+ u8 tmp8;
+
+ pci_read_config_byte(pcidev, YMFSB_PCIR_DSXGCTRL, &tmp8);
+ if ( tmp8 & 0x03 ) {
+ pci_write_config_byte(pcidev, YMFSB_PCIR_DSXGCTRL, tmp8&0xfc);
+ mdelay(YMFSB_RESET_DELAY);
+ pci_write_config_byte(pcidev, YMFSB_PCIR_DSXGCTRL, tmp8|0x03);
+ mdelay(YMFSB_RESET_DELAY);
+ pci_write_config_byte(pcidev, YMFSB_PCIR_DSXGCTRL, tmp8&0xfc);
+ mdelay(YMFSB_RESET_DELAY);
+ }
+
+ if ( checkPrimaryBusy() ) return -1;
+
+ return 0;
+}
+
+static int setupLegacyIO( struct pci_dev *pcidev )
+{
+ int v;
+ int sbio=0,mpuio=0,oplio=0,dma=0;
+
+ switch(sb_data[cards].io_base) {
+ case 0x220:
+ sbio = 0;
+ break;
+ case 0x240:
+ sbio = 1;
+ break;
+ case 0x260:
+ sbio = 2;
+ break;
+ case 0x280:
+ sbio = 3;
+ break;
+ default:
+ return -1;
+ break;
+ }
+#ifdef YMF_DEBUG
+ printk(PFX "set SBPro I/O at 0x%x\n",sb_data[cards].io_base);
+#endif
+
+#ifdef SUPPORT_UART401_MIDI
+ switch(mpu_data[cards].io_base) {
+ case 0x330:
+ mpuio = 0;
+ break;
+ case 0x300:
+ mpuio = 1;
+ break;
+ case 0x332:
+ mpuio = 2;
+ break;
+ case 0x334:
+ mpuio = 3;
+ break;
+ default:
+ mpuio = 0;
+ break;
+ }
+# ifdef YMF_DEBUG
+ printk(PFX "set MPU401 I/O at 0x%x\n",mpu_data[cards].io_base);
+# endif
+#endif
+
+ switch(opl3_data[cards].io_base) {
+ case 0x388:
+ oplio = 0;
+ break;
+ case 0x398:
+ oplio = 1;
+ break;
+ case 0x3a0:
+ oplio = 2;
+ break;
+ case 0x3a8:
+ oplio = 3;
+ break;
+ default:
+ return -1;
+ break;
+ }
+#ifdef YMF_DEBUG
+ printk(PFX "set OPL3 I/O at 0x%x\n",opl3_data[cards].io_base);
+#endif
+
+ dma = sb_data[cards].dma;
+#ifdef YMF_DEBUG
+ printk(PFX "set DMA address at 0x%x\n",sb_data[cards].dma);
+#endif
+
+ v = 0x0000 | ((dma<<6)&0x03) | 0x003f;
+ pci_write_config_word(pcidev, YMFSB_PCIR_LEGCTRL, v);
+#ifdef YMF_DEBUG
+ printk(PFX "LEGCTRL: 0x%x\n",v);
+#endif
+ switch( pcidev->device ) {
+ case PCI_DEVICE_ID_YMF724:
+ case PCI_DEVICE_ID_YMF740:
+ case PCI_DEVICE_ID_YMF724F:
+ case PCI_DEVICE_ID_YMF740C:
+ v = 0x8800 | ((mpuio<<4)&0x03) | ((sbio<<2)&0x03) | (oplio&0x03);
+ pci_write_config_word(pcidev, YMFSB_PCIR_ELEGCTRL, v);
+#ifdef YMF_DEBUG
+ printk(PFX "ELEGCTRL: 0x%x\n",v);
+#endif
+ break;
+
+ case PCI_DEVICE_ID_YMF744:
+ case PCI_DEVICE_ID_YMF754:
+ v = 0x8800;
+ pci_write_config_word(pcidev, YMFSB_PCIR_ELEGCTRL, v);
+#ifdef YMF_DEBUG
+ printk(PFX "ELEGCTRL: 0x%x\n",v);
+#endif
+ pci_write_config_word(pcidev, YMFSB_PCIR_OPLADR, opl3_data[cards].io_base);
+ pci_write_config_word(pcidev, YMFSB_PCIR_SBADR, sb_data[cards].
+io_base);
+#ifdef SUPPORT_UART401_MIDI
+ pci_write_config_word(pcidev, YMFSB_PCIR_MPUADR, mpu_data[cards].io_base);
+#endif
+ break;
+
+ default:
+ printk(KERN_ERR PFX "Invalid device ID: %d\n",pcidev->device);
+ return -1;
+ break;
+ }
+
+ return 0;
+}
+
+/* ---------------------------------------------------------------------- */
+
+static void enableDSP( void )
+{
+ writeRegDWord( YMFSB_CONFIG, 0x00000001 );
+ return;
+}
+
+static void disableDSP( void )
+{
+ int val;
+ int i;
+
+ val = readRegDWord( YMFSB_CONFIG );
+ if ( val ) {
+ writeRegDWord( YMFSB_CONFIG, 0 );
+ }
+
+ i=0;
+ while( ++i < YMFSB_WORKBITTIMEOUT ) {
+ val = readRegDWord(YMFSB_STATUS);
+ if ( (val & 0x00000002) == 0x00000000 ) break;
+ }
+
+ return;
+}
+
+static int setupInstruction( struct pci_dev *pcidev )
+{
+ int i;
+ int val;
+
+ writeRegDWord( YMFSB_NATIVEDACOUTVOL, 0 ); /* mute dac */
+ disableDSP();
+
+ writeRegDWord( YMFSB_MODE, 0x00010000 );
+
+ /* DS-XG Software Reset */
+ writeRegDWord( YMFSB_MODE, 0x00000000 );
+ writeRegDWord( YMFSB_MAPOFREC, 0x00000000 );
+ writeRegDWord( YMFSB_MAPOFEFFECT, 0x00000000 );
+ writeRegDWord( YMFSB_PLAYCTRLBASE, 0x00000000 );
+ writeRegDWord( YMFSB_RECCTRLBASE, 0x00000000 );
+ writeRegDWord( YMFSB_EFFCTRLBASE, 0x00000000 );
+
+ val = readRegWord( YMFSB_GLOBALCTRL );
+ writeRegWord( YMFSB_GLOBALCTRL, (val&~0x0007) );
+
+ /* setup DSP instruction code */
+ for ( i=0 ; i<YMFSB_DSPLENGTH ; i+=4 ) {
+ writeRegDWord( YMFSB_DSPINSTRAM+i, DspInst[i>>2] );
+ }
+
+ switch( pcidev->device ) {
+ case PCI_DEVICE_ID_YMF724:
+ case PCI_DEVICE_ID_YMF740:
+ /* setup Control instruction code */
+ for ( i=0 ; i<YMFSB_CTRLLENGTH ; i+=4 ) {
+ writeRegDWord( YMFSB_CTRLINSTRAM+i, CntrlInst[i>>2] );
+ }
+ break;
+
+ case PCI_DEVICE_ID_YMF724F:
+ case PCI_DEVICE_ID_YMF740C:
+ case PCI_DEVICE_ID_YMF744:
+ case PCI_DEVICE_ID_YMF754:
+ /* setup Control instruction code */
+ for ( i=0 ; i<YMFSB_CTRLLENGTH ; i+=4 ) {
+ writeRegDWord( YMFSB_CTRLINSTRAM+i, CntrlInst1E[i>>2] );
+ }
+ break;
+
+ default:
+ return -1;
+ }
+
+ enableDSP();
+
+ return 0;
+}
+
+/* ---------------------------------------------------------------------- */
+
+static int __init ymf7xx_init(struct pci_dev *pcidev)
+{
+ unsigned short v;
+
+ /* Read hardware information */
+#ifdef YMF_DEBUG
+ unsigned int dv;
+ pci_read_config_word(pcidev, YMFSB_PCIR_VENDORID, &v);
+ printk(KERN_INFO PFX "Vendor ID = 0x%x\n",v);
+ pci_read_config_word(pcidev, YMFSB_PCIR_DEVICEID, &v);
+ printk(KERN_INFO PFX "Device ID = 0x%x\n",v);
+ pci_read_config_word(pcidev, YMFSB_PCIR_REVISIONID, &v);
+ printk(KERN_INFO PFX "Revision ID = 0x%x\n",v&0xff);
+ pci_read_config_dword(pcidev, YMFSB_PCIR_BASEADDR, &dv);
+ printk(KERN_INFO PFX "Base address = 0x%x\n",dv);
+ pci_read_config_word(pcidev, YMFSB_PCIR_IRQ, &v);
+ printk(KERN_INFO PFX "IRQ line = 0x%x\n",v&0xff);
+#endif
+
+ /* enables memory space access / bus mastering */
+ pci_read_config_word(pcidev, YMFSB_PCIR_CMD, &v);
+ pci_write_config_word(pcidev, YMFSB_PCIR_CMD, v|0x06);
+
+ /* check codec */
+#ifdef YMF_DEBUG
+ printk(KERN_INFO PFX "check codec...\n");
+#endif
+ if (checkCodec(pcidev)) return -1;
+
+ /* setup legacy I/O */
+#ifdef YMF_DEBUG
+ printk(KERN_INFO PFX "setup legacy I/O...\n");
+#endif
+ if (setupLegacyIO(pcidev)) return -1;
+
+ /* setup instruction code */
+#ifdef YMF_DEBUG
+ printk(KERN_INFO PFX "setup instructions...\n");
+#endif
+ if (setupInstruction(pcidev)) return -1;
+
+ /* AC'97 setup */
+#ifdef YMF_DEBUG
+ printk(KERN_INFO PFX "setup AC'97...\n");
+#endif
+ if ( writeAc97(AC97_RESET ,0x0000) ) /* Reset */
+ return -1;
+ if ( writeAc97(AC97_MASTER_VOL_STEREO,0x0000) ) /* Master Volume */
+ return -1;
+
+ v = 31*(100-master_vol)/100;
+ v = (v<<8 | v)&0x7fff;
+ if ( writeAc97(AC97_PCMOUT_VOL ,v ) ) /* PCM out Volume */
+ return -1;
+
+#ifdef YMF_DEBUG
+ printk(KERN_INFO PFX "setup Legacy Volume...\n");
+#endif
+ /* Legacy Audio Output Volume L & R ch */
+ writeRegDWord( YMFSB_LEGACYOUTVOL, 0x3fff3fff );
+
+#ifdef YMF_DEBUG
+ printk(KERN_INFO PFX "setup SPDIF output control...\n");
+#endif
+ /* SPDIF Output control */
+ v = spdif_out != 0 ? 0x0001 : 0x0000;
+ writeRegWord( YMFSB_SPDIFOUTCTRL, v );
+ /* no copyright protection,
+ sample-rate converted,
+ re-recorded software comercially available (the 1st generation),
+ original */
+ writeRegWord( YMFSB_SPDIFOUTSTATUS, 0x9a04 );
+
+ return 0;
+}
+
+/* ---------------------------------------------------------------------- */
+
+static void __init ymf7xxsb_attach_sb(struct address_info *hw_config)
+{
+ if(!sb_dsp_init(hw_config))
+ hw_config->slots[0] = -1;
+}
+
+static int __init ymf7xxsb_probe_sb(struct address_info *hw_config)
+{
+ if (check_region(hw_config->io_base, 16))
+ {
+ printk(KERN_DEBUG PFX "SBPro port 0x%x is already in use\n",
+ hw_config->io_base);
+ return 0;
+ }
+ return sb_dsp_detect(hw_config, SB_PCI_YAMAHA, 0, NULL);
+}
+
+
+static void ymf7xxsb_unload_sb(struct address_info *hw_config, int unload_mpu)
+{
+ if(hw_config->slots[0]!=-1)
+ sb_dsp_unload(hw_config, unload_mpu);
+}
+
+/* ---------------------------------------------------------------------- */
+
+enum chip_types {
+ CH_YMF724 = 0,
+ CH_YMF724F,
+ CH_YMF740,
+ CH_YMF740C,
+ CH_YMF744,
+ CH_YMF754,
+};
+
+/* directly indexed by chip_types enum above */
+/* note we keep this a struct to ease adding
+ * other per-board or per-chip info here */
+struct {
+ const char *devicename;
+} devicetable[] __initdata =
+{
+ { "YMF724A-E" },
+ { "YMF724F" },
+ { "YMF740A-B" },
+ { "YMF740C" },
+ { "YMF744" },
+ { "YMF754" },
+};
+
+static struct pci_device_id ymf7xxsb_pci_tbl[] __initdata = {
+ { PCI_VENDOR_ID_YAMAHA, PCI_DEVICE_ID_YMF724, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_YMF724 },
+ { PCI_VENDOR_ID_YAMAHA, PCI_DEVICE_ID_YMF724F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_YMF724F },
+ { PCI_VENDOR_ID_YAMAHA, PCI_DEVICE_ID_YMF740, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_YMF740 },
+ { PCI_VENDOR_ID_YAMAHA, PCI_DEVICE_ID_YMF740C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_YMF740C },
+ { PCI_VENDOR_ID_YAMAHA, PCI_DEVICE_ID_YMF744, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_YMF744 },
+ { PCI_VENDOR_ID_YAMAHA, PCI_DEVICE_ID_YMF754, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_YMF754 },
+ { 0, }
+};
+MODULE_DEVICE_TABLE(pci, ymf7xxsb_pci_tbl);
+
+static int __init ymf7xxsb_init_one (struct pci_dev *pcidev, const struct pci_device_id *ent)
+{
+
+ const char *devicename;
+ unsigned long iobase;
+
+ if (cards == MAX_CARDS) {
+ printk (KERN_DEBUG PFX "maximum number of cards reached\n");
+ return -ENODEV;
+ }
+
+ if ( pcidev->irq == 0 ) return -ENODEV;
+ iobase = pci_resource_start (pcidev, 0);
+ if ( iobase == 0x00000000 ) return -ENODEV;
+
+ devicename = devicetable[ent->driver_data].devicename;
+
+ /* remap memory mapped I/O onto kernel virtual memory */
+ if ( (ymfbase[cards] = ioremap_nocache(iobase, YMFSB_REGSIZE)) == 0 )
+ {
+ printk(KERN_ERR PFX "ioremap (0x%lx) returns zero\n", iobase);
+ return -ENODEV;
+ }
+ printk(KERN_INFO PFX "found %s at 0x%lx\n", devicename, iobase);
+#ifdef YMF_DEBUG
+ printk(KERN_INFO PFX "remappling to 0x%p\n", ymfbase[cards]);
+#endif
+
+ memset (&sb_data[cards], 0, sizeof (struct address_info));
+ memset (&opl3_data[cards], 0, sizeof (struct address_info));
+#ifdef SUPPORT_UART401_MIDI
+ memset (&mpu_data[cards], 0, sizeof (struct address_info));
+#endif
+
+ sb_data[cards].name = YMFSB_CARD_NAME;
+ opl3_data[cards].name = YMFSB_CARD_NAME;
+#ifdef SUPPORT_UART401_MIDI
+ mpu_data[cards].name = YMFSB_CARD_NAME;
+#endif
+
+ sb_data[cards].card_subtype = MDL_YMPCI;
+
+ if ( io == 0 ) io = 0x220;
+ sb_data[cards].io_base = io;
+ sb_data[cards].irq = pcidev->irq;
+ sb_data[cards].dma = dma;
+
+ if ( synth_io == 0 ) synth_io = 0x388;
+ opl3_data[cards].io_base = synth_io;
+ opl3_data[cards].irq = -1;
+
+#ifdef SUPPORT_UART401_MIDI
+ if ( mpu_io == 0 ) mpu_io = 0x330;
+ mpu_data[cards].io_base = mpu_io;
+ mpu_data[cards].irq = -1;
+#endif
+
+ if ( ymf7xx_init(pcidev) ) {
+ printk (KERN_ERR PFX
+ "Cannot initialize %s, aborting\n",
+ devicename);
+ return -ENODEV;
+ }
+
+ /* register legacy SoundBlaster Pro */
+ if (!ymf7xxsb_probe_sb(&sb_data[cards])) {
+ printk (KERN_ERR PFX
+ "SB probe at 0x%X failed, aborting\n",
+ io);
+ return -ENODEV;
+ }
+ ymf7xxsb_attach_sb (&sb_data[cards]);
+
+#ifdef SUPPORT_UART401_MIDI
+ /* register legacy MIDI */
+ if ( mpu_io > 0 && 0)
+ {
+ if (!ymf7xxsb_probe_midi (&mpu_data[cards])) {
+ printk (KERN_ERR PFX
+ "MIDI probe @ 0x%X failed, aborting\n",
+ mpu_io);
+ ymf7xxsb_unload_sb (&sb_data[cards], 0);
+ return -ENODEV;
+ }
+ ymf7xxsb_attach_midi (&mpu_data[cards]);
+ }
+#endif
+
+ /* register legacy OPL3 */
+
+ cards++;
+ return 0;
+}
+
+static struct pci_driver ymf7xxsb_driver = {
+ name: "ymf7xxsb",
+ id_table: ymf7xxsb_pci_tbl,
+ probe: ymf7xxsb_init_one,
+};
+
+static int __init init_ymf7xxsb_module(void)
+{
+ int i;
+
+ /*
+ * Binds us to the sound subsystem
+ */
+ SOUND_LOCK;
+
+ if ( master_vol < 0 ) master_vol = 50;
+ if ( master_vol > 100 ) master_vol = 100;
+
+ for (i=0 ; i<MAX_CARDS ; i++ )
+ ymfbase[i] = NULL;
+
+ i = pci_module_init (&ymf7xxsb_driver);
+ if (i < 0) {
+ SOUND_LOCK_END;
+ return i;
+ }
+
+ printk (KERN_INFO PFX YMFSB_CARD_NAME " loaded\n");
+
+ return 0;
+}
+
+static void __exit free_iomaps( void )
+{
+ int i;
+
+ for ( i=0 ; i<MAX_CARDS ; i++ ) {
+ if ( ymfbase[i]!=NULL )
+ iounmap(ymfbase[i]);
+ }
+
+ return;
+}
+
+static void __exit cleanup_ymf7xxsb_module(void)
+{
+ int i;
+
+ for (i = 0; i < cards; i++) {
+#ifdef SUPPORT_UART401_MIDI
+ ymf7xxsb_unload_sb (&sb_data[i], 0);
+ ymf7xxsb_unload_midi (&mpu_data[i]);
+#else
+ ymf7xxsb_unload_sb (&sb_data[i], 1);
+#endif
+ }
+
+ free_iomaps();
+
+ /*
+ * Final clean up with the sound layer
+ */
+ SOUND_LOCK_END;
+}
+
+MODULE_AUTHOR("Daisuke Nagano, breeze.nagano@nifty.ne.jp");
+MODULE_DESCRIPTION("YMF7xx Legacy Audio Driver");
+
+module_init(init_ymf7xxsb_module);
+module_exit(cleanup_ymf7xxsb_module);
+