diff -u --recursive --new-file v2.4.8/linux/CREDITS linux/CREDITS --- v2.4.8/linux/CREDITS Wed Jul 25 17:10:16 2001 +++ linux/CREDITS Sun Aug 12 17:36:24 2001 @@ -687,6 +687,17 @@ S: Deering NH 03244 S: USA +N: Matt Domsch +E: Matt_Domsch@dell.com +W: http://www.dell.com/linux +W: http://domsch.com/linux +D: Linux/IA-64 +D: Dell PowerEdge server, SCSI layer, misc drivers, and other patches +S: Dell Computer Corporation +S: One Dell Way +S: Round Rock, TX 78681 +S: USA + N: Eddie C. Dost E: ecd@skynet.be D: Linux/Sparc kernel hacker @@ -732,14 +743,27 @@ S: USA N: Randy Dunlap -E: randy.dunlap@intel.com +E: rddunlap@osdlab.org W: http://home.att.net/~randy.dunlap/ +W: http://home.att.net/~rddunlap/ W: http://www.linux-usb.org D: Linux-USB subsystem, USB core/UHCI/printer/storage drivers -S: 5200 NE Elam Young Pkwy., M/S HF3-77 -S: Hillsboro, Oregon 97124 +D: x86 SMP, ACPI, bootflag hacking +S: 15275 SW Koll Parkway, Suite H +S: Beaverton, Oregon 97006 S: USA +N: Bob Dunlop +E: rjd@xyzzy.clara.co.uk +E: bob.dunlop@farsite.co.uk +W: www.farsite.co.uk +D: FarSync card device driver +S: FarSite Communications Ltd +S: Tempus Business Centre +S: 60 Kingsclere Road +S: Basingstoke RG21 6XG +S: UK + N: Cyrus Durgin E: cider@speakeasy.org W: http://www.speakeasy.org/~cider/ @@ -924,6 +948,15 @@ S: San Jose, California 95131 S: USA +N: Fernando Fuganti +E: fuganti@conectiva.com.br +E: fuganti@netbank.com.br +D: random kernel hacker, ZF MachZ Watchdog driver +S: Conectiva S.A. +S: R. Tocantins, 89 - Cristo Rei +S: 80050-430 - Curitiba - Paraná +S: Brazil + N: Nigel Gamble E: nigel@nrg.org E: nigel@sgi.com @@ -1114,7 +1147,7 @@ N: Andre Hedrick E: andre@linux-ide.org -E: ahedrick@atipa.com +E: andre@aslab.com E: andre@suse.com W: http://www.linux-ide.org/ D: Random SMP kernel hacker... @@ -1125,8 +1158,8 @@ D: ATA-Smart Kernel Daemon S: Linux ATA Development (LAD) S: Concord, CA -S: Atipa Linux Solutions -S: 6000 Connecticut Kansas City, MO 64120 +S: ASL, Inc. 1-877-ASL-3535 +S: 1757 Houret Court, Milpitas, CA 95035 S: SuSE Linux, Inc. S: 580 Second Street, Suite 210 Oakland, CA 94607 S: USA @@ -2483,6 +2516,15 @@ S: 52 Moore St S: Turner ACT 2612 S: Australia + +N: Richard Russon (FlatCap) +E: kernel@flatcap.org +W: http://www.flatcap.org +D: NTFS support +D: LDM support (Win2000/XP Logical Disk Manager/Dynamic Disks) +S: 50 Swansea Road +S: Reading +S: United Kingdom N: Bill Ryder E: bryder@sgi.com diff -u --recursive --new-file v2.4.8/linux/Documentation/Configure.help linux/Documentation/Configure.help --- v2.4.8/linux/Documentation/Configure.help Sun Aug 12 13:27:58 2001 +++ linux/Documentation/Configure.help Sun Aug 12 10:51:41 2001 @@ -2323,6 +2323,7 @@ Ruffian RPX164-2, AlphaPC164-UX, AlphaPC164-BX SX164 AlphaPC164-SX Sable AS 2000, AS 2100 + Shark DS 20L Takara Takara Titan Privateer Wildfire AlphaServer GS 40/80/160/320 @@ -15585,8 +15586,30 @@ Creative EMU10K1 based PCI sound cards CONFIG_SOUND_EMU10K1 - Say Y or M if you have a PCI sound card using the EMU10K1 - chipset, such as the Creative SBLive!, SB PCI512 or Emu-APS. + Say Y or M if you have a PCI sound card using the EMU10K1 chipset, + such as the Creative SBLive!, SB PCI512 or Emu-APS. + + For more information about the degree of support for the different + card models please check: + + http://opensource.creative.com + + It is now possible to load dsp microcode patches into the EMU10K1 + chip. These patches are used to implement real time sound processing + effects which include for example: signal routing, bass/treble control, + AC3 passthrough, ... + Userspace tools to create new patches and load/unload them can be found + at the above link. You need to get the source snapshot and then type: + + % make tools + % make install-tools + + in the top directory. + +Creative EMU10K1 MIDI +CONFIG_MIDI_EMU10K1 + Say Y if you want to be able to use the OSS /dev/sequencer interface. + This code is still experimental. Crystal SoundFusion (CS4280/461x) CONFIG_SOUND_FUSION @@ -17971,6 +17994,16 @@ If you're not sure, say N. +SRM environment variables in procfs +CONFIG_SRM_ENV + If you enable this option, a subdirectory called srm_environment + will give you access to the most important SRM environment + variables. If you've got an Alpha style system supporting + SRC, then it is a good idea to say Yes or Module to this driver. + + This driver is also available as a module and will be called + srm_env.o if you build it as a module. + Footbridge internal watchdog CONFIG_21285_WATCHDOG The Intel Footbridge chip contains a builtin watchdog circuit. Say Y diff -u --recursive --new-file v2.4.8/linux/Documentation/DMA-mapping.txt linux/Documentation/DMA-mapping.txt --- v2.4.8/linux/Documentation/DMA-mapping.txt Sat May 19 17:43:05 2001 +++ linux/Documentation/DMA-mapping.txt Wed Aug 15 01:54:44 2001 @@ -180,6 +180,19 @@ to memory is immediately visible to the device, and vice versa. Consistent mappings guarantee this. + IMPORTANT: Consistent DMA memory does not preclude the usage of + proper memory barriers. The cpu may reorder stores to + consistent memory just as it may normal memory. Example: + if it is important for the device to see the first word + of a descriptor updated before the second, you must do + something like: + + desc->word0 = address; + wmb(); + desc->word1 = DESC_VALID; + + in order to get correct behavior on all platforms. + - Streaming DMA mappings which are usually mapped for one DMA transfer, unmapped right after it (unless you use pci_dma_sync below) and for which hardware can optimize for sequential accesses. diff -u --recursive --new-file v2.4.8/linux/Documentation/SubmittingDrivers linux/Documentation/SubmittingDrivers --- v2.4.8/linux/Documentation/SubmittingDrivers Fri Apr 6 10:42:55 2001 +++ linux/Documentation/SubmittingDrivers Sun Aug 12 10:38:47 2001 @@ -2,7 +2,7 @@ --------------------------------------- This document is intended to explain how to submit device drivers to the -Linux 2.2 and 2.4test kernel trees. Note that if you are interested in video +Linux 2.2 and 2.4 kernel trees. Note that if you are interested in video card drivers you should probably talk to XFree86 (http://wwww.xfree86.org) instead. @@ -34,7 +34,7 @@ maintainer does not respond or you cannot find the appropriate maintainer then please contact Alan Cox -Linux 2.4test: +Linux 2.4: This kernel tree is under active development. The same rules apply as 2.2 but you may wish to submit your driver via linux-kernel (see resources) and follow that list to track changes in API's. These diff -u --recursive --new-file v2.4.8/linux/Documentation/devices.txt linux/Documentation/devices.txt --- v2.4.8/linux/Documentation/devices.txt Sat May 19 17:43:05 2001 +++ linux/Documentation/devices.txt Sun Aug 12 17:36:24 2001 @@ -1,17 +1,19 @@ + LINUX ALLOCATED DEVICES Maintained by H. Peter Anvin - Last revised: December 29, 2000 + Last revised: 3 June 2001 This list is the Linux Device List, the official registry of allocated device numbers and /dev directory nodes for the Linux operating system. -The latest version of this list is included with the Linux kernel -sources. It is also available separately from -http://www.kernel.org/pub/linux/docs/device-list/ or -ftp://ftp.kernel.org/pub/linux/docs/device-list/. The LaTeX version -of this document is no longer maintained. +The latest version of this list is available from +http://www.lanana.org/docs/device-list/ or +ftp://ftp.kernel.org/pub/linux/docs/device-list/. This version may be +newer than the one distributed with the Linux kernel. + +The LaTeX version of this document is no longer maintained. This document is included by reference into the Filesystem Hierarchy Standard (FHS). The FHS is available from http://www.pathname.com/fhs/. @@ -38,6 +40,13 @@ **** DEVICE DRIVERS AUTHORS PLEASE READ THIS **** +THE DEVICE REGISTRY IS OFFICIALLY FROZEN FOR LINUS TORVALDS' KERNEL +TREE. At Linus' request, no more allocations will be made official +for Linus' kernel tree; the 3 June 2001 version of this list is the +official final version of this registry. At Alan Cox' request, +however, the registry will continue to be maintained for the -ac +series of kernels, and registrations will be accepted. + To have a major number allocated, or a minor number in situations where that applies (e.g. busmice), please contact me with the appropriate device information. Also, if you have additional @@ -391,12 +400,25 @@ 199 = /dev/scanners/cuecat :CueCat barcode scanner 200 = /dev/net/tun TAP/TUN network device 201 = /dev/button/gulpb Transmeta GULP-B buttons - 204 = /dev/video/em8300 EM8300 DVD decoder control - 205 = /dev/video/em8300_mv EM8300 DVD decoder video - 206 = /dev/video/em8300_ma EM8300 DVD decoder audio - 207 = /dev/video/em8300_sp EM8300 DVD decoder subpicture - 208 = /dev/compaq/cpqphpc Compaq PCI Hot Plug Controller - 209 = /dev/compaq/cpqrid Compaq Remote Insight Driver + 204 = /dev/video/em8300 EM8300 DVD decoder control + 205 = /dev/video/em8300_mv EM8300 DVD decoder video + 206 = /dev/video/em8300_ma EM8300 DVD decoder audio + 207 = /dev/video/em8300_sp EM8300 DVD decoder subpicture + 208 = /dev/compaq/cpqphpc Compaq PCI Hot Plug Controller + 209 = /dev/compaq/cpqrid Compaq Remote Insight Driver + 210 = /dev/impi/bt IMPI coprocessor block transfer + 211 = /dev/impi/smic IMPI coprocessor stream interface + 212 = /dev/watchdogs/0 First watchdog device + 213 = /dev/watchdogs/1 Second watchdog device + 214 = /dev/watchdogs/2 Third watchdog device + 215 = /dev/watchdogs/3 Fourth watchdog device + 216 = /dev/fujitsu/apanel Fujitsu/Siemens application panel + 217 = /dev/ni/natmotn National Instruments Motion + 218 = /dev/kchuid Inter-process chuid control + 219 = /dev/modems/mwave MWave modem firmware upload + 220 = /dev/mptctl Message passing technology (MPT) control + 221 = /dev/mvista/hssdsi Montavista PICMG hot swap system driver + 222 = /dev/mvista/hasi Montavista PICMG high availability 240-255 Reserved for local use 11 char Raw keyboard device @@ -430,14 +452,19 @@ 1 = /dev/dos_cd1 Second MSCDEX CD-ROM ... - 13 char PC speaker (OBSOLETE) - 0 = /dev/pcmixer Emulates /dev/mixer - 1 = /dev/pcsp Emulates /dev/dsp (8-bit) - 4 = /dev/pcaudio Emulates /dev/audio - 5 = /dev/pcsp16 Emulates /dev/dsp (16-bit) + 13 char Input core + 0 = /dev/input/js0 First joystick + 1 = /dev/input/js1 Second joystick + ... + 32 = /dev/input/mouse0 First mouse + 33 = /dev/input/mouse1 Second mouse + ... + 63 = /dev/input/mice Unified mouse + 64 = /dev/input/event0 First event queue + 65 = /dev/input/event1 Second event queue + ... - The current PC speaker driver uses the Open Sound - System interface, and these devices are obsolete. + Each device type has 5 bits (32 minors). block 8-bit MFM/RLL/IDE controller 0 = /dev/xda First XT disk whole disk @@ -664,13 +691,12 @@ ... 31 = /dev/fb31 32nd frame buffer - Backward compatibility aliases {2.6} - - 32 = /dev/fb1 Second frame buffer + For backwards compatibility {2.6} the following + progression is also handled by current kernels: + 0 = /dev/fb0 + 32 = /dev/fb1 ... - 224 = /dev/fb7 Eighth frame buffer - - All additional minor numbers are reserved. + 224 = /dev/fb7 block Aztech/Orchid/Okano/Wearnes CD-ROM 0 = /dev/aztcd Aztech CD-ROM @@ -945,7 +971,7 @@ 0 = /dev/rd/c0d0 First disk, whole disk 8 = /dev/rd/c0d1 Second disk, whole disk ... - 248 = /dev/rd/c0d15 16th disk, whole disk + 248 = /dev/rd/c0d15 32nd disk, whole disk For partitions add: 0 = /dev/rd/c?d? Whole disk @@ -961,7 +987,7 @@ 0 = /dev/rd/c1d0 First disk, whole disk 8 = /dev/rd/c1d1 Second disk, whole disk ... - 248 = /dev/rd/c1d15 16th disk, whole disk + 248 = /dev/rd/c1d31 32nd disk, whole disk Partitions are handled as for major 48. @@ -971,7 +997,7 @@ 0 = /dev/rd/c2d0 First disk, whole disk 8 = /dev/rd/c2d1 Second disk, whole disk ... - 248 = /dev/rd/c2d15 16th disk, whole disk + 248 = /dev/rd/c2d31 32nd disk, whole disk 51 char Baycom radio modem 0 = /dev/bc0 First Baycom radio modem @@ -981,7 +1007,7 @@ 0 = /dev/rd/c3d0 First disk, whole disk 8 = /dev/rd/c3d1 Second disk, whole disk ... - 248 = /dev/rd/c3d15 16th disk, whole disk + 248 = /dev/rd/c3d31 32nd disk, whole disk Partitions are handled as for major 48. @@ -994,7 +1020,7 @@ 0 = /dev/rd/c4d0 First disk, whole disk 8 = /dev/rd/c4d1 Second disk, whole disk ... - 248 = /dev/rd/c4d15 16th disk, whole disk + 248 = /dev/rd/c4d31 32nd disk, whole disk Partitions are handled as for major 48. @@ -1016,7 +1042,7 @@ 0 = /dev/rd/c5d0 First disk, whole disk 8 = /dev/rd/c5d1 Second disk, whole disk ... - 248 = /dev/rd/c5d15 16th disk, whole disk + 248 = /dev/rd/c5d31 32nd disk, whole disk Partitions are handled as for major 48. @@ -1033,7 +1059,7 @@ 0 = /dev/rd/c6d0 First disk, whole disk 8 = /dev/rd/c6d1 Second disk, whole disk ... - 248 = /dev/rd/c6d15 16th disk, whole disk + 248 = /dev/rd/c6d31 32nd disk, whole disk Partitions are handled as for major 48. @@ -1043,7 +1069,7 @@ 0 = /dev/rd/c7d0 First disk, whole disk 8 = /dev/rd/c7d1 Second disk, whole disk ... - 248 = /dev/rd/c7d15 16th disk, whole disk + 248 = /dev/rd/c7d31 32nd disk, whole disk Partitions are handled as for major 48. @@ -1541,7 +1567,6 @@ Partitions are handled the same way as for the first interface (see major number 3). - 89 char I2C bus interface 0 = /dev/i2c-0 First I2C adapter 1 = /dev/i2c-1 Second I2C adapter @@ -1610,23 +1635,29 @@ 1 = /dev/dcxx1 Second capture card ... + block IBM S/390 DASD block storage + 0 = /dev/dasda First DASD device, major + 1 = /dev/dasda1 First DASD device, block 1 + 2 = /dev/dasda2 First DASD device, block 2 + 3 = /dev/dasda3 First DASD device, block 3 + 4 = /dev/dasdb Second DASD device, major + 5 = /dev/dasdb1 Second DASD device, block 1 + 6 = /dev/dasdb2 Second DASD device, block 2 + 7 = /dev/dasdb3 Second DASD device, block 3 + ... + 95 char IP filter 0 = /dev/ipl Filter control device/log file 1 = /dev/ipnat NAT control device/log file 2 = /dev/ipstate State information log file 3 = /dev/ipauth Authentication control device/log file - - block IBM S/390 DASD block storage - 0 = /dev/dasd0 First DASD device, major - 1 = /dev/dasd0a First DASD device, block 1 - 2 = /dev/dasd0b First DASD device, block 2 - 3 = /dev/dasd0c First DASD device, block 3 - 4 = /dev/dasd1 Second DASD device, major - 5 = /dev/dasd1a Second DASD device, block 1 - 6 = /dev/dasd1b Second DASD device, block 2 - 7 = /dev/dasd1c Second DASD device, block 3 ... + block IBM S/390 VM/ESA minidisk + 0 = /dev/mnda First VM/ESA minidisk + 1 = /dev/mndb Second VM/ESA minidisk + ... + 96 char Parallel port ATAPI tape devices 0 = /dev/pt0 First parallel port ATAPI tape 1 = /dev/pt1 Second parallel port ATAPI tape @@ -1635,11 +1666,6 @@ 129 = /dev/npt1 Second p.p. ATAPI tape, no rewind ... - block IBM S/390 VM/ESA minidisk - 0 = /dev/msd0 First VM/ESA minidisk - 1 = /dev/msd1 Second VM/ESA minidisk - ... - 97 char Parallel port generic ATAPI interface 0 = /dev/pg0 First parallel port ATAPI device 1 = /dev/pg1 Second parallel port ATAPI device @@ -1706,6 +1732,16 @@ 2 = /dev/tlk2 Third Teletext decoder 3 = /dev/tlk3 Fourth Teletext decoder + block Compressed block device + 0 = /dev/cbd/a First compressed block device, whole device + 16 = /dev/cbd/b Second compressed block device, whole device + ... + 240 = /dev/cbd/p 16th compressed block device, whole device + + Partitions are handled in the same way as for IDE + disks (see major number 3) except that the limit on + partitions is 15. + 103 char Arla network file system 0 = /dev/xfs0 Arla XFS @@ -1837,11 +1873,30 @@ There is currently a device-naming conflict between these and PAM multimodems (major 78). + block IBM iSeries virtual disk + 0 = /dev/iseries/vda First virtual disk, whole disk + 8 = /dev/iseries/vdb Second virtual disk, whole disk + ... + 200 = /dev/iseries/vdz 26th virtual disk, whole disk + 208 = /dev/iseries/vdaa 27th virtual disk, whole disk + ... + 240 = /dev/iseries/vdaf 32nd virtual disk, whole disk + + Partitions are handled in the same way as for IDE + disks (see major number 3) except that the limit on + partitions is 7. + 113 char ISI serial card - alternate devices 0 = /dev/cum0 Callout device for ttyM0 1 = /dev/cum1 Callout device for ttyM1 ... + block IBM iSeries virtual CD-ROM + + 0 = /dev/iseries/vcda First virtual CD-ROM + 1 = /dev/iseries/vcdb Second virtual CD-ROM + ... + 114 char Picture Elements ISE board 0 = /dev/ise0 First ISE board 1 = /dev/ise1 Second ISE board @@ -2005,9 +2060,9 @@ ... 162 char Raw block device interface - 0 = /dev/raw Raw I/O control device - 1 = /dev/raw1 First raw I/O device - 2 = /dev/raw2 Second raw I/O device + 0 = /dev/rawctl Raw I/O control device + 1 = /dev/raw/raw1 First raw I/O device + 2 = /dev/raw/raw2 Second raw I/O device ... 163 char Radio Tech BIM-XXX-RS232 radio modem @@ -2219,7 +2274,22 @@ ... 255 = /dev/nvidiactl Nvidia card control device -196-197 UNASSIGNED +196 char Tormenta T1 card + 0 = /dev/tor/0 Master control channel for all cards + 1 = /dev/tor/1 First DS0 + 2 = /dev/tor/2 Second DS0 + ... + 48 = /dev/tor/48 48th DS0 + 49 = /dev/tor/49 First pseudo-channel + 50 = /dev/tor/50 Second pseudo-channel + ... + +197 char OpenTNF tracing facility + 0 = /dev/tnf/t0 Trace 0 data extraction + 1 = /dev/tnf/t1 Trace 1 data extraction + ... + 128 = /dev/tnf/status Tracing facility status + 130 = /dev/tnf/trace Tracing device 198 char Total Impact TPMP2 quad coprocessor PCI card 0 = /dev/tpmp2/0 First card @@ -2288,6 +2358,9 @@ 16 = /dev/ttyAM0 ARM "AMBA" serial port 0 ... 31 = /dev/ttyAM15 ARM "AMBA" serial port 15 + 32 = /dev/ttyDB0 DataBooster serial port 0 + ... + 39 = /dev/ttyDB7 DataBooster serial port 7 205 char Low-density serial ports (alternate device) 0 = /dev/culu0 Callout device for ttyLU0 @@ -2309,6 +2382,9 @@ 16 = /dev/cuam0 Callout device for ttyAM0 ... 31 = /dev/cuam15 Callout device for ttyAM15 + 32 = /dev/cudb0 Callout device for ttyDB0 + ... + 39 = /dev/cudb7 Callout device for ttyDB7 206 char OnStream SC-x0 tape devices 0 = /dev/osst0 First OnStream SCSI tape, mode 0 @@ -2450,7 +2526,59 @@ 1 = /dev/cuy1 Callout device for ttyY1 ... -226-239 UNASSIGNED +226 char Direct Rendering Infrastructure (DRI) + 0 = /dev/dri/card0 First graphics card + 1 = /dev/dri/card1 Second graphics card + ... + +227 char IBM 3270 terminal block-mode access + 0 = /dev/3270/tub Controlling interface + 1 = /dev/3270/tub1 First 3270 terminal + 2 = /dev/3270/tub2 Second 3270 terminal + ... + +228 char IBM 3270 terminal Unix tty access + 1 = /dev/3270/tty1 First 3270 terminal + 2 = /dev/3270/tty2 Seconds 3270 terminal + ... + +229 char IBM iSeries virtual console + 0 = /dev/iseries/vtty0 First console port + 1 = /dev/iseries/vtty1 Second console port + ... + +230 char IBM iSeries virtual tape + 0 = /dev/iseries/vt0 First virtual tape, mode 0 + 1 = /dev/iseries/vt1 Second virtual tape, mode 0 + ... + 32 = /dev/iseries/vt0l First virtual tape, mode 1 + 33 = /dev/iseries/vt1l Second virtual tape, mode 1 + ... + 64 = /dev/iseries/vt0m First virtual tape, mode 2 + 65 = /dev/iseries/vt1m Second virtual tape, mode 2 + ... + 96 = /dev/iseries/vt0a First virtual tape, mode 3 + 97 = /dev/iseries/vt1a Second virtual tape, mode 3 + ... + 128 = /dev/iseries/nvt0 First virtual tape, mode 0, no rewind + 129 = /dev/iseries/nvt1 Second virtual tape, mode 0, no rewind + ... + 160 = /dev/iseries/nvt0l First virtual tape, mode 1, no rewind + 161 = /dev/iseries/nvt1l Second virtual tape, mode 1, no rewind + ... + 192 = /dev/iseries/nvt0m First virtual tape, mode 2, no rewind + 193 = /dev/iseries/nvt1m Second virtual tape, mode 2, no rewind + ... + 224 = /dev/iseries/nvt0a First virtual tape, mode 3, no rewind + 225 = /dev/iseries/nvt1a Second virtual tape, mode 3, no rewind + ... + + "No rewind" refers to the omission of the default + automatic rewind on device close. The MTREW or MTOFFL + ioctl()'s can be used to rewind the tape regardless of + the device used to access it. + +231-239 UNASSIGNED 240-254 LOCAL/EXPERIMENTAL USE @@ -2647,3 +2775,4 @@ in our notation). This removes the problem of exhausting the namespace and enables the kernel to automatically create the device nodes for the slaves on demand using the "devpts" filesystem. + diff -u --recursive --new-file v2.4.8/linux/Documentation/filesystems/ntfs.txt linux/Documentation/filesystems/ntfs.txt --- v2.4.8/linux/Documentation/filesystems/ntfs.txt Wed Jul 25 17:10:17 2001 +++ linux/Documentation/filesystems/ntfs.txt Mon Aug 13 16:40:19 2001 @@ -1,8 +1,8 @@ NTFS Overview ============= -Driver development has as of recently (since June '01) been sponsored -by Legato Systems, Inc. (http://www.legato.com) +Legato Systems, Inc. (http://www.legato.com) have sponsored Anton Altaparmakov +to develop NTFS on Linux since June 2001. To mount an NTFS volume, use the filesystem type 'ntfs'. The driver currently works only in read-only mode, with no fault-tolerance supported. @@ -36,15 +36,17 @@ iocharset=name Character set to use when returning file names. Unlike VFAT, NTFS suppresses names that contain - unconvertible characters - -utf8= Use UTF-8 for converting file names - -uni_xlate=,2 Use the VFAT-style encoding for file names outside - the current character set. A boolean value will - enable the feature, a value of 2 will enable the - encoding as documented in vfat.txt: - ':', (u & 0x3f), ((u>>6) & 0x3f), (u>>12), + unconvertible characters. Note that most character + sets contain insufficient characters to represent all + possible Unicode characters that can exist on NTFS. To + be sure you are not missing any files, you are advised + to use the iocharset=utf8 which should be capable of + representing all Unicode characters. + +utf8= Use UTF-8 for converting file names. - It is preferable + to use iocharset=utf8 instead, but if the utf8 NLS is + not available, you can use this utf8 option, which + enables the driver's builtin utf8 conversion functions. uid= gid= @@ -80,6 +82,27 @@ ChangeLog ========= + +NTFS 1.1.16: + + - Removed non-functional uni_xlate mount options. + - Clarified the semantics of the utf8 and iocharset mount options. + - Threw out the non-functional mount options for using hard coded + character set conversion. Only kept utf8 one. + - Fixed handling of mount options and proper handling of faulty mount + options on remount. + - Cleaned up character conversion which basically became simplified a + lot due to the removal of the above mentioned mount options. + - Made character conversion to be always consistent. Previously we + could output to the VFS file names which we would then not accept + back from the VFS so in effect we were generating ghost entries in + the directory listings which could not be accessed by any means. + - Simplified time conversion functions drastically without sacrificing + accuracy. (-8 + - Fixed a use of a pointer before the check for the pointer being + NULL, reported by the Stanford checker. + - Fixed several missing error checks, reported by the Stanford + checker and fixed by Rasmus Andersen. NTFS 1.1.15 (changes since kernel 2.4.4's NTFS driver): diff -u --recursive --new-file v2.4.8/linux/Documentation/isdn/README.HiSax linux/Documentation/isdn/README.HiSax --- v2.4.8/linux/Documentation/isdn/README.HiSax Thu Feb 8 10:40:25 2001 +++ linux/Documentation/isdn/README.HiSax Mon Aug 13 16:35:28 2001 @@ -69,12 +69,7 @@ Note: PCF, PCF-Pro: up to now, only the ISDN part is supported PCC-8: not tested yet - Teles PCMCIA is EXPERIMENTAL - Teles 16.3c is EXPERIMENTAL - Teles PCI is EXPERIMENTAL - Teles S0Box is EXPERIMENTAL Eicon.Diehl Diva U interface not tested - HFC-S+, HFC-SP/PCMCIA are experimental If you know other passive cards with the Siemens chipset, please let me know. To use the PNP cards you need the isapnptools. diff -u --recursive --new-file v2.4.8/linux/Documentation/networking/vortex.txt linux/Documentation/networking/vortex.txt --- v2.4.8/linux/Documentation/networking/vortex.txt Tue Jul 3 17:08:18 2001 +++ linux/Documentation/networking/vortex.txt Sun Aug 12 12:27:36 2001 @@ -88,7 +88,7 @@ The individual options are composed of a number of bitfields which have the following meanings: - ssible media type settings + Possible media type settings 0 10baseT 1 10Mbs AUI 2 undefined @@ -104,8 +104,11 @@ When generating a value for the 'options' setting, the above media selection values may be OR'ed (or added to) the following: - 512 (0x200) Force full duplex mode. - 16 (0x10) Bus-master enable bit (Old Vortex cards only) + 0x8000 Set driver debugging level to 7 + 0x4000 Set driver debugging level to 2 + 0x0400 Enable Wake-on-LAN + 0x0200 Force full duplex mode. + 0x0010 Bus-master enable bit (Old Vortex cards only) For example: @@ -359,6 +362,11 @@ 8K byte-wide RAM 5:3 Rx:Tx split, autoselect/Autonegotiate interface. MII transceiver found at address 24, status 782d. Enabling bus-master transmits and whole-frame receives. + + NOTE: You must provide the `debug=2' modprobe option to generate + a full detection message. Please do this: + + modprobe 3c59x debug=2 o If it is a PCI device, the relevant output from 'lspci -vx', eg: diff -u --recursive --new-file v2.4.8/linux/Documentation/parisc/mm linux/Documentation/parisc/mm --- v2.4.8/linux/Documentation/parisc/mm Tue Dec 5 12:29:38 2000 +++ linux/Documentation/parisc/mm Wed Dec 31 16:00:00 1969 @@ -1,31 +0,0 @@ - -The current state of Linux/PA-RISC mm is BROKEN. - -Someone needs to sit down and thoroughly rewrite all the cache flushing -macro definitions. Here are some of the problems, followed by what I -think needs to be done about them. - -(1) We're using fdce / fice everywhere. This has to stop (except in -the routines which flush the entire cache). The right instructions to -be using are fdc/fic. - -(2) fdc/fic will throw exceptions if the address they reference isn't -mapped. Therefore we need to check the page is mapped before flushing -(we're guaranteed not to have the page dirty if we don't have a software -mapping for it any longer, right?) - -(3) the flush macros are right now tunnelled down to one routine to flush -the data cache and one routine to flush the insn cache. this is wrong. -we should take hints from how we're called and optimise our routines -accordingly. - -(4) fdc/fic actually take space register arguments. fic takes an 3-bit sr -argument and fdc takes a 2-bit sr argument. right now, there's a lot of -pissing about with %sr1 and all the macros use %sr1. This is crazy. We -normally _know_ what's being referred to, and it's the current task. So -if we want to flush that, just use %sr3. If it happens to be kernel, -use %sr0 for fdc and %sr4 for fic. - -(5) we need to write flush_kernel_dcache_range and use it on kernel -addresses. all the macros are defined to work on the _current task's_ -virtual address space. diff -u --recursive --new-file v2.4.8/linux/Documentation/sonypi.txt linux/Documentation/sonypi.txt --- v2.4.8/linux/Documentation/sonypi.txt Wed Jul 25 17:10:17 2001 +++ linux/Documentation/sonypi.txt Mon Aug 13 16:38:29 2001 @@ -65,6 +65,19 @@ Bugs: ----- + - several users reported that this driver disables the BIOS-managed + Fn-keys which put the laptop in sleeping state, or switch the + external monitor on/off. There is no workaround yet, since this + driver disables all APM management for those keys, by enabling the + ACPI management (and the ACPI core stuff is not complete yet). If + you have one of those laptops with working Fn keys and want to + continue to use them, don't use this driver. + + - some users reported that the laptop speed is lower (dhrystone + tested) when using the driver with the fnkeyinit parameter. I cannot + reproduce it on my laptop and not all users have this problem. + Still under investigation. + - since all development was done by reverse engineering, there is _absolutely no guarantee_ that this driver will not crash your laptop. Permanently. diff -u --recursive --new-file v2.4.8/linux/Documentation/usb/philips.txt linux/Documentation/usb/philips.txt --- v2.4.8/linux/Documentation/usb/philips.txt Wed Jul 25 17:10:17 2001 +++ linux/Documentation/usb/philips.txt Sun Aug 12 17:36:24 2001 @@ -1,5 +1,5 @@ This file contains some additional information for the Philips webcams. -E-mail: webcam@smcc.demon.nl Last updated: 2001-04-25 +E-mail: webcam@smcc.demon.nl Last updated: 2001-07-27 The main webpage for the Philips driver is http://www.smcc.demon.nl/webcam/. It contains a lot of extra information, a FAQ, and the binary plugin @@ -29,10 +29,9 @@ palette Specifies the desired colour order that should be delivered by read() and - mmap(). The string can be one of bgr24, rgb24, rgb32, bgr32, yuyv, - yuv420, yuv420p. If the tool you use produces odd colours (more - specificly, red and blue are swapped), try palette=bgr24 or - palette=rgb24. + mmap(). The string can be one of yuv420 or yuv420p; however, yuv420 will + be phased out, leaving only yuv420p, so this option will disappear + entirely. Only the native yuv420/yuv420p format is supported by the in kernel driver. If you want to use other formats with in-kernel conversion download the @@ -73,7 +72,7 @@ compression (only useful with the plugin) With this option you can control the compression factor that the camera - use to squeeze the image through the USB bus. You can set the + uses to squeeze the image through the USB bus. You can set the parameter between 0 and 3: 0 = prefer uncompressed images; if the requested mode is not available in an uncompressed format, the driver will silently switch to low @@ -83,7 +82,7 @@ 3 = high compression. High compression takes less bandwidth of course, but it could also - introduce some unwanted artefacts. The default is 2, medium compression. + introduce some unwanted artefacts. The default is 2, medium compression. See the FAQ on the website for an overview of which modes require compression. @@ -91,7 +90,6 @@ The 645 and 646 have fixed compression parameters. trace - In order to better detect problems, it is now possible to turn on a 'trace' of some of the calls the module makes; it logs all items in your kernel log at debug level. diff -u --recursive --new-file v2.4.8/linux/MAINTAINERS linux/MAINTAINERS --- v2.4.8/linux/MAINTAINERS Sun Aug 12 13:27:58 2001 +++ linux/MAINTAINERS Sun Aug 12 17:36:24 2001 @@ -227,6 +227,12 @@ L: linux-kernel@vger.kernel.org S: Maintained +BLUETOOTH SUBSYSTEM (BlueZ) +P: Maxim Krasnyansky +M: maxk@qualcomm.com +W: http://bluez.sf.net +S: Maintained + BTTV VIDEO4LINUX DRIVER P: Gerd Knorr M: kraxel@goldbach.in-berlin.de @@ -471,7 +477,7 @@ EMU10K1 SOUND DRIVER P: Rui Sousa -M: rsousa@grad.physics.sunysb.edu +M: rui.p.m.sousa@clix.pt L: emu10k1-devel@opensource.creative.com W: http://opensource.creative.com/ S: Maintained @@ -500,6 +506,13 @@ L: linux-kernel@vger.kernel.org S: Maintained +FARSYNC SYNCHRONOUS DRIVER +P: Bob Dunlop +M: rjd@xyzzy.clara.co.uk +M: bob.dunlop@farsite.co.uk +W: http://www.farsite.co.uk/ +S: Supported + FILE LOCKING (flock() and fcntl()/lockf()) P: Matthew Wilcox M: matthew@wil.cx @@ -637,7 +650,7 @@ IDE DRIVER [GENERAL] P: Andre Hedrick M: andre@linux-ide.org -M: ahedrick@atipa.com +M: andre@aslab.com M: andre@suse.com L: linux-kernel@vger.kernel.org W: http://www.kernel.org/pub/linux/kernel/people/hedrick/ @@ -693,6 +706,12 @@ L: linux1394-devel@lists.sourceforge.net S: Maintained +IMS TWINTURBO FRAMEBUFFER DRIVER +P: Paul Mundt +M: lethal@chaoticdreams.org +L: linux-fbdev-devel@lists.sourceforge.net +S: Maintained + INTEL APIC/IOAPIC, LOWLEVEL X86 SMP SUPPORT P: Ingo Molnar M: mingo@redhat.com @@ -823,6 +842,13 @@ L: linuxppc-dev@lists.linuxppc.org S: Maintained +LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP Dynamic Disks) +P: Richard Russon (FlatCap) +M: ldm@flatcap.org +L: ldm-devel@lists.sourceforge.net +W: http://ldm.sourceforge.net +S: Maintained + LOGICAL VOLUME MANAGER P: Heinz Mauelshagen M: mge@sistina.de @@ -1594,17 +1620,18 @@ L: linux-hams@vger.kernel.org S: Maintained +ZF MACHZ WATCHDOG +P: Fernando Fuganti +M: fuganti@conectiva.com.br +M: fuganti@netbank.com.br +W: http://cvs.conectiva.com.br/drivers/ZFL-watchdog/ +S: Maintained + ZR36120 VIDEO FOR LINUX DRIVER P: Pauline Middelink M: middelin@polyware.nl W: http://www.polyware.nl/~middelin/En/hobbies.html W: http://www.polyware.nl/~middelin/hobbies.html -S: Maintained - -Bluetooth Subsystem (BlueZ) -P: Maxim Krasnyansky -M: maxk@qualcomm.com -W: http://bluez.sf.net S: Maintained THE REST diff -u --recursive --new-file v2.4.8/linux/Makefile linux/Makefile --- v2.4.8/linux/Makefile Sun Aug 12 13:27:58 2001 +++ linux/Makefile Thu Aug 16 11:12:49 2001 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 4 -SUBLEVEL = 8 +SUBLEVEL = 9 EXTRAVERSION = KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) diff -u --recursive --new-file v2.4.8/linux/arch/alpha/config.in linux/arch/alpha/config.in --- v2.4.8/linux/arch/alpha/config.in Wed Jul 25 17:10:17 2001 +++ linux/arch/alpha/config.in Sun Aug 12 10:51:41 2001 @@ -54,12 +54,13 @@ RX164 CONFIG_ALPHA_RX164 \ SX164 CONFIG_ALPHA_SX164 \ Sable CONFIG_ALPHA_SABLE \ + Shark CONFIG_ALPHA_SHARK \ Takara CONFIG_ALPHA_TAKARA \ Titan CONFIG_ALPHA_TITAN \ Wildfire CONFIG_ALPHA_WILDFIRE" Generic # clear all implied options (don't want default values for those): -unset CONFIG_ALPHA_EV4 CONFIG_ALPHA_EV5 CONFIG_ALPHA_EV6 +unset CONFIG_ALPHA_EV4 CONFIG_ALPHA_EV5 CONFIG_ALPHA_EV6 CONFIG_ALPHA_EV67 unset CONFIG_ALPHA_EISA unset CONFIG_ALPHA_LCA CONFIG_ALPHA_APECS CONFIG_ALPHA_CIA unset CONFIG_ALPHA_T2 CONFIG_ALPHA_PYXIS CONFIG_ALPHA_POLARIS @@ -142,6 +143,11 @@ define_bool CONFIG_ALPHA_EV6 y define_bool CONFIG_ALPHA_TSUNAMI y fi +if [ "$CONFIG_ALPHA_SHARK" = "y" ] +then + define_bool CONFIG_ALPHA_EV67 y + define_bool CONFIG_ALPHA_TSUNAMI y +fi if [ "$CONFIG_ALPHA_WILDFIRE" = "y" -o "$CONFIG_ALPHA_TITAN" = "y" ] then define_bool CONFIG_ALPHA_EV6 y @@ -170,7 +176,7 @@ -o "$CONFIG_ALPHA_SABLE" = "y" -o "$CONFIG_ALPHA_NORITAKE" = "y" \ -o "$CONFIG_ALPHA_DP264" = "y" -o "$CONFIG_ALPHA_RAWHIDE" = "y" \ -o "$CONFIG_ALPHA_EIGER" = "y" -o "$CONFIG_ALPHA_WILDFIRE" = "y" \ - -o "$CONFIG_ALPHA_TITAN" = "y" ] + -o "$CONFIG_ALPHA_TITAN" = "y" -o "$CONFIG_ALPHA_SHARK" = "y" ] then define_bool CONFIG_ALPHA_SRM y fi @@ -179,7 +185,7 @@ -o "$CONFIG_ALPHA_TAKARA" = "y" -o "$CONFIG_ALPHA_EB164" = "y" \ -o "$CONFIG_ALPHA_ALCOR" = "y" -o "$CONFIG_ALPHA_MIATA" = "y" \ -o "$CONFIG_ALPHA_LX164" = "y" -o "$CONFIG_ALPHA_SX164" = "y" \ - -o "$CONFIG_ALPHA_NAUTILUS" = "y" ] + -o "$CONFIG_ALPHA_NAUTILUS" = "y" -o "$CONFIG_ALPHA_NONAME" = "y" ] then bool 'Use SRM as bootloader' CONFIG_ALPHA_SRM fi @@ -201,7 +207,8 @@ if [ "$CONFIG_ALPHA_SABLE" = "y" -o "$CONFIG_ALPHA_RAWHIDE" = "y" \ -o "$CONFIG_ALPHA_DP264" = "y" -o "$CONFIG_ALPHA_WILDFIRE" = "y" \ - -o "$CONFIG_ALPHA_TITAN" = "y" -o "$CONFIG_ALPHA_GENERIC" = "y" ] + -o "$CONFIG_ALPHA_TITAN" = "y" -o "$CONFIG_ALPHA_GENERIC" = "y" \ + -o "$CONFIG_ALPHA_SHARK" = "y" ] then bool 'Symmetric multi-processing support' CONFIG_SMP fi @@ -235,6 +242,10 @@ "ELF CONFIG_KCORE_ELF \ A.OUT CONFIG_KCORE_AOUT" ELF fi +if [ "$CONFIG_PROC_FS" != "n" -a "$CONFIG_ALPHA_SRM" = "y" ]; then + tristate 'SRM environment through procfs' CONFIG_SRM_ENV +fi + tristate 'Kernel support for a.out (ECOFF) binaries' CONFIG_BINFMT_AOUT tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC diff -u --recursive --new-file v2.4.8/linux/arch/alpha/defconfig linux/arch/alpha/defconfig --- v2.4.8/linux/arch/alpha/defconfig Fri May 4 15:16:28 2001 +++ linux/arch/alpha/defconfig Sun Aug 12 10:38:47 2001 @@ -44,6 +44,7 @@ # CONFIG_ALPHA_RX164 is not set # CONFIG_ALPHA_SX164 is not set # CONFIG_ALPHA_SABLE is not set +# CONFIG_ALPHA_SHARK is not set # CONFIG_ALPHA_TAKARA is not set # CONFIG_ALPHA_TITAN is not set # CONFIG_ALPHA_WILDFIRE is not set diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/Makefile linux/arch/alpha/kernel/Makefile --- v2.4.8/linux/arch/alpha/kernel/Makefile Fri Feb 9 11:38:01 2001 +++ linux/arch/alpha/kernel/Makefile Sun Aug 12 10:51:41 2001 @@ -32,6 +32,7 @@ obj-$(CONFIG_SMP) += smp.o irq_smp.o obj-$(CONFIG_PCI) += pci.o pci_iommu.o +obj-$(CONFIG_SRM_ENV) += srm_env.o ifdef CONFIG_ALPHA_GENERIC @@ -67,6 +68,7 @@ endif obj-$(CONFIG_ALPHA_DP264) += sys_dp264.o +obj-$(CONFIG_ALPHA_SHARK) += sys_dp264.o obj-$(CONFIG_ALPHA_TITAN) += sys_titan.o ifneq ($(CONFIG_ALPHA_EB64P)$(CONFIG_ALPHA_EB66),) diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/alpha_ksyms.c linux/arch/alpha/kernel/alpha_ksyms.c --- v2.4.8/linux/arch/alpha/kernel/alpha_ksyms.c Wed Jul 25 17:10:17 2001 +++ linux/arch/alpha/kernel/alpha_ksyms.c Sun Aug 12 10:51:41 2001 @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -57,6 +58,11 @@ EXPORT_SYMBOL(probe_irq_mask); EXPORT_SYMBOL(screen_info); EXPORT_SYMBOL(perf_irq); +#ifdef CONFIG_ALPHA_SRM +EXPORT_SYMBOL(callback_getenv); +EXPORT_SYMBOL(callback_setenv); +EXPORT_SYMBOL(callback_save_env); +#endif /* CONFIG_ALPHA_SRM */ /* platform dependent support */ EXPORT_SYMBOL(_inb); diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/irq.c linux/arch/alpha/kernel/irq.c --- v2.4.8/linux/arch/alpha/kernel/irq.c Tue Jul 3 17:08:18 2001 +++ linux/arch/alpha/kernel/irq.c Sun Aug 12 10:38:48 2001 @@ -580,6 +580,9 @@ * SMP cross-CPU interrupts have their own specific * handlers). */ + +#define MAX_ILLEGAL_IRQS 16 + void handle_irq(int irq, struct pt_regs * regs) { @@ -597,9 +600,11 @@ irq_desc_t *desc = irq_desc + irq; struct irqaction * action; unsigned int status; - - if ((unsigned) irq > ACTUAL_NR_IRQS) { + static unsigned int illegal_count=0; + + if ((unsigned) irq > ACTUAL_NR_IRQS && illegal_count < MAX_ILLEGAL_IRQS ) { irq_err_count++; + illegal_count++; printk(KERN_CRIT "device_interrupt: illegal interrupt %d\n", irq); return; diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/osf_sys.c linux/arch/alpha/kernel/osf_sys.c --- v2.4.8/linux/arch/alpha/kernel/osf_sys.c Tue Jul 3 17:08:18 2001 +++ linux/arch/alpha/kernel/osf_sys.c Sun Aug 12 15:04:07 2001 @@ -105,7 +105,7 @@ int error; }; -static int osf_filldir(void *__buf, const char *name, int namlen, off_t offset, +static int osf_filldir(void *__buf, const char *name, int namlen, loff_t offset, ino_t ino, unsigned int d_type) { struct osf_dirent *dirent; diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/pci_iommu.c linux/arch/alpha/kernel/pci_iommu.c --- v2.4.8/linux/arch/alpha/kernel/pci_iommu.c Fri May 25 09:54:50 2001 +++ linux/arch/alpha/kernel/pci_iommu.c Sun Aug 12 10:51:41 2001 @@ -55,9 +55,9 @@ base = arena->dma_base; size = arena->size; if (base + size > 0xfff00000) { - int i = (0xfff00000 - base) >> PAGE_SHIFT; - for (; i < (0x100000 >> PAGE_SHIFT); i++) - arena->ptes[i] = IOMMU_INVALID_PTE; + int i, fixup_start = (0xfff00000 - base) >> PAGE_SHIFT; + for (i= 0; i < (0x100000 >> PAGE_SHIFT); i++) + arena->ptes[fixup_start+i] = IOMMU_INVALID_PTE; } } @@ -354,7 +354,7 @@ Write dma_length of each leader with the combined lengths of the mergable followers. */ -static inline void +static void sg_classify(struct scatterlist *sg, struct scatterlist *end, int virt_ok) { unsigned long next_vaddr; @@ -436,10 +436,7 @@ /* Otherwise, break up the remaining virtually contiguous hunks into individual direct maps. */ - for (sg = leader; sg < end; ++sg) - if (sg->dma_address == 1 || sg->dma_address == -2) - sg->dma_address = 0; - + sg_classify(leader, end, 0); /* Retry. */ return sg_fill(leader, end, out, arena, max_dma); } diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/setup.c linux/arch/alpha/kernel/setup.c --- v2.4.8/linux/arch/alpha/kernel/setup.c Thu May 24 15:20:18 2001 +++ linux/arch/alpha/kernel/setup.c Sun Aug 12 10:38:47 2001 @@ -154,6 +154,7 @@ WEAK(rx164_mv); WEAK(sable_mv); WEAK(sable_gamma_mv); +WEAK(shark_mv); WEAK(sx164_mv); WEAK(takara_mv); WEAK(webbrick_mv); @@ -665,9 +666,10 @@ static char tsunami_names[][16] = { "0", "DP264", "Warhol", "Windjammer", "Monet", "Clipper", - "Goldrush", "Webbrick", "Catamaran" + "Goldrush", "Webbrick", "Catamaran", "Brisbane", "Melbourne", + "Flying Clipper", "Shark" }; -static int tsunami_indices[] = {0,1,2,3,4,5,6,7,8}; +static int tsunami_indices[] = {0,1,2,3,4,5,6,7,8,9,10,11,12}; static struct alpha_machine_vector * __init get_sysvec(long type, long variation, long cpu) @@ -767,6 +769,10 @@ &dp264_mv, /* goldrush */ &webbrick_mv, /* webbrick */ &dp264_mv, /* catamaran */ + NULL, /* brisbane? */ + NULL, /* melbourne? */ + NULL, /* flying clipper? */ + &shark_mv, /* shark */ }; /* ??? Do we need to distinguish between Rawhides? */ @@ -880,6 +886,7 @@ &rx164_mv, &sable_mv, &sable_gamma_mv, + &shark_mv, &sx164_mv, &takara_mv, &webbrick_mv, diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/smp.c linux/arch/alpha/kernel/smp.c --- v2.4.8/linux/arch/alpha/kernel/smp.c Tue Jul 3 17:08:18 2001 +++ linux/arch/alpha/kernel/smp.c Sun Aug 12 10:51:41 2001 @@ -211,13 +211,14 @@ * We are not told how much cache there is, so we have to guess. */ static void __init -smp_tune_scheduling (void) +smp_tune_scheduling (int cpuid) { struct percpu_struct *cpu; unsigned long on_chip_cache; unsigned long freq; - cpu = (struct percpu_struct*)((char*)hwrpb + hwrpb->processor_offset); + cpu = (struct percpu_struct*)((char*)hwrpb + hwrpb->processor_offset + + cpuid * hwrpb->processor_size); switch (cpu->type) { case EV45_CPU: @@ -599,7 +600,7 @@ current->processor = boot_cpuid; smp_store_cpu_info(boot_cpuid); - smp_tune_scheduling(); + smp_tune_scheduling(boot_cpuid); smp_setup_percpu_timer(boot_cpuid); init_idle(); diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/srm_env.c linux/arch/alpha/kernel/srm_env.c --- v2.4.8/linux/arch/alpha/kernel/srm_env.c Wed Dec 31 16:00:00 1969 +++ linux/arch/alpha/kernel/srm_env.c Sun Aug 12 10:51:41 2001 @@ -0,0 +1,219 @@ +/* + * srm_env.c - Access to SRC environment variables through + * the linux procfs + * + * (C)2001, Jan-Benedict Glaw + * + * This driver is at all a modified version of Erik Mouw's + * ./linux/Documentation/DocBook/procfs_example.c, so: thanky + * you, erik! He can be reached via email at + * . It is based on an idea + * provided by DEC^WCompaq's "Jumpstart" CD. They included + * a patch like this as well. Thanks for idea! + * + * + * This software has been developed while working on the LART + * computing board (http://www.lart.tudelft.nl/). The + * development has been sponsored by the Mobile Multi-media + * Communications (http://www.mmc.tudelft.nl/) and Ubiquitous + * Communications (http://www.ubicom.tudelft.nl/) projects. + * + * This program is free software; you can redistribute + * it and/or modify it under the terms of the GNU General + * Public License as published by the Free Software + * Foundation version 2. + * + * This program is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#define DIRNAME "srm_environment" /* Subdir in /proc/ */ +#define VERSION "0.0.1" /* Module version */ +#define NAME "srm_env" /* Module name */ +#define DEBUG + +MODULE_AUTHOR("Jan-Benedict Glaw "); +MODULE_DESCRIPTION("Accessing Alpha SRM environment through procfs interface"); +EXPORT_NO_SYMBOLS; + +typedef struct _srm_env { + char *name; + unsigned long id; + struct proc_dir_entry *proc_entry; +} srm_env_t; + +static struct proc_dir_entry *directory; +static srm_env_t srm_entries[] = { + { "auto_action", ENV_AUTO_ACTION }, + { "boot_dev", ENV_BOOT_DEV }, + { "bootdef_dev", ENV_BOOTDEF_DEV }, + { "booted_dev", ENV_BOOTED_DEV }, + { "boot_file", ENV_BOOT_FILE }, + { "booted_file", ENV_BOOTED_FILE }, + { "boot_osflags", ENV_BOOT_OSFLAGS }, + { "booted_osflags", ENV_BOOTED_OSFLAGS }, + { "boot_reset", ENV_BOOT_RESET }, + { "dump_dev", ENV_DUMP_DEV }, + { "enable_audit", ENV_ENABLE_AUDIT }, + { "license", ENV_LICENSE }, + { "char_set", ENV_CHAR_SET }, + { "language", ENV_LANGUAGE }, + { "tty_dev", ENV_TTY_DEV }, + { NULL, 0 }, +}; + +static int srm_env_read(char *page, char **start, off_t off, int count, + int *eof, void *data) +{ + int nbytes; + unsigned long ret; + srm_env_t *entry; + + MOD_INC_USE_COUNT; + + if(off != 0) { + MOD_DEC_USE_COUNT; + return -EFAULT; + } + + entry = (srm_env_t *)data; + ret = callback_getenv(entry->id, page, count); + + if((ret >> 61) == 0) + nbytes = (int)ret; + else + nbytes = -EFAULT; + + MOD_DEC_USE_COUNT; + + return nbytes; +} + + +static int srm_env_write(struct file *file, const char *buffer, + unsigned long count, void *data) +{ +#define BUFLEN 512 + int nbytes; + srm_env_t *entry; + char buf[BUFLEN]; + unsigned long ret1, ret2; + + MOD_INC_USE_COUNT; + + entry = (srm_env_t *) data; + + nbytes = strlen(buffer) + 1; + if(nbytes > BUFLEN) { + MOD_DEC_USE_COUNT; + return -ENOMEM; + } + + //memcpy(aligned_buffer, buffer, nbytes) + + if(copy_from_user(buf, buffer, count)) { + MOD_DEC_USE_COUNT; + return -EFAULT; + } + buf[count] = 0x00; + + ret1 = callback_setenv(entry->id, buf, count); + if((ret1 >> 61) == 0) { + do + ret2 = callback_save_env(); + while((ret2 >> 61) == 1); + nbytes = (int)ret1; + } else + nbytes = -EFAULT; + + MOD_DEC_USE_COUNT; + + return nbytes; +} + +static void srm_env_cleanup(void) +{ + srm_env_t *entry; + + if(directory) { + entry = srm_entries; + while(entry->name != NULL && entry->id != 0) { + if(entry->proc_entry) { + remove_proc_entry(entry->name, directory); + entry->proc_entry = NULL; + } + entry++; + } + remove_proc_entry(DIRNAME, NULL); + } + + return; +} + +static int __init srm_env_init(void) +{ + srm_env_t *entry; + + if(!alpha_using_srm) { + printk(KERN_INFO "%s: This Alpha system doesn't " + "know about SRM...\n", __FUNCTION__); + return -ENODEV; + } + + directory = proc_mkdir(DIRNAME, NULL); + if(directory == NULL) + return -ENOMEM; + + directory->owner = THIS_MODULE; + + /* Now create all the nodes... */ + entry = srm_entries; + while(entry->name != NULL && entry->id != 0) { + entry->proc_entry = create_proc_entry(entry->name, 0644, + directory); + if(entry->proc_entry == NULL) + goto cleanup; + entry->proc_entry->data = entry; + entry->proc_entry->read_proc = srm_env_read; + entry->proc_entry->write_proc = srm_env_write; + entry->proc_entry->owner = THIS_MODULE; + entry++; + } + + printk(KERN_INFO "%s: version %s loaded successfully\n", NAME, + VERSION); + return 0; + +cleanup: + srm_env_cleanup(); + return -ENOMEM; +} + + +static void __exit srm_env_exit(void) +{ + srm_env_cleanup(); + printk(KERN_INFO "%s: unloaded successfully\n", NAME); + return; +} + +module_init(srm_env_init); +module_exit(srm_env_exit); + diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/sys_dp264.c linux/arch/alpha/kernel/sys_dp264.c --- v2.4.8/linux/arch/alpha/kernel/sys_dp264.c Tue Jul 3 17:08:18 2001 +++ linux/arch/alpha/kernel/sys_dp264.c Sun Aug 12 10:38:47 2001 @@ -5,6 +5,10 @@ * Copyright (C) 1996, 1999 Jay A Estabrook * Copyright (C) 1998, 1999 Richard Henderson * + * Modified by Christopher C. Chimelis, 2001 to + * add support for the addition of Shark to the + * Tsunami family. + * * Code supporting the DP264 (EV6+TSUNAMI). */ @@ -632,6 +636,34 @@ struct alpha_machine_vector clipper_mv __initmv = { vector_name: "Clipper", + DO_EV6_MMU, + DO_DEFAULT_RTC, + DO_TSUNAMI_IO, + DO_TSUNAMI_BUS, + machine_check: tsunami_machine_check, + max_dma_address: ALPHA_MAX_DMA_ADDRESS, + min_io_address: DEFAULT_IO_BASE, + min_mem_address: DEFAULT_MEM_BASE, + + nr_irqs: 64, + device_interrupt: dp264_device_interrupt, + + init_arch: tsunami_init_arch, + init_irq: clipper_init_irq, + init_rtc: common_init_rtc, + init_pci: common_init_pci, + kill_arch: tsunami_kill_arch, + pci_map_irq: clipper_map_irq, + pci_swizzle: common_swizzle, +}; + +/* Sharks strongly resemble Clipper, at least as far + * as interrupt routing, etc, so we're using the + * same functions as Clipper does + */ + +struct alpha_machine_vector shark_mv __initmv = { + vector_name: "Shark", DO_EV6_MMU, DO_DEFAULT_RTC, DO_TSUNAMI_IO, diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/time.c linux/arch/alpha/kernel/time.c --- v2.4.8/linux/arch/alpha/kernel/time.c Wed Jul 25 17:10:17 2001 +++ linux/arch/alpha/kernel/time.c Sun Aug 12 10:38:48 2001 @@ -300,7 +300,9 @@ /* PC-like is standard; used for year < 20 || year >= 70 */ epoch = 1900; - if (year >= 20 && year < 48) + if (year < 20) + epoch = 2000; + else if (year >= 20 && year < 48) /* NT epoch */ epoch = 1980; else if (year >= 48 && year < 70) diff -u --recursive --new-file v2.4.8/linux/arch/alpha/kernel/traps.c linux/arch/alpha/kernel/traps.c --- v2.4.8/linux/arch/alpha/kernel/traps.c Wed Jul 25 17:10:17 2001 +++ linux/arch/alpha/kernel/traps.c Sun Aug 12 10:35:37 2001 @@ -197,11 +197,11 @@ regs.pc -= 4; /* make pc point to former bpt */ } send_sig(SIGTRAP, current, 1); - break; + return; case 1: /* bugcheck */ send_sig(SIGTRAP, current, 1); - break; + return; case 2: /* gentrap */ /* @@ -216,7 +216,7 @@ case GEN_FLTDIV: case GEN_FLTUND: case GEN_FLTINV: case GEN_FLTINE: case GEN_ROPRAND: send_sig(SIGFPE, current, 1); - break; + return; case GEN_DECOVF: case GEN_DECDIV: @@ -236,14 +236,10 @@ case GEN_SUBRNG6: case GEN_SUBRNG7: send_sig(SIGTRAP, current, 1); - break; + return; } break; - case 3: /* FEN fault */ - send_sig(SIGILL, current, 1); - break; - case 4: /* opDEC */ if (implver() == IMPLVER_EV4) { /* EV4 does not implement anything except normal @@ -252,12 +248,12 @@ if (alpha_fp_emul(regs.pc-4)) return; } - send_sig(SIGILL, current, 1); - break; - - default: - panic("do_entIF: unexpected instruction-fault type"); + /* fallthrough as illegal instruction .. */ + case 3: /* FEN fault */ + case 5: /* illoc */ + default: /* unexpected instruction-fault type */ } + send_sig(SIGILL, current, 1); } /* There is an ifdef in the PALcode in MILO that enables a diff -u --recursive --new-file v2.4.8/linux/arch/alpha/mm/numa.c linux/arch/alpha/mm/numa.c --- v2.4.8/linux/arch/alpha/mm/numa.c Thu May 24 15:20:18 2001 +++ linux/arch/alpha/mm/numa.c Sun Aug 12 10:38:48 2001 @@ -260,9 +260,9 @@ phys_to_virt(PFN_PHYS(max_low_pfn))); initrd_start = initrd_end = 0; } else { - /* Assume the initrd to be in the first node */ - reserve_bootmem_node(NODE_DATA(nid), virt_to_phys((void *)initrd_start), - INITRD_SIZE); + reserve_bootmem_node(NODE_DATA(KVADDR_TO_NID(initrd_start)), + virt_to_phys((void *)initrd_start), + INITRD_SIZE); } } #endif /* CONFIG_BLK_DEV_INITRD */ diff -u --recursive --new-file v2.4.8/linux/arch/arm/Makefile linux/arch/arm/Makefile --- v2.4.8/linux/arch/arm/Makefile Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/Makefile Sun Aug 12 11:13:59 2001 @@ -22,14 +22,18 @@ # Select CPU dependent flags. Note that order of declaration is important; # the options further down the list override previous items. # -apcs-y := -apcs-$(CONFIG_CPU_26) :=-mcpu=arm3 -Os +# Note! For APCS-26 YOU MUST HAVE AN APCS-26 LIBGCC.A +# +apcs-y :=-mapcs-32 +apcs-$(CONFIG_CPU_26) :=-mapcs-26 -mcpu=arm3 -Os +# This selects which instruction set is used. arch-y := arch-$(CONFIG_CPU_32v3) :=-march=armv3 arch-$(CONFIG_CPU_32v4) :=-march=armv4 arch-$(CONFIG_CPU_32v5) :=-march=armv5 +# This selects how we optimise for the processor. tune-y := tune-$(CONFIG_CPU_ARM610) :=-mtune=arm610 tune-$(CONFIG_CPU_ARM710) :=-mtune=arm710 @@ -38,8 +42,8 @@ tune-$(CONFIG_CPU_SA110) :=-mtune=strongarm110 tune-$(CONFIG_CPU_SA1100) :=-mtune=strongarm1100 -CFLAGS += -mapcs-32 $(apcs-y) $(arch-y) $(tune-y) -mshort-load-bytes -msoft-float -AFLAGS += -mapcs-32 $(apcs-y) $(arch-y) -mno-fpu +CFLAGS +=$(apcs-y) $(arch-y) $(tune-y) -mshort-load-bytes -msoft-float +AFLAGS +=$(apcs-y) $(arch-y) -mno-fpu LIBGCC := $(shell $(CC) $(CFLAGS) --print-libgcc-file-name) diff -u --recursive --new-file v2.4.8/linux/arch/arm/boot/compressed/head.S linux/arch/arm/boot/compressed/head.S --- v2.4.8/linux/arch/arm/boot/compressed/head.S Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/boot/compressed/head.S Sun Aug 12 11:13:59 2001 @@ -102,19 +102,24 @@ 1: mov r7, r1 @ save architecture ID mov r8, #0 @ save r0 +#ifndef __ARM_ARCH_2__ /* * Booting from Angel - need to enter SVC mode and disable * FIQs/IRQs (numeric definitions from angel arm.h source). * We only do this if we were in user mode on entry. */ - mrs r0, cpsr @ get current mode - tst r0, #3 @ not user? + mrs r2, cpsr @ get current mode + tst r2, #3 @ not user? bne not_angel mov r0, #0x17 @ angel_SWIreason_EnterSVC swi 0x123456 @ angel_SWI_ARM -not_angel: mrs r0, cpsr @ turn off interrupts to - orr r0, r0, #0xc0 @ prevent angel from running - msr cpsr_c, r0 +not_angel: + mrs r2, cpsr @ turn off interrupts to + orr r2, r2, #0xc0 @ prevent angel from running + msr cpsr_c, r2 +#else + teqp pc, #0x0c000003 @ turn off interrupts +#endif /* * Note that some cache flushing and other stuff may diff -u --recursive --new-file v2.4.8/linux/arch/arm/boot/compressed/misc.c linux/arch/arm/boot/compressed/misc.c --- v2.4.8/linux/arch/arm/boot/compressed/misc.c Thu Oct 21 12:15:36 1999 +++ linux/arch/arm/boot/compressed/misc.c Sun Aug 12 11:13:59 2001 @@ -73,7 +73,7 @@ *u.ucp++ = 0; } -extern __inline__ __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src, +static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src, size_t __n) { int i = 0; diff -u --recursive --new-file v2.4.8/linux/arch/arm/boot/compressed/ofw-shark.c linux/arch/arm/boot/compressed/ofw-shark.c --- v2.4.8/linux/arch/arm/boot/compressed/ofw-shark.c Thu Apr 12 12:03:50 2001 +++ linux/arch/arm/boot/compressed/ofw-shark.c Sun Aug 12 11:13:59 2001 @@ -20,14 +20,20 @@ create_params (unsigned long *buffer) { /* Is there a better address? Also change in mach-shark/arch.c */ - struct param_struct *params = (struct param_struct *) 0x08003000; + struct tag *tag = (struct tag *) 0x08003000; int j,i,m,k,nr_banks,size; + unsigned char *c; - for (j=0;j<256;j++) params->u1.unused[j]=0; + /* Head of the taglist */ + tag->hdr.tag = ATAG_CORE; + tag->hdr.size = tag_size(tag_core); + tag->u.core.flags = FLAG_READONLY; + tag->u.core.pagesize = PAGE_SIZE; + tag->u.core.rootdev = 0; + /* Build up one tagged block for each memory region */ size=0; nr_banks=(unsigned int) buffer[0]; - if (nr_banks > NR_BANKS) nr_banks = NR_BANKS; for (j=0;ju1.s.pages_in_bank[j]=buffer[2*k+1]|(buffer[2*k+2]/PAGE_SIZE); + tag = tag_next(tag); + tag->hdr.tag = ATAG_MEM; + tag->hdr.size = tag_size(tag_mem32); + tag->u.mem.size = buffer[2*k+2]; + tag->u.mem.start = buffer[2*k+1]; + size += buffer[2*k+2]; - buffer[2*k+1]=0xffffffff; /* mark as copied */ + buffer[2*k+1]=0xffffffff; /* mark as copied */ } - params->u1.s.page_size = PAGE_SIZE; - params->u1.s.nr_pages = size/PAGE_SIZE; - params->u1.s.flags = FLAG_READONLY; + /* The command line */ + tag = tag_next(tag); + tag->hdr.tag = ATAG_CMDLINE; - /* Copy over the bootargs */ - for (j=0;j<128/4;j++) { - ((unsigned long *) params->commandline)[j]=buffer[33+j]; - } + c=(unsigned char *)(&buffer[34]); + j=0; + while (*c) tag->u.cmdline.cmdline[j++]=*c++; + + tag->u.cmdline.cmdline[j]=0; + tag->hdr.size = (j + 7 + sizeof(struct tag_header)) >> 2; + + /* Hardware revision */ + tag = tag_next(tag); + tag->hdr.tag = ATAG_REVISION; + tag->hdr.size = tag_size(tag_revision); + tag->u.revision.rev = ((unsigned char) buffer[33])-'0'; + + /* End of the taglist */ + tag = tag_next(tag); + tag->hdr.tag = 0; + tag->hdr.size = 0; } @@ -165,7 +186,7 @@ asmlinkage void ofw_init(ofw_handle_t o, int *nomr, int *pointer) { int phandle,i,mem_len,buffer[32]; - char temp[12]; + char temp[15]; temp[0]='/'; temp[1]='m'; @@ -212,6 +233,26 @@ mem_len = OF_getproplen(o,phandle, temp); OF_getprop(o,phandle, temp, buffer, mem_len); - for (i=0; i<=mem_len/4; i++) pointer[i+32]=buffer[i]; - + if (mem_len > 128) mem_len=128; + for (i=0; i<=mem_len/4; i++) pointer[i+33]=buffer[i]; + pointer[i+33]=0; + + temp[0]='/'; + temp[1]='\0'; + phandle=OF_finddevice(o,temp); + temp[0]='b'; + temp[1]='a'; + temp[2]='n'; + temp[3]='n'; + temp[4]='e'; + temp[5]='r'; + temp[6]='-'; + temp[7]='n'; + temp[8]='a'; + temp[9]='m'; + temp[10]='e'; + temp[11]='\0'; + mem_len = OF_getproplen(o,phandle, temp); + OF_getprop(o,phandle, temp, buffer, mem_len); + (unsigned char) pointer[32] = ((unsigned char *) buffer)[mem_len-2]; } diff -u --recursive --new-file v2.4.8/linux/arch/arm/config.in linux/arch/arm/config.in --- v2.4.8/linux/arch/arm/config.in Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/config.in Sun Aug 12 17:36:24 2001 @@ -31,17 +31,19 @@ mainmenu_option next_comment comment 'System Type' -choice 'ARM system type' \ - "Archimedes/A5000 CONFIG_ARCH_ARCA5K \ +choice 'ARM system type' \ + "Anakin CONFIG_ARCH_ANAKIN \ + Archimedes/A5000 CONFIG_ARCH_ARCA5K \ Cirrus-CL-PS7500FE CONFIG_ARCH_CLPS7500 \ + CLPS711x/EP721x-based CONFIG_ARCH_CLPS711X \ Co-EBSA285 CONFIG_ARCH_CO285 \ EBSA-110 CONFIG_ARCH_EBSA110 \ - LinkUp-L7200 CONFIG_ARCH_L7200 \ FootBridge CONFIG_ARCH_FOOTBRIDGE \ Integrator CONFIG_ARCH_INTEGRATOR \ + LinkUp-L7200 CONFIG_ARCH_L7200 \ RiscPC CONFIG_ARCH_RPC \ SA1100-based CONFIG_ARCH_SA1100 \ - CLPS711x/EP721x-based CONFIG_ARCH_CLPS711X" RiscPC + Shark CONFIG_ARCH_SHARK" RiscPC mainmenu_option next_comment comment 'Archimedes/A5000 Implementations' @@ -68,20 +70,37 @@ dep_bool ' Include support for Neponset' CONFIG_ASSABET_NEPONSET $CONFIG_SA1100_ASSABET dep_bool ' Brutus' CONFIG_SA1100_BRUTUS $CONFIG_ARCH_SA1100 dep_bool ' CerfBoard' CONFIG_SA1100_CERF $CONFIG_ARCH_SA1100 +if [ "$CONFIG_SA1100_CERF" = "y" ]; then + bool ' 32MB Cerf support' CONFIG_SA1100_CERF_32MB +fi dep_bool ' Compaq iPAQ H3600 (Bitsy)' CONFIG_SA1100_BITSY $CONFIG_ARCH_SA1100 #dep_bool ' Empeg' CONFIG_SA1100_EMPEG $CONFIG_ARCH_SA1100 -#dep_bool ' Itsy' CONFIG_SA1100_ITSY $CONFIG_ARCH_SA1100 +dep_bool ' Extenex HandHeld Theater (Squashtail)' CONFIG_SA1100_EXTENEX1 $CONFIG_ARCH_SA1100 +if [ "$CONFIG_SA1100_EXTENEX1" = "y" ]; then + bool ' Support 16 MB of DRAM (not just 8)' CONFIG_SA1100_EXTENEX1_16MB +fi +dep_bool ' FlexaNet' CONFIG_SA1100_FLEXANET $CONFIG_ARCH_SA1100 +dep_bool ' FreeBird-v1.1' CONFIG_SA1100_FREEBIRD $CONFIG_ARCH_SA1100 +dep_bool ' GraphicsClient Plus' CONFIG_SA1100_GRAPHICSCLIENT $CONFIG_ARCH_SA1100 +dep_bool ' HP Jornada 720' CONFIG_SA1100_JORNADA720 $CONFIG_ARCH_SA1100 +dep_bool ' HuW WebPanel' CONFIG_SA1100_HUW_WEBPANEL $CONFIG_ARCH_SA1100 +dep_bool ' Itsy' CONFIG_SA1100_ITSY $CONFIG_ARCH_SA1100 dep_bool ' LART' CONFIG_SA1100_LART $CONFIG_ARCH_SA1100 -#dep_bool ' PLEB' CONFIG_SA1100_PLEB $CONFIG_ARCH_SA1100 -dep_bool ' GraphicsClient' CONFIG_SA1100_GRAPHICSCLIENT $CONFIG_ARCH_SA1100 dep_bool ' nanoEngine' CONFIG_SA1100_NANOENGINE $CONFIG_ARCH_SA1100 -dep_bool ' Victor' CONFIG_SA1100_VICTOR $CONFIG_ARCH_SA1100 +dep_bool ' OmniMeter' CONFIG_SA1100_OMNIMETER $CONFIG_ARCH_SA1100 +dep_bool ' Pangolin' CONFIG_SA1100_PANGOLIN $CONFIG_ARCH_SA1100 +dep_bool ' PLEB' CONFIG_SA1100_PLEB $CONFIG_ARCH_SA1100 dep_bool ' Sherman' CONFIG_SA1100_SHERMAN $CONFIG_ARCH_SA1100 +dep_bool ' Simpad' CONFIG_SA1100_SIMPAD $CONFIG_ARCH_SA1100 +dep_bool ' Tulsa' CONFIG_SA1100_PFS168 $CONFIG_ARCH_SA1100 +dep_bool ' Victor' CONFIG_SA1100_VICTOR $CONFIG_ARCH_SA1100 dep_bool ' XP860' CONFIG_SA1100_XP860 $CONFIG_ARCH_SA1100 -dep_bool ' Pangolin' CONFIG_SA1100_PANGOLIN $CONFIG_ARCH_SA1100 +dep_bool ' Yopy' CONFIG_SA1100_YOPY $CONFIG_ARCH_SA1100 # Determine if SA1111 support is required if [ "$CONFIG_ASSABET_NEPONSET" = "y" -o \ + "$CONFIG_SA1100_JORNADA720" = "y" -o \ + "$CONFIG_SA1100_PFS168" = "y" -o \ "$CONFIG_SA1100_XP860" = "y" ]; then define_bool CONFIG_SA1111 y fi @@ -148,7 +167,7 @@ "$CONFIG_ARCH_TBOX" = "y" -o "$CONFIG_ARCH_SHARK" = "y" -o \ "$CONFIG_ARCH_NEXUSPCI" = "y" -o "$CONFIG_ARCH_CLPS711X" = "y" -o \ "$CONFIG_ARCH_INTEGRATOR" = "y" -o "$CONFIG_ARCH_SA1100" = "y" -o \ - "$CONFIG_ARCH_L7200" = "y" ]; then + "$CONFIG_ARCH_L7200" = "y" -o "$CONFIG_ARCH_ANAKIN" = "y" ]; then define_bool CONFIG_CPU_32v4 y else define_bool CONFIG_CPU_32v4 n @@ -219,7 +238,7 @@ # SA110 if [ "$CONFIG_ARCH_EBSA110" = "y" -o "$CONFIG_FOOTBRIDGE" = "y" -o \ "$CONFIG_ARCH_TBOX" = "y" -o "$CONFIG_ARCH_SHARK" = "y" -o \ - "$CONFIG_ARCH_NEXUSPCI" = "y" ]; then + "$CONFIG_ARCH_NEXUSPCI" = "y" -o "$CONFIG_ARCH_ANAKIN" = "y" ]; then define_bool CONFIG_CPU_SA110 y else if [ "$CONFIG_ARCH_RPC" = "y" ]; then @@ -252,9 +271,6 @@ mainmenu_option next_comment comment 'General setup' -comment 'Please ensure that you have read the help on the next option' -bool 'Load kernel using Angel Debug Monitor' CONFIG_ANGELBOOT - # Now handle the bus types if [ "$CONFIG_ARCH_FTVPCI" = "y" -o \ "$CONFIG_ARCH_SHARK" = "y" -o \ @@ -272,7 +288,8 @@ if [ "$CONFIG_FOOTBRIDGE_HOST" = "y" -o \ "$CONFIG_ARCH_SHARK" = "y" -o \ "$CONFIG_ARCH_CLPS7500" = "y" -o \ - "$CONFIG_ARCH_EBSA110" = "y" ]; then + "$CONFIG_ARCH_EBSA110" = "y" -o \ + "$CONFIG_ARCH_SA1100" = "y" ]; then define_bool CONFIG_ISA y else define_bool CONFIG_ISA n @@ -285,6 +302,11 @@ define_bool CONFIG_ISA_DMA n fi +if [ "$CONFIG_ARCH_SA1100" = "y" -o \ + "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then + dep_bool 'Support CPU clock change (EXPERIMENTAL)' CONFIG_CPU_FREQ $CONFIG_EXPERIMENTAL +fi + source drivers/pci/Config.in bool 'Support hot-pluggable devices' CONFIG_HOTPLUG if [ "$CONFIG_HOTPLUG" = "y" ]; then @@ -312,8 +334,8 @@ "$CONFIG_ARCH_CLPS7500" = "y" -o \ "$CONFIG_ARCH_PERSONAL_SERVER" = "y" -o \ "$CONFIG_ARCH_CATS" = "y" -o \ - "$CONFIG_ARCH_INTEGRATOR" = "y" -o \ - "$CONFIG_ARCH_P720T" = "y" ]; then + "$CONFIG_ARCH_P720T" = "y" -o \ + "$CONFIG_ARCH_ANAKIN" = "y" ]; then string 'Default kernel command string' CONFIG_CMDLINE "" fi if [ "$CONFIG_ARCH_NETWINDER" = "y" -o \ @@ -348,7 +370,11 @@ endmenu source drivers/parport/Config.in -source drivers/mtd/Config.in + +if [ "$CONFIG_ALIGNMENT_TRAP" = "y" ]; then + source drivers/mtd/Config.in +fi + source drivers/pnp/Config.in source drivers/block/Config.in source drivers/md/Config.in @@ -403,7 +429,7 @@ source drivers/ieee1394/Config.in -source drivers/message/i2o/Config.in +source drivers/i2o/Config.in mainmenu_option next_comment comment 'ISDN subsystem' @@ -446,6 +472,9 @@ define_bool CONFIG_KMI_KEYB y define_bool CONFIG_KMI_MOUSE y fi + if [ "$CONFIG_ARCH_L7200" = "y" ]; then + define_bool CONFIG_L7200_KEYB y + fi # Do we use the PC-type keyboard map? if [ "$CONFIG_FOOTBRIDGE_HOST" = "y" -o \ @@ -454,13 +483,13 @@ "$CONFIG_ARCH_INTEGRATOR" = "y" -o \ "$CONFIG_ARCH_TBOX" = "y" -o \ "$CONFIG_ARCH_CLPS7500" = "y" -o \ - "$CONFIG_ARCH_P720T" = "y" ]; then + "$CONFIG_ARCH_P720T" = "y" -o \ + "$CONFIG_ARCH_ANAKIN" = "y" ]; then define_bool CONFIG_PC_KEYMAP y fi if [ "$CONFIG_ARCH_ACORN" != "y" -a "$CONFIG_ARCH_EBSA110" != "y" ]; then bool 'VGA text console' CONFIG_VGA_CONSOLE fi - bool 'Support Frame buffer devices' CONFIG_FB source drivers/video/Config.in endmenu fi @@ -469,6 +498,7 @@ "$CONFIG_ARCH_CLPS7500" = "y" -o \ "$CONFIG_ARCH_TBOX" = "y" -o \ "$CONFIG_ARCH_SHARK" = "y" -o \ + "$CONFIG_ARCH_SA1100" = "y" -o \ "$CONFIG_PCI" = "y" ]; then mainmenu_option next_comment comment 'Sound' diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/anakin linux/arch/arm/def-configs/anakin --- v2.4.8/linux/arch/arm/def-configs/anakin Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/anakin Sun Aug 12 11:13:59 2001 @@ -0,0 +1,465 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_CLPS711X is not set +CONFIG_ARCH_ANAKIN=y + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +CONFIG_CPU_SA110=y +# CONFIG_CPU_SA1100 is not set +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +# CONFIG_SYSVIPC is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_SYSCTL is not set +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="" +# CONFIG_ALIGNMENT_TRAP is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +# CONFIG_NETDEVICES is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=y + +# +# IrDA protocols +# +# CONFIG_IRLAN is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=y +# CONFIG_IRPORT_SIR is not set + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_SA1100_FIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_ANAKIN=y +CONFIG_SERIAL_ANAKIN_CONSOLE=y +CONFIG_ANAKIN_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_ANAKIN=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_UNIX98_PTYS is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +CONFIG_FB_ANAKIN=y +# CONFIG_FB_E1355 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/assabet linux/arch/arm/def-configs/assabet --- v2.4.8/linux/arch/arm/def-configs/assabet Mon Nov 27 17:07:59 2000 +++ linux/arch/arm/def-configs/assabet Sun Aug 12 11:13:59 2001 @@ -2,8 +2,12 @@ # Automatically generated make config: don't edit # CONFIG_ARM=y +# CONFIG_EISA is not set # CONFIG_SBUS is not set +# CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # # Code maturity level options @@ -21,22 +25,37 @@ # # System Type # +# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_RPC is not set CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set # # Archimedes/A5000 Implementations # # +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# # Footbridge Implementations # +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set # # SA11x0 Implementations @@ -46,16 +65,32 @@ # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set # CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set # CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_PANGOLIN is not set -CONFIG_ANGELBOOT=y -CONFIG_SA1100_FREQUENCY_SCALE=y -# CONFIG_SA1100_VOLTAGE_SCALE is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -66,9 +101,17 @@ # # Processor Type # +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set # # General setup @@ -76,29 +119,33 @@ # CONFIG_PCI is not set # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set -CONFIG_PC_KEYMAP=y +CONFIG_CPU_FREQ=y CONFIG_HOTPLUG=y # # PCMCIA/CardBus support # CONFIG_PCMCIA=y -# CONFIG_PCMCIA_DEBUG is not set -CONFIG_SA1100_PCMCIA=y -CONFIG_VIRTUAL_BUS=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_NWFPE=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set # CONFIG_BINFMT_AOUT is not set CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set +CONFIG_PM=y +# CONFIG_APM is not set # CONFIG_ARTHUR is not set -CONFIG_CMDLINE="keepinitrd" +CONFIG_CMDLINE="" +# CONFIG_PFS168_CMDLINE is not set CONFIG_LEDS=y CONFIG_LEDS_TIMER=y CONFIG_LEDS_CPU=y @@ -112,7 +159,94 @@ # # Memory Technology Devices (MTD) # -# CONFIG_MTD is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +CONFIG_MTD_SA1100_REDBOOT_PARTITIONS=y +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set # # Plug and Play configuration @@ -127,19 +261,24 @@ # CONFIG_BLK_DEV_XD is not set # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set +CONFIG_BLK_DEV_LOOP=m # CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_LVM is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set # CONFIG_BLK_DEV_MD is not set # CONFIG_MD_LINEAR is not set # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y -# CONFIG_BLK_DEV_FLASH is not set +# CONFIG_BLK_DEV_LVM is not set # # Networking options @@ -171,6 +310,7 @@ # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_FASTROUTE is not set @@ -194,18 +334,20 @@ # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set # CONFIG_NET_ISA is not set # CONFIG_NET_PCI is not set # CONFIG_NET_POCKET is not set @@ -213,11 +355,15 @@ # # Ethernet (1000 Mbit) # -# CONFIG_YELLOWFIN is not set # CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set +# CONFIG_PLIP is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set @@ -253,7 +399,6 @@ # CONFIG_ARCNET_COM20020_CS is not set # CONFIG_PCMCIA_IBMTR is not set # CONFIG_NET_PCMCIA_RADIO is not set -CONFIG_PCMCIA_NETCARD=y # # Amateur Radio support @@ -263,7 +408,41 @@ # # IrDA (infrared) support # -# CONFIG_IRDA is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +# CONFIG_IRNET is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m # # ATA/IDE/MFM/RLL support @@ -328,6 +507,11 @@ # CONFIG_ISDN is not set # +# Input core support +# +# CONFIG_INPUT is not set + +# # Character devices # CONFIG_VT=y @@ -335,13 +519,31 @@ # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +CONFIG_SERIAL_8250=m +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_AUDIO_UCB1200 is not set +CONFIG_ADC_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set # # I2C support @@ -371,6 +573,7 @@ # CONFIG_INTEL_RNG is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set +CONFIG_SA1100_RTC=y # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set @@ -381,7 +584,15 @@ # CONFIG_FTAPE is not set # CONFIG_AGP is not set # CONFIG_DRM is not set -# CONFIG_PCMCIA_SERIAL is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set # # File systems @@ -389,6 +600,8 @@ # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set @@ -399,12 +612,17 @@ # CONFIG_UMSDOS_FS is not set # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set +CONFIG_JFFS_FS=m +CONFIG_JFFS_FS_VERBOSE=0 +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 # CONFIG_CRAMFS is not set +CONFIG_TMPFS=y # CONFIG_RAMFS is not set # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set # CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -418,7 +636,6 @@ # CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set @@ -443,8 +660,6 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set @@ -459,11 +674,13 @@ # CONFIG_MAC_PARTITION is not set CONFIG_MSDOS_PARTITION=y # CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set CONFIG_NLS=y # @@ -485,11 +702,13 @@ # CONFIG_NLS_CODEPAGE_865 is not set # CONFIG_NLS_CODEPAGE_866 is not set # CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set # CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set # CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set # CONFIG_NLS_ISO8859_1 is not set # CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_3 is not set @@ -497,27 +716,31 @@ # CONFIG_NLS_ISO8859_5 is not set # CONFIG_NLS_ISO8859_6 is not set # CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set # CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set # CONFIG_NLS_ISO8859_14 is not set # CONFIG_NLS_ISO8859_15 is not set # CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_UTF8 is not set # # Console drivers # +CONFIG_PC_KEYMAP=y # CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y # # Frame-buffer support # CONFIG_FB=y CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set # CONFIG_FB_CYBER2000 is not set CONFIG_FB_SA1100=y -# CONFIG_FB_MQ200 is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB2=y @@ -536,20 +759,26 @@ # Sound # CONFIG_SOUND=y -CONFIG_SOUND_UDA1341=y -# CONFIG_SOUND_SA1100_SSP is not set +CONFIG_SOUND_ASSABET_UDA1341=y +# CONFIG_SOUND_BITSY_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set # CONFIG_SOUND_ES1371 is not set # CONFIG_SOUND_ESSSOLO1 is not set # CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set # CONFIG_SOUND_OSS is not set # CONFIG_SOUND_TVMIXER is not set @@ -559,11 +788,19 @@ # CONFIG_USB is not set # +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# # Kernel hacking # -CONFIG_FRAME_POINTER=y +# CONFIG_NO_FRAME_POINTER is not set CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set # CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/bitsy linux/arch/arm/def-configs/bitsy --- v2.4.8/linux/arch/arm/def-configs/bitsy Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/bitsy Sun Aug 12 11:13:59 2001 @@ -0,0 +1,763 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +CONFIG_SA1100_BITSY=y +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +CONFIG_APM=m +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_BOOTLDR_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +# CONFIG_BLK_DEV_IDECS is not set +CONFIG_BLK_DEV_IDECD=m +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=m +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +CONFIG_SERIAL_8250=m +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +# CONFIG_UCB1200 is not set +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set +CONFIG_TOUCHSCREEN_BITSY=y +CONFIG_PROFILER=m +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=m +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=m +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=m +CONFIG_JFFS_FS_VERBOSE=2 +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_CRAMFS=m +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +CONFIG_NFSD=m +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +# CONFIG_FBCON_CFB8 is not set +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_ASSABET_UDA1341 is not set +CONFIG_SOUND_BITSY_UDA1341=m +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/brutus linux/arch/arm/def-configs/brutus --- v2.4.8/linux/arch/arm/def-configs/brutus Mon Nov 27 17:07:59 2000 +++ linux/arch/arm/def-configs/brutus Sun Aug 12 11:13:59 2001 @@ -80,7 +80,7 @@ CONFIG_LEDS=y CONFIG_LEDS_TIMER=y CONFIG_LEDS_CPU=y -# CONFIG_ALIGNMENT_TRAP is not set +CONFIG_ALIGNMENT_TRAP=y # # Parallel port support diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/ebsa110 linux/arch/arm/def-configs/ebsa110 --- v2.4.8/linux/arch/arm/def-configs/ebsa110 Wed May 16 10:31:27 2001 +++ linux/arch/arm/def-configs/ebsa110 Sun Aug 12 11:13:59 2001 @@ -6,6 +6,8 @@ # CONFIG_SBUS is not set # CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # # Code maturity level options @@ -27,27 +29,62 @@ # CONFIG_ARCH_CLPS7500 is not set # CONFIG_ARCH_CO285 is not set CONFIG_ARCH_EBSA110=y +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_ANAKIN is not set # # Archimedes/A5000 Implementations # # +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# # Footbridge Implementations # +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set # # SA11x0 Implementations # +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set # # CLPS711X/EP721X Implementations # +# CONFIG_ARCH_P720T is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -58,24 +95,39 @@ # # Processor Type # +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set CONFIG_CPU_SA110=y +# CONFIG_CPU_SA1100 is not set # CONFIG_DISCONTIGMEM is not set # # General setup # -# CONFIG_ANGELBOOT is not set # CONFIG_PCI is not set -# CONFIG_ISA is not set +CONFIG_ISA=y # CONFIG_ISA_DMA is not set -# CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +CONFIG_I82365=y +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +# CONFIG_PCMCIA_SA1100 is not set CONFIG_NET=y CONFIG_SYSVIPC=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_SYSCTL=y -# CONFIG_NWFPE is not set +CONFIG_FPE_NWFPE=y +CONFIG_FPE_FASTFPE=y CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set CONFIG_BINFMT_AOUT=y @@ -94,6 +146,7 @@ CONFIG_PARPORT_PC=y CONFIG_PARPORT_PC_FIFO=y # CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_PC_PCMCIA is not set # CONFIG_PARPORT_ARC is not set # CONFIG_PARPORT_AMIGA is not set # CONFIG_PARPORT_MFC3 is not set @@ -103,11 +156,6 @@ CONFIG_PARPORT_1284=y # -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# # Plug and Play configuration # # CONFIG_PNP is not set @@ -129,10 +177,21 @@ # CONFIG_BLK_DEV_INITRD is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# # Networking options # -CONFIG_PACKET=m -# CONFIG_PACKET_MMAP is not set +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y CONFIG_NETLINK=y CONFIG_RTNETLINK=y # CONFIG_NETLINK_DEV is not set @@ -153,55 +212,58 @@ CONFIG_IP_ROUTE_VERBOSE=y # CONFIG_IP_ROUTE_LARGE_TABLES is not set CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y # CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set # CONFIG_IP_MROUTE is not set # CONFIG_ARPD is not set -# CONFIG_INET_ECN is not set +CONFIG_INET_ECN=y CONFIG_SYN_COOKIES=y # # IP: Netfilter Configuration # -CONFIG_IP_NF_CONNTRACK=m -CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_CONNTRACK=y +CONFIG_IP_NF_FTP=y +CONFIG_IP_NF_IRC=y # CONFIG_IP_NF_QUEUE is not set -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_LIMIT=m +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_MATCH_LIMIT=y # CONFIG_IP_NF_MATCH_MAC is not set -CONFIG_IP_NF_MATCH_MARK=m -CONFIG_IP_NF_MATCH_MULTIPORT=m -CONFIG_IP_NF_MATCH_TOS=m -CONFIG_IP_NF_MATCH_STATE=m -CONFIG_IP_NF_MATCH_UNCLEAN=m +CONFIG_IP_NF_MATCH_MARK=y +CONFIG_IP_NF_MATCH_MULTIPORT=y +CONFIG_IP_NF_MATCH_TOS=y +# CONFIG_IP_NF_MATCH_TCPMSS is not set +CONFIG_IP_NF_MATCH_STATE=y +CONFIG_IP_NF_MATCH_UNCLEAN=y # CONFIG_IP_NF_MATCH_OWNER is not set -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y # CONFIG_IP_NF_TARGET_MIRROR is not set -CONFIG_IP_NF_NAT=m -CONFIG_IP_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_TOS=m -CONFIG_IP_NF_TARGET_MARK=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_COMPAT_IPCHAINS=m +CONFIG_IP_NF_NAT=y CONFIG_IP_NF_NAT_NEEDED=y -# CONFIG_IP_NF_COMPAT_IPFWADM is not set -CONFIG_IPV6=m +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_IP_NF_NAT_IRC=y +CONFIG_IP_NF_NAT_FTP=y +CONFIG_IP_NF_MANGLE=y +CONFIG_IP_NF_TARGET_TOS=y +CONFIG_IP_NF_TARGET_MARK=y +CONFIG_IP_NF_TARGET_LOG=y +# CONFIG_IP_NF_TARGET_TCPMSS is not set +CONFIG_IPV6=y # # IPv6: Netfilter Configuration # -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_LIMIT=m -CONFIG_IP6_NF_MATCH_MARK=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_MARK=m +CONFIG_IP6_NF_IPTABLES=y +CONFIG_IP6_NF_MATCH_LIMIT=y +CONFIG_IP6_NF_MATCH_MARK=y +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_TARGET_MARK=y # CONFIG_KHTTPD is not set # CONFIG_ATM is not set @@ -253,6 +315,7 @@ # CONFIG_NET_VENDOR_RACAL is not set # CONFIG_AT1700 is not set # CONFIG_DEPCA is not set +# CONFIG_HP100 is not set # CONFIG_NET_ISA is not set # CONFIG_NET_PCI is not set # CONFIG_NET_POCKET is not set @@ -267,9 +330,10 @@ # CONFIG_FDDI is not set # CONFIG_HIPPI is not set # CONFIG_PLIP is not set -CONFIG_PPP=y +CONFIG_PPP=m # CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_ASYNC=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m # CONFIG_PPP_SYNC_TTY is not set CONFIG_PPP_DEFLATE=m CONFIG_PPP_BSDCOMP=m @@ -295,6 +359,21 @@ # CONFIG_WAN is not set # +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# # Amateur Radio support # # CONFIG_HAMRADIO is not set @@ -348,6 +427,15 @@ # CONFIG_SERIAL_MULTIPORT is not set # CONFIG_HUB6 is not set # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 CONFIG_PRINTER=m @@ -385,9 +473,11 @@ # CONFIG_WDTPCI is not set # CONFIG_PCWATCHDOG is not set # CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set # CONFIG_60XX_WDT is not set # CONFIG_MIXCOMWD is not set # CONFIG_I810_TCO is not set +# CONFIG_MACHZ_WDT is not set # CONFIG_INTEL_RNG is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set @@ -403,6 +493,11 @@ # CONFIG_DRM is not set # +# PCMCIA character devices +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# # Multimedia devices # # CONFIG_VIDEO_DEV is not set @@ -413,6 +508,8 @@ # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set CONFIG_AUTOFS4_FS=y +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set @@ -424,11 +521,14 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set # CONFIG_RAMFS is not set # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set -CONFIG_MINIX_FS=m +CONFIG_MINIX_FS=y +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -436,7 +536,7 @@ # CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_MOUNT is not set # CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set +CONFIG_DEVPTS_FS=y # CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_RW is not set # CONFIG_ROMFS_FS is not set @@ -467,8 +567,6 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set @@ -485,6 +583,7 @@ # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set # CONFIG_NLS is not set # @@ -495,9 +594,12 @@ # # Kernel hacking # -CONFIG_FRAME_POINTER=y +# CONFIG_NO_FRAME_POINTER is not set CONFIG_DEBUG_ERRORS=y # CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set # CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/flexanet linux/arch/arm/def-configs/flexanet --- v2.4.8/linux/arch/arm/def-configs/flexanet Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/flexanet Sun Aug 12 11:13:59 2001 @@ -0,0 +1,691 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_ANAKIN is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +CONFIG_SA1100_FLEXANET=y +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=y +CONFIG_SA1100_USB_NETLINK=y +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_SA1100_FREQUENCY_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_CPU_CLOCK is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +CONFIG_FPE_FASTFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +# CONFIG_MTD_CHAR is not set +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_VIRTUAL_ER is not set +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LART_BIT_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARMFLASH is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_NET_PCMCIA_RADIO is not set +CONFIG_PCMCIA_NETCARD=y + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +# CONFIG_SERIAL_SA1100_OLD is not set +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=57600 +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +CONFIG_AUDIO_UCB1200=y +CONFIG_ADC_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# + +# +# Game port support +# + +# +# Gameport joysticks +# + +# +# Serial port support +# + +# +# Serial port joysticks +# + +# +# Parallel port joysticks +# + +# +# Parport support is needed for parallel port joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_FB_SA1100=y +# CONFIG_FB_E1355 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_SA1100_SSP is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_OSS is not set + +# +# USB support +# +CONFIG_USB=y +CONFIG_USB_DEBUG=y + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_NET1080 is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_LL is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/freebird linux/arch/arm/def-configs/freebird --- v2.4.8/linux/arch/arm/def-configs/freebird Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/freebird Sun Aug 12 11:13:59 2001 @@ -0,0 +1,625 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +CONFIG_SA1100_FREEBIRD=y +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_PFS168 is not set +CONFIG_SA1100_FREEBIRD_OLD=y +# CONFIG_SA1100_FREEBIRD_NEW is not set +CONFIG_SA1100_FL=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +# CONFIG_SA1100_FREQUENCY_SCALE is not set +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_PM=y +CONFIG_APM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="mem=32M" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UCB1200 is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m +# CONFIG_IRLAN is not set +# CONFIG_IRNET is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# +CONFIG_IRTTY_SIR=m +# CONFIG_IRPORT_SIR is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_FB_TS_BT=y +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_PCMCIA_SERIAL is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=y +CONFIG_SOUND_UDA1341=y +# CONFIG_SOUND_UDA1341_GSM is not set +# CONFIG_SOUND_SA1100_SSP is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/freebird_new linux/arch/arm/def-configs/freebird_new --- v2.4.8/linux/arch/arm/def-configs/freebird_new Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/freebird_new Sun Aug 12 11:13:59 2001 @@ -0,0 +1,645 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +CONFIG_SA1100_FREEBIRD=y +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_FREEBIRD_OLD is not set +CONFIG_SA1100_FREEBIRD_NEW=y +CONFIG_SA1100_FL=m +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=y +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +# CONFIG_FPE_NWFPE is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +CONFIG_APM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="noinitrd console=ttySA0 init=/linuxrc root=1f04 mem=32m" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UCB1200 is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m +# CONFIG_IRLAN is not set +# CONFIG_IRNET is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=m +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_FB_TS_BT=y +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=m + +# +# PCMCIA character device support +# +CONFIG_PCMCIA_SERIAL_CS=m + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +CONFIG_AUTOFS_FS=m +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=m +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=y +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=m +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=m +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=m +CONFIG_LOCKD=m +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=y +CONFIG_SOUND_UDA1341=y +# CONFIG_SOUND_UDA1341_GSM is not set +# CONFIG_SOUND_SA1100_SSP is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/graphicsclient linux/arch/arm/def-configs/graphicsclient --- v2.4.8/linux/arch/arm/def-configs/graphicsclient Mon Nov 27 17:07:59 2000 +++ linux/arch/arm/def-configs/graphicsclient Sun Aug 12 11:13:59 2001 @@ -2,7 +2,9 @@ # Automatically generated make config: don't edit # CONFIG_ARM=y +# CONFIG_EISA is not set # CONFIG_SBUS is not set +# CONFIG_MCA is not set CONFIG_UID16=y # @@ -25,35 +27,63 @@ # CONFIG_ARCH_CLPS7500 is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_RPC is not set CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set # # Archimedes/A5000 Implementations # # +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# # Footbridge Implementations # +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set # # SA11x0 Implementations # # CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set # CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set CONFIG_SA1100_GRAPHICSCLIENT=y +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_PANGOLIN is not set # CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_XP860 is not set -# CONFIG_ANGELBOOT is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_PFS168 is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m # CONFIG_SA1100_FREQUENCY_SCALE is not set # CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -64,31 +94,44 @@ # # Processor Type # +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y CONFIG_DISCONTIGMEM=y # # General setup # + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set # CONFIG_PCI is not set # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set -CONFIG_PC_KEYMAP=y CONFIG_HOTPLUG=y # # PCMCIA/CardBus support # CONFIG_PCMCIA=y -# CONFIG_PCMCIA_DEBUG is not set -CONFIG_SA1100_PCMCIA=y -CONFIG_VIRTUAL_BUS=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_NWFPE=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set # CONFIG_BINFMT_AOUT is not set @@ -97,8 +140,10 @@ # CONFIG_PM is not set # CONFIG_ARTHUR is not set CONFIG_CMDLINE="root=nfs" +# CONFIG_PFS168_CMDLINE is not set # CONFIG_LEDS is not set CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UCB1200 is not set # # Parallel port support @@ -108,7 +153,65 @@ # # Memory Technology Devices (MTD) # -# CONFIG_MTD is not set +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=m +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=m +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLOCK=m +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set # # Plug and Play configuration @@ -123,19 +226,24 @@ # CONFIG_BLK_DEV_XD is not set # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set +CONFIG_BLK_DEV_LOOP=m # CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_LVM is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set # CONFIG_BLK_DEV_MD is not set # CONFIG_MD_LINEAR is not set # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y -# CONFIG_BLK_DEV_FLASH is not set +# CONFIG_BLK_DEV_LVM is not set # # Networking options @@ -170,6 +278,7 @@ # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_FASTROUTE is not set @@ -199,7 +308,6 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set CONFIG_NET_VENDOR_SMC=y @@ -217,8 +325,9 @@ # # Ethernet (1000 Mbit) # -# CONFIG_YELLOWFIN is not set # CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set @@ -331,6 +440,11 @@ # CONFIG_ISDN is not set # +# Input core support +# +# CONFIG_INPUT is not set + +# # Character devices # CONFIG_VT=y @@ -340,9 +454,15 @@ # CONFIG_SERIAL_NONSTANDARD is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 # CONFIG_TOUCHSCREEN_UCB1200 is not set # CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=32 @@ -374,6 +494,7 @@ # CONFIG_INTEL_RNG is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set @@ -387,11 +508,18 @@ # CONFIG_PCMCIA_SERIAL is not set # +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# # File systems # # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set @@ -402,9 +530,12 @@ # CONFIG_UMSDOS_FS is not set CONFIG_VFAT_FS=m # CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set +CONFIG_JFFS_FS=m +CONFIG_JFFS_FS_VERBOSE=0 +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 # CONFIG_CRAMFS is not set -CONFIG_RAMFS=y +CONFIG_RAMFS=m # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set # CONFIG_MINIX_FS is not set @@ -446,8 +577,6 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set @@ -456,6 +585,7 @@ # # CONFIG_PARTITION_ADVANCED is not set CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set CONFIG_NLS=y # @@ -499,6 +629,7 @@ # # Console drivers # +CONFIG_PC_KEYMAP=y # CONFIG_VGA_CONSOLE is not set CONFIG_FB=y @@ -507,6 +638,8 @@ # CONFIG_FB=y CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set # CONFIG_FB_CYBER2000 is not set CONFIG_FB_SA1100=y # CONFIG_FB_VIRTUAL is not set @@ -536,9 +669,12 @@ # # Kernel hacking # -CONFIG_FRAME_POINTER=y +# CONFIG_NO_FRAME_POINTER is not set CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set # CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set # CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/h3600 linux/arch/arm/def-configs/h3600 --- v2.4.8/linux/arch/arm/def-configs/h3600 Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/h3600 Sun Aug 12 11:13:59 2001 @@ -0,0 +1,604 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_SBUS is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +CONFIG_SA1100_BITSY=y +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_ANGELBOOT is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_FREQUENCY_SCALE=y +# CONFIG_SA1100_VOLTAGE_SCALE is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +CONFIG_CPU_32v4=y +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_PC_KEYMAP=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +CONFIG_PCMCIA_DEBUG=y +PCMCIA_DEBUG=1 +CONFIG_SA1100_PCMCIA=y +CONFIG_VIRTUAL_BUS=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="" +# CONFIG_LEDS is not set +# CONFIG_ALIGNMENT_TRAP is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_MTDRAM is not set + +# +# MTD drivers for mapped chips +# +CONFIG_MTD_CFI=m +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PHYSMAP_START=0 +CONFIG_MTD_PHYSMAP_LEN=0 + +# +# Drivers for chip mappings +# +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_VMAX is not set + +# +# User modules and translation layers for MTD devices +# +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLOCK=m +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_LVM is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +CONFIG_BLK_DEV_FLASH=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +CONFIG_NETLINK_DEV=y +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_YELLOWFIN is not set +# CONFIG_ACENIC is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_PCMCIA_NETWAVE is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_AIRONET4500_CS is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +CONFIG_BLK_DEV_IDEFLOPPY=m +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +# CONFIG_TOUCHSCREEN_UCB1200 is not set +CONFIG_TOUCHSCREEN_BITSY=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_PCMCIA_SERIAL is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=m +CONFIG_JFFS_FS_VERBOSE=2 +CONFIG_CRAMFS=y +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=m +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +CONFIG_NFSD=m +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=m +CONFIG_LOCKD=m +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_REMOTE="" +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_MOUNT_SUBDIR is not set +# CONFIG_NCPFS_NDS_DOMAINS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +CONFIG_SOUND=m +CONFIG_SOUND_UDA1341=m +# CONFIG_SOUND_SA1100_SSP is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +CONFIG_DEBUG_LL=y diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/huw_webpanel linux/arch/arm/def-configs/huw_webpanel --- v2.4.8/linux/arch/arm/def-configs/huw_webpanel Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/huw_webpanel Sun Aug 12 11:13:59 2001 @@ -0,0 +1,435 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +CONFIG_SA1100_HUW_WEBPANEL=y +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_FREQUENCY_SCALE is not set +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +CONFIG_CPU_32v4=y +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="keepinitrd" +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_DEV_FLASH is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +# CONFIG_NETDEVICES is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_CRAMFS=y +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_MOUNT_SUBDIR is not set +# CONFIG_NCPFS_NDS_DOMAINS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_LL is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/integrator linux/arch/arm/def-configs/integrator --- v2.4.8/linux/arch/arm/def-configs/integrator Sat May 19 17:43:05 2001 +++ linux/arch/arm/def-configs/integrator Sun Aug 12 11:13:59 2001 @@ -6,6 +6,8 @@ # CONFIG_SBUS is not set # CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # # Code maturity level options @@ -16,7 +18,9 @@ # # Loadable module support # -# CONFIG_MODULES is not set +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set # # System Type @@ -31,22 +35,56 @@ # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_ANAKIN is not set # # Archimedes/A5000 Implementations # # +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# # Footbridge Implementations # +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set # # SA11x0 Implementations # +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set # # CLPS711X/EP721X Implementations # +# CONFIG_ARCH_P720T is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -75,15 +113,11 @@ # # General setup # - -# -# Please ensure that you have read the help on the next option -# -# CONFIG_ANGELBOOT is not set CONFIG_PCI_INTEGRATOR=y CONFIG_PCI=y # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set +CONFIG_CPU_CLOCK=y CONFIG_PCI_NAMES=y # CONFIG_HOTPLUG is not set # CONFIG_PCMCIA is not set @@ -91,15 +125,16 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_NWFPE=y +# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_FASTFPE=y CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set CONFIG_BINFMT_AOUT=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set +CONFIG_PM=y # CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=1f04 mem=32M" +CONFIG_CMDLINE="root=1f03 mem=32M" CONFIG_LEDS=y CONFIG_LEDS_TIMER=y CONFIG_LEDS_CPU=y @@ -115,51 +150,83 @@ # CONFIG_MTD=y # CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +CONFIG_MTD_AFS_PARTS=y # -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - +# User Modules And Translation Layers # -# RAM/ROM Device Drivers -# -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_MTDRAM is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set # -# Linearly Mapped Flash Device Drivers +# RAM/ROM/Flash chip drivers # CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_VIRTUAL_ER is not set +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LART_BIT_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set CONFIG_MTD_CFI_INTELEXT=y # CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set # CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_PHYSMAP is not set # -# Drivers for chip mappings +# Mapping drivers for chip access # -# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set # CONFIG_MTD_NORA is not set -# CONFIG_MTD_OCTAGON is not set # CONFIG_MTD_PNC2000 is not set # CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set # CONFIG_MTD_VMAX is not set +CONFIG_MTD_ARMFLASH=y # -# User modules and translation layers for MTD devices +# Self-contained MTD device drivers # -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -CONFIG_MTD_ARM=y +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set # # Plug and Play configuration @@ -183,22 +250,38 @@ # CONFIG_BLK_DEV_INITRD is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# # Networking options # -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +# CONFIG_RTNETLINK is not set +# CONFIG_NETLINK_DEV is not set # CONFIG_NETFILTER is not set # CONFIG_FILTER is not set CONFIG_UNIX=y CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set +CONFIG_IP_MULTICAST=y # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y # CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set +# CONFIG_IP_MROUTE is not set +CONFIG_INET_ECN=y # CONFIG_SYN_COOKIES is not set # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set @@ -238,6 +321,7 @@ # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set # CONFIG_NET_SB1000 is not set # @@ -257,19 +341,22 @@ # CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_APRICOT is not set # CONFIG_CS89x0 is not set -CONFIG_TULIP=y +# CONFIG_TULIP is not set # CONFIG_DE4X5 is not set # CONFIG_DGRS is not set # CONFIG_DM9102 is not set CONFIG_EEPRO100=y CONFIG_EEPRO100_PM=y # CONFIG_LNE390 is not set +# CONFIG_FEALNX is not set # CONFIG_NATSEMI is not set # CONFIG_NE2K_PCI is not set # CONFIG_NE3210 is not set # CONFIG_ES3210 is not set # CONFIG_8139TOO is not set -# CONFIG_RTL8129 is not set +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set # CONFIG_SIS900 is not set # CONFIG_EPIC100 is not set # CONFIG_SUNDANCE is not set @@ -364,9 +451,16 @@ # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set CONFIG_SERIAL_AMBA=y -CONFIG_SERIAL_INTEGRATOR=y CONFIG_SERIAL_AMBA_CONSOLE=y +CONFIG_SERIAL_INTEGRATOR=y +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y @@ -438,11 +532,15 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 # CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set # CONFIG_RAMFS is not set # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set +CONFIG_MINIX_FS=y +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -467,12 +565,13 @@ # # CONFIG_CODA_FS is not set CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set +CONFIG_NFS_V3=y CONFIG_ROOT_NFS=y -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set +CONFIG_NFSD=y +CONFIG_NFSD_V3=y CONFIG_SUNRPC=y CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y # CONFIG_SMB_FS is not set # CONFIG_NCP_FS is not set # CONFIG_NCPFS_PACKET_SIGNING is not set @@ -504,14 +603,41 @@ # Console drivers # CONFIG_KMI_KEYB=y +CONFIG_KMI_MOUSE=y CONFIG_PC_KEYMAP=y CONFIG_VGA_CONSOLE=y -# CONFIG_FB is not set +CONFIG_FB=y # # Frame-buffer support # -# CONFIG_FB is not set +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_RIVA is not set +# CONFIG_FB_CLGEN is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set # # Sound @@ -531,4 +657,7 @@ CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/jornada720 linux/arch/arm/def-configs/jornada720 --- v2.4.8/linux/arch/arm/def-configs/jornada720 Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/jornada720 Sun Aug 12 11:13:59 2001 @@ -0,0 +1,760 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +CONFIG_SA1100_JORNADA720=y +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1111=y +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_SA1100_FREQUENCY_SCALE is not set +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +CONFIG_PM=y +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="keepinitrd" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +# CONFIG_ALIGNMENT_TRAP is not set +# CONFIG_UCB1200 is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_PCMCIA_HERMES is not set +# CONFIG_PCMCIA_NETWAVE is not set +CONFIG_PCMCIA_WAVELAN=m +CONFIG_AIRONET4500_CS=m + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +# CONFIG_IRNET is not set +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=m +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_PROFILER=m +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=m +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=m +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +CONFIG_PCMCIA_SERIAL_CS=m + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=m +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=y +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +CONFIG_FB_EPSON1356=y +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +CONFIG_SOUND=m +CONFIG_SOUND_UDA1341=m +# CONFIG_SOUND_SA1100_SSP is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/lart linux/arch/arm/def-configs/lart --- v2.4.8/linux/arch/arm/def-configs/lart Mon Sep 18 15:15:24 2000 +++ linux/arch/arm/def-configs/lart Sun Aug 12 11:13:59 2001 @@ -1,9 +1,13 @@ # -# Automatically generated by make menuconfig: don't edit +# Automatically generated make config: don't edit # CONFIG_ARM=y +# CONFIG_EISA is not set # CONFIG_SBUS is not set +# CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # # Code maturity level options @@ -15,62 +19,125 @@ # Loadable module support # CONFIG_MODULES=y -CONFIG_MODVERSIONS=y -# CONFIG_KMOD is not set +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y # # System Type # +# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set # CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_RPC is not set CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# # CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set # CONFIG_SA1100_BITSY is not set -CONFIG_SA1100_LART=y -# CONFIG_SA1100_THINCLIENT is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +CONFIG_SA1100_LART=y # CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set # CONFIG_SA1100_VICTOR is not set -# CONFIG_ANGELBOOT is not set -CONFIG_SA1100_FREQUENCY_SCALE=m -CONFIG_SA1100_VOLTAGE_SCALE=y +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set # CONFIG_FOOTBRIDGE_ADDIN is not set CONFIG_CPU_32=y # CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y CONFIG_DISCONTIGMEM=y -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set +# CONFIG_CPU_BIG_ENDIAN is not set # # General setup # +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y # CONFIG_HOTPLUG is not set # CONFIG_PCMCIA is not set CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set -# CONFIG_SYSCTL is not set -CONFIG_NWFPE=y +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set CONFIG_BINFMT_AOUT=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set CONFIG_PM=y +CONFIG_APM=m # CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttyS0,9600" +CONFIG_CMDLINE="console=ttySA0,9600" +# CONFIG_PFS168_CMDLINE is not set CONFIG_LEDS=y # CONFIG_LEDS_TIMER is not set CONFIG_LEDS_CPU=y @@ -84,7 +151,96 @@ # # Memory Technology Devices (MTD) # -# CONFIG_MTD is not set +CONFIG_MTD=m +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=1 +# CONFIG_MTD_PARTITIONS is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_BLOCK_RO=m +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=m +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=m +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set # # Plug and Play configuration @@ -99,19 +255,24 @@ # CONFIG_BLK_DEV_XD is not set # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_LVM is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set # CONFIG_BLK_DEV_MD is not set # CONFIG_MD_LINEAR is not set # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y -CONFIG_BLK_DEV_FLASH=m +# CONFIG_BLK_DEV_LVM is not set # # Networking options @@ -126,15 +287,17 @@ # CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set # CONFIG_IP_PNP is not set -# CONFIG_IP_ROUTER is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set -# CONFIG_IP_ALIAS is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set +CONFIG_INET_ECN=y +CONFIG_SYN_COOKIES=y # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set + +# +# +# # CONFIG_IPX is not set # CONFIG_ATALK is not set # CONFIG_DECNET is not set @@ -142,6 +305,7 @@ # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_FASTROUTE is not set @@ -161,62 +325,49 @@ # ARCnet devices # # CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set +CONFIG_DUMMY=m # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set -# CONFIG_NET_SB1000 is not set +# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set # CONFIG_NET_ISA is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_AC3200 is not set -# CONFIG_APRICOT is not set -CONFIG_CS89x0=m -# CONFIG_DE4X5 is not set -# CONFIG_TULIP is not set -# CONFIG_DGRS is not set -# CONFIG_DM9102 is not set -# CONFIG_EEPRO100 is not set -# CONFIG_LNE390 is not set -# CONFIG_NE3210 is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_RTL8129 is not set -# CONFIG_8139TOO is not set -# CONFIG_SIS900 is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_ES3210 is not set -# CONFIG_EPIC100 is not set +# CONFIG_NET_PCI is not set # CONFIG_NET_POCKET is not set # # Ethernet (1000 Mbit) # -# CONFIG_YELLOWFIN is not set # CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set -CONFIG_PPP=y +# CONFIG_PLIP is not set +CONFIG_PPP=m # CONFIG_PPP_MULTILINK is not set -CONFIG_PPP_ASYNC=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m # CONFIG_PPP_SYNC_TTY is not set CONFIG_PPP_DEFLATE=m CONFIG_PPP_BSDCOMP=m # CONFIG_PPPOE is not set -CONFIG_SLIP=y +CONFIG_SLIP=m CONFIG_SLIP_COMPRESSED=y # CONFIG_SLIP_SMART is not set # CONFIG_SLIP_MODE_SLIP6 is not set @@ -247,7 +398,48 @@ # # IrDA (infrared) support # -# CONFIG_IRDA is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set +CONFIG_IRDA_OPTIONS=y + +# +# IrDA options +# +CONFIG_IRDA_CACHE_LAST_LSAP=y +# CONFIG_IRDA_FAST_RR is not set +CONFIG_IRDA_DEBUG=y + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m # # ATA/IDE/MFM/RLL support @@ -258,6 +450,10 @@ # IDE, ATA and ATAPI Block devices # CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# # CONFIG_BLK_DEV_HD_IDE is not set # CONFIG_BLK_DEV_HD is not set CONFIG_BLK_DEV_IDEDISK=m @@ -276,6 +472,10 @@ # CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# # CONFIG_BLK_DEV_CMD640 is not set # CONFIG_BLK_DEV_CMD640_ENHANCED is not set # CONFIG_BLK_DEV_ISAPNP is not set @@ -304,17 +504,42 @@ # CONFIG_ISDN is not set # +# Input core support +# +# CONFIG_INPUT is not set + +# # Character devices # # CONFIG_VT is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +CONFIG_UCB1200=m CONFIG_TOUCHSCREEN_UCB1200=m +CONFIG_AUDIO_UCB1200=m +CONFIG_ADC_UCB1200=m # CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_UNIX98_PTYS is not set +CONFIG_PROFILER=m +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set # # I2C support @@ -331,6 +556,10 @@ # Joysticks # # CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# # CONFIG_QIC02_TAPE is not set # @@ -340,11 +569,7 @@ # CONFIG_INTEL_RNG is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set - -# -# Video For Linux -# -# CONFIG_VIDEO_DEV is not set +CONFIG_SA1100_RTC=m # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set @@ -357,11 +582,18 @@ # CONFIG_DRM is not set # +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# # File systems # # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set @@ -372,12 +604,17 @@ # CONFIG_UMSDOS_FS is not set # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set +CONFIG_JFFS_FS=m +CONFIG_JFFS_FS_VERBOSE=1 +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=1 +CONFIG_CRAMFS=m +CONFIG_TMPFS=y +CONFIG_RAMFS=m +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y # CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -385,14 +622,13 @@ # CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_MOUNT is not set # CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set +CONFIG_DEVPTS_FS=y # CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_RW is not set # CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set -# CONFIG_UDF_FS is not set +CONFIG_UDF_FS=m # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set # CONFIG_UFS_FS_WRITE is not set @@ -402,12 +638,13 @@ # # CONFIG_CODA_FS is not set CONFIG_NFS_FS=m -# CONFIG_NFS_V3 is not set +CONFIG_NFS_V3=y # CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set +CONFIG_NFSD=m +CONFIG_NFSD_V3=y CONFIG_SUNRPC=m CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y # CONFIG_SMB_FS is not set # CONFIG_NCP_FS is not set # CONFIG_NCPFS_PACKET_SIGNING is not set @@ -416,8 +653,6 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set @@ -426,57 +661,75 @@ # # CONFIG_PARTITION_ADVANCED is not set CONFIG_MSDOS_PARTITION=y -# CONFIG_NLS is not set +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +CONFIG_NLS_CODEPAGE_850=m +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ISO8859_1=m +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +CONFIG_NLS_ISO8859_15=m +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=m # # Sound # CONFIG_SOUND=m +# CONFIG_SOUND_ASSABET_UDA1341 is not set +# CONFIG_SOUND_BITSY_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +CONFIG_SOUND_SA1100SSP=m # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set # CONFIG_SOUND_ES1371 is not set # CONFIG_SOUND_ESSSOLO1 is not set # CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set -CONFIG_SOUND_OSS=m -CONFIG_SOUND_TRACEINIT=y -# CONFIG_SOUND_DMAP is not set -# CONFIG_SOUND_AD1816 is not set -# CONFIG_SOUND_SGALAXY is not set -# CONFIG_SOUND_ADLIB is not set -# CONFIG_SOUND_ACI_MIXER is not set -# CONFIG_SOUND_CS4232 is not set -# CONFIG_SOUND_SSCAPE is not set -# CONFIG_SOUND_GUS is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_VMIDI is not set -# CONFIG_SOUND_TRIX is not set -# CONFIG_SOUND_MSS is not set -# CONFIG_SOUND_MPU401 is not set -# CONFIG_SOUND_NM256 is not set -# CONFIG_SOUND_MAD16 is not set -# CONFIG_SOUND_PAS is not set -# CONFIG_PAS_JOYSTICK is not set -# CONFIG_SOUND_PSS is not set -# CONFIG_SOUND_SOFTOSS is not set -# CONFIG_SOUND_SB is not set -# CONFIG_SOUND_AWE32_SYNTH is not set -# CONFIG_SOUND_WAVEFRONT is not set -# CONFIG_SOUND_MAUI is not set -# CONFIG_SOUND_YM3812 is not set -# CONFIG_SOUND_OPL3SA1 is not set -# CONFIG_SOUND_OPL3SA2 is not set -# CONFIG_SOUND_YMPCI is not set -# CONFIG_SOUND_UART6850 is not set -# CONFIG_SOUND_AEDSP16 is not set -# CONFIG_SOUND_VIDC is not set -# CONFIG_SOUND_WAVEARTIST is not set -CONFIG_SOUND_SA1100_SSP=m +# CONFIG_MIDI_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set # CONFIG_SOUND_TVMIXER is not set # @@ -485,11 +738,19 @@ # CONFIG_USB is not set # +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# # Kernel hacking # -CONFIG_FRAME_POINTER=y +# CONFIG_NO_FRAME_POINTER is not set CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/neponset linux/arch/arm/def-configs/neponset --- v2.4.8/linux/arch/arm/def-configs/neponset Mon Nov 27 17:07:59 2000 +++ linux/arch/arm/def-configs/neponset Sun Aug 12 11:13:59 2001 @@ -2,8 +2,12 @@ # Automatically generated make config: don't edit # CONFIG_ARM=y +# CONFIG_EISA is not set # CONFIG_SBUS is not set +# CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # # Code maturity level options @@ -21,22 +25,37 @@ # # System Type # +# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_RPC is not set CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set # # Archimedes/A5000 Implementations # # +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# # Footbridge Implementations # +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set # # SA11x0 Implementations @@ -46,16 +65,33 @@ # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set # CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set # CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_XP860 is not set -CONFIG_ANGELBOOT=y +# CONFIG_SA1100_YOPY is not set CONFIG_SA1111=y -CONFIG_SA1100_FREQUENCY_SCALE=y -# CONFIG_SA1100_VOLTAGE_SCALE is not set +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -66,9 +102,17 @@ # # Processor Type # +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set # # General setup @@ -76,29 +120,33 @@ # CONFIG_PCI is not set # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set -CONFIG_PC_KEYMAP=y +# CONFIG_CPU_FREQ is not set CONFIG_HOTPLUG=y # # PCMCIA/CardBus support # CONFIG_PCMCIA=y -# CONFIG_PCMCIA_DEBUG is not set -CONFIG_SA1100_PCMCIA=y -CONFIG_VIRTUAL_BUS=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_NWFPE=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set # CONFIG_BINFMT_AOUT is not set CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set # CONFIG_PM is not set +# CONFIG_APM is not set # CONFIG_ARTHUR is not set -CONFIG_CMDLINE="keepinitrd" +CONFIG_CMDLINE="" +# CONFIG_PFS168_CMDLINE is not set CONFIG_LEDS=y CONFIG_LEDS_TIMER=y CONFIG_LEDS_CPU=y @@ -112,7 +160,85 @@ # # Memory Technology Devices (MTD) # -# CONFIG_MTD is not set +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=m +CONFIG_MTD_REDBOOT_PARTS=m +CONFIG_MTD_BOOTLDR_PARTS=m +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLOCK=m +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=m +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=m +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set # # Plug and Play configuration @@ -127,19 +253,24 @@ # CONFIG_BLK_DEV_XD is not set # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set -# CONFIG_BLK_DEV_LOOP is not set +CONFIG_BLK_DEV_LOOP=m # CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_LVM is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set # CONFIG_BLK_DEV_MD is not set # CONFIG_MD_LINEAR is not set # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y -# CONFIG_BLK_DEV_FLASH is not set +# CONFIG_BLK_DEV_LVM is not set # # Networking options @@ -171,6 +302,7 @@ # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_FASTROUTE is not set @@ -194,23 +326,25 @@ # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set CONFIG_NET_VENDOR_SMC=y # CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set # CONFIG_ULTRA is not set # CONFIG_ULTRA32 is not set CONFIG_SMC9194=y # CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set # CONFIG_NET_ISA is not set # CONFIG_NET_PCI is not set # CONFIG_NET_POCKET is not set @@ -218,11 +352,15 @@ # # Ethernet (1000 Mbit) # -# CONFIG_YELLOWFIN is not set # CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set +# CONFIG_PLIP is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set @@ -258,7 +396,6 @@ # CONFIG_ARCNET_COM20020_CS is not set # CONFIG_PCMCIA_IBMTR is not set # CONFIG_NET_PCMCIA_RADIO is not set -CONFIG_PCMCIA_NETCARD=y # # Amateur Radio support @@ -333,6 +470,17 @@ # CONFIG_ISDN is not set # +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# # Character devices # CONFIG_VT=y @@ -340,13 +488,31 @@ # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_SERIAL_8250=m +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set # # I2C support @@ -357,10 +523,7 @@ # Mice # # CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set +# CONFIG_MOUSE is not set # # Joysticks @@ -379,6 +542,7 @@ # CONFIG_INTEL_RNG is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set @@ -389,7 +553,15 @@ # CONFIG_FTAPE is not set # CONFIG_AGP is not set # CONFIG_DRM is not set -# CONFIG_PCMCIA_SERIAL is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set # # File systems @@ -397,6 +569,8 @@ # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set @@ -407,12 +581,17 @@ # CONFIG_UMSDOS_FS is not set # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set +CONFIG_JFFS_FS=m +CONFIG_JFFS_FS_VERBOSE=0 +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 # CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set # CONFIG_RAMFS is not set # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set # CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -426,7 +605,6 @@ # CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set @@ -451,8 +629,6 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set @@ -467,11 +643,13 @@ # CONFIG_MAC_PARTITION is not set CONFIG_MSDOS_PARTITION=y # CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set CONFIG_NLS=y # @@ -493,11 +671,13 @@ # CONFIG_NLS_CODEPAGE_865 is not set # CONFIG_NLS_CODEPAGE_866 is not set # CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set # CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set # CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set # CONFIG_NLS_ISO8859_1 is not set # CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_3 is not set @@ -505,27 +685,31 @@ # CONFIG_NLS_ISO8859_5 is not set # CONFIG_NLS_ISO8859_6 is not set # CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set # CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set # CONFIG_NLS_ISO8859_14 is not set # CONFIG_NLS_ISO8859_15 is not set # CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_UTF8 is not set # # Console drivers # +CONFIG_PC_KEYMAP=y # CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y # # Frame-buffer support # CONFIG_FB=y CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set # CONFIG_FB_CYBER2000 is not set CONFIG_FB_SA1100=y -# CONFIG_FB_MQ200 is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB2=y @@ -544,33 +728,120 @@ # Sound # CONFIG_SOUND=y -CONFIG_SOUND_UDA1341=y +CONFIG_SOUND_ASSABET_UDA1341=m +# CONFIG_SOUND_BITSY_UDA1341 is not set +CONFIG_SOUND_SA1111_UDA1341=m +# CONFIG_SOUND_SA1100SSP is not set # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set # CONFIG_SOUND_ES1371 is not set # CONFIG_SOUND_ESSSOLO1 is not set # CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set # CONFIG_SOUND_OSS is not set # CONFIG_SOUND_TVMIXER is not set # # USB support # -# CONFIG_USB is not set +CONFIG_USB=y +CONFIG_USB_DEBUG=y + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=y +CONFIG_USB_OHCI_NOPCI=y + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=y +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_NET1080 is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set # # Kernel hacking # -CONFIG_FRAME_POINTER=y +# CONFIG_NO_FRAME_POINTER is not set CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set # CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/omnimeter linux/arch/arm/def-configs/omnimeter --- v2.4.8/linux/arch/arm/def-configs/omnimeter Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/omnimeter Sun Aug 12 11:13:59 2001 @@ -0,0 +1,581 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_SBUS is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_BRUTUS is not set +CONFIG_SA1100_OMNIMETER=y +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_FREQUENCY_SCALE is not set +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +CONFIG_CPU_32v4=y +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +CONFIG_ISA=y +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +CONFIG_I82365=y +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_SA1100_PCMCIA=y +# CONFIG_H3600_SLEEVE is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="keepinitrd" +# CONFIG_LEDS is not set +# CONFIG_ALIGNMENT_TRAP is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_NBD=m +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_BLK_DEV_FLASH is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_QUEUE is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set +# CONFIG_NET_SB1000 is not set +# CONFIG_NET_SA1100_USB_HOST is not set +# CONFIG_NET_SA1100_USB_CLIENT is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=y +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_PCMCIA_NETWAVE is not set +CONFIG_PCMCIA_WAVELAN=y +CONFIG_AIRONET4500_CS=y +CONFIG_PCMCIA_WVLAN=y +CONFIG_PCMCIA_NETCARD=y + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_TOUCHSCREEN_BITSY_KEYBOARD is not set +# CONFIG_H3600_SLEEVE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=m +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=y + +# +# PCMCIA character device support +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_MOUNT_SUBDIR is not set +# CONFIG_NCPFS_NDS_DOMAINS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +CONFIG_FBCON_CFB4=y +# CONFIG_FBCON_CFB8 is not set +# CONFIG_FBCON_CFB16 is not set +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +CONFIG_DEBUG_LL=y diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/pangolin linux/arch/arm/def-configs/pangolin --- v2.4.8/linux/arch/arm/def-configs/pangolin Mon Nov 27 17:07:59 2000 +++ linux/arch/arm/def-configs/pangolin Sun Aug 12 11:13:59 2001 @@ -1,8 +1,10 @@ # -# Automatically generated by make menuconfig: don't edit +# Automatically generated make config: don't edit # CONFIG_ARM=y +# CONFIG_EISA is not set # CONFIG_SBUS is not set +# CONFIG_MCA is not set CONFIG_UID16=y # @@ -15,8 +17,8 @@ # Loadable module support # CONFIG_MODULES=y -CONFIG_MODVERSIONS=y -CONFIG_KMOD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set # # System Type @@ -25,67 +27,111 @@ # CONFIG_ARCH_CLPS7500 is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_RPC is not set CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set # # Archimedes/A5000 Implementations # # +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# # Footbridge Implementations # +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set # # SA11x0 Implementations # # CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set # CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set # CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_VICTOR is not set +CONFIG_SA1100_PANGOLIN=y +# CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_XP860 is not set -CONFIG_SA1100_PANGOLIN=y -# CONFIG_ANGELBOOT is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set # CONFIG_SA1100_FREQUENCY_SCALE is not set # CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set # CONFIG_FOOTBRIDGE_ADDIN is not set CONFIG_CPU_32=y # CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y CONFIG_DISCONTIGMEM=y # # General setup # + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set # CONFIG_PCI is not set # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set -CONFIG_PC_KEYMAP=y CONFIG_HOTPLUG=y # # PCMCIA/CardBus support # CONFIG_PCMCIA=y -# CONFIG_PCMCIA_DEBUG is not set -CONFIG_SA1100_PCMCIA=y -CONFIG_VIRTUAL_BUS=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_NWFPE=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set # CONFIG_BINFMT_AOUT is not set @@ -94,8 +140,10 @@ # CONFIG_PM is not set # CONFIG_ARTHUR is not set CONFIG_CMDLINE="keepinitrd" +# CONFIG_PFS168_CMDLINE is not set # CONFIG_LEDS is not set CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UCB1200 is not set # # Parallel port support @@ -106,26 +154,59 @@ # Memory Technology Devices (MTD) # CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# # CONFIG_MTD_DOC1000 is not set # CONFIG_MTD_DOC2000 is not set # CONFIG_MTD_DOC2001 is not set # CONFIG_MTD_DOCPROBE is not set -# CONFIG_MTD_SLRAM is not set + +# +# RAM/ROM Device Drivers +# # CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set # CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set CONFIG_MTD_CFI_INTELEXT=y -CONFIG_MTD_CFI_AMDSTD=y -# CONFIG_MTD_JEDEC is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set # CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_MIXMEM is not set # CONFIG_MTD_NORA is not set -# CONFIG_MTD_OCTAGON is not set # CONFIG_MTD_PNC2000 is not set # CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set # CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# CONFIG_MTD_CHAR=y CONFIG_MTD_BLOCK=y # CONFIG_FTL is not set @@ -144,19 +225,24 @@ # CONFIG_BLK_DEV_XD is not set # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_LVM is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set # CONFIG_BLK_DEV_MD is not set # CONFIG_MD_LINEAR is not set # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y -CONFIG_BLK_DEV_FLASH=y +# CONFIG_BLK_DEV_LVM is not set # # Networking options @@ -178,6 +264,10 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set + +# +# +# # CONFIG_IPX is not set # CONFIG_ATALK is not set # CONFIG_DECNET is not set @@ -185,6 +275,7 @@ # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_FASTROUTE is not set @@ -214,7 +305,6 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set @@ -228,8 +318,9 @@ # # Ethernet (1000 Mbit) # -# CONFIG_YELLOWFIN is not set # CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set @@ -289,6 +380,10 @@ # IDE, ATA and ATAPI Block devices # CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# # CONFIG_BLK_DEV_HD_IDE is not set # CONFIG_BLK_DEV_HD is not set CONFIG_BLK_DEV_IDEDISK=y @@ -307,6 +402,10 @@ # CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# # CONFIG_BLK_DEV_CMD640 is not set # CONFIG_BLK_DEV_CMD640_ENHANCED is not set # CONFIG_BLK_DEV_ISAPNP is not set @@ -335,6 +434,11 @@ # CONFIG_ISDN is not set # +# Input core support +# +# CONFIG_INPUT is not set + +# # Character devices # CONFIG_VT=y @@ -347,6 +451,12 @@ CONFIG_SA1100_DEFAULT_BAUDRATE=115200 # CONFIG_TOUCHSCREEN_UCB1200 is not set # CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_PROFILER=y +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=32 @@ -365,6 +475,10 @@ # Joysticks # # CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# # CONFIG_QIC02_TAPE is not set # @@ -374,6 +488,7 @@ # CONFIG_INTEL_RNG is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set +CONFIG_SA1100_RTC=y # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set @@ -384,7 +499,16 @@ # CONFIG_FTAPE is not set # CONFIG_AGP is not set # CONFIG_DRM is not set -# CONFIG_PCMCIA_SERIAL is not set + +# +# PCMCIA character devices +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set # # File systems @@ -392,18 +516,21 @@ # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set # CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y # CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set +CONFIG_VFAT_FS=y # CONFIG_EFS_FS is not set CONFIG_JFFS_FS=y -CONFIG_JFFS_FS_VERBOSE=1 +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set CONFIG_CRAMFS=y CONFIG_RAMFS=y # CONFIG_ISO9660_FS is not set @@ -432,13 +559,13 @@ # Network File Systems # # CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y +# CONFIG_NFS_FS is not set # CONFIG_NFS_V3 is not set # CONFIG_ROOT_NFS is not set # CONFIG_NFSD is not set # CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set # CONFIG_SMB_FS is not set # CONFIG_NCP_FS is not set # CONFIG_NCPFS_PACKET_SIGNING is not set @@ -447,8 +574,6 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set @@ -457,23 +582,113 @@ # # CONFIG_PARTITION_ADVANCED is not set CONFIG_MSDOS_PARTITION=y -# CONFIG_NLS is not set +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +CONFIG_NLS_CODEPAGE_950=y +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_UTF8 is not set # # Console drivers # +CONFIG_PC_KEYMAP=y # CONFIG_VGA_CONSOLE is not set -# CONFIG_FB is not set +CONFIG_FB=y # # Frame-buffer support # -# CONFIG_FB is not set +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +CONFIG_FB_MQ200=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +# CONFIG_FBCON_CFB8 is not set +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set # # Sound # -# CONFIG_SOUND is not set +CONFIG_SOUND=y +CONFIG_SOUND_UDA1341=y +# CONFIG_SOUND_SA1100_SSP is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_TVMIXER is not set # # USB support @@ -483,9 +698,12 @@ # # Kernel hacking # -CONFIG_FRAME_POINTER=y +# CONFIG_NO_FRAME_POINTER is not set CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_INFO=y # CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set # CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/pfs168_mqtft linux/arch/arm/def-configs/pfs168_mqtft --- v2.4.8/linux/arch/arm/def-configs/pfs168_mqtft Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/pfs168_mqtft Sun Aug 12 11:13:59 2001 @@ -0,0 +1,793 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_PFS168=y +CONFIG_SA1111=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=m +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y +CONFIG_UCB1200=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=m +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +CONFIG_PFS168_DTMF=y +CONFIG_PFS168_MISC=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ASSABET is not set +CONFIG_I2C_PFS168=y +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_SENSORS=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_M41T11=y +CONFIG_I2C_X9221=y +CONFIG_I2C_PCF8574=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=m + +# +# PCMCIA character device support +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +CONFIG_FB_MQ200=y +# CONFIG_PFS168_MQVGA is not set +CONFIG_PFS168_MQTFT=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_NET1080 is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/pfs168_mqvga linux/arch/arm/def-configs/pfs168_mqvga --- v2.4.8/linux/arch/arm/def-configs/pfs168_mqvga Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/pfs168_mqvga Sun Aug 12 11:13:59 2001 @@ -0,0 +1,793 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_PFS168=y +CONFIG_SA1111=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=m +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y +CONFIG_UCB1200=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=m +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +CONFIG_PFS168_DTMF=y +CONFIG_PFS168_MISC=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ASSABET is not set +CONFIG_I2C_PFS168=y +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_SENSORS=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_M41T11=y +CONFIG_I2C_X9221=y +CONFIG_I2C_PCF8574=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=m + +# +# PCMCIA character device support +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_SA1100 is not set +CONFIG_FB_MQ200=y +CONFIG_PFS168_MQVGA=y +# CONFIG_PFS168_MQTFT is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_NET1080 is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/pfs168_sastn linux/arch/arm/def-configs/pfs168_sastn --- v2.4.8/linux/arch/arm/def-configs/pfs168_sastn Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/pfs168_sastn Sun Aug 12 11:13:59 2001 @@ -0,0 +1,785 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_PFS168=y +CONFIG_SA1111=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=m +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y +CONFIG_UCB1200=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=m +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +CONFIG_PFS168_DTMF=y +CONFIG_PFS168_MISC=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ASSABET is not set +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_NET1080 is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/pfs168_satft linux/arch/arm/def-configs/pfs168_satft --- v2.4.8/linux/arch/arm/def-configs/pfs168_satft Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/pfs168_satft Sun Aug 12 11:13:59 2001 @@ -0,0 +1,793 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_PFS168=y +CONFIG_SA1111=y +CONFIG_SA1100_USB=m +CONFIG_SA1100_USB_NETLINK=m +CONFIG_SA1100_USB_CHAR=m +CONFIG_SA1100_FREQUENCY_SCALE=m +# CONFIG_SA1100_VOLTAGE_SCALE is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y + +# +# General setup +# + +# +# Please ensure that you have read the help on the next option +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=m +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="root=/dev/nfs" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y +CONFIG_UCB1200=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# RAM/ROM Device Drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Linearly Mapped Flash Device Drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_CSTM_CFI_JEDEC is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PPP=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +CONFIG_PCMCIA_SMC91C92=m +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m +CONFIG_IRPORT_SIR=m + +# +# FIR device drivers +# +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +CONFIG_SA1100_FIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=m + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=m +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=y +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=y +# CONFIG_SERIAL_CONSOLE is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +CONFIG_PFS168_DTMF=y +CONFIG_PFS168_MISC=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_I2C_ASSABET is not set +CONFIG_I2C_PFS168=y +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_SENSORS=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_EEPROM=y +CONFIG_I2C_M41T11=y +CONFIG_I2C_X9221=y +CONFIG_I2C_PCF8574=y + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +CONFIG_PCMCIA_SERIAL=m + +# +# PCMCIA character device support +# +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set +CONFIG_FB=y + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_PFS168_SASTN is not set +CONFIG_PFS168_SATFT=y +# CONFIG_FB_MQ200 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_CFB24=y +CONFIG_FBCON_CFB32=y +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_NET1080 is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB misc drivers +# +# CONFIG_USB_RIO500 is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/pleb linux/arch/arm/def-configs/pleb --- v2.4.8/linux/arch/arm/def-configs/pleb Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/pleb Sun Aug 12 17:36:24 2001 @@ -0,0 +1,535 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_ANAKIN is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +CONFIG_SA1100_PLEB=y +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0,9600" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_CFI_INTELEXT is not set +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=m +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +CONFIG_INET_ECN=y +CONFIG_SYN_COOKIES=y +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +CONFIG_DUMMY=m +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +# CONFIG_SERIAL_SA1100_OLD is not set +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +# CONFIG_UCB1200 is not set +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_BITSY is not set +CONFIG_PROFILER=y +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_TMPFS=y +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/rpc linux/arch/arm/def-configs/rpc --- v2.4.8/linux/arch/arm/def-configs/rpc Mon Nov 27 17:07:59 2000 +++ linux/arch/arm/def-configs/rpc Sun Aug 12 11:13:59 2001 @@ -6,6 +6,8 @@ # CONFIG_SBUS is not set # CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # # Code maturity level options @@ -27,27 +29,62 @@ # CONFIG_ARCH_CLPS7500 is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set CONFIG_ARCH_RPC=y # CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_ANAKIN is not set # # Archimedes/A5000 Implementations # # +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# # Footbridge Implementations # +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set # # SA11x0 Implementations # +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set # # CLPS711X/EP721X Implementations # +# CONFIG_ARCH_P720T is not set CONFIG_ARCH_ACORN=y # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -59,15 +96,19 @@ # Processor Type # CONFIG_CPU_32v3=y -CONFIG_CPU_ARM6=y -CONFIG_CPU_ARM7=y +# CONFIG_CPU_32v4 is not set +CONFIG_CPU_ARM610=y +CONFIG_CPU_ARM710=y +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set CONFIG_CPU_SA110=y +# CONFIG_CPU_SA1100 is not set # CONFIG_DISCONTIGMEM is not set # # General setup # -# CONFIG_ANGELBOOT is not set # CONFIG_PCI is not set # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set @@ -77,7 +118,8 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -# CONFIG_NWFPE is not set +CONFIG_FPE_NWFPE=y +CONFIG_FPE_FASTFPE=y CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set CONFIG_BINFMT_AOUT=y @@ -85,15 +127,15 @@ # CONFIG_BINFMT_MISC is not set # CONFIG_PM is not set # CONFIG_ARTHUR is not set -# CONFIG_ALIGNMENT_TRAP is not set +CONFIG_ALIGNMENT_TRAP=y # # Parallel port support # CONFIG_PARPORT=y CONFIG_PARPORT_PC=y -# CONFIG_PARPORT_PC_FIFO is not set -CONFIG_PARPORT_PC_SUPERIO=y +CONFIG_PARPORT_PC_FIFO=y +# CONFIG_PARPORT_PC_SUPERIO is not set # CONFIG_PARPORT_ARC is not set # CONFIG_PARPORT_AMIGA is not set # CONFIG_PARPORT_MFC3 is not set @@ -108,6 +150,64 @@ # CONFIG_MTD is not set # +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_CFI_INTELEXT is not set +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_ARMFLASH is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_NAND_SPIA is not set + +# # Plug and Play configuration # # CONFIG_PNP is not set @@ -129,6 +229,17 @@ CONFIG_BLK_DEV_INITRD=y # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# # Acorn-specific block devices # @@ -218,6 +329,7 @@ # CONFIG_PLIP is not set CONFIG_PPP=m # CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set # CONFIG_PPP_ASYNC is not set # CONFIG_PPP_SYNC_TTY is not set # CONFIG_PPP_DEFLATE is not set @@ -313,6 +425,7 @@ CONFIG_BLK_DEV_SD=y CONFIG_SD_EXTRA_DEVS=8 CONFIG_CHR_DEV_ST=m +# CONFIG_CHR_DEV_OSST is not set CONFIG_BLK_DEV_SR=y CONFIG_BLK_DEV_SR_VENDOR=y CONFIG_SR_EXTRA_DEVS=2 @@ -335,6 +448,7 @@ # CONFIG_SCSI_AHA1542 is not set # CONFIG_SCSI_AHA1740 is not set # CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set @@ -415,7 +529,17 @@ # CONFIG_SERIAL_MULTIPORT is not set # CONFIG_HUB6 is not set # CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_UNIX98_PTYS is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 CONFIG_PRINTER=m # CONFIG_LP_CONSOLE is not set # CONFIG_PPDEV is not set @@ -483,6 +607,8 @@ # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set CONFIG_AUTOFS4_FS=m +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set CONFIG_ADFS_FS=y # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set @@ -494,11 +620,14 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set # CONFIG_RAMFS is not set CONFIG_ISO9660_FS=y CONFIG_JOLIET=y # CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -506,7 +635,7 @@ # CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_MOUNT is not set # CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set +CONFIG_DEVPTS_FS=y # CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_RW is not set # CONFIG_ROMFS_FS is not set @@ -537,8 +666,6 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set @@ -557,11 +684,13 @@ CONFIG_MAC_PARTITION=y CONFIG_MSDOS_PARTITION=y CONFIG_BSD_DISKLABEL=y +# CONFIG_MINIX_SUBPARTITION is not set CONFIG_SOLARIS_X86_PARTITION=y # CONFIG_UNIXWARE_DISKLABEL is not set CONFIG_SGI_PARTITION=y # CONFIG_ULTRIX_PARTITION is not set CONFIG_SUN_PARTITION=y +# CONFIG_SMB_NLS is not set CONFIG_NLS=y # @@ -583,11 +712,13 @@ CONFIG_NLS_CODEPAGE_865=m CONFIG_NLS_CODEPAGE_866=m CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_874=m -# CONFIG_NLS_CODEPAGE_932 is not set # CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set # CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +# CONFIG_NLS_CODEPAGE_1251 is not set CONFIG_NLS_ISO8859_1=m CONFIG_NLS_ISO8859_2=m CONFIG_NLS_ISO8859_3=m @@ -595,11 +726,12 @@ CONFIG_NLS_ISO8859_5=m CONFIG_NLS_ISO8859_6=m CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_8=m CONFIG_NLS_ISO8859_9=m +# CONFIG_NLS_ISO8859_13 is not set # CONFIG_NLS_ISO8859_14 is not set # CONFIG_NLS_ISO8859_15 is not set CONFIG_NLS_KOI8_R=m +# CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_UTF8 is not set # @@ -616,6 +748,8 @@ # CONFIG_FB_CLPS711X is not set # CONFIG_FB_CYBER2000 is not set # CONFIG_FB_SA1100 is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set # CONFIG_FB_VIRTUAL is not set CONFIG_FBCON_ADVANCED=y CONFIG_FBCON_MFB=y @@ -656,6 +790,8 @@ # CONFIG_SOUND_ES1371 is not set # CONFIG_SOUND_ESSSOLO1 is not set # CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set @@ -671,7 +807,6 @@ # CONFIG_SOUND_CS4232 is not set # CONFIG_SOUND_SSCAPE is not set # CONFIG_SOUND_GUS is not set -# CONFIG_SOUND_ICH is not set # CONFIG_SOUND_VMIDI is not set # CONFIG_SOUND_TRIX is not set # CONFIG_SOUND_MSS is not set @@ -688,10 +823,12 @@ # CONFIG_SOUND_YM3812 is not set # CONFIG_SOUND_OPL3SA1 is not set # CONFIG_SOUND_OPL3SA2 is not set -# CONFIG_SOUND_YMPCI is not set +# CONFIG_SOUND_YMFPCI is not set +# CONFIG_SOUND_YMFPCI_LEGACY is not set # CONFIG_SOUND_UART6850 is not set # CONFIG_SOUND_AEDSP16 is not set CONFIG_SOUND_VIDC=m +# CONFIG_SOUND_WAVEARTIST is not set # CONFIG_SOUND_TVMIXER is not set # @@ -702,9 +839,12 @@ # # Kernel hacking # -CONFIG_FRAME_POINTER=y +# CONFIG_NO_FRAME_POINTER is not set CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/shark linux/arch/arm/def-configs/shark --- v2.4.8/linux/arch/arm/def-configs/shark Mon Sep 18 15:15:24 2000 +++ linux/arch/arm/def-configs/shark Sun Aug 12 11:13:59 2001 @@ -2,8 +2,12 @@ # Automatically generated make config: don't edit # CONFIG_ARM=y +# CONFIG_EISA is not set # CONFIG_SBUS is not set +# CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # # Code maturity level options @@ -21,35 +25,95 @@ # # System Type # +# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FTVPCI is not set -# CONFIG_ARCH_TBOX is not set -CONFIG_ARCH_SHARK=y # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set +CONFIG_ARCH_SHARK=y + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set # CONFIG_FOOTBRIDGE_ADDIN is not set CONFIG_CPU_32=y # CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set CONFIG_CPU_SA110=y +# CONFIG_CPU_SA1100 is not set # CONFIG_DISCONTIGMEM is not set -CONFIG_PCI=y -CONFIG_ISA=y -CONFIG_ISA_DMA=y -CONFIG_PC_KEYB=y -CONFIG_PC_KEYMAP=y # # General setup # +CONFIG_PCI=y +CONFIG_ISA=y +CONFIG_ISA_DMA=y # CONFIG_PCI_NAMES is not set # CONFIG_HOTPLUG is not set # CONFIG_PCMCIA is not set @@ -57,7 +121,8 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_NWFPE=y +# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_FASTFPE=y CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set # CONFIG_BINFMT_AOUT is not set @@ -77,6 +142,7 @@ CONFIG_PARPORT_PC=y # CONFIG_PARPORT_PC_FIFO is not set # CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_ARC is not set # CONFIG_PARPORT_AMIGA is not set # CONFIG_PARPORT_MFC3 is not set # CONFIG_PARPORT_ATARI is not set @@ -85,14 +151,10 @@ # CONFIG_PARPORT_1284 is not set # -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# # Plug and Play configuration # # CONFIG_PNP is not set +# CONFIG_ISAPNP is not set # # Block devices @@ -101,16 +163,26 @@ # CONFIG_BLK_DEV_XD is not set # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set CONFIG_BLK_DEV_LOOP=y # CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_LVM is not set -# CONFIG_BLK_DEV_MD is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 # CONFIG_BLK_DEV_INITRD is not set # +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# # Networking options # # CONFIG_PACKET is not set @@ -122,10 +194,8 @@ # CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set # CONFIG_IP_PNP is not set -# CONFIG_IP_ROUTER is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set -# CONFIG_IP_ALIAS is not set # CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set # CONFIG_IPV6 is not set @@ -142,6 +212,7 @@ # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_FASTROUTE is not set @@ -164,19 +235,25 @@ # CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set -# CONFIG_NET_SB1000 is not set +# CONFIG_TUN is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set +# CONFIG_SUNLANCE is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_RACAL is not set # CONFIG_AT1700 is not set # CONFIG_DEPCA is not set +# CONFIG_HP100 is not set # CONFIG_NET_ISA is not set CONFIG_NET_PCI=y # CONFIG_PCNET32 is not set @@ -184,28 +261,39 @@ # CONFIG_AC3200 is not set # CONFIG_APRICOT is not set CONFIG_CS89x0=y -# CONFIG_DE4X5 is not set # CONFIG_TULIP is not set +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +# CONFIG_DE4X5 is not set # CONFIG_DGRS is not set # CONFIG_DM9102 is not set # CONFIG_EEPRO100 is not set # CONFIG_LNE390 is not set -# CONFIG_NE3210 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set # CONFIG_NE2K_PCI is not set -# CONFIG_RTL8129 is not set +# CONFIG_NE3210 is not set +# CONFIG_ES3210 is not set # CONFIG_8139TOO is not set +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set # CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set # CONFIG_TLAN is not set # CONFIG_VIA_RHINE is not set -# CONFIG_ES3210 is not set -# CONFIG_EPIC100 is not set +# CONFIG_WINBOND_840 is not set # CONFIG_NET_POCKET is not set # # Ethernet (1000 Mbit) # -# CONFIG_YELLOWFIN is not set # CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set @@ -230,7 +318,6 @@ # Wan interfaces # # CONFIG_WAN is not set -# CONFIG_ASH is not set # # Amateur Radio support @@ -260,7 +347,15 @@ CONFIG_BLK_DEV_IDEDISK=y # CONFIG_IDEDISK_MULTI_MODE is not set # CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set # CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +# CONFIG_BLK_DEV_IDECS is not set CONFIG_BLK_DEV_IDECD=y # CONFIG_BLK_DEV_IDETAPE is not set CONFIG_BLK_DEV_IDEFLOPPY=y @@ -270,6 +365,8 @@ # IDE chipset support/bugfixes # # CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set # CONFIG_BLK_DEV_RZ1000 is not set # CONFIG_BLK_DEV_IDEPCI is not set # CONFIG_BLK_DEV_SL82C105 is not set @@ -289,6 +386,7 @@ CONFIG_BLK_DEV_SD=m CONFIG_SD_EXTRA_DEVS=40 CONFIG_CHR_DEV_ST=m +# CONFIG_CHR_DEV_OSST is not set CONFIG_BLK_DEV_SR=m # CONFIG_BLK_DEV_SR_VENDOR is not set CONFIG_SR_EXTRA_DEVS=2 @@ -312,11 +410,13 @@ # CONFIG_SCSI_AHA1542 is not set # CONFIG_SCSI_AHA1740 is not set # CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set # CONFIG_SCSI_MEGARAID is not set # CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_DTC3280 is not set # CONFIG_SCSI_EATA is not set @@ -330,8 +430,6 @@ # CONFIG_SCSI_PPA is not set # CONFIG_SCSI_IMM is not set # CONFIG_SCSI_NCR53C406A is not set -# CONFIG_SCSI_SYM53C416 is not set -# CONFIG_SCSI_SIM710 is not set # CONFIG_SCSI_NCR53C7xx is not set # CONFIG_SCSI_NCR53C8XX is not set # CONFIG_SCSI_SYM53C8XX is not set @@ -343,6 +441,8 @@ # CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_SIM710 is not set +# CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_T128 is not set # CONFIG_SCSI_U14_34F is not set @@ -357,6 +457,11 @@ # I2O device support # # CONFIG_I2O is not set +# CONFIG_I2O_PCI is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set # # ISDN subsystem @@ -364,6 +469,11 @@ # CONFIG_ISDN is not set # +# Input core support +# +# CONFIG_INPUT is not set + +# # Character devices # CONFIG_VT=y @@ -372,7 +482,19 @@ CONFIG_SERIAL_CONSOLE=y # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_UNIX98_PTYS is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 CONFIG_PRINTER=m # CONFIG_LP_CONSOLE is not set # CONFIG_PPDEV is not set @@ -394,62 +516,20 @@ # # Joysticks # -CONFIG_JOYSTICK=y -CONFIG_INPUT_JOYDEV=y - -# -# Game port support -# -# CONFIG_INPUT_NS558 is not set -# CONFIG_INPUT_LIGHTNING is not set -# CONFIG_INPUT_PCIGAME is not set +# CONFIG_JOYSTICK is not set # -# Gameport joysticks +# Input core support is needed for joysticks # -# CONFIG_INPUT_ANALOG is not set -# CONFIG_INPUT_A3D is not set -# CONFIG_INPUT_ADI is not set -# CONFIG_INPUT_COBRA is not set -# CONFIG_INPUT_GF2K is not set -# CONFIG_INPUT_GRIP is not set -# CONFIG_INPUT_INTERACT is not set -# CONFIG_INPUT_TMDC is not set -# CONFIG_INPUT_SIDEWINDER is not set - -# -# Serial port support -# -# CONFIG_INPUT_SERPORT is not set - -# -# Serial port joysticks -# -# CONFIG_INPUT_WARRIOR is not set -# CONFIG_INPUT_MAGELLAN is not set -# CONFIG_INPUT_SPACEORB is not set -# CONFIG_INPUT_SPACEBALL is not set -# CONFIG_INPUT_IFORCE_232 is not set - -# -# Parallel port joysticks -# -# CONFIG_INPUT_DB9 is not set -# CONFIG_INPUT_GAMECON is not set -# CONFIG_INPUT_TURBOGRAFX is not set # CONFIG_QIC02_TAPE is not set # # Watchdog Cards # # CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set # CONFIG_NVRAM is not set CONFIG_RTC=y - -# -# Video For Linux -# -# CONFIG_VIDEO_DEV is not set # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set @@ -462,12 +542,20 @@ # CONFIG_DRM is not set # +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# # File systems # # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set # CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set # CONFIG_BFS_FS is not set @@ -476,22 +564,32 @@ # CONFIG_UMSDOS_FS is not set CONFIG_VFAT_FS=y # CONFIG_EFS_FS is not set -CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set # CONFIG_RAMFS is not set CONFIG_ISO9660_FS=y CONFIG_JOLIET=y # CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set +CONFIG_DEVFS_FS=y +CONFIG_DEVFS_MOUNT=y +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set # CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set # CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set # CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set # # Network File Systems @@ -499,11 +597,21 @@ # CONFIG_CODA_FS is not set CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set # CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set CONFIG_SUNRPC=y CONFIG_LOCKD=y # CONFIG_SMB_FS is not set # CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set # # Partition Types @@ -516,11 +624,13 @@ # CONFIG_MAC_PARTITION is not set CONFIG_MSDOS_PARTITION=y # CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set CONFIG_NLS=y # @@ -542,11 +652,13 @@ # CONFIG_NLS_CODEPAGE_865 is not set # CONFIG_NLS_CODEPAGE_866 is not set # CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set # CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set # CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set CONFIG_NLS_ISO8859_1=y # CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_3 is not set @@ -554,18 +666,20 @@ # CONFIG_NLS_ISO8859_5 is not set # CONFIG_NLS_ISO8859_6 is not set # CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set # CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set # CONFIG_NLS_ISO8859_14 is not set # CONFIG_NLS_ISO8859_15 is not set # CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_UTF8 is not set # # Console drivers # +CONFIG_PC_KEYB=y +CONFIG_PC_KEYMAP=y # CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y # # Frame-buffer support @@ -575,7 +689,12 @@ # CONFIG_FB_RIVA is not set # CONFIG_FB_CLGEN is not set # CONFIG_FB_PM2 is not set +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set CONFIG_FB_CYBER2000=y +# CONFIG_FB_SA1100 is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set # CONFIG_FB_MATROX is not set # CONFIG_FB_ATY is not set # CONFIG_FB_ATY128 is not set @@ -597,15 +716,20 @@ CONFIG_SOUND=m # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set # CONFIG_SOUND_ES1371 is not set # CONFIG_SOUND_ESSSOLO1 is not set # CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set CONFIG_SOUND_OSS=m # CONFIG_SOUND_TRACEINIT is not set # CONFIG_SOUND_DMAP is not set @@ -616,7 +740,6 @@ # CONFIG_SOUND_CS4232 is not set # CONFIG_SOUND_SSCAPE is not set # CONFIG_SOUND_GUS is not set -# CONFIG_SOUND_ICH is not set # CONFIG_SOUND_VMIDI is not set # CONFIG_SOUND_TRIX is not set # CONFIG_SOUND_MSS is not set @@ -624,8 +747,8 @@ # CONFIG_SOUND_NM256 is not set # CONFIG_SOUND_MAD16 is not set # CONFIG_SOUND_PAS is not set +# CONFIG_PAS_JOYSTICK is not set # CONFIG_SOUND_PSS is not set -# CONFIG_SOUND_SOFTOSS is not set CONFIG_SOUND_SB=m # CONFIG_SOUND_AWE32_SYNTH is not set # CONFIG_SOUND_WAVEFRONT is not set @@ -633,11 +756,12 @@ # CONFIG_SOUND_YM3812 is not set # CONFIG_SOUND_OPL3SA1 is not set # CONFIG_SOUND_OPL3SA2 is not set -# CONFIG_SOUND_YMPCI is not set +# CONFIG_SOUND_YMFPCI is not set +# CONFIG_SOUND_YMFPCI_LEGACY is not set # CONFIG_SOUND_UART6850 is not set # CONFIG_SOUND_AEDSP16 is not set -# CONFIG_SOUND_VIDC is not set # CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set # # USB support @@ -645,11 +769,19 @@ # CONFIG_USB is not set # +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# # Kernel hacking # -# CONFIG_FRAME_POINTER is not set +CONFIG_NO_FRAME_POINTER=y CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set # CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.8/linux/arch/arm/def-configs/sherman linux/arch/arm/def-configs/sherman --- v2.4.8/linux/arch/arm/def-configs/sherman Mon Nov 27 17:07:59 2000 +++ linux/arch/arm/def-configs/sherman Sun Aug 12 11:13:59 2001 @@ -34,7 +34,7 @@ # Code maturity level options # CONFIG_EXPERIMENTAL=y -# CONFIG_ALIGNMENT_TRAP is not set +CONFIG_ALIGNMENT_TRAP=y # CONFIG_TEXT_SECTIONS is not set # diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/Makefile linux/arch/arm/kernel/Makefile --- v2.4.8/linux/arch/arm/kernel/Makefile Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/kernel/Makefile Sun Aug 12 11:13:59 2001 @@ -31,9 +31,9 @@ # Object file lists. -obj-y := arch.o dma.o $(ENTRY_OBJ) irq.o process.o ptrace.o \ - semaphore.o setup.o signal.o sys_arm.o time.o traps.o \ - $(O_OBJS_$(MACHINE)) +obj-y := arch.o compat.o dma.o $(ENTRY_OBJ) entry-common.o irq.o \ + process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \ + time.o traps.o $(O_OBJS_$(MACHINE)) obj-m := obj-n := obj- := @@ -41,7 +41,8 @@ export-objs := armksyms.o dma.o ecard.o fiq.o io.o oldlatches.o time.o no-irq-arch := $(CONFIG_ARCH_INTEGRATOR) $(CONFIG_ARCH_CLPS711X) \ - $(CONFIG_ARCH_FOOTBRIDGE) $(CONFIG_ARCH_EBSA110) + $(CONFIG_ARCH_FOOTBRIDGE) $(CONFIG_ARCH_EBSA110) \ + $(CONFIG_ARCH_SA1100) ifneq ($(findstring y,$(no-irq-arch)),y) obj-y += irq-arch.o @@ -64,5 +65,6 @@ include $(TOPDIR)/Rules.make # Spell out some dependencies that `make dep' doesn't spot -entry-armv.o: calls.S $(TOPDIR)/include/asm-arm/constants.h -entry-armo.o: calls.S $(TOPDIR)/include/asm-arm/constants.h +entry-armv.o: entry-header.S $(TOPDIR)/include/asm-arm/constants.h +entry-armo.o: entry-header.S $(TOPDIR)/include/asm-arm/constants.h +entry-common.o: entry-header.S calls.S $(TOPDIR)/include/asm-arm/constants.h diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/arch.c linux/arch/arm/kernel/arch.c --- v2.4.8/linux/arch/arm/kernel/arch.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/kernel/arch.c Sun Aug 12 11:13:59 2001 @@ -1,10 +1,7 @@ /* * linux/arch/arm/kernel/arch.c * - * Architecture specific fixups. This is where any - * parameters in the params struct are fixed up, or - * any additional architecture specific information - * is pulled from the params struct. + * Architecture specific fixups. */ #include #include @@ -28,46 +25,41 @@ unsigned int memc_ctrl_reg; unsigned int number_mfm_drives; -static void __init -fixup_acorn(struct machine_desc *desc, struct param_struct *params, - char **cmdline, struct meminfo *mi) +static int __init parse_tag_acorn(const struct tag *tag) { - if (machine_is_riscpc()) { - int i; + memc_ctrl_reg = tag->u.acorn.memc_control_reg; + number_mfm_drives = tag->u.acorn.adfsdrives; - /* - * RiscPC can't handle half-word loads and stores - */ - elf_hwcap &= ~HWCAP_HALF; - - switch (params->u1.s.pages_in_vram) { - case 512: - vram_size += PAGE_SIZE * 256; - case 256: - vram_size += PAGE_SIZE * 256; - default: - break; - } - - if (vram_size) { - desc->video_start = 0x02000000; - desc->video_end = 0x02000000 + vram_size; - } - - for (i = 0; i < 4; i++) { - mi->bank[i].start = PHYS_OFFSET + (i << 26); - mi->bank[i].node = 0; - mi->bank[i].size = - params->u1.s.pages_in_bank[i] * - params->u1.s.page_size; - } - mi->nr_banks = 4; + switch (tag->u.acorn.vram_pages) { + case 512: + vram_size += PAGE_SIZE * 256; + case 256: + vram_size += PAGE_SIZE * 256; + default: + break; + } +#if 0 + if (vram_size) { + desc->video_start = 0x02000000; + desc->video_end = 0x02000000 + vram_size; } - memc_ctrl_reg = params->u1.s.memc_control_reg; - number_mfm_drives = (params->u1.s.adfsdrives >> 3) & 3; +#endif + return 0; } +__tagtable(ATAG_ACORN, parse_tag_acorn); + #ifdef CONFIG_ARCH_RPC +static void __init +fixup_riscpc(struct machine_desc *desc, struct param_struct *unusd, + char **cmdline, struct meminfo *mi) +{ + /* + * RiscPC can't handle half-word loads and stores + */ + elf_hwcap &= ~HWCAP_HALF; +} + extern void __init rpc_map_io(void); MACHINE_START(RISCPC, "Acorn-RiscPC") @@ -76,7 +68,7 @@ BOOT_PARAMS(0x10000100) DISABLE_PARPORT(0) DISABLE_PARPORT(1) - FIXUP(fixup_acorn) + FIXUP(fixup_riscpc) MAPIO(rpc_map_io) INITIRQ(genarch_init_irq) MACHINE_END @@ -85,7 +77,6 @@ MACHINE_START(ARCHIMEDES, "Acorn-Archimedes") MAINTAINER("Dave Gilbert") BOOT_PARAMS(0x0207c000) - FIXUP(fixup_acorn) INITIRQ(genarch_init_irq) MACHINE_END #endif @@ -93,7 +84,6 @@ MACHINE_START(A5K, "Acorn-A5000") MAINTAINER("Russell King") BOOT_PARAMS(0x0207c000) - FIXUP(fixup_acorn) INITIRQ(genarch_init_irq) MACHINE_END #endif @@ -103,7 +93,7 @@ extern void __init l7200_map_io(void); static void __init -fixup_l7200(struct machine_desc *desc, struct param_struct *params, +fixup_l7200(struct machine_desc *desc, struct param_struct *unused, char **cmdline, struct meminfo *mi) { mi->nr_banks = 1; diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/armksyms.c linux/arch/arm/kernel/armksyms.c --- v2.4.8/linux/arch/arm/kernel/armksyms.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/kernel/armksyms.c Sun Aug 12 11:13:59 2001 @@ -76,6 +76,12 @@ extern void fpundefinstr(void); extern void fp_enter(void); +/* + * This has a special calling convention; it doesn't + * modify any of the usual registers, except for LR. + */ +extern void __do_softirq(void); + #define EXPORT_SYMBOL_ALIAS(sym,orig) \ const char __kstrtab_##sym##[] \ __attribute__((section(".kstrtab"))) = \ @@ -101,6 +107,8 @@ EXPORT_SYMBOL(kd_mksound); #endif +EXPORT_SYMBOL_NOVERS(__do_softirq); + /* platform dependent support */ EXPORT_SYMBOL(dump_thread); EXPORT_SYMBOL(dump_fpu); @@ -113,7 +121,6 @@ EXPORT_SYMBOL(system_rev); EXPORT_SYMBOL(system_serial_low); EXPORT_SYMBOL(system_serial_high); -EXPORT_SYMBOL(mem_fclk_21285); EXPORT_SYMBOL(__bug); EXPORT_SYMBOL(__bad_xchg); EXPORT_SYMBOL(__readwrite_bug); @@ -130,12 +137,24 @@ EXPORT_SYMBOL(__csum_ipv6_magic); /* io */ -EXPORT_SYMBOL(outsb); -EXPORT_SYMBOL(outsw); -EXPORT_SYMBOL(outsl); -EXPORT_SYMBOL(insb); -EXPORT_SYMBOL(insw); -EXPORT_SYMBOL(insl); +#ifndef __raw_readsb +EXPORT_SYMBOL_NOVERS(__raw_readsb); +#endif +#ifndef __raw_readsw +EXPORT_SYMBOL_NOVERS(__raw_readsw); +#endif +#ifndef __raw_readsl +EXPORT_SYMBOL_NOVERS(__raw_readsl); +#endif +#ifndef __raw_writesb +EXPORT_SYMBOL_NOVERS(__raw_writesb); +#endif +#ifndef __raw_writesw +EXPORT_SYMBOL_NOVERS(__raw_writesw); +#endif +#ifndef __raw_writesl +EXPORT_SYMBOL_NOVERS(__raw_writesl); +#endif /* address translation */ #ifndef __virt_to_phys__is_a_macro @@ -240,8 +259,5 @@ EXPORT_SYMBOL_NOVERS(__down_interruptible_failed); EXPORT_SYMBOL_NOVERS(__down_trylock_failed); EXPORT_SYMBOL_NOVERS(__up_wakeup); -EXPORT_SYMBOL_NOVERS(__down_read_failed); -EXPORT_SYMBOL_NOVERS(__down_write_failed); -EXPORT_SYMBOL_NOVERS(__rwsem_wake); EXPORT_SYMBOL(get_wchan); diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/bios32.c linux/arch/arm/kernel/bios32.c --- v2.4.8/linux/arch/arm/kernel/bios32.c Wed Jul 25 17:10:17 2001 +++ linux/arch/arm/kernel/bios32.c Sun Aug 12 11:13:59 2001 @@ -527,14 +527,6 @@ } /** - * pcibios_set_master - Setup device for bus mastering. - * @dev: PCI device to be setup - */ -void pcibios_set_master(struct pci_dev *dev) -{ -} - -/** * pcibios_enable_device - Enable I/O and memory. * @dev: PCI device to be enabled */ diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/compat.c linux/arch/arm/kernel/compat.c --- v2.4.8/linux/arch/arm/kernel/compat.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/kernel/compat.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,125 @@ +/* + * linux/arch/arm/kernel/compat.c + * + * Copyright (C) 2001 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * We keep the old params compatibility cruft in one place (here) + * so we don't end up with lots of + */ +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +static struct tag * __init memtag(struct tag *tag, unsigned long start, unsigned long size) +{ + tag = tag_next(tag); + tag->hdr.tag = ATAG_MEM; + tag->hdr.size = tag_size(tag_mem32); + tag->u.mem.size = size; + tag->u.mem.start = start; + + return tag; +} + +static void __init build_tag_list(struct param_struct *params, void *taglist, int mem_init) +{ + struct tag *tag = taglist; + + printk(KERN_DEBUG "Converting old-style param struct to taglist\n"); + + if (params->u1.s.page_size != PAGE_SIZE) { + printk(KERN_WARNING "Warning: bad configuration page, " + "trying to continue\n"); + return; + } + + tag->hdr.tag = ATAG_CORE; + tag->hdr.size = tag_size(tag_core); + tag->u.core.flags = params->u1.s.flags & FLAG_READONLY; + tag->u.core.pagesize = params->u1.s.page_size; + tag->u.core.rootdev = params->u1.s.rootdev; + + tag = tag_next(tag); + tag->hdr.tag = ATAG_RAMDISK; + tag->hdr.size = tag_size(tag_ramdisk); + tag->u.ramdisk.flags = (params->u1.s.flags & FLAG_RDLOAD ? 1 : 0) | + (params->u1.s.flags & FLAG_RDPROMPT ? 2 : 0); + tag->u.ramdisk.size = params->u1.s.ramdisk_size; + tag->u.ramdisk.start = params->u1.s.rd_start; + + tag = tag_next(tag); + tag->hdr.tag = ATAG_INITRD; + tag->hdr.size = tag_size(tag_initrd); + tag->u.initrd.start = params->u1.s.initrd_start; + tag->u.initrd.size = params->u1.s.initrd_size; + + tag = tag_next(tag); + tag->hdr.tag = ATAG_SERIAL; + tag->hdr.size = tag_size(tag_serialnr); + tag->u.serialnr.low = params->u1.s.system_serial_low; + tag->u.serialnr.high = params->u1.s.system_serial_high; + + tag = tag_next(tag); + tag->hdr.tag = ATAG_REVISION; + tag->hdr.size = tag_size(tag_revision); + tag->u.revision.rev = params->u1.s.system_rev; + + if (mem_init) { +#ifdef CONFIG_ARCH_ACORN + if (machine_is_riscpc()) { + int i; + for (i = 0; i < 4; i++) + tag = memtag(tag, PHYS_OFFSET + (i << 26), + params->u1.s.pages_in_bank[i] * PAGE_SIZE); + } else +#endif + tag = memtag(tag, PHYS_OFFSET, params->u1.s.nr_pages * PAGE_SIZE); + } + +#ifdef CONFIG_FOOTBRIDGE + tag = tag_next(tag); + tag->hdr.tag = ATAG_MEMCLK; + tag->hdr.size = tag_size(tag_memclk); + tag->u.memclk.fmemclk = params->u1.s.mem_fclk_21285; +#endif + +#ifdef CONFIG_ARCH_ACORN + tag = tag_next(tag); + tag->hdr.tag = ATAG_ACORN; + tag->hdr.size = tag_size(tag_acorn); + tag->u.acorn.memc_control_reg = params->u1.s.memc_control_reg; + tag->u.acorn.vram_pages = params->u1.s.pages_in_vram; + tag->u.acorn.sounddefault = params->u1.s.sounddefault; + tag->u.acorn.adfsdrives = params->u1.s.adfsdrives; +#endif + + tag = tag_next(tag); + tag->hdr.tag = ATAG_CMDLINE; + tag->hdr.size = (strlen(params->commandline) + 3 + + sizeof(struct tag_header)) >> 2; + strcpy(tag->u.cmdline.cmdline, params->commandline); + + tag = tag_next(tag); + tag->hdr.tag = 0; + tag->hdr.size = 0; + + memmove(params, taglist, ((int)tag) - ((int)taglist) + + sizeof(struct tag_header)); +} + +void __init convert_to_tag_list(struct param_struct *params, int mem_init) +{ + build_tag_list(params, ¶ms->u2, mem_init); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/debug-armv.S linux/arch/arm/kernel/debug-armv.S --- v2.4.8/linux/arch/arm/kernel/debug-armv.S Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/kernel/debug-armv.S Sun Aug 12 11:13:59 2001 @@ -169,8 +169,8 @@ tst \rx, #1 @ MMU enabled? moveq \rx, #0x80000000 @ physical base address movne \rx, #0xf8000000 @ virtual address - add \rx, \rx, #0x00050000 @ Ser3 - @add \rx, \rx, #0x00010000 @ Ser1 + @add \rx, \rx, #0x00050000 @ Ser3 + add \rx, \rx, #0x00010000 @ Ser1 .endm .macro senduart,rd,rx @@ -300,6 +300,37 @@ tst \rd, #1 << 8 @ CTS bne 1001b 1002: + .endm + +#elif defined(CONFIG_ARCH_ANAKIN) + +//#//include + + .macro addruart,rx + mrc p15, 0, \rx, c1, c0 + tst \rx, #1 @ MMU enabled? + moveq \rx, #IO_START + movne \rx, #IO_BASE + add \rx, \rx, #UART0 + .endm + + .macro senduart,rd,rx + str \rd, [\rx, #0x14] @ tx + ldr \rd, [\rx, #0x18] + orr \rd, \rd, #SENDREQUEST + str \rd, [\rx, #0x18] + .endm + + .macro waituart,rd,rx +1001: ldr \rd, [\rx, #0x10] + tst \rd, #TXEMPTY + beq 1001b + .endm + + .macro busyuart,rd,rx +1001: ldr \rd, [\rx, #0x10] + tst \rd, #CTS + bne 1001b .endm #else diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/ecard.c linux/arch/arm/kernel/ecard.c --- v2.4.8/linux/arch/arm/kernel/ecard.c Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/kernel/ecard.c Sun Aug 12 11:13:59 2001 @@ -230,11 +230,13 @@ } #ifdef CONFIG_CPU_32 +#include + static pid_t ecard_pid; static wait_queue_head_t ecard_wait; static struct ecard_request *ecard_req; -static DECLARE_MUTEX_LOCKED(ecard_done_sem); +static DECLARE_COMPLETION(ecard_completion); /* * Set up the expansion card daemon's page tables. @@ -328,7 +330,7 @@ } while (req == NULL); ecard_do_request(req); - up(&ecard_done_sem); + complete(&ecard_completion); } } @@ -357,7 +359,7 @@ /* * Now wait for kecardd to run. */ - down(&ecard_done_sem); + wait_for_completion(&ecard_completion); } #else /* diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/entry-armo.S linux/arch/arm/kernel/entry-armo.S --- v2.4.8/linux/arch/arm/kernel/entry-armo.S Tue Mar 6 19:44:35 2001 +++ linux/arch/arm/kernel/entry-armo.S Sun Aug 12 11:13:59 2001 @@ -25,53 +25,11 @@ * Ok, so this file may be a mess, but its as efficient as possible while * adhering to the above criteria. */ -#include #include - -#include -#include -#include -#include - - .macro zero_fp -#ifndef CONFIG_NO_FRAME_POINTER - mov fp, #0 -#endif - .endm +#include "entry-header.S" .text -@ Bad Abort numbers -@ ----------------- -@ -#define BAD_PREFETCH 0 -#define BAD_DATA 1 -#define BAD_ADDREXCPTN 2 -#define BAD_IRQ 3 -#define BAD_UNDEFINSTR 4 - -@ -@ Stack format (ensured by USER_* and SVC_*) -@ -#define S_OLD_R0 64 -#define S_PSR 60 -#define S_PC 60 -#define S_LR 56 -#define S_SP 52 -#define S_IP 48 -#define S_FP 44 -#define S_R10 40 -#define S_R9 36 -#define S_R8 32 -#define S_R7 28 -#define S_R6 24 -#define S_R5 20 -#define S_R4 16 -#define S_R3 12 -#define S_R2 8 -#define S_R1 4 -#define S_R0 0 - #ifdef IOC_BASE /* IOC / IOMD based hardware */ .equ ioc_base_high, IOC_BASE & 0xff000000 @@ -141,49 +99,6 @@ * For entry-common.S */ - .macro save_user_regs - str r0, [sp, #-4]! - str lr, [sp, #-4]! - sub sp, sp, #15*4 - stmia sp, {r0 - lr}^ - mov r0, r0 - .endm - - .macro restore_user_regs - ldmia sp, {r0 - lr}^ - mov r0, r0 - ldr lr, [sp, #15*4] - add sp, sp, #15*4+8 - movs pc, lr - .endm - - .macro mask_pc, rd, rm - bic \rd, \rm, #PCMASK - .endm - - .macro arm700_bug_check, instr, temp - .endm - - .macro enable_irqs, temp - teqp pc, #0x00000003 - .endm - - .macro initialise_traps_extra - .endm - - .macro get_current_task, rd - mov \rd, sp, lsr #13 - mov \rd, \rd, lsl #13 - .endm - - /* - * Like adr, but force SVC mode (if required) - */ - .macro adrsvc, cond, reg, label - adr\cond \reg, \label - orr\cond \reg, \reg, #0x08000003 - .endm - #if 0 /* * Uncomment these if you wish to get more debugging into about data aborts. @@ -275,7 +190,7 @@ bl SYMBOL_NAME(do_undefinstr) SVC_RESTORE_ALL -#ifdef CONFIG_NWFPE +#if defined CONFIG_FPE_NWFPE || defined CONFIG_FPE_FASTFPE /* The FPE is always present */ .equ fpe_not_present, 0 #else @@ -334,7 +249,7 @@ mov r1, sp @ Tasks registers bl SYMBOL_NAME(do_PrefetchAbort) teq r0, #0 @ If non-zero, we believe this abort.. - bne ret_from_sys_call + bne ret_from_exception #ifdef DEBUG_UNDEF adr r0, t bl SYMBOL_NAME(printk) @@ -440,9 +355,10 @@ adr lr, 1b orr lr, lr, #0x08000003 @ Force SVC bne do_IRQ - mov r4, #0 + + mov why, #0 get_current_task r5 - b ret_with_reschedule + b ret_to_user irq_prio_table @@ -645,6 +561,19 @@ #endif b SYMBOL_NAME(do_DataAbort) + +/* + * This is the return code to user mode for abort handlers + */ +ENTRY(ret_from_exception) + get_current_task tsk + mov why, #0 + b ret_to_user + + .data +ENTRY(fp_enter) + .word fpe_not_present + .text /* * Register switch for older 26-bit only ARMs */ @@ -697,10 +626,6 @@ mov r0, #0 stmia r0, {r1 - r7, ip} ldmfd sp!, {r4 - r7, pc}^ - - .text - -#include "entry-common.S" .bss __temp_irq: .space 4 @ saved lr_irq diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/entry-armv.S linux/arch/arm/kernel/entry-armv.S --- v2.4.8/linux/arch/arm/kernel/entry-armv.S Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/kernel/entry-armv.S Sun Aug 12 11:13:59 2001 @@ -13,62 +13,8 @@ * Note: there is a StrongARM bug in the STMIA rn, {regs}^ instruction that causes * it to save wrong values... Be aware! */ -#include /* for CONFIG_ARCH_xxxx */ -#include - -#include -#include -#include -#include -#include -#include - - -#ifndef MODE_SVC -#define MODE_SVC 0x13 -#endif - - .macro zero_fp -#ifndef CONFIG_NO_FRAME_POINTER - mov fp, #0 -#endif - .endm - - .text - -@ Bad Abort numbers -@ ----------------- -@ -#define BAD_PREFETCH 0 -#define BAD_DATA 1 -#define BAD_ADDREXCPTN 2 -#define BAD_IRQ 3 -#define BAD_UNDEFINSTR 4 - -@ -@ Stack format (ensured by USER_* and SVC_*) -@ -#define S_FRAME_SIZE 72 -#define S_OLD_R0 68 -#define S_PSR 64 -#define S_PC 60 -#define S_LR 56 -#define S_SP 52 -#define S_IP 48 -#define S_FP 44 -#define S_R10 40 -#define S_R9 36 -#define S_R8 32 -#define S_R7 28 -#define S_R6 24 -#define S_R5 20 -#define S_R4 16 -#define S_R3 12 -#define S_R2 8 -#define S_R1 4 -#define S_R0 0 - -#define OFF_CR_ALIGNMENT(x) cr_alignment - x +#include +#include "entry-header.S" #ifdef IOC_BASE /* IOC / IOMD based hardware */ @@ -552,75 +498,36 @@ .macro irq_prio_table .endm -#else -#error Unknown architecture -#endif - -/*============================================================================ - * For entry-common.S - */ - - .macro save_user_regs - sub sp, sp, #S_FRAME_SIZE - stmia sp, {r0 - r12} @ Calling r0 - r12 - add r8, sp, #S_PC - stmdb r8, {sp, lr}^ @ Calling sp, lr - str lr, [r8, #0] @ Save calling PC - mrs r6, spsr - str r6, [r8, #4] @ Save CPSR - str r0, [r8, #8] @ Save OLD_R0 - .endm - - .macro restore_user_regs - ldr r0, [sp, #S_PSR] @ Get calling cpsr - mov ip, #I_BIT | MODE_SVC - msr cpsr_c, ip @ disable IRQs - msr spsr, r0 @ save in spsr_svc - ldmia sp, {r0 - lr}^ @ Get calling r0 - lr - mov r0, r0 - ldr lr, [sp, #S_PC] @ Get PC - add sp, sp, #S_FRAME_SIZE - movs pc, lr @ return & move spsr_svc into cpsr - .endm - - .macro mask_pc, rd, rm - .endm - - /* If we're optimising for StrongARM the resulting code won't - run on an ARM7 and we can save a couple of instructions. - --pb */ - .macro arm700_bug_check, instr, temp -#ifndef __ARM_ARCH_4__ - and \temp, \instr, #0x0f000000 @ check for SWI - teq \temp, #0x0f000000 - bne .Larm700bug -#endif - .endm +#elif defined(CONFIG_ARCH_ANAKIN) - .macro enable_irqs, temp - mrs \temp, cpsr - bic \temp, \temp, #I_BIT - msr cpsr, \temp + .macro disable_fiq .endm - .macro get_current_task, rd - mov \rd, sp, lsr #13 - mov \rd, \rd, lsl #13 + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp + mov \base, #IO_BASE + mov \irqstat, #INTERRUPT_CONTROLLER + ldr \tmp, =anakin_irq_mask + ldr \irqstat, [\base, \irqstat] + ldr \tmp, [\tmp] + ands \irqstat, \irqstat, \tmp + ldrne \tmp, =anakin_active_irqs + strne \irqstat, [\tmp] + movne \irqnr, #IRQ_ANAKIN .endm - /* - * Like adr, but force SVC mode (if required) - */ - .macro adrsvc, cond, reg, label - adr\cond \reg, \label + .macro irq_prio_table + .ltorg + .bss +ENTRY(anakin_irq_mask) + .word 0 +ENTRY(anakin_active_irqs) + .space 4 + .text .endm - .macro alignment_trap, rbase, rtemp, sym -#ifdef CONFIG_ALIGNMENT_TRAP - ldr \rtemp, [\rbase, #OFF_CR_ALIGNMENT(\sym)] - mcr p15, 0, \rtemp, c1, c0 +#else +#error Unknown architecture #endif - .endm /* * Invalid mode handlers @@ -656,7 +563,7 @@ and r2, r6, #31 @ int mode b SYMBOL_NAME(bad_mode) -#ifdef CONFIG_NWFPE +#if defined CONFIG_FPE_NWFPE || defined CONFIG_FPE_FASTFPE /* The FPE is always present */ .equ fpe_not_present, 0 #else @@ -806,9 +713,6 @@ .LCprocfns: .word SYMBOL_NAME(processor) #endif .LCfp: .word SYMBOL_NAME(fp_enter) -#ifdef CONFIG_ALIGNMENT_TRAP -.LCswi: .word SYMBOL_NAME(cr_alignment) -#endif irq_prio_table @@ -835,7 +739,7 @@ mov r2, #MODE_SVC msr cpsr_c, r2 @ Enable interrupts mov r2, sp - adrsvc al, lr, ret_from_sys_call + adrsvc al, lr, ret_from_exception b SYMBOL_NAME(do_DataAbort) .align 5 @@ -855,9 +759,9 @@ @ routine called with r0 = irq number, r1 = struct pt_regs * @ bne do_IRQ - mov r4, #0 - get_current_task r5 - b ret_with_reschedule + mov why, #0 + get_current_task tsk + b ret_to_user .align 5 __und_usr: sub sp, sp, #S_FRAME_SIZE @ Allocate frame size in one go @@ -869,7 +773,7 @@ stmdb r8, {sp, lr}^ @ Save user sp, lr alignment_trap r4, r7, __temp_und zero_fp - adrsvc al, r9, ret_from_sys_call @ r9 = normal FP return + adrsvc al, r9, ret_from_exception @ r9 = normal FP return adrsvc al, lr, fpundefinstr @ lr = undefined instr return call_fpe: get_current_task r10 @@ -883,7 +787,7 @@ msr cpsr_c, r0 @ Enable interrupts mov r0, lr mov r1, sp - adrsvc al, lr, ret_from_sys_call + adrsvc al, lr, ret_from_exception b SYMBOL_NAME(do_undefinstr) .align 5 @@ -901,40 +805,19 @@ mov r0, r5 @ address (pc) mov r1, sp @ regs bl SYMBOL_NAME(do_PrefetchAbort) @ call abort handler - teq r0, #0 @ Does this still apply??? - bne ret_from_sys_call @ Return from exception -#ifdef DEBUG_UNDEF - adr r0, t - bl SYMBOL_NAME(printk) -#endif - mov r0, r5 - mov r1, sp - and r2, r6, #31 - bl SYMBOL_NAME(do_undefinstr) - ldr lr, [sp, #S_PSR] @ Get USR cpsr - msr spsr, lr - ldmia sp, {r0 - pc}^ @ Restore USR registers - -#ifdef DEBUG_UNDEF -t: .ascii "Prefetch -> undefined instruction\n\0" - .align -#endif - -#include "entry-common.S" - + /* fall through */ +/* + * This is the return code to user mode for abort handlers + */ +ENTRY(ret_from_exception) + get_current_task tsk + mov why, #0 + b ret_to_user + + .data +ENTRY(fp_enter) + .word fpe_not_present .text - -#ifndef __ARM_ARCH_4__ -.Larm700bug: ldr r0, [sp, #S_PSR] @ Get calling cpsr - str lr, [r8] - msr spsr, r0 - ldmia sp, {r0 - lr}^ @ Get calling r0 - lr - mov r0, r0 - ldr lr, [sp, #S_PC] @ Get PC - add sp, sp, #S_FRAME_SIZE - movs pc, lr -#endif - /* * Register switch for ARMv3 and ARMv4 processors * r0 = previous, r1 = next, return previous. diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/entry-common.S linux/arch/arm/kernel/entry-common.S --- v2.4.8/linux/arch/arm/kernel/entry-common.S Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/kernel/entry-common.S Sun Aug 12 11:13:59 2001 @@ -8,70 +8,85 @@ * published by the Free Software Foundation. */ #include +#include "entry-header.S" -#define PT_TRACESYS 0x00000002 - -@ OS version number used in SWIs -@ RISC OS is 0 -@ RISC iX is 8 -@ -#define OS_NUMBER 9 +/* + * We rely on the fact that R0 is at the bottom of the stack (due to + * slow/fast restore user regs). + */ +#if S_R0 != 0 +#error "Please fix" +#endif -/*============================================================================ - * All exits to user mode from the kernel go through this code. +/* + * Our do_softirq out of line code. See include/asm-arm/softirq.h for + * the calling assembly. */ + .section ".text.lock","ax" +ENTRY(__do_softirq) + stmfd sp!, {r0 - r3, ip, lr} + bl do_softirq + ldmfd sp!, {r0 - r3, ip, pc} + .previous -#define S_OFF 8 + .align 5 +/* + * This is the fast syscall return path. We do as little as + * possible here, and this includes saving r0 back into the SVC + * stack. + */ +ret_fast_syscall: + ldr r1, [tsk, #TSK_NEED_RESCHED] + ldr r2, [tsk, #TSK_SIGPENDING] + teq r1, #0 @ need_resched || sigpending + teqeq r2, #0 + bne slow + fast_restore_user_regs - .macro get_softirq, rd -#ifdef CONFIG_SMP -#error SMP not supported -#else - ldr \rd, __irq_stat -#endif - .endm +/* + * Ok, we need to do extra processing, enter the slow path. + */ +slow: str r0, [sp, #S_R0+S_OFF]! @ returned r0 + b 1f - .globl ret_from_sys_call +/* + * "slow" syscall return path. "why" tells us if this was a real syscall. + */ +reschedule: + bl SYMBOL_NAME(schedule) +ENTRY(ret_to_user) +ret_slow_syscall: + ldr r1, [tsk, #TSK_NEED_RESCHED] + ldr r2, [tsk, #TSK_SIGPENDING] +1: teq r1, #0 @ need_resched => schedule() + bne reschedule + teq r2, #0 @ sigpending => do_signal() + blne __do_signal + restore_user_regs + +__do_signal: + mov r0, #0 @ NULL 'oldset' + mov r1, sp @ 'regs' + mov r2, why @ 'syscall' + b SYMBOL_NAME(do_signal) @ note the bl above sets lr - .align 5 -fast_syscall_return: - str r0, [sp, #S_R0+S_OFF]! @ returned r0 -ret_from_sys_call: @ external entry - get_softirq r0 - get_current_task r5 - ldmia r0, {r0, r1} @ softirq_active, softirq_mask - mov r4, #1 @ flag this as being syscall return - tst r0, r1 - blne SYMBOL_NAME(do_softirq) -ret_with_reschedule: @ external entry (r5 must be set) (__irq_usr) - ldr r0, [r5, #TSK_NEED_RESCHED] - ldr r1, [r5, #TSK_SIGPENDING] - teq r0, #0 - bne ret_reschedule - teq r1, #0 @ check for signals - blne ret_signal - -ret_from_all: restore_user_regs @ internal - -ret_signal: mov r1, sp @ internal - mov r2, r4 - b SYMBOL_NAME(do_signal) @ note the bl above sets lr - -ret_reschedule: adrsvc al, lr, ret_with_reschedule @ internal - b SYMBOL_NAME(schedule) - - .globl ret_from_exception -ret_from_exception: @ external entry - get_softirq r0 - get_current_task r5 - ldmia r0, {r0, r1} @ softirq_active, softirq_mask - mov r4, #0 - tst r0, r1 - ldr r6, [sp, #S_PSR] - blne SYMBOL_NAME(do_softirq) - tst r6, #3 @ returning to user mode? - beq ret_with_reschedule - b ret_from_all +/* + * This is how we return from a fork. __switch_to will be calling us + * with r0 pointing at the previous task that was running (ready for + * calling schedule_tail). + */ +ENTRY(ret_from_fork) + bl SYMBOL_NAME(schedule_tail) + get_current_task tsk + ldr ip, [tsk, #TSK_PTRACE] @ check for syscall tracing + mov why, #1 + tst ip, #PT_TRACESYS @ are we tracing syscalls? + beq ret_slow_syscall + mov r1, sp + mov r0, #1 @ trace exit [IP = 1] + bl SYMBOL_NAME(syscall_trace) + b ret_slow_syscall + #include "calls.S" @@ -80,78 +95,98 @@ *----------------------------------------------------------------------------- */ -/* - * Create some aliases for some registers. These should allow - * us to have in theory up to 7 arguments to a function. - */ -scno .req r9 @ syscall number -tbl .req r8 @ syscall table pointer -tip .req r7 @ temporary IP - - .align 5 -vector_swi: save_user_regs - mask_pc lr, lr - zero_fp - ldr scno, [lr, #-4] @ get SWI instruction - arm700_bug_check scno, ip + /* If we're optimising for StrongARM the resulting code won't + run on an ARM7 and we can save a couple of instructions. + --pb */ +#ifdef CONFIG_CPU_ARM710 + .macro arm710_bug_check, instr, temp + and \temp, \instr, #0x0f000000 @ check for SWI + teq \temp, #0x0f000000 + bne .Larm700bug + .endm + +.Larm700bug: + ldr r0, [sp, #S_PSR] @ Get calling cpsr + sub lr, lr, #4 + str lr, [r8] + msr spsr, r0 + ldmia sp, {r0 - lr}^ @ Get calling r0 - lr + mov r0, r0 + ldr lr, [sp, #S_PC] @ Get PC + add sp, sp, #S_FRAME_SIZE + movs pc, lr +#else + .macro arm710_bug_check, instr, temp + .endm +#endif + + .align 5 +ENTRY(vector_swi) + save_user_regs + mask_pc lr, lr + zero_fp + ldr scno, [lr, #-4] @ get SWI instruction + arm710_bug_check scno, ip + #ifdef CONFIG_ALIGNMENT_TRAP - ldr ip, .LCswi - ldr ip, [ip] - mcr p15, 0, ip, c1, c0 + ldr ip, __cr_alignment + ldr ip, [ip] + mcr p15, 0, ip, c1, c0 @ update control register #endif - enable_irqs ip + enable_irqs ip + + str r4, [sp, #-S_OFF]! @ push fifth arg - str r4, [sp, #-S_OFF]! @ push fifth arg - adrsvc al, lr, fast_syscall_return + get_current_task tsk + ldr ip, [tsk, #TSK_PTRACE] @ check for syscall tracing + bic scno, scno, #0xff000000 @ mask off SWI op-code + eor scno, scno, #OS_NUMBER << 20 @ check OS number + adr tbl, sys_call_table @ load syscall table pointer + tst ip, #PT_TRACESYS @ are we tracing syscalls? + bne __sys_trace + + adrsvc al, lr, ret_fast_syscall @ return address + cmp scno, #NR_syscalls @ check upper syscall limit + ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine + + add r1, sp, #S_OFF +2: mov why, #0 @ no longer a real syscall + cmp scno, #ARMSWI_OFFSET + eor r0, scno, #OS_NUMBER << 20 @ put OS number back + bcs SYMBOL_NAME(arm_syscall) + b SYMBOL_NAME(sys_ni_syscall) @ not private func + + /* + * This is the really slow path. We're going to be doing + * context switches, and waiting for our parent to respond. + */ +__sys_trace: + add r1, sp, #S_OFF + mov r0, #0 @ trace entry [IP = 0] + bl SYMBOL_NAME(syscall_trace) + + adrsvc al, lr, __sys_trace_return @ return address + add r1, sp, #S_R0 + S_OFF @ pointer to regs + cmp scno, #NR_syscalls @ check upper syscall limit + ldmccia r1, {r0 - r3} @ have to reload r0 - r3 + ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine + b 2b + +__sys_trace_return: + str r0, [sp, #S_R0 + S_OFF]! @ save returned r0 + mov r1, sp + mov r0, #1 @ trace exit [IP = 1] + bl SYMBOL_NAME(syscall_trace) + b ret_slow_syscall - bic scno, scno, #0xff000000 @ mask off SWI op-code - eor scno, scno, #OS_NUMBER<<20 @ check OS number - cmp scno, #NR_syscalls @ check upper syscall limit - bcs 2f - - get_current_task ip - ldr ip, [ip, #TSK_PTRACE] @ check for syscall tracing - adr tbl, SYMBOL_NAME(sys_call_table) - tst ip, #PT_TRACESYS - ldreq pc, [tbl, scno, lsl #2] @ call sys routine - - ldr tip, [sp, #S_IP + S_OFF] @ save old IP - mov ip, #0 - str ip, [sp, #S_IP + S_OFF] @ trace entry [IP = 0] - bl SYMBOL_NAME(syscall_trace) - str tip, [sp, #S_IP + S_OFF] - - add ip, sp, #S_OFF - ldmia ip, {r0 - r3} @ have to reload r0 - r3 - mov lr, pc - ldr pc, [tbl, scno, lsl #2] @ call sys routine - str r0, [sp, #S_R0 + S_OFF] @ returned r0 - - mov ip, #1 - str ip, [sp, #S_IP + S_OFF] @ trace exit [IP = 1] - bl SYMBOL_NAME(syscall_trace) - str tip, [sp, #S_IP + S_OFF] - add sp, sp, #S_OFF - b ret_from_sys_call - -2: add r1, sp, #S_OFF - tst scno, #0x00f00000 @ is it a Unix SWI? - bne 3f - subs r0, scno, #(KSWI_SYS_BASE - KSWI_BASE) - bcs SYMBOL_NAME(arm_syscall) - b SYMBOL_NAME(sys_ni_syscall) @ not private func - -3: eor r0, scno, #OS_NUMBER <<20 @ Put OS number back - bl SYMBOL_NAME(deferred) - add sp, sp, #S_OFF - b ret_from_sys_call - - .align 5 - .type __irq_stat, #object -__irq_stat: - .word SYMBOL_NAME(irq_stat) + .align 5 +#ifdef CONFIG_ALIGNMENT_TRAP + .type __cr_alignment, #object +__cr_alignment: + .word SYMBOL_NAME(cr_alignment) +#endif - .type sys_call_table, #object + .type sys_call_table, #object ENTRY(sys_call_table) #include "calls.S" @@ -164,7 +199,6 @@ SYMBOL_NAME(sys_syscall): eor scno, r0, #OS_NUMBER << 20 cmp scno, #NR_syscalls @ check range - add ip, sp, #S_OFF stmleia sp, {r5, r6} @ shuffle args movle r0, r1 movle r1, r2 @@ -225,8 +259,3 @@ str r5, [sp, #4] b do_mmap2 #endif - - .data - -ENTRY(fp_enter) - .word fpe_not_present diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/entry-header.S linux/arch/arm/kernel/entry-header.S --- v2.4.8/linux/arch/arm/kernel/entry-header.S Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/kernel/entry-header.S Sun Aug 12 11:13:59 2001 @@ -0,0 +1,201 @@ +#include /* for CONFIG_ARCH_xxxx */ +#include + +#include +#include +#include +#include +#include +#include + +#ifndef MODE_SVC +#define MODE_SVC 0x13 +#endif + + .macro zero_fp +#ifndef CONFIG_NO_FRAME_POINTER + mov fp, #0 +#endif + .endm + + .text + +@ Bad Abort numbers +@ ----------------- +@ +#define BAD_PREFETCH 0 +#define BAD_DATA 1 +#define BAD_ADDREXCPTN 2 +#define BAD_IRQ 3 +#define BAD_UNDEFINSTR 4 + +#define PT_TRACESYS 0x00000002 + +@ OS version number used in SWIs +@ RISC OS is 0 +@ RISC iX is 8 +@ +#define OS_NUMBER 9 +#define ARMSWI_OFFSET 0x000f0000 + +@ +@ Stack format (ensured by USER_* and SVC_*) +@ +#define S_FRAME_SIZE 72 +#ifdef CONFIG_CPU_32 +#define S_OLD_R0 68 +#define S_PSR 64 +#else +#define S_OLD_R0 64 +#define S_PSR 60 +#define S_PC 60 +#endif + +#define S_PC 60 +#define S_LR 56 +#define S_SP 52 +#define S_IP 48 +#define S_FP 44 +#define S_R10 40 +#define S_R9 36 +#define S_R8 32 +#define S_R7 28 +#define S_R6 24 +#define S_R5 20 +#define S_R4 16 +#define S_R3 12 +#define S_R2 8 +#define S_R1 4 +#define S_R0 0 +#define S_OFF 8 + +#ifdef CONFIG_CPU_32 + .macro save_user_regs + sub sp, sp, #S_FRAME_SIZE + stmia sp, {r0 - r12} @ Calling r0 - r12 + add r8, sp, #S_PC + stmdb r8, {sp, lr}^ @ Calling sp, lr + mrs r7, spsr + str lr, [sp, #S_PC] @ Save calling PC + str r7, [sp, #S_PSR] @ Save CPSR + str r0, [sp, #S_OLD_R0] @ Save OLD_R0 + .endm + + .macro restore_user_regs + ldr r0, [sp, #S_PSR] @ Get calling cpsr + mov ip, #I_BIT | MODE_SVC + msr cpsr_c, ip @ disable IRQs + msr spsr, r0 @ save in spsr_svc + ldr lr, [sp, #S_PC] @ Get PC + ldmia sp, {r0 - lr}^ @ Get calling r0 - lr + mov r0, r0 + add sp, sp, #S_FRAME_SIZE + movs pc, lr @ return & move spsr_svc into cpsr + .endm + + .macro fast_restore_user_regs + mov ip, #I_BIT | MODE_SVC + msr cpsr_c, ip @ disable IRQs + ldr r1, [sp, #S_OFF + S_PSR] @ get calling cpsr + ldr lr, [sp, #S_OFF + S_PC]! @ get pc + msr spsr, r1 @ save in spsr_svc + ldmdb sp, {r1 - lr}^ @ get calling r1 - lr + mov r0, r0 + add sp, sp, #S_FRAME_SIZE - S_PC + movs pc, lr @ return & move spsr_svc into cpsr + .endm + + .macro mask_pc, rd, rm + .endm + + .macro enable_irqs, temp + mov \temp, #MODE_SVC + msr cpsr_c, \temp + .endm + + .macro get_current_task, rd + mov \rd, sp, lsr #13 + mov \rd, \rd, lsl #13 + .endm + + /* + * Like adr, but force SVC mode (if required) + */ + .macro adrsvc, cond, reg, label + adr\cond \reg, \label + .endm + + .macro alignment_trap, rbase, rtemp, sym +#ifdef CONFIG_ALIGNMENT_TRAP +#define OFF_CR_ALIGNMENT(x) cr_alignment - x + + ldr \rtemp, [\rbase, #OFF_CR_ALIGNMENT(\sym)] + mcr p15, 0, \rtemp, c1, c0 +#endif + .endm + +#else + .macro save_user_regs + str r0, [sp, #-4]! + str lr, [sp, #-4]! + sub sp, sp, #15*4 + stmia sp, {r0 - lr}^ + mov r0, r0 + .endm + + .macro restore_user_regs + ldmia sp, {r0 - lr}^ + mov r0, r0 + ldr lr, [sp, #15*4] + add sp, sp, #15*4+8 + movs pc, lr + .endm + + .macro fast_restore_user_regs + add sp, sp, #S_OFF + ldmib sp, {r1 - lr}^ + mov r0, r0 + ldr lr, [sp, #15*4] + add sp, sp, #15*4+8 + movs pc, lr + .endm + + .macro mask_pc, rd, rm + bic \rd, \rm, #PCMASK + .endm + + .macro enable_irqs, temp + teqp pc, #0x00000003 + .endm + + .macro initialise_traps_extra + .endm + + .macro get_current_task, rd + mov \rd, sp, lsr #13 + mov \rd, \rd, lsl #13 + .endm + + /* + * Like adr, but force SVC mode (if required) + */ + .macro adrsvc, cond, reg, label + adr\cond \reg, \label + orr\cond \reg, \reg, #0x08000003 + .endm + +#endif + +/* + * These are the registers used in the syscall handler, and allow us to + * have in theory up to 7 arguments to a function. Note that tbl == why + * is intentional. + * + * We must set at least "tsk" and "why" when calling ret_with_reschedule. + */ +scno .req r9 @ syscall number +tbl .req r8 @ syscall table pointer +why .req r8 @ Linux syscall (!= 0) +tsk .req r7 @ current task + + diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/head-armv.S linux/arch/arm/kernel/head-armv.S --- v2.4.8/linux/arch/arm/kernel/head-armv.S Wed Jul 25 17:10:17 2001 +++ linux/arch/arm/kernel/head-armv.S Sun Aug 12 17:36:24 2001 @@ -248,12 +248,12 @@ /* * Ensure that the first section of RAM is present. * we assume that: - * 1. the RAM is aligned to a 256MB boundary - * 2. the kernel is executing in the same 256MB chunk + * 1. the RAM is aligned to a 32MB boundary + * 2. the kernel is executing in the same 32MB chunk * as the start of RAM. */ - bic r0, r0, #0x0ff00000 >> 18 @ round down - and r2, r5, #0xf0000000 @ round down + bic r0, r0, #0x01f00000 >> 18 @ round down + and r2, r5, #0xfe000000 @ round down add r3, r8, r2 @ flags + rambase str r3, [r0] diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/irq-arch.c linux/arch/arm/kernel/irq-arch.c --- v2.4.8/linux/arch/arm/kernel/irq-arch.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/kernel/irq-arch.c Sun Aug 12 11:13:59 2001 @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include #include diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/oldlatches.c linux/arch/arm/kernel/oldlatches.c --- v2.4.8/linux/arch/arm/kernel/oldlatches.c Wed Jul 25 17:10:17 2001 +++ linux/arch/arm/kernel/oldlatches.c Sun Aug 12 11:13:59 2001 @@ -27,11 +27,14 @@ void oldlatch_aupdate(unsigned char mask,unsigned char newdata) { if (machine_is_archimedes()) { + unsigned long flags; + + local_save_flags(flags); latch_a_copy = (latch_a_copy & ~mask) | newdata; + __raw_writeb(latch_a_copy, LATCHA_BASE); + local_restore_flags(flags); printk("Latch: A = 0x%02x\n", latch_a_copy); - - __raw_writeb(latch_a_copy, LATCHA_BASE); } else BUG(); } @@ -41,11 +44,14 @@ void oldlatch_bupdate(unsigned char mask,unsigned char newdata) { if (machine_is_archimedes()) { + unsigned long flags; + + local_save_flags(flags); latch_b_copy = (latch_b_copy & ~mask) | newdata; + __raw_writeb(latch_b_copy, LATCHB_BASE); + local_restore_flags(flags); printk("Latch: B = 0x%02x\n", latch_b_copy); - - __raw_writeb(latch_b_copy, LATCHB_BASE); } else BUG(); } diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/process.c linux/arch/arm/kernel/process.c --- v2.4.8/linux/arch/arm/kernel/process.c Fri Feb 9 11:29:44 2001 +++ linux/arch/arm/kernel/process.c Sun Aug 12 17:36:24 2001 @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -39,8 +40,6 @@ extern const char *processor_modes[]; extern void setup_mm_for_reboot(char mode); -asmlinkage void ret_from_sys_call(void) __asm__("ret_from_sys_call"); - static volatile int hlt_counter; #include @@ -125,7 +124,7 @@ pm_power_off(); } -void machine_restart(char * __unused) +void machine_restart(void * __unused) { /* * Clean and disable cache, and turn off interrupts @@ -296,6 +295,8 @@ { } +asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); + int copy_thread(int nr, unsigned long clone_flags, unsigned long esp, unsigned long unused, struct task_struct * p, struct pt_regs * regs) @@ -311,7 +312,9 @@ childregs->ARM_sp = esp; save = ((struct context_save_struct *)(childregs)) - 1; - init_thread_css(save); + *save = INIT_CSS; + save->pc |= (unsigned long)ret_from_fork; + p->thread.save = save; return 0; diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/ptrace.c linux/arch/arm/kernel/ptrace.c --- v2.4.8/linux/arch/arm/kernel/ptrace.c Wed Jul 25 17:10:17 2001 +++ linux/arch/arm/kernel/ptrace.c Sun Aug 12 11:13:59 2001 @@ -112,7 +112,7 @@ val = get_stack_long(child, reg); if (reg == 15) - val = pc_pointer(val); + val = pc_pointer(val + 8); return val; } @@ -319,17 +319,19 @@ dbg->nsaved += 1; } } else - printk(KERN_DEBUG "add_breakpoint: too many breakpoints\n"); + printk(KERN_ERR "ptrace: too many breakpoints\n"); return res; } int ptrace_set_bpt(struct task_struct *child) { - unsigned long insn, pc; + struct pt_regs *regs; + unsigned long pc, insn; int res; - pc = pc_pointer(get_stack_long(child, REG_PC)); + regs = get_user_regs(child); + pc = instruction_pointer(regs); res = read_tsk_long(child, pc, &insn); if (!res) { @@ -342,7 +344,16 @@ if (alt) res = add_breakpoint(child, dbg, alt); - if (!res && (!alt || predicate(insn) != PREDICATE_ALWAYS)) + /* + * Note that we ignore the result of setting the above + * breakpoint since it may fail. When it does, this is + * not so much an error, but a forewarning that we may + * be receiving a prefetch abort shortly. + * + * If we don't set this breakpoint here, then we can + * loose control of the thread during single stepping. + */ + if (!alt || predicate(insn) != PREDICATE_ALWAYS) res = add_breakpoint(child, dbg, pc + 4); } @@ -369,9 +380,9 @@ unsigned long tmp; read_tsk_long(child, dbg->bp[i].address, &tmp); + write_tsk_long(child, dbg->bp[i].address, dbg->bp[i].insn); if (tmp != BREAKINST) printk(KERN_ERR "ptrace_cancel_bpt: weirdness\n"); - write_tsk_long(child, dbg->bp[i].address, dbg->bp[i].insn); } } @@ -614,12 +625,25 @@ return ret; } -asmlinkage void syscall_trace(void) +asmlinkage void syscall_trace(int why, struct pt_regs *regs) { + unsigned long ip; + if ((current->ptrace & (PT_PTRACED|PT_TRACESYS)) != (PT_PTRACED|PT_TRACESYS)) return; - current->exit_code = SIGTRAP; + + /* + * Save IP. IP is used to denote syscall entry/exit: + * IP = 0 -> entry, = 1 -> exit + */ + ip = regs->ARM_ip; + regs->ARM_ip = why; + + /* the 0x80 provides a way for the tracing parent to distinguish + between a syscall stop and SIGTRAP delivery */ + current->exit_code = SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) + ? 0x80 : 0); current->state = TASK_STOPPED; notify_parent(current, SIGCHLD); schedule(); @@ -632,4 +656,5 @@ send_sig(current->exit_code, current, 1); current->exit_code = 0; } + regs->ARM_ip = ip; } diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/setup.c linux/arch/arm/kernel/setup.c --- v2.4.8/linux/arch/arm/kernel/setup.c Wed May 16 15:25:16 2001 +++ linux/arch/arm/kernel/setup.c Sun Aug 12 11:13:59 2001 @@ -48,7 +48,9 @@ __setup("fpe=", fpe_setup); #endif +extern unsigned int mem_fclk_21285; extern void paging_init(struct meminfo *, struct machine_desc *desc); +extern void convert_to_tag_list(struct param_struct *params, int mem_init); extern void bootmem_init(struct meminfo *); extern void reboot_setup(char *str); extern int root_mountflags; @@ -60,24 +62,12 @@ unsigned int system_rev; unsigned int system_serial_low; unsigned int system_serial_high; -unsigned int mem_fclk_21285 = 50000000; unsigned int elf_hwcap; #ifdef MULTI_CPU struct processor processor; #endif -struct drive_info_struct { char dummy[32]; } drive_info; - -struct screen_info screen_info = { - orig_video_lines: 30, - orig_video_cols: 80, - orig_video_mode: 0, - orig_video_ega_bx: 0, - orig_video_isVGA: 1, - orig_video_points: 8 -}; - unsigned char aux_device_present; char elf_platform[ELF_PLATFORM_SIZE]; char saved_command_line[COMMAND_LINE_SIZE]; @@ -222,7 +212,7 @@ mi->bank[mi->nr_banks].start = start; mi->bank[mi->nr_banks].size = size; - mi->bank[mi->nr_banks].node = 0; + mi->bank[mi->nr_banks].node = PHYS_TO_NID(start); mi->nr_banks += 1; } c = *from++; @@ -286,8 +276,8 @@ res = alloc_bootmem_low(sizeof(*res)); res->name = "System RAM"; - res->start = __virt_to_bus(virt_start); - res->end = __virt_to_bus(virt_end); + res->start = __virt_to_phys(virt_start); + res->end = __virt_to_phys(virt_end); res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; request_resource(&iomem_resource, res); @@ -330,12 +320,16 @@ */ static int __init parse_tag_core(const struct tag *tag) { - if ((tag->u.core.flags & 1) == 0) - root_mountflags &= ~MS_RDONLY; - ROOT_DEV = to_kdev_t(tag->u.core.rootdev); + if (tag->hdr.size > 2) { + if ((tag->u.core.flags & 1) == 0) + root_mountflags &= ~MS_RDONLY; + ROOT_DEV = to_kdev_t(tag->u.core.rootdev); + } return 0; } +__tagtable(ATAG_CORE, parse_tag_core); + static int __init parse_tag_mem32(const struct tag *tag) { if (meminfo.nr_banks >= NR_BANKS) { @@ -346,12 +340,24 @@ } meminfo.bank[meminfo.nr_banks].start = tag->u.mem.start; meminfo.bank[meminfo.nr_banks].size = tag->u.mem.size; - meminfo.bank[meminfo.nr_banks].node = 0; + meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(tag->u.mem.start); meminfo.nr_banks += 1; return 0; } +__tagtable(ATAG_MEM, parse_tag_mem32); + +#if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE) +struct screen_info screen_info = { + orig_video_lines: 30, + orig_video_cols: 80, + orig_video_mode: 0, + orig_video_ega_bx: 0, + orig_video_isVGA: 1, + orig_video_points: 8 +}; + static int __init parse_tag_videotext(const struct tag *tag) { screen_info.orig_x = tag->u.videotext.x; @@ -366,6 +372,9 @@ return 0; } +__tagtable(ATAG_VIDEOTEXT, parse_tag_videotext); +#endif + static int __init parse_tag_ramdisk(const struct tag *tag) { setup_ramdisk((tag->u.ramdisk.flags & 1) == 0, @@ -374,12 +383,16 @@ return 0; } +__tagtable(ATAG_RAMDISK, parse_tag_ramdisk); + static int __init parse_tag_initrd(const struct tag *tag) { setup_initrd(tag->u.initrd.start, tag->u.initrd.size); return 0; } +__tagtable(ATAG_INITRD, parse_tag_initrd); + static int __init parse_tag_serialnr(const struct tag *tag) { system_serial_low = tag->u.serialnr.low; @@ -387,12 +400,16 @@ return 0; } +__tagtable(ATAG_SERIAL, parse_tag_serialnr); + static int __init parse_tag_revision(const struct tag *tag) { system_rev = tag->u.revision.rev; return 0; } +__tagtable(ATAG_REVISION, parse_tag_revision); + static int __init parse_tag_cmdline(const struct tag *tag) { strncpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE); @@ -400,101 +417,43 @@ return 0; } -/* - * This is the core tag table; these are the tags - * that we recognise for any machine type. - */ -static const struct tagtable core_tagtable[] __init = { - { ATAG_CORE, parse_tag_core }, - { ATAG_MEM, parse_tag_mem32 }, - { ATAG_VIDEOTEXT, parse_tag_videotext }, - { ATAG_RAMDISK, parse_tag_ramdisk }, - { ATAG_INITRD, parse_tag_initrd }, - { ATAG_SERIAL, parse_tag_serialnr }, - { ATAG_REVISION, parse_tag_revision }, - { ATAG_CMDLINE, parse_tag_cmdline } -}; +__tagtable(ATAG_CMDLINE, parse_tag_cmdline); /* - * Scan one tag table for this tag, and call its parse function. + * Scan the tag table for this tag, and call its parse function. + * The tag table is built by the linker from all the __tagtable + * declarations. */ -static int __init -parse_tag(const struct tagtable *tbl, int size, const struct tag *t) +static int __init parse_tag(const struct tag *tag) { - int i; + extern struct tagtable __tagtable_begin, __tagtable_end; + struct tagtable *t; - for (i = 0; i < size; i++, tbl++) - if (t->hdr.tag == tbl->tag) { - tbl->parse(t); + for (t = &__tagtable_begin; t < &__tagtable_end; t++) + if (tag->hdr.tag == t->tag) { + t->parse(tag); break; } - return i < size; + return t < &__tagtable_end; } /* * Parse all tags in the list, checking both the global and architecture * specific tag tables. */ -static void __init -parse_tags(const struct tagtable *tbl, int size, const struct tag *t) +static void __init parse_tags(const struct tag *t) { - /* - * The tag list is terminated with a zero-sized tag. Size is - * defined to be in units of 32-bit quantities. - */ - for (; t->hdr.size; t = (struct tag *)((u32 *)t + t->hdr.size)) { - if (parse_tag(core_tagtable, ARRAY_SIZE(core_tagtable), t)) - continue; - - if (tbl && parse_tag(tbl, size, t)) - continue; - - printk(KERN_WARNING - "Ignoring unrecognised tag 0x%08x\n", t->hdr.tag); - } -} - -static void __init parse_params(struct param_struct *params) -{ - if (params->u1.s.page_size != PAGE_SIZE) { - printk(KERN_WARNING "Warning: bad configuration page, " - "trying to continue\n"); - return; - } - - ROOT_DEV = to_kdev_t(params->u1.s.rootdev); - system_rev = params->u1.s.system_rev; - system_serial_low = params->u1.s.system_serial_low; - system_serial_high = params->u1.s.system_serial_high; - - if (params->u1.s.mem_fclk_21285 > 0) - mem_fclk_21285 = params->u1.s.mem_fclk_21285; - - setup_ramdisk((params->u1.s.flags & FLAG_RDLOAD) == 0, - (params->u1.s.flags & FLAG_RDPROMPT) == 0, - params->u1.s.rd_start, - params->u1.s.ramdisk_size); - - setup_initrd(params->u1.s.initrd_start, - params->u1.s.initrd_size); - - if (!(params->u1.s.flags & FLAG_READONLY)) - root_mountflags &= ~MS_RDONLY; - - strncpy(default_command_line, params->commandline, COMMAND_LINE_SIZE); - default_command_line[COMMAND_LINE_SIZE - 1] = '\0'; - - if (meminfo.nr_banks == 0) { - meminfo.nr_banks = 1; - meminfo.bank[0].start = PHYS_OFFSET; - meminfo.bank[0].size = params->u1.s.nr_pages << PAGE_SHIFT; - } + for (; t->hdr.size; t = tag_next(t)) + if (!parse_tag(t)) + printk(KERN_WARNING + "Ignoring unrecognised tag 0x%08x\n", + t->hdr.tag); } void __init setup_arch(char **cmdline_p) { - struct param_struct *params = NULL; + struct tag *tags = NULL; struct machine_desc *mdesc; char *from = default_command_line; @@ -508,27 +467,26 @@ reboot_setup("s"); if (mdesc->param_offset) - params = phys_to_virt(mdesc->param_offset); + tags = phys_to_virt(mdesc->param_offset); /* * Do the machine-specific fixups before we parse the * parameters or tags. */ if (mdesc->fixup) - mdesc->fixup(mdesc, params, &from, &meminfo); + mdesc->fixup(mdesc, (struct param_struct *)tags, + &from, &meminfo); - if (params) { - struct tag *tag = (struct tag *)params; + /* + * If we have the old style parameters, convert them to + * a tag list before. + */ + if (tags && tags->hdr.tag != ATAG_CORE) + convert_to_tag_list((struct param_struct *)tags, + meminfo.nr_banks == 0); - /* - * Is the first tag the CORE tag? This differentiates - * between the tag list and the parameter table. - */ - if (tag->hdr.tag == ATAG_CORE) - parse_tags(mdesc->tagtable, mdesc->tagsize, tag); - else - parse_params(params); - } + if (tags && tags->hdr.tag == ATAG_CORE) + parse_tags(tags); if (meminfo.nr_banks == 0) { meminfo.nr_banks = 1; diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/signal.c linux/arch/arm/kernel/signal.c --- v2.4.8/linux/arch/arm/kernel/signal.c Wed Jan 24 15:21:50 2001 +++ linux/arch/arm/kernel/signal.c Sun Aug 12 11:13:59 2001 @@ -327,16 +327,15 @@ /* * This is the X/Open sanctioned signal stack switching. */ - if ((ka->sa.sa_flags & SA_ONSTACK) && ! on_sig_stack(sp)) + if ((ka->sa.sa_flags & SA_ONSTACK) && sas_ss_flags(sp)) sp = current->sas_ss_sp + current->sas_ss_size; /* * No matter what happens, 'sp' must be word * aligned otherwise nasty things could happen */ - sp &= ~3; - - return (void *)(sp - framesize); + /* ATPCS B01 mandates 8-byte alignment */ + return (void *)((sp - framesize) & ~7); } static void setup_frame(int sig, struct k_sigaction *ka, @@ -364,7 +363,7 @@ retcode = (unsigned long)ka->sa.sa_restorer; } else { retcode = (unsigned long)&frame->retcode; - err |= __put_user(SWI_SYS_SIGRETURN, &frame->retcode); + __put_user_error(SWI_SYS_SIGRETURN, &frame->retcode, err); flush_icache_range(retcode, retcode + 4); } @@ -404,8 +403,8 @@ if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame))) goto segv_and_exit; - err |= __put_user(&frame->info, &frame->pinfo); - err |= __put_user(&frame->uc, &frame->puc); + __put_user_error(&frame->info, &frame->pinfo, err); + __put_user_error(&frame->uc, &frame->puc, err); err |= copy_siginfo_to_user(&frame->info, info); /* Clear all the bits of the ucontext we don't use. */ @@ -421,7 +420,7 @@ retcode = (unsigned long)ka->sa.sa_restorer; } else { retcode = (unsigned long)&frame->retcode; - err |= __put_user(SWI_SYS_RT_SIGRETURN, &frame->retcode); + __put_user_error(SWI_SYS_RT_SIGRETURN, &frame->retcode, err); flush_icache_range(retcode, retcode + 4); } @@ -432,6 +431,15 @@ regs->ARM_r0 = current->exec_domain->signal_invmap[sig]; else regs->ARM_r0 = sig; + + /* + * For realtime signals we must also set the second and third + * arguments for the signal handler. + * -- Peter Maydell 2000-12-06 + */ + regs->ARM_r1 = (unsigned long)frame->pinfo; + regs->ARM_r2 = (unsigned long)frame->puc; + regs->ARM_sp = (unsigned long)frame; regs->ARM_lr = retcode; regs->ARM_pc = (unsigned long)ka->sa.sa_handler; diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/traps.c linux/arch/arm/kernel/traps.c --- v2.4.8/linux/arch/arm/kernel/traps.c Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/kernel/traps.c Sun Aug 12 11:13:59 2001 @@ -208,9 +208,16 @@ asmlinkage void do_undefinstr(int address, struct pt_regs *regs, int mode) { - unsigned long addr = instruction_pointer(regs); + unsigned long addr; siginfo_t info; + /* + * According to the ARM ARM, PC is 2 or 4 bytes ahead, depending + * whether we're in Thumb mode or not. + */ + regs->ARM_pc -= thumb_mode(regs) ? 2 : 4; + addr = instruction_pointer(regs); + #ifdef CONFIG_DEBUG_USER printk(KERN_INFO "%s (%d): undefined instruction: pc=%08lx\n", current->comm, current->pid, addr); @@ -230,6 +237,7 @@ die_if_kernel("Oops - undefined instruction", regs, mode); } +#ifdef CONFIG_CPU_26 asmlinkage void do_excpt(int address, struct pt_regs *regs, int mode) { siginfo_t info; @@ -252,6 +260,7 @@ die_if_kernel("Oops - address exception", regs, mode); } +#endif asmlinkage void do_unexp_fiq (struct pt_regs *regs) { @@ -269,33 +278,84 @@ */ asmlinkage void bad_mode(struct pt_regs *regs, int reason, int proc_mode) { + unsigned int vectors = vectors_base(); + mm_segment_t fs; + console_verbose(); printk(KERN_CRIT "Bad mode in %s handler detected: mode %s\n", handler[reason], processor_modes[proc_mode]); /* + * We need to switch to kernel mode so that we can + * use __get_user to safely read from kernel space. + * Note that we now dump the code first, just in case + * the backtrace kills us. + */ + fs = get_fs(); + set_fs(KERNEL_DS); + + /* * Dump out the vectors and stub routines. Maybe a better solution * would be to dump them out only if we detect that they are corrupted. */ printk(KERN_CRIT "Vectors:\n"); - dump_mem(0, 0x40); + dump_mem(vectors, 0x40); printk(KERN_CRIT "Stubs:\n"); - dump_mem(0x200, 0x4b8); + dump_mem(vectors + 0x200, 0x4b8); + + set_fs(fs); die("Oops", regs, 0); cli(); panic("bad mode"); } +static int bad_syscall(int n, struct pt_regs *regs) +{ + siginfo_t info; + + /* You might think just testing `handler' would be enough, but PER_LINUX + * points it to no_lcall7 to catch undercover SVr4 binaries. Gutted. + */ + if (current->personality != PER_LINUX && current->exec_domain->handler) { + /* Hand it off to iBCS. The extra parameter and consequent type + * forcing is necessary because of the weird ARM calling convention. + */ + current->exec_domain->handler(n, regs); + return regs->ARM_r0; + } + +#ifdef CONFIG_DEBUG_USER + printk(KERN_ERR "[%d] %s: obsolete system call %08x.\n", + current->pid, current->comm, n); + dump_instr(regs); +#endif + + info.si_signo = SIGILL; + info.si_errno = 0; + info.si_code = ILL_ILLTRP; + info.si_addr = (void *)instruction_pointer(regs) - + (thumb_mode(regs) ? 2 : 4); + + force_sig_info(SIGILL, &info, current); + die_if_kernel("Oops", regs, n); + return regs->ARM_r0; +} + /* - * Handle some more esoteric system calls + * Handle all unrecognised system calls. + * 0x9f0000 - 0x9fffff are some more esoteric system calls */ +#define NR(x) ((__ARM_NR_##x) - __ARM_NR_BASE) asmlinkage int arm_syscall(int no, struct pt_regs *regs) { siginfo_t info; - switch (no) { + if ((no >> 16) != 0x9f) + return bad_syscall(no, regs); + + switch (no & 0xffff) { case 0: /* branch through 0 */ info.si_signo = SIGSEGV; info.si_errno = 0; @@ -305,9 +365,9 @@ force_sig_info(SIGSEGV, &info, current); die_if_kernel("branch through zero", regs, 0); - break; + return 0; - case 1: /* SWI BREAK_POINT */ + case NR(breakpoint): /* SWI BREAK_POINT */ /* * The PC is always left pointing at the next * instruction. Fix this. @@ -318,17 +378,50 @@ info.si_signo = SIGTRAP; info.si_errno = 0; info.si_code = TRAP_BRKPT; - info.si_addr = (void *)instruction_pointer(regs); + info.si_addr = (void *)instruction_pointer(regs) - + (thumb_mode(regs) ? 2 : 4); force_sig_info(SIGTRAP, &info, current); return regs->ARM_r0; - case 2: /* sys_cacheflush */ #ifdef CONFIG_CPU_32 - /* r0 = start, r1 = end, r2 = flags */ + /* + * Flush a region from virtual address 'r0' to virtual address 'r1' + * _inclusive_. There is no alignment requirement on either address; + * user space does not need to know the hardware cache layout. + * + * r2 contains flags. It should ALWAYS be passed as ZERO until it + * is defined to be something else. For now we ignore it, but may + * the fires of hell burn in your belly if you break this rule. ;) + * + * (at a later date, we may want to allow this call to not flush + * various aspects of the cache. Passing '0' will guarantee that + * everything necessary gets flushed to maintain consistency in + * the specified region). + */ + case NR(cacheflush): cpu_cache_clean_invalidate_range(regs->ARM_r0, regs->ARM_r1, 1); -#endif + return 0; + + case NR(usr26): + if (!(elf_hwcap & HWCAP_26BIT)) + break; + regs->ARM_cpsr &= ~0x10; + return regs->ARM_r0; + + case NR(usr32): + if (!(elf_hwcap & HWCAP_26BIT)) + break; + regs->ARM_cpsr |= 0x10; + return regs->ARM_r0; +#else + case NR(cacheflush): + return 0; + + case NR(usr26): + case NR(usr32): break; +#endif default: /* Calls 9f00xx..9f07ff are defined to return -ENOSYS @@ -337,45 +430,29 @@ a feature is supported. */ if (no <= 0x7ff) return -ENOSYS; -#ifdef CONFIG_DEBUG_USER - /* experience shows that these seem to indicate that - * something catastrophic has happened - */ - printk("[%d] %s: arm syscall %d\n", current->pid, current->comm, no); - dump_instr(regs); - if (user_mode(regs)) { - show_regs(regs); - c_backtrace(regs->ARM_fp, processor_mode(regs)); - } -#endif - force_sig(SIGILL, current); - die_if_kernel("Oops", regs, no); break; } - return 0; -} - -asmlinkage void deferred(int n, struct pt_regs *regs) -{ - /* You might think just testing `handler' would be enough, but PER_LINUX - * points it to no_lcall7 to catch undercover SVr4 binaries. Gutted. - */ - if (current->personality != PER_LINUX && current->exec_domain->handler) { - /* Hand it off to iBCS. The extra parameter and consequent type - * forcing is necessary because of the weird ARM calling convention. - */ - void (*handler)(int nr, struct pt_regs *regs) = (void *)current->exec_domain->handler; - (*handler)(n, regs); - return; - } - #ifdef CONFIG_DEBUG_USER - printk(KERN_ERR "[%d] %s: obsolete system call %08x.\n", - current->pid, current->comm, n); + /* + * experience shows that these seem to indicate that + * something catastrophic has happened + */ + printk("[%d] %s: arm syscall %d\n", current->pid, current->comm, no); dump_instr(regs); + if (user_mode(regs)) { + show_regs(regs); + c_backtrace(regs->ARM_fp, processor_mode(regs)); + } #endif - force_sig(SIGILL, current); - die_if_kernel("Oops", regs, n); + info.si_signo = SIGILL; + info.si_errno = 0; + info.si_code = ILL_ILLTRP; + info.si_addr = (void *)instruction_pointer(regs) - + (thumb_mode(regs) ? 2 : 4); + + force_sig_info(SIGILL, &info, current); + die_if_kernel("Oops", regs, no); + return 0; } void __bad_xchg(volatile void *ptr, int size) @@ -466,7 +543,7 @@ __trap_init((void *)vectors_base()); if (vectors_base() != 0) - printk("Relocating machine vectors to 0x%08x\n", + printk(KERN_DEBUG "Relocating machine vectors to 0x%08x\n", vectors_base()); #ifdef CONFIG_CPU_32 modify_domain(DOMAIN_USER, DOMAIN_CLIENT); diff -u --recursive --new-file v2.4.8/linux/arch/arm/kernel/via82c505.c linux/arch/arm/kernel/via82c505.c --- v2.4.8/linux/arch/arm/kernel/via82c505.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/kernel/via82c505.c Sun Aug 12 11:13:59 2001 @@ -152,11 +152,8 @@ }; #endif -void __init via82c505_init(struct arm_pci_sysdata *sysdata) +void __init via82c505_init(void *sysdata) { - unsigned int pci_cmd = PCI_COMMAND_IO | PCI_COMMAND_MEMORY | - PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE; - struct pci_dev *dev; struct pci_bus *bus; printk(KERN_DEBUG "PCI: VIA 82c505\n"); @@ -170,11 +167,6 @@ outb(0xd0,0xA9); pci_scan_bus(0, &via82c505_ops, sysdata); - - pci_cmd |= sysdata->bus[0].features; - - printk("PCI: Fast back to back transfers %sabled\n", - (sysdata->bus[0].features & PCI_COMMAND_FAST_BACK) ? "en" : "dis"); #ifdef CONFIG_ARCH_SHARK /* diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/Makefile linux/arch/arm/lib/Makefile --- v2.4.8/linux/arch/arm/lib/Makefile Wed May 16 15:25:16 2001 +++ linux/arch/arm/lib/Makefile Sun Aug 12 11:13:59 2001 @@ -20,13 +20,8 @@ obj-arc := ecard.o io-acorn.o floppydma.o obj-rpc := ecard.o io-acorn.o floppydma.o obj-clps7500 := io-acorn.o -obj-footbridge := io-pcio.o obj-l7200 := io-acorn.o -obj-nexuspci := io-pcio.o -obj-sa1100 := io-pcio.o obj-shark := io-shark.o -obj-integrator := io-pcio.o -obj-clps711x := io-shark.o obj-y += $(obj-$(MACHINE)) diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-acorn.S linux/arch/arm/lib/io-acorn.S --- v2.4.8/linux/arch/arm/lib/io-acorn.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-acorn.S Sun Aug 12 11:13:59 2001 @@ -62,13 +62,13 @@ ENTRY(insw) addr r0 teq r2, #0 - bne __arch_readsw + bne __raw_readsw RETINSTR(mov, pc, lr) ENTRY(insb) addr r0 teq r2, #0 - bne __arch_readsb + bne __raw_readsb RETINSTR(mov, pc, lr) @ Purpose: write a block of data from memory to a hardware register. @@ -78,13 +78,13 @@ ENTRY(outsw) addr r0 teq r2, #0 - bne __arch_writesw + bne __raw_writesw RETINSTR(mov, pc, lr) ENTRY(outsb) addr r0 teq r2, #0 - bne __arch_writesb + bne __raw_writesb RETINSTR(mov, pc, lr) @ Purpose: write a memc register diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-pcio.S linux/arch/arm/lib/io-pcio.S --- v2.4.8/linux/arch/arm/lib/io-pcio.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-pcio.S Wed Dec 31 16:00:00 1969 @@ -1,50 +0,0 @@ -#include -#include -#include - - .equ pcio_high, PCIO_BASE & 0xff000000 - .equ pcio_low, PCIO_BASE & 0x00ffffff - - .macro ioaddr, rd,rn - add \rd, \rn, #pcio_high - .if pcio_low - add \rd, \rd, #pcio_low - .endif - .endm - -ENTRY(insl) - ioaddr r0, r0 - teq r2, #0 - bne __arch_readsl - RETINSTR(mov, pc, lr) - -ENTRY(outsl) - ioaddr r0, r0 - teq r2, #0 - bne __arch_writesl - RETINSTR(mov, pc, lr) - -ENTRY(outsw) - ioaddr r0, r0 - teq r2, #0 - bne __arch_writesw - RETINSTR(mov, pc, lr) - -ENTRY(insw) - ioaddr r0, r0 - teq r2, #0 - bne __arch_readsw - RETINSTR(mov, pc, lr) - -ENTRY(insb) - ioaddr r0, r0 - teq r2, #0 - bne __arch_readsb - RETINSTR(mov, pc, lr) - -ENTRY(outsb) - ioaddr r0, r0 - teq r2, #0 - bne __arch_writesb - RETINSTR(mov, pc, lr) - diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-readsb.S linux/arch/arm/lib/io-readsb.S --- v2.4.8/linux/arch/arm/lib/io-readsb.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-readsb.S Sun Aug 12 11:13:59 2001 @@ -24,7 +24,9 @@ subs r2, r2, ip bne .insb_aligned -ENTRY(__arch_readsb) +ENTRY(__raw_readsb) + teq r2, #0 @ do we have to check for the zero len? + moveq pc, lr ands ip, r1, #3 bne .insb_align diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-readsl-armv3.S linux/arch/arm/lib/io-readsl-armv3.S --- v2.4.8/linux/arch/arm/lib/io-readsl-armv3.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-readsl-armv3.S Sun Aug 12 11:13:59 2001 @@ -14,7 +14,9 @@ /* * Note that some reads can be aligned on half-word boundaries. */ -ENTRY(__arch_readsl) +ENTRY(__raw_readsl) + teq r2, #0 @ do we have to check for the zero len? + moveq pc, lr ands ip, r1, #3 bne 2f diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-readsl-armv4.S linux/arch/arm/lib/io-readsl-armv4.S --- v2.4.8/linux/arch/arm/lib/io-readsl-armv4.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-readsl-armv4.S Sun Aug 12 11:13:59 2001 @@ -14,7 +14,9 @@ /* * Note that some reads can be aligned on half-word boundaries. */ -ENTRY(__arch_readsl) +ENTRY(__raw_readsl) + teq r2, #0 @ do we have to check for the zero len? + moveq pc, lr ands ip, r1, #3 bne 2f diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-readsw-armv3.S linux/arch/arm/lib/io-readsw-armv3.S --- v2.4.8/linux/arch/arm/lib/io-readsw-armv3.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-readsw-armv3.S Sun Aug 12 11:13:59 2001 @@ -30,7 +30,9 @@ subs r2, r2, #1 RETINSTR(moveq, pc, lr) -ENTRY(__arch_readsw) +ENTRY(__raw_readsw) + teq r2, #0 @ do we have to check for the zero len? + moveq pc, lr tst r1, #3 bne .insw_align diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-readsw-armv4.S linux/arch/arm/lib/io-readsw-armv4.S --- v2.4.8/linux/arch/arm/lib/io-readsw-armv4.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-readsw-armv4.S Sun Aug 12 11:13:59 2001 @@ -28,7 +28,9 @@ subs r2, r2, #1 RETINSTR(moveq, pc, lr) -ENTRY(__arch_readsw) +ENTRY(__raw_readsw) + teq r2, #0 @ do we have to check for the zero len? + moveq pc, lr tst r1, #3 bne .insw_align diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-writesb.S linux/arch/arm/lib/io-writesb.S --- v2.4.8/linux/arch/arm/lib/io-writesb.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-writesb.S Sun Aug 12 11:13:59 2001 @@ -24,7 +24,9 @@ subs r2, r2, ip bne .outsb_aligned -ENTRY(__arch_writesb) +ENTRY(__raw_writesb) + teq r2, #0 @ do we have to check for the zero len? + moveq pc, lr ands ip, r1, #3 bne .outsb_align diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-writesl.S linux/arch/arm/lib/io-writesl.S --- v2.4.8/linux/arch/arm/lib/io-writesl.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-writesl.S Sun Aug 12 11:13:59 2001 @@ -11,7 +11,9 @@ #include #include -ENTRY(__arch_writesl) +ENTRY(__raw_writesl) + teq r2, #0 @ do we have to check for the zero len? + moveq pc, lr ands ip, r1, #3 bne 2f diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-writesw-armv3.S linux/arch/arm/lib/io-writesw-armv3.S --- v2.4.8/linux/arch/arm/lib/io-writesw-armv3.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-writesw-armv3.S Sun Aug 12 11:13:59 2001 @@ -31,7 +31,9 @@ subs r2, r2, #1 RETINSTR(moveq, pc, lr) -ENTRY(__arch_writesw) +ENTRY(__raw_writesw) + teq r2, #0 @ do we have to check for the zero len? + moveq pc, lr tst r1, #3 bne .outsw_align diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/io-writesw-armv4.S linux/arch/arm/lib/io-writesw-armv4.S --- v2.4.8/linux/arch/arm/lib/io-writesw-armv4.S Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/lib/io-writesw-armv4.S Sun Aug 12 11:13:59 2001 @@ -28,7 +28,9 @@ subs r2, r2, #1 RETINSTR(moveq, pc, lr) -ENTRY(__arch_writesw) +ENTRY(__raw_writesw) + teq r2, #0 @ do we have to check for the zero len? + moveq pc, lr tst r1, #3 bne .outsw_align diff -u --recursive --new-file v2.4.8/linux/arch/arm/lib/uaccess-armo.S linux/arch/arm/lib/uaccess-armo.S --- v2.4.8/linux/arch/arm/lib/uaccess-armo.S Mon Sep 18 15:15:25 2000 +++ linux/arch/arm/lib/uaccess-armo.S Sun Aug 12 11:13:59 2001 @@ -96,7 +96,7 @@ .word uaccess_kernel_copy .word uaccess_kernel_clear .word uaccess_kernel_strncpy_from - .word uaccess_kernel_strlen + .word uaccess_kernel_strnlen @ In : r0 = x, r1 = addr, r2 = error @ Out: r2 = error @@ -211,17 +211,21 @@ 2: subs r0, ip, r2 ldmfd sp!, {pc}^ -/* Prototype: int uaccess_kernel_strlen(char *str) +/* Prototype: int uaccess_kernel_strlen(char *str, long n) * Purpose : get length of a string in kernel memory * Params : str - address of string in kernel memory - * Returns : length of string *including terminator*, or zero on error + * Returns : length of string *including terminator*, + * or zero on exception, or n + 1 if too long */ -uaccess_kernel_strlen: +uaccess_kernel_strnlen: stmfd sp!, {lr} mov r2, r0 1: ldrb r1, [r0], #1 teq r1, #0 + beq 2f + subs r1, r1, #1 bne 1b - sub r0, r0, r2 + add r0, r0, #1 +2: sub r0, r0, r2 ldmfd sp!, {pc}^ diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-anakin/Makefile linux/arch/arm/mach-anakin/Makefile --- v2.4.8/linux/arch/arm/mach-anakin/Makefile Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-anakin/Makefile Sun Aug 12 11:13:59 2001 @@ -0,0 +1,21 @@ +# +# Makefile for the linux kernel. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). + +USE_STANDARD_AS_RULE := true + +O_TARGET := anakin.o + +# Object file lists. + +obj-y := arch.o irq.o mm.o +obj-m := +obj-n := +obj- := + +export-objs := + +include $(TOPDIR)/Rules.make diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-anakin/arch.c linux/arch/arm/mach-anakin/arch.c --- v2.4.8/linux/arch/arm/mach-anakin/arch.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-anakin/arch.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,46 @@ +/* + * linux/arch/arm/mach-anakin/arch.c + * + * Copyright (C) 2001 Aleph One Ltd. for Acunia N.V. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Changelog: + * 09-Apr-2001 W/TTC Created + */ + +#include +#include +#include + +#include +#include +#include + +#ifndef CONFIG_BLK_DEV_RAM_SIZE +#define CONFIG_BLK_DEV_RAM_SIZE 4096 +#endif + +extern void anakin_map_io(void); +extern void genarch_init_irq(void); + +static void __init +fixup_anakin(struct machine_desc *desc, struct param_struct *unused, + char **cmdline, struct meminfo *mi) +{ + ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0); + setup_ramdisk(1, 0, 0, CONFIG_BLK_DEV_RAM_SIZE); + setup_initrd(0xc0800000, 4 * 1024 * 1024); +} + + +MACHINE_START(ANAKIN, "Anakin") + MAINTAINER("Wookey/Tak-Shing Chan") + BOOT_MEM(0x20000000, 0x40000000, 0xe0000000) + VIDEO(0x80000000, 0x8002db40) + FIXUP(fixup_anakin) + MAPIO(anakin_map_io) + INITIRQ(genarch_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-anakin/irq.c linux/arch/arm/mach-anakin/irq.c --- v2.4.8/linux/arch/arm/mach-anakin/irq.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-anakin/irq.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,84 @@ +/* + * linux/arch/arm/mach-anakin/irq.c + * + * Copyright (C) 2001 Aleph One Ltd. for Acunia N.V. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Changelog: + * 10-Apr-2001 TTC Created + */ + +#include +#include +#include +#include + +#include +#include + +extern unsigned int anakin_irq_mask, anakin_active_irqs; +extern void do_IRQ(int, struct pt_regs *); + +static void +anakin_mask_irq(unsigned int irq) +{ + anakin_irq_mask &= ~(1 << irq); +} + +static void +anakin_unmask_irq(unsigned int irq) +{ + anakin_irq_mask |= (1 << irq); +} + +/* + * This is a faked interrupt to deal with parallel interrupt requests + * on the Anakin. Make sure that its interrupt number is not in any + * way conflicting with the hardware interrupt numbers! Check + * IRQ_ANAKIN in linux/include/asm-arm/arch-anakin/irqs.h. + */ +static void +anakin_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + for (irq = 0; irq < NR_IRQS; irq++) + if (anakin_active_irqs & (1 << irq)) + do_IRQ(irq, regs); +} + +static struct irqaction anakin_irq = { + name: "Anakin IRQ", + handler: anakin_interrupt, + flags: SA_INTERRUPT +}; + +void __init +irq_init_irq(void) +{ + unsigned int irq; + + for (irq = 0; irq < NR_IRQS; irq++) { + switch (irq) { + case IRQ_UART0: + case IRQ_UART1: + case IRQ_UART2: + case IRQ_TICK: + case IRQ_CODEC: + case IRQ_UART4: + case IRQ_TOUCHSCREEN: + case IRQ_UART3: + case IRQ_FIFO: + case IRQ_CAN: + case IRQ_COMPACTFLASH: + case IRQ_BOSH: + case IRQ_ANAKIN: + irq_desc[irq].valid = 1; + irq_desc[irq].mask_ack = anakin_mask_irq; + irq_desc[irq].mask = anakin_mask_irq; + irq_desc[irq].unmask = anakin_unmask_irq; + } + } + setup_arm_irq(IRQ_ANAKIN, &anakin_irq); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-anakin/mm.c linux/arch/arm/mach-anakin/mm.c --- v2.4.8/linux/arch/arm/mach-anakin/mm.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-anakin/mm.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,32 @@ +/* + * linux/arch/arm/mach-anakin/mm.c + * + * Copyright (C) 2001 Aleph One Ltd. for Acunia N.V. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Changelog: + * 09-Apr-2001 W/TTC Created + */ + +#include +#include + +#include +#include +#include + +static struct map_desc anakin_io_desc[] __initdata = { + { IO_BASE, IO_START, IO_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, + { FLASH_BASE, FLASH_START, FLASH_SIZE, DOMAIN_IO, 1, 1, 0, 0 }, + { VGA_BASE, VGA_START, VGA_SIZE, DOMAIN_IO, 0, 1, 0, 0 }, + LAST_DESC +}; + +void __init +anakin_map_io(void) +{ + iotable_init(anakin_io_desc); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-ebsa110/io.c linux/arch/arm/mach-ebsa110/io.c --- v2.4.8/linux/arch/arm/mach-ebsa110/io.c Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/mach-ebsa110/io.c Sun Aug 12 11:13:59 2001 @@ -261,7 +261,7 @@ BUG(); } - __arch_writesb(ISAIO_BASE + off, from, len); + __raw_writesb(ISAIO_BASE + off, from, len); } void insb(unsigned int port, void *from, int len) @@ -276,7 +276,7 @@ BUG(); } - __arch_readsb(ISAIO_BASE + off, from, len); + __raw_readsb(ISAIO_BASE + off, from, len); } void outsw(unsigned int port, const void *from, int len) @@ -291,7 +291,7 @@ BUG(); } - __arch_writesw(ISAIO_BASE + off, from, len); + __raw_writesw(ISAIO_BASE + off, from, len); } void insw(unsigned int port, void *from, int len) @@ -306,7 +306,7 @@ BUG(); } - __arch_readsw(ISAIO_BASE + off, from, len); + __raw_readsw(ISAIO_BASE + off, from, len); } void outsl(unsigned int port, const void *from, int len) diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-footbridge/Makefile linux/arch/arm/mach-footbridge/Makefile --- v2.4.8/linux/arch/arm/mach-footbridge/Makefile Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-footbridge/Makefile Sun Aug 12 11:13:59 2001 @@ -16,7 +16,7 @@ obj-n := obj- := -export-objs := netwinder-hw.o +export-objs := arch.o netwinder-hw.o pci-$(CONFIG_ARCH_CATS) += cats-pci.o pci-$(CONFIG_ARCH_EBSA285) += ebsa285-pci.o diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-footbridge/arch.c linux/arch/arm/mach-footbridge/arch.c --- v2.4.8/linux/arch/arm/mach-footbridge/arch.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-footbridge/arch.c Sun Aug 12 11:13:59 2001 @@ -7,6 +7,7 @@ * is pulled from the params struct. */ #include +#include #include #include #include @@ -22,6 +23,18 @@ extern void footbridge_map_io(void); extern void footbridge_init_irq(void); +unsigned int mem_fclk_21285 = 50000000; + +EXPORT_SYMBOL(mem_fclk_21285); + +static int __init parse_tag_memclk(const struct tag *tag) +{ + mem_fclk_21285 = tag->u.memclk.fmemclk; + return 0; +} + +__tagtable(ATAG_MEMCLK, parse_tag_memclk); + #ifdef CONFIG_ARCH_EBSA285 static void __init @@ -73,7 +86,7 @@ printk(KERN_WARNING "Warning: bad NeTTrom parameters " "detected, using defaults\n"); - params->u1.s.nr_pages = 0x2000; /* 32MB */ + params->u1.s.nr_pages = 0x1000; /* 16MB */ params->u1.s.ramdisk_size = 0; params->u1.s.flags = FLAG_READONLY; params->u1.s.initrd_start = 0; @@ -101,7 +114,7 @@ * hard reboots fail on early boards. */ static void __init -fixup_cats(struct machine_desc *desc, struct param_struct *params, +fixup_cats(struct machine_desc *desc, struct param_struct *unused, char **cmdline, struct meminfo *mi) { ORIG_VIDEO_LINES = 25; @@ -123,7 +136,7 @@ #ifdef CONFIG_ARCH_CO285 static void __init -fixup_coebsa285(struct machine_desc *desc, struct param_struct *params, +fixup_coebsa285(struct machine_desc *desc, struct param_struct *unused, char **cmdline, struct meminfo *mi) { extern unsigned long boot_memory_end; diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-integrator/Makefile linux/arch/arm/mach-integrator/Makefile --- v2.4.8/linux/arch/arm/mach-integrator/Makefile Fri Mar 2 18:38:39 2001 +++ linux/arch/arm/mach-integrator/Makefile Sun Aug 12 11:13:59 2001 @@ -11,7 +11,7 @@ # Object file lists. -obj-y := arch.o irq.o mm.o time.o +obj-y := arch.o cpu.o irq.o mm.o time.o obj-m := obj-n := obj- := diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-integrator/arch.c linux/arch/arm/mach-integrator/arch.c --- v2.4.8/linux/arch/arm/mach-integrator/arch.c Fri Mar 2 18:38:39 2001 +++ linux/arch/arm/mach-integrator/arch.c Sun Aug 12 11:13:59 2001 @@ -51,7 +51,7 @@ #endif static void __init -integrator_fixup(struct machine_desc *desc, struct param_struct *params, +integrator_fixup(struct machine_desc *desc, struct param_struct *unused, char **cmdline, struct meminfo *mi) { #ifdef CONFIG_KMI_KEYB diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-integrator/cpu.c linux/arch/arm/mach-integrator/cpu.c --- v2.4.8/linux/arch/arm/mach-integrator/cpu.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-integrator/cpu.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,133 @@ +/* + * linux/arch/arm/mach-integrator/cpu.c + * + * Copyright (C) 2001 Deep Blue Solutions Ltd. + * + * $Id: cpu.c,v 1.1 2001/06/17 10:12:37 rmk Exp $ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * CPU support functions + */ +#include +#include +#include +#include +#include + +#include +#include + +#define CM_ID (IO_ADDRESS(INTEGRATOR_HDR_BASE)+INTEGRATOR_HDR_ID_OFFSET) +#define CM_OSC (IO_ADDRESS(INTEGRATOR_HDR_BASE)+INTEGRATOR_HDR_OSC_OFFSET) +#define CM_STAT (IO_ADDRESS(INTEGRATOR_HDR_BASE)+INTEGRATOR_HDR_STAT_OFFSET) +#define CM_LOCK (IO_ADDRESS(INTEGRATOR_HDR_BASE)+INTEGRATOR_HDR_LOCK_OFFSET) + +struct vco { + unsigned char vdw; + unsigned char od; +}; + +/* + * Divisors for each OD setting. + */ +static unsigned char cc_divisor[8] = { 10, 2, 8, 4, 5, 7, 9, 6 }; + +static unsigned int vco_to_freq(struct vco vco, int factor) +{ + return 2000 * (vco.vdw + 8) / cc_divisor[vco.od] / factor; +} + +#ifdef CONFIG_CPU_FREQ +/* + * Divisor indexes for in ascending divisor order + */ +static unsigned char s2od[] = { 1, 3, 4, 7, 5, 2, 6, 0 }; + +static struct vco freq_to_vco(unsigned int freq_khz, int factor) +{ + struct vco vco = {0, 0}; + unsigned int i, f; + + freq_khz *= factor; + + for (i = 0; i < 8; i++) { + f = freq_khz * cc_divisor[s2od[i]]; + /* f must be between 10MHz and 320MHz */ + if (f > 10000 && f <= 320000) + break; + } + + vco.od = s2od[i]; + vco.vdw = f / 2000 - 8; + + return vco; +} + +/* + * Validate the speed in khz. If it is outside our + * range, then return the lowest. + */ +unsigned int cpufreq_validatespeed(unsigned int freq_khz) +{ + struct vco vco; + + if (freq_khz < 12000) + freq_khz = 12000; + if (freq_khz > 160000) + freq_khz = 160000; + + vco = freq_to_vco(freq_khz, 1); + + if (vco.vdw < 4 || vco.vdw > 152) + return -EINVAL; + + return vco_to_freq(vco, 1); +} + +void cpufreq_setspeed(unsigned int freq_khz) +{ + struct vco vco = freq_to_vco(freq_khz, 1); + u_int cm_osc; + + cm_osc = __raw_readl(CM_OSC); + cm_osc &= 0xfffff800; + cm_osc |= vco.vdw | vco.od << 8; + + __raw_writel(0xa05f, CM_LOCK); + __raw_writel(cm_osc, CM_OSC); + __raw_writel(0, CM_LOCK); +} +#endif + +static int __init cpu_init(void) +{ + u_int cm_osc, cm_stat, cpu_freq_khz, mem_freq_khz; + struct vco vco; + + cm_osc = __raw_readl(CM_OSC); + + vco.od = (cm_osc >> 20) & 7; + vco.vdw = (cm_osc >> 12) & 255; + mem_freq_khz = vco_to_freq(vco, 2); + + printk(KERN_INFO "Memory clock = %d.%03d MHz\n", + mem_freq_khz / 1000, mem_freq_khz % 1000); + + vco.od = (cm_osc >> 8) & 7; + vco.vdw = cm_osc & 255; + cpu_freq_khz = vco_to_freq(vco, 1); + +#ifdef CONFIG_CPU_FREQ + cpufreq_init(cpu_freq_khz); +#endif + + cm_stat = __raw_readl(CM_STAT); + printk("Module id: %d\n", cm_stat & 255); + + return 0; +} + +__initcall(cpu_init); diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-integrator/pci.c linux/arch/arm/mach-integrator/pci.c --- v2.4.8/linux/arch/arm/mach-integrator/pci.c Fri Mar 2 18:38:39 2001 +++ linux/arch/arm/mach-integrator/pci.c Sun Aug 12 11:13:59 2001 @@ -110,10 +110,13 @@ return irq_tab[intnr]; } -extern void pci_v3_init(struct arm_pci_sysdata *); +extern void pci_v3_setup_resources(struct resource **res); +extern void pci_v3_init(void *); struct hw_pci integrator_pci __initdata = { - init: pci_v3_init, - swizzle: integrator_swizzle, - map_irq: integrator_map_irq, + setup_resources: pci_v3_setup_resources, + init: pci_v3_init, + mem_offset: 0x40000000, + swizzle: integrator_swizzle, + map_irq: integrator_map_irq, }; diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-integrator/pci_v3.c linux/arch/arm/mach-integrator/pci_v3.c --- v2.4.8/linux/arch/arm/mach-integrator/pci_v3.c Fri Mar 2 18:38:39 2001 +++ linux/arch/arm/mach-integrator/pci_v3.c Sun Aug 12 11:13:59 2001 @@ -4,7 +4,7 @@ * PCI functions for V3 host PCI bridge * * Copyright (C) 1999 ARM Limited - * Copyright (C) 2000 Deep Blue Solutions Ltd + * Copyright (C) 2000-2001 Deep Blue Solutions Ltd * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -109,11 +109,14 @@ */ // V3 access routines -#define _V3Write16(o,v) __raw_writew(v, PCI_V3_VADDR + (unsigned int)(o)) -#define _V3Read16(o) (__raw_readw(PCI_V3_VADDR + (unsigned int)(o))) +#define v3_writeb(o,v) __raw_writeb(v, PCI_V3_VADDR + (unsigned int)(o)) +#define v3_readb(o) (__raw_readb(PCI_V3_VADDR + (unsigned int)(o))) -#define _V3Write32(o,v) __raw_writel(v, PCI_V3_VADDR + (unsigned int)(o)) -#define _V3Read32(o) (__raw_readl(PCI_V3_VADDR + (unsigned int)(o))) +#define v3_writew(o,v) __raw_writew(v, PCI_V3_VADDR + (unsigned int)(o)) +#define v3_readw(o) (__raw_readw(PCI_V3_VADDR + (unsigned int)(o))) + +#define v3_writel(o,v) __raw_writel(v, PCI_V3_VADDR + (unsigned int)(o)) +#define v3_readl(o) (__raw_readl(PCI_V3_VADDR + (unsigned int)(o))) /*============================================================================ * @@ -182,6 +185,9 @@ #error PCI_BUS_PREMEM_START must be megabyte aligned #endif +#undef V3_LB_BASE_PREFETCH +#define V3_LB_BASE_PREFETCH 0 + static unsigned long v3_open_config_window(struct pci_dev *dev, int offset) { unsigned int address, mapaddress, busnr; @@ -212,13 +218,13 @@ * 0 = PCI A1 & A0 are 0 (0) */ address = PCI_FUNC(dev->devfn) << 8; - mapaddress = 0x0a; + mapaddress = V3_LB_MAP_TYPE_CONFIG; if (slot > 12) /* * high order bits are handled by the MAP register */ - mapaddress |= 1 << (slot - 4); + mapaddress |= 1 << (slot - 5); else /* * low order bits handled directly in the address @@ -237,21 +243,24 @@ * 3:1 = config cycle (101) * 0 = PCI A1 & A0 from host bus (1) */ - mapaddress = 0x0b; + mapaddress = V3_LB_MAP_TYPE_CONFIG | V3_LB_MAP_AD_LOW_EN; address = (busnr << 16) | (dev->devfn << 8); } /* - * Set up base0 to see all 512Mbytes of memory space (not prefetchable), this - * frees up base1 for re-use by configuration memory + * Set up base0 to see all 512Mbytes of memory space (not + * prefetchable), this frees up base1 for re-use by + * configuration memory */ - _V3Write32(V3_LB_BASE0, (PHYS_PCI_MEM_BASE & 0xFFF00000) | 0x90 | V3_LB_BASE_M_ENABLE); + v3_writel(V3_LB_BASE0, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE) | + V3_LB_BASE_ADR_SIZE_512MB | V3_LB_BASE_ENABLE); /* * Set up base1/map1 to point into configuration space. */ - _V3Write32(V3_LB_BASE1, (PHYS_PCI_CONFIG_BASE & 0xFFF00000) | 0x40 | V3_LB_BASE_M_ENABLE); - _V3Write16(V3_LB_MAP1, mapaddress); + v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(PHYS_PCI_CONFIG_BASE) | + V3_LB_BASE_ADR_SIZE_16MB | V3_LB_BASE_ENABLE); + v3_writew(V3_LB_MAP1, mapaddress); return PCI_CONFIG_VADDR + address + offset; } @@ -261,13 +270,17 @@ /* * Reassign base1 for use by prefetchable PCI memory */ - _V3Write32(V3_LB_BASE1, ((PHYS_PCI_MEM_BASE + SZ_256M) & 0xFFF00000) | 0x84 | V3_LB_BASE_M_ENABLE); - _V3Write16(V3_LB_MAP1, ((PCI_BUS_PREMEM_START & 0xFFF00000) >> 16) | 0x0006); + v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE + SZ_256M) | + V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_PREFETCH | + V3_LB_BASE_ENABLE); + v3_writew(V3_LB_MAP1, v3_addr_to_lb_map(PCI_BUS_PREMEM_START) | + V3_LB_MAP_TYPE_MEM_MULTIPLE); /* * And shrink base0 back to a 256M window (NOTE: MAP0 already correct) */ - _V3Write32(V3_LB_BASE0, (PHYS_PCI_MEM_BASE & 0xFFF00000) | 0x80 | V3_LB_BASE_M_ENABLE); + v3_writel(V3_LB_BASE0, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE) | + V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_ENABLE); } static int v3_read_config_byte(struct pci_dev *dev, int where, u8 *val) @@ -386,75 +399,176 @@ static struct resource non_mem = { name: "PCI non-prefetchable", - start: PCI_BUS_NONMEM_START, - end: PCI_BUS_NONMEM_START + PCI_BUS_NONMEM_SIZE - 1, + start: 0x40000000 + PCI_BUS_NONMEM_START, + end: 0x40000000 + PCI_BUS_NONMEM_START + PCI_BUS_NONMEM_SIZE - 1, flags: IORESOURCE_MEM, }; static struct resource pre_mem = { name: "PCI prefetchable", - start: PCI_BUS_PREMEM_START, - end: PCI_BUS_PREMEM_START + PCI_BUS_PREMEM_SIZE - 1, + start: 0x40000000 + PCI_BUS_PREMEM_START, + end: 0x40000000 + PCI_BUS_PREMEM_START + PCI_BUS_PREMEM_SIZE - 1, flags: IORESOURCE_MEM | IORESOURCE_PREFETCH, }; +void __init pci_v3_setup_resources(struct resource **resource) +{ + if (request_resource(&iomem_resource, &non_mem)) + printk("PCI: unable to allocate non-prefetchable memory region\n"); + if (request_resource(&iomem_resource, &pre_mem)) + printk("PCI: unable to allocate prefetchable memory region\n"); + + /* + * bus->resource[0] is the IO resource for this bus + * bus->resource[1] is the mem resource for this bus + * bus->resource[2] is the prefetch mem resource for this bus + */ + resource[0] = &ioport_resource; + resource[1] = &non_mem; + resource[2] = &pre_mem; +} + +/* + * These don't seem to be implemented on the Integrator I have, which + * means I can't get additional information on the reason for the pm2fb + * problems. I suppose I'll just have to mind-meld with the machine. ;) + */ +#define SC_PCI (IO_ADDRESS(INTEGRATOR_SC_PCIENABLE)) +#define SC_LBFADDR (IO_ADDRESS(INTEGRATOR_SC_BASE+0x20)) +#define SC_LBFCODE (IO_ADDRESS(INTEGRATOR_SC_BASE+0x24)) + +static int v3_fault(unsigned long addr, struct pt_regs *regs) +{ + unsigned long pc = instruction_pointer(regs); + unsigned long instr = *(unsigned long *)pc; + + printk("V3 fault: address=0x%08lx, pc=0x%08lx [%08lx] LBFADDR=%08x LBFCODE=%02x ISTAT=%02x\n", + addr, pc, instr, __raw_readl(SC_LBFADDR), __raw_readl(SC_LBFCODE) & 255, + v3_readb(V3_LB_ISTAT)); + + v3_writeb(V3_LB_ISTAT, 0); + __raw_writel(3, SC_PCI); + + /* + * If the instruction being executed was a read, + * make it look like it read all-ones. + */ + if ((instr & 0x0c100000) == 0x04100000) { + int reg = (instr >> 12) & 15; + unsigned long val; + + if (instr & 0x00400000) + val = 255; + else + val = -1; + + regs->uregs[reg] = val; + regs->ARM_pc += 4; + return 0; + } + + return 1; +} + +static void v3_irq(int irq, void *devid, struct pt_regs *regs) +{ + unsigned long pc = instruction_pointer(regs); + unsigned long instr = *(unsigned long *)pc; + char buf[128]; + + sprintf(buf, "V3 int %d: pc=0x%08lx [%08lx] LBFADDR=%08x LBFCODE=%02x ISTAT=%02x\n", irq, + pc, instr, __raw_readl(SC_LBFADDR), __raw_readl(SC_LBFCODE) & 255, + v3_readb(V3_LB_ISTAT)); + printascii(buf); + + v3_writeb(V3_LB_ISTAT, 0); + __raw_writel(3, SC_PCI); + + /* + * If the instruction being executed was a read, + * make it look like it read all-ones. + */ + if ((instr & 0x0c100000) == 0x04100000) { + int reg = (instr >> 16) & 15; + sprintf(buf, " reg%d = %08lx\n", reg, regs->uregs[reg]); + printascii(buf); + } +} + +static struct irqaction v3_int = { + name: "V3", + handler: v3_irq, +}; +static struct irqaction v3_int2 = { + name: "V3TM", + handler: v3_irq, +}; + +extern int (*external_fault)(unsigned long addr, struct pt_regs *regs); + /* * V3_LB_BASE? - local bus address * V3_LB_MAP? - pci bus address */ -void __init pci_v3_init(struct arm_pci_sysdata *sysdata) +void __init pci_v3_init(void *sysdata) { - struct pci_bus *bus; unsigned int pci_cmd; unsigned long flags; + /* + * Hook in our fault handler for PCI errors + */ + external_fault = v3_fault; + spin_lock_irqsave(&v3_lock, flags); /* * Setup window 0 - PCI non-prefetchable memory * Local: 0x40000000 Bus: 0x00000000 Size: 256MB */ - _V3Write32(V3_LB_BASE0, (PHYS_PCI_MEM_BASE & 0xfff00000) | 0x80 | V3_LB_BASE_M_ENABLE); - _V3Write16(V3_LB_MAP0, (PCI_BUS_NONMEM_START >> 16) | 0x0006); + v3_writel(V3_LB_BASE0, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE) | + V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_ENABLE); + v3_writew(V3_LB_MAP0, v3_addr_to_lb_map(PCI_BUS_NONMEM_START) | + V3_LB_MAP_TYPE_MEM); /* * Setup window 1 - PCI prefetchable memory * Local: 0x50000000 Bus: 0x10000000 Size: 256MB */ - _V3Write32(V3_LB_BASE1, ((PHYS_PCI_MEM_BASE + SZ_256M) & 0xFFF00000) | 0x84 | V3_LB_BASE_M_ENABLE); - _V3Write16(V3_LB_MAP1, (PCI_BUS_PREMEM_START >> 16) | 0x0006); + v3_writel(V3_LB_BASE1, v3_addr_to_lb_base(PHYS_PCI_MEM_BASE + SZ_256M) | + V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_PREFETCH | + V3_LB_BASE_ENABLE); + v3_writew(V3_LB_MAP1, v3_addr_to_lb_map(PCI_BUS_PREMEM_START) | + V3_LB_MAP_TYPE_MEM_MULTIPLE); /* * Setup window 2 - PCI IO */ -// _V3Write32(V3_LB_BASE2, (PHYS_PCI_IO_BASE & 0xff000000) | V3_LB_BASE_M_ENABLE); -// _V3Write16(V3_LB_MAP2, 0); + v3_writel(V3_LB_BASE2, v3_addr_to_lb_base2(PHYS_PCI_IO_BASE) | + V3_LB_BASE_ENABLE); + v3_writew(V3_LB_MAP2, v3_addr_to_lb_map2(0)); spin_unlock_irqrestore(&v3_lock, flags); - bus = pci_scan_bus(0, &pci_v3_ops, sysdata); - - if (request_resource(&iomem_resource, &non_mem)) - printk("PCI: unable to allocate non-prefetchable memory region"); - if (request_resource(&iomem_resource, &pre_mem)) - printk("PCI: unable to allocate prefetchable memory region"); - - /* - * bus->resource[0] is the IO resource for this bus - * bus->resource[1] is the mem resource for this bus - * bus->resource[2] is the prefetch mem resource for this bus - */ - bus->resource[1] = &non_mem; - bus->resource[2] = &pre_mem; + pci_scan_bus(0, &pci_v3_ops, sysdata); - pci_cmd = PCI_COMMAND_IO | PCI_COMMAND_MEMORY | + pci_cmd = PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE; - pci_cmd |= sysdata->bus[0].features; + v3_writew(V3_PCI_CMD, pci_cmd); - _V3Write16(V3_PCI_CMD, pci_cmd); - - printk("PCI: Fast back to back transfers %sabled\n", - (sysdata->bus[0].features & PCI_COMMAND_FAST_BACK) ? - "en" : "dis"); + /* + * Clear any error conditions. + */ + __raw_writel(3, SC_PCI); + v3_writew(V3_LB_CFG, v3_readw(V3_LB_CFG) | (1 << 10)); + v3_writeb(V3_LB_ISTAT, 0); + v3_writeb(V3_LB_IMASK, 0x68); + + printk("LB_CFG: %04x LB_ISTAT: %02x LB_IMASK: %02x\n", + v3_readw(V3_LB_CFG), + v3_readb(V3_LB_ISTAT), + v3_readb(V3_LB_IMASK)); + setup_arm_irq(IRQ_V3INT, &v3_int); +// setup_arm_irq(IRQ_LBUSTIMEOUT, &v3_int2); } diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-integrator/time.c linux/arch/arm/mach-integrator/time.c --- v2.4.8/linux/arch/arm/mach-integrator/time.c Fri Mar 2 18:38:39 2001 +++ linux/arch/arm/mach-integrator/time.c Sun Aug 12 11:13:59 2001 @@ -1,7 +1,7 @@ /* * linux/arch/arm/mach-integrator/time.c * - * Copyright (C) 2000 Deep Blue Solutions + * Copyright (C) 2000-2001 Deep Blue Solutions * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -12,13 +12,14 @@ #include #include +#include -#define RTC_DR (*(unsigned long *)(IO_ADDRESS(INTEGRATOR_RTC_BASE) + 0)) -#define RTC_MR (*(unsigned long *)(IO_ADDRESS(INTEGRATOR_RTC_BASE) + 4)) -#define RTC_STAT (*(unsigned long *)(IO_ADDRESS(INTEGRATOR_RTC_BASE) + 8)) -#define RTC_EOI (*(unsigned long *)(IO_ADDRESS(INTEGRATOR_RTC_BASE) + 8)) -#define RTC_LR (*(unsigned long *)(IO_ADDRESS(INTEGRATOR_RTC_BASE) + 12)) -#define RTC_CR (*(unsigned long *)(IO_ADDRESS(INTEGRATOR_RTC_BASE) + 16)) +#define RTC_DR (IO_ADDRESS(INTEGRATOR_RTC_BASE) + 0) +#define RTC_MR (IO_ADDRESS(INTEGRATOR_RTC_BASE) + 4) +#define RTC_STAT (IO_ADDRESS(INTEGRATOR_RTC_BASE) + 8) +#define RTC_EOI (IO_ADDRESS(INTEGRATOR_RTC_BASE) + 8) +#define RTC_LR (IO_ADDRESS(INTEGRATOR_RTC_BASE) + 12) +#define RTC_CR (IO_ADDRESS(INTEGRATOR_RTC_BASE) + 16) #define RTC_CR_MIE 0x00000001 @@ -26,16 +27,16 @@ static int integrator_set_rtc(void) { - RTC_LR = xtime.tv_sec; + __raw_writel(xtime.tv_sec, RTC_LR); return 1; } static int integrator_rtc_init(void) { - RTC_CR = 0; - RTC_EOI = 0; + __raw_writel(0, RTC_CR); + __raw_writel(0, RTC_EOI); - xtime.tv_sec = RTC_DR; + xtime.tv_sec = __raw_readl(RTC_DR); set_rtc = integrator_set_rtc; diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/Makefile linux/arch/arm/mach-sa1100/Makefile --- v2.4.8/linux/arch/arm/mach-sa1100/Makefile Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-sa1100/Makefile Sun Aug 12 11:13:59 2001 @@ -9,16 +9,60 @@ O_TARGET := sa1100.o -# Object file lists. +obj-y := +obj-m := +obj-n := +obj- := -obj-y := arch.o hw.o dma-sa1100.o # mm.o -obj-m := -obj-n := -obj- := +export-objs := assabet.o bitsy.o freebird.o huw_webpanel.o yopy.o \ + generic.o hwtimer.o irq.o usb_ctl.o usb_recv.o usb_send.o \ + dma-sa1100.o dma-sa1111.o pcipool.o -export-objs := dma-sa1100.o dma-sa1111.o hw.o leds.o +# Common support (must be linked before board specific support) +obj-y += generic.o irq.o dma-sa1100.o +obj-$(CONFIG_SA1111) += sa1111.o dma-sa1111.o sa1111-pcibuf.o pcipool.o -obj-$(CONFIG_LEDS) += leds.o -obj-$(CONFIG_SA1111) += dma-sa1111.o +# This needs to be cleaned up. We probably need to have SA1100 +# and SA1110 config symbols. +ifeq ($(CONFIG_CPU_FREQ),y) +obj-$(CONFIG_SA1100_ASSABET) += cpu-sa1110.o +obj-$(CONFIG_SA1100_LART) += cpu-sa1100.o +endif + +# Specific board support +obj-$(CONFIG_SA1100_ASSABET) += assabet.o +obj-$(CONFIG_ASSABET_NEPONSET) += neponset.o +obj-$(CONFIG_SA1100_BITSY) += bitsy.o +obj-$(CONFIG_SA1100_BRUTUS) += brutus.o +obj-$(CONFIG_SA1100_CERF) += cerf.o +obj-$(CONFIG_SA1100_EMPEG) += empeg.o +obj-$(CONFIG_SA1100_FLEXANET) += flexanet.o +obj-$(CONFIG_SA1100_FREEBIRD) += freebird.o +obj-$(CONFIG_SA1100_GRAPHICSCLIENT) += graphicsclient.o +obj-$(CONFIG_SA1100_HUW_WEBPANEL) += huw_webpanel.o +obj-$(CONFIG_SA1100_ITSY) += itsy.o +obj-$(CONFIG_SA1100_JORNADA720) += jornada720.o +obj-$(CONFIG_SA1100_LART) += lart.o +obj-$(CONFIG_SA1100_NANOENGINE) += nanoengine.o +obj-$(CONFIG_SA1100_OMNIMETER) += omnimeter.o +obj-$(CONFIG_SA1100_PANGOLIN) += pangolin.o +obj-$(CONFIG_SA1100_PFS168) += pfs168.o +obj-$(CONFIG_SA1100_PLEB) += pleb.o +obj-$(CONFIG_SA1100_SHERMAN) += sherman.o +obj-$(CONFIG_SA1100_SIMPAD) += simpad.o +obj-$(CONFIG_SA1100_VICTOR) += victor.o +obj-$(CONFIG_SA1100_XP860) += xp860.o +obj-$(CONFIG_SA1100_YOPY) += yopy.o + +# LEDs support +leds-y := leds.o +leds-$(CONFIG_SA1100_ASSABET) += leds-assabet.o +leds-$(CONFIG_SA1100_BRUTUS) += leds-brutus.o +leds-$(CONFIG_SA1100_CERF) += leds-cerf.o +leds-$(CONFIG_SA1100_FLEXANET) += leds-flexanet.o +leds-$(CONFIG_SA1100_GRAPHICSCLIENT) += leds-graphicsclient.o +leds-$(CONFIG_SA1100_LART) += leds-lart.o +leds-$(CONFIG_SA1100_PFS168) += leds-pfs168.o +obj-$(CONFIG_LEDS) += $(leds-y) include $(TOPDIR)/Rules.make diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/arch.c linux/arch/arm/mach-sa1100/arch.c --- v2.4.8/linux/arch/arm/mach-sa1100/arch.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-sa1100/arch.c Wed Dec 31 16:00:00 1969 @@ -1,334 +0,0 @@ -/* - * linux/arch/arm/mach-sa1100/arch.c - * - * Architecture specific fixups. This is where any - * parameters in the params struct are fixed up, or - * any additional architecture specific information - * is pulled from the params struct. - */ -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -extern void genarch_init_irq(void); - - -static void sa1100_power_off(void) -{ - mdelay(100); - cli(); - /* disable internal oscillator, float CS lines */ - PCFR = (PCFR_OPDE | PCFR_FP | PCFR_FS); - /* set lowest clock */ - PPCR = 0; - /* set all GPIOs to input mode */ - GPDR = 0; - /* enter sleep mode */ - PMCR = PMCR_SF; -} - - -static void victor_power_off(void) -{ - /* switch off power supply */ - mdelay(2000); - GPCR = GPIO_GPIO23; - while (1); -} - - -static void xp860_power_off(void) -{ - GPDR |= GPIO_GPIO20; - GPSR = GPIO_GPIO20; - mdelay(1000); - GPCR = GPIO_GPIO20; - while(1); -} - - -extern void __init sa1100_map_io(void); - -#define SET_BANK(__nr,__start,__size) \ - mi->bank[__nr].start = (__start), \ - mi->bank[__nr].size = (__size), \ - mi->bank[__nr].node = (((unsigned)(__start) - PHYS_OFFSET) >> 27) - -static void __init -fixup_sa1100(struct machine_desc *desc, struct param_struct *params, - char **cmdline, struct meminfo *mi) -{ - pm_power_off = sa1100_power_off; - - if (machine_is_assabet()) { - /* - * On Assabet, we must probe for the Neponset board *before* - * paging_init() has occurred to actually determine the amount - * of RAM available. - */ - extern void map_sa1100_gpio_regs(void); - extern void get_assabet_scr(void); - map_sa1100_gpio_regs(); - get_assabet_scr(); - - SET_BANK( 0, 0xc0000000, 32*1024*1024 ); - mi->nr_banks = 1; - - if (machine_has_neponset()) { - printk("Neponset expansion board detected\n"); - /* - * Note that Neponset RAM is slower... - * and still untested. - * This would be a candidate for - * _real_ NUMA support. - */ - //SET_BANK( 1, 0xd0000000, 32*1024*1024 ); - //mi->nr_banks = 2; - } - - ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); - setup_ramdisk( 1, 0, 0, 8192 ); - setup_initrd( 0xc0800000, 3*1024*1024 ); - } - - else if (machine_is_pangolin()) { - SET_BANK( 0, 0xc0000000, 32*1024*1024 ); - SET_BANK( 1, 0xc8000000, 32*1024*1024 ); - mi->nr_banks = 2; - - ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); - setup_ramdisk( 1, 0, 0, 16384 ); - setup_initrd( 0xc0800000, 9*1024*1024 ); - } - - else if (machine_is_brutus()) { - SET_BANK( 0, 0xc0000000, 4*1024*1024 ); - SET_BANK( 1, 0xc8000000, 4*1024*1024 ); - SET_BANK( 2, 0xd0000000, 4*1024*1024 ); - SET_BANK( 3, 0xd8000000, 4*1024*1024 ); - mi->nr_banks = 4; - - ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); - setup_ramdisk( 1, 0, 0, 8192 ); - setup_initrd( __phys_to_virt(0xd8000000), 3*1024*1024 ); - } - - else if (machine_is_cerf()) { - // 16Meg Ram. - SET_BANK( 0, 0xc0000000, 8*1024*1024 ); - SET_BANK( 1, 0xc8000000, 8*1024*1024 ); // comment this out for 8MB Cerfs - mi->nr_banks = 2; - - ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); - setup_ramdisk(1, 0, 0, 8192); - // Save 2Meg for RAMDisk - setup_initrd(0xc0500000, 3*1024*1024); - } - - else if (machine_is_empeg()) { - SET_BANK( 0, 0xc0000000, 4*1024*1024 ); - SET_BANK( 1, 0xc8000000, 4*1024*1024 ); - mi->nr_banks = 2; - - ROOT_DEV = MKDEV( 3, 1 ); /* /dev/hda1 */ - setup_ramdisk( 1, 0, 0, 4096 ); - setup_initrd( 0xd0000000+((1024-320)*1024), (320*1024) ); - } - - else if (machine_is_lart()) { - /* - * Note that LART is a special case - it doesn't use physical - * address line A23 on the DRAM, so we effectively have 4 * 8MB - * in two SA1100 banks. - */ - SET_BANK( 0, 0xc0000000, 8*1024*1024 ); - SET_BANK( 1, 0xc1000000, 8*1024*1024 ); - SET_BANK( 2, 0xc8000000, 8*1024*1024 ); - SET_BANK( 3, 0xc9000000, 8*1024*1024 ); - mi->nr_banks = 4; - - ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); - setup_ramdisk(1, 0, 0, 8192); - setup_initrd(0xc0400000, 4*1024*1024); - } - - else if (machine_is_graphicsclient()) { - SET_BANK( 0, 0xc0000000, 16*1024*1024 ); - mi->nr_banks = 1; - - ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); - setup_ramdisk( 1, 0, 0, 8192 ); - setup_initrd( __phys_to_virt(0xc0800000), 4*1024*1024 ); - } - - else if (machine_is_nanoengine()) { - SET_BANK( 0, 0xc0000000, 32*1024*1024 ); - mi->nr_banks = 1; - - ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); - setup_ramdisk( 1, 0, 0, 8192 ); - setup_initrd( __phys_to_virt(0xc0800000), 4*1024*1024 ); - - /* Get command line parameters passed from the loader (if any) */ - if( *((char*)0xc0000100) ) - *cmdline = ((char *)0xc0000100); - } - - else if (machine_is_victor()) { - SET_BANK( 0, 0xc0000000, 4*1024*1024 ); - mi->nr_banks = 1; - - ROOT_DEV = MKDEV( 60, 2 ); - - /* Get command line parameters passed from the loader (if any) */ - if( *((char*)0xc0000000) ) - strcpy( *cmdline, ((char *)0xc0000000) ); - - /* power off if any problem */ - strcat( *cmdline, " panic=1" ); - - pm_power_off = victor_power_off; - } - - else if (machine_is_sherman()) { - SET_BANK( 0, 0xc0000000, 64*1024*1024 ); - SET_BANK( 1, 0xc8000000, 64*1024*1024 ); - mi->nr_banks = 2; - - ROOT_DEV = MKDEV( 60, 2 ); - setup_ramdisk( 1, 0, 0, 8192 ); -// setup_initrd( 0xc0400000, 8*1024*1024 ); -} - - else if (machine_is_xp860()) { - SET_BANK( 0, 0xc0000000, 32*1024*1024 ); - mi->nr_banks = 1; - - pm_power_off = xp860_power_off; - } -} - -#ifdef CONFIG_SA1100_ASSABET -MACHINE_START(ASSABET, "Intel-Assabet") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_PANGOLIN -MACHINE_START(PANGOLIN, "Dialogue-Pangolin") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_BITSY -MACHINE_START(BITSY, "Compaq Bitsy") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - BOOT_PARAMS(0xc0000100) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_BRUTUS -MACHINE_START(BRUTUS, "Intel Brutus (SA1100 eval board)") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_CERF -MACHINE_START(CERF, "Intrinsyc CerfBoard") - MAINTAINER("Pieter Truter") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_EMPEG -MACHINE_START(EMPEG, "empeg MP3 Car Audio Player") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_GRAPHICSCLIENT -MACHINE_START(GRAPHICSCLIENT, "ADS GraphicsClient") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_ITSY -MACHINE_START(ITSY, "Compaq Itsy") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - BOOT_PARAMS(0xc0000100) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_LART -MACHINE_START(LART, "LART") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_NANOENGINE -MACHINE_START(NANOENGINE, "BSE nanoEngine") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_PLEB -MACHINE_START(PLEB, "PLEB") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_VICTOR -MACHINE_START(VICTOR, "VisuAide Victor") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_SHERMAN -MACHINE_START(SHERMAN, "Blazie Engineering Sherman") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif -#ifdef CONFIG_SA1100_XP860 -MACHINE_START(XP860, "XP860") - BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) - FIXUP(fixup_sa1100) - MAPIO(sa1100_map_io) - INITIRQ(genarch_init_irq) -MACHINE_END -#endif diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/assabet.c linux/arch/arm/mach-sa1100/assabet.c --- v2.4.8/linux/arch/arm/mach-sa1100/assabet.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/assabet.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,308 @@ +/* + * linux/arch/arm/mach-sa1100/assabet.c + * + * Author: Nicolas Pitre + * + * This file contains all Assabet-specific tweaks. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "generic.h" + + +unsigned long BCR_value = BCR_DB1110; +unsigned long SCR_value = SCR_INIT; +EXPORT_SYMBOL(BCR_value); +EXPORT_SYMBOL(SCR_value); + + +static int __init assabet_init(void) +{ + if (machine_is_assabet() && machine_has_neponset()) { + /* + * Angel sets this, but other bootloaders may not. + * + * This must precede any driver calls to BCR_set() + * or BCR_clear(). + */ + BCR = BCR_value = BCR_DB1111; + +#ifndef CONFIG_ASSABET_NEPONSET + printk( "Warning: Neponset detected but full support " + "hasn't been configured in the kernel\n" ); +#endif + } + return 0; +} + +__initcall(assabet_init); + + +/* + * On Assabet, we must probe for the Neponset board _before_ + * paging_init() has occurred to actually determine the amount + * of RAM available. To do so, we map the appropriate IO section + * in the page table here in order to access GPIO registers. + */ +static void __init map_sa1100_gpio_regs( void ) +{ + unsigned long phys = _GPLR & PMD_MASK; + unsigned long virt = io_p2v(phys); + int prot = PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_DOMAIN(DOMAIN_IO); + pmd_t pmd; + pmd_val(pmd) = phys | prot; + set_pmd(pmd_offset(pgd_offset_k(virt), virt), pmd); +} + +/* + * Read System Configuration "Register" + * (taken from "Intel StrongARM SA-1110 Microprocessor Development Board + * User's Guide", section 4.4.1) + * + * This same scan is performed in arch/arm/boot/compressed/head-sa1100.S + * to set up the serial port for decompression status messages. We + * repeat it here because the kernel may not be loaded as a zImage, and + * also because it's a hassle to communicate the SCR value to the kernel + * from the decompressor. + */ +static void __init get_assabet_scr(void) +{ + unsigned long flags, scr, i; + + local_irq_save(flags); + GPDR |= 0x3fc; /* Configure GPIO 9:2 as outputs */ + GPSR = 0x3fc; /* Write 0xFF to GPIO 9:2 */ + GPDR &= ~(0x3fc); /* Configure GPIO 9:2 as inputs */ + for(i = 100; i--; scr = GPLR); /* Read GPIO 9:2 */ + GPDR |= 0x3fc; /* restore correct pin direction */ + local_irq_restore(flags); + scr &= 0x3fc; /* save as system configuration byte. */ + SCR_value = scr; +} + +static void __init +fixup_assabet(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + struct tag *t = (struct tag *)params; + + /* This must be done before any call to machine_has_neponset() */ + map_sa1100_gpio_regs(); + get_assabet_scr(); + + if (machine_has_neponset()) + printk("Neponset expansion board detected\n"); + + if (t->hdr.tag != ATAG_CORE) { + t->hdr.tag = ATAG_CORE; + t->hdr.size = tag_size(tag_core); + t->u.core.flags = 0; + t->u.core.pagesize = PAGE_SIZE; + t->u.core.rootdev = RAMDISK_MAJOR << 8 | 0; + t = tag_next(t); + + t->hdr.tag = ATAG_MEM; + t->hdr.size = tag_size(tag_mem32); + t->u.mem.start = 0xc0000000; + t->u.mem.size = 32 * 1024 * 1024; + t = tag_next(t); + + + /* + * Note that Neponset RAM is slower... + * and still untested. + * This would be a candidate for + * _real_ NUMA support. + */ + if (machine_has_neponset() && 0) { + t->hdr.tag = ATAG_MEM; + t->hdr.size = tag_size(tag_mem32); + t->u.mem.start = 0xd0000000; + t->u.mem.size = 32 * 1024 * 1024; + t = tag_next(t); + } + + t->hdr.tag = ATAG_RAMDISK; + t->hdr.size = tag_size(tag_ramdisk); + t->u.ramdisk.flags = 1; + t->u.ramdisk.size = 8192; + t->u.ramdisk.start = 0; + t = tag_next(t); + + t->hdr.tag = ATAG_INITRD; + t->hdr.size = tag_size(tag_initrd); + t->u.initrd.start = 0xc0800000; + t->u.initrd.size = 3 * 1024 * 1024; + t = tag_next(t); + + t->hdr.tag = ATAG_NONE; + t->hdr.size = 0; + } +} + + +static struct map_desc assabet_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf1000000, 0x12000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Board Control Register */ + { 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* MQ200 */ + /* f3000000 - neponset system registers */ + /* f4000000 - neponset SA1111 registers */ + LAST_DESC +}; + +static void assabet_uart_pm(struct uart_port *port, u_int state, u_int oldstate) +{ + if (port->mapbase == _Ser1UTCR0) { + if (state) + BCR_clear(BCR_RS232EN); + else + BCR_set(BCR_RS232EN); + } +} + +/* + * Note! this can be called from IRQ context. + * FIXME: You _need_ to handle BCR carefully, which doesn't + * happen at the moment. Suggest putting interrupt save/restore + * in BCR_set/clear. + * + * NB: Assabet uses COM_RTS and COM_DTR for both UART1 (com port) + * and UART3 (radio module). We only handle them for UART1 here. + */ +static void assabet_set_mctrl(struct uart_port *port, u_int mctrl) +{ + if (port->mapbase == _Ser1UTCR0) { + u_int set = 0, clear = 0; + + if (mctrl & TIOCM_RTS) + set |= BCR_COM_RTS; + else + clear |= BCR_COM_RTS; + + if (mctrl & TIOCM_DTR) + set |= BCR_COM_DTR; + else + clear |= BCR_COM_DTR; + + BCR_clear(clear); + BCR_set(set); + } +} + +static int assabet_get_mctrl(struct uart_port *port) +{ + u_int ret = 0; + u_int bsr = BSR; + + /* need 2 reads to read current value */ + bsr = BSR; + + if (port->mapbase == _Ser1UTCR0) { + if (bsr & BSR_COM_DCD) + ret |= TIOCM_CD; + if (bsr & BSR_COM_CTS) + ret |= TIOCM_CTS; + if (bsr & BSR_COM_DSR) + ret |= TIOCM_DSR; + } else if (port->mapbase == _Ser3UTCR0) { + if (bsr & BSR_RAD_DCD) + ret |= TIOCM_CD; + if (bsr & BSR_RAD_CTS) + ret |= TIOCM_CTS; + if (bsr & BSR_RAD_DSR) + ret |= TIOCM_DSR; + if (bsr & BSR_RAD_RI) + ret |= TIOCM_RI; + } else { + ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR; + } + + return ret; +} + +static struct sa1100_port_fns assabet_port_fns __initdata = { + set_mctrl: assabet_set_mctrl, + get_mctrl: assabet_get_mctrl, + pm: assabet_uart_pm, +}; + +static void __init assabet_map_io(void) +{ + extern void neponset_map_io(void); + + sa1100_map_io(); + iotable_init(assabet_io_desc); + +#ifdef CONFIG_ASSABET_NEPONSET + /* + * We map Neponset registers even if it isn't present since + * many drivers will try to probe their stuff (and fail). + * This is still more friendly than a kernel paging request + * crash. + */ + neponset_map_io(); +#endif + + sa1100_register_uart(1, 2); + if (machine_has_neponset()) { + /* + * When Neponset is attached, the first UART should be + * UART3. That's what Angel is doing and many documents + * are stating this. + * We do the Neponset mapping even if Neponset support + * isn't compiled in so the user will still get something on + * the expected physical serial port. + */ + sa1100_register_uart(0, 3); + sa1100_register_uart(2, 1); + /* + * Set SUS bit in SDCR0 so serial port 1 functions. + * Its called GPCLKR0 in my SA1110 manual. + */ + Ser1SDCR0 |= SDCR0_SUS; + } else { + sa1100_register_uart_fns(&assabet_port_fns); + sa1100_register_uart(0, 1); /* com port */ + sa1100_register_uart(2, 3); /* radio module */ + } + + /* + * Ensure that these pins are set as outputs and are driving + * logic 0. This ensures that we won't inadvertently toggle + * the WS latch in the CPLD, and we don't float causing + * excessive power drain. --rmk + */ + GPDR |= GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM; + GPCR |= GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM; +} + + +MACHINE_START(ASSABET, "Intel-Assabet") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + BOOT_PARAMS(0xc0000100) + FIXUP(fixup_assabet) + MAPIO(assabet_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/bitsy.c linux/arch/arm/mach-sa1100/bitsy.c --- v2.4.8/linux/arch/arm/mach-sa1100/bitsy.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/bitsy.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,175 @@ +/* + * linux/arch/arm/mach-sa1100/bitsy.c + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include "generic.h" + + +/* + * Bitsy has extended, write-only memory-mapped GPIO's + */ + +static int bitsy_egpio = EGPIO_BITSY_RS232_ON; + +void clr_bitsy_egpio(unsigned long x) +{ + bitsy_egpio &= ~x; + BITSY_EGPIO = bitsy_egpio; +} + +void set_bitsy_egpio(unsigned long x) +{ + bitsy_egpio |= x; + BITSY_EGPIO = bitsy_egpio; +} + +EXPORT_SYMBOL(clr_bitsy_egpio); +EXPORT_SYMBOL(set_bitsy_egpio); + + +/* + * low-level UART features + */ + +static void bitsy_uart_set_mctrl(struct uart_port *port, u_int mctrl) +{ + if (port->mapbase == _Ser3UTCR0) { + if (mctrl & TIOCM_RTS) + GPCR = GPIO_BITSY_COM_RTS; + else + GPSR = GPIO_BITSY_COM_RTS; + } +} + +static int bitsy_uart_get_mctrl(struct uart_port *port) +{ + int ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR; + + if (port->mapbase == _Ser3UTCR0) { + int gplr = GPLR; + if (gplr & GPIO_BITSY_COM_DCD) + ret &= ~TIOCM_CD; + if (gplr & GPIO_BITSY_COM_CTS) + ret &= ~TIOCM_CTS; + } + + return ret; +} + +static void bitsy_dcd_intr(int irq, void *dev_id, struct pt_regs *regs) +{ + struct uart_info *info = dev_id; + /* Note: should only call this if something has changed */ + uart_handle_dcd_change(info, GPLR & GPIO_BITSY_COM_DCD); +} + +static void bitsy_cts_intr(int irq, void *dev_id, struct pt_regs *regs) +{ + struct uart_info *info = dev_id; + /* Note: should only call this if something has changed */ + uart_handle_cts_change(info, GPLR & GPIO_BITSY_COM_CTS); +} + +static void bitsy_uart_pm(struct uart_port *port, u_int state, u_int oldstate) +{ + if (port->mapbase == _Ser2UTCR0) { + if (state == 0) { + set_bitsy_egpio(EGPIO_BITSY_IR_ON); + } else { + clr_bitsy_egpio(EGPIO_BITSY_IR_ON); + } + } else if (port->mapbase == _Ser3UTCR0) { + if (state == 0) { + set_bitsy_egpio(EGPIO_BITSY_RS232_ON); + } else { + clr_bitsy_egpio(EGPIO_BITSY_RS232_ON); + } + } +} + +static int bitsy_uart_open(struct uart_port *port, struct uart_info *info) +{ + int ret = 0; + + if (port->mapbase == _Ser2UTCR0) { + Ser2UTCR4 = UTCR4_HSE; + Ser2HSCR0 = 0; + Ser2HSSR0 = HSSR0_EIF | HSSR0_TUR | + HSSR0_RAB | HSSR0_FRE; + } else if (port->mapbase == _Ser3UTCR0) { + GPDR &= ~(GPIO_BITSY_COM_DCD|GPIO_BITSY_COM_CTS); + GPDR |= GPIO_BITSY_COM_RTS; + set_GPIO_IRQ_edge(GPIO_BITSY_COM_DCD|GPIO_BITSY_COM_CTS, + GPIO_BOTH_EDGES); + + ret = request_irq(IRQ_GPIO_BITSY_COM_DCD, bitsy_dcd_intr, + 0, "RS232 DCD", info); + if (ret) + return ret; + + ret = request_irq(IRQ_GPIO_BITSY_COM_CTS, bitsy_cts_intr, + 0, "RS232 CTS", info); + if (ret) + free_irq(IRQ_GPIO_BITSY_COM_DCD, info); + } + return ret; +} + +static void bitsy_uart_close(struct uart_port *port, struct uart_info *info) +{ + if (port->mapbase == _Ser3UTCR0) { + free_irq(IRQ_GPIO_BITSY_COM_DCD, info); + free_irq(IRQ_GPIO_BITSY_COM_CTS, info); + } +} + +static struct sa1100_port_fns bitsy_port_fns __initdata = { + set_mctrl: bitsy_uart_set_mctrl, + get_mctrl: bitsy_uart_get_mctrl, + pm: bitsy_uart_pm, + open: bitsy_uart_open, + close: bitsy_uart_close, +}; + +static struct map_desc bitsy_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf0000000, 0x49000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* EGPIO 0 */ + { 0xf1000000, 0x10000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* static memory bank 2 */ + { 0xf3000000, 0x40000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* static memory bank 4 */ + LAST_DESC +}; + +static void __init bitsy_map_io(void) +{ + sa1100_map_io(); + iotable_init(bitsy_io_desc); + + sa1100_register_uart_fns(&bitsy_port_fns); + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); /* isn't this one driven elsewhere? */ + sa1100_register_uart(2, 2); +} + +MACHINE_START(BITSY, "Compaq iPAQ") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + BOOT_PARAMS(0xc0000100) + MAPIO(bitsy_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/brutus.c linux/arch/arm/mach-sa1100/brutus.c --- v2.4.8/linux/arch/arm/mach-sa1100/brutus.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/brutus.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,57 @@ +/* + * linux/arch/arm/mach-sa1100/brutus.c + * + * Author: Nicolas Pitre + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static void __init +fixup_brutus(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 4*1024*1024 ); + SET_BANK( 1, 0xc8000000, 4*1024*1024 ); + SET_BANK( 2, 0xd0000000, 4*1024*1024 ); + SET_BANK( 3, 0xd8000000, 4*1024*1024 ); + mi->nr_banks = 4; + + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 8192 ); + setup_initrd( __phys_to_virt(0xd8000000), 3*1024*1024 ); +} + +static void __init brutus_map_io(void) +{ + sa1100_map_io(); + + sa1100_register_uart(0, 1); + sa1100_register_uart(1, 3); + GAFR |= (GPIO_UART_TXD | GPIO_UART_RXD); + GPDR |= GPIO_UART_TXD; + GPDR &= ~GPIO_UART_RXD; + PPAR |= PPAR_UPR; +} + +MACHINE_START(BRUTUS, "Intel Brutus (SA1100 eval board)") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_brutus) + MAPIO(brutus_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/cerf.c linux/arch/arm/mach-sa1100/cerf.c --- v2.4.8/linux/arch/arm/mach-sa1100/cerf.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/cerf.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,62 @@ +/* + * linux/arch/arm/mach-sa1100/cerf.c + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static void __init +fixup_cerf(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ +#ifdef CONFIG_SA1100_CERF_32MB + // 32MB RAM + SET_BANK( 0, 0xc0000000, 32*1024*1024 ); + mi->nr_banks = 1; +#else + // 16Meg Ram. + SET_BANK( 0, 0xc0000000, 8*1024*1024 ); + SET_BANK( 1, 0xc8000000, 8*1024*1024 ); // comment this out for 8MB Cerfs + mi->nr_banks = 2; +#endif + + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk(1, 0, 0, 8192); + // Save 2Meg for RAMDisk + setup_initrd(0xc0500000, 3*1024*1024); +} + +static struct map_desc cerf_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf0000000, 0x08000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Crystal Chip */ + LAST_DESC +}; + +static void __init cerf_map_io(void) +{ + sa1100_map_io(); + iotable_init(cerf_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); +} + +MACHINE_START(CERF, "Intrinsyc CerfBoard") + MAINTAINER("Pieter Truter") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_cerf) + MAPIO(cerf_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/cpu-sa1100.c linux/arch/arm/mach-sa1100/cpu-sa1100.c --- v2.4.8/linux/arch/arm/mach-sa1100/cpu-sa1100.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/cpu-sa1100.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,232 @@ +/* + * cpu-sa1100.c: clock scaling for the SA1100 + * + * Copyright (C) 2000 2001, The Delft University of Technology + * + * Authors: + * - Johan Pouwelse (J.A.Pouwelse@its.tudelft.nl): initial version + * - Erik Mouw (J.A.K.Mouw@its.tudelft.nl): + * - major rewrite for linux-2.3.99 + * - rewritten for the more generic power management scheme in + * linux-2.4.5-rmk1 + * + * This software has been developed while working on the LART + * computing board (http://www.lart.tudelft.nl/), which is + * sponsored by the Mobile Multi-media Communications + * (http://www.mmc.tudelft.nl/) and Ubiquitous Communications + * (http://www.ubicom.tudelft.nl/) projects. + * + * The authors can be reached at: + * + * Erik Mouw + * Information and Communication Theory Group + * Faculty of Information Technology and Systems + * Delft University of Technology + * P.O. Box 5031 + * 2600 GA Delft + * The Netherlands + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * Theory of operations + * ==================== + * + * Clock scaling can be used to lower the power consumption of the CPU + * core. This will give you a somewhat longer running time. + * + * The SA-1100 has a single register to change the core clock speed: + * + * PPCR 0x90020014 PLL config + * + * However, the DRAM timings are closely related to the core clock + * speed, so we need to change these, too. The used registers are: + * + * MDCNFG 0xA0000000 DRAM config + * MDCAS0 0xA0000004 Access waveform + * MDCAS1 0xA0000008 Access waveform + * MDCAS2 0xA000000C Access waveform + * + * Care must be taken to change the DRAM parameters the correct way, + * because otherwise the DRAM becomes unusable and the kernel will + * crash. + * + * The simple solution to avoid a kernel crash is to put the actual + * clock change in ROM and jump to that code from the kernel. The main + * disadvantage is that the ROM has to be modified, which is not + * possible on all SA-1100 platforms. Another disadvantage is that + * jumping to ROM makes clock switching unecessary complicated. + * + * The idea behind this driver is that the memory configuration can be + * changed while running from DRAM (even with interrupts turned on!) + * as long as all re-configuration steps yield a valid DRAM + * configuration. The advantages are clear: it will run on all SA-1100 + * platforms, and the code is very simple. + * + * If you really want to understand what is going on in + * sa1100_update_dram_timings(), you'll have to read sections 8.2, + * 9.5.7.3, and 10.2 from the "Intel StrongARM SA-1100 Microprocessor + * Developers Manual" (available for free from Intel). + * + */ + +#include +#include +#include +#include + +#include + + + + +typedef struct { + int speed; + u32 mdcnfg; + u32 mdcas0; + u32 mdcas1; + u32 mdcas2; +} sa1100_dram_regs_t; + + + + +static sa1100_dram_regs_t sa1100_dram_settings[] = +{ + /* { mdcnfg, mdcas0, mdcas1, mdcas2 } */ /* clock frequency */ + { 59000, 0x00dc88a3, 0xcccccccf, 0xfffffffc, 0xffffffff }, /* 59.0 MHz */ + { 73700, 0x011490a3, 0xcccccccf, 0xfffffffc, 0xffffffff }, /* 73.7 MHz */ + { 88500, 0x014e90a3, 0xcccccccf, 0xfffffffc, 0xffffffff }, /* 88.5 MHz */ + { 103200, 0x01889923, 0xcccccccf, 0xfffffffc, 0xffffffff }, /* 103.2 MHz */ + { 118000, 0x01c29923, 0x9999998f, 0xfffffff9, 0xffffffff }, /* 118.0 MHz */ + { 132700, 0x01fb2123, 0x9999998f, 0xfffffff9, 0xffffffff }, /* 132.7 MHz */ + { 147500, 0x02352123, 0x3333330f, 0xfffffff3, 0xffffffff }, /* 147.5 MHz */ + { 162200, 0x026b29a3, 0x38e38e1f, 0xfff8e38e, 0xffffffff }, /* 162.2 MHz */ + { 176900, 0x02a329a3, 0x71c71c1f, 0xfff1c71c, 0xffffffff }, /* 176.9 MHz */ + { 191700, 0x02dd31a3, 0xe38e383f, 0xffe38e38, 0xffffffff }, /* 191.7 MHz */ + { 206400, 0x03153223, 0xc71c703f, 0xffc71c71, 0xffffffff }, /* 206.4 MHz */ + { 221200, 0x034fba23, 0xc71c703f, 0xffc71c71, 0xffffffff }, /* 221.2 MHz */ + { 235900, 0x03853a23, 0xe1e1e07f, 0xe1e1e1e1, 0xffffffe1 }, /* 235.9 MHz */ + { 250700, 0x03bf3aa3, 0xc3c3c07f, 0xc3c3c3c3, 0xffffffc3 }, /* 250.7 MHz */ + { 265400, 0x03f7c2a3, 0xc3c3c07f, 0xc3c3c3c3, 0xffffffc3 }, /* 265.4 MHz */ + { 280200, 0x0431c2a3, 0x878780ff, 0x87878787, 0xffffff87 }, /* 280.2 MHz */ + { 0, 0, 0, 0, 0 } /* last entry */ +}; + + + + +static void sa1100_update_dram_timings(int current_speed, int new_speed) +{ + sa1100_dram_regs_t *settings = sa1100_dram_settings; + + /* find speed */ + while(settings->speed != 0) { + if(new_speed == settings->speed) + break; + + settings++; + } + + if(settings->speed == 0) { + panic("%s: couldn't find dram setting for speed %d\n", + __FUNCTION__, new_speed); + } + + /* No risk, no fun: run with interrupts on! */ + if(new_speed > current_speed) { + /* We're going FASTER, so first relax the memory + * timings before changing the core frequency + */ + + /* Half the memory access clock */ + MDCNFG |= MDCNFG_CDB2; + + /* The order of these statements IS important, keep 8 + * pulses!! + */ + MDCAS2 = settings->mdcas2; + MDCAS1 = settings->mdcas1; + MDCAS0 = settings->mdcas0; + MDCNFG = settings->mdcnfg; + } else { + /* We're going SLOWER: first decrease the core + * frequency and then tighten the memory settings. + */ + + /* Half the memory access clock */ + MDCNFG |= MDCNFG_CDB2; + + /* The order of these statements IS important, keep 8 + * pulses!! + */ + MDCAS0 = settings->mdcas0; + MDCAS1 = settings->mdcas1; + MDCAS2 = settings->mdcas2; + MDCNFG = settings->mdcnfg; + } +} + + + + +static int sa1100_dram_notifier(struct notifier_block *nb, + unsigned long val, void *data) +{ + struct cpufreq_info *ci = data; + + switch(val) { + case CPUFREQ_MINMAX: + cpufreq_updateminmax(data, sa1100_dram_settings->speed, -1); + break; + + case CPUFREQ_PRECHANGE: + if(ci->new_freq > ci->old_freq) + sa1100_update_dram_timings(ci->old_freq, ci->new_freq); + break; + + case CPUFREQ_POSTCHANGE: + if(ci->new_freq < ci->old_freq) + sa1100_update_dram_timings(ci->old_freq, ci->new_freq); + break; + + default: + printk(KERN_INFO "%s: ignoring unknown notifier type (%ld)\n", + __FUNCTION__, val); + } + + return 0; +} + + + + +static struct notifier_block sa1100_dram_block = { + notifier_call: sa1100_dram_notifier, +}; + + + + +static int __init sa1100_dram_init(void) +{ + return cpufreq_register_notifier(&sa1100_dram_block); +} + + + + +__initcall(sa1100_dram_init); diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/cpu-sa1110.c linux/arch/arm/mach-sa1100/cpu-sa1110.c --- v2.4.8/linux/arch/arm/mach-sa1100/cpu-sa1110.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/cpu-sa1110.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,281 @@ +/* + * linux/arch/arm/mach-sa1100/cpu-sa1110.c + * + * Copyright (C) 2001 Russell King + * + * $Id: cpu-sa1110.c,v 1.3 2001/08/12 15:41:53 rmk Exp $ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Note: there are two erratas that apply to the SA1110 here: + * 7 - SDRAM auto-power-up failure (rev A0) + * 13 - Corruption of internal register reads/writes following + * SDRAM reads (rev A0, B0, B1) + * + * We ignore rev. A0 and B0 devices; I don't think they're worth supporting. + */ +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#undef DEBUG + +extern u_int processor_id; + +#define CPU_REVISION (processor_id & 15) +#define CPU_SA1110_A0 (0) +#define CPU_SA1110_B0 (4) +#define CPU_SA1110_B1 (5) +#define CPU_SA1110_B2 (6) +#define CPU_SA1110_B4 (8) + +struct sdram_params { + u_char rows; /* bits */ + u_char cas_latency; /* cycles */ + u_char tck; /* clock cycle time (ns) */ + u_char trcd; /* activate to r/w (ns) */ + u_char trp; /* precharge to activate (ns) */ + u_char twr; /* write recovery time (ns) */ + u_short refresh; /* refresh time for array (us) */ +}; + +static struct sdram_params tc59sm716_cl2_params __initdata = { + rows: 12, + tck: 10, + trcd: 20, + trp: 20, + twr: 10, + refresh: 64000, + cas_latency: 2, +}; + +static struct sdram_params tc59sm716_cl3_params __initdata = { + rows: 12, + tck: 8, + trcd: 20, + trp: 20, + twr: 8, + refresh: 64000, + cas_latency: 3, +}; + +static struct sdram_params sdram_params; + +/* + * Given a period in ns and frequency in khz, calculate the number of + * cycles of frequency in period. Note that we round up to the next + * cycle, even if we are only slightly over. + */ +static inline u_int ns_to_cycles(u_int ns, u_int khz) +{ + return (ns * khz + 999999) / 1000000; +} + +/* + * Create the MDCAS register bit pattern. + */ +static inline void set_mdcas(u_int *mdcas, int delayed, u_int rcd) +{ + u_int shift; + + rcd = 2 * rcd - 1; + shift = delayed + 1 + rcd; + + mdcas[0] = (1 << rcd) - 1; + mdcas[0] |= 0x55555555 << shift; + mdcas[1] = mdcas[2] = 0x55555555 << (shift & 1); +} + +static void sdram_update_timing(u_int cpu_khz, struct sdram_params *sdram) +{ + u_int mdcnfg, mdrefr, mdcas[3], mem_khz, sd_khz, trp, twr; + unsigned long flags; + + mem_khz = cpu_khz / 2; + sd_khz = mem_khz; + + /* + * If SDCLK would invalidate the SDRAM timings, + * run SDCLK at half speed. + * + * CPU steppings prior to B2 must either run the memory at + * half speed or use delayed read latching (errata 13). + */ + if ((ns_to_cycles(sdram->tck, sd_khz) > 1) || + (CPU_REVISION < CPU_SA1110_B2 && sd_khz < 62000)) + sd_khz /= 2; + + mdcnfg = MDCNFG & 0x007f007f; + + twr = ns_to_cycles(sdram->twr, mem_khz); + + /* trp should always be >1 */ + trp = ns_to_cycles(sdram->trp, mem_khz) - 1; + if (trp < 1) + trp = 1; + + mdcnfg |= trp << 8; + mdcnfg |= trp << 24; + mdcnfg |= sdram->cas_latency << 12; + mdcnfg |= sdram->cas_latency << 28; + mdcnfg |= twr << 14; + mdcnfg |= twr << 30; + + mdrefr = MDREFR & 0xffbffff0; + mdrefr |= 7; + + if (sd_khz != mem_khz) + mdrefr |= MDREFR_K1DB2; + + /* initial number of '1's in MDCAS + 1 */ + set_mdcas(mdcas, sd_khz >= 62000, ns_to_cycles(sdram->trcd, mem_khz)); + +#ifdef DEBUG + mdelay(250); + printk("MDCNFG: %08x MDREFR: %08x MDCAS0: %08x MDCAS1: %08x MDCAS2: %08x\n", + mdcnfg, mdrefr, mdcas[0], mdcas[1], mdcas[2]); +#endif + + /* + * Reprogram the DRAM timings with interrupts disabled, and + * ensure that we are doing this within a complete cache line. + * This means that we won't access SDRAM for the duration of + * the programming. + */ + local_irq_save(flags); + asm("mcr p15, 0, %0, c10, c4" : : "r" (0)); + udelay(10); + __asm__(" + b 1f + .align 5 +1: str %3, [%1, #28] @ MDREFR + str %4, [%1, #4] @ MDCAS0 + str %5, [%1, #8] @ MDCAS1 + str %6, [%1, #12] @ MDCAS2 + str %2, [%1, #0] @ MDCNFG + ldr %0, [%1, #0] + nop + nop" + : "=&r" (mdcnfg) + : "r" (io_p2v(_MDCNFG)), + "0" (mdcnfg), "r" (mdrefr), + "r" (mdcas[0]), "r" (mdcas[1]), "r" (mdcas[2])); + local_irq_restore(flags); +} + +/* + * Set the SDRAM refresh rate. + */ +static inline void sdram_set_refresh(u_int dri) +{ + MDREFR = (MDREFR & 0xffff000f) | (dri << 4); + (void) MDREFR; +} + +/* + * Update the refresh period. We do this such that we always refresh + * the SDRAMs within their permissible period. The refresh period is + * always a multiple of the memory clock (fixed at cpu_clock / 2). + * + * FIXME: we don't currently take account of burst accesses here, + * but neither do Intels DM nor Angel. + */ +static void +sdram_update_refresh(u_int cpu_khz, struct sdram_params *sdram) +{ + u_int ns_row = (sdram->refresh * 1000) >> sdram->rows; + u_int dri = ns_to_cycles(ns_row, cpu_khz / 2) / 32; + +#ifdef DEBUG + mdelay(250); + printk("new dri value = %d\n", dri); +#endif + + sdram_set_refresh(dri); +} + +static int +sdram_notifier(struct notifier_block *nb, unsigned long val, void *data) +{ + struct cpufreq_info *ci = data; + struct sdram_params *sdram = &sdram_params; + + /* were we initialised? */ + if (sdram->cas_latency == 0) { + struct cpufreq_minmax *m = data; + m->min_freq = m->max_freq = m->cur_freq; + return 0; + } + + switch (val) { + case CPUFREQ_MINMAX: + /* + * until we work out why the assabet + * crashes below 147.5MHz... + */ + cpufreq_updateminmax(data, 147500, -1); + break; + + case CPUFREQ_PRECHANGE: + /* + * The clock could be going away for some time. + * Set the SDRAMs to refresh rapidly (every 64 + * memory clock cycles). To get through the + * whole array, we need to wait 262144 mclk cycles. + * We wait 20ms to be safe. + */ + sdram_set_refresh(2); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(20 * HZ / 1000); + + if (ci->old_freq < ci->new_freq) + sdram_update_timing(ci->new_freq, sdram); + break; + + case CPUFREQ_POSTCHANGE: + if (ci->old_freq > ci->new_freq) + sdram_update_timing(ci->new_freq, sdram); + sdram_update_refresh(ci->new_freq, sdram); + break; + } + return 0; +} + +static struct notifier_block sa1110_clkchg_block = { + notifier_call: sdram_notifier, +}; + +static int __init sa1110_sdram_init(void) +{ + struct sdram_params *sdram = NULL; + unsigned int cur_freq = cpufreq_get(smp_processor_id()); + int ret = -ENODEV; + + if (machine_is_assabet()) + sdram = &tc59sm716_cl3_params; + + if (sdram) { + printk(KERN_DEBUG "SDRAM: tck: %d trcd: %d trp: %d" + " twr: %d refresh: %d cas_latency: %d", + sdram->tck, sdram->trcd, sdram->trp, + sdram->twr, sdram->refresh, sdram->cas_latency); + + memcpy(&sdram_params, sdram, sizeof(sdram_params)); + + sdram_update_timing(cur_freq, &sdram_params); + sdram_update_refresh(cur_freq, &sdram_params); + } + + return cpufreq_register_notifier(&sa1110_clkchg_block); +} + +__initcall(sa1110_sdram_init); diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/dma-sa1100.c linux/arch/arm/mach-sa1100/dma-sa1100.c --- v2.4.8/linux/arch/arm/mach-sa1100/dma-sa1100.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-sa1100/dma-sa1100.c Sun Aug 12 17:36:24 2001 @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include #include @@ -36,13 +36,6 @@ /* - * Maximum physical DMA buffer size - */ -#define MAX_DMA_SIZE 0x1fff -#define MAX_DMA_ORDER 12 - - -/* * DMA control register structure */ typedef struct { @@ -56,24 +49,16 @@ volatile u_long DBTB; } dma_regs_t; - -/* - * DMA buffer structure - */ -struct dma_buf_s { - int size; /* buffer size */ - dma_addr_t dma_start; /* starting DMA address */ - dma_addr_t dma_ptr; /* current DMA pointer position */ - int ref; /* number of DMA references */ - void *id; /* to identify buffer from outside */ - struct dma_buf_s *next; /* next buffer to process */ -}; - - #include "dma.h" sa1100_dma_t dma_chan[MAX_SA1100_DMA_CHANNELS]; +/* + * Maximum physical DMA buffer size + */ +#define MAX_DMA_SIZE 0x1fff +#define MAX_DMA_ORDER 12 + /* * DMA processing... @@ -130,7 +115,7 @@ for (;;) { buf = dma->tail; - if (!buf) { + if (!buf || dma->stopped) { /* no more data available */ DPRINTK("process: no more buf (dma %s)\n", dma->curr ? "active" : "inactive"); @@ -164,7 +149,6 @@ DPRINTK("process: b=%#x s=%d\n", (int) buf->id, buf->size); if (start_dma(dma, buf->dma_ptr, chunksize) != 0) break; - dma->active = 1; if (!dma->curr) dma->curr = buf; buf->ref++; @@ -201,9 +185,10 @@ dma->spin_ref = -dma->spin_ref; if (dma->head == buf) dma->head = NULL; - buf->size = buf->dma_ptr - buf->dma_start; - if (dma->callback) - dma->callback(buf->id, buf->size); + if (dma->callback) { + int size = buf->dma_ptr - buf->dma_start; + dma->callback(buf->id, size); + } kfree(buf); } } @@ -231,62 +216,59 @@ * DMA interface functions */ -/* - * Get dma list - * for /proc/dma - */ -int sa1100_get_dma_list(char *buf) -{ - int i, len = 0; - - for (i = 0; i < MAX_SA1100_DMA_CHANNELS; i++) { - if (dma_chan[i].lock) - len += sprintf(buf + len, "%2d: %s\n", - i, dma_chan[i].device_id); - } - return len; -} +static spinlock_t dma_list_lock; -int sa1100_request_dma(dmach_t * channel, const char *device_id) +int sa1100_request_dma (dmach_t * channel, const char *device_id, + dma_device_t device) { sa1100_dma_t *dma = NULL; dma_regs_t *regs; - int ch, err; + int i, err; *channel = -1; /* to be sure we catch the freeing of a misregistered channel */ - for (ch = 0; ch < SA1100_DMA_CHANNELS; ch++) { - dma = &dma_chan[ch]; - if (xchg(&dma->lock, 1) == 0) - break; + err = 0; + spin_lock(&dma_list_lock); + for (i = 0; i < SA1100_DMA_CHANNELS; i++) { + if (dma_chan[i].in_use) { + if (dma_chan[i].device == device) { + err = -EBUSY; + break; + } + } else if (!dma) { + dma = &dma_chan[i]; + } } - if (ch >= SA1100_DMA_CHANNELS) { - printk(KERN_ERR "%s: no free DMA channel available\n", - device_id); - return -EBUSY; + if (!err) { + if (dma) + dma->in_use = 1; + else + err = -ENOSR; } + spin_unlock(&dma_list_lock); + if (err) + return err; err = request_irq(dma->irq, dma_irq_handler, SA_INTERRUPT, device_id, (void *) dma); if (err) { printk(KERN_ERR - "%s: unable to request IRQ %d for DMA channel %d\n", - device_id, dma->irq, ch); - dma->lock = 0; + "%s: unable to request IRQ %d for DMA channel\n", + device_id, dma->irq); return err; } - *channel = ch; + *channel = dma - dma_chan; dma->device_id = device_id; + dma->device = device; dma->callback = NULL; dma->spin_size = 0; regs = dma->regs; regs->ClrDCSR = - (DCSR_DONEA | DCSR_DONEB | DCSR_STRTA | DCSR_STRTB | - DCSR_IE | DCSR_ERROR | DCSR_RUN); - regs->DDAR = 0; - + (DCSR_DONEA | DCSR_DONEB | DCSR_STRTA | DCSR_STRTB | + DCSR_IE | DCSR_ERROR | DCSR_RUN); + regs->DDAR = device; DPRINTK("requested\n"); return 0; } @@ -296,24 +278,11 @@ { sa1100_dma_t *dma = &dma_chan[channel]; - dma->callback = cb; - DPRINTK("cb = %p\n", cb); - return 0; -} - - -int sa1100_dma_set_device(dmach_t channel, dma_device_t device) -{ - sa1100_dma_t *dma = &dma_chan[channel]; - dma_regs_t *regs = dma->regs; - - if (dma->ready) + if ((unsigned)channel >= MAX_SA1100_DMA_CHANNELS || !dma->in_use) return -EINVAL; - regs->ClrDCSR = DCSR_STRTA | DCSR_STRTB | DCSR_IE | DCSR_RUN; - regs->DDAR = device; - DPRINTK("DDAR = %#x\n", device); - dma->ready = 1; + dma->callback = cb; + DPRINTK("cb = %p\n", cb); return 0; } @@ -323,7 +292,7 @@ sa1100_dma_t *dma = &dma_chan[channel]; int flags; - if (channel >= SA1100_DMA_CHANNELS) + if ((unsigned)channel >= MAX_SA1100_DMA_CHANNELS || !dma->in_use) return -EINVAL; DPRINTK("set spin %d at %#x\n", size, addr); @@ -345,7 +314,7 @@ int flags; dma = &dma_chan[channel]; - if (!dma->ready) + if ((unsigned)channel >= MAX_SA1100_DMA_CHANNELS || !dma->in_use) return -EINVAL; buf = kmalloc(sizeof(*buf), GFP_ATOMIC); @@ -375,12 +344,16 @@ int sa1100_dma_get_current(dmach_t channel, void **buf_id, dma_addr_t *addr) { sa1100_dma_t *dma = &dma_chan[channel]; - dma_regs_t *regs = dma->regs; + dma_regs_t *regs; int flags, ret; + if ((unsigned)channel >= MAX_SA1100_DMA_CHANNELS || !dma->in_use) + return -EINVAL; + if (channel_is_sa1111_sac(channel)) return sa1111_dma_get_current(channel, buf_id, addr); + regs = dma->regs; local_irq_save(flags); if (dma->curr && dma->spin_ref <= 0) { dma_buf_t *buf = dma->curr; @@ -415,11 +388,16 @@ *addr = buf->dma_ptr; DPRINTK("curr_pos: b=%#x a=%#x\n", (int)dma->curr->id, *addr); ret = 0; + } else if (dma->tail && dma->stopped) { + dma_buf_t *buf = dma->tail; + if (buf_id) + *buf_id = buf->id; + *addr = buf->dma_ptr; + ret = 0; } else { if (buf_id) *buf_id = NULL; *addr = 0; - DPRINTK("curr_pos: spinning\n"); ret = -ENXIO; } local_irq_restore(flags); @@ -430,12 +408,36 @@ int sa1100_dma_stop(dmach_t channel) { sa1100_dma_t *dma = &dma_chan[channel]; - dma_regs_t *regs = dma->regs; + int flags; if (channel_is_sa1111_sac(channel)) return sa1111_dma_stop(channel); - regs->ClrDCSR = DCSR_RUN | DCSR_IE; + if (dma->stopped) + return 0; + local_irq_save(flags); + dma->stopped = 1; + /* + * Stop DMA and tweak state variables so everything could restart + * from there when resume/wakeup occurs. + */ + dma->regs->ClrDCSR = DCSR_RUN | DCSR_IE; + if (dma->curr) { + dma_buf_t *buf = dma->curr; + if (dma->spin_ref <= 0) { + dma_addr_t curpos; + sa1100_dma_get_current(channel, NULL, &curpos); + buf->size += buf->dma_ptr - curpos; + buf->dma_ptr = curpos; + } + buf->ref = 0; + dma->tail = buf; + dma->curr = NULL; + } + dma->spin_ref = 0; + dma->regs->ClrDCSR = DCSR_STRTA|DCSR_STRTB; + process_dma(dma); + local_irq_restore(flags); return 0; } @@ -443,23 +445,35 @@ int sa1100_dma_resume(dmach_t channel) { sa1100_dma_t *dma = &dma_chan[channel]; - dma_regs_t *regs = dma->regs; + + if ((unsigned)channel >= MAX_SA1100_DMA_CHANNELS || !dma->in_use) + return -EINVAL; if (channel_is_sa1111_sac(channel)) return sa1111_dma_resume(channel); - regs->SetDCSR = DCSR_RUN | DCSR_IE; + if (dma->stopped) { + int flags; + save_flags_cli(flags); + dma->regs->ClrDCSR = DCSR_STRTA|DCSR_STRTB|DCSR_RUN|DCSR_IE; + dma->stopped = 0; + dma->spin_ref = 0; + process_dma(dma); + restore_flags(flags); + } return 0; } int sa1100_dma_flush_all(dmach_t channel) { - sa1100_dma_t *dma; + sa1100_dma_t *dma = &dma_chan[channel]; dma_buf_t *buf, *next_buf; int flags; - dma = &dma_chan[channel]; + if ((unsigned)channel >= MAX_SA1100_DMA_CHANNELS || !dma->in_use) + return -EINVAL; + local_irq_save(flags); if (channel_is_sa1111_sac(channel)) sa1111_reset_sac_dma(channel); @@ -469,10 +483,9 @@ if (!buf) buf = dma->tail; dma->head = dma->tail = dma->curr = NULL; - dma->active = 0; + dma->stopped = 0; dma->spin_ref = 0; - if (dma->spin_size) - process_dma(dma); + process_dma(dma); local_irq_restore(flags); while (buf) { next_buf = buf->next; @@ -488,25 +501,24 @@ { sa1100_dma_t *dma; - if ((unsigned) channel >= MAX_SA1100_DMA_CHANNELS) + if ((unsigned)channel >= MAX_SA1100_DMA_CHANNELS) return; dma = &dma_chan[channel]; - if (!dma->lock) { + if (!dma->in_use) { printk(KERN_ERR "Trying to free free DMA%d\n", channel); return; } sa1100_dma_set_spin(channel, 0, 0); sa1100_dma_flush_all(channel); - dma->ready = 0; if (channel_is_sa1111_sac(channel)) { sa1111_cleanup_sac_dma(channel); } else { free_irq(IRQ_DMA0 + channel, (void *) dma); } - dma->lock = 0; + dma->in_use = 0; DPRINTK("freed\n"); } @@ -514,7 +526,6 @@ EXPORT_SYMBOL(sa1100_request_dma); EXPORT_SYMBOL(sa1100_dma_set_callback); -EXPORT_SYMBOL(sa1100_dma_set_device); EXPORT_SYMBOL(sa1100_dma_set_spin); EXPORT_SYMBOL(sa1100_dma_queue_buffer); EXPORT_SYMBOL(sa1100_dma_get_current); @@ -522,6 +533,66 @@ EXPORT_SYMBOL(sa1100_dma_resume); EXPORT_SYMBOL(sa1100_dma_flush_all); EXPORT_SYMBOL(sa1100_free_dma); + + +#ifdef CONFIG_PM +/* Drivers should call this from their PM callback function */ + +int sa1100_dma_sleep(dmach_t channel) +{ + sa1100_dma_t *dma = &dma_chan[channel]; + int orig_state; + + if ((unsigned)channel >= MAX_SA1100_DMA_CHANNELS || !dma->in_use) + return -EINVAL; + + if (channel_is_sa1111_sac(channel)) { + /* We'll cheat a little until someone actually + * write the real thing. + */ + sa1111_reset_sac_dma(channel); + return 0; + } + + orig_state = dma->stopped; + sa1100_dma_stop(channel); + dma->regs->ClrDCSR = DCSR_RUN | DCSR_IE | DCSR_STRTA | DCSR_STRTB; + dma->stopped = orig_state; + dma->spin_ref = 0; + return 0; +} + +int sa1100_dma_wakeup(dmach_t channel) +{ + sa1100_dma_t *dma = &dma_chan[channel]; + dma_regs_t *regs; + int flags; + + if ((unsigned)channel >= MAX_SA1100_DMA_CHANNELS || !dma->in_use) + return -EINVAL; + + if (channel_is_sa1111_sac(channel)) { + /* We'll cheat a little until someone actually + * write the real thing. + */ + return 0; + } + + regs = dma->regs; + regs->ClrDCSR = + (DCSR_DONEA | DCSR_DONEB | DCSR_STRTA | DCSR_STRTB | + DCSR_IE | DCSR_ERROR | DCSR_RUN); + regs->DDAR = dma->device; + local_irq_save(flags); + process_dma(dma); + local_irq_restore(flags); + return 0; +} + +EXPORT_SYMBOL(sa1100_dma_sleep); +EXPORT_SYMBOL(sa1100_dma_wakeup); + +#endif static int __init sa1100_init_dma(void) diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/dma-sa1111.c linux/arch/arm/mach-sa1100/dma-sa1111.c --- v2.4.8/linux/arch/arm/mach-sa1100/dma-sa1111.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-sa1100/dma-sa1111.c Sun Aug 12 17:36:24 2001 @@ -204,7 +204,7 @@ dma = &dma_chan[ch]; - if (xchg(&dma->lock, 1) == 1) { + if (xchg(&dma->in_use, 1) == 1) { printk(KERN_ERR "%s: SA-1111 SAC DMA channel %d in use\n", device_id, ch); return -EBUSY; @@ -217,7 +217,7 @@ printk(KERN_ERR "%s: unable to request IRQ %d for DMA channel %d (A)\n", device_id, irq, ch); - dma->lock = 0; + dma->in_use = 0; return err; } @@ -228,7 +228,7 @@ printk(KERN_ERR "%s: unable to request IRQ %d for DMA channel %d (B)\n", device_id, irq, ch); - dma->lock = 0; + dma->in_use = 0; return err; } @@ -236,7 +236,6 @@ dma->device_id = device_id; dma->callback = NULL; dma->spin_size = 0; - dma->ready = 1; return 0; } @@ -246,7 +245,25 @@ int sa1111_dma_get_current(dmach_t channel, void **buf_id, dma_addr_t *addr) { - return -ENOSYS; + sa1100_dma_t *dma = &dma_chan[channel]; + int flags, ret; + + local_irq_save(flags); + if (dma->curr && dma->spin_ref <= 0) { + dma_buf_t *buf = dma->curr; + if (buf_id) + *buf_id = buf->id; + /* not fully accurate but still... */ + *addr = buf->dma_ptr; + ret = 0; + } else { + if (buf_id) + *buf_id = NULL; + *addr = 0; + ret = -ENXIO; + } + local_irq_restore(flags); + return ret; } int sa1111_dma_stop(dmach_t channel) @@ -269,7 +286,7 @@ /* According to the "Intel StrongARM SA-1111 Microprocessor Companion - * Chip Specification Update" (June 2000), errata #7, there is a + * Chip Specification Update" (June 2000), erratum #7, there is a * significant bug in Serial Audio Controller DMA. If the SAC is * accessing a region of memory above 1MB relative to the bank base, * it is important that address bit 10 _NOT_ be asserted. Depending @@ -288,7 +305,7 @@ * SDRAM bank 1 on Neponset). The default configuration selects * Assabet, so any address in bank 1 is necessarily invalid. */ - if(machine_is_assabet() && addr >= _DRAMBnk1) + if((machine_is_assabet() || machine_is_pfs168()) && addr >= _DRAMBnk1) return -1; /* The bug only applies to buffers located more than one megabyte @@ -336,11 +353,12 @@ EXPORT_SYMBOL(sa1111_check_dma_bug); -static void __init sa1111_init_sac_dma(void) +static int __init sa1111_init_sac_dma(void) { int channel = SA1111_SAC_DMA_BASE; dma_chan[channel++].regs = (dma_regs_t *) &SADTCS; dma_chan[channel++].regs = (dma_regs_t *) &SADRCS; + return 0; } __initcall(sa1111_init_sac_dma); diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/dma.h linux/arch/arm/mach-sa1100/dma.h --- v2.4.8/linux/arch/arm/mach-sa1100/dma.h Sun May 20 12:11:38 2001 +++ linux/arch/arm/mach-sa1100/dma.h Sun Aug 12 17:36:24 2001 @@ -10,27 +10,39 @@ #include /* - * DMA channel structure. + * DMA buffer structure */ -typedef struct dma_buf_s dma_buf_t; +typedef struct dma_buf_s { + int size; /* buffer size */ + dma_addr_t dma_start; /* starting DMA address */ + dma_addr_t dma_ptr; /* next DMA pointer to use */ + int ref; /* number of DMA references */ + void *id; /* to identify buffer from outside */ + struct dma_buf_s *next; /* next buffer to process */ +} dma_buf_t; + + +/* + * DMA channel structure. + */ typedef struct { - unsigned int lock; /* Device is allocated */ - const char *device_id; /* Device name */ - dma_buf_t *head; /* where to insert buffers */ - dma_buf_t *tail; /* where to remove buffers */ - dma_buf_t *curr; /* buffer currently DMA'ed */ - int ready; /* 1 if DMA can occur */ - int active; /* 1 if DMA is actually processing data */ - dma_regs_t *regs; /* points to appropriate DMA registers */ - int irq; /* IRQ used by the channel */ - dma_callback_t callback; /* ... to call when buffers are done */ - int spin_size; /* > 0 when DMA should spin when no more buffer */ - dma_addr_t spin_addr; /* DMA address to spin onto */ - int spin_ref; /* number of spinning references */ + unsigned int in_use; /* Device is allocated */ + const char *device_id; /* Device name */ + dma_device_t device; /* ... to which this channel is attached */ + dma_buf_t *head; /* where to insert buffers */ + dma_buf_t *tail; /* where to remove buffers */ + dma_buf_t *curr; /* buffer currently DMA'ed */ + int stopped; /* 1 if DMA is stalled */ + dma_regs_t *regs; /* points to appropriate DMA registers */ + int irq; /* IRQ used by the channel */ + dma_callback_t callback; /* ... to call when buffers are done */ + int spin_size; /* > 0 when DMA should spin when no more buffer */ + dma_addr_t spin_addr; /* DMA address to spin onto */ + int spin_ref; /* number of spinning references */ #ifdef CONFIG_SA1111 - int dma_a, dma_b, last_dma; /* SA-1111 specific */ + int dma_a, dma_b, last_dma; /* SA-1111 specific */ #endif } sa1100_dma_t; diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/empeg.c linux/arch/arm/mach-sa1100/empeg.c --- v2.4.8/linux/arch/arm/mach-sa1100/empeg.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/empeg.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,54 @@ +/* + * linux/arch/arm/mach-sa1100/empeg.c + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static void __init +fixup_empeg(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 4*1024*1024 ); + SET_BANK( 1, 0xc8000000, 4*1024*1024 ); + mi->nr_banks = 2; + + ROOT_DEV = MKDEV( 3, 1 ); /* /dev/hda1 */ + setup_ramdisk( 1, 0, 0, 4096 ); + setup_initrd( 0xd0000000+((1024-320)*1024), (320*1024) ); +} + +static struct map_desc empeg_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { EMPEG_FLASHBASE, 0x00000000, 0x00200000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash */ + LAST_DESC +}; + +static void __init empeg_map_io(void) +{ + sa1100_map_io(); + iotable_init(empeg_io_desc); + + sa1100_register_uart(0, 1); + sa1100_register_uart(1, 3); + sa1100_register_uart(2, 2); + Ser1SDCR0 |= SDCR0_UART; +} + +MACHINE_START(EMPEG, "empeg MP3 Car Audio Player") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_empeg) + MAPIO(empeg_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/flexanet.c linux/arch/arm/mach-sa1100/flexanet.c --- v2.4.8/linux/arch/arm/mach-sa1100/flexanet.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/flexanet.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,80 @@ +/* + * linux/arch/arm/mach-sa1100/flexanet.c + * + * Author: Jordi Colomer + * + * This file contains all FlexaNet-specific tweaks. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include "generic.h" + + +unsigned long BCR_value = BCR_POWERUP; +unsigned long flexanet_GUI_type = 0x0000000F; + +EXPORT_SYMBOL(BCR_value); +EXPORT_SYMBOL(flexanet_GUI_type); + +static unsigned long probe_gui_board (void); + +static void __init +fixup_flexanet(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + /* fixed RAM size, by now (64MB) */ + SET_BANK( 0, 0xc0000000, 64*1024*1024 ); + mi->nr_banks = 1; + + /* setup ramdisk */ + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 8192 ); + setup_initrd( 0xc0800000, 3*1024*1024 ); +} + + +static struct map_desc flexanet_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf0000000, 0x10000000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* Board Control Register */ + LAST_DESC +}; + +static void __init flexanet_map_io(void) +{ + sa1100_map_io(); + iotable_init(flexanet_io_desc); + + sa1100_register_uart(0, 1); + Ser1SDCR0 |= SDCR0_UART; +} + + +MACHINE_START(FLEXANET, "FlexaNet") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + BOOT_PARAMS(0xc0000100) + FIXUP(fixup_flexanet) + MAPIO(flexanet_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/freebird.c linux/arch/arm/mach-sa1100/freebird.c --- v2.4.8/linux/arch/arm/mach-sa1100/freebird.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/freebird.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,63 @@ +/* + * linux/arch/arm/mach-sa1100/freebird.c + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +unsigned long BCR_value = BCR_DB1110; +EXPORT_SYMBOL(BCR_value); + + +static void __init +fixup_freebird(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ +#ifdef CONFIG_SA1100_FREEBIRD_OLD + SET_BANK( 0, 0xc0000000, 32*1024*1024 ); + mi->nr_banks = 1; + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0 ,0 , 8192 ); + setup_initrd( 0xc0800000, 3*1024*1024 ); +#endif +} + +static struct map_desc freebird_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf0000000, 0x12000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Board Control Register */ + { 0xf2000000, 0x19000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0}, + LAST_DESC +}; + +static void __init freebird_map_io(void) +{ + sa1100_map_io(); + iotable_init(freebird_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); +} + +MACHINE_START(FREEBIRD, "Freebird-HPC-1.1") + BOOT_MEM(0xc0000000,0x80000000, 0xf8000000) +#ifdef CONFIG_SA1100_FREEBIRD_NEW + BOOT_PARAMS(0xc0000100) +#endif + FIXUP(fixup_freebird) + MAPIO(freebird_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/generic.c linux/arch/arm/mach-sa1100/generic.c --- v2.4.8/linux/arch/arm/mach-sa1100/generic.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/generic.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,173 @@ +/* + * linux/arch/arm/mach-sa1100/generic.c + * + * Author: Nicolas Pitre + * + * Code common to all SA11x0 machines. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Since this file should be linked before any other machine specific file, + * the __initcall() here will be executed first. This serves as default + * initialization stuff for SA1100 machines which can be overriden later if + * need be. + */ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "generic.h" + +#define NR_FREQS 16 + +/* + * This table is setup for a 3.6864MHz Crystal. + */ +static const unsigned short cclk_frequency_100khz[NR_FREQS] = { + 590, /* 59.0 MHz */ + 737, /* 73.7 MHz */ + 885, /* 88.5 MHz */ + 1032, /* 103.2 MHz */ + 1180, /* 118.0 MHz */ + 1327, /* 132.7 MHz */ + 1475, /* 147.5 MHz */ + 1622, /* 162.2 MHz */ + 1769, /* 176.9 MHz */ + 1917, /* 191.7 MHz */ + 2064, /* 206.4 MHz */ + 2212, /* 221.2 MHz */ + 2359, /* 235.9 MHz */ + 2507, /* 250.7 MHz */ + 2654, /* 265.4 MHz */ + 2802 /* 280.2 MHz */ +}; + +/* + * Return the current CPU clock frequency in units of 100kHz + */ +unsigned short get_cclk_frequency(void) +{ + return cclk_frequency_100khz[PPCR & 0xf]; +} + +EXPORT_SYMBOL(get_cclk_frequency); + +#ifdef CONFIG_CPU_FREQ + +/* + * Validate the speed in khz. If we can't generate the precise + * frequency requested, round it down (to be on the safe side). + */ +unsigned int cpufreq_validatespeed(unsigned int khz) +{ + int i; + + khz /= 100; + + for (i = NR_FREQS - 1; i > 0; i--) + if (cclk_frequency_100khz[i] <= khz) + break; + + return cclk_frequency_100khz[i] * 100; +} + +/* + * Ok, set the CPU frequency. Since we've done the validation + * above, we can match for an exact frequency. If we don't find + * an exact match, we will to set the lowest frequency to be safe. + */ +void cpufreq_setspeed(unsigned int khz) +{ + int i; + + khz /= 100; + + for (i = NR_FREQS - 1; i > 0; i--) + if (cclk_frequency_100khz[i] == khz) + break; +//printk("setting ppcr to %d\n", i); + PPCR = i; +} + +static int __init sa1100_init_clock(void) +{ + cpufreq_init(get_cclk_frequency() * 100); + return 0; +} + +__initcall(sa1100_init_clock); +#endif + +/* + * Default power-off for SA1100 + */ +static void sa1100_power_off(void) +{ + mdelay(100); + cli(); + /* disable internal oscillator, float CS lines */ + PCFR = (PCFR_OPDE | PCFR_FP | PCFR_FS); + /* enable wake-up on GPIO0 (Assabet...) */ + PWER = GFER = GRER = 1; + /* + * set scratchpad to zero, just in case it is used as a + * restart address by the bootloader. + */ + PSPR = 0; + /* enter sleep mode */ + PMCR = PMCR_SF; +} + +static int __init sa1100_set_poweroff(void) +{ + pm_power_off = sa1100_power_off; + return 0; +} + +__initcall(sa1100_set_poweroff); + + +/* + * Common I/O mapping: + * + * Typically, static virtual address mappings are as follow: + * + * 0xe8000000-0xefffffff: flash memory (especially when multiple flash + * banks need to be mapped contigously) + * 0xf0000000-0xf3ffffff: miscellaneous stuff (CPLDs, etc.) + * 0xf4000000-0xf4ffffff: SA-1111 + * 0xf5000000-0xf5ffffff: reserved (used by cache flushing area) + * 0xf6000000-0xffffffff: reserved (internal SA1100 IO defined above) + * + * Below 0xe8000000 is reserved for vm allocation. + * + * The machine specific code must provide the extra mapping beside the + * default mapping provided here. + */ + +static struct map_desc standard_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xf6000000, 0x20000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* PCMCIA0 IO */ + { 0xf7000000, 0x30000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* PCMCIA1 IO */ + { 0xf8000000, 0x80000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* PCM */ + { 0xfa000000, 0x90000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* SCM */ + { 0xfc000000, 0xa0000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* MER */ + { 0xfe000000, 0xb0000000, 0x00200000, DOMAIN_IO, 0, 1, 0, 0 }, /* LCD + DMA */ + LAST_DESC +}; + +void __init sa1100_map_io(void) +{ + iotable_init(standard_io_desc); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/generic.h linux/arch/arm/mach-sa1100/generic.h --- v2.4.8/linux/arch/arm/mach-sa1100/generic.h Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/generic.h Sun Aug 12 11:13:59 2001 @@ -0,0 +1,14 @@ +/* + * linux/arch/arm/mach-sa1100/generic.h + * + * Author: Nicolas Pitre + */ + +extern void __init sa1100_map_io(void); +extern void __init sa1100_init_irq(void); + +#define SET_BANK(__nr,__start,__size) \ + mi->bank[__nr].start = (__start), \ + mi->bank[__nr].size = (__size), \ + mi->bank[__nr].node = (((unsigned)(__start) - PHYS_OFFSET) >> 27) + diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/graphicsclient.c linux/arch/arm/mach-sa1100/graphicsclient.c --- v2.4.8/linux/arch/arm/mach-sa1100/graphicsclient.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/graphicsclient.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,160 @@ +/* + * linux/arch/arm/mach-sa1100/graphicsclient.c + * + * Author: Nicolas Pitre + * + * Pieces specific to the GraphicsClient board + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "generic.h" + + +/* + * Handlers for GraphicsClient's external IRQ logic + */ + +static void ADS_IRQ_demux( int irq, void *dev_id, struct pt_regs *regs ) +{ + int i; + + while( (irq = ADS_INT_ST1 | (ADS_INT_ST2 << 8)) ){ + for( i = 0; i < 16; i++ ) + if( irq & (1<nr_banks = 2; + + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 4096 ); + setup_initrd( __phys_to_virt(0xc0800000), 4*1024*1024 ); +} + +static struct map_desc graphicsclient_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x08000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 1 */ + { 0xf0000000, 0x10000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* CPLD */ + LAST_DESC +}; + +static void __init graphicsclient_map_io(void) +{ + sa1100_map_io(); + iotable_init(graphicsclient_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); + sa1100_register_uart(2, 2); +} + +MACHINE_START(GRAPHICSCLIENT, "ADS GraphicsClient") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_graphicsclient) + MAPIO(graphicsclient_map_io) + INITIRQ(graphicsclient_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/huw_webpanel.c linux/arch/arm/mach-sa1100/huw_webpanel.c --- v2.4.8/linux/arch/arm/mach-sa1100/huw_webpanel.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/huw_webpanel.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,80 @@ +/* + * linux/arch/arm/mach-sa1100/huw_webpanel.c + * + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +unsigned long BCR_value; +EXPORT_SYMBOL(BCR_value); + + +static void __init init_huw_cs3(void) +{ + // here we can place some initcode + // BCR_value = 0x1045bf70; //*((volatile unsigned long*)0xf1fffff0); +} + +__initcall(init_huw_cs3); + + +static void __init +fixup_huw_webpanel(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + /** + memory information (JOR): + 32 MByte - 256KByte bootloader (init at boot time) - 32 kByte save area + **/ + SET_BANK( 0, 0xc0000000, ((32*1024 - (256 + 32)) * 1024)); + mi->nr_banks = 1; + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 8192 ); + setup_initrd( __phys_to_virt(0xc0800000), 8*1024*1024 ); +} + + +/** + memory information (JOR): + 32 MByte - 256KByte bootloader (init at boot time) - 32 kByte save area + area size = 288 kByte (0x48000 Bytes) +**/ +static struct map_desc huw_webpanel_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0, neccessary for mtd */ + { 0xf0000000, 0xc1fb8000, 0x00048000, DOMAIN_IO, 1, 1, 0, 0 }, /* Parameter */ + { 0xf1000000, 0x18000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Paules CS3, write only */ + LAST_DESC +}; + +static void __init huw_webpanel_map_io(void) +{ + sa1100_map_io(); + iotable_init(huw_webpanel_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); +} + + +MACHINE_START(HUW_WEBPANEL, "HuW-Webpanel") + MAINTAINER("Roman Jordan") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_huw_webpanel) + MAPIO(huw_webpanel_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/hw.c linux/arch/arm/mach-sa1100/hw.c --- v2.4.8/linux/arch/arm/mach-sa1100/hw.c Thu Feb 8 16:32:44 2001 +++ linux/arch/arm/mach-sa1100/hw.c Wed Dec 31 16:00:00 1969 @@ -1,188 +0,0 @@ -/* - * arch/arm/kernel/hw-sa1100.c - * - * SA1100-dependent machine specifics - * - * Copyright (C) 2000 Nicolas Pitre - * - * This will certainly contain more stuff with time... like power management, - * special hardware autodetection, etc. - * - */ -#include -#include -#include -#include -#include - -#include -#include -#include - -/* - * SA1100 GPIO edge detection for IRQs: - * IRQs are generated on Falling-Edge, Rising-Edge, or both. - * This must be called *before* the appropriate IRQ is registered. - * Use this instead of directly setting GRER/GFER. - */ - -int GPIO_IRQ_rising_edge; -int GPIO_IRQ_falling_edge; - -void set_GPIO_IRQ_edge( int gpio_mask, int edge ) -{ - if( edge & GPIO_FALLING_EDGE ) - GPIO_IRQ_falling_edge |= gpio_mask; - else - GPIO_IRQ_falling_edge &= ~gpio_mask; - if( edge & GPIO_RISING_EDGE ) - GPIO_IRQ_rising_edge |= gpio_mask; - else - GPIO_IRQ_rising_edge &= ~gpio_mask; -} - -EXPORT_SYMBOL(set_GPIO_IRQ_edge); - - -#ifdef CONFIG_SA1100_ASSABET - -unsigned long BCR_value = BCR_DB1110; -unsigned long SCR_value = SCR_INIT; -EXPORT_SYMBOL(BCR_value); -EXPORT_SYMBOL(SCR_value); - -/* - * Read System Configuration "Register" - * (taken from "Intel StrongARM SA-1110 Microprocessor Development Board - * User's Guide", section 4.4.1) - * - * This same scan is performed in arch/arm/boot/compressed/head-sa1100.S - * to set up the serial port for decompression status messages. We - * repeat it here because the kernel may not be loaded as a zImage, and - * also because it's a hassle to communicate the SCR value to the kernel - * from the decompressor. - */ - -void __init get_assabet_scr(void) -{ - unsigned long flags, scr, i; - - local_irq_save(flags); - GPDR |= 0x3fc; /* Configure GPIO 9:2 as outputs */ - GPSR = 0x3fc; /* Write 0xFF to GPIO 9:2 */ - GPDR &= ~(0x3fc); /* Configure GPIO 9:2 as inputs */ - for(i = 100; i--; scr = GPLR); /* Read GPIO 9:2 */ - GPDR |= 0x3fc; /* restore correct pin direction */ - local_irq_restore(flags); - scr &= 0x3fc; /* save as system configuration byte. */ - - SCR_value = scr; -} - -#endif /* CONFIG_SA1100_ASSABET */ - - -#if defined(CONFIG_SA1100_BITSY) -/* - * Bitsy has extended, write-only memory-mapped GPIO's - */ -static int bitsy_egpio = EGPIO_BITSY_RS232_ON; -void clr_bitsy_egpio(unsigned long x) -{ - bitsy_egpio &= ~x; - BITSY_EGPIO = bitsy_egpio; -} -void set_bitsy_egpio(unsigned long x) -{ - bitsy_egpio |= x; - BITSY_EGPIO = bitsy_egpio; -} -EXPORT_SYMBOL(clr_bitsy_egpio); -EXPORT_SYMBOL(set_bitsy_egpio); -#endif - - -#ifdef CONFIG_SA1111 - -static void __init sa1111_init(void){ - unsigned long id=SKID; - - if((id & SKID_ID_MASK) == SKID_SA1111_ID) - printk(KERN_INFO "SA-1111 Microprocessor Companion Chip: " - "silicon revision %x, metal revision %x\n", - (id & SKID_SIREV_MASK)>>4, (id & SKID_MTREV_MASK)); - else { - printk(KERN_ERR "Could not detect SA-1111!\n"); - return; - } - - /* First, set up the 3.6864MHz clock on GPIO 27 for the SA-1111: - * (SA-1110 Developer's Manual, section 9.1.2.1) - */ - GAFR |= GPIO_32_768kHz; - GPDR |= GPIO_32_768kHz; - TUCR = TUCR_3_6864MHz; - - /* Now, set up the PLL and RCLK in the SA-1111: */ - SKCR = SKCR_PLL_BYPASS | SKCR_RDYEN | SKCR_OE_EN; - udelay(100); - SKCR = SKCR_PLL_BYPASS | SKCR_RCLKEN | SKCR_RDYEN | SKCR_OE_EN; - - /* SA-1111 Register Access Bus should now be available. Clocks for - * any other SA-1111 functional blocks must be enabled separately - * using the SKPCR. - */ - - /* If the system is going to use the SA-1111 DMA engines, set up - * the memory bus request/grant pins. Also configure the shared - * memory controller on the SA-1111 (SA-1111 Developer's Manual, - * section 3.2.3) and power up the DMA bus clock: - */ - if(machine_is_assabet()){ - - GAFR |= (GPIO_MBGNT | GPIO_MBREQ); - GPDR |= GPIO_MBGNT; - GPDR &= ~GPIO_MBREQ; - TUCR |= TUCR_MR; - - /* Assabet is populated by default with two Samsung KM416S8030T-G8 - * 128Mb SDRAMs, which are organized as 12-bit (row addr) x 9-bit - * (column addr), according to the data sheet. Apparently, the - * bank selects factor into the row address, as Angel sets up the - * SA-1110 to use 14x9 addresses. The SDRAM datasheet specifies - * that when running at 100-125MHz, the CAS latency for -8 parts - * is 3 cycles, which is consistent with Angel. - */ - - SMCR = (SMCR_DTIM | SMCR_MBGE | - FInsrt(FExtr(MDCNFG, MDCNFG_SA1110_DRAC0), SMCR_DRAC) | - ((FExtr(MDCNFG, MDCNFG_SA1110_TDL0)==3) ? SMCR_CLAT : 0)); - - SKPCR |= SKPCR_DCLKEN; - } -} - -#else -#define sa1111_init() printk( "Warning: missing SA1111 support\n" ) -#endif - - -static int __init hw_sa1100_init(void) -{ - if( machine_is_assabet() ){ - if(machine_has_neponset()){ -#ifdef CONFIG_ASSABET_NEPONSET - LEDS = WHOAMI; - sa1111_init(); -#else - printk( "Warning: Neponset detected but full support " - "hasn't been configured in the kernel\n" ); -#endif - } - } else if (machine_is_xp860()) { - sa1111_init(); - } - return 0; -} - -module_init(hw_sa1100_init); diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/irq.c linux/arch/arm/mach-sa1100/irq.c --- v2.4.8/linux/arch/arm/mach-sa1100/irq.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/irq.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,230 @@ +/* + * linux/arch/arm/mach-sa1100/irq.c + * + * Copyright (C) 1999-2001 Nicolas Pitre + * + * Generic IRQ handling for the SA11x0, GPIO 11-27 IRQ demultiplexing. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "generic.h" + + +/* + * SA1100 GPIO edge detection for IRQs: + * IRQs are generated on Falling-Edge, Rising-Edge, or both. + * This must be called *before* the appropriate IRQ is registered. + * Use this instead of directly setting GRER/GFER. + */ + +static int GPIO_IRQ_rising_edge; +static int GPIO_IRQ_falling_edge; + +void set_GPIO_IRQ_edge( int gpio_mask, int edge ) +{ + if (edge & GPIO_FALLING_EDGE) + GPIO_IRQ_falling_edge |= gpio_mask; + else + GPIO_IRQ_falling_edge &= ~gpio_mask; + if (edge & GPIO_RISING_EDGE) + GPIO_IRQ_rising_edge |= gpio_mask; + else + GPIO_IRQ_rising_edge &= ~gpio_mask; +} + +EXPORT_SYMBOL(set_GPIO_IRQ_edge); + + +/* + * We don't need to ACK IRQs on the SA1100 unless they're GPIOs + * this is for internal IRQs i.e. from 11 to 31. + */ + +static void sa1100_mask_irq(unsigned int irq) +{ + ICMR &= ~(1 << irq); +} + +static void sa1100_unmask_irq(unsigned int irq) +{ + ICMR |= (1 << irq); +} + +/* + * GPIO IRQs must be acknoledged. This is for IRQs from 0 to 10. + */ + +static void sa1100_mask_and_ack_GPIO0_10_irq(unsigned int irq) +{ + ICMR &= ~(1 << irq); + GEDR = (1 << irq); +} + +static void sa1100_mask_GPIO0_10_irq(unsigned int irq) +{ + ICMR &= ~(1 << irq); +} + +static void sa1100_unmask_GPIO0_10_irq(unsigned int irq) +{ + GRER = (GRER & ~(1 << irq)) | (GPIO_IRQ_rising_edge & (1 << irq)); + GFER = (GFER & ~(1 << irq)) | (GPIO_IRQ_falling_edge & (1 << irq)); + ICMR |= (1 << irq); +} + +/* + * Install handler for GPIO 11-27 edge detect interrupts + */ + +static int GPIO_11_27_enabled; /* enabled i.e. unmasked GPIO IRQs */ +static int GPIO_11_27_spurious; /* GPIOs that triggered when masked */ + +static void sa1100_GPIO11_27_demux(int irq, void *dev_id, + struct pt_regs *regs) +{ + int i, spurious; + + while ((irq = (GEDR & 0xfffff800))) { + /* + * We don't want to clear GRER/GFER when the corresponding + * IRQ is masked because we could miss a level transition + * i.e. an IRQ which need servicing as soon as it is + * unmasked. However, such situation should happen only + * during the loop below. Thus all IRQs which aren't + * enabled at this point are considered spurious. Those + * are cleared but only de-activated if they happen twice. + */ + spurious = irq & ~GPIO_11_27_enabled; + if (spurious) { + GEDR = spurious; + GRER &= ~(spurious & GPIO_11_27_spurious); + GFER &= ~(spurious & GPIO_11_27_spurious); + GPIO_11_27_spurious |= spurious; + irq ^= spurious; + if (!irq) continue; + } + + for (i = 11; i <= 27; ++i) { + if (irq & (1< +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static void __init +fixup_itsy(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 16*1024*1024 ); + SET_BANK( 1, 0xc8000000, 16*1024*1024 ); + SET_BANK( 2, 0xd0000000, 16*1024*1024 ); + SET_BANK( 3, 0xd8000000, 16*1024*1024 ); + mi->nr_banks = 4; +} + +/* BRADFIXME The egpio addresses aren't verifiably correct. (i.e. they're most + likely wrong. */ +static struct map_desc itsy_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf0000000, 0x49000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* EGPIO 0 */ + LAST_DESC +}; + +static void __init itsy_map_io(void) +{ + sa1100_map_io(); + iotable_init(itsy_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); + sa1100_register_uart(2, 2); +} + +MACHINE_START(ITSY, "Compaq Itsy") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + BOOT_PARAMS(0xc0000100) + FIXUP(fixup_itsy) + MAPIO(itsy_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/jornada720.c linux/arch/arm/mach-sa1100/jornada720.c --- v2.4.8/linux/arch/arm/mach-sa1100/jornada720.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/jornada720.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,89 @@ +/* + * linux/arch/arm/mach-sa1100/jornada720.c + */ + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" +#include "sa1111.h" + + +#define JORTUCR_VAL 0x20000400 +#define JORSKCR_INIT 0x00002081 /* Turn off VCO to enable PLL, set Ready En and enable nOE assertion from DC */ +#define JORSKCR_RCLK 0x00002083 /* Add turning on RCLK to above */ +#define JORSKCR_VAL 0x0000001B /* sets the 1101 control register to on */ + +static int __init jornada720_init(void) +{ + GPDR |= GPIO_GPIO20; + TUCR = JORTUCR_VAL; /* set the oscillator out to the SA-1101 */ + + GPSR = GPIO_GPIO20; + udelay(1); + GPCR = GPIO_GPIO20; + udelay(1); + GPSR = GPIO_GPIO20; + udelay(20); + SKCR = JORSKCR_INIT; /* Turn on the PLL, enable Ready and enable nOE assertion from DC */ + mdelay(100); + + SKCR = JORSKCR_RCLK; /* turn on the RCLOCK */ + SMCR = 0x35; /* initialize the SMC (debug SA-1111 reset */ + PCCR = 0; /* initialize the S2MC (debug SA-1111 reset) */ + + /* LDD4 is speaker, LDD3 is microphone */ + PPSR &= ~(PPC_LDD3 | PPC_LDD4); + PPDR |= PPC_LDD3 | PPC_LDD4; + + /* initialize extra IRQs */ + sa1111_init_irq(1); /* chained on GPIO 1 */ + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); + + return 0; +} + +__initcall(jornada720_init); + + +static void __init +fixup_jornada720(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 32*1024*1024 ); + mi->nr_banks = 1; +} + +static struct map_desc jornada720_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf0000000, 0x48000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Epson registers */ + { 0xf1000000, 0x48200000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Epson frame buffer */ + { 0xf4000000, 0x40000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* SA-1111 */ + LAST_DESC +}; + +static void __init jornada720_map_io(void) +{ + sa1100_map_io(); + iotable_init(jornada720_io_desc); +} + +MACHINE_START(JORNADA720, "HP Jornada 720") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + BOOT_PARAMS(0xc0000100) + FIXUP(fixup_jornada720) + MAPIO(jornada720_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/lart.c linux/arch/arm/mach-sa1100/lart.c --- v2.4.8/linux/arch/arm/mach-sa1100/lart.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/lart.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,45 @@ +/* + * linux/arch/arm/mach-sa1100/lart.c + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static struct map_desc lart_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x00400000, DOMAIN_IO, 1, 1, 0, 0 }, /* main flash memory */ + { 0xec000000, 0x08000000, 0x00400000, DOMAIN_IO, 1, 1, 0, 0 }, /* main flash, alternative location */ + LAST_DESC +}; + +static void __init lart_map_io(void) +{ + sa1100_map_io(); + iotable_init(lart_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); + sa1100_register_uart(2, 2); + GAFR |= (GPIO_UART_TXD | GPIO_UART_RXD); + GPDR |= GPIO_UART_TXD; + GPDR &= ~GPIO_UART_RXD; + PPAR |= PPAR_UPR; +} + +MACHINE_START(LART, "LART") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + BOOT_PARAMS(0xc0000100) + MAPIO(lart_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds-assabet.c linux/arch/arm/mach-sa1100/leds-assabet.c --- v2.4.8/linux/arch/arm/mach-sa1100/leds-assabet.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds-assabet.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,112 @@ +/* + * linux/arch/arm/mach-sa1100/leds-assabet.c + * + * Copyright (C) 2000 John Dorsey + * + * Original (leds-footbridge.c) by Russell King + * + * Assabet uses the LEDs as follows: + * - Green - toggles state every 50 timer interrupts + * - Red - on if system is not idle + */ +#include +#include + +#include +#include +#include + +#include "leds.h" + + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static unsigned int led_state; +static unsigned int hw_led_state; + +#define BCR_LED_MASK (BCR_LED_GREEN | BCR_LED_RED) + +void assabet_leds_event(led_event_t evt) +{ + unsigned long flags; + + local_irq_save(flags); + + switch (evt) { + case led_start: + hw_led_state = BCR_LED_RED | BCR_LED_GREEN; + led_state = LED_STATE_ENABLED; + break; + + case led_stop: + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + led_state |= LED_STATE_CLAIMED; + hw_led_state = BCR_LED_RED | BCR_LED_GREEN; + break; + + case led_release: + led_state &= ~LED_STATE_CLAIMED; + hw_led_state = BCR_LED_RED | BCR_LED_GREEN; + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state ^= BCR_LED_GREEN; + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state |= BCR_LED_RED; + break; + + case led_idle_end: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state &= ~BCR_LED_RED; + break; +#endif + + case led_halted: + break; + + case led_green_on: + if (led_state & LED_STATE_CLAIMED) + hw_led_state &= ~BCR_LED_GREEN; + break; + + case led_green_off: + if (led_state & LED_STATE_CLAIMED) + hw_led_state |= BCR_LED_GREEN; + break; + + case led_amber_on: + break; + + case led_amber_off: + break; + + case led_red_on: + if (led_state & LED_STATE_CLAIMED) + hw_led_state &= ~BCR_LED_RED; + break; + + case led_red_off: + if (led_state & LED_STATE_CLAIMED) + hw_led_state |= BCR_LED_RED; + break; + + default: + break; + } + + if (led_state & LED_STATE_ENABLED) + BCR = BCR_value = (BCR_value & ~BCR_LED_MASK) | hw_led_state; + + local_irq_restore(flags); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds-brutus.c linux/arch/arm/mach-sa1100/leds-brutus.c --- v2.4.8/linux/arch/arm/mach-sa1100/leds-brutus.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds-brutus.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,111 @@ +/* + * linux/arch/arm/mach-sa1100/leds-brutus.c + * + * Copyright (C) 2000 Nicolas Pitre + * + * Brutus uses the LEDs as follows: + * - D3 (Green, GPIO9) - toggles state every 50 timer interrupts + * - D17 (Red, GPIO20) - on if system is not idle + * - D4 (Green, GPIO8) - misc function + */ +#include +#include + +#include +#include +#include + +#include "leds.h" + + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static unsigned int led_state; +static unsigned int hw_led_state; + +#define LED_D3 GPIO_GPIO(9) +#define LED_D4 GPIO_GPIO(8) +#define LED_D17 GPIO_GPIO(20) +#define LED_MASK (LED_D3|LED_D4|LED_D17) + +void brutus_leds_event(led_event_t evt) +{ + unsigned long flags; + + local_irq_save(flags); + + switch (evt) { + case led_start: + hw_led_state = LED_MASK; + led_state = LED_STATE_ENABLED; + break; + + case led_stop: + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + led_state |= LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + + case led_release: + led_state &= ~LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state ^= LED_D3; + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state |= LED_D17; + break; + + case led_idle_end: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state &= ~LED_D17; + break; +#endif + + case led_green_on: + hw_led_state &= ~LED_D4; + break; + + case led_green_off: + hw_led_state |= LED_D4; + break; + + case led_amber_on: + break; + + case led_amber_off: + break; + + case led_red_on: + if (led_state & LED_STATE_CLAIMED) + hw_led_state &= ~LED_D17; + break; + + case led_red_off: + if (led_state & LED_STATE_CLAIMED) + hw_led_state |= LED_D17; + break; + + default: + break; + } + + if (led_state & LED_STATE_ENABLED) { + GPSR = hw_led_state; + GPCR = hw_led_state ^ LED_MASK; + } + + local_irq_restore(flags); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds-cerf.c linux/arch/arm/mach-sa1100/leds-cerf.c --- v2.4.8/linux/arch/arm/mach-sa1100/leds-cerf.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds-cerf.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,111 @@ +/* + * linux/arch/arm/mach-sa1100/leds-cerf.c + * + * Author: ??? + */ +#include +#include + +#include +#include +#include + +#include "leds.h" + + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static unsigned int led_state; +static unsigned int hw_led_state; + +#define LED_D0 GPIO_GPIO(0) +#define LED_D1 GPIO_GPIO(1) +#define LED_D2 GPIO_GPIO(2) +#define LED_D3 GPIO_GPIO(3) +#define LED_MASK (LED_D0|LED_D1|LED_D2|LED_D3) + +void cerf_leds_event(led_event_t evt) +{ + unsigned long flags; + + local_irq_save(flags); + + switch (evt) { + case led_start: + hw_led_state = LED_MASK; + led_state = LED_STATE_ENABLED; + break; + + case led_stop: + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + led_state |= LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + case led_release: + led_state &= ~LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state ^= LED_D0; + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state &= ~LED_D1; + break; + + case led_idle_end: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state |= LED_D1; + break; +#endif + case led_green_on: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state &= ~LED_D2; + break; + + case led_green_off: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state |= LED_D2; + break; + + case led_amber_on: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state &= ~LED_D3; + break; + + case led_amber_off: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state |= LED_D3; + break; + + case led_red_on: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state &= ~LED_D1; + break; + + case led_red_off: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state |= LED_D1; + break; + + default: + break; + } + + if (led_state & LED_STATE_ENABLED) { + GPSR = hw_led_state; + GPCR = hw_led_state ^ LED_MASK; + } + + local_irq_restore(flags); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds-flexanet.c linux/arch/arm/mach-sa1100/leds-flexanet.c --- v2.4.8/linux/arch/arm/mach-sa1100/leds-flexanet.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds-flexanet.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,129 @@ +/* + * linux/arch/arm/mach-sa1100/leds-flexanet.c + * + * by Jordi Colomer + * + * Flexanet LEDs + * + * - Red - toggles state every 50 timer interrupts (Heartbeat) + * - Green - on if system is not idle (CPU load) + */ +#include +#include + +#include +#include +#include + +#include "leds.h" + + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static unsigned int led_state; +static unsigned int hw_led_bcr; +static unsigned int hw_led_gpio; + + +void flexanet_leds_event(led_event_t evt) +{ + unsigned long flags; + + local_irq_save(flags); + + switch (evt) { + case led_start: + /* start using LEDs and enable its hardware */ + hw_led_bcr = BCR_LED_GREEN; + hw_led_gpio = GPIO_LED_RED; + led_state = LED_STATE_ENABLED; + break; + + case led_stop: + /* disable LED h/w */ + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + /* select LEDs for direct access */ + led_state |= LED_STATE_CLAIMED; + hw_led_bcr = 0; + hw_led_gpio = 0; + break; + + case led_release: + /* release LEDs from direct access */ + led_state &= ~LED_STATE_CLAIMED; + hw_led_bcr = 0; + hw_led_gpio = 0; + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + /* toggle heartbeat LED */ + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_gpio ^= GPIO_LED_RED; + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + /* turn off CPU load LED */ + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_bcr &= ~BCR_LED_GREEN; + break; + + case led_idle_end: + /* turn on CPU load LED */ + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_bcr |= BCR_LED_GREEN; + break; +#endif + + case led_halted: + break; + + + /* direct LED access (must be previously claimed) */ + case led_green_on: + if (led_state & LED_STATE_CLAIMED) + hw_led_bcr |= BCR_LED_GREEN; + break; + + case led_green_off: + if (led_state & LED_STATE_CLAIMED) + hw_led_bcr &= ~BCR_LED_GREEN; + break; + + case led_amber_on: + break; + + case led_amber_off: + break; + + case led_red_on: + if (led_state & LED_STATE_CLAIMED) + hw_led_gpio |= GPIO_LED_RED; + break; + + case led_red_off: + if (led_state & LED_STATE_CLAIMED) + hw_led_gpio &= ~GPIO_LED_RED; + break; + + default: + break; + } + + if (led_state & LED_STATE_ENABLED) + { + /* update LEDs */ + BCR = BCR_value = (BCR_value & ~BCR_LED_GREEN) | hw_led_bcr; + GPSR = hw_led_gpio; + GPCR = hw_led_gpio ^ GPIO_LED_RED; + } + + local_irq_restore(flags); +} + diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds-graphicsclient.c linux/arch/arm/mach-sa1100/leds-graphicsclient.c --- v2.4.8/linux/arch/arm/mach-sa1100/leds-graphicsclient.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds-graphicsclient.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,104 @@ +/* + * linux/arch/arm/mach-sa1100/leds-graphicsclient.c + * + * GraphicsClient Plus LEDs support + * Woojung Huh, Feb 13, 2001 + */ +#include +#include + +#include +#include +#include + +#include "leds.h" + + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static unsigned int led_state; +static unsigned int hw_led_state; + +#define LED_TIMER ADS_LED0 /* green heartbeat */ +#define LED_USER ADS_LED1 /* amber, boots to on */ +#define LED_IDLE ADS_LED2 /* red has the idle led, if any */ + +#define LED_MASK (ADS_LED0|ADS_LED1|ADS_LED2) + +void graphicsclient_leds_event(led_event_t evt) +{ + unsigned long flags; + + save_flags_cli(flags); + + switch (evt) { + case led_start: + hw_led_state = 0; /* gc leds are positive logic */ + led_state = LED_STATE_ENABLED; + break; + + case led_stop: + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + led_state |= LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + + case led_release: + led_state &= ~LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state ^= LED_TIMER; + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state &= ~LED_IDLE; + break; + + case led_idle_end: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state |= LED_IDLE; + break; +#endif + + case led_green_on: + break; + + case led_green_off: + break; + + case led_amber_on: + hw_led_state |= LED_USER; + break; + + case led_amber_off: + hw_led_state &= ~LED_USER; + break; + + case led_red_on: + break; + + case led_red_off: + break; + + default: + break; + } + + if (led_state & LED_STATE_ENABLED) { + GPSR = hw_led_state; + GPCR = hw_led_state ^ LED_MASK; + } + + restore_flags(flags); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds-lart.c linux/arch/arm/mach-sa1100/leds-lart.c --- v2.4.8/linux/arch/arm/mach-sa1100/leds-lart.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds-lart.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,102 @@ +/* + * linux/arch/arm/mach-sa1100/leds-lart.c + * + * (C) Erik Mouw (J.A.K.Mouw@its.tudelft.nl), April 21, 2000 + * + * LART uses the LED as follows: + * - GPIO23 is the LED, on if system is not idle + * You can use both CONFIG_LEDS_CPU and CONFIG_LEDS_TIMER at the same + * time, but in that case the timer events will still dictate the + * pace of the LED. + */ +#include +#include + +#include +#include +#include + +#include "leds.h" + + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static unsigned int led_state; +static unsigned int hw_led_state; + +#define LED_23 GPIO_GPIO23 +#define LED_MASK (LED_23) + +void lart_leds_event(led_event_t evt) +{ + unsigned long flags; + + local_irq_save(flags); + + switch(evt) { + case led_start: + /* pin 23 is output pin */ + GPDR |= LED_23; + hw_led_state = LED_MASK; + led_state = LED_STATE_ENABLED; + break; + + case led_stop: + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + led_state |= LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + + case led_release: + led_state &= ~LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state ^= LED_23; + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + /* The LART people like the LED to be off when the + system is idle... */ + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state &= ~LED_23; + break; + + case led_idle_end: + /* ... and on if the system is not idle */ + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state |= LED_23; + break; +#endif + + case led_red_on: + if (led_state & LED_STATE_CLAIMED) + hw_led_state &= ~LED_23; + break; + + case led_red_off: + if (led_state & LED_STATE_CLAIMED) + hw_led_state |= LED_23; + break; + + default: + break; + } + + /* Now set the GPIO state, or nothing will happen at all */ + if (led_state & LED_STATE_ENABLED) { + GPSR = hw_led_state; + GPCR = hw_led_state ^ LED_MASK; + } + + local_irq_restore(flags); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds-pfs168.c linux/arch/arm/mach-sa1100/leds-pfs168.c --- v2.4.8/linux/arch/arm/mach-sa1100/leds-pfs168.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds-pfs168.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,99 @@ +/* + * linux/arch/arm/mach-sa1100/leds-pfs168.c + * + * Author: George Davis + */ +#include +#include + +#include +#include +#include + +#include "leds.h" + + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static unsigned int led_state; +static unsigned int hw_led_state; + +#define LED_GREEN (1) +#define LED_MASK (1) + +void pfs168_leds_event(led_event_t evt) +{ + unsigned long flags; + + local_irq_save(flags); + + switch (evt) { + case led_start: + hw_led_state = LED_GREEN; + led_state = LED_STATE_ENABLED; + break; + + case led_stop: + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + led_state |= LED_STATE_CLAIMED; + hw_led_state = LED_GREEN; + break; + + case led_release: + led_state &= ~LED_STATE_CLAIMED; + hw_led_state = LED_GREEN; + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state ^= LED_GREEN; + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + break; + + case led_idle_end: + break; +#endif + + case led_halted: + break; + + case led_green_on: + if (led_state & LED_STATE_CLAIMED) + hw_led_state |= LED_GREEN; + break; + + case led_green_off: + if (led_state & LED_STATE_CLAIMED) + hw_led_state &= ~LED_GREEN; + break; + + case led_amber_on: + break; + + case led_amber_off: + break; + + case led_red_on: + break; + + case led_red_off: + break; + + default: + break; + } + + if (led_state & LED_STATE_ENABLED) + PFS168_SYSLED = (PFS168_SYSLED & ~LED_MASK) | hw_led_state; + + local_irq_restore(flags); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds-simpad.c linux/arch/arm/mach-sa1100/leds-simpad.c --- v2.4.8/linux/arch/arm/mach-sa1100/leds-simpad.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds-simpad.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,101 @@ +/* + * linux/arch/arm/mach-sa1100/leds-simpad.c + * + * Author: Juergen Messerer + */ +#include +#include + +#include +#include +#include + +#include "leds.h" + + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static unsigned int led_state; +static unsigned int hw_led_state; + +#define LED_GREEN (1) +#define LED_MASK (1) + +void simpad_leds_event(led_event_t evt) +{ + unsigned long flags; + + //local_irq_save(flags); + + switch (evt) + { + case led_start: + hw_led_state = LED_GREEN; + led_state = LED_STATE_ENABLED; + break; + + case led_stop: + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + led_state |= LED_STATE_CLAIMED; + hw_led_state = LED_GREEN; + break; + + case led_release: + led_state &= ~LED_STATE_CLAIMED; + hw_led_state = LED_GREEN; + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state ^= LED_GREEN; + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + break; + + case led_idle_end: + break; +#endif + + case led_halted: + break; + + case led_green_on: + if (led_state & LED_STATE_CLAIMED) + hw_led_state |= LED_GREEN; + break; + + case led_green_off: + if (led_state & LED_STATE_CLAIMED) + hw_led_state &= ~LED_GREEN; + break; + + case led_amber_on: + break; + + case led_amber_off: + break; + + case led_red_on: + break; + + case led_red_off: + break; + + default: + break; + } + + if (led_state & LED_STATE_ENABLED) + cs3_shadow |= LED2_ON; + + //local_irq_restore(flags); +} + diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds.c linux/arch/arm/mach-sa1100/leds.c --- v2.4.8/linux/arch/arm/mach-sa1100/leds.c Mon Sep 18 15:15:25 2000 +++ linux/arch/arm/mach-sa1100/leds.c Sun Aug 12 11:13:59 2001 @@ -1,427 +1,36 @@ /* - * linux/arch/arm/kernel/leds-sa1100.c + * linux/arch/arm/mach-sa1100/leds.c * - * Copyright (C) 2000 John Dorsey - * - * Original (leds-footbridge.c) by Russell King - * - * Added Brutus LEDs support - * Nicolas Pitre, Mar 19, 2000 - * - * Added LART LED support - * Erik Mouw (J.A.K.Mouw@its.tudelft.nl), April 21, 2000 - * - * - * Assabet uses the LEDs as follows: - * - Green - toggles state every 50 timer interrupts - * - Red - on if system is not idle - * - * Brutus uses the LEDs as follows: - * - D3 (Green, GPIO9) - toggles state every 50 timer interrupts - * - D17 (Red, GPIO20) - on if system is not idle - * - D4 (Green, GPIO8) - misc function - * - * LART uses the LED as follows: - * - GPIO23 is the LED, on if system is not idle - * You can use both CONFIG_LEDS_CPU and CONFIG_LEDS_TIMER at the same - * time, but in that case the timer events will still dictate the - * pace of the LED. + * SA1100 LEDs dispatcher * + * Copyright (C) 2001 Nicolas Pitre */ #include -#include -#include #include -#include -#include #include #include -#include - - -#define LED_STATE_ENABLED 1 -#define LED_STATE_CLAIMED 2 - -static unsigned int led_state; -static unsigned int hw_led_state; - - -#ifdef CONFIG_SA1100_ASSABET - -#define BCR_LED_MASK (BCR_LED_GREEN | BCR_LED_RED) - -static void assabet_leds_event(led_event_t evt) -{ - unsigned long flags; - - local_irq_save(flags); - - switch (evt) { - case led_start: - hw_led_state = BCR_LED_RED | BCR_LED_GREEN; - led_state = LED_STATE_ENABLED; - break; - - case led_stop: - led_state &= ~LED_STATE_ENABLED; - break; - - case led_claim: - led_state |= LED_STATE_CLAIMED; - hw_led_state = BCR_LED_RED | BCR_LED_GREEN; - break; - - case led_release: - led_state &= ~LED_STATE_CLAIMED; - hw_led_state = BCR_LED_RED | BCR_LED_GREEN; - break; - -#ifdef CONFIG_LEDS_TIMER - case led_timer: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state ^= BCR_LED_GREEN; - break; -#endif - -#ifdef CONFIG_LEDS_CPU - case led_idle_start: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= BCR_LED_RED; - break; - - case led_idle_end: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state &= ~BCR_LED_RED; - break; -#endif - - case led_halted: - break; - - case led_green_on: - if (led_state & LED_STATE_CLAIMED) - hw_led_state &= ~BCR_LED_GREEN; - break; - - case led_green_off: - if (led_state & LED_STATE_CLAIMED) - hw_led_state |= BCR_LED_GREEN; - break; - - case led_amber_on: - break; - - case led_amber_off: - break; - - case led_red_on: - if (led_state & LED_STATE_CLAIMED) - hw_led_state &= ~BCR_LED_RED; - break; - - case led_red_off: - if (led_state & LED_STATE_CLAIMED) - hw_led_state |= BCR_LED_RED; - break; - - default: - break; - } - - if (led_state & LED_STATE_ENABLED) - BCR = BCR_value = (BCR_value & ~BCR_LED_MASK) | hw_led_state; - - local_irq_restore(flags); -} - -#endif /* CONFIG_SA1100_ASSABET */ - -#ifdef CONFIG_SA1100_BRUTUS - -#define LED_D3 GPIO_GPIO(9) -#define LED_D4 GPIO_GPIO(8) -#define LED_D17 GPIO_GPIO(20) -#define LED_MASK (LED_D3|LED_D4|LED_D17) - -static void brutus_leds_event(led_event_t evt) -{ - unsigned long flags; - - local_irq_save(flags); - - switch (evt) { - case led_start: - hw_led_state = LED_MASK; - led_state = LED_STATE_ENABLED; - break; - - case led_stop: - led_state &= ~LED_STATE_ENABLED; - break; - - case led_claim: - led_state |= LED_STATE_CLAIMED; - hw_led_state = LED_MASK; - break; - - case led_release: - led_state &= ~LED_STATE_CLAIMED; - hw_led_state = LED_MASK; - break; - -#ifdef CONFIG_LEDS_TIMER - case led_timer: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state ^= LED_D3; - break; -#endif - -#ifdef CONFIG_LEDS_CPU - case led_idle_start: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= LED_D17; - break; - - case led_idle_end: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state &= ~LED_D17; - break; -#endif - - case led_green_on: - hw_led_state &= ~LED_D4; - break; - case led_green_off: - hw_led_state |= LED_D4; - break; - - case led_amber_on: - break; - - case led_amber_off: - break; - - case led_red_on: - if (led_state & LED_STATE_CLAIMED) - hw_led_state &= ~LED_D17; - break; - - case led_red_off: - if (led_state & LED_STATE_CLAIMED) - hw_led_state |= LED_D17; - break; - - default: - break; - } - - if (led_state & LED_STATE_ENABLED) { - GPSR = hw_led_state; - GPCR = hw_led_state ^ LED_MASK; - } - - local_irq_restore(flags); -} - -#endif /* CONFIG_SA1100_BRUTUS */ - -#ifdef CONFIG_SA1100_LART - -#define LED_23 GPIO_GPIO23 -#define LED_MASK (LED_23) - - -static void lart_leds_event(led_event_t evt) -{ - unsigned long flags; - - local_irq_save(flags); - - switch(evt) { - case led_start: - hw_led_state = LED_MASK; - led_state = LED_STATE_ENABLED; - break; - - case led_stop: - led_state &= ~LED_STATE_ENABLED; - break; - - case led_claim: - led_state |= LED_STATE_CLAIMED; - hw_led_state = LED_MASK; - break; - - case led_release: - led_state &= ~LED_STATE_CLAIMED; - hw_led_state = LED_MASK; - break; - -#ifdef CONFIG_LEDS_TIMER - case led_timer: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state ^= LED_23; - break; -#endif - -#ifdef CONFIG_LEDS_CPU - case led_idle_start: - /* The LART people like the LED to be off when the - system is idle... */ - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state &= ~LED_23; - break; - - case led_idle_end: - /* ... and on if the system is not idle */ - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= LED_23; - break; -#endif - - case led_red_on: - if (led_state & LED_STATE_CLAIMED) - hw_led_state &= ~LED_23; - break; - - case led_red_off: - if (led_state & LED_STATE_CLAIMED) - hw_led_state |= LED_23; - break; - - default: - break; - } - - /* Now set the GPIO state, or nothing will happen at all */ - if (led_state & LED_STATE_ENABLED) { - GPSR = hw_led_state; - GPCR = hw_led_state ^ LED_MASK; - } - - local_irq_restore(flags); -} - -#endif /* CONFIG_SA1100_LART */ - -#ifdef CONFIG_SA1100_CERF -#define LED_D0 GPIO_GPIO(0) -#define LED_D1 GPIO_GPIO(1) -#define LED_D2 GPIO_GPIO(2) -#define LED_D3 GPIO_GPIO(3) -#define LED_MASK (LED_D0|LED_D1|LED_D2|LED_D3) - -static void cerf_leds_event(led_event_t evt) -{ - unsigned long flags; - - local_irq_save(flags); - - switch (evt) { - case led_start: - hw_led_state = LED_MASK; - led_state = LED_STATE_ENABLED; - break; - - case led_stop: - led_state &= ~LED_STATE_ENABLED; - break; - - case led_claim: - led_state |= LED_STATE_CLAIMED; - hw_led_state = LED_MASK; - break; - case led_release: - led_state &= ~LED_STATE_CLAIMED; - hw_led_state = LED_MASK; - break; - -#ifdef CONFIG_LEDS_TIMER - case led_timer: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state ^= LED_D0; - break; -#endif - -#ifdef CONFIG_LEDS_CPU - case led_idle_start: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state &= ~LED_D1; - break; - - case led_idle_end: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= LED_D1; - break; -#endif - case led_green_on: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state &= ~LED_D2; - break; - - case led_green_off: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= LED_D2; - break; - - case led_amber_on: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state &= ~LED_D3; - break; - - case led_amber_off: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= LED_D3; - break; - - case led_red_on: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state &= ~LED_D1; - break; - - case led_red_off: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= LED_D1; - break; - - default: - break; - } - - if (led_state & LED_STATE_ENABLED) { - GPSR = hw_led_state; - GPCR = hw_led_state ^ LED_MASK; - } - - local_irq_restore(flags); -} - -#endif /* CONFIG_SA1100_CERF */ +#include "leds.h" static int __init sa1100_leds_init(void) { -#ifdef CONFIG_SA1100_ASSABET if (machine_is_assabet()) leds_event = assabet_leds_event; -#endif -#ifdef CONFIG_SA1100_BRUTUS if (machine_is_brutus()) leds_event = brutus_leds_event; -#endif -#ifdef CONFIG_SA1100_LART + if (machine_is_cerf()) + leds_event = cerf_leds_event; + if (machine_is_flexanet()) + leds_event = flexanet_leds_event; + if (machine_is_graphicsclient()) + leds_event = graphicsclient_leds_event; if (machine_is_lart()) leds_event = lart_leds_event; -#endif -#ifdef CONFIG_SA1100_CERF - if (machine_is_cerf()) - { - //GPDR |= 0x0000000F; - leds_event = cerf_leds_event; - } -#endif + if (machine_is_pfs168()) + leds_event = pfs168_leds_event; + leds_event(led_start); return 0; } diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/leds.h linux/arch/arm/mach-sa1100/leds.h --- v2.4.8/linux/arch/arm/mach-sa1100/leds.h Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds.h Sun Aug 12 11:13:59 2001 @@ -0,0 +1,8 @@ +extern void assabet_leds_event(led_event_t evt); +extern void brutus_leds_event(led_event_t evt); +extern void cerf_leds_event(led_event_t evt); +extern void flexanet_leds_event(led_event_t evt); +extern void graphicsclient_leds_event(led_event_t evt); +extern void lart_leds_event(led_event_t evt); +extern void pfs168_leds_event(led_event_t evt); + diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/nanoengine.c linux/arch/arm/mach-sa1100/nanoengine.c --- v2.4.8/linux/arch/arm/mach-sa1100/nanoengine.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/nanoengine.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,62 @@ +/* + * linux/arch/arm/mach-sa1100/nanoengine.c + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static void __init +fixup_nanoengine(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 32*1024*1024 ); + mi->nr_banks = 1; + + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 8192 ); + setup_initrd( __phys_to_virt(0xc0800000), 4*1024*1024 ); + + /* Get command line parameters passed from the loader (if any) */ + if( *((char*)0xc0000100) ) + *cmdline = ((char *)0xc0000100); +} + +static struct map_desc nanoengine_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf0000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* System Registers */ + { 0xf1000000, 0x18A00000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Internal PCI Config Space */ + LAST_DESC +}; + +static void __init nanoengine_map_io(void) +{ + sa1100_map_io(); + iotable_init(nanoengine_io_desc); + + sa1100_register_uart(0, 1); + sa1100_register_uart(1, 2); + sa1100_register_uart(2, 3); + Ser1SDCR0 |= SDCR0_UART; + /* disable IRDA -- UART2 is used as a normal serial port */ + Ser2UTCR4=0; + Ser2HSCR0 = 0; +} + +MACHINE_START(NANOENGINE, "BSE nanoEngine") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_nanoengine) + MAPIO(nanoengine_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/neponset.c linux/arch/arm/mach-sa1100/neponset.c --- v2.4.8/linux/arch/arm/mach-sa1100/neponset.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/neponset.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,183 @@ +/* + * linux/arch/arm/mach-sa1100/neponset.c + * + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "sa1111.h" + + +/* + * Install handler for Neponset IRQ. Yes, yes... we are way down the IRQ + * cascade which is not good for IRQ latency, but the hardware has been + * designed that way... + */ + +static void neponset_IRQ_demux( int irq, void *dev_id, struct pt_regs *regs ) +{ + int irr; + + for(;;){ + irr = IRR & (IRR_ETHERNET | IRR_USAR | IRR_SA1111); + /* Let's have all active IRQ bits high. + * Note: there is a typo in the Neponset user's guide + * for the SA1111 IRR level. + */ + irr ^= (IRR_ETHERNET | IRR_USAR); + if (!irr) break; + + if( irr & IRR_ETHERNET ) + do_IRQ(NEPONSET_ETHERNET_IRQ, regs); + + if( irr & IRR_USAR ) + do_IRQ(NEPONSET_USAR_IRQ, regs); + + if( irr & IRR_SA1111 ) + sa1111_IRQ_demux(irq, dev_id, regs); + } +} + +static struct irqaction neponset_irq = { + name: "Neponset", + handler: neponset_IRQ_demux, + flags: SA_INTERRUPT +}; + +static void __init neponset_init_irq(void) +{ + int irq; + + sa1111_init_irq(-1); /* SA1111 IRQ not routed to a GPIO */ + + /* setup extra Neponset IRQs */ + irq = NEPONSET_ETHERNET_IRQ; + irq_desc[irq].valid = 1; + irq_desc[irq].probe_ok = 1; + irq = NEPONSET_USAR_IRQ; + irq_desc[irq].valid = 1; + irq_desc[irq].probe_ok = 1; + set_GPIO_IRQ_edge( GPIO_NEP_IRQ, GPIO_RISING_EDGE ); + setup_arm_irq( IRQ_GPIO_NEP_IRQ, &neponset_irq ); +} + +static int __init neponset_init(void) +{ + /* only on assabet */ + if (!machine_is_assabet()) + return 0; + + if (machine_has_neponset()) { + LEDS = WHOAMI; + + if (sa1111_init() < 0) + return -EINVAL; + /* + * Assabet is populated by default with two Samsung + * KM416S8030T-G8 + * 128Mb SDRAMs, which are organized as 12-bit (row addr) x + * 9-bit + * (column addr), according to the data sheet. Apparently, the + * bank selects factor into the row address, as Angel sets up + * the + * SA-1110 to use 14x9 addresses. The SDRAM datasheet specifies + * that when running at 100-125MHz, the CAS latency for -8 + * parts + * is 3 cycles, which is consistent with Angel. + */ + SMCR = (SMCR_DTIM | SMCR_MBGE | + FInsrt(FExtr(MDCNFG, MDCNFG_SA1110_DRAC0), SMCR_DRAC) | + ((FExtr(MDCNFG, MDCNFG_SA1110_TDL0)==3) ? SMCR_CLAT : 0)); + SKPCR |= SKPCR_DCLKEN; + + neponset_init_irq(); + } else + printk("Neponset expansion board not present\n"); + + return 0; +} + +__initcall(neponset_init); + +static struct map_desc neponset_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xf3000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* System Registers */ + { 0xf4000000, 0x40000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* SA-1111 */ + LAST_DESC +}; + +static void neponset_set_mctrl(struct uart_port *port, u_int mctrl) +{ + u_int mdm_ctl0 = MDM_CTL_0; + + if (port->mapbase == _Ser1UTCR0) { + if (mctrl & TIOCM_RTS) + mdm_ctl0 &= ~MDM_CTL0_RTS2; + else + mdm_ctl0 |= MDM_CTL0_RTS2; + + if (mctrl & TIOCM_DTR) + mdm_ctl0 &= ~MDM_CTL0_DTR2; + else + mdm_ctl0 |= MDM_CTL0_DTR2; + } else if (port->mapbase == _Ser3UTCR0) { + if (mctrl & TIOCM_RTS) + mdm_ctl0 &= ~MDM_CTL0_RTS1; + else + mdm_ctl0 |= MDM_CTL0_RTS1; + + if (mctrl & TIOCM_DTR) + mdm_ctl0 &= ~MDM_CTL0_DTR1; + else + mdm_ctl0 |= MDM_CTL0_DTR1; + } + + MDM_CTL_0 = mdm_ctl0; +} + +static int neponset_get_mctrl(struct uart_port *port) +{ + u_int ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR; + u_int mdm_ctl1 = MDM_CTL_1; + + if (port->mapbase == _Ser1UTCR0) { + if (mdm_ctl1 & MDM_CTL1_DCD2) + ret &= ~TIOCM_CD; + if (mdm_ctl1 & MDM_CTL1_CTS2) + ret &= ~TIOCM_CTS; + if (mdm_ctl1 & MDM_CTL1_DSR2) + ret &= ~TIOCM_DSR; + } else if (port->mapbase == _Ser3UTCR0) { + if (mdm_ctl1 & MDM_CTL1_DCD1) + ret &= ~TIOCM_CD; + if (mdm_ctl1 & MDM_CTL1_CTS1) + ret &= ~TIOCM_CTS; + if (mdm_ctl1 & MDM_CTL1_DSR1) + ret &= ~TIOCM_DSR; + } + + return ret; +} + +static struct sa1100_port_fns neponset_port_fns __initdata = { + set_mctrl: neponset_set_mctrl, + get_mctrl: neponset_get_mctrl, +}; + +void __init neponset_map_io(void) +{ + iotable_init(neponset_io_desc); + if (machine_has_neponset()) + sa1100_register_uart_fns(&neponset_port_fns); +} diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/omnimeter.c linux/arch/arm/mach-sa1100/omnimeter.c --- v2.4.8/linux/arch/arm/mach-sa1100/omnimeter.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/omnimeter.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,51 @@ +/* + * linux/arch/arm/mach-sa1100/omnimeter.c + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static void __init +fixup_omnimeter(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 16*1024*1024 ); + mi->nr_banks = 1; + + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 8192 ); + setup_initrd( __phys_to_virt(0xd0000000), 0x00400000 ); +} + +static struct map_desc omnimeter_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xd2000000, 0x10000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* TS */ + LAST_DESC +}; + +static void __init omnimeter_map_io(void) +{ + sa1100_map_io(); + iotable_init(omnimeter_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); +} + +MACHINE_START(OMNIMETER, "OmniMeter") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_omnimeter) + MAPIO(omnimeter_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/pangolin.c linux/arch/arm/mach-sa1100/pangolin.c --- v2.4.8/linux/arch/arm/mach-sa1100/pangolin.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/pangolin.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,53 @@ +/* + * linux/arch/arm/mach-sa1100/pangolin.c + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static void __init +fixup_pangolin(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 64*1024*1024 ); + mi->nr_banks = 1; + + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 16384 ); + setup_initrd( 0xc0800000, 3*1024*1024 ); +} + +static struct map_desc pangolin_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x04000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* MQ200 */ + LAST_DESC +}; + +static void __init pangolin_map_io(void) +{ + sa1100_map_io(); + iotable_init(pangolin_io_desc); + + sa1100_register_uart(0, 1); + sa1100_register_uart(1, 3); + Ser1SDCR0 |= SDCR0_UART; +} + +MACHINE_START(PANGOLIN, "Dialogue-Pangolin") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_pangolin) + MAPIO(pangolin_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/pcipool.c linux/arch/arm/mach-sa1100/pcipool.c --- v2.4.8/linux/arch/arm/mach-sa1100/pcipool.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/pcipool.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,377 @@ +/* + NOTE: + + this code was lifted straight out of drivers/pci/pci.c; + when compiling for the Intel StrongARM SA-1110/SA-1111 the + usb-ohci.c driver needs these routines even when the architecture + has no pci bus... +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "pcipool.h" + +/* + * Pool allocator ... wraps the pci_alloc_consistent page allocator, so + * small blocks are easily used by drivers for bus mastering controllers. + * This should probably be sharing the guts of the slab allocator. + */ + +struct pci_pool { /* the pool */ + struct list_head page_list; + spinlock_t lock; + size_t blocks_per_page; + size_t size; + int flags; + struct pci_dev *dev; + size_t allocation; + char name [32]; + wait_queue_head_t waitq; +}; + +struct pci_page { /* cacheable header for 'allocation' bytes */ + struct list_head page_list; + void *vaddr; + dma_addr_t dma; + unsigned long bitmap [0]; +}; + +#define POOL_TIMEOUT_JIFFIES ((100 /* msec */ * HZ) / 1000) +#define POOL_POISON_BYTE 0xa7 + +// #define CONFIG_PCIPOOL_DEBUG + + +/** + * pci_pool_create - Creates a pool of pci consistent memory blocks, for dma. + * @name: name of pool, for diagnostics + * @pdev: pci device that will be doing the DMA + * @size: size of the blocks in this pool. + * @align: alignment requirement for blocks; must be a power of two + * @allocation: returned blocks won't cross this boundary (or zero) + * @flags: SLAB_* flags (not all are supported). + * + * Returns a pci allocation pool with the requested characteristics, or + * null if one can't be created. Given one of these pools, pci_pool_alloc() + * may be used to allocate memory. Such memory will all have "consistent" + * DMA mappings, accessible by the device and its driver without using + * cache flushing primitives. The actual size of blocks allocated may be + * larger than requested because of alignment. + * + * If allocation is nonzero, objects returned from pci_pool_alloc() won't + * cross that size boundary. This is useful for devices which have + * addressing restrictions on individual DMA transfers, such as not crossing + * boundaries of 4KBytes. + */ +struct pci_pool * +pci_pool_create (const char *name, struct pci_dev *pdev, + size_t size, size_t align, size_t allocation, int flags) +{ + struct pci_pool *retval; + + if (align == 0) + align = 1; + if (size == 0) + return 0; + else if (size < align) + size = align; + else if ((size % align) != 0) { + size += align + 1; + size &= ~(align - 1); + } + + if (allocation == 0) { + if (PAGE_SIZE < size) + allocation = size; + else + allocation = PAGE_SIZE; + // FIXME: round up for less fragmentation + } else if (allocation < size) + return 0; + + if (!(retval = kmalloc (sizeof *retval, flags))) + return retval; + +#ifdef CONFIG_PCIPOOL_DEBUG + flags |= SLAB_POISON; +#endif + + strncpy (retval->name, name, sizeof retval->name); + retval->name [sizeof retval->name - 1] = 0; + + retval->dev = pdev; + INIT_LIST_HEAD (&retval->page_list); + spin_lock_init (&retval->lock); + retval->size = size; + retval->flags = flags; + retval->allocation = allocation; + retval->blocks_per_page = allocation / size; + init_waitqueue_head (&retval->waitq); + +#ifdef CONFIG_PCIPOOL_DEBUG + printk (KERN_DEBUG "pcipool create %s/%s size %d, %d/page (%d alloc)\n", + pdev ? pdev->slot_name : NULL, retval->name, size, + retval->blocks_per_page, allocation); +#endif + + return retval; +} + + +static struct pci_page * +pool_alloc_page (struct pci_pool *pool, int mem_flags) +{ + struct pci_page *page; + int mapsize; + + mapsize = pool->blocks_per_page; + mapsize = (mapsize + BITS_PER_LONG - 1) / BITS_PER_LONG; + mapsize *= sizeof (long); + + page = (struct pci_page *) kmalloc (mapsize + sizeof *page, mem_flags); + if (!page) + return 0; + page->vaddr = pci_alloc_consistent (pool->dev, + pool->allocation, &page->dma); + if (page->vaddr) { + memset (page->bitmap, 0xff, mapsize); // bit set == free + if (pool->flags & SLAB_POISON) + memset (page->vaddr, POOL_POISON_BYTE, pool->allocation); + list_add (&page->page_list, &pool->page_list); + } else { + kfree (page); + page = 0; + } + return page; +} + + +static inline int +is_page_busy (int blocks, unsigned long *bitmap) +{ + while (blocks > 0) { + if (*bitmap++ != ~0UL) + return 1; + blocks -= BITS_PER_LONG; + } + return 0; +} + +static void +pool_free_page (struct pci_pool *pool, struct pci_page *page) +{ + dma_addr_t dma = page->dma; + + if (pool->flags & SLAB_POISON) + memset (page->vaddr, POOL_POISON_BYTE, pool->allocation); + pci_free_consistent (pool->dev, pool->allocation, page->vaddr, dma); + list_del (&page->page_list); + kfree (page); +} + + +/** + * pci_pool_destroy - destroys a pool of pci memory blocks. + * @pool: pci pool that will be destroyed + * + * Caller guarantees that no more memory from the pool is in use, + * and that nothing will try to use the pool after this call. + */ +void +pci_pool_destroy (struct pci_pool *pool) +{ + unsigned long flags; + +#ifdef CONFIG_PCIPOOL_DEBUG + printk (KERN_DEBUG "pcipool destroy %s/%s\n", + pool->dev ? pool->dev->slot_name : NULL, + pool->name); +#endif + + spin_lock_irqsave (&pool->lock, flags); + while (!list_empty (&pool->page_list)) { + struct pci_page *page; + page = list_entry (pool->page_list.next, + struct pci_page, page_list); + if (is_page_busy (pool->blocks_per_page, page->bitmap)) { + printk (KERN_ERR "pci_pool_destroy %s/%s, %p busy\n", + pool->dev ? pool->dev->slot_name : NULL, + pool->name, page->vaddr); + /* leak the still-in-use consistent memory */ + list_del (&page->page_list); + kfree (page); + } else + pool_free_page (pool, page); + } + spin_unlock_irqrestore (&pool->lock, flags); + kfree (pool); +} + + +/** + * pci_pool_alloc - get a block of consistent memory + * @pool: pci pool that will produce the block + * @mem_flags: SLAB_KERNEL or SLAB_ATOMIC + * @handle: pointer to dma address of block + * + * This returns the kernel virtual address of a currently unused block, + * and reports its dma address through the handle. + * If such a memory block can't be allocated, null is returned. + */ +void * +pci_pool_alloc (struct pci_pool *pool, int mem_flags, dma_addr_t *handle) +{ + unsigned long flags; + struct list_head *entry; + struct pci_page *page; + int map, block; + size_t offset; + void *retval; + +restart: + spin_lock_irqsave (&pool->lock, flags); + list_for_each (entry, &pool->page_list) { + int i; + page = list_entry (entry, struct pci_page, page_list); + /* only cachable accesses here ... */ + for (map = 0, i = 0; + i < pool->blocks_per_page; + i += BITS_PER_LONG, map++) { + if (page->bitmap [map] == 0) + continue; + block = ffz (~ page->bitmap [map]); + if ((i + block) < pool->blocks_per_page) { + clear_bit (block, &page->bitmap [map]); + offset = (BITS_PER_LONG * map) + block; + offset *= pool->size; + goto ready; + } + } + } + if (!(page = pool_alloc_page (pool, mem_flags))) { + if (mem_flags == SLAB_KERNEL) { + DECLARE_WAITQUEUE (wait, current); + + current->state = TASK_INTERRUPTIBLE; + add_wait_queue (&pool->waitq, &wait); + spin_unlock_irqrestore (&pool->lock, flags); + + schedule_timeout (POOL_TIMEOUT_JIFFIES); + + current->state = TASK_RUNNING; + remove_wait_queue (&pool->waitq, &wait); + goto restart; + } + retval = 0; + goto done; + } + + clear_bit (0, &page->bitmap [0]); + offset = 0; +ready: + retval = offset + page->vaddr; + *handle = offset + page->dma; +done: + spin_unlock_irqrestore (&pool->lock, flags); + return retval; +} + + +static struct pci_page * +pool_find_page (struct pci_pool *pool, dma_addr_t dma) +{ + unsigned long flags; + struct list_head *entry; + struct pci_page *page; + + spin_lock_irqsave (&pool->lock, flags); + list_for_each (entry, &pool->page_list) { + page = list_entry (entry, struct pci_page, page_list); + if (dma < page->dma) + continue; + if (dma < (page->dma + pool->allocation)) + goto done; + } + page = 0; +done: + spin_unlock_irqrestore (&pool->lock, flags); + return page; +} + + +/** + * pci_pool_free - put block back into pci pool + * @pool: the pci pool holding the block + * @vaddr: virtual address of block + * @dma: dma address of block + * + * Caller promises neither device nor driver will again touch this block + * unless it is first re-allocated. + */ +void +pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma) +{ + struct pci_page *page; + unsigned long flags; + int map, block; + + if ((page = pool_find_page (pool, dma)) == 0) { + printk (KERN_ERR "pci_pool_free %s/%s, %p/%x (bad dma)\n", + pool->dev ? pool->dev->slot_name : NULL, + pool->name, vaddr, dma); + return; + } +#ifdef CONFIG_PCIPOOL_DEBUG + if (((dma - page->dma) + (void *)page->vaddr) != vaddr) { + printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%x\n", + pool->dev ? pool->dev->slot_name : NULL, + pool->name, vaddr, dma); + return; + } +#endif + + block = dma - page->dma; + block /= pool->size; + map = block / BITS_PER_LONG; + block %= BITS_PER_LONG; + +#ifdef CONFIG_PCIPOOL_DEBUG + if (page->bitmap [map] & (1UL << block)) { + printk (KERN_ERR "pci_pool_free %s/%s, dma %x already free\n", + pool->dev ? pool->dev->slot_name : NULL, + pool->name, dma); + return; + } +#endif + if (pool->flags & SLAB_POISON) + memset (vaddr, POOL_POISON_BYTE, pool->size); + + spin_lock_irqsave (&pool->lock, flags); + set_bit (block, &page->bitmap [map]); + if (waitqueue_active (&pool->waitq)) + wake_up (&pool->waitq); + /* + * Resist a temptation to do + * if (!is_page_busy(bpp, page->bitmap)) pool_free_page(pool, page); + * it is not interrupt safe. Better have empty pages hang around. + */ + spin_unlock_irqrestore (&pool->lock, flags); +} + + +EXPORT_SYMBOL (pci_pool_create); +EXPORT_SYMBOL (pci_pool_destroy); +EXPORT_SYMBOL (pci_pool_alloc); +EXPORT_SYMBOL (pci_pool_free); + diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/pcipool.h linux/arch/arm/mach-sa1100/pcipool.h --- v2.4.8/linux/arch/arm/mach-sa1100/pcipool.h Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/pcipool.h Sun Aug 12 11:13:59 2001 @@ -0,0 +1,8 @@ + +struct pci_pool *pci_pool_create (const char *name, struct pci_dev *dev, + size_t size, size_t align, size_t allocation, int flags); +void pci_pool_destroy (struct pci_pool *pool); + +void *pci_pool_alloc (struct pci_pool *pool, int flags, dma_addr_t *handle); +void pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t addr); + diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/pfs168.c linux/arch/arm/mach-sa1100/pfs168.c --- v2.4.8/linux/arch/arm/mach-sa1100/pfs168.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/pfs168.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,99 @@ +/* + * linux/arch/arm/mach-sa1100/pfs168.c + */ + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" +#include "sa1111.h" + + +static int __init pfs168_init(void) +{ + if (sa1111_init() < 0) + return -EINVAL; + SMCR = (SMCR_DTIM | SMCR_MBGE | + FInsrt(FExtr(MDCNFG, MDCNFG_SA1110_DRAC0), SMCR_DRAC) | + ((FExtr(MDCNFG, MDCNFG_SA1110_TDL0)==3) ? SMCR_CLAT : 0)); + SKPCR |= SKPCR_DCLKEN; + + sa1111_init_irq(25); /* SA1111 IRQ on GPIO 25 */ + + return 0; +} + +__initcall(pfs168_init); + + +static void __init pfs168_init_irq(void) +{ + sa1100_init_irq(); + + /* + * Need to register these as rising edge interrupts + * for standard 16550 serial driver support. + */ + set_GPIO_IRQ_edge(GPIO_GPIO(19), GPIO_RISING_EDGE); + set_GPIO_IRQ_edge(GPIO_GPIO(20), GPIO_RISING_EDGE); +} + + +static void __init +fixup_pfs168(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 16*1024*1024 ); + mi->nr_banks = 1; + + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 8192 ); + setup_initrd( 0xc0800000, 3*1024*1024 ); +} + +static struct map_desc pfs168_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf0000000, 0x10000000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* 16C752 DUART port A (COM5) */ + { 0xf0001000, 0x10800000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* 16C752 DUART port B (COM6) */ + { 0xf0002000, 0x11000000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* COM1 RTS control (SYSC1RTS) */ + { 0xf0003000, 0x11400000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* Status LED control (SYSLED) */ + { 0xf0004000, 0x11800000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* DTMF code read (SYSDTMF) */ + { 0xf0005000, 0x11c00000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* LCD configure, enable (SYSLCDDE) */ + { 0xf0006000, 0x12000000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* COM1 DSR and motion sense (SYSC1DSR) */ + { 0xf0007000, 0x12800000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* COM3 xmit enable (SYSC3TEN) */ + { 0xf0008000, 0x13000000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* Control register A (SYSCTLA) */ + { 0xf0009000, 0x13800000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* Control register B (SYSCTLB) */ + { 0xf000a000, 0x18000000, 0x00001000, DOMAIN_IO, 1, 1, 0, 0 }, /* SMC91C96 */ + { 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* MQ200 */ + { 0xf4000000, 0x40000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* SA-1111 */ + LAST_DESC +}; + +static void __init pfs168_map_io(void) +{ + sa1100_map_io(); + iotable_init(pfs168_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); +} + +MACHINE_START(PFS168, "Tulsa") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) +#if defined(CONFIG_PFS168_CMDLINE) + BOOT_PARAMS(0xc0000100) +#endif + FIXUP(fixup_pfs168) + MAPIO(pfs168_map_io) + INITIRQ(pfs168_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/pleb.c linux/arch/arm/mach-sa1100/pleb.c --- v2.4.8/linux/arch/arm/mach-sa1100/pleb.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/pleb.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,61 @@ +/* + * linux/arch/arm/mach-sa1100/pleb.c + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + +static void __init +fixup_pleb(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK(0, 0xc0000000, 16*1024*1024); + SET_BANK(1, 0xc8000000, 16*1024*1024); + SET_BANK(2, 0xd0000000, 16*1024*1024); + SET_BANK(3, 0xd8000000, 16*1024*1024); + + /* make this 4 a second memory card is used to make 64MB */ + /* make it 1 if a 16MB memory card is used */ + mi->nr_banks = 2; /* Default 32MB */ + + ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0); + setup_ramdisk(1, 0, 0, 8192); + setup_initrd(0xc0400000, 4*1024*1024); +} + +static struct map_desc pleb_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x00400000, DOMAIN_IO, 1, 1, 0, 0 }, /* main flash memory */ + { 0xe8400000, 0x08000000, 0x00400000, DOMAIN_IO, 1, 1, 0, 0 }, /* main flash, alternative location */ + LAST_DESC +}; + +static void __init pleb_map_io(void) +{ + sa1100_map_io(); + iotable_init(pleb_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); + GAFR |= (GPIO_UART_TXD | GPIO_UART_RXD); + GPDR |= GPIO_UART_TXD; + GPDR &= ~GPIO_UART_RXD; + PPAR |= PPAR_UPR; +} + +MACHINE_START(PLEB, "PLEB") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_pleb) + MAPIO(pleb_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/sa1111-pcibuf.c linux/arch/arm/mach-sa1100/sa1111-pcibuf.c --- v2.4.8/linux/arch/arm/mach-sa1100/sa1111-pcibuf.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/sa1111-pcibuf.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,279 @@ +/* + * linux/arch/arm/mach-sa1100/pci-sa1111.c + * + * Special pci_map/unmap_single routines for SA-1111. These functions + * compensate for a bug in the SA-1111 hardware which don't allow DMA + * to/from addresses above 1MB. + * + * Brad Parker (brad@heeltoe.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 06/13/2001 - created. + */ + +#include +#include +#include +#include +#include + +#include "pcipool.h" + +/* + * simple buffer allocator for copying of unsafe to safe buffers + * uses __alloc/__free for actual buffers + * keeps track of safe buffers we've allocated so we can recover the + * unsafe buffers. + */ + +#define MAX_SAFE 32 +#define SIZE_SMALL 1024 +#define SIZE_LARGE (16*1024) + +static long mapped_alloc_size; +static char *safe_buffers[MAX_SAFE][2]; + + +static struct pci_pool *small_buffer_cache, *large_buffer_cache; + +static int +init_safe_buffers(struct pci_dev *dev) +{ + small_buffer_cache = pci_pool_create("pci_small_buffer", + dev, + SIZE_SMALL, + 0 /* byte alignment */, + 0 /* no page-crossing issues */, + GFP_KERNEL | GFP_DMA); + + if (small_buffer_cache == 0) + return -1; + + large_buffer_cache = pci_pool_create("pci_large_buffer", + dev, + SIZE_LARGE, + 0 /* byte alignment */, + 0 /* no page-crossing issues */, + GFP_KERNEL | GFP_DMA); + if (large_buffer_cache == 0) + return -1; + + return 0; +} + +static void +free_safe_buffers(void) +{ + pci_pool_destroy(small_buffer_cache); + pci_pool_destroy(large_buffer_cache); +} + +/* allocate a 'safe' buffer and keep track of it */ +static char * +alloc_safe_buffer(char *unsafe, int size, dma_addr_t *pbus) +{ + char *safe; + dma_addr_t busptr; + struct pci_pool *pool; + int i; + + if (0) printk("alloc_safe_buffer(size=%d)\n", size); + + if (size <= SIZE_SMALL) + pool = small_buffer_cache; + else + if (size < SIZE_LARGE) + pool = large_buffer_cache; + else + return 0; + + safe = pci_pool_alloc(pool, SLAB_ATOMIC, &busptr); + if (safe == 0) + return 0; + + for (i = 0; i < MAX_SAFE; i++) + if (safe_buffers[i][0] == 0) { + break; + } + + if (i == MAX_SAFE) { + panic(__FILE__ ": exceeded MAX_SAFE buffers"); + } + + /* place the size index and the old buffer ptr in the first 8 bytes + * and return a ptr + 12 to caller + */ + ((int *)safe)[0] = i; + ((char **)safe)[1] = (char *)pool; + ((char **)safe)[2] = unsafe; + + busptr += sizeof(int) + sizeof(char *) + sizeof(char *); + + safe_buffers[i][0] = (void *)busptr; + safe_buffers[i][1] = (void *)safe; + + safe += sizeof(int) + sizeof(char *) + sizeof(char *); + + *pbus = busptr; + return safe; +} + +/* determine if a buffer is from our "safe" pool */ +static char * +find_safe_buffer(char *busptr, char **unsafe) +{ + int i; + char *buf; + + for (i = 0; i < MAX_SAFE; i++) { + if (safe_buffers[i][0] == busptr) { + if (0) printk("find_safe_buffer(%p) found @ %d\n", busptr, i); + buf = safe_buffers[i][1]; + *unsafe = ((char **)buf)[2]; + return buf + sizeof(int) + sizeof(char *) + sizeof(char *); + } + } + + return (char *)0; +} + +static void +free_safe_buffer(char *buf) +{ + int index; + struct pci_pool *pool; + char *dma; + + if (0) printk("free_safe_buffer(buf=%p)\n", buf); + + /* retrieve the buffer size index */ + buf -= sizeof(int) + sizeof(char*) + sizeof(char*); + index = ((int *)buf)[0]; + pool = (struct pci_pool *)((char **)buf)[1]; + + if (0) printk("free_safe_buffer(%p) index %d\n", + buf, index); + + if (index < 0 || index >= MAX_SAFE) { + printk(__FILE__ ": free_safe_buffer() corrupt buffer\n"); + return; + } + + dma = safe_buffers[index][0]; + safe_buffers[index][0] = 0; + + pci_pool_free(pool, buf, (u32)dma); +} + +/* + NOTE: + replace pci_map/unmap_single with local routines which will + do buffer copies if buffer is above 1mb... +*/ + +/* + * see if a buffer address is in an 'unsafe' range. if it is + * allocate a 'safe' buffer and copy the unsafe buffer into it. + * substitute the safe buffer for the unsafe one. + * (basically move the buffer from an unsafe area to a safe one) + * + * we assume calls to map_single are symmetric with calls to unmap_single... + */ +dma_addr_t +pci_map_single(struct pci_dev *hwdev, void *virtptr, + size_t size, int direction) +{ + dma_addr_t busptr; + + /* hack; usb-ohci.c never sends hwdev==NULL, all others do */ + if (hwdev == NULL) { + consistent_sync(virtptr, size, direction); + return virt_to_bus(virtptr); + } + + mapped_alloc_size += size; + + if (0) printk("pci_map_single(hwdev=%p,ptr=%p,size=%d,dir=%x) " + "alloced=%ld\n", + hwdev, virtptr, size, direction, mapped_alloc_size); + + busptr = virt_to_bus(virtptr); + + /* we assume here that a buffer will never be >=64k */ + if ( (((unsigned long)busptr) & 0x100000) || + ((((unsigned long)busptr)+size) & 0x100000) ) + { + char *safe; + + safe = alloc_safe_buffer(virtptr, size, &busptr); + if (safe == 0) { + printk("unable to map unsafe buffer %p!\n", virtptr); + return 0; + } + + if (0) printk("unsafe buffer %p (phy=%p) mapped to %p (phy=%p)\n", + virtptr, (void *)virt_to_bus(virtptr), + safe, (void *)busptr); + + memcpy(safe, virtptr, size); + consistent_sync(safe, size, direction); + + return busptr; + } + + consistent_sync(virtptr, size, direction); + return busptr; +} + +/* + * see if a mapped address was really a "safe" buffer and if so, + * copy the data from the safe buffer back to the unsafe buffer + * and free up the safe buffer. + * (basically return things back to the way they should be) + */ +void +pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, + size_t size, int direction) +{ + char *safe, *unsafe; + void *buf; + + /* hack; usb-ohci.c never sends hwdev==NULL, all others do */ + if (hwdev == NULL) { + return; + } + + mapped_alloc_size -= size; + + if (0) printk("pci_unmap_single(hwdev=%p,ptr=%p,size=%d,dir=%x) " + "alloced=%ld\n", + hwdev, (void *)dma_addr, size, direction, + mapped_alloc_size); + + if ((safe = find_safe_buffer((void *)dma_addr, &unsafe))) { + if (0) printk("copyback unsafe %p, safe %p, size %d\n", + unsafe, safe, size); + + consistent_sync(safe, size, PCI_DMA_FROMDEVICE); + memcpy(unsafe, safe, size); + free_safe_buffer(safe); + } else { + /* assume this is normal memory */ + buf = bus_to_virt(dma_addr); + consistent_sync(buf, size, PCI_DMA_FROMDEVICE); + } +} + +EXPORT_SYMBOL(pci_map_single); +EXPORT_SYMBOL(pci_unmap_single); + +static void __init sa1111_init_safe_buffers(void) +{ + printk("Initializing SA1111 buffer pool for DMA workaround\n"); + init_safe_buffers(NULL); +} + +__initcall(sa1111_init_safe_buffers); diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/sa1111.c linux/arch/arm/mach-sa1100/sa1111.c --- v2.4.8/linux/arch/arm/mach-sa1100/sa1111.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/sa1111.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,324 @@ +/* + * linux/arch/arm/mach-sa1100/sa1111.c + * + * SA1111 support + * + * Original code by John Dorsey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This file contains all generic SA1111 support, except for DMA which is + * provided separately in dma-sa1111.c. + * + * All initialization functions provided here are intended to be called + * from machine specific code with proper arguments when required. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "sa1111.h" + +static int sa1111_ohci_hcd_init(void); + +/* + * SA1111 initialization + */ + +int __init sa1111_init(void) +{ + unsigned long id = SKID; + + if((id & SKID_ID_MASK) == SKID_SA1111_ID) + printk( KERN_INFO "SA-1111 Microprocessor Companion Chip: " + "silicon revision %lx, metal revision %lx\n", + (id & SKID_SIREV_MASK)>>4, (id & SKID_MTREV_MASK)); + else { + printk(KERN_ERR "Could not detect SA-1111!\n"); + return -EINVAL; + } + + /* + * First, set up the 3.6864MHz clock on GPIO 27 for the SA-1111: + * (SA-1110 Developer's Manual, section 9.1.2.1) + */ + GAFR |= GPIO_32_768kHz; + GPDR |= GPIO_32_768kHz; + TUCR = TUCR_3_6864MHz; + + /* Now, set up the PLL and RCLK in the SA-1111: */ + SKCR = SKCR_PLL_BYPASS | SKCR_RDYEN | SKCR_OE_EN; + udelay(100); + SKCR = SKCR_PLL_BYPASS | SKCR_RCLKEN | SKCR_RDYEN | SKCR_OE_EN; + + /* + * SA-1111 Register Access Bus should now be available. Clocks for + * any other SA-1111 functional blocks must be enabled separately + * using the SKPCR. + */ + + /* + * If the system is going to use the SA-1111 DMA engines, set up + * the memory bus request/grant pins. Also configure the shared + * memory controller on the SA-1111 (SA-1111 Developer's Manual, + * section 3.2.3) and power up the DMA bus clock: + */ + GAFR |= (GPIO_MBGNT | GPIO_MBREQ); + GPDR |= GPIO_MBGNT; + GPDR &= ~GPIO_MBREQ; + TUCR |= TUCR_MR; + +#ifdef CONFIG_USB_OHCI + /* setup up sa1111 usb host controller h/w */ + sa1111_ohci_hcd_init(); +#endif + + return 0; +} + + +/* + * SA1111 Interrupt support + */ + +void sa1111_IRQ_demux( int irq, void *dev_id, struct pt_regs *regs ) +{ + int i; + unsigned long stat0, stat1; + + for(;;) { + stat0 = INTSTATCLR0, stat1 = INTSTATCLR1; + if( !stat0 && !stat1 ) break; + if( stat0 ) + for( i = 0; i < 32; i++ ) + if( stat0 & (1<= 0) { + set_GPIO_IRQ_edge (GPIO_GPIO(gpio_nr), GPIO_RISING_EDGE); + setup_arm_irq (SA1100_GPIO_TO_IRQ(gpio_nr), &sa1111_irq); + } +} + +/* ----------------- */ + +#ifdef CONFIG_USB_OHCI + +#if defined(CONFIG_SA1100_XP860) || defined(CONFIG_ASSABET_NEPONSET) || defined(CONFIG_SA1100_PFS168) +#define PwrSensePolLow 1 +#define PwrCtrlPolLow 1 +#else +#define PwrSensePolLow 0 +#define PwrCtrlPolLow 0 +#endif + +/* + * The SA-1111 errata says that the DMA hardware needs to be exercised + * before the clocks are turned on to work properly. This code does + * a tiny dma transfer to prime to hardware. + */ +static void __init sa1111_dma_setup(void) +{ + dma_addr_t vbuf; + void * pbuf; + + /* DMA init & setup */ + + /* WARNING: The SA-1111 L3 function is used as part of this + * SA-1111 DMA errata workaround. + * + * N.B., When the L3 function is enabled, it uses GPIO_B<4:5> + * and takes precedence over the PS/2 mouse and GPIO_B + * functions. Refer to "Intel StrongARM SA-1111 Microprocessor + * Companion Chip, Sect 10.2" for details. So this "fix" may + * "break" support of either PS/2 mouse or GPIO_B if + * precautions are not taken to avoid collisions in + * configuration and use of these pins. AFAIK, no precautions + * are taken at this time. So it is likely that the action + * taken here may cause problems in PS/2 mouse and/or GPIO_B + * pin use elsewhere. + * + * But wait, there's more... What we're doing here is + * obviously altogether a bad idea. We're indiscrimanately bit + * flipping config for a few different functions here which + * are "owned" by other drivers. This needs to be handled + * better than it is being done here at this time. */ + + /* prime the dma engine with a tiny dma */ + SKPCR |= SKPCR_I2SCLKEN; + SKAUD |= SKPCR_L3CLKEN | SKPCR_SCLKEN; + + SACR0 |= 0x00003305; + SACR1 = 0x00000000; + + /* we need memory below 1mb */ + pbuf = consistent_alloc(GFP_KERNEL | GFP_DMA, 4, &vbuf); + + SADTSA = (unsigned long)pbuf; + SADTCA = 4; + + SADTCS |= 0x00000011; + SKPCR |= SKPCR_DCLKEN; + + /* wait */ + udelay(100); + + SACR0 &= ~(0x00000002); + SACR0 &= ~(0x00000001); + + /* */ + SACR0 |= 0x00000004; + SACR0 &= ~(0x00000004); + + SKAUD &= ~(SKPCR_L3CLKEN | SKPCR_SCLKEN); + + SKPCR &= ~SKPCR_I2SCLKEN; + + consistent_free(pbuf, 4, vbuf); +} + +#ifdef CONFIG_USB_OHCI +/* + * reset the SA-1111 usb controller and turn on it's clocks + */ +static int __init sa1111_ohci_hcd_init(void) +{ + volatile unsigned long *Reset = (void *)SA1111_p2v(_SA1111(0x051c)); + volatile unsigned long *Status = (void *)SA1111_p2v(_SA1111(0x0518)); + + /* turn on clocks */ + SKPCR |= SKPCR_UCLKEN; + udelay(100); + + /* force a reset */ + *Reset = 0x01; + *Reset |= 0x02; + udelay(100); + + *Reset = 0; + + /* take out of reset */ + /* set power sense and control lines (this from the diags code) */ + *Reset = ( PwrSensePolLow << 6 ) + | ( PwrCtrlPolLow << 7 ); + + *Status = 0; + + udelay(10); + + /* compensate for dma bug */ + sa1111_dma_setup(); + + return 0; +} + +void sa1111_ohci_hcd_cleanup(void) +{ + /* turn the USB clock off */ + SKPCR &= ~SKPCR_UCLKEN; +} +#endif + + +#endif /* CONFIG_USB_OHCI */ diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/sa1111.h linux/arch/arm/mach-sa1100/sa1111.h --- v2.4.8/linux/arch/arm/mach-sa1100/sa1111.h Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/sa1111.h Sun Aug 12 11:13:59 2001 @@ -0,0 +1,8 @@ +/* + * linux/arch/arm/mach-sa1100/sa1111.h + */ + +extern int __init sa1111_init(void); +extern void __init sa1111_init_irq(int gpio_nr); +extern void sa1111_IRQ_demux( int irq, void *dev_id, struct pt_regs *regs ); + diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/sherman.c linux/arch/arm/mach-sa1100/sherman.c --- v2.4.8/linux/arch/arm/mach-sa1100/sherman.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/sherman.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,52 @@ +/* + * linux/arch/arm/mach-sa1100/sherman.c + */ + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static void __init +fixup_sherman(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 64*1024*1024 ); + SET_BANK( 1, 0xc8000000, 64*1024*1024 ); + mi->nr_banks = 2; + + ROOT_DEV = MKDEV( 60, 2 ); + setup_ramdisk( 1, 0, 0, 8192 ); +// setup_initrd( 0xc0400000, 8*1024*1024 ); +} + +static struct map_desc sherman_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash*/ + LAST_DESC +}; + +static void __init sherman_map_io(void) +{ + sa1100_map_io(); + iotable_init(sherman_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); +} + +MACHINE_START(SHERMAN, "Blazie Engineering Sherman") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_sherman) + MAPIO(sherman_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/simpad.c linux/arch/arm/mach-sa1100/simpad.c --- v2.4.8/linux/arch/arm/mach-sa1100/simpad.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/simpad.c Sun Aug 12 17:36:24 2001 @@ -0,0 +1,79 @@ +/* + * linux/arch/arm/mach-sa1100/simpad.c + * + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + +void init_simpad_cs3() +{ + cs3_shadow =(DISPLAY_ON | RS232_ON | PCMCIA_BUFF_DIS | RESET_SIMCARD); + printk("\nCall CS3 init:%x\n",cs3_shadow); + *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; + cs3_shadow =(DISPLAY_ON| RS232_ON |RESET_SIMCARD); +} + +void PCMCIA_setbit(int value) +{ + cs3_shadow |= value; +} + +void PCMCIA_clearbit(int value) +{ + cs3_shadow &= ~value; +} + +static void __init +fixup_simpad(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ +#ifdef CONFIG_SA1100_SIMPAD_64MB + SET_BANK( 0, 0xc0000000, 64*1024*1024 ); +#else + SET_BANK( 0, 0xc0000000, 32*1024*1024 ); +#endif + mi->nr_banks = 1; + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 8192 ); + setup_initrd( __phys_to_virt(0xc0800000), 8*1024*1024 ); +} + + +static struct map_desc simpad_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0, neccessary for mtd */ + { 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* MQ200 */ + { 0xf1000000, 0x18000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Paules CS3, write only */ + LAST_DESC +}; + +static void __init simpad_map_io(void) +{ + sa1100_map_io(); + iotable_init(simpad_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); +} + + +MACHINE_START(SIMPAD, "Simpad") + MAINTAINER("Juergen Messerer") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_simpad) + MAPIO(simpad_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/victor.c linux/arch/arm/mach-sa1100/victor.c --- v2.4.8/linux/arch/arm/mach-sa1100/victor.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/victor.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,80 @@ +/* + * linux/arch/arm/mach-sa1100/victor.c + * + * Author: Nicolas Pitre + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static void victor_power_off(void) +{ + /* switch off power supply */ + mdelay(2000); + GPCR = GPIO_GPIO23; + while (1); +} + +static int __init victor_init(void) +{ + pm_power_off = victor_power_off; + return 0; +} + +__initcall(victor_init); + + +static void __init +fixup_victor(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 4*1024*1024 ); + mi->nr_banks = 1; + + ROOT_DEV = MKDEV( 60, 2 ); + + /* Get command line parameters passed from the loader (if any) */ + if( *((char*)0xc0000000) ) + strcpy( *cmdline, ((char *)0xc0000000) ); + + /* power off if any problem */ + strcat( *cmdline, " panic=1" ); +} + +static struct map_desc victor_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x00200000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash */ + LAST_DESC +}; + +static void __init victor_map_io(void) +{ + sa1100_map_io(); + iotable_init(victor_io_desc); + + sa1100_register_uart(0, 3); +} + +MACHINE_START(VICTOR, "VisuAide Victor") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_victor) + MAPIO(victor_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/xp860.c linux/arch/arm/mach-sa1100/xp860.c --- v2.4.8/linux/arch/arm/mach-sa1100/xp860.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/xp860.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,71 @@ +/* + * linux/arch/arm/mach-sa1100/xp860.c + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" +#include "sa1111.h" + + +static void xp860_power_off(void) +{ + GPDR |= GPIO_GPIO20; + GPSR = GPIO_GPIO20; + mdelay(1000); + GPCR = GPIO_GPIO20; + while(1); +} + +static int __init xp860_init(void) +{ + pm_power_off = xp860_power_off; + sa1111_init(); + return 0; +} + +__initcall(xp860_init); + + +static void __init +fixup_xp860(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + SET_BANK( 0, 0xc0000000, 32*1024*1024 ); + mi->nr_banks = 1; +} + +static struct map_desc xp860_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xf0000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* SCSI */ + { 0xf1000000, 0x18000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* LAN */ + { 0xf4000000, 0x40000000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* SA-1111 */ + LAST_DESC +}; + +static void __init xp860_map_io(void) +{ + sa1100_map_io(); + iotable_init(xp860_io_desc); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); +} + +MACHINE_START(XP860, "XP860") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + FIXUP(fixup_xp860) + MAPIO(xp860_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-sa1100/yopy.c linux/arch/arm/mach-sa1100/yopy.c --- v2.4.8/linux/arch/arm/mach-sa1100/yopy.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/yopy.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,94 @@ +/* + * linux/arch/arm/mach-sa1100/yopy.c + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "generic.h" + + +static spinlock_t egpio_lock = SPIN_LOCK_UNLOCKED; + +static unsigned long yopy_egpio = + GPIO_MASK(GPIO_CF_RESET) | + GPIO_MASK(GPIO_CLKDIV_CLR1) | GPIO_MASK(GPIO_CLKDIV_CLR2) | + GPIO_MASK(GPIO_SPEAKER_MUTE) | GPIO_MASK(GPIO_AUDIO_OPAMP_POWER); + +int yopy_gpio_test(unsigned int gpio) +{ + return ((yopy_egpio & (1 << gpio)) != 0); +} + +void yopy_gpio_set(unsigned int gpio, int level) +{ + unsigned long flags, mask; + + mask = 1 << gpio; + + spin_lock_irqsave(&egpio_lock, flags); + + if (level) + yopy_egpio |= mask; + else + yopy_egpio &= ~mask; + YOPY_EGPIO = yopy_egpio; + + spin_unlock_irqrestore(&egpio_lock, flags); +} + +EXPORT_SYMBOL(yopy_gpio_test); +EXPORT_SYMBOL(yopy_gpio_set); + +static int __init yopy_hw_init(void) +{ + YOPY_EGPIO = yopy_egpio; + + /* Enable Output */ + PPDR |= PPC_L_BIAS; + PSDR &= ~PPC_L_BIAS; + PPSR |= PPC_L_BIAS; + + YOPY_EGPIO = yopy_egpio; + + return 0; +} + +__initcall(yopy_hw_init); + + +static struct map_desc yopy_io_desc[] __initdata = { + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x04000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash 0 */ + { 0xec000000, 0x08000000, 0x04000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash 1 */ + { 0xf0000000, 0x48000000, 0x00300000, DOMAIN_IO, 1, 1, 0, 0 }, /* LCD */ + { 0xf1000000, 0x10000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* EGPIO */ + LAST_DESC +}; + +static void __init yopy_map_io(void) +{ + sa1100_map_io(); + iotable_init(yopy_io_desc); + + sa1100_register_uart(0, 3); +} + + +MACHINE_START(YOPY, "Yopy") + MAINTAINER("G.Mate, Inc.") + BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) + BOOT_PARAMS(0xc0000100) + MAPIO(yopy_map_io) + INITIRQ(sa1100_init_irq) +MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mach-shark/arch.c linux/arch/arm/mach-shark/arch.c --- v2.4.8/linux/arch/arm/mach-shark/arch.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-shark/arch.c Sun Aug 12 11:13:59 2001 @@ -1,10 +1,7 @@ /* * linux/arch/arm/mach-shark/arch.c * - * Architecture specific fixups. This is where any - * parameters in the params struct are fixed up, or - * any additional architecture specific information - * is pulled from the params struct. + * Architecture specific stuff. */ #include #include @@ -18,23 +15,6 @@ #include -static void __init -fixup_shark(struct machine_desc *desc, struct param_struct *params, - char **cmdline, struct meminfo *mi) { - int i; - - mi->nr_banks=0; - for (i=0;iu1.s.pages_in_bank[i] != 0) { - mi->nr_banks++; - mi->bank[i].node = 0; - mi->bank[i].start = params->u1.s.pages_in_bank[i] & 0xffff0000; - mi->bank[i].size = (params->u1.s.pages_in_bank[i] & 0xffff)*PAGE_SIZE; - params->u1.s.pages_in_bank[i] &= 0xffff; - } - } -} - extern void shark_map_io(void); extern void genarch_init_irq(void); @@ -42,7 +22,6 @@ MAINTAINER("Alexander Schulz") BOOT_MEM(0x08000000, 0x40000000, 0xe0000000) BOOT_PARAMS(0x08003000) - FIXUP(fixup_shark) MAPIO(shark_map_io) INITIRQ(genarch_init_irq) MACHINE_END diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/Makefile linux/arch/arm/mm/Makefile --- v2.4.8/linux/arch/arm/mm/Makefile Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mm/Makefile Sun Aug 12 11:13:59 2001 @@ -17,7 +17,7 @@ obj-m := obj-n := obj- := -export-objs := proc-syms.o +export-objs := proc-syms.o discontig.o cpu32-y := consistent.o fault-armv.o ioremap.o mm-armv.o cpu32-$(CONFIG_MODULES) += proc-syms.o @@ -34,7 +34,7 @@ p-$(CONFIG_CPU_ARM710) += proc-arm6,7.o p-$(CONFIG_CPU_ARM720T) += proc-arm720.o p-$(CONFIG_CPU_ARM920T) += proc-arm920.o -p-$(CONFIG_CPU_ARM10) += proc-arm10.o +p-$(CONFIG_CPU_ARM1020) += proc-arm1020.o p-$(CONFIG_CPU_SA110) += proc-sa110.o p-$(CONFIG_CPU_SA1100) += proc-sa110.o diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/discontig.c linux/arch/arm/mm/discontig.c --- v2.4.8/linux/arch/arm/mm/discontig.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mm/discontig.c Sun Aug 12 11:13:59 2001 @@ -0,0 +1,36 @@ +/* + * linux/arch/arm/mm/discontig.c + * + * Discontiguous memory support. + * + * Initial code: Copyright (C) 1999-2000 Nicolas Pitre + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include + +#if NR_NODES != 4 +#error Fix Me Please +#endif + +/* + * Our node_data structure for discontigous memory. + */ + +static bootmem_data_t node_bootmem_data[NR_NODES]; + +pg_data_t discontig_node_data[NR_NODES] = { + { bdata: &node_bootmem_data[0] }, + { bdata: &node_bootmem_data[1] }, + { bdata: &node_bootmem_data[2] }, + { bdata: &node_bootmem_data[3] } +}; + +EXPORT_SYMBOL(discontig_node_data); + diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/fault-armv.c linux/arch/arm/mm/fault-armv.c --- v2.4.8/linux/arch/arm/mm/fault-armv.c Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/mm/fault-armv.c Sun Aug 12 17:36:24 2001 @@ -540,6 +540,21 @@ return 0; } +/* + * Hook for things that need to trap external faults. Note that + * we don't guarantee that this will be the final version of the + * interface. + */ +int (*external_fault)(unsigned long addr, struct pt_regs *regs); + +static int +do_external_fault(unsigned long addr, int error_code, struct pt_regs *regs) +{ + if (external_fault) + return external_fault(addr, regs); + return 1; +} + static const struct fsr_info { int (*fn)(unsigned long addr, int error_code, struct pt_regs *regs); int sig; @@ -549,13 +564,13 @@ { do_alignment, SIGILL, "alignment exception" }, { NULL, SIGKILL, "terminal exception" }, { do_alignment, SIGILL, "alignment exception" }, - { NULL, SIGBUS, "external abort on linefetch" }, + { do_external_fault, SIGBUS, "external abort on linefetch" }, { do_translation_fault, SIGSEGV, "section translation fault" }, - { NULL, SIGBUS, "external abort on linefetch" }, + { do_external_fault, SIGBUS, "external abort on linefetch" }, { do_page_fault, SIGSEGV, "page translation fault" }, - { NULL, SIGBUS, "external abort on non-linefetch" }, + { do_external_fault, SIGBUS, "external abort on non-linefetch" }, { NULL, SIGSEGV, "section domain fault" }, - { NULL, SIGBUS, "external abort on non-linefetch" }, + { do_external_fault, SIGBUS, "external abort on non-linefetch" }, { NULL, SIGSEGV, "page domain fault" }, { NULL, SIGBUS, "external abort on translation" }, { do_sect_fault, SIGSEGV, "section permission fault" }, @@ -571,14 +586,10 @@ { const struct fsr_info *inf = fsr_info + (fsr & 15); -#if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100) +#if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100) || defined(CONFIG_DEBUG_ERRORS) if (addr == regs->ARM_pc) goto sa1_weirdness; #endif -#if defined(CONFIG_CPU_ARM720) && defined(CONFIG_ALIGNMENT_TRAP) - if (addr & 3 && (fsr & 13) != 1) - goto arm720_weirdness; -#endif if (!inf->fn) goto bad; @@ -593,12 +604,16 @@ die_if_kernel("Oops", regs, 0); return; -#if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100) +#if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100) || defined(CONFIG_DEBUG_ERRORS) sa1_weirdness: if (user_mode(regs)) { static int first = 1; - if (first) - printk(KERN_DEBUG "Weird data abort detected\n"); + if (first) { + printk(KERN_DEBUG "Fixing up bad data abort at %08lx\n", addr); +#ifdef CONFIG_DEBUG_ERRORS + show_pte(current->mm, addr); +#endif + } first = 0; return; } @@ -607,37 +622,128 @@ goto bad; return; #endif -#if defined(CONFIG_CPU_ARM720) && defined(CONFIG_ALIGNMENT_TRAP) -arm720_weirdness: - if (!user_mode(regs)) { - unsigned long instr; - - instr = *(unsigned long *)instruction_pointer(regs); - - if ((instr & 0x04400000) != 0x04400000) { - static int first = 1; - if (first) - printk("Mis-reported alignment fault at " - "0x%08lx, fsr 0x%02x, code 0x%02x, " - "PC = 0x%08lx, instr = 0x%08lx\n", - addr, fsr, error_code, regs->ARM_pc, - instr); - first = 0; - cpu_tlb_invalidate_all(); - cpu_cache_clean_invalidate_all(); - return; - } +} + +asmlinkage void +do_PrefetchAbort(unsigned long addr, struct pt_regs *regs) +{ + do_translation_fault(addr, 0, regs); +} + +/* + * We take the easy way out of this problem - we make the + * PTE uncacheable. However, we leave the write buffer on. + */ +static void adjust_pte(struct vm_area_struct *vma, unsigned long address) +{ + pgd_t *pgd; + pmd_t *pmd; + pte_t *pte, entry; + + pgd = pgd_offset(vma->vm_mm, address); + if (pgd_none(*pgd)) + return; + if (pgd_bad(*pgd)) + goto bad_pgd; + + pmd = pmd_offset(pgd, address); + if (pmd_none(*pmd)) + return; + if (pmd_bad(*pmd)) + goto bad_pmd; + + pte = pte_offset(pmd, address); + entry = *pte; + + /* + * If this page isn't present, or is already setup to + * fault (ie, is old), we can safely ignore any issues. + */ + if (pte_present(entry) && pte_val(entry) & L_PTE_CACHEABLE) { + flush_cache_page(vma, address); + pte_val(entry) &= ~L_PTE_CACHEABLE; + set_pte(pte, entry); + flush_tlb_page(vma, address); } + return; - if (!inf->fn || inf->fn(addr, error_code, regs)) - goto bad; +bad_pgd: + pgd_ERROR(*pgd); + pgd_clear(pgd); + return; + +bad_pmd: + pmd_ERROR(*pmd); + pmd_clear(pmd); return; -#endif } -asmlinkage int -do_PrefetchAbort(unsigned long addr, struct pt_regs *regs) +/* + * Take care of architecture specific things when placing a new PTE into + * a page table, or changing an existing PTE. Basically, there are two + * things that we need to take care of: + * + * 1. If PG_dcache_dirty is set for the page, we need to ensure + * that any cache entries for the kernels virtual memory + * range are written back to the page. + * 2. If we have multiple shared mappings of the same space in + * an object, we need to deal with the cache aliasing issues. + * + * Note that the page_table_lock will be held. + */ +void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte) { - do_translation_fault(addr, 0, regs); - return 1; + struct page *page = pte_page(pte); + struct vm_area_struct *mpnt; + struct mm_struct *mm; + unsigned long pgoff; + int aliases; + + if (!VALID_PAGE(page) || !page->mapping) + return; + + if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) { + unsigned long kvirt = (unsigned long)page_address(page); + cpu_cache_clean_invalidate_range(kvirt, kvirt + PAGE_SIZE, 0); + } + + mm = vma->vm_mm; + pgoff = (addr - vma->vm_start) >> PAGE_SHIFT; + aliases = 0; + + /* + * If we have any shared mappings that are in the same mm + * space, then we need to handle them specially to maintain + * cache coherency. + */ + for (mpnt = page->mapping->i_mmap_shared; mpnt; + mpnt = mpnt->vm_next_share) { + unsigned long off; + + /* + * If this VMA is not in our MM, we can ignore it. + * Note that we intentionally don't mask out the VMA + * that we are fixing up. + */ + if (mpnt->vm_mm != mm && mpnt != vma) + continue; + + /* + * If the page isn't in this VMA, we can also ignore it. + */ + if (pgoff < mpnt->vm_pgoff) + continue; + + off = pgoff - mpnt->vm_pgoff; + if (off >= (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT) + continue; + + /* + * Ok, it is within mpnt. Fix it up. + */ + adjust_pte(mpnt, mpnt->vm_start + (off << PAGE_SHIFT)); + aliases ++; + } + if (aliases) + adjust_pte(vma, addr); } diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/fault-common.c linux/arch/arm/mm/fault-common.c --- v2.4.8/linux/arch/arm/mm/fault-common.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mm/fault-common.c Sun Aug 12 11:13:59 2001 @@ -108,7 +108,7 @@ if ((fixup = search_exception_table(instruction_pointer(regs))) != 0) { #ifdef DEBUG printk(KERN_DEBUG "%s: Exception at [<%lx>] addr=%lx (fixup: %lx)\n", - tsk->comm, regs->ARM_pc, addr, fixup); + current->comm, regs->ARM_pc, addr, fixup); #endif regs->ARM_pc = fixup; return; diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/init.c linux/arch/arm/mm/init.c --- v2.4.8/linux/arch/arm/mm/init.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mm/init.c Sun Aug 12 11:13:59 2001 @@ -376,7 +376,14 @@ if (machine_is_archimedes() || machine_is_a5k()) reserve_bootmem_node(pgdat, 0x02000000, 0x00080000); if (machine_is_p720t()) - reserve_bootmem_node(pgdat, PAGE_OFFSET, 0x00014000); + reserve_bootmem_node(pgdat, PHYS_OFFSET, 0x00014000); +#ifdef CONFIG_SA1111 + /* + * Because of the SA1111 DMA bug, we want to preserve + * our precious DMA-able memory... + */ + reserve_bootmem_node(pgdat, PHYS_OFFSET, __pa(swapper_pg_dir)-PHYS_OFFSET); +#endif } /* @@ -532,6 +539,12 @@ zhole_size[0] -= mi->bank[i].size >> PAGE_SHIFT; } + /* + * Adjust the sizes according to any special + * requirements for this machine type. + */ + arch_adjust_zones(node, zone_size, zhole_size); + free_area_init_node(node, pgdat, 0, zone_size, bdata->node_boot_start, zhole_size); } @@ -542,6 +555,23 @@ */ memzero(zero_page, PAGE_SIZE); empty_zero_page = virt_to_page(zero_page); + flush_dcache_page(empty_zero_page); +} + +static inline void free_area(unsigned long addr, unsigned long end, char *s) +{ + unsigned int size = (end - addr) >> 10; + + for (; addr < end; addr += PAGE_SIZE) { + struct page *page = virt_to_page(addr); + ClearPageReserved(page); + set_page_count(page, 1); + free_page(addr); + totalram_pages++; + } + + if (size && s) + printk("Freeing %s memory: %dK\n", s, size); } /* @@ -571,6 +601,11 @@ for (node = 0; node < numnodes; node++) totalram_pages += free_all_bootmem_node(NODE_DATA(node)); +#ifdef CONFIG_SA1111 + /* now that our DMA memory is actually so designated, we can free it */ + free_area(PAGE_OFFSET, (unsigned long)swapper_pg_dir, NULL); +#endif + /* * Since our memory may not be contiguous, calculate the * real number of pages we have in this system @@ -598,22 +633,6 @@ */ sysctl_overcommit_memory = 1; } -} - -static inline void free_area(unsigned long addr, unsigned long end, char *s) -{ - unsigned int size = (end - addr) >> 10; - - for (; addr < end; addr += PAGE_SIZE) { - struct page *page = virt_to_page(addr); - ClearPageReserved(page); - set_page_count(page, 1); - free_page(addr); - totalram_pages++; - } - - if (size) - printk("Freeing %s memory: %dK\n", s, size); } void free_initmem(void) diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/mm-sa1100.c linux/arch/arm/mm/mm-sa1100.c --- v2.4.8/linux/arch/arm/mm/mm-sa1100.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mm/mm-sa1100.c Wed Dec 31 16:00:00 1969 @@ -1,189 +0,0 @@ -/* - * linux/arch/arm/mm/mm-sa1100.c - * - * Copyright (C) 1998-1999 Russell King - * Copyright (C) 1999 Hugo Fiennes - * - * Extra MM routines for the SA1100 architecture - * - * 1999/12/04 Nicolas Pitre - * Converted memory definition for struct meminfo initialisations. - * Memory is listed physically now. - * - * 2000/04/07 Nicolas Pitre - * Reworked for run-time selection of memory definitions - * - */ -#include -#include -#include - -#include -#include -#include -#include - -#include - -static struct map_desc standard_io_desc[] __initdata = { - /* virtual physical length domain r w c b */ \ - { 0xf6000000, 0x20000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* PCMCIA0 IO */ - { 0xf7000000, 0x30000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* PCMCIA1 IO */ - { 0xf8000000, 0x80000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 }, /* PCM */ - { 0xfa000000, 0x90000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 }, /* SCM */ - { 0xfc000000, 0xa0000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 }, /* MER */ - { 0xfe000000, 0xb0000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 }, /* LCD + DMA */ - LAST_DESC -}; - -/* - * Typically, static virtual address mappings are as follow: - * - * 0xe8000000-0xefffffff: flash memory (especially when multiple flash - * banks need to be mapped contigously) - * 0xf0000000-0xf3ffffff: miscellaneous stuff (CPLDs, etc.) - * 0xf4000000-0xf4ffffff: SA-1111 - * 0xf5000000-0xf5ffffff: reserved (used by cache flushing area) - * 0xf6000000-0xffffffff: reserved (internal SA1100 IO defined above) - * - * Below 0xe8000000 is reserved for vm allocation. - */ - -static struct map_desc assabet_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_ASSABET - { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ - { 0xf0000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* System Registers */ - { 0xf1000000, 0x12000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Board Control Register */ - { 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* MQ200 */ - { 0xf4000000, 0x40000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* SA-1111 */ -#endif - LAST_DESC -}; - -static struct map_desc bitsy_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_BITSY - { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ - { 0xf0000000, 0x49000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* EGPIO 0 */ -#endif - LAST_DESC -}; - -static struct map_desc cerf_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_CERF - { 0xe8000000, 0x00000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ - { 0xf0000000, 0x08000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Crystal Chip */ -#endif - LAST_DESC -}; - -static struct map_desc empeg_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_EMPEG - { EMPEG_FLASHBASE, 0x00000000, 0x00200000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash */ -#endif - LAST_DESC -}; - -static struct map_desc graphicsclient_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_GRAPHICSCLIENT - { 0xe8000000, 0x08000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 1 */ - { 0xf0000000, 0x10000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, /* CPLD */ -#endif - LAST_DESC -}; - -static struct map_desc lart_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_LART - { 0xe8000000, 0x00000000, 0x00400000, DOMAIN_IO, 1, 1, 0, 0 }, /* main flash memory */ - { 0xec000000, 0x08000000, 0x00400000, DOMAIN_IO, 1, 1, 0, 0 }, /* main flash, alternative location */ -#endif - LAST_DESC -}; - -static struct map_desc nanoengine_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_NANOENGINE - { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ - { 0xf0000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* System Registers */ - { 0xf1000000, 0x18A00000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Internal PCI Config Space */ -#endif - LAST_DESC -}; - -static struct map_desc sherman_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_SHERMAN - { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash*/ -#endif - LAST_DESC -}; - -static struct map_desc victor_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_VICTOR - { 0xe8000000, 0x00000000, 0x00200000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash */ -#endif - LAST_DESC -}; - -static struct map_desc xp860_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_XP860 - { 0xf0000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* SCSI */ - { 0xf1000000, 0x18000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* LAN */ - { 0xf4000000, 0x40000000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* SA-1111 */ -#endif - LAST_DESC -}; - -static struct map_desc pangolin_io_desc[] __initdata = { -#ifdef CONFIG_SA1100_PANGOLIN - { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ -#endif - LAST_DESC -}; - -void __init sa1100_map_io(void) -{ - struct map_desc *desc = NULL; - - iotable_init(standard_io_desc); - - if (machine_is_assabet()) - desc = assabet_io_desc; - else if (machine_is_bitsy()) - desc = bitsy_io_desc; - else if (machine_is_cerf()) - desc = cerf_io_desc; - else if (machine_is_empeg()) - desc = empeg_io_desc; - else if (machine_is_graphicsclient()) - desc = graphicsclient_io_desc; - else if (machine_is_lart()) - desc = lart_io_desc; - else if (machine_is_nanoengine()) - desc = nanoengine_io_desc; - else if (machine_is_sherman()) - desc = sherman_io_desc; - else if (machine_is_victor()) - desc = victor_io_desc; - else if (machine_is_xp860()) - desc = xp860_io_desc; - else if (machine_is_pangolin()) - desc = pangolin_io_desc; - - if (desc) - iotable_init(desc); -} - -/* - * On Assabet, we must probe for the Neponset board *before* paging_init() - * has occurred to actually determine the amount of RAM available. To do so, - * we map the appropriate IO section in the page table here in order to - * access GPIO registers. - */ -void __init map_sa1100_gpio_regs( void ) -{ - unsigned long phys = _GPLR & PMD_MASK; - unsigned long virt = io_p2v(phys); - int prot = PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_DOMAIN(DOMAIN_IO); - pmd_t pmd; - pmd_val(pmd) = phys | prot; - set_pmd(pmd_offset(pgd_offset_k(virt), virt), pmd); -} - diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/proc-arm6,7.S linux/arch/arm/mm/proc-arm6,7.S --- v2.4.8/linux/arch/arm/mm/proc-arm6,7.S Tue Mar 6 19:44:35 2001 +++ linux/arch/arm/mm/proc-arm6,7.S Sun Aug 12 11:13:59 2001 @@ -162,7 +162,7 @@ mov r1, r4 mov r2, r3 bl baddataabort - b ret_from_sys_call + b ret_from_exception Ldata_lateldrpreconst: tst r4, #1 << 21 @ check writeback bit @@ -361,28 +361,24 @@ .section ".text.init", #alloc, #execinstr -__arm6_setup: mov r0, #F_BIT | I_BIT | SVC_MODE - msr cpsr_c, r0 - mov r0, #0 +__arm6_setup: mov r0, #0 mcr p15, 0, r0, c7, c0 @ flush caches on v3 mcr p15, 0, r0, c5, c0 @ flush TLBs on v3 mcr p15, 0, r4, c2, c0 @ load page table pointer mov r0, #0x1f @ Domains 0, 1 = client mcr p15, 0, r0, c3, c0 @ load domain access register - mov r0, #0x3d @ ....S..DPWC.M - orr r0, r0, #0x100 + mov r0, #0x3d @ . ..RS BLDP WCAM + orr r0, r0, #0x100 @ . ..01 0011 1101 mov pc, lr -__arm7_setup: mov r0, #F_BIT | I_BIT | SVC_MODE - msr cpsr_c, r0 - mov r0, #0 +__arm7_setup: mov r0, #0 mcr p15, 0, r0, c7, c0 @ flush caches on v3 mcr p15, 0, r0, c5, c0 @ flush TLBs on v3 mcr p15, 0, r4, c2, c0 @ load page table pointer mov r0, #0x1f @ Domains 0, 1 = client mcr p15, 0, r0, c3, c0 @ load domain access register - mov r0, #0x7d @ ....S.LDPWC.M - orr r0, r0, #0x100 + mov r0, #0x7d @ . ..RS BLDP WCAM + orr r0, r0, #0x100 @ . ..01 0111 1101 mov pc, lr /* diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/proc-arm720.S linux/arch/arm/mm/proc-arm720.S --- v2.4.8/linux/arch/arm/mm/proc-arm720.S Tue Mar 6 19:44:35 2001 +++ linux/arch/arm/mm/proc-arm720.S Sun Aug 12 11:13:59 2001 @@ -171,7 +171,7 @@ mov r1, r4 mov r2, r3 bl baddataabort - b ret_from_sys_call + b ret_from_exception Ldata_lateldrhpre: tst r4, #1 << 21 @ check writeback bit @@ -377,11 +377,9 @@ mcr p15, 0, r0, c3, c0 @ load domain access register mrc p15, 0, r0, c1, c0 @ get control register - bic r0, r0, #0x2e00 - bic r0, r0, #0x000e - orr r0, r0, #0x0031 @ ..V...RSBLDPWCAM - orr r0, r0, #0x0100 @ .........111.... (old) - orr r0, r0, #0x000c @ ..0...01..111101 (new) + bic r0, r0, #0x0e00 @ ..V. ..RS BLDP WCAM + orr r0, r0, #0x2100 @ .... .... .111 .... (old) + orr r0, r0, #0x003d @ ..1. ..01 ..11 1101 (new) mov pc, lr @ __ret (head-armv.S) /* diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/proc-arm920.S linux/arch/arm/mm/proc-arm920.S --- v2.4.8/linux/arch/arm/mm/proc-arm920.S Tue Mar 6 19:44:35 2001 +++ linux/arch/arm/mm/proc-arm920.S Sun Aug 12 11:13:59 2001 @@ -510,21 +510,22 @@ /* * Clear out 'unwanted' bits (then put them in if we need them) */ - bic r0, r0, #0x0e00 @ ....??r......... - bic r0, r0, #0x0002 @ ..............a. - bic r0, r0, #0x000c @ W,D - bic r0, r0, #0x1000 @ I + @ VI ZFRS BLDP WCAM + bic r0, r0, #0x0e00 + bic r0, r0, #0x0002 + bic r0, r0, #0x000c + bic r0, r0, #0x1000 @ ...0 000. .... 000. /* * Turn on what we want */ - orr r0, r0, #0x0031 @ ..........DP...M - orr r0, r0, #0x0100 @ .......S........ + orr r0, r0, #0x0031 + orr r0, r0, #0x2100 @ ..1. ...1 ..11 ...1 #ifdef CONFIG_CPU_ARM920_D_CACHE_ON - orr r0, r0, #0x0004 @ Enable D cache + orr r0, r0, #0x0004 @ .... .... .... .1.. #endif #ifdef CONFIG_CPU_ARM920_I_CACHE_ON - orr r0, r0, #0x1000 @ I Cache on + orr r0, r0, #0x1000 @ ...1 .... .... .... #endif mov pc, lr diff -u --recursive --new-file v2.4.8/linux/arch/arm/mm/proc-sa110.S linux/arch/arm/mm/proc-sa110.S --- v2.4.8/linux/arch/arm/mm/proc-sa110.S Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mm/proc-sa110.S Sun Aug 12 11:13:59 2001 @@ -601,22 +601,27 @@ __sa1100_setup: @ Allow read-buffer operations from userland mcr p15, 0, r0, c9, c0, 5 + mrc p15, 0, r0, c1, c0 @ get control register v4 + bic r0, r0, #0x0e00 @ ..VI ZFRS BLDP WCAM + bic r0, r0, #0x0002 @ .... 000. .... ..0. + orr r0, r0, #0x003d + orr r0, r0, #0x3100 @ ..11 ...1 ..11 11.1 + b __setup_common __sa110_setup: - mov r0, #F_BIT | I_BIT | SVC_MODE - msr cpsr_c, r0 - mov r0, #0 - mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 - mcr p15, 0, r0, c7, c10, 4 @ drain write buffer on v4 - mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4 - mcr p15, 0, r4, c2, c0 @ load page table pointer - mov r0, #0x1f @ Domains 0, 1 = client - mcr p15, 0, r0, c3, c0 @ load domain access register mrc p15, 0, r0, c1, c0 @ get control register v4 - bic r0, r0, #0x0e00 @ ....??r......... - bic r0, r0, #0x0002 @ ..............a. - orr r0, r0, #0x003d @ ..........DPWC.M - orr r0, r0, #0x1100 @ ...I...S........ + bic r0, r0, #0x2e00 @ ..VI ZFRS BLDP WCAM + bic r0, r0, #0x0002 @ ..0. 000. .... ..0. + orr r0, r0, #0x003d + orr r0, r0, #0x1100 @ ...1 ...1 ..11 11.1 +__setup_common: + mov r10, #0 + mcr p15, 0, r10, c7, c7 @ invalidate I,D caches on v4 + mcr p15, 0, r10, c7, c10, 4 @ drain write buffer on v4 + mcr p15, 0, r10, c8, c7 @ invalidate I,D TLBs on v4 + mcr p15, 0, r4, c2, c0 @ load page table pointer + mov r10, #0x1f @ Domains 0, 1 = client + mcr p15, 0, r10, c3, c0 @ load domain access register mov pc, lr .text diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/double_cpdo.c linux/arch/arm/nwfpe/double_cpdo.c --- v2.4.8/linux/arch/arm/nwfpe/double_cpdo.c Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/double_cpdo.c Sun Aug 12 11:13:59 2001 @@ -37,6 +37,7 @@ unsigned int DoubleCPDO(const unsigned int opcode) { + FPA11 *fpa11 = GET_FPA11(); float64 rFm, rFn; unsigned int Fd, Fm, Fn, nRc = 1; diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/entry.S linux/arch/arm/nwfpe/entry.S --- v2.4.8/linux/arch/arm/nwfpe/entry.S Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/entry.S Sun Aug 12 11:13:59 2001 @@ -77,10 +77,7 @@ emulation. This would reduce load/store overhead at the expense of stealing two regs from the register allocator. Not sure if it's worth it. */ - ldr r4, =userRegisters - str sp, [r4] @ save pointer to user regs - ldr r4, =fpa11 - str r10, [r4] @ store pointer to our state + str sp, [r10] @ Store the user registers pointer in the fpa11 structure. mov r4, sp @ use r4 for local pointer mov r10, lr @ save the failure-return addresses diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/extended_cpdo.c linux/arch/arm/nwfpe/extended_cpdo.c --- v2.4.8/linux/arch/arm/nwfpe/extended_cpdo.c Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/extended_cpdo.c Sun Aug 12 11:13:59 2001 @@ -37,6 +37,7 @@ unsigned int ExtendedCPDO(const unsigned int opcode) { + FPA11 *fpa11 = GET_FPA11(); floatx80 rFm, rFn; unsigned int Fd, Fm, Fn, nRc = 1; diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/fpa11.c linux/arch/arm/nwfpe/fpa11.c --- v2.4.8/linux/arch/arm/nwfpe/fpa11.c Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/fpa11.c Sun Aug 12 11:13:59 2001 @@ -32,14 +32,12 @@ unsigned int EmulateCPDT(const unsigned int); unsigned int EmulateCPRT(const unsigned int); -/* Emulator registers */ -FPA11 *fpa11; - /* Reset the FPA11 chip. Called to initialize and reset the emulator. */ void resetFPA11(void) { int i; - + FPA11 *fpa11 = GET_FPA11(); + /* initialize the register type array */ for (i=0;i<=7;i++) { @@ -130,8 +128,10 @@ { unsigned int nRc = 0; unsigned long flags; - + FPA11 *fpa11; save_flags(flags); sti(); + + fpa11 = GET_FPA11(); if (fpa11->initflag == 0) /* good place for __builtin_expect */ { diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/fpa11.h linux/arch/arm/nwfpe/fpa11.h --- v2.4.8/linux/arch/arm/nwfpe/fpa11.h Wed Oct 20 16:29:08 1999 +++ linux/arch/arm/nwfpe/fpa11.h Sun Aug 12 11:13:59 2001 @@ -26,6 +26,9 @@ #include "fpsr.h" /* FP control and status register definitions */ #include "softfloat.h" +/* Need task_struct */ +#include + #define typeNone 0x00 #define typeSingle 0x01 #define typeDouble 0x02 @@ -39,6 +42,7 @@ /* FPA11 device model */ typedef struct tagFPA11 { + unsigned int *userRegisters; FPREG fpreg[8]; /* 8 floating point registers */ FPSR fpsr; /* floating point status register */ FPCR fpcr; /* floating point control register */ @@ -56,6 +60,7 @@ extern void SetRoundingMode(const unsigned int); extern void SetRoundingPrecision(const unsigned int); -extern FPA11 *fpa11; +#define GET_FPA11() ((FPA11 *)(¤t->thread.fpstate)) +#define GET_USERREG() (GET_FPA11()->userRegisters) #endif diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/fpa11.inl linux/arch/arm/nwfpe/fpa11.inl --- v2.4.8/linux/arch/arm/nwfpe/fpa11.inl Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/fpa11.inl Sun Aug 12 11:13:59 2001 @@ -24,11 +24,13 @@ /* Read and write floating point status register */ extern __inline__ unsigned int readFPSR(void) { + FPA11 *fpa11 = GET_FPA11(); return(fpa11->fpsr); } extern __inline__ void writeFPSR(FPSR reg) { + FPA11 *fpa11 = GET_FPA11(); /* the sysid byte in the status register is readonly */ fpa11->fpsr = (fpa11->fpsr & MASK_SYSID) | (reg & ~MASK_SYSID); } @@ -36,12 +38,14 @@ /* Read and write floating point control register */ extern __inline__ FPCR readFPCR(void) { + FPA11 *fpa11 = GET_FPA11(); /* clear SB, AB and DA bits before returning FPCR */ return(fpa11->fpcr & ~MASK_RFC); } extern __inline__ void writeFPCR(FPCR reg) { + FPA11 *fpa11 = GET_FPA11(); fpa11->fpcr &= ~MASK_WFC; /* clear SB, AB and DA bits */ fpa11->fpcr |= (reg & MASK_WFC); /* write SB, AB and DA bits */ } diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/fpa11_cpdo.c linux/arch/arm/nwfpe/fpa11_cpdo.c --- v2.4.8/linux/arch/arm/nwfpe/fpa11_cpdo.c Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/fpa11_cpdo.c Sun Aug 12 11:13:59 2001 @@ -28,6 +28,7 @@ unsigned int EmulateCPDO(const unsigned int opcode) { + FPA11 *fpa11 = GET_FPA11(); unsigned int Fd, nType, nDest, nRc = 1; //printk("EmulateCPDO(0x%08x)\n",opcode); diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/fpa11_cpdt.c linux/arch/arm/nwfpe/fpa11_cpdt.c --- v2.4.8/linux/arch/arm/nwfpe/fpa11_cpdt.c Mon Nov 27 17:07:59 2000 +++ linux/arch/arm/nwfpe/fpa11_cpdt.c Sun Aug 12 11:13:59 2001 @@ -28,16 +28,18 @@ #include -extern __inline__ +static inline void loadSingle(const unsigned int Fn,const unsigned int *pMem) { + FPA11 *fpa11 = GET_FPA11(); fpa11->fType[Fn] = typeSingle; get_user(fpa11->fpreg[Fn].fSingle, pMem); } -extern __inline__ +static inline void loadDouble(const unsigned int Fn,const unsigned int *pMem) { + FPA11 *fpa11 = GET_FPA11(); unsigned int *p; p = (unsigned int*)&fpa11->fpreg[Fn].fDouble; fpa11->fType[Fn] = typeDouble; @@ -45,9 +47,10 @@ get_user(p[1], &pMem[0]); /* sign & exponent */ } -extern __inline__ +static inline void loadExtended(const unsigned int Fn,const unsigned int *pMem) { + FPA11 *fpa11 = GET_FPA11(); unsigned int *p; p = (unsigned int*)&fpa11->fpreg[Fn].fExtended; fpa11->fType[Fn] = typeExtended; @@ -56,9 +59,10 @@ get_user(p[2], &pMem[1]); /* ms bits */ } -extern __inline__ +static inline void loadMultiple(const unsigned int Fn,const unsigned int *pMem) { + FPA11 *fpa11 = GET_FPA11(); register unsigned int *p; unsigned long x; @@ -87,9 +91,10 @@ } } -extern __inline__ +static inline void storeSingle(const unsigned int Fn,unsigned int *pMem) { + FPA11 *fpa11 = GET_FPA11(); float32 val; register unsigned int *p = (unsigned int*)&val; @@ -109,9 +114,10 @@ put_user(p[0], pMem); } -extern __inline__ +static inline void storeDouble(const unsigned int Fn,unsigned int *pMem) { + FPA11 *fpa11 = GET_FPA11(); float64 val; register unsigned int *p = (unsigned int*)&val; @@ -131,9 +137,10 @@ put_user(p[0], &pMem[1]); /* lsw */ } -extern __inline__ +static inline void storeExtended(const unsigned int Fn,unsigned int *pMem) { + FPA11 *fpa11 = GET_FPA11(); floatx80 val; register unsigned int *p = (unsigned int*)&val; @@ -155,9 +162,10 @@ put_user(p[2], &pMem[1]); /* msw */ } -extern __inline__ +static inline void storeMultiple(const unsigned int Fn,unsigned int *pMem) { + FPA11 *fpa11 = GET_FPA11(); register unsigned int nType, *p; p = (unsigned int*)&(fpa11->fpreg[Fn]); diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/fpa11_cprt.c linux/arch/arm/nwfpe/fpa11_cprt.c --- v2.4.8/linux/arch/arm/nwfpe/fpa11_cprt.c Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/fpa11_cprt.c Sun Aug 12 11:13:59 2001 @@ -78,6 +78,8 @@ unsigned int PerformFLT(const unsigned int opcode) { + FPA11 *fpa11 = GET_FPA11(); + unsigned int nRc = 1; SetRoundingMode(opcode); SetRoundingPrecision(opcode); @@ -116,6 +118,7 @@ unsigned int PerformFIX(const unsigned int opcode) { + FPA11 *fpa11 = GET_FPA11(); unsigned int nRc = 1; unsigned int Fn = getFm(opcode); @@ -182,6 +185,7 @@ static unsigned int PerformComparison(const unsigned int opcode) { + FPA11 *fpa11 = GET_FPA11(); unsigned int Fn, Fm; floatx80 rFn, rFm; int e_flag = opcode & 0x400000; /* 1 if CxFE */ diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/fpmodule.c linux/arch/arm/nwfpe/fpmodule.c --- v2.4.8/linux/arch/arm/nwfpe/fpmodule.c Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/fpmodule.c Sun Aug 12 11:13:59 2001 @@ -39,9 +39,6 @@ #include "fpa11.h" #include "fpa11.inl" -/* external data */ -extern FPA11 *fpa11; - /* kernel symbols required for signal handling */ typedef struct task_struct* PTASK; @@ -71,9 +68,6 @@ /* forward declarations */ extern void nwfpe_enter(void); -/* Address of user registers on the kernel stack. */ -unsigned int *userRegisters; - #ifdef MODULE /* * Return 0 if we can be unloaded. This can only happen if @@ -145,7 +139,7 @@ #ifdef CONFIG_DEBUG_USER printk(KERN_DEBUG "NWFPE: %s[%d] takes exception %08x at %p from %08x\n", current->comm, current->pid, flags, - __builtin_return_address(0), userRegisters[15]); + __builtin_return_address(0), GET_USERREG()[15]); #endif /* Keep SoftFloat exception flags up to date. */ diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/fpmodule.inl linux/arch/arm/nwfpe/fpmodule.inl --- v2.4.8/linux/arch/arm/nwfpe/fpmodule.inl Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/fpmodule.inl Sun Aug 12 11:13:59 2001 @@ -19,9 +19,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* Address of user registers on the kernel stack. */ -extern unsigned int *userRegisters; - extern __inline__ unsigned int readRegister(const unsigned int nReg) { @@ -32,6 +29,7 @@ for this in this routine. LDF/STF instructions with Rn = PC depend on the PC being correct, as they use PC+8 in their address calculations. */ + unsigned int *userRegisters = GET_USERREG(); unsigned int val = userRegisters[nReg]; if (REG_PC == nReg) val -= 4; return val; @@ -40,6 +38,7 @@ extern __inline__ void writeRegister(const unsigned int nReg, const unsigned int val) { + unsigned int *userRegisters = GET_USERREG(); userRegisters[nReg] = val; } @@ -68,6 +67,7 @@ extern __inline__ void writeConditionCodes(const unsigned int val) { + unsigned int *userRegisters = GET_USERREG(); unsigned int rval; /* * Operate directly on userRegisters since diff -u --recursive --new-file v2.4.8/linux/arch/arm/nwfpe/single_cpdo.c linux/arch/arm/nwfpe/single_cpdo.c --- v2.4.8/linux/arch/arm/nwfpe/single_cpdo.c Wed Apr 11 19:02:27 2001 +++ linux/arch/arm/nwfpe/single_cpdo.c Sun Aug 12 11:13:59 2001 @@ -37,6 +37,7 @@ unsigned int SingleCPDO(const unsigned int opcode) { + FPA11 *fpa11 = GET_FPA11(); float32 rFm, rFn; unsigned int Fd, Fm, Fn, nRc = 1; diff -u --recursive --new-file v2.4.8/linux/arch/arm/tools/mach-types linux/arch/arm/tools/mach-types --- v2.4.8/linux/arch/arm/tools/mach-types Wed Jul 25 17:10:17 2001 +++ linux/arch/arm/tools/mach-types Sun Aug 12 17:36:24 2001 @@ -6,7 +6,7 @@ # To add an entry into this database, please see Documentation/arm/README, # or contact rmk@arm.linux.org.uk # -# Last update: Wed Jul 4 20:04:11 2001 +# Last update: Thu Aug 9 22:46:02 2001 # # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number # @@ -103,5 +103,15 @@ cs89712 ARCH_CS89712 CS89712 92 weararm SA1100_WEARARM WEARARM 93 possio_px SA1100_POSSIO_PX POSSIO_PX 94 - -# The following are unallocated +sidearm SA1100_SIDEARM SIDEARM 95 +stork SA1100_STORK STORK 96 +shannon SA1100_SHANNON SHANNON 97 +ace ARCH_ACE ACE 98 +ballyarm SA1100_BALLYARM BALLYARM 99 +simputer SA1100_SIMPUTER SIMPUTER 100 +nexterm SA1100_NEXTERM NEXTERM 101 +sa1100_elf SA1100_SA1100_ELF SA1100_ELF 102 +gator SA1100_GATOR GATOR 103 +granite ARCH_GRANITE GRANITE 104 +consus SA1100_CONSUS CONSUS 105 +aaec2000_aaed20 ARCH_AAEC2000_AAED2000 AAEC2000_AAED2000 106 diff -u --recursive --new-file v2.4.8/linux/arch/arm/vmlinux-armo.lds.in linux/arch/arm/vmlinux-armo.lds.in --- v2.4.8/linux/arch/arm/vmlinux-armo.lds.in Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/vmlinux-armo.lds.in Sun Aug 12 11:13:59 2001 @@ -18,6 +18,9 @@ __arch_info_begin = .; *(.arch.info) __arch_info_end = .; + __tagtable_begin = .; + *(.taglist) + __tagtable_end = .; *(.data.init) . = ALIGN(16); __setup_start = .; diff -u --recursive --new-file v2.4.8/linux/arch/arm/vmlinux-armv.lds.in linux/arch/arm/vmlinux-armv.lds.in --- v2.4.8/linux/arch/arm/vmlinux-armv.lds.in Tue Jul 3 17:08:18 2001 +++ linux/arch/arm/vmlinux-armv.lds.in Sun Aug 12 11:13:59 2001 @@ -17,6 +17,9 @@ __arch_info_begin = .; *(.arch.info) __arch_info_end = .; + __tagtable_begin = .; + *(.taglist) + __tagtable_end = .; *(.data.init) . = ALIGN(16); __setup_start = .; diff -u --recursive --new-file v2.4.8/linux/arch/cris/drivers/usb-host.c linux/arch/cris/drivers/usb-host.c --- v2.4.8/linux/arch/cris/drivers/usb-host.c Wed Jul 25 17:10:17 2001 +++ linux/arch/cris/drivers/usb-host.c Wed Aug 15 01:22:15 2001 @@ -2258,11 +2258,11 @@ case RH_GET_DESCRIPTOR: switch ((wValue & 0xff00) >> 8) { case (0x01): /* device descriptor */ - len = min (leni, min (sizeof (root_hub_dev_des), wLength)); + len = min(unsigned int, leni, min(unsigned int, sizeof (root_hub_dev_des), wLength)); memcpy (data, root_hub_dev_des, len); OK (len); case (0x02): /* configuration descriptor */ - len = min (leni, min (sizeof (root_hub_config_des), wLength)); + len = min(unsigned int, leni, min(unsigned int, sizeof (root_hub_config_des), wLength)); memcpy (data, root_hub_config_des, len); OK (len); case (0x03): /* string descriptors */ @@ -2270,7 +2270,7 @@ 0xff, "ETRAX 100LX", data, wLength); if (len > 0) { - OK (min (leni, len)); + OK(min(int, leni, len)); } else stat = -EPIPE; } @@ -2278,7 +2278,7 @@ case RH_GET_DESCRIPTOR | RH_CLASS: root_hub_hub_des[2] = hc->rh.numports; - len = min (leni, min (sizeof (root_hub_hub_des), wLength)); + len = min(unsigned int, leni, min(unsigned int, sizeof (root_hub_hub_des), wLength)); memcpy (data, root_hub_hub_des, len); OK (len); diff -u --recursive --new-file v2.4.8/linux/arch/cris/drivers/usb-host.h linux/arch/cris/drivers/usb-host.h --- v2.4.8/linux/arch/cris/drivers/usb-host.h Fri Apr 6 10:42:55 2001 +++ linux/arch/cris/drivers/usb-host.h Wed Aug 15 01:22:15 2001 @@ -146,8 +146,6 @@ #define RH_REQ_ERR -1 #define RH_NACK 0x00 -#define min(a,b) (((a)<(b))?(a):(b)) - /* Field definitions for */ #define USB_IN_command__eol__BITNR 0 /* command macros */ diff -u --recursive --new-file v2.4.8/linux/arch/i386/defconfig linux/arch/i386/defconfig --- v2.4.8/linux/arch/i386/defconfig Wed Jul 25 17:10:17 2001 +++ linux/arch/i386/defconfig Mon Aug 13 14:57:35 2001 @@ -218,6 +218,7 @@ CONFIG_BLK_DEV_IDEPCI=y CONFIG_IDEPCI_SHARE_IRQ=y CONFIG_BLK_DEV_IDEDMA_PCI=y +CONFIG_BLK_DEV_ADMA=y # CONFIG_BLK_DEV_OFFBOARD is not set CONFIG_IDEDMA_PCI_AUTO=y CONFIG_BLK_DEV_IDEDMA=y @@ -227,8 +228,8 @@ # CONFIG_AEC62XX_TUNING is not set # CONFIG_BLK_DEV_ALI15X3 is not set # CONFIG_WDC_ALI15X3 is not set -# CONFIG_BLK_DEV_AMD7409 is not set -# CONFIG_AMD7409_OVERRIDE is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_AMD74XX_OVERRIDE is not set # CONFIG_BLK_DEV_CMD64X is not set # CONFIG_BLK_DEV_CY82C693 is not set # CONFIG_BLK_DEV_CS5530 is not set @@ -241,7 +242,8 @@ # CONFIG_BLK_DEV_OPTI621 is not set # CONFIG_BLK_DEV_PDC202XX is not set # CONFIG_PDC202XX_BURST is not set -# CONFIG_BLK_DEV_OSB4 is not set +# CONFIG_PDC202XX_FORCE is not set +# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SLC90E66 is not set # CONFIG_BLK_DEV_TRM290 is not set @@ -655,8 +657,10 @@ # Sound # CONFIG_SOUND=y +# CONFIG_SOUND_BT878 is not set # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set # CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set @@ -665,6 +669,7 @@ # CONFIG_SOUND_MAESTRO is not set # CONFIG_SOUND_MAESTRO3 is not set # CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set diff -u --recursive --new-file v2.4.8/linux/arch/i386/kernel/apm.c linux/arch/i386/kernel/apm.c --- v2.4.8/linux/arch/i386/kernel/apm.c Fri Apr 6 10:42:47 2001 +++ linux/arch/i386/kernel/apm.c Mon Aug 13 16:39:28 2001 @@ -148,6 +148,12 @@ * 1.14: Make connection version persist across module unload/load. * Enable and engage power management earlier. * Disengage power management on module unload. + * Make CONFIG_APM_REAL_MODE_POWER_OFF run time configurable. + * (Arjan van de Ven ) modified by sfr. + * Work around byte swap bug in one of the Vaio's BIOS's + * (Marc Boucher ). + * Exposed the disable flag to dmi so that we can handle known + * broken APM (Alan Cox ). * * APM 1.1 Reference: * @@ -339,14 +345,25 @@ static int got_clock_diff; #endif static int debug; -static int apm_disabled; +static int apm_disabled = -1; #ifdef CONFIG_SMP static int power_off; #else static int power_off = 1; #endif +#ifdef CONFIG_APM_REAL_MODE_POWER_OFF +static int realmode_power_off = 1; +#else +static int realmode_power_off; +#endif static int exit_kapmd; static int kapmd_running; +#ifdef CONFIG_APM_ALLOW_INTS +static int allow_ints = 1; +#else +static int allow_ints; +#endif +static int broken_psr; static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue); static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue); @@ -413,11 +430,12 @@ * Also, we KNOW that for the non error case of apm_bios_call, there * is no useful data returned in the low order 8 bits of eax. */ -#ifndef CONFIG_APM_ALLOW_INTS -# define APM_DO_CLI __cli() -#else -# define APM_DO_CLI __sti() -#endif +#define APM_DO_CLI \ + if (apm_info.allow_ints) \ + __sti(); \ + else \ + __cli(); + #ifdef APM_ZERO_SEGS # define APM_DECL_SEGS \ unsigned int saved_fs; unsigned int saved_gs; @@ -641,7 +659,6 @@ static void apm_power_off(void) { -#ifdef CONFIG_APM_REAL_MODE_POWER_OFF unsigned char po_bios_call[] = { 0xb8, 0x00, 0x10, /* movw $0x1000,ax */ 0x8e, 0xd0, /* movw ax,ss */ @@ -651,7 +668,6 @@ 0xb9, 0x03, 0x00, /* movw $0x0003,cx */ 0xcd, 0x15 /* int $0x15 */ }; -#endif /* * This may be called on an SMP machine. @@ -664,11 +680,10 @@ schedule(); } #endif -#ifdef CONFIG_APM_REAL_MODE_POWER_OFF - machine_real_restart(po_bios_call, sizeof(po_bios_call)); -#else - (void) apm_set_power_state(APM_STATE_OFF); -#endif + if (apm_info.realmode_power_off) + machine_real_restart(po_bios_call, sizeof(po_bios_call)); + else + (void) apm_set_power_state(APM_STATE_OFF); } #ifdef CONFIG_APM_DO_ENABLE @@ -704,7 +719,11 @@ return (eax >> 8) & 0xff; *status = ebx; *bat = ecx; - *life = edx; + if (apm_info.get_power_status_swabinminutes) { + *life = swab16((u16)edx); + *life |= 0x8000; + } else + *life = edx; return APM_SUCCESS; } @@ -1552,9 +1571,15 @@ apm_disabled = 1; if (strncmp(str, "on", 2) == 0) apm_disabled = 0; + if ((strncmp(str, "allow-ints", 10) == 0) || + (strncmp(str, "allow_ints", 10) == 0)) + apm_info.allow_ints = 1; if ((strncmp(str, "broken-psr", 10) == 0) || (strncmp(str, "broken_psr", 10) == 0)) apm_info.get_power_status_broken = 1; + if ((strncmp(str, "realmode-power-off", 18) == 0) || + (strncmp(str, "realmode_power_off", 18) == 0)) + apm_info.realmode_power_off = 1; invert = (strncmp(str, "no-", 3) == 0); if (invert) str += 3; @@ -1620,6 +1645,16 @@ return -ENODEV; } + if (allow_ints) + apm_info.allow_ints = 1; + if (broken_psr) + apm_info.get_power_status_broken = 1; + if (realmode_power_off) + apm_info.realmode_power_off = 1; + /* User can override, but default is to trust DMI */ + if (apm_disabled != -1) + apm_info.disabled = 1; + /* * Fix for the Compaq Contura 3/25c which reports BIOS version 0.1 * but is reportedly a 1.0 BIOS. @@ -1644,8 +1679,9 @@ printk("\n"); } - if (apm_disabled) { - printk(KERN_NOTICE "apm: disabled on user request.\n"); + if (apm_info.disabled) { + if(apm_disabled == 1) + printk(KERN_NOTICE "apm: disabled on user request.\n"); return -ENODEV; } if ((smp_num_cpus > 1) && !power_off) { @@ -1747,5 +1783,9 @@ MODULE_PARM_DESC(power_off, "Enable power off"); MODULE_PARM(bounce_interval, "i"); MODULE_PARM_DESC(bounce_interval, "Set the number of ticks to ignore suspend bounces"); +MODULE_PARM(allow_ints, "i"); +MODULE_PARM_DESC(allow_ints, "Allow interrupts during BIOS calls"); +MODULE_PARM(broken_psr, "i"); +MODULE_PARM_DESC(broken_psr, "BIOS has a broken GetPowerStatus call"); EXPORT_NO_SYMBOLS; diff -u --recursive --new-file v2.4.8/linux/arch/i386/kernel/dmi_scan.c linux/arch/i386/kernel/dmi_scan.c --- v2.4.8/linux/arch/i386/kernel/dmi_scan.c Sun Aug 12 13:27:58 2001 +++ linux/arch/i386/kernel/dmi_scan.c Mon Aug 13 16:39:28 2001 @@ -33,28 +33,46 @@ return bp; } +/* + * We have to be cautious here. We have seen BIOSes with DMI pointers + * pointing to completely the wrong place for example + */ + static int __init dmi_table(u32 base, int len, int num, void (*decode)(struct dmi_header *)) { u8 *buf; struct dmi_header *dm; u8 *data; int i=1; - int last = 0; buf = ioremap(base, len); if(buf==NULL) return -1; data = buf; + + /* + * Stop when we see al the items the table claimed to have + * OR we run off the end of the table (also happens) + */ + while(itype < last) + + /* + * Avoid misparsing crud if the length of the last + * record is crap + */ + if((data-buf+dm->length) >= len) break; - last = dm->type; decode(dm); data+=dm->length; - while(*data || data[1]) + /* + * Don't go off the end of the data if there is + * stuff looking like string fill past the end + */ + while((data-buf) < len && (*data || data[1])) data++; data+=2; i++; @@ -253,6 +271,18 @@ return 0; } + +/* + * This bios swaps the APM minute reporting bytes over (Many sony laptops + * have this problem). + */ + +static __init int swab_apm_power_in_minutes(struct dmi_blacklist *d) +{ + apm_info.get_power_status_swabinminutes = 1; + printk(KERN_WARNING "BIOS strings suggest APM reports battery life in minutes and wrong byte order.\n"); + return 0; +} /* * Process the DMI blacklists */ @@ -294,6 +324,11 @@ MATCH(DMI_SYS_VENDOR, "IBM"), NO_MATCH, NO_MATCH, NO_MATCH } }, + { set_apm_ints, "Dell Inspiron", { /* Allow interrupts during suspend on Dell Inspiron laptops*/ + MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), + MATCH(DMI_PRODUCT_NAME, "Inspiron 4000"), + NO_MATCH, NO_MATCH + } }, { set_apm_ints, "ASUSTeK", { /* Allow interrupts during APM or the clock goes slow */ MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), MATCH(DMI_PRODUCT_NAME, "L8400K series Notebook PC"), @@ -303,6 +338,21 @@ MATCH(DMI_SYS_VENDOR, "TriGem Computer, Inc"), MATCH(DMI_PRODUCT_NAME, "Delhi3"), NO_MATCH, NO_MATCH, + } }, + { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z505LS */ + MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), + MATCH(DMI_BIOS_VERSION, "R0203Z3"), + MATCH(DMI_BIOS_DATE, "08/25/00"), NO_MATCH + } }, + { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z505LS */ + MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), + MATCH(DMI_BIOS_VERSION, "R0203D0"), + MATCH(DMI_BIOS_DATE, "05/12/00"), NO_MATCH + } }, + { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z600NE */ + MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), + MATCH(DMI_BIOS_VERSION, "R0121Z1"), + MATCH(DMI_BIOS_DATE, "05/11/00"), NO_MATCH } }, { NULL, } }; diff -u --recursive --new-file v2.4.8/linux/arch/i386/kernel/i386_ksyms.c linux/arch/i386/kernel/i386_ksyms.c --- v2.4.8/linux/arch/i386/kernel/i386_ksyms.c Tue Jul 3 17:08:18 2001 +++ linux/arch/i386/kernel/i386_ksyms.c Thu Aug 16 09:39:37 2001 @@ -161,3 +161,7 @@ #ifdef CONFIG_X86_PAE EXPORT_SYMBOL(empty_zero_page); #endif + +#ifdef CONFIG_HAVE_DEC_LOCK +EXPORT_SYMBOL(atomic_dec_and_lock); +#endif diff -u --recursive --new-file v2.4.8/linux/arch/i386/kernel/pci-pc.c linux/arch/i386/kernel/pci-pc.c --- v2.4.8/linux/arch/i386/kernel/pci-pc.c Tue Jul 3 17:08:18 2001 +++ linux/arch/i386/kernel/pci-pc.c Sun Aug 12 10:54:07 2001 @@ -948,34 +948,6 @@ d->irq = 9; } -static void __init pci_fixup_via691(struct pci_dev *d) -{ - /* - * The VIA bridge corrupts with Posting enabled - */ - u8 tmp; - - pci_read_config_byte(d, 0x70, &tmp); - if(tmp & (1<<7)) { - printk("PCI: Disabled enhanced CPU to PCI posting\n"); - pci_write_config_byte(d, 0x70, tmp & ~(1<<7)); - } -} -static void __init pci_fixup_via691_2(struct pci_dev *d) -{ - /* - * The VIA bridge corrupts with Posting enabled - */ - u8 tmp; - - pci_read_config_byte(d, 0x40, &tmp); - if(tmp & (1<<7)) { - printk("PCI: Disabled enhanced CPU to PCI posting #2\n"); - pci_write_config_byte(d, 0x40, tmp & ~(1<<7)); - } -} - - struct pci_fixup pcibios_fixups[] = { { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, pci_fixup_i450nx }, { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454GX, pci_fixup_i450gx }, @@ -994,8 +966,6 @@ { PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases }, { PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, pci_fixup_latency }, { PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5598, pci_fixup_latency }, - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C691, pci_fixup_via691 }, - { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C598_1, pci_fixup_via691_2 }, { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, pci_fixup_piix4_acpi }, { 0 } }; diff -u --recursive --new-file v2.4.8/linux/arch/i386/kernel/smp.c linux/arch/i386/kernel/smp.c --- v2.4.8/linux/arch/i386/kernel/smp.c Tue Feb 13 14:13:43 2001 +++ linux/arch/i386/kernel/smp.c Sun Aug 12 10:38:47 2001 @@ -28,21 +28,21 @@ * The Linux implications for SMP are handled as follows: * * Pentium III / [Xeon] - * None of the E1AP-E3AP erratas are visible to the user. + * None of the E1AP-E3AP errata are visible to the user. * * E1AP. see PII A1AP * E2AP. see PII A2AP * E3AP. see PII A3AP * * Pentium II / [Xeon] - * None of the A1AP-A3AP erratas are visible to the user. + * None of the A1AP-A3AP errata are visible to the user. * * A1AP. see PPro 1AP * A2AP. see PPro 2AP * A3AP. see PPro 7AP * * Pentium Pro - * None of 1AP-9AP erratas are visible to the normal user, + * None of 1AP-9AP errata are visible to the normal user, * except occasional delivery of 'spurious interrupt' as trap #15. * This is very rare and a non-problem. * diff -u --recursive --new-file v2.4.8/linux/arch/i386/kernel/traps.c linux/arch/i386/kernel/traps.c --- v2.4.8/linux/arch/i386/kernel/traps.c Tue Jul 3 17:08:18 2001 +++ linux/arch/i386/kernel/traps.c Sun Aug 12 11:13:59 2001 @@ -48,6 +48,7 @@ #endif #include +#include asmlinkage int system_call(void); asmlinkage void lcall7(void); @@ -88,39 +89,65 @@ int kstack_depth_to_print = 24; + /* - * These constants are for searching for possible module text - * segments. + * If the address is either in the .text section of the + * kernel, or in the vmalloc'ed module regions, it *may* + * be the address of a calling routine */ +#ifdef CONFIG_MODULES + +extern struct module *module_list; +extern struct module kernel_module; + +static inline int kernel_text_address(unsigned long addr) +{ + int retval = 0; + struct module *mod; + + if (addr >= (unsigned long) &_stext && + addr <= (unsigned long) &_etext) + return 1; + + for (mod = module_list; mod != &kernel_module; mod = mod->next) { + /* mod_bound tests for addr being inside the vmalloc'ed + * module area. Of course it'd be better to test only + * for the .text subset... */ + if (mod_bound(addr, 0, mod)) { + retval = 1; + break; + } + } + + return retval; +} + +#else + +static inline int kernel_text_address(unsigned long addr) +{ + return (addr >= (unsigned long) &_stext && + addr <= (unsigned long) &_etext); +} + +#endif + void show_trace(unsigned long * stack) { int i; - unsigned long addr, module_start, module_end; + unsigned long addr; if (!stack) stack = (unsigned long*)&stack; printk("Call Trace: "); i = 1; - module_start = VMALLOC_START; - module_end = VMALLOC_END; - module_end = 0; while (((long) stack & (THREAD_SIZE-1)) != 0) { addr = *stack++; - /* - * If the address is either in the text segment of the - * kernel, or in the region which contains vmalloc'ed - * memory, it *may* be the address of a calling - * routine; if so, print it so that someone tracing - * down the cause of the crash will be able to figure - * out the call path that was taken. - */ - if (((addr >= (unsigned long) &_stext) && - (addr <= (unsigned long) &_etext)) || - ((addr >= module_start) && (addr <= module_end))) { - if (i && ((i % 8) == 0)) - printk("\n "); + if (kernel_text_address(addr)) { + if (i && ((i % 6) == 0)) + printk("\n "); printk("[<%08lx>] ", addr); i++; } diff -u --recursive --new-file v2.4.8/linux/arch/i386/lib/delay.c linux/arch/i386/lib/delay.c --- v2.4.8/linux/arch/i386/lib/delay.c Sun Dec 31 10:26:18 2000 +++ linux/arch/i386/lib/delay.c Sun Aug 12 10:29:44 2001 @@ -13,6 +13,7 @@ #include #include #include +#include #include #ifdef CONFIG_SMP @@ -34,9 +35,9 @@ rdtscl(bclock); do { + rep_nop(); rdtscl(now); - } - while((now-bclock) < loops); + } while ((now-bclock) < loops); } /* @@ -58,7 +59,7 @@ void __delay(unsigned long loops) { - if(x86_udelay_tsc) + if (x86_udelay_tsc) __rdtsc_delay(loops); else __loop_delay(loops); diff -u --recursive --new-file v2.4.8/linux/arch/ia64/ia32/sys_ia32.c linux/arch/ia64/ia32/sys_ia32.c --- v2.4.8/linux/arch/ia64/ia32/sys_ia32.c Sun Aug 12 13:27:58 2001 +++ linux/arch/ia64/ia32/sys_ia32.c Sun Aug 12 15:07:42 2001 @@ -746,7 +746,7 @@ }; static int -filldir32 (void *__buf, const char *name, int namlen, off_t offset, ino_t ino, +filldir32 (void *__buf, const char *name, int namlen, loff_t offset, ino_t ino, unsigned int d_type) { struct linux32_dirent * dirent; @@ -811,7 +811,7 @@ } static int -fillonedir32 (void * __buf, const char * name, int namlen, off_t offset, ino_t ino, +fillonedir32 (void * __buf, const char * name, int namlen, loff_t offset, ino_t ino, unsigned int d_type) { struct readdir32_callback * buf = (struct readdir32_callback *) __buf; diff -u --recursive --new-file v2.4.8/linux/arch/mips/ite-boards/generic/irq.c linux/arch/mips/ite-boards/generic/irq.c --- v2.4.8/linux/arch/mips/ite-boards/generic/irq.c Fri Apr 13 20:26:07 2001 +++ linux/arch/mips/ite-boards/generic/irq.c Sun Aug 12 10:38:47 2001 @@ -44,7 +44,7 @@ #include #include #include -#include +#include #include #include diff -u --recursive --new-file v2.4.8/linux/arch/mips/kernel/sysirix.c linux/arch/mips/kernel/sysirix.c --- v2.4.8/linux/arch/mips/kernel/sysirix.c Tue Jul 3 17:08:18 2001 +++ linux/arch/mips/kernel/sysirix.c Sun Aug 12 15:05:26 2001 @@ -1846,7 +1846,7 @@ #define ROUND_UP32(x) (((x)+sizeof(u32)-1) & ~(sizeof(u32)-1)) static int irix_filldir32(void *__buf, const char *name, int namlen, - off_t offset, ino_t ino, unsigned int d_type) + loff_t offset, ino_t ino, unsigned int d_type) { struct irix_dirent32 *dirent; struct irix_dirent32_callback *buf = @@ -1942,7 +1942,7 @@ #define ROUND_UP64(x) (((x)+sizeof(u64)-1) & ~(sizeof(u64)-1)) static int irix_filldir64(void * __buf, const char * name, int namlen, - off_t offset, ino_t ino, unsigned int d_type) + loff_t offset, ino_t ino, unsigned int d_type) { struct irix_dirent64 *dirent; struct irix_dirent64_callback * buf = diff -u --recursive --new-file v2.4.8/linux/arch/parisc/hpux/fs.c linux/arch/parisc/hpux/fs.c --- v2.4.8/linux/arch/parisc/hpux/fs.c Tue Dec 5 12:29:39 2000 +++ linux/arch/parisc/hpux/fs.c Sun Aug 12 15:07:55 2001 @@ -52,7 +52,7 @@ #define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de))) #define ROUND_UP(x) (((x)+sizeof(long)-1) & ~(sizeof(long)-1)) -static int filldir(void * __buf, const char * name, int namlen, off_t offset, ino_t ino) +static int filldir(void * __buf, const char * name, int namlen, loff_t offset, ino_t ino) { struct hpux_dirent * dirent; struct getdents_callback * buf = (struct getdents_callback *) __buf; diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/IVMS8_defconfig linux/arch/ppc/configs/IVMS8_defconfig --- v2.4.8/linux/arch/ppc/configs/IVMS8_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/IVMS8_defconfig Sun Aug 12 12:43:26 2001 @@ -71,6 +71,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -82,6 +84,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -246,6 +249,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -443,6 +447,7 @@ # CONFIG_ATARI_PARTITION is not set CONFIG_MAC_PARTITION=y # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/SM850_defconfig linux/arch/ppc/configs/SM850_defconfig --- v2.4.8/linux/arch/ppc/configs/SM850_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/SM850_defconfig Sun Aug 12 12:43:26 2001 @@ -72,6 +72,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -83,6 +85,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -211,6 +214,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -408,6 +412,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/SPD823TS_defconfig linux/arch/ppc/configs/SPD823TS_defconfig --- v2.4.8/linux/arch/ppc/configs/SPD823TS_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/SPD823TS_defconfig Sun Aug 12 12:43:26 2001 @@ -71,6 +71,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -82,6 +84,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -210,6 +213,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -407,6 +411,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/TQM823L_defconfig linux/arch/ppc/configs/TQM823L_defconfig --- v2.4.8/linux/arch/ppc/configs/TQM823L_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/TQM823L_defconfig Sun Aug 12 12:43:26 2001 @@ -72,6 +72,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -83,6 +85,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -211,6 +214,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -408,6 +412,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/TQM850L_defconfig linux/arch/ppc/configs/TQM850L_defconfig --- v2.4.8/linux/arch/ppc/configs/TQM850L_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/TQM850L_defconfig Sun Aug 12 12:43:26 2001 @@ -72,6 +72,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -83,6 +85,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -211,6 +214,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -408,6 +412,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/TQM860L_defconfig linux/arch/ppc/configs/TQM860L_defconfig --- v2.4.8/linux/arch/ppc/configs/TQM860L_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/TQM860L_defconfig Sun Aug 12 12:43:26 2001 @@ -72,6 +72,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -83,6 +85,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -211,6 +214,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -408,6 +412,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/apus_defconfig linux/arch/ppc/configs/apus_defconfig --- v2.4.8/linux/arch/ppc/configs/apus_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/apus_defconfig Sun Aug 12 12:43:26 2001 @@ -68,6 +68,7 @@ # CONFIG_PARPORT_OTHER is not set # CONFIG_PARPORT_1284 is not set CONFIG_GEN_RTC=y +# CONFIG_CMDLINE_BOOL is not set CONFIG_FB_CONSOLE=y CONFIG_AMIGA=y CONFIG_ZORRO=y @@ -101,6 +102,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -346,7 +348,7 @@ CONFIG_OKTAGON_SCSI=y # -# IEEE 1394 (FireWire) support +# IEEE 1394 (FireWire) support (EXPERIMENTAL) # # CONFIG_IEEE1394 is not set @@ -399,6 +401,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -490,6 +493,8 @@ # CONFIG_FB_IMSTT is not set # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set +# CONFIG_FB_PVR2 is not set +# CONFIG_FB_PVR2_DEBUG is not set # CONFIG_FB_E1355 is not set # CONFIG_FB_MATROX is not set # CONFIG_FB_ATY is not set @@ -687,6 +692,7 @@ # CONFIG_MINIX_SUBPARTITION is not set CONFIG_SOLARIS_X86_PARTITION=y CONFIG_UNIXWARE_DISKLABEL=y +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/bseip_defconfig linux/arch/ppc/configs/bseip_defconfig --- v2.4.8/linux/arch/ppc/configs/bseip_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/bseip_defconfig Sun Aug 12 12:43:26 2001 @@ -69,6 +69,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -80,6 +82,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -210,6 +213,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -407,6 +411,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/common_defconfig linux/arch/ppc/configs/common_defconfig --- v2.4.8/linux/arch/ppc/configs/common_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/common_defconfig Sun Aug 12 12:43:26 2001 @@ -81,6 +81,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -307,7 +308,7 @@ # CONFIG_AIC7XXX_OLD_TCQ_ON_BY_DEFAULT is not set CONFIG_AIC7XXX_OLD_CMDS_PER_DEVICE=8 CONFIG_AIC7XXX_OLD_PROC_STATS=y -# CONFIG_SCSI_ADVANSYS is not set +CONFIG_SCSI_ADVANSYS=y # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set # CONFIG_SCSI_MEGARAID is not set @@ -325,7 +326,7 @@ # CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_NCR53C7xx is not set -# CONFIG_SCSI_NCR53C8XX is not set +CONFIG_SCSI_NCR53C8XX=y CONFIG_SCSI_SYM53C8XX=y CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 @@ -353,7 +354,7 @@ CONFIG_SCSI_MAC53C94=y # -# IEEE 1394 (FireWire) support +# IEEE 1394 (FireWire) support (EXPERIMENTAL) # # CONFIG_IEEE1394 is not set @@ -435,6 +436,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -512,6 +514,8 @@ CONFIG_FB_IMSTT=y # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set +# CONFIG_FB_PVR2 is not set +# CONFIG_FB_PVR2_DEBUG is not set # CONFIG_FB_E1355 is not set CONFIG_FB_MATROX=y CONFIG_FB_MATROX_MILLENIUM=y @@ -520,6 +524,8 @@ # CONFIG_FB_MATROX_G450 is not set # CONFIG_FB_MATROX_MULTIHEAD is not set CONFIG_FB_ATY=y +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_CT=y CONFIG_FB_ATY128=y CONFIG_FB_3DFX=y # CONFIG_FB_SIS is not set @@ -709,6 +715,7 @@ # CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/est8260_defconfig linux/arch/ppc/configs/est8260_defconfig --- v2.4.8/linux/arch/ppc/configs/est8260_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/est8260_defconfig Sun Aug 12 12:43:26 2001 @@ -55,7 +55,8 @@ # Parallel port support # # CONFIG_PARPORT is not set -# CONFIG_PPC_RTC is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -67,6 +68,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -197,6 +199,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -395,6 +398,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/gemini_defconfig linux/arch/ppc/configs/gemini_defconfig --- v2.4.8/linux/arch/ppc/configs/gemini_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/gemini_defconfig Sun Aug 12 12:43:26 2001 @@ -60,6 +60,7 @@ # # CONFIG_PARPORT is not set # CONFIG_PPC_RTC is not set +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -71,6 +72,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -240,7 +242,7 @@ # CONFIG_SCSI_MAC53C94 is not set # -# IEEE 1394 (FireWire) support +# IEEE 1394 (FireWire) support (EXPERIMENTAL) # # CONFIG_IEEE1394 is not set @@ -289,6 +291,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -493,6 +496,7 @@ # CONFIG_MINIX_SUBPARTITION is not set CONFIG_SOLARIS_X86_PARTITION=y # CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/ibmchrp_defconfig linux/arch/ppc/configs/ibmchrp_defconfig --- v2.4.8/linux/arch/ppc/configs/ibmchrp_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/ibmchrp_defconfig Sun Aug 12 12:43:26 2001 @@ -76,6 +76,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -268,7 +269,7 @@ # CONFIG_SCSI_MAC53C94 is not set # -# IEEE 1394 (FireWire) support +# IEEE 1394 (FireWire) support (EXPERIMENTAL) # # CONFIG_IEEE1394 is not set @@ -344,6 +345,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -417,6 +419,8 @@ # CONFIG_FB_IMSTT is not set # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set +# CONFIG_FB_PVR2 is not set +# CONFIG_FB_PVR2_DEBUG is not set # CONFIG_FB_E1355 is not set CONFIG_FB_MATROX=y CONFIG_FB_MATROX_MILLENIUM=y @@ -609,6 +613,7 @@ # CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/mbx_defconfig linux/arch/ppc/configs/mbx_defconfig --- v2.4.8/linux/arch/ppc/configs/mbx_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/mbx_defconfig Sun Aug 12 12:43:26 2001 @@ -69,6 +69,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -80,6 +82,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -204,6 +207,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -400,6 +404,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/oak_defconfig linux/arch/ppc/configs/oak_defconfig --- v2.4.8/linux/arch/ppc/configs/oak_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/oak_defconfig Sun Aug 12 12:43:26 2001 @@ -56,6 +56,7 @@ # Parallel port support # # CONFIG_PARPORT is not set +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -67,6 +68,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -193,6 +195,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/power3_defconfig linux/arch/ppc/configs/power3_defconfig --- v2.4.8/linux/arch/ppc/configs/power3_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/power3_defconfig Sun Aug 12 12:43:26 2001 @@ -57,6 +57,8 @@ # CONFIG_PARPORT=m CONFIG_PARPORT_PC=m +CONFIG_PARPORT_PC_CML1=m +# CONFIG_PARPORT_SERIAL is not set CONFIG_PARPORT_PC_FIFO=y # CONFIG_PARPORT_PC_SUPERIO is not set # CONFIG_PARPORT_AMIGA is not set @@ -82,6 +84,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -244,7 +247,7 @@ # CONFIG_SCSI_MAC53C94 is not set # -# IEEE 1394 (FireWire) support +# IEEE 1394 (FireWire) support (EXPERIMENTAL) # # CONFIG_IEEE1394 is not set @@ -320,6 +323,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -393,6 +397,8 @@ # CONFIG_FB_IMSTT is not set # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set +# CONFIG_FB_PVR2 is not set +# CONFIG_FB_PVR2_DEBUG is not set # CONFIG_FB_E1355 is not set CONFIG_FB_MATROX=y CONFIG_FB_MATROX_MILLENIUM=y diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/rpxcllf_defconfig linux/arch/ppc/configs/rpxcllf_defconfig --- v2.4.8/linux/arch/ppc/configs/rpxcllf_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/rpxcllf_defconfig Sun Aug 12 12:43:26 2001 @@ -69,6 +69,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -80,6 +82,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -210,6 +213,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -407,6 +411,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/rpxlite_defconfig linux/arch/ppc/configs/rpxlite_defconfig --- v2.4.8/linux/arch/ppc/configs/rpxlite_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/rpxlite_defconfig Sun Aug 12 12:43:26 2001 @@ -69,6 +69,8 @@ # Parallel port support # # CONFIG_PARPORT is not set +CONFIG_PPC_RTC=y +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -80,6 +82,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -210,6 +213,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -407,6 +411,7 @@ # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/configs/walnut_defconfig linux/arch/ppc/configs/walnut_defconfig --- v2.4.8/linux/arch/ppc/configs/walnut_defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/configs/walnut_defconfig Sun Aug 12 12:43:26 2001 @@ -56,6 +56,7 @@ # Parallel port support # # CONFIG_PARPORT is not set +# CONFIG_CMDLINE_BOOL is not set # # Memory Technology Devices (MTD) @@ -67,6 +68,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -193,6 +195,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/defconfig linux/arch/ppc/defconfig --- v2.4.8/linux/arch/ppc/defconfig Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/defconfig Sun Aug 12 12:43:26 2001 @@ -81,6 +81,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -353,7 +354,7 @@ CONFIG_SCSI_MAC53C94=y # -# IEEE 1394 (FireWire) support +# IEEE 1394 (FireWire) support (EXPERIMENTAL) # # CONFIG_IEEE1394 is not set @@ -435,6 +436,7 @@ # # CONFIG_ACENIC is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set @@ -512,6 +514,8 @@ CONFIG_FB_IMSTT=y # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set +# CONFIG_FB_PVR2 is not set +# CONFIG_FB_PVR2_DEBUG is not set # CONFIG_FB_E1355 is not set CONFIG_FB_MATROX=y CONFIG_FB_MATROX_MILLENIUM=y @@ -520,6 +524,8 @@ # CONFIG_FB_MATROX_G450 is not set # CONFIG_FB_MATROX_MULTIHEAD is not set CONFIG_FB_ATY=y +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_CT=y CONFIG_FB_ATY128=y CONFIG_FB_3DFX=y # CONFIG_FB_SIS is not set @@ -709,6 +715,7 @@ # CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/apus_pci.c linux/arch/ppc/kernel/apus_pci.c --- v2.4.8/linux/arch/ppc/kernel/apus_pci.c Mon May 21 17:04:46 2001 +++ linux/arch/ppc/kernel/apus_pci.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.apus_pci.c 1.3 05/17/01 18:14:21 cort + * BK Id: SCCS/s.apus_pci.c 1.4 07/06/01 09:19:28 trini */ /* * Copyright (C) Michel Dänzer @@ -55,7 +55,6 @@ static struct pci_controller *apus_hose; -__apus void *pci_io_base(unsigned int bus) { return 0; @@ -70,7 +69,7 @@ #define cfg_write_val(val) val #define APUS_PCI_OP(rw, size, type, op, mask) \ -__apus int \ +int \ apus_pcibios_##rw##_config_##size(struct pci_dev *dev, int offset, type val) \ { \ int fnno = FNNO(dev->devfn); \ diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/apus_setup.c linux/arch/ppc/kernel/apus_setup.c --- v2.4.8/linux/arch/ppc/kernel/apus_setup.c Mon May 21 17:04:46 2001 +++ linux/arch/ppc/kernel/apus_setup.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.apus_setup.c 1.11 05/17/01 18:14:21 cort + * BK Id: SCCS/s.apus_setup.c 1.14 07/06/01 09:19:28 trini */ /* * linux/arch/ppc/kernel/apus_setup.c @@ -80,36 +80,36 @@ #include "local_irq.h" -unsigned long m68k_machtype __apusdata; -char debug_device[6] __apusdata = ""; +unsigned long m68k_machtype; +char debug_device[6] = ""; extern void amiga_init_IRQ(void); void (*mach_sched_init) (void (*handler)(int, void *, struct pt_regs *)) __initdata = NULL; /* machine dependent keyboard functions */ int (*mach_keyb_init) (void) __initdata = NULL; -int (*mach_kbdrate) (struct kbd_repeat *) __apusdata = NULL; -void (*mach_kbd_leds) (unsigned int) __apusdata = NULL; +int (*mach_kbdrate) (struct kbd_repeat *) = NULL; +void (*mach_kbd_leds) (unsigned int) = NULL; /* machine dependent irq functions */ void (*mach_init_IRQ) (void) __initdata = NULL; -void (*(*mach_default_handler)[]) (int, void *, struct pt_regs *) __apusdata = NULL; -void (*mach_get_model) (char *model) __apusdata = NULL; -int (*mach_get_hardware_list) (char *buffer) __apusdata = NULL; -int (*mach_get_irq_list) (char *) __apusdata = NULL; -void (*mach_process_int) (int, struct pt_regs *) __apusdata = NULL; +void (*(*mach_default_handler)[]) (int, void *, struct pt_regs *) = NULL; +void (*mach_get_model) (char *model) = NULL; +int (*mach_get_hardware_list) (char *buffer) = NULL; +int (*mach_get_irq_list) (char *) = NULL; +void (*mach_process_int) (int, struct pt_regs *) = NULL; /* machine dependent timer functions */ -unsigned long (*mach_gettimeoffset) (void) __apusdata; -void (*mach_gettod) (int*, int*, int*, int*, int*, int*) __apusdata; -int (*mach_hwclk) (int, struct hwclk_time*) __apusdata = NULL; -int (*mach_set_clock_mmss) (unsigned long) __apusdata = NULL; -void (*mach_reset)( void ) __apusdata; -long mach_max_dma_address __apusdata = 0x00ffffff; /* default set to the lower 16MB */ +unsigned long (*mach_gettimeoffset) (void); +void (*mach_gettod) (int*, int*, int*, int*, int*, int*); +int (*mach_hwclk) (int, struct hwclk_time*) = NULL; +int (*mach_set_clock_mmss) (unsigned long) = NULL; +void (*mach_reset)( void ); +long mach_max_dma_address = 0x00ffffff; /* default set to the lower 16MB */ #if defined(CONFIG_AMIGA_FLOPPY) void (*mach_floppy_setup) (char *, int *) __initdata = NULL; -void (*mach_floppy_eject) (void) __apusdata = NULL; +void (*mach_floppy_eject) (void) = NULL; #endif #ifdef CONFIG_HEARTBEAT -void (*mach_heartbeat) (int) __apusdata = NULL; +void (*mach_heartbeat) (int) = NULL; extern void apus_heartbeat (void); #endif @@ -118,29 +118,28 @@ extern unsigned count_period_num; /* 1 decrementer count equals */ extern unsigned count_period_den; /* count_period_num / count_period_den us */ -int num_memory __apusdata = 0; -struct mem_info memory[NUM_MEMINFO] __apusdata;/* memory description */ +int num_memory = 0; +struct mem_info memory[NUM_MEMINFO];/* memory description */ /* FIXME: Duplicate memory data to avoid conflicts with m68k shared code. */ -int m68k_realnum_memory __apusdata = 0; -struct mem_info m68k_memory[NUM_MEMINFO] __apusdata;/* memory description */ +int m68k_realnum_memory = 0; +struct mem_info m68k_memory[NUM_MEMINFO];/* memory description */ -struct mem_info ramdisk __apusdata; +struct mem_info ramdisk; extern void amiga_floppy_setup(char *, int *); extern void config_amiga(void); -static int __60nsram __apusdata = 0; +static int __60nsram = 0; /* for cpuinfo */ -static int __bus_speed __apusdata = 0; -static int __speed_test_failed __apusdata = 0; +static int __bus_speed = 0; +static int __speed_test_failed = 0; /********************************************** COMPILE PROTECTION */ /* Provide some stubs that links to Amiga specific functions. * This allows CONFIG_APUS to be removed from generic PPC files while * preventing link errors for other PPC targets. */ -__apus unsigned long apus_get_rtc_time(void) { #ifdef CONFIG_APUS @@ -152,7 +151,6 @@ #endif } -__apus int apus_set_rtc_time(unsigned long nowtime) { #ifdef CONFIG_APUS @@ -265,7 +263,6 @@ #endif } -__apus int apus_get_cpuinfo(char *buffer) { @@ -287,7 +284,6 @@ #endif } -__apus static void get_current_tb(unsigned long long *time) { __asm __volatile ("1:mftbu 4 \n\t" @@ -303,7 +299,6 @@ } -__apus void apus_calibrate_decr(void) { #ifdef CONFIG_APUS @@ -388,7 +383,6 @@ #endif } -__apus void arch_gettod(int *year, int *mon, int *day, int *hour, int *min, int *sec) { @@ -415,7 +409,6 @@ mach_floppy_setup (str, ints); } -__apus void floppy_eject(void) { if (mach_floppy_eject) @@ -425,11 +418,10 @@ /*********************************************************** MEMORY */ #define KMAP_MAX 32 -unsigned long kmap_chunks[KMAP_MAX*3] __apusdata; -int kmap_chunk_count __apusdata = 0; +unsigned long kmap_chunks[KMAP_MAX*3]; +int kmap_chunk_count = 0; /* From pgtable.h */ -__apus static __inline__ pte_t *my_find_pte(struct mm_struct *mm,unsigned long va) { pgd_t *dir = 0; @@ -452,7 +444,6 @@ /* Again simulating an m68k/mm/kmap.c function. */ -__apus void kernel_set_cachemode( unsigned long address, unsigned long size, unsigned int cmode ) { @@ -495,7 +486,6 @@ } } -__apus unsigned long mm_ptov (unsigned long paddr) { unsigned long ret; @@ -524,7 +514,6 @@ return ret; } -__apus int mm_end_of_chunk (unsigned long addr, int len) { if (memory[0].addr + memory[0].size == addr + len) @@ -536,7 +525,6 @@ #define L1_CACHE_BYTES 32 #define MAX_CACHE_SIZE 8192 -__apus void cache_push(__u32 addr, int length) { addr = mm_ptov(addr); @@ -556,7 +544,6 @@ : : "r" (addr)); } -__apus void cache_clear(__u32 addr, int length) { if (MAX_CACHE_SIZE < length) @@ -706,13 +693,11 @@ #endif /****************************************************** IRQ stuff */ -__apus static unsigned int apus_irq_cannonicalize(unsigned int irq) { return irq; } -__apus int apus_get_irq_list(char *buf) { #ifdef CONFIG_APUS @@ -725,7 +710,6 @@ } /* IPL must be between 0 and 7 */ -__apus static inline void apus_set_IPL(unsigned long ipl) { APUS_WRITE(APUS_IPL_EMU, IPLEMU_SETRESET | IPLEMU_DISABLEINT); @@ -734,7 +718,6 @@ APUS_WRITE(APUS_IPL_EMU, IPLEMU_DISABLEINT); } -__apus static inline unsigned long apus_get_IPL(void) { /* This returns the present IPL emulation level. */ @@ -743,7 +726,6 @@ return ((~__f) & IPLEMU_IPLMASK); } -__apus static inline unsigned long apus_get_prev_IPL(struct pt_regs* regs) { /* The value saved in mq is the IPL_EMU value at the time of @@ -794,7 +776,6 @@ } #endif -__apus int apus_get_irq(struct pt_regs* regs) { #ifdef CONFIG_APUS @@ -815,8 +796,6 @@ #endif } - -__apus void apus_post_irq(struct pt_regs* regs, int level) { #ifdef __INTERRUPT_DEBUG @@ -826,22 +805,17 @@ apus_set_IPL(apus_get_prev_IPL(regs)); } - - /****************************************************** keyboard */ -__apus static int apus_kbd_setkeycode(unsigned int scancode, unsigned int keycode) { return -EOPNOTSUPP; } -__apus static int apus_kbd_getkeycode(unsigned int scancode) { return scancode > 127 ? -EINVAL : scancode; } -__apus static int apus_kbd_translate(unsigned char keycode, unsigned char *keycodep, char raw_mode) { @@ -849,18 +823,15 @@ return 1; } -__apus static char apus_kbd_unexpected_up(unsigned char keycode) { return 0200; } -__apus static void apus_kbd_leds(unsigned char leds) { } -__apus static void apus_kbd_init_hw(void) { #ifdef CONFIG_APUS @@ -893,7 +864,6 @@ ciab.pra &= ~SER_RTS; /* active low */ } -__apus int __debug_ser_out( unsigned char c ) { custom.serdat = c | 0x100; @@ -903,7 +873,6 @@ return 1; } -__apus unsigned char __debug_ser_in( void ) { unsigned char c; @@ -917,7 +886,6 @@ return c; } -__apus int __debug_serinit( void ) { unsigned long flags; @@ -949,7 +917,6 @@ return 0; } -__apus void __debug_print_hex(unsigned long x) { int i; @@ -963,7 +930,6 @@ __debug_ser_out('\r'); } -__apus void __debug_print_string(char* s) { unsigned char c; @@ -973,7 +939,6 @@ __debug_ser_out('\r'); } -__apus static void apus_progress(char *s, unsigned short value) { __debug_print_string(s); diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/chrp_pci.c linux/arch/ppc/kernel/chrp_pci.c --- v2.4.8/linux/arch/ppc/kernel/chrp_pci.c Tue Jul 3 17:08:18 2001 +++ linux/arch/ppc/kernel/chrp_pci.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.chrp_pci.c 1.17 06/28/01 16:11:56 paulus + * BK Id: SCCS/s.chrp_pci.c 1.20 08/08/01 16:35:43 paulus */ /* * CHRP pci routines. @@ -28,8 +28,10 @@ #include "pci.h" /* LongTrail */ +unsigned long gg2_pci_config_base; + #define pci_config_addr(dev, offset) \ -(GG2_PCI_CONFIG_BASE | ((dev->bus->number)<<16) | ((dev->devfn)<<8) | (offset)) +(gg2_pci_config_base | ((dev->bus->number)<<16) | ((dev->devfn)<<8) | (offset)) volatile struct Hydra *Hydra = NULL; @@ -111,7 +113,6 @@ python_write_config_dword }; -#ifdef CONFIG_POWER4 /* * Access functions for PCI config space using RTAS calls. */ @@ -158,7 +159,6 @@ rtas_write_config_word, rtas_write_config_dword }; -#endif /* CONFIG_POWER4 */ /* * Temporary fixes for PCI devices. These should be replaced by OF query @@ -219,29 +219,20 @@ if ((np != 0) && (np->n_intrs > 0) && (np->intrs[0].line != 0)) dev->irq = np->intrs[0].line; pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); - - /* the F50 identifies the amd as a trident */ - if ( (dev->vendor == PCI_VENDOR_ID_TRIDENT) && - (dev->class>>8 == PCI_CLASS_NETWORK_ETHERNET) ) - { - dev->vendor = PCI_VENDOR_ID_AMD; - pci_write_config_word(dev, PCI_VENDOR_ID, - PCI_VENDOR_ID_AMD); - } } } -/* this is largely modeled and stolen after the pmac_pci code -- tgall - */ - -static void __init -ibm_add_bridges(struct device_node *dev) +void __init +chrp_find_bridges(void) { + struct device_node *dev; int *bus_range; - int len, index = 0; + int len, index = -1; struct pci_controller *hose; volatile unsigned char *cfg; unsigned int *dma; + char *model, *machine; + int is_longtrail = 0, is_mot = 0; struct device_node *root = find_path_device("/"); #ifdef CONFIG_POWER3 unsigned int *opprop = (unsigned int *) @@ -249,10 +240,22 @@ int i; #endif - for(; dev != NULL; dev = dev->next, ++index) { - if (dev->parent != root) + /* + * The PCI host bridge nodes on some machines don't have + * properties to adequately identify them, so we have to + * look at what sort of machine this is as well. + */ + machine = get_property(root, "model", NULL); + if (machine != NULL) { + is_longtrail = strncmp(machine, "IBM,LongTrail", 13) == 0; + is_mot = strncmp(machine, "MOT", 3) == 0; + } + for (dev = root->child; dev != NULL; dev = dev->sibling) { + if (dev->type == NULL || strcmp(dev->type, "pci") != 0) continue; - if (dev->n_addrs < 1) { + ++index; + /* The GG2 bridge on the LongTrail doesn't have an address */ + if (dev->n_addrs < 1 && !is_longtrail) { printk(KERN_WARNING "Can't use %s: no address\n", dev->full_name); continue; @@ -268,8 +271,10 @@ else printk(KERN_INFO "PCI buses %d..%d", bus_range[0], bus_range[1]); - printk(" controlled by %s at %x\n", dev->type, - dev->addrs[0].address); + printk(" controlled by %s", dev->type); + if (dev->n_addrs > 0) + printk(" at %x", dev->addrs[0].address); + printk("\n"); hose = pcibios_alloc_controller(); if (!hose) { @@ -280,17 +285,35 @@ hose->arch_data = dev; hose->first_busno = bus_range[0]; hose->last_busno = bus_range[1]; - hose->ops = &python_pci_ops; - cfg = ioremap(dev->addrs[0].address + 0xf8000, 0x20); - hose->cfg_addr = (volatile unsigned int *) cfg; - hose->cfg_data = cfg + 0x10; + model = get_property(dev, "model", NULL); + if (model == NULL) + model = ""; + if (device_is_compatible(dev, "IBM,python")) { + hose->ops = &python_pci_ops; + cfg = ioremap(dev->addrs[0].address + 0xf8000, 0x20); + hose->cfg_addr = (volatile unsigned int *) cfg; + hose->cfg_data = cfg + 0x10; + } else if (is_mot + || strncmp(model, "Motorola, Grackle", 17) == 0) { + setup_grackle(hose); + } else if (is_longtrail) { + hose->ops = &gg2_pci_ops; + gg2_pci_config_base = (unsigned long) + ioremap(GG2_PCI_CONFIG_BASE, 0x80000); + } else { + printk("No methods for %s (model %s), using RTAS\n", + dev->full_name, model); + hose->ops = &rtas_pci_ops; + } pci_process_bridge_OF_ranges(hose, dev, index == 0); #ifdef CONFIG_POWER3 - i = prom_n_addr_cells(root) * (index + 2) - 1; - openpic_setup_ISU(index, opprop[i]); + if (opprop != NULL) { + i = prom_n_addr_cells(root) * (index + 2) - 1; + openpic_setup_ISU(index, opprop[i]); + } #endif /* CONFIG_POWER3 */ /* check the first bridge for a property that we can @@ -302,64 +325,6 @@ printk("pci_dram_offset = %lx\n", pci_dram_offset); } } -} - -void __init -chrp_find_bridges(void) -{ - struct device_node *py, *dev; - char *model, *name; - struct pci_controller* hose; ppc_md.pcibios_fixup = chrp_pcibios_fixup; - - model = get_property(find_path_device("/"), "model", NULL); - if (!strncmp("MOT", model, 3)) { - struct pci_controller *hose; - - hose = pcibios_alloc_controller(); - if (!hose) - return; - hose->first_busno = 0; - hose->last_busno = 0xff; - /* Check that please. This must be the root of the OF - * PCI tree (the root host bridge - */ - hose->arch_data = dev = find_devices("pci"); - setup_grackle(hose, 0x20000); - pci_process_bridge_OF_ranges(hose, dev, 1); - return; - } - - if ((py = find_compatible_devices("pci", "IBM,python"))) - { - /* XXX xmon_init_scc needs this set and the BAT - set up in MMU_init */ - ibm_add_bridges(find_devices("pci")); - return; - } - - - hose = pcibios_alloc_controller(); - if (!hose) - return; - hose->first_busno = 0; - hose->last_busno = 0xff; - /* Check that please. This must be the root of the OF - * PCI tree (the root host bridge - */ - hose->arch_data = dev = find_devices("pci"); - name = get_property(find_path_device("/"), "name", NULL); - if (!strncmp("IBM,7043-150", name, 12) || - !strncmp("IBM,7046-155", name, 12) || - !strncmp("IBM,7046-B50", name, 12) ) { - setup_grackle(hose, 0x01000000); - pci_process_bridge_OF_ranges(hose, dev, 1); - return; - } - - /* LongTrail */ - hose->ops = &gg2_pci_ops; - pci_dram_offset = 0; - pci_process_bridge_OF_ranges(hose, find_devices("pci"), 1); } diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/feature.c linux/arch/ppc/kernel/feature.c --- v2.4.8/linux/arch/ppc/kernel/feature.c Tue Jul 3 17:08:18 2001 +++ linux/arch/ppc/kernel/feature.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.feature.c 1.14 06/17/01 09:33:37 trini + * BK Id: SCCS/s.feature.c 1.16 07/06/01 14:42:47 trini */ /* * arch/ppc/kernel/feature.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -58,7 +59,7 @@ /* Those features concern for OHare-based PowerBooks (2400, 3400, 3500) */ -static fbit feature_bits_ohare_pbook[] = { +static fbit feature_bits_ohare_pbook[] __pmacdata = { {0x38,0,0}, /* FEATURE_null */ {0x38,0,OH_SCC_RESET}, /* FEATURE_Serial_reset */ {0x38,0,OH_SCC_ENABLE}, /* FEATURE_Serial_enable */ @@ -92,7 +93,7 @@ * the SCC related bits and init them once. They have proven to occasionally cause * problems with the desktop units. */ -static fbit feature_bits_heathrow[] = { +static fbit feature_bits_heathrow[] __pmacdata = { {0x38,0,0}, /* FEATURE_null */ {0x38,0,0}, /* FEATURE_Serial_reset */ {0x38,0,0}, /* FEATURE_Serial_enable */ @@ -125,7 +126,7 @@ /* Those bits concern heathrow-based PowerBooks (wallstreet/mainstreet). * Heathrow-based desktop macs (Beige G3s) are _not_ handled here */ -static fbit feature_bits_wallstreet[] = { +static fbit feature_bits_wallstreet[] __pmacdata = { {0x38,0,0}, /* FEATURE_null */ {0x38,0,HRW_RESET_SCC}, /* FEATURE_Serial_reset */ {0x38,0,HRW_SCC_ENABLE}, /* FEATURE_Serial_enable */ @@ -160,7 +161,7 @@ * Mostly the same as the heathrow. They are used on both PowerBooks * and desktop machines using the paddington chip */ -static fbit feature_bits_paddington[] = { +static fbit feature_bits_paddington[] __pmacdata = { {0x38,0,0}, /* FEATURE_null */ {0x38,0,PADD_RESET_SCC}, /* FEATURE_Serial_reset */ {0x38,0,HRW_SCC_ENABLE}, /* FEATURE_Serial_enable */ @@ -193,7 +194,7 @@ /* Those bits are for Core99 machines (iBook,G4,iMacSL/DV,Pismo,...). * Note: Different sets may be needed for iBook, especially for sound */ -static fbit feature_bits_keylargo[] = { +static fbit feature_bits_keylargo[] __pmacdata = { {0x38,0,0}, /* FEATURE_null */ {0x38,0,KL0_SCC_RESET}, /* FEATURE_Serial_reset */ {0x38,0,KL0_SERIAL_ENABLE}, /* FEATURE_Serial_enable */ @@ -298,7 +299,7 @@ extern unsigned long powersave_nap; -void +void __init feature_init(void) { struct device_node *np; @@ -403,7 +404,7 @@ #endif } -static struct feature_controller* +static struct feature_controller __init * feature_add_controller(struct device_node *controller_device, fbit* bits) { struct feature_controller* controller; @@ -443,7 +444,7 @@ return controller; } -static struct feature_controller* +static struct feature_controller __pmac * feature_lookup_controller(struct device_node *device) { int i; @@ -467,7 +468,7 @@ return NULL; } -int +int __pmac feature_set(struct device_node* device, enum system_feature f) { struct feature_controller* controller; @@ -500,7 +501,7 @@ return 0; } -int +int __pmac feature_clear(struct device_node* device, enum system_feature f) { struct feature_controller* controller; @@ -533,7 +534,7 @@ return 0; } -int +int __pmac feature_test(struct device_node* device, enum system_feature f) { struct feature_controller* controller; @@ -562,7 +563,7 @@ return bit->polarity ? (value == 0) : (value == bit->mask); } -int +int __pmac feature_can_sleep(void) { return ((board_features & FTR_CAN_SLEEP) != 0); @@ -576,7 +577,7 @@ */ /* Only one GMAC is assumed */ -void +void __pmac feature_set_gmac_power(struct device_node* device, int power) { unsigned long flags; @@ -596,7 +597,7 @@ udelay(20); } -void +void __pmac feature_gmac_phy_reset(struct device_node* device) { unsigned long flags; @@ -619,7 +620,7 @@ } /* Pass the node of the correct controller, please */ -void +void __pmac feature_set_usb_power(struct device_node* device, int power) { char* prop; @@ -691,7 +692,7 @@ spin_unlock_irqrestore(&keylargo->lock, flags); } -void +void __pmac feature_set_firewire_power(struct device_node* device, int power) { unsigned long flags; @@ -711,7 +712,7 @@ } /* Warning: will kill the PHY.. */ -void +void __pmac feature_set_firewire_cable_power(struct device_node* device, int power) { unsigned long flags; @@ -726,7 +727,7 @@ } #ifdef CONFIG_SMP -void +void __pmac feature_core99_kick_cpu(int cpu_nr) { #if 1 /* New way */ @@ -750,7 +751,7 @@ } #endif /* CONFIG_SMP */ -void +void __pmac feature_set_airport_power(struct device_node* device, int power) { if (!keylargo_base || !airport_dev || airport_dev != device) @@ -795,7 +796,7 @@ /* Initialize the Core99 UniNorth host bridge and memory controller */ -static void +static void __init uninorth_init(void) { struct device_node* gmac, *fw; @@ -831,7 +832,7 @@ /* Initialize the Core99 KeyLargo ASIC. */ -static void +static void __init keylargo_init(void) { struct device_node* np; @@ -853,7 +854,7 @@ } #ifdef CONFIG_PMAC_PBOOK -void +void __pmac feature_prepare_for_sleep(void) { /* We assume gatwick is second */ @@ -874,8 +875,7 @@ } } - -void +void __pmac feature_wake_up(void) { struct feature_controller* ctrler = &controllers[0]; @@ -903,8 +903,7 @@ static u32 save_unin_clock_ctl; static struct dbdma_regs save_dbdma[13]; - -static void +static void __pmac heathrow_prepare_for_sleep(struct feature_controller* ctrler) { save_mbcr = in_le32(FREG(ctrler, 0x34)); @@ -914,7 +913,7 @@ out_le32(FREG(ctrler, 0x38), save_fcr[0] & ~HRW_IOBUS_ENABLE); } -static void +static void __pmac heathrow_wakeup(struct feature_controller* ctrler) { out_le32(FREG(ctrler, 0x38), save_fcr[0]); @@ -925,7 +924,7 @@ mdelay(1); } -static void +static void __pmac turn_off_keylargo(void) { u32 temp; @@ -977,7 +976,7 @@ (void)KL_IN(KEYLARGO_FCR3); udelay(10); } -static void +static void __pmac turn_off_pangea(void) { u32 temp; @@ -1011,7 +1010,7 @@ (void)KL_IN(KEYLARGO_FCR3); udelay(10); } -static void +static void __pmac core99_prepare_for_sleep(struct feature_controller* ctrler) { int i; @@ -1086,7 +1085,7 @@ } } -static void +static void __pmac core99_wake_up(struct feature_controller* ctrler) { int i; diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/pci.c linux/arch/ppc/kernel/pci.c --- v2.4.8/linux/arch/ppc/kernel/pci.c Tue Jul 3 17:08:18 2001 +++ linux/arch/ppc/kernel/pci.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.pci.c 1.26 06/28/01 08:02:41 trini + * BK Id: SCCS/s.pci.c 1.28 08/08/01 16:35:43 paulus */ /* * Common pmac/prep/chrp pci routines. -- Cort @@ -41,6 +41,7 @@ unsigned long pci_dram_offset = 0; static void pcibios_fixup_resources(struct pci_dev* dev); +static void fixup_broken_pcnet32(struct pci_dev* dev); #ifdef CONFIG_ALL_PPC static void pcibios_fixup_cardbus(struct pci_dev* dev); static u8* pci_to_OF_bus_map; @@ -57,6 +58,7 @@ static int pci_bus_count; struct pci_fixup pcibios_fixups[] = { + { PCI_FIXUP_HEADER, PCI_VENDOR_ID_TRIDENT, PCI_ANY_ID, fixup_broken_pcnet32 }, { PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources }, #ifdef CONFIG_ALL_PPC /* We should add per-machine fixup support in xxx_setup.c or xxx_pci.c */ @@ -64,6 +66,16 @@ #endif /* CONFIG_ALL_PPC */ { 0 } }; + +static void +fixup_broken_pcnet32(struct pci_dev* dev) +{ + if ((dev->class>>8 == PCI_CLASS_NETWORK_ETHERNET)) { + dev->vendor = PCI_VENDOR_ID_AMD; + pci_write_config_word(dev, PCI_VENDOR_ID, PCI_VENDOR_ID_AMD); + pci_name_device(dev); + } +} void pcibios_update_resource(struct pci_dev *dev, struct resource *root, diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/pci.h linux/arch/ppc/kernel/pci.h --- v2.4.8/linux/arch/ppc/kernel/pci.h Mon May 21 17:04:47 2001 +++ linux/arch/ppc/kernel/pci.h Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.pci.h 1.7 05/17/01 18:14:21 cort + * BK Id: SCCS/s.pci.h 1.10 08/08/01 16:35:43 paulus */ #ifndef __PPC_KERNEL_PCI_H__ @@ -22,6 +22,6 @@ extern void setup_indirect_pci(struct pci_controller* hose, u32 cfg_addr, u32 cfg_data); -extern void setup_grackle(struct pci_controller *hose, unsigned io_space_size); +extern void setup_grackle(struct pci_controller *hose); #endif /* __PPC_KERNEL_PCI_H__ */ diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/pmac_nvram.c linux/arch/ppc/kernel/pmac_nvram.c --- v2.4.8/linux/arch/ppc/kernel/pmac_nvram.c Mon May 21 17:04:47 2001 +++ linux/arch/ppc/kernel/pmac_nvram.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.pmac_nvram.c 1.5 05/17/01 18:14:21 cort + * BK Id: SCCS/s.pmac_nvram.c 1.10 08/08/01 16:23:35 paulus */ /* * Miscellaneous procedures for dealing with the PowerMac hardware. @@ -68,13 +68,12 @@ #if 0 static char* nvram_image; #else -__pmac static char nvram_image[NVRAM_SIZE]; +static char nvram_image[NVRAM_SIZE] __pmacdata; #endif extern int pmac_newworld; - -static u8 +static u8 __openfirmware chrp_checksum(struct chrp_header* hdr) { u8 *ptr; @@ -86,7 +85,7 @@ return sum; } -static u32 +static u32 __pmac core99_calc_adler(u8 *buffer) { int cnt; @@ -109,7 +108,7 @@ return (high << 16) | low; } -static u32 +static u32 __pmac core99_check(u8* datas) { struct core99_header* hdr99 = (struct core99_header*)datas; @@ -135,7 +134,7 @@ return hdr99->generation; } -static int +static int __pmac core99_erase_bank(int bank) { int stat, i; @@ -159,7 +158,7 @@ return 0; } -static int +static int __pmac core99_write_bank(int bank, u8* datas) { int i, stat = 0; @@ -187,7 +186,7 @@ return 0; } -static void +static void __init lookup_partitions(void) { u8 buffer[17]; @@ -225,8 +224,8 @@ #endif } -__init -void pmac_nvram_init(void) +void __init +pmac_nvram_init(void) { struct device_node *dp; @@ -268,7 +267,8 @@ for (i=0; iaddrs[0].address, dp->addrs[0].size); + nvram_data = ioremap(dp->addrs[0].address + isa_mem_base, + dp->addrs[0].size); nvram_mult = 1; } else if (nvram_naddrs == 1) { nvram_data = ioremap(dp->addrs[0].address, dp->addrs[0].size); @@ -285,7 +285,7 @@ lookup_partitions(); } -void +void __pmac pmac_nvram_update(void) { struct core99_header* hdr99; @@ -312,8 +312,8 @@ printk("nvram: Error writing bank %d\n", core99_bank); } -__openfirmware -unsigned char nvram_read_byte(int addr) +unsigned char __openfirmware +nvram_read_byte(int addr) { switch (nvram_naddrs) { #ifdef CONFIG_ADB_PMU @@ -340,8 +340,8 @@ return 0; } -__openfirmware -void nvram_write_byte(unsigned char val, int addr) +void __openfirmware +nvram_write_byte(unsigned char val, int addr) { switch (nvram_naddrs) { #ifdef CONFIG_ADB_PMU @@ -372,13 +372,13 @@ eieio(); } -int +int __pmac pmac_get_partition(int partition) { return nvram_partitions[partition]; } -u8 +u8 __pmac pmac_xpram_read(int xpaddr) { int offset = nvram_partitions[pmac_nvram_XPRAM]; @@ -389,7 +389,7 @@ return nvram_read_byte(xpaddr + offset); } -void +void __pmac pmac_xpram_write(int xpaddr, u8 data) { int offset = nvram_partitions[pmac_nvram_XPRAM]; @@ -399,5 +399,3 @@ nvram_write_byte(xpaddr + offset, data); } - - diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/pmac_pci.c linux/arch/ppc/kernel/pmac_pci.c --- v2.4.8/linux/arch/ppc/kernel/pmac_pci.c Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/kernel/pmac_pci.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.pmac_pci.c 1.18 07/01/01 12:23:31 trini + * BK Id: SCCS/s.pmac_pci.c 1.22 08/08/01 16:35:43 paulus */ /* * Support for PCI bridges found on Power Macintoshes. @@ -407,7 +407,7 @@ } void __init -setup_grackle(struct pci_controller *hose, unsigned io_space_size) +setup_grackle(struct pci_controller *hose) { setup_indirect_pci(hose, 0xfec00000, 0xfee00000); if (machine_is_compatible("AAPL,PowerBook1998")) @@ -459,7 +459,7 @@ disp_name = "UniNorth"; } else if (strcmp(dev->name, "pci") == 0) { /* XXX assume this is a mpc106 (grackle) */ - setup_grackle(hose, 0x20000); + setup_grackle(hose); disp_name = "Grackle (MPC106)"; } else if (strcmp(dev->name, "bandit") == 0) { setup_bandit(hose, addr); diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/pmac_setup.c linux/arch/ppc/kernel/pmac_setup.c --- v2.4.8/linux/arch/ppc/kernel/pmac_setup.c Mon May 21 17:04:47 2001 +++ linux/arch/ppc/kernel/pmac_setup.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.pmac_setup.c 1.21 05/17/01 18:14:21 cort + * BK Id: SCCS/s.pmac_setup.c 1.24 07/06/01 14:49:51 trini */ /* * linux/arch/ppc/kernel/setup.c @@ -134,7 +134,8 @@ #ifdef CONFIG_SMP volatile static long int core99_l2_cache; -void core99_init_l2(void) +void __pmac +core99_init_l2(void) { int cpu = smp_processor_id(); @@ -153,9 +154,7 @@ } #endif /* CONFIG_SMP */ - -__pmac -int +int __pmac pmac_get_cpuinfo(char *buffer) { int len; @@ -265,8 +264,7 @@ * Dummy mksound function that does nothing. * The real one is in the dmasound driver. */ -__pmac -static void +static void __pmac pmac_mksound(unsigned int hz, unsigned int ticks) { } @@ -437,8 +435,8 @@ #endif #if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC) - -kdev_t __init find_ide_boot(void) +kdev_t __init +find_ide_boot(void) { char *p; int n; @@ -455,7 +453,8 @@ } #endif /* CONFIG_BLK_DEV_IDE && CONFIG_BLK_DEV_IDE_PMAC */ -void __init find_boot_device(void) +void __init +find_boot_device(void) { #if defined(CONFIG_SCSI) && defined(CONFIG_BLK_DEV_SD) if (boot_host != NULL) { @@ -470,8 +469,8 @@ } /* can't be __init - can be called whenever a disk is first accessed */ -__pmac -void note_bootable_part(kdev_t dev, int part, int goodness) +void __pmac +note_bootable_part(kdev_t dev, int part, int goodness) { static int found_boot = 0; char *p; @@ -495,7 +494,7 @@ } } -void +void __pmac pmac_restart(char *cmd) { #ifdef CONFIG_ADB_CUDA @@ -524,7 +523,7 @@ } } -void +void __pmac pmac_power_off(void) { #ifdef CONFIG_ADB_CUDA @@ -553,7 +552,7 @@ } } -void +void __pmac pmac_halt(void) { pmac_power_off(); @@ -564,19 +563,19 @@ /* * IDE stuff. */ -void +void __pmac pmac_ide_insw(ide_ioreg_t port, void *buf, int ns) { _insw_ns((unsigned short *)(port+_IO_BASE), buf, ns); } -void +void __pmac pmac_ide_outsw(ide_ioreg_t port, void *buf, int ns) { _outsw_ns((unsigned short *)(port+_IO_BASE), buf, ns); } -int +int __pmac pmac_ide_default_irq(ide_ioreg_t base) { #if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC) @@ -587,7 +586,7 @@ #endif } -ide_ioreg_t +ide_ioreg_t __pmac pmac_ide_default_io_base(int index) { #if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC) @@ -598,7 +597,7 @@ #endif } -int +int __pmac pmac_ide_check_region(ide_ioreg_t from, unsigned int extent) { /* @@ -611,7 +610,7 @@ return check_region(from, extent); } -void +void __pmac pmac_ide_request_region(ide_ioreg_t from, unsigned int extent, const char *name) @@ -620,7 +619,7 @@ request_region(from, extent, name); } -void +void __pmac pmac_ide_release_region(ide_ioreg_t from, unsigned int extent) { @@ -630,13 +629,15 @@ #if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC) /* This is declared in drivers/block/ide-pmac.c */ -void pmac_ide_init_hwif_ports (hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq); +void __pmac +pmac_ide_init_hwif_ports (hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq); #else /* * This registers the standard ports for this architecture with the IDE * driver. */ -void pmac_ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq) +void __pmac +pmac_ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq) { } #endif @@ -646,7 +647,8 @@ * Read in a property describing some pieces of memory. */ -static void __init get_mem_prop(char *name, struct mem_pieces *mp) +static void __init +get_mem_prop(char *name, struct mem_pieces *mp) { struct reg_property *rp; int i, s; @@ -686,7 +688,8 @@ * Our text, data, bss use something over 1MB, starting at 0. * Open Firmware may be using 1MB at the 4MB point. */ -unsigned long __init pmac_find_end_of_memory(void) +unsigned long __init +pmac_find_end_of_memory(void) { unsigned long a, total; struct mem_pieces phys_mem; @@ -813,7 +816,7 @@ extern void drawchar(char c); extern void drawstring(const char *c); extern boot_infos_t *disp_bi; -void +void __init pmac_progress(char *s, unsigned short hex) { if (disp_bi == 0) @@ -822,4 +825,3 @@ prom_drawchar('\n'); } #endif /* CONFIG_BOOTX_TEXT */ - diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/pmac_time.c linux/arch/ppc/kernel/pmac_time.c --- v2.4.8/linux/arch/ppc/kernel/pmac_time.c Mon May 21 17:04:47 2001 +++ linux/arch/ppc/kernel/pmac_time.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.pmac_time.c 1.8 05/17/01 18:14:21 cort + * BK Id: SCCS/s.pmac_time.c 1.11 07/06/01 15:46:39 trini */ /* * Support for periodic interrupts (100 per second) and for getting @@ -60,8 +60,8 @@ extern struct timezone sys_tz; -__init -long pmac_time_init(void) +long __init +pmac_time_init(void) { #ifdef CONFIG_NVRAM s32 delta = 0; @@ -81,8 +81,8 @@ #endif } -__pmac -unsigned long pmac_get_rtc_time(void) +unsigned long __pmac +pmac_get_rtc_time(void) { #if defined(CONFIG_ADB_CUDA) || defined(CONFIG_ADB_PMU) struct adb_request req; @@ -122,7 +122,8 @@ return 0; } -int pmac_set_rtc_time(unsigned long nowtime) +int __pmac +pmac_set_rtc_time(unsigned long nowtime) { #if defined(CONFIG_ADB_CUDA) || defined(CONFIG_ADB_PMU) struct adb_request req; @@ -164,7 +165,8 @@ * Calibrate the decrementer register using VIA timer 1. * This is used both on powermacs and CHRP machines. */ -int __init via_calibrate_decr(void) +int __init +via_calibrate_decr(void) { struct device_node *vias; volatile unsigned char *via; @@ -211,7 +213,8 @@ /* * Reset the time after a sleep. */ -static int time_sleep_notify(struct pmu_sleep_notifier *self, int when) +static int __pmac +time_sleep_notify(struct pmu_sleep_notifier *self, int when) { static unsigned long time_diff; unsigned long flags; @@ -237,7 +240,7 @@ return PBOOK_SLEEP_OK; } -static struct pmu_sleep_notifier time_sleep_notifier = { +static struct pmu_sleep_notifier time_sleep_notifier __pmacdata = { time_sleep_notify, SLEEP_LEVEL_MISC, }; #endif /* CONFIG_PMAC_PBOOK */ @@ -247,7 +250,8 @@ * This was taken from the pmac time_init() when merging the prep/pmac * time functions. */ -void __init pmac_calibrate_decr(void) +void __init +pmac_calibrate_decr(void) { struct device_node *cpu; unsigned int freq, *fp; @@ -275,4 +279,3 @@ tb_ticks_per_jiffy = freq / HZ; tb_to_us = mulhwu_scale_factor(freq, 1000000); } - diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/ppc_ksyms.c linux/arch/ppc/kernel/ppc_ksyms.c --- v2.4.8/linux/arch/ppc/kernel/ppc_ksyms.c Tue Jul 3 17:08:18 2001 +++ linux/arch/ppc/kernel/ppc_ksyms.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.ppc_ksyms.c 1.36 06/28/01 15:50:16 paulus + * BK Id: SCCS/s.ppc_ksyms.c 1.38 07/23/01 15:35:53 trini */ #include #include @@ -251,7 +251,6 @@ EXPORT_SYMBOL(find_type_devices); EXPORT_SYMBOL(find_compatible_devices); EXPORT_SYMBOL(find_path_device); -EXPORT_SYMBOL(find_phandle); EXPORT_SYMBOL(device_is_compatible); EXPORT_SYMBOL(machine_is_compatible); EXPORT_SYMBOL(find_all_nodes); diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/prep_pci.c linux/arch/ppc/kernel/prep_pci.c --- v2.4.8/linux/arch/ppc/kernel/prep_pci.c Tue Jul 3 17:08:18 2001 +++ linux/arch/ppc/kernel/prep_pci.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.prep_pci.c 1.18 05/17/01 18:14:22 cort + * BK Id: SCCS/s.prep_pci.c 1.22 08/05/01 16:18:54 trini */ /* * PReP pci functions. @@ -848,7 +848,7 @@ switch(inb(0x0852)) { case 0xff: - Motherboard_map_name = "IBM 850/860 Portable\n"; + Motherboard_map_name = "IBM 850/860 Portable"; Motherboard_map = Nobis_pci_IRQ_map; Motherboard_routes = Nobis_pci_IRQ_routes; break; diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/prep_setup.c linux/arch/ppc/kernel/prep_setup.c --- v2.4.8/linux/arch/ppc/kernel/prep_setup.c Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/kernel/prep_setup.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.prep_setup.c 1.23 07/18/01 22:56:39 paulus + * BK Id: SCCS/s.prep_setup.c 1.26 08/05/01 16:18:54 trini */ /* * linux/arch/ppc/kernel/setup.c @@ -14,6 +14,7 @@ */ #include +#include #include #include #include @@ -147,7 +148,7 @@ } len += sprintf(buffer+len,"%sKb,", (((*(unsigned char *)0x8000080d)>>2)&1)?"512":"256"); - len += sprintf(buffer+len,"%sync\n", + len += sprintf(buffer+len,"%ssync\n", ((*(unsigned char *)0x8000080d)>>7) ? "":"a"); break; case _PREP_Motorola: @@ -495,21 +496,20 @@ void __prep prep_restart(char *cmd) { - unsigned long i = 10000; - + unsigned long i = 10000; __cli(); - /* set exception prefix high - to the prom */ - _nmask_and_or_msr(0, MSR_IP); + /* set exception prefix high - to the prom */ + _nmask_and_or_msr(0, MSR_IP); - /* make sure bit 0 (reset) is a 0 */ - outb( inb(0x92) & ~1L , 0x92 ); - /* signal a reset to system control port A - soft reset */ - outb( inb(0x92) | 1 , 0x92 ); + /* make sure bit 0 (reset) is a 0 */ + outb( inb(0x92) & ~1L , 0x92 ); + /* signal a reset to system control port A - soft reset */ + outb( inb(0x92) | 1 , 0x92 ); - while ( i != 0 ) i++; - panic("restart failed\n"); + while ( i != 0 ) i++; + panic("restart failed\n"); } /* @@ -541,27 +541,92 @@ void __prep prep_halt(void) { - unsigned long flags; + unsigned long flags; __cli(); /* set exception prefix high - to the prom */ save_flags( flags ); restore_flags( flags|MSR_IP ); - + /* make sure bit 0 (reset) is a 0 */ outb( inb(0x92) & ~1L , 0x92 ); /* signal a reset to system control port A - soft reset */ outb( inb(0x92) | 1 , 0x92 ); - + while ( 1 ) ; /* * Not reached */ } +/* + * On IBM PReP's, power management is handled by a Signetics 87c750 behind the + * Utah component on the ISA bus. To access the 750 you must write a series of + * nibbles to port 0x82a (decoded by the Utah). This is described somewhat in + * the IBM Carolina Technical Specification. + * -Hollis + */ +static void __prep +utah_sig87c750_setbit(unsigned int bytenum, unsigned int bitnum, int value) +{ + /* + * byte1: 0 0 0 1 0 d a5 a4 + * byte2: 0 0 0 1 a3 a2 a1 a0 + * + * d = the bit's value, enabled or disabled + * (a5 a4 a3) = the byte number, minus 20 + * (a2 a1 a0) = the bit number + * + * example: set the 5th bit of byte 21 (21.5) + * a5 a4 a3 = 001 (byte 1) + * a2 a1 a0 = 101 (bit 5) + * + * byte1 = 0001 0100 (0x14) + * byte2 = 0001 1101 (0x1d) + */ + unsigned char byte1=0x10, byte2=0x10; + const unsigned int pm_reg_1=0x82a; /* ISA address */ + + /* the 750's '20.0' is accessed as '0.0' through Utah (which adds 20) */ + bytenum -= 20; + + byte1 |= (!!value) << 2; /* set d */ + byte1 |= (bytenum >> 1) & 0x3; /* set a5, a4 */ + + byte2 |= (bytenum & 0x1) << 3; /* set a3 */ + byte2 |= bitnum & 0x7; /* set a2, a1, a0 */ + + outb(byte1, pm_reg_1); /* first nibble */ + mb(); + udelay(100); /* important: let controller recover */ + + outb(byte2, pm_reg_1); /* second nibble */ + mb(); + udelay(100); /* important: let controller recover */ +} + void __prep prep_power_off(void) { - prep_halt(); + if ( _prep_type == _PREP_IBM) { + /* tested on: + * Carolina's: 7248-43P, 6070 (PowerSeries 850) + * should work on: + * Carolina: 6050 (PowerSeries 830) + * 7043-140 (Tiger 1) + */ + unsigned long flags; + __cli(); + /* set exception prefix high - to the prom */ + save_flags( flags ); + restore_flags( flags|MSR_IP ); + + utah_sig87c750_setbit(21, 5, 1); /* set bit 21.5, "PMEXEC_OFF" */ + + while ( 1 ) ; + /* not reached */ + } else { + prep_halt(); + } } int __prep diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/prom.c linux/arch/ppc/kernel/prom.c --- v2.4.8/linux/arch/ppc/kernel/prom.c Wed Jul 25 17:10:18 2001 +++ linux/arch/ppc/kernel/prom.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.prom.c 1.26 06/28/01 15:50:16 paulus + * BK Id: SCCS/s.prom.c 1.35 07/25/01 14:11:37 trini */ /* * Procedures for interfacing to the Open Firmware PROM on @@ -170,6 +170,7 @@ static unsigned long check_display(unsigned long); static int prom_next_node(phandle *); static void *early_get_property(unsigned long, unsigned long, char *); +static struct device_node *find_phandle(phandle); #ifdef CONFIG_BOOTX_TEXT static void setup_disp_fake_bi(ihandle dp); @@ -202,8 +203,7 @@ * (Note that strings count as static variables.) */ -__init -static void +static void __init prom_exit() { struct prom_args args; @@ -217,8 +217,7 @@ ; } -__init -void +void __init prom_enter(void) { struct prom_args args; @@ -230,8 +229,7 @@ RELOC(prom)(&args); } -__init -static void * +static void * __init call_prom(const char *service, int nargs, int nret, ...) { va_list list; @@ -252,8 +250,7 @@ return prom_args.args[nargs]; } -__init -void +void __init prom_print(const char *msg) { const char *p, *q; @@ -282,7 +279,7 @@ } } -void +static void __init prom_print_hex(unsigned int v) { char buf[16]; @@ -298,13 +295,6 @@ prom_print(buf); } -void -prom_print_nl(void) -{ - unsigned long offset = reloc_offset(); - prom_print(RELOC("\n")); -} - unsigned long smp_chrp_cpu_nr __initdata = 0; #ifdef CONFIG_SMP @@ -328,7 +318,7 @@ * * -- Cort */ -static void +static void __init prom_hold_cpus(unsigned long mem) { extern void __secondary_hold(void); @@ -389,13 +379,13 @@ else { prom_print(RELOC("failed: ")); prom_print_hex(*(ulong *)0x4); - prom_print_nl(); + prom_print(RELOC("\n")); } } } #endif /* CONFIG_SMP */ -void +void __init bootx_init(unsigned long r4, unsigned long phys) { boot_infos_t *bi = (boot_infos_t *) r4; @@ -508,7 +498,7 @@ extern PTE *Hash; extern unsigned long Hash_size; -void +static void __init prom_alloc_htab(void) { unsigned int hsize; @@ -546,7 +536,7 @@ } #endif /* CONFIG_PPC64BRIDGE */ -static __init void +static void __init prom_instantiate_rtas(void) { ihandle prom_rtas; @@ -598,8 +588,7 @@ * We enter here early on, when the Open Firmware prom is still * handling exceptions and the MMU hash table for us. */ -__init -unsigned long +unsigned long __init prom_init(int r3, int r4, prom_entry pp) { int chrp = 0; @@ -779,7 +768,7 @@ } #ifdef CONFIG_BOOTX_TEXT -__init static void +static void __init prom_welcome(boot_infos_t* bi, unsigned long phys) { unsigned long offset = reloc_offset(); @@ -831,8 +820,7 @@ * is really badly aligned, but I didn't encounter this case * yet. */ -__init -static void +static void __init prepare_disp_BAT(void) { unsigned long offset = reloc_offset(); @@ -855,7 +843,8 @@ #endif -static int prom_set_color(ihandle ih, int i, int r, int g, int b) +static int __init +prom_set_color(ihandle ih, int i, int r, int g, int b) { struct prom_args prom_args; unsigned long offset = reloc_offset(); @@ -881,8 +870,7 @@ * So we check whether we will need to open the display, * and if so, open it now. */ -__init -static unsigned long +static unsigned long __init check_display(unsigned long mem) { phandle node; @@ -984,8 +972,7 @@ * way, xmon output should work too */ #ifdef CONFIG_BOOTX_TEXT -__init -static void +static void __init setup_disp_fake_bi(ihandle dp) { int width = 640, height = 480, depth = 8, pitch; @@ -1055,8 +1042,7 @@ } #endif -__init -static int +static int __init prom_next_node(phandle *nodep) { phandle node; @@ -1078,8 +1064,7 @@ /* * Make a copy of the device tree from the PROM. */ -__init -static unsigned long +static unsigned long __init copy_device_tree(unsigned long mem_start, unsigned long mem_end) { phandle root; @@ -1099,8 +1084,7 @@ return new_start; } -__init -static unsigned long +static unsigned long __init inspect_node(phandle node, struct device_node *dad, unsigned long mem_start, unsigned long mem_end, struct device_node ***allnextpp) @@ -1163,7 +1147,8 @@ prev_propp = &pp->next; namep = (char *) (pp + 1); pp->name = PTRUNRELOC(namep); - strcpy(namep, RELOC("linux,phandle")); + /* Work around a GCC3 bug */ + memcpy(namep, RELOC("linux,phandle"), sizeof("linux,phandle")); mem_start = ALIGN((unsigned long)namep + strlen(namep) + 1); pp->value = (unsigned char *) PTRUNRELOC(&np->node); pp->length = sizeof(np->node); @@ -1196,8 +1181,7 @@ * It traverses the device tree and fills in the name, type, * {n_}addrs and {n_}intrs fields of each node. */ -__init -void +void __init finish_device_tree(void) { unsigned long mem = (unsigned long) klimit; @@ -1251,7 +1235,7 @@ * early_get_property is used to access the device tree image prepared * by BootX very early on, before the pointers in it have been relocated. */ -__init void * +static void * __init early_get_property(unsigned long base, unsigned long node, char *prop) { struct device_node *np = (struct device_node *)(base + node); @@ -1267,8 +1251,7 @@ return 0; } -__init -static unsigned long +static unsigned long __init finish_node(struct device_node *np, unsigned long mem_start, interpret_func *ifunc, int naddrc, int nsizec) { @@ -1342,7 +1325,8 @@ /* * Find the interrupt parent of a node. */ -static struct device_node *intr_parent(struct device_node *p) +static struct device_node * __init +intr_parent(struct device_node *p) { phandle *parp; @@ -1367,7 +1351,7 @@ * Find out the size of each entry of the interrupts property * for a node. */ -static int +static int __init prom_n_intr_cells(struct device_node *np) { struct device_node *p; @@ -1393,7 +1377,7 @@ * Map an interrupt from a device up to the platform interrupt * descriptor. */ -static int +static int __init map_interrupt(unsigned int **irq, struct device_node **ictrler, struct device_node *np, unsigned int *ints, int nintrc) { @@ -1489,7 +1473,7 @@ /* * New version of finish_node_interrupts. */ -static unsigned long +static unsigned long __init finish_node_interrupts(struct device_node *np, unsigned long mem_start) { unsigned int *ints; @@ -1549,8 +1533,8 @@ * are offsets from the start of the tree. * This procedure updates the pointers. */ -__init -void relocate_nodes(void) +void __init +relocate_nodes(void) { unsigned long base; struct device_node *np; @@ -1575,7 +1559,7 @@ } } -int +int __init prom_n_addr_cells(struct device_node* np) { int* ip; @@ -1590,7 +1574,7 @@ return 1; } -int +int __init prom_n_size_cells(struct device_node* np) { int* ip; @@ -1605,8 +1589,7 @@ return 1; } -__init -static unsigned long +static unsigned long __init interpret_pci_props(struct device_node *np, unsigned long mem_start, int naddrc, int nsizec) { @@ -1652,8 +1635,7 @@ return mem_start; } -__init -static unsigned long +static unsigned long __init interpret_dbdma_props(struct device_node *np, unsigned long mem_start, int naddrc, int nsizec) { @@ -1705,8 +1687,7 @@ return mem_start; } -__init -static unsigned long +static unsigned long __init interpret_macio_props(struct device_node *np, unsigned long mem_start, int naddrc, int nsizec) { @@ -1759,8 +1740,7 @@ return mem_start; } -__init -static unsigned long +static unsigned long __init interpret_isa_props(struct device_node *np, unsigned long mem_start, int naddrc, int nsizec) { @@ -1801,8 +1781,7 @@ return mem_start; } -__init -static unsigned long +static unsigned long __init interpret_root_props(struct device_node *np, unsigned long mem_start, int naddrc, int nsizec) { @@ -1873,7 +1852,6 @@ /* * Construct and return a list of the device_nodes with a given name. */ -__openfirmware struct device_node * find_devices(const char *name) { @@ -1893,7 +1871,6 @@ /* * Construct and return a list of the device_nodes with a given type. */ -__openfirmware struct device_node * find_type_devices(const char *type) { @@ -1913,8 +1890,7 @@ /* * Returns all nodes linked together */ -__openfirmware -struct device_node * +struct device_node __openfirmware * find_all_nodes(void) { struct device_node *head, **prevp, *np; @@ -1931,7 +1907,6 @@ /* Checks if the given "compat" string matches one of the strings in * the device's "compatible" property */ -__openfirmware int device_is_compatible(struct device_node *device, const char *compat) { @@ -1957,7 +1932,6 @@ * Indicates whether the root node has a given value in its * compatible property. */ -__openfirmware int machine_is_compatible(const char *compat) { @@ -1973,7 +1947,6 @@ * Construct and return a list of the device_nodes with a given type * and compatible property. */ -__openfirmware struct device_node * find_compatible_devices(const char *type, const char *compat) { @@ -1996,7 +1969,6 @@ /* * Find the device_node with a given full_name. */ -__openfirmware struct device_node * find_path_device(const char *path) { @@ -2011,8 +1983,7 @@ /* * Find the device_node with a given phandle. */ -__openfirmware -struct device_node * +static struct device_node __init * find_phandle(phandle ph) { struct device_node *np; @@ -2027,7 +1998,6 @@ * Find a property with a given name for a given node * and return the value. */ -__openfirmware unsigned char * get_property(struct device_node *np, const char *name, int *lenp) { @@ -2045,8 +2015,7 @@ /* * Add a property to a node */ -__openfirmware -void +void __openfirmware prom_add_property(struct device_node* np, struct property* prop) { struct property **next = &np->properties; @@ -2058,8 +2027,7 @@ } #if 0 -__openfirmware -void +void __openfirmware print_properties(struct device_node *np) { struct property *pp; @@ -2113,8 +2081,7 @@ spinlock_t rtas_lock = SPIN_LOCK_UNLOCKED; /* this can be called after setup -- Cort */ -__openfirmware -int +int __openfirmware call_rtas(const char *service, int nargs, int nret, unsigned long *outputs, ...) { @@ -2154,8 +2121,7 @@ return u.words[nargs+3]; } -__init -void +void __init abort() { #ifdef CONFIG_XMON @@ -2195,8 +2161,7 @@ } /* Calc the base address of a given point (x,y) */ -__pmac -static unsigned char * +static unsigned char * __pmac calc_base(boot_infos_t *bi, int x, int y) { unsigned char *base; @@ -2210,7 +2175,7 @@ } /* Adjust the display to a new resolution */ -void +void __openfirmware bootx_update_display(unsigned long phys, int width, int height, int depth, int pitch) { @@ -2239,8 +2204,7 @@ g_max_loc_Y = height / 16; } -__pmac -static void +static void __pmac clearscreen(void) { unsigned long offset = reloc_offset(); @@ -2264,8 +2228,7 @@ __asm__ __volatile__ ("dcbst 0,%0" :: "r" (addr)); } -__pmac -static void +static void __pmac flushscreen(void) { unsigned long offset = reloc_offset(); @@ -2287,8 +2250,7 @@ } #ifndef NO_SCROLL -__pmac -static void +static void __pmac scrollscreen(void) { unsigned long offset = reloc_offset(); @@ -2324,8 +2286,7 @@ } #endif /* ndef NO_SCROLL */ -__pmac -void +void __pmac prom_drawchar(char c) { unsigned long offset = reloc_offset(); @@ -2375,8 +2336,7 @@ #endif } -__pmac -void +void __pmac prom_drawstring(const char *c) { unsigned long offset = reloc_offset(); @@ -2387,8 +2347,7 @@ prom_drawchar(*c++); } -__pmac -void +void __pmac prom_drawhex(unsigned long v) { static char hex_table[] = "0123456789abcdef"; @@ -2406,9 +2365,7 @@ prom_drawchar(RELOC(hex_table)[(v >> 0) & 0x0000000FUL]); } - -__pmac -static void +static void __pmac draw_byte(unsigned char c, long locX, long locY) { unsigned long offset = reloc_offset(); @@ -2432,8 +2389,7 @@ } } -__pmac -static unsigned long expand_bits_8[16] = { +static unsigned long expand_bits_8[16] __pmacdata = { 0x00000000, 0x000000ff, 0x0000ff00, @@ -2452,17 +2408,14 @@ 0xffffffff }; -__pmac -static unsigned long expand_bits_16[4] = { +static unsigned long expand_bits_16[4] __pmacdata = { 0x00000000, 0x0000ffff, 0xffff0000, 0xffffffff }; - -__pmac -static void +static void __pmac draw_byte_32(unsigned char *font, unsigned long *base, int rb) { int l, bits; @@ -2484,8 +2437,7 @@ } } -__pmac -static void +static void __pmac draw_byte_16(unsigned char *font, unsigned long *base, int rb) { int l, bits; @@ -2505,8 +2457,7 @@ } } -__pmac -static void +static void __pmac draw_byte_8(unsigned char *font, unsigned long *base, int rb) { int l, bits; @@ -2524,8 +2475,7 @@ } } -__pmac -static unsigned char vga_font[cmapsz] = { +static unsigned char vga_font[cmapsz] __pmacdata = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff, @@ -2871,4 +2821,3 @@ }; #endif /* CONFIG_BOOTX_TEXT */ - diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/setup.c linux/arch/ppc/kernel/setup.c --- v2.4.8/linux/arch/ppc/kernel/setup.c Tue Jul 3 17:08:18 2001 +++ linux/arch/ppc/kernel/setup.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.setup.c 1.44 06/28/01 08:01:06 trini + * BK Id: SCCS/s.setup.c 1.46 07/26/01 14:18:18 trini */ /* * Common prep/pmac/chrp boot and setup code. @@ -574,7 +574,6 @@ initrd_below_start_ok = 1; } #endif - cmd_line[0] = 0; chosen = find_devices("chosen"); if (chosen != NULL) { p = get_property(chosen, "bootargs", NULL); diff -u --recursive --new-file v2.4.8/linux/arch/ppc/kernel/traps.c linux/arch/ppc/kernel/traps.c --- v2.4.8/linux/arch/ppc/kernel/traps.c Tue Jul 3 17:08:18 2001 +++ linux/arch/ppc/kernel/traps.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.traps.c 1.14 06/15/01 13:00:20 paulus + * BK Id: SCCS/s.traps.c 1.16 07/31/01 10:53:34 trini */ /* * linux/arch/ppc/kernel/traps.c @@ -40,7 +40,7 @@ #include extern int fix_alignment(struct pt_regs *); -extern void bad_page_fault(struct pt_regs *, unsigned long); +extern void bad_page_fault(struct pt_regs *, unsigned long, int sig); #ifdef CONFIG_XMON extern void xmon(struct pt_regs *regs); @@ -317,7 +317,7 @@ if (user_mode(regs)) force_sig(SIGSEGV, current); else - bad_page_fault(regs, regs->dar); + bad_page_fault(regs, regs->dar, SIGSEGV); return; } _exception(SIGBUS, regs); diff -u --recursive --new-file v2.4.8/linux/arch/ppc/mm/init.c linux/arch/ppc/mm/init.c --- v2.4.8/linux/arch/ppc/mm/init.c Tue Jul 3 17:08:18 2001 +++ linux/arch/ppc/mm/init.c Sun Aug 12 12:43:26 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.init.c 1.27 06/28/01 15:50:17 paulus + * BK Id: SCCS/s.init.c 1.30 07/06/01 09:19:29 trini */ /* * PowerPC version @@ -98,7 +98,6 @@ extern char __prep_begin, __prep_end; extern char __chrp_begin, __chrp_end; extern char __pmac_begin, __pmac_end; -extern char __apus_begin, __apus_end; extern char __openfirmware_begin, __openfirmware_end; unsigned long ioremap_base; unsigned long ioremap_bot; @@ -719,14 +718,16 @@ unsigned long cnt = 0; while (start < end) { - clear_bit(PG_reserved, &virt_to_page(start)->flags); + ClearPageReserved(virt_to_page(start)); set_page_count(virt_to_page(start), 1); free_page(start); cnt++; start += PAGE_SIZE; } - if (cnt) + if (cnt) { printk(" %ldk %s", PGTOKB(cnt), name); + totalram_pages += cnt; + } } void free_initmem(void) @@ -744,8 +745,6 @@ FREESEC(chrp); if (_machine != _MACH_prep) FREESEC(prep); - if (_machine != _MACH_apus) - FREESEC(apus); if (!have_of) FREESEC(openfirmware); printk("\n"); diff -u --recursive --new-file v2.4.8/linux/arch/ppc/vmlinux.lds linux/arch/ppc/vmlinux.lds --- v2.4.8/linux/arch/ppc/vmlinux.lds Tue Jul 3 17:08:18 2001 +++ linux/arch/ppc/vmlinux.lds Sun Aug 12 12:43:26 2001 @@ -117,20 +117,6 @@ __chrp_end = .; . = ALIGN(4096); - __apus_begin = .; - .text.apus : { *(.text.apus) } - .data.apus : { *(.data.apus) } - . = ALIGN(4096); - __apus_end = .; - - . = ALIGN(4096); - __apus_begin = .; - .text.apus : { *(.text.apus) } - .data.apus : { *(.data.apus) } - . = ALIGN(4096); - __apus_end = .; - - . = ALIGN(4096); __openfirmware_begin = .; .text.openfirmware : { *(.text.openfirmware) } .data.openfirmware : { *(.data.openfirmware) } diff -u --recursive --new-file v2.4.8/linux/arch/s390/kernel/entry.S linux/arch/s390/kernel/entry.S --- v2.4.8/linux/arch/s390/kernel/entry.S Sun Aug 12 13:27:58 2001 +++ linux/arch/s390/kernel/entry.S Sun Aug 12 10:38:47 2001 @@ -81,7 +81,7 @@ sigpending = 8 need_resched = 24 tsk_ptrace = 28 -processor = 60 +processor = 56 /* * Base Address of this Module --- saved in __LC_ENTRY_BASE @@ -197,19 +197,10 @@ sysc_return: tm SP_PSW+1(%r15),0x01 # returning to user ? - bno BASED(sysc_leave) # no-> skip bottom half, resched & signal -# -# check, if bottom-half has to be done -# - l %r1,processor(%r9) # get cpu number from task struture - sll %r1,L1_CACHE_SHIFT - al %r1,BASED(.Lirq_stat) # get address of irq_stat - icm %r0,15,0(%r1) # test irq_stat[#cpu].__softirq_pending - bnz BASED(sysc_handle_bottom_half) + bno BASED(sysc_leave) # no-> skip resched & signal # # check, if reschedule is needed # -sysc_return_bh: icm %r0,15,need_resched(%r9) # get need_resched from task_struct bnz BASED(sysc_reschedule) icm %r0,15,sigpending(%r9) # get sigpending from task_struct @@ -248,15 +239,6 @@ # -# call do_softirq and return from syscall, if interrupt-level -# is zero -# -sysc_handle_bottom_half: - l %r1,BASED(.Ldo_softirq) - la %r14,BASED(sysc_return_bh) - br %r1 # call do_softirq - -# # call schedule with sysc_return as return-address # sysc_reschedule: @@ -708,18 +690,19 @@ basr %r14,%r1 # branch to standard irq handler io_return: - tm SP_PSW+1(%r15),0x01 # returning to user ? - bno BASED(io_leave) # no-> skip resched & signal - stosm 24(%r15),0x03 # reenable interrupts # # check, if bottom-half has to be done # - l %r1,processor(%r9) # get cpu number from task struture - sll %r1,L1_CACHE_SHIFT - al %r1,BASED(.Lirq_stat) # get address of irq_stat - icm %r0,15,0(%r1) # test irq_stat[#cpu].__softirq_pending + l %r1,processor(%r9) # get cpu number from task struture + sll %r1,L1_CACHE_SHIFT + al %r1,BASED(.Lirq_stat) # get address of irq_stat + icm %r0,15,0(%r1) # test irq_stat[#cpu].__softirq_pending bnz BASED(io_handle_bottom_half) -io_return_bh: +io_return_bh: + + tm SP_PSW+1(%r15),0x01 # returning to user ? + bno BASED(io_leave) # no-> skip resched & signal + stosm 24(%r15),0x03 # reenable interrupts # # check, if reschedule is needed # @@ -732,12 +715,11 @@ RESTORE_ALL # -# call do_softirq and return from syscall, if interrupt-level -# is zero +# call do_softirq # -io_handle_bottom_half: +io_handle_bottom_half: l %r1,BASED(.Ldo_softirq) - la %r14,BASED(io_return_bh) + la %r14,BASED(io_return_bh) br %r1 # call do_softirq # diff -u --recursive --new-file v2.4.8/linux/arch/s390/kernel/process.c linux/arch/s390/kernel/process.c --- v2.4.8/linux/arch/s390/kernel/process.c Sun Aug 12 13:27:58 2001 +++ linux/arch/s390/kernel/process.c Sun Aug 12 10:38:47 2001 @@ -63,12 +63,6 @@ wait_psw.mask = _WAIT_PSW_MASK; wait_psw.addr = (unsigned long) &&idle_wakeup | 0x80000000L; while(1) { - if (softirq_pending(smp_processor_id())) { - do_softirq(); - __sti(); - if (!current->need_resched) - continue; - } if (current->need_resched) { schedule(); check_pgt_cache(); diff -u --recursive --new-file v2.4.8/linux/arch/s390/vmlinux-shared.lds linux/arch/s390/vmlinux-shared.lds --- v2.4.8/linux/arch/s390/vmlinux-shared.lds Wed Dec 31 16:00:00 1969 +++ linux/arch/s390/vmlinux-shared.lds Sun Aug 12 10:38:48 2001 @@ -0,0 +1,84 @@ +/* ld script to make s390 Linux kernel + * Written by Martin Schwidefsky (schwidefsky@de.ibm.com) + */ +OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390") +OUTPUT_ARCH(s390) +ENTRY(_start) +SECTIONS +{ + . = 0x00000000; + _text = .; /* Text and read-only data */ + .text : { + *(.text) + *(.fixup) + *(.gnu.warning) + } = 0x0700 + .text.lock : { *(.text.lock) } /* out-of-line lock text */ + .rodata : { *(.rodata) } + .kstrtab : { *(.kstrtab) } + + . = ALIGN(16); /* Exception table */ + __start___ex_table = .; + __ex_table : { *(__ex_table) } + __stop___ex_table = .; + + __start___ksymtab = .; /* Kernel symbol table */ + __ksymtab : { *(__ksymtab) } + __stop___ksymtab = .; + + __start___kallsyms = .; /* All kernel symbols */ + __kallsyms : { *(__kallsyms) } + __stop___kallsyms = .; + + . = ALIGN(1048576); /* VM shared segments are 1MB aligned */ + + _etext = .; /* End of text section */ + + .data : { /* Data */ + *(.data) + CONSTRUCTORS + } + + _edata = .; /* End of data section */ + + . = ALIGN(8192); /* init_task */ + .data.init_task : { *(.data.init_task) } + + . = ALIGN(4096); /* Init code and data */ + __init_begin = .; + .text.init : { *(.text.init) } + .data.init : { *(.data.init) } + . = ALIGN(4096); + __init_end = .; + + __setup_start = .; + .setup.init : { *(.setup.init) } + __setup_end = .; + __initcall_start = .; + .initcall.init : { *(.initcall.init) } + __initcall_end = .; + . = ALIGN(4096); + __init_end = .; + + . = ALIGN(32); + .data.cacheline_aligned : { *(.data.cacheline_aligned) } + + . = ALIGN(4096); + .data.page_aligned : { *(.data.idt) } + + + __bss_start = .; /* BSS */ + .bss : { + *(.bss) + } + _end = . ; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } +} diff -u --recursive --new-file v2.4.8/linux/arch/s390x/kernel/entry.S linux/arch/s390x/kernel/entry.S --- v2.4.8/linux/arch/s390x/kernel/entry.S Sun Aug 12 13:27:58 2001 +++ linux/arch/s390x/kernel/entry.S Sun Aug 12 10:38:48 2001 @@ -193,18 +193,8 @@ tm SP_PSW+1(%r15),0x01 # returning to user ? jno sysc_leave # no-> skip bottom half, resched & signal # -# check, if bottom-half has to be done -# - lgf %r1,processor(%r9) # get cpu number from task struture - larl %r2,irq_stat - sll %r1,L1_CACHE_SHIFT - la %r1,0(%r1,%r2) - icm %r0,15,0(%r1) # test irq_stat[#cpu].__softirq_pending - jnz sysc_handle_bottom_half -# # check, if reschedule is needed # -sysc_return_bh: lg %r0,need_resched(%r9) # get need_resched from task_struct ltgr %r0,%r0 jnz sysc_reschedule @@ -239,15 +229,6 @@ larl %r14,sysc_return jg syscall_trace # return point is sysc_return - -# -# call do_softirq and return from syscall, if interrupt-level -# is zero -# -sysc_handle_bottom_half: - larl %r14,sysc_return_bh - jg do_softirq # return point is sysc_return_bh - # # call schedule with sysc_return as return-address # @@ -698,9 +679,6 @@ brasl %r14,do_IRQ # call standard irq handler io_return: - tm SP_PSW+1(%r15),0x01 # returning to user ? - jno io_leave # no-> skip resched & signal - stosm 48(%r15),0x03 # reenable interrupts # # check, if bottom-half has to be done # @@ -711,6 +689,10 @@ icm %r0,15,0(%r1) # test irq_stat[#cpu].__softirq_pending jnz io_handle_bottom_half io_return_bh: + + tm SP_PSW+1(%r15),0x01 # returning to user ? + jno io_leave # no-> skip resched & signal + stosm 48(%r15),0x03 # reenable interrupts # # check, if reschedule is needed # diff -u --recursive --new-file v2.4.8/linux/arch/s390x/kernel/ioctl32.c linux/arch/s390x/kernel/ioctl32.c --- v2.4.8/linux/arch/s390x/kernel/ioctl32.c Tue Feb 13 14:13:44 2001 +++ linux/arch/s390x/kernel/ioctl32.c Sun Aug 12 10:38:48 2001 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -349,14 +350,14 @@ IOCTL32_DEFAULT(FIBMAP), IOCTL32_DEFAULT(FIGETBSZ), + IOCTL32_DEFAULT(DASDAPIVER), IOCTL32_DEFAULT(BIODASDDISABLE), IOCTL32_DEFAULT(BIODASDENABLE), IOCTL32_DEFAULT(BIODASDRSRV), IOCTL32_DEFAULT(BIODASDRLSE), IOCTL32_DEFAULT(BIODASDSLCK), - IOCTL32_DEFAULT(BIODASDRSID), - IOCTL32_DEFAULT(BIODASDFORMAT), - IOCTL32_DEFAULT(BIODASDRWTB), + IOCTL32_DEFAULT(BIODASDINFO), + IOCTL32_DEFAULT(BIODASDFMT), IOCTL32_DEFAULT(BLKRRPART), diff -u --recursive --new-file v2.4.8/linux/arch/s390x/kernel/linux32.c linux/arch/s390x/kernel/linux32.c --- v2.4.8/linux/arch/s390x/kernel/linux32.c Sun Aug 12 13:27:58 2001 +++ linux/arch/s390x/kernel/linux32.c Sun Aug 12 15:06:07 2001 @@ -1204,7 +1204,7 @@ }; static int fillonedir(void * __buf, const char * name, int namlen, - off_t offset, ino_t ino, unsigned int d_type) + loff_t offset, ino_t ino, unsigned int d_type) { struct readdir_callback32 * buf = (struct readdir_callback32 *) __buf; struct old_linux_dirent32 * dirent; @@ -1259,7 +1259,7 @@ int error; }; -static int filldir(void * __buf, const char * name, int namlen, off_t offset, ino_t ino, +static int filldir(void * __buf, const char * name, int namlen, loff_t offset, ino_t ino, unsigned int d_type) { struct linux_dirent32 * dirent; diff -u --recursive --new-file v2.4.8/linux/arch/s390x/kernel/process.c linux/arch/s390x/kernel/process.c --- v2.4.8/linux/arch/s390x/kernel/process.c Sun Aug 12 13:27:58 2001 +++ linux/arch/s390x/kernel/process.c Sun Aug 12 10:38:48 2001 @@ -63,12 +63,6 @@ wait_psw.mask = _WAIT_PSW_MASK; wait_psw.addr = (unsigned long) &&idle_wakeup; while(1) { - if (softirq_pending(smp_processor_id())) { - do_softirq(); - __sti(); - if (!current->need_resched) - continue; - } if (current->need_resched) { schedule(); check_pgt_cache(); diff -u --recursive --new-file v2.4.8/linux/arch/s390x/vmlinux-shared.lds linux/arch/s390x/vmlinux-shared.lds --- v2.4.8/linux/arch/s390x/vmlinux-shared.lds Wed Dec 31 16:00:00 1969 +++ linux/arch/s390x/vmlinux-shared.lds Sun Aug 12 10:38:48 2001 @@ -0,0 +1,84 @@ +/* ld script to make s390 Linux kernel + * Written by Martin Schwidefsky (schwidefsky@de.ibm.com) + */ +OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390") +OUTPUT_ARCH(s390) +ENTRY(_start) +SECTIONS +{ + . = 0x00000000; + _text = .; /* Text and read-only data */ + .text : { + *(.text) + *(.fixup) + *(.gnu.warning) + } = 0x0700 + .text.lock : { *(.text.lock) } /* out-of-line lock text */ + .rodata : { *(.rodata) } + .kstrtab : { *(.kstrtab) } + + . = ALIGN(16); /* Exception table */ + __start___ex_table = .; + __ex_table : { *(__ex_table) } + __stop___ex_table = .; + + __start___ksymtab = .; /* Kernel symbol table */ + __ksymtab : { *(__ksymtab) } + __stop___ksymtab = .; + + __start___kallsyms = .; /* All kernel symbols */ + __kallsyms : { *(__kallsyms) } + __stop___kallsyms = .; + + . = ALIGN(1048576); /* VM shared segments are 1MB aligned */ + + _etext = .; /* End of text section */ + + .data : { /* Data */ + *(.data) + CONSTRUCTORS + } + + _edata = .; /* End of data section */ + + . = ALIGN(16384); /* init_task */ + .data.init_task : { *(.data.init_task) } + + . = ALIGN(4096); /* Init code and data */ + __init_begin = .; + .text.init : { *(.text.init) } + .data.init : { *(.data.init) } + . = ALIGN(4096); + __init_end = .; + + __setup_start = .; + .setup.init : { *(.setup.init) } + __setup_end = .; + __initcall_start = .; + .initcall.init : { *(.initcall.init) } + __initcall_end = .; + . = ALIGN(4096); + __init_end = .; + + . = ALIGN(32); + .data.cacheline_aligned : { *(.data.cacheline_aligned) } + + . = ALIGN(4096); + .data.page_aligned : { *(.data.idt) } + + + __bss_start = .; /* BSS */ + .bss : { + *(.bss) + } + _end = . ; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } +} diff -u --recursive --new-file v2.4.8/linux/arch/sparc/kernel/head.S linux/arch/sparc/kernel/head.S --- v2.4.8/linux/arch/sparc/kernel/head.S Tue May 1 20:59:24 2001 +++ linux/arch/sparc/kernel/head.S Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: head.S,v 1.104 2001/04/27 07:02:41 davem Exp $ +/* $Id: head.S,v 1.105 2001/08/12 09:08:56 davem Exp $ * head.S: The initial boot code for the Sparc port of Linux. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -160,7 +160,7 @@ t_bad7e:BAD_TRAP(0x7e) BAD_TRAP(0x7f) t_sunos:SUNOS_SYSCALL_TRAP /* SunOS System Call */ t_sbkpt:BREAKPOINT_TRAP /* Software Breakpoint/KGDB */ -t_divz: BAD_TRAP(0x82) /* Divide by zero trap */ +t_divz: TRAP_ENTRY(0x82, do_hw_divzero) /* Divide by zero trap */ t_flwin:TRAP_ENTRY(0x83, do_flush_windows) /* Flush Windows Trap */ t_clwin:BAD_TRAP(0x84) /* Clean Windows Trap */ t_rchk: BAD_TRAP(0x85) /* Range Check */ @@ -245,7 +245,7 @@ BAD_TRAP(0x7e) BAD_TRAP(0x7f) SUNOS_SYSCALL_TRAP BREAKPOINT_TRAP - BAD_TRAP(0x82) + TRAP_ENTRY(0x82, do_hw_divzero) TRAP_ENTRY(0x83, do_flush_windows) BAD_TRAP(0x84) BAD_TRAP(0x85) BAD_TRAP(0x86) BAD_TRAP(0x87) SOLARIS_SYSCALL_TRAP NETBSD_SYSCALL_TRAP BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c) @@ -313,7 +313,7 @@ BAD_TRAP(0x7e) BAD_TRAP(0x7f) SUNOS_SYSCALL_TRAP BREAKPOINT_TRAP - BAD_TRAP(0x82) + TRAP_ENTRY(0x82, do_hw_divzero) TRAP_ENTRY(0x83, do_flush_windows) BAD_TRAP(0x84) BAD_TRAP(0x85) BAD_TRAP(0x86) BAD_TRAP(0x87) SOLARIS_SYSCALL_TRAP NETBSD_SYSCALL_TRAP BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c) @@ -381,7 +381,7 @@ BAD_TRAP(0x7e) BAD_TRAP(0x7f) SUNOS_SYSCALL_TRAP BREAKPOINT_TRAP - BAD_TRAP(0x82) + TRAP_ENTRY(0x82, do_hw_divzero) TRAP_ENTRY(0x83, do_flush_windows) BAD_TRAP(0x84) BAD_TRAP(0x85) BAD_TRAP(0x86) BAD_TRAP(0x87) SOLARIS_SYSCALL_TRAP NETBSD_SYSCALL_TRAP BAD_TRAP(0x8a) BAD_TRAP(0x8b) BAD_TRAP(0x8c) diff -u --recursive --new-file v2.4.8/linux/arch/sparc/kernel/sys_sunos.c linux/arch/sparc/kernel/sys_sunos.c --- v2.4.8/linux/arch/sparc/kernel/sys_sunos.c Tue May 1 20:59:24 2001 +++ linux/arch/sparc/kernel/sys_sunos.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: sys_sunos.c,v 1.134 2001/04/27 07:02:42 davem Exp $ +/* $Id: sys_sunos.c,v 1.135 2001/08/13 14:40:10 davem Exp $ * sys_sunos.c: SunOS specific syscall compatibility support. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -322,7 +322,7 @@ #define ROUND_UP(x) (((x)+sizeof(long)-1) & ~(sizeof(long)-1)) static int sunos_filldir(void * __buf, const char * name, int namlen, - off_t offset, ino_t ino, unsigned int d_type) + loff_t offset, ino_t ino, unsigned int d_type) { struct sunos_dirent * dirent; struct sunos_dirent_callback * buf = (struct sunos_dirent_callback *) __buf; @@ -403,7 +403,7 @@ }; static int sunos_filldirentry(void * __buf, const char * name, int namlen, - off_t offset, ino_t ino, unsigned int d_type) + loff_t offset, ino_t ino, unsigned int d_type) { struct sunos_direntry * dirent; struct sunos_direntry_callback * buf = (struct sunos_direntry_callback *) __buf; diff -u --recursive --new-file v2.4.8/linux/arch/sparc/mm/extable.c linux/arch/sparc/mm/extable.c --- v2.4.8/linux/arch/sparc/mm/extable.c Sun Aug 12 13:27:59 2001 +++ linux/arch/sparc/mm/extable.c Sun Aug 12 11:23:32 2001 @@ -43,6 +43,8 @@ return 0; } +extern spinlock_t modlist_lock; + unsigned long search_exception_table(unsigned long addr, unsigned long *g2) { diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/config.in linux/arch/sparc64/config.in --- v2.4.8/linux/arch/sparc64/config.in Wed Jul 25 17:10:19 2001 +++ linux/arch/sparc64/config.in Sun Aug 12 11:23:32 2001 @@ -1,4 +1,4 @@ -# $Id: config.in,v 1.148 2001/07/20 07:10:35 davem Exp $ +# $Id: config.in,v 1.149 2001/08/09 17:47:51 davem Exp $ # For a description of the syntax of this configuration file, # see the Configure script. # @@ -251,9 +251,6 @@ dep_tristate ' Creator/Creator3D' CONFIG_DRM_FFB $CONFIG_DRM dep_tristate ' 3dfx Banshee/Voodoo3+' CONFIG_DRM_TDFX $CONFIG_DRM dep_tristate ' ATI Rage 128' CONFIG_DRM_R128 $CONFIG_DRM -if [ "$CONFIG_DRM_R128" != "n" ]; then - define_bool CONFIG_AGP y -fi endmenu source drivers/input/Config.in diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/defconfig linux/arch/sparc64/defconfig --- v2.4.8/linux/arch/sparc64/defconfig Sun Aug 12 13:27:59 2001 +++ linux/arch/sparc64/defconfig Tue Aug 14 19:57:28 2001 @@ -527,8 +527,7 @@ CONFIG_DRM=y CONFIG_DRM_FFB=m CONFIG_DRM_TDFX=m -CONFIG_DRM_R128=m -CONFIG_AGP=y +# CONFIG_DRM_R128 is not set # # Input core support @@ -662,8 +661,10 @@ # Sound # CONFIG_SOUND=m +CONFIG_SOUND_BT878=m # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set # CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set @@ -672,6 +673,7 @@ # CONFIG_SOUND_MAESTRO is not set # CONFIG_SOUND_MAESTRO3 is not set # CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set # CONFIG_SOUND_SONICVIBES is not set CONFIG_SOUND_TRIDENT=m # CONFIG_SOUND_MSNDCLAS is not set diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/dtlb_backend.S linux/arch/sparc64/kernel/dtlb_backend.S --- v2.4.8/linux/arch/sparc64/kernel/dtlb_backend.S Mon Jan 31 23:37:19 2000 +++ linux/arch/sparc64/kernel/dtlb_backend.S Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: dtlb_backend.S,v 1.9 2000/01/31 04:59:12 davem Exp $ +/* $Id: dtlb_backend.S,v 1.12 2001/08/13 20:41:54 kanoj Exp $ * dtlb_backend.S: Back end to DTLB miss replacement strategy. * This is included directly into the trap table. * @@ -10,22 +10,20 @@ #define VPTE_SHIFT (PAGE_SHIFT - 3) #define PMD_SHIFT (23 - PAGE_SHIFT + 3) #define PGD_SHIFT (34 - PAGE_SHIFT + 3) -#define VPTE_BITS (_PAGE_CP | _PAGE_CV | _PAGE_P | _PAGE_W) +#define VPTE_BITS (_PAGE_CP | _PAGE_CV | _PAGE_P) /* Ways we can get here: * * 1) Nucleus loads and stores to/from PA-->VA direct mappings at tl>1. * 2) Nucleus loads and stores to/from user/kernel window save areas. - * 3) VPTE misses from dtlb_base, dtlb_prot, and itlb_base. But this only - * happens for non-nucleus contexts. Nucleus VPTE's cannot work because - * of how OBP uses the same part of the address space in ctx 0. + * 3) VPTE misses from dtlb_base and itlb_base. */ /* TLB1 ** ICACHE line 1: tl1 DTLB and quick VPTE miss */ ldxa [%g1 + %g1] ASI_DMMU, %g4 ! Get TAG_ACCESS add %g3, %g3, %g5 ! Compute VPTE base cmp %g4, %g5 ! VPTE miss? - blu,pn %xcc, .-0x4004 ! Fall to tl0 miss + blu,pn %xcc, from_tl1_trap ! Fall to tl0 miss andcc %g4, TAG_CONTEXT_BITS, %g5 ! From Nucleus? (for tl0 miss) sllx %g6, VPTE_SHIFT, %g4 ! Position TAG_ACCESS or %g4, %g5, %g4 ! Prepare TAG_ACCESS @@ -59,10 +57,9 @@ stxa %g5, [%g0] ASI_DTLB_DATA_IN ! Load VPTE into TLB stxa %g4, [%g1 + %g1] ASI_DMMU ! Restore previous TAG_ACCESS retry ! Load PTE once again -vpte_noent: - mov TLB_SFSR, %g1 ! Restore %g1 value - stxa %g4, [%g1 + %g1] ASI_DMMU ! Restore previous TAG_ACCESS - done ! Slick trick + nop + nop + nop #undef TAG_CONTEXT_BITS #undef VPTE_SHIFT diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/dtlb_base.S linux/arch/sparc64/kernel/dtlb_base.S --- v2.4.8/linux/arch/sparc64/kernel/dtlb_base.S Sun Mar 25 18:14:21 2001 +++ linux/arch/sparc64/kernel/dtlb_base.S Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: dtlb_base.S,v 1.9 2001/03/22 00:12:32 davem Exp $ +/* $Id: dtlb_base.S,v 1.10 2001/08/13 20:41:54 kanoj Exp $ * dtlb_base.S: Front end to DTLB miss replacement strategy. * This is included directly into the trap table. * @@ -51,6 +51,7 @@ /* DTLB ** ICACHE line 1: Quick user TLB misses */ ldxa [%g1 + %g1] ASI_DMMU, %g4 ! Get TAG_ACCESS andcc %g4, TAG_CONTEXT_BITS, %g0 ! From Nucleus? +from_tl1_trap: be,pn %xcc, 3f ! Yep, special processing srax %g4, VPTE_SHIFT, %g6 ! Create VPTE offset ldxa [%g3 + %g6] ASI_S, %g5 ! Load VPTE diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/entry.S linux/arch/sparc64/kernel/entry.S --- v2.4.8/linux/arch/sparc64/kernel/entry.S Thu Apr 12 12:10:25 2001 +++ linux/arch/sparc64/kernel/entry.S Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: entry.S,v 1.128 2001/03/28 10:56:34 davem Exp $ +/* $Id: entry.S,v 1.129 2001/08/13 20:41:54 kanoj Exp $ * arch/sparc64/kernel/entry.S: Sparc64 trap low-level entry points. * * Copyright (C) 1995,1997 David S. Miller (davem@caip.rutgers.edu) @@ -39,6 +39,11 @@ or %g5, %lo(0), %g5 ! This is patched too ba,pt %xcc, sparc64_kpte_continue ! Part of dtlb_backend add %g1, %g1, %g1 ! Finish PMD offset adjustment + +vpte_noent: + mov TLB_SFSR, %g1 ! Restore %g1 value + stxa %g4, [%g1 + %g1] ASI_DMMU ! Restore previous TAG_ACCESS + done ! Slick trick /* This is trivial with the new code... */ .globl do_fpdis diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/pci_common.c linux/arch/sparc64/kernel/pci_common.c --- v2.4.8/linux/arch/sparc64/kernel/pci_common.c Tue Jul 3 17:08:19 2001 +++ linux/arch/sparc64/kernel/pci_common.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: pci_common.c,v 1.26 2001/06/28 01:32:18 davem Exp $ +/* $Id: pci_common.c,v 1.27 2001/08/12 13:18:22 davem Exp $ * pci_common.c: PCI controller common support. * * Copyright (C) 1999 David S. Miller (davem@redhat.com) @@ -723,12 +723,12 @@ * ranges. -DaveM */ if (pdev->bus->number == pbm->pci_first_busno) { - slot = (pdev->devfn >> 3) - 1; + slot = (pdev->devfn >> 3) - pbm->pci_first_slot; } else { /* Underneath a bridge, use slot number of parent * bridge. */ - slot = (pdev->bus->self->devfn >> 3) - 1; + slot = (pdev->bus->self->devfn >> 3) - pbm->pci_first_slot; } slot = slot << 2; diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/pci_psycho.c linux/arch/sparc64/kernel/pci_psycho.c --- v2.4.8/linux/arch/sparc64/kernel/pci_psycho.c Tue Jul 3 17:08:19 2001 +++ linux/arch/sparc64/kernel/pci_psycho.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: pci_psycho.c,v 1.26 2001/06/13 06:34:30 davem Exp $ +/* $Id: pci_psycho.c,v 1.27 2001/08/12 13:18:23 davem Exp $ * pci_psycho.c: PSYCHO/U2P specific PCI controller support. * * Copyright (C) 1997, 1998, 1999 David S. Miller (davem@caipfs.rutgers.edu) @@ -1477,14 +1477,23 @@ { unsigned int busrange[2]; struct pci_pbm_info *pbm; - int err; + char namebuf[64]; + int err, len; if (is_pbm_a) { pbm = &p->pbm_A; + pbm->pci_first_slot = 1; pbm->io_space.start = p->controller_regs + PSYCHO_IOSPACE_A; pbm->mem_space.start = p->controller_regs + PSYCHO_MEMSPACE_A; } else { pbm = &p->pbm_B; + pbm->pci_first_slot = 1; + len = prom_getproperty(prom_root_node, "name", + namebuf, sizeof(namebuf)); + if (len > 0) { + if (!strcmp(namebuf, "SUNW,Ultra-1-Engine")) + pbm->pci_first_slot = 2; + } pbm->io_space.start = p->controller_regs + PSYCHO_IOSPACE_B; pbm->mem_space.start = p->controller_regs + PSYCHO_MEMSPACE_B; } diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/pci_sabre.c linux/arch/sparc64/kernel/pci_sabre.c --- v2.4.8/linux/arch/sparc64/kernel/pci_sabre.c Tue Jul 3 17:08:19 2001 +++ linux/arch/sparc64/kernel/pci_sabre.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: pci_sabre.c,v 1.37 2001/06/13 06:34:30 davem Exp $ +/* $Id: pci_sabre.c,v 1.38 2001/08/12 13:18:23 davem Exp $ * pci_sabre.c: Sabre specific PCI controller support. * * Copyright (C) 1997, 1998, 1999 David S. Miller (davem@caipfs.rutgers.edu) @@ -1395,6 +1395,7 @@ pbm = &p->pbm_A; pbm->parent = p; pbm->prom_node = node; + pbm->pci_first_slot = 1; pbm->pci_first_busno = busrange[0]; pbm->pci_last_busno = busrange[1]; for (err = pbm->pci_first_busno; diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/pci_schizo.c linux/arch/sparc64/kernel/pci_schizo.c --- v2.4.8/linux/arch/sparc64/kernel/pci_schizo.c Tue Jul 3 17:08:19 2001 +++ linux/arch/sparc64/kernel/pci_schizo.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: pci_schizo.c,v 1.19 2001/06/20 21:31:00 davem Exp $ +/* $Id: pci_schizo.c,v 1.20 2001/08/12 13:18:23 davem Exp $ * pci_schizo.c: SCHIZO specific PCI controller support. * * Copyright (C) 2001 David S. Miller (davem@redhat.com) @@ -1684,6 +1684,7 @@ pbm->parent = p; pbm->prom_node = prom_node; + pbm->pci_first_slot = 1; prom_getstring(prom_node, "name", pbm->prom_name, sizeof(pbm->prom_name)); diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/smp.c linux/arch/sparc64/kernel/smp.c --- v2.4.8/linux/arch/sparc64/kernel/smp.c Sun Aug 12 13:27:59 2001 +++ linux/arch/sparc64/kernel/smp.c Sun Aug 12 11:23:32 2001 @@ -59,6 +59,15 @@ /* XXX implement me XXX */ } +static int max_cpus = NR_CPUS; +static int __init maxcpus(char *str) +{ + get_option(&str, &max_cpus); + return 1; +} + +__setup("maxcpus=", maxcpus); + int smp_info(char *buf) { int len = 7, i; @@ -251,6 +260,8 @@ if (i == boot_cpu_id) continue; + if ((cpucount + 1) == max_cpus) + break; if (cpu_present_map & (1UL << i)) { unsigned long entry = (unsigned long)(&sparc64_cpu_startup); unsigned long cookie = (unsigned long)(&cpu_new_task); @@ -502,12 +513,16 @@ } } -void smp_cross_call(unsigned long *func, u32 ctx, u64 data1, u64 data2) +/* Send cross call to all processors mentioned in MASK + * except self. + */ +static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 data2, unsigned long mask) { if (smp_processors_ready) { - unsigned long mask = (cpu_present_map & ~(1UL<cpu_vm_mask via a spinlock for example. - * Then again one could argue that when you are swapping, the cost of a cross - * call won't even show up on the performance radar. But in any case we do get - * rid of the cross-call when the task has a dead context or the task has only - * ever run on the local cpu. - * - * 4) If the mm never had a valid context yet, there is nothing to - * flush. CTX_NEVER_WAS_VALID checks this. - * - * This check used to be done with CTX_VALID(), but Kanoj Sarcar has - * pointed out that this is an invalid optimization. It can cause - * stale translations to be left in the TLB. */ void smp_flush_tlb_mm(struct mm_struct *mm) { - if (CTX_NEVER_WAS_VALID(mm->context)) - return; + /* + * This code is called from two places, dup_mmap and exit_mmap. In the + * former case, we really need a flush. In the later case, the callers + * are single threaded exec_mmap (really need a flush), multithreaded + * exec_mmap case (do not need to flush, since the caller gets a new + * context via activate_mm), and all other callers of mmput() whence + * the flush can be optimized since the associated threads are dead and + * the mm is being torn down (__exit_mm and other mmput callers) or the + * owning thread is dissociating itself from the mm. The + * (atomic_read(&mm->mm_users) == 0) check ensures real work is done + * for single thread exec and dup_mmap cases. An alternate check might + * have been (current->mm != mm). + * Kanoj Sarcar + */ + if (atomic_read(&mm->mm_users) == 0) + return; { u32 ctx = CTX_HWBITS(mm->context); int cpu = smp_processor_id(); - if (mm == current->active_mm && atomic_read(&mm->mm_users) == 1) { + if (atomic_read(&mm->mm_users) == 1) { /* See smp_flush_tlb_page for info about this. */ mm->cpu_vm_mask = (1UL << cpu); goto local_flush_and_out; } - smp_cross_call(&xcall_flush_tlb_mm, ctx, 0, 0); + smp_cross_call_masked(&xcall_flush_tlb_mm, + ctx, 0, 0, + mm->cpu_vm_mask); local_flush_and_out: __flush_tlb_mm(ctx, SECONDARY_CONTEXT); @@ -672,9 +697,6 @@ void smp_flush_tlb_range(struct mm_struct *mm, unsigned long start, unsigned long end) { - if (CTX_NEVER_WAS_VALID(mm->context)) - return; - { u32 ctx = CTX_HWBITS(mm->context); int cpu = smp_processor_id(); @@ -687,7 +709,9 @@ goto local_flush_and_out; } - smp_cross_call(&xcall_flush_tlb_range, ctx, start, end); + smp_cross_call_masked(&xcall_flush_tlb_range, + ctx, start, end, + mm->cpu_vm_mask); local_flush_and_out: __flush_tlb_range(ctx, start, SECONDARY_CONTEXT, end, PAGE_SIZE, (end-start)); @@ -696,9 +720,6 @@ void smp_flush_tlb_page(struct mm_struct *mm, unsigned long page) { - if (CTX_NEVER_WAS_VALID(mm->context)) - return; - { u32 ctx = CTX_HWBITS(mm->context); int cpu = smp_processor_id(); @@ -730,7 +751,11 @@ * this is a cloned mm or kswapd is kicking out pages for a task * which has run recently on another cpu. */ - smp_cross_call(&xcall_flush_tlb_page, ctx, page, 0); + smp_cross_call_masked(&xcall_flush_tlb_page, + ctx, page, 0, + mm->cpu_vm_mask); + if (!(mm->cpu_vm_mask & (1UL << cpu))) + return; local_flush_and_out: __flush_tlb_page(ctx, page, SECONDARY_CONTEXT); diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/sparc64_ksyms.c linux/arch/sparc64/kernel/sparc64_ksyms.c --- v2.4.8/linux/arch/sparc64/kernel/sparc64_ksyms.c Tue Jul 3 17:08:19 2001 +++ linux/arch/sparc64/kernel/sparc64_ksyms.c Thu Aug 16 09:39:37 2001 @@ -163,6 +163,7 @@ /* Atomic counter implementation. */ EXPORT_SYMBOL(__atomic_add); EXPORT_SYMBOL(__atomic_sub); +EXPORT_SYMBOL(atomic_dec_and_lock); /* Atomic bit operations. */ EXPORT_SYMBOL(___test_and_set_bit); diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/sys_sparc32.c linux/arch/sparc64/kernel/sys_sparc32.c --- v2.4.8/linux/arch/sparc64/kernel/sys_sparc32.c Tue Jul 3 17:08:19 2001 +++ linux/arch/sparc64/kernel/sys_sparc32.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: sys_sparc32.c,v 1.177 2001/06/10 06:48:46 davem Exp $ +/* $Id: sys_sparc32.c,v 1.178 2001/08/13 14:40:07 davem Exp $ * sys_sparc32.c: Conversion between 32bit and 64bit native syscalls. * * Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) @@ -1192,7 +1192,7 @@ }; static int fillonedir(void * __buf, const char * name, int namlen, - off_t offset, ino_t ino, unsigned int d_type) + loff_t offset, ino_t ino, unsigned int d_type) { struct readdir_callback32 * buf = (struct readdir_callback32 *) __buf; struct old_linux_dirent32 * dirent; @@ -1247,7 +1247,7 @@ int error; }; -static int filldir(void * __buf, const char * name, int namlen, off_t offset, ino_t ino, +static int filldir(void * __buf, const char * name, int namlen, loff_t offset, ino_t ino, unsigned int d_type) { struct linux_dirent32 * dirent; diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/sys_sunos32.c linux/arch/sparc64/kernel/sys_sunos32.c --- v2.4.8/linux/arch/sparc64/kernel/sys_sunos32.c Tue May 1 20:59:24 2001 +++ linux/arch/sparc64/kernel/sys_sunos32.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: sys_sunos32.c,v 1.60 2001/04/27 07:02:42 davem Exp $ +/* $Id: sys_sunos32.c,v 1.61 2001/08/13 14:40:07 davem Exp $ * sys_sunos32.c: SunOS binary compatability layer on sparc64. * * Copyright (C) 1995, 1996, 1997 David S. Miller (davem@caip.rutgers.edu) @@ -277,7 +277,7 @@ #define ROUND_UP(x) (((x)+sizeof(s32)-1) & ~(sizeof(s32)-1)) static int sunos_filldir(void * __buf, const char * name, int namlen, - off_t offset, ino_t ino, unsigned int d_type) + loff_t offset, ino_t ino, unsigned int d_type) { struct sunos_dirent * dirent; struct sunos_dirent_callback * buf = (struct sunos_dirent_callback *) __buf; @@ -359,7 +359,7 @@ }; static int sunos_filldirentry(void * __buf, const char * name, int namlen, - off_t offset, ino_t ino, unsigned int d_type) + loff_t offset, ino_t ino, unsigned int d_type) { struct sunos_direntry * dirent; struct sunos_direntry_callback * buf = (struct sunos_direntry_callback *) __buf; diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/kernel/ttable.S linux/arch/sparc64/kernel/ttable.S --- v2.4.8/linux/arch/sparc64/kernel/ttable.S Thu Apr 12 12:10:25 2001 +++ linux/arch/sparc64/kernel/ttable.S Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: ttable.S,v 1.33 2001/03/28 10:56:34 davem Exp $ +/* $Id: ttable.S,v 1.34 2001/08/12 09:08:56 davem Exp $ * ttable.S: Sparc V9 Trap Table(s) with SpitFire/Cheetah extensions. * * Copyright (C) 1996, 2001 David S. Miller (davem@caip.rutgers.edu) @@ -106,7 +106,7 @@ tl0_f7o: FILL_7_OTHER tl0_sunos: SUNOS_SYSCALL_TRAP tl0_bkpt: BREAKPOINT_TRAP -tl0_resv102: BTRAP(0x102) +tl0_divz: TRAP(do_div0) tl0_flushw: FLUSH_WINDOW_TRAP tl0_resv104: BTRAP(0x104) BTRAP(0x105) BTRAP(0x106) BTRAP(0x107) .globl tl0_solaris diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/mm/fault.c linux/arch/sparc64/mm/fault.c --- v2.4.8/linux/arch/sparc64/mm/fault.c Sun Mar 25 18:14:21 2001 +++ linux/arch/sparc64/mm/fault.c Sun Aug 12 11:23:32 2001 @@ -1,4 +1,4 @@ -/* $Id: fault.c,v 1.54 2001/03/24 09:36:11 davem Exp $ +/* $Id: fault.c,v 1.55 2001/08/09 20:18:43 davem Exp $ * arch/sparc64/mm/fault.c: Page fault handlers for the 64-bit Sparc. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -92,6 +92,13 @@ die_if_kernel("Oops", regs); } +/* + * We now make sure that mmap_sem is held in all paths that call + * this. Additionally, to prevent kswapd from ripping ptes from + * under us, raise interrupts around the time that we look at the + * pte, kswapd will have to wait to get his smp ipi response from + * us. This saves us having to get page_table_lock. + */ static unsigned int get_user_insn(unsigned long tpc) { pgd_t *pgdp = pgd_offset(current->mm, tpc); @@ -99,13 +106,17 @@ pte_t *ptep, pte; unsigned long pa; u32 insn = 0; + unsigned long pstate; if (pgd_none(*pgdp)) - goto out; + goto outret; pmdp = pmd_offset(pgdp, tpc); if (pmd_none(*pmdp)) - goto out; + goto outret; ptep = pte_offset(pmdp, tpc); + __asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate)); + __asm__ __volatile__("wrpr %0, %1, %%pstate" + : : "r" (pstate), "i" (PSTATE_IE)); pte = *ptep; if (!pte_present(pte)) goto out; @@ -119,6 +130,8 @@ : "r" (pa), "i" (ASI_PHYS_USE_EC)); out: + __asm__ __volatile__("wrpr %0, 0x0, %%pstate" : : "r" (pstate)); +outret: return insn; } @@ -137,21 +150,28 @@ extern int handle_ldf_stq(u32, struct pt_regs *); extern int handle_ld_nf(u32, struct pt_regs *); -static void do_kernel_fault(struct pt_regs *regs, int si_code, int fault_code, - unsigned int insn, unsigned long address) +static inline unsigned int get_fault_insn(struct pt_regs *regs, unsigned int insn) { - unsigned long g2; - unsigned char asi = ASI_P; - if (!insn) { + if (!regs->tpc || (regs->tpc & 0x3)) + return 0; if (regs->tstate & TSTATE_PRIV) { - if (!regs->tpc || (regs->tpc & 0x3)) - goto cannot_handle; insn = *(unsigned int *)regs->tpc; } else { insn = get_user_insn(regs->tpc); } } + return insn; +} + +static void do_kernel_fault(struct pt_regs *regs, int si_code, int fault_code, + unsigned int insn, unsigned long address) +{ + unsigned long g2; + unsigned char asi = ASI_P; + + if (!insn) + goto cannot_handle; /* If user insn could be read (thus insn is zero), that * is fine. We will just gun down the process with a signal @@ -232,7 +252,7 @@ * context, we must not take the fault.. */ if (in_interrupt() || !mm) - goto handle_kernel_fault; + goto intr_or_no_mm; if ((current->thread.flags & SPARC_FLAG_32BIT) != 0) { regs->tpc &= 0xffffffff; @@ -255,16 +275,9 @@ if (((fault_code & (FAULT_CODE_DTLB | FAULT_CODE_WRITE | FAULT_CODE_WINFIXUP)) == FAULT_CODE_DTLB) && (vma->vm_flags & VM_WRITE) != 0) { - unsigned long tpc = regs->tpc; - - if (tpc & 0x3) + insn = get_fault_insn(regs, 0); + if (!insn) goto continue_fault; - - if (regs->tstate & TSTATE_PRIV) - insn = *(unsigned int *)tpc; - else - insn = get_user_insn(tpc); - if ((insn & 0xc0200000) == 0xc0200000 && (insn & 0x1780000) != 0x1680000) { /* Don't bother updating thread struct value, @@ -326,6 +339,7 @@ * Fix it, but check if it's kernel or user first.. */ bad_area: + insn = get_fault_insn(regs, insn); up_read(&mm->mmap_sem); handle_kernel_fault: @@ -338,13 +352,19 @@ * us unable to handle the page fault gracefully. */ out_of_memory: + insn = get_fault_insn(regs, insn); up_read(&mm->mmap_sem); printk("VM: killing process %s\n", current->comm); if (!(regs->tstate & TSTATE_PRIV)) do_exit(SIGKILL); goto handle_kernel_fault; +intr_or_no_mm: + insn = get_fault_insn(regs, 0); + goto handle_kernel_fault; + do_sigbus: + insn = get_fault_insn(regs, insn); up_read(&mm->mmap_sem); /* diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/mm/init.c linux/arch/sparc64/mm/init.c --- v2.4.8/linux/arch/sparc64/mm/init.c Sun Aug 12 13:27:59 2001 +++ linux/arch/sparc64/mm/init.c Sun Aug 12 11:23:32 2001 @@ -1,4 +1,4 @@ -/* $Id: init.c,v 1.178 2001/08/06 13:09:00 davem Exp $ +/* $Id: init.c,v 1.179 2001/08/08 07:52:00 davem Exp $ * arch/sparc64/mm/init.c * * Copyright (C) 1996-1999 David S. Miller (davem@caip.rutgers.edu) @@ -885,20 +885,20 @@ struct pgtable_cache_struct pgt_quicklists; #endif -/* OK, we have to color these pages because during DTLB - * protection faults we set the dirty bit via a non-Dcache - * enabled mapping in the VPTE area. The kernel can end - * up missing the dirty bit resulting in processes crashing - * _iff_ the VPTE mapping of the ptes have a virtual address - * bit 13 which is different from bit 13 of the physical address. - * - * The sequence is: - * 1) DTLB protection fault, write dirty bit into pte via VPTE - * mappings. - * 2) Swapper checks pte, does not see dirty bit, frees page. - * 3) Process faults back in the page, the old pre-dirtied copy - * is provided and here is the corruption. +/* OK, we have to color these pages. The page tables are accessed + * by non-Dcache enabled mapping in the VPTE area by the dtlb_backend.S + * code, as well as by PAGE_OFFSET range direct-mapped addresses by + * other parts of the kernel. By coloring, we make sure that the tlbmiss + * fast handlers do not get data from old/garbage dcache lines that + * correspond to an old/stale virtual address (user/kernel) that + * previously mapped the pagetable page while accessing vpte range + * addresses. The idea is that if the vpte color and PAGE_OFFSET range + * color is the same, then when the kernel initializes the pagetable + * using the later address range, accesses with the first address + * range will not see the newly initialized data rather than the + * garbage. */ + pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address) { struct page *page = alloc_pages(GFP_KERNEL, 1); diff -u --recursive --new-file v2.4.8/linux/arch/sparc64/solaris/timod.c linux/arch/sparc64/solaris/timod.c --- v2.4.8/linux/arch/sparc64/solaris/timod.c Thu Apr 19 08:38:49 2001 +++ linux/arch/sparc64/solaris/timod.c Wed Aug 15 01:22:15 2001 @@ -1,4 +1,4 @@ -/* $Id: timod.c,v 1.11 2001/04/14 21:12:01 davem Exp $ +/* $Id: timod.c,v 1.15 2001/08/13 18:56:10 davem Exp $ * timod.c: timod emulation. * * Copyright (C) 1998 Patrik Rak (prak3264@ss1000.ms.mff.cuni.cz) @@ -699,10 +699,7 @@ } if (ctl_maxlen >= 0 && sock->pfirst) { struct T_primsg *it = sock->pfirst; -#ifndef min -#define min(a,b) ((a)<(b)?(a):(b)) -#endif - int l = min(ctl_maxlen, it->length); + int l = min(int, ctl_maxlen, it->length); SCHECK_MAGIC((char*)((u64)(((char *)&it->type)+sock->offset+it->length+7)&~7),MKCTL_MAGIC); SOLD("purting ctl data"); if(copy_to_user(ctl_buf, @@ -815,7 +812,7 @@ filp->f_flags |= O_NONBLOCK; SOLD("calling recvfrom"); sys_recvfrom = (int (*)(int, void *, size_t, unsigned, struct sockaddr *, int *))SYS(recvfrom); - error = sys_recvfrom(fd, data_buf, min(0,data_maxlen), 0, (struct sockaddr*)tmpbuf, ctl_len); + error = sys_recvfrom(fd, data_buf, data_maxlen, 0, (struct sockaddr*)tmpbuf, ctl_len); filp->f_flags = oldflags; if (error < 0) return error; diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/block/fd1772.c linux/drivers/acorn/block/fd1772.c --- v2.4.8/linux/drivers/acorn/block/fd1772.c Thu Feb 8 16:32:44 2001 +++ linux/drivers/acorn/block/fd1772.c Sun Aug 12 10:38:48 2001 @@ -3,7 +3,7 @@ * Based on ataflop.c in the m68k Linux * Copyright (C) 1993 Greg Harp * Atari Support by Bjoern Brauel, Roman Hodek - * Archimedes Support by Dave Gilbert (gilbertd@cs.man.ac.uk) + * Archimedes Support by Dave Gilbert (linux@treblig.org) * * Big cleanup Sep 11..14 1994 Roman Hodek: * - Driver now works interrupt driven @@ -117,12 +117,17 @@ * * DAG 30/01/99 - Started frobbing for 2.2.1 * DAG 20/06/99 - A little more frobbing: - * Included include/asm/uaccess.h for get_user/put_user + * Included include/asm/uaccess.h for get_user/put_user + * + * DAG 1/09/00 - Dusted off for 2.4.0-test7 + * MAX_SECTORS was name clashing so it is now FD1772_... + * Minor parameter, name layouts for 2.4.x differences */ #include #include #include +#include #include #include #include @@ -135,16 +140,15 @@ #include #include -#include #include #include #include +#include #include -#include #include #include #include -#include +#include #include @@ -242,7 +246,7 @@ outb(val, (reg / 2) + FDC1772BASE); }; -#define MAX_SECTORS 22 +#define FD1772_MAX_SECTORS 22 unsigned char *DMABuffer; /* buffer for writes */ /*static unsigned long PhysDMABuffer; *//* physical address */ @@ -276,6 +280,7 @@ static volatile int fdc_busy = 0; static DECLARE_WAIT_QUEUE_HEAD(fdc_wait); + /* long req'd for set_bit --RR */ static unsigned long changed_floppies = 0xff, fake_change = 0; #define CHECK_CHANGE_DELAY HZ/2 @@ -287,31 +292,29 @@ #define FLOPPY_TIMEOUT (6*HZ) #define RECALIBRATE_ERRORS 4 /* After this many errors the drive * will be recalibrated. */ -#define MAX_ERRORS 8 /* After this many errors the driver - * will give up. */ - -static struct timer_list fd_timer; +#define MAX_ERRORS 8 /* After this many errors the driver + * will give up. */ -#define START_MOTOR_OFF_TIMER(delay) \ - do { \ - motor_off_timer.expires = jiffies + (delay); \ - add_timer( &motor_off_timer ); \ - MotorOffTrys = 0; \ +#define START_MOTOR_OFF_TIMER(delay) \ + do { \ + motor_off_timer.expires = jiffies + (delay); \ + add_timer( &motor_off_timer ); \ + MotorOffTrys = 0; \ } while(0) #define START_CHECK_CHANGE_TIMER(delay) \ - do { \ - mod_timer(&fd_timer, jiffies + (delay)); \ + do { \ + mod_timer(&fd_timer, jiffies + (delay)); \ } while(0) -#define START_TIMEOUT() \ - do { \ - mod_timer(&timeout_timer, jiffies+FLOPPY_TIMEOUT); \ +#define START_TIMEOUT() \ + do { \ + mod_timer(&timeout_timer, jiffies+FLOPPY_TIMEOUT); \ } while(0) -#define STOP_TIMEOUT() \ - do { \ - del_timer( &timeout_timer ); \ +#define STOP_TIMEOUT() \ + do { \ + del_timer( &timeout_timer ); \ } while(0) #define ENABLE_IRQ() enable_irq(FIQ_FD1772+64); @@ -369,18 +372,27 @@ static int fd_test_drive_present(int drive); static void config_types(void); static int floppy_open(struct inode *inode, struct file *filp); -static void floppy_release(struct inode *inode, struct file *filp); +static int floppy_release(struct inode *inode, struct file *filp); /************************* End of Prototypes **************************/ -static struct timer_list motor_off_timer = -{NULL, NULL, 0, 0, fd_motor_off_timer}; +static struct timer_list motor_off_timer = { + function: fd_motor_off_timer, +}; + #ifdef TRACKBUFFER -static struct timer_list readtrack_timer = - { NULL, NULL, 0, 0, fd_readtrack_check }; +static struct timer_list readtrack_timer = { + function: fd_readtrack_check, +}; #endif -static struct timer_list timeout_timer = -{NULL, NULL, 0, 0, fd_times_out}; + +static struct timer_list timeout_timer = { + function: fd_times_out, +}; + +static struct timer_list fd_timer = { + function: check_change, +}; /* DAG: Haven't got a clue what this is? */ int stdma_islocked(void) @@ -392,13 +404,7 @@ static void fd_select_side(int side) { - unsigned long flags; - - save_flags(flags); - cli(); - oldlatch_aupdate(LATCHA_SIDESEL, side ? 0 : LATCHA_SIDESEL); - restore_flags(flags); } @@ -407,8 +413,6 @@ static void fd_select_drive(int drive) { - unsigned long flags; - #ifdef DEBUG printk("fd_select_drive:%d\n", drive); #endif @@ -418,10 +422,7 @@ if (drive == SelectedDrive) return; - save_flags(flags); - cli(); oldlatch_aupdate(LATCHA_FDSELALL, 0xf - (1 << drive)); - restore_flags(flags); /* restore track register to saved value */ FDC1772_WRITE(FDC1772REG_TRACK, unit[drive].track); @@ -439,10 +440,7 @@ DPRINT(("fd_deselect\n")); - save_flags(flags); - cli(); oldlatch_aupdate(LATCHA_FDSELALL | LATCHA_MOTOR | LATCHA_INUSE, 0xf | LATCHA_MOTOR | LATCHA_INUSE); - restore_flags(flags); SelectedDrive = -1; } @@ -474,9 +472,12 @@ status = FDC1772_READ(FDC1772REG_STATUS); if (!(status & 0x80)) { - /* motor already turned off by FDC1772 -> deselect drives */ - /* In actual fact its this deselection which turns the motor off on the - Arc, since the motor control is actually on Latch A */ + /* + * motor already turned off by FDC1772 -> deselect drives + * In actual fact its this deselection which turns the motor + * off on the Arc, since the motor control is actually on + * Latch A + */ DPRINT(("fdc1772: deselecting in fd_motor_off_timer\n")); fd_deselect(); MotorOn = 0; @@ -485,7 +486,7 @@ } /* not yet off, try again */ - retry: +retry: restore_flags(flags); /* Test again later; if tested too often, it seems there is no disk * in the drive and the FDC1772 will leave the motor on forever (or, @@ -623,31 +624,29 @@ DPRINT(("do_fd_action unit[drive].track=%d\n", unit[drive].track)); #ifdef TRACKBUFFER - repeat: +repeat: - if (IS_BUFFERED( drive, ReqSide, ReqTrack )) { - if (ReqCmd == READ) { - copy_buffer( SECTOR_BUFFER(ReqSector), ReqData ); - if (++ReqCnt < CURRENT->current_nr_sectors) { - /* read next sector */ - setup_req_params( drive ); - goto repeat; - } - else { - /* all sectors finished */ - CURRENT->nr_sectors -= CURRENT->current_nr_sectors; - CURRENT->sector += CURRENT->current_nr_sectors; - end_request( 1 ); - redo_fd_request(); - return; - } - } - else { - /* cmd == WRITE, pay attention to track buffer - * consistency! */ - copy_buffer( ReqData, SECTOR_BUFFER(ReqSector) ); - } - } + if (IS_BUFFERED( drive, ReqSide, ReqTrack )) { + if (ReqCmd == READ) { + copy_buffer( SECTOR_BUFFER(ReqSector), ReqData ); + if (++ReqCnt < CURRENT->current_nr_sectors) { + /* read next sector */ + setup_req_params( drive ); + goto repeat; + } else { + /* all sectors finished */ + CURRENT->nr_sectors -= CURRENT->current_nr_sectors; + CURRENT->sector += CURRENT->current_nr_sectors; + end_request( 1 ); + redo_fd_request(); + return; + } + } else { + /* cmd == WRITE, pay attention to track buffer + * consistency! */ + copy_buffer( ReqData, SECTOR_BUFFER(ReqSector) ); + } + } #endif if (SelectedDrive != drive) { @@ -708,7 +707,7 @@ static void fd_seek(void) { - unsigned long flags; + unsigned long flags; DPRINT(("fd_seek() to track %d (unit[SelectedDrive].track=%d)\n", ReqTrack, unit[SelectedDrive].track)); if (unit[SelectedDrive].track == ReqTrack << @@ -719,14 +718,14 @@ FDC1772_WRITE(FDC1772REG_DATA, ReqTrack << unit[SelectedDrive].disktype->stretch); udelay(25); - save_flags(flags); - cliIF(); + save_flags(flags); + clf(); SET_IRQ_HANDLER(fd_seek_done); FDC1772_WRITE(FDC1772REG_CMD, FDC1772CMD_SEEK | unit[SelectedDrive].steprate | /* DAG */ (MotorOn?FDC1772CMDADD_H:0)); - restore_flags(flags); + restore_flags(flags); MotorOn = 1; set_head_settle_flag(); START_TIMEOUT(); @@ -776,13 +775,10 @@ paddr = (unsigned long) ReqData; rwflag = 0x100; } else { + paddr = (unsigned long) PhysDMABuffer; #ifdef TRACKBUFFER - if (read_track) - paddr = (unsigned long)PhysTrackBuffer; - else - paddr =(unsigned long)PhysDMABuffer; -#else - paddr = (unsigned long)PhysDMABuffer; + if (read_track) + paddr = (unsigned long)PhysTrackBuffer; #endif rwflag = 0; } @@ -794,9 +790,9 @@ /*DPRINT(("fd_rwsec() before start sector \n")); */ /* Start sector of this operation */ #ifdef TRACKBUFFER - FDC1772_WRITE( FDC1772REG_SECTOR, !read_track ? ReqSector : 1 ); + FDC1772_WRITE( FDC1772REG_SECTOR, !read_track ? ReqSector : 1 ); #else - FDC1772_WRITE( FDC1772REG_SECTOR, ReqSector ); + FDC1772_WRITE( FDC1772REG_SECTOR, ReqSector ); #endif /* Cheat for track if stretch != 0 */ @@ -810,12 +806,12 @@ DPRINT(("fd_rwsec() before setup DMA \n")); /* Setup DMA - Heavily modified by DAG */ save_flags(flags); - cliIF(); + clf(); disable_dma(FLOPPY_DMA); set_dma_mode(FLOPPY_DMA, rwflag ? DMA_MODE_WRITE : DMA_MODE_READ); set_dma_addr(FLOPPY_DMA, (long) paddr); /* DAG - changed from Atari specific */ #ifdef TRACKBUFFER - set_dma_count(FLOPPY_DMA,(!read_track ? 1 : unit[SelectedDrive].disktype->spt)*512); + set_dma_count(FLOPPY_DMA,(!read_track ? 1 : unit[SelectedDrive].disktype->spt)*512); #else set_dma_count(FLOPPY_DMA, 512); /* Block/sector size - going to have to change */ #endif @@ -825,14 +821,14 @@ /* Now give it something to do */ FDC1772_WRITE(FDC1772REG_CMD, (rwflag ? (FDC1772CMD_WRSEC | FDC1772CMDADD_P) : #ifdef TRACKBUFFER - (FDC1772CMD_RDSEC | (read_track ? FDC1772CMDADD_M : 0) | + (FDC1772CMD_RDSEC | (read_track ? FDC1772CMDADD_M : 0) | /* Hmm - the idea here is to stop the FDC spinning the disc up when we know that we already still have it spinning */ (MotorOn?FDC1772CMDADD_H:0)) #else - FDC1772CMD_RDSEC + FDC1772CMD_RDSEC #endif - )); + )); restore_flags(flags); DPRINT(("fd_rwsec() after DMA setup flags=0x%08x\n", flags)); @@ -845,20 +841,19 @@ /* wait for interrupt */ #ifdef TRACKBUFFER - if (read_track) { - /* If reading a whole track, wait about one disk rotation and - * then check if all sectors are read. The FDC will even - * search for the first non-existant sector and need 1 sec to - * recognise that it isn't present :-( - */ - del_timer( &readtrack_timer ); - readtrack_timer.function = fd_readtrack_check; - readtrack_timer.expires = jiffies + HZ/5 + (old_motoron ? 0 : HZ); - /* 1 rot. + 5 rot.s if motor was off */ - DPRINT(("Setting readtrack_timer to %d @ %d\n",readtrack_timer.expires,jiffies)); - add_timer( &readtrack_timer ); - MultReadInProgress = 1; - } + if (read_track) { + /* + * If reading a whole track, wait about one disk rotation and + * then check if all sectors are read. The FDC will even + * search for the first non-existant sector and need 1 sec to + * recognise that it isn't present :-( + */ + /* 1 rot. + 5 rot.s if motor was off */ + mod_timer(&readtrack_timer, jiffies + HZ/5 + (old_motoron ? 0 : HZ)); + DPRINT(("Setting readtrack_timer to %d @ %d\n", + readtrack_timer.expires,jiffies)); + MultReadInProgress = 1; + } #endif /*DPRINT(("fd_rwsec() before START_TIMEOUT \n")); */ @@ -869,55 +864,54 @@ #ifdef TRACKBUFFER -static void fd_readtrack_check( unsigned long dummy ) +static void fd_readtrack_check(unsigned long dummy) +{ + unsigned long flags, addr; + extern unsigned char *fdc1772_dataaddr; + + DPRINT(("fd_readtrack_check @ %d\n",jiffies)); + + save_flags(flags); + clf(); -{ unsigned long flags, addr; - extern unsigned char *fdc1772_dataaddr; + del_timer( &readtrack_timer ); + + if (!MultReadInProgress) { + /* This prevents a race condition that could arise if the + * interrupt is triggered while the calling of this timer + * callback function takes place. The IRQ function then has + * already cleared 'MultReadInProgress' when control flow + * gets here. + */ + restore_flags(flags); + return; + } - DPRINT(("fd_readtrack_check @ %d\n",jiffies)); + /* get the current DMA address */ + addr=(unsigned long)fdc1772_dataaddr; /* DAG - ? */ + DPRINT(("fd_readtrack_check: addr=%x PhysTrackBuffer=%x\n",addr,PhysTrackBuffer)); + + if (addr >= (unsigned int)PhysTrackBuffer + unit[SelectedDrive].disktype->spt*512) { + /* already read enough data, force an FDC interrupt to stop + * the read operation + */ + SET_IRQ_HANDLER( NULL ); + restore_flags(flags); + DPRINT(("fd_readtrack_check(): done\n")); + FDC1772_WRITE( FDC1772REG_CMD, FDC1772CMD_FORCI ); + udelay(25); - save_flags(flags); - cliIF(); - - del_timer( &readtrack_timer ); - - if (!MultReadInProgress) { - /* This prevents a race condition that could arise if the - * interrupt is triggered while the calling of this timer - * callback function takes place. The IRQ function then has - * already cleared 'MultReadInProgress' when control flow - * gets here. - */ - restore_flags(flags); - return; - } - - /* get the current DMA address */ - addr=fdc1772_dataaddr; /* DAG - ? */ - DPRINT(("fd_readtrack_check: addr=%x PhysTrackBuffer=%x\n",addr,PhysTrackBuffer)); - - if (addr >= PhysTrackBuffer + unit[SelectedDrive].disktype->spt*512) { - /* already read enough data, force an FDC interrupt to stop - * the read operation - */ - SET_IRQ_HANDLER( NULL ); - restore_flags(flags); - DPRINT(("fd_readtrack_check(): done\n")); - FDC1772_WRITE( FDC1772REG_CMD, FDC1772CMD_FORCI ); - udelay(25); - - /* No error until now -- the FDC would have interrupted - * otherwise! - */ - fd_rwsec_done( 0 ); - } - else { - /* not yet finished, wait another tenth rotation */ - restore_flags(flags); - DPRINT(("fd_readtrack_check(): not yet finished\n")); - readtrack_timer.expires = jiffies + HZ/5/10; - add_timer( &readtrack_timer ); - } + /* No error until now -- the FDC would have interrupted + * otherwise! + */ + fd_rwsec_done( 0 ); + } else { + /* not yet finished, wait another tenth rotation */ + restore_flags(flags); + DPRINT(("fd_readtrack_check(): not yet finished\n")); + readtrack_timer.expires = jiffies + HZ/5/10; + add_timer( &readtrack_timer ); + } } #endif @@ -929,13 +923,15 @@ DPRINT(("fd_rwsec_done() status=%d @ %d\n", status,jiffies)); #ifdef TRACKBUFFER - if (read_track && !MultReadInProgress) return; - MultReadInProgress = 0; + if (read_track && !MultReadInProgress) + return; + + MultReadInProgress = 0; - STOP_TIMEOUT(); + STOP_TIMEOUT(); - if (read_track) - del_timer( &readtrack_timer ); + if (read_track) + del_timer( &readtrack_timer ); #endif @@ -951,13 +947,13 @@ } if ((status & FDC1772STAT_RECNF) #ifdef TRACKBUFFER - /* RECNF is no error after a multiple read when the FDC - * searched for a non-existant sector! - */ - && !(read_track && - FDC1772_READ(FDC1772REG_SECTOR) > unit[SelectedDrive].disktype->spt) + /* RECNF is no error after a multiple read when the FDC + * searched for a non-existant sector! + */ + && !(read_track && + FDC1772_READ(FDC1772REG_SECTOR) > unit[SelectedDrive].disktype->spt) #endif - ) { + ) { if (Probing) { if (unit[SelectedDrive].disktype > disk_type) { /* try another disk type */ @@ -978,7 +974,7 @@ if (Probing) { setup_req_params(SelectedDrive); #ifdef TRACKBUFFER - BufferDrive = -1; + BufferDrive = -1; #endif do_fd_action(SelectedDrive); return; @@ -1001,19 +997,16 @@ if (ReqCmd == READ) { #ifdef TRACKBUFFER - if (!read_track) - { - /*cache_clear (PhysDMABuffer, 512);*/ - copy_buffer (DMABuffer, ReqData); - } - else - { - /*cache_clear (PhysTrackBuffer, MAX_SECTORS * 512);*/ - BufferDrive = SelectedDrive; - BufferSide = ReqSide; - BufferTrack = ReqTrack; - copy_buffer (SECTOR_BUFFER (ReqSector), ReqData); - } + if (!read_track) { + /*cache_clear (PhysDMABuffer, 512);*/ + copy_buffer (DMABuffer, ReqData); + } else { + /*cache_clear (PhysTrackBuffer, FD1772_MAX_SECTORS * 512);*/ + BufferDrive = SelectedDrive; + BufferSide = ReqSide; + BufferTrack = ReqTrack; + copy_buffer (SECTOR_BUFFER (ReqSector), ReqData); + } #else /*cache_clear( PhysDMABuffer, 512 ); */ copy_buffer(DMABuffer, ReqData); @@ -1032,9 +1025,9 @@ } return; - err_end: +err_end: #ifdef TRACKBUFFER - BufferDrive = -1; + BufferDrive = -1; #endif fd_error(); @@ -1118,10 +1111,8 @@ /* Prevent "aliased" accesses. */ -static fd_ref[4] = -{0, 0, 0, 0}; -static fd_device[4] = -{0, 0, 0, 0}; +static int fd_ref[4]; +static int fd_device[4]; /* * Current device number. Taken either from the block header or from the @@ -1182,7 +1173,7 @@ if (test_bit(drive, &changed_floppies) || test_bit(drive, &fake_change) || unit[drive].disktype == 0) { #ifdef TRACKBUFFER - BufferDrive = -1; + BufferDrive = -1; #endif clear_bit(drive, &fake_change); clear_bit(drive, &changed_floppies); @@ -1214,7 +1205,7 @@ ReqData = ReqBuffer + 512 * ReqCnt; #ifdef TRACKBUFFER - read_track = (ReqCmd == READ && CURRENT_ERRORS == 0); + read_track = (ReqCmd == READ && CURRENT_ERRORS == 0); #endif DPRINT(("Request params: Si=%d Tr=%d Se=%d Data=%08lx\n", ReqSide, @@ -1234,7 +1225,7 @@ if (!QUEUE_EMPTY && CURRENT->rq_status == RQ_INACTIVE) goto the_end; - repeat: +repeat: if (QUEUE_EMPTY) goto the_end; @@ -1293,25 +1284,25 @@ return; - the_end: +the_end: finish_fdc(); } static void fd1772_checkint(void) { - extern int fdc1772_bytestogo; + extern int fdc1772_bytestogo; - /*printk("fd1772_checkint %d\n",fdc1772_fdc_int_done);*/ - if (fdc1772_fdc_int_done) - floppy_irqconsequencehandler(); - if ((MultReadInProgress) && (fdc1772_bytestogo==0)) fd_readtrack_check(0); - if (fdc_busy) { - queue_task(&fd1772_tq,&tq_immediate); - mark_bh(IMMEDIATE_BH); - }; -}; + /*printk("fd1772_checkint %d\n",fdc1772_fdc_int_done);*/ + if (fdc1772_fdc_int_done) + floppy_irqconsequencehandler(); + if ((MultReadInProgress) && (fdc1772_bytestogo==0)) fd_readtrack_check(0); + if (fdc_busy) { + queue_task(&fd1772_tq,&tq_immediate); + mark_bh(IMMEDIATE_BH); + } +} -void do_fd_request(void) +void do_fd_request(request_queue_t* q) { unsigned long flags; @@ -1329,8 +1320,8 @@ redo_fd_request(); - queue_task(&fd1772_tq,&tq_immediate); - mark_bh(IMMEDIATE_BH); + queue_task(&fd1772_tq,&tq_immediate); + mark_bh(IMMEDIATE_BH); } @@ -1338,7 +1329,7 @@ { /* invalidate the buffer track to force a reread */ #ifdef TRACKBUFFER - BufferDrive = -1; + BufferDrive = -1; #endif set_bit(rdev & 3, &fake_change); @@ -1352,9 +1343,6 @@ int drive, device; device = inode->i_rdev; - switch (cmd) { - RO_IOCTLS(inode->i_rdev, param); - } drive = MINOR(device); switch (cmd) { case FDFMTBEG: @@ -1428,7 +1416,7 @@ /* if (!(mfp.par_dt_reg & 0x20)) break; */ /* Well this is my nearest guess - quit when we get an FDC interrupt */ - if (IOC_FIQSTAT & 2) + if (ioc_readb(IOC_FIQSTAT) & 2) break; } @@ -1451,7 +1439,7 @@ FDC1772_WRITE(FDC1772REG_CMD, FDC1772CMD_SEEK); printk("fd_test_drive_present: just before wait for int\n"); /* DAG: Guess means wait for interrupt */ - while (!(IOC_FIQSTAT & 2)); + while (!(ioc_readb(IOC_FIQSTAT) & 2)); printk("fd_test_drive_present: just after wait for int\n"); status = FDC1772_READ(FDC1772REG_STATUS); } @@ -1553,7 +1541,7 @@ } -static void floppy_release(struct inode *inode, struct file *filp) +static int floppy_release(struct inode *inode, struct file *filp) { int drive = MINOR(inode->i_rdev) & 3; @@ -1563,11 +1551,12 @@ printk("floppy_release with fd_ref == 0"); fd_ref[drive] = 0; } + + return 0; } static struct block_device_operations floppy_fops = { - owner: THIS_MODULE, open: floppy_open, release: floppy_release, ioctl: fd_ioctl, @@ -1580,7 +1569,7 @@ { int i; - if (!machine_is_arc()) + if (!machine_is_archimedes()) return 0; if (register_blkdev(MAJOR_NR, "fd", &floppy_fops)) { @@ -1603,25 +1592,15 @@ /* initialize variables */ SelectedDrive = -1; #ifdef TRACKBUFFER - BufferDrive = -1; -#endif - - /* initialize check_change timer */ - init_timer(&fd_timer); - fd_timer.function = check_change; -} - -#ifdef TRACKBUFFER - DMABuffer = (char *)kmalloc((MAX_SECTORS+1)*512,GFP_KERNEL); /* Atari uses 512 - I want to eventually cope with 1K sectors */ - TrackBuffer = DMABuffer + 512; + BufferDrive = BufferSide = BufferTrack = -1; + /* Atari uses 512 - I want to eventually cope with 1K sectors */ + DMABuffer = (char *)kmalloc((FD1772_MAX_SECTORS+1)*512,GFP_KERNEL); + TrackBuffer = DMABuffer + 512; #else /* Allocate memory for the DMAbuffer - on the Atari this takes it out of some special memory... */ DMABuffer = (char *) kmalloc(2048); /* Copes with pretty large sectors */ #endif -#ifdef TRACKBUFFER - BufferDrive = BufferSide = BufferTrack = -1; -#endif for (i = 0; i < FD_MAX_UNITS; i++) { unit[i].track = -1; @@ -1635,17 +1614,13 @@ blk_size[MAJOR_NR] = floppy_sizes; blksize_size[MAJOR_NR] = floppy_blocksizes; - blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST); config_types(); return 0; } -/* Just a dummy at the moment */ -void floppy_setup(char *str, int *ints) +void floppy_eject(void) { -} - -void floppy_eject(void) { } diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/block/mfmhd.c linux/drivers/acorn/block/mfmhd.c --- v2.4.8/linux/drivers/acorn/block/mfmhd.c Sat Apr 28 11:27:53 2001 +++ linux/drivers/acorn/block/mfmhd.c Sun Aug 12 10:38:48 2001 @@ -560,7 +560,7 @@ }; }; /* Result read */ - /*console_printf ("mfm_rw_intr nearexit [%02X]\n", inb(mfm_IRQPollLoc)); */ + /*console_printf ("mfm_rw_intr nearexit [%02X]\n", __raw_readb(mfm_IRQPollLoc)); */ /* If end of command move on */ if (mfm_status & (STAT_CED)) { @@ -1425,7 +1425,7 @@ } mfm_addr = ecard_address(ecs, ECARD_IOC, ECARD_MEDIUM) + 0x800; - mfm_IRQPollLoc = mfm_addr + 0x400; + mfm_IRQPollLoc = ioaddr(mfm_addr + 0x400); mfm_irqenable = mfm_IRQPollLoc; mfm_irq = ecs->irq; irqmask = 0x08; @@ -1444,7 +1444,7 @@ /* Stuff for the assembler routines to get to */ hdc63463_baseaddress = ioaddr(mfm_addr); - hdc63463_irqpolladdress = ioaddr(mfm_IRQPollLoc); + hdc63463_irqpolladdress = mfm_IRQPollLoc; hdc63463_irqpollmask = irqmask; blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST); diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/char/Makefile linux/drivers/acorn/char/Makefile --- v2.4.8/linux/drivers/acorn/char/Makefile Thu Feb 8 16:32:44 2001 +++ linux/drivers/acorn/char/Makefile Sun Aug 12 10:38:48 2001 @@ -29,8 +29,12 @@ obj-$(CONFIG_ATOMWIDE_SERIAL) += serial-atomwide.o obj-$(CONFIG_DUALSP_SERIAL) += serial-dualsp.o obj-$(CONFIG_ARCH_ACORN) += defkeymap-acorn.o i2c.o pcf8583.o +obj-$(CONFIG_L7200_KEYB) += defkeymap-l7200.o keyb_l7200.o # Do the i2c and rtc last -obj-y += $(obj-$(MACHINE)) +obj-y += $(obj-$(MACHINE)) include $(TOPDIR)/Rules.make + +%.c: %.map + loadkeys --mktable $< > $@ diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/char/defkeymap-acorn.c linux/drivers/acorn/char/defkeymap-acorn.c --- v2.4.8/linux/drivers/acorn/char/defkeymap-acorn.c Mon Oct 16 12:58:51 2000 +++ linux/drivers/acorn/char/defkeymap-acorn.c Sun Aug 12 10:38:48 2001 @@ -1,240 +1,141 @@ -/* - * linux/drivers/acorn/char/defkeymap.c - * - * Copyright (C) 1995, 1996 Russell King - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ +/* Do not edit this file! It was automatically generated by */ +/* loadkeys --mktable defkeymap.map > defkeymap.c */ + #include #include #include -/* Normal (maps 1:1 with no processing) */ -#define KTn 0xF0 -/* Function keys */ -#define KTf 0xF1 -/* Special (Performs special house-keeping funcs) */ -#define KTs 0xF2 -#define KIGNORE K(KTs, 0) /* Ignore */ -#define KENTER K(KTs, 1) /* Enter */ -#define KREGS K(KTs, 2) /* Regs */ -#define KMEM K(KTs, 3) /* Mem */ -#define KSTAT K(KTs, 4) /* State */ -#define KINTR K(KTs, 5) /* Intr */ -#define Ksl 6 /* Last console */ -#define KCAPSLK K(KTs, 7) /* Caps lock */ -#define KNUMLK K(KTs, 8) /* Num-lock */ -#define KSCRLLK K(KTs, 9) /* Scroll-lock */ -#define KSCRLFOR K(KTs,10) /* Scroll forward */ -#define KSCRLBAK K(KTs,11) /* Scroll back */ -#define KREBOOT K(KTs,12) /* Reboot */ -#define KCAPSON K(KTs,13) /* Caps on */ -#define KCOMPOSE K(KTs,14) /* Compose */ -#define KSAK K(KTs,15) /* SAK */ -#define CONS_DEC K(KTs,16) /* Dec console */ -#define CONS_INC K(KTs,17) /* Incr console */ -#define KFLOPPY K(KTs,18) /* Floppy */ -/* Key pad (0-9 = digits, 10=+, 11=-, 12=*, 13=/, 14=enter, 16=., 17=# */ -#define KTp 0xF3 -#define KPAD_0 K(KTp, 0 ) -#define KPAD_1 K(KTp, 1 ) -#define KPAD_2 K(KTp, 2 ) -#define KPAD_3 K(KTp, 3 ) -#define KPAD_4 K(KTp, 4 ) -#define KPAD_5 K(KTp, 5 ) -#define KPAD_6 K(KTp, 6 ) -#define KPAD_7 K(KTp, 7 ) -#define KPAD_8 K(KTp, 8 ) -#define KPAD_9 K(KTp, 9 ) -#define KPAD_PL K(KTp,10 ) -#define KPAD_MI K(KTp,11 ) -#define KPAD_ML K(KTp,12 ) -#define KPAD_DV K(KTp,13 ) -#define KPAD_EN K(KTp,14 ) -#define KPAD_DT K(KTp,16 ) -#define KPAD_HS K(KTp,20 ) -/* Console switching */ -#define KCn 0xF5 -/* Cursor */ -#define KTc 0xF6 -#define Kcd 0 /* Cursor down */ -#define Kcl 1 /* Cursor left */ -#define Kcr 2 /* Cursor right */ -#define Kcu 3 /* Cursor up */ -/* Shift/alt modifiers etc */ -#define KMd 0xF7 -#define KSHIFT K(KMd, 0 ) -#define KALTGR K(KMd, 1 ) -#define KCTRL K(KMd, 2 ) -#define KALT K(KMd, 3 ) -/* Meta */ -#define KMt 0xF8 -#define KAs 0xF9 -#define KPADA_0 K(KAs, 0 ) -#define KPADA_1 K(KAs, 1 ) -#define KPADA_2 K(KAs, 2 ) -#define KPADA_3 K(KAs, 3 ) -#define KPADA_4 K(KAs, 4 ) -#define KPADA_5 K(KAs, 5 ) -#define KPADA_6 K(KAs, 6 ) -#define KPADA_7 K(KAs, 7 ) -#define KPADA_8 K(KAs, 8 ) -#define KPADA_9 K(KAs, 9 ) -#define KPADB_0 K(KAs,10 ) -#define KPADB_1 K(KAs,11 ) -#define KPADB_2 K(KAs,12 ) -#define KPADB_3 K(KAs,13 ) -#define KPADB_4 K(KAs,14 ) -#define KPADB_5 K(KAs,15 ) -#define KPADB_6 K(KAs,16 ) -#define KPADB_7 K(KAs,17 ) -#define KPADB_8 K(KAs,18 ) -#define KPADB_9 K(KAs,19 ) -/* Locking keys */ -#define KLk 0xFA -/* Letters */ -#define KTl 0xFB - -u_short plain_map[NR_KEYS]= -{ - K(KTn, 27),K(KTf, 0),K(KTf, 1),K(KTf, 2 ),K(KTf, 3),K(KTf, 4),K(KTf, 5 ),K(KTf, 6), - K(KTf, 7),K(KTf, 8),K(KTf, 9),K(KTf, 10 ),K(KTf, 11),KIGNORE ,KSCRLLK ,KINTR , - K(KTn,'`'),K(KTn,'1'),K(KTn,'2'),K(KTn,'3' ),K(KTn,'4'),K(KTn,'5'),K(KTn,'6' ),K(KTn,'7'), - K(KTn,'8'),K(KTn,'9'),K(KTn,'0'),K(KTn,'-' ),K(KTn,'='),K(KTn,'Ł'),K(KTn,127 ),K(KTf,21 ), - K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,K(KTn, 9 ),K(KTl,'q'), - K(KTl,'w'),K(KTl,'e'),K(KTl,'r'),K(KTl,'t' ),K(KTl,'y'),K(KTl,'u'),K(KTl,'i' ),K(KTl,'o'), - K(KTl,'p'),K(KTn,'['),K(KTn,']'),K(KTn,'\\'),K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPAD_7 , - KPAD_8 ,KPAD_9 ,KPAD_MI ,KCTRL ,K(KTl,'a'),K(KTl,'s'),K(KTl,'d' ),K(KTl,'f'), - K(KTl,'g'),K(KTl,'h'),K(KTl,'j'),K(KTl,'k' ),K(KTl,'l'),K(KTn,';'),K(KTn,'\''),KENTER , - KPAD_4 ,KPAD_5 ,KPAD_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KTl,'z' ),K(KTl,'x'), - K(KTl,'c'),K(KTl,'v'),K(KTl,'b'),K(KTl,'n' ),K(KTl,'m'),K(KTn,','),K(KTn,'.' ),K(KTn,'/'), - KSHIFT ,K(KTc,Kcu),KPAD_1 ,KPAD_2 ,KPAD_3 ,KCAPSLK ,KALT ,K(KTn,' '), - KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPAD_0 ,KPAD_DT ,KPAD_EN , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , -}; - -u_short shift_map[NR_KEYS]= -{ - K(KTn, 27),K(KTf, 10),K(KTf, 11),K(KTf, 12 ),K(KTf, 13),K(KTf, 14),K(KTf, 15 ),K(KTf, 16), - K(KTf, 17),K(KTf, 18),K(KTf, 19),K(KTf, 20 ),K(KTf, 21),KIGNORE ,KMEM ,KINTR , - K(KTn,'~'),K(KTn,'!'),K(KTn,'@'),K(KTn,'#' ),K(KTn,'$'),K(KTn,'%'),K(KTn,'^' ),K(KTn,'&'), - K(KTn,'*'),K(KTn,'('),K(KTn,')'),K(KTn,'_' ),K(KTn,'+'),K(KTn,'¤'),K(KTn,127 ),K(KTf,21 ), - K(KTf,20 ),KSCRLBAK ,KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,K(KTn, 9 ),K(KTl,'Q'), - K(KTl,'W'),K(KTl,'E'),K(KTl,'R'),K(KTl,'T' ),K(KTl,'Y'),K(KTl,'U'),K(KTl,'I' ),K(KTl,'O'), - K(KTl,'P'),K(KTn,'{'),K(KTn,'}'),K(KTn,'|' ),K(KTf,22 ),K(KTf,23 ),KSCRLFOR ,KPAD_7 , - KPAD_8 ,KPAD_9 ,KPAD_MI ,KCTRL ,K(KTl,'A'),K(KTl,'S'),K(KTl,'D' ),K(KTl,'F'), - K(KTl,'G'),K(KTl,'H'),K(KTl,'J'),K(KTl,'K' ),K(KTl,'L'),K(KTn,':'),K(KTn,'"' ),KENTER , - KPAD_4 ,KPAD_5 ,KPAD_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KTl,'Z' ),K(KTl,'X'), - K(KTl,'C'),K(KTl,'V'),K(KTl,'B'),K(KTl,'N' ),K(KTl,'M'),K(KTn,'<'),K(KTn,'>' ),K(KTn,'?'), - KSHIFT ,K(KTc,Kcu),KPAD_1 ,KPAD_2 ,KPAD_3 ,KCAPSLK ,KALT ,K(KTn,' '), - KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPAD_0 ,KPAD_DT ,KPAD_EN , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , -}; - -u_short altgr_map[NR_KEYS]= -{ - KIGNORE ,K(KCn,12 ),K(KCn,13 ),K(KCn,14 ),K(KCn,15 ),K(KCn,16 ),K(KCn,17 ),K(KCn, 18), - K(KCn, 19),K(KCn,20 ),K(KCn,21 ),K(KCn,22 ),K(KCn,23 ),KIGNORE ,KREGS ,KINTR , - KIGNORE ,KIGNORE ,K(KTn,'@'),KIGNORE ,K(KTn,'$'),KIGNORE ,KIGNORE ,K(KTn,'{'), - K(KTn,'['),K(KTn,']'),K(KTn,'}'),K(KTn,'\\'),KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,21 ), - K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KTl,'q'), - K(KTl,'w'),K(KTl,'e'),K(KTl,'r'),K(KTl,'t' ),K(KTl,'y'),K(KTl,'u'),K(KTl,'i' ),K(KTl,'o'), - K(KTl,'p'),KIGNORE ,K(KTn,'~'),KIGNORE ,K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPADB_7 , - KPADB_8 ,KPADB_9 ,KPAD_MI ,KCTRL ,K(KAs,20 ),K(KTl,'s'),K(KAs,23 ),K(KAs,25 ), - K(KTl,'g'),K(KTl,'h'),K(KTl,'j'),K(KTl,'k' ),K(KTl,'l'),KIGNORE ,KIGNORE ,KENTER , - KPADB_4 ,KPADB_5 ,KPADB_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KTl,'z' ),K(KTl,'x'), - K(KAs,22 ),K(KTl,'v'),K(KTl,21 ),K(KTl,'n' ),K(KTl,'m'),KIGNORE ,KIGNORE ,KIGNORE , - KSHIFT ,K(KTc,Kcu),KPADB_1 ,KPADB_2 ,KPADB_3 ,KCAPSLK ,KALT ,KIGNORE , - KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPADB_0 ,KPAD_DT ,KPAD_EN , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , -}; - -u_short ctrl_map[NR_KEYS]= -{ - KIGNORE ,K(KTf, 0),K(KTf, 1),K(KTf, 2 ),K(KTf, 3),K(KTf, 4),K(KTf, 5 ),K(KTf, 6), - K(KTf, 7),K(KTf, 8),K(KTf, 9),K(KTf, 10 ),K(KTf, 11),KIGNORE ,KSTAT ,KINTR , - KIGNORE ,K(KTn, 1 ),K(KTn, 2 ),K(KTn, 3 ),K(KTn, 4 ),K(KTn, 5 ),K(KTn, 6 ),K(KTn, 7 ), - K(KTn, 8 ),K(KTn, 9 ),K(KTn, 0 ),K(KTn,31 ),KIGNORE ,KIGNORE ,K(KTn, 8 ),K(KTf,21 ), - K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KTn,17 ), - K(KTn,23 ),K(KTn, 5 ),K(KTn,18 ),K(KTn,20 ),K(KTn,25 ),K(KTn,21 ),K(KTn, 9 ),K(KTn,15 ), - K(KTn,16 ),K(KTn,27 ),K(KTn,29 ),K(KTn,28 ),K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPAD_7 , - KPAD_8 ,KPAD_9 ,KPAD_MI ,KCTRL ,K(KTn, 1 ),K(KTn,19 ),K(KTn, 4 ),K(KTn, 6 ), - K(KTn, 7 ),K(KTn, 8 ),K(KTn,10 ),K(KTn,11 ),K(KTn,12 ),KIGNORE ,K(KTn, 7 ),KENTER , - KPAD_4 ,KPAD_5 ,KPAD_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KTn,26 ),K(KTn,24 ), - K(KTn, 3 ),K(KTn,22 ),K(KTn, 2 ),K(KTn,14 ),K(KTn,13 ),KIGNORE ,KCOMPOSE ,K(KTn,127), - KSHIFT ,K(KTc,Kcu),KPAD_1 ,KPAD_2 ,KPAD_3 ,KCAPSLK ,KALT ,K(KTn, 0 ), - KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPAD_0 ,KPAD_DT ,KPAD_EN , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , -}; - -u_short shift_ctrl_map[NR_KEYS]= -{ - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KFLOPPY ,KINTR , - KIGNORE ,KIGNORE ,K(KTn, 0 ),KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,K(KTn,31 ),KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,21 ), - K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KTn,17 ), - K(KTn,23 ),K(KTn, 5 ),K(KTn,18 ),K(KTn,20 ),K(KTn,25 ),K(KTn,21 ),K(KTn, 9 ),K(KTn,15 ), - K(KTn,16 ),KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPAD_7 , - KPAD_8 ,KPAD_9 ,KPAD_MI ,KCTRL ,K(KTn, 1 ),K(KTn,19 ),K(KTn, 4 ),K(KTn, 6 ), - K(KTn, 7 ),K(KTn, 8 ),K(KTn,10 ),K(KTn,11 ),K(KTn,12 ),KIGNORE ,K(KTn, 7 ),KENTER , - KPAD_4 ,KPAD_5 ,KPAD_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KTn,26 ),K(KTn,24 ), - K(KTn, 3 ),K(KTn,22 ),K(KTn, 2 ),K(KTn,14 ),K(KTn,13 ),KIGNORE ,KIGNORE ,KIGNORE , - KSHIFT ,K(KTc,Kcu),KPAD_1 ,KPAD_2 ,KPAD_3 ,KCAPSLK ,KALT ,K(KTn, 0 ), - KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPAD_0 ,KPAD_DT ,KPAD_EN , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , -}; - -u_short alt_map[NR_KEYS]= -{ - K(KMt,27 ),K(KCn, 0 ),K(KCn, 1 ),K(KCn, 2 ),K(KCn, 3 ),K(KCn, 4 ),K(KCn, 5 ),K(KCn, 6 ), - K(KCn, 7 ),K(KCn, 8 ),K(KCn, 9 ),K(KCn,10 ),K(KCn,11 ),KIGNORE ,KSCRLLK ,KINTR , - K(KMt,'`'),K(KMt,'1'),K(KMt,'2'),K(KMt,'3' ),K(KMt,'4'),K(KMt,'5'),K(KMt,'6' ),K(KMt,'7'), - K(KMt,'8'),K(KMt,'9'),K(KMt,'0'),K(KMt,'-' ),K(KMt,'='),K(KMt,'Ł'),K(KMt,127 ),K(KTf,21 ), - K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,K(KMt, 9 ),K(KMt,'q'), - K(KMt,'w'),K(KMt,'e'),K(KMt,'r'),K(KMt,'t' ),K(KMt,'y'),K(KMt,'u'),K(KMt,'i' ),K(KMt,'o'), - K(KMt,'p'),K(KMt,'['),K(KMt,']'),K(KMt,'\\'),K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPADA_7 , - KPADA_8 ,KPADA_9 ,KPAD_MI ,KCTRL ,K(KMt,'a'),K(KMt,'s'),K(KMt,'d' ),K(KMt,'f'), - K(KMt,'g'),K(KMt,'h'),K(KMt,'j'),K(KMt,'k' ),K(KMt,'l'),K(KMt,';'),K(KMt,'\''),K(KMt,13 ), - KPADA_4 ,KPADA_5 ,KPADA_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KMt,'z' ),K(KMt,'x'), - K(KMt,'c'),K(KMt,'v'),K(KMt,'b'),K(KMt,'n' ),K(KMt,'m'),K(KMt,','),K(KMt,'.' ),KIGNORE , - KSHIFT ,K(KTc,Kcu),KPADA_1 ,KPADA_2 ,KPADA_3 ,KCAPSLK ,KALT ,K(KMt,' '), - KALTGR ,KCTRL ,CONS_DEC ,K(KTc,Kcd ),CONS_INC ,KPADA_0 ,KPAD_DT ,KPAD_EN , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , -}; - -u_short ctrl_alt_map[NR_KEYS]= -{ - KIGNORE ,K(KCn, 0 ),K(KCn, 1 ),K(KCn, 2 ),K(KCn, 3 ),K(KCn, 4 ),K(KCn, 5 ),K(KCn, 6 ), - K(KCn, 7 ),K(KCn, 8 ),K(KCn, 9 ),K(KCn,10 ),K(KCn,11 ),KIGNORE ,KIGNORE ,KINTR , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,21 ), - K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KMt,17 ), - K(KMt,23 ),K(KMt, 5 ),K(KMt,18 ),K(KMt,20 ),K(KMt,25 ),K(KMt,21 ),K(KMt, 9 ),K(KMt,15 ), - K(KMt,16 ),KIGNORE ,KIGNORE ,KIGNORE ,KREBOOT ,K(KTf,23 ),K(KTf,25 ),KPAD_7 , - KPAD_8 ,KPAD_9 ,KPAD_MI ,KCTRL ,K(KMt, 1 ),K(KMt,19 ),K(KMt, 4 ),K(KMt, 6 ), - K(KMt, 7 ),K(KMt, 8 ),K(KMt,10 ),K(KMt,11 ),K(KMt,12 ),KIGNORE ,KIGNORE ,KENTER , - KPAD_4 ,KPAD_5 ,KPAD_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KMt,26 ),K(KMt,24 ), - K(KMt, 3 ),K(KMt,22 ),K(KMt, 2 ),K(KMt,14 ),K(KMt,13 ),KIGNORE ,KIGNORE ,KIGNORE , - KSHIFT ,K(KTc,Kcu),KPAD_1 ,KPAD_2 ,KPAD_3 ,KCAPSLK ,KALT ,KIGNORE , - KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPAD_0 ,KREBOOT ,KPAD_EN , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , - KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , +u_short plain_map[NR_KEYS] = { + 0xf01b, 0xf100, 0xf101, 0xf102, 0xf103, 0xf104, 0xf105, 0xf106, + 0xf107, 0xf108, 0xf109, 0xf10a, 0xf10b, 0xf200, 0xf209, 0xf205, + 0xf060, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037, + 0xf038, 0xf039, 0xf030, 0xf02d, 0xf03d, 0xf0a3, 0xf07f, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf009, 0xfb71, + 0xfb77, 0xfb65, 0xfb72, 0xfb74, 0xfb79, 0xfb75, 0xfb69, 0xfb6f, + 0xfb70, 0xf05b, 0xf05d, 0xf05c, 0xf116, 0xf117, 0xf119, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xfb61, 0xfb73, 0xfb64, 0xfb66, + 0xfb67, 0xfb68, 0xfb6a, 0xfb6b, 0xfb6c, 0xf03b, 0xf027, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xfb7a, 0xfb78, + 0xfb63, 0xfb76, 0xfb62, 0xfb6e, 0xfb6d, 0xf02c, 0xf02e, 0xf02f, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf020, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short shift_map[NR_KEYS] = { + 0xf01b, 0xf10a, 0xf10b, 0xf10c, 0xf10d, 0xf10e, 0xf10f, 0xf110, + 0xf111, 0xf112, 0xf113, 0xf10a, 0xf10b, 0xf200, 0xf203, 0xf205, + 0xf07e, 0xf021, 0xf040, 0xf023, 0xf024, 0xf025, 0xf05e, 0xf026, + 0xf02a, 0xf028, 0xf029, 0xf05f, 0xf02b, 0xf0a4, 0xf07f, 0xf115, + 0xf114, 0xf20b, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf009, 0xfb51, + 0xfb57, 0xfb45, 0xfb52, 0xfb54, 0xfb59, 0xfb55, 0xfb49, 0xfb4f, + 0xfb50, 0xf07b, 0xf07d, 0xf07c, 0xf116, 0xf117, 0xf20a, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xfb41, 0xfb53, 0xfb44, 0xfb46, + 0xfb47, 0xfb48, 0xfb4a, 0xfb4b, 0xfb4c, 0xf03a, 0xf022, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xfb5a, 0xfb58, + 0xfb43, 0xfb56, 0xfb42, 0xfb4e, 0xfb4d, 0xf03c, 0xf03e, 0xf03f, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf020, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short altgr_map[NR_KEYS] = { + 0xf200, 0xf50c, 0xf50d, 0xf50e, 0xf50f, 0xf510, 0xf511, 0xf512, + 0xf513, 0xf514, 0xf515, 0xf516, 0xf517, 0xf200, 0xf202, 0xf205, + 0xf200, 0xf200, 0xf040, 0xf200, 0xf024, 0xf200, 0xf200, 0xf07b, + 0xf05b, 0xf05d, 0xf07d, 0xf05c, 0xf200, 0xf200, 0xf200, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf200, 0xfb71, + 0xfb77, 0xf918, 0xfb72, 0xfb74, 0xfb79, 0xfb75, 0xfb69, 0xfb6f, + 0xfb70, 0xf200, 0xf07e, 0xf200, 0xf116, 0xf117, 0xf119, 0xf911, + 0xf912, 0xf913, 0xf30b, 0xf702, 0xf914, 0xfb73, 0xf917, 0xf919, + 0xfb67, 0xfb68, 0xfb6a, 0xfb6b, 0xfb6c, 0xf200, 0xf200, 0xf201, + 0xf90e, 0xf90f, 0xf910, 0xf30a, 0xf700, 0xf200, 0xfb7a, 0xfb78, + 0xf916, 0xfb76, 0xf915, 0xfb6e, 0xfb6d, 0xf200, 0xf200, 0xf200, + 0xf700, 0xf603, 0xf90b, 0xf90c, 0xf90d, 0xf207, 0xf703, 0xf200, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf90a, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short ctrl_map[NR_KEYS] = { + 0xf200, 0xf100, 0xf101, 0xf102, 0xf103, 0xf104, 0xf105, 0xf106, + 0xf107, 0xf108, 0xf109, 0xf10a, 0xf10b, 0xf200, 0xf204, 0xf205, + 0xf200, 0xf200, 0xf000, 0xf01b, 0xf01c, 0xf01d, 0xf01e, 0xf01f, + 0xf07f, 0xf200, 0xf200, 0xf01f, 0xf200, 0xf200, 0xf008, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf200, 0xf011, + 0xf017, 0xf005, 0xf012, 0xf014, 0xf019, 0xf015, 0xf009, 0xf00f, + 0xf010, 0xf01b, 0xf01d, 0xf01c, 0xf116, 0xf117, 0xf119, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xf001, 0xf013, 0xf004, 0xf006, + 0xf007, 0xf008, 0xf00a, 0xf00b, 0xf00c, 0xf200, 0xf007, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xf01a, 0xf018, + 0xf003, 0xf016, 0xf002, 0xf00e, 0xf00d, 0xf200, 0xf20e, 0xf07f, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf000, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short shift_ctrl_map[NR_KEYS] = { + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf209, 0xf205, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf01f, 0xf200, 0xf200, 0xf200, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf200, 0xf011, + 0xf017, 0xf005, 0xf012, 0xf014, 0xf019, 0xf015, 0xf009, 0xf00f, + 0xf010, 0xf200, 0xf200, 0xf200, 0xf116, 0xf117, 0xf119, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xf001, 0xf013, 0xf004, 0xf006, + 0xf007, 0xf008, 0xf00a, 0xf00b, 0xf00c, 0xf200, 0xf200, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xf01a, 0xf018, + 0xf003, 0xf016, 0xf002, 0xf00e, 0xf00d, 0xf200, 0xf200, 0xf200, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf200, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short alt_map[NR_KEYS] = { + 0xf81b, 0xf500, 0xf501, 0xf502, 0xf503, 0xf504, 0xf505, 0xf506, + 0xf507, 0xf508, 0xf509, 0xf50a, 0xf50b, 0xf200, 0xf209, 0xf205, + 0xf860, 0xf831, 0xf832, 0xf833, 0xf834, 0xf835, 0xf836, 0xf837, + 0xf838, 0xf839, 0xf830, 0xf82d, 0xf83d, 0xf8a3, 0xf87f, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf809, 0xf871, + 0xf877, 0xf865, 0xf872, 0xf874, 0xf879, 0xf875, 0xf869, 0xf86f, + 0xf870, 0xf85b, 0xf85d, 0xf85c, 0xf116, 0xf117, 0xf119, 0xf907, + 0xf908, 0xf909, 0xf30b, 0xf702, 0xf861, 0xf873, 0xf864, 0xf866, + 0xf867, 0xf868, 0xf86a, 0xf86b, 0xf86c, 0xf83b, 0xf827, 0xf80d, + 0xf904, 0xf905, 0xf906, 0xf30a, 0xf700, 0xf200, 0xf87a, 0xf878, + 0xf863, 0xf876, 0xf862, 0xf86e, 0xf86d, 0xf82c, 0xf82e, 0xf82f, + 0xf700, 0xf603, 0xf901, 0xf902, 0xf903, 0xf207, 0xf703, 0xf820, + 0xf701, 0xf702, 0xf210, 0xf600, 0xf211, 0xf900, 0xf310, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short ctrl_alt_map[NR_KEYS] = { + 0xf200, 0xf500, 0xf501, 0xf502, 0xf503, 0xf504, 0xf505, 0xf506, + 0xf507, 0xf508, 0xf509, 0xf50a, 0xf50b, 0xf200, 0xf209, 0xf205, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf115, + 0xf114, 0xf118, 0xf208, 0xf30d, 0xf30c, 0xf314, 0xf200, 0xf811, + 0xf817, 0xf805, 0xf812, 0xf814, 0xf819, 0xf815, 0xf809, 0xf80f, + 0xf810, 0xf200, 0xf200, 0xf200, 0xf20c, 0xf117, 0xf119, 0xf307, + 0xf308, 0xf309, 0xf30b, 0xf702, 0xf801, 0xf813, 0xf804, 0xf806, + 0xf807, 0xf808, 0xf80a, 0xf80b, 0xf80c, 0xf200, 0xf200, 0xf201, + 0xf304, 0xf305, 0xf306, 0xf30a, 0xf700, 0xf200, 0xf81a, 0xf818, + 0xf803, 0xf816, 0xf802, 0xf80e, 0xf80d, 0xf200, 0xf200, 0xf200, + 0xf700, 0xf603, 0xf301, 0xf302, 0xf303, 0xf207, 0xf703, 0xf200, + 0xf701, 0xf702, 0xf601, 0xf600, 0xf602, 0xf300, 0xf20c, 0xf30e, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, }; ushort *key_maps[MAX_NR_KEYMAPS] = { @@ -253,39 +154,39 @@ */ char func_buf[] = { - '\033', '[', '[', 'A', 0, - '\033', '[', '[', 'B', 0, - '\033', '[', '[', 'C', 0, - '\033', '[', '[', 'D', 0, - '\033', '[', '[', 'E', 0, - '\033', '[', '1', '7', '~', 0, - '\033', '[', '1', '8', '~', 0, - '\033', '[', '1', '9', '~', 0, - '\033', '[', '2', '0', '~', 0, - '\033', '[', '2', '1', '~', 0, - '\033', '[', '2', '3', '~', 0, - '\033', '[', '2', '4', '~', 0, - '\033', '[', '2', '5', '~', 0, - '\033', '[', '2', '6', '~', 0, - '\033', '[', '2', '8', '~', 0, - '\033', '[', '2', '9', '~', 0, - '\033', '[', '3', '1', '~', 0, - '\033', '[', '3', '2', '~', 0, - '\033', '[', '3', '3', '~', 0, - '\033', '[', '3', '4', '~', 0, - '\033', '[', '1', '~', 0, - '\033', '[', '2', '~', 0, - '\033', '[', '3', '~', 0, - '\033', '[', '4', '~', 0, - '\033', '[', '5', '~', 0, - '\033', '[', '6', '~', 0, - '\033', '[', 'M', 0, - '\033', '[', 'P', 0, + '\033', '[', '[', 'A', 0, + '\033', '[', '[', 'B', 0, + '\033', '[', '[', 'C', 0, + '\033', '[', '[', 'D', 0, + '\033', '[', '[', 'E', 0, + '\033', '[', '1', '7', '~', 0, + '\033', '[', '1', '8', '~', 0, + '\033', '[', '1', '9', '~', 0, + '\033', '[', '2', '0', '~', 0, + '\033', '[', '2', '1', '~', 0, + '\033', '[', '2', '3', '~', 0, + '\033', '[', '2', '4', '~', 0, + '\033', '[', '2', '5', '~', 0, + '\033', '[', '2', '6', '~', 0, + '\033', '[', '2', '8', '~', 0, + '\033', '[', '2', '9', '~', 0, + '\033', '[', '3', '1', '~', 0, + '\033', '[', '3', '2', '~', 0, + '\033', '[', '3', '3', '~', 0, + '\033', '[', '3', '4', '~', 0, + '\033', '[', '1', '~', 0, + '\033', '[', '2', '~', 0, + '\033', '[', '3', '~', 0, + '\033', '[', '4', '~', 0, + '\033', '[', '5', '~', 0, + '\033', '[', '6', '~', 0, + '\033', '[', 'M', 0, + '\033', '[', 'P', 0, }; char *funcbufptr = func_buf; int funcbufsize = sizeof(func_buf); -int funcbufleft; /* space left */ +int funcbufleft = 0; /* space left */ char *func_table[MAX_NR_FUNC] = { func_buf + 0, diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/char/defkeymap-acorn.map linux/drivers/acorn/char/defkeymap-acorn.map --- v2.4.8/linux/drivers/acorn/char/defkeymap-acorn.map Wed Dec 31 16:00:00 1969 +++ linux/drivers/acorn/char/defkeymap-acorn.map Sun Aug 12 10:38:48 2001 @@ -0,0 +1,356 @@ +# Default kernel keymap for Acorn machines. This uses 7 modifier combinations. +keymaps 0-2,4-5,8,12 +# Change the above line into +# keymaps 0-2,4-6,8,12 +# in case you want the entries +# altgr control keycode 52 = Boot +# altgr control keycode 102 = Boot +# below. +# +# In fact AltGr is used very little, and one more keymap can +# be saved by mapping AltGr to Alt (and adapting a few entries): +# keycode 96 = Alt +# +keycode 0 = Escape + shift keycode 0 = Escape + alt keycode 0 = Meta_Escape +keycode 1 = F1 F11 Console_13 + control keycode 1 = F1 + alt keycode 1 = Console_1 + control alt keycode 1 = Console_1 +keycode 2 = F2 F12 Console_14 + control keycode 2 = F2 + alt keycode 2 = Console_2 + control alt keycode 2 = Console_2 +keycode 3 = F3 F13 Console_15 + control keycode 3 = F3 + alt keycode 3 = Console_3 + control alt keycode 3 = Console_3 +keycode 4 = F4 F14 Console_16 + control keycode 4 = F4 + alt keycode 4 = Console_4 + control alt keycode 4 = Console_4 +keycode 5 = F5 F15 Console_17 + control keycode 5 = F5 + alt keycode 5 = Console_5 + control alt keycode 5 = Console_5 +keycode 6 = F6 F16 Console_18 + control keycode 6 = F6 + alt keycode 6 = Console_6 + control alt keycode 6 = Console_6 +keycode 7 = F7 F17 Console_19 + control keycode 7 = F7 + alt keycode 7 = Console_7 + control alt keycode 7 = Console_7 +keycode 8 = F8 F18 Console_20 + control keycode 8 = F8 + alt keycode 8 = Console_8 + control alt keycode 8 = Console_8 +keycode 9 = F9 F19 Console_21 + control keycode 9 = F9 + alt keycode 9 = Console_9 + control alt keycode 9 = Console_9 +keycode 10 = F10 F20 Console_22 + control keycode 10 = F10 + alt keycode 10 = Console_10 + control alt keycode 10 = Console_10 +keycode 11 = F11 F11 Console_23 + control keycode 11 = F11 + alt keycode 11 = Console_11 + control alt keycode 11 = Console_11 +keycode 12 = F12 F12 Console_24 + control keycode 12 = F12 + alt keycode 12 = Console_12 + control alt keycode 12 = Console_12 +keycode 13 = +keycode 14 = Scroll_Lock + shift keycode 14 = Show_Memory + altgr keycode 14 = Show_Registers + control keycode 14 = Show_State + alt keycode 14 = Scroll_Lock +keycode 15 = Break +keycode 16 = grave asciitilde + alt keycode 16 = Meta_grave +keycode 17 = one exclam + alt keycode 17 = Meta_one +keycode 18 = two at at + control keycode 18 = nul + alt keycode 18 = Meta_two +keycode 19 = three numbersign + control keycode 19 = Escape + alt keycode 19 = Meta_three +keycode 20 = four dollar dollar + control keycode 20 = Control_backslash + alt keycode 20 = Meta_four +keycode 21 = five percent + control keycode 21 = Control_bracketright + alt keycode 21 = Meta_five +keycode 22 = six asciicircum + control keycode 22 = Control_asciicircum + alt keycode 22 = Meta_six +keycode 23 = seven ampersand braceleft + control keycode 23 = Control_underscore + alt keycode 23 = Meta_seven +keycode 24 = eight asterisk bracketleft + control keycode 24 = Delete + alt keycode 24 = Meta_eight +keycode 25 = nine parenleft bracketright + alt keycode 25 = Meta_nine +keycode 26 = zero parenright braceright + alt keycode 26 = Meta_zero +keycode 27 = minus underscore backslash + control keycode 27 = Control_underscore + shift control keycode 27 = Control_underscore + alt keycode 27 = Meta_minus +keycode 28 = equal plus + alt keycode 28 = Meta_equal +keycode 29 = sterling currency + alt keycode 29 = 0x08a3 +keycode 30 = Delete Delete + control keycode 30 = BackSpace + alt keycode 30 = Meta_Delete +keycode 31 = Insert +keycode 32 = Find +keycode 33 = Prior + shift keycode 33 = Scroll_Backward +keycode 34 = Num_Lock +keycode 35 = KP_Divide +keycode 36 = KP_Multiply +keycode 37 = 0x0314 +keycode 38 = Tab Tab + alt keycode 38 = Meta_Tab +keycode 39 = q +keycode 40 = w +keycode 41 = e + altgr keycode 41 = Hex_E +keycode 42 = r +keycode 43 = t +keycode 44 = y +keycode 45 = u +keycode 46 = i +keycode 47 = o +keycode 48 = p +keycode 49 = bracketleft braceleft + control keycode 49 = Escape + alt keycode 49 = Meta_bracketleft +keycode 50 = bracketright braceright asciitilde + control keycode 50 = Control_bracketright + alt keycode 50 = Meta_bracketright +keycode 51 = backslash bar + control keycode 51 = Control_backslash + alt keycode 51 = Meta_backslash +keycode 52 = Remove +# altgr control keycode 52 = Boot + control alt keycode 52 = Boot +keycode 53 = Select +keycode 54 = Next + shift keycode 54 = Scroll_Forward +keycode 55 = KP_7 + altgr keycode 55 = Hex_7 + alt keycode 55 = Ascii_7 +keycode 56 = KP_8 + altgr keycode 56 = Hex_8 + alt keycode 56 = Ascii_8 +keycode 57 = KP_9 + altgr keycode 57 = Hex_9 + alt keycode 57 = Ascii_9 +keycode 58 = KP_Subtract +keycode 59 = Control +keycode 60 = a + altgr keycode 60 = Hex_A +keycode 61 = s +keycode 62 = d + altgr keycode 62 = Hex_D +keycode 63 = f + altgr keycode 63 = Hex_F +keycode 64 = g +keycode 65 = h +keycode 66 = j +keycode 67 = k +keycode 68 = l +keycode 69 = semicolon colon + alt keycode 69 = Meta_semicolon +keycode 70 = apostrophe quotedbl + control keycode 70 = Control_g + alt keycode 70 = Meta_apostrophe +keycode 71 = Return + alt keycode 71 = Meta_Control_m +keycode 72 = KP_4 + altgr keycode 72 = Hex_4 + alt keycode 72 = Ascii_4 +keycode 73 = KP_5 + altgr keycode 73 = Hex_5 + alt keycode 73 = Ascii_5 +keycode 74 = KP_6 + altgr keycode 74 = Hex_6 + alt keycode 74 = Ascii_6 +keycode 75 = KP_Add +keycode 76 = Shift +keycode 77 = +keycode 78 = z +keycode 79 = x +keycode 80 = c + altgr keycode 80 = Hex_C +keycode 81 = v +keycode 82 = b + altgr keycode 82 = Hex_B +keycode 83 = n +keycode 84 = m +keycode 85 = comma less + alt keycode 85 = Meta_comma +keycode 86 = period greater + control keycode 86 = Compose + alt keycode 86 = Meta_period +keycode 87 = slash question + control keycode 87 = Delete + alt keycode 87 = Meta_slash +keycode 88 = Shift +keycode 89 = Up +keycode 90 = KP_1 + altgr keycode 90 = Hex_1 + alt keycode 90 = Ascii_1 +keycode 91 = KP_2 + altgr keycode 91 = Hex_2 + alt keycode 91 = Ascii_2 +keycode 92 = KP_3 + altgr keycode 92 = Hex_3 + alt keycode 92 = Ascii_3 +keycode 93 = Caps_Lock +keycode 94 = Alt +keycode 95 = space space + control keycode 95 = nul + alt keycode 95 = Meta_space +keycode 96 = AltGr +keycode 97 = Control +keycode 98 = Left + alt keycode 98 = Decr_Console +keycode 99 = Down +keycode 100 = Right + alt keycode 100 = Incr_Console +keycode 101 = KP_0 + altgr keycode 101 = Hex_0 + alt keycode 101 = Ascii_0 +keycode 102 = KP_Period +# altgr control keycode 102 = Boot + control alt keycode 102 = Boot +keycode 103 = KP_Enter +keycode 104 = +keycode 105 = +keycode 106 = +keycode 107 = +keycode 108 = +keycode 109 = +keycode 110 = +keycode 111 = +keycode 112 = +keycode 113 = +keycode 114 = +keycode 115 = +keycode 116 = +keycode 117 = +keycode 118 = +keycode 119 = +keycode 120 = +keycode 121 = +keycode 122 = +keycode 123 = +keycode 124 = +keycode 125 = +keycode 126 = +keycode 127 = +string F1 = "\033[[A" +string F2 = "\033[[B" +string F3 = "\033[[C" +string F4 = "\033[[D" +string F5 = "\033[[E" +string F6 = "\033[17~" +string F7 = "\033[18~" +string F8 = "\033[19~" +string F9 = "\033[20~" +string F10 = "\033[21~" +string F11 = "\033[23~" +string F12 = "\033[24~" +string F13 = "\033[25~" +string F14 = "\033[26~" +string F15 = "\033[28~" +string F16 = "\033[29~" +string F17 = "\033[31~" +string F18 = "\033[32~" +string F19 = "\033[33~" +string F20 = "\033[34~" +string Find = "\033[1~" +string Insert = "\033[2~" +string Remove = "\033[3~" +string Select = "\033[4~" +string Prior = "\033[5~" +string Next = "\033[6~" +string Macro = "\033[M" +string Pause = "\033[P" +compose '`' 'A' to 'Ŕ' +compose '`' 'a' to 'ŕ' +compose '\'' 'A' to 'Á' +compose '\'' 'a' to 'á' +compose '^' 'A' to 'Â' +compose '^' 'a' to 'â' +compose '~' 'A' to 'Ă' +compose '~' 'a' to 'ă' +compose '"' 'A' to 'Ä' +compose '"' 'a' to 'ä' +compose 'O' 'A' to 'Ĺ' +compose 'o' 'a' to 'ĺ' +compose '0' 'A' to 'Ĺ' +compose '0' 'a' to 'ĺ' +compose 'A' 'A' to 'Ĺ' +compose 'a' 'a' to 'ĺ' +compose 'A' 'E' to 'Ć' +compose 'a' 'e' to 'ć' +compose ',' 'C' to 'Ç' +compose ',' 'c' to 'ç' +compose '`' 'E' to 'Č' +compose '`' 'e' to 'č' +compose '\'' 'E' to 'É' +compose '\'' 'e' to 'é' +compose '^' 'E' to 'Ę' +compose '^' 'e' to 'ę' +compose '"' 'E' to 'Ë' +compose '"' 'e' to 'ë' +compose '`' 'I' to 'Ě' +compose '`' 'i' to 'ě' +compose '\'' 'I' to 'Í' +compose '\'' 'i' to 'í' +compose '^' 'I' to 'Î' +compose '^' 'i' to 'î' +compose '"' 'I' to 'Ď' +compose '"' 'i' to 'ď' +compose '-' 'D' to 'Đ' +compose '-' 'd' to 'đ' +compose '~' 'N' to 'Ń' +compose '~' 'n' to 'ń' +compose '`' 'O' to 'Ň' +compose '`' 'o' to 'ň' +compose '\'' 'O' to 'Ó' +compose '\'' 'o' to 'ó' +compose '^' 'O' to 'Ô' +compose '^' 'o' to 'ô' +compose '~' 'O' to 'Ő' +compose '~' 'o' to 'ő' +compose '"' 'O' to 'Ö' +compose '"' 'o' to 'ö' +compose '/' 'O' to 'Ř' +compose '/' 'o' to 'ř' +compose '`' 'U' to 'Ů' +compose '`' 'u' to 'ů' +compose '\'' 'U' to 'Ú' +compose '\'' 'u' to 'ú' +compose '^' 'U' to 'Ű' +compose '^' 'u' to 'ű' +compose '"' 'U' to 'Ü' +compose '"' 'u' to 'ü' +compose '\'' 'Y' to 'Ý' +compose '\'' 'y' to 'ý' +compose 'T' 'H' to 'Ţ' +compose 't' 'h' to 'ţ' +compose 's' 's' to 'ß' +compose '"' 'y' to '˙' +compose 's' 'z' to 'ß' +compose 'i' 'j' to '˙' diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/char/defkeymap-l7200.c linux/drivers/acorn/char/defkeymap-l7200.c --- v2.4.8/linux/drivers/acorn/char/defkeymap-l7200.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/acorn/char/defkeymap-l7200.c Sun Aug 12 10:38:48 2001 @@ -0,0 +1,386 @@ +/* + * linux/drivers/acorn/char/defkeymap-l7200.c + * + * Default keyboard maps for LinkUp Systems L7200 board + * + * Copyright (C) 2000 Steve Hill (sjhill@cotw.com) + * + * Changelog: + * 08-04-2000 SJH Created file + */ + +#include +#include +#include + +/* Normal (maps 1:1 with no processing) */ +#define KTn 0xF0 +/* Function keys */ +#define KTf 0xF1 +/* Special (Performs special house-keeping funcs) */ +#define KTs 0xF2 +#define KIGNORE K(KTs, 0) /* Ignore */ +#define KENTER K(KTs, 1) /* Enter */ +#define KREGS K(KTs, 2) /* Regs */ +#define KMEM K(KTs, 3) /* Mem */ +#define KSTAT K(KTs, 4) /* State */ +#define KINTR K(KTs, 5) /* Intr */ +#define Ksl 6 /* Last console */ +#define KCAPSLK K(KTs, 7) /* Caps lock */ +#define KNUMLK K(KTs, 8) /* Num-lock */ +#define KSCRLLK K(KTs, 9) /* Scroll-lock */ +#define KSCRLFOR K(KTs,10) /* Scroll forward */ +#define KSCRLBAK K(KTs,11) /* Scroll back */ +#define KREBOOT K(KTs,12) /* Reboot */ +#define KCAPSON K(KTs,13) /* Caps on */ +#define KCOMPOSE K(KTs,14) /* Compose */ +#define KSAK K(KTs,15) /* SAK */ +#define CONS_DEC K(KTs,16) /* Dec console */ +#define CONS_INC K(KTs,17) /* Incr console */ +#define KFLOPPY K(KTs,18) /* Floppy */ +/* Key pad (0-9 = digits, 10=+, 11=-, 12=*, 13=/, 14=enter, 16=., 17=# */ +#define KTp 0xF3 +#define KPAD_0 K(KTp, 0 ) +#define KPAD_1 K(KTp, 1 ) +#define KPAD_2 K(KTp, 2 ) +#define KPAD_3 K(KTp, 3 ) +#define KPAD_4 K(KTp, 4 ) +#define KPAD_5 K(KTp, 5 ) +#define KPAD_6 K(KTp, 6 ) +#define KPAD_7 K(KTp, 7 ) +#define KPAD_8 K(KTp, 8 ) +#define KPAD_9 K(KTp, 9 ) +#define KPAD_PL K(KTp,10 ) +#define KPAD_MI K(KTp,11 ) +#define KPAD_ML K(KTp,12 ) +#define KPAD_DV K(KTp,13 ) +#define KPAD_EN K(KTp,14 ) +#define KPAD_DT K(KTp,16 ) +#define KPAD_HS K(KTp,20 ) +/* Console switching */ +#define KCn 0xF5 +/* Cursor */ +#define KTc 0xF6 +#define Kcd 0 /* Cursor down */ +#define Kcl 1 /* Cursor left */ +#define Kcr 2 /* Cursor right */ +#define Kcu 3 /* Cursor up */ +/* Shift/alt modifiers etc */ +#define KMd 0xF7 +#define KSHIFT K(KMd, 0 ) +#define KALTGR K(KMd, 1 ) +#define KCTRL K(KMd, 2 ) +#define KALT K(KMd, 3 ) +/* Meta */ +#define KMt 0xF8 +#define KAs 0xF9 +#define KPADA_0 K(KAs, 0 ) +#define KPADA_1 K(KAs, 1 ) +#define KPADA_2 K(KAs, 2 ) +#define KPADA_3 K(KAs, 3 ) +#define KPADA_4 K(KAs, 4 ) +#define KPADA_5 K(KAs, 5 ) +#define KPADA_6 K(KAs, 6 ) +#define KPADA_7 K(KAs, 7 ) +#define KPADA_8 K(KAs, 8 ) +#define KPADA_9 K(KAs, 9 ) +#define KPADB_0 K(KAs,10 ) +#define KPADB_1 K(KAs,11 ) +#define KPADB_2 K(KAs,12 ) +#define KPADB_3 K(KAs,13 ) +#define KPADB_4 K(KAs,14 ) +#define KPADB_5 K(KAs,15 ) +#define KPADB_6 K(KAs,16 ) +#define KPADB_7 K(KAs,17 ) +#define KPADB_8 K(KAs,18 ) +#define KPADB_9 K(KAs,19 ) +/* Locking keys */ +#define KLk 0xFA +/* Letters */ +#define KTl 0xFB + +/* + * Here is the layout of the keys for the Fujitsu QWERTY + * style keyboard: + * + * static char Fujitsu_Key_Table[] = + * { + * KALT, '`' , KNUL, KCTL, KFUN, KESC, '1' , '2' , + * '9' , '0' , '-' , '=' , KNUL, KBSP, KNUL, KNUL, + * KNUL, KBSL, KSHF, KNUL, KNUL, KDEL, KNUL, 't' , + * 'y' , 'u' , 'i' , KRET, KSHF, KPGD, KNUL, KNUL, + * KNUL, KTAB, KNUL, KNUL, KNUL, 'q' , 'w' , 'e' , + * 'r' , 'o' , 'p' , '[' , KNUL, ']' , KNUL, KNUL, + * KNUL, 'z' , KNUL, KNUL, KNUL, KSHL, KNUL, KNUL, + * 'k' , 'l' , ';' , KSQT, KNUL, KPGU, KNUL, KNUL, + * KNUL, 'a' , KNUL, KNUL, KNUL, 's' , 'd' , 'f' , + * 'g' , 'h' , 'j' , '/' , KNUL, KHME, KNUL, KNUL, + * KNUL, 'x' , KNUL, KNUL, KNUL, 'c' , 'v' , 'b' , + * 'n' , 'm' , ',' , '.' , KNUL, ' ' , KNUL, KNUL, + * KNUL, KNUL, KNUL, KNUL, KNUL, '3' , '4' , '5' , + * '6' , '7' , '8' , KNUL, KPRG, KNUL, KEND, KNUL, + * }; + */ + +u_short plain_map[NR_KEYS]= +{ + 0xf703, 0xf060, 0xf200, 0xf702, 0xf200, 0xf01b, 0xf031, 0xf032, + 0xf039, 0xf030, 0xf02d, 0xf03d, 0xf200, 0xf07f, 0xf200, 0xf200, + 0xf200, 0xf05c, 0xf700, 0xf200, 0xf200, 0xf116, 0xf000, 0xfb74, + 0xfb79, 0xfb75, 0xfb69, 0xf201, 0xf700, 0xf600, 0xf200, 0xf200, + 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xfb71, 0xfb77, 0xfb65, + 0xfb72, 0xfb6f, 0xfb70, 0xf05b, 0xf200, 0xf05d, 0xf200, 0xf200, + 0xf200, 0xfb7a, 0xf200, 0xf200, 0xf200, 0xf207, 0xf200, 0xf200, + 0xfb6b, 0xfb6c, 0xf03b, 0xf027, 0xf200, 0xf603, 0xf200, 0xf200, + 0xf200, 0xfb61, 0xf200, 0xf200, 0xf200, 0xfb73, 0xfb64, 0xfb66, + 0xfb67, 0xfb68, 0xfb6a, 0xf02f, 0xf200, 0xf601, 0xf200, 0xf200, + 0xf200, 0xfb78, 0xf200, 0xf200, 0xf200, 0xfb63, 0xfb76, 0xfb62, + 0xfb6e, 0xfb6d, 0xf02c, 0xf02e, 0xf200, 0xf020, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf033, 0xf034, 0xf035, + 0xf036, 0xf037, 0xf038, 0xf200, 0xf200, 0xf200, 0xf602, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short shift_map[NR_KEYS]= +{ + 0xf703, 0xf07e, 0xf200, 0xf702, 0xf200, 0xf01b, 0xf021, 0xf040, + 0xf028, 0xf029, 0xf05f, 0xf02b, 0xf200, 0xf07f, 0xf200, 0xf200, + 0xf200, 0xf07c, 0xf700, 0xf200, 0xf200, 0xf116, 0xf000, 0xfb54, + 0xfb59, 0xfb55, 0xfb49, 0xf201, 0xf700, 0xf600, 0xf200, 0xf200, + 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xfb51, 0xfb57, 0xfb45, + 0xfb52, 0xfb4f, 0xfb50, 0xf07b, 0xf200, 0xf07d, 0xf200, 0xf200, + 0xf200, 0xfb5a, 0xf200, 0xf200, 0xf200, 0xf207, 0xf200, 0xf200, + 0xfb4b, 0xfb4c, 0xf03a, 0xf022, 0xf200, 0xf603, 0xf200, 0xf200, + 0xf200, 0xfb41, 0xf200, 0xf200, 0xf200, 0xfb53, 0xfb44, 0xfb46, + 0xfb47, 0xfb48, 0xfb4a, 0xf03f, 0xf200, 0xf601, 0xf200, 0xf200, + 0xf200, 0xfb58, 0xf200, 0xf200, 0xf200, 0xfb43, 0xfb56, 0xfb42, + 0xfb4e, 0xfb4d, 0xf03c, 0xf03e, 0xf200, 0xf020, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf023, 0xf024, 0xf025, + 0xf05e, 0xf026, 0xf02a, 0xf200, 0xf200, 0xf200, 0xf602, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, +}; + +u_short altgr_map[NR_KEYS]= +{ + KIGNORE ,K(KCn,12 ),K(KCn,13 ),K(KCn,14 ),K(KCn,15 ),K(KCn,16 ),K(KCn,17 ),K(KCn, 18), + K(KCn, 19),K(KCn,20 ),K(KCn,21 ),K(KCn,22 ),K(KCn,23 ),KIGNORE ,KREGS ,KINTR , + KIGNORE ,KIGNORE ,K(KTn,'@'),KIGNORE ,K(KTn,'$'),KIGNORE ,KIGNORE ,K(KTn,'{'), + K(KTn,'['),K(KTn,']'),K(KTn,'}'),K(KTn,'\\'),KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,21 ), + K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KTl,'q'), + K(KTl,'w'),K(KTl,'e'),K(KTl,'r'),K(KTl,'t' ),K(KTl,'y'),K(KTl,'u'),K(KTl,'i' ),K(KTl,'o'), + K(KTl,'p'),KIGNORE ,K(KTn,'~'),KIGNORE ,K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPADB_7 , + KPADB_8 ,KPADB_9 ,KPAD_MI ,KCTRL ,K(KAs,20 ),K(KTl,'s'),K(KAs,23 ),K(KAs,25 ), + K(KTl,'g'),K(KTl,'h'),K(KTl,'j'),K(KTl,'k' ),K(KTl,'l'),KIGNORE ,KIGNORE ,KENTER , + KPADB_4 ,KPADB_5 ,KPADB_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KTl,'z' ),K(KTl,'x'), + K(KAs,22 ),K(KTl,'v'),K(KTl,21 ),K(KTl,'n' ),K(KTl,'m'),KIGNORE ,KIGNORE ,KIGNORE , + KSHIFT ,K(KTc,Kcu),KPADB_1 ,KPADB_2 ,KPADB_3 ,KCAPSLK ,KALT ,KIGNORE , + KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPADB_0 ,KPAD_DT ,KPAD_EN , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , +}; + +u_short ctrl_map[NR_KEYS]= +{ + 0xf703, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200, 0xf001, 0xf002, + 0xf009, 0xf000, 0xf031, 0xf200, 0xf200, 0xf07f, 0xf200, 0xf200, + 0xf200, 0xf01c, 0xf700, 0xf200, 0xf200, 0xf116, 0xf000, 0xf020, + 0xf019, 0xf015, 0xf009, 0xf201, 0xf700, 0xf600, 0xf200, 0xf200, + 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xf011, 0xf017, 0xf005, + 0xf012, 0xf00f, 0xf010, 0xf01b, 0xf200, 0xf01d, 0xf200, 0xf200, + 0xf200, 0xf01a, 0xf200, 0xf200, 0xf200, 0xf207, 0xf200, 0xf200, + 0xf00b, 0xf00c, 0xf200, 0xf007, 0xf200, 0xf603, 0xf200, 0xf200, + 0xf200, 0xf001, 0xf200, 0xf200, 0xf200, 0xf001, 0xf013, 0xf006, + 0xf007, 0xf008, 0xf00a, 0xf07f, 0xf200, 0xf601, 0xf200, 0xf200, + 0xf200, 0xf018, 0xf200, 0xf200, 0xf200, 0xf003, 0xf016, 0xf002, + 0xf00e, 0xf00d, 0xf200, 0xf200, 0xf200, 0xf000, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf01b, 0xf01c, 0xf01d, + 0xf036, 0xf037, 0xf038, 0xf200, 0xf200, 0xf200, 0xf602, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, + 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf602, 0xf200, +}; + +u_short shift_ctrl_map[NR_KEYS]= +{ + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KFLOPPY ,KINTR , + KIGNORE ,KIGNORE ,K(KTn, 0 ),KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,K(KTn,31 ),KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,21 ), + K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KTn,17 ), + K(KTn,23 ),K(KTn, 5 ),K(KTn,18 ),K(KTn,20 ),K(KTn,25 ),K(KTn,21 ),K(KTn, 9 ),K(KTn,15 ), + K(KTn,16 ),KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPAD_7 , + KPAD_8 ,KPAD_9 ,KPAD_MI ,KCTRL ,K(KTn, 1 ),K(KTn,19 ),K(KTn, 4 ),K(KTn, 6 ), + K(KTn, 7 ),K(KTn, 8 ),K(KTn,10 ),K(KTn,11 ),K(KTn,12 ),KIGNORE ,K(KTn, 7 ),KENTER , + KPAD_4 ,KPAD_5 ,KPAD_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KTn,26 ),K(KTn,24 ), + K(KTn, 3 ),K(KTn,22 ),K(KTn, 2 ),K(KTn,14 ),K(KTn,13 ),KIGNORE ,KIGNORE ,KIGNORE , + KSHIFT ,K(KTc,Kcu),KPAD_1 ,KPAD_2 ,KPAD_3 ,KCAPSLK ,KALT ,K(KTn, 0 ), + KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPAD_0 ,KPAD_DT ,KPAD_EN , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , +}; + +u_short alt_map[NR_KEYS]= +{ + K(KMt,27 ),K(KCn, 0 ),K(KCn, 1 ),K(KCn, 2 ),K(KCn, 3 ),K(KCn, 4 ),K(KCn, 5 ),K(KCn, 6 ), + K(KCn, 7 ),K(KCn, 8 ),K(KCn, 9 ),K(KCn,10 ),K(KCn,11 ),KIGNORE ,KSCRLLK ,KINTR , + K(KMt,'`'),K(KMt,'1'),K(KMt,'2'),K(KMt,'3' ),K(KMt,'4'),K(KMt,'5'),K(KMt,'6' ),K(KMt,'7'), + K(KMt,'8'),K(KMt,'9'),K(KMt,'0'),K(KMt,'-' ),K(KMt,'='),K(KMt,'Ł'),K(KMt,127 ),K(KTf,21 ), + K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,K(KMt, 9 ),K(KMt,'q'), + K(KMt,'w'),K(KMt,'e'),K(KMt,'r'),K(KMt,'t' ),K(KMt,'y'),K(KMt,'u'),K(KMt,'i' ),K(KMt,'o'), + K(KMt,'p'),K(KMt,'['),K(KMt,']'),K(KMt,'\\'),K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPADA_7 , + KPADA_8 ,KPADA_9 ,KPAD_MI ,KCTRL ,K(KMt,'a'),K(KMt,'s'),K(KMt,'d' ),K(KMt,'f'), + K(KMt,'g'),K(KMt,'h'),K(KMt,'j'),K(KMt,'k' ),K(KMt,'l'),K(KMt,';'),K(KMt,'\''),K(KMt,13 ), + KPADA_4 ,KPADA_5 ,KPADA_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KMt,'z' ),K(KMt,'x'), + K(KMt,'c'),K(KMt,'v'),K(KMt,'b'),K(KMt,'n' ),K(KMt,'m'),K(KMt,','),K(KMt,'.' ),KIGNORE , + KSHIFT ,K(KTc,Kcu),KPADA_1 ,KPADA_2 ,KPADA_3 ,KCAPSLK ,KALT ,K(KMt,' '), + KALTGR ,KCTRL ,CONS_DEC ,K(KTc,Kcd ),CONS_INC ,KPADA_0 ,KPAD_DT ,KPAD_EN , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , +}; + +u_short ctrl_alt_map[NR_KEYS]= +{ + KIGNORE ,K(KCn, 0 ),K(KCn, 1 ),K(KCn, 2 ),K(KCn, 3 ),K(KCn, 4 ),K(KCn, 5 ),K(KCn, 6 ), + K(KCn, 7 ),K(KCn, 8 ),K(KCn, 9 ),K(KCn,10 ),K(KCn,11 ),KIGNORE ,KIGNORE ,KINTR , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,21 ), + K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KMt,17 ), + K(KMt,23 ),K(KMt, 5 ),K(KMt,18 ),K(KMt,20 ),K(KMt,25 ),K(KMt,21 ),K(KMt, 9 ),K(KMt,15 ), + K(KMt,16 ),KIGNORE ,KIGNORE ,KIGNORE ,KREBOOT ,K(KTf,23 ),K(KTf,25 ),KPAD_7 , + KPAD_8 ,KPAD_9 ,KPAD_MI ,KCTRL ,K(KMt, 1 ),K(KMt,19 ),K(KMt, 4 ),K(KMt, 6 ), + K(KMt, 7 ),K(KMt, 8 ),K(KMt,10 ),K(KMt,11 ),K(KMt,12 ),KIGNORE ,KIGNORE ,KENTER , + KPAD_4 ,KPAD_5 ,KPAD_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KMt,26 ),K(KMt,24 ), + K(KMt, 3 ),K(KMt,22 ),K(KMt, 2 ),K(KMt,14 ),K(KMt,13 ),KIGNORE ,KIGNORE ,KIGNORE , + KSHIFT ,K(KTc,Kcu),KPAD_1 ,KPAD_2 ,KPAD_3 ,KCAPSLK ,KALT ,KIGNORE , + KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPAD_0 ,KREBOOT ,KPAD_EN , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , + KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , +}; + +ushort *key_maps[MAX_NR_KEYMAPS] = { + plain_map, shift_map, altgr_map, 0, + ctrl_map, shift_ctrl_map, 0, 0, + alt_map, 0, 0, 0, + ctrl_alt_map, 0 +}; + +unsigned int keymap_count = 7; + +/* + * Philosophy: most people do not define more strings, but they who do + * often want quite a lot of string space. So, we statically allocate + * the default and allocate dynamically in chunks of 512 bytes. + */ + +char func_buf[] = { + '\033', '[', '[', 'A', 0, + '\033', '[', '[', 'B', 0, + '\033', '[', '[', 'C', 0, + '\033', '[', '[', 'D', 0, + '\033', '[', '[', 'E', 0, + '\033', '[', '1', '7', '~', 0, + '\033', '[', '1', '8', '~', 0, + '\033', '[', '1', '9', '~', 0, + '\033', '[', '2', '0', '~', 0, + '\033', '[', '2', '1', '~', 0, + '\033', '[', '2', '3', '~', 0, + '\033', '[', '2', '4', '~', 0, + '\033', '[', '2', '5', '~', 0, + '\033', '[', '2', '6', '~', 0, + '\033', '[', '2', '8', '~', 0, + '\033', '[', '2', '9', '~', 0, + '\033', '[', '3', '1', '~', 0, + '\033', '[', '3', '2', '~', 0, + '\033', '[', '3', '3', '~', 0, + '\033', '[', '3', '4', '~', 0, + '\033', '[', '1', '~', 0, + '\033', '[', '2', '~', 0, + '\033', '[', '3', '~', 0, + '\033', '[', '4', '~', 0, + '\033', '[', '5', '~', 0, + '\033', '[', '6', '~', 0, + '\033', '[', 'M', 0, + '\033', '[', 'P', 0, +}; + +char *funcbufptr = func_buf; +int funcbufsize = sizeof(func_buf); +int funcbufleft = 0; /* space left */ + +char *func_table[MAX_NR_FUNC] = { + func_buf + 0, + func_buf + 5, + func_buf + 10, + func_buf + 15, + func_buf + 20, + func_buf + 25, + func_buf + 31, + func_buf + 37, + func_buf + 43, + func_buf + 49, + func_buf + 55, + func_buf + 61, + func_buf + 67, + func_buf + 73, + func_buf + 79, + func_buf + 85, + func_buf + 91, + func_buf + 97, + func_buf + 103, + func_buf + 109, + func_buf + 115, + func_buf + 120, + func_buf + 125, + func_buf + 130, + func_buf + 135, + func_buf + 140, + func_buf + 145, + 0, + 0, + func_buf + 149, + 0, +}; + +struct kbdiacr accent_table[MAX_DIACR] = { + {'`', 'A', '\300'}, {'`', 'a', '\340'}, + {'\'', 'A', '\301'}, {'\'', 'a', '\341'}, + {'^', 'A', '\302'}, {'^', 'a', '\342'}, + {'~', 'A', '\303'}, {'~', 'a', '\343'}, + {'"', 'A', '\304'}, {'"', 'a', '\344'}, + {'O', 'A', '\305'}, {'o', 'a', '\345'}, + {'0', 'A', '\305'}, {'0', 'a', '\345'}, + {'A', 'A', '\305'}, {'a', 'a', '\345'}, + {'A', 'E', '\306'}, {'a', 'e', '\346'}, + {',', 'C', '\307'}, {',', 'c', '\347'}, + {'`', 'E', '\310'}, {'`', 'e', '\350'}, + {'\'', 'E', '\311'}, {'\'', 'e', '\351'}, + {'^', 'E', '\312'}, {'^', 'e', '\352'}, + {'"', 'E', '\313'}, {'"', 'e', '\353'}, + {'`', 'I', '\314'}, {'`', 'i', '\354'}, + {'\'', 'I', '\315'}, {'\'', 'i', '\355'}, + {'^', 'I', '\316'}, {'^', 'i', '\356'}, + {'"', 'I', '\317'}, {'"', 'i', '\357'}, + {'-', 'D', '\320'}, {'-', 'd', '\360'}, + {'~', 'N', '\321'}, {'~', 'n', '\361'}, + {'`', 'O', '\322'}, {'`', 'o', '\362'}, + {'\'', 'O', '\323'}, {'\'', 'o', '\363'}, + {'^', 'O', '\324'}, {'^', 'o', '\364'}, + {'~', 'O', '\325'}, {'~', 'o', '\365'}, + {'"', 'O', '\326'}, {'"', 'o', '\366'}, + {'/', 'O', '\330'}, {'/', 'o', '\370'}, + {'`', 'U', '\331'}, {'`', 'u', '\371'}, + {'\'', 'U', '\332'}, {'\'', 'u', '\372'}, + {'^', 'U', '\333'}, {'^', 'u', '\373'}, + {'"', 'U', '\334'}, {'"', 'u', '\374'}, + {'\'', 'Y', '\335'}, {'\'', 'y', '\375'}, + {'T', 'H', '\336'}, {'t', 'h', '\376'}, + {'s', 's', '\337'}, {'"', 'y', '\377'}, + {'s', 'z', '\337'}, {'i', 'j', '\377'}, +}; + +unsigned int accent_table_size = 68; diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/char/keyb_arc.c linux/drivers/acorn/char/keyb_arc.c --- v2.4.8/linux/drivers/acorn/char/keyb_arc.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/acorn/char/keyb_arc.c Sun Aug 12 10:38:48 2001 @@ -427,8 +427,6 @@ void __init a5kkbd_init_hw (void) { - unsigned long flags; - if (request_irq (IRQ_KEYBOARDTX, a5kkbd_tx, 0, "keyboard", NULL) != 0) panic("Could not allocate keyboard transmit IRQ!"); (void)ioc_readb(IOC_KARTRX); diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/char/mouse_ps2.c linux/drivers/acorn/char/mouse_ps2.c --- v2.4.8/linux/drivers/acorn/char/mouse_ps2.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/acorn/char/mouse_ps2.c Sun Aug 12 10:38:48 2001 @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/net/etherh.c linux/drivers/acorn/net/etherh.c --- v2.4.8/linux/drivers/acorn/net/etherh.c Fri Feb 9 11:30:22 2001 +++ linux/drivers/acorn/net/etherh.c Sun Aug 12 10:38:48 2001 @@ -7,10 +7,11 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * - * NS8390 ANT etherh specific driver - * For Acorn machines - * + * NS8390 I-cubed EtherH and ANT EtherM specific driver * Thanks to I-Cubed for information on their cards. + * EtherM conversion (C) 1999 Chris Kemp and Tim Watterton + * EtherM integration (C) 2000 Aleph One Ltd (Tak-Shing Chan) + * EtherM integration re-engineered by Russell King. * * Changelog: * 08-12-1996 RMK 1.00 Created @@ -19,12 +20,9 @@ * 16-04-1998 RMK 1.05 Improved media autodetection * 10-02-2000 RMK 1.06 Updated for 2.3.43 * 13-05-2000 RMK 1.07 Updated for 2.3.99-pre8 - * - * Insmod Module Parameters - * ------------------------ - * io= - * irq= - * xcvr=<0|1> 0 = 10bT, 1=10b2 (Lan600/600A only) + * 12-10-1999 CK/TEW EtherM driver first release + * 21-12-2000 TTC EtherH/EtherM integration + * 25-12-2000 RMK 1.08 Clean integration of EtherM into this driver. */ #include @@ -57,18 +55,21 @@ #define DEBUG_INIT 2 static unsigned int net_debug = NET_DEBUG; + static const card_ids __init etherh_cids[] = { - { MANU_I3, PROD_I3_ETHERLAN500 }, - { MANU_I3, PROD_I3_ETHERLAN600 }, - { MANU_I3, PROD_I3_ETHERLAN600A }, - { 0xffff, 0xffff } + { MANU_ANT, PROD_ANT_ETHERM }, + { MANU_I3, PROD_I3_ETHERLAN500 }, + { MANU_I3, PROD_I3_ETHERLAN600 }, + { MANU_I3, PROD_I3_ETHERLAN600A }, + { 0xffff, 0xffff } }; + MODULE_AUTHOR("Russell King"); -MODULE_DESCRIPTION("i3 EtherH driver"); +MODULE_DESCRIPTION("EtherH/EtherM driver"); -static const char version[] __initdata = - "etherh [500/600/600A] ethernet driver (c) 2000 R.M.King v1.07\n"; +static char version[] __initdata = + "EtherH/EtherM Driver (c) 2000 Russell King v1.08\n"; #define ETHERH500_DATAPORT 0x200 /* MEMC */ #define ETHERH500_NS8390 0x000 /* MEMC */ @@ -83,13 +84,24 @@ #define ETHERH_CP_HEARTBEAT 2 #define ETHERH_TX_START_PAGE 1 -#define ETHERH_STOP_PAGE 0x7f +#define ETHERH_STOP_PAGE 127 + +/* + * These came from CK/TEW + */ +#define ETHERM_DATAPORT 0x080 /* MEMC */ +#define ETHERM_NS8390 0x200 /* MEMC */ +#define ETHERM_CTRLPORT 0x08f /* MEMC */ + +#define ETHERM_TX_START_PAGE 64 +#define ETHERM_STOP_PAGE 127 /* --------------------------------------------------------------------------- */ static void etherh_setif(struct net_device *dev) { + struct ei_device *ei_local = (struct ei_device *) dev->priv; unsigned long addr, flags; save_flags_cli(flags); @@ -133,6 +145,7 @@ static int etherh_getifstat(struct net_device *dev) { + struct ei_device *ei_local = (struct ei_device *) dev->priv; int stat = 0; switch (dev->mem_end) { @@ -199,6 +212,8 @@ static void etherh_reset(struct net_device *dev) { + struct ei_device *ei_local = (struct ei_device *) dev->priv; + outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, dev->base_addr); /* @@ -206,8 +221,8 @@ * Note that we use 'interface_num' as a flag * to indicate that we need to change the media. */ - if (dev->flags & IFF_AUTOMEDIA && ei_status.interface_num) { - ei_status.interface_num = 0; + if (dev->flags & IFF_AUTOMEDIA && ei_local->interface_num) { + ei_local->interface_num = 0; if (dev->if_port == IF_PORT_10BASET) dev->if_port = IF_PORT_10BASE2; @@ -224,17 +239,18 @@ static void etherh_block_output (struct net_device *dev, int count, const unsigned char *buf, int start_page) { + struct ei_device *ei_local = (struct ei_device *) dev->priv; unsigned int addr, dma_addr; unsigned long dma_start; - - if (ei_status.dmaing) { - printk ("%s: DMAing conflict in etherh_block_input: " + + if (ei_local->dmaing) { + printk(KERN_ERR "%s: DMAing conflict in etherh_block_input: " " DMAstat %d irqlock %d\n", dev->name, - ei_status.dmaing, ei_status.irqlock); + ei_local->dmaing, ei_local->irqlock); return; } - ei_status.dmaing |= 1; + ei_local->dmaing |= 1; addr = dev->base_addr; dma_addr = dev->mem_start; @@ -257,7 +273,7 @@ outb (start_page, addr + EN0_RSARHI); outb (E8390_RWRITE | E8390_START, addr + E8390_CMD); - if (ei_status.word16) + if (ei_local->word16) outsw (dma_addr, buf, count >> 1); else outsb (dma_addr, buf, count); @@ -266,14 +282,15 @@ while ((inb (addr + EN0_ISR) & ENISR_RDC) == 0) if (jiffies - dma_start > 2*HZ/100) { /* 20ms */ - printk ("%s: timeout waiting for TX RDC\n", dev->name); + printk(KERN_ERR "%s: timeout waiting for TX RDC\n", + dev->name); etherh_reset (dev); NS8390_init (dev, 1); break; } outb (ENISR_RDC, addr + EN0_ISR); - ei_status.dmaing &= ~1; + ei_local->dmaing &= ~1; } /* @@ -282,17 +299,18 @@ static void etherh_block_input (struct net_device *dev, int count, struct sk_buff *skb, int ring_offset) { + struct ei_device *ei_local = (struct ei_device *) dev->priv; unsigned int addr, dma_addr; unsigned char *buf; - if (ei_status.dmaing) { - printk ("%s: DMAing conflict in etherh_block_input: " + if (ei_local->dmaing) { + printk(KERN_ERR "%s: DMAing conflict in etherh_block_input: " " DMAstat %d irqlock %d\n", dev->name, - ei_status.dmaing, ei_status.irqlock); + ei_local->dmaing, ei_local->irqlock); return; } - ei_status.dmaing |= 1; + ei_local->dmaing |= 1; addr = dev->base_addr; dma_addr = dev->mem_start; @@ -305,7 +323,7 @@ outb (ring_offset >> 8, addr + EN0_RSARHI); outb (E8390_RREAD | E8390_START, addr + E8390_CMD); - if (ei_status.word16) { + if (ei_local->word16) { insw (dma_addr, buf, count >> 1); if (count & 1) buf[count - 1] = inb (dma_addr); @@ -313,7 +331,7 @@ insb (dma_addr, buf, count); outb (ENISR_RDC, addr + EN0_ISR); - ei_status.dmaing &= ~1; + ei_local->dmaing &= ~1; } /* @@ -322,16 +340,17 @@ static void etherh_get_header (struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page) { + struct ei_device *ei_local = (struct ei_device *) dev->priv; unsigned int addr, dma_addr; - if (ei_status.dmaing) { - printk ("%s: DMAing conflict in etherh_get_header: " + if (ei_local->dmaing) { + printk(KERN_ERR "%s: DMAing conflict in etherh_get_header: " " DMAstat %d irqlock %d\n", dev->name, - ei_status.dmaing, ei_status.irqlock); + ei_local->dmaing, ei_local->irqlock); return; } - ei_status.dmaing |= 1; + ei_local->dmaing |= 1; addr = dev->base_addr; dma_addr = dev->mem_start; @@ -343,13 +362,13 @@ outb (ring_page, addr + EN0_RSARHI); outb (E8390_RREAD | E8390_START, addr + E8390_CMD); - if (ei_status.word16) + if (ei_local->word16) insw (dma_addr, hdr, sizeof (*hdr) >> 1); else insb (dma_addr, hdr, sizeof (*hdr)); outb (ENISR_RDC, addr + EN0_ISR); - ei_status.dmaing &= ~1; + ei_local->dmaing &= ~1; } /* @@ -363,7 +382,9 @@ static int etherh_open(struct net_device *dev) { - if (request_irq(dev->irq, ei_interrupt, 0, "etherh", dev)) + struct ei_device *ei_local = (struct ei_device *) dev->priv; + + if (request_irq(dev->irq, ei_interrupt, 0, dev->name, dev)) return -EAGAIN; /* @@ -371,7 +392,7 @@ * media type on the next reset - we are about to * do automedia manually now. */ - ei_status.interface_num = 0; + ei_local->interface_num = 0; /* * If we are doing automedia detection, do it now. @@ -431,36 +452,7 @@ static int version_printed; if (net_debug && version_printed++ == 0) - printk(version); -} - -static int __init etherh_check_presence(struct net_device *dev) -{ - unsigned int addr = dev->base_addr, reg0, tmp; - - reg0 = inb(addr); - if (reg0 == 0xff) { - if (net_debug & DEBUG_INIT) - printk("%s: etherh error: NS8390 command register wrong\n", - dev->name); - return -ENODEV; - } - - outb(E8390_NODMA | E8390_PAGE1 | E8390_STOP, addr + E8390_CMD); - tmp = inb(addr + 13); - outb(0xff, addr + 13); - outb(E8390_NODMA | E8390_PAGE0, addr + E8390_CMD); - inb(addr + EN0_COUNTER0); - if (inb(addr + EN0_COUNTER0) != 0) { - if (net_debug & DEBUG_INIT) - printk("%s: etherh error: NS8390 not found\n", - dev->name); - outb(reg0, addr); - outb(tmp, addr + 13); - return -ENODEV; - } - - return 0; + printk(KERN_INFO "%s", version); } /* @@ -485,11 +477,36 @@ return ENODEV; } +/* + * Create an ethernet address from the system serial number. + */ +static int __init etherm_addr(char *addr) +{ + unsigned int serial; + + if (system_serial_low == 0 && system_serial_high == 0) + return ENODEV; + + serial = system_serial_low | system_serial_high; + + addr[0] = 0; + addr[1] = 0; + addr[2] = 0xa4; + addr[3] = 0x10 + (serial >> 24); + addr[4] = serial >> 16; + addr[5] = serial >> 8; + return 0; +} + +static u32 etherh_regoffsets[16]; +static u32 etherm_regoffsets[16]; + static struct net_device * __init etherh_init_one(struct expansion_card *ec) { + struct ei_device *ei_local; struct net_device *dev; const char *dev_type; - int i; + int i, size; etherh_banner(); @@ -501,8 +518,6 @@ SET_MODULE_OWNER(dev); - etherh_addr(dev->dev_addr, ec); - dev->open = etherh_open; dev->stop = etherh_close; dev->set_config = etherh_set_config; @@ -512,7 +527,17 @@ ec->ops = ðerh_ops; switch (ec->cid.product) { + case PROD_ANT_ETHERM: + if (etherm_addr(dev->dev_addr)) + goto free; + dev->base_addr += ETHERM_NS8390; + dev->mem_start = dev->base_addr + ETHERM_DATAPORT; + ec->irq_data = (void *)(dev->base_addr + ETHERM_CTRLPORT); + break; + case PROD_I3_ETHERLAN500: + if (etherh_addr(dev->dev_addr, ec)) + goto free; dev->base_addr += ETHERH500_NS8390; dev->mem_start = dev->base_addr + ETHERH500_DATAPORT; dev->rmem_start = (unsigned long) @@ -522,34 +547,54 @@ case PROD_I3_ETHERLAN600: case PROD_I3_ETHERLAN600A: + if (etherh_addr(dev->dev_addr, ec)) + goto free; dev->base_addr += ETHERH600_NS8390; dev->mem_start = dev->base_addr + ETHERH600_DATAPORT; ec->irq_data = (void *)(dev->base_addr + ETHERH600_CTRLPORT); break; default: - printk("%s: etherh error: unknown card type %x\n", + printk(KERN_ERR "%s: unknown card type %x\n", dev->name, ec->cid.product); - goto out; + goto free; } - if (!request_region(dev->base_addr, 16, dev->name)) - goto region_not_free; + size = 16; + if (ec->cid.product == PROD_ANT_ETHERM) + size <<= 3; + + if (!request_region(dev->base_addr, size, dev->name)) + goto free; - if (etherh_check_presence(dev) || ethdev_init(dev)) + if (ethdev_init(dev)) goto release; + /* + * Unfortunately, ethdev_init eventually calls + * ether_setup, which re-writes dev->flags. + */ switch (ec->cid.product) { + case PROD_ANT_ETHERM: + dev_type = "ANT EtherM"; + dev->if_port = IF_PORT_UNKNOWN; + break; + case PROD_I3_ETHERLAN500: - dev_type = "500"; + dev_type = "i3 EtherH 500"; + dev->if_port = IF_PORT_UNKNOWN; break; case PROD_I3_ETHERLAN600: - dev_type = "600"; + dev_type = "i3 EtherH 600"; + dev->flags |= IFF_PORTSEL | IFF_AUTOMEDIA; + dev->if_port = IF_PORT_10BASET; break; case PROD_I3_ETHERLAN600A: - dev_type = "600A"; + dev_type = "i3 EtherH 600A"; + dev->flags |= IFF_PORTSEL | IFF_AUTOMEDIA; + dev->if_port = IF_PORT_10BASET; break; default: @@ -557,39 +602,31 @@ break; } - printk("%s: etherh %s at %lx, IRQ%d, ether address ", - dev->name, dev_type, dev->base_addr, dev->irq); + printk(KERN_INFO "%s: %s in slot %d, ", + dev->name, dev_type, ec->slot_no); for (i = 0; i < 6; i++) - printk(i == 5 ? "%2.2x\n" : "%2.2x:", dev->dev_addr[i]); + printk("%2.2x%c", dev->dev_addr[i], i == 5 ? '\n' : ':'); - /* - * Unfortunately, ethdev_init eventually calls - * ether_setup, which re-writes dev->flags. - */ - switch (ec->cid.product) { - case PROD_I3_ETHERLAN500: - dev->if_port = IF_PORT_UNKNOWN; - break; - - case PROD_I3_ETHERLAN600: - case PROD_I3_ETHERLAN600A: - dev->flags |= IFF_PORTSEL | IFF_AUTOMEDIA; - dev->if_port = IF_PORT_10BASET; - break; - } - - ei_status.name = dev->name; - ei_status.word16 = 1; - ei_status.tx_start_page = ETHERH_TX_START_PAGE; - ei_status.rx_start_page = ei_status.tx_start_page + TX_PAGES; - ei_status.stop_page = ETHERH_STOP_PAGE; - - ei_status.reset_8390 = etherh_reset; - ei_status.block_input = etherh_block_input; - ei_status.block_output = etherh_block_output; - ei_status.get_8390_hdr = etherh_get_header; - ei_status.interface_num = 0; + ei_local = (struct ei_device *) dev->priv; + if (ec->cid.product == PROD_ANT_ETHERM) { + ei_local->tx_start_page = ETHERM_TX_START_PAGE; + ei_local->stop_page = ETHERM_STOP_PAGE; + ei_local->reg_offset = etherm_regoffsets; + } else { + ei_local->tx_start_page = ETHERH_TX_START_PAGE; + ei_local->stop_page = ETHERH_STOP_PAGE; + ei_local->reg_offset = etherh_regoffsets; + } + + ei_local->name = dev->name; + ei_local->word16 = 1; + ei_local->rx_start_page = ei_local->tx_start_page + TX_PAGES; + ei_local->reset_8390 = etherh_reset; + ei_local->block_input = etherh_block_input; + ei_local->block_output = etherh_block_output; + ei_local->get_8390_hdr = etherh_get_header; + ei_local->interface_num = 0; etherh_reset(dev); NS8390_init(dev, 0); @@ -597,7 +634,7 @@ release: release_region(dev->base_addr, 16); -region_not_free: +free: unregister_netdev(dev); kfree(dev); out: @@ -614,6 +651,11 @@ { int i, ret = -ENODEV; + for (i = 0; i < 16; i++) { + etherh_regoffsets[i] = i; + etherm_regoffsets[i] = i << 3; + } + ecard_startfind(); for (i = 0; i < MAX_ECARDS; i++) { @@ -642,8 +684,12 @@ for (i = 0; i < MAX_ETHERH_CARDS; i++) { if (e_dev[i]) { + int size; unregister_netdev(e_dev[i]); - release_region(e_dev[i]->base_addr, 16); + size = 16; + if (e_card[i]->cid.product == PROD_ANT_ETHERM) + size <<= 3; + release_region(e_dev[i]->base_addr, size); kfree(e_dev[i]); e_dev[i] = NULL; } diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/scsi/acornscsi.c linux/drivers/acorn/scsi/acornscsi.c --- v2.4.8/linux/drivers/acorn/scsi/acornscsi.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/acorn/scsi/acornscsi.c Wed Aug 15 01:22:15 2001 @@ -1059,7 +1059,7 @@ /* * Allocate some buffer space, limited to half the buffer size */ - length = min(host->scsi.SCp.this_residual, DMAC_BUFFER_SIZE / 2); + length = min(unsigned int, host->scsi.SCp.this_residual, DMAC_BUFFER_SIZE / 2); if (length) { host->dma.start_addr = address = host->dma.free_addr; host->dma.free_addr = (host->dma.free_addr + length) & @@ -1187,7 +1187,7 @@ /* * Allocate some buffer space, limited to half the on-board RAM size */ - length = min(host->scsi.SCp.this_residual, DMAC_BUFFER_SIZE / 2); + length = min(unsigned int, host->scsi.SCp.this_residual, DMAC_BUFFER_SIZE / 2); if (length) { host->dma.start_addr = address = host->dma.free_addr; host->dma.free_addr = (host->dma.free_addr + length) & @@ -1656,8 +1656,8 @@ * to be in operation AFTER the target leaves message out phase. */ acornscsi_sbic_issuecmd(host, CMND_ASSERTATN); - period = max(message[3], sdtr_period / 4); - length = min(message[4], sdtr_size); + period = max(unsigned int, message[3], sdtr_period / 4); + length = min(unsigned int, message[4], sdtr_size); msgqueue_addmsg(&host->scsi.msgs, 5, EXTENDED_MESSAGE, 3, EXTENDED_SDTR, period, length); host->device[host->SCpnt->target].sync_xfer = diff -u --recursive --new-file v2.4.8/linux/drivers/acorn/scsi/acornscsi.h linux/drivers/acorn/scsi/acornscsi.h --- v2.4.8/linux/drivers/acorn/scsi/acornscsi.h Tue Jul 3 17:08:19 2001 +++ linux/drivers/acorn/scsi/acornscsi.h Wed Aug 15 01:22:15 2001 @@ -183,9 +183,6 @@ #define MASK_ON (MASKREG_M3|MASKREG_M2|MASKREG_M1|MASKREG_M0) #define MASK_OFF (MASKREG_M3|MASKREG_M2|MASKREG_M1) -#define min(x,y) ((x) < (y) ? (x) : (y)) -#define max(x,y) ((x) < (y) ? (y) : (x)) - /* * SCSI driver phases */ diff -u --recursive --new-file v2.4.8/linux/drivers/block/acsi.c linux/drivers/block/acsi.c --- v2.4.8/linux/drivers/block/acsi.c Sat Apr 28 11:27:53 2001 +++ linux/drivers/block/acsi.c Wed Aug 15 01:22:15 2001 @@ -292,9 +292,6 @@ cmd[4] = (len); \ } while(0) -#define min(a,b) (((a)<(b))?(a):(b)) - - /* ACSI errors (from REQUEST SENSE); There are two tables, one for the * old Atari disks and one for SCSI on ACSI disks. */ diff -u --recursive --new-file v2.4.8/linux/drivers/bluetooth/hci_emu.c linux/drivers/bluetooth/hci_emu.c --- v2.4.8/linux/drivers/bluetooth/hci_emu.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/bluetooth/hci_emu.c Sun Aug 12 10:38:48 2001 @@ -220,11 +220,6 @@ return ret; } -static loff_t hci_emu_chr_lseek(struct file * file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static int hci_emu_chr_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { return -EINVAL; @@ -295,7 +290,7 @@ static struct file_operations hci_emu_fops = { owner: THIS_MODULE, - llseek: hci_emu_chr_lseek, + llseek: no_llseek, read: hci_emu_chr_read, write: hci_emu_chr_write, poll: hci_emu_chr_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/bluetooth/hci_uart.c linux/drivers/bluetooth/hci_uart.c --- v2.4.8/linux/drivers/bluetooth/hci_uart.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/bluetooth/hci_uart.c Sun Aug 12 10:38:48 2001 @@ -42,7 +42,7 @@ #include #include -#include +#include #include #include #include diff -u --recursive --new-file v2.4.8/linux/drivers/bluetooth/hci_usb.c linux/drivers/bluetooth/hci_usb.c --- v2.4.8/linux/drivers/bluetooth/hci_usb.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/bluetooth/hci_usb.c Sun Aug 12 10:38:48 2001 @@ -45,7 +45,7 @@ #include #include -#include +#include #include #include #include diff -u --recursive --new-file v2.4.8/linux/drivers/cdrom/cdrom.c linux/drivers/cdrom/cdrom.c --- v2.4.8/linux/drivers/cdrom/cdrom.c Wed Jul 25 17:10:19 2001 +++ linux/drivers/cdrom/cdrom.c Thu Aug 16 09:30:45 2001 @@ -2246,8 +2246,13 @@ if ((ret = cdo->generic_packet(cdi, &cgc))) return ret; - cgc.cmd[8] = cgc.buflen = be16_to_cpu(ti->track_information_length) + + cgc.buflen = be16_to_cpu(ti->track_information_length) + sizeof(ti->track_information_length); + + if (cgc.buflen > sizeof(track_information)) + cgc.buflen = sizeof(track_information); + + cgc.cmd[8] = cgc.buflen; return cdo->generic_packet(cdi, &cgc); } diff -u --recursive --new-file v2.4.8/linux/drivers/char/ChangeLog linux/drivers/char/ChangeLog --- v2.4.8/linux/drivers/char/ChangeLog Tue Sep 1 10:32:13 1998 +++ linux/drivers/char/ChangeLog Mon Aug 13 16:37:33 2001 @@ -1,3 +1,7 @@ +2001-08-11 Tim Waugh + + * serial.c (get_pci_port): Deal with awkward Titan cards. + 1998-08-26 Theodore Ts'o * serial.c (rs_open): Correctly decrement the module in-use count diff -u --recursive --new-file v2.4.8/linux/drivers/char/Config.in linux/drivers/char/Config.in --- v2.4.8/linux/drivers/char/Config.in Wed Jul 25 17:10:19 2001 +++ linux/drivers/char/Config.in Sun Aug 12 10:38:48 2001 @@ -174,7 +174,7 @@ tristate 'Siemens R3964 line discipline' CONFIG_R3964 tristate 'Applicom intelligent fieldbus card support' CONFIG_APPLICOM if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then - tristate 'Sony Vaio Programmable I/O Control Device support' CONFIG_SONYPI $CONFIG_PCI + dep_tristate 'Sony Vaio Programmable I/O Control Device support' CONFIG_SONYPI $CONFIG_PCI fi mainmenu_option next_comment diff -u --recursive --new-file v2.4.8/linux/drivers/char/agp/agp.h linux/drivers/char/agp/agp.h --- v2.4.8/linux/drivers/char/agp/agp.h Tue Jul 3 17:08:19 2001 +++ linux/drivers/char/agp/agp.h Wed Aug 15 01:22:15 2001 @@ -142,10 +142,6 @@ #define A_IDXFIX() (A_SIZE_FIX(agp_bridge.aperture_sizes) + i) #define MAXKEY (4096 * 32) -#ifndef min -#define min(a,b) (((a)<(b))?(a):(b)) -#endif - #define AGPGART_MODULE_NAME "agpgart" #define PFX AGPGART_MODULE_NAME ": " diff -u --recursive --new-file v2.4.8/linux/drivers/char/agp/agpgart_be.c linux/drivers/char/agp/agpgart_be.c --- v2.4.8/linux/drivers/char/agp/agpgart_be.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/agp/agpgart_be.c Wed Aug 15 01:22:15 2001 @@ -428,8 +428,8 @@ /* adjust RQ depth */ command = ((command & ~0xff000000) | - min((mode & 0xff000000), - min((command & 0xff000000), + min(u32, (mode & 0xff000000), + min(u32, (command & 0xff000000), (scratch & 0xff000000)))); /* disable SBA if it's not supported */ @@ -2338,6 +2338,7 @@ retval = serverworks_create_gatt_pages(value->num_entries / 1024); if (retval != 0) { serverworks_free_page_map(&page_dir); + serverworks_free_page_map(&serverworks_private.scratch_dir); return retval; } @@ -2656,8 +2657,8 @@ /* adjust RQ depth */ command = ((command & ~0xff000000) | - min((mode & 0xff000000), - min((command & 0xff000000), + min(u32, (mode & 0xff000000), + min(u32, (command & 0xff000000), (scratch & 0xff000000)))); /* disable SBA if it's not supported */ diff -u --recursive --new-file v2.4.8/linux/drivers/char/agp/agpgart_fe.c linux/drivers/char/agp/agpgart_fe.c --- v2.4.8/linux/drivers/char/agp/agpgart_fe.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/char/agp/agpgart_fe.c Sun Aug 12 10:38:48 2001 @@ -749,11 +749,6 @@ } -static long long agp_lseek(struct file *file, long long offset, int origin) -{ - return -ESPIPE; -} - static ssize_t agp_read(struct file *file, char *buf, size_t count, loff_t * ppos) { @@ -1083,7 +1078,7 @@ static struct file_operations agp_fops = { owner: THIS_MODULE, - llseek: agp_lseek, + llseek: no_llseek, read: agp_read, write: agp_write, ioctl: agp_ioctl, diff -u --recursive --new-file v2.4.8/linux/drivers/char/console.c linux/drivers/char/console.c --- v2.4.8/linux/drivers/char/console.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/char/console.c Sun Aug 12 10:02:17 2001 @@ -2658,12 +2658,15 @@ printk("unblank_screen: tty %d not allocated ??\n", fg_console+1); return; } + currcons = fg_console; + if (vcmode != KD_TEXT) + return; /* but leave console_blanked != 0 */ + console_timer.function = blank_screen; if (blankinterval) { mod_timer(&console_timer, jiffies + blankinterval); } - currcons = fg_console; console_blanked = 0; if (console_blank_hook) console_blank_hook(0); diff -u --recursive --new-file v2.4.8/linux/drivers/char/cyclades.c linux/drivers/char/cyclades.c --- v2.4.8/linux/drivers/char/cyclades.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/char/cyclades.c Wed Aug 15 01:22:15 2001 @@ -628,8 +628,6 @@ #define PAUSE ; #endif -#define cy_min(a,b) (((a)<(b))?(a):(b)) - /* * Include section */ @@ -1631,8 +1629,8 @@ for performance, but because of buffer boundaries, there may be several steps to the operation */ while(0 < (small_count = - cy_min((rx_bufsize - new_rx_get), - cy_min((TTY_FLIPBUF_SIZE - tty->flip.count), char_count)) + min(unsigned int, (rx_bufsize - new_rx_get), + min(unsigned int, (TTY_FLIPBUF_SIZE - tty->flip.count), char_count)) )) { memcpy_fromio(tty->flip.char_buf_ptr, (char *)(cinfo->base_addr @@ -1726,9 +1724,9 @@ } #ifdef BLOCKMOVE while(0 < (small_count = - cy_min((tx_bufsize - tx_put), - cy_min ((SERIAL_XMIT_SIZE - info->xmit_tail), - cy_min(info->xmit_cnt, char_count))))){ + min(unsigned int, (tx_bufsize - tx_put), + min(unsigned int, (SERIAL_XMIT_SIZE - info->xmit_tail), + min(unsigned int, info->xmit_cnt, char_count))))) { memcpy_toio((char *)(cinfo->base_addr + tx_bufaddr + tx_put), &info->xmit_buf[info->xmit_tail], diff -u --recursive --new-file v2.4.8/linux/drivers/char/drm/ati_pcigart.h linux/drivers/char/drm/ati_pcigart.h --- v2.4.8/linux/drivers/char/drm/ati_pcigart.h Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/drm/ati_pcigart.h Wed Aug 15 14:21:50 2001 @@ -111,7 +111,7 @@ memset( pci_gart, 0, ATI_MAX_PCIGART_PAGES * sizeof(u32) ); for ( i = 0 ; i < pages ; i++ ) { - page_base = virt_to_bus( entry->pagelist[i]->virtual ); + page_base = page_to_bus( entry->pagelist[i] ); for (j = 0; j < (PAGE_SIZE / ATI_PCIGART_PAGE_SIZE); j++) { *pci_gart++ = cpu_to_le32( page_base ); page_base += ATI_PCIGART_PAGE_SIZE; diff -u --recursive --new-file v2.4.8/linux/drivers/char/drm/drm_context.h linux/drivers/char/drm/drm_context.h --- v2.4.8/linux/drivers/char/drm/drm_context.h Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/drm/drm_context.h Wed Aug 15 14:21:47 2001 @@ -160,7 +160,7 @@ return -EFAULT; down(&dev->struct_sem); - if ((int)request.ctx_id >= dev->max_context) { + if (dev->max_context < 0 || request.ctx_id >= (unsigned) dev->max_context) { up(&dev->struct_sem); return -EINVAL; } @@ -193,22 +193,20 @@ list_for_each(list, &dev->maplist->head) { r_list = (drm_map_list_t *)list; if(r_list->map && - r_list->map->handle == request.handle) break; + r_list->map->handle == request.handle) + goto found; } - if (list == &(dev->maplist->head)) { - up(&dev->struct_sem); - return -EINVAL; - } - map = r_list->map; +bad: up(&dev->struct_sem); + return -EINVAL; - if (!map) return -EINVAL; - - down(&dev->struct_sem); - if ((int)request.ctx_id >= dev->max_context) { - up(&dev->struct_sem); - return -EINVAL; - } +found: + map = r_list->map; + if (!map) goto bad; + if (dev->max_context < 0) + goto bad; + if (request.ctx_id >= (unsigned) dev->max_context) + goto bad; dev->context_sareas[request.ctx_id] = map; up(&dev->struct_sem); return 0; diff -u --recursive --new-file v2.4.8/linux/drivers/char/drm/drm_scatter.h linux/drivers/char/drm/drm_scatter.h --- v2.4.8/linux/drivers/char/drm/drm_scatter.h Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/drm/drm_scatter.h Wed Aug 15 14:21:50 2001 @@ -155,7 +155,7 @@ for ( i = 0 ; i < pages ; i++ ) { unsigned long *tmp; - tmp = (unsigned long *)entry->pagelist[i]->virtual; + tmp = page_address( entry->pagelist[i] ); for ( j = 0 ; j < PAGE_SIZE / sizeof(unsigned long) ; j++, tmp++ ) { @@ -173,7 +173,7 @@ "virtual mapping\n" ); } } - tmp = (unsigned long *)entry->pagelist[i]->virtual; + tmp = page_address( entry->pagelist[i] ); for(j = 0 ; j < PAGE_SIZE / sizeof(unsigned long) ; j++, tmp++) { diff -u --recursive --new-file v2.4.8/linux/drivers/char/drm/drm_vm.h linux/drivers/char/drm/drm_vm.h --- v2.4.8/linux/drivers/char/drm/drm_vm.h Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/drm/drm_vm.h Wed Aug 15 14:21:47 2001 @@ -86,12 +86,12 @@ #else drm_map_t *map = (drm_map_t *)vma->vm_pte; #endif - unsigned long physical; unsigned long offset; unsigned long i; pgd_t *pgd; pmd_t *pmd; pte_t *pte; + struct page *page; if (address > vma->vm_end) return NOPAGE_SIGBUS; /* Disallow mremap */ if (!map) return NOPAGE_OOM; /* Nothing allocated */ @@ -107,14 +107,15 @@ if( !pmd_present( *pmd ) ) return NOPAGE_OOM; pte = pte_offset( pmd, i ); if( !pte_present( *pte ) ) return NOPAGE_OOM; - physical = (unsigned long)pte_page( *pte )->virtual; - atomic_inc(&virt_to_page(physical)->count); /* Dec. by kernel */ - DRM_DEBUG("0x%08lx => 0x%08lx\n", address, physical); + page = pte_page(*pte); + get_page(page); + + DRM_DEBUG("0x%08lx => 0x%08x\n", address, page_to_bus(page)); #if LINUX_VERSION_CODE < 0x020317 - return physical; + return page_address(page); #else - return virt_to_page(physical); + return page; #endif } diff -u --recursive --new-file v2.4.8/linux/drivers/char/drm/ffb_context.c linux/drivers/char/drm/ffb_context.c --- v2.4.8/linux/drivers/char/drm/ffb_context.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/drm/ffb_context.c Sun Aug 12 11:23:32 2001 @@ -1,4 +1,4 @@ -/* $Id: ffb_context.c,v 1.4 2000/08/29 07:01:55 davem Exp $ +/* $Id: ffb_context.c,v 1.5 2001/08/09 17:47:51 davem Exp $ * ffb_context.c: Creator/Creator3D DRI/DRM context switching. * * Copyright (C) 2000 David S. Miller (davem@redhat.com) @@ -357,8 +357,6 @@ int DRM(context_switch)(drm_device_t *dev, int old, int new) { ffb_dev_priv_t *fpriv = (ffb_dev_priv_t *) dev->dev_private; - - atomic_inc(&dev->total_ctx); #if DRM_DMA_HISTOGRAM dev->ctx_start = get_cycles(); diff -u --recursive --new-file v2.4.8/linux/drivers/char/drm/ffb_drv.c linux/drivers/char/drm/ffb_drv.c --- v2.4.8/linux/drivers/char/drm/ffb_drv.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/drm/ffb_drv.c Sun Aug 12 11:23:32 2001 @@ -1,4 +1,4 @@ -/* $Id: ffb_drv.c,v 1.14 2001/05/24 12:01:47 davem Exp $ +/* $Id: ffb_drv.c,v 1.15 2001/08/09 17:47:51 davem Exp $ * ffb_drv.c: Creator/Creator3D direct rendering driver. * * Copyright (C) 2000 David S. Miller (davem@redhat.com) @@ -73,7 +73,7 @@ } while(0) /* For mmap customization */ -#define DRIVER_GET_MAP_OFS (map->offset & 0xffffffff) +#define DRIVER_GET_MAP_OFS() (map->offset & 0xffffffff) #define DRIVER_GET_REG_OFS() ffb_get_reg_offset(dev) typedef struct _ffb_position_t { @@ -190,37 +190,6 @@ return 0; } -static int ffb_presetup(drm_device_t *dev) -{ - ffb_dev_priv_t *ffb_priv; - drm_device_t *temp_dev; - int ret = 0; - int i; - - /* Check for the case where no device was found. */ - if(ffb_position == NULL) return -ENODEV; - - /* Find our instance number by finding our device in dev structure */ - for(i = 0; i < DRM(numdevs); i++) { - temp_dev = &(DRM(device)[i]); - if(temp_dev == dev) break; - } - if(i == DRM(numdevs)) { - return -ENODEV; - } - - ffb_priv = kmalloc(sizeof(ffb_dev_priv_t), GFP_KERNEL); - if(!ffb_priv) return -ENOMEM; - memset(ffb_priv, 0, sizeof(*ffb_priv)); - dev->dev_private = ffb_priv; - - ret = ffb_init_one(dev, - ffb_position[i].node, - ffb_position[i].root, - i); - return ret; -} - static int __init ffb_count_siblings(int root) { int node, child, count = 0; @@ -248,6 +217,8 @@ return instance; } +static int ffb_presetup(drm_device_t *); + static int __init ffb_count_card_instances(void) { int root, total, instance; @@ -263,7 +234,8 @@ /* Actual failure will be caught during ffb_presetup b/c we can't catch * it easily here. */ - if(!ffb_position) return -ENOMEM; + if (!ffb_position) + return -ENOMEM; instance = ffb_scan_siblings(prom_root_node, 0); @@ -291,9 +263,11 @@ r_list = (drm_map_list_t *)list; map = r_list->map; - if (!map) continue; + if (!map) + continue; uoff = (map->offset & 0xffffffff); - if (uoff == off) return map; + if (uoff == off) + return map; } return NULL; @@ -347,9 +321,9 @@ { ffb_dev_priv_t *ffb_priv = (ffb_dev_priv_t *)dev->dev_private; - if(ffb_priv) { + if (ffb_priv) return ffb_priv->card_phys_base; - } + return 0; } @@ -359,6 +333,43 @@ #include "drm_drawable.h" #include "drm_drv.h" +/* This functions must be here since it references DRM(numdevs) + * which drm_drv.h declares. + */ +static int ffb_presetup(drm_device_t *dev) +{ + ffb_dev_priv_t *ffb_priv; + drm_device_t *temp_dev; + int ret = 0; + int i; + + /* Check for the case where no device was found. */ + if (ffb_position == NULL) + return -ENODEV; + + /* Find our instance number by finding our device in dev structure */ + for (i = 0; i < DRM(numdevs); i++) { + temp_dev = &(DRM(device)[i]); + if(temp_dev == dev) + break; + } + + if (i == DRM(numdevs)) + return -ENODEV; + + ffb_priv = kmalloc(sizeof(ffb_dev_priv_t), GFP_KERNEL); + if (!ffb_priv) + return -ENOMEM; + memset(ffb_priv, 0, sizeof(*ffb_priv)); + dev->dev_private = ffb_priv; + + ret = ffb_init_one(dev, + ffb_position[i].node, + ffb_position[i].root, + i); + return ret; +} + #ifndef MODULE /* DRM(options) is called by the kernel to parse command-line options * passed via the boot-loader (e.g., LILO). It calls the insmod option @@ -369,13 +380,13 @@ * anyone can think of a way that we can fit into the __setup macro without * changing it, then please send the solution my way. */ -static int __init ffb_options( char *str ) +static int __init ffb_options(char *str) { - DRM(parse_options)( str ); + DRM(parse_options)(str); return 1; } -__setup( DRIVER_NAME "=", ffb_options ); +__setup(DRIVER_NAME "=", ffb_options); #endif #include "drm_fops.h" diff -u --recursive --new-file v2.4.8/linux/drivers/char/drm/r128_cce.c linux/drivers/char/drm/r128_cce.c --- v2.4.8/linux/drivers/char/drm/r128_cce.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/drm/r128_cce.c Sun Aug 12 11:55:12 2001 @@ -351,10 +351,10 @@ page_ofs = tmp_ofs >> PAGE_SHIFT; R128_WRITE( R128_PM4_BUFFER_DL_RPTR_ADDR, - virt_to_bus(entry->pagelist[page_ofs]->virtual)); + page_to_bus(entry->pagelist[page_ofs])); DRM_DEBUG( "ring rptr: offset=0x%08lx handle=0x%08lx\n", - virt_to_bus(entry->pagelist[page_ofs]->virtual), + page_to_bus(entry->pagelist[page_ofs]), entry->handle + tmp_ofs ); } diff -u --recursive --new-file v2.4.8/linux/drivers/char/drm/radeon_cp.c linux/drivers/char/drm/radeon_cp.c --- v2.4.8/linux/drivers/char/drm/radeon_cp.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/drm/radeon_cp.c Sun Aug 12 13:29:02 2001 @@ -624,10 +624,10 @@ page_ofs = tmp_ofs >> PAGE_SHIFT; RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR, - virt_to_bus(entry->pagelist[page_ofs]->virtual)); + page_to_bus(entry->pagelist[page_ofs])); - DRM_DEBUG( "ring rptr: offset=0x%08lx handle=0x%08lx\n", - virt_to_bus(entry->pagelist[page_ofs]->virtual), + DRM_DEBUG( "ring rptr: offset=0x%08x handle=0x%08lx\n", + page_to_bus(entry->pagelist[page_ofs]), entry->handle + tmp_ofs ); } diff -u --recursive --new-file v2.4.8/linux/drivers/char/dsp56k.c linux/drivers/char/dsp56k.c --- v2.4.8/linux/drivers/char/dsp56k.c Wed Jul 25 17:10:19 2001 +++ linux/drivers/char/dsp56k.c Wed Aug 15 01:22:15 2001 @@ -59,9 +59,6 @@ #define DSP56K_TRANSMIT (dsp56k_host_interface.isr & DSP56K_ISR_TXDE) #define DSP56K_RECEIVE (dsp56k_host_interface.isr & DSP56K_ISR_RXDF) -#define max(a,b) ((a) > (b) ? (a) : (b)) -#define min(a,b) ((a) < (b) ? (a) : (b)) - #define wait_some(n) \ { \ set_current_state(TASK_INTERRUPTIBLE); \ @@ -72,7 +69,7 @@ { \ long i, t, m; \ while (count > 0) { \ - m = min(count, maxio); \ + m = min(unsigned long, count, maxio); \ for (i = 0; i < m; i++) { \ for (t = 0; t < timeout && !ENABLE; t++) \ wait_some(HZ/50); \ diff -u --recursive --new-file v2.4.8/linux/drivers/char/dz.c linux/drivers/char/dz.c --- v2.4.8/linux/drivers/char/dz.c Wed Jul 25 17:10:19 2001 +++ linux/drivers/char/dz.c Thu Aug 16 09:49:49 2001 @@ -1279,7 +1279,8 @@ int __init dz_init(void) { - int i, flags; + int i; + unsigned long flags; struct dz_serial *info; /* Setup base handler, and timer table. */ diff -u --recursive --new-file v2.4.8/linux/drivers/char/lp.c linux/drivers/char/lp.c --- v2.4.8/linux/drivers/char/lp.c Wed Jul 25 17:10:19 2001 +++ linux/drivers/char/lp.c Sun Aug 12 12:31:28 2001 @@ -147,6 +147,10 @@ static unsigned int lp_count = 0; +#ifdef CONFIG_LP_CONSOLE +static struct parport *console_registered; // initially NULL +#endif /* CONFIG_LP_CONSOLE */ + #undef LP_DEBUG /* --- low-level port access ----------------------------------- */ @@ -674,8 +678,8 @@ #ifdef CONFIG_LP_CONSOLE if (!nr) { if (port->modes & PARPORT_MODE_SAFEININT) { - MOD_INC_USE_COUNT; register_console (&lpcons); + console_registered = port; printk (KERN_INFO "lp%d: console ready\n", CONSOLE_LP); } else printk (KERN_ERR "lp%d: cannot run console on %s\n", @@ -720,6 +724,12 @@ static void lp_detach (struct parport *port) { /* Write this some day. */ +#ifdef CONFIG_LP_CONSOLE + if (console_registered == port) { + unregister_console (&lpcons); + console_registered = NULL; + } +#endif /* CONFIG_LP_CONSOLE */ } static struct parport_driver lp_driver = { diff -u --recursive --new-file v2.4.8/linux/drivers/char/n_r3964.c linux/drivers/char/n_r3964.c --- v2.4.8/linux/drivers/char/n_r3964.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/char/n_r3964.c Thu Aug 16 09:49:49 2001 @@ -1421,7 +1421,7 @@ int pid=current->pid; struct r3964_client_info *pClient; struct r3964_message *pMsg=NULL; - unsigned int flags; + unsigned long flags; int result = POLLOUT; TRACE_L("POLL"); diff -u --recursive --new-file v2.4.8/linux/drivers/char/pc_keyb.c linux/drivers/char/pc_keyb.c --- v2.4.8/linux/drivers/char/pc_keyb.c Fri Apr 6 10:42:55 2001 +++ linux/drivers/char/pc_keyb.c Tue Aug 14 15:49:50 2001 @@ -63,6 +63,7 @@ #ifdef CONFIG_PSMOUSE static void aux_write_ack(int val); static void __aux_write_ack(int val); +static int aux_reconnect = 0; #endif static spinlock_t kbd_controller_lock = SPIN_LOCK_UNLOCKED; @@ -81,7 +82,8 @@ static int __init psaux_init(void); -#define AUX_RECONNECT 170 /* scancode when ps2 device is plugged (back) in */ +#define AUX_RECONNECT1 0xaa /* scancode1 when ps2 device is plugged (back) in */ +#define AUX_RECONNECT2 0x00 /* scancode2 when ps2 device is plugged (back) in */ static struct aux_queue *queue; /* Mouse data buffer. */ static int aux_count; @@ -396,6 +398,7 @@ static inline void handle_mouse_event(unsigned char scancode) { #ifdef CONFIG_PSMOUSE + static unsigned char prev_code; if (mouse_reply_expected) { if (scancode == AUX_ACK) { mouse_reply_expected--; @@ -403,12 +406,15 @@ } mouse_reply_expected = 0; } - else if(scancode == AUX_RECONNECT){ - queue->head = queue->tail = 0; /* Flush input queue */ + else if(scancode == AUX_RECONNECT2 && prev_code == AUX_RECONNECT1 + && aux_reconnect) { + printk (KERN_INFO "PS/2 mouse reconnect detected\n"); + queue->head = queue->tail = 0; /* Flush input queue */ __aux_write_ack(AUX_ENABLE_DEV); /* ping the mouse :) */ return; } + prev_code = scancode; add_mouse_randomness(scancode); if (aux_count) { int head = queue->head; @@ -533,6 +539,86 @@ } } +#define DEFAULT_KEYB_REP_DELAY 250 +#define DEFAULT_KEYB_REP_RATE 30 /* cps */ + +static struct kbd_repeat kbdrate={ + DEFAULT_KEYB_REP_DELAY, + DEFAULT_KEYB_REP_RATE +}; + +static unsigned char parse_kbd_rate(struct kbd_repeat *r) +{ + static struct r2v{ + int rate; + unsigned char val; + } kbd_rates[]={ {5,0x14}, + {7,0x10}, + {10,0x0c}, + {15,0x08}, + {20,0x04}, + {25,0x02}, + {30,0x00} + }; + static struct d2v{ + int delay; + unsigned char val; + } kbd_delays[]={{250,0}, + {500,1}, + {750,2}, + {1000,3} + }; + int rate=0,delay=0; + if (r != NULL){ + int i,new_rate=30,new_delay=250; + if (r->rate <= 0) + r->rate=kbdrate.rate; + if (r->delay <= 0) + r->delay=kbdrate.delay; + for (i=0; i < sizeof(kbd_rates)/sizeof(struct r2v); i++) + if (kbd_rates[i].rate == r->rate){ + new_rate=kbd_rates[i].rate; + rate=kbd_rates[i].val; + break; + } + for (i=0; i < sizeof(kbd_delays)/sizeof(struct d2v); i++) + if (kbd_delays[i].delay == r->delay){ + new_delay=kbd_delays[i].delay; + delay=kbd_delays[i].val; + break; + } + r->rate=new_rate; + r->delay=new_delay; + } + return (delay << 5) | rate; +} + +static int write_kbd_rate(unsigned char r) +{ + if (!send_data(KBD_CMD_SET_RATE) || !send_data(r)){ + send_data(KBD_CMD_ENABLE); /* re-enable kbd if any errors */ + return 0; + }else + return 1; +} + +int pckbd_rate(struct kbd_repeat *rep) +{ + if (rep == NULL) + return -EINVAL; + else{ + unsigned char r=parse_kbd_rate(rep); + struct kbd_repeat old_rep; + memcpy(&old_rep,&kbdrate,sizeof(struct kbd_repeat)); + if (write_kbd_rate(r)){ + memcpy(&kbdrate,rep,sizeof(struct kbd_repeat)); + memcpy(rep,&old_rep,sizeof(struct kbd_repeat)); + return 0; + } + } + return -EIO; +} + /* * In case we run on a non-x86 hardware we need to initialize both the * keyboard controller and the keyboard. On a x86, the BIOS will @@ -754,6 +840,14 @@ } #if defined CONFIG_PSMOUSE + +static int __init aux_reconnect_setup (char *str) +{ + aux_reconnect = 1; + return 1; +} + +__setup("psaux-reconnect", aux_reconnect_setup); /* * Check if this is a dual port controller. diff -u --recursive --new-file v2.4.8/linux/drivers/char/pcmcia/serial_cs.c linux/drivers/char/pcmcia/serial_cs.c --- v2.4.8/linux/drivers/char/pcmcia/serial_cs.c Fri Feb 16 16:02:35 2001 +++ linux/drivers/char/pcmcia/serial_cs.c Sun Aug 12 11:14:00 2001 @@ -357,6 +357,7 @@ found_port: if (i != CS_SUCCESS) { + printk(KERN_NOTICE "serial_cs: no usable port range found, giving up\n"); cs_error(link->handle, RequestIO, i); return -1; } @@ -436,6 +437,7 @@ i = CardServices(RequestIRQ, link->handle, &link->irq); if (i != CS_SUCCESS) { + printk(KERN_NOTICE "serial_cs: no usable port range found, giving up\n"); cs_error(link->handle, RequestIRQ, i); link->irq.AssignedIRQ = 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/char/ppdev.c linux/drivers/char/ppdev.c --- v2.4.8/linux/drivers/char/ppdev.c Sat May 19 18:07:04 2001 +++ linux/drivers/char/ppdev.c Wed Aug 15 01:22:15 2001 @@ -71,10 +71,6 @@ #define PP_VERSION "ppdev: user-space parallel port driver" #define CHRDEV "ppdev" -#ifndef min -#define min(a,b) ((a) < (b) ? (a) : (b)) -#endif - struct pp_struct { struct pardevice * pdev; wait_queue_head_t irq_wait; @@ -104,11 +100,6 @@ port->ops->enable_irq (port); } -static loff_t pp_lseek (struct file * file, long long offset, int origin) -{ - return -ESPIPE; -} - static ssize_t pp_read (struct file * file, char * buf, size_t count, loff_t * ppos) { @@ -127,7 +118,7 @@ return -EINVAL; } - kbuffer = kmalloc (min (count, PP_BUFFER_SIZE), GFP_KERNEL); + kbuffer = kmalloc(min(unsigned int, count, PP_BUFFER_SIZE), GFP_KERNEL); if (!kbuffer) { return -ENOMEM; } @@ -135,7 +126,7 @@ mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR); while (bytes_read < count) { - ssize_t need = min(count - bytes_read, PP_BUFFER_SIZE); + ssize_t need = min(unsigned long, count - bytes_read, PP_BUFFER_SIZE); if (mode == IEEE1284_MODE_EPP) { /* various specials for EPP mode */ @@ -207,7 +198,7 @@ return -EINVAL; } - kbuffer = kmalloc (min (count, PP_BUFFER_SIZE), GFP_KERNEL); + kbuffer = kmalloc(min(unsigned int, count, PP_BUFFER_SIZE), GFP_KERNEL); if (!kbuffer) { return -ENOMEM; } @@ -215,7 +206,7 @@ mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR); while (bytes_written < count) { - ssize_t n = min(count - bytes_written, PP_BUFFER_SIZE); + ssize_t n = min(unsigned long, count - bytes_written, PP_BUFFER_SIZE); if (copy_from_user (kbuffer, buf + bytes_written, n)) { bytes_written = -EFAULT; @@ -726,7 +717,7 @@ static struct file_operations pp_fops = { owner: THIS_MODULE, - llseek: pp_lseek, + llseek: no_llseek, read: pp_read, write: pp_write, poll: pp_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/char/rio/rio.h linux/drivers/char/rio/rio.h --- v2.4.8/linux/drivers/char/rio/rio.h Fri Feb 16 16:02:36 2001 +++ linux/drivers/char/rio/rio.h Wed Aug 15 01:22:15 2001 @@ -210,16 +210,6 @@ #define RIO_PORT(DEV,FIRST_MAJ) ( (major(DEV) - FIRST_MAJ) * PORTS_PER_HOST) \ + minor(DEV) -/* -** Min and Max -*/ -#ifndef min -#define min(A,B) ((A)<(B)?(A):(B)) -#endif -#ifndef max -#define max(A,B) ((A)>(B)?(A):(B)) -#endif - #define splrio spltty #define RIO_IPL 5 diff -u --recursive --new-file v2.4.8/linux/drivers/char/rio/riointr.c linux/drivers/char/rio/riointr.c --- v2.4.8/linux/drivers/char/rio/riointr.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/char/rio/riointr.c Wed Aug 15 01:22:15 2001 @@ -819,7 +819,7 @@ ** and available space. */ - transCount = min(PacketP->len & PKT_LEN_MASK, + transCount = min(unsigned int, PacketP->len & PKT_LEN_MASK, TTY_FLIPBUF_SIZE - TtyP->flip.count); rio_dprintk (RIO_DEBUG_REC, "port %d: Copy %d bytes\n", PortP->PortNum, transCount); diff -u --recursive --new-file v2.4.8/linux/drivers/char/rtc.c linux/drivers/char/rtc.c --- v2.4.8/linux/drivers/char/rtc.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/char/rtc.c Sun Aug 12 10:38:48 2001 @@ -94,8 +94,6 @@ static struct timer_list rtc_irq_timer; -static loff_t rtc_llseek(struct file *file, loff_t offset, int origin); - static ssize_t rtc_read(struct file *file, char *buf, size_t count, loff_t *ppos); @@ -189,11 +187,6 @@ * Now all the various file operations that we export. */ -static loff_t rtc_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static ssize_t rtc_read(struct file *file, char *buf, size_t count, loff_t *ppos) { @@ -597,7 +590,7 @@ static struct file_operations rtc_fops = { owner: THIS_MODULE, - llseek: rtc_llseek, + llseek: no_llseek, read: rtc_read, #if RTC_IRQ poll: rtc_poll, @@ -710,15 +703,24 @@ if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD) BCD_TO_BIN(year); /* This should never happen... */ - if (year >= 20 && year < 48) { + if (year < 20) { + epoch = 2000; + guess = "SRM (post-2000)"; + } else if (year >= 20 && year < 48) { epoch = 1980; guess = "ARC console"; } else if (year >= 48 && year < 70) { epoch = 1952; guess = "Digital UNIX"; +#if defined(__mips__) } else if (year >= 70 && year < 100) { epoch = 1928; guess = "Digital DECstation"; +#else + } else if (year >= 70) { + epoch = 1900; + guess = "Standard PC (1900)"; +#endif } if (guess) printk(KERN_INFO "rtc: %s epoch (%lu) detected\n", guess, epoch); diff -u --recursive --new-file v2.4.8/linux/drivers/char/sbc60xxwdt.c linux/drivers/char/sbc60xxwdt.c --- v2.4.8/linux/drivers/char/sbc60xxwdt.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/sbc60xxwdt.c Sun Aug 12 10:38:48 2001 @@ -229,11 +229,6 @@ return 0; } -static long long fop_llseek(struct file *file, long long offset, int origin) -{ - return -ESPIPE; -} - static int fop_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { @@ -258,7 +253,7 @@ static struct file_operations wdt_fops = { owner: THIS_MODULE, - llseek: fop_llseek, + llseek: no_llseek, read: fop_read, write: fop_write, open: fop_open, diff -u --recursive --new-file v2.4.8/linux/drivers/char/serial.c linux/drivers/char/serial.c --- v2.4.8/linux/drivers/char/serial.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/char/serial.c Mon Aug 13 16:37:33 2001 @@ -3886,6 +3886,22 @@ case 6: /* BAR 4*/ case 7: base_idx=idx-2; /* BAR 5*/ } + + /* Some Titan cards are also a little weird */ + if (dev->vendor == PCI_VENDOR_ID_TITAN && + (dev->device == PCI_DEVICE_ID_TITAN_400L || + dev->device == PCI_DEVICE_ID_TITAN_800L)) { + switch (idx) { + case 0: base_idx = 1; + break; + case 1: base_idx = 2; + break; + default: + base_idx = 4; + offset = 8 * (idx - 2); + } + + } port = pci_resource_start(dev, base_idx) + offset; @@ -4656,6 +4672,19 @@ { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b0_4_921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L, + PCI_ANY_ID, PCI_ANY_ID, + SPCI_FL_BASE1, 1, 921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L, + PCI_ANY_ID, PCI_ANY_ID, + SPCI_FL_BASE1 | SPCI_FL_BASE_TABLE, 2, 921600 }, + /* The 400L and 800L have a custom hack in get_pci_port */ + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L, + PCI_ANY_ID, PCI_ANY_ID, + SPCI_FL_BASE_TABLE, 4, 921600 }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L, + PCI_ANY_ID, PCI_ANY_ID, + SPCI_FL_BASE_TABLE, 8, 921600 }, { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550, PCI_ANY_ID, PCI_ANY_ID, 0, 0, diff -u --recursive --new-file v2.4.8/linux/drivers/char/tpqic02.c linux/drivers/char/tpqic02.c --- v2.4.8/linux/drivers/char/tpqic02.c Fri Mar 2 18:38:37 2001 +++ linux/drivers/char/tpqic02.c Sun Aug 12 10:38:48 2001 @@ -1734,12 +1734,6 @@ } /* qic02_tape_interrupt */ -static long long qic02_tape_lseek(struct file * file, long long offset, int origin) -{ - return -EINVAL; /* not supported */ -} /* qic02_tape_lseek */ - - /* read/write routines: * This code copies between a kernel buffer and a user buffer. The * actual data transfer is done using DMA and interrupts. Time-outs @@ -2766,7 +2760,7 @@ /* These are (most) of the interface functions: */ static struct file_operations qic02_tape_fops = { owner: THIS_MODULE, - llseek: qic02_tape_lseek, /* not allowed */ + llseek: no_llseek, read: qic02_tape_read, write: qic02_tape_write, ioctl: qic02_tape_ioctl, diff -u --recursive --new-file v2.4.8/linux/drivers/char/tty_io.c linux/drivers/char/tty_io.c --- v2.4.8/linux/drivers/char/tty_io.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/char/tty_io.c Sun Aug 12 17:36:24 2001 @@ -105,7 +105,6 @@ #ifdef CONFIG_VT extern void con_init_devfs (void); #endif -extern int rio_init(void); #define CONSOLE_DEV MKDEV(TTY_MAJOR,0) #define TTY_DEV MKDEV(TTYAUX_MAJOR,0) @@ -154,7 +153,7 @@ extern void con3215_init(void); extern void tty3215_init(void); extern void tub3270_con_init(void); -extern void tub3270_initfunc(void); +extern void tub3270_init(void); extern void rs285_console_init(void); extern void sa1100_rs_console_init(void); extern void sgi_serial_console_init(void); @@ -400,13 +399,8 @@ return cmd == TIOCSPGRP ? -ENOTTY : -EIO; } -static loff_t tty_lseek(struct file * file, loff_t offset, int orig) -{ - return -ESPIPE; -} - static struct file_operations tty_fops = { - llseek: tty_lseek, + llseek: no_llseek, read: tty_read, write: tty_write, poll: tty_poll, @@ -417,7 +411,7 @@ }; static struct file_operations hung_up_tty_fops = { - llseek: tty_lseek, + llseek: no_llseek, read: hung_up_tty_read, write: hung_up_tty_write, poll: hung_up_tty_poll, @@ -2194,7 +2188,9 @@ #if (defined(CONFIG_8xx) || defined(CONFIG_8260)) console_8xx_init(); #elif defined(CONFIG_MAC_SERIAL) - mac_scc_console_init(); + mac_scc_console_init(); +#elif defined(CONFIG_PARISC) + pdc_console_init(); #elif defined(CONFIG_SERIAL) serial_console_init(); #endif /* CONFIG_8xx */ @@ -2211,15 +2207,18 @@ sci_console_init(); #endif #endif -#ifdef CONFIG_3215 - con3215_init(); -#endif -#ifdef CONFIG_3270_CONSOLE +#ifdef CONFIG_TN3270_CONSOLE tub3270_con_init(); #endif +#ifdef CONFIG_TN3215 + con3215_init(); +#endif #ifdef CONFIG_HWC hwc_console_init(); #endif +#ifdef CONFIG_STDIO_CONSOLE + stdio_console_init(); +#endif #ifdef CONFIG_SERIAL_21285_CONSOLE rs285_console_init(); #endif @@ -2309,6 +2308,7 @@ kbd_init(); #endif + #ifdef CONFIG_ESPSERIAL /* init ESP before rs, so rs doesn't see the port */ espserial_init(); #endif @@ -2342,9 +2342,6 @@ #ifdef CONFIG_SPECIALIX specialix_init(); #endif -#ifdef CONFIG_RIO - rio_init(); -#endif #if (defined(CONFIG_8xx) || defined(CONFIG_8260)) rs_8xx_init(); #endif /* CONFIG_8xx */ @@ -2358,10 +2355,10 @@ #ifdef CONFIG_VT vcs_init(); #endif -#ifdef CONFIG_3270 - tub3270_initfunc(); +#ifdef CONFIG_TN3270 + tub3270_init(); #endif -#ifdef CONFIG_3215 +#ifdef CONFIG_TN3215 tty3215_init(); #endif #ifdef CONFIG_HWC diff -u --recursive --new-file v2.4.8/linux/drivers/char/tty_ioctl.c linux/drivers/char/tty_ioctl.c --- v2.4.8/linux/drivers/char/tty_ioctl.c Wed Mar 15 19:48:06 2000 +++ linux/drivers/char/tty_ioctl.c Sun Aug 12 17:37:53 2001 @@ -47,7 +47,7 @@ #ifdef TTY_DEBUG_WAIT_UNTIL_SENT char buf[64]; - printk("%s wait until sent...\n", tty_name(tty, buf)); + printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty, buf)); #endif if (!tty->driver.chars_in_buffer) return; @@ -56,7 +56,7 @@ timeout = MAX_SCHEDULE_TIMEOUT; do { #ifdef TTY_DEBUG_WAIT_UNTIL_SENT - printk("waiting %s...(%d)\n", tty_name(tty, buf), + printk(KERN_DEBUG "waiting %s...(%d)\n", tty_name(tty, buf), tty->driver.chars_in_buffer(tty)); #endif set_current_state(TASK_INTERRUPTIBLE); @@ -82,7 +82,7 @@ #define NOSET_MASK(x,y,z) (x = ((x) & ~(z)) | ((y) & (z))) if (!locked) { - printk("Warning?!? termios_locked is NULL.\n"); + printk(KERN_WARNING "Warning?!? termios_locked is NULL.\n"); return; } diff -u --recursive --new-file v2.4.8/linux/drivers/char/vt.c linux/drivers/char/vt.c --- v2.4.8/linux/drivers/char/vt.c Fri Feb 9 11:30:22 2001 +++ linux/drivers/char/vt.c Sun Aug 12 17:37:53 2001 @@ -7,6 +7,7 @@ * Dynamic keymap and string allocation - aeb@cwi.nl - May 1994 * Restrict VT switching via ioctl() - grif@cs.ucr.edu - Dec 1995 * Some code moved for less code duplication - Andi Kleen - Mar 1997 + * Check put/get_user, cleanups - acme@conectiva.com.br - Jun 2001 */ #include @@ -23,13 +24,11 @@ #include #include #include +#include #include #include - -#if defined(__mc68000__) || defined(CONFIG_APUS) -#include -#endif +#include #include #include @@ -289,8 +288,10 @@ p = func_table[i]; if(p) for ( ; *p && sz; p++, sz--) - put_user(*p, q++); - put_user('\0', q); + if (put_user(*p, q++)) + return -EFAULT; + if (put_user('\0', q)) + return -EFAULT; return ((p && *p) ? -EOVERFLOW : 0); case KDSKBSENT: if (!perm) @@ -497,26 +498,26 @@ (cmd == KDENABIO)) ? -ENXIO : 0; #endif -#if defined(__mc68000__) || defined(CONFIG_APUS) - /* Linux/m68k interface for setting the keyboard delay/repeat rate */ + /* Linux m68k/i386 interface for setting the keyboard delay/repeat rate */ case KDKBDREP: { struct kbd_repeat kbrep; - if (!mach_kbdrate) return( -EINVAL ); - if (!suser()) return( -EPERM ); + if (!kbd_rate) return( -EINVAL ); + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; if (copy_from_user(&kbrep, (void *)arg, sizeof(struct kbd_repeat))) return -EFAULT; - if ((i = mach_kbdrate( &kbrep ))) return( i ); + if ((i = kbd_rate( &kbrep ))) + return i; if (copy_to_user((void *)arg, &kbrep, sizeof(struct kbd_repeat))) return -EFAULT; return 0; } -#endif case KDSETMODE: /* @@ -741,10 +742,8 @@ struct vt_stat *vtstat = (struct vt_stat *)arg; unsigned short state, mask; - i = verify_area(VERIFY_WRITE,(void *)vtstat, sizeof(struct vt_stat)); - if (i) - return i; - put_user(fg_console + 1, &vtstat->v_active); + if (put_user(fg_console + 1, &vtstat->v_active)) + return -EFAULT; state = 1; /* /dev/tty0 is always open */ for (i = 0, mask = 2; i < MAX_NR_CONSOLES && mask; ++i, mask <<= 1) if (VT_IS_IN_USE(i)) @@ -880,11 +879,9 @@ ushort ll,cc; if (!perm) return -EPERM; - i = verify_area(VERIFY_READ, (void *)vtsizes, sizeof(struct vt_sizes)); - if (i) - return i; - get_user(ll, &vtsizes->v_rows); - get_user(cc, &vtsizes->v_cols); + if (get_user(ll, &vtsizes->v_rows) || + get_user(cc, &vtsizes->v_cols)) + return -EFAULT; return vc_resize_all(ll, cc); } @@ -894,15 +891,15 @@ ushort ll,cc,vlin,clin,vcol,ccol; if (!perm) return -EPERM; - i = verify_area(VERIFY_READ, (void *)vtconsize, sizeof(struct vt_consize)); - if (i) - return i; - get_user(ll, &vtconsize->v_rows); - get_user(cc, &vtconsize->v_cols); - get_user(vlin, &vtconsize->v_vlin); - get_user(clin, &vtconsize->v_clin); - get_user(vcol, &vtconsize->v_vcol); - get_user(ccol, &vtconsize->v_ccol); + if (verify_area(VERIFY_READ, (void *)vtconsize, + sizeof(struct vt_consize))) + return -EFAULT; + __get_user(ll, &vtconsize->v_rows); + __get_user(cc, &vtconsize->v_cols); + __get_user(vlin, &vtconsize->v_vlin); + __get_user(clin, &vtconsize->v_clin); + __get_user(vcol, &vtconsize->v_vcol); + __get_user(ccol, &vtconsize->v_ccol); vlin = vlin ? vlin : video_scan_lines; if ( clin ) { @@ -1069,10 +1066,6 @@ if (!perm) return -EPERM; - i = verify_area(VERIFY_READ, (void *) arg, - sizeof(struct vc_mode)); - if (i) - return i; if (copy_from_user(&mode, (void *) arg, sizeof(mode))) return -EFAULT; return console_setmode(&mode, cmd == VC_SETMODE); @@ -1090,10 +1083,6 @@ was changed from 0x766a to 0x766c */ return console_powermode((int) arg); } - i = verify_area(VERIFY_READ, (void *) arg, - sizeof(int)); - if (i) - return i; if (get_user(cmap_size, (int *) arg)) return -EFAULT; if (cmap_size % 3) diff -u --recursive --new-file v2.4.8/linux/drivers/char/w83877f_wdt.c linux/drivers/char/w83877f_wdt.c --- v2.4.8/linux/drivers/char/w83877f_wdt.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/char/w83877f_wdt.c Sun Aug 12 10:38:48 2001 @@ -229,11 +229,6 @@ return 0; } -static long long fop_llseek(struct file *file, long long offset, int origin) -{ - return -ESPIPE; -} - static int fop_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { @@ -258,7 +253,7 @@ static struct file_operations wdt_fops = { owner: THIS_MODULE, - llseek: fop_llseek, + llseek: no_llseek, read: fop_read, write: fop_write, open: fop_open, diff -u --recursive --new-file v2.4.8/linux/drivers/char/wdt.c linux/drivers/char/wdt.c --- v2.4.8/linux/drivers/char/wdt.c Sat May 19 17:43:05 2001 +++ linux/drivers/char/wdt.c Sun Aug 12 10:38:48 2001 @@ -204,11 +204,6 @@ } -static long long wdt_llseek(struct file *file, long long offset, int origin) -{ - return -ESPIPE; -} - /** * wdt_ping: * @@ -423,7 +418,7 @@ static struct file_operations wdt_fops = { owner: THIS_MODULE, - llseek: wdt_llseek, + llseek: no_llseek, read: wdt_read, write: wdt_write, ioctl: wdt_ioctl, diff -u --recursive --new-file v2.4.8/linux/drivers/char/wdt_pci.c linux/drivers/char/wdt_pci.c --- v2.4.8/linux/drivers/char/wdt_pci.c Sat May 19 17:43:05 2001 +++ linux/drivers/char/wdt_pci.c Sun Aug 12 10:38:48 2001 @@ -220,11 +220,6 @@ } -static long long wdtpci_llseek(struct file *file, long long offset, int origin) -{ - return -ESPIPE; -} - /** * wdtpci_ping: * @@ -459,7 +454,7 @@ static struct file_operations wdtpci_fops = { owner: THIS_MODULE, - llseek: wdtpci_llseek, + llseek: no_llseek, read: wdtpci_read, write: wdtpci_write, ioctl: wdtpci_ioctl, diff -u --recursive --new-file v2.4.8/linux/drivers/i2c/i2c-dev.c linux/drivers/i2c/i2c-dev.c --- v2.4.8/linux/drivers/i2c/i2c-dev.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/i2c/i2c-dev.c Sun Aug 12 10:38:48 2001 @@ -60,8 +60,6 @@ /* struct file_operations changed too often in the 2.1 series for nice code */ -static loff_t i2cdev_lseek (struct file *file, loff_t offset, int origin); - static ssize_t i2cdev_read (struct file *file, char *buf, size_t count, loff_t *offset); static ssize_t i2cdev_write (struct file *file, const char *buf, size_t count, @@ -90,7 +88,7 @@ #if LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0) owner: THIS_MODULE, #endif /* LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0) */ - llseek: i2cdev_lseek, + llseek: no_llseek, read: i2cdev_read, write: i2cdev_write, ioctl: i2cdev_ioctl, @@ -127,18 +125,6 @@ }; static int i2cdev_initialized; - -/* Note that the lseek function is called llseek in 2.1 kernels. But things - are complicated enough as is. */ -loff_t i2cdev_lseek (struct file *file, loff_t offset, int origin) -{ -#ifdef DEBUG - struct inode *inode = file->f_dentry->d_inode; - printk("i2c-dev.o: i2c-%d lseek to %ld bytes relative to %d.\n", - MINOR(inode->i_rdev),(long) offset,origin); -#endif /* DEBUG */ - return -ESPIPE; -} static ssize_t i2cdev_read (struct file *file, char *buf, size_t count, loff_t *offset) diff -u --recursive --new-file v2.4.8/linux/drivers/i2o/i2o_block.c linux/drivers/i2o/i2o_block.c --- v2.4.8/linux/drivers/i2o/i2o_block.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/i2o/i2o_block.c Thu Aug 16 09:50:06 2001 @@ -61,6 +61,7 @@ #include #include +#include #include #include #include @@ -187,7 +188,7 @@ * evt_msg contains the last event. */ static DECLARE_MUTEX_LOCKED(i2ob_evt_sem); -static DECLARE_MUTEX_LOCKED(i2ob_thread_dead); +static DECLARE_COMPLETION(i2ob_thread_dead); static spinlock_t i2ob_evt_lock = SPIN_LOCK_UNLOCKED; static u32 evt_msg[MSG_FRAME_SIZE>>2]; @@ -712,7 +713,7 @@ static int i2ob_evt(void *dummy) { unsigned int evt; - unsigned int flags; + unsigned long flags; int unit; int i; //The only event that has data is the SCSI_SMART event. @@ -859,7 +860,7 @@ } }; - up_and_exit(&i2ob_thread_dead,0); + complete_and_exit(&i2ob_thread_dead,0); return 0; } @@ -1697,7 +1698,7 @@ { int unit = 0; int i = 0; - int flags; + unsigned long flags; spin_lock_irqsave(&io_request_lock, flags); @@ -2002,7 +2003,7 @@ printk("waiting..."); } /* Be sure it died */ - down(&i2ob_thread_dead); + wait_for_completion(&i2ob_thread_dead); printk("done.\n"); } diff -u --recursive --new-file v2.4.8/linux/drivers/i2o/i2o_config.c linux/drivers/i2o/i2o_config.c --- v2.4.8/linux/drivers/i2o/i2o_config.c Tue May 1 16:10:37 2001 +++ linux/drivers/i2o/i2o_config.c Thu Aug 16 09:50:15 2001 @@ -183,12 +183,6 @@ 0xffffffff // All classes }; -static long long cfg_llseek(struct file *file, long long offset, int origin) -{ - return -ESPIPE; -} - - static ssize_t cfg_write(struct file *file, const char *buf, size_t count, loff_t *ppos) { printk(KERN_INFO "i2o_config write not yet supported\n"); @@ -796,7 +790,7 @@ struct i2o_cfg_info *p = NULL; struct i2o_evt_get *uget = (struct i2o_evt_get*)arg; struct i2o_evt_get kget; - unsigned int flags; + unsigned long flags; for(p = open_files; p; p = p->next) if(p->q_id == id) @@ -825,7 +819,7 @@ { struct i2o_cfg_info *tmp = (struct i2o_cfg_info *)kmalloc(sizeof(struct i2o_cfg_info), GFP_KERNEL); - unsigned int flags; + unsigned long flags; if(!tmp) return -ENOMEM; @@ -851,7 +845,7 @@ { u32 id = (u32)file->private_data; struct i2o_cfg_info *p1, *p2; - unsigned int flags; + unsigned long flags; lock_kernel(); p1 = p2 = NULL; @@ -899,7 +893,7 @@ static struct file_operations config_fops = { owner: THIS_MODULE, - llseek: cfg_llseek, + llseek: no_llseek, read: cfg_read, write: cfg_write, ioctl: cfg_ioctl, diff -u --recursive --new-file v2.4.8/linux/drivers/i2o/i2o_core.c linux/drivers/i2o/i2o_core.c --- v2.4.8/linux/drivers/i2o/i2o_core.c Tue May 1 16:10:37 2001 +++ linux/drivers/i2o/i2o_core.c Thu Aug 16 09:50:24 2001 @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -58,15 +59,15 @@ #endif /* OSM table */ -static struct i2o_handler *i2o_handlers[MAX_I2O_MODULES] = {NULL}; +static struct i2o_handler *i2o_handlers[MAX_I2O_MODULES]; /* Controller list */ -static struct i2o_controller *i2o_controllers[MAX_I2O_CONTROLLERS] = {NULL}; -struct i2o_controller *i2o_controller_chain = NULL; -int i2o_num_controllers = 0; +static struct i2o_controller *i2o_controllers[MAX_I2O_CONTROLLERS]; +struct i2o_controller *i2o_controller_chain; +int i2o_num_controllers; /* Initiator Context for Core message */ -static int core_context = 0; +static int core_context; /* Initialization && shutdown functions */ static void i2o_sys_init(void); @@ -107,9 +108,9 @@ * sys_tbl_ver is the CurrentChangeIndicator that is * used by IOPs to track changes. */ -static struct i2o_sys_tbl *sys_tbl = NULL; -static int sys_tbl_ind = 0; -static int sys_tbl_len = 0; +static struct i2o_sys_tbl *sys_tbl; +static int sys_tbl_ind; +static int sys_tbl_len; /* * This spin lock is used to keep a device from being @@ -154,8 +155,8 @@ struct i2o_post_wait_data *next; /* Chain */ void *mem[2]; /* Memory blocks to recover on failure path */ }; -static struct i2o_post_wait_data *post_wait_queue = NULL; -static u32 post_wait_id = 0; // Unique ID for each post_wait +static struct i2o_post_wait_data *post_wait_queue; +static u32 post_wait_id; // Unique ID for each post_wait static spinlock_t post_wait_lock = SPIN_LOCK_UNLOCKED; static void i2o_post_wait_complete(u32, int); @@ -182,9 +183,9 @@ }; static struct reply_info evt_reply; static struct reply_info events[I2O_EVT_Q_LEN]; -static int evt_in = 0; -static int evt_out = 0; -static int evt_q_len = 0; +static int evt_in; +static int evt_out; +static int evt_q_len; #define MODINC(x,y) ((x) = ((x) + 1) % (y)) /* @@ -206,7 +207,7 @@ */ static DECLARE_MUTEX(evt_sem); -static DECLARE_MUTEX_LOCKED(evt_dead); +static DECLARE_COMPLETION(evt_dead); DECLARE_WAIT_QUEUE_HEAD(evt_wait); static struct notifier_block i2o_reboot_notifier = @@ -220,7 +221,7 @@ * Config options */ -static int verbose = 0; +static int verbose; MODULE_PARM(verbose, "i"); /* @@ -889,7 +890,7 @@ struct reply_info *reply = (struct reply_info *) reply_data; u32 *msg = reply->msg; struct i2o_controller *c = NULL; - int flags; + unsigned long flags; lock_kernel(); daemonize(); @@ -905,7 +906,7 @@ dprintk(KERN_INFO "I2O event thread dead\n"); printk("exiting..."); evt_running = 0; - up_and_exit(&evt_dead, 0); + complete_and_exit(&evt_dead, 0); } /* @@ -1915,11 +1916,71 @@ u32 *privbuf = kmalloc(16, GFP_KERNEL); if(privbuf == NULL) return -ENOMEM; - - privbuf[0] = iop->status_block->current_mem_base; - privbuf[1] = iop->status_block->current_mem_size; - privbuf[2] = iop->status_block->current_io_base; - privbuf[3] = iop->status_block->current_io_size; + + if(iop->type == I2O_TYPE_PCI) + { + struct resource *root; + + if(iop->status_block->current_mem_size < iop->status_block->desired_mem_size) + { + struct resource *res = &iop->mem_resource; + res->name = iop->bus.pci.pdev->bus->name; + res->flags = IORESOURCE_MEM; + res->start = 0; + res->end = 0; + printk("%s: requires private memory resources.\n", iop->name); + root = pci_find_parent_resource(iop->bus.pci.pdev, res); + if(root==NULL) + printk("Can't find parent resource!\n"); + if(root && allocate_resource(root, res, + iop->status_block->desired_mem_size, + iop->status_block->desired_mem_size, + iop->status_block->desired_mem_size, + 1<<20, /* Unspecified, so use 1Mb and play safe */ + NULL, + NULL)>=0) + { + iop->mem_alloc = 1; + iop->status_block->current_mem_size = 1 + res->end - res->start; + iop->status_block->current_mem_base = res->start; + printk(KERN_INFO "%s: allocated %ld bytes of PCI memory at 0x%08lX.\n", + iop->name, 1+res->end-res->start, res->start); + } + } + if(iop->status_block->current_io_size < iop->status_block->desired_io_size) + { + struct resource *res = &iop->io_resource; + res->name = iop->bus.pci.pdev->bus->name; + res->flags = IORESOURCE_IO; + res->start = 0; + res->end = 0; + printk("%s: requires private memory resources.\n", iop->name); + root = pci_find_parent_resource(iop->bus.pci.pdev, res); + if(root==NULL) + printk("Can't find parent resource!\n"); + if(root && allocate_resource(root, res, + iop->status_block->desired_io_size, + iop->status_block->desired_io_size, + iop->status_block->desired_io_size, + 1<<20, /* Unspecified, so use 1Mb and play safe */ + NULL, + NULL)>=0) + { + iop->io_alloc = 1; + iop->status_block->current_io_size = 1 + res->end - res->start; + iop->status_block->current_mem_base = res->start; + printk(KERN_INFO "%s: allocated %ld bytes of PCI I/O at 0x%08lX.\n", + iop->name, 1+res->end-res->start, res->start); + } + } + } + else + { + privbuf[0] = iop->status_block->current_mem_base; + privbuf[1] = iop->status_block->current_mem_size; + privbuf[2] = iop->status_block->current_io_base; + privbuf[3] = iop->status_block->current_io_size; + } msg[0] = I2O_MESSAGE_SIZE(12) | SGL_OFFSET_6; msg[1] = I2O_CMD_SYS_TAB_SET<<24 | HOST_TID<<12 | ADAPTER_TID; @@ -1936,10 +1997,10 @@ */ msg[6] = 0x54000000 | sys_tbl_len; msg[7] = virt_to_bus(sys_tbl); - msg[8] = 0x54000000 | 0; + msg[8] = 0x54000000 | 8; msg[9] = virt_to_bus(privbuf); - msg[10] = 0xD4000000 | 0; - msg[11] = virt_to_bus(privbuf+8); + msg[10] = 0xD4000000 | 8; + msg[11] = virt_to_bus(privbuf+2); ret=i2o_post_wait_mem(iop, msg, sizeof(msg), 120, privbuf, NULL); @@ -2474,7 +2535,7 @@ DECLARE_WAIT_QUEUE_HEAD(wq_i2o_post); int complete = 0; int status; - int flags = 0; + unsigned long flags = 0; struct i2o_post_wait_data *wait_data = kmalloc(sizeof(struct i2o_post_wait_data), GFP_KERNEL); @@ -3427,7 +3488,7 @@ stat = kill_proc(evt_pid, SIGTERM, 1); if(!stat) { printk("waiting..."); - down(&evt_dead); + wait_for_completion(&evt_dead); } printk("done.\n"); } diff -u --recursive --new-file v2.4.8/linux/drivers/i2o/i2o_lan.c linux/drivers/i2o/i2o_lan.c --- v2.4.8/linux/drivers/i2o/i2o_lan.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/i2o/i2o_lan.c Sun Aug 12 11:16:18 2001 @@ -28,6 +28,8 @@ #include #include +#include + #include #include #include diff -u --recursive --new-file v2.4.8/linux/drivers/i2o/i2o_pci.c linux/drivers/i2o/i2o_pci.c --- v2.4.8/linux/drivers/i2o/i2o_pci.c Tue May 1 16:11:29 2001 +++ linux/drivers/i2o/i2o_pci.c Sun Aug 12 11:16:18 2001 @@ -159,10 +159,10 @@ } c->bus.pci.irq = -1; - c->bus.pci.queue_buggy = 0; c->bus.pci.dpt = 0; c->bus.pci.short_req = 0; + c->bus.pci.pdev = dev; c->irq_mask = (volatile u32 *)(mem+0x34); c->post_port = (volatile u32 *)(mem+0x40); @@ -255,7 +255,6 @@ #else i2o_delete_controller(c); #endif /* MODULE */ - kfree(c); iounmap(mem); return -EBUSY; } diff -u --recursive --new-file v2.4.8/linux/drivers/i2o/i2o_proc.c linux/drivers/i2o/i2o_proc.c --- v2.4.8/linux/drivers/i2o/i2o_proc.c Tue May 1 16:09:53 2001 +++ linux/drivers/i2o/i2o_proc.c Sun Aug 12 11:16:18 2001 @@ -40,6 +40,7 @@ #include #include +#include #include #include #include @@ -942,7 +943,7 @@ int token; int i; - struct + typedef struct { u16 result_count; u16 pad; @@ -952,30 +953,36 @@ u16 row_count; u16 more_flag; i2o_driver_store_table dst[MAX_I2O_MODULES]; - } result; - - i2o_driver_store_table dst; + } i2o_driver_result_table; + + i2o_driver_result_table *result; + i2o_driver_store_table *dst; spin_lock(&i2o_proc_lock); len = 0; + + result = kmalloc(sizeof(i2o_driver_result_table), GFP_KERNEL); + if(result == NULL) + return -ENOMEM; token = i2o_query_table(I2O_PARAMS_TABLE_GET, c, ADAPTER_TID, 0x0005, -1, NULL, 0, - &result, sizeof(result)); + result, sizeof(*result)); if (token < 0) { len += i2o_report_query_status(buf+len, token,"0x0005 DRIVER STORE TABLE"); spin_unlock(&i2o_proc_lock); + kfree(result); return len; } len += sprintf(buf+len, "# Module_type Vendor Mod_id Module_name Vrs" "Date Mod_size Par_size Flags\n"); - for(i=0, dst=result.dst[0]; i < result.row_count; dst=result.dst[++i]) + for(i=0, dst=&result->dst[0]; i < result->row_count; dst=&result->dst[++i]) { - len += sprintf(buf+len, "%-3d", dst.stored_ddm_index); - switch(dst.module_type) + len += sprintf(buf+len, "%-3d", dst->stored_ddm_index); + switch(dst->module_type) { case 0x01: len += sprintf(buf+len, "Downloaded DDM "); @@ -989,26 +996,26 @@ #if 0 if(c->i2oversion == 0x02) - len += sprintf(buf+len, "%-d", dst.module_state); + len += sprintf(buf+len, "%-d", dst->module_state); #endif - len += sprintf(buf+len, "%-#7x", dst.i2o_vendor_id); - len += sprintf(buf+len, "%-#8x", dst.module_id); - len += sprintf(buf+len, "%-29s", chtostr(dst.module_name_version,28)); - len += sprintf(buf+len, "%-9s", chtostr(dst.date,8)); - len += sprintf(buf+len, "%8d ", dst.module_size); - len += sprintf(buf+len, "%8d ", dst.mpb_size); - len += sprintf(buf+len, "0x%04x", dst.module_flags); + len += sprintf(buf+len, "%-#7x", dst->i2o_vendor_id); + len += sprintf(buf+len, "%-#8x", dst->module_id); + len += sprintf(buf+len, "%-29s", chtostr(dst->module_name_version,28)); + len += sprintf(buf+len, "%-9s", chtostr(dst->date,8)); + len += sprintf(buf+len, "%8d ", dst->module_size); + len += sprintf(buf+len, "%8d ", dst->mpb_size); + len += sprintf(buf+len, "0x%04x", dst->module_flags); #if 0 if(c->i2oversion == 0x02) len += sprintf(buf+len, "%d", - dst.notification_level); + dst->notification_level); #endif len += sprintf(buf+len, "\n"); } spin_unlock(&i2o_proc_lock); - + kfree(result); return len; } diff -u --recursive --new-file v2.4.8/linux/drivers/i2o/i2o_scsi.c linux/drivers/i2o/i2o_scsi.c --- v2.4.8/linux/drivers/i2o/i2o_scsi.c Tue May 1 16:09:53 2001 +++ linux/drivers/i2o/i2o_scsi.c Sun Aug 12 11:16:18 2001 @@ -826,7 +826,7 @@ m = I2O_POST_READ32(c); } while(m==0xFFFFFFFF); - msg = bus_to_virt(c->mem_offset + m); + msg = (u32 *)(c->mem_offset + m); __raw_writel(FIVE_WORD_MSG_SIZE, &msg[0]); __raw_writel(I2O_CMD_SCSI_ABORT<<24|HOST_TID<<12|tid, &msg[1]); @@ -874,13 +874,14 @@ if(m == 0xFFFFFFFF) return SCSI_RESET_PUNT; - msg = bus_to_virt(c->mem_offset + m); + msg = (u32 *)(c->mem_offset + m); __raw_writel(FOUR_WORD_MSG_SIZE|SGL_OFFSET_0, &msg[0]); __raw_writel(I2O_CMD_SCSI_BUSRESET<<24|HOST_TID<<12|tid, &msg[1]); __raw_writel(scsi_context|0x80000000, &msg[2]); /* We use the top bit to split controller and unit transactions */ /* Now store unit,tid so we can tie the completion back to a specific device */ __raw_writel(c->unit << 16 | tid, &msg[3]); + wmb(); i2o_post_message(c,m); return SCSI_RESET_PENDING; } diff -u --recursive --new-file v2.4.8/linux/drivers/ide/Config.in linux/drivers/ide/Config.in --- v2.4.8/linux/drivers/ide/Config.in Thu Feb 15 17:22:08 2001 +++ linux/drivers/ide/Config.in Mon Aug 13 15:44:14 2001 @@ -43,17 +43,21 @@ if [ "$CONFIG_BLK_DEV_IDEPCI" = "y" ]; then bool ' Sharing PCI IDE interrupts support' CONFIG_IDEPCI_SHARE_IRQ bool ' Generic PCI bus-master DMA support' CONFIG_BLK_DEV_IDEDMA_PCI +# bool ' Asynchronous DMA support (EXPERIMENTAL)' CONFIG_BLK_DEV_ADMA $CONFIG_BLK_DEV_IDEDMA_PCI + define_bool CONFIG_BLK_DEV_ADMA $CONFIG_BLK_DEV_IDEDMA_PCI bool ' Boot off-board chipsets first support' CONFIG_BLK_DEV_OFFBOARD dep_bool ' Use PCI DMA by default when available' CONFIG_IDEDMA_PCI_AUTO $CONFIG_BLK_DEV_IDEDMA_PCI define_bool CONFIG_BLK_DEV_IDEDMA $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' ATA Work(s) In Progress (EXPERIMENTAL)' CONFIG_IDEDMA_PCI_WIP $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_EXPERIMENTAL +# dep_bool ' Attempt to HACK around Chipsets that TIMEOUT (WIP)' CONFIG_BLK_DEV_IDEDMA_TIMEOUT $CONFIG_IDEDMA_PCI_WIP dep_bool ' Good-Bad DMA Model-Firmware (WIP)' CONFIG_IDEDMA_NEW_DRIVE_LISTINGS $CONFIG_IDEDMA_PCI_WIP + dep_bool ' AEC62XX chipset support' CONFIG_BLK_DEV_AEC62XX $CONFIG_BLK_DEV_IDEDMA_PCI dep_mbool ' AEC62XX Tuning support' CONFIG_AEC62XX_TUNING $CONFIG_BLK_DEV_AEC62XX dep_bool ' ALI M15x3 chipset support' CONFIG_BLK_DEV_ALI15X3 $CONFIG_BLK_DEV_IDEDMA_PCI dep_mbool ' ALI M15x3 WDC support (DANGEROUS)' CONFIG_WDC_ALI15X3 $CONFIG_BLK_DEV_ALI15X3 - dep_bool ' AMD Viper support' CONFIG_BLK_DEV_AMD7409 $CONFIG_BLK_DEV_IDEDMA_PCI - dep_mbool ' AMD Viper ATA-66 Override (WIP)' CONFIG_AMD7409_OVERRIDE $CONFIG_BLK_DEV_AMD7409 $CONFIG_IDEDMA_PCI_WIP + dep_bool ' AMD Viper support' CONFIG_BLK_DEV_AMD74XX $CONFIG_BLK_DEV_IDEDMA_PCI + dep_mbool ' AMD Viper ATA-66 Override (WIP)' CONFIG_AMD74XX_OVERRIDE $CONFIG_BLK_DEV_AMD74XX $CONFIG_IDEDMA_PCI_WIP dep_bool ' CMD64X chipset support' CONFIG_BLK_DEV_CMD64X $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' CY82C693 chipset support' CONFIG_BLK_DEV_CY82C693 $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' Cyrix CS5530 MediaGX chipset support' CONFIG_BLK_DEV_CS5530 $CONFIG_BLK_DEV_IDEDMA_PCI @@ -64,16 +68,24 @@ dep_mbool ' Intel PIIXn chipsets support' CONFIG_BLK_DEV_PIIX $CONFIG_BLK_DEV_IDEDMA_PCI dep_mbool ' PIIXn Tuning support' CONFIG_PIIX_TUNING $CONFIG_BLK_DEV_PIIX $CONFIG_IDEDMA_PCI_AUTO fi + if [ "$CONFIG_MIPS_ITE8172" = "y" -o "$CONFIG_MIPS_IVR" = "y" ]; then + dep_mbool ' IT8172 IDE support' CONFIG_BLK_DEV_IT8172 $CONFIG_BLK_DEV_IDEDMA_PCI + dep_mbool ' IT8172 IDE Tuning support' CONFIG_IT8172_TUNING $CONFIG_BLK_DEV_IT8172 $CONFIG_IDEDMA_PCI_AUTO + fi dep_bool ' NS87415 chipset support (EXPERIMENTAL)' CONFIG_BLK_DEV_NS87415 $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' OPTi 82C621 chipset enhanced support (EXPERIMENTAL)' CONFIG_BLK_DEV_OPTI621 $CONFIG_EXPERIMENTAL - dep_bool ' PROMISE PDC20246/PDC20262/PDC20267 support' CONFIG_BLK_DEV_PDC202XX $CONFIG_BLK_DEV_IDEDMA_PCI + dep_bool ' PROMISE PDC202{46|62|65|67|68} support' CONFIG_BLK_DEV_PDC202XX $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' Special UDMA Feature' CONFIG_PDC202XX_BURST $CONFIG_BLK_DEV_PDC202XX - dep_bool ' ServerWorks OSB4 chipset support' CONFIG_BLK_DEV_OSB4 $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_X86 + dep_bool ' Special FastTrak Feature' CONFIG_PDC202XX_FORCE $CONFIG_BLK_DEV_PDC202XX + dep_bool ' ServerWorks OSB4/CSB5 chipsets support' CONFIG_BLK_DEV_SVWKS $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_X86 dep_bool ' SiS5513 chipset support' CONFIG_BLK_DEV_SIS5513 $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_X86 dep_bool ' SLC90E66 chipset support' CONFIG_BLK_DEV_SLC90E66 $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_X86 dep_bool ' Tekram TRM290 chipset support (EXPERIMENTAL)' CONFIG_BLK_DEV_TRM290 $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' VIA82CXXX chipset support' CONFIG_BLK_DEV_VIA82CXXX $CONFIG_BLK_DEV_IDEDMA_PCI fi + +# dep_mbool ' Pacific Digital A-DMA support (EXPERIMENTAL)' CONFIG_BLK_DEV_PDC_ADMA $CONFIG_BLK_DEV_ADMA $CONFIG_IDEDMA_PCI_WIP + if [ "$CONFIG_PPC" = "y" -o "$CONFIG_ARM" = "y" ]; then bool ' Winbond SL82c105 support' CONFIG_BLK_DEV_SL82C105 fi @@ -97,17 +109,20 @@ dep_bool ' RapIDE interface support' CONFIG_BLK_DEV_IDE_RAPIDE $CONFIG_ARCH_ACORN fi if [ "$CONFIG_AMIGA" = "y" ]; then - dep_bool ' Amiga Gayle IDE interface support' CONFIG_BLK_DEV_GAYLE $CONFIG_AMIGA - dep_mbool ' Amiga IDE Doubler support (EXPERIMENTAL)' CONFIG_BLK_DEV_IDEDOUBLER $CONFIG_BLK_DEV_GAYLE $CONFIG_EXPERIMENTAL + dep_bool ' Amiga Gayle IDE interface support' CONFIG_BLK_DEV_GAYLE $CONFIG_AMIGA + dep_mbool ' Amiga IDE Doubler support (EXPERIMENTAL)' CONFIG_BLK_DEV_IDEDOUBLER $CONFIG_BLK_DEV_GAYLE $CONFIG_EXPERIMENTAL fi if [ "$CONFIG_ZORRO" = "y" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then - dep_mbool ' Buddha/Catweasel IDE interface support (EXPERIMENTAL)' CONFIG_BLK_DEV_BUDDHA $CONFIG_ZORRO $CONFIG_EXPERIMENTAL + dep_mbool ' Buddha/Catweasel IDE interface support (EXPERIMENTAL)' CONFIG_BLK_DEV_BUDDHA $CONFIG_ZORRO $CONFIG_EXPERIMENTAL fi if [ "$CONFIG_ATARI" = "y" ]; then - dep_bool ' Falcon IDE interface support' CONFIG_BLK_DEV_FALCON_IDE $CONFIG_ATARI + dep_bool ' Falcon IDE interface support' CONFIG_BLK_DEV_FALCON_IDE $CONFIG_ATARI fi if [ "$CONFIG_MAC" = "y" ]; then - dep_bool ' Macintosh Quadra/Powerbook IDE interface support' CONFIG_BLK_DEV_MAC_IDE $CONFIG_MAC + dep_bool ' Macintosh Quadra/Powerbook IDE interface support' CONFIG_BLK_DEV_MAC_IDE $CONFIG_MAC + fi + if [ "$CONFIG_Q40" = "y" ]; then + dep_bool ' Q40/Q60 IDE interface support' CONFIG_BLK_DEV_Q40IDE $CONFIG_Q40 fi bool ' Other IDE chipset support' CONFIG_IDE_CHIPSETS @@ -151,7 +166,7 @@ if [ "$CONFIG_IDE_CHIPSETS" = "y" -o \ "$CONFIG_BLK_DEV_AEC62XX" = "y" -o \ "$CONFIG_BLK_DEV_ALI15X3" = "y" -o \ - "$CONFIG_BLK_DEV_AMD7409" = "y" -o \ + "$CONFIG_BLK_DEV_AMD74XX" = "y" -o \ "$CONFIG_BLK_DEV_CMD640" = "y" -o \ "$CONFIG_BLK_DEV_CMD64X" = "y" -o \ "$CONFIG_BLK_DEV_CS5530" = "y" -o \ @@ -160,9 +175,10 @@ "$CONFIG_BLK_DEV_HPT366" = "y" -o \ "$CONFIG_BLK_DEV_IDE_PMAC" = "y" -o \ "$CONFIG_BLK_DEV_OPTI621" = "y" -o \ - "$CONFIG_BLK_DEV_OSB4" = "y" -o \ + "$CONFIG_BLK_DEV_SVWKS" = "y" -o \ "$CONFIG_BLK_DEV_PDC202XX" = "y" -o \ "$CONFIG_BLK_DEV_PIIX" = "y" -o \ + "$CONFIG_BLK_DEV_IT8172" = "y" -o \ "$CONFIG_BLK_DEV_SIS5513" = "y" -o \ "$CONFIG_BLK_DEV_SLC90E66" = "y" -o \ "$CONFIG_BLK_DEV_SL82C105" = "y" -o \ diff -u --recursive --new-file v2.4.8/linux/drivers/ide/Makefile linux/drivers/ide/Makefile --- v2.4.8/linux/drivers/ide/Makefile Fri Dec 29 14:07:22 2000 +++ linux/drivers/ide/Makefile Mon Aug 13 14:56:19 2001 @@ -24,11 +24,12 @@ obj-$(CONFIG_BLK_DEV_IDECD) += ide-cd.o obj-$(CONFIG_BLK_DEV_IDETAPE) += ide-tape.o obj-$(CONFIG_BLK_DEV_IDEFLOPPY) += ide-floppy.o +obj-$(CONFIG_BLK_DEV_IT8172) += it8172.o ide-obj-$(CONFIG_BLK_DEV_AEC62XX) += aec62xx.o ide-obj-$(CONFIG_BLK_DEV_ALI14XX) += ali14xx.o ide-obj-$(CONFIG_BLK_DEV_ALI15X3) += alim15x3.o -ide-obj-$(CONFIG_BLK_DEV_AMD7409) += amd7409.o +ide-obj-$(CONFIG_BLK_DEV_AMD74XX) += amd74xx.o ide-obj-$(CONFIG_BLK_DEV_BUDDHA) += buddha.o ide-obj-$(CONFIG_BLK_DEV_CMD640) += cmd640.o ide-obj-$(CONFIG_BLK_DEV_CMD64X) += cmd64x.o @@ -42,16 +43,18 @@ ide-obj-$(CONFIG_BLK_DEV_HPT366) += hpt366.o ide-obj-$(CONFIG_BLK_DEV_HT6560B) += ht6560b.o ide-obj-$(CONFIG_BLK_DEV_IDE_ICSIDE) += icside.o -ide-obj-$(CONFIG_BLK_DEV_IDEDMA) += ide-dma.o +ide-obj-$(CONFIG_BLK_DEV_ADMA) += ide-adma.o +ide-obj-$(CONFIG_BLK_DEV_IDEDMA_PCI) += ide-dma.o ide-obj-$(CONFIG_BLK_DEV_IDEPCI) += ide-pci.o ide-obj-$(CONFIG_BLK_DEV_ISAPNP) += ide-pnp.o ide-obj-$(CONFIG_BLK_DEV_IDE_PMAC) += ide-pmac.o ide-obj-$(CONFIG_BLK_DEV_MAC_IDE) += macide.o ide-obj-$(CONFIG_BLK_DEV_NS87415) += ns87415.o ide-obj-$(CONFIG_BLK_DEV_OPTI621) += opti621.o -ide-obj-$(CONFIG_BLK_DEV_OSB4) += osb4.o +ide-obj-$(CONFIG_BLK_DEV_SVWKS) += serverworks.o ide-obj-$(CONFIG_BLK_DEV_PDC202XX) += pdc202xx.o ide-obj-$(CONFIG_BLK_DEV_PDC4030) += pdc4030.o +ide-obj-$(CONFIG_BLK_DEV_PDC_ADMA) += pdcadma.o ide-obj-$(CONFIG_BLK_DEV_PIIX) += piix.o ide-obj-$(CONFIG_BLK_DEV_QD6580) += qd6580.o ide-obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o diff -u --recursive --new-file v2.4.8/linux/drivers/ide/amd74xx.c linux/drivers/ide/amd74xx.c --- v2.4.8/linux/drivers/ide/amd74xx.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/ide/amd74xx.c Mon Aug 13 14:56:19 2001 @@ -0,0 +1,485 @@ +/* + * linux/drivers/ide/amd74xx.c Version 0.05 June 9, 2000 + * + * Copyright (C) 1999-2000 Andre Hedrick + * May be copied or modified under the terms of the GNU General Public License + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include "ide_modes.h" + +#define DISPLAY_VIPER_TIMINGS + +#if defined(DISPLAY_VIPER_TIMINGS) && defined(CONFIG_PROC_FS) +#include +#include + +static int amd74xx_get_info(char *, char **, off_t, int); +extern int (*amd74xx_display_info)(char *, char **, off_t, int); /* ide-proc.c */ +extern char *ide_media_verbose(ide_drive_t *); +static struct pci_dev *bmide_dev; + +static int amd74xx_get_info (char *buffer, char **addr, off_t offset, int count) +{ + char *p = buffer; + u32 bibma = pci_resource_start(bmide_dev, 4); + u8 c0 = 0, c1 = 0; + + /* + * at that point bibma+0x2 et bibma+0xa are byte registers + * to investigate: + */ + c0 = inb_p((unsigned short)bibma + 0x02); + c1 = inb_p((unsigned short)bibma + 0x0a); + + p += sprintf(p, "\n AMD %04X VIPER Chipset.\n", bmide_dev->device); + p += sprintf(p, "--------------- Primary Channel ---------------- Secondary Channel -------------\n"); + p += sprintf(p, " %sabled %sabled\n", + (c0&0x80) ? "dis" : " en", + (c1&0x80) ? "dis" : " en"); + p += sprintf(p, "--------------- drive0 --------- drive1 -------- drive0 ---------- drive1 ------\n"); + p += sprintf(p, "DMA enabled: %s %s %s %s\n", + (c0&0x20) ? "yes" : "no ", (c0&0x40) ? "yes" : "no ", + (c1&0x20) ? "yes" : "no ", (c1&0x40) ? "yes" : "no " ); + p += sprintf(p, "UDMA\n"); + p += sprintf(p, "DMA\n"); + p += sprintf(p, "PIO\n"); + + return p-buffer; /* => must be less than 4k! */ +} +#endif /* defined(DISPLAY_VIPER_TIMINGS) && defined(CONFIG_PROC_FS) */ + +byte amd74xx_proc = 0; + +extern char *ide_xfer_verbose (byte xfer_rate); + +static unsigned int amd74xx_swdma_check (struct pci_dev *dev) +{ + unsigned int class_rev; + + if (dev->device == PCI_DEVICE_ID_AMD_VIPER_7411) + return 0; + + pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev); + class_rev &= 0xff; + return ((int) (class_rev >= 7) ? 1 : 0); +} + +static int amd74xx_swdma_error(ide_drive_t *drive) +{ + printk("%s: single-word DMA not support (revision < C4)\n", drive->name); + return 0; +} + +/* + * Here is where all the hard work goes to program the chipset. + * + */ +static int amd74xx_tune_chipset (ide_drive_t *drive, byte speed) +{ + ide_hwif_t *hwif = HWIF(drive); + struct pci_dev *dev = hwif->pci_dev; + int err = 0; + byte unit = (drive->select.b.unit & 0x01); +#ifdef CONFIG_BLK_DEV_IDEDMA + unsigned long dma_base = hwif->dma_base; +#endif /* CONFIG_BLK_DEV_IDEDMA */ + byte drive_pci = 0x00; + byte drive_pci2 = 0x00; + byte ultra_timing = 0x00; + byte dma_pio_timing = 0x00; + byte pio_timing = 0x00; + + switch (drive->dn) { + case 0: drive_pci = 0x53; drive_pci2 = 0x4b; break; + case 1: drive_pci = 0x52; drive_pci2 = 0x4a; break; + case 2: drive_pci = 0x51; drive_pci2 = 0x49; break; + case 3: drive_pci = 0x50; drive_pci2 = 0x48; break; + default: + return -1; + } + + pci_read_config_byte(dev, drive_pci, &ultra_timing); + pci_read_config_byte(dev, drive_pci2, &dma_pio_timing); + pci_read_config_byte(dev, 0x4c, &pio_timing); + +#ifdef DEBUG + printk("%s: UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x ", + drive->name, ultra_timing, dma_pio_timing, pio_timing); +#endif + + ultra_timing &= ~0xC7; + dma_pio_timing &= ~0xFF; + pio_timing &= ~(0x03 << drive->dn); + +#ifdef DEBUG + printk(":: UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x ", + ultra_timing, dma_pio_timing, pio_timing); +#endif + + switch(speed) { +#ifdef CONFIG_BLK_DEV_IDEDMA + case XFER_UDMA_5: +#undef __CAN_MODE_5 +#ifdef __CAN_MODE_5 + ultra_timing |= 0x46; + dma_pio_timing |= 0x20; + break; +#else + printk("%s: setting to mode 4, driver problems in mode 5.\n", drive->name); + speed = XFER_UDMA_4; +#endif /* __CAN_MODE_5 */ + case XFER_UDMA_4: + ultra_timing |= 0x45; + dma_pio_timing |= 0x20; + break; + case XFER_UDMA_3: + ultra_timing |= 0x44; + dma_pio_timing |= 0x20; + break; + case XFER_UDMA_2: + ultra_timing |= 0x40; + dma_pio_timing |= 0x20; + break; + case XFER_UDMA_1: + ultra_timing |= 0x41; + dma_pio_timing |= 0x20; + break; + case XFER_UDMA_0: + ultra_timing |= 0x42; + dma_pio_timing |= 0x20; + break; + case XFER_MW_DMA_2: + dma_pio_timing |= 0x20; + break; + case XFER_MW_DMA_1: + dma_pio_timing |= 0x21; + break; + case XFER_MW_DMA_0: + dma_pio_timing |= 0x77; + break; + case XFER_SW_DMA_2: + if (!amd74xx_swdma_check(dev)) + return amd74xx_swdma_error(drive); + dma_pio_timing |= 0x42; + break; + case XFER_SW_DMA_1: + if (!amd74xx_swdma_check(dev)) + return amd74xx_swdma_error(drive); + dma_pio_timing |= 0x65; + break; + case XFER_SW_DMA_0: + if (!amd74xx_swdma_check(dev)) + return amd74xx_swdma_error(drive); + dma_pio_timing |= 0xA8; + break; +#endif /* CONFIG_BLK_DEV_IDEDMA */ + case XFER_PIO_4: + dma_pio_timing |= 0x20; + break; + case XFER_PIO_3: + dma_pio_timing |= 0x22; + break; + case XFER_PIO_2: + dma_pio_timing |= 0x42; + break; + case XFER_PIO_1: + dma_pio_timing |= 0x65; + break; + case XFER_PIO_0: + default: + dma_pio_timing |= 0xA8; + break; + } + + pio_timing |= (0x03 << drive->dn); + + if (!drive->init_speed) + drive->init_speed = speed; + +#ifdef CONFIG_BLK_DEV_IDEDMA + pci_write_config_byte(dev, drive_pci, ultra_timing); +#endif /* CONFIG_BLK_DEV_IDEDMA */ + pci_write_config_byte(dev, drive_pci2, dma_pio_timing); + pci_write_config_byte(dev, 0x4c, pio_timing); + +#ifdef DEBUG + printk(":: UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x\n", + ultra_timing, dma_pio_timing, pio_timing); +#endif + +#ifdef CONFIG_BLK_DEV_IDEDMA + if (speed > XFER_PIO_4) { + outb(inb(dma_base+2)|(1<<(5+unit)), dma_base+2); + } else { + outb(inb(dma_base+2) & ~(1<<(5+unit)), dma_base+2); + } +#endif /* CONFIG_BLK_DEV_IDEDMA */ + + err = ide_config_drive_speed(drive, speed); + drive->current_speed = speed; + return (err); +} + +static void config_chipset_for_pio (ide_drive_t *drive) +{ + unsigned short eide_pio_timing[6] = {960, 480, 240, 180, 120, 90}; + unsigned short xfer_pio = drive->id->eide_pio_modes; + byte timing, speed, pio; + + pio = ide_get_best_pio_mode(drive, 255, 5, NULL); + + if (xfer_pio> 4) + xfer_pio = 0; + + if (drive->id->eide_pio_iordy > 0) { + for (xfer_pio = 5; + xfer_pio>0 && + drive->id->eide_pio_iordy>eide_pio_timing[xfer_pio]; + xfer_pio--); + } else { + xfer_pio = (drive->id->eide_pio_modes & 4) ? 0x05 : + (drive->id->eide_pio_modes & 2) ? 0x04 : + (drive->id->eide_pio_modes & 1) ? 0x03 : + (drive->id->tPIO & 2) ? 0x02 : + (drive->id->tPIO & 1) ? 0x01 : xfer_pio; + } + + timing = (xfer_pio >= pio) ? xfer_pio : pio; + + switch(timing) { + case 4: speed = XFER_PIO_4;break; + case 3: speed = XFER_PIO_3;break; + case 2: speed = XFER_PIO_2;break; + case 1: speed = XFER_PIO_1;break; + default: + speed = (!drive->id->tPIO) ? XFER_PIO_0 : XFER_PIO_SLOW; + break; + } + (void) amd74xx_tune_chipset(drive, speed); + drive->current_speed = speed; +} + +static void amd74xx_tune_drive (ide_drive_t *drive, byte pio) +{ + byte speed; + switch(pio) { + case 4: speed = XFER_PIO_4;break; + case 3: speed = XFER_PIO_3;break; + case 2: speed = XFER_PIO_2;break; + case 1: speed = XFER_PIO_1;break; + default: speed = XFER_PIO_0;break; + } + (void) amd74xx_tune_chipset(drive, speed); +} + +#ifdef CONFIG_BLK_DEV_IDEDMA +/* + * This allows the configuration of ide_pci chipset registers + * for cards that learn about the drive's UDMA, DMA, PIO capabilities + * after the drive is reported by the OS. + */ +static int config_chipset_for_dma (ide_drive_t *drive) +{ + ide_hwif_t *hwif = HWIF(drive); + struct pci_dev *dev = hwif->pci_dev; + struct hd_driveid *id = drive->id; + byte udma_66 = eighty_ninty_three(drive); + byte udma_100 = (dev->device==PCI_DEVICE_ID_AMD_VIPER_7411) ? 1 : 0; + byte speed = 0x00; + int rval; + + if ((id->dma_ultra & 0x0020) && (udma_66)&& (udma_100)) { + speed = XFER_UDMA_5; + } else if ((id->dma_ultra & 0x0010) && (udma_66)) { + speed = XFER_UDMA_4; + } else if ((id->dma_ultra & 0x0008) && (udma_66)) { + speed = XFER_UDMA_3; + } else if (id->dma_ultra & 0x0004) { + speed = XFER_UDMA_2; + } else if (id->dma_ultra & 0x0002) { + speed = XFER_UDMA_1; + } else if (id->dma_ultra & 0x0001) { + speed = XFER_UDMA_0; + } else if (id->dma_mword & 0x0004) { + speed = XFER_MW_DMA_2; + } else if (id->dma_mword & 0x0002) { + speed = XFER_MW_DMA_1; + } else if (id->dma_mword & 0x0001) { + speed = XFER_MW_DMA_0; + } else { + return ((int) ide_dma_off_quietly); + } + + (void) amd74xx_tune_chipset(drive, speed); + + rval = (int)( ((id->dma_ultra >> 11) & 3) ? ide_dma_on : + ((id->dma_ultra >> 8) & 7) ? ide_dma_on : + ((id->dma_mword >> 8) & 7) ? ide_dma_on : + ide_dma_off_quietly); + + return rval; +} + +static int config_drive_xfer_rate (ide_drive_t *drive) +{ + struct hd_driveid *id = drive->id; + ide_dma_action_t dma_func = ide_dma_on; + + if (id && (id->capability & 1) && HWIF(drive)->autodma) { + /* Consult the list of known "bad" drives */ + if (ide_dmaproc(ide_dma_bad_drive, drive)) { + dma_func = ide_dma_off; + goto fast_ata_pio; + } + dma_func = ide_dma_off_quietly; + if (id->field_valid & 4) { + if (id->dma_ultra & 0x002F) { + /* Force if Capable UltraDMA */ + dma_func = config_chipset_for_dma(drive); + if ((id->field_valid & 2) && + (dma_func != ide_dma_on)) + goto try_dma_modes; + } + } else if (id->field_valid & 2) { +try_dma_modes: + if ((id->dma_mword & 0x0007) || + ((id->dma_1word & 0x007) && + (amd74xx_swdma_check(HWIF(drive)->pci_dev)))) { + /* Force if Capable regular DMA modes */ + dma_func = config_chipset_for_dma(drive); + if (dma_func != ide_dma_on) + goto no_dma_set; + } + + } else if (ide_dmaproc(ide_dma_good_drive, drive)) { + if (id->eide_dma_time > 150) { + goto no_dma_set; + } + /* Consult the list of known "good" drives */ + dma_func = config_chipset_for_dma(drive); + if (dma_func != ide_dma_on) + goto no_dma_set; + } else { + goto fast_ata_pio; + } + } else if ((id->capability & 8) || (id->field_valid & 2)) { +fast_ata_pio: + dma_func = ide_dma_off_quietly; +no_dma_set: + + config_chipset_for_pio(drive); + } + return HWIF(drive)->dmaproc(dma_func, drive); +} + +/* + * amd74xx_dmaproc() initiates/aborts (U)DMA read/write operations on a drive. + */ + +int amd74xx_dmaproc (ide_dma_action_t func, ide_drive_t *drive) +{ + switch (func) { + case ide_dma_check: + return config_drive_xfer_rate(drive); + default: + break; + } + return ide_dmaproc(func, drive); /* use standard DMA stuff */ +} +#endif /* CONFIG_BLK_DEV_IDEDMA */ + +unsigned int __init pci_init_amd74xx (struct pci_dev *dev, const char *name) +{ + unsigned long fixdma_base = pci_resource_start(dev, 4); + +#ifdef CONFIG_BLK_DEV_IDEDMA + if (!amd74xx_swdma_check(dev)) + printk("%s: disabling single-word DMA support (revision < C4)\n", name); +#endif /* CONFIG_BLK_DEV_IDEDMA */ + + if (!fixdma_base) { + /* + * + */ + } else { + /* + * enable DMA capable bit, and "not" simplex only + */ + outb(inb(fixdma_base+2) & 0x60, fixdma_base+2); + + if (inb(fixdma_base+2) & 0x80) + printk("%s: simplex device: DMA will fail!!\n", name); + } +#if defined(DISPLAY_VIPER_TIMINGS) && defined(CONFIG_PROC_FS) + if (!amd74xx_proc) { + amd74xx_proc = 1; + bmide_dev = dev; + amd74xx_display_info = &amd74xx_get_info; + } +#endif /* DISPLAY_VIPER_TIMINGS && CONFIG_PROC_FS */ + + return 0; +} + +unsigned int __init ata66_amd74xx (ide_hwif_t *hwif) +{ +#ifdef CONFIG_AMD74XX_OVERRIDE + byte ata66 = 1; +#else + byte ata66 = 0; +#endif /* CONFIG_AMD74XX_OVERRIDE */ + +#if 0 + pci_read_config_byte(hwif->pci_dev, 0x48, &ata66); + return ((ata66 & 0x02) ? 0 : 1); +#endif + return ata66; +} + +void __init ide_init_amd74xx (ide_hwif_t *hwif) +{ + hwif->tuneproc = &amd74xx_tune_drive; + hwif->speedproc = &amd74xx_tune_chipset; + +#ifndef CONFIG_BLK_DEV_IDEDMA + hwif->drives[0].autotune = 1; + hwif->drives[1].autotune = 1; + hwif->autodma = 0; + return; +#else + + if (hwif->dma_base) { + hwif->dmaproc = &amd74xx_dmaproc; + if (!noautodma) + hwif->autodma = 1; + } else { + hwif->autodma = 0; + hwif->drives[0].autotune = 1; + hwif->drives[1].autotune = 1; + } +#endif /* CONFIG_BLK_DEV_IDEDMA */ +} + +void __init ide_dmacapable_amd74xx (ide_hwif_t *hwif, unsigned long dmabase) +{ + ide_setup_dma(hwif, dmabase, 8); +} diff -u --recursive --new-file v2.4.8/linux/drivers/ide/hpt366.c linux/drivers/ide/hpt366.c --- v2.4.8/linux/drivers/ide/hpt366.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/ide/hpt366.c Tue Aug 14 20:01:07 2001 @@ -60,6 +60,11 @@ "IBM-DTLA-305040", "IBM-DTLA-305030", "IBM-DTLA-305020", + "IC35L010AVER07-0", + "IC35L020AVER07-0", + "IC35L030AVER07-0", + "IC35L040AVER07-0", + "IC35L060AVER07-0", "WDC AC310200R", NULL }; @@ -74,6 +79,11 @@ "IBM-DTLA-305040", "IBM-DTLA-305030", "IBM-DTLA-305020", + "IC35L010AVER07-0", + "IC35L020AVER07-0", + "IC35L030AVER07-0", + "IC35L040AVER07-0", + "IC35L060AVER07-0", "WDC AC310200R", NULL }; diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-adma.c linux/drivers/ide/ide-adma.c --- v2.4.8/linux/drivers/ide/ide-adma.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/ide/ide-adma.c Mon Aug 13 15:44:03 2001 @@ -0,0 +1,9 @@ +/* + * linux/drivers/ide/ide-adma.c Version 0.00 June 24, 2001 + * + * Copyright (c) 2001 Andre Hedrick + * + * Asynchronous DMA -- TBA, this is a holding file. + * + */ + diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-cd.c linux/drivers/ide/ide-cd.c --- v2.4.8/linux/drivers/ide/ide-cd.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/ide/ide-cd.c Thu Aug 16 09:30:45 2001 @@ -978,8 +978,7 @@ /* If we've filled the present buffer but there's another chained buffer after it, move on. */ - if (rq->current_nr_sectors == 0 && - rq->nr_sectors > 0) + if (rq->current_nr_sectors == 0 && rq->nr_sectors) cdrom_end_request (1, drive); /* If the buffers are full, cache the rest of the data in our @@ -1193,6 +1192,55 @@ return cdrom_start_packet_command (drive, 0, cdrom_start_seek_continuation); } +static inline int cdrom_merge_requests(struct request *rq, struct request *nxt) +{ + int ret = 1; + + /* + * partitions not really working, but better check anyway... + */ + if (rq->cmd == nxt->cmd && rq->rq_dev == nxt->rq_dev) { + rq->nr_sectors += nxt->nr_sectors; + rq->hard_nr_sectors += nxt->nr_sectors; + rq->bhtail->b_reqnext = nxt->bh; + rq->bhtail = nxt->bhtail; + list_del(&nxt->queue); + blkdev_release_request(nxt); + ret = 0; + } + + return ret; +} + +/* + * the current request will always be the first one on the list + */ +static void cdrom_attempt_remerge(ide_drive_t *drive, struct request *rq) +{ + struct list_head *entry; + struct request *nxt; + unsigned long flags; + + spin_lock_irqsave(&io_request_lock, flags); + + while (1) { + entry = rq->queue.next; + if (entry == &drive->queue.queue_head) + break; + + nxt = blkdev_entry_to_request(entry); + if (rq->sector + rq->nr_sectors != nxt->sector) + break; + else if (rq->nr_sectors + nxt->nr_sectors > SECTORS_MAX) + break; + + if (cdrom_merge_requests(rq, nxt)) + break; + } + + spin_unlock_irqrestore(&io_request_lock, flags); +} + /* Fix up a possibly partially-processed request so that we can start it over entirely, or even put it back on the request queue. */ static void restore_request (struct request *rq) @@ -1204,6 +1252,8 @@ rq->sector -= n; } rq->current_nr_sectors = rq->bh->b_size >> SECTOR_BITS; + rq->hard_nr_sectors = rq->nr_sectors; + rq->hard_sector = rq->sector; } /* @@ -1217,20 +1267,22 @@ /* If the request is relative to a partition, fix it up to refer to the absolute address. */ - if ((minor & PARTN_MASK) != 0) { + if (minor & PARTN_MASK) { rq->sector = block; minor &= ~PARTN_MASK; - rq->rq_dev = MKDEV (MAJOR(rq->rq_dev), minor); + rq->rq_dev = MKDEV(MAJOR(rq->rq_dev), minor); } /* We may be retrying this request after an error. Fix up any weirdness which might be present in the request packet. */ - restore_request (rq); + restore_request(rq); /* Satisfy whatever we can of this request from our cached sector. */ if (cdrom_read_from_buffer(drive)) return ide_stopped; + cdrom_attempt_remerge(drive, rq); + /* Clear the local sector buffer. */ info->nsectors_buffered = 0; @@ -1478,7 +1530,7 @@ static ide_startstop_t cdrom_write_intr(ide_drive_t *drive) { - int stat, ireason, len, sectors_to_transfer; + int stat, ireason, len, sectors_to_transfer, uptodate; struct cdrom_info *info = drive->driver_data; int i, dma_error = 0, dma = info->dma; ide_startstop_t startstop; @@ -1499,6 +1551,9 @@ return startstop; } + /* + * using dma, transfer is complete now + */ if (dma) { if (dma_error) return ide_error(drive, "dma error", stat); @@ -1520,12 +1575,13 @@ /* If we're not done writing, complain. * Otherwise, complete the command normally. */ + uptodate = 1; if (rq->current_nr_sectors > 0) { printk("%s: write_intr: data underrun (%ld blocks)\n", - drive->name, rq->current_nr_sectors); - cdrom_end_request(0, drive); - } else - cdrom_end_request(1, drive); + drive->name, rq->current_nr_sectors); + uptodate = 0; + } + cdrom_end_request(uptodate, drive); return ide_stopped; } @@ -1534,26 +1590,42 @@ if (cdrom_write_check_ireason(drive, len, ireason)) return ide_stopped; - /* The number of sectors we need to read from the drive. */ sectors_to_transfer = len / SECTOR_SIZE; - /* Now loop while we still have data to read from the drive. DMA - * transfers will already have been complete + /* + * now loop and write out the data */ while (sectors_to_transfer > 0) { - /* If we've filled the present buffer but there's another - chained buffer after it, move on. */ - if (rq->current_nr_sectors == 0 && rq->nr_sectors > 0) - cdrom_end_request(1, drive); + int this_transfer; + + if (!rq->current_nr_sectors) { + printk("ide-cd: write_intr: oops\n"); + break; + } - atapi_output_bytes(drive, rq->buffer, rq->current_nr_sectors); - rq->nr_sectors -= rq->current_nr_sectors; - rq->current_nr_sectors = 0; - rq->sector += rq->current_nr_sectors; - sectors_to_transfer -= rq->current_nr_sectors; + /* + * Figure out how many sectors we can transfer + */ + this_transfer = MIN(sectors_to_transfer,rq->current_nr_sectors); + + while (this_transfer > 0) { + atapi_output_bytes(drive, rq->buffer, SECTOR_SIZE); + rq->buffer += SECTOR_SIZE; + --rq->nr_sectors; + --rq->current_nr_sectors; + ++rq->sector; + --this_transfer; + --sectors_to_transfer; + } + + /* + * current buffer complete, move on + */ + if (rq->current_nr_sectors == 0 && rq->nr_sectors) + cdrom_end_request (1, drive); } - /* arm handler */ + /* re-arm handler */ ide_set_handler(drive, &cdrom_write_intr, 5 * WAIT_CMD, NULL); return ide_started; } @@ -1584,10 +1656,26 @@ return cdrom_transfer_packet_command(drive, &pc, cdrom_write_intr); } -static ide_startstop_t cdrom_start_write(ide_drive_t *drive) +static ide_startstop_t cdrom_start_write(ide_drive_t *drive, struct request *rq) { struct cdrom_info *info = drive->driver_data; + /* + * writes *must* be 2kB frame aligned + */ + if ((rq->nr_sectors & 3) || (rq->sector & 3)) { + cdrom_end_request(0, drive); + return ide_stopped; + } + + /* + * for dvd-ram and such media, it's a really big deal to get + * big writes all the time. so scour the queue and attempt to + * remerge requests, often the plugging will not have had time + * to do this properly + */ + cdrom_attempt_remerge(drive, rq); + info->nsectors_buffered = 0; /* use dma, if possible. we don't need to check more, since we @@ -1630,7 +1718,7 @@ if (rq->cmd == READ) action = cdrom_start_read(drive, block); else - action = cdrom_start_write(drive); + action = cdrom_start_write(drive, rq); } info->last_block = block; return action; @@ -1797,7 +1885,7 @@ return cdrom_queue_packet_command (drive, &pc); } -static int cdrom_read_capacity(ide_drive_t *drive, unsigned *capacity, +static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity, struct request_sense *sense) { struct { @@ -1833,6 +1921,7 @@ pc.buffer = buf; pc.buflen = buflen; + pc.quiet = 1; pc.c[0] = GPCMD_READ_TOC_PMA_ATIP; pc.c[6] = trackno; pc.c[7] = (buflen >> 8); @@ -1985,7 +2074,7 @@ /* Now try to get the total cdrom capacity. */ minor = (drive->select.b.unit) << PARTN_BITS; dev = MKDEV(HWIF(drive)->major, minor); - stat = cdrom_get_last_written(dev, (long *)&toc->capacity); + stat = cdrom_get_last_written(dev, &toc->capacity); if (stat) stat = cdrom_read_capacity(drive, &toc->capacity, sense); if (stat) @@ -2786,7 +2875,7 @@ MOD_INC_USE_COUNT; if (info->buffer == NULL) info->buffer = (char *) kmalloc(SECTOR_BUFFER_SIZE, GFP_KERNEL); - if ((info->buffer == NULL) || (rc = cdrom_fops.open(ip, fp))) { + if ((info->buffer == NULL) || (rc = cdrom_fops.open(ip, fp))) { drive->usage--; MOD_DEC_USE_COUNT; } @@ -2827,13 +2916,18 @@ drive->part[0].nr_sects = toc->capacity * SECTORS_PER_FRAME; HWIF(drive)->gd->sizes[minor] = toc->capacity * BLOCKS_PER_FRAME; + /* + * reset block size, ide_revalidate_disk incorrectly sets it to + * 1024 even for CDROM's + */ blk_size[HWIF(drive)->major] = HWIF(drive)->gd->sizes; + set_blocksize(MKDEV(HWIF(drive)->major, minor), CD_FRAMESIZE); } static unsigned long ide_cdrom_capacity (ide_drive_t *drive) { - unsigned capacity; + unsigned long capacity; if (cdrom_read_capacity(drive, &capacity, NULL)) return 0; @@ -2862,20 +2956,32 @@ return 0; } +static +int ide_cdrom_reinit (ide_drive_t *drive) +{ + return 0; +} + static ide_driver_t ide_cdrom_driver = { name: "ide-cdrom", version: IDECD_VERSION, media: ide_cdrom, + busy: 0, supports_dma: 1, supports_dsc_overlap: 1, cleanup: ide_cdrom_cleanup, do_request: ide_do_rw_cdrom, + end_request: NULL, ioctl: ide_cdrom_ioctl, open: ide_cdrom_open, release: ide_cdrom_release, media_change: ide_cdrom_check_media_change, revalidate: ide_cdrom_revalidate, + pre_reset: NULL, capacity: ide_cdrom_capacity, + special: NULL, + proc: NULL, + driver_reinit: ide_cdrom_reinit, }; int ide_cdrom_init(void); diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-cd.h linux/drivers/ide/ide-cd.h --- v2.4.8/linux/drivers/ide/ide-cd.h Tue Aug 7 12:50:04 2001 +++ linux/drivers/ide/ide-cd.h Thu Aug 16 09:30:45 2001 @@ -37,11 +37,12 @@ /************************************************************************/ -#define SECTOR_SIZE 512 #define SECTOR_BITS 9 -#define SECTORS_PER_FRAME (CD_FRAMESIZE / SECTOR_SIZE) +#define SECTOR_SIZE (1 << SECTOR_BITS) +#define SECTORS_PER_FRAME (CD_FRAMESIZE >> SECTOR_BITS) #define SECTOR_BUFFER_SIZE (CD_FRAMESIZE * 32) -#define SECTORS_BUFFER (SECTOR_BUFFER_SIZE / SECTOR_SIZE) +#define SECTORS_BUFFER (SECTOR_BUFFER_SIZE >> SECTOR_BITS) +#define SECTORS_MAX (131072 >> SECTOR_BITS) #define BLOCKS_PER_FRAME (CD_FRAMESIZE / BLOCK_SIZE) @@ -149,7 +150,7 @@ struct atapi_toc { int last_session_lba; int xa_flag; - unsigned capacity; + unsigned long capacity; struct atapi_toc_header hdr; struct atapi_toc_entry ent[MAX_TRACKS+1]; /* One extra for the leadout. */ diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-disk.c linux/drivers/ide/ide-disk.c --- v2.4.8/linux/drivers/ide/ide-disk.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/ide/ide-disk.c Mon Aug 13 14:56:19 2001 @@ -369,6 +369,7 @@ { if (IDE_CONTROL_REG) OUT_BYTE(drive->ctl,IDE_CONTROL_REG); + OUT_BYTE(0x00, IDE_FEATURE_REG); OUT_BYTE(rq->nr_sectors,IDE_NSECTOR_REG); #ifdef CONFIG_BLK_DEV_PDC4030 if (drive->select.b.lba || IS_PDC4030_DRIVE) { @@ -692,43 +693,8 @@ ide_add_setting(drive, "file_readahead", SETTING_RW, BLKFRAGET, BLKFRASET, TYPE_INTA, 0, INT_MAX, 1, 1024, &max_readahead[major][minor], NULL); ide_add_setting(drive, "max_kb_per_request", SETTING_RW, BLKSECTGET, BLKSECTSET, TYPE_INTA, 1, 255, 1, 2, &max_sectors[major][minor], NULL); ide_add_setting(drive, "lun", SETTING_RW, -1, -1, TYPE_INT, 0, 7, 1, 1, &drive->lun, NULL); -} - -/* - * IDE subdriver functions, registered with ide.c - */ -static ide_driver_t idedisk_driver = { - "ide-disk", /* name */ - IDEDISK_VERSION, /* version */ - ide_disk, /* media */ - 0, /* busy */ - 1, /* supports_dma */ - 0, /* supports_dsc_overlap */ - NULL, /* cleanup */ - do_rw_disk, /* do_request */ - NULL, /* end_request */ - NULL, /* ioctl */ - idedisk_open, /* open */ - idedisk_release, /* release */ - idedisk_media_change, /* media_change */ - idedisk_revalidate, /* revalidate */ - idedisk_pre_reset, /* pre_reset */ - idedisk_capacity, /* capacity */ - idedisk_special, /* special */ - idedisk_proc /* proc */ -}; - -int idedisk_init (void); -static ide_module_t idedisk_module = { - IDE_DRIVER_MODULE, - idedisk_init, - &idedisk_driver, - NULL -}; - -static int idedisk_cleanup (ide_drive_t *drive) -{ - return ide_unregister_subdriver(drive); + ide_add_setting(drive, "failures", SETTING_RW, -1, -1, TYPE_INT, 0, 65535, 1, 1, &drive->failures, NULL); + ide_add_setting(drive, "max_failures", SETTING_RW, -1, -1, TYPE_INT, 0, 65535, 1, 1, &drive->max_failures, NULL); } static void idedisk_setup (ide_drive_t *drive) @@ -835,6 +801,69 @@ drive->no_io_32bit = id->dword_io ? 1 : 0; } +static int idedisk_reinit (ide_drive_t *drive) +{ + return 0; +} + +static int idedisk_cleanup (ide_drive_t *drive) +{ + return ide_unregister_subdriver(drive); +} + +/* + * IDE subdriver functions, registered with ide.c + */ +static ide_driver_t idedisk_driver = { + name: "ide-disk", + version: IDEDISK_VERSION, + media: ide_disk, + busy: 0, + supports_dma: 1, + supports_dsc_overlap: 0, + cleanup: idedisk_cleanup, + do_request: do_rw_disk, + end_request: NULL, + ioctl: NULL, + open: idedisk_open, + release: idedisk_release, + media_change: idedisk_media_change, + revalidate: idedisk_revalidate, + pre_reset: idedisk_pre_reset, + capacity: idedisk_capacity, + special: idedisk_special, + proc: idedisk_proc, + driver_reinit: idedisk_reinit, +}; + +int idedisk_init (void); +static ide_module_t idedisk_module = { + IDE_DRIVER_MODULE, + idedisk_init, + &idedisk_driver, + NULL +}; + +MODULE_DESCRIPTION("ATA DISK Driver"); + +static void __exit idedisk_exit (void) +{ + ide_drive_t *drive; + int failed = 0; + + while ((drive = ide_scan_devices (ide_disk, idedisk_driver.name, &idedisk_driver, failed)) != NULL) { + if (idedisk_cleanup (drive)) { + printk (KERN_ERR "%s: cleanup_module() called while still busy\n", drive->name); + failed++; + } + /* We must remove proc entries defined in this module. + Otherwise we oops while accessing these entries */ + if (drive->proc) + ide_remove_proc_entries(drive->proc, idedisk_proc); + } + ide_unregister_module(&idedisk_module); +} + int idedisk_init (void) { ide_drive_t *drive; @@ -859,27 +888,5 @@ return 0; } -#ifdef MODULE -int init_module (void) -{ - return idedisk_init(); -} - -void cleanup_module (void) -{ - ide_drive_t *drive; - int failed = 0; - - while ((drive = ide_scan_devices (ide_disk, idedisk_driver.name, &idedisk_driver, failed)) != NULL) { - if (idedisk_cleanup (drive)) { - printk (KERN_ERR "%s: cleanup_module() called while still busy\n", drive->name); - failed++; - } - /* We must remove proc entries defined in this module. - Otherwise we oops while accessing these entries */ - if (drive->proc) - ide_remove_proc_entries(drive->proc, idedisk_proc); - } - ide_unregister_module(&idedisk_module); -} -#endif /* MODULE */ +module_init(idedisk_init); +module_exit(idedisk_exit); diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-dma.c linux/drivers/ide/ide-dma.c --- v2.4.8/linux/drivers/ide/ide-dma.c Mon Jan 15 13:08:15 2001 +++ linux/drivers/ide/ide-dma.c Mon Aug 13 14:56:19 2001 @@ -90,7 +90,16 @@ #include #include -#undef CONFIG_BLK_DEV_IDEDMA_TIMEOUT +/* + * Long lost data from 2.0.34 that is now in 2.0.39 + * + * This was used in ./drivers/block/triton.c to do DMA Base address setup + * when PnP failed. Oh the things we forget. I believe this was part + * of SFF-8038i that has been withdrawn from public access... :-(( + */ +#define DEFAULT_BMIBA 0xe800 /* in case BIOS did not init it */ +#define DEFAULT_BMCRBA 0xcc00 /* VIA's default value */ +#define DEFAULT_BMALIBA 0xd400 /* ALI's default value */ extern char *ide_dmafunc_verbose(ide_dma_action_t dmafunc); @@ -119,6 +128,12 @@ { "WDC AC31600H" , "ALL" }, { "WDC AC32100H" , "24.09P07" }, { "WDC AC23200L" , "21.10N21" }, + { "Compaq CRD-8241B" , "ALL" }, + { "CRD-8400B" , "ALL" }, + { "SanDisk SDP3B-64" , "ALL" }, + { "SAMSUNG CD-ROM SN-124", "ALL" }, + { "PLEXTOR CD-R PX-W8432T", "ALL" }, + { "ATAPI CD-ROM DRIVE 40X MAXIMUM", "ALL" }, { 0 , 0 } }; @@ -206,7 +221,8 @@ } return ide_stopped; } - printk("%s: dma_intr: bad DMA status\n", drive->name); + printk("%s: dma_intr: bad DMA status (dma_stat=%x)\n", + drive->name, dma_stat); } return ide_error(drive, "dma_intr", stat); } @@ -217,6 +233,9 @@ struct scatterlist *sg = hwif->sg_table; int nents = 0; + if (hwif->sg_dma_active) + BUG(); + if (rq->cmd == READ) hwif->sg_dma_direction = PCI_DMA_FROMDEVICE; else @@ -282,11 +301,7 @@ while (cur_len) { if (count++ >= PRD_ENTRIES) { printk("%s: DMA table too small\n", drive->name); - pci_unmap_sg(HWIF(drive)->pci_dev, - HWIF(drive)->sg_table, - HWIF(drive)->sg_nents, - HWIF(drive)->sg_dma_direction); - return 0; /* revert to PIO for this request */ + goto use_pio_instead; } else { u32 xcount, bcount = 0x10000 - (cur_addr & 0xffff); @@ -296,6 +311,20 @@ xcount = bcount & 0xffff; if (is_trm290_chipset) xcount = ((xcount >> 2) - 1) << 16; + if (xcount == 0x0000) { + /* + * Most chipsets correctly interpret a length of 0x0000 as 64KB, + * but at least one (e.g. CS5530) misinterprets it as zero (!). + * So here we break the 64KB entry into two 32KB entries instead. + */ + if (count++ >= PRD_ENTRIES) { + printk("%s: DMA table too small\n", drive->name); + goto use_pio_instead; + } + *table++ = cpu_to_le32(0x8000); + *table++ = cpu_to_le32(cur_addr + 0x8000); + xcount = 0x8000; + } *table++ = cpu_to_le32(xcount); cur_addr += bcount; cur_len -= bcount; @@ -306,12 +335,19 @@ i--; } - if (!count) - printk("%s: empty DMA table?\n", drive->name); - else if (!is_trm290_chipset) - *--table |= cpu_to_le32(0x80000000); - - return count; + if (count) { + if (!is_trm290_chipset) + *--table |= cpu_to_le32(0x80000000); + return count; + } + printk("%s: empty DMA table?\n", drive->name); +use_pio_instead: + pci_unmap_sg(HWIF(drive)->pci_dev, + HWIF(drive)->sg_table, + HWIF(drive)->sg_nents, + HWIF(drive)->sg_dma_direction); + HWIF(drive)->sg_dma_active = 0; + return 0; /* revert to PIO for this request */ } /* Teardown mappings after DMA has completed. */ @@ -322,6 +358,7 @@ int nents = HWIF(drive)->sg_nents; pci_unmap_sg(dev, sg, nents, HWIF(drive)->sg_dma_direction); + HWIF(drive)->sg_dma_active = 0; } /* @@ -426,6 +463,7 @@ return hwif->dmaproc(ide_dma_off_quietly, drive); } +#ifndef CONFIG_BLK_DEV_IDEDMA_TIMEOUT /* * 1 dmaing, 2 error, 4 intr */ @@ -449,6 +487,30 @@ return WAIT_CMD; return 0; } +#else /* CONFIG_BLK_DEV_IDEDMA_TIMEOUT */ +static ide_startstop_t ide_dma_timeout_revovery (ide_drive_t *drive) +{ + ide_hwgroup_t *hwgroup = HWGROUP(drive); + ide_hwif_t *hwif = HWIF(drive); + int enable_dma = drive->using_dma; + unsigned long flags; + ide_startstop_t startstop; + + spin_lock_irqsave(&io_request_lock, flags); + hwgroup->handler = NULL; + del_timer(&hwgroup->timer); + spin_unlock_irqrestore(&io_request_lock, flags); + + drive->waiting_for_dma = 0; + + startstop = ide_do_reset(drive); + + if ((enable_dma) && !(drive->using_dma)) + (void) hwif->dmaproc(ide_dma_on, drive); + + return startstop; +} +#endif /* CONFIG_BLK_DEV_IDEDMA_TIMEOUT */ /* * ide_dmaproc() initiates/aborts DMA read/write operations on a drive. @@ -468,10 +530,11 @@ */ int ide_dmaproc (ide_dma_action_t func, ide_drive_t *drive) { - ide_hwif_t *hwif = HWIF(drive); - unsigned long dma_base = hwif->dma_base; - byte unit = (drive->select.b.unit & 0x01); - unsigned int count, reading = 0; +// ide_hwgroup_t *hwgroup = HWGROUP(drive); + ide_hwif_t *hwif = HWIF(drive); + unsigned long dma_base = hwif->dma_base; + byte unit = (drive->select.b.unit & 0x01); + unsigned int count, reading = 0; byte dma_stat; switch (func) { @@ -498,7 +561,11 @@ drive->waiting_for_dma = 1; if (drive->media != ide_disk) return 0; +#ifdef CONFIG_BLK_DEV_IDEDMA_TIMEOUT + ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL); /* issue cmd to drive */ +#else /* !CONFIG_BLK_DEV_IDEDMA_TIMEOUT */ ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, dma_timer_expiry); /* issue cmd to drive */ +#endif /* CONFIG_BLK_DEV_IDEDMA_TIMEOUT */ OUT_BYTE(reading ? WIN_READDMA : WIN_WRITEDMA, IDE_COMMAND_REG); case ide_dma_begin: /* Note that this is done *after* the cmd has @@ -514,7 +581,7 @@ dma_stat = inb(dma_base+2); /* get DMA status */ outb(dma_stat|6, dma_base+2); /* clear the INTR & ERROR bits */ ide_destroy_dmatable(drive); /* purge DMA mappings */ - return (dma_stat & 7) != 4; /* verify good DMA status */ + return (dma_stat & 7) != 4 ? (0x10 | dma_stat) : 0; /* verify good DMA status */ case ide_dma_test_irq: /* returns 1 if dma irq issued, 0 otherwise */ dma_stat = inb(dma_base+2); #if 0 /* do not set unless you know what you are doing */ @@ -530,6 +597,14 @@ case ide_dma_verbose: return report_drive_dmaing(drive); case ide_dma_timeout: + // FIXME: Many IDE chipsets do not permit command file register access + // FIXME: while the bus-master function is still active. + // FIXME: To prevent deadlock with those chipsets, we must be extremely + // FIXME: careful here (and in ide_intr() as well) to NOT access any + // FIXME: registers from the 0x1Fx/0x17x sets before terminating the + // FIXME: bus-master operation via the bus-master control reg. + // FIXME: Otherwise, chipset deadlock will occur, and some systems will + // FIXME: lock up completely!! #ifdef CONFIG_BLK_DEV_IDEDMA_TIMEOUT /* * Have to issue an abort and requeue the request @@ -537,6 +612,23 @@ * we have to clean up the mess, and here is as good * as any. Do it globally for all chipsets. */ + outb(0x00, dma_base); /* stop DMA */ + dma_stat = inb(dma_base+2); /* get DMA status */ + outb(dma_stat|6, dma_base+2); /* clear the INTR & ERROR bits */ + printk("%s: %s: Lets do it again!" \ + "stat = 0x%02x, dma_stat = 0x%02x\n", + drive->name, ide_dmafunc_verbose(func), + GET_STAT(), dma_stat); + + if (dma_stat & 0xF0) + return ide_dma_timeout_revovery(drive); + + printk("%s: %s: (restart_request) Lets do it again!" \ + "stat = 0x%02x, dma_stat = 0x%02x\n", + drive->name, ide_dmafunc_verbose(func), + GET_STAT(), dma_stat); + + return restart_request(drive); // BUG: return types do not match!! #endif /* CONFIG_BLK_DEV_IDEDMA_TIMEOUT */ case ide_dma_retune: case ide_dma_lostirq: @@ -620,6 +712,12 @@ unsigned long dma_base = 0; struct pci_dev *dev = hwif->pci_dev; +#ifdef CONFIG_BLK_DEV_IDEDMA_FORCED + int second_chance = 0; + +second_chance_to_dma: +#endif /* CONFIG_BLK_DEV_IDEDMA_FORCED */ + if (hwif->mate && hwif->mate->dma_base) { dma_base = hwif->mate->dma_base - (hwif->channel ? 0 : 8); } else { @@ -629,6 +727,26 @@ dma_base = 0; } } + +#ifdef CONFIG_BLK_DEV_IDEDMA_FORCED + if ((!dma_base) && (!second_chance)) { + unsigned long set_bmiba = 0; + second_chance++; + switch(dev->vendor) { + case PCI_VENDOR_ID_AL: + set_bmiba = DEFAULT_BMALIBA; break; + case PCI_VENDOR_ID_VIA: + set_bmiba = DEFAULT_BMCRBA; break; + case PCI_VENDOR_ID_INTEL: + set_bmiba = DEFAULT_BMIBA; break; + default: + return dma_base; + } + pci_write_config_dword(dev, 0x20, set_bmiba|1); + goto second_chance_to_dma; + } +#endif /* CONFIG_BLK_DEV_IDEDMA_FORCED */ + if (dma_base) { if (extra) /* PDC20246, PDC20262, HPT343, & HPT366 */ request_region(dma_base+16, extra, name); diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-floppy.c linux/drivers/ide/ide-floppy.c --- v2.4.8/linux/drivers/ide/ide-floppy.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/ide/ide-floppy.c Mon Aug 13 14:56:19 2001 @@ -1,5 +1,5 @@ /* - * linux/drivers/ide/ide-floppy.c Version 0.9 Jul 4, 1999 + * linux/drivers/ide/ide-floppy.c Version 0.9.sv Jan 6 2001 * * Copyright (C) 1996 - 1999 Gadi Oxman */ @@ -29,9 +29,29 @@ * Ver 0.9 Jul 4 99 Fix a bug which might have caused the number of * bytes requested on each interrupt to be zero. * Thanks to for pointing this out. + * Ver 0.9.sv Jan 6 01 Sam Varshavchik + * Implement low level formatting. Reimplemented + * IDEFLOPPY_CAPABILITIES_PAGE, since we need the srfp + * bit. My LS-120 drive barfs on + * IDEFLOPPY_CAPABILITIES_PAGE, but maybe it's just me. + * Compromise by not reporting a failure to get this + * mode page. Implemented four IOCTLs in order to + * implement formatting. IOCTls begin with 0x4600, + * 0x46 is 'F' as in Format. + * Ver 0.91 Dec 11 99 Added IOMEGA Clik! drive support by + * + * Ver 0.92 Oct 22 00 Paul Bristow became official maintainer for this + * driver. Included Powerbook internal zip kludge. + * Ver 0.93 Oct 24 00 Fixed bugs for Clik! drive + * no disk on insert and disk change now works + * Ver 0.94 Oct 27 00 Tidied up to remove strstr(Clik) everywhere + * Ver 0.95 Nov 7 00 Brought across to kernel 2.4 + * Ver 0.96 Jan 7 01 Actually in line with release version of 2.4.0 + * including set_bit patch from Rusty Russel + * Ver 0.97 Jul 22 01 Merge 0.91-0.96 onto 0.9.sv for ac series */ -#define IDEFLOPPY_VERSION "0.9" +#define IDEFLOPPY_VERSION "0.97" #include #include @@ -63,6 +83,10 @@ #define IDEFLOPPY_DEBUG_INFO 0 #define IDEFLOPPY_DEBUG_BUGS 1 +/* #define IDEFLOPPY_DEBUG(fmt, args...) printk(KERN_INFO fmt, ## args) */ +#define IDEFLOPPY_DEBUG( fmt, args... ) + + /* * Some drives require a longer irq timeout. */ @@ -228,6 +252,7 @@ * Last error information */ byte sense_key, asc, ascq; + int progress_indication; /* * Device information @@ -236,7 +261,7 @@ idefloppy_capacity_descriptor_t capacity; /* Last format capacity */ idefloppy_flexible_disk_page_t flexible_disk_page; /* Copy of the flexible disk page */ int wp; /* Write protect */ - + int srfp; /* Supports format progress report */ unsigned long flags; /* Status/Action flags */ } idefloppy_floppy_t; @@ -246,6 +271,9 @@ #define IDEFLOPPY_DRQ_INTERRUPT 0 /* DRQ interrupt device */ #define IDEFLOPPY_MEDIA_CHANGED 1 /* Media may have changed */ #define IDEFLOPPY_USE_READ12 2 /* Use READ12/WRITE12 or READ10/WRITE10 */ +#define IDEFLOPPY_FORMAT_IN_PROGRESS 3 /* Format in progress */ +#define IDEFLOPPY_CLIK_DRIVE 4 /* Avoid commands not supported in Clik drive */ + /* * ATAPI floppy drive packet commands @@ -276,6 +304,15 @@ #define MODE_SENSE_SAVED 0x03 /* + * IOCTLs used in low-level formatting. + */ + +#define IDEFLOPPY_IOCTL_FORMAT_SUPPORTED 0x4600 +#define IDEFLOPPY_IOCTL_FORMAT_GET_CAPACITY 0x4601 +#define IDEFLOPPY_IOCTL_FORMAT_START 0x4602 +#define IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS 0x4603 + +/* * Special requests for our block device strategy routine. */ #define IDEFLOPPY_FIRST_RQ 90 @@ -559,7 +596,7 @@ u8 asc; /* Additional Sense Code */ u8 ascq; /* Additional Sense Code Qualifier */ u8 replaceable_unit_code; /* Field Replaceable Unit Code */ - u8 reserved[3]; + u8 sksv[3]; u8 pad[2]; /* Padding to 20 bytes */ } idefloppy_request_sense_result_t; @@ -746,6 +783,8 @@ idefloppy_floppy_t *floppy = drive->driver_data; floppy->sense_key = result->sense_key; floppy->asc = result->asc; floppy->ascq = result->ascq; + floppy->progress_indication= result->sksv[0] & 0x80 ? + (unsigned short)get_unaligned((u16 *)(result->sksv+1)):0x10000; #if IDEFLOPPY_DEBUG_LOG if (floppy->failed_pc) printk (KERN_INFO "ide-floppy: pc = %x, sense key = %x, asc = %x, ascq = %x\n",floppy->failed_pc->c[0],result->sense_key,result->asc,result->ascq); @@ -954,7 +993,7 @@ return ide_do_reset (drive); } ide_set_handler (drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL); /* Set the interrupt routine */ - atapi_output_bytes (drive, floppy->pc->c, 12); /* Send the actual packet */ + atapi_output_bytes (drive, floppy->pc->c, 12); /* Send the actual packet */ return ide_started; } @@ -1062,6 +1101,22 @@ pc->request_transfer = 255; } +static void idefloppy_create_format_unit_cmd (idefloppy_pc_t *pc, int b, int l) +{ + idefloppy_init_pc (pc); + pc->c[0] = IDEFLOPPY_FORMAT_UNIT_CMD; + pc->c[1] = 0x17; + + memset(pc->buffer, 0, 12); + pc->buffer[1] = 0xA2; /* Format list header, byte 1: FOV/DCRT/IMM */ + pc->buffer[3] = 8; + + put_unaligned(htonl(b), (unsigned int *)(&pc->buffer[4])); + put_unaligned(htonl(l), (unsigned int *)(&pc->buffer[8])); + pc->buffer_size=12; + set_bit(PC_WRITING, &pc->flags); +} + /* * A mode sense command is used to "sense" floppy parameters. */ @@ -1235,6 +1290,25 @@ return 0; } +static int idefloppy_get_capability_page(ide_drive_t *drive) +{ + idefloppy_floppy_t *floppy = drive->driver_data; + idefloppy_pc_t pc; + idefloppy_mode_parameter_header_t *header; + idefloppy_capabilities_page_t *page; + + floppy->srfp=0; + idefloppy_create_mode_sense_cmd (&pc, IDEFLOPPY_CAPABILITIES_PAGE, + MODE_SENSE_CURRENT); + if (idefloppy_queue_pc_tail (drive,&pc)) { + return 1; + } + header = (idefloppy_mode_parameter_header_t *) pc.buffer; + page= (idefloppy_capabilities_page_t *)(header+1); + floppy->srfp=page->srfp; + return (0); +} + /* * Determine if a media is present in the floppy drive, and if so, * its LBA capacity. @@ -1260,37 +1334,217 @@ header = (idefloppy_capacity_header_t *) pc.buffer; descriptors = header->length / sizeof (idefloppy_capacity_descriptor_t); descriptor = (idefloppy_capacity_descriptor_t *) (header + 1); + for (i = 0; i < descriptors; i++, descriptor++) { - blocks = descriptor->blocks = ntohl (descriptor->blocks); - length = descriptor->length = ntohs (descriptor->length); - if (!i && descriptor->dc == CAPACITY_CURRENT) { - if (memcmp (descriptor, &floppy->capacity, sizeof (idefloppy_capacity_descriptor_t))) { - printk (KERN_INFO "%s: %dkB, %d blocks, %d sector size, %s \n", - drive->name, blocks * length / 1024, blocks, length, - drive->using_dma ? ", DMA":""); - } - floppy->capacity = *descriptor; - if (!length || length % 512) - printk (KERN_ERR "%s: %d bytes block size not supported\n", drive->name, length); - else { - floppy->blocks = blocks; - floppy->block_size = length; - if ((floppy->bs_factor = length / 512) != 1) - printk (KERN_NOTICE "%s: warning: non 512 bytes block size not fully supported\n", drive->name); - rc = 0; - } + blocks = descriptor->blocks = ntohl (descriptor->blocks); + length = descriptor->length = ntohs (descriptor->length); + + if (!i) + { + switch (descriptor->dc) { + case CAPACITY_UNFORMATTED: /* Clik! drive returns this instead of CAPACITY_CURRENT */ + if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) + break; /* If it is not a clik drive, break out (maintains previous driver behaviour) */ + case CAPACITY_CURRENT: /* Normal Zip/LS-120 disks */ + if (memcmp (descriptor, &floppy->capacity, sizeof (idefloppy_capacity_descriptor_t))) + printk (KERN_INFO "%s: %dkB, %d blocks, %d sector size\n", drive->name, blocks * length / 1024, blocks, length); + floppy->capacity = *descriptor; + if (!length || length % 512) + printk (KERN_NOTICE "%s: %d bytes block size not supported\n", drive->name, length); + else { + floppy->blocks = blocks; + floppy->block_size = length; + if ((floppy->bs_factor = length / 512) != 1) + printk (KERN_NOTICE "%s: warning: non 512 bytes block size not fully supported\n", drive->name); + rc = 0; + } + break; + case CAPACITY_NO_CARTRIDGE: + /* This is a KERN_ERR so it appears on screen for the user to see */ + printk (KERN_ERR "%s: No disk in drive\n", drive->name); + break; + case CAPACITY_INVALID: + printk (KERN_ERR "%s: Invalid capacity for disk in drive\n", drive->name); + break; } -#if IDEFLOPPY_DEBUG_INFO - if (!i) printk (KERN_INFO "Descriptor 0 Code: %d\n", descriptor->dc); - printk (KERN_INFO "Descriptor %d: %dkB, %d blocks, %d sector size\n", i, blocks * length / 1024, blocks, length); -#endif /* IDEFLOPPY_DEBUG_INFO */ + } + if (!i) { + IDEFLOPPY_DEBUG( "Descriptor 0 Code: %d\n", descriptor->dc); + } + IDEFLOPPY_DEBUG( "Descriptor %d: %dkB, %d blocks, %d sector size\n", i, blocks * length / 1024, blocks, length); } - (void) idefloppy_get_flexible_disk_page (drive); + + /* Clik! disk does not support get_flexible_disk_page */ + if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) + { + (void) idefloppy_get_flexible_disk_page (drive); + (void) idefloppy_get_capability_page (drive); + } + drive->part[0].nr_sects = floppy->blocks * floppy->bs_factor; return rc; } /* +** Obtain the list of formattable capacities. +** Very similar to idefloppy_get_capacity, except that we push the capacity +** descriptors to userland, instead of our own structures. +** +** Userland gives us the following structure: +** +** struct idefloppy_format_capacities { +** int nformats; +** struct { +** int nblocks; +** int blocksize; +** } formats[]; +** } ; +** +** userland initializes nformats to the number of allocated formats[] +** records. On exit we set nformats to the number of records we've +** actually initialized. +** +*/ + +static int idefloppy_get_format_capacities (ide_drive_t *drive, + struct inode *inode, + struct file *file, + int *arg) /* Cheater */ +{ + idefloppy_pc_t pc; + idefloppy_capacity_header_t *header; + idefloppy_capacity_descriptor_t *descriptor; + int i, descriptors, blocks, length; + int u_array_size; + int u_index; + int *argp; + + if (get_user(u_array_size, arg)) + return (-EFAULT); + + if (u_array_size <= 0) + return (-EINVAL); + + idefloppy_create_read_capacity_cmd (&pc); + if (idefloppy_queue_pc_tail (drive, &pc)) { + printk (KERN_ERR "ide-floppy: Can't get floppy parameters\n"); + return (-EIO); + } + header = (idefloppy_capacity_header_t *) pc.buffer; + descriptors = header->length / + sizeof (idefloppy_capacity_descriptor_t); + descriptor = (idefloppy_capacity_descriptor_t *) (header + 1); + + u_index=0; + argp=arg+1; + + /* + ** We always skip the first capacity descriptor. That's the + ** current capacity. We are interested in the remaining descriptors, + ** the formattable capacities. + */ + + for (i=0; i= u_array_size) + break; /* User-supplied buffer too small */ + if (i == 0) + continue; /* Skip the first descriptor */ + + blocks = ntohl (descriptor->blocks); + length = ntohs (descriptor->length); + + if (put_user(blocks, argp)) + return (-EFAULT); + ++argp; + + if (put_user(length, argp)) + return (-EFAULT); + ++argp; + + ++u_index; + } + + if (put_user(u_index, arg)) + return (-EFAULT); + return (0); +} + +/* +** Send ATAPI_FORMAT_UNIT to the drive. +** +** Userland gives us the following structure: +** +** struct idefloppy_format_command { +** int nblocks; +** int blocksize; +** } ; +*/ + +static int idefloppy_begin_format(ide_drive_t *drive, + struct inode *inode, + struct file *file, + int *arg) +{ + int blocks; + int length; + idefloppy_pc_t pc; + + if (get_user(blocks, arg) + || get_user(length, arg+1)) + { + return (-EFAULT); + } + + idefloppy_create_format_unit_cmd(&pc, blocks, length); + if (idefloppy_queue_pc_tail (drive, &pc)) + { + return (-EIO); + } + return (0); +} + +/* +** Get ATAPI_FORMAT_UNIT progress indication. +** +** Userland gives a pointer to an int. The int is set to a progresss +** indicator 0-65536, with 65536=100%. +** +** If the drive does not support format progress indication, we just return +** a 65536, screw it. +*/ + +static int idefloppy_get_format_progress(ide_drive_t *drive, + struct inode *inode, + struct file *file, + int *arg) +{ + idefloppy_floppy_t *floppy = drive->driver_data; + idefloppy_pc_t pc; + int progress_indication=0x10000; + + if (floppy->srfp) + { + idefloppy_create_request_sense_cmd(&pc); + if (idefloppy_queue_pc_tail (drive, &pc)) + { + return (-EIO); + } + + if (floppy->sense_key == 2 && floppy->asc == 4 && + floppy->ascq == 4) + { + progress_indication=floppy->progress_indication; + } + } + + if (put_user(progress_indication, arg)) + return (-EFAULT); + + return (0); +} + +/* * Our special ide-floppy ioctl's. * * Currently there aren't any ioctl's. @@ -1299,15 +1553,72 @@ unsigned int cmd, unsigned long arg) { idefloppy_pc_t pc; + idefloppy_floppy_t *floppy = drive->driver_data; + int prevent = (arg) ? 1 : 0; - if (cmd == CDROMEJECT) { + switch (cmd) { + case CDROMEJECT: + prevent = 0; + /* fall through */ + case CDROM_LOCKDOOR: if (drive->usage > 1) return -EBUSY; - idefloppy_create_prevent_cmd (&pc, 0); - (void) idefloppy_queue_pc_tail (drive, &pc); - idefloppy_create_start_stop_cmd (&pc, 2); - (void) idefloppy_queue_pc_tail (drive, &pc); + + /* The IOMEGA Clik! Drive doesn't support this command - no room for an eject mechanism */ + if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) { + idefloppy_create_prevent_cmd (&pc, prevent); + (void) idefloppy_queue_pc_tail (drive, &pc); + } + if (cmd == CDROMEJECT) { + idefloppy_create_start_stop_cmd (&pc, 2); + (void) idefloppy_queue_pc_tail (drive, &pc); + } return 0; + case IDEFLOPPY_IOCTL_FORMAT_SUPPORTED: + return (0); + case IDEFLOPPY_IOCTL_FORMAT_GET_CAPACITY: + return (idefloppy_get_format_capacities(drive, inode, file, + (int *)arg)); + case IDEFLOPPY_IOCTL_FORMAT_START: + + if (!(file->f_mode & 2)) + return (-EPERM); + + { + idefloppy_floppy_t *floppy = drive->driver_data; + + set_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags); + + if (drive->usage > 1) + { + /* Don't format if someone is using the disk */ + + clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, + &floppy->flags); + return -EBUSY; + } + else + { + int rc=idefloppy_begin_format(drive, inode, + file, + (int *)arg); + + if (rc) + clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, + &floppy->flags); + return (rc); + + /* + ** Note, the bit will be cleared when the device is + ** closed. This is the cleanest way to handle the + ** situation where the drive does not support + ** format progress reporting. + */ + } + } + case IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS: + return (idefloppy_get_format_progress(drive, inode, file, + (int *)arg)); } return -EIO; } @@ -1326,26 +1637,41 @@ MOD_INC_USE_COUNT; if (drive->usage == 1) { + + clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags); + /* Just in case */ + idefloppy_create_test_unit_ready_cmd(&pc); if (idefloppy_queue_pc_tail(drive, &pc)) { idefloppy_create_start_stop_cmd (&pc, 1); (void) idefloppy_queue_pc_tail (drive, &pc); } + if (idefloppy_get_capacity (drive)) { drive->usage--; MOD_DEC_USE_COUNT; return -EIO; } + if (floppy->wp && (filp->f_mode & 2)) { drive->usage--; MOD_DEC_USE_COUNT; return -EROFS; } set_bit (IDEFLOPPY_MEDIA_CHANGED, &floppy->flags); - idefloppy_create_prevent_cmd (&pc, 1); - (void) idefloppy_queue_pc_tail (drive, &pc); + /* IOMEGA Clik! drives do not support lock/unlock commands */ + if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) { + idefloppy_create_prevent_cmd (&pc, 1); + (void) idefloppy_queue_pc_tail (drive, &pc); + } check_disk_change(inode->i_rdev); } + else if (test_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags)) + { + drive->usage--; + MOD_DEC_USE_COUNT; + return -EBUSY; + } return 0; } @@ -1358,9 +1684,17 @@ #endif /* IDEFLOPPY_DEBUG_LOG */ if (!drive->usage) { + idefloppy_floppy_t *floppy = drive->driver_data; + invalidate_buffers (inode->i_rdev); - idefloppy_create_prevent_cmd (&pc, 0); - (void) idefloppy_queue_pc_tail (drive, &pc); + + /* IOMEGA Clik! drives do not support lock/unlock commands */ + if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) { + idefloppy_create_prevent_cmd (&pc, 0); + (void) idefloppy_queue_pc_tail (drive, &pc); + } + + clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags); } MOD_DEC_USE_COUNT; } @@ -1560,6 +1894,19 @@ max_sectors[major][minor + i] = 64; } + /* + * Guess what? The IOMEGA Clik! drive also needs the + * above fix. It makes nasty clicking noises without + * it, so please don't remove this. + */ + if (strcmp(drive->id->model, "IOMEGA Clik! 40 CZ ATAPI") == 0) + { + for (i = 0; i < 1 << PARTN_BITS; i++) + max_sectors[major][minor + i] = 64; + set_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags); + } + + (void) idefloppy_get_capacity (drive); idefloppy_add_settings(drive); for (i = 0; i < MAX_DRIVES; ++i) { @@ -1597,28 +1944,34 @@ #endif /* CONFIG_PROC_FS */ +static int idefloppy_reinit (ide_drive_t *drive) +{ + return 0; +} + /* * IDE subdriver functions, registered with ide.c */ static ide_driver_t idefloppy_driver = { - "ide-floppy", /* name */ - IDEFLOPPY_VERSION, /* version */ - ide_floppy, /* media */ - 0, /* busy */ - 1, /* supports_dma */ - 0, /* supports_dsc_overlap */ - idefloppy_cleanup, /* cleanup */ - idefloppy_do_request, /* do_request */ - idefloppy_end_request, /* end_request */ - idefloppy_ioctl, /* ioctl */ - idefloppy_open, /* open */ - idefloppy_release, /* release */ - idefloppy_media_change, /* media_change */ - idefloppy_revalidate, /* media_change */ - NULL, /* pre_reset */ - idefloppy_capacity, /* capacity */ - NULL, /* special */ - idefloppy_proc /* proc */ + name: "ide-floppy", + version: IDEFLOPPY_VERSION, + media: ide_floppy, + busy: 0, + supports_dma: 1, + supports_dsc_overlap: 0, + cleanup: idefloppy_cleanup, + do_request: idefloppy_do_request, + end_request: idefloppy_end_request, + ioctl: idefloppy_ioctl, + open: idefloppy_open, + release: idefloppy_release, + media_change: idefloppy_media_change, + revalidate: idefloppy_revalidate, + pre_reset: NULL, + capacity: idefloppy_capacity, + special: NULL, + proc: idefloppy_proc, + driver_reinit: idefloppy_reinit, }; int idefloppy_init (void); @@ -1629,6 +1982,26 @@ NULL }; +MODULE_DESCRIPTION("ATAPI FLOPPY Driver"); + +static void __exit idefloppy_exit (void) +{ + ide_drive_t *drive; + int failed = 0; + + while ((drive = ide_scan_devices (ide_floppy, idefloppy_driver.name, &idefloppy_driver, failed)) != NULL) { + if (idefloppy_cleanup (drive)) { + printk ("%s: cleanup_module() called while still busy\n", drive->name); + failed++; + } + /* We must remove proc entries defined in this module. + Otherwise we oops while accessing these entries */ + if (drive->proc) + ide_remove_proc_entries(drive->proc, idefloppy_proc); + } + ide_unregister_module(&idefloppy_module); +} + /* * idefloppy_init will register the driver for each floppy. */ @@ -1638,6 +2011,7 @@ idefloppy_floppy_t *floppy; int failed = 0; + printk("ide-floppy driver " IDEFLOPPY_VERSION "\n"); MOD_INC_USE_COUNT; while ((drive = ide_scan_devices (ide_floppy, idefloppy_driver.name, NULL, failed++)) != NULL) { if (!idefloppy_identify_device (drive, drive->id)) { @@ -1665,27 +2039,5 @@ return 0; } -#ifdef MODULE -int init_module (void) -{ - return idefloppy_init (); -} - -void cleanup_module (void) -{ - ide_drive_t *drive; - int failed = 0; - - while ((drive = ide_scan_devices (ide_floppy, idefloppy_driver.name, &idefloppy_driver, failed)) != NULL) { - if (idefloppy_cleanup (drive)) { - printk ("%s: cleanup_module() called while still busy\n", drive->name); - failed++; - } - /* We must remove proc entries defined in this module. - Otherwise we oops while accessing these entries */ - if (drive->proc) - ide_remove_proc_entries(drive->proc, idefloppy_proc); - } - ide_unregister_module(&idefloppy_module); -} -#endif /* MODULE */ +module_init(idefloppy_init); +module_exit(idefloppy_exit); diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-pci.c linux/drivers/ide/ide-pci.c --- v2.4.8/linux/drivers/ide/ide-pci.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/ide/ide-pci.c Mon Aug 13 14:56:19 2001 @@ -27,6 +27,7 @@ #define DEVID_PIIXa ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_0}) #define DEVID_PIIXb ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_1}) +#define DEVID_MPIIX ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX}) #define DEVID_PIIX3 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_1}) #define DEVID_PIIX4 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB}) #define DEVID_PIIX4E ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_1}) @@ -42,6 +43,8 @@ #define DEVID_PDC20262 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20262}) #define DEVID_PDC20265 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20265}) #define DEVID_PDC20267 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20267}) +#define DEVID_PDC20268 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268}) +#define DEVID_PDC20268R ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268R}) #define DEVID_RZ1000 ((ide_pci_devid_t){PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000}) #define DEVID_RZ1001 ((ide_pci_devid_t){PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1001}) #define DEVID_SAMURAI ((ide_pci_devid_t){PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_SAMURAI_IDE}) @@ -71,10 +74,14 @@ #define DEVID_CY82C693 ((ide_pci_devid_t){PCI_VENDOR_ID_CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693}) #define DEVID_HINT ((ide_pci_devid_t){0x3388, 0x8013}) #define DEVID_CS5530 ((ide_pci_devid_t){PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE}) -#define DEVID_AMD7403 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_COBRA_7403}) +#define DEVID_AMD7401 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_COBRA_7401}) #define DEVID_AMD7409 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7409}) +#define DEVID_AMD7411 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7411}) +#define DEVID_PDCADMA ((ide_pci_devid_t){PCI_VENDOR_ID_PDC, PCI_DEVICE_ID_PDC_1841}) #define DEVID_SLC90E66 ((ide_pci_devid_t){PCI_VENDOR_ID_EFAR, PCI_DEVICE_ID_EFAR_SLC90E66_1}) #define DEVID_OSB4 ((ide_pci_devid_t){PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE}) +#define DEVID_CSB5 ((ide_pci_devid_t){PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE}) +#define DEVID_ITE8172G ((ide_pci_devid_t){PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_IT8172G}) #define IDE_IGNORE ((void *)-1) @@ -110,20 +117,20 @@ #define DMA_ALI15X3 NULL #endif -#ifdef CONFIG_BLK_DEV_AMD7409 -extern unsigned int pci_init_amd7409(struct pci_dev *, const char *); -extern unsigned int ata66_amd7409(ide_hwif_t *); -extern void ide_init_amd7409(ide_hwif_t *); -extern void ide_dmacapable_amd7409(ide_hwif_t *, unsigned long); -#define PCI_AMD7409 &pci_init_amd7409 -#define ATA66_AMD7409 &ata66_amd7409 -#define INIT_AMD7409 &ide_init_amd7409 -#define DMA_AMD7409 &ide_dmacapable_amd7409 -#else -#define PCI_AMD7409 NULL -#define ATA66_AMD7409 NULL -#define INIT_AMD7409 NULL -#define DMA_AMD7409 NULL +#ifdef CONFIG_BLK_DEV_AMD74XX +extern unsigned int pci_init_amd74xx(struct pci_dev *, const char *); +extern unsigned int ata66_amd74xx(ide_hwif_t *); +extern void ide_init_amd74xx(ide_hwif_t *); +extern void ide_dmacapable_amd74xx(ide_hwif_t *, unsigned long); +#define PCI_AMD74XX &pci_init_amd74xx +#define ATA66_AMD74XX &ata66_amd74xx +#define INIT_AMD74XX &ide_init_amd74xx +#define DMA_AMD74XX &ide_dmacapable_amd74xx +#else +#define PCI_AMD74XX NULL +#define ATA66_AMD74XX NULL +#define INIT_AMD74XX NULL +#define DMA_AMD74XX NULL #endif #ifdef CONFIG_BLK_DEV_CMD64X @@ -186,8 +193,8 @@ #define INIT_HPT366 &ide_init_hpt366 #define DMA_HPT366 &ide_dmacapable_hpt366 #else -static byte hpt363_shared_irq = 0; -static byte hpt363_shared_pin = 0; +static byte hpt363_shared_irq; +static byte hpt363_shared_pin; #define PCI_HPT366 NULL #define ATA66_HPT366 NULL #define INIT_HPT366 NULL @@ -208,17 +215,20 @@ #define INIT_OPTI621 NULL #endif -#ifdef CONFIG_BLK_DEV_OSB4 -extern unsigned int pci_init_osb4(struct pci_dev *, const char *); -extern unsigned int ata66_osb4(ide_hwif_t *); -extern void ide_init_osb4(ide_hwif_t *); -#define PCI_OSB4 &pci_init_osb4 -#define ATA66_OSB4 &ata66_osb4 -#define INIT_OSB4 &ide_init_osb4 -#else -#define PCI_OSB4 NULL -#define ATA66_OSB4 NULL -#define INIT_OSB4 NULL +#ifdef CONFIG_BLK_DEV_PDC_ADMA +extern unsigned int pci_init_pdcadma(struct pci_dev *, const char *); +extern unsigned int ata66_pdcadma(ide_hwif_t *); +extern void ide_init_pdcadma(ide_hwif_t *); +extern void ide_dmacapable_pdcadma(ide_hwif_t *, unsigned long); +#define PCI_PDCADMA &pci_init_pdcadma +#define ATA66_PDCADMA &ata66_pdcadma +#define INIT_PDCADMA &ide_init_pdcadma +#define DMA_PDCADMA &ide_dmacapable_pdcadma +#else +#define PCI_PDCADMA IDE_IGNORE +#define ATA66_PDCADMA IDE_IGNORE +#define INIT_PDCADMA IDE_IGNORE +#define DMA_PDCADMA IDE_IGNORE #endif #ifdef CONFIG_BLK_DEV_PDC202XX @@ -247,6 +257,18 @@ #define INIT_PIIX NULL #endif +#ifdef CONFIG_BLK_DEV_IT8172 +extern unsigned int pci_init_it8172(struct pci_dev *, const char *); +extern unsigned int ata66_it8172(ide_hwif_t *); +extern void ide_init_it8172(ide_hwif_t *); +#define PCI_IT8172 &pci_init_it8172 +#define INIT_IT8172 &ide_init_it8172 +#else +#define PCI_IT8172 NULL +#define ATA66_IT8172 NULL +#define INIT_IT8172 NULL +#endif + #ifdef CONFIG_BLK_DEV_RZ1000 extern void ide_init_rz1000(ide_hwif_t *); #define INIT_RZ1000 &ide_init_rz1000 @@ -256,6 +278,19 @@ #define INIT_SAMURAI NULL +#ifdef CONFIG_BLK_DEV_SVWKS +extern unsigned int pci_init_svwks(struct pci_dev *, const char *); +extern unsigned int ata66_svwks(ide_hwif_t *); +extern void ide_init_svwks(ide_hwif_t *); +#define PCI_SVWKS &pci_init_svwks +#define ATA66_SVWKS &ata66_svwks +#define INIT_SVWKS &ide_init_svwks +#else +#define PCI_SVWKS NULL +#define ATA66_SVWKS NULL +#define INIT_SVWKS NULL +#endif + #ifdef CONFIG_BLK_DEV_SIS5513 extern unsigned int pci_init_sis5513(struct pci_dev *, const char *); extern unsigned int ata66_sis5513(ide_hwif_t *); @@ -339,6 +374,7 @@ static ide_pci_device_t ide_pci_chipsets[] __initdata = { {DEVID_PIIXa, "PIIX", NULL, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, {DEVID_PIIXb, "PIIX", NULL, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, + {DEVID_MPIIX, "MPIIX", NULL, NULL, INIT_PIIX, NULL, {{0x6D,0x80,0x80}, {0x6F,0x80,0x80}}, ON_BOARD, 0 }, {DEVID_PIIX3, "PIIX3", PCI_PIIX, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, {DEVID_PIIX4, "PIIX4", PCI_PIIX, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, {DEVID_PIIX4E, "PIIX4", PCI_PIIX, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, @@ -350,10 +386,22 @@ {DEVID_PIIX4U4, "PIIX4", PCI_PIIX, ATA66_PIIX, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, {DEVID_VIA_IDE, "VIA_IDE", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, {DEVID_VP_IDE, "VP_IDE", PCI_VIA82CXXX, ATA66_VIA82CXXX,INIT_VIA82CXXX, DMA_VIA82CXXX, {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, ON_BOARD, 0 }, +#ifdef CONFIG_PDC202XX_FORCE + {DEVID_PDC20246,"PDC20246", PCI_PDC202XX, NULL, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 16 }, + {DEVID_PDC20262,"PDC20262", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 48 }, + {DEVID_PDC20265,"PDC20265", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 48 }, + {DEVID_PDC20267,"PDC20267", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 48 }, +#else /* !CONFIG_PDC202XX_FORCE */ {DEVID_PDC20246,"PDC20246", PCI_PDC202XX, NULL, INIT_PDC202XX, NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, OFF_BOARD, 16 }, {DEVID_PDC20262,"PDC20262", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, OFF_BOARD, 48 }, {DEVID_PDC20265,"PDC20265", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, OFF_BOARD, 48 }, {DEVID_PDC20267,"PDC20267", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, OFF_BOARD, 48 }, +#endif + {DEVID_PDC20268,"PDC20268", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 16 }, + /* Promise used a different PCI ident for the raid card apparently to try and + prevent Linux detecting it and using our own raid code. We want to detect + it for the ataraid drivers, so we have to list both here.. */ + {DEVID_PDC20268R,"PDC20268", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 16 }, {DEVID_RZ1000, "RZ1000", NULL, NULL, INIT_RZ1000, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, {DEVID_RZ1001, "RZ1001", NULL, NULL, INIT_RZ1000, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, {DEVID_SAMURAI, "SAMURAI", NULL, NULL, INIT_SAMURAI, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, @@ -382,10 +430,14 @@ {DEVID_CY82C693,"CY82C693", PCI_CY82C693, NULL, INIT_CY82C693, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, {DEVID_HINT, "HINT_IDE", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, {DEVID_CS5530, "CS5530", PCI_CS5530, NULL, INIT_CS5530, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, - {DEVID_AMD7403, "AMD7403", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, - {DEVID_AMD7409, "AMD7409", PCI_AMD7409, ATA66_AMD7409, INIT_AMD7409, DMA_AMD7409, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0 }, + {DEVID_AMD7401, "AMD7401", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, + {DEVID_AMD7409, "AMD7409", PCI_AMD74XX, ATA66_AMD74XX, INIT_AMD74XX, DMA_AMD74XX, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0 }, + {DEVID_AMD7411, "AMD7411", PCI_AMD74XX, ATA66_AMD74XX, INIT_AMD74XX, DMA_AMD74XX, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0 }, + {DEVID_PDCADMA, "PDCADMA", PCI_PDCADMA, ATA66_PDCADMA, INIT_PDCADMA, DMA_PDCADMA, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 0 }, {DEVID_SLC90E66,"SLC90E66", PCI_SLC90E66, ATA66_SLC90E66, INIT_SLC90E66, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, - {DEVID_OSB4, "ServerWorks OSB4", PCI_OSB4, ATA66_OSB4, INIT_OSB4, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, + {DEVID_OSB4, "ServerWorks OSB4", PCI_SVWKS, ATA66_SVWKS, INIT_SVWKS, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, + {DEVID_CSB5, "ServerWorks CSB5", PCI_SVWKS, ATA66_SVWKS, INIT_SVWKS, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, + {DEVID_ITE8172G,"IT8172G", PCI_IT8172, NULL, INIT_IT8172, NULL, {{0x00,0x00,0x00}, {0x40,0x00,0x01}}, ON_BOARD, 0 }, {IDE_PCI_DEVID_NULL, "PCI_IDE", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }}; /* @@ -401,6 +453,7 @@ case PCI_DEVICE_ID_PROMISE_20262: case PCI_DEVICE_ID_PROMISE_20265: case PCI_DEVICE_ID_PROMISE_20267: + case PCI_DEVICE_ID_PROMISE_20268: case PCI_DEVICE_ID_ARTOP_ATP850UF: case PCI_DEVICE_ID_ARTOP_ATP860: case PCI_DEVICE_ID_ARTOP_ATP860R: @@ -528,9 +581,11 @@ byte tmp = 0; ide_hwif_t *hwif, *mate = NULL; unsigned int class_rev; + static int secondpdc = 0; #ifdef CONFIG_IDEDMA_AUTO - autodma = 1; + if (!noautodma) + autodma = 1; #endif pci_enable_device(dev); @@ -628,8 +683,18 @@ for (port = 0; port <= 1; ++port) { unsigned long base = 0, ctl = 0; ide_pci_enablebit_t *e = &(d->enablebits[port]); + + /* + * If this is a Promise FakeRaid controller, the 2nd controller will be marked as + * disabled while it is actually there and enabled by the bios for raid purposes. + * Skip the normal "is it enabled" test for those. + */ + if ((IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20265)) && (secondpdc++==1) && (port==1) ) + goto controller_ok; + if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) || (tmp & e->mask) != e->val)) continue; /* port not enabled */ +controller_ok: if (IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT366) && (port) && (class_rev < 0x03)) return; if ((dev->class >> 8) != PCI_CLASS_STORAGE_IDE || (dev->class & (port ? 4 : 1)) != 0) { @@ -679,6 +744,9 @@ hwif->irq = hwif->channel ? 15 : 14; goto bypass_umc_dma; } + if (IDE_PCI_DEVID_EQ(d->devid, DEVID_MPIIX)) + goto bypass_piix_dma; + if (hwif->udma_four) { printk("%s: ATA-66/100 forced bit set (WARNING)!!\n", d->name); } else { @@ -688,7 +756,9 @@ if (IDE_PCI_DEVID_EQ(d->devid, DEVID_SIS5513) || IDE_PCI_DEVID_EQ(d->devid, DEVID_AEC6260) || IDE_PCI_DEVID_EQ(d->devid, DEVID_PIIX4NX) || - IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT34X)) + IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT34X) || + IDE_PCI_DEVID_EQ(d->devid, DEVID_VIA_IDE) || + IDE_PCI_DEVID_EQ(d->devid, DEVID_VP_IDE)) autodma = 0; if (autodma) hwif->autodma = 1; @@ -696,6 +766,7 @@ IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20262) || IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20265) || IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20267) || + IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20268) || IDE_PCI_DEVID_EQ(d->devid, DEVID_AEC6210) || IDE_PCI_DEVID_EQ(d->devid, DEVID_AEC6260) || IDE_PCI_DEVID_EQ(d->devid, DEVID_AEC6260R) || @@ -732,6 +803,7 @@ } } #endif /* CONFIG_BLK_DEV_IDEDMA */ +bypass_piix_dma: bypass_umc_dma: if (d->init_hwif) /* Call chipset-specific routine for each enabled hwif */ d->init_hwif(hwif); @@ -779,6 +851,12 @@ if (hpt363_shared_pin && hpt363_shared_irq) { d->bootable = ON_BOARD; printk("%s: onboard version of chipset, pin1=%d pin2=%d\n", d->name, pin1, pin2); +#if 0 + /* I forgot why I did this once, but it fixed something. */ + pci_write_config_byte(dev2, PCI_INTERRUPT_PIN, dev->irq); + printk("PCI: %s: Fixing interrupt %d pin %d to ZERO \n", d->name, dev2->irq, pin2); + pci_write_config_byte(dev2, PCI_INTERRUPT_LINE, 0); +#endif } break; } @@ -810,6 +888,8 @@ return; else if (IDE_PCI_DEVID_EQ(d->devid, DEVID_CY82C693) && (!(PCI_FUNC(dev->devfn) & 1) || !((dev->class >> 8) == PCI_CLASS_STORAGE_IDE))) return; /* CY82C693 is more than only a IDE controller */ + else if (IDE_PCI_DEVID_EQ(d->devid, DEVID_ITE8172G) && (!(PCI_FUNC(dev->devfn) & 1) || !((dev->class >> 8) == PCI_CLASS_STORAGE_IDE))) + return; /* IT8172G is also more than only an IDE controller */ else if (IDE_PCI_DEVID_EQ(d->devid, DEVID_UM8886A) && !(PCI_FUNC(dev->devfn) & 1)) return; /* UM8886A/BF pair */ else if (IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT366)) diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-probe.c linux/drivers/ide/ide-probe.c --- v2.4.8/linux/drivers/ide/ide-probe.c Sun Mar 18 09:25:02 2001 +++ linux/drivers/ide/ide-probe.c Mon Aug 13 15:00:37 2001 @@ -681,9 +681,9 @@ */ if (!match || match->irq != hwif->irq) { #ifdef CONFIG_IDEPCI_SHARE_IRQ - int sa = (hwif->chipset == ide_pci) ? SA_SHIRQ : SA_INTERRUPT; + int sa = IDE_CHIPSET_IS_PCI(hwif->chipset) ? SA_SHIRQ : SA_INTERRUPT; #else /* !CONFIG_IDEPCI_SHARE_IRQ */ - int sa = (hwif->chipset == ide_pci) ? SA_INTERRUPT|SA_SHIRQ : SA_INTERRUPT; + int sa = IDE_CHIPSET_IS_PCI(hwif->chipset) ? SA_INTERRUPT|SA_SHIRQ : SA_INTERRUPT; #endif /* CONFIG_IDEPCI_SHARE_IRQ */ if (ide_request_irq(hwif->irq, &ide_intr, sa, hwif->name, hwgroup)) { if (!match) diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-proc.c linux/drivers/ide/ide-proc.c --- v2.4.8/linux/drivers/ide/ide-proc.c Thu Oct 26 14:11:39 2000 +++ linux/drivers/ide/ide-proc.c Mon Aug 13 14:56:19 2001 @@ -81,10 +81,10 @@ extern byte ali_proc; int (*ali_display_info)(char *, char **, off_t, int) = NULL; #endif /* CONFIG_BLK_DEV_ALI15X3 */ -#ifdef CONFIG_BLK_DEV_AMD7409 -extern byte amd7409_proc; -int (*amd7409_display_info)(char *, char **, off_t, int) = NULL; -#endif /* CONFIG_BLK_DEV_AMD7409 */ +#ifdef CONFIG_BLK_DEV_AMD74XX +extern byte amd74xx_proc; +int (*amd74xx_display_info)(char *, char **, off_t, int) = NULL; +#endif /* CONFIG_BLK_DEV_AMD74XX */ #ifdef CONFIG_BLK_DEV_CMD64X extern byte cmd64x_proc; int (*cmd64x_display_info)(char *, char **, off_t, int) = NULL; @@ -101,10 +101,6 @@ extern byte hpt366_proc; int (*hpt366_display_info)(char *, char **, off_t, int) = NULL; #endif /* CONFIG_BLK_DEV_HPT366 */ -#ifdef CONFIG_BLK_DEV_OSB4 -extern byte osb4_proc; -int (*osb4_display_info)(char *, char **, off_t, int) = NULL; -#endif /* CONFIG_BLK_DEV_OSB4 */ #ifdef CONFIG_BLK_DEV_PDC202XX extern byte pdc202xx_proc; int (*pdc202xx_display_info)(char *, char **, off_t, int) = NULL; @@ -113,6 +109,10 @@ extern byte piix_proc; int (*piix_display_info)(char *, char **, off_t, int) = NULL; #endif /* CONFIG_BLK_DEV_PIIX */ +#ifdef CONFIG_BLK_DEV_SVWKS +extern byte svwks_proc; +int (*svwks_display_info)(char *, char **, off_t, int) = NULL; +#endif /* CONFIG_BLK_DEV_SVWKS */ #ifdef CONFIG_BLK_DEV_SIS5513 extern byte sis_proc; int (*sis_display_info)(char *, char **, off_t, int) = NULL; @@ -817,10 +817,10 @@ if ((ali_display_info) && (ali_proc)) create_proc_info_entry("ali", 0, proc_ide_root, ali_display_info); #endif /* CONFIG_BLK_DEV_ALI15X3 */ -#ifdef CONFIG_BLK_DEV_AMD7409 - if ((amd7409_display_info) && (amd7409_proc)) - create_proc_info_entry("amd7409", 0, proc_ide_root, amd7409_display_info); -#endif /* CONFIG_BLK_DEV_AMD7409 */ +#ifdef CONFIG_BLK_DEV_AMD74XX + if ((amd74xx_display_info) && (amd74xx_proc)) + create_proc_info_entry("amd74xx", 0, proc_ide_root, amd74xx_display_info); +#endif /* CONFIG_BLK_DEV_AMD74XX */ #ifdef CONFIG_BLK_DEV_CMD64X if ((cmd64x_display_info) && (cmd64x_proc)) create_proc_info_entry("cmd64x", 0, proc_ide_root, cmd64x_display_info); @@ -837,10 +837,10 @@ if ((hpt366_display_info) && (hpt366_proc)) create_proc_info_entry("hpt366", 0, proc_ide_root, hpt366_display_info); #endif /* CONFIG_BLK_DEV_HPT366 */ -#ifdef CONFIG_BLK_DEV_OSB4 - if ((osb4_display_info) && (osb4_proc)) - create_proc_info_entry("osb4", 0, proc_ide_root, osb4_display_info); -#endif /* CONFIG_BLK_DEV_OSB4 */ +#ifdef CONFIG_BLK_DEV_SVWKS + if ((svwks_display_info) && (svwks_proc)) + create_proc_info_entry("svwks", 0, proc_ide_root, svwks_display_info); +#endif /* CONFIG_BLK_DEV_SVWKS */ #ifdef CONFIG_BLK_DEV_PDC202XX if ((pdc202xx_display_info) && (pdc202xx_proc)) create_proc_info_entry("pdc202xx", 0, proc_ide_root, pdc202xx_display_info); @@ -877,10 +877,10 @@ if ((ali_display_info) && (ali_proc)) remove_proc_entry("ide/ali",0); #endif /* CONFIG_BLK_DEV_ALI15X3 */ -#ifdef CONFIG_BLK_DEV_AMD7409 - if ((amd7409_display_info) && (amd7409_proc)) - remove_proc_entry("ide/amd7409",0); -#endif /* CONFIG_BLK_DEV_AMD7409 */ +#ifdef CONFIG_BLK_DEV_AMD74XX + if ((amd74xx_display_info) && (amd74xx_proc)) + remove_proc_entry("ide/amd74xx",0); +#endif /* CONFIG_BLK_DEV_AMD74XX */ #ifdef CONFIG_BLK_DEV_CMD64X if ((cmd64x_display_info) && (cmd64x_proc)) remove_proc_entry("ide/cmd64x",0); @@ -897,10 +897,6 @@ if ((hpt366_display_info) && (hpt366_proc)) remove_proc_entry("ide/hpt366",0); #endif /* CONFIG_BLK_DEV_HPT366 */ -#ifdef CONFIG_BLK_DEV_OSB4 - if ((osb4_display_info) && (osb4_proc)) - remove_proc_entry("ide/osb4",0); -#endif /* CONFIG_BLK_DEV_OSB4 */ #ifdef CONFIG_BLK_DEV_PDC202XX if ((pdc202xx_display_info) && (pdc202xx_proc)) remove_proc_entry("ide/pdc202xx",0); @@ -909,6 +905,10 @@ if ((piix_display_info) && (piix_proc)) remove_proc_entry("ide/piix",0); #endif /* CONFIG_BLK_DEV_PIIX */ +#ifdef CONFIG_BLK_DEV_SVWKS + if ((svwks_display_info) && (svwks_proc)) + remove_proc_entry("ide/svwks",0); +#endif /* CONFIG_BLK_DEV_SVWKS */ #ifdef CONFIG_BLK_DEV_SIS5513 if ((sis_display_info) && (sis_proc)) remove_proc_entry("ide/sis", 0); diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide-tape.c linux/drivers/ide/ide-tape.c --- v2.4.8/linux/drivers/ide/ide-tape.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/ide/ide-tape.c Mon Aug 13 14:56:19 2001 @@ -4099,9 +4099,14 @@ } if (rq_ptr->errors == IDETAPE_ERROR_EOD) return 0; - else if (rq_ptr->errors == IDETAPE_ERROR_FILEMARK) + if (rq_ptr->errors == IDETAPE_ERROR_FILEMARK) { + idetape_switch_buffers (tape, tape->first_stage); set_bit (IDETAPE_FILEMARK, &tape->flags); - else { +#if USE_IOTRACE + IO_trace(IO_IDETAPE_FIFO, tape->pipeline_head, tape->buffer_head, tape->tape_head, tape->minor); +#endif + calculate_speeds(drive); + } else { idetape_switch_buffers (tape, tape->first_stage); if (rq_ptr->errors == IDETAPE_ERROR_GENERAL) { #if ONSTREAM_DEBUG @@ -6127,24 +6132,33 @@ #endif +static int idetape_reinit (ide_drive_t *drive) +{ + return 0; +} + /* * IDE subdriver functions, registered with ide.c */ static ide_driver_t idetape_driver = { - name: "ide-tape", - version: IDETAPE_VERSION, - media: ide_tape, - busy: 1, - supports_dma: 1, - supports_dsc_overlap: 1, - cleanup: idetape_cleanup, - do_request: idetape_do_request, - end_request: idetape_end_request, - ioctl: idetape_blkdev_ioctl, - open: idetape_blkdev_open, - release: idetape_blkdev_release, - pre_reset: idetape_pre_reset, - proc: idetape_proc, + name: "ide-tape", + version: IDETAPE_VERSION, + media: ide_tape, + busy: 1, + supports_dma: 1, + supports_dsc_overlap: 1, + cleanup: idetape_cleanup, + do_request: idetape_do_request, + end_request: idetape_end_request, + ioctl: idetape_blkdev_ioctl, + open: idetape_blkdev_open, + release: idetape_blkdev_release, + media_change: NULL, + revalidate: NULL, + pre_reset: idetape_pre_reset, + capacity: NULL, + proc: idetape_proc, + driver_reinit: idetape_reinit, }; int idetape_init (void); @@ -6167,6 +6181,21 @@ release: idetape_chrdev_release, }; +MODULE_DESCRIPTION("ATAPI Streaming TAPE Driver"); + +static void __exit idetape_exit (void) +{ + ide_drive_t *drive; + int minor; + + for (minor = 0; minor < MAX_HWIFS * MAX_DRIVES; minor++) { + drive = idetape_chrdevs[minor].drive; + if (drive != NULL && idetape_cleanup (drive)) + printk (KERN_ERR "ide-tape: %s: cleanup_module() called while still busy\n", drive->name); + } + ide_unregister_module(&idetape_module); +} + /* * idetape_init will register the driver for each tape. */ @@ -6252,22 +6281,5 @@ return 0; } -#ifdef MODULE -int init_module (void) -{ - return idetape_init (); -} - -void cleanup_module (void) -{ - ide_drive_t *drive; - int minor; - - for (minor = 0; minor < MAX_HWIFS * MAX_DRIVES; minor++) { - drive = idetape_chrdevs[minor].drive; - if (drive != NULL && idetape_cleanup (drive)) - printk (KERN_ERR "ide-tape: %s: cleanup_module() called while still busy\n", drive->name); - } - ide_unregister_module(&idetape_module); -} -#endif /* MODULE */ +module_init(idetape_init); +module_exit(idetape_exit); diff -u --recursive --new-file v2.4.8/linux/drivers/ide/ide.c linux/drivers/ide/ide.c --- v2.4.8/linux/drivers/ide/ide.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/ide/ide.c Mon Aug 13 14:56:19 2001 @@ -162,6 +162,9 @@ #include #endif /* CONFIG_KMOD */ +/* default maximum number of failures */ +#define IDE_DEFAULT_MAX_FAILURES 1 + static const byte ide_hwif_to_major[] = { IDE0_MAJOR, IDE1_MAJOR, IDE2_MAJOR, IDE3_MAJOR, IDE4_MAJOR, IDE5_MAJOR, IDE6_MAJOR, IDE7_MAJOR, IDE8_MAJOR, IDE9_MAJOR }; static int idebus_parameter; /* holds the "idebus=" parameter */ @@ -249,6 +252,7 @@ hwif->name[1] = 'd'; hwif->name[2] = 'e'; hwif->name[3] = '0' + index; + hwif->bus_state = BUSSTATE_ON; for (unit = 0; unit < MAX_DRIVES; ++unit) { ide_drive_t *drive = &hwif->drives[unit]; @@ -263,6 +267,7 @@ drive->name[0] = 'h'; drive->name[1] = 'd'; drive->name[2] = 'a' + (index * MAX_DRIVES) + unit; + drive->max_failures = IDE_DEFAULT_MAX_FAILURES; init_waitqueue_head(&drive->wqueue); } } @@ -377,7 +382,19 @@ */ void ide_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount) { - byte io_32bit = drive->io_32bit; + byte io_32bit; + + /* first check if this controller has defined a special function + * for handling polled ide transfers + */ + + if(HWIF(drive)->ideproc) { + HWIF(drive)->ideproc(ideproc_ide_input_data, + drive, buffer, wcount); + return; + } + + io_32bit = drive->io_32bit; if (io_32bit) { #if SUPPORT_VLB_SYNC @@ -410,7 +427,15 @@ */ void ide_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount) { - byte io_32bit = drive->io_32bit; + byte io_32bit; + + if(HWIF(drive)->ideproc) { + HWIF(drive)->ideproc(ideproc_ide_output_data, + drive, buffer, wcount); + return; + } + + io_32bit = drive->io_32bit; if (io_32bit) { #if SUPPORT_VLB_SYNC @@ -447,6 +472,12 @@ */ void atapi_input_bytes (ide_drive_t *drive, void *buffer, unsigned int bytecount) { + if(HWIF(drive)->ideproc) { + HWIF(drive)->ideproc(ideproc_atapi_input_bytes, + drive, buffer, bytecount); + return; + } + ++bytecount; #if defined(CONFIG_ATARI) || defined(CONFIG_Q40) if (MACH_IS_ATARI || MACH_IS_Q40) { @@ -462,6 +493,12 @@ void atapi_output_bytes (ide_drive_t *drive, void *buffer, unsigned int bytecount) { + if(HWIF(drive)->ideproc) { + HWIF(drive)->ideproc(ideproc_atapi_output_bytes, + drive, buffer, bytecount); + return; + } + ++bytecount; #if defined(CONFIG_ATARI) || defined(CONFIG_Q40) if (MACH_IS_ATARI || MACH_IS_Q40) { @@ -512,10 +549,20 @@ { struct request *rq; unsigned long flags; + ide_drive_t *drive = hwgroup->drive; spin_lock_irqsave(&io_request_lock, flags); rq = hwgroup->rq; + /* + * decide whether to reenable DMA -- 3 is a random magic for now, + * if we DMA timeout more than 3 times, just stay in PIO + */ + if (drive->state == DMA_PIO_RETRY && drive->retry_pio <= 3) { + drive->state = 0; + hwgroup->hwif->dmaproc(ide_dma_on, drive); + } + if (!end_that_request_first(rq, uptodate, hwgroup->drive->name)) { add_blkdev_randomness(MAJOR(rq->rq_dev)); blkdev_dequeue_request(rq); @@ -637,11 +684,14 @@ return ide_started; /* continue polling */ } printk("%s: reset timed-out, status=0x%02x\n", hwif->name, tmp); + drive->failures++; } else { printk("%s: reset: ", hwif->name); - if ((tmp = GET_ERR()) == 1) + if ((tmp = GET_ERR()) == 1) { printk("success\n"); - else { + drive->failures = 0; + } else { + drive->failures++; #if FANCY_STATUS_DUMPS printk("master: "); switch (tmp & 0x7f) { @@ -1049,6 +1099,12 @@ int i; unsigned long flags; + /* bail early if we've exceeded max_failures */ + if (drive->max_failures && (drive->failures > drive->max_failures)) { + *startstop = ide_stopped; + return 1; + } + udelay(1); /* spec allows drive 400ns to assert "BUSY" */ if ((stat = GET_STAT()) & BUSY_STAT) { __save_flags(flags); /* local CPU only */ @@ -1145,6 +1201,11 @@ #ifdef DEBUG printk("%s: start_request: current=0x%08lx\n", hwif->name, (unsigned long) rq); #endif + /* bail early if we've exceeded max_failures */ + if (drive->max_failures && (drive->failures > drive->max_failures)) { + goto kill_rq; + } + if (unit >= MAX_DRIVES) { printk("%s: bad device number: %s\n", hwif->name, kdevname(rq->rq_dev)); goto kill_rq; @@ -1200,6 +1261,19 @@ return ide_stopped; } +ide_startstop_t restart_request (ide_drive_t *drive) +{ + ide_hwgroup_t *hwgroup = HWGROUP(drive); + unsigned long flags; + + spin_lock_irqsave(&io_request_lock, flags); + hwgroup->handler = NULL; + del_timer(&hwgroup->timer); + spin_unlock_irqrestore(&io_request_lock, flags); + + return start_request(drive); +} + /* * ide_stall_queue() can be used by a drive to give excess bandwidth back * to the hwgroup by sleeping for timeout jiffies. @@ -1388,6 +1462,49 @@ } /* + * un-busy the hwgroup etc, and clear any pending DMA status. we want to + * retry the current request in pio mode instead of risking tossing it + * all away + */ +void ide_dma_timeout_retry(ide_drive_t *drive) +{ + ide_hwif_t *hwif = HWIF(drive); + struct request *rq; + + /* + * end current dma transaction + */ + (void) hwif->dmaproc(ide_dma_end, drive); + + /* + * complain a little, later we might remove some of this verbosity + */ + printk("%s: timeout waiting for DMA\n", drive->name); + (void) hwif->dmaproc(ide_dma_timeout, drive); + + /* + * disable dma for now, but remember that we did so because of + * a timeout -- we'll reenable after we finish this next request + * (or rather the first chunk of it) in pio. + */ + drive->retry_pio++; + drive->state = DMA_PIO_RETRY; + (void) hwif->dmaproc(ide_dma_off_quietly, drive); + + /* + * un-busy drive etc (hwgroup->busy is cleared on return) and + * make sure request is sane + */ + rq = HWGROUP(drive)->rq; + HWGROUP(drive)->rq = NULL; + + rq->errors = 0; + rq->sector = rq->bh->b_rsector; + rq->current_nr_sectors = rq->bh->b_size >> 9; + rq->buffer = rq->bh->b_data; +} + +/* * ide_timer_expiry() is our timeout function for all drive operations. * But note that it can also be invoked as a result of a "sleep" operation * triggered by the mod_timer() call in ide_do_request. @@ -1460,11 +1577,10 @@ startstop = handler(drive); } else { if (drive->waiting_for_dma) { - (void) hwgroup->hwif->dmaproc(ide_dma_end, drive); - printk("%s: timeout waiting for DMA\n", drive->name); - (void) hwgroup->hwif->dmaproc(ide_dma_timeout, drive); - } - startstop = ide_error(drive, "irq timeout", GET_STAT()); + startstop = ide_stopped; + ide_dma_timeout_retry(drive); + } else + startstop = ide_error(drive, "irq timeout", GET_STAT()); } set_recovery_timer(hwif); drive->service_time = jiffies - drive->service_start; @@ -2089,7 +2205,10 @@ hwif->maskproc = old_hwif.maskproc; hwif->quirkproc = old_hwif.quirkproc; hwif->rwproc = old_hwif.rwproc; + hwif->ideproc = old_hwif.ideproc; hwif->dmaproc = old_hwif.dmaproc; + hwif->busproc = old_hwif.busproc; + hwif->bus_state = old_hwif.bus_state; hwif->dma_base = old_hwif.dma_base; hwif->dma_extra = old_hwif.dma_extra; hwif->config_data = old_hwif.config_data; @@ -2671,6 +2790,20 @@ case BLKELVSET: return blk_ioctl(inode->i_rdev, cmd, arg); + case HDIO_GET_BUSSTATE: + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + if (put_user(HWIF(drive)->bus_state, (long *)arg)) + return -EFAULT; + return 0; + + case HDIO_SET_BUSSTATE: + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + if (HWIF(drive)->busproc) + HWIF(drive)->busproc(HWIF(drive), arg); + return 0; + default: if (drive->driver != NULL) return DRIVER(drive)->ioctl(drive, inode, file, cmd, arg); @@ -3196,6 +3329,12 @@ } #endif /* CONFIG_PCI */ +#ifdef CONFIG_ETRAX_IDE + { + extern void init_e100_ide(void); + init_e100_ide(); + } +#endif /* CONFIG_ETRAX_IDE */ #ifdef CONFIG_BLK_DEV_CMD640 { extern void ide_probe_for_cmd640x(void); @@ -3373,6 +3512,13 @@ return ide_stopped; } +static int default_driver_reinit (ide_drive_t *drive) +{ + printk(KERN_ERR "%s: does not support hotswap of device class !\n", drive->name); + + return 0; +} + static void setup_driver_defaults (ide_drive_t *drive) { ide_driver_t *d = drive->driver; @@ -3387,6 +3533,7 @@ if (d->pre_reset == NULL) d->pre_reset = default_pre_reset; if (d->capacity == NULL) d->capacity = default_capacity; if (d->special == NULL) d->special = default_special; + if (d->driver_reinit == NULL) d->driver_reinit = default_driver_reinit; } ide_drive_t *ide_scan_devices (byte media, const char *name, ide_driver_t *driver, int n) @@ -3536,6 +3683,7 @@ EXPORT_SYMBOL(ide_fixstring); EXPORT_SYMBOL(ide_wait_stat); EXPORT_SYMBOL(ide_do_reset); +EXPORT_SYMBOL(restart_request); EXPORT_SYMBOL(ide_init_drive_cmd); EXPORT_SYMBOL(ide_do_drive_cmd); EXPORT_SYMBOL(ide_end_drive_cmd); diff -u --recursive --new-file v2.4.8/linux/drivers/ide/it8172.c linux/drivers/ide/it8172.c --- v2.4.8/linux/drivers/ide/it8172.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/ide/it8172.c Mon Aug 13 14:56:19 2001 @@ -0,0 +1,283 @@ +/* + * + * BRIEF MODULE DESCRIPTION + * IT8172 IDE controller support + * + * Copyright 2000 MontaVista Software Inc. + * Author: MontaVista Software, Inc. + * stevel@mvista.com or support@mvista.com + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "ide_modes.h" + +/* + * Prototypes + */ +static void it8172_tune_drive (ide_drive_t *drive, byte pio); +#if defined(CONFIG_BLK_DEV_IDEDMA) && defined(CONFIG_IT8172_TUNING) +static byte it8172_dma_2_pio (byte xfer_rate); +static int it8172_tune_chipset (ide_drive_t *drive, byte speed); +static int it8172_config_drive_for_dma (ide_drive_t *drive); +static int it8172_dmaproc(ide_dma_action_t func, ide_drive_t *drive); +#endif +unsigned int __init pci_init_it8172 (struct pci_dev *dev, const char *name); +void __init ide_init_it8172 (ide_hwif_t *hwif); + + +/* + * Based on settings done by AMI BIOS + * (might be usefull if drive is not registered in CMOS for any reason). + */ +static void it8172_tune_drive (ide_drive_t *drive, byte pio) +{ + unsigned long flags; + u16 master_data; + byte slave_data; + int is_slave = (&HWIF(drive)->drives[1] == drive); + int master_port = HWIF(drive)->index ? 0x42 : 0x40; + int slave_port = 0x44; + /* ISP RTC */ + byte timings[][2] = { { 0, 0 }, + { 0, 0 }, + { 1, 0 }, + { 2, 1 }, + { 2, 3 }, }; + + pio = ide_get_best_pio_mode(drive, pio, 5, NULL); + pci_read_config_word(HWIF(drive)->pci_dev, master_port, &master_data); + if (is_slave) { + master_data = master_data | 0x4000; + if (pio > 1) + /* enable PPE, IE and TIME */ + master_data = master_data | 0x0070; + pci_read_config_byte(HWIF(drive)->pci_dev, slave_port, &slave_data); + slave_data = slave_data & (HWIF(drive)->index ? 0x0f : 0xf0); + slave_data = slave_data | + ((timings[pio][0] << 2) | (timings[pio][1] + << (HWIF(drive)->index ? 4 : 0))); + } else { + master_data = master_data & 0xccf8; + if (pio > 1) + /* enable PPE, IE and TIME */ + master_data = master_data | 0x0007; + master_data = master_data | (timings[pio][0] << 12) | + (timings[pio][1] << 8); + } + save_flags(flags); + cli(); + pci_write_config_word(HWIF(drive)->pci_dev, master_port, master_data); + if (is_slave) + pci_write_config_byte(HWIF(drive)->pci_dev, slave_port, slave_data); + restore_flags(flags); +} + +#if defined(CONFIG_BLK_DEV_IDEDMA) && defined(CONFIG_IT8172_TUNING) +/* + * + */ +static byte it8172_dma_2_pio (byte xfer_rate) +{ + switch(xfer_rate) { + case XFER_UDMA_5: + case XFER_UDMA_4: + case XFER_UDMA_3: + case XFER_UDMA_2: + case XFER_UDMA_1: + case XFER_UDMA_0: + case XFER_MW_DMA_2: + case XFER_PIO_4: + return 4; + case XFER_MW_DMA_1: + case XFER_PIO_3: + return 3; + case XFER_SW_DMA_2: + case XFER_PIO_2: + return 2; + case XFER_MW_DMA_0: + case XFER_SW_DMA_1: + case XFER_SW_DMA_0: + case XFER_PIO_1: + case XFER_PIO_0: + case XFER_PIO_SLOW: + default: + return 0; + } +} + +static int it8172_tune_chipset (ide_drive_t *drive, byte speed) +{ + ide_hwif_t *hwif = HWIF(drive); + struct pci_dev *dev = hwif->pci_dev; + int a_speed = 3 << (drive->dn * 4); + int u_flag = 1 << drive->dn; + int u_speed = 0; + int err = 0; + byte reg48, reg4a; + + pci_read_config_byte(dev, 0x48, ®48); + pci_read_config_byte(dev, 0x4a, ®4a); + + switch(speed) { + case XFER_UDMA_4: + case XFER_UDMA_2: u_speed = 2 << (drive->dn * 4); break; + case XFER_UDMA_5: + case XFER_UDMA_3: + case XFER_UDMA_1: u_speed = 1 << (drive->dn * 4); break; + case XFER_UDMA_0: u_speed = 0 << (drive->dn * 4); break; + case XFER_MW_DMA_2: + case XFER_MW_DMA_1: + case XFER_SW_DMA_2: break; + default: return -1; + } + + if (speed >= XFER_UDMA_0) { + if (!(reg48 & u_flag)) + pci_write_config_byte(dev, 0x48, reg48|u_flag); + if (!(reg4a & u_speed)) { + pci_write_config_byte(dev, 0x4a, reg4a & ~a_speed); + pci_write_config_byte(dev, 0x4a, reg4a|u_speed); + } + } + if (speed < XFER_UDMA_0) { + if (reg48 & u_flag) + pci_write_config_byte(dev, 0x48, reg48 & ~u_flag); + if (reg4a & a_speed) + pci_write_config_byte(dev, 0x4a, reg4a & ~a_speed); + } + + it8172_tune_drive(drive, it8172_dma_2_pio(speed)); + +#if IT8172_DEBUG + printk("%s: %s drive%d\n", drive->name, ide_xfer_verbose(speed), drive->dn); +#endif + if (!drive->init_speed) + drive->init_speed = speed; + err = ide_config_drive_speed(drive, speed); + drive->current_speed = speed; + return err; +} + +static int it8172_config_drive_for_dma (ide_drive_t *drive) +{ + struct hd_driveid *id = drive->id; + byte speed; + + if (id->dma_ultra & 0x0010) { + speed = XFER_UDMA_2; + } else if (id->dma_ultra & 0x0008) { + speed = XFER_UDMA_1; + } else if (id->dma_ultra & 0x0004) { + speed = XFER_UDMA_2; + } else if (id->dma_ultra & 0x0002) { + speed = XFER_UDMA_1; + } else if (id->dma_ultra & 0x0001) { + speed = XFER_UDMA_0; + } else if (id->dma_mword & 0x0004) { + speed = XFER_MW_DMA_2; + } else if (id->dma_mword & 0x0002) { + speed = XFER_MW_DMA_1; + } else if (id->dma_1word & 0x0004) { + speed = XFER_SW_DMA_2; + } else { + speed = XFER_PIO_0 + ide_get_best_pio_mode(drive, 255, 5, NULL); + } + + (void) it8172_tune_chipset(drive, speed); + + return ((int)((id->dma_ultra >> 11) & 7) ? ide_dma_on : + ((id->dma_ultra >> 8) & 7) ? ide_dma_on : + ((id->dma_mword >> 8) & 7) ? ide_dma_on : + ((id->dma_1word >> 8) & 7) ? ide_dma_on : + ide_dma_off_quietly); +} + +static int it8172_dmaproc(ide_dma_action_t func, ide_drive_t *drive) +{ + switch (func) { + case ide_dma_check: + return ide_dmaproc((ide_dma_action_t)it8172_config_drive_for_dma(drive), + drive); + default : + break; + } + /* Other cases are done by generic IDE-DMA code. */ + return ide_dmaproc(func, drive); +} +#endif /* defined(CONFIG_BLK_DEV_IDEDMA) && (CONFIG_IT8172_TUNING) */ + +unsigned int __init pci_init_it8172 (struct pci_dev *dev, const char *name) +{ + unsigned char progif; + + /* + * Place both IDE interfaces into PCI "native" mode + */ + (void)pci_read_config_byte(dev, PCI_CLASS_PROG, &progif); + (void)pci_write_config_byte(dev, PCI_CLASS_PROG, progif | 0x05); + + return IT8172_IDE_IRQ; +} + + +void __init ide_init_it8172 (ide_hwif_t *hwif) +{ + struct pci_dev* dev = hwif->pci_dev; + unsigned long cmdBase, ctrlBase; + + hwif->tuneproc = &it8172_tune_drive; + hwif->drives[0].autotune = 1; + hwif->drives[1].autotune = 1; + + if (!hwif->dma_base) + return; + +#ifndef CONFIG_BLK_DEV_IDEDMA + hwif->autodma = 0; +#else /* CONFIG_BLK_DEV_IDEDMA */ +#ifdef CONFIG_IT8172_TUNING + hwif->autodma = 1; + hwif->dmaproc = &it8172_dmaproc; + hwif->speedproc = &it8172_tune_chipset; +#endif /* CONFIG_IT8172_TUNING */ +#endif /* !CONFIG_BLK_DEV_IDEDMA */ + + cmdBase = dev->resource[0].start; + ctrlBase = dev->resource[1].start; + + ide_init_hwif_ports(&hwif->hw, cmdBase, ctrlBase | 2, NULL); + memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports)); + hwif->noprobe = 0; +} diff -u --recursive --new-file v2.4.8/linux/drivers/ide/osb4.c linux/drivers/ide/osb4.c --- v2.4.8/linux/drivers/ide/osb4.c Tue May 1 16:05:00 2001 +++ linux/drivers/ide/osb4.c Wed Dec 31 16:00:00 1969 @@ -1,459 +0,0 @@ -/* - * linux/drivers/block/osb4.c Version 0.2 17 Oct 2000 - * - * Copyright (C) 2000 Cobalt Networks, Inc. - * May be copied or modified under the terms of the GNU General Public License - * - * interface borrowed from alim15x3.c: - * Copyright (C) 1998-2000 Michel Aubry, Maintainer - * Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer - * - * Copyright (C) 1998-2000 Andre Hedrick - * - * IDE support for the ServerWorks OSB4 IDE chipset - * - * here's the default lspci: - * - * 00:0f.1 IDE interface: ServerWorks: Unknown device 0211 (prog-if 8a [Master SecP PriP]) - * Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- - * Status: Cap- 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "ide_modes.h" - -#define OSB4_DEBUG_DRIVE_INFO 0 - -#define DISPLAY_OSB4_TIMINGS - -#if defined(DISPLAY_OSB4_TIMINGS) && defined(CONFIG_PROC_FS) -#include -#include - -static struct pci_dev *bmide_dev; - -static int osb4_get_info(char *, char **, off_t, int); -extern int (*osb4_display_info)(char *, char **, off_t, int); /* ide-proc.c */ -extern char *ide_media_verbose(ide_drive_t *); - -static int osb4_get_info (char *buffer, char **addr, off_t offset, int count) -{ - char *p = buffer; - u32 bibma = pci_resource_start(bmide_dev, 4); - u16 reg56; - u8 c0 = 0, c1 = 0, reg54; - - pci_read_config_byte(bmide_dev, 0x54, ®54); - pci_read_config_word(bmide_dev, 0x56, ®56); - - /* - * at that point bibma+0x2 et bibma+0xa are byte registers - * to investigate: - */ - c0 = inb_p((unsigned short)bibma + 0x02); - c1 = inb_p((unsigned short)bibma + 0x0a); - - p += sprintf(p, "\n ServerWorks OSB4 Chipset.\n"); - p += sprintf(p, "--------------- Primary Channel ---------------- Secondary Channel -------------\n"); - p += sprintf(p, " %sabled %sabled\n", - (c0&0x80) ? "dis" : " en", - (c1&0x80) ? "dis" : " en"); - p += sprintf(p, "--------------- drive0 --------- drive1 -------- drive0 ---------- drive1 ------\n"); - p += sprintf(p, "DMA enabled: %s %s %s %s\n", - (c0&0x20) ? "yes" : "no ", - (c0&0x40) ? "yes" : "no ", - (c1&0x20) ? "yes" : "no ", - (c1&0x40) ? "yes" : "no " ); - p += sprintf(p, "UDMA enabled: %s %s %s %s\n", - (reg54 & 0x01) ? "yes" : "no ", - (reg54 & 0x02) ? "yes" : "no ", - (reg54 & 0x04) ? "yes" : "no ", - (reg54 & 0x08) ? "yes" : "no " ); - p += sprintf(p, "UDMA enabled: %s %s %s %s\n", - (reg56 & 0x0002) ? "2" : ((reg56 & 0x0001) ? "1" : - ((reg56 & 0x000f) ? "X" : "0")), - (reg56 & 0x0020) ? "2" : ((reg56 & 0x0010) ? "1" : - ((reg56 & 0x00f0) ? "X" : "0")), - (reg56 & 0x0200) ? "2" : ((reg56 & 0x0100) ? "1" : - ((reg56 & 0x0f00) ? "X" : "0")), - (reg56 & 0x2000) ? "2" : ((reg56 & 0x1000) ? "1" : - ((reg56 & 0xf000) ? "X" : "0"))); - return p-buffer; /* => must be less than 4k! */ -} -#endif /* defined(DISPLAY_OSB4_TIMINGS) && defined(CONFIG_PROC_FS) */ - -static byte osb4_revision = 0; - -byte osb4_proc = 0; - -extern char *ide_xfer_verbose (byte xfer_rate); - -static struct pci_dev *isa_dev; - -static int osb4_tune_chipset (ide_drive_t *drive, byte speed) -{ - byte udma_modes[] = { 0x00, 0x01, 0x02 }; - byte dma_modes[] = { 0x77, 0x21, 0x20 }; - byte pio_modes[] = { 0x5d, 0x47, 0x34, 0x22, 0x20 }; - - ide_hwif_t *hwif = HWIF(drive); - struct pci_dev *dev = hwif->pci_dev; - byte unit = (drive->select.b.unit & 0x01); -#ifdef CONFIG_BLK_DEV_IDEDMA - unsigned long dma_base = hwif->dma_base; -#endif /* CONFIG_BLK_DEV_IDEDMA */ - int err; - - byte drive_pci = 0x00; - byte drive_pci2 = 0x00; - byte drive_pci3 = hwif->channel ? 0x57 : 0x56; - - byte ultra_enable = 0x00; - byte ultra_timing = 0x00; - byte dma_timing = 0x00; - byte pio_timing = 0x00; - - byte pio = ide_get_best_pio_mode(drive, 255, 5, NULL); - - switch (drive->dn) { - case 0: drive_pci = 0x41; drive_pci2 = 0x45; break; - case 1: drive_pci = 0x40; drive_pci2 = 0x44; break; - case 2: drive_pci = 0x43; drive_pci2 = 0x47; break; - case 3: drive_pci = 0x42; drive_pci2 = 0x46; break; - default: - return -1; - } - - pci_read_config_byte(dev, drive_pci, &pio_timing); - pci_read_config_byte(dev, drive_pci2, &dma_timing); - pci_read_config_byte(dev, drive_pci3, &ultra_timing); - pci_read_config_byte(dev, 0x54, &ultra_enable); - -#ifdef DEBUG - printk("%s: UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x ", - drive->name, ultra_timing, dma_timing, pio_timing); -#endif - - pio_timing &= ~0xFF; - dma_timing &= ~0xFF; - ultra_timing &= ~(0x0F << (4*unit)); - ultra_enable &= ~(0x01 << drive->dn); - - switch(speed) { - case XFER_PIO_4: - case XFER_PIO_3: - case XFER_PIO_2: - case XFER_PIO_1: - case XFER_PIO_0: - pio_timing |= pio_modes[speed - XFER_PIO_0]; - break; -#ifdef CONFIG_BLK_DEV_IDEDMA - case XFER_MW_DMA_2: - case XFER_MW_DMA_1: - case XFER_MW_DMA_0: - pio_timing |= pio_modes[pio]; - dma_timing |= dma_modes[speed - XFER_MW_DMA_0]; - break; - -// case XFER_UDMA_5: -// case XFER_UDMA_4: -// case XFER_UDMA_3: - case XFER_UDMA_2: - case XFER_UDMA_1: - case XFER_UDMA_0: - pio_timing |= pio_modes[pio]; - dma_timing |= dma_modes[2]; - ultra_timing |= ((udma_modes[speed - XFER_UDMA_0]) << (4*unit)); - ultra_enable |= (0x01 << drive->dn); -#endif - default: - break; - } - -#ifdef DEBUG - printk("%s: UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x ", - drive->name, ultra_timing, dma_timing, pio_timing); -#endif - -#if OSB4_DEBUG_DRIVE_INFO - printk("%s: %s drive%d\n", drive->name, ide_xfer_verbose(speed), drive->dn); -#endif /* OSB4_DEBUG_DRIVE_INFO */ - - if (!drive->init_speed) - drive->init_speed = speed; - - pci_write_config_byte(dev, drive_pci, pio_timing); -#ifdef CONFIG_BLK_DEV_IDEDMA - pci_write_config_byte(dev, drive_pci2, dma_timing); - pci_write_config_byte(dev, drive_pci3, ultra_timing); - pci_write_config_byte(dev, 0x54, ultra_enable); - - if (speed > XFER_PIO_4) { - outb(inb(dma_base+2)|(1<<(5+unit)), dma_base+2); - } else { - outb(inb(dma_base+2) & ~(1<<(5+unit)), dma_base+2); - } -#endif /* CONFIG_BLK_DEV_IDEDMA */ - - err = ide_config_drive_speed(drive, speed); - drive->current_speed = speed; - return err; -} - -static void config_chipset_for_pio (ide_drive_t *drive) -{ - unsigned short eide_pio_timing[6] = {960, 480, 240, 180, 120, 90}; - unsigned short xfer_pio = drive->id->eide_pio_modes; - byte timing, speed, pio; - - pio = ide_get_best_pio_mode(drive, 255, 5, NULL); - - if (xfer_pio> 4) - xfer_pio = 0; - - if (drive->id->eide_pio_iordy > 0) { - for (xfer_pio = 5; - xfer_pio>0 && - drive->id->eide_pio_iordy>eide_pio_timing[xfer_pio]; - xfer_pio--); - } else { - xfer_pio = (drive->id->eide_pio_modes & 4) ? 0x05 : - (drive->id->eide_pio_modes & 2) ? 0x04 : - (drive->id->eide_pio_modes & 1) ? 0x03 : - (drive->id->tPIO & 2) ? 0x02 : - (drive->id->tPIO & 1) ? 0x01 : xfer_pio; - } - - timing = (xfer_pio >= pio) ? xfer_pio : pio; - - switch(timing) { - case 4: speed = XFER_PIO_4;break; - case 3: speed = XFER_PIO_3;break; - case 2: speed = XFER_PIO_2;break; - case 1: speed = XFER_PIO_1;break; - default: - speed = (!drive->id->tPIO) ? XFER_PIO_0 : XFER_PIO_SLOW; - break; - } - (void) osb4_tune_chipset(drive, speed); - drive->current_speed = speed; -} - -static void osb4_tune_drive (ide_drive_t *drive, byte pio) -{ - byte speed; - switch(pio) { - case 4: speed = XFER_PIO_4;break; - case 3: speed = XFER_PIO_3;break; - case 2: speed = XFER_PIO_2;break; - case 1: speed = XFER_PIO_1;break; - default: speed = XFER_PIO_0;break; - } - (void) osb4_tune_chipset(drive, speed); -} - -#ifdef CONFIG_BLK_DEV_IDEDMA -static int config_chipset_for_dma (ide_drive_t *drive) -{ - struct hd_driveid *id = drive->id; - byte speed; - -#if 0 - byte udma_66 = eighty_ninty_three(drive); - /* need specs to figure out if osb4 is capable of ata/66/100 */ - int ultra100 = 0; - int ultra66 = 0; - - if ((id->dma_ultra & 0x0020) && (udma_66) && (ultra100)) { - speed = XFER_UDMA_5; - } else if (id->dma_ultra & 0x0010) { - speed = ((udma_66) && (ultra66)) ? XFER_UDMA_4 : XFER_UDMA_2; - } else if (id->dma_ultra & 0x0008) { - speed = ((udma_66) && (ultra66)) ? XFER_UDMA_3 : XFER_UDMA_1; - } else if (id->dma_ultra & 0x0004) { -#else - if (id->dma_ultra & 0x0004) { -#endif - speed = XFER_UDMA_2; - } else if (id->dma_ultra & 0x0002) { - speed = XFER_UDMA_1; - } else if (id->dma_ultra & 0x0001) { - speed = XFER_UDMA_0; - } else if (id->dma_mword & 0x0004) { - speed = XFER_MW_DMA_2; - } else if (id->dma_mword & 0x0002) { - speed = XFER_MW_DMA_1; - } else if (id->dma_1word & 0x0004) { - speed = XFER_SW_DMA_2; - } else { - speed = XFER_PIO_0 + ide_get_best_pio_mode(drive, 255, 5, NULL); - } - - (void) osb4_tune_chipset(drive, speed); - - return ((int) ((id->dma_ultra >> 11) & 7) ? ide_dma_on : - ((id->dma_ultra >> 8) & 7) ? ide_dma_on : - ((id->dma_mword >> 8) & 7) ? ide_dma_on : - ((id->dma_1word >> 8) & 7) ? ide_dma_on : - ide_dma_off_quietly); -} - -static int config_drive_xfer_rate (ide_drive_t *drive) -{ - struct hd_driveid *id = drive->id; - ide_dma_action_t dma_func = ide_dma_on; - - if (id && (id->capability & 1) && HWIF(drive)->autodma) { - /* Consult the list of known "bad" drives */ - if (ide_dmaproc(ide_dma_bad_drive, drive)) { - dma_func = ide_dma_off; - goto fast_ata_pio; - } - dma_func = ide_dma_off_quietly; - if (id->field_valid & 4) { - if (id->dma_ultra & 0x002F) { - /* Force if Capable UltraDMA */ - dma_func = config_chipset_for_dma(drive); - if ((id->field_valid & 2) && - (dma_func != ide_dma_on)) - goto try_dma_modes; - } - } else if (id->field_valid & 2) { -try_dma_modes: - if ((id->dma_mword & 0x0007) || - (id->dma_1word & 0x007)) { - /* Force if Capable regular DMA modes */ - dma_func = config_chipset_for_dma(drive); - if (dma_func != ide_dma_on) - goto no_dma_set; - } - } else if (ide_dmaproc(ide_dma_good_drive, drive)) { - if (id->eide_dma_time > 150) { - goto no_dma_set; - } - /* Consult the list of known "good" drives */ - dma_func = config_chipset_for_dma(drive); - if (dma_func != ide_dma_on) - goto no_dma_set; - } else { - goto fast_ata_pio; - } - } else if ((id->capability & 8) || (id->field_valid & 2)) { -fast_ata_pio: - dma_func = ide_dma_off_quietly; -no_dma_set: - config_chipset_for_pio(drive); - } - return HWIF(drive)->dmaproc(dma_func, drive); -} - -static int osb4_dmaproc(ide_dma_action_t func, ide_drive_t *drive) -{ - switch (func) { - case ide_dma_check: - return config_drive_xfer_rate(drive); - default : - break; - } - /* Other cases are done by generic IDE-DMA code. */ - return ide_dmaproc(func, drive); -} -#endif /* CONFIG_BLK_DEV_IDEDMA */ - -unsigned int __init pci_init_osb4 (struct pci_dev *dev, const char *name) -{ - unsigned int reg64; - - pci_read_config_byte(dev, PCI_REVISION_ID, &osb4_revision); - - isa_dev = pci_find_device(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4, NULL); - - pci_read_config_dword(isa_dev, 0x64, ®64); -#ifdef DEBUG - printk("%s: reg64 == 0x%08x\n", name, reg64); -#endif - -// reg64 &= ~0x0000A000; -//#ifdef CONFIG_SMP -// reg64 |= 0x00008000; -//#endif - /* Assume the APIC was set up properly by the BIOS for now . If it - wasnt we need to do a fix up _way_ earlier. Bits 15,10,3 control - APIC enable, routing and decode */ - - reg64 &= ~0x00002000; - pci_write_config_dword(isa_dev, 0x64, reg64); - - pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x40); - -#if defined(DISPLAY_OSB4_TIMINGS) && defined(CONFIG_PROC_FS) - if (!osb4_proc) { - osb4_proc = 1; - bmide_dev = dev; - osb4_display_info = &osb4_get_info; - } -#endif /* DISPLAY_OSB4_TIMINGS && CONFIG_PROC_FS */ - return 0; -} - -unsigned int __init ata66_osb4 (ide_hwif_t *hwif) -{ - return 0; -} - -void __init ide_init_osb4 (ide_hwif_t *hwif) -{ - if (!hwif->irq) - hwif->irq = hwif->channel ? 15 : 14; - - hwif->tuneproc = &osb4_tune_drive; - hwif->speedproc = &osb4_tune_chipset; - -#ifndef CONFIG_BLK_DEV_IDEDMA - hwif->drives[0].autotune = 1; - hwif->drives[1].autotune = 1; - hwif->autodma = 0; - return; -#else /* CONFIG_BLK_DEV_IDEDMA */ - - if (hwif->dma_base) { - if (!noautodma) - hwif->autodma = 1; - hwif->dmaproc = &osb4_dmaproc; - } else { - hwif->autodma = 0; - hwif->drives[0].autotune = 1; - hwif->drives[1].autotune = 1; - } -#endif /* !CONFIG_BLK_DEV_IDEDMA */ -} diff -u --recursive --new-file v2.4.8/linux/drivers/ide/pdc202xx.c linux/drivers/ide/pdc202xx.c --- v2.4.8/linux/drivers/ide/pdc202xx.c Tue May 1 16:05:00 2001 +++ linux/drivers/ide/pdc202xx.c Mon Aug 13 14:56:19 2001 @@ -108,7 +108,7 @@ u32 bibma = pci_resource_start(dev, 4); u32 reg60h = 0, reg64h = 0, reg68h = 0, reg6ch = 0; u16 reg50h = 0, pmask = (1<<10), smask = (1<<11); - u8 hi = 0, lo = 0; + u8 hi = 0, lo = 0, invalid_data_set = 0; /* * at that point bibma+0x2 et bibma+0xa are byte registers @@ -132,6 +132,10 @@ pci_read_config_dword(dev, 0x6c, ®6ch); switch(dev->device) { + case PCI_DEVICE_ID_PROMISE_20268: + p += sprintf(p, "\n PDC20268 TX2 Chipset.\n"); + invalid_data_set = 1; + break; case PCI_DEVICE_ID_PROMISE_20267: p += sprintf(p, "\n PDC20267 Chipset.\n"); break; @@ -175,31 +179,38 @@ p += sprintf(p, " Mode %s Mode %s\n", (sc1a & 0x01) ? "MASTER" : "PCI ", (sc1b & 0x01) ? "MASTER" : "PCI "); - p += sprintf(p, " %s %s\n", - (sc1d & 0x08) ? "Error " : - ((sc1d & 0x05) == 0x05) ? "Not My INTR " : - (sc1d & 0x04) ? "Interrupting" : - (sc1d & 0x02) ? "FIFO Full " : - (sc1d & 0x01) ? "FIFO Empty " : "????????????", - (sc1d & 0x80) ? "Error " : - ((sc1d & 0x50) == 0x50) ? "Not My INTR " : - (sc1d & 0x40) ? "Interrupting" : - (sc1d & 0x20) ? "FIFO Full " : - (sc1d & 0x10) ? "FIFO Empty " : "????????????"); + if (!(invalid_data_set)) + p += sprintf(p, " %s %s\n", + (sc1d & 0x08) ? "Error " : + ((sc1d & 0x05) == 0x05) ? "Not My INTR " : + (sc1d & 0x04) ? "Interrupting" : + (sc1d & 0x02) ? "FIFO Full " : + (sc1d & 0x01) ? "FIFO Empty " : "????????????", + (sc1d & 0x80) ? "Error " : + ((sc1d & 0x50) == 0x50) ? "Not My INTR " : + (sc1d & 0x40) ? "Interrupting" : + (sc1d & 0x20) ? "FIFO Full " : + (sc1d & 0x10) ? "FIFO Empty " : "????????????"); p += sprintf(p, "--------------- drive0 --------- drive1 -------- drive0 ---------- drive1 ------\n"); p += sprintf(p, "DMA enabled: %s %s %s %s\n", (c0&0x20)?"yes":"no ",(c0&0x40)?"yes":"no ",(c1&0x20)?"yes":"no ",(c1&0x40)?"yes":"no "); - p += sprintf(p, "DMA Mode: %s %s %s %s\n", - pdc202xx_ultra_verbose(reg60h, (reg50h & pmask)), - pdc202xx_ultra_verbose(reg64h, (reg50h & pmask)), - pdc202xx_ultra_verbose(reg68h, (reg50h & smask)), - pdc202xx_ultra_verbose(reg6ch, (reg50h & smask))); - p += sprintf(p, "PIO Mode: %s %s %s %s\n", - pdc202xx_pio_verbose(reg60h),pdc202xx_pio_verbose(reg64h), - pdc202xx_pio_verbose(reg68h),pdc202xx_pio_verbose(reg6ch)); + if (!(invalid_data_set)) + p += sprintf(p, "DMA Mode: %s %s %s %s\n", + pdc202xx_ultra_verbose(reg60h, (reg50h & pmask)), + pdc202xx_ultra_verbose(reg64h, (reg50h & pmask)), + pdc202xx_ultra_verbose(reg68h, (reg50h & smask)), + pdc202xx_ultra_verbose(reg6ch, (reg50h & smask))); + if (!(invalid_data_set)) + p += sprintf(p, "PIO Mode: %s %s %s %s\n", + pdc202xx_pio_verbose(reg60h), + pdc202xx_pio_verbose(reg64h), + pdc202xx_pio_verbose(reg68h), + pdc202xx_pio_verbose(reg6ch)); #if 0 p += sprintf(p, "--------------- Can ATAPI DMA ---------------\n"); #endif + if (invalid_data_set) + p += sprintf(p, "--------------- Cannot Decode HOST ---------------\n"); return (char *)p; } @@ -374,6 +385,9 @@ if ((drive->media != ide_disk) && (speed < XFER_SW_DMA_0)) return -1; + if (dev->device == PCI_DEVICE_ID_PROMISE_20268) + goto skip_register_hell; + pci_read_config_dword(dev, drive_pci, &drive_conf); pci_read_config_byte(dev, (drive_pci), &AP); pci_read_config_byte(dev, (drive_pci)|0x01, &BP); @@ -461,7 +475,12 @@ decode_registers(REG_D, DP); #endif /* PDC202XX_DECODE_REGISTER_INFO */ +skip_register_hell: + + if (!drive->init_speed) + drive->init_speed = speed; err = ide_config_drive_speed(drive, speed); + drive->current_speed = speed; #if PDC202XX_DEBUG_DRIVE_INFO printk("%s: %s drive%d 0x%08x ", @@ -513,7 +532,7 @@ byte CLKSPD = IN_BYTE(high_16 + 0x11); byte udma_33 = ultra ? (inb(high_16 + 0x001f) & 1) : 0; byte udma_66 = ((eighty_ninty_three(drive)) && udma_33) ? 1 : 0; - byte udma_100 = (((dev->device == PCI_DEVICE_ID_PROMISE_20265) || (dev->device == PCI_DEVICE_ID_PROMISE_20267)) && udma_66) ? 1 : 0; + byte udma_100 = (((dev->device == PCI_DEVICE_ID_PROMISE_20265) || (dev->device == PCI_DEVICE_ID_PROMISE_20267) || (dev->device == PCI_DEVICE_ID_PROMISE_20268)) && udma_66) ? 1 : 0; /* * Set the control register to use the 66Mhz system @@ -536,6 +555,9 @@ (id->dma_ultra & 0x0010) || (id->dma_ultra & 0x0008)) ? 1 : 0; + if (dev->device == PCI_DEVICE_ID_PROMISE_20268) + goto jump_pci_mucking; + pci_read_config_word(dev, 0x50, &EP); if (((ultra_66) || (ultra_100)) && (EP & c_mask)) { @@ -616,6 +638,8 @@ if (drive->media == ide_disk) /* PREFETCH_EN */ pci_write_config_byte(dev, (drive_pci), AP|PREFETCH_EN); +jump_pci_mucking: + if ((id->dma_ultra & 0x0020) && (udma_100)) speed = XFER_UDMA_5; else if ((id->dma_ultra & 0x0010) && (udma_66)) speed = XFER_UDMA_4; else if ((id->dma_ultra & 0x0008) && (udma_66)) speed = XFER_UDMA_3; @@ -630,7 +654,8 @@ else if (id->dma_1word & 0x0001) speed = XFER_SW_DMA_0; else { /* restore original pci-config space */ - pci_write_config_dword(dev, drive_pci, drive_conf); + if (dev->device != PCI_DEVICE_ID_PROMISE_20268) + pci_write_config_dword(dev, drive_pci, drive_conf); return ide_dma_off_quietly; } @@ -783,7 +808,10 @@ byte irq = 0, irq2 = 0; pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq); pci_read_config_byte(dev, (PCI_INTERRUPT_LINE)|0x80, &irq2); /* 0xbc */ - if ((irq != irq2) && (dev->device != PCI_DEVICE_ID_PROMISE_20265) && (dev->device != PCI_DEVICE_ID_PROMISE_20267)) { + if ((irq != irq2) && + (dev->device != PCI_DEVICE_ID_PROMISE_20265) && + (dev->device != PCI_DEVICE_ID_PROMISE_20267) && + (dev->device != PCI_DEVICE_ID_PROMISE_20268)) { pci_write_config_byte(dev, (PCI_INTERRUPT_LINE)|0x80, irq); /* 0xbc */ printk("%s: pci-config space interrupt mirror fixed.\n", name); } @@ -851,6 +879,14 @@ (hwif->pci_dev->device == PCI_DEVICE_ID_PROMISE_20267)) { hwif->resetproc = &pdc202xx_reset; } + +#undef CONFIG_PDC202XX_32_UNMASK +#ifdef CONFIG_PDC202XX_32_UNMASK + hwif->drives[0].io_32bit = 1; + hwif->drives[1].io_32bit = 1; + hwif->drives[0].unmask = 1; + hwif->drives[1].unmask = 1; +#endif /* CONFIG_PDC202XX_32_UNMASK */ #ifdef CONFIG_BLK_DEV_IDEDMA if (hwif->dma_base) { diff -u --recursive --new-file v2.4.8/linux/drivers/ide/piix.c linux/drivers/ide/piix.c --- v2.4.8/linux/drivers/ide/piix.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/ide/piix.c Mon Aug 13 14:56:19 2001 @@ -88,25 +88,6 @@ u8 c0 = 0, c1 = 0; u8 reg44 = 0, reg48 = 0, reg4a = 0, reg4b = 0, reg54 = 0, reg55 = 0; - pci_read_config_word(bmide_dev, 0x40, ®40); - pci_read_config_word(bmide_dev, 0x42, ®42); - pci_read_config_byte(bmide_dev, 0x44, ®44); - pci_read_config_byte(bmide_dev, 0x48, ®48); - pci_read_config_byte(bmide_dev, 0x4a, ®4a); - pci_read_config_byte(bmide_dev, 0x4b, ®4b); - pci_read_config_byte(bmide_dev, 0x54, ®54); - pci_read_config_byte(bmide_dev, 0x55, ®55); - - psitre = (reg40 & 0x4000) ? 1 : 0; - ssitre = (reg42 & 0x4000) ? 1 : 0; - - /* - * at that point bibma+0x2 et bibma+0xa are byte registers - * to investigate: - */ - c0 = inb_p((unsigned short)bibma + 0x02); - c1 = inb_p((unsigned short)bibma + 0x0a); - switch(bmide_dev->device) { case PCI_DEVICE_ID_INTEL_82801BA_8: case PCI_DEVICE_ID_INTEL_82801BA_9: @@ -125,12 +106,35 @@ case PCI_DEVICE_ID_INTEL_82371SB_1: p += sprintf(p, "\n Intel PIIX3 Chipset.\n"); break; + case PCI_DEVICE_ID_INTEL_82371MX: + p += sprintf(p, "\n Intel MPIIX Chipset.\n"); + return p-buffer; /* => must be less than 4k! */ case PCI_DEVICE_ID_INTEL_82371FB_1: case PCI_DEVICE_ID_INTEL_82371FB_0: default: p += sprintf(p, "\n Intel PIIX Chipset.\n"); break; } + + pci_read_config_word(bmide_dev, 0x40, ®40); + pci_read_config_word(bmide_dev, 0x42, ®42); + pci_read_config_byte(bmide_dev, 0x44, ®44); + pci_read_config_byte(bmide_dev, 0x48, ®48); + pci_read_config_byte(bmide_dev, 0x4a, ®4a); + pci_read_config_byte(bmide_dev, 0x4b, ®4b); + pci_read_config_byte(bmide_dev, 0x54, ®54); + pci_read_config_byte(bmide_dev, 0x55, ®55); + + psitre = (reg40 & 0x4000) ? 1 : 0; + ssitre = (reg42 & 0x4000) ? 1 : 0; + + /* + * at that point bibma+0x2 et bibma+0xa are byte registers + * to investigate: + */ + c0 = inb_p((unsigned short)bibma + 0x02); + c1 = inb_p((unsigned short)bibma + 0x0a); + p += sprintf(p, "--------------- Primary Channel ---------------- Secondary Channel -------------\n"); p += sprintf(p, " %sabled %sabled\n", (c0&0x80) ? "dis" : " en", @@ -504,6 +508,11 @@ if (!hwif->irq) hwif->irq = hwif->channel ? 15 : 14; #endif /* CONFIG_IA64 */ + + if (hwif->pci_dev->device == PCI_DEVICE_ID_INTEL_82371MX) { + /* This is a painful system best to let it self tune for now */ + return; + } hwif->tuneproc = &piix_tune_drive; hwif->drives[0].autotune = 1; diff -u --recursive --new-file v2.4.8/linux/drivers/ide/serverworks.c linux/drivers/ide/serverworks.c --- v2.4.8/linux/drivers/ide/serverworks.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/ide/serverworks.c Mon Aug 13 14:56:19 2001 @@ -0,0 +1,577 @@ +/* + * linux/drivers/ide/serverworks.c Version 0.2 17 Oct 2000 + * + * Copyright (C) 2000 Cobalt Networks, Inc. + * May be copied or modified under the terms of the GNU General Public License + * + * interface borrowed from alim15x3.c: + * Copyright (C) 1998-2000 Michel Aubry, Maintainer + * Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer + * + * Copyright (C) 1998-2000 Andre Hedrick + * + * IDE support for the ServerWorks OSB4 IDE chipset + * + * here's the default lspci: + * + * 00:0f.1 IDE interface: ServerWorks: Unknown device 0211 (prog-if 8a [Master SecP PriP]) + * Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- + * Status: Cap- 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- TAbort- SERR- +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "ide_modes.h" + +#define SVWKS_DEBUG_DRIVE_INFO 0 + +#define DISPLAY_SVWKS_TIMINGS + +#if defined(DISPLAY_SVWKS_TIMINGS) && defined(CONFIG_PROC_FS) +#include +#include + +static struct pci_dev *bmide_dev; + +static int svwks_get_info(char *, char **, off_t, int); +extern int (*svwks_display_info)(char *, char **, off_t, int); /* ide-proc.c */ +extern char *ide_media_verbose(ide_drive_t *); + +static int svwks_get_info (char *buffer, char **addr, off_t offset, int count) +{ + char *p = buffer; + u32 bibma = pci_resource_start(bmide_dev, 4); + u32 reg40, reg44; + u16 reg48, reg56; + u8 c0 = 0, c1 = 0, reg54; + + pci_read_config_dword(bmide_dev, 0x40, ®40); + pci_read_config_dword(bmide_dev, 0x44, ®44); + pci_read_config_word(bmide_dev, 0x48, ®48); + pci_read_config_byte(bmide_dev, 0x54, ®54); + pci_read_config_word(bmide_dev, 0x56, ®56); + + /* + * at that point bibma+0x2 et bibma+0xa are byte registers + * to investigate: + */ + c0 = inb_p((unsigned short)bibma + 0x02); + c1 = inb_p((unsigned short)bibma + 0x0a); + + switch(bmide_dev->device) { + case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE: + p += sprintf(p, "\n ServerWorks CSB5 Chipset.\n"); + break; + case PCI_DEVICE_ID_SERVERWORKS_OSB4: + p += sprintf(p, "\n ServerWorks OSB4 Chipset.\n"); + break; + default: + p += sprintf(p, "\n ServerWorks 0x%04x Chipset.\n", bmide_dev->device); + break; + } + + p += sprintf(p, "------------------------------- General Status ---------------------------------\n"); +#if 0 + p += sprintf(p, " : %s\n", "str"); +#endif + p += sprintf(p, "--------------- Primary Channel ---------------- Secondary Channel -------------\n"); + p += sprintf(p, " %sabled %sabled\n", + (c0&0x80) ? "dis" : " en", + (c1&0x80) ? "dis" : " en"); + p += sprintf(p, "--------------- drive0 --------- drive1 -------- drive0 ---------- drive1 ------\n"); + p += sprintf(p, "DMA enabled: %s %s %s %s\n", + (c0&0x20) ? "yes" : "no ", + (c0&0x40) ? "yes" : "no ", + (c1&0x20) ? "yes" : "no ", + (c1&0x40) ? "yes" : "no " ); + p += sprintf(p, "UDMA enabled: %s %s %s %s\n", + (reg54 & 0x01) ? "yes" : "no ", + (reg54 & 0x02) ? "yes" : "no ", + (reg54 & 0x04) ? "yes" : "no ", + (reg54 & 0x08) ? "yes" : "no " ); + p += sprintf(p, "UDMA enabled: %s %s %s %s\n", + ((reg56&0x0005)==0x0005)?"5": + ((reg56&0x0004)==0x0004)?"4": + ((reg56&0x0003)==0x0003)?"3": + ((reg56&0x0002)==0x0002)?"2": + ((reg56&0x0001)==0x0001)?"1": + ((reg56&0x000F))?"?":"0", + ((reg56&0x0050)==0x0050)?"5": + ((reg56&0x0040)==0x0040)?"4": + ((reg56&0x0030)==0x0030)?"3": + ((reg56&0x0020)==0x0020)?"2": + ((reg56&0x0010)==0x0010)?"1": + ((reg56&0x00F0))?"?":"0", + ((reg56&0x0500)==0x0500)?"5": + ((reg56&0x0400)==0x0400)?"4": + ((reg56&0x0300)==0x0300)?"3": + ((reg56&0x0200)==0x0200)?"2": + ((reg56&0x0100)==0x0100)?"1": + ((reg56&0x0F00))?"?":"0", + ((reg56&0x5000)==0x5000)?"5": + ((reg56&0x4000)==0x4000)?"4": + ((reg56&0x3000)==0x3000)?"3": + ((reg56&0x2000)==0x2000)?"2": + ((reg56&0x1000)==0x1000)?"1": + ((reg56&0xF000))?"?":"0"); + p += sprintf(p, "DMA enabled: %s %s %s %s\n", + ((reg44&0x00002000)==0x00002000)?"2": + ((reg44&0x00002100)==0x00002100)?"1": + ((reg44&0x00007700)==0x00007700)?"0": + ((reg44&0x0000FF00)==0x0000FF00)?"X":"?", + ((reg44&0x00000020)==0x00000020)?"2": + ((reg44&0x00000021)==0x00000021)?"1": + ((reg44&0x00000077)==0x00000077)?"0": + ((reg44&0x000000FF)==0x000000FF)?"X":"?", + ((reg44&0x20000000)==0x20000000)?"2": + ((reg44&0x21000000)==0x21000000)?"1": + ((reg44&0x77000000)==0x77000000)?"0": + ((reg44&0xFF000000)==0xFF000000)?"X":"?", + ((reg44&0x00200000)==0x00200000)?"2": + ((reg44&0x00210000)==0x00210000)?"1": + ((reg44&0x00770000)==0x00770000)?"0": + ((reg44&0x00FF0000)==0x00FF0000)?"X":"?"); +#if 0 + if (bmide_dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) + p += sprintf(p, "PIO enabled: %s %s %s %s\n", + if (bmide_dev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4) +#endif + p += sprintf(p, "PIO enabled: %s %s %s %s\n", + ((reg40&0x00002000)==0x00002000)?"4": + ((reg40&0x00002200)==0x00002200)?"3": + ((reg40&0x00003400)==0x00003400)?"2": + ((reg40&0x00004700)==0x00004700)?"1": + ((reg40&0x00005D00)==0x00005D00)?"0":"?", + ((reg40&0x00000020)==0x00000020)?"4": + ((reg40&0x00000022)==0x00000022)?"3": + ((reg40&0x00000034)==0x00000034)?"2": + ((reg40&0x00000047)==0x00000047)?"1": + ((reg40&0x0000005D)==0x0000005D)?"0":"?", + ((reg40&0x20000000)==0x20000000)?"4": + ((reg40&0x22000000)==0x22000000)?"3": + ((reg40&0x34000000)==0x34000000)?"2": + ((reg40&0x47000000)==0x47000000)?"1": + ((reg40&0x5D000000)==0x5D000000)?"0":"?", + ((reg40&0x00200000)==0x00200000)?"4": + ((reg40&0x00220000)==0x00220000)?"3": + ((reg40&0x00340000)==0x00340000)?"2": + ((reg40&0x00470000)==0x00470000)?"1": + ((reg40&0x005D0000)==0x005D0000)?"0":"?"); + return p-buffer; /* => must be less than 4k! */ +} +#endif /* defined(DISPLAY_SVWKS_TIMINGS) && defined(CONFIG_PROC_FS) */ + +static byte svwks_revision = 0; + +byte svwks_proc = 0; + +extern char *ide_xfer_verbose (byte xfer_rate); + +static struct pci_dev *isa_dev; + +static int svwks_tune_chipset (ide_drive_t *drive, byte speed) +{ + byte udma_modes[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 }; + byte dma_modes[] = { 0x77, 0x21, 0x20 }; + byte pio_modes[] = { 0x5d, 0x47, 0x34, 0x22, 0x20 }; + + ide_hwif_t *hwif = HWIF(drive); + struct pci_dev *dev = hwif->pci_dev; + byte unit = (drive->select.b.unit & 0x01); + byte csb5 = (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) ? 1 : 0; + +#ifdef CONFIG_BLK_DEV_IDEDMA + unsigned long dma_base = hwif->dma_base; +#endif /* CONFIG_BLK_DEV_IDEDMA */ + int err; + + byte drive_pci = 0x00; + byte drive_pci2 = 0x00; + byte drive_pci3 = hwif->channel ? 0x57 : 0x56; + + byte ultra_enable = 0x00; + byte ultra_timing = 0x00; + byte dma_timing = 0x00; + byte pio_timing = 0x00; + unsigned short csb5_pio = 0x00; + + byte pio = ide_get_best_pio_mode(drive, 255, 5, NULL); + + switch (drive->dn) { + case 0: drive_pci = 0x41; drive_pci2 = 0x45; break; + case 1: drive_pci = 0x40; drive_pci2 = 0x44; break; + case 2: drive_pci = 0x43; drive_pci2 = 0x47; break; + case 3: drive_pci = 0x42; drive_pci2 = 0x46; break; + default: + return -1; + } + + pci_read_config_byte(dev, drive_pci, &pio_timing); + pci_read_config_byte(dev, drive_pci2, &dma_timing); + pci_read_config_byte(dev, drive_pci3, &ultra_timing); + pci_read_config_word(dev, 0x4A, &csb5_pio); + pci_read_config_byte(dev, 0x54, &ultra_enable); + +#ifdef DEBUG + printk("%s: UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x ", + drive->name, ultra_timing, dma_timing, pio_timing); +#endif + + pio_timing &= ~0xFF; + dma_timing &= ~0xFF; + ultra_timing &= ~(0x0F << (4*unit)); + ultra_enable &= ~(0x01 << drive->dn); + csb5_pio &= ~(0x0F << (4*drive->dn)); + + switch(speed) { + case XFER_PIO_4: + case XFER_PIO_3: + case XFER_PIO_2: + case XFER_PIO_1: + case XFER_PIO_0: + pio_timing |= pio_modes[speed - XFER_PIO_0]; + csb5_pio |= ((speed - XFER_PIO_0) << (4*drive->dn)); + break; +#ifdef CONFIG_BLK_DEV_IDEDMA + case XFER_MW_DMA_2: + case XFER_MW_DMA_1: + case XFER_MW_DMA_0: + pio_timing |= pio_modes[pio]; + csb5_pio |= (pio << (4*drive->dn)); + dma_timing |= dma_modes[speed - XFER_MW_DMA_0]; + break; + + case XFER_UDMA_5: + case XFER_UDMA_4: + case XFER_UDMA_3: + case XFER_UDMA_2: + case XFER_UDMA_1: + case XFER_UDMA_0: + pio_timing |= pio_modes[pio]; + csb5_pio |= (pio << (4*drive->dn)); + dma_timing |= dma_modes[2]; + ultra_timing |= ((udma_modes[speed - XFER_UDMA_0]) << (4*unit)); + ultra_enable |= (0x01 << drive->dn); +#endif + default: + break; + } + +#ifdef DEBUG + printk("%s: UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x ", + drive->name, ultra_timing, dma_timing, pio_timing); +#endif + +#if OSB4_DEBUG_DRIVE_INFO + printk("%s: %s drive%d\n", drive->name, ide_xfer_verbose(speed), drive->dn); +#endif /* OSB4_DEBUG_DRIVE_INFO */ + + if (!drive->init_speed) + drive->init_speed = speed; + + pci_write_config_byte(dev, drive_pci, pio_timing); + if (csb5) + pci_write_config_word(dev, 0x4A, csb5_pio); + +#ifdef CONFIG_BLK_DEV_IDEDMA + pci_write_config_byte(dev, drive_pci2, dma_timing); + pci_write_config_byte(dev, drive_pci3, ultra_timing); + pci_write_config_byte(dev, 0x54, ultra_enable); + + if (speed > XFER_PIO_4) { + outb(inb(dma_base+2)|(1<<(5+unit)), dma_base+2); + } else { + outb(inb(dma_base+2) & ~(1<<(5+unit)), dma_base+2); + } +#endif /* CONFIG_BLK_DEV_IDEDMA */ + + err = ide_config_drive_speed(drive, speed); + drive->current_speed = speed; + return err; +} + +static void config_chipset_for_pio (ide_drive_t *drive) +{ + unsigned short eide_pio_timing[6] = {960, 480, 240, 180, 120, 90}; + unsigned short xfer_pio = drive->id->eide_pio_modes; + byte timing, speed, pio; + + pio = ide_get_best_pio_mode(drive, 255, 5, NULL); + + if (xfer_pio> 4) + xfer_pio = 0; + + if (drive->id->eide_pio_iordy > 0) { + for (xfer_pio = 5; + xfer_pio>0 && + drive->id->eide_pio_iordy>eide_pio_timing[xfer_pio]; + xfer_pio--); + } else { + xfer_pio = (drive->id->eide_pio_modes & 4) ? 0x05 : + (drive->id->eide_pio_modes & 2) ? 0x04 : + (drive->id->eide_pio_modes & 1) ? 0x03 : + (drive->id->tPIO & 2) ? 0x02 : + (drive->id->tPIO & 1) ? 0x01 : xfer_pio; + } + + timing = (xfer_pio >= pio) ? xfer_pio : pio; + + switch(timing) { + case 4: speed = XFER_PIO_4;break; + case 3: speed = XFER_PIO_3;break; + case 2: speed = XFER_PIO_2;break; + case 1: speed = XFER_PIO_1;break; + default: + speed = (!drive->id->tPIO) ? XFER_PIO_0 : XFER_PIO_SLOW; + break; + } + (void) svwks_tune_chipset(drive, speed); + drive->current_speed = speed; +} + +static void svwks_tune_drive (ide_drive_t *drive, byte pio) +{ + byte speed; + switch(pio) { + case 4: speed = XFER_PIO_4;break; + case 3: speed = XFER_PIO_3;break; + case 2: speed = XFER_PIO_2;break; + case 1: speed = XFER_PIO_1;break; + default: speed = XFER_PIO_0;break; + } + (void) svwks_tune_chipset(drive, speed); +} + +#ifdef CONFIG_BLK_DEV_IDEDMA +static int config_chipset_for_dma (ide_drive_t *drive) +{ + struct hd_driveid *id = drive->id; + struct pci_dev *dev = HWIF(drive)->pci_dev; + byte udma_66 = eighty_ninty_three(drive); + byte speed; + + int ultra66 = (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) ? 1 : 0; + /* need specs to figure out if osb4 is capable of ata/66/100 */ + int ultra100 = (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) ? 1 : 0; + + if ((id->dma_ultra & 0x0020) && (udma_66) && (ultra100)) { + speed = XFER_UDMA_5; + } else if (id->dma_ultra & 0x0010) { + speed = ((udma_66) && (ultra66)) ? XFER_UDMA_4 : XFER_UDMA_2; + } else if (id->dma_ultra & 0x0008) { + speed = ((udma_66) && (ultra66)) ? XFER_UDMA_3 : XFER_UDMA_1; + } else if (id->dma_ultra & 0x0004) { + speed = XFER_UDMA_2; + } else if (id->dma_ultra & 0x0002) { + speed = XFER_UDMA_1; + } else if (id->dma_ultra & 0x0001) { + speed = XFER_UDMA_0; + } else if (id->dma_mword & 0x0004) { + speed = XFER_MW_DMA_2; + } else if (id->dma_mword & 0x0002) { + speed = XFER_MW_DMA_1; + } else if (id->dma_1word & 0x0004) { + speed = XFER_SW_DMA_2; + } else { + speed = XFER_PIO_0 + ide_get_best_pio_mode(drive, 255, 5, NULL); + } + + (void) svwks_tune_chipset(drive, speed); + + return ((int) ((id->dma_ultra >> 11) & 7) ? ide_dma_on : + ((id->dma_ultra >> 8) & 7) ? ide_dma_on : + ((id->dma_mword >> 8) & 7) ? ide_dma_on : + ((id->dma_1word >> 8) & 7) ? ide_dma_on : + ide_dma_off_quietly); +} + +static int config_drive_xfer_rate (ide_drive_t *drive) +{ + struct hd_driveid *id = drive->id; + ide_dma_action_t dma_func = ide_dma_on; + + if (id && (id->capability & 1) && HWIF(drive)->autodma) { + /* Consult the list of known "bad" drives */ + if (ide_dmaproc(ide_dma_bad_drive, drive)) { + dma_func = ide_dma_off; + goto fast_ata_pio; + } + dma_func = ide_dma_off_quietly; + if (id->field_valid & 4) { + if (id->dma_ultra & 0x002F) { + /* Force if Capable UltraDMA */ + dma_func = config_chipset_for_dma(drive); + if ((id->field_valid & 2) && + (dma_func != ide_dma_on)) + goto try_dma_modes; + } + } else if (id->field_valid & 2) { +try_dma_modes: + if ((id->dma_mword & 0x0007) || + (id->dma_1word & 0x007)) { + /* Force if Capable regular DMA modes */ + dma_func = config_chipset_for_dma(drive); + if (dma_func != ide_dma_on) + goto no_dma_set; + } + } else if (ide_dmaproc(ide_dma_good_drive, drive)) { + if (id->eide_dma_time > 150) { + goto no_dma_set; + } + /* Consult the list of known "good" drives */ + dma_func = config_chipset_for_dma(drive); + if (dma_func != ide_dma_on) + goto no_dma_set; + } else { + goto fast_ata_pio; + } + } else if ((id->capability & 8) || (id->field_valid & 2)) { +fast_ata_pio: + dma_func = ide_dma_off_quietly; +no_dma_set: + config_chipset_for_pio(drive); + } + return HWIF(drive)->dmaproc(dma_func, drive); +} + +static int svwks_dmaproc(ide_dma_action_t func, ide_drive_t *drive) +{ + switch (func) { + case ide_dma_check: + return config_drive_xfer_rate(drive); + default : + break; + } + /* Other cases are done by generic IDE-DMA code. */ + return ide_dmaproc(func, drive); +} +#endif /* CONFIG_BLK_DEV_IDEDMA */ + +unsigned int __init pci_init_svwks (struct pci_dev *dev, const char *name) +{ + unsigned int reg64; + + pci_read_config_byte(dev, PCI_REVISION_ID, &svwks_revision); + + if (dev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { + isa_dev = pci_find_device(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4, NULL); + + pci_read_config_dword(isa_dev, 0x64, ®64); +#ifdef DEBUG + printk("%s: reg64 == 0x%08x\n", name, reg64); +#endif + +// reg64 &= ~0x0000A000; +//#ifdef CONFIG_SMP +// reg64 |= 0x00008000; +//#endif + /* Assume the APIC was set up properly by the BIOS for now . If it + wasnt we need to do a fix up _way_ earlier. Bits 15,10,3 control + APIC enable, routing and decode */ + + reg64 &= ~0x00002000; + pci_write_config_dword(isa_dev, 0x64, reg64); + } + pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x40); + +#if defined(DISPLAY_SVWKS_TIMINGS) && defined(CONFIG_PROC_FS) + if (!svwks_proc) { + svwks_proc = 1; + bmide_dev = dev; + svwks_display_info = &svwks_get_info; + } +#endif /* DISPLAY_SVWKS_TIMINGS && CONFIG_PROC_FS */ + return 0; +} + +unsigned int __init ata66_svwks (ide_hwif_t *hwif) +{ + return 0; +} + +void __init ide_init_svwks (ide_hwif_t *hwif) +{ + if (!hwif->irq) + hwif->irq = hwif->channel ? 15 : 14; + + hwif->tuneproc = &svwks_tune_drive; + hwif->speedproc = &svwks_tune_chipset; + +#ifndef CONFIG_BLK_DEV_IDEDMA + hwif->drives[0].autotune = 1; + hwif->drives[1].autotune = 1; + hwif->autodma = 0; + return; +#else /* CONFIG_BLK_DEV_IDEDMA */ + + if (hwif->dma_base) { + if (!noautodma) + hwif->autodma = 1; + hwif->dmaproc = &svwks_dmaproc; + } else { + hwif->autodma = 0; + hwif->drives[0].autotune = 1; + hwif->drives[1].autotune = 1; + } +#endif /* !CONFIG_BLK_DEV_IDEDMA */ +} diff -u --recursive --new-file v2.4.8/linux/drivers/ide/via82cxxx.c linux/drivers/ide/via82cxxx.c --- v2.4.8/linux/drivers/ide/via82cxxx.c Sat Feb 3 11:27:43 2001 +++ linux/drivers/ide/via82cxxx.c Sun Aug 12 11:14:00 2001 @@ -1,5 +1,5 @@ /* - * $Id: via82cxxx.c,v 3.20 2001/01/27 10:13:60 vojtech Exp $ + * $Id: via82cxxx.c,v 3.23 2001/03/09 09:30:00 vojtech Exp $ * * Copyright (c) 2000-2001 Vojtech Pavlik * @@ -32,14 +32,9 @@ * PIO 0-5, MWDMA 0-2, SWDMA 0-2 and UDMA 0-5 * * (this includes UDMA33, 66 and 100) modes. UDMA66 and higher modes are - * autodetected only in case the BIOS has detected a 80 wire cable. To ignore - * the BIOS data, use 'ide0=ata66' or 'ide1=ata66' on the kernel command line. - * - * For correct operation it's needed to tell the driver the speed of the PCI - * bus. The default, and most common value is 33 MHz. Most likely, your system - * is using this value and you don't need to use any command line options. If - * you run your PCI bus speed at 25, 30, 37, 40 or 42 MHz, use the 'idebus=xx' - * option of the IDE driver. Note that this has nothing to do with UDMA66. + * autoenabled only in case the BIOS has detected a 80 wire cable. To ignore + * the BIOS data and assume the cable is present, use 'ide0=ata66' or + * 'ide1=ata66' on the kernel command line. */ /* @@ -84,15 +79,16 @@ #define VIA_ADDRESS_SETUP 0x4c #define VIA_UDMA_TIMING 0x50 -#define VIA_UDMA 0x07 -#define VIA_UDMA_NONE 0x00 -#define VIA_UDMA_33 0x01 -#define VIA_UDMA_66 0x02 -#define VIA_UDMA_100 0x03 -#define VIA_BAD_PREQ 0x10 -#define VIA_BAD_CLK66 0x20 -#define VIA_SET_FIFO 0x40 -#define VIA_SET_THRESH 0x80 +#define VIA_UDMA 0x007 +#define VIA_UDMA_NONE 0x000 +#define VIA_UDMA_33 0x001 +#define VIA_UDMA_66 0x002 +#define VIA_UDMA_100 0x003 +#define VIA_BAD_PREQ 0x010 /* Crashes if PREQ# till DDACK# set */ +#define VIA_BAD_CLK66 0x020 /* 66 MHz clock doesn't work correctly */ +#define VIA_SET_FIFO 0x040 /* Needs to have FIFO split set */ +#define VIA_SET_THRESH 0x080 /* Needs to have FIFO thresholds set */ +#define VIA_BAD_PIO 0x100 /* Always uses 26 PCICLK/xfer regardles of PIO mode */ /* * VIA SouthBridge chips. @@ -103,13 +99,15 @@ unsigned short id; unsigned char rev_min; unsigned char rev_max; - unsigned char flags; + unsigned short flags; } via_isa_bridges[] = { +#ifdef VIA_NEW_BRIDGES_TESTED { "vt8233", PCI_DEVICE_ID_VIA_8233_0, 0x00, 0x2f, VIA_UDMA_100 }, { "vt8231", PCI_DEVICE_ID_VIA_8231, 0x00, 0x2f, VIA_UDMA_66 }, - { "vt82c686b", PCI_DEVICE_ID_VIA_82C686, 0x40, 0x4f, VIA_UDMA_100 }, +#endif + { "vt82c686b", PCI_DEVICE_ID_VIA_82C686, 0x40, 0x4f, VIA_UDMA_100 | VIA_BAD_PIO }, { "vt82c686a", PCI_DEVICE_ID_VIA_82C686, 0x10, 0x2f, VIA_UDMA_66 }, - { "vt82c686", PCI_DEVICE_ID_VIA_82C686, 0x00, 0x0f, VIA_UDMA_66 }, + { "vt82c686", PCI_DEVICE_ID_VIA_82C686, 0x00, 0x0f, VIA_UDMA_33 | VIA_BAD_CLK66 }, { "vt82c596b", PCI_DEVICE_ID_VIA_82C596, 0x10, 0x2f, VIA_UDMA_66 }, { "vt82c596a", PCI_DEVICE_ID_VIA_82C596, 0x00, 0x0f, VIA_UDMA_33 | VIA_BAD_CLK66 }, { "vt82c586b", PCI_DEVICE_ID_VIA_82C586_0, 0x40, 0x4f, VIA_UDMA_33 | VIA_SET_FIFO | VIA_BAD_PREQ }, @@ -123,6 +121,7 @@ static unsigned char via_enabled; static unsigned int via_80w; static unsigned int via_clock; +static char *via_dma[] = { "MWDMA16", "UDMA33", "UDMA66", "UDMA100" }; /* * VIA /proc entry. @@ -145,8 +144,8 @@ static int via_get_info(char *buffer, char **addr, off_t offset, int count) { - short speed[4], cycle[4], setup[4], active[4], - recover[4], uen[4], udma[4], active8b[4], recover8b[4]; + short speed[4], cycle[4], setup[4], active[4], recover[4], den[4], + uen[4], udma[4], umul[4], active8b[4], recover8b[4]; struct pci_dev *dev = bmide_dev; unsigned int v, u, i; unsigned short c, w; @@ -155,12 +154,13 @@ via_print("----------VIA BusMastering IDE Configuration----------------"); - via_print("Driver Version: 3.20"); + via_print("Driver Version: 3.23"); via_print("South Bridge: VIA %s", via_config->name); pci_read_config_byte(isa_dev, PCI_REVISION_ID, &t); pci_read_config_byte(dev, PCI_REVISION_ID, &x); via_print("Revision: ISA %#x IDE %#x", t, x); + via_print("Highest DMA rate: %s", via_dma[via_config->flags & VIA_UDMA]); via_print("BM-DMA base: %#x", via_base); via_print("PCI clock: %dMHz", via_clock); @@ -200,28 +200,43 @@ else u = 0; for (i = 0; i < 4; i++) { + setup[i] = ((t >> ((3 - i) << 1)) & 0x3) + 1; recover8b[i] = ((w >> ((1 - (i >> 1)) << 3)) & 0xf) + 1; active8b[i] = ((w >> (((1 - (i >> 1)) << 3) + 4)) & 0xf) + 1; active[i] = ((v >> (((3 - i) << 3) + 4)) & 0xf) + 1; recover[i] = ((v >> ((3 - i) << 3)) & 0xf) + 1; udma[i] = ((u >> ((3 - i) << 3)) & 0x7) + 2; + umul[i] = ((u >> (((3 - i) & 2) << 3)) & 0x8) ? 1 : 2; + uen[i] = ((u >> ((3 - i) << 3)) & 0x20); + den[i] = (c & ((i & 1) ? 0x40 : 0x20) << ((i & 2) << 2)); + + speed[i] = 20 * via_clock / (active[i] + recover[i]); + cycle[i] = 1000 / via_clock * (active[i] + recover[i]); - if ((via_config->flags & VIA_UDMA) == VIA_UDMA_100) { - speed[i] = 2000 / udma[i]; - cycle[i] = 10 * udma[i]; + if (!uen[i] || !den[i]) continue; - } - uen[i] = (u >> ((3 - i) << 3)) & 0x20; - udma[i] *= ((u >> (((3 - i) & 2) << 3)) & 0x8) ? 1 : 2; + switch (via_config->flags & VIA_UDMA) { + + case VIA_UDMA_100: + speed[i] = 2000 / udma[i]; + cycle[i] = 10 * udma[i]; + break; + + case VIA_UDMA_66: + speed[i] = 40 * via_clock / (udma[i] * umul[i]); + cycle[i] = 500 / via_clock * (udma[i] * umul[i]); + break; - speed[i] = 40 * via_clock / (uen[i] ? udma[i] : (active[i] + recover[i]) * 2); - cycle[i] = 1000 / via_clock * (uen[i] ? udma[i] : (active[i] + recover[i]) * 2) / 2; + case VIA_UDMA_33: + speed[i] = 20 * via_clock / udma[i]; + cycle[i] = 1000 / via_clock * udma[i]; + break; + } } - via_print_drive("Transfer Mode: ", "%10s", - (c & ((i & 1) ? 0x40 : 0x20) << ((i & 2) << 2)) ? (uen[i] ? "UDMA" : "DMA") : "PIO"); + via_print_drive("Transfer Mode: ", "%10s", den[i] ? (uen[i] ? "UDMA" : "DMA") : "PIO"); via_print_drive("Address Setup: ", "%8dns", (1000 / via_clock) * setup[i]); via_print_drive("Cmd Active: ", "%8dns", (1000 / via_clock) * active8b[i]); @@ -342,12 +357,13 @@ short speed = ide_find_best_mode(drive, XFER_PIO | XFER_EPIO | XFER_SWDMA | XFER_MWDMA | (via_config->flags & VIA_UDMA ? XFER_UDMA : 0) | - (w80 && (via_config->flags & VIA_UDMA) == VIA_UDMA_66 ? XFER_UDMA_66 : 0) | - (w80 && (via_config->flags & VIA_UDMA) == VIA_UDMA_100 ? XFER_UDMA_100 : 0)); - - func = ((speed & XFER_MODE) != XFER_PIO) ? ide_dma_on : ide_dma_off_quietly; + (w80 && (via_config->flags & VIA_UDMA) >= VIA_UDMA_66 ? XFER_UDMA_66 : 0) | + (w80 && (via_config->flags & VIA_UDMA) >= VIA_UDMA_100 ? XFER_UDMA_100 : 0)); via_set_drive(drive, speed); + + func = (HWIF(drive)->autodma && (speed & XFER_MODE) != XFER_PIO) + ? ide_dma_on : ide_dma_off_quietly; } return ide_dmaproc(func, drive); @@ -459,11 +475,7 @@ pci_read_config_byte(isa, PCI_REVISION_ID, &t); printk(KERN_INFO "VP_IDE: VIA %s (rev %02x) IDE %s controller on pci%s\n", - via_config->name, t, - (via_config->flags & VIA_UDMA) == VIA_UDMA_100 ? "UDMA100" : - (via_config->flags & VIA_UDMA) == VIA_UDMA_66 ? "UDMA66" : - (via_config->flags & VIA_UDMA) == VIA_UDMA_33 ? "UDMA33" : "MWDMA16", - dev->slot_name); + via_config->name, t, via_dma[via_config->flags & VIA_UDMA], dev->slot_name); /* * Setup /proc/ide/via entry. @@ -471,11 +483,11 @@ #ifdef CONFIG_PROC_FS if (!via_proc) { - via_proc = 1; via_base = pci_resource_start(dev, 4); bmide_dev = dev; isa_dev = isa; via_display_info = &via_get_info; + via_proc = 1; } #endif @@ -506,7 +518,8 @@ if (hwif->dma_base) { hwif->dmaproc = &via82cxxx_dmaproc; #ifdef CONFIG_IDEDMA_AUTO - hwif->autodma = 1; + if (!noautodma) + hwif->autodma = 1; #endif } #endif /* CONFIG_BLK_DEV_IDEDMA */ diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/hosts.c linux/drivers/ieee1394/hosts.c --- v2.4.8/linux/drivers/ieee1394/hosts.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/ieee1394/hosts.c Sun Aug 12 12:39:02 2001 @@ -95,11 +95,12 @@ struct hpsb_host *h; h = vmalloc(sizeof(struct hpsb_host) + hd_size); - if (h == NULL) { - return NULL; - } + if (!h) return NULL; memset(h, 0, sizeof(struct hpsb_host) + hd_size); + + atomic_set(&h->generation, 0); + INIT_LIST_HEAD(&h->pending_packets); spin_lock_init(&h->pending_pkt_lock); @@ -239,7 +240,6 @@ } spin_unlock(&templates_lock); - inc_hpsb_generation(); return retval; } diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/hosts.h linux/drivers/ieee1394/hosts.h --- v2.4.8/linux/drivers/ieee1394/hosts.h Wed Jul 25 17:10:20 2001 +++ linux/drivers/ieee1394/hosts.h Sun Aug 12 12:39:02 2001 @@ -1,4 +1,3 @@ - #ifndef _IEEE1394_HOSTS_H #define _IEEE1394_HOSTS_H @@ -15,6 +14,8 @@ struct hpsb_host { /* private fields (hosts, do not use them) */ struct hpsb_host *next; + + atomic_t generation; struct list_head pending_packets; spinlock_t pending_pkt_lock; diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/ieee1394_core.c linux/drivers/ieee1394/ieee1394_core.c --- v2.4.8/linux/drivers/ieee1394/ieee1394_core.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/ieee1394/ieee1394_core.c Sun Aug 12 12:39:02 2001 @@ -10,7 +10,6 @@ * directory of the kernel sources for details. */ -#include #include #include #include @@ -31,8 +30,7 @@ #include "csr.h" #include "nodemgr.h" - -atomic_t hpsb_generation = ATOMIC_INIT(0); +static kmem_cache_t *hpsb_packet_cache; static void dump_packet(const char *text, quadlet_t *data, int size) @@ -76,16 +74,17 @@ void *data = NULL; int kmflags = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL; - packet = kmalloc(sizeof(struct hpsb_packet), kmflags); - if (!packet) return NULL; + packet = kmem_cache_alloc(hpsb_packet_cache, kmflags); + if (packet == NULL) + return NULL; memset(packet, 0, sizeof(struct hpsb_packet)); packet->header = packet->embedded_header; if (data_size) { data = kmalloc(data_size + 8, kmflags); - if (!data) { - kfree(packet); + if (data == NULL) { + kmem_cache_free(hpsb_packet_cache, packet); return NULL; } @@ -93,11 +92,11 @@ packet->data_size = data_size; } - INIT_LIST_HEAD(&packet->complete_tq); + INIT_TQ_HEAD(packet->complete_tq); INIT_LIST_HEAD(&packet->list); sema_init(&packet->state_change, 0); packet->state = unused; - packet->generation = get_hpsb_generation(); + packet->generation = -1; packet->data_be = 1; return packet; @@ -116,7 +115,7 @@ if (!packet) return; kfree(packet->data); - kfree(packet); + kmem_cache_free(hpsb_packet_cache, packet); } @@ -126,7 +125,7 @@ return 1; } - if (!hpsb_bus_reset(host)) { + if (!host->in_bus_reset) { host->template->devctl(host, RESET_BUS, type); return 0; } else { @@ -333,7 +332,7 @@ } host->reset_retries = 0; - inc_hpsb_generation(); + atomic_inc(&host->generation); if (isroot) host->template->devctl(host, ACT_CYCLE_MASTER, 1); highlevel_host_reset(host); } @@ -353,7 +352,7 @@ } if (ackcode != ACK_PENDING || !packet->expect_response) { - packet->state = completed; + packet->state = complete; up(&packet->state_change); up(&packet->state_change); run_task_queue(&packet->complete_tq); @@ -390,7 +389,7 @@ struct hpsb_host *host = packet->host; if (!host->initialized || host->in_bus_reset - || (packet->generation != get_hpsb_generation())) { + || (packet->generation != get_hpsb_generation(host))) { return 0; } @@ -442,14 +441,12 @@ spin_lock_irqsave(&host->pending_pkt_lock, flags); - lh = host->pending_packets.next; - while (lh != &host->pending_packets) { + list_for_each(lh, &host->pending_packets) { packet = list_entry(lh, struct hpsb_packet, list); if ((packet->tlabel == tlabel) && (packet->node_id == (data[1] >> 16))){ break; } - lh = lh->next; } if (lh == &host->pending_packets) { @@ -506,7 +503,7 @@ break; } - packet->state = completed; + packet->state = complete; up(&packet->state_change); run_task_queue(&packet->complete_tq); } @@ -721,12 +718,9 @@ INIT_LIST_HEAD(&host->pending_packets); spin_unlock_irqrestore(&host->pending_pkt_lock, flags); - lh = llist.next; - - while (lh != &llist) { + list_for_each(lh, &llist) { packet = list_entry(lh, struct hpsb_packet, list); - lh = lh->next; - packet->state = completed; + packet->state = complete; packet->ack_code = ACKX_ABORTED; up(&packet->state_change); run_task_queue(&packet->complete_tq); @@ -751,11 +745,9 @@ spin_lock_irqsave(&host->pending_pkt_lock, flags); - lh = host->pending_packets.next; - while (lh != &host->pending_packets) { + list_for_each(lh, &host->pending_packets) { packet = list_entry(lh, struct hpsb_packet, list); - lh = lh->next; if (time_before(packet->sendtime + expire, jiffies)) { list_del(&packet->list); list_add(&packet->list, &expiredlist); @@ -767,11 +759,9 @@ } spin_unlock_irqrestore(&host->pending_pkt_lock, flags); - lh = expiredlist.next; - while (lh != &expiredlist) { + list_for_each(lh, &expiredlist) { packet = list_entry(lh, struct hpsb_packet, list); - lh = lh->next; - packet->state = completed; + packet->state = complete; packet->ack_code = ACKX_TIMEOUT; up(&packet->state_change); run_task_queue(&packet->complete_tq); @@ -781,16 +771,19 @@ static int __init ieee1394_init(void) { - init_hpsb_highlevel(); - init_csr(); - init_ieee1394_nodemgr(); + hpsb_packet_cache = kmem_cache_create("hpsb_packet", sizeof(struct hpsb_packet), + 0, 0, NULL, NULL); + init_hpsb_highlevel(); + init_csr(); + init_ieee1394_nodemgr(); return 0; } static void __exit ieee1394_cleanup(void) { - cleanup_ieee1394_nodemgr(); - cleanup_csr(); + cleanup_ieee1394_nodemgr(); + cleanup_csr(); + kmem_cache_destroy(hpsb_packet_cache); } module_init(ieee1394_init); diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/ieee1394_core.h linux/drivers/ieee1394/ieee1394_core.h --- v2.4.8/linux/drivers/ieee1394/ieee1394_core.h Sun Aug 12 13:27:59 2001 +++ linux/drivers/ieee1394/ieee1394_core.h Sun Aug 12 12:39:02 2001 @@ -3,6 +3,7 @@ #define _IEEE1394_CORE_H #include +#include #include #include "hosts.h" @@ -24,11 +25,11 @@ /* Okay, this is core internal and a no care for hosts. * queued = queued for sending * pending = sent, waiting for response - * completed = processing completed, successful or not + * complete = processing completed, successful or not * incoming = incoming packet */ enum { - unused, queued, pending, completed, incoming + unused, queued, pending, complete, incoming } __attribute__((packed)) state; /* These are core internal. */ @@ -89,16 +90,10 @@ * Use the functions, not the variable. */ #include -extern atomic_t hpsb_generation; -inline static unsigned int get_hpsb_generation(void) +static inline unsigned int get_hpsb_generation(struct hpsb_host *host) { - return atomic_read(&hpsb_generation); -} - -inline static void inc_hpsb_generation(void) -{ - atomic_inc(&hpsb_generation); + return atomic_read(&host->generation); } diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/ieee1394_hotplug.h linux/drivers/ieee1394/ieee1394_hotplug.h --- v2.4.8/linux/drivers/ieee1394/ieee1394_hotplug.h Wed Dec 31 16:00:00 1969 +++ linux/drivers/ieee1394/ieee1394_hotplug.h Sun Aug 12 12:39:02 2001 @@ -0,0 +1,33 @@ +#ifndef _IEEE1394_HOTPLUG_H +#define _IEEE1394_HOTPLUG_H + +#include "ieee1394_core.h" + +#define IEEE1394_DEVICE_ID_MATCH_VENDOR_ID 0x0001 +#define IEEE1394_DEVICE_ID_MATCH_MODEL_ID 0x0002 +#define IEEE1394_DEVICE_ID_MATCH_SW_SPECIFIER_ID 0x0004 +#define IEEE1394_DEVICE_ID_MATCH_SW_SPECIFIER_VERSION 0x0008 + +struct ieee1394_device_id { + u32 match_flags; + u32 vendor_id; + u32 model_id; + u32 sw_specifier_id; + u32 sw_specifier_version; +}; + +#define IEEE1394_PROTOCOL(id, version) { \ + match_flags: IEEE1394_DEVICE_ID_MATCH_SW_SPECIFIER_ID | \ + IEEE1394_DEVICE_ID_MATCH_SW_SPECIFIER_VERSION, \ + sw_specifier_id: id, \ + sw_specifier_version: version \ +} + +#define IEEE1394_DEVICE(vendor_id, model_id) { \ + match_flags: IEEE1394_DEVICE_ID_MATCH_VENDOR_ID | \ + IEEE1394_DEVICE_ID_MATCH_MODEL_ID, \ + vendor_id: vendor_id, \ + model_id: vendor_id, \ +} + +#endif /* _IEEE1394_HOTPLUG_H */ diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/ieee1394_syms.c linux/drivers/ieee1394/ieee1394_syms.c --- v2.4.8/linux/drivers/ieee1394/ieee1394_syms.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/ieee1394/ieee1394_syms.c Sun Aug 12 12:39:02 2001 @@ -9,8 +9,9 @@ * directory of the kernel sources for details. */ -#include +#include #include +#include #include #include "ieee1394_types.h" @@ -35,7 +36,6 @@ EXPORT_SYMBOL(hpsb_selfid_complete); EXPORT_SYMBOL(hpsb_packet_sent); EXPORT_SYMBOL(hpsb_packet_received); -EXPORT_SYMBOL(hpsb_generation); EXPORT_SYMBOL(get_tlabel); EXPORT_SYMBOL(free_tlabel); @@ -75,6 +75,7 @@ EXPORT_SYMBOL(highlevel_remove_host); EXPORT_SYMBOL(highlevel_host_reset); EXPORT_SYMBOL(highlevel_add_one_host); -EXPORT_SYMBOL(hpsb_guid_get_handle); +EXPORT_SYMBOL(hpsb_guid_get_entry); +EXPORT_SYMBOL(hpsb_nodeid_get_entry); EXPORT_SYMBOL(hpsb_get_host_by_ne); EXPORT_SYMBOL(hpsb_guid_fill_packet); diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/ieee1394_transactions.c linux/drivers/ieee1394/ieee1394_transactions.c --- v2.4.8/linux/drivers/ieee1394/ieee1394_transactions.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/ieee1394/ieee1394_transactions.c Sun Aug 12 12:39:02 2001 @@ -447,7 +447,12 @@ return -ENOMEM; } - hpsb_send_packet(packet); + packet->generation = get_hpsb_generation(host); + if (!hpsb_send_packet(packet)) { + retval = -EINVAL; + goto hpsb_read_fail; + } + down(&packet->state_change); down(&packet->state_change); retval = hpsb_packet_success(packet); @@ -460,6 +465,7 @@ } } +hpsb_read_fail: free_tlabel(host, node, packet->tlabel); free_hpsb_packet(packet); @@ -514,11 +520,17 @@ if (!packet) return -ENOMEM; - hpsb_send_packet(packet); + packet->generation = get_hpsb_generation(host); + if (!hpsb_send_packet(packet)) { + retval = -EINVAL; + goto hpsb_write_fail; + } + down(&packet->state_change); down(&packet->state_change); retval = hpsb_packet_success(packet); +hpsb_write_fail: free_tlabel(host, node, packet->tlabel); free_hpsb_packet(packet); @@ -574,7 +586,11 @@ } fill_async_lock(packet, addr, extcode, length); - hpsb_send_packet(packet); + packet->generation = get_hpsb_generation(host); + if (!hpsb_send_packet(packet)) { + retval = -EINVAL; + goto hpsb_lock_fail; + } down(&packet->state_change); down(&packet->state_change); retval = hpsb_packet_success(packet); @@ -583,6 +599,7 @@ *data = packet->data[0]; } +hpsb_lock_fail: free_tlabel(host, node, packet->tlabel); free_hpsb_packet(packet); diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/ieee1394_types.h linux/drivers/ieee1394/ieee1394_types.h --- v2.4.8/linux/drivers/ieee1394/ieee1394_types.h Wed Jul 25 17:10:20 2001 +++ linux/drivers/ieee1394/ieee1394_types.h Sun Aug 12 12:39:02 2001 @@ -9,7 +9,22 @@ #include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) +#include "linux22compat.h" +#else +#define V22_COMPAT_MOD_INC_USE_COUNT do {} while (0) +#define V22_COMPAT_MOD_DEC_USE_COUNT do {} while (0) +#define OWNER_THIS_MODULE owner: THIS_MODULE, + +#define INIT_TQ_LINK(tq) INIT_LIST_HEAD(&(tq).list) +#define INIT_TQ_HEAD(tq) INIT_LIST_HEAD(&(tq)) +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) +#include +#else #include +#endif #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/nodemgr.c linux/drivers/ieee1394/nodemgr.c --- v2.4.8/linux/drivers/ieee1394/nodemgr.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/ieee1394/nodemgr.c Thu Aug 16 09:49:49 2001 @@ -22,11 +22,16 @@ #include "ieee1394_transactions.h" #include "highlevel.h" #include "csr.h" +#include "nodemgr.h" +#define NODE_BUS_FMT "%d:%d" +#define NODE_BUS_ARGS(nodeid) \ + (nodeid & NODE_MASK), ((nodeid & BUS_MASK) >> 6) + /* Basically what we do here is start off retrieving the bus_info block. * From there will fill in some info about the node, verify it is of IEEE - * 1394 type, and the the crc checks out ok. After that we start off with + * 1394 type, and that the crc checks out ok. After that we start off with * the root directory, and subdirectories. To do this, we retrieve the * quadlet header for a directory, find out the length, and retrieve the * complete directory entry (be it a leaf or a directory). We then process @@ -40,47 +45,17 @@ static LIST_HEAD(node_list); -rwlock_t node_lock = RW_LOCK_UNLOCKED; +static rwlock_t node_lock = RW_LOCK_UNLOCKED; static LIST_HEAD(host_info_list); -spinlock_t host_info_lock = SPIN_LOCK_UNLOCKED; - -struct bus_options { - u8 irmc; /* Iso Resource Manager Capable */ - u8 cmc; /* Cycle Master Capable */ - u8 isc; /* Iso Capable */ - u8 bmc; /* Bus Master Capable */ - u8 pmc; /* Power Manager Capable (PNP spec) */ - u8 cyc_clk_acc; /* Cycle clock accuracy */ - u8 generation; /* Incremented when configrom changes */ - u8 lnkspd; /* Link speed */ - u16 max_rec; /* Maximum packet size node can receive */ - atomic_t changed; /* We set this to 1 if generation has changed */ -}; +static spinlock_t host_info_lock = SPIN_LOCK_UNLOCKED; struct host_info { struct hpsb_host *host; - pid_t pid; /* PID of the nodemgr thread */ - pid_t ppid; /* Parent PID for the thread */ - struct tq_struct task; /* Used to kickstart the thread */ - wait_queue_head_t reset_wait; /* Wait queue awoken on bus reset */ + struct tq_struct task; struct list_head list; }; -struct node_entry { - struct list_head list; - atomic_t refcount; - - u64 guid; - - struct hpsb_host *host; - nodeid_t node_id; - - struct bus_options busopt; - - atomic_t generation; -}; - static struct node_entry *create_node_entry(void) { struct node_entry *ne; @@ -90,12 +65,11 @@ if (!ne) return NULL; INIT_LIST_HEAD(&ne->list); - atomic_set(&ne->refcount, 0); + INIT_LIST_HEAD(&ne->unit_directories); ne->guid = (u64) -1; ne->host = NULL; - ne->node_id = 0; + ne->nodeid = 0; atomic_set(&ne->generation, -1); - atomic_set(&ne->busopt.changed, 0); write_lock_irqsave(&node_lock, flags); list_add_tail(&ne->list, &node_list); @@ -104,39 +78,212 @@ return ne; } -static struct node_entry *find_entry(u64 guid) +static struct node_entry *find_entry_by_guid(u64 guid) { struct list_head *lh; struct node_entry *ne; - lh = node_list.next; - while (lh != &node_list) { + list_for_each(lh, &node_list) { ne = list_entry(lh, struct node_entry, list); if (ne->guid == guid) return ne; - lh = lh->next; } return NULL; } -static int register_guid(struct hpsb_host *host, nodeid_t nodeid, u64 guid, +static struct node_entry *find_entry_by_nodeid(nodeid_t nodeid) +{ + struct list_head *lh; + struct node_entry *ne; + + list_for_each(lh, &node_list) { + ne = list_entry(lh, struct node_entry, list); + if (ne->nodeid == nodeid) return ne; + } + + return NULL; +} + +int nodemgr_read_quadlet(struct node_entry *ne, + octlet_t address, quadlet_t *quad) +{ + if (hpsb_read(ne->host, ne->nodeid, address, quad, 4)) { + HPSB_DEBUG("read of address %Lx failed", address); + return -EAGAIN; + } + *quad = be32_to_cpu(*quad); + + return 0; +} + +#define CONFIG_ROM_VENDOR_ID 0x03 +#define CONFIG_ROM_MODEL_ID 0x17 +#define CONFIG_ROM_NODE_CAPABILITES 0x0C +#define CONFIG_ROM_UNIT_DIRECTORY 0xd1 +#define CONFIG_ROM_SPECIFIER_ID 0x12 +#define CONFIG_ROM_VERSION 0x13 +#define CONFIG_ROM_DESCRIPTOR_LEAF 0x81 +#define CONFIG_ROM_DESCRIPTOR_DIRECTORY 0xc1 + +/* This implementation currently only scans the config rom and its + * immediate unit directories looking for software_id and + * software_version entries, in order to get driver autoloading working. + */ + +static void nodemgr_process_unit_directory(struct node_entry *ne, + octlet_t address) +{ + struct unit_directory *ud; + octlet_t a; + quadlet_t quad; + int length, i; + + + if (!(ud = kmalloc (sizeof *ud, GFP_KERNEL))) + goto unit_directory_error; + + memset (ud, 0, sizeof *ud); + ud->address = address; + + if (nodemgr_read_quadlet(ne, address, &quad)) + goto unit_directory_error; + length = quad >> 16; + a = address + 4; + + for (i = 0; i < length; i++, a += 4) { + int code, value; + + if (nodemgr_read_quadlet(ne, a, &quad)) + goto unit_directory_error; + code = quad >> 24; + value = quad & 0xffffff; + + switch (code) { + case CONFIG_ROM_VENDOR_ID: + ud->vendor_id = value; + ud->flags |= UNIT_DIRECTORY_VENDOR_ID; + break; + + case CONFIG_ROM_MODEL_ID: + ud->model_id = value; + ud->flags |= UNIT_DIRECTORY_MODEL_ID; + break; + + case CONFIG_ROM_SPECIFIER_ID: + ud->specifier_id = value; + ud->flags |= UNIT_DIRECTORY_SPECIFIER_ID; + break; + + case CONFIG_ROM_VERSION: + ud->version = value; + ud->flags |= UNIT_DIRECTORY_VERSION; + break; + + case CONFIG_ROM_DESCRIPTOR_LEAF: + case CONFIG_ROM_DESCRIPTOR_DIRECTORY: + /* TODO: read strings... icons? */ + break; + } + } + + list_add_tail (&ud->list, &ne->unit_directories); + return; + +unit_directory_error: + if (ud != NULL) + kfree(ud); +} + +#ifdef CONFIG_IEEE1394_VERBOSEDEBUG +static void dump_directories (struct node_entry *ne) +{ + struct list_head *l; + + HPSB_DEBUG("vendor_id=0x%06x, capabilities=0x%06x", + ne->vendor_id, ne->capabilities); + list_for_each (l, &ne->unit_directories) { + struct unit_directory *ud = list_entry (l, struct unit_directory, list); + HPSB_DEBUG("unit directory:"); + if (ud->flags & UNIT_DIRECTORY_VENDOR_ID) + HPSB_DEBUG(" vendor_id=0x%06x ", ud->vendor_id); + if (ud->flags & UNIT_DIRECTORY_MODEL_ID) + HPSB_DEBUG(" model_id=0x%06x ", ud->model_id); + if (ud->flags & UNIT_DIRECTORY_SPECIFIER_ID) + HPSB_DEBUG(" specifier_id=0x%06x ", ud->specifier_id); + if (ud->flags & UNIT_DIRECTORY_VERSION) + HPSB_DEBUG(" version=0x%06x ", ud->version); + } +} +#endif + +static void nodemgr_process_root_directory(struct node_entry *ne) +{ + octlet_t address; + quadlet_t quad; + int length, i; + + address = CSR_REGISTER_BASE + CSR_CONFIG_ROM; + + if (nodemgr_read_quadlet(ne, address, &quad)) + return; + address += 4 + (quad >> 24) * 4; + + if (nodemgr_read_quadlet(ne, address, &quad)) + return; + length = quad >> 16; + address += 4; + + for (i = 0; i < length; i++, address += 4) { + int code, value; + + if (nodemgr_read_quadlet(ne, address, &quad)) + return; + code = quad >> 24; + value = quad & 0xffffff; + + switch (code) { + case CONFIG_ROM_VENDOR_ID: + ne->vendor_id = value; + break; + + case CONFIG_ROM_NODE_CAPABILITES: + ne->capabilities = value; + break; + + case CONFIG_ROM_UNIT_DIRECTORY: + nodemgr_process_unit_directory(ne, address + value * 4); + break; + + case CONFIG_ROM_DESCRIPTOR_LEAF: + case CONFIG_ROM_DESCRIPTOR_DIRECTORY: + /* TODO: read strings... icons? */ + break; + } + } +#ifdef CONFIG_IEEE1394_VERBOSEDEBUG + dump_directories(ne); +#endif +} + +static void register_node(struct hpsb_host *host, nodeid_t nodeid, u64 guid, quadlet_t busoptions) { struct node_entry *ne; unsigned long flags, new = 0; read_lock_irqsave(&node_lock, flags); - ne = find_entry(guid); + ne = find_entry_by_guid(guid); read_unlock_irqrestore(&node_lock, flags); /* New entry */ if (!ne) { if ((ne = create_node_entry()) == NULL) - return -1; + return; - HPSB_DEBUG("%s added: node %d, bus %d: GUID %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", + HPSB_DEBUG("%s added: node " NODE_BUS_FMT + ", GUID %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", (host->node_id == nodeid) ? "Local host" : "Device", - nodeid & NODE_MASK, (nodeid & BUS_MASK) >> 6, ((u8 *)&guid)[0], + NODE_BUS_ARGS(nodeid), ((u8 *)&guid)[0], ((u8 *)&guid)[1], ((u8 *)&guid)[2], ((u8 *)&guid)[3], ((u8 *)&guid)[4], ((u8 *)&guid)[5], ((u8 *)&guid)[6], ((u8 *)&guid)[7]); @@ -145,14 +292,12 @@ new = 1; } - if (!new && ne->node_id != nodeid) - HPSB_DEBUG("Node %d changed to %d on bus %d", - ne->node_id & NODE_MASK, nodeid & NODE_MASK, (nodeid & BUS_MASK) >> 6); + if (!new && ne->nodeid != nodeid) + HPSB_DEBUG("Node " NODE_BUS_FMT " changed to " NODE_BUS_FMT, + NODE_BUS_ARGS(ne->nodeid), NODE_BUS_ARGS(nodeid)); ne->host = host; - ne->node_id = nodeid; - - atomic_set(&ne->generation, get_hpsb_generation()); + ne->nodeid = nodeid; /* Now set the bus options. Only do all this crap if this is a new * node, or if the generation number has changed. */ @@ -167,25 +312,29 @@ ne->busopt.generation = (busoptions >> 6) & 0x3; ne->busopt.lnkspd = busoptions & 0x7; - new = 1; /* To make sure we probe the rest of the ConfigROM too */ + /* Now, process the rest of the tree */ + nodemgr_process_root_directory(ne); } + /* Since that's done, we can declare this record current */ + atomic_set(&ne->generation, get_hpsb_generation(host)); + #ifdef CONFIG_IEEE1394_VERBOSEDEBUG HPSB_DEBUG("raw=0x%08x irmc=%d cmc=%d isc=%d bmc=%d pmc=%d cyc_clk_acc=%d " - "max_rec=%d gen=%d lspd=%d\n", busoptions, + "max_rec=%d gen=%d lspd=%d", busoptions, ne->busopt.irmc, ne->busopt.cmc, ne->busopt.isc, ne->busopt.bmc, ne->busopt.pmc, ne->busopt.cyc_clk_acc, ne->busopt.max_rec, ne->busopt.generation, ne->busopt.lnkspd); #endif - return new; + return; } static void nodemgr_remove_node(struct node_entry *ne) { - HPSB_DEBUG("Device removed: node %d, bus %d: GUID " + HPSB_DEBUG("Device removed: node " NODE_BUS_FMT ", GUID " "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", - ne->node_id & NODE_MASK, (ne->node_id & BUS_MASK) >> 6, + NODE_BUS_ARGS(ne->nodeid), ((u8 *)&ne->guid)[0], ((u8 *)&ne->guid)[1], ((u8 *)&ne->guid)[2], ((u8 *)&ne->guid)[3], ((u8 *)&ne->guid)[4], ((u8 *)&ne->guid)[5], @@ -199,8 +348,9 @@ /* This is where we probe the nodes for their information and provided * features. */ -static void nodemgr_node_probe(struct hpsb_host *host) +static void nodemgr_node_probe(void *data) { + struct hpsb_host *host = (struct hpsb_host *)data; struct selfid *sid = (struct selfid *)host->topology_map; struct list_head *lh; struct node_entry *ne; @@ -208,7 +358,7 @@ nodeid_t nodeid = LOCAL_BUS; quadlet_t buffer[5], quad; octlet_t base = CSR_REGISTER_BASE + CSR_CONFIG_ROM; - int flags; + unsigned long flags; /* We need to detect when the ConfigROM's generation has changed, * so we only update the node's info when it needs to be. */ @@ -235,8 +385,9 @@ retry_configrom: if (!retries--) { - HPSB_ERR("Giving up on node %d for ConfigROM probe, too many errors", - nodeid & NODE_MASK); + HPSB_ERR("Giving up on node " NODE_BUS_FMT + " for ConfigROM probe, too many errors", + NODE_BUS_ARGS(nodeid)); continue; } @@ -244,7 +395,8 @@ header_size = 0; #ifdef CONFIG_IEEE1394_VERBOSEDEBUG - HPSB_INFO("Initiating ConfigROM request for node %d", nodeid & NODE_MASK); + HPSB_INFO("Initiating ConfigROM request for node " NODE_BUS_FMT, + NODE_BUS_ARGS(nodeid)); #endif /* Now, P1212 says that devices should support 64byte block @@ -253,8 +405,8 @@ * sized reads. */ if (hpsb_read(host, nodeid, base, &quad, 4)) { - HPSB_ERR("ConfigROM quadlet transaction error for node %d", - nodeid & NODE_MASK); + HPSB_ERR("ConfigROM quadlet transaction error for node " NODE_BUS_FMT, + NODE_BUS_ARGS(nodeid)); goto retry_configrom; } buffer[header_count++] = be32_to_cpu(quad); @@ -262,42 +414,35 @@ header_size = buffer[0] >> 24; if (header_size < 4) { - HPSB_INFO("Node %d on bus %d has non-standard ROM format (%d quads), " - "cannot parse", nodeid & NODE_MASK, (nodeid & BUS_MASK) >> 6, - header_size); + HPSB_INFO("Node " NODE_BUS_FMT " has non-standard ROM format (%d quads), " + "cannot parse", NODE_BUS_ARGS(nodeid), header_size); continue; } while (header_count <= header_size && (header_count<<2) < sizeof(buffer)) { if (hpsb_read(host, nodeid, base + (header_count<<2), &quad, 4)) { - HPSB_ERR("ConfigROM quadlet transaction error for %d", - nodeid & NODE_MASK); + HPSB_ERR("ConfigROM quadlet transaction error for " NODE_BUS_FMT, + NODE_BUS_ARGS(nodeid)); goto retry_configrom; } buffer[header_count++] = be32_to_cpu(quad); } set_options: - guid = be64_to_cpu(((u64)buffer[3] << 32) | buffer[4]); - switch (register_guid(host, nodeid, guid, buffer[2])) { - case -1: - HPSB_ERR("Failed to register node in ConfigROM probe"); - continue; - case 1: - /* Need to probe the rest of the ConfigROM - * here. */ - break; - default: - /* Nothing to do, this is an old unchanged - * node. */ - break; + if (buffer[1] != IEEE1394_BUSID_MAGIC) { + /* This isn't a 1394 device */ + HPSB_ERR("Node " NODE_BUS_FMT " isn't an IEEE 1394 device", + NODE_BUS_ARGS(nodeid)); + continue; } + + guid = be64_to_cpu(((u64)buffer[3] << 32) | buffer[4]); + register_node(host, nodeid, guid, buffer[2]); } /* Now check to see if we have any nodes that aren't referenced * any longer. */ write_lock_irqsave(&node_lock, flags); - lh = node_list.next; - while (lh != &node_list) { + list_for_each(lh, &node_list) { ne = list_entry(lh, struct node_entry, list); /* Only checking this host */ @@ -308,10 +453,8 @@ * node was removed, or it failed the above probe. Either * way, we remove references to it, since they are * invalid. */ - if (atomic_read(&ne->generation) != get_hpsb_generation()) + if (atomic_read(&ne->generation) != get_hpsb_generation(host)) nodemgr_remove_node(ne); - - lh = lh->next; } write_unlock_irqrestore(&node_lock, flags); @@ -319,77 +462,53 @@ } -struct node_entry *hpsb_guid_get_handle(u64 guid) +struct node_entry *hpsb_guid_get_entry(u64 guid) { unsigned long flags; struct node_entry *ne; read_lock_irqsave(&node_lock, flags); - ne = find_entry(guid); - if (ne) atomic_inc(&ne->refcount); + ne = find_entry_by_guid(guid); read_unlock_irqrestore(&node_lock, flags); return ne; } +struct node_entry *hpsb_nodeid_get_entry(nodeid_t nodeid) +{ + unsigned long flags; + struct node_entry *ne; + + read_lock_irqsave(&node_lock, flags); + ne = find_entry_by_nodeid(nodeid); + read_unlock_irqrestore(&node_lock, flags); + + return ne; +} + struct hpsb_host *hpsb_get_host_by_ne(struct node_entry *ne) { - if (atomic_read(&ne->generation) != get_hpsb_generation()) return NULL; - if (ne->node_id == ne->host->node_id) return ne->host; + if (atomic_read(&ne->generation) != get_hpsb_generation(ne->host)) + return NULL; + if (ne->nodeid == ne->host->node_id) return ne->host; return NULL; } int hpsb_guid_fill_packet(struct node_entry *ne, struct hpsb_packet *pkt) { - if (atomic_read(&ne->generation) != get_hpsb_generation()) return 0; + if (atomic_read(&ne->generation) != get_hpsb_generation(ne->host)) + return 0; pkt->host = ne->host; - pkt->node_id = ne->node_id; + pkt->node_id = ne->nodeid; pkt->generation = atomic_read(&ne->generation); return 1; } -static int nodemgr_reset_handler(void *__hi) -{ - struct host_info *hi = (struct host_info *)__hi; - struct hpsb_host *host = hi->host; - - - lock_kernel(); - - siginitsetinv(¤t->blocked, sigmask(SIGKILL)|sigmask(SIGINT)|sigmask(SIGTERM)); - - strcpy(current->comm, "NodeMngr"); - - unlock_kernel(); - - do { - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(HZ/50); - - if (hi && host) { - nodemgr_node_probe(host); - interruptible_sleep_on(&hi->reset_wait); - } else - break; - - } while (!signal_pending(current) && hi); - - return(0); -} - -static void nodemgr_schedule_thread (void *__hi) -{ - struct host_info *hi = (struct host_info *)__hi; - - hi->ppid = current->pid; - hi->pid = kernel_thread(nodemgr_reset_handler, hi, 0); -} - static void nodemgr_add_host(struct hpsb_host *host) { struct host_info *hi = kmalloc (sizeof (struct host_info), GFP_KERNEL); - int flags; + unsigned long flags; if (!hi) { HPSB_ERR ("Out of memory in Node Manager"); @@ -400,10 +519,7 @@ * until the first bus reset. */ hi->host = host; INIT_LIST_HEAD(&hi->list); - hi->pid = -1; - hi->ppid = -1; - init_waitqueue_head(&hi->reset_wait); - INIT_TQUEUE(&hi->task, nodemgr_schedule_thread, hi); + INIT_TQUEUE(&hi->task, nodemgr_node_probe, host); spin_lock_irqsave (&host_info_lock, flags); list_add_tail (&hi->list, &host_info_list); @@ -416,17 +532,15 @@ { struct list_head *lh; struct host_info *hi = NULL; - int flags; + unsigned long flags; spin_lock_irqsave (&host_info_lock, flags); - lh = host_info_list.next; - while (lh != &host_info_list) { + list_for_each(lh, &host_info_list) { struct host_info *myhi = list_entry(lh, struct host_info, list); if (myhi->host == host) { hi = myhi; break; } - lh = lh->next; } if (hi == NULL) { @@ -434,11 +548,7 @@ goto done_reset_host; } - if (hi->pid >= 0) { - wake_up(&hi->reset_wait); - } else { - schedule_task(&hi->task); - } + schedule_task(&hi->task); done_reset_host: spin_unlock_irqrestore (&host_info_lock, flags); @@ -451,12 +561,14 @@ struct list_head *lh; struct host_info *hi = NULL; struct node_entry *ne; - int flags; + unsigned long flags; + + /* Make sure we have no active scans */ + flush_scheduled_tasks(); /* First remove all node entries for this host */ write_lock_irqsave(&node_lock, flags); - lh = node_list.next; - while (lh != &node_list) { + list_for_each(lh, &node_list) { ne = list_entry(lh, struct node_entry, list); /* Only checking this host */ @@ -464,19 +576,16 @@ continue; nodemgr_remove_node(ne); - lh = lh->next; } write_unlock_irqrestore(&node_lock, flags); spin_lock_irqsave (&host_info_lock, flags); - lh = host_info_list.next; - while (lh != &host_info_list) { + list_for_each(lh, &host_info_list) { struct host_info *myhi = list_entry(lh, struct host_info, list); if (myhi->host == host) { hi = myhi; break; } - lh = lh->next; } if (hi == NULL) { @@ -484,21 +593,7 @@ goto done_remove_host; } - mb(); - - if (hi->pid >= 0) { - /* Kill the proc */ - kill_proc(hi->pid, SIGKILL, 1); - - /* XXX: We need a better way... */ - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(HZ/20); - - /* Now tell the parent to sluff off the zombied body */ - mb(); - kill_proc(hi->ppid, SIGCHLD, 1); - } - + list_del(&hi->list); kfree (hi); done_remove_host: @@ -507,7 +602,7 @@ return; } -static struct hpsb_highlevel_ops guid_ops = { +static struct hpsb_highlevel_ops nodemgr_ops = { add_host: nodemgr_add_host, host_reset: nodemgr_host_reset, remove_host: nodemgr_remove_host, @@ -517,7 +612,7 @@ void init_ieee1394_nodemgr(void) { - hl = hpsb_register_highlevel("Node manager", &guid_ops); + hl = hpsb_register_highlevel("Node manager", &nodemgr_ops); if (!hl) { HPSB_ERR("Out of memory during ieee1394 initialization"); } diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/nodemgr.h linux/drivers/ieee1394/nodemgr.h --- v2.4.8/linux/drivers/ieee1394/nodemgr.h Sun Aug 12 13:27:59 2001 +++ linux/drivers/ieee1394/nodemgr.h Sun Aug 12 12:39:02 2001 @@ -20,41 +20,76 @@ #ifndef _IEEE1394_NODEMGR_H #define _IEEE1394_NODEMGR_H +/* '1' '3' '9' '4' in ASCII */ +#define IEEE1394_BUSID_MAGIC 0x31333934 -/* - * General information: Finding out which GUID belongs to which node is done by - * sending packets and therefore waiting for the answers. Wherever it is - * mentioned that a node is inaccessible this could just as well mean that we - * just don't know yet (usually, bus reset handlers can't rely on GUIDs being - * associated with current nodes). - */ - -struct node_entry; -typedef struct node_entry *hpsb_guid_t; - +/* This is the start of a Node entry structure. It should be a stable API + * for which to gather info from the Node Manager about devices attached + * to the bus. */ +struct bus_options { + u8 irmc; /* Iso Resource Manager Capable */ + u8 cmc; /* Cycle Master Capable */ + u8 isc; /* Iso Capable */ + u8 bmc; /* Bus Master Capable */ + u8 pmc; /* Power Manager Capable (PNP spec) */ + u8 cyc_clk_acc; /* Cycle clock accuracy */ + u8 generation; /* Incremented when configrom changes */ + u8 lnkspd; /* Link speed */ + u16 max_rec; /* Maximum packet size node can receive */ +}; + +#define UNIT_DIRECTORY_VENDOR_ID 0x01 +#define UNIT_DIRECTORY_MODEL_ID 0x02 +#define UNIT_DIRECTORY_SPECIFIER_ID 0x04 +#define UNIT_DIRECTORY_VERSION 0x08 + +struct unit_directory { + struct list_head list; + octlet_t address; /* Address of the unit directory on the node */ + u8 flags; /* Indicates which entries were read */ + quadlet_t vendor_id; + char *vendor_name; + quadlet_t model_id; + char *model_name; + quadlet_t specifier_id; + quadlet_t version; +}; + +struct node_entry { + struct list_head list; + u64 guid; /* GUID of this node */ + struct hpsb_host *host; /* Host this node is attached to */ + nodeid_t nodeid; /* NodeID */ + struct bus_options busopt; /* Bus Options */ + atomic_t generation; /* Synced with hpsb generation */ + + /* The following is read from the config rom */ + u32 vendor_id; + u32 capabilities; + struct list_head unit_directories; +}; /* - * Returns a guid handle (which has its reference count incremented) or NULL if - * there is the GUID in question is not known of. Getting a valid handle does - * not mean that the node with this GUID is currently accessible (might not be - * plugged in or powered down). + * Returns a node entry (which has its reference count incremented) or NULL if + * the GUID in question is not known. Getting a valid entry does not mean that + * the node with this GUID is currently accessible (might be powered down). */ -hpsb_guid_t hpsb_guid_get_handle(u64 guid); +struct node_entry *hpsb_guid_get_entry(u64 guid); + +/* Same as above, but use the nodeid to get an node entry. This is not + * fool-proof by itself, since the nodeid can change. */ +struct node_entry *hpsb_nodeid_get_entry(nodeid_t nodeid); /* - * If the handle refers to a local host, this function will return the pointer + * If the entry refers to a local host, this function will return the pointer * to the hpsb_host structure. It will return NULL otherwise. Once you have * established it is a local host, you can use that knowledge from then on (the - * GUID won't wander to an external node). - * - * Note that the local GUID currently isn't collected, so this will always - * return NULL. - */ -struct hpsb_host *hpsb_get_host_by_ne(hpsb_guid_t handle); + * GUID won't wander to an external node). */ +struct hpsb_host *hpsb_get_host_by_ne(struct node_entry *ne); /* * This will fill in the given, pre-initialised hpsb_packet with the current - * information from the GUID handle (host, node ID, generation number). It will + * information from the node entry (host, node ID, generation number). It will * return false if the node owning the GUID is not accessible (and not modify the * hpsb_packet) and return true otherwise. * @@ -63,7 +98,7 @@ * number). It will at least reliably fail so that you don't accidentally and * unknowingly send your packet to the wrong node. */ -int hpsb_guid_fill_packet(hpsb_guid_t handle, struct hpsb_packet *pkt); +int hpsb_guid_fill_packet(struct node_entry *ne, struct hpsb_packet *pkt); void init_ieee1394_nodemgr(void); diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/ohci1394.c linux/drivers/ieee1394/ohci1394.c --- v2.4.8/linux/drivers/ieee1394/ohci1394.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/ieee1394/ohci1394.c Thu Aug 16 09:49:49 2001 @@ -172,7 +172,7 @@ MODULE_DEVICE_TABLE(pci, ohci1394_pci_tbl); static char version[] __devinitdata = - "v0.50 15/Jul/01 Ben Collins "; + "v0.51 08/08/01 Ben Collins "; /* Module Parameters */ MODULE_PARM(attempt_root,"i"); @@ -200,7 +200,8 @@ static u8 get_phy_reg(struct ti_ohci *ohci, u8 addr) { - int i, flags; + int i; + unsigned long flags; quadlet_t r; spin_lock_irqsave (&ohci->phy_reg_lock, flags); @@ -217,7 +218,7 @@ r = reg_read(ohci, OHCI1394_PhyControl); if (i >= OHCI_LOOP_COUNT) - PRINT (KERN_ERR, ohci->id, "Get PHY Reg timeout [0x%08x/0x%08x/%d]\n", + PRINT (KERN_ERR, ohci->id, "Get PHY Reg timeout [0x%08x/0x%08x/%d]", r, r & 0x80000000, i); spin_unlock_irqrestore (&ohci->phy_reg_lock, flags); @@ -227,7 +228,8 @@ static void set_phy_reg(struct ti_ohci *ohci, u8 addr, u8 data) { - int i, flags; + int i; + unsigned long flags; u32 r; spin_lock_irqsave (&ohci->phy_reg_lock, flags); @@ -243,7 +245,7 @@ } if (i == OHCI_LOOP_COUNT) - PRINT (KERN_ERR, ohci->id, "Set PHY Reg timeout [0x%08x/0x%08x/%d]\n", + PRINT (KERN_ERR, ohci->id, "Set PHY Reg timeout [0x%08x/0x%08x/%d]", r, r & 0x00004000, i); spin_unlock_irqrestore (&ohci->phy_reg_lock, flags); @@ -263,7 +265,7 @@ return; } -static int handle_selfid(struct ti_ohci *ohci, struct hpsb_host *host, +static void handle_selfid(struct ti_ohci *ohci, struct hpsb_host *host, int phyid, int isroot) { quadlet_t *q = ohci->selfid_buf_cpu; @@ -295,7 +297,7 @@ PRINT(KERN_ERR, ohci->id, "Too many errors on SelfID error reception, giving up!"); } - return -1; + return; } size = ((self_id_count & 0x00001FFC) >> 2) - 1; @@ -326,7 +328,8 @@ DBGMSG(ohci->id, "SelfID complete"); hpsb_selfid_complete(host, phyid, isroot); - return 0; + + return; } static int ohci_soft_reset(struct ti_ohci *ohci) { @@ -427,7 +430,7 @@ d->pending_first = NULL; d->pending_last = NULL; - DBGMSG(ohci->id, "Transmit dma ctx=%d initialized", d->ctx); + DBGMSG(ohci->id, "Transmit DMA ctx=%d initialized", d->ctx); } /* Count the number of available iso contexts */ @@ -475,6 +478,16 @@ /* Set Link Power Status (LPS) */ reg_write(ohci, OHCI1394_HCControlSet, 0x00080000); + /* After enabling LPS, we need to wait for the connection + * between phy and link to be established. This should be + * signaled by the LPS bit becoming 1, but this happens + * immediately. Instead we wait for reads from LinkControl to + * give a valid result, i.e. not 0xffffffff. */ + while (reg_read(ohci, OHCI1394_LinkControlSet) == 0xffffffff) { + DBGMSG(ohci->id, "waiting for phy-link connection"); + mdelay(2); + } + /* Set the bus number */ reg_write(ohci, OHCI1394_NodeID, 0x0000ffc0); @@ -640,11 +653,12 @@ u32 cycleTimer; int idx = d->prg_ind; - DBGMSG(ohci->id, "Inserting packet for node %d, tlabel=%d, tcode=0x%x, speed=%d\n", + DBGMSG(ohci->id, "Inserting packet for node %d, tlabel=%d, tcode=0x%x, speed=%d", packet->node_id, packet->tlabel, packet->tcode, packet->speed_code); d->prg_cpu[idx]->begin.address = 0; d->prg_cpu[idx]->begin.branchAddress = 0; + if (d->ctx==1) { /* * For response packets, we need to put a timeout value in @@ -749,7 +763,7 @@ d->prg_cpu[idx]->end.branchAddress = 0; d->prg_cpu[idx]->end.status = 0; - DBGMSG(ohci->id, "iso xmit context info: header[%08x %08x]\n" + DBGMSG(ohci->id, "Iso xmit context info: header[%08x %08x]\n" " begin=%08x %08x %08x %08x\n" " %08x %08x %08x %08x\n" " end =%08x %08x %08x %08x", @@ -876,7 +890,7 @@ switch (cmd) { case RESET_BUS: - DBGMSG(ohci->id, "Bus reset requested%s", + DBGMSG(ohci->id, "devctl: Bus reset requested%s", ((host->attempt_root || attempt_root) ? " and attempting to become root" : "")); set_phy_reg_mask (ohci, 1, 0x40 | ((host->attempt_root || attempt_root) ? @@ -1066,7 +1080,8 @@ quadlet_t event, node_id; struct ti_ohci *ohci = (struct ti_ohci *)dev_id; struct hpsb_host *host = ohci->host; - int phyid = -1, isroot = 0, flags; + int phyid = -1, isroot = 0; + unsigned long flags; /* Read the interrupt event register. We don't clear the bus reset * here. We wait till we get a selfid complete interrupt and clear @@ -1074,7 +1089,7 @@ spin_lock_irqsave(&ohci->event_lock, flags); event = reg_read(ohci, OHCI1394_IntEventClear); reg_write(ohci, OHCI1394_IntEventClear, - event & ~(OHCI1394_selfIDComplete|OHCI1394_busReset)); + event & ~(OHCI1394_selfIDComplete | OHCI1394_busReset)); spin_unlock_irqrestore(&ohci->event_lock, flags); if (!event) return; @@ -1091,7 +1106,7 @@ /* Someone wants a bus reset. Better watch what you wish for... */ if (event & OHCI1394_busReset) { if (!host->in_bus_reset) { - DBGMSG(ohci->id, "Bus reset requested%s", + DBGMSG(ohci->id, "irq_handler: Bus reset requested%s", ((host->attempt_root || attempt_root) ? " and attempting to become root" : "")); @@ -1263,7 +1278,7 @@ /* Make sure we handle everything, just in case we accidentally * enabled an interrupt that we didn't write a handler for. */ if (event) - PRINT(KERN_ERR, ohci->id, "Unhandled interrupt(s) 0x%08x\n", + PRINT(KERN_ERR, ohci->id, "Unhandled interrupt(s) 0x%08x", event); } @@ -1331,7 +1346,8 @@ struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci); unsigned int split_left, idx, offset, rescount; unsigned char tcode; - int length, bytes_left, ack, flags; + int length, bytes_left, ack; + unsigned long flags; quadlet_t *buf_ptr; char *split_ptr; char msg[256]; @@ -1367,7 +1383,7 @@ * over more than one descriptor. The next case is where * it's all in the first descriptor. */ if ((offset + length) > d->buf_size) { - DBGMSG(ohci->id,"Split packet rcv'd\n"); + DBGMSG(ohci->id,"Split packet rcv'd"); if (length > d->split_buf_size) { ohci1394_stop_context(ohci, d->ctrlClear, "Split packet size exceeded"); @@ -1417,7 +1433,7 @@ buf_ptr += offset/4; } } else { - DBGMSG(ohci->id,"Single packet rcv'd\n"); + DBGMSG(ohci->id,"Single packet rcv'd"); memcpy(d->spb, buf_ptr, length); offset += length; buf_ptr += length/4; @@ -1837,7 +1853,7 @@ #define cf_put_4bytes(cr, b1, b2, b3, b4) \ (((cr)->data++)[0] = cpu_to_be32(((b1) << 24) | ((b2) << 16) | ((b3) << 8) | (b4))) -#define cf_put_keyval(cr, key, val) (((cr)->data++)[0] = cpu_to_be32((key) << 24) | (val)) +#define cf_put_keyval(cr, key, val) (((cr)->data++)[0] = cpu_to_be32(((key) << 24) | (val))) static inline void cf_put_crc16(struct config_rom_ptr *cr, int unit) { @@ -1851,7 +1867,7 @@ { if (cr->unitdir[unit].refer != NULL) { *cr->unitdir[unit].refer |= - cr->data - cr->unitdir[unit].refer; + cpu_to_be32 (cr->data - cr->unitdir[unit].refer); cf_put_crc16(cr, cr->unitdir[unit].refunit); } cr->unitnum = unit; @@ -1891,7 +1907,7 @@ cf_put_1quad(&cr, reg_read(ohci, OHCI1394_GUIDLo)); cf_unit_end(&cr); - DBGMSG(ohci->id, "GUID: %08x:%08x\n", reg_read(ohci, OHCI1394_GUIDHi), + DBGMSG(ohci->id, "GUID: %08x:%08x", reg_read(ohci, OHCI1394_GUIDHi), reg_read(ohci, OHCI1394_GUIDLo)); /* IEEE P1212 suggests the initial ROM header CRC should only @@ -1962,10 +1978,10 @@ cf_put_4bytes(&cr, 'I', 'P', 'v', '6'); cf_unit_end(&cr); - return; + ohci->csr_config_rom_length = cr.data - ohci->csr_config_rom_cpu; } -static size_t get_ohci_rom(struct hpsb_host *host, const quadlet_t **ptr) +static size_t ohci_get_rom(struct hpsb_host *host, const quadlet_t **ptr) { struct ti_ohci *ohci=host->hostdata; @@ -1974,7 +1990,7 @@ *ptr = ohci->csr_config_rom_cpu; - return sizeof(ohci->csr_config_rom_cpu); + return ohci->csr_config_rom_length * 4; } int ohci_compare_swap(struct ti_ohci *ohci, quadlet_t *data, @@ -2010,7 +2026,7 @@ name: OHCI1394_DRIVER_NAME, initialize_host: ohci_initialize, release_host: ohci_remove, - get_rom: get_ohci_rom, + get_rom: ohci_get_rom, transmit_packet: ohci_transmit, devctl: ohci_devctl, hw_csr_reg: ohci_hw_csr_reg, @@ -2329,7 +2345,7 @@ block_swab32(data, 1); break; default: - PRINT_G(KERN_ERR, "Invalid tcode in packet_swab (0x%x)\n", tcode); + PRINT_G(KERN_ERR, "Invalid tcode in packet_swab (0x%x)", tcode); break; } return; @@ -2418,7 +2434,7 @@ return -ENXIO; } if ((ret = pci_module_init(&ohci1394_driver))) { - PRINT_G(KERN_ERR, "PCI module init failed\n"); + PRINT_G(KERN_ERR, "PCI module init failed"); hpsb_unregister_lowlevel(&ohci_template); return ret; } diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/ohci1394.h linux/drivers/ieee1394/ohci1394.h --- v2.4.8/linux/drivers/ieee1394/ohci1394.h Wed Jul 25 17:10:20 2001 +++ linux/drivers/ieee1394/ohci1394.h Sun Aug 12 12:39:02 2001 @@ -159,6 +159,7 @@ /* buffer for csr config rom */ quadlet_t *csr_config_rom_cpu; dma_addr_t csr_config_rom_bus; + int csr_config_rom_length; unsigned int max_packet_size; diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/pcilynx.c linux/drivers/ieee1394/pcilynx.c --- v2.4.8/linux/drivers/ieee1394/pcilynx.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/ieee1394/pcilynx.c Sun Aug 12 12:39:02 2001 @@ -58,20 +58,10 @@ #define PRINTD(level, card, fmt, args...) do {} while (0) #endif -static struct pci_device_id pcilynx_pci_tbl[] __devinitdata = { - { - vendor: PCI_VENDOR_ID_TI, - device: PCI_DEVICE_ID_TI_PCILYNX, - subvendor: PCI_ANY_ID, - subdevice: PCI_ANY_ID, - }, - { } /* Terminating entry */ -}; -MODULE_DEVICE_TABLE(pci, pcilynx_pci_tbl); static struct ti_lynx cards[MAX_PCILYNX_CARDS]; static int num_of_cards = 0; - +static struct hpsb_host_template lynx_template; /* * PCL handling functions. @@ -152,10 +142,8 @@ #endif -static int add_card(struct pci_dev *dev); -static void remove_card(struct ti_lynx *lynx); -static int init_driver(void); - +static int add_card(struct pci_dev *dev, const struct pci_device_id *devid); +static void remove_card(struct pci_dev *dev); @@ -451,6 +439,7 @@ } +#if 0 static int lynx_detect(struct hpsb_host_template *tmpl) { struct hpsb_host *host; @@ -470,6 +459,7 @@ return num_of_cards; } +#endif static int lynx_initialize(struct hpsb_host *host) { @@ -595,7 +585,7 @@ if (host != NULL) { lynx = host->hostdata; - remove_card(lynx); + remove_card(lynx->dev); } else { #ifdef CONFIG_IEEE1394_PCILYNX_PORTS unregister_chrdev(PCILYNX_MAJOR, PCILYNX_DRIVER_NAME); @@ -782,7 +772,7 @@ static struct file_operations aux_ops = { - owner: THIS_MODULE, + OWNER_THIS_MODULE read: mem_read, write: mem_write, poll: aux_poll, @@ -807,18 +797,23 @@ enum { t_rom, t_aux, t_ram } type; struct memdata *md; + V22_COMPAT_MOD_INC_USE_COUNT; + if (cid < PCILYNX_MINOR_AUX_START) { /* just for completeness */ + V22_COMPAT_MOD_DEC_USE_COUNT; return -ENXIO; } else if (cid < PCILYNX_MINOR_ROM_START) { cid -= PCILYNX_MINOR_AUX_START; if (cid >= num_of_cards || !cards[cid].aux_port) { + V22_COMPAT_MOD_DEC_USE_COUNT; return -ENXIO; } type = t_aux; } else if (cid < PCILYNX_MINOR_RAM_START) { cid -= PCILYNX_MINOR_ROM_START; if (cid >= num_of_cards || !cards[cid].local_rom) { + V22_COMPAT_MOD_DEC_USE_COUNT; return -ENXIO; } type = t_rom; @@ -827,16 +822,17 @@ * It is currently used inside the driver! */ cid -= PCILYNX_MINOR_RAM_START; if (cid >= num_of_cards || !cards[cid].local_ram) { + V22_COMPAT_MOD_DEC_USE_COUNT; return -ENXIO; } type = t_ram; } md = (struct memdata *)kmalloc(sizeof(struct memdata), SLAB_KERNEL); - if (md == NULL) + if (md == NULL) { + V22_COMPAT_MOD_DEC_USE_COUNT; return -ENOMEM; - - MOD_INC_USE_COUNT; + } md->lynx = &cards[cid]; md->cid = cid; @@ -866,7 +862,7 @@ kfree(md); - MOD_DEC_USE_COUNT; + V22_COMPAT_MOD_DEC_USE_COUNT; return 0; } @@ -1210,8 +1206,7 @@ spin_unlock(&lynx->iso_rcv.lock); - queue_task(&lynx->iso_rcv.tq, &tq_immediate); - mark_bh(IMMEDIATE_BH); + tasklet_schedule(&lynx->iso_rcv.tq); } if (intmask & PCI_INT_DMA_HLT(CHANNEL_ASYNC_SEND)) { @@ -1339,13 +1334,14 @@ } -static int add_card(struct pci_dev *dev) +static int __devinit add_card(struct pci_dev *dev, + const struct pci_device_id *devid) { #define FAIL(fmt, args...) do { \ PRINT_G(KERN_ERR, fmt , ## args); \ num_of_cards--; \ - remove_card(lynx); \ - return 1; \ + remove_card(dev); \ + return -1; \ } while (0) struct ti_lynx *lynx; /* shortcut to currently handled device */ @@ -1355,27 +1351,31 @@ PRINT_G(KERN_WARNING, "cannot handle more than %d cards. " "Adjust MAX_PCILYNX_CARDS in pcilynx.h.", MAX_PCILYNX_CARDS); - return 1; + return -1; } lynx = &cards[num_of_cards++]; - lynx->id = num_of_cards-1; - lynx->dev = dev; - lynx->host->pdev = dev; - - lynx->lock = SPIN_LOCK_UNLOCKED; - lynx->phy_reg_lock = SPIN_LOCK_UNLOCKED; - - if (pci_set_dma_mask(dev, 0xffffffff)) { + if (pci_set_dma_mask(dev, 0xffffffff)) FAIL("DMA address limits not supported for PCILynx hardware %d", lynx->id); - } - if (pci_enable_device(dev)) { + if (pci_enable_device(dev)) FAIL("failed to enable PCILynx hardware %d", lynx->id); - } pci_set_master(dev); + lynx->host = hpsb_get_host(&lynx_template, 0); + if (!lynx->host) + FAIL("failed to allocate host structure"); + + lynx->state = have_host_struct; + + lynx->id = num_of_cards-1; + lynx->dev = dev; + lynx->host->pdev = dev; + + lynx->lock = SPIN_LOCK_UNLOCKED; + lynx->phy_reg_lock = SPIN_LOCK_UNLOCKED; + #ifndef CONFIG_IEEE1394_PCILYNX_LOCALRAM lynx->pcl_mem = pci_alloc_consistent(dev, LOCALRAM_SIZE, &lynx->pcl_mem_dma); @@ -1475,7 +1475,8 @@ init_waitqueue_head(&lynx->aux_intr_wait); #endif - INIT_TQUEUE(&lynx->iso_rcv.tq, (void (*)(void*))iso_rcv_bh, lynx); + tasklet_init(&lynx->iso_rcv.tq, (void (*)(unsigned long))iso_rcv_bh, + (unsigned long)lynx); lynx->iso_rcv.lock = SPIN_LOCK_UNLOCKED; @@ -1504,10 +1505,14 @@ #undef FAIL } -static void remove_card(struct ti_lynx *lynx) +static void remove_card(struct pci_dev *dev) { + struct ti_lynx *lynx; int i; + lynx = cards; + while (lynx->dev != dev) lynx++; + switch (lynx->state) { case have_intr: reg_write(lynx, PCI_INT_ENABLE, 0); @@ -1538,13 +1543,18 @@ pci_free_consistent(lynx->dev, LOCALRAM_SIZE, lynx->pcl_mem, lynx->pcl_mem_dma); #endif + case have_host_struct: + /* FIXME - verify host freeing */ case clear:; /* do nothing - already freed */ } + tasklet_kill(&lynx->iso_rcv.tq); + lynx->state = clear; } +#if 0 static int init_driver() { struct pci_dev *dev = NULL; @@ -1580,6 +1590,7 @@ return 0; } +#endif static size_t get_lynx_rom(struct hpsb_host *host, const quadlet_t **ptr) @@ -1588,40 +1599,60 @@ return sizeof(lynx_csr_rom); } -struct hpsb_host_template *get_lynx_template(void) -{ - static struct hpsb_host_template tmpl = { - name: "pcilynx", - detect_hosts: lynx_detect, - initialize_host: lynx_initialize, - release_host: lynx_release, - get_rom: get_lynx_rom, - transmit_packet: lynx_transmit, - devctl: lynx_devctl - }; +static struct hpsb_host_template lynx_template = { + name: PCILYNX_DRIVER_NAME, + initialize_host: lynx_initialize, + release_host: lynx_release, + get_rom: get_lynx_rom, + transmit_packet: lynx_transmit, + devctl: lynx_devctl +}; - return &tmpl; -} +static struct pci_device_id pci_table[] __devinitdata = { + { + vendor: PCI_VENDOR_ID_TI, + device: PCI_DEVICE_ID_TI_PCILYNX, + subvendor: PCI_ANY_ID, + subdevice: PCI_ANY_ID, + }, + { } /* Terminating entry */ +}; +static struct pci_driver lynx_pcidriver = { + name: PCILYNX_DRIVER_NAME, + id_table: pci_table, + probe: add_card, + remove: remove_card, +}; MODULE_AUTHOR("Andreas E. Bombe "); MODULE_DESCRIPTION("driver for Texas Instruments PCI Lynx IEEE-1394 controller"); MODULE_SUPPORTED_DEVICE("pcilynx"); +MODULE_DEVICE_TABLE(pci, pci_table); static void __exit pcilynx_cleanup(void) { - hpsb_unregister_lowlevel(get_lynx_template()); + pci_unregister_driver(&lynx_pcidriver); + hpsb_unregister_lowlevel(&lynx_template); PRINT_G(KERN_INFO, "removed " PCILYNX_DRIVER_NAME " module"); } static int __init pcilynx_init(void) { - if (hpsb_register_lowlevel(get_lynx_template())) { + int ret; + + if (hpsb_register_lowlevel(&lynx_template)) { PRINT_G(KERN_ERR, "registering failed"); return -ENXIO; - } else { - return 0; } + + ret = pci_module_init(&lynx_pcidriver); + if (ret < 0) { + PRINT_G(KERN_ERR, "PCI module init failed"); + hpsb_unregister_lowlevel(&lynx_template); + } + + return ret; } module_init(pcilynx_init); diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/pcilynx.h linux/drivers/ieee1394/pcilynx.h --- v2.4.8/linux/drivers/ieee1394/pcilynx.h Sun Feb 4 21:34:18 2001 +++ linux/drivers/ieee1394/pcilynx.h Sun Aug 12 12:39:02 2001 @@ -40,7 +40,7 @@ u32 product; } phyic; - enum { clear, have_intr, have_aux_buf, have_pcl_mem, + enum { clear, have_host_struct, have_intr, have_aux_buf, have_pcl_mem, have_1394_buffers, have_iomappings } state; /* remapped memory spaces */ @@ -106,7 +106,7 @@ pcl_t pcl_start; int chan_count; int next, last, used, running; - struct tq_struct tq; + struct tasklet_struct tq; spinlock_t lock; } iso_rcv; }; @@ -125,23 +125,23 @@ /* * Register read and write helper functions. */ -inline static void reg_write(const struct ti_lynx *lynx, int offset, u32 data) +static inline void reg_write(const struct ti_lynx *lynx, int offset, u32 data) { writel(data, lynx->registers + offset); } -inline static u32 reg_read(const struct ti_lynx *lynx, int offset) +static inline u32 reg_read(const struct ti_lynx *lynx, int offset) { return readl(lynx->registers + offset); } -inline static void reg_set_bits(const struct ti_lynx *lynx, int offset, +static inline void reg_set_bits(const struct ti_lynx *lynx, int offset, u32 mask) { reg_write(lynx, offset, (reg_read(lynx, offset) | mask)); } -inline static void reg_clear_bits(const struct ti_lynx *lynx, int offset, +static inline void reg_clear_bits(const struct ti_lynx *lynx, int offset, u32 mask) { reg_write(lynx, offset, (reg_read(lynx, offset) & ~mask)); @@ -370,7 +370,7 @@ #ifdef CONFIG_IEEE1394_PCILYNX_LOCALRAM -inline static void put_pcl(const struct ti_lynx *lynx, pcl_t pclid, +static inline void put_pcl(const struct ti_lynx *lynx, pcl_t pclid, const struct ti_pcl *pcl) { int i; @@ -378,11 +378,11 @@ u32 *out = (u32 *)(lynx->local_ram + pclid * sizeof(struct ti_pcl)); for (i = 0; i < 32; i++, out++, in++) { - writel(cpu_to_le32(*in), out); + writel(*in, out); } } -inline static void get_pcl(const struct ti_lynx *lynx, pcl_t pclid, +static inline void get_pcl(const struct ti_lynx *lynx, pcl_t pclid, struct ti_pcl *pcl) { int i; @@ -390,25 +390,25 @@ u32 *in = (u32 *)(lynx->local_ram + pclid * sizeof(struct ti_pcl)); for (i = 0; i < 32; i++, out++, in++) { - *out = le32_to_cpu(readl(in)); + *out = readl(in); } } -inline static u32 pcl_bus(const struct ti_lynx *lynx, pcl_t pclid) +static inline u32 pcl_bus(const struct ti_lynx *lynx, pcl_t pclid) { return pci_resource_start(lynx->dev, 1) + pclid * sizeof(struct ti_pcl); } #else /* CONFIG_IEEE1394_PCILYNX_LOCALRAM */ -inline static void put_pcl(const struct ti_lynx *lynx, pcl_t pclid, +static inline void put_pcl(const struct ti_lynx *lynx, pcl_t pclid, const struct ti_pcl *pcl) { memcpy_le32((u32 *)(lynx->pcl_mem + pclid * sizeof(struct ti_pcl)), (u32 *)pcl, sizeof(struct ti_pcl)); } -inline static void get_pcl(const struct ti_lynx *lynx, pcl_t pclid, +static inline void get_pcl(const struct ti_lynx *lynx, pcl_t pclid, struct ti_pcl *pcl) { memcpy_le32((u32 *)pcl, @@ -416,7 +416,7 @@ sizeof(struct ti_pcl)); } -inline static u32 pcl_bus(const struct ti_lynx *lynx, pcl_t pclid) +static inline u32 pcl_bus(const struct ti_lynx *lynx, pcl_t pclid) { return lynx->pcl_mem_dma + pclid * sizeof(struct ti_pcl); } @@ -427,14 +427,14 @@ #if defined (CONFIG_IEEE1394_PCILYNX_LOCALRAM) || defined (__BIG_ENDIAN) typedef struct ti_pcl pcltmp_t; -inline static struct ti_pcl *edit_pcl(const struct ti_lynx *lynx, pcl_t pclid, +static inline struct ti_pcl *edit_pcl(const struct ti_lynx *lynx, pcl_t pclid, pcltmp_t *tmp) { get_pcl(lynx, pclid, tmp); return tmp; } -inline static void commit_pcl(const struct ti_lynx *lynx, pcl_t pclid, +static inline void commit_pcl(const struct ti_lynx *lynx, pcl_t pclid, pcltmp_t *tmp) { put_pcl(lynx, pclid, tmp); @@ -443,20 +443,20 @@ #else typedef int pcltmp_t; /* just a dummy */ -inline static struct ti_pcl *edit_pcl(const struct ti_lynx *lynx, pcl_t pclid, +static inline struct ti_pcl *edit_pcl(const struct ti_lynx *lynx, pcl_t pclid, pcltmp_t *tmp) { return lynx->pcl_mem + pclid * sizeof(struct ti_pcl); } -inline static void commit_pcl(const struct ti_lynx *lynx, pcl_t pclid, +static inline void commit_pcl(const struct ti_lynx *lynx, pcl_t pclid, pcltmp_t *tmp) { } #endif -inline static void run_sub_pcl(const struct ti_lynx *lynx, pcl_t pclid, int idx, +static inline void run_sub_pcl(const struct ti_lynx *lynx, pcl_t pclid, int idx, int dmachan) { reg_write(lynx, DMA0_CURRENT_PCL + dmachan * 0x20, @@ -465,7 +465,7 @@ DMA_CHAN_CTRL_ENABLE | DMA_CHAN_CTRL_LINK); } -inline static void run_pcl(const struct ti_lynx *lynx, pcl_t pclid, int dmachan) +static inline void run_pcl(const struct ti_lynx *lynx, pcl_t pclid, int dmachan) { run_sub_pcl(lynx, pclid, 0, dmachan); } diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/raw1394.c linux/drivers/ieee1394/raw1394.c --- v2.4.8/linux/drivers/ieee1394/raw1394.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/ieee1394/raw1394.c Sun Aug 12 12:41:36 2001 @@ -20,8 +20,11 @@ #include #include #include +#include +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,0) #include +#endif #include "ieee1394.h" #include "ieee1394_types.h" @@ -43,9 +46,10 @@ static devfs_handle_t devfs_handle; -LIST_HEAD(host_info_list); +static LIST_HEAD(host_info_list); static int host_count; -spinlock_t host_info_lock = SPIN_LOCK_UNLOCKED; +static spinlock_t host_info_lock = SPIN_LOCK_UNLOCKED; +static atomic_t internal_generation = ATOMIC_INIT(0); static struct hpsb_highlevel *hl_handle; @@ -69,7 +73,7 @@ return req; } -inline static struct pending_request *alloc_pending_request(void) +static inline struct pending_request *alloc_pending_request(void) { return __alloc_pending_request(SLAB_KERNEL); } @@ -148,6 +152,8 @@ host_count++; spin_unlock_irq(&host_info_lock); } + + atomic_inc(&internal_generation); } @@ -156,13 +162,11 @@ struct list_head *lh; struct host_info *hi; - lh = host_info_list.next; - while (lh != &host_info_list) { + list_for_each(lh, &host_info_list) { hi = list_entry(lh, struct host_info, list); if (hi->host == host) { return hi; } - lh = lh->next; } return NULL; @@ -202,16 +206,14 @@ hi = find_host_info(host); if (hi != NULL) { - lh = hi->file_info_list.next; - - while (lh != &hi->file_info_list) { + list_for_each(lh, &hi->file_info_list) { fi = list_entry(lh, struct file_info, list); req = __alloc_pending_request(SLAB_ATOMIC); if (req != NULL) { req->file_info = fi; req->req.type = RAW1394_REQ_BUS_RESET; - req->req.generation = get_hpsb_generation(); + req->req.generation = get_hpsb_generation(host); req->req.misc = (host->node_id << 16) | host->node_count; if (fi->protocol_version > 3) { @@ -221,11 +223,11 @@ queue_complete_req(req); } - - lh = lh->next; } } spin_unlock_irqrestore(&host_info_lock, flags); + + atomic_inc(&internal_generation); } static void iso_receive(struct hpsb_host *host, int channel, quadlet_t *data, @@ -248,8 +250,7 @@ hi = find_host_info(host); if (hi != NULL) { - for (lh = hi->file_info_list.next; lh != &hi->file_info_list; - lh = lh->next) { + list_for_each(lh, &hi->file_info_list) { fi = list_entry(lh, struct file_info, list); if (!(fi->listen_channels & (1ULL << channel))) { @@ -279,7 +280,7 @@ req->ibs = ibs; req->data = ibs->data; req->req.type = RAW1394_REQ_ISO_RECEIVE; - req->req.generation = get_hpsb_generation(); + req->req.generation = get_hpsb_generation(host); req->req.misc = 0; req->req.recvb = ptr2int(fi->iso_buffer); req->req.length = MIN(length, fi->iso_buffer_length); @@ -289,10 +290,8 @@ } spin_unlock_irqrestore(&host_info_lock, flags); - lh = reqs.next; - while (lh != &reqs) { + list_for_each(lh, &reqs) { req = list_entry(lh, struct pending_request, list); - lh = lh->next; queue_complete_req(req); } } @@ -317,8 +316,7 @@ hi = find_host_info(host); if (hi != NULL) { - for (lh = hi->file_info_list.next; lh != &hi->file_info_list; - lh = lh->next) { + list_for_each(lh, &hi->file_info_list) { fi = list_entry(lh, struct file_info, list); if (!fi->fcp_buffer) { @@ -348,7 +346,7 @@ req->ibs = ibs; req->data = ibs->data; req->req.type = RAW1394_REQ_FCP_REQUEST; - req->req.generation = get_hpsb_generation(); + req->req.generation = get_hpsb_generation(host); req->req.misc = nodeid | (direction << 16); req->req.recvb = ptr2int(fi->fcp_buffer); req->req.length = length; @@ -358,16 +356,14 @@ } spin_unlock_irqrestore(&host_info_lock, flags); - lh = reqs.next; - while (lh != &reqs) { + list_for_each(lh, &reqs) { req = list_entry(lh, struct pending_request, list); - lh = lh->next; queue_complete_req(req); } } -static ssize_t dev_read(struct file *file, char *buffer, size_t count, +static ssize_t raw1394_read(struct file *file, char *buffer, size_t count, loff_t *offset_is_ignored) { struct file_info *fi = (struct file_info *)file->private_data; @@ -421,7 +417,7 @@ fi->state = initialized; fi->protocol_version = req->req.misc; req->req.error = RAW1394_ERROR_NONE; - req->req.generation = get_hpsb_generation(); + req->req.generation = atomic_read(&internal_generation); break; default: @@ -443,9 +439,9 @@ struct host_info *hi; struct raw1394_khost_list *khl; - if (req->req.generation != get_hpsb_generation()) { + if (req->req.generation != atomic_read(&internal_generation)) { req->req.error = RAW1394_ERROR_GENERATION; - req->req.generation = get_hpsb_generation(); + req->req.generation = atomic_read(&internal_generation); req->req.length = 0; queue_complete_req(req); return sizeof(struct raw1394_request); @@ -461,15 +457,13 @@ req->req.misc = host_count; req->data = (quadlet_t *)khl; - lh = host_info_list.next; - while (lh != &host_info_list) { + list_for_each(lh, &host_info_list) { hi = list_entry(lh, struct host_info, list); khl->nodes = hi->host->node_count; strcpy(khl->name, hi->host->template->name); khl++; - lh = lh->next; } } spin_unlock_irq(&host_info_lock); @@ -504,6 +498,7 @@ if (lh != NULL) { req->req.error = RAW1394_ERROR_NONE; + req->req.generation = get_hpsb_generation(fi->host); req->req.misc = (fi->host->node_id << 16) | fi->host->node_count; if (fi->protocol_version > 3) { @@ -810,9 +805,9 @@ return handle_iso_send(fi, req, node); } - if (req->req.generation != get_hpsb_generation()) { + if (req->req.generation != get_hpsb_generation(fi->host)) { req->req.error = RAW1394_ERROR_GENERATION; - req->req.generation = get_hpsb_generation(); + req->req.generation = get_hpsb_generation(fi->host); req->req.length = 0; queue_complete_req(req); return sizeof(struct raw1394_request); @@ -846,7 +841,7 @@ } -static ssize_t dev_write(struct file *file, const char *buffer, size_t count, +static ssize_t raw1394_write(struct file *file, const char *buffer, size_t count, loff_t *offset_is_ignored) { struct file_info *fi = (struct file_info *)file->private_data; @@ -889,7 +884,7 @@ return retval; } -static unsigned int dev_poll(struct file *file, poll_table *pt) +static unsigned int raw1394_poll(struct file *file, poll_table *pt) { struct file_info *fi = file->private_data; unsigned int mask = POLLOUT | POLLWRNORM; @@ -905,7 +900,7 @@ return mask; } -static int dev_open(struct inode *inode, struct file *file) +static int raw1394_open(struct inode *inode, struct file *file) { struct file_info *fi; @@ -913,14 +908,14 @@ return -ENXIO; } - MOD_INC_USE_COUNT; + V22_COMPAT_MOD_INC_USE_COUNT; fi = kmalloc(sizeof(struct file_info), SLAB_KERNEL); if (fi == NULL) { - MOD_DEC_USE_COUNT; + V22_COMPAT_MOD_DEC_USE_COUNT; return -ENOMEM; } - + memset(fi, 0, sizeof(struct file_info)); INIT_LIST_HEAD(&fi->list); @@ -936,7 +931,7 @@ return 0; } -static int dev_release(struct inode *inode, struct file *file) +static int raw1394_release(struct inode *inode, struct file *file) { struct file_info *fi = file->private_data; struct list_head *lh; @@ -966,15 +961,11 @@ free_pending_request(req); } - if (list_empty(&fi->req_pending)) { - done = 1; - } + if (list_empty(&fi->req_pending)) done = 1; spin_unlock_irq(&fi->reqlists_lock); - if (!done) { - down_interruptible(&fi->complete_sem); - } + if (!done) down_interruptible(&fi->complete_sem); } if (fi->state == connected) { @@ -987,7 +978,7 @@ kfree(fi); - MOD_DEC_USE_COUNT; + V22_COMPAT_MOD_DEC_USE_COUNT; unlock_kernel(); return 0; } @@ -1001,12 +992,12 @@ }; static struct file_operations file_ops = { - owner: THIS_MODULE, - read: dev_read, - write: dev_write, - poll: dev_poll, - open: dev_open, - release: dev_release, + OWNER_THIS_MODULE + read: raw1394_read, + write: raw1394_write, + poll: raw1394_poll, + open: raw1394_open, + release: raw1394_release, }; static int __init init_raw1394(void) diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/sbp2.c linux/drivers/ieee1394/sbp2.c --- v2.4.8/linux/drivers/ieee1394/sbp2.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/ieee1394/sbp2.c Thu Aug 16 09:49:49 2001 @@ -76,29 +76,6 @@ * fdisk, mkfs, etc.). * * - * Module Load Options: - * - * The SBP-2 driver now has a number of module load parameters available for use - * in debugging/testing. Following are the valid parameters - * - * no_bus_scan - Skip the initial scsi bus scan during module load - * (1 = skip bus scan, 0 = perform bus scan, default = 0) - * - * mode_sense_hack - Emulate mode sense for devices like 1394 memory stick readers - * (1 = emulate/fake mode sense, 0 = do not emulate/fake mode sense, default = 0) - * - * max_speed - Force max speed allowed - * (0 = 100mb, 1 = 200mb, 2 = 400mb, default = auto configure) - * - * serialize_io - Force scsi stack to send down one command at a time, for debugging - * (1 = serialize all I/O, 0 = do not serialize I/O, default = 1) - * - * no_large_packets - Force scsi stack to limit max packet size sent down, for debugging - * (1 = limit max transfer size, 0 = do not limit max packet size, default = 0) - * - * (e.g. insmod sbp2 no_bus_scan=1) - * - * * Current Support: * * The SBP-2 driver is still in an early state, but supports a variety of devices. @@ -166,20 +143,6 @@ * define below). * * - * Core IEEE-1394 Stack Changes: - * - * - The IEEE-1394 core stack guid code attempts to read the node unique id from - * each attached device after a bus reset. It currently uses a block read - * request to do this, which "upsets" certain not-well-behaved devices, such as - * some drives from QPS. If you have trouble with your IEEE-1394 storage - * device being detected after loading sbp2, try commenting out the - * init_ieee1394_guid() and cleanup_ieee1394_guid() lines at the bottom of - * ieee1394_core.c (and rebuild ieee1394.o). - * - * - In ohci1394.h, remove the IEEE1394_USE_BOTTOM_HALVES #define, and rebuild. - * This will give you around 30% to 40% performance increase. - * - * * History: * * 07/25/00 - Initial revision (JSG) @@ -257,6 +220,8 @@ * 128KB max transfer limit. * 06/16/01 - Converted DMA interfaces to pci_dma - Ben Collins * list); sema_init(&packet->state_change, 0); packet->state = unused; - packet->generation = get_hpsb_generation(); + packet->generation = get_hpsb_generation(hi->host); packet->data_be = 1; packet->host = hi->host; @@ -988,7 +965,7 @@ static void sbp2_add_host(struct hpsb_host *host) { struct sbp2scsi_host_info *hi; - unsigned int flags; + unsigned long flags; SBP2_DEBUG("sbp2: sbp2_add_host"); @@ -1021,7 +998,7 @@ sbp2_spin_lock(&sbp2_host_info_lock, flags); list_add_tail(&hi->list, &sbp2_host_info_list); sbp2_host_count++; - sbp2_spin_lock(&sbp2_host_info_lock, flags); + sbp2_spin_unlock(&sbp2_host_info_lock, flags); /* * Initialize us to bus reset in progress @@ -1046,19 +1023,19 @@ } /* - * This fuction returns a host info structure from the host structure, in case we have multiple hosts + * This fuction returns a host info structure from the host structure, + * in case we have multiple hosts */ -static struct sbp2scsi_host_info *sbp2_find_host_info(struct hpsb_host *host) { +static struct sbp2scsi_host_info *sbp2_find_host_info(struct hpsb_host *host) +{ struct list_head *lh; struct sbp2scsi_host_info *hi; - lh = sbp2_host_info_list.next; - while (lh != &sbp2_host_info_list) { + list_for_each (lh, &sbp2_host_info_list) { hi = list_entry(lh, struct sbp2scsi_host_info, list); if (hi->host == host) { return hi; } - lh = lh->next; } return(NULL); @@ -1071,7 +1048,7 @@ { struct sbp2scsi_host_info *hi; int i; - unsigned int flags; + unsigned long flags; SBP2_DEBUG("sbp2: sbp2_remove_host"); @@ -1142,12 +1119,14 @@ * This thread doesn't need any user-level access, * so get rid of all our resources */ +#if LINUX_VERSION_CODE > 0x20300 daemonize(); +#endif /* * Set-up a nice name */ - strcpy(current->comm, "sbp2"); + strcpy(current->comm, SBP2_DEVICE_NAME); unlock_kernel(); @@ -1179,35 +1158,22 @@ */ static int sbp2_start_device(struct sbp2scsi_host_info *hi, int node_id) { - quadlet_t node_unique_id_lo, node_unique_id_hi; u64 node_unique_id; struct scsi_id_instance_data *scsi_id = NULL; + struct node_entry *ne; int i; SBP2_DEBUG("sbp2: sbp2_start_device"); - /* - * Let's read the node unique id off of the device (using two quadlet reads for hi and lo) - */ - if (sbp2util_read_quadlet(hi, LOCAL_BUS | node_id, CONFIG_ROM_NODE_UNIQUE_ID_HI_ADDRESS, - &node_unique_id_hi)) { - SBP2_DEBUG("sbp2: Error reading node unique id - bad status"); - return(-EIO); - } - - if (sbp2util_read_quadlet(hi, LOCAL_BUS | node_id, CONFIG_ROM_NODE_UNIQUE_ID_LO_ADDRESS, - &node_unique_id_lo)) { - SBP2_DEBUG("sbp2: Error reading node unique id - bad status"); - return(-EIO); + /* XXX: This will go away once we start using the nodemgr's + * feature subscription API. */ + ne = hpsb_nodeid_get_entry(node_id|(hi->host->node_id & BUS_MASK)); + if (!ne) { + HPSB_ERR("sbp2: Could not find device node"); + return -ENXIO; } - /* - * Spit out the node unique ids we got - */ - SBP2_DEBUG("sbp2: Node %x, node unique id hi = %x", (LOCAL_BUS | node_id), (unsigned int) node_unique_id_hi); - SBP2_DEBUG("sbp2: Node %x, node unique id lo = %x", (LOCAL_BUS | node_id), (unsigned int) node_unique_id_lo); - - node_unique_id = (((u64)node_unique_id_hi) << 32) | ((u64)node_unique_id_lo); + node_unique_id = ne->guid; /* * First, we need to find out whether this is a "new" SBP-2 device plugged in, or one that already @@ -1355,7 +1321,7 @@ scsi_id->node_id = node_id; scsi_id->node_unique_id = node_unique_id; scsi_id->validated = 1; - scsi_id->speed_code = SPEED_S100; + scsi_id->speed_code = SPEED_100; scsi_id->max_payload_size = MAX_PAYLOAD_S100; init_waitqueue_head(&scsi_id->sbp2_login_wait); @@ -1458,7 +1424,7 @@ } /* - * This function trys to determine if a device is a valid SBP-2 device + * This function tries to determine if a device is a valid SBP-2 device */ static int sbp2_check_device(struct sbp2scsi_host_info *hi, int node_id) { @@ -2249,65 +2215,43 @@ */ static int sbp2_max_speed_and_size(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) { - quadlet_t node_options, max_rec; u8 speed_code; + struct node_entry *ne; SBP2_DEBUG("sbp2: sbp2_max_speed_and_size"); - /* - * Get speed code from internal host structure. There should be a better way to obtain this. - */ - speed_code = hi->host->speed_map[(hi->host->node_id & NODE_MASK) * 64 + (scsi_id->node_id & NODE_MASK)]; + /* Get this nodes information */ + ne = hpsb_nodeid_get_entry(hi->host->node_id); - /* - * Bump down our speed if there is a module parameter forcing us slower - */ + if (!ne) { + HPSB_ERR("sbp2: Unknown device, using S100, payload 512 bytes"); + scsi_id->speed_code = SPEED_100; + scsi_id->max_payload_size = MAX_PAYLOAD_S100; + return(0); + } + + speed_code = ne->busopt.lnkspd; + + /* Bump down our speed if there is a module parameter forcing us slower */ if (speed_code > max_speed) { speed_code = max_speed; SBP2_ERR("sbp2: Reducing SBP-2 max speed allowed (%x)", max_speed); } - switch (speed_code) { - case SPEED_S100: - scsi_id->speed_code = SPEED_S100; - scsi_id->max_payload_size = MAX_PAYLOAD_S100; - SBP2_INFO("sbp2: SBP-2 device max speed S100 and payload 512 bytes"); - break; - case SPEED_S200: - scsi_id->speed_code = SPEED_S200; - scsi_id->max_payload_size = MAX_PAYLOAD_S200; - SBP2_INFO("sbp2: SBP-2 device max speed S200 and payload 1KB"); - break; - case SPEED_S400: - scsi_id->speed_code = SPEED_S400; - scsi_id->max_payload_size = MAX_PAYLOAD_S400; - SBP2_INFO("sbp2: SBP-2 device max speed S400 and payload 2KB"); - break; - default: - scsi_id->speed_code = SPEED_S100; - scsi_id->max_payload_size = MAX_PAYLOAD_S100; - SBP2_ERR("sbp2: Undefined speed: Using SBP-2 device max speed S100 and payload 512 bytes"); - break; - } - - /* - * Finally, check the adapter's capabilities to further bump down our max payload size - * if necessary. For instance, TILynx may not support the default max payload at a - * particular speed. - */ - if (!hpsb_read(hi->host, hi->host->node_id | LOCAL_BUS, CONFIG_ROM_NODE_OPTIONS, &node_options, 4)) { - - /* - * Grab max_rec (max payload = 2 ^ (max_rec+1)) from node options. Sbp2 max payload is - * defined as 2 ^ (max_pay+2)... so, have to subtract one from max rec for comparison... - * confusing, eh? ;-) - */ - max_rec = (be32_to_cpu(node_options) & 0x0000f000) >> 12; - if (scsi_id->max_payload_size > (max_rec - 1)) { - scsi_id->max_payload_size = (max_rec - 1); - SBP2_ERR("sbp2: Reducing SBP-2 max payload allowed (%x)", (max_rec - 1)); - } - + /* Support the devices max_rec and max speed. We choose a setting + * that fits both values, since they may differ. */ + if (speed_code >= SPEED_400 && ne->busopt.max_rec >= MAX_REC_S400) { + HPSB_INFO("sbp2: SBP-2 device max speed S400 and payload 2KB"); + scsi_id->speed_code = SPEED_400; + scsi_id->max_payload_size = MAX_PAYLOAD_S400; + } else if (speed_code >= SPEED_200 && ne->busopt.max_rec >= MAX_REC_S200) { + HPSB_INFO("sbp2: SBP-2 device max speed S200 and payload 1KB"); + scsi_id->speed_code = SPEED_200; + scsi_id->max_payload_size = MAX_PAYLOAD_S200; + } else { + HPSB_INFO("sbp2: SBP-2 device max speed S100 and payload 512 bytes"); + scsi_id->speed_code = SPEED_100; + scsi_id->max_payload_size = MAX_PAYLOAD_S100; } return(0); @@ -3480,9 +3424,9 @@ SBP2_DEBUG("sbp2: sbp2scsi_detect"); global_scsi_tpnt = tpnt; - - global_scsi_tpnt->proc_name = "sbp2"; - +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,26) + global_scsi_tpnt->proc_name = SBP2_DEVICE_NAME; +#endif /* * Module load option for force one command at a time */ @@ -3554,9 +3498,7 @@ return; } -/* - * Called when our module is released - */ +/* Called when our module is released */ static int sbp2scsi_release(struct Scsi_Host *host) { SBP2_DEBUG("sbp2: sbp2scsi_release"); @@ -3564,25 +3506,32 @@ return(0); } -/* - * Called for contents of procfs - */ +/* Called for contents of procfs */ static const char *sbp2scsi_info (struct Scsi_Host *host) { return "IEEE-1394 SBP-2 protocol driver"; } -/* - * Module related section - */ - MODULE_AUTHOR("James Goodwin "); MODULE_DESCRIPTION("IEEE-1394 SBP-2 protocol driver"); -MODULE_SUPPORTED_DEVICE("sbp2"); +MODULE_SUPPORTED_DEVICE(SBP2_DEVICE_NAME); -/* - * SCSI host template - */ -static Scsi_Host_Template driver_template = SBP2SCSI; +/* SCSI host template */ +static Scsi_Host_Template driver_template = { + name: "IEEE1394 SBP-2", + detect: sbp2scsi_detect, + release: sbp2scsi_release, + info: sbp2scsi_info, + queuecommand: sbp2scsi_queuecommand, + abort: sbp2scsi_abort, + reset: sbp2scsi_reset, + bios_param: sbp2scsi_biosparam, + can_queue: SBP2SCSI_MAX_OUTSTANDING_CMDS, + this_id: -1, + sg_tablesize: SBP2_MAX_SG_ELEMENTS, + cmd_per_lun: SBP2SCSI_MAX_CMDS_PER_LUN, + use_clustering: SBP2_CLUSTERING, + emulated: 1 +}; #include "../scsi/scsi_module.c" diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/sbp2.h linux/drivers/ieee1394/sbp2.h --- v2.4.8/linux/drivers/ieee1394/sbp2.h Wed Jul 25 17:10:20 2001 +++ linux/drivers/ieee1394/sbp2.h Sun Aug 12 12:39:02 2001 @@ -43,11 +43,16 @@ #define SPEED_S1600 0x4 #define SPEED_S3200 0x5 -/* 2^(MAX_PAYLOAD+2) = Maximum data transfer length */ +/* 2^(MAX_PAYLOAD+1) = Maximum data transfer length */ #define MAX_PAYLOAD_S100 0x7 #define MAX_PAYLOAD_S200 0x8 #define MAX_PAYLOAD_S400 0x9 +/* Max rec matches node_entry values */ +#define MAX_REC_S100 512 +#define MAX_REC_S200 1024 +#define MAX_REC_S400 2048 + #define ORB_SET_NOTIFY(value) ((value & 0x1) << 31) #define ORB_SET_RQ_FMT(value) ((value & 0x3) << 29) #define ORB_SET_NODE_ID(value) ((value & 0xffff) << 16) @@ -238,10 +243,7 @@ #define CONFIG_ROM_BASE_ADDRESS 0xfffff0000400ULL #define CONFIG_ROM_ROOT_DIR_BASE 0xfffff0000414ULL -#define CONFIG_ROM_NODE_UNIQUE_ID_HI_ADDRESS 0xfffff000040cULL -#define CONFIG_ROM_NODE_UNIQUE_ID_LO_ADDRESS 0xfffff0000410ULL #define CONFIG_ROM_SIGNATURE_ADDRESS 0xfffff0000404ULL -#define CONFIG_ROM_NODE_OPTIONS 0xfffff0000408ULL #define CONFIG_ROM_UNIT_DIRECTORY_OFFSET 0xfffff0000424ULL #define IEEE1394_CONFIG_ROM_SIGNATURE 0x31333934 @@ -301,26 +303,6 @@ DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN,DUN }; - -/* - * Scsi_Host structure - */ -#define SBP2SCSI { \ - name: "IEEE1394 SBP-2", \ - detect: sbp2scsi_detect, \ - release: sbp2scsi_release, \ - info: sbp2scsi_info, \ - queuecommand: sbp2scsi_queuecommand, \ - abort: sbp2scsi_abort, \ - reset: sbp2scsi_reset, \ - bios_param: sbp2scsi_biosparam, \ - can_queue: SBP2SCSI_MAX_OUTSTANDING_CMDS, \ - this_id: -1, \ - sg_tablesize: SBP2_MAX_SG_ELEMENTS, \ - cmd_per_lun: SBP2SCSI_MAX_CMDS_PER_LUN, \ - use_clustering: SBP2_CLUSTERING, \ - emulated: 1 \ -} /* * Number of request packets available for actual sbp2 I/O requests (these are used diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/video1394.c linux/drivers/ieee1394/video1394.c --- v2.4.8/linux/drivers/ieee1394/video1394.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/ieee1394/video1394.c Thu Aug 16 09:49:49 2001 @@ -103,6 +103,7 @@ int ctxMatch; wait_queue_head_t waitq; spinlock_t lock; + unsigned int syt_offset; int flags; }; @@ -140,10 +141,10 @@ #define PRINT(level, card, fmt, args...) \ printk(level "video1394_%d: " fmt "\n" , card , ## args) -void irq_handler(int card, quadlet_t isoRecvIntEvent, +static void irq_handler(int card, quadlet_t isoRecvIntEvent, quadlet_t isoXmitIntEvent); -LIST_HEAD(video1394_cards); +static LIST_HEAD(video1394_cards); static spinlock_t video1394_cards_lock = SPIN_LOCK_UNLOCKED; static devfs_handle_t devfs_handle; @@ -607,7 +608,7 @@ } static inline void put_timestamp(struct ti_ohci *ohci, struct dma_iso_ctx * d, - int curr, int n) + int n) { unsigned char* buf = d->buf + n * d->buf_size; u32 cycleTimer; @@ -619,13 +620,39 @@ cycleTimer = reg_read(ohci, OHCI1394_IsochronousCycleTimer); - timeStamp = ((cycleTimer & 0x0fff) + 11059); + timeStamp = ((cycleTimer & 0x0fff) + d->syt_offset); /* 11059 = 450 us */ timeStamp = (timeStamp % 3072 + ((timeStamp / 3072) << 12) + (cycleTimer & 0xf000)) & 0xffff; buf[6] = timeStamp >> 8; buf[7] = timeStamp & 0xff; + /* if first packet is empty packet, then put timestamp into the next full one too */ + if ( (d->it_prg[n][0].data[1] >>16) == 0x008) { + buf += d->packet_size; + buf[6] = timeStamp >> 8; + buf[7] = timeStamp & 0xff; + } + + /* do the next buffer frame too in case of irq latency */ + n = d->next_buffer[n]; + if (n == -1) { + return; + } + buf = d->buf + n * d->buf_size; + + timeStamp += (d->last_used_cmd[n] << 12) & 0xffff; + + buf[6] = timeStamp >> 8; + buf[7] = timeStamp & 0xff; + + /* if first packet is empty packet, then put timestamp into the next full one too */ + if ( (d->it_prg[n][0].data[1] >>16) == 0x008) { + buf += d->packet_size; + buf[6] = timeStamp >> 8; + buf[7] = timeStamp & 0xff; + } + #if 0 printk("curr: %d, next: %d, cycleTimer: %08x timeStamp: %08x\n", curr, n, cycleTimer, timeStamp); @@ -646,7 +673,7 @@ for (i=0;inum_desc;i++) { if (d->it_prg[i][d->last_used_cmd[i]].end.status& 0xFFFF0000) { int next = d->next_buffer[i]; - put_timestamp(ohci, d, i, next); + put_timestamp(ohci, d, next); d->it_prg[i][d->last_used_cmd[i]].end.status = 0; d->buffer_status[i] = VIDEO1394_BUFFER_READY; } @@ -757,12 +784,13 @@ } static void initialize_dma_it_ctx(struct dma_iso_ctx *d, int sync_tag, - int flags) + unsigned int syt_offset, int flags) { struct ti_ohci *ohci = (struct ti_ohci *)d->ohci; int i; d->flags = flags; + d->syt_offset = (syt_offset == 0 ? 11000 : syt_offset); ohci1394_stop_context(ohci, d->ctrlClear, NULL); @@ -807,7 +835,7 @@ unsigned int cmd, unsigned long arg) { struct video_card *video = NULL; - struct ti_ohci *ohci; + struct ti_ohci *ohci = NULL; unsigned long flags; struct list_head *lh; @@ -931,7 +959,7 @@ return -EFAULT; } initialize_dma_it_ctx(video->it_context[i], - v.sync_tag, v.flags); + v.sync_tag, v.syt_offset, v.flags); video->current_ctx = video->it_context[i]; @@ -1200,6 +1228,7 @@ { DBGMSG(ohci->id, "Starting iso transmit DMA ctx=%d", d->ctx); + put_timestamp(ohci, d, d->last_buffer); /* Tell the controller where the first program is */ reg_write(ohci, d->cmdPtr, @@ -1214,6 +1243,7 @@ PRINT(KERN_INFO, ohci->id, "Waking up iso transmit dma ctx=%d", d->ctx); + put_timestamp(ohci, d, d->last_buffer); reg_write(ohci, d->ctrlSet, 0x1000); } } @@ -1283,7 +1313,8 @@ { struct video_card *video = NULL; struct ti_ohci *ohci; - int res = -EINVAL, flags; + int res = -EINVAL; + unsigned long flags; struct list_head *lh; spin_lock_irqsave(&video1394_cards_lock, flags); @@ -1320,7 +1351,8 @@ static int video1394_open(struct inode *inode, struct file *file) { - int i = MINOR(inode->i_rdev), flags; + int i = MINOR(inode->i_rdev); + unsigned long flags; struct video_card *video = NULL; struct list_head *lh; @@ -1340,7 +1372,7 @@ if (video == NULL) return -EIO; - MOD_INC_USE_COUNT; + V22_COMPAT_MOD_INC_USE_COUNT; return 0; } @@ -1350,7 +1382,8 @@ struct video_card *video = NULL; struct ti_ohci *ohci; u64 mask; - int i, flags; + int i; + unsigned long flags; struct list_head *lh; spin_lock_irqsave(&video1394_cards_lock, flags); @@ -1407,16 +1440,17 @@ free_dma_iso_ctx(&video->it_context[i]); } - MOD_DEC_USE_COUNT; + V22_COMPAT_MOD_DEC_USE_COUNT; unlock_kernel(); return 0; } -void irq_handler(int card, quadlet_t isoRecvIntEvent, +static void irq_handler(int card, quadlet_t isoRecvIntEvent, quadlet_t isoXmitIntEvent) { - int i, flags; + int i; + unsigned long flags; struct video_card *video = NULL; struct list_head *lh; @@ -1455,7 +1489,7 @@ static struct file_operations video1394_fops= { - owner: THIS_MODULE, + OWNER_THIS_MODULE ioctl: video1394_ioctl, mmap: video1394_mmap, open: video1394_open, @@ -1465,7 +1499,7 @@ static int video1394_init(struct ti_ohci *ohci) { struct video_card *video = kmalloc(sizeof(struct video_card), GFP_KERNEL); - int flags; + unsigned long flags; char name[16]; if (video == NULL) { @@ -1525,7 +1559,8 @@ /* Must be called under spinlock */ static void remove_card(struct video_card *video) { - int i, flags; + int i; + unsigned long flags; ohci1394_unregister_video(video->ohci, &video_tmpl); @@ -1556,7 +1591,7 @@ static void video1394_remove_host (struct hpsb_host *host) { struct ti_ohci *ohci; - int flags; + unsigned long flags; struct list_head *lh; /* We only work with the OHCI-1394 driver */ @@ -1623,7 +1658,12 @@ VIDEO1394_MAJOR); return -EIO; } +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) + devfs_handle = devfs_mk_dir(NULL, VIDEO1394_DRIVER_NAME, + strlen(VIDEO1394_DRIVER_NAME), NULL); +#else devfs_handle = devfs_mk_dir(NULL, VIDEO1394_DRIVER_NAME, NULL); +#endif hl_handle = hpsb_register_highlevel (VIDEO1394_DRIVER_NAME, &hl_ops); if (hl_handle == NULL) { diff -u --recursive --new-file v2.4.8/linux/drivers/ieee1394/video1394.h linux/drivers/ieee1394/video1394.h --- v2.4.8/linux/drivers/ieee1394/video1394.h Wed Jul 25 17:10:20 2001 +++ linux/drivers/ieee1394/video1394.h Sun Aug 12 12:39:02 2001 @@ -54,6 +54,7 @@ unsigned int packet_size; /* For VARIABLE_PACKET_SIZE: Maximum packet size */ unsigned int fps; + unsigned int syt_offset; unsigned int flags; }; diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/Config.in linux/drivers/isdn/Config.in --- v2.4.8/linux/drivers/isdn/Config.in Tue Jul 3 17:08:19 2001 +++ linux/drivers/isdn/Config.in Mon Aug 13 16:35:28 2001 @@ -69,8 +69,8 @@ bool ' Gazel cards' CONFIG_HISAX_GAZEL bool ' HFC PCI-Bus cards' CONFIG_HISAX_HFC_PCI bool ' Winbond W6692 based cards' CONFIG_HISAX_W6692 + bool ' HFC-S+, HFC-SP, HFC-PCMCIA cards' CONFIG_HISAX_HFC_SX if [ "$CONFIG_EXPERIMENTAL" != "n" ]; then - bool ' HFC-S+, HFC-SP, HFC-PCMCIA cards' CONFIG_HISAX_HFC_SX # bool ' TESTEMULATOR (EXPERIMENTAL)' CONFIG_HISAX_TESTEMU if [ "$ARCH" = "sparc" -o "$ARCH" = "sparc64" ]; then bool ' Am7930' CONFIG_HISAX_AMD7930 diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/act2000/act2000_isa.c linux/drivers/isdn/act2000/act2000_isa.c --- v2.4.8/linux/drivers/isdn/act2000/act2000_isa.c Fri Nov 17 11:16:20 2000 +++ linux/drivers/isdn/act2000/act2000_isa.c Mon Aug 13 16:35:29 2001 @@ -1,4 +1,4 @@ -/* $Id: act2000_isa.c,v 1.11 2000/11/12 16:32:06 kai Exp $ +/* $Id: act2000_isa.c,v 1.11.6.2 2001/07/18 16:25:12 kai Exp $ * * ISDN lowlevel-module for the IBM ISDN-S0 Active 2000 (ISA-Version). * @@ -26,16 +26,7 @@ #include "act2000_isa.h" #include "capi.h" -static act2000_card *irq2card_map[16] = -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static int act2000_isa_irqs[] = -{ - 3, 5, 7, 10, 11, 12, 15 -}; -#define ISA_NRIRQS (sizeof(act2000_isa_irqs)/sizeof(int)) +static act2000_card *irq2card_map[16]; static void act2000_isa_delay(long t) @@ -82,13 +73,9 @@ act2000_isa_detect(unsigned short portbase) { int ret = 0; - unsigned long flags; - save_flags(flags); - cli(); if (!check_region(portbase, ISA_REGION)) ret = act2000_isa_reset(portbase); - restore_flags(flags); return ret; } @@ -167,9 +154,6 @@ int act2000_isa_config_irq(act2000_card * card, short irq) { - int i; - unsigned long flags; - if (card->flags & ACT2000_FLAGS_IVALID) { free_irq(card->irq, NULL); irq2card_map[card->irq] = NULL; @@ -178,30 +162,13 @@ outb(ISA_COR_IRQOFF, ISA_PORT_COR); if (!irq) return 0; - save_flags(flags); - cli(); - if (irq == -1) { - /* Auto select */ - for (i = 0; i < ISA_NRIRQS; i++) { - if (!request_irq(act2000_isa_irqs[i], &act2000_isa_interrupt, 0, card->regname, NULL)) { - card->irq = act2000_isa_irqs[i]; - irq2card_map[card->irq] = card; - card->flags |= ACT2000_FLAGS_IVALID; - break; - } - } - } else { - /* Fixed irq */ - if (!request_irq(irq, &act2000_isa_interrupt, 0, card->regname, NULL)) { - card->irq = irq; - irq2card_map[card->irq] = card; - card->flags |= ACT2000_FLAGS_IVALID; - } - } - restore_flags(flags); - if (!card->flags & ACT2000_FLAGS_IVALID) { + + if (!request_irq(irq, &act2000_isa_interrupt, 0, card->regname, NULL)) { + card->irq = irq; + irq2card_map[card->irq] = card; + card->flags |= ACT2000_FLAGS_IVALID; printk(KERN_WARNING - "act2000: Could not request irq\n"); + "act2000: Could not request irq %d\n",irq); return -EBUSY; } else { act2000_isa_select_irq(card); diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/act2000/module.c linux/drivers/isdn/act2000/module.c --- v2.4.8/linux/drivers/isdn/act2000/module.c Fri Mar 2 11:12:10 2001 +++ linux/drivers/isdn/act2000/module.c Mon Aug 13 16:35:29 2001 @@ -1,4 +1,4 @@ -/* $Id: module.c,v 1.14.6.2 2000/12/18 22:14:10 kai Exp $ +/* $Id: module.c,v 1.14.6.3 2001/07/13 09:20:11 kai Exp $ * * ISDN lowlevel-module for the IBM ISDN-S0 Active 2000. * @@ -38,7 +38,7 @@ /* Parameters to be set by insmod */ static int act_bus = 0; static int act_port = -1; /* -1 = Autoprobe */ -static int act_irq = -1; /* -1 = Autoselect */ +static int act_irq = -1; static char *act_id = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; MODULE_DESCRIPTION( "Driver for IBM Active 2000 ISDN card"); @@ -46,7 +46,7 @@ MODULE_SUPPORTED_DEVICE( "ISDN subsystem"); MODULE_PARM_DESC(act_bus, "BusType of first card, 1=ISA, 2=MCA, 3=PCMCIA, currently only ISA"); MODULE_PARM_DESC(membase, "Base port address of first card"); -MODULE_PARM_DESC(act_irq, "IRQ of first card (-1 = grab next free IRQ)"); +MODULE_PARM_DESC(act_irq, "IRQ of first card"); MODULE_PARM_DESC(act_id, "ID-String of first card"); MODULE_PARM(act_bus, "i"); MODULE_PARM(act_port, "i"); diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/avmb1/capi.c linux/drivers/isdn/avmb1/capi.c --- v2.4.8/linux/drivers/isdn/avmb1/capi.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/isdn/avmb1/capi.c Mon Aug 13 16:35:28 2001 @@ -1,5 +1,5 @@ /* - * $Id: capi.c,v 1.44.6.12 2001/06/09 15:14:15 kai Exp $ + * $Id: capi.c,v 1.44.6.13 2001/08/13 07:46:15 kai Exp $ * * CAPI 2.0 Interface for Linux * @@ -43,7 +43,7 @@ #include "capifs.h" #endif -static char *revision = "$Revision: 1.44.6.12 $"; +static char *revision = "$Revision: 1.44.6.13 $"; MODULE_AUTHOR("Carsten Paeth (calle@calle.in-berlin.de)"); @@ -697,12 +697,6 @@ /* -------- file_operations for capidev ----------------------------- */ -static loff_t -capi_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static ssize_t capi_read(struct file *file, char *buf, size_t count, loff_t *ppos) { @@ -1073,7 +1067,7 @@ static struct file_operations capi_fops = { owner: THIS_MODULE, - llseek: capi_llseek, + llseek: no_llseek, read: capi_read, write: capi_write, poll: capi_poll, @@ -1110,12 +1104,6 @@ return 0; } -static loff_t -capinc_raw_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static ssize_t capinc_raw_read(struct file *file, char *buf, size_t count, loff_t *ppos) { @@ -1269,7 +1257,7 @@ static struct file_operations capinc_raw_fops = { owner: THIS_MODULE, - llseek: capinc_raw_llseek, + llseek: no_llseek, read: capinc_raw_read, write: capinc_raw_write, poll: capinc_raw_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/divert/divert_procfs.c linux/drivers/isdn/divert/divert_procfs.c --- v2.4.8/linux/drivers/isdn/divert/divert_procfs.c Mon Nov 27 16:53:43 2000 +++ linux/drivers/isdn/divert/divert_procfs.c Mon Aug 13 16:35:28 2001 @@ -1,5 +1,5 @@ /* - * $Id: divert_procfs.c,v 1.11 2000/11/25 17:01:00 kai Exp $ + * $Id: divert_procfs.c,v 1.11.6.1 2001/08/13 07:46:15 kai Exp $ * * Filesystem handling for the diversion supplementary services. * @@ -276,15 +276,9 @@ #ifdef CONFIG_PROC_FS -static loff_t -isdn_divert_lseek(struct file *file, loff_t offset, int orig) -{ - return -ESPIPE; -} - static struct file_operations isdn_fops = { - llseek: isdn_divert_lseek, + llseek: no_llseek, read: isdn_divert_read, write: isdn_divert_write, poll: isdn_divert_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/eicon/common.c linux/drivers/isdn/eicon/common.c --- v2.4.8/linux/drivers/isdn/eicon/common.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/isdn/eicon/common.c Sun Aug 12 17:37:53 2001 @@ -37,9 +37,6 @@ #define DIVAS_IRQ_RESET 0xC18 #define DIVAS_IRQ_RESET_VAL 0xFE -#define PCI_LATENCY PCI_LATENCY_TIMER -#define PCI_INTERRUPT PCI_INTERRUPT_LINE - #define TEST_INT_DIVAS 0x11 #define TEST_INT_DIVAS_BRI 0x12 #define TEST_INT_DIVAS_Q 0x13 @@ -78,7 +75,7 @@ void DIVA_DIDD_Read( DESCRIPTOR *table, int tablelength ) { - bzero(table, tablelength); + memset(table, 0, tablelength); if (tablelength > sizeof(DIDD_Table)) tablelength = sizeof(DIDD_Table); @@ -89,7 +86,7 @@ } if (tablelength > 0) - bcopy((void *)DIDD_Table, (void *)table, tablelength); + memcpy((void *)table, (void *)DIDD_Table, tablelength); return; } @@ -99,7 +96,7 @@ if (tablelength > sizeof(DIDD_Table)) tablelength = sizeof(DIDD_Table); - bcopy((void *)table, (void *)DIDD_Table, tablelength); + memcpy((void *)DIDD_Table, (void *)table, tablelength); return; } @@ -109,7 +106,7 @@ { DESCRIPTOR d[32]; - bzero(d, sizeof(d)); + memset(d, 0, sizeof(d)); d[0].type = IDI_DIMAINT; /* identify the DIMAINT entry */ d[0].channels = 0; /* zero channels associated with dimaint*/ @@ -478,7 +475,6 @@ int DivasCardNew(dia_card_t *card_info) { card_t *card; - byte b; static boolean_t first_call = TRUE; boolean_t NeedISRandReset = FALSE; @@ -567,10 +563,6 @@ return -1; } - b = card->cfg.irq; - - UxPciConfigWrite(card->hw, sizeof(b), PCI_INTERRUPT_LINE, &b); - if (card_info->card_type != DIA_CARD_TYPE_DIVA_SERVER_Q) { if ((*card->card_reset)(card)) @@ -670,7 +662,7 @@ return -1; } - bzero(card->e_tbl, sizeof(E_INFO) * num_entities); + memset(card->e_tbl, 0, sizeof(E_INFO) * num_entities); card->e_max = num_entities; DIVA_DIDD_Read(d, sizeof(d)); diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/eicon/eicon_mod.c linux/drivers/isdn/eicon/eicon_mod.c --- v2.4.8/linux/drivers/isdn/eicon/eicon_mod.c Fri Mar 2 11:12:08 2001 +++ linux/drivers/isdn/eicon/eicon_mod.c Sun Aug 12 11:16:18 2001 @@ -1,4 +1,4 @@ -/* $Id: eicon_mod.c,v 1.37.6.4 2001/02/16 09:09:50 armin Exp $ +/* $Id: eicon_mod.c,v 1.37.6.5 2001/07/17 19:42:31 armin Exp $ * * ISDN lowlevel-module for Eicon active cards. * @@ -55,7 +55,7 @@ static eicon_card *cards = (eicon_card *) NULL; /* glob. var , contains start of card-list */ -static char *eicon_revision = "$Revision: 1.37.6.4 $"; +static char *eicon_revision = "$Revision: 1.37.6.5 $"; extern char *eicon_pci_revision; extern char *eicon_isa_revision; @@ -1200,24 +1200,16 @@ static void eicon_freecard(eicon_card *card) { int i; - struct sk_buff *skb; for(i = 0; i < (card->nchannels + 1); i++) { - while((skb = skb_dequeue(&card->bch[i].e.X))) - dev_kfree_skb(skb); - while((skb = skb_dequeue(&card->bch[i].e.R))) - dev_kfree_skb(skb); + skb_queue_purge(&card->bch[i].e.X); + skb_queue_purge(&card->bch[i].e.R); } - while((skb = skb_dequeue(&card->sndq))) - dev_kfree_skb(skb); - while((skb = skb_dequeue(&card->rcvq))) - dev_kfree_skb(skb); - while((skb = skb_dequeue(&card->rackq))) - dev_kfree_skb(skb); - while((skb = skb_dequeue(&card->sackq))) - dev_kfree_skb(skb); - while((skb = skb_dequeue(&card->statq))) - dev_kfree_skb(skb); + skb_queue_purge(&card->sndq); + skb_queue_purge(&card->rcvq); + skb_queue_purge(&card->rackq); + skb_queue_purge(&card->sackq); + skb_queue_purge(&card->statq); #ifdef CONFIG_ISDN_DRV_EICON_PCI kfree(card->sbufp); diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/eicon/kprintf.c linux/drivers/isdn/eicon/kprintf.c --- v2.4.8/linux/drivers/isdn/eicon/kprintf.c Sat May 19 17:43:06 2001 +++ linux/drivers/isdn/eicon/kprintf.c Sun Aug 12 11:16:18 2001 @@ -37,468 +37,6 @@ #include "divalog.h" #include "uxio.h" -/* - * Implementation of printf and sprintf for kernel - */ - -#define MAX_BUFF (80) /* limit size of temporary buffers */ - -#define WRITE_CHAR(BUFFER, SIZE, C) \ - if (--(SIZE) < 0) { (BUFFER)--; *(BUFFER) = '\0'; return; } *(BUFFER)++ = (C) - - -/* - * convert a number to decimal ASCII - */ - -static -void do_decimal( char *temp, - int temp_len, - unsigned int value, - char *s) - -{ - int i; - - temp[0] = '\0'; - - for (i = 1; i < temp_len; i++) - { - temp[i] = (char) ((value % 10) + (int) '0'); - value /= 10; - } - - for (i = (temp_len - 1); temp[i] == '0'; i--) - { - ; - } - - if (i == 0) - { - i++; - } - - while (i >= 0) - { - *s++ = temp[i--]; - } - - return; -} - -/* - * convert a number to octal ASCII - */ - -static -void do_octal( char *temp, - unsigned int value, - char *s) - -{ - int i; - - temp[0] = '\0'; - - for (i = 1; i <= 11; i++) - { - temp[i] = (char) ((value & 07) + (int) '0'); - value >>= 3; - } - temp[11] &= '3'; - - for (i = 11; temp[i] == '0'; i--) - { - ; - } - - if (i == 0) - { - i++; - } - - while (i >= 0) - { - *s++ = temp[i--]; - } - - return; -} - -/* - * convert a number to hex ASCII - */ - -static -void do_hex( char *temp, - unsigned int value, - char *s) - -{ - int i; - static - char *dec_to_hex = "0123456789abcdef"; - - temp[0] = '\0'; - - for (i = 1; i <= 8; i++) - { - temp[i] = dec_to_hex[value & 0x0f]; - value >>= 4; - } - - for (i = 8; temp[i] == '0'; i--) - { - ; - } - - if (i == 0) - { - i++; - } - - while (i >= 0) - { - *s++ = temp[i--]; - } - - return; -} - -/* - * convert a buffer to ASCII HEX - */ - -static -void do_buffer( char *buffer, - int length, - char *s) - -{ - static - char hex_char [] = "0123456789abcdef"; - char *b = buffer; - int hex_byte; - int nybble; - - length = (length >= ((MAX_BUFF / 3) + 1)) ? (MAX_BUFF / 3) : length; - - while (length) - { - hex_byte = (int) *b++; - nybble = (hex_byte >> 4) & 0xf; - *s++ = hex_char[nybble]; - nybble = hex_byte & 0xf; - *s++ = hex_char[nybble]; - *s++ = ' '; - length--; - } - *s = '\0'; - - return; -} - -/* - * Body of sprintf function: behaves just like standard sprintf, except we - * have an extra argument (buffer size) which we use to ensure we don't - * overflow - */ - -void Divas_vsprintf( char *buffer, - int size, - char *fmt, - va_list argptr) - -{ - char c; /* single character buffer */ - int i; /* handy scratch counter */ - int f; /* format character (after %) */ - char *str; /* pointer into string */ - char temp[20]; /* temp buffer used in printing numbers */ - char string[MAX_BUFF]; /* output from number conversion */ - int length; /* length of string "str" */ - char fill; /* fill character ' ' or '0' */ - boolean_t leftjust; /* TRUE if left justified, else right justified */ - int fmax, fmin; /* field specifiers % MIN . MAX s */ - int leading; /* number of leading/trailing fill characters */ - char sign; /* set to '-' for negative decimals */ - int number; /* numeric argument */ - - char *buff_ptr; /* pointer to user's buffer of hex data */ - int buff_len; /* length of hex data */ - - /* make sure we have somthing to write into */ - - if ((!buffer) || (size <= 0)) - { - return; - } - - while (TRUE) - { - /* echo characters until end or '%' encountered */ - - while ((c = *fmt++) != '%') - { - if (!c) - { - *buffer = '\0'; - return; - } - WRITE_CHAR(buffer, size, c); - } - - /* echo %% as % */ - - if (*fmt == '%') - { - WRITE_CHAR(buffer, size, *fmt); - continue; - } - - /* %- turns on left-justify */ - - if ((leftjust = (boolean_t) ((*fmt == '-') ? TRUE : FALSE))) - { - fmt++; - } - - /* %0 turns on zero filling */ - - if (*fmt == '0') - { - fill = '0'; - } - else - { - fill = ' '; - } - - /* minium field width specifier for %d, u, x, c, s */ - - fmin = 0; - - if (*fmt == '*') - { - fmin = va_arg(argptr, int); - fmt++; - } - else - { - while ('0' <= *fmt && *fmt <= '9') - { - fmin = (fmin * 10) + (*fmt++ - '0'); - } - } - - /* maximum string width specifier for %s */ - - fmax = 0; - - if (*fmt == '.') - { - if (*(++fmt) == '*') - { - fmax = va_arg(argptr, int); - fmt++; - } - else - { - while ('0' <= *fmt && *fmt <= '9') - { - fmax = (fmax * 10) + (*fmt++ - '0'); - } - } - } - - /* skip over 'l' option (ints are assumed same size as longs) */ - - if (*fmt == 'l') - { - fmt++; - } - - /* get the format chacater */ - - if (!(f = *fmt++)) - { - WRITE_CHAR(buffer, size, '%'); - *buffer = '\0'; - return; - } - - sign = '\0'; /* sign == '-' for negative decimal */ - - str = string; - - switch (f) - { - case 'c' : - string[0] = (char) va_arg(argptr, int); - string[1] = '\0'; - fmax = 0; - fill = ' '; - break; - - case 's' : - str = va_arg(argptr, char *); - fill = ' '; - break; - - case 'D' : - case 'd' : - number = va_arg(argptr, int); - if (number < 0) - { - sign = '-'; - number = -number; - } - do_decimal(temp, DIM(temp), (unsigned int) number, str); - fmax = 0; - break; - - case 'U' : - case 'u' : - number = va_arg(argptr, int); - do_decimal(temp, DIM(temp), (unsigned int) number, str); - fmax = 0; - break; - - case 'O' : - case 'o' : - number = va_arg(argptr, int); - do_octal(temp, (unsigned int) number, str); - fmax = 0; - break; - - case 'X' : - case 'x' : - number = va_arg(argptr, int); - do_hex(temp, (unsigned int) number, str); - fmax = 0; - break; - - case 'H' : - case 'h' : - buff_ptr = va_arg(argptr, char *); - buff_len = va_arg(argptr, int); - do_buffer(buff_ptr, buff_len, str); - fmax = 0; - break; - - default : - WRITE_CHAR(buffer, size, ((char) f)); - break; - } - - /* get the length of the string */ - - length = 0; - while (str[length]) - { - length++; - } - - /* make sure we have fmax and fmin values that are O.K. */ - - if (fmin > DIM(string) || fmin < 0) - { - fmin = 0; - } - - if (fmax > DIM(string) || fmax < 0) - { - fmax = 0; - } - - /* figure out how many leading characters thare are */ - - leading = 0; - - if (fmax || fmin) - { - if (fmax) - { - if (length > fmax) - { - length = fmax; - } - } - - if (fmin) - { - leading = fmin - length; - } - - if (sign == '-') - { - leading--; - } - } - - /* output sign now, if fill is numeric */ - - if (sign == '-' && fill == '0') - { - WRITE_CHAR(buffer, size, '-'); - } - - /* if right justified, output fill characters */ - - if (!leftjust) - { - for (i = 0; i < leading; i++) - { - WRITE_CHAR(buffer, size, fill); - } - } - - /* output sign now, if fill is spaces */ - - if (sign == '-' && fill == ' ') - { - WRITE_CHAR(buffer, size, '-'); - } - - /* now the actual value */ - - for (i = 0; i < length; i++) - { - WRITE_CHAR(buffer, size, str[i]); - } - - /* if left justified, fill out with the fill character */ - - if (leftjust) - { - for (i = 0; i < leading; i++) - { - WRITE_CHAR(buffer, size, fill); - } - } - } -} - -/* - * sprintf for kernel - * - * call our vsprintf assuming user has a big buffer.... - */ - -void DivasSprintf(char *buffer, char *fmt, ...) - -{ - va_list argptr; /* pointer to additional args */ - - va_start(argptr, fmt); - - Divas_vsprintf(buffer, 1024, fmt, argptr); - - va_end(argptr); - - return; -} - void DivasPrintf(char *fmt, ...) { @@ -510,7 +48,7 @@ /* clear log entry */ - bzero((caddr_t) &log, sizeof(klog_t)); + memset((void *) &log, 0, sizeof(klog_t)); log.card = -1; log.type = KLOG_TEXT_MSG; @@ -521,7 +59,7 @@ /* call vsprintf to format the user's information */ - Divas_vsprintf(log.buffer, DIM(log.buffer), fmt, argptr); + vsnprintf(log.buffer, DIM(log.buffer), fmt, argptr); va_end(argptr); diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/eicon/lincfg.c linux/drivers/isdn/eicon/lincfg.c --- v2.4.8/linux/drivers/isdn/eicon/lincfg.c Fri Mar 2 11:12:08 2001 +++ linux/drivers/isdn/eicon/lincfg.c Mon Aug 13 16:35:28 2001 @@ -43,12 +43,6 @@ #include #include -#define HW_ID_EICON_PCI 0x1133 -#define HW_ID_DIVA_SERVER_P 0xE014 -#define HW_ID_DIVA_SERVER_B_ST 0xE010 -#define HW_ID_DIVA_SERVER_B_U 0xE013 -#define HW_ID_DIVA_SERVER_Q 0xE012 - struct file_operations Divas_fops; int Divas_major; @@ -73,8 +67,8 @@ while (wDeviceIndex < 10) { - wPCIConsultation = pcibios_find_device(HW_ID_EICON_PCI, - HW_ID_DIVA_SERVER_Q, + wPCIConsultation = pcibios_find_device(PCI_VENDOR_ID_EICON, + PCI_DEVICE_ID_EICON_MAESTRAQ, wDeviceIndex, &byBus, &byFunc); @@ -174,8 +168,8 @@ while (wDeviceIndex < 10) { - wPCIConsultation = pcibios_find_device(HW_ID_EICON_PCI, - HW_ID_DIVA_SERVER_B_ST, + wPCIConsultation = pcibios_find_device(PCI_VENDOR_ID_EICON, + PCI_DEVICE_ID_EICON_MAESTRA, wDeviceIndex, &byBus, &byFunc); @@ -232,8 +226,8 @@ wNumCards++; } - wPCIConsultation = pcibios_find_device(HW_ID_EICON_PCI, - HW_ID_DIVA_SERVER_B_U, + wPCIConsultation = pcibios_find_device(PCI_VENDOR_ID_EICON, + PCI_DEVICE_ID_EICON_MAESTRAQ_U, wDeviceIndex, &byBus, &byFunc); @@ -298,8 +292,8 @@ while (wDeviceIndex < 10) { - wPCIConsultation = pcibios_find_device(HW_ID_EICON_PCI, - HW_ID_DIVA_SERVER_P, + wPCIConsultation = pcibios_find_device(PCI_VENDOR_ID_EICON, + PCI_DEVICE_ID_EICON_MAESTRAP, wDeviceIndex, &byBus, &byFunc); diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/eicon/linchr.c linux/drivers/isdn/eicon/linchr.c --- v2.4.8/linux/drivers/isdn/eicon/linchr.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/isdn/eicon/linchr.c Sun Aug 12 17:37:53 2001 @@ -37,7 +37,6 @@ extern int DivasCardNext; void UxPause(long ms); -void bcopy(void *pSource, void *pDest, dword dwLength); int DivasGetMem(mem_block_t *); #define DIA_IOCTL_UNLOCK 12 @@ -157,11 +156,8 @@ { word wMask = 0; - if (!DivasLogFifoEmpty()) - { + if (!DivasLogFifoEmpty()) wMask |= POLLIN | POLLRDNORM; - } - return wMask; } @@ -174,14 +170,14 @@ { printk(KERN_WARNING "Divas: Divalog buffer specifed a size that is too small (%d - %d required)\n", BufferSize, sizeof(klog_t)); - return 0; + return -EIO; } pHeadItem = (klog_t *) DivasLogFifoRead(); if (pHeadItem) { - bcopy(pHeadItem, pClientLogBuffer, sizeof(klog_t)); + memcpy(pClientLogBuffer, pHeadItem, sizeof(klog_t)); kfree(pHeadItem); return sizeof(klog_t); } diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/eicon/linsys.c linux/drivers/isdn/eicon/linsys.c --- v2.4.8/linux/drivers/isdn/eicon/linsys.c Fri Mar 2 11:12:08 2001 +++ linux/drivers/isdn/eicon/linsys.c Sun Aug 12 17:37:53 2001 @@ -38,18 +38,6 @@ #include "uxio.h" -#ifdef MODULE -void bcopy(void *pSource, void *pDest, dword dwLength) -{ - memcpy(pDest, pSource, dwLength); -} -#endif - -void bzero(void *pDataArea, dword dwLength) -{ - memset(pDataArea, 0, dwLength); -} - int Divas4BRIInitPCI(card_t *card, dia_card_t *cfg) { /* Use UxPciConfigWrite routines to initialise PCI config space */ diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/eicon/log.c linux/drivers/isdn/eicon/log.c --- v2.4.8/linux/drivers/isdn/eicon/log.c Fri Mar 2 11:12:08 2001 +++ linux/drivers/isdn/eicon/log.c Sun Aug 12 11:16:18 2001 @@ -96,7 +96,7 @@ } m_count++; - bzero(new_klog,sizeof(KNODE)); + memset(new_klog, 0, sizeof(KNODE)); /* Set head & tail to point to the new Msg Struct */ head=tail=new_klog; @@ -112,7 +112,7 @@ } m_count++; - bzero(new_klog,sizeof(KNODE)); + memset(new_klog, 0, sizeof(KNODE)); /* Let last Msg Struct point to new Msg Struct & inc tail */ tail->next=new_klog; @@ -125,7 +125,7 @@ length = sizeof(klog_t); } - bcopy(entry,&tail->klog,length); + memcpy(&tail->klog, entry, length); return; } @@ -155,7 +155,7 @@ { klog_t klog; - bzero(&klog, sizeof(klog)); + memset(&klog, 0, sizeof(klog)); klog.time_stamp = UxTimeGet(); @@ -166,7 +166,7 @@ klog.type = request ? KLOG_IDI_REQ : KLOG_IDI_CALLBACK; klog.code = 0; - bcopy(e, klog.buffer, klog.length); + memcpy(klog.buffer, e, klog.length); /* send to the log driver and return */ diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/eicon/uxio.h linux/drivers/isdn/eicon/uxio.h --- v2.4.8/linux/drivers/isdn/eicon/uxio.h Fri Mar 2 11:12:08 2001 +++ linux/drivers/isdn/eicon/uxio.h Sun Aug 12 17:37:53 2001 @@ -58,10 +58,6 @@ isr_fn_t *user_isr; }; -void bcopy(void *pSource, void *pDest, dword dwLength); -void bzero(void *pDataArea, dword dwLength); - - /* * Get a card handle to enable card to be accessed */ diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/eicon/xlog.c linux/drivers/isdn/eicon/xlog.c --- v2.4.8/linux/drivers/isdn/eicon/xlog.c Fri Mar 2 11:12:08 2001 +++ linux/drivers/isdn/eicon/xlog.c Sun Aug 12 11:16:18 2001 @@ -59,7 +59,7 @@ x = (card_xlog_t *) b; - bzero(&klog, sizeof(klog)); + memset(&klog, 0, sizeof(klog)); klog.time_stamp = (dword) x->time_hi; klog.time_stamp = (klog.time_stamp << 16) | (dword) x->time_lo; @@ -71,13 +71,13 @@ { klog.type = KLOG_XTXT_MSG; klog.code = 0; - bcopy(&x->xcode, klog.buffer, klog.length); + memcpy(klog.buffer, &x->xcode, klog.length); } else if (x->code == 2) { klog.type = KLOG_XLOG_MSG; klog.code = x->xcode; - bcopy(&x->data, klog.buffer, klog.length); + memcpy(klog.buffer, &x->data, klog.length); } else { diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/hisax/sedlbauer_cs.c linux/drivers/isdn/hisax/sedlbauer_cs.c --- v2.4.8/linux/drivers/isdn/hisax/sedlbauer_cs.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/isdn/hisax/sedlbauer_cs.c Mon Aug 13 16:35:28 2001 @@ -25,8 +25,8 @@ . All Rights Reserved. Alternatively, the contents of this file may be used under the - terms of the GNU Public License version 2 (the "GPL"), in which - case the provisions of the GPL are applicable instead of the + terms of the GNU General Public License version 2 (the "GPL"), in + which case the provisions of the GPL are applicable instead of the above. If you wish to allow the use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/hysdn/hysdn_procconf.c linux/drivers/isdn/hysdn/hysdn_procconf.c --- v2.4.8/linux/drivers/isdn/hysdn/hysdn_procconf.c Sat May 19 17:54:14 2001 +++ linux/drivers/isdn/hysdn/hysdn_procconf.c Mon Aug 13 16:35:28 2001 @@ -1,4 +1,4 @@ -/* $Id: hysdn_procconf.c,v 1.8.6.2 2001/04/20 02:42:00 keil Exp $ +/* $Id: hysdn_procconf.c,v 1.8.6.3 2001/08/13 07:46:15 kai Exp $ * Linux driver for HYSDN cards, /proc/net filesystem dir and conf functions. * written by Werner Cornelius (werner@titro.de) for Hypercope GmbH @@ -31,7 +31,7 @@ #include "hysdn_defs.h" -static char *hysdn_procconf_revision = "$Revision: 1.8.6.2 $"; +static char *hysdn_procconf_revision = "$Revision: 1.8.6.3 $"; #define INFO_OUT_LEN 80 /* length of info line including lf */ @@ -92,15 +92,6 @@ return (0); } /* process_line */ -/*************************/ -/* dummy file operations */ -/*************************/ -static loff_t -hysdn_dummy_lseek(struct file *file, loff_t offset, int orig) -{ - return -ESPIPE; -} /* hysdn_dummy_lseek */ - /***********************************/ /* conf file operations and tables */ /***********************************/ @@ -396,7 +387,7 @@ /******************************************************/ static struct file_operations conf_fops = { - llseek: hysdn_dummy_lseek, + llseek: no_llseek, read: hysdn_conf_read, write: hysdn_conf_write, open: hysdn_conf_open, diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/hysdn/hysdn_procfs.c linux/drivers/isdn/hysdn/hysdn_procfs.c --- v2.4.8/linux/drivers/isdn/hysdn/hysdn_procfs.c Fri Mar 2 11:12:10 2001 +++ linux/drivers/isdn/hysdn/hysdn_procfs.c Sun Aug 12 10:38:48 2001 @@ -113,15 +113,6 @@ } /* put_log_buffer */ -/*************************/ -/* dummy file operations */ -/*************************/ -static loff_t -hysdn_dummy_lseek(struct file *file, loff_t offset, int orig) -{ - return -ESPIPE; -} /* hysdn_dummy_lseek */ - /**********************************/ /* log file operations and tables */ /**********************************/ @@ -340,7 +331,7 @@ /**************************************************/ static struct file_operations log_fops = { - llseek: hysdn_dummy_lseek, + llseek: no_llseek, read: hysdn_log_read, write: hysdn_log_write, poll: hysdn_log_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/hysdn/hysdn_proclog.c linux/drivers/isdn/hysdn/hysdn_proclog.c --- v2.4.8/linux/drivers/isdn/hysdn/hysdn_proclog.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/isdn/hysdn/hysdn_proclog.c Mon Aug 13 16:35:28 2001 @@ -1,4 +1,4 @@ -/* $Id: hysdn_proclog.c,v 1.9.6.1 2001/05/26 15:19:58 kai Exp $ +/* $Id: hysdn_proclog.c,v 1.9.6.2 2001/08/13 07:46:15 kai Exp $ * Linux driver for HYSDN cards, /proc/net filesystem log functions. * written by Werner Cornelius (werner@titro.de) for Hypercope GmbH @@ -153,15 +153,6 @@ } /* put_log_buffer */ -/*************************/ -/* dummy file operations */ -/*************************/ -static loff_t -hysdn_dummy_lseek(struct file *file, loff_t offset, int orig) -{ - return -ESPIPE; -} /* hysdn_dummy_lseek */ - /******************************/ /* file operations and tables */ /******************************/ @@ -411,7 +402,7 @@ /**************************************************/ static struct file_operations log_fops = { - llseek: hysdn_dummy_lseek, + llseek: no_llseek, read: hysdn_log_read, write: hysdn_log_write, poll: hysdn_log_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/icn/icn.c linux/drivers/isdn/icn/icn.c --- v2.4.8/linux/drivers/isdn/icn/icn.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/isdn/icn/icn.c Mon Aug 13 16:35:28 2001 @@ -1,4 +1,4 @@ -/* $Id: icn.c,v 1.65.6.5 2001/06/09 15:14:19 kai Exp $ +/* $Id: icn.c,v 1.65.6.6 2001/07/13 09:20:12 kai Exp $ * ISDN low-level module for the ICN active ISDN-Card. * @@ -34,7 +34,7 @@ #undef MAP_DEBUG static char -*revision = "$Revision: 1.65.6.5 $"; +*revision = "$Revision: 1.65.6.6 $"; static int icn_addcard(int, char *, char *); @@ -804,8 +804,8 @@ icn_loadboot(u_char * buffer, icn_card * card) { int ret; - ulong flags; u_char *codebuf; + unsigned long flags; #ifdef BOOT_DEBUG printk(KERN_DEBUG "icn_loadboot called, buffaddr=%08lx\n", (ulong) buffer); @@ -818,8 +818,6 @@ kfree(codebuf); return ret; } - save_flags(flags); - cli(); if (!card->rvalid) { if (check_region(card->port, ICN_PORTLEN)) { printk(KERN_WARNING @@ -827,7 +825,6 @@ CID, card->port, card->port + ICN_PORTLEN); - restore_flags(flags); kfree(codebuf); return -EBUSY; } @@ -840,14 +837,12 @@ if (check_mem_region(dev.memaddr, 0x4000)) { printk(KERN_WARNING "icn: memory at 0x%08lx in use.\n", dev.memaddr); - restore_flags(flags); return -EBUSY; } request_mem_region(dev.memaddr, 0x4000, "icn-isdn (all cards)"); dev.shmem = ioremap(dev.memaddr, 0x4000); dev.mvalid = 1; } - restore_flags(flags); OUTB_P(0, ICN_RUN); /* Reset Controller */ OUTB_P(0, ICN_MAPRAM); /* Disable RAM */ icn_shiftout(ICN_CFG, 0x0f, 3, 4); /* Windowsize= 16k */ @@ -1051,18 +1046,19 @@ ocount = 1; xcount = loop = 0; while (len) { - save_flags(flags); - cli(); - lastmap_card = dev.mcard; - lastmap_channel = dev.channel; - icn_map_channel(card, mch); - avail = cmd_free; count = MIN(avail, len); if (user) copy_from_user(msg, buf, count); else memcpy(msg, buf, count); + + save_flags(flags); + cli(); + lastmap_card = dev.mcard; + lastmap_channel = dev.channel; + icn_map_channel(card, mch); + icn_putmsg(card, '>'); for (p = msg, pp = readb(&cmd_i), i = count; i > 0; i--, p++, pp ++) { @@ -1140,10 +1136,7 @@ icn_disable_cards(void) { icn_card *card = cards; - unsigned long flags; - save_flags(flags); - cli(); while (card) { if (check_region(card->port, ICN_PORTLEN)) { printk(KERN_WARNING @@ -1151,14 +1144,12 @@ CID, card->port, card->port + ICN_PORTLEN); - cli(); } else { OUTB_P(0, ICN_RUN); /* Reset Controller */ OUTB_P(0, ICN_MAPRAM); /* Disable RAM */ } card = card->next; } - restore_flags(flags); } static int @@ -1603,25 +1594,19 @@ static int icn_addcard(int port, char *id1, char *id2) { - ulong flags; icn_card *card; icn_card *card2; - save_flags(flags); - cli(); if (!(card = icn_initcard(port, id1))) { - restore_flags(flags); return -EIO; } if (!strlen(id2)) { - restore_flags(flags); printk(KERN_INFO "icn: (%s) ICN-2B, port 0x%x added\n", card->interface.id, port); return 0; } if (!(card2 = icn_initcard(port, id2))) { - restore_flags(flags); printk(KERN_INFO "icn: (%s) half ICN-4B, port 0x%x added\n", card2->interface.id, port); @@ -1633,7 +1618,6 @@ card2->doubleS0 = 1; card2->secondhalf = 1; card2->other = card; - restore_flags(flags); printk(KERN_INFO "icn: (%s and %s) ICN-4B, port 0x%x added\n", card->interface.id, card2->interface.id, port); diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/isdn_common.c linux/drivers/isdn/isdn_common.c --- v2.4.8/linux/drivers/isdn/isdn_common.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/isdn/isdn_common.c Mon Aug 13 16:35:28 2001 @@ -1,4 +1,4 @@ -/* $Id: isdn_common.c,v 1.114.6.12 2001/06/09 15:14:15 kai Exp $ +/* $Id: isdn_common.c,v 1.114.6.13 2001/08/13 07:46:15 kai Exp $ * Linux ISDN subsystem, common used functions (linklevel). * @@ -51,7 +51,7 @@ isdn_dev *dev; -static char *isdn_revision = "$Revision: 1.114.6.12 $"; +static char *isdn_revision = "$Revision: 1.114.6.13 $"; extern char *isdn_net_revision; extern char *isdn_tty_revision; @@ -1077,12 +1077,6 @@ return retval; } -static loff_t -isdn_llseek(struct file *file, loff_t offset, int orig) -{ - return -ESPIPE; -} - static ssize_t isdn_write(struct file *file, const char *buf, size_t count, loff_t * off) { @@ -1748,7 +1742,7 @@ static struct file_operations isdn_fops = { owner: THIS_MODULE, - llseek: isdn_llseek, + llseek: no_llseek, read: isdn_read, write: isdn_write, poll: isdn_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/isdn/isdnloop/isdnloop.c linux/drivers/isdn/isdnloop/isdnloop.c --- v2.4.8/linux/drivers/isdn/isdnloop/isdnloop.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/isdn/isdnloop/isdnloop.c Mon Aug 13 16:35:28 2001 @@ -1,4 +1,4 @@ -/* $Id: isdnloop.c,v 1.11.6.3 2001/06/09 15:14:19 kai Exp $ +/* $Id: isdnloop.c,v 1.11.6.4 2001/07/13 09:20:12 kai Exp $ * ISDN low-level module implementing a dummy loop driver. * @@ -26,7 +26,7 @@ #include "isdnloop.h" static char -*revision = "$Revision: 1.11.6.3 $"; +*revision = "$Revision: 1.11.6.4 $"; static int isdnloop_addcard(char *); @@ -1518,16 +1518,11 @@ static int isdnloop_addcard(char *id1) { - ulong flags; isdnloop_card *card; - save_flags(flags); - cli(); if (!(card = isdnloop_initcard(id1))) { - restore_flags(flags); return -EIO; } - restore_flags(flags); printk(KERN_INFO "isdnloop: (%s) virtual card added\n", card->interface.id); diff -u --recursive --new-file v2.4.8/linux/drivers/macintosh/adb.c linux/drivers/macintosh/adb.c --- v2.4.8/linux/drivers/macintosh/adb.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/macintosh/adb.c Sun Aug 12 10:38:48 2001 @@ -543,11 +543,6 @@ return 0; } -static long long adb_lseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static ssize_t adb_read(struct file *file, char *buf, size_t count, loff_t *ppos) { @@ -665,7 +660,7 @@ } static struct file_operations adb_fops = { - llseek: adb_lseek, + llseek: no_llseek, read: adb_read, write: adb_write, open: adb_open, diff -u --recursive --new-file v2.4.8/linux/drivers/macintosh/rtc.c linux/drivers/macintosh/rtc.c --- v2.4.8/linux/drivers/macintosh/rtc.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/macintosh/rtc.c Sun Aug 12 10:38:48 2001 @@ -58,11 +58,6 @@ (ppc_md.set_rtc_time)(nowtime); } -static loff_t rtc_lseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { @@ -125,7 +120,7 @@ static struct file_operations rtc_fops = { owner: THIS_MODULE, - llseek: rtc_lseek, + llseek: no_llseek, ioctl: rtc_ioctl, open: rtc_open, release: rtc_release diff -u --recursive --new-file v2.4.8/linux/drivers/md/lvm-snap.c linux/drivers/md/lvm-snap.c --- v2.4.8/linux/drivers/md/lvm-snap.c Fri Apr 27 14:23:25 2001 +++ linux/drivers/md/lvm-snap.c Wed Aug 15 01:22:15 2001 @@ -386,8 +386,8 @@ blksize_org = lvm_get_blksize(org_phys_dev); blksize_snap = lvm_get_blksize(snap_phys_dev); - max_blksize = max(blksize_org, blksize_snap); - min_blksize = min(blksize_org, blksize_snap); + max_blksize = max(int, blksize_org, blksize_snap); + min_blksize = min(int, blksize_org, blksize_snap); max_sectors = KIO_MAX_SECTORS * (min_blksize>>9); if (chunk_size % (max_blksize>>9)) @@ -395,7 +395,7 @@ while (chunk_size) { - nr_sectors = min(chunk_size, max_sectors); + nr_sectors = min(int, chunk_size, max_sectors); chunk_size -= nr_sectors; iobuf->length = nr_sectors << 9; @@ -503,7 +503,7 @@ buckets = lv->lv_remap_end; max_buckets = calc_max_buckets(); - buckets = min(buckets, max_buckets); + buckets = min(unsigned long, buckets, max_buckets); while (buckets & (buckets-1)) buckets &= (buckets-1); diff -u --recursive --new-file v2.4.8/linux/drivers/md/md.c linux/drivers/md/md.c --- v2.4.8/linux/drivers/md/md.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/md/md.c Sun Aug 12 12:39:02 2001 @@ -483,19 +483,6 @@ } } -static inline int mark_rdev_faulty (mdk_rdev_t * rdev) -{ - if (!rdev) { - MD_BUG(); - return 0; - } - if (rdev->faulty) - return 0; - free_disk_sb(rdev); - rdev->faulty = 1; - return 1; -} - static int read_disk_sb (mdk_rdev_t * rdev) { int ret = -EINVAL; @@ -2088,7 +2075,7 @@ return -EFAULT; nr = info.number; - if (nr >= mddev->sb->nr_disks) + if (nr >= mddev->sb->raid_disks+mddev->sb->spare_disks) return -EINVAL; SET_FROM_SB(major); @@ -2793,6 +2780,7 @@ int md_thread(void * arg) { mdk_thread_t *thread = arg; + struct completion *event; md_lock_kernel(); @@ -2822,9 +2810,9 @@ current->nice = -20; md_unlock_kernel(); - up(thread->sem); - - for (;;) { + complete(thread->event); + while (thread->run) { + void (*run)(void *data); DECLARE_WAITQUEUE(wait, current); add_wait_queue(&thread->wqueue, &wait); @@ -2838,18 +2826,17 @@ remove_wait_queue(&thread->wqueue, &wait); clear_bit(THREAD_WAKEUP, &thread->flags); - if (thread->run) { - thread->run(thread->data); + if ((run=thread->run)) { + run(thread->data); run_task_queue(&tq_disk); - } else - break; + } if (md_signal_pending(current)) { printk("md: %8s(%d) flushing signals.\n", current->comm, current->pid); md_flush_signals(); } } - up(thread->sem); + complete(thread->event); return 0; } @@ -2865,7 +2852,7 @@ { mdk_thread_t *thread; int ret; - DECLARE_MUTEX_LOCKED(sem); + struct completion event; thread = (mdk_thread_t *) kmalloc (sizeof(mdk_thread_t), GFP_KERNEL); @@ -2874,8 +2861,9 @@ memset(thread, 0, sizeof(mdk_thread_t)); md_init_waitqueue_head(&thread->wqueue); - - thread->sem = &sem; + + init_completion(&event); + thread->event = &event; thread->run = run; thread->data = data; thread->name = name; @@ -2884,7 +2872,7 @@ kfree(thread); return NULL; } - down(&sem); + wait_for_completion(&event); return thread; } @@ -2900,17 +2888,16 @@ void md_unregister_thread (mdk_thread_t *thread) { - DECLARE_MUTEX_LOCKED(sem); + struct completion event; + + init_completion(&event); - thread->sem = &sem; + thread->event = &event; thread->run = NULL; thread->name = NULL; - if (!thread->tsk) { - MD_BUG(); - return; - } md_interrupt_thread(thread); - down(&sem); + wait_for_completion(&event); + kfree(thread); } void md_recover_arrays (void) @@ -2926,7 +2913,6 @@ int md_error (mddev_t *mddev, kdev_t rdev) { mdk_rdev_t * rrdev; - int rc; /* printk("md_error dev:(%d:%d), rdev:(%d:%d), (caller: %p,%p,%p,%p).\n",MAJOR(dev),MINOR(dev),MAJOR(rdev),MINOR(rdev), __builtin_return_address(0),__builtin_return_address(1),__builtin_return_address(2),__builtin_return_address(3)); */ @@ -2935,8 +2921,14 @@ return 0; } rrdev = find_rdev(mddev, rdev); - if (!mark_rdev_faulty(rrdev)) + if (rrdev->faulty) return 0; + if (mddev->pers->error_handler == NULL + || mddev->pers->error_handler(mddev,rdev) <= 0) { + free_disk_sb(rrdev); + rrdev->faulty = 1; + } else + return 1; /* * if recovery was running, stop it now. */ @@ -2944,11 +2936,8 @@ mddev->pers->stop_resync(mddev); if (mddev->recovery_running) md_interrupt_thread(md_recovery_thread); - if (mddev->pers->error_handler) { - rc = mddev->pers->error_handler(mddev, rdev); - md_recover_arrays(); - return rc; - } + md_recover_arrays(); + return 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/md/raid1.c linux/drivers/md/raid1.c --- v2.4.8/linux/drivers/md/raid1.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/md/raid1.c Sun Aug 12 12:39:02 2001 @@ -33,6 +33,9 @@ #define MAX_WORK_PER_DISK 128 +#define NR_RESERVED_BUFS 32 + + /* * The following can be used to debug the driver */ @@ -62,7 +65,7 @@ while(cnt) { struct buffer_head *t; md_spin_lock_irq(&conf->device_lock); - if (conf->freebh_cnt >= cnt) + if (!conf->freebh_blocked && conf->freebh_cnt >= cnt) while (cnt) { t = conf->freebh; conf->freebh = t->b_next; @@ -75,15 +78,18 @@ md_spin_unlock_irq(&conf->device_lock); if (cnt == 0) break; - t = (struct buffer_head *)kmalloc(sizeof(struct buffer_head), GFP_NOIO); + t = kmem_cache_alloc(bh_cachep, SLAB_NOIO); if (t) { - memset(t, 0, sizeof(*t)); t->b_next = bh; bh = t; cnt--; } else { PRINTK("raid1: waiting for %d bh\n", cnt); - wait_event(conf->wait_buffer, conf->freebh_cnt >= cnt); + conf->freebh_blocked = 1; + wait_disk_event(conf->wait_buffer, + !conf->freebh_blocked || + conf->freebh_cnt > conf->raid_disks * NR_RESERVED_BUFS/2); + conf->freebh_blocked = 0; } } return bh; @@ -97,7 +103,7 @@ struct buffer_head *t = bh; bh=bh->b_next; if (t->b_pprev == NULL) - kfree(t); + kmem_cache_free(bh_cachep, t); else { t->b_next= conf->freebh; conf->freebh = t; @@ -110,14 +116,13 @@ static int raid1_grow_bh(raid1_conf_t *conf, int cnt) { - /* allocate cnt buffer_heads, possibly less if kalloc fails */ + /* allocate cnt buffer_heads, possibly less if kmalloc fails */ int i = 0; while (i < cnt) { struct buffer_head *bh; - bh = kmalloc(sizeof(*bh), GFP_KERNEL); + bh = kmem_cache_alloc(bh_cachep, SLAB_KERNEL); if (!bh) break; - memset(bh, 0, sizeof(*bh)); md_spin_lock_irq(&conf->device_lock); bh->b_pprev = &conf->freebh; @@ -131,21 +136,18 @@ return i; } -static int raid1_shrink_bh(raid1_conf_t *conf, int cnt) +static void raid1_shrink_bh(raid1_conf_t *conf) { - /* discard cnt buffer_heads, if we can find them */ - int i = 0; + /* discard all buffer_heads */ md_spin_lock_irq(&conf->device_lock); - while ((i < cnt) && conf->freebh) { + while (conf->freebh) { struct buffer_head *bh = conf->freebh; conf->freebh = bh->b_next; - kfree(bh); - i++; + kmem_cache_free(bh_cachep, bh); conf->freebh_cnt--; } md_spin_unlock_irq(&conf->device_lock); - return i; } @@ -155,9 +157,10 @@ do { md_spin_lock_irq(&conf->device_lock); - if (conf->freer1) { + if (!conf->freer1_blocked && conf->freer1) { r1_bh = conf->freer1; conf->freer1 = r1_bh->next_r1; + conf->freer1_cnt--; r1_bh->next_r1 = NULL; r1_bh->state = 0; r1_bh->bh_req.b_state = 0; @@ -170,7 +173,12 @@ memset(r1_bh, 0, sizeof(*r1_bh)); return r1_bh; } - wait_event(conf->wait_buffer, conf->freer1); + conf->freer1_blocked = 1; + wait_disk_event(conf->wait_buffer, + !conf->freer1_blocked || + conf->freer1_cnt > NR_RESERVED_BUFS/2 + ); + conf->freer1_blocked = 0; } while (1); } @@ -186,7 +194,11 @@ spin_lock_irqsave(&conf->device_lock, flags); r1_bh->next_r1 = conf->freer1; conf->freer1 = r1_bh; + conf->freer1_cnt++; spin_unlock_irqrestore(&conf->device_lock, flags); + /* don't need to wakeup wait_buffer because + * raid1_free_bh below will do that + */ } else { kfree(r1_bh); } @@ -203,13 +215,10 @@ if (!r1_bh) break; memset(r1_bh, 0, sizeof(*r1_bh)); - - md_spin_lock_irq(&conf->device_lock); set_bit(R1BH_PreAlloc, &r1_bh->state); - r1_bh->next_r1 = conf->freer1; - conf->freer1 = r1_bh; - md_spin_unlock_irq(&conf->device_lock); + r1_bh->mddev = conf->mddev; + raid1_free_r1bh(r1_bh); i++; } return i; @@ -221,6 +230,7 @@ while (conf->freer1) { struct raid1_bh *r1_bh = conf->freer1; conf->freer1 = r1_bh->next_r1; + conf->freer1_cnt--; kfree(r1_bh); } md_spin_unlock_irq(&conf->device_lock); @@ -551,7 +561,7 @@ struct buffer_head *bh_req, *bhl; struct raid1_bh * r1_bh; int disks = MD_SB_DISKS; - int i, sum_bhs = 0, sectors; + int i, sum_bhs = 0; struct mirror_info *mirror; if (!buffer_locked(bh)) @@ -592,7 +602,6 @@ r1_bh->mddev = mddev; r1_bh->cmd = rw; - sectors = bh->b_size >> 9; if (rw == READ) { /* * read balancing logic: @@ -665,6 +674,11 @@ sum_bhs++; } if (bhl) raid1_free_bh(conf,bhl); + if (!sum_bhs) { + /* Gag - all mirrors non-operational.. */ + raid1_end_bh_io(r1_bh, 0); + return 0; + } md_atomic_set(&r1_bh->remaining, sum_bhs); /* @@ -727,12 +741,14 @@ mark_disk_faulty(sb->disks+mirror->number); mark_disk_nonsync(sb->disks+mirror->number); mark_disk_inactive(sb->disks+mirror->number); - sb->active_disks--; + if (!mirror->write_only) + sb->active_disks--; sb->working_disks--; sb->failed_disks++; mddev->sb_dirty = 1; md_wakeup_thread(conf->thread); - conf->working_disks--; + if (!mirror->write_only) + conf->working_disks--; printk (DISK_FAILED, partition_name (mirror->dev), conf->working_disks); } @@ -744,28 +760,27 @@ int disks = MD_SB_DISKS; int i; - if (conf->working_disks == 1) { - /* - * Uh oh, we can do nothing if this is our last disk, but - * first check if this is a queued request for a device - * which has just failed. - */ - for (i = 0; i < disks; i++) { - if (mirrors[i].dev==dev && !mirrors[i].operational) - return 0; - } - printk (LAST_DISK); - } else { - /* - * Mark disk as unusable + /* Find the drive. + * If it is not operational, then we have already marked it as dead + * else if it is the last working disks, ignore the error, let the + * next level up know. + * else mark the drive as failed + */ + + for (i = 0; i < disks; i++) + if (mirrors[i].dev==dev && mirrors[i].operational) + break; + if (i == disks) + return 0; + + if (i < conf->raid_disks && conf->working_disks == 1) { + /* Don't fail the drive, act as though we were just a + * normal single drive */ - for (i = 0; i < disks; i++) { - if (mirrors[i].dev==dev && mirrors[i].operational) { - mark_disk_bad(mddev, i); - break; - } - } + + return 1; } + mark_disk_bad(mddev, i); return 0; } @@ -1185,6 +1200,15 @@ md_atomic_set(&r1_bh->remaining, sum_bhs); if (bhl) raid1_free_bh(conf, bhl); mbh = r1_bh->mirror_bh_list; + + if (!sum_bhs) { + /* nowhere to write this too... I guess we + * must be done + */ + sync_request_done(bh->b_blocknr, conf); + md_done_sync(mddev, bh->b_size>>9, 0); + raid1_free_buf(r1_bh); + } else while (mbh) { struct buffer_head *bh1 = mbh; mbh = mbh->b_next; @@ -1192,18 +1216,12 @@ md_sync_acct(bh1->b_dev, bh1->b_size/512); } } else { - dev = bh->b_dev; - raid1_map (mddev, &bh->b_dev); - if (bh->b_dev == dev) { - printk (IO_ERROR, partition_name(bh->b_dev), bh->b_blocknr); - md_done_sync(mddev, bh->b_size>>9, 0); - } else { - printk (REDIRECT_SECTOR, - partition_name(bh->b_dev), bh->b_blocknr); - bh->b_rdev = bh->b_dev; - bh->b_rsector = bh->b_blocknr; - generic_make_request(READ, bh); - } + /* There is no point trying a read-for-reconstruct + * as reconstruct is about to be aborted + */ + + printk (IO_ERROR, partition_name(bh->b_dev), bh->b_blocknr); + md_done_sync(mddev, bh->b_size>>9, 0); } break; @@ -1615,12 +1633,14 @@ * As a minimum, 1 r1bh and raid_disks buffer_heads * would probably get us by in tight memory situations, * but a few more is probably a good idea. - * For now, try 16 r1bh and 16*raid_disks bufferheads - * This will allow at least 16 concurrent reads or writes - * even if kmalloc starts failing - */ - if (raid1_grow_r1bh(conf, 16) < 16 || - raid1_grow_bh(conf, 16*conf->raid_disks)< 16*conf->raid_disks) { + * For now, try NR_RESERVED_BUFS r1bh and + * NR_RESERVED_BUFS*raid_disks bufferheads + * This will allow at least NR_RESERVED_BUFS concurrent + * reads or writes even if kmalloc starts failing + */ + if (raid1_grow_r1bh(conf, NR_RESERVED_BUFS) < NR_RESERVED_BUFS || + raid1_grow_bh(conf, NR_RESERVED_BUFS*conf->raid_disks) + < NR_RESERVED_BUFS*conf->raid_disks) { printk(MEM_ERROR, mdidx(mddev)); goto out_free_conf; } @@ -1711,7 +1731,7 @@ out_free_conf: raid1_shrink_r1bh(conf); - raid1_shrink_bh(conf, conf->freebh_cnt); + raid1_shrink_bh(conf); raid1_shrink_buffers(conf); kfree(conf); mddev->private = NULL; @@ -1772,7 +1792,7 @@ if (conf->resync_thread) md_unregister_thread(conf->resync_thread); raid1_shrink_r1bh(conf); - raid1_shrink_bh(conf, conf->freebh_cnt); + raid1_shrink_bh(conf); raid1_shrink_buffers(conf); kfree(conf); mddev->private = NULL; diff -u --recursive --new-file v2.4.8/linux/drivers/media/radio/Config.in linux/drivers/media/radio/Config.in --- v2.4.8/linux/drivers/media/radio/Config.in Sun Aug 12 13:27:59 2001 +++ linux/drivers/media/radio/Config.in Sun Aug 12 11:16:18 2001 @@ -27,9 +27,6 @@ dep_tristate ' miroSOUND PCM20 radio' CONFIG_RADIO_MIROPCM20 $CONFIG_VIDEO_DEV $CONFIG_SOUND_ACI_MIXER dep_tristate ' miroSOUND PCM20 radio RDS user interface (EXPERIMENTAL)' CONFIG_RADIO_MIROPCM20_RDS $CONFIG_RADIO_MIROPCM20 $CONFIG_EXPERIMENTAL dep_tristate ' SF16FMI Radio' CONFIG_RADIO_SF16FMI $CONFIG_VIDEO_DEV -if [ "$CONFIG_RADIO_SF16FMI" = "y" ]; then - hex ' SF16FMI I/O port (0x284 or 0x384)' CONFIG_RADIO_SF16FMI_PORT 284 -fi dep_tristate ' TerraTec ActiveRadio ISA Standalone' CONFIG_RADIO_TERRATEC $CONFIG_VIDEO_DEV if [ "$CONFIG_RADIO_TERRATEC" = "y" ]; then hex ' Terratec i/o port (normally 0x590)' CONFIG_RADIO_TERRATEC_PORT 590 diff -u --recursive --new-file v2.4.8/linux/drivers/media/radio/radio-sf16fmi.c linux/drivers/media/radio/radio-sf16fmi.c --- v2.4.8/linux/drivers/media/radio/radio-sf16fmi.c Sat May 19 17:43:06 2001 +++ linux/drivers/media/radio/radio-sf16fmi.c Sun Aug 12 11:16:18 2001 @@ -5,6 +5,7 @@ * * Fitted to new interface by Alan Cox * Made working and cleaned up functions + * Support for ISAPnP by Ladislav Michl * * Notes on the hardware * @@ -14,14 +15,15 @@ * */ +#include /* __setup */ #include /* Modules */ #include /* Initdata */ #include /* check_region, request_region */ #include /* udelay */ +#include /* kernel radio structs */ +#include #include /* outb, outb_p */ #include /* copy to/from user */ -#include /* kernel radio structs */ -#include /* CONFIG_RADIO_SF16MI_PORT */ #include struct fmi_device @@ -32,13 +34,10 @@ __u32 flags; }; -#ifndef CONFIG_RADIO_SF16FMI_PORT -#define CONFIG_RADIO_SF16FMI_PORT -1 -#endif - -static int io = CONFIG_RADIO_SF16FMI_PORT; +static int io = -1; static int radio_nr = -1; static int users = 0; +static struct pci_dev *dev = NULL; static struct semaphore lock; /* freq is in 1/16 kHz to internal number, hw precision is 50 kHz */ @@ -284,16 +283,51 @@ ioctl: fmi_ioctl, }; +/* ladis: this is my card. does any other types exist? */ +static struct isapnp_device_id id_table[] __devinitdata = { + { ISAPNP_ANY_ID, ISAPNP_ANY_ID, + ISAPNP_VENDOR('M','F','R'), ISAPNP_FUNCTION(0xad10), 0}, + { ISAPNP_CARD_END, }, +}; + +MODULE_DEVICE_TABLE(isapnp, id_table); + +static int isapnp_fmi_probe(void) +{ + int i = 0; + + while (id_table[i].card_vendor != 0 && dev == NULL) { + dev = isapnp_find_dev(NULL, id_table[i].vendor, + id_table[i].function, NULL); + } + + if (!dev) + return -ENODEV; + if (dev->prepare(dev) < 0) + return -EAGAIN; + if (!(dev->resource[0].flags & IORESOURCE_IO)) + return -ENODEV; + if (dev->activate(dev) < 0) { + printk ("radio-sf16fmi: ISAPnP configure failed (out of resources?)\n"); + return -ENOMEM; + } + + i = dev->resource[0].start; + printk ("radio-sf16fmi: ISAPnP reports card at %#x\n", i); + + return i; +} + static int __init fmi_init(void) { - if(io==-1) - { - printk(KERN_ERR "You must set an I/O address with io=0x???\n"); - return -EINVAL; + if (io < 0) + io = isapnp_fmi_probe(); + if (io < 0) { + printk(KERN_ERR "radio-sf16fmi: No PnP card found."); + return io; } - if (!request_region(io, 2, "fmi")) - { - printk(KERN_ERR "fmi: port 0x%x already in use\n", io); + if (!request_region(io, 2, "radio-sf16fmi")) { + printk(KERN_ERR "radio-sf16fmi: port 0x%x already in use\n", io); return -EBUSY; } @@ -305,14 +339,12 @@ init_MUTEX(&lock); - if(video_register_device(&fmi_radio, VFL_TYPE_RADIO, radio_nr)==-1) - { + if (video_register_device(&fmi_radio, VFL_TYPE_RADIO, radio_nr) == -1) { release_region(io, 2); return -EINVAL; } - printk(KERN_INFO "SF16FMx radio card driver at 0x%x.\n", io); - printk(KERN_INFO "(c) 1998 Petr Vandrovec, vandrove@vc.cvut.cz.\n"); + printk(KERN_INFO "SF16FMx radio card driver at 0x%x\n", io); /* mute card - prevents noisy bootups */ fmi_mute(io); return 0; @@ -329,9 +361,20 @@ static void __exit fmi_cleanup_module(void) { video_unregister_device(&fmi_radio); - release_region(io,2); + release_region(io, 2); + if (dev) + dev->deactivate(dev); } module_init(fmi_init); module_exit(fmi_cleanup_module); +#ifndef MODULE +static int __init fmi_setup_io(char *str) +{ + get_option(&str, &io); + return 1; +} + +__setup("sf16fm=", fmi_setup_io); +#endif diff -u --recursive --new-file v2.4.8/linux/drivers/media/video/tvmixer.c linux/drivers/media/video/tvmixer.c --- v2.4.8/linux/drivers/media/video/tvmixer.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/media/video/tvmixer.c Sun Aug 12 10:38:48 2001 @@ -42,7 +42,6 @@ static int tvmixer_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); static int tvmixer_open(struct inode *inode, struct file *file); static int tvmixer_release(struct inode *inode, struct file *file); -static loff_t tvmixer_llseek(struct file *file, loff_t offset, int origin); static struct i2c_driver driver = { @@ -55,7 +54,7 @@ static struct file_operations tvmixer_fops = { owner: THIS_MODULE, - llseek: tvmixer_llseek, + llseek: no_llseek, ioctl: tvmixer_ioctl, open: tvmixer_open, release: tvmixer_release, @@ -231,11 +230,6 @@ if (client->adapter->dec_use) client->adapter->dec_use(client->adapter); return 0; -} - -static loff_t tvmixer_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; } /* ----------------------------------------------------------------------- */ diff -u --recursive --new-file v2.4.8/linux/drivers/media/video/videodev.c linux/drivers/media/video/videodev.c --- v2.4.8/linux/drivers/media/video/videodev.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/media/video/videodev.c Sun Aug 12 10:38:48 2001 @@ -72,9 +72,6 @@ #ifdef CONFIG_VIDEO_PLANB extern int init_planbs(struct video_init *); #endif -#ifdef CONFIG_VIDEO_ZORAN -extern int init_zoran_cards(struct video_init *); -#endif static struct video_init video_init_list[]={ #ifdef CONFIG_VIDEO_BWQCAM @@ -86,9 +83,6 @@ #ifdef CONFIG_VIDEO_PLANB {"planb", init_planbs}, #endif -#ifdef CONFIG_VIDEO_ZORAN - {"zoran", init_zoran_cards}, -#endif {"end", NULL} }; @@ -208,17 +202,6 @@ return 0; } -/* - * Question: Should we be able to capture and then seek around the - * image ? - */ - -static long long video_lseek(struct file * file, - long long offset, int origin) -{ - return -ESPIPE; -} - static int video_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { @@ -548,7 +531,7 @@ static struct file_operations video_fops= { owner: THIS_MODULE, - llseek: video_lseek, + llseek: no_llseek, read: video_read, write: video_write, ioctl: video_ioctl, diff -u --recursive --new-file v2.4.8/linux/drivers/message/fusion/mptctl.c linux/drivers/message/fusion/mptctl.c --- v2.4.8/linux/drivers/message/fusion/mptctl.c Wed Jul 25 17:10:20 2001 +++ linux/drivers/message/fusion/mptctl.c Sun Aug 12 10:38:48 2001 @@ -205,13 +205,6 @@ } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ -static loff_t -mptctl_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ static ssize_t mptctl_write(struct file *file, const char *buf, size_t count, loff_t *ppos) { @@ -1092,7 +1085,7 @@ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,51) owner: THIS_MODULE, #endif - llseek: mptctl_llseek, + llseek: no_llseek, read: mptctl_read, write: mptctl_write, ioctl: mpt_ioctl, diff -u --recursive --new-file v2.4.8/linux/drivers/mtd/devices/docecc.c linux/drivers/mtd/devices/docecc.c --- v2.4.8/linux/drivers/mtd/devices/docecc.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/mtd/devices/docecc.c Wed Aug 15 01:22:15 2001 @@ -80,8 +80,6 @@ return x; } -#define min(a,b) ((a) < (b) ? (a) : (b)) - #define CLEAR(a,n) {\ int ci;\ for(ci=(n)-1;ci >=0;ci--)\ @@ -404,7 +402,7 @@ den = 0; /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */ - for (i = min(deg_lambda,NN-KK-1) & ~1; i >= 0; i -=2) { + for (i = min(int, deg_lambda,NN-KK-1) & ~1; i >= 0; i -=2) { if(lambda[i+1] != A0) den ^= Alpha_to[modnn(lambda[i+1] + i * root[j])]; } diff -u --recursive --new-file v2.4.8/linux/drivers/net/3c505.c linux/drivers/net/3c505.c --- v2.4.8/linux/drivers/net/3c505.c Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/3c505.c Sun Aug 12 10:51:42 2001 @@ -607,7 +607,7 @@ skb_reserve(skb, 2); target = skb_put(skb, rlen); - if (virt_to_bus(target + rlen) >= MAX_DMA_ADDRESS) { + if ((unsigned long)(target + rlen) >= MAX_DMA_ADDRESS) { adapter->current_dma.target = target; target = adapter->dma_buffer; } else { @@ -1027,10 +1027,12 @@ adapter->current_dma.direction = 1; adapter->current_dma.start_time = jiffies; - target = virt_to_bus(skb->data); - if ((target + nlen) >= MAX_DMA_ADDRESS) { + if ((unsigned long)(skb->data + nlen) >= MAX_DMA_ADDRESS) { memcpy(adapter->dma_buffer, skb->data, nlen); target = virt_to_bus(adapter->dma_buffer); + } + else { + target = virt_to_bus(skb->data); } adapter->current_dma.skb = skb; diff -u --recursive --new-file v2.4.8/linux/drivers/net/3c59x.c linux/drivers/net/3c59x.c --- v2.4.8/linux/drivers/net/3c59x.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/3c59x.c Sun Aug 12 12:27:18 2001 @@ -9,9 +9,13 @@ Members of the series include Fast EtherLink 3c590/3c592/3c595/3c597 and the EtherLink XL 3c900 and 3c905 cards. + Problem reports and questions should be directed to + vortex@scyld.com + The author may be reached as becker@scyld.com, or C/O - Center of Excellence in Space Data and Information Sciences - Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771 + Scyld Computing Corporation + 410 Severn Ave., Suite 210 + Annapolis MD 21403 Linux Kernel Additions: @@ -50,7 +54,7 @@ - Put vortex_info_tbl into __devinitdata - In the vortex_error StatsFull HACK, disable stats in vp->intr_enable as well as in the hardware. - - Increased the loop counter in wait_for_completion from 2,000 to 4,000. + - Increased the loop counter in issue_and_wait from 2,000 to 4,000. LK1.1.5 28 April 2000, andrewm - Added powerpc defines (John Daniel said these work...) @@ -92,7 +96,7 @@ - Ignore request_region() return value - already reserved if Cardbus. - Merged some additional Cardbus flags from Don's 0.99Qk - Some fixes for 3c556 (Fred Maciel) - - Fix for EISA initialisation (Jan Rkorajski) + - Fix for EISA initialisation (Jan Rekorajski) - Renamed MII_XCVR_PWR and EEPROM_230 to align with 3c575_cb and D. Becker's drivers - Fixed MII_XCVR_PWR for 3CCFE575CT - Added INVERT_LED_PWR, used it. @@ -121,7 +125,7 @@ LK1.1.12 1 Jan 2001 andrewm (2.4.0-pre1) - Call pci_enable_device before we request our IRQ (Tobias Ringstrom) - Add 3c590 PCI latency timer hack to vortex_probe1 (from 0.99Ra) - - Added extended wait_for_completion for the 3c905CX. + - Added extended issue_and_wait for the 3c905CX. - Look for an MII on PHY index 24 first (3c905CX oddity). - Add HAS_NWAY to 3cSOHO100-TX (Brett Frankenberger) - Don't free skbs we don't own on oom path in vortex_open(). @@ -149,6 +153,19 @@ - Implemented alloc_etherdev() API - Special-case the 'Tx error 82' message. + LK1.1.16 18 July 2001 akpm + - Make NETIF_F_SG dependent upon nr_free_highpages(), not on CONFIG_HIGHMEM + - Lessen verbosity of bootup messages + - Fix WOL - use new PM API functions. + - Use netif_running() instead of vp->open in suspend/resume. + - Don't reset the interface logic on open/close/rmmod. It upsets + autonegotiation, and hence DHCP (from 0.99T). + - Back out EEPROM_NORESET flag because of the above (we do it for all + NICs). + - Correct 3c982 identification string + - Rename wait_for_completion() to issue_and_wait() to avoid completion.h + clash. + - See http://www.uow.edu.au/~andrewm/linux/#3c59x-2.3 for more details. - Also see Documentation/networking/vortex.txt */ @@ -164,8 +181,8 @@ #define DRV_NAME "3c59x" -#define DRV_VERSION "LK1.1.15" -#define DRV_RELDATE "6 June 2001" +#define DRV_VERSION "LK1.1.16" +#define DRV_RELDATE "19 July 2001" @@ -230,6 +247,7 @@ #include #include #include +#include #include /* For NR_IRQS only. */ #include #include @@ -244,10 +262,11 @@ static char version[] __devinitdata = -DRV_NAME ".c:" DRV_VERSION " " DRV_RELDATE " Donald Becker and others. http://www.scyld.com/network/vortex.html\n"; +DRV_NAME ": Donald Becker and others. www.scyld.com/network/vortex.html\n"; MODULE_AUTHOR("Donald Becker "); -MODULE_DESCRIPTION("3Com 3c59x/3c90x/3c575 series Vortex/Boomerang/Cyclone driver"); +MODULE_DESCRIPTION("3Com 3c59x/3c9xx ethernet driver " + DRV_VERSION " " DRV_RELDATE); MODULE_PARM(debug, "i"); MODULE_PARM(options, "1-" __MODULE_STRING(8) "i"); MODULE_PARM(full_duplex, "1-" __MODULE_STRING(8) "i"); @@ -379,7 +398,7 @@ EEPROM_8BIT=0x10, /* AKPM: Uses 0x230 as the base bitmaps for EEPROM reads */ HAS_PWR_CTRL=0x20, HAS_MII=0x40, HAS_NWAY=0x80, HAS_CB_FNS=0x100, INVERT_MII_PWR=0x200, INVERT_LED_PWR=0x400, MAX_COLLISION_RESET=0x800, - EEPROM_OFFSET=0x1000, EEPROM_NORESET=0x2000, HAS_HWCKSM=0x4000 }; + EEPROM_OFFSET=0x1000, HAS_HWCKSM=0x2000 }; enum vortex_chips { CH_3C590 = 0, @@ -436,7 +455,7 @@ #define EISA_TBL_OFFSET 0 /* Offset of this entry for vortex_eisa_init */ {"3c590 Vortex 10Mbps", PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, - {"3c592 EISA 10mbps Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */ + {"3c592 EISA 10Mbps Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */ PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, {"3c597 EISA Fast Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */ PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, @@ -475,7 +494,7 @@ PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM, 128, }, {"3c980 Cyclone", PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, - {"3c980 10/100 Base-TX NIC(Python-T)", + {"3c982 Dual Port Server Cyclone", PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, }, {"3cSOHO100-TX Hurricane", @@ -487,7 +506,7 @@ HAS_HWCKSM, 128, }, {"3c556B Laptop Hurricane", PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|EEPROM_OFFSET|HAS_CB_FNS|INVERT_MII_PWR| - EEPROM_NORESET|HAS_HWCKSM, 128, }, + HAS_HWCKSM, 128, }, {"3c575 [Megahertz] 10/100 LAN CardBus", PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG|HAS_MII|EEPROM_8BIT, 128, }, @@ -752,6 +771,7 @@ partner_flow_ctrl:1, /* Partner supports flow control */ has_nway:1, enable_wol:1, /* Wake-on-LAN is enabled */ + pm_state_valid:1, /* power_state[] has sane contents */ open:1, medialock:1, must_free_region:1; /* Flag: if zero, Cardbus owns the I/O region */ @@ -767,6 +787,7 @@ u16 io_size; /* Size of PCI region (for release_region) */ spinlock_t lock; /* Serialise access to device & its vortex_private */ spinlock_t mdio_lock; /* Serialise access to mdio hardware */ + u32 power_state[16]; }; /* The action to take with a media selection timer tick. @@ -847,11 +868,8 @@ { struct net_device *dev = pdev->driver_data; - printk(KERN_DEBUG "vortex_suspend(%s)\n", dev->name); - if (dev && dev->priv) { - struct vortex_private *vp = (struct vortex_private *)dev->priv; - if (vp->open) { + if (netif_running(dev)) { netif_device_detach(dev); vortex_down(dev); } @@ -863,11 +881,8 @@ { struct net_device *dev = pdev->driver_data; - printk(KERN_DEBUG "vortex_resume(%s)\n", dev->name); - if (dev && dev->priv) { - struct vortex_private *vp = (struct vortex_private *)dev->priv; - if (vp->open) { + if (netif_running(dev)) { vortex_up(dev); netif_device_attach(dev); } @@ -958,13 +973,12 @@ int i, step; struct net_device *dev; static int printed_version; - int retval; + int retval, print_info; struct vortex_chip_info * const vci = &vortex_info_tbl[chip_idx]; char *print_name; if (!printed_version) { - printk (KERN_INFO "%s", version); - printk (KERN_INFO "See Documentation/networking/vortex.txt\n"); + printk (version); printed_version = 1; } @@ -977,14 +991,40 @@ goto out; } SET_MODULE_OWNER(dev); + vp = dev->priv; + + /* The lower four bits are the media type. */ + if (dev->mem_start) { + /* + * The 'options' param is passed in as the third arg to the + * LILO 'ether=' argument for non-modular use + */ + option = dev->mem_start; + } + else if (card_idx < MAX_UNITS) + option = options[card_idx]; + else + option = -1; - printk(KERN_INFO "%s: 3Com %s %s at 0x%lx, ", + if (option > 0) { + if (option & 0x8000) + vortex_debug = 7; + if (option & 0x4000) + vortex_debug = 2; + if (option & 0x0400) + vp->enable_wol = 1; + } + + print_info = (vortex_debug > 1); + if (print_info) + printk (KERN_INFO "See Documentation/networking/vortex.txt\n"); + + printk(KERN_INFO "%s: 3Com %s %s at 0x%lx. Vers " DRV_VERSION "\n", print_name, pdev ? "PCI" : "EISA", vci->name, ioaddr); - vp = dev->priv; dev->base_addr = ioaddr; dev->irq = irq; dev->mtu = mtu; @@ -1048,19 +1088,6 @@ if (pdev) pci_set_drvdata(pdev, dev); - /* The lower four bits are the media type. */ - if (dev->mem_start) { - /* - * AKPM: ewww.. The 'options' param is passed in as the third arg to the - * LILO 'ether=' argument for non-modular use - */ - option = dev->mem_start; - } - else if (card_idx < MAX_UNITS) - option = options[card_idx]; - else - option = -1; - vp->media_override = 7; if (option >= 0) { vp->media_override = ((option & 7) == 2) ? 0 : option & 15; @@ -1117,27 +1144,33 @@ printk(" ***INVALID CHECKSUM %4.4x*** ", checksum); for (i = 0; i < 3; i++) ((u16 *)dev->dev_addr)[i] = htons(eeprom[i + 10]); - for (i = 0; i < 6; i++) - printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]); + if (print_info) { + for (i = 0; i < 6; i++) + printk("%c%2.2x", i ? ':' : ' ', dev->dev_addr[i]); + } EL3WINDOW(2); for (i = 0; i < 6; i++) outb(dev->dev_addr[i], ioaddr + i); #ifdef __sparc__ - printk(", IRQ %s\n", __irq_itoa(dev->irq)); + if (print_info) + printk(", IRQ %s\n", __irq_itoa(dev->irq)); #else - printk(", IRQ %d\n", dev->irq); + if (print_info) + printk(", IRQ %d\n", dev->irq); /* Tell them about an invalid IRQ. */ - if (vortex_debug && (dev->irq <= 0 || dev->irq >= NR_IRQS)) + if (dev->irq <= 0 || dev->irq >= NR_IRQS) printk(KERN_WARNING " *** Warning: IRQ %d is unlikely to work! ***\n", dev->irq); #endif EL3WINDOW(4); step = (inb(ioaddr + Wn4_NetDiag) & 0x1e) >> 1; - printk(KERN_INFO " product code %02x%02x rev %02x.%d date %02d-" - "%02d-%02d\n", eeprom[6]&0xff, eeprom[6]>>8, eeprom[0x14], - step, (eeprom[4]>>5) & 15, eeprom[4] & 31, eeprom[4]>>9); + if (print_info) { + printk(KERN_INFO " product code %02x%02x rev %02x.%d date %02d-" + "%02d-%02d\n", eeprom[6]&0xff, eeprom[6]>>8, eeprom[0x14], + step, (eeprom[4]>>5) & 15, eeprom[4] & 31, eeprom[4]>>9); + } if (pdev && vci->drv_flags & HAS_CB_FNS) { @@ -1151,8 +1184,10 @@ if (!vp->cb_fn_base) goto free_ring; } - printk(KERN_INFO "%s: CardBus functions mapped %8.8lx->%p\n", - print_name, fn_st_addr, vp->cb_fn_base); + if (print_info) { + printk(KERN_INFO "%s: CardBus functions mapped %8.8lx->%p\n", + print_name, fn_st_addr, vp->cb_fn_base); + } EL3WINDOW(2); n = inw(ioaddr + Wn2_ResetOptions) & ~0x4010; @@ -1170,7 +1205,8 @@ if (vp->info1 & 0x8000) { vp->full_duplex = 1; - printk(KERN_INFO "Full duplex capable\n"); + if (print_info) + printk(KERN_INFO "Full duplex capable\n"); } { @@ -1181,16 +1217,17 @@ if ((vp->available_media & 0xff) == 0) /* Broken 3c916 */ vp->available_media = 0x40; config = inl(ioaddr + Wn3_Config); - if (vortex_debug > 1) + if (print_info) { printk(KERN_DEBUG " Internal config register is %4.4x, " "transceivers %#x.\n", config, inw(ioaddr + Wn3_Options)); - printk(KERN_INFO " %dK %s-wide RAM %s Rx:Tx split, %s%s interface.\n", - 8 << RAM_SIZE(config), - RAM_WIDTH(config) ? "word" : "byte", - ram_split[RAM_SPLIT(config)], - AUTOSELECT(config) ? "autoselect/" : "", - XCVR(config) > XCVR_ExtMII ? "" : - media_tbl[XCVR(config)].name); + printk(KERN_INFO " %dK %s-wide RAM %s Rx:Tx split, %s%s interface.\n", + 8 << RAM_SIZE(config), + RAM_WIDTH(config) ? "word" : "byte", + ram_split[RAM_SPLIT(config)], + AUTOSELECT(config) ? "autoselect/" : "", + XCVR(config) > XCVR_ExtMII ? "" : + media_tbl[XCVR(config)].name); + } vp->default_media = XCVR(config); if (vp->default_media == XCVR_NWAY) vp->has_nway = 1; @@ -1198,8 +1235,9 @@ } if (vp->media_override != 7) { - printk(KERN_INFO " Media override to transceiver type %d (%s).\n", - vp->media_override, media_tbl[vp->media_override].name); + printk(KERN_INFO "%s: Media override to transceiver type %d (%s).\n", + print_name, vp->media_override, + media_tbl[vp->media_override].name); dev->if_port = vp->media_override; } else dev->if_port = vp->default_media; @@ -1226,8 +1264,10 @@ mii_status = mdio_read(dev, phyx, 1); if (mii_status && mii_status != 0xffff) { vp->phys[phy_idx++] = phyx; - printk(KERN_INFO " MII transceiver found at address %d," - " status %4x.\n", phyx, mii_status); + if (print_info) { + printk(KERN_INFO " MII transceiver found at address %d," + " status %4x.\n", phyx, mii_status); + } if ((mii_status & 0x0040) == 0) mii_preamble_required++; } @@ -1246,13 +1286,12 @@ } } - if (pdev && vp->enable_wol && (vp->capabilities & CapPwrMgmt)) - acpi_set_WOL(dev); - if (vp->capabilities & CapBusMaster) { vp->full_bus_master_tx = 1; - printk(KERN_INFO" Enabling bus-master transmits and %s receives.\n", - (vp->info2 & 1) ? "early" : "whole-frame" ); + if (print_info) { + printk(KERN_INFO " Enabling bus-master transmits and %s receives.\n", + (vp->info2 & 1) ? "early" : "whole-frame" ); + } vp->full_bus_master_rx = (vp->info2 & 1) ? 1 : 2; vp->bus_master = 0; /* AKPM: vortex only */ } @@ -1260,11 +1299,14 @@ /* The 3c59x-specific entries in the device structure. */ dev->open = vortex_open; if (vp->full_bus_master_tx) { + struct sysinfo sysinfo; + dev->hard_start_xmit = boomerang_start_xmit; -#ifndef CONFIG_HIGHMEM - /* Actually, it still should work with iommu. */ - dev->features |= NETIF_F_SG; -#endif + si_meminfo(&sysinfo); + if (sysinfo.totalhigh == 0) { + /* Actually, it still should work with iommu. */ + dev->features |= NETIF_F_SG; + } if (((hw_checksums[card_idx] == -1) && (vp->drv_flags & HAS_HWCKSM)) || (hw_checksums[card_idx] == 1)) { dev->features |= NETIF_F_IP_CSUM; @@ -1273,7 +1315,7 @@ dev->hard_start_xmit = vortex_start_xmit; } - if (vortex_debug > 0) { + if (print_info) { printk(KERN_INFO "%s: scatter/gather %sabled. h/w checksums %sabled\n", print_name, (dev->features & NETIF_F_SG) ? "en":"dis", @@ -1286,6 +1328,11 @@ dev->set_multicast_list = set_rx_mode; dev->tx_timeout = vortex_tx_timeout; dev->watchdog_timeo = (watchdog * HZ) / 1000; + if (pdev && vp->enable_wol) { + vp->pm_state_valid = 1; + pci_save_state(vp->pdev, vp->power_state); + acpi_set_WOL(dev); + } retval = register_netdev(dev); if (retval == 0) return 0; @@ -1306,7 +1353,7 @@ } static void -wait_for_completion(struct net_device *dev, int cmd) +issue_and_wait(struct net_device *dev, int cmd) { int i; @@ -1338,8 +1385,10 @@ unsigned int config; int i; - if (vp->pdev && vp->enable_wol) /* AKPM: test not needed? */ + if (vp->pdev && vp->enable_wol) { pci_set_power_state(vp->pdev, 0); /* Go active */ + pci_restore_state(vp->pdev, vp->power_state); + } /* Before initializing select the active media port. */ EL3WINDOW(3); @@ -1352,19 +1401,23 @@ dev->if_port = vp->media_override; } else if (vp->autoselect) { if (vp->has_nway) { - printk(KERN_INFO "%s: using NWAY device table, not %d\n", dev->name, dev->if_port); + if (vortex_debug > 1) + printk(KERN_INFO "%s: using NWAY device table, not %d\n", + dev->name, dev->if_port); dev->if_port = XCVR_NWAY; } else { /* Find first available media type, starting with 100baseTx. */ dev->if_port = XCVR_100baseTx; while (! (vp->available_media & media_tbl[dev->if_port].mask)) dev->if_port = media_tbl[dev->if_port].next; - printk(KERN_INFO "%s: first available media type: %s\n", + if (vortex_debug > 1) + printk(KERN_INFO "%s: first available media type: %s\n", dev->name, media_tbl[dev->if_port].name); } } else { dev->if_port = vp->default_media; - printk(KERN_INFO "%s: using default media %s\n", + if (vortex_debug > 1) + printk(KERN_INFO "%s: using default media %s\n", dev->name, media_tbl[dev->if_port].name); } @@ -1420,8 +1473,11 @@ dev->name, config); } - wait_for_completion(dev, TxReset); - wait_for_completion(dev, RxReset); + issue_and_wait(dev, TxReset); + /* + * Don't reset the PHY - that upsets autonegotiation during DHCP operations. + */ + issue_and_wait(dev, RxReset|0x04); outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD); @@ -1494,7 +1550,7 @@ set_rx_mode(dev); outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */ -// wait_for_completion(dev, SetTxStart|0x07ff); +// issue_and_wait(dev, SetTxStart|0x07ff); outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */ outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */ /* Allow status bits to be seen. */ @@ -1523,9 +1579,6 @@ int i; int retval; - if (vp->pdev && vp->enable_wol) /* AKPM: test not needed? */ - pci_set_power_state(vp->pdev, 0); /* Go active */ - /* Use the now-standard shared IRQ implementation. */ if ((retval = request_irq(dev->irq, vp->full_bus_master_rx ? &boomerang_interrupt : &vortex_interrupt, SA_SHIRQ, dev->name, dev))) { @@ -1566,7 +1619,6 @@ } vortex_up(dev); - vp->open = 1; return 0; out_free_irq: @@ -1732,7 +1784,7 @@ if (vortex_debug > 0) dump_tx_ring(dev); - wait_for_completion(dev, TxReset); + issue_and_wait(dev, TxReset); vp->stats.tx_errors++; if (vp->full_bus_master_tx) { @@ -1842,12 +1894,13 @@ /* In this case, blow the card away */ vortex_down(dev); - wait_for_completion(dev, TotalReset | 0xff); + issue_and_wait(dev, TotalReset | 0xff); vortex_up(dev); /* AKPM: bug. vortex_up() assumes that the rx ring is full. It may not be. */ } else if (fifo_diag & 0x0400) do_tx_reset = 1; if (fifo_diag & 0x3000) { - wait_for_completion(dev, RxReset); + /* Reset Rx fifo and upload logic */ + issue_and_wait(dev, RxReset|0x07); /* Set the Rx filter to the current state. */ set_rx_mode(dev); outw(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */ @@ -1856,7 +1909,7 @@ } if (do_tx_reset) { - wait_for_completion(dev, TxReset|reset_mask); + issue_and_wait(dev, TxReset|reset_mask); outw(TxEnable, ioaddr + EL3_CMD); if (!vp->full_bus_master_tx) netif_wake_queue(dev); @@ -1908,7 +1961,7 @@ if (tx_status & 0x04) vp->stats.tx_fifo_errors++; if (tx_status & 0x38) vp->stats.tx_aborted_errors++; if (tx_status & 0x30) { - wait_for_completion(dev, TxReset); + issue_and_wait(dev, TxReset); } outw(TxEnable, ioaddr + EL3_CMD); } @@ -1985,7 +2038,7 @@ spin_lock_irqsave(&vp->lock, flags); /* Wait for the stall to complete. */ - wait_for_completion(dev, DownStall); + issue_and_wait(dev, DownStall); prev_entry->next = cpu_to_le32(vp->tx_ring_dma + entry * sizeof(struct boom_tx_desc)); if (inl(ioaddr + DownListPtr) == 0) { outl(vp->tx_ring_dma + entry * sizeof(struct boom_tx_desc), ioaddr + DownListPtr); @@ -2306,7 +2359,7 @@ "size %d.\n", dev->name, pkt_len); } vp->stats.rx_dropped++; - wait_for_completion(dev, RxDiscard); + issue_and_wait(dev, RxDiscard); } return 0; @@ -2459,8 +2512,10 @@ if (vp->full_bus_master_tx) outl(0, ioaddr + DownListPtr); - if (vp->pdev && vp->enable_wol && (vp->capabilities & CapPwrMgmt)) + if (vp->pdev && vp->enable_wol) { + pci_save_state(vp->pdev, vp->power_state); acpi_set_WOL(dev); + } } static int @@ -2522,7 +2577,6 @@ } } - vp->open = 0; return 0; } @@ -2544,7 +2598,7 @@ printk(KERN_ERR " Transmit list %8.8x vs. %p.\n", inl(ioaddr + DownListPtr), &vp->tx_ring[vp->dirty_tx % TX_RING_SIZE]); - wait_for_completion(dev, DownStall); + issue_and_wait(dev, DownStall); for (i = 0; i < TX_RING_SIZE; i++) { printk(KERN_ERR " %d: @%p length %8.8x status %8.8x\n", i, &vp->tx_ring[i], @@ -2821,8 +2875,10 @@ /* The RxFilter must accept the WOL frames. */ outw(SetRxFilter|RxStation|RxMulticast|RxBroadcast, ioaddr + EL3_CMD); outw(RxEnable, ioaddr + EL3_CMD); + /* Change the power state to D3; RxEnable doesn't take effect. */ - pci_set_power_state(vp->pdev, 0x8103); + pci_enable_wake(vp->pdev, 0, 1); + pci_set_power_state(vp->pdev, 3); } @@ -2843,8 +2899,15 @@ * here */ unregister_netdev(dev); - /* Should really use wait_for_completion() here */ - outw((vp->drv_flags & EEPROM_NORESET) ? (TotalReset|0x10) : TotalReset, dev->base_addr + EL3_CMD); + /* Should really use issue_and_wait() here */ + outw(TotalReset|0x14, dev->base_addr + EL3_CMD); + + if (vp->pdev && vp->enable_wol) { + pci_set_power_state(vp->pdev, 0); /* Go active */ + if (vp->pm_state_valid) + pci_restore_state(vp->pdev, vp->power_state); + } + pci_free_consistent(pdev, sizeof(struct boom_rx_desc) * RX_RING_SIZE + sizeof(struct boom_tx_desc) * TX_RING_SIZE, diff -u --recursive --new-file v2.4.8/linux/drivers/net/8139too.c linux/drivers/net/8139too.c --- v2.4.8/linux/drivers/net/8139too.c Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/8139too.c Sun Aug 12 10:52:29 2001 @@ -137,7 +137,7 @@ */ #define DRV_NAME "8139too" -#define DRV_VERSION "0.9.18" +#define DRV_VERSION "0.9.18a" #include @@ -152,10 +152,10 @@ #include #include #include +#include #include #include - #define RTL8139_DRIVER_NAME DRV_NAME " Fast Ethernet driver " DRV_VERSION #define PFX DRV_NAME ": " @@ -585,7 +585,7 @@ chip_t chipset; pid_t thr_pid; wait_queue_head_t thr_wait; - struct semaphore thr_exited; + struct completion thr_exited; u32 rx_config; struct rtl_extra_stats xstats; }; @@ -970,7 +970,7 @@ tp->mmio_addr = ioaddr; spin_lock_init (&tp->lock); init_waitqueue_head (&tp->thr_wait); - init_MUTEX_LOCKED (&tp->thr_exited); + init_completion (&tp->thr_exited); /* dev is fully set up and ready to use now */ DPRINTK("about to register device named %s (%p)...\n", dev->name, dev); @@ -1632,7 +1632,7 @@ rtnl_unlock (); } - up_and_exit (&tp->thr_exited, 0); + complete_and_exit (&tp->thr_exited, 0); } @@ -2138,7 +2138,7 @@ printk (KERN_ERR "%s: unable to signal thread\n", dev->name); return ret; } - down (&tp->thr_exited); + wait_for_completion (&tp->thr_exited); } DPRINTK ("%s: Shutting down ethercard, status was 0x%4.4x.\n", diff -u --recursive --new-file v2.4.8/linux/drivers/net/Config.in linux/drivers/net/Config.in --- v2.4.8/linux/drivers/net/Config.in Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/Config.in Sun Aug 12 10:51:42 2001 @@ -16,7 +16,7 @@ fi if [ "$CONFIG_ISAPNP" = "y" -o "$CONFIG_ISAPNP" = "m" ]; then - tristate 'General Instruments Surfboard 1000' CONFIG_NET_SB1000 $CONFIG_ISAPNP + dep_tristate 'General Instruments Surfboard 1000' CONFIG_NET_SB1000 $CONFIG_ISAPNP fi # diff -u --recursive --new-file v2.4.8/linux/drivers/net/acenic.c linux/drivers/net/acenic.c --- v2.4.8/linux/drivers/net/acenic.c Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/acenic.c Wed Aug 15 01:22:15 2001 @@ -157,10 +157,6 @@ #define __devinit __init #endif -#ifndef min -#define min(a,b) (((a)<(b))?(a):(b)) -#endif - #ifndef SMP_CACHE_BYTES #define SMP_CACHE_BYTES L1_CACHE_BYTES #endif @@ -2999,8 +2995,8 @@ return; while (size > 0) { - tsize = min(((~dest & (ACE_WINDOW_SIZE - 1)) + 1), - min(size, ACE_WINDOW_SIZE)); + tsize = min(u32, ((~dest & (ACE_WINDOW_SIZE - 1)) + 1), + min(u32, size, ACE_WINDOW_SIZE)); tdest = (unsigned long)®s->Window + (dest & (ACE_WINDOW_SIZE - 1)); writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->WinBase); @@ -3030,8 +3026,8 @@ return; while (size > 0) { - tsize = min(((~dest & (ACE_WINDOW_SIZE - 1)) + 1), - min(size, ACE_WINDOW_SIZE)); + tsize = min(u32, ((~dest & (ACE_WINDOW_SIZE - 1)) + 1), + min(u32, size, ACE_WINDOW_SIZE)); tdest = (unsigned long)®s->Window + (dest & (ACE_WINDOW_SIZE - 1)); writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->WinBase); diff -u --recursive --new-file v2.4.8/linux/drivers/net/ariadne.c linux/drivers/net/ariadne.c --- v2.4.8/linux/drivers/net/ariadne.c Thu Apr 12 12:15:25 2001 +++ linux/drivers/net/ariadne.c Sun Aug 12 10:51:42 2001 @@ -160,24 +160,29 @@ unsigned long board = z->resource.start; unsigned long base_addr = board+ARIADNE_LANCE; unsigned long mem_start = board+ARIADNE_RAM; + struct resource *r1, *r2; - if (!request_mem_region(base_addr, sizeof(struct Am79C960), - "Am79C960")) - continue; - if (!request_mem_region(mem_start, ARIADNE_RAM_SIZE, "RAM")) { - release_mem_region(base_addr, sizeof(struct Am79C960)); + r1 = request_mem_region(base_addr, sizeof(struct Am79C960), + "Am79C960"); + if (!r1) continue; + r2 = request_mem_region(mem_start, ARIADNE_RAM_SIZE, "RAM"); + if (!r2) { + release_resource(r1); continue; } dev = init_etherdev(NULL, sizeof(struct ariadne_private)); if (dev == NULL) { - release_mem_region(base_addr, sizeof(struct Am79C960)); - release_mem_region(mem_start, ARIADNE_RAM_SIZE); + release_resource(r1); + release_resource(r2); return -ENOMEM; } - priv = (struct ariadne_private *)dev->priv; - memset(priv, 0, sizeof(struct ariadne_private)); + SET_MODULE_OWNER(dev); + priv = dev->priv; + + r1->name = dev->name; + r2->name = dev->name; priv->dev = dev; dev->dev_addr[0] = 0x00; @@ -218,6 +223,7 @@ volatile struct Am79C960 *lance = (struct Am79C960*)dev->base_addr; u_short in; u_long version; + int i; /* Reset the LANCE */ in = lance->Reset; @@ -307,15 +313,13 @@ netif_start_queue(dev); - if (request_irq(IRQ_AMIGA_PORTS, ariadne_interrupt, SA_SHIRQ, - "Ariadne Ethernet", dev)) - return -EAGAIN; + i = request_irq(IRQ_AMIGA_PORTS, ariadne_interrupt, SA_SHIRQ, + dev->name, dev); + if (i) return i; lance->RAP = CSR0; /* PCnet-ISA Controller Status */ lance->RDP = INEA|STRT; - MOD_INC_USE_COUNT; - return 0; } @@ -388,8 +392,6 @@ lance->RDP = STOP; free_irq(IRQ_AMIGA_PORTS, dev); - - MOD_DEC_USE_COUNT; return 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/net/de600.c linux/drivers/net/de600.c --- v2.4.8/linux/drivers/net/de600.c Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/de600.c Wed Aug 15 01:22:15 2001 @@ -801,7 +801,6 @@ * This differs from the standard function, that can return an * arbitrarily small window! */ -#define min(a,b) ((a)<(b)?(a):(b)) static unsigned long de600_rspace(struct sock *sk) { @@ -815,7 +814,7 @@ */ if (atomic_read(&sk->rmem_alloc) >= sk->rcvbuf-2*DE600_MIN_WINDOW) return(0); - amt = min((sk->rcvbuf-atomic_read(&sk->rmem_alloc))/2/*-DE600_MIN_WINDOW*/, DE600_MAX_WINDOW); + amt = min(int, (sk->rcvbuf-atomic_read(&sk->rmem_alloc))/2/*-DE600_MIN_WINDOW*/, DE600_MAX_WINDOW); if (amt < 0) return(0); return(amt); } diff -u --recursive --new-file v2.4.8/linux/drivers/net/depca.c linux/drivers/net/depca.c --- v2.4.8/linux/drivers/net/depca.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/depca.c Sun Aug 12 12:33:23 2001 @@ -2060,6 +2060,8 @@ cleanup_module(void) { struct depca_private *lp = thisDepca.priv; + + unregister_netdev(&thisDepca); if (lp) { iounmap(lp->sh_mem); #ifdef CONFIG_MCA @@ -2071,7 +2073,6 @@ } thisDepca.irq=0; - unregister_netdev(&thisDepca); release_region(thisDepca.base_addr, DEPCA_TOTAL_SIZE); } #endif /* MODULE */ diff -u --recursive --new-file v2.4.8/linux/drivers/net/dgrs.c linux/drivers/net/dgrs.c --- v2.4.8/linux/drivers/net/dgrs.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/dgrs.c Wed Aug 15 01:22:15 2001 @@ -693,7 +693,6 @@ I596_RBD *rbdp; int count; int i, len, amt; -# define mymin(A,B) ( (A) < (B) ? (A) : (B) ) /* * Determine 0th priv and dev structure pointers @@ -734,7 +733,7 @@ goto no_resources; } - amt = mymin(len, rbdp->size - count); + amt = min(unsigned int, len, rbdp->size - count); memcpy( (char *) S2H(rbdp->buf) + count, skb->data + i, amt); i += amt; count += amt; diff -u --recursive --new-file v2.4.8/linux/drivers/net/eepro.c linux/drivers/net/eepro.c --- v2.4.8/linux/drivers/net/eepro.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/eepro.c Sun Aug 12 10:51:42 2001 @@ -588,7 +588,7 @@ return -ENODEV; } -static void printEEPROMInfo(short ioaddr, struct net_device *dev) +static void __init printEEPROMInfo(short ioaddr, struct net_device *dev) { unsigned short Word; int i,j; @@ -647,7 +647,7 @@ probes on the ISA bus. A good device probe avoids doing writes, and verifies that the correct device exists and functions. */ -static int eepro_probe1(struct net_device *dev, short ioaddr) +static int __init eepro_probe1(struct net_device *dev, short ioaddr) { unsigned short station_addr[6], id, counter; int i,j, irqMask; diff -u --recursive --new-file v2.4.8/linux/drivers/net/hamachi.c linux/drivers/net/hamachi.c --- v2.4.8/linux/drivers/net/hamachi.c Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/hamachi.c Sun Aug 12 10:51:42 2001 @@ -784,7 +784,7 @@ return ret; } -static int read_eeprom(long ioaddr, int location) +static int __init read_eeprom(long ioaddr, int location) { int bogus_cnt = 1000; diff -u --recursive --new-file v2.4.8/linux/drivers/net/hamradio/baycom_epp.c linux/drivers/net/hamradio/baycom_epp.c --- v2.4.8/linux/drivers/net/hamradio/baycom_epp.c Wed Apr 18 14:40:06 2001 +++ linux/drivers/net/hamradio/baycom_epp.c Wed Aug 15 01:22:15 2001 @@ -246,11 +246,6 @@ /* --------------------------------------------------------------------- */ -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -/* --------------------------------------------------------------------- */ - #define KISS_VERBOSE /* --------------------------------------------------------------------- */ @@ -615,7 +610,7 @@ while (cnt > 0) { switch (bc->hdlctx.state) { case tx_keyup: - i = min(cnt, bc->hdlctx.flags); + i = min(int, cnt, bc->hdlctx.flags); cnt -= i; bc->hdlctx.flags -= i; if (bc->hdlctx.flags <= 0) @@ -638,7 +633,7 @@ break; } } - i = min(cnt, bc->hdlctx.bufcnt); + i = min(int, cnt, bc->hdlctx.bufcnt); bc->hdlctx.bufcnt -= i; cnt -= i; if (i != pp->ops->epp_write_data(pp, bc->hdlctx.bufptr, i, 0)) @@ -652,7 +647,7 @@ bc->hdlctx.state = tx_data; break; } - i = min(cnt, bc->hdlctx.flags); + i = min(int, cnt, bc->hdlctx.flags); if (i) { cnt -= i; bc->hdlctx.flags -= i; @@ -669,7 +664,7 @@ default: /* fall through */ if (bc->hdlctx.calibrate <= 0) return 0; - i = min(cnt, bc->hdlctx.calibrate); + i = min(int, cnt, bc->hdlctx.calibrate); cnt -= i; bc->hdlctx.calibrate -= i; memset(tmp, 0, sizeof(tmp)); diff -u --recursive --new-file v2.4.8/linux/drivers/net/hamradio/baycom_par.c linux/drivers/net/hamradio/baycom_par.c --- v2.4.8/linux/drivers/net/hamradio/baycom_par.c Wed Apr 18 14:40:05 2001 +++ linux/drivers/net/hamradio/baycom_par.c Wed Aug 15 01:22:15 2001 @@ -157,11 +157,6 @@ /* --------------------------------------------------------------------- */ -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -/* --------------------------------------------------------------------- */ - static void __inline__ baycom_int_freq(struct baycom_state *bc) { #ifdef BAYCOM_DEBUG diff -u --recursive --new-file v2.4.8/linux/drivers/net/hamradio/baycom_ser_fdx.c linux/drivers/net/hamradio/baycom_ser_fdx.c --- v2.4.8/linux/drivers/net/hamradio/baycom_ser_fdx.c Wed Apr 18 14:40:05 2001 +++ linux/drivers/net/hamradio/baycom_ser_fdx.c Wed Aug 15 01:22:15 2001 @@ -152,11 +152,6 @@ /* --------------------------------------------------------------------- */ -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -/* --------------------------------------------------------------------- */ - static void inline baycom_int_freq(struct baycom_state *bc) { #ifdef BAYCOM_DEBUG diff -u --recursive --new-file v2.4.8/linux/drivers/net/hamradio/baycom_ser_hdx.c linux/drivers/net/hamradio/baycom_ser_hdx.c --- v2.4.8/linux/drivers/net/hamradio/baycom_ser_hdx.c Wed Apr 18 14:40:05 2001 +++ linux/drivers/net/hamradio/baycom_ser_hdx.c Wed Aug 15 01:22:15 2001 @@ -143,11 +143,6 @@ /* --------------------------------------------------------------------- */ -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -/* --------------------------------------------------------------------- */ - static void inline baycom_int_freq(struct baycom_state *bc) { #ifdef BAYCOM_DEBUG diff -u --recursive --new-file v2.4.8/linux/drivers/net/hamradio/hdlcdrv.c linux/drivers/net/hamradio/hdlcdrv.c --- v2.4.8/linux/drivers/net/hamradio/hdlcdrv.c Wed Apr 18 14:40:06 2001 +++ linux/drivers/net/hamradio/hdlcdrv.c Wed Aug 15 01:22:15 2001 @@ -95,11 +95,6 @@ #define PARAM_RETURN 255 /* --------------------------------------------------------------------- */ - -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -/* --------------------------------------------------------------------- */ /* * the CRC routines are stolen from WAMPES * by Dieter Deyke diff -u --recursive --new-file v2.4.8/linux/drivers/net/hamradio/soundmodem/sm.h linux/drivers/net/hamradio/soundmodem/sm.h --- v2.4.8/linux/drivers/net/hamradio/soundmodem/sm.h Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/hamradio/soundmodem/sm.h Wed Aug 15 01:22:15 2001 @@ -150,11 +150,6 @@ /* --------------------------------------------------------------------- */ -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -/* --------------------------------------------------------------------- */ - extern const char sm_drvname[]; extern const char sm_drvinfo[]; diff -u --recursive --new-file v2.4.8/linux/drivers/net/irda/Config.in linux/drivers/net/irda/Config.in --- v2.4.8/linux/drivers/net/irda/Config.in Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/irda/Config.in Sun Aug 12 10:51:42 2001 @@ -24,6 +24,7 @@ if [ "$CONFIG_EXPERIMENTAL" != "n" ]; then dep_tristate 'SMC IrCC (Experimental)' CONFIG_SMC_IRCC_FIR $CONFIG_IRDA dep_tristate 'ALi M5123 FIR (Experimental)' CONFIG_ALI_FIR $CONFIG_IRDA +dep_tristate 'VLSI 82C147 SIR/MIR/FIR (Experimental)' CONFIG_VLSI_FIR $CONFIG_IRDA fi endmenu diff -u --recursive --new-file v2.4.8/linux/drivers/net/irda/Makefile linux/drivers/net/irda/Makefile --- v2.4.8/linux/drivers/net/irda/Makefile Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/irda/Makefile Sun Aug 12 10:51:42 2001 @@ -18,6 +18,7 @@ obj-$(CONFIG_TOSHIBA_FIR) += toshoboe.o obj-$(CONFIG_SMC_IRCC_FIR) += smc-ircc.o irport.o obj-$(CONFIG_ALI_FIR) += ali-ircc.o +obj-$(CONFIG_VLSI_FIR) += vlsi_ir.o obj-$(CONFIG_ESI_DONGLE) += esi.o obj-$(CONFIG_TEKRAM_DONGLE) += tekram.o obj-$(CONFIG_ACTISYS_DONGLE) += actisys.o diff -u --recursive --new-file v2.4.8/linux/drivers/net/irda/irport.c linux/drivers/net/irda/irport.c --- v2.4.8/linux/drivers/net/irda/irport.c Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/irda/irport.c Sun Aug 12 10:51:42 2001 @@ -293,9 +293,9 @@ iobase = self->io.sir_base; - spin_lock_irqsave(&self->lock, flags); - irport_stop(self); + + spin_lock_irqsave(&self->lock, flags); /* Initialize UART */ outb(UART_LCR_WLEN8, iobase+UART_LCR); /* Reset DLAB */ @@ -353,7 +353,7 @@ int lcr; /* Line control reg */ int divisor; - IRDA_DEBUG(2, __FUNCTION__ "(), Setting speed to: %d\n", speed); + IRDA_DEBUG(0, __FUNCTION__ "(), Setting speed to: %d\n", speed); ASSERT(self != NULL, return;); @@ -616,7 +616,9 @@ struct irport_cb *self; unsigned long flags; int iobase; - __s32 speed; + s32 speed; + + IRDA_DEBUG(0, __FUNCTION__ "()\n"); ASSERT(dev != NULL, return 0;); @@ -773,14 +775,19 @@ struct irport_cb *self; int iobase; + IRDA_DEBUG(0, __FUNCTION__ "()\n"); + ASSERT(dev != NULL, return -1;); self = (struct irport_cb *) dev->priv; iobase = self->io.sir_base; if (request_irq(self->io.irq, self->interrupt, 0, dev->name, - (void *) dev)) + (void *) dev)) { + IRDA_DEBUG(0, __FUNCTION__ "(), unable to allocate irq=%d\n", + self->io.irq); return -EAGAIN; + } irport_start(self); diff -u --recursive --new-file v2.4.8/linux/drivers/net/irda/smc-ircc.c linux/drivers/net/irda/smc-ircc.c --- v2.4.8/linux/drivers/net/irda/smc-ircc.c Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/irda/smc-ircc.c Sun Aug 12 10:51:42 2001 @@ -8,8 +8,11 @@ * Created at: * Modified at: Tue Feb 22 10:05:06 2000 * Modified by: Dag Brattli + * Modified at: Tue Jun 26 2001 + * Modified by: Stefani Seibold * - * Copyright (c) 1999-2000 Dag Brattli + * Copyright (c) 2001 Stefani Seibold + * Copyright (c) 1999-2001 Dag Brattli * Copyright (c) 1998-1999 Thomas Davis, * All Rights Reserved. * @@ -28,8 +31,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * - * SIO's: SMC FDC37N869, FDC37C669, FDC37N958 - * Applicable Models : Fujitsu Lifebook 635t, Sony PCG-505TX + * SIO's: all SIO documentet by SMC (June, 2001) + * Applicable Models : Fujitsu Lifebook 635t, Sony PCG-505TX, + * Dell Inspiron 8000 * ********************************************************************/ @@ -56,55 +60,106 @@ #include #include #include - #include #include -static char *driver_name = "smc-ircc"; +struct smc_chip { + char *name; + u16 flags; + u8 devid; + u8 rev; +}; +typedef struct smc_chip smc_chip_t; -#define CHIP_IO_EXTENT 8 +static const char *driver_name = "smc-ircc"; -static unsigned int io[] = { ~0, ~0 }; -static unsigned int io2[] = { 0, 0 }; +#define DIM(x) (sizeof(x)/(sizeof(*(x)))) + +#define CHIP_IO_EXTENT 8 static struct ircc_cb *dev_self[] = { NULL, NULL}; /* Some prototypes */ -static int ircc_open(int i, unsigned int iobase, unsigned int board_addr); -#ifdef MODULE -static int ircc_close(struct ircc_cb *self); -#endif /* MODULE */ -static int ircc_probe(int iobase, int board_addr); -static int ircc_probe_58(smc_chip_t *chip, chipio_t *info); -static int ircc_probe_69(smc_chip_t *chip, chipio_t *info); +static int ircc_open(unsigned int iobase, unsigned int board_addr); static int ircc_dma_receive(struct ircc_cb *self, int iobase); static void ircc_dma_receive_complete(struct ircc_cb *self, int iobase); static int ircc_hard_xmit(struct sk_buff *skb, struct net_device *dev); static void ircc_dma_xmit(struct ircc_cb *self, int iobase, int bofs); -static void ircc_change_speed(void *priv, __u32 speed); +static void ircc_change_speed(void *priv, u32 speed); static void ircc_interrupt(int irq, void *dev_id, struct pt_regs *regs); -#if 0 /* unused */ -static int ircc_is_receiving(struct ircc_cb *self); -#endif /* unused */ - static int ircc_net_open(struct net_device *dev); static int ircc_net_close(struct net_device *dev); static int ircc_pmproc(struct pm_dev *dev, pm_request_t rqst, void *data); -/* These are the currently known SMC chipsets */ -static smc_chip_t chips[] = +#define KEY55_1 0 /* SuperIO Configuration mode with Key <0x55> */ +#define KEY55_2 1 /* SuperIO Configuration mode with Key <0x55,0x55> */ +#define NoIRDA 2 /* SuperIO Chip has no IRDA Port */ +#define SIR 0 /* SuperIO Chip has only slow IRDA */ +#define FIR 4 /* SuperIO Chip has fast IRDA */ +#define SERx4 8 /* SuperIO Chip supports 115,2 KBaud * 4=460,8 KBaud */ + +/* These are the currently known SMC SuperIO chipsets */ +static const smc_chip_t __init fdc_chips_flat[]= +{ + /* Base address 0x3f0 or 0x370 */ + { "37C44", KEY55_1|NoIRDA, 0x00, 0x00 }, /* This chip can not detected */ + { "37C665GT", KEY55_2|NoIRDA, 0x65, 0x01 }, + { "37C665GT", KEY55_2|NoIRDA, 0x66, 0x01 }, + { "37C669", KEY55_2|SIR|SERx4, 0x03, 0x02 }, + { "37C669", KEY55_2|SIR|SERx4, 0x04, 0x02 }, /* ID? */ + { "37C78", KEY55_2|NoIRDA, 0x78, 0x00 }, + { "37N769", KEY55_1|FIR|SERx4, 0x28, 0x00 }, + { "37N869", KEY55_1|FIR|SERx4, 0x29, 0x00 }, + { NULL } +}; + +static const smc_chip_t __init fdc_chips_paged[]= { - { "FDC37C669", 0x55, 0x55, 0x0d, 0x04, ircc_probe_69 }, - { "FDC37N769", 0x55, 0x55, 0x0d, 0x28, ircc_probe_69 }, - { "FDC37N869", 0x55, 0x00, 0x0d, 0x29, ircc_probe_69 }, - { "FDC37N958", 0x55, 0x55, 0x20, 0x09, ircc_probe_58 }, - { "FDC37N971", 0x55, 0x55, 0x20, 0x0a, ircc_probe_58 }, - { "FDC37N972", 0x55, 0x55, 0x20, 0x0b, ircc_probe_58 }, + /* Base address 0x3f0 or 0x370 */ + { "37B72X", KEY55_1|SIR|SERx4, 0x4c, 0x00 }, + { "37B77X", KEY55_1|SIR|SERx4, 0x43, 0x00 }, + { "37B78X", KEY55_1|SIR|SERx4, 0x44, 0x00 }, + { "37B80X", KEY55_1|SIR|SERx4, 0x42, 0x00 }, + { "37C67X", KEY55_1|FIR|SERx4, 0x40, 0x00 }, + { "37C93X", KEY55_2|SIR|SERx4, 0x02, 0x01 }, + { "37C93XAPM", KEY55_1|SIR|SERx4, 0x30, 0x01 }, + { "37C93XFR", KEY55_2|FIR|SERx4, 0x03, 0x01 }, + { "37M707", KEY55_1|SIR|SERx4, 0x42, 0x00 }, + { "37M81X", KEY55_1|SIR|SERx4, 0x4d, 0x00 }, + { "37N958FR", KEY55_1|FIR|SERx4, 0x09, 0x04 }, + { "37N972", KEY55_1|FIR|SERx4, 0x0a, 0x00 }, + { "37N972", KEY55_1|FIR|SERx4, 0x0b, 0x00 }, + { NULL } +}; + +static const smc_chip_t __init lpc_chips_flat[]= +{ + /* Base address 0x2E or 0x4E */ + { "47N227", KEY55_1|FIR|SERx4, 0x5a, 0x00 }, + { "47N267", KEY55_1|FIR|SERx4, 0x5e, 0x00 }, + { NULL } +}; + +static const smc_chip_t __init lpc_chips_paged[]= +{ + /* Base address 0x2E or 0x4E */ + { "47B27X", KEY55_1|SIR|SERx4, 0x51, 0x00 }, + { "47B37X", KEY55_1|SIR|SERx4, 0x52, 0x00 }, + { "47M10X", KEY55_1|SIR|SERx4, 0x59, 0x00 }, + { "47M120", KEY55_1|NoIRDA|SERx4, 0x5c, 0x00 }, + { "47M13X", KEY55_1|SIR|SERx4, 0x59, 0x00 }, + { "47M14X", KEY55_1|SIR|SERx4, 0x5f, 0x00 }, + { "47N252", KEY55_1|FIR|SERx4, 0x0e, 0x00 }, + { "47S42X", KEY55_1|SIR|SERx4, 0x57, 0x00 }, { NULL } }; static int ircc_irq=255; static int ircc_dma=255; +static int ircc_fir=0; +static int ircc_sir=0; + +static unsigned short dev_count=0; static inline void register_bank(int iobase, int bank) { @@ -112,89 +167,303 @@ iobase+IRCC_MASTER); } +static int __init smc_access(unsigned short cfg_base,unsigned char reg) +{ + IRDA_DEBUG(0, __FUNCTION__ "()\n"); + + outb(reg, cfg_base); + + if (inb(cfg_base)!=reg) + return -1; + + return 0; +} + +static const smc_chip_t * __init smc_probe(unsigned short cfg_base,u8 reg,const smc_chip_t *chip,char *type) +{ + u8 devid,xdevid,rev; + + IRDA_DEBUG(0, __FUNCTION__ "()\n"); + + /* Leave configuration */ + + outb(0xaa, cfg_base); + + if (inb(cfg_base)==0xaa) /* not a smc superio chip */ + return NULL; + + outb(reg, cfg_base); + + xdevid=inb(cfg_base+1); + + /* Enter configuration */ + + outb(0x55, cfg_base); + + if (smc_access(cfg_base,0x55)) /* send second key and check */ + return NULL; + + /* probe device ID */ + + if (smc_access(cfg_base,reg)) + return NULL; + + devid=inb(cfg_base+1); + + if (devid==0) /* typical value for unused port */ + return NULL; + + if (devid==0xff) /* typical value for unused port */ + return NULL; + + /* probe revision ID */ + + if (smc_access(cfg_base,reg+1)) + return NULL; + + rev=inb(cfg_base+1); + + if (rev>=128) /* i think this will make no sense */ + return NULL; + + if (devid==xdevid) /* protection against false positives */ + return NULL; + + /* Check for expected device ID; are there others? */ + + while(chip->devid!=devid) { + + chip++; + + if (chip->name==NULL) + return NULL; + } + if (chip->rev>rev) + return NULL; + + MESSAGE("found SMC SuperIO Chip (devid=0x%02x rev=%02X base=0x%04x): %s%s\n",devid,rev,cfg_base,type,chip->name); + + if (chip->flags&NoIRDA) + MESSAGE("chipset does not support IRDA\n"); + + return chip; +} + /* - * Function ircc_init () + * Function smc_superio_flat (chip, base, type) + * + * Try get configuration of a smc SuperIO chip with flat register model * - * Initialize chip. Just try to find out how many chips we are dealing with - * and where they are */ -int __init ircc_init(void) +static int __init smc_superio_flat(const smc_chip_t *chips, unsigned short cfg_base, char *type) { - static int smcreg[] = { 0x3f0, 0x370 }; - smc_chip_t *chip; - chipio_t info; + unsigned short fir_io; + unsigned short sir_io; + u8 mode; int ret = -ENODEV; - int i; - IRDA_DEBUG(0, __FUNCTION__ "\n"); + IRDA_DEBUG(0, __FUNCTION__ "()\n"); + + if (smc_probe(cfg_base,0xD,chips,type)==NULL) + return ret; - /* Probe for all the NSC chipsets we know about */ - for (chip=chips; chip->name ; chip++) { - for (i=0; i<2; i++) { - info.cfg_base = smcreg[i]; - - /* - * First we check if the user has supplied any - * parameters which we should use instead of probed - * values - */ - if (io[i] < 0x2000) { - info.fir_base = io[i]; - info.sir_base = io2[i]; - } else if (chip->probe(chip, &info) < 0) - continue; - if (check_region(info.fir_base, CHIP_IO_EXTENT) < 0) - continue; - if (check_region(info.sir_base, CHIP_IO_EXTENT) < 0) - continue; - if (ircc_open(i, info.fir_base, info.sir_base) == 0) - ret = 0; + outb(0x0c, cfg_base); + + mode = inb(cfg_base+1); + mode = (mode & 0x38) >> 3; + + /* Value for IR port */ + if (mode && mode < 4) { + /* SIR iobase */ + outb(0x25, cfg_base); + sir_io = inb(cfg_base+1) << 2; + + /* FIR iobase */ + outb(0x2b, cfg_base); + fir_io = inb(cfg_base+1) << 3; + + if (fir_io) { + if (ircc_open(fir_io, sir_io) == 0) + ret=0; } } + + /* Exit configuration */ + outb(0xaa, cfg_base); + return ret; } /* - * Function ircc_cleanup () + * Function smc_superio_paged (chip, base, type) * - * Close all configured chips + * Try get configuration of a smc SuperIO chip with paged register model * */ -#ifdef MODULE -static void ircc_cleanup(void) +static int __init smc_superio_paged(const smc_chip_t *chips, unsigned short cfg_base, char *type) { - int i; + unsigned short fir_io; + unsigned short sir_io; + int ret = -ENODEV; + + IRDA_DEBUG(0, __FUNCTION__ "()\n"); + + if (smc_probe(cfg_base,0x20,chips,type)==NULL) + return ret; + + /* Select logical device (UART2) */ + outb(0x07, cfg_base); + outb(0x05, cfg_base + 1); + + /* SIR iobase */ + outb(0x60, cfg_base); + sir_io = inb(cfg_base + 1) << 8; + outb(0x61, cfg_base); + sir_io |= inb(cfg_base + 1); + + /* Read FIR base */ + outb(0x62, cfg_base); + fir_io = inb(cfg_base + 1) << 8; + outb(0x63, cfg_base); + fir_io |= inb(cfg_base + 1); + outb(0x2b, cfg_base); /* ??? */ + + if (fir_io) { + if (ircc_open(fir_io, sir_io) == 0) + ret=0; + } + + /* Exit configuration */ + outb(0xaa, cfg_base); + + return ret; +} + +static int __init smc_superio_fdc(unsigned short cfg_base) +{ + if (check_region(cfg_base, 2) < 0) { + IRDA_DEBUG(0, __FUNCTION__ ": can't get cfg_base of 0x%03x\n", + cfg_base); + return -1; + } + + if (!smc_superio_flat(fdc_chips_flat,cfg_base,"FDC")||!smc_superio_paged(fdc_chips_paged,cfg_base,"FDC")) + return 0; + + return -1; +} + +static int __init smc_superio_lpc(unsigned short cfg_base) +{ +#if 0 + if (check_region(cfg_base, 2) < 0) { + IRDA_DEBUG(0, __FUNCTION__ ": can't get cfg_base of 0x%03x\n", + cfg_base); + return -1; + } +#endif + + if (!smc_superio_flat(lpc_chips_flat,cfg_base,"LPC")||!smc_superio_paged(lpc_chips_paged,cfg_base,"LPC")) + return 0; + + return -1; +} + +/* + * Function ircc_init () + * + * Initialize chip. Just try to find out how many chips we are dealing with + * and where they are + */ +int __init ircc_init(void) +{ + int ret=-ENODEV; IRDA_DEBUG(0, __FUNCTION__ "\n"); - for (i=0; i < 2; i++) { - if (dev_self[i]) - ircc_close(dev_self[i]); + dev_count=0; + + if ((ircc_fir>0)&&(ircc_sir>0)) { + MESSAGE(" Overriding FIR address 0x%04x\n", ircc_fir); + MESSAGE(" Overriding SIR address 0x%04x\n", ircc_sir); + + if (ircc_open(ircc_fir, ircc_sir) == 0) + return 0; + + return -ENODEV; } + + /* Trys to open for all the SMC chipsets we know about */ + + IRDA_DEBUG(0, __FUNCTION__ + " Try to open all known SMC chipsets\n"); + + if (!smc_superio_fdc(0x3f0)) + ret=0; + if (!smc_superio_fdc(0x370)) + ret=0; + if (!smc_superio_lpc(0x2e)) + ret=0; + if (!smc_superio_lpc(0x4e)) + ret=0; + + return ret; } -#endif /* MODULE */ /* * Function ircc_open (iobase, irq) * - * Open driver instance + * Try to open driver instance * */ -static int ircc_open(int i, unsigned int fir_base, unsigned int sir_base) +static int __init ircc_open(unsigned int fir_base, unsigned int sir_base) { struct ircc_cb *self; struct irport_cb *irport; - int config; - int ret; + unsigned char low, high, chip, config, dma, irq, version; + IRDA_DEBUG(0, __FUNCTION__ "\n"); - if ((config = ircc_probe(fir_base, sir_base)) == -1) { + if (check_region(fir_base, CHIP_IO_EXTENT) < 0) { + IRDA_DEBUG(0, __FUNCTION__ ": can't get fir_base of 0x%03x\n", + fir_base); + return -ENODEV; + } +#if POSSIBLE_USED_BY_SERIAL_DRIVER + if (check_region(sir_base, CHIP_IO_EXTENT) < 0) { + IRDA_DEBUG(0, __FUNCTION__ ": can't get sir_base of 0x%03x\n", + sir_base); + return -ENODEV; + } +#endif + + register_bank(fir_base, 3); + + high = inb(fir_base+IRCC_ID_HIGH); + low = inb(fir_base+IRCC_ID_LOW); + chip = inb(fir_base+IRCC_CHIP_ID); + version = inb(fir_base+IRCC_VERSION); + config = inb(fir_base+IRCC_INTERFACE); + + irq = config >> 4 & 0x0f; + dma = config & 0x0f; + + if (high != 0x10 || low != 0xb8 || (chip != 0xf1 && chip != 0xf2)) { IRDA_DEBUG(0, __FUNCTION__ "(), addr 0x%04x - no device found!\n", fir_base); - return -1; + return -ENODEV; } - + MESSAGE("SMC IrDA Controller found\n IrCC version %d.%d, " + "firport 0x%03x, sirport 0x%03x dma=%d, irq=%d\n", + chip & 0x0f, version, fir_base, sir_base, dma, irq); + + if (dev_count>DIM(dev_self)) { + IRDA_DEBUG(0, __FUNCTION__ + "(), to many devices!\n"); + return -ENOMEM; + } + /* * Allocate new instance of the driver */ @@ -206,46 +475,75 @@ } memset(self, 0, sizeof(struct ircc_cb)); spin_lock_init(&self->lock); - - /* Need to store self somewhere */ - dev_self[i] = self; - irport = irport_open(i, sir_base, config >> 4 & 0x0f); - if (!irport) + /* Max DMA buffer size needed = (data_size + 6) * (window_size) + 6; */ + self->rx_buff.truesize = 4000; + self->tx_buff.truesize = 4000; + + self->rx_buff.head = (u8 *) kmalloc(self->rx_buff.truesize, + GFP_KERNEL|GFP_DMA); + if (self->rx_buff.head == NULL) { + ERROR("%s, Can't allocate memory for receive buffer!\n", + driver_name); + kfree(self); + return -ENOMEM; + } + + self->tx_buff.head = (u8 *) kmalloc(self->tx_buff.truesize, + GFP_KERNEL|GFP_DMA); + if (self->tx_buff.head == NULL) { + ERROR("%s, Can't allocate memory for transmit buffer!\n", + driver_name); + kfree(self->rx_buff.head); + kfree(self); + return -ENOMEM; + } + + irport = irport_open(dev_count, sir_base, irq); + if (!irport) { + kfree(self->tx_buff.head); + kfree(self->rx_buff.head); + kfree(self); return -ENODEV; + } + + memset(self->rx_buff.head, 0, self->rx_buff.truesize); + memset(self->tx_buff.head, 0, self->tx_buff.truesize); + + /* Need to store self somewhere */ + dev_self[dev_count++] = self; /* Steal the network device from irport */ self->netdev = irport->netdev; self->irport = irport; + irport->priv = self; /* Initialize IO */ - self->io.fir_base = fir_base; - self->io.sir_base = sir_base; /* Used by irport */ - self->io.irq = config >> 4 & 0x0f; + self->io = &irport->io; + self->io->fir_base = fir_base; + self->io->sir_base = sir_base; /* Used by irport */ + self->io->fir_ext = CHIP_IO_EXTENT; + self->io->sir_ext = 8; /* Used by irport */ + if (ircc_irq < 255) { - MESSAGE("%s, Overriding IRQ - chip says %d, using %d\n", - driver_name, self->io.irq, ircc_irq); - self->io.irq = ircc_irq; - } - self->io.fir_ext = CHIP_IO_EXTENT; - self->io.sir_ext = 8; /* Used by irport */ - self->io.dma = config & 0x0f; + if (ircc_irq!=irq) + MESSAGE("%s, Overriding IRQ - chip says %d, using %d\n", + driver_name, self->io->irq, ircc_irq); + self->io->irq = ircc_irq; + } + else + self->io->irq = irq; if (ircc_dma < 255) { - MESSAGE("%s, Overriding DMA - chip says %d, using %d\n", - driver_name, self->io.dma, ircc_dma); - self->io.dma = ircc_dma; + if (ircc_dma!=dma) + MESSAGE("%s, Overriding DMA - chip says %d, using %d\n", + driver_name, self->io->dma, ircc_dma); + self->io->dma = ircc_dma; } + else + self->io->dma = dma; - /* Lock the port that we need */ - ret = check_region(self->io.fir_base, self->io.fir_ext); - if (ret < 0) { - IRDA_DEBUG(0, __FUNCTION__ ": can't get fir_base of 0x%03x\n", - self->io.fir_base); - kfree(self); - return -ENODEV; - } - request_region(self->io.fir_base, self->io.fir_ext, driver_name); + request_region(fir_base, CHIP_IO_EXTENT, driver_name); /* Initialize QoS for this device */ irda_init_max_qos_capabilies(&irport->qos); @@ -260,23 +558,6 @@ irport->flags = IFF_FIR|IFF_MIR|IFF_SIR|IFF_DMA|IFF_PIO; - /* Max DMA buffer size needed = (data_size + 6) * (window_size) + 6; */ - self->rx_buff.truesize = 4000; - self->tx_buff.truesize = 4000; - - self->rx_buff.head = (__u8 *) kmalloc(self->rx_buff.truesize, - GFP_KERNEL|GFP_DMA); - if (self->rx_buff.head == NULL) - return -ENOMEM; - memset(self->rx_buff.head, 0, self->rx_buff.truesize); - - self->tx_buff.head = (__u8 *) kmalloc(self->tx_buff.truesize, - GFP_KERNEL|GFP_DMA); - if (self->tx_buff.head == NULL) { - kfree(self->rx_buff.head); - return -ENOMEM; - } - memset(self->tx_buff.head, 0, self->tx_buff.truesize); self->rx_buff.in_frame = FALSE; self->rx_buff.state = OUTSIDE_FRAME; @@ -295,196 +576,12 @@ if (self->pmdev) self->pmdev->data = self; - return 0; -} - -/* - * Function ircc_close (self) - * - * Close driver instance - * - */ -#ifdef MODULE -static int ircc_close(struct ircc_cb *self) -{ - int iobase; - - IRDA_DEBUG(0, __FUNCTION__ "\n"); - - ASSERT(self != NULL, return -1;); - - iobase = self->io.fir_base; - - irport_close(self->irport); - - /* Stop interrupts */ - register_bank(iobase, 0); - outb(0, iobase+IRCC_IER); - outb(IRCC_MASTER_RESET, iobase+IRCC_MASTER); - outb(0x00, iobase+IRCC_MASTER); -#if 0 - /* Reset to SIR mode */ - register_bank(iobase, 1); - outb(IRCC_CFGA_IRDA_SIR_A|IRCC_CFGA_TX_POLARITY, iobase+IRCC_SCE_CFGA); - outb(IRCC_CFGB_IR, iobase+IRCC_SCE_CFGB); -#endif - /* Release the PORT that this driver is using */ - IRDA_DEBUG(0, __FUNCTION__ "(), releasing 0x%03x\n", - self->io.fir_base); - - release_region(self->io.fir_base, self->io.fir_ext); - - if (self->tx_buff.head) - kfree(self->tx_buff.head); - - if (self->rx_buff.head) - kfree(self->rx_buff.head); + /* Power on device */ - kfree(self); + outb(0x00, fir_base+IRCC_MASTER); return 0; } -#endif /* MODULE */ - -/* - * Function ircc_probe_69 (chip, info) - * - * Probes for the SMC FDC37C669 and FDC37N869 - * - */ -static int ircc_probe_69(smc_chip_t *chip, chipio_t *info) -{ - int cfg_base = info->cfg_base; - __u8 devid, mode; - int ret = -ENODEV; - int fir_io; - - IRDA_DEBUG(0, __FUNCTION__ "()\n"); - - /* Enter configuration */ - outb(chip->entr1, cfg_base); - outb(chip->entr2, cfg_base); - - outb(chip->cid_index, cfg_base); - devid = inb(cfg_base+1); - IRDA_DEBUG(0, __FUNCTION__ "(), devid=0x%02x\n",devid); - - /* Check for expected device ID; are there others? */ - if (devid == chip->cid_value) { - outb(0x0c, cfg_base); - mode = inb(cfg_base+1); - mode = (mode & 0x38) >> 3; - - /* Value for IR port */ - if (mode && mode < 4) { - /* SIR iobase */ - outb(0x25, cfg_base); - info->sir_base = inb(cfg_base+1) << 2; - - /* FIR iobase */ - outb(0x2b, cfg_base); - fir_io = inb(cfg_base+1) << 3; - if (fir_io) { - ret = 0; - info->fir_base = fir_io; - } - } - } - - /* Exit configuration */ - outb(0xaa, cfg_base); - - return ret; -} - -/* - * Function ircc_probe_58 (chip, info) - * - * Probes for the SMC FDC37N958 - * - */ -static int ircc_probe_58(smc_chip_t *chip, chipio_t *info) -{ - int cfg_base = info->cfg_base; - __u8 devid; - int ret = -ENODEV; - int fir_io; - - IRDA_DEBUG(0, __FUNCTION__ "()\n"); - - /* Enter configuration */ - outb(chip->entr1, cfg_base); - outb(chip->entr2, cfg_base); - - outb(chip->cid_index, cfg_base); - devid = inb(cfg_base+1); - IRDA_DEBUG(0, __FUNCTION__ "(), devid=0x%02x\n",devid); - - /* Check for expected device ID; are there others? */ - if (devid == chip->cid_value) { - /* Select logical device (UART2) */ - outb(0x07, cfg_base); - outb(0x05, cfg_base + 1); - - /* SIR iobase */ - outb(0x60, cfg_base); - info->sir_base = inb(cfg_base + 1) << 8; - outb(0x61, cfg_base); - info->sir_base |= inb(cfg_base + 1); - - /* Read FIR base */ - outb(0x62, cfg_base); - fir_io = inb(cfg_base + 1) << 8; - outb(0x63, cfg_base); - fir_io |= inb(cfg_base + 1); - outb(0x2b, cfg_base); - if (fir_io) { - ret = 0; - info->fir_base = fir_io; - } - } - - /* Exit configuration */ - outb(0xaa, cfg_base); - - return ret; -} - -/* - * Function ircc_probe (iobase, board_addr, irq, dma) - * - * Returns non-negative on success. - * - */ -static int ircc_probe(int fir_base, int sir_base) -{ - int low, high, chip, config, dma, irq; - int iobase = fir_base; - int version = 1; - - IRDA_DEBUG(0, __FUNCTION__ "\n"); - - register_bank(iobase, 3); - high = inb(iobase+IRCC_ID_HIGH); - low = inb(iobase+IRCC_ID_LOW); - chip = inb(iobase+IRCC_CHIP_ID); - version = inb(iobase+IRCC_VERSION); - config = inb(iobase+IRCC_INTERFACE); - irq = config >> 4 & 0x0f; - dma = config & 0x0f; - - if (high == 0x10 && low == 0xb8 && (chip == 0xf1 || chip == 0xf2)) { - MESSAGE("SMC IrDA Controller found; IrCC version %d.%d, " - "port 0x%03x, dma=%d, irq=%d\n", - chip & 0x0f, version, iobase, dma, irq); - } else - return -ENODEV; - - /* Power on device */ - outb(0x00, iobase+IRCC_MASTER); - - return config; -} /* * Function ircc_change_speed (self, baud) @@ -492,7 +589,7 @@ * Change the speed of the device * */ -static void ircc_change_speed(void *priv, __u32 speed) +static void ircc_change_speed(void *priv, u32 speed) { int iobase, ir_mode, ctrl, fast; struct ircc_cb *self = (struct ircc_cb *) priv; @@ -503,10 +600,10 @@ ASSERT(self != NULL, return;); dev = self->netdev; - iobase = self->io.fir_base; + iobase = self->io->fir_base; /* Update accounting for new speed */ - self->io.speed = speed; + self->io->speed = speed; outb(IRCC_MASTER_RESET, iobase+IRCC_MASTER); outb(0x00, iobase+IRCC_MASTER); @@ -560,7 +657,7 @@ * Don't know why we have to do this, but FIR interrupts * stops working if we remove it. */ - /* outb(UART_MCR_OUT2, self->io.sir_base + UART_MCR); */ + /* outb(UART_MCR_OUT2, self->io->sir_base + UART_MCR); */ /* Be ready for incoming frames */ ircc_dma_receive(self, iobase); @@ -608,7 +705,7 @@ struct irport_cb *irport; struct ircc_cb *self; unsigned long flags; - __s32 speed; + s32 speed; int iobase; int mtt; @@ -616,13 +713,13 @@ self = (struct ircc_cb *) irport->priv; ASSERT(self != NULL, return 0;); - iobase = self->io.fir_base; + iobase = self->io->fir_base; netif_stop_queue(dev); /* Check if we need to change the speed after this frame */ speed = irda_get_next_speed(skb); - if ((speed != self->io.speed) && (speed != -1)) { + if ((speed != self->io->speed) && (speed != -1)) { /* Check for empty frame */ if (!skb->len) { ircc_change_speed(self, speed); @@ -647,7 +744,7 @@ * Compute how many BOFs (STA or PA's) we need to waste the * min turn time given the speed of the link. */ - bofs = mtt * (self->io.speed / 1000) / 8000; + bofs = mtt * (self->io->speed / 1000) / 8000; if (bofs > 4095) bofs = 4095; @@ -670,7 +767,7 @@ */ static void ircc_dma_xmit(struct ircc_cb *self, int iobase, int bofs) { - __u8 ctrl; + u8 ctrl; IRDA_DEBUG(2, __FUNCTION__ "\n"); #if 0 @@ -682,7 +779,7 @@ outb(inb(iobase+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, iobase+IRCC_SCE_CFGB); - self->io.direction = IO_XMIT; + self->io->direction = IO_XMIT; /* Set BOF additional count for generating the min turn time */ register_bank(iobase, 4); @@ -695,10 +792,10 @@ outb(self->tx_buff.len & 0xff, iobase+IRCC_TX_SIZE_LO); /* Setup DMA controller (must be done after enabling chip DMA) */ - setup_dma(self->io.dma, self->tx_buff.data, self->tx_buff.len, + setup_dma(self->io->dma, self->tx_buff.data, self->tx_buff.len, DMA_TX_MODE); - outb(UART_MCR_OUT2, self->io.sir_base + UART_MCR); + outb(UART_MCR_OUT2, self->io->sir_base + UART_MCR); /* Enable burst mode chip Tx DMA */ register_bank(iobase, 1); outb(inb(iobase+IRCC_SCE_CFGB) | IRCC_CFGB_DMA_ENABLE | @@ -728,9 +825,9 @@ register_bank(iobase, 0); outb(0x00, iobase+IRCC_LCR_B); #endif - register_bank(self->io.fir_base, 1); - outb(inb(self->io.fir_base+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, - self->io.fir_base+IRCC_SCE_CFGB); + register_bank(self->io->fir_base, 1); + outb(inb(self->io->fir_base+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, + self->io->fir_base+IRCC_SCE_CFGB); /* Check for underrrun! */ register_bank(iobase, 0); @@ -765,12 +862,13 @@ */ static int ircc_dma_receive(struct ircc_cb *self, int iobase) { +#if 0 /* Turn off chip DMA */ - //register_bank(iobase, 1); - //outb(inb(iobase+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, - // iobase+IRCC_SCE_CFGB); - - setup_dma(self->io.dma, self->rx_buff.data, self->rx_buff.truesize, + register_bank(iobase, 1); + outb(inb(iobase+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, + iobase+IRCC_SCE_CFGB); +#endif + setup_dma(self->io->dma, self->rx_buff.data, self->rx_buff.truesize, DMA_RX_MODE); /* Set max Rx frame size */ @@ -778,7 +876,7 @@ outb((2050 >> 8) & 0x0f, iobase+IRCC_RX_SIZE_HI); outb(2050 & 0xff, iobase+IRCC_RX_SIZE_LO); - self->io.direction = IO_RECV; + self->io->direction = IO_RECV; self->rx_buff.data = self->rx_buff.head; /* Setup DMA controller */ @@ -817,12 +915,12 @@ msgcnt = inb(iobase+IRCC_LCR_B) & 0x08; IRDA_DEBUG(2, __FUNCTION__ ": dma count = %d\n", - get_dma_residue(self->io.dma)); + get_dma_residue(self->io->dma)); - len = self->rx_buff.truesize - get_dma_residue(self->io.dma); + len = self->rx_buff.truesize - get_dma_residue(self->io->dma); /* Remove CRC */ - if (self->io.speed < 4000000) + if (self->io->speed < 4000000) len -= 2; else len -= 4; @@ -875,11 +973,11 @@ ASSERT(self != NULL, return;); /* Check if we should use the SIR interrupt handler */ - if (self->io.speed < 576000) { + if (self->io->speed < 576000) { irport_interrupt(irq, dev_id, regs); return; } - iobase = self->io.fir_base; + iobase = self->io->fir_base; spin_lock(&self->lock); @@ -892,7 +990,7 @@ IRDA_DEBUG(2, __FUNCTION__ "(), iir = 0x%02x\n", iir); if (iir & IRCC_IIR_EOM) { - if (self->io.direction == IO_RECV) + if (self->io->direction == IO_RECV) ircc_dma_receive_complete(self, iobase); else ircc_dma_xmit_complete(self, iobase); @@ -924,7 +1022,7 @@ ASSERT(self != NULL, return FALSE;); IRDA_DEBUG(0, __FUNCTION__ ": dma count = %d\n", - get_dma_residue(self->io.dma)); + get_dma_residue(self->io->dma)); status = (self->rx_buff.state != OUTSIDE_FRAME); @@ -952,7 +1050,7 @@ ASSERT(self != NULL, return 0;); - iobase = self->io.fir_base; + iobase = self->io->fir_base; irport_net_open(dev); /* irport allocates the irq */ @@ -960,9 +1058,10 @@ * Always allocate the DMA channel after the IRQ, * and clean up on failure. */ - if (request_dma(self->io.dma, dev->name)) { + if (request_dma(self->io->dma, dev->name)) { irport_net_close(dev); + WARNING(__FUNCTION__ "(), unable to allocate DMA=%d\n", self->io->dma); return -EAGAIN; } @@ -991,13 +1090,13 @@ ASSERT(self != NULL, return 0;); - iobase = self->io.fir_base; + iobase = self->io->fir_base; irport_net_close(dev); - disable_dma(self->io.dma); + disable_dma(self->io->dma); - free_dma(self->io.dma); + free_dma(self->io->dma); MOD_DEC_USE_COUNT; @@ -1008,19 +1107,19 @@ { MESSAGE("%s, Suspending\n", driver_name); - if (self->io.suspended) + if (self->io->suspended) return; ircc_net_close(self->netdev); - self->io.suspended = 1; + self->io->suspended = 1; } static void ircc_wakeup(struct ircc_cb *self) { unsigned long flags; - if (!self->io.suspended) + if (!self->io->suspended) return; save_flags(flags); @@ -1049,21 +1148,84 @@ } #ifdef MODULE -MODULE_AUTHOR("Thomas Davis "); -MODULE_DESCRIPTION("SMC IrCC controller driver"); -MODULE_PARM(ircc_dma, "1i"); -MODULE_PARM_DESC(ircc_dma, "DMA channel"); -MODULE_PARM(ircc_irq, "1i"); -MODULE_PARM_DESC(ircc_irq, "IRQ line"); -int init_module(void) +/* + * Function ircc_close (self) + * + * Close driver instance + * + */ +#ifdef MODULE +static int __exit ircc_close(struct ircc_cb *self) +{ + int iobase; + + IRDA_DEBUG(0, __FUNCTION__ "\n"); + + ASSERT(self != NULL, return -1;); + + iobase = self->irport->io.fir_base; + + irport_close(self->irport); + + /* Stop interrupts */ + register_bank(iobase, 0); + outb(0, iobase+IRCC_IER); + outb(IRCC_MASTER_RESET, iobase+IRCC_MASTER); + outb(0x00, iobase+IRCC_MASTER); +#if 0 + /* Reset to SIR mode */ + register_bank(iobase, 1); + outb(IRCC_CFGA_IRDA_SIR_A|IRCC_CFGA_TX_POLARITY, iobase+IRCC_SCE_CFGA); + outb(IRCC_CFGB_IR, iobase+IRCC_SCE_CFGB); +#endif + /* Release the PORT that this driver is using */ + IRDA_DEBUG(0, __FUNCTION__ "(), releasing 0x%03x\n", + self->io->fir_base); + + release_region(self->io->fir_base, self->io->fir_ext); + + if (self->tx_buff.head) + kfree(self->tx_buff.head); + + if (self->rx_buff.head) + kfree(self->rx_buff.head); + + kfree(self); + + return 0; +} +#endif /* MODULE */ + +int __init smc_init(void) { return ircc_init(); } -void cleanup_module(void) +void __exit smc_cleanup(void) { - ircc_cleanup(); + int i; + + IRDA_DEBUG(0, __FUNCTION__ "\n"); + + for (i=0; i < 2; i++) { + if (dev_self[i]) + ircc_close(dev_self[i]); + } } + +module_init(smc_init); +module_exit(smc_cleanup); + +MODULE_AUTHOR("Thomas Davis "); +MODULE_DESCRIPTION("SMC IrCC controller driver"); +MODULE_PARM(ircc_dma, "1i"); +MODULE_PARM_DESC(ircc_dma, "DMA channel"); +MODULE_PARM(ircc_irq, "1i"); +MODULE_PARM_DESC(ircc_irq, "IRQ line"); +MODULE_PARM(ircc_fir, "1-4i"); +MODULE_PARM_DESC(ircc_fir, "FIR Base Address"); +MODULE_PARM(ircc_sir, "1-4i"); +MODULE_PARM_DESC(ircc_sir, "SIR Base Address"); #endif /* MODULE */ diff -u --recursive --new-file v2.4.8/linux/drivers/net/irda/vlsi_ir.c linux/drivers/net/irda/vlsi_ir.c --- v2.4.8/linux/drivers/net/irda/vlsi_ir.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/net/irda/vlsi_ir.c Sun Aug 12 10:51:42 2001 @@ -0,0 +1,1259 @@ +/********************************************************************* + * + * vlsi_ir.c: VLSI82C147 PCI IrDA controller driver for Linux + * + * Version: 0.1, Aug 6, 2001 + * + * Copyright (c) 2001 Martin Diehl + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ********************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + + +/********************************************************/ + + +MODULE_DESCRIPTION("IrDA SIR/MIR/FIR driver for VLSI 82C147"); +MODULE_AUTHOR("Martin Diehl "); + + +static /* const */ char drivername[] = "vlsi_ir"; + + +#define PCI_CLASS_IRDA_GENERIC 0x0d00 + +static struct pci_device_id vlsi_irda_table [] __devinitdata = { { + + class: PCI_CLASS_IRDA_GENERIC << 8, + vendor: PCI_VENDOR_ID_VLSI, + device: PCI_DEVICE_ID_VLSI_82C147, + }, { /* all zeroes */ } +}; + +MODULE_DEVICE_TABLE(pci, vlsi_irda_table); + + +/********************************************************/ + + +MODULE_PARM(clksrc, "i"); +MODULE_PARM_DESC(clksrc, "clock input source selection"); + +/* clksrc: which clock source to be used + * 0: auto - try PLL, fallback to 40MHz XCLK + * 1: on-chip 48MHz PLL + * 2: external 48MHz XCLK + * 3: external 40MHz XCLK (HP OB-800) + */ + +static int clksrc = 0; /* default is 0(auto) */ + + +MODULE_PARM(ringsize, "1-2i"); +MODULE_PARM_DESC(ringsize, "tx, rx ring descriptor size"); + +/* ringsize: size of the tx and rx descriptor rings + * independent for tx and rx + * specify as ringsize=tx[,rx] + * allowed values: 4, 8, 16, 32, 64 + */ + +static int ringsize[] = {16,16}; /* default is tx=rx=16 */ + + +MODULE_PARM(sirpulse, "i"); +MODULE_PARM_DESC(sirpulse, "sir pulse width tuning"); + +/* sirpulse: tuning of the sir pulse width within IrPHY 1.3 limits + * 0: real short, 1.5us (exception 6us at 2.4kb/s) + * 1: nominal 3/16 bittime width + */ + +static int sirpulse = 1; /* default is 3/16 bittime */ + + +MODULE_PARM(mtt_bits, "i"); +MODULE_PARM_DESC(mtt_bits, "IrLAP bitfield representing min-turn-time"); + +/* mtt_bit: encoded min-turn-time values we accept for connections + * according to IrLAP definition (section 6.6.8) + * the widespreadly used HP HDLS-1100 requires 1 msec + */ + +static int mtt_bits = 0x07; /* default is 1 ms or more */ + + +/********************************************************/ + + +/* some helpers for operations on ring descriptors */ + + +static inline int rd_is_active(struct ring_descr *rd) +{ + return ((rd->rd_status & RD_STAT_ACTIVE) != 0); +} + +static inline void rd_set_addr_status(struct ring_descr *rd, dma_addr_t a, u8 s) +{ + /* overlayed - order is important! */ + + rd->rd_addr = a; + rd->rd_status = s; +} + +static inline void rd_set_status(struct ring_descr *rd, u8 s) +{ + rd->rd_status = s; +} + +static inline void rd_set_count(struct ring_descr *rd, u16 c) +{ + rd->rd_count = c; +} + +static inline u8 rd_get_status(struct ring_descr *rd) +{ + return rd->rd_status; +} + +static inline dma_addr_t rd_get_addr(struct ring_descr *rd) +{ + dma_addr_t a; + + a = (rd->rd_addr & DMA_MASK_MSTRPAGE) | (MSTRPAGE_VALUE << 24); + return a; +} + +static inline u16 rd_get_count(struct ring_descr *rd) +{ + return rd->rd_count; +} + + +/* advancing indices pointing into descriptor rings */ + +static inline void ring_ptr_inc(unsigned *ptr, unsigned mask) +{ + *ptr = (*ptr + 1) & mask; +} + + +/********************************************************/ + + +#define MAX_PACKET_LEN 2048 /* IrDA MTU */ + +/* increase transfer buffer size somewhat so we have enough space left + * when packet size increases during wrapping due to XBOFs and escapes. + * well, this wastes some memory - anyway, later we will + * either map skb's directly or use pci_pool allocator... + */ + +#define XFER_BUF_SIZE (MAX_PACKET_LEN+512) + +/* the memory required to hold the 2 descriptor rings */ + +#define RING_AREA_SIZE (2 * MAX_RING_DESCR * sizeof(struct ring_descr)) + +/* the memory required to hold the rings' buffer entries */ + +#define RING_ENTRY_SIZE (2 * MAX_RING_DESCR * sizeof(struct ring_entry)) + + +/********************************************************/ + +/* just dump all registers */ + +static void vlsi_reg_debug(int iobase, const char *s) +{ + int i; + + mb(); + printk(KERN_DEBUG "%s: ", s); + for (i = 0; i < 0x20; i++) + printk("%02x", (unsigned)inb((iobase+i))); + printk("\n"); +} + +/********************************************************/ + + +static int vlsi_set_clock(struct pci_dev *pdev) +{ + u8 clkctl, lock; + int i, count; + + if (clksrc < 0 || clksrc > 3) { + printk(KERN_ERR "%s: invalid clksrc=%d\n", __FUNCTION__, clksrc); + return -1; + } + if (clksrc < 2) { /* auto or PLL: try PLL */ + clkctl = CLKCTL_NO_PD | CLKCTL_CLKSTP; + pci_write_config_byte(pdev, VLSI_PCI_CLKCTL, clkctl); + + /* protocol to detect PLL lock synchronisation */ + udelay(500); + count = 0; + for (i = 500; i <= 10000; i += 50) { /* max 10 msec */ + pci_read_config_byte(pdev, VLSI_PCI_CLKCTL, &lock); + if (lock&CLKCTL_LOCK) { + if (++count >= 3) + break; + } + udelay(50); + } + if (count < 3) { + if (clksrc == 1) { /* explicitly asked for PLL hence bail out */ + printk(KERN_ERR "%s: no PLL or failed to lock!\n", + __FUNCTION__); + clkctl = CLKCTL_CLKSTP; + pci_write_config_byte(pdev, VLSI_PCI_CLKCTL, clkctl); + return -1; + } + else /* was: clksrc=0(auto) */ + clksrc = 3; /* fallback to 40MHz XCLK (OB800) */ + + printk(KERN_INFO "%s: PLL not locked, fallback to clksrc=%d\n", + __FUNCTION__, clksrc); + } + else { /* got succesful PLL lock */ + clksrc = 1; + return 0; + } + } + + /* we get here if either no PLL detected in auto-mode or + the external clock source explicitly specified */ + + clkctl = CLKCTL_EXTCLK | CLKCTL_CLKSTP; + if (clksrc == 3) + clkctl |= CLKCTL_XCKSEL; + pci_write_config_byte(pdev, VLSI_PCI_CLKCTL, clkctl); + + /* no way to test for working XCLK */ + + return 0; +} + + +static void vlsi_start_clock(struct pci_dev *pdev) +{ + u8 clkctl; + + printk(KERN_INFO "%s: start clock using %s as input\n", __FUNCTION__, + (clksrc&2)?((clksrc&1)?"40MHz XCLK":"48MHz XCLK"):"48MHz PLL"); + pci_read_config_byte(pdev, VLSI_PCI_CLKCTL, &clkctl); + clkctl &= ~CLKCTL_CLKSTP; + pci_write_config_byte(pdev, VLSI_PCI_CLKCTL, clkctl); +} + + +static void vlsi_stop_clock(struct pci_dev *pdev) +{ + u8 clkctl; + + pci_read_config_byte(pdev, VLSI_PCI_CLKCTL, &clkctl); + clkctl |= CLKCTL_CLKSTP; + pci_write_config_byte(pdev, VLSI_PCI_CLKCTL, clkctl); +} + + +static void vlsi_unset_clock(struct pci_dev *pdev) +{ + u8 clkctl; + + pci_read_config_byte(pdev, VLSI_PCI_CLKCTL, &clkctl); + if (!(clkctl&CLKCTL_CLKSTP)) + /* make sure clock is already stopped */ + vlsi_stop_clock(pdev); + + clkctl &= ~(CLKCTL_EXTCLK | CLKCTL_NO_PD); + pci_write_config_byte(pdev, VLSI_PCI_CLKCTL, clkctl); +} + +/********************************************************/ + + +/* ### FIXME: don't use old virt_to_bus() anymore! */ + +static int vlsi_alloc_buffers_init(vlsi_irda_dev_t *idev) +{ + void *buf; + int i, j; + + idev->ring_buf = kmalloc(RING_ENTRY_SIZE,GFP_KERNEL); + if (!idev->ring_buf) + return -ENOMEM; + memset(idev->ring_buf, 0, RING_ENTRY_SIZE); + + for (i = MAX_RING_DESCR; i < MAX_RING_DESCR+ringsize[0]; i++) { + buf = kmalloc(XFER_BUF_SIZE, GFP_KERNEL|GFP_DMA); + if (!buf) { + for (j = MAX_RING_DESCR; j < i; j++) + kfree(idev->ring_buf[j].head); + kfree(idev->ring_buf); + idev->ring_buf = NULL; + return -ENOMEM; + } + idev->ring_buf[i].head = buf; + idev->ring_buf[i].skb = NULL; + rd_set_addr_status(idev->ring_hw+i,virt_to_bus(buf), 0); + } + + for (i = 0; i < ringsize[1]; i++) { + buf = kmalloc(XFER_BUF_SIZE, GFP_KERNEL|GFP_DMA); + if (!buf) { + for (j = 0; j < i; j++) + kfree(idev->ring_buf[j].head); + for (j = MAX_RING_DESCR; j < MAX_RING_DESCR+ringsize[0]; j++) + kfree(idev->ring_buf[j].head); + kfree(idev->ring_buf); + idev->ring_buf = NULL; + return -ENOMEM; + } + idev->ring_buf[i].head = buf; + idev->ring_buf[i].skb = NULL; + rd_set_addr_status(idev->ring_hw+i,virt_to_bus(buf), RD_STAT_ACTIVE); + } + + return 0; +} + + +static int vlsi_init_ring(vlsi_irda_dev_t *idev) +{ + + idev->tx_mask = MAX_RING_DESCR | (ringsize[0] - 1); + idev->rx_mask = ringsize[1] - 1; + + idev->ring_hw = pci_alloc_consistent(idev->pdev, + RING_AREA_SIZE, &idev->busaddr); + if (!idev->ring_hw) { + printk(KERN_ERR "%s: insufficient memory for descriptor rings\n", + __FUNCTION__); + return -ENOMEM; + } +#if 0 + printk(KERN_DEBUG "%s: (%d,%d)-ring %p / %p\n", __FUNCTION__, + ringsize[0], ringsize[1], idev->ring_hw, + (void *)(unsigned)idev->busaddr); +#endif + memset(idev->ring_hw, 0, RING_AREA_SIZE); + + if (vlsi_alloc_buffers_init(idev)) { + + pci_free_consistent(idev->pdev, RING_AREA_SIZE, + idev->ring_hw, idev->busaddr); + printk(KERN_ERR "%s: insufficient memory for ring buffers\n", + __FUNCTION__); + return -1; + } + + return 0; +} + + + +/********************************************************/ + + + +static int vlsi_set_baud(struct net_device *ndev) +{ + vlsi_irda_dev_t *idev = ndev->priv; + unsigned long flags; + u16 nphyctl; + int iobase; + u16 config; + unsigned mode; + int ret; + int baudrate; + + baudrate = idev->new_baud; + iobase = ndev->base_addr; + + printk(KERN_DEBUG "%s: %d -> %d\n", __FUNCTION__, idev->baud, idev->new_baud); + + spin_lock_irqsave(&idev->lock, flags); + + outw(0, iobase+VLSI_PIO_IRENABLE); + + if (baudrate == 4000000) { + mode = IFF_FIR; + config = IRCFG_FIR; + nphyctl = PHYCTL_FIR; + } + else if (baudrate == 1152000) { + mode = IFF_MIR; + config = IRCFG_MIR | IRCFG_CRC16; + nphyctl = PHYCTL_MIR(baudrate); + } + else { + mode = IFF_SIR; + config = IRCFG_SIR | IRCFG_SIRFILT | IRCFG_RXANY; + switch(baudrate) { + default: + printk(KERN_ERR "%s: undefined baudrate %d - fallback to 9600!\n", + __FUNCTION__, baudrate); + baudrate = 9600; + /* fallthru */ + case 2400: + case 9600: + case 19200: + case 38400: + case 57600: + case 115200: + nphyctl = PHYCTL_SIR(baudrate,sirpulse,clksrc==3); + break; + } + } + + config |= IRCFG_MSTR | IRCFG_ENRX; + + outw(config, iobase+VLSI_PIO_IRCFG); + + outw(nphyctl, iobase+VLSI_PIO_NPHYCTL); + wmb(); + outw(IRENABLE_IREN, iobase+VLSI_PIO_IRENABLE); + /* chip fetches IRCFG on next rising edge of its 8MHz clock */ + + mb(); + config = inw(iobase+VLSI_PIO_IRENABLE) & IRENABLE_MASK; + + if (mode == IFF_FIR) + config ^= IRENABLE_FIR_ON; + else if (mode == IFF_MIR) + config ^= (IRENABLE_FIR_ON|IRENABLE_CRC16_ON); + else + config ^= IRENABLE_SIR_ON; + + + if (config != (IRENABLE_IREN|IRENABLE_ENRXST)) { + printk(KERN_ERR "%s: failed to set %s mode!\n", __FUNCTION__, + (mode==IFF_SIR)?"SIR":((mode==IFF_MIR)?"MIR":"FIR")); + ret = -1; + } + else { + if (inw(iobase+VLSI_PIO_PHYCTL) != nphyctl) { + printk(KERN_ERR "%s: failed to apply baudrate %d\n", + __FUNCTION__, baudrate); + ret = -1; + } + else { + idev->mode = mode; + idev->baud = baudrate; + idev->new_baud = 0; + ret = 0; + } + } + spin_unlock_irqrestore(&idev->lock, flags); + + if (ret) + vlsi_reg_debug(iobase,__FUNCTION__); + + return ret; +} + + + +static int vlsi_init_chip(struct net_device *ndev) +{ + vlsi_irda_dev_t *idev = ndev->priv; + u16 ptr; + unsigned iobase; + + + iobase = ndev->base_addr; + + outw(0, iobase+VLSI_PIO_IRENABLE); + + outb(IRINTR_INT_MASK, iobase+VLSI_PIO_IRINTR); /* w/c pending IRQ, disable all INT */ + + /* disable everything, particularly IRCFG_MSTR - which resets the RING_PTR */ + + outw(0, iobase+VLSI_PIO_IRCFG); + wmb(); + outw(IRENABLE_IREN, iobase+VLSI_PIO_IRENABLE); + + mb(); + + outw(0, iobase+VLSI_PIO_IRENABLE); + + outw(MAX_PACKET_LEN, iobase+VLSI_PIO_MAXPKT); + + outw(BUS_TO_RINGBASE(idev->busaddr), iobase+VLSI_PIO_RINGBASE); + + outw(TX_RX_TO_RINGSIZE(ringsize[0], ringsize[1]), iobase+VLSI_PIO_RINGSIZE); + + + ptr = inw(iobase+VLSI_PIO_RINGPTR); + idev->rx_put = idev->rx_get = RINGPTR_GET_RX(ptr); + idev->tx_put = idev->tx_get = RINGPTR_GET_TX(ptr); + + outw(IRCFG_MSTR, iobase+VLSI_PIO_IRCFG); /* ready for memory access */ + wmb(); + outw(IRENABLE_IREN, iobase+VLSI_PIO_IRENABLE); + + mb(); + + idev->new_baud = 9600; /* start with IrPHY using 9600(SIR) mode */ + vlsi_set_baud(ndev); + + outb(IRINTR_INT_MASK, iobase+VLSI_PIO_IRINTR); + wmb(); + + /* DO NOT BLINDLY ENABLE IRINTR_ACTEN! + * basically every received pulse fires an ACTIVITY-INT + * leading to >1000 INT's per second instead of few 10 + */ + + outb(IRINTR_RPKTEN|IRINTR_TPKTEN, iobase+VLSI_PIO_IRINTR); + wmb(); + + return 0; +} + + +/**************************************************************/ + + +static int vlsi_rx_interrupt(struct net_device *ndev) +{ + vlsi_irda_dev_t *idev = ndev->priv; + int iobase; + int entry; + int len; + u8 status; + u16 word; + struct sk_buff *skb; + int crclen; + + iobase = ndev->base_addr; + + entry = idev->rx_get; + + while ( !rd_is_active(idev->ring_hw+idev->rx_get) ) { + + ring_ptr_inc(&idev->rx_get, idev->rx_mask); + + while (entry != idev->rx_get) { + + status = rd_get_status(idev->ring_hw+entry); + + if (status & RD_STAT_ACTIVE) { + printk(KERN_CRIT "%s: rx still active!!!\n", + __FUNCTION__); + break; + } + if (status & RX_STAT_ERROR) { + idev->stats.rx_errors++; + if (status & RX_STAT_OVER) + idev->stats.rx_over_errors++; + if (status & RX_STAT_LENGTH) + idev->stats.rx_length_errors++; + if (status & RX_STAT_PHYERR) + idev->stats.rx_frame_errors++; + if (status & RX_STAT_CRCERR) + idev->stats.rx_crc_errors++; + } + else { + len = rd_get_count(idev->ring_hw+entry); + crclen = (idev->mode==IFF_FIR) ? 4 : 2; + if (len < crclen) + printk(KERN_ERR "%s: strange frame (len=%d)\n", + __FUNCTION__, len); + else + len -= crclen; /* remove trailing CRC */ + + skb = dev_alloc_skb(len+1); + if (skb) { + skb->dev = ndev; + skb_reserve(skb,1); + memcpy(skb_put(skb,len), idev->ring_buf[entry].head, len); + idev->stats.rx_packets++; + idev->stats.rx_bytes += len; + skb->mac.raw = skb->data; + skb->protocol = htons(ETH_P_IRDA); + netif_rx(skb); + } + else { + idev->stats.rx_dropped++; + printk(KERN_ERR "%s: rx packet dropped\n", __FUNCTION__); + } + } + rd_set_count(idev->ring_hw+entry, 0); + rd_set_status(idev->ring_hw+entry, RD_STAT_ACTIVE); + ring_ptr_inc(&entry, idev->rx_mask); + } + } + idev->rx_put = idev->rx_get; + idev->rx_get = entry; + + word = inw(iobase+VLSI_PIO_IRENABLE); + if (!(word & IRENABLE_ENTXST)) { + + /* only rewrite ENRX, if tx not running! + * rewriting ENRX during tx in progress wouldn't hurt + * but would be racy since we would also have to rewrite + * ENTX then (same register) - which might get disabled meanwhile. + */ + + outw(0, iobase+VLSI_PIO_IRENABLE); + + word = inw(iobase+VLSI_PIO_IRCFG); + mb(); + outw(word | IRCFG_ENRX, iobase+VLSI_PIO_IRCFG); + wmb(); + outw(IRENABLE_IREN, iobase+VLSI_PIO_IRENABLE); + } + mb(); + outw(0, iobase+VLSI_PIO_PROMPT); + return 0; +} + + +static int vlsi_tx_interrupt(struct net_device *ndev) +{ + vlsi_irda_dev_t *idev = ndev->priv; + int iobase; + int entry; + int ret; + u16 config; + u16 status; + + ret = 0; + iobase = ndev->base_addr; + + entry = idev->tx_get; + + while ( !rd_is_active(idev->ring_hw+idev->tx_get) ) { + + if (idev->tx_get == idev->tx_put) { /* tx ring empty */ + /* sth more to do here? */ + break; + } + ring_ptr_inc(&idev->tx_get, idev->tx_mask); + while (entry != idev->tx_get) { + status = rd_get_status(idev->ring_hw+entry); + if (status & RD_STAT_ACTIVE) { + printk(KERN_CRIT "%s: tx still active!!!\n", + __FUNCTION__); + break; + } + if (status & TX_STAT_UNDRN) { + idev->stats.tx_errors++; + idev->stats.tx_fifo_errors++; + } + else { + idev->stats.tx_packets++; + idev->stats.tx_bytes += rd_get_count(idev->ring_hw+entry); + } + rd_set_count(idev->ring_hw+entry, 0); + rd_set_status(idev->ring_hw+entry, 0); + ring_ptr_inc(&entry, idev->tx_mask); + } + } + + outw(0, iobase+VLSI_PIO_IRENABLE); + config = inw(iobase+VLSI_PIO_IRCFG); + mb(); + + if (idev->tx_get != idev->tx_put) { /* tx ring not empty */ + outw(config | IRCFG_ENTX, iobase+VLSI_PIO_IRCFG); + ret = 1; /* no speed-change-check */ + } + else + outw((config & ~IRCFG_ENTX) | IRCFG_ENRX, iobase+VLSI_PIO_IRCFG); + wmb(); + outw(IRENABLE_IREN, iobase+VLSI_PIO_IRENABLE); + + mb(); + + outw(0, iobase+VLSI_PIO_PROMPT); + wmb(); + + idev->tx_get = entry; + if (netif_queue_stopped(ndev)) { + netif_wake_queue(ndev); + printk(KERN_DEBUG "%s: queue awoken\n", __FUNCTION__); + } + return ret; +} + + +static int vlsi_act_interrupt(struct net_device *ndev) +{ + printk(KERN_DEBUG "%s\n", __FUNCTION__); + return 0; +} + + +static void vlsi_interrupt(int irq, void *dev_instance, struct pt_regs *regs) +{ + struct net_device *ndev = dev_instance; + vlsi_irda_dev_t *idev = ndev->priv; + int iobase; + u8 irintr; + int boguscount = 20; + int no_speed_check = 0; + unsigned flags; + + + iobase = ndev->base_addr; + spin_lock_irqsave(&idev->lock,flags); + do { + irintr = inb(iobase+VLSI_PIO_IRINTR); + rmb(); + outb(irintr, iobase+VLSI_PIO_IRINTR); /* acknowledge asap */ + wmb(); + + if (!(irintr&=IRINTR_INT_MASK)) /* not our INT - probably shared */ + break; + +// vlsi_reg_debug(iobase,__FUNCTION__); + + if (irintr&IRINTR_RPKTINT) + no_speed_check |= vlsi_rx_interrupt(ndev); + + if (irintr&IRINTR_TPKTINT) + no_speed_check |= vlsi_tx_interrupt(ndev); + + if ((irintr&IRINTR_ACTIVITY) && !(irintr^IRINTR_ACTIVITY) ) + no_speed_check |= vlsi_act_interrupt(ndev); + + if (irintr & ~(IRINTR_RPKTINT|IRINTR_TPKTINT|IRINTR_ACTIVITY)) + printk(KERN_DEBUG "%s: IRINTR = %02x\n", + __FUNCTION__, (unsigned)irintr); + + } while (--boguscount > 0); + spin_unlock_irqrestore(&idev->lock,flags); + + if (boguscount <= 0) + printk(KERN_ERR "%s: too much work in interrupt!\n", __FUNCTION__); + + else if (!no_speed_check) { + if (idev->new_baud) + vlsi_set_baud(ndev); + } +} + + +/**************************************************************/ + +static int vlsi_open(struct net_device *ndev) +{ + vlsi_irda_dev_t *idev = ndev->priv; + struct pci_dev *pdev = idev->pdev; + int err; + + MOD_INC_USE_COUNT; /* still needed? - we have SET_MODULE_OWNER! */ + + if (pci_request_regions(pdev,drivername)) { + printk(KERN_ERR "%s: io resource busy\n", __FUNCTION__); + MOD_DEC_USE_COUNT; + return -EAGAIN; + } + + if (request_irq(ndev->irq, vlsi_interrupt, SA_SHIRQ|SA_INTERRUPT, + drivername, ndev)) { + printk(KERN_ERR "%s: couldn't get IRQ: %d\n", + __FUNCTION__, ndev->irq); + pci_release_regions(pdev); + MOD_DEC_USE_COUNT; + return -EAGAIN; + } + printk(KERN_INFO "%s: got resources for %s - irq=%d / io=%04lx\n", + __FUNCTION__, ndev->name, ndev->irq, ndev->base_addr ); + + if (vlsi_set_clock(pdev)) { + printk(KERN_ERR "%s: no valid clock source\n", + __FUNCTION__); + free_irq(ndev->irq,ndev); + pci_release_regions(pdev); + MOD_DEC_USE_COUNT; + return -EIO; + } + + vlsi_start_clock(pdev); + + err = vlsi_init_ring(idev); + if (err) { + vlsi_unset_clock(pdev); + free_irq(ndev->irq,ndev); + pci_release_regions(pdev); + MOD_DEC_USE_COUNT; + return err; + } + + vlsi_init_chip(ndev); + + printk(KERN_INFO "%s: IrPHY setup: %d baud (%s), %s SIR-pulses\n", + __FUNCTION__, idev->baud, + (idev->mode==IFF_SIR)?"SIR":((idev->mode==IFF_MIR)?"MIR":"FIR"), + (sirpulse)?"3/16 bittime":"short"); + + idev->irlap = irlap_open(ndev,&idev->qos); + + netif_start_queue(ndev); + + printk(KERN_INFO "%s: device %s operational using (%d,%d) tx,rx-ring\n", + __FUNCTION__, ndev->name, ringsize[0], ringsize[1]); + + return 0; +} + + +static int vlsi_close(struct net_device *ndev) +{ + vlsi_irda_dev_t *idev = ndev->priv; + struct pci_dev *pdev = idev->pdev; + int i; + u8 cmd; + unsigned iobase; + + + iobase = ndev->base_addr; + netif_stop_queue(ndev); + + if (idev->irlap) + irlap_close(idev->irlap); + idev->irlap = NULL; + + outb(IRINTR_INT_MASK, iobase+VLSI_PIO_IRINTR); /* w/c pending + disable further IRQ */ + wmb(); + outw(0, iobase+VLSI_PIO_IRENABLE); + outw(0, iobase+VLSI_PIO_IRCFG); /* disable everything */ + wmb(); + outw(IRENABLE_IREN, iobase+VLSI_PIO_IRENABLE); + mb(); /* from now on */ + + outw(0, iobase+VLSI_PIO_IRENABLE); + wmb(); + + vlsi_stop_clock(pdev); + + vlsi_unset_clock(pdev); + + free_irq(ndev->irq,ndev); + + if (idev->ring_buf) { + for (i = 0; i < 2*MAX_RING_DESCR; i++) { + if (idev->ring_buf[i].head) + kfree(idev->ring_buf[i].head); + } + kfree(idev->ring_buf); + } + + if (idev->busaddr) + pci_free_consistent(idev->pdev,RING_AREA_SIZE,idev->ring_hw,idev->busaddr); + + idev->ring_buf = NULL; + idev->ring_hw = NULL; + idev->busaddr = 0; + + pci_read_config_byte(pdev, PCI_COMMAND, &cmd); + cmd &= ~PCI_COMMAND_MASTER; + pci_write_config_byte(pdev, PCI_COMMAND, cmd); + + pci_release_regions(pdev); + + printk(KERN_INFO "%s: device %s stopped\n", __FUNCTION__, ndev->name); + + MOD_DEC_USE_COUNT; + return 0; +} + +static struct net_device_stats * vlsi_get_stats(struct net_device *ndev) +{ + vlsi_irda_dev_t *idev = ndev->priv; + + return &idev->stats; +} + +static int vlsi_hard_start_xmit(struct sk_buff *skb, struct net_device *ndev) +{ + vlsi_irda_dev_t *idev = ndev->priv; + unsigned long flags; + int iobase; + u8 status; + u16 config; + int mtt; + int entry; + int len, speed; + + + iobase = ndev->base_addr; + + speed = irda_get_next_speed(skb); + + if (speed != -1 && speed != idev->baud) { + idev->new_baud = speed; + if (!skb->len) { + dev_kfree_skb(skb); + vlsi_set_baud(ndev); + return 0; + } + status = TX_STAT_CLRENTX; /* stop tx-ring after this frame */ + } + else + status = 0; + + + spin_lock_irqsave(&idev->lock,flags); + + entry = idev->tx_put; + + if (idev->mode == IFF_SIR) { + status |= TX_STAT_DISCRC; + len = async_wrap_skb(skb, idev->ring_buf[entry].head, + XFER_BUF_SIZE); + } + else { /* hw deals with MIR/FIR mode */ + len = skb->len; + memcpy(idev->ring_buf[entry].head, skb->data, len); + } + + if (len == 0) + printk(KERN_ERR "%s: sending 0-size packet???\n", + __FUNCTION__); + + status |= RD_STAT_ACTIVE; + + rd_set_count(idev->ring_hw+entry, len); + rd_set_status(idev->ring_hw+entry, status); + ring_ptr_inc(&idev->tx_put, idev->tx_mask); + + dev_kfree_skb(skb); + +#if 0 + printk(KERN_DEBUG "%s: dump entry %d: %u %02x %08x\n", + __FUNCTION__, entry, + idev->ring_hw[entry].rd_count, + (unsigned)idev->ring_hw[entry].rd_status, + idev->ring_hw[entry].rd_addr & 0xffffffff); + vlsi_reg_debug(iobase,__FUNCTION__); +#endif + +/* + * race window due to concurrent controller processing! + * + * we may loose ENTX at any time when the controller + * fetches an inactive descr or one with CLR_ENTX set. + * therefore we only rely on the controller telling us + * tx is already stopped because (cannot restart without PROMPT). + * instead we depend on the tx-complete-isr to detect the + * false negatives and retrigger the tx ring. + * that's why we need interrupts disabled till tx has been + * kicked, so the tx-complete-isr was either already finished + * before we've put the new active descriptor on the ring - or + * the isr will be called after the new active descr is on the + * ring _and_ the ring was prompted. Making these two steps + * atomic allows to resolve the race. + */ + + iobase = ndev->base_addr; + + if (!(inw(iobase+VLSI_PIO_IRENABLE) & IRENABLE_ENTXST)) { + + mtt = irda_get_mtt(skb); + if (mtt) { + udelay(mtt); /* ### FIXME ... */ + } + + outw(0, iobase+VLSI_PIO_IRENABLE); + + config = inw(iobase+VLSI_PIO_IRCFG); + rmb(); + outw(config | IRCFG_ENTX, iobase+VLSI_PIO_IRCFG); + wmb(); + outw(IRENABLE_IREN, iobase+VLSI_PIO_IRENABLE); + + mb(); + + outw(0, iobase+VLSI_PIO_PROMPT); + wmb(); + } + + spin_unlock_irqrestore(&idev->lock, flags); + + if (idev->tx_put == idev->tx_get) { + netif_stop_queue(ndev); + printk(KERN_DEBUG "%s: tx ring full - queue stopped: %d/%d\n", + __FUNCTION__, idev->tx_put, idev->tx_get); + entry = idev->tx_get; + printk(KERN_INFO "%s: dump stalled entry %d: %u %02x %08x\n", + __FUNCTION__, entry, + idev->ring_hw[entry].rd_count, + (unsigned)idev->ring_hw[entry].rd_status, + idev->ring_hw[entry].rd_addr & 0xffffffff); + vlsi_reg_debug(iobase,__FUNCTION__); + } + +// vlsi_reg_debug(iobase, __FUNCTION__); + + return 0; +} + + +static int vlsi_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd) +{ + vlsi_irda_dev_t *idev = ndev->priv; + struct if_irda_req *irq = (struct if_irda_req *) rq; + unsigned long flags; + u16 fifocnt; + int ret = 0; + + spin_lock_irqsave(&idev->lock,flags); + switch (cmd) { + case SIOCSBANDWIDTH: + if (!capable(CAP_NET_ADMIN)) { + ret = -EPERM; + break; + } + idev->new_baud = irq->ifr_baudrate; + break; + case SIOCSMEDIABUSY: + if (!capable(CAP_NET_ADMIN)) { + ret = -EPERM; + break; + } + irda_device_set_media_busy(ndev, TRUE); + break; + case SIOCGRECEIVING: + fifocnt = inw(ndev->base_addr+VLSI_PIO_RCVBCNT) & RCVBCNT_MASK; + irq->ifr_receiving = (fifocnt!=0) ? 1 : 0; + break; + default: + printk(KERN_ERR "%s: notsupp - cmd=%04x\n", + __FUNCTION__, cmd); + ret = -EOPNOTSUPP; + } + spin_unlock_irqrestore(&idev->lock,flags); + + return ret; +} + + + +int vlsi_irda_init(struct net_device *ndev) +{ + vlsi_irda_dev_t *idev = ndev->priv; + struct pci_dev *pdev = idev->pdev; + u8 byte; + + + SET_MODULE_OWNER(ndev); + + ndev->irq = pdev->irq; + ndev->base_addr = pci_resource_start(pdev,0); + + /* PCI busmastering - see include file for details! */ + + if (pci_set_dma_mask(pdev,DMA_MASK_USED_BY_HW)) { + printk(KERN_ERR "%s: aborting due to PCI BM-DMA address limitations\n", + __FUNCTION__); + return -1; + } + pci_set_master(pdev); + + pdev->dma_mask = DMA_MASK_MSTRPAGE; + pci_write_config_byte(pdev, VLSI_PCI_MSTRPAGE, MSTRPAGE_VALUE); + + /* we don't use the legacy UART, disable its address decoding */ + + pci_read_config_byte(pdev, VLSI_PCI_IRMISC, &byte); + byte &= ~(IRMISC_UARTEN | IRMISC_UARTTST); + pci_write_config_byte(pdev, VLSI_PCI_IRMISC, byte); + + + irda_init_max_qos_capabilies(&idev->qos); + + /* the VLSI82C147 does not support 576000! */ + + idev->qos.baud_rate.bits = IR_2400 | IR_9600 + | IR_19200 | IR_38400 | IR_57600 | IR_115200 + | IR_1152000 | (IR_4000000 << 8); + + idev->qos.min_turn_time.bits = mtt_bits; + + irda_qos_bits_to_value(&idev->qos); + + irda_device_setup(ndev); + + /* currently no media definitions for SIR/MIR/FIR */ + + ndev->flags |= IFF_PORTSEL | IFF_AUTOMEDIA; + ndev->if_port = IF_PORT_UNKNOWN; + + ndev->open = vlsi_open; + ndev->stop = vlsi_close; + ndev->get_stats = vlsi_get_stats; + ndev->hard_start_xmit = vlsi_hard_start_xmit; + ndev->do_ioctl = vlsi_ioctl; + + return 0; +} + +/**************************************************************/ + +static int __devinit +vlsi_irda_probe(struct pci_dev *pdev, const struct pci_device_id *id) +{ + struct net_device *ndev; + vlsi_irda_dev_t *idev; + int alloc_size; + + printk(KERN_INFO "%s: found IrDA PCI controler %s\n", drivername, pdev->name); + + if (pci_enable_device(pdev)) + goto out; + + if ( !pci_resource_start(pdev,0) + || !(pci_resource_flags(pdev,0) & IORESOURCE_IO) ) { + printk(KERN_ERR "%s: bar 0 invalid", __FUNCTION__); + goto out; + } + + alloc_size = sizeof(*ndev) + sizeof(*idev); + + ndev = (struct net_device *) kmalloc (alloc_size, GFP_KERNEL); + if (ndev==NULL) { + printk(KERN_ERR "%s: Unable to allocate device memory.\n", + __FUNCTION__); + goto out; + } + + memset(ndev, 0, alloc_size); + + idev = (vlsi_irda_dev_t *) (ndev + 1); + ndev->priv = (void *) idev; + + spin_lock_init(&idev->lock); + idev->pdev = pdev; + ndev->init = vlsi_irda_init; + strcpy(ndev->name,"irda%d"); + if (register_netdev(ndev)) { + printk(KERN_ERR "%s: register_netdev failed\n", + __FUNCTION__); + goto out_freedev; + } + printk(KERN_INFO "%s: registered device %s\n", drivername, ndev->name); + + pdev->driver_data = ndev; + + return 0; + +out_freedev: + kfree(ndev); +out: + pdev->driver_data = NULL; + return -ENODEV; +} + +static void __devexit vlsi_irda_remove(struct pci_dev *pdev) +{ + struct net_device *ndev = pdev->driver_data; + + if (ndev) { + printk(KERN_INFO "%s: unregister device %s\n", + drivername, ndev->name); + + unregister_netdev(ndev); + /* do not free - async completed by unregister_netdev() + * ndev->destructor called (if present) when going to free + */ + + } + else + printk(KERN_CRIT "%s: lost netdevice?\n", drivername); + pdev->driver_data = NULL; + + pci_disable_device(pdev); + printk(KERN_INFO "%s: %s disabled\n", drivername, pdev->name); +} + +static int vlsi_irda_suspend(struct pci_dev *pdev, u32 state) +{ + printk(KERN_ERR "%s - %s\n", __FUNCTION__, pdev->name); + return 0; +} + +static int vlsi_irda_resume(struct pci_dev *pdev) +{ + printk(KERN_ERR "%s - %s\n", __FUNCTION__, pdev->name); + return 0; +} + +/*********************************************************/ + +static struct pci_driver vlsi_irda_driver = { + name: drivername, + id_table: vlsi_irda_table, + probe: vlsi_irda_probe, + remove: vlsi_irda_remove, + suspend: vlsi_irda_suspend, + resume: vlsi_irda_resume, +}; + +static int __init vlsi_mod_init(void) +{ + if (clksrc < 0 || clksrc > 3) { + printk(KERN_ERR "%s: invalid clksrc=%d\n", __FUNCTION__, clksrc); + return -1; + } + if ( ringsize[0]==0 || (ringsize[0] & ~(64|32|16|8|4)) + || ((ringsize[0]-1)&ringsize[0])) { + printk(KERN_INFO "%s: invalid tx ringsize %d - using default=16\n", + __FUNCTION__, ringsize[0]); + ringsize[0] = 16; + } + if ( ringsize[1]==0 || (ringsize[1] & ~(64|32|16|8|4)) + || ((ringsize[1]-1)&ringsize[1])) { + printk(KERN_INFO "%s: invalid rx ringsize %d - using default=16\n", + __FUNCTION__, ringsize[1]); + ringsize[1] = 16; + } + sirpulse = !!sirpulse; + return pci_module_init(&vlsi_irda_driver); +} + +static void __exit vlsi_mod_exit(void) +{ + pci_unregister_driver(&vlsi_irda_driver); +} + +module_init(vlsi_mod_init); +module_exit(vlsi_mod_exit); + diff -u --recursive --new-file v2.4.8/linux/drivers/net/lasi_82596.c linux/drivers/net/lasi_82596.c --- v2.4.8/linux/drivers/net/lasi_82596.c Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/lasi_82596.c Sun Aug 12 10:51:42 2001 @@ -96,7 +96,7 @@ #include static char version[] __initdata = - "82596.c $Revision: 1.14 $\n"; + "82596.c $Revision: 1.20 $\n"; /* DEBUG flags */ @@ -994,30 +994,35 @@ static int i596_open(struct net_device *dev) { - int res = 0; - DEB(DEB_OPEN,printk("%s: i596_open() irq %d.\n", dev->name, dev->irq)); + MOD_INC_USE_COUNT; + if (request_irq(dev->irq, &i596_interrupt, 0, "i82596", dev)) { printk("%s: IRQ %d not free\n", dev->name, dev->irq); - return -EAGAIN; + goto out; } - request_region(dev->base_addr, 12, dev->name); - init_rx_bufs(dev); + if (init_i596_mem(dev)) { + printk("%s: Failed to init memory\n", dev->name); + goto out_remove_rx_bufs; + } + + request_mem_region(dev->base_addr, I596_TOTAL_SIZE, "i82596"); + netif_start_queue(dev); - MOD_INC_USE_COUNT; + return 0; - /* Initialize the 82596 memory */ - if (init_i596_mem(dev)) { - res = -EAGAIN; - free_irq(dev->irq, dev); - } +out_remove_rx_bufs: + remove_rx_bufs(dev); + free_irq(dev->irq, dev); +out: + MOD_DEC_USE_COUNT; - return res; + return -EAGAIN; } static void i596_tx_timeout (struct net_device *dev) @@ -1162,7 +1167,7 @@ if (!dev->base_addr || !dev->irq) return -ENODEV; - if (!pdc_lan_station_id( (char*)ð_addr, (void*)dev->base_addr)) { + if (pdc_lan_station_id( (char*)ð_addr, (void*)dev->base_addr)) { for(i=0;i<6;i++) eth_addr[i] = gsc_readb(LAN_PROM_ADDR+i); printk("82596.c: MAC of HP700 LAN blindely read from the prom!\n"); @@ -1176,9 +1181,6 @@ dev->mem_start = (int)__get_free_pages(GFP_ATOMIC, 0); if (!dev->mem_start) { printk("%s: Couldn't get shared memory\n", dev->name); -#ifdef ENABLE_APRICOT - release_region(dev->base_addr, I596_TOTAL_SIZE); -#endif return -ENOMEM; } dma_addr = virt_to_bus(dev->mem_start); @@ -1211,9 +1213,6 @@ sizeof(struct i596_private), (unsigned long)&lp->scb)); memset((void *) lp, 0, sizeof(struct i596_private)); -#if 0 - kernel_set_cachemode((void *)(dev->mem_start), 4096, IOMAP_NOCACHE_SER); -#endif lp->options = options; lp->scb.command = 0; lp->scb.cmd = I596_NULL; @@ -1422,7 +1421,7 @@ free_irq(dev->irq, dev); remove_rx_bufs(dev); - release_region(dev->base_addr, 12); + release_mem_region(dev->base_addr, I596_TOTAL_SIZE); MOD_DEC_USE_COUNT; @@ -1548,4 +1547,3 @@ } #endif /* MODULE */ - diff -u --recursive --new-file v2.4.8/linux/drivers/net/natsemi.c linux/drivers/net/natsemi.c --- v2.4.8/linux/drivers/net/natsemi.c Wed Jul 25 17:10:21 2001 +++ linux/drivers/net/natsemi.c Tue Aug 14 10:14:12 2001 @@ -60,16 +60,20 @@ from Myrio Corporation, Greg Smith] * suspend/resume + version 1.0.8 (Tim Hockin ) + * ETHTOOL_* support + * Wake on lan support (Erik Gilling) + * MXDMA fixes for serverworks + * EEPROM reload TODO: * big endian support with CFG:BEM instead of cpu_to_le32 * support for an external PHY * flow control - * Wake-On-LAN */ #define DRV_NAME "natsemi" -#define DRV_VERSION "1.07+LK1.0.7" -#define DRV_RELDATE "May 18, 2001" +#define DRV_VERSION "1.07+LK1.0.8" +#define DRV_RELDATE "Aug 07, 2001" /* Updated to recommendations in pci-skeleton v2.03. */ @@ -125,7 +129,7 @@ /* Time in jiffies before concluding the transmitter is hung. */ #define TX_TIMEOUT (2*HZ) -#define NATSEMI_HW_TIMEOUT 200 +#define NATSEMI_HW_TIMEOUT 400 #define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/ @@ -302,18 +306,30 @@ WOLCmd=0x40, PauseCmd=0x44, RxFilterAddr=0x48, RxFilterData=0x4C, BootRomAddr=0x50, BootRomData=0x54, SiliconRev=0x58, StatsCtrl=0x5C, StatsData=0x60, RxPktErrs=0x60, RxMissed=0x68, RxCRCErrs=0x64, - PCIPM=0x44, PhyStatus=0xC0, MIntrCtrl=0xC4, MIntrStatus=0xC8, + BasicControl=0x80, BasicStatus=0x84, + AnegAdv=0x90, AnegPeer = 0x94, PhyStatus=0xC0, MIntrCtrl=0xC4, + MIntrStatus=0xC8, PhyCtrl=0xE4, - /* These are from the spec, around page 78... on a separate table. */ + /* These are from the spec, around page 78... on a separate table. + * The meaning of these registers depend on the value of PGSEL. */ PGSEL=0xCC, PMDCSR=0xE4, TSTDAT=0xFC, DSPCFG=0xF4, SDCFG=0x8C }; +/* misc PCI space registers */ +enum PCISpaceRegs { + PCIPM=0x44, +}; + /* Bit in ChipCmd. */ enum ChipCmdBits { ChipReset=0x100, RxReset=0x20, TxReset=0x10, RxOff=0x08, RxOn=0x04, TxOff=0x02, TxOn=0x01, }; +enum PCIBusCfgBits { + EepromReload=0x4, +}; + /* Bits in the interrupt status/mask registers. */ enum intr_status_bits { IntrRxDone=0x0001, IntrRxIntr=0x0002, IntrRxErr=0x0004, IntrRxEarly=0x0008, @@ -324,7 +340,7 @@ WOLPkt=0x2000, RxResetDone=0x1000000, TxResetDone=0x2000000, IntrPCIErr=0x00f00000, - IntrNormalSummary=0x0251, IntrAbnormalSummary=0xED20, + IntrNormalSummary=0x025f, IntrAbnormalSummary=0xCD20, }; /* Bits in the RxMode register. */ @@ -335,6 +351,34 @@ AcceptAllPhys=0x10000000, AcceptMyPhys=0x08000000, }; +/* Bits in WOLCmd register. */ +enum wol_bits { + WakePhy=0x1, WakeUnicast=0x2, WakeMulticast=0x4, WakeBroadcast=0x8, + WakeArp=0x10, WakePMatch0=0x20, WakePMatch1=0x40, WakePMatch2=0x80, + WakePMatch3=0x100, WakeMagic=0x200, WakeMagicSecure=0x400, + SecureHack=0x100000, WokePhy=0x400000, WokeUnicast=0x800000, + WokeMulticast=0x1000000, WokeBroadcast=0x2000000, WokeArp=0x4000000, + WokePMatch0=0x8000000, WokePMatch1=0x10000000, WokePMatch2=0x20000000, + WokePMatch3=0x40000000, WokeMagic=0x80000000, WakeOptsSummary=0x7ff +}; + +enum aneg_bits { + Aneg10BaseT=0x20, Aneg10BaseTFull=0x40, + Aneg100BaseT=0x80, Aneg100BaseTFull=0x100, +}; + +enum config_bits { + CfgPhyDis=0x200, CfgPhyRst=0x400, CfgAnegEnable=0x2000, + CfgAneg100=0x4000, CfgAnegFull=0x8000, CfgAnegDone=0x8000000, + CfgFullDuplex=0x20000000, + CfgSpeed100=0x40000000, CfgLink=0x80000000, +}; + +enum bmcr_bits { + BMCRDuplex=0x100, BMCRAnegRestart=0x200, BMCRAnegEnable=0x1000, + BMCRSpeed=0x2000, BMCRPhyReset=0x8000, +}; + /* The Rx and Tx buffer descriptors. */ /* Note that using only 32 bit fields simplifies conversion to big-endian architectures. */ @@ -408,6 +452,12 @@ static void __get_stats(struct net_device *dev); static struct net_device_stats *get_stats(struct net_device *dev); static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); +static int netdev_set_wol(struct net_device *dev, u32 newval); +static int netdev_get_wol(struct net_device *dev, u32 *supported, u32 *cur); +static int netdev_set_sopass(struct net_device *dev, u8 *newval); +static int netdev_get_sopass(struct net_device *dev, u8 *data); +static int netdev_get_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd); +static int netdev_set_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd); static int netdev_close(struct net_device *dev); @@ -530,6 +580,7 @@ pci_set_drvdata(pdev, NULL); return i; } + netif_carrier_off(dev); printk(KERN_INFO "%s: %s at 0x%lx, ", dev->name, natsemi_pci_info[chip_idx].name, ioaddr); @@ -548,7 +599,8 @@ chip_config & 0x8000 ? "full" : "half"); } printk(KERN_INFO "%s: Transceiver status 0x%4.4x advertising %4.4x.\n", - dev->name, (int)readl(ioaddr + 0x84), np->advertising); + dev->name, (int)readl(ioaddr + BasicStatus), + np->advertising); return 0; } @@ -617,7 +669,7 @@ static int mdio_read(struct net_device *dev, int phy_id, int location) { if (phy_id == 1 && location < 32) - return readl(dev->base_addr + 0x80 + (location<<2)) & 0xffff; + return readl(dev->base_addr+BasicControl+(location<<2))&0xffff; else return 0xffff; } @@ -639,6 +691,20 @@ printk(KERN_DEBUG "%s: reset completed in %d usec.\n", dev->name, i*5); } + + writel(EepromReload, dev->base_addr + PCIBusCfg); + for (i=0;ibase_addr + PCIBusCfg) & EepromReload)) + break; + udelay(5); + } + if (i==NATSEMI_HW_TIMEOUT && debug) { + printk(KERN_INFO "%s: EEPROM did not reload in %d usec.\n", + dev->name, i*5); + } else if (debug > 2) { + printk(KERN_DEBUG "%s: EEPROM reloaded in %d usec.\n", + dev->name, i*5); + } } @@ -733,23 +799,20 @@ if (debug > 4) printk(KERN_DEBUG "%s: found silicon revision %xh.\n", dev->name, readl(ioaddr + SiliconRev)); + /* On page 78 of the spec, they recommend some settings for "optimum performance" to be done in sequence. These settings optimize some - of the 100Mbit autodetection circuitry. Also, we only want to do - this for rev C of the chip. - - There seems to be a typo on page 78, but there isn't. The fixup - should be performed for "DP83815CVNG (SRR = 203h)", which is a - pretty old rev. This is not to be confused with 302h, which is - current. Confirmed with engineers at NSC. + of the 100Mbit autodetection circuitry. They say we only want to + do this for rev C of the chip, but engineers at NSC (Bradley + Kennedy) recommends always setting them. If you don't, you get + errors on some autonegotiations that make the device unusable. */ - if (readl(ioaddr + SiliconRev) == 0x203) { - writew(0x0001, ioaddr + PGSEL); - writew(0x189C, ioaddr + PMDCSR); - writew(0x0000, ioaddr + TSTDAT); - writew(0x5040, ioaddr + DSPCFG); - writew(0x008C, ioaddr + SDCFG); - } + writew(0x0001, ioaddr + PGSEL); + writew(0x189C, ioaddr + PMDCSR); + writew(0x0000, ioaddr + TSTDAT); + writew(0x5040, ioaddr + DSPCFG); + writew(0x008C, ioaddr + SDCFG); + writew(0x0000, ioaddr + PGSEL); /* Enable PHY Specific event based interrupts. Link state change and Auto-Negotiation Completion are among the affected. @@ -774,16 +837,16 @@ /* DRTH: 2: start tx if 64 bytes are in the fifo * FLTH: 0x10: refill with next packet if 512 bytes are free - * MXDMA: 0: up to 512 byte bursts. + * MXDMA: 0: up to 256 byte bursts. * MXDMA must be <= FLTH * ECRETRY=1 * ATP=1 */ - np->tx_config = 0x10801002; + np->tx_config = 0x10f01002; /* DRTH 0x10: start copying to memory if 128 bytes are in the fifo - * MXDMA 0: up to 512 byte bursts + * MXDMA 0: up to 256 byte bursts */ - np->rx_config = 0x0020; + np->rx_config = 0x700020; writel(np->tx_config, ioaddr + TxConfig); writel(np->rx_config, ioaddr + RxConfig); @@ -800,11 +863,11 @@ __set_rx_mode(dev); /* Enable interrupts by setting the interrupt mask. */ - writel(IntrNormalSummary | IntrAbnormalSummary | 0x1f, ioaddr + IntrMask); + writel(IntrNormalSummary | IntrAbnormalSummary, ioaddr + IntrMask); writel(1, ioaddr + IntrEnable); writel(RxOn | TxOn, ioaddr + ChipCmd); - writel(4, ioaddr + StatsCtrl); /* Clear Stats */ + writel(4, ioaddr + StatsCtrl); /* Clear Stats */ } static void netdev_timer(unsigned long data) @@ -1190,7 +1253,8 @@ if (intr_status & LinkChange) { printk(KERN_NOTICE "%s: Link changed: Autonegotiation advertising" " %4.4x partner %4.4x.\n", dev->name, - (int)readl(ioaddr + 0x90), (int)readl(ioaddr + 0x94)); + (int)readl(ioaddr + AnegAdv), + (int)readl(ioaddr + AnegPeer)); /* read MII int status to clear the flag */ readw(ioaddr + MIntrStatus); check_link(dev); @@ -1208,7 +1272,7 @@ } if (intr_status & WOLPkt) { int wol_status = readl(ioaddr + WOLCmd); - printk(KERN_NOTICE "%s: Link wake-up event %8.8x", + printk(KERN_NOTICE "%s: Link wake-up event %8.8x\n", dev->name, wol_status); } if ((intr_status & ~(LinkChange|StatsMax|RxResetDone|TxResetDone|0xA7ff)) @@ -1230,7 +1294,7 @@ /* The chip only need report frame silently dropped. */ np->stats.rx_crc_errors += readl(ioaddr + RxCRCErrs); - np->stats.rx_missed_errors += readl(ioaddr + RxMissed); + np->stats.rx_missed_errors += readl(ioaddr + RxMissed); } static struct net_device_stats *get_stats(struct net_device *dev) @@ -1349,12 +1413,12 @@ static int netdev_ethtool_ioctl(struct net_device *dev, void *useraddr) { struct netdev_private *np = dev->priv; - u32 ethcmd; + struct ethtool_cmd ecmd; - if (copy_from_user(ðcmd, useraddr, sizeof(ethcmd))) + if (copy_from_user(&ecmd, useraddr, sizeof(ecmd))) return -EFAULT; - switch (ethcmd) { + switch (ecmd.cmd) { case ETHTOOL_GDRVINFO: { struct ethtool_drvinfo info = {ETHTOOL_GDRVINFO}; strcpy(info.driver, DRV_NAME); @@ -1364,12 +1428,257 @@ return -EFAULT; return 0; } + case ETHTOOL_GSET: { + spin_lock_irq(&np->lock); + netdev_get_ecmd(dev, &ecmd); + spin_unlock_irq(&np->lock); + if (copy_to_user(useraddr, &ecmd, sizeof(ecmd))) + return -EFAULT; + return 0; + } + case ETHTOOL_SSET: { + int r; + if (copy_from_user(&ecmd, useraddr, sizeof(ecmd))) + return -EFAULT; + spin_lock_irq(&np->lock); + r = netdev_set_ecmd(dev, &ecmd); + spin_unlock_irq(&np->lock); + return r; + } + case ETHTOOL_GWOL: { + struct ethtool_wolinfo wol = {ETHTOOL_GWOL}; + spin_lock_irq(&np->lock); + netdev_get_wol(dev, &wol.supported, &wol.wolopts); + netdev_get_sopass(dev, wol.sopass); + spin_unlock_irq(&np->lock); + if (copy_to_user(useraddr, &wol, sizeof(wol))) + return -EFAULT; + return 0; + } + case ETHTOOL_SWOL: { + struct ethtool_wolinfo wol; + int r; + if (copy_from_user(&wol, useraddr, sizeof(wol))) + return -EFAULT; + spin_lock_irq(&np->lock); + netdev_set_wol(dev, wol.wolopts); + r = netdev_set_sopass(dev, wol.sopass); + spin_unlock_irq(&np->lock); + return r; + } } return -EOPNOTSUPP; } +static int netdev_set_wol(struct net_device *dev, u32 newval) +{ + u32 data = readl(dev->base_addr + WOLCmd) & ~WakeOptsSummary; + + /* translate to bitmasks this chip understands */ + if (newval & WAKE_PHY) + data |= WakePhy; + if (newval & WAKE_UCAST) + data |= WakeUnicast; + if (newval & WAKE_MCAST) + data |= WakeMulticast; + if (newval & WAKE_BCAST) + data |= WakeBroadcast; + if (newval & WAKE_ARP) + data |= WakeArp; + if (newval & WAKE_MAGIC) + data |= WakeMagic; + if (newval & WAKE_MAGICSECURE) + data |= WakeMagicSecure; + + writel(data, dev->base_addr + WOLCmd); + + /* should we burn these into the EEPROM? */ + + return 0; +} + +static int netdev_get_wol(struct net_device *dev, u32 *supported, u32 *cur) +{ + u32 regval = readl(dev->base_addr + WOLCmd); + + *supported = (WAKE_PHY | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST + | WAKE_ARP | WAKE_MAGIC | WAKE_MAGICSECURE); + *cur = 0; + /* translate from chip bitmasks */ + if (regval & 0x1) + *cur |= WAKE_PHY; + if (regval & 0x2) + *cur |= WAKE_UCAST; + if (regval & 0x4) + *cur |= WAKE_MCAST; + if (regval & 0x8) + *cur |= WAKE_BCAST; + if (regval & 0x10) + *cur |= WAKE_ARP; + if (regval & 0x200) + *cur |= WAKE_MAGIC; + if (regval & 0x400) + *cur |= WAKE_MAGICSECURE; + + return 0; +} + +static int netdev_set_sopass(struct net_device *dev, u8 *newval) +{ + u16 *sval = (u16 *)newval; + u32 addr = readl(dev->base_addr + RxFilterAddr) & ~0x3ff; + + /* enable writing to these registers by disabling the RX filter */ + addr &= ~0x80000000; + writel(addr, dev->base_addr + RxFilterAddr); + + /* write the three words to (undocumented) RFCR vals 0xa, 0xc, 0xe */ + writel(addr | 0xa, dev->base_addr + RxFilterAddr); + writew(sval[0], dev->base_addr + RxFilterData); + + writel(addr | 0xc, dev->base_addr + RxFilterAddr); + writew(sval[1], dev->base_addr + RxFilterData); + + writel(addr | 0xe, dev->base_addr + RxFilterAddr); + writew(sval[2], dev->base_addr + RxFilterData); + + /* re-enable the RX filter */ + writel(addr | 0x80000000, dev->base_addr + RxFilterAddr); + + /* should we burn this into the EEPROM? */ + + return 0; +} + +static int netdev_get_sopass(struct net_device *dev, u8 *data) +{ + u16 *sval = (u16 *)data; + u32 addr = readl(dev->base_addr + RxFilterAddr) & ~0x3ff; + + /* read the three words from (undocumented) RFCR vals 0xa, 0xc, 0xe */ + writel(addr | 0xa, dev->base_addr + RxFilterAddr); + sval[0] = readw(dev->base_addr + RxFilterData); + + writel(addr | 0xc, dev->base_addr + RxFilterAddr); + sval[1] = readw(dev->base_addr + RxFilterData); + + writel(addr | 0xe, dev->base_addr + RxFilterAddr); + sval[2] = readw(dev->base_addr + RxFilterData); + + return 0; +} + +static int netdev_get_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd) +{ + u32 tmp; + + ecmd->supported = + (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full | + SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full | + SUPPORTED_Autoneg | SUPPORTED_TP); + + /* only supports twisted-pair */ + ecmd->port = PORT_TP; + + /* only supports internal transceiver */ + ecmd->transceiver = XCVR_INTERNAL; + + /* this isn't fully supported at higher layers */ + ecmd->phy_address = readw(dev->base_addr + PhyCtrl) & 0xf; + + tmp = readl(dev->base_addr + AnegAdv); + ecmd->advertising = ADVERTISED_TP; + if (tmp & Aneg10BaseT) + ecmd->advertising |= ADVERTISED_10baseT_Half; + if (tmp & Aneg10BaseTFull) + ecmd->advertising |= ADVERTISED_10baseT_Full; + if (tmp & Aneg100BaseT) + ecmd->advertising |= ADVERTISED_100baseT_Half; + if (tmp & Aneg100BaseTFull) + ecmd->advertising |= ADVERTISED_100baseT_Full; + + tmp = readl(dev->base_addr + ChipConfig); + if (tmp & CfgAnegEnable) { + ecmd->advertising |= ADVERTISED_Autoneg; + ecmd->autoneg = AUTONEG_ENABLE; + } else { + ecmd->autoneg = AUTONEG_DISABLE; + } + + if (tmp & CfgSpeed100) { + ecmd->speed = SPEED_100; + } else { + ecmd->speed = SPEED_10; + } + + if (tmp & CfgFullDuplex) { + ecmd->duplex = DUPLEX_FULL; + } else { + ecmd->duplex = DUPLEX_HALF; + } + + /* ignore maxtxpkt, maxrxpkt for now */ + + return 0; +} + +static int netdev_set_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd) +{ + struct netdev_private *np = dev->priv; + u32 tmp; + + if (ecmd->speed != SPEED_10 && ecmd->speed != SPEED_100) + return -EINVAL; + if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) + return -EINVAL; + if (ecmd->port != PORT_TP) + return -EINVAL; + if (ecmd->transceiver != XCVR_INTERNAL) + return -EINVAL; + if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE) + return -EINVAL; + /* ignore phy_address, maxtxpkt, maxrxpkt for now */ + + /* WHEW! now lets bang some bits */ + + if (ecmd->autoneg == AUTONEG_ENABLE) { + /* advertise only what has been requested */ + tmp = readl(dev->base_addr + ChipConfig); + tmp &= ~(CfgAneg100 | CfgAnegFull); + tmp |= CfgAnegEnable; + if (ecmd->advertising & ADVERTISED_100baseT_Half + || ecmd->advertising & ADVERTISED_100baseT_Full) { + tmp |= CfgAneg100; + } + if (ecmd->advertising & ADVERTISED_10baseT_Full + || ecmd->advertising & ADVERTISED_100baseT_Full) { + tmp |= CfgAnegFull; + } + writel(tmp, dev->base_addr + ChipConfig); + /* turn on autonegotiation, and force a renegotiate */ + tmp = readl(dev->base_addr + BasicControl); + tmp |= BMCRAnegEnable | BMCRAnegRestart; + writel(tmp, dev->base_addr + BasicControl); + np->advertising = mdio_read(dev, 1, 4); + } else { + /* turn off auto negotiation, set speed and duplexity */ + tmp = readl(dev->base_addr + BasicControl); + tmp &= ~(BMCRAnegEnable | BMCRSpeed | BMCRDuplex); + if (ecmd->speed == SPEED_100) { + tmp |= BMCRSpeed; + } + if (ecmd->duplex == DUPLEX_FULL) { + tmp |= BMCRDuplex; + } else { + np->full_duplex = 0; + } + writel(tmp, dev->base_addr + BasicControl); + } + return 0; +} + static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct netdev_private *np = dev->priv; @@ -1395,7 +1704,8 @@ if (data->phy_id == 1) { u16 miireg = data->reg_num & 0x1f; u16 value = data->val_in; - writew(value, dev->base_addr + 0x80 + (miireg << 2)); + writew(value, dev->base_addr + BasicControl + + (miireg << 2)); switch (miireg) { case 4: np->advertising = value; break; } @@ -1410,8 +1720,11 @@ { long ioaddr = dev->base_addr; struct netdev_private *np = dev->priv; + u32 wol = readl(ioaddr + WOLCmd) & WakeOptsSummary; + u32 clkrun; netif_stop_queue(dev); + netif_carrier_off(dev); if (debug > 1) { printk(KERN_DEBUG "%s: Shutting down ethercard, status was %4.4x.", @@ -1420,14 +1733,23 @@ dev->name, np->cur_tx, np->dirty_tx, np->cur_rx, np->dirty_rx); } - /* Disable interrupts using the mask. */ - writel(0, ioaddr + IntrMask); - writel(0, ioaddr + IntrEnable); - writel(2, ioaddr + StatsCtrl); /* Freeze Stats */ - - /* Stop the chip's Tx and Rx processes. */ - writel(RxOff | TxOff, ioaddr + ChipCmd); - + /* Only shut down chip if wake on lan is not set */ + if (!wol) { + /* Disable interrupts using the mask. */ + writel(0, ioaddr + IntrMask); + writel(0, ioaddr + IntrEnable); + writel(2, ioaddr + StatsCtrl); /* Freeze Stats */ + + /* Stop the chip's Tx and Rx processes. */ + writel(RxOff | TxOff, ioaddr + ChipCmd); + } else if (debug > 1) { + printk(KERN_INFO "%s: remaining active for wake-on-lan\n", + dev->name); + /* spec says write 0 here */ + writel(0, ioaddr + RxRingPtr); + /* allow wake-event interrupts now */ + writel(readl(ioaddr + IntrMask) | WOLPkt, ioaddr + IntrMask); + } del_timer_sync(&np->timer); #ifdef __i386__ @@ -1451,8 +1773,15 @@ drain_ring(dev); free_ring(dev); + clkrun = np->SavedClkRun; + if (wol) { + /* make sure to enable PME */ + clkrun |= 0x100; + } + /* Restore PME enable bit */ writel(np->SavedClkRun, ioaddr + ClkRun); + #if 0 writel(0x0200, ioaddr + ChipConfig); /* Power down Xcvr. */ #endif diff -u --recursive --new-file v2.4.8/linux/drivers/net/sk98lin/skproc.c linux/drivers/net/sk98lin/skproc.c --- v2.4.8/linux/drivers/net/sk98lin/skproc.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/net/sk98lin/skproc.c Wed Aug 15 01:22:15 2001 @@ -293,7 +293,7 @@ if (buffer_length >= len - offset) { *eof = 1; } - return (min(buffer_length, len - offset)); + return (min(int, buffer_length, len - offset)); } diff -u --recursive --new-file v2.4.8/linux/drivers/net/smc-mca.c linux/drivers/net/smc-mca.c --- v2.4.8/linux/drivers/net/smc-mca.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/smc-mca.c Sun Aug 12 10:51:42 2001 @@ -91,7 +91,7 @@ char *name; }; -static const struct smc_mca_adapters_t smc_mca_adapters[] = { +static struct smc_mca_adapters_t smc_mca_adapters[] __initdata = { { 0x61c8, "SMC Ethercard PLUS Elite/A BNC/AUI (WD8013EP/A)" }, { 0x61c9, "SMC Ethercard PLUS Elite/A UTP/AUI (WD8013WP/A)" }, { 0x6fc0, "WD Ethercard PLUS/A (WD8003E/A or WD8003ET/A)" }, diff -u --recursive --new-file v2.4.8/linux/drivers/net/sungem.c linux/drivers/net/sungem.c --- v2.4.8/linux/drivers/net/sungem.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/net/sungem.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: sungem.c,v 1.18 2001/08/06 13:34:47 davem Exp $ +/* $Id: sungem.c,v 1.19 2001/08/13 14:40:07 davem Exp $ * sungem.c: Sun GEM ethernet driver. * * Copyright (C) 2000, 2001 David S. Miller (davem@redhat.com) @@ -558,7 +558,7 @@ skb = copy_skb; } - skb->csum = ((status & RXDCTRL_TCPCSUM) ^ 0xffff); + skb->csum = ntohs((status & RXDCTRL_TCPCSUM) ^ 0xffff); skb->ip_summed = CHECKSUM_HW; skb->protocol = eth_type_trans(skb, gp->dev); netif_rx(skb); diff -u --recursive --new-file v2.4.8/linux/drivers/net/sunhme.c linux/drivers/net/sunhme.c --- v2.4.8/linux/drivers/net/sunhme.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/net/sunhme.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: sunhme.c,v 1.121 2001/07/27 10:22:57 davem Exp $ +/* $Id: sunhme.c,v 1.122 2001/08/13 14:40:07 davem Exp $ * sunhme.c: Sparc HME/BigMac 10/100baseT half/full duplex auto switching, * auto carrier detecting ethernet driver. Also known as the * "Happy Meal Ethernet" found on SunSwift SBUS cards. @@ -2109,7 +2109,7 @@ } /* This card is _fucking_ hot... */ - skb->csum = (csum ^ 0xffff); + skb->csum = ntohs(csum ^ 0xffff); skb->ip_summed = CHECKSUM_HW; RXD(("len=%d csum=%4x]", len, csum)); diff -u --recursive --new-file v2.4.8/linux/drivers/net/tun.c linux/drivers/net/tun.c --- v2.4.8/linux/drivers/net/tun.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/net/tun.c Sun Aug 12 10:38:48 2001 @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #include #include @@ -327,11 +327,6 @@ return ret; } -static loff_t tun_chr_lseek(struct file * file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static int tun_set_iff(struct file *file, struct ifreq *ifr) { struct tun_struct *tun; @@ -549,7 +544,7 @@ static struct file_operations tun_fops = { owner: THIS_MODULE, - llseek: tun_chr_lseek, + llseek: no_llseek, read: tun_chr_read, write: tun_chr_write, poll: tun_chr_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/Config.in linux/drivers/net/wan/Config.in --- v2.4.8/linux/drivers/net/wan/Config.in Wed Jul 25 17:10:22 2001 +++ linux/drivers/net/wan/Config.in Sun Aug 12 10:38:48 2001 @@ -39,6 +39,10 @@ dep_tristate ' Etinc PCISYNC serial board support (EXPERIMENTAL)' CONFIG_DSCC4 m +# FarSite Communications' cards + + tristate ' FarSync T-Series X.21 (and V.35/V.24) cards' CONFIG_FARSYNC + # # Lan Media's board. Currently 1000, 1200, 5200, 5245 # @@ -101,7 +105,10 @@ fi if [ "$CONFIG_X86" = "y" ]; then - tristate ' SBNI12-xx support' CONFIG_SBNI + tristate ' Granch SBNI12 Leased Line adapter support' CONFIG_SBNI + if [ "$CONFIG_SBNI" != "n" ]; then + bool ' Multiple line feature support' CONFIG_SBNI_MULTILINE + fi fi fi diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/Makefile linux/drivers/net/wan/Makefile --- v2.4.8/linux/drivers/net/wan/Makefile Thu Apr 12 12:11:39 2001 +++ linux/drivers/net/wan/Makefile Sun Aug 12 10:38:48 2001 @@ -33,6 +33,7 @@ obj-$(CONFIG_COMX_PROTO_LAPB) += comx-proto-lapb.o obj-$(CONFIG_COMX_PROTO_FR) += comx-proto-fr.o obj-$(CONFIG_COSA) += syncppp.o cosa.o +obj-$(CONFIG_FARSYNC) += syncppp.o farsync.o obj-$(CONFIG_DSCC4) += dscc4.o obj-$(CONFIG_LANMEDIA) += syncppp.o obj-$(CONFIG_SYNCLINK_SYNCPPP) += syncppp.o diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/comx-hw-comx.c linux/drivers/net/wan/comx-hw-comx.c --- v2.4.8/linux/drivers/net/wan/comx-hw-comx.c Tue May 22 10:23:16 2001 +++ linux/drivers/net/wan/comx-hw-comx.c Wed Aug 15 01:22:15 2001 @@ -1044,7 +1044,7 @@ if (!(page = (char *)__get_free_page(GFP_KERNEL))) { return -ENOMEM; } - if(copy_from_user(page, buffer, count = (min(count, PAGE_SIZE)))) + if(copy_from_user(page, buffer, count = (min(int, count, PAGE_SIZE)))) { count = -EFAULT; goto out; @@ -1182,8 +1182,10 @@ len = sprintf(page, "external\n"); } } else if (strcmp(file->name, FILENAME_FIRMWARE) == 0) { - len = min(FILE_PAGESIZE, min(count, - hw->firmware ? (hw->firmware->len - off) : 0)); + len = min(int, FILE_PAGESIZE, + min(int, count, + hw->firmware ? + (hw->firmware->len - off) : 0)); if (len < 0) { len = 0; } @@ -1203,7 +1205,7 @@ if (count >= len - off) { *eof = 1; } - return(min(count, len - off)); + return min(int, count, len - off); } /* Called on echo comx >boardtype */ diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/comx-hw-locomx.c linux/drivers/net/wan/comx-hw-locomx.c --- v2.4.8/linux/drivers/net/wan/comx-hw-locomx.c Mon Sep 18 15:02:03 2000 +++ linux/drivers/net/wan/comx-hw-locomx.c Wed Aug 15 01:22:15 2001 @@ -324,7 +324,7 @@ if (count >= len - off) { *eof = 1; } - return ( min(count, len - off) ); + return min(int, count, len - off); } static int locomx_write_proc(struct file *file, const char *buffer, @@ -339,7 +339,7 @@ return -ENOMEM; } - copy_from_user(page, buffer, count = min(count, PAGE_SIZE)); + copy_from_user(page, buffer, count = min(unsigned long, count, PAGE_SIZE)); if (*(page + count - 1) == '\n') { *(page + count - 1) = 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/comx-hw-mixcom.c linux/drivers/net/wan/comx-hw-mixcom.c --- v2.4.8/linux/drivers/net/wan/comx-hw-mixcom.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wan/comx-hw-mixcom.c Wed Aug 15 01:22:15 2001 @@ -121,7 +121,7 @@ outsb(dev->base_addr + HSCX_FIFO, - &(hw->sending->data[hw->tx_ptr]), min(to_send, 32)); + &(hw->sending->data[hw->tx_ptr]), min(unsigned int, to_send, 32)); if (to_send <= 32) { hscx_cmd(dev, HSCX_XTF | HSCX_XME); kfree_skb(hw->sending); @@ -696,7 +696,7 @@ } *start = page + off; if (count >= len - off) *eof = 1; - return ( min(count, len - off) ); + return min(int, count, len - off); } @@ -763,7 +763,7 @@ return -ENOMEM; } - copy_from_user(page, buffer, count = min(count, PAGE_SIZE)); + copy_from_user(page, buffer, count = min(unsigned long, count, PAGE_SIZE)); if (*(page + count - 1) == '\n') { *(page + count - 1) = 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/comx-proto-fr.c linux/drivers/net/wan/comx-proto-fr.c --- v2.4.8/linux/drivers/net/wan/comx-proto-fr.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wan/comx-proto-fr.c Wed Aug 15 01:22:15 2001 @@ -634,7 +634,7 @@ *start = page + off; if (count >= len - off) *eof = 1; - return ( min(count, len - off) ); + return min(int, count, len - off); } static int fr_write_proc(struct file *file, const char *buffer, diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/comx-proto-lapb.c linux/drivers/net/wan/comx-proto-lapb.c --- v2.4.8/linux/drivers/net/wan/comx-proto-lapb.c Sat Mar 3 10:55:48 2001 +++ linux/drivers/net/wan/comx-proto-lapb.c Wed Aug 15 01:22:15 2001 @@ -212,7 +212,7 @@ if (count >= len - off) { *eof = 1; } - return ( min(count, len - off) ); + return min(int, count, len - off); } static int comxlapb_write_proc(struct file *file, const char *buffer, diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/comx.c linux/drivers/net/wan/comx.c --- v2.4.8/linux/drivers/net/wan/comx.c Tue May 22 10:23:16 2001 +++ linux/drivers/net/wan/comx.c Wed Aug 15 01:22:15 2001 @@ -151,8 +151,8 @@ int free = (ch->debug_start - ch->debug_end + ch->debug_size) % ch->debug_size; - to_copy = min( free ? free : ch->debug_size, - min (ch->debug_size - ch->debug_end, len) ); + to_copy = min(int, free ? free : ch->debug_size, + min(int, ch->debug_size - ch->debug_end, len)); memcpy(ch->debug_area + ch->debug_end, str, to_copy); str += to_copy; len -= to_copy; @@ -567,7 +567,7 @@ if (count >= len - off) { *eof = 1; } - return( min(count, len - off) ); + return min(int, count, len - off); } @@ -597,7 +597,7 @@ if (count >= len - off) { *eof = 1; } - return( min(count, len - off) ); + return min(int, count, len - off); } diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/comx.h linux/drivers/net/wan/comx.h --- v2.4.8/linux/drivers/net/wan/comx.h Mon Dec 11 13:38:29 2000 +++ linux/drivers/net/wan/comx.h Wed Aug 15 01:22:15 2001 @@ -190,14 +190,6 @@ #endif -#ifndef min -#define min(a,b) ((a) > (b) ? (b) : (a)) -#endif -#ifndef max -#define max(a,b) ((a) > (b) ? (a) : (b)) -#endif - - #define COMX_CHANNEL(dev) ((struct comx_channel*)dev->priv) #define TWIN(dev) (COMX_CHANNEL(dev)->twin) diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/cosa.c linux/drivers/net/wan/cosa.c --- v2.4.8/linux/drivers/net/wan/cosa.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wan/cosa.c Sun Aug 12 10:38:48 2001 @@ -303,7 +303,6 @@ static char *chrdev_setup_rx(struct channel_data *channel, int size); static int chrdev_rx_done(struct channel_data *channel); static int chrdev_tx_done(struct channel_data *channel, int size); -static loff_t cosa_lseek(struct file *file, loff_t offset, int origin); static ssize_t cosa_read(struct file *file, char *buf, size_t count, loff_t *ppos); static ssize_t cosa_write(struct file *file, @@ -319,7 +318,7 @@ static struct file_operations cosa_fops = { owner: THIS_MODULE, - llseek: cosa_lseek, + llseek: no_llseek, read: cosa_read, write: cosa_write, poll: cosa_poll, @@ -780,11 +779,6 @@ { init_MUTEX(&chan->rsem); init_MUTEX(&chan->wsem); -} - -static loff_t cosa_lseek(struct file * file, loff_t offset, int origin) -{ - return -ESPIPE; } static ssize_t cosa_read(struct file *file, diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/cycx_main.c linux/drivers/net/wan/cycx_main.c --- v2.4.8/linux/drivers/net/wan/cycx_main.c Tue May 22 10:23:16 2001 +++ linux/drivers/net/wan/cycx_main.c Wed Aug 15 01:22:15 2001 @@ -111,8 +111,8 @@ fullname, DRV_VERSION, DRV_RELEASE, copyright); /* Verify number of cards and allocate adapter data space */ - ncards = min(ncards, MAX_CARDS); - ncards = max(ncards, 1); + ncards = min(int, ncards, MAX_CARDS); + ncards = max(int, ncards, 1); card_array = kmalloc(sizeof(cycx_t) * ncards, GFP_KERNEL); if (!card_array) goto out; diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/cycx_x25.c linux/drivers/net/wan/cycx_x25.c --- v2.4.8/linux/drivers/net/wan/cycx_x25.c Wed Apr 18 14:40:06 2001 +++ linux/drivers/net/wan/cycx_x25.c Wed Aug 15 01:22:15 2001 @@ -260,13 +260,13 @@ cfg.flags = 0; /* FIXME just reset the 2nd bit */ if (conf->u.x25.hi_pvc) { - card->u.x.hi_pvc = min(conf->u.x25.hi_pvc, 4095); - card->u.x.lo_pvc = min(conf->u.x25.lo_pvc, card->u.x.hi_pvc); + card->u.x.hi_pvc = min(unsigned int, conf->u.x25.hi_pvc, 4095); + card->u.x.lo_pvc = min(unsigned int, conf->u.x25.lo_pvc, card->u.x.hi_pvc); } if (conf->u.x25.hi_svc) { - card->u.x.hi_svc = min(conf->u.x25.hi_svc, 4095); - card->u.x.lo_svc = min(conf->u.x25.lo_svc, card->u.x.hi_svc); + card->u.x.hi_svc = min(unsigned int, conf->u.x25.hi_svc, 4095); + card->u.x.lo_svc = min(unsigned int, conf->u.x25.lo_svc, card->u.x.hi_svc); } if (card->u.x.lo_pvc == 255) @@ -277,25 +277,25 @@ cfg.nvc = card->u.x.hi_svc - card->u.x.lo_svc + 1 + cfg.npvc; if (conf->u.x25.hdlc_window) - cfg.n2win = min(conf->u.x25.hdlc_window, 7); + cfg.n2win = min(unsigned int, conf->u.x25.hdlc_window, 7); if (conf->u.x25.pkt_window) - cfg.n3win = min(conf->u.x25.pkt_window, 7); + cfg.n3win = min(unsigned int, conf->u.x25.pkt_window, 7); if (conf->u.x25.t1) - cfg.t1 = min(conf->u.x25.t1, 30); + cfg.t1 = min(unsigned int, conf->u.x25.t1, 30); if (conf->u.x25.t2) - cfg.t2 = min(conf->u.x25.t2, 30); + cfg.t2 = min(unsigned int, conf->u.x25.t2, 30); if (conf->u.x25.t11_t21) - cfg.t21 = min(conf->u.x25.t11_t21, 30); + cfg.t21 = min(unsigned int, conf->u.x25.t11_t21, 30); if (conf->u.x25.t13_t23) - cfg.t23 = min(conf->u.x25.t13_t23, 30); + cfg.t23 = min(unsigned int, conf->u.x25.t13_t23, 30); if (conf->u.x25.n2) - cfg.n2 = min(conf->u.x25.n2, 30); + cfg.n2 = min(unsigned int, conf->u.x25.n2, 30); /* initialize adapter */ if (x25_configure(card, &cfg)) diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/farsync.c linux/drivers/net/wan/farsync.c --- v2.4.8/linux/drivers/net/wan/farsync.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/net/wan/farsync.c Sun Aug 12 10:38:48 2001 @@ -0,0 +1,1831 @@ +/* + * FarSync X21 driver for Linux (2.4.x kernel version) + * + * Actually sync driver for X.21, V.35 and V.24 on FarSync T-series cards + * + * Copyright (C) 2001 FarSite Communications Ltd. + * www.farsite.co.uk + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + * Author: R.J.Dunlop + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "farsync.h" + + +/* + * Module info + */ +MODULE_AUTHOR("R.J.Dunlop "); +MODULE_DESCRIPTION("FarSync T-Series X21 driver. FarSite Communications Ltd."); + +EXPORT_NO_SYMBOLS; + + +/* Driver configuration and global parameters + * ========================================== + */ + +/* Number of ports (per card) supported + */ +#define FST_MAX_PORTS 4 + + +/* PCI vendor and device IDs + */ +#define FSC_PCI_VENDOR_ID 0x1619 /* FarSite Communications Ltd */ +#define T2P_PCI_DEVICE_ID 0x0400 /* T2P X21 2 port card */ +#define T4P_PCI_DEVICE_ID 0x0440 /* T4P X21 4 port card */ + + +/* Default parameters for the link + */ +#define FST_TX_QUEUE_LEN 100 /* At 8Mbps a longer queue length is + * useful, the syncppp module forces + * this down assuming a slower line I + * guess. + */ +#define FST_MAX_MTU 8000 /* Huge but possible */ +#define FST_DEF_MTU 1500 /* Common sane value */ + +#define FST_TX_TIMEOUT (2*HZ) + + +#ifdef ARPHRD_RAWHDLC +#define ARPHRD_MYTYPE ARPHRD_RAWHDLC /* Raw frames */ +#else +#define ARPHRD_MYTYPE ARPHRD_HDLC /* Cisco-HDLC (keepalives etc) */ +#endif + + +/* Card shared memory layout + * ========================= + */ +#pragma pack(1) + +/* This information is derived in part from the FarSite FarSync Smc.h + * file. Unfortunately various name clashes and the non-portability of the + * bit field declarations in that file have meant that I have chosen to + * recreate the information here. + * + * The SMC (Shared Memory Configuration) has a version number that is + * incremented every time there is a significant change. This number can + * be used to check that we have not got out of step with the firmware + * contained in the .CDE files. + */ +#define SMC_VERSION 11 + +#define FST_MEMSIZE 0x100000 /* Size of card memory (1Mb) */ + +#define SMC_BASE 0x00002000L /* Base offset of the shared memory window main + * configuration structure */ +#define BFM_BASE 0x00010000L /* Base offset of the shared memory window DMA + * buffers */ + +#define LEN_TX_BUFFER 8192 /* Size of packet buffers */ +#define LEN_RX_BUFFER 8192 + +#define LEN_SMALL_TX_BUFFER 256 /* Size of obsolete buffs used for DOS diags */ +#define LEN_SMALL_RX_BUFFER 256 + +#define NUM_TX_BUFFER 2 /* Must be power of 2. Fixed by firmware */ +#define NUM_RX_BUFFER 8 + +/* Interrupt retry time in milliseconds */ +#define INT_RETRY_TIME 2 + + +/* The Am186CH/CC processors support a SmartDMA mode using circular pools + * of buffer descriptors. The structure is almost identical to that used + * in the LANCE Ethernet controllers. Details available as PDF from the + * AMD web site: http://www.amd.com/products/epd/processors/\ + * 2.16bitcont/3.am186cxfa/a21914/21914.pdf + */ +struct txdesc { /* Transmit descriptor */ + volatile u16 ladr; /* Low order address of packet. This is a + * linear address in the Am186 memory space + */ + volatile u8 hadr; /* High order address. Low 4 bits only, high 4 + * bits must be zero + */ + volatile u8 bits; /* Status and config */ + volatile u16 bcnt; /* 2s complement of packet size in low 15 bits. + * Transmit terminal count interrupt enable in + * top bit. + */ + u16 unused; /* Not used in Tx */ +}; + +struct rxdesc { /* Receive descriptor */ + volatile u16 ladr; /* Low order address of packet */ + volatile u8 hadr; /* High order address */ + volatile u8 bits; /* Status and config */ + volatile u16 bcnt; /* 2s complement of buffer size in low 15 bits. + * Receive terminal count interrupt enable in + * top bit. + */ + volatile u16 mcnt; /* Message byte count (15 bits) */ +}; + +/* Convert a length into the 15 bit 2's complement */ +/* #define cnv_bcnt(len) (( ~(len) + 1 ) & 0x7FFF ) */ +/* Since we need to set the high bit to enable the completion interrupt this + * can be made a lot simpler + */ +#define cnv_bcnt(len) (-(len)) + +/* Status and config bits for the above */ +#define DMA_OWN 0x80 /* SmartDMA owns the descriptor */ +#define TX_STP 0x02 /* Tx: start of packet */ +#define TX_ENP 0x01 /* Tx: end of packet */ +#define RX_ERR 0x40 /* Rx: error (OR of next 4 bits) */ +#define RX_FRAM 0x20 /* Rx: framing error */ +#define RX_OFLO 0x10 /* Rx: overflow error */ +#define RX_CRC 0x08 /* Rx: CRC error */ +#define RX_HBUF 0x04 /* Rx: buffer error */ +#define RX_STP 0x02 /* Rx: start of packet */ +#define RX_ENP 0x01 /* Rx: end of packet */ + + +/* Interrupts from the card are caused by various events and these are presented + * in a circular buffer as several events may be processed on one physical int + */ +#define MAX_CIRBUFF 32 + +struct cirbuff { + u8 rdindex; /* read, then increment and wrap */ + u8 wrindex; /* write, then increment and wrap */ + u8 evntbuff[MAX_CIRBUFF]; +}; + +/* Interrupt event codes. + * Where appropriate the two low order bits indicate the port number + */ +#define CTLA_CHG 0x18 /* Control signal changed */ +#define CTLB_CHG 0x19 +#define CTLC_CHG 0x1A +#define CTLD_CHG 0x1B + +#define INIT_CPLT 0x20 /* Initialisation complete */ +#define INIT_FAIL 0x21 /* Initialisation failed */ + +#define ABTA_SENT 0x24 /* Abort sent */ +#define ABTB_SENT 0x25 +#define ABTC_SENT 0x26 +#define ABTD_SENT 0x27 + +#define TXA_UNDF 0x28 /* Transmission underflow */ +#define TXB_UNDF 0x29 +#define TXC_UNDF 0x2A +#define TXD_UNDF 0x2B + + +/* Port physical configuration. See farsync.h for field values */ +struct port_cfg { + u16 lineInterface; /* Physical interface type */ + u8 x25op; /* Unused at present */ + u8 internalClock; /* 1 => internal clock, 0 => external */ + u32 lineSpeed; /* Speed in bps */ +}; + +/* Finally sling all the above together into the shared memory structure. + * Sorry it's a hodge podge of arrays, structures and unused bits, it's been + * evolving under NT for some time so I guess we're stuck with it. + * The structure starts at offset SMC_BASE. + * See farsync.h for some field values. + */ +struct fst_shared { + /* DMA descriptor rings */ + struct rxdesc rxDescrRing[FST_MAX_PORTS][NUM_RX_BUFFER]; + struct txdesc txDescrRing[FST_MAX_PORTS][NUM_TX_BUFFER]; + + /* Obsolete small buffers */ + u8 smallRxBuffer[FST_MAX_PORTS][NUM_RX_BUFFER][LEN_SMALL_RX_BUFFER]; + u8 smallTxBuffer[FST_MAX_PORTS][NUM_TX_BUFFER][LEN_SMALL_TX_BUFFER]; + + u8 taskStatus; /* 0x00 => initialising, 0x01 => running, + * 0xFF => halted + */ + + u8 interruptHandshake; /* Set to 0x01 by adapter to signal interrupt, + * set to 0xEE by host to acknowledge interrupt + */ + + u16 smcVersion; /* Must match SMC_VERSION */ + + u32 smcFirmwareVersion; /* 0xIIVVRRBB where II = product ID, VV = major + * version, RR = revision and BB = build + */ + + u16 txa_done; /* Obsolete completion flags */ + u16 rxa_done; + u16 txb_done; + u16 rxb_done; + u16 txc_done; + u16 rxc_done; + u16 txd_done; + u16 rxd_done; + + u16 mailbox[4]; /* Diagnostics mailbox. Not used */ + + struct cirbuff interruptEvent; /* interrupt causes */ + + u32 v24IpSts[FST_MAX_PORTS]; /* V.24 control input status */ + u32 v24OpSts[FST_MAX_PORTS]; /* V.24 control output status */ + + struct port_cfg portConfig[FST_MAX_PORTS]; + + u16 clockStatus[FST_MAX_PORTS]; /* lsb: 0=> present, 1=> absent */ + + u16 cableStatus; /* lsb: 0=> present, 1=> absent */ + + u16 txDescrIndex[FST_MAX_PORTS]; /* transmit descriptor ring index */ + u16 rxDescrIndex[FST_MAX_PORTS]; /* receive descriptor ring index */ + + u16 portMailbox[FST_MAX_PORTS][2]; /* command, modifier */ + u16 cardMailbox[4]; /* Not used */ + + /* Number of times that card thinks the host has + * missed an interrupt by not acknowledging + * within 2mS (I guess NT has problems) + */ + u32 interruptRetryCount; + + /* Driver private data used as an ID. We'll not + * use this on Linux I'd rather keep such things + * in main memory rather than on the PCI bus + */ + u32 portHandle[FST_MAX_PORTS]; + + /* Count of Tx underflows for stats */ + u32 transmitBufferUnderflow[FST_MAX_PORTS]; + + /* Debounced V.24 control input status */ + u32 v24DebouncedSts[FST_MAX_PORTS]; + + /* Adapter debounce timers. Don't touch */ + u32 ctsTimer[FST_MAX_PORTS]; + u32 ctsTimerRun[FST_MAX_PORTS]; + u32 dcdTimer[FST_MAX_PORTS]; + u32 dcdTimerRun[FST_MAX_PORTS]; + + u32 numberOfPorts; /* Number of ports detected at startup */ + + u16 _reserved[64]; + + u16 cardMode; /* Bit-mask to enable features: + * Bit 0: 1 enables LED identify mode + */ + + u16 portScheduleOffset; + + u32 endOfSmcSignature; /* endOfSmcSignature MUST be the last member of + * the structure and marks the end of the shared + * memory. Adapter code initializes its value as + * END_SIG. + */ +}; + +/* endOfSmcSignature value */ +#define END_SIG 0x12345678 + +/* Mailbox values. (portMailbox) */ +#define NOP 0 /* No operation */ +#define ACK 1 /* Positive acknowledgement to PC driver */ +#define NAK 2 /* Negative acknowledgement to PC driver */ +#define STARTPORT 3 /* Start an HDLC port */ +#define STOPPORT 4 /* Stop an HDLC port */ +#define ABORTTX 5 /* Abort the transmitter for a port */ +#define SETV24O 6 /* Set V24 outputs */ + + +/* Larger buffers are positioned in memory at offset BFM_BASE */ +struct buf_window { + u8 txBuffer[FST_MAX_PORTS][NUM_TX_BUFFER][LEN_TX_BUFFER]; + u8 rxBuffer[FST_MAX_PORTS][NUM_RX_BUFFER][LEN_RX_BUFFER]; +}; + +/* Calculate offset of a buffer object within the shared memory window */ +#define BUF_OFFSET(X) ((unsigned int)&(((struct buf_window *)BFM_BASE)->X)) + +#pragma pack() + + +/* Device driver private information + * ================================= + */ +/* Per port (line or channel) information + */ +struct fst_port_info { + void *if_ptr; /* Some drivers describe this as a + * general purpose pointer. However if + * using syncPPP it has a very specific + * purpose: it must be the first item in + * the structure pointed to by dev->priv + * and must in turn point to the + * associated ppp_device structure. + */ + struct fst_card_info *card; /* Card we're associated with */ + int index; /* Port index on the card */ + int proto; /* Protocol we are running */ + int hwif; /* Line hardware (lineInterface copy) */ + int run; /* Port is running */ + int rxpos; /* Next Rx buffer to use */ + int txpos; /* Next Tx buffer to use */ + int txipos; /* Next Tx buffer to check for free */ + int txcnt; /* Count of Tx buffers in use */ + struct net_device *dev; /* Kernel network device entry */ + struct net_device_stats stats; /* Standard statistics */ + struct ppp_device pppdev; /* Link to syncPPP */ +}; + +/* Per card information + */ +struct fst_card_info { + char *mem; /* Card memory mapped to kernel space */ + char *ctlmem; /* Control memory for PCI cards */ + unsigned int phys_mem; /* Physical memory window address */ + unsigned int phys_ctlmem; /* Physical control memory address */ + unsigned int irq; /* Interrupt request line number */ + unsigned int nports; /* Number of serial ports */ + unsigned int type; /* Type index of card */ + unsigned int state; /* State of card */ + spinlock_t card_lock; /* Lock for SMP access */ + unsigned short pci_conf; /* PCI card config in I/O space */ + /* Per port info */ + struct fst_port_info ports[ FST_MAX_PORTS ]; +}; + + +/* + * Shared memory window access macros + * + * We have a nice memory based structure above, which could be directly + * mapped on i386 but might not work on other architectures unless we use + * the readb,w,l and writeb,w,l macros. Unfortunately these macros take + * physical offsets so we have to convert. The only saving grace is that + * this should all collapse back to a simple indirection eventually. + */ +#define WIN_OFFSET(X) ((long)&(((struct fst_shared *)SMC_BASE)->X)) + +#define FST_RDB(C,E) readb ((C)->mem + WIN_OFFSET(E)) +#define FST_RDW(C,E) readw ((C)->mem + WIN_OFFSET(E)) +#define FST_RDL(C,E) readl ((C)->mem + WIN_OFFSET(E)) + +#define FST_WRB(C,E,B) writeb ((B), (C)->mem + WIN_OFFSET(E)) +#define FST_WRW(C,E,W) writew ((W), (C)->mem + WIN_OFFSET(E)) +#define FST_WRL(C,E,L) writel ((L), (C)->mem + WIN_OFFSET(E)) + + +/* + * Debug support + */ +#if FST_DEBUG + +static int fst_debug_mask = { FST_DEBUG }; + +/* Most common debug activity is to print something if the corresponding bit + * is set in the debug mask. Note: this uses a non-ANSI extension in GCC to + * support variable numbers of macro parameters. The inverted if prevents us + * eating someone else's else clause. + */ +#define dbg(F,fmt,A...) if ( ! ( fst_debug_mask & (F))) \ + ; \ + else \ + printk ( KERN_DEBUG FST_NAME ": " fmt, ## A ) + +#else +# define dbg(X...) /* NOP */ +#endif + + +/* Printing short cuts + */ +#define printk_err(fmt,A...) printk ( KERN_ERR FST_NAME ": " fmt, ## A ) +#define printk_warn(fmt,A...) printk ( KERN_WARNING FST_NAME ": " fmt, ## A ) +#define printk_info(fmt,A...) printk ( KERN_INFO FST_NAME ": " fmt, ## A ) + + +/* + * PCI ID lookup table + */ +static struct pci_device_id fst_pci_dev_id[] __devinitdata = { + { FSC_PCI_VENDOR_ID, T2P_PCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + FST_TYPE_T2P }, + { FSC_PCI_VENDOR_ID, T4P_PCI_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + FST_TYPE_T4P }, + { 0, } /* End */ +}; + +MODULE_DEVICE_TABLE ( pci, fst_pci_dev_id ); + + +/* Card control functions + * ====================== + */ +/* Place the processor in reset state + * + * Used to be a simple write to card control space but a glitch in the latest + * AMD Am186CH processor means that we now have to do it by asserting and de- + * asserting the PLX chip PCI Adapter Software Reset. Bit 30 in CNTRL register + * at offset 0x50. + */ +static inline void +fst_cpureset ( struct fst_card_info *card ) +{ + unsigned int regval; + + regval = inl ( card->pci_conf + 0x50 ); + + outl ( regval | 0x40000000, card->pci_conf + 0x50 ); + outl ( regval & ~0x40000000, card->pci_conf + 0x50 ); +} + +/* Release the processor from reset + */ +static inline void +fst_cpurelease ( struct fst_card_info *card ) +{ + (void) readb ( card->ctlmem ); +} + +/* Clear the cards interrupt flag + */ +static inline void +fst_clear_intr ( struct fst_card_info *card ) +{ + /* Poke the appropriate PLX chip register (same as enabling interrupts) + */ + outw ( 0x0543, card->pci_conf + 0x4C ); +} + +/* Disable card interrupts + */ +static inline void +fst_disable_intr ( struct fst_card_info *card ) +{ + outw ( 0x0000, card->pci_conf + 0x4C ); +} + + +/* Issue a Mailbox command for a port. + * Note we issue them on a fire and forget basis, not expecting to see an + * error and not waiting for completion. + */ +static void +fst_issue_cmd ( struct fst_port_info *port, unsigned short cmd ) +{ + struct fst_card_info *card; + unsigned short mbval; + unsigned long flags; + int safety; + + card = port->card; + spin_lock_irqsave ( &card->card_lock, flags ); + mbval = FST_RDW ( card, portMailbox[port->index][0]); + + safety = 0; + /* Wait for any previous command to complete */ + while ( mbval > NAK ) + { + spin_unlock_irqrestore ( &card->card_lock, flags ); + schedule_timeout ( 1 ); + spin_lock_irqsave ( &card->card_lock, flags ); + + if ( ++safety > 1000 ) + { + printk_err ("Mailbox safety timeout\n"); + break; + } + + mbval = FST_RDW ( card, portMailbox[port->index][0]); + } + if ( safety > 0 ) + { + dbg ( DBG_CMD,"Mailbox clear after %d jiffies\n", safety ); + } + if ( mbval == NAK ) + { + dbg ( DBG_CMD,"issue_cmd: previous command was NAK'd\n"); + } + + FST_WRW ( card, portMailbox[port->index][0], cmd ); + + if ( cmd == ABORTTX || cmd == STARTPORT ) + { + port->txpos = 0; + port->txipos = 0; + port->txcnt = 0; + } + + spin_unlock_irqrestore ( &card->card_lock, flags ); +} + + +/* Port output signals control + */ +static inline void +fst_op_raise ( struct fst_port_info *port, unsigned int outputs ) +{ + outputs |= FST_RDL ( port->card, v24OpSts[port->index]); + FST_WRL ( port->card, v24OpSts[port->index], outputs ); + + if ( port->run ) + fst_issue_cmd ( port, SETV24O ); +} + +static inline void +fst_op_lower ( struct fst_port_info *port, unsigned int outputs ) +{ + outputs = ~outputs & FST_RDL ( port->card, v24OpSts[port->index]); + FST_WRL ( port->card, v24OpSts[port->index], outputs ); + + if ( port->run ) + fst_issue_cmd ( port, SETV24O ); +} + + +/* + * Setup port Rx buffers + */ +static void +fst_rx_config ( struct fst_port_info *port ) +{ + int i; + int pi; + unsigned int offset; + unsigned long flags; + struct fst_card_info *card; + + pi = port->index; + card = port->card; + spin_lock_irqsave ( &card->card_lock, flags ); + for ( i = 0 ; i < NUM_RX_BUFFER ; i++ ) + { + offset = BUF_OFFSET ( rxBuffer[pi][i][0]); + + FST_WRW ( card, rxDescrRing[pi][i].ladr, (u16) offset ); + FST_WRB ( card, rxDescrRing[pi][i].hadr, (u8)( offset >> 16 )); + FST_WRW ( card, rxDescrRing[pi][i].bcnt, + cnv_bcnt ( LEN_RX_BUFFER )); + FST_WRW ( card, rxDescrRing[pi][i].mcnt, 0 ); + FST_WRB ( card, rxDescrRing[pi][i].bits, DMA_OWN ); + } + port->rxpos = 0; + spin_unlock_irqrestore ( &card->card_lock, flags ); +} + + +/* + * Setup port Tx buffers + */ +static void +fst_tx_config ( struct fst_port_info *port ) +{ + int i; + int pi; + unsigned int offset; + unsigned long flags; + struct fst_card_info *card; + + pi = port->index; + card = port->card; + spin_lock_irqsave ( &card->card_lock, flags ); + for ( i = 0 ; i < NUM_TX_BUFFER ; i++ ) + { + offset = BUF_OFFSET ( txBuffer[pi][i][0]); + + FST_WRW ( card, txDescrRing[pi][i].ladr, (u16) offset ); + FST_WRB ( card, txDescrRing[pi][i].hadr, (u8)( offset >> 16 )); + FST_WRW ( card, txDescrRing[pi][i].bcnt, 0 ); + FST_WRB ( card, txDescrRing[pi][i].bits, 0 ); + } + port->txpos = 0; + port->txipos = 0; + port->txcnt = 0; + spin_unlock_irqrestore ( &card->card_lock, flags ); +} + + +/* Control signal change interrupt event + */ +static void +fst_intr_ctlchg ( struct fst_card_info *card, struct fst_port_info *port ) +{ + int signals; + + signals = FST_RDL ( card, v24DebouncedSts[port->index]); + + if ( signals & (( port->hwif == X21 ) ? IPSTS_INDICATE : IPSTS_DCD )) + { + if ( ! netif_carrier_ok ( port->dev )) + { + dbg ( DBG_INTR,"DCD active\n"); + + /* Poke sPPP to renegotiate */ + if ( port->proto == FST_HDLC || port->proto == FST_PPP ) + { + sppp_reopen ( port->dev ); + } + + netif_carrier_on ( port->dev ); + } + } + else + { + if ( netif_carrier_ok ( port->dev )) + { + dbg ( DBG_INTR,"DCD lost\n"); + netif_carrier_off ( port->dev ); + } + } +} + + +/* Rx complete interrupt + */ +static void +fst_intr_rx ( struct fst_card_info *card, struct fst_port_info *port ) +{ + unsigned char dmabits; + int pi; + int rxp; + unsigned short len; + struct sk_buff *skb; + int i; + + + /* Check we have a buffer to process */ + pi = port->index; + rxp = port->rxpos; + dmabits = FST_RDB ( card, rxDescrRing[pi][rxp].bits ); + if ( dmabits & DMA_OWN ) + { + dbg ( DBG_RX | DBG_INTR,"intr_rx: No buffer port %d pos %d\n", + pi, rxp ); + return; + } + + /* Get buffer length */ + len = FST_RDW ( card, rxDescrRing[pi][rxp].mcnt ); + /* Discard the CRC */ + len -= 2; + + /* Check buffer length and for other errors. We insist on one packet + * in one buffer. This simplifies things greatly and since we've + * allocated 8K it shouldn't be a real world limitation + */ + dbg ( DBG_RX,"intr_rx: %d,%d: flags %x len %d\n", pi, rxp, dmabits, + len ); + if ( dmabits != ( RX_STP | RX_ENP ) || len > LEN_RX_BUFFER - 2 ) + { + port->stats.rx_errors++; + + /* Update error stats and discard buffer */ + if ( dmabits & RX_OFLO ) + { + port->stats.rx_fifo_errors++; + } + if ( dmabits & RX_CRC ) + { + port->stats.rx_crc_errors++; + } + if ( dmabits & RX_FRAM ) + { + port->stats.rx_frame_errors++; + } + if ( dmabits == ( RX_STP | RX_ENP )) + { + port->stats.rx_length_errors++; + } + + /* Discard buffer descriptors until we see the end of packet + * marker + */ + i = 0; + while (( dmabits & ( DMA_OWN | RX_ENP )) == 0 ) + { + FST_WRB ( card, rxDescrRing[pi][rxp].bits, DMA_OWN ); + if ( ++rxp >= NUM_RX_BUFFER ) + rxp = 0; + if ( ++i > NUM_RX_BUFFER ) + { + dbg ( DBG_ASS,"intr_rx: Discarding more bufs" + " than we have\n"); + break; + } + dmabits = FST_RDB ( card, rxDescrRing[pi][rxp].bits ); + } + + /* Discard the terminal buffer */ + if ( ! ( dmabits & DMA_OWN )) + { + FST_WRB ( card, rxDescrRing[pi][rxp].bits, DMA_OWN ); + if ( ++rxp >= NUM_RX_BUFFER ) + rxp = 0; + } + port->rxpos = rxp; + return; + } + + /* Allocate SKB */ + if (( skb = dev_alloc_skb ( len )) == NULL ) + { + dbg ( DBG_RX,"intr_rx: can't allocate buffer\n"); + + port->stats.rx_dropped++; + + /* Return descriptor to card */ + FST_WRB ( card, rxDescrRing[pi][rxp].bits, DMA_OWN ); + + if ( ++rxp >= NUM_RX_BUFFER ) + port->rxpos = 0; + else + port->rxpos = rxp; + return; + } + + memcpy_fromio ( skb_put ( skb, len ), + card->mem + BUF_OFFSET ( rxBuffer[pi][rxp][0]), + len ); + + /* Reset buffer descriptor */ + FST_WRB ( card, rxDescrRing[pi][rxp].bits, DMA_OWN ); + if ( ++rxp >= NUM_RX_BUFFER ) + port->rxpos = 0; + else + port->rxpos = rxp; + + /* Update stats */ + port->stats.rx_packets++; + port->stats.rx_bytes += len; + + /* Push upstream */ + if ( port->proto == FST_HDLC || port->proto == FST_PPP ) + { + /* Mark for further processing by sPPP module */ + skb->protocol = htons ( ETH_P_WAN_PPP ); + } + else + { + /* DEC customer specific protocol (since nothing defined for + * marking raw data), at least one other driver uses this value + * for this purpose. + */ + skb->protocol = htons ( ETH_P_CUST ); + skb->pkt_type = PACKET_HOST; + } + skb->mac.raw = skb->data; + skb->dev = port->dev; + netif_rx ( skb ); + + port->dev->last_rx = jiffies; +} + + +/* + * The interrupt service routine + * Dev_id is our fst_card_info pointer + */ +static void +fst_intr ( int irq, void *dev_id, struct pt_regs *regs ) +{ + struct fst_card_info *card; + struct fst_port_info *port; + int rdidx; /* Event buffer indices */ + int wridx; + int event; /* Actual event for processing */ + int pi; + + if (( card = dev_id ) == NULL ) + { + dbg ( DBG_INTR,"intr: spurious %d\n", irq ); + return; + } + + dbg ( DBG_INTR,"intr: %d %p\n", irq, card ); + + spin_lock ( &card->card_lock ); + + /* Clear and reprime the interrupt source */ + fst_clear_intr ( card ); + + /* Set the software acknowledge */ + FST_WRB ( card, interruptHandshake, 0xEE ); + + /* Drain the event queue */ + rdidx = FST_RDB ( card, interruptEvent.rdindex ); + wridx = FST_RDB ( card, interruptEvent.wrindex ); + while ( rdidx != wridx ) + { + event = FST_RDB ( card, interruptEvent.evntbuff[rdidx]); + + port = &card->ports[event & 0x03]; + + dbg ( DBG_INTR,"intr: %x\n", event ); + + switch ( event ) + { + case CTLA_CHG: + case CTLB_CHG: + case CTLC_CHG: + case CTLD_CHG: + if ( port->run && port->dev != NULL ) + fst_intr_ctlchg ( card, port ); + break; + + case ABTA_SENT: + case ABTB_SENT: + case ABTC_SENT: + case ABTD_SENT: + dbg ( DBG_TX,"Abort complete port %d\n", event & 0x03 ); + break; + + case TXA_UNDF: + case TXB_UNDF: + case TXC_UNDF: + case TXD_UNDF: + /* Difficult to see how we'd get this given that we + * always load up the entire packet for DMA. + */ + dbg ( DBG_TX,"Tx underflow port %d\n", event & 0x03 ); + + port->stats.tx_errors++; + port->stats.tx_fifo_errors++; + break; + + case INIT_CPLT: + dbg ( DBG_INIT,"Card init OK intr\n"); + break; + + case INIT_FAIL: + dbg ( DBG_INIT,"Card init FAILED intr\n"); + card->state = FST_IFAILED; + break; + + default: + printk_err ("intr: unknown card event code. ignored\n"); + break; + } + + /* Bump and wrap the index */ + if ( ++rdidx >= MAX_CIRBUFF ) + rdidx = 0; + } + FST_WRB ( card, interruptEvent.rdindex, rdidx ); + + for ( pi = 0, port = card->ports ; pi < card->nports ; pi++, port++ ) + { + if ( port->dev == NULL || ! port->run ) + continue; + + /* Check for rx completions */ + while ( ! ( FST_RDB ( card, rxDescrRing[pi][port->rxpos].bits ) + & DMA_OWN )) + { + fst_intr_rx ( card, port ); + } + + /* Check for Tx completions */ + while ( port->txcnt > 0 && ! ( FST_RDB ( card, + txDescrRing[pi][port->txipos].bits ) & DMA_OWN )) + { + --port->txcnt; + if ( ++port->txipos >= NUM_TX_BUFFER ) + port->txipos = 0; + netif_wake_queue ( port->dev ); + } + } + + spin_unlock ( &card->card_lock ); +} + + +/* Check that the shared memory configuration is one that we can handle + * and that some basic parameters are correct + */ +static void +check_started_ok ( struct fst_card_info *card ) +{ + int i; + + /* Check structure version and end marker */ + if ( FST_RDW ( card, smcVersion ) != SMC_VERSION ) + { + printk_err ("Bad shared memory version %d expected %d\n", + FST_RDW ( card, smcVersion ), SMC_VERSION ); + card->state = FST_BADVERSION; + return; + } + if ( FST_RDL ( card, endOfSmcSignature ) != END_SIG ) + { + printk_err ("Missing shared memory signature\n"); + card->state = FST_BADVERSION; + return; + } + /* Firmware status flag, 0x00 = initialising, 0x01 = OK, 0xFF = fail */ + if (( i = FST_RDB ( card, taskStatus )) == 0x01 ) + { + card->state = FST_RUNNING; + } + else if ( i == 0xFF ) + { + printk_err ("Firmware initialisation failed. Card halted\n"); + card->state = FST_HALTED; + return; + } + else if ( i != 0x00 ) + { + printk_err ("Unknown firmware status 0x%x\n", i ); + card->state = FST_HALTED; + return; + } + + /* Finally check the number of ports reported by firmware against the + * number we assumed at card detection. Should never happen with + * existing firmware etc so we just report it for the moment. + */ + if ( FST_RDL ( card, numberOfPorts ) != card->nports ) + { + printk_warn ("Port count mismatch." + " Firmware thinks %d we say %d\n", + FST_RDL ( card, numberOfPorts ), card->nports ); + } +} + + +static int +fst_change_mtu ( struct net_device *dev, int new_mtu ) +{ + if ( new_mtu < 128 || new_mtu > FST_MAX_MTU ) + return -EINVAL; + dev->mtu = new_mtu; + return 0; +} + + +/* Sooner or later you can't avoid a forward declaration */ +static int fst_ioctl ( struct net_device *dev, struct ifreq *ifr, int cmd ); + +static int +switch_proto ( struct fst_port_info *port, int new_proto ) +{ + int err; + int orig_mtu; + struct net_device *dev; + + dev = port->dev; + + /* Turn off sPPP module ? */ + if (( new_proto != FST_HDLC && new_proto != FST_PPP ) + && ( port->proto == FST_HDLC || port->proto == FST_PPP )) + { + sppp_close ( port->pppdev.dev ); + sppp_detach ( port->pppdev.dev ); + + /* Reset some fields overwritten by sPPP */ + dev->hard_header = NULL; + dev->rebuild_header = NULL; + dev->tx_queue_len = FST_TX_QUEUE_LEN; + dev->type = ARPHRD_MYTYPE; + dev->addr_len = 0; + dev->hard_header_len = 0; + dev->do_ioctl = fst_ioctl; + dev->change_mtu = fst_change_mtu; + dev->flags = IFF_POINTOPOINT|IFF_NOARP; + + return 0; + } + + /* Turn on sPPP ? */ + if (( new_proto == FST_HDLC || new_proto == FST_PPP ) + && ( port->proto != FST_HDLC && port->proto != FST_PPP )) + { + orig_mtu = dev->mtu; + + /* Attach to sync PPP module */ + port->pppdev.dev = dev; + sppp_attach ( &port->pppdev ); + + if ( orig_mtu < dev->mtu ) + dev->change_mtu ( dev, orig_mtu ); + + /* Claw back the ioctl routine. We promise to be good and call + * the sync PPP routines once we've eliminated our functions. + */ + dev->do_ioctl = fst_ioctl; + + /* Set the mode */ + if ( new_proto == FST_HDLC ) + { + err = sppp_do_ioctl ( port->pppdev.dev, NULL, + SPPPIOCCISCO ); + } + else + { + err = sppp_do_ioctl ( port->pppdev.dev, NULL, + SPPPIOCPPP ); + } + + /* Open the device */ + if ( err == 0 ) + { + (void) sppp_open ( port->dev ); + } + + return err; + } + + /* Switch sPPP mode to that desired */ + err = 0; + if ( new_proto == FST_HDLC && port->pppdev.dev != NULL ) + { + err = sppp_do_ioctl ( port->pppdev.dev, NULL, SPPPIOCCISCO ); + } + else if ( new_proto == FST_PPP && port->pppdev.dev != NULL ) + { + err = sppp_do_ioctl ( port->pppdev.dev, NULL, SPPPIOCPPP ); + } + + /* Anything else is switching from one raw mode to another which is + * basically a NOP + */ + + return err; +} + + +static int +set_conf_from_info ( struct fst_card_info *card, struct fst_port_info *port, + struct fstioc_info *info ) +{ + int err; + + /* Set things according to the user set valid flags */ + err = 0; + if ( info->valid & FSTVAL_PROTO ) + { + if ( port->proto != info->proto ) + { + err = switch_proto ( port, info->proto ); + if ( err == 0 ) + port->proto = info->proto; + } + } + if ( info->valid & FSTVAL_CABLE ) + { + FST_WRB ( card, portConfig[port->index].lineInterface, + info->lineInterface ); + port->hwif = info->lineInterface; + } + if ( info->valid & FSTVAL_SPEED ) + { + FST_WRL ( card, portConfig[port->index].lineSpeed, + info->lineSpeed ); + FST_WRB ( card, portConfig[port->index].internalClock, + info->internalClock ); + } + if ( info->valid & FSTVAL_MODE ) + { + FST_WRW ( card, cardMode, info->cardMode ); + } +#if FST_DEBUG + if ( info->valid & FSTVAL_DEBUG ) + { + fst_debug_mask = info->debug; + } +#endif + + return err; +} + +static void +gather_conf_info ( struct fst_card_info *card, struct fst_port_info *port, + struct fstioc_info *info ) +{ + int i; + + memset ( info, 0, sizeof ( struct fstioc_info )); + + i = port->index; + info->nports = card->nports; + info->type = card->type; + info->state = card->state; + info->proto = port->proto; + info->index = i; +#if FST_DEBUG + info->debug = fst_debug_mask; +#endif + + /* Only mark information as valid if card is running. + * Copy the data anyway in case it is useful for diagnostics + */ + info->valid + = (( card->state == FST_RUNNING ) ? FSTVAL_ALL : FSTVAL_CARD ) +#if FST_DEBUG + | FSTVAL_DEBUG +#endif + ; + + info->lineInterface = FST_RDW ( card, portConfig[i].lineInterface ); + info->internalClock = FST_RDB ( card, portConfig[i].internalClock ); + info->lineSpeed = FST_RDL ( card, portConfig[i].lineSpeed ); + info->v24IpSts = FST_RDL ( card, v24IpSts[i] ); + info->v24OpSts = FST_RDL ( card, v24OpSts[i] ); + info->clockStatus = FST_RDW ( card, clockStatus[i] ); + info->cableStatus = FST_RDW ( card, cableStatus ); + info->cardMode = FST_RDW ( card, cardMode ); + info->smcFirmwareVersion = FST_RDL ( card, smcFirmwareVersion ); +} + + +static int +fst_ioctl ( struct net_device *dev, struct ifreq *ifr, int cmd ) +{ + struct fst_card_info *card; + struct fst_port_info *port; + struct fstioc_write wrthdr; + struct fstioc_info info; + unsigned long flags; + + dbg ( DBG_IOCTL,"ioctl: %x, %p\n", cmd, ifr->ifr_data ); + + port = dev->priv; + card = port->card; + + if ( !capable ( CAP_NET_ADMIN )) + return -EPERM; + + switch ( cmd ) + { + case FSTCPURESET: + fst_cpureset ( card ); + card->state = FST_RESET; + return 0; + + case FSTCPURELEASE: + fst_cpurelease ( card ); + card->state = FST_STARTING; + return 0; + + case FSTWRITE: /* Code write (download) */ + + /* First copy in the header with the length and offset of data + * to write + */ + if ( ifr->ifr_data == NULL ) + { + return -EINVAL; + } + if ( copy_from_user ( &wrthdr, ifr->ifr_data, + sizeof ( struct fstioc_write ))) + { + return -EFAULT; + } + + /* Sanity check the parameters. We don't support partial writes + * when going over the top + */ + if ( wrthdr.size + wrthdr.offset > FST_MEMSIZE ) + { + return -ENXIO; + } + + /* Now copy the data to the card. + * This will probably break on some architectures. + * I'll fix it when I have something to test on. + */ + if ( copy_from_user ( card->mem + wrthdr.offset, + ifr->ifr_data + sizeof ( struct fstioc_write ), + wrthdr.size )) + { + return -EFAULT; + } + + /* Writes to the memory of a card in the reset state constitute + * a download + */ + if ( card->state == FST_RESET ) + { + card->state = FST_DOWNLOAD; + } + return 0; + + case FSTGETCONF: + + /* If card has just been started check the shared memory config + * version and marker + */ + if ( card->state == FST_STARTING ) + { + check_started_ok ( card ); + + /* If everything checked out enable card interrupts */ + if ( card->state == FST_RUNNING ) + { + spin_lock_irqsave ( &card->card_lock, flags ); + fst_clear_intr ( card ); + FST_WRB ( card, interruptHandshake, 0xEE ); + spin_unlock_irqrestore ( &card->card_lock, + flags ); + } + } + + if ( ifr->ifr_data == NULL ) + { + return -EINVAL; + } + + gather_conf_info ( card, port, &info ); + + if ( copy_to_user ( ifr->ifr_data, &info, sizeof ( info ))) + { + return -EFAULT; + } + return 0; + + case FSTSETCONF: + + if ( copy_from_user ( &info, ifr->ifr_data, sizeof ( info ))) + { + return -EFAULT; + } + + return set_conf_from_info ( card, port, &info ); + + default: + /* Not one of ours. Pass it through to sPPP package */ + if ( port->proto == FST_HDLC || port->proto == FST_PPP ) + return sppp_do_ioctl ( dev, ifr, cmd ); + else + return -EINVAL; + } +} + + +static void +fst_openport ( struct fst_port_info *port ) +{ + int signals; + + /* Only init things if card is actually running. This allows open to + * succeed for downloads etc. + */ + if ( port->card->state == FST_RUNNING ) + { + if ( port->run ) + { + dbg ( DBG_OPEN,"open: found port already running\n"); + + fst_issue_cmd ( port, STOPPORT ); + port->run = 0; + } + + fst_rx_config ( port ); + fst_tx_config ( port ); + fst_op_raise ( port, OPSTS_RTS | OPSTS_DTR ); + + fst_issue_cmd ( port, STARTPORT ); + port->run = 1; + + signals = FST_RDL ( port->card, v24DebouncedSts[port->index]); + if ( signals & (( port->hwif == X21 ) ? IPSTS_INDICATE + : IPSTS_DCD )) + netif_carrier_on ( port->dev ); + else + netif_carrier_off ( port->dev ); + } +} + +static void +fst_closeport ( struct fst_port_info *port ) +{ + if ( port->card->state == FST_RUNNING ) + { + if ( port->run ) + { + port->run = 0; + fst_op_lower ( port, OPSTS_RTS | OPSTS_DTR ); + + fst_issue_cmd ( port, STOPPORT ); + } + else + { + dbg ( DBG_OPEN,"close: port not running\n"); + } + } +} + + +static int +fst_open ( struct net_device *dev ) +{ + struct fst_card_info *card; + struct fst_port_info *port; + int orig_mtu; + int err; + + MOD_INC_USE_COUNT; + + port = dev->priv; + card = port->card; + + switch ( port->proto ) + { + case FST_HDLC: + case FST_PPP: + + orig_mtu = dev->mtu; + + /* Attach to sync PPP module */ + port->pppdev.dev = dev; + sppp_attach ( &port->pppdev ); + + if ( orig_mtu < dev->mtu ) + dev->change_mtu ( dev, orig_mtu ); + + /* Claw back the ioctl routine. We promise to be good and call + * the sync PPP routines once we've eliminated our functions. + */ + dev->do_ioctl = fst_ioctl; + + err = sppp_do_ioctl ( dev, NULL, port->proto == FST_HDLC + ? SPPPIOCCISCO : SPPPIOCPPP ); + if ( err ) + { + sppp_detach ( dev ); + MOD_DEC_USE_COUNT; + return err; + } + + err = sppp_open ( dev ); + if ( err ) + { + sppp_detach ( dev ); + MOD_DEC_USE_COUNT; + return err; + } + break; + + case FST_MONITOR: + case FST_RAW: + break; + + default: + dbg ( DBG_OPEN,"open: Unknown proto %d\n", port->proto ); + break; + } + + fst_openport ( port ); + + netif_wake_queue ( dev ); + return 0; +} + +static int +fst_close ( struct net_device *dev ) +{ + struct fst_port_info *port; + + port = dev->priv; + + netif_stop_queue ( dev ); + switch ( port->proto ) + { + case FST_HDLC: + case FST_PPP: + sppp_close ( dev ); + sppp_detach ( dev ); + break; + + case FST_MONITOR: + case FST_RAW: + break; + + default: + dbg ( DBG_OPEN,"close: Unknown proto %d\n", port->proto ); + break; + } + + fst_closeport ( port ); + + MOD_DEC_USE_COUNT; + return 0; +} + + +static void +fst_tx_timeout ( struct net_device *dev ) +{ + struct fst_port_info *port; + + dbg ( DBG_INTR | DBG_TX,"tx_timeout\n"); + + port = dev->priv; + + port->stats.tx_errors++; + port->stats.tx_aborted_errors++; + + if ( port->txcnt > 0 ) + fst_issue_cmd ( port, ABORTTX ); + + dev->trans_start = jiffies; + netif_wake_queue ( dev ); +} + + +static int +fst_start_xmit ( struct sk_buff *skb, struct net_device *dev ) +{ + struct fst_card_info *card; + struct fst_port_info *port; + unsigned char dmabits; + unsigned long flags; + int pi; + int txp; + + port = dev->priv; + card = port->card; + + /* Drop packet if in monitor (rx only) mode */ + if ( port->proto == FST_MONITOR ) + { + dev_kfree_skb ( skb ); + return 0; + } + + /* Drop packet with error if we don't have carrier */ + if ( ! netif_carrier_ok ( dev )) + { + dev_kfree_skb ( skb ); + port->stats.tx_errors++; + port->stats.tx_carrier_errors++; + return 0; + } + + /* Drop it if it's too big! MTU failure ? */ + if ( skb->len > LEN_TX_BUFFER ) + { + dbg ( DBG_TX,"Packet too large %d vs %d\n", skb->len, + LEN_TX_BUFFER ); + dev_kfree_skb ( skb ); + port->stats.tx_errors++; + return 0; + } + + /* Check we have a buffer */ + pi = port->index; + spin_lock_irqsave ( &card->card_lock, flags ); + txp = port->txpos; + dmabits = FST_RDB ( card, txDescrRing[pi][txp].bits ); + if ( dmabits & DMA_OWN ) + { + spin_unlock_irqrestore ( &card->card_lock, flags ); + dbg ( DBG_TX,"Out of Tx buffers\n"); + dev_kfree_skb ( skb ); + port->stats.tx_errors++; + return 0; + } + if ( ++port->txpos >= NUM_TX_BUFFER ) + port->txpos = 0; + + if ( ++port->txcnt >= NUM_TX_BUFFER ) + netif_stop_queue ( dev ); + + /* Release the card lock before we copy the data as we now have + * exclusive access to the buffer. + */ + spin_unlock_irqrestore ( &card->card_lock, flags ); + + /* Enqueue the packet */ + memcpy_toio ( card->mem + BUF_OFFSET ( txBuffer[pi][txp][0]), + skb->data, skb->len ); + FST_WRW ( card, txDescrRing[pi][txp].bcnt, cnv_bcnt ( skb->len )); + FST_WRB ( card, txDescrRing[pi][txp].bits, DMA_OWN | TX_STP | TX_ENP ); + + port->stats.tx_packets++; + port->stats.tx_bytes += skb->len; + + dev_kfree_skb ( skb ); + + dev->trans_start = jiffies; + return 0; +} + + +static struct net_device_stats * +fst_get_stats ( struct net_device *dev ) +{ + struct fst_port_info *port; + + if (( port = dev->priv ) != NULL ) + return &port->stats; + else + return NULL; +} + + +/* + * Card setup having checked hardware resources. + * Should be pretty bizarre if we get an error here (kernel memory + * exhaustion is one possibility). If we do see a problem we report it + * via a printk and leave the corresponding interface and all that follow + * disabled. + */ +static char *type_strings[] __devinitdata = { + "no hardware", /* Should never be seen */ + "FarSync T2P", + "FarSync T4P" +}; + +static void __devinit +fst_init_card ( struct fst_card_info *card ) +{ + int i; + int err; + struct net_device *dev; + + /* We're working on a number of ports based on the card ID. If the + * firmware detects something different later (should never happen) + * we'll have to revise it in some way then. + */ + for ( i = 0 ; i < card->nports ; i++ ) + { + card->ports[i].if_ptr = &card->ports[i].pppdev; + card->ports[i].card = card; + card->ports[i].index = i; + card->ports[i].proto = FST_HDLC; + card->ports[i].run = 0; + + dev = kmalloc ( sizeof ( struct net_device ), GFP_KERNEL ); + if ( dev == NULL ) + { + printk_err ("Cannot allocate net_device for port %d\n", + i ); + /* No point going any further */ + card->nports = i; + break; + } + memset ( dev, 0, sizeof ( struct net_device )); + card->ports[i].dev = dev; + + if ( dev_alloc_name ( dev, FST_NDEV_NAME "%d") < 0 ) + { + printk_err ("Cannot allocate i/f name for port %d\n", + i ); + kfree ( dev ); + card->nports = i; + break; + } + + /* Fill in remainder of the net device info */ + /* Since this is a PCI setup this is purely + * informational. Give them the buffer addresses + * and basic card I/O. + */ + dev->mem_start = card->phys_mem + + BUF_OFFSET ( txBuffer[i][0][0]); + dev->mem_end = card->phys_mem + + BUF_OFFSET ( txBuffer[i][NUM_TX_BUFFER][0]); + dev->rmem_start = card->phys_mem + + BUF_OFFSET ( rxBuffer[i][0][0]); + dev->rmem_end = card->phys_mem + + BUF_OFFSET ( rxBuffer[i][NUM_RX_BUFFER][0]); + dev->base_addr = card->pci_conf; + dev->irq = card->irq; + + dev->get_stats = fst_get_stats; + dev->mtu = FST_DEF_MTU; + dev->change_mtu = fst_change_mtu; + dev->priv = &card->ports[i]; + dev->tx_queue_len = FST_TX_QUEUE_LEN; + dev->type = ARPHRD_MYTYPE; + dev->addr_len = 0; + dev->open = fst_open; + dev->stop = fst_close; + dev->hard_start_xmit = fst_start_xmit; + dev->do_ioctl = fst_ioctl; + dev->watchdog_timeo = FST_TX_TIMEOUT; + dev->tx_timeout = fst_tx_timeout; + dev->flags = IFF_POINTOPOINT|IFF_NOARP; + + if (( err = register_netdev ( dev )) < 0 ) + { + printk_err ("Cannot register %s (errno %d)\n", + dev->name, -err ); + kfree ( dev ); + card->nports = i; + break; + } + } + + spin_lock_init ( &card->card_lock ); + + printk ( KERN_INFO "%s-%s: %s IRQ%d, %d ports\n", + card->ports[0].dev->name, + card->ports[card->nports-1].dev->name, + type_strings[card->type], card->irq, card->nports ); +} + + +/* + * Initialise card when detected. + * Returns 0 to indicate success, or errno otherwise. + */ +static int __devinit +fst_add_one ( struct pci_dev *pdev, const struct pci_device_id *ent ) +{ + static int firsttime_done = 0; + struct fst_card_info *card; + int err = 0; + + if ( ! firsttime_done ) + { + printk ( KERN_INFO "FarSync X21 driver " FST_USER_VERSION + " (c) 2001 FarSite Communications Ltd.\n"); + firsttime_done = 1; + } + + /* Allocate driver private data */ + card = kmalloc ( sizeof ( struct fst_card_info ), GFP_KERNEL); + if (card == NULL) + { + printk_err ("FarSync card found but insufficient memory for" + " driver storage\n"); + return -ENOMEM; + } + memset ( card, 0, sizeof ( struct fst_card_info )); + + /* Record info we need*/ + card->irq = pdev->irq; + card->pci_conf = pci_resource_start ( pdev, 1 ); + card->phys_mem = pci_resource_start ( pdev, 2 ); + card->phys_ctlmem = pci_resource_start ( pdev, 3 ); + + card->type = ent->driver_data; + card->nports = ( ent->driver_data == FST_TYPE_T2P ) ? 2 : 4; + + card->state = FST_UNINIT; + + dbg ( DBG_PCI,"type %d nports %d irq %d\n", card->type, + card->nports, card->irq ); + dbg ( DBG_PCI,"conf %04x mem %08x ctlmem %08x\n", + card->pci_conf, card->phys_mem, card->phys_ctlmem ); + + /* Check we can get access to the memory and I/O regions */ + if ( ! request_region ( card->pci_conf, 0x80,"PLX config regs")) + { + printk_err ("Unable to get config I/O @ 0x%04X\n", + card->pci_conf ); + err = -ENODEV; + goto error_free_card; + } + if ( ! request_mem_region ( card->phys_mem, FST_MEMSIZE,"Shared RAM")) + { + printk_err ("Unable to get main memory @ 0x%08X\n", + card->phys_mem ); + err = -ENODEV; + goto error_release_io; + } + if ( ! request_mem_region ( card->phys_ctlmem, 0x10,"Control memory")) + { + printk_err ("Unable to get control memory @ 0x%08X\n", + card->phys_ctlmem ); + err = -ENODEV; + goto error_release_mem; + } + + /* Try to enable the device */ + if (( err = pci_enable_device ( pdev )) != 0 ) + { + printk_err ("Failed to enable card. Err %d\n", -err ); + goto error_release_ctlmem; + } + + /* Get virtual addresses of memory regions */ + if (( card->mem = ioremap ( card->phys_mem, FST_MEMSIZE )) == NULL ) + { + printk_err ("Physical memory remap failed\n"); + err = -ENODEV; + goto error_release_ctlmem; + } + if (( card->ctlmem = ioremap ( card->phys_ctlmem, 0x10 )) == NULL ) + { + printk_err ("Control memory remap failed\n"); + err = -ENODEV; + goto error_unmap_mem; + } + dbg ( DBG_PCI,"kernel mem %p, ctlmem %p\n", card->mem, card->ctlmem); + + /* Reset the card's processor */ + fst_cpureset ( card ); + card->state = FST_RESET; + + /* Register the interrupt handler */ + if ( request_irq ( card->irq, fst_intr, SA_SHIRQ, FST_DEV_NAME, card )) + { + + printk_err ("Unable to register interrupt %d\n", card->irq ); + err = -ENODEV; + goto error_unmap_ctlmem; + } + + /* Record driver data for later use */ + pdev->driver_data = card; + + /* Remainder of card setup */ + fst_init_card ( card ); + + return 0; /* Success */ + + + /* Failure. Release resources */ +error_unmap_ctlmem: + iounmap ( card->ctlmem ); + +error_unmap_mem: + iounmap ( card->mem ); + +error_release_ctlmem: + release_mem_region ( card->phys_ctlmem, 0x10 ); + +error_release_mem: + release_mem_region ( card->phys_mem, FST_MEMSIZE ); + +error_release_io: + release_region ( card->pci_conf, 0x80 ); + +error_free_card: + kfree ( card ); + return err; +} + + +/* + * Cleanup and close down a card + */ +static void __devexit +fst_remove_one ( struct pci_dev *pdev ) +{ + struct fst_card_info *card; + int i; + + card = pdev->driver_data; + + for ( i = 0 ; i < card->nports ; i++ ) + { + unregister_netdev ( card->ports[i].dev ); + kfree ( card->ports[i].dev ); + } + + fst_disable_intr ( card ); + free_irq ( card->irq, card ); + + iounmap ( card->ctlmem ); + iounmap ( card->mem ); + + release_mem_region ( card->phys_ctlmem, 0x10 ); + release_mem_region ( card->phys_mem, FST_MEMSIZE ); + release_region ( card->pci_conf, 0x80 ); + + kfree ( card ); +} + +static struct pci_driver fst_driver = { + name: FST_NAME, + id_table: fst_pci_dev_id, + probe: fst_add_one, + remove: fst_remove_one, + suspend: NULL, + resume: NULL, +}; + +static int __init +fst_init(void) +{ + return pci_module_init ( &fst_driver ); +} + +static void __exit +fst_cleanup_module(void) +{ + pci_unregister_driver ( &fst_driver ); +} + +module_init ( fst_init ); +module_exit ( fst_cleanup_module ); + diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/farsync.h linux/drivers/net/wan/farsync.h --- v2.4.8/linux/drivers/net/wan/farsync.h Wed Dec 31 16:00:00 1969 +++ linux/drivers/net/wan/farsync.h Sun Aug 12 10:38:48 2001 @@ -0,0 +1,226 @@ +/* + * FarSync X21 driver for Linux + * + * Actually sync driver for X.21, V.35 and V.24 on FarSync T-series cards + * + * Copyright (C) 2001 FarSite Communications Ltd. + * www.farsite.co.uk + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + * Author: R.J.Dunlop + * + * For the most part this file only contains structures and information + * that is visible to applications outside the driver. Shared memory + * layout etc is internal to the driver and described within farsync.c. + * Overlap exists in that the values used for some fields within the + * ioctl interface extend into the cards firmware interface so values in + * this file may not be changed arbitrarily. + */ + +/* What's in a name + * + * The project name for this driver is Oscar. The driver is intended to be + * used with the FarSite T-Series cards (T2P & T4P) running in the high + * speed frame shifter mode. This is sometimes referred to as X.21 mode + * which is a complete misnomer as the card continues to support V.24 and + * V.35 as well as X.21. + * + * A short common prefix is useful for routines within the driver to avoid + * conflict with other similar drivers and I chosen to use "fst_" for this + * purpose (FarSite T-series). + * + * Finally the device driver needs a short network interface name. Since + * "hdlc" is already in use I've chosen the even less informative "sync" + * for the present. + */ +#define FST_NAME "fst" /* In debug/info etc */ +#define FST_NDEV_NAME "sync" /* For net interface */ +#define FST_DEV_NAME "farsync" /* For misc interfaces */ + + +/* User version number + * + * This version number is incremented with each official release of the + * package and is a simplified number for normal user reference. + * Individual files are tracked by the version control system and may + * have individual versions (or IDs) that move much faster than the + * the release version as individual updates are tracked. + */ +#define FST_USER_VERSION "0.09" + + +/* Ioctl call command values + * + * The first three private ioctls are used by the sync-PPP module, + * allowing a little room for expansion we start our numbering at 10. + */ +#define FSTWRITE (SIOCDEVPRIVATE+10) +#define FSTCPURESET (SIOCDEVPRIVATE+11) +#define FSTCPURELEASE (SIOCDEVPRIVATE+12) +#define FSTGETCONF (SIOCDEVPRIVATE+13) +#define FSTSETCONF (SIOCDEVPRIVATE+14) + + +/* FSTWRITE + * + * Used to write a block of data (firmware etc) before the card is running + */ +struct fstioc_write { + unsigned int size; + unsigned int offset; + unsigned char data[0]; +}; + + +/* FSTCPURESET and FSTCPURELEASE + * + * These take no additional data. + * FSTCPURESET forces the cards CPU into a reset state and holds it there. + * FSTCPURELEASE releases the CPU from this reset state allowing it to run, + * the reset vector should be setup before this ioctl is run. + */ + +/* FSTGETCONF and FSTSETCONF + * + * Get and set a card/ports configuration. + * In order to allow selective setting of items and for the kernel to + * indicate a partial status response the first field "valid" is a bitmask + * indicating which other fields in the structure are valid. + * Many of the field names in this structure match those used in the + * firmware shared memory configuration interface and come originally from + * the NT header file Smc.h + * + * When used with FSTGETCONF this structure should be zeroed before use. + * This is to allow for possible future expansion when some of the fields + * might be used to indicate a different (expanded) structure. + */ +struct fstioc_info { + unsigned int valid; /* Bits of structure that are valid */ + unsigned int nports; /* Number of serial ports */ + unsigned int type; /* Type index of card */ + unsigned int state; /* State of card */ + unsigned int index; /* Index of port ioctl was issued on */ + unsigned int smcFirmwareVersion; + unsigned short lineInterface; /* Physical interface type */ + unsigned char proto; /* Line protocol */ + unsigned char internalClock; /* 1 => internal clock, 0 => external */ + unsigned int lineSpeed; /* Speed in bps */ + unsigned int v24IpSts; /* V.24 control input status */ + unsigned int v24OpSts; /* V.24 control output status */ + unsigned short clockStatus; /* lsb: 0=> present, 1=> absent */ + unsigned short cableStatus; /* lsb: 0=> present, 1=> absent */ + unsigned short cardMode; /* lsb: LED id mode */ + unsigned short debug; /* Debug flags */ +}; + +/* "valid" bitmask */ +#define FSTVAL_NONE 0x00000000 /* Nothing valid (firmware not running). + * Slight misnomer. In fact nports, + * type, state and index will be set + * based on hardware detected. + */ +#define FSTVAL_OMODEM 0x0000001F /* First 5 bits correspond to the + * output status bits defined for + * v24OpSts + */ +#define FSTVAL_SPEED 0x00000020 /* internalClock, lineSpeed, clockStatus + */ +#define FSTVAL_CABLE 0x00000040 /* lineInterface, cableStatus */ +#define FSTVAL_IMODEM 0x00000080 /* v24IpSts */ +#define FSTVAL_CARD 0x00000100 /* nports, type, state, index, + * smcFirmwareVersion + */ +#define FSTVAL_PROTO 0x00000200 /* proto */ +#define FSTVAL_MODE 0x00000400 /* cardMode */ +#define FSTVAL_DEBUG 0x80000000 /* debug */ +#define FSTVAL_ALL 0x000007FF /* Note: does not include DEBUG flag */ + +/* "type" */ +#define FST_TYPE_NONE 0 /* Probably should never happen */ +#define FST_TYPE_T2P 1 /* T2P X21 2 port card */ +#define FST_TYPE_T4P 2 /* T4P X21 4 port card */ + +/* "state" */ +#define FST_UNINIT 0 /* Raw uninitialised state following + * system startup */ +#define FST_RESET 1 /* Processor held in reset state */ +#define FST_DOWNLOAD 2 /* Card being downloaded */ +#define FST_STARTING 3 /* Released following download */ +#define FST_RUNNING 4 /* Processor running */ +#define FST_BADVERSION 5 /* Bad shared memory version detected */ +#define FST_HALTED 6 /* Processor flagged a halt */ +#define FST_IFAILED 7 /* Firmware issued initialisation failed + * interrupt + */ +/* "lineInterface" */ +#define V24 1 +#define X21 2 +#define V35 3 + +/* "proto" */ +#define FST_HDLC 1 /* Cisco compatible HDLC */ +#define FST_PPP 2 /* Sync PPP */ +#define FST_MONITOR 3 /* Monitor only (raw packet reception) */ +#define FST_RAW 4 /* Two way raw packets */ +#define FST_GEN_HDLC 5 /* Using "Generic HDLC" module */ + +/* "internalClock" */ +#define INTCLK 1 +#define EXTCLK 0 + +/* "v24IpSts" bitmask */ +#define IPSTS_CTS 0x00000001 /* Clear To Send (Indicate for X.21) */ +#define IPSTS_INDICATE IPSTS_CTS +#define IPSTS_DSR 0x00000002 /* Data Set Ready (T2P Port A) */ +#define IPSTS_DCD 0x00000004 /* Data Carrier Detect */ +#define IPSTS_RI 0x00000008 /* Ring Indicator (T2P Port A) */ +#define IPSTS_TMI 0x00000010 /* Test Mode Indicator (Not Supported)*/ + +/* "v24OpSts" bitmask */ +#define OPSTS_RTS 0x00000001 /* Request To Send (Control for X.21) */ +#define OPSTS_CONTROL OPSTS_RTS +#define OPSTS_DTR 0x00000002 /* Data Terminal Ready */ +#define OPSTS_DSRS 0x00000004 /* Data Signalling Rate Select (Not + * Supported) */ +#define OPSTS_SS 0x00000008 /* Select Standby (Not Supported) */ +#define OPSTS_LL 0x00000010 /* Maintenance Test (Not Supported) */ + +/* "cardMode" bitmask */ +#define CARD_MODE_IDENTIFY 0x0001 + + +/* Debug support + * + * These should only be enabled for development kernels, production code + * should define FST_DEBUG=0 in order to exclude the code. + * Setting FST_DEBUG=1 will include all the debug code but in a disabled + * state, use the FSTSETCONF ioctl to enable specific debug actions, or + * FST_DEBUG can be set to prime the debug selection. + */ +#define FST_DEBUG 0x0000 +#if FST_DEBUG + +extern int fst_debug_mask; /* Bit mask of actions to debug, bits + * listed below. Note: Bit 0 is used + * to trigger the inclusion of this + * code, without enabling any actions. + */ +#define DBG_INIT 0x0002 /* Card detection and initialisation */ +#define DBG_OPEN 0x0004 /* Open and close sequences */ +#define DBG_PCI 0x0008 /* PCI config operations */ +#define DBG_IOCTL 0x0010 /* Ioctls and other config */ +#define DBG_INTR 0x0020 /* Interrupt routines (be careful) */ +#define DBG_TX 0x0040 /* Packet transmission */ +#define DBG_RX 0x0080 /* Packet reception */ +#define DBG_CMD 0x0100 /* Port command issuing */ + +#define DBG_ASS 0xFFFF /* Assert like statements. Code that + * should never be reached, if you see + * one of these then I've been an ass + */ +#endif /* FST_DEBUG */ + diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/sbni.c linux/drivers/net/wan/sbni.c --- v2.4.8/linux/drivers/net/wan/sbni.c Sun Aug 12 13:27:59 2001 +++ linux/drivers/net/wan/sbni.c Wed Aug 15 01:22:15 2001 @@ -44,7 +44,7 @@ #include #include #include -#include +#include #include #include @@ -659,7 +659,7 @@ struct net_local *nl = (struct net_local *) dev->priv; struct sk_buff *skb = nl->tx_buf_p; - unsigned len = min( skb->len - nl->outpos, nl->framelen ); + unsigned len = min(unsigned int, skb->len - nl->outpos, nl->framelen); outsb( dev->base_addr + DAT, skb->data + nl->outpos, len ); *crc_p = calc_crc32( *crc_p, skb->data + nl->outpos, len ); @@ -760,8 +760,9 @@ nl->outpos += nl->framelen; if( --nl->tx_frameno ) - nl->framelen = min( nl->maxframe, - nl->tx_buf_p->len - nl->outpos ); + nl->framelen = min(unsigned int, + nl->maxframe, + nl->tx_buf_p->len - nl->outpos); else send_complete( nl ), #ifdef CONFIG_SBNI_MULTILINE diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/sbni.h linux/drivers/net/wan/sbni.h --- v2.4.8/linux/drivers/net/wan/sbni.h Sun Aug 12 13:27:59 2001 +++ linux/drivers/net/wan/sbni.h Wed Aug 15 01:22:15 2001 @@ -137,7 +137,5 @@ #define __initdata #endif -#define min( x, y ) ( (x) < (y) ? (x) : (y) ) - #endif diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/sdla_chdlc.c linux/drivers/net/wan/sdla_chdlc.c --- v2.4.8/linux/drivers/net/wan/sdla_chdlc.c Fri Apr 20 11:54:22 2001 +++ linux/drivers/net/wan/sdla_chdlc.c Wed Aug 15 01:22:16 2001 @@ -53,7 +53,7 @@ #include /* offsetof(), etc. */ #include /* return codes */ #include /* inline memset(), etc. */ -#include /* kmalloc(), kfree() */ +#include /* kmalloc(), kfree() */ #include /* WAN router definitions */ #include /* WANPIPE common user API definitions */ #include /* ARPHRD_* defines */ @@ -505,13 +505,13 @@ /* For Primary Port 0 */ card->wandev.mtu = (conf->mtu >= MIN_LGTH_CHDLC_DATA_CFG) ? - min(conf->mtu, PRI_MAX_NO_DATA_BYTES_IN_FRAME) : + min(unsigned int, conf->mtu, PRI_MAX_NO_DATA_BYTES_IN_FRAME) : CHDLC_DFLT_DATA_LEN; } else if(port_num == WANOPT_SEC) { /* For Secondary Port 1 */ card->wandev.mtu = (conf->mtu >= MIN_LGTH_CHDLC_DATA_CFG) ? - min(conf->mtu, SEC_MAX_NO_DATA_BYTES_IN_FRAME) : + min(unsigned int, conf->mtu, SEC_MAX_NO_DATA_BYTES_IN_FRAME) : CHDLC_DFLT_DATA_LEN; } @@ -827,19 +827,19 @@ card->u.c.kpalv_tx = ((conf->keepalive_tx_tmr - MIN_Tx_KPALV_TIMER) >= 0) ? - min(conf->keepalive_tx_tmr,MAX_Tx_KPALV_TIMER) : + min(unsigned int, conf->keepalive_tx_tmr,MAX_Tx_KPALV_TIMER) : DEFAULT_Tx_KPALV_TIMER; card->u.c.kpalv_rx = ((conf->keepalive_rx_tmr - MIN_Rx_KPALV_TIMER) >= 0) ? - min(conf->keepalive_rx_tmr,MAX_Rx_KPALV_TIMER) : + min(unsigned int, conf->keepalive_rx_tmr,MAX_Rx_KPALV_TIMER) : DEFAULT_Rx_KPALV_TIMER; card->u.c.kpalv_err = ((conf->keepalive_err_margin-MIN_KPALV_ERR_TOL) >= 0) ? - min(conf->keepalive_err_margin, + min(unsigned int, conf->keepalive_err_margin, MAX_KPALV_ERR_TOL) : DEFAULT_KPALV_ERR_TOL; } @@ -847,7 +847,7 @@ /* Setup slarp timer to control delay between slarps */ card->u.c.slarp_timer = ((conf->slarp_timer - MIN_SLARP_REQ_TIMER) >= 0) ? - min (conf->slarp_timer, MAX_SLARP_REQ_TIMER) : + min(unsigned int, conf->slarp_timer, MAX_SLARP_REQ_TIMER) : DEFAULT_SLARP_REQ_TIMER; #ifdef LINUX_2_0 diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/sdla_fr.c linux/drivers/net/wan/sdla_fr.c --- v2.4.8/linux/drivers/net/wan/sdla_fr.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wan/sdla_fr.c Wed Aug 15 01:22:16 2001 @@ -143,7 +143,7 @@ #include /* offsetof(), etc. */ #include /* return codes */ #include /* inline memset(), etc. */ -#include /* kmalloc(), kfree() */ +#include /* kmalloc(), kfree() */ #include /* WAN router definitions */ #include /* WANPIPE common user API definitions */ #include /* ARPHRD_* defines */ @@ -548,10 +548,10 @@ /* Adjust configuration */ conf->mtu += FR_HEADER_LEN; conf->mtu = (conf->mtu >= MIN_LGTH_FR_DATA_CFG) ? - min(conf->mtu, FR_MAX_NO_DATA_BYTES_IN_FRAME) : + min(unsigned int, conf->mtu, FR_MAX_NO_DATA_BYTES_IN_FRAME) : FR_CHANNEL_MTU + FR_HEADER_LEN; - conf->bps = min(conf->bps, 2048000); + conf->bps = min(unsigned int, conf->bps, 2048000); /* Initialze the configuration structure sent to the board to zero */ memset(&u.cfg, 0, sizeof(u.cfg)); @@ -618,7 +618,7 @@ * command in fr_configure() routine. */ - card->u.f.dlci_num = min(max(conf->u.fr.dlci_num, 1), 100); + card->u.f.dlci_num = min(unsigned int, max(unsigned int, conf->u.fr.dlci_num, 1), 100); for ( i = 0; i < card->u.f.dlci_num; i++) { @@ -635,27 +635,27 @@ u.cfg.port |= 0x0002; if (conf->u.fr.t391) - u.cfg.t391 = min(conf->u.fr.t391, 30); + u.cfg.t391 = min(unsigned int, conf->u.fr.t391, 30); else u.cfg.t391 = 5; if (conf->u.fr.t392) - u.cfg.t392 = min(conf->u.fr.t392, 30); + u.cfg.t392 = min(unsigned int, conf->u.fr.t392, 30); else u.cfg.t392 = 15; if (conf->u.fr.n391) - u.cfg.n391 = min(conf->u.fr.n391, 255); + u.cfg.n391 = min(unsigned int, conf->u.fr.n391, 255); else u.cfg.n391 = 2; if (conf->u.fr.n392) - u.cfg.n392 = min(conf->u.fr.n392, 10); + u.cfg.n392 = min(unsigned int, conf->u.fr.n392, 10); else u.cfg.n392 = 3; if (conf->u.fr.n393) - u.cfg.n393 = min(conf->u.fr.n393, 10); + u.cfg.n393 = min(unsigned int, conf->u.fr.n393, 10); else u.cfg.n393 = 4; @@ -952,7 +952,8 @@ */ if (conf->cir) { - chan->cir = max( 1, min( conf->cir, 512 ) ); + chan->cir = max(unsigned int, 1, + min(unsigned int, conf->cir, 512)); chan->cir_status = CIR_ENABLED; @@ -963,7 +964,8 @@ chan->bc = chan->cir; if (conf->be){ - chan->be = max( 0, min( conf->be, 511) ); + chan->be = max(unsigned int, + 0, min(unsigned int, conf->be, 511)); }else{ conf->be = 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/sdla_ft1.c linux/drivers/net/wan/sdla_ft1.c --- v2.4.8/linux/drivers/net/wan/sdla_ft1.c Thu Apr 12 12:11:39 2001 +++ linux/drivers/net/wan/sdla_ft1.c Sun Aug 12 10:38:48 2001 @@ -25,7 +25,7 @@ #include /* offsetof(), etc. */ #include /* return codes */ #include /* inline memset(), etc. */ -#include /* kmalloc(), kfree() */ +#include /* kmalloc(), kfree() */ #include /* WAN router definitions */ #include /* WANPIPE common user API definitions */ #include /* ARPHRD_* defines */ diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/sdla_ppp.c linux/drivers/net/wan/sdla_ppp.c --- v2.4.8/linux/drivers/net/wan/sdla_ppp.c Sun May 20 12:11:39 2001 +++ linux/drivers/net/wan/sdla_ppp.c Wed Aug 15 01:22:16 2001 @@ -95,7 +95,7 @@ #include /* offsetof(), etc. */ #include /* return codes */ #include /* inline memset(), etc. */ -#include /* kmalloc(), kfree() */ +#include /* kmalloc(), kfree() */ #include /* WAN router definitions */ #include /* WANPIPE common user API definitions */ #include /* ARPHRD_* defines */ @@ -400,7 +400,7 @@ printk(KERN_INFO "%s: running PPP firmware v%s\n",card->devname, u.str); /* Adjust configuration and set defaults */ card->wandev.mtu = (conf->mtu) ? - min(conf->mtu, PPP_MAX_MTU) : PPP_DFLT_MTU; + min(unsigned int, conf->mtu, PPP_MAX_MTU) : PPP_DFLT_MTU; card->wandev.bps = conf->bps; card->wandev.interface = conf->interface; @@ -629,7 +629,7 @@ dev->init = &if_init; dev->priv = ppp_priv_area; - dev->mtu = min(dev->mtu, card->wandev.mtu); + dev->mtu = min(unsigned int, dev->mtu, card->wandev.mtu); /* Initialize the polling task routine */ #ifndef LINUX_2_4 diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/sdla_x25.c linux/drivers/net/wan/sdla_x25.c --- v2.4.8/linux/drivers/net/wan/sdla_x25.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wan/sdla_x25.c Wed Aug 15 01:22:16 2001 @@ -87,7 +87,7 @@ #include /* return codes */ #include /* inline memset(), etc. */ #include -#include /* kmalloc(), kfree() */ +#include /* kmalloc(), kfree() */ #include /* WAN router definitions */ #include /* WANPIPE common user API definitions */ #include /* htons(), etc. */ @@ -653,13 +653,13 @@ u.cfg.defPktSize = u.cfg.pktMTU = card->wandev.mtu; if (conf->u.x25.hi_pvc){ - card->u.x.hi_pvc = min(conf->u.x25.hi_pvc, MAX_LCN_NUM); - card->u.x.lo_pvc = min(conf->u.x25.lo_pvc, card->u.x.hi_pvc); + card->u.x.hi_pvc = min(unsigned int, conf->u.x25.hi_pvc, MAX_LCN_NUM); + card->u.x.lo_pvc = min(unsigned int, conf->u.x25.lo_pvc, card->u.x.hi_pvc); } if (conf->u.x25.hi_svc){ - card->u.x.hi_svc = min(conf->u.x25.hi_svc, MAX_LCN_NUM); - card->u.x.lo_svc = min(conf->u.x25.lo_svc, card->u.x.hi_svc); + card->u.x.hi_svc = min(unsigned int, conf->u.x25.hi_svc, MAX_LCN_NUM); + card->u.x.lo_svc = min(unsigned int, conf->u.x25.lo_svc, card->u.x.hi_svc); } /* Figure out the total number of channels to configure */ @@ -684,38 +684,38 @@ u.cfg.hiTwoWaySVC = card->u.x.hi_svc; if (conf->u.x25.hdlc_window) - u.cfg.hdlcWindow = min(conf->u.x25.hdlc_window, 7); + u.cfg.hdlcWindow = min(unsigned int, conf->u.x25.hdlc_window, 7); if (conf->u.x25.pkt_window) - u.cfg.pktWindow = min(conf->u.x25.pkt_window, 7); + u.cfg.pktWindow = min(unsigned int, conf->u.x25.pkt_window, 7); if (conf->u.x25.t1) - u.cfg.t1 = min(conf->u.x25.t1, 30); + u.cfg.t1 = min(unsigned int, conf->u.x25.t1, 30); if (conf->u.x25.t2) - u.cfg.t2 = min(conf->u.x25.t2, 29); + u.cfg.t2 = min(unsigned int, conf->u.x25.t2, 29); if (conf->u.x25.t4) - u.cfg.t4 = min(conf->u.x25.t4, 240); + u.cfg.t4 = min(unsigned int, conf->u.x25.t4, 240); if (conf->u.x25.n2) - u.cfg.n2 = min(conf->u.x25.n2, 30); + u.cfg.n2 = min(unsigned int, conf->u.x25.n2, 30); if (conf->u.x25.t10_t20) - u.cfg.t10t20 = min(conf->u.x25.t10_t20,255); + u.cfg.t10t20 = min(unsigned int, conf->u.x25.t10_t20,255); if (conf->u.x25.t11_t21) - u.cfg.t11t21 = min(conf->u.x25.t11_t21,255); + u.cfg.t11t21 = min(unsigned int, conf->u.x25.t11_t21,255); if (conf->u.x25.t12_t22) - u.cfg.t12t22 = min(conf->u.x25.t12_t22,255); + u.cfg.t12t22 = min(unsigned int, conf->u.x25.t12_t22,255); if (conf->u.x25.t13_t23) - u.cfg.t13t23 = min(conf->u.x25.t13_t23,255); + u.cfg.t13t23 = min(unsigned int, conf->u.x25.t13_t23,255); if (conf->u.x25.t16_t26) - u.cfg.t16t26 = min(conf->u.x25.t16_t26, 255); + u.cfg.t16t26 = min(unsigned int, conf->u.x25.t16_t26, 255); if (conf->u.x25.t28) - u.cfg.t28 = min(conf->u.x25.t28, 255); + u.cfg.t28 = min(unsigned int, conf->u.x25.t28, 255); if (conf->u.x25.r10_r20) - u.cfg.r10r20 = min(conf->u.x25.r10_r20,250); + u.cfg.r10r20 = min(unsigned int, conf->u.x25.r10_r20,250); if (conf->u.x25.r12_r22) - u.cfg.r12r22 = min(conf->u.x25.r12_r22,250); + u.cfg.r12r22 = min(unsigned int, conf->u.x25.r12_r22,250); if (conf->u.x25.r13_r23) - u.cfg.r13r23 = min(conf->u.x25.r13_r23,250); + u.cfg.r13r23 = min(unsigned int, conf->u.x25.r13_r23,250); if (conf->u.x25.ccitt_compat) diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/sdlamain.c linux/drivers/net/wan/sdlamain.c --- v2.4.8/linux/drivers/net/wan/sdlamain.c Wed Apr 18 11:49:14 2001 +++ linux/drivers/net/wan/sdlamain.c Sun Aug 12 10:38:48 2001 @@ -51,7 +51,7 @@ #include /* offsetof(), etc. */ #include /* return codes */ #include /* inline memset(), etc. */ -#include /* kmalloc(), kfree() */ +#include /* kmalloc(), kfree() */ #include /* printk(), and other useful stuff */ #include /* support for loadable modules */ #include /* request_region(), release_region() */ diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/syncppp.c linux/drivers/net/wan/syncppp.c --- v2.4.8/linux/drivers/net/wan/syncppp.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wan/syncppp.c Sun Aug 12 10:38:48 2001 @@ -156,7 +156,7 @@ static void if_down(struct net_device *dev) { - struct sppp *sp = &((struct ppp_device *)dev)->sppp; + struct sppp *sp = (struct sppp *)sppp_of(dev); sp->pp_link_state=SPPP_LINK_DOWN; } diff -u --recursive --new-file v2.4.8/linux/drivers/net/wan/wanpipe_multppp.c linux/drivers/net/wan/wanpipe_multppp.c --- v2.4.8/linux/drivers/net/wan/wanpipe_multppp.c Tue May 22 10:23:16 2001 +++ linux/drivers/net/wan/wanpipe_multppp.c Wed Aug 15 01:22:16 2001 @@ -22,7 +22,7 @@ #include /* offsetof(), etc. */ #include /* return codes */ #include /* inline memset(), etc. */ -#include /* kmalloc(), kfree() */ +#include /* kmalloc(), kfree() */ #include /* WAN router definitions */ #include /* WANPIPE common user API definitions */ #include /* ARPHRD_* defines */ @@ -375,13 +375,13 @@ /* For Primary Port 0 */ card->wandev.mtu = (conf->mtu >= MIN_LGTH_CHDLC_DATA_CFG) ? - min(conf->mtu, PRI_MAX_NO_DATA_BYTES_IN_FRAME) : + min(unsigned int, conf->mtu, PRI_MAX_NO_DATA_BYTES_IN_FRAME) : CHDLC_DFLT_DATA_LEN; } else if(port_num == WANOPT_SEC) { /* For Secondary Port 1 */ card->wandev.mtu = (conf->mtu >= MIN_LGTH_CHDLC_DATA_CFG) ? - min(conf->mtu, SEC_MAX_NO_DATA_BYTES_IN_FRAME) : + min(unsigned int, conf->mtu, SEC_MAX_NO_DATA_BYTES_IN_FRAME) : CHDLC_DFLT_DATA_LEN; } diff -u --recursive --new-file v2.4.8/linux/drivers/net/wireless/airo.c linux/drivers/net/wireless/airo.c --- v2.4.8/linux/drivers/net/wireless/airo.c Wed Jul 25 17:10:22 2001 +++ linux/drivers/net/wireless/airo.c Wed Aug 15 01:22:16 2001 @@ -259,8 +259,6 @@ #include -#define min(x,y) ((xdata, iobuf, min (comp->len, sizeof(iobuf)))) + if (copy_to_user(comp->data, iobuf, + min(unsigned int, comp->len, sizeof(iobuf)))) return -EFAULT; return 0; } @@ -4057,7 +4056,8 @@ PC4500_readrid(dev->priv,ridcode,iobuf,sizeof(iobuf)); - if (copy_to_user(comp->data,iobuf,min(comp->len,sizeof(iobuf)))) + if (copy_to_user(comp->data, iobuf, + min(unsigned int, comp->len, sizeof(iobuf)))) return -EFAULT; return 0; diff -u --recursive --new-file v2.4.8/linux/drivers/net/wireless/airport.c linux/drivers/net/wireless/airport.c --- v2.4.8/linux/drivers/net/wireless/airport.c Mon May 7 19:42:14 2001 +++ linux/drivers/net/wireless/airport.c Tue Aug 14 19:59:11 2001 @@ -1,4 +1,4 @@ -/* airport.c 0.05 +/* airport.c 0.06f * * A driver for "Hermes" chipset based Apple Airport wireless * card. @@ -32,6 +32,10 @@ #include "hermes.h" #include "orinoco.h" +static const char version[] __initdata = "airport.c 0.06f (Benjamin Herrenschmidt )"; +MODULE_AUTHOR("Benjamin Herrenschmidt "); +MODULE_DESCRIPTION("Driver for the Apple Airport wireless card."); + typedef struct dldwd_card { struct device_node* node; int irq_requested; @@ -40,8 +44,6 @@ struct dldwd_priv priv; } dldwd_card_t; -static char *version = "airport.c 0.05 (Benjamin Herrenschmidt )"; - /* * Function prototypes */ @@ -186,7 +188,7 @@ printk(KERN_ERR "airport: register_netdev() failed\n"); goto failed; } - printk(KERN_INFO "airport: card registered for interface %s\n", ndev->name); + printk(KERN_DEBUG "airport: card registered for interface %s\n", ndev->name); card->ndev_registered = 1; SET_MODULE_OWNER(ndev); @@ -242,7 +244,7 @@ { struct device_node* airport_node; - printk(KERN_INFO "%s\n", version); + printk(KERN_DEBUG "%s\n", version); MOD_INC_USE_COUNT; diff -u --recursive --new-file v2.4.8/linux/drivers/net/wireless/hermes.c linux/drivers/net/wireless/hermes.c --- v2.4.8/linux/drivers/net/wireless/hermes.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wireless/hermes.c Tue Aug 14 19:59:11 2001 @@ -3,21 +3,19 @@ * Driver core for the "Hermes" wireless MAC controller, as used in * the Lucent Orinoco and Cabletron RoamAbout cards. It should also * work on the hfa3841 and hfa3842 MAC controller chips used in the - * Prism I & II chipsets. + * Prism II chipsets. * * This is not a complete driver, just low-level access routines for * the MAC controller itself. * * Based on the prism2 driver from Absolute Value Systems' linux-wlan * project, the Linux wvlan_cs driver, Lucent's HCF-Light - * (wvlan_hcf.c) library, and the NetBSD wireless driver. + * (wvlan_hcf.c) library, and the NetBSD wireless driver (in no + * particular order). * * Copyright (C) 2000, David Gibson, Linuxcare Australia * - * This file distributed under the GPL, version 2. - */ - -static const char *version = "hermes.c: 12 Dec 2000 David Gibson "; + * This file distributed under the GPL, version 2. */ #include #include @@ -32,6 +30,10 @@ #include "hermes.h" +static const char version[] __initdata = "hermes.c: 1 Aug 2001 David Gibson "; +MODULE_DESCRIPTION("Low-level driver helper for Lucent Hermes chipset and Prism II HFA384x wireless MAC controller"); +MODULE_AUTHOR("David Gibson "); + /* These are maximum timeouts. Most often, card wil react much faster */ #define CMD_BUSY_TIMEOUT (100) /* In iterations of ~1us */ #define CMD_INIT_TIMEOUT (50000) /* in iterations of ~10us */ @@ -70,10 +72,6 @@ static int hermes_issue_cmd(hermes_t *hw, uint16_t cmd, uint16_t param0); /* - * Internal inline functions - */ - -/* * Internal functions */ @@ -87,7 +85,6 @@ static int hermes_issue_cmd(hermes_t *hw, uint16_t cmd, uint16_t param0) { uint16_t reg; -/* unsigned long k = CMD_BUSY_TIMEOUT; */ /* First check that the command register is not busy */ reg = hermes_read_regn(hw, CMD); @@ -124,9 +121,12 @@ hermes_write_regn(hw, INTEN, 0); hermes_write_regn(hw, EVACK, 0xffff); - /* Because we hope we can reset the card even if it gets into - a stupid state, we actually wait to see if the command - register will unbusy itself */ + /* Normally it's a "can't happen" for the command register to + be busy when we go to issue a command because we are + serializing all commands. However we want to have some + chance of resetting the card even if it gets into a stupid + state, so we actually wait to see if the command register + will unbusy itself here. */ k = CMD_BUSY_TIMEOUT; reg = hermes_read_regn(hw, CMD); while (k && (reg & HERMES_CMD_BUSY)) { @@ -139,8 +139,8 @@ reg = hermes_read_regn(hw, CMD); } - /* No need to explicitly handle the timeout - hermes_issue_cmd() will - probably return -EBUSY */ + /* No need to explicitly handle the timeout - if we've timed + out hermes_issue_cmd() will probably return -EBUSY below */ /* According to the documentation, EVSTAT may contain obsolete event occurrence information. We have to acknowledge @@ -503,7 +503,7 @@ static int __init init_hermes(void) { - printk(KERN_INFO "%s\n", version); + printk(KERN_DEBUG "%s\n", version); return 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/net/wireless/hermes.h linux/drivers/net/wireless/hermes.h --- v2.4.8/linux/drivers/net/wireless/hermes.h Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wireless/hermes.h Tue Aug 14 19:59:11 2001 @@ -101,7 +101,7 @@ #define HERMES_STATUS_CMDCODE (0x003f) /* - * OFFSET refister bitmasks + * OFFSET register bitmasks */ #define HERMES_OFFSET_BUSY (0x8000) #define HERMES_OFFSET_ERR (0x4000) diff -u --recursive --new-file v2.4.8/linux/drivers/net/wireless/orinoco.c linux/drivers/net/wireless/orinoco.c --- v2.4.8/linux/drivers/net/wireless/orinoco.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wireless/orinoco.c Tue Aug 14 19:59:11 2001 @@ -1,4 +1,4 @@ -/* orinoco.c 0.06 - (formerly known as dldwd_cs.c and orinoco_cs.c) +/* orinoco.c 0.06f - (formerly known as dldwd_cs.c and orinoco_cs.c) * * A driver for "Hermes" chipset based PCMCIA wireless adaptors, such * as the Lucent WavelanIEEE/Orinoco cards and their OEM (Cabletron/ @@ -33,10 +33,10 @@ * Reserved. * * Alternatively, the contents of this file may be used under the - * terms of the GNU Public License version 2 (the "GPL"), in which - * case the provisions of the GPL are applicable instead of the above. - * If you wish to allow the use of your version of this file only - * under the terms of the GPL and not to allow others to use your + * terms of the GNU General Public License version 2 (the "GPL"), in + * which case the provisions of the GPL are applicable instead of the + * above. If you wish to allow the use of your version of this file + * only under the terms of the GPL and not to allow others to use your * version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GPL. If you do not delete the @@ -166,6 +166,24 @@ * v0.06b -> v0.06c - 29/5/2001 - Jean II * o Show first spy address in /proc/net/wireless for IBSS mode as well * + * v0.06c -> v0.06d - 6/7/2001 - David Gibson + * o Change a bunch of KERN_INFO messages to KERN_DEBUG, as per Linus' + * wishes to reduce the number of unecessary messages. + * o Removed bogus message on CRC error. + * o Merged fixeds for v0.08 Prism 2 firmware from William Waghorn + * + * o Slight cleanup/re-arrangement of firmware detection code. + * + * v0.06d -> v0.06e - 1/8/2001 - David Gibson + * o Removed some redundant global initializers (orinoco_cs.c). + * o Added some module metadataa + * + * v0.06e -> v0.06f - 14/8/2001 - David Gibson + * o Wording fix to license + * o Added a 'use_alternate_encaps' module parameter for APs which need an oui of + * 00:00:00. We really need a better way of handling this, but the module flag + * is better than nothing for now. + * * TODO - Jean II * o inline functions (lot's of candidate, need to reorder code) * o Test PrismII/Symbol cards & firmware versions @@ -202,7 +220,9 @@ #include "hermes.h" #include "orinoco.h" -static char *version = "orinoco.c 0.06c (David Gibson and others)"; +static const char version[] __initdata = "orinoco.c 0.06f (David Gibson and others)"; +MODULE_AUTHOR("David Gibson "); +MODULE_DESCRIPTION("Driver for Lucent Orinoco, Prism II based and similar wireless cards"); /* Level of debugging. Used in the macros in orinoco.h */ #ifdef ORINOCO_DEBUG @@ -210,6 +230,11 @@ MODULE_PARM(dldwd_debug, "i"); #endif +/* FIXME: We need a better way of handling this */ +/* Set this flag to use 00:00:00 for the encapsulation oui instead of 00:00:F8 */ +static int use_alternate_encaps; /* =0 */ +MODULE_PARM(use_alternate_encaps, "i"); + const long channel_frequency[] = { 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2484 @@ -274,6 +299,9 @@ struct p8022_hdr encaps_hdr = { 0xaa, 0xaa, 0x03, {0x00, 0x00, 0xf8} }; +struct p8022_hdr alternate_encaps_hdr = { + 0xaa, 0xaa, 0x03, {0x00, 0x00, 0x00} +}; /* * Function prototypes @@ -396,6 +424,7 @@ priv->port_type = 4; else priv->port_type = 1; + priv->port_type = priv->ibss_port; priv->allow_ibss = 1; } break; @@ -1050,8 +1079,7 @@ if (status & HERMES_RXSTAT_ERR) { if ((status & HERMES_RXSTAT_ERR) == HERMES_RXSTAT_BADCRC) { stats->rx_crc_errors++; - printk(KERN_WARNING "%s: Bad CRC on Rx. Frame dropped.\n", - dev->name); + DEBUG(1, "%s: Bad CRC on Rx. Frame dropped.\n", dev->name); show_rx_frame(&hdr); } else if ((status & HERMES_RXSTAT_ERR) == HERMES_RXSTAT_UNDECRYPTABLE) { @@ -1198,34 +1226,14 @@ /* hermes_write_regn(hw, ALLOCFID, 0); */ } -/* - * struct net_device methods - */ - -int -dldwd_init(struct net_device *dev) +static void determine_firmware(struct net_device *dev) { dldwd_priv_t *priv = dev->priv; hermes_t *hw = &priv->hw; - int err = 0; - hermes_id_t nickbuf; - uint16_t reclen; - int len; - char *vendor_str; + int err; uint32_t firmver; + char *vendor_str; - TRACE_ENTER("dldwd"); - - dldwd_lock(priv); - - /* Do standard firmware reset */ - err = hermes_reset(hw); - if (err != 0) { - printk(KERN_ERR "%s: failed to reset hardware (err = %d)\n", - dev->name, err); - goto out; - } - /* Get the firmware version */ err = hermes_read_staidentity(hw, USER_BAP, &priv->firmware_info); if (err) { @@ -1361,18 +1369,54 @@ priv->has_pm = 0; priv->has_preamble = 0; } + + if (priv->firmware_type == FIRMWARE_TYPE_SYMBOL) + priv->ibss_port = 4; + else if ( (priv->firmware_type == FIRMWARE_TYPE_PRISM2) && (firmver >= 0x00008) ) + priv->ibss_port = 0; + else + priv->ibss_port = 1; - printk(KERN_INFO "%s: Firmware ID %02X vendor 0x%x (%s) version %d.%02d\n", + printk(KERN_DEBUG "%s: Firmware ID %02X vendor 0x%x (%s) version %d.%02d\n", dev->name, priv->firmware_info.id, priv->firmware_info.vendor, vendor_str, priv->firmware_info.major, priv->firmware_info.minor); +} + +/* + * struct net_device methods + */ + +int +dldwd_init(struct net_device *dev) +{ + dldwd_priv_t *priv = dev->priv; + hermes_t *hw = &priv->hw; + int err = 0; + hermes_id_t nickbuf; + uint16_t reclen; + int len; + + TRACE_ENTER("dldwd"); + + dldwd_lock(priv); + + /* Do standard firmware reset */ + err = hermes_reset(hw); + if (err != 0) { + printk(KERN_ERR "%s: failed to reset hardware (err = %d)\n", + dev->name, err); + goto out; + } + + determine_firmware(dev); if (priv->has_port3) - printk(KERN_INFO "%s: Ad-hoc demo mode supported.\n", dev->name); + printk(KERN_DEBUG "%s: Ad-hoc demo mode supported.\n", dev->name); if (priv->has_ibss) - printk(KERN_INFO "%s: IEEE standard IBSS ad-hoc mode supported.\n", + printk(KERN_DEBUG "%s: IEEE standard IBSS ad-hoc mode supported.\n", dev->name); if (priv->has_wep) { - printk(KERN_INFO "%s: WEP supported, ", dev->name); + printk(KERN_DEBUG "%s: WEP supported, ", dev->name); if (priv->has_big_wep) printk("\"128\"-bit key.\n"); else @@ -1388,7 +1432,7 @@ goto out; } - printk(KERN_INFO "%s: MAC address %02X:%02X:%02X:%02X:%02X:%02X\n", + printk(KERN_DEBUG "%s: MAC address %02X:%02X:%02X:%02X:%02X:%02X\n", dev->name, dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); @@ -1408,7 +1452,7 @@ memcpy(priv->nick, &nickbuf.val, len); priv->nick[len] = '\0'; - printk(KERN_INFO "%s: Station name \"%s\"\n", dev->name, priv->nick); + printk(KERN_DEBUG "%s: Station name \"%s\"\n", dev->name, priv->nick); /* Get allowed channels */ err = hermes_read_wordrec(hw, USER_BAP, HERMES_RID_CHANNEL_LIST, &priv->channel_mask); @@ -1482,7 +1526,7 @@ priv->wep_on = 0; priv->tx_key = 0; - printk(KERN_INFO "%s: ready\n", dev->name); + printk(KERN_DEBUG "%s: ready\n", dev->name); out: dldwd_unlock(priv); @@ -1668,7 +1712,11 @@ hdr.p8023.h_proto = htons(data_len + ENCAPS_OVERHEAD); /* 802.2 header */ - memcpy(&hdr.p8022, &encaps_hdr, sizeof(encaps_hdr)); + /* FIXME: ugh, what a hack for the 00:00:00 APs. Need to find a better way */ + if (use_alternate_encaps) + memcpy(&hdr.p8022, &alternate_encaps_hdr, sizeof(alternate_encaps_hdr)); + else + memcpy(&hdr.p8022, &encaps_hdr, sizeof(encaps_hdr)); hdr.ethertype = eh->h_proto; err = hermes_bap_pwrite(hw, USER_BAP, &hdr, sizeof(hdr), @@ -2546,6 +2594,33 @@ } #endif /* WIRELESS_EXT > 10 */ +static int dldwd_ioctl_setibssport(struct net_device *dev, struct iwreq *wrq) +{ + dldwd_priv_t *priv = dev->priv; + int val = *( (int *) wrq->u.name ); + + dldwd_lock(priv); + priv->ibss_port = val ; + + /* Actually update the mode we are using */ + set_port_type(priv); + + dldwd_unlock(priv); + return 0; +} + +static int dldwd_ioctl_getibssport(struct net_device *dev, struct iwreq *wrq) +{ + dldwd_priv_t *priv = dev->priv; + int *val = (int *)wrq->u.name; + + dldwd_lock(priv); + *val = priv->ibss_port; + dldwd_unlock(priv); + + return 0; +} + static int dldwd_ioctl_setport3(struct net_device *dev, struct iwreq *wrq) { dldwd_priv_t *priv = dev->priv; @@ -2941,7 +3016,13 @@ 0, "set_preamble" }, { SIOCDEVPRIVATE + 0x5, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_preamble" } + "get_preamble" }, + { SIOCDEVPRIVATE + 0x6, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + 0, "set_ibssport" }, + { SIOCDEVPRIVATE + 0x7, 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_ibssport" } }; err = verify_area(VERIFY_WRITE, wrq->u.data.pointer, sizeof(privtab)); @@ -3038,6 +3119,25 @@ } else err = -EOPNOTSUPP; break; + case SIOCDEVPRIVATE + 0x6: /* set_ibssport */ + DEBUG(1, "%s: SIOCDEVPRIVATE + 0x6 (set_ibssport)\n", + dev->name); + if (! capable(CAP_NET_ADMIN)) { + err = -EPERM; + break; + } + + err = dldwd_ioctl_setibssport(dev, wrq); + if (! err) + changed = 1; + break; + + case SIOCDEVPRIVATE + 0x7: /* get_ibssport */ + DEBUG(1, "%s: SIOCDEVPRIVATE + 0x7 (get_ibssport)\n", + dev->name); + err = dldwd_ioctl_getibssport(dev, wrq); + break; + default: err = -EOPNOTSUPP; @@ -3601,7 +3701,7 @@ err = dldwd_proc_init(); - printk(KERN_INFO "%s\n", version); + printk(KERN_DEBUG "%s\n", version); return 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/net/wireless/orinoco.h linux/drivers/net/wireless/orinoco.h --- v2.4.8/linux/drivers/net/wireless/orinoco.h Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wireless/orinoco.h Tue Aug 14 19:59:11 2001 @@ -69,7 +69,7 @@ #define FIRMWARE_TYPE_LUCENT 1 #define FIRMWARE_TYPE_PRISM2 2 #define FIRMWARE_TYPE_SYMBOL 3 - int has_ibss, has_port3, prefer_port3, has_ibss_any; + int has_ibss, has_port3, prefer_port3, has_ibss_any, ibss_port; int has_wep, has_big_wep; int has_mwo; int has_pm; @@ -107,10 +107,10 @@ /*====================================================================*/ -extern int dldwd_debug; extern struct list_head dldwd_instances; #ifdef ORINOCO_DEBUG +extern int dldwd_debug; #define DEBUG(n, args...) if (dldwd_debug>(n)) printk(KERN_DEBUG args) #define DEBUGMORE(n, args...) do { if (dldwd_debug>(n)) printk(args); } while (0) #else diff -u --recursive --new-file v2.4.8/linux/drivers/net/wireless/orinoco_cs.c linux/drivers/net/wireless/orinoco_cs.c --- v2.4.8/linux/drivers/net/wireless/orinoco_cs.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/net/wireless/orinoco_cs.c Tue Aug 14 19:59:11 2001 @@ -1,4 +1,4 @@ -/* orinoco_cs.c 0.06 - (formerly known as dldwd_cs.c) +/* orinoco_cs.c 0.06f - (formerly known as dldwd_cs.c) * * A driver for "Hermes" chipset based PCMCIA wireless adaptors, such * as the Lucent WavelanIEEE/Orinoco cards and their OEM (Cabletron/ @@ -40,20 +40,12 @@ #include "hermes.h" #include "orinoco.h" -/* Pcmcia specific structure */ -typedef struct dldwd_card { - dev_link_t link; - dev_node_t node; - int instance; - - /* Common structure (fully included), see orinoco.h */ - struct dldwd_priv priv; -} dldwd_card_t; +/*====================================================================*/ -static char version[] __initdata = -"orinoco_cs.c 0.06 (David Gibson and others)"; +static const char version[] __initdata = "orinoco_cs.c 0.06f (David Gibson and others)"; -/*====================================================================*/ +MODULE_AUTHOR("David Gibson "); +MODULE_DESCRIPTION("Driver for PCMCIA Lucent Orinoco, Prism II based and similar wireless cards"); /* Parameters that can be set with 'insmod' */ @@ -66,13 +58,24 @@ static int reset_cor = 0; /* Some D-Link cards have buggy CIS. They do work at 5v properly, but * don't have any CIS entry for it. This workaround it... */ -static int ignore_cis_vcc = 0; +static int ignore_cis_vcc; /* = 0 */ MODULE_PARM(irq_mask, "i"); MODULE_PARM(irq_list, "1-4i"); MODULE_PARM(reset_cor, "i"); MODULE_PARM(ignore_cis_vcc, "i"); + +/* Pcmcia specific structure */ +typedef struct dldwd_card { + dev_link_t link; + dev_node_t node; + int instance; + + /* Common structure (fully included), see orinoco.h */ + struct dldwd_priv priv; +} dldwd_card_t; + /* * Function prototypes */ @@ -108,8 +111,8 @@ device numbers are used to derive the corresponding array index. */ -static dev_link_t *dev_list; -static int num_instances; +static dev_link_t *dev_list; /* = NULL */ +static int num_instances; /* = 0 */ /*====================================================================*/ @@ -595,7 +598,7 @@ strcpy(card->node.dev_name, ndev->name); /* Finally, report what we've done */ - printk(KERN_INFO "%s: index 0x%02x: Vcc %d.%d", + printk(KERN_DEBUG "%s: index 0x%02x: Vcc %d.%d", ndev->name, link->conf.ConfigIndex, link->conf.Vcc / 10, link->conf.Vcc % 10); if (link->conf.Vpp1) @@ -777,8 +780,8 @@ TRACE_ENTER("dldwd"); - printk(KERN_INFO "dldwd: David's Less Dodgy WaveLAN/IEEE Driver\n" - KERN_INFO "%s\n", version); + printk(KERN_DEBUG "dldwd: David's Less Dodgy WaveLAN/IEEE Driver\n" + KERN_DEBUG "%s\n", version); CardServices(GetCardServicesInfo, &serv); if (serv.Revision != CS_RELEASE_CODE) { diff -u --recursive --new-file v2.4.8/linux/drivers/parport/ChangeLog linux/drivers/parport/ChangeLog --- v2.4.8/linux/drivers/parport/ChangeLog Wed Jul 25 17:10:22 2001 +++ linux/drivers/parport/ChangeLog Mon Aug 13 16:37:33 2001 @@ -1,3 +1,12 @@ +2001-08-11 Tim Waugh + + * parport_pc.c: Support for Titan Electronics cards. + +2001-08-08 Tim Waugh + + * share.c (parport_unregister_device): Remove device from wait list + too. + 2001-06-20 Tim Waugh * parport_pc.c: Make 'io_hi=0' work. diff -u --recursive --new-file v2.4.8/linux/drivers/parport/parport_pc.c linux/drivers/parport/parport_pc.c --- v2.4.8/linux/drivers/parport/parport_pc.c Wed Jul 25 17:10:22 2001 +++ linux/drivers/parport/parport_pc.c Mon Aug 13 16:37:33 2001 @@ -2545,6 +2545,8 @@ timedia_9018a, syba_2p_epp, syba_1p_ecp, + titan_010l, + titan_1284p2, }; @@ -2611,6 +2613,8 @@ a 1K io window */ /* syba_2p_epp AP138B */ { 2, { { 0, 0x078 }, { 0, 0x178 }, } }, /* syba_1p_ecp W83787 */ { 1, { { 0, 0x078 }, } }, + /* titan_010l */ { 1, { { 3, -1 }, } }, + /* titan_1284p2 */ { 2, { { 0, 1 }, { 2, 3 }, } }, }; static struct pci_device_id parport_pc_pci_tbl[] __devinitdata = { @@ -2696,6 +2700,9 @@ PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_2p_epp }, { PCI_VENDOR_ID_SYBA, PCI_DEVICE_ID_SYBA_1P_ECP, PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_1p_ecp }, + { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_010L, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_010l }, + { 0x9710, 0x9815, 0x1000, 0x0020, 0, 0, titan_1284p2 }, { 0, } /* terminate list */ }; MODULE_DEVICE_TABLE(pci,parport_pc_pci_tbl); diff -u --recursive --new-file v2.4.8/linux/drivers/parport/share.c linux/drivers/parport/share.c --- v2.4.8/linux/drivers/parport/share.c Tue May 22 19:54:04 2001 +++ linux/drivers/parport/share.c Sun Aug 12 12:31:28 2001 @@ -782,6 +782,21 @@ spin_unlock(&port->pardevice_lock); + /* Make sure we haven't left any pointers around in the wait + * list. */ + spin_lock (&port->waitlist_lock); + if (dev->waitprev || dev->waitnext || port->waithead == dev) { + if (dev->waitprev) + dev->waitprev->waitnext = dev->waitnext; + else + port->waithead = dev->waitnext; + if (dev->waitnext) + dev->waitnext->waitprev = dev->waitprev; + else + port->waittail = dev->waitprev; + } + spin_unlock (&port->waitlist_lock); + kfree(dev->state); kfree(dev); @@ -1063,6 +1078,7 @@ /* If anybody is waiting, find out who's been there longest and then wake them up. (Note: no locking required) */ + /* !!! LOCKING IS NEEDED HERE */ for (pd = port->waithead; pd; pd = pd->waitnext) { if (pd->waiting & 2) { /* sleeping in claim_or_block */ parport_claim(pd); @@ -1080,6 +1096,7 @@ /* Nobody was waiting, so walk the list to see if anyone is interested in being woken up. (Note: no locking required) */ + /* !!! LOCKING IS NEEDED HERE */ for (pd = port->devices; (port->cad == NULL) && pd; pd = pd->next) { if (pd->wakeup && pd != dev) pd->wakeup(pd->private); diff -u --recursive --new-file v2.4.8/linux/drivers/pci/pci.c linux/drivers/pci/pci.c --- v2.4.8/linux/drivers/pci/pci.c Wed Jul 25 17:10:22 2001 +++ linux/drivers/pci/pci.c Mon Aug 13 14:49:21 2001 @@ -22,6 +22,7 @@ #include #include /* for hotplug_path */ #include +#include #include #include /* isa_dma_bridge_buggy */ @@ -290,6 +291,15 @@ /* enter specified state */ pci_write_config_word(dev, pm + PCI_PM_CTRL, pmcsr); + /* Mandatory power management transition delays */ + /* see PCI PM 1.1 5.6.1 table 18 */ + if(state == 3 || dev->current_state == 3) + { + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(HZ/100); + } + else if(state == 2 || dev->current_state == 2) + udelay(200); dev->current_state = state; return 0; @@ -933,8 +943,7 @@ { struct pci_dev *dev = child->self; u8 io_base_lo, io_limit_lo; - u16 mem_base_lo, mem_limit_lo, io_base_hi, io_limit_hi; - u32 mem_base_hi, mem_limit_hi; + u16 mem_base_lo, mem_limit_lo; unsigned long base, limit; struct resource *res; int i; @@ -948,10 +957,17 @@ res = child->resource[0]; pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo); pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo); - pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi); - pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi); - base = ((io_base_lo & PCI_IO_RANGE_MASK) << 8) | (io_base_hi << 16); - limit = ((io_limit_lo & PCI_IO_RANGE_MASK) << 8) | (io_limit_hi << 16); + base = (io_base_lo & PCI_IO_RANGE_MASK) << 8; + limit = (io_limit_lo & PCI_IO_RANGE_MASK) << 8; + + if ((base & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) { + u16 io_base_hi, io_limit_hi; + pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi); + pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi); + base |= (io_base_hi << 16); + limit |= (io_limit_hi << 16); + } + if (base && base <= limit) { res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO; res->start = base; @@ -985,19 +1001,23 @@ res = child->resource[2]; pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo); pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo); - pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi); - pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi); - base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16; - limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16; + base = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16; + limit = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16; + + if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) { + u32 mem_base_hi, mem_limit_hi; + pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi); + pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi); #if BITS_PER_LONG == 64 - base |= ((long) mem_base_hi) << 32; - limit |= ((long) mem_limit_hi) << 32; + base |= ((long) mem_base_hi) << 32; + limit |= ((long) mem_limit_hi) << 32; #else - if (mem_base_hi || mem_limit_hi) { - printk(KERN_ERR "PCI: Unable to handle 64-bit address space for %s\n", child->name); - return; - } + if (mem_base_hi || mem_limit_hi) { + printk(KERN_ERR "PCI: Unable to handle 64-bit address space for %s\n", child->name); + return; + } #endif + } if (base && base <= limit) { res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH; res->start = base; diff -u --recursive --new-file v2.4.8/linux/drivers/pci/pci.ids linux/drivers/pci/pci.ids --- v2.4.8/linux/drivers/pci/pci.ids Tue Jul 3 17:08:20 2001 +++ linux/drivers/pci/pci.ids Sun Aug 12 17:37:53 2001 @@ -1561,8 +1561,8 @@ 10b7 1000 3C905C-TX Fast Etherlink for PC Management NIC 9800 3c980-TX [Fast Etherlink XL Server Adapter] 10b7 9800 3c980-TX Fast Etherlink XL Server Adapter - 9805 3c980-TX 10/100baseTX NIC [Python-T] - 10b7 9805 3c980 10/100baseTX NIC [Python-T] + 9805 3c982 Dual Port Server Cyclone + 10b7 9805 3c982 Dual Port Server Cyclone 10b8 Standard Microsystems Corp [SMC] 0005 83C170QF 1055 e000 LANEPIC @@ -4270,6 +4270,9 @@ 1607 Lava Semiconductor Manufacturing Inc 1608 Automated Wagering International 1609 Scimetric Instruments Inc +1619 FarSite Communications Ltd + 0400 FarSync T2P (2 port X.21/V.35/V.24) + 0440 FarSync T4P (4 port X.21/V.35/V.24) 1668 Action Tec Electronics Inc 1813 Ambient Technologies Inc 1a08 Sierra semiconductor diff -u --recursive --new-file v2.4.8/linux/drivers/pcmcia/bulkmem.c linux/drivers/pcmcia/bulkmem.c --- v2.4.8/linux/drivers/pcmcia/bulkmem.c Tue Mar 6 19:28:32 2001 +++ linux/drivers/pcmcia/bulkmem.c Sun Aug 12 17:37:53 2001 @@ -211,7 +211,7 @@ retry_erase((erase_busy_t *)arg, MTD_REQ_TIMEOUT); } -static void setup_erase_request(client_handle_t handle, eraseq_entry_t *erase) +static int setup_erase_request(client_handle_t handle, eraseq_entry_t *erase) { erase_busy_t *busy; region_info_t *info; @@ -229,6 +229,8 @@ else { erase->State = 1; busy = kmalloc(sizeof(erase_busy_t), GFP_KERNEL); + if (!busy) + return CS_GENERAL_FAILURE; busy->erase = erase; busy->client = handle; init_timer(&busy->timeout); @@ -238,6 +240,7 @@ retry_erase(busy, 0); } } + return CS_SUCCESS; } /* setup_erase_request */ /*====================================================================== @@ -322,7 +325,7 @@ ======================================================================*/ -static void setup_regions(client_handle_t handle, int attr, +static int setup_regions(client_handle_t handle, int attr, memory_handle_t *list) { int i, code, has_jedec, has_geo; @@ -337,7 +340,7 @@ code = (attr) ? CISTPL_DEVICE_A : CISTPL_DEVICE; if (read_tuple(handle, code, &device) != CS_SUCCESS) - return; + return CS_GENERAL_FAILURE; code = (attr) ? CISTPL_JEDEC_A : CISTPL_JEDEC_C; has_jedec = (read_tuple(handle, code, &jedec) == CS_SUCCESS); if (has_jedec && (device.ndev != jedec.nid)) { @@ -360,6 +363,8 @@ if ((device.dev[i].type != CISTPL_DTYPE_NULL) && (device.dev[i].size != 0)) { r = kmalloc(sizeof(*r), GFP_KERNEL); + if (!r) + return CS_GENERAL_FAILURE; r->region_magic = REGION_MAGIC; r->state = 0; r->dev_info[0] = '\0'; @@ -384,6 +389,7 @@ } offset += device.dev[i].size; } + return CS_SUCCESS; } /* setup_regions */ /*====================================================================== @@ -417,8 +423,10 @@ if ((handle->Attributes & INFO_MASTER_CLIENT) && (!(s->state & SOCKET_REGION_INFO))) { - setup_regions(handle, 0, &s->c_region); - setup_regions(handle, 1, &s->a_region); + if (setup_regions(handle, 0, &s->c_region) != CS_SUCCESS) + return CS_GENERAL_FAILURE; + if (setup_regions(handle, 1, &s->a_region) != CS_SUCCESS) + return CS_GENERAL_FAILURE; s->state |= SOCKET_REGION_INFO; } diff -u --recursive --new-file v2.4.8/linux/drivers/s390/net/iucv.c linux/drivers/s390/net/iucv.c --- v2.4.8/linux/drivers/s390/net/iucv.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/s390/net/iucv.c Wed Aug 15 01:22:16 2001 @@ -39,13 +39,6 @@ #include #include -#ifndef min -#define min(a,b) (((a)<(b))?(a):(b)) -#endif -#ifndef max -#define max(a,b) (((a)>(b))?(a):(b)) -#endif - #ifdef DEBUG #undef KERN_INFO #undef KERN_DEBUG @@ -1316,7 +1309,7 @@ if (residual_buffer) *residual_buffer = parm.ipbfadr1; } else { - moved = min (buflen, 8); + moved = min(unsigned int, buflen, 8); memcpy ((char *) buffer, (char *) &parm.ipbfadr1, moved); @@ -1409,7 +1402,8 @@ while ((moved < 8) && (moved < buflen)) { dyn_len = - min ((buffer + i)->length, need_to_move); + min(unsigned int, + (buffer + i)->length, need_to_move); memcpy ((char *)((ulong)((buffer + i)->address)), ((char *) &parm.ipbfadr1) + moved, diff -u --recursive --new-file v2.4.8/linux/drivers/s390/net/netiucv.c linux/drivers/s390/net/netiucv.c --- v2.4.8/linux/drivers/s390/net/netiucv.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/s390/net/netiucv.c Wed Aug 15 01:22:16 2001 @@ -91,7 +91,6 @@ #include /* __setup() */ #include /* memset, memcpy, etc. */ #include "iucv.h" -#define min(a,b) (a < b) ? a : b #if defined( DEBUG ) #undef KERN_INFO @@ -828,7 +827,8 @@ net_device *dev; memset (iucv_userid[devnumber], ' ', 8); - memcpy (iucv_userid[devnumber], userid, min (strlen (userid), 8)); + memcpy (iucv_userid[devnumber], userid, + min(unsigned int, strlen(userid), 8)); dev = &iucv_netdev[devnumber]; sprintf (dev->name, "iucv%i", devnumber); diff -u --recursive --new-file v2.4.8/linux/drivers/sbus/audio/audio.c linux/drivers/sbus/audio/audio.c --- v2.4.8/linux/drivers/sbus/audio/audio.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/sbus/audio/audio.c Tue Aug 14 19:57:28 2001 @@ -1,4 +1,4 @@ -/* $Id: audio.c,v 1.60 2001/05/21 09:05:05 davem Exp $ +/* $Id: audio.c,v 1.61 2001/08/13 14:40:12 davem Exp $ * drivers/sbus/audio/audio.c * * Copyright 1996 Thomas K. Dyas (tdyas@noc.rutgers.edu) @@ -217,11 +217,6 @@ return mask; } -static loff_t sparcaudio_llseek(struct file * file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static ssize_t sparcaudio_read(struct file * file, char *buf, size_t count, loff_t *ppos) { @@ -1892,7 +1887,7 @@ static struct file_operations sparcaudio_fops = { owner: THIS_MODULE, - llseek: sparcaudio_llseek, + llseek: no_llseek, read: sparcaudio_read, write: sparcaudio_write, poll: sparcaudio_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/sbus/char/aurora.c linux/drivers/sbus/char/aurora.c --- v2.4.8/linux/drivers/sbus/char/aurora.c Wed Jul 25 17:10:22 2001 +++ linux/drivers/sbus/char/aurora.c Tue Aug 14 19:57:28 2001 @@ -1,7 +1,7 @@ -/* $Id: aurora.c,v 1.14 2001/06/29 23:07:37 davem Exp $ +/* $Id: aurora.c,v 1.15 2001/08/13 14:40:08 davem Exp $ * linux/drivers/sbus/char/aurora.c -- Aurora multiport driver * - * Copyright (c) 1999 by Oliver Aldulea (oli@bv.ro) + * Copyright (c) 1999 by Oliver Aldulea (oli at bv dot ro) * * This code is based on the RISCom/8 multiport serial driver written * by Dmitry Gorodchanin (pgmdsg@ibi.com), based on the Linux serial diff -u --recursive --new-file v2.4.8/linux/drivers/sbus/char/envctrl.c linux/drivers/sbus/char/envctrl.c --- v2.4.8/linux/drivers/sbus/char/envctrl.c Mon Mar 26 15:43:01 2001 +++ linux/drivers/sbus/char/envctrl.c Sun Aug 12 11:23:32 2001 @@ -1,4 +1,4 @@ -/* $Id: envctrl.c,v 1.22 2001/03/25 09:12:15 davem Exp $ +/* $Id: envctrl.c,v 1.23 2001/08/09 23:42:09 davem Exp $ * envctrl.c: Temperature and Fan monitoring on Machines providing it. * * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be) @@ -26,11 +26,16 @@ #include #include #include +#include #include #include #include +#define __KERNEL_SYSCALLS__ +static int errno; +#include + #define ENVCTRL_MINOR 162 #define PCF8584_ADDRESS 0x55 @@ -373,7 +378,7 @@ /* Function Description: Read cpu-related data such as cpu temperature, voltage. * Return: Number of read bytes. Data is stored in bufdata in ascii format. */ -static int envctrl_read_cpu_info(struct i2c_child_t *pchild, +static int envctrl_read_cpu_info(int cpu, struct i2c_child_t *pchild, char mon_type, unsigned char *bufdata) { unsigned char data; @@ -383,13 +388,13 @@ /* Find the right monitor type and channel. */ for (i = 0; i < PCF8584_MAX_CHANNELS; i++) { if (pchild->mon_type[i] == mon_type) { - if (++j == read_cpu) { + if (++j == cpu) { break; } } } - if (j != read_cpu) + if (j != cpu) return 0; /* Read data from address and port. */ @@ -588,7 +593,7 @@ case ENVCTRL_RD_CPU_TEMPERATURE: if (!(pchild = envctrl_get_i2c_child(ENVCTRL_CPUTEMP_MON))) return 0; - ret = envctrl_read_cpu_info(pchild, ENVCTRL_CPUTEMP_MON, data); + ret = envctrl_read_cpu_info(read_cpu, pchild, ENVCTRL_CPUTEMP_MON, data); /* Reset cpu to the default cpu0. */ copy_to_user((unsigned char *)buf, data, ret); @@ -597,7 +602,7 @@ case ENVCTRL_RD_CPU_VOLTAGE: if (!(pchild = envctrl_get_i2c_child(ENVCTRL_CPUVOLTAGE_MON))) return 0; - ret = envctrl_read_cpu_info(pchild, ENVCTRL_CPUVOLTAGE_MON, data); + ret = envctrl_read_cpu_info(read_cpu, pchild, ENVCTRL_CPUVOLTAGE_MON, data); /* Reset cpu to the default cpu0. */ copy_to_user((unsigned char *)buf, data, ret); @@ -976,6 +981,74 @@ return NULL; } +static void envctrl_do_shutdown(void) +{ + static int inprog = 0; + static char *envp[] = { + "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }; + char *argv[] = { + "/sbin/shutdown", "-h", "now", NULL }; + + if (inprog != 0) + return; + + inprog = 1; + printk(KERN_CRIT "kenvctrld: WARNING: Shutting down the system now.\n"); + if (0 > execve("/sbin/shutdown", argv, envp)) { + printk(KERN_CRIT "kenvctrld: WARNING: system shutdown failed!\n"); + inprog = 0; /* unlikely to succeed, but we could try again */ + } +} + +static struct task_struct *kenvctrld_task; + +static int kenvctrld(void *__unused) +{ + int poll_interval; + int whichcpu; + char tempbuf[10]; + struct i2c_child_t *cputemp; + + if (NULL == (cputemp = envctrl_get_i2c_child(ENVCTRL_CPUTEMP_MON))) { + printk(KERN_ERR + "envctrl: kenvctrld unable to monitor CPU temp-- exiting\n"); + return -ENODEV; + } + + poll_interval = 5 * HZ; /* TODO env_mon_interval */ + + daemonize(); + strcpy(current->comm, "kenvctrld"); + kenvctrld_task = current; + + printk(KERN_INFO "envctrl: %s starting...\n", current->comm); + for (;;) { + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(poll_interval); + current->state = TASK_RUNNING; + + if(signal_pending(current)) + break; + + for (whichcpu = 0; whichcpu < ENVCTRL_MAX_CPU; ++whichcpu) { + if (0 < envctrl_read_cpu_info(whichcpu, cputemp, + ENVCTRL_CPUTEMP_MON, + tempbuf)) { + if (tempbuf[0] >= shutdown_temperature) { + printk(KERN_CRIT + "%s: WARNING: CPU%i temperature %i C meets or exceeds "\ + "shutdown threshold %i C\n", + current->comm, whichcpu, + tempbuf[0], shutdown_temperature); + envctrl_do_shutdown(); + } + } + } + } + printk(KERN_INFO "envctrl: %s exiting...\n", current->comm); + return 0; +} + static int __init envctrl_init(void) { #ifdef CONFIG_PCI @@ -1054,6 +1127,8 @@ i2c_childlist[i].addr, (0 == i) ? ("\n") : (" ")); } + kernel_thread(kenvctrld, NULL, CLONE_FS | CLONE_FILES); + return 0; #else return -ENODEV; @@ -1063,6 +1138,31 @@ static void __exit envctrl_cleanup(void) { int i; + + if (NULL != kenvctrld_task) { + force_sig(SIGKILL, kenvctrld_task); + for (;;) { + struct task_struct *p; + int found = 0; + + read_lock(&tasklist_lock); + for_each_task(p) { + if (p == kenvctrld_task) { + found = 1; + break; + } + } + read_unlock(&tasklist_lock); + + if (!found) + break; + + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(HZ); + current->state = TASK_RUNNING; + } + kenvctrld_task = NULL; + } iounmap(i2c); misc_deregister(&envctrl_dev); diff -u --recursive --new-file v2.4.8/linux/drivers/sbus/char/openprom.c linux/drivers/sbus/char/openprom.c --- v2.4.8/linux/drivers/sbus/char/openprom.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/sbus/char/openprom.c Sun Aug 12 10:38:48 2001 @@ -586,11 +586,6 @@ } } -static long long openprom_lseek(struct file * file, long long offset, int origin) -{ - return -ESPIPE; -} - static int openprom_open(struct inode * inode, struct file * file) { DATA *data; @@ -614,7 +609,7 @@ static struct file_operations openprom_fops = { owner: THIS_MODULE, - llseek: openprom_lseek, + llseek: no_llseek, ioctl: openprom_ioctl, open: openprom_open, release: openprom_release, diff -u --recursive --new-file v2.4.8/linux/drivers/sbus/char/pcikbd.c linux/drivers/sbus/char/pcikbd.c --- v2.4.8/linux/drivers/sbus/char/pcikbd.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/sbus/char/pcikbd.c Tue Aug 14 19:57:29 2001 @@ -1,4 +1,4 @@ -/* $Id: pcikbd.c,v 1.58 2001/06/10 06:51:03 davem Exp $ +/* $Id: pcikbd.c,v 1.59 2001/08/13 14:40:08 davem Exp $ * pcikbd.c: Ultra/AX PC keyboard support. * * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be) @@ -476,6 +476,11 @@ return; if (!send_data(KBD_CMD_SET_LEDS) || !send_data(leds)) send_data(KBD_CMD_ENABLE); +} + +int pcikbd_rate(struct kbd_repeat *rep) +{ + return -EIO; } static int pcikbd_wait_for_input(void) diff -u --recursive --new-file v2.4.8/linux/drivers/sbus/char/rtc.c linux/drivers/sbus/char/rtc.c --- v2.4.8/linux/drivers/sbus/char/rtc.c Sun Mar 25 18:14:20 2001 +++ linux/drivers/sbus/char/rtc.c Tue Aug 14 19:57:29 2001 @@ -1,4 +1,4 @@ -/* $Id: rtc.c,v 1.26 2001/03/14 09:30:31 davem Exp $ +/* $Id: rtc.c,v 1.27 2001/08/13 14:40:08 davem Exp $ * * Linux/SPARC Real Time Clock Driver * Copyright (C) 1996 Thomas K. Dyas (tdyas@eden.rutgers.edu) @@ -81,11 +81,6 @@ spin_unlock_irq(&mostek_lock); } -static long long rtc_lseek(struct file *file, long long offset, int origin) -{ - return -ESPIPE; -} - static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { @@ -143,7 +138,7 @@ static struct file_operations rtc_fops = { owner: THIS_MODULE, - llseek: rtc_lseek, + llseek: no_llseek, ioctl: rtc_ioctl, open: rtc_open, release: rtc_release, diff -u --recursive --new-file v2.4.8/linux/drivers/sbus/char/uctrl.c linux/drivers/sbus/char/uctrl.c --- v2.4.8/linux/drivers/sbus/char/uctrl.c Sun Feb 18 19:49:55 2001 +++ linux/drivers/sbus/char/uctrl.c Tue Aug 14 19:57:29 2001 @@ -1,4 +1,4 @@ -/* $Id: uctrl.c,v 1.10 2001/02/13 01:17:00 davem Exp $ +/* $Id: uctrl.c,v 1.11 2001/08/13 14:40:08 davem Exp $ * uctrl.c: TS102 Microcontroller interface on Tadpole Sparcbook 3 * * Copyright 1999 Derrick J Brashear (shadow@dementia.org) @@ -198,12 +198,6 @@ void uctrl_get_event_status(void); void uctrl_get_external_status(void); -static loff_t -uctrl_llseek(struct file *file, loff_t offset, int type) -{ - return -ESPIPE; -} - static int uctrl_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) @@ -231,7 +225,7 @@ static struct file_operations uctrl_fops = { owner: THIS_MODULE, - llseek: uctrl_llseek, + llseek: no_llseek, ioctl: uctrl_ioctl, open: uctrl_open, }; diff -u --recursive --new-file v2.4.8/linux/drivers/sbus/char/vfc_dev.c linux/drivers/sbus/char/vfc_dev.c --- v2.4.8/linux/drivers/sbus/char/vfc_dev.c Tue Mar 6 22:44:16 2001 +++ linux/drivers/sbus/char/vfc_dev.c Sun Aug 12 10:38:48 2001 @@ -642,15 +642,9 @@ } -static int vfc_lseek(struct inode *inode, struct file *file, - off_t offset, int origin) -{ - return -ESPIPE; -} - static struct file_operations vfc_fops = { owner: THIS_MODULE, - llseek: vfc_lseek, + llseek: no_llseek, ioctl: vfc_ioctl, mmap: vfc_mmap, open: vfc_open, diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/3w-xxxx.c linux/drivers/scsi/3w-xxxx.c --- v2.4.8/linux/drivers/scsi/3w-xxxx.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/scsi/3w-xxxx.c Thu Aug 16 09:49:49 2001 @@ -1202,15 +1202,14 @@ int do_attention_interrupt=0; int do_host_interrupt=0; int do_command_interrupt=0; - int flags = 0; - int flags2 = 0; + unsigned long flags = 0; TW_Command *command_packet; if (test_and_set_bit(TW_IN_INTR, &tw_dev->flags)) return; spin_lock_irqsave(&io_request_lock, flags); if (tw_dev->tw_pci_dev->irq == irq) { - spin_lock_irqsave(&tw_dev->tw_lock, flags2); + spin_lock(&tw_dev->tw_lock); dprintk(KERN_NOTICE "3w-xxxx: tw_interrupt()\n"); /* Read the registers */ @@ -1349,7 +1348,7 @@ } } } - spin_unlock_irqrestore(&tw_dev->tw_lock, flags2); + spin_unlock(&tw_dev->tw_lock); } spin_unlock_irqrestore(&io_request_lock, flags); clear_bit(TW_IN_INTR, &tw_dev->flags); @@ -1918,7 +1917,7 @@ unsigned char *command = SCpnt->cmnd; int request_id = 0; int error = 0; - int flags = 0; + unsigned long flags = 0; TW_Device_Extension *tw_dev = (TW_Device_Extension *)SCpnt->host->hostdata; if (tw_dev == NULL) { diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/advansys.c linux/drivers/scsi/advansys.c --- v2.4.8/linux/drivers/scsi/advansys.c Fri Apr 27 13:59:18 2001 +++ linux/drivers/scsi/advansys.c Sun Aug 12 17:37:53 2001 @@ -789,7 +789,7 @@ #include #include #include -#include +#include #include #include #include diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/Makefile linux/drivers/scsi/aic7xxx/Makefile --- v2.4.8/linux/drivers/scsi/aic7xxx/Makefile Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/Makefile Sun Aug 12 10:51:42 2001 @@ -10,14 +10,23 @@ obj-$(CONFIG_SCSI_AIC7XXX) += aic7xxx_mod.o +#EXTRA_CFLAGS += -g + # Platform Specific Files -AIC7XXX_OBJS = aic7xxx_linux.o aic7xxx_linux_pci.o +AIC7XXX_OBJS = aic7xxx_linux.o AIC7XXX_OBJS += aic7xxx_proc.o aic7770_linux.o +#PCI Specific Platform Files +ifeq ($(CONFIG_PCI),y) +AIC7XXX_OBJS += aic7xxx_linux_pci.o +endif # Core Files -AIC7XXX_OBJS += aic7xxx.o aic7xxx_pci.o aic7xxx_93cx6.o aic7770.o +AIC7XXX_OBJS += aic7xxx.o aic7xxx_93cx6.o aic7770.o +#PCI Specific Core Files +ifeq ($(CONFIG_PCI),y) +AIC7XXX_OBJS += aic7xxx_pci.o +endif # Override our module desitnation -MOD_DESTDIR = $(shell cd .. && $(CONFIG_SHELL) $(TOPDIR)/scripts/pathdown.sh) MOD_TARGET = aic7xxx.o include $(TOPDIR)/Rules.make @@ -28,9 +37,6 @@ ifeq ($(CONFIG_AIC7XXX_BUILD_FIRMWARE),y) aic7xxx_seq.h aic7xxx_reg.h: aic7xxx.seq aic7xxx.reg aicasm/aicasm aicasm/aicasm -I. -r aic7xxx_reg.h -o aic7xxx_seq.h aic7xxx.seq -else -aic7xxx_seq.h aic7xxx_reg.h: aic7xxx.seq aic7xxx.reg - echo "Warning, generated aic7xxx firmware files may be out of date!\n" endif aicasm/aicasm: aicasm/*.[chyl] diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7770.c linux/drivers/scsi/aic7xxx/aic7770.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7770.c Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7770.c Sun Aug 12 17:37:53 2001 @@ -15,7 +15,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aic7770.c#11 $ + * $Id: //depot/src/aic7xxx/aic7770.c#12 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7770.c,v 1.1 2000/09/16 20:02:27 gibbs Exp $ */ @@ -90,14 +90,12 @@ int aic7770_config(struct ahc_softc *ahc, struct aic7770_identity *entry) { - struct ahc_probe_config probe_config; int error; u_int hostconf; u_int irq; u_int intdef; - ahc_init_probe_config(&probe_config); - error = entry->setup(ahc->dev_softc, &probe_config); + error = entry->setup(ahc); if (error != 0) return (error); @@ -105,8 +103,8 @@ if (error != 0) return (error); - probe_config.description = entry->name; - error = ahc_softc_init(ahc, &probe_config); + ahc->description = entry->name; + error = ahc_softc_init(ahc); error = ahc_reset(ahc); if (error != 0) @@ -131,7 +129,7 @@ if ((intdef & EDGE_TRIG) != 0) ahc->flags |= AHC_EDGE_INTERRUPT; - switch (probe_config.chip & (AHC_EISA|AHC_VL)) { + switch (ahc->chip & (AHC_EISA|AHC_VL)) { case AHC_EISA: { u_int biosctrl; @@ -312,34 +310,33 @@ } static int -ahc_aic7770_VL_setup(ahc_dev_softc_t dev, struct ahc_probe_config *probe_config) +ahc_aic7770_VL_setup(struct ahc_softc *ahc) { int error; - error = ahc_aic7770_setup(dev, probe_config); - probe_config->chip |= AHC_VL; + error = ahc_aic7770_setup(ahc); + ahc->chip |= AHC_VL; return (error); } static int -ahc_aic7770_EISA_setup(ahc_dev_softc_t dev, - struct ahc_probe_config *probe_config) +ahc_aic7770_EISA_setup(struct ahc_softc *ahc) { int error; - error = ahc_aic7770_setup(dev, probe_config); - probe_config->chip |= AHC_EISA; + error = ahc_aic7770_setup(ahc); + ahc->chip |= AHC_EISA; return (error); } static int -ahc_aic7770_setup(ahc_dev_softc_t dev, struct ahc_probe_config *probe_config) +ahc_aic7770_setup(struct ahc_softc *ahc) { - probe_config->channel = 'A'; - probe_config->channel_b = 'B'; - probe_config->chip = AHC_AIC7770; - probe_config->features = AHC_AIC7770_FE; - probe_config->bugs |= AHC_TMODE_WIDEODD_BUG; - probe_config->flags |= AHC_PAGESCBS; + ahc->channel = 'A'; + ahc->channel_b = 'B'; + ahc->chip = AHC_AIC7770; + ahc->features = AHC_AIC7770_FE; + ahc->bugs |= AHC_TMODE_WIDEODD_BUG; + ahc->flags |= AHC_PAGESCBS; return (0); } diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7770_linux.c linux/drivers/scsi/aic7xxx/aic7770_linux.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7770_linux.c Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7770_linux.c Sun Aug 12 17:37:53 2001 @@ -14,7 +14,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx.c linux/drivers/scsi/aic7xxx/aic7xxx.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx.c Sun Aug 12 17:37:53 2001 @@ -14,7 +14,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aic7xxx.c#39 $ + * $Id: //depot/src/aic7xxx/aic7xxx.c#44 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.c,v 1.61 2000/11/13 03:35:43 gibbs Exp $ */ @@ -179,6 +179,7 @@ struct ahc_devinfo *devinfo); static void ahc_handle_ign_wide_residue(struct ahc_softc *ahc, struct ahc_devinfo *devinfo); +static void ahc_reinitialize_dataptrs(struct ahc_softc *ahc); static void ahc_handle_devreset(struct ahc_softc *ahc, struct ahc_devinfo *devinfo, cam_status status, char *message, @@ -282,6 +283,7 @@ struct scb *scb; u_int scb_index; + ahc_sync_qoutfifo(ahc, BUS_DMASYNC_POSTREAD); while (ahc->qoutfifo[ahc->qoutfifonext] != SCB_LIST_NULL) { scb_index = ahc->qoutfifo[ahc->qoutfifonext]; @@ -290,13 +292,17 @@ /* * Clear 32bits of QOUTFIFO at a time - * so that we don't clobber an incomming + * so that we don't clobber an incoming * byte DMA to the array on architectures * that only support 32bit load and store * operations. */ modnext = ahc->qoutfifonext & ~0x3; *((uint32_t *)(&ahc->qoutfifo[modnext])) = 0xFFFFFFFFUL; + ahc_dmamap_sync(ahc, ahc->shared_data_dmat, + ahc->shared_data_dmamap, + /*offset*/modnext, /*len*/4, + BUS_DMASYNC_PREREAD); } ahc->qoutfifonext++; @@ -624,6 +630,9 @@ case IGN_WIDE_RES: ahc_handle_ign_wide_residue(ahc, &devinfo); break; + case PDATA_REINIT: + ahc_reinitialize_dataptrs(ahc); + break; case BAD_PHASE: { u_int lastphase; @@ -777,8 +786,11 @@ ahc_get_transfer_length(scb), scb->sg_count); if (scb->sg_count > 0) { for (i = 0; i < scb->sg_count; i++) { - printf("sg[%d] - Addr 0x%x : Length %d\n", + + printf("sg[%d] - Addr 0x%x%x : Length %d\n", i, + (ahc_le32toh(scb->sg_list[i].len) >> 24 + & SG_HIGH_ADDR_BITS), ahc_le32toh(scb->sg_list[i].addr), ahc_le32toh(scb->sg_list[i].len) & AHC_SG_LEN_MASK); @@ -791,6 +803,26 @@ ahc_freeze_devq(ahc, scb); ahc_set_transaction_status(scb, CAM_DATA_RUN_ERR); ahc_freeze_scb(scb); + + if ((ahc->features & AHC_ULTRA2) != 0) { + /* + * Clear the channel in case we return + * to data phase later. + */ + ahc_outb(ahc, SXFRCTL0, + ahc_inb(ahc, SXFRCTL0) | CLRSTCNT|CLRCHN); + ahc_outb(ahc, SXFRCTL0, + ahc_inb(ahc, SXFRCTL0) | CLRSTCNT|CLRCHN); + } + if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + u_int dscommand1; + + /* Ensure HHADDR is 0 for future DMA operations. */ + dscommand1 = ahc_inb(ahc, DSCOMMAND1); + ahc_outb(ahc, DSCOMMAND1, dscommand1 | HADDLDSEL0); + ahc_outb(ahc, HADDR, 0); + ahc_outb(ahc, DSCOMMAND1, dscommand1); + } break; } case MKMSG_FAILED: @@ -1049,7 +1081,7 @@ /* * Although the driver does not care about the * 'Selection in Progress' status bit, the busy - * LED does. SELINGO is only cleared by a sucessful + * LED does. SELINGO is only cleared by a sucessfull * selection, so we must manually clear it to insure * the LED turns off just incase no future successful * selections occur (e.g. no devices on the bus). @@ -1269,6 +1301,13 @@ seqaddr = ahc_inb(ahc, SEQADDR0) | (ahc_inb(ahc, SEQADDR1) << 8); + /* + * Seqaddr represents the next instruction to execute, + * so we are really executing the instruction just + * before it. + */ + if (seqaddr != 0) + seqaddr -= 1; cs = ahc->critical_sections; for (i = 0; i < ahc->num_critical_sections; i++, cs++) { @@ -1338,7 +1377,7 @@ struct hardware_scb *hscb = scb->hscb; printf("scb:%p control:0x%x scsiid:0x%x lun:%d cdb_len:%d\n", - scb, + (void *)scb, hscb->control, hscb->scsiid, hscb->lun, @@ -1365,8 +1404,10 @@ hscb->tag); if (scb->sg_count > 0) { for (i = 0; i < scb->sg_count; i++) { - printf("sg[%d] - Addr 0x%x : Length %d\n", + printf("sg[%d] - Addr 0x%x%x : Length %d\n", i, + (ahc_le32toh(scb->sg_list[i].len) >> 24 + & SG_HIGH_ADDR_BITS), ahc_le32toh(scb->sg_list[i].addr), ahc_le32toh(scb->sg_list[i].len)); } @@ -1470,8 +1511,7 @@ /* Can't do DT on an SE bus */ *ppr_options &= ~MSG_EXT_PPR_DT_REQ; } - } else if ((ahc->features & AHC_ULTRA) != 0 - && (ahc->flags & AHC_ULTRA_DISABLED) == 0) { + } else if ((ahc->features & AHC_ULTRA) != 0) { maxsync = AHC_SYNCRATE_ULTRA; } else { maxsync = AHC_SYNCRATE_FAST; @@ -1911,7 +1951,7 @@ struct hardware_scb *pending_hscb; struct ahc_initiator_tinfo *tinfo; struct ahc_tmode_tstate *tstate; - + ahc_scb_devinfo(ahc, &devinfo, pending_scb); tinfo = ahc_fetch_transinfo(ahc, devinfo.channel, devinfo.our_scsiid, @@ -1927,6 +1967,8 @@ pending_scb->flags &= ~SCB_AUTO_NEGOTIATE; pending_hscb->control &= ~MK_MESSAGE; } + ahc_sync_scb(ahc, pending_scb, + BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); pending_scb_count++; } @@ -2181,6 +2223,9 @@ */ period = tinfo->goal.period; ppr_options = tinfo->goal.ppr_options; + /* Target initiated PPR is not allowed in the SCSI spec */ + if (devinfo->role == ROLE_TARGET) + ppr_options = 0; rate = ahc_devlimited_syncrate(ahc, tinfo, &period, &ppr_options, devinfo->role); dowide = tinfo->curr.width != tinfo->goal.width; @@ -2615,7 +2660,7 @@ } /* - * Wait for a complete incomming message, parse it, and respond accordingly. + * Wait for a complete incoming message, parse it, and respond accordingly. */ static int ahc_parse_msg(struct ahc_softc *ahc, struct ahc_devinfo *devinfo) @@ -3208,13 +3253,15 @@ struct ahc_dma_seg *sg; uint32_t data_cnt; uint32_t data_addr; + uint32_t sglen; /* Pull in the rest of the sgptr */ sgptr |= (ahc_inb(ahc, SCB_RESIDUAL_SGPTR + 3) << 24) | (ahc_inb(ahc, SCB_RESIDUAL_SGPTR + 2) << 16) | (ahc_inb(ahc, SCB_RESIDUAL_SGPTR + 1) << 8); sgptr &= SG_PTR_MASK; - data_cnt = (ahc_inb(ahc, SCB_RESIDUAL_DATACNT+2) << 16) + data_cnt = (ahc_inb(ahc, SCB_RESIDUAL_DATACNT+3) << 24) + | (ahc_inb(ahc, SCB_RESIDUAL_DATACNT+2) << 16) | (ahc_inb(ahc, SCB_RESIDUAL_DATACNT+1) << 8) | (ahc_inb(ahc, SCB_RESIDUAL_DATACNT)); @@ -3232,13 +3279,19 @@ * to load so we must go back one. */ sg--; + sglen = ahc_le32toh(sg->len) & AHC_SG_LEN_MASK; if (sg != scb->sg_list - && (sg->len & AHC_SG_LEN_MASK) < data_cnt) { + && sglen < (data_cnt & AHC_SG_LEN_MASK)) { sg--; - data_cnt = 1 | (sg->len & AHC_DMA_LAST_SEG); - data_addr = sg->addr - + (sg->len & AHC_SG_LEN_MASK) - 1; + sglen = ahc_le32toh(sg->len); + /* + * Preserve High Address and SG_LIST bits + * while setting the count to 1. + */ + data_cnt = 1 | (sglen & (~AHC_SG_LEN_MASK)); + data_addr = ahc_le32toh(sg->addr) + + (sglen & AHC_SG_LEN_MASK) - 1; /* * Increment sg so it points to the @@ -3255,31 +3308,72 @@ ahc_outb(ahc, SCB_RESIDUAL_SGPTR, sgptr); } -/* XXX What about high address byte??? */ ahc_outb(ahc, SCB_RESIDUAL_DATACNT + 3, data_cnt >> 24); ahc_outb(ahc, SCB_RESIDUAL_DATACNT + 2, data_cnt >> 16); ahc_outb(ahc, SCB_RESIDUAL_DATACNT + 1, data_cnt >> 8); ahc_outb(ahc, SCB_RESIDUAL_DATACNT, data_cnt); - -/* XXX Perhaps better to just keep the saved address in sram */ - if ((ahc->features & AHC_ULTRA2) != 0) { - ahc_outb(ahc, HADDR + 3, data_addr >> 24); - ahc_outb(ahc, HADDR + 2, data_addr >> 16); - ahc_outb(ahc, HADDR + 1, data_addr >> 8); - ahc_outb(ahc, HADDR, data_addr); - ahc_outb(ahc, DFCNTRL, PRELOADEN); - ahc_outb(ahc, SXFRCTL0, - ahc_inb(ahc, SXFRCTL0) | CLRCHN); - } else { - ahc_outb(ahc, HADDR + 3, data_addr >> 24); - ahc_outb(ahc, HADDR + 2, data_addr >> 16); - ahc_outb(ahc, HADDR + 1, data_addr >> 8); - ahc_outb(ahc, HADDR, data_addr); - } } } } + +/* + * Reinitialize the data pointers for the active transfer + * based on its current residual. + */ +static void +ahc_reinitialize_dataptrs(struct ahc_softc *ahc) +{ + struct scb *scb; + struct ahc_dma_seg *sg; + u_int scb_index; + uint32_t sgptr; + uint32_t resid; + uint32_t dataptr; + + scb_index = ahc_inb(ahc, SCB_TAG); + scb = ahc_lookup_scb(ahc, scb_index); + sgptr = (ahc_inb(ahc, SCB_RESIDUAL_SGPTR + 3) << 24) + | (ahc_inb(ahc, SCB_RESIDUAL_SGPTR + 2) << 16) + | (ahc_inb(ahc, SCB_RESIDUAL_SGPTR + 1) << 8) + | ahc_inb(ahc, SCB_RESIDUAL_SGPTR); + + sgptr &= SG_PTR_MASK; + sg = ahc_sg_bus_to_virt(scb, sgptr); + + /* The residual sg_ptr always points to the next sg */ + sg--; + + resid = (ahc_inb(ahc, SCB_RESIDUAL_DATACNT + 2) << 16) + | (ahc_inb(ahc, SCB_RESIDUAL_DATACNT + 1) << 8) + | ahc_inb(ahc, SCB_RESIDUAL_DATACNT); + + dataptr = ahc_le32toh(sg->addr) + + (ahc_le32toh(sg->len) & AHC_SG_LEN_MASK) + - resid; + if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + u_int dscommand1; + + dscommand1 = ahc_inb(ahc, DSCOMMAND1); + ahc_outb(ahc, DSCOMMAND1, dscommand1 | HADDLDSEL0); + ahc_outb(ahc, HADDR, + (ahc_le32toh(sg->len) >> 24) & SG_HIGH_ADDR_BITS); + ahc_outb(ahc, DSCOMMAND1, dscommand1); + } + ahc_outb(ahc, HADDR + 3, dataptr >> 24); + ahc_outb(ahc, HADDR + 2, dataptr >> 16); + ahc_outb(ahc, HADDR + 1, dataptr >> 8); + ahc_outb(ahc, HADDR, dataptr); + ahc_outb(ahc, HCNT + 2, resid >> 16); + ahc_outb(ahc, HCNT + 1, resid >> 8); + ahc_outb(ahc, HCNT, resid); + if ((ahc->features & AHC_ULTRA2) == 0) { + ahc_outb(ahc, STCNT + 2, resid >> 16); + ahc_outb(ahc, STCNT + 1, resid >> 8); + ahc_outb(ahc, STCNT, resid); + } +} + /* * Handle the effects of issuing a bus device reset message. */ @@ -3385,6 +3479,14 @@ /* We don't know our unit number until the OSM sets it */ ahc->name = name; ahc->unit = -1; + ahc->description = NULL; + ahc->channel = 'A'; + ahc->channel_b = 'B'; + ahc->chip = AHC_NONE; + ahc->features = AHC_FENONE; + ahc->bugs = AHC_BUGNONE; + ahc->flags = AHC_FNONE; + for (i = 0; i < 16; i++) TAILQ_INIT(&ahc->untagged_queues[i]); if (ahc_platform_alloc(ahc, platform_arg) != 0) { @@ -3395,21 +3497,14 @@ } int -ahc_softc_init(struct ahc_softc *ahc, struct ahc_probe_config *config) +ahc_softc_init(struct ahc_softc *ahc) { - ahc->chip = config->chip; - ahc->features = config->features; - ahc->bugs = config->bugs; - ahc->flags = config->flags; - ahc->channel = config->channel; - ahc->unpause = (ahc_inb(ahc, HCNTRL) & IRQMS); - ahc->description = config->description; /* The IRQMS bit is only valid on VL and EISA chips */ if ((ahc->chip & AHC_PCI) != 0) ahc->unpause &= ~IRQMS; ahc->pause = ahc->unpause | PAUSE; - /* XXX The shared scb data stuff should be depricated */ + /* XXX The shared scb data stuff should be deprecated */ if (ahc->scb_data == NULL) { ahc->scb_data = malloc(sizeof(*ahc->scb_data), M_DEVBUF, M_NOWAIT); @@ -3697,18 +3792,6 @@ return (i); } -void -ahc_init_probe_config(struct ahc_probe_config *probe_config) -{ - probe_config->description = NULL; - probe_config->channel = 'A'; - probe_config->channel_b = 'B'; - probe_config->chip = AHC_NONE; - probe_config->features = AHC_FENONE; - probe_config->bugs = AHC_BUGNONE; - probe_config->flags = AHC_FNONE; -} - static void ahc_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error) { @@ -3794,7 +3877,8 @@ /* DMA tag for our hardware scb structures */ if (ahc_dma_tag_create(ahc, ahc->parent_dmat, /*alignment*/1, - /*boundary*/0, /*lowaddr*/BUS_SPACE_MAXADDR, + /*boundary*/BUS_SPACE_MAXADDR_32BIT + 1, + /*lowaddr*/BUS_SPACE_MAXADDR_32BIT, /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, AHC_SCB_MAX * sizeof(struct hardware_scb), @@ -3806,7 +3890,7 @@ scb_data->init_level++; - /* Allocation for our ccbs */ + /* Allocation for our hscbs */ if (ahc_dmamem_alloc(ahc, scb_data->hscb_dmat, (void **)&scb_data->hscbs, BUS_DMA_NOWAIT, &scb_data->hscb_dmamap) != 0) { @@ -3825,7 +3909,8 @@ /* DMA tag for our sense buffers */ if (ahc_dma_tag_create(ahc, ahc->parent_dmat, /*alignment*/1, - /*boundary*/0, /*lowaddr*/BUS_SPACE_MAXADDR, + /*boundary*/BUS_SPACE_MAXADDR_32BIT + 1, + /*lowaddr*/BUS_SPACE_MAXADDR_32BIT, /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, AHC_SCB_MAX * sizeof(struct scsi_sense_data), @@ -3856,7 +3941,8 @@ /* DMA tag for our S/G structures. We allocate in page sized chunks */ if (ahc_dma_tag_create(ahc, ahc->parent_dmat, /*alignment*/1, - /*boundary*/0, /*lowaddr*/BUS_SPACE_MAXADDR, + /*boundary*/BUS_SPACE_MAXADDR_32BIT + 1, + /*lowaddr*/BUS_SPACE_MAXADDR_32BIT, /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, PAGE_SIZE, /*nsegments*/1, @@ -3999,6 +4085,7 @@ if (pdata == NULL) break; next_scb->platform_data = pdata; + next_scb->sg_map = sg_map; next_scb->sg_list = segs; /* * The sequencer always starts with the second entry. @@ -4126,7 +4213,8 @@ #ifndef __linux__ /* DMA tag for mapping buffers into device visible space. */ if (ahc_dma_tag_create(ahc, ahc->parent_dmat, /*alignment*/1, - /*boundary*/0, /*lowaddr*/BUS_SPACE_MAXADDR, + /*boundary*/BUS_SPACE_MAXADDR_32BIT + 1, + /*lowaddr*/BUS_SPACE_MAXADDR, /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/MAXBSIZE, /*nsegments*/AHC_NSEG, @@ -4153,7 +4241,8 @@ driver_data_size += AHC_TMODE_CMDS * sizeof(struct target_cmd) + /*DMA WideOdd Bug Buffer*/1; if (ahc_dma_tag_create(ahc, ahc->parent_dmat, /*alignment*/1, - /*boundary*/0, /*lowaddr*/BUS_SPACE_MAXADDR, + /*boundary*/BUS_SPACE_MAXADDR_32BIT + 1, + /*lowaddr*/BUS_SPACE_MAXADDR_32BIT, /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, driver_data_size, @@ -4187,6 +4276,7 @@ /* All target command blocks start out invalid. */ for (i = 0; i < AHC_TMODE_CMDS; i++) ahc->targetcmds[i].cmd_valid = 0; + ahc_sync_tqinfifo(ahc, BUS_DMASYNC_PREREAD); ahc->tqinfifonext = 1; ahc_outb(ahc, KERNEL_TQINPOS, ahc->tqinfifonext - 1); ahc_outb(ahc, TQINPOS, ahc->tqinfifonext); @@ -4306,8 +4396,6 @@ ultraenb = (ahc_inb(ahc, ULTRA_ENB + 1) << 8) | ahc_inb(ahc, ULTRA_ENB); } - if ((ahc->flags & AHC_ULTRA_DISABLED) != 0) - ultraenb = 0; if ((ahc->features & (AHC_WIDE|AHC_TWIN)) == 0) max_targ = 7; @@ -4433,6 +4521,7 @@ /* All of our queues are empty */ for (i = 0; i < 256; i++) ahc->qoutfifo[i] = SCB_LIST_NULL; + ahc_sync_qoutfifo(ahc, BUS_DMASYNC_PREREAD); for (i = 0; i < 256; i++) ahc->qinfifo[i] = SCB_LIST_NULL; @@ -4898,12 +4987,16 @@ ahc_qinfifo_requeue(struct ahc_softc *ahc, struct scb *prev_scb, struct scb *scb) { - if (prev_scb == NULL) + if (prev_scb == NULL) { ahc_outb(ahc, NEXT_QUEUED_SCB, scb->hscb->tag); - else + } else { prev_scb->hscb->next = scb->hscb->tag; + ahc_sync_scb(ahc, prev_scb, + BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); + } ahc->qinfifo[ahc->qinfifonext++] = scb->hscb->tag; scb->hscb->next = ahc->next_queued_scb->hscb->tag; + ahc_sync_scb(ahc, scb, BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); } static int @@ -4967,6 +5060,12 @@ while (qinpos != qintail) { scb = ahc_lookup_scb(ahc, ahc->qinfifo[qinpos]); + if (scb == NULL) { + printf("qinpos = %d, SCB index = %d\n", + qinpos, ahc->qinfifo[qinpos]); + panic("Loop 1\n"); + } + if (ahc_match_scb(ahc, scb, target, channel, lun, tag, role)) { /* * We found an scb that needs to be acted on. @@ -5028,6 +5127,11 @@ */ scb = ahc_lookup_scb(ahc, ahc->qinfifo[qinstart]); + if (scb == NULL) { + printf("found = %d, qinstart = %d, qinfifionext = %d\n", + found, qinstart, ahc->qinfifonext); + panic("First/Second Qinfifo fixup\n"); + } /* * ahc_swap_with_next_hscb forces our next pointer to * point to the reserved SCB for future commands. Save @@ -5069,6 +5173,11 @@ panic("for safety"); } scb = ahc_lookup_scb(ahc, scb_index); + if (scb == NULL) { + printf("scb_index = %d, next = %d\n", + scb_index, next); + panic("Waiting List traversal\n"); + } if (ahc_match_scb(ahc, scb, target, channel, lun, SCB_LIST_NULL, role)) { /* @@ -5442,7 +5551,7 @@ * Go through the pending CCB list and look for * commands for this target that are still active. * These are other tagged commands that were - * disconnected when the reset occured. + * disconnected when the reset occurred. */ scbp_next = LIST_FIRST(&ahc->pending_scbs); while (scbp_next != NULL) { @@ -5492,6 +5601,8 @@ struct ahc_devinfo devinfo; u_int initiator, target, max_scsiid; u_int sblkctl; + u_int scsiseq; + u_int simode1; int found; int restart_needed; char cur_channel; @@ -5528,31 +5639,48 @@ if ((ahc->features & AHC_TWIN) != 0 && ((sblkctl & SELBUSB) != 0)) cur_channel = 'B'; + scsiseq = ahc_inb(ahc, SCSISEQ_TEMPLATE); if (cur_channel != channel) { /* Case 1: Command for another bus is active * Stealthily reset the other bus without * upsetting the current bus. */ ahc_outb(ahc, SBLKCTL, sblkctl ^ SELBUSB); - ahc_outb(ahc, SIMODE1, - ahc_inb(ahc, SIMODE1) & ~(ENBUSFREE|ENSCSIRST)); - ahc_outb(ahc, SCSISEQ, - ahc_inb(ahc, SCSISEQ) & (ENSELI|ENRSELI|ENAUTOATNP)); + simode1 = ahc_inb(ahc, SIMODE1) & ~(ENBUSFREE|ENSCSIRST); + ahc_outb(ahc, SIMODE1, simode1); if (initiate_reset) ahc_reset_current_bus(ahc); ahc_clear_intstat(ahc); +#if AHC_TARGET_MODE + /* + * Bus resets clear ENSELI, so we cannot + * defer re-enabling bus reset interrupts + * if we are in target mode. + */ + if ((ahc->flags & AHC_TARGETROLE) != 0) + ahc_outb(ahc, SIMODE1, simode1 | ENSCSIRST); +#endif + ahc_outb(ahc, SCSISEQ, scsiseq & (ENSELI|ENRSELI|ENAUTOATNP)); ahc_outb(ahc, SBLKCTL, sblkctl); restart_needed = FALSE; } else { /* Case 2: A command from this bus is active or we're idle */ ahc_clear_msg_state(ahc); - ahc_outb(ahc, SIMODE1, - ahc_inb(ahc, SIMODE1) & ~(ENBUSFREE|ENSCSIRST)); - ahc_outb(ahc, SCSISEQ, - ahc_inb(ahc, SCSISEQ) & (ENSELI|ENRSELI|ENAUTOATNP)); + simode1 = ahc_inb(ahc, SIMODE1) & ~(ENBUSFREE|ENSCSIRST); + ahc_outb(ahc, SIMODE1, simode1); if (initiate_reset) ahc_reset_current_bus(ahc); ahc_clear_intstat(ahc); +#if AHC_TARGET_MODE + /* + * Bus resets clear ENSELI, so we cannot + * defer re-enabling bus reset interrupts + * if we are in target mode. + */ + if ((ahc->flags & AHC_TARGETROLE) != 0) + ahc_outb(ahc, SIMODE1, simode1 | ENSCSIRST); +#endif + ahc_outb(ahc, SCSISEQ, scsiseq & (ENSELI|ENRSELI|ENAUTOATNP)); restart_needed = TRUE; } @@ -5704,7 +5832,7 @@ ahc_set_sense_residual(scb, resid); #ifdef AHC_DEBUG - if (ahc_debug & AHC_SHOWMISC) { + if ((ahc_debug & AHC_SHOWMISC) != 0) { ahc_print_path(ahc, scb); printf("Handled Residual of %d bytes\n", resid); } @@ -6107,6 +6235,10 @@ printf("%s: Dumping Card State %s, at SEQADDR 0x%x\n", ahc_name(ahc), ahc_lookup_phase_entry(last_phase)->phasemsg, ahc_inb(ahc, SEQADDR0) | (ahc_inb(ahc, SEQADDR1) << 8)); + printf("ACCUM = 0x%x, SINDEX = 0x%x, DINDEX = 0x%x, ARG_2 = 0x%x\n", + ahc_inb(ahc, ACCUM), ahc_inb(ahc, SINDEX), ahc_inb(ahc, DINDEX), + ahc_inb(ahc, ARG_2)); + printf("HCNT = 0x%x\n", ahc_inb(ahc, HCNT)); printf("SCSISEQ = 0x%x, SBLKCTL = 0x%x\n", ahc_inb(ahc, SCSISEQ), ahc_inb(ahc, SBLKCTL)); printf(" DFCNTRL = 0x%x, DFSTATUS = 0x%x\n", @@ -6159,6 +6291,7 @@ } printf("\n"); + ahc_sync_qoutfifo(ahc, BUS_DMASYNC_POSTREAD); printf("QOUTFIFO entries: "); qoutpos = ahc->qoutfifonext; i = 0; @@ -6183,7 +6316,14 @@ LIST_FOREACH(scb, &ahc->pending_scbs, pending_links) { if (i++ > 256) break; - printf("%d ", scb->hscb->tag); + if (scb != LIST_FIRST(&ahc->pending_scbs)) + printf(", "); + printf("%d", scb->hscb->tag); + if ((ahc->flags & AHC_PAGESCBS) == 0) { + ahc_outb(ahc, SCBPTR, scb->hscb->tag); + printf("(0x%x, 0x%x)", ahc_inb(ahc, SCB_CONTROL), + ahc_inb(ahc, SCB_TAG)); + } } printf("\n"); @@ -6631,6 +6771,7 @@ if ((ahc->features & AHC_AUTOPAUSE) != 0) paused = TRUE; + ahc_sync_tqinfifo(ahc, BUS_DMASYNC_POSTREAD); while ((cmd = &ahc->targetcmds[ahc->tqinfifonext])->cmd_valid != 0) { /* @@ -6640,11 +6781,16 @@ if (ahc_handle_target_cmd(ahc, cmd) != 0) break; - ahc->tqinfifonext++; cmd->cmd_valid = 0; + ahc_dmamap_sync(ahc, ahc->shared_data_dmat, + ahc->shared_data_dmamap, + ahc_targetcmd_offset(ahc, ahc->tqinfifonext), + sizeof(struct target_cmd), + BUS_DMASYNC_PREREAD); + ahc->tqinfifonext++; /* - * Lazily update our position in the target mode incomming + * Lazily update our position in the target mode incoming * command queue as seen by the sequencer. */ if ((ahc->tqinfifonext & (HOST_TQINPOS - 1)) == 1) { diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx.h linux/drivers/scsi/aic7xxx/aic7xxx.h --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx.h Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx.h Sun Aug 12 10:51:42 2001 @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aic7xxx.h#27 $ + * $Id: //depot/src/aic7xxx/aic7xxx.h#29 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.h,v 1.30 2000/11/10 20:13:40 gibbs Exp $ */ @@ -142,7 +142,7 @@ * we must be sure that 4 slots are empty when we write to clear * the queue. This reduces us to 253 SCBs: 1 that just completed * and the known three additional empty slots in the queue that - * preceed it. + * precede it. */ #define AHC_MAX_QUEUE 253 @@ -334,29 +334,11 @@ */ AHC_BIOS_ENABLED = 0x80000, AHC_ALL_INTERRUPTS = 0x100000, - AHC_ULTRA_DISABLED = 0x200000, /* - * The precision resistor for - * ultra transmission speeds is - * missing, so we must limit - * ourselves to fast SCSI. - */ AHC_PAGESCBS = 0x400000, /* Enable SCB paging */ - AHC_EDGE_INTERRUPT = 0x800000 /* Device uses edge triggered ints */ + AHC_EDGE_INTERRUPT = 0x800000, /* Device uses edge triggered ints */ + AHC_39BIT_ADDRESSING = 0x1000000 /* Use 39 bit addressing scheme. */ } ahc_flag; -/* - * Controller Information composed at probe time. - */ -struct ahc_probe_config { - const char *description; - char channel; - char channel_b; - ahc_chip chip; - ahc_feature features; - ahc_bug bugs; - ahc_flag flags; -}; - /************************* Hardware SCB Definition ***************************/ /* @@ -505,6 +487,13 @@ #define AHC_SG_LEN_MASK 0x00FFFFFF }; +struct sg_map_node { + bus_dmamap_t sg_dmamap; + bus_addr_t sg_physaddr; + struct ahc_dma_seg* sg_vaddr; + SLIST_ENTRY(sg_map_node) links; +}; + /* * The current state of this SCB. */ @@ -544,18 +533,12 @@ bus_dmamap_t dmamap; #endif struct scb_platform_data *platform_data; - struct ahc_dma_seg *sg_list; + struct sg_map_node *sg_map; + struct ahc_dma_seg *sg_list; bus_addr_t sg_list_phys; u_int sg_count;/* How full ahc_dma_seg is */ }; -struct sg_map_node { - bus_dmamap_t sg_dmamap; - bus_addr_t sg_physaddr; - struct ahc_dma_seg* sg_vaddr; - SLIST_ENTRY(sg_map_node) links; -}; - struct scb_data { SLIST_HEAD(, scb) free_scbs; /* * Pool of SCBs ready to be assigned @@ -871,7 +854,7 @@ /* * SCBs that have been sent to the controller */ - LIST_HEAD(, scb) pending_scbs; + LIST_HEAD(, scb) pending_scbs; /* * Counting lock for deferring the release of additional @@ -1045,8 +1028,7 @@ }; /****************************** PCI Structures ********************************/ -typedef int (ahc_device_setup_t)(ahc_dev_softc_t, - struct ahc_probe_config *); +typedef int (ahc_device_setup_t)(struct ahc_softc *); struct ahc_pci_identity { uint64_t full_id; @@ -1099,10 +1081,8 @@ u_int tag, role_t role); /****************************** Initialization ********************************/ -void ahc_init_probe_config(struct ahc_probe_config *); struct ahc_softc *ahc_alloc(void *platform_arg, char *name); -int ahc_softc_init(struct ahc_softc *, - struct ahc_probe_config*); +int ahc_softc_init(struct ahc_softc *); void ahc_controller_info(struct ahc_softc *ahc, char *buf); int ahc_init(struct ahc_softc *ahc); void ahc_intr_enable(struct ahc_softc *ahc, int enable); diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx.reg linux/drivers/scsi/aic7xxx/aic7xxx.reg --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx.reg Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx.reg Sun Aug 12 10:51:42 2001 @@ -28,10 +28,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aic7xxx.reg#17 $ - * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.reg,v 1.31 2000/11/10 20:13:40 gibbs Exp $ */ +VERSION = "$Id: //depot/src/aic7xxx/aic7xxx.reg#19 $" /* * This file is processed by the aic7xxx_asm utility for use in assembling @@ -683,8 +682,16 @@ bit CIOPARCKEN 0x01 /* Internal bus parity error enable */ } +register DSCOMMAND1 { + address 0x085 + access_mode RW + mask DSLATT 0xfc /* PCI latency timer (non-ultra2) */ + bit HADDLDSEL1 0x02 /* Host Address Load Select Bits */ + bit HADDLDSEL0 0x01 +} + /* - * Bus On/Off Time (p. 3-44) + * Bus On/Off Time (p. 3-44) aic7770 only */ register BUSTIME { address 0x085 @@ -781,7 +788,13 @@ mask NO_IDENT 0x20|SEQINT /* no IDENTIFY after reconnect*/ mask NO_MATCH 0x30|SEQINT /* no cmd match for reconnect */ mask IGN_WIDE_RES 0x40|SEQINT /* Complex IGN Wide Res Msg */ - mask RESIDUAL 0x50|SEQINT /* Residual byte count != 0 */ + mask PDATA_REINIT 0x50|SEQINT /* + * Returned to data phase + * that requires data + * transfer pointers to be + * recalculated from the + * transfer residual. + */ mask HOST_MSG_LOOP 0x60|SEQINT /* * The bus is ready for the * host to perform another diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx.seq linux/drivers/scsi/aic7xxx/aic7xxx.seq --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx.seq Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx.seq Sun Aug 12 10:51:42 2001 @@ -28,11 +28,11 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aic7xxx.seq#27 $ - * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.seq,v 1.106 2000/11/12 05:19:46 gibbs Exp $ */ +VERSION = "$Id: //depot/src/aic7xxx/aic7xxx.seq#33 $" + #include "aic7xxx.reg" #include "scsi_message.h" @@ -175,16 +175,7 @@ * We've just been selected. Assert BSY and * setup the phase for receiving messages * from the target. - * - * If bus reset interrupts have been disabled (from a - * previous reset), re-enable them now. Resets are only - * of interest when we have outstanding transactions, so - * we can safely defer re-enabling the interrupt until, - * as a target, we start receiving transactions again. - */ - test SIMODE1, ENSCSIRST jnz . + 3; - mvi CLRSINT1, CLRSCSIRSTI; - or SIMODE1, ENSCSIRST; + */ mvi SCSISIGO, P_MESGOUT|BSYO; /* @@ -524,7 +515,7 @@ mvi MSG_DISCONNECT call target_outb; target_busfree_wait: - /* Wait for preceeding I/O session to complete. */ + /* Wait for preceding I/O session to complete. */ test SCSISIGI, ACKI jnz .; target_busfree: and SIMODE1, ~ENBUSFREE; @@ -749,13 +740,13 @@ if ((ahc->features & AHC_ULTRA2) != 0) { /* Does the hardware have space for another SG entry? */ test DFSTATUS, PRELOAD_AVAIL jz return; - bmov HADDR, CCSGRAM, 4; - bmov SINDEX, CCSGRAM, 1; - test SINDEX, 0x1 jz . + 2; + bmov HADDR, CCSGRAM, 7; + test HCNT[0], 0x1 jz . + 2; xor DATA_COUNT_ODD, 0x1; - bmov HCNT[0], SINDEX, 1; - bmov HCNT[1], CCSGRAM, 2; bmov SCB_RESIDUAL_DATACNT[3], CCSGRAM, 1; + if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + mov SCB_RESIDUAL_DATACNT[3] call set_hhaddr; + } call sg_advance; mov SINDEX, SCB_RESIDUAL_SGPTR[0]; test DATA_COUNT_ODD, 0x1 jz . + 2; @@ -803,29 +794,10 @@ adc HCNT[2], -1 ret; } -/* - * If we re-enter the data phase after going through another phase, the - * STCNT may have been cleared, so restore it from the residual field. - */ -data_phase_reinit: - if ((ahc->features & AHC_ULTRA2) != 0) { - /* - * The preload circuitry requires us to - * reload the address too, so pull it from - * the shaddow address. - */ - bmov HADDR, SHADDR, 4; - bmov HCNT, SCB_RESIDUAL_DATACNT, 3; - } else if ((ahc->features & AHC_CMD_CHAN) != 0) { - bmov STCNT, SCB_RESIDUAL_DATACNT, 3; - } else { - mvi DINDEX, STCNT; - mvi SCB_RESIDUAL_DATACNT call bcopy_3; - } - and DATA_COUNT_ODD, 0x1, SCB_RESIDUAL_DATACNT[0]; - jmp data_phase_loop; - p_data: + test SEQ_FLAGS,IDENTIFY_SEEN jnz p_data_okay; + mvi NO_IDENT jmp set_seqint; +p_data_okay: if ((ahc->features & AHC_ULTRA2) != 0) { mvi DMAPARAMS, PRELOADEN|SCSIEN|HDMAEN; } else { @@ -833,17 +805,23 @@ } test LASTPHASE, IOI jnz . + 2; or DMAPARAMS, DIRECTION; - call assert; /* - * Ensure entering a data - * phase is okay - seen identify, etc. - */ if ((ahc->features & AHC_CMD_CHAN) != 0) { /* We don't have any valid S/G elements */ mvi CCSGADDR, SG_PREFETCH_CNT; } - test SEQ_FLAGS, DPHASE jnz data_phase_reinit; + test SEQ_FLAGS, DPHASE jz data_phase_initialize; + + /* + * If we re-enter the data phase after going through another + * phase, our transfer location has almost certainly been + * corrupted by the interveining, non-data, transfers. Ask + * the host driver to fix us up based on the transfer residual. + */ + mvi PDATA_REINIT call set_seqint; + jmp data_phase_loop; - /* We have seen a data phase */ +data_phase_initialize: + /* We have seen a data phase for the first time */ or SEQ_FLAGS, DPHASE; /* @@ -853,6 +831,10 @@ * modify the saved values in the SCB until we see a save * data pointers message. */ + if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + /* The lowest address byte must be loaded last. */ + mov SCB_DATACNT[3] call set_hhaddr; + } if ((ahc->features & AHC_CMD_CHAN) != 0) { bmov HADDR, SCB_DATAPTR, 7; bmov SCB_RESIDUAL_DATACNT[3], SCB_DATACNT[3], 5; @@ -1057,6 +1039,29 @@ ultra2_dmahalt: and DFCNTRL, ~(SCSIEN|HDMAEN); test DFCNTRL, SCSIEN|HDMAEN jnz .; + if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + /* + * Keep HHADDR cleared for future, 32bit addressed + * only, DMA operations. + * + * Due to bayonette style S/G handling, our residual + * data must be "fixed up" once the transfer is halted. + * Here we fixup the HSHADDR stored in the high byte + * of the residual data cnt. By postponing the fixup, + * we can batch the clearing of HADDR with the fixup. + * If we halted on the last segment, the residual is + * already correct. If we are not on the last + * segment, copy the high address directly from HSHADDR. + * We don't need to worry about maintaining the + * SG_LAST_SEG flag as it will always be false in the + * case where an update is required. + */ + or DSCOMMAND1, HADDLDSEL0; + test SG_CACHE_SHADOW, LAST_SEG jnz . + 2; + mov SCB_RESIDUAL_DATACNT[3], SHADDR; + clr HADDR; + and DSCOMMAND1, ~HADDLDSEL0; + } } else { /* If we are the last SG block, tell the hardware. */ if ((ahc->bugs & AHC_PCI_MWI_BUG) != 0 @@ -1163,9 +1168,18 @@ call idle_loop; test CCSGCTL, CCSGEN jnz . - 1; bmov HADDR, CCSGRAM, 7; - test CCSGRAM, SG_LAST_SEG jz . + 2; - or SCB_RESIDUAL_DATACNT[3], SG_LAST_SEG; + /* + * Workaround for flaky external SCB RAM + * on certain aic7895 setups. It seems + * unable to handle direct transfers from + * S/G ram to certain SCB locations. + */ + mov SINDEX, CCSGRAM; + mov SCB_RESIDUAL_DATACNT[3], SINDEX; } else { + if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + mov ALLZEROS call set_hhaddr; + } mvi DINDEX, HADDR; mvi SCB_RESIDUAL_SGPTR call bcopy_4; @@ -1180,6 +1194,17 @@ mov SCB_RESIDUAL_DATACNT[3], DFDAT; } + if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + mov SCB_RESIDUAL_DATACNT[3] call set_hhaddr; + + /* + * The lowest address byte must be loaded + * last as it triggers the computation of + * some items in the PCI block. The ULTRA2 + * chips do this on PRELOAD. + */ + mov HADDR, HADDR; + } if ((ahc->bugs & AHC_PCI_MWI_BUG) != 0 && ahc->pci_cachesize != 0) { call calc_mwi_residual; @@ -1234,6 +1259,24 @@ call disable_ccsgen; } + if ((ahc->features & AHC_ULTRA2) == 0) { + /* + * Clear the high address byte so that all other DMA + * operations, which use 32bit addressing, can assume + * HHADDR is 0. + */ + if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + mov ALLZEROS call set_hhaddr; + } + } + + /* + * Update our residual information before the information is + * lost by some other type of SCSI I/O (e.g. PIO). If we have + * transferred all data, no update is needed. + * + */ + test SCB_RESIDUAL_SGPTR, SG_LIST_NULL jnz residual_update_done; if ((ahc->bugs & AHC_PCI_MWI_BUG) != 0 && ahc->pci_cachesize != 0) { if ((ahc->features & AHC_CMD_CHAN) != 0) { @@ -1257,7 +1300,7 @@ mov SCB_RESIDUAL_DATACNT[1], STCNT[1]; mov SCB_RESIDUAL_DATACNT[2], STCNT[2]; } - +residual_update_done: /* * Since we've been through a data phase, the SCB_RESID* fields * are now initialized. Clear the full residual flag. @@ -1289,7 +1332,9 @@ * Command phase. Set up the DMA registers and let 'er rip. */ p_command: - call assert; + test SEQ_FLAGS,IDENTIFY_SEEN jnz p_command_okay; + mvi NO_IDENT jmp set_seqint; +p_command_okay: if ((ahc->features & AHC_ULTRA2) != 0) { bmov HCNT[0], SCB_CDB_LEN, 1; @@ -1323,7 +1368,7 @@ jmp p_command_loop; p_command_embedded: /* - * The data fifo seems to require 4 byte alligned + * The data fifo seems to require 4 byte aligned * transfers from the sequencer. Force this to * be the case by clearing HADDR[0] even though * we aren't going to touch host memeory. @@ -1383,8 +1428,9 @@ * and store it into the SCB. */ p_status: - call assert; - + test SEQ_FLAGS,IDENTIFY_SEEN jnz p_status_okay; + mvi NO_IDENT jmp set_seqint; +p_status_okay: mov SCB_SCSI_STATUS, SCSIDATL; jmp ITloop; @@ -1626,6 +1672,22 @@ } else { test SEQ_FLAGS, DPHASE jz mesgin_done; } + + /* + * If we are asked to save our position at the end of the + * transfer, just mark us at the end rather than perform a + * full save. + */ + test SCB_RESIDUAL_SGPTR[0], SG_LIST_NULL jz mesgin_sdptrs_full; + or SCB_SGPTR, SG_LIST_NULL; + if ((ahc->features & AHC_ULTRA2) != 0) { + jmp ITloop; + } else { + jmp mesgin_done; + } + +mesgin_sdptrs_full: + /* * The SCB_SGPTR becomes the next one we'll download, * and the SCB_DATAPTR becomes the current SHADDR. @@ -1907,16 +1969,6 @@ and SXFRCTL0, ~SPIOEN ret; } - -/* - * Assert that if we've been reselected, then we've seen an IDENTIFY - * message. - */ -assert: - test SEQ_FLAGS,IDENTIFY_SEEN jnz return; /* seen IDENTIFY? */ - - mvi NO_IDENT jmp set_seqint; /* no - tell the kernel */ - /* * Locate a disconnected SCB by SCBID. Upon return, SCBPTR and SINDEX will * be set to the position of the SCB. If the SCB cannot be found locally, @@ -2157,32 +2209,21 @@ * The PCI module no longer intends to perform * a PCI transaction. Drain the fifo. */ -dma_scb_hang_empty_fifo: - /* - * Skip lines not yet transfered into the FIFO. - */ - add SINDEX, 7, HCNT; - shr SINDEX, 3; - - /* - * Skip lines already copied out of the FIFO. - */ - add A, A, SINDEX; - - call dma_scb_hang_dma_drain_fifo; - - /* - * Set the lines transferred to all but - * those yet to reach the FIFO. - */ - not SINDEX; - add A, 5, SINDEX; - cmp A, 4 je dma_finish_nowait; +dma_scb_hang_dma_drain_fifo: + not A, HCNT; + add A, SCB_DOWNLOAD_SIZE+SCB_BASE+1; + and A, ~0x7; + mov DINDIR,DFDAT; + cmp DINDEX, A jne . - 1; + cmp DINDEX, SCB_DOWNLOAD_SIZE+SCB_BASE + je dma_finish_nowait; + /* Restore A as the lines left to transfer. */ + add A, -SCB_BASE, DINDEX; + shr A, 3; jmp dma_scb_hang_fifo; dma_scb_hang_dma_done: and DFCNTRL, ~HDMAEN; test DFCNTRL, HDMAEN jnz .; -dma_scb_hang_dma_drain_fifo: add SEQADDR0, A; } else { call dma_finish; @@ -2249,6 +2290,13 @@ } else { mvi SCB_TAG, SCB_LIST_NULL ret; } + +if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { +set_hhaddr: + or DSCOMMAND1, HADDLDSEL0; + and HADDR, SG_HIGH_ADDR_BITS, SINDEX; + and DSCOMMAND1, ~HADDLDSEL0 ret; +} if ((ahc->flags & AHC_PAGESCBS) != 0) { get_free_or_disc_scb: diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.c linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.c Sun Mar 4 14:30:18 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.c Sun Aug 12 17:37:53 2001 @@ -14,7 +14,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aic7xxx_93cx6.c#7 $ + * $Id: //depot/src/aic7xxx/aic7xxx_93cx6.c#8 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx_93cx6.c,v 1.9 2000/11/10 20:13:41 gibbs Exp $ */ @@ -41,7 +41,7 @@ * ------------------------------------------------------------------- * READ 1 10 A5 - A0 Reads data stored in memory, * starting at specified address - * EWEN 1 00 11XXXX Write enable must preceed + * EWEN 1 00 11XXXX Write enable must precede * all programming modes * ERASE 1 11 A5 - A0 Erase register A5A4A3A2A1A0 * WRITE 1 01 A5 - A0 D15 - D0 Writes register diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_inline.h linux/drivers/scsi/aic7xxx/aic7xxx_inline.h --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_inline.h Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_inline.h Sun Aug 12 10:51:42 2001 @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aic7xxx_inline.h#21 $ + * $Id: //depot/src/aic7xxx/aic7xxx_inline.h#27 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx_inline.h,v 1.8 2000/11/12 05:19:46 gibbs Exp $ */ @@ -37,8 +37,8 @@ #define _AIC7XXX_INLINE_H_ /************************* Sequencer Execution Control ************************/ -static __inline int ahc_is_paused(struct ahc_softc *ahc); static __inline void ahc_pause_bug_fix(struct ahc_softc *ahc); +static __inline int ahc_is_paused(struct ahc_softc *ahc); static __inline void ahc_pause(struct ahc_softc *ahc); static __inline void ahc_unpause(struct ahc_softc *ahc); @@ -146,6 +146,13 @@ struct ahc_dma_seg *sg); static __inline uint32_t ahc_hscb_busaddr(struct ahc_softc *ahc, u_int index); +static __inline void ahc_sync_scb(struct ahc_softc *ahc, + struct scb *scb, int op); +static __inline void ahc_sync_sglist(struct ahc_softc *ahc, + struct scb *scb, int op); +static __inline uint32_t + ahc_targetcmd_offset(struct ahc_softc *ahc, + u_int index); static __inline struct ahc_dma_seg * ahc_sg_bus_to_virt(struct scb *scb, uint32_t sg_busaddr) @@ -177,6 +184,33 @@ + (sizeof(struct hardware_scb) * index)); } +static __inline void +ahc_sync_scb(struct ahc_softc *ahc, struct scb *scb, int op) +{ + ahc_dmamap_sync(ahc, ahc->scb_data->hscb_dmat, + ahc->scb_data->hscb_dmamap, + /*offset*/(scb->hscb - ahc->hscbs) * sizeof(*scb->hscb), + /*len*/sizeof(*scb->hscb), op); +} + +static __inline void +ahc_sync_sglist(struct ahc_softc *ahc, struct scb *scb, int op) +{ + if (scb->sg_count == 0) + return; + + ahc_dmamap_sync(ahc, ahc->scb_data->sg_dmat, scb->sg_map->sg_dmamap, + /*offset*/(scb->sg_list - scb->sg_map->sg_vaddr) + * sizeof(struct ahc_dma_seg), + /*len*/sizeof(struct ahc_dma_seg) * scb->sg_count, op); +} + +static __inline uint32_t +ahc_targetcmd_offset(struct ahc_softc *ahc, u_int index) +{ + return (((uint8_t *)&ahc->targetcmds[index]) - ahc->qoutfifo); +} + /******************************** Debugging ***********************************/ static __inline char *ahc_name(struct ahc_softc *ahc); @@ -219,8 +253,6 @@ sgptr = ahc_le32toh(scb->hscb->sgptr); if ((sgptr & SG_RESID_VALID) != 0) ahc_calc_residual(scb); - else - ahc_set_residual(scb, 0); } /* @@ -284,8 +316,13 @@ static __inline struct scb * ahc_lookup_scb(struct ahc_softc *ahc, u_int tag) { - return (ahc->scb_data->scbindex[tag]); + struct scb* scb; + scb = ahc->scb_data->scbindex[tag]; + if (scb != NULL) + ahc_sync_scb(ahc, scb, + BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE); + return (scb); } static __inline void @@ -342,6 +379,14 @@ * Keep a history of SCBs we've downloaded in the qinfifo. */ ahc->qinfifo[ahc->qinfifonext++] = scb->hscb->tag; + + /* + * Make sure our data is consistant from the + * perspective of the adapter. + */ + ahc_sync_scb(ahc, scb, BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); + + /* Tell the adapter about the newly queued SCB */ if ((ahc->features & AHC_QUEUE_REGS) != 0) { ahc_outb(ahc, HNSCB_QOFF, ahc->qinfifonext); } else { @@ -373,8 +418,31 @@ } /************************** Interrupt Processing ******************************/ -static __inline u_int ahc_check_cmdcmpltqueues(struct ahc_softc *ahc); -static __inline void ahc_intr(struct ahc_softc *ahc); +static __inline void ahc_sync_qoutfifo(struct ahc_softc *ahc, int op); +static __inline void ahc_sync_tqinfifo(struct ahc_softc *ahc, int op); +static __inline u_int ahc_check_cmdcmpltqueues(struct ahc_softc *ahc); +static __inline void ahc_intr(struct ahc_softc *ahc); + +static __inline void +ahc_sync_qoutfifo(struct ahc_softc *ahc, int op) +{ + ahc_dmamap_sync(ahc, ahc->shared_data_dmat, ahc->shared_data_dmamap, + /*offset*/0, /*len*/256, op); +} + +static __inline void +ahc_sync_tqinfifo(struct ahc_softc *ahc, int op) +{ +#ifdef AHC_TARGET_MODE + if ((ahc->flags & AHC_TARGETROLE) != 0) { + ahc_dmamap_sync(ahc, ahc->shared_data_dmat, + ahc->shared_data_dmamap, + ahc_targetcmd_offset(ahc, 0), + sizeof(struct target_cmd) * AHC_TMODE_CMDS, + op); + } +#endif +} /* * See if the firmware has posted any completed commands @@ -388,12 +456,21 @@ u_int retval; retval = 0; + ahc_dmamap_sync(ahc, ahc->shared_data_dmat, ahc->shared_data_dmamap, + /*offset*/ahc->qoutfifonext, /*len*/1, + BUS_DMASYNC_POSTREAD); if (ahc->qoutfifo[ahc->qoutfifonext] != SCB_LIST_NULL) retval |= AHC_RUN_QOUTFIFO; #ifdef AHC_TARGET_MODE - if ((ahc->flags & AHC_TARGETROLE) != 0 - && ahc->targetcmds[ahc->tqinfifonext].cmd_valid != 0) - retval |= AHC_RUN_TQINFIFO; + if ((ahc->flags & AHC_TARGETROLE) != 0) { + ahc_dmamap_sync(ahc, ahc->shared_data_dmat, + ahc->shared_data_dmamap, + ahc_targetcmd_offset(ahc, ahc->tqinfifofnext), + /*len*/sizeof(struct target_cmd), + BUS_DMASYNC_POSTREAD); + if (ahc->targetcmds[ahc->tqinfifonext].cmd_valid != 0) + retval |= AHC_RUN_TQINFIFO; + } #endif return (retval); } @@ -418,36 +495,13 @@ intstat = CMDCMPLT; else { intstat = ahc_inb(ahc, INTSTAT); - /* - * We can't generate queuestat once above - * or we are exposed to a race when our - * interrupt is shared with another device. - * if instat showed a command complete interrupt, - * but our first generation of queue stat - * "just missed" the delivery of this transaction, - * we would clear the command complete interrupt - * below without ever servicing the completed - * command. - */ - queuestat = ahc_check_cmdcmpltqueues(ahc); -#if AHC_PCI_CONFIG > 0 - if (ahc->unsolicited_ints > 500 - && (ahc->chip & AHC_PCI) != 0 - && (ahc_inb(ahc, ERROR) & PCIERRSTAT) != 0) - ahc->bus_intr(ahc); + queuestat = AHC_RUN_QOUTFIFO; +#ifdef AHC_TARGET_MODE + if ((ahc->flags & AHC_TARGETROLE) != 0) + queuestat |= AHC_RUN_TQINFIFO; #endif } - if (intstat == 0xFF && (ahc->features & AHC_REMOVABLE) != 0) - /* Hot eject */ - return; - - if ((intstat & INT_PEND) == 0) { - ahc->unsolicited_ints++; - return; - } - ahc->unsolicited_ints = 0; - if (intstat & CMDCMPLT) { ahc_outb(ahc, CLRINT, CLRCMDINT); @@ -469,6 +523,25 @@ ahc_run_tqinfifo(ahc, /*paused*/FALSE); #endif } + + if (intstat == 0xFF && (ahc->features & AHC_REMOVABLE) != 0) + /* Hot eject */ + return; + + if ((intstat & INT_PEND) == 0) { +#if AHC_PCI_CONFIG > 0 + if (ahc->unsolicited_ints > 500) { + ahc->unsolicited_ints = 0; + if ((ahc->chip & AHC_PCI) != 0 + && (ahc_inb(ahc, ERROR) & PCIERRSTAT) != 0) + ahc->bus_intr(ahc); + } +#endif + ahc->unsolicited_ints++; + return; + } + ahc->unsolicited_ints = 0; + if (intstat & BRKADRINT) { ahc_handle_brkadrint(ahc); /* Fatal error, no more interrupts to handle. */ diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_linux.c linux/drivers/scsi/aic7xxx/aic7xxx_linux.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_linux.c Sun May 20 12:11:39 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_linux.c Sun Aug 12 17:37:53 2001 @@ -1,7 +1,7 @@ /* * Adaptec AIC7xxx device driver for Linux. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux.c#66 $ + * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux.c#72 $ * * Copyright (c) 1994 John Aycock * The University of Calgary Department of Computer Science. @@ -52,7 +52,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -113,8 +113,6 @@ * */ -#include - /* * The next three defines are user configurable. These should be the only * defines a user might need to get in here and change. There are other @@ -122,14 +120,10 @@ * under normal conditions. */ -#if defined(MODULE) || defined(PCMCIA) +#if defined(MODULE) #include #endif -#if defined(PCMCIA) -#undef MODULE -#endif - #include "aic7xxx_osm.h" #include "aic7xxx_inline.h" @@ -139,6 +133,8 @@ #include "../sd.h" /* For geometry detection */ +#include /* For fetching system memory size */ + /* * To generate the correct addresses for the controller to issue * on the bus. Originally added for DEC Alpha support. @@ -483,7 +479,8 @@ static void ahc_linux_handle_scsi_status(struct ahc_softc *, struct ahc_linux_device *, struct scb *); -static void ahc_linux_filter_command(struct ahc_softc *ahc, Scsi_Cmnd *cmd); +static void ahc_linux_filter_command(struct ahc_softc*, Scsi_Cmnd*, + struct scb*); static void ahc_linux_sem_timeout(u_long arg); static void ahc_linux_freeze_sim_queue(struct ahc_softc *ahc); static void ahc_linux_release_sim_queue(u_long arg); @@ -517,9 +514,14 @@ struct ahc_cmd *acmd); static __inline void ahc_linux_check_device_queue(struct ahc_softc *ahc, struct ahc_linux_device *dev); -static __inline void ahc_linux_sniff_command(struct ahc_softc*, Scsi_Cmnd*); +static __inline void ahc_linux_sniff_command(struct ahc_softc*, Scsi_Cmnd*, + struct scb*); static __inline void ahc_linux_unmap_scb(struct ahc_softc*, struct scb*); +static __inline int ahc_linux_map_seg(struct ahc_softc *ahc, struct scb *scb, + struct ahc_dma_seg *sg, + bus_addr_t addr, bus_size_t len); + static __inline struct ahc_linux_device* ahc_linux_get_device(struct ahc_softc *ahc, u_int channel, u_int target, u_int lun, int alloc) @@ -628,15 +630,15 @@ while ((ahc->flags & AHC_RESOURCE_SHORTAGE) == 0 && ahc->platform_data->qfrozen == 0 - && (dev = LIST_FIRST(&ahc->platform_data->device_runq)) != NULL) { - LIST_REMOVE(dev, links); + && (dev = TAILQ_FIRST(&ahc->platform_data->device_runq)) != NULL) { + TAILQ_REMOVE(&ahc->platform_data->device_runq, dev, links); dev->flags &= ~AHC_DEV_ON_RUN_LIST; ahc_linux_check_device_queue(ahc, dev); } } static __inline void -ahc_linux_sniff_command(struct ahc_softc *ahc, Scsi_Cmnd *cmd) +ahc_linux_sniff_command(struct ahc_softc *ahc, Scsi_Cmnd *cmd, struct scb *scb) { /* * Determine whether we care to filter @@ -645,7 +647,7 @@ * heavy weight processing. */ if (cmd->cmnd[0] == INQUIRY) - ahc_linux_filter_command(ahc, cmd); + ahc_linux_filter_command(ahc, cmd, scb); } static __inline void @@ -654,6 +656,7 @@ Scsi_Cmnd *cmd; cmd = scb->io_ctx; + ahc_sync_sglist(ahc, scb, BUS_DMASYNC_POSTWRITE); if (cmd->use_sg != 0) { struct scatterlist *sg; @@ -667,6 +670,48 @@ scsi_to_pci_dma_dir(cmd->sc_data_direction)); } +static __inline int +ahc_linux_map_seg(struct ahc_softc *ahc, struct scb *scb, + struct ahc_dma_seg *sg, bus_addr_t addr, bus_size_t len) +{ + int consumed; + + if ((scb->sg_count + 1) > AHC_NSEG) + panic("Too few segs for dma mapping. " + "Increase AHC_NSEG\n"); + + consumed = 1; + sg->addr = ahc_htole32(addr & 0xFFFFFFFF); + scb->platform_data->xfer_len += len; + if (sizeof(bus_addr_t) > 4 + && (ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + /* + * Due to DAC restrictions, we can't + * cross a 4GB boundary. + */ + if ((addr ^ (addr + len - 1)) & ~0xFFFFFFFF) { + struct ahc_dma_seg *next_sg; + uint32_t next_len; + + printf("Crossed Seg\n"); + if ((scb->sg_count + 2) > AHC_NSEG) + panic("Too few segs for dma mapping. " + "Increase AHC_NSEG\n"); + + consumed++; + next_sg = sg + 1; + next_sg->addr = 0; + next_len = 0x100000000 - (addr & 0xFFFFFFFF); + len -= next_len; + next_len |= ((addr >> 8) + 0x1000000) & 0x7F000000; + next_sg->len = ahc_htole32(next_len); + } + len |= (addr >> 8) & 0x7F000000; + } + sg->len = ahc_htole32(len); + return (consumed); +} + /************************ Shutdown/halt/reboot hook ***************************/ #include #include @@ -736,9 +781,26 @@ map = malloc(sizeof(*map), M_DEVBUF, M_NOWAIT); if (map == NULL) return (ENOMEM); + /* + * Although we can dma data above 4GB, our + * "consistent" memory is below 4GB for + * space efficiency reasons (only need a 4byte + * address). For this reason, we have to reset + * our dma mask when doing allocations. + */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,3) + pci_set_dma_mask(ahc->dev_softc, 0xFFFFFFFF); +#else + ahc->dev_softc->dma_mask = 0xFFFFFFFF; +#endif *vaddr = pci_alloc_consistent(ahc->dev_softc, dmat->maxsize, &map->bus_addr); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,3) + pci_set_dma_mask(ahc->dev_softc, ahc->platform_data->hw_dma_mask); #else + ahc->dev_softc->dma_mask = ahc->platform_data->hw_dma_mask; +#endif +#else /* LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) */ /* * At least in 2.2.14, malloc is a slab allocator so all * allocations are aligned. We assume, for these kernel versions @@ -1131,6 +1193,15 @@ return (0); } +uint64_t +ahc_linux_get_memsize() +{ + struct sysinfo si; + + si_meminfo(&si); + return (si.totalram << PAGE_SHIFT); +} + /* * Find the smallest available unit number to use * for a new device. We don't just use a static @@ -1240,7 +1311,8 @@ return (ENOMEM); memset(ahc->platform_data, 0, sizeof(struct ahc_platform_data)); TAILQ_INIT(&ahc->platform_data->completeq); - LIST_INIT(&ahc->platform_data->device_runq); + TAILQ_INIT(&ahc->platform_data->device_runq); + ahc->platform_data->hw_dma_mask = 0xFFFFFFFF; ahc_lockinit(ahc); ahc_done_lockinit(ahc); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) @@ -1305,6 +1377,8 @@ dev = ahc_linux_get_device(ahc, devinfo->channel - 'A', devinfo->target, devinfo->lun, /*alloc*/FALSE); + if (dev == NULL) + return; was_queuing = dev->flags & (AHC_DEV_Q_BASIC|AHC_DEV_Q_TAGGED); now_queuing = alg != AHC_QUEUE_NONE; if ((dev->flags & AHC_DEV_FREEZE_TIL_EMPTY) == 0 @@ -1516,7 +1590,11 @@ } cmd->result = CAM_REQ_INPROG << 16; TAILQ_INSERT_TAIL(&dev->busyq, (struct ahc_cmd *)cmd, acmd_links.tqe); - ahc_linux_run_device_queue(ahc, dev); + if ((dev->flags & AHC_DEV_ON_RUN_LIST) == 0) { + TAILQ_INSERT_TAIL(&ahc->platform_data->device_runq, dev, links); + dev->flags |= AHC_DEV_ON_RUN_LIST; + ahc_linux_run_device_queues(ahc); + } ahc_unlock(ahc, &flags); return (0); } @@ -1532,6 +1610,9 @@ struct ahc_tmode_tstate *tstate; uint16_t mask; + if ((dev->flags & AHC_DEV_ON_RUN_LIST) != 0) + panic("running device on run list"); + while ((acmd = TAILQ_FIRST(&dev->busyq)) != NULL && dev->openings > 0 && dev->qfrozen == 0) { @@ -1540,11 +1621,9 @@ * running is because the whole controller Q is frozen. */ if (ahc->platform_data->qfrozen != 0) { - if ((dev->flags & AHC_DEV_ON_RUN_LIST) != 0) - return; - LIST_INSERT_HEAD(&ahc->platform_data->device_runq, - dev, links); + TAILQ_INSERT_TAIL(&ahc->platform_data->device_runq, + dev, links); dev->flags |= AHC_DEV_ON_RUN_LIST; return; } @@ -1552,14 +1631,10 @@ * Get an scb to use. */ if ((scb = ahc_get_scb(ahc)) == NULL) { - if ((dev->flags & AHC_DEV_ON_RUN_LIST) != 0) - panic("running device on run list"); - LIST_INSERT_HEAD(&ahc->platform_data->device_runq, + TAILQ_INSERT_TAIL(&ahc->platform_data->device_runq, dev, links); dev->flags |= AHC_DEV_ON_RUN_LIST; ahc->flags |= AHC_RESOURCE_SHORTAGE; - printf("%s: Temporary Resource Shortage\n", - ahc_name(ahc)); return; } TAILQ_REMOVE(&dev->busyq, acmd, acmd_links.tqe); @@ -1611,6 +1686,8 @@ } scb->platform_data->xfer_len = 0; + ahc_set_residual(scb, 0); + ahc_set_sense_residual(scb, 0); if (cmd->use_sg != 0) { struct ahc_dma_seg *sg; struct scatterlist *cur_seg; @@ -1623,13 +1700,22 @@ end_seg = cur_seg + nseg; /* Copy the segments into the SG list. */ sg = scb->sg_list; + /* + * The sg_count may be larger than nseg if + * a transfer crosses a 32bit page. + */ + scb->sg_count = 0; while(cur_seg < end_seg) { - sg->addr = ahc_htole32(sg_dma_address(cur_seg)); -/* XXX Add in the 5th byte of the address later.*/ - sg->len = ahc_htole32(sg_dma_len(cur_seg)); - scb->platform_data->xfer_len += - sg_dma_len(cur_seg); - sg++; + bus_addr_t addr; + bus_size_t len; + int consumed; + + addr = sg_dma_address(cur_seg); + len = sg_dma_len(cur_seg); + consumed = ahc_linux_map_seg(ahc, scb, + sg, addr, len); + sg += consumed; + scb->sg_count += consumed; cur_seg++; } sg--; @@ -1647,24 +1733,19 @@ */ scb->hscb->dataptr = scb->sg_list->addr; scb->hscb->datacnt = scb->sg_list->len; - - /* - * Remember the number of segments for later - * residual calculations. - */ - scb->sg_count = nseg; } else if (cmd->request_bufflen != 0) { struct ahc_dma_seg *sg; - uint32_t baddr; + bus_addr_t addr; sg = scb->sg_list; - baddr = pci_map_single(ahc->dev_softc, + addr = pci_map_single(ahc->dev_softc, cmd->request_buffer, cmd->request_bufflen, scsi_to_pci_dma_dir(cmd->sc_data_direction)); - sg->addr = ahc_htole32(baddr); - sg->len = ahc_htole32(cmd->request_bufflen - | AHC_DMA_LAST_SEG); + scb->sg_count = ahc_linux_map_seg(ahc, scb, + sg, addr, + cmd->request_bufflen); + sg->len |= ahc_htole32(AHC_DMA_LAST_SEG); /* * Reset the sg list pointer. @@ -1678,13 +1759,6 @@ */ scb->hscb->dataptr = sg->addr; scb->hscb->datacnt = sg->len; - scb->platform_data->xfer_len = cmd->request_bufflen; - - /* - * Remember the number of segments for later - * residual calculations. - */ - scb->sg_count = 1; } else { scb->hscb->sgptr = ahc_htole32(SG_LIST_NULL); scb->hscb->dataptr = 0; @@ -1692,6 +1766,7 @@ scb->sg_count = 0; } + ahc_sync_sglist(ahc, scb, BUS_DMASYNC_PREWRITE); LIST_INSERT_HEAD(&ahc->pending_scbs, scb, pending_links); dev->openings--; dev->active++; @@ -1936,7 +2011,10 @@ break; case AC_BUS_RESET: #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) - scsi_report_bus_reset(ahc->platform_data->host, channel - 'A'); + if (ahc->platform_data->host != NULL) { + scsi_report_bus_reset(ahc->platform_data->host, + channel - 'A'); + } #endif break; default: @@ -1978,6 +2056,15 @@ memcpy(cmd->sense_buffer, ahc_get_sense_buf(ahc, scb), MIN(sizeof(struct scsi_sense_data), sizeof(cmd->sense_buffer))); + cmd->result |= (DRIVER_SENSE << 24); + } else { + /* + * Guard against stale sense data. + * The Linux mid-layer assumes that sense + * was retrieved anytime the first byte of + * the sense buffer looks "sane". + */ + cmd->sense_buffer[0] = 0; } if (ahc_get_transaction_status(scb) == CAM_REQ_INPROG) { uint32_t amount_xferred; @@ -1992,7 +2079,7 @@ ahc_set_transaction_status(scb, CAM_DATA_RUN_ERR); } else { ahc_set_transaction_status(scb, CAM_REQ_CMP); - ahc_linux_sniff_command(ahc, cmd); + ahc_linux_sniff_command(ahc, cmd, scb); } } else if (ahc_get_transaction_status(scb) == DID_OK) { ahc_linux_handle_scsi_status(ahc, dev, scb); @@ -2031,7 +2118,7 @@ && dev->active == 0) ahc_linux_free_device(ahc, dev); } else if ((dev->flags & AHC_DEV_ON_RUN_LIST) == 0) { - LIST_INSERT_HEAD(&ahc->platform_data->device_runq, dev, links); + TAILQ_INSERT_TAIL(&ahc->platform_data->device_runq, dev, links); dev->flags |= AHC_DEV_ON_RUN_LIST; } @@ -2127,12 +2214,13 @@ } static void -ahc_linux_filter_command(struct ahc_softc *ahc, Scsi_Cmnd *cmd) +ahc_linux_filter_command(struct ahc_softc *ahc, Scsi_Cmnd *cmd, struct scb *scb) { switch (cmd->cmnd[0]) { case INQUIRY: { struct ahc_devinfo devinfo; + struct scsi_inquiry *inq; struct scsi_inquiry_data *sid; struct ahc_initiator_tinfo *targ_info; struct ahc_tmode_tstate *tstate; @@ -2140,17 +2228,30 @@ struct ahc_linux_device *dev; u_int scsiid; u_int maxsync; + int transferred_len; int minlen; u_int width; u_int period; u_int offset; u_int ppr_options; + /* + * Validate the command. We only want to filter + * standard inquiry commands, not those querying + * Vital Product Data. + */ + inq = (struct scsi_inquiry *)cmd->cmnd; + if ((inq->byte2 & SI_EVPD) != 0 + || inq->page_code != 0) + break; + if (cmd->use_sg != 0) { printf("%s: SG Inquiry response ignored\n", ahc_name(ahc)); break; } + transferred_len = ahc_get_transfer_length(scb) + - ahc_get_residual(scb); sid = (struct scsi_inquiry_data *)cmd->request_buffer; /* @@ -2163,7 +2264,7 @@ dev = ahc_linux_get_device(ahc, cmd->channel, cmd->target, cmd->lun, /*alloc*/FALSE); - if (cmd->request_bufflen >= 1 + if (transferred_len >= 1 && SID_QUAL(sid) == SID_QUAL_LU_CONNECTED) { dev->flags &= ~AHC_DEV_UNCONFIGURED; @@ -2184,13 +2285,12 @@ targ_info = ahc_fetch_transinfo(ahc, devinfo.channel, devinfo.our_scsiid, devinfo.target, &tstate); - /* Structure copy */ width = targ_info->user.width; period = targ_info->user.period; offset = targ_info->user.offset; ppr_options = targ_info->user.ppr_options; minlen = offsetof(struct scsi_inquiry_data, version) + 1; - if (cmd->request_bufflen >= minlen) { + if (transferred_len >= minlen) { targ_info->curr.protocol_version = SID_ANSI_REV(sid); /* @@ -2206,7 +2306,7 @@ } minlen = offsetof(struct scsi_inquiry_data, flags) + 1; - if (cmd->request_bufflen >= minlen + if (transferred_len >= minlen && (sid->additional_length + 4) >= minlen) { if ((sid->flags & SID_WBus16) == 0) width = MSG_EXT_WDTR_BUS_8_BIT; @@ -2231,7 +2331,7 @@ * available. */ if ((sid->additional_length + 4) >= minlen) { - if (cmd->request_bufflen >= minlen + if (transferred_len >= minlen && (sid->spi3data & SID_SPI_CLOCK_DT) == 0) ppr_options = 0; diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c Sun Aug 12 17:37:53 2001 @@ -1,7 +1,7 @@ /* * Linux driver attachment glue for PCI based controllers. * - * Copyright (c) 2000 Adaptec Inc. + * Copyright (c) 2000, 2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -14,7 +14,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c#17 $ + * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c#23 $ */ #include "aic7xxx_osm.h" @@ -42,13 +42,9 @@ static int ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) -#include - static void ahc_linux_pci_dev_remove(struct pci_dev *pdev); -/* We do our own ID filtering. So we grab all Adaptec SCSI storage class - * devices here. - */ +/* We do our own ID filtering. So, grab all SCSI storage class devices. */ static struct pci_device_id ahc_linux_pci_id_table[] = { { 0x9004, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, @@ -60,7 +56,6 @@ }, { 0 } }; -MODULE_DEVICE_TABLE(pci,ahc_linux_pci_id_table); struct pci_driver aic7xxx_pci_driver = { name: "aic7xxx", @@ -127,6 +122,22 @@ return (-ENODEV); } pci_set_master(pdev); + + if (sizeof(bus_addr_t) > 4 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,3) + && ahc_linux_get_memsize() > 0x80000000 + && pci_set_dma_mask(pdev, 0x7FFFFFFFFFULL) == 0) { +#else + && ahc_linux_get_memsize() > 0x80000000) { + ahc->dev_softc->dma_mask = + (bus_addr_t)(0x7FFFFFFFFFULL + & ((1ULL << (sizeof(bus_addr_t) * 8))-1)); +#endif + ahc->flags |= AHC_39BIT_ADDRESSING; + ahc->platform_data->hw_dma_mask = + (bus_addr_t)(0x7FFFFFFFFFULL + & ((1ULL << (sizeof(bus_addr_t) * 8))-1)); + } #endif ahc->dev_softc = pci; ahc->platform_data->irq = pdev->irq; @@ -196,9 +207,11 @@ { uint32_t command; u_long base; +#ifdef MMAPIO u_long start; u_long base_page; u_long base_offset; +#endif uint8_t *maddr; command = ahc_pci_read_config(ahc->dev_softc, PCIR_COMMAND, 4); diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h linux/drivers/scsi/aic7xxx/aic7xxx_osm.h --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_osm.h Sun Aug 12 10:51:42 2001 @@ -18,7 +18,7 @@ * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux.h#59 $ + * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux.h#65 $ * * Copyright (c) 2000, 2001 Adaptec Inc. * All rights reserved. @@ -47,7 +47,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux.h#59 $ + * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux.h#65 $ * */ #ifndef _AIC7XXX_LINUX_H_ @@ -58,7 +58,7 @@ #include #include #include -#include +#include #include #include @@ -159,6 +159,7 @@ */ #define BUS_SPACE_MAXADDR 0xFFFFFFFF +#define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF int ahc_dma_tag_create(struct ahc_softc *, bus_dma_tag_t /*parent*/, @@ -188,8 +189,23 @@ int ahc_dmamap_unload(struct ahc_softc *, bus_dma_tag_t, bus_dmamap_t); -/* XXX May do selective memory barrier operations on certain platforms */ -#define ahc_dmamap_sync(ahc, dma_tag, dmamap, op) +/* + * Operations performed by ahc_dmamap_sync(). + */ +#define BUS_DMASYNC_PREREAD 0x01 /* pre-read synchronization */ +#define BUS_DMASYNC_POSTREAD 0x02 /* post-read synchronization */ +#define BUS_DMASYNC_PREWRITE 0x04 /* pre-write synchronization */ +#define BUS_DMASYNC_POSTWRITE 0x08 /* post-write synchronization */ + +/* + * XXX + * ahc_dmamap_sync is only used on buffers allocated with + * the pci_alloc_consistent() API. Although I'm not sure how + * this works on architectures with a write buffer, Linux does + * not have an API to sync "coherent" memory. Perhaps we need + * to do an mb()? + */ +#define ahc_dmamap_sync(ahc, dma_tag, dmamap, offset, len, op) /************************** SCSI Constants/Structures *************************/ #define SCSI_REV_2 2 @@ -230,6 +246,17 @@ uint8_t extra_bytes[14]; }; +struct scsi_inquiry +{ + u_int8_t opcode; + u_int8_t byte2; +#define SI_EVPD 0x01 + u_int8_t page_code; + u_int8_t reserved; + u_int8_t length; + u_int8_t control; +}; + struct scsi_inquiry_data { uint8_t device; @@ -349,7 +376,7 @@ #include #endif -#define AIC7XXX_DRIVER_VERSION "6.1.13" +#define AIC7XXX_DRIVER_VERSION "6.2.1" /**************************** Front End Queues ********************************/ /* @@ -400,7 +427,7 @@ struct ahc_linux_target; struct ahc_linux_device { - LIST_ENTRY(ahc_linux_device) links; + TAILQ_ENTRY(ahc_linux_device) links; struct ahc_busyq busyq; /* @@ -513,7 +540,7 @@ * Fields accessed from interrupt context. */ struct ahc_linux_target *targets[AHC_NUM_TARGETS]; - LIST_HEAD(, ahc_linux_device) device_runq; + TAILQ_HEAD(, ahc_linux_device) device_runq; struct ahc_completeq completeq; #if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,0) @@ -526,6 +553,7 @@ uint32_t irq; /* IRQ for this adapter */ uint32_t bios_address; uint32_t mem_busaddr; /* Mem Base Addr */ + bus_addr_t hw_dma_mask; }; /************************** OS Utility Wrappers *******************************/ @@ -552,26 +580,8 @@ /***************************** Low Level I/O **********************************/ -#if defined(__powerpc__) -#define MMAPIO -#ifdef mb -#undef mb -#endif -#define mb() \ - __asm__ __volatile__("eieio" ::: "memory") -#elif defined(__i386__) +#if defined(__powerpc__) || defined(__i386__) || defined(__ia64__) #define MMAPIO -#ifdef mb -#undef mb -#endif -#define mb() \ - do { ; } while(0) -#elif defined(__alpha__) -#ifdef mb -#undef mb -#endif -#define mb() \ - __asm__ __volatile__("mb": : :"memory") #endif static __inline uint8_t ahc_inb(struct ahc_softc * ahc, long port); @@ -643,8 +653,10 @@ } /**************************** Initialization **********************************/ -int ahc_linux_register_host(struct ahc_softc *, - Scsi_Host_Template *); +int ahc_linux_register_host(struct ahc_softc *, + Scsi_Host_Template *); + +uint64_t ahc_linux_get_memsize(void); /*************************** Pretty Printing **********************************/ struct info_str { @@ -846,6 +858,7 @@ default: panic("ahc_pci_read_config: Read size too big"); /* NOTREACHED */ + return (0); } } diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_pci.c linux/drivers/scsi/aic7xxx/aic7xxx_pci.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_pci.c Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_pci.c Sun Aug 12 17:37:53 2001 @@ -16,7 +16,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aic7xxx_pci.c#24 $ + * $Id: //depot/src/aic7xxx/aic7xxx_pci.c#28 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx_pci.c,v 1.6 2000/11/10 20:13:41 gibbs Exp $ */ @@ -628,9 +628,10 @@ #define DEVCONFIG 0x40 #define SCBSIZE32 0x00010000ul /* aic789X only */ #define REXTVALID 0x00001000ul /* ultra cards only */ -#define MPORTMODE 0x00000400ul /* aic7870 only */ -#define RAMPSM 0x00000200ul /* aic7870 only */ +#define MPORTMODE 0x00000400ul /* aic7870+ only */ +#define RAMPSM 0x00000200ul /* aic7870+ only */ #define VOLSENSE 0x00000100ul +#define PCI64BIT 0x00000080ul /* 64Bit PCI bus (Ultra2 Only)*/ #define SCBRAMSEL 0x00000080ul #define MRDCEN 0x00000040ul #define EXTSCBTIME 0x00000020ul /* aic7870 only */ @@ -693,9 +694,16 @@ subdevice, subvendor); - /* If the second function is not hooked up, ignore it. */ + /* + * If the second function is not hooked up, ignore it. + * Unfortunately, not all MB vendors implement the + * subdevice ID as per the Adaptec spec, so do our best + * to sanity check it prior to accepting the subdevice + * ID as valid. + */ if (ahc_get_pci_function(pci) > 0 && subvendor == 0x9005 + && subdevice != device && SUBID_9005_TYPE_KNOWN(subdevice) != 0 && SUBID_9005_MFUNCENB(subdevice) == 0) return (NULL); @@ -715,7 +723,6 @@ int ahc_pci_config(struct ahc_softc *ahc, struct ahc_pci_identity *entry) { - struct ahc_probe_config probe_config; struct scb_data *shared_scb_data; u_int command; u_int our_id = 0; @@ -726,12 +733,11 @@ uint8_t sblkctl; shared_scb_data = NULL; - ahc_init_probe_config(&probe_config); - error = entry->setup(ahc->dev_softc, &probe_config); + error = entry->setup(ahc); if (error != 0) return (error); - probe_config.chip |= AHC_PCI; - probe_config.description = entry->name; + ahc->chip |= AHC_PCI; + ahc->description = entry->name; error = ahc_pci_map_registers(ahc); if (error != 0) @@ -739,15 +745,34 @@ ahc_power_state_change(ahc, AHC_POWER_STATE_D0); + /* + * If we need to support high memory, enable dual + * address cycles. This bit must be set to enable + * high address bit generation even if we are on a + * 64bit bus (PCI64BIT set in devconfig). + */ + if ((ahc->flags & AHC_39BIT_ADDRESSING) != 0) { + uint32_t devconfig; + + if (bootverbose) + printf("%s: Enabling 39Bit Addressing\n", + ahc_name(ahc)); + devconfig = ahc_pci_read_config(ahc->dev_softc, + DEVCONFIG, /*bytes*/4); + devconfig |= DACEN; + ahc_pci_write_config(ahc->dev_softc, DEVCONFIG, + devconfig, /*bytes*/4); + } + /* Ensure busmastering is enabled */ command = ahc_pci_read_config(ahc->dev_softc, PCIR_COMMAND, /*bytes*/1); command |= PCIM_CMD_BUSMASTEREN; ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND, command, /*bytes*/1); /* On all PCI adapters, we allow SCB paging */ - probe_config.flags |= AHC_PAGESCBS; + ahc->flags |= AHC_PAGESCBS; - error = ahc_softc_init(ahc, &probe_config); + error = ahc_softc_init(ahc); if (error != 0) return (error); @@ -815,6 +840,14 @@ /*bytes*/1) & CACHESIZE; ahc->pci_cachesize *= 4; + if ((ahc->bugs & AHC_PCI_2_1_RETRY_BUG) != 0 + && ahc->pci_cachesize == 4) { + + ahc_pci_write_config(ahc->dev_softc, CSIZE_LATTIME, + 0, /*bytes*/1); + ahc->pci_cachesize = 0; + } + /* * We cannot perform ULTRA speeds without the presense * of the external precision resistor. @@ -1764,14 +1797,15 @@ printf("%s: Data Parity Error has been reported via PERR#\n", ahc_name(ahc)); } - if ((status1 & (DPE|SSE|RMA|RTA|STA|DPR)) == 0) { - printf("%s: Latched PCIERR interrupt with " - "no status bits set\n", ahc_name(ahc)); - } + + /* Clear latched errors. */ ahc_pci_write_config(ahc->dev_softc, PCIR_STATUS + 1, status1, /*bytes*/1); - if (status1 & (DPR|RMA|RTA)) { + if ((status1 & (DPE|SSE|RMA|RTA|STA|DPR)) == 0) { + printf("%s: Latched PCIERR interrupt with " + "no status bits set\n", ahc_name(ahc)); + } else { ahc_outb(ahc, CLRINT, CLRPARERR); } @@ -1779,187 +1813,204 @@ } static int -ahc_aic785X_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aic785X_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; uint8_t rev; - probe_config->channel = 'A'; - probe_config->chip = AHC_AIC7850; - probe_config->features = AHC_AIC7850_FE; - probe_config->bugs |= AHC_TMODE_WIDEODD_BUG|AHC_CACHETHEN_BUG - | AHC_PCI_MWI_BUG; + pci = ahc->dev_softc; + ahc->channel = 'A'; + ahc->chip = AHC_AIC7850; + ahc->features = AHC_AIC7850_FE; + ahc->bugs |= AHC_TMODE_WIDEODD_BUG|AHC_CACHETHEN_BUG|AHC_PCI_MWI_BUG; rev = ahc_pci_read_config(pci, PCIR_REVID, /*bytes*/1); if (rev >= 1) - probe_config->bugs |= AHC_PCI_2_1_RETRY_BUG; + ahc->bugs |= AHC_PCI_2_1_RETRY_BUG; return (0); } static int -ahc_aic7860_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aic7860_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; uint8_t rev; - probe_config->channel = 'A'; - probe_config->chip = AHC_AIC7860; - probe_config->features = AHC_AIC7860_FE; - probe_config->bugs |= AHC_TMODE_WIDEODD_BUG|AHC_CACHETHEN_BUG - | AHC_PCI_MWI_BUG; + pci = ahc->dev_softc; + ahc->channel = 'A'; + ahc->chip = AHC_AIC7860; + ahc->features = AHC_AIC7860_FE; + ahc->bugs |= AHC_TMODE_WIDEODD_BUG|AHC_CACHETHEN_BUG|AHC_PCI_MWI_BUG; rev = ahc_pci_read_config(pci, PCIR_REVID, /*bytes*/1); if (rev >= 1) - probe_config->bugs |= AHC_PCI_2_1_RETRY_BUG; + ahc->bugs |= AHC_PCI_2_1_RETRY_BUG; return (0); } static int -ahc_apa1480_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_apa1480_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; int error; - error = ahc_aic7860_setup(pci, probe_config); + pci = ahc->dev_softc; + error = ahc_aic7860_setup(ahc); if (error != 0) return (error); - probe_config->features |= AHC_REMOVABLE; + ahc->features |= AHC_REMOVABLE; return (0); } static int -ahc_aic7870_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aic7870_setup(struct ahc_softc *ahc) { - probe_config->channel = 'A'; - probe_config->chip = AHC_AIC7870; - probe_config->features = AHC_AIC7870_FE; - probe_config->bugs |= AHC_TMODE_WIDEODD_BUG|AHC_CACHETHEN_BUG - | AHC_PCI_MWI_BUG; + ahc_dev_softc_t pci; + + pci = ahc->dev_softc; + ahc->channel = 'A'; + ahc->chip = AHC_AIC7870; + ahc->features = AHC_AIC7870_FE; + ahc->bugs |= AHC_TMODE_WIDEODD_BUG|AHC_CACHETHEN_BUG|AHC_PCI_MWI_BUG; return (0); } static int -ahc_aha394X_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha394X_setup(struct ahc_softc *ahc) { int error; - error = ahc_aic7870_setup(pci, probe_config); + error = ahc_aic7870_setup(ahc); if (error == 0) - error = ahc_aha394XX_setup(pci, probe_config); + error = ahc_aha394XX_setup(ahc); return (error); } static int -ahc_aha398X_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha398X_setup(struct ahc_softc *ahc) { int error; - error = ahc_aic7870_setup(pci, probe_config); + error = ahc_aic7870_setup(ahc); if (error == 0) - error = ahc_aha398XX_setup(pci, probe_config); + error = ahc_aha398XX_setup(ahc); return (error); } static int -ahc_aha494X_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha494X_setup(struct ahc_softc *ahc) { int error; - error = ahc_aic7870_setup(pci, probe_config); + error = ahc_aic7870_setup(ahc); if (error == 0) - error = ahc_aha494XX_setup(pci, probe_config); + error = ahc_aha494XX_setup(ahc); return (error); } static int -ahc_aic7880_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aic7880_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; uint8_t rev; - probe_config->channel = 'A'; - probe_config->chip = AHC_AIC7880; - probe_config->features = AHC_AIC7880_FE; - probe_config->bugs |= AHC_TMODE_WIDEODD_BUG; + pci = ahc->dev_softc; + ahc->channel = 'A'; + ahc->chip = AHC_AIC7880; + ahc->features = AHC_AIC7880_FE; + ahc->bugs |= AHC_TMODE_WIDEODD_BUG; rev = ahc_pci_read_config(pci, PCIR_REVID, /*bytes*/1); if (rev >= 1) { - probe_config->bugs |= AHC_PCI_2_1_RETRY_BUG; + ahc->bugs |= AHC_PCI_2_1_RETRY_BUG; } else { - probe_config->bugs |= AHC_CACHETHEN_BUG|AHC_PCI_MWI_BUG; + ahc->bugs |= AHC_CACHETHEN_BUG|AHC_PCI_MWI_BUG; } return (0); } static int -ahc_aha2940Pro_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha2940Pro_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; int error; - probe_config->flags |= AHC_INT50_SPEEDFLEX; - error = ahc_aic7880_setup(pci, probe_config); + pci = ahc->dev_softc; + ahc->flags |= AHC_INT50_SPEEDFLEX; + error = ahc_aic7880_setup(ahc); return (0); } static int -ahc_aha394XU_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha394XU_setup(struct ahc_softc *ahc) { int error; - error = ahc_aic7880_setup(pci, probe_config); + error = ahc_aic7880_setup(ahc); if (error == 0) - error = ahc_aha394XX_setup(pci, probe_config); + error = ahc_aha394XX_setup(ahc); return (error); } static int -ahc_aha398XU_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha398XU_setup(struct ahc_softc *ahc) { int error; - error = ahc_aic7880_setup(pci, probe_config); + error = ahc_aic7880_setup(ahc); if (error == 0) - error = ahc_aha398XX_setup(pci, probe_config); + error = ahc_aha398XX_setup(ahc); return (error); } static int -ahc_aic7890_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aic7890_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; uint8_t rev; - probe_config->channel = 'A'; - probe_config->chip = AHC_AIC7890; - probe_config->features = AHC_AIC7890_FE; - probe_config->flags |= AHC_NEWEEPROM_FMT; + pci = ahc->dev_softc; + ahc->channel = 'A'; + ahc->chip = AHC_AIC7890; + ahc->features = AHC_AIC7890_FE; + ahc->flags |= AHC_NEWEEPROM_FMT; rev = ahc_pci_read_config(pci, PCIR_REVID, /*bytes*/1); if (rev == 0) - probe_config->bugs |= AHC_AUTOFLUSH_BUG|AHC_CACHETHEN_BUG; + ahc->bugs |= AHC_AUTOFLUSH_BUG|AHC_CACHETHEN_BUG; return (0); } static int -ahc_aic7892_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aic7892_setup(struct ahc_softc *ahc) { - probe_config->channel = 'A'; - probe_config->chip = AHC_AIC7892; - probe_config->features = AHC_AIC7892_FE; - probe_config->flags |= AHC_NEWEEPROM_FMT; - probe_config->bugs |= AHC_SCBCHAN_UPLOAD_BUG; + ahc_dev_softc_t pci; + + pci = ahc->dev_softc; + ahc->channel = 'A'; + ahc->chip = AHC_AIC7892; + ahc->features = AHC_AIC7892_FE; + ahc->flags |= AHC_NEWEEPROM_FMT; + ahc->bugs |= AHC_SCBCHAN_UPLOAD_BUG; return (0); } static int -ahc_aic7895_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aic7895_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; uint8_t rev; - probe_config->channel = ahc_get_pci_function(pci) == 1 ? 'B' : 'A'; + pci = ahc->dev_softc; + ahc->channel = ahc_get_pci_function(pci) == 1 ? 'B' : 'A'; /* * The 'C' revision of the aic7895 has a few additional features. */ rev = ahc_pci_read_config(pci, PCIR_REVID, /*bytes*/1); if (rev >= 4) { - probe_config->chip = AHC_AIC7895C; - probe_config->features = AHC_AIC7895C_FE; + ahc->chip = AHC_AIC7895C; + ahc->features = AHC_AIC7895C_FE; } else { u_int command; - probe_config->chip = AHC_AIC7895; - probe_config->features = AHC_AIC7895_FE; + ahc->chip = AHC_AIC7895; + ahc->features = AHC_AIC7895_FE; /* * The BIOS disables the use of MWI transactions @@ -1970,14 +2021,14 @@ command = ahc_pci_read_config(pci, PCIR_COMMAND, /*bytes*/1); command |= PCIM_CMD_MWRICEN; ahc_pci_write_config(pci, PCIR_COMMAND, command, /*bytes*/1); - probe_config->bugs |= AHC_PCI_MWI_BUG; + ahc->bugs |= AHC_PCI_MWI_BUG; } /* * XXX Does CACHETHEN really not work??? What about PCI retry? * on C level chips. Need to test, but for now, play it safe. */ - probe_config->bugs |= AHC_TMODE_WIDEODD_BUG|AHC_PCI_2_1_RETRY_BUG - | AHC_CACHETHEN_BUG; + ahc->bugs |= AHC_TMODE_WIDEODD_BUG|AHC_PCI_2_1_RETRY_BUG + | AHC_CACHETHEN_BUG; #if 0 uint32_t devconfig; @@ -1991,116 +2042,131 @@ devconfig |= MRDCEN; ahc_pci_write_config(pci, DEVCONFIG, devconfig, /*bytes*/1); #endif - probe_config->flags |= AHC_NEWEEPROM_FMT; + ahc->flags |= AHC_NEWEEPROM_FMT; return (0); } static int -ahc_aic7896_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aic7896_setup(struct ahc_softc *ahc) { - probe_config->channel = ahc_get_pci_function(pci) == 1 ? 'B' : 'A'; - probe_config->chip = AHC_AIC7896; - probe_config->features = AHC_AIC7896_FE; - probe_config->flags |= AHC_NEWEEPROM_FMT; - probe_config->bugs |= AHC_CACHETHEN_DIS_BUG; + ahc_dev_softc_t pci; + + pci = ahc->dev_softc; + ahc->channel = ahc_get_pci_function(pci) == 1 ? 'B' : 'A'; + ahc->chip = AHC_AIC7896; + ahc->features = AHC_AIC7896_FE; + ahc->flags |= AHC_NEWEEPROM_FMT; + ahc->bugs |= AHC_CACHETHEN_DIS_BUG; return (0); } static int -ahc_aic7899_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aic7899_setup(struct ahc_softc *ahc) { - probe_config->channel = ahc_get_pci_function(pci) == 1 ? 'B' : 'A'; - probe_config->chip = AHC_AIC7899; - probe_config->features = AHC_AIC7899_FE; - probe_config->flags |= AHC_NEWEEPROM_FMT; - probe_config->bugs |= AHC_SCBCHAN_UPLOAD_BUG; + ahc_dev_softc_t pci; + + pci = ahc->dev_softc; + ahc->channel = ahc_get_pci_function(pci) == 1 ? 'B' : 'A'; + ahc->chip = AHC_AIC7899; + ahc->features = AHC_AIC7899_FE; + ahc->flags |= AHC_NEWEEPROM_FMT; + ahc->bugs |= AHC_SCBCHAN_UPLOAD_BUG; return (0); } static int -ahc_aha29160C_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha29160C_setup(struct ahc_softc *ahc) { int error; - error = ahc_aic7899_setup(pci, probe_config); + error = ahc_aic7899_setup(ahc); if (error != 0) return (error); - probe_config->features |= AHC_REMOVABLE; + ahc->features |= AHC_REMOVABLE; return (0); } static int -ahc_raid_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_raid_setup(struct ahc_softc *ahc) { printf("RAID functionality unsupported\n"); return (ENXIO); } static int -ahc_aha394XX_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha394XX_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; + + pci = ahc->dev_softc; switch (ahc_get_pci_slot(pci)) { case AHC_394X_SLOT_CHANNEL_A: - probe_config->channel = 'A'; + ahc->channel = 'A'; break; case AHC_394X_SLOT_CHANNEL_B: - probe_config->channel = 'B'; + ahc->channel = 'B'; break; default: printf("adapter at unexpected slot %d\n" "unable to map to a channel\n", ahc_get_pci_slot(pci)); - probe_config->channel = 'A'; + ahc->channel = 'A'; } return (0); } static int -ahc_aha398XX_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha398XX_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; + + pci = ahc->dev_softc; switch (ahc_get_pci_slot(pci)) { case AHC_398X_SLOT_CHANNEL_A: - probe_config->channel = 'A'; + ahc->channel = 'A'; break; case AHC_398X_SLOT_CHANNEL_B: - probe_config->channel = 'B'; + ahc->channel = 'B'; break; case AHC_398X_SLOT_CHANNEL_C: - probe_config->channel = 'C'; + ahc->channel = 'C'; break; default: printf("adapter at unexpected slot %d\n" "unable to map to a channel\n", ahc_get_pci_slot(pci)); - probe_config->channel = 'A'; + ahc->channel = 'A'; break; } - probe_config->flags |= AHC_LARGE_SEEPROM; + ahc->flags |= AHC_LARGE_SEEPROM; return (0); } static int -ahc_aha494XX_setup(ahc_dev_softc_t pci, struct ahc_probe_config *probe_config) +ahc_aha494XX_setup(struct ahc_softc *ahc) { + ahc_dev_softc_t pci; + + pci = ahc->dev_softc; switch (ahc_get_pci_slot(pci)) { case AHC_494X_SLOT_CHANNEL_A: - probe_config->channel = 'A'; + ahc->channel = 'A'; break; case AHC_494X_SLOT_CHANNEL_B: - probe_config->channel = 'B'; + ahc->channel = 'B'; break; case AHC_494X_SLOT_CHANNEL_C: - probe_config->channel = 'C'; + ahc->channel = 'C'; break; case AHC_494X_SLOT_CHANNEL_D: - probe_config->channel = 'D'; + ahc->channel = 'D'; break; default: printf("adapter at unexpected slot %d\n" "unable to map to a channel\n", ahc_get_pci_slot(pci)); - probe_config->channel = 'A'; + ahc->channel = 'A'; } - probe_config->flags |= AHC_LARGE_SEEPROM; + ahc->flags |= AHC_LARGE_SEEPROM; return (0); } diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_proc.c linux/drivers/scsi/aic7xxx/aic7xxx_proc.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_proc.c Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_proc.c Sun Aug 12 17:37:53 2001 @@ -12,7 +12,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_reg.h linux/drivers/scsi/aic7xxx/aic7xxx_reg.h --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_reg.h Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_reg.h Sun Aug 12 10:51:42 2001 @@ -1,6 +1,10 @@ /* - * DO NOT EDIT - This file is automatically generated. - */ + * DO NOT EDIT - This file is automatically generated + * from the following source files: + * + * $Id: //depot/src/aic7xxx/aic7xxx.seq#33 $ + * $Id: //depot/src/aic7xxx/aic7xxx.reg#19 $ + */ #define SCSISEQ 0x00 #define TEMODE 0x80 @@ -408,6 +412,11 @@ #define BOFF 0xf0 #define BON 0x0f +#define DSCOMMAND1 0x85 +#define DSLATT 0xfc +#define HADDLDSEL1 0x02 +#define HADDLDSEL0 0x01 + #define BUSSPD 0x86 #define DFTHRSH 0xc0 #define DFTHRSH_75 0x80 @@ -448,7 +457,7 @@ #define PERR_DETECTED 0x81 #define BAD_STATUS 0x71 #define HOST_MSG_LOOP 0x61 -#define RESIDUAL 0x51 +#define PDATA_REINIT 0x51 #define IGN_WIDE_RES 0x41 #define NO_MATCH 0x31 #define NO_IDENT 0x21 diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_seq.h linux/drivers/scsi/aic7xxx/aic7xxx_seq.h --- v2.4.8/linux/drivers/scsi/aic7xxx/aic7xxx_seq.h Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_seq.h Sun Aug 12 10:51:42 2001 @@ -1,10 +1,14 @@ /* - * DO NOT EDIT - This file is automatically generated. - */ + * DO NOT EDIT - This file is automatically generated + * from the following source files: + * + * $Id: //depot/src/aic7xxx/aic7xxx.seq#33 $ + * $Id: //depot/src/aic7xxx/aic7xxx.reg#19 $ + */ static uint8_t seqprog[] = { 0xb2, 0x00, 0x00, 0x08, 0xf7, 0x11, 0x22, 0x08, - 0x00, 0x65, 0xe4, 0x59, + 0x00, 0x65, 0xde, 0x59, 0xf7, 0x01, 0x02, 0x08, 0xff, 0x6a, 0x24, 0x08, 0x40, 0x00, 0x40, 0x68, @@ -17,15 +21,15 @@ 0x01, 0x4d, 0xc8, 0x30, 0x00, 0x4c, 0x12, 0x70, 0x01, 0x39, 0xa2, 0x30, - 0x00, 0x6a, 0x92, 0x5e, + 0x00, 0x6a, 0xa6, 0x5e, 0x01, 0x51, 0x20, 0x31, 0x01, 0x57, 0xae, 0x00, 0x0d, 0x6a, 0x76, 0x00, - 0x00, 0x51, 0xec, 0x5d, + 0x00, 0x51, 0xf8, 0x5d, 0x01, 0x51, 0xc8, 0x30, - 0x00, 0x39, 0xde, 0x60, + 0x00, 0x39, 0xd8, 0x60, 0x00, 0xbb, 0x30, 0x70, - 0xc1, 0x6a, 0xaa, 0x5e, + 0xc1, 0x6a, 0xbe, 0x5e, 0x01, 0xbf, 0x72, 0x30, 0x01, 0x40, 0x7e, 0x31, 0x01, 0x90, 0x80, 0x30, @@ -33,110 +37,107 @@ 0x01, 0x4d, 0x9a, 0x18, 0xfe, 0x57, 0xae, 0x08, 0x01, 0x40, 0x20, 0x31, - 0x00, 0x65, 0xe2, 0x58, + 0x00, 0x65, 0xdc, 0x58, 0x60, 0x0b, 0x40, 0x78, 0x08, 0x6a, 0x18, 0x00, 0x08, 0x11, 0x22, 0x00, 0x60, 0x0b, 0x00, 0x78, - 0x40, 0x0b, 0x12, 0x69, - 0x80, 0x0b, 0xcc, 0x78, + 0x40, 0x0b, 0x0c, 0x69, + 0x80, 0x0b, 0xc6, 0x78, 0x20, 0x6a, 0x16, 0x00, - 0x20, 0x11, 0x54, 0x68, - 0x20, 0x6a, 0x18, 0x00, - 0x20, 0x11, 0x22, 0x00, 0xa4, 0x6a, 0x06, 0x00, 0x08, 0x3c, 0x78, 0x00, 0x01, 0x50, 0xc8, 0x30, 0xe0, 0x6a, 0xcc, 0x00, - 0x48, 0x6a, 0xd6, 0x5d, + 0x48, 0x6a, 0xe2, 0x5d, 0x01, 0x6a, 0xdc, 0x01, 0x88, 0x6a, 0xcc, 0x00, - 0x48, 0x6a, 0xd6, 0x5d, + 0x48, 0x6a, 0xe2, 0x5d, 0x01, 0x6a, 0x26, 0x01, 0xf0, 0x19, 0x7a, 0x08, 0x0f, 0x18, 0xc8, 0x08, 0x0f, 0x0f, 0xc8, 0x08, 0x0f, 0x05, 0xc8, 0x08, 0x00, 0x3d, 0x7a, 0x00, - 0x08, 0x1f, 0x74, 0x78, + 0x08, 0x1f, 0x6e, 0x78, 0x80, 0x3d, 0x7a, 0x00, 0x01, 0x3d, 0xd8, 0x31, 0x01, 0x3d, 0x32, 0x31, - 0x10, 0x03, 0x5c, 0x79, - 0x00, 0x65, 0x0a, 0x59, - 0x80, 0x66, 0xa8, 0x78, + 0x10, 0x03, 0x56, 0x79, + 0x00, 0x65, 0x04, 0x59, + 0x80, 0x66, 0xa2, 0x78, 0x01, 0x66, 0xd8, 0x31, 0x01, 0x66, 0x32, 0x31, - 0x40, 0x66, 0x86, 0x68, + 0x40, 0x66, 0x80, 0x68, 0x01, 0x3c, 0x78, 0x00, - 0x10, 0x03, 0xb0, 0x78, - 0x00, 0x65, 0x0a, 0x59, + 0x10, 0x03, 0xaa, 0x78, + 0x00, 0x65, 0x04, 0x59, 0xe0, 0x66, 0xc8, 0x18, - 0x00, 0x65, 0xb0, 0x50, + 0x00, 0x65, 0xaa, 0x50, 0xdd, 0x66, 0xc8, 0x18, - 0x00, 0x65, 0xb0, 0x48, + 0x00, 0x65, 0xaa, 0x48, 0x01, 0x66, 0xd8, 0x31, 0x01, 0x66, 0x32, 0x31, - 0x10, 0x03, 0x5c, 0x79, - 0x00, 0x65, 0x0a, 0x59, + 0x10, 0x03, 0x56, 0x79, + 0x00, 0x65, 0x04, 0x59, 0x01, 0x66, 0xd8, 0x31, 0x01, 0x66, 0x32, 0x31, 0x01, 0x66, 0xac, 0x30, 0x40, 0x3c, 0x78, 0x00, - 0x10, 0x03, 0xa6, 0x78, - 0x00, 0x65, 0x0a, 0x59, - 0x00, 0x65, 0xb0, 0x40, - 0x61, 0x6a, 0xaa, 0x5e, - 0x08, 0x51, 0x34, 0x71, - 0x02, 0x0b, 0xac, 0x78, - 0x00, 0x65, 0xa8, 0x40, + 0x10, 0x03, 0xa0, 0x78, + 0x00, 0x65, 0x04, 0x59, + 0x00, 0x65, 0xaa, 0x40, + 0x61, 0x6a, 0xbe, 0x5e, + 0x08, 0x51, 0x2e, 0x71, + 0x02, 0x0b, 0xa6, 0x78, + 0x00, 0x65, 0xa2, 0x40, 0x80, 0x86, 0xc8, 0x08, 0x01, 0x4f, 0xc8, 0x30, - 0x00, 0x50, 0xc2, 0x60, - 0xc4, 0x6a, 0x44, 0x5d, - 0x40, 0x3c, 0xbe, 0x78, - 0x28, 0x6a, 0x5a, 0x5d, - 0x00, 0x65, 0x5a, 0x41, - 0x08, 0x6a, 0x5a, 0x5d, - 0x00, 0x65, 0x5a, 0x41, + 0x00, 0x50, 0xbc, 0x60, + 0xc4, 0x6a, 0x54, 0x5d, + 0x40, 0x3c, 0xb8, 0x78, + 0x28, 0x6a, 0x6a, 0x5d, + 0x00, 0x65, 0x54, 0x41, + 0x08, 0x6a, 0x6a, 0x5d, + 0x00, 0x65, 0x54, 0x41, 0xff, 0x6a, 0xd8, 0x01, 0xff, 0x6a, 0x32, 0x01, 0x90, 0x3c, 0x78, 0x00, - 0x10, 0x03, 0x50, 0x69, - 0x00, 0x65, 0x34, 0x41, + 0x10, 0x03, 0x4a, 0x69, + 0x00, 0x65, 0x2e, 0x41, 0x1a, 0x01, 0x02, 0x00, 0xf0, 0x19, 0x7a, 0x08, 0x0f, 0x0f, 0xc8, 0x08, 0x0f, 0x05, 0xc8, 0x08, 0x00, 0x3d, 0x7a, 0x00, - 0x08, 0x1f, 0xda, 0x78, + 0x08, 0x1f, 0xd4, 0x78, 0x80, 0x3d, 0x7a, 0x00, 0x20, 0x6a, 0x16, 0x00, - 0x00, 0x65, 0xc4, 0x41, - 0x00, 0x65, 0x8a, 0x5e, + 0x00, 0x65, 0xbe, 0x41, + 0x00, 0x65, 0x98, 0x5e, 0x00, 0x65, 0x12, 0x40, - 0x20, 0x11, 0xe8, 0x68, + 0x20, 0x11, 0xe2, 0x68, 0x20, 0x6a, 0x18, 0x00, 0x20, 0x11, 0x22, 0x00, 0xf7, 0x1f, 0xca, 0x08, - 0x80, 0xb9, 0xee, 0x78, + 0x80, 0xb9, 0xe8, 0x78, 0x08, 0x65, 0xca, 0x00, 0x01, 0x65, 0x3e, 0x30, 0x01, 0xb9, 0x1e, 0x30, 0x7f, 0xb9, 0x0a, 0x08, 0x01, 0xb9, 0x0a, 0x30, 0x01, 0x54, 0xca, 0x30, - 0x80, 0xb8, 0xfc, 0x78, + 0x80, 0xb8, 0xf6, 0x78, 0x80, 0x65, 0xca, 0x00, 0x01, 0x65, 0x00, 0x34, 0x01, 0x54, 0x00, 0x34, 0x1a, 0x01, 0x02, 0x00, - 0x08, 0xb8, 0x06, 0x79, + 0x08, 0xb8, 0x00, 0x79, 0x20, 0x01, 0x02, 0x00, 0x02, 0xbd, 0x08, 0x34, 0x01, 0xbd, 0x08, 0x34, 0x08, 0x01, 0x02, 0x00, - 0x02, 0x0b, 0x0c, 0x79, + 0x02, 0x0b, 0x06, 0x79, 0xf7, 0x01, 0x02, 0x08, 0x01, 0x06, 0xcc, 0x34, 0xb2, 0x00, 0x00, 0x08, @@ -145,105 +146,105 @@ 0x01, 0xbf, 0x80, 0x30, 0x01, 0xb9, 0x7a, 0x30, 0x01, 0xba, 0x7c, 0x30, - 0x00, 0x65, 0x00, 0x59, - 0x80, 0x0b, 0xc0, 0x79, - 0xe4, 0x6a, 0x44, 0x5d, - 0x80, 0xba, 0x5a, 0x5d, - 0x20, 0xb8, 0x2c, 0x79, - 0x20, 0x6a, 0x5a, 0x5d, - 0x00, 0xa3, 0x5a, 0x5d, + 0x00, 0x65, 0xfa, 0x58, + 0x80, 0x0b, 0xba, 0x79, + 0xe4, 0x6a, 0x54, 0x5d, + 0x80, 0xba, 0x6a, 0x5d, + 0x20, 0xb8, 0x26, 0x79, + 0x20, 0x6a, 0x6a, 0x5d, + 0x00, 0xa3, 0x6a, 0x5d, 0x01, 0xa0, 0x78, 0x30, - 0x10, 0xb8, 0x34, 0x79, - 0xe4, 0x6a, 0x44, 0x5d, - 0x00, 0x65, 0xa8, 0x40, - 0x10, 0x03, 0x4c, 0x69, - 0x08, 0x3c, 0x68, 0x69, - 0x04, 0x3c, 0x8e, 0x69, - 0x02, 0x3c, 0x94, 0x69, - 0x01, 0x3c, 0x52, 0x79, + 0x10, 0xb8, 0x2e, 0x79, + 0xe4, 0x6a, 0x54, 0x5d, + 0x00, 0x65, 0xa2, 0x40, + 0x10, 0x03, 0x46, 0x69, + 0x08, 0x3c, 0x62, 0x69, + 0x04, 0x3c, 0x88, 0x69, + 0x02, 0x3c, 0x8e, 0x69, + 0x01, 0x3c, 0x4c, 0x79, 0x01, 0x6a, 0xa2, 0x30, - 0x00, 0x65, 0xa0, 0x59, - 0x04, 0x51, 0x42, 0x61, - 0x00, 0x6a, 0x92, 0x5e, + 0x00, 0x65, 0x9a, 0x59, + 0x04, 0x51, 0x3c, 0x61, + 0x00, 0x6a, 0xa6, 0x5e, 0x0d, 0x6a, 0x76, 0x00, - 0x00, 0xbb, 0xec, 0x5d, - 0x00, 0x65, 0x2c, 0x41, + 0x00, 0xbb, 0xf8, 0x5d, + 0x00, 0x65, 0x26, 0x41, 0xa4, 0x6a, 0x06, 0x00, - 0x00, 0x65, 0x0a, 0x59, - 0x00, 0x65, 0xa8, 0x40, - 0xe4, 0x6a, 0x44, 0x5d, - 0x20, 0x3c, 0x58, 0x79, - 0x02, 0x6a, 0x5a, 0x5d, - 0x04, 0x6a, 0x5a, 0x5d, - 0x01, 0x03, 0x5a, 0x69, + 0x00, 0x65, 0x04, 0x59, + 0x00, 0x65, 0xa2, 0x40, + 0xe4, 0x6a, 0x54, 0x5d, + 0x20, 0x3c, 0x52, 0x79, + 0x02, 0x6a, 0x6a, 0x5d, + 0x04, 0x6a, 0x6a, 0x5d, + 0x01, 0x03, 0x54, 0x69, 0xf7, 0x11, 0x22, 0x08, 0xff, 0x6a, 0x24, 0x08, 0xff, 0x6a, 0x06, 0x08, 0x01, 0x6a, 0x7e, 0x00, - 0x00, 0x65, 0xa0, 0x59, + 0x00, 0x65, 0x9a, 0x59, 0x00, 0x65, 0x04, 0x40, - 0x84, 0x6a, 0x44, 0x5d, - 0x00, 0x65, 0x0a, 0x59, + 0x84, 0x6a, 0x54, 0x5d, + 0x00, 0x65, 0x04, 0x59, 0x01, 0x66, 0xc8, 0x30, 0x01, 0x64, 0xd8, 0x31, 0x01, 0x64, 0x32, 0x31, 0x5b, 0x64, 0xc8, 0x28, 0x30, 0x64, 0xca, 0x18, 0x01, 0x6c, 0xc8, 0x30, - 0xff, 0x64, 0x8a, 0x79, + 0xff, 0x64, 0x84, 0x79, 0x08, 0x01, 0x02, 0x00, - 0x02, 0x0b, 0x7c, 0x79, - 0x01, 0x64, 0x82, 0x61, + 0x02, 0x0b, 0x76, 0x79, + 0x01, 0x64, 0x7c, 0x61, 0xf7, 0x01, 0x02, 0x08, 0x01, 0x06, 0xd8, 0x31, 0x01, 0x06, 0x32, 0x31, 0xff, 0x64, 0xc8, 0x18, - 0xff, 0x64, 0x7c, 0x69, + 0xff, 0x64, 0x76, 0x69, 0xf7, 0x3c, 0x78, 0x08, - 0x00, 0x65, 0x34, 0x41, + 0x00, 0x65, 0x2e, 0x41, 0x40, 0xa1, 0x7e, 0x10, - 0x04, 0xa1, 0x44, 0x5d, - 0x00, 0x65, 0x68, 0x42, - 0xc4, 0x6a, 0x44, 0x5d, + 0x04, 0xa1, 0x54, 0x5d, + 0x00, 0x65, 0x50, 0x42, + 0xc4, 0x6a, 0x54, 0x5d, 0xc0, 0x6a, 0x7e, 0x00, - 0x00, 0xa2, 0x5a, 0x5d, + 0x00, 0xa2, 0x6a, 0x5d, 0xe4, 0x6a, 0x06, 0x00, - 0x00, 0x6a, 0x5a, 0x5d, - 0x00, 0x65, 0x5a, 0x41, - 0x10, 0x3c, 0xa4, 0x69, - 0x00, 0xbb, 0x6c, 0x44, + 0x00, 0x6a, 0x6a, 0x5d, + 0x00, 0x65, 0x54, 0x41, + 0x10, 0x3c, 0x9e, 0x69, + 0x00, 0xbb, 0x74, 0x44, 0x18, 0x6a, 0xda, 0x01, 0x01, 0x69, 0xd8, 0x31, 0x1c, 0x6a, 0xd0, 0x01, 0x09, 0xee, 0xdc, 0x01, - 0x80, 0xee, 0xac, 0x79, + 0x80, 0xee, 0xa6, 0x79, 0xff, 0x6a, 0xdc, 0x09, 0x01, 0x93, 0x26, 0x01, 0x03, 0x6a, 0x2a, 0x01, 0x01, 0x69, 0x32, 0x31, - 0x1c, 0x6a, 0xba, 0x5d, + 0x1c, 0x6a, 0xc6, 0x5d, 0x0a, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x80, 0x5e, + 0x00, 0x65, 0x8e, 0x5e, 0x01, 0x50, 0xa0, 0x18, 0x02, 0x6a, 0x22, 0x05, 0x80, 0x6a, 0x74, 0x00, 0x80, 0x3c, 0x78, 0x00, - 0x00, 0x65, 0xb2, 0x5d, + 0x00, 0x65, 0xbe, 0x5d, 0x01, 0x3f, 0xc8, 0x30, - 0xbf, 0x64, 0x68, 0x7a, - 0x80, 0x64, 0x96, 0x73, - 0xa0, 0x64, 0xf0, 0x73, - 0xc0, 0x64, 0xe6, 0x73, - 0xe0, 0x64, 0x20, 0x74, - 0x01, 0x6a, 0xaa, 0x5e, - 0x00, 0x65, 0xc4, 0x41, + 0xbf, 0x64, 0x50, 0x7a, + 0x80, 0x64, 0x9a, 0x73, + 0xa0, 0x64, 0xf8, 0x73, + 0xc0, 0x64, 0xec, 0x73, + 0xe0, 0x64, 0x28, 0x74, + 0x01, 0x6a, 0xbe, 0x5e, + 0x00, 0x65, 0xbe, 0x41, 0xf7, 0x11, 0x22, 0x08, 0x01, 0x06, 0xd4, 0x30, 0xff, 0x6a, 0x24, 0x08, 0xf7, 0x01, 0x02, 0x08, - 0x09, 0x0c, 0xde, 0x79, + 0x09, 0x0c, 0xd8, 0x79, 0x08, 0x0c, 0x04, 0x68, - 0xb1, 0x6a, 0xaa, 0x5e, + 0xb1, 0x6a, 0xbe, 0x5e, 0xff, 0x6a, 0x26, 0x09, 0x12, 0x01, 0x02, 0x00, 0x02, 0x6a, 0x08, 0x30, @@ -256,35 +257,33 @@ 0x00, 0xa5, 0x4a, 0x21, 0x00, 0xa6, 0x4c, 0x21, 0x00, 0xa7, 0x4e, 0x25, - 0x08, 0xeb, 0xae, 0x7e, - 0x80, 0xeb, 0xfe, 0x79, + 0x08, 0xeb, 0xc2, 0x7e, + 0x80, 0xeb, 0xf8, 0x79, 0xff, 0x6a, 0xd6, 0x09, - 0x08, 0xeb, 0x02, 0x6a, + 0x08, 0xeb, 0xfc, 0x69, 0xff, 0x6a, 0xd4, 0x0c, - 0x80, 0xa3, 0xae, 0x6e, - 0x88, 0xeb, 0x18, 0x72, - 0x08, 0xeb, 0xae, 0x6e, - 0x04, 0xea, 0x1c, 0xe2, - 0x08, 0xee, 0xae, 0x6e, + 0x80, 0xa3, 0xc2, 0x6e, + 0x88, 0xeb, 0x12, 0x72, + 0x08, 0xeb, 0xc2, 0x6e, + 0x04, 0xea, 0x16, 0xe2, + 0x08, 0xee, 0xc2, 0x6e, 0x04, 0x6a, 0xd0, 0x81, 0x05, 0xa4, 0xc0, 0x89, 0x03, 0xa5, 0xc2, 0x31, 0x09, 0x6a, 0xd6, 0x05, - 0x00, 0x65, 0x00, 0x5a, + 0x00, 0x65, 0xfa, 0x59, 0x06, 0xa4, 0xd4, 0x89, - 0x80, 0x94, 0xae, 0x7e, - 0x04, 0xe9, 0x10, 0x31, - 0x01, 0xe9, 0xca, 0x30, - 0x01, 0x65, 0x26, 0x7a, + 0x80, 0x94, 0xc2, 0x7e, + 0x07, 0xe9, 0x10, 0x31, + 0x01, 0x8c, 0x1e, 0x7a, 0x01, 0x55, 0xaa, 0x10, - 0x01, 0x65, 0x18, 0x31, - 0x02, 0xe9, 0x1a, 0x31, 0x01, 0xe9, 0x46, 0x31, - 0x00, 0x65, 0xf2, 0x59, + 0x00, 0xa3, 0xa0, 0x5e, + 0x00, 0x65, 0xec, 0x59, 0x01, 0xa4, 0xca, 0x30, - 0x01, 0x55, 0x34, 0x7a, + 0x01, 0x55, 0x2a, 0x7a, 0x04, 0x65, 0xca, 0x00, - 0x80, 0xa3, 0x38, 0x7a, + 0x80, 0xa3, 0x2e, 0x7a, 0x02, 0x65, 0xca, 0x00, 0x01, 0x65, 0xf8, 0x31, 0x80, 0x93, 0x26, 0x01, @@ -292,161 +291,168 @@ 0x01, 0x8c, 0xc8, 0x30, 0x00, 0x88, 0xc8, 0x18, 0x02, 0x64, 0xc8, 0x88, - 0xff, 0x64, 0xae, 0x7e, - 0xff, 0x8d, 0x4e, 0x6a, - 0xff, 0x8e, 0x4e, 0x6a, + 0xff, 0x64, 0xc2, 0x7e, + 0xff, 0x8d, 0x44, 0x6a, + 0xff, 0x8e, 0x44, 0x6a, 0x03, 0x8c, 0xd4, 0x98, - 0x00, 0x65, 0xae, 0x56, + 0x00, 0x65, 0xc2, 0x56, 0x01, 0x64, 0x70, 0x30, 0xff, 0x64, 0xc8, 0x10, 0x01, 0x64, 0xc8, 0x18, 0x00, 0x8c, 0x18, 0x19, 0xff, 0x8d, 0x1a, 0x21, 0xff, 0x8e, 0x1c, 0x25, - 0x04, 0x14, 0x10, 0x31, - 0x03, 0xa0, 0x18, 0x31, - 0x03, 0xa0, 0x10, 0x30, - 0x08, 0x6a, 0xcc, 0x00, - 0xa0, 0x6a, 0xd0, 0x5d, - 0x01, 0xa0, 0xaa, 0x08, - 0x00, 0x65, 0x8e, 0x42, + 0x80, 0x3c, 0x54, 0x6a, + 0x21, 0x6a, 0xbe, 0x46, 0xa8, 0x6a, 0x76, 0x00, 0x79, 0x6a, 0x76, 0x00, - 0x40, 0x3f, 0x70, 0x6a, + 0x40, 0x3f, 0x5c, 0x6a, 0x04, 0x3b, 0x76, 0x00, - 0x00, 0x65, 0x64, 0x5d, 0x04, 0x6a, 0xd4, 0x81, - 0x20, 0x3c, 0x5a, 0x6a, + 0x20, 0x3c, 0x64, 0x7a, + 0x51, 0x6a, 0xbe, 0x5e, + 0x00, 0x65, 0x7e, 0x42, 0x20, 0x3c, 0x78, 0x00, + 0x00, 0xb3, 0xa0, 0x5e, 0x07, 0xac, 0x10, 0x31, 0x05, 0xb3, 0x46, 0x31, 0x88, 0x6a, 0xcc, 0x00, - 0xac, 0x6a, 0xc8, 0x5d, + 0xac, 0x6a, 0xd4, 0x5d, 0xa3, 0x6a, 0xcc, 0x00, - 0xb3, 0x6a, 0xcc, 0x5d, - 0x00, 0x65, 0x3e, 0x5a, + 0xb3, 0x6a, 0xd8, 0x5d, + 0x00, 0x65, 0x34, 0x5a, 0xfd, 0xa4, 0x48, 0x09, 0x01, 0x8c, 0xaa, 0x08, 0x03, 0x8c, 0x10, 0x30, - 0x00, 0x65, 0xc0, 0x5d, - 0x01, 0xa4, 0xa0, 0x7a, + 0x00, 0x65, 0xcc, 0x5d, + 0x01, 0xa4, 0x90, 0x7a, 0x04, 0x3b, 0x76, 0x08, 0x01, 0x3b, 0x26, 0x31, 0x80, 0x02, 0x04, 0x00, - 0x10, 0x0c, 0x96, 0x7a, - 0x03, 0x9e, 0x98, 0x6a, + 0x10, 0x0c, 0x86, 0x7a, + 0x03, 0x9e, 0x88, 0x6a, 0x7f, 0x02, 0x04, 0x08, - 0x91, 0x6a, 0xaa, 0x5e, - 0x00, 0x65, 0xc4, 0x41, + 0x91, 0x6a, 0xbe, 0x5e, + 0x00, 0x65, 0xbe, 0x41, 0x01, 0xa4, 0xca, 0x30, - 0x80, 0xa3, 0xa6, 0x7a, + 0x80, 0xa3, 0x96, 0x7a, 0x02, 0x65, 0xca, 0x00, - 0x01, 0x55, 0xaa, 0x7a, + 0x01, 0x55, 0x9a, 0x7a, 0x04, 0x65, 0xca, 0x00, 0x01, 0x65, 0xf8, 0x31, 0x01, 0x3b, 0x26, 0x31, - 0x00, 0x65, 0x06, 0x5a, - 0x01, 0xfc, 0xb8, 0x6a, - 0x80, 0x0b, 0xae, 0x6a, - 0x10, 0x0c, 0xae, 0x7a, - 0x20, 0x93, 0xae, 0x6a, + 0x00, 0x65, 0x00, 0x5a, + 0x01, 0xfc, 0xa8, 0x6a, + 0x80, 0x0b, 0x9e, 0x6a, + 0x10, 0x0c, 0x9e, 0x7a, + 0x20, 0x93, 0x9e, 0x6a, 0x02, 0x93, 0x26, 0x01, - 0x02, 0xfc, 0xc2, 0x7a, - 0x40, 0x0d, 0xdc, 0x6a, + 0x02, 0xfc, 0xb2, 0x7a, + 0x40, 0x0d, 0xcc, 0x6a, 0x01, 0xa4, 0x48, 0x01, - 0x00, 0x65, 0xdc, 0x42, - 0x40, 0x0d, 0xc8, 0x6a, - 0x00, 0x65, 0x06, 0x5a, - 0x00, 0x65, 0xba, 0x42, - 0x80, 0xfc, 0xd2, 0x7a, - 0x80, 0xa4, 0xd2, 0x6a, + 0x00, 0x65, 0xcc, 0x42, + 0x40, 0x0d, 0xb8, 0x6a, + 0x00, 0x65, 0x00, 0x5a, + 0x00, 0x65, 0xaa, 0x42, + 0x80, 0xfc, 0xc2, 0x7a, + 0x80, 0xa4, 0xc2, 0x6a, 0xff, 0xa5, 0x4a, 0x19, 0xff, 0xa6, 0x4c, 0x21, 0xff, 0xa7, 0x4e, 0x21, 0xf8, 0xfc, 0x48, 0x09, 0xff, 0x6a, 0xaa, 0x08, - 0x04, 0xfc, 0xda, 0x7a, + 0x04, 0xfc, 0xca, 0x7a, 0x01, 0x55, 0xaa, 0x00, 0xff, 0x6a, 0x46, 0x09, - 0x04, 0x3b, 0xf4, 0x6a, + 0x04, 0x3b, 0xe4, 0x6a, 0x02, 0x93, 0x26, 0x01, - 0x01, 0x94, 0xde, 0x7a, - 0x01, 0x94, 0xde, 0x7a, - 0x01, 0x94, 0xde, 0x7a, - 0x01, 0x94, 0xde, 0x7a, - 0x01, 0x94, 0xde, 0x7a, - 0x01, 0xa4, 0xf2, 0x7a, - 0x01, 0xfc, 0xec, 0x7a, - 0x01, 0x94, 0xf4, 0x6a, - 0x00, 0x65, 0x8e, 0x42, - 0x01, 0x94, 0xf2, 0x7a, - 0x10, 0x94, 0xf4, 0x6a, + 0x01, 0x94, 0xce, 0x7a, + 0x01, 0x94, 0xce, 0x7a, + 0x01, 0x94, 0xce, 0x7a, + 0x01, 0x94, 0xce, 0x7a, + 0x01, 0x94, 0xce, 0x7a, + 0x01, 0xa4, 0xe2, 0x7a, + 0x01, 0xfc, 0xdc, 0x7a, + 0x01, 0x94, 0xe4, 0x6a, + 0x00, 0x65, 0x7e, 0x42, + 0x01, 0x94, 0xe2, 0x7a, + 0x10, 0x94, 0xe4, 0x6a, 0xd7, 0x93, 0x26, 0x09, - 0x28, 0x93, 0xf8, 0x6a, - 0xff, 0x38, 0x04, 0x6b, - 0x80, 0xa3, 0x04, 0x7b, - 0x80, 0x0b, 0x02, 0x7b, - 0x04, 0x3b, 0x04, 0x7b, + 0x28, 0x93, 0xe8, 0x6a, + 0x01, 0x85, 0x0a, 0x01, + 0x02, 0xfc, 0xf0, 0x6a, + 0x01, 0x14, 0x46, 0x31, + 0xff, 0x6a, 0x10, 0x09, + 0xfe, 0x85, 0x0a, 0x09, + 0xff, 0x38, 0xfe, 0x6a, + 0x80, 0xa3, 0xfe, 0x7a, + 0x80, 0x0b, 0xfc, 0x7a, + 0x04, 0x3b, 0xfe, 0x7a, 0xbf, 0x3b, 0x76, 0x08, 0x01, 0x3b, 0x26, 0x31, - 0x00, 0x65, 0x06, 0x5a, - 0x01, 0x0b, 0x12, 0x6b, - 0x10, 0x0c, 0x06, 0x7b, - 0x04, 0x93, 0x10, 0x6b, - 0x01, 0x94, 0x0e, 0x7b, - 0x10, 0x94, 0x10, 0x6b, + 0x00, 0x65, 0x00, 0x5a, + 0x01, 0x0b, 0x0c, 0x6b, + 0x10, 0x0c, 0x00, 0x7b, + 0x04, 0x93, 0x0a, 0x6b, + 0x01, 0x94, 0x08, 0x7b, + 0x10, 0x94, 0x0a, 0x6b, 0xc7, 0x93, 0x26, 0x09, 0x01, 0x99, 0xd4, 0x30, - 0x38, 0x93, 0x14, 0x6b, + 0x38, 0x93, 0x0e, 0x6b, 0xff, 0x08, 0x60, 0x6b, 0xff, 0x09, 0x60, 0x6b, 0xff, 0x0a, 0x60, 0x6b, - 0xff, 0x38, 0x30, 0x7b, + 0xff, 0x38, 0x2a, 0x7b, 0x04, 0x14, 0x10, 0x31, 0x01, 0x38, 0x18, 0x31, 0x02, 0x6a, 0x1a, 0x31, 0x88, 0x6a, 0xcc, 0x00, - 0x14, 0x6a, 0xce, 0x5d, - 0x00, 0x38, 0xba, 0x5d, + 0x14, 0x6a, 0xda, 0x5d, + 0x00, 0x38, 0xc6, 0x5d, 0xff, 0x6a, 0x70, 0x08, 0x00, 0x65, 0x56, 0x43, - 0x80, 0xa3, 0x36, 0x7b, + 0x80, 0xa3, 0x30, 0x7b, 0x01, 0xa4, 0x48, 0x01, 0x00, 0x65, 0x60, 0x43, - 0x08, 0xeb, 0x3c, 0x7b, - 0x00, 0x65, 0x06, 0x5a, - 0x08, 0xeb, 0x38, 0x6b, + 0x08, 0xeb, 0x36, 0x7b, + 0x00, 0x65, 0x00, 0x5a, + 0x08, 0xeb, 0x32, 0x6b, 0x07, 0xe9, 0x10, 0x31, - 0x80, 0xe9, 0x42, 0x7b, - 0x80, 0xa3, 0x46, 0x01, + 0x01, 0xe9, 0xca, 0x30, + 0x01, 0x65, 0x46, 0x31, + 0x00, 0x6a, 0xa0, 0x5e, 0x88, 0x6a, 0xcc, 0x00, - 0xa4, 0x6a, 0xce, 0x5d, - 0x08, 0x6a, 0xba, 0x5d, + 0xa4, 0x6a, 0xda, 0x5d, + 0x08, 0x6a, 0xc6, 0x5d, 0x0d, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x80, 0x5e, + 0x00, 0x65, 0x8e, 0x5e, 0x88, 0x6a, 0xcc, 0x00, - 0x00, 0x65, 0x62, 0x5e, + 0x00, 0x65, 0x70, 0x5e, 0x01, 0x99, 0x46, 0x31, - 0x00, 0x65, 0x3e, 0x5a, - 0x00, 0x65, 0xf2, 0x59, + 0x00, 0xa3, 0xa0, 0x5e, + 0x01, 0x88, 0x10, 0x31, + 0x00, 0x65, 0x34, 0x5a, + 0x00, 0x65, 0xec, 0x59, 0x03, 0x8c, 0x10, 0x30, - 0x00, 0x65, 0xc0, 0x5d, + 0x00, 0x65, 0xcc, 0x5d, 0x01, 0x8c, 0x5e, 0x7b, 0x01, 0x55, 0xaa, 0x10, - 0x80, 0x0b, 0x8e, 0x6a, + 0x80, 0x0b, 0x7e, 0x6a, 0x80, 0x0b, 0x68, 0x6b, 0x01, 0x0c, 0x62, 0x7b, - 0x10, 0x0c, 0x8e, 0x7a, - 0x03, 0x9e, 0x8e, 0x6a, - 0x00, 0x65, 0xfc, 0x59, - 0xff, 0x38, 0x7a, 0x7b, + 0x10, 0x0c, 0x7e, 0x7a, + 0x03, 0x9e, 0x7e, 0x6a, + 0x00, 0x65, 0xf6, 0x59, + 0x00, 0x6a, 0xa0, 0x5e, + 0x01, 0xa4, 0x88, 0x6b, + 0xff, 0x38, 0x7e, 0x7b, 0x01, 0x38, 0xc8, 0x30, 0x00, 0x08, 0x40, 0x19, 0xff, 0x6a, 0xc8, 0x08, 0x00, 0x09, 0x42, 0x21, 0x00, 0x0a, 0x44, 0x21, 0xff, 0x6a, 0x70, 0x08, - 0x00, 0x65, 0x7c, 0x43, + 0x00, 0x65, 0x80, 0x43, 0x03, 0x08, 0x40, 0x31, 0x03, 0x08, 0x40, 0x31, 0x01, 0x08, 0x40, 0x31, @@ -455,13 +461,14 @@ 0xfd, 0xb4, 0x68, 0x09, 0x12, 0x01, 0x02, 0x00, 0x12, 0x01, 0x02, 0x00, - 0x04, 0x3c, 0xc4, 0x79, + 0x04, 0x3c, 0xbe, 0x79, 0xfb, 0x3c, 0x78, 0x08, - 0x04, 0x93, 0x34, 0x79, - 0x01, 0x0c, 0x90, 0x6b, - 0x00, 0x65, 0x34, 0x41, - 0x00, 0x65, 0xc4, 0x41, - 0x00, 0x65, 0x64, 0x5d, + 0x04, 0x93, 0x2e, 0x79, + 0x01, 0x0c, 0x94, 0x6b, + 0x00, 0x65, 0x2e, 0x41, + 0x00, 0x65, 0xbe, 0x41, + 0x80, 0x3c, 0x9e, 0x6b, + 0x21, 0x6a, 0xbe, 0x46, 0x01, 0xbc, 0x18, 0x31, 0x02, 0x6a, 0x1a, 0x31, 0x02, 0x6a, 0xf8, 0x01, @@ -471,16 +478,16 @@ 0xff, 0x6a, 0x12, 0x08, 0xff, 0x6a, 0x14, 0x08, 0xf3, 0xbc, 0xd4, 0x18, - 0xa0, 0x6a, 0xbe, 0x53, + 0xa0, 0x6a, 0xc4, 0x53, 0x04, 0xa0, 0x10, 0x31, 0xac, 0x6a, 0x26, 0x01, 0x04, 0xa0, 0x10, 0x31, 0x03, 0x08, 0x18, 0x31, 0x88, 0x6a, 0xcc, 0x00, - 0xa0, 0x6a, 0xce, 0x5d, - 0x00, 0xbc, 0xba, 0x5d, + 0xa0, 0x6a, 0xda, 0x5d, + 0x00, 0xbc, 0xc6, 0x5d, 0x3d, 0x6a, 0x26, 0x01, - 0x00, 0x65, 0xd6, 0x43, + 0x00, 0x65, 0xdc, 0x43, 0xff, 0x6a, 0x10, 0x09, 0xa4, 0x6a, 0x26, 0x01, 0x0c, 0xa0, 0x32, 0x31, @@ -490,112 +497,117 @@ 0x36, 0x6a, 0x26, 0x01, 0x02, 0x93, 0x26, 0x01, 0x35, 0x6a, 0x26, 0x01, - 0x00, 0x65, 0x74, 0x5e, - 0x00, 0x65, 0x74, 0x5e, + 0x00, 0x65, 0x82, 0x5e, + 0x00, 0x65, 0x82, 0x5e, 0x02, 0x93, 0x26, 0x01, - 0x04, 0x0b, 0xda, 0x6b, - 0x10, 0x0c, 0xd6, 0x7b, - 0x01, 0x03, 0xda, 0x6b, - 0x20, 0x93, 0xd6, 0x6b, + 0x04, 0x0b, 0xe0, 0x6b, + 0x10, 0x0c, 0xdc, 0x7b, + 0x01, 0x03, 0xe0, 0x6b, + 0x20, 0x93, 0xdc, 0x6b, 0xc7, 0x93, 0x26, 0x09, - 0x38, 0x93, 0xe0, 0x6b, + 0x38, 0x93, 0xe6, 0x6b, 0x10, 0x01, 0x02, 0x00, - 0x00, 0x65, 0xc4, 0x41, - 0x00, 0x65, 0x64, 0x5d, + 0x00, 0x65, 0xbe, 0x41, + 0x80, 0x3c, 0xf0, 0x6b, + 0x21, 0x6a, 0xbe, 0x46, 0x01, 0x06, 0x50, 0x31, - 0x00, 0x65, 0xc4, 0x41, + 0x00, 0x65, 0xbe, 0x41, 0x10, 0x3f, 0x06, 0x00, 0x10, 0x6a, 0x06, 0x00, 0x01, 0x3a, 0xca, 0x30, - 0x80, 0x65, 0x0c, 0x64, - 0x10, 0xb8, 0x30, 0x6c, + 0x80, 0x65, 0x14, 0x64, + 0x10, 0xb8, 0x38, 0x6c, 0xc0, 0xba, 0xca, 0x00, - 0x40, 0xb8, 0xfc, 0x6b, + 0x40, 0xb8, 0x04, 0x6c, 0xbf, 0x65, 0xca, 0x08, - 0x20, 0xb8, 0x10, 0x7c, + 0x20, 0xb8, 0x18, 0x7c, 0x01, 0x65, 0x0c, 0x30, - 0x00, 0x65, 0xb2, 0x5d, - 0xa0, 0x3f, 0x18, 0x64, + 0x00, 0x65, 0xbe, 0x5d, + 0xa0, 0x3f, 0x20, 0x64, 0x23, 0xb8, 0x0c, 0x08, - 0x00, 0x65, 0xb2, 0x5d, - 0xa0, 0x3f, 0x18, 0x64, - 0x00, 0xbb, 0x10, 0x44, - 0xff, 0x65, 0x10, 0x64, - 0x00, 0x65, 0x30, 0x44, + 0x00, 0x65, 0xbe, 0x5d, + 0xa0, 0x3f, 0x20, 0x64, + 0x00, 0xbb, 0x18, 0x44, + 0xff, 0x65, 0x18, 0x64, + 0x00, 0x65, 0x38, 0x44, 0x40, 0x6a, 0x18, 0x00, 0x01, 0x65, 0x0c, 0x30, - 0x00, 0x65, 0xb2, 0x5d, - 0xa0, 0x3f, 0xec, 0x73, + 0x00, 0x65, 0xbe, 0x5d, + 0xa0, 0x3f, 0xf4, 0x73, 0x40, 0x6a, 0x18, 0x00, 0x01, 0x3a, 0xa6, 0x30, 0x08, 0x6a, 0x74, 0x00, - 0x00, 0x65, 0xc4, 0x41, - 0x64, 0x6a, 0x3e, 0x5d, - 0x80, 0x64, 0xae, 0x6c, - 0x04, 0x64, 0x7c, 0x74, - 0x02, 0x64, 0x8a, 0x74, - 0x00, 0x6a, 0x4c, 0x74, - 0x03, 0x64, 0xa0, 0x74, - 0x23, 0x64, 0x38, 0x74, - 0x08, 0x64, 0x48, 0x74, - 0x61, 0x6a, 0xaa, 0x5e, - 0x00, 0x65, 0xb2, 0x5d, - 0x08, 0x51, 0xc6, 0x71, - 0x00, 0x65, 0x30, 0x44, - 0x80, 0x04, 0x46, 0x7c, - 0x51, 0x6a, 0x34, 0x5d, - 0x01, 0x51, 0x46, 0x64, - 0x01, 0xa4, 0x42, 0x7c, - 0x01, 0x55, 0x48, 0x7c, - 0x41, 0x6a, 0xaa, 0x5e, - 0x00, 0x65, 0x48, 0x44, - 0x07, 0x6a, 0x2a, 0x5d, + 0x00, 0x65, 0xbe, 0x41, + 0x64, 0x6a, 0x4e, 0x5d, + 0x80, 0x64, 0xbe, 0x6c, + 0x04, 0x64, 0x84, 0x74, + 0x02, 0x64, 0x92, 0x74, + 0x00, 0x6a, 0x54, 0x74, + 0x03, 0x64, 0xb0, 0x74, + 0x23, 0x64, 0x40, 0x74, + 0x08, 0x64, 0x50, 0x74, + 0x61, 0x6a, 0xbe, 0x5e, + 0x00, 0x65, 0xbe, 0x5d, + 0x08, 0x51, 0xc0, 0x71, + 0x00, 0x65, 0x38, 0x44, + 0x80, 0x04, 0x4e, 0x7c, + 0x51, 0x6a, 0x44, 0x5d, + 0x01, 0x51, 0x4e, 0x64, + 0x01, 0xa4, 0x4a, 0x7c, + 0x01, 0x55, 0x50, 0x7c, + 0x41, 0x6a, 0xbe, 0x5e, + 0x00, 0x65, 0x50, 0x44, + 0x07, 0x6a, 0x3a, 0x5d, 0x01, 0x06, 0xd4, 0x30, - 0x00, 0x65, 0xc4, 0x41, - 0x10, 0xb8, 0x50, 0x7c, - 0xa1, 0x6a, 0xaa, 0x5e, - 0x01, 0xb4, 0x56, 0x6c, - 0x02, 0xb4, 0x58, 0x6c, - 0x01, 0xa4, 0x58, 0x7c, - 0xff, 0xa8, 0x68, 0x7c, + 0x00, 0x65, 0xbe, 0x41, + 0x10, 0xb8, 0x58, 0x7c, + 0xa1, 0x6a, 0xbe, 0x5e, + 0x01, 0xb4, 0x5e, 0x6c, + 0x02, 0xb4, 0x60, 0x6c, + 0x01, 0xa4, 0x60, 0x7c, + 0xff, 0xa8, 0x70, 0x7c, 0x04, 0xb4, 0x68, 0x01, 0x01, 0x6a, 0x76, 0x00, - 0x00, 0xbb, 0xec, 0x5d, - 0xff, 0xa8, 0x68, 0x7c, - 0x71, 0x6a, 0xaa, 0x5e, - 0x40, 0x51, 0x68, 0x64, - 0x00, 0x65, 0x8a, 0x5e, - 0x00, 0x65, 0xd6, 0x41, - 0x00, 0xbb, 0x6c, 0x5c, - 0x00, 0x65, 0xd6, 0x41, - 0x00, 0x65, 0x8a, 0x5e, + 0x00, 0xbb, 0xf8, 0x5d, + 0xff, 0xa8, 0x70, 0x7c, + 0x71, 0x6a, 0xbe, 0x5e, + 0x40, 0x51, 0x70, 0x64, + 0x00, 0x65, 0x98, 0x5e, + 0x00, 0x65, 0xd0, 0x41, + 0x00, 0xbb, 0x74, 0x5c, + 0x00, 0x65, 0xd0, 0x41, + 0x00, 0x65, 0x98, 0x5e, 0x01, 0x65, 0xa2, 0x30, 0x01, 0xf8, 0xc8, 0x30, 0x01, 0x4e, 0xc8, 0x30, - 0x00, 0x6a, 0x90, 0xdd, - 0x00, 0x51, 0xa2, 0x5d, + 0x00, 0x6a, 0x9c, 0xdd, + 0x00, 0x51, 0xae, 0x5d, 0x01, 0x4e, 0x9c, 0x18, 0x02, 0x6a, 0x22, 0x05, 0x04, 0xb8, 0x70, 0x01, - 0x00, 0x65, 0xa6, 0x5e, - 0x20, 0xb8, 0xd6, 0x69, + 0x00, 0x65, 0xba, 0x5e, + 0x20, 0xb8, 0xd0, 0x69, 0x01, 0xbb, 0xa2, 0x30, 0x01, 0xba, 0x7c, 0x30, - 0x00, 0xb9, 0xa4, 0x5c, - 0x00, 0x65, 0xd6, 0x41, + 0x00, 0xb9, 0xb4, 0x5c, + 0x00, 0x65, 0xd0, 0x41, 0x01, 0x06, 0xd4, 0x30, - 0x20, 0x3c, 0xc4, 0x79, - 0x20, 0x3c, 0x48, 0x7c, + 0x20, 0x3c, 0xbe, 0x79, + 0x20, 0x3c, 0x50, 0x7c, + 0x01, 0xa4, 0xa0, 0x7c, + 0x01, 0xb4, 0x68, 0x01, + 0x00, 0x65, 0xbe, 0x41, + 0x00, 0x65, 0x50, 0x44, 0x04, 0x14, 0x58, 0x31, 0x01, 0x06, 0xd4, 0x30, 0x08, 0xa0, 0x60, 0x31, 0xac, 0x6a, 0xcc, 0x00, - 0x14, 0x6a, 0xce, 0x5d, + 0x14, 0x6a, 0xda, 0x5d, 0x01, 0x06, 0xd4, 0x30, - 0xa0, 0x6a, 0xc6, 0x5d, - 0x00, 0x65, 0xc4, 0x41, + 0xa0, 0x6a, 0xd2, 0x5d, + 0x00, 0x65, 0xbe, 0x41, 0xdf, 0x3c, 0x78, 0x08, - 0x00, 0x65, 0x48, 0x44, + 0x00, 0x65, 0x50, 0x44, 0x4c, 0x65, 0xcc, 0x28, 0x01, 0x3e, 0x20, 0x31, 0xd0, 0x66, 0xcc, 0x18, @@ -606,104 +618,102 @@ 0xd0, 0x65, 0xca, 0x18, 0x01, 0x3e, 0x20, 0x31, 0x30, 0x65, 0xd4, 0x18, - 0x00, 0x65, 0xbc, 0x4c, + 0x00, 0x65, 0xcc, 0x4c, 0xe1, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, 0x20, 0x65, 0xd4, 0x18, - 0x00, 0x65, 0xc4, 0x54, + 0x00, 0x65, 0xd4, 0x54, 0xe1, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, 0x20, 0x65, 0xca, 0x18, 0xe0, 0x65, 0xd4, 0x18, - 0x00, 0x65, 0xce, 0x4c, + 0x00, 0x65, 0xde, 0x4c, 0xe1, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, 0xd0, 0x65, 0xd4, 0x18, - 0x00, 0x65, 0xd6, 0x54, + 0x00, 0x65, 0xe6, 0x54, 0xe1, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, 0x01, 0x6c, 0xa2, 0x30, - 0xff, 0x51, 0xe8, 0x74, - 0x00, 0x51, 0x68, 0x5d, + 0xff, 0x51, 0xf8, 0x74, + 0x00, 0x51, 0x74, 0x5d, 0x01, 0x51, 0x20, 0x31, - 0x00, 0x65, 0x0a, 0x45, + 0x00, 0x65, 0x1a, 0x45, 0x01, 0xba, 0xc8, 0x30, - 0x00, 0x3e, 0x0a, 0x75, - 0x00, 0x65, 0x88, 0x5e, + 0x00, 0x3e, 0x1a, 0x75, + 0x00, 0x65, 0x96, 0x5e, 0x80, 0x3c, 0x78, 0x00, 0x01, 0x06, 0xd4, 0x30, - 0x00, 0x65, 0xb2, 0x5d, + 0x00, 0x65, 0xbe, 0x5d, 0x01, 0x3c, 0x78, 0x00, - 0xe0, 0x3f, 0x26, 0x65, + 0xe0, 0x3f, 0x36, 0x65, 0x02, 0x3c, 0x78, 0x00, - 0x20, 0x12, 0x26, 0x65, - 0x51, 0x6a, 0x34, 0x5d, - 0x00, 0x51, 0x68, 0x5d, - 0x51, 0x6a, 0x34, 0x5d, + 0x20, 0x12, 0x36, 0x65, + 0x51, 0x6a, 0x44, 0x5d, + 0x00, 0x51, 0x74, 0x5d, + 0x51, 0x6a, 0x44, 0x5d, 0x01, 0x51, 0x20, 0x31, 0x04, 0x3c, 0x78, 0x00, 0x01, 0xb9, 0xc8, 0x30, - 0x00, 0x3d, 0x24, 0x65, + 0x00, 0x3d, 0x34, 0x65, 0x08, 0x3c, 0x78, 0x00, 0x01, 0xba, 0xc8, 0x30, - 0x00, 0x3e, 0x24, 0x65, + 0x00, 0x3e, 0x34, 0x65, 0x10, 0x3c, 0x78, 0x00, - 0x04, 0xb8, 0x24, 0x7d, + 0x04, 0xb8, 0x34, 0x7d, 0xfb, 0xb8, 0x70, 0x09, - 0x20, 0xb8, 0x1a, 0x6d, + 0x20, 0xb8, 0x2a, 0x6d, 0x01, 0x90, 0xc8, 0x30, 0xff, 0x6a, 0xa2, 0x00, - 0x00, 0x3d, 0xa4, 0x5c, + 0x00, 0x3d, 0xb4, 0x5c, 0x01, 0x64, 0x20, 0x31, 0x80, 0x6a, 0x78, 0x00, - 0x00, 0x65, 0x02, 0x59, - 0x10, 0xb8, 0x48, 0x7c, - 0xff, 0x6a, 0x2a, 0x5d, - 0x00, 0x65, 0x48, 0x44, - 0x00, 0x65, 0x88, 0x5e, - 0x31, 0x6a, 0xaa, 0x5e, - 0x00, 0x65, 0x48, 0x44, + 0x00, 0x65, 0xfc, 0x58, + 0x10, 0xb8, 0x50, 0x7c, + 0xff, 0x6a, 0x3a, 0x5d, + 0x00, 0x65, 0x50, 0x44, + 0x00, 0x65, 0x96, 0x5e, + 0x31, 0x6a, 0xbe, 0x5e, + 0x00, 0x65, 0x50, 0x44, 0x10, 0x3f, 0x06, 0x00, 0x10, 0x6a, 0x06, 0x00, 0x01, 0x65, 0x74, 0x34, - 0x81, 0x6a, 0xaa, 0x5e, - 0x00, 0x65, 0x36, 0x45, + 0x81, 0x6a, 0xbe, 0x5e, + 0x00, 0x65, 0x46, 0x45, 0x01, 0x06, 0xd4, 0x30, - 0x01, 0x0c, 0x36, 0x7d, - 0x04, 0x0c, 0x30, 0x6d, + 0x01, 0x0c, 0x46, 0x7d, + 0x04, 0x0c, 0x40, 0x6d, 0xe0, 0x03, 0x7e, 0x08, - 0xe0, 0x3f, 0xc4, 0x61, + 0xe0, 0x3f, 0xbe, 0x61, 0x01, 0x65, 0xcc, 0x30, 0x01, 0x12, 0xda, 0x34, 0x01, 0x06, 0xd4, 0x34, - 0x01, 0x03, 0x44, 0x6d, + 0x01, 0x03, 0x54, 0x6d, 0x40, 0x03, 0xcc, 0x08, 0x01, 0x65, 0x06, 0x30, 0x40, 0x65, 0xc8, 0x08, - 0x00, 0x66, 0x52, 0x75, - 0x40, 0x65, 0x52, 0x7d, - 0x00, 0x65, 0x52, 0x5d, + 0x00, 0x66, 0x62, 0x75, + 0x40, 0x65, 0x62, 0x7d, + 0x00, 0x65, 0x62, 0x5d, 0xff, 0x6a, 0xd4, 0x08, 0xff, 0x6a, 0xd4, 0x08, 0xff, 0x6a, 0xd4, 0x08, 0xff, 0x6a, 0xd4, 0x0c, 0x08, 0x01, 0x02, 0x00, - 0x02, 0x0b, 0x5c, 0x7d, + 0x02, 0x0b, 0x6c, 0x7d, 0x01, 0x65, 0x0c, 0x30, - 0x02, 0x0b, 0x60, 0x7d, + 0x02, 0x0b, 0x70, 0x7d, 0xf7, 0x01, 0x02, 0x0c, - 0x80, 0x3c, 0xae, 0x6e, - 0x21, 0x6a, 0xaa, 0x46, 0x01, 0x65, 0xc8, 0x30, - 0xff, 0x41, 0x88, 0x75, + 0xff, 0x41, 0x94, 0x75, 0x01, 0x41, 0x20, 0x31, 0xff, 0x6a, 0xa4, 0x00, - 0x00, 0x65, 0x78, 0x45, - 0xff, 0xbf, 0x88, 0x75, + 0x00, 0x65, 0x84, 0x45, + 0xff, 0xbf, 0x94, 0x75, 0x01, 0x90, 0xa4, 0x30, 0x01, 0xbf, 0x20, 0x31, - 0x00, 0xbb, 0x72, 0x65, - 0xff, 0x52, 0x86, 0x75, + 0x00, 0xbb, 0x7e, 0x65, + 0xff, 0x52, 0x92, 0x75, 0x01, 0xbf, 0xcc, 0x30, 0x01, 0x90, 0xca, 0x30, 0x01, 0x52, 0x20, 0x31, @@ -711,28 +721,28 @@ 0x01, 0x65, 0x20, 0x35, 0x01, 0xbf, 0x82, 0x34, 0x01, 0x64, 0xa2, 0x30, - 0x00, 0x6a, 0x92, 0x5e, + 0x00, 0x6a, 0xa6, 0x5e, 0x0d, 0x6a, 0x76, 0x00, - 0x00, 0x51, 0xec, 0x45, + 0x00, 0x51, 0xf8, 0x45, 0x01, 0x65, 0xa4, 0x30, 0xe0, 0x6a, 0xcc, 0x00, - 0x48, 0x6a, 0xe0, 0x5d, + 0x48, 0x6a, 0xec, 0x5d, 0x01, 0x6a, 0xd0, 0x01, 0x01, 0x6a, 0xdc, 0x05, 0x88, 0x6a, 0xcc, 0x00, - 0x48, 0x6a, 0xe0, 0x5d, - 0x01, 0x6a, 0xba, 0x5d, + 0x48, 0x6a, 0xec, 0x5d, + 0x01, 0x6a, 0xc6, 0x5d, 0x01, 0x6a, 0x26, 0x05, 0x01, 0x65, 0xd8, 0x31, 0x09, 0xee, 0xdc, 0x01, - 0x80, 0xee, 0xa6, 0x7d, + 0x80, 0xee, 0xb2, 0x7d, 0xff, 0x6a, 0xdc, 0x0d, 0x01, 0x65, 0x32, 0x31, 0x0a, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x80, 0x46, - 0x81, 0x6a, 0xaa, 0x5e, - 0x01, 0x0c, 0xb2, 0x7d, - 0x04, 0x0c, 0xb0, 0x6d, + 0x00, 0x65, 0x8e, 0x46, + 0x81, 0x6a, 0xbe, 0x5e, + 0x01, 0x0c, 0xbe, 0x7d, + 0x04, 0x0c, 0xbc, 0x6d, 0xe0, 0x03, 0x06, 0x08, 0xe0, 0x03, 0x7e, 0x0c, 0x01, 0x65, 0x18, 0x31, @@ -751,7 +761,7 @@ 0x01, 0x6c, 0xda, 0x34, 0x3d, 0x64, 0xa4, 0x28, 0x55, 0x64, 0xc8, 0x28, - 0x00, 0x65, 0xe0, 0x45, + 0x00, 0x65, 0xec, 0x45, 0x2e, 0x64, 0xa4, 0x28, 0x66, 0x64, 0xc8, 0x28, 0x00, 0x6c, 0xda, 0x18, @@ -762,62 +772,63 @@ 0x00, 0x6c, 0xda, 0x24, 0x01, 0x65, 0xc8, 0x30, 0xe0, 0x6a, 0xcc, 0x00, - 0x44, 0x6a, 0xdc, 0x5d, + 0x44, 0x6a, 0xe8, 0x5d, 0x01, 0x90, 0xe2, 0x31, - 0x04, 0x3b, 0x00, 0x7e, + 0x04, 0x3b, 0x0c, 0x7e, 0x30, 0x6a, 0xd0, 0x01, 0x20, 0x6a, 0xd0, 0x01, 0x1d, 0x6a, 0xdc, 0x01, - 0xdc, 0xee, 0xfc, 0x65, - 0x00, 0x65, 0x18, 0x46, + 0xdc, 0xee, 0x08, 0x66, + 0x00, 0x65, 0x24, 0x46, 0x20, 0x6a, 0xd0, 0x01, 0x01, 0x6a, 0xdc, 0x01, 0x20, 0xa0, 0xd8, 0x31, 0x09, 0xee, 0xdc, 0x01, - 0x80, 0xee, 0x08, 0x7e, + 0x80, 0xee, 0x14, 0x7e, 0x11, 0x6a, 0xdc, 0x01, - 0x50, 0xee, 0x0c, 0x66, + 0x50, 0xee, 0x18, 0x66, 0x20, 0x6a, 0xd0, 0x01, 0x09, 0x6a, 0xdc, 0x01, - 0x88, 0xee, 0x12, 0x66, + 0x88, 0xee, 0x1e, 0x66, 0x19, 0x6a, 0xdc, 0x01, - 0xd8, 0xee, 0x16, 0x66, + 0xd8, 0xee, 0x22, 0x66, 0xff, 0x6a, 0xdc, 0x09, - 0x18, 0xee, 0x1a, 0x6e, + 0x18, 0xee, 0x26, 0x6e, 0xff, 0x6a, 0xd4, 0x0c, 0x88, 0x6a, 0xcc, 0x00, - 0x44, 0x6a, 0xdc, 0x5d, - 0x20, 0x6a, 0xba, 0x5d, + 0x44, 0x6a, 0xe8, 0x5d, + 0x20, 0x6a, 0xc6, 0x5d, 0x01, 0x3b, 0x26, 0x31, - 0x04, 0x3b, 0x34, 0x6e, + 0x04, 0x3b, 0x40, 0x6e, 0xa0, 0x6a, 0xca, 0x00, 0x20, 0x65, 0xc8, 0x18, - 0x00, 0x65, 0x70, 0x5e, - 0x00, 0x65, 0x2c, 0x66, + 0x00, 0x65, 0x7e, 0x5e, + 0x00, 0x65, 0x38, 0x66, 0x0a, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x80, 0x46, + 0x00, 0x65, 0x8e, 0x46, 0xa0, 0x6a, 0xcc, 0x00, 0xff, 0x6a, 0xc8, 0x08, - 0x20, 0x94, 0x38, 0x6e, - 0x10, 0x94, 0x3a, 0x6e, - 0x08, 0x94, 0x52, 0x6e, - 0x08, 0x94, 0x52, 0x6e, - 0x08, 0x94, 0x52, 0x6e, - 0x07, 0x8c, 0xca, 0x18, - 0x3d, 0x65, 0xca, 0x28, - 0x00, 0x65, 0xc8, 0x18, - 0x00, 0x65, 0x56, 0x5e, - 0xff, 0x65, 0xca, 0x10, - 0x05, 0x65, 0xc8, 0x18, - 0x04, 0x64, 0x82, 0x76, - 0x00, 0x65, 0x38, 0x46, + 0x20, 0x94, 0x44, 0x6e, + 0x10, 0x94, 0x46, 0x6e, + 0x08, 0x94, 0x60, 0x6e, + 0x08, 0x94, 0x60, 0x6e, + 0x08, 0x94, 0x60, 0x6e, + 0xff, 0x8c, 0xc8, 0x10, + 0xc1, 0x64, 0xc8, 0x18, + 0xf8, 0x64, 0xc8, 0x08, + 0x01, 0x99, 0xda, 0x30, + 0x00, 0x66, 0x54, 0x66, + 0xc0, 0x66, 0x90, 0x76, + 0x60, 0x66, 0xc8, 0x18, + 0x3d, 0x64, 0xc8, 0x28, + 0x00, 0x65, 0x44, 0x46, 0xf7, 0x93, 0x26, 0x09, - 0x08, 0x93, 0x54, 0x6e, + 0x08, 0x93, 0x62, 0x6e, 0x00, 0x62, 0xc4, 0x18, - 0x00, 0x65, 0x80, 0x5e, - 0x00, 0x65, 0x60, 0x5e, - 0x00, 0x65, 0x60, 0x5e, - 0x00, 0x65, 0x60, 0x5e, + 0x00, 0x65, 0x8e, 0x5e, + 0x00, 0x65, 0x6e, 0x5e, + 0x00, 0x65, 0x6e, 0x5e, + 0x00, 0x65, 0x6e, 0x5e, 0x01, 0x99, 0xda, 0x30, 0x01, 0x99, 0xda, 0x30, 0x01, 0x99, 0xda, 0x30, @@ -834,23 +845,26 @@ 0x01, 0x6c, 0x32, 0x31, 0x01, 0x6c, 0x32, 0x31, 0x01, 0x6c, 0x32, 0x35, - 0x08, 0x94, 0x80, 0x7e, + 0x08, 0x94, 0x8e, 0x7e, 0xf7, 0x93, 0x26, 0x09, - 0x08, 0x93, 0x84, 0x6e, + 0x08, 0x93, 0x92, 0x6e, 0xff, 0x6a, 0xd4, 0x0c, - 0x04, 0xb8, 0xa6, 0x6e, + 0x04, 0xb8, 0xba, 0x6e, 0x01, 0x42, 0x7e, 0x31, 0xff, 0x6a, 0x76, 0x01, 0x01, 0x90, 0x84, 0x34, 0xff, 0x6a, 0x76, 0x05, - 0xff, 0x42, 0xa2, 0x66, - 0xff, 0x41, 0x9a, 0x66, - 0xd1, 0x6a, 0xaa, 0x5e, + 0x01, 0x85, 0x0a, 0x01, + 0x7f, 0x65, 0x10, 0x09, + 0xfe, 0x85, 0x0a, 0x0d, + 0xff, 0x42, 0xb6, 0x66, + 0xff, 0x41, 0xae, 0x66, + 0xd1, 0x6a, 0xbe, 0x5e, 0xff, 0x6a, 0xca, 0x04, 0x01, 0x41, 0x20, 0x31, 0x01, 0xbf, 0x82, 0x30, 0x01, 0x6a, 0x76, 0x00, - 0x00, 0xbb, 0xec, 0x45, + 0x00, 0xbb, 0xf8, 0x45, 0x01, 0x42, 0x20, 0x31, 0x01, 0xbf, 0x84, 0x34, 0x01, 0x41, 0x7e, 0x31, @@ -860,12 +874,20 @@ 0xff, 0x6a, 0xd4, 0x0c }; +static int ahc_patch23_func(struct ahc_softc *ahc); + +static int +ahc_patch23_func(struct ahc_softc *ahc) +{ + return ((ahc->bugs & AHC_SCBCHAN_UPLOAD_BUG) != 0); +} + static int ahc_patch22_func(struct ahc_softc *ahc); static int ahc_patch22_func(struct ahc_softc *ahc) { - return ((ahc->bugs & AHC_SCBCHAN_UPLOAD_BUG) != 0); + return ((ahc->features & AHC_CMD_CHAN) == 0); } static int ahc_patch21_func(struct ahc_softc *ahc); @@ -873,7 +895,7 @@ static int ahc_patch21_func(struct ahc_softc *ahc) { - return ((ahc->features & AHC_CMD_CHAN) == 0); + return ((ahc->features & AHC_QUEUE_REGS) == 0); } static int ahc_patch20_func(struct ahc_softc *ahc); @@ -881,7 +903,7 @@ static int ahc_patch20_func(struct ahc_softc *ahc) { - return ((ahc->features & AHC_QUEUE_REGS) == 0); + return ((ahc->features & AHC_WIDE) != 0); } static int ahc_patch19_func(struct ahc_softc *ahc); @@ -889,7 +911,7 @@ static int ahc_patch19_func(struct ahc_softc *ahc) { - return ((ahc->features & AHC_WIDE) != 0); + return ((ahc->flags & AHC_SCB_BTT) != 0); } static int ahc_patch18_func(struct ahc_softc *ahc); @@ -897,7 +919,7 @@ static int ahc_patch18_func(struct ahc_softc *ahc) { - return ((ahc->flags & AHC_SCB_BTT) != 0); + return ((ahc->bugs & AHC_PCI_2_1_RETRY_BUG) != 0); } static int ahc_patch17_func(struct ahc_softc *ahc); @@ -905,7 +927,7 @@ static int ahc_patch17_func(struct ahc_softc *ahc) { - return ((ahc->bugs & AHC_PCI_2_1_RETRY_BUG) != 0); + return ((ahc->flags & AHC_TMODE_WIDEODD_BUG) != 0); } static int ahc_patch16_func(struct ahc_softc *ahc); @@ -913,7 +935,7 @@ static int ahc_patch16_func(struct ahc_softc *ahc) { - return ((ahc->flags & AHC_TMODE_WIDEODD_BUG) != 0); + return ((ahc->bugs & AHC_AUTOFLUSH_BUG) != 0); } static int ahc_patch15_func(struct ahc_softc *ahc); @@ -921,7 +943,7 @@ static int ahc_patch15_func(struct ahc_softc *ahc) { - return ((ahc->bugs & AHC_AUTOFLUSH_BUG) != 0); + return ((ahc->features & AHC_ULTRA2) == 0); } static int ahc_patch14_func(struct ahc_softc *ahc); @@ -929,7 +951,7 @@ static int ahc_patch14_func(struct ahc_softc *ahc) { - return ((ahc->features & AHC_ULTRA2) == 0); + return ((ahc->bugs & AHC_PCI_MWI_BUG) != 0 && ahc->pci_cachesize != 0); } static int ahc_patch13_func(struct ahc_softc *ahc); @@ -937,7 +959,7 @@ static int ahc_patch13_func(struct ahc_softc *ahc) { - return ((ahc->bugs & AHC_PCI_MWI_BUG) != 0 && ahc->pci_cachesize != 0); + return ((ahc->flags & AHC_39BIT_ADDRESSING) != 0); } static int ahc_patch12_func(struct ahc_softc *ahc); @@ -1062,95 +1084,96 @@ { ahc_patch3_func, 27, 1, 2 }, { ahc_patch0_func, 28, 1, 1 }, { ahc_patch6_func, 34, 1, 1 }, - { ahc_patch7_func, 37, 65, 21 }, + { ahc_patch7_func, 37, 62, 21 }, { ahc_patch8_func, 37, 1, 1 }, - { ahc_patch9_func, 45, 3, 2 }, - { ahc_patch0_func, 48, 3, 1 }, - { ahc_patch10_func, 52, 1, 2 }, - { ahc_patch0_func, 53, 2, 3 }, - { ahc_patch1_func, 53, 1, 2 }, - { ahc_patch0_func, 54, 1, 1 }, - { ahc_patch2_func, 56, 2, 1 }, - { ahc_patch9_func, 58, 1, 2 }, - { ahc_patch0_func, 59, 1, 1 }, - { ahc_patch9_func, 63, 1, 2 }, - { ahc_patch0_func, 64, 1, 1 }, - { ahc_patch9_func, 73, 1, 2 }, - { ahc_patch0_func, 74, 1, 1 }, - { ahc_patch9_func, 77, 1, 2 }, - { ahc_patch0_func, 78, 1, 1 }, - { ahc_patch11_func, 88, 1, 2 }, - { ahc_patch0_func, 89, 1, 1 }, - { ahc_patch9_func, 97, 1, 2 }, - { ahc_patch0_func, 98, 1, 1 }, - { ahc_patch8_func, 102, 9, 4 }, - { ahc_patch1_func, 104, 1, 2 }, - { ahc_patch0_func, 105, 1, 1 }, - { ahc_patch2_func, 107, 2, 1 }, - { ahc_patch2_func, 116, 4, 1 }, - { ahc_patch1_func, 120, 1, 2 }, - { ahc_patch0_func, 121, 2, 3 }, - { ahc_patch2_func, 121, 1, 2 }, - { ahc_patch0_func, 122, 1, 1 }, - { ahc_patch7_func, 123, 4, 2 }, - { ahc_patch0_func, 127, 1, 1 }, - { ahc_patch12_func, 129, 2, 1 }, - { ahc_patch1_func, 131, 1, 2 }, - { ahc_patch0_func, 132, 1, 1 }, - { ahc_patch7_func, 133, 4, 1 }, - { ahc_patch7_func, 144, 80, 9 }, - { ahc_patch4_func, 162, 1, 1 }, - { ahc_patch1_func, 175, 1, 1 }, - { ahc_patch9_func, 183, 1, 2 }, - { ahc_patch0_func, 184, 1, 1 }, - { ahc_patch9_func, 193, 1, 2 }, - { ahc_patch0_func, 194, 1, 1 }, - { ahc_patch9_func, 210, 6, 2 }, - { ahc_patch0_func, 216, 6, 1 }, - { ahc_patch8_func, 224, 18, 2 }, - { ahc_patch1_func, 237, 1, 1 }, - { ahc_patch1_func, 244, 1, 2 }, - { ahc_patch0_func, 245, 2, 2 }, - { ahc_patch12_func, 246, 1, 1 }, - { ahc_patch9_func, 254, 33, 2 }, - { ahc_patch1_func, 270, 16, 1 }, - { ahc_patch13_func, 287, 14, 1 }, - { ahc_patch1_func, 301, 2, 2 }, - { ahc_patch0_func, 303, 3, 3 }, - { ahc_patch9_func, 303, 1, 2 }, - { ahc_patch0_func, 304, 2, 1 }, - { ahc_patch1_func, 308, 1, 2 }, - { ahc_patch0_func, 309, 1, 1 }, - { ahc_patch9_func, 313, 1, 1 }, - { ahc_patch9_func, 316, 2, 2 }, - { ahc_patch0_func, 318, 4, 1 }, - { ahc_patch13_func, 322, 1, 1 }, - { ahc_patch14_func, 325, 2, 3 }, - { ahc_patch9_func, 325, 1, 2 }, - { ahc_patch0_func, 326, 1, 1 }, - { ahc_patch6_func, 331, 1, 2 }, - { ahc_patch0_func, 332, 1, 1 }, - { ahc_patch1_func, 336, 45, 10 }, - { ahc_patch6_func, 345, 2, 4 }, - { ahc_patch7_func, 345, 1, 1 }, - { ahc_patch8_func, 346, 1, 1 }, - { ahc_patch0_func, 347, 1, 1 }, - { ahc_patch15_func, 348, 1, 1 }, - { ahc_patch6_func, 367, 6, 3 }, - { ahc_patch15_func, 367, 5, 1 }, - { ahc_patch0_func, 373, 5, 1 }, - { ahc_patch0_func, 381, 51, 15 }, - { ahc_patch13_func, 381, 1, 1 }, - { ahc_patch7_func, 383, 2, 2 }, - { ahc_patch16_func, 384, 1, 1 }, - { ahc_patch9_func, 387, 1, 1 }, - { ahc_patch17_func, 394, 1, 1 }, - { ahc_patch13_func, 399, 9, 3 }, - { ahc_patch9_func, 400, 3, 2 }, - { ahc_patch0_func, 403, 3, 1 }, - { ahc_patch9_func, 411, 6, 2 }, - { ahc_patch0_func, 417, 8, 1 }, - { ahc_patch13_func, 425, 1, 1 }, + { ahc_patch9_func, 42, 3, 2 }, + { ahc_patch0_func, 45, 3, 1 }, + { ahc_patch10_func, 49, 1, 2 }, + { ahc_patch0_func, 50, 2, 3 }, + { ahc_patch1_func, 50, 1, 2 }, + { ahc_patch0_func, 51, 1, 1 }, + { ahc_patch2_func, 53, 2, 1 }, + { ahc_patch9_func, 55, 1, 2 }, + { ahc_patch0_func, 56, 1, 1 }, + { ahc_patch9_func, 60, 1, 2 }, + { ahc_patch0_func, 61, 1, 1 }, + { ahc_patch9_func, 70, 1, 2 }, + { ahc_patch0_func, 71, 1, 1 }, + { ahc_patch9_func, 74, 1, 2 }, + { ahc_patch0_func, 75, 1, 1 }, + { ahc_patch11_func, 85, 1, 2 }, + { ahc_patch0_func, 86, 1, 1 }, + { ahc_patch9_func, 94, 1, 2 }, + { ahc_patch0_func, 95, 1, 1 }, + { ahc_patch8_func, 99, 9, 4 }, + { ahc_patch1_func, 101, 1, 2 }, + { ahc_patch0_func, 102, 1, 1 }, + { ahc_patch2_func, 104, 2, 1 }, + { ahc_patch2_func, 113, 4, 1 }, + { ahc_patch1_func, 117, 1, 2 }, + { ahc_patch0_func, 118, 2, 3 }, + { ahc_patch2_func, 118, 1, 2 }, + { ahc_patch0_func, 119, 1, 1 }, + { ahc_patch7_func, 120, 4, 2 }, + { ahc_patch0_func, 124, 1, 1 }, + { ahc_patch12_func, 126, 2, 1 }, + { ahc_patch1_func, 128, 1, 2 }, + { ahc_patch0_func, 129, 1, 1 }, + { ahc_patch7_func, 130, 4, 1 }, + { ahc_patch7_func, 141, 80, 9 }, + { ahc_patch4_func, 159, 1, 1 }, + { ahc_patch1_func, 172, 1, 1 }, + { ahc_patch9_func, 180, 1, 2 }, + { ahc_patch0_func, 181, 1, 1 }, + { ahc_patch9_func, 190, 1, 2 }, + { ahc_patch0_func, 191, 1, 1 }, + { ahc_patch9_func, 207, 6, 2 }, + { ahc_patch0_func, 213, 6, 1 }, + { ahc_patch8_func, 221, 18, 2 }, + { ahc_patch1_func, 234, 1, 1 }, + { ahc_patch1_func, 241, 1, 2 }, + { ahc_patch0_func, 242, 2, 2 }, + { ahc_patch12_func, 243, 1, 1 }, + { ahc_patch9_func, 251, 31, 3 }, + { ahc_patch1_func, 267, 14, 2 }, + { ahc_patch13_func, 272, 1, 1 }, + { ahc_patch14_func, 282, 14, 1 }, + { ahc_patch1_func, 298, 1, 2 }, + { ahc_patch0_func, 299, 1, 1 }, + { ahc_patch9_func, 302, 1, 1 }, + { ahc_patch13_func, 307, 1, 1 }, + { ahc_patch9_func, 308, 2, 2 }, + { ahc_patch0_func, 310, 4, 1 }, + { ahc_patch14_func, 314, 1, 1 }, + { ahc_patch15_func, 317, 2, 3 }, + { ahc_patch9_func, 317, 1, 2 }, + { ahc_patch0_func, 318, 1, 1 }, + { ahc_patch6_func, 323, 1, 2 }, + { ahc_patch0_func, 324, 1, 1 }, + { ahc_patch1_func, 328, 50, 11 }, + { ahc_patch6_func, 337, 2, 4 }, + { ahc_patch7_func, 337, 1, 1 }, + { ahc_patch8_func, 338, 1, 1 }, + { ahc_patch0_func, 339, 1, 1 }, + { ahc_patch16_func, 340, 1, 1 }, + { ahc_patch6_func, 359, 6, 3 }, + { ahc_patch16_func, 359, 5, 1 }, + { ahc_patch0_func, 365, 5, 1 }, + { ahc_patch13_func, 373, 5, 1 }, + { ahc_patch0_func, 378, 54, 17 }, + { ahc_patch14_func, 378, 1, 1 }, + { ahc_patch7_func, 380, 2, 2 }, + { ahc_patch17_func, 381, 1, 1 }, + { ahc_patch9_func, 384, 1, 1 }, + { ahc_patch18_func, 391, 1, 1 }, + { ahc_patch14_func, 396, 9, 3 }, + { ahc_patch9_func, 397, 3, 2 }, + { ahc_patch0_func, 400, 3, 1 }, + { ahc_patch9_func, 408, 6, 2 }, + { ahc_patch0_func, 414, 9, 2 }, + { ahc_patch13_func, 414, 1, 1 }, + { ahc_patch13_func, 423, 2, 1 }, + { ahc_patch14_func, 425, 1, 1 }, { ahc_patch9_func, 427, 1, 2 }, { ahc_patch0_func, 428, 1, 1 }, { ahc_patch7_func, 431, 1, 1 }, @@ -1159,95 +1182,100 @@ { ahc_patch6_func, 434, 1, 2 }, { ahc_patch0_func, 435, 1, 1 }, { ahc_patch9_func, 436, 1, 1 }, - { ahc_patch13_func, 437, 9, 4 }, - { ahc_patch9_func, 437, 1, 1 }, - { ahc_patch9_func, 444, 2, 1 }, - { ahc_patch0_func, 446, 4, 3 }, - { ahc_patch9_func, 446, 1, 2 }, - { ahc_patch0_func, 447, 3, 1 }, - { ahc_patch1_func, 451, 2, 1 }, - { ahc_patch7_func, 453, 5, 2 }, - { ahc_patch0_func, 458, 1, 1 }, - { ahc_patch8_func, 459, 107, 23 }, - { ahc_patch1_func, 460, 3, 2 }, - { ahc_patch0_func, 463, 5, 3 }, - { ahc_patch9_func, 463, 2, 2 }, - { ahc_patch0_func, 465, 3, 1 }, - { ahc_patch1_func, 470, 2, 2 }, - { ahc_patch0_func, 472, 6, 3 }, - { ahc_patch9_func, 472, 2, 2 }, - { ahc_patch0_func, 474, 3, 1 }, - { ahc_patch1_func, 480, 2, 2 }, - { ahc_patch0_func, 482, 9, 7 }, - { ahc_patch9_func, 482, 5, 6 }, - { ahc_patch18_func, 482, 1, 2 }, - { ahc_patch0_func, 483, 1, 1 }, - { ahc_patch18_func, 485, 1, 2 }, + { ahc_patch15_func, 437, 1, 2 }, + { ahc_patch13_func, 437, 1, 1 }, + { ahc_patch14_func, 439, 9, 4 }, + { ahc_patch9_func, 439, 1, 1 }, + { ahc_patch9_func, 446, 2, 1 }, + { ahc_patch0_func, 448, 4, 3 }, + { ahc_patch9_func, 448, 1, 2 }, + { ahc_patch0_func, 449, 3, 1 }, + { ahc_patch1_func, 453, 2, 1 }, + { ahc_patch7_func, 455, 5, 2 }, + { ahc_patch0_func, 460, 1, 1 }, + { ahc_patch8_func, 461, 109, 23 }, + { ahc_patch1_func, 463, 3, 2 }, + { ahc_patch0_func, 466, 5, 3 }, + { ahc_patch9_func, 466, 2, 2 }, + { ahc_patch0_func, 468, 3, 1 }, + { ahc_patch1_func, 473, 2, 2 }, + { ahc_patch0_func, 475, 6, 3 }, + { ahc_patch9_func, 475, 2, 2 }, + { ahc_patch0_func, 477, 3, 1 }, + { ahc_patch1_func, 483, 2, 2 }, + { ahc_patch0_func, 485, 9, 7 }, + { ahc_patch9_func, 485, 5, 6 }, + { ahc_patch19_func, 485, 1, 2 }, { ahc_patch0_func, 486, 1, 1 }, - { ahc_patch0_func, 487, 4, 1 }, - { ahc_patch6_func, 491, 3, 2 }, - { ahc_patch0_func, 494, 1, 1 }, - { ahc_patch1_func, 497, 1, 1 }, - { ahc_patch6_func, 502, 1, 2 }, - { ahc_patch0_func, 503, 1, 1 }, - { ahc_patch19_func, 540, 7, 1 }, - { ahc_patch3_func, 568, 1, 2 }, - { ahc_patch0_func, 569, 1, 1 }, - { ahc_patch20_func, 572, 1, 1 }, - { ahc_patch8_func, 574, 100, 31 }, - { ahc_patch4_func, 575, 1, 1 }, - { ahc_patch1_func, 581, 2, 2 }, - { ahc_patch0_func, 583, 1, 1 }, - { ahc_patch9_func, 584, 3, 3 }, - { ahc_patch14_func, 585, 1, 1 }, - { ahc_patch0_func, 587, 4, 1 }, - { ahc_patch18_func, 595, 2, 2 }, - { ahc_patch0_func, 597, 1, 1 }, - { ahc_patch18_func, 601, 10, 3 }, - { ahc_patch5_func, 603, 8, 1 }, - { ahc_patch0_func, 611, 9, 2 }, - { ahc_patch5_func, 612, 8, 1 }, - { ahc_patch4_func, 622, 1, 2 }, - { ahc_patch0_func, 623, 1, 1 }, - { ahc_patch18_func, 624, 1, 2 }, - { ahc_patch0_func, 625, 3, 2 }, - { ahc_patch4_func, 627, 1, 1 }, - { ahc_patch5_func, 628, 1, 1 }, - { ahc_patch5_func, 631, 1, 1 }, - { ahc_patch5_func, 633, 1, 1 }, - { ahc_patch4_func, 635, 2, 2 }, - { ahc_patch0_func, 637, 2, 1 }, + { ahc_patch19_func, 488, 1, 2 }, + { ahc_patch0_func, 489, 1, 1 }, + { ahc_patch0_func, 490, 4, 1 }, + { ahc_patch6_func, 494, 3, 2 }, + { ahc_patch0_func, 497, 1, 1 }, + { ahc_patch1_func, 500, 1, 1 }, + { ahc_patch6_func, 506, 1, 2 }, + { ahc_patch0_func, 507, 1, 1 }, + { ahc_patch20_func, 544, 7, 1 }, + { ahc_patch3_func, 572, 1, 2 }, + { ahc_patch0_func, 573, 1, 1 }, + { ahc_patch21_func, 576, 1, 1 }, + { ahc_patch8_func, 578, 104, 33 }, + { ahc_patch4_func, 579, 1, 1 }, + { ahc_patch1_func, 585, 2, 2 }, + { ahc_patch0_func, 587, 1, 1 }, + { ahc_patch1_func, 590, 1, 2 }, + { ahc_patch0_func, 591, 1, 1 }, + { ahc_patch9_func, 592, 3, 3 }, + { ahc_patch15_func, 593, 1, 1 }, + { ahc_patch0_func, 595, 4, 1 }, + { ahc_patch19_func, 603, 2, 2 }, + { ahc_patch0_func, 605, 1, 1 }, + { ahc_patch19_func, 609, 10, 3 }, + { ahc_patch5_func, 611, 8, 1 }, + { ahc_patch0_func, 619, 9, 2 }, + { ahc_patch5_func, 620, 8, 1 }, + { ahc_patch4_func, 630, 1, 2 }, + { ahc_patch0_func, 631, 1, 1 }, + { ahc_patch19_func, 632, 1, 2 }, + { ahc_patch0_func, 633, 3, 2 }, + { ahc_patch4_func, 635, 1, 1 }, + { ahc_patch5_func, 636, 1, 1 }, { ahc_patch5_func, 639, 1, 1 }, - { ahc_patch5_func, 642, 1, 1 }, - { ahc_patch5_func, 645, 1, 1 }, - { ahc_patch18_func, 649, 1, 1 }, - { ahc_patch18_func, 652, 1, 1 }, - { ahc_patch4_func, 658, 1, 1 }, - { ahc_patch6_func, 661, 1, 2 }, - { ahc_patch0_func, 662, 1, 1 }, - { ahc_patch7_func, 674, 16, 1 }, - { ahc_patch4_func, 692, 20, 1 }, - { ahc_patch9_func, 713, 4, 2 }, - { ahc_patch0_func, 717, 4, 1 }, - { ahc_patch9_func, 721, 4, 2 }, - { ahc_patch0_func, 725, 3, 1 }, - { ahc_patch6_func, 731, 1, 1 }, - { ahc_patch21_func, 733, 14, 1 }, - { ahc_patch7_func, 747, 3, 1 }, - { ahc_patch9_func, 759, 24, 8 }, - { ahc_patch18_func, 763, 1, 2 }, - { ahc_patch0_func, 764, 1, 1 }, - { ahc_patch14_func, 769, 4, 2 }, - { ahc_patch0_func, 773, 7, 3 }, - { ahc_patch22_func, 773, 5, 2 }, - { ahc_patch0_func, 778, 2, 1 }, - { ahc_patch0_func, 783, 41, 3 }, - { ahc_patch17_func, 795, 17, 2 }, - { ahc_patch0_func, 812, 1, 1 }, - { ahc_patch4_func, 836, 1, 1 }, - { ahc_patch4_func, 837, 3, 2 }, - { ahc_patch0_func, 840, 1, 1 }, - { ahc_patch4_func, 841, 12, 1 } + { ahc_patch5_func, 641, 1, 1 }, + { ahc_patch4_func, 643, 2, 2 }, + { ahc_patch0_func, 645, 2, 1 }, + { ahc_patch5_func, 647, 1, 1 }, + { ahc_patch5_func, 650, 1, 1 }, + { ahc_patch5_func, 653, 1, 1 }, + { ahc_patch19_func, 657, 1, 1 }, + { ahc_patch19_func, 660, 1, 1 }, + { ahc_patch4_func, 666, 1, 1 }, + { ahc_patch6_func, 669, 1, 2 }, + { ahc_patch0_func, 670, 1, 1 }, + { ahc_patch7_func, 682, 16, 1 }, + { ahc_patch4_func, 698, 20, 1 }, + { ahc_patch9_func, 719, 4, 2 }, + { ahc_patch0_func, 723, 4, 1 }, + { ahc_patch9_func, 727, 4, 2 }, + { ahc_patch0_func, 731, 3, 1 }, + { ahc_patch6_func, 737, 1, 1 }, + { ahc_patch22_func, 739, 14, 1 }, + { ahc_patch7_func, 753, 3, 1 }, + { ahc_patch9_func, 765, 24, 8 }, + { ahc_patch19_func, 769, 1, 2 }, + { ahc_patch0_func, 770, 1, 1 }, + { ahc_patch15_func, 775, 4, 2 }, + { ahc_patch0_func, 779, 7, 3 }, + { ahc_patch23_func, 779, 5, 2 }, + { ahc_patch0_func, 784, 2, 1 }, + { ahc_patch0_func, 789, 42, 3 }, + { ahc_patch18_func, 801, 18, 2 }, + { ahc_patch0_func, 819, 1, 1 }, + { ahc_patch4_func, 843, 1, 1 }, + { ahc_patch4_func, 844, 3, 2 }, + { ahc_patch0_func, 847, 1, 1 }, + { ahc_patch13_func, 848, 3, 1 }, + { ahc_patch4_func, 851, 12, 1 } }; struct cs { u_int16_t begin; @@ -1255,11 +1283,11 @@ } critical_sections[] = { { 11, 18 }, { 21, 30 }, - { 692, 708 }, - { 837, 840 }, - { 841, 847 }, - { 849, 851 }, - { 851, 853 } + { 698, 714 }, + { 844, 847 }, + { 851, 857 }, + { 859, 861 }, + { 861, 863 } }; const int num_critical_sections = sizeof(critical_sections) / sizeof(*critical_sections); diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm.c linux/drivers/scsi/aic7xxx/aicasm/aicasm.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm.c Sun Mar 4 14:30:18 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm.c Sun Aug 12 17:37:53 2001 @@ -14,7 +14,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm.c#6 $ + * $Id: //depot/src/aic7xxx/aicasm/aicasm.c#8 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm.c,v 1.29 2000/10/05 04:25:42 gibbs Exp $ */ @@ -178,9 +178,10 @@ "times\n", appname); } includes_search_curdir = 0; - for (include_dir = search_path.slh_first; + for (include_dir = SLIST_FIRST(&search_path); include_dir != NULL; - include_dir = include_dir->links.sle_next) + include_dir = SLIST_NEXT(include_dir, + links)) /* * All entries before a '-I-' only * apply to includes specified with @@ -276,9 +277,9 @@ { struct instruction *cur_instr; - for(cur_instr = seq_program.stqh_first; - cur_instr != NULL; - cur_instr = cur_instr->links.stqe_next) { + for (cur_instr = STAILQ_FIRST(&seq_program); + cur_instr != NULL; + cur_instr = STAILQ_NEXT(cur_instr, links)) { if (cur_instr->patch_label != NULL) { struct ins_format3 *f3_instr; u_int address; @@ -312,16 +313,18 @@ instrcount = 0; fprintf(ofile, "/* - * DO NOT EDIT - This file is automatically generated. - */\n"); + * DO NOT EDIT - This file is automatically generated + * from the following source files: + * +%s */\n", versions); fprintf(ofile, "static uint8_t seqprog[] = {\n"); - for(cur_instr = seq_program.stqh_first; - cur_instr != NULL; - cur_instr = cur_instr->links.stqe_next) { + for (cur_instr = STAILQ_FIRST(&seq_program); + cur_instr != NULL; + cur_instr = STAILQ_NEXT(cur_instr, links)) { fprintf(ofile, "%s\t0x%02x, 0x%02x, 0x%02x, 0x%02x", - cur_instr == seq_program.stqh_first ? "" : ",\n", + cur_instr == STAILQ_FIRST(&seq_program) ? "" : ",\n", #if BYTE_ORDER == LITTLE_ENDIAN cur_instr->format.bytes[0], cur_instr->format.bytes[1], @@ -340,9 +343,9 @@ /* * Output patch information. Patch functions first. */ - for(cur_node = SLIST_FIRST(&patch_functions); - cur_node != NULL; - cur_node = SLIST_NEXT(cur_node,links)) { + for (cur_node = SLIST_FIRST(&patch_functions); + cur_node != NULL; + cur_node = SLIST_NEXT(cur_node,links)) { fprintf(ofile, "static int ahc_patch%d_func(struct ahc_softc *ahc); diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm.h linux/drivers/scsi/aic7xxx/aicasm/aicasm.h --- v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm.h Sun Mar 4 14:30:18 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm.h Sun Aug 12 10:51:42 2001 @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm.h#4 $ + * $Id: //depot/src/aic7xxx/aicasm/aicasm.h#5 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm.h,v 1.11 2000/09/22 22:19:54 gibbs Exp $ */ @@ -69,6 +69,7 @@ extern char *appname; extern int yylineno; extern char *yyfilename; +extern char *versions; void stop(const char *errstring, int err_code); void include_file(char *file_name, include_type type); diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y --- v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y Sun Mar 4 14:30:18 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y Sun Aug 12 10:51:42 2001 @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm_gram.y#6 $ + * $Id: //depot/src/aic7xxx/aicasm/aicasm_gram.y#7 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_gram.y,v 1.12 2000/10/31 18:44:32 gibbs Exp $ */ @@ -53,6 +53,7 @@ int yylineno; char *yyfilename; +char *versions; static symbol_t *cur_symbol; static symtype cur_symtype; static symbol_t *accumulator; @@ -79,6 +80,7 @@ static void type_check(symbol_t *symbol, expression_t *expression, int and_op); static void make_expression(expression_t *immed, int value); static void add_conditional(symbol_t *symbol); +static void add_version(const char *verstring); static int is_download_const(expression_t *immed); #define YYDEBUG 1 @@ -124,11 +126,11 @@ %token T_NUMBER -%token T_PATH +%token T_PATH T_STRING %token T_CEXPR -%token T_EOF T_INCLUDE +%token T_EOF T_INCLUDE T_VERSION %token T_SHR T_SHL T_ROR T_ROL @@ -180,6 +182,8 @@ program: include | program include +| version +| program version | register | program register | constant @@ -202,9 +206,18 @@ include: T_INCLUDE '<' T_PATH '>' - { include_file($3, BRACKETED_INCLUDE); } + { + include_file($3, BRACKETED_INCLUDE); + } | T_INCLUDE '"' T_PATH '"' - { include_file($3, QUOTED_INCLUDE); } + { + include_file($3, QUOTED_INCLUDE); + } +; + +version: + T_VERSION '=' T_STRING + { add_version($3); } ; register: @@ -1436,6 +1449,26 @@ initialize_symbol(symbol); symbol->info.condinfo->func_num = numfuncs++; symlist_add(&patch_functions, symbol, SYMLIST_INSERT_HEAD); +} + +static void +add_version(const char *verstring) +{ + const char prefix[] = " * "; + int newlen; + int oldlen; + + newlen = strlen(verstring) + strlen(prefix); + oldlen = 0; + if (versions != NULL) + oldlen = strlen(versions); + versions = realloc(versions, newlen + oldlen + 2); + if (versions == NULL) + stop("Can't allocate version string", EX_SOFTWARE); + strcpy(&versions[oldlen], prefix); + strcpy(&versions[oldlen + strlen(prefix)], verstring); + versions[newlen + oldlen] = '\n'; + versions[newlen + oldlen + 1] = '\0'; } void diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l linux/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l --- v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l Sun Mar 4 14:30:18 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l Sun Aug 12 10:51:42 2001 @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm_scan.l#4 $ + * $Id: //depot/src/aic7xxx/aicasm/aicasm_scan.l#5 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_scan.l,v 1.13 2000/09/22 22:19:54 gibbs Exp $ */ @@ -54,6 +54,7 @@ char string_buf[MAX_STR_CONST]; char *string_buf_ptr; int parren_count; +int quote_count; %} PATH [-/A-Za-z0-9_.]*[./][-/A-Za-z0-9_.]* @@ -63,6 +64,7 @@ %x COMMENT %x CEXPR %x INCLUDE +%x STRING %% \n { ++yylineno; } @@ -94,8 +96,9 @@ } \n { ++yylineno; } [^()\n]+ { - char *yptr = yytext; + char *yptr; + yptr = yytext; while (*yptr != '\0') { /* Remove duplicate spaces */ if (*yptr == '\t') @@ -109,6 +112,25 @@ } } +VERSION { return T_VERSION; } +\" { + string_buf_ptr = string_buf; + BEGIN STRING; + } +[^"]+ { + char *yptr; + + yptr = yytext; + while (*yptr) + *string_buf_ptr++ = *yptr++; + } +\" { + /* All done */ + BEGIN INITIAL; + *string_buf_ptr = '\0'; + yylval.str = string_buf; + return T_STRING; + } {SPACE} ; /* Register/SCB/SRAM definition keywords */ @@ -175,7 +197,7 @@ else { return T_ELSE; } /* Allowed Symbols */ -[-+,:()~|&."{};<>[\]!] { return yytext[0]; } +[-+,:()~|&."{};<>[\]!=] { return yytext[0]; } /* Number processing */ 0[0-7]* { @@ -194,17 +216,36 @@ } /* Include Files */ -#include { return T_INCLUDE; BEGIN INCLUDE;} -[<>\"] { return yytext[0]; } -{PATH} { yylval.str = strdup(yytext); return T_PATH; } -; { BEGIN INITIAL; return yytext[0]; } +#include{SPACE} { + BEGIN INCLUDE; + quote_count = 0; + return T_INCLUDE; + } +[<] { return yytext[0]; } +[>] { BEGIN INITIAL; return yytext[0]; } +[\"] { + if (quote_count != 0) + BEGIN INITIAL; + quote_count++; + return yytext[0]; + } . { stop("Invalid include line", EX_DATAERR); } /* For parsing C include files with #define foo */ #define { yylval.value = TRUE; return T_CONST; } /* Throw away macros */ #define[^\n]*[()]+[^\n]* ; -{PATH} { yylval.str = strdup(yytext); return T_PATH; } +{PATH} { + char *yptr; + + yptr = yytext; + string_buf_ptr = string_buf; + while (*yptr) + *string_buf_ptr++ = *yptr++; + yylval.str = string_buf; + *string_buf_ptr = '\0'; + return T_PATH; + } {WORD} { yylval.sym = symtable_get(yytext); return T_SYMBOL; } diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c --- v2.4.8/linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c Sun Aug 12 17:37:53 2001 @@ -14,7 +14,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm_symbol.c#5 $ + * $Id: //depot/src/aic7xxx/aicasm/aicasm_symbol.c#7 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_symbol.c,v 1.11 2000/09/22 22:19:54 gibbs Exp $ */ @@ -191,11 +191,11 @@ { symbol_node_t *curnode; - curnode = symlist->slh_first; + curnode = SLIST_FIRST(symlist); while(curnode != NULL) { if (strcmp(symname, curnode->symbol->name) == 0) break; - curnode = curnode->links.sle_next; + curnode = SLIST_NEXT(curnode, links); } return (curnode); } @@ -231,7 +231,7 @@ /* NOTREACHED */ } - curnode = symlist->slh_first; + curnode = SLIST_FIRST(symlist); if (curnode == NULL || (mask && (curnode->symbol->info.minfo->mask > newnode->symbol->info.minfo->mask)) @@ -242,14 +242,14 @@ } while (1) { - if (curnode->links.sle_next == NULL) { + if (SLIST_NEXT(curnode, links) == NULL) { SLIST_INSERT_AFTER(curnode, newnode, links); break; } else { symbol_t *cursymbol; - cursymbol = curnode->links.sle_next->symbol; + cursymbol = SLIST_NEXT(curnode, links)->symbol; if ((mask && (cursymbol->info.minfo->mask > symbol->info.minfo->mask)) || (!mask &&(cursymbol->info.rinfo->address > @@ -259,7 +259,7 @@ break; } } - curnode = curnode->links.sle_next; + curnode = SLIST_NEXT(curnode, links); } } else { SLIST_INSERT_HEAD(symlist, newnode, links); @@ -271,9 +271,9 @@ { symbol_node_t *node1, *node2; - node1 = symlist->slh_first; + node1 = SLIST_FIRST(symlist); while (node1 != NULL) { - node2 = node1->links.sle_next; + node2 = SLIST_NEXT(node1, links); free(node1); node1 = node2; } @@ -287,7 +287,7 @@ symbol_node_t *node; *symlist_dest = *symlist_src1; - while((node = symlist_src2->slh_first) != NULL) { + while((node = SLIST_FIRST(symlist_src2)) != NULL) { SLIST_REMOVE_HEAD(symlist_src2, links); SLIST_INSERT_HEAD(symlist_dest, node, links); } @@ -357,28 +357,28 @@ } /* Put in the masks and bits */ - while (masks.slh_first != NULL) { + while (SLIST_FIRST(&masks) != NULL) { symbol_node_t *curnode; symbol_node_t *regnode; char *regname; - curnode = masks.slh_first; + curnode = SLIST_FIRST(&masks); SLIST_REMOVE_HEAD(&masks, links); regnode = - curnode->symbol->info.minfo->symrefs.slh_first; + SLIST_FIRST(&curnode->symbol->info.minfo->symrefs); regname = regnode->symbol->name; regnode = symlist_search(®isters, regname); SLIST_INSERT_AFTER(regnode, curnode, links); } /* Add the aliases */ - while (aliases.slh_first != NULL) { + while (SLIST_FIRST(&aliases) != NULL) { symbol_node_t *curnode; symbol_node_t *regnode; char *regname; - curnode = aliases.slh_first; + curnode = SLIST_FIRST(&aliases); SLIST_REMOVE_HEAD(&aliases, links); regname = curnode->symbol->info.ainfo->parent->name; @@ -389,15 +389,17 @@ /* Output what we have */ fprintf(ofile, "/* - * DO NOT EDIT - This file is automatically generated. - */\n"); - while (registers.slh_first != NULL) { + * DO NOT EDIT - This file is automatically generated + * from the following source files: + * +%s */\n", versions); + while (SLIST_FIRST(®isters) != NULL) { symbol_node_t *curnode; u_int8_t value; char *tab_str; char *tab_str2; - curnode = registers.slh_first; + curnode = SLIST_FIRST(®isters); SLIST_REMOVE_HEAD(®isters, links); switch(curnode->symbol->type) { case REGISTER: @@ -439,10 +441,10 @@ } fprintf(ofile, "\n\n"); - while (constants.slh_first != NULL) { + while (SLIST_FIRST(&constants) != NULL) { symbol_node_t *curnode; - curnode = constants.slh_first; + curnode = SLIST_FIRST(&constants); SLIST_REMOVE_HEAD(&constants, links); fprintf(ofile, "#define\t%-8s\t0x%02x\n", curnode->symbol->name, @@ -453,10 +455,10 @@ fprintf(ofile, "\n\n/* Downloaded Constant Definitions */\n"); - while (download_constants.slh_first != NULL) { + while (SLIST_FIRST(&download_constants) != NULL) { symbol_node_t *curnode; - curnode = download_constants.slh_first; + curnode = SLIST_FIRST(&download_constants); SLIST_REMOVE_HEAD(&download_constants, links); fprintf(ofile, "#define\t%-8s\t0x%02x\n", curnode->symbol->name, diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/aic7xxx/cam.h linux/drivers/scsi/aic7xxx/cam.h --- v2.4.8/linux/drivers/scsi/aic7xxx/cam.h Sun Mar 4 14:30:18 2001 +++ linux/drivers/scsi/aic7xxx/cam.h Sun Aug 12 10:51:42 2001 @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/cam.h#9 $ + * $Id: //depot/src/linux/drivers/scsi/aic7xxx/cam.h#10 $ */ #ifndef _AIC7XXX_CAM_H @@ -102,10 +102,6 @@ * back into the XPT queue. */ CAM_REQUEUE_REQ = DID_BUS_BUSY, - /* - * The transaction has made it through our queue routine. - */ - CAM_SIM_QUEUED = 0x200, CAM_STATUS_MASK = 0x3F } cam_status; diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/atp870u.c linux/drivers/scsi/atp870u.c --- v2.4.8/linux/drivers/scsi/atp870u.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/atp870u.c Sun Aug 12 10:51:41 2001 @@ -2730,7 +2730,7 @@ { printk(" %2x ",workrequ->cmnd[k]); } - printk(" last_lenu= %x ",dev->id[j].last_lenu); + printk(" last_lenu= %lx ",dev->id[j].last_lenu); } } return (SCSI_ABORT_SNOOZE); diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/cpqfc.Readme linux/drivers/scsi/cpqfc.Readme --- v2.4.8/linux/drivers/scsi/cpqfc.Readme Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/cpqfc.Readme Sun Aug 12 10:51:41 2001 @@ -7,6 +7,19 @@ SEST size 512 Exchanges (simultaneous I/Os) limited by module kmalloc() max of 128k bytes contiguous. +Ver 2.0.5 Aug 06, 2001 + * Reject non-existent luns in the driver rather than letting the + hardware do it. (some HW behaves differently than others in this area.) + * Changed Makefile to rely on "make dep" instead of explicit dependencies + * ifdef'ed out fibre channel analyzer triggering debug code + * fixed a jiffies wrapping issue + +Ver 2.0.4 Aug 01, 2001 + * Incorporated fix for target device reset from Steeleye + * Fixed passthrough ioctl so it doesn't hang. + * Fixed hang in launch_FCworker_thread() that occurred on some machines. + * Avoid problem when number of volumes in a single cabinet > 8 + Ver 2.0.2 July 23, 2001 Changed the semiphore changes so the driver would compile in 2.4.7. This version is for 2.4.7 and beyond. diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/cpqfcTSinit.c linux/drivers/scsi/cpqfcTSinit.c --- v2.4.8/linux/drivers/scsi/cpqfcTSinit.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/cpqfcTSinit.c Sun Aug 12 10:51:41 2001 @@ -41,7 +41,9 @@ #include #include // request_region() prototype #include // ioremap() +#if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,7) #include +#endif #ifdef __alpha__ #define __KERNEL_SYSCALLS__ #endif @@ -55,6 +57,7 @@ #include "hosts.h" #include "cpqfcTSchip.h" #include "cpqfcTSstructs.h" +#include "cpqfcTStrigger.h" #include "cpqfcTS.h" @@ -88,7 +91,17 @@ #endif - +#if LINUX_VERSION_CODE >= LinuxVersionCode(2,4,7) +# define CPQFC_DECLARE_COMPLETION(x) DECLARE_COMPLETION(x) +# define CPQFC_WAITING waiting +# define CPQFC_COMPLETE(x) complete(x) +# define CPQFC_WAIT_FOR_COMPLETION(x) wait_for_completion(x); +#else +# define CPQFC_DECLARE_COMPLETION(x) DECLARE_MUTEX_LOCKED(x) +# define CPQFC_WAITING sem +# define CPQFC_COMPLETE(x) up(x) +# define CPQFC_WAIT_FOR_COMPLETION(x) down(x) +#endif /* local function to load our per-HBA (local) data for chip registers, FC link state, all FC exchanges, etc. @@ -227,6 +240,8 @@ cpqfcHBAdata->notify_wt = &sem; + /* must unlock before kernel_thread(), for it may cause a reschedule. */ + spin_unlock_irq(&io_request_lock); kernel_thread((int (*)(void *))cpqfcTSWorkerThread, (void *) HostAdapter, 0); /* @@ -234,6 +249,7 @@ */ down (&sem); + spin_lock_irq(&io_request_lock); cpqfcHBAdata->notify_wt = NULL; LEAVE("launch_FC_worker_thread"); @@ -417,13 +433,14 @@ // 3.028 LILP received, link up, FLOGI starts // slowest(worst) case, measured on 1Gb Finisar GT analyzer - int wait_time; - unsigned long flags=0; - - spin_unlock_irqrestore(&io_request_lock, flags); - for( wait_time = jiffies + 4*HZ; wait_time > jiffies; ) - schedule(); // (our worker task needs to run) - spin_lock_irqsave(&io_request_lock, flags); + unsigned long stop_time; + + spin_unlock_irq(&io_request_lock); + stop_time = jiffies + 4*HZ; + while ( time_before(jiffies, stop_time) ) + schedule(); // (our worker task needs to run) + + spin_lock_irq(&io_request_lock); } NumberOfAdapters++; @@ -435,7 +452,6 @@ return NumberOfAdapters; } - static void my_ioctl_done (Scsi_Cmnd * SCpnt) { struct request * req; @@ -443,9 +459,8 @@ req = &SCpnt->request; req->rq_status = RQ_SCSI_DONE; /* Busy, but indicate request done */ - if (req->waiting != NULL) { - complete(req->waiting); - } + if (req->CPQFC_WAITING != NULL) + CPQFC_COMPLETE(req->CPQFC_WAITING); } @@ -463,7 +478,6 @@ cpqfc_passthru_t *vendor_cmd; Scsi_Device *SDpnt; Scsi_Cmnd *ScsiPassThruCmnd; - unsigned long flags; ENTER("cpqfcTS_ioctl "); @@ -560,30 +574,25 @@ ScsiPassThruCmnd->SCp.phase = vendor_cmd->bus; ScsiPassThruCmnd->SCp.have_data_in = vendor_cmd->pdrive; - - // We copy the scheme used by scsi.c to submit commands // to our own HBA. We do this in order to stall the // thread calling the IOCTL until it completes, and use // the same "_quecommand" function for synchronizing // FC Link events with our "worker thread". - - spin_lock_irqsave(&io_request_lock, flags); + { - DECLARE_COMPLETION(wait); - ScsiPassThruCmnd->request.waiting = &wait; + CPQFC_DECLARE_COMPLETION(wait); + ScsiPassThruCmnd->request.CPQFC_WAITING = &wait; // eventually gets us to our own _quecommand routine scsi_do_cmd( ScsiPassThruCmnd, &vendor_cmd->cdb[0], buf, vendor_cmd->len, my_ioctl_done, 10*HZ, 1);// timeout,retries - spin_unlock_irqrestore(&io_request_lock, flags); // Other I/Os can now resume; we wait for our ioctl // command to complete - wait_for_completion(&wait); - spin_lock_irqsave(&io_request_lock, flags); - ScsiPassThruCmnd->request.waiting = NULL; + CPQFC_WAIT_FOR_COMPLETION(&wait); + ScsiPassThruCmnd->request.CPQFC_WAITING = NULL; } result = ScsiPassThruCmnd->result; @@ -603,7 +612,6 @@ // (*SDpnt->scsi_request_fn)(); wake_up(&SDpnt->scpnt_wait); - spin_unlock_irqrestore(&io_request_lock, flags); // need to pass data back to user (space)? if( (vendor_cmd->rw_flag == VENDOR_READ_OPCODE) && @@ -613,7 +621,7 @@ if( buf) kfree( buf); - + return result; } @@ -1262,6 +1270,11 @@ // printk(" @Q bad targ cmnd %p@ ", Cmnd); QueBadTargetCmnd( cpqfcHBAdata, Cmnd); } + else if (Cmnd->lun >= CPQFCTS_MAX_LUN) + { + printk(KERN_WARNING "cpqfc: Invalid LUN: %d\n", Cmnd->lun); + QueBadTargetCmnd( cpqfcHBAdata, Cmnd); + } else // we know what FC device to send to... { @@ -1486,7 +1499,6 @@ int timeout = 10*HZ; int retries = 1; char scsi_cdb[12]; - unsigned long flags; int result; Scsi_Cmnd * SCpnt; Scsi_Device * SDpnt; @@ -1500,21 +1512,17 @@ scsi_cdb[0] = RELEASE; - spin_lock_irqsave(&io_request_lock, flags); - // allocate with wait = true, interruptible = false SCpnt = scsi_allocate_device(ScsiDev, 1, 0); { - DECLARE_COMPLETION(wait); + CPQFC_DECLARE_COMPLETION(wait); SCpnt->SCp.buffers_residual = FCP_TARGET_RESET; - SCpnt->request.waiting = &wait; + SCpnt->request.CPQFC_WAITING = &wait; scsi_do_cmd(SCpnt, scsi_cdb, NULL, 0, my_ioctl_done, timeout, retries); - spin_unlock_irqrestore(&io_request_lock, flags); - wait_for_completion(&wait); - spin_lock_irqsave(&io_request_lock, flags); - SCpnt->request.waiting = NULL; + CPQFC_WAIT_FOR_COMPLETION(&wait); + SCpnt->request.CPQFC_WAITING = NULL; } /* @@ -1560,7 +1568,6 @@ // (*SDpnt->scsi_request_fn)(); wake_up(&SDpnt->scpnt_wait); - spin_unlock_irqrestore(&io_request_lock, flags); // printk(" LEAVING cpqfcTS_TargetDeviceReset() - return SUCCESS \n"); return SUCCESS; } @@ -1568,9 +1575,13 @@ int cpqfcTS_eh_device_reset(Scsi_Cmnd *Cmnd) { + int retval; Scsi_Device *SDpnt = Cmnd->device; // printk(" ENTERING cpqfcTS_eh_device_reset() \n"); - return cpqfcTS_TargetDeviceReset( SDpnt, 0); + spin_unlock_irq(&io_request_lock); + retval = cpqfcTS_TargetDeviceReset( SDpnt, 0); + spin_lock_irq(&io_request_lock); + return retval; } diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/cpqfcTSstructs.h linux/drivers/scsi/cpqfcTSstructs.h --- v2.4.8/linux/drivers/scsi/cpqfcTSstructs.h Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/cpqfcTSstructs.h Sun Aug 12 10:51:41 2001 @@ -31,7 +31,7 @@ #define CPQFCTS_DRIVER_VER(maj,min,submin) ((maj<<16)|(min<<8)|(submin)) #define VER_MAJOR 2 #define VER_MINOR 0 -#define VER_SUBMINOR 2 +#define VER_SUBMINOR 5 // Macros for kernel (esp. SMP) tracing using a PCI analyzer // (e.g. x86). @@ -77,7 +77,10 @@ // PDA is Peripheral Device Address, VSA is Volume Set Addressing // Linux SCSI parameters #define CPQFCTS_MAX_TARGET_ID 64 -#define CPQFCTS_MAX_LUN 8 // The RA-4x00 supports 32 (Linux SCSI supports 8) + +// Note, changing CPQFCTS_MAX_LUN to less than 32 (e.g, 8) will result in +// strange behavior if a box with more than, e.g. 8, is on the loop. +#define CPQFCTS_MAX_LUN 32 // The RA-4x00 supports 32 (Linux SCSI supports 8) #define CPQFCTS_MAX_CHANNEL 0 // One FC port on cpqfcTS HBA #define CPQFCTS_CMD_PER_LUN 15 // power of 2 -1, must be >0 @@ -972,12 +975,6 @@ UCHAR wwn[8], // search linked list for WWN, or... PFC_LOGGEDIN_PORT *pLastLoggedInPort ); - -// don't do this unless you have the right hardware! -#define TRIGGERABLE_HBA 1 -#ifdef TRIGGERABLE_HBA -void TriggerHBA( void*, int); -#endif void cpqfcTSPutLinkQue( CPQFCHBA *cpqfcHBAdata, diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/cpqfcTStrigger.c linux/drivers/scsi/cpqfcTStrigger.c --- v2.4.8/linux/drivers/scsi/cpqfcTStrigger.c Tue Sep 19 08:01:34 2000 +++ linux/drivers/scsi/cpqfcTStrigger.c Sun Aug 12 10:51:41 2001 @@ -3,13 +3,15 @@ // since it writes directly to the Tachyon board. This function // developed for Compaq HBA Tachyon TS v1.2 (Rev X5 PCB) +#include "cpqfcTStrigger.h" +#if TRIGGERABLE_HBA + #include #include #include #include #include - void TriggerHBA( void* IOBaseUpper, int Print) { __u32 long value; @@ -28,3 +30,4 @@ printk( " -GPIO0 set- "); } +#endif diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/cpqfcTStrigger.h linux/drivers/scsi/cpqfcTStrigger.h --- v2.4.8/linux/drivers/scsi/cpqfcTStrigger.h Wed Dec 31 16:00:00 1969 +++ linux/drivers/scsi/cpqfcTStrigger.h Sun Aug 12 10:51:41 2001 @@ -0,0 +1,8 @@ +// don't do this unless you have the right hardware! +#define TRIGGERABLE_HBA 0 +#if TRIGGERABLE_HBA +void TriggerHBA( void*, int); +#else +#define TriggerHBA(x, y) +#endif + diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/cpqfcTSworker.c linux/drivers/scsi/cpqfcTSworker.c --- v2.4.8/linux/drivers/scsi/cpqfcTSworker.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/cpqfcTSworker.c Sun Aug 12 10:51:41 2001 @@ -47,6 +47,7 @@ #include "hosts.h" // struct Scsi_Host definition for T handler #include "cpqfcTSchip.h" #include "cpqfcTSstructs.h" +#include "cpqfcTStrigger.h" //#define LOGIN_DBG 1 @@ -3337,9 +3338,9 @@ else { - for( i=0; i<8; i++) // valid WWN passed? NULL WWN invalid + if( wwn ) // non-null arg? (OK to pass NULL when not searching WWN) { - if( wwn ) // non-null arg? (OK to pass NULL when not searching WWN) + for( i=0; i<8; i++) // valid WWN passed? NULL WWN invalid { if( wwn[i] != 0 ) wwn_valid = TRUE; // any non-zero byte makes (presumably) valid @@ -3392,6 +3393,10 @@ { // we KNOW all the valid LUNs... 0xFF is invalid! Cmnd->SCp.have_data_in = pLoggedInPort->ScsiNexus.lun[Cmnd->lun]; + if (pLoggedInPort->ScsiNexus.lun[Cmnd->lun] == 0xFF) + return NULL; + // printk("xlating lun %d to 0x%02x\n", Cmnd->lun, + // pLoggedInPort->ScsiNexus.lun[Cmnd->lun]); } else Cmnd->SCp.have_data_in = Cmnd->lun; // Linux & target luns match diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/eata_generic.h linux/drivers/scsi/eata_generic.h --- v2.4.8/linux/drivers/scsi/eata_generic.h Mon Oct 28 14:31:24 1996 +++ linux/drivers/scsi/eata_generic.h Wed Aug 15 01:22:16 2001 @@ -25,8 +25,6 @@ #define FALSE 0 #endif -#define min(a,b) ((aSCp,1); odd=FALSE; } - x=min(z,cmd->SCp.this_residual/2); + x=min(unsigned int,z,cmd->SCp.this_residual/2); insw(base+HA_RDATA,cmd->SCp.ptr,x); z-=x; IncStat(&cmd->SCp,2*x); @@ -191,7 +191,7 @@ z--; odd=FALSE; } - x=min(z,cmd->SCp.this_residual/2); + x=min(unsigned int,z,cmd->SCp.this_residual/2); outsw(base+HA_RDATA,cmd->SCp.ptr,x); z-=x; IncStat(&cmd->SCp,2*x); diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/i91uscsi.c linux/drivers/scsi/i91uscsi.c --- v2.4.8/linux/drivers/scsi/i91uscsi.c Fri Mar 2 18:38:38 2001 +++ linux/drivers/scsi/i91uscsi.c Sun Aug 12 10:51:41 2001 @@ -590,7 +590,7 @@ int init_tulip(HCS * pCurHcb, SCB * scbp, int tul_num_scb, BYTE * pbBiosAdr, int seconds) { int i; - WORD *pwFlags; + BYTE *pwFlags; BYTE *pbHeads; SCB *pTmpScb, *pPrevScb = NULL; @@ -674,7 +674,7 @@ ((pCurHcb->HCS_Config & HCC_AUTO_TERM) >> 4) | (TUL_RD(pCurHcb->HCS_Base, TUL_GCTRL1) & 0xFE)); for (i = 0, - pwFlags = (WORD *) & (i91unvramp->NVM_SCSIInfo[0].NVM_Targ0Config), + pwFlags = & (i91unvramp->NVM_SCSIInfo[0].NVM_Targ0Config), pbHeads = pbBiosAdr + 0x180; i < pCurHcb->HCS_MaxTar; i++, pwFlags++) { diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/imm.c linux/drivers/scsi/imm.c --- v2.4.8/linux/drivers/scsi/imm.c Fri Mar 2 18:38:38 2001 +++ linux/drivers/scsi/imm.c Sun Aug 12 12:31:28 2001 @@ -162,6 +162,7 @@ printk(KERN_ERR "imm%d: failed to claim parport because a " "pardevice is owning the port for too longtime!\n", i); + parport_unregister_device (imm_hosts[i].dev); spin_lock_irq(&io_request_lock); return 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/in2000.c linux/drivers/scsi/in2000.c --- v2.4.8/linux/drivers/scsi/in2000.c Fri Mar 2 18:38:38 2001 +++ linux/drivers/scsi/in2000.c Sun Aug 12 10:51:41 2001 @@ -1909,10 +1909,10 @@ * special macros declared in 'asm/io.h'. We use readb() and readl() * when reading from the card's BIOS area in in2000_detect(). */ -static const unsigned int *bios_tab[] in2000__INITDATA = { - (unsigned int *)0xc8000, - (unsigned int *)0xd0000, - (unsigned int *)0xd8000, +static u32 bios_tab[] in2000__INITDATA = { + 0xc8000, + 0xd0000, + 0xd8000, 0 }; @@ -1973,13 +1973,13 @@ * for the obvious ID strings. We look for the 2 most common ones and * hope that they cover all the cases... */ - else if (readl(bios_tab[bios]+0x04) == 0x41564f4e || - readl(bios_tab[bios]+0x0c) == 0x61776c41) { + else if (isa_readl(bios_tab[bios]+0x10) == 0x41564f4e || + isa_readl(bios_tab[bios]+0x30) == 0x61776c41) { printk("Found IN2000 BIOS at 0x%x ",(unsigned int)bios_tab[bios]); /* Read the switch image that's mapped into EPROM space */ - switches = ~((readb(bios_tab[bios]+0x08) & 0xff)); + switches = ~((isa_readb(bios_tab[bios]+0x20) & 0xff)); /* Find out where the IO space is */ @@ -2073,7 +2073,7 @@ /* Older BIOS's had a 'sync on/off' switch - use its setting */ - if (readl(bios_tab[bios]+0x04) == 0x41564f4e && (switches & SW_SYNC_DOS5)) + if (isa_readl(bios_tab[bios]+0x10) == 0x41564f4e && (switches & SW_SYNC_DOS5)) hostdata->sync_off = 0x00; /* sync defaults to on */ else hostdata->sync_off = 0xff; /* sync defaults to off */ diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/ips.c linux/drivers/scsi/ips.c --- v2.4.8/linux/drivers/scsi/ips.c Sat May 19 17:43:06 2001 +++ linux/drivers/scsi/ips.c Thu Aug 16 09:49:49 2001 @@ -1416,7 +1416,7 @@ ips_eh_reset(Scsi_Cmnd *SC) { int ret; int i; - u32 cpu_flags; + unsigned long cpu_flags; ips_ha_t *ha; ips_scb_t *scb; ips_copp_wait_item_t *item; @@ -1607,7 +1607,7 @@ int ips_queue(Scsi_Cmnd *SC, void (*done) (Scsi_Cmnd *)) { ips_ha_t *ha; - u32 cpu_flags; + unsigned long cpu_flags; DECLARE_MUTEX_LOCKED(sem); METHOD_TRACE("ips_queue", 1); @@ -1854,7 +1854,7 @@ void do_ipsintr(int irq, void *dev_id, struct pt_regs *regs) { ips_ha_t *ha; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("do_ipsintr", 2); @@ -1909,7 +1909,7 @@ ips_scb_t *scb; IPS_STATUS cstatus; int intrstatus; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_intr", 2); @@ -1981,7 +1981,7 @@ ips_scb_t *scb; IPS_STATUS cstatus; int intrstatus; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_intr_morpheus", 2); @@ -3548,8 +3548,8 @@ ips_copp_wait_item_t *item; int ret; int intr_status; - u32 cpu_flags; - u32 cpu_flags2; + unsigned long cpu_flags; + unsigned long cpu_flags2; METHOD_TRACE("ips_next", 1); @@ -4403,7 +4403,7 @@ static void ips_done(ips_ha_t *ha, ips_scb_t *scb) { int ret; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_done", 1); @@ -5520,7 +5520,7 @@ static ips_scb_t * ips_getscb(ips_ha_t *ha) { ips_scb_t *scb; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_getscb", 1); @@ -5554,7 +5554,7 @@ /****************************************************************************/ static void ips_freescb(ips_ha_t *ha, ips_scb_t *scb) { - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_freescb", 1); @@ -5967,7 +5967,7 @@ static int ips_reset_copperhead(ips_ha_t *ha) { int reset_counter; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_reset_copperhead", 1); @@ -6012,7 +6012,7 @@ static int ips_reset_copperhead_memio(ips_ha_t *ha) { int reset_counter; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_reset_copperhead_memio", 1); @@ -6058,7 +6058,7 @@ ips_reset_morpheus(ips_ha_t *ha) { int reset_counter; u8 junk; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_reset_morpheus", 1); @@ -6237,7 +6237,7 @@ ips_issue_copperhead(ips_ha_t *ha, ips_scb_t *scb) { u32 TimeOut; u16 val; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_issue_copperhead", 1); @@ -6300,7 +6300,7 @@ ips_issue_copperhead_memio(ips_ha_t *ha, ips_scb_t *scb) { u32 TimeOut; u32 val; - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_issue_copperhead_memio", 1); @@ -6361,7 +6361,7 @@ /****************************************************************************/ static int ips_issue_i2o(ips_ha_t *ha, ips_scb_t *scb) { - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_issue_i2o", 1); @@ -6401,7 +6401,7 @@ /****************************************************************************/ static int ips_issue_i2o_memio(ips_ha_t *ha, ips_scb_t *scb) { - u32 cpu_flags; + unsigned long cpu_flags; METHOD_TRACE("ips_issue_i2o_memio", 1); diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/megaraid.c linux/drivers/scsi/megaraid.c --- v2.4.8/linux/drivers/scsi/megaraid.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/megaraid.c Sun Aug 12 10:51:41 2001 @@ -427,6 +427,12 @@ * our current formula working to calculate logical drive number, return * failure for LUN > 7 * + * Version 1.17a-ac + * Mon Aug 6 14:59:29 BST 2001 - "Michael Johnson" + * + * Make the HP print formatting and check for buggy firmware runtime not + * ifdef dependant. + * * BUGS: * Some older 2.1 kernels (eg. 2.1.90) have a bug in pci.c that * fails to detect the controller as a pci device on the system. @@ -465,7 +471,7 @@ #include #include -#include /* for kmalloc() */ +#include /* for kmalloc() */ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) /* 0x20100 */ #include #else @@ -2662,7 +2668,8 @@ } #endif -#ifdef MEGA_HP_FIX /* use HP firmware and bios version encoding */ + /* use HP firmware and bios version encoding */ +if (megaCfg->productInfo.subSystemVendorID == HP_SUBSYS_ID) { sprintf (megaCfg->fwVer, "%c%d%d.%d%d", megaCfg->productInfo.FwVer[2], megaCfg->productInfo.FwVer[1] >> 8, @@ -2675,13 +2682,13 @@ megaCfg->productInfo.BiosVer[1] & 0x0f, megaCfg->productInfo.BiosVer[2] >> 8, megaCfg->productInfo.BiosVer[2] & 0x0f); -#else +} else { memcpy (megaCfg->fwVer, (char *) megaCfg->productInfo.FwVer, 4); megaCfg->fwVer[4] = 0; memcpy (megaCfg->biosVer, (char *) megaCfg->productInfo.BiosVer, 4); megaCfg->biosVer[4] = 0; -#endif +} megaCfg->support_ext_cdb = mega_support_ext_cdb(megaCfg); printk (KERN_NOTICE "megaraid: [%s:%s] detected %d logical drives" M_RD_CRLFSTR, @@ -2957,7 +2964,6 @@ } } -#ifdef MEGA_HP_FIX /* * If we have a HP 1M(0x60E7)/2M(0x60E8) controller with * firmware H.01.07 or H.01.08, disable 64 bit support, @@ -2980,7 +2986,6 @@ megaCfg->flag &= ~BOARD_64BIT; } } -#endif if (mega_is_bios_enabled (megaCfg)) { mega_hbas[numCtlrs].is_bios_enabled = 1; diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/ppa.c linux/drivers/scsi/ppa.c --- v2.4.8/linux/drivers/scsi/ppa.c Fri Mar 2 18:38:39 2001 +++ linux/drivers/scsi/ppa.c Sun Aug 12 12:31:28 2001 @@ -153,6 +153,7 @@ printk(KERN_ERR "ppa%d: failed to claim parport because a " "pardevice is owning the port for too longtime!\n", i); + parport_unregister_device(ppa_hosts[i].dev); spin_lock_irq(&io_request_lock); return 0; } diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/qlogicfc.c linux/drivers/scsi/qlogicfc.c --- v2.4.8/linux/drivers/scsi/qlogicfc.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/qlogicfc.c Sun Aug 12 10:51:41 2001 @@ -98,7 +98,7 @@ isp2200's firmware. */ -#define RELOAD_FIRMWARE 1 +#define RELOAD_FIRMWARE 0 #define USE_NVRAM_DEFAULTS 1 @@ -440,7 +440,7 @@ #define MBOX_SEND_CHANGE_REQUEST 0x0070 #define MBOX_PORT_LOGOUT 0x0071 -#include "qlogicfc_asm.c" +//#include "qlogicfc_asm.c" /* Each element in mbox_param is an 8 bit bitmap where each bit indicates if that mbox should be copied as input. For example 0x2 would mean @@ -1847,13 +1847,13 @@ return 0; } - static int isp2x00_reset_hardware(struct Scsi_Host *host) { u_short param[8]; struct isp2x00_hostdata *hostdata; int loop_count; dma64_addr_t busaddr; + unsigned short risc_code_addr01 = 0x1000 ; ENTER("isp2x00_reset_hardware"); diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/qlogicfc_asm.c linux/drivers/scsi/qlogicfc_asm.c --- v2.4.8/linux/drivers/scsi/qlogicfc_asm.c Wed Jan 26 13:29:39 2000 +++ linux/drivers/scsi/qlogicfc_asm.c Wed Dec 31 16:00:00 1969 @@ -1,7804 +0,0 @@ -/************************************************************************ - * * - * --- ISP2100 Fabric Initiator/Target Firmware --- * - * with expanded LUN addressing. * - * * - ************************************************************************ - * Copyright (C) 1999 Qlogic, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted provided - * that the following conditions are met: - * 1. Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistribution in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * * - ************************************************************************ - */ -/* - * W W A RRRR N N IIIII N N GGG - * W W A A R R N N I N N G G - * W W A A R R NN N I NN N G - * W W W AAAAA RRR N N N I N N N G GG - * W W W A A R R N NN I N NN G G - * W W W W A A R R N N I N N G G - * W W A A R R N N IIIII N N GGGG - * - * This version of firmware is a release candidate, - * design verification testing (DVT) has not been completed. - */ -/* - * Firmware Version 1.17.30 (14:05 Sep 30, 1999) - */ - -unsigned short risc_code_addr01 = 0x1000 ; -unsigned short risc_code_length2100 = 0x77a0; -unsigned short risc_code_length2200 = 0x7a68; - -unsigned short risc_code2100[] = { - 0x0078, 0x1029, 0x0000, 0x77a0, 0x0000, 0x2043, 0x4f50, 0x5952, - 0x4947, 0x4854, 0x2031, 0x3939, 0x3920, 0x514c, 0x4f47, 0x4943, - 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, - 0x3231, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, - 0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3137, 0x2020, 0x2020, - 0x2400, 0x2091, 0x2000, 0x20c1, 0x0021, 0x2039, 0xffff, 0x2019, - 0xaaaa, 0x2760, 0x2069, 0x7fff, 0x20c1, 0x0020, 0x2c2c, 0x2d34, - 0x2762, 0x236a, 0x2c24, 0x2d04, 0x266a, 0x2562, 0xa406, 0x00c0, - 0x104e, 0x20c1, 0x0021, 0x2c2c, 0x2362, 0x2c04, 0x2562, 0xa306, - 0x0040, 0x104e, 0x20c1, 0x0020, 0x2039, 0x8fff, 0x20a1, 0x8f00, - 0x2708, 0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, - 0x0008, 0xa112, 0xa00e, 0x21a8, 0x41a4, 0x3400, 0x8211, 0x00c0, - 0x105b, 0x2708, 0x3400, 0xa102, 0x0040, 0x106b, 0x0048, 0x106b, - 0x20a8, 0xa00e, 0x41a4, 0x20a1, 0x87a0, 0x2009, 0x0000, 0x20a9, - 0x0760, 0x41a4, 0x3400, 0x20c9, 0x8cff, 0x2059, 0x0000, 0x2b78, - 0x7823, 0x0004, 0x2089, 0x226f, 0x2051, 0x8800, 0x2a70, 0x775e, - 0xa786, 0x8fff, 0x0040, 0x108e, 0x705b, 0xa700, 0x7057, 0xa6f5, - 0x7063, 0x0200, 0x7067, 0x0200, 0x0078, 0x1096, 0x7057, 0x9b01, - 0x7063, 0x0100, 0x7067, 0x0100, 0x705b, 0x9b00, 0x1078, 0x128f, - 0x1078, 0x136a, 0x1078, 0x1513, 0x1078, 0x1b00, 0x1078, 0x3d25, - 0x1078, 0x68a0, 0x1078, 0x12f5, 0x1078, 0x26b2, 0x1078, 0x4778, - 0x1078, 0x42aa, 0x1078, 0x5004, 0x1078, 0x1fc3, 0x1078, 0x5260, - 0x1078, 0x4cb7, 0x1078, 0x1ee5, 0x1078, 0x1fa0, 0x2091, 0x3009, - 0x7823, 0x0000, 0x0090, 0x10cb, 0x7820, 0xa086, 0x0002, 0x00c0, - 0x10cb, 0x7823, 0x4000, 0x0068, 0x10c3, 0x781b, 0x0001, 0x2091, - 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000, 0x2001, 0x017f, - 0x2003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003, 0x00c0, 0x10eb, - 0x1078, 0x31bd, 0x1078, 0x26da, 0x1078, 0x47c8, 0x1078, 0x4469, - 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, 0x10ef, 0x1078, - 0x5020, 0x0078, 0x10d2, 0x1079, 0x10f3, 0x0078, 0x10d8, 0x1078, - 0x6565, 0x0078, 0x10e7, 0x10fd, 0x10fe, 0x1189, 0x10fb, 0x1208, - 0x128c, 0x128d, 0x128e, 0x1078, 0x12d2, 0x007c, 0x127e, 0x0f7e, - 0x2091, 0x8000, 0x1078, 0x3541, 0x2079, 0x0100, 0x7844, 0xa005, - 0x00c0, 0x117a, 0x2011, 0x3c35, 0x1078, 0x50f2, 0x780f, 0x00ff, - 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010, 0x73bc, 0x1078, - 0x317a, 0x7238, 0xc284, 0x723a, 0x2001, 0x880c, 0x2014, 0xc2ac, - 0x2202, 0x1078, 0x6376, 0x2011, 0x0004, 0x1078, 0x7802, 0x1078, - 0x4236, 0x1078, 0x3d0d, 0x0040, 0x1135, 0x7083, 0x0001, 0x70b7, - 0x0000, 0x1078, 0x36ef, 0x0078, 0x117a, 0x70cb, 0x0000, 0x70c7, - 0x0000, 0x706b, 0x0000, 0x706f, 0x0000, 0x1078, 0x117d, 0x72c0, - 0x2079, 0x8851, 0x7804, 0xd0ac, 0x0040, 0x1147, 0xc295, 0x72c2, - 0xa296, 0x0004, 0x0040, 0x1168, 0x2011, 0x0001, 0x1078, 0x7802, - 0x708f, 0x0000, 0x7093, 0xffff, 0x7003, 0x0002, 0x0f7f, 0x1078, - 0x231f, 0x2011, 0x0005, 0x1078, 0x64ae, 0x1078, 0x5888, 0x0c7e, - 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x127f, 0x0078, 0x117c, - 0x708f, 0x0000, 0x7093, 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, - 0x1078, 0x64ae, 0x1078, 0x5888, 0x0c7e, 0x2061, 0x0100, 0x60e3, - 0x0008, 0x0c7f, 0x0f7f, 0x127f, 0x007c, 0x0c7e, 0x20a9, 0x0082, - 0x2009, 0x007e, 0x1078, 0x3f76, 0x8108, 0x00f0, 0x1182, 0x0c7f, - 0x007c, 0x127e, 0x2091, 0x8000, 0x7090, 0xa086, 0xffff, 0x0040, - 0x1197, 0x1078, 0x231f, 0x1078, 0x5888, 0x0078, 0x1206, 0x70c0, - 0xd09c, 0x0040, 0x11c3, 0xd084, 0x0040, 0x11c3, 0x0f7e, 0x2079, - 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c, 0x0040, 0x11c3, - 0x70c4, 0xa086, 0xffff, 0x0040, 0x11bf, 0x1078, 0x2449, 0x1078, - 0x5888, 0x70c0, 0xd094, 0x00c0, 0x1206, 0x2011, 0x0001, 0x2019, - 0x0000, 0x1078, 0x2481, 0x1078, 0x5888, 0x0078, 0x1206, 0x70c8, - 0xa005, 0x00c0, 0x1206, 0x708c, 0xa005, 0x00c0, 0x1206, 0x2001, - 0x8852, 0x2004, 0xd0ac, 0x0040, 0x11e9, 0x157e, 0x0c7e, 0x20a9, - 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x3f8e, 0x00c0, 0x11dc, - 0x6000, 0xd0ec, 0x00c0, 0x11e4, 0x017f, 0x8108, 0x00f0, 0x11d3, - 0x0c7f, 0x157f, 0x0078, 0x11e9, 0x017f, 0x0c7f, 0x157f, 0x0078, - 0x1206, 0x7003, 0x0003, 0x7093, 0xffff, 0x2001, 0x0000, 0x1078, - 0x21f3, 0x1078, 0x31f8, 0x2001, 0x8aa3, 0x2004, 0xa086, 0x0005, - 0x00c0, 0x11fe, 0x2011, 0x0000, 0x1078, 0x64ae, 0x2011, 0x0000, - 0x1078, 0x64b8, 0x1078, 0x5888, 0x1078, 0x5948, 0x127f, 0x007c, - 0x017e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x2009, - 0x00f7, 0x1078, 0x3cdc, 0x7940, 0xa18c, 0x0010, 0x7942, 0x7924, - 0xd1b4, 0x0040, 0x121d, 0x7827, 0x0040, 0xd19c, 0x0040, 0x1222, - 0x7827, 0x0008, 0x007e, 0x037e, 0x157e, 0x7900, 0xa18a, 0x0003, - 0x0050, 0x1248, 0x7954, 0xd1ac, 0x00c0, 0x1248, 0x2009, 0x00f8, - 0x1078, 0x3cdc, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, - 0x7820, 0xd09c, 0x00c0, 0x1240, 0x7824, 0xd0ac, 0x00c0, 0x127c, - 0x00f0, 0x1238, 0x2001, 0x0001, 0x1078, 0x21f3, 0x0078, 0x1285, - 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0050, 0x00e0, 0x124e, - 0x2091, 0x6000, 0x00f0, 0x124e, 0x7853, 0x0400, 0x782f, 0x0000, - 0x2009, 0x00f8, 0x1078, 0x3cdc, 0x20a9, 0x000e, 0x0005, 0x00f0, - 0x125e, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843, 0x0010, 0x2019, - 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040, 0x1273, 0x7824, - 0xd0ac, 0x00c0, 0x127c, 0x8319, 0x00c0, 0x1269, 0x2001, 0x0001, - 0x1078, 0x21f3, 0x0078, 0x1283, 0x7828, 0xc09d, 0x782a, 0x7827, - 0x0008, 0x7827, 0x0040, 0x7853, 0x0400, 0x157f, 0x037f, 0x007f, - 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c, 0x007c, 0x2a70, - 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048, 0x129b, 0x704f, - 0xffff, 0x0078, 0x129d, 0x704f, 0x0000, 0x7053, 0xffff, 0x706b, - 0x0000, 0x706f, 0x0000, 0x2061, 0x8a8c, 0x6003, 0x0909, 0x6007, - 0x0000, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, - 0x0003, 0x601b, 0x0000, 0x601f, 0x07d0, 0x2061, 0x8a94, 0x6003, - 0x8000, 0x6007, 0x0000, 0x600b, 0x0000, 0x600f, 0x0200, 0x6013, - 0x00ff, 0x6017, 0x0000, 0x601b, 0x0001, 0x601f, 0x0000, 0x2061, - 0x8a9c, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, - 0x2020, 0x007c, 0x2091, 0x8000, 0x0068, 0x12d4, 0x007e, 0x017e, - 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x12da, 0x017f, 0x792e, - 0x007f, 0x782a, 0x007f, 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, - 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2079, 0x8800, - 0x7803, 0x0005, 0x0078, 0x12f2, 0x007c, 0x2071, 0x8800, 0x7158, - 0x712e, 0x2021, 0x0001, 0xa190, 0x002d, 0xa298, 0x002d, 0x0048, - 0x130b, 0x705c, 0xa302, 0x00c8, 0x130b, 0x220a, 0x2208, 0x2310, - 0x8420, 0x0078, 0x12fd, 0x200b, 0x0000, 0x74a2, 0x74a6, 0x007c, - 0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x8800, 0x70a4, 0xa0ea, - 0x0010, 0x00c8, 0x131e, 0xa06e, 0x0078, 0x1328, 0x8001, 0x70a6, - 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, 0x0000, - 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x8800, 0x127e, 0x2091, - 0x8000, 0x70a4, 0x8001, 0x00c8, 0x1338, 0xa06e, 0x0078, 0x1341, - 0x70a6, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, 0x6807, - 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000, - 0x2071, 0x8800, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70a4, 0x8000, - 0x70a6, 0x127f, 0x0e7f, 0x007c, 0x8dff, 0x0040, 0x1360, 0x6804, - 0x6807, 0x0000, 0x007e, 0x1078, 0x1344, 0x0d7f, 0x0078, 0x1354, - 0x007c, 0x0e7e, 0x2071, 0x8800, 0x70a4, 0xa08a, 0x0010, 0xa00d, - 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x8ac7, 0x7007, 0x0000, 0x701b, - 0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010, 0xa085, 0x8004, - 0x7012, 0x0e7f, 0x007c, 0x0e7e, 0x2270, 0x700b, 0x0000, 0x2071, - 0x8ac7, 0x7018, 0xa088, 0x8ad0, 0x220a, 0x8000, 0xa084, 0x0007, - 0x701a, 0x7004, 0xa005, 0x00c0, 0x1393, 0x0f7e, 0x2079, 0x0010, - 0x1078, 0x13a4, 0x0f7f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x8ac7, - 0x7004, 0xa005, 0x00c0, 0x13a2, 0x0f7e, 0x2079, 0x0010, 0x1078, - 0x13a4, 0x0f7f, 0x0e7f, 0x007c, 0x7000, 0x0079, 0x13a7, 0x13ab, - 0x1415, 0x1432, 0x1432, 0x7018, 0x711c, 0xa106, 0x00c0, 0x13b3, - 0x7007, 0x0000, 0x007c, 0x0d7e, 0xa180, 0x8ad0, 0x2004, 0x700a, - 0x2068, 0x8108, 0xa18c, 0x0007, 0x711e, 0x7803, 0x0026, 0x6824, - 0x7832, 0x6828, 0x7836, 0x682c, 0x783a, 0x6830, 0x783e, 0x6810, - 0x700e, 0x680c, 0x7016, 0x6804, 0x0d7f, 0xd084, 0x0040, 0x13d5, - 0x7007, 0x0001, 0x1078, 0x13da, 0x007c, 0x7007, 0x0002, 0x1078, - 0x13f0, 0x007c, 0x017e, 0x027e, 0x710c, 0x2011, 0x0040, 0xa182, - 0x0040, 0x00c8, 0x13e5, 0x2110, 0xa006, 0x700e, 0x7212, 0x8203, - 0x7822, 0x7803, 0x0020, 0x7803, 0x0041, 0x027f, 0x017f, 0x007c, - 0x017e, 0x027e, 0x137e, 0x147e, 0x157e, 0x7014, 0x2098, 0x20a1, - 0x0014, 0x7803, 0x0026, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, - 0x00c8, 0x1404, 0x2110, 0xa006, 0x700e, 0x22a8, 0x53a6, 0x8203, - 0x7822, 0x7803, 0x0020, 0x3300, 0x7016, 0x7803, 0x0001, 0x157f, - 0x147f, 0x137f, 0x027f, 0x017f, 0x007c, 0x137e, 0x147e, 0x157e, - 0x2099, 0x88f9, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, - 0x0020, 0x127e, 0x2091, 0x8000, 0x7803, 0x0041, 0x7007, 0x0003, - 0x7000, 0xc084, 0x7002, 0x700b, 0x88f4, 0x127f, 0x157f, 0x147f, - 0x137f, 0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x8928, 0x209c, - 0x20a1, 0x0014, 0x7803, 0x0026, 0x2001, 0x8929, 0x20ac, 0x53a6, - 0x2099, 0x892a, 0x20a1, 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, - 0x0020, 0x127e, 0x2091, 0x8000, 0x7803, 0x0001, 0x7007, 0x0004, - 0x7000, 0xc08c, 0x7002, 0x700b, 0x8925, 0x127f, 0x157f, 0x147f, - 0x137f, 0x007c, 0x017e, 0x0e7e, 0x2071, 0x8ac7, 0x0f7e, 0x2079, - 0x0010, 0x7904, 0x7803, 0x0002, 0xd1fc, 0x0040, 0x146c, 0xa18c, - 0x0700, 0x7004, 0x1079, 0x1470, 0x0f7f, 0x0e7f, 0x017f, 0x007c, - 0x13a4, 0x1478, 0x14a5, 0x14cd, 0x1500, 0x1476, 0x0078, 0x1476, - 0xa18c, 0x0700, 0x00c0, 0x149e, 0x137e, 0x147e, 0x157e, 0x7014, - 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010, 0x20a8, 0x53a5, - 0x3400, 0x7016, 0x157f, 0x147f, 0x137f, 0x700c, 0xa005, 0x0040, - 0x14ba, 0x1078, 0x13da, 0x007c, 0x7008, 0xa080, 0x0002, 0x2003, - 0x0100, 0x7007, 0x0000, 0x1078, 0x13a4, 0x007c, 0x7008, 0xa080, - 0x0002, 0x2003, 0x0200, 0x0078, 0x1499, 0xa18c, 0x0700, 0x00c0, - 0x14b0, 0x700c, 0xa005, 0x0040, 0x14ba, 0x1078, 0x13f0, 0x007c, - 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x7007, 0x0000, 0x1078, - 0x13a4, 0x007c, 0x0d7e, 0x7008, 0x2068, 0x7830, 0x6826, 0x7834, - 0x682a, 0x7838, 0x682e, 0x783c, 0x6832, 0x680b, 0x0100, 0x0d7f, - 0x7007, 0x0000, 0x1078, 0x13a4, 0x007c, 0xa18c, 0x0700, 0x00c0, - 0x14fa, 0x137e, 0x147e, 0x157e, 0x2001, 0x88f7, 0x2004, 0xa080, - 0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020, - 0x53a5, 0x2001, 0x88f9, 0x2004, 0xd0bc, 0x0040, 0x14f0, 0x2001, - 0x8902, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5, - 0x157f, 0x147f, 0x137f, 0x7007, 0x0000, 0x1078, 0x4871, 0x1078, - 0x13a4, 0x007c, 0x2011, 0x8003, 0x1078, 0x317a, 0x0078, 0x14fe, - 0xa18c, 0x0700, 0x00c0, 0x150d, 0x2001, 0x8927, 0x2003, 0x0100, - 0x7007, 0x0000, 0x1078, 0x13a4, 0x007c, 0x2011, 0x8004, 0x1078, - 0x317a, 0x0078, 0x1511, 0x127e, 0x2091, 0x2100, 0x2079, 0x0030, - 0x2071, 0x8ad8, 0x7803, 0x0004, 0x7003, 0x0000, 0x700f, 0x8ade, - 0x7013, 0x8ade, 0x780f, 0x0076, 0x127f, 0x007c, 0x6934, 0xa184, - 0x0007, 0x0079, 0x152b, 0x1533, 0x1579, 0x1533, 0x1533, 0x1533, - 0x155e, 0x1542, 0x1537, 0xa085, 0x0001, 0x0078, 0x1593, 0x684c, - 0xd0bc, 0x0040, 0x1533, 0x6860, 0x682e, 0x685c, 0x682a, 0x6858, - 0x0078, 0x1581, 0xa18c, 0x00ff, 0xa186, 0x001e, 0x00c0, 0x1533, - 0x684c, 0xd0bc, 0x0040, 0x1533, 0x6860, 0x682e, 0x685c, 0x682a, - 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, - 0x1def, 0x2004, 0x6832, 0x6858, 0x0078, 0x1589, 0xa18c, 0x00ff, - 0xa186, 0x0015, 0x00c0, 0x1533, 0x684c, 0xd0ac, 0x0040, 0x1533, - 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, - 0x1def, 0x2004, 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0078, - 0x1589, 0x684c, 0xd0ac, 0x0040, 0x1533, 0xa006, 0x682e, 0x682a, - 0x6858, 0xa18c, 0x000f, 0xa188, 0x1def, 0x210c, 0x6932, 0x2d08, - 0x691a, 0x6826, 0x684c, 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, - 0x6912, 0x6980, 0x6916, 0x007c, 0x20e1, 0x0007, 0x20e1, 0x2000, - 0x2001, 0x020a, 0x2004, 0x82ff, 0x0040, 0x15ae, 0xa280, 0x0004, - 0x0d7e, 0x206c, 0x684c, 0xd0dc, 0x00c0, 0x15aa, 0x1078, 0x1526, - 0x10c0, 0x12d2, 0x6808, 0x8000, 0x680a, 0x0d7f, 0x127e, 0x047e, - 0x037e, 0x027e, 0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, - 0xa005, 0x00c0, 0x15c2, 0x7206, 0x2001, 0x15e3, 0x007e, 0x2260, - 0x0078, 0x1724, 0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, - 0x8108, 0xa182, 0x8af9, 0x0048, 0x15cf, 0x2009, 0x8ade, 0x710e, - 0x7010, 0xa102, 0xa082, 0x0009, 0x0040, 0x15da, 0xa080, 0x001b, - 0x00c0, 0x15dd, 0x2009, 0x0138, 0x200a, 0x7000, 0xa005, 0x00c0, - 0x15e3, 0x1078, 0x1705, 0x127f, 0x007c, 0x127e, 0x027e, 0x037e, - 0x0c7e, 0x007e, 0x2091, 0x2100, 0x007f, 0x047f, 0x037f, 0x027f, - 0x0d7e, 0x0c7e, 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e, 0xa005, - 0x0040, 0x163c, 0x6808, 0xa005, 0x0040, 0x16a2, 0x7000, 0xa005, - 0x00c0, 0x1604, 0x0078, 0x1631, 0x700c, 0x7110, 0xa106, 0x00c0, - 0x16ab, 0x7004, 0xa406, 0x00c0, 0x1631, 0x2001, 0x0005, 0x2004, - 0xd08c, 0x0040, 0x161a, 0x047e, 0x1078, 0x1816, 0x047f, 0x2460, - 0x0078, 0x15fa, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x160d, - 0x7804, 0xa084, 0x6000, 0x0040, 0x162b, 0xa086, 0x6000, 0x0040, - 0x162b, 0x0078, 0x160d, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, - 0x2060, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x16ab, 0x2009, 0x0048, - 0x1078, 0x6939, 0x0078, 0x16ab, 0x6808, 0xa005, 0x0040, 0x16a2, - 0x7000, 0xa005, 0x00c0, 0x1646, 0x0078, 0x16a2, 0x700c, 0x7110, - 0xa106, 0x00c0, 0x164f, 0x7004, 0xa406, 0x00c0, 0x16a2, 0x2001, - 0x0005, 0x2004, 0xd08c, 0x0040, 0x165c, 0x047e, 0x1078, 0x1816, - 0x047f, 0x2460, 0x0078, 0x163c, 0x2001, 0x0207, 0x2004, 0xd09c, - 0x00c0, 0x164f, 0x2001, 0x0005, 0x2004, 0xd08c, 0x00c0, 0x1655, - 0x7804, 0xa084, 0x6000, 0x0040, 0x1673, 0xa086, 0x6000, 0x0040, - 0x1673, 0x0078, 0x164f, 0x7007, 0x0000, 0xa016, 0x2218, 0x7000, - 0xa08e, 0x0001, 0x0040, 0x1694, 0xa08e, 0x0002, 0x00c0, 0x16a2, - 0x0c7e, 0x0e7e, 0x6818, 0x2060, 0x1078, 0x1dc4, 0x2804, 0xac70, - 0x6034, 0xd09c, 0x00c0, 0x1690, 0x7308, 0x720c, 0x0078, 0x1692, - 0x7310, 0x7214, 0x0e7f, 0x0c7f, 0x7820, 0xa318, 0x7824, 0xa211, - 0x6810, 0xa300, 0x6812, 0x6814, 0xa201, 0x6816, 0x7803, 0x0004, - 0x7003, 0x0000, 0x6100, 0xa18e, 0x0004, 0x00c0, 0x16ab, 0x2009, - 0x0048, 0x1078, 0x6939, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e, - 0x0e7e, 0x027e, 0x037e, 0x047e, 0x1078, 0x19e5, 0x027e, 0x2071, - 0x8ad8, 0x7000, 0xa086, 0x0000, 0x0040, 0x16f6, 0x7004, 0xac06, - 0x00c0, 0x16e7, 0x2079, 0x0030, 0x7000, 0xa086, 0x0003, 0x0040, - 0x16e7, 0x7804, 0xd0fc, 0x00c0, 0x16e3, 0x2001, 0x0207, 0x2004, - 0xd09c, 0x00c0, 0x16c9, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0, - 0x16d5, 0x7803, 0x0002, 0x7803, 0x0009, 0x7003, 0x0003, 0x7007, - 0x0000, 0x0078, 0x16e7, 0x1078, 0x1816, 0x0078, 0x16b9, 0x157e, - 0x20a9, 0x0009, 0x2009, 0x8ade, 0x2104, 0xac06, 0x00c0, 0x16f1, - 0x200a, 0xa188, 0x0003, 0x00f0, 0x16ec, 0x157f, 0x027f, 0x2001, - 0x015d, 0x201c, 0x831a, 0x2302, 0x2001, 0x0138, 0x2202, 0x047f, - 0x037f, 0x027f, 0x0e7f, 0x0f7f, 0x007c, 0x700c, 0x7110, 0xa106, - 0x00c0, 0x170d, 0x7003, 0x0000, 0x007c, 0x2104, 0x7006, 0x2060, - 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0x8af9, 0x0048, - 0x171b, 0x2009, 0x8ade, 0x7112, 0x700c, 0xa106, 0x00c0, 0x1724, - 0x2001, 0x0138, 0x2003, 0x0008, 0x8cff, 0x00c0, 0x172b, 0x1078, - 0x1a10, 0x0078, 0x1757, 0x6010, 0x2068, 0x2d58, 0x6828, 0xa406, - 0x00c0, 0x1736, 0x682c, 0xa306, 0x0040, 0x173f, 0x601c, 0xa086, - 0x0008, 0x0040, 0x173f, 0x1078, 0x1e0f, 0x00c0, 0x1727, 0x684c, - 0xd0f4, 0x00c0, 0x1727, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, - 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009, 0x0011, 0x1078, 0x1758, - 0x0040, 0x1756, 0x2009, 0x0001, 0x1078, 0x1758, 0x2d58, 0x007c, - 0x8aff, 0x0040, 0x17ef, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x00c0, - 0x177a, 0xd0f4, 0x00c0, 0x178a, 0x0d7e, 0x2804, 0xac68, 0x2900, - 0x0079, 0x176a, 0x17d1, 0x1791, 0x1791, 0x17d1, 0x17d1, 0x17c9, - 0x17d1, 0x1791, 0x17d1, 0x1797, 0x1797, 0x17d1, 0x17d1, 0x17d1, - 0x17c0, 0x1797, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, 0x6c20, - 0x0d7e, 0xd99c, 0x0040, 0x17d4, 0x2804, 0xac68, 0x6f08, 0x6e0c, - 0x0078, 0x17d4, 0xc0f4, 0x6852, 0x6b6c, 0x6a70, 0x0d7e, 0x0078, - 0x17db, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, 0x17d4, 0x7b0c, - 0xd3bc, 0x0040, 0x17b8, 0x7004, 0x0e7e, 0x2070, 0x701c, 0x0e7f, - 0xa086, 0x0008, 0x00c0, 0x17b8, 0x7b08, 0xa39c, 0x0fff, 0x2d20, - 0x0d7f, 0x0d7e, 0x6a14, 0x82ff, 0x00c0, 0x17b3, 0x6810, 0xa302, - 0x0048, 0x17b3, 0x6b10, 0x2011, 0x0000, 0x2468, 0x0078, 0x17ba, - 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078, 0x17d4, - 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, - 0x17d1, 0x0d7f, 0x1078, 0x1dab, 0x00c0, 0x1758, 0xa00e, 0x0078, - 0x17ef, 0x0d7f, 0x1078, 0x12d2, 0x7b22, 0x7a26, 0x7d32, 0x7c36, - 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x0d7f, 0x6828, - 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x2300, 0x6b10, 0xa302, - 0x6812, 0x2200, 0x6a14, 0xa203, 0x6816, 0x1078, 0x1dab, 0x007c, - 0x1078, 0x12d2, 0x7803, 0x0004, 0x7004, 0x2060, 0x0d7e, 0x6010, - 0x2068, 0x7003, 0x0000, 0x1078, 0x19b4, 0x1078, 0x77ed, 0x0040, - 0x180f, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, - 0x682b, 0xffff, 0x682f, 0xffff, 0x6850, 0xc0bd, 0x6852, 0x0d7f, - 0x1078, 0x759a, 0x0078, 0x19b0, 0x1078, 0x12d2, 0x127e, 0x2091, - 0x2100, 0x007e, 0x017e, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, - 0x0002, 0xa184, 0x0700, 0x00c0, 0x17f2, 0xa184, 0x0003, 0xa086, - 0x0003, 0x0040, 0x1814, 0x7000, 0x0079, 0x182e, 0x1836, 0x1838, - 0x1914, 0x1987, 0x199e, 0x1836, 0x1836, 0x1836, 0x1078, 0x12d2, - 0x8001, 0x7002, 0xa184, 0x0880, 0x00c0, 0x184d, 0x8aff, 0x0040, - 0x18b6, 0x2009, 0x0001, 0x1078, 0x1758, 0x0040, 0x19b0, 0x2009, - 0x0001, 0x1078, 0x1758, 0x0078, 0x19b0, 0x7803, 0x0004, 0x7003, - 0x0000, 0xd1bc, 0x00c0, 0x189f, 0x027e, 0x037e, 0x7808, 0xd0ec, - 0x00c0, 0x1860, 0x7803, 0x0009, 0x7003, 0x0004, 0x0078, 0x1862, - 0x1078, 0x1a80, 0x6b28, 0x6a2c, 0x2400, 0x686e, 0xa31a, 0x2500, - 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x2400, 0x6910, 0xa100, 0x6812, - 0x2500, 0x6914, 0xa101, 0x6816, 0x037f, 0x027f, 0x2600, 0x681e, - 0x2700, 0x6822, 0x1078, 0x1dc4, 0x2a00, 0x6826, 0x2c00, 0x681a, - 0x2800, 0x6832, 0x6850, 0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, - 0x00c0, 0x1894, 0x684c, 0xd0e4, 0x0040, 0x1894, 0x7004, 0x2060, - 0x2009, 0x0048, 0x1078, 0x6939, 0x7000, 0xa086, 0x0004, 0x0040, - 0x19b0, 0x7003, 0x0000, 0x1078, 0x1705, 0x0078, 0x19b0, 0x057e, - 0x7d0c, 0xd5bc, 0x00c0, 0x18a6, 0x1078, 0x874c, 0x057f, 0x1078, - 0x19b4, 0x682b, 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, - 0x697c, 0x6912, 0x6980, 0x6916, 0x0078, 0x19b0, 0x684c, 0xc0f5, - 0x684e, 0x7814, 0xa005, 0x00c0, 0x18ce, 0x7003, 0x0000, 0x6808, - 0x8001, 0x680a, 0x00c0, 0x18ca, 0x7004, 0x2060, 0x2009, 0x0048, - 0x1078, 0x6939, 0x1078, 0x1705, 0x0078, 0x19b0, 0x7814, 0x6910, - 0xa102, 0x6812, 0x6914, 0xa183, 0x0000, 0x6816, 0x7814, 0x7908, - 0xa18c, 0x0fff, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, - 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x1078, - 0x1a3b, 0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, - 0xd0fc, 0x0040, 0x18ef, 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, - 0x0076, 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x1078, - 0x6939, 0x1078, 0x1a5e, 0x0040, 0x18ca, 0x7908, 0xd1ec, 0x00c0, - 0x190d, 0x2009, 0x0009, 0x0078, 0x190f, 0x2009, 0x0019, 0x7902, - 0x7003, 0x0003, 0x0078, 0x19b0, 0x8001, 0x7002, 0xd194, 0x0040, - 0x1926, 0x7804, 0xd0fc, 0x00c0, 0x181e, 0x8aff, 0x0040, 0x19b0, - 0x2009, 0x0001, 0x1078, 0x1758, 0x0078, 0x19b0, 0xa184, 0x0880, - 0x00c0, 0x1933, 0x8aff, 0x0040, 0x19b0, 0x2009, 0x0001, 0x1078, - 0x1758, 0x0078, 0x19b0, 0x7803, 0x0004, 0x7003, 0x0000, 0xd1bc, - 0x00c0, 0x1973, 0x027e, 0x037e, 0x7808, 0xd0ec, 0x00c0, 0x1946, - 0x7803, 0x0009, 0x7003, 0x0004, 0x0078, 0x1948, 0x1078, 0x1a80, - 0x6b28, 0x6a2c, 0x1078, 0x1dc4, 0x0d7e, 0x0f7e, 0x2d78, 0x2804, - 0xac68, 0x6034, 0xd09c, 0x00c0, 0x1963, 0x6808, 0x2008, 0xa31a, - 0x680c, 0xa213, 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101, - 0x7816, 0x0078, 0x196f, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213, - 0x7810, 0xa100, 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f, - 0x0d7f, 0x0078, 0x1864, 0x057e, 0x7d0c, 0x1078, 0x874c, 0x057f, - 0x1078, 0x19b4, 0x682b, 0xffff, 0x682f, 0xffff, 0x6808, 0x8001, - 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, 0x0078, 0x19b0, 0x7803, - 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x199a, 0x6808, - 0x8001, 0x680a, 0x00c0, 0x199a, 0x7004, 0x2060, 0x2009, 0x0048, - 0x1078, 0x6939, 0x1078, 0x1705, 0x0078, 0x19b0, 0x7803, 0x0004, - 0x7003, 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, 0x199a, - 0x2068, 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, 0x1724, - 0x017f, 0x007f, 0x127f, 0x007c, 0x0c7e, 0x1078, 0x19e5, 0x20e1, - 0x9028, 0x700c, 0x7110, 0xa106, 0x0040, 0x19db, 0x2104, 0xa005, - 0x0040, 0x19c8, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, 0x600a, - 0xa188, 0x0003, 0xa182, 0x8af9, 0x0048, 0x19d0, 0x2009, 0x8ade, - 0x7112, 0x700c, 0xa106, 0x00c0, 0x19b9, 0x2001, 0x0138, 0x2003, - 0x0008, 0x0078, 0x19b9, 0x2001, 0x015d, 0x200c, 0x810a, 0x2102, - 0x2001, 0x0138, 0x2202, 0x0c7f, 0x007c, 0x2001, 0x0138, 0x2014, - 0x2003, 0x0000, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, - 0x00c0, 0x1a02, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0, - 0x1a02, 0x2001, 0x0111, 0x201c, 0x83ff, 0x00c0, 0x1a02, 0x8421, - 0x00c0, 0x19ec, 0x007c, 0x2011, 0x0201, 0x2009, 0x003c, 0x2204, - 0xa005, 0x00c0, 0x1a0f, 0x8109, 0x00c0, 0x1a07, 0x007c, 0x007c, - 0x1078, 0x1a03, 0x0040, 0x1a38, 0x7908, 0xd1ec, 0x00c0, 0x1a28, - 0x1078, 0x1a5e, 0x0040, 0x1a28, 0x7803, 0x0009, 0x7904, 0xd1fc, - 0x0040, 0x1a1e, 0x7803, 0x0006, 0x1078, 0x1a03, 0x0040, 0x1a38, - 0x780c, 0xd0a4, 0x00c0, 0x1a38, 0x7007, 0x0000, 0x1078, 0x1a5e, - 0x0040, 0x1a3a, 0x7803, 0x0019, 0x7003, 0x0003, 0x0078, 0x1a3a, - 0x1078, 0x19b4, 0x007c, 0x3c00, 0x007e, 0x0e7e, 0x2071, 0x0200, - 0x7808, 0xa084, 0xf000, 0xa10d, 0x1078, 0x19e5, 0x20e1, 0x7000, - 0x7324, 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, 0x810f, - 0x712e, 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, 0x2001, - 0x0138, 0x2202, 0x0e7f, 0x007f, 0x20e0, 0x007c, 0x3c00, 0x007e, - 0x7908, 0xa18c, 0x0fff, 0xa182, 0x0009, 0x0048, 0x1a6b, 0xa085, - 0x0001, 0x0078, 0x1a7d, 0x2001, 0x020a, 0x81ff, 0x0040, 0x1a76, - 0x20e1, 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000, - 0x200c, 0x200c, 0x7003, 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c, - 0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x700c, 0x7110, 0xa106, 0x0040, - 0x1aff, 0x7004, 0x017e, 0x210c, 0xa106, 0x017f, 0x0040, 0x1aff, - 0x0d7e, 0x0c7e, 0x216c, 0x2d00, 0xa005, 0x0040, 0x1afd, 0x6810, - 0x2068, 0x6850, 0xd0fc, 0x0040, 0x1ac9, 0x8108, 0x2104, 0x6b2c, - 0xa306, 0x00c0, 0x1afd, 0x8108, 0x2104, 0x6a28, 0xa206, 0x00c0, - 0x1afd, 0x6850, 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x6870, - 0x7826, 0x681c, 0x7832, 0x6820, 0x7836, 0x6818, 0x2060, 0x6034, - 0xd09c, 0x0040, 0x1ac4, 0x6830, 0x2004, 0xac68, 0x6808, 0x783a, - 0x680c, 0x783e, 0x0078, 0x1afb, 0xa006, 0x783a, 0x783e, 0x0078, - 0x1afb, 0x8108, 0x2104, 0xa005, 0x00c0, 0x1afd, 0x8108, 0x2104, - 0xa005, 0x00c0, 0x1afd, 0x6850, 0xc0f5, 0x6852, 0x6830, 0x2004, - 0x6918, 0xa160, 0x6834, 0xd09c, 0x00c0, 0x1aed, 0x6008, 0x7822, - 0x686e, 0x600c, 0x7826, 0x6872, 0x6000, 0x7832, 0x6004, 0x7836, - 0xa006, 0x783a, 0x783e, 0x0078, 0x1afb, 0x6010, 0x7822, 0x686e, - 0x6014, 0x7826, 0x6872, 0x6000, 0x7832, 0x6004, 0x7836, 0x6008, - 0x783a, 0x600c, 0x783e, 0x7803, 0x0011, 0x0c7f, 0x0d7f, 0x007c, - 0x0e7e, 0x2071, 0x8af9, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e, - 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1b82, 0x6934, - 0xa184, 0x0007, 0x0079, 0x1b14, 0x1b1c, 0x1b6d, 0x1b1c, 0x1b1c, - 0x1b1c, 0x1b52, 0x1b2f, 0x1b1e, 0x1078, 0x12d2, 0x684c, 0xd0b4, - 0x0040, 0x1c90, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, - 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0078, 0x1b75, 0x6834, - 0xa084, 0x00ff, 0xa086, 0x001e, 0x00c0, 0x1b1c, 0x684c, 0xd0b4, - 0x0040, 0x1c90, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, - 0x687c, 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, - 0x2004, 0xa084, 0x000f, 0xa080, 0x1def, 0x2004, 0x6832, 0x6958, - 0x0078, 0x1b7e, 0xa18c, 0x00ff, 0xa186, 0x0015, 0x00c0, 0x1b82, - 0x684c, 0xd0b4, 0x0040, 0x1c90, 0x6804, 0x681a, 0xa080, 0x000d, - 0x2004, 0xa084, 0x000f, 0xa080, 0x1def, 0x2004, 0x6832, 0x6958, - 0xa006, 0x682e, 0x682a, 0x0078, 0x1b7e, 0x684c, 0xd0b4, 0x0040, - 0x17f0, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834, - 0xa084, 0x000f, 0xa080, 0x1def, 0x2004, 0x6832, 0x6926, 0x684c, - 0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804, - 0xd0fc, 0x10c0, 0x1cb7, 0x0e7e, 0x0d7e, 0x2071, 0x8af9, 0x7000, - 0xa005, 0x00c0, 0x1c07, 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c, - 0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x0d7e, 0x2068, 0x686c, - 0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a, - 0x2079, 0x0100, 0x8004, 0x78d6, 0x0f7f, 0x0d7f, 0x2b68, 0x6824, - 0x2050, 0x6818, 0x2060, 0x6830, 0x2040, 0x6034, 0xa0cc, 0x000f, - 0x6908, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0007, 0x0040, 0x1bc9, - 0xa184, 0x0007, 0x0040, 0x1bc9, 0x017e, 0x2009, 0x0008, 0xa102, - 0x017f, 0xa108, 0x791a, 0x7116, 0x701e, 0x680c, 0xa081, 0x0000, - 0x781e, 0x701a, 0xa006, 0x700e, 0x7012, 0x7004, 0x692c, 0x6814, - 0xa106, 0x00c0, 0x1be0, 0x6928, 0x6810, 0xa106, 0x0040, 0x1bed, - 0x037e, 0x047e, 0x6b14, 0x6c10, 0x1078, 0x1e0f, 0x047f, 0x037f, - 0x0040, 0x1bed, 0x0c7f, 0x0078, 0x1c07, 0x8aff, 0x00c0, 0x1bf5, - 0x0c7f, 0xa085, 0x0001, 0x0078, 0x1c07, 0x127e, 0x2091, 0x8000, - 0x2079, 0x0020, 0x2009, 0x0001, 0x1078, 0x1c0b, 0x0040, 0x1c04, - 0x2009, 0x0001, 0x1078, 0x1c0b, 0x127f, 0x0c7f, 0xa006, 0x0d7f, - 0x0e7f, 0x0f7f, 0x007c, 0x077e, 0x067e, 0x057e, 0x047e, 0x037e, - 0x027e, 0x8aff, 0x0040, 0x1c89, 0x700c, 0x7214, 0xa23a, 0x7010, - 0x7218, 0xa203, 0x0048, 0x1c88, 0xa705, 0x0040, 0x1c88, 0xa03e, - 0x2730, 0x6850, 0xd0fc, 0x00c0, 0x1c3b, 0x0d7e, 0x2804, 0xac68, - 0x2900, 0x0079, 0x1c2b, 0x1c6a, 0x1c4b, 0x1c4b, 0x1c6a, 0x1c6a, - 0x1c62, 0x1c6a, 0x1c4b, 0x1c6a, 0x1c51, 0x1c51, 0x1c6a, 0x1c6a, - 0x1c6a, 0x1c59, 0x1c51, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, 0x6d1c, - 0x6c20, 0xd99c, 0x0040, 0x1c6e, 0x0d7e, 0x2804, 0xac68, 0x6f08, - 0x6e0c, 0x0078, 0x1c6d, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x0078, - 0x1c6d, 0x6b10, 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0078, - 0x1c6d, 0x0d7f, 0x0d7e, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, - 0x00c0, 0x1c6a, 0x0d7f, 0x1078, 0x1dab, 0x00c0, 0x1c11, 0xa00e, - 0x0078, 0x1c89, 0x0d7f, 0x1078, 0x12d2, 0x0d7f, 0x7b22, 0x7a26, - 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, - 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x700c, 0xa300, - 0x700e, 0x7010, 0xa201, 0x7012, 0x1078, 0x1dab, 0x0078, 0x1c89, - 0xa006, 0x027f, 0x037f, 0x047f, 0x057f, 0x067f, 0x077f, 0x007c, - 0x1078, 0x12d2, 0x2001, 0x0105, 0x2003, 0x0010, 0x20e1, 0x9040, - 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, 0x0d7e, 0x6010, - 0x2068, 0x1078, 0x77ed, 0x0040, 0x1ca8, 0x6850, 0xc0bd, 0x6852, - 0x0d7f, 0x1078, 0x759a, 0x20e1, 0x9040, 0x1078, 0x6753, 0x2011, - 0x0000, 0x1078, 0x64b8, 0x1078, 0x5948, 0x0078, 0x1d7c, 0x127e, - 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, - 0x2079, 0x0020, 0x2071, 0x8af9, 0x2b68, 0x6818, 0x2060, 0x7904, - 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0, 0x1c92, 0x7000, 0x0079, - 0x1cd1, 0x1d7c, 0x1cd5, 0x1d49, 0x1d7a, 0x8001, 0x7002, 0xd19c, - 0x00c0, 0x1ce9, 0x8aff, 0x0040, 0x1d08, 0x2009, 0x0001, 0x1078, - 0x1c0b, 0x0040, 0x1d7c, 0x2009, 0x0001, 0x1078, 0x1c0b, 0x0078, - 0x1d7c, 0x7803, 0x0004, 0xd194, 0x0040, 0x1cf9, 0x6850, 0xc0fc, - 0x6852, 0x8aff, 0x00c0, 0x1cfe, 0x684c, 0xc0f5, 0x684e, 0x0078, - 0x1cfe, 0x1078, 0x1dc4, 0x6850, 0xc0fd, 0x6852, 0x2a00, 0x6826, - 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x0078, 0x1d7c, - 0x711c, 0x81ff, 0x0040, 0x1d1e, 0x7918, 0x7922, 0x7827, 0x0000, - 0x7803, 0x0001, 0x7000, 0x8000, 0x7002, 0x700c, 0xa100, 0x700e, - 0x7010, 0xa081, 0x0000, 0x7012, 0x0078, 0x1d7c, 0x0f7e, 0x027e, - 0x781c, 0x007e, 0x7818, 0x007e, 0x2079, 0x0100, 0x7a14, 0xa284, - 0x0004, 0xa085, 0x0012, 0x7816, 0x7820, 0xd0bc, 0x00c0, 0x1d2c, - 0x79c8, 0x007f, 0xa102, 0x017f, 0x007e, 0x017e, 0x79c4, 0x007f, - 0xa102, 0x78c6, 0x007f, 0x78ca, 0xa284, 0x0004, 0xa085, 0x0012, - 0x7816, 0x027f, 0x0f7f, 0x7803, 0x0008, 0x7003, 0x0000, 0x0078, - 0x1d7c, 0x8001, 0x7002, 0xd194, 0x0040, 0x1d5e, 0x7804, 0xd0fc, - 0x00c0, 0x1cc7, 0xd19c, 0x00c0, 0x1d78, 0x8aff, 0x0040, 0x1d7c, - 0x2009, 0x0001, 0x1078, 0x1c0b, 0x0078, 0x1d7c, 0x027e, 0x037e, - 0x6b28, 0x6a2c, 0x1078, 0x1dc4, 0x0d7e, 0x2804, 0xac68, 0x6034, - 0xd09c, 0x00c0, 0x1d71, 0x6808, 0xa31a, 0x680c, 0xa213, 0x0078, - 0x1d75, 0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f, 0x0078, 0x1cf9, - 0x0078, 0x1cf9, 0x1078, 0x12d2, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, - 0x017f, 0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x8af9, - 0x7000, 0xa086, 0x0000, 0x0040, 0x1da8, 0x2079, 0x0020, 0x20e1, - 0x9040, 0x7804, 0xd0fc, 0x0040, 0x1d8f, 0x1078, 0x1cb7, 0x7000, - 0xa086, 0x0000, 0x00c0, 0x1d8f, 0x7803, 0x0004, 0x7804, 0xd0ac, - 0x00c0, 0x1d9e, 0x20e1, 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, - 0x0e7f, 0x0f7f, 0x007c, 0x8840, 0x2804, 0xa005, 0x00c0, 0x1dbf, - 0x6004, 0xa005, 0x0040, 0x1dc1, 0x681a, 0x2060, 0x6034, 0xa084, - 0x000f, 0xa080, 0x1def, 0x2044, 0x88ff, 0x1040, 0x12d2, 0x8a51, - 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50, 0x8841, 0x2804, 0xa005, - 0x00c0, 0x1dde, 0x2c00, 0xad06, 0x0040, 0x1dd3, 0x6000, 0xa005, - 0x00c0, 0x1dd3, 0x2d00, 0x2060, 0x681a, 0x6034, 0xa084, 0x000f, - 0xa080, 0x1dff, 0x2044, 0x88ff, 0x1040, 0x12d2, 0x007c, 0x0000, - 0x0011, 0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029, 0x0000, - 0x000f, 0x0015, 0x001b, 0x0021, 0x0027, 0x0000, 0x0000, 0x0000, - 0x1de4, 0x1de0, 0x0000, 0x0000, 0x1dee, 0x0000, 0x1de4, 0x0000, - 0x1deb, 0x1de8, 0x0000, 0x0000, 0x0000, 0x1dee, 0x1deb, 0x0000, - 0x1de6, 0x1de6, 0x0000, 0x0000, 0x1dee, 0x0000, 0x1de6, 0x0000, - 0x1dec, 0x1dec, 0x0000, 0x0000, 0x0000, 0x1dee, 0x1dec, 0x0a7e, - 0x097e, 0x087e, 0x6858, 0xa055, 0x0040, 0x1eb0, 0x2d60, 0x6034, - 0xa0cc, 0x000f, 0xa9c0, 0x1def, 0xa986, 0x0007, 0x0040, 0x1e28, - 0xa986, 0x000e, 0x0040, 0x1e28, 0xa986, 0x000f, 0x00c0, 0x1e2c, - 0x605c, 0xa422, 0x6060, 0xa31a, 0x2804, 0xa045, 0x00c0, 0x1e3a, - 0x0050, 0x1e34, 0x0078, 0x1eb0, 0x6004, 0xa065, 0x0040, 0x1eb0, - 0x0078, 0x1e17, 0x2804, 0xa005, 0x0040, 0x1e58, 0xac68, 0xd99c, - 0x00c0, 0x1e48, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0078, 0x1e4c, - 0x6810, 0xa422, 0x6814, 0xa31b, 0x0048, 0x1e77, 0x2300, 0xa405, - 0x0040, 0x1e5e, 0x8a51, 0x0040, 0x1eb0, 0x8840, 0x0078, 0x1e3a, - 0x6004, 0xa065, 0x0040, 0x1eb0, 0x0078, 0x1e17, 0x8a51, 0x0040, - 0x1eb0, 0x8840, 0x2804, 0xa005, 0x00c0, 0x1e71, 0x6004, 0xa065, - 0x0040, 0x1eb0, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x1def, 0x2804, - 0x2040, 0x2b68, 0x6850, 0xc0fc, 0x6852, 0x0078, 0x1ea4, 0x8422, - 0x8420, 0x831a, 0xa399, 0x0000, 0x0d7e, 0x2b68, 0x6c6e, 0x6b72, - 0x0d7f, 0xd99c, 0x00c0, 0x1e92, 0x6908, 0x2400, 0xa122, 0x690c, - 0x2300, 0xa11b, 0x1048, 0x12d2, 0x6800, 0xa420, 0x6804, 0xa319, - 0x0078, 0x1e9e, 0x6910, 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, - 0x1048, 0x12d2, 0x6800, 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, - 0x6b22, 0x6850, 0xc0fd, 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, - 0x2a00, 0x6826, 0x007f, 0x007f, 0x007f, 0xa006, 0x0078, 0x1eb5, - 0x087f, 0x097f, 0x0a7f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0005, - 0x2004, 0xa084, 0x0007, 0x0079, 0x1ebd, 0x1ec5, 0x1ec6, 0x1ec9, - 0x1ecc, 0x1ed1, 0x1ed4, 0x1ed9, 0x1ede, 0x007c, 0x1078, 0x1cb7, - 0x007c, 0x1078, 0x1816, 0x007c, 0x1078, 0x1816, 0x1078, 0x1cb7, - 0x007c, 0x1078, 0x145a, 0x007c, 0x1078, 0x1cb7, 0x1078, 0x145a, - 0x007c, 0x1078, 0x1816, 0x1078, 0x145a, 0x007c, 0x1078, 0x1816, - 0x1078, 0x1cb7, 0x1078, 0x145a, 0x007c, 0x127e, 0x2091, 0x2300, - 0x2079, 0x0200, 0x2071, 0x8d80, 0x2069, 0x8800, 0x2009, 0x0004, - 0x7912, 0x7817, 0x0004, 0x1078, 0x2220, 0x781b, 0x0002, 0x20e1, - 0x8700, 0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, - 0x0007, 0x0079, 0x1f03, 0x1f27, 0x1f0b, 0x1f0f, 0x1f13, 0x1f19, - 0x1f1d, 0x1f21, 0x1f25, 0x1078, 0x4cc0, 0x0078, 0x1f27, 0x1078, - 0x4cef, 0x0078, 0x1f27, 0x1078, 0x4cc0, 0x1078, 0x4cef, 0x0078, - 0x1f27, 0x1078, 0x1f29, 0x0078, 0x1f27, 0x1078, 0x1f29, 0x0078, - 0x1f27, 0x1078, 0x1f29, 0x0078, 0x1f27, 0x1078, 0x1f29, 0x127f, - 0x007c, 0x007e, 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, 0x0040, - 0x1f35, 0x20e1, 0x9040, 0x0078, 0x1f52, 0xa184, 0x0030, 0x0040, - 0x1f46, 0x6a00, 0xa286, 0x0003, 0x00c0, 0x1f40, 0x0078, 0x1f42, - 0x1078, 0x3c73, 0x20e1, 0x9010, 0x0078, 0x1f52, 0xa184, 0x00c0, - 0x0040, 0x1f4c, 0x1078, 0x12d2, 0xa184, 0x0300, 0x0040, 0x1f52, - 0x20e1, 0x9020, 0x7932, 0x027f, 0x017f, 0x007f, 0x007c, 0x017e, - 0x0e7e, 0x0f7e, 0x2071, 0x8800, 0x7128, 0x2001, 0x8a8f, 0x2102, - 0x2001, 0x8a97, 0x2102, 0xa182, 0x0211, 0x00c8, 0x1f6b, 0x2009, - 0x0008, 0x0078, 0x1f95, 0xa182, 0x0259, 0x00c8, 0x1f73, 0x2009, - 0x0007, 0x0078, 0x1f95, 0xa182, 0x02c1, 0x00c8, 0x1f7b, 0x2009, - 0x0006, 0x0078, 0x1f95, 0xa182, 0x0349, 0x00c8, 0x1f83, 0x2009, - 0x0005, 0x0078, 0x1f95, 0xa182, 0x0421, 0x00c8, 0x1f8b, 0x2009, - 0x0004, 0x0078, 0x1f95, 0xa182, 0x0581, 0x00c8, 0x1f93, 0x2009, - 0x0003, 0x0078, 0x1f95, 0x2009, 0x0002, 0x2079, 0x0200, 0x7912, - 0x7817, 0x0004, 0x1078, 0x2220, 0x0f7f, 0x0e7f, 0x017f, 0x007c, - 0x127e, 0x2091, 0x2200, 0x2061, 0x0100, 0x2071, 0x8800, 0x6024, - 0x6026, 0x6053, 0x0030, 0x6033, 0x00ef, 0x60e7, 0x0000, 0x60eb, - 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, - 0x0080, 0x602f, 0x0000, 0x6007, 0x0eaf, 0x600f, 0x00ff, 0x602b, - 0x002f, 0x127f, 0x007c, 0x2001, 0x882e, 0x2003, 0x0000, 0x2001, - 0x882d, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x007e, - 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0, 0x1fdb, 0xa184, - 0x0007, 0x0079, 0x1fe1, 0xa195, 0x0004, 0xa284, 0x0007, 0x0079, - 0x1fe1, 0x200d, 0x1fe9, 0x1fed, 0x1ff1, 0x1ff7, 0x1ffb, 0x2001, - 0x2007, 0x1078, 0x5273, 0x0078, 0x200d, 0x1078, 0x5362, 0x0078, - 0x200d, 0x1078, 0x5362, 0x1078, 0x5273, 0x0078, 0x200d, 0x1078, - 0x2012, 0x0078, 0x200d, 0x1078, 0x5273, 0x1078, 0x2012, 0x0078, - 0x200d, 0x1078, 0x5362, 0x1078, 0x2012, 0x0078, 0x200d, 0x1078, - 0x5362, 0x1078, 0x5273, 0x1078, 0x2012, 0x027f, 0x017f, 0x007f, - 0x127f, 0x007c, 0xd1ac, 0x0040, 0x20ec, 0x017e, 0x047e, 0x0c7e, - 0x644c, 0xa486, 0xf0f0, 0x00c0, 0x2024, 0x2061, 0x0100, 0x644a, - 0x6043, 0x0090, 0x6043, 0x0010, 0x74be, 0xa48c, 0xff00, 0x7034, - 0xd084, 0x0040, 0x203c, 0xa186, 0xf800, 0x00c0, 0x203c, 0x7038, - 0xd084, 0x00c0, 0x203c, 0xc085, 0x703a, 0x037e, 0x2418, 0x2011, - 0x8016, 0x1078, 0x317a, 0x037f, 0xa196, 0xff00, 0x0040, 0x2061, - 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040, 0x2061, 0x7130, - 0xd18c, 0x00c0, 0x2061, 0x2011, 0x8852, 0x2214, 0xd2ec, 0x0040, - 0x2055, 0xc18d, 0x7132, 0x0078, 0x2061, 0x6240, 0xa294, 0x0010, - 0x0040, 0x20af, 0x6248, 0xa294, 0xff00, 0xa296, 0xff00, 0x00c0, - 0x20af, 0x7034, 0xd08c, 0x00c0, 0x206d, 0x2001, 0x880c, 0x200c, - 0xd1ac, 0x00c0, 0x20af, 0xc1ad, 0x2102, 0x037e, 0x73bc, 0x2011, - 0x8013, 0x1078, 0x317a, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, - 0x8852, 0x220c, 0xd1a4, 0x0040, 0x2097, 0x017e, 0x2009, 0x0001, - 0x2011, 0x0100, 0x1078, 0x5243, 0x2019, 0x000e, 0x1078, 0x8683, - 0xa484, 0x00ff, 0xa080, 0x25b2, 0x200c, 0xa18c, 0xff00, 0x810f, - 0x8127, 0xa006, 0x2009, 0x000e, 0x1078, 0x86f5, 0x017f, 0xd1ac, - 0x00c0, 0x20a0, 0x2019, 0x0004, 0x1078, 0x249d, 0x0078, 0x20af, - 0x157e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x1078, 0x3f8e, 0x00c0, - 0x20ab, 0x1078, 0x3d31, 0x8108, 0x00f0, 0x20a5, 0x157f, 0x0c7f, - 0x047f, 0x0f7e, 0x2079, 0x8ab5, 0x783c, 0xa086, 0x0000, 0x0040, - 0x20c1, 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, - 0x0000, 0x0f7f, 0x2011, 0x0003, 0x1078, 0x64ae, 0x2011, 0x0002, - 0x1078, 0x64b8, 0x1078, 0x639b, 0x1078, 0x516f, 0x037e, 0x2019, - 0x0000, 0x1078, 0x642d, 0x037f, 0x60e3, 0x0000, 0x017f, 0x2001, - 0x8800, 0x2014, 0xa296, 0x0004, 0x00c0, 0x20e4, 0xd19c, 0x00c0, - 0x20e4, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x8821, - 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0040, 0x21c7, 0x0f7e, - 0x2079, 0x8ab5, 0x783c, 0xa086, 0x0001, 0x00c0, 0x2110, 0x017e, - 0x6027, 0x0004, 0x783f, 0x0000, 0x2079, 0x0140, 0x7803, 0x1000, - 0x7803, 0x0000, 0x2079, 0x8aa2, 0x7807, 0x0000, 0x7833, 0x0000, - 0x1078, 0x5888, 0x1078, 0x5948, 0x017f, 0x0f7f, 0x0078, 0x21c7, - 0x0f7f, 0x017e, 0x6220, 0xd2b4, 0x0040, 0x217d, 0x1078, 0x516f, - 0x1078, 0x6232, 0x6027, 0x0004, 0x0f7e, 0x2019, 0x8aab, 0x2304, - 0xa07d, 0x0040, 0x2153, 0x7804, 0xa086, 0x0032, 0x00c0, 0x2153, - 0x0d7e, 0x0c7e, 0x0e7e, 0x2069, 0x0140, 0x618c, 0x6288, 0x7818, - 0x608e, 0x7808, 0x608a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, - 0x00c0, 0x2137, 0x6043, 0x0000, 0x6803, 0x1000, 0x6803, 0x0000, - 0x618e, 0x628a, 0x1078, 0x578f, 0x1078, 0x5888, 0x7810, 0x2070, - 0x7037, 0x0103, 0x2f60, 0x1078, 0x690e, 0x0e7f, 0x0c7f, 0x0d7f, - 0x0f7f, 0x017f, 0x007c, 0x0f7f, 0x0d7e, 0x2069, 0x0140, 0x6804, - 0xa084, 0x4000, 0x0040, 0x2160, 0x6803, 0x1000, 0x6803, 0x0000, - 0x0d7f, 0x0c7e, 0x2061, 0x8aa2, 0x6028, 0xa09a, 0x0002, 0x00c8, - 0x2170, 0x8000, 0x602a, 0x0c7f, 0x1078, 0x6224, 0x0078, 0x21c6, - 0x2019, 0x8aab, 0x2304, 0xa065, 0x0040, 0x217a, 0x2009, 0x0027, - 0x1078, 0x6939, 0x0c7f, 0x0078, 0x21c6, 0xd2bc, 0x0040, 0x21c6, - 0x1078, 0x517c, 0x6017, 0x0010, 0x6027, 0x0004, 0x0d7e, 0x2069, - 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x2192, 0x6803, 0x1000, - 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x8aa2, 0x6044, 0xa09a, - 0x0002, 0x00c8, 0x21b5, 0x8000, 0x6046, 0x603c, 0x0c7f, 0xa005, - 0x0040, 0x21c6, 0x2009, 0x07d0, 0x1078, 0x5174, 0xa080, 0x0007, - 0x2004, 0xa086, 0x0006, 0x00c0, 0x21b1, 0x6017, 0x0012, 0x0078, - 0x21c6, 0x6017, 0x0016, 0x0078, 0x21c6, 0x037e, 0x2019, 0x0001, - 0x1078, 0x642d, 0x037f, 0x2019, 0x8ab1, 0x2304, 0xa065, 0x0040, - 0x21c5, 0x2009, 0x004f, 0x1078, 0x6939, 0x0c7f, 0x017f, 0xd19c, - 0x0040, 0x21ef, 0x017e, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, - 0x1078, 0x64ae, 0x2011, 0x0002, 0x1078, 0x64b8, 0x1078, 0x639b, - 0x1078, 0x516f, 0x037e, 0x2019, 0x0000, 0x1078, 0x642d, 0x037f, - 0x60e3, 0x0000, 0x1078, 0x876a, 0x1078, 0x8788, 0x2001, 0x8800, - 0x2003, 0x0004, 0x6027, 0x0008, 0x1078, 0x1208, 0x017f, 0xa18c, - 0xffd0, 0x6126, 0x007c, 0x007e, 0x017e, 0x027e, 0x0e7e, 0x0f7e, - 0x127e, 0x2091, 0x8000, 0x2071, 0x8800, 0x71b4, 0x70b6, 0xa116, - 0x0040, 0x2219, 0x81ff, 0x0040, 0x220b, 0x2011, 0x8011, 0x1078, - 0x317a, 0x0078, 0x2219, 0x2011, 0x8012, 0x1078, 0x317a, 0x037e, - 0x0c7e, 0x2061, 0x0100, 0x2019, 0x0028, 0x1078, 0x249d, 0x0c7f, - 0x037f, 0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f, 0x007f, 0x007c, - 0x0c7e, 0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100, 0xa190, 0x2233, - 0x2204, 0x60f2, 0x2011, 0x2240, 0x2204, 0x60ee, 0x027f, 0x007f, - 0x0f7f, 0x0c7f, 0x007c, 0x0840, 0x0840, 0x0840, 0x0580, 0x0420, - 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8, 0x01a8, 0x01a8, - 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028, 0xa18c, 0x00ff, - 0x2130, 0xa094, 0xff00, 0x00c0, 0x2250, 0x81ff, 0x0040, 0x2254, - 0x1078, 0x4e98, 0x0078, 0x225b, 0xa080, 0x25b2, 0x200c, 0xa18c, - 0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x25b2, 0x200c, 0xa18c, - 0x00ff, 0x007c, 0x0c7e, 0x2061, 0x8800, 0x6030, 0x0040, 0x226b, - 0xc09d, 0x0078, 0x226c, 0xc09c, 0x6032, 0x0c7f, 0x007c, 0x228f, - 0x2293, 0x2297, 0x229d, 0x22a3, 0x22a9, 0x22af, 0x22b7, 0x22bf, - 0x22c5, 0x22cb, 0x22d3, 0x22db, 0x22e3, 0x22eb, 0x22f5, 0x22ff, - 0x22ff, 0x22ff, 0x22ff, 0x22ff, 0x22ff, 0x22ff, 0x22ff, 0x22ff, - 0x22ff, 0x22ff, 0x22ff, 0x22ff, 0x22ff, 0x22ff, 0x22ff, 0x107e, - 0x007e, 0x0078, 0x2318, 0x107e, 0x007e, 0x0078, 0x2318, 0x107e, - 0x007e, 0x1078, 0x1fcc, 0x0078, 0x2318, 0x107e, 0x007e, 0x1078, - 0x1fcc, 0x0078, 0x2318, 0x107e, 0x007e, 0x1078, 0x1eb6, 0x0078, - 0x2318, 0x107e, 0x007e, 0x1078, 0x1eb6, 0x0078, 0x2318, 0x107e, - 0x007e, 0x1078, 0x1fcc, 0x1078, 0x1eb6, 0x0078, 0x2318, 0x107e, - 0x007e, 0x1078, 0x1fcc, 0x1078, 0x1eb6, 0x0078, 0x2318, 0x107e, - 0x007e, 0x1078, 0x1efb, 0x0078, 0x2318, 0x107e, 0x007e, 0x1078, - 0x1efb, 0x0078, 0x2318, 0x107e, 0x007e, 0x1078, 0x1fcc, 0x1078, - 0x1efb, 0x0078, 0x2318, 0x107e, 0x007e, 0x1078, 0x1fcc, 0x1078, - 0x1efb, 0x0078, 0x2318, 0x107e, 0x007e, 0x1078, 0x1eb6, 0x1078, - 0x1efb, 0x0078, 0x2318, 0x107e, 0x007e, 0x1078, 0x1eb6, 0x1078, - 0x1efb, 0x0078, 0x2318, 0x107e, 0x007e, 0x1078, 0x1fcc, 0x1078, - 0x1eb6, 0x1078, 0x1efb, 0x0078, 0x2318, 0x107e, 0x007e, 0x1078, - 0x1fcc, 0x1078, 0x1eb6, 0x1078, 0x1efb, 0x0078, 0x2318, 0x0005, - 0x0078, 0x22ff, 0xb084, 0x003c, 0x8004, 0x8004, 0x0079, 0x2308, - 0x2318, 0x2295, 0x2299, 0x229f, 0x22a5, 0x22ab, 0x22b1, 0x22b9, - 0x22c1, 0x22c7, 0x22cd, 0x22d5, 0x22dd, 0x22e5, 0x22ed, 0x22f7, - 0x0008, 0x2302, 0x007f, 0x107f, 0x2091, 0x8001, 0x007c, 0x0c7e, - 0x027e, 0x2041, 0x007e, 0x70c0, 0xd09c, 0x0040, 0x2329, 0x2041, - 0x007f, 0xd094, 0x2001, 0x010c, 0x203c, 0x00c0, 0x2388, 0x7280, - 0xd284, 0x0040, 0x2388, 0xd28c, 0x00c0, 0x2388, 0x037e, 0x7390, - 0xa38e, 0xffff, 0x00c0, 0x233e, 0x2019, 0x0001, 0x8314, 0xa2e0, - 0x8ec0, 0x2c04, 0xa38c, 0x0001, 0x0040, 0x234b, 0xa084, 0xff00, - 0x8007, 0x0078, 0x234d, 0xa084, 0x00ff, 0xa70e, 0x0040, 0x237d, - 0xa08e, 0x00ff, 0x00c0, 0x2362, 0x2011, 0x8852, 0x2214, 0xd2ec, - 0x00c0, 0x2383, 0x7280, 0xc28d, 0x7282, 0x7093, 0xffff, 0x037f, - 0x0078, 0x2388, 0x2009, 0x0000, 0x1078, 0x2245, 0x1078, 0x3f53, - 0x00c0, 0x2380, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, - 0x2377, 0x1078, 0x23ef, 0x0040, 0x2380, 0x0078, 0x237d, 0x1078, - 0x2503, 0x1078, 0x241c, 0x0040, 0x2380, 0x8318, 0x0078, 0x233e, - 0x7392, 0x0078, 0x2385, 0x7093, 0xffff, 0x037f, 0x0078, 0x23ec, - 0xa780, 0x25b2, 0x203c, 0xa7bc, 0xff00, 0x873f, 0x7090, 0xa096, - 0xffff, 0x0040, 0x239a, 0xa812, 0x00c8, 0x23aa, 0x7093, 0xffff, - 0x0078, 0x23e9, 0x2009, 0x0000, 0x70c0, 0xd09c, 0x0040, 0x23a5, - 0xd094, 0x0040, 0x23a5, 0x2009, 0x007e, 0x2100, 0xa802, 0x20a8, - 0x0078, 0x23ae, 0x2008, 0x2810, 0xa202, 0x20a8, 0x2700, 0x157e, - 0x017e, 0xa106, 0x0040, 0x23e0, 0x1078, 0x3f53, 0x00c0, 0x23e9, - 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x23c5, 0x1078, - 0x257d, 0x0040, 0x23e0, 0x0078, 0x23d4, 0x7280, 0xd28c, 0x0040, - 0x23da, 0x6004, 0xa084, 0x00ff, 0xa082, 0x0006, 0x0048, 0x23e0, - 0x1078, 0x3f76, 0x0078, 0x23e0, 0x1078, 0x23ef, 0x0040, 0x23e9, - 0x0078, 0x23e0, 0x1078, 0x2503, 0x1078, 0x241c, 0x0040, 0x23e9, - 0x017f, 0x8108, 0x157f, 0x00f0, 0x23ae, 0x7093, 0xffff, 0x0078, - 0x23ec, 0x017f, 0x157f, 0x7192, 0x027f, 0x0c7f, 0x007c, 0x017e, - 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x2001, 0x8856, 0x2004, 0xa084, - 0x00ff, 0x6842, 0x1078, 0x68a8, 0x0040, 0x2417, 0x2d00, 0x601a, - 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, 0x3ef1, 0x2001, 0x0000, - 0x1078, 0x3f05, 0x127e, 0x2091, 0x8000, 0x708c, 0x8000, 0x708e, - 0x127f, 0x2009, 0x0004, 0x1078, 0x6939, 0xa085, 0x0001, 0x0c7f, - 0x0d7f, 0x077f, 0x017f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, - 0x2c68, 0x2001, 0x8856, 0x2004, 0xa084, 0x00ff, 0x6842, 0x1078, - 0x68a8, 0x0040, 0x2444, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, - 0x0000, 0x1078, 0x3ef1, 0x2001, 0x0002, 0x1078, 0x3f05, 0x127e, - 0x2091, 0x8000, 0x708c, 0x8000, 0x708e, 0x127f, 0x2009, 0x0002, - 0x1078, 0x6939, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, - 0x007c, 0x0c7e, 0x027e, 0x2009, 0x0080, 0x1078, 0x3f53, 0x00c0, - 0x2457, 0x1078, 0x245a, 0x0040, 0x2457, 0x70c7, 0xffff, 0x027f, - 0x0c7f, 0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, - 0x68a8, 0x0040, 0x247c, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, - 0x0000, 0x1078, 0x3ef1, 0x2001, 0x0002, 0x1078, 0x3f05, 0x127e, - 0x2091, 0x8000, 0x70c8, 0x8000, 0x70ca, 0x127f, 0x2009, 0x0002, - 0x1078, 0x6939, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, - 0x007c, 0x0c7e, 0x0d7e, 0x2009, 0x007f, 0x1078, 0x3f53, 0x00c0, - 0x249a, 0x2c68, 0x1078, 0x68a8, 0x0040, 0x249a, 0x2d00, 0x601a, - 0x6312, 0x601f, 0x0001, 0x620a, 0x2009, 0x0022, 0x1078, 0x6939, - 0xa085, 0x0001, 0x0d7f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x067e, - 0x037e, 0x027e, 0x1078, 0x54fd, 0x1078, 0x549f, 0x1078, 0x6ea5, - 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x3f8e, 0x00c0, - 0x24b5, 0x1078, 0x418b, 0x1078, 0x3d31, 0x017f, 0x8108, 0x00f0, - 0x24ac, 0x027f, 0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, - 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, - 0x2019, 0x0029, 0x1078, 0x54f0, 0x087e, 0x2041, 0x0000, 0x1078, - 0x5419, 0x2c08, 0x1078, 0x84d2, 0x087f, 0x017f, 0x2e60, 0x1078, - 0x418b, 0x6210, 0x6314, 0x1078, 0x3d31, 0x6212, 0x6316, 0x017f, - 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x6018, - 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x24f9, 0x2071, 0x8800, - 0x708c, 0xa005, 0x0040, 0x24f6, 0x8001, 0x708e, 0x007f, 0x0e7f, - 0x007c, 0x2071, 0x8800, 0x70c8, 0xa005, 0x0040, 0x24f6, 0x8001, - 0x70ca, 0x0078, 0x24f6, 0x6000, 0xc08c, 0x6002, 0x007c, 0x0f7e, - 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x2178, 0x81ff, - 0x00c0, 0x2516, 0x20a9, 0x0001, 0x0078, 0x2531, 0x2001, 0x8852, - 0x2004, 0xd0c4, 0x0040, 0x252d, 0xd0a4, 0x0040, 0x252d, 0x047e, - 0x6018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0xa006, - 0x2009, 0x002d, 0x1078, 0x86f5, 0x047f, 0x20a9, 0x00ff, 0x2011, - 0x0000, 0x027e, 0xa288, 0x8934, 0x210c, 0x81ff, 0x0040, 0x255a, - 0x8fff, 0x1040, 0x2566, 0x2019, 0x0029, 0x1078, 0x54f0, 0x087e, - 0x2041, 0x0000, 0x1078, 0x5419, 0x0c7e, 0x027e, 0x2160, 0x6204, - 0xa294, 0x00ff, 0x2001, 0x0004, 0x8007, 0xa215, 0x6206, 0x027f, - 0x0c7f, 0x017e, 0x2c08, 0x1078, 0x84d2, 0x017f, 0x087f, 0x2160, - 0x1078, 0x418b, 0x027f, 0x8210, 0x00f0, 0x2531, 0x157f, 0x017f, - 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0x047e, 0x027e, - 0x017e, 0x2001, 0x8852, 0x2004, 0xd0c4, 0x0040, 0x2579, 0xd0a4, - 0x0040, 0x2579, 0xa006, 0x2220, 0x8427, 0x2009, 0x0029, 0x1078, - 0x86f5, 0x017f, 0x027f, 0x047f, 0x007c, 0x017e, 0x027e, 0x037e, - 0x0c7e, 0x7280, 0x82ff, 0x0040, 0x25ab, 0xa290, 0x8852, 0x2214, - 0xd2ac, 0x00c0, 0x25ab, 0x2100, 0x1078, 0x225c, 0x81ff, 0x0040, - 0x25ad, 0x2019, 0x0001, 0x8314, 0xa2e0, 0x8ec0, 0x2c04, 0xd384, - 0x0040, 0x259f, 0xa084, 0xff00, 0x8007, 0x0078, 0x25a1, 0xa084, - 0x00ff, 0xa116, 0x0040, 0x25ad, 0xa096, 0x00ff, 0x0040, 0x25ab, - 0x8318, 0x0078, 0x2593, 0xa085, 0x0001, 0x0c7f, 0x037f, 0x027f, - 0x017f, 0x007c, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, - 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, - 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, - 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, - 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, - 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, - 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, - 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, - 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, - 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, - 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, - 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, - 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, - 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, - 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, - 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, - 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, - 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, - 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, - 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, - 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, - 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, - 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, - 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, - 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, - 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, - 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x2071, 0x8881, 0x7003, 0x0002, 0xa006, 0x7012, - 0x7016, 0x703a, 0x703e, 0x7033, 0x8891, 0x7037, 0x8891, 0x7007, - 0x0001, 0x2061, 0x88d1, 0x6003, 0x0002, 0x007c, 0x0090, 0x26d9, - 0x0068, 0x26d9, 0x2071, 0x8881, 0x2b78, 0x7818, 0xd084, 0x00c0, - 0x26d9, 0x2a60, 0x7820, 0xa08e, 0x0069, 0x00c0, 0x27c9, 0x0079, - 0x275d, 0x007c, 0x2071, 0x8881, 0x7004, 0x0079, 0x26df, 0x26e3, - 0x26e4, 0x26ee, 0x2700, 0x007c, 0x0090, 0x26ed, 0x0068, 0x26ed, - 0x2b78, 0x7818, 0xd084, 0x0040, 0x270c, 0x007c, 0x2b78, 0x2061, - 0x88d1, 0x6008, 0xa08e, 0x0100, 0x0040, 0x26fb, 0xa086, 0x0200, - 0x0040, 0x27c1, 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, - 0x7010, 0x2068, 0x6834, 0xa086, 0x0103, 0x0040, 0x2708, 0x007c, - 0x2a60, 0x2b78, 0x7018, 0x007a, 0x2a60, 0x7820, 0xa08a, 0x0040, - 0x00c8, 0x2715, 0x61b4, 0x0079, 0x271d, 0x2100, 0xa08a, 0x003f, - 0x00c8, 0x27bd, 0x61b4, 0x0079, 0x275d, 0x279f, 0x27d1, 0x27d9, - 0x27dd, 0x27e5, 0x27eb, 0x27ef, 0x27f8, 0x27fc, 0x2804, 0x2808, - 0x27bd, 0x27bd, 0x27bd, 0x280c, 0x27bd, 0x281c, 0x2833, 0x284a, - 0x28c6, 0x28cb, 0x28f8, 0x2952, 0x2963, 0x2981, 0x29c2, 0x29cc, - 0x29d9, 0x29ec, 0x2a0a, 0x2a13, 0x2a50, 0x2a56, 0x27bd, 0x2a66, - 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x2a6a, 0x2a74, 0x27bd, - 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x2a7c, - 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x2a89, 0x2a91, 0x27bd, - 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x2aa3, 0x2af4, 0x2b45, - 0x2b56, 0x27bd, 0x27bd, 0x27bd, 0x34bd, 0x27bd, 0x27bd, 0x27bd, - 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x2804, 0x2808, 0x27bd, - 0x27bd, 0x2b6d, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, - 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x27bd, 0x2bba, 0x2ce1, 0x2cf5, - 0x2d01, 0x2d64, 0x2dbd, 0x2dc8, 0x2e07, 0x2e16, 0x2e25, 0x2e28, - 0x2b71, 0x2e51, 0x2e9d, 0x2eaa, 0x2fb9, 0x30d1, 0x30f8, 0x3205, - 0x3214, 0x3221, 0x325b, 0x32f8, 0x27bd, 0x27bd, 0x27bd, 0x27bd, - 0x3360, 0x337c, 0x33f6, 0x34ae, 0x713c, 0x0078, 0x279f, 0x2021, - 0x4000, 0x1078, 0x3154, 0x127e, 0x2091, 0x8000, 0x0068, 0x27ac, - 0x7818, 0xd084, 0x0040, 0x27af, 0x127f, 0x0078, 0x27a3, 0x7c22, - 0x7926, 0x7a2a, 0x7b2e, 0x781b, 0x0001, 0x2091, 0x4080, 0x7007, - 0x0001, 0x2091, 0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, - 0x27a1, 0x2021, 0x4002, 0x0078, 0x27a1, 0x2021, 0x4003, 0x0078, - 0x27a1, 0x2021, 0x4005, 0x0078, 0x27a1, 0x2021, 0x4006, 0x0078, - 0x27a1, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, - 0x3163, 0x7823, 0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, - 0x7a2c, 0x7824, 0x7930, 0x0078, 0x3167, 0x7924, 0x7828, 0x2114, - 0x200a, 0x0078, 0x279f, 0x7924, 0x2114, 0x0078, 0x279f, 0x2099, - 0x0009, 0x20a1, 0x0009, 0x20a9, 0x0007, 0x53a3, 0x0078, 0x279f, - 0x7824, 0x2060, 0x0078, 0x280e, 0x2009, 0x0001, 0x2011, 0x0011, - 0x2019, 0x001e, 0x0078, 0x279f, 0x7d38, 0x7c3c, 0x0078, 0x27d3, - 0x7d38, 0x7c3c, 0x0078, 0x27df, 0x2061, 0x1000, 0x610c, 0xa006, - 0x2c14, 0xa200, 0x8c60, 0x8109, 0x00c0, 0x2810, 0x2010, 0xa005, - 0x0040, 0x279f, 0x0078, 0x27c5, 0x2069, 0x8851, 0x7824, 0x7930, - 0xa11a, 0x00c8, 0x27cd, 0x8019, 0x0040, 0x27cd, 0x684a, 0x6942, - 0x782c, 0x6852, 0x7828, 0x6856, 0xa006, 0x685a, 0x685e, 0x1078, - 0x4793, 0x0078, 0x279f, 0x2069, 0x8851, 0x7824, 0x7934, 0xa11a, - 0x00c8, 0x27cd, 0x8019, 0x0040, 0x27cd, 0x684e, 0x6946, 0x782c, - 0x6862, 0x7828, 0x6866, 0xa006, 0x686a, 0x686e, 0x1078, 0x4343, - 0x0078, 0x279f, 0xa02e, 0x2520, 0x81ff, 0x00c0, 0x27c9, 0x7924, - 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, 0x8888, 0x41a1, 0x1078, - 0x3119, 0x0040, 0x27c9, 0x2009, 0x0020, 0x1078, 0x3163, 0x701b, - 0x2862, 0x007c, 0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, - 0x0040, 0x286e, 0xa096, 0x0019, 0x00c0, 0x27c9, 0x810f, 0xa18c, - 0x00ff, 0x0040, 0x27c9, 0x710e, 0x700c, 0x8001, 0x0040, 0x289f, - 0x700e, 0x1078, 0x3119, 0x0040, 0x27c9, 0x2009, 0x0020, 0x2061, - 0x88d1, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, - 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x1078, 0x3163, 0x701b, - 0x2892, 0x007c, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, - 0x289d, 0xa096, 0x000a, 0x00c0, 0x27c9, 0x0078, 0x2874, 0x7010, - 0x2068, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x3e3e, 0x00c0, 0x28ad, - 0x7007, 0x0003, 0x701b, 0x28af, 0x007c, 0x1078, 0x4454, 0x127e, - 0x2091, 0x8000, 0x20a9, 0x0005, 0x2099, 0x8888, 0x530a, 0x2100, - 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, - 0x000d, 0x2009, 0x0020, 0x127f, 0x0078, 0x3167, 0x619c, 0x7824, - 0x609e, 0x0078, 0x279f, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, - 0x4953, 0x782b, 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, - 0x7832, 0x3f00, 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, - 0x603c, 0x8007, 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, - 0x781b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, - 0x20c1, 0x00f0, 0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, - 0x81ff, 0x00c0, 0x27c9, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, - 0x3f8e, 0x00c0, 0x27cd, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, - 0x0048, 0x290c, 0x0078, 0x27cd, 0x7c28, 0x7d2c, 0x1078, 0x4146, - 0xd28c, 0x00c0, 0x2917, 0x1078, 0x40da, 0x0078, 0x2919, 0x1078, - 0x4114, 0x00c0, 0x2943, 0x2061, 0x8f00, 0x127e, 0x2091, 0x8000, - 0x6000, 0xa086, 0x0000, 0x0040, 0x2931, 0x6010, 0xa06d, 0x0040, - 0x2931, 0x683c, 0xa406, 0x00c0, 0x2931, 0x6840, 0xa506, 0x0040, - 0x293c, 0x127f, 0xace0, 0x000c, 0x2001, 0x8815, 0x2004, 0xac02, - 0x00c8, 0x27c9, 0x0078, 0x291d, 0x1078, 0x759a, 0x127f, 0x0040, - 0x27c9, 0x0078, 0x279f, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4454, - 0x127e, 0x2091, 0x8000, 0x1078, 0x7a4e, 0x1078, 0x4376, 0x127f, - 0x0078, 0x279f, 0x81ff, 0x00c0, 0x27c9, 0x1078, 0x3131, 0x0040, - 0x27cd, 0x1078, 0x4017, 0x0040, 0x27c9, 0x1078, 0x4154, 0x0040, - 0x27c9, 0x0078, 0x279f, 0x81ff, 0x00c0, 0x27c9, 0x1078, 0x3143, - 0x0040, 0x27cd, 0x1078, 0x41c7, 0x0040, 0x27c9, 0x2019, 0x0005, - 0x1078, 0x4175, 0x0040, 0x27c9, 0x7828, 0xa08a, 0x1000, 0x00c8, - 0x27cd, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x50ff, 0x0078, - 0x279f, 0x127e, 0x2091, 0x8000, 0x81ff, 0x0040, 0x298b, 0x2009, - 0x0001, 0x0078, 0x29bc, 0x2029, 0x00ff, 0x644c, 0x2400, 0xa506, - 0x0040, 0x29b6, 0x2508, 0x1078, 0x3f8e, 0x00c0, 0x29b6, 0x1078, - 0x41c7, 0x00c0, 0x29a1, 0x2009, 0x0002, 0x62a4, 0x2518, 0x0078, - 0x29bc, 0x2019, 0x0004, 0x1078, 0x4175, 0x00c0, 0x29ab, 0x2009, - 0x0006, 0x0078, 0x29bc, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x29bf, - 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x50ff, 0x8529, 0x00c8, - 0x298e, 0x127f, 0x0078, 0x279f, 0x127f, 0x0078, 0x27c9, 0x127f, - 0x0078, 0x27cd, 0x1078, 0x3131, 0x0040, 0x27cd, 0x1078, 0x408b, - 0x1078, 0x4146, 0x0078, 0x279f, 0x81ff, 0x00c0, 0x27c9, 0x1078, - 0x3131, 0x0040, 0x27cd, 0x1078, 0x407a, 0x1078, 0x4146, 0x0078, - 0x279f, 0x81ff, 0x00c0, 0x27c9, 0x1078, 0x3131, 0x0040, 0x27cd, - 0x1078, 0x4117, 0x0040, 0x27c9, 0x1078, 0x3e87, 0x1078, 0x40d3, - 0x1078, 0x4146, 0x0078, 0x279f, 0x1078, 0x3131, 0x0040, 0x27cd, - 0x1078, 0x4017, 0x0040, 0x27c9, 0x62a0, 0x2019, 0x0005, 0x0c7e, - 0x1078, 0x418b, 0x0c7f, 0x1078, 0x54f0, 0x087e, 0x2041, 0x0000, - 0x1078, 0x5419, 0x2c08, 0x1078, 0x84d2, 0x087f, 0x1078, 0x4146, - 0x0078, 0x279f, 0x1078, 0x3131, 0x0040, 0x27cd, 0x1078, 0x4146, - 0x2208, 0x0078, 0x279f, 0x157e, 0x0d7e, 0x0e7e, 0x2069, 0x8913, - 0x6810, 0x6914, 0xa10a, 0x00c8, 0x2a1f, 0x2009, 0x0000, 0x6816, - 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x00ff, 0x2069, 0x8934, - 0x2d04, 0xa075, 0x0040, 0x2a34, 0x704c, 0x1078, 0x2a3e, 0xa210, - 0x7080, 0x1078, 0x2a3e, 0xa318, 0x8d68, 0x00f0, 0x2a28, 0x2300, - 0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x279f, 0x0f7e, 0x017e, - 0xa07d, 0x0040, 0x2a4d, 0x2001, 0x0000, 0x8000, 0x2f0c, 0x81ff, - 0x0040, 0x2a4d, 0x2178, 0x0078, 0x2a45, 0x017f, 0x0f7f, 0x007c, - 0x2069, 0x8913, 0x6910, 0x62a0, 0x0078, 0x279f, 0x81ff, 0x00c0, - 0x27c9, 0x614c, 0xa190, 0x25b2, 0x2214, 0xa294, 0x00ff, 0x606c, - 0xa084, 0xff00, 0xa215, 0x6368, 0x0078, 0x279f, 0x613c, 0x6240, - 0x0078, 0x279f, 0x127e, 0x2091, 0x8000, 0x6134, 0xa006, 0x2010, - 0x2018, 0x127f, 0x0078, 0x279f, 0x1078, 0x3143, 0x0040, 0x27cd, - 0x6244, 0x6338, 0x0078, 0x279f, 0x613c, 0x6240, 0x7824, 0x603e, - 0x7b28, 0x6342, 0x2069, 0x8851, 0x831f, 0xa305, 0x6816, 0x0078, - 0x279f, 0x127e, 0x2091, 0x8000, 0x7824, 0x6036, 0x127f, 0x0078, - 0x279f, 0x1078, 0x3143, 0x0040, 0x27cd, 0x7828, 0xa00d, 0x0040, - 0x27cd, 0x782c, 0xa005, 0x0040, 0x27cd, 0x6244, 0x6146, 0x6338, - 0x603a, 0x0078, 0x279f, 0x2001, 0x8800, 0x2004, 0xa086, 0x0003, - 0x00c0, 0x27c9, 0x0c7e, 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, - 0x00ff, 0xa196, 0x00ff, 0x00c0, 0x2aba, 0x6030, 0xa085, 0xff00, - 0x0078, 0x2ac9, 0xa182, 0x007f, 0x00c8, 0x2aed, 0xa188, 0x25b2, - 0x210c, 0xa18c, 0x00ff, 0x6030, 0xa116, 0x0040, 0x2aed, 0x810f, - 0xa105, 0x127e, 0x2091, 0x8000, 0x007e, 0x1078, 0x68a8, 0x007f, - 0x0040, 0x2aea, 0x601a, 0x600b, 0xbc09, 0x601f, 0x0001, 0x1078, - 0x3119, 0x0040, 0x2af0, 0x6837, 0x0000, 0x7007, 0x0003, 0x701b, - 0x279f, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078, 0x6939, 0x127f, - 0x0c7f, 0x007c, 0x0c7f, 0x0078, 0x27c9, 0x0c7f, 0x0078, 0x27cd, - 0x1078, 0x690e, 0x0078, 0x2aea, 0x2001, 0x8800, 0x2004, 0xa086, - 0x0003, 0x00c0, 0x27c9, 0x0c7e, 0x2061, 0x0100, 0x7924, 0x810f, - 0xa18c, 0x00ff, 0xa196, 0x00ff, 0x00c0, 0x2b0b, 0x6030, 0xa085, - 0xff00, 0x0078, 0x2b1a, 0xa182, 0x007f, 0x00c8, 0x2b3e, 0xa188, - 0x25b2, 0x210c, 0xa18c, 0x00ff, 0x6030, 0xa116, 0x0040, 0x2b3e, - 0x810f, 0xa105, 0x127e, 0x2091, 0x8000, 0x007e, 0x1078, 0x68a8, - 0x007f, 0x0040, 0x2b3b, 0x601a, 0x600b, 0xbc05, 0x601f, 0x0001, - 0x1078, 0x3119, 0x0040, 0x2b41, 0x6837, 0x0000, 0x7007, 0x0003, - 0x701b, 0x279f, 0x2d00, 0x6012, 0x2009, 0x0032, 0x1078, 0x6939, - 0x127f, 0x0c7f, 0x007c, 0x0c7f, 0x0078, 0x27c9, 0x0c7f, 0x0078, - 0x27cd, 0x1078, 0x690e, 0x0078, 0x2b3b, 0x2061, 0x8b24, 0x127e, - 0x2091, 0x8000, 0x6000, 0xd084, 0x0040, 0x2b53, 0x6104, 0x6208, - 0x127f, 0x0078, 0x279f, 0x127f, 0x0078, 0x27cd, 0x81ff, 0x00c0, - 0x27c9, 0x127e, 0x2091, 0x8000, 0x6244, 0x6060, 0xa202, 0x0048, - 0x2b6a, 0xa085, 0x0001, 0x1078, 0x2262, 0x1078, 0x36ef, 0x127f, - 0x0078, 0x279f, 0x127f, 0x0078, 0x27cd, 0x7d38, 0x7c3c, 0x0078, - 0x284c, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x00c8, 0x27c9, - 0x624c, 0xa084, 0xff00, 0x8007, 0xa206, 0x00c0, 0x2b89, 0x2001, - 0x8840, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, - 0x3167, 0x81ff, 0x00c0, 0x27c9, 0x1078, 0x3143, 0x0040, 0x27cd, - 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x27c9, 0x0c7e, - 0x1078, 0x3119, 0x0c7f, 0x0040, 0x27c9, 0x6837, 0x0000, 0x6838, - 0xc0fd, 0x683a, 0x1078, 0x792c, 0x0040, 0x27c9, 0x7007, 0x0003, - 0x701b, 0x2bab, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x27c9, - 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, - 0x0078, 0x3167, 0x1078, 0x3119, 0x0040, 0x27c9, 0x1078, 0x3d16, - 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3163, - 0x701b, 0x2bcb, 0x007c, 0xade8, 0x000d, 0x6800, 0xa005, 0x0040, - 0x27cd, 0x6804, 0xd0ac, 0x0040, 0x2bd8, 0xd0a4, 0x0040, 0x27cd, - 0xd094, 0x0040, 0x2be3, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18c, - 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x2bee, 0x0c7e, 0x2061, - 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x2009, 0x0100, - 0x210c, 0xa18a, 0x0002, 0x0048, 0x2c03, 0xd084, 0x0040, 0x2c03, - 0x6a28, 0xa28a, 0x007f, 0x00c8, 0x27cd, 0xa288, 0x25b2, 0x210c, - 0xa18c, 0x00ff, 0x6152, 0xd0dc, 0x0040, 0x2c0c, 0x6828, 0xa08a, - 0x007f, 0x00c8, 0x27cd, 0x604e, 0x6808, 0xa08a, 0x0100, 0x0048, - 0x27cd, 0xa08a, 0x0841, 0x00c8, 0x27cd, 0xa084, 0x0007, 0x00c0, - 0x27cd, 0x680c, 0xa005, 0x0040, 0x27cd, 0x6810, 0xa005, 0x0040, - 0x27cd, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x27cd, 0x8001, 0x0040, - 0x27cd, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x27cd, 0x8001, 0x0040, - 0x27cd, 0x6804, 0xd0fc, 0x0040, 0x2c54, 0x1078, 0x3119, 0x0040, - 0x27c9, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0xa290, - 0x0038, 0xa399, 0x0000, 0x1078, 0x3163, 0x701b, 0x2c48, 0x007c, - 0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0x886d, 0x2da0, - 0x53a3, 0x7010, 0xa0e8, 0x000d, 0x20a9, 0x001c, 0x2d98, 0x2069, - 0x8851, 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, 0x8007, - 0xa084, 0x00ff, 0x6042, 0x1078, 0x4793, 0x1078, 0x42d3, 0x1078, - 0x4343, 0x6000, 0xa086, 0x0000, 0x00c0, 0x2cdf, 0x6808, 0x602a, - 0x1078, 0x1f57, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, - 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, - 0x0040, 0x2c8c, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, - 0x8217, 0x831f, 0x0078, 0x2c8e, 0xa084, 0xf0ff, 0x6006, 0x610a, - 0x620e, 0x6312, 0x1078, 0x518a, 0x6904, 0xd1fc, 0x0040, 0x2cc1, - 0x0c7e, 0x2009, 0x0000, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0040, - 0x2cbe, 0x0078, 0x2ca8, 0x839d, 0x00c8, 0x2cbe, 0x3508, 0x8109, - 0x1078, 0x4cb2, 0x6878, 0x6016, 0x6874, 0x2008, 0xa084, 0xff00, - 0x8007, 0x600a, 0xa184, 0x00ff, 0x6006, 0x8108, 0x00c0, 0x2cbc, - 0x6003, 0x0003, 0x0078, 0x2cbe, 0x6003, 0x0001, 0x00f0, 0x2ca3, - 0x0c7f, 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, - 0x0c7f, 0x1078, 0x3352, 0x0040, 0x2ccf, 0x1078, 0x2262, 0x60b8, - 0xa005, 0x0040, 0x2cdb, 0x6003, 0x0001, 0x2091, 0x301d, 0x1078, - 0x3c73, 0x0078, 0x2cdf, 0x6003, 0x0004, 0x2091, 0x301d, 0x0078, - 0x279f, 0x6000, 0xa086, 0x0000, 0x0040, 0x27c9, 0x2069, 0x8851, - 0x7830, 0x6842, 0x7834, 0x6846, 0x2d00, 0x2009, 0x001c, 0x7a2c, - 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x3167, 0x81ff, 0x00c0, 0x27c9, - 0xa006, 0x1078, 0x2262, 0x1078, 0x3d16, 0x1078, 0x3c73, 0x0078, - 0x279f, 0x81ff, 0x00c0, 0x27c9, 0x6180, 0x81ff, 0x0040, 0x2d1b, - 0x703f, 0x0000, 0x2001, 0x8ec0, 0x2009, 0x0040, 0x7a2c, 0x7b28, - 0x7c3c, 0x7d38, 0x127e, 0x2091, 0x8000, 0x1078, 0x3167, 0x701b, - 0x279c, 0x127f, 0x007c, 0x703f, 0x0001, 0x0d7e, 0x2069, 0x8ec0, - 0x20a9, 0x0040, 0x20a1, 0x8ec0, 0x2019, 0xffff, 0x43a4, 0x654c, - 0xa588, 0x25b2, 0x210c, 0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, - 0x0002, 0x2100, 0xa506, 0x0040, 0x2d4d, 0x1078, 0x3f8e, 0x00c0, - 0x2d4d, 0x6014, 0x821c, 0x0048, 0x2d45, 0xa398, 0x8ec0, 0xa085, - 0xff00, 0x8007, 0x201a, 0x0078, 0x2d4c, 0xa398, 0x8ec0, 0x2324, - 0xa4a4, 0xff00, 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, - 0x00c8, 0x2d54, 0x0078, 0x2d31, 0x8201, 0x8007, 0x2d0c, 0xa105, - 0x206a, 0x0d7f, 0x20a9, 0x0040, 0x20a1, 0x8ec0, 0x2099, 0x8ec0, - 0x1078, 0x3cbc, 0x0078, 0x2d0a, 0x1078, 0x3143, 0x0040, 0x27cd, - 0x0c7e, 0x1078, 0x3119, 0x0c7f, 0x00c0, 0x2d72, 0x2009, 0x0002, - 0x0078, 0x27c9, 0x2001, 0x8852, 0x2004, 0xd0b4, 0x0040, 0x2d99, - 0x6000, 0xd08c, 0x00c0, 0x2d99, 0x6004, 0xa084, 0x00ff, 0xa086, - 0x0006, 0x00c0, 0x2d99, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, - 0x1078, 0x7980, 0x00c0, 0x2d90, 0x2009, 0x0003, 0x0078, 0x27c9, - 0x7007, 0x0003, 0x701b, 0x2d95, 0x007c, 0x1078, 0x3143, 0x0040, - 0x27cd, 0x20a9, 0x002b, 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, - 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, - 0x1078, 0x3cbc, 0x20a9, 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, - 0x000a, 0x20a0, 0x1078, 0x3cbc, 0x2d00, 0x2009, 0x002b, 0x7a2c, - 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x3167, 0x81ff, 0x00c0, 0x27c9, - 0x1078, 0x3131, 0x0040, 0x27cd, 0x1078, 0x415f, 0x0078, 0x279f, - 0x81ff, 0x00c0, 0x27c9, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x27cd, - 0x1078, 0x3143, 0x0040, 0x27cd, 0x1078, 0x41c7, 0x0040, 0x27c9, - 0x2019, 0x0004, 0x1078, 0x4175, 0x7924, 0x810f, 0x7a28, 0x1078, - 0x2de3, 0x0078, 0x279f, 0xa186, 0x00ff, 0x0040, 0x2deb, 0x1078, - 0x2dfb, 0x0078, 0x2dfa, 0x2029, 0x007e, 0x2061, 0x8800, 0x644c, - 0x2400, 0xa506, 0x0040, 0x2df7, 0x2508, 0x1078, 0x2dfb, 0x8529, - 0x00c8, 0x2df0, 0x007c, 0x1078, 0x3f8e, 0x00c0, 0x2e06, 0x2200, - 0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x50ff, 0x007c, 0x81ff, - 0x00c0, 0x27c9, 0x1078, 0x3131, 0x0040, 0x27cd, 0x1078, 0x4017, - 0x0040, 0x27c9, 0x1078, 0x416a, 0x0078, 0x279f, 0x81ff, 0x00c0, - 0x27c9, 0x1078, 0x3131, 0x0040, 0x27cd, 0x1078, 0x4017, 0x0040, - 0x27c9, 0x1078, 0x4154, 0x0078, 0x279f, 0x6100, 0x0078, 0x279f, - 0x1078, 0x3143, 0x0040, 0x27cd, 0x6004, 0xa086, 0x0707, 0x0040, - 0x27cd, 0x2001, 0x8800, 0x2004, 0xa086, 0x0003, 0x00c0, 0x27c9, - 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, 0x2e41, 0xace8, - 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, - 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200, 0x0078, - 0x279f, 0x7824, 0xa084, 0x00ff, 0xa086, 0x00ff, 0x0040, 0x2e5b, - 0x81ff, 0x00c0, 0x27c9, 0xa006, 0x1078, 0x2262, 0x1078, 0x3d16, - 0x7828, 0xa08a, 0x1000, 0x00c8, 0x27cd, 0x7924, 0xa18c, 0xff00, - 0x810f, 0xa186, 0x00ff, 0x0040, 0x2e74, 0xa182, 0x007f, 0x00c8, - 0x27cd, 0x2100, 0x1078, 0x225c, 0x027e, 0x0c7e, 0x127e, 0x2091, - 0x8000, 0x2061, 0x8ab5, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, - 0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043, - 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x3c98, 0x1078, - 0x5181, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078, 0x2de3, - 0x127f, 0x0c7f, 0x027f, 0x0078, 0x279f, 0x7924, 0xa18c, 0xff00, - 0x810f, 0x0c7e, 0x1078, 0x3f53, 0x2c08, 0x0c7f, 0x00c0, 0x27cd, - 0x0078, 0x279f, 0x81ff, 0x0040, 0x2eb1, 0x2009, 0x0001, 0x0078, - 0x27c9, 0x60c0, 0xd09c, 0x00c0, 0x2eb9, 0x2009, 0x0005, 0x0078, - 0x27c9, 0x1078, 0x3119, 0x00c0, 0x2ec1, 0x2009, 0x0002, 0x0078, - 0x27c9, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3163, - 0x701b, 0x2ecb, 0x007c, 0x2009, 0x0080, 0x1078, 0x3f8e, 0x00c0, - 0x2ed8, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0040, 0x2edc, - 0x2021, 0x400a, 0x0078, 0x27a1, 0x0d7e, 0xade8, 0x000d, 0x6900, - 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, - 0x0040, 0x2f4f, 0xa0be, 0x0112, 0x0040, 0x2f4f, 0xa0be, 0x0113, - 0x0040, 0x2f4f, 0xa0be, 0x0114, 0x0040, 0x2f4f, 0xa0be, 0x0117, - 0x0040, 0x2f4f, 0xa0be, 0x011a, 0x0040, 0x2f4f, 0xa0be, 0x0121, - 0x0040, 0x2f45, 0xa0be, 0x0131, 0x0040, 0x2f45, 0xa0be, 0x0171, - 0x0040, 0x2f4f, 0xa0be, 0x0173, 0x0040, 0x2f4f, 0xa0be, 0x01a1, - 0x00c0, 0x2f17, 0x6830, 0x8007, 0x6832, 0x0078, 0x2f55, 0xa0be, - 0x0212, 0x0040, 0x2f4b, 0xa0be, 0x0213, 0x0040, 0x2f4b, 0xa0be, - 0x0214, 0x0040, 0x2f3d, 0xa0be, 0x0217, 0x0040, 0x2f37, 0xa0be, - 0x021a, 0x00c0, 0x2f30, 0x6838, 0x8007, 0x683a, 0x0078, 0x2f4f, - 0xa0be, 0x0300, 0x0040, 0x2f4f, 0x0d7f, 0x0078, 0x27cd, 0xad80, - 0x0010, 0x20a9, 0x0007, 0x1078, 0x2f95, 0xad80, 0x000e, 0x20a9, - 0x0001, 0x1078, 0x2f95, 0x0078, 0x2f4f, 0xad80, 0x000c, 0x1078, - 0x2fa3, 0x0078, 0x2f55, 0xad80, 0x000e, 0x1078, 0x2fa3, 0xad80, - 0x000c, 0x20a9, 0x0001, 0x1078, 0x2f95, 0x0c7e, 0x1078, 0x3119, - 0x0040, 0x2f86, 0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119, 0x6853, - 0x0000, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e, 0x6883, - 0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b, 0x0000, - 0x0c7f, 0x0d7f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823, - 0x0000, 0x1078, 0x7948, 0x00c0, 0x2f81, 0x2009, 0x0003, 0x0078, - 0x27c9, 0x7007, 0x0003, 0x701b, 0x2f8c, 0x007c, 0x0c7f, 0x0d7f, - 0x2009, 0x0002, 0x0078, 0x27c9, 0x6820, 0xa086, 0x8001, 0x00c0, - 0x279f, 0x2009, 0x0004, 0x0078, 0x27c9, 0x017e, 0x2008, 0x2044, - 0x8000, 0x204c, 0x8000, 0x290a, 0x8108, 0x280a, 0x8108, 0x00f0, - 0x2f97, 0x017f, 0x007c, 0x017e, 0x0a7e, 0x0b7e, 0x2008, 0x2044, - 0x8000, 0x204c, 0x8000, 0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108, - 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a, 0x0b7f, 0x0a7f, 0x017f, - 0x007c, 0x81ff, 0x0040, 0x2fc0, 0x2009, 0x0001, 0x0078, 0x27c9, - 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048, - 0x27cd, 0xa182, 0x00ff, 0x00c8, 0x27cd, 0x7a2c, 0x7b28, 0x6068, - 0xa306, 0x00c0, 0x2fdb, 0x606c, 0xa24e, 0x0040, 0x27cd, 0xa9cc, - 0xff00, 0x0040, 0x27cd, 0x0c7e, 0x1078, 0x3071, 0x2c68, 0x0c7f, - 0x0040, 0x3002, 0xa0c6, 0x4000, 0x00c0, 0x2fe8, 0x0078, 0x2fff, - 0xa0c6, 0x4007, 0x00c0, 0x2fef, 0x2408, 0x0078, 0x2fff, 0xa0c6, - 0x4008, 0x00c0, 0x2ff7, 0x2708, 0x2610, 0x0078, 0x2fff, 0xa0c6, - 0x4009, 0x00c0, 0x2ffd, 0x0078, 0x2fff, 0x2001, 0x4006, 0x2020, - 0x0078, 0x27a1, 0x2d00, 0x7022, 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, - 0x2c70, 0x1078, 0x68a8, 0x0040, 0x304f, 0x2d00, 0x601a, 0x2001, - 0x8856, 0x2004, 0xa084, 0x00ff, 0x6842, 0x2e58, 0x0e7f, 0x0e7e, - 0x0c7e, 0x1078, 0x3119, 0x0c7f, 0x2b70, 0x00c0, 0x3029, 0x1078, - 0x690e, 0x0e7f, 0x0c7f, 0x0b7f, 0x017f, 0x2009, 0x0002, 0x0078, - 0x27c9, 0x6837, 0x0000, 0x2d00, 0x6012, 0x6833, 0x0000, 0x6838, - 0xc0fd, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x24bf, 0x127f, - 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, 0x3ef1, 0x2001, 0x0002, - 0x1078, 0x3f05, 0x127e, 0x2091, 0x8000, 0x708c, 0x8000, 0x708e, - 0x127f, 0x2009, 0x0002, 0x1078, 0x6939, 0xa085, 0x0001, 0x0e7f, - 0x0c7f, 0x0b7f, 0x017f, 0x00c0, 0x3059, 0x2009, 0x0003, 0x0078, - 0x27c9, 0x7007, 0x0003, 0x701b, 0x305e, 0x007c, 0x6830, 0xa086, - 0x0100, 0x2009, 0x0004, 0x0040, 0x27c9, 0x7020, 0x2060, 0x2009, - 0x0000, 0x1078, 0x4233, 0x00c0, 0x306f, 0x2009, 0x0001, 0x0078, - 0x279f, 0x0e7e, 0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, - 0x007f, 0x2071, 0x89b4, 0x2e04, 0xa005, 0x00c0, 0x3086, 0x2100, - 0xa406, 0x00c0, 0x30b7, 0x2428, 0x0078, 0x30b7, 0x2068, 0x6f10, - 0x2700, 0xa306, 0x00c0, 0x30a8, 0x6e14, 0x2600, 0xa206, 0x00c0, - 0x30a8, 0x2400, 0xa106, 0x00c0, 0x30a4, 0x2d60, 0xd884, 0x0040, - 0x30cc, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x30cc, - 0x2001, 0x4000, 0x0078, 0x30cd, 0x2001, 0x4007, 0x0078, 0x30cd, - 0x2400, 0xa106, 0x00c0, 0x30b7, 0x6e14, 0x87ff, 0x00c0, 0x30b3, - 0x86ff, 0x0040, 0x3083, 0x2001, 0x4008, 0x0078, 0x30cd, 0x8420, - 0x8e70, 0x00f0, 0x307b, 0x85ff, 0x00c0, 0x30c6, 0x2001, 0x4009, - 0x0078, 0x30cd, 0x2001, 0x0001, 0x0078, 0x30cd, 0x1078, 0x3f53, - 0x00c0, 0x30c2, 0x6312, 0x6216, 0xa006, 0xa005, 0x0d7f, 0x0e7f, - 0x007c, 0x81ff, 0x00c0, 0x27c9, 0x1078, 0x3119, 0x0040, 0x27c9, - 0x6837, 0x0000, 0x7824, 0xa005, 0x0040, 0x27cd, 0xa096, 0x00ff, - 0x0040, 0x30e6, 0xa092, 0x0004, 0x00c8, 0x27cd, 0x2010, 0x2d18, - 0x1078, 0x2481, 0x0040, 0x27c9, 0x7007, 0x0003, 0x701b, 0x30f1, - 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x27c9, 0x0078, 0x279f, - 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048, 0x27cd, - 0xa182, 0x00ff, 0x00c8, 0x27cd, 0x127e, 0x2091, 0x8000, 0x1078, - 0x782e, 0x00c0, 0x3116, 0xa190, 0x8934, 0x2204, 0xa065, 0x0040, - 0x3116, 0x1078, 0x3d31, 0x127f, 0x0078, 0x279f, 0x127f, 0x0078, - 0x27c9, 0x1078, 0x132b, 0x0040, 0x3130, 0xa006, 0x6802, 0x7010, - 0xa005, 0x00c0, 0x3128, 0x2d00, 0x7012, 0x7016, 0x0078, 0x312e, - 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, - 0x007c, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x3f8e, 0x00c0, - 0x3140, 0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x3141, - 0xa066, 0x8cff, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x1078, - 0x3f8e, 0x00c0, 0x3151, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0048, - 0x3152, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff, 0x0040, - 0x315f, 0x2168, 0x6904, 0x1078, 0x1344, 0x0078, 0x3156, 0x7112, - 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x3169, 0x2031, - 0x0000, 0x2061, 0x88d1, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a, - 0x642e, 0x6532, 0x2c10, 0x1078, 0x137b, 0x7007, 0x0002, 0x701b, - 0x279f, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0000, - 0x2001, 0x888f, 0x2004, 0xa005, 0x00c0, 0x3195, 0x0068, 0x3195, - 0x7818, 0xd084, 0x00c0, 0x3195, 0x7a22, 0x7b26, 0x7c2a, 0x781b, - 0x0001, 0x2091, 0x4080, 0x0078, 0x31ba, 0x017e, 0x0c7e, 0x0e7e, - 0x2071, 0x8881, 0x7138, 0xa182, 0x0008, 0x0048, 0x31a3, 0x7030, - 0x2060, 0x0078, 0x31b4, 0x7030, 0xa0e0, 0x0008, 0xac82, 0x88d1, - 0x0048, 0x31ac, 0x2061, 0x8891, 0x2c00, 0x7032, 0x81ff, 0x00c0, - 0x31b2, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a, 0x0e7f, - 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071, 0x8881, - 0x7038, 0xa005, 0x0040, 0x31f6, 0x127e, 0x2091, 0x8000, 0x0068, - 0x31f5, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x31f4, - 0x0c7e, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826, 0x6008, - 0x782a, 0x781b, 0x0001, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, - 0xa005, 0x00c0, 0x31ea, 0x7033, 0x8891, 0x7037, 0x8891, 0x0c7f, - 0x0078, 0x31f4, 0xac80, 0x0008, 0xa0fa, 0x88d1, 0x0048, 0x31f2, - 0x2001, 0x8891, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f, 0x007c, - 0x027e, 0x2001, 0x8852, 0x2004, 0xd0c4, 0x0040, 0x3203, 0x2011, - 0x8014, 0x1078, 0x317a, 0x027f, 0x007c, 0x81ff, 0x00c0, 0x27c9, - 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc0ac, 0x6032, 0x1078, - 0x3c73, 0x127f, 0x0078, 0x279f, 0x7824, 0x2008, 0xa18c, 0xfffd, - 0x00c0, 0x321f, 0x61cc, 0xa10d, 0x61ce, 0x0078, 0x279f, 0x0078, - 0x27cd, 0x81ff, 0x00c0, 0x27c9, 0x6000, 0xa086, 0x0003, 0x00c0, - 0x27c9, 0x2001, 0x8852, 0x2004, 0xd0a4, 0x00c0, 0x27c9, 0x1078, - 0x3143, 0x0040, 0x27cd, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, - 0x00c0, 0x323e, 0x7828, 0xa005, 0x0040, 0x279f, 0x0c7e, 0x1078, - 0x3119, 0x0c7f, 0x0040, 0x27c9, 0x6837, 0x0000, 0x6833, 0x0000, - 0x6838, 0xc0fd, 0x683a, 0x1078, 0x79ed, 0x0040, 0x27c9, 0x7007, - 0x0003, 0x701b, 0x3254, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, - 0x27c9, 0x0078, 0x279f, 0x2001, 0x8800, 0x2004, 0xa086, 0x0003, - 0x00c0, 0x27c9, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, - 0x3119, 0x0040, 0x27c9, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, - 0x0000, 0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, - 0x3f8e, 0x00c0, 0x32ad, 0x6004, 0xa0c4, 0x00ff, 0xa8c6, 0x0006, - 0x0040, 0x3288, 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x00c0, 0x32ad, - 0x2001, 0x8852, 0x2004, 0xd0ac, 0x00c0, 0x3292, 0x1078, 0x4233, - 0x0040, 0x32ad, 0xd784, 0x0040, 0x32a0, 0xac80, 0x0006, 0x2098, - 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078, 0x2fa3, 0x0078, 0x32a9, - 0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078, - 0x2fa3, 0x21a2, 0x94a0, 0xa6b0, 0x0005, 0x8108, 0xd78c, 0x0040, - 0x32b7, 0xa186, 0x0100, 0x0040, 0x32c1, 0x0078, 0x32bb, 0xa186, - 0x007e, 0x0040, 0x32c1, 0xa686, 0x0028, 0x0040, 0x32ca, 0x0078, - 0x3277, 0x86ff, 0x00c0, 0x32c8, 0x7120, 0x810b, 0x0078, 0x279f, - 0x702f, 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, - 0x88d1, 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, - 0x642e, 0x6532, 0x2c10, 0x1078, 0x137b, 0x7007, 0x0002, 0x701b, - 0x32e2, 0x007c, 0x702c, 0xa005, 0x00c0, 0x32f4, 0x711c, 0x7024, - 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0x88d1, 0x6224, 0x6328, - 0x642c, 0x6530, 0x0078, 0x3277, 0x7120, 0x810b, 0x0078, 0x279f, - 0x2029, 0x007e, 0x7924, 0x7a28, 0x7b2c, 0x7c38, 0xa184, 0xff00, - 0x8007, 0xa0e2, 0x0020, 0x0048, 0x27cd, 0xa502, 0x0048, 0x27cd, - 0xa184, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x27cd, 0xa502, 0x0048, - 0x27cd, 0xa284, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0048, 0x27cd, - 0xa502, 0x0048, 0x27cd, 0xa284, 0x00ff, 0xa0e2, 0x0020, 0x0048, - 0x27cd, 0xa502, 0x0048, 0x27cd, 0xa384, 0xff00, 0x8007, 0xa0e2, - 0x0020, 0x0048, 0x27cd, 0xa502, 0x0048, 0x27cd, 0xa384, 0x00ff, - 0xa0e2, 0x0020, 0x0048, 0x27cd, 0xa502, 0x0048, 0x27cd, 0xa484, - 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0048, 0x27cd, 0xa502, 0x0048, - 0x27cd, 0xa484, 0x00ff, 0xa0e2, 0x0020, 0x0048, 0x27cd, 0xa502, - 0x0048, 0x27cd, 0x2061, 0x8a9c, 0x6102, 0x6206, 0x630a, 0x640e, - 0x0078, 0x279f, 0x007e, 0x2001, 0x8852, 0x2004, 0xd0cc, 0x007f, - 0x007c, 0x007e, 0x2001, 0x8871, 0x2004, 0xd0bc, 0x007f, 0x007c, - 0x6160, 0x7a24, 0x6300, 0x82ff, 0x00c0, 0x3369, 0x7926, 0x0078, - 0x279f, 0x83ff, 0x00c0, 0x27cd, 0x2001, 0xfff0, 0xa200, 0x00c8, - 0x27cd, 0x2019, 0xffff, 0x6064, 0xa302, 0xa200, 0x0048, 0x27cd, - 0x7926, 0x6262, 0x0078, 0x279f, 0x2001, 0x8800, 0x2004, 0xa086, - 0x0003, 0x00c0, 0x27c9, 0x7c28, 0x7d24, 0x7e38, 0x7f2c, 0x1078, - 0x3119, 0x0040, 0x27c9, 0x2009, 0x0000, 0x2019, 0x0000, 0x7023, - 0x0000, 0x702f, 0x0000, 0xad80, 0x0003, 0x7026, 0x20a0, 0xa1e0, - 0x8934, 0x2c64, 0x8cff, 0x0040, 0x33b6, 0x6004, 0xa084, 0x00ff, - 0xa086, 0x0006, 0x0040, 0x33ab, 0x6004, 0xa084, 0xff00, 0xa086, - 0x0600, 0x00c0, 0x33b6, 0x6014, 0x20a2, 0x94a0, 0x6010, 0x8007, - 0xa105, 0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, 0xa182, - 0x00ff, 0x0040, 0x33c1, 0xa386, 0x002a, 0x0040, 0x33ca, 0x0078, - 0x3397, 0x83ff, 0x00c0, 0x33c8, 0x7120, 0x810c, 0x0078, 0x279f, - 0x702f, 0x0001, 0x711e, 0x7020, 0xa300, 0x7022, 0x2061, 0x88d1, - 0x6007, 0x0000, 0x6312, 0x7024, 0x600e, 0x6426, 0x652a, 0x662e, - 0x6732, 0x2c10, 0x1078, 0x137b, 0x7007, 0x0002, 0x701b, 0x33e1, - 0x007c, 0x702c, 0xa005, 0x00c0, 0x33f2, 0x711c, 0x7024, 0x20a0, - 0x2019, 0x0000, 0x2061, 0x88d1, 0x6424, 0x6528, 0x662c, 0x6730, - 0x0078, 0x3397, 0x7120, 0x810c, 0x0078, 0x279f, 0x81ff, 0x00c0, - 0x27c9, 0x60c0, 0xd09c, 0x0040, 0x27c9, 0x1078, 0x3119, 0x0040, - 0x27c9, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x3163, - 0x701b, 0x340b, 0x007c, 0x0d7e, 0xade8, 0x000d, 0x6828, 0xa0be, - 0x7000, 0x0040, 0x341e, 0xa0be, 0x7100, 0x0040, 0x341e, 0xa0be, - 0x7200, 0x0040, 0x341e, 0x0d7f, 0x0078, 0x27cd, 0x6820, 0x6924, - 0x1078, 0x2245, 0x00c0, 0x3447, 0x1078, 0x3f53, 0x00c0, 0x3447, - 0x7122, 0x6612, 0x6516, 0x6e18, 0x0c7e, 0x1078, 0x3119, 0x0040, - 0x3447, 0x1078, 0x3119, 0x0040, 0x3447, 0x0c7f, 0x0d7f, 0x6837, - 0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x1078, 0x7964, - 0x0040, 0x27c9, 0x7007, 0x0003, 0x701b, 0x344a, 0x007c, 0x0d7f, - 0x0078, 0x27c9, 0x7120, 0x1078, 0x3f76, 0x6820, 0xa086, 0x8001, - 0x0040, 0x27c9, 0x2d00, 0x701e, 0x6804, 0xa080, 0x0002, 0x007e, - 0x20a9, 0x002a, 0x2098, 0x20a0, 0x1078, 0x3cbc, 0x007f, 0xade8, - 0x000d, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x2061, 0x88d1, 0x6007, - 0x0000, 0x6e00, 0x6f28, 0xa7c6, 0x7000, 0x00c0, 0x3471, 0x0078, - 0x3475, 0xa7c6, 0x7100, 0x00c0, 0x347d, 0xa6c2, 0x0004, 0x0048, - 0x27cd, 0x2009, 0x0004, 0x0078, 0x3167, 0xa7c6, 0x7200, 0x00c0, - 0x27cd, 0xa6c2, 0x0054, 0x0048, 0x27cd, 0x600e, 0x6013, 0x002a, - 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x137b, 0x7007, - 0x0002, 0x701b, 0x3494, 0x007c, 0x701c, 0x2068, 0x6804, 0xa080, - 0x0001, 0x2004, 0xa080, 0x0002, 0x007e, 0x20a9, 0x002a, 0x2098, - 0x20a0, 0x1078, 0x3cbc, 0x007f, 0x2009, 0x002a, 0x2061, 0x88d1, - 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x3167, 0x81ff, 0x00c0, - 0x27c9, 0x1078, 0x3131, 0x0040, 0x27cd, 0x1078, 0x4017, 0x0040, - 0x27c9, 0x1078, 0x4180, 0x0078, 0x279f, 0x7824, 0xd084, 0x0040, - 0x2d64, 0x1078, 0x3143, 0x0040, 0x27cd, 0x0c7e, 0x1078, 0x3119, - 0x0c7f, 0x00c0, 0x34cf, 0x2009, 0x0002, 0x0078, 0x27c9, 0x6004, - 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x34f8, 0x2001, 0x8852, - 0x2004, 0xd0b4, 0x0040, 0x2d99, 0x6000, 0xd08c, 0x00c0, 0x2d99, - 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x7980, 0x00c0, - 0x34ed, 0x2009, 0x0003, 0x0078, 0x27c9, 0x7007, 0x0003, 0x701b, - 0x34f2, 0x007c, 0x1078, 0x3143, 0x0040, 0x27cd, 0x0078, 0x2d99, - 0x2009, 0x882d, 0x210c, 0x81ff, 0x0040, 0x3502, 0x2009, 0x0001, - 0x0078, 0x27c9, 0x2001, 0x8800, 0x2004, 0xa086, 0x0003, 0x0040, - 0x350d, 0x2009, 0x0007, 0x0078, 0x27c9, 0x2001, 0x8852, 0x2004, - 0xd0ac, 0x0040, 0x3517, 0x2009, 0x0008, 0x0078, 0x27c9, 0x609c, - 0xd0a4, 0x00c0, 0x351e, 0xd0ac, 0x00c0, 0x2d99, 0x6837, 0x0000, - 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x79ed, 0x00c0, - 0x352d, 0x2009, 0x0003, 0x0078, 0x27c9, 0x7007, 0x0003, 0x701b, - 0x3532, 0x007c, 0x6830, 0xa086, 0x0100, 0x00c0, 0x353b, 0x2009, - 0x0004, 0x0078, 0x27c9, 0x1078, 0x3143, 0x0040, 0x27cd, 0x0078, - 0x34d6, 0x127e, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x8800, - 0x6044, 0xd0a4, 0x00c0, 0x356a, 0xd084, 0x0040, 0x3553, 0x1078, - 0x36c6, 0x0078, 0x3566, 0xd08c, 0x0040, 0x355a, 0x1078, 0x35dd, - 0x0078, 0x3566, 0xd094, 0x0040, 0x3561, 0x1078, 0x35b1, 0x0078, - 0x3566, 0xd09c, 0x0040, 0x3566, 0x1078, 0x3574, 0x0e7f, 0x0c7f, - 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c, 0x00c0, 0x3571, 0xc19d, - 0x612a, 0x017f, 0x0078, 0x3566, 0x624c, 0xa286, 0xf0f0, 0x00c0, - 0x3585, 0x6048, 0xa086, 0xf0f0, 0x0040, 0x3585, 0x624a, 0x6043, - 0x0090, 0x6043, 0x0010, 0x0078, 0x35b0, 0xa294, 0xff00, 0xa296, - 0xf700, 0x0040, 0x3596, 0x6240, 0xa294, 0x0010, 0x0040, 0x3596, - 0x2009, 0x00f7, 0x1078, 0x3cdc, 0x0078, 0x35b0, 0x6043, 0x0040, - 0x6043, 0x0000, 0x7073, 0x0000, 0x708b, 0x0001, 0x70ab, 0x0000, - 0x70c3, 0x0000, 0x2009, 0x8ec0, 0x200b, 0x0000, 0x7083, 0x0000, - 0x7077, 0x000f, 0x2009, 0x000f, 0x2011, 0x3c2e, 0x1078, 0x5181, - 0x007c, 0x157e, 0x7074, 0xa005, 0x00c0, 0x35db, 0x2011, 0x3c2e, - 0x1078, 0x50f2, 0x6040, 0xa094, 0x0010, 0xa285, 0x0020, 0x6042, - 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x00c0, 0x35d4, 0x00f0, 0x35c2, - 0x6242, 0x7087, 0x0000, 0x6040, 0xa094, 0x0010, 0xa285, 0x0080, - 0x6042, 0x6242, 0x0078, 0x35db, 0x6242, 0x7087, 0x0000, 0x707b, - 0x0000, 0x0078, 0x35db, 0x157f, 0x007c, 0x7078, 0xa08a, 0x0003, - 0x00c8, 0x35e6, 0x1079, 0x35e9, 0x0078, 0x35e8, 0x1078, 0x12d2, - 0x007c, 0x35ec, 0x363b, 0x36c5, 0x0f7e, 0x707b, 0x0001, 0x20e1, - 0xa000, 0x20e1, 0x8700, 0x1078, 0x1f57, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x2079, 0x8d00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, - 0x0000, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, - 0x0000, 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, - 0x0000, 0x782f, 0x0000, 0x2079, 0x8d0c, 0x207b, 0x1101, 0x7807, - 0x0000, 0x2099, 0x8805, 0x20a1, 0x8d0e, 0x20a9, 0x0004, 0x53a3, - 0x2079, 0x8d12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0x8d00, - 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, - 0x0000, 0x1078, 0x3c5a, 0x0f7f, 0x707f, 0x0000, 0x6043, 0x0008, - 0x6043, 0x0000, 0x007c, 0x0d7e, 0x707c, 0x707f, 0x0000, 0xa025, - 0x0040, 0x36af, 0x6020, 0xd0b4, 0x00c0, 0x36ad, 0x7188, 0x81ff, - 0x0040, 0x3696, 0xa486, 0x000c, 0x00c0, 0x36a1, 0xa480, 0x0018, - 0x8004, 0x20a8, 0x2011, 0x8d80, 0x2019, 0x8d00, 0x220c, 0x2304, - 0xa106, 0x00c0, 0x366d, 0x8210, 0x8318, 0x00f0, 0x3656, 0x6043, - 0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x707b, - 0x0002, 0x7087, 0x0002, 0x0078, 0x36ad, 0x2069, 0x8d80, 0x6930, - 0xa18e, 0x1101, 0x00c0, 0x36a1, 0x6834, 0xa005, 0x00c0, 0x36a1, - 0x6900, 0xa18c, 0x00ff, 0x00c0, 0x3681, 0x6804, 0xa005, 0x0040, - 0x3696, 0x2011, 0x8d8e, 0x2019, 0x8805, 0x20a9, 0x0004, 0x220c, - 0x2304, 0xa102, 0x0048, 0x3694, 0x00c0, 0x36a1, 0x8210, 0x8318, - 0x00f0, 0x3687, 0x0078, 0x36a1, 0x708b, 0x0000, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x2099, 0x8d80, 0x20a1, 0x020b, 0x20a9, 0x0014, - 0x53a6, 0x6043, 0x0008, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, - 0x36ad, 0x60c3, 0x000c, 0x1078, 0x3c5a, 0x0d7f, 0x007c, 0x6020, - 0xd0b4, 0x00c0, 0x36ad, 0x60c3, 0x000c, 0x2011, 0x8aac, 0x2013, - 0x0000, 0x707f, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, - 0x9575, 0x1078, 0x6229, 0x0078, 0x36ad, 0x007c, 0x7084, 0xa08a, - 0x001d, 0x00c8, 0x36cf, 0x1079, 0x36d2, 0x0078, 0x36d1, 0x1078, - 0x12d2, 0x007c, 0x36fc, 0x370b, 0x373c, 0x3751, 0x3781, 0x37ad, - 0x37dd, 0x3813, 0x3843, 0x386b, 0x38b4, 0x38de, 0x3902, 0x3918, - 0x3940, 0x3953, 0x395c, 0x3988, 0x39b6, 0x39e2, 0x3a10, 0x3a46, - 0x3a8f, 0x3abe, 0x3ae0, 0x3b22, 0x3b48, 0x3b61, 0x3b62, 0x0c7e, - 0x2061, 0x8800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0xa084, - 0xfff9, 0x6006, 0x0c7f, 0x007c, 0x608b, 0xbc94, 0x608f, 0xf0f0, - 0x6043, 0x0002, 0x7087, 0x0001, 0x2009, 0x07d0, 0x2011, 0x3c35, - 0x1078, 0x50e5, 0x007c, 0x0f7e, 0x707c, 0xa086, 0x0014, 0x00c0, - 0x373a, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x373a, 0x2079, - 0x8d80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3738, 0x7834, 0xa005, - 0x00c0, 0x3738, 0x7a38, 0xd2fc, 0x0040, 0x372e, 0x70a8, 0xa005, - 0x00c0, 0x372e, 0x1078, 0x3cf3, 0x70ab, 0x0001, 0x2011, 0x3c35, - 0x1078, 0x50f2, 0x7087, 0x0010, 0x1078, 0x395c, 0x0078, 0x373a, - 0x707f, 0x0000, 0x0f7f, 0x007c, 0x7087, 0x0003, 0x6043, 0x0004, - 0x1078, 0x3cc4, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9, 0x000a, - 0x20a3, 0x0000, 0x00f0, 0x3748, 0x60c3, 0x0014, 0x1078, 0x3c5a, - 0x007c, 0x0f7e, 0x707c, 0xa005, 0x0040, 0x377f, 0x2011, 0x3c35, - 0x1078, 0x50f2, 0xa086, 0x0014, 0x00c0, 0x377b, 0x2079, 0x8d80, - 0x7a30, 0xa296, 0x1102, 0x00c0, 0x377b, 0x7834, 0xa005, 0x00c0, - 0x377b, 0x7a38, 0xd2fc, 0x0040, 0x3775, 0x70a8, 0xa005, 0x00c0, - 0x3775, 0x1078, 0x3cf3, 0x70ab, 0x0001, 0x7087, 0x0004, 0x1078, - 0x3781, 0x0078, 0x377f, 0x7087, 0x0002, 0x707f, 0x0000, 0x0f7f, - 0x007c, 0x7087, 0x0005, 0x1078, 0x3cc4, 0x20a3, 0x1103, 0x20a3, - 0x0000, 0x3430, 0x2011, 0x8d8e, 0x1078, 0x3d0d, 0x00c0, 0x379f, - 0x7070, 0xa005, 0x00c0, 0x379f, 0x714c, 0xa186, 0xffff, 0x0040, - 0x379f, 0x1078, 0x3bf9, 0x0040, 0x379f, 0x1078, 0x3cf3, 0x20a9, - 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x1078, 0x3c5a, 0x007c, 0x0f7e, 0x707c, 0xa005, - 0x0040, 0x37db, 0x2011, 0x3c35, 0x1078, 0x50f2, 0xa086, 0x0014, - 0x00c0, 0x37d7, 0x2079, 0x8d80, 0x7a30, 0xa296, 0x1103, 0x00c0, - 0x37d7, 0x7834, 0xa005, 0x00c0, 0x37d7, 0x7a38, 0xd2fc, 0x0040, - 0x37d1, 0x70a8, 0xa005, 0x00c0, 0x37d1, 0x1078, 0x3cf3, 0x70ab, - 0x0001, 0x7087, 0x0006, 0x1078, 0x37dd, 0x0078, 0x37db, 0x7087, - 0x0002, 0x707f, 0x0000, 0x0f7f, 0x007c, 0x7087, 0x0007, 0x1078, - 0x3cc4, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0x8d8e, - 0x1078, 0x3d0d, 0x00c0, 0x3805, 0x7070, 0xa005, 0x00c0, 0x3805, - 0x7150, 0xa186, 0xffff, 0x0040, 0x3805, 0xa180, 0x25b2, 0x200c, - 0xa18c, 0xff00, 0x810f, 0x1078, 0x3bf9, 0x0040, 0x3805, 0x1078, - 0x3359, 0x0040, 0x3805, 0x1078, 0x2262, 0x20a9, 0x0008, 0x2298, - 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x3c5a, 0x007c, 0x0f7e, 0x707c, 0xa005, 0x0040, 0x3841, - 0x2011, 0x3c35, 0x1078, 0x50f2, 0xa086, 0x0014, 0x00c0, 0x383d, - 0x2079, 0x8d80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x383d, 0x7834, - 0xa005, 0x00c0, 0x383d, 0x7a38, 0xd2fc, 0x0040, 0x3837, 0x70a8, - 0xa005, 0x00c0, 0x3837, 0x1078, 0x3cf3, 0x70ab, 0x0001, 0x7087, - 0x0008, 0x1078, 0x3843, 0x0078, 0x3841, 0x7087, 0x0002, 0x707f, - 0x0000, 0x0f7f, 0x007c, 0x7087, 0x0009, 0x1078, 0x3cc4, 0x20a3, - 0x1105, 0x20a3, 0x0100, 0x3430, 0x1078, 0x3d0d, 0x00c0, 0x385c, - 0x7070, 0xa005, 0x00c0, 0x385c, 0x1078, 0x3b63, 0x00c0, 0x3866, - 0xa085, 0x0001, 0x1078, 0x2262, 0x20a9, 0x0008, 0x2099, 0x8d8e, - 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x3c5a, 0x007c, 0x0f7e, 0x707c, 0xa005, 0x0040, 0x38b2, - 0x2011, 0x3c35, 0x1078, 0x50f2, 0xa086, 0x0014, 0x00c0, 0x38ae, - 0x2079, 0x8d80, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x38ae, 0x7834, - 0x2011, 0x0100, 0xa21e, 0x00c0, 0x3897, 0x7a38, 0xd2fc, 0x0040, - 0x3891, 0x70a8, 0xa005, 0x00c0, 0x3891, 0x1078, 0x3cf3, 0x70ab, - 0x0001, 0x7087, 0x000a, 0x1078, 0x38b4, 0x0078, 0x38b2, 0xa005, - 0x00c0, 0x38ae, 0x7a38, 0xd2fc, 0x0040, 0x38a6, 0x70a8, 0xa005, - 0x00c0, 0x38a6, 0x1078, 0x3cf3, 0x70ab, 0x0001, 0x7083, 0x0000, - 0x7087, 0x000e, 0x1078, 0x3940, 0x0078, 0x38b2, 0x7087, 0x0002, - 0x707f, 0x0000, 0x0f7f, 0x007c, 0x7087, 0x000b, 0x2011, 0x8d0e, - 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, - 0x2009, 0x0000, 0x41a4, 0x1078, 0x3cc4, 0x20a3, 0x1106, 0x20a3, - 0x0000, 0x1078, 0x3d0d, 0x0040, 0x38d1, 0x2013, 0x0000, 0x0078, - 0x38d5, 0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, - 0x53a6, 0x60c3, 0x0084, 0x1078, 0x3c5a, 0x007c, 0x0f7e, 0x707c, - 0xa005, 0x0040, 0x3900, 0x2011, 0x3c35, 0x1078, 0x50f2, 0xa086, - 0x0084, 0x00c0, 0x38fc, 0x2079, 0x8d80, 0x7a30, 0xa296, 0x1106, - 0x00c0, 0x38fc, 0x7834, 0xa005, 0x00c0, 0x38fc, 0x7087, 0x000c, - 0x1078, 0x3902, 0x0078, 0x3900, 0x7087, 0x0002, 0x707f, 0x0000, - 0x0f7f, 0x007c, 0x7087, 0x000d, 0x1078, 0x3cc4, 0x20a3, 0x1107, - 0x20a3, 0x0000, 0x2099, 0x8d8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x3c5a, 0x007c, - 0x0f7e, 0x707c, 0xa005, 0x0040, 0x393e, 0x2011, 0x3c35, 0x1078, - 0x50f2, 0xa086, 0x0084, 0x00c0, 0x393a, 0x2079, 0x8d80, 0x7a30, - 0xa296, 0x1107, 0x00c0, 0x393a, 0x7834, 0xa005, 0x00c0, 0x393a, - 0x7083, 0x0001, 0x1078, 0x3cb6, 0x7087, 0x000e, 0x1078, 0x3940, - 0x0078, 0x393e, 0x7087, 0x0002, 0x707f, 0x0000, 0x0f7f, 0x007c, - 0x7087, 0x000f, 0x707f, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, - 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x3c35, - 0x1078, 0x50e5, 0x007c, 0x707c, 0xa005, 0x0040, 0x395b, 0x2011, - 0x3c35, 0x1078, 0x50f2, 0x007c, 0x7087, 0x0011, 0x7168, 0x81ff, - 0x0040, 0x3971, 0x2009, 0x0000, 0x706c, 0xa084, 0x00ff, 0x1078, - 0x2245, 0xa186, 0x0080, 0x0040, 0x3971, 0x2011, 0x8d8e, 0x1078, - 0x3bf9, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x8d80, 0x20a1, - 0x020b, 0x747c, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, - 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014, 0x1078, 0x3c5a, 0x007c, - 0x0f7e, 0x707c, 0xa005, 0x0040, 0x39b4, 0x2011, 0x3c35, 0x1078, - 0x50f2, 0xa086, 0x0014, 0x00c0, 0x39b2, 0x2079, 0x8d80, 0x7a30, - 0xa296, 0x1103, 0x00c0, 0x39b2, 0x7834, 0xa005, 0x00c0, 0x39b2, - 0x7a38, 0xd2fc, 0x0040, 0x39ac, 0x70a8, 0xa005, 0x00c0, 0x39ac, - 0x1078, 0x3cf3, 0x70ab, 0x0001, 0x7087, 0x0012, 0x1078, 0x39b6, - 0x0078, 0x39b4, 0x707f, 0x0000, 0x0f7f, 0x007c, 0x7087, 0x0013, - 0x1078, 0x3cd0, 0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, - 0x8d8e, 0x1078, 0x3d0d, 0x00c0, 0x39d4, 0x7070, 0xa005, 0x00c0, - 0x39d4, 0x714c, 0xa186, 0xffff, 0x0040, 0x39d4, 0x1078, 0x3bf9, - 0x0040, 0x39d4, 0x1078, 0x3cf3, 0x20a9, 0x0008, 0x2298, 0x26a0, - 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, - 0x3c5a, 0x007c, 0x0f7e, 0x707c, 0xa005, 0x0040, 0x3a0e, 0x2011, - 0x3c35, 0x1078, 0x50f2, 0xa086, 0x0014, 0x00c0, 0x3a0c, 0x2079, - 0x8d80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3a0c, 0x7834, 0xa005, - 0x00c0, 0x3a0c, 0x7a38, 0xd2fc, 0x0040, 0x3a06, 0x70a8, 0xa005, - 0x00c0, 0x3a06, 0x1078, 0x3cf3, 0x70ab, 0x0001, 0x7087, 0x0014, - 0x1078, 0x3a10, 0x0078, 0x3a0e, 0x707f, 0x0000, 0x0f7f, 0x007c, - 0x7087, 0x0015, 0x1078, 0x3cd0, 0x20a3, 0x1104, 0x20a3, 0x0000, - 0x3430, 0x2011, 0x8d8e, 0x1078, 0x3d0d, 0x00c0, 0x3a38, 0x7070, - 0xa005, 0x00c0, 0x3a38, 0x7150, 0xa186, 0xffff, 0x0040, 0x3a38, - 0xa180, 0x25b2, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x3bf9, - 0x0040, 0x3a38, 0x1078, 0x3359, 0x0040, 0x3a38, 0x1078, 0x2262, - 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x60c3, 0x0014, 0x1078, 0x3c5a, 0x007c, 0x0f7e, 0x707c, - 0xa005, 0x0040, 0x3a8d, 0x2011, 0x3c35, 0x1078, 0x50f2, 0xa086, - 0x0014, 0x00c0, 0x3a8b, 0x2079, 0x8d80, 0x7a30, 0xa296, 0x1105, - 0x00c0, 0x3a8b, 0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x3a6e, - 0x7a38, 0xd2fc, 0x0040, 0x3a6c, 0x70a8, 0xa005, 0x00c0, 0x3a6c, - 0x1078, 0x3cf3, 0x70ab, 0x0001, 0x0078, 0x3a7f, 0xa005, 0x00c0, - 0x3a8b, 0x7a38, 0xd2fc, 0x0040, 0x3a7d, 0x70a8, 0xa005, 0x00c0, - 0x3a7d, 0x1078, 0x3cf3, 0x70ab, 0x0001, 0x7083, 0x0000, 0x7a38, - 0xd2f4, 0x0040, 0x3a85, 0x70c3, 0x0008, 0x7087, 0x0016, 0x1078, - 0x3a8f, 0x0078, 0x3a8d, 0x707f, 0x0000, 0x0f7f, 0x007c, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x2099, 0x8d80, 0x20a1, 0x020b, 0x20a9, - 0x000e, 0x53a6, 0x3430, 0x2011, 0x8d8e, 0x7087, 0x0017, 0x1078, - 0x3d0d, 0x00c0, 0x3aaf, 0x7070, 0xa005, 0x00c0, 0x3aaf, 0x1078, - 0x3b63, 0x00c0, 0x3ab9, 0xa085, 0x0001, 0x1078, 0x2262, 0x20a9, - 0x0008, 0x2099, 0x8d8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x60c3, 0x0014, 0x1078, 0x3c5a, 0x007c, 0x0f7e, 0x707c, - 0xa005, 0x0040, 0x3ade, 0x2011, 0x3c35, 0x1078, 0x50f2, 0xa086, - 0x0084, 0x00c0, 0x3adc, 0x2079, 0x8d80, 0x7a30, 0xa296, 0x1106, - 0x00c0, 0x3adc, 0x7834, 0xa005, 0x00c0, 0x3adc, 0x7087, 0x0018, - 0x1078, 0x3ae0, 0x0078, 0x3ade, 0x707f, 0x0000, 0x0f7f, 0x007c, - 0x7087, 0x0019, 0x1078, 0x3cd0, 0x20a3, 0x1106, 0x20a3, 0x0000, - 0x3430, 0x2099, 0x8d8e, 0x2039, 0x8d0e, 0x27a0, 0x20a9, 0x0040, - 0x53a3, 0x1078, 0x3d0d, 0x00c0, 0x3b14, 0x2728, 0x2514, 0x8207, - 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007, 0xa205, - 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0x8d0e, 0x2414, 0xa38c, - 0x0001, 0x0040, 0x3b0f, 0xa294, 0xff00, 0x0078, 0x3b12, 0xa294, - 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9, 0x0040, - 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, - 0x3c5a, 0x007c, 0x0f7e, 0x707c, 0xa005, 0x0040, 0x3b46, 0x2011, - 0x3c35, 0x1078, 0x50f2, 0xa086, 0x0084, 0x00c0, 0x3b44, 0x2079, - 0x8d80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x3b44, 0x7834, 0xa005, - 0x00c0, 0x3b44, 0x7083, 0x0001, 0x1078, 0x3cb6, 0x7087, 0x001a, - 0x1078, 0x3b48, 0x0078, 0x3b46, 0x707f, 0x0000, 0x0f7f, 0x007c, - 0x7087, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x8d80, - 0x20a1, 0x020b, 0x747c, 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, - 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078, 0x3c5a, - 0x007c, 0x007c, 0x007c, 0x087e, 0x097e, 0x2029, 0x8852, 0x252c, - 0x20a9, 0x0008, 0x2041, 0x8d0e, 0x28a0, 0x2099, 0x8d8e, 0x53a3, - 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0040, 0x3b79, 0x2011, - 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6, 0xffff, 0x00c0, 0x3b8b, - 0xd5d4, 0x0040, 0x3b86, 0x8210, 0x0078, 0x3b87, 0x8211, 0x00f0, - 0x3b79, 0x0078, 0x3bf0, 0x82ff, 0x00c0, 0x3b9d, 0xd5d4, 0x0040, - 0x3b97, 0xa1a6, 0x3fff, 0x0040, 0x3b83, 0x0078, 0x3b9b, 0xa1a6, - 0x3fff, 0x0040, 0x3bf0, 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, - 0x0001, 0xd5d4, 0x0040, 0x3ba6, 0x2019, 0x0010, 0x2120, 0xd5d4, - 0x0040, 0x3bad, 0x8423, 0x0078, 0x3bae, 0x8424, 0x00c8, 0x3bbb, - 0xd5d4, 0x0040, 0x3bb6, 0x8319, 0x0078, 0x3bb7, 0x8318, 0x00f0, - 0x3ba7, 0x0078, 0x3bf0, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, - 0x00f0, 0x3bbf, 0x2328, 0x8529, 0xa2be, 0x0007, 0x0040, 0x3bd3, - 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a, 0x007f, 0x27a8, 0xa5a8, - 0x0010, 0x00f0, 0x3bcf, 0x754e, 0xa5c8, 0x25b2, 0x292c, 0xa5ac, - 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0xa405, - 0x201a, 0x7073, 0x0001, 0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085, 0x0001, 0x0078, 0x3bf6, - 0xa006, 0x0078, 0x3bf6, 0xa006, 0x1078, 0x12d2, 0x097f, 0x087f, - 0x007c, 0x2118, 0x2021, 0x0000, 0x2001, 0x0007, 0xa39a, 0x0010, - 0x0048, 0x3c06, 0x8420, 0x8001, 0x0078, 0x3bfe, 0x2118, 0x84ff, - 0x0040, 0x3c0f, 0xa39a, 0x0010, 0x8421, 0x00c0, 0x3c0a, 0x2021, - 0x0001, 0x83ff, 0x0040, 0x3c18, 0x8423, 0x8319, 0x00c0, 0x3c14, - 0xa238, 0x2704, 0xa42c, 0x00c0, 0x3c2d, 0xa405, 0x203a, 0x714e, - 0xa1a0, 0x25b2, 0x242c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, - 0x65ea, 0x7073, 0x0001, 0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, - 0x8800, 0x7077, 0x0000, 0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2079, - 0x0100, 0x2071, 0x0140, 0x1078, 0x6232, 0x7004, 0xa084, 0x4000, - 0x0040, 0x3c46, 0x7003, 0x1000, 0x7003, 0x0000, 0x127e, 0x2091, - 0x8000, 0x2071, 0x8821, 0x2073, 0x0000, 0x7840, 0x027e, 0xa094, - 0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x027f, 0x127f, 0x0f7f, - 0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, 0x8aac, 0x2013, - 0x0000, 0x707f, 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3, 0x0056, - 0x60a7, 0x9575, 0x1078, 0x6229, 0x2009, 0x07d0, 0x2011, 0x3c35, - 0x1078, 0x5181, 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e, 0x2091, - 0x8000, 0x2009, 0x00f7, 0x1078, 0x3cdc, 0x2061, 0x8ab5, 0x601b, - 0x0000, 0x601f, 0x0000, 0x2061, 0x8800, 0x6003, 0x0001, 0x2061, - 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, - 0x3c98, 0x1078, 0x50e5, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c, - 0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x0100, 0x1078, - 0x6232, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, 0x0040, 0x3cac, - 0x7003, 0x1000, 0x7003, 0x0000, 0x2001, 0x0001, 0x1078, 0x21f3, - 0x1078, 0x3c73, 0x127f, 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, - 0x20a1, 0x8ec0, 0x2099, 0x8d8e, 0x3304, 0x8007, 0x20a2, 0x9398, - 0x94a0, 0x00f0, 0x3cbc, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x2099, 0x8d00, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x8d80, 0x20a1, 0x020b, - 0x20a9, 0x000c, 0x53a6, 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, - 0x810f, 0x2001, 0x882d, 0x2004, 0xa005, 0x00c0, 0x3ced, 0x6030, - 0xa084, 0x00ff, 0xa105, 0x0078, 0x3cef, 0xa185, 0x00f7, 0x604a, - 0x007f, 0x0c7f, 0x007c, 0x017e, 0x047e, 0x2001, 0x8852, 0x2004, - 0xd0a4, 0x0040, 0x3d06, 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, - 0x86f5, 0x2001, 0x880c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, - 0x1078, 0x249d, 0x047f, 0x017f, 0x007c, 0x007e, 0x2001, 0x880c, - 0x2004, 0xd09c, 0x0040, 0x3d14, 0x007f, 0x007c, 0x007e, 0x017e, - 0x127e, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, - 0x2102, 0x127f, 0x017f, 0x007f, 0x007c, 0x157e, 0x20a9, 0x00ff, - 0x2009, 0x8934, 0xa006, 0x200a, 0x8108, 0x00f0, 0x3d2b, 0x157f, - 0x007c, 0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0x8851, - 0xa006, 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, - 0x25b2, 0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, - 0x0006, 0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, - 0x40a4, 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, - 0x6062, 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, - 0x6082, 0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, - 0x61a2, 0x0d7e, 0x60a4, 0xa06d, 0x0040, 0x3d70, 0x1078, 0x1344, - 0x60a7, 0x0000, 0x60a8, 0xa06d, 0x0040, 0x3d78, 0x1078, 0x1344, - 0x60ab, 0x0000, 0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c, - 0x6046, 0x6814, 0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f, - 0x037f, 0x0d7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48, - 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8, 0x3e31, 0xa18c, 0xff00, - 0x810f, 0xa182, 0x00ff, 0x00c8, 0x3e37, 0x2001, 0x880c, 0x2004, - 0xa084, 0x0003, 0x00c0, 0x3e1a, 0xa188, 0x8934, 0x2104, 0xa065, - 0x0040, 0x3e08, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, - 0x3e0e, 0x60a4, 0xa00d, 0x0040, 0x3db9, 0x1078, 0x41b1, 0x0040, - 0x3e02, 0x60a8, 0xa00d, 0x0040, 0x3dd3, 0x1078, 0x4202, 0x00c0, - 0x3dd3, 0x694c, 0xd1fc, 0x00c0, 0x3dc9, 0x1078, 0x3ee2, 0x0078, - 0x3dfd, 0x1078, 0x3e9c, 0x694c, 0xd1ec, 0x00c0, 0x3dfd, 0x1078, - 0x407a, 0x0078, 0x3dfd, 0x694c, 0xa184, 0xa000, 0x0040, 0x3ded, - 0xd1ec, 0x0040, 0x3de6, 0xd1fc, 0x0040, 0x3de2, 0x1078, 0x408b, - 0x0078, 0x3de9, 0x1078, 0x408b, 0x0078, 0x3ded, 0xd1fc, 0x0040, - 0x3ded, 0x1078, 0x3e9c, 0x0078, 0x3dfd, 0x6050, 0xa00d, 0x0040, - 0x3df8, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x0078, 0x3dfd, - 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x1078, 0x53b8, 0xa006, - 0x127f, 0x007c, 0x2001, 0x0005, 0x2009, 0x0000, 0x0078, 0x3e3b, - 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x3e3b, 0xa082, 0x0006, - 0x00c8, 0x3e1a, 0x60a0, 0xd0bc, 0x0040, 0x3db1, 0x2001, 0x0028, - 0x0078, 0x3e2d, 0x2009, 0x880c, 0x210c, 0xd18c, 0x0040, 0x3e24, - 0x2001, 0x0004, 0x0078, 0x3e2d, 0xd184, 0x0040, 0x3e2b, 0x2001, - 0x0004, 0x0078, 0x3e2d, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, - 0x3e3b, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x3e3b, 0x2001, - 0x0029, 0x2009, 0x0000, 0xa005, 0x127f, 0x007c, 0x6944, 0x6e48, - 0xa684, 0x3fff, 0xa082, 0x4000, 0x00c8, 0x3e81, 0xa18c, 0xff00, - 0x810f, 0xa182, 0x00ff, 0x00c8, 0x3e71, 0xa188, 0x8934, 0x2104, - 0xa065, 0x0040, 0x3e71, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, - 0x00c0, 0x3e77, 0x684c, 0xd0ec, 0x0040, 0x3e64, 0x1078, 0x408b, - 0x1078, 0x3e9c, 0x0078, 0x3e6c, 0x1078, 0x3e9c, 0x684c, 0xd0fc, - 0x0040, 0x3e6c, 0x1078, 0x407a, 0x1078, 0x40d3, 0xa006, 0x0078, - 0x3e85, 0x2001, 0x0028, 0x2009, 0x0000, 0x0078, 0x3e85, 0xa082, - 0x0006, 0x0048, 0x3e5a, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, - 0x3e85, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, - 0x2091, 0x8000, 0x6050, 0xa00d, 0x0040, 0x3e95, 0x2d00, 0x200a, - 0x6803, 0x0000, 0x6052, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, - 0x6803, 0x0000, 0x0078, 0x3e93, 0x127e, 0x2091, 0x8000, 0x604c, - 0xa005, 0x0040, 0x3eb2, 0x0e7e, 0x2071, 0x8aa2, 0x7004, 0xa086, - 0x0002, 0x0040, 0x3eb9, 0x0e7f, 0x604c, 0x6802, 0x2d00, 0x604e, - 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, - 0x3eb0, 0x701c, 0xac06, 0x00c0, 0x3eab, 0x604c, 0x2070, 0x7000, - 0x6802, 0x2d00, 0x7002, 0x0e7f, 0x127f, 0x007c, 0x127e, 0x2091, - 0x8000, 0x604c, 0xa06d, 0x0040, 0x3ed4, 0x6800, 0xa005, 0x00c0, - 0x3ed2, 0x6052, 0x604e, 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, - 0x0040, 0x3ee1, 0x6800, 0xa005, 0x00c0, 0x3edf, 0x6052, 0x604e, - 0xad05, 0x007c, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0040, 0x3eec, - 0x2d00, 0x200a, 0x6086, 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, - 0x3eeb, 0x127e, 0x0c7e, 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, - 0x6200, 0xa005, 0x0040, 0x3eff, 0xc285, 0x0078, 0x3f00, 0xc284, - 0x6202, 0x027f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, - 0x8000, 0x6218, 0x2260, 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0, - 0x3f24, 0x609c, 0xd0ac, 0x0040, 0x3f24, 0x2001, 0x8852, 0x2004, - 0xd0a4, 0x0040, 0x3f24, 0xa284, 0xff00, 0x8007, 0xa086, 0x0007, - 0x00c0, 0x3f24, 0x6007, 0x0600, 0x007f, 0xa294, 0xff00, 0xa215, - 0x6206, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, - 0x6218, 0x2260, 0x6204, 0x007e, 0xa086, 0x0006, 0x00c0, 0x3f4a, - 0x609c, 0xd0a4, 0x0040, 0x3f4a, 0x2001, 0x8852, 0x2004, 0xd0ac, - 0x00c0, 0x3f4a, 0xa284, 0x00ff, 0xa086, 0x0007, 0x00c0, 0x3f4a, - 0x6007, 0x0006, 0x007f, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, - 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048, 0x3f5c, - 0xa085, 0x0001, 0x0078, 0x3f74, 0xa190, 0x8934, 0x2204, 0xa065, - 0x00c0, 0x3f73, 0x017e, 0x0d7e, 0x1078, 0x1310, 0x2d60, 0x0d7f, - 0x017f, 0x0040, 0x3f58, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, - 0x0000, 0x1078, 0x3d31, 0xa006, 0x027f, 0x007c, 0x027e, 0xa182, - 0x00ff, 0x0048, 0x3f7f, 0xa085, 0x0001, 0x0078, 0x3f8c, 0x0d7e, - 0xa190, 0x8934, 0x2204, 0xa06d, 0x0040, 0x3f8a, 0x2013, 0x0000, - 0x1078, 0x1344, 0x0d7f, 0xa006, 0x027f, 0x007c, 0x017e, 0xa182, - 0x00ff, 0x0048, 0x3f97, 0xa085, 0x0001, 0x0078, 0x3f9e, 0xa188, - 0x8934, 0x2104, 0xa065, 0x0040, 0x3f93, 0xa006, 0x017f, 0x007c, - 0x0d7e, 0x157e, 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, - 0x6000, 0xc08c, 0x6002, 0x2069, 0x8d8e, 0x6808, 0x605e, 0x6810, - 0x6062, 0x6138, 0xa10a, 0x0048, 0x3fb6, 0x603a, 0x6814, 0x6066, - 0x2099, 0x8d96, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, - 0x2099, 0x8d9a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, - 0x2069, 0x8dae, 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, - 0x6818, 0x6076, 0xa182, 0x0211, 0x00c8, 0x3fda, 0x2009, 0x0008, - 0x0078, 0x4004, 0xa182, 0x0259, 0x00c8, 0x3fe2, 0x2009, 0x0007, - 0x0078, 0x4004, 0xa182, 0x02c1, 0x00c8, 0x3fea, 0x2009, 0x0006, - 0x0078, 0x4004, 0xa182, 0x0349, 0x00c8, 0x3ff2, 0x2009, 0x0005, - 0x0078, 0x4004, 0xa182, 0x0421, 0x00c8, 0x3ffa, 0x2009, 0x0004, - 0x0078, 0x4004, 0xa182, 0x0581, 0x00c8, 0x4002, 0x2009, 0x0003, - 0x0078, 0x4004, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, - 0x0d7f, 0x007c, 0x0e7e, 0x2071, 0x8d8d, 0x2e04, 0x6896, 0x2071, - 0x8d8e, 0x7004, 0x689a, 0x701c, 0x689e, 0x0e7f, 0x007c, 0x0d7e, - 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x0040, 0x403b, 0x6900, - 0x81ff, 0x00c0, 0x404f, 0x6a04, 0xa282, 0x0010, 0x00c8, 0x4054, - 0xad88, 0x0004, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040, - 0x4036, 0x8108, 0x00f0, 0x402c, 0x1078, 0x12d2, 0x260a, 0x8210, - 0x6a06, 0x0078, 0x404f, 0x1078, 0x132b, 0x0040, 0x4054, 0x2d00, - 0x60a6, 0x6803, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, - 0xffff, 0x8108, 0x00f0, 0x4047, 0x6807, 0x0001, 0x6e12, 0xa085, - 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, 0x0078, 0x4051, 0x127e, - 0x2091, 0x8000, 0x0d7e, 0x60a4, 0xa00d, 0x0040, 0x4077, 0x2168, - 0x6800, 0xa005, 0x00c0, 0x4073, 0x1078, 0x41b1, 0x00c0, 0x4077, - 0x200b, 0xffff, 0x6804, 0xa08a, 0x0002, 0x0048, 0x4073, 0x8001, - 0x6806, 0x0078, 0x4077, 0x1078, 0x1344, 0x60a7, 0x0000, 0x0d7f, - 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x4217, 0x0078, - 0x4083, 0x1078, 0x3e87, 0x1078, 0x4117, 0x00c0, 0x4081, 0x1078, - 0x40d3, 0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a8, - 0xa06d, 0x0040, 0x40af, 0x6950, 0x81ff, 0x00c0, 0x40c3, 0x6a54, - 0xa282, 0x0010, 0x00c8, 0x40d0, 0xad88, 0x0018, 0x20a9, 0x0010, - 0x2104, 0xa086, 0xffff, 0x0040, 0x40aa, 0x8108, 0x00f0, 0x40a0, - 0x1078, 0x12d2, 0x260a, 0x8210, 0x6a56, 0x0078, 0x40c3, 0x1078, - 0x132b, 0x0040, 0x40d0, 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88, - 0x0018, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x40bb, - 0x6857, 0x0001, 0x6e62, 0x0078, 0x40c7, 0x1078, 0x3ee2, 0x1078, - 0x40dd, 0x00c0, 0x40c5, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, - 0xa006, 0x0078, 0x40cd, 0x127e, 0x2091, 0x8000, 0x1078, 0x53b8, - 0x127f, 0x007c, 0xa01e, 0x0078, 0x40df, 0x2019, 0x0001, 0xa00e, - 0x127e, 0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x00c0, - 0x40fd, 0x8dff, 0x0040, 0x4112, 0x83ff, 0x0040, 0x40f5, 0x6848, - 0xa606, 0x0040, 0x4102, 0x0078, 0x40fd, 0x683c, 0xa406, 0x00c0, - 0x40fd, 0x6840, 0xa506, 0x0040, 0x4102, 0x2d08, 0x6800, 0x2068, - 0x0078, 0x40e9, 0x6a00, 0x604c, 0xad06, 0x00c0, 0x410a, 0x624e, - 0x0078, 0x410d, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x4112, - 0x6152, 0x8dff, 0x127f, 0x007c, 0xa01e, 0x0078, 0x4119, 0x2019, - 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, 0x0040, 0x4145, 0x83ff, - 0x0040, 0x4128, 0x6848, 0xa606, 0x0040, 0x4135, 0x0078, 0x4130, - 0x683c, 0xa406, 0x00c0, 0x4130, 0x6840, 0xa506, 0x0040, 0x4135, - 0x2d08, 0x6800, 0x2068, 0x0078, 0x411c, 0x6a00, 0x6080, 0xad06, - 0x00c0, 0x413d, 0x6282, 0x0078, 0x4140, 0xa180, 0x0000, 0x2202, - 0x82ff, 0x00c0, 0x4145, 0x6186, 0x8dff, 0x007c, 0xa016, 0x1078, - 0x41aa, 0x00c0, 0x414d, 0x2011, 0x0001, 0x1078, 0x41fb, 0x00c0, - 0x4153, 0xa295, 0x0002, 0x007c, 0x1078, 0x4233, 0x0040, 0x415c, - 0x1078, 0x78b9, 0x0078, 0x415e, 0xa085, 0x0001, 0x007c, 0x1078, - 0x4233, 0x0040, 0x4167, 0x1078, 0x784f, 0x0078, 0x4169, 0xa085, - 0x0001, 0x007c, 0x1078, 0x4233, 0x0040, 0x4172, 0x1078, 0x7899, - 0x0078, 0x4174, 0xa085, 0x0001, 0x007c, 0x1078, 0x4233, 0x0040, - 0x417d, 0x1078, 0x786b, 0x0078, 0x417f, 0xa085, 0x0001, 0x007c, - 0x1078, 0x4233, 0x0040, 0x4188, 0x1078, 0x78d9, 0x0078, 0x418a, - 0xa085, 0x0001, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x8000, - 0x6080, 0xa06d, 0x0040, 0x41a2, 0x6800, 0x007e, 0x6837, 0x0103, - 0x6b4a, 0x6847, 0x0000, 0x1078, 0x7a46, 0x1078, 0x4376, 0x007f, - 0x0078, 0x4191, 0x6083, 0x0000, 0x6087, 0x0000, 0x0d7f, 0x007f, - 0x127f, 0x007c, 0x60a4, 0xa00d, 0x00c0, 0x41b1, 0xa085, 0x0001, - 0x007c, 0x0e7e, 0x2170, 0x7000, 0xa005, 0x00c0, 0x41c4, 0x20a9, - 0x0010, 0xae88, 0x0004, 0x2104, 0xa606, 0x0040, 0x41c4, 0x8108, - 0x00f0, 0x41bb, 0xa085, 0x0001, 0xa006, 0x0e7f, 0x007c, 0x0d7e, - 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0, 0x41d5, 0x1078, - 0x132b, 0x0040, 0x41e7, 0x2d00, 0x60a6, 0x6803, 0x0001, 0x6807, - 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, - 0x00f0, 0x41dd, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006, - 0x0078, 0x41e4, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, - 0x0040, 0x41f8, 0x60a7, 0x0000, 0x1078, 0x1344, 0xa085, 0x0001, - 0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0, 0x4202, 0xa085, - 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005, 0x00c0, 0x4215, - 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0040, 0x4215, - 0x8108, 0x00f0, 0x420c, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x127e, - 0x2091, 0x8000, 0x1078, 0x41fb, 0x00c0, 0x4231, 0x200b, 0xffff, - 0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002, 0x0048, 0x422c, - 0x8001, 0x6856, 0x0078, 0x4230, 0x1078, 0x1344, 0x60ab, 0x0000, - 0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c, 0x0f7e, 0x2079, - 0x8851, 0x7804, 0xd0a4, 0x0040, 0x4263, 0x157e, 0x0c7e, 0x20a9, - 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x3f8e, 0x00c0, 0x4257, - 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004, 0x0040, 0x4254, - 0xa086, 0x0006, 0x00c0, 0x4257, 0x6000, 0xc0ed, 0x6002, 0x017f, - 0x8108, 0x00f0, 0x4243, 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, - 0x4265, 0x1078, 0x5181, 0x0f7f, 0x007c, 0x2011, 0x4265, 0x1078, - 0x50f2, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, - 0x1078, 0x3f8e, 0x00c0, 0x429b, 0x6000, 0xd0ec, 0x0040, 0x429b, - 0x047e, 0x62a0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, - 0x1078, 0x86f5, 0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084, - 0x00ff, 0xa085, 0x0700, 0x6006, 0x2019, 0x0029, 0x1078, 0x54f0, - 0x087e, 0x2041, 0x0000, 0x1078, 0x5419, 0x2009, 0x0000, 0x1078, - 0x84d2, 0x087f, 0x047f, 0x017f, 0x8108, 0x00f0, 0x426f, 0x0c7f, - 0x157f, 0x007c, 0x0c7e, 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, - 0x0c7f, 0x007c, 0x2071, 0x8913, 0x7003, 0x0001, 0x7007, 0x0000, - 0x7013, 0x0000, 0x7017, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, - 0x704b, 0x0001, 0x704f, 0x0000, 0x705b, 0x0020, 0x705f, 0x0040, - 0x707f, 0x0000, 0x2071, 0x8a7c, 0x7003, 0x8913, 0x7007, 0x0000, - 0x700b, 0x0000, 0x700f, 0x8a5c, 0x7013, 0x0020, 0x7017, 0x0040, - 0x7037, 0x0000, 0x007c, 0x017e, 0x0e7e, 0x2071, 0x8a34, 0xa00e, - 0x7186, 0x718a, 0x7097, 0x0001, 0x2001, 0x8852, 0x2004, 0xd0fc, - 0x00c0, 0x42ed, 0x2001, 0x8852, 0x2004, 0xa00e, 0xd09c, 0x0040, - 0x42ea, 0x8108, 0x7102, 0x0078, 0x4340, 0x2001, 0x8871, 0x200c, - 0xa184, 0x000f, 0x2009, 0x8872, 0x210c, 0x0079, 0x42f7, 0x42e2, - 0x4318, 0x4320, 0x432b, 0x4331, 0x42e2, 0x42e2, 0x42e2, 0x4307, - 0x42e2, 0x42e2, 0x42e2, 0x42e2, 0x42e2, 0x42e2, 0x42e2, 0x7003, - 0x0004, 0x137e, 0x147e, 0x157e, 0x2099, 0x8875, 0x20a1, 0x8a85, - 0x20a9, 0x0004, 0x53a3, 0x157f, 0x147f, 0x137f, 0x0078, 0x4340, - 0x708f, 0x0005, 0x7007, 0x0122, 0x2001, 0x0002, 0x0078, 0x4326, - 0x708f, 0x0002, 0x7007, 0x0121, 0x2001, 0x0003, 0x7002, 0x7097, - 0x0001, 0x0078, 0x433d, 0x7007, 0x0122, 0x2001, 0x0002, 0x0078, - 0x4335, 0x7007, 0x0121, 0x2001, 0x0003, 0x7002, 0xa006, 0x7096, - 0x708e, 0xa184, 0xff00, 0x8007, 0x709a, 0xa184, 0x00ff, 0x7092, - 0x0e7f, 0x017f, 0x007c, 0x0e7e, 0x2071, 0x8913, 0x684c, 0xa005, - 0x00c0, 0x4351, 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, - 0x4374, 0x6a60, 0x7236, 0x6b64, 0x733a, 0x6868, 0x703e, 0x7076, - 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, 0x6844, 0x7032, 0x2009, - 0x000d, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, - 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e, 0x7372, 0x7028, 0xc084, - 0x702a, 0x7007, 0x0001, 0xa006, 0x0e7f, 0x007c, 0x0e7e, 0x027e, - 0x6838, 0xd0fc, 0x00c0, 0x43cc, 0x6804, 0xa00d, 0x0040, 0x4392, - 0x0d7e, 0x2071, 0x8800, 0xa016, 0x702c, 0x2168, 0x6904, 0x206a, - 0x8210, 0x2d00, 0x81ff, 0x00c0, 0x4385, 0x702e, 0x70a4, 0xa200, - 0x70a6, 0x0d7f, 0x2071, 0x8913, 0x701c, 0xa005, 0x00c0, 0x43de, - 0x0068, 0x43dc, 0x2071, 0x8a34, 0x7200, 0x82ff, 0x0040, 0x43dc, - 0x6934, 0xa186, 0x0103, 0x00c0, 0x43ef, 0x6948, 0x6844, 0xa105, - 0x00c0, 0x43cf, 0x2009, 0x8020, 0x2200, 0x0079, 0x43af, 0x43dc, - 0x43b4, 0x440c, 0x441a, 0x43dc, 0x2071, 0x0000, 0x7018, 0xd084, - 0x00c0, 0x43dc, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, - 0x0001, 0x2091, 0x4080, 0x2071, 0x8800, 0x702c, 0x206a, 0x2d00, - 0x702e, 0x70a4, 0x8000, 0x70a6, 0x027f, 0x0e7f, 0x007c, 0x6844, - 0xa086, 0x0100, 0x00c0, 0x43dc, 0x6868, 0xa005, 0x00c0, 0x43dc, - 0x2009, 0x8020, 0x0078, 0x43ac, 0x2071, 0x8913, 0x2d08, 0x206b, - 0x0000, 0x7010, 0x8000, 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, - 0x43ec, 0x6902, 0x0078, 0x43ed, 0x711e, 0x0078, 0x43cc, 0xa18c, - 0x00ff, 0xa186, 0x0017, 0x0040, 0x43fd, 0xa186, 0x001e, 0x0040, - 0x43fd, 0xa18e, 0x001f, 0x00c0, 0x43dc, 0x684c, 0xd0cc, 0x0040, - 0x43dc, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x43dc, - 0x2009, 0x8021, 0x0078, 0x43ac, 0x7084, 0x8008, 0xa092, 0x001e, - 0x00c8, 0x43dc, 0x7186, 0xae90, 0x0003, 0xa210, 0x683c, 0x2012, - 0x0078, 0x442a, 0x7084, 0x8008, 0xa092, 0x000f, 0x00c8, 0x43dc, - 0x7186, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210, - 0x6840, 0x2012, 0x7088, 0xa10a, 0x0048, 0x43c3, 0x718c, 0x7084, - 0xa10a, 0x0048, 0x43c3, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, - 0x43c3, 0x2071, 0x8a34, 0x7000, 0xa086, 0x0002, 0x00c0, 0x444a, - 0x1078, 0x46a6, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, - 0x0078, 0x43c3, 0x1078, 0x46d1, 0x2071, 0x0000, 0x701b, 0x0001, - 0x2091, 0x4080, 0x0078, 0x43c3, 0x007e, 0x684c, 0x007e, 0x6837, - 0x0103, 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, - 0x40a4, 0x007f, 0xa084, 0x00ff, 0x684e, 0x007f, 0x684a, 0x6952, - 0x007c, 0x2071, 0x8913, 0x7004, 0x0079, 0x446e, 0x4478, 0x4487, - 0x4677, 0x4678, 0x469f, 0x46a5, 0x4479, 0x4665, 0x4608, 0x4688, - 0x007c, 0x127e, 0x2091, 0x8000, 0x0068, 0x4486, 0x2009, 0x000d, - 0x7030, 0x200a, 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x2069, - 0x8ab5, 0x6844, 0xa005, 0x0050, 0x44af, 0x00c0, 0x44af, 0x127e, - 0x2091, 0x8000, 0x2069, 0x0000, 0x6934, 0x2001, 0x891f, 0x2004, - 0xa10a, 0x0040, 0x44aa, 0x0068, 0x44af, 0x2069, 0x0000, 0x6818, - 0xd084, 0x00c0, 0x44ae, 0x2009, 0x8040, 0x6922, 0x681b, 0x0001, - 0x2091, 0x4080, 0x2069, 0x8ab5, 0x6847, 0xffff, 0x127f, 0x2069, - 0x8800, 0x6844, 0x6960, 0xa102, 0x2069, 0x8a34, 0x688a, 0x6984, - 0x701c, 0xa06d, 0x0040, 0x44c1, 0x81ff, 0x0040, 0x4509, 0x0078, - 0x44d7, 0x81ff, 0x0040, 0x45db, 0x2071, 0x8a34, 0x7184, 0x7088, - 0xa10a, 0x00c8, 0x44d7, 0x7190, 0x2071, 0x8ab5, 0x7040, 0xa005, - 0x0040, 0x44d7, 0x00d0, 0x45db, 0x7142, 0x0078, 0x45db, 0x2071, - 0x8a34, 0x718c, 0x127e, 0x2091, 0x8000, 0x7084, 0xa10a, 0x0048, - 0x45dc, 0x0068, 0x458d, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, - 0x458d, 0x2001, 0xffff, 0x2071, 0x8ab5, 0x7042, 0x2071, 0x8a34, - 0x7000, 0xa086, 0x0002, 0x00c0, 0x44ff, 0x1078, 0x46a6, 0x2071, - 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, 0x458d, 0x1078, - 0x46d1, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078, - 0x458d, 0x2071, 0x8a34, 0x7000, 0xa005, 0x0040, 0x45ba, 0x6934, - 0xa186, 0x0103, 0x00c0, 0x4590, 0x684c, 0xd0bc, 0x00c0, 0x45ba, - 0x6948, 0x6844, 0xa105, 0x00c0, 0x45ad, 0x2071, 0x8a34, 0x7000, - 0x0079, 0x4522, 0x45ba, 0x4570, 0x4548, 0x455a, 0x4527, 0x137e, - 0x147e, 0x157e, 0x2099, 0x8875, 0x20a1, 0x8a85, 0x20a9, 0x0004, - 0x53a3, 0x157f, 0x147f, 0x137f, 0x2071, 0x8a7c, 0xad80, 0x000f, - 0x700e, 0x7013, 0x0002, 0x7007, 0x0002, 0x700b, 0x0000, 0x2e10, - 0x1078, 0x137b, 0x2071, 0x8913, 0x7007, 0x0009, 0x0078, 0x45db, - 0x7084, 0x8008, 0xa092, 0x001e, 0x00c8, 0x45db, 0xae90, 0x0003, - 0xa210, 0x683c, 0x2012, 0x7186, 0x2071, 0x8913, 0x1078, 0x4731, - 0x0078, 0x45db, 0x7084, 0x8008, 0xa092, 0x000f, 0x00c8, 0x45db, - 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210, 0x6840, - 0x2012, 0x7186, 0x2071, 0x8913, 0x1078, 0x4731, 0x0078, 0x45db, - 0x2009, 0x8020, 0x127e, 0x2091, 0x8000, 0x0068, 0x458d, 0x2071, - 0x0000, 0x7018, 0xd084, 0x00c0, 0x458d, 0x7122, 0x683c, 0x7026, - 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, 0x127f, 0x2071, - 0x8913, 0x1078, 0x4731, 0x0078, 0x45db, 0x127f, 0x0078, 0x45db, - 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0040, 0x459e, 0xa186, 0x001e, - 0x0040, 0x459e, 0xa18e, 0x001f, 0x00c0, 0x45ba, 0x684c, 0xd0cc, - 0x0040, 0x45ba, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, - 0x45ba, 0x2009, 0x8021, 0x0078, 0x4572, 0x6844, 0xa086, 0x0100, - 0x00c0, 0x45ba, 0x6868, 0xa005, 0x00c0, 0x45ba, 0x2009, 0x8020, - 0x0078, 0x4572, 0x2071, 0x8913, 0x1078, 0x4745, 0x0040, 0x45db, - 0x2071, 0x8913, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, - 0x0003, 0x00c0, 0x45d2, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, - 0x45d2, 0x710e, 0x7007, 0x0003, 0x1078, 0x4765, 0x7050, 0xa086, - 0x0100, 0x0040, 0x4678, 0x007c, 0x2071, 0x8913, 0x1078, 0x4745, - 0x0040, 0x4605, 0x2071, 0x8a34, 0x7084, 0x700a, 0x20a9, 0x0020, - 0x2099, 0x8a35, 0x20a1, 0x8a5c, 0x53a3, 0x7087, 0x0000, 0x2071, - 0x8913, 0x2069, 0x8a7c, 0x706c, 0x6826, 0x7070, 0x682a, 0x7074, - 0x682e, 0x7078, 0x6832, 0x2d10, 0x1078, 0x137b, 0x7007, 0x0008, - 0x2001, 0xffff, 0x2071, 0x8ab5, 0x7042, 0x127f, 0x0078, 0x45db, - 0x2069, 0x8a7c, 0x6808, 0xa08e, 0x0000, 0x0040, 0x4664, 0xa08e, - 0x0200, 0x0040, 0x4662, 0xa08e, 0x0100, 0x00c0, 0x4664, 0x127e, - 0x2091, 0x8000, 0x0068, 0x465f, 0x2069, 0x0000, 0x6818, 0xd084, - 0x00c0, 0x465f, 0x702c, 0x7130, 0x8108, 0xa102, 0x0048, 0x462f, - 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, 0x0078, 0x4639, 0x706c, - 0xa080, 0x0040, 0x706e, 0x00c8, 0x4639, 0x7070, 0xa081, 0x0000, - 0x7072, 0x7132, 0x6936, 0x2001, 0x8a59, 0x2004, 0xa005, 0x00c0, - 0x4656, 0x6934, 0x2069, 0x8a34, 0x689c, 0x699e, 0x2069, 0x8ab5, - 0xa102, 0x00c0, 0x464f, 0x6844, 0xa005, 0x00d0, 0x465d, 0x2001, - 0x8a5a, 0x200c, 0x810d, 0x6946, 0x0078, 0x465d, 0x2009, 0x8040, - 0x6922, 0x681b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x127f, - 0x0078, 0x4664, 0x7007, 0x0005, 0x007c, 0x701c, 0xa06d, 0x0040, - 0x4676, 0x1078, 0x4745, 0x0040, 0x4676, 0x7007, 0x0003, 0x1078, - 0x4765, 0x7050, 0xa086, 0x0100, 0x0040, 0x4678, 0x007c, 0x007c, - 0x7050, 0xa09e, 0x0100, 0x00c0, 0x4681, 0x7007, 0x0004, 0x0078, - 0x469f, 0xa086, 0x0200, 0x00c0, 0x4687, 0x7007, 0x0005, 0x007c, - 0x2001, 0x8a7e, 0x2004, 0xa08e, 0x0100, 0x00c0, 0x4694, 0x7007, - 0x0001, 0x1078, 0x4731, 0x007c, 0xa08e, 0x0000, 0x0040, 0x4693, - 0xa08e, 0x0200, 0x00c0, 0x4693, 0x7007, 0x0005, 0x007c, 0x1078, - 0x46f9, 0x7006, 0x1078, 0x4731, 0x007c, 0x007c, 0x0e7e, 0x157e, - 0x2071, 0x8a34, 0x7184, 0x81ff, 0x0040, 0x46ce, 0xa006, 0x7086, - 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, - 0x0070, 0x46cb, 0x2014, 0x722a, 0x8000, 0x0070, 0x46cb, 0x2014, - 0x722e, 0x8000, 0x0070, 0x46cb, 0x2014, 0x723a, 0x8000, 0x0070, - 0x46cb, 0x2014, 0x723e, 0xa180, 0x8030, 0x7022, 0x157f, 0x0e7f, - 0x007c, 0x0e7e, 0x157e, 0x2071, 0x8a34, 0x7184, 0x81ff, 0x0040, - 0x46f6, 0xa006, 0x7086, 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, - 0x2014, 0x7226, 0x8000, 0x2014, 0x722a, 0x8000, 0x0070, 0x46ef, - 0x2014, 0x723a, 0x8000, 0x2014, 0x723e, 0x0078, 0x46f3, 0x2001, - 0x8020, 0x0078, 0x46f5, 0xa180, 0x8042, 0x7022, 0x157f, 0x0e7f, - 0x007c, 0x702c, 0x7130, 0x8108, 0xa102, 0x0048, 0x4706, 0xa00e, - 0x7034, 0x706e, 0x7038, 0x7072, 0x0078, 0x4710, 0x706c, 0xa080, - 0x0040, 0x706e, 0x00c8, 0x4710, 0x7070, 0xa081, 0x0000, 0x7072, - 0x7132, 0x700c, 0x8001, 0x700e, 0x00c0, 0x472a, 0x127e, 0x2091, - 0x8000, 0x0068, 0x472d, 0x2001, 0x000d, 0x2102, 0x2091, 0x4080, - 0x2001, 0x0001, 0x127f, 0x007c, 0x2001, 0x000d, 0x2102, 0x2001, - 0x0001, 0x007c, 0x2001, 0x0007, 0x007c, 0x2001, 0x0006, 0x127f, - 0x007c, 0x701c, 0xa06d, 0x0040, 0x4744, 0x127e, 0x2091, 0x8000, - 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005, 0x00c0, 0x4741, - 0x701a, 0x127f, 0x1078, 0x1344, 0x007c, 0x2019, 0x000d, 0x2304, - 0x230c, 0xa10e, 0x0040, 0x4754, 0x2304, 0x230c, 0xa10e, 0x0040, - 0x4754, 0xa006, 0x0078, 0x4764, 0x732c, 0x8319, 0x7130, 0xa102, - 0x00c0, 0x475e, 0x2300, 0xa005, 0x0078, 0x4764, 0x0048, 0x4763, - 0xa302, 0x0078, 0x4764, 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, - 0x000d, 0x7056, 0x7053, 0x0000, 0x127e, 0x2091, 0x8000, 0x2009, - 0x8ac7, 0x2104, 0xc08d, 0x200a, 0x127f, 0x1078, 0x1395, 0x007c, - 0x2071, 0x88e1, 0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, - 0x702b, 0x0001, 0x704f, 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, - 0x7063, 0x0040, 0x7083, 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, - 0x70bf, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x88e1, 0x6848, 0xa005, - 0x00c0, 0x47a1, 0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, - 0x47c6, 0x6a50, 0x7236, 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a, - 0x685c, 0x7042, 0x707e, 0x6848, 0x702e, 0x6840, 0x7032, 0x2009, - 0x000c, 0x200a, 0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, - 0xffc0, 0xa210, 0x2100, 0xa319, 0x7272, 0x7376, 0x7028, 0xc084, - 0x702a, 0x7007, 0x0001, 0x700f, 0x0000, 0xa006, 0x0e7f, 0x007c, - 0x2b78, 0x2071, 0x88e1, 0x7004, 0x1079, 0x4826, 0x700c, 0x0079, - 0x47d1, 0x47d6, 0x47cb, 0x47cb, 0x47cb, 0x47cb, 0x007c, 0x700c, - 0x0079, 0x47da, 0x47df, 0x4824, 0x4824, 0x4825, 0x4825, 0x7830, - 0x7930, 0xa106, 0x0040, 0x47e9, 0x7830, 0x7930, 0xa106, 0x00c0, - 0x480f, 0x7030, 0xa10a, 0x0040, 0x480f, 0x00c8, 0x47f1, 0x712c, - 0xa10a, 0xa18a, 0x0002, 0x00c8, 0x4810, 0x1078, 0x1310, 0x0040, - 0x480f, 0x2d00, 0x705a, 0x7063, 0x0040, 0x2001, 0x0003, 0x7057, - 0x0000, 0x127e, 0x007e, 0x2091, 0x8000, 0x2009, 0x8ac7, 0x2104, - 0xc085, 0x200a, 0x007f, 0x700e, 0x127f, 0x1078, 0x1395, 0x007c, - 0x1078, 0x1310, 0x0040, 0x480f, 0x2d00, 0x705a, 0x1078, 0x1310, - 0x00c0, 0x481c, 0x0078, 0x47fb, 0x2d00, 0x7086, 0x7063, 0x0080, - 0x2001, 0x0004, 0x0078, 0x47ff, 0x007c, 0x007c, 0x4837, 0x4838, - 0x486f, 0x4870, 0x4824, 0x48a6, 0x48ab, 0x48e2, 0x48e3, 0x48fe, - 0x48ff, 0x4900, 0x4901, 0x4902, 0x4903, 0x496c, 0x4996, 0x007c, - 0x700c, 0x0079, 0x483b, 0x4840, 0x4843, 0x4853, 0x486e, 0x486e, - 0x1078, 0x47d7, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, - 0x1078, 0x4c96, 0x0040, 0x4850, 0x2091, 0x8000, 0x1078, 0x47d7, - 0x0d7f, 0x0078, 0x485c, 0x127e, 0x8001, 0x700e, 0x1078, 0x4c96, - 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, - 0x6834, 0xa084, 0x00ff, 0xa08a, 0x0020, 0x00c8, 0x486b, 0x1079, - 0x4886, 0x127f, 0x007c, 0x127f, 0x1078, 0x4904, 0x007c, 0x007c, - 0x007c, 0x0e7e, 0x2071, 0x88e1, 0x700c, 0x0079, 0x4877, 0x487c, - 0x487c, 0x487c, 0x487e, 0x4882, 0x0e7f, 0x007c, 0x700f, 0x0001, - 0x0078, 0x4884, 0x700f, 0x0002, 0x0e7f, 0x007c, 0x4904, 0x4904, - 0x4920, 0x4904, 0x4a0b, 0x4904, 0x4904, 0x4904, 0x4904, 0x4904, - 0x4920, 0x4a55, 0x4aa2, 0x4afb, 0x4b11, 0x4904, 0x4904, 0x493c, - 0x4920, 0x4904, 0x4904, 0x4952, 0x4bac, 0x4bca, 0x4904, 0x493c, - 0x4904, 0x4904, 0x4904, 0x4904, 0x4952, 0x4bca, 0x7020, 0x2068, - 0x1078, 0x1344, 0x007c, 0x700c, 0x0079, 0x48ae, 0x48b3, 0x48b6, - 0x48c6, 0x48e1, 0x48e1, 0x1078, 0x47d7, 0x007c, 0x127e, 0x8001, - 0x700e, 0x7058, 0x007e, 0x1078, 0x4c96, 0x0040, 0x48c3, 0x2091, - 0x8000, 0x1078, 0x47d7, 0x0d7f, 0x0078, 0x48cf, 0x127e, 0x8001, - 0x700e, 0x1078, 0x4c96, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, - 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, - 0x00c8, 0x48de, 0x1079, 0x48e4, 0x127f, 0x007c, 0x127f, 0x1078, - 0x4904, 0x007c, 0x007c, 0x007c, 0x4904, 0x4920, 0x49f5, 0x4904, - 0x4920, 0x4904, 0x4920, 0x4920, 0x4904, 0x4920, 0x49f5, 0x4920, - 0x4920, 0x4920, 0x4920, 0x4920, 0x4904, 0x4920, 0x49f5, 0x4904, - 0x4904, 0x4920, 0x4904, 0x4904, 0x4904, 0x4920, 0x007c, 0x007c, - 0x007c, 0x007c, 0x007c, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, - 0x00ff, 0xc0d5, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x4376, - 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0e5, - 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x4376, 0x127f, 0x007c, - 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a, 0x127e, - 0x2091, 0x8000, 0x1078, 0x4376, 0x127f, 0x007c, 0x7007, 0x0001, - 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x127e, 0x2091, 0x8000, - 0x1078, 0x4376, 0x127f, 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, - 0x0040, 0x4912, 0x8001, 0x00c0, 0x4949, 0x7007, 0x0001, 0x0078, - 0x49d2, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, - 0x49d2, 0x007c, 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, - 0x0024, 0x2098, 0x20a1, 0x890c, 0x53a3, 0x6858, 0x7012, 0xa082, - 0x0401, 0x00c8, 0x492e, 0x6884, 0xa08a, 0x0003, 0x00c8, 0x492e, - 0xa080, 0x49c3, 0x2004, 0x70c6, 0x7010, 0xa015, 0x0040, 0x49b6, - 0x1078, 0x1310, 0x00c0, 0x4977, 0x7007, 0x000f, 0x007c, 0x2d00, - 0x7022, 0x70c4, 0x2060, 0x6000, 0x6836, 0x6004, 0xad00, 0x7096, - 0x6008, 0xa20a, 0x00c8, 0x4986, 0xa00e, 0x2200, 0x7112, 0x620c, - 0x8003, 0x800b, 0xa296, 0x0004, 0x0040, 0x498f, 0xa108, 0x719a, - 0x810b, 0x719e, 0xae90, 0x0022, 0x1078, 0x137b, 0x7090, 0xa08e, - 0x0100, 0x0040, 0x49aa, 0xa086, 0x0200, 0x0040, 0x49a2, 0x7007, - 0x0010, 0x007c, 0x7020, 0x2068, 0x1078, 0x1344, 0x7014, 0x2068, - 0x0078, 0x492e, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000, - 0x2d08, 0x2068, 0x6906, 0x711a, 0x0078, 0x496c, 0x7014, 0x2068, - 0x7007, 0x0001, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, - 0x4be7, 0x0078, 0x49d2, 0x49c6, 0x49ca, 0x49ce, 0x0002, 0x0011, - 0x0007, 0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x0012, 0x000f, - 0x0005, 0x0006, 0x2009, 0x882d, 0x210c, 0x81ff, 0x00c0, 0x49ef, - 0x6838, 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x3d8b, - 0x00c0, 0x49e3, 0x007c, 0x1078, 0x4454, 0x127e, 0x2091, 0x8000, - 0x1078, 0x7a46, 0x1078, 0x4376, 0x127f, 0x0078, 0x49e2, 0x2001, - 0x0028, 0x2009, 0x0000, 0x0078, 0x49e3, 0x7018, 0x6802, 0x2d08, - 0x2068, 0x6906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x4a04, - 0x7007, 0x0006, 0x0078, 0x4a0a, 0x7014, 0x2068, 0x7007, 0x0001, - 0x7048, 0x107a, 0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, - 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, - 0x0040, 0x4a34, 0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, 0x0002, - 0x0040, 0x4a34, 0xa005, 0x00c0, 0x4a47, 0x6944, 0x810f, 0xa18c, - 0x00ff, 0x1078, 0x3f8e, 0x00c0, 0x4a47, 0x067e, 0x6e50, 0x1078, - 0x4057, 0x067f, 0x0078, 0x4a47, 0x047e, 0x2011, 0x880c, 0x2224, - 0xc484, 0xc48c, 0x2412, 0x047f, 0x0c7e, 0x1078, 0x3f8e, 0x00c0, - 0x4a43, 0x1078, 0x41ea, 0x8108, 0x00f0, 0x4a3d, 0x0c7f, 0x684c, - 0xd084, 0x00c0, 0x4a4e, 0x1078, 0x1344, 0x007c, 0x127e, 0x2091, - 0x8000, 0x1078, 0x4376, 0x127f, 0x007c, 0x127e, 0x2091, 0x8000, - 0x7007, 0x0001, 0x2001, 0x8852, 0x2004, 0xd0a4, 0x0040, 0x4a99, - 0x2061, 0x8b24, 0x6100, 0xd184, 0x0040, 0x4a79, 0x6858, 0xa084, - 0x00ff, 0x00c0, 0x4a9c, 0x6000, 0xd084, 0x0040, 0x4a99, 0x6004, - 0xa005, 0x00c0, 0x4a9f, 0x6003, 0x0000, 0x600b, 0x0000, 0x0078, - 0x4a96, 0x2011, 0x0001, 0x6860, 0xa005, 0x00c0, 0x4a81, 0x2001, - 0x001e, 0x8000, 0x6016, 0x6858, 0xa084, 0x00ff, 0x0040, 0x4a99, - 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff, 0x0040, 0x4a99, 0x600a, - 0x6858, 0x8000, 0x00c0, 0x4a95, 0xc28d, 0x6202, 0x127f, 0x0078, - 0x4c85, 0x127f, 0x0078, 0x4c7d, 0x127f, 0x0078, 0x4c75, 0x127f, - 0x0078, 0x4c79, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, - 0x8852, 0x2004, 0xd0a4, 0x0040, 0x4af8, 0x2061, 0x8b24, 0x6000, - 0xd084, 0x0040, 0x4af8, 0x6204, 0x6308, 0xd08c, 0x00c0, 0x4aea, - 0x6c48, 0xa484, 0x0003, 0x0040, 0x4ad0, 0x6958, 0xa18c, 0x00ff, - 0x8001, 0x00c0, 0x4ac9, 0x2100, 0xa210, 0x0048, 0x4af5, 0x0078, - 0x4ad0, 0x8001, 0x00c0, 0x4af5, 0x2100, 0xa212, 0x0048, 0x4af5, - 0xa484, 0x000c, 0x0040, 0x4aea, 0x6958, 0x810f, 0xa18c, 0x00ff, - 0xa082, 0x0004, 0x00c0, 0x4ae2, 0x2100, 0xa318, 0x0048, 0x4af5, - 0x0078, 0x4aea, 0xa082, 0x0004, 0x00c0, 0x4af5, 0x2100, 0xa31a, - 0x0048, 0x4af5, 0x6860, 0xa005, 0x0040, 0x4af0, 0x8000, 0x6016, - 0x6206, 0x630a, 0x127f, 0x0078, 0x4c85, 0x127f, 0x0078, 0x4c81, - 0x127f, 0x0078, 0x4c7d, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, - 0x2061, 0x8b24, 0x6300, 0xd38c, 0x00c0, 0x4b0b, 0x6308, 0x8318, - 0x0048, 0x4b0e, 0x630a, 0x127f, 0x0078, 0x4c93, 0x127f, 0x0078, - 0x4c81, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, - 0xd0ac, 0x0040, 0x4b25, 0x0c7e, 0x2061, 0x8b24, 0x6000, 0xa084, - 0xfcff, 0x6002, 0x0c7f, 0x0078, 0x4b68, 0x6858, 0xa005, 0x0040, - 0x4b7f, 0x685c, 0xa065, 0x0040, 0x4b7b, 0x2001, 0x882d, 0x2004, - 0xa005, 0x0040, 0x4b37, 0x1078, 0x79a8, 0x0078, 0x4b45, 0x6013, - 0x0400, 0x6027, 0x0000, 0x694c, 0xd1a4, 0x0040, 0x4b41, 0x6950, - 0x6126, 0x2009, 0x0041, 0x1078, 0x6939, 0x6958, 0xa18c, 0xff00, - 0xa186, 0x2000, 0x0040, 0x4b60, 0xa186, 0x0400, 0x0040, 0x4b60, - 0xa186, 0x1000, 0x0040, 0x4b56, 0x0078, 0x4b68, 0x0c7e, 0x2061, - 0x8b24, 0x6000, 0xa084, 0xfdff, 0x6002, 0x0c7f, 0x0078, 0x4b68, - 0x027e, 0x2009, 0x0000, 0x2011, 0xfdff, 0x1078, 0x5243, 0x027f, - 0x684c, 0xd0c4, 0x0040, 0x4b77, 0x2061, 0x8b24, 0x6000, 0xd08c, - 0x00c0, 0x4b77, 0x6008, 0x8000, 0x0048, 0x4b7b, 0x600a, 0x0c7f, - 0x127f, 0x0078, 0x4c85, 0x0c7f, 0x127f, 0x0078, 0x4c7d, 0x6954, - 0xa186, 0x002a, 0x00c0, 0x4b8b, 0x2001, 0x880c, 0x200c, 0xc194, - 0x2102, 0x0078, 0x4b68, 0xa186, 0x0020, 0x0040, 0x4ba4, 0xa186, - 0x0029, 0x0040, 0x4b97, 0xa186, 0x002d, 0x00c0, 0x4b7b, 0x6944, - 0xa18c, 0xff00, 0x810f, 0x1078, 0x3f8e, 0x00c0, 0x4b68, 0x6000, - 0xc0e4, 0x6002, 0x0078, 0x4b68, 0x685c, 0xa065, 0x0040, 0x4b7b, - 0x6017, 0x0014, 0x0078, 0x4b68, 0x2061, 0x8b24, 0x6000, 0xd084, - 0x0040, 0x4bc6, 0xd08c, 0x00c0, 0x4c93, 0x2091, 0x8000, 0x6204, - 0x8210, 0x0048, 0x4bc0, 0x6206, 0x2091, 0x8001, 0x0078, 0x4c93, - 0x2091, 0x8001, 0x6853, 0x0016, 0x0078, 0x4c8c, 0x6853, 0x0007, - 0x0078, 0x4c8c, 0x6834, 0x8007, 0xa084, 0x00ff, 0x00c0, 0x4bd4, - 0x1078, 0x4912, 0x0078, 0x4be6, 0x2030, 0x8001, 0x00c0, 0x4bde, - 0x7007, 0x0001, 0x1078, 0x4be7, 0x0078, 0x4be6, 0x7007, 0x0006, - 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x4be7, 0x007c, 0x0e7e, - 0x127e, 0x2091, 0x8000, 0x2009, 0x882d, 0x210c, 0x81ff, 0x00c0, - 0x4c67, 0x2009, 0x880c, 0x210c, 0xd194, 0x00c0, 0x4c71, 0x6848, - 0x2070, 0xae82, 0x8f00, 0x0048, 0x4c57, 0x2001, 0x8815, 0x2004, - 0xae02, 0x00c8, 0x4c57, 0x2061, 0x8b24, 0x6100, 0xa184, 0x0001, - 0x0040, 0x4c3c, 0xa184, 0x0100, 0x00c0, 0x4c5b, 0xa184, 0x0200, - 0x00c0, 0x4c5f, 0x601c, 0xa005, 0x00c0, 0x4c63, 0x711c, 0xa186, - 0x0006, 0x00c0, 0x4c42, 0x7018, 0xa005, 0x0040, 0x4c67, 0x2004, - 0xd0e4, 0x00c0, 0x4c6b, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, - 0x7010, 0xa005, 0x00c0, 0x4c33, 0x7112, 0x2e60, 0x1078, 0x5198, - 0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800, 0xa005, 0x00c0, 0x4c33, - 0x6902, 0x127f, 0x0e7f, 0x007c, 0x127f, 0x0e7f, 0x6853, 0x0006, - 0x0078, 0x4c8c, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x3f8e, - 0x00c0, 0x4c6b, 0x6000, 0xd0e4, 0x00c0, 0x4c6b, 0x711c, 0xa186, - 0x0007, 0x00c0, 0x4c57, 0x6853, 0x0002, 0x0078, 0x4c6d, 0x6853, - 0x0008, 0x0078, 0x4c6d, 0x6853, 0x000e, 0x0078, 0x4c6d, 0x6853, - 0x0017, 0x0078, 0x4c6d, 0x6853, 0x0035, 0x0078, 0x4c6d, 0x6853, - 0x0028, 0x0078, 0x4c6d, 0x6853, 0x0029, 0x127f, 0x0e7f, 0x0078, - 0x4c8c, 0x6853, 0x002a, 0x0078, 0x4c6d, 0x2009, 0x003e, 0x0078, - 0x4c87, 0x2009, 0x0004, 0x0078, 0x4c87, 0x2009, 0x0006, 0x0078, - 0x4c87, 0x2009, 0x0016, 0x0078, 0x4c87, 0x2009, 0x0001, 0x6854, - 0xa084, 0xff00, 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x4376, - 0x2091, 0x8001, 0x007c, 0x1078, 0x1344, 0x007c, 0x702c, 0x7130, - 0x8108, 0xa102, 0x0048, 0x4ca3, 0xa00e, 0x7034, 0x7072, 0x7038, - 0x7076, 0x0078, 0x4caf, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, - 0x4caf, 0x7074, 0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932, - 0x7132, 0x007c, 0x0d7e, 0x1078, 0x518f, 0x0d7f, 0x007c, 0x0d7e, - 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, - 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, - 0x0040, 0x4cce, 0xa086, 0x1000, 0x00c0, 0x4cea, 0x20e1, 0x0004, - 0x3d60, 0xd1bc, 0x00c0, 0x4cd5, 0x3e60, 0xac84, 0x0003, 0x00c0, - 0x4cea, 0xac82, 0x8f00, 0x0048, 0x4cea, 0x6854, 0xac02, 0x00c8, - 0x4cea, 0x2009, 0x0047, 0x1078, 0x6939, 0x7a1c, 0xd284, 0x00c0, - 0x4cc0, 0x007c, 0xa016, 0x1078, 0x1594, 0x0078, 0x4ce5, 0x157e, - 0x137e, 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0070, - 0x00c0, 0x4d31, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x4d20, - 0xa584, 0x0007, 0xd094, 0x00c0, 0x4d31, 0xd09c, 0x00c0, 0x4d31, - 0x1078, 0x4d4a, 0x0040, 0x4d31, 0x20e1, 0x3000, 0x7828, 0x7828, - 0x1078, 0x4d68, 0x147f, 0x137f, 0x157f, 0x2009, 0x8aaa, 0x2104, - 0xa005, 0x00c0, 0x4d1c, 0x007c, 0x1078, 0x5888, 0x0078, 0x4d1b, - 0xa484, 0x7000, 0x00c0, 0x4d31, 0x1078, 0x4d4a, 0x0040, 0x4d41, - 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, 0x0040, 0x4d0c, 0x0078, - 0x4d41, 0x1078, 0x872e, 0xd5a4, 0x0040, 0x4d3f, 0x1078, 0x19e5, - 0x20e1, 0x9010, 0x2001, 0x0138, 0x2202, 0x0078, 0x4d45, 0x1078, - 0x4d4a, 0x20e1, 0x3000, 0x7828, 0x7828, 0x147f, 0x137f, 0x157f, - 0x0078, 0x4d1b, 0xa484, 0x01ff, 0x687e, 0xa005, 0x0040, 0x4d5c, - 0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0, - 0x2099, 0x020a, 0x53a5, 0x007c, 0x20a9, 0x000c, 0x20e1, 0x1000, - 0x2ea0, 0x2099, 0x020a, 0x53a5, 0xa085, 0x0001, 0x0078, 0x4d5b, - 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000, 0x8007, 0xa196, 0x0000, - 0x00c0, 0x4d75, 0x0078, 0x4eef, 0x007c, 0xa196, 0x2000, 0x00c0, - 0x4d86, 0x6900, 0xa18e, 0x0001, 0x00c0, 0x4d82, 0x1078, 0x3541, - 0x0078, 0x4d74, 0x1078, 0x4d8e, 0x0078, 0x4d74, 0xa196, 0x8000, - 0x00c0, 0x4d74, 0x1078, 0x4f7b, 0x0078, 0x4d74, 0x0c7e, 0x7110, - 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001, 0x0040, 0x4d9b, 0xa196, - 0x0023, 0x00c0, 0x4e90, 0xa08e, 0x0023, 0x00c0, 0x4dcc, 0x1078, - 0x4fee, 0x0040, 0x4e90, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200, - 0x00c0, 0x4db4, 0x7034, 0xa005, 0x00c0, 0x4e90, 0x2009, 0x0015, - 0x1078, 0x6939, 0x0078, 0x4e90, 0xa08e, 0x0210, 0x00c0, 0x4dbe, - 0x2009, 0x0015, 0x1078, 0x6939, 0x0078, 0x4e90, 0xa08e, 0x0100, - 0x00c0, 0x4e90, 0x7034, 0xa005, 0x00c0, 0x4e90, 0x2009, 0x0016, - 0x1078, 0x6939, 0x0078, 0x4e90, 0xa08e, 0x0022, 0x00c0, 0x4e90, - 0x7030, 0xa08e, 0x0300, 0x00c0, 0x4ddd, 0x7034, 0xa005, 0x00c0, - 0x4e90, 0x2009, 0x0017, 0x0078, 0x4e5c, 0xa08e, 0x0500, 0x00c0, - 0x4de9, 0x7034, 0xa005, 0x00c0, 0x4e90, 0x2009, 0x0018, 0x0078, - 0x4e5c, 0xa08e, 0x2010, 0x00c0, 0x4df1, 0x2009, 0x0019, 0x0078, - 0x4e5c, 0xa08e, 0x2110, 0x00c0, 0x4df9, 0x2009, 0x001a, 0x0078, - 0x4e5c, 0xa08e, 0x5200, 0x00c0, 0x4e05, 0x7034, 0xa005, 0x00c0, - 0x4e90, 0x2009, 0x001b, 0x0078, 0x4e5c, 0xa08e, 0x5000, 0x00c0, - 0x4e11, 0x7034, 0xa005, 0x00c0, 0x4e90, 0x2009, 0x001c, 0x0078, - 0x4e5c, 0xa08e, 0x1200, 0x00c0, 0x4e1d, 0x7034, 0xa005, 0x00c0, - 0x4e90, 0x2009, 0x0024, 0x0078, 0x4e5c, 0xa08c, 0xff00, 0xa18e, - 0x2400, 0x00c0, 0x4e27, 0x2009, 0x002d, 0x0078, 0x4e5c, 0xa08c, - 0xff00, 0xa18e, 0x5300, 0x00c0, 0x4e31, 0x2009, 0x002a, 0x0078, - 0x4e5c, 0xa08e, 0x0f00, 0x00c0, 0x4e39, 0x2009, 0x0020, 0x0078, - 0x4e5c, 0xa08e, 0x5300, 0x00c0, 0x4e3f, 0x0078, 0x4e5a, 0xa08e, - 0x6104, 0x00c0, 0x4e5a, 0x2011, 0x8d8d, 0x8208, 0x2204, 0xa082, - 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108, - 0x2124, 0x1078, 0x317a, 0x8108, 0x00f0, 0x4e4c, 0x2009, 0x0023, - 0x0078, 0x4e5c, 0x2009, 0x001d, 0x017e, 0x2011, 0x8d83, 0x2204, - 0x8211, 0x220c, 0x1078, 0x2245, 0x00c0, 0x4e92, 0x1078, 0x3f53, - 0x00c0, 0x4e92, 0x6612, 0x6516, 0x86ff, 0x0040, 0x4e82, 0x017f, - 0x017e, 0xa186, 0x0017, 0x00c0, 0x4e82, 0x6868, 0xa606, 0x00c0, - 0x4e82, 0x686c, 0xa506, 0xa084, 0xff00, 0x00c0, 0x4e82, 0x6000, - 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x68a8, 0x0040, 0x4e95, 0x017f, - 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x6939, - 0x0c7f, 0x007c, 0x017f, 0x0078, 0x4e90, 0x0c7f, 0x0078, 0x4e92, - 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696, 0x00ff, 0x00c0, 0x4eb8, - 0xa596, 0xfffd, 0x00c0, 0x4ea8, 0x2009, 0x007f, 0x0078, 0x4eeb, - 0xa596, 0xfffe, 0x00c0, 0x4eb0, 0x2009, 0x007e, 0x0078, 0x4eeb, - 0xa596, 0xfffc, 0x00c0, 0x4eb8, 0x2009, 0x0080, 0x0078, 0x4eeb, - 0x2011, 0x0000, 0x2021, 0x0081, 0x20a9, 0x007e, 0x2071, 0x89b5, - 0x2e1c, 0x83ff, 0x00c0, 0x4eca, 0x82ff, 0x00c0, 0x4edf, 0x2410, - 0x0078, 0x4edf, 0x2368, 0x6f10, 0x007e, 0x2100, 0xa706, 0x007f, - 0x6b14, 0x00c0, 0x4ed9, 0xa346, 0x00c0, 0x4ed9, 0x2408, 0x0078, - 0x4eeb, 0x87ff, 0x00c0, 0x4edf, 0x83ff, 0x0040, 0x4ec4, 0x8420, - 0x8e70, 0x00f0, 0x4ec0, 0x82ff, 0x00c0, 0x4eea, 0xa085, 0x0001, - 0x0078, 0x4eec, 0x2208, 0xa006, 0x0d7f, 0x0e7f, 0x007c, 0xa084, - 0x0007, 0x0079, 0x4ef4, 0x007c, 0x4efc, 0x4efc, 0x4efc, 0x4efc, - 0x4efc, 0x4efd, 0x4f16, 0x4f64, 0x007c, 0x7110, 0xd1bc, 0x0040, - 0x4f15, 0x7120, 0x2160, 0xac8c, 0x0003, 0x00c0, 0x4f15, 0xac8a, - 0x8f00, 0x0048, 0x4f15, 0x6854, 0xac02, 0x00c8, 0x4f15, 0x7124, - 0x610a, 0x2009, 0x0046, 0x1078, 0x6939, 0x007c, 0x0c7e, 0x7110, - 0xd1bc, 0x00c0, 0x4f62, 0x2011, 0x8d83, 0x2204, 0x8211, 0x220c, - 0x1078, 0x2245, 0x00c0, 0x4f62, 0x1078, 0x3f8e, 0x00c0, 0x4f62, - 0x6000, 0xd0ec, 0x00c0, 0x4f62, 0x6204, 0xa294, 0xff00, 0x8217, - 0xa286, 0x0006, 0x00c0, 0x4f47, 0x0c7e, 0x1078, 0x68a8, 0x017f, - 0x0040, 0x4f62, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130, - 0x6122, 0x2009, 0x0044, 0x1078, 0x6939, 0x0078, 0x4f62, 0x0c7e, - 0x1078, 0x68a8, 0x017f, 0x0040, 0x4f62, 0x611a, 0x601f, 0x0004, - 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x4f5a, 0x6007, 0x0005, - 0x0078, 0x4f5c, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x53e6, - 0x1078, 0x5888, 0x0c7f, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4f7a, - 0x7020, 0x2060, 0xac84, 0x0003, 0x00c0, 0x4f7a, 0xac82, 0x8f00, - 0x0048, 0x4f7a, 0x6854, 0xac02, 0x00c8, 0x4f7a, 0x2009, 0x0045, - 0x1078, 0x6939, 0x007c, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, - 0x0000, 0x00c0, 0x4f8b, 0xa084, 0x000f, 0xa08a, 0x0006, 0x10c8, - 0x12d2, 0x1079, 0x4f8c, 0x007c, 0x4f92, 0x4f93, 0x4f92, 0x4f92, - 0x4fd0, 0x4fdf, 0x007c, 0x7110, 0xd1bc, 0x00c0, 0x4fcf, 0x700c, - 0x7108, 0x1078, 0x2245, 0x00c0, 0x4fcf, 0x1078, 0x3f53, 0x00c0, - 0x4fcf, 0x6612, 0x6516, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, - 0x0004, 0x0040, 0x4faf, 0xa286, 0x0006, 0x00c0, 0x4fc0, 0x0c7e, - 0x1078, 0x68a8, 0x017f, 0x0040, 0x4fcf, 0x611a, 0x601f, 0x0005, - 0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x6939, 0x0078, 0x4fcf, - 0x0c7e, 0x1078, 0x68a8, 0x017f, 0x0040, 0x4fcf, 0x611a, 0x601f, - 0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x1078, 0x6939, 0x007c, - 0x7110, 0xd1bc, 0x0040, 0x4fde, 0x1078, 0x4fee, 0x0040, 0x4fde, - 0x7124, 0x610a, 0x2009, 0x0089, 0x1078, 0x6939, 0x007c, 0x7110, - 0xd1bc, 0x0040, 0x4fed, 0x1078, 0x4fee, 0x0040, 0x4fed, 0x7124, - 0x610a, 0x2009, 0x008a, 0x1078, 0x6939, 0x007c, 0x7020, 0x2060, - 0xac84, 0x0003, 0x00c0, 0x5001, 0xac82, 0x8f00, 0x0048, 0x5001, - 0x2001, 0x8815, 0x2004, 0xac02, 0x00c8, 0x5001, 0xa085, 0x0001, - 0x007c, 0xa006, 0x0078, 0x5000, 0x2071, 0x8ab5, 0x7003, 0x0003, - 0x700f, 0x0361, 0xa006, 0x701a, 0x7012, 0x7017, 0x8f00, 0x7007, - 0x0000, 0x7026, 0x702b, 0x623f, 0x7032, 0x7037, 0x6280, 0x703b, - 0x0002, 0x703f, 0x0000, 0x7043, 0xffff, 0x7047, 0xffff, 0x007c, - 0x2071, 0x8ab5, 0x00e0, 0x50df, 0x2091, 0x6000, 0x700c, 0x8001, - 0x700e, 0x00c0, 0x5098, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, - 0x2091, 0x8000, 0x7138, 0x8109, 0x713a, 0x00c0, 0x5096, 0x703b, - 0x0002, 0x2009, 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x5096, - 0x703c, 0xa086, 0x0001, 0x00c0, 0x5073, 0x0d7e, 0x2069, 0x0140, - 0x6804, 0xa084, 0x4000, 0x0040, 0x5051, 0x6803, 0x1000, 0x0078, - 0x5058, 0x6804, 0xa084, 0x1000, 0x0040, 0x5058, 0x6803, 0x0100, - 0x6803, 0x0000, 0x703f, 0x0000, 0x2069, 0x8aa2, 0x6804, 0xa082, - 0x0006, 0x00c0, 0x5065, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, - 0x00c0, 0x506c, 0x6833, 0x0000, 0x1078, 0x5888, 0x1078, 0x5948, - 0x0d7f, 0x0078, 0x5096, 0x0d7e, 0x2069, 0x8800, 0x6944, 0x6860, - 0xa102, 0x00c8, 0x5095, 0x2069, 0x8aa2, 0x6804, 0xa086, 0x0000, - 0x00c0, 0x5095, 0x6830, 0xa086, 0x0000, 0x00c0, 0x5095, 0x703f, - 0x0001, 0x6807, 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, - 0x689e, 0x2069, 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x509b, - 0x127e, 0x2091, 0x8000, 0x7024, 0xa00d, 0x0040, 0x50ac, 0x7020, - 0x8001, 0x7022, 0x00c0, 0x50ac, 0x7023, 0x0009, 0x8109, 0x7126, - 0x00c0, 0x50ac, 0x7028, 0x107a, 0x7030, 0xa00d, 0x0040, 0x50bd, - 0x702c, 0x8001, 0x702e, 0x00c0, 0x50bd, 0x702f, 0x0009, 0x8109, - 0x7132, 0x00c0, 0x50bd, 0x7034, 0x107a, 0x7040, 0xa005, 0x0040, - 0x50c5, 0x0050, 0x50c5, 0x8001, 0x7042, 0x7044, 0xa005, 0x0040, - 0x50cd, 0x0050, 0x50cd, 0x8001, 0x7046, 0x7018, 0xa00d, 0x0040, - 0x50de, 0x7008, 0x8001, 0x700a, 0x00c0, 0x50de, 0x700b, 0x0009, - 0x8109, 0x711a, 0x00c0, 0x50de, 0x701c, 0x107a, 0x127f, 0x7004, - 0x0079, 0x50e2, 0x5109, 0x510a, 0x5126, 0x0e7e, 0x2071, 0x8ab5, - 0x7018, 0xa005, 0x00c0, 0x50f0, 0x711a, 0x721e, 0x700b, 0x0009, - 0x0e7f, 0x007c, 0x0e7e, 0x007e, 0x2071, 0x8ab5, 0x701c, 0xa206, - 0x00c0, 0x50fc, 0x701a, 0x701e, 0x007f, 0x0e7f, 0x007c, 0x0e7e, - 0x2071, 0x8ab5, 0x6088, 0xa102, 0x0048, 0x5107, 0x618a, 0x0e7f, - 0x007c, 0x007c, 0x7110, 0x1078, 0x3f8e, 0x00c0, 0x511c, 0x6088, - 0x8001, 0x0048, 0x511c, 0x608a, 0x00c0, 0x511c, 0x127e, 0x2091, - 0x8000, 0x1078, 0x5888, 0x127f, 0x8108, 0xa182, 0x00ff, 0x0048, - 0x5124, 0xa00e, 0x7007, 0x0002, 0x7112, 0x007c, 0x7014, 0x2060, - 0x127e, 0x2091, 0x8000, 0x6014, 0xa005, 0x0040, 0x5155, 0x8001, - 0x6016, 0x00c0, 0x5155, 0x611c, 0xa186, 0x0003, 0x0040, 0x513c, - 0xa186, 0x0006, 0x00c0, 0x5153, 0x6010, 0x2068, 0x6854, 0xa08a, - 0x199a, 0x0048, 0x5153, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, - 0x0048, 0x514c, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, - 0x6116, 0x0078, 0x5155, 0x1078, 0x7632, 0x127f, 0xac88, 0x000c, - 0x7116, 0x2001, 0x8816, 0x2004, 0xa102, 0x0048, 0x5163, 0x7017, - 0x8f00, 0x7007, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x8ab5, 0x7027, - 0x07d0, 0x7023, 0x0009, 0x703b, 0x0002, 0x0e7f, 0x007c, 0x2001, - 0x8abe, 0x2003, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x8ab5, 0x7132, - 0x702f, 0x0009, 0x0e7f, 0x007c, 0x2011, 0x8ac1, 0x2013, 0x0000, - 0x007c, 0x0e7e, 0x2071, 0x8ab5, 0x711a, 0x721e, 0x700b, 0x0009, - 0x0e7f, 0x007c, 0x0c7e, 0x2061, 0x8b24, 0x0c7f, 0x007c, 0xa184, - 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x8b24, 0x2060, 0x007c, - 0x6854, 0xa08a, 0x199a, 0x0048, 0x519f, 0x2001, 0x1999, 0xa005, - 0x00c0, 0x51ae, 0x0c7e, 0x2061, 0x8b24, 0x6014, 0x0c7f, 0xa005, - 0x00c0, 0x51b3, 0x2001, 0x001e, 0x0078, 0x51b3, 0xa08e, 0xffff, - 0x00c0, 0x51b3, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, - 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x51fc, 0xd0b4, - 0x00c0, 0x51ca, 0xd0bc, 0x00c0, 0x51ec, 0x2009, 0x0006, 0x1078, - 0x521b, 0x007c, 0xd0fc, 0x0040, 0x51d5, 0xa084, 0x0003, 0x0040, - 0x51d5, 0xa086, 0x0003, 0x00c0, 0x5214, 0x2009, 0x8873, 0x2104, - 0xd084, 0x0040, 0x51e7, 0x6118, 0xa188, 0x0027, 0x2104, 0xd08c, - 0x00c0, 0x51e7, 0x2009, 0x0042, 0x1078, 0x6939, 0x007c, 0x2009, - 0x0043, 0x1078, 0x6939, 0x007c, 0xd0fc, 0x0040, 0x51f7, 0xa084, - 0x0003, 0x0040, 0x51f7, 0xa086, 0x0003, 0x00c0, 0x5214, 0x2009, - 0x0042, 0x1078, 0x6939, 0x007c, 0xd0fc, 0x0040, 0x520a, 0xa084, - 0x0003, 0xa08e, 0x0002, 0x0040, 0x520e, 0x2009, 0x0041, 0x1078, - 0x6939, 0x007c, 0x1078, 0x5219, 0x0078, 0x5209, 0x2009, 0x0043, - 0x1078, 0x6939, 0x0078, 0x5209, 0x2009, 0x0004, 0x1078, 0x521b, - 0x007c, 0x2009, 0x0001, 0x6010, 0xa0ec, 0xf000, 0x0040, 0x5242, - 0x2068, 0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0, 0x523c, - 0x694c, 0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x523c, 0x0c7e, - 0x2061, 0x8b24, 0x6200, 0xd28c, 0x00c0, 0x523b, 0x6204, 0x8210, - 0x0048, 0x523b, 0x6206, 0x0c7f, 0x1078, 0x4376, 0x6010, 0xa06d, - 0x10c0, 0x5198, 0x007c, 0x157e, 0x0c7e, 0x2061, 0x8b24, 0x6000, - 0x81ff, 0x0040, 0x524e, 0xa205, 0x0078, 0x524f, 0xa204, 0x6002, - 0x0c7f, 0x157f, 0x007c, 0x6800, 0xd08c, 0x00c0, 0x525f, 0x6808, - 0xa005, 0x0040, 0x525f, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, - 0x127e, 0x2091, 0x2200, 0x2079, 0x8aa2, 0x127f, 0x0d7e, 0x2069, - 0x8aa2, 0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001, - 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027, 0x0001, 0x7804, 0xa084, - 0x0007, 0x0079, 0x527b, 0x5285, 0x52aa, 0x5305, 0x528b, 0x52aa, - 0x5285, 0x5283, 0x5283, 0x1078, 0x12d2, 0x1078, 0x516f, 0x1078, - 0x5888, 0x0c7f, 0x007c, 0x62c0, 0x82ff, 0x00c0, 0x5291, 0x0c7f, - 0x007c, 0x2011, 0x3c35, 0x1078, 0x50f2, 0x7828, 0xa092, 0x0002, - 0x00c8, 0x52a0, 0x8000, 0x782a, 0x1078, 0x3c6a, 0x0078, 0x528f, - 0x1078, 0x3c35, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, - 0x0078, 0x528f, 0x1078, 0x516f, 0x3c00, 0x007e, 0x2011, 0x0209, - 0x20e1, 0x4000, 0x2214, 0x007f, 0x20e0, 0x82ff, 0x0040, 0x52c8, - 0x62c0, 0x82ff, 0x00c0, 0x52c8, 0x782b, 0x0000, 0x7824, 0xa065, - 0x1040, 0x12d2, 0x2009, 0x0013, 0x1078, 0x6939, 0x0c7f, 0x007c, - 0x3900, 0xa082, 0x8bc4, 0x00c8, 0x52cf, 0x1078, 0x683b, 0x0c7e, - 0x7824, 0xa065, 0x1040, 0x12d2, 0x7804, 0xa086, 0x0004, 0x0040, - 0x534a, 0x7828, 0xa092, 0x2710, 0x00c8, 0x52e5, 0x8000, 0x782a, - 0x0c7f, 0x1078, 0x6224, 0x0078, 0x52c6, 0x6104, 0xa186, 0x0003, - 0x00c0, 0x52fc, 0x0e7e, 0x2071, 0x8800, 0x70cc, 0x0e7f, 0xd08c, - 0x0040, 0x52fc, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x8800, - 0x1078, 0x3c73, 0x0e7f, 0x0c7f, 0x1078, 0x8781, 0x2009, 0x0014, - 0x1078, 0x6939, 0x0c7f, 0x0078, 0x52c6, 0x2001, 0x8abe, 0x2003, - 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x5319, 0x782b, 0x0000, 0x7824, - 0xa065, 0x1040, 0x12d2, 0x2009, 0x0013, 0x1078, 0x6990, 0x0c7f, - 0x007c, 0x0c7e, 0x0d7e, 0x3900, 0xa082, 0x8bc4, 0x00c8, 0x5322, - 0x1078, 0x683b, 0x7824, 0xa005, 0x1040, 0x12d2, 0x781c, 0xa06d, - 0x1040, 0x12d2, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x1078, - 0x690e, 0x693c, 0x81ff, 0x1040, 0x12d2, 0x8109, 0x693e, 0x6854, - 0xa015, 0x0040, 0x533e, 0x7a1e, 0x0078, 0x5340, 0x7918, 0x791e, - 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f, 0x0c7f, 0x1078, 0x5888, - 0x0078, 0x5317, 0x6104, 0xa186, 0x0002, 0x0040, 0x5355, 0xa186, - 0x0004, 0x0040, 0x5355, 0x0078, 0x52d9, 0x7808, 0xac06, 0x0040, - 0x52d9, 0x1078, 0x578f, 0x1078, 0x53e6, 0x0c7f, 0x1078, 0x5888, - 0x0078, 0x52c6, 0x0c7e, 0x6027, 0x0002, 0x62c8, 0x82ff, 0x00c0, - 0x537c, 0x62c4, 0x82ff, 0x00c0, 0x537c, 0x793c, 0xa1e5, 0x0000, - 0x0040, 0x5376, 0x2009, 0x0049, 0x1078, 0x6939, 0x2011, 0x8ac1, - 0x2013, 0x0000, 0x0c7f, 0x007c, 0x3908, 0xa192, 0x8bc4, 0x00c8, - 0x5383, 0x1078, 0x683b, 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, - 0x5376, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0, - 0x5395, 0x6017, 0x0012, 0x0078, 0x537a, 0x6017, 0x0016, 0x0078, - 0x537a, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, - 0x0000, 0x2c08, 0x2061, 0x8aa2, 0x6020, 0x8000, 0x6022, 0x6010, - 0xa005, 0x0040, 0x53b4, 0xa080, 0x0003, 0x2102, 0x6112, 0x127f, - 0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078, 0x53af, - 0x0d7e, 0x2069, 0x8aa2, 0x6000, 0xd0d4, 0x0040, 0x53cd, 0x6820, - 0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x53c8, 0x2c00, 0x681e, - 0x6804, 0xa084, 0x0007, 0x0079, 0x5890, 0xc0d5, 0x6002, 0x6818, - 0xa005, 0x0040, 0x53df, 0x6056, 0x605b, 0x0000, 0x007e, 0x2c00, - 0x681a, 0x0d7f, 0x685a, 0x2069, 0x8aa2, 0x0078, 0x53bf, 0x6056, - 0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x53bf, 0x007e, 0x017e, - 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, - 0x8aa2, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040, 0x5401, - 0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f, 0x007f, - 0x007c, 0x610e, 0x610a, 0x0078, 0x53fc, 0x0c7e, 0x600f, 0x0000, - 0x2c08, 0x2061, 0x8aa2, 0x6034, 0xa005, 0x0040, 0x5415, 0xa080, - 0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136, 0x0078, - 0x5413, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x017e, - 0x007e, 0x127e, 0x2071, 0x8aa2, 0x7638, 0x2660, 0x2678, 0x2091, - 0x8000, 0x8cff, 0x0040, 0x548c, 0x6018, 0xa080, 0x0028, 0x2004, - 0xa206, 0x00c0, 0x5487, 0x88ff, 0x0040, 0x543a, 0x6020, 0xa106, - 0x00c0, 0x5487, 0x703c, 0xac06, 0x00c0, 0x544c, 0x037e, 0x2019, - 0x0001, 0x1078, 0x642d, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, - 0x0000, 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x5452, - 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5460, 0x2c00, 0xaf36, - 0x0040, 0x545e, 0x2f00, 0x7036, 0x0078, 0x5460, 0x7037, 0x0000, - 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5469, 0x7e0e, 0x0078, - 0x546a, 0x2678, 0x600f, 0x0000, 0x1078, 0x77ed, 0x0040, 0x5482, - 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x5496, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x7a46, 0x1078, 0x4376, - 0x1078, 0x799b, 0x1078, 0x79a8, 0x0c7f, 0x0078, 0x5429, 0x2c78, - 0x600c, 0x2060, 0x0078, 0x5429, 0x127f, 0x007f, 0x017f, 0x027f, - 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, - 0x0006, 0x00c0, 0x5477, 0x1078, 0x86aa, 0x0078, 0x5482, 0x007e, - 0x067e, 0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, - 0x8000, 0x2079, 0x8aa2, 0x7838, 0xa065, 0x0040, 0x54de, 0x600c, - 0x007e, 0x600f, 0x0000, 0x783c, 0xac06, 0x00c0, 0x54c5, 0x037e, - 0x2019, 0x0001, 0x1078, 0x642d, 0x7833, 0x0000, 0x783f, 0x0000, - 0x7843, 0x0000, 0x7847, 0x0000, 0x037f, 0x1078, 0x77ed, 0x0040, - 0x54d9, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x54e7, - 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4376, 0x1078, - 0x799b, 0x1078, 0x79a8, 0x007f, 0x0078, 0x54ac, 0x7e3a, 0x7e36, - 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, - 0xa086, 0x0006, 0x00c0, 0x54d0, 0x1078, 0x86aa, 0x0078, 0x54d9, - 0x017e, 0x027e, 0x087e, 0x2041, 0x0000, 0x1078, 0x550a, 0x1078, - 0x55ae, 0x087f, 0x027f, 0x017f, 0x007c, 0x0f7e, 0x127e, 0x2079, - 0x8aa2, 0x2091, 0x8000, 0x1078, 0x5647, 0x1078, 0x56b1, 0x127f, - 0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x017e, - 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x8aa2, 0x7614, 0x2660, - 0x2678, 0x8cff, 0x0040, 0x559c, 0x6018, 0xa080, 0x0028, 0x2004, - 0xa206, 0x00c0, 0x5597, 0x88ff, 0x0040, 0x552a, 0x6020, 0xa106, - 0x00c0, 0x5597, 0x7024, 0xac06, 0x00c0, 0x555a, 0x2069, 0x0100, - 0x68c0, 0xa005, 0x0040, 0x5555, 0x1078, 0x516f, 0x1078, 0x6232, - 0x68c3, 0x0000, 0x1078, 0x6741, 0x7027, 0x0000, 0x037e, 0x2069, - 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x554a, 0x6803, 0x0100, - 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5552, - 0x6827, 0x0001, 0x037f, 0x0078, 0x555a, 0x6003, 0x0009, 0x630a, - 0x0078, 0x5597, 0x7014, 0xac36, 0x00c0, 0x5560, 0x660c, 0x7616, - 0x7010, 0xac36, 0x00c0, 0x556e, 0x2c00, 0xaf36, 0x0040, 0x556c, - 0x2f00, 0x7012, 0x0078, 0x556e, 0x7013, 0x0000, 0x660c, 0x067e, - 0x2c00, 0xaf06, 0x0040, 0x5577, 0x7e0e, 0x0078, 0x5578, 0x2678, - 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x77ed, 0x0040, 0x5590, - 0x601c, 0xa086, 0x0003, 0x00c0, 0x55a5, 0x6837, 0x0103, 0x6b4a, - 0x6847, 0x0000, 0x1078, 0x7a46, 0x1078, 0x4376, 0x1078, 0x799b, - 0x1078, 0x79a8, 0x1078, 0x6601, 0x0c7f, 0x0078, 0x5519, 0x2c78, - 0x600c, 0x2060, 0x0078, 0x5519, 0x127f, 0x007f, 0x017f, 0x067f, - 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, - 0x00c0, 0x5585, 0x1078, 0x86aa, 0x0078, 0x5590, 0x0c7e, 0x007e, - 0x127e, 0x2091, 0x8000, 0xa280, 0x8934, 0x2004, 0xa065, 0x0040, - 0x5643, 0x0f7e, 0x0e7e, 0x0d7e, 0x067e, 0x2071, 0x8aa2, 0x6654, - 0x7018, 0xac06, 0x00c0, 0x55c5, 0x761a, 0x701c, 0xac06, 0x00c0, - 0x55d1, 0x86ff, 0x00c0, 0x55d0, 0x7018, 0x701e, 0x0078, 0x55d1, - 0x761e, 0x6058, 0xa07d, 0x0040, 0x55d6, 0x7e56, 0xa6ed, 0x0000, - 0x0040, 0x55dc, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b, 0x0000, - 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x3ed6, 0x0040, 0x563f, - 0x7624, 0x86ff, 0x0040, 0x562f, 0xa680, 0x0004, 0x2004, 0xad06, - 0x00c0, 0x562f, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, - 0x5626, 0x1078, 0x516f, 0x1078, 0x6232, 0x68c3, 0x0000, 0x1078, - 0x6741, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, - 0x1000, 0x0040, 0x560f, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0040, 0x5617, 0x6827, 0x0001, 0x037f, - 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x5620, 0x8001, 0x603e, - 0x2660, 0x1078, 0x79a8, 0x0c7f, 0x0078, 0x562f, 0x0d7f, 0x0c7e, - 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, 0x55e4, 0x8dff, - 0x0040, 0x563b, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, - 0x7a46, 0x1078, 0x4376, 0x1078, 0x6601, 0x0078, 0x55e4, 0x067f, - 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, - 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, - 0x56a1, 0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, - 0x5686, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x5680, 0x1078, - 0x516f, 0x1078, 0x6232, 0x68c3, 0x0000, 0x1078, 0x6741, 0x7827, - 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, - 0x5675, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, - 0xd084, 0x0040, 0x567d, 0x6827, 0x0001, 0x037f, 0x0078, 0x5686, - 0x6003, 0x0009, 0x630a, 0x2c30, 0x0078, 0x569e, 0x6010, 0x2068, - 0x1078, 0x77ed, 0x0040, 0x569a, 0x601c, 0xa086, 0x0003, 0x00c0, - 0x56a8, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4376, - 0x1078, 0x799b, 0x1078, 0x79a8, 0x1078, 0x6601, 0x007f, 0x0078, - 0x564e, 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, - 0x601c, 0xa086, 0x0006, 0x00c0, 0x5691, 0x1078, 0x86aa, 0x0078, - 0x569a, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x7818, 0xa065, 0x0040, - 0x571f, 0x6054, 0x007e, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, - 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x3ed6, 0x0040, 0x571c, 0x7e24, - 0x86ff, 0x0040, 0x570e, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, - 0x570e, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x5705, - 0x1078, 0x516f, 0x1078, 0x6232, 0x68c3, 0x0000, 0x1078, 0x6741, - 0x7827, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, - 0x0040, 0x56ee, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, - 0x6824, 0xd084, 0x0040, 0x56f6, 0x6827, 0x0001, 0x037f, 0x0d7f, - 0x0c7e, 0x603c, 0xa005, 0x0040, 0x56ff, 0x8001, 0x603e, 0x2660, - 0x1078, 0x79a8, 0x0c7f, 0x0078, 0x570e, 0x0d7f, 0x0c7e, 0x2660, - 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, 0x56c3, 0x8dff, 0x0040, - 0x5718, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4376, - 0x1078, 0x6601, 0x0078, 0x56c3, 0x007f, 0x0078, 0x56b6, 0x781e, - 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x0e7e, 0x0d7e, - 0x067e, 0x6000, 0xd0dc, 0x0040, 0x5743, 0x604c, 0xa06d, 0x0040, - 0x5743, 0x6848, 0xa606, 0x00c0, 0x5743, 0x2071, 0x8aa2, 0x7024, - 0xa035, 0x0040, 0x5743, 0xa080, 0x0004, 0x2004, 0xad06, 0x00c0, - 0x5743, 0x1078, 0x5747, 0x067f, 0x0d7f, 0x0e7f, 0x007c, 0x0f7e, - 0x2079, 0x0100, 0x78c0, 0xa005, 0x00c0, 0x5756, 0x0c7e, 0x2660, - 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, 0x578d, 0x1078, 0x6232, - 0x78c3, 0x0000, 0x1078, 0x6741, 0x7027, 0x0000, 0x037e, 0x2079, - 0x0140, 0x7b04, 0xa384, 0x1000, 0x0040, 0x576a, 0x7803, 0x0100, - 0x7803, 0x0000, 0x2079, 0x0100, 0x7824, 0xd084, 0x0040, 0x5772, - 0x7827, 0x0001, 0x1078, 0x6741, 0x037f, 0x1078, 0x3ed6, 0x0c7e, - 0x603c, 0xa005, 0x0040, 0x577e, 0x8001, 0x603e, 0x2660, 0x1078, - 0x690e, 0x0c7f, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, - 0x7a46, 0x1078, 0x4376, 0x1078, 0x6601, 0x0f7f, 0x007c, 0x0e7e, - 0x0c7e, 0x2071, 0x8aa2, 0x7004, 0xa084, 0x0007, 0x0079, 0x5798, - 0x57a2, 0x57a5, 0x57be, 0x57da, 0x581f, 0x57a2, 0x57a2, 0x57a0, - 0x1078, 0x12d2, 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, - 0x57b3, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x57ba, - 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, - 0x0e7f, 0x007c, 0x7216, 0x7212, 0x0078, 0x57b3, 0x6018, 0x2060, - 0x1078, 0x3ed6, 0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, - 0x0040, 0x57cf, 0x6054, 0xa015, 0x0040, 0x57d6, 0x721e, 0x7007, - 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, - 0x0078, 0x57cf, 0x7024, 0xa065, 0x0040, 0x581c, 0x700c, 0xac06, - 0x00c0, 0x57f1, 0x1078, 0x6601, 0x600c, 0xa015, 0x0040, 0x57ed, - 0x720e, 0x600f, 0x0000, 0x0078, 0x581a, 0x720e, 0x720a, 0x0078, - 0x581a, 0x7014, 0xac06, 0x00c0, 0x5804, 0x1078, 0x6601, 0x600c, - 0xa015, 0x0040, 0x5800, 0x7216, 0x600f, 0x0000, 0x0078, 0x581a, - 0x7216, 0x7212, 0x0078, 0x581a, 0x6018, 0x2060, 0x1078, 0x3ed6, - 0x6000, 0xc0dc, 0x6002, 0x1078, 0x6601, 0x701c, 0xa065, 0x0040, - 0x581a, 0x6054, 0xa015, 0x0040, 0x5818, 0x721e, 0x0078, 0x581a, - 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7024, - 0xa065, 0x0040, 0x582c, 0x1078, 0x6601, 0x600c, 0xa015, 0x0040, - 0x5833, 0x720e, 0x600f, 0x0000, 0x1078, 0x6741, 0x7027, 0x0000, - 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a, 0x0078, 0x582c, 0x0d7e, - 0x2069, 0x8aa2, 0x6830, 0xa084, 0x0003, 0x0079, 0x583f, 0x5845, - 0x5847, 0x586d, 0x5845, 0x1078, 0x12d2, 0x0d7f, 0x007c, 0x0c7e, - 0x6840, 0xa086, 0x0001, 0x0040, 0x5863, 0x683c, 0xa065, 0x0040, - 0x5858, 0x600c, 0xa015, 0x0040, 0x585f, 0x6a3a, 0x600f, 0x0000, - 0x6833, 0x0000, 0x683f, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, - 0x6836, 0x0078, 0x5858, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, - 0x5858, 0x6003, 0x0003, 0x0078, 0x5858, 0x0c7e, 0x6843, 0x0000, - 0x6847, 0x0000, 0x683c, 0xa065, 0x0040, 0x5885, 0x600c, 0xa015, - 0x0040, 0x5881, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0078, - 0x5885, 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f, 0x007c, - 0x0d7e, 0x2069, 0x8aa2, 0x6804, 0xa084, 0x0007, 0x0079, 0x5890, - 0x589a, 0x5937, 0x5937, 0x5937, 0x5937, 0x5939, 0x5937, 0x5898, - 0x1078, 0x12d2, 0x6820, 0xa005, 0x00c0, 0x58a0, 0x0d7f, 0x007c, - 0x0c7e, 0x680c, 0xa065, 0x0040, 0x58af, 0x6807, 0x0004, 0x6826, - 0x682b, 0x0000, 0x1078, 0x597f, 0x0c7f, 0x0d7f, 0x007c, 0x6814, - 0xa065, 0x0040, 0x58bd, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, - 0x1078, 0x597f, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e, 0x6a1c, - 0xa2f5, 0x0000, 0x0040, 0x5932, 0x704c, 0xa00d, 0x0040, 0x58cc, - 0x7088, 0xa005, 0x0040, 0x58e4, 0x7054, 0xa075, 0x0040, 0x58d5, - 0xa20e, 0x0040, 0x5932, 0x0078, 0x58da, 0x6818, 0xa20e, 0x0040, - 0x5932, 0x2070, 0x704c, 0xa00d, 0x0040, 0x58cc, 0x7088, 0xa005, - 0x00c0, 0x58cc, 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x00c8, - 0x58cc, 0x1078, 0x68dd, 0x0040, 0x5932, 0x8318, 0x733e, 0x6112, - 0x2e10, 0x621a, 0xa180, 0x0015, 0x2004, 0xa08a, 0x199a, 0x0048, - 0x58fb, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, - 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xd1bc, 0x0040, 0x5914, 0x7100, - 0xd1f4, 0x0040, 0x5910, 0x7114, 0xa18c, 0x00ff, 0x0078, 0x5919, - 0x2009, 0x0000, 0x0078, 0x5919, 0xa1e0, 0x25b2, 0x2c0c, 0xa18c, - 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078, 0x5e16, 0x7300, 0xc3dd, - 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f, - 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x0f7f, 0x0e7f, 0x0c7f, - 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f, 0x0078, 0x5930, 0x0d7f, - 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x5945, 0x6807, 0x0004, - 0x6826, 0x682b, 0x0000, 0x1078, 0x597f, 0x0c7f, 0x0d7f, 0x007c, - 0x0f7e, 0x0d7e, 0x2069, 0x8aa2, 0x6830, 0xa086, 0x0000, 0x00c0, - 0x5966, 0x6838, 0xa07d, 0x0040, 0x5966, 0x6833, 0x0001, 0x683e, - 0x6847, 0x0000, 0x127e, 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, - 0x1b84, 0x00c0, 0x5969, 0x127f, 0x1078, 0x60fc, 0x0d7f, 0x0f7f, - 0x007c, 0x127f, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, - 0x0040, 0x597b, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, - 0x0000, 0x0078, 0x5966, 0x683a, 0x6836, 0x0078, 0x5975, 0x601c, - 0xa084, 0x000f, 0x1079, 0x5985, 0x007c, 0x598e, 0x5993, 0x5cc7, - 0x5dd3, 0x5993, 0x5cc7, 0x5dd3, 0x598e, 0x5993, 0x1078, 0x578f, - 0x1078, 0x5888, 0x007c, 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, - 0x6004, 0xa08a, 0x0040, 0x10c8, 0x12d2, 0x6118, 0x2178, 0x79a0, - 0xd1bc, 0x0040, 0x59b0, 0x7900, 0xd1f4, 0x0040, 0x59ac, 0x7914, - 0xa18c, 0x00ff, 0x0078, 0x59b5, 0x2009, 0x0000, 0x0078, 0x59b5, - 0xa1f8, 0x25b2, 0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, - 0x619a, 0x1079, 0x59c1, 0x0f7f, 0x0c7f, 0x147f, 0x137f, 0x157f, - 0x007c, 0x5a08, 0x5a40, 0x5a58, 0x5ad7, 0x5b04, 0x5b0c, 0x5b2d, - 0x5b3e, 0x5b4f, 0x5b57, 0x5b68, 0x5b57, 0x5bba, 0x5b3e, 0x5bdb, - 0x5be3, 0x5b4f, 0x5be3, 0x5bf4, 0x5a01, 0x5a01, 0x5a01, 0x5a01, - 0x5a01, 0x5a01, 0x5a01, 0x5a01, 0x5a01, 0x5a01, 0x5a01, 0x5a01, - 0x62e5, 0x62fa, 0x631d, 0x6341, 0x5b2d, 0x5a01, 0x5b2d, 0x5b57, - 0x5a01, 0x5a58, 0x5ad7, 0x5a01, 0x685b, 0x5b57, 0x5a01, 0x687b, - 0x5b57, 0x5a01, 0x5a01, 0x5a03, 0x5a01, 0x5a01, 0x5a01, 0x5a01, - 0x5a01, 0x5a01, 0x5a01, 0x5a01, 0x5a01, 0x5a01, 0x6356, 0x5a01, - 0x5a01, 0x1078, 0x12d2, 0x6030, 0x609a, 0x1078, 0x621e, 0x007c, - 0x20a1, 0x020b, 0x1078, 0x5c09, 0x20a3, 0x5200, 0x20a3, 0x0000, - 0x0d7e, 0x2069, 0x8851, 0x6804, 0xd084, 0x0040, 0x5a22, 0x6828, - 0x20a3, 0x0000, 0x017e, 0x1078, 0x225c, 0x21a2, 0x017f, 0x0d7f, - 0x0078, 0x5a27, 0x0d7f, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, - 0x0004, 0x2099, 0x8805, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x8801, - 0x53a6, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, 0x621e, 0x007c, - 0x20a1, 0x020b, 0x1078, 0x5c09, 0x20a3, 0x0500, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a9, 0x0004, - 0x2099, 0x8805, 0x53a6, 0x60c3, 0x0010, 0x1078, 0x621e, 0x007c, - 0x20a1, 0x020b, 0x1078, 0x5c09, 0x7818, 0xa080, 0x0028, 0x2004, - 0xa086, 0x007e, 0x00c0, 0x5a6b, 0x20a3, 0x0400, 0x620c, 0xc2b4, - 0x620e, 0x0078, 0x5a6d, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818, - 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x5aa6, 0x2099, - 0x8a8c, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304, 0xa084, 0x3fff, - 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x8805, 0x53a6, - 0x20a9, 0x0004, 0x2099, 0x8801, 0x53a6, 0x20a9, 0x0010, 0x20a3, - 0x0000, 0x00f0, 0x5a97, 0x2099, 0x8a94, 0x33a6, 0x20a9, 0x0007, - 0x20a3, 0x0000, 0x00f0, 0x5aa0, 0x0078, 0x5ac6, 0x2099, 0x8a8c, - 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x8805, 0x53a6, - 0x20a9, 0x0004, 0x2099, 0x8801, 0x53a6, 0x20a9, 0x0008, 0x20a3, - 0x0000, 0x00f0, 0x5ab7, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, - 0x5abd, 0x2099, 0x8a94, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, - 0x20a3, 0x0000, 0x00f0, 0x5ac8, 0x20a9, 0x000a, 0x20a3, 0x0000, - 0x00f0, 0x5ace, 0x60c3, 0x0074, 0x1078, 0x621e, 0x007c, 0x20a1, - 0x020b, 0x1078, 0x5c09, 0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, - 0x0800, 0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, - 0x20a2, 0x0f7e, 0x2079, 0x8851, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, - 0x5af3, 0xa085, 0x0020, 0xd1a4, 0x0040, 0x5af8, 0xa085, 0x0010, - 0xa085, 0x0002, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, - 0x0014, 0x1078, 0x621e, 0x007c, 0x20a1, 0x020b, 0x1078, 0x5c09, - 0x20a3, 0x5000, 0x0078, 0x5a6d, 0x20a1, 0x020b, 0x1078, 0x5c09, - 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x1078, 0x621e, 0x007c, 0x20a1, 0x020b, 0x1078, - 0x5c87, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x60c3, 0x0004, 0x1078, 0x621e, 0x007c, 0x20a1, 0x020b, - 0x1078, 0x5c87, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, - 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, 0x621e, 0x007c, 0x20a1, - 0x020b, 0x1078, 0x5c87, 0x20a3, 0x0200, 0x0078, 0x5a6d, 0x20a1, - 0x020b, 0x1078, 0x5c87, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, - 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x621e, 0x007c, - 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x5c87, 0x20a3, 0x0210, 0x20a3, - 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, 0x0014, - 0x00c0, 0x5b8e, 0x6998, 0xa184, 0xc000, 0x00c0, 0x5b8a, 0xd1ec, - 0x0040, 0x5b86, 0x20a3, 0x2100, 0x0078, 0x5b90, 0x20a3, 0x0100, - 0x0078, 0x5b90, 0x20a3, 0x0400, 0x0078, 0x5b90, 0x20a3, 0x0700, - 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, - 0x8851, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x5ba0, 0xa085, 0x0020, - 0xd1a4, 0x0040, 0x5ba5, 0xa085, 0x0010, 0x2009, 0x8873, 0x210c, - 0xd184, 0x0040, 0x5baf, 0x699c, 0xd18c, 0x0040, 0x5bb1, 0xa085, - 0x0002, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, 0x621e, - 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x5c87, 0x20a3, 0x0210, - 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x1078, 0x621e, 0x007c, 0x20a1, 0x020b, 0x1078, 0x5c87, 0x20a3, - 0x0200, 0x0078, 0x5a0e, 0x20a1, 0x020b, 0x1078, 0x5c87, 0x20a3, - 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, - 0x0008, 0x1078, 0x621e, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x20a1, 0x020b, 0x1078, 0x5c87, 0x20a3, 0x0100, 0x20a3, 0x0000, - 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, 0x621e, - 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, - 0x0028, 0x2014, 0xa286, 0x007e, 0x00c0, 0x5c1c, 0x20a3, 0x22ff, - 0x20a3, 0xfffe, 0x0078, 0x5c51, 0xa286, 0x007f, 0x00c0, 0x5c27, - 0x0d7e, 0x20a3, 0x22ff, 0x20a3, 0xfffd, 0x0078, 0x5c3e, 0xd2bc, - 0x0040, 0x5c46, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x5c35, 0x20a3, - 0x22ff, 0x20a3, 0xfffc, 0x0078, 0x5c3e, 0xa2e8, 0x8934, 0x2d6c, - 0x6810, 0xa085, 0x2200, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x881a, - 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5c55, 0x0d7e, 0xa2e8, - 0x8934, 0x2d6c, 0x6810, 0xa085, 0x2200, 0x20a2, 0x6814, 0x20a2, - 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0129, 0x20a3, - 0x0000, 0x1078, 0x620d, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, - 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc, - 0x22a2, 0x0d7e, 0x2069, 0x881a, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, - 0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x5c59, 0x20a3, 0x0100, - 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x007c, 0x027e, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, - 0xa092, 0x007e, 0x0048, 0x5ca6, 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, - 0x6810, 0xa085, 0x2300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x881a, - 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5cb5, 0x0d7e, 0xa0e8, - 0x8934, 0x2d6c, 0x6810, 0xa085, 0x2300, 0x20a2, 0x6814, 0x20a2, - 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0198, 0x20a3, - 0x0000, 0x1078, 0x620d, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, - 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0c7e, - 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x12d2, 0xa08a, 0x008c, - 0x10c8, 0x12d2, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040, 0x5ce5, - 0x7900, 0xd1f4, 0x0040, 0x5ce1, 0x7914, 0xa18c, 0x00ff, 0x0078, - 0x5cea, 0x2009, 0x0000, 0x0078, 0x5cea, 0xa1f8, 0x25b2, 0x2f0c, - 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082, 0x0085, - 0x1079, 0x5cf5, 0x0f7f, 0x0c7f, 0x007c, 0x5cfe, 0x5d09, 0x5d24, - 0x5cfc, 0x5cfc, 0x5cfc, 0x5cfe, 0x1078, 0x12d2, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x5d37, 0x60c3, 0x0000, 0x1078, 0x621e, 0x147f, - 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5d6b, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x7808, 0x20a2, 0x7810, 0x20a2, 0x20a3, 0x0000, - 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, - 0x1078, 0x621e, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, - 0x5d9f, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x60c3, 0x0004, 0x1078, 0x621e, 0x147f, 0x007c, 0x027e, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, - 0xa092, 0x007e, 0x0048, 0x5d56, 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, - 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x881a, - 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5d65, 0x0d7e, 0xa0e8, - 0x8934, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, - 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0009, 0x20a3, - 0x0000, 0x0078, 0x5c59, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x5d8a, - 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, - 0x6814, 0x20a2, 0x2069, 0x881a, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, - 0x0078, 0x5d99, 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, 0x6810, 0xa085, - 0x8400, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, - 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, 0x5cb9, 0x027e, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, - 0xa092, 0x007e, 0x0048, 0x5dbe, 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, - 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x881a, - 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5dcd, 0x0d7e, 0xa0e8, - 0x8934, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, - 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, - 0x0000, 0x0078, 0x5cb9, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, - 0x0040, 0x1048, 0x12d2, 0xa08a, 0x0053, 0x10c8, 0x12d2, 0x7918, - 0x2160, 0x61a0, 0xd1bc, 0x0040, 0x5df2, 0x6100, 0xd1f4, 0x0040, - 0x5dee, 0x6114, 0xa18c, 0x00ff, 0x0078, 0x5df7, 0x2009, 0x0000, - 0x0078, 0x5df7, 0xa1e0, 0x25b2, 0x2c0c, 0xa18c, 0x00ff, 0x2061, - 0x0100, 0x619a, 0xa082, 0x0040, 0x1079, 0x5e01, 0x0f7f, 0x0c7f, - 0x007c, 0x5e16, 0x5f1a, 0x5ebb, 0x6070, 0x5e14, 0x5e14, 0x5e14, - 0x5e14, 0x5e14, 0x5e14, 0x5e14, 0x651a, 0x652b, 0x653c, 0x654d, - 0x5e14, 0x5e14, 0x5e14, 0x6509, 0x1078, 0x12d2, 0x0d7e, 0x157e, - 0x147e, 0x20a1, 0x020b, 0x1078, 0x5e77, 0x7910, 0x2168, 0x6948, - 0x7922, 0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, - 0x000f, 0x00c0, 0x5e2f, 0x2001, 0x0005, 0x0078, 0x5e39, 0xd184, - 0x0040, 0x5e36, 0x2001, 0x0004, 0x0078, 0x5e39, 0xa084, 0x0006, - 0x8004, 0x20a2, 0xd1ac, 0x0040, 0x5e41, 0x20a3, 0x0002, 0x0078, - 0x5e4d, 0xd1b4, 0x0040, 0x5e48, 0x20a3, 0x0001, 0x0078, 0x5e4d, - 0x20a3, 0x0000, 0x2230, 0x0078, 0x5e4f, 0x6a80, 0x6e7c, 0x20a9, - 0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000, 0x00f0, - 0x5e53, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, - 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0x8abe, 0x2003, - 0x07d0, 0x2001, 0x8abd, 0x2003, 0x0009, 0x2001, 0x8ac3, 0x2003, - 0x0002, 0x1078, 0x1526, 0x147f, 0x157f, 0x0d7f, 0x007c, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, - 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028, 0x2004, - 0xd0bc, 0x0040, 0x5e9d, 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, 0x6810, - 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x881a, 0x2da6, - 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5eac, 0x0d7e, 0xa0e8, 0x8934, - 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x0d7f, - 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3, 0x0000, - 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x5edb, 0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, - 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, - 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x621e, 0x147f, 0x137f, - 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x5ef9, 0x0d7e, - 0xa0e8, 0x8934, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, - 0x20a2, 0x2069, 0x881a, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, - 0x5f08, 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, 0x6810, 0xa085, 0x0500, - 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, - 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x620d, 0x22a2, 0x20a3, - 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b, - 0x1078, 0x6031, 0x7810, 0x2068, 0xa016, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x00c0, 0x5f37, 0x7810, - 0xa084, 0x0700, 0x8007, 0x1079, 0x5f3f, 0x0078, 0x5f3a, 0xa006, - 0x1079, 0x5f3f, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x5f49, - 0x5fcf, 0x5fd3, 0x5ff6, 0x6003, 0x6018, 0x601c, 0x5f47, 0x1078, - 0x12d2, 0x017e, 0x037e, 0x694c, 0xa18c, 0x0003, 0x0040, 0x5f54, - 0xa186, 0x0003, 0x00c0, 0x5f5e, 0x6b78, 0x23a2, 0x6868, 0x20a2, - 0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x5ffa, 0xa186, 0x0001, - 0x10c0, 0x12d2, 0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, - 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, - 0xa384, 0x0300, 0x0040, 0x5fc9, 0xd3c4, 0x0040, 0x5f79, 0x687c, - 0xa108, 0xd3cc, 0x0040, 0x5f7e, 0x6874, 0xa108, 0x157e, 0x20a9, - 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0, - 0x5f83, 0x157f, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040, - 0x5fc9, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x007e, - 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x5fb1, 0x0d7e, - 0xa0e8, 0x8934, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, - 0x20a2, 0x2069, 0x881a, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, - 0x5fc0, 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, 0x6810, 0xa085, 0x0700, - 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, - 0x007f, 0x20a3, 0x0898, 0x20a2, 0x1078, 0x620d, 0x22a2, 0x20a3, - 0x0000, 0x61c2, 0x037f, 0x017f, 0x1078, 0x621e, 0x007c, 0x20a3, - 0x0008, 0x0078, 0x5ff8, 0x20a3, 0x0302, 0x22a2, 0x22a2, 0x22a2, - 0x20a3, 0x0012, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x20a3, 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, - 0x22a2, 0x22a2, 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x60c3, 0x0032, 0x1078, 0x621e, 0x007c, 0x20a3, 0x0028, - 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, - 0x1078, 0x621e, 0x007c, 0x20a3, 0x0100, 0x22a2, 0x22a2, 0x22a2, - 0x22a2, 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x7824, 0xa084, 0x00ff, - 0x20a2, 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x1078, 0x621e, 0x007c, - 0x20a3, 0x0008, 0x0078, 0x5ff8, 0x037e, 0x7b10, 0xa384, 0xff00, - 0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0, 0x602a, 0x22a2, 0x037f, - 0x0078, 0x5ff8, 0x20a3, 0x0800, 0x22a2, 0x20a2, 0x037f, 0x0078, - 0x5ffa, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, - 0x0028, 0x2004, 0xd0bc, 0x0040, 0x604f, 0x0d7e, 0xa0e8, 0x8934, - 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, - 0x881a, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x605e, 0x0d7e, - 0xa0e8, 0x8934, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, - 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0898, - 0x20a3, 0x0000, 0x1078, 0x620d, 0x22a2, 0x20a3, 0x0000, 0x7a08, - 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, - 0x0d7e, 0x157e, 0x137e, 0x147e, 0x017e, 0x037e, 0x7810, 0xa084, - 0x0700, 0x8007, 0x1079, 0x6083, 0x037f, 0x017f, 0x147f, 0x137f, - 0x157f, 0x0d7f, 0x007c, 0x608b, 0x608b, 0x608d, 0x608b, 0x608b, - 0x608b, 0x60b2, 0x608b, 0x1078, 0x12d2, 0x7910, 0xa18c, 0xf8ff, - 0xa18d, 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, - 0x60bc, 0x0d7e, 0x2069, 0x8851, 0x6804, 0xd0bc, 0x0040, 0x60a7, - 0x682c, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x0078, 0x60a9, 0x20a3, - 0x3f00, 0x0d7f, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0001, 0x1078, - 0x621e, 0x007c, 0x20a1, 0x020b, 0x2009, 0x0003, 0x1078, 0x60bc, - 0x20a3, 0x7f00, 0x0078, 0x60aa, 0x027e, 0x20e1, 0x9080, 0x20e1, - 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x60da, - 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, - 0x6814, 0x20a2, 0x2069, 0x881a, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, - 0x0078, 0x60e9, 0x0d7e, 0xa0e8, 0x8934, 0x2d6c, 0x6810, 0xa085, - 0x0100, 0x20a2, 0x6814, 0x20a2, 0x0d7f, 0x20a3, 0x0000, 0x6230, - 0x22a2, 0x20a3, 0x0888, 0xa18d, 0x0008, 0x21a2, 0x1078, 0x620d, - 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x027f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, - 0x047e, 0x037e, 0x2061, 0x0100, 0x2071, 0x8800, 0x6130, 0x7818, - 0x2068, 0x68a0, 0x2028, 0xd0bc, 0x00c0, 0x6113, 0x6910, 0x6a14, - 0x6430, 0x0078, 0x6117, 0x6910, 0x6a14, 0x7368, 0x746c, 0x781c, - 0xa086, 0x0006, 0x0040, 0x6176, 0xd5bc, 0x0040, 0x6127, 0xa185, - 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x612e, 0xa185, - 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073, 0x0809, - 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, - 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, - 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, - 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, - 0x0000, 0xa582, 0x0080, 0x0048, 0x6160, 0x6a00, 0xd2f4, 0x0040, - 0x615e, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6160, 0x2011, 0x0000, - 0x629e, 0x6017, 0x0016, 0x2009, 0x07d0, 0x60c4, 0xa084, 0xfff0, - 0xa005, 0x0040, 0x616d, 0x2009, 0x1b58, 0x1078, 0x5174, 0x037f, - 0x047f, 0x057f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x7810, 0x2070, - 0x704c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0040, 0x61c6, 0xd5bc, - 0x0040, 0x618a, 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, - 0x0078, 0x6191, 0xa185, 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, - 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, - 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, - 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, - 0x707c, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, - 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, 0x61c1, 0x6a00, 0xd2f4, - 0x0040, 0x61bf, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x61c1, 0x2011, - 0x0000, 0x629e, 0x6017, 0x0012, 0x0078, 0x6163, 0xd5bc, 0x0040, - 0x61d1, 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, 0x0078, - 0x61d8, 0xa185, 0x0700, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, - 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff, - 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, - 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, - 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, - 0x0000, 0xa582, 0x0080, 0x0048, 0x6208, 0x6a00, 0xd2f4, 0x0040, - 0x6206, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x6208, 0x2011, 0x0000, - 0x629e, 0x6017, 0x0016, 0x0078, 0x6163, 0x7a18, 0xa280, 0x0023, - 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x007c, 0x0d7e, - 0x2069, 0x8aa2, 0x6843, 0x0001, 0x0d7f, 0x007c, 0x20e1, 0x9080, - 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x6229, 0x1078, 0x5164, - 0x007c, 0x007e, 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, - 0x007f, 0x007c, 0x007e, 0x0c7e, 0x2061, 0x0100, 0x6014, 0xa084, - 0x0004, 0xa085, 0x0008, 0x6016, 0x0c7f, 0x007f, 0x007c, 0x0c7e, - 0x0d7e, 0x017e, 0x027e, 0x1078, 0x516f, 0x2061, 0x0100, 0x2069, - 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x627c, 0x1078, 0x6232, - 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e, 0x2061, 0x8aa2, 0x6128, - 0xa192, 0x0002, 0x00c8, 0x6269, 0x8108, 0x612a, 0x6124, 0x0c7f, - 0x81ff, 0x0040, 0x6277, 0x1078, 0x5164, 0x1078, 0x6229, 0x0078, - 0x6277, 0x6124, 0xa1e5, 0x0000, 0x0040, 0x6274, 0x1078, 0x8781, - 0x2009, 0x0014, 0x1078, 0x6939, 0x0c7f, 0x0078, 0x6277, 0x027f, - 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x1078, 0x3c73, 0x0078, 0x6277, - 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078, 0x517c, 0x2071, - 0x8aa2, 0x713c, 0x81ff, 0x0040, 0x62aa, 0x2061, 0x0100, 0x2069, - 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x62b0, 0x6803, 0x1000, - 0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078, 0x642d, 0x037f, - 0x713c, 0x2160, 0x1078, 0x8781, 0x2009, 0x004a, 0x1078, 0x6939, - 0x0078, 0x62aa, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c, - 0x0078, 0x629a, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e, 0x047e, - 0x007e, 0x127e, 0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0, 0x2071, - 0x8aa2, 0x7018, 0x2068, 0x8dff, 0x0040, 0x62dc, 0x68a0, 0xa406, - 0x0040, 0x62ce, 0x6854, 0x2068, 0x0078, 0x62c3, 0x6010, 0x2060, - 0x643c, 0x6540, 0x6e48, 0x2d60, 0x1078, 0x40da, 0x0040, 0x62dc, - 0x1078, 0x6601, 0xa085, 0x0001, 0x127f, 0x007f, 0x047f, 0x057f, - 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0x157e, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x5c09, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x621e, 0x147f, - 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5c87, - 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0x8840, - 0x2019, 0x8841, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, - 0x00f0, 0x630a, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, - 0x1078, 0x621e, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x017e, - 0x027e, 0x20a1, 0x020b, 0x1078, 0x5c67, 0x1078, 0x5c7e, 0x7810, - 0x007e, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, - 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x007f, 0xa080, 0x0001, - 0x2004, 0x7812, 0x1078, 0x621e, 0x027f, 0x017f, 0x147f, 0x157f, - 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5c09, 0x20a3, - 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, - 0x0008, 0x1078, 0x621e, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, - 0x017e, 0x027e, 0x20a1, 0x020b, 0x1078, 0x5c09, 0x7810, 0x007e, - 0xa080, 0x0017, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, - 0x8003, 0x60c2, 0x007f, 0xa080, 0x0001, 0x2004, 0x7812, 0x1078, - 0x621e, 0x027f, 0x017f, 0x147f, 0x157f, 0x007c, 0x0e7e, 0x0c7e, - 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x8aa2, 0x700c, 0x2060, - 0x8cff, 0x0040, 0x6392, 0x1078, 0x79d5, 0x00c0, 0x6389, 0x1078, - 0x6bc7, 0x600c, 0x007e, 0x1078, 0x690e, 0x1078, 0x6601, 0x0c7f, - 0x0078, 0x6380, 0x700f, 0x0000, 0x700b, 0x0000, 0x127f, 0x007f, - 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, - 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, 0x2069, 0x0100, - 0x2079, 0x0140, 0x2071, 0x8aa2, 0x7024, 0x2060, 0x8cff, 0x0040, - 0x63eb, 0x1078, 0x6232, 0x68c3, 0x0000, 0x1078, 0x516f, 0x2009, - 0x0013, 0x1078, 0x6939, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, - 0x63ce, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x63e0, - 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, 0x63e0, 0xd084, 0x0040, - 0x63d5, 0x6827, 0x0001, 0x0078, 0x63d7, 0x00f0, 0x63bd, 0x7804, - 0xa084, 0x1000, 0x0040, 0x63e0, 0x7803, 0x0100, 0x7803, 0x0000, - 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, - 0x157f, 0x127f, 0x007c, 0x2001, 0x8800, 0x2004, 0xa096, 0x0001, - 0x0040, 0x6423, 0xa096, 0x0004, 0x0040, 0x6423, 0x6817, 0x0008, - 0x68c3, 0x0000, 0x2011, 0x3c35, 0x1078, 0x50f2, 0x20a9, 0x01f4, - 0x6824, 0xd094, 0x0040, 0x6411, 0x6827, 0x0004, 0x7804, 0xa084, - 0x4000, 0x0040, 0x6423, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, - 0x6423, 0xd084, 0x0040, 0x6418, 0x6827, 0x0001, 0x0078, 0x641a, - 0x00f0, 0x6400, 0x7804, 0xa084, 0x1000, 0x0040, 0x6423, 0x7803, - 0x0100, 0x7803, 0x0000, 0x007f, 0x017f, 0x027f, 0x0c7f, 0x0d7f, - 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x127e, 0x157e, 0x0f7e, - 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091, 0x8000, - 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x8aa2, 0x703c, 0x2060, - 0x8cff, 0x0040, 0x64a4, 0x6817, 0x0010, 0x68c7, 0x0000, 0x68cb, - 0x0000, 0x1078, 0x517c, 0x1078, 0x1d84, 0x047e, 0x057e, 0x2009, - 0x017f, 0x212c, 0x200b, 0x00a5, 0x2021, 0x0169, 0x2404, 0xa084, - 0x000f, 0xa086, 0x0004, 0x00c0, 0x6473, 0x68c7, 0x0000, 0x68cb, - 0x0008, 0x0e7e, 0x0f7e, 0x2079, 0x0020, 0x2071, 0x8af9, 0x6814, - 0xa084, 0x0004, 0xa085, 0x0012, 0x6816, 0x7803, 0x0008, 0x7003, - 0x0000, 0x0f7f, 0x0e7f, 0x250a, 0x057f, 0x047f, 0xa39d, 0x0000, - 0x00c0, 0x647e, 0x2009, 0x0049, 0x1078, 0x6939, 0x20a9, 0x03e8, - 0x6824, 0xd094, 0x0040, 0x6491, 0x6827, 0x0004, 0x7804, 0xa084, - 0x4000, 0x0040, 0x64a3, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078, - 0x64a3, 0xd094, 0x0040, 0x6498, 0x6827, 0x0002, 0x0078, 0x649a, - 0x00f0, 0x6480, 0x7804, 0xa084, 0x1000, 0x0040, 0x64a3, 0x7803, - 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f, - 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x0d7e, 0x127e, - 0x2091, 0x8000, 0x2069, 0x8aa2, 0x6a06, 0x127f, 0x0d7f, 0x007c, - 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x8aa2, 0x6a32, 0x127f, - 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x007e, 0x127e, - 0x2071, 0x8aa2, 0x7614, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, - 0x0040, 0x6502, 0x601c, 0xa206, 0x00c0, 0x64fd, 0x7014, 0xac36, - 0x00c0, 0x64dc, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x64ea, - 0x2c00, 0xaf36, 0x0040, 0x64e8, 0x2f00, 0x7012, 0x0078, 0x64ea, - 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x64f3, - 0x7e0e, 0x0078, 0x64f4, 0x2678, 0x600f, 0x0000, 0x1078, 0x79a8, - 0x1078, 0x6601, 0x0c7f, 0x0078, 0x64cf, 0x2c78, 0x600c, 0x2060, - 0x0078, 0x64cf, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, - 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5e77, 0x7810, - 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x1000, - 0x0078, 0x655c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5e77, - 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a3, - 0x4000, 0x0078, 0x655c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, - 0x5e77, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, - 0x20a3, 0x2000, 0x0078, 0x655c, 0x157e, 0x147e, 0x20a1, 0x020b, - 0x1078, 0x5e77, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, - 0x20a2, 0x20a3, 0x0400, 0x0078, 0x655c, 0x157e, 0x147e, 0x20a1, - 0x020b, 0x1078, 0x5e77, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, - 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x660c, 0x60c3, 0x0020, - 0x1078, 0x621e, 0x147f, 0x157f, 0x007c, 0x127e, 0x0c7e, 0x2091, - 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0, 0x6574, 0xd1bc, - 0x00c0, 0x65be, 0x0078, 0x65fe, 0x2009, 0x017f, 0x200b, 0x00a1, - 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9, 0x001e, 0x2009, - 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x65b5, 0x6020, 0xd0b4, - 0x0040, 0x65b5, 0x6024, 0xd094, 0x00c0, 0x65b5, 0x2104, 0xa084, - 0x000f, 0xa086, 0x0004, 0x00c0, 0x65b5, 0x00f0, 0x6581, 0x027e, - 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d, - 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043, 0x0001, 0x6043, - 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0, 0x65b4, 0x6a04, - 0xa294, 0x4000, 0x00c0, 0x65ab, 0x027f, 0x0d7f, 0x007f, 0x157f, - 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x65fe, 0x2009, 0x017f, - 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9, - 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x65f7, - 0x6020, 0xd0bc, 0x0040, 0x65f7, 0x2104, 0xa084, 0x000f, 0xa086, - 0x0004, 0x00c0, 0x65f7, 0x00f0, 0x65cb, 0x027e, 0x6164, 0xa18c, - 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d, 0x6088, 0x628c, - 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043, 0x0000, 0x608a, - 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x65f1, 0x027f, 0x0d7f, - 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0c7f, 0x127f, - 0x007c, 0x0e7e, 0x2071, 0x8aa2, 0x7020, 0xa005, 0x0040, 0x660a, - 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008, 0x20a2, 0x00f0, - 0x660e, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, - 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x8aa2, - 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0040, 0x66ad, - 0x8cff, 0x0040, 0x66ad, 0x601c, 0xa086, 0x0006, 0x00c0, 0x66a8, - 0x88ff, 0x0040, 0x663b, 0x2800, 0xac06, 0x00c0, 0x66a8, 0x2039, - 0x0000, 0x0078, 0x6646, 0x6018, 0xa206, 0x00c0, 0x66a8, 0x85ff, - 0x0040, 0x6646, 0x6020, 0xa106, 0x00c0, 0x66a8, 0x7024, 0xac06, - 0x00c0, 0x6676, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x6671, - 0x1078, 0x516f, 0x6817, 0x0008, 0x68c3, 0x0000, 0x1078, 0x6741, - 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, - 0x0040, 0x6666, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, - 0x6824, 0xd084, 0x0040, 0x666e, 0x6827, 0x0001, 0x037f, 0x0078, - 0x6676, 0x6003, 0x0009, 0x630a, 0x0078, 0x66a8, 0x7014, 0xac36, - 0x00c0, 0x667c, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x668a, - 0x2c00, 0xaf36, 0x0040, 0x6688, 0x2f00, 0x7012, 0x0078, 0x668a, - 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x6693, - 0x7e0e, 0x0078, 0x6694, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, - 0x1078, 0x77ed, 0x0040, 0x669e, 0x1078, 0x86aa, 0x1078, 0x79a8, - 0x1078, 0x6601, 0x88ff, 0x00c0, 0x66b7, 0x0c7f, 0x0078, 0x6625, - 0x2c78, 0x600c, 0x2060, 0x0078, 0x6625, 0xa006, 0x127f, 0x007f, - 0x067f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017, - 0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x66ae, 0x0f7e, 0x0e7e, - 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, - 0x2071, 0x8aa2, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x6730, - 0x601c, 0xa086, 0x0006, 0x00c0, 0x672b, 0x88ff, 0x0040, 0x66de, - 0x2800, 0xac06, 0x00c0, 0x672b, 0x0078, 0x66e9, 0x6018, 0xa206, - 0x00c0, 0x672b, 0x85ff, 0x0040, 0x66e9, 0x6020, 0xa106, 0x00c0, - 0x672b, 0x703c, 0xac06, 0x00c0, 0x66fb, 0x037e, 0x2019, 0x0001, - 0x1078, 0x642d, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, - 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x6701, 0x660c, - 0x763a, 0x7034, 0xac36, 0x00c0, 0x670f, 0x2c00, 0xaf36, 0x0040, - 0x670d, 0x2f00, 0x7036, 0x0078, 0x670f, 0x7037, 0x0000, 0x660c, - 0x067e, 0x2c00, 0xaf06, 0x0040, 0x6718, 0x7e0e, 0x0078, 0x6719, - 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x77ed, 0x0040, - 0x6723, 0x1078, 0x86aa, 0x1078, 0x79a8, 0x88ff, 0x00c0, 0x673a, - 0x0c7f, 0x0078, 0x66cd, 0x2c78, 0x600c, 0x2060, 0x0078, 0x66cd, - 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, - 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, - 0x6731, 0x0e7e, 0x2071, 0x8aa2, 0x2001, 0x8800, 0x2004, 0xa086, - 0x0002, 0x00c0, 0x674f, 0x7007, 0x0005, 0x0078, 0x6751, 0x7007, - 0x0000, 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e, 0x027e, - 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x8aa2, 0x2c10, 0x7638, - 0x2660, 0x2678, 0x8cff, 0x0040, 0x6791, 0x2200, 0xac06, 0x00c0, - 0x678c, 0x7038, 0xac36, 0x00c0, 0x676f, 0x660c, 0x763a, 0x7034, - 0xac36, 0x00c0, 0x677d, 0x2c00, 0xaf36, 0x0040, 0x677b, 0x2f00, - 0x7036, 0x0078, 0x677d, 0x7037, 0x0000, 0x660c, 0x2c00, 0xaf06, - 0x0040, 0x6785, 0x7e0e, 0x0078, 0x6786, 0x2678, 0x600f, 0x0000, - 0xa085, 0x0001, 0x0078, 0x6791, 0x2c78, 0x600c, 0x2060, 0x0078, - 0x6762, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f, 0x0f7f, - 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, - 0x2091, 0x8000, 0x2071, 0x8aa2, 0x760c, 0x2660, 0x2678, 0x8cff, - 0x0040, 0x682a, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, - 0x6825, 0x7024, 0xac06, 0x00c0, 0x67d8, 0x2069, 0x0100, 0x68c0, - 0xa005, 0x0040, 0x67d8, 0x1078, 0x6232, 0x68c3, 0x0000, 0x1078, - 0x6741, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, - 0x1000, 0x0040, 0x67cf, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0040, 0x67d7, 0x6827, 0x0001, 0x037f, - 0x700c, 0xac36, 0x00c0, 0x67de, 0x660c, 0x760e, 0x7008, 0xac36, - 0x00c0, 0x67ec, 0x2c00, 0xaf36, 0x0040, 0x67ea, 0x2f00, 0x700a, - 0x0078, 0x67ec, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, - 0x0040, 0x67f5, 0x7e0e, 0x0078, 0x67f6, 0x2678, 0x600f, 0x0000, - 0x1078, 0x79c1, 0x00c0, 0x6800, 0x1078, 0x24e5, 0x0078, 0x681c, - 0x1078, 0x79d5, 0x00c0, 0x6808, 0x1078, 0x6bc7, 0x0078, 0x681c, - 0x6010, 0x2068, 0x1078, 0x77ed, 0x0040, 0x681c, 0x601c, 0xa086, - 0x0003, 0x00c0, 0x6832, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, - 0x1078, 0x4376, 0x1078, 0x799b, 0x6003, 0x0000, 0x1078, 0x79a8, - 0x1078, 0x6601, 0x0c7f, 0x0078, 0x67a7, 0x2c78, 0x600c, 0x2060, - 0x0078, 0x67a7, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, - 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x6813, 0x1078, - 0x86aa, 0x0078, 0x681c, 0x037e, 0x157e, 0x137e, 0x147e, 0x3908, - 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x231e, 0x00c0, 0x684c, - 0x8210, 0x8000, 0x0078, 0x6843, 0xa005, 0x0040, 0x6856, 0x20a9, - 0x0020, 0x2198, 0xa110, 0x22a0, 0x22c8, 0x53a3, 0x147f, 0x137f, - 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x5c87, - 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x2099, 0x8a9c, 0x20a9, 0x0004, 0x53a6, 0x20a3, - 0x0004, 0x20a3, 0x7878, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x1078, - 0x621e, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078, 0x5c87, 0x20a3, - 0x0210, 0x20a3, 0x0018, 0x20a3, 0x0800, 0x7810, 0xa084, 0xff00, - 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x7810, 0xa084, 0x00ff, 0x20a2, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, 0x1078, 0x621e, 0x007c, - 0x2061, 0x8f00, 0x2a70, 0x7060, 0x7046, 0x704b, 0x8f00, 0x007c, - 0x0e7e, 0x127e, 0x2071, 0x8800, 0x2091, 0x8000, 0x7544, 0xa582, - 0x0001, 0x0048, 0x68da, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, - 0x0040, 0x68c6, 0xace0, 0x000c, 0x7054, 0xac02, 0x00c8, 0x68c2, - 0x0078, 0x68b5, 0x2061, 0x8f00, 0x0078, 0x68b5, 0x6003, 0x0008, - 0x8529, 0x7546, 0xaca8, 0x000c, 0x7054, 0xa502, 0x00c8, 0x68d6, - 0x754a, 0xa085, 0x0001, 0x127f, 0x0e7f, 0x007c, 0x704b, 0x8f00, - 0x0078, 0x68d1, 0xa006, 0x0078, 0x68d3, 0x0e7e, 0x2071, 0x8800, - 0x7544, 0xa582, 0x0001, 0x0048, 0x690b, 0x7048, 0x2060, 0x6000, - 0xa086, 0x0000, 0x0040, 0x68f8, 0xace0, 0x000c, 0x7054, 0xac02, - 0x00c8, 0x68f4, 0x0078, 0x68e7, 0x2061, 0x8f00, 0x0078, 0x68e7, - 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, 0x000c, 0x7054, 0xa502, - 0x00c8, 0x6907, 0x754a, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x704b, - 0x8f00, 0x0078, 0x6903, 0xa006, 0x0078, 0x6905, 0xac82, 0x8f00, - 0x1048, 0x12d2, 0x2001, 0x8815, 0x2004, 0xac02, 0x10c8, 0x12d2, - 0xa006, 0x6006, 0x600a, 0x600e, 0x6012, 0x6016, 0x601a, 0x601f, - 0x0000, 0x6003, 0x0000, 0x6022, 0x6026, 0x602a, 0x602e, 0x2061, - 0x8800, 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, 0x0040, 0x6931, - 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x5888, 0x127f, 0x0078, - 0x6930, 0x601c, 0xa084, 0x000f, 0x0079, 0x693e, 0x6947, 0x6958, - 0x6974, 0x6990, 0x7a52, 0x7a6e, 0x7a8a, 0x6947, 0x6958, 0xa186, - 0x0013, 0x00c0, 0x6950, 0x1078, 0x578f, 0x1078, 0x5888, 0x007c, - 0xa18e, 0x0047, 0x00c0, 0x6957, 0xa016, 0x1078, 0x1594, 0x007c, - 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d2, 0x1079, 0x6962, - 0x067f, 0x007c, 0x6972, 0x6a89, 0x6be6, 0x6972, 0x6c46, 0x6972, - 0x6972, 0x6972, 0x6a28, 0x6f24, 0x6972, 0x6972, 0x6972, 0x6972, - 0x6972, 0x6972, 0x1078, 0x12d2, 0x067e, 0x6000, 0xa0b2, 0x0010, - 0x10c8, 0x12d2, 0x1079, 0x697e, 0x067f, 0x007c, 0x698e, 0x698e, - 0x698e, 0x698e, 0x698e, 0x698e, 0x698e, 0x698e, 0x7419, 0x74f8, - 0x698e, 0x7432, 0x7492, 0x7432, 0x7492, 0x698e, 0x1078, 0x12d2, - 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d2, 0x1079, 0x699a, - 0x067f, 0x007c, 0x69aa, 0x6f65, 0x7020, 0x70fa, 0x7257, 0x69aa, - 0x69aa, 0x69aa, 0x6f40, 0x73c7, 0x73cb, 0x69aa, 0x69aa, 0x69aa, - 0x69aa, 0x73f5, 0x1078, 0x12d2, 0x20a9, 0x000e, 0x2e98, 0x6010, - 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, - 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, 0x0002, - 0xa398, 0x0002, 0xa4a0, 0x0002, 0x00f0, 0x69ba, 0x0e7e, 0x1078, - 0x77ed, 0x0040, 0x69d1, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, - 0x0103, 0x0e7f, 0x1078, 0x690e, 0x007c, 0x0d7e, 0x037e, 0x7330, - 0xa386, 0x0200, 0x00c0, 0x69e2, 0x6018, 0x2068, 0x6813, 0x00ff, - 0x6817, 0xfffd, 0x6010, 0xa005, 0x0040, 0x69ec, 0x2068, 0x6807, - 0x0000, 0x6837, 0x0103, 0x6b32, 0x1078, 0x690e, 0x037f, 0x0d7f, - 0x007c, 0x017e, 0x20a9, 0x002a, 0xae80, 0x000c, 0x2098, 0x6010, - 0xa080, 0x0002, 0x20a0, 0x53a3, 0x20a9, 0x002a, 0x6010, 0xa080, - 0x0001, 0x2004, 0xa080, 0x0002, 0x20a0, 0x53a3, 0x0e7e, 0x6010, - 0x2004, 0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x690e, 0x017f, - 0x007c, 0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, - 0xa1b6, 0x0015, 0x00c0, 0x6a25, 0x6018, 0x2068, 0x7038, 0x680a, - 0x703c, 0x680e, 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x69c6, - 0x2100, 0xa1b2, 0x0040, 0x10c8, 0x12d2, 0x0079, 0x6a2f, 0x6a71, - 0x6a7d, 0x6a71, 0x6a71, 0x6a71, 0x6a71, 0x6a6f, 0x6a6f, 0x6a6f, - 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, - 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, - 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a71, 0x6a6f, - 0x6a71, 0x6a71, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a71, - 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, - 0x6a6f, 0x6a71, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, - 0x6a6f, 0x6a6f, 0x6a6f, 0x6a6f, 0x6a71, 0x6a6f, 0x6a6f, 0x1078, - 0x12d2, 0x6003, 0x0001, 0x6106, 0x1078, 0x53e6, 0x127e, 0x2091, - 0x8000, 0x1078, 0x5888, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, - 0x1078, 0x53e6, 0x127e, 0x2091, 0x8000, 0x1078, 0x5888, 0x127f, - 0x007c, 0x6004, 0xa0b2, 0x0040, 0x10c8, 0x12d2, 0xa1b6, 0x0013, - 0x00c0, 0x6a95, 0x2008, 0x0079, 0x6b35, 0xa1b6, 0x0027, 0x00c0, - 0x6af2, 0x1078, 0x578f, 0x6004, 0x1078, 0x79c1, 0x0040, 0x6ab2, - 0x1078, 0x79d5, 0x0040, 0x6aea, 0xa08e, 0x0021, 0x0040, 0x6aee, - 0xa08e, 0x0022, 0x0040, 0x6aea, 0xa08e, 0x003d, 0x0040, 0x6aee, - 0x0078, 0x6ae5, 0x1078, 0x24e5, 0x2001, 0x0007, 0x1078, 0x3f05, - 0x6018, 0xa080, 0x0028, 0x200c, 0x1078, 0x6bc7, 0xa186, 0x007e, - 0x00c0, 0x6ac7, 0x2001, 0x8830, 0x2014, 0xc285, 0x2202, 0x017e, - 0x027e, 0x037e, 0x2110, 0x2019, 0x0028, 0x1078, 0x54f0, 0x087e, - 0x2041, 0x0000, 0x1078, 0x5419, 0x0c7e, 0x6018, 0xa065, 0x0040, - 0x6adb, 0x1078, 0x418b, 0x0c7f, 0x2c08, 0x1078, 0x84d2, 0x087f, - 0x037f, 0x027f, 0x017f, 0x1078, 0x3f76, 0x1078, 0x690e, 0x1078, - 0x5888, 0x007c, 0x1078, 0x6bc7, 0x0078, 0x6ae5, 0x1078, 0x6bda, - 0x0078, 0x6ae5, 0xa186, 0x0014, 0x00c0, 0x6ae9, 0x1078, 0x578f, - 0x1078, 0x24bf, 0x1078, 0x79c1, 0x00c0, 0x6b11, 0x1078, 0x24e5, - 0x6018, 0xa080, 0x0028, 0x200c, 0x1078, 0x6bc7, 0xa186, 0x007e, - 0x00c0, 0x6b0f, 0x2001, 0x8830, 0x200c, 0xc185, 0x2102, 0x0078, - 0x6ae5, 0x1078, 0x79d5, 0x00c0, 0x6b19, 0x1078, 0x6bc7, 0x0078, - 0x6ae5, 0x6004, 0xa08e, 0x0032, 0x00c0, 0x6b2a, 0x0e7e, 0x0f7e, - 0x2071, 0x8881, 0x2079, 0x0000, 0x1078, 0x27c9, 0x0f7f, 0x0e7f, - 0x0078, 0x6ae5, 0x6004, 0xa08e, 0x0021, 0x0040, 0x6b15, 0xa08e, - 0x0022, 0x1040, 0x6bda, 0x0078, 0x6ae5, 0x6b77, 0x6b79, 0x6b7d, - 0x6b81, 0x6b85, 0x6b89, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, - 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, - 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, - 0x6b75, 0x6b75, 0x6b75, 0x6b8d, 0x6b93, 0x6b75, 0x6b9d, 0x6b93, - 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b93, 0x6b93, 0x6b75, - 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, - 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, 0x6b75, - 0x6b75, 0x6b75, 0x6b93, 0x6b75, 0x6b75, 0x1078, 0x12d2, 0x0078, - 0x6b93, 0x2001, 0x000b, 0x0078, 0x6ba6, 0x2001, 0x0003, 0x0078, - 0x6ba6, 0x2001, 0x0005, 0x0078, 0x6ba6, 0x2001, 0x0001, 0x0078, - 0x6ba6, 0x2001, 0x0009, 0x0078, 0x6ba6, 0x1078, 0x12d2, 0x0078, - 0x6ba5, 0x1078, 0x3f05, 0x1078, 0x578f, 0x6003, 0x0002, 0x6017, - 0x0028, 0x1078, 0x5888, 0x0078, 0x6ba5, 0x1078, 0x578f, 0x6003, - 0x0004, 0x6017, 0x0028, 0x1078, 0x5888, 0x007c, 0x1078, 0x3f05, - 0x1078, 0x578f, 0x6003, 0x0002, 0x037e, 0x2019, 0x885c, 0x2304, - 0xa084, 0xff00, 0x00c0, 0x6bb8, 0x2019, 0x0028, 0x0078, 0x6bc1, - 0x8007, 0xa09a, 0x0004, 0x0048, 0x6bb4, 0x8003, 0x801b, 0x831b, - 0xa318, 0x6316, 0x037f, 0x1078, 0x5888, 0x0078, 0x6ba5, 0x0e7e, - 0x1078, 0x77ed, 0x0040, 0x6bd8, 0x6010, 0x2070, 0x7038, 0xd0fc, - 0x0040, 0x6bd8, 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0100, - 0x0e7f, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, - 0x7037, 0x0103, 0x7023, 0x8001, 0x0e7f, 0x007c, 0x0d7e, 0x6618, - 0x2668, 0x6804, 0xa084, 0x00ff, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, - 0x12d2, 0x6604, 0xa6b6, 0x0028, 0x00c0, 0x6bfa, 0x1078, 0x7a0a, - 0x0078, 0x6c35, 0x6604, 0xa6b6, 0x0029, 0x00c0, 0x6c03, 0x1078, - 0x7a24, 0x0078, 0x6c35, 0x6604, 0xa6b6, 0x001f, 0x00c0, 0x6c0c, - 0x1078, 0x69ac, 0x0078, 0x6c35, 0x6604, 0xa6b6, 0x0000, 0x00c0, - 0x6c15, 0x1078, 0x6a11, 0x0078, 0x6c35, 0x6604, 0xa6b6, 0x0022, - 0x00c0, 0x6c1e, 0x1078, 0x69d5, 0x0078, 0x6c35, 0x6604, 0xa6b6, - 0x003d, 0x00c0, 0x6c27, 0x1078, 0x69f1, 0x0078, 0x6c35, 0xa1b6, - 0x0015, 0x00c0, 0x6c2f, 0x1079, 0x6c3a, 0x0078, 0x6c35, 0xa1b6, - 0x0016, 0x00c0, 0x6c36, 0x1079, 0x6d93, 0x007c, 0x1078, 0x6950, - 0x0078, 0x6c35, 0x6c5e, 0x6c61, 0x6c5e, 0x6ca2, 0x6c5e, 0x6d2f, - 0x6c5e, 0x6c5e, 0x6c5e, 0x6d6b, 0x6c5e, 0x6d81, 0xa1b6, 0x0048, - 0x0040, 0x6c52, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, - 0x1594, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, - 0x7037, 0x0103, 0x0e7f, 0x1078, 0x690e, 0x007c, 0x0005, 0x0005, - 0x007c, 0x0e7e, 0x2071, 0x8800, 0x707c, 0xa086, 0x0074, 0x00c0, - 0x6c8b, 0x1078, 0x84a6, 0x00c0, 0x6c7d, 0x0d7e, 0x6018, 0x2068, - 0x1078, 0x6c8f, 0x0d7f, 0x2001, 0x0006, 0x1078, 0x3f05, 0x1078, - 0x24e5, 0x1078, 0x690e, 0x0078, 0x6c8d, 0x2001, 0x000a, 0x1078, - 0x3f05, 0x1078, 0x24e5, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, - 0x53e6, 0x0078, 0x6c8d, 0x1078, 0x6d1f, 0x0e7f, 0x007c, 0x6800, - 0xd084, 0x0040, 0x6ca1, 0x2001, 0x0000, 0x1078, 0x3ef1, 0x2069, - 0x8851, 0x6804, 0xd0a4, 0x0040, 0x6ca1, 0x2001, 0x0006, 0x1078, - 0x3f2c, 0x007c, 0x0d7e, 0x2011, 0x881f, 0x2204, 0xa086, 0x0074, - 0x00c0, 0x6d1b, 0x1078, 0x6e79, 0x6018, 0x2068, 0xa080, 0x0028, - 0x2014, 0xa286, 0x007e, 0x0040, 0x6cca, 0xa286, 0x0080, 0x00c0, - 0x6cf3, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005, 0x0040, - 0x6ce9, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833, 0x0200, - 0x0078, 0x6ce9, 0x0e7e, 0x0f7e, 0x6813, 0x00ff, 0x6817, 0xfffe, - 0x2071, 0x8830, 0x2e04, 0xa085, 0x0003, 0x2072, 0x2071, 0x8d80, - 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0x881a, 0x206a, - 0x78e6, 0x8e70, 0x2e04, 0x2069, 0x881b, 0x206a, 0x78ea, 0x0f7f, - 0x0e7f, 0x2001, 0x0006, 0x1078, 0x3f05, 0x1078, 0x24e5, 0x1078, - 0x690e, 0x0078, 0x6d1d, 0x0e7e, 0x2071, 0x8830, 0x2e04, 0xd09c, - 0x0040, 0x6d0e, 0x2071, 0x8d80, 0x7108, 0x720c, 0xa18c, 0x00ff, - 0x00c0, 0x6d06, 0xa284, 0xff00, 0x0040, 0x6d0e, 0x6018, 0x2070, - 0x70a0, 0xd0bc, 0x00c0, 0x6d0e, 0x7112, 0x7216, 0x0e7f, 0x2001, - 0x0004, 0x1078, 0x3f05, 0x6003, 0x0001, 0x6007, 0x0003, 0x1078, - 0x53e6, 0x0078, 0x6d1d, 0x1078, 0x6d1f, 0x0d7f, 0x007c, 0x2001, - 0x8800, 0x2004, 0xa086, 0x0003, 0x0040, 0x6d2a, 0x2001, 0x0007, - 0x1078, 0x3f05, 0x1078, 0x24e5, 0x1078, 0x690e, 0x007c, 0x0e7e, - 0x2071, 0x8800, 0x707c, 0xa086, 0x0014, 0x00c0, 0x6d65, 0x7000, - 0xa086, 0x0003, 0x00c0, 0x6d42, 0x6010, 0xa005, 0x00c0, 0x6d42, - 0x1078, 0x31f8, 0x0d7e, 0x6018, 0x2068, 0x1078, 0x400a, 0x1078, - 0x6c8f, 0x0d7f, 0x1078, 0x6e83, 0x00c0, 0x6d65, 0x2001, 0x0006, - 0x1078, 0x3f05, 0x0e7e, 0x6010, 0xa005, 0x0040, 0x6d5e, 0x2070, - 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0200, 0x0e7f, 0x1078, - 0x24e5, 0x1078, 0x690e, 0x0078, 0x6d69, 0x1078, 0x6bc7, 0x1078, - 0x6d1f, 0x0e7f, 0x007c, 0x2011, 0x881f, 0x2204, 0xa086, 0x0014, - 0x00c0, 0x6d7e, 0x2001, 0x0002, 0x1078, 0x3f05, 0x6003, 0x0001, - 0x6007, 0x0001, 0x1078, 0x53e6, 0x0078, 0x6d80, 0x1078, 0x6d1f, - 0x007c, 0x2011, 0x881f, 0x2204, 0xa086, 0x0004, 0x00c0, 0x6d90, - 0x2001, 0x0007, 0x1078, 0x3f05, 0x1078, 0x690e, 0x0078, 0x6d92, - 0x1078, 0x6d1f, 0x007c, 0x6c5e, 0x6d9f, 0x6c5e, 0x6dc7, 0x6c5e, - 0x6e2c, 0x6c5e, 0x6c5e, 0x6c5e, 0x6e41, 0x6c5e, 0x6e54, 0x0d7e, - 0x0c7e, 0x1078, 0x6e67, 0x00c0, 0x6db5, 0x2001, 0x0000, 0x1078, - 0x3ef1, 0x2001, 0x0002, 0x1078, 0x3f05, 0x6003, 0x0001, 0x6007, - 0x0002, 0x1078, 0x53e6, 0x0078, 0x6dc4, 0x2009, 0x8d8f, 0x2104, - 0xa084, 0xff00, 0xa086, 0x1900, 0x00c0, 0x6dc2, 0x1078, 0x690e, - 0x0078, 0x6dc4, 0x1078, 0x6d1f, 0x0c7f, 0x0d7f, 0x007c, 0x1078, - 0x6e76, 0x00c0, 0x6ddb, 0x2001, 0x0000, 0x1078, 0x3ef1, 0x2001, - 0x0002, 0x1078, 0x3f05, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, - 0x53e6, 0x0078, 0x6e07, 0x1078, 0x6bc7, 0x2009, 0x8d8e, 0x2134, - 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040, 0x6e08, 0xa686, 0x000b, - 0x0040, 0x6e05, 0x2009, 0x8d8f, 0x2104, 0xa084, 0xff00, 0x00c0, - 0x6df5, 0xa686, 0x0009, 0x0040, 0x6e08, 0xa086, 0x1900, 0x00c0, - 0x6e05, 0xa686, 0x0009, 0x0040, 0x6e08, 0x2001, 0x0004, 0x1078, - 0x3f05, 0x1078, 0x690e, 0x0078, 0x6e07, 0x1078, 0x6d1f, 0x007c, - 0x0d7e, 0x6010, 0x2068, 0x1078, 0x77ed, 0x0040, 0x6e16, 0x6838, - 0xd0fc, 0x0040, 0x6e16, 0x0d7f, 0x0078, 0x6e05, 0x6018, 0x2068, - 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x6e27, 0x8001, 0x6842, - 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f, 0x0078, 0x6e07, 0x1078, - 0x24bf, 0x0d7f, 0x0078, 0x6e05, 0x1078, 0x6e76, 0x00c0, 0x6e3c, - 0x2001, 0x0004, 0x1078, 0x3f05, 0x6003, 0x0001, 0x6007, 0x0003, - 0x1078, 0x53e6, 0x0078, 0x6e40, 0x1078, 0x6bc7, 0x1078, 0x6d1f, - 0x007c, 0x1078, 0x6e76, 0x00c0, 0x6e51, 0x2001, 0x0008, 0x1078, - 0x3f05, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x53e6, 0x0078, - 0x6e53, 0x1078, 0x6d1f, 0x007c, 0x1078, 0x6e76, 0x00c0, 0x6e64, - 0x2001, 0x000a, 0x1078, 0x3f05, 0x6003, 0x0001, 0x6007, 0x0001, - 0x1078, 0x53e6, 0x0078, 0x6e66, 0x1078, 0x6d1f, 0x007c, 0x2009, - 0x8d8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x6e75, 0x2009, 0x8d8f, - 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085, 0x0001, - 0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078, 0x3fa0, - 0x017f, 0x0c7f, 0x007c, 0x0e7e, 0x2071, 0x8d8c, 0x7004, 0xa086, - 0x0014, 0x00c0, 0x6ea3, 0x7008, 0xa086, 0x0800, 0x00c0, 0x6ea3, - 0x700c, 0xd0ec, 0x0040, 0x6ea1, 0xa084, 0x0f00, 0xa086, 0x0100, - 0x00c0, 0x6ea1, 0x7024, 0xd0a4, 0x0040, 0x6ea1, 0xa006, 0x0078, - 0x6ea3, 0xa085, 0x0001, 0x0e7f, 0x007c, 0x0e7e, 0x0d7e, 0x0c7e, - 0x077e, 0x057e, 0x047e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000, - 0x2029, 0x8aab, 0x252c, 0x2021, 0x8ab1, 0x2424, 0x2061, 0x8f00, - 0x2071, 0x8800, 0x7244, 0x7060, 0xa202, 0x00c8, 0x6efa, 0x1078, - 0x870c, 0x0040, 0x6ef2, 0x671c, 0xa786, 0x0001, 0x0040, 0x6ef2, - 0xa786, 0x0007, 0x0040, 0x6ef2, 0x2500, 0xac06, 0x0040, 0x6ef2, - 0x2400, 0xac06, 0x0040, 0x6ef2, 0x0c7e, 0x6000, 0xa086, 0x0004, - 0x00c0, 0x6edc, 0x1078, 0x16af, 0x6010, 0x2068, 0x1078, 0x77ed, - 0x0040, 0x6eef, 0xa786, 0x0003, 0x00c0, 0x6f04, 0x6837, 0x0103, - 0x6b4a, 0x6847, 0x0000, 0x1078, 0x4376, 0x1078, 0x799b, 0x1078, - 0x79a8, 0x0c7f, 0xace0, 0x000c, 0x7054, 0xac02, 0x00c8, 0x6efa, - 0x0078, 0x6eba, 0x127f, 0x007f, 0x027f, 0x047f, 0x057f, 0x077f, - 0x0c7f, 0x0d7f, 0x0e7f, 0x007c, 0xa786, 0x0006, 0x00c0, 0x6ee6, - 0x1078, 0x86aa, 0x0078, 0x6eef, 0x220c, 0x2304, 0xa106, 0x00c0, - 0x6f17, 0x8210, 0x8318, 0x00f0, 0x6f0c, 0xa006, 0x007c, 0x2304, - 0xa102, 0x0048, 0x6f1f, 0x2001, 0x0001, 0x0078, 0x6f21, 0x2001, - 0x0000, 0xa18d, 0x0001, 0x007c, 0x6004, 0xa08a, 0x0040, 0x10c8, - 0x12d2, 0x1078, 0x79c1, 0x0040, 0x6f33, 0x1078, 0x79d5, 0x0040, - 0x6f3c, 0x0078, 0x6f35, 0x1078, 0x24e5, 0x1078, 0x578f, 0x1078, - 0x690e, 0x1078, 0x5888, 0x007c, 0x1078, 0x6bc7, 0x0078, 0x6f35, - 0xa182, 0x0040, 0x0079, 0x6f44, 0x6f57, 0x6f57, 0x6f57, 0x6f57, - 0x6f57, 0x6f57, 0x6f57, 0x6f57, 0x6f57, 0x6f57, 0x6f57, 0x6f59, - 0x6f59, 0x6f59, 0x6f59, 0x6f57, 0x6f57, 0x6f57, 0x6f59, 0x1078, - 0x12d2, 0x6003, 0x0001, 0x6106, 0x1078, 0x5399, 0x127e, 0x2091, - 0x8000, 0x1078, 0x5888, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0, - 0x6f6e, 0x6004, 0xa082, 0x0040, 0x0079, 0x6ff6, 0xa186, 0x0027, - 0x00c0, 0x6f8d, 0x1078, 0x578f, 0x1078, 0x24bf, 0x0d7e, 0x6110, - 0x2168, 0x1078, 0x77ed, 0x0040, 0x6f87, 0x6837, 0x0103, 0x684b, - 0x0029, 0x6847, 0x0000, 0x1078, 0x4376, 0x1078, 0x799b, 0x0d7f, - 0x1078, 0x690e, 0x1078, 0x5888, 0x007c, 0xa186, 0x0014, 0x00c0, - 0x6f96, 0x6004, 0xa082, 0x0040, 0x0079, 0x6fbe, 0xa186, 0x0046, - 0x0040, 0x6fa2, 0xa186, 0x0045, 0x0040, 0x6fa2, 0xa186, 0x0047, - 0x10c0, 0x12d2, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x6fbb, - 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x5273, - 0x027f, 0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0, - 0x6fbb, 0x0078, 0x7020, 0x1078, 0x6950, 0x007c, 0x6fd3, 0x6fd1, - 0x6fd1, 0x6fd1, 0x6fd1, 0x6fd1, 0x6fd1, 0x6fd1, 0x6fd1, 0x6fd1, - 0x6fd1, 0x6fef, 0x6fef, 0x6fef, 0x6fef, 0x6fd1, 0x6fd1, 0x6fd1, - 0x6fef, 0x1078, 0x12d2, 0x1078, 0x578f, 0x0d7e, 0x6110, 0x2168, - 0x1078, 0x77ed, 0x0040, 0x6fe9, 0x6837, 0x0103, 0x684b, 0x0006, - 0x6847, 0x0000, 0x6850, 0xc0ec, 0x6852, 0x1078, 0x4376, 0x1078, - 0x799b, 0x0d7f, 0x1078, 0x690e, 0x1078, 0x5888, 0x007c, 0x1078, - 0x578f, 0x1078, 0x690e, 0x1078, 0x5888, 0x007c, 0x700b, 0x7009, - 0x7009, 0x7009, 0x7009, 0x7009, 0x7009, 0x7009, 0x7009, 0x7009, - 0x7009, 0x7019, 0x7019, 0x7019, 0x7019, 0x7009, 0x7009, 0x7009, - 0x7019, 0x1078, 0x12d2, 0x1078, 0x578f, 0x6003, 0x0002, 0x1078, - 0x5888, 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, - 0x007c, 0x1078, 0x578f, 0x6003, 0x000f, 0x1078, 0x5888, 0x007c, - 0xa182, 0x0040, 0x0079, 0x7024, 0x7037, 0x7037, 0x7037, 0x7037, - 0x7037, 0x7039, 0x70cf, 0x70ef, 0x7037, 0x7037, 0x7037, 0x7037, - 0x7037, 0x7037, 0x7037, 0x7037, 0x7037, 0x7037, 0x7037, 0x1078, - 0x12d2, 0x0e7e, 0x0d7e, 0x2071, 0x8d8c, 0x6110, 0x2168, 0x7614, - 0xa6b4, 0x0fff, 0x86ff, 0x0040, 0x70b3, 0xa68c, 0x0c00, 0x0040, - 0x704d, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, - 0x0002, 0x0040, 0x706b, 0xa186, 0x0028, 0x00c0, 0x705d, 0x1078, - 0x79af, 0x684b, 0x001c, 0x0078, 0x706d, 0xd6dc, 0x0040, 0x7064, - 0x684b, 0x0015, 0x0078, 0x706d, 0xd6d4, 0x0040, 0x706b, 0x684b, - 0x0007, 0x0078, 0x706d, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, - 0xa01e, 0xd6c4, 0x0040, 0x708d, 0xa686, 0x0100, 0x00c0, 0x7081, - 0x2001, 0x8d99, 0x2004, 0xa005, 0x00c0, 0x7081, 0xc6c4, 0x0078, - 0x7042, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, 0x8d98, - 0xad90, 0x0019, 0x1078, 0x7589, 0x037f, 0xd6cc, 0x0040, 0x70c3, - 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x70a1, 0x2071, 0x8d98, - 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x7589, 0x0078, - 0x70c3, 0x6838, 0xd0fc, 0x0040, 0x70aa, 0x2009, 0x0020, 0x695a, - 0x0078, 0x7096, 0x0f7e, 0x2d78, 0x1078, 0x7521, 0x0f7f, 0x1078, - 0x7576, 0x0078, 0x70c5, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, - 0x684c, 0xd0ac, 0x0040, 0x70c3, 0x6810, 0x6914, 0xa115, 0x0040, - 0x70c3, 0x1078, 0x7248, 0x1078, 0x4376, 0x6218, 0x2268, 0x6a3c, - 0x8211, 0x6a3e, 0x0d7f, 0x0e7f, 0x1078, 0x690e, 0x007c, 0x0f7e, - 0x6003, 0x0003, 0x2079, 0x8d8c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, - 0x6010, 0x2078, 0x784c, 0xd0ac, 0x0040, 0x70e2, 0x6003, 0x0002, - 0x0f7f, 0x007c, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, - 0x1078, 0x1b07, 0x1078, 0x5405, 0x1078, 0x5948, 0x007c, 0x6003, - 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, - 0x1594, 0x007c, 0xa182, 0x0040, 0x0079, 0x70fe, 0x7111, 0x7111, - 0x7111, 0x7111, 0x7111, 0x7113, 0x71aa, 0x7111, 0x7111, 0x71c0, - 0x7222, 0x7111, 0x7111, 0x7111, 0x7111, 0x722d, 0x7111, 0x7111, - 0x7111, 0x1078, 0x12d2, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, - 0x8d8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, - 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, - 0x0040, 0x71a5, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040, 0x7134, - 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040, 0x71a5, - 0x1078, 0x132b, 0x1040, 0x12d2, 0x2d00, 0x784a, 0x7f4c, 0xc7cd, - 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, - 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0040, 0x7152, 0x7318, 0x6b62, - 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040, 0x716e, - 0xa186, 0x0028, 0x00c0, 0x7160, 0x684b, 0x001c, 0x0078, 0x7170, - 0xd6dc, 0x0040, 0x7167, 0x684b, 0x0015, 0x0078, 0x7170, 0xd6d4, - 0x0040, 0x716e, 0x684b, 0x0007, 0x0078, 0x7170, 0x684b, 0x0000, - 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0040, - 0x7185, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019, 0x8d98, - 0xad90, 0x0019, 0x1078, 0x7589, 0x037f, 0xd6cc, 0x0040, 0x71a5, - 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x7199, 0x2071, 0x8d98, - 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x7589, 0x0078, - 0x71a5, 0x7838, 0xd0fc, 0x0040, 0x71a2, 0x2009, 0x0020, 0x695a, - 0x0078, 0x718e, 0x2d78, 0x1078, 0x7521, 0x0d7f, 0x0e7f, 0x0f7f, - 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x8d8c, 0x7c04, - 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, - 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x1b07, 0x1078, 0x6217, 0x007c, - 0x0d7e, 0x6003, 0x0002, 0x1078, 0x5837, 0x1078, 0x5948, 0x6110, - 0x2168, 0x694c, 0xd1e4, 0x0040, 0x7220, 0xd1cc, 0x0040, 0x71fb, - 0x6948, 0x6838, 0xd0fc, 0x0040, 0x71f3, 0x017e, 0x684c, 0x007e, - 0x6850, 0x007e, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, - 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0, 0x71e2, - 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, - 0x1354, 0x0078, 0x721e, 0x017e, 0x1078, 0x1354, 0x0d7f, 0x1078, - 0x7576, 0x0078, 0x721e, 0x6837, 0x0103, 0x6944, 0xa184, 0x00ff, - 0xa0b6, 0x0002, 0x0040, 0x721a, 0xa086, 0x0028, 0x00c0, 0x720c, - 0x684b, 0x001c, 0x0078, 0x721c, 0xd1dc, 0x0040, 0x7213, 0x684b, - 0x0015, 0x0078, 0x721c, 0xd1d4, 0x0040, 0x721a, 0x684b, 0x0007, - 0x0078, 0x721c, 0x684b, 0x0000, 0x1078, 0x4376, 0x1078, 0x690e, - 0x0d7f, 0x007c, 0x2019, 0x0001, 0x1078, 0x642d, 0x6003, 0x0002, - 0x1078, 0x5837, 0x1078, 0x5948, 0x007c, 0x1078, 0x5837, 0x1078, - 0x24bf, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x77ed, 0x0040, 0x7242, - 0x6837, 0x0103, 0x684b, 0x0029, 0x6847, 0x0000, 0x1078, 0x4376, - 0x1078, 0x799b, 0x0d7f, 0x1078, 0x690e, 0x1078, 0x5948, 0x007c, - 0x684b, 0x0015, 0xd1fc, 0x0040, 0x7254, 0x684b, 0x0007, 0x8002, - 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, - 0x0040, 0x0079, 0x725b, 0x726e, 0x726e, 0x726e, 0x726e, 0x726e, - 0x7270, 0x726e, 0x7324, 0x732c, 0x726e, 0x726e, 0x726e, 0x726e, - 0x726e, 0x726e, 0x726e, 0x726e, 0x726e, 0x726e, 0x1078, 0x12d2, - 0x077e, 0x0f7e, 0x0e7e, 0x0d7e, 0x2071, 0x8d8c, 0x6110, 0x2178, - 0x7614, 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, - 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0040, 0x7314, 0xa694, - 0xff00, 0xa284, 0x0c00, 0x0040, 0x7291, 0x7018, 0x7862, 0x701c, - 0x785e, 0xa284, 0x0300, 0x0040, 0x7311, 0xa686, 0x0100, 0x00c0, - 0x72a3, 0x2001, 0x8d99, 0x2004, 0xa005, 0x00c0, 0x72a3, 0xc6c4, - 0x7e46, 0x0078, 0x7284, 0x1078, 0x132b, 0x1040, 0x12d2, 0x2d00, - 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, - 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, - 0x0040, 0x72be, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, - 0xa186, 0x0002, 0x0040, 0x72da, 0xa186, 0x0028, 0x00c0, 0x72cc, - 0x684b, 0x001c, 0x0078, 0x72dc, 0xd6dc, 0x0040, 0x72d3, 0x684b, - 0x0015, 0x0078, 0x72dc, 0xd6d4, 0x0040, 0x72da, 0x684b, 0x0007, - 0x0078, 0x72dc, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, - 0x6856, 0xa01e, 0xd6c4, 0x0040, 0x72f1, 0x7328, 0x732c, 0x6b56, - 0x037e, 0x2308, 0x2019, 0x8d98, 0xad90, 0x0019, 0x1078, 0x7589, - 0x037f, 0xd6cc, 0x0040, 0x7311, 0x7124, 0x695a, 0xa192, 0x0021, - 0x00c8, 0x7305, 0x2071, 0x8d98, 0x831c, 0x2300, 0xae18, 0xad90, - 0x001d, 0x1078, 0x7589, 0x0078, 0x7311, 0x7838, 0xd0fc, 0x0040, - 0x730e, 0x2009, 0x0020, 0x695a, 0x0078, 0x72fa, 0x2d78, 0x1078, - 0x7521, 0xd6dc, 0x00c0, 0x7317, 0xa006, 0x0078, 0x731d, 0x2001, - 0x0001, 0x2071, 0x8d8c, 0x7218, 0x731c, 0x1078, 0x15e5, 0x0d7f, - 0x0e7f, 0x0f7f, 0x077f, 0x007c, 0x20e1, 0x0005, 0x3d18, 0x3e20, - 0x2c10, 0x1078, 0x1594, 0x007c, 0x0d7e, 0x6003, 0x0002, 0x6110, - 0x2168, 0x694c, 0xd1e4, 0x0040, 0x73c5, 0xd1cc, 0x0040, 0x7395, - 0x6948, 0x6838, 0xd0fc, 0x0040, 0x7371, 0x017e, 0x684c, 0x007e, - 0x6850, 0x007e, 0x684c, 0xd0ac, 0x0040, 0x7357, 0x6810, 0x6914, - 0xa115, 0x0040, 0x7357, 0x1078, 0x7248, 0x0f7e, 0x6948, 0x2178, - 0x6848, 0x784a, 0x6860, 0x7862, 0x685c, 0x785e, 0x0f7f, 0x6948, - 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, - 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0, 0x7360, 0x157f, 0x007f, - 0x6852, 0x007f, 0x684e, 0x017f, 0x2168, 0x1078, 0x1354, 0x0078, - 0x73c3, 0x017e, 0x684c, 0xd0ac, 0x0040, 0x7389, 0x6810, 0x6914, - 0xa115, 0x0040, 0x7389, 0x1078, 0x7248, 0x0f7e, 0x6948, 0x2178, - 0x6848, 0x784a, 0x6860, 0x7862, 0x685c, 0x785e, 0x684c, 0x784e, - 0x0f7f, 0x6948, 0xa188, 0x0013, 0x684c, 0x200a, 0x1078, 0x1354, - 0x0d7f, 0x1078, 0x7576, 0x0078, 0x73c3, 0x6837, 0x0103, 0x6944, - 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0040, 0x73b4, 0xa086, 0x0028, - 0x00c0, 0x73a6, 0x684b, 0x001c, 0x0078, 0x73c1, 0xd1dc, 0x0040, - 0x73ad, 0x684b, 0x0015, 0x0078, 0x73c1, 0xd1d4, 0x0040, 0x73b4, - 0x684b, 0x0007, 0x0078, 0x73c1, 0x684b, 0x0000, 0x684c, 0xd0ac, - 0x0040, 0x73c1, 0x6810, 0x6914, 0xa115, 0x0040, 0x73c1, 0x1078, - 0x7248, 0x1078, 0x4376, 0x1078, 0x690e, 0x0d7f, 0x007c, 0x1078, - 0x578f, 0x0078, 0x73cd, 0x1078, 0x5837, 0x1078, 0x77ed, 0x0040, - 0x73e6, 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0x880c, - 0x210c, 0xd18c, 0x00c0, 0x73f1, 0xd184, 0x00c0, 0x73ed, 0x6108, - 0x694a, 0x6847, 0x0000, 0x1078, 0x4376, 0x0d7f, 0x1078, 0x690e, - 0x1078, 0x5888, 0x1078, 0x5948, 0x007c, 0x684b, 0x0004, 0x0078, - 0x73e1, 0x684b, 0x0004, 0x0078, 0x73e1, 0xa182, 0x0040, 0x0079, - 0x73f9, 0x740c, 0x740c, 0x740c, 0x740c, 0x740c, 0x740e, 0x740c, - 0x7411, 0x740c, 0x740c, 0x740c, 0x740c, 0x740c, 0x740c, 0x740c, - 0x740c, 0x740c, 0x740c, 0x740c, 0x1078, 0x12d2, 0x1078, 0x690e, - 0x007c, 0x007e, 0x027e, 0xa016, 0x1078, 0x1594, 0x027f, 0x007f, - 0x007c, 0xa182, 0x0085, 0x0079, 0x741d, 0x7426, 0x7424, 0x7424, - 0x7424, 0x7424, 0x7424, 0x7424, 0x1078, 0x12d2, 0x6003, 0x000b, - 0x6106, 0x1078, 0x5399, 0x127e, 0x2091, 0x8000, 0x1078, 0x5888, - 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x743c, 0x6004, 0xa082, - 0x0085, 0x2008, 0x0079, 0x7477, 0xa186, 0x0027, 0x00c0, 0x745f, - 0x1078, 0x578f, 0x1078, 0x24bf, 0x0d7e, 0x6010, 0x2068, 0x1078, - 0x77ed, 0x0040, 0x7455, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b, - 0x0029, 0x1078, 0x4376, 0x1078, 0x799b, 0x0d7f, 0x1078, 0x690e, - 0x1078, 0x5888, 0x007c, 0x1078, 0x6950, 0x0078, 0x745a, 0xa186, - 0x0014, 0x00c0, 0x745b, 0x1078, 0x578f, 0x0d7e, 0x6010, 0x2068, - 0x1078, 0x77ed, 0x0040, 0x7455, 0x6837, 0x0103, 0x6847, 0x0000, - 0x684b, 0x0006, 0x6850, 0xc0ec, 0x6852, 0x0078, 0x7451, 0x7480, - 0x747e, 0x747e, 0x747e, 0x747e, 0x747e, 0x7489, 0x1078, 0x12d2, - 0x1078, 0x578f, 0x6017, 0x0014, 0x6003, 0x000c, 0x1078, 0x5888, - 0x007c, 0x1078, 0x578f, 0x6017, 0x0014, 0x6003, 0x000e, 0x1078, - 0x5888, 0x007c, 0xa182, 0x008c, 0x00c8, 0x749c, 0xa182, 0x0085, - 0x0048, 0x749c, 0x0079, 0x749f, 0x1078, 0x6950, 0x007c, 0x74a6, - 0x74a6, 0x74a6, 0x74a6, 0x74a8, 0x74d0, 0x74a6, 0x1078, 0x12d2, - 0x0d7e, 0x1078, 0x799b, 0x1078, 0x77ed, 0x0040, 0x74cc, 0x6010, - 0x2068, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x74bd, 0x684b, - 0x0006, 0xc0ec, 0x6852, 0x0078, 0x74c8, 0xd0bc, 0x0040, 0x74c4, - 0x684b, 0x0002, 0x0078, 0x74c8, 0x684b, 0x0005, 0x1078, 0x7a4e, - 0x6847, 0x0000, 0x1078, 0x4376, 0x1078, 0x690e, 0x0d7f, 0x007c, - 0x0d7e, 0x6010, 0x2068, 0x1078, 0x77ed, 0x0040, 0x74f4, 0x6837, - 0x0103, 0x6850, 0xd0b4, 0x0040, 0x74e3, 0xc0ec, 0x6852, 0x684b, - 0x0006, 0x0078, 0x74ee, 0xd0bc, 0x0040, 0x74ea, 0x684b, 0x0002, - 0x0078, 0x74ee, 0x684b, 0x0005, 0x1078, 0x7a4e, 0x6847, 0x0000, - 0x1078, 0x4376, 0x1078, 0x799b, 0x0d7f, 0x1078, 0x690e, 0x007c, - 0x017e, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x77ed, 0x0040, 0x7508, - 0x6837, 0x0103, 0x684b, 0x0028, 0x6847, 0x0000, 0x1078, 0x4376, - 0x0d7f, 0x017f, 0xa186, 0x0013, 0x0040, 0x751a, 0xa186, 0x0014, - 0x0040, 0x751a, 0xa186, 0x0027, 0x0040, 0x751a, 0x1078, 0x6950, - 0x0078, 0x7520, 0x1078, 0x578f, 0x1078, 0x79a8, 0x1078, 0x5888, - 0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001, 0xa182, - 0x0101, 0x00c8, 0x752d, 0x0078, 0x752f, 0x2009, 0x0100, 0x2130, - 0x2069, 0x8d98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90, - 0x001d, 0x1078, 0x7589, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0040, - 0x7543, 0x1078, 0x1354, 0x1078, 0x132b, 0x0040, 0x756d, 0x8528, - 0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d, - 0x00c8, 0x7559, 0x2608, 0xad90, 0x000f, 0x1078, 0x7589, 0x0078, - 0x756d, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, 0x000f, - 0x1078, 0x7589, 0x0078, 0x7543, 0x0f7f, 0x852f, 0xa5ad, 0x0003, - 0x7d36, 0xa5ac, 0x0000, 0x0078, 0x7572, 0x0f7f, 0x852f, 0xa5ad, - 0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e, 0x8dff, - 0x0040, 0x7587, 0x6804, 0xa07d, 0x0040, 0x7585, 0x6807, 0x0000, - 0x1078, 0x4376, 0x2f68, 0x0078, 0x757a, 0x1078, 0x4376, 0x0f7f, - 0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x758f, 0x8108, 0x810c, - 0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0, 0x7591, - 0x157f, 0x007c, 0x127e, 0x2091, 0x8000, 0x601c, 0xa084, 0x000f, - 0x1079, 0x75a4, 0x127f, 0x007c, 0x75ba, 0x75ac, 0x75b5, 0x75d3, - 0x75ac, 0x75b5, 0x75ae, 0x75b5, 0x1078, 0x12d2, 0x037e, 0x2019, - 0x0010, 0x1078, 0x831c, 0x037f, 0x007c, 0xa006, 0x007c, 0xa085, - 0x0001, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x77ed, 0x0040, - 0x75d0, 0xa00e, 0x2001, 0x0005, 0x1078, 0x4454, 0x1078, 0x7a4e, - 0x1078, 0x4376, 0x1078, 0x690e, 0xa085, 0x0001, 0x0d7f, 0x007c, - 0xa006, 0x0078, 0x75ce, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x12d2, - 0x1079, 0x75db, 0x007c, 0x75eb, 0x7608, 0x75ed, 0x7619, 0x7604, - 0x75eb, 0x75b5, 0x75ba, 0x75ba, 0x75b5, 0x75b5, 0x75b5, 0x75b5, - 0x75b5, 0x75b5, 0x75b5, 0x1078, 0x12d2, 0x0d7e, 0x6010, 0x2068, - 0x1078, 0x77ed, 0x0040, 0x75f6, 0x1078, 0x7a4e, 0x0d7f, 0x6007, - 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x5399, 0x1078, - 0x5888, 0xa085, 0x0001, 0x007c, 0x1078, 0x16af, 0x0078, 0x75ed, - 0x0e7e, 0x2071, 0x8aa2, 0x7024, 0xac06, 0x00c0, 0x7611, 0x1078, - 0x639b, 0x1078, 0x62b2, 0x0e7f, 0x00c0, 0x75ed, 0x1078, 0x75b5, - 0x007c, 0x037e, 0x0e7e, 0x2071, 0x8aa2, 0x703c, 0xac06, 0x00c0, - 0x7629, 0x2019, 0x0000, 0x1078, 0x642d, 0x0e7f, 0x037f, 0x0078, - 0x75ed, 0x1078, 0x6753, 0x0e7f, 0x037f, 0x00c0, 0x75ed, 0x1078, - 0x75b5, 0x007c, 0x0c7e, 0x601c, 0xa084, 0x000f, 0x1079, 0x763a, - 0x0c7f, 0x007c, 0x7649, 0x76ae, 0x777b, 0x764d, 0x7649, 0x7649, - 0x8311, 0x690e, 0x76ae, 0x1078, 0x79d5, 0x00c0, 0x7649, 0x1078, - 0x6bc7, 0x007c, 0x6017, 0x0001, 0x007c, 0x6010, 0xa080, 0x0019, - 0x2c02, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x12d2, 0x1079, 0x7659, - 0x007c, 0x7669, 0x766b, 0x768b, 0x769d, 0x76aa, 0x7669, 0x7649, - 0x7649, 0x7649, 0x769d, 0x769d, 0x7669, 0x7669, 0x7669, 0x7669, - 0x76a7, 0x1078, 0x12d2, 0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, - 0x7052, 0x2071, 0x8aa2, 0x7024, 0xac06, 0x0040, 0x7687, 0x1078, - 0x62b2, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6017, - 0x0014, 0x1078, 0x5399, 0x1078, 0x5888, 0x0e7f, 0x007c, 0x6017, - 0x0001, 0x0078, 0x7685, 0x0d7e, 0x6010, 0x2068, 0x6850, 0xc0b5, - 0x6852, 0x0d7f, 0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, - 0x1078, 0x5399, 0x1078, 0x5888, 0x007c, 0x0d7e, 0x6017, 0x0001, - 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x007c, 0x1078, - 0x690e, 0x007c, 0x1078, 0x16af, 0x0078, 0x768b, 0x6000, 0xa08a, - 0x0010, 0x10c8, 0x12d2, 0x1079, 0x76b6, 0x007c, 0x76c6, 0x764a, - 0x76c8, 0x76c6, 0x76c8, 0x76c6, 0x76c6, 0x76c6, 0x7643, 0x7643, - 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x76c6, 0x1078, 0x12d2, - 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f, 0xa08a, - 0x000c, 0x10c8, 0x12d2, 0x1079, 0x76d6, 0x007c, 0x76e2, 0x7714, - 0x76e2, 0x7714, 0x76e2, 0x7714, 0x76e4, 0x76ed, 0x76e2, 0x7714, - 0x76e2, 0x76fe, 0x1078, 0x12d2, 0x6004, 0xa08e, 0x0004, 0x0040, - 0x770f, 0xa08e, 0x0002, 0x0040, 0x770f, 0x6004, 0x1078, 0x79d5, - 0x0040, 0x775e, 0xa08e, 0x0021, 0x0040, 0x7762, 0xa08e, 0x0022, - 0x0040, 0x775e, 0xa08e, 0x003d, 0x0040, 0x7762, 0xa08e, 0x0001, - 0x00c0, 0x770d, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, - 0x0d7f, 0xa086, 0x0006, 0x0040, 0x770f, 0x1078, 0x24bf, 0x1078, - 0x6bc7, 0x1078, 0x79a8, 0x007c, 0x0c7e, 0x0d7e, 0x6104, 0xa186, - 0x0016, 0x0040, 0x774e, 0xa186, 0x0002, 0x00c0, 0x773d, 0x6018, - 0x2068, 0x68a0, 0xd0bc, 0x00c0, 0x7766, 0x6840, 0xa084, 0x00ff, - 0xa005, 0x0040, 0x773d, 0x8001, 0x6842, 0x6013, 0x0000, 0x601f, - 0x0007, 0x6017, 0x0398, 0x1078, 0x68a8, 0x0040, 0x773d, 0x2d00, - 0x601a, 0x601f, 0x0001, 0x0078, 0x774e, 0x0d7f, 0x0c7f, 0x1078, - 0x6bc7, 0x1078, 0x24bf, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, - 0x24e5, 0x127f, 0x0e7f, 0x1078, 0x79a8, 0x007c, 0x2001, 0x0002, - 0x1078, 0x3f05, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x53e6, - 0x1078, 0x5888, 0x0d7f, 0x0c7f, 0x0078, 0x774d, 0x1078, 0x6bc7, - 0x0078, 0x7711, 0x1078, 0x6bda, 0x0078, 0x7711, 0x0d7f, 0x0c7f, - 0x1078, 0x6bc7, 0x1078, 0x24bf, 0x0e7e, 0x127e, 0x2091, 0x8000, - 0x1078, 0x24e5, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, - 0x127f, 0x0e7f, 0x007c, 0x6000, 0xa08a, 0x0010, 0x10c8, 0x12d2, - 0x1079, 0x7783, 0x007c, 0x7793, 0x7793, 0x7793, 0x7793, 0x7793, - 0x7793, 0x7793, 0x7793, 0x7793, 0x7649, 0x7793, 0x764a, 0x7795, - 0x764a, 0x779e, 0x7793, 0x1078, 0x12d2, 0x6007, 0x008b, 0x6003, - 0x000d, 0x1078, 0x5399, 0x1078, 0x5888, 0x007c, 0x1078, 0x799b, - 0x1078, 0x77ed, 0x0040, 0x77d6, 0x1078, 0x24bf, 0x0d7e, 0x1078, - 0x77ed, 0x0040, 0x77b8, 0x6010, 0x2068, 0x6837, 0x0103, 0x684b, - 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x1078, 0x4376, - 0x2c68, 0x1078, 0x68a8, 0x0040, 0x77c6, 0x6818, 0x601a, 0x0c7e, - 0x2d60, 0x1078, 0x79a8, 0x0c7f, 0x0078, 0x77c7, 0x2d60, 0x0d7f, - 0x6013, 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, - 0x1078, 0x53e6, 0x1078, 0x5888, 0x0078, 0x77d8, 0x1078, 0x79a8, - 0x007c, 0xa284, 0x0003, 0x00c0, 0x77ea, 0xa282, 0x8f00, 0x0048, - 0x77ea, 0x2001, 0x8815, 0x2004, 0xa202, 0x00c8, 0x77ea, 0xa085, - 0x0001, 0x007c, 0xa006, 0x0078, 0x77e9, 0x027e, 0x0e7e, 0x2071, - 0x8800, 0x6210, 0x7058, 0xa202, 0x0048, 0x77ff, 0x705c, 0xa202, - 0x00c8, 0x77ff, 0xa085, 0x0001, 0x0e7f, 0x027f, 0x007c, 0xa006, - 0x0078, 0x77fc, 0x0e7e, 0x0c7e, 0x037e, 0x007e, 0x127e, 0x2091, - 0x8000, 0x2061, 0x8f00, 0x2071, 0x8800, 0x7344, 0x7060, 0xa302, - 0x00c8, 0x7828, 0x601c, 0xa206, 0x00c0, 0x7820, 0x1078, 0x79d5, - 0x00c0, 0x781c, 0x1078, 0x6bc7, 0x0c7e, 0x1078, 0x690e, 0x0c7f, - 0xace0, 0x000c, 0x7054, 0xac02, 0x00c8, 0x7828, 0x0078, 0x780d, - 0x127f, 0x007f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, - 0x017e, 0xa188, 0x8934, 0x210c, 0x81ff, 0x0040, 0x7846, 0x2061, - 0x8f00, 0x2071, 0x8800, 0x017e, 0x1078, 0x68a8, 0x017f, 0x0040, - 0x7849, 0x611a, 0x1078, 0x24bf, 0x1078, 0x690e, 0xa006, 0x0078, - 0x784b, 0xa085, 0x0001, 0x017f, 0x0c7f, 0x0e7f, 0x007c, 0x0c7e, - 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x68a8, 0x057f, - 0x0040, 0x7868, 0x6612, 0x651a, 0x601f, 0x0003, 0x2009, 0x004b, - 0x1078, 0x6939, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, - 0xa006, 0x0078, 0x7864, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, - 0x62a0, 0x0c7e, 0x1078, 0x68a8, 0x057f, 0x0040, 0x7896, 0x6013, - 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e, 0x2560, 0x1078, 0x418b, - 0x0c7f, 0x1078, 0x54f0, 0x087e, 0x2041, 0x0000, 0x1078, 0x5419, - 0x2c08, 0x1078, 0x84d2, 0x087f, 0x2009, 0x004c, 0x1078, 0x6939, - 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, - 0x7892, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x68a8, 0x2c78, - 0x0c7f, 0x0040, 0x78b5, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, - 0x2021, 0x0005, 0x1078, 0x78f9, 0x0040, 0x78b5, 0x2f60, 0x2009, - 0x004d, 0x1078, 0x6939, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f, - 0x007c, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x68a8, 0x2c78, - 0x0c7f, 0x0040, 0x78d5, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, - 0x2021, 0x0005, 0x1078, 0x78f9, 0x0040, 0x78d5, 0x2f60, 0x2009, - 0x004e, 0x1078, 0x6939, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f, - 0x007c, 0x0f7e, 0x0c7e, 0x047e, 0x0c7e, 0x1078, 0x68a8, 0x2c78, - 0x0c7f, 0x0040, 0x78f5, 0x7e12, 0x2c00, 0x781a, 0x781f, 0x0003, - 0x2021, 0x0004, 0x1078, 0x78f9, 0x0040, 0x78f5, 0x2f60, 0x2009, - 0x0052, 0x1078, 0x6939, 0xa085, 0x0001, 0x047f, 0x0c7f, 0x0f7f, - 0x007c, 0x097e, 0x087e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4117, - 0x0040, 0x7906, 0x2001, 0x78fe, 0x0078, 0x790c, 0x1078, 0x40dd, - 0x0040, 0x7915, 0x2001, 0x7906, 0x007e, 0xa00e, 0x2400, 0x1078, - 0x4454, 0x1078, 0x4376, 0x007f, 0x007a, 0x2418, 0x1078, 0x5726, - 0x62a0, 0x2041, 0x0001, 0x2608, 0x1078, 0x550a, 0x1078, 0x5419, - 0x2f08, 0x2648, 0x1078, 0x84d2, 0x613c, 0x81ff, 0x1040, 0x55ae, - 0x127f, 0x087f, 0x097f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, - 0x0c7e, 0x1078, 0x68a8, 0x017f, 0x0040, 0x7945, 0x660a, 0x611a, - 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f, 0x1078, 0x6939, - 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x7942, - 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x68a8, 0x017f, - 0x0040, 0x7961, 0x660a, 0x611a, 0x601f, 0x0008, 0x2d00, 0x6012, - 0x2009, 0x0021, 0x1078, 0x6939, 0xa085, 0x0001, 0x127f, 0x0c7f, - 0x007c, 0xa006, 0x0078, 0x795e, 0x0c7e, 0x127e, 0x2091, 0x8000, - 0x0c7e, 0x1078, 0x68a8, 0x017f, 0x0040, 0x797d, 0x660a, 0x611a, - 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x003d, 0x1078, 0x6939, - 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x797a, - 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078, 0x68a8, 0x017f, - 0x0040, 0x7998, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, - 0x0000, 0x1078, 0x6939, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, - 0xa006, 0x0078, 0x7995, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, - 0x82ff, 0x0040, 0x79a5, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, - 0x6013, 0x0000, 0x601f, 0x0007, 0x6017, 0x0014, 0x007c, 0x067e, - 0x0c7e, 0x0d7e, 0x2031, 0x8852, 0x2634, 0xd6e4, 0x0040, 0x79bd, - 0x6618, 0x2660, 0x6e48, 0x1078, 0x408b, 0x0d7f, 0x0c7f, 0x067f, - 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0002, 0x0040, 0x79d2, - 0xa08e, 0x0003, 0x0040, 0x79d2, 0xa08e, 0x0004, 0x0040, 0x79d2, - 0xa085, 0x0001, 0x017f, 0x007f, 0x007c, 0x007e, 0x017e, 0x6004, - 0xa08e, 0x0000, 0x0040, 0x79ea, 0xa08e, 0x001f, 0x0040, 0x79ea, - 0xa08e, 0x0028, 0x0040, 0x79ea, 0xa08e, 0x0029, 0x0040, 0x79ea, - 0xa085, 0x0001, 0x017f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, - 0x8000, 0x0c7e, 0x1078, 0x68a8, 0x017f, 0x0040, 0x7a07, 0x611a, - 0x601f, 0x0001, 0x2d00, 0x6012, 0x1078, 0x24bf, 0x2009, 0x0028, - 0x1078, 0x6939, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, - 0x0078, 0x7a04, 0xa186, 0x0015, 0x00c0, 0x7a1f, 0x2011, 0x881f, - 0x2204, 0xa086, 0x0074, 0x00c0, 0x7a1f, 0x1078, 0x6e79, 0x6003, - 0x0001, 0x6007, 0x0029, 0x1078, 0x53e6, 0x0078, 0x7a23, 0x1078, - 0x6bc7, 0x1078, 0x690e, 0x007c, 0xa186, 0x0015, 0x00c0, 0x7a41, - 0x2011, 0x881f, 0x2204, 0xa086, 0x0014, 0x00c0, 0x7a41, 0x0d7e, - 0x6018, 0x2068, 0x1078, 0x400a, 0x0d7f, 0x1078, 0x6e83, 0x00c0, - 0x7a41, 0x2001, 0x0006, 0x1078, 0x3f05, 0x1078, 0x69c6, 0x0078, - 0x7a45, 0x1078, 0x6bc7, 0x1078, 0x690e, 0x007c, 0x6848, 0xa086, - 0x0005, 0x00c0, 0x7a4d, 0x1078, 0x7a4e, 0x007c, 0x6850, 0xc0ad, - 0x6852, 0x007c, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d2, - 0x1079, 0x7a5c, 0x067f, 0x007c, 0x7a6c, 0x7d34, 0x7e2d, 0x7a6c, - 0x7a6c, 0x7a6c, 0x7a6c, 0x7a6c, 0x7aa6, 0x7ea4, 0x7a6c, 0x7a6c, - 0x7a6c, 0x7a6c, 0x7a6c, 0x7a6c, 0x1078, 0x12d2, 0x067e, 0x6000, - 0xa0b2, 0x0010, 0x10c8, 0x12d2, 0x1079, 0x7a78, 0x067f, 0x007c, - 0x7a88, 0x82ac, 0x7a88, 0x7a88, 0x7a88, 0x7a88, 0x7a88, 0x7a88, - 0x8276, 0x82fa, 0x7a88, 0x7a88, 0x7a88, 0x7a88, 0x7a88, 0x7a88, - 0x1078, 0x12d2, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12d2, - 0x1079, 0x7a94, 0x067f, 0x007c, 0x7aa4, 0x7ff2, 0x80ac, 0x80d1, - 0x8120, 0x7aa4, 0x81df, 0x819b, 0x7eb0, 0x824e, 0x8262, 0x7aa4, - 0x7aa4, 0x7aa4, 0x7aa4, 0x7aa4, 0x1078, 0x12d2, 0xa1b2, 0x0040, - 0x10c8, 0x12d2, 0x2100, 0x0079, 0x7aad, 0x7aed, 0x7c63, 0x7aed, - 0x7aed, 0x7aed, 0x7c6b, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, - 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, - 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aef, 0x7b3d, 0x7b48, 0x7b82, - 0x7b9d, 0x7bf4, 0x7c4f, 0x7aed, 0x7aed, 0x7c6f, 0x7aed, 0x7aed, - 0x7c7e, 0x7c85, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7cb3, - 0x7aed, 0x7aed, 0x7cbe, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, - 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, - 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x7aed, 0x1078, 0x12d2, 0x1078, - 0x42a2, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x6218, 0x2270, - 0x72a0, 0x027e, 0x2019, 0x0029, 0x1078, 0x54f0, 0x087e, 0x2041, - 0x0000, 0x1078, 0x5419, 0x2c08, 0x1078, 0x84d2, 0x087f, 0x017f, - 0x2e60, 0x1078, 0x418b, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, - 0x6618, 0x0c7e, 0x2660, 0x1078, 0x3fa0, 0x0c7f, 0xa6b0, 0x0001, - 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x7b2f, 0x1078, - 0x8406, 0x00c0, 0x7b7c, 0x1078, 0x83a4, 0x00c0, 0x7b2b, 0x6007, - 0x0008, 0x0078, 0x7c5e, 0x6007, 0x0009, 0x0078, 0x7c5e, 0x1078, - 0x85aa, 0x0040, 0x7b39, 0x1078, 0x8406, 0x0040, 0x7b23, 0x0078, - 0x7b7c, 0x6013, 0x1900, 0x0078, 0x7b2b, 0x6106, 0x1078, 0x834f, - 0x6007, 0x0006, 0x0078, 0x7c5e, 0x6007, 0x0007, 0x0078, 0x7c5e, - 0x1078, 0x8727, 0x00c0, 0x7cd3, 0x0d7e, 0x6618, 0x2668, 0x6e04, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x7b5e, 0xa686, - 0x0004, 0x0040, 0x7b5e, 0x0d7f, 0x0078, 0x7b7c, 0x1078, 0x846c, - 0x00c0, 0x7b77, 0xa686, 0x0006, 0x00c0, 0x7b70, 0x027e, 0x6218, - 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x1078, 0x2507, 0x027f, - 0x1078, 0x400a, 0x6007, 0x000a, 0x0d7f, 0x0078, 0x7c5e, 0x6007, - 0x000b, 0x0d7f, 0x0078, 0x7c5e, 0x1078, 0x24bf, 0x6007, 0x0001, - 0x0078, 0x7c5e, 0x1078, 0x8727, 0x00c0, 0x7cd3, 0x6618, 0x0d7e, - 0x2668, 0x6e04, 0x0d7f, 0xa686, 0x0707, 0x0040, 0x7b7c, 0x027e, - 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x1078, 0x2507, - 0x027f, 0x6007, 0x000c, 0x0078, 0x7c5e, 0x1078, 0x42a2, 0x6618, - 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, - 0x7be1, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0004, 0x0040, 0x7bb4, - 0xa686, 0x0006, 0x00c0, 0x7b7c, 0x1078, 0x847b, 0x00c0, 0x7bbc, - 0x6007, 0x000e, 0x0078, 0x7c5e, 0x047e, 0x6418, 0xa4a0, 0x0028, - 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x047e, 0x1078, 0x24bf, 0x047f, - 0x017e, 0xa006, 0x2009, 0x8852, 0x210c, 0xd1a4, 0x0040, 0x7bdb, - 0x2009, 0x0029, 0x1078, 0x86f5, 0x6018, 0x0d7e, 0x2068, 0x6800, - 0xc0e5, 0x6802, 0x0d7f, 0x017f, 0x047f, 0x6007, 0x0001, 0x0078, - 0x7c5e, 0x1078, 0x85aa, 0x0040, 0x7bee, 0xa6b4, 0xff00, 0x8637, - 0xa686, 0x0006, 0x0040, 0x7bb4, 0x0078, 0x7b7c, 0x6013, 0x1900, - 0x6007, 0x0009, 0x0078, 0x7c5e, 0x1078, 0x42a2, 0x6618, 0xa6b0, - 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x7c3c, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0004, 0x0040, 0x7c0b, 0xa686, - 0x0006, 0x00c0, 0x7b7c, 0x1078, 0x84a6, 0x00c0, 0x7c17, 0x1078, - 0x83a4, 0x00c0, 0x7c17, 0x6007, 0x0010, 0x0078, 0x7c5e, 0x047e, - 0x6418, 0xa4a0, 0x0028, 0x2424, 0xa4a4, 0x00ff, 0x8427, 0x047e, - 0x1078, 0x24bf, 0x047f, 0x017e, 0xa006, 0x2009, 0x8852, 0x210c, - 0xd1a4, 0x0040, 0x7c36, 0x2009, 0x0029, 0x1078, 0x86f5, 0x6018, - 0x0d7e, 0x2068, 0x6800, 0xc0e5, 0x6802, 0x0d7f, 0x017f, 0x047f, - 0x6007, 0x0001, 0x0078, 0x7c5e, 0x1078, 0x85aa, 0x0040, 0x7c49, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x7c0b, 0x0078, - 0x7b7c, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078, 0x7c5e, 0x7030, - 0xa086, 0x6000, 0x0040, 0x7c5c, 0x1078, 0x8727, 0x00c0, 0x7cd3, - 0x1078, 0x7cd6, 0x00c0, 0x7b7c, 0x6007, 0x0012, 0x6003, 0x0001, - 0x1078, 0x53e6, 0x007c, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, - 0x53e6, 0x0078, 0x7c62, 0x6007, 0x0005, 0x0078, 0x7c65, 0x1078, - 0x8727, 0x00c0, 0x7cd3, 0x1078, 0x7cd6, 0x00c0, 0x7b7c, 0x6007, - 0x0020, 0x6003, 0x0001, 0x1078, 0x53e6, 0x007c, 0x6007, 0x0023, - 0x6003, 0x0001, 0x1078, 0x53e6, 0x007c, 0x1078, 0x8727, 0x00c0, - 0x7cd3, 0x1078, 0x7cd6, 0x00c0, 0x7b7c, 0x017e, 0x027e, 0x2011, - 0x8d90, 0x2214, 0x2c08, 0x1078, 0x86c1, 0x00c0, 0x7ca7, 0x2160, - 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0x8d89, 0x2214, 0xa296, - 0xffff, 0x00c0, 0x7cac, 0x6007, 0x0025, 0x0078, 0x7cac, 0x1078, - 0x690e, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x53e6, - 0x027f, 0x017f, 0x007c, 0x6106, 0x1078, 0x7ce9, 0x6007, 0x002b, - 0x0078, 0x7c5e, 0x6007, 0x002c, 0x0078, 0x7c5e, 0x1078, 0x8727, - 0x00c0, 0x7cd3, 0x1078, 0x7cd6, 0x00c0, 0x7b7c, 0x6106, 0x1078, - 0x7cee, 0x00c0, 0x7ccf, 0x6007, 0x002e, 0x0078, 0x7c5e, 0x6007, - 0x002f, 0x0078, 0x7c5e, 0x1078, 0x690e, 0x007c, 0x0d7e, 0x6618, - 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, - 0x7ce7, 0xa686, 0x0004, 0x0040, 0x7ce7, 0xa085, 0x0001, 0x0d7f, - 0x007c, 0x0d7e, 0x1078, 0x7d1b, 0x0d7f, 0x007c, 0x0d7e, 0x1078, - 0x7d2a, 0x00c0, 0x7d14, 0x680c, 0xa08c, 0xff00, 0x6824, 0xa084, - 0x00ff, 0xa115, 0x6212, 0xd1e4, 0x0040, 0x7d02, 0x2009, 0x0001, - 0x0078, 0x7d10, 0xd1ec, 0x0040, 0x7d14, 0x6920, 0xa18c, 0x00ff, - 0x6824, 0x1078, 0x2245, 0x00c0, 0x7d14, 0x2110, 0x2009, 0x0000, - 0x1078, 0x2507, 0x0078, 0x7d18, 0xa085, 0x0001, 0x0078, 0x7d19, - 0xa006, 0x0d7f, 0x007c, 0x2069, 0x8d8d, 0x6800, 0xa082, 0x0010, - 0x00c8, 0x7d28, 0x6013, 0x0000, 0xa085, 0x0001, 0x0078, 0x7d29, - 0xa006, 0x007c, 0x6013, 0x0000, 0x2069, 0x8d8c, 0x6808, 0xa084, - 0xff00, 0xa086, 0x0800, 0x007c, 0x6004, 0xa0b2, 0x0040, 0x10c8, - 0x12d2, 0xa1b6, 0x0013, 0x00c0, 0x7d40, 0x2008, 0x0079, 0x7d53, - 0xa1b6, 0x0027, 0x0040, 0x7d48, 0xa1b6, 0x0014, 0x10c0, 0x12d2, - 0x2001, 0x0007, 0x1078, 0x3f2c, 0x1078, 0x578f, 0x1078, 0x79a8, - 0x1078, 0x5888, 0x007c, 0x7d93, 0x7d95, 0x7d93, 0x7d93, 0x7d93, - 0x7d95, 0x7d9d, 0x7e08, 0x7dcb, 0x7e08, 0x7ddf, 0x7e08, 0x7d9d, - 0x7e08, 0x7e00, 0x7e08, 0x7e00, 0x7e08, 0x7e08, 0x7d93, 0x7d93, - 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7d93, - 0x7d93, 0x7d93, 0x7d93, 0x7e08, 0x7d93, 0x7d93, 0x7e08, 0x7d93, - 0x7e08, 0x7e08, 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7e08, 0x7e08, - 0x7d93, 0x7e08, 0x7e08, 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7d93, - 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7d93, 0x7d93, - 0x7d93, 0x7d93, 0x7d93, 0x1078, 0x12d2, 0x1078, 0x578f, 0x6003, - 0x0002, 0x1078, 0x5888, 0x0078, 0x7e0e, 0x0f7e, 0x2079, 0x8851, - 0x7804, 0x0f7f, 0xd0ac, 0x00c0, 0x7e08, 0x2001, 0x0000, 0x1078, - 0x3ef1, 0x6018, 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x0040, - 0x7e08, 0x2001, 0x0002, 0x1078, 0x3f05, 0x1078, 0x578f, 0x601f, - 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x53e6, 0x1078, - 0x5888, 0x0c7e, 0x6118, 0x2160, 0x2009, 0x0001, 0x1078, 0x50ff, - 0x0c7f, 0x0078, 0x7e0e, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x7e08, 0xa686, - 0x0004, 0x0040, 0x7e08, 0x2001, 0x0004, 0x0078, 0x7e06, 0x2001, - 0x8800, 0x2004, 0xa086, 0x0003, 0x00c0, 0x7de8, 0x1078, 0x31f8, - 0x2001, 0x0006, 0x1078, 0x7e0f, 0x6618, 0x0d7e, 0x2668, 0x6e04, - 0x0d7f, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040, 0x7e08, - 0x2001, 0x0006, 0x0078, 0x7e06, 0x2001, 0x0004, 0x0078, 0x7e06, - 0x2001, 0x0006, 0x1078, 0x7e0f, 0x0078, 0x7e08, 0x1078, 0x3f2c, - 0x1078, 0x578f, 0x1078, 0x690e, 0x1078, 0x5888, 0x007c, 0x017e, - 0x0d7e, 0x6118, 0x2168, 0x6900, 0xd184, 0x0040, 0x7e2a, 0x6104, - 0xa18e, 0x000a, 0x00c0, 0x7e22, 0x699c, 0xd1a4, 0x00c0, 0x7e22, - 0x2001, 0x0007, 0x1078, 0x3f05, 0x2001, 0x0000, 0x1078, 0x3ef1, - 0x1078, 0x24e5, 0x0d7f, 0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, - 0x6804, 0xa084, 0xff00, 0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, - 0x12d2, 0xa1b6, 0x0015, 0x00c0, 0x7e41, 0x1079, 0x7e48, 0x0078, - 0x7e47, 0xa1b6, 0x0016, 0x10c0, 0x12d2, 0x1079, 0x7e89, 0x007c, - 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, 0x7e54, - 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, 0x0f7e, 0x2079, 0x8851, 0x7804, - 0x0f7f, 0xd0ac, 0x00c0, 0x7e70, 0x2001, 0x0000, 0x1078, 0x3ef1, - 0x2001, 0x0002, 0x1078, 0x3f05, 0x601f, 0x0001, 0x6003, 0x0001, - 0x6007, 0x0002, 0x1078, 0x53e6, 0x1078, 0x5888, 0x0078, 0x7e88, - 0x2011, 0x8d83, 0x2204, 0x8211, 0x220c, 0x1078, 0x2245, 0x00c0, - 0x7e88, 0x0c7e, 0x1078, 0x3f8e, 0x0040, 0x7e83, 0x0c7f, 0x1078, - 0x690e, 0x0078, 0x7e88, 0x1078, 0x3d31, 0x0c7f, 0x1078, 0x690e, - 0x007c, 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, - 0x7e95, 0x6c5e, 0x6c5e, 0x6c5e, 0x6c5e, 0x1078, 0x6e76, 0x00c0, - 0x7ea1, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078, 0x53e6, 0x0078, - 0x7ea3, 0x1078, 0x690e, 0x007c, 0x6004, 0xa08a, 0x0040, 0x10c8, - 0x12d2, 0x1078, 0x578f, 0x1078, 0x79a8, 0x1078, 0x5888, 0x007c, - 0xa182, 0x0040, 0x0079, 0x7eb4, 0x7ec7, 0x7ec7, 0x7ec7, 0x7ec7, - 0x7ec9, 0x7ec7, 0x7ec7, 0x7ec7, 0x7ec7, 0x7ec7, 0x7ec7, 0x7ec7, - 0x7ec7, 0x7ec7, 0x7ec7, 0x7ec7, 0x7ec7, 0x7ec7, 0x7ec7, 0x1078, - 0x12d2, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e, 0x027e, 0x6106, - 0x2071, 0x8d80, 0x7444, 0xa4a4, 0xff00, 0x0040, 0x7f3e, 0xa486, - 0x2000, 0x0040, 0x7ef3, 0xa486, 0x0400, 0x0040, 0x7ef3, 0xa486, - 0x1000, 0x0040, 0x7ee5, 0x0078, 0x7ef9, 0x2069, 0x8b24, 0x6a00, - 0xd284, 0x0040, 0x7fab, 0x1078, 0x5253, 0x0040, 0x7fd6, 0xc2cd, - 0x6a02, 0x0078, 0x7ef9, 0x2009, 0x0001, 0x2011, 0x0200, 0x1078, - 0x5243, 0x1078, 0x132b, 0x1040, 0x12d2, 0x6003, 0x0007, 0x2d00, - 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, - 0x685e, 0x6008, 0x68b2, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, - 0x694a, 0x017e, 0xa084, 0xff00, 0x6846, 0x684f, 0x0000, 0x6857, - 0x0036, 0x1078, 0x4376, 0x017f, 0xa486, 0x2000, 0x00c0, 0x7f26, - 0x2019, 0x0017, 0x1078, 0x8683, 0x0078, 0x7f98, 0xa486, 0x0400, - 0x00c0, 0x7f30, 0x2019, 0x0002, 0x1078, 0x8644, 0x0078, 0x7f98, - 0xa486, 0x0200, 0x00c0, 0x7f36, 0x1078, 0x8631, 0xa486, 0x1000, - 0x00c0, 0x7f3c, 0x1078, 0x8670, 0x0078, 0x7f98, 0x2069, 0x8b24, - 0x6a00, 0xd284, 0x0040, 0x7fee, 0xa284, 0x0300, 0x00c0, 0x7fe6, - 0x6804, 0xa005, 0x0040, 0x7fd6, 0x2d78, 0x6003, 0x0007, 0x1078, - 0x1310, 0x0040, 0x7f9f, 0x7800, 0xd08c, 0x00c0, 0x7f5a, 0x7804, - 0x8001, 0x7806, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, - 0x683b, 0x0000, 0x6008, 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, - 0x78a0, 0x8007, 0x7130, 0x6986, 0x6846, 0x6853, 0x003d, 0x7244, - 0xa294, 0x0003, 0xa286, 0x0002, 0x00c0, 0x7f7a, 0x684f, 0x0040, - 0x0078, 0x7f84, 0xa286, 0x0001, 0x00c0, 0x7f82, 0x684f, 0x0080, - 0x0078, 0x7f84, 0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, 0x8d90, - 0xad90, 0x0015, 0x200c, 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, - 0x7f8a, 0x200c, 0x6982, 0x8000, 0x200c, 0x697e, 0x1078, 0x4376, - 0x027f, 0x047f, 0x157f, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x6013, - 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x5399, 0x1078, - 0x5888, 0x0078, 0x7f98, 0x2069, 0x8d92, 0x2d04, 0xa084, 0xff00, - 0xa086, 0x1200, 0x00c0, 0x7fca, 0x2069, 0x8d80, 0x686c, 0xa084, - 0x00ff, 0x017e, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, - 0x6003, 0x0001, 0x6007, 0x0043, 0x1078, 0x5399, 0x1078, 0x5888, - 0x0078, 0x7f98, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, - 0x1078, 0x5399, 0x1078, 0x5888, 0x0078, 0x7f98, 0x6013, 0x0300, - 0x0078, 0x7fdc, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, - 0x1078, 0x5399, 0x1078, 0x5888, 0x0078, 0x7f98, 0x6013, 0x0500, - 0x0078, 0x7fdc, 0x6013, 0x0600, 0x0078, 0x7fab, 0x6013, 0x0200, - 0x0078, 0x7fab, 0xa186, 0x0013, 0x00c0, 0x8004, 0x6004, 0xa08a, - 0x0040, 0x1048, 0x12d2, 0xa08a, 0x0053, 0x10c8, 0x12d2, 0xa082, - 0x0040, 0x2008, 0x0079, 0x806b, 0xa186, 0x0047, 0x00c0, 0x8026, - 0x6004, 0xa086, 0x0041, 0x0040, 0x8034, 0x2001, 0x0109, 0x2004, - 0xd084, 0x0040, 0x8034, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, - 0x027e, 0x1078, 0x5273, 0x027f, 0x017f, 0x007f, 0x127f, 0x6000, - 0xa086, 0x0002, 0x00c0, 0x8034, 0x0078, 0x80ac, 0xa186, 0x0027, - 0x0040, 0x802e, 0xa186, 0x0014, 0x10c0, 0x12d2, 0x6004, 0xa082, - 0x0040, 0x2008, 0x0079, 0x8037, 0x1078, 0x6950, 0x007c, 0x804a, - 0x804c, 0x804c, 0x804a, 0x804a, 0x804a, 0x804a, 0x804a, 0x804a, - 0x804a, 0x804a, 0x804a, 0x804a, 0x804a, 0x804a, 0x804a, 0x804a, - 0x804a, 0x804a, 0x1078, 0x12d2, 0x1078, 0x578f, 0x1078, 0x5888, - 0x037e, 0x0d7e, 0x6010, 0xa06d, 0x0040, 0x8068, 0xad84, 0xf000, - 0x0040, 0x8068, 0x2019, 0x0004, 0x1078, 0x86aa, 0x6013, 0x0000, - 0x6014, 0xa005, 0x00c0, 0x8066, 0x6017, 0x0014, 0x6003, 0x0007, - 0x0d7f, 0x037f, 0x007c, 0x807e, 0x809d, 0x8087, 0x80a6, 0x807e, - 0x807e, 0x807e, 0x807e, 0x807e, 0x807e, 0x807e, 0x807e, 0x807e, - 0x807e, 0x807e, 0x807e, 0x807e, 0x807e, 0x807e, 0x1078, 0x12d2, - 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400, 0x200a, 0x1078, - 0x578f, 0x6010, 0xa080, 0x0013, 0x2004, 0xd0b4, 0x0040, 0x8098, - 0x6003, 0x0007, 0x2009, 0x0043, 0x1078, 0x6939, 0x0078, 0x809a, - 0x6003, 0x0002, 0x1078, 0x5888, 0x007c, 0x1078, 0x578f, 0x1078, - 0x5219, 0x1078, 0x690e, 0x1078, 0x5888, 0x007c, 0x1078, 0x578f, - 0x2009, 0x0041, 0x0078, 0x819b, 0xa182, 0x0040, 0x0079, 0x80b0, - 0x80c3, 0x80c5, 0x80c3, 0x80c3, 0x80c3, 0x80c3, 0x80c3, 0x80c6, - 0x80c3, 0x80c3, 0x80c3, 0x80c3, 0x80c3, 0x80c3, 0x80c3, 0x80c3, - 0x80c3, 0x80c3, 0x80c3, 0x1078, 0x12d2, 0x007c, 0x6003, 0x0004, - 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1594, - 0x007c, 0xa182, 0x0040, 0x0079, 0x80d5, 0x80e8, 0x80e8, 0x80e8, - 0x80e8, 0x80e8, 0x80e8, 0x80e8, 0x80e8, 0x80e8, 0x80ea, 0x810d, - 0x80e8, 0x80e8, 0x80e8, 0x80e8, 0x810d, 0x80e8, 0x80e8, 0x80e8, - 0x1078, 0x12d2, 0x1078, 0x5837, 0x1078, 0x5948, 0x6010, 0x0d7e, - 0x2068, 0x684c, 0xd0fc, 0x0040, 0x8100, 0xa08c, 0x0003, 0xa18e, - 0x0002, 0x0040, 0x8106, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x819b, - 0x6003, 0x0007, 0x1078, 0x5219, 0x0d7f, 0x007c, 0x1078, 0x5219, - 0x1078, 0x690e, 0x0d7f, 0x0078, 0x8105, 0x037e, 0x1078, 0x5837, - 0x1078, 0x5948, 0x6010, 0x0d7e, 0x2068, 0x2019, 0x0004, 0x1078, - 0x86aa, 0x1078, 0x79a8, 0x6017, 0x0028, 0x0d7f, 0x037f, 0x007c, - 0xa186, 0x0013, 0x00c0, 0x812e, 0x6004, 0xa086, 0x0042, 0x10c0, - 0x12d2, 0x1078, 0x578f, 0x1078, 0x5888, 0x007c, 0xa186, 0x0027, - 0x0040, 0x8136, 0xa186, 0x0014, 0x00c0, 0x8146, 0x6004, 0xa086, - 0x0042, 0x10c0, 0x12d2, 0x2001, 0x0007, 0x1078, 0x3f2c, 0x1078, - 0x578f, 0x1078, 0x79a8, 0x1078, 0x5888, 0x007c, 0xa182, 0x0040, - 0x0079, 0x814a, 0x815d, 0x815d, 0x815d, 0x815d, 0x815d, 0x815d, - 0x815d, 0x815f, 0x816b, 0x815d, 0x815d, 0x815d, 0x815d, 0x815d, - 0x815d, 0x815d, 0x815d, 0x815d, 0x815d, 0x1078, 0x12d2, 0x037e, - 0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x1594, - 0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068, 0x6810, 0x6a14, - 0xa20d, 0x00c0, 0x8182, 0x684c, 0xd0fc, 0x0040, 0x817c, 0x2009, - 0x0041, 0x0d7f, 0x0078, 0x819b, 0x6003, 0x0007, 0x1078, 0x5219, - 0x0d7f, 0x007c, 0x6003, 0x0006, 0x1078, 0x818a, 0x1078, 0x521b, - 0x0d7f, 0x007c, 0xd2fc, 0x0040, 0x8196, 0x8002, 0x8000, 0x8212, - 0xa291, 0x0000, 0x2009, 0x0009, 0x0078, 0x8198, 0x2009, 0x0015, - 0x6a6a, 0x6866, 0x007c, 0xa182, 0x0040, 0x0079, 0x819f, 0x81b2, - 0x81b4, 0x81c0, 0x81cc, 0x81b2, 0x81b2, 0x81b2, 0x81db, 0x81b2, - 0x81b2, 0x81b2, 0x81b2, 0x81b2, 0x81b2, 0x81b2, 0x81b2, 0x81b2, - 0x81b2, 0x81b2, 0x1078, 0x12d2, 0x6003, 0x0001, 0x6106, 0x1078, - 0x5399, 0x127e, 0x2091, 0x8000, 0x1078, 0x5888, 0x127f, 0x007c, - 0x6003, 0x0001, 0x6106, 0x1078, 0x5399, 0x127e, 0x2091, 0x8000, - 0x1078, 0x5888, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106, 0x2c10, - 0x1078, 0x1b07, 0x127e, 0x2091, 0x8000, 0x1078, 0x5405, 0x1078, - 0x5948, 0x127f, 0x007c, 0xa016, 0x1078, 0x1594, 0x007c, 0x127e, - 0x2091, 0x8000, 0x037e, 0x0d7e, 0xa182, 0x0040, 0x1079, 0x81ec, - 0x0d7f, 0x037f, 0x127f, 0x007c, 0x81fc, 0x81fe, 0x8213, 0x8232, - 0x81fc, 0x81fc, 0x81fc, 0x824a, 0x81fc, 0x81fc, 0x81fc, 0x81fc, - 0x81fc, 0x81fc, 0x81fc, 0x81fc, 0x1078, 0x12d2, 0x6010, 0x2068, - 0x684c, 0xd0fc, 0x0040, 0x8228, 0xa09c, 0x0003, 0xa39e, 0x0003, - 0x0040, 0x8228, 0x6003, 0x0001, 0x6106, 0x1078, 0x5399, 0x1078, - 0x5888, 0x0078, 0x824d, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, - 0x8228, 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040, 0x8228, 0x6003, - 0x0001, 0x6106, 0x1078, 0x5399, 0x1078, 0x5888, 0x0078, 0x824d, - 0x6013, 0x0000, 0x6017, 0x0000, 0x2019, 0x0004, 0x1078, 0x86aa, - 0x0078, 0x824d, 0x6010, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x8228, - 0xa09c, 0x0003, 0xa39e, 0x0003, 0x0040, 0x8228, 0x6003, 0x0003, - 0x6106, 0x2c10, 0x1078, 0x1b07, 0x1078, 0x5405, 0x1078, 0x5948, - 0x0078, 0x824d, 0xa016, 0x1078, 0x1594, 0x007c, 0x1078, 0x578f, - 0x6110, 0x81ff, 0x0040, 0x825d, 0x0d7e, 0x2168, 0x037e, 0x2019, - 0x0029, 0x1078, 0x86aa, 0x037f, 0x0d7f, 0x1078, 0x79a8, 0x1078, - 0x5888, 0x007c, 0x1078, 0x5837, 0x6110, 0x81ff, 0x0040, 0x8271, - 0x0d7e, 0x2168, 0x037e, 0x2019, 0x0029, 0x1078, 0x86aa, 0x037f, - 0x0d7f, 0x1078, 0x79a8, 0x1078, 0x5948, 0x007c, 0xa182, 0x0085, - 0x0079, 0x827a, 0x8281, 0x8281, 0x8281, 0x8283, 0x8281, 0x8281, - 0x8281, 0x1078, 0x12d2, 0x027e, 0x0e7e, 0x1078, 0x8727, 0x0040, - 0x828d, 0x1078, 0x690e, 0x0078, 0x82a9, 0x2071, 0x8d80, 0x7224, - 0x6212, 0x7220, 0x1078, 0x8575, 0x0040, 0x829a, 0x6007, 0x0086, - 0x0078, 0x82a3, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, 0x00c0, - 0x82a3, 0x6007, 0x0086, 0x6003, 0x0001, 0x1078, 0x5399, 0x1078, - 0x5888, 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x82bd, - 0x6004, 0xa08a, 0x0085, 0x1048, 0x12d2, 0xa08a, 0x008c, 0x10c8, - 0x12d2, 0xa082, 0x0085, 0x0079, 0x82d4, 0xa186, 0x0027, 0x0040, - 0x82c9, 0xa186, 0x0014, 0x0040, 0x82c9, 0x1078, 0x6950, 0x0078, - 0x82d3, 0x2001, 0x0007, 0x1078, 0x3f2c, 0x1078, 0x578f, 0x1078, - 0x79a8, 0x1078, 0x5888, 0x007c, 0x82db, 0x82dd, 0x82dd, 0x82db, - 0x82db, 0x82db, 0x82db, 0x1078, 0x12d2, 0x1078, 0x578f, 0x1078, - 0x690e, 0x1078, 0x5888, 0x007c, 0xa182, 0x0085, 0x1048, 0x12d2, - 0xa182, 0x008c, 0x10c8, 0x12d2, 0xa182, 0x0085, 0x0079, 0x82f0, - 0x82f7, 0x82f7, 0x82f7, 0x82f9, 0x82f7, 0x82f7, 0x82f7, 0x1078, - 0x12d2, 0x007c, 0xa186, 0x0013, 0x0040, 0x830a, 0xa186, 0x0014, - 0x0040, 0x830a, 0xa186, 0x0027, 0x0040, 0x830a, 0x1078, 0x6950, - 0x0078, 0x8310, 0x1078, 0x578f, 0x1078, 0x79a8, 0x1078, 0x5888, - 0x007c, 0x037e, 0x2019, 0x000b, 0x1078, 0x831c, 0x601f, 0x0006, - 0x6003, 0x0007, 0x037f, 0x007c, 0x127e, 0x037e, 0x087e, 0x2091, - 0x8000, 0x2c40, 0x1078, 0x6614, 0x00c0, 0x834b, 0x1078, 0x66be, - 0x00c0, 0x834b, 0x6000, 0xa086, 0x0000, 0x0040, 0x834b, 0x601c, - 0xa086, 0x0007, 0x0040, 0x834b, 0x0d7e, 0x6000, 0xa086, 0x0004, - 0x00c0, 0x833e, 0x601f, 0x0007, 0x1078, 0x16af, 0x6010, 0x2068, - 0x1078, 0x77ed, 0x0040, 0x8346, 0x1078, 0x86aa, 0x0d7f, 0x6013, - 0x0000, 0x601f, 0x0007, 0x087f, 0x037f, 0x127f, 0x007c, 0x0f7e, - 0x0c7e, 0x037e, 0x157e, 0x2079, 0x8d80, 0x7938, 0x783c, 0x1078, - 0x2245, 0x00c0, 0x839d, 0x017e, 0x0c7e, 0x1078, 0x3f8e, 0x00c0, - 0x839d, 0x2011, 0x8d90, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, - 0x6f0c, 0x00c0, 0x839d, 0x017f, 0x027f, 0x027e, 0x017e, 0x2019, - 0x0029, 0x1078, 0x6799, 0x1078, 0x54f0, 0x087e, 0x2041, 0x0000, - 0x1078, 0x5419, 0x087f, 0x017f, 0x087e, 0x2041, 0x0000, 0x1078, - 0x84d2, 0x087f, 0x1078, 0x418b, 0x027e, 0x6204, 0xa294, 0xff00, - 0x8217, 0xa286, 0x0006, 0x0040, 0x8391, 0xa286, 0x0004, 0x00c0, - 0x8394, 0x62a0, 0x1078, 0x2566, 0x027f, 0x017f, 0x1078, 0x3d31, - 0x6612, 0x6516, 0xa006, 0x0078, 0x839f, 0x0c7f, 0x017f, 0x157f, - 0x037f, 0x0c7f, 0x0f7f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x2009, - 0x881f, 0x2104, 0xa086, 0x0074, 0x00c0, 0x83fb, 0x2069, 0x8d8e, - 0x690c, 0xa182, 0x0100, 0x0048, 0x83eb, 0x6908, 0xa184, 0x8000, - 0x0040, 0x83f7, 0xa184, 0x0800, 0x0040, 0x83f7, 0x6910, 0xa18a, - 0x0001, 0x0048, 0x83ef, 0x6914, 0x2069, 0x8dae, 0x6904, 0x81ff, - 0x00c0, 0x83e3, 0x690c, 0xa182, 0x0100, 0x0048, 0x83eb, 0x6908, - 0x81ff, 0x00c0, 0x83e7, 0x6910, 0xa18a, 0x0001, 0x0048, 0x83ef, - 0x6918, 0xa18a, 0x0001, 0x0048, 0x83f7, 0x0078, 0x8401, 0x6013, - 0x0100, 0x0078, 0x83fd, 0x6013, 0x0300, 0x0078, 0x83fd, 0x6013, - 0x0500, 0x0078, 0x83fd, 0x6013, 0x0700, 0x0078, 0x83fd, 0x6013, - 0x0900, 0x0078, 0x83fd, 0x6013, 0x0b00, 0x0078, 0x83fd, 0x6013, - 0x0f00, 0x0078, 0x83fd, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078, - 0x8402, 0xa006, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, - 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, - 0xa286, 0x0006, 0x0040, 0x842a, 0xa286, 0x0004, 0x0040, 0x842a, - 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x842a, 0xa286, - 0x0004, 0x0040, 0x842a, 0x0c7e, 0x2d60, 0x1078, 0x3fa0, 0x0c7f, - 0x0078, 0x8465, 0x2011, 0x8d96, 0xad98, 0x000a, 0x20a9, 0x0004, - 0x1078, 0x6f0c, 0x00c0, 0x8466, 0x2011, 0x8d9a, 0xad98, 0x0006, - 0x20a9, 0x0004, 0x1078, 0x6f0c, 0x00c0, 0x8466, 0x047e, 0x017e, - 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x8852, 0x210c, - 0xd1a4, 0x0040, 0x8452, 0x2009, 0x0029, 0x1078, 0x86f5, 0x6800, - 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x54f0, 0x087e, 0x2041, - 0x0000, 0x1078, 0x5419, 0x2c08, 0x1078, 0x84d2, 0x087f, 0x2001, - 0x0007, 0x1078, 0x3f2c, 0x017f, 0x047f, 0xa006, 0x157f, 0x037f, - 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0x8d8e, 0x6800, - 0xa086, 0x0800, 0x0040, 0x8478, 0x6013, 0x0000, 0x0078, 0x8479, - 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e, 0x037e, - 0x157e, 0x2079, 0x8d8c, 0x7930, 0x7834, 0x1078, 0x2245, 0x00c0, - 0x849f, 0x1078, 0x3f8e, 0x00c0, 0x849f, 0x2011, 0x8d90, 0xac98, - 0x000a, 0x20a9, 0x0004, 0x1078, 0x6f0c, 0x00c0, 0x849f, 0x2011, - 0x8d94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x6f0c, 0x157f, - 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e, 0x007e, - 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0x8d83, 0x2204, 0x8211, - 0x220c, 0x1078, 0x2245, 0x00c0, 0x84cb, 0x1078, 0x3f8e, 0x00c0, - 0x84cb, 0x2011, 0x8d96, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, - 0x6f0c, 0x00c0, 0x84cb, 0x2011, 0x8d9a, 0xac98, 0x0006, 0x20a9, - 0x0004, 0x1078, 0x6f0c, 0x157f, 0x037f, 0x027f, 0x017f, 0x007f, - 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, - 0x027e, 0x127e, 0x2091, 0x8000, 0x2029, 0x8aab, 0x252c, 0x2021, - 0x8ab1, 0x2424, 0x2061, 0x8f00, 0x2071, 0x8800, 0x7644, 0x7060, - 0x8001, 0xa602, 0x00c8, 0x853e, 0x2100, 0xac06, 0x0040, 0x8534, - 0x1078, 0x870c, 0x0040, 0x8534, 0x671c, 0xa786, 0x0001, 0x0040, - 0x8553, 0xa786, 0x0007, 0x0040, 0x8534, 0x2500, 0xac06, 0x0040, - 0x8534, 0x2400, 0xac06, 0x0040, 0x8534, 0x1078, 0x8720, 0x00c0, - 0x8534, 0x88ff, 0x0040, 0x8510, 0x6020, 0xa906, 0x00c0, 0x8534, - 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x851a, 0x017e, 0x1078, - 0x16af, 0x017f, 0x6010, 0x2068, 0x1078, 0x77ed, 0x0040, 0x8531, - 0xa786, 0x0003, 0x00c0, 0x8547, 0x6837, 0x0103, 0x6b4a, 0x6847, - 0x0000, 0x017e, 0x1078, 0x7a46, 0x1078, 0x4376, 0x017f, 0x1078, - 0x799b, 0x0d7f, 0x1078, 0x79a8, 0xace0, 0x000c, 0x2001, 0x8815, - 0x2004, 0xac02, 0x00c8, 0x853e, 0x0078, 0x84e4, 0x127f, 0x027f, - 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, - 0x0006, 0x00c0, 0x8524, 0xa386, 0x0005, 0x0040, 0x8534, 0x1078, - 0x86aa, 0x0078, 0x8531, 0x1078, 0x8720, 0x00c0, 0x8534, 0xa180, - 0x0001, 0x2004, 0xa086, 0x0018, 0x00c0, 0x8534, 0x6000, 0xa086, - 0x0002, 0x00c0, 0x8534, 0x1078, 0x79c1, 0x0040, 0x856f, 0x1078, - 0x79d5, 0x00c0, 0x8534, 0x1078, 0x6bc7, 0x0078, 0x8571, 0x1078, - 0x24e5, 0x1078, 0x79a8, 0x0078, 0x8534, 0x0c7e, 0x0e7e, 0x017e, - 0x2c08, 0x2170, 0x1078, 0x86c1, 0x017f, 0x0040, 0x8584, 0x601c, - 0xa084, 0x000f, 0x1079, 0x8587, 0x0e7f, 0x0c7f, 0x007c, 0x858f, - 0x858f, 0x858f, 0x858f, 0x858f, 0x858f, 0x8591, 0x858f, 0xa006, - 0x007c, 0x047e, 0x017e, 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, - 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x1078, 0x86f5, 0x017f, - 0x047f, 0x037e, 0x2019, 0x0002, 0x1078, 0x831c, 0x037f, 0xa085, - 0x0001, 0x007c, 0x2001, 0x0001, 0x1078, 0x3ef1, 0x157e, 0x017e, - 0x027e, 0x037e, 0x20a9, 0x0004, 0x2019, 0x8805, 0x2011, 0x8d96, - 0x1078, 0x6f0c, 0x037f, 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, - 0x0f7e, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, - 0x8000, 0x2061, 0x8f00, 0x2079, 0x0001, 0x8fff, 0x0040, 0x8624, - 0x2071, 0x8800, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, 0x8624, - 0x88ff, 0x0040, 0x85e1, 0x2800, 0xac06, 0x00c0, 0x861a, 0x2079, - 0x0000, 0x1078, 0x870c, 0x0040, 0x861a, 0x2400, 0xac06, 0x0040, - 0x861a, 0x671c, 0xa786, 0x0006, 0x00c0, 0x861a, 0xa786, 0x0007, - 0x0040, 0x861a, 0x88ff, 0x00c0, 0x8600, 0x6018, 0xa206, 0x00c0, - 0x861a, 0x85ff, 0x0040, 0x8600, 0x6020, 0xa106, 0x00c0, 0x861a, - 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x860a, 0x601f, 0x0007, - 0x1078, 0x16af, 0x6010, 0x2068, 0x1078, 0x77ed, 0x0040, 0x8614, - 0x047e, 0x1078, 0x86aa, 0x047f, 0x0d7f, 0x1078, 0x79a8, 0x88ff, - 0x00c0, 0x862d, 0xace0, 0x000c, 0x2001, 0x8815, 0x2004, 0xac02, - 0x00c8, 0x8624, 0x0078, 0x85cd, 0xa006, 0x127f, 0x027f, 0x067f, - 0x077f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5, 0x0001, 0x0078, - 0x8625, 0x087e, 0x057e, 0x2041, 0x0000, 0x2029, 0x0001, 0x2c20, - 0x2019, 0x0002, 0x6218, 0x1078, 0x6614, 0x1078, 0x66be, 0x1078, - 0x85c0, 0x057f, 0x087f, 0x007c, 0x027e, 0x047e, 0x057e, 0x087e, - 0x0c7e, 0x157e, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x2009, 0x0000, - 0x017e, 0x037e, 0x1078, 0x3f8e, 0x00c0, 0x8664, 0x2c10, 0x2041, - 0x0000, 0x2508, 0x057e, 0x2029, 0x0001, 0x1078, 0x6614, 0x1078, - 0x66be, 0x1078, 0x85c0, 0x057f, 0x037f, 0x017f, 0x8108, 0x00f0, - 0x8650, 0x157f, 0x0c7f, 0x087f, 0x057f, 0x047f, 0x027f, 0x007c, - 0x087e, 0x057e, 0x6218, 0x2041, 0x0000, 0x2029, 0x0001, 0x2019, - 0x0048, 0x1078, 0x6614, 0x1078, 0x66be, 0x2c20, 0x1078, 0x85c0, - 0x057f, 0x087f, 0x007c, 0x027e, 0x047e, 0x057e, 0x087e, 0x0c7e, - 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x037e, - 0x1078, 0x3f8e, 0x00c0, 0x869e, 0x2c10, 0x2041, 0x0000, 0x2828, - 0x1078, 0x6614, 0x1078, 0x66be, 0x1078, 0x85c0, 0x037f, 0x017f, - 0x8108, 0x00f0, 0x868e, 0x157f, 0x0c7f, 0x087f, 0x057f, 0x047f, - 0x027f, 0x007c, 0x017e, 0x0f7e, 0x8dff, 0x0040, 0x86be, 0x6800, - 0xa07d, 0x0040, 0x86bb, 0x6803, 0x0000, 0x6b52, 0x1078, 0x4376, - 0x2f68, 0x0078, 0x86af, 0x6b52, 0x1078, 0x4376, 0x0f7f, 0x017f, - 0x007c, 0x0e7e, 0x047e, 0x037e, 0x2061, 0x8f00, 0x2071, 0x8800, - 0x7444, 0x7060, 0x8001, 0xa402, 0x00c8, 0x86f0, 0x2100, 0xac06, - 0x0040, 0x86e2, 0x6000, 0xa086, 0x0000, 0x0040, 0x86e2, 0x6008, - 0xa206, 0x00c0, 0x86e2, 0x6018, 0xa1a0, 0x0006, 0x2424, 0xa406, - 0x0040, 0x86ec, 0xace0, 0x000c, 0x2001, 0x8815, 0x2004, 0xac02, - 0x00c8, 0x86f0, 0x0078, 0x86c6, 0xa085, 0x0001, 0x0078, 0x86f1, - 0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, 0x007e, 0x1078, - 0x132b, 0x007f, 0x1040, 0x12d2, 0x6837, 0x010d, 0x685e, 0x6956, - 0x6c46, 0x684f, 0x0000, 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, - 0x1078, 0x4376, 0x0d7f, 0x007c, 0x6700, 0xa786, 0x0000, 0x0040, - 0x871f, 0xa786, 0x0001, 0x0040, 0x871f, 0xa786, 0x000a, 0x0040, - 0x871f, 0xa786, 0x0009, 0x0040, 0x871f, 0xa085, 0x0001, 0x007c, - 0x0e7e, 0x6018, 0x2070, 0x70a0, 0xa206, 0x0e7f, 0x007c, 0x0e7e, - 0x6018, 0x2070, 0x7000, 0xd0ec, 0x0e7f, 0x007c, 0x127e, 0x007e, - 0x0e7e, 0x2091, 0x8000, 0x2071, 0x8840, 0xd5a4, 0x0040, 0x873b, - 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0x8741, 0x7030, 0x8000, - 0x7032, 0xd5ac, 0x0040, 0x8748, 0x2071, 0x884a, 0x1078, 0x8777, - 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, - 0x8000, 0x2071, 0x8840, 0xd5a4, 0x0040, 0x8759, 0x7034, 0x8000, - 0x7036, 0xd5b4, 0x0040, 0x875f, 0x7030, 0x8000, 0x7032, 0xd5ac, - 0x0040, 0x8766, 0x2071, 0x884a, 0x1078, 0x8777, 0x0e7f, 0x007f, - 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, - 0x8842, 0x1078, 0x8777, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x2e04, - 0x8000, 0x2072, 0x00c8, 0x8780, 0x8e70, 0x2e04, 0x8000, 0x2072, - 0x007c, 0x0e7e, 0x2071, 0x8840, 0x1078, 0x8777, 0x0e7f, 0x007c, - 0x0e7e, 0x2071, 0x8844, 0x1078, 0x8777, 0x0e7f, 0x007c, 0x0001, - 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, - 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x6f37 -}; - - -unsigned short risc_code2200[] = { - 0x0470, 0x0000, 0x0000, 0x7a68, 0x0000, 0x0002, 0x0000, 0x0028, - 0x0007, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, - 0x3920, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241, - 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3232, 0x3030, 0x2046, 0x6972, - 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, - 0x322e, 0x3030, 0x2e34, 0x3020, 0x2020, 0x2020, 0x2400, 0x20c1, - 0x0005, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9, 0x8fff, 0x2091, - 0x2000, 0x2059, 0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x236e, - 0x2051, 0x8b00, 0x2a70, 0x2029, 0xaa00, 0x2031, 0xffff, 0x2039, - 0xa9f5, 0x2021, 0x0200, 0x0804, 0x137d, 0x20a1, 0x8a68, 0xa00e, - 0x20a9, 0x0798, 0x41a4, 0x3400, 0x755e, 0x7662, 0x775a, 0x7466, - 0x746a, 0x20a1, 0x9200, 0x7160, 0x810d, 0x810d, 0x810d, 0x810d, - 0xa18c, 0x000f, 0x2001, 0x0009, 0xa112, 0xa00e, 0x21a8, 0x41a4, - 0x3400, 0x8211, 0x1dd8, 0x7160, 0x3400, 0xa102, 0x0120, 0x0218, - 0x20a8, 0xa00e, 0x41a4, 0x3800, 0xd08c, 0x01d8, 0x2009, 0x8b00, - 0x810d, 0x810d, 0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0001, - 0xa112, 0x20a1, 0x1000, 0xa00e, 0x21a8, 0x41a4, 0x8211, 0x1de0, - 0x2009, 0x8b00, 0x3400, 0xa102, 0x0120, 0x0218, 0x20a8, 0xa00e, - 0x41a4, 0x080c, 0x1334, 0x080c, 0x14c2, 0x080c, 0x165b, 0x080c, - 0x1bc1, 0x080c, 0x410c, 0x080c, 0x6cba, 0x080c, 0x144b, 0x080c, - 0x273d, 0x080c, 0x4d5e, 0x080c, 0x45ef, 0x080c, 0x559c, 0x080c, - 0x2029, 0x080c, 0x577b, 0x080c, 0x5212, 0x080c, 0x1f59, 0x080c, - 0x1ffd, 0x2091, 0x3009, 0x7823, 0x0000, 0x1004, 0x10c5, 0x7820, - 0xa086, 0x0002, 0x1150, 0x7823, 0x4000, 0x0e04, 0x10bd, 0x781b, - 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000, - 0x2a70, 0x7000, 0xa08e, 0x0003, 0x1158, 0x080c, 0x3653, 0x080c, - 0x2764, 0x080c, 0x4dac, 0x080c, 0x4788, 0x080c, 0x55b4, 0x0c80, - 0x000b, 0x0c98, 0x10e4, 0x10e5, 0x11c0, 0x10e2, 0x1251, 0x1331, - 0x1332, 0x1333, 0x080c, 0x1410, 0x0005, 0x0126, 0x00f6, 0x2091, - 0x8000, 0x080c, 0x4c42, 0x0150, 0x080c, 0x4c68, 0x1518, 0x2079, - 0x0100, 0x7828, 0xa085, 0x1800, 0x782a, 0x00e0, 0x080c, 0x4b8b, - 0x7088, 0xa086, 0x0027, 0x1904, 0x11a5, 0x2079, 0x0100, 0x7827, - 0xffff, 0x782b, 0x1e2b, 0x2011, 0x4b5d, 0x080c, 0x560d, 0x2011, - 0x3fe7, 0x080c, 0x560d, 0x2011, 0x8030, 0x2019, 0x0000, 0x7087, - 0x0000, 0x00a8, 0x080c, 0x399f, 0x2079, 0x0100, 0x7844, 0xa005, - 0x1904, 0x11a5, 0x2011, 0x3fe7, 0x080c, 0x560d, 0x780f, 0x00ff, - 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010, 0x73c4, 0x080c, - 0x3617, 0x7238, 0xc284, 0x723a, 0x2001, 0x8b0c, 0x200c, 0xc1ac, - 0x2102, 0x080c, 0x683e, 0x2011, 0x0004, 0x080c, 0x7b94, 0x080c, - 0x4581, 0x080c, 0x4c42, 0x0158, 0x080c, 0x40f5, 0x0140, 0x7087, - 0x0001, 0x70bf, 0x0000, 0x080c, 0x3b32, 0x0804, 0x11a5, 0x70d3, - 0x0000, 0x70cf, 0x0000, 0x706f, 0x0000, 0x080c, 0x11a8, 0x72c8, - 0x080c, 0x4c42, 0x1170, 0x2011, 0x0000, 0x2001, 0x0204, 0x2004, - 0x2019, 0x8d8d, 0x201a, 0x704f, 0xffff, 0x7053, 0x00ef, 0x7073, - 0x0000, 0x2079, 0x8b51, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72ca, - 0x080c, 0x4c42, 0x0118, 0xa296, 0x0004, 0x0500, 0x2011, 0x0001, - 0x080c, 0x7b94, 0x080c, 0x7deb, 0x7097, 0x0000, 0x709b, 0xffff, - 0x7003, 0x0002, 0x00fe, 0x080c, 0x23fa, 0x2011, 0x0005, 0x080c, - 0x695c, 0x080c, 0x5d10, 0x080c, 0x4c42, 0x0130, 0x00c6, 0x2061, - 0x0100, 0x60e3, 0x0008, 0x00ce, 0x012e, 0x00c8, 0x080c, 0x7deb, - 0x7097, 0x0000, 0x709b, 0xffff, 0x7003, 0x0002, 0x2011, 0x0005, - 0x080c, 0x695c, 0x080c, 0x5d10, 0x080c, 0x4c42, 0x0130, 0x00c6, - 0x2061, 0x0100, 0x60e3, 0x0008, 0x00ce, 0x00fe, 0x012e, 0x0005, - 0x00c6, 0x080c, 0x4c42, 0x1118, 0x20a9, 0x0100, 0x0010, 0x20a9, - 0x0082, 0x080c, 0x4c42, 0x1118, 0x2009, 0x0000, 0x0010, 0x2009, - 0x007e, 0x080c, 0x42f5, 0x8108, 0x1f04, 0x11b9, 0x00ce, 0x0005, - 0x0126, 0x2091, 0x8000, 0x7098, 0xa086, 0xffff, 0x0130, 0x080c, - 0x23fa, 0x080c, 0x5d10, 0x0804, 0x124f, 0x70c8, 0xd0ac, 0x1110, - 0xd09c, 0x0520, 0xd084, 0x0510, 0x0006, 0x2001, 0x0103, 0x2003, - 0x00ff, 0x000e, 0xd08c, 0x01d0, 0x70cc, 0xa086, 0xffff, 0x0190, - 0x080c, 0x24f4, 0x080c, 0x5d10, 0x70c8, 0xd094, 0x1904, 0x124f, - 0x2011, 0x0001, 0x2019, 0x0000, 0x080c, 0x2528, 0x080c, 0x5d10, - 0x0804, 0x124f, 0x70d0, 0xa005, 0x1904, 0x124f, 0x7094, 0xa005, - 0x1904, 0x124f, 0x70c8, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x124f, - 0x2001, 0x8b52, 0x2004, 0xd0ac, 0x01c0, 0x0156, 0x00c6, 0x20a9, - 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x430a, 0x1118, 0x6000, - 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x120b, 0x00ce, 0x015e, - 0x0020, 0x001e, 0x00ce, 0x015e, 0x0490, 0x0006, 0x2001, 0x0103, - 0x2003, 0x00ff, 0x000e, 0x7003, 0x0003, 0x709b, 0xffff, 0xa006, - 0x080c, 0x2298, 0x080c, 0x3689, 0x00f6, 0x2079, 0x0100, 0x080c, - 0x4c68, 0x0150, 0x080c, 0x4c42, 0x7828, 0x0118, 0xa084, 0xe1ff, - 0x0010, 0xa084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0x8dab, 0x2004, - 0xa086, 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, 0x695c, 0x2011, - 0x0000, 0x080c, 0x6966, 0x080c, 0x5d10, 0x080c, 0x5dc2, 0x012e, - 0x0005, 0x0016, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, - 0x2009, 0x00f7, 0x080c, 0x40be, 0x7940, 0xa18c, 0x0010, 0x7942, - 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827, - 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x12b7, - 0x080c, 0x4c54, 0x0158, 0x080c, 0x4c68, 0x1128, 0x2001, 0x8d9c, - 0x2003, 0x0000, 0x0070, 0x080c, 0x4c4a, 0x0dc0, 0x2001, 0x8d9c, - 0x2003, 0xaaaa, 0x2001, 0x8d9d, 0x2003, 0x0001, 0x080c, 0x4b8b, - 0x0058, 0x080c, 0x4c42, 0x0140, 0x2009, 0x00f8, 0x080c, 0x40be, - 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, - 0x1138, 0x080c, 0x4c42, 0x0138, 0x7824, 0xd0ac, 0x1904, 0x131f, - 0x1f04, 0x1296, 0x0070, 0x7824, 0x080c, 0x4c5e, 0x0118, 0xd0ac, - 0x1904, 0x131f, 0xa084, 0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, - 0x131f, 0x2001, 0x0001, 0x080c, 0x2298, 0x0804, 0x132a, 0x7850, - 0xa084, 0x0180, 0x7852, 0x782f, 0x0020, 0x20a9, 0x0050, 0x1d04, - 0x12bf, 0x2091, 0x6000, 0x1f04, 0x12bf, 0x7850, 0xa084, 0x0180, - 0xa085, 0x0400, 0x7852, 0x782f, 0x0000, 0x080c, 0x4c54, 0x0158, - 0x080c, 0x4c68, 0x1128, 0x2001, 0x8d9c, 0x2003, 0x0000, 0x0070, - 0x080c, 0x4c4a, 0x0dc0, 0x2001, 0x8d9c, 0x2003, 0xaaaa, 0x2001, - 0x8d9d, 0x2003, 0x0001, 0x080c, 0x4b8b, 0x0020, 0x2009, 0x00f8, - 0x080c, 0x40be, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x12ec, 0x7850, - 0xa084, 0x0180, 0xa085, 0x1400, 0x7852, 0x080c, 0x4c42, 0x0120, - 0x7843, 0x0090, 0x7843, 0x0010, 0x2019, 0x61a8, 0x7820, 0xd09c, - 0x1130, 0x080c, 0x4c42, 0x0130, 0x7824, 0xd0ac, 0x11c0, 0x8319, - 0x1da8, 0x0080, 0x7827, 0x1800, 0xe000, 0xe000, 0x7824, 0x080c, - 0x4c5e, 0x0110, 0xd0ac, 0x1158, 0xa084, 0x1800, 0x0d80, 0x7003, - 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x2298, 0x0028, 0x7827, - 0x0048, 0x7828, 0xc09d, 0x782a, 0x7850, 0xa084, 0x0180, 0xa085, - 0x0400, 0x7852, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x001e, - 0x0005, 0x0005, 0x0005, 0x0005, 0x2a70, 0x2001, 0x8d9c, 0x2003, - 0x0000, 0x7087, 0x0000, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, - 0x0218, 0x704f, 0xffff, 0x0010, 0x704f, 0x0000, 0x7057, 0xffff, - 0x706f, 0x0000, 0x7073, 0x0000, 0x080c, 0x7deb, 0x2061, 0x8d8c, - 0x6003, 0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f, 0x0200, - 0x6013, 0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f, 0x07d0, - 0x2061, 0x8d94, 0x6003, 0x8800, 0x6007, 0x0000, 0x600b, 0x0000, - 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b, 0x0001, - 0x601f, 0x0000, 0x2061, 0x8da4, 0x6003, 0x514c, 0x6007, 0x4f47, - 0x600b, 0x4943, 0x600f, 0x2020, 0x0005, 0x04a0, 0x2011, 0x0000, - 0x81ff, 0x0570, 0xa186, 0x0001, 0x1148, 0x2031, 0x8fff, 0x2039, - 0x9e01, 0x2021, 0x0100, 0x2029, 0x9e00, 0x00e8, 0xa186, 0x0002, - 0x1118, 0x2011, 0x0000, 0x00b8, 0xa186, 0x0005, 0x1118, 0x2011, - 0x0001, 0x0088, 0xa186, 0x0009, 0x1118, 0x2011, 0x0002, 0x0058, - 0xa186, 0x000a, 0x1118, 0x2011, 0x0002, 0x0028, 0xa186, 0x0055, - 0x1110, 0x2011, 0x0003, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, - 0x0804, 0x104d, 0xa00e, 0x2011, 0x0003, 0x2019, 0x13b9, 0x0804, - 0x140a, 0x2019, 0xaaaa, 0x2061, 0xffff, 0x2c14, 0x2362, 0xe000, - 0xe000, 0x2c04, 0xa306, 0x2262, 0x1110, 0xc1b5, 0xc1a5, 0x2011, - 0x0000, 0x2019, 0x13cc, 0x04f0, 0x2019, 0xaaaa, 0x2061, 0xffff, - 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c1c, 0x2061, 0x7fff, 0xe000, - 0xe000, 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x0110, 0xc18d, - 0x0008, 0xc185, 0x2011, 0x0002, 0x2019, 0x13e7, 0x0418, 0x2061, - 0xffff, 0x2019, 0xaaaa, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c04, - 0x2262, 0xa306, 0x1180, 0x2c14, 0x2362, 0xe000, 0xe000, 0x2c1c, - 0x2061, 0x7fff, 0x2c04, 0x2061, 0xffff, 0x2262, 0xa306, 0x1110, - 0xc195, 0x0008, 0xc19d, 0x2011, 0x0001, 0x2019, 0x1408, 0x0010, - 0x0804, 0x137e, 0x3800, 0xa084, 0xfffc, 0xa205, 0x20c0, 0x0837, - 0x2091, 0x8000, 0x0e04, 0x1412, 0x0006, 0x0016, 0x2079, 0x0000, - 0x7818, 0xd084, 0x1de8, 0x001e, 0x792e, 0x000e, 0x782a, 0x000e, - 0x7826, 0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001, 0x2091, - 0x5000, 0x0156, 0x0146, 0x20a9, 0x0010, 0x20a1, 0x8eaa, 0x2091, - 0x2000, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2200, 0x40a1, 0x20a9, - 0x0010, 0x2091, 0x2400, 0x40a1, 0x20a9, 0x0010, 0x2091, 0x2600, - 0x40a1, 0x014e, 0x015e, 0x2079, 0x8b00, 0x7803, 0x0005, 0x2091, - 0x4080, 0x0cf8, 0x0005, 0x2071, 0x8b00, 0x715c, 0x712e, 0x2021, - 0x0001, 0xa190, 0x0030, 0xa298, 0x0030, 0x0240, 0x7060, 0xa302, - 0x1228, 0x220a, 0x2208, 0x2310, 0x8420, 0x0ca8, 0x3800, 0xd08c, - 0x0148, 0x7060, 0xa086, 0x8b00, 0x0128, 0x7063, 0x8b00, 0x2011, - 0x1000, 0x0c48, 0x200b, 0x0000, 0x74aa, 0x74ae, 0x0005, 0x00e6, - 0x0126, 0x2091, 0x8000, 0x2071, 0x8b00, 0x70ac, 0xa0ea, 0x0010, - 0x0268, 0x8001, 0x70ae, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, - 0x0000, 0x6807, 0x0000, 0x012e, 0x00ee, 0x0005, 0xa06e, 0x0cd8, - 0x00e6, 0x2071, 0x8b00, 0x0126, 0x2091, 0x8000, 0x70ac, 0x8001, - 0x0260, 0x70ae, 0x702c, 0x2068, 0x2d04, 0x702e, 0x206b, 0x0000, - 0x6807, 0x0000, 0x012e, 0x00ee, 0x0005, 0xa06e, 0x0cd8, 0x00e6, - 0x0126, 0x2091, 0x8000, 0x2071, 0x8b00, 0x702c, 0x206a, 0x2d00, - 0x702e, 0x70ac, 0x8000, 0x70ae, 0x012e, 0x00ee, 0x0005, 0x8dff, - 0x0138, 0x6804, 0x6807, 0x0000, 0x0006, 0x0c49, 0x00de, 0x0cb8, - 0x0005, 0x00e6, 0x2071, 0x8b00, 0x70ac, 0xa08a, 0x0010, 0xa00d, - 0x00ee, 0x0005, 0x00e6, 0x2071, 0x8dcd, 0x7007, 0x0000, 0x701b, - 0x0000, 0x701f, 0x0000, 0x2071, 0x0000, 0x7010, 0xa085, 0x8004, - 0x7012, 0x00ee, 0x0005, 0x00e6, 0x2270, 0x700b, 0x0000, 0x2071, - 0x8dcd, 0x7018, 0xa088, 0x8dd6, 0x220a, 0x8000, 0xa084, 0x0007, - 0x701a, 0x7004, 0xa005, 0x1128, 0x00f6, 0x2079, 0x0010, 0x0081, - 0x00fe, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x8dcd, 0x7004, 0xa005, - 0x1128, 0x00f6, 0x2079, 0x0010, 0x0019, 0x00fe, 0x00ee, 0x0005, - 0x7000, 0x0002, 0x14fe, 0x1562, 0x157f, 0x157f, 0x7018, 0x711c, - 0xa106, 0x1118, 0x7007, 0x0000, 0x0005, 0x00d6, 0xa180, 0x8dd6, - 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007, 0x711e, 0x7803, - 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c, 0x783a, 0x6830, - 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804, 0x00de, 0xd084, - 0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1, - 0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, - 0x1210, 0x2110, 0xa006, 0x700e, 0x7212, 0x8203, 0x7822, 0x7803, - 0x0020, 0x7803, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, - 0x0136, 0x0146, 0x0156, 0x7014, 0x2098, 0x20a1, 0x0014, 0x7803, - 0x0026, 0x710c, 0x2011, 0x0040, 0xa182, 0x0040, 0x1210, 0x2110, - 0xa006, 0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, - 0x3300, 0x7016, 0x7803, 0x0001, 0x015e, 0x014e, 0x013e, 0x002e, - 0x001e, 0x0005, 0x0136, 0x0146, 0x0156, 0x2099, 0x8bf9, 0x20a1, - 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x0126, 0x2091, - 0x8000, 0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, - 0x700b, 0x8bf4, 0x012e, 0x015e, 0x014e, 0x013e, 0x0005, 0x0136, - 0x0146, 0x0156, 0x2001, 0x8c28, 0x209c, 0x20a1, 0x0014, 0x7803, - 0x0026, 0x2001, 0x8c29, 0x20ac, 0x53a6, 0x2099, 0x8c2a, 0x20a1, - 0x0018, 0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x0126, 0x2091, - 0x8000, 0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, - 0x700b, 0x8c25, 0x012e, 0x015e, 0x014e, 0x013e, 0x0005, 0x0016, - 0x00e6, 0x2071, 0x8dcd, 0x00f6, 0x2079, 0x0010, 0x7904, 0x7803, - 0x0002, 0xd1fc, 0x0120, 0xa18c, 0x0700, 0x7004, 0x0023, 0x00fe, - 0x00ee, 0x001e, 0x0005, 0x14f8, 0x15c2, 0x15f0, 0x161a, 0x164a, - 0x15c1, 0x0cf8, 0xa18c, 0x0700, 0x1528, 0x0136, 0x0146, 0x0156, - 0x7014, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x7010, 0x20a8, - 0x53a5, 0x3400, 0x7016, 0x015e, 0x014e, 0x013e, 0x700c, 0xa005, - 0x0570, 0x7830, 0x7832, 0x7834, 0x7836, 0x080c, 0x1529, 0x0005, - 0x7008, 0xa080, 0x0002, 0x2003, 0x0100, 0x7007, 0x0000, 0x080c, - 0x14f8, 0x0005, 0x7008, 0xa080, 0x0002, 0x2003, 0x0200, 0x0ca8, - 0xa18c, 0x0700, 0x1150, 0x700c, 0xa005, 0x0188, 0x7830, 0x7832, - 0x7834, 0x7836, 0x080c, 0x153e, 0x0005, 0x7008, 0xa080, 0x0002, - 0x2003, 0x0200, 0x7007, 0x0000, 0x080c, 0x14f8, 0x0005, 0x00d6, - 0x7008, 0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, - 0x783c, 0x6832, 0x680b, 0x0100, 0x00de, 0x7007, 0x0000, 0x080c, - 0x14f8, 0x0005, 0xa18c, 0x0700, 0x1540, 0x0136, 0x0146, 0x0156, - 0x2001, 0x8bf7, 0x2004, 0xa080, 0x000d, 0x20a0, 0x2099, 0x0014, - 0x7803, 0x0040, 0x20a9, 0x0020, 0x53a5, 0x2001, 0x8bf9, 0x2004, - 0xd0bc, 0x0148, 0x2001, 0x8c02, 0x2004, 0xa080, 0x000d, 0x20a0, - 0x20a9, 0x0020, 0x53a5, 0x015e, 0x014e, 0x013e, 0x7007, 0x0000, - 0x080c, 0x4e43, 0x080c, 0x14f8, 0x0005, 0x2011, 0x8003, 0x080c, - 0x3617, 0x0cf8, 0xa18c, 0x0700, 0x1148, 0x2001, 0x8c27, 0x2003, - 0x0100, 0x7007, 0x0000, 0x080c, 0x14f8, 0x0005, 0x2011, 0x8004, - 0x080c, 0x3617, 0x0cf8, 0x0126, 0x2091, 0x2200, 0x2079, 0x0030, - 0x2071, 0x8dde, 0x7003, 0x0000, 0x700f, 0x8de4, 0x7013, 0x8de4, - 0x780f, 0x00f6, 0x012e, 0x0005, 0x6934, 0xa184, 0x0007, 0x0002, - 0x1678, 0x16b6, 0x1678, 0x1678, 0x1678, 0x169e, 0x1685, 0x167c, - 0xa085, 0x0001, 0x0804, 0x16d0, 0x684c, 0xd0bc, 0x0dc8, 0x6860, - 0x682e, 0x685c, 0x682a, 0x6858, 0x04c8, 0xa18c, 0x00ff, 0xa186, - 0x001e, 0x1d70, 0x684c, 0xd0bc, 0x0d58, 0x6860, 0x682e, 0x685c, - 0x682a, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, - 0xa080, 0x1e76, 0x2005, 0x6832, 0x6858, 0x0440, 0xa18c, 0x00ff, - 0xa186, 0x0015, 0x19a8, 0x684c, 0xd0ac, 0x0990, 0x6804, 0x681a, - 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, 0xa080, 0x1e76, 0x2005, - 0x6832, 0xa006, 0x682e, 0x682a, 0x6858, 0x0080, 0x684c, 0xd0ac, - 0x0904, 0x1678, 0xa006, 0x682e, 0x682a, 0x6858, 0xa18c, 0x000f, - 0xa188, 0x1e76, 0x210d, 0x6932, 0x2d08, 0x691a, 0x6826, 0x684c, - 0xc0dd, 0x684e, 0xa006, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, - 0x0005, 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, - 0x82ff, 0x0178, 0xa280, 0x0004, 0x00d6, 0x206c, 0x684c, 0xd0dc, - 0x1120, 0x080c, 0x166c, 0x190c, 0x1410, 0x6808, 0x8000, 0x680a, - 0x00de, 0x0126, 0x0046, 0x0036, 0x0026, 0x2091, 0x2200, 0x002e, - 0x003e, 0x004e, 0x7000, 0xa005, 0x01d0, 0x710c, 0x220a, 0x8108, - 0x230a, 0x8108, 0x240a, 0x8108, 0xa182, 0x8dff, 0x0210, 0x2009, - 0x8de4, 0x710e, 0x7010, 0xa102, 0xa082, 0x0009, 0x0118, 0xa080, - 0x001b, 0x1118, 0x2009, 0x0138, 0x200a, 0x012e, 0x0005, 0x7206, - 0x2001, 0x170d, 0x0006, 0x2260, 0x0804, 0x180c, 0x0126, 0x0026, - 0x0036, 0x00c6, 0x0006, 0x2091, 0x2200, 0x000e, 0x004e, 0x003e, - 0x002e, 0x00d6, 0x00c6, 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e, - 0xa005, 0x05b8, 0x6808, 0xa005, 0x0904, 0x1792, 0x7000, 0xa005, - 0x1108, 0x0430, 0x700c, 0x7110, 0xa106, 0x1904, 0x179a, 0x7004, - 0xa406, 0x11f0, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0130, 0x0046, - 0x080c, 0x18ee, 0x004e, 0x2460, 0x0c28, 0x2001, 0x0207, 0x2004, - 0xd09c, 0x1d80, 0x7804, 0xa084, 0x6000, 0x0120, 0xa086, 0x6000, - 0x0108, 0x0c40, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, - 0x6100, 0xa18e, 0x0004, 0x15f0, 0x2009, 0x0048, 0x080c, 0x6d3f, - 0x04c8, 0x6808, 0xa005, 0x0570, 0x7000, 0xa005, 0x0558, 0x700c, - 0x7110, 0xa106, 0x1118, 0x7004, 0xa406, 0x1520, 0x2001, 0x0005, - 0x2004, 0xd08c, 0x0130, 0x0046, 0x080c, 0x18ee, 0x004e, 0x2460, - 0x0c40, 0x2001, 0x0207, 0x2004, 0xd09c, 0x1d80, 0x2001, 0x0005, - 0x2004, 0xd08c, 0x1d80, 0x7804, 0xa084, 0x6000, 0x0118, 0xa086, - 0x6000, 0x1d20, 0x7818, 0x6812, 0x781c, 0x6816, 0x7803, 0x0004, - 0x7003, 0x0000, 0x6100, 0xa18e, 0x0004, 0x1120, 0x2009, 0x0048, - 0x080c, 0x6d3f, 0x00ce, 0x00de, 0x012e, 0x0005, 0x00f6, 0x00e6, - 0x0026, 0x0036, 0x0046, 0x0056, 0x080c, 0x1b5e, 0x0026, 0x0056, - 0x2071, 0x8dde, 0x7000, 0xa086, 0x0000, 0x0580, 0x7004, 0xac06, - 0x11f8, 0x2079, 0x0030, 0x7000, 0xa086, 0x0003, 0x01c8, 0x7804, - 0xd0fc, 0x1198, 0x2001, 0x0207, 0x2004, 0xd09c, 0x1dc0, 0x7803, - 0x0004, 0x7804, 0xd0ac, 0x1de8, 0x7803, 0x0002, 0x7803, 0x0009, - 0x7003, 0x0003, 0x7007, 0x0000, 0x0018, 0x080c, 0x18ee, 0x08d0, - 0x0156, 0x20a9, 0x0009, 0x2009, 0x8de4, 0x2104, 0xac06, 0x1108, - 0x200a, 0xa188, 0x0003, 0x1f04, 0x17d5, 0x015e, 0x005e, 0x002e, - 0x2001, 0x015d, 0x201c, 0x831a, 0x2302, 0x2001, 0x0160, 0x2502, - 0x2001, 0x0138, 0x2202, 0x005e, 0x004e, 0x003e, 0x002e, 0x00ee, - 0x00fe, 0x0005, 0x700c, 0x7110, 0xa106, 0x0904, 0x1841, 0x2104, - 0x7006, 0x2060, 0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, - 0x8dff, 0x0210, 0x2009, 0x8de4, 0x7112, 0x700c, 0xa106, 0x1120, - 0x2001, 0x0138, 0x2003, 0x0008, 0x8cff, 0x0538, 0x6010, 0x2068, - 0x2d58, 0x6828, 0xa406, 0x1520, 0x682c, 0xa306, 0x1508, 0x684c, - 0xd0f4, 0x11d8, 0x6850, 0xd0f4, 0x1130, 0x7803, 0x0004, 0x6810, - 0x781a, 0x6814, 0x781e, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, - 0x2040, 0x6034, 0xa0cc, 0x000f, 0x2009, 0x0011, 0x00a9, 0x0118, - 0x2009, 0x0001, 0x0089, 0x2d58, 0x0005, 0x080c, 0x1b10, 0x0ce0, - 0x601c, 0xa086, 0x0008, 0x1108, 0x08d0, 0x080c, 0x1e96, 0x1da8, - 0x08b0, 0x7003, 0x0000, 0x0005, 0x8aff, 0x0904, 0x18c8, 0xa03e, - 0x2730, 0x6850, 0xd0fc, 0x11b8, 0xd0f4, 0x1538, 0x00d6, 0x2805, - 0xac68, 0x2900, 0x0002, 0x18b2, 0x187c, 0x187c, 0x18b2, 0x18b2, - 0x18ab, 0x18b2, 0x187c, 0x18b2, 0x1881, 0x1881, 0x18b2, 0x18b2, - 0x18b2, 0x18a3, 0x1881, 0x7803, 0x0004, 0xc0fc, 0x6852, 0x6b6c, - 0x6a70, 0x6d1c, 0x6c20, 0x00d6, 0xd99c, 0x0904, 0x18b5, 0x2805, - 0xac68, 0x6f08, 0x6e0c, 0x0804, 0x18b5, 0xc0f4, 0x6852, 0x6b6c, - 0x6a70, 0x00d6, 0x0804, 0x18bc, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, - 0x04a0, 0x7b0c, 0xd3bc, 0x01c0, 0x7004, 0x00e6, 0x2070, 0x701c, - 0x00ee, 0xa086, 0x0008, 0x1180, 0x7b08, 0xa39c, 0x0fff, 0x2d20, - 0x7a1c, 0x82ff, 0x1120, 0x7818, 0xa302, 0x0208, 0x7b18, 0xa016, - 0x7a1e, 0x7b1a, 0x2468, 0x0010, 0x6b10, 0x6a14, 0x6d00, 0x6c04, - 0x6f08, 0x6e0c, 0x0090, 0x00de, 0x00d6, 0x6834, 0xa084, 0x00ff, - 0xa086, 0x001e, 0x1138, 0x00de, 0x080c, 0x1e38, 0x1904, 0x1844, - 0xa00e, 0x00b0, 0x00de, 0x080c, 0x1410, 0x7b22, 0x7a26, 0x7d32, - 0x7c36, 0x7f3a, 0x7e3e, 0x7902, 0x7000, 0x8000, 0x7002, 0x00de, - 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, 0x682e, 0x080c, 0x1e38, - 0x0005, 0x080c, 0x1410, 0x7803, 0x0004, 0x7004, 0x2060, 0x00d6, - 0x6010, 0x2068, 0x7003, 0x0000, 0x080c, 0x1b30, 0x080c, 0x7b8f, - 0x0170, 0x6808, 0x8001, 0x680a, 0x697c, 0x6912, 0x6980, 0x6916, - 0x682b, 0xffff, 0x682f, 0xffff, 0x6850, 0xc0bd, 0x6852, 0x00de, - 0x080c, 0x795f, 0x0804, 0x1a87, 0x080c, 0x1410, 0x0126, 0x2091, - 0x2200, 0x0006, 0x0016, 0x2b68, 0x6818, 0x2060, 0x7904, 0x7803, - 0x0002, 0xa184, 0x0700, 0x1978, 0xa184, 0x0003, 0xa086, 0x0003, - 0x0d58, 0x7000, 0x0002, 0x190b, 0x190d, 0x19e8, 0x1a62, 0x1a76, - 0x190b, 0x190b, 0x190b, 0x080c, 0x1410, 0x8001, 0x7002, 0xa184, - 0x0880, 0x1190, 0xd19c, 0x1904, 0x198b, 0x8aff, 0x0904, 0x198b, - 0x2009, 0x0001, 0x080c, 0x1844, 0x0904, 0x1a87, 0x2009, 0x0001, - 0x080c, 0x1844, 0x0804, 0x1a87, 0x7803, 0x0004, 0x7003, 0x0000, - 0xd1bc, 0x1904, 0x1975, 0x0026, 0x0036, 0x7c20, 0x7d24, 0x7e30, - 0x7f34, 0x7818, 0x6812, 0x781c, 0x6816, 0x2001, 0x0201, 0x2004, - 0xa005, 0x0140, 0x7808, 0xd0ec, 0x1128, 0x7803, 0x0009, 0x7003, - 0x0004, 0x0010, 0x080c, 0x1a8b, 0x6b28, 0x6a2c, 0x2400, 0x686e, - 0xa31a, 0x2500, 0x6872, 0xa213, 0x6b2a, 0x6a2e, 0x003e, 0x002e, - 0x6e1e, 0x6f22, 0x080c, 0x1e4e, 0x2a00, 0x6826, 0x2c00, 0x681a, - 0x2800, 0x6832, 0x6850, 0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, - 0x1148, 0x684c, 0xd0e4, 0x0130, 0x7004, 0x2060, 0x2009, 0x0048, - 0x080c, 0x6d3f, 0x7000, 0xa086, 0x0004, 0x0904, 0x1a87, 0x7003, - 0x0000, 0x080c, 0x17f2, 0x0804, 0x1a87, 0x0056, 0x7d0c, 0xd5bc, - 0x1110, 0x080c, 0x8a1c, 0x005e, 0x080c, 0x1b30, 0x682b, 0xffff, - 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, - 0x791e, 0x0804, 0x1a87, 0x7818, 0x6812, 0x7a1c, 0x6a16, 0xd19c, - 0x0118, 0xa205, 0x1904, 0x1924, 0x684c, 0xc0f5, 0x684e, 0x7814, - 0xa005, 0x1180, 0x7003, 0x0000, 0x6808, 0x8001, 0x680a, 0x1130, - 0x7004, 0x2060, 0x2009, 0x0048, 0x080c, 0x6d3f, 0x080c, 0x17f2, - 0x0804, 0x1a87, 0x7818, 0x6812, 0x781c, 0x6816, 0x7814, 0x7908, - 0xa18c, 0x0fff, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214, 0xa10a, - 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b, 0x080c, - 0x1b7d, 0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001, 0x7804, - 0xd0fc, 0x0de8, 0x7803, 0x0002, 0x7803, 0x0004, 0x780f, 0x00f6, - 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048, 0x080c, 0x6d3f, - 0x080c, 0x1ba2, 0x0958, 0x7908, 0xd1ec, 0x1118, 0x2009, 0x0009, - 0x0010, 0x2009, 0x0019, 0x7902, 0x7003, 0x0003, 0x0804, 0x1a87, - 0x8001, 0x7002, 0xd194, 0x0178, 0x7804, 0xd0fc, 0x1904, 0x18f6, - 0xd09c, 0x11a8, 0x8aff, 0x0904, 0x1a87, 0x2009, 0x0001, 0x080c, - 0x1844, 0x0804, 0x1a87, 0xa184, 0x0888, 0x1148, 0x8aff, 0x0904, - 0x1a87, 0x2009, 0x0001, 0x080c, 0x1844, 0x0804, 0x1a87, 0x7803, - 0x0004, 0x7003, 0x0000, 0xd1bc, 0x1904, 0x1a4f, 0x0026, 0x0036, - 0x7c20, 0x7d24, 0x7e30, 0x7f34, 0x7818, 0x6812, 0x781c, 0x6816, - 0x2001, 0x0201, 0x2004, 0xa005, 0x0140, 0x7808, 0xd0ec, 0x1128, - 0x7803, 0x0009, 0x7003, 0x0004, 0x0020, 0x0016, 0x080c, 0x1a8b, - 0x001e, 0x6b28, 0x6a2c, 0x080c, 0x1e4e, 0x00d6, 0x2805, 0xac68, - 0x6034, 0xd09c, 0x1128, 0x6808, 0xa31a, 0x680c, 0xa213, 0x0020, - 0x6810, 0xa31a, 0x6814, 0xa213, 0x00de, 0xd194, 0x0904, 0x1946, - 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x6808, 0x8001, - 0x680a, 0x6b2a, 0x6a2e, 0x003e, 0x002e, 0x0804, 0x19a6, 0x0056, - 0x7d0c, 0x080c, 0x8a1c, 0x005e, 0x080c, 0x1b30, 0x682b, 0xffff, - 0x682f, 0xffff, 0x6808, 0x8001, 0x680a, 0x697c, 0x791a, 0x6980, - 0x791e, 0x0428, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, - 0x0150, 0x6808, 0x8001, 0x680a, 0x1130, 0x7004, 0x2060, 0x2009, - 0x0048, 0x080c, 0x6d3f, 0x080c, 0x17f2, 0x0088, 0x7803, 0x0004, - 0x7003, 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0da0, 0x2068, - 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x080c, 0x180c, 0x001e, - 0x000e, 0x012e, 0x0005, 0x700c, 0x7110, 0xa106, 0x0904, 0x1b04, - 0x7004, 0x0016, 0x210c, 0xa106, 0x001e, 0x0904, 0x1b04, 0x00d6, - 0x00c6, 0x216c, 0x2d00, 0xa005, 0x0904, 0x1b02, 0x6810, 0x2068, - 0x6850, 0xd0fc, 0x0558, 0x8108, 0x2104, 0x6b2c, 0xa306, 0x1904, - 0x1b02, 0x8108, 0x2104, 0x6a28, 0xa206, 0x1904, 0x1b02, 0x6850, - 0xc0fc, 0xc0f5, 0x6852, 0x686c, 0x7822, 0x6870, 0x7826, 0x681c, - 0x7832, 0x6820, 0x7836, 0x6818, 0x2060, 0x6034, 0xd09c, 0x0150, - 0x6830, 0x2005, 0x00d6, 0xac68, 0x6808, 0x783a, 0x680c, 0x783e, - 0x00de, 0x0490, 0xa006, 0x783a, 0x783e, 0x0470, 0x8108, 0x2104, - 0xa005, 0x1580, 0x8108, 0x2104, 0xa005, 0x1560, 0x6850, 0xc0f5, - 0x6852, 0x6830, 0x2005, 0x6918, 0xa160, 0x6834, 0xd09c, 0x1170, - 0x6008, 0x7822, 0x686e, 0x600c, 0x7826, 0x6872, 0x6000, 0x7832, - 0x6004, 0x7836, 0xa006, 0x783a, 0x783e, 0x0070, 0x6010, 0x7822, - 0x686e, 0x6014, 0x7826, 0x6872, 0x6000, 0x7832, 0x6004, 0x7836, - 0x6008, 0x783a, 0x600c, 0x783e, 0x6810, 0x781a, 0x6814, 0x781e, - 0x7803, 0x0011, 0x00ce, 0x00de, 0x0005, 0x2011, 0x0201, 0x2009, - 0x003c, 0x2204, 0xa005, 0x1118, 0x8109, 0x1dd8, 0x0005, 0x0005, - 0x0ca1, 0x01e0, 0x7908, 0xd1ec, 0x1160, 0x080c, 0x1ba2, 0x0148, - 0x7803, 0x0009, 0x7904, 0xd1fc, 0x0de8, 0x7803, 0x0006, 0x0c29, - 0x0168, 0x780c, 0xd0a4, 0x1150, 0x7007, 0x0000, 0x080c, 0x1ba2, - 0x0130, 0x7803, 0x0019, 0x7003, 0x0003, 0x0008, 0x0009, 0x0005, - 0x00c6, 0x0461, 0x20e1, 0x9028, 0x700c, 0x7110, 0xa106, 0x01c8, - 0x2104, 0xa005, 0x0130, 0x2060, 0x6010, 0x2060, 0x6008, 0x8001, - 0x600a, 0xa188, 0x0003, 0xa182, 0x8dff, 0x0210, 0x2009, 0x8de4, - 0x7112, 0x700c, 0xa106, 0x1d40, 0x2001, 0x0138, 0x2003, 0x0008, - 0x0c18, 0x2001, 0x015d, 0x200c, 0x810a, 0x2102, 0x2001, 0x0160, - 0x2502, 0x2001, 0x0138, 0x2202, 0x00ce, 0x0005, 0x2001, 0x0138, - 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000, - 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, - 0x0109, 0x201c, 0xa39c, 0x0048, 0x1138, 0x2001, 0x0111, 0x201c, - 0x83ff, 0x1110, 0x8421, 0x1d70, 0x0005, 0x3c00, 0x0006, 0x00e6, - 0x2071, 0x0200, 0x7808, 0xa084, 0xf000, 0xa10d, 0x08b9, 0x20e1, - 0x7000, 0x7324, 0x7420, 0x7028, 0x7028, 0x7426, 0x7037, 0x0001, - 0x810f, 0x712e, 0x702f, 0x0100, 0x7037, 0x0008, 0x7326, 0x7422, - 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x00ee, 0x000e, - 0x20e0, 0x0005, 0x3c00, 0x0006, 0x7908, 0xa18c, 0x0fff, 0xa182, - 0x0009, 0x0218, 0xa085, 0x0001, 0x0088, 0x2001, 0x020a, 0x81ff, - 0x0130, 0x20e1, 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, - 0x7000, 0x200c, 0x200c, 0x7003, 0x0000, 0xa006, 0x000e, 0x20e0, - 0x0005, 0x00e6, 0x2071, 0x8dff, 0x7003, 0x0000, 0x00ee, 0x0005, - 0x00d6, 0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x1904, 0x1c3e, - 0x6934, 0xa184, 0x0007, 0x0002, 0x1bdc, 0x1c29, 0x1bdc, 0x1bdc, - 0x1bdc, 0x1c10, 0x1bef, 0x1bde, 0x080c, 0x1410, 0x684c, 0xd0b4, - 0x0904, 0x1d32, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, - 0x687c, 0x680a, 0x6880, 0x680e, 0x6958, 0x0804, 0x1c31, 0x6834, - 0xa084, 0x00ff, 0xa086, 0x001e, 0x1d38, 0x684c, 0xd0b4, 0x0904, - 0x1d32, 0x6860, 0x682e, 0x6816, 0x685c, 0x682a, 0x6812, 0x687c, - 0x680a, 0x6880, 0x680e, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, - 0xa084, 0x000f, 0xa080, 0x1e76, 0x2005, 0x6832, 0x6958, 0x0450, - 0xa18c, 0x00ff, 0xa186, 0x0015, 0x1548, 0x684c, 0xd0b4, 0x0904, - 0x1d32, 0x6804, 0x681a, 0xa080, 0x000d, 0x2004, 0xa084, 0x000f, - 0xa080, 0x1e76, 0x2005, 0x6832, 0x6958, 0xa006, 0x682e, 0x682a, - 0x0088, 0x684c, 0xd0b4, 0x0904, 0x18c9, 0x6958, 0xa006, 0x682e, - 0x682a, 0x2d00, 0x681a, 0x6834, 0xa084, 0x000f, 0xa080, 0x1e76, - 0x2005, 0x6832, 0x6926, 0x684c, 0xc0dd, 0x684e, 0x00de, 0x0005, - 0x00f6, 0x2079, 0x0020, 0x7804, 0xd0fc, 0x190c, 0x1d58, 0x00e6, - 0x00d6, 0x2071, 0x8dff, 0x7000, 0xa005, 0x1904, 0x1cb2, 0x00c6, - 0x7206, 0xa280, 0x0004, 0x205c, 0x7004, 0x2068, 0x7803, 0x0004, - 0x6818, 0x00d6, 0x2068, 0x686c, 0x7812, 0x6890, 0x00f6, 0x20e1, - 0x9040, 0x2079, 0x0200, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, - 0x00fe, 0x00de, 0x2b68, 0x6824, 0x2050, 0x6818, 0x2060, 0x6830, - 0x2040, 0x6034, 0xa0cc, 0x000f, 0x6908, 0xa184, 0x0007, 0x0128, - 0x0016, 0x2009, 0x0008, 0xa102, 0x001e, 0xa108, 0x791a, 0x7116, - 0x701e, 0x680c, 0xa081, 0x0000, 0x781e, 0x701a, 0xa006, 0x700e, - 0x7012, 0x7004, 0x692c, 0x6814, 0xa106, 0x1120, 0x6928, 0x6810, - 0xa106, 0x0158, 0x0036, 0x0046, 0x6b14, 0x6c10, 0x080c, 0x1e96, - 0x004e, 0x003e, 0x0110, 0x00ce, 0x00a8, 0x8aff, 0x1120, 0x00ce, - 0xa085, 0x0001, 0x0078, 0x0126, 0x2091, 0x8000, 0x2079, 0x0020, - 0x2009, 0x0001, 0x0059, 0x0118, 0x2009, 0x0001, 0x0039, 0x012e, - 0x00ce, 0xa006, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x0076, 0x0066, - 0x0056, 0x0046, 0x0036, 0x0026, 0x8aff, 0x0904, 0x1d2b, 0x700c, - 0x7214, 0xa23a, 0x7010, 0x7218, 0xa203, 0x0a04, 0x1d2a, 0xa705, - 0x0904, 0x1d2a, 0xa03e, 0x2730, 0x6850, 0xd0fc, 0x11a8, 0x00d6, - 0x2805, 0xac68, 0x2900, 0x0002, 0x1d0d, 0x1cf2, 0x1cf2, 0x1d0d, - 0x1d0d, 0x1d06, 0x1d0d, 0x1cf2, 0x1d0d, 0x1cf7, 0x1cf7, 0x1d0d, - 0x1d0d, 0x1d0d, 0x1cfe, 0x1cf7, 0xc0fc, 0x6852, 0x6b6c, 0x6a70, - 0x6d1c, 0x6c20, 0xd99c, 0x0528, 0x00d6, 0x2805, 0xac68, 0x6f08, - 0x6e0c, 0x00f0, 0x6b08, 0x6a0c, 0x6d00, 0x6c04, 0x00c8, 0x6b10, - 0x6a14, 0x6d00, 0x6c04, 0x6f08, 0x6e0c, 0x0090, 0x00de, 0x00d6, - 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x1138, 0x00de, 0x080c, - 0x1e38, 0x1904, 0x1cbc, 0xa00e, 0x00f0, 0x00de, 0x080c, 0x1410, - 0x00de, 0x7b22, 0x7a26, 0x7d32, 0x7c36, 0x7f3a, 0x7e3e, 0x7902, - 0x7000, 0x8000, 0x7002, 0x6828, 0xa300, 0x682a, 0x682c, 0xa201, - 0x682e, 0x700c, 0xa300, 0x700e, 0x7010, 0xa201, 0x7012, 0x080c, - 0x1e38, 0x0008, 0xa006, 0x002e, 0x003e, 0x004e, 0x005e, 0x006e, - 0x007e, 0x0005, 0x080c, 0x1410, 0x2001, 0x0105, 0x2003, 0x0010, - 0x20e1, 0x9040, 0x7803, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, - 0x00d6, 0x6010, 0x2068, 0x080c, 0x7b8f, 0x0118, 0x6850, 0xc0bd, - 0x6852, 0x00de, 0x080c, 0x795f, 0x20e1, 0x9040, 0x080c, 0x6b33, - 0x2011, 0x0000, 0x080c, 0x6966, 0x080c, 0x5dc2, 0x0804, 0x1e0d, - 0x0126, 0x2091, 0x2400, 0x0006, 0x0016, 0x00f6, 0x00e6, 0x00d6, - 0x00c6, 0x2079, 0x0020, 0x2071, 0x8dff, 0x2b68, 0x6818, 0x2060, - 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x1930, 0x7000, 0x0002, - 0x1e0d, 0x1d74, 0x1de0, 0x1e0b, 0x8001, 0x7002, 0xd19c, 0x1170, - 0x8aff, 0x0540, 0x2009, 0x0001, 0x080c, 0x1cb6, 0x0904, 0x1e0d, - 0x2009, 0x0001, 0x080c, 0x1cb6, 0x0804, 0x1e0d, 0x7803, 0x0004, - 0xd194, 0x0148, 0x6850, 0xc0fc, 0x6852, 0x8aff, 0x1148, 0x684c, - 0xc0f5, 0x684e, 0x0028, 0x080c, 0x1e4e, 0x6850, 0xc0fd, 0x6852, - 0x2a00, 0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, - 0x0804, 0x1e0d, 0x711c, 0x81ff, 0x0190, 0x7918, 0x7922, 0x7827, - 0x0000, 0x7803, 0x0001, 0x7000, 0x8000, 0x7002, 0x700c, 0xa100, - 0x700e, 0x7010, 0xa081, 0x0000, 0x7012, 0x0804, 0x1e0d, 0x00f6, - 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14, - 0xa284, 0x0184, 0xa085, 0x0012, 0x7816, 0x7820, 0xd0bc, 0x1de8, - 0x79c8, 0x000e, 0xa102, 0x001e, 0x0006, 0x0016, 0x79c4, 0x000e, - 0xa102, 0x78c6, 0x000e, 0x78ca, 0xa284, 0x0184, 0xa085, 0x0012, - 0x7816, 0x002e, 0x00fe, 0x7803, 0x0008, 0x7003, 0x0000, 0x0468, - 0x8001, 0x7002, 0xd194, 0x0168, 0x7804, 0xd0fc, 0x1904, 0x1d68, - 0xd19c, 0x11f8, 0x8aff, 0x0508, 0x2009, 0x0001, 0x080c, 0x1cb6, - 0x00e0, 0x0026, 0x0036, 0x6b28, 0x6a2c, 0x080c, 0x1e4e, 0x00d6, - 0x2805, 0xac68, 0x6034, 0xd09c, 0x1128, 0x6808, 0xa31a, 0x680c, - 0xa213, 0x0020, 0x6810, 0xa31a, 0x6814, 0xa213, 0x00de, 0x0804, - 0x1d93, 0x0804, 0x1d93, 0x080c, 0x1410, 0x00ce, 0x00de, 0x00ee, - 0x00fe, 0x001e, 0x000e, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, - 0x8dff, 0x7000, 0xa086, 0x0000, 0x01c0, 0x2079, 0x0020, 0x20e1, - 0x9040, 0x7804, 0xd0fc, 0x0dd8, 0x080c, 0x1d58, 0x7000, 0xa086, - 0x0000, 0x1da8, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x1de8, 0x20e1, - 0x9040, 0x7803, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, - 0x8840, 0x2805, 0xa005, 0x1170, 0x6004, 0xa005, 0x0168, 0x681a, - 0x2060, 0x6034, 0xa084, 0x000f, 0xa080, 0x1e76, 0x2045, 0x88ff, - 0x090c, 0x1410, 0x8a51, 0x0005, 0x2050, 0x0005, 0x8a50, 0x8841, - 0x2805, 0xa005, 0x1190, 0x2c00, 0xad06, 0x0120, 0x6000, 0xa005, - 0x1108, 0x2d00, 0x2060, 0x681a, 0x6034, 0xa084, 0x000f, 0xa080, - 0x1e86, 0x2045, 0x88ff, 0x090c, 0x1410, 0x0005, 0x0000, 0x0011, - 0x0015, 0x0019, 0x001d, 0x0021, 0x0025, 0x0029, 0x0000, 0x000f, - 0x0015, 0x001b, 0x0021, 0x0027, 0x0000, 0x0000, 0x0000, 0x1e6b, - 0x1e67, 0x0000, 0x0000, 0x1e75, 0x0000, 0x1e6b, 0x0000, 0x1e72, - 0x1e6f, 0x0000, 0x0000, 0x0000, 0x1e75, 0x1e72, 0x0000, 0x1e6d, - 0x1e6d, 0x0000, 0x0000, 0x1e75, 0x0000, 0x1e6d, 0x0000, 0x1e73, - 0x1e73, 0x0000, 0x0000, 0x0000, 0x1e75, 0x1e73, 0x00a6, 0x0096, - 0x0086, 0x6858, 0xa055, 0x0904, 0x1f25, 0x2d60, 0x6034, 0xa0cc, - 0x000f, 0xa9c0, 0x1e76, 0xa986, 0x0007, 0x0130, 0xa986, 0x000e, - 0x0118, 0xa986, 0x000f, 0x1120, 0x605c, 0xa422, 0x6060, 0xa31a, - 0x2805, 0xa045, 0x1140, 0x0310, 0x0804, 0x1f25, 0x6004, 0xa065, - 0x0904, 0x1f25, 0x0c18, 0x2805, 0xa005, 0x01a8, 0xac68, 0xd99c, - 0x1128, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0020, 0x6810, 0xa422, - 0x6814, 0xa31b, 0x0620, 0x2300, 0xa405, 0x0150, 0x8a51, 0x0904, - 0x1f25, 0x8840, 0x0c40, 0x6004, 0xa065, 0x0904, 0x1f25, 0x0830, - 0x8a51, 0x0904, 0x1f25, 0x8840, 0x2805, 0xa005, 0x1158, 0x6004, - 0xa065, 0x0904, 0x1f25, 0x6034, 0xa0cc, 0x000f, 0xa9c0, 0x1e76, - 0x2805, 0x2040, 0x2b68, 0x6850, 0xc0fc, 0x6852, 0x0458, 0x8422, - 0x8420, 0x831a, 0xa399, 0x0000, 0x00d6, 0x2b68, 0x6c6e, 0x6b72, - 0x00de, 0xd99c, 0x1168, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, - 0xa11b, 0x0a0c, 0x1410, 0x6800, 0xa420, 0x6804, 0xa319, 0x0060, - 0x6910, 0x2400, 0xa122, 0x6914, 0x2300, 0xa11b, 0x0a0c, 0x1410, - 0x6800, 0xa420, 0x6804, 0xa319, 0x2b68, 0x6c1e, 0x6b22, 0x6850, - 0xc0fd, 0x6852, 0x2c00, 0x681a, 0x2800, 0x6832, 0x2a00, 0x6826, - 0x000e, 0x000e, 0x000e, 0xa006, 0x0028, 0x008e, 0x009e, 0x00ae, - 0xa085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004, 0xa084, 0x0007, - 0x0002, 0x1f39, 0x1f3a, 0x1f3d, 0x1f40, 0x1f45, 0x1f48, 0x1f4d, - 0x1f52, 0x0005, 0x080c, 0x1d58, 0x0005, 0x080c, 0x18ee, 0x0005, - 0x080c, 0x18ee, 0x080c, 0x1d58, 0x0005, 0x080c, 0x15a7, 0x0005, - 0x080c, 0x1d58, 0x080c, 0x15a7, 0x0005, 0x080c, 0x18ee, 0x080c, - 0x15a7, 0x0005, 0x080c, 0x18ee, 0x080c, 0x1d58, 0x080c, 0x15a7, - 0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x9080, - 0x2069, 0x8b00, 0x2009, 0x0004, 0x7912, 0x7817, 0x0004, 0x080c, - 0x22c4, 0x781b, 0x0002, 0x783b, 0x001f, 0x20e1, 0x8700, 0x012e, - 0x0005, 0x0126, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x1ffa, - 0xa084, 0x0007, 0x0002, 0x1f95, 0x1f83, 0x1f86, 0x1f89, 0x1f8e, - 0x1f90, 0x1f92, 0x1f94, 0x080c, 0x521b, 0x0078, 0x080c, 0x5242, - 0x0060, 0x080c, 0x521b, 0x080c, 0x5242, 0x0038, 0x0041, 0x0028, - 0x0031, 0x0018, 0x0021, 0x0008, 0x0011, 0x012e, 0x0005, 0x0006, - 0x0016, 0x0026, 0x7930, 0xa184, 0x0003, 0x0118, 0x20e1, 0x9040, - 0x00b8, 0xa184, 0x0030, 0x0150, 0x6a00, 0xa286, 0x0003, 0x1108, - 0x0010, 0x080c, 0x403d, 0x20e1, 0x9010, 0x0050, 0xa184, 0x00c0, - 0x0110, 0x080c, 0x1410, 0xa184, 0x0300, 0x0110, 0x20e1, 0x9020, - 0x7932, 0x002e, 0x001e, 0x000e, 0x0005, 0x0016, 0x00e6, 0x00f6, - 0x2071, 0x8b00, 0x7128, 0x2001, 0x8d8f, 0x2102, 0x2001, 0x8d97, - 0x2102, 0xa182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0xa182, - 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0xa182, 0x02c1, 0x1218, - 0x2009, 0x0006, 0x00a0, 0xa182, 0x0349, 0x1218, 0x2009, 0x0005, - 0x0070, 0xa182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0xa182, - 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0x2079, - 0x0200, 0x7912, 0x7817, 0x0004, 0x080c, 0x22c4, 0x00fe, 0x00ee, - 0x001e, 0x0005, 0x7938, 0x080c, 0x1410, 0x0126, 0x2091, 0x2400, - 0x2061, 0x0100, 0x2071, 0x8b00, 0x6024, 0x6026, 0x6053, 0x0030, - 0x080c, 0x2303, 0x6050, 0xa084, 0xfe7f, 0x6052, 0x2009, 0x00ef, - 0x6132, 0x6136, 0x080c, 0x2313, 0x60e7, 0x0000, 0x61ea, 0x60e3, - 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080, 0x602f, - 0x0000, 0x6007, 0x0e9f, 0x600f, 0x00ff, 0x602b, 0x002f, 0x012e, - 0x0005, 0x2001, 0x8b30, 0x2003, 0x0000, 0x2001, 0x8b2f, 0x2003, - 0x0001, 0x0005, 0x0126, 0x2091, 0x2400, 0x0006, 0x0016, 0x0026, - 0x6124, 0xa184, 0x1e2c, 0x1118, 0xa184, 0x0007, 0x002a, 0xa195, - 0x0004, 0xa284, 0x0007, 0x0002, 0x2066, 0x204c, 0x204f, 0x2052, - 0x2057, 0x2059, 0x205d, 0x2061, 0x080c, 0x578e, 0x00b8, 0x080c, - 0x5869, 0x00a0, 0x080c, 0x5869, 0x080c, 0x578e, 0x0078, 0x0099, - 0x0068, 0x080c, 0x578e, 0x0079, 0x0048, 0x080c, 0x5869, 0x0059, - 0x0028, 0x080c, 0x5869, 0x080c, 0x578e, 0x0029, 0x002e, 0x001e, - 0x000e, 0x012e, 0x0005, 0xd19c, 0x1904, 0x226d, 0x080c, 0x4c42, - 0x0560, 0x7000, 0xa086, 0x0003, 0x0198, 0x6024, 0xa084, 0x1800, - 0x0178, 0x080c, 0x4c68, 0x0118, 0x080c, 0x4c54, 0x1148, 0x6027, - 0x0020, 0x6043, 0x0000, 0x2001, 0x8d9c, 0x2003, 0xaaaa, 0x0458, - 0x080c, 0x4c68, 0x1904, 0x20cf, 0x6024, 0xa084, 0x1800, 0x1108, - 0x04f0, 0x2001, 0x8d9c, 0x2003, 0xaaaa, 0x2001, 0x8d9d, 0x2003, - 0x0001, 0x080c, 0x4b8b, 0x0804, 0x226d, 0xd1ac, 0x1580, 0x6024, - 0xd0dc, 0x1188, 0xd0e4, 0x11a0, 0xd0d4, 0x11d8, 0xd0cc, 0x0148, - 0x7088, 0xa086, 0x0027, 0x1128, 0x6028, 0xc0cc, 0x602a, 0x080c, - 0x4b52, 0x0804, 0x226d, 0x2001, 0x8d9d, 0x2003, 0x0000, 0x0068, - 0xa085, 0x0001, 0x080c, 0x4c82, 0x2001, 0x8d9d, 0x2003, 0x0002, - 0x0020, 0x080c, 0x4d10, 0x0804, 0x226d, 0x0016, 0x2001, 0x8b00, - 0x2003, 0x0001, 0x080c, 0x4b8b, 0x001e, 0x0804, 0x226d, 0xd1ac, - 0x0904, 0x21b5, 0x080c, 0x4c42, 0x1550, 0x6027, 0x0020, 0x0006, - 0x0026, 0x0036, 0x2001, 0x8d9d, 0x080c, 0x4c5e, 0x11d8, 0x2011, - 0x8b25, 0x2204, 0xa005, 0x1140, 0x8000, 0x2012, 0x2011, 0x8036, - 0x2019, 0x0001, 0x080c, 0x3617, 0x2001, 0x8d9d, 0x2003, 0x0001, - 0x2001, 0x8b00, 0x2003, 0x0001, 0x080c, 0x4b8b, 0x003e, 0x002e, - 0x000e, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x4b06, 0x0016, - 0x0046, 0x00c6, 0x644c, 0xa486, 0xf0f0, 0x1138, 0x2061, 0x0100, - 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74c6, 0xa48c, 0xff00, - 0x7034, 0xd084, 0x0178, 0xa186, 0xf800, 0x1160, 0x7038, 0xd084, - 0x1148, 0xc085, 0x703a, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, - 0x3617, 0x003e, 0xa196, 0xff00, 0x01e8, 0x7050, 0xa084, 0x00ff, - 0x810f, 0xa116, 0x01b8, 0x7130, 0xd18c, 0x11a0, 0x2011, 0x8b52, - 0x2214, 0xd2ec, 0x0118, 0xc18d, 0x7132, 0x0060, 0x6240, 0xa294, - 0x0010, 0x0904, 0x218b, 0x6248, 0xa294, 0xff00, 0xa296, 0xff00, - 0x1904, 0x218b, 0x7034, 0xd08c, 0x1140, 0x2001, 0x8b0c, 0x200c, - 0xd1ac, 0x1904, 0x218b, 0xc1ad, 0x2102, 0x0036, 0x73c4, 0x2011, - 0x8013, 0x080c, 0x3617, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, - 0x8b52, 0x220c, 0xd1a4, 0x01d0, 0x0016, 0x2009, 0x0001, 0x2011, - 0x0100, 0x080c, 0x5734, 0x2019, 0x000e, 0x080c, 0x891c, 0xa484, - 0x00ff, 0xa080, 0x263d, 0x200d, 0xa18c, 0xff00, 0x810f, 0x8127, - 0xa006, 0x2009, 0x000e, 0x080c, 0x8982, 0x001e, 0xd1ac, 0x1128, - 0x2019, 0x0004, 0x080c, 0x2542, 0x0070, 0x0156, 0x20a9, 0x007f, - 0x2009, 0x0000, 0x080c, 0x430a, 0x1110, 0x080c, 0x4118, 0x8108, - 0x1f04, 0x2182, 0x015e, 0x00ce, 0x004e, 0x2011, 0x0003, 0x080c, - 0x695c, 0x2011, 0x0002, 0x080c, 0x6966, 0x080c, 0x6862, 0x080c, - 0x567a, 0x0036, 0x2019, 0x0000, 0x080c, 0x68e5, 0x003e, 0x60e3, - 0x0000, 0x001e, 0x2001, 0x8b00, 0x2014, 0xa296, 0x0004, 0x1128, - 0xd19c, 0x1118, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, - 0x8b22, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x226d, - 0x0016, 0x6220, 0xd2b4, 0x0904, 0x221e, 0x080c, 0x567a, 0x080c, - 0x66f7, 0x6027, 0x0004, 0x00f6, 0x2019, 0x8db3, 0x2304, 0xa07d, - 0x0570, 0x7804, 0xa086, 0x0032, 0x1550, 0x00d6, 0x00c6, 0x00e6, - 0x2069, 0x0140, 0x618c, 0x6288, 0x7818, 0x608e, 0x7808, 0x608a, - 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, - 0x6803, 0x1000, 0x6803, 0x0000, 0x618e, 0x628a, 0x080c, 0x5c37, - 0x080c, 0x5d10, 0x7810, 0x2070, 0x7037, 0x0103, 0x2f60, 0x080c, - 0x6d18, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x0005, 0x00fe, - 0x00d6, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0120, 0x6803, - 0x1000, 0x6803, 0x0000, 0x00de, 0x00c6, 0x2061, 0x8daa, 0x6028, - 0xa09a, 0x0002, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x66ea, - 0x0804, 0x226c, 0x2019, 0x8db3, 0x2304, 0xa065, 0x0120, 0x2009, - 0x0027, 0x080c, 0x6d3f, 0x00ce, 0x0804, 0x226c, 0xd2bc, 0x0904, - 0x226c, 0x080c, 0x5687, 0x6014, 0xa084, 0x0184, 0xa085, 0x0010, - 0x6016, 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0xa084, - 0x4000, 0x0120, 0x6803, 0x1000, 0x6803, 0x0000, 0x00de, 0x00c6, - 0x2061, 0x8daa, 0x6044, 0xa09a, 0x0002, 0x12f0, 0x8000, 0x6046, - 0x603c, 0x00ce, 0xa005, 0x0540, 0x2009, 0x07d0, 0x080c, 0x567f, - 0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x1138, 0x6114, 0xa18c, - 0x0184, 0xa18d, 0x0012, 0x6116, 0x00b8, 0x6114, 0xa18c, 0x0184, - 0xa18d, 0x0016, 0x6116, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, - 0x68e5, 0x003e, 0x2019, 0x8db9, 0x2304, 0xa065, 0x0120, 0x2009, - 0x004f, 0x080c, 0x6d3f, 0x00ce, 0x001e, 0xd19c, 0x0528, 0x0016, - 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x695c, 0x2011, - 0x0002, 0x080c, 0x6966, 0x080c, 0x6862, 0x080c, 0x567a, 0x0036, - 0x2019, 0x0000, 0x080c, 0x68e5, 0x003e, 0x60e3, 0x0000, 0x080c, - 0x8a36, 0x080c, 0x8a51, 0x2001, 0x8b00, 0x2003, 0x0004, 0x6027, - 0x0008, 0x080c, 0x1251, 0x001e, 0xa18c, 0xffd0, 0x6126, 0x0005, - 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, - 0x2071, 0x8b00, 0x71bc, 0x70be, 0xa116, 0x01b8, 0x81ff, 0x0128, - 0x2011, 0x8011, 0x080c, 0x3617, 0x0080, 0x2011, 0x8012, 0x080c, - 0x3617, 0x0036, 0x00c6, 0x080c, 0x235e, 0x2061, 0x0100, 0x2019, - 0x0028, 0x080c, 0x2542, 0x00ce, 0x003e, 0x012e, 0x00fe, 0x00ee, - 0x002e, 0x001e, 0x000e, 0x0005, 0x00c6, 0x00f6, 0x0006, 0x0026, - 0x2061, 0x0100, 0xa190, 0x22d7, 0x2205, 0x60f2, 0x2011, 0x22e4, - 0x2205, 0x60ee, 0x002e, 0x000e, 0x00fe, 0x00ce, 0x0005, 0x0840, - 0x0840, 0x0840, 0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, - 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, - 0x00a0, 0x2028, 0xa18c, 0x00ff, 0x2130, 0xa094, 0xff00, 0x1110, - 0x81ff, 0x0118, 0x080c, 0x53f4, 0x0038, 0xa080, 0x263d, 0x200d, - 0xa18c, 0xff00, 0x810f, 0xa006, 0x0005, 0xa080, 0x263d, 0x200d, - 0xa18c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x8b14, - 0x2003, 0x00ef, 0x20a9, 0x0010, 0xa006, 0x6852, 0x6856, 0x1f04, - 0x230e, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, - 0x2001, 0x8b14, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, - 0x0010, 0x6853, 0x0000, 0xa006, 0x82ff, 0x1128, 0xa184, 0x000f, - 0xa080, 0x8a57, 0x2005, 0x6856, 0x8211, 0x1f04, 0x2323, 0x002e, - 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x8b00, 0x6030, 0x0110, - 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, - 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980, 0xa116, 0x0180, - 0xa112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, - 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x2353, 0x680f, 0x0000, - 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, 0x2001, 0x8b52, - 0x2004, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0xa006, 0x0046, 0x2020, - 0x2009, 0x002e, 0x080c, 0x8982, 0x004e, 0x0005, 0x238e, 0x2392, - 0x2396, 0x239c, 0x23a2, 0x23a8, 0x23ae, 0x23b6, 0x23bd, 0x23c2, - 0x23c7, 0x23ce, 0x23d5, 0x23dc, 0x23e3, 0x23ec, 0x23f5, 0x23f5, - 0x23f5, 0x23f5, 0x23f5, 0x23f5, 0x23f5, 0x23f5, 0x23f5, 0x23f5, - 0x23f5, 0x23f5, 0x23f5, 0x23f5, 0x23f5, 0x23f5, 0x0106, 0x0006, - 0x0804, 0x23f7, 0x0106, 0x0006, 0x0804, 0x23f7, 0x0106, 0x0006, - 0x080c, 0x2032, 0x0804, 0x23f7, 0x0106, 0x0006, 0x080c, 0x2032, - 0x0804, 0x23f7, 0x0106, 0x0006, 0x080c, 0x1f2b, 0x0804, 0x23f7, - 0x0106, 0x0006, 0x080c, 0x1f2b, 0x0804, 0x23f7, 0x0106, 0x0006, - 0x080c, 0x2032, 0x080c, 0x1f2b, 0x0804, 0x23f7, 0x0106, 0x0006, - 0x080c, 0x2032, 0x080c, 0x1f2b, 0x04d0, 0x0106, 0x0006, 0x080c, - 0x1f71, 0x04a8, 0x0106, 0x0006, 0x080c, 0x1f71, 0x0480, 0x0106, - 0x0006, 0x080c, 0x2032, 0x080c, 0x1f71, 0x0448, 0x0106, 0x0006, - 0x080c, 0x2032, 0x080c, 0x1f71, 0x0410, 0x0106, 0x0006, 0x080c, - 0x1f2b, 0x080c, 0x1f71, 0x00d8, 0x0106, 0x0006, 0x080c, 0x1f2b, - 0x080c, 0x1f71, 0x00a0, 0x0106, 0x0006, 0x080c, 0x2032, 0x080c, - 0x1f2b, 0x080c, 0x1f71, 0x0058, 0x0106, 0x0006, 0x080c, 0x2032, - 0x080c, 0x1f2b, 0x080c, 0x1f71, 0x0010, 0xe000, 0x0cf0, 0x000e, - 0x010e, 0x000d, 0x00c6, 0x0026, 0x2041, 0x007e, 0x70c8, 0xd09c, - 0x0110, 0x2041, 0x007f, 0xd094, 0x2001, 0x8b14, 0x203c, 0x1904, - 0x2454, 0x7284, 0xd284, 0x0904, 0x2454, 0xd28c, 0x1904, 0x2454, - 0x0036, 0x7398, 0xa38e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, - 0xa2e0, 0x91c0, 0x2c04, 0xa38c, 0x0001, 0x0120, 0xa084, 0xff00, - 0x8007, 0x0010, 0xa084, 0x00ff, 0xa70e, 0x0528, 0xa08e, 0x00ff, - 0x1160, 0x2011, 0x8b52, 0x2214, 0xd2ec, 0x1508, 0x7284, 0xc28d, - 0x7286, 0x709b, 0xffff, 0x003e, 0x00f8, 0x2009, 0x0000, 0x080c, - 0x22e9, 0x080c, 0x42d6, 0x1188, 0x6004, 0xa084, 0x00ff, 0xa086, - 0x0006, 0x1120, 0x080c, 0x24a8, 0x0140, 0x0028, 0x080c, 0x25a4, - 0x080c, 0x24ce, 0x0110, 0x8318, 0x0850, 0x739a, 0x0010, 0x709b, - 0xffff, 0x003e, 0x0804, 0x24a5, 0xa780, 0x263d, 0x203d, 0xa7bc, - 0xff00, 0x873f, 0x7098, 0xa096, 0xffff, 0x0128, 0xa812, 0x12c8, - 0x709b, 0xffff, 0x04f8, 0x2009, 0x0000, 0x70c8, 0xd09c, 0x0120, - 0xd094, 0x0110, 0x2009, 0x007e, 0x2001, 0x8d9c, 0x2004, 0xa005, - 0x0120, 0x2009, 0x007e, 0x2041, 0x007f, 0x2100, 0xa802, 0x20a8, - 0x0020, 0x2008, 0x2810, 0xa202, 0x20a8, 0x2700, 0x0156, 0x0016, - 0xa106, 0x01c0, 0x080c, 0x42d6, 0x11e8, 0x6004, 0xa084, 0x00ff, - 0xa086, 0x0006, 0x1120, 0x080c, 0x2610, 0x0160, 0x0020, 0x7284, - 0xd28c, 0x0120, 0x0038, 0x00a1, 0x0168, 0x0020, 0x080c, 0x25a4, - 0x04a9, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x247d, 0x709b, - 0xffff, 0x0018, 0x001e, 0x015e, 0x719a, 0x002e, 0x00ce, 0x0005, - 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x080c, 0x6cc2, 0x01c8, - 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x42a7, - 0x2001, 0x0000, 0x080c, 0x42b9, 0x0126, 0x2091, 0x8000, 0x7094, - 0x8000, 0x7096, 0x012e, 0x2009, 0x0004, 0x080c, 0x6d3f, 0xa085, - 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, - 0x00d6, 0x00c6, 0x2c68, 0x080c, 0x6cc2, 0x01c8, 0x2d00, 0x601a, - 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, 0x42a7, 0x2001, 0x0002, - 0x080c, 0x42b9, 0x0126, 0x2091, 0x8000, 0x7094, 0x8000, 0x7096, - 0x012e, 0x2009, 0x0002, 0x080c, 0x6d3f, 0xa085, 0x0001, 0x00ce, - 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x0026, 0x2009, 0x0080, - 0x080c, 0x42d6, 0x1120, 0x0031, 0x0110, 0x70cf, 0xffff, 0x002e, - 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2c68, 0x080c, - 0x6cc2, 0x01c8, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, - 0x080c, 0x42a7, 0x2001, 0x0002, 0x080c, 0x42b9, 0x0126, 0x2091, - 0x8000, 0x70d0, 0x8000, 0x70d2, 0x012e, 0x2009, 0x0002, 0x080c, - 0x6d3f, 0xa085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, - 0x00c6, 0x00d6, 0x2009, 0x007f, 0x080c, 0x42d6, 0x1180, 0x2c68, - 0x080c, 0x6cc2, 0x0160, 0x2d00, 0x601a, 0x6312, 0x601f, 0x0001, - 0x620a, 0x2009, 0x0022, 0x080c, 0x6d3f, 0xa085, 0x0001, 0x00de, - 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x080c, - 0x59e1, 0x080c, 0x598b, 0x080c, 0x72cc, 0x20a9, 0x007f, 0x2009, - 0x0000, 0x0016, 0x080c, 0x430a, 0x1120, 0x080c, 0x44e6, 0x080c, - 0x4118, 0x001e, 0x8108, 0x1f04, 0x2551, 0x002e, 0x003e, 0x006e, - 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, - 0x6218, 0x2270, 0x72a0, 0x0026, 0x2019, 0x0029, 0x080c, 0x59d5, - 0x0086, 0x2041, 0x0000, 0x080c, 0x5911, 0x2c08, 0x080c, 0x878f, - 0x008e, 0x001e, 0x2e60, 0x080c, 0x44e6, 0x6210, 0x6314, 0x080c, - 0x4118, 0x6212, 0x6316, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, - 0x0005, 0x00e6, 0x0006, 0x6018, 0xa080, 0x0028, 0x2004, 0xa086, - 0x0080, 0x0150, 0x2071, 0x8b00, 0x7094, 0xa005, 0x0110, 0x8001, - 0x7096, 0x000e, 0x00ee, 0x0005, 0x2071, 0x8b00, 0x70d0, 0xa005, - 0x0dc0, 0x8001, 0x70d2, 0x0ca8, 0x6000, 0xc08c, 0x6002, 0x0005, - 0x00f6, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, - 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0098, 0x2001, 0x8b52, 0x2004, - 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0xa006, 0x0046, 0x2020, 0x2009, - 0x002d, 0x080c, 0x8982, 0x004e, 0x20a9, 0x00ff, 0x2011, 0x0000, - 0x0026, 0xa288, 0x8c34, 0x210c, 0x81ff, 0x0508, 0x8fff, 0x0559, - 0x2019, 0x0029, 0x080c, 0x59d5, 0x0086, 0x2041, 0x0000, 0x080c, - 0x5911, 0x00c6, 0x0026, 0x2160, 0x6204, 0xa294, 0x00ff, 0x2001, - 0x0004, 0x8007, 0xa215, 0x6206, 0x002e, 0x00ce, 0x0016, 0x2c08, - 0x080c, 0x878f, 0x001e, 0x008e, 0x2160, 0x080c, 0x44e6, 0x002e, - 0x8210, 0x1f04, 0x25c8, 0x015e, 0x001e, 0x002e, 0x003e, 0x00ce, - 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x2001, 0x8b52, - 0x2004, 0xd0c4, 0x0148, 0xd0a4, 0x0138, 0xa006, 0x2220, 0x8427, - 0x2009, 0x0029, 0x080c, 0x8982, 0x001e, 0x002e, 0x004e, 0x0005, - 0x0016, 0x0026, 0x0036, 0x00c6, 0x7284, 0x82ff, 0x01f8, 0xa290, - 0x8b52, 0x2214, 0xd2ac, 0x11d0, 0x2100, 0x080c, 0x22fd, 0x81ff, - 0x01b8, 0x2019, 0x0001, 0x8314, 0xa2e0, 0x91c0, 0x2c04, 0xd384, - 0x0120, 0xa084, 0xff00, 0x8007, 0x0010, 0xa084, 0x00ff, 0xa116, - 0x0138, 0xa096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0xa085, 0x0001, - 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x7eef, 0x7de8, 0x7ce4, - 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, - 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, - 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, - 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, - 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, - 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, - 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, - 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, - 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, - 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, - 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, - 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, - 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, - 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, - 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, - 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, - 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, - 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, - 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, - 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, - 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, - 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, - 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, - 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, - 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, - 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x8b81, 0x7003, - 0x0002, 0xa006, 0x7012, 0x7016, 0x703a, 0x703e, 0x7033, 0x8b91, - 0x7037, 0x8b91, 0x7007, 0x0001, 0x2061, 0x8bd1, 0x6003, 0x0002, - 0x0005, 0x1004, 0x2763, 0x0e04, 0x2763, 0x2071, 0x8b81, 0x2b78, - 0x7818, 0xd084, 0x1140, 0x2a60, 0x7820, 0xa08e, 0x0069, 0x1904, - 0x2848, 0x0804, 0x27e1, 0x0005, 0x2071, 0x8b81, 0x7004, 0x0002, - 0x276c, 0x276d, 0x2776, 0x2787, 0x0005, 0x1004, 0x2775, 0x0e04, - 0x2775, 0x2b78, 0x7818, 0xd084, 0x01e8, 0x0005, 0x2b78, 0x2061, - 0x8bd1, 0x6008, 0xa08e, 0x0100, 0x0128, 0xa086, 0x0200, 0x0904, - 0x2842, 0x0005, 0x7014, 0x2068, 0x2a60, 0x7018, 0x0807, 0x7010, - 0x2068, 0x6834, 0xa086, 0x0103, 0x0108, 0x0005, 0x2a60, 0x2b78, - 0x7018, 0x0807, 0x2a60, 0x7820, 0xa08a, 0x0040, 0x1210, 0x61bc, - 0x0042, 0x2100, 0xa08a, 0x003f, 0x1a04, 0x283f, 0x61bc, 0x0804, - 0x27e1, 0x2823, 0x284e, 0x2856, 0x285a, 0x2862, 0x2868, 0x286c, - 0x2875, 0x2878, 0x2882, 0x2885, 0x283f, 0x283f, 0x283f, 0x2888, - 0x283f, 0x2897, 0x28ae, 0x28c5, 0x293c, 0x2941, 0x296a, 0x29bb, - 0x29cc, 0x29ea, 0x2a21, 0x2a2b, 0x2a38, 0x2a4b, 0x2a6b, 0x2a74, - 0x2aaa, 0x2ab0, 0x283f, 0x2ad3, 0x283f, 0x283f, 0x283f, 0x283f, - 0x283f, 0x2ad7, 0x2ae1, 0x283f, 0x283f, 0x283f, 0x283f, 0x283f, - 0x283f, 0x283f, 0x283f, 0x2ae9, 0x283f, 0x283f, 0x283f, 0x283f, - 0x283f, 0x2af6, 0x2afe, 0x283f, 0x283f, 0x283f, 0x283f, 0x283f, - 0x283f, 0x0002, 0x2b10, 0x2b63, 0x2bbd, 0x2bcd, 0x283f, 0x2be7, - 0x2ff7, 0x393f, 0x283f, 0x283f, 0x283f, 0x283f, 0x283f, 0x283f, - 0x283f, 0x283f, 0x2882, 0x2885, 0x283f, 0x283f, 0x2ff9, 0x283f, - 0x283f, 0x283f, 0x283f, 0x283f, 0x283f, 0x283f, 0x283f, 0x283f, - 0x283f, 0x283f, 0x2ffd, 0x314a, 0x315e, 0x3178, 0x31d9, 0x322a, - 0x3235, 0x326c, 0x327b, 0x328a, 0x3299, 0x32c1, 0x330b, 0x336d, - 0x337a, 0x3474, 0x356e, 0x3597, 0x3695, 0x36b1, 0x36bd, 0x36f6, - 0x378d, 0x283f, 0x283f, 0x283f, 0x283f, 0x37f5, 0x3810, 0x3880, - 0x3930, 0x713c, 0x0000, 0x2021, 0x4000, 0x080c, 0x35f4, 0x0126, - 0x2091, 0x8000, 0x0e04, 0x282f, 0x7818, 0xd084, 0x0110, 0x012e, - 0x0cb0, 0x7c22, 0x7926, 0x7a2a, 0x7b2e, 0x781b, 0x0001, 0x2091, - 0x4080, 0x7007, 0x0001, 0x2091, 0x5000, 0x012e, 0x0005, 0x2021, - 0x4001, 0x0c18, 0x2021, 0x4002, 0x0c00, 0x2021, 0x4003, 0x08e8, - 0x2021, 0x4005, 0x08d0, 0x2021, 0x4006, 0x08b8, 0xa02e, 0x2520, - 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0804, 0x3601, 0x7823, 0x0004, - 0x7824, 0x0807, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, - 0x0804, 0x3604, 0x7924, 0x7828, 0x2114, 0x200a, 0x0804, 0x2823, - 0x7924, 0x2114, 0x0804, 0x2823, 0x2099, 0x0009, 0x20a1, 0x0009, - 0x20a9, 0x0007, 0x53a3, 0x0804, 0x2823, 0x7824, 0x2060, 0x0090, - 0x2009, 0x0002, 0x2011, 0x0000, 0x2019, 0x0028, 0x783b, 0x0007, - 0x0804, 0x2823, 0x7d38, 0x7c3c, 0x0858, 0x7d38, 0x7c3c, 0x08a0, - 0x2061, 0x1000, 0xe10c, 0xa006, 0x2c15, 0xa200, 0x8c60, 0x8109, - 0x1dd8, 0x2010, 0xa005, 0x0904, 0x2823, 0x0804, 0x2845, 0x2069, - 0x8b51, 0x7824, 0x7930, 0xa11a, 0x1a04, 0x284b, 0x8019, 0x0904, - 0x284b, 0x684a, 0x6942, 0x782c, 0x6852, 0x7828, 0x6856, 0xa006, - 0x685a, 0x685e, 0x080c, 0x4d79, 0x0804, 0x2823, 0x2069, 0x8b51, - 0x7824, 0x7934, 0xa11a, 0x1a04, 0x284b, 0x8019, 0x0904, 0x284b, - 0x684e, 0x6946, 0x782c, 0x6862, 0x7828, 0x6866, 0xa006, 0x686a, - 0x686e, 0x080c, 0x4670, 0x0804, 0x2823, 0xa02e, 0x2520, 0x81ff, - 0x1904, 0x2848, 0x7924, 0x7b28, 0x7a2c, 0x20a9, 0x0005, 0x20a1, - 0x8b88, 0x41a1, 0x080c, 0x35c0, 0x0904, 0x2848, 0x2009, 0x0023, - 0x080c, 0x3601, 0x701b, 0x28dd, 0x0005, 0x6834, 0x2008, 0xa084, - 0x00ff, 0xa096, 0x0011, 0x0120, 0xa096, 0x0019, 0x1904, 0x2848, - 0x810f, 0xa18c, 0x00ff, 0x0904, 0x2848, 0x710e, 0x700c, 0x8001, - 0x0528, 0x700e, 0x080c, 0x35c0, 0x0904, 0x2848, 0x2009, 0x0023, - 0x2061, 0x8bd1, 0x6224, 0x6328, 0x642c, 0x6530, 0xa290, 0x0046, - 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x080c, 0x3601, - 0x701b, 0x290b, 0x0005, 0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, - 0x0120, 0xa096, 0x000a, 0x1904, 0x2848, 0x08c0, 0x7010, 0x2068, - 0x6838, 0xc0fd, 0x683a, 0x080c, 0x420d, 0x1128, 0x7007, 0x0003, - 0x701b, 0x2925, 0x0005, 0x080c, 0x4773, 0x0126, 0x2091, 0x8000, - 0x20a9, 0x0005, 0x2099, 0x8b88, 0x530a, 0x2100, 0xa210, 0xa399, - 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009, - 0x0023, 0x012e, 0x0804, 0x3604, 0x61a4, 0x7824, 0x60a6, 0x0804, - 0x2823, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b, - 0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00, - 0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, - 0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001, - 0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0, - 0x0804, 0x0427, 0x81ff, 0x1904, 0x2848, 0x7924, 0x810f, 0xa18c, - 0x00ff, 0x080c, 0x430a, 0x1904, 0x284b, 0x7e38, 0xa684, 0x3fff, - 0xa082, 0x4000, 0x0210, 0x0804, 0x284b, 0x7c28, 0x7d2c, 0x080c, - 0x44ad, 0xd28c, 0x1118, 0x080c, 0x4458, 0x0010, 0x080c, 0x4486, - 0x1518, 0x2061, 0x9200, 0x0126, 0x2091, 0x8000, 0x6000, 0xa086, - 0x0000, 0x0148, 0x6010, 0xa06d, 0x0130, 0x683c, 0xa406, 0x1118, - 0x6840, 0xa506, 0x0150, 0x012e, 0xace0, 0x000c, 0x2001, 0x8b16, - 0x2004, 0xac02, 0x1a04, 0x2848, 0x0c30, 0x080c, 0x795f, 0x012e, - 0x0904, 0x2848, 0x0804, 0x2823, 0xa00e, 0x2001, 0x0005, 0x080c, - 0x4773, 0x0126, 0x2091, 0x8000, 0x080c, 0x7dce, 0x080c, 0x46a1, - 0x012e, 0x0804, 0x2823, 0x81ff, 0x1904, 0x2848, 0x080c, 0x35d5, - 0x0904, 0x284b, 0x080c, 0x43ad, 0x0904, 0x2848, 0x080c, 0x44b9, - 0x0904, 0x2848, 0x0804, 0x2823, 0x81ff, 0x1904, 0x2848, 0x080c, - 0x35e5, 0x0904, 0x284b, 0x080c, 0x451d, 0x0904, 0x2848, 0x2019, - 0x0005, 0x080c, 0x44d4, 0x0904, 0x2848, 0x7828, 0xa08a, 0x1000, - 0x1a04, 0x284b, 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x5619, - 0x0804, 0x2823, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, - 0x0001, 0x0448, 0x2029, 0x00ff, 0x644c, 0x2400, 0xa506, 0x01f0, - 0x2508, 0x080c, 0x430a, 0x11d0, 0x080c, 0x451d, 0x1128, 0x2009, - 0x0002, 0x62ac, 0x2518, 0x00b8, 0x2019, 0x0004, 0x080c, 0x44d4, - 0x1118, 0x2009, 0x0006, 0x0078, 0x7824, 0xa08a, 0x1000, 0x1270, - 0x8003, 0x800b, 0x810b, 0xa108, 0x080c, 0x5619, 0x8529, 0x1ae8, - 0x012e, 0x0804, 0x2823, 0x012e, 0x0804, 0x2848, 0x012e, 0x0804, - 0x284b, 0x080c, 0x35d5, 0x0904, 0x284b, 0x080c, 0x4413, 0x080c, - 0x44ad, 0x0804, 0x2823, 0x81ff, 0x1904, 0x2848, 0x080c, 0x35d5, - 0x0904, 0x284b, 0x080c, 0x4404, 0x080c, 0x44ad, 0x0804, 0x2823, - 0x81ff, 0x1904, 0x2848, 0x080c, 0x35d5, 0x0904, 0x284b, 0x080c, - 0x4488, 0x0904, 0x2848, 0x080c, 0x4249, 0x080c, 0x4451, 0x080c, - 0x44ad, 0x0804, 0x2823, 0x080c, 0x35d5, 0x0904, 0x284b, 0x080c, - 0x43ad, 0x0904, 0x2848, 0x62a0, 0x2019, 0x0005, 0x00c6, 0x080c, - 0x44e6, 0x2061, 0x0000, 0x080c, 0x59d5, 0x0086, 0x2041, 0x0000, - 0x080c, 0x5911, 0x2c08, 0x080c, 0x878f, 0x008e, 0x00ce, 0x080c, - 0x44ad, 0x0804, 0x2823, 0x080c, 0x35d5, 0x0904, 0x284b, 0x080c, - 0x44ad, 0x2208, 0x0804, 0x2823, 0x0156, 0x00d6, 0x00e6, 0x2069, - 0x8c13, 0x6810, 0x6914, 0xa10a, 0x1210, 0x2009, 0x0000, 0x6816, - 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x007e, 0x2069, 0x8c34, - 0x2d04, 0xa075, 0x0130, 0x704c, 0x0071, 0xa210, 0x7080, 0x0059, - 0xa318, 0x8d68, 0x1f04, 0x2a88, 0x2300, 0xa218, 0x00ee, 0x00de, - 0x015e, 0x0804, 0x2823, 0x00f6, 0x0016, 0xa07d, 0x0140, 0x2001, - 0x0000, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, - 0x00fe, 0x0005, 0x2069, 0x8c13, 0x6910, 0x62a8, 0x0804, 0x2823, - 0x81ff, 0x1904, 0x2848, 0x614c, 0xa190, 0x263d, 0x2215, 0xa294, - 0x00ff, 0x636c, 0x83ff, 0x0108, 0x6270, 0x67c8, 0xd79c, 0x0118, - 0x2031, 0x0001, 0x0060, 0xd7ac, 0x0118, 0x2031, 0x0003, 0x0038, - 0xd7a4, 0x0118, 0x2031, 0x0002, 0x0010, 0x2031, 0x0000, 0x7e3a, - 0x7f3e, 0x0804, 0x2823, 0x613c, 0x6240, 0x0804, 0x2823, 0x0126, - 0x2091, 0x8000, 0x6134, 0xa006, 0x2010, 0x2018, 0x012e, 0x0804, - 0x2823, 0x080c, 0x35e5, 0x0904, 0x284b, 0x6244, 0x6338, 0x0804, - 0x2823, 0x613c, 0x6240, 0x7824, 0x603e, 0x7b28, 0x6342, 0x2069, - 0x8b51, 0x831f, 0xa305, 0x6816, 0x0804, 0x2823, 0x0126, 0x2091, - 0x8000, 0x7824, 0x6036, 0x012e, 0x0804, 0x2823, 0x080c, 0x35e5, - 0x0904, 0x284b, 0x7828, 0xa00d, 0x0904, 0x284b, 0x782c, 0xa005, - 0x0904, 0x284b, 0x6244, 0x6146, 0x6338, 0x603a, 0x0804, 0x2823, - 0x2001, 0x8b00, 0x2004, 0xa086, 0x0003, 0x1904, 0x2848, 0x00c6, - 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, 0x00ff, 0xa196, 0x00ff, - 0x1130, 0x2001, 0x8b14, 0x2004, 0xa085, 0xff00, 0x0078, 0xa182, - 0x007f, 0x1698, 0xa188, 0x263d, 0x210d, 0xa18c, 0x00ff, 0x2001, - 0x8b14, 0x2004, 0xa116, 0x0548, 0x810f, 0xa105, 0x0126, 0x2091, - 0x8000, 0x0006, 0x080c, 0x6cc2, 0x000e, 0x01e0, 0x601a, 0x600b, - 0xbc09, 0x601f, 0x0001, 0x080c, 0x35c0, 0x01d0, 0x6837, 0x0000, - 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x701b, - 0x2bb6, 0x2d00, 0x6012, 0x2009, 0x0032, 0x080c, 0x6d3f, 0x012e, - 0x00ce, 0x0005, 0x00ce, 0x0804, 0x2848, 0x00ce, 0x0804, 0x284b, - 0x080c, 0x6d18, 0x0cb8, 0x2001, 0x8b00, 0x2004, 0xa086, 0x0003, - 0x1904, 0x2848, 0x00c6, 0x2061, 0x0100, 0x7924, 0x810f, 0xa18c, - 0x00ff, 0xa196, 0x00ff, 0x1130, 0x2001, 0x8b14, 0x2004, 0xa085, - 0xff00, 0x0078, 0xa182, 0x007f, 0x1698, 0xa188, 0x263d, 0x210d, - 0xa18c, 0x00ff, 0x2001, 0x8b14, 0x2004, 0xa116, 0x0548, 0x810f, - 0xa105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x6cc2, 0x000e, - 0x01e0, 0x601a, 0x600b, 0xbc05, 0x601f, 0x0001, 0x080c, 0x35c0, - 0x01d0, 0x6837, 0x0000, 0x7007, 0x0003, 0x6833, 0x0000, 0x6838, - 0xc0fd, 0x683a, 0x701b, 0x2bb6, 0x2d00, 0x6012, 0x2009, 0x0032, - 0x080c, 0x6d3f, 0x012e, 0x00ce, 0x0005, 0x00ce, 0x0804, 0x2848, - 0x00ce, 0x0804, 0x284b, 0x080c, 0x6d18, 0x0cb8, 0x6830, 0xa086, - 0x0100, 0x0904, 0x2848, 0x0804, 0x2823, 0x2061, 0x8e2a, 0x0126, - 0x2091, 0x8000, 0x6000, 0xd084, 0x0128, 0x6104, 0x6208, 0x012e, - 0x0804, 0x2823, 0x012e, 0x0804, 0x284b, 0x81ff, 0x1904, 0x2848, - 0x080c, 0x4c42, 0x0904, 0x2848, 0x0126, 0x2091, 0x8000, 0x6244, - 0x6064, 0xa202, 0x0248, 0xa085, 0x0001, 0x080c, 0x2333, 0x080c, - 0x3b32, 0x012e, 0x0804, 0x2823, 0x012e, 0x0804, 0x284b, 0x0126, - 0x2091, 0x8000, 0x7824, 0xa084, 0x0007, 0x0002, 0x2bf9, 0x2c02, - 0x2c09, 0x2bf6, 0x2bf6, 0x2bf6, 0x2bf6, 0x2bf6, 0x012e, 0x0804, - 0x284b, 0x2009, 0x0114, 0x2104, 0xa085, 0x0800, 0x200a, 0x080c, - 0x2d63, 0x0070, 0x2009, 0x010b, 0x200b, 0x0010, 0x080c, 0x2d63, - 0x0038, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x2825, - 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, - 0x2009, 0x0101, 0x210c, 0x0016, 0x2001, 0x0138, 0x200c, 0x2003, - 0x0001, 0x0016, 0x2001, 0x007a, 0x2034, 0x2001, 0x007b, 0x202c, - 0xa006, 0x2048, 0x2050, 0x2058, 0x080c, 0x2f8a, 0x080c, 0x2ef4, - 0xa03e, 0x2720, 0x00f6, 0x00e6, 0x00c6, 0x2d60, 0x2071, 0x8dff, - 0x2079, 0x0020, 0x2011, 0x0001, 0x080c, 0x2ea0, 0x080c, 0x2ea0, - 0x00ce, 0x00ee, 0x00fe, 0x080c, 0x2dfa, 0x080c, 0x2ec8, 0x080c, - 0x2e45, 0x080c, 0x2db9, 0x080c, 0x2dea, 0x00f6, 0x2079, 0x0100, - 0x7824, 0xd094, 0x0530, 0x7814, 0xa084, 0x0184, 0xa085, 0x0010, - 0x7816, 0x2079, 0x0140, 0x080c, 0x2d41, 0x1110, 0x00fe, 0x0430, - 0x7804, 0xd0dc, 0x0dc0, 0x2079, 0x0100, 0x7827, 0x0086, 0x7814, - 0xa084, 0x0184, 0xa085, 0x0032, 0x7816, 0x080c, 0x2d41, 0x1110, - 0x00fe, 0x00a0, 0x7824, 0xd0bc, 0x0dc0, 0x7827, 0x0080, 0xa026, - 0x7c16, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x2d4b, 0x00fe, - 0x0804, 0x2d0b, 0x00fe, 0x080c, 0x2d41, 0x1150, 0x8948, 0x2001, - 0x007a, 0x2602, 0x2001, 0x007b, 0x2502, 0x080c, 0x2d4b, 0x0088, - 0x87ff, 0x0140, 0x2001, 0x0201, 0x2004, 0xa005, 0x1904, 0x2c45, - 0x8739, 0x0038, 0x2001, 0x8dde, 0x2004, 0xa086, 0x0000, 0x1904, - 0x2c45, 0x2001, 0x0033, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, - 0x2500, 0xa605, 0x0904, 0x2d0b, 0x7824, 0xd0bc, 0x0128, 0x2900, - 0xaa05, 0xab05, 0x1904, 0x2d0b, 0x6033, 0x000d, 0x2001, 0x0030, - 0x2003, 0x0004, 0x7824, 0xd0ac, 0x1148, 0x2001, 0x8dde, 0x2003, - 0x0003, 0x2001, 0x0030, 0x2003, 0x0009, 0x0040, 0x6027, 0x0001, - 0x2001, 0x0075, 0x2004, 0xa005, 0x0108, 0x6026, 0x2c00, 0x601a, - 0x20e1, 0x9040, 0x2d00, 0x681a, 0x6833, 0x000d, 0x7824, 0xd0a4, - 0x1180, 0x6827, 0x0000, 0x00c6, 0x20a9, 0x0008, 0x2061, 0x0020, - 0x6003, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x2ce0, 0x00ce, - 0x0040, 0x6827, 0x0001, 0x2001, 0x0074, 0x2004, 0xa005, 0x0108, - 0x6826, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0020, 0x7827, - 0x0002, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8, 0x601a, 0x0006, - 0x2001, 0x0073, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, - 0x00fe, 0x0804, 0x2c32, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e, - 0x61e2, 0x001e, 0x6106, 0x7824, 0xa084, 0x0003, 0xa086, 0x0002, - 0x0188, 0x20e1, 0x9028, 0x6050, 0xa084, 0xf7ef, 0x6052, 0x602f, - 0x0000, 0x602c, 0xc0ac, 0x602e, 0x604b, 0xf7f7, 0x6043, 0x0090, - 0x6043, 0x0010, 0x2908, 0x2a10, 0x2b18, 0x2b00, 0xaa05, 0xa905, - 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, - 0x1118, 0x012e, 0x0804, 0x2823, 0x012e, 0x2021, 0x400c, 0x0804, - 0x2825, 0xa085, 0x0001, 0x1d04, 0x2d4a, 0x2091, 0x6000, 0x8420, - 0xa486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001, - 0x0030, 0x2003, 0x0004, 0x2001, 0x0020, 0x2003, 0x0004, 0x2001, - 0x8dde, 0x2003, 0x0000, 0x2001, 0x8dff, 0x2003, 0x0000, 0x20e1, - 0xf000, 0xa026, 0x0005, 0x00f6, 0x2079, 0x0100, 0x7850, 0xa084, - 0x0990, 0x7852, 0x782c, 0xa085, 0x0020, 0x782e, 0x20a9, 0x0008, - 0x1d04, 0x2d70, 0x2091, 0x6000, 0x1f04, 0x2d70, 0x7850, 0xa085, - 0x0400, 0x7852, 0x2001, 0x0009, 0x2004, 0xa084, 0x0003, 0xa086, - 0x0001, 0x1118, 0x782c, 0xc0ac, 0x782e, 0x784b, 0xf7f7, 0x7843, - 0x0090, 0x7843, 0x0010, 0x20a9, 0x000e, 0xe000, 0x1f04, 0x2d8d, - 0x7850, 0xa085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xe000, - 0xe000, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, - 0xa085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xe000, - 0xe000, 0x8319, 0x1de0, 0x2001, 0x0140, 0x2003, 0x0100, 0x7827, - 0x0020, 0x7843, 0x0000, 0x2003, 0x0000, 0x7827, 0x0048, 0x00fe, - 0x0005, 0x7824, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x8dde, - 0x2079, 0x0030, 0x2001, 0x0201, 0x2004, 0xa005, 0x0160, 0x7000, - 0xa086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, - 0x0003, 0x7803, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x780c, 0xa08c, - 0x0070, 0x0178, 0x2009, 0x007a, 0x260a, 0x2009, 0x007b, 0x250a, - 0xd0b4, 0x0108, 0x8a50, 0xd0ac, 0x0108, 0x8948, 0xd0a4, 0x0108, - 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0140, - 0x20e1, 0x0007, 0x20e1, 0x2000, 0x2001, 0x020a, 0x2004, 0x0ca8, - 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2009, 0x8b14, 0x210c, - 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, - 0x0809, 0x7077, 0x0008, 0x7078, 0xa080, 0x0100, 0x707a, 0x7080, - 0x8000, 0x7082, 0x7087, 0xaaaa, 0xa006, 0x708a, 0x708e, 0x707e, - 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7027, 0x0080, 0x7014, - 0xa084, 0x0184, 0xa085, 0x0032, 0x7016, 0x080c, 0x2ec8, 0x080c, - 0x2d41, 0x1110, 0x8421, 0x0028, 0x7024, 0xd0bc, 0x0db0, 0x7027, - 0x0080, 0x00f6, 0x00e6, 0x2071, 0x8dde, 0x2079, 0x0030, 0x2011, - 0x0011, 0x080c, 0x2ea0, 0x2011, 0x0001, 0x080c, 0x2ea0, 0x00ee, - 0x00fe, 0x7017, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, - 0x8dde, 0x2079, 0x0030, 0x7904, 0xd1fc, 0x0904, 0x2e9d, 0x7803, - 0x0002, 0xa026, 0xd19c, 0x1904, 0x2e99, 0x7000, 0x0002, 0x2e9d, - 0x2e5b, 0x2e7f, 0x2e99, 0xd1bc, 0x1150, 0xd1dc, 0x1150, 0x8001, - 0x7002, 0x2011, 0x0001, 0x04e1, 0x05c0, 0x04d1, 0x04b0, 0x780f, - 0x0000, 0x7820, 0x7924, 0x7803, 0x0004, 0x7822, 0x7926, 0x2001, - 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c, 0x2dd6, 0x2009, 0x0001, - 0x7808, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x7902, 0x00f0, 0x8001, - 0x7002, 0xa184, 0x0880, 0x1138, 0x7804, 0xd0fc, 0x1940, 0x2011, - 0x0001, 0x00b1, 0x0090, 0x6030, 0xa092, 0x0004, 0xa086, 0x0009, - 0x1120, 0x6000, 0x601a, 0x2011, 0x0025, 0x6232, 0xd1dc, 0x1988, - 0x0870, 0x7803, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, - 0x6024, 0xa005, 0x0520, 0x8001, 0x6026, 0x6018, 0x6130, 0xa140, - 0x2804, 0x7832, 0x8840, 0x2804, 0x7836, 0x8840, 0x2804, 0x7822, - 0x8840, 0x2804, 0x7826, 0x8840, 0x7a02, 0x7000, 0x8000, 0x7002, - 0x6018, 0xa802, 0xa08a, 0x0029, 0x1138, 0x6018, 0xa080, 0x0001, - 0x2004, 0x601a, 0x2001, 0x000d, 0x6032, 0xa085, 0x0001, 0x0005, - 0x00f6, 0x00e6, 0x00c6, 0x2071, 0x8dff, 0x2079, 0x0020, 0x7904, - 0xd1fc, 0x01f0, 0x7803, 0x0002, 0x2d60, 0xa026, 0x7000, 0x0002, - 0x2ef0, 0x2edb, 0x2ee7, 0x8001, 0x7002, 0xd19c, 0x1188, 0x2011, - 0x0001, 0x080c, 0x2ea0, 0x0160, 0x080c, 0x2ea0, 0x0048, 0x8001, - 0x7002, 0x7804, 0xd0fc, 0x1d30, 0x2011, 0x0001, 0x080c, 0x2ea0, - 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, - 0x0200, 0x601b, 0x0004, 0x2061, 0x0100, 0x60cf, 0x0400, 0x6004, - 0xc0ac, 0xa085, 0x0200, 0x6006, 0x2001, 0x0074, 0x2004, 0xa005, - 0x01f8, 0x2038, 0x2001, 0x0076, 0x2024, 0x2001, 0x0077, 0x201c, - 0x080c, 0x2fe4, 0x6833, 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a, - 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0xa03e, - 0x6818, 0xa080, 0x000d, 0x04a1, 0x1d90, 0x2d00, 0x681a, 0x0088, - 0x080c, 0x2fe4, 0x6833, 0x000d, 0x2070, 0x6827, 0x0001, 0x2d00, - 0x681a, 0x2001, 0x0076, 0x2004, 0x2072, 0x2001, 0x0077, 0x2004, - 0x7006, 0x2061, 0x0020, 0x2079, 0x0100, 0x6013, 0x0400, 0x20e1, - 0x9040, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8, 0x700a, 0x601a, - 0x0006, 0x2001, 0x0073, 0x2004, 0x700e, 0x601e, 0x78c6, 0x000e, - 0x78ca, 0xa006, 0x603a, 0x603e, 0x00ce, 0x00ee, 0x00fe, 0x0005, - 0x00e6, 0x2071, 0x0010, 0x20a0, 0x2099, 0x0014, 0x7003, 0x0026, - 0x7432, 0x7336, 0xa006, 0x703a, 0x703e, 0x810b, 0x810b, 0x21a8, - 0x810b, 0x7122, 0x7003, 0x0041, 0x7004, 0xd0fc, 0x0de8, 0x7003, - 0x0002, 0x7003, 0x0040, 0x53a5, 0x7430, 0x7334, 0x87ff, 0x0180, - 0x00c6, 0x00d6, 0x2d60, 0x00c6, 0x080c, 0x35c0, 0x00ce, 0x6018, - 0x2070, 0x2d00, 0x7006, 0x601a, 0x00de, 0x00ce, 0xa085, 0x0001, - 0x00ee, 0x0005, 0x00e6, 0x2001, 0x0075, 0x2004, 0xa005, 0x0508, - 0x2038, 0x2001, 0x0078, 0x2024, 0x2001, 0x0079, 0x201c, 0x080c, - 0x2fe4, 0x2d60, 0x6833, 0x000d, 0x6f26, 0x2d00, 0x681a, 0xa78a, - 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0xa03e, - 0x6818, 0xa080, 0x000d, 0x080c, 0x2f58, 0x1d88, 0x2d00, 0x681a, - 0x00d8, 0x0491, 0x2d60, 0x6033, 0x000d, 0x2070, 0x6027, 0x0001, - 0x2c00, 0x601a, 0x2001, 0x0078, 0x2004, 0x2072, 0x2001, 0x0079, - 0x2004, 0x7006, 0x2001, 0x0072, 0x2004, 0xa084, 0xfff8, 0x700a, - 0x2001, 0x0073, 0x2004, 0x700e, 0x2001, 0x0030, 0x2003, 0x0004, - 0x7824, 0xd0ac, 0x1178, 0x2001, 0x0101, 0x200c, 0xc1ed, 0x2102, - 0x6027, 0x0000, 0x2001, 0x8dde, 0x2003, 0x0003, 0x2001, 0x0030, - 0x2003, 0x0009, 0x00ee, 0x0005, 0x080c, 0x1488, 0x0178, 0xa006, - 0x6802, 0x7010, 0xa005, 0x1120, 0x2d00, 0x7012, 0x7016, 0x0020, - 0x7014, 0x6802, 0x2d00, 0x7016, 0xad80, 0x000d, 0x0005, 0x0804, - 0x2823, 0x7d38, 0x7c3c, 0x0804, 0x28c7, 0x080c, 0x35c0, 0x0904, - 0x2848, 0x080c, 0x4c42, 0x0110, 0x080c, 0x40fd, 0x2009, 0x001c, - 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3601, 0x701b, 0x3011, - 0x0005, 0xade8, 0x000d, 0x6800, 0xa005, 0x0904, 0x284b, 0x6804, - 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x284b, 0xd094, 0x00c6, 0x2061, - 0x0100, 0x6104, 0x0138, 0x6200, 0xa292, 0x0005, 0x0218, 0xa18c, - 0xffdf, 0x0010, 0xa18d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, - 0x2061, 0x0100, 0x6104, 0x0118, 0xa18d, 0x0010, 0x0010, 0xa18c, - 0xffef, 0x6106, 0x00ce, 0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, - 0x0268, 0xd084, 0x0158, 0x6a28, 0xa28a, 0x007f, 0x1a04, 0x284b, - 0xa288, 0x263d, 0x210d, 0xa18c, 0x00ff, 0x6156, 0xd0dc, 0x0130, - 0x6828, 0xa08a, 0x007f, 0x1a04, 0x284b, 0x604e, 0x6808, 0xa08a, - 0x0100, 0x0a04, 0x284b, 0xa08a, 0x0841, 0x1a04, 0x284b, 0xa084, - 0x0007, 0x1904, 0x284b, 0x680c, 0xa005, 0x0904, 0x284b, 0x6810, - 0xa005, 0x0904, 0x284b, 0x6848, 0x6940, 0xa10a, 0x1a04, 0x284b, - 0x8001, 0x0904, 0x284b, 0x684c, 0x6944, 0xa10a, 0x1a04, 0x284b, - 0x8001, 0x0904, 0x284b, 0x6804, 0xd0fc, 0x01f8, 0x080c, 0x35c0, - 0x0904, 0x2848, 0x2009, 0x0014, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, - 0xa290, 0x0038, 0xa399, 0x0000, 0x080c, 0x3601, 0x701b, 0x3091, - 0x0005, 0xade8, 0x000d, 0x20a9, 0x0014, 0x2d98, 0x2069, 0x8b6d, - 0x2da0, 0x53a3, 0x7010, 0xa0e8, 0x000d, 0x20a9, 0x001c, 0x2d98, - 0x2069, 0x8b51, 0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, - 0x8007, 0xa084, 0x00ff, 0x6042, 0x080c, 0x4d79, 0x080c, 0x4618, - 0x080c, 0x4670, 0x6000, 0xa086, 0x0000, 0x1904, 0x3148, 0x6808, - 0x602a, 0x080c, 0x1fbd, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, - 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, - 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, - 0x8217, 0x831f, 0x0010, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, - 0x6312, 0x080c, 0x5695, 0x6904, 0xd1fc, 0x0520, 0x00c6, 0x2009, - 0x0000, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, 0x0020, 0x839d, - 0x12b0, 0x3508, 0x8109, 0x080c, 0x520d, 0x6878, 0x6016, 0x6874, - 0x2008, 0xa084, 0xff00, 0x8007, 0x600a, 0xa184, 0x00ff, 0x6006, - 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, - 0x30e7, 0x00ce, 0x2069, 0x8b51, 0x2001, 0x8d9c, 0x6a80, 0xa294, - 0x0030, 0xa28e, 0x0000, 0x0178, 0xa28e, 0x0010, 0x0118, 0xa28e, - 0x0020, 0x0148, 0x2003, 0xaaaa, 0x2001, 0x0204, 0x2004, 0x2009, - 0x8d8d, 0x200a, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, - 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x4c42, 0x0128, 0x080c, - 0x37e7, 0x0110, 0x080c, 0x2333, 0x60c0, 0xa005, 0x01a8, 0x6003, - 0x0001, 0x2091, 0x301d, 0x080c, 0x4c42, 0x1158, 0x2011, 0x4b5d, - 0x080c, 0x560d, 0x2001, 0x8d9d, 0x2003, 0x0000, 0x080c, 0x4b8b, - 0x0038, 0x080c, 0x403d, 0x0020, 0x6003, 0x0004, 0x2091, 0x301d, - 0x0804, 0x2823, 0x6000, 0xa086, 0x0000, 0x0904, 0x2848, 0x2069, - 0x8b51, 0x7830, 0x6842, 0x7834, 0x6846, 0x2d00, 0x2009, 0x001c, - 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0804, 0x3604, 0x81ff, 0x1904, - 0x2848, 0x080c, 0x4c42, 0x1158, 0x2001, 0x8d9d, 0x2003, 0x0001, - 0x2001, 0x8b00, 0x2003, 0x0001, 0x080c, 0x4b8b, 0x0038, 0xa006, - 0x080c, 0x2333, 0x080c, 0x40fd, 0x080c, 0x403d, 0x0804, 0x2823, - 0x81ff, 0x1904, 0x2848, 0x080c, 0x4c42, 0x1110, 0x0804, 0x2848, - 0x6184, 0x81ff, 0x0198, 0x703f, 0x0000, 0x2001, 0x91c0, 0x2009, - 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0126, 0x2091, 0x8000, - 0x080c, 0x3604, 0x701b, 0x2821, 0x012e, 0x0005, 0x703f, 0x0001, - 0x00d6, 0x2069, 0x91c0, 0x20a9, 0x0040, 0x20a1, 0x91c0, 0x2019, - 0xffff, 0x43a4, 0x654c, 0xa588, 0x263d, 0x210d, 0xa18c, 0x00ff, - 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100, 0xa506, 0x01a8, 0x080c, - 0x430a, 0x1190, 0x6014, 0x821c, 0x0238, 0xa398, 0x91c0, 0xa085, - 0xff00, 0x8007, 0x201a, 0x0038, 0xa398, 0x91c0, 0x2324, 0xa4a4, - 0xff00, 0xa405, 0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x1208, - 0x0c18, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x00de, 0x20a9, - 0x0040, 0x20a1, 0x91c0, 0x2099, 0x91c0, 0x080c, 0x409e, 0x0804, - 0x3185, 0x080c, 0x35e5, 0x0904, 0x284b, 0x00c6, 0x080c, 0x35c0, - 0x00ce, 0x0904, 0x2848, 0x080c, 0x4c42, 0x0500, 0x2001, 0x8b52, - 0x2004, 0xd0b4, 0x01d8, 0x6000, 0xd08c, 0x11c0, 0x6004, 0xa084, - 0x00ff, 0xa086, 0x0006, 0x1190, 0x6837, 0x0000, 0x6838, 0xc0fd, - 0x683a, 0x080c, 0x7d17, 0x0904, 0x2848, 0x7007, 0x0003, 0x701b, - 0x3202, 0x0005, 0x080c, 0x35e5, 0x0904, 0x284b, 0x20a9, 0x002b, - 0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80, - 0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x080c, 0x409e, 0x20a9, - 0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, 0x080c, - 0x409e, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, - 0x0804, 0x3604, 0x81ff, 0x1904, 0x2848, 0x080c, 0x35d5, 0x0904, - 0x284b, 0x080c, 0x44c2, 0x0804, 0x2823, 0x81ff, 0x1904, 0x2848, - 0x7828, 0xa08a, 0x1000, 0x1a04, 0x284b, 0x080c, 0x35e5, 0x0904, - 0x284b, 0x080c, 0x451d, 0x0904, 0x2848, 0x2019, 0x0004, 0x080c, - 0x44d4, 0x7924, 0x810f, 0x7a28, 0x0011, 0x0804, 0x2823, 0xa186, - 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x8b00, - 0x644c, 0x2400, 0xa506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, - 0x0005, 0x080c, 0x430a, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, - 0xa108, 0x080c, 0x5619, 0x0005, 0x81ff, 0x1904, 0x2848, 0x080c, - 0x35d5, 0x0904, 0x284b, 0x080c, 0x43ad, 0x0904, 0x2848, 0x080c, - 0x44cb, 0x0804, 0x2823, 0x81ff, 0x1904, 0x2848, 0x080c, 0x35d5, - 0x0904, 0x284b, 0x080c, 0x43ad, 0x0904, 0x2848, 0x080c, 0x44b9, - 0x0804, 0x2823, 0x6100, 0x2001, 0x8d9d, 0x2014, 0xa282, 0x0003, - 0x1210, 0x0804, 0x2823, 0x2011, 0x0000, 0x0804, 0x2823, 0x0804, - 0x2823, 0x080c, 0x35e5, 0x0904, 0x284b, 0x6004, 0xa086, 0x0707, - 0x0904, 0x284b, 0x2001, 0x8b00, 0x2004, 0xa086, 0x0003, 0x1904, - 0x2848, 0x00d6, 0xace8, 0x000a, 0x7924, 0xd184, 0x0110, 0xace8, - 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, - 0x831f, 0x6a00, 0x8217, 0x00de, 0x6100, 0xa18c, 0x0200, 0x0804, - 0x2823, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x1a04, 0x2848, - 0x624c, 0xa294, 0x00ff, 0xa084, 0xff00, 0x8007, 0xa206, 0x1150, - 0x2001, 0x8b40, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, - 0x0804, 0x3604, 0x81ff, 0x1904, 0x2848, 0x080c, 0x35e5, 0x0904, - 0x284b, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1904, 0x2848, - 0x00c6, 0x080c, 0x35c0, 0x00ce, 0x0904, 0x2848, 0x6837, 0x0000, - 0x6838, 0xc0fd, 0x683a, 0x080c, 0x7cc9, 0x0904, 0x2848, 0x7007, - 0x0003, 0x701b, 0x32fc, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, - 0x2848, 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, - 0x7d38, 0x0804, 0x3604, 0x7824, 0xa084, 0x00ff, 0xa086, 0x00ff, - 0x0118, 0x81ff, 0x1904, 0x2848, 0x080c, 0x4c42, 0x0128, 0xa006, - 0x080c, 0x2333, 0x080c, 0x40fd, 0x7828, 0xa08a, 0x1000, 0x1a04, - 0x284b, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0138, - 0xa182, 0x007f, 0x1a04, 0x284b, 0x2100, 0x080c, 0x22fd, 0x0026, - 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x8dbd, 0x601b, 0x0000, - 0x601f, 0x0000, 0x080c, 0x4c42, 0x1158, 0x2001, 0x8d9d, 0x2003, - 0x0001, 0x2001, 0x8b00, 0x2003, 0x0001, 0x080c, 0x4b8b, 0x00a0, - 0x2061, 0x0100, 0x2001, 0x8b14, 0x2004, 0xa084, 0x00ff, 0x810f, - 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, - 0x2011, 0x4062, 0x080c, 0x568c, 0x7924, 0xa18c, 0xff00, 0x810f, - 0x080c, 0x4c42, 0x1110, 0x2009, 0x00ff, 0x7a28, 0x080c, 0x324f, - 0x012e, 0x00ce, 0x002e, 0x0804, 0x2823, 0x7924, 0xa18c, 0xff00, - 0x810f, 0x00c6, 0x080c, 0x42d6, 0x2c08, 0x00ce, 0x1904, 0x284b, - 0x0804, 0x2823, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x2848, - 0x60c8, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, - 0x2848, 0x080c, 0x35c0, 0x1120, 0x2009, 0x0002, 0x0804, 0x2848, - 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x080c, 0x3601, 0x701b, - 0x339a, 0x0005, 0x2009, 0x0080, 0x080c, 0x430a, 0x1130, 0x6004, - 0xa084, 0x00ff, 0xa086, 0x0006, 0x0120, 0x2021, 0x400a, 0x0804, - 0x2825, 0x00d6, 0xade8, 0x000d, 0x6900, 0x6a08, 0x6b0c, 0x6c10, - 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0904, 0x340d, 0xa0be, - 0x0112, 0x0904, 0x340d, 0xa0be, 0x0113, 0x0904, 0x340d, 0xa0be, - 0x0114, 0x0904, 0x340d, 0xa0be, 0x0117, 0x0904, 0x340d, 0xa0be, - 0x011a, 0x0904, 0x340d, 0xa0be, 0x0121, 0x05b0, 0xa0be, 0x0131, - 0x0598, 0xa0be, 0x0171, 0x05c8, 0xa0be, 0x0173, 0x05b0, 0xa0be, - 0x01a1, 0x1120, 0x6830, 0x8007, 0x6832, 0x04a0, 0xa0be, 0x0212, - 0x0540, 0xa0be, 0x0213, 0x0528, 0xa0be, 0x0214, 0x01b0, 0xa0be, - 0x0217, 0x0168, 0xa0be, 0x021a, 0x1120, 0x6838, 0x8007, 0x683a, - 0x00e0, 0xa0be, 0x0300, 0x01c8, 0x00de, 0x0804, 0x284b, 0xad80, - 0x0010, 0x20a9, 0x0007, 0x080c, 0x3450, 0xad80, 0x000e, 0x20a9, - 0x0001, 0x080c, 0x3450, 0x0048, 0xad80, 0x000c, 0x080c, 0x345e, - 0x0048, 0xad80, 0x000e, 0x080c, 0x345e, 0xad80, 0x000c, 0x20a9, - 0x0001, 0x04f1, 0x00c6, 0x080c, 0x35c0, 0x0558, 0x6838, 0xc0fd, - 0x683a, 0x6837, 0x0119, 0x6853, 0x0000, 0x684f, 0x0020, 0x685b, - 0x0001, 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e, - 0x6d92, 0x6996, 0x689b, 0x0000, 0x00ce, 0x00de, 0x6837, 0x0000, - 0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x080c, 0x7ce3, 0x1120, - 0x2009, 0x0003, 0x0804, 0x2848, 0x7007, 0x0003, 0x701b, 0x3447, - 0x0005, 0x00ce, 0x00de, 0x2009, 0x0002, 0x0804, 0x2848, 0x6820, - 0xa086, 0x8001, 0x1904, 0x2823, 0x2009, 0x0004, 0x0804, 0x2848, - 0x0016, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a, 0x8108, - 0x280a, 0x8108, 0x1f04, 0x3452, 0x001e, 0x0005, 0x0016, 0x00a6, - 0x00b6, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054, 0x8000, - 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a, - 0x00be, 0x00ae, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, - 0x0804, 0x2848, 0x7924, 0x2140, 0xa18c, 0xff00, 0x810f, 0x60c8, - 0xd0ac, 0x1120, 0xa182, 0x0080, 0x0a04, 0x284b, 0xa182, 0x00ff, - 0x1a04, 0x284b, 0x7a2c, 0x7b28, 0x606c, 0xa306, 0x1140, 0x6070, - 0xa24e, 0x0904, 0x284b, 0xa9cc, 0xff00, 0x0904, 0x284b, 0x00c6, - 0x080c, 0x3513, 0x2c68, 0x00ce, 0x01c0, 0xa0c6, 0x4000, 0x1108, - 0x0088, 0xa0c6, 0x4007, 0x1110, 0x2408, 0x0060, 0xa0c6, 0x4008, - 0x1118, 0x2708, 0x2610, 0x0030, 0xa0c6, 0x4009, 0x1108, 0x0010, - 0x2001, 0x4006, 0x2020, 0x0804, 0x2825, 0x2d00, 0x7022, 0x0016, - 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x6cc2, 0x05a0, 0x2d00, - 0x601a, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x35c0, 0x00ce, - 0x2b70, 0x1150, 0x080c, 0x6d18, 0x00ee, 0x00ce, 0x00be, 0x001e, - 0x2009, 0x0002, 0x0804, 0x2848, 0x6837, 0x0000, 0x2d00, 0x6012, - 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x0126, 0x2091, 0x8000, - 0x080c, 0x2563, 0x012e, 0x601f, 0x0001, 0x2001, 0x0000, 0x080c, - 0x42a7, 0x2001, 0x0002, 0x080c, 0x42b9, 0x2009, 0x0002, 0x080c, - 0x6d3f, 0xa085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x1120, - 0x2009, 0x0003, 0x0804, 0x2848, 0x7007, 0x0003, 0x701b, 0x3501, - 0x0005, 0x6830, 0xa086, 0x0100, 0x2009, 0x0004, 0x0904, 0x2848, - 0x7020, 0x2060, 0x2009, 0x0000, 0x080c, 0x457e, 0x1110, 0x2009, - 0x0001, 0x0804, 0x2823, 0x00e6, 0x00d6, 0x2029, 0x0000, 0x2001, - 0x8b32, 0x2004, 0xd0ac, 0x0138, 0x2021, 0x0000, 0x20a9, 0x00ff, - 0x2071, 0x8c34, 0x0030, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071, - 0x8cb4, 0x2e04, 0xa005, 0x1130, 0x2100, 0xa406, 0x1548, 0x2428, - 0xc5fd, 0x0430, 0x2068, 0x6f10, 0x2700, 0xa306, 0x11b0, 0x6e14, - 0x2600, 0xa206, 0x1190, 0x2400, 0xa106, 0x1160, 0x2d60, 0xd884, - 0x0540, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x1510, 0x2001, - 0x4000, 0x0400, 0x2001, 0x4007, 0x00e8, 0x2400, 0xa106, 0x1140, - 0x6e14, 0x87ff, 0x1110, 0x86ff, 0x09d0, 0x2001, 0x4008, 0x0090, - 0x8420, 0x8e70, 0x1f04, 0x3529, 0x85ff, 0x1130, 0x2001, 0x4009, - 0x0048, 0x2001, 0x0001, 0x0030, 0x080c, 0x42d6, 0x1dd0, 0x6312, - 0x6216, 0xa006, 0xa005, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x1904, - 0x2848, 0x080c, 0x35c0, 0x0904, 0x2848, 0x6837, 0x0000, 0x6838, - 0xc0fd, 0x683a, 0x7824, 0xa005, 0x0904, 0x284b, 0xa096, 0x00ff, - 0x0120, 0xa092, 0x0004, 0x1a04, 0x284b, 0x2010, 0x2d18, 0x080c, - 0x2528, 0x0904, 0x2848, 0x7007, 0x0003, 0x701b, 0x3590, 0x0005, - 0x6830, 0xa086, 0x0100, 0x0904, 0x2848, 0x0804, 0x2823, 0x7924, - 0xa18c, 0xff00, 0x810f, 0x60c8, 0xd0ac, 0x1120, 0xa182, 0x0080, - 0x0a04, 0x284b, 0xa182, 0x00ff, 0x1a04, 0x284b, 0x0126, 0x2091, - 0x8000, 0x080c, 0x7bbb, 0x1188, 0xa190, 0x8c34, 0x2204, 0xa065, - 0x0160, 0x080c, 0x4118, 0x2001, 0x8b32, 0x2004, 0xd0ac, 0x0110, - 0x6017, 0x0000, 0x012e, 0x0804, 0x2823, 0x012e, 0x0804, 0x2848, - 0x080c, 0x1488, 0x0188, 0xa006, 0x6802, 0x7010, 0xa005, 0x1120, - 0x2d00, 0x7012, 0x7016, 0x0030, 0x7014, 0x6802, 0x2060, 0x2d00, - 0x6006, 0x7016, 0xad80, 0x000d, 0x0005, 0x7924, 0x810f, 0xa18c, - 0x00ff, 0x080c, 0x430a, 0x1130, 0x7e28, 0xa684, 0x3fff, 0xa082, - 0x4000, 0x0208, 0xa066, 0x8cff, 0x0005, 0x7e24, 0x860f, 0xa18c, - 0x00ff, 0x080c, 0x430a, 0x1128, 0xa6b4, 0x00ff, 0xa682, 0x4000, - 0x0208, 0xa066, 0x8cff, 0x0005, 0x0016, 0x7110, 0x81ff, 0x0128, - 0x2168, 0x6904, 0x080c, 0x149f, 0x0cc8, 0x7112, 0x7116, 0x001e, - 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x8bd1, - 0x6606, 0x6112, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, - 0x080c, 0x14d3, 0x7007, 0x0002, 0x701b, 0x2823, 0x0005, 0x00f6, - 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x8b8f, 0x2004, - 0xa005, 0x1168, 0x0e04, 0x362f, 0x7818, 0xd084, 0x1140, 0x7a22, - 0x7b26, 0x7c2a, 0x781b, 0x0001, 0x2091, 0x4080, 0x0408, 0x0016, - 0x00c6, 0x00e6, 0x2071, 0x8b81, 0x7138, 0xa182, 0x0010, 0x0218, - 0x7030, 0x2060, 0x0078, 0x7030, 0xa0e0, 0x0004, 0xac82, 0x8bd1, - 0x0210, 0x2061, 0x8b91, 0x2c00, 0x7032, 0x81ff, 0x1108, 0x7036, - 0x8108, 0x713a, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x001e, - 0x012e, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x8b81, 0x7038, 0xa005, - 0x0570, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3686, 0x00f6, 0x2079, - 0x0000, 0x7818, 0xd084, 0x1508, 0x00c6, 0x7034, 0x2060, 0x2c04, - 0x7822, 0x6004, 0x7826, 0x6008, 0x782a, 0x781b, 0x0001, 0x2091, - 0x4080, 0x7038, 0x8001, 0x703a, 0xa005, 0x1130, 0x7033, 0x8b91, - 0x7037, 0x8b91, 0x00ce, 0x0048, 0xac80, 0x0004, 0xa0fa, 0x8bd1, - 0x0210, 0x2001, 0x8b91, 0x7036, 0x00ce, 0x00fe, 0x012e, 0x00ee, - 0x0005, 0x0026, 0x2001, 0x8b52, 0x2004, 0xd0c4, 0x0120, 0x2011, - 0x8014, 0x080c, 0x3617, 0x002e, 0x0005, 0x81ff, 0x1904, 0x2848, - 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, 0x080c, 0x4c42, - 0x1158, 0x2001, 0x8d9d, 0x2003, 0x0001, 0x2001, 0x8b00, 0x2003, - 0x0001, 0x080c, 0x4b8b, 0x0010, 0x080c, 0x403d, 0x012e, 0x0804, - 0x2823, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x1128, 0x61d4, 0xa10d, - 0x61d6, 0x0804, 0x2823, 0x0804, 0x284b, 0x81ff, 0x1904, 0x2848, - 0x6000, 0xa086, 0x0003, 0x1904, 0x2848, 0x2001, 0x8b52, 0x2004, - 0xd0a4, 0x1904, 0x2848, 0x080c, 0x35e5, 0x0904, 0x284b, 0x6004, - 0xa084, 0x00ff, 0xa086, 0x0006, 0x1120, 0x7828, 0xa005, 0x0904, - 0x2823, 0x00c6, 0x080c, 0x35c0, 0x00ce, 0x0904, 0x2848, 0x6837, - 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x080c, 0x7d78, - 0x0904, 0x2848, 0x7007, 0x0003, 0x701b, 0x36ef, 0x0005, 0x6830, - 0xa086, 0x0100, 0x0904, 0x2848, 0x0804, 0x2823, 0x2001, 0x8b00, - 0x2004, 0xa086, 0x0003, 0x1904, 0x2848, 0x7f24, 0x7a2c, 0x7b28, - 0x7c3c, 0x7d38, 0x080c, 0x35c0, 0x0904, 0x2848, 0x2009, 0x0000, - 0x2031, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000, 0xad80, 0x0005, - 0x7026, 0x20a0, 0x080c, 0x430a, 0x1560, 0x6004, 0xa0c4, 0x00ff, - 0xa8c6, 0x0006, 0x0128, 0xa0c4, 0xff00, 0xa8c6, 0x0600, 0x1508, - 0x2001, 0x8b52, 0x2004, 0xd0ac, 0x1118, 0x080c, 0x457e, 0x01c8, - 0xd784, 0x0150, 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, - 0x53a3, 0x080c, 0x345e, 0x0048, 0xac80, 0x000a, 0x2098, 0x3400, - 0x20a9, 0x0004, 0x53a3, 0x080c, 0x345e, 0x21a2, 0x94a0, 0xa6b0, - 0x0005, 0x8108, 0x2001, 0x8b32, 0x2004, 0xd0ac, 0x0118, 0xa186, - 0x0100, 0x0040, 0xd78c, 0x0120, 0xa186, 0x0100, 0x0148, 0x0018, - 0xa186, 0x007e, 0x0128, 0xa686, 0x0028, 0x0150, 0x0804, 0x3712, - 0x86ff, 0x1120, 0x7120, 0x810b, 0x0804, 0x2823, 0x702f, 0x0001, - 0x711e, 0x7020, 0xa600, 0x7022, 0x772a, 0x2061, 0x8bd1, 0x6007, - 0x0000, 0x6612, 0x7024, 0x600e, 0x6226, 0x632a, 0x642e, 0x6532, - 0x2c10, 0x080c, 0x14d3, 0x7007, 0x0002, 0x701b, 0x3778, 0x0005, - 0x702c, 0xa005, 0x1170, 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, - 0x0000, 0x2061, 0x8bd1, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, - 0x3712, 0x7120, 0x810b, 0x0804, 0x2823, 0x2029, 0x007e, 0x7924, - 0x7a28, 0x7b2c, 0x7c38, 0xa184, 0xff00, 0x8007, 0xa0e2, 0x0020, - 0x0a04, 0x284b, 0xa502, 0x0a04, 0x284b, 0xa184, 0x00ff, 0xa0e2, - 0x0020, 0x0a04, 0x284b, 0xa502, 0x0a04, 0x284b, 0xa284, 0xff00, - 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x284b, 0xa502, 0x0a04, 0x284b, - 0xa284, 0x00ff, 0xa0e2, 0x0020, 0x0a04, 0x284b, 0xa502, 0x0a04, - 0x284b, 0xa384, 0xff00, 0x8007, 0xa0e2, 0x0020, 0x0a04, 0x284b, - 0xa502, 0x0a04, 0x284b, 0xa384, 0x00ff, 0xa0e2, 0x0020, 0x0a04, - 0x284b, 0xa502, 0x0a04, 0x284b, 0xa484, 0xff00, 0x8007, 0xa0e2, - 0x0020, 0x0a04, 0x284b, 0xa502, 0x0a04, 0x284b, 0xa484, 0x00ff, - 0xa0e2, 0x0020, 0x0a04, 0x284b, 0xa502, 0x0a04, 0x284b, 0x2061, - 0x8da4, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x2823, 0x0006, - 0x2001, 0x8b52, 0x2004, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x2001, - 0x8b71, 0x2004, 0xd0bc, 0x000e, 0x0005, 0x6164, 0x7a24, 0x6300, - 0x82ff, 0x1118, 0x7926, 0x0804, 0x2823, 0x83ff, 0x1904, 0x284b, - 0x2001, 0xfff0, 0xa200, 0x1a04, 0x284b, 0x2019, 0xffff, 0x6068, - 0xa302, 0xa200, 0x0a04, 0x284b, 0x7926, 0x6266, 0x0804, 0x2823, - 0x2001, 0x8b00, 0x2004, 0xa086, 0x0003, 0x1904, 0x2848, 0x7c28, - 0x7d24, 0x7e38, 0x7f2c, 0x080c, 0x35c0, 0x0904, 0x2848, 0x2009, - 0x0000, 0x2019, 0x0000, 0x7023, 0x0000, 0x702f, 0x0000, 0xad80, - 0x0003, 0x7026, 0x20a0, 0xa1e0, 0x8c34, 0x2c64, 0x8cff, 0x01b8, - 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x0130, 0x6004, 0xa084, - 0xff00, 0xa086, 0x0600, 0x1158, 0x6014, 0x20a2, 0x94a0, 0x6010, - 0x8007, 0xa105, 0x8007, 0x20a2, 0x94a0, 0xa398, 0x0002, 0x8108, - 0xa182, 0x00ff, 0x0120, 0xa386, 0x002a, 0x0148, 0x08e0, 0x83ff, - 0x1120, 0x7120, 0x810c, 0x0804, 0x2823, 0x702f, 0x0001, 0x711e, - 0x7020, 0xa300, 0x7022, 0x2061, 0x8bd1, 0x6007, 0x0000, 0x6312, - 0x7024, 0x600e, 0x6426, 0x652a, 0x662e, 0x6732, 0x2c10, 0x080c, - 0x14d3, 0x7007, 0x0002, 0x701b, 0x386e, 0x0005, 0x702c, 0xa005, - 0x1158, 0x711c, 0x7024, 0x20a0, 0x2019, 0x0000, 0x6424, 0x6528, - 0x662c, 0x6730, 0x0804, 0x382b, 0x7120, 0x810c, 0x0804, 0x2823, - 0x81ff, 0x1904, 0x2848, 0x60c8, 0xd0ac, 0x1118, 0xd09c, 0x0904, - 0x2848, 0x080c, 0x35c0, 0x0904, 0x2848, 0x7924, 0x7a2c, 0x7b28, - 0x7c3c, 0x7d38, 0x080c, 0x3601, 0x701b, 0x3897, 0x0005, 0x00d6, - 0xade8, 0x000d, 0x6828, 0xa0be, 0x7000, 0x0148, 0xa0be, 0x7100, - 0x0130, 0xa0be, 0x7200, 0x0118, 0x00de, 0x0804, 0x284b, 0x6820, - 0x6924, 0x080c, 0x22e9, 0x1500, 0x080c, 0x42d6, 0x11e8, 0x7122, - 0x6612, 0x6516, 0x6e18, 0x00c6, 0x080c, 0x35c0, 0x01a8, 0x080c, - 0x35c0, 0x0190, 0x00ce, 0x00de, 0x6837, 0x0000, 0x6838, 0xc0fd, - 0x683a, 0x6823, 0x0000, 0x080c, 0x7cfd, 0x0904, 0x2848, 0x7007, - 0x0003, 0x701b, 0x38cf, 0x0005, 0x00de, 0x0804, 0x2848, 0x7120, - 0x080c, 0x42f5, 0x6820, 0xa086, 0x8001, 0x0904, 0x2848, 0x2d00, - 0x701e, 0x6804, 0xa080, 0x0002, 0x0006, 0x20a9, 0x002a, 0x2098, - 0x20a0, 0x080c, 0x409e, 0x000e, 0xade8, 0x000d, 0x6a08, 0x6b0c, - 0x6c10, 0x6d14, 0x2061, 0x8bd1, 0x6007, 0x0000, 0x6e00, 0x6f28, - 0xa7c6, 0x7000, 0x1108, 0x0018, 0xa7c6, 0x7100, 0x1140, 0xa6c2, - 0x0004, 0x0a04, 0x284b, 0x2009, 0x0004, 0x0804, 0x3604, 0xa7c6, - 0x7200, 0x1904, 0x284b, 0xa6c2, 0x0054, 0x0a04, 0x284b, 0x600e, - 0x6013, 0x002a, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x080c, - 0x14d3, 0x7007, 0x0002, 0x701b, 0x3916, 0x0005, 0x701c, 0x2068, - 0x6804, 0xa080, 0x0001, 0x2004, 0xa080, 0x0002, 0x0006, 0x20a9, - 0x002a, 0x2098, 0x20a0, 0x080c, 0x409e, 0x000e, 0x2009, 0x002a, - 0x2061, 0x8bd1, 0x6224, 0x6328, 0x642c, 0x6530, 0x0804, 0x3604, - 0x81ff, 0x1904, 0x2848, 0x080c, 0x35d5, 0x0904, 0x284b, 0x080c, - 0x43ad, 0x0904, 0x2848, 0x080c, 0x44dd, 0x0804, 0x2823, 0x7824, - 0xd084, 0x0904, 0x31d9, 0x080c, 0x35e5, 0x0904, 0x284b, 0x00c6, - 0x080c, 0x35c0, 0x00ce, 0x0904, 0x2848, 0x6004, 0xa084, 0x00ff, - 0xa086, 0x0006, 0x11f0, 0x2001, 0x8b52, 0x2004, 0xd0b4, 0x0904, - 0x3206, 0x6000, 0xd08c, 0x1904, 0x3206, 0x6837, 0x0000, 0x6838, - 0xc0fd, 0x683a, 0x080c, 0x7d17, 0x0904, 0x2848, 0x7007, 0x0003, - 0x701b, 0x396b, 0x0005, 0x080c, 0x35e5, 0x0904, 0x284b, 0x0804, - 0x3206, 0x2009, 0x8b2f, 0x210c, 0x81ff, 0x1904, 0x2848, 0x2001, - 0x8b00, 0x2004, 0xa086, 0x0003, 0x1904, 0x2848, 0x2001, 0x8b52, - 0x2004, 0xd0ac, 0x1904, 0x2848, 0x6837, 0x0000, 0x6833, 0x0000, - 0x6838, 0xc0fd, 0x683a, 0x080c, 0x7d78, 0x0904, 0x2848, 0x7007, - 0x0003, 0x701b, 0x3994, 0x0005, 0x6830, 0xa086, 0x0100, 0x0904, - 0x2848, 0x080c, 0x35e5, 0x0904, 0x284b, 0x0804, 0x3953, 0x0126, - 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x8b00, 0x6044, 0xd0a4, - 0x11b0, 0xd084, 0x0118, 0x080c, 0x3b0c, 0x0068, 0xd08c, 0x0118, - 0x080c, 0x3a2d, 0x0040, 0xd094, 0x0118, 0x080c, 0x3a05, 0x0018, - 0xd09c, 0x0108, 0x0061, 0x00ee, 0x00ce, 0x012e, 0x0005, 0x0016, - 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0ca0, 0x624c, - 0xa286, 0xf0f0, 0x1150, 0x6048, 0xa086, 0xf0f0, 0x0130, 0x624a, - 0x6043, 0x0090, 0x6043, 0x0010, 0x0478, 0xa294, 0xff00, 0xa296, - 0xf700, 0x0160, 0x6240, 0xa295, 0x0100, 0x6242, 0xa294, 0x0010, - 0x0128, 0x2009, 0x00f7, 0x080c, 0x40be, 0x00f0, 0x6040, 0xa084, - 0x0010, 0xa085, 0x0040, 0x6042, 0x6043, 0x0000, 0x7077, 0x0000, - 0x7093, 0x0001, 0x70b3, 0x0000, 0x70cb, 0x0000, 0x2009, 0x91c0, - 0x200b, 0x0000, 0x7087, 0x0000, 0x707b, 0x000f, 0x2009, 0x000f, - 0x2011, 0x3fe0, 0x080c, 0x568c, 0x0005, 0x0156, 0x7078, 0xa005, - 0x1510, 0x2011, 0x3fe0, 0x080c, 0x560d, 0x6040, 0xa094, 0x0010, - 0xa285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, - 0x1f04, 0x3a15, 0x6242, 0x708b, 0x0000, 0x6040, 0xa094, 0x0010, - 0xa285, 0x0080, 0x6042, 0x6242, 0x0030, 0x6242, 0x708b, 0x0000, - 0x707f, 0x0000, 0x0000, 0x015e, 0x0005, 0x707c, 0xa08a, 0x0003, - 0x1210, 0x0023, 0x0010, 0x080c, 0x1410, 0x0005, 0x3a39, 0x3a89, - 0x3b0b, 0x00f6, 0x707f, 0x0001, 0x20e1, 0xa000, 0xe000, 0x20e1, - 0x8700, 0x080c, 0x1fbd, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2079, - 0x9000, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000, 0x780f, - 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000, 0x781f, - 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000, 0x782f, - 0x0000, 0x2079, 0x900c, 0x207b, 0x1101, 0x7807, 0x0000, 0x2099, - 0x8b05, 0x20a1, 0x900e, 0x20a9, 0x0004, 0x53a3, 0x2079, 0x9012, - 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0x9000, 0x20a1, 0x020b, - 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, - 0x4024, 0x00fe, 0x7083, 0x0000, 0x6043, 0x0008, 0x6043, 0x0000, - 0x0005, 0x00d6, 0x7080, 0x7083, 0x0000, 0xa025, 0x0904, 0x3af3, - 0x6020, 0xd0b4, 0x1904, 0x3af1, 0x7190, 0x81ff, 0x0904, 0x3adb, - 0xa486, 0x000c, 0x1904, 0x3ae6, 0xa480, 0x0018, 0x8004, 0x20a8, - 0x2011, 0x9080, 0x2019, 0x9000, 0x220c, 0x2304, 0xa106, 0x1188, - 0x8210, 0x8318, 0x1f04, 0x3aa4, 0x6043, 0x0004, 0x608b, 0xbc94, - 0x608f, 0xf0f0, 0x6043, 0x0006, 0x707f, 0x0002, 0x708b, 0x0002, - 0x04c0, 0x2069, 0x9080, 0x6930, 0xa18e, 0x1101, 0x1538, 0x6834, - 0xa005, 0x1520, 0x6900, 0xa18c, 0x00ff, 0x1118, 0x6804, 0xa005, - 0x0190, 0x2011, 0x908e, 0x2019, 0x8b05, 0x20a9, 0x0004, 0x220c, - 0x2304, 0xa102, 0x0230, 0x1190, 0x8210, 0x8318, 0x1f04, 0x3acf, - 0x0068, 0x7093, 0x0000, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, - 0x9080, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x6043, 0x0008, - 0x6043, 0x0000, 0x6020, 0xd0b4, 0x1120, 0x60c3, 0x000c, 0x080c, - 0x4024, 0x00de, 0x0005, 0x6040, 0xa085, 0x0100, 0x6042, 0x6020, - 0xd0b4, 0x1db8, 0x60c3, 0x000c, 0x2011, 0x8db4, 0x2013, 0x0000, - 0x7083, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, - 0x080c, 0x66ee, 0x0c30, 0x0005, 0x7088, 0xa08a, 0x001d, 0x1210, - 0x0023, 0x0010, 0x080c, 0x1410, 0x0005, 0x3b3f, 0x3b4e, 0x3b78, - 0x3b8d, 0x3bb3, 0x3bdb, 0x3c01, 0x3c32, 0x3c58, 0x3c80, 0x3cbb, - 0x3ce3, 0x3cff, 0x3d15, 0x3d35, 0x3d48, 0x3d50, 0x3d7a, 0x3da0, - 0x3dc8, 0x3dee, 0x3e1f, 0x3e5b, 0x3e8a, 0x3ea6, 0x3ee5, 0x3f05, - 0x3f1e, 0x3f1f, 0x00c6, 0x2061, 0x8b00, 0x6003, 0x0007, 0x2061, - 0x0100, 0x6004, 0xa084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x608b, - 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0002, 0x708b, 0x0001, 0x2009, - 0x07d0, 0x2011, 0x3fe7, 0x080c, 0x5601, 0x0005, 0x00f6, 0x7080, - 0xa086, 0x0014, 0x1518, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x11f0, - 0x2079, 0x9080, 0x7a30, 0xa296, 0x1102, 0x11b0, 0x7834, 0xa005, - 0x1198, 0x7a38, 0xd2fc, 0x0138, 0x70b0, 0xa005, 0x1120, 0x080c, - 0x40d5, 0x70b3, 0x0001, 0x2011, 0x3fe7, 0x080c, 0x560d, 0x708b, - 0x0010, 0x080c, 0x3d50, 0x0010, 0x7083, 0x0000, 0x00fe, 0x0005, - 0x708b, 0x0003, 0x6043, 0x0004, 0x080c, 0x40a6, 0x20a3, 0x1102, - 0x20a3, 0x0000, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x1f04, 0x3b84, - 0x60c3, 0x0014, 0x080c, 0x4024, 0x0005, 0x00f6, 0x7080, 0xa005, - 0x0500, 0x2011, 0x3fe7, 0x080c, 0x560d, 0xa086, 0x0014, 0x11b8, - 0x2079, 0x9080, 0x7a30, 0xa296, 0x1102, 0x1188, 0x7834, 0xa005, - 0x1170, 0x7a38, 0xd2fc, 0x0138, 0x70b0, 0xa005, 0x1120, 0x080c, - 0x40d5, 0x70b3, 0x0001, 0x708b, 0x0004, 0x0029, 0x0010, 0x080c, - 0x40ee, 0x00fe, 0x0005, 0x708b, 0x0005, 0x080c, 0x40a6, 0x20a3, - 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0x908e, 0x080c, 0x40f5, - 0x1160, 0x7074, 0xa005, 0x1148, 0x714c, 0xa186, 0xffff, 0x0128, - 0x080c, 0x3fab, 0x0110, 0x080c, 0x40d5, 0x20a9, 0x0008, 0x2298, - 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, - 0x080c, 0x4024, 0x0005, 0x00f6, 0x7080, 0xa005, 0x0500, 0x2011, - 0x3fe7, 0x080c, 0x560d, 0xa086, 0x0014, 0x11b8, 0x2079, 0x9080, - 0x7a30, 0xa296, 0x1103, 0x1188, 0x7834, 0xa005, 0x1170, 0x7a38, - 0xd2fc, 0x0138, 0x70b0, 0xa005, 0x1120, 0x080c, 0x40d5, 0x70b3, - 0x0001, 0x708b, 0x0006, 0x0029, 0x0010, 0x080c, 0x40ee, 0x00fe, - 0x0005, 0x708b, 0x0007, 0x080c, 0x40a6, 0x20a3, 0x1104, 0x20a3, - 0x0000, 0x3430, 0x2011, 0x908e, 0x080c, 0x40f5, 0x11a8, 0x7074, - 0xa005, 0x1190, 0x7154, 0xa186, 0xffff, 0x0170, 0xa180, 0x263d, - 0x200d, 0xa18c, 0xff00, 0x810f, 0x080c, 0x3fab, 0x0128, 0x080c, - 0x37ee, 0x0110, 0x080c, 0x2333, 0x20a9, 0x0008, 0x2298, 0x26a0, - 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, - 0x4024, 0x0005, 0x00f6, 0x7080, 0xa005, 0x0500, 0x2011, 0x3fe7, - 0x080c, 0x560d, 0xa086, 0x0014, 0x11b8, 0x2079, 0x9080, 0x7a30, - 0xa296, 0x1104, 0x1188, 0x7834, 0xa005, 0x1170, 0x7a38, 0xd2fc, - 0x0138, 0x70b0, 0xa005, 0x1120, 0x080c, 0x40d5, 0x70b3, 0x0001, - 0x708b, 0x0008, 0x0029, 0x0010, 0x080c, 0x40ee, 0x00fe, 0x0005, - 0x708b, 0x0009, 0x080c, 0x40a6, 0x20a3, 0x1105, 0x20a3, 0x0100, - 0x3430, 0x080c, 0x40f5, 0x1150, 0x7074, 0xa005, 0x1138, 0x080c, - 0x3f20, 0x1170, 0xa085, 0x0001, 0x080c, 0x2333, 0x20a9, 0x0008, - 0x2099, 0x908e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x080c, 0x4024, 0x0010, 0x080c, 0x3b32, 0x0005, - 0x00f6, 0x7080, 0xa005, 0x05a8, 0x2011, 0x3fe7, 0x080c, 0x560d, - 0xa086, 0x0014, 0x1560, 0x2079, 0x9080, 0x7a30, 0xa296, 0x1105, - 0x1530, 0x7834, 0x2011, 0x0100, 0xa21e, 0x1170, 0x7a38, 0xd2fc, - 0x0138, 0x70b0, 0xa005, 0x1120, 0x080c, 0x40d5, 0x70b3, 0x0001, - 0x708b, 0x000a, 0x00c1, 0x00a8, 0xa005, 0x1188, 0x7a38, 0xd2fc, - 0x0138, 0x70b0, 0xa005, 0x1120, 0x080c, 0x40d5, 0x70b3, 0x0001, - 0x7087, 0x0000, 0x708b, 0x000e, 0x080c, 0x3d35, 0x0010, 0x080c, - 0x40ee, 0x00fe, 0x0005, 0x708b, 0x000b, 0x2011, 0x900e, 0x22a0, - 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009, - 0x0000, 0x41a4, 0x080c, 0x40a6, 0x20a3, 0x1106, 0x20a3, 0x0000, - 0x080c, 0x40f5, 0x0118, 0x2013, 0x0000, 0x0020, 0x7050, 0xa085, - 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6, 0x60c3, 0x0084, - 0x080c, 0x4024, 0x0005, 0x00f6, 0x7080, 0xa005, 0x01b0, 0x2011, - 0x3fe7, 0x080c, 0x560d, 0xa086, 0x0084, 0x1168, 0x2079, 0x9080, - 0x7a30, 0xa296, 0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708b, - 0x000c, 0x0029, 0x0010, 0x080c, 0x40ee, 0x00fe, 0x0005, 0x708b, - 0x000d, 0x080c, 0x40a6, 0x20a3, 0x1107, 0x20a3, 0x0000, 0x2099, - 0x908e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0084, 0x080c, 0x4024, 0x0005, 0x00f6, 0x7080, 0xa005, - 0x01d0, 0x2011, 0x3fe7, 0x080c, 0x560d, 0xa086, 0x0084, 0x1188, - 0x2079, 0x9080, 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834, 0xa005, - 0x1140, 0x7087, 0x0001, 0x080c, 0x4098, 0x708b, 0x000e, 0x0029, - 0x0010, 0x080c, 0x40ee, 0x00fe, 0x0005, 0x708b, 0x000f, 0x7083, - 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0005, 0x6043, - 0x0004, 0x2009, 0x07d0, 0x2011, 0x3fe7, 0x080c, 0x5601, 0x0005, - 0x7080, 0xa005, 0x0120, 0x2011, 0x3fe7, 0x080c, 0x560d, 0x0005, - 0x708b, 0x0011, 0x716c, 0x81ff, 0x0170, 0x2009, 0x0000, 0x7070, - 0xa084, 0x00ff, 0x080c, 0x22e9, 0xa186, 0x0080, 0x0120, 0x2011, - 0x908e, 0x080c, 0x3fab, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, - 0x9080, 0x20a1, 0x020b, 0x7480, 0xa480, 0x0018, 0xa080, 0x0007, - 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0014, 0x080c, - 0x4024, 0x0005, 0x00f6, 0x7080, 0xa005, 0x0500, 0x2011, 0x3fe7, - 0x080c, 0x560d, 0xa086, 0x0014, 0x11b8, 0x2079, 0x9080, 0x7a30, - 0xa296, 0x1103, 0x1188, 0x7834, 0xa005, 0x1170, 0x7a38, 0xd2fc, - 0x0138, 0x70b0, 0xa005, 0x1120, 0x080c, 0x40d5, 0x70b3, 0x0001, - 0x708b, 0x0012, 0x0029, 0x0010, 0x7083, 0x0000, 0x00fe, 0x0005, - 0x708b, 0x0013, 0x080c, 0x40b2, 0x20a3, 0x1103, 0x20a3, 0x0000, - 0x3430, 0x2011, 0x908e, 0x080c, 0x40f5, 0x1160, 0x7074, 0xa005, - 0x1148, 0x714c, 0xa186, 0xffff, 0x0128, 0x080c, 0x3fab, 0x0110, - 0x080c, 0x40d5, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4024, 0x0005, - 0x00f6, 0x7080, 0xa005, 0x0500, 0x2011, 0x3fe7, 0x080c, 0x560d, - 0xa086, 0x0014, 0x11b8, 0x2079, 0x9080, 0x7a30, 0xa296, 0x1104, - 0x1188, 0x7834, 0xa005, 0x1170, 0x7a38, 0xd2fc, 0x0138, 0x70b0, - 0xa005, 0x1120, 0x080c, 0x40d5, 0x70b3, 0x0001, 0x708b, 0x0014, - 0x0029, 0x0010, 0x7083, 0x0000, 0x00fe, 0x0005, 0x708b, 0x0015, - 0x080c, 0x40b2, 0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, - 0x908e, 0x080c, 0x40f5, 0x11a8, 0x7074, 0xa005, 0x1190, 0x7154, - 0xa186, 0xffff, 0x0170, 0xa180, 0x263d, 0x200d, 0xa18c, 0xff00, - 0x810f, 0x080c, 0x3fab, 0x0128, 0x080c, 0x37ee, 0x0110, 0x080c, - 0x2333, 0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4024, 0x0005, 0x00f6, - 0x7080, 0xa005, 0x05b0, 0x2011, 0x3fe7, 0x080c, 0x560d, 0xa086, - 0x0014, 0x1568, 0x2079, 0x9080, 0x7a30, 0xa296, 0x1105, 0x1538, - 0x7834, 0x2011, 0x0100, 0xa21e, 0x1158, 0x7a38, 0xd2fc, 0x0138, - 0x70b0, 0xa005, 0x1120, 0x080c, 0x40d5, 0x70b3, 0x0001, 0x0070, - 0xa005, 0x11a8, 0x7a38, 0xd2fc, 0x0138, 0x70b0, 0xa005, 0x1120, - 0x080c, 0x40d5, 0x70b3, 0x0001, 0x7087, 0x0000, 0x7a38, 0xd2f4, - 0x0110, 0x70cb, 0x0008, 0x708b, 0x0016, 0x0029, 0x0010, 0x7083, - 0x0000, 0x00fe, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, - 0x9080, 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, - 0x908e, 0x708b, 0x0017, 0x080c, 0x40f5, 0x1150, 0x7074, 0xa005, - 0x1138, 0x080c, 0x3f20, 0x1170, 0xa085, 0x0001, 0x080c, 0x2333, - 0x20a9, 0x0008, 0x2099, 0x908e, 0x26a0, 0x53a6, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x4024, 0x0010, 0x080c, - 0x3b32, 0x0005, 0x00f6, 0x7080, 0xa005, 0x01b0, 0x2011, 0x3fe7, - 0x080c, 0x560d, 0xa086, 0x0084, 0x1168, 0x2079, 0x9080, 0x7a30, - 0xa296, 0x1106, 0x1138, 0x7834, 0xa005, 0x1120, 0x708b, 0x0018, - 0x0029, 0x0010, 0x7083, 0x0000, 0x00fe, 0x0005, 0x708b, 0x0019, - 0x080c, 0x40b2, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, - 0x908e, 0x2039, 0x900e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x080c, - 0x40f5, 0x11e8, 0x2728, 0x2514, 0x8207, 0xa084, 0x00ff, 0x8000, - 0x2018, 0xa294, 0x00ff, 0x8007, 0xa205, 0x202a, 0x7050, 0x2310, - 0x8214, 0xa2a0, 0x900e, 0x2414, 0xa38c, 0x0001, 0x0118, 0xa294, - 0xff00, 0x0018, 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, - 0x26a0, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0084, 0x080c, 0x4024, 0x0005, 0x00f6, 0x7080, 0xa005, - 0x01d0, 0x2011, 0x3fe7, 0x080c, 0x560d, 0xa086, 0x0084, 0x1188, - 0x2079, 0x9080, 0x7a30, 0xa296, 0x1107, 0x1158, 0x7834, 0xa005, - 0x1140, 0x7087, 0x0001, 0x080c, 0x4098, 0x708b, 0x001a, 0x0029, - 0x0010, 0x7083, 0x0000, 0x00fe, 0x0005, 0x708b, 0x001b, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x2099, 0x9080, 0x20a1, 0x020b, 0x7480, - 0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, - 0x53a6, 0x60c3, 0x0084, 0x080c, 0x4024, 0x0005, 0x0005, 0x0005, - 0x0086, 0x0096, 0x2029, 0x8b52, 0x252c, 0x20a9, 0x0008, 0x2041, - 0x900e, 0x28a0, 0x2099, 0x908e, 0x53a3, 0x20a9, 0x0008, 0x2011, - 0x0007, 0xd5d4, 0x0110, 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, - 0xa1a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, - 0x1f04, 0x3f35, 0x0804, 0x3fa3, 0x82ff, 0x1160, 0xd5d4, 0x0120, - 0xa1a6, 0x3fff, 0x0d90, 0x0020, 0xa1a6, 0x3fff, 0x0904, 0x3fa3, - 0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, - 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, - 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x3f5b, - 0x04d0, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x3f6d, - 0x2328, 0x8529, 0xa2be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, - 0x2200, 0xa73a, 0x000e, 0x27a8, 0xa5a8, 0x0010, 0x1f04, 0x3f7c, - 0x754e, 0xa5c8, 0x263d, 0x292d, 0xa5ac, 0x00ff, 0x7572, 0x6532, - 0x6536, 0x0016, 0x2508, 0x080c, 0x2313, 0x001e, 0x60e7, 0x0000, - 0x65ea, 0x2018, 0x2304, 0xa405, 0x201a, 0x7077, 0x0001, 0x26a0, - 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0xa085, 0x0001, 0x0028, 0xa006, 0x0018, 0xa006, 0x080c, 0x1410, - 0x009e, 0x008e, 0x0005, 0x2118, 0x2021, 0x0000, 0x2001, 0x0007, - 0xa39a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, - 0x0120, 0xa39a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, - 0x0118, 0x8423, 0x8319, 0x1de8, 0xa238, 0x2704, 0xa42c, 0x11b8, - 0xa405, 0x203a, 0x714e, 0xa1a0, 0x263d, 0x242d, 0xa5ac, 0x00ff, - 0x7572, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2313, 0x001e, - 0x60e7, 0x0000, 0x65ea, 0x7077, 0x0001, 0xa084, 0x0000, 0x0005, - 0x00e6, 0x2071, 0x8b00, 0x707b, 0x0000, 0x00ee, 0x0005, 0x00e6, - 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x66f7, 0x7004, - 0xa084, 0x4000, 0x0120, 0x7003, 0x1000, 0x7003, 0x0000, 0x080c, - 0x4c4a, 0x01b0, 0x080c, 0x4c68, 0x1198, 0x2001, 0x8d9c, 0x2003, - 0xaaaa, 0x2001, 0x0204, 0x2004, 0x0016, 0x2009, 0x8d8d, 0x200a, - 0x001e, 0x2001, 0x8d9d, 0x2003, 0x0000, 0x080c, 0x4b8b, 0x0080, - 0x0126, 0x2091, 0x8000, 0x2071, 0x8b22, 0x2073, 0x0000, 0x7840, - 0x0026, 0xa094, 0x0010, 0xa285, 0x0080, 0x7842, 0x7a42, 0x002e, - 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x2011, - 0x8db4, 0x2013, 0x0000, 0x7083, 0x0000, 0x012e, 0x20e1, 0x9080, - 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x66ee, 0x2009, 0x07d0, - 0x2011, 0x3fe7, 0x080c, 0x568c, 0x0005, 0x0016, 0x0026, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x2009, 0x00f7, 0x080c, 0x40be, 0x2061, - 0x8dbd, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061, 0x8b00, 0x6003, - 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, - 0x001e, 0x2011, 0x4062, 0x080c, 0x5601, 0x012e, 0x00ce, 0x002e, - 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, - 0x0100, 0x080c, 0x66f7, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, - 0x0120, 0x7003, 0x1000, 0x7003, 0x0000, 0x080c, 0x4c4a, 0x01b0, - 0x080c, 0x4c68, 0x1198, 0x2001, 0x8d9c, 0x2003, 0xaaaa, 0x2001, - 0x0204, 0x2004, 0x0016, 0x2009, 0x8d8d, 0x200a, 0x001e, 0x2001, - 0x8d9d, 0x2003, 0x0000, 0x080c, 0x4b8b, 0x0030, 0x2001, 0x0001, - 0x080c, 0x2298, 0x080c, 0x403d, 0x012e, 0x000e, 0x00ee, 0x0005, - 0x20a9, 0x0040, 0x20a1, 0x91c0, 0x2099, 0x908e, 0x3304, 0x8007, - 0x20a2, 0x9398, 0x94a0, 0x1f04, 0x409e, 0x0005, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x2099, 0x9000, 0x20a1, 0x020b, 0x20a9, 0x000c, - 0x53a6, 0x0005, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x9080, - 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x0005, 0x00c6, 0x0006, - 0x2061, 0x0100, 0x810f, 0x2001, 0x8b2f, 0x2004, 0xa005, 0x1138, - 0x2001, 0x8b14, 0x2004, 0xa084, 0x00ff, 0xa105, 0x0010, 0xa185, - 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x2001, - 0x8b52, 0x2004, 0xd0a4, 0x0158, 0xa006, 0x2020, 0x2009, 0x002a, - 0x080c, 0x8982, 0x2001, 0x8b0c, 0x200c, 0xc195, 0x2102, 0x2019, - 0x002a, 0x080c, 0x2542, 0x004e, 0x001e, 0x0005, 0x080c, 0x403d, - 0x708b, 0x0000, 0x7083, 0x0000, 0x0005, 0x0006, 0x2001, 0x8b0c, - 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, - 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0xa18d, 0x0006, 0x2102, - 0x012e, 0x001e, 0x000e, 0x0005, 0x0156, 0x20a9, 0x00ff, 0x2009, - 0x8c34, 0xa006, 0x200a, 0x8108, 0x1f04, 0x4112, 0x015e, 0x0005, - 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x8b51, 0xa006, - 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x263d, - 0x231d, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, - 0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, - 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, - 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, - 0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x61a2, - 0x00d6, 0x60a4, 0xa06d, 0x0110, 0x080c, 0x149f, 0x60a7, 0x0000, - 0x60a8, 0xa06d, 0x0110, 0x080c, 0x149f, 0x60ab, 0x0000, 0x00de, - 0xa006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814, 0xa084, - 0x00ff, 0x6042, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, - 0x0126, 0x2091, 0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff, 0xa082, - 0x4000, 0x1a04, 0x4201, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, - 0x1a04, 0x4206, 0x2001, 0x8b0c, 0x2004, 0xa084, 0x0003, 0x1904, - 0x41ef, 0xa188, 0x8c34, 0x2104, 0xa065, 0x0904, 0x41db, 0x6004, - 0xa084, 0x00ff, 0xa08e, 0x0006, 0x1904, 0x41e0, 0x60a4, 0xa00d, - 0x0118, 0x080c, 0x4509, 0x05d0, 0x60a8, 0xa00d, 0x0188, 0x080c, - 0x4553, 0x1170, 0x694c, 0xd1fc, 0x1118, 0x080c, 0x429a, 0x0448, - 0x080c, 0x425c, 0x694c, 0xd1ec, 0x1520, 0x080c, 0x4404, 0x0408, - 0x694c, 0xa184, 0xa000, 0x0178, 0xd1ec, 0x0140, 0xd1fc, 0x0118, - 0x080c, 0x4413, 0x0028, 0x080c, 0x4413, 0x0028, 0xd1fc, 0x0118, - 0x080c, 0x425c, 0x0070, 0x6050, 0xa00d, 0x0130, 0x2d00, 0x200a, - 0x6803, 0x0000, 0x6052, 0x0028, 0x2d00, 0x6052, 0x604e, 0x6803, - 0x0000, 0x080c, 0x58b9, 0xa006, 0x012e, 0x0005, 0x2001, 0x0005, - 0x2009, 0x0000, 0x0478, 0x2001, 0x0028, 0x2009, 0x0000, 0x0450, - 0xa082, 0x0006, 0x1260, 0x2001, 0x8b32, 0x2004, 0xd0ac, 0x1120, - 0x60a0, 0xd0bc, 0x0904, 0x4196, 0x2001, 0x0028, 0x0078, 0x2009, - 0x8b0c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, - 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x2009, 0x0000, - 0x0048, 0x2001, 0x0029, 0x2009, 0x0000, 0x0020, 0x2001, 0x0029, - 0x2009, 0x0000, 0xa005, 0x012e, 0x0005, 0x6944, 0x6e48, 0xa684, - 0x3fff, 0xa082, 0x4000, 0x1678, 0xa18c, 0xff00, 0x810f, 0xa182, - 0x00ff, 0x12e0, 0xa188, 0x8c34, 0x2104, 0xa065, 0x01b8, 0x6004, - 0xa084, 0x00ff, 0xa08e, 0x0006, 0x11b0, 0x684c, 0xd0ec, 0x0120, - 0x080c, 0x4413, 0x0489, 0x0030, 0x0479, 0x684c, 0xd0fc, 0x0110, - 0x080c, 0x4404, 0x080c, 0x4451, 0xa006, 0x0088, 0x2001, 0x0028, - 0x2009, 0x0000, 0x0060, 0xa082, 0x0006, 0x0e38, 0x2001, 0x0029, - 0x2009, 0x0000, 0x0020, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005, - 0x0005, 0x0126, 0x2091, 0x8000, 0x6050, 0xa00d, 0x0138, 0x2d00, - 0x200a, 0x6803, 0x0000, 0x6052, 0x012e, 0x0005, 0x2d00, 0x6052, - 0x604e, 0x6803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x604c, - 0xa005, 0x0170, 0x00e6, 0x2071, 0x8daa, 0x7004, 0xa086, 0x0002, - 0x0168, 0x00ee, 0x604c, 0x6802, 0x2d00, 0x604e, 0x012e, 0x0005, - 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0cc0, 0x701c, 0xac06, - 0x1d80, 0x604c, 0x2070, 0x7000, 0x6802, 0x2d00, 0x7002, 0x00ee, - 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x604c, 0xa06d, 0x0130, - 0x6800, 0xa005, 0x1108, 0x6052, 0x604e, 0xad05, 0x012e, 0x0005, - 0x604c, 0xa06d, 0x0130, 0x6800, 0xa005, 0x1108, 0x6052, 0x604e, - 0xad05, 0x0005, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0120, 0x2d00, - 0x200a, 0x6086, 0x0005, 0x2d00, 0x6086, 0x6082, 0x0cd8, 0x0126, - 0x00c6, 0x0026, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, - 0x0110, 0xc285, 0x0008, 0xc284, 0x6202, 0x002e, 0x00ce, 0x012e, - 0x0005, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, - 0xa294, 0xff00, 0xa215, 0x6206, 0x00ce, 0x012e, 0x0005, 0x0126, - 0x00c6, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0xa294, 0x00ff, - 0x8007, 0xa215, 0x6206, 0x00ce, 0x012e, 0x0005, 0x0026, 0xa182, - 0x00ff, 0x0218, 0xa085, 0x0001, 0x00b0, 0xa190, 0x8c34, 0x2204, - 0xa065, 0x1180, 0x0016, 0x00d6, 0x080c, 0x146f, 0x2d60, 0x00de, - 0x001e, 0x0d80, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, 0x0000, - 0x080c, 0x4118, 0xa006, 0x002e, 0x0005, 0x0026, 0xa182, 0x00ff, - 0x0218, 0xa085, 0x0001, 0x0060, 0x00d6, 0xa190, 0x8c34, 0x2204, - 0xa06d, 0x0120, 0x2013, 0x0000, 0x080c, 0x149f, 0x00de, 0xa006, - 0x002e, 0x0005, 0x0016, 0xa182, 0x00ff, 0x0218, 0xa085, 0x0001, - 0x0030, 0xa188, 0x8c34, 0x2104, 0xa065, 0x0dc0, 0xa006, 0x001e, - 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x600b, 0x0000, 0x600f, - 0x0000, 0x6000, 0xc08c, 0x6002, 0x080c, 0x4c42, 0x1538, 0x60a0, - 0xa086, 0x007e, 0x2069, 0x9090, 0x0130, 0x2001, 0x8b32, 0x2004, - 0xd0ac, 0x11e0, 0x0098, 0x2d04, 0xd0e4, 0x01c0, 0x00d6, 0x2069, - 0x908e, 0x00c6, 0x2061, 0x8d9e, 0x6810, 0x2062, 0x6814, 0x6006, - 0x6818, 0x600a, 0x681c, 0x600e, 0x00ce, 0x00de, 0x8d69, 0x2d04, - 0x2069, 0x0140, 0x6886, 0x2069, 0x8b00, 0x689e, 0x2069, 0x908e, - 0x6808, 0x605e, 0x6810, 0x6062, 0x6138, 0xa10a, 0x0208, 0x603a, - 0x6814, 0x6066, 0x2099, 0x9096, 0xac88, 0x000a, 0x21a0, 0x20a9, - 0x0004, 0x53a3, 0x2099, 0x909a, 0xac88, 0x0006, 0x21a0, 0x20a9, - 0x0004, 0x53a3, 0x2069, 0x90ae, 0x6808, 0x606a, 0x690c, 0x616e, - 0x6810, 0x6072, 0x6818, 0x6076, 0xa182, 0x0211, 0x1218, 0x2009, - 0x0008, 0x0400, 0xa182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, - 0xa182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0xa182, 0x0349, - 0x1218, 0x2009, 0x0005, 0x0070, 0xa182, 0x0421, 0x1218, 0x2009, - 0x0004, 0x0040, 0xa182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, - 0x2009, 0x0002, 0x6192, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, - 0x00e6, 0x2071, 0x908d, 0x2e04, 0x6896, 0x2071, 0x908e, 0x7004, - 0x689a, 0x701c, 0x689e, 0x00ee, 0x0005, 0x00d6, 0x0126, 0x2091, - 0x8000, 0x60a4, 0xa06d, 0x01c0, 0x6900, 0x81ff, 0x1540, 0x6a04, - 0xa282, 0x0010, 0x1648, 0xad88, 0x0004, 0x20a9, 0x0010, 0x2104, - 0xa086, 0xffff, 0x0128, 0x8108, 0x1f04, 0x43bf, 0x080c, 0x1410, - 0x260a, 0x8210, 0x6a06, 0x0098, 0x080c, 0x1488, 0x01a8, 0x2d00, - 0x60a6, 0x6803, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, - 0xffff, 0x8108, 0x1f04, 0x43d7, 0x6807, 0x0001, 0x6e12, 0xa085, - 0x0001, 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x0126, 0x2091, - 0x8000, 0x00d6, 0x60a4, 0xa00d, 0x01a0, 0x2168, 0x6800, 0xa005, - 0x1160, 0x080c, 0x4509, 0x1168, 0x200b, 0xffff, 0x6804, 0xa08a, - 0x0002, 0x0218, 0x8001, 0x6806, 0x0020, 0x080c, 0x149f, 0x60a7, - 0x0000, 0x00de, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, - 0x4566, 0x0010, 0x080c, 0x4249, 0x080c, 0x4488, 0x1dd8, 0x080c, - 0x4451, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x60a8, - 0xa06d, 0x01c0, 0x6950, 0x81ff, 0x1540, 0x6a54, 0xa282, 0x0010, - 0x1670, 0xad88, 0x0018, 0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, - 0x0128, 0x8108, 0x1f04, 0x4425, 0x080c, 0x1410, 0x260a, 0x8210, - 0x6a56, 0x0098, 0x080c, 0x1488, 0x01d0, 0x2d00, 0x60aa, 0x6853, - 0x0000, 0xad88, 0x0018, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, - 0x1f04, 0x443d, 0x6857, 0x0001, 0x6e62, 0x0010, 0x080c, 0x429a, - 0x0089, 0x1de0, 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0xa006, - 0x0cd8, 0x0126, 0x2091, 0x8000, 0x080c, 0x58b9, 0x012e, 0x0005, - 0xa01e, 0x0010, 0x2019, 0x0001, 0xa00e, 0x0126, 0x2091, 0x8000, - 0x604c, 0x2068, 0x6000, 0xd0dc, 0x1170, 0x8dff, 0x01e8, 0x83ff, - 0x0120, 0x6848, 0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118, - 0x6840, 0xa506, 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x6a00, - 0x604c, 0xad06, 0x1110, 0x624e, 0x0018, 0xa180, 0x0000, 0x2202, - 0x82ff, 0x1110, 0x6152, 0x8dff, 0x012e, 0x0005, 0xa01e, 0x0010, - 0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, 0x01e8, 0x83ff, - 0x0120, 0x6848, 0xa606, 0x0158, 0x0030, 0x683c, 0xa406, 0x1118, - 0x6840, 0xa506, 0x0120, 0x2d08, 0x6800, 0x2068, 0x0c70, 0x6a00, - 0x6080, 0xad06, 0x1110, 0x6282, 0x0018, 0xa180, 0x0000, 0x2202, - 0x82ff, 0x1110, 0x6186, 0x8dff, 0x0005, 0xa016, 0x080c, 0x4503, - 0x1110, 0x2011, 0x0001, 0x080c, 0x454d, 0x1110, 0xa295, 0x0002, - 0x0005, 0x080c, 0x457e, 0x0118, 0x080c, 0x7c4c, 0x0010, 0xa085, - 0x0001, 0x0005, 0x080c, 0x457e, 0x0118, 0x080c, 0x7bd9, 0x0010, - 0xa085, 0x0001, 0x0005, 0x080c, 0x457e, 0x0118, 0x080c, 0x7c1f, - 0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x457e, 0x0118, 0x080c, - 0x7bf3, 0x0010, 0xa085, 0x0001, 0x0005, 0x080c, 0x457e, 0x0118, - 0x080c, 0x7c79, 0x0010, 0xa085, 0x0001, 0x0005, 0x0126, 0x0006, - 0x00d6, 0x2091, 0x8000, 0x6080, 0xa06d, 0x0168, 0x6800, 0x0006, - 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x7dc8, 0x080c, - 0x46a1, 0x000e, 0x0c88, 0x6083, 0x0000, 0x6087, 0x0000, 0x00de, - 0x000e, 0x012e, 0x0005, 0x60a4, 0xa00d, 0x1118, 0xa085, 0x0001, - 0x0005, 0x00e6, 0x2170, 0x7000, 0xa005, 0x1160, 0x20a9, 0x0010, - 0xae88, 0x0004, 0x2104, 0xa606, 0x0128, 0x8108, 0x1f04, 0x4512, - 0xa085, 0x0001, 0xa006, 0x00ee, 0x0005, 0x00d6, 0x0126, 0x2091, - 0x8000, 0x60a4, 0xa06d, 0x1128, 0x080c, 0x1488, 0x01a0, 0x2d00, - 0x60a6, 0x6803, 0x0001, 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9, - 0x0010, 0x200b, 0xffff, 0x8108, 0x1f04, 0x4531, 0xa085, 0x0001, - 0x012e, 0x00de, 0x0005, 0xa006, 0x0cd8, 0x00d6, 0x0126, 0x2091, - 0x8000, 0x60a4, 0xa06d, 0x0130, 0x60a7, 0x0000, 0x080c, 0x149f, - 0xa085, 0x0001, 0x012e, 0x00de, 0x0005, 0x60a8, 0xa00d, 0x1118, - 0xa085, 0x0001, 0x0005, 0x00e6, 0x2170, 0x7050, 0xa005, 0x1160, - 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606, 0x0128, 0x8108, - 0x1f04, 0x455c, 0xa085, 0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, - 0x8000, 0x0c19, 0x1188, 0x200b, 0xffff, 0x00d6, 0x60a8, 0x2068, - 0x6854, 0xa08a, 0x0002, 0x0218, 0x8001, 0x6856, 0x0020, 0x080c, - 0x149f, 0x60ab, 0x0000, 0x00de, 0x012e, 0x0005, 0x609c, 0xd0a4, - 0x0005, 0x00f6, 0x2079, 0x8b51, 0x7804, 0xd0a4, 0x0518, 0x0156, - 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, 0x430a, - 0x1168, 0x6004, 0xa084, 0xff00, 0x8007, 0xa096, 0x0004, 0x0118, - 0xa086, 0x0006, 0x1118, 0x6000, 0xc0ed, 0x6002, 0x001e, 0x8108, - 0x1f04, 0x458d, 0x00ce, 0x015e, 0x2009, 0x07d0, 0x2011, 0x45ac, - 0x080c, 0x568c, 0x00fe, 0x0005, 0x2011, 0x45ac, 0x080c, 0x560d, - 0x0156, 0x00c6, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, 0x080c, - 0x430a, 0x1530, 0x6000, 0xd0ec, 0x0518, 0x0046, 0x62a0, 0xa294, - 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x080c, 0x8982, 0x6000, - 0xc0e5, 0xc0ec, 0x6002, 0x6004, 0xa084, 0x00ff, 0xa085, 0x0700, - 0x6006, 0x2019, 0x0029, 0x080c, 0x59d5, 0x0086, 0x2041, 0x0000, - 0x080c, 0x5911, 0x2009, 0x0000, 0x080c, 0x878f, 0x008e, 0x004e, - 0x001e, 0x8108, 0x1f04, 0x45b6, 0x00ce, 0x015e, 0x0005, 0x00c6, - 0x6018, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x00ce, 0x0005, 0x2071, - 0x8c13, 0x7003, 0x0001, 0x7007, 0x0000, 0x7013, 0x0000, 0x7017, - 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x704b, 0x0001, 0x704f, - 0x0000, 0x705b, 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x2071, - 0x8d7c, 0x7003, 0x8c13, 0x7007, 0x0000, 0x700b, 0x0000, 0x700f, - 0x8d5c, 0x7013, 0x0020, 0x7017, 0x0040, 0x7037, 0x0000, 0x0005, - 0x0016, 0x00e6, 0x2071, 0x8d34, 0xa00e, 0x7186, 0x718a, 0x7097, - 0x0001, 0x2001, 0x8b52, 0x2004, 0xd0fc, 0x1148, 0x2001, 0x8b52, - 0x2004, 0xa00e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x04f0, 0x2001, - 0x8b71, 0x200c, 0xa184, 0x000f, 0x2009, 0x8b72, 0x210c, 0x0002, - 0x4626, 0x4648, 0x464f, 0x4659, 0x465e, 0x4626, 0x4626, 0x4626, - 0x4626, 0x4626, 0x4626, 0x4626, 0x4626, 0x4626, 0x4626, 0x4626, - 0x708f, 0x0005, 0x7007, 0x0122, 0x2001, 0x0002, 0x0030, 0x708f, - 0x0002, 0x7007, 0x0121, 0x2001, 0x0003, 0x7002, 0x7097, 0x0001, - 0x0088, 0x7007, 0x0122, 0x2001, 0x0002, 0x0020, 0x7007, 0x0121, - 0x2001, 0x0003, 0x7002, 0xa006, 0x7096, 0x708e, 0xa184, 0xff00, - 0x8007, 0x709a, 0xa184, 0x00ff, 0x7092, 0x00ee, 0x001e, 0x0005, - 0x00e6, 0x2071, 0x8c13, 0x684c, 0xa005, 0x1130, 0x7028, 0xc085, - 0x702a, 0xa085, 0x0001, 0x0418, 0x6a60, 0x7236, 0x6b64, 0x733a, - 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c, 0x702e, - 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x8007, 0x8006, 0x8006, - 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, 0x726e, - 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006, 0x00ee, - 0x0005, 0x0156, 0x00e6, 0x0026, 0x6838, 0xd0fc, 0x1904, 0x46f9, - 0x6804, 0xa00d, 0x0188, 0x00d6, 0x2071, 0x8b00, 0xa016, 0x702c, - 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff, 0x1dc8, 0x702e, - 0x70ac, 0xa200, 0x70ae, 0x00de, 0x2071, 0x8c13, 0x701c, 0xa005, - 0x1904, 0x4709, 0x20a9, 0x0032, 0x0f04, 0x4707, 0x0e04, 0x46c4, - 0x2071, 0x8d34, 0x7200, 0x82ff, 0x05d0, 0x6934, 0xa186, 0x0103, - 0x1904, 0x4717, 0x6948, 0x6844, 0xa105, 0x1538, 0x2009, 0x8020, - 0x2200, 0x0002, 0x4707, 0x46de, 0x472f, 0x473b, 0x2071, 0x0000, - 0x20a9, 0x0032, 0x0f04, 0x4707, 0x7018, 0xd084, 0x1dd8, 0x7122, - 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080, - 0x2071, 0x8b00, 0x702c, 0x206a, 0x2d00, 0x702e, 0x70ac, 0x8000, - 0x70ae, 0x002e, 0x00ee, 0x015e, 0x0005, 0x6844, 0xa086, 0x0100, - 0x1130, 0x6868, 0xa005, 0x1118, 0x2009, 0x8020, 0x0888, 0x2071, - 0x8c13, 0x2d08, 0x206b, 0x0000, 0x7010, 0x8000, 0x7012, 0x7018, - 0xa06d, 0x711a, 0x0110, 0x6902, 0x0008, 0x711e, 0x0c10, 0xa18c, - 0x00ff, 0xa186, 0x0017, 0x0130, 0xa186, 0x001e, 0x0118, 0xa18e, - 0x001f, 0x1d28, 0x684c, 0xd0cc, 0x0d10, 0x6850, 0xa084, 0x00ff, - 0xa086, 0x0001, 0x19e0, 0x2009, 0x8021, 0x0804, 0x46d8, 0x7084, - 0x8008, 0xa092, 0x001e, 0x1a98, 0x7186, 0xae90, 0x0003, 0xa210, - 0x683c, 0x2012, 0x0078, 0x7084, 0x8008, 0xa092, 0x000f, 0x1a38, - 0x7186, 0xae90, 0x0003, 0x8003, 0xa210, 0x683c, 0x2012, 0x8210, - 0x6840, 0x2012, 0x7088, 0xa10a, 0x0a04, 0x46f0, 0x718c, 0x7084, - 0xa10a, 0x0a04, 0x46f0, 0x2071, 0x0000, 0x7018, 0xd084, 0x1904, - 0x46f0, 0x2071, 0x8d34, 0x7000, 0xa086, 0x0002, 0x1150, 0x080c, - 0x495f, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0804, - 0x46f0, 0x080c, 0x4989, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, - 0x4080, 0x0804, 0x46f0, 0x0006, 0x684c, 0x0006, 0x6837, 0x0103, - 0x20a9, 0x001c, 0xad80, 0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, - 0x000e, 0xa084, 0x00ff, 0x684e, 0x000e, 0x684a, 0x6952, 0x0005, - 0x2071, 0x8c13, 0x7004, 0x0002, 0x4795, 0x47a5, 0x494a, 0x494b, - 0x4958, 0x495e, 0x4796, 0x493b, 0x48e7, 0x0005, 0x0126, 0x2091, - 0x8000, 0x0e04, 0x47a3, 0x2009, 0x000d, 0x7030, 0x200a, 0x2091, - 0x4080, 0x7007, 0x0001, 0x012e, 0x0005, 0x2069, 0x8dbd, 0x683c, - 0xa005, 0x03f8, 0x11f0, 0x0126, 0x2091, 0x8000, 0x2069, 0x0000, - 0x6934, 0x2001, 0x8c1f, 0x2004, 0xa10a, 0x0170, 0x0e04, 0x47c8, - 0x2069, 0x0000, 0x6818, 0xd084, 0x1158, 0x2009, 0x8040, 0x6922, - 0x681b, 0x0001, 0x2091, 0x4080, 0x2069, 0x8dbd, 0x683f, 0xffff, - 0x012e, 0x2069, 0x8b00, 0x6844, 0x6964, 0xa102, 0x2069, 0x8d34, - 0x688a, 0x6984, 0x701c, 0xa06d, 0x0120, 0x81ff, 0x0904, 0x481e, - 0x00a0, 0x81ff, 0x0904, 0x48bc, 0x2071, 0x8d34, 0x7184, 0x7088, - 0xa10a, 0x1258, 0x7190, 0x2071, 0x8dbd, 0x7038, 0xa005, 0x0128, - 0x1b04, 0x48bc, 0x713a, 0x0804, 0x48bc, 0x2071, 0x8d34, 0x718c, - 0x0126, 0x2091, 0x8000, 0x7084, 0xa10a, 0x0a04, 0x48bd, 0x0e04, - 0x487a, 0x2071, 0x0000, 0x7018, 0xd084, 0x1904, 0x487a, 0x2001, - 0xffff, 0x2071, 0x8dbd, 0x703a, 0x2071, 0x8d34, 0x7000, 0xa086, - 0x0002, 0x1150, 0x080c, 0x495f, 0x2071, 0x0000, 0x701b, 0x0001, - 0x2091, 0x4080, 0x0804, 0x487a, 0x080c, 0x4989, 0x2071, 0x0000, - 0x701b, 0x0001, 0x2091, 0x4080, 0x0804, 0x487a, 0x2071, 0x8d34, - 0x7000, 0xa005, 0x0904, 0x489e, 0x6934, 0xa186, 0x0103, 0x1904, - 0x487d, 0x6948, 0x6844, 0xa105, 0x1904, 0x4894, 0x2071, 0x8d34, - 0x7000, 0x0002, 0x489e, 0x485e, 0x4836, 0x4848, 0x7084, 0x8008, - 0xa092, 0x001e, 0x1a04, 0x48bc, 0xae90, 0x0003, 0xa210, 0x683c, - 0x2012, 0x7186, 0x2071, 0x8c13, 0x080c, 0x49e2, 0x0804, 0x48bc, - 0x7084, 0x8008, 0xa092, 0x000f, 0x1a04, 0x48bc, 0xae90, 0x0003, - 0x8003, 0xa210, 0x683c, 0x2012, 0x8210, 0x6840, 0x2012, 0x7186, - 0x2071, 0x8c13, 0x080c, 0x49e2, 0x0804, 0x48bc, 0x2009, 0x8020, - 0x0126, 0x2091, 0x8000, 0x0e04, 0x487a, 0x2071, 0x0000, 0x7018, - 0xd084, 0x1180, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, - 0x0001, 0x2091, 0x4080, 0x012e, 0x2071, 0x8c13, 0x080c, 0x49e2, - 0x0804, 0x48bc, 0x012e, 0x0804, 0x48bc, 0xa18c, 0x00ff, 0xa186, - 0x0017, 0x0130, 0xa186, 0x001e, 0x0118, 0xa18e, 0x001f, 0x11b0, - 0x684c, 0xd0cc, 0x0198, 0x6850, 0xa084, 0x00ff, 0xa086, 0x0001, - 0x1168, 0x2009, 0x8021, 0x0860, 0x6844, 0xa086, 0x0100, 0x1130, - 0x6868, 0xa005, 0x1118, 0x2009, 0x8020, 0x0810, 0x2071, 0x8c13, - 0x080c, 0x49f4, 0x01c8, 0x2071, 0x8c13, 0x700f, 0x0001, 0x6934, - 0xa184, 0x00ff, 0xa086, 0x0003, 0x1130, 0x810f, 0xa18c, 0x00ff, - 0x8101, 0x0108, 0x710e, 0x7007, 0x0003, 0x080c, 0x4a0d, 0x7050, - 0xa086, 0x0100, 0x0904, 0x494b, 0x0005, 0x2071, 0x8c13, 0x080c, - 0x49f4, 0x0518, 0x2071, 0x8d34, 0x7084, 0x700a, 0x20a9, 0x0020, - 0x2099, 0x8d35, 0x20a1, 0x8d5c, 0x53a3, 0x7087, 0x0000, 0x2071, - 0x8c13, 0x2069, 0x8d7c, 0x706c, 0x6826, 0x7070, 0x682a, 0x7074, - 0x682e, 0x7078, 0x6832, 0x2d10, 0x080c, 0x14d3, 0x7007, 0x0008, - 0x2001, 0xffff, 0x2071, 0x8dbd, 0x703a, 0x012e, 0x08a8, 0x2069, - 0x8d7c, 0x6808, 0xa08e, 0x0000, 0x0904, 0x493a, 0xa08e, 0x0200, - 0x0904, 0x4938, 0xa08e, 0x0100, 0x1904, 0x493a, 0x0126, 0x2091, - 0x8000, 0x0e04, 0x4936, 0x2069, 0x0000, 0x6818, 0xd084, 0x15b0, - 0x702c, 0x7130, 0x8108, 0xa102, 0x0230, 0xa00e, 0x7034, 0x706e, - 0x7038, 0x7072, 0x0048, 0x706c, 0xa080, 0x0040, 0x706e, 0x1220, - 0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x6936, 0x2001, 0x8d59, - 0x2004, 0xa005, 0x1190, 0x6934, 0x2069, 0x8d34, 0x689c, 0x699e, - 0x2069, 0x8dbd, 0xa102, 0x1118, 0x683c, 0xa005, 0x1368, 0x2001, - 0x8d5a, 0x200c, 0x810d, 0x693e, 0x0038, 0x2009, 0x8040, 0x6922, - 0x681b, 0x0001, 0x2091, 0x4080, 0x7007, 0x0001, 0x012e, 0x0010, - 0x7007, 0x0005, 0x0005, 0x701c, 0xa06d, 0x0158, 0x080c, 0x49f4, - 0x0140, 0x7007, 0x0003, 0x080c, 0x4a0d, 0x7050, 0xa086, 0x0100, - 0x0110, 0x0005, 0x0005, 0x7050, 0xa09e, 0x0100, 0x1118, 0x7007, - 0x0004, 0x0030, 0xa086, 0x0200, 0x1110, 0x7007, 0x0005, 0x0005, - 0x080c, 0x49ae, 0x7006, 0x080c, 0x49e2, 0x0005, 0x0005, 0x00e6, - 0x0156, 0x2071, 0x8d34, 0x7184, 0x81ff, 0x0500, 0xa006, 0x7086, - 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, 0x7226, 0x8000, - 0x0f04, 0x4983, 0x2014, 0x722a, 0x8000, 0x0f04, 0x4983, 0x2014, - 0x722e, 0x8000, 0x0f04, 0x4983, 0x2014, 0x723a, 0x8000, 0x0f04, - 0x4983, 0x2014, 0x723e, 0xa180, 0x8030, 0x7022, 0x015e, 0x00ee, - 0x0005, 0x00e6, 0x0156, 0x2071, 0x8d34, 0x7184, 0x81ff, 0x01d8, - 0xa006, 0x7086, 0xae80, 0x0003, 0x2071, 0x0000, 0x21a8, 0x2014, - 0x7226, 0x8000, 0x2014, 0x722a, 0x8000, 0x0f04, 0x49a5, 0x2014, - 0x723a, 0x8000, 0x2014, 0x723e, 0x0018, 0x2001, 0x8020, 0x0010, - 0xa180, 0x8042, 0x7022, 0x015e, 0x00ee, 0x0005, 0x702c, 0x7130, - 0x8108, 0xa102, 0x0230, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072, - 0x0048, 0x706c, 0xa080, 0x0040, 0x706e, 0x1220, 0x7070, 0xa081, - 0x0000, 0x7072, 0x7132, 0x700c, 0x8001, 0x700e, 0x11a0, 0x0126, - 0x2091, 0x8000, 0x0e04, 0x49de, 0x2001, 0x000d, 0x2102, 0x2091, - 0x4080, 0x2001, 0x0001, 0x012e, 0x0005, 0x2001, 0x000d, 0x2102, - 0x2001, 0x0001, 0x0005, 0x2001, 0x0007, 0x0005, 0x2001, 0x0006, - 0x012e, 0x0005, 0x701c, 0xa06d, 0x0170, 0x0126, 0x2091, 0x8000, - 0x7010, 0x8001, 0x7012, 0x2d04, 0x701e, 0xa005, 0x1108, 0x701a, - 0x012e, 0x080c, 0x149f, 0x0005, 0x2019, 0x000d, 0x2304, 0x230c, - 0xa10e, 0x0130, 0x2304, 0x230c, 0xa10e, 0x0110, 0xa006, 0x0060, - 0x732c, 0x8319, 0x7130, 0xa102, 0x1118, 0x2300, 0xa005, 0x0020, - 0x0210, 0xa302, 0x0008, 0x8002, 0x0005, 0x2d00, 0x7026, 0xa080, - 0x000d, 0x7056, 0x7053, 0x0000, 0x0126, 0x2091, 0x8000, 0x2009, - 0x8dcd, 0x2104, 0xc08d, 0x200a, 0x012e, 0x080c, 0x14eb, 0x0005, - 0x7088, 0xa08a, 0x0028, 0x1220, 0xa082, 0x001d, 0x0033, 0x0010, - 0x080c, 0x1410, 0x6027, 0x1e00, 0x0005, 0x4ab8, 0x4a4a, 0x4a60, - 0x4a88, 0x4aab, 0x4add, 0x4aef, 0x4a60, 0x4ac9, 0x4a37, 0x00d6, - 0x2069, 0x0200, 0x6804, 0xa005, 0x1158, 0x6808, 0xa005, 0x1140, - 0x708b, 0x0027, 0x7003, 0x0003, 0x6028, 0xa085, 0x0400, 0x602a, - 0x00de, 0x0005, 0x6803, 0x0010, 0x6124, 0xd1e4, 0x1180, 0x080c, - 0x4b52, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1cc, 0x0140, 0x708b, - 0x0020, 0x0028, 0x708b, 0x001d, 0x0010, 0x708b, 0x001f, 0x0005, - 0x6803, 0x0008, 0x6124, 0xd1cc, 0x11e8, 0xd1dc, 0x11c0, 0xd1e4, - 0x1198, 0xa184, 0x1e00, 0x11d8, 0x60e3, 0x0001, 0x600c, 0xc0b4, - 0x600e, 0x080c, 0x4c72, 0x6803, 0x0000, 0x708b, 0x0027, 0x2001, - 0x8b25, 0x2003, 0x0000, 0x0058, 0x708b, 0x001e, 0x0040, 0x708b, - 0x001d, 0x0028, 0x708b, 0x0020, 0x0010, 0x708b, 0x001f, 0x0005, - 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x4c72, 0x6803, - 0x0000, 0x6124, 0xd1d4, 0x11a0, 0xd1dc, 0x1178, 0xd1e4, 0x1150, - 0xa184, 0x1e00, 0x1178, 0x708b, 0x0027, 0x2001, 0x8b25, 0x2003, - 0x0000, 0x0040, 0x708b, 0x001e, 0x0028, 0x708b, 0x001d, 0x0010, - 0x708b, 0x001f, 0x0005, 0x6803, 0x0020, 0x6124, 0xd1dc, 0x1128, - 0xd1e4, 0x0128, 0x708b, 0x001e, 0x0010, 0x708b, 0x001d, 0x0005, - 0x080c, 0x4b7e, 0x6124, 0xd1dc, 0x1158, 0x080c, 0x4b52, 0xd1d4, - 0x1128, 0xd1e4, 0x0128, 0x708b, 0x001e, 0x0010, 0x708b, 0x001f, - 0x0005, 0x6803, 0x0020, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, - 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x708b, 0x001e, 0x0028, 0x708b, - 0x001d, 0x0010, 0x708b, 0x0021, 0x0005, 0x080c, 0x4b7e, 0x6124, - 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x708b, 0x001e, - 0x0028, 0x708b, 0x001d, 0x0010, 0x708b, 0x001f, 0x0005, 0x6803, - 0x0010, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, - 0xd1e4, 0x0158, 0x708b, 0x001e, 0x0040, 0x708b, 0x001d, 0x0028, - 0x708b, 0x0020, 0x0010, 0x708b, 0x001f, 0x0005, 0x00c6, 0x00d6, - 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x8b00, - 0x2091, 0x8000, 0x080c, 0x4c42, 0x11b8, 0x7088, 0xa086, 0x0027, - 0x1198, 0x6027, 0x0200, 0xe000, 0xe000, 0x6024, 0xd0cc, 0x0148, - 0x2001, 0x8d9d, 0x2003, 0x0001, 0x2001, 0x8b00, 0x2003, 0x0001, - 0x0420, 0x6028, 0xc0cd, 0x602a, 0x080c, 0x4c5e, 0x0150, 0x080c, - 0x4c54, 0x1138, 0x2001, 0x0001, 0x080c, 0x2298, 0x080c, 0x4c15, - 0x00a0, 0x080c, 0x4b7b, 0x0178, 0x2001, 0x0001, 0x080c, 0x2298, - 0x7088, 0xa086, 0x001e, 0x0120, 0x7088, 0xa086, 0x0022, 0x1118, - 0x708b, 0x0025, 0x0010, 0x708b, 0x0021, 0x012e, 0x00ee, 0x00de, - 0x00ce, 0x0005, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x4b5d, - 0x080c, 0x5601, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, - 0x080c, 0x66f7, 0x2071, 0x8b00, 0x080c, 0x4b06, 0x001e, 0x00fe, - 0x00ee, 0x0005, 0x0026, 0x00e6, 0x2011, 0x4b5d, 0x2071, 0x8dbd, - 0x701c, 0xa206, 0x1118, 0x7018, 0xa005, 0x0110, 0xa085, 0x0001, - 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6803, 0x0040, - 0x0156, 0x20a9, 0x002d, 0x1d04, 0x4b83, 0x2091, 0x6000, 0x1f04, - 0x4b83, 0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, - 0x2069, 0x0140, 0x2071, 0x8b00, 0x2001, 0x8d9d, 0x200c, 0xa186, - 0x0000, 0x0158, 0xa186, 0x0001, 0x0158, 0xa186, 0x0002, 0x0158, - 0xa186, 0x0003, 0x0158, 0x0804, 0x4c03, 0x708b, 0x0022, 0x0048, - 0x708b, 0x0021, 0x0030, 0x708b, 0x0023, 0x0038, 0x708b, 0x0024, - 0x0020, 0xa085, 0x0001, 0x080c, 0x4c82, 0x60e3, 0x0000, 0x6887, - 0x0001, 0x2001, 0x0001, 0x080c, 0x233e, 0x0026, 0x2011, 0x0003, - 0x080c, 0x695c, 0x002e, 0x7000, 0xa08e, 0x0004, 0x0118, 0x602b, - 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, - 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0118, 0x012e, 0x015e, 0x04c8, - 0x6803, 0x0080, 0x6803, 0x0000, 0x6904, 0xd1d4, 0x1130, 0x6803, - 0x0100, 0x1f04, 0x4bd2, 0x080c, 0x4c8f, 0x012e, 0x015e, 0x080c, - 0x4c54, 0x01a8, 0x6044, 0xa005, 0x0168, 0x6050, 0x0006, 0xa085, - 0x0020, 0x6052, 0x080c, 0x4c8f, 0xa006, 0x8001, 0x1df0, 0x000e, - 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x4c8f, 0x2001, - 0x8d9d, 0x2003, 0x0004, 0x080c, 0x4a20, 0x080c, 0x4c54, 0x0148, - 0x6804, 0xd0d4, 0x1130, 0xd0dc, 0x1100, 0x2001, 0x8d9d, 0x2003, - 0x0000, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, - 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x8b00, 0x2001, 0x8d9c, - 0x2003, 0x0000, 0x2001, 0x8d8d, 0x2003, 0x0000, 0x708b, 0x0000, - 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, 0x0000, 0x080c, 0x233e, - 0x6803, 0x0000, 0x6043, 0x0090, 0x6043, 0x0010, 0x2001, 0x8b25, - 0x2003, 0x0000, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, - 0x00ce, 0x0005, 0x0006, 0x2001, 0x8d9c, 0x2004, 0xa086, 0xaaaa, - 0x000e, 0x0005, 0x0006, 0x2001, 0x8b71, 0x2004, 0xa084, 0x0030, - 0xa086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x8b71, 0x2004, - 0xa084, 0x0030, 0xa086, 0x0030, 0x000e, 0x0005, 0x0006, 0x2001, - 0x8b71, 0x2004, 0xa084, 0x0030, 0xa086, 0x0010, 0x000e, 0x0005, - 0x0006, 0x2001, 0x8b71, 0x2004, 0xa084, 0x0030, 0xa086, 0x0020, - 0x000e, 0x0005, 0x2001, 0x8b0c, 0x2004, 0xd0a4, 0x0150, 0x080c, - 0x235e, 0x0036, 0x2019, 0x0028, 0x080c, 0x2542, 0x003e, 0xa006, - 0x0009, 0x0005, 0x00e6, 0x2071, 0x8b0c, 0x2e04, 0x0118, 0xa085, - 0x0010, 0x0010, 0xa084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, - 0x0006, 0x60f0, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, - 0x0006, 0x6028, 0x0006, 0x602f, 0x0100, 0x602f, 0x0000, 0x602f, - 0x0080, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, - 0x600e, 0x000e, 0x60ee, 0x000e, 0x60f2, 0x60e3, 0x0000, 0x6887, - 0x0001, 0x2001, 0x0001, 0x080c, 0x233e, 0x6803, 0x0080, 0x6803, - 0x0000, 0x6803, 0x0020, 0x000e, 0x6052, 0x6050, 0x0005, 0x0156, - 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, - 0x2071, 0x8b00, 0x6028, 0xa084, 0xe1ff, 0x602a, 0x6027, 0x0200, - 0x6803, 0x0010, 0x20a9, 0x04e2, 0x6024, 0xd0cc, 0x1188, 0x1d04, - 0x4cd4, 0x2091, 0x6000, 0x1f04, 0x4cd4, 0x2001, 0x8d9d, 0x2003, - 0x0001, 0x2001, 0x8b00, 0x2003, 0x0001, 0xa085, 0x0001, 0x0410, - 0x6803, 0x0000, 0x20a9, 0x04e2, 0x6027, 0x1e00, 0x2009, 0x1e00, - 0xe000, 0x6024, 0xa10c, 0x0138, 0x1d04, 0x4cec, 0x2091, 0x6000, - 0x1f04, 0x4cec, 0x0c10, 0x6028, 0xa085, 0x1e00, 0x602a, 0x60e3, - 0x0000, 0x709c, 0x6886, 0x2001, 0x8d8d, 0x2004, 0x080c, 0x233e, - 0x60e2, 0xa006, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x015e, 0x0005, - 0x0156, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, - 0x8b00, 0x2069, 0x0200, 0x6804, 0xa005, 0x1118, 0x6808, 0xa005, - 0x0158, 0x6028, 0xa084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x708b, - 0x0026, 0x7003, 0x0001, 0x0460, 0x2069, 0x0140, 0x6803, 0x0008, - 0x20a9, 0x04e2, 0x6027, 0x1e00, 0x2009, 0x1e00, 0xe000, 0x6024, - 0xa10c, 0x0188, 0x1d04, 0x4d32, 0x2091, 0x6000, 0x1f04, 0x4d32, - 0x2001, 0x8d9d, 0x2003, 0x0001, 0x2001, 0x8b00, 0x2003, 0x0001, - 0xa085, 0x0001, 0x0068, 0x6803, 0x0000, 0x60e3, 0x0000, 0x709c, - 0x6886, 0x2001, 0x8d8d, 0x2004, 0x080c, 0x233e, 0x60e2, 0xa006, - 0x00ee, 0x00de, 0x00ce, 0x001e, 0x015e, 0x0005, 0x2071, 0x8be1, - 0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001, - 0x704f, 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040, - 0x7083, 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000, - 0x0005, 0x00e6, 0x2071, 0x8be1, 0x6848, 0xa005, 0x1130, 0x7028, - 0xc085, 0x702a, 0xa085, 0x0001, 0x0428, 0x6a50, 0x7236, 0x6b54, - 0x733a, 0x6858, 0x703e, 0x707a, 0x685c, 0x7042, 0x707e, 0x6848, - 0x702e, 0x6840, 0x7032, 0x2009, 0x000c, 0x200a, 0x8007, 0x8006, - 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319, - 0x7272, 0x7376, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700f, - 0x0000, 0xa006, 0x00ee, 0x0005, 0x2b78, 0x2071, 0x8be1, 0x7004, - 0x0043, 0x700c, 0x0002, 0x4db8, 0x4daf, 0x4daf, 0x4daf, 0x4daf, - 0x0005, 0x4e0e, 0x4e0f, 0x4e41, 0x4e42, 0x4e0c, 0x4e76, 0x4e7b, - 0x4eac, 0x4ead, 0x4ec8, 0x4ec9, 0x4eca, 0x4ecb, 0x4ecc, 0x4ecd, - 0x4f32, 0x4f59, 0x700c, 0x0002, 0x4dd1, 0x4e0c, 0x4e0c, 0x4e0d, - 0x4e0d, 0x7830, 0x7930, 0xa106, 0x0120, 0x7830, 0x7930, 0xa106, - 0x1510, 0x7030, 0xa10a, 0x01f8, 0x1210, 0x712c, 0xa10a, 0xa18a, - 0x0002, 0x12d0, 0x080c, 0x146f, 0x01b0, 0x2d00, 0x705a, 0x7063, - 0x0040, 0x2001, 0x0003, 0x7057, 0x0000, 0x0126, 0x0006, 0x2091, - 0x8000, 0x2009, 0x8dcd, 0x2104, 0xc085, 0x200a, 0x000e, 0x700e, - 0x012e, 0x080c, 0x14eb, 0x0005, 0x080c, 0x146f, 0x0de0, 0x2d00, - 0x705a, 0x080c, 0x146f, 0x1108, 0x0c10, 0x2d00, 0x7086, 0x7063, - 0x0080, 0x2001, 0x0004, 0x08f8, 0x0005, 0x0005, 0x0005, 0x700c, - 0x0002, 0x4e16, 0x4e19, 0x4e27, 0x4e40, 0x4e40, 0x080c, 0x4dca, - 0x0005, 0x0126, 0x8001, 0x700e, 0x7058, 0x0006, 0x080c, 0x51f4, - 0x0120, 0x2091, 0x8000, 0x080c, 0x4dca, 0x00de, 0x0048, 0x0126, - 0x8001, 0x700e, 0x080c, 0x51f4, 0x7058, 0x2068, 0x7084, 0x705a, - 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, - 0x0020, 0x1218, 0x00db, 0x012e, 0x0005, 0x012e, 0x080c, 0x4ece, - 0x0005, 0x0005, 0x0005, 0x00e6, 0x2071, 0x8be1, 0x700c, 0x0002, - 0x4e4d, 0x4e4d, 0x4e4d, 0x4e4f, 0x4e52, 0x00ee, 0x0005, 0x700f, - 0x0001, 0x0010, 0x700f, 0x0002, 0x00ee, 0x0005, 0x4ece, 0x4ece, - 0x4eea, 0x4ece, 0x4fc5, 0x4ece, 0x4ece, 0x4ece, 0x4ece, 0x4ece, - 0x4eea, 0x4ffe, 0x5041, 0x508a, 0x509e, 0x4ece, 0x4ece, 0x4f06, - 0x4eea, 0x4ece, 0x4ece, 0x4f1a, 0x5128, 0x5143, 0x4ece, 0x4f06, - 0x4ece, 0x4ece, 0x4ece, 0x4ece, 0x4f1a, 0x5143, 0x7020, 0x2068, - 0x080c, 0x149f, 0x0005, 0x700c, 0x0002, 0x4e82, 0x4e85, 0x4e93, - 0x4eab, 0x4eab, 0x080c, 0x4dca, 0x0005, 0x0126, 0x8001, 0x700e, - 0x7058, 0x0006, 0x080c, 0x51f4, 0x0120, 0x2091, 0x8000, 0x080c, - 0x4dca, 0x00de, 0x0048, 0x0126, 0x8001, 0x700e, 0x080c, 0x51f4, - 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, - 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x1218, 0x003b, 0x012e, - 0x0005, 0x012e, 0x0419, 0x0005, 0x0005, 0x0005, 0x4ece, 0x4eea, - 0x4fb1, 0x4ece, 0x4eea, 0x4ece, 0x4eea, 0x4eea, 0x4ece, 0x4eea, - 0x4fb1, 0x4eea, 0x4eea, 0x4eea, 0x4eea, 0x4eea, 0x4ece, 0x4eea, - 0x4fb1, 0x4ece, 0x4ece, 0x4eea, 0x4ece, 0x4ece, 0x4ece, 0x4eea, - 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x7007, 0x0001, - 0x6838, 0xa084, 0x00ff, 0xc0d5, 0x683a, 0x0126, 0x2091, 0x8000, - 0x080c, 0x46a1, 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, - 0x00ff, 0xc0e5, 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x46a1, - 0x012e, 0x0005, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0ed, - 0x683a, 0x0126, 0x2091, 0x8000, 0x080c, 0x46a1, 0x012e, 0x0005, - 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0dd, 0x683a, 0x0126, - 0x2091, 0x8000, 0x080c, 0x46a1, 0x012e, 0x0005, 0x6834, 0x8007, - 0xa084, 0x00ff, 0x0988, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, - 0x4f92, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, - 0x4f92, 0x0005, 0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, - 0x0024, 0x2098, 0x20a1, 0x8c0c, 0x53a3, 0x6858, 0x7012, 0xa082, - 0x0401, 0x1a70, 0x6884, 0xa08a, 0x0003, 0x1a50, 0xa080, 0x4f83, - 0x2005, 0x70c6, 0x7010, 0xa015, 0x0904, 0x4f77, 0x080c, 0x146f, - 0x1118, 0x7007, 0x000f, 0x0005, 0x2d00, 0x7022, 0x70c4, 0x2060, - 0x2c05, 0x6836, 0xe004, 0xad00, 0x7096, 0xe008, 0xa20a, 0x1210, - 0xa00e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0xa296, 0x0004, - 0x0108, 0xa108, 0x719a, 0x810b, 0x719e, 0xae90, 0x0022, 0x080c, - 0x14d3, 0x7090, 0xa08e, 0x0100, 0x0170, 0xa086, 0x0200, 0x0118, - 0x7007, 0x0010, 0x0005, 0x7020, 0x2068, 0x080c, 0x149f, 0x7014, - 0x2068, 0x0804, 0x4ef8, 0x7020, 0x2068, 0x7018, 0x6802, 0x6807, - 0x0000, 0x2d08, 0x2068, 0x6906, 0x711a, 0x0804, 0x4f32, 0x7014, - 0x2068, 0x7007, 0x0001, 0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, - 0x0904, 0x515b, 0x0078, 0x4f86, 0x4f8a, 0x4f8e, 0x0002, 0x0011, - 0x0007, 0x0004, 0x000a, 0x000f, 0x0005, 0x0006, 0x0012, 0x000f, - 0x0005, 0x0006, 0x2009, 0x8b2f, 0x210c, 0x81ff, 0x11a8, 0x6838, - 0xa084, 0x00ff, 0x683a, 0x6853, 0x0000, 0x080c, 0x4170, 0x1108, - 0x0005, 0x080c, 0x4773, 0x0126, 0x2091, 0x8000, 0x080c, 0x7dc8, - 0x080c, 0x46a1, 0x012e, 0x0ca0, 0x2001, 0x0028, 0x2009, 0x0000, - 0x0c80, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906, 0x711a, 0x7010, - 0x8001, 0x7012, 0x0118, 0x7007, 0x0006, 0x0030, 0x7014, 0x2068, - 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x7007, 0x0001, 0x6944, - 0x810f, 0xa18c, 0x00ff, 0x6848, 0xa084, 0x00ff, 0x20a9, 0x0001, - 0xa096, 0x0001, 0x01b0, 0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, - 0x0002, 0x0178, 0xa005, 0x11f8, 0x6944, 0x810f, 0xa18c, 0x00ff, - 0x080c, 0x430a, 0x11c0, 0x0066, 0x6e50, 0x080c, 0x43e6, 0x006e, - 0x0090, 0x0046, 0x2011, 0x8b0c, 0x2224, 0xc484, 0xc48c, 0x2412, - 0x004e, 0x00c6, 0x080c, 0x430a, 0x1110, 0x080c, 0x453d, 0x8108, - 0x1f04, 0x4ff2, 0x00ce, 0x080c, 0x149f, 0x0005, 0x0126, 0x2091, - 0x8000, 0x7007, 0x0001, 0x2001, 0x8b52, 0x2004, 0xd0a4, 0x0580, - 0x2061, 0x8e2a, 0x6100, 0xd184, 0x0178, 0x6858, 0xa084, 0x00ff, - 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0xa005, 0x1538, 0x6003, - 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0x6860, 0xa005, - 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858, 0xa084, 0x00ff, - 0x0178, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff, 0x0148, 0x600a, - 0x6858, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x51e3, - 0x012e, 0x0804, 0x51dd, 0x012e, 0x0804, 0x51d7, 0x012e, 0x0804, - 0x51da, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x8b52, - 0x2004, 0xd0a4, 0x05e0, 0x2061, 0x8e2a, 0x6000, 0xd084, 0x05b8, - 0x6204, 0x6308, 0xd08c, 0x1530, 0x6c48, 0xa484, 0x0003, 0x0170, - 0x6958, 0xa18c, 0x00ff, 0x8001, 0x1120, 0x2100, 0xa210, 0x0620, - 0x0028, 0x8001, 0x1508, 0x2100, 0xa212, 0x02f0, 0xa484, 0x000c, - 0x0188, 0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, 0x1120, - 0x2100, 0xa318, 0x0288, 0x0030, 0xa082, 0x0004, 0x1168, 0x2100, - 0xa31a, 0x0250, 0x6860, 0xa005, 0x0110, 0x8000, 0x6016, 0x6206, - 0x630a, 0x012e, 0x0804, 0x51e3, 0x012e, 0x0804, 0x51e0, 0x012e, - 0x0804, 0x51dd, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, - 0x8e2a, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, - 0x012e, 0x0804, 0x51f1, 0x012e, 0x0804, 0x51e0, 0x0126, 0x00c6, - 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0148, 0x00c6, - 0x2061, 0x8e2a, 0x6000, 0xa084, 0xfcff, 0x6002, 0x00ce, 0x04d8, - 0x6858, 0xa005, 0x0904, 0x50ff, 0x685c, 0xa065, 0x0904, 0x50fb, - 0x2001, 0x8b2f, 0x2004, 0xa005, 0x0118, 0x080c, 0x7d3c, 0x0068, - 0x6013, 0x0400, 0x6027, 0x0000, 0x694c, 0xd1a4, 0x0110, 0x6950, - 0x6126, 0x2009, 0x0041, 0x080c, 0x6d3f, 0x6958, 0xa18c, 0xff00, - 0xa186, 0x2000, 0x0180, 0xa186, 0x0400, 0x0168, 0xa186, 0x1000, - 0x0108, 0x0088, 0x00c6, 0x2061, 0x8e2a, 0x6000, 0xa084, 0xfdff, - 0x6002, 0x00ce, 0x0040, 0x0026, 0x2009, 0x0000, 0x2011, 0xfdff, - 0x080c, 0x5734, 0x002e, 0x684c, 0xd0c4, 0x0148, 0x2061, 0x8e2a, - 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, - 0x012e, 0x0804, 0x51e3, 0x00ce, 0x012e, 0x0804, 0x51dd, 0x6954, - 0xa186, 0x002e, 0x0d40, 0xa186, 0x002d, 0x0d28, 0xa186, 0x002a, - 0x1130, 0x2001, 0x8b0c, 0x200c, 0xc194, 0x2102, 0x08e0, 0xa186, - 0x0020, 0x0170, 0xa186, 0x0029, 0x1d30, 0x6944, 0xa18c, 0xff00, - 0x810f, 0x080c, 0x430a, 0x1978, 0x6000, 0xc0e4, 0x6002, 0x0858, - 0x685c, 0xa065, 0x09c0, 0x2001, 0x8da2, 0x2004, 0x6016, 0x0818, - 0x2061, 0x8e2a, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x51f1, - 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, - 0x0804, 0x51f1, 0x012e, 0x6853, 0x0016, 0x0804, 0x51ea, 0x6853, - 0x0007, 0x0804, 0x51ea, 0x6834, 0x8007, 0xa084, 0x00ff, 0x1118, - 0x080c, 0x4edc, 0x0078, 0x2030, 0x8001, 0x1120, 0x7007, 0x0001, - 0x0051, 0x0040, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, - 0x704b, 0x515b, 0x0005, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2009, - 0x8b2f, 0x210c, 0x81ff, 0x1904, 0x51cc, 0x2009, 0x8b0c, 0x210c, - 0xd194, 0x1904, 0x51d4, 0x6848, 0x2070, 0xae82, 0x9200, 0x0a04, - 0x51c0, 0x2001, 0x8b16, 0x2004, 0xae02, 0x1a04, 0x51c0, 0x2061, - 0x8e2a, 0x6100, 0xa184, 0x0001, 0x0568, 0xa184, 0x0100, 0x1904, - 0x51c3, 0xa184, 0x0200, 0x1904, 0x51c6, 0x601c, 0xa005, 0x1904, - 0x51c9, 0x711c, 0xa186, 0x0006, 0x1510, 0x7018, 0xa005, 0x05e0, - 0x2004, 0xd0e4, 0x15e0, 0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, - 0x7010, 0xa005, 0x1138, 0x7112, 0x2e60, 0x080c, 0x56a3, 0x012e, - 0x00ee, 0x0005, 0x2068, 0x6800, 0xa005, 0x1de0, 0x6902, 0x012e, - 0x00ee, 0x0005, 0x012e, 0x00ee, 0x6853, 0x0006, 0x04d8, 0x6944, - 0xa18c, 0xff00, 0x810f, 0x080c, 0x430a, 0x11c8, 0x6000, 0xd0e4, - 0x11b0, 0x711c, 0xa186, 0x0007, 0x1118, 0x6853, 0x0002, 0x0088, - 0x6853, 0x0008, 0x0070, 0x6853, 0x000e, 0x0058, 0x6853, 0x0017, - 0x0040, 0x6853, 0x0035, 0x0028, 0x6853, 0x0028, 0x0010, 0x6853, - 0x0029, 0x012e, 0x00ee, 0x00b0, 0x6853, 0x002a, 0x0cd0, 0x2009, - 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, - 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00, - 0xa105, 0x6856, 0x0126, 0x2091, 0x8000, 0x080c, 0x46a1, 0x012e, - 0x0005, 0x080c, 0x149f, 0x0005, 0x702c, 0x7130, 0x8108, 0xa102, - 0x0230, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0058, 0x7070, - 0xa080, 0x0040, 0x7072, 0x1230, 0x7074, 0xa081, 0x0000, 0x7076, - 0xa085, 0x0001, 0x7932, 0x7132, 0x0005, 0x00d6, 0x080c, 0x569a, - 0x00de, 0x0005, 0x00d6, 0x2011, 0x0004, 0x2204, 0xa085, 0x8002, - 0x2012, 0x00de, 0x0005, 0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, - 0x3d00, 0xa084, 0x7000, 0x0118, 0xa086, 0x1000, 0x11b8, 0x20e1, - 0x0004, 0x3d60, 0xd1bc, 0x1108, 0x3e60, 0xac84, 0x0003, 0x1170, - 0xac82, 0x9200, 0x0258, 0x6858, 0xac02, 0x1240, 0x2009, 0x0047, - 0x080c, 0x6d3f, 0x7a1c, 0xd284, 0x19f0, 0x0005, 0xa016, 0x080c, - 0x16d1, 0x0cc0, 0x0156, 0x0136, 0x0146, 0x20e1, 0x3000, 0x3d20, - 0x3e28, 0xa584, 0x0070, 0x1530, 0xa484, 0x7000, 0xa086, 0x1000, - 0x11a8, 0x080c, 0x5295, 0x01f0, 0x20e1, 0x3000, 0x7828, 0x7828, - 0x080c, 0x52b1, 0x014e, 0x013e, 0x015e, 0x2009, 0x8db2, 0x2104, - 0xa005, 0x1108, 0x0005, 0x080c, 0x5d10, 0x0ce0, 0xa484, 0x7000, - 0x1508, 0x0459, 0x01a8, 0x7000, 0xa084, 0xff00, 0xa086, 0x8100, - 0x0d18, 0x0070, 0xd5a4, 0x0158, 0x080c, 0x1b5e, 0x20e1, 0x9010, - 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0038, 0x00a9, - 0x080c, 0x8a02, 0x20e1, 0x3000, 0x7828, 0x7828, 0x014e, 0x013e, - 0x015e, 0x08c0, 0x0051, 0x0da0, 0x080c, 0x8a02, 0x20e1, 0x3000, - 0x7828, 0x7828, 0x080c, 0x5556, 0x0c88, 0xa484, 0x01ff, 0x6882, - 0xa005, 0x0160, 0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac, 0x20e1, - 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x0005, 0x20a9, 0x000c, - 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0xa085, 0x0001, - 0x0ca0, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000, 0x8007, 0xa196, - 0x0000, 0x1118, 0x0804, 0x5459, 0x0005, 0xa196, 0x2000, 0x1148, - 0x6900, 0xa18e, 0x0001, 0x1118, 0x080c, 0x399f, 0x0ca8, 0x0039, - 0x0c98, 0xa196, 0x8000, 0x1d80, 0x080c, 0x54e1, 0x0c68, 0x00c6, - 0x6a80, 0x82ff, 0x0904, 0x53ee, 0x7110, 0xa18c, 0xff00, 0x810f, - 0xa196, 0x0001, 0x0120, 0xa196, 0x0023, 0x1904, 0x53ee, 0xa08e, - 0x0023, 0x1558, 0x080c, 0x5544, 0x0904, 0x53ee, 0x7124, 0x610a, - 0x7030, 0xa08e, 0x0200, 0x1150, 0x7034, 0xa005, 0x1904, 0x53ee, - 0x2009, 0x0015, 0x080c, 0x6d3f, 0x0804, 0x53ee, 0xa08e, 0x0210, - 0x1130, 0x2009, 0x0015, 0x080c, 0x6d3f, 0x0804, 0x53ee, 0xa08e, - 0x0100, 0x1904, 0x53ee, 0x7034, 0xa005, 0x1904, 0x53ee, 0x2009, - 0x0016, 0x080c, 0x6d3f, 0x0804, 0x53ee, 0xa08e, 0x0022, 0x1904, - 0x53ee, 0x7030, 0xa08e, 0x0300, 0x1580, 0x68c8, 0xd0a4, 0x0528, - 0xc0b5, 0x68ca, 0x7100, 0xa18c, 0x00ff, 0x696e, 0x7004, 0x6872, - 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0xa084, 0x00ff, - 0x0016, 0x2008, 0x080c, 0x2313, 0x7932, 0x7936, 0x001e, 0x000e, - 0x00fe, 0x080c, 0x22e9, 0x694e, 0x703c, 0x00e6, 0x2071, 0x0140, - 0x7086, 0x2071, 0x8b00, 0x709e, 0x00ee, 0x7034, 0xa005, 0x1904, - 0x53ee, 0x2009, 0x0017, 0x0804, 0x53c1, 0xa08e, 0x0400, 0x1158, - 0x7034, 0xa005, 0x1904, 0x53ee, 0x68c8, 0xc0a5, 0x68ca, 0x2009, - 0x0030, 0x0804, 0x53c1, 0xa08e, 0x0500, 0x1140, 0x7034, 0xa005, - 0x1904, 0x53ee, 0x2009, 0x0018, 0x0804, 0x53c1, 0xa08e, 0x2010, - 0x1120, 0x2009, 0x0019, 0x0804, 0x53c1, 0xa08e, 0x2110, 0x1120, - 0x2009, 0x001a, 0x0804, 0x53c1, 0xa08e, 0x5200, 0x1140, 0x7034, - 0xa005, 0x1904, 0x53ee, 0x2009, 0x001b, 0x0804, 0x53c1, 0xa08e, - 0x5000, 0x1140, 0x7034, 0xa005, 0x1904, 0x53ee, 0x2009, 0x001c, - 0x0804, 0x53c1, 0xa08e, 0x1200, 0x1138, 0x7034, 0xa005, 0x1904, - 0x53ee, 0x2009, 0x0024, 0x04a8, 0xa08c, 0xff00, 0xa18e, 0x2400, - 0x1118, 0x2009, 0x002d, 0x0468, 0xa08c, 0xff00, 0xa18e, 0x5300, - 0x1118, 0x2009, 0x002a, 0x0428, 0xa08e, 0x0f00, 0x1118, 0x2009, - 0x0020, 0x00f8, 0xa08e, 0x5300, 0x1108, 0x00c8, 0xa08e, 0x6104, - 0x11b0, 0x2011, 0x908d, 0x8208, 0x2204, 0xa082, 0x0004, 0x20a8, - 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108, 0x2124, 0x080c, - 0x3617, 0x8108, 0x1f04, 0x53b2, 0x2009, 0x0023, 0x0010, 0x2009, - 0x001d, 0x0016, 0x2011, 0x9083, 0x2204, 0x8211, 0x220c, 0x080c, - 0x22e9, 0x1530, 0x080c, 0x42d6, 0x1518, 0x6612, 0x6516, 0x86ff, - 0x0180, 0x001e, 0x0016, 0xa186, 0x0017, 0x1158, 0x686c, 0xa606, - 0x1140, 0x6870, 0xa506, 0xa084, 0xff00, 0x1118, 0x6000, 0xc0f5, - 0x6002, 0x00c6, 0x080c, 0x6cc2, 0x0168, 0x001e, 0x611a, 0x601f, - 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x6d3f, 0x00ce, 0x0005, - 0x001e, 0x0ce0, 0x00ce, 0x0ce0, 0x00e6, 0x00d6, 0x2028, 0x2130, - 0xa696, 0x00ff, 0x1518, 0xa596, 0xfffd, 0x1120, 0x2009, 0x007f, - 0x0804, 0x5455, 0xa596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, - 0x5455, 0xa596, 0xfffc, 0x1120, 0x2009, 0x0080, 0x0804, 0x5455, - 0xa594, 0xff00, 0xa296, 0xfc00, 0x1148, 0x2011, 0x0000, 0x2021, - 0x0081, 0x20a9, 0x007e, 0x2071, 0x8cb5, 0x00a0, 0x2011, 0x0000, - 0x2019, 0x8b32, 0x231c, 0xd3ac, 0x0138, 0x2021, 0x0000, 0x20a9, - 0x00ff, 0x2071, 0x8c34, 0x0030, 0x2021, 0x0081, 0x20a9, 0x007e, - 0x2071, 0x8cb5, 0x2e1c, 0x83ff, 0x1128, 0x82ff, 0x1198, 0x2410, - 0xc2fd, 0x0080, 0x2368, 0x6f10, 0x0006, 0x2100, 0xa706, 0x000e, - 0x6b14, 0x1120, 0xa346, 0x1110, 0x2408, 0x0078, 0x87ff, 0x1110, - 0x83ff, 0x0d58, 0x8420, 0x8e70, 0x1f04, 0x5432, 0x82ff, 0x1118, - 0xa085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0xa006, 0x00de, 0x00ee, - 0x0005, 0xa084, 0x0007, 0x000a, 0x0005, 0x5465, 0x5465, 0x5465, - 0x5465, 0x5465, 0x5466, 0x547b, 0x54ce, 0x0005, 0x7110, 0xd1bc, - 0x0188, 0x7120, 0x2160, 0xac8c, 0x0003, 0x1160, 0xac8a, 0x9200, - 0x0248, 0x6858, 0xac02, 0x1230, 0x7124, 0x610a, 0x2009, 0x0046, - 0x080c, 0x6d3f, 0x0005, 0x00c6, 0x7110, 0xd1bc, 0x1904, 0x54cc, - 0x2011, 0x9083, 0x2204, 0x8211, 0x220c, 0x080c, 0x22e9, 0x1904, - 0x54cc, 0x080c, 0x430a, 0x1904, 0x54cc, 0x6000, 0xd0ec, 0x15e0, - 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x0160, 0x080c, - 0x4c42, 0x11d0, 0x6204, 0xa294, 0x00ff, 0xa286, 0x0006, 0x11a0, - 0xa295, 0x0600, 0x6206, 0x00c6, 0x080c, 0x6cc2, 0x001e, 0x0520, - 0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x7130, 0x6122, 0x2009, - 0x0044, 0x080c, 0x6d3f, 0x00c0, 0x00c6, 0x080c, 0x6cc2, 0x001e, - 0x0198, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004, - 0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, - 0x080c, 0x58e2, 0x080c, 0x5d10, 0x00ce, 0x0005, 0x7110, 0xd1bc, - 0x0178, 0x7020, 0x2060, 0xac84, 0x0003, 0x1150, 0xac82, 0x9200, - 0x0238, 0x6858, 0xac02, 0x1220, 0x2009, 0x0045, 0x080c, 0x6d3f, - 0x0005, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x1138, - 0xa084, 0x000f, 0xa08a, 0x0006, 0x1a0c, 0x1410, 0x000b, 0x0005, - 0x54f6, 0x54f7, 0x54f6, 0x54f6, 0x552c, 0x5538, 0x0005, 0x7110, - 0xd1bc, 0x1588, 0x700c, 0x7108, 0x080c, 0x22e9, 0x1560, 0x080c, - 0x42d6, 0x1548, 0x6612, 0x6516, 0x6204, 0xa294, 0xff00, 0x8217, - 0xa286, 0x0004, 0x0118, 0xa286, 0x0006, 0x1178, 0x00c6, 0x080c, - 0x6cc2, 0x001e, 0x01c0, 0x611a, 0x601f, 0x0005, 0x7120, 0x610a, - 0x2009, 0x0088, 0x080c, 0x6d3f, 0x0070, 0x00c6, 0x080c, 0x6cc2, - 0x001e, 0x0148, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x2009, - 0x0001, 0x080c, 0x6d3f, 0x0005, 0x7110, 0xd1bc, 0x0140, 0x00a1, - 0x0130, 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0x6d3f, 0x0005, - 0x7110, 0xd1bc, 0x0140, 0x0041, 0x0130, 0x7124, 0x610a, 0x2009, - 0x008a, 0x080c, 0x6d3f, 0x0005, 0x7020, 0x2060, 0xac84, 0x0003, - 0x1158, 0xac82, 0x9200, 0x0240, 0x2001, 0x8b16, 0x2004, 0xac02, - 0x1218, 0xa085, 0x0001, 0x0005, 0xa006, 0x0ce8, 0x00c6, 0x00d6, - 0x00f6, 0x7000, 0xa084, 0xf000, 0xa086, 0xc000, 0x0598, 0x080c, - 0x6cc2, 0x0580, 0x00c6, 0x0046, 0x2011, 0x9083, 0x2204, 0x8211, - 0x220c, 0x080c, 0x22e9, 0x1568, 0x080c, 0x42d6, 0x1550, 0x6612, - 0x6516, 0x2c00, 0x004e, 0x00ce, 0x601a, 0x080c, 0x1488, 0x01f0, - 0x2d00, 0x6026, 0x6803, 0x0000, 0x6837, 0x0000, 0x6c3a, 0xadf8, - 0x000f, 0x20a9, 0x000e, 0x2fa0, 0x2e98, 0x53a3, 0x6013, 0x0205, - 0x6007, 0x003e, 0x601f, 0x0001, 0x6003, 0x0001, 0x080c, 0x58e2, - 0x080c, 0x5d10, 0x00fe, 0x00de, 0x00ce, 0x0005, 0x080c, 0x6d18, - 0x0cc8, 0x004e, 0x00ce, 0x0cd0, 0x2071, 0x8dbd, 0x7003, 0x0003, - 0x700f, 0x0361, 0xa006, 0x701a, 0x7012, 0x7017, 0x9200, 0x7007, - 0x0000, 0x7026, 0x702b, 0x6704, 0x7032, 0x7037, 0x6745, 0x703b, - 0xffff, 0x703f, 0xffff, 0x0005, 0x2071, 0x8dbd, 0x1d04, 0x55fc, - 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1120, 0x700f, 0x0361, - 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x7024, 0xa00d, 0x0158, - 0x7020, 0x8001, 0x7022, 0x1138, 0x7023, 0x0009, 0x8109, 0x7126, - 0x1110, 0x7028, 0x080f, 0x7030, 0xa00d, 0x0158, 0x702c, 0x8001, - 0x702e, 0x1138, 0x702f, 0x0009, 0x8109, 0x7132, 0x1110, 0x7034, - 0x080f, 0x7038, 0xa005, 0x0118, 0x0310, 0x8001, 0x703a, 0x703c, - 0xa005, 0x0118, 0x0310, 0x8001, 0x703e, 0x7018, 0xa00d, 0x0158, - 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, - 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x5622, 0x5623, - 0x563b, 0x00e6, 0x2071, 0x8dbd, 0x7018, 0xa005, 0x1120, 0x711a, - 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, - 0x8dbd, 0x701c, 0xa206, 0x1110, 0x701a, 0x701e, 0x000e, 0x00ee, - 0x0005, 0x00e6, 0x2071, 0x8dbd, 0x6088, 0xa102, 0x0208, 0x618a, - 0x00ee, 0x0005, 0x0005, 0x7110, 0x080c, 0x430a, 0x1158, 0x6088, - 0x8001, 0x0240, 0x608a, 0x1130, 0x0126, 0x2091, 0x8000, 0x080c, - 0x5d10, 0x012e, 0x8108, 0xa182, 0x00ff, 0x0218, 0xa00e, 0x7007, - 0x0002, 0x7112, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, - 0x6014, 0xa005, 0x0500, 0x8001, 0x6016, 0x11e8, 0x611c, 0xa186, - 0x0003, 0x0118, 0xa186, 0x0006, 0x11a0, 0x6010, 0x2068, 0x6854, - 0xa08a, 0x199a, 0x0270, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, - 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, - 0x0010, 0x080c, 0x79ec, 0x012e, 0xac88, 0x000c, 0x7116, 0x2001, - 0x8b17, 0x2004, 0xa102, 0x0220, 0x7017, 0x9200, 0x7007, 0x0000, - 0x0005, 0x00e6, 0x2071, 0x8dbd, 0x7027, 0x07d0, 0x7023, 0x0009, - 0x00ee, 0x0005, 0x2001, 0x8dc6, 0x2003, 0x0000, 0x0005, 0x00e6, - 0x2071, 0x8dbd, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, - 0x8dc9, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x8dbd, 0x711a, - 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00c6, 0x2061, 0x8e2a, - 0x00ce, 0x0005, 0xa184, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, - 0x8e2a, 0x2060, 0x0005, 0x6854, 0xa08a, 0x199a, 0x0210, 0x2001, - 0x1999, 0xa005, 0x1150, 0x00c6, 0x2061, 0x8e2a, 0x6014, 0x00ce, - 0xa005, 0x1138, 0x2001, 0x001e, 0x0020, 0xa08e, 0xffff, 0x1108, - 0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c, - 0x00c0, 0xa18e, 0x00c0, 0x0588, 0xd0b4, 0x1138, 0xd0bc, 0x11f0, - 0x2009, 0x0006, 0x080c, 0x5711, 0x0005, 0xd0fc, 0x0140, 0xa084, - 0x0003, 0xa08e, 0x0003, 0x05b8, 0xa08e, 0x0000, 0x15a0, 0x2009, - 0x8b73, 0x2104, 0xd084, 0x0128, 0x2009, 0x0042, 0x080c, 0x6d3f, - 0x0005, 0x2009, 0x0043, 0x080c, 0x6d3f, 0x0005, 0xd0fc, 0x0140, - 0xa084, 0x0003, 0xa08e, 0x0003, 0x01f0, 0xa08e, 0x0000, 0x11d8, - 0x2009, 0x0042, 0x080c, 0x6d3f, 0x0005, 0xd0fc, 0x0168, 0xa084, - 0x0003, 0xa08e, 0x0003, 0x0178, 0xa08e, 0x0002, 0x0138, 0x2009, - 0x0041, 0x080c, 0x6d3f, 0x0005, 0x0051, 0x0ce8, 0x2009, 0x0043, - 0x080c, 0x6d3f, 0x0cc0, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009, - 0x0001, 0x6010, 0xa0ec, 0xf000, 0x01f0, 0x2068, 0x6952, 0x6800, - 0x6012, 0xa186, 0x0001, 0x1188, 0x694c, 0xa18c, 0x8100, 0xa18e, - 0x8100, 0x1158, 0x00c6, 0x2061, 0x8e2a, 0x6200, 0xd28c, 0x1120, - 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, 0x46a1, 0x6010, - 0xa06d, 0x190c, 0x56a3, 0x0005, 0x0156, 0x00c6, 0x2061, 0x8e2a, - 0x6000, 0x81ff, 0x0110, 0xa205, 0x0008, 0xa204, 0x6002, 0x00ce, - 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0xa005, 0x0120, - 0x8001, 0x680a, 0xa085, 0x0001, 0x0005, 0x20a9, 0x0010, 0xa006, - 0x8004, 0x8086, 0x818e, 0x1208, 0xa200, 0x1f04, 0x5751, 0x8086, - 0x818e, 0x0005, 0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, - 0x12a8, 0x8213, 0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, 0x5761, - 0x0028, 0xa11a, 0x2308, 0x8210, 0x1f04, 0x5761, 0x0006, 0x3200, - 0xa084, 0xefff, 0x2080, 0x000e, 0x015e, 0x0005, 0x0006, 0x3200, - 0xa085, 0x1000, 0x0cb8, 0x0126, 0x2091, 0x2400, 0x2079, 0x8daa, - 0x012e, 0x00d6, 0x2069, 0x8daa, 0x6803, 0x0005, 0x2069, 0x0004, - 0x2d04, 0xa085, 0x8001, 0x206a, 0x00de, 0x0005, 0x00c6, 0x6027, - 0x0001, 0x7804, 0xa084, 0x0007, 0x0002, 0x579f, 0x57c0, 0x5813, - 0x57a5, 0x57c0, 0x579f, 0x579d, 0x579d, 0x080c, 0x1410, 0x080c, - 0x567a, 0x080c, 0x5d10, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, - 0x00ce, 0x0005, 0x2011, 0x3fe7, 0x080c, 0x560d, 0x7828, 0xa092, - 0x0002, 0x1228, 0x8000, 0x782a, 0x080c, 0x4034, 0x0c88, 0x080c, - 0x3fe7, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c40, - 0x080c, 0x567a, 0x3c00, 0x0006, 0x2011, 0x0209, 0x20e1, 0x4000, - 0x2214, 0x000e, 0x20e0, 0x82ff, 0x0178, 0x62c0, 0x82ff, 0x1160, - 0x782b, 0x0000, 0x7824, 0xa065, 0x090c, 0x1410, 0x2009, 0x0013, - 0x080c, 0x6d3f, 0x00ce, 0x0005, 0x3900, 0xa082, 0x8eca, 0x1210, - 0x080c, 0x6c01, 0x00c6, 0x7824, 0xa065, 0x090c, 0x1410, 0x7804, - 0xa086, 0x0004, 0x0904, 0x5853, 0x7828, 0xa092, 0x2710, 0x1230, - 0x8000, 0x782a, 0x00ce, 0x080c, 0x66ea, 0x0c20, 0x6104, 0xa186, - 0x0003, 0x1188, 0x00e6, 0x2071, 0x8b00, 0x70d4, 0x00ee, 0xd08c, - 0x0150, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x8b00, 0x080c, - 0x403d, 0x00ee, 0x00ce, 0x080c, 0x8a4b, 0x2009, 0x0014, 0x080c, - 0x6d3f, 0x00ce, 0x0838, 0x2001, 0x8dc6, 0x2003, 0x0000, 0x62c0, - 0x82ff, 0x1160, 0x782b, 0x0000, 0x7824, 0xa065, 0x090c, 0x1410, - 0x2009, 0x0013, 0x080c, 0x6d92, 0x00ce, 0x0005, 0x00c6, 0x00d6, - 0x3900, 0xa082, 0x8eca, 0x1210, 0x080c, 0x6c01, 0x7824, 0xa005, - 0x090c, 0x1410, 0x781c, 0xa06d, 0x090c, 0x1410, 0x6800, 0xc0dc, - 0x6802, 0x7924, 0x2160, 0x080c, 0x6d18, 0x693c, 0x81ff, 0x090c, - 0x1410, 0x8109, 0x693e, 0x6854, 0xa015, 0x0110, 0x7a1e, 0x0010, - 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, - 0x080c, 0x5d10, 0x0888, 0x6104, 0xa186, 0x0002, 0x0128, 0xa186, - 0x0004, 0x0110, 0x0804, 0x57ec, 0x7808, 0xac06, 0x0904, 0x57ec, - 0x080c, 0x5c37, 0x080c, 0x58e2, 0x00ce, 0x080c, 0x5d10, 0x0804, - 0x57da, 0x00c6, 0x6027, 0x0002, 0x62c8, 0x60c4, 0xa205, 0x1170, - 0x793c, 0xa1e5, 0x0000, 0x0120, 0x2009, 0x0049, 0x080c, 0x6d3f, - 0x2011, 0x8dc9, 0x2013, 0x0000, 0x00ce, 0x0005, 0x3908, 0xa192, - 0x8eca, 0x1210, 0x080c, 0x6c01, 0x793c, 0x81ff, 0x0d88, 0x793c, - 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x1138, 0x6014, 0xa084, - 0x0184, 0xa085, 0x0012, 0x6016, 0x0c38, 0x6014, 0xa084, 0x0184, - 0xa085, 0x0016, 0x6016, 0x0c00, 0x0006, 0x0016, 0x00c6, 0x0126, - 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x8daa, 0x6020, - 0x8000, 0x6022, 0x6010, 0xa005, 0x0148, 0xa080, 0x0003, 0x2102, - 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, - 0x0cc0, 0x00d6, 0x2069, 0x8daa, 0x6000, 0xd0d4, 0x0168, 0x6820, - 0x8000, 0x6822, 0xa086, 0x0001, 0x1110, 0x2c00, 0x681e, 0x6804, - 0xa084, 0x0007, 0x0804, 0x5d16, 0xc0d5, 0x6002, 0x6818, 0xa005, - 0x0158, 0x6056, 0x605b, 0x0000, 0x0006, 0x2c00, 0x681a, 0x00de, - 0x685a, 0x2069, 0x8daa, 0x0c18, 0x6056, 0x605a, 0x2c00, 0x681a, - 0x681e, 0x08e8, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x600f, 0x0000, 0x2c08, 0x2061, 0x8daa, 0x6020, 0x8000, 0x6022, - 0x6008, 0xa005, 0x0148, 0xa080, 0x0003, 0x2102, 0x610a, 0x012e, - 0x00ce, 0x001e, 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, - 0x600f, 0x0000, 0x2c08, 0x2061, 0x8daa, 0x6034, 0xa005, 0x0130, - 0xa080, 0x0003, 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, - 0x0cd8, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, - 0x0006, 0x0126, 0x2071, 0x8daa, 0x7638, 0x2660, 0x2678, 0x2091, - 0x8000, 0x8cff, 0x0904, 0x597a, 0x6018, 0xa080, 0x0028, 0x2004, - 0xa206, 0x1904, 0x5975, 0x88ff, 0x0120, 0x6020, 0xa106, 0x1904, - 0x5975, 0x703c, 0xac06, 0x1170, 0x0036, 0x2019, 0x0001, 0x080c, - 0x68e5, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043, 0x0000, 0x7047, - 0x0000, 0x003e, 0x7038, 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, - 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, - 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, - 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0x7b8f, 0x0188, 0x6010, - 0x2068, 0x601c, 0xa086, 0x0003, 0x11f8, 0x6837, 0x0103, 0x6b4a, - 0x6847, 0x0000, 0x080c, 0x7dc8, 0x080c, 0x46a1, 0x080c, 0x7d30, - 0x080c, 0x7d3c, 0x00ce, 0x0804, 0x5921, 0x2c78, 0x600c, 0x2060, - 0x0804, 0x5921, 0x012e, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, - 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x19e8, - 0x080c, 0x8942, 0x0c28, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x00f6, - 0x2031, 0x0000, 0x0126, 0x2091, 0x8000, 0x2079, 0x8daa, 0x7838, - 0xa065, 0x0558, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0xac06, - 0x1170, 0x0036, 0x2019, 0x0001, 0x080c, 0x68e5, 0x7833, 0x0000, - 0x783f, 0x0000, 0x7843, 0x0000, 0x7847, 0x0000, 0x003e, 0x080c, - 0x7b8f, 0x0178, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003, 0x11b0, - 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x46a1, 0x080c, - 0x7d30, 0x080c, 0x7d3c, 0x000e, 0x0898, 0x7e3a, 0x7e36, 0x012e, - 0x00fe, 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005, 0x601c, 0xa086, - 0x0006, 0x1d30, 0x080c, 0x8942, 0x0c60, 0x0016, 0x0026, 0x0086, - 0x2041, 0x0000, 0x0099, 0x080c, 0x5a81, 0x008e, 0x002e, 0x001e, - 0x0005, 0x00f6, 0x0126, 0x2079, 0x8daa, 0x2091, 0x8000, 0x080c, - 0x5b0c, 0x080c, 0x5b6c, 0x012e, 0x00fe, 0x0005, 0x00f6, 0x00e6, - 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, - 0x2071, 0x8daa, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x5a71, - 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904, 0x5a6c, 0x88ff, - 0x0120, 0x6020, 0xa106, 0x1904, 0x5a6c, 0x7024, 0xac06, 0x1538, - 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c, 0x567a, 0x080c, - 0x66f7, 0x68c3, 0x0000, 0x080c, 0x6b23, 0x7027, 0x0000, 0x0036, - 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, - 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, - 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x04a8, 0x7014, - 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140, 0x2c00, - 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, - 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, - 0x0000, 0x6010, 0x2068, 0x080c, 0x7b8f, 0x0178, 0x601c, 0xa086, - 0x0003, 0x1500, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, - 0x7dc8, 0x080c, 0x46a1, 0x080c, 0x7d30, 0x080c, 0x7d3c, 0x080c, - 0x6a05, 0x00ce, 0x0804, 0x59fd, 0x2c78, 0x600c, 0x2060, 0x0804, - 0x59fd, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, - 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x19e0, 0x080c, 0x8942, - 0x0c20, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0xa280, 0x8c34, - 0x2004, 0xa065, 0x0904, 0x5b08, 0x00f6, 0x00e6, 0x00d6, 0x0066, - 0x2071, 0x8daa, 0x6654, 0x7018, 0xac06, 0x1108, 0x761a, 0x701c, - 0xac06, 0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, - 0x6058, 0xa07d, 0x0108, 0x7e56, 0xa6ed, 0x0000, 0x0110, 0x2f00, - 0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, - 0x6002, 0x080c, 0x4290, 0x0904, 0x5b04, 0x7624, 0x86ff, 0x05e8, - 0xa680, 0x0004, 0x2004, 0xad06, 0x15c0, 0x00d6, 0x2069, 0x0100, - 0x68c0, 0xa005, 0x0548, 0x080c, 0x567a, 0x080c, 0x66f7, 0x68c3, - 0x0000, 0x080c, 0x6b23, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, - 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, - 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, - 0x00de, 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e, 0x2660, - 0x080c, 0x7d3c, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, - 0x0009, 0x630a, 0x00ce, 0x0804, 0x5ab1, 0x8dff, 0x0148, 0x6837, - 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x7dc8, 0x080c, 0x46a1, - 0x080c, 0x6a05, 0x0804, 0x5ab1, 0x006e, 0x00de, 0x00ee, 0x00fe, - 0x012e, 0x000e, 0x00ce, 0x0005, 0x0006, 0x0066, 0x00c6, 0x00d6, - 0x2031, 0x0000, 0x7814, 0xa065, 0x0904, 0x5b5e, 0x600c, 0x0006, - 0x600f, 0x0000, 0x7824, 0xac06, 0x1540, 0x2069, 0x0100, 0x68c0, - 0xa005, 0x01f0, 0x080c, 0x567a, 0x080c, 0x66f7, 0x68c3, 0x0000, - 0x080c, 0x6b23, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, - 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, - 0x6003, 0x0009, 0x630a, 0x2c30, 0x00b0, 0x6010, 0x2068, 0x080c, - 0x7b8f, 0x0168, 0x601c, 0xa086, 0x0003, 0x11b8, 0x6837, 0x0103, - 0x6b4a, 0x6847, 0x0000, 0x080c, 0x46a1, 0x080c, 0x7d30, 0x080c, - 0x7d3c, 0x080c, 0x6a05, 0x000e, 0x0804, 0x5b13, 0x7e16, 0x7e12, - 0x00de, 0x00ce, 0x006e, 0x000e, 0x0005, 0x601c, 0xa086, 0x0006, - 0x1d28, 0x080c, 0x8942, 0x0c58, 0x0006, 0x0066, 0x00c6, 0x00d6, - 0x7818, 0xa065, 0x0904, 0x5bd2, 0x6054, 0x0006, 0x6057, 0x0000, - 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x080c, 0x4290, - 0x0904, 0x5bcf, 0x7e24, 0x86ff, 0x05e8, 0xa680, 0x0004, 0x2004, - 0xad06, 0x15c0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0548, - 0x080c, 0x567a, 0x080c, 0x66f7, 0x68c3, 0x0000, 0x080c, 0x6b23, - 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, - 0x0120, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, - 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x603c, - 0xa005, 0x0110, 0x8001, 0x603e, 0x2660, 0x080c, 0x7d3c, 0x00ce, - 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, - 0x0804, 0x5b7e, 0x8dff, 0x0138, 0x6837, 0x0103, 0x6b4a, 0x6847, - 0x0000, 0x080c, 0x46a1, 0x080c, 0x6a05, 0x0804, 0x5b7e, 0x000e, - 0x0804, 0x5b71, 0x781e, 0x781a, 0x00de, 0x00ce, 0x006e, 0x000e, - 0x0005, 0x00e6, 0x00d6, 0x0066, 0x6000, 0xd0dc, 0x0188, 0x604c, - 0xa06d, 0x0170, 0x6848, 0xa606, 0x1158, 0x2071, 0x8daa, 0x7024, - 0xa035, 0x0130, 0xa080, 0x0004, 0x2004, 0xad06, 0x1108, 0x0021, - 0x006e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100, 0x78c0, - 0xa005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, - 0x04a0, 0x080c, 0x66f7, 0x78c3, 0x0000, 0x080c, 0x6b23, 0x7027, - 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0xa384, 0x1000, 0x0120, - 0x7803, 0x0100, 0x7803, 0x0000, 0x2079, 0x0100, 0x7824, 0xd084, - 0x0110, 0x7827, 0x0001, 0x080c, 0x6b23, 0x003e, 0x080c, 0x4290, - 0x00c6, 0x603c, 0xa005, 0x0110, 0x8001, 0x603e, 0x2660, 0x080c, - 0x6d18, 0x00ce, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, - 0x7dc8, 0x080c, 0x46a1, 0x080c, 0x6a05, 0x00fe, 0x0005, 0x00e6, - 0x00c6, 0x2071, 0x8daa, 0x7004, 0xa084, 0x0007, 0x0002, 0x5c49, - 0x5c4c, 0x5c62, 0x5c7b, 0x5cb4, 0x5c49, 0x5c47, 0x5c47, 0x080c, - 0x1410, 0x00ce, 0x00ee, 0x0005, 0x7024, 0xa065, 0x0148, 0x7020, - 0x8001, 0x7022, 0x600c, 0xa015, 0x0150, 0x7216, 0x600f, 0x0000, - 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005, 0x7216, - 0x7212, 0x0cb0, 0x6018, 0x2060, 0x080c, 0x4290, 0x6000, 0xc0dc, - 0x6002, 0x7020, 0x8001, 0x7022, 0x0120, 0x6054, 0xa015, 0x0140, - 0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005, - 0x7218, 0x721e, 0x0cb0, 0x7024, 0xa065, 0x0598, 0x700c, 0xac06, - 0x1160, 0x080c, 0x6a05, 0x600c, 0xa015, 0x0120, 0x720e, 0x600f, - 0x0000, 0x0428, 0x720e, 0x720a, 0x0410, 0x7014, 0xac06, 0x1160, - 0x080c, 0x6a05, 0x600c, 0xa015, 0x0120, 0x7216, 0x600f, 0x0000, - 0x00b0, 0x7216, 0x7212, 0x0098, 0x6018, 0x2060, 0x080c, 0x4290, - 0x6000, 0xc0dc, 0x6002, 0x080c, 0x6a05, 0x701c, 0xa065, 0x0138, - 0x6054, 0xa015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, - 0x0000, 0x00ce, 0x00ee, 0x0005, 0x7024, 0xa065, 0x0140, 0x080c, - 0x6a05, 0x600c, 0xa015, 0x0150, 0x720e, 0x600f, 0x0000, 0x080c, - 0x6b23, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x0005, 0x720e, 0x720a, - 0x0cb0, 0x00d6, 0x2069, 0x8daa, 0x6830, 0xa084, 0x0003, 0x0002, - 0x5cd6, 0x5cd8, 0x5cf8, 0x5cd4, 0x080c, 0x1410, 0x00de, 0x0005, - 0x00c6, 0x6840, 0xa086, 0x0001, 0x0198, 0x683c, 0xa065, 0x0130, - 0x600c, 0xa015, 0x0150, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, - 0x683f, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836, 0x0cb0, - 0x6843, 0x0000, 0x6838, 0xa065, 0x0d88, 0x6003, 0x0003, 0x0c70, - 0x00c6, 0x6843, 0x0000, 0x6847, 0x0000, 0x683c, 0xa065, 0x0168, - 0x600c, 0xa015, 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, - 0x0020, 0x683f, 0x0000, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, - 0x00d6, 0x2069, 0x8daa, 0x6804, 0xa084, 0x0007, 0x0002, 0x5d21, - 0x5db3, 0x5db3, 0x5db3, 0x5db3, 0x5db5, 0x5d1f, 0x5d1f, 0x080c, - 0x1410, 0x6820, 0xa005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, - 0xa065, 0x0150, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, - 0x5df4, 0x00ce, 0x00de, 0x0005, 0x6814, 0xa065, 0x0150, 0x6807, - 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x5df4, 0x00ce, 0x00de, - 0x0005, 0x00e6, 0x0036, 0x6a1c, 0xa2f5, 0x0000, 0x0904, 0x5daf, - 0x704c, 0xa00d, 0x0118, 0x7088, 0xa005, 0x01a0, 0x7054, 0xa075, - 0x0120, 0xa20e, 0x0904, 0x5daf, 0x0028, 0x6818, 0xa20e, 0x0904, - 0x5daf, 0x2070, 0x704c, 0xa00d, 0x0d88, 0x7088, 0xa005, 0x1d70, - 0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x1e40, 0x080c, 0x6cef, - 0x0904, 0x5daf, 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a, 0xa180, - 0x0015, 0x2004, 0xa08a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, - 0x801b, 0x831b, 0xa318, 0x6316, 0x003e, 0x00f6, 0x2c78, 0x71a0, - 0x2001, 0x8b32, 0x2004, 0xd0ac, 0x1110, 0xd1bc, 0x0150, 0x7100, - 0xd1f4, 0x0120, 0x7114, 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, - 0x0028, 0xa1e0, 0x263d, 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, - 0x619a, 0x080c, 0x62f1, 0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, - 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f, 0x0003, 0x7803, 0x0001, - 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00ce, 0x00de, 0x0005, 0x003e, - 0x00ee, 0x00ce, 0x0cd0, 0x00de, 0x0005, 0x00c6, 0x680c, 0xa065, - 0x0130, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x04a9, 0x00ce, - 0x00de, 0x0005, 0x00f6, 0x00d6, 0x2069, 0x8daa, 0x6830, 0xa086, - 0x0000, 0x1198, 0x6838, 0xa07d, 0x0180, 0x6833, 0x0001, 0x683e, - 0x6847, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, - 0x1c40, 0x1130, 0x012e, 0x080c, 0x65ca, 0x00de, 0x00fe, 0x0005, - 0x012e, 0xe000, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, - 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, - 0x0c60, 0x683a, 0x6836, 0x0cc0, 0x601c, 0xa084, 0x000f, 0x000b, - 0x0005, 0x5e02, 0x5e07, 0x618e, 0x62ae, 0x5e07, 0x618e, 0x62ae, - 0x5e02, 0x5e07, 0x080c, 0x5c37, 0x080c, 0x5d10, 0x0005, 0x0156, - 0x0136, 0x0146, 0x00c6, 0x00f6, 0x6004, 0xa08a, 0x0040, 0x1a0c, - 0x1410, 0x6118, 0x2178, 0x79a0, 0x2011, 0x8b32, 0x2214, 0xd2ac, - 0x1110, 0xd1bc, 0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, - 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1f8, 0x263d, 0x2f0d, - 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0x0033, 0x00fe, - 0x00ce, 0x014e, 0x013e, 0x015e, 0x0005, 0x5e7d, 0x5eb5, 0x5ecf, - 0x5f82, 0x5fad, 0x5fb5, 0x5fd6, 0x5fe7, 0x5ff8, 0x6000, 0x6011, - 0x6000, 0x6056, 0x5fe7, 0x6077, 0x607f, 0x5ff8, 0x607f, 0x6090, - 0x5e74, 0x5e74, 0x5e74, 0x5e74, 0x5e74, 0x5e74, 0x5e74, 0x5e74, - 0x5e74, 0x5e74, 0x5e74, 0x5e74, 0x67ad, 0x67c2, 0x67e5, 0x6809, - 0x5fd6, 0x5e74, 0x5fd6, 0x6000, 0x5e74, 0x5ecf, 0x5f82, 0x5e74, - 0x6c1e, 0x6000, 0x5e74, 0x6c3e, 0x6000, 0x5e74, 0x5ff8, 0x5e76, - 0x5e74, 0x5e74, 0x5e74, 0x5e74, 0x5e74, 0x5e74, 0x5e74, 0x5e74, - 0x5e74, 0x5e74, 0x681e, 0x6c63, 0x080c, 0x1410, 0x2001, 0x8b14, - 0x2004, 0x609a, 0x080c, 0x66e4, 0x0005, 0x20a1, 0x020b, 0x080c, - 0x60a5, 0x20a3, 0x5200, 0x20a3, 0x0000, 0x00d6, 0x2069, 0x8b51, - 0x6804, 0xd084, 0x0150, 0x6828, 0x20a3, 0x0000, 0x0016, 0x080c, - 0x22fd, 0x21a2, 0x001e, 0x00de, 0x0028, 0x00de, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x8b05, 0x53a6, 0x20a9, - 0x0004, 0x2099, 0x8b01, 0x53a6, 0x20a3, 0x0000, 0x2001, 0x8b14, - 0x2004, 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x001c, 0x080c, 0x66e4, 0x0005, 0x20a1, 0x020b, 0x080c, - 0x60a5, 0x20a3, 0x0500, 0x20a3, 0x0000, 0x2001, 0x8b1b, 0x2004, - 0x20a2, 0x2001, 0x8b1c, 0x2004, 0x20a2, 0x20a9, 0x0004, 0x2099, - 0x8b05, 0x53a6, 0x60c3, 0x0010, 0x080c, 0x66e4, 0x0005, 0x20a1, - 0x020b, 0x080c, 0x60a5, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, - 0x007e, 0x1130, 0x20a3, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0010, - 0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004, - 0xa086, 0x007e, 0x1904, 0x5f44, 0x2001, 0x8b32, 0x2004, 0xd0a4, - 0x01c8, 0x2099, 0x8d8c, 0x33a6, 0x9398, 0x20a3, 0x0000, 0x9398, - 0x3304, 0xa084, 0x2000, 0x20a2, 0x9398, 0x33a6, 0x9398, 0x20a3, - 0x0000, 0x9398, 0x2001, 0x2710, 0x20a2, 0x9398, 0x33a6, 0x9398, - 0x33a6, 0x00d0, 0x2099, 0x8d8c, 0x33a6, 0x9398, 0x33a6, 0x9398, - 0x3304, 0x080c, 0x4c42, 0x1118, 0xa084, 0x37ff, 0x0010, 0xa084, - 0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x8b05, - 0x53a6, 0x20a9, 0x0004, 0x2099, 0x8b01, 0x53a6, 0x20a9, 0x0008, - 0x20a3, 0x0000, 0x1f04, 0x5f30, 0x20a9, 0x0008, 0x20a3, 0x0000, - 0x1f04, 0x5f36, 0x2099, 0x8d94, 0x33a6, 0x20a9, 0x0007, 0x20a3, - 0x0000, 0x1f04, 0x5f3f, 0x0468, 0x2001, 0x8b32, 0x2004, 0xd0a4, - 0x0140, 0x2001, 0x8d8d, 0x2004, 0x60e3, 0x0000, 0x080c, 0x233e, - 0x60e2, 0x2099, 0x8d8c, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0004, - 0x2099, 0x8b05, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x8b01, 0x53a6, - 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x5f62, 0x20a9, 0x0008, - 0x20a3, 0x0000, 0x1f04, 0x5f68, 0x2099, 0x8d94, 0x20a9, 0x0008, - 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x1f04, 0x5f73, 0x20a9, - 0x000a, 0x20a3, 0x0000, 0x1f04, 0x5f79, 0x60c3, 0x0074, 0x080c, - 0x66e4, 0x0005, 0x20a1, 0x020b, 0x080c, 0x60a5, 0x20a3, 0x2010, - 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x00f6, 0x2079, 0x8b51, 0x7904, - 0x00fe, 0xd1ac, 0x1110, 0xa085, 0x0020, 0xd1a4, 0x0110, 0xa085, - 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x60c3, 0x0014, 0x080c, 0x66e4, 0x0005, 0x20a1, 0x020b, 0x080c, - 0x60a5, 0x20a3, 0x5000, 0x0804, 0x5ee2, 0x20a1, 0x020b, 0x080c, - 0x60a5, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x60c3, 0x0014, 0x080c, 0x66e4, 0x0005, 0x20a1, 0x020b, - 0x080c, 0x612f, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0004, 0x080c, 0x66e4, 0x0005, 0x20a1, - 0x020b, 0x080c, 0x612f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, - 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x080c, 0x66e4, 0x0005, - 0x20a1, 0x020b, 0x080c, 0x612f, 0x20a3, 0x0200, 0x0804, 0x5ee2, - 0x20a1, 0x020b, 0x080c, 0x612f, 0x20a3, 0x0100, 0x20a3, 0x0000, - 0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x66e4, - 0x0005, 0x00d6, 0x20a1, 0x020b, 0x080c, 0x612f, 0x20a3, 0x0210, - 0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086, - 0x0014, 0x1178, 0x6998, 0xa184, 0xc000, 0x1140, 0xd1ec, 0x0118, - 0x20a3, 0x2100, 0x0040, 0x20a3, 0x0100, 0x0028, 0x20a3, 0x0400, - 0x0010, 0x20a3, 0x0700, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, - 0x20a2, 0x00f6, 0x2079, 0x8b51, 0x7904, 0x00fe, 0xd1ac, 0x1110, - 0xa085, 0x0020, 0xd1a4, 0x0110, 0xa085, 0x0010, 0x2009, 0x8b73, - 0x210c, 0xd184, 0x1110, 0xa085, 0x0002, 0x20a2, 0x20a2, 0x20a2, - 0x60c3, 0x0014, 0x080c, 0x66e4, 0x00de, 0x0005, 0x20a1, 0x020b, - 0x080c, 0x612f, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, - 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x60c3, 0x0014, 0x080c, 0x66e4, 0x0005, 0x20a1, - 0x020b, 0x080c, 0x612f, 0x20a3, 0x0200, 0x0804, 0x5e83, 0x20a1, - 0x020b, 0x080c, 0x612f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, - 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x080c, 0x66e4, 0x0005, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1, 0x020b, 0x080c, 0x612f, - 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, - 0x60c3, 0x0008, 0x080c, 0x66e4, 0x0005, 0x0026, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, - 0x1198, 0x20a3, 0x22ff, 0x20a3, 0xfffe, 0x20a3, 0x0000, 0x2011, - 0x8b14, 0x2214, 0x2001, 0x8d9c, 0x2004, 0xa005, 0x0118, 0x2011, - 0x8b1c, 0x2214, 0x22a2, 0x04d0, 0xa286, 0x007f, 0x1130, 0x00d6, - 0x20a3, 0x22ff, 0x20a3, 0xfffd, 0x00c8, 0x2001, 0x8b32, 0x2004, - 0xd0ac, 0x1110, 0xd2bc, 0x01c8, 0xa286, 0x0080, 0x00d6, 0x1128, - 0x20a3, 0x22ff, 0x20a3, 0xfffc, 0x0048, 0xa2e8, 0x8c34, 0x2d6c, - 0x6810, 0xa085, 0x2200, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x8b1b, - 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa2e8, 0x8c34, - 0x2d6c, 0x6810, 0xa085, 0x2200, 0x20a2, 0x6814, 0x20a2, 0x00de, - 0x20a3, 0x0000, 0x2011, 0x8b14, 0x2214, 0x22a2, 0x20a3, 0x0129, - 0x20a3, 0x0000, 0x080c, 0x66d3, 0x22a2, 0x20a3, 0x0000, 0x2fa2, - 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, - 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011, - 0xfffc, 0x22a2, 0x00d6, 0x2069, 0x8b1b, 0x2da6, 0x8d68, 0x2da6, - 0x00de, 0x20a3, 0x2029, 0x20a3, 0x0000, 0x08e0, 0x20a3, 0x0100, - 0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x0005, 0x0026, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, - 0x2011, 0x8b32, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x02e0, - 0x00d6, 0xa0e8, 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x2300, 0x20a2, - 0x6814, 0x20a2, 0x6810, 0xa005, 0x1140, 0x6814, 0xa005, 0x1128, - 0x20a3, 0x00ff, 0x20a3, 0xfffe, 0x0028, 0x2069, 0x8b1b, 0x2da6, - 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0x8c34, 0x2d6c, - 0x6810, 0xa085, 0x2300, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, - 0x0000, 0x2011, 0x8b14, 0x2214, 0x22a2, 0x20a3, 0x0198, 0x20a3, - 0x0000, 0x080c, 0x66d3, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, - 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x080c, - 0x66d3, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x7810, 0x20a2, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00c6, 0x00f6, - 0x6004, 0xa08a, 0x0085, 0x0a0c, 0x1410, 0xa08a, 0x008c, 0x1a0c, - 0x1410, 0x6118, 0x2178, 0x79a0, 0x2011, 0x8b32, 0x2214, 0xd2ac, - 0x1110, 0xd1bc, 0x0150, 0x7900, 0xd1f4, 0x0120, 0x7914, 0xa18c, - 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1f8, 0x263d, 0x2f0d, - 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082, 0x0085, - 0x001b, 0x00fe, 0x00ce, 0x0005, 0x61c5, 0x61cf, 0x61ea, 0x61c3, - 0x61c3, 0x61c3, 0x61c5, 0x080c, 0x1410, 0x0146, 0x20a1, 0x020b, - 0x04a1, 0x60c3, 0x0000, 0x080c, 0x66e4, 0x014e, 0x0005, 0x0146, - 0x20a1, 0x020b, 0x080c, 0x6236, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x7808, 0x20a2, 0x7810, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0xffff, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c, 0x080c, 0x66e4, - 0x014e, 0x0005, 0x0146, 0x20a1, 0x020b, 0x080c, 0x6275, 0x20a3, - 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, - 0x0004, 0x080c, 0x66e4, 0x014e, 0x0005, 0x0026, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0x8b32, - 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, - 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, - 0x2069, 0x8b1b, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, - 0xa0e8, 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, - 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0x8b14, 0x2214, 0x22a2, - 0x20a3, 0x0009, 0x20a3, 0x0000, 0x0804, 0x6102, 0x0026, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, - 0x8b32, 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, - 0xa0e8, 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, - 0x20a2, 0x2069, 0x8b1b, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, - 0x00d6, 0xa0e8, 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, - 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0x8b14, 0x2214, - 0x22a2, 0x080c, 0x4c42, 0x1118, 0x20a3, 0x0099, 0x0010, 0x20a3, - 0x00d1, 0x20a3, 0x0000, 0x0804, 0x617f, 0x0026, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0x8b32, - 0x2214, 0xd2ac, 0x1118, 0xa092, 0x007e, 0x0288, 0x00d6, 0xa0e8, - 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2, - 0x2069, 0x8b1b, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, - 0xa0e8, 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, - 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0x8b14, 0x2214, 0x22a2, - 0x20a3, 0x0099, 0x20a3, 0x0000, 0x0804, 0x617f, 0x00c6, 0x00f6, - 0x2c78, 0x7804, 0xa08a, 0x0040, 0x0a0c, 0x1410, 0xa08a, 0x0053, - 0x1a0c, 0x1410, 0x7918, 0x2160, 0x61a0, 0x2011, 0x8b32, 0x2214, - 0xd2ac, 0x1110, 0xd1bc, 0x0150, 0x6100, 0xd1f4, 0x0120, 0x6114, - 0xa18c, 0x00ff, 0x0040, 0x2009, 0x0000, 0x0028, 0xa1e0, 0x263d, - 0x2c0d, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, - 0x001b, 0x00fe, 0x00ce, 0x0005, 0x62f1, 0x63f3, 0x6390, 0x653f, - 0x62ef, 0x62ef, 0x62ef, 0x62ef, 0x62ef, 0x62ef, 0x62ef, 0x69be, - 0x69ce, 0x69de, 0x69ee, 0x62ef, 0x62ef, 0x62ef, 0x69ad, 0x080c, - 0x1410, 0x00d6, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x6347, - 0x7910, 0x2168, 0x6948, 0x7922, 0x21a2, 0xa016, 0x22a2, 0x22a2, - 0x22a2, 0x694c, 0xa184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, - 0xd184, 0x0118, 0x2001, 0x0004, 0x0018, 0xa084, 0x0006, 0x8004, - 0x20a2, 0xd1ac, 0x0118, 0x20a3, 0x0002, 0x0048, 0xd1b4, 0x0118, - 0x20a3, 0x0001, 0x0020, 0x20a3, 0x0000, 0x2230, 0x0010, 0x6a80, - 0x6e7c, 0x20a9, 0x0008, 0x0136, 0xad88, 0x0017, 0x2198, 0x20a1, - 0x021b, 0x53a6, 0x013e, 0x20a1, 0x020b, 0x22a2, 0x26a2, 0x60c3, - 0x0020, 0x20e1, 0x9080, 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, - 0x6016, 0x2001, 0x8dc6, 0x2003, 0x07d0, 0x2001, 0x8dc5, 0x2003, - 0x0009, 0x080c, 0x166c, 0x014e, 0x015e, 0x00de, 0x0005, 0x20e1, - 0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, - 0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028, 0x2004, - 0x2019, 0x8b32, 0x231c, 0xd3ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, - 0xa0e8, 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, 0x6814, - 0x20a2, 0x2069, 0x8b1b, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, - 0x00d6, 0xa0e8, 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x0600, 0x20a2, - 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2009, 0x8b14, 0x210c, - 0x21a2, 0x20a3, 0x0829, 0x20a3, 0x0000, 0x22a2, 0x20a3, 0x0000, - 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x0005, - 0x00d6, 0x0156, 0x0136, 0x0146, 0x20a1, 0x020b, 0x00c1, 0x7810, - 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, - 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, - 0x080c, 0x66e4, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0026, - 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, - 0x2011, 0x8b32, 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, - 0xa0e8, 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, - 0x20a2, 0x2069, 0x8b1b, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, - 0x00d6, 0xa0e8, 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2, - 0x6814, 0x20a2, 0x00de, 0x20a3, 0x0000, 0x2011, 0x8b14, 0x2214, - 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x080c, 0x66d3, 0x22a2, - 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x002e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x20a1, - 0x020b, 0x080c, 0x64fb, 0x7810, 0x2068, 0xa016, 0x22a2, 0x22a2, - 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x1130, 0x7810, - 0xa084, 0x0700, 0x8007, 0x0043, 0x0010, 0xa006, 0x002b, 0x014e, - 0x013e, 0x015e, 0x00de, 0x0005, 0x641e, 0x649e, 0x64a1, 0x64c4, - 0x64d1, 0x64e6, 0x64e9, 0x641c, 0x080c, 0x1410, 0x0016, 0x0036, - 0x694c, 0xa18c, 0x0003, 0xa186, 0x0000, 0x1150, 0x6b78, 0x23a2, - 0x6868, 0x20a2, 0x6864, 0x20a2, 0x003e, 0x001e, 0x0804, 0x64c8, - 0xa186, 0x0001, 0x1904, 0x6499, 0x6b78, 0x23a2, 0x6868, 0x20a2, - 0x6864, 0x20a2, 0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, - 0x2009, 0x0018, 0xa384, 0x0300, 0x0904, 0x6498, 0xd3c4, 0x0110, - 0x687c, 0xa108, 0xd3cc, 0x0110, 0x6874, 0xa108, 0x0156, 0x20a9, - 0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000, 0x1f04, - 0x6453, 0x015e, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003, 0x05c0, - 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x0006, 0x7818, - 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0x8c34, - 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, - 0x8b1b, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, - 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, - 0x00de, 0x20a3, 0x0000, 0x2011, 0x8b14, 0x2214, 0x22a2, 0x000e, - 0x20a3, 0x0898, 0x20a2, 0x080c, 0x66d3, 0x22a2, 0x20a3, 0x0000, - 0x61c2, 0x003e, 0x001e, 0x080c, 0x66e4, 0x0005, 0x20a3, 0x0008, - 0x0428, 0x20a3, 0x0302, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, - 0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, - 0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, - 0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, - 0x0032, 0x080c, 0x66e4, 0x0005, 0x20a3, 0x0028, 0x22a2, 0x22a2, - 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x080c, 0x66e4, - 0x0005, 0x20a3, 0x0100, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, - 0x20a3, 0x0008, 0x22a2, 0x7824, 0xa084, 0x00ff, 0x20a2, 0x22a2, - 0x22a2, 0x60c3, 0x0020, 0x080c, 0x66e4, 0x0005, 0x20a3, 0x0008, - 0x08e8, 0x0036, 0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, - 0x8001, 0x1118, 0x22a2, 0x003e, 0x0888, 0x20a3, 0x0800, 0x22a2, - 0x20a2, 0x003e, 0x0868, 0x0026, 0x20e1, 0x9080, 0x20e1, 0x4000, - 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0x8b32, 0x2214, 0xd2ac, - 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0x8c34, 0x2d6c, 0x6810, - 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x8b1b, 0x2da6, - 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, 0x8c34, 0x2d6c, - 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2, 0x00de, 0x20a3, - 0x0000, 0x2011, 0x8b14, 0x2214, 0x22a2, 0x20a3, 0x0898, 0x20a3, - 0x0000, 0x080c, 0x66d3, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, - 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x002e, 0x0005, 0x00d6, - 0x0156, 0x0136, 0x0146, 0x0016, 0x0036, 0x7810, 0xa084, 0x0700, - 0x8007, 0x003b, 0x003e, 0x001e, 0x014e, 0x013e, 0x015e, 0x00de, - 0x0005, 0x6559, 0x6559, 0x655b, 0x6559, 0x6559, 0x6559, 0x657d, - 0x6559, 0x080c, 0x1410, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, - 0x7912, 0x20a1, 0x020b, 0x2009, 0x0003, 0x00f9, 0x00d6, 0x2069, - 0x8b51, 0x6804, 0xd0bc, 0x0130, 0x682c, 0xa084, 0x00ff, 0x8007, - 0x20a2, 0x0010, 0x20a3, 0x3f00, 0x00de, 0x22a2, 0x22a2, 0x22a2, - 0x60c3, 0x0001, 0x080c, 0x66e4, 0x0005, 0x20a1, 0x020b, 0x2009, - 0x0003, 0x0019, 0x20a3, 0x7f00, 0x0c80, 0x0026, 0x20e1, 0x9080, - 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0x2011, 0x8b32, - 0x2214, 0xd2ac, 0x1110, 0xd0bc, 0x0188, 0x00d6, 0xa0e8, 0x8c34, - 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069, - 0x8b1b, 0x2da6, 0x8d68, 0x2da6, 0x00de, 0x0088, 0x00d6, 0xa0e8, - 0x8c34, 0x2d6c, 0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, - 0x00de, 0x20a3, 0x0000, 0x2011, 0x8b14, 0x2214, 0x22a2, 0x20a3, - 0x0888, 0xa18d, 0x0008, 0x21a2, 0x080c, 0x66d3, 0x22a2, 0x20a3, - 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x002e, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, - 0x2061, 0x0100, 0x2071, 0x8b00, 0x7150, 0x7818, 0x2068, 0x68a0, - 0x2028, 0x76c8, 0xd6ac, 0x1130, 0xd0bc, 0x1120, 0x6910, 0x6a14, - 0x7450, 0x0020, 0x6910, 0x6a14, 0x736c, 0x7470, 0x781c, 0xa086, - 0x0006, 0x0904, 0x6640, 0x70c8, 0xd0ac, 0x1110, 0xd5bc, 0x0138, - 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038, 0xa185, - 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073, 0x0809, - 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, - 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, - 0x2070, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, - 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, - 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294, 0x00ff, - 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, 0x6cb4, 0x2009, 0x07d0, - 0x60c4, 0xa084, 0xfff0, 0xa005, 0x0110, 0x2009, 0x1b58, 0x080c, - 0x567f, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, - 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0904, - 0x668e, 0x2001, 0x8b32, 0x2004, 0xd0ac, 0x1110, 0xd5bc, 0x0138, - 0xa185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x0038, 0xa185, - 0x0100, 0x6062, 0x6266, 0x606b, 0x0000, 0x646e, 0x6073, 0x0880, - 0x6077, 0x0008, 0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, - 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7060, - 0x608a, 0x705c, 0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca, 0x686c, - 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, - 0x6a00, 0xd2f4, 0x0120, 0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, - 0x0000, 0x629e, 0x080c, 0x6cb1, 0x0804, 0x662e, 0x2001, 0x8b32, - 0x2004, 0xd0ac, 0x1110, 0xd5bc, 0x0138, 0xa185, 0x0700, 0x6062, - 0x6266, 0x636a, 0x646e, 0x0038, 0xa185, 0x0700, 0x6062, 0x6266, - 0x606b, 0x0000, 0x646e, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, - 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, - 0x2f00, 0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, - 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60af, 0x95d5, - 0x60d7, 0x0000, 0xa582, 0x0080, 0x0248, 0x6a00, 0xd2f4, 0x0120, - 0x6a14, 0xa294, 0x00ff, 0x0010, 0x2011, 0x0000, 0x629e, 0x080c, - 0x6cb4, 0x0804, 0x662e, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, - 0xa294, 0x00ff, 0x2202, 0x8217, 0x0005, 0x00d6, 0x2069, 0x8daa, - 0x6843, 0x0001, 0x00de, 0x0005, 0x20e1, 0x9080, 0x60a3, 0x0056, - 0x60a7, 0x9575, 0x0019, 0x080c, 0x5671, 0x0005, 0x0006, 0x6014, - 0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x000e, 0x0005, 0x0006, - 0x00c6, 0x2061, 0x0100, 0x6014, 0xa084, 0x0004, 0xa085, 0x0008, - 0x6016, 0x00ce, 0x000e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, - 0x080c, 0x567a, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x4c42, - 0x1128, 0x0c29, 0x080c, 0x4cbf, 0x0150, 0x0438, 0x6904, 0xa194, - 0x4000, 0x0540, 0x08e1, 0x6803, 0x1000, 0x6803, 0x0000, 0x00c6, - 0x2061, 0x8daa, 0x6128, 0xa192, 0x0002, 0x1258, 0x8108, 0x612a, - 0x6124, 0x00ce, 0x81ff, 0x0188, 0x080c, 0x5671, 0x080c, 0x66ee, - 0x0060, 0x6124, 0xa1e5, 0x0000, 0x0130, 0x080c, 0x8a4b, 0x2009, - 0x0014, 0x080c, 0x6d3f, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, - 0x00ce, 0x0005, 0x080c, 0x403d, 0x0cc0, 0x00c6, 0x00d6, 0x00e6, - 0x0016, 0x0026, 0x080c, 0x5687, 0x2071, 0x8daa, 0x713c, 0x81ff, - 0x0530, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x4c42, 0x1148, - 0x0036, 0x2019, 0x0001, 0x080c, 0x68e5, 0x003e, 0x080c, 0x4cbf, - 0x00b0, 0x6904, 0xa194, 0x4000, 0x01c0, 0x6803, 0x1000, 0x6803, - 0x0000, 0x0036, 0x2019, 0x0001, 0x080c, 0x68e5, 0x003e, 0x713c, - 0x2160, 0x080c, 0x8a4b, 0x2009, 0x004a, 0x080c, 0x6d3f, 0x002e, - 0x001e, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0c58, 0x00e6, 0x00d6, - 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, - 0x6018, 0x2068, 0x6ca0, 0x2071, 0x8daa, 0x7018, 0x2068, 0x8dff, - 0x0198, 0x68a0, 0xa406, 0x0118, 0x6854, 0x2068, 0x0cc0, 0x6010, - 0x2060, 0x643c, 0x6540, 0x6e48, 0x2d60, 0x080c, 0x4458, 0x0120, - 0x080c, 0x6a05, 0xa085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, - 0x006e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x0156, 0x0146, 0x20a1, - 0x020b, 0x080c, 0x60a5, 0x20a3, 0x0f00, 0x20a3, 0x0000, 0x20a3, - 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008, 0x080c, 0x66e4, 0x014e, - 0x015e, 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x612f, - 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9, 0x0006, 0x2011, 0x8b40, - 0x2019, 0x8b41, 0x23a6, 0x22a6, 0xa398, 0x0002, 0xa290, 0x0002, - 0x1f04, 0x67d2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, - 0x080c, 0x66e4, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, 0x0016, - 0x0026, 0x20a1, 0x020b, 0x080c, 0x6110, 0x080c, 0x6126, 0x7810, - 0x0006, 0xa080, 0x0015, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, - 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2, 0x000e, 0xa080, 0x0001, - 0x2004, 0x7812, 0x080c, 0x66e4, 0x002e, 0x001e, 0x014e, 0x015e, - 0x0005, 0x0156, 0x0146, 0x20a1, 0x020b, 0x080c, 0x60a5, 0x20a3, - 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, - 0x0008, 0x080c, 0x66e4, 0x014e, 0x015e, 0x0005, 0x0156, 0x0146, - 0x0016, 0x0026, 0x20a1, 0x020b, 0x080c, 0x60a5, 0x7810, 0x0006, - 0xa080, 0x0017, 0x2098, 0x7808, 0xa088, 0x0002, 0x21a8, 0x53a6, - 0x8003, 0x60c2, 0x000e, 0xa080, 0x0001, 0x2004, 0x7812, 0x080c, - 0x66e4, 0x002e, 0x001e, 0x014e, 0x015e, 0x0005, 0x00e6, 0x00c6, - 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x8daa, 0x700c, 0x2060, - 0x8cff, 0x0178, 0x080c, 0x7d69, 0x1110, 0x080c, 0x6fb6, 0x600c, - 0x0006, 0x080c, 0x7df6, 0x080c, 0x6d18, 0x080c, 0x6a05, 0x00ce, - 0x0c78, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x000e, 0x00ce, - 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, - 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, - 0x0140, 0x2071, 0x8daa, 0x7024, 0x2060, 0x8cff, 0x05a0, 0x080c, - 0x66f7, 0x68c3, 0x0000, 0x080c, 0x567a, 0x2009, 0x0013, 0x080c, - 0x6d3f, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0158, 0x6827, 0x0004, - 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803, 0x0000, - 0x0078, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x6883, - 0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, 0x0000, - 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, 0x00fe, - 0x015e, 0x012e, 0x0005, 0x2001, 0x8b00, 0x2004, 0xa096, 0x0001, - 0x0550, 0xa096, 0x0004, 0x0538, 0x6817, 0x0008, 0x68c3, 0x0000, - 0x2011, 0x3fe7, 0x080c, 0x560d, 0x20a9, 0x01f4, 0x6824, 0xd094, - 0x0158, 0x6827, 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, - 0x1000, 0x7803, 0x0000, 0x0078, 0xd084, 0x0118, 0x6827, 0x0001, - 0x0010, 0x1f04, 0x68be, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803, - 0x0100, 0x7803, 0x0000, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, - 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x0126, 0x0156, 0x00f6, - 0x00e6, 0x00d6, 0x00c6, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, - 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x8daa, 0x703c, 0x2060, - 0x8cff, 0x0904, 0x6952, 0x6817, 0x0010, 0x68c7, 0x0000, 0x68cb, - 0x0000, 0x080c, 0x5687, 0x080c, 0x1e15, 0x0046, 0x2009, 0x017f, - 0x200b, 0x00a5, 0x2021, 0x0169, 0x2404, 0xa084, 0x000f, 0xa086, - 0x0004, 0x11b0, 0x68c7, 0x0000, 0x68cb, 0x0008, 0x00e6, 0x00f6, - 0x2079, 0x0020, 0x2071, 0x8dff, 0x6814, 0xa084, 0x0184, 0xa085, - 0x0012, 0x6816, 0x7803, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, - 0x200b, 0x0000, 0x004e, 0xa39d, 0x0000, 0x1120, 0x2009, 0x0049, - 0x080c, 0x6d3f, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0158, 0x6827, - 0x0004, 0x7804, 0xa084, 0x4000, 0x01a0, 0x7803, 0x1000, 0x7803, - 0x0000, 0x0078, 0xd094, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, - 0x6934, 0x7804, 0xa084, 0x1000, 0x0120, 0x7803, 0x0100, 0x7803, - 0x0000, 0x6824, 0x000e, 0x001e, 0x002e, 0x00ce, 0x00de, 0x00ee, - 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, - 0x2069, 0x8daa, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, - 0x2091, 0x8000, 0x2069, 0x8daa, 0x6a32, 0x012e, 0x00de, 0x0005, - 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0006, 0x0126, 0x2071, 0x8daa, - 0x7614, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0538, 0x601c, - 0xa206, 0x1500, 0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, - 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, - 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, - 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0x7d3c, 0x080c, 0x6a05, - 0x00ce, 0x08d8, 0x2c78, 0x600c, 0x2060, 0x08b8, 0x012e, 0x000e, - 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0156, 0x0146, 0x20a1, - 0x020b, 0x080c, 0x6347, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, - 0x20a2, 0x20a2, 0x20a3, 0x1000, 0x0804, 0x69fd, 0x0156, 0x0146, - 0x20a1, 0x020b, 0x080c, 0x6347, 0x7810, 0x20a2, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x4000, 0x0478, 0x0156, 0x0146, - 0x20a1, 0x020b, 0x080c, 0x6347, 0x7810, 0x20a2, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x2000, 0x00f8, 0x0156, 0x0146, - 0x20a1, 0x020b, 0x080c, 0x6347, 0x7810, 0x20a2, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x0156, 0x0146, - 0x20a1, 0x020b, 0x080c, 0x6347, 0x7810, 0x20a2, 0xa006, 0x20a2, - 0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x0089, 0x60c3, 0x0020, - 0x080c, 0x66e4, 0x014e, 0x015e, 0x0005, 0x00e6, 0x2071, 0x8daa, - 0x7020, 0xa005, 0x0110, 0x8001, 0x7022, 0x00ee, 0x0005, 0x20a9, - 0x0008, 0x20a2, 0x1f04, 0x6a11, 0x20a2, 0x20a2, 0x0005, 0x00f6, - 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126, 0x2091, - 0x8000, 0x2071, 0x8daa, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, - 0x87ff, 0x0904, 0x6a9f, 0x8cff, 0x0904, 0x6a9f, 0x601c, 0xa086, - 0x0006, 0x1904, 0x6a9a, 0x88ff, 0x0138, 0x2800, 0xac06, 0x1904, - 0x6a9a, 0x2039, 0x0000, 0x0050, 0x6018, 0xa206, 0x1904, 0x6a9a, - 0x85ff, 0x0120, 0x6020, 0xa106, 0x1904, 0x6a9a, 0x7024, 0xac06, - 0x1538, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01f0, 0x080c, 0x567a, - 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0x6b23, 0x7027, 0x0000, - 0x0036, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, - 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, - 0x6827, 0x0001, 0x003e, 0x0020, 0x6003, 0x0009, 0x630a, 0x0450, - 0x7014, 0xac36, 0x1110, 0x660c, 0x7616, 0x7010, 0xac36, 0x1140, - 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, - 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, - 0x600f, 0x0000, 0x6010, 0x2068, 0x080c, 0x7b8f, 0x0110, 0x080c, - 0x8942, 0x080c, 0x7d3c, 0x080c, 0x6a05, 0x88ff, 0x1190, 0x00ce, - 0x0804, 0x6a28, 0x2c78, 0x600c, 0x2060, 0x0804, 0x6a28, 0xa006, - 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, - 0x0005, 0x6017, 0x0000, 0x00ce, 0xa8c5, 0x0001, 0x0c88, 0x00f6, - 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, - 0x8000, 0x2071, 0x8daa, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, - 0x6b13, 0x601c, 0xa086, 0x0006, 0x1904, 0x6b0e, 0x88ff, 0x0128, - 0x2800, 0xac06, 0x1904, 0x6b0e, 0x0040, 0x6018, 0xa206, 0x15f0, - 0x85ff, 0x0118, 0x6020, 0xa106, 0x15c8, 0x703c, 0xac06, 0x1170, - 0x0036, 0x2019, 0x0001, 0x080c, 0x68e5, 0x7033, 0x0000, 0x703f, - 0x0000, 0x7043, 0x0000, 0x7047, 0x0000, 0x003e, 0x7038, 0xac36, - 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140, 0x2c00, 0xaf36, - 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, - 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, - 0x6010, 0x2068, 0x080c, 0x7b8f, 0x0110, 0x080c, 0x8942, 0x080c, - 0x7d3c, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x6abe, 0x2c78, 0x600c, - 0x2060, 0x0804, 0x6abe, 0xa006, 0x012e, 0x000e, 0x002e, 0x006e, - 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6017, 0x0000, 0x00ce, - 0xa8c5, 0x0001, 0x0c88, 0x00e6, 0x2071, 0x8daa, 0x2001, 0x8b00, - 0x2004, 0xa086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, - 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, - 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x8daa, 0x2c10, 0x7638, - 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, 0xac06, 0x11e0, 0x7038, - 0xac36, 0x1110, 0x660c, 0x763a, 0x7034, 0xac36, 0x1140, 0x2c00, - 0xaf36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, - 0x2c00, 0xaf06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, - 0xa085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, - 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00f6, - 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, - 0x2071, 0x8daa, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x6bf2, - 0x6018, 0xa080, 0x0028, 0x2004, 0xa206, 0x1904, 0x6bed, 0x7024, - 0xac06, 0x1500, 0x2069, 0x0100, 0x68c0, 0xa005, 0x01d8, 0x080c, - 0x66f7, 0x68c3, 0x0000, 0x080c, 0x6b23, 0x7027, 0x0000, 0x0036, - 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0120, 0x6803, 0x0100, - 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, - 0x0001, 0x003e, 0x700c, 0xac36, 0x1110, 0x660c, 0x760e, 0x7008, - 0xac36, 0x1140, 0x2c00, 0xaf36, 0x0118, 0x2f00, 0x700a, 0x0010, - 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0xaf06, 0x0110, 0x7e0e, - 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0x7d58, 0x1118, 0x080c, - 0x2589, 0x00c0, 0x080c, 0x7d69, 0x1118, 0x080c, 0x6fb6, 0x0090, - 0x6010, 0x2068, 0x080c, 0x7b8f, 0x0168, 0x601c, 0xa086, 0x0003, - 0x1508, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x080c, 0x46a1, - 0x080c, 0x7d30, 0x6003, 0x0000, 0x080c, 0x7df6, 0x080c, 0x7d3c, - 0x080c, 0x6a05, 0x00ce, 0x0804, 0x6b7d, 0x2c78, 0x600c, 0x2060, - 0x0804, 0x6b7d, 0x012e, 0x000e, 0x006e, 0x00ce, 0x00de, 0x00ee, - 0x00fe, 0x0005, 0x601c, 0xa086, 0x0006, 0x19d8, 0x080c, 0x8942, - 0x0c08, 0x0036, 0x0156, 0x0136, 0x0146, 0x3908, 0xa006, 0xa190, - 0x0020, 0x221c, 0xa39e, 0x23f9, 0x1118, 0x8210, 0x8000, 0x0cc8, - 0xa005, 0x0138, 0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, 0x22c8, - 0x53a3, 0x014e, 0x013e, 0x015e, 0x003e, 0x0005, 0x00d6, 0x20a1, - 0x020b, 0x080c, 0x612f, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, - 0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x2099, 0x8da4, 0x20a9, - 0x0004, 0x53a6, 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x080c, 0x66e4, 0x00de, 0x0005, 0x20a1, 0x020b, - 0x080c, 0x612f, 0x20a3, 0x0210, 0x20a3, 0x0018, 0x20a3, 0x0800, - 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, - 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810, 0xa084, - 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0018, - 0x080c, 0x66e4, 0x0005, 0x20a1, 0x020b, 0x0079, 0x7910, 0x21a2, - 0x20a3, 0x0000, 0x60c3, 0x0000, 0x20e1, 0x9080, 0x60a7, 0x9575, - 0x080c, 0x66ee, 0x080c, 0x5671, 0x0005, 0x0156, 0x0136, 0x0036, - 0x00d6, 0x00e6, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7824, 0x2068, - 0xadf0, 0x000f, 0x7210, 0xa296, 0x00c0, 0xa294, 0xfffd, 0x7212, - 0x7214, 0xa294, 0x0300, 0x7216, 0x7100, 0xa194, 0x00ff, 0x7308, - 0xa384, 0x00ff, 0xa08d, 0xc200, 0x7102, 0xa384, 0xff00, 0xa215, - 0x720a, 0x7004, 0x720c, 0x700e, 0x7206, 0x20a9, 0x000a, 0x2e98, - 0x53a6, 0x60a3, 0x0035, 0x6a38, 0xa294, 0x7000, 0xa286, 0x3000, - 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x003e, 0x013e, 0x015e, - 0x0005, 0x2009, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, - 0x6116, 0x0005, 0x2061, 0x9200, 0x2a70, 0x7064, 0x7046, 0x704b, - 0x9200, 0x0005, 0x00e6, 0x0126, 0x2071, 0x8b00, 0x2091, 0x8000, - 0x7544, 0xa582, 0x0001, 0x0608, 0x7048, 0x2060, 0x6000, 0xa086, - 0x0000, 0x0148, 0xace0, 0x000c, 0x7058, 0xac02, 0x1208, 0x0cb0, - 0x2061, 0x9200, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, - 0x000c, 0x7058, 0xa502, 0x1230, 0x754a, 0xa085, 0x0001, 0x012e, - 0x00ee, 0x0005, 0x704b, 0x9200, 0x0cc0, 0xa006, 0x0cc0, 0x00e6, - 0x2071, 0x8b00, 0x7544, 0xa582, 0x0001, 0x0600, 0x7048, 0x2060, - 0x6000, 0xa086, 0x0000, 0x0148, 0xace0, 0x000c, 0x7058, 0xac02, - 0x1208, 0x0cb0, 0x2061, 0x9200, 0x0c98, 0x6003, 0x0008, 0x8529, - 0x7546, 0xaca8, 0x000c, 0x7058, 0xa502, 0x1228, 0x754a, 0xa085, - 0x0001, 0x00ee, 0x0005, 0x704b, 0x9200, 0x0cc8, 0xa006, 0x0cc8, - 0xac82, 0x9200, 0x0a0c, 0x1410, 0x2001, 0x8b16, 0x2004, 0xac02, - 0x1a0c, 0x1410, 0xa006, 0x6006, 0x600a, 0x600e, 0x6012, 0x6016, - 0x601a, 0x601f, 0x0000, 0x6003, 0x0000, 0x6022, 0x6026, 0x2061, - 0x8b00, 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, 0x0108, 0x0005, - 0x0126, 0x2091, 0x8000, 0x080c, 0x5d10, 0x012e, 0x0cc0, 0x601c, - 0xa084, 0x000f, 0x0002, 0x6d4d, 0x6d5c, 0x6d77, 0x6d92, 0x7dfe, - 0x7e19, 0x7e34, 0x6d4d, 0x6d5c, 0x6d4d, 0xa186, 0x0013, 0x1128, - 0x080c, 0x5c37, 0x080c, 0x5d10, 0x0005, 0xa18e, 0x0047, 0x1118, - 0xa016, 0x080c, 0x16d1, 0x0005, 0x0066, 0x6000, 0xa0b2, 0x0010, - 0x1a0c, 0x1410, 0x0013, 0x006e, 0x0005, 0x6d75, 0x6e85, 0x6fdf, - 0x6d75, 0x702e, 0x6d75, 0x6d75, 0x6d75, 0x6e25, 0x733b, 0x6d75, - 0x6d75, 0x6d75, 0x6d75, 0x6d75, 0x6d75, 0x080c, 0x1410, 0x0066, - 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1410, 0x0013, 0x006e, 0x0005, - 0x6d90, 0x77f2, 0x6d90, 0x6d90, 0x6d90, 0x6d90, 0x6d90, 0x6d90, - 0x77da, 0x78d0, 0x6d90, 0x781f, 0x7877, 0x781f, 0x7877, 0x6d90, - 0x080c, 0x1410, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1410, - 0x0013, 0x006e, 0x0005, 0x6dab, 0x7377, 0x742b, 0x74ef, 0x762f, - 0x6dab, 0x6dab, 0x6dab, 0x7353, 0x778f, 0x7792, 0x6dab, 0x6dab, - 0x6dab, 0x6dab, 0x77b7, 0x080c, 0x1410, 0x20a9, 0x000e, 0x2e98, - 0x6010, 0x20a0, 0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, - 0x94a0, 0x3318, 0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, - 0x0002, 0xa398, 0x0002, 0xa4a0, 0x0002, 0x1f04, 0x6dbb, 0x00e6, - 0x080c, 0x7b8f, 0x0130, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, - 0x0103, 0x00ee, 0x080c, 0x6d18, 0x0005, 0x00d6, 0x0036, 0x7330, - 0xa386, 0x0200, 0x1130, 0x6018, 0x2068, 0x6813, 0x00ff, 0x6817, - 0xfffd, 0x6010, 0xa005, 0x0130, 0x2068, 0x6807, 0x0000, 0x6837, - 0x0103, 0x6b32, 0x080c, 0x6d18, 0x003e, 0x00de, 0x0005, 0x0016, - 0x20a9, 0x002a, 0xae80, 0x000c, 0x2098, 0x6010, 0xa080, 0x0002, - 0x20a0, 0x53a3, 0x20a9, 0x002a, 0x6010, 0xa080, 0x0001, 0x2004, - 0xa080, 0x0002, 0x20a0, 0x53a3, 0x00e6, 0x6010, 0x2004, 0x2070, - 0x7037, 0x0103, 0x00ee, 0x080c, 0x6d18, 0x001e, 0x0005, 0x00d6, - 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6, 0x0015, - 0x1148, 0x6018, 0x2068, 0x7038, 0x680a, 0x703c, 0x680e, 0x6800, - 0xc08d, 0x6802, 0x00de, 0x0804, 0x6dc7, 0x2100, 0xa1b2, 0x0040, - 0x1a0c, 0x1410, 0x0002, 0x6e6d, 0x6e79, 0x6e6d, 0x6e6d, 0x6e6d, - 0x6e6d, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, - 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, - 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, - 0x6e6b, 0x6e6b, 0x6e6d, 0x6e6b, 0x6e6d, 0x6e6d, 0x6e6b, 0x6e6b, - 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6d, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, - 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6d, 0x6e6b, 0x6e6b, - 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, 0x6e6b, - 0x6e6d, 0x6e6b, 0x6e6b, 0x080c, 0x1410, 0x6003, 0x0001, 0x6106, - 0x080c, 0x58e2, 0x0126, 0x2091, 0x8000, 0x080c, 0x5d10, 0x012e, - 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x58e2, 0x0126, 0x2091, - 0x8000, 0x080c, 0x5d10, 0x012e, 0x0005, 0x6004, 0xa0b2, 0x0040, - 0x1a0c, 0x1410, 0xa1b6, 0x0013, 0x0904, 0x6f25, 0xa1b6, 0x0027, - 0x1904, 0x6eeb, 0x080c, 0x5c37, 0x6004, 0x080c, 0x7d58, 0x0188, - 0x080c, 0x7d69, 0x0904, 0x6ee5, 0xa08e, 0x0021, 0x0904, 0x6ee8, - 0xa08e, 0x0022, 0x0904, 0x6ee5, 0xa08e, 0x003d, 0x0904, 0x6ee8, - 0x04a8, 0x080c, 0x2589, 0x2001, 0x0007, 0x080c, 0x42b9, 0x6018, - 0xa080, 0x0028, 0x200c, 0x080c, 0x6fb6, 0xa186, 0x007e, 0x1148, - 0x2001, 0x8b32, 0x2014, 0xc285, 0x080c, 0x4c42, 0x1108, 0xc2ad, - 0x2202, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, - 0x59d5, 0x0086, 0x2041, 0x0000, 0x080c, 0x5911, 0x00c6, 0x6018, - 0xa065, 0x0110, 0x080c, 0x44e6, 0x00ce, 0x2c08, 0x080c, 0x878f, - 0x008e, 0x003e, 0x002e, 0x001e, 0x080c, 0x42f5, 0x080c, 0x7df6, - 0x080c, 0x6d18, 0x080c, 0x5d10, 0x0005, 0x080c, 0x6fb6, 0x0cb0, - 0x080c, 0x6fd3, 0x0c98, 0xa186, 0x0014, 0x1db0, 0x080c, 0x5c37, - 0x080c, 0x2563, 0x080c, 0x7d58, 0x1188, 0x080c, 0x2589, 0x6018, - 0xa080, 0x0028, 0x200c, 0x080c, 0x6fb6, 0xa186, 0x007e, 0x1128, - 0x2001, 0x8b32, 0x200c, 0xc185, 0x2102, 0x08c0, 0x080c, 0x7d69, - 0x1118, 0x080c, 0x6fb6, 0x0890, 0x6004, 0xa08e, 0x0032, 0x1158, - 0x00e6, 0x00f6, 0x2071, 0x8b81, 0x2079, 0x0000, 0x080c, 0x2848, - 0x00fe, 0x00ee, 0x0818, 0x6004, 0xa08e, 0x0021, 0x0d50, 0xa08e, - 0x0022, 0x090c, 0x6fd3, 0x0804, 0x6ede, 0x2008, 0x0002, 0x6f69, - 0x6f6a, 0x6f6d, 0x6f70, 0x6f73, 0x6f76, 0x6f67, 0x6f67, 0x6f67, - 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, - 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, - 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f79, 0x6f7e, 0x6f67, - 0x6f87, 0x6f7e, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f7e, - 0x6f7e, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, - 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f67, - 0x6f67, 0x6f67, 0x6f67, 0x6f67, 0x6f7e, 0x6fad, 0x6f67, 0x080c, - 0x1410, 0x00a0, 0x2001, 0x000b, 0x0418, 0x2001, 0x0003, 0x0400, - 0x2001, 0x0005, 0x00e8, 0x2001, 0x0001, 0x00d0, 0x2001, 0x0009, - 0x00b8, 0x080c, 0x1410, 0x0098, 0x080c, 0x42b9, 0x080c, 0x5c37, - 0x6003, 0x0002, 0x6017, 0x0028, 0x080c, 0x5d10, 0x0040, 0x080c, - 0x5c37, 0x6003, 0x0004, 0x6017, 0x0028, 0x080c, 0x5d10, 0x0005, - 0x080c, 0x42b9, 0x080c, 0x5c37, 0x6003, 0x0002, 0x0036, 0x2019, - 0x8b5c, 0x2304, 0xa084, 0xff00, 0x1118, 0x2019, 0x0028, 0x0040, - 0x8007, 0xa09a, 0x0004, 0x0ec8, 0x8003, 0x801b, 0x831b, 0xa318, - 0x6316, 0x003e, 0x080c, 0x5d10, 0x0c10, 0x080c, 0x5c37, 0x080c, - 0x7df6, 0x080c, 0x6d18, 0x080c, 0x5d10, 0x08c8, 0x00e6, 0x080c, - 0x7b8f, 0x01a0, 0x6010, 0x2070, 0x7038, 0xd0fc, 0x0178, 0x7007, - 0x0000, 0x0016, 0x6004, 0xa08e, 0x0021, 0x0150, 0xa08e, 0x003d, - 0x0138, 0x001e, 0x7037, 0x0103, 0x7033, 0x0100, 0x00ee, 0x0005, - 0x001e, 0x0009, 0x0cd8, 0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000, - 0x2070, 0x7037, 0x0103, 0x7023, 0x8001, 0x00ee, 0x0005, 0x00d6, - 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff, 0x00de, 0xa0b2, 0x000c, - 0x1a0c, 0x1410, 0x6604, 0xa6b6, 0x0028, 0x1118, 0x080c, 0x7d93, - 0x0468, 0x6604, 0xa6b6, 0x0029, 0x1118, 0x080c, 0x7daa, 0x0430, - 0x6604, 0xa6b6, 0x001f, 0x1118, 0x080c, 0x6dad, 0x00f8, 0x6604, - 0xa6b6, 0x0000, 0x1118, 0x080c, 0x6e0f, 0x00c0, 0x6604, 0xa6b6, - 0x0022, 0x1118, 0x080c, 0x6dd5, 0x0088, 0x6604, 0xa6b6, 0x003d, - 0x1118, 0x080c, 0x6def, 0x0050, 0xa1b6, 0x0015, 0x1110, 0x0053, - 0x0028, 0xa1b6, 0x0016, 0x1118, 0x0804, 0x71c6, 0x0005, 0x080c, - 0x6d55, 0x0ce0, 0x7045, 0x7048, 0x7045, 0x7082, 0x7045, 0x716c, - 0x7045, 0x7045, 0x7045, 0x71a2, 0x7045, 0x71b6, 0xa1b6, 0x0048, - 0x0140, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x16d1, - 0x0005, 0x00e6, 0xacf0, 0x0004, 0x2e74, 0x7000, 0x2070, 0x7037, - 0x0103, 0x00ee, 0x080c, 0x6d18, 0x0005, 0xe000, 0xe000, 0x0005, - 0x00e6, 0x2071, 0x8b00, 0x7080, 0xa086, 0x0074, 0x11f0, 0x080c, - 0x8766, 0x1170, 0x00d6, 0x6018, 0x2068, 0x00d9, 0x00de, 0x2001, - 0x0006, 0x080c, 0x42b9, 0x080c, 0x2589, 0x080c, 0x6d18, 0x0078, - 0x2001, 0x000a, 0x080c, 0x42b9, 0x080c, 0x2589, 0x6003, 0x0001, - 0x6007, 0x0001, 0x080c, 0x58e2, 0x0010, 0x080c, 0x715d, 0x00ee, - 0x0005, 0x6800, 0xd084, 0x0168, 0x2001, 0x0000, 0x080c, 0x42a7, - 0x2069, 0x8b51, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, - 0x42c7, 0x0005, 0x00d6, 0x2011, 0x8b20, 0x2204, 0xa086, 0x0074, - 0x1904, 0x715a, 0x080c, 0x72a4, 0x6018, 0x2068, 0xa080, 0x0028, - 0x2014, 0xa286, 0x007e, 0x0198, 0xa286, 0x0080, 0x1904, 0x70da, - 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005, 0x0588, 0x2068, - 0x6807, 0x0000, 0x6837, 0x0103, 0x6833, 0x0200, 0x0448, 0x00d6, - 0x00e6, 0x00f6, 0x6813, 0x00ff, 0x6817, 0xfffe, 0x2071, 0x8b32, - 0x2e04, 0xa085, 0x0003, 0x2072, 0x2071, 0x9080, 0x2079, 0x0100, - 0x2e04, 0xa084, 0x00ff, 0x2069, 0x8b1b, 0x206a, 0x78e6, 0x8e70, - 0x2e04, 0x2069, 0x8b1c, 0x206a, 0x78ea, 0x7832, 0x7836, 0xa084, - 0x00ff, 0x2008, 0x080c, 0x2313, 0x00fe, 0x00ee, 0x00de, 0x0470, - 0x2001, 0x0006, 0x080c, 0x42b9, 0x080c, 0x2589, 0x080c, 0x6d18, - 0x0804, 0x715b, 0x00e6, 0x2071, 0x8b32, 0x2e04, 0xd09c, 0x0188, - 0x2071, 0x9080, 0x7108, 0x720c, 0xa18c, 0x00ff, 0x1118, 0xa284, - 0xff00, 0x0138, 0x6018, 0x2070, 0x70a0, 0xd0bc, 0x1110, 0x7112, - 0x7216, 0x00ee, 0x2001, 0x0004, 0x080c, 0x42b9, 0x6003, 0x0001, - 0x6007, 0x0003, 0x080c, 0x58e2, 0x0804, 0x715b, 0x685c, 0xd0e4, - 0x01d0, 0x080c, 0x7dd2, 0x080c, 0x4c42, 0x0110, 0xd0dc, 0x1940, - 0x2011, 0x8b32, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x8d8d, 0x2004, - 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x233e, 0x78e2, - 0x00fe, 0x0804, 0x70d0, 0x080c, 0x7deb, 0x2011, 0x8b32, 0x2204, - 0xc0a5, 0x2012, 0x0006, 0x080c, 0x884f, 0x000e, 0x1904, 0x70d0, - 0xc0b5, 0x2012, 0x2001, 0x0000, 0x080c, 0x42a7, 0x00c6, 0x2009, - 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x00fe, - 0x080c, 0x2313, 0x00f6, 0x2079, 0x8b00, 0x7972, 0x2100, 0x2009, - 0x0000, 0x080c, 0x22e9, 0x794e, 0x00fe, 0x8108, 0x080c, 0x42d6, - 0x2c00, 0x00ce, 0x1904, 0x70d0, 0x601a, 0x2001, 0x0002, 0x080c, - 0x42b9, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, - 0x58e2, 0x0008, 0x0011, 0x00de, 0x0005, 0x2001, 0x8b00, 0x2004, - 0xa086, 0x0003, 0x0120, 0x2001, 0x0007, 0x080c, 0x42b9, 0x080c, - 0x2589, 0x080c, 0x6d18, 0x0005, 0x00e6, 0x2071, 0x8b00, 0x7080, - 0xa086, 0x0014, 0x1548, 0x7000, 0xa086, 0x0003, 0x1128, 0x6010, - 0xa005, 0x1110, 0x080c, 0x3689, 0x00d6, 0x6018, 0x2068, 0x080c, - 0x43a0, 0x080c, 0x7071, 0x00de, 0x080c, 0x72ae, 0x11a8, 0x2001, - 0x0006, 0x080c, 0x42b9, 0x00e6, 0x6010, 0xa005, 0x0138, 0x2070, - 0x7007, 0x0000, 0x7037, 0x0103, 0x7033, 0x0200, 0x00ee, 0x080c, - 0x2589, 0x080c, 0x6d18, 0x0020, 0x080c, 0x6fb6, 0x080c, 0x715d, - 0x00ee, 0x0005, 0x2011, 0x8b20, 0x2204, 0xa086, 0x0014, 0x1158, - 0x2001, 0x0002, 0x080c, 0x42b9, 0x6003, 0x0001, 0x6007, 0x0001, - 0x080c, 0x58e2, 0x0010, 0x080c, 0x715d, 0x0005, 0x2011, 0x8b20, - 0x2204, 0xa086, 0x0004, 0x1138, 0x2001, 0x0007, 0x080c, 0x42b9, - 0x080c, 0x6d18, 0x0010, 0x080c, 0x715d, 0x0005, 0x000b, 0x0005, - 0x7045, 0x71d4, 0x7045, 0x71f6, 0x7045, 0x7260, 0x7045, 0x7045, - 0x7045, 0x7273, 0x7045, 0x7283, 0x00c6, 0x080c, 0x7293, 0x1178, - 0x2001, 0x0000, 0x080c, 0x42a7, 0x2001, 0x0002, 0x080c, 0x42b9, - 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x58e2, 0x0068, 0x2009, - 0x908f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900, 0x1118, 0x080c, - 0x6d18, 0x0010, 0x080c, 0x715d, 0x00ce, 0x0005, 0x080c, 0x72a1, - 0x00d6, 0x2069, 0x8d9c, 0x2d04, 0xa005, 0x0168, 0x6018, 0x2068, - 0x68a0, 0xa086, 0x007e, 0x1138, 0x2069, 0x8b1c, 0x2d04, 0x8000, - 0x206a, 0x00de, 0x0010, 0x00de, 0x0078, 0x2001, 0x0000, 0x080c, - 0x42a7, 0x2001, 0x0002, 0x080c, 0x42b9, 0x6003, 0x0001, 0x6007, - 0x0002, 0x080c, 0x58e2, 0x0428, 0x080c, 0x6fb6, 0x2009, 0x908e, - 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x01e0, 0xa686, 0x000b, - 0x01b0, 0x2009, 0x908f, 0x2104, 0xa084, 0xff00, 0x1118, 0xa686, - 0x0009, 0x0180, 0xa086, 0x1900, 0x1150, 0xa686, 0x0009, 0x0150, - 0x2001, 0x0004, 0x080c, 0x42b9, 0x080c, 0x6d18, 0x0010, 0x080c, - 0x715d, 0x0005, 0x00d6, 0x6010, 0x2068, 0x080c, 0x7b8f, 0x0128, - 0x6838, 0xd0fc, 0x0110, 0x00de, 0x0c90, 0x6018, 0x2068, 0x6840, - 0xa084, 0x00ff, 0xa005, 0x0140, 0x8001, 0x6842, 0x6017, 0x000a, - 0x6007, 0x0016, 0x00de, 0x0c28, 0x080c, 0x2563, 0x00de, 0x08f8, - 0x080c, 0x72a1, 0x1158, 0x2001, 0x0004, 0x080c, 0x42b9, 0x6003, - 0x0001, 0x6007, 0x0003, 0x080c, 0x58e2, 0x0020, 0x080c, 0x6fb6, - 0x080c, 0x715d, 0x0005, 0x0469, 0x1158, 0x2001, 0x0008, 0x080c, - 0x42b9, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x58e2, 0x0010, - 0x080c, 0x715d, 0x0005, 0x00e9, 0x1158, 0x2001, 0x000a, 0x080c, - 0x42b9, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x58e2, 0x0010, - 0x080c, 0x715d, 0x0005, 0x2009, 0x908e, 0x2104, 0xa086, 0x0003, - 0x1138, 0x2009, 0x908f, 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, - 0x0005, 0xa085, 0x0001, 0x0005, 0x00c6, 0x0016, 0xac88, 0x0006, - 0x2164, 0x080c, 0x4319, 0x001e, 0x00ce, 0x0005, 0x00e6, 0x2071, - 0x908c, 0x7004, 0xa086, 0x0014, 0x11a8, 0x7008, 0xa086, 0x0800, - 0x1188, 0x700c, 0xd0ec, 0x0160, 0xa084, 0x0f00, 0xa086, 0x0100, - 0x1138, 0x7024, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0xa006, 0x0010, - 0xa085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, - 0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029, - 0x8db3, 0x252c, 0x2021, 0x8db9, 0x2424, 0x2061, 0x9200, 0x2071, - 0x8b00, 0x7244, 0x7064, 0xa202, 0x1688, 0x080c, 0x8999, 0x0540, - 0x671c, 0xa786, 0x0001, 0x0520, 0xa786, 0x0007, 0x0508, 0x2500, - 0xac06, 0x01f0, 0x2400, 0xac06, 0x01d8, 0x00c6, 0x6000, 0xa086, - 0x0004, 0x1110, 0x080c, 0x179e, 0x6010, 0x2068, 0x080c, 0x7b8f, - 0x0160, 0xa786, 0x0003, 0x11e0, 0x6837, 0x0103, 0x6b4a, 0x6847, - 0x0000, 0x080c, 0x46a1, 0x080c, 0x7d30, 0x080c, 0x7d3c, 0x00ce, - 0xace0, 0x000c, 0x7058, 0xac02, 0x1208, 0x0858, 0x012e, 0x000e, - 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, - 0xa786, 0x0006, 0x1d08, 0x080c, 0x8942, 0x0c38, 0x220c, 0x2304, - 0xa106, 0x1130, 0x8210, 0x8318, 0x1f04, 0x7326, 0xa006, 0x0005, - 0x2304, 0xa102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, - 0xa18d, 0x0001, 0x0005, 0x6004, 0xa08a, 0x0040, 0x1a0c, 0x1410, - 0x080c, 0x7d58, 0x0120, 0x080c, 0x7d69, 0x0150, 0x0010, 0x080c, - 0x2589, 0x080c, 0x5c37, 0x080c, 0x6d18, 0x080c, 0x5d10, 0x0005, - 0x080c, 0x6fb6, 0x0cb0, 0xa182, 0x0040, 0x0002, 0x7369, 0x7369, - 0x7369, 0x7369, 0x7369, 0x7369, 0x7369, 0x7369, 0x7369, 0x7369, - 0x7369, 0x736b, 0x736b, 0x736b, 0x736b, 0x7369, 0x7369, 0x7369, - 0x736b, 0x080c, 0x1410, 0x6003, 0x0001, 0x6106, 0x080c, 0x589c, - 0x0126, 0x2091, 0x8000, 0x080c, 0x5d10, 0x012e, 0x0005, 0xa186, - 0x0013, 0x1128, 0x6004, 0xa082, 0x0040, 0x0804, 0x7400, 0xa186, - 0x0027, 0x11d0, 0x080c, 0x5c37, 0x080c, 0x2563, 0x00d6, 0x6110, - 0x2168, 0x080c, 0x7b8f, 0x0150, 0x6837, 0x0103, 0x684b, 0x0029, - 0x6847, 0x0000, 0x080c, 0x46a1, 0x080c, 0x7d30, 0x00de, 0x080c, - 0x6d18, 0x080c, 0x5d10, 0x0005, 0xa186, 0x0014, 0x1120, 0x6004, - 0xa082, 0x0040, 0x0428, 0xa186, 0x0046, 0x0138, 0xa186, 0x0045, - 0x0120, 0xa186, 0x0047, 0x190c, 0x1410, 0x2001, 0x0109, 0x2004, - 0xd084, 0x0198, 0x0126, 0x2091, 0x2400, 0x0006, 0x0016, 0x0026, - 0x080c, 0x578e, 0x002e, 0x001e, 0x000e, 0x012e, 0xe000, 0x6000, - 0xa086, 0x0002, 0x1110, 0x0804, 0x742b, 0x080c, 0x6d55, 0x0005, - 0x0002, 0x73de, 0x73dc, 0x73dc, 0x73dc, 0x73dc, 0x73dc, 0x73dc, - 0x73dc, 0x73dc, 0x73dc, 0x73dc, 0x73f9, 0x73f9, 0x73f9, 0x73f9, - 0x73dc, 0x73dc, 0x73dc, 0x73f9, 0x080c, 0x1410, 0x080c, 0x5c37, - 0x00d6, 0x6110, 0x2168, 0x080c, 0x7b8f, 0x0168, 0x6837, 0x0103, - 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ec, 0x6852, 0x080c, - 0x46a1, 0x080c, 0x7d30, 0x00de, 0x080c, 0x6d18, 0x080c, 0x5d10, - 0x0005, 0x080c, 0x5c37, 0x080c, 0x6d18, 0x080c, 0x5d10, 0x0005, - 0x0002, 0x7416, 0x7414, 0x7414, 0x7414, 0x7414, 0x7414, 0x7414, - 0x7414, 0x7414, 0x7414, 0x7414, 0x7424, 0x7424, 0x7424, 0x7424, - 0x7414, 0x7414, 0x7414, 0x7424, 0x080c, 0x1410, 0x080c, 0x5c37, - 0x6003, 0x0002, 0x080c, 0x5d10, 0x6010, 0xa088, 0x0013, 0x2104, - 0xa085, 0x0400, 0x200a, 0x0005, 0x080c, 0x5c37, 0x6003, 0x000f, - 0x080c, 0x5d10, 0x0005, 0xa182, 0x0040, 0x0002, 0x7441, 0x7441, - 0x7441, 0x7441, 0x7441, 0x7443, 0x74c5, 0x74e4, 0x7441, 0x7441, - 0x7441, 0x7441, 0x7441, 0x7441, 0x7441, 0x7441, 0x7441, 0x7441, - 0x7441, 0x080c, 0x1410, 0x00e6, 0x00d6, 0x2071, 0x908c, 0x6110, - 0x2168, 0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0904, 0x74ab, 0xa68c, - 0x0c00, 0x0120, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, - 0xa186, 0x0002, 0x0190, 0xa186, 0x0028, 0x1128, 0x080c, 0x7d47, - 0x684b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0x684b, 0x0015, 0x0038, - 0xd6d4, 0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000, 0x6837, - 0x0103, 0x6e46, 0xa01e, 0xd6c4, 0x01b0, 0xa686, 0x0100, 0x1138, - 0x2001, 0x9099, 0x2004, 0xa005, 0x1110, 0xc6c4, 0x0868, 0x7328, - 0x732c, 0x6b56, 0x0036, 0x2308, 0x2019, 0x9098, 0xad90, 0x0019, - 0x080c, 0x794f, 0x003e, 0xd6cc, 0x0560, 0x7124, 0x695a, 0xa192, - 0x0021, 0x1250, 0x2071, 0x9098, 0x831c, 0x2300, 0xae18, 0xad90, - 0x001d, 0x080c, 0x794f, 0x00e8, 0x6838, 0xd0fc, 0x0120, 0x2009, - 0x0020, 0x695a, 0x0c78, 0x00f6, 0x2d78, 0x080c, 0x78f4, 0x00fe, - 0x080c, 0x793f, 0x0080, 0x684b, 0x0000, 0x6837, 0x0103, 0x6e46, - 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115, 0x0110, 0x080c, - 0x7621, 0x080c, 0x46a1, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, - 0x00de, 0x00ee, 0x080c, 0x6d18, 0x0005, 0x00f6, 0x6003, 0x0003, - 0x2079, 0x908c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, - 0x784c, 0xd0ac, 0x0120, 0x6003, 0x0002, 0x00fe, 0x0005, 0x7c12, - 0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x2c10, 0x080c, 0x1bc8, 0x080c, - 0x58ff, 0x080c, 0x5dc2, 0x0005, 0x6003, 0x0004, 0x6110, 0x20e1, - 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x16d1, 0x0005, 0xa182, - 0x0040, 0x0002, 0x7505, 0x7505, 0x7505, 0x7505, 0x7505, 0x7507, - 0x758f, 0x7505, 0x7505, 0x75a5, 0x75fc, 0x7505, 0x7505, 0x7505, - 0x7505, 0x7607, 0x7505, 0x7505, 0x7505, 0x080c, 0x1410, 0x0076, - 0x00f6, 0x00e6, 0x00d6, 0x2071, 0x908c, 0x6110, 0x2178, 0x7614, - 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, - 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0904, 0x758a, 0xa694, 0xff00, - 0xa284, 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, - 0x0300, 0x0904, 0x758a, 0x080c, 0x1488, 0x090c, 0x1410, 0x2d00, - 0x784a, 0x7f4c, 0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, - 0x783c, 0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x0c00, 0x0120, - 0x7318, 0x6b62, 0x731c, 0x6b5e, 0xa68c, 0x00ff, 0xa186, 0x0002, - 0x0180, 0xa186, 0x0028, 0x1118, 0x684b, 0x001c, 0x0060, 0xd6dc, - 0x0118, 0x684b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0x684b, 0x0007, - 0x0010, 0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, - 0xa01e, 0xd6c4, 0x0160, 0x7328, 0x732c, 0x6b56, 0x0036, 0x2308, - 0x2019, 0x9098, 0xad90, 0x0019, 0x080c, 0x794f, 0x003e, 0xd6cc, - 0x01c8, 0x7124, 0x695a, 0xa192, 0x0021, 0x1250, 0x2071, 0x9098, - 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x080c, 0x794f, 0x0050, - 0x7838, 0xd0fc, 0x0120, 0x2009, 0x0020, 0x695a, 0x0c78, 0x2d78, - 0x080c, 0x78f4, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x00f6, - 0x6003, 0x0003, 0x2079, 0x908c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, - 0x6010, 0x2078, 0x7c12, 0x7b16, 0x7e0a, 0x7d0e, 0x00fe, 0x2c10, - 0x080c, 0x1bc8, 0x080c, 0x66dd, 0x0005, 0x00d6, 0x6003, 0x0002, - 0x080c, 0x5cc9, 0x080c, 0x5dc2, 0x6110, 0x2168, 0x694c, 0xd1e4, - 0x0904, 0x75fa, 0xd1cc, 0x0540, 0x6948, 0x6838, 0xd0fc, 0x01e8, - 0x0016, 0x684c, 0x0006, 0x6850, 0x0006, 0xad90, 0x000d, 0xa198, - 0x000d, 0x2009, 0x0023, 0x0156, 0x21a8, 0x2304, 0x2012, 0x8318, - 0x8210, 0x1f04, 0x75c5, 0x015e, 0x000e, 0x6852, 0x000e, 0x684e, - 0x001e, 0x2168, 0x080c, 0x14af, 0x0418, 0x0016, 0x080c, 0x14af, - 0x00de, 0x080c, 0x793f, 0x00e0, 0x6837, 0x0103, 0x6944, 0xa184, - 0x00ff, 0xa0b6, 0x0002, 0x0180, 0xa086, 0x0028, 0x1118, 0x684b, - 0x001c, 0x0060, 0xd1dc, 0x0118, 0x684b, 0x0015, 0x0038, 0xd1d4, - 0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000, 0x080c, 0x46a1, - 0x080c, 0x6d18, 0x00de, 0x0005, 0x2019, 0x0001, 0x080c, 0x68e5, - 0x6003, 0x0002, 0x080c, 0x5cc9, 0x080c, 0x5dc2, 0x0005, 0x080c, - 0x5cc9, 0x080c, 0x2563, 0x00d6, 0x6110, 0x2168, 0x080c, 0x7b8f, - 0x0150, 0x6837, 0x0103, 0x684b, 0x0029, 0x6847, 0x0000, 0x080c, - 0x46a1, 0x080c, 0x7d30, 0x00de, 0x080c, 0x6d18, 0x080c, 0x5dc2, - 0x0005, 0x684b, 0x0015, 0xd1fc, 0x0138, 0x684b, 0x0007, 0x8002, - 0x8000, 0x810a, 0xa189, 0x0000, 0x6962, 0x685e, 0x0005, 0xa182, - 0x0040, 0x0002, 0x7645, 0x7645, 0x7645, 0x7645, 0x7645, 0x7647, - 0x7645, 0x76e7, 0x76ef, 0x7645, 0x7645, 0x7645, 0x7645, 0x7645, - 0x7645, 0x7645, 0x7645, 0x7645, 0x7645, 0x080c, 0x1410, 0x0076, - 0x00f6, 0x00e6, 0x00d6, 0x2071, 0x908c, 0x6110, 0x2178, 0x7614, - 0xa6b4, 0x0fff, 0x7e46, 0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, - 0x6a3c, 0x8211, 0x6a3e, 0x86ff, 0x0904, 0x76d8, 0xa694, 0xff00, - 0xa284, 0x0c00, 0x0120, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, - 0x0300, 0x0904, 0x76d6, 0xa686, 0x0100, 0x1140, 0x2001, 0x9099, - 0x2004, 0xa005, 0x1118, 0xc6c4, 0x7e46, 0x0c28, 0x080c, 0x1488, - 0x090c, 0x1410, 0x2d00, 0x784a, 0x7f4c, 0xa7bd, 0x0200, 0x7f4e, - 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e, 0x7840, 0x6842, - 0x6e46, 0xa68c, 0x0c00, 0x0120, 0x7318, 0x6b62, 0x731c, 0x6b5e, - 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0180, 0xa186, 0x0028, 0x1118, - 0x684b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0x684b, 0x0015, 0x0038, - 0xd6d4, 0x0118, 0x684b, 0x0007, 0x0010, 0x684b, 0x0000, 0x6f4e, - 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4, 0x0160, 0x7328, - 0x732c, 0x6b56, 0x0036, 0x2308, 0x2019, 0x9098, 0xad90, 0x0019, - 0x080c, 0x794f, 0x003e, 0xd6cc, 0x01c8, 0x7124, 0x695a, 0xa192, - 0x0021, 0x1250, 0x2071, 0x9098, 0x831c, 0x2300, 0xae18, 0xad90, - 0x001d, 0x080c, 0x794f, 0x0050, 0x7838, 0xd0fc, 0x0120, 0x2009, - 0x0020, 0x695a, 0x0c78, 0x2d78, 0x080c, 0x78f4, 0xd6dc, 0x1110, - 0xa006, 0x0030, 0x2001, 0x0001, 0x2071, 0x908c, 0x7218, 0x731c, - 0x080c, 0x1716, 0x00de, 0x00ee, 0x00fe, 0x007e, 0x0005, 0x20e1, - 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x080c, 0x16d1, 0x0005, 0x00d6, - 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0904, 0x778d, - 0xd1cc, 0x0904, 0x7766, 0x6948, 0x6838, 0xd0fc, 0x0590, 0x0016, - 0x684c, 0x0006, 0x6850, 0x0006, 0x684c, 0xd0ac, 0x0180, 0x6810, - 0x6914, 0xa115, 0x0160, 0x080c, 0x7621, 0x00f6, 0x6948, 0x2178, - 0x6848, 0x784a, 0x6860, 0x7862, 0x685c, 0x785e, 0x00fe, 0x6948, - 0xad90, 0x000d, 0xa198, 0x000d, 0x2009, 0x0023, 0x0156, 0x21a8, - 0x2304, 0x2012, 0x8318, 0x8210, 0x1f04, 0x7720, 0x015e, 0x000e, - 0x6852, 0x000e, 0x684e, 0x001e, 0x2168, 0x080c, 0x14af, 0x0804, - 0x778b, 0x0016, 0x00f6, 0x2178, 0x7944, 0xa184, 0x00ff, 0xa0b6, - 0x0002, 0x01b0, 0xa086, 0x0028, 0x1128, 0x684b, 0x001c, 0x784b, - 0x001c, 0x00b8, 0xd1dc, 0x0128, 0x684b, 0x0015, 0x784b, 0x0015, - 0x0080, 0xd1d4, 0x0128, 0x684b, 0x0007, 0x784b, 0x0007, 0x0048, - 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115, 0x0110, 0x080c, - 0x7621, 0x6860, 0x7862, 0x685c, 0x785e, 0x684c, 0x784e, 0x00fe, - 0x080c, 0x14af, 0x00de, 0x080c, 0x793f, 0x0428, 0x6837, 0x0103, - 0x6944, 0xa184, 0x00ff, 0xa0b6, 0x0002, 0x0180, 0xa086, 0x0028, - 0x1118, 0x684b, 0x001c, 0x00a8, 0xd1dc, 0x0118, 0x684b, 0x0015, - 0x0080, 0xd1d4, 0x0118, 0x684b, 0x0007, 0x0058, 0x684b, 0x0000, - 0x684c, 0xd0ac, 0x0130, 0x6810, 0x6914, 0xa115, 0x0110, 0x080c, - 0x7621, 0x080c, 0x46a1, 0x080c, 0x6d18, 0x00de, 0x0005, 0x080c, - 0x5c37, 0x0010, 0x080c, 0x5cc9, 0x080c, 0x7b8f, 0x0198, 0x00d6, - 0x6110, 0x2168, 0x6837, 0x0103, 0x2009, 0x8b0c, 0x210c, 0xd18c, - 0x1198, 0xd184, 0x1170, 0x6108, 0x694a, 0x6847, 0x0000, 0x080c, - 0x46a1, 0x00de, 0x080c, 0x6d18, 0x080c, 0x5d10, 0x080c, 0x5dc2, - 0x0005, 0x684b, 0x0004, 0x0c88, 0x684b, 0x0004, 0x0c70, 0xa182, - 0x0040, 0x0002, 0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x77cf, - 0x77cd, 0x77d2, 0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x77cd, - 0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x77cd, 0x080c, 0x1410, 0x080c, - 0x6d18, 0x0005, 0x0006, 0x0026, 0xa016, 0x080c, 0x16d1, 0x002e, - 0x000e, 0x0005, 0xa182, 0x0085, 0x0002, 0x77e6, 0x77e4, 0x77e4, - 0x77e4, 0x77e4, 0x77e4, 0x77e4, 0x080c, 0x1410, 0x6003, 0x000b, - 0x6106, 0x080c, 0x589c, 0x0126, 0x2091, 0x8000, 0x080c, 0x5d10, - 0x012e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, 0xa08a, 0x0085, - 0x0a0c, 0x1410, 0xa08a, 0x008c, 0x1a0c, 0x1410, 0xa082, 0x0085, - 0x0072, 0xa186, 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1410, - 0x080c, 0x5c37, 0x080c, 0x7d3c, 0x080c, 0x5d10, 0x0005, 0x7816, - 0x7818, 0x7818, 0x7816, 0x7816, 0x7816, 0x7816, 0x080c, 0x1410, - 0x080c, 0x5c37, 0x080c, 0x7d3c, 0x080c, 0x5d10, 0x0005, 0xa186, - 0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x04aa, 0xa186, - 0x0027, 0x11e8, 0x080c, 0x5c37, 0x080c, 0x2563, 0x00d6, 0x6010, - 0x2068, 0x080c, 0x7b8f, 0x0150, 0x6837, 0x0103, 0x6847, 0x0000, - 0x684b, 0x0029, 0x080c, 0x46a1, 0x080c, 0x7d30, 0x00de, 0x080c, - 0x6d18, 0x080c, 0x5d10, 0x0005, 0x080c, 0x6d55, 0x0ce0, 0xa186, - 0x0014, 0x1dd0, 0x080c, 0x5c37, 0x00d6, 0x6010, 0x2068, 0x080c, - 0x7b8f, 0x0d60, 0x6837, 0x0103, 0x6847, 0x0000, 0x684b, 0x0006, - 0x6850, 0xc0ec, 0x6852, 0x08f0, 0x7865, 0x7863, 0x7863, 0x7863, - 0x7863, 0x7863, 0x786e, 0x080c, 0x1410, 0x080c, 0x5c37, 0x6017, - 0x0014, 0x6003, 0x000c, 0x080c, 0x5d10, 0x0005, 0x080c, 0x5c37, - 0x6017, 0x0014, 0x6003, 0x000e, 0x080c, 0x5d10, 0x0005, 0xa182, - 0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, 0x6d55, - 0x0005, 0x7888, 0x7888, 0x7888, 0x7888, 0x788a, 0x78ad, 0x7888, - 0x080c, 0x1410, 0x00d6, 0x080c, 0x7d30, 0x080c, 0x7b8f, 0x01c8, - 0x6010, 0x2068, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, 0x684b, - 0x0006, 0xc0ec, 0x6852, 0x0048, 0xd0bc, 0x0118, 0x684b, 0x0002, - 0x0020, 0x684b, 0x0005, 0x080c, 0x7dce, 0x6847, 0x0000, 0x080c, - 0x46a1, 0x080c, 0x6d18, 0x00de, 0x0005, 0x00d6, 0x6010, 0x2068, - 0x080c, 0x7b8f, 0x01c8, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0128, - 0xc0ec, 0x6852, 0x684b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0x684b, - 0x0002, 0x0020, 0x684b, 0x0005, 0x080c, 0x7dce, 0x6847, 0x0000, - 0x080c, 0x46a1, 0x080c, 0x7d30, 0x00de, 0x080c, 0x6d18, 0x0005, - 0x0016, 0x00d6, 0x6010, 0x2068, 0x080c, 0x7b8f, 0x0140, 0x6837, - 0x0103, 0x684b, 0x0028, 0x6847, 0x0000, 0x080c, 0x46a1, 0x00de, - 0x001e, 0xa186, 0x0013, 0x0148, 0xa186, 0x0014, 0x0130, 0xa186, - 0x0027, 0x0118, 0x080c, 0x6d55, 0x0030, 0x080c, 0x5c37, 0x080c, - 0x7d3c, 0x080c, 0x5d10, 0x0005, 0x0056, 0x0066, 0x00d6, 0x00f6, - 0x2029, 0x0001, 0xa182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, - 0x2130, 0x2069, 0x9098, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, - 0xaf90, 0x001d, 0x080c, 0x794f, 0xa6b2, 0x0020, 0x7804, 0xa06d, - 0x0110, 0x080c, 0x14af, 0x080c, 0x1488, 0x0500, 0x8528, 0x6837, - 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d, 0x1228, - 0x2608, 0xad90, 0x000f, 0x0459, 0x0088, 0xa6b2, 0x003c, 0x2009, - 0x003c, 0x2d78, 0xad90, 0x000f, 0x0411, 0x0c28, 0x00fe, 0x852f, - 0xa5ad, 0x0003, 0x7d36, 0xa5ac, 0x0000, 0x0028, 0x00fe, 0x852f, - 0xa5ad, 0x0003, 0x7d36, 0x00de, 0x006e, 0x005e, 0x0005, 0x00f6, - 0x8dff, 0x0158, 0x6804, 0xa07d, 0x0130, 0x6807, 0x0000, 0x080c, - 0x46a1, 0x2f68, 0x0cb8, 0x080c, 0x46a1, 0x00fe, 0x0005, 0x0156, - 0xa184, 0x0001, 0x0108, 0x8108, 0x810c, 0x21a8, 0x2304, 0x8007, - 0x2012, 0x8318, 0x8210, 0x1f04, 0x7956, 0x015e, 0x0005, 0x0126, - 0x2091, 0x8000, 0x601c, 0xa084, 0x000f, 0x0013, 0x012e, 0x0005, - 0x797e, 0x7970, 0x7979, 0x7995, 0x7970, 0x7979, 0x7972, 0x7979, - 0x080c, 0x1410, 0x0036, 0x2019, 0x0010, 0x080c, 0x85f9, 0x003e, - 0x0005, 0xa006, 0x0005, 0xa085, 0x0001, 0x0005, 0x00d6, 0x6010, - 0x2068, 0x080c, 0x7b8f, 0x0178, 0xa00e, 0x2001, 0x0005, 0x080c, - 0x4773, 0x080c, 0x7dce, 0x080c, 0x46a1, 0x080c, 0x6d18, 0xa085, - 0x0001, 0x00de, 0x0005, 0xa006, 0x0ce0, 0x6000, 0xa08a, 0x0010, - 0x1a0c, 0x1410, 0x000b, 0x0005, 0x79ac, 0x79c7, 0x79ae, 0x79d6, - 0x79c4, 0x79ac, 0x7979, 0x797e, 0x797e, 0x7979, 0x7979, 0x7979, - 0x7979, 0x7979, 0x7979, 0x7979, 0x080c, 0x1410, 0x00d6, 0x6010, - 0x2068, 0x080c, 0x7b8f, 0x0110, 0x080c, 0x7dce, 0x00de, 0x6007, - 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x589c, 0x080c, - 0x5d10, 0xa085, 0x0001, 0x0005, 0x080c, 0x179e, 0x0c38, 0x00e6, - 0x2071, 0x8daa, 0x7024, 0xac06, 0x1110, 0x080c, 0x6862, 0x080c, - 0x677e, 0x00ee, 0x19d8, 0x080c, 0x7979, 0x0005, 0x0036, 0x00e6, - 0x2071, 0x8daa, 0x703c, 0xac06, 0x1138, 0x2019, 0x0000, 0x080c, - 0x68e5, 0x00ee, 0x003e, 0x0850, 0x080c, 0x6b33, 0x00ee, 0x003e, - 0x1928, 0x080c, 0x7979, 0x0005, 0x00c6, 0x601c, 0xa084, 0x000f, - 0x0013, 0x00ce, 0x0005, 0x7a01, 0x7a62, 0x7b28, 0x7a05, 0x7a01, - 0x7a01, 0x85ef, 0x6d18, 0x7a62, 0x080c, 0x7d69, 0x1110, 0x080c, - 0x6fb6, 0x0005, 0x6017, 0x0001, 0x0005, 0x6010, 0xa080, 0x0019, - 0x2c02, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1410, 0x000b, 0x0005, - 0x7a20, 0x7a22, 0x7a40, 0x7a52, 0x7a5f, 0x7a20, 0x7a01, 0x7a01, - 0x7a01, 0x7a52, 0x7a52, 0x7a20, 0x7a20, 0x7a20, 0x7a20, 0x7a5c, - 0x080c, 0x1410, 0x00e6, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052, - 0x2071, 0x8daa, 0x7024, 0xac06, 0x0180, 0x080c, 0x677e, 0x6007, - 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x6017, 0x0014, 0x080c, - 0x589c, 0x080c, 0x5d10, 0x00ee, 0x0005, 0x6017, 0x0001, 0x0cd8, - 0x00d6, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x00de, 0x6007, - 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x080c, 0x589c, 0x080c, - 0x5d10, 0x0005, 0x00d6, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850, - 0xc0b5, 0x6852, 0x00de, 0x0005, 0x080c, 0x6d18, 0x0005, 0x080c, - 0x179e, 0x08f0, 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1410, 0x000b, - 0x0005, 0x7a79, 0x7a02, 0x7a7b, 0x7a79, 0x7a7b, 0x7a79, 0x7a79, - 0x7a79, 0x79fc, 0x79fc, 0x7a79, 0x7a79, 0x7a79, 0x7a79, 0x7a79, - 0x7a79, 0x080c, 0x1410, 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084, - 0x00ff, 0x00de, 0xa08a, 0x000c, 0x1a0c, 0x1410, 0x000b, 0x0005, - 0x7a94, 0x7ac2, 0x7a94, 0x7ac2, 0x7a94, 0x7ac2, 0x7a96, 0x7a9d, - 0x7a94, 0x7ac2, 0x7a94, 0x7aae, 0x080c, 0x1410, 0x6004, 0xa08e, - 0x0004, 0x0518, 0xa08e, 0x0002, 0x0500, 0x6004, 0x080c, 0x7d69, - 0x0904, 0x7b0b, 0xa08e, 0x0021, 0x0904, 0x7b0f, 0xa08e, 0x0022, - 0x0904, 0x7b0b, 0xa08e, 0x003d, 0x0904, 0x7b0f, 0xa08e, 0x0001, - 0x1150, 0x00d6, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x00de, - 0xa086, 0x0006, 0x0110, 0x080c, 0x2563, 0x080c, 0x6fb6, 0x080c, - 0x7d3c, 0x0005, 0x00c6, 0x00d6, 0x6104, 0xa186, 0x0016, 0x05a0, - 0xa186, 0x0002, 0x1500, 0x6018, 0x2068, 0x2001, 0x8b32, 0x2004, - 0xd0ac, 0x1904, 0x7b13, 0x68a0, 0xd0bc, 0x15e8, 0x6840, 0xa084, - 0x00ff, 0xa005, 0x0180, 0x8001, 0x6842, 0x6013, 0x0000, 0x601f, - 0x0007, 0x6017, 0x0398, 0x080c, 0x6cc2, 0x0128, 0x2d00, 0x601a, - 0x601f, 0x0001, 0x0088, 0x00de, 0x00ce, 0x080c, 0x6fb6, 0x080c, - 0x2563, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2589, 0x012e, - 0x00ee, 0x080c, 0x7d3c, 0x0005, 0x2001, 0x0002, 0x080c, 0x42b9, - 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x58e2, 0x080c, 0x5d10, - 0x00de, 0x00ce, 0x0c80, 0x080c, 0x6fb6, 0x0804, 0x7abf, 0x080c, - 0x6fd3, 0x0804, 0x7abf, 0x00de, 0x00ce, 0x080c, 0x6fb6, 0x080c, - 0x2563, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x2589, 0x6013, - 0x0000, 0x601f, 0x0007, 0x6017, 0x0398, 0x012e, 0x00ee, 0x0005, - 0x6000, 0xa08a, 0x0010, 0x1a0c, 0x1410, 0x000b, 0x0005, 0x7b3f, - 0x7b3f, 0x7b3f, 0x7b3f, 0x7b3f, 0x7b3f, 0x7b3f, 0x7b3f, 0x7b3f, - 0x7a01, 0x7b3f, 0x7a02, 0x7b41, 0x7a02, 0x7b4a, 0x7b3f, 0x080c, - 0x1410, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x589c, 0x080c, - 0x5d10, 0x0005, 0x080c, 0x7d30, 0x080c, 0x7b8f, 0x0568, 0x080c, - 0x2563, 0x00d6, 0x04e1, 0x0168, 0x6010, 0x2068, 0x6837, 0x0103, - 0x684b, 0x0006, 0x6847, 0x0000, 0x6850, 0xc0ed, 0x6852, 0x080c, - 0x46a1, 0x2c68, 0x080c, 0x6cc2, 0x0140, 0x6818, 0x601a, 0x00c6, - 0x2d60, 0x080c, 0x7d3c, 0x00ce, 0x0008, 0x2d60, 0x00de, 0x6013, - 0x0000, 0x601f, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, - 0x58e2, 0x080c, 0x5d10, 0x0010, 0x080c, 0x7d3c, 0x0005, 0xa284, - 0x0003, 0x1158, 0xa282, 0x9200, 0x0240, 0x2001, 0x8b16, 0x2004, - 0xa202, 0x1218, 0xa085, 0x0001, 0x0005, 0xa006, 0x0ce8, 0x0026, - 0x6210, 0x82ff, 0x002e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, - 0x0126, 0x2091, 0x8000, 0x2061, 0x9200, 0x2071, 0x8b00, 0x7344, - 0x7064, 0xa302, 0x1290, 0x601c, 0xa206, 0x1148, 0x080c, 0x7d69, - 0x1110, 0x080c, 0x6fb6, 0x00c6, 0x080c, 0x6d18, 0x00ce, 0xace0, - 0x000c, 0x7058, 0xac02, 0x1208, 0x0c50, 0x012e, 0x000e, 0x003e, - 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0xa188, 0x8c34, - 0x210c, 0x81ff, 0x0170, 0x2061, 0x9200, 0x2071, 0x8b00, 0x0016, - 0x080c, 0x6cc2, 0x001e, 0x0138, 0x611a, 0x080c, 0x2563, 0x080c, - 0x6d18, 0xa006, 0x0010, 0xa085, 0x0001, 0x001e, 0x00ce, 0x00ee, - 0x0005, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, - 0x6cc2, 0x005e, 0x0170, 0x6612, 0x651a, 0x601f, 0x0003, 0x2009, - 0x004b, 0x080c, 0x6d3f, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce, - 0x0005, 0xa006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091, 0x8000, - 0x62a0, 0x00c6, 0x080c, 0x6cc2, 0x005e, 0x01f8, 0x6013, 0x0000, - 0x651a, 0x601f, 0x0003, 0x00c6, 0x2560, 0x080c, 0x44e6, 0x00ce, - 0x080c, 0x59d5, 0x0086, 0x2041, 0x0000, 0x080c, 0x5911, 0x2c08, - 0x080c, 0x878f, 0x008e, 0x2009, 0x004c, 0x080c, 0x6d3f, 0xa085, - 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005, 0xa006, 0x0cd0, 0x00c6, - 0x0056, 0x0126, 0x2091, 0x8000, 0x62a0, 0x00c6, 0x080c, 0x6cc2, - 0x005e, 0x0500, 0x6612, 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, - 0x00c6, 0x2560, 0x080c, 0x44e6, 0x00ce, 0x080c, 0x59d5, 0x0086, - 0x2041, 0x0000, 0x080c, 0x5911, 0x2c08, 0x080c, 0x878f, 0x008e, - 0x2009, 0x004d, 0x080c, 0x6d3f, 0xa085, 0x0001, 0x012e, 0x005e, - 0x00ce, 0x0005, 0xa006, 0x0cd0, 0x00c6, 0x0056, 0x0126, 0x2091, - 0x8000, 0x62a0, 0x00c6, 0x080c, 0x6cc2, 0x005e, 0x0500, 0x6612, - 0x651a, 0x601f, 0x0003, 0x2019, 0x0005, 0x00c6, 0x2560, 0x080c, - 0x44e6, 0x00ce, 0x080c, 0x59d5, 0x0086, 0x2041, 0x0000, 0x080c, - 0x5911, 0x2c08, 0x080c, 0x878f, 0x008e, 0x2009, 0x004e, 0x080c, - 0x6d3f, 0xa085, 0x0001, 0x012e, 0x005e, 0x00ce, 0x0005, 0xa006, - 0x0cd0, 0x00c6, 0x0096, 0x0086, 0x0056, 0x0126, 0x2091, 0x8000, - 0x62a0, 0x00c6, 0x080c, 0x6cc2, 0x005e, 0x0904, 0x7cc7, 0x6612, - 0x651a, 0x601f, 0x0003, 0x00c6, 0x2560, 0x080c, 0x4488, 0x0118, - 0x2001, 0x7c8d, 0x0028, 0x080c, 0x445a, 0x0160, 0x2001, 0x7c93, - 0x0006, 0xa00e, 0x2001, 0x0004, 0x080c, 0x4773, 0x080c, 0x46a1, - 0x000e, 0x0807, 0x2019, 0x0004, 0x080c, 0x5bd9, 0x0036, 0x003e, - 0x00ce, 0x2041, 0x0001, 0x2608, 0x080c, 0x59ee, 0x080c, 0x5911, - 0x2c08, 0x2648, 0x080c, 0x878f, 0x6018, 0xa080, 0x000f, 0x200c, - 0x81ff, 0x090c, 0x5a81, 0x2009, 0x0052, 0x080c, 0x6d3f, 0xa085, - 0x0001, 0x012e, 0x005e, 0x008e, 0x009e, 0x00ce, 0x0005, 0xa006, - 0x0cc0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x6cc2, - 0x001e, 0x0178, 0x660a, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, - 0x2009, 0x001f, 0x080c, 0x6d3f, 0xa085, 0x0001, 0x012e, 0x00ce, - 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, - 0x080c, 0x6cc2, 0x001e, 0x0178, 0x660a, 0x611a, 0x601f, 0x0008, - 0x2d00, 0x6012, 0x2009, 0x0021, 0x080c, 0x6d3f, 0xa085, 0x0001, - 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, 0x0126, 0x2091, - 0x8000, 0x00c6, 0x080c, 0x6cc2, 0x001e, 0x0178, 0x660a, 0x611a, - 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x003d, 0x080c, 0x6d3f, - 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x6cc2, 0x001e, 0x0170, - 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x080c, - 0x6d3f, 0xa085, 0x0001, 0x012e, 0x00ce, 0x0005, 0xa006, 0x0cd8, - 0x0026, 0x00d6, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0110, 0x8211, - 0x6a3e, 0x00de, 0x002e, 0x0005, 0x0006, 0x6013, 0x0000, 0x601f, - 0x0007, 0x2001, 0x8da2, 0x2004, 0x6016, 0x000e, 0x0005, 0x0066, - 0x00c6, 0x00d6, 0x2031, 0x8b52, 0x2634, 0xd6e4, 0x0128, 0x6618, - 0x2660, 0x6e48, 0x080c, 0x4413, 0x00de, 0x00ce, 0x006e, 0x0005, - 0x0006, 0x0016, 0x6004, 0xa08e, 0x0002, 0x0140, 0xa08e, 0x0003, - 0x0128, 0xa08e, 0x0004, 0x0110, 0xa085, 0x0001, 0x001e, 0x000e, - 0x0005, 0x0006, 0x00d6, 0x6010, 0xa06d, 0x0128, 0x6838, 0xd0fc, - 0x0110, 0xa006, 0x0010, 0xa085, 0x0001, 0x00de, 0x000e, 0x0005, - 0x00c6, 0x0126, 0x2091, 0x8000, 0x00c6, 0x080c, 0x6cc2, 0x001e, - 0x0180, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x080c, 0x2563, - 0x2009, 0x0028, 0x080c, 0x6d3f, 0xa085, 0x0001, 0x012e, 0x00ce, - 0x0005, 0xa006, 0x0cd8, 0xa186, 0x0015, 0x1178, 0x2011, 0x8b20, - 0x2204, 0xa086, 0x0074, 0x1148, 0x080c, 0x72a4, 0x6003, 0x0001, - 0x6007, 0x0029, 0x080c, 0x58e2, 0x0020, 0x080c, 0x6fb6, 0x080c, - 0x6d18, 0x0005, 0xa186, 0x0015, 0x11b0, 0x2011, 0x8b20, 0x2204, - 0xa086, 0x0014, 0x1180, 0x00d6, 0x6018, 0x2068, 0x080c, 0x43a0, - 0x00de, 0x080c, 0x72ae, 0x1138, 0x2001, 0x0006, 0x080c, 0x42b9, - 0x080c, 0x6dc7, 0x0020, 0x080c, 0x6fb6, 0x080c, 0x6d18, 0x0005, - 0x6848, 0xa086, 0x0005, 0x1108, 0x0009, 0x0005, 0x6850, 0xc0ad, - 0x6852, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x2001, 0x8d9e, - 0x200c, 0x8000, 0x2014, 0x2001, 0x0064, 0x080c, 0x575a, 0x2001, - 0x8da2, 0x82ff, 0x1110, 0x2011, 0x0002, 0x2202, 0x003e, 0x002e, - 0x001e, 0x000e, 0x0005, 0x0006, 0x2001, 0x8da2, 0x2003, 0x0028, - 0x2001, 0x8da3, 0x2003, 0x07d0, 0x000e, 0x0005, 0x00d6, 0x6024, - 0xa06d, 0x0110, 0x080c, 0x149f, 0x00de, 0x0005, 0x0066, 0x6000, - 0xa0b2, 0x0010, 0x1a0c, 0x1410, 0x0013, 0x006e, 0x0005, 0x7e17, - 0x80cf, 0x81c5, 0x7e17, 0x7e17, 0x7e17, 0x7e17, 0x7e17, 0x7e4f, - 0x8231, 0x7e17, 0x7e17, 0x7e17, 0x7e17, 0x7e17, 0x7e17, 0x080c, - 0x1410, 0x0066, 0x6000, 0xa0b2, 0x0010, 0x1a0c, 0x1410, 0x0013, - 0x006e, 0x0005, 0x7e32, 0x8594, 0x7e32, 0x7e32, 0x7e32, 0x7e32, - 0x7e32, 0x7e32, 0x8558, 0x85dc, 0x7e32, 0x89b0, 0x89e0, 0x89b0, - 0x89e0, 0x7e32, 0x080c, 0x1410, 0x0066, 0x6000, 0xa0b2, 0x0010, - 0x1a0c, 0x1410, 0x0013, 0x006e, 0x0005, 0x7e4d, 0x8364, 0x840f, - 0x8433, 0x847e, 0x7e4d, 0x7e4d, 0x84ef, 0x823d, 0x8532, 0x8545, - 0x7e4d, 0x7e4d, 0x7e4d, 0x7e4d, 0x7e4d, 0x080c, 0x1410, 0xa1b2, - 0x0040, 0x1a0c, 0x1410, 0x2100, 0x0002, 0x7e98, 0x7fa9, 0x7e98, - 0x7e98, 0x7e98, 0x7fb0, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, - 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, - 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e9a, 0x7ec4, 0x7ecf, 0x7f13, - 0x7f2d, 0x7f63, 0x7f96, 0x7e98, 0x7e98, 0x7fb3, 0x7e98, 0x7e98, - 0x7fc2, 0x7fc9, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x805e, - 0x7e98, 0x7e98, 0x8068, 0x7e98, 0x7e98, 0x8016, 0x7e98, 0x7e98, - 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, - 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, 0x7e98, - 0x080c, 0x1410, 0x080c, 0x45e7, 0x6618, 0x00c6, 0x2660, 0x080c, - 0x4319, 0x00ce, 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, - 0x0006, 0x0278, 0x080c, 0x86d3, 0x1904, 0x7f0d, 0x080c, 0x867e, - 0x1120, 0x6007, 0x0008, 0x0804, 0x7fa4, 0x6007, 0x0009, 0x0804, - 0x7fa4, 0x080c, 0x884f, 0x0128, 0x080c, 0x86d3, 0x0d78, 0x0804, - 0x7f0d, 0x6013, 0x1900, 0x0c88, 0x6106, 0x080c, 0x862e, 0x6007, - 0x0006, 0x0804, 0x7fa4, 0x6007, 0x0007, 0x0804, 0x7fa4, 0x080c, - 0x89fb, 0x1904, 0x8079, 0x00d6, 0x6618, 0x2668, 0x6e04, 0xa6b4, - 0xff00, 0x8637, 0xa686, 0x0006, 0x01a0, 0xa686, 0x0004, 0x0188, - 0x080c, 0x4c42, 0x1160, 0x6e04, 0xa6b4, 0x00ff, 0xa686, 0x0006, - 0x0140, 0xa686, 0x0004, 0x0128, 0xa686, 0x0005, 0x0110, 0x00de, - 0x00e0, 0x080c, 0x8731, 0x11a0, 0xa686, 0x0006, 0x1150, 0x0026, - 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x25a8, - 0x002e, 0x080c, 0x43a0, 0x6007, 0x000a, 0x00de, 0x0804, 0x7fa4, - 0x6007, 0x000b, 0x00de, 0x0804, 0x7fa4, 0x080c, 0x2563, 0x6007, - 0x0001, 0x0804, 0x7fa4, 0x080c, 0x89fb, 0x1904, 0x8079, 0x6618, - 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa686, 0x0707, 0x0d70, 0x0026, - 0x6218, 0xa290, 0x0028, 0x2214, 0x2009, 0x0000, 0x080c, 0x25a8, - 0x002e, 0x6007, 0x000c, 0x0804, 0x7fa4, 0x080c, 0x45e7, 0x6618, - 0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x02b0, - 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0004, 0x0118, 0xa686, 0x0006, - 0x1960, 0x080c, 0x873e, 0x1120, 0x6007, 0x000e, 0x0804, 0x7fa4, - 0x080c, 0x2563, 0x6007, 0x000f, 0x0804, 0x7fa4, 0x080c, 0x884f, - 0x0160, 0xa6b4, 0xff00, 0x8637, 0xa682, 0x0004, 0x0a04, 0x7f0d, - 0xa682, 0x0007, 0x0e30, 0x0804, 0x7f0d, 0x6013, 0x1900, 0x6007, - 0x0009, 0x0804, 0x7fa4, 0x080c, 0x45e7, 0x6618, 0xa6b0, 0x0001, - 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x02c0, 0xa6b4, 0xff00, - 0x8637, 0xa686, 0x0004, 0x0120, 0xa686, 0x0006, 0x1904, 0x7f0d, - 0x080c, 0x8766, 0x1130, 0x080c, 0x867e, 0x1118, 0x6007, 0x0010, - 0x0418, 0x080c, 0x2563, 0x6007, 0x0011, 0x00f0, 0x080c, 0x884f, - 0x0140, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0d48, 0x0804, - 0x7f0d, 0x6013, 0x1900, 0x6007, 0x0009, 0x0070, 0x7030, 0xa086, - 0x6000, 0x0140, 0x080c, 0x89fb, 0x1904, 0x8079, 0x080c, 0x807c, - 0x1904, 0x7f0d, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x58e2, - 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x58e2, 0x0cc0, - 0x6007, 0x0005, 0x0cc0, 0x080c, 0x89fb, 0x1904, 0x8079, 0x080c, - 0x807c, 0x1904, 0x7f0d, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c, - 0x58e2, 0x0005, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x58e2, - 0x0005, 0x080c, 0x89fb, 0x1904, 0x8079, 0x080c, 0x807c, 0x1904, - 0x7f0d, 0x0016, 0x0026, 0x2011, 0x9091, 0x2214, 0xa286, 0xffff, - 0x0190, 0x2c08, 0x080c, 0x7b7f, 0x01d8, 0x2260, 0x2011, 0x9090, - 0x2214, 0x6008, 0xa206, 0x11a0, 0x6018, 0xa190, 0x0006, 0x2214, - 0xa206, 0x01e0, 0x0068, 0x2011, 0x9090, 0x2214, 0x2c08, 0x080c, - 0x8956, 0x11a0, 0x2011, 0x9091, 0x2214, 0xa286, 0xffff, 0x01a0, - 0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x2011, 0x9089, 0x2214, - 0xa296, 0xffff, 0x1160, 0x6007, 0x0025, 0x0048, 0x601c, 0xa086, - 0x0007, 0x1d70, 0x080c, 0x6d18, 0x2160, 0x6007, 0x0025, 0x6003, - 0x0001, 0x080c, 0x58e2, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, - 0x080c, 0x42a7, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, - 0x2019, 0x8b05, 0x2011, 0x9096, 0x080c, 0x7326, 0x003e, 0x002e, - 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0x7fa4, 0x080c, - 0x715d, 0x080c, 0x4c42, 0x1548, 0x0006, 0x0026, 0x0036, 0x2011, - 0x8b23, 0x2204, 0x8000, 0x2012, 0xa084, 0x0007, 0x0190, 0x2001, - 0x8d9c, 0x2003, 0xaaaa, 0x2001, 0x8d9d, 0x2003, 0x0001, 0x2001, - 0x8b00, 0x2003, 0x0001, 0x080c, 0x4b8b, 0x003e, 0x002e, 0x000e, - 0x0005, 0x2001, 0x0001, 0x080c, 0x2298, 0x080c, 0x4c54, 0x1110, - 0x080c, 0x4c15, 0x003e, 0x002e, 0x000e, 0x0005, 0x6106, 0x0479, - 0x6007, 0x002b, 0x0804, 0x7fa4, 0x6007, 0x002c, 0x0804, 0x7fa4, - 0x080c, 0x89fb, 0x1170, 0x0081, 0x1904, 0x7f0d, 0x6106, 0x0419, - 0x1120, 0x6007, 0x002e, 0x0804, 0x7fa4, 0x6007, 0x002f, 0x0804, - 0x7fa4, 0x080c, 0x6d18, 0x0005, 0x00d6, 0x0066, 0x6618, 0x2668, - 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0128, 0xa686, - 0x0004, 0x0110, 0xa085, 0x0001, 0x006e, 0x00de, 0x0005, 0x00d6, - 0x0439, 0x00de, 0x0005, 0x00d6, 0x0481, 0x11e0, 0x680c, 0xa08c, - 0xff00, 0x6824, 0xa084, 0x00ff, 0xa115, 0x6212, 0xd1e4, 0x0118, - 0x2009, 0x0001, 0x0060, 0xd1ec, 0x0168, 0x6920, 0xa18c, 0x00ff, - 0x6824, 0x080c, 0x22e9, 0x1130, 0x2110, 0x2009, 0x0000, 0x080c, - 0x25a8, 0x0018, 0xa085, 0x0001, 0x0008, 0xa006, 0x00de, 0x0005, - 0x2069, 0x908d, 0x6800, 0xa082, 0x0010, 0x1228, 0x6013, 0x0000, - 0xa085, 0x0001, 0x0008, 0xa006, 0x0005, 0x6013, 0x0000, 0x2069, - 0x908c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800, 0x0005, 0x6004, - 0xa0b2, 0x0040, 0x1a0c, 0x1410, 0xa1b6, 0x0013, 0x1110, 0x2008, - 0x0092, 0xa1b6, 0x0027, 0x0120, 0xa1b6, 0x0014, 0x190c, 0x1410, - 0x2001, 0x0007, 0x080c, 0x42c7, 0x080c, 0x5c37, 0x080c, 0x7d3c, - 0x080c, 0x5d10, 0x0005, 0x812b, 0x812d, 0x812b, 0x812b, 0x812b, - 0x812d, 0x813b, 0x81a3, 0x816e, 0x81a3, 0x817f, 0x81a3, 0x813b, - 0x81a3, 0x819b, 0x81a3, 0x819b, 0x81a3, 0x81a3, 0x812b, 0x812b, - 0x812b, 0x812b, 0x812b, 0x812b, 0x812b, 0x812b, 0x812b, 0x812b, - 0x812b, 0x812b, 0x812b, 0x81a3, 0x812b, 0x812b, 0x81a3, 0x812b, - 0x81a3, 0x81a3, 0x812b, 0x812b, 0x812b, 0x812b, 0x81a3, 0x81a3, - 0x812b, 0x81a3, 0x81a3, 0x812b, 0x8135, 0x812b, 0x812b, 0x812b, - 0x812b, 0x812b, 0x812b, 0x812b, 0x812b, 0x812b, 0x812b, 0x812b, - 0x812b, 0x812b, 0x812b, 0x080c, 0x1410, 0x080c, 0x5c37, 0x6003, - 0x0002, 0x080c, 0x5d10, 0x0804, 0x81a9, 0x2001, 0x0000, 0x080c, - 0x42a7, 0x0804, 0x81a3, 0x00f6, 0x2079, 0x8b51, 0x7804, 0x00fe, - 0xd0ac, 0x1904, 0x81a3, 0x2001, 0x0000, 0x080c, 0x42a7, 0x6018, - 0xa080, 0x0004, 0x2004, 0xa086, 0x00ff, 0x1138, 0x00f6, 0x2079, - 0x8b00, 0x7894, 0x8000, 0x7896, 0x00fe, 0x2001, 0x0002, 0x080c, - 0x42b9, 0x080c, 0x5c37, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, - 0x0002, 0x080c, 0x58e2, 0x080c, 0x5d10, 0x00c6, 0x6118, 0x2160, - 0x2009, 0x0001, 0x080c, 0x5619, 0x00ce, 0x04d8, 0x6618, 0x00d6, - 0x2668, 0x6e04, 0x00de, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, - 0x0550, 0xa686, 0x0004, 0x0538, 0x2001, 0x0004, 0x0410, 0x2001, - 0x8b00, 0x2004, 0xa086, 0x0003, 0x1110, 0x080c, 0x3689, 0x2001, - 0x0006, 0x0401, 0x6618, 0x00d6, 0x2668, 0x6e04, 0x00de, 0xa6b4, - 0xff00, 0x8637, 0xa686, 0x0006, 0x0170, 0x2001, 0x0006, 0x0048, - 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0061, 0x0020, 0x0018, - 0x0010, 0x080c, 0x42c7, 0x080c, 0x5c37, 0x080c, 0x6d18, 0x080c, - 0x5d10, 0x0005, 0x0016, 0x00d6, 0x6118, 0x2168, 0x6900, 0xd184, - 0x0188, 0x6104, 0xa18e, 0x000a, 0x1128, 0x699c, 0xd1a4, 0x1110, - 0x2001, 0x0007, 0x080c, 0x42b9, 0x2001, 0x0000, 0x080c, 0x42a7, - 0x080c, 0x2589, 0x00de, 0x001e, 0x0005, 0x00d6, 0x6618, 0x2668, - 0x6804, 0xa084, 0xff00, 0x8007, 0x00de, 0xa0b2, 0x000c, 0x1a0c, - 0x1410, 0xa1b6, 0x0015, 0x1110, 0x003b, 0x0028, 0xa1b6, 0x0016, - 0x190c, 0x1410, 0x04eb, 0x0005, 0x7045, 0x7045, 0x7045, 0x7045, - 0x7045, 0x7045, 0x7045, 0x81e8, 0x7045, 0x7045, 0x7045, 0x7045, - 0x00f6, 0x2079, 0x8b51, 0x7804, 0x00fe, 0xd0ac, 0x1198, 0x2001, - 0x0000, 0x080c, 0x42a7, 0x2001, 0x0002, 0x080c, 0x42b9, 0x601f, - 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x58e2, 0x080c, - 0x5d10, 0x00a8, 0x2011, 0x9083, 0x2204, 0x8211, 0x220c, 0x080c, - 0x22e9, 0x1168, 0x00c6, 0x080c, 0x430a, 0x0120, 0x00ce, 0x080c, - 0x6d18, 0x0028, 0x080c, 0x4118, 0x00ce, 0x080c, 0x6d18, 0x0005, - 0x7045, 0x7045, 0x7045, 0x7045, 0x7045, 0x7045, 0x7045, 0x8224, - 0x7045, 0x7045, 0x7045, 0x7045, 0x080c, 0x72a1, 0x1138, 0x6003, - 0x0001, 0x6007, 0x0001, 0x080c, 0x58e2, 0x0010, 0x080c, 0x6d18, - 0x0005, 0x6004, 0xa08a, 0x0040, 0x1a0c, 0x1410, 0x080c, 0x5c37, - 0x080c, 0x7d3c, 0x080c, 0x5d10, 0x0005, 0xa182, 0x0040, 0x0002, - 0x8253, 0x8253, 0x8253, 0x8253, 0x8255, 0x8253, 0x8253, 0x8253, - 0x8253, 0x8253, 0x8253, 0x8253, 0x8253, 0x8253, 0x8253, 0x8253, - 0x8253, 0x8253, 0x8253, 0x080c, 0x1410, 0x00d6, 0x00e6, 0x00f6, - 0x0156, 0x0046, 0x0026, 0x6106, 0x2071, 0x9080, 0x7444, 0xa4a4, - 0xff00, 0x0904, 0x82bd, 0xa486, 0x2000, 0x0180, 0xa486, 0x0400, - 0x0168, 0xa486, 0x1000, 0x0108, 0x0078, 0x2069, 0x8e2a, 0x6a00, - 0xd284, 0x0904, 0x8324, 0xc2cd, 0x6a02, 0x0030, 0x2009, 0x0001, - 0x2011, 0x0200, 0x080c, 0x5734, 0x080c, 0x1488, 0x090c, 0x1410, - 0x6003, 0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, - 0x0000, 0x6c5a, 0x2c00, 0x685e, 0x6008, 0x68b2, 0x6018, 0x2078, - 0x78a0, 0x8007, 0x7130, 0x694a, 0x0016, 0xa084, 0xff00, 0x6846, - 0x684f, 0x0000, 0x6857, 0x0036, 0x080c, 0x46a1, 0x001e, 0xa486, - 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0x891c, 0x0804, 0x8312, - 0xa486, 0x0400, 0x1130, 0x2019, 0x0002, 0x080c, 0x88de, 0x0804, - 0x8312, 0xa486, 0x0200, 0x1110, 0x080c, 0x88cb, 0xa486, 0x1000, - 0x1110, 0x080c, 0x8909, 0x0804, 0x8312, 0x2069, 0x8e2a, 0x6a00, - 0xd284, 0x0904, 0x8361, 0xa284, 0x0300, 0x1904, 0x835b, 0x6804, - 0xa005, 0x0904, 0x834c, 0x2d78, 0x6003, 0x0007, 0x080c, 0x146f, - 0x0904, 0x8319, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, - 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000, - 0x6008, 0x68b2, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, - 0x7130, 0x6986, 0x6846, 0x6853, 0x003d, 0x7244, 0xa294, 0x0003, - 0xa286, 0x0002, 0x1118, 0x684f, 0x0040, 0x0040, 0xa286, 0x0001, - 0x1118, 0x684f, 0x0080, 0x0010, 0x684f, 0x0000, 0x20a9, 0x000a, - 0x2001, 0x9090, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112, 0x8000, - 0x8210, 0x1f04, 0x8304, 0x200c, 0x6982, 0x8000, 0x200c, 0x697e, - 0x080c, 0x46a1, 0x002e, 0x004e, 0x015e, 0x00fe, 0x00ee, 0x00de, - 0x0005, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, - 0x589c, 0x080c, 0x5d10, 0x0c70, 0x2069, 0x9092, 0x2d04, 0xa084, - 0xff00, 0xa086, 0x1200, 0x11a8, 0x2069, 0x9080, 0x686c, 0xa084, - 0x00ff, 0x0016, 0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x001e, - 0x6003, 0x0001, 0x6007, 0x0043, 0x080c, 0x589c, 0x080c, 0x5d10, - 0x0888, 0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, - 0x589c, 0x080c, 0x5d10, 0x0830, 0x6013, 0x0300, 0x0010, 0x6013, - 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x589c, 0x080c, - 0x5d10, 0x0804, 0x8312, 0x6013, 0x0500, 0x0c98, 0x6013, 0x0600, - 0x0818, 0x6013, 0x0200, 0x0800, 0xa186, 0x0013, 0x1170, 0x6004, - 0xa08a, 0x0040, 0x0a0c, 0x1410, 0xa08a, 0x0053, 0x1a0c, 0x1410, - 0xa082, 0x0040, 0x2008, 0x0804, 0x83cf, 0xa186, 0x0047, 0x11b8, - 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x0126, 0x2091, 0x2400, - 0x0006, 0x0016, 0x0026, 0x080c, 0x578e, 0x002e, 0x001e, 0x000e, - 0x012e, 0x6000, 0xa086, 0x0002, 0x1170, 0x0804, 0x840f, 0xa186, - 0x0027, 0x0120, 0xa186, 0x0014, 0x190c, 0x1410, 0x6004, 0xa082, - 0x0040, 0x2008, 0x001a, 0x080c, 0x6d55, 0x0005, 0x83b1, 0x83b3, - 0x83b3, 0x83b1, 0x83b1, 0x83b1, 0x83b1, 0x83b1, 0x83b1, 0x83b1, - 0x83b1, 0x83b1, 0x83b1, 0x83b1, 0x83b1, 0x83b1, 0x83b1, 0x83b1, - 0x83b1, 0x080c, 0x1410, 0x080c, 0x5c37, 0x080c, 0x5d10, 0x0036, - 0x00d6, 0x6010, 0xa06d, 0x0180, 0xad84, 0xf000, 0x0168, 0x2019, - 0x0004, 0x080c, 0x8942, 0x6013, 0x0000, 0x6014, 0xa005, 0x1110, - 0x6017, 0x0014, 0x6003, 0x0007, 0x00de, 0x003e, 0x0005, 0x0002, - 0x83e3, 0x8400, 0x83ec, 0x8409, 0x83e3, 0x83e3, 0x83e3, 0x83e3, - 0x83e3, 0x83e3, 0x83e3, 0x83e3, 0x83e3, 0x83e3, 0x83e3, 0x83e3, - 0x83e3, 0x83e3, 0x83e3, 0x080c, 0x1410, 0x6010, 0xa088, 0x0013, - 0x2104, 0xa085, 0x0400, 0x200a, 0x080c, 0x5c37, 0x6010, 0xa080, - 0x0013, 0x2004, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, - 0x080c, 0x6d3f, 0x0010, 0x6003, 0x0002, 0x080c, 0x5d10, 0x0005, - 0x080c, 0x5c37, 0x080c, 0x570f, 0x080c, 0x6d18, 0x080c, 0x5d10, - 0x0005, 0x080c, 0x5c37, 0x2009, 0x0041, 0x0804, 0x84ef, 0xa182, - 0x0040, 0x0002, 0x8425, 0x8427, 0x8425, 0x8425, 0x8425, 0x8425, - 0x8425, 0x8428, 0x8425, 0x8425, 0x8425, 0x8425, 0x8425, 0x8425, - 0x8425, 0x8425, 0x8425, 0x8425, 0x8425, 0x080c, 0x1410, 0x0005, - 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, - 0x080c, 0x16d1, 0x0005, 0xa182, 0x0040, 0x0002, 0x8449, 0x8449, - 0x8449, 0x8449, 0x8449, 0x8449, 0x8449, 0x8449, 0x8449, 0x844b, - 0x846b, 0x8449, 0x8449, 0x8449, 0x8449, 0x846b, 0x8449, 0x8449, - 0x8449, 0x080c, 0x1410, 0x080c, 0x5cc9, 0x080c, 0x5dc2, 0x6010, - 0x00d6, 0x2068, 0x684c, 0xd0fc, 0x0150, 0xa08c, 0x0003, 0xa18e, - 0x0002, 0x0158, 0x2009, 0x0041, 0x00de, 0x0804, 0x84ef, 0x6003, - 0x0007, 0x080c, 0x570f, 0x00de, 0x0005, 0x080c, 0x570f, 0x080c, - 0x6d18, 0x00de, 0x0cc8, 0x0036, 0x080c, 0x5cc9, 0x080c, 0x5dc2, - 0x6010, 0x00d6, 0x2068, 0x2019, 0x0004, 0x080c, 0x8942, 0x080c, - 0x7d3c, 0x6017, 0x0028, 0x00de, 0x003e, 0x0005, 0xa186, 0x0013, - 0x1150, 0x6004, 0xa086, 0x0042, 0x190c, 0x1410, 0x080c, 0x5c37, - 0x080c, 0x5d10, 0x0005, 0xa186, 0x0027, 0x0118, 0xa186, 0x0014, - 0x1180, 0x6004, 0xa086, 0x0042, 0x190c, 0x1410, 0x2001, 0x0007, - 0x080c, 0x42c7, 0x080c, 0x5c37, 0x080c, 0x7d3c, 0x080c, 0x5d10, - 0x0005, 0xa182, 0x0040, 0x0002, 0x84b7, 0x84b7, 0x84b7, 0x84b7, - 0x84b7, 0x84b7, 0x84b7, 0x84b9, 0x84c5, 0x84b7, 0x84b7, 0x84b7, - 0x84b7, 0x84b7, 0x84b7, 0x84b7, 0x84b7, 0x84b7, 0x84b7, 0x080c, - 0x1410, 0x0036, 0x0046, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, - 0x080c, 0x16d1, 0x004e, 0x003e, 0x0005, 0x6010, 0x00d6, 0x2068, - 0x6810, 0x6a14, 0xa20d, 0x1168, 0x684c, 0xd0fc, 0x0120, 0x2009, - 0x0041, 0x00de, 0x00e0, 0x6003, 0x0007, 0x080c, 0x570f, 0x00de, - 0x0005, 0x6003, 0x0007, 0x0021, 0x080c, 0x5711, 0x00de, 0x0005, - 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0xa291, 0x0000, 0x2009, - 0x0009, 0x0010, 0x2009, 0x0015, 0x6a6a, 0x6866, 0x0005, 0xa182, - 0x0040, 0x0002, 0x8505, 0x8507, 0x8513, 0x851f, 0x8505, 0x8505, - 0x8505, 0x852e, 0x8505, 0x8505, 0x8505, 0x8505, 0x8505, 0x8505, - 0x8505, 0x8505, 0x8505, 0x8505, 0x8505, 0x080c, 0x1410, 0x6003, - 0x0001, 0x6106, 0x080c, 0x589c, 0x0126, 0x2091, 0x8000, 0x080c, - 0x5d10, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x589c, - 0x0126, 0x2091, 0x8000, 0x080c, 0x5d10, 0x012e, 0x0005, 0x6003, - 0x0003, 0x6106, 0x2c10, 0x080c, 0x1bc8, 0x0126, 0x2091, 0x8000, - 0x080c, 0x58ff, 0x080c, 0x5dc2, 0x012e, 0x0005, 0xa016, 0x080c, - 0x16d1, 0x0005, 0x080c, 0x5c37, 0x6110, 0x81ff, 0x0148, 0x00d6, - 0x2168, 0x0036, 0x2019, 0x0029, 0x080c, 0x8942, 0x003e, 0x00de, - 0x080c, 0x7d3c, 0x080c, 0x5d10, 0x0005, 0x080c, 0x5cc9, 0x6110, - 0x81ff, 0x0148, 0x00d6, 0x2168, 0x0036, 0x2019, 0x0029, 0x080c, - 0x8942, 0x003e, 0x00de, 0x080c, 0x7d3c, 0x080c, 0x5dc2, 0x0005, - 0xa182, 0x0085, 0x0002, 0x8564, 0x8562, 0x8562, 0x8570, 0x8562, - 0x8562, 0x8562, 0x080c, 0x1410, 0x6003, 0x000b, 0x6106, 0x080c, - 0x589c, 0x0126, 0x2091, 0x8000, 0x080c, 0x5d10, 0x012e, 0x0005, - 0x0026, 0x00e6, 0x080c, 0x89fb, 0x0118, 0x080c, 0x6d18, 0x00c8, - 0x2071, 0x9080, 0x7224, 0x6212, 0x7220, 0x080c, 0x881c, 0x0118, - 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0xa296, 0xffff, - 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x589c, 0x080c, - 0x5d10, 0x00ee, 0x002e, 0x0005, 0xa186, 0x0013, 0x1160, 0x6004, - 0xa08a, 0x0085, 0x0a0c, 0x1410, 0xa08a, 0x008c, 0x1a0c, 0x1410, - 0xa082, 0x0085, 0x00a2, 0xa186, 0x0027, 0x0130, 0xa186, 0x0014, - 0x0118, 0x080c, 0x6d55, 0x0050, 0x2001, 0x0007, 0x080c, 0x42c7, - 0x080c, 0x5c37, 0x080c, 0x7d3c, 0x080c, 0x5d10, 0x0005, 0x85be, - 0x85c0, 0x85c0, 0x85be, 0x85be, 0x85be, 0x85be, 0x080c, 0x1410, - 0x080c, 0x5c37, 0x080c, 0x6d18, 0x080c, 0x5d10, 0x0005, 0xa182, - 0x0085, 0x0a0c, 0x1410, 0xa182, 0x008c, 0x1a0c, 0x1410, 0xa182, - 0x0085, 0x0002, 0x85d9, 0x85d9, 0x85d9, 0x85db, 0x85d9, 0x85d9, - 0x85d9, 0x080c, 0x1410, 0x0005, 0xa186, 0x0013, 0x0148, 0xa186, - 0x0014, 0x0130, 0xa186, 0x0027, 0x0118, 0x080c, 0x6d55, 0x0030, - 0x080c, 0x5c37, 0x080c, 0x7d3c, 0x080c, 0x5d10, 0x0005, 0x0036, - 0x2019, 0x000b, 0x0031, 0x601f, 0x0006, 0x6003, 0x0007, 0x003e, - 0x0005, 0x0126, 0x0036, 0x0086, 0x2091, 0x8000, 0x2c40, 0x080c, - 0x6a17, 0x1540, 0x080c, 0x6aaf, 0x1528, 0x6000, 0xa086, 0x0000, - 0x0508, 0x601c, 0xa086, 0x0007, 0x01e8, 0x00d6, 0x6000, 0xa086, - 0x0004, 0x1140, 0x601f, 0x0007, 0x2001, 0x8da2, 0x2004, 0x6016, - 0x080c, 0x179e, 0x6010, 0x2068, 0x080c, 0x7b8f, 0x0110, 0x080c, - 0x8942, 0x00de, 0x6013, 0x0000, 0x601f, 0x0007, 0x2001, 0x8da2, - 0x2004, 0x6016, 0x008e, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, - 0x0036, 0x0156, 0x2079, 0x9080, 0x7938, 0x783c, 0x080c, 0x22e9, - 0x1904, 0x8679, 0x0016, 0x00c6, 0x080c, 0x430a, 0x15c0, 0x2011, - 0x9090, 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0x7326, 0x1578, - 0x001e, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x6b6f, - 0x080c, 0x59d5, 0x0086, 0x2041, 0x0000, 0x080c, 0x5911, 0x008e, - 0x001e, 0x0086, 0x2041, 0x0000, 0x080c, 0x878f, 0x008e, 0x080c, - 0x44e6, 0x0026, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006, - 0x0118, 0xa286, 0x0004, 0x1118, 0x62a0, 0x080c, 0x25fb, 0x002e, - 0x001e, 0x080c, 0x4118, 0x6612, 0x6516, 0xa006, 0x0010, 0x00ce, - 0x001e, 0x015e, 0x003e, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, - 0x0016, 0x2009, 0x8b20, 0x2104, 0xa086, 0x0074, 0x1904, 0x86c9, - 0x2069, 0x908e, 0x690c, 0xa182, 0x0100, 0x0678, 0x6908, 0xa184, - 0x8000, 0x05a0, 0x2001, 0x8d9c, 0x2004, 0xa005, 0x1118, 0xa184, - 0x0800, 0x0560, 0x6910, 0xa18a, 0x0001, 0x0610, 0x6914, 0x2069, - 0x90ae, 0x6904, 0x81ff, 0x1198, 0x690c, 0xa182, 0x0100, 0x02a8, - 0x6908, 0x81ff, 0x1178, 0x6910, 0xa18a, 0x0001, 0x0288, 0x6918, - 0xa18a, 0x0001, 0x0298, 0x00d0, 0x6013, 0x0100, 0x00a0, 0x6013, - 0x0300, 0x0088, 0x6013, 0x0500, 0x0070, 0x6013, 0x0700, 0x0058, - 0x6013, 0x0900, 0x0040, 0x6013, 0x0b00, 0x0028, 0x6013, 0x0f00, - 0x0010, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0008, 0xa006, 0x001e, - 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x0026, 0x0036, 0x0156, - 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006, 0x0190, - 0xa286, 0x0004, 0x0178, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, - 0x0148, 0xa286, 0x0004, 0x0130, 0x00c6, 0x2d60, 0x080c, 0x4319, - 0x00ce, 0x04c0, 0x2011, 0x9096, 0xad98, 0x000a, 0x20a9, 0x0004, - 0x080c, 0x7326, 0x1580, 0x2011, 0x909a, 0xad98, 0x0006, 0x20a9, - 0x0004, 0x080c, 0x7326, 0x1538, 0x0046, 0x0016, 0x6aa0, 0xa294, - 0x00ff, 0x8227, 0xa006, 0x2009, 0x8b52, 0x210c, 0xd1a4, 0x0138, - 0x2009, 0x0029, 0x080c, 0x8982, 0x6800, 0xc0e5, 0x6802, 0x2019, - 0x0029, 0x080c, 0x59d5, 0x0086, 0x2041, 0x0000, 0x080c, 0x5911, - 0x2c08, 0x080c, 0x878f, 0x008e, 0x2001, 0x0007, 0x080c, 0x42c7, - 0x001e, 0x004e, 0xa006, 0x015e, 0x003e, 0x002e, 0x00de, 0x00ce, - 0x0005, 0x00d6, 0x2069, 0x908e, 0x6800, 0xa086, 0x0800, 0x0118, - 0x6013, 0x0000, 0x0008, 0xa006, 0x00de, 0x0005, 0x00c6, 0x00f6, - 0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0x908c, 0x7930, 0x7834, - 0x080c, 0x22e9, 0x11a0, 0x080c, 0x430a, 0x1188, 0x2011, 0x9090, - 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0x7326, 0x1140, 0x2011, - 0x9094, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x7326, 0x015e, - 0x003e, 0x002e, 0x001e, 0x00fe, 0x00ce, 0x0005, 0x00c6, 0x0006, - 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x9083, 0x2204, 0x8211, - 0x220c, 0x080c, 0x22e9, 0x11a0, 0x080c, 0x430a, 0x1188, 0x2011, - 0x9096, 0xac98, 0x000a, 0x20a9, 0x0004, 0x080c, 0x7326, 0x1140, - 0x2011, 0x909a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x080c, 0x7326, - 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00ce, 0x0005, 0x00e6, - 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091, - 0x8000, 0x2029, 0x8db3, 0x252c, 0x2021, 0x8db9, 0x2424, 0x2061, - 0x9200, 0x2071, 0x8b00, 0x7644, 0x7064, 0x8001, 0xa602, 0x1a04, - 0x87ef, 0x2100, 0xac06, 0x05d0, 0x080c, 0x8999, 0x05b8, 0x671c, - 0xa786, 0x0001, 0x0904, 0x8801, 0xa786, 0x0007, 0x0578, 0x2500, - 0xac06, 0x0560, 0x2400, 0xac06, 0x0548, 0x080c, 0x89a9, 0x1530, - 0x88ff, 0x0118, 0x6020, 0xa906, 0x1508, 0x00d6, 0x6000, 0xa086, - 0x0004, 0x1120, 0x0016, 0x080c, 0x179e, 0x001e, 0x6010, 0x2068, - 0x080c, 0x7b8f, 0x0180, 0xa786, 0x0003, 0x1510, 0x6837, 0x0103, - 0x6b4a, 0x6847, 0x0000, 0x0016, 0x080c, 0x7dc8, 0x080c, 0x46a1, - 0x001e, 0x080c, 0x7d30, 0x00de, 0x080c, 0x7d3c, 0xace0, 0x000c, - 0x2001, 0x8b16, 0x2004, 0xac02, 0x1210, 0x0804, 0x87a1, 0x012e, - 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x0005, - 0xa786, 0x0006, 0x19d8, 0xa386, 0x0005, 0x0d40, 0x080c, 0x8942, - 0x0c10, 0x080c, 0x89a9, 0x1d10, 0xa180, 0x0001, 0x2004, 0xa086, - 0x0018, 0x19e0, 0x6000, 0xa086, 0x0002, 0x19c0, 0x080c, 0x7d58, - 0x0130, 0x080c, 0x7d69, 0x1990, 0x080c, 0x6fb6, 0x0010, 0x080c, - 0x2589, 0x080c, 0x7d3c, 0x0850, 0x00c6, 0x00e6, 0x0016, 0x2c08, - 0x2170, 0x080c, 0x8956, 0x001e, 0x0120, 0x601c, 0xa084, 0x000f, - 0x001b, 0x00ee, 0x00ce, 0x0005, 0x8834, 0x8834, 0x8834, 0x8834, - 0x8834, 0x8834, 0x8836, 0x8834, 0xa006, 0x0005, 0x0046, 0x0016, - 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, - 0x2009, 0x0020, 0x080c, 0x8982, 0x001e, 0x004e, 0x0036, 0x2019, - 0x0002, 0x080c, 0x85f9, 0x003e, 0xa085, 0x0001, 0x0005, 0x2001, - 0x0001, 0x080c, 0x42a7, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, - 0x0004, 0x2019, 0x8b05, 0x2011, 0x9096, 0x080c, 0x7326, 0x003e, - 0x002e, 0x001e, 0x015e, 0xa005, 0x0005, 0x00f6, 0x00e6, 0x00c6, - 0x0076, 0x0066, 0x0026, 0x0126, 0x2091, 0x8000, 0x2061, 0x9200, - 0x2079, 0x0001, 0x8fff, 0x0904, 0x88bf, 0x2071, 0x8b00, 0x7644, - 0x7064, 0x8001, 0xa602, 0x1a04, 0x88bf, 0x88ff, 0x0128, 0x2800, - 0xac06, 0x15a0, 0x2079, 0x0000, 0x080c, 0x8999, 0x0578, 0x2400, - 0xac06, 0x0560, 0x671c, 0xa786, 0x0006, 0x1540, 0xa786, 0x0007, - 0x0528, 0x88ff, 0x1140, 0x6018, 0xa206, 0x1500, 0x85ff, 0x0118, - 0x6020, 0xa106, 0x11d8, 0x00d6, 0x6000, 0xa086, 0x0004, 0x1140, - 0x601f, 0x0007, 0x2001, 0x8da2, 0x2004, 0x6016, 0x080c, 0x179e, - 0x6010, 0x2068, 0x080c, 0x7b8f, 0x0120, 0x0046, 0x080c, 0x8942, - 0x004e, 0x00de, 0x080c, 0x7d3c, 0x88ff, 0x1190, 0xace0, 0x000c, - 0x2001, 0x8b16, 0x2004, 0xac02, 0x1210, 0x0804, 0x8872, 0xa006, - 0x012e, 0x002e, 0x006e, 0x007e, 0x00ce, 0x00ee, 0x00fe, 0x0005, - 0xa8c5, 0x0001, 0x0ca8, 0x0086, 0x0056, 0x2041, 0x0000, 0x2029, - 0x0001, 0x2c20, 0x2019, 0x0002, 0x6218, 0x080c, 0x6a17, 0x080c, - 0x6aaf, 0x080c, 0x8865, 0x005e, 0x008e, 0x0005, 0x0026, 0x0046, - 0x0056, 0x0086, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, - 0x2009, 0x0000, 0x0016, 0x0036, 0x080c, 0x430a, 0x1170, 0x2c10, - 0x2041, 0x0000, 0x2508, 0x0056, 0x2029, 0x0001, 0x080c, 0x6a17, - 0x080c, 0x6aaf, 0x080c, 0x8865, 0x005e, 0x003e, 0x001e, 0x8108, - 0x1f04, 0x88ea, 0x015e, 0x00ce, 0x008e, 0x005e, 0x004e, 0x002e, - 0x0005, 0x0086, 0x0056, 0x6218, 0x2041, 0x0000, 0x2029, 0x0001, - 0x2019, 0x0048, 0x080c, 0x6a17, 0x080c, 0x6aaf, 0x2c20, 0x080c, - 0x8865, 0x005e, 0x008e, 0x0005, 0x0026, 0x0046, 0x0056, 0x0086, - 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000, 0x0016, - 0x0036, 0x080c, 0x430a, 0x1150, 0x2c10, 0x2041, 0x0000, 0x2828, - 0x080c, 0x6a17, 0x080c, 0x6aaf, 0x080c, 0x8865, 0x003e, 0x001e, - 0x8108, 0x1f04, 0x8927, 0x015e, 0x00ce, 0x008e, 0x005e, 0x004e, - 0x002e, 0x0005, 0x0016, 0x00f6, 0x8dff, 0x0168, 0x6800, 0xa07d, - 0x0138, 0x6803, 0x0000, 0x6b52, 0x080c, 0x46a1, 0x2f68, 0x0cb0, - 0x6b52, 0x080c, 0x46a1, 0x00fe, 0x001e, 0x0005, 0x00e6, 0x0046, - 0x0036, 0x2061, 0x9200, 0x2071, 0x8b00, 0x7444, 0x7064, 0x8001, - 0xa402, 0x12d8, 0x2100, 0xac06, 0x0168, 0x6000, 0xa086, 0x0000, - 0x0148, 0x6008, 0xa206, 0x1130, 0x6018, 0xa1a0, 0x0006, 0x2424, - 0xa406, 0x0140, 0xace0, 0x000c, 0x2001, 0x8b16, 0x2004, 0xac02, - 0x1220, 0x0c08, 0xa085, 0x0001, 0x0008, 0xa006, 0x003e, 0x004e, - 0x00ee, 0x0005, 0x00d6, 0x0006, 0x080c, 0x1488, 0x000e, 0x090c, - 0x1410, 0x6837, 0x010d, 0x685e, 0x6956, 0x6c46, 0x684f, 0x0000, - 0xa006, 0x68b2, 0x6802, 0x683a, 0x685a, 0x080c, 0x46a1, 0x00de, - 0x0005, 0x6700, 0xa786, 0x0000, 0x0158, 0xa786, 0x0001, 0x0140, - 0xa786, 0x000a, 0x0128, 0xa786, 0x0009, 0x0110, 0xa085, 0x0001, - 0x0005, 0x00e6, 0x6018, 0x2070, 0x70a0, 0xa206, 0x00ee, 0x0005, - 0xa186, 0x0013, 0x1128, 0x6004, 0xa082, 0x0085, 0x2008, 0x00c2, - 0xa186, 0x0027, 0x1178, 0x080c, 0x5c37, 0x0036, 0x00d6, 0x6010, - 0x2068, 0x2019, 0x0004, 0x080c, 0x8942, 0x00de, 0x003e, 0x080c, - 0x5d10, 0x0005, 0xa186, 0x0014, 0x0d70, 0x080c, 0x6d55, 0x0005, - 0x89d9, 0x89d7, 0x89d7, 0x89d7, 0x89d7, 0x89d7, 0x89d9, 0x080c, - 0x1410, 0x080c, 0x5c37, 0x6003, 0x000c, 0x080c, 0x5d10, 0x0005, - 0xa182, 0x008c, 0x1220, 0xa182, 0x0085, 0x0208, 0x001a, 0x080c, - 0x6d55, 0x0005, 0x89f1, 0x89f1, 0x89f1, 0x89f1, 0x89f3, 0x89f8, - 0x89f1, 0x080c, 0x1410, 0x00d6, 0x080c, 0x6d18, 0x00de, 0x0005, - 0x080c, 0x6d18, 0x0005, 0x00e6, 0x6018, 0x2070, 0x7000, 0xd0ec, - 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, - 0x8b40, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118, - 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0118, 0x2071, 0x8b4a, 0x0451, - 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, - 0x8000, 0x2071, 0x8b40, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, - 0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0118, 0x2071, - 0x8b4a, 0x0081, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, - 0x00e6, 0x2091, 0x8000, 0x2071, 0x8b42, 0x0021, 0x00ee, 0x000e, - 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, - 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0x8b40, 0x0c99, 0x00ee, - 0x0005, 0x00e6, 0x2071, 0x8b44, 0x0c69, 0x00ee, 0x0005, 0x0001, - 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, - 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x2854 -}; - diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/scsi_ioctl.c linux/drivers/scsi/scsi_ioctl.c --- v2.4.8/linux/drivers/scsi/scsi_ioctl.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/scsi/scsi_ioctl.c Wed Aug 15 01:22:16 2001 @@ -34,8 +34,6 @@ #define MAX_BUF PAGE_SIZE -#define max(a,b) (((a) > (b)) ? (a) : (b)) - /* * If we are told to probe a host, we will return 0 if the host is not * present, 1 if the host is present, and will return an identifying diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/scsi_lib.c linux/drivers/scsi/scsi_lib.c --- v2.4.8/linux/drivers/scsi/scsi_lib.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/scsi_lib.c Sun Aug 12 10:51:42 2001 @@ -726,6 +726,15 @@ break; } } /* driver byte != 0 */ + if (host_byte(result) == DID_RESET) { + /* + * Third party bus reset or reset for error + * recovery reasons. Just retry the request + * and see what happens. + */ + scsi_queue_next_request(q, SCpnt); + return; + } if (result) { struct Scsi_Device_Template *STpnt; diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/scsi_scan.c linux/drivers/scsi/scsi_scan.c --- v2.4.8/linux/drivers/scsi/scsi_scan.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/scsi/scsi_scan.c Mon Aug 13 16:36:30 2001 @@ -153,6 +153,10 @@ {"DELL", "PSEUDO DEVICE .", "*", BLIST_SPARSELUN}, // Dell PV 530F {"DELL", "PV530F", "*", BLIST_SPARSELUN}, // Dell PV 530F {"EMC", "SYMMETRIX", "*", BLIST_SPARSELUN}, + {"CMD", "CRA-7280", "*", BLIST_SPARSELUN}, // CMD RAID Controller + {"CNSI", "G7324", "*", BLIST_SPARSELUN}, // Chaparral G7324 RAID + {"Zzyzx", "RocketStor 500S", "*", BLIST_SPARSELUN}, + {"Zzyzx", "RocketStor 2000", "*", BLIST_SPARSELUN}, {"SONY", "TSL", "*", BLIST_FORCELUN}, // DDS3 & DDS4 autoloaders {"DELL", "PERCRAID", "*", BLIST_FORCELUN}, {"HP", "NetRAID-4M", "*", BLIST_FORCELUN}, @@ -565,20 +569,26 @@ } /* - * Check the peripheral qualifier field - this tells us whether LUNS - * are supported here or not. + * Check for SPARSELUN before checking the peripheral qualifier, + * so sparse lun devices are completely scanned. */ - if ((scsi_result[0] >> 5) == 3) { - scsi_release_request(SRpnt); - return 0; /* assume no peripheral if any sort of error */ - } /* * Get any flags for this device. */ bflags = get_device_flags (scsi_result); - + if (bflags & BLIST_SPARSELUN) { + *sparse_lun = 1; + } + /* + * Check the peripheral qualifier field - this tells us whether LUNS + * are supported here or not. + */ + if ((scsi_result[0] >> 5) == 3) { + scsi_release_request(SRpnt); + return 0; /* assume no peripheral if any sort of error */ + } /* The Toshiba ROM was "gender-changed" here as an inline hack. This is now much more generic. This is a mess: What we really want is to leave the scsi_result diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/sr_ioctl.c linux/drivers/scsi/sr_ioctl.c --- v2.4.8/linux/drivers/scsi/sr_ioctl.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/scsi/sr_ioctl.c Wed Aug 15 09:51:27 2001 @@ -545,7 +545,7 @@ switch (cmd) { case BLKGETSIZE: - return put_user(scsi_CDs[target].capacity >> 1, (long *) arg); + return put_user(scsi_CDs[target].capacity, (long *) arg); case BLKROSET: case BLKROGET: case BLKRASET: diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/st.c linux/drivers/scsi/st.c --- v2.4.8/linux/drivers/scsi/st.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/scsi/st.c Sun Aug 12 11:21:47 2001 @@ -5,14 +5,14 @@ History: Rewritten from Dwayne Forsyth's SCSI tape driver by Kai Makisara. Contribution and ideas from several people including (in alphabetical - order) Klaus Ehrenfried, Eric Lee Green, Wolfgang Denk, Steve Hirsch, - Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky, Michael Schaefer, - J"org Weule, and Eric Youngdale. + order) Klaus Ehrenfried, Eugene Exarevsky, Eric Lee Green, Wolfgang Denk, + Steve Hirsch, Andreas Koppenh"ofer, Michael Leodolter, Eyal Lebedinsky, + Michael Schaefer, J"org Weule, and Eric Youngdale. - Copyright 1992 - 2000 Kai Makisara + Copyright 1992 - 2001 Kai Makisara email Kai.Makisara@metla.fi - Last modified: Mon Nov 13 21:01:09 2000 by makisara@kai.makisara.local + Last modified: Sun Aug 12 12:34:28 2001 by makisara@kai.makisara.local Some small formal changes - aeb, 950809 Last modified: 18-JAN-1998 Richard Gooch Devfs support @@ -21,6 +21,8 @@ error handling will be discarded. */ +static char *verstr = "20010812"; + #include #include @@ -77,9 +79,13 @@ MODULE_AUTHOR("Kai Makisara"); MODULE_DESCRIPTION("SCSI Tape Driver"); MODULE_PARM(buffer_kbs, "i"); +MODULE_PARM_DESC(buffer_kbs, "Default driver buffer size (KB; 32)"); MODULE_PARM(write_threshold_kbs, "i"); +MODULE_PARM_DESC(write_threshold_kbs, "Asynchronous write threshold (KB; 30)"); MODULE_PARM(max_buffers, "i"); +MODULE_PARM_DESC(max_buffers, "Maximum number of buffer allocated at initialisation (4)"); MODULE_PARM(max_sg_segs, "i"); +MODULE_PARM_DESC(max_sg_segs, "Maximum number of scatter/gather segments to use (32)"); #ifndef MODULE static struct st_dev_parm { @@ -302,38 +308,33 @@ int remainder; Scsi_Tape *STp; - if ((st_nbr = TAPE_NR(SCpnt->request.rq_dev)) < st_template.nr_dev) { - read_lock(&st_dev_arr_lock); - STp = scsi_tapes[st_nbr]; - read_unlock(&st_dev_arr_lock); - if ((STp->buffer)->writing && - (SCpnt->sense_buffer[0] & 0x70) == 0x70 && - (SCpnt->sense_buffer[2] & 0x40)) { - /* EOM at write-behind, has all been written? */ - if ((SCpnt->sense_buffer[0] & 0x80) != 0) - remainder = (SCpnt->sense_buffer[3] << 24) | - (SCpnt->sense_buffer[4] << 16) | - (SCpnt->sense_buffer[5] << 8) | - SCpnt->sense_buffer[6]; - else - remainder = 0; - if ((SCpnt->sense_buffer[2] & 0x0f) == VOLUME_OVERFLOW || - remainder > 0) - (STp->buffer)->midlevel_result = SCpnt->result; /* Error */ - else - (STp->buffer)->midlevel_result = INT_MAX; /* OK */ - } else - (STp->buffer)->midlevel_result = SCpnt->result; - SCpnt->request.rq_status = RQ_SCSI_DONE; - (STp->buffer)->last_SRpnt = SCpnt->sc_request; - DEB( STp->write_pending = 0; ) + st_nbr = TAPE_NR(SCpnt->request.rq_dev); + read_lock(&st_dev_arr_lock); + STp = scsi_tapes[st_nbr]; + read_unlock(&st_dev_arr_lock); + if ((STp->buffer)->writing && + (SCpnt->sense_buffer[0] & 0x70) == 0x70 && + (SCpnt->sense_buffer[2] & 0x40)) { + /* EOM at write-behind, has all been written? */ + if ((SCpnt->sense_buffer[0] & 0x80) != 0) + remainder = (SCpnt->sense_buffer[3] << 24) | + (SCpnt->sense_buffer[4] << 16) | + (SCpnt->sense_buffer[5] << 8) | + SCpnt->sense_buffer[6]; + else + remainder = 0; + if ((SCpnt->sense_buffer[2] & 0x0f) == VOLUME_OVERFLOW || + remainder > 0) + (STp->buffer)->midlevel_result = SCpnt->result; /* Error */ + else + (STp->buffer)->midlevel_result = INT_MAX; /* OK */ + } else + (STp->buffer)->midlevel_result = SCpnt->result; + SCpnt->request.rq_status = RQ_SCSI_DONE; + (STp->buffer)->last_SRpnt = SCpnt->sc_request; + DEB( STp->write_pending = 0; ) - complete(SCpnt->request.waiting); - } - DEB( - else if (debugging) - printk(KERN_ERR "st?: Illegal interrupt device %x\n", st_nbr); - ) /* end DEB */ + complete(SCpnt->request.waiting); } @@ -1302,8 +1303,7 @@ DEBC(printk(ST_DEB_MSG "st%d: Error on write:\n", dev)); if ((SRpnt->sr_sense_buffer[0] & 0x70) == 0x70 && (SRpnt->sr_sense_buffer[2] & 0x40)) { - if (STp->block_size != 0 && - (SRpnt->sr_sense_buffer[0] & 0x80) != 0) + if ((SRpnt->sr_sense_buffer[0] & 0x80) != 0) transfer = (SRpnt->sr_sense_buffer[3] << 24) | (SRpnt->sr_sense_buffer[4] << 16) | (SRpnt->sr_sense_buffer[5] << 8) | @@ -2302,7 +2302,7 @@ case MTEOM: if (!STp->fast_mteom) { /* space to the end of tape */ - ioctl_result = st_int_ioctl(STp, MTFSF, 0x3fff); + ioctl_result = st_int_ioctl(STp, MTFSF, 0x7fffff); fileno = STps->drv_file; if (STps->eof >= ST_EOD_1) return 0; @@ -2361,6 +2361,8 @@ return (-EINVAL); } cmd[0] = MODE_SELECT; + if ((STp->use_pf & USE_PF)) + cmd[1] = MODE_SELECT_PAGE_FORMAT; cmd[4] = datalen = 12; direction = SCSI_DATA_WRITE; @@ -2474,11 +2476,11 @@ STps->drv_block = 0; } - undone = ( - (SRpnt->sr_sense_buffer[3] << 24) + - (SRpnt->sr_sense_buffer[4] << 16) + - (SRpnt->sr_sense_buffer[5] << 8) + - SRpnt->sr_sense_buffer[6]); + undone = ((SRpnt->sr_sense_buffer[3] << 24) + + (SRpnt->sr_sense_buffer[4] << 16) + + (SRpnt->sr_sense_buffer[5] << 8) + + SRpnt->sr_sense_buffer[6]); + if (cmd_in == MTWEOF && (SRpnt->sr_sense_buffer[0] & 0x70) == 0x70 && (SRpnt->sr_sense_buffer[2] & 0x4f) == 0x40 && @@ -2496,6 +2498,8 @@ STps->drv_block = 0; STps->eof = ST_NOEOF; } else if ((cmd_in == MTBSF) || (cmd_in == MTBSFM)) { + if (arg > 0 && undone < 0) /* Some drives get this wrong */ + undone = (-undone); if (STps->drv_file >= 0) STps->drv_file = fileno + undone; STps->drv_block = 0; @@ -2518,6 +2522,8 @@ STps->drv_file--; STps->drv_block = (-1); } else { + if (arg > 0 && undone < 0) /* Some drives get this wrong */ + undone = (-undone); if (STps->drv_block >= 0) STps->drv_block = blkno + undone; } @@ -2526,6 +2532,19 @@ STps->drv_file = (-1); STps->drv_block = (-1); STps->eof = ST_EOD; + } else if (cmd_in == MTSETBLK || + cmd_in == MTSETDENSITY || + cmd_in == MTSETDRVBUFFER || + cmd_in == SET_DENS_AND_BLK) { + if ((SRpnt->sr_sense_buffer[2] & 0x0f) == ILLEGAL_REQUEST && + !(STp->use_pf & PF_TESTED)) { + /* Try the other possible state of Page Format if not + already tried */ + STp->use_pf = !STp->use_pf | PF_TESTED; + scsi_release_request(SRpnt); + SRpnt = NULL; + return st_int_ioctl(STp, cmd_in, arg); + } } else if (chg_eof) STps->eof = ST_NOEOF; @@ -3608,6 +3627,7 @@ tpnt->in_use = 0; tpnt->drv_buffer = 1; /* Try buffering if no mode sense */ tpnt->restr_dma = (SDp->host)->unchecked_isa_dma; + tpnt->use_pf = (SDp->scsi_level >= SCSI_2); tpnt->density = 0; tpnt->do_auto_lock = ST_AUTO_LOCK; tpnt->can_bsr = ST_IN_FILE_POS; @@ -3692,8 +3712,9 @@ if (st_template.dev_noticed == 0 || st_registered) return 0; - printk(KERN_INFO "st: bufsize %d, wrt %d, max init. buffers %d, s/g segs %d.\n", - st_buffer_size, st_write_threshold, st_max_buffers, st_max_sg_segs); + printk(KERN_INFO + "st: Version %s, bufsize %d, wrt %d, max init. bufs %d, s/g segs %d\n", + verstr, st_buffer_size, st_write_threshold, st_max_buffers, st_max_sg_segs); write_lock_irqsave(&st_dev_arr_lock, flags); if (!st_registered) { diff -u --recursive --new-file v2.4.8/linux/drivers/scsi/st.h linux/drivers/scsi/st.h --- v2.4.8/linux/drivers/scsi/st.h Wed Jul 25 17:10:23 2001 +++ linux/drivers/scsi/st.h Sun Aug 12 11:19:58 2001 @@ -81,6 +81,7 @@ unsigned char restr_dma; unsigned char scsi2_logical; unsigned char default_drvbuffer; /* 0xff = don't touch, value 3 bits */ + unsigned char use_pf; /* Set Page Format bit in all mode selects? */ int tape_type; int write_threshold; int timeout; /* timeout for normal commands */ @@ -126,6 +127,9 @@ #endif } Scsi_Tape; +/* Bit masks for use_pf */ +#define USE_PF 1 +#define PF_TESTED 2 /* Values of eof */ #define ST_NOEOF 0 diff -u --recursive --new-file v2.4.8/linux/drivers/sgi/char/ds1286.c linux/drivers/sgi/char/ds1286.c --- v2.4.8/linux/drivers/sgi/char/ds1286.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/sgi/char/ds1286.c Sun Aug 12 10:38:48 2001 @@ -56,8 +56,6 @@ static DECLARE_WAIT_QUEUE_HEAD(ds1286_wait); -static long long ds1286_llseek(struct file *file, loff_t offset, int origin); - static ssize_t ds1286_read(struct file *file, char *buf, size_t count, loff_t *ppos); @@ -101,11 +99,6 @@ * Now all the various file operations that we export. */ -static long long ds1286_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static ssize_t ds1286_read(struct file *file, char *buf, size_t count, loff_t *ppos) { @@ -374,7 +367,7 @@ */ static struct file_operations ds1286_fops = { - llseek: ds1286_llseek, + llseek: no_llseek, read: ds1286_read, poll: ds1286_poll, ioctl: ds1286_ioctl, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/Config.in linux/drivers/sound/Config.in --- v2.4.8/linux/drivers/sound/Config.in Wed Jul 25 17:10:23 2001 +++ linux/drivers/sound/Config.in Sun Aug 12 12:29:01 2001 @@ -6,6 +6,7 @@ # Prompt user for primary drivers. +dep_tristate ' BT878 audio dma' CONFIG_SOUND_BT878 $CONFIG_SOUND dep_tristate ' C-Media PCI (CMI8338/8738)' CONFIG_SOUND_CMPCI $CONFIG_SOUND $CONFIG_PCI if [ "$CONFIG_SOUND_CMPCI" = "y" -o "$CONFIG_SOUND_CMPCI" = "m" ]; then bool ' Enable legacy FM' CONFIG_SOUND_CMPCI_FM @@ -30,6 +31,7 @@ fi fi dep_tristate ' Creative SBLive! (EMU10K1)' CONFIG_SOUND_EMU10K1 $CONFIG_SOUND $CONFIG_PCI +dep_mbool ' Creative SBLive! MIDI' CONFIG_MIDI_EMU10K1 $CONFIG_SOUND_EMU10K1 $CONFIG_EXPERIMENTAL dep_tristate ' Crystal SoundFusion (CS4280/461x)' CONFIG_SOUND_FUSION $CONFIG_SOUND dep_tristate ' Crystal Sound CS4281' CONFIG_SOUND_CS4281 $CONFIG_SOUND dep_tristate ' Ensoniq AudioPCI (ES1370)' CONFIG_SOUND_ES1370 $CONFIG_SOUND $CONFIG_PCI @@ -38,11 +40,11 @@ dep_tristate ' ESS Maestro, Maestro2, Maestro2E driver' CONFIG_SOUND_MAESTRO $CONFIG_SOUND dep_tristate ' ESS Maestro3/Allegro driver (EXPERIMENTAL)' CONFIG_SOUND_MAESTRO3 $CONFIG_SOUND $CONFIG_PCI $CONFIG_EXPERIMENTAL dep_tristate ' Intel ICH (i8xx) audio support' CONFIG_SOUND_ICH $CONFIG_PCI +dep_tristate ' RME Hammerfall (RME96XX) support' CONFIG_SOUND_RME96XX $CONFIG_SOUND $CONFIG_PCI $CONFIG_EXPERIMENTAL dep_tristate ' S3 SonicVibes' CONFIG_SOUND_SONICVIBES $CONFIG_SOUND if [ "$CONFIG_VISWS" = "y" ]; then dep_tristate ' SGI Visual Workstation Sound' CONFIG_SOUND_VWSND $CONFIG_SOUND fi - 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 diff -u --recursive --new-file v2.4.8/linux/drivers/sound/Makefile linux/drivers/sound/Makefile --- v2.4.8/linux/drivers/sound/Makefile Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/Makefile Sun Aug 12 10:47:57 2001 @@ -68,12 +68,19 @@ obj-$(CONFIG_SOUND_MAESTRO) += maestro.o obj-$(CONFIG_SOUND_MAESTRO3) += maestro3.o ac97_codec.o obj-$(CONFIG_SOUND_TRIDENT) += trident.o ac97_codec.o +obj-$(CONFIG_SOUND_RME96XX) += rme96xx.o +obj-$(CONFIG_SOUND_BT878) += btaudio.o + +obj-$(CONFIG_SOUND_EMU10K1) += ac97_codec.o +ifeq ($(CONFIG_MIDI_EMU10K1),y) + obj-$(CONFIG_SOUND_EMU10K1) += sound.o +endif subdir-$(CONFIG_SOUND_EMU10K1) += emu10k1 subdir-$(CONFIG_SOUND_CS4281) += cs4281 ifeq ($(CONFIG_SOUND_EMU10K1),y) - obj-y += ac97_codec.o emu10k1/emu10k1.o + obj-y += emu10k1/emu10k1.o endif ifeq ($(CONFIG_SOUND_CS4281),y) diff -u --recursive --new-file v2.4.8/linux/drivers/sound/ac97_codec.c linux/drivers/sound/ac97_codec.c --- v2.4.8/linux/drivers/sound/ac97_codec.c Thu Apr 19 22:58:20 2001 +++ linux/drivers/sound/ac97_codec.c Sun Aug 12 10:51:42 2001 @@ -65,54 +65,83 @@ static int sigmatel_9708_init(struct ac97_codec *codec); static int sigmatel_9721_init(struct ac97_codec *codec); static int sigmatel_9744_init(struct ac97_codec *codec); -static int enable_eapd(struct ac97_codec *codec); +static int eapd_control(struct ac97_codec *codec, int); +static int crystal_digital_control(struct ac97_codec *codec, int mode); + + +/* + * AC97 operations. + * + * If you are adding a codec then you should be able to use + * eapd_ops - any codec that supports EAPD amp control (most) + * null_ops - any ancient codec that supports nothing + * + * The three functions are + * init - used for non AC97 standard initialisation + * amplifier - used to do amplifier control (1=on 0=off) + * digital - switch to digital modes (0 = analog) + * + * Not all codecs support all features, not all drivers use all the + * operations yet + */ + +static struct ac97_ops null_ops = { NULL, NULL, NULL }; +static struct ac97_ops default_ops = { NULL, eapd_control, NULL }; +static struct ac97_ops wolfson_ops = { wolfson_init, NULL, NULL }; +static struct ac97_ops tritech_ops = { tritech_init, NULL, NULL }; +static struct ac97_ops tritech_m_ops = { tritech_maestro_init, NULL, NULL }; +static struct ac97_ops sigmatel_9708_ops = { sigmatel_9708_init, NULL, NULL }; +static struct ac97_ops sigmatel_9721_ops = { sigmatel_9721_init, NULL, NULL }; +static struct ac97_ops sigmatel_9744_ops = { sigmatel_9744_init, NULL, NULL }; +static struct ac97_ops crystal_digital_ops = { NULL, eapd_control, crystal_digital_control }; /* sorted by vendor/device id */ static const struct { u32 id; char *name; - int (*init) (struct ac97_codec *codec); + struct ac97_ops *ops; } ac97_codec_ids[] = { - {0x41445303, "Analog Devices AD1819", NULL}, - {0x41445340, "Analog Devices AD1881", NULL}, - {0x41445348, "Analog Devices AD1881A", NULL}, - {0x41445460, "Analog Devices AD1885", enable_eapd}, - {0x414B4D00, "Asahi Kasei AK4540", NULL}, - {0x414B4D01, "Asahi Kasei AK4542", NULL}, - {0x414B4D02, "Asahi Kasei AK4543", NULL}, - {0x414C4710, "ALC200/200P", NULL}, - {0x43525900, "Cirrus Logic CS4297", enable_eapd}, - {0x43525903, "Cirrus Logic CS4297", enable_eapd}, - {0x43525913, "Cirrus Logic CS4297A rev A", enable_eapd}, - {0x43525914, "Cirrus Logic CS4297A rev B", NULL}, - {0x43525923, "Cirrus Logic CS4298", NULL}, - {0x4352592B, "Cirrus Logic CS4294", NULL}, - {0x4352592D, "Cirrus Logic CS4294", NULL}, - {0x43525931, "Cirrus Logic CS4299 rev A", NULL}, - {0x43525933, "Cirrus Logic CS4299 rev C", NULL}, - {0x43525934, "Cirrus Logic CS4299 rev D", NULL}, - {0x45838308, "ESS Allegro ES1988", NULL}, - {0x49434511, "ICE1232", NULL}, /* I hope --jk */ - {0x4e534331, "National Semiconductor LM4549", NULL}, - {0x53494c22, "Silicon Laboratory Si3036", NULL}, - {0x53494c23, "Silicon Laboratory Si3038", NULL}, - {0x545200FF, "TriTech TR?????", tritech_maestro_init}, - {0x54524102, "TriTech TR28022", NULL}, - {0x54524103, "TriTech TR28023", NULL}, - {0x54524106, "TriTech TR28026", NULL}, - {0x54524108, "TriTech TR28028", tritech_init}, - {0x54524123, "TriTech TR?????", NULL}, - {0x574D4C00, "Wolfson WM9704", wolfson_init}, - {0x574D4C03, "Wolfson WM9703/9704", wolfson_init}, - {0x574D4C04, "Wolfson WM9704 (quad)", wolfson_init}, - {0x83847600, "SigmaTel STAC????", NULL}, - {0x83847604, "SigmaTel STAC9701/3/4/5", NULL}, - {0x83847605, "SigmaTel STAC9704", NULL}, - {0x83847608, "SigmaTel STAC9708", sigmatel_9708_init}, - {0x83847609, "SigmaTel STAC9721/23", sigmatel_9721_init}, - {0x83847644, "SigmaTel STAC9744/45", sigmatel_9744_init}, - {0x83847656, "SigmaTel STAC9756/57", sigmatel_9744_init}, - {0x83847684, "SigmaTel STAC9783/84?", NULL}, + {0x41445303, "Analog Devices AD1819", &null_ops}, + {0x41445340, "Analog Devices AD1881", &null_ops}, + {0x41445348, "Analog Devices AD1881A", &null_ops}, + {0x41445460, "Analog Devices AD1885", &default_ops}, + {0x414B4D00, "Asahi Kasei AK4540", &null_ops}, + {0x414B4D01, "Asahi Kasei AK4542", &null_ops}, + {0x414B4D02, "Asahi Kasei AK4543", &null_ops}, + {0x414C4710, "ALC200/200P", &null_ops}, + {0x43525900, "Cirrus Logic CS4297", &default_ops}, + {0x43525903, "Cirrus Logic CS4297", &default_ops}, + {0x43525913, "Cirrus Logic CS4297A rev A", &default_ops}, + {0x43525914, "Cirrus Logic CS4297A rev B", &default_ops}, + {0x43525923, "Cirrus Logic CS4298", &null_ops}, + {0x4352592B, "Cirrus Logic CS4294", &null_ops}, + {0x4352592D, "Cirrus Logic CS4294", &null_ops}, + {0x43525931, "Cirrus Logic CS4299 rev A", &crystal_digital_ops}, + {0x43525933, "Cirrus Logic CS4299 rev C", &crystal_digital_ops}, + {0x43525934, "Cirrus Logic CS4299 rev D", &crystal_digital_ops}, + {0x45838308, "ESS Allegro ES1988", &null_ops}, + {0x49434511, "ICE1232", &null_ops}, /* I hope --jk */ + {0x4e534331, "National Semiconductor LM4549", &null_ops}, + {0x53494c22, "Silicon Laboratory Si3036", &null_ops}, + {0x53494c23, "Silicon Laboratory Si3038", &null_ops}, + {0x545200FF, "TriTech TR?????", &tritech_m_ops}, + {0x54524102, "TriTech TR28022", &null_ops}, + {0x54524103, "TriTech TR28023", &null_ops}, + {0x54524106, "TriTech TR28026", &null_ops}, + {0x54524108, "TriTech TR28028", &tritech_ops}, + {0x54524123, "TriTech TR?????", &null_ops}, + {0x574D4C00, "Wolfson WM9704", &wolfson_ops}, + {0x574D4C03, "Wolfson WM9703/9704", &wolfson_ops}, + {0x574D4C04, "Wolfson WM9704 (quad)", &wolfson_ops}, + {0x83847600, "SigmaTel STAC????", &null_ops}, + {0x83847604, "SigmaTel STAC9701/3/4/5", &null_ops}, + {0x83847605, "SigmaTel STAC9704", &null_ops}, + {0x83847608, "SigmaTel STAC9708", &sigmatel_9708_ops}, + {0x83847609, "SigmaTel STAC9721/23", &sigmatel_9721_ops}, + {0x83847644, "SigmaTel STAC9744/45", &sigmatel_9744_ops}, + {0x83847656, "SigmaTel STAC9756/57", &sigmatel_9744_ops}, + {0x83847684, "SigmaTel STAC9783/84?", &null_ops}, + {0x57454301, "Winbond 83971D", &null_ops}, {0,} }; @@ -145,7 +174,7 @@ /* 24 */ "Wolfson Microelectronics 3D Enhancement", /* 25 */ "Delta Integration 3D Enhancement", /* 26 */ "SigmaTel 3D Enhancement", - /* 27 */ "Reserved 27", + /* 27 */ "Winbond 3D Stereo Enhancement", /* 28 */ "Rockwell 3D Stereo Enhancement", /* 29 */ "Reserved 29", /* 30 */ "Reserved 30", @@ -666,7 +695,7 @@ modem = codec->codec_read(codec, AC97_EXTENDED_MODEM_ID); codec->name = NULL; - codec->codec_init = NULL; + codec->codec_ops = &null_ops; id1 = codec->codec_read(codec, AC97_VENDOR_ID1); id2 = codec->codec_read(codec, AC97_VENDOR_ID2); @@ -674,7 +703,7 @@ if (ac97_codec_ids[i].id == ((id1 << 16) | id2)) { codec->type = ac97_codec_ids[i].id; codec->name = ac97_codec_ids[i].name; - codec->codec_init = ac97_codec_ids[i].init; + codec->codec_ops = ac97_codec_ids[i].ops; break; } } @@ -717,8 +746,8 @@ codec->mixer_ioctl = ac97_mixer_ioctl; /* codec specific initialization for 4-6 channel output or secondary codec stuff */ - if (codec->codec_init != NULL) { - codec->codec_init(codec); + if (codec->codec_ops->init != NULL) { + codec->codec_ops->init(codec); } /* initialize mixer channel volumes */ @@ -843,17 +872,42 @@ /* - * External AMP management for EAPD using codecs - * (CS4279A, AD1885, ...) + * This is basically standard AC97. It should work as a default for + * almost all modern codecs. Note that some cards wire EAPD *backwards* + * That side of it is up to the card driver not us to cope with. + * */ -static int enable_eapd(struct ac97_codec * codec) +static int eapd_control(struct ac97_codec * codec, int on) { - codec->codec_write(codec, AC97_POWER_CONTROL, - codec->codec_read(codec, AC97_POWER_CONTROL)|0x8000); + if(on) + codec->codec_write(codec, AC97_POWER_CONTROL, + codec->codec_read(codec, AC97_POWER_CONTROL)|0x8000); + else + codec->codec_write(codec, AC97_POWER_CONTROL, + codec->codec_read(codec, AC97_POWER_CONTROL)&~0x8000); return 0; } +/* + * Crystal digital audio control (CS4299 + */ + +static int crystal_digital_control(struct ac97_codec *codec, int mode) +{ + u16 cv; + + switch(mode) + { + case 0: cv = 0x0; break; /* SPEN off */ + case 1: cv = 0x8004; break; /* 48KHz digital */ + case 2: cv = 0x8104; break; /* 44.1KHz digital */ + default: + return -1; /* Not supported yet(eg AC3) */ + } + codec->codec_write(codec, 0x68, cv); + return 0; +} /* copied from drivers/sound/maestro.c */ #if 0 /* there has been 1 person on the planet with a pt101 that we diff -u --recursive --new-file v2.4.8/linux/drivers/sound/btaudio.c linux/drivers/sound/btaudio.c --- v2.4.8/linux/drivers/sound/btaudio.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/sound/btaudio.c Tue Aug 14 19:57:28 2001 @@ -0,0 +1,981 @@ +/* + btaudio - bt878 audio dma driver for linux 2.4.x + + (c) 2000 Gerd Knorr + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/* mmio access */ +#define btwrite(dat,adr) writel((dat), (bta->mmio+(adr))) +#define btread(adr) readl(bta->mmio+(adr)) + +#define btand(dat,adr) btwrite((dat) & btread(adr), adr) +#define btor(dat,adr) btwrite((dat) | btread(adr), adr) +#define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr) + +/* registers (shifted because bta->mmio is long) */ +#define REG_INT_STAT (0x100 >> 2) +#define REG_INT_MASK (0x104 >> 2) +#define REG_GPIO_DMA_CTL (0x10c >> 2) +#define REG_PACKET_LEN (0x110 >> 2) +#define REG_RISC_STRT_ADD (0x114 >> 2) +#define REG_RISC_COUNT (0x120 >> 2) + +/* IRQ bits - REG_INT_(STAT|MASK) */ +#define IRQ_SCERR (1 << 19) +#define IRQ_OCERR (1 << 18) +#define IRQ_PABORT (1 << 17) +#define IRQ_RIPERR (1 << 16) +#define IRQ_PPERR (1 << 15) +#define IRQ_FDSR (1 << 14) +#define IRQ_FTRGT (1 << 13) +#define IRQ_FBUS (1 << 12) +#define IRQ_RISCI (1 << 11) +#define IRQ_OFLOW (1 << 3) + +#define IRQ_BTAUDIO (IRQ_SCERR | IRQ_OCERR | IRQ_PABORT | IRQ_RIPERR |\ + IRQ_PPERR | IRQ_FDSR | IRQ_FTRGT | IRQ_FBUS |\ + IRQ_RISCI) + +/* REG_GPIO_DMA_CTL bits */ +#define DMA_CTL_A_PWRDN (1 << 26) +#define DMA_CTL_DA_SBR (1 << 14) +#define DMA_CTL_DA_ES2 (1 << 13) +#define DMA_CTL_ACAP_EN (1 << 4) +#define DMA_CTL_RISC_EN (1 << 1) +#define DMA_CTL_FIFO_EN (1 << 0) + +/* RISC instructions */ +#define RISC_WRITE (0x01 << 28) +#define RISC_JUMP (0x07 << 28) +#define RISC_SYNC (0x08 << 28) + +/* RISC bits */ +#define RISC_WR_SOL (1 << 27) +#define RISC_WR_EOL (1 << 26) +#define RISC_IRQ (1 << 24) +#define RISC_SYNC_RESYNC (1 << 15) +#define RISC_SYNC_FM1 0x06 +#define RISC_SYNC_VRO 0x0c + +#define HWBASE_AD (448000) +#define HWBASE_DA 31928 /* 48000 */ + +/* -------------------------------------------------------------- */ + +struct btaudio { + /* linked list */ + struct btaudio *next; + + /* device info */ + int dsp_dev; + int mixer_dev; + struct pci_dev *pci; + unsigned int irq; + unsigned long mem; + unsigned long *mmio; + + /* locking */ + int users; + struct semaphore lock; + + /* risc instructions */ + unsigned int risc_size; + unsigned long *risc_cpu; + dma_addr_t risc_dma; + + /* audio data */ + unsigned int buf_size; + unsigned char *buf_cpu; + dma_addr_t buf_dma; + + /* buffer setup */ + int line_bytes; + int line_count; + int block_bytes; + int block_count; + + /* read fifo management */ + int recording; + int dma_block; + int read_offset; + int read_count; + wait_queue_head_t readq; + + /* settings */ + int gain[3]; + int source; + int bits; + int decimation; + int mixcount; + int sampleshift; + int channels; +}; + +static struct btaudio *btaudios = NULL; +static unsigned int dsp = -1; +static unsigned int mixer = -1; +static unsigned int debug = 0; +static unsigned int irq_debug = 0; +static int analog = 0; + +/* -------------------------------------------------------------- */ + +#define BUF_DEFAULT 128*1024 +#define BUF_MIN 8192 + +static int alloc_buffer(struct btaudio *bta) +{ + if (NULL == bta->buf_cpu) { + for (bta->buf_size = BUF_DEFAULT; bta->buf_size >= BUF_MIN; + bta->buf_size = bta->buf_size >> 1) { + bta->buf_cpu = pci_alloc_consistent + (bta->pci, bta->buf_size, &bta->buf_dma); + if (NULL != bta->buf_cpu) + break; + } + if (NULL == bta->buf_cpu) + return -ENOMEM; + memset(bta->buf_cpu,0,bta->buf_size); + } + if (NULL == bta->risc_cpu) { + bta->risc_size = PAGE_SIZE; + bta->risc_cpu = pci_alloc_consistent + (bta->pci, bta->risc_size, &bta->risc_dma); + if (NULL == bta->risc_cpu) + return -ENOMEM; + } + return 0; +} + +static void free_buffer(struct btaudio *bta) +{ + if (NULL != bta->buf_cpu) { + pci_free_consistent(bta->pci, bta->buf_size, + bta->buf_cpu, bta->buf_dma); + bta->buf_cpu = NULL; + } + if (NULL != bta->risc_cpu) { + pci_free_consistent(bta->pci, bta->risc_size, + bta->risc_cpu, bta->risc_dma); + bta->risc_cpu = NULL; + } +} + +static int make_risc(struct btaudio *bta) +{ + int rp, bp, line, block; + unsigned long risc; + + bta->block_bytes = bta->buf_size >> 4; + bta->block_count = 1 << 4; + bta->line_bytes = bta->block_bytes; + bta->line_count = bta->block_count; + while (bta->line_bytes > 4095) { + bta->line_bytes >>= 1; + bta->line_count <<= 1; + } + if (bta->line_count > 255) + return -EINVAL; + if (debug) + printk("btaudio: bufsize=%d - bs=%d bc=%d - ls=%d, lc=%d\n", + bta->buf_size,bta->block_bytes,bta->block_count, + bta->line_bytes,bta->line_count); + rp = 0; bp = 0; + block = 0; + bta->risc_cpu[rp++] = cpu_to_le32(RISC_SYNC|RISC_SYNC_FM1); + bta->risc_cpu[rp++] = cpu_to_le32(0); + for (line = 0; line < bta->line_count; line++) { + risc = RISC_WRITE | RISC_WR_SOL | RISC_WR_EOL; + risc |= bta->line_bytes; + if (0 == (bp & (bta->block_bytes-1))) { + risc |= RISC_IRQ; + risc |= (block & 0x0f) << 16; + risc |= (~block & 0x0f) << 20; + block++; + } + bta->risc_cpu[rp++] = cpu_to_le32(risc); + bta->risc_cpu[rp++] = cpu_to_le32(bta->buf_dma + bp); + bp += bta->line_bytes; + } + bta->risc_cpu[rp++] = cpu_to_le32(RISC_SYNC|RISC_SYNC_VRO); + bta->risc_cpu[rp++] = cpu_to_le32(0); + bta->risc_cpu[rp++] = cpu_to_le32(RISC_JUMP); + bta->risc_cpu[rp++] = cpu_to_le32(bta->risc_dma); + return 0; +} + +static int start_recording(struct btaudio *bta) +{ + int ret; + + if (0 != (ret = alloc_buffer(bta))) + return ret; + if (0 != (ret = make_risc(bta))) + return ret; + + btwrite(bta->risc_dma, REG_RISC_STRT_ADD); + btwrite((bta->line_count << 16) | bta->line_bytes, + REG_PACKET_LEN); + btwrite(IRQ_BTAUDIO, REG_INT_MASK); + if (analog) { + btwrite(DMA_CTL_ACAP_EN | + DMA_CTL_RISC_EN | + DMA_CTL_FIFO_EN | + DMA_CTL_DA_ES2 | + ((bta->bits == 8) ? DMA_CTL_DA_SBR : 0) | + (bta->gain[bta->source] << 28) | + (bta->source << 24) | + (bta->decimation << 8), + REG_GPIO_DMA_CTL); + } else { + btwrite(DMA_CTL_ACAP_EN | + DMA_CTL_RISC_EN | + DMA_CTL_FIFO_EN | + DMA_CTL_DA_ES2 | + DMA_CTL_A_PWRDN | + (1 << 6) | + ((bta->bits == 8) ? DMA_CTL_DA_SBR : 0) | + (bta->gain[bta->source] << 28) | + (bta->source << 24) | + (bta->decimation << 8), + REG_GPIO_DMA_CTL); + } + bta->dma_block = 0; + bta->read_offset = 0; + bta->read_count = 0; + bta->recording = 1; + if (debug) + printk("btaudio: recording started\n"); + return 0; +} + +static void stop_recording(struct btaudio *bta) +{ + btand(~15, REG_GPIO_DMA_CTL); + bta->recording = 0; + if (debug) + printk("btaudio: recording stopped\n"); +} + +/* -------------------------------------------------------------- */ + +static loff_t btaudio_llseek(struct file *file, loff_t offset, int origin) +{ + return -ESPIPE; +} + +/* -------------------------------------------------------------- */ + +static int btaudio_mixer_open(struct inode *inode, struct file *file) +{ + int minor = MINOR(inode->i_rdev); + struct btaudio *bta; + + for (bta = btaudios; bta != NULL; bta = bta->next) + if (bta->mixer_dev == minor) + break; + if (NULL == bta) + return -ENODEV; + + file->private_data = bta; + return 0; +} + +static int btaudio_mixer_release(struct inode *inode, struct file *file) +{ + return 0; +} + +static int btaudio_mixer_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct btaudio *bta = file->private_data; + int ret,val=0,i=0; + + if (cmd == SOUND_MIXER_INFO) { + mixer_info info; + strncpy(info.id, "bt878", sizeof(info.id)); + strncpy(info.name, "Brooktree Bt878 audio", sizeof(info.name)); + info.modify_counter = bta->mixcount; + if (copy_to_user((void *)arg, &info, sizeof(info))) + return -EFAULT; + return 0; + } + if (cmd == SOUND_OLD_MIXER_INFO) { + _old_mixer_info info; + strncpy(info.id, "bt878", sizeof(info.id)); + strncpy(info.name, "Brooktree Bt878 audio", sizeof(info.name)); + if (copy_to_user((void *)arg, &info, sizeof(info))) + return -EFAULT; + return 0; + } + if (cmd == OSS_GETVERSION) + return put_user(SOUND_VERSION, (int *)arg); + + /* read */ + if (_SIOC_DIR(cmd) & _SIOC_WRITE) + if (get_user(val, (int *)arg)) + return -EFAULT; + + switch (cmd) { + case MIXER_READ(SOUND_MIXER_CAPS): + ret = SOUND_CAP_EXCL_INPUT; + break; + case MIXER_READ(SOUND_MIXER_STEREODEVS): + ret = 0; + break; + case MIXER_READ(SOUND_MIXER_RECMASK): + case MIXER_READ(SOUND_MIXER_DEVMASK): + ret = SOUND_MASK_LINE1|SOUND_MASK_LINE2|SOUND_MASK_LINE3; + break; + + case MIXER_WRITE(SOUND_MIXER_RECSRC): + if (val & SOUND_MASK_LINE1 && bta->source != 0) + bta->source = 0; + else if (val & SOUND_MASK_LINE2 && bta->source != 1) + bta->source = 1; + else if (val & SOUND_MASK_LINE3 && bta->source != 2) + bta->source = 2; + btaor((bta->gain[bta->source] << 28) | + (bta->source << 24), + 0x0cffffff, REG_GPIO_DMA_CTL); + case MIXER_READ(SOUND_MIXER_RECSRC): + switch (bta->source) { + case 0: ret = SOUND_MASK_LINE1; break; + case 1: ret = SOUND_MASK_LINE2; break; + case 2: ret = SOUND_MASK_LINE3; break; + default: ret = 0; + } + break; + + case MIXER_WRITE(SOUND_MIXER_LINE1): + case MIXER_WRITE(SOUND_MIXER_LINE2): + case MIXER_WRITE(SOUND_MIXER_LINE3): + if (MIXER_WRITE(SOUND_MIXER_LINE1) == cmd) + i = 0; + if (MIXER_WRITE(SOUND_MIXER_LINE2) == cmd) + i = 1; + if (MIXER_WRITE(SOUND_MIXER_LINE3) == cmd) + i = 2; + bta->gain[i] = (val & 0xff) * 15 / 100; + if (bta->gain[i] > 15) bta->gain[i] = 15; + if (bta->gain[i] < 0) bta->gain[i] = 0; + if (i == bta->source) + btaor((bta->gain[bta->source]<<28), + 0x0fffffff, REG_GPIO_DMA_CTL); + ret = bta->gain[i] * 100 / 15; + ret |= ret << 8; + break; + + case MIXER_READ(SOUND_MIXER_LINE1): + case MIXER_READ(SOUND_MIXER_LINE2): + case MIXER_READ(SOUND_MIXER_LINE3): + if (MIXER_READ(SOUND_MIXER_LINE1) == cmd) + i = 0; + if (MIXER_READ(SOUND_MIXER_LINE2) == cmd) + i = 1; + if (MIXER_READ(SOUND_MIXER_LINE3) == cmd) + i = 2; + ret = bta->gain[i] * 100 / 15; + ret |= ret << 8; + break; + + default: + return -EINVAL; + } + if (put_user(ret, (int *)arg)) + return -EFAULT; + return 0; +} + +static struct file_operations btaudio_mixer_fops = { + owner: THIS_MODULE, + llseek: btaudio_llseek, + open: btaudio_mixer_open, + release: btaudio_mixer_release, + ioctl: btaudio_mixer_ioctl, +}; + +/* -------------------------------------------------------------- */ + +static int btaudio_dsp_open(struct inode *inode, struct file *file) +{ + int minor = MINOR(inode->i_rdev); + struct btaudio *bta; + + for (bta = btaudios; bta != NULL; bta = bta->next) + if (bta->dsp_dev == minor) + break; + if (NULL == bta) + return -ENODEV; + + down(&bta->lock); + if (bta->users) + goto busy; + bta->users++; + file->private_data = bta; + + bta->dma_block = 0; + bta->read_offset = 0; + bta->read_count = 0; + bta->sampleshift = 0; + + up(&bta->lock); + return 0; + + busy: + up(&bta->lock); + return -EBUSY; +} + +static int btaudio_dsp_release(struct inode *inode, struct file *file) +{ + struct btaudio *bta = file->private_data; + + down(&bta->lock); + if (bta->recording) + stop_recording(bta); + bta->users--; + up(&bta->lock); + return 0; +} + +static ssize_t btaudio_dsp_read(struct file *file, char *buffer, + size_t swcount, loff_t *ppos) +{ + struct btaudio *bta = file->private_data; + int hwcount = swcount << bta->sampleshift; + int nsrc, ndst, err, ret = 0; + DECLARE_WAITQUEUE(wait, current); + + add_wait_queue(&bta->readq, &wait); + down(&bta->lock); + while (swcount > 0) { + if (0 == bta->read_count) { + if (!bta->recording) { + if (0 != (err = start_recording(bta))) { + if (0 == ret) + ret = err; + break; + } + } + if (file->f_flags & O_NONBLOCK) { + if (0 == ret) + ret = -EAGAIN; + break; + } + up(&bta->lock); + current->state = TASK_INTERRUPTIBLE; + schedule(); + down(&bta->lock); + if(signal_pending(current)) { + if (0 == ret) + ret = -EINTR; + break; + } + } + nsrc = (bta->read_count < hwcount) ? bta->read_count : hwcount; + if (nsrc > bta->buf_size - bta->read_offset) + nsrc = bta->buf_size - bta->read_offset; + ndst = nsrc >> bta->sampleshift; + + if ((analog && 0 == bta->sampleshift) || + (!analog && 2 == bta->channels)) { + /* just copy */ + if (copy_to_user(buffer + ret, bta->buf_cpu + bta->read_offset, nsrc)) { + if (0 == ret) + ret = -EFAULT; + break; + } + + } else if (!analog) { + /* stereo => mono (digital audio) */ + __u16 *src = (__u16*)(bta->buf_cpu + bta->read_offset); + __u16 *dst = (__u16*)(buffer + ret); + __u16 avg; + int n = ndst>>1; + if (0 != verify_area(VERIFY_WRITE,dst,ndst)) { + if (0 == ret) + ret = -EFAULT; + break; + } + for (; n; n--, dst++) { + avg = *(src++) >> 1; + avg += *(src++) >> 1; + __put_user(avg,(__u16*)(dst)); + } + + } else if (8 == bta->bits) { + /* copy + byte downsampling (audio A/D) */ + __u8 *src = bta->buf_cpu + bta->read_offset; + __u8 *dst = buffer + ret; + int n = ndst; + if (0 != verify_area(VERIFY_WRITE,dst,ndst)) { + if (0 == ret) + ret = -EFAULT; + break; + } + for (; n; n--, src += (1 << bta->sampleshift), dst++) + __put_user(*src,(__u8*)(dst)); + + } else { + /* copy + word downsampling (audio A/D) */ + __u16 *src = (__u16*)(bta->buf_cpu + bta->read_offset); + __u16 *dst = (__u16*)(buffer + ret); + int n = ndst>>1; + if (0 != verify_area(VERIFY_WRITE,dst,ndst)) { + if (0 == ret) + ret = -EFAULT; + break; + } + for (; n; n--, src += (1 << bta->sampleshift), dst++) + __put_user(*src,(__u16*)(dst)); + } + + ret += ndst; + swcount -= ndst; + hwcount -= nsrc; + bta->read_count -= nsrc; + bta->read_offset += nsrc; + if (bta->read_offset == bta->buf_size) + bta->read_offset = 0; + } + up(&bta->lock); + remove_wait_queue(&bta->readq, &wait); + current->state = TASK_RUNNING; + return ret; +} + +static ssize_t btaudio_dsp_write(struct file *file, const char *buffer, + size_t count, loff_t *ppos) +{ + return -EINVAL; +} + +static int btaudio_dsp_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + struct btaudio *bta = file->private_data; + int s, i, ret, val = 0; + + switch (cmd) { + case OSS_GETVERSION: + return put_user(SOUND_VERSION, (int *)arg); + case SNDCTL_DSP_GETCAPS: + return 0; + + case SNDCTL_DSP_SPEED: + if (get_user(val, (int*)arg)) + return -EFAULT; + if (analog) { + for (s = 0; s < 16; s++) + if (val << s >= HWBASE_AD*4/15) + break; + for (i = 15; i >= 5; i--) + if (val << s <= HWBASE_AD*4/i) + break; + bta->sampleshift = s; + bta->decimation = i; + if (debug) + printk("btaudio: rate: req=%d dec=%d shift=%d hwrate=%d swrate=%d\n", + val,i,s,(HWBASE_AD*4/i),(HWBASE_AD*4/i)>>s); + } else { + bta->sampleshift = (bta->channels == 2) ? 0 : 1; + bta->decimation = 0; + } + if (bta->recording) { + down(&bta->lock); + stop_recording(bta); + start_recording(bta); + up(&bta->lock); + } + /* fall through */ + case SOUND_PCM_READ_RATE: + if (analog) { + return put_user(HWBASE_AD*4/bta->decimation>>bta->sampleshift, (int*)arg); + } else { + return put_user(HWBASE_DA, (int*)arg); + } + + case SNDCTL_DSP_STEREO: + if (!analog) { + if (get_user(val, (int*)arg)) + return -EFAULT; + bta->channels = (val > 0) ? 2 : 1; + bta->sampleshift = (bta->channels == 2) ? 0 : 1; + printk("btaudio: stereo=%d channels=%d\n", + val,bta->channels); + } else { + if (val == 1) + return -EFAULT; + else { + bta->channels = 1; + printk("btaudio: stereo=0 channels=1\n"); + } + } + return put_user((bta->channels)-1, (int *)arg); + + case SNDCTL_DSP_CHANNELS: + if (!analog) { + if (get_user(val, (int*)arg)) + return -EFAULT; + bta->channels = (val > 1) ? 2 : 1; + bta->sampleshift = (bta->channels == 2) ? 0 : 1; + printk("btaudio: val=%d channels=%d\n", + val,bta->channels); + } + /* fall through */ + case SOUND_PCM_READ_CHANNELS: + return put_user(bta->channels, (int *)arg); + + case SNDCTL_DSP_GETFMTS: /* Returns a mask */ + if (analog) + return put_user(AFMT_S16_LE|AFMT_S8, (int*)arg); + else + return put_user(AFMT_S16_LE, (int*)arg); + + case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/ + if (get_user(val, (int*)arg)) + return -EFAULT; + if (val != AFMT_QUERY) { + if (analog) + bta->bits = (val == AFMT_S8) ? 8 : 16; + else + bta->bits = 16; + if (bta->recording) { + down(&bta->lock); + stop_recording(bta); + start_recording(bta); + up(&bta->lock); + } + } + if (debug) + printk("btaudio: fmt: bits=%d\n",bta->bits); + return put_user((bta->bits==16) ? AFMT_S16_LE : AFMT_S8, + (int*)arg); + break; + case SOUND_PCM_READ_BITS: + return put_user(bta->bits, (int*)arg); + + case SNDCTL_DSP_NONBLOCK: + file->f_flags |= O_NONBLOCK; + return 0; + + case SNDCTL_DSP_RESET: + if (bta->recording) { + down(&bta->lock); + stop_recording(bta); + up(&bta->lock); + } + return 0; + case SNDCTL_DSP_GETBLKSIZE: + if (!bta->recording) { + if (0 != (ret = alloc_buffer(bta))) + return ret; + if (0 != (ret = make_risc(bta))) + return ret; + } + return put_user(bta->block_bytes>>bta->sampleshift,(int*)arg); + + case SNDCTL_DSP_SYNC: + /* NOP */ + return 0; +#if 0 /* TODO */ + case SNDCTL_DSP_GETTRIGGER: + case SNDCTL_DSP_SETTRIGGER: + case SNDCTL_DSP_SETFRAGMENT: +#endif + default: + return -EINVAL; + } +} + +static unsigned int btaudio_dsp_poll(struct file *file, struct poll_table_struct *wait) +{ + struct btaudio *bta = file->private_data; + unsigned int mask = 0; + + poll_wait(file, &bta->readq, wait); + + if (0 == bta->read_count) + mask |= (POLLIN | POLLRDNORM); + + return mask; +} + +static struct file_operations btaudio_dsp_fops = { + owner: THIS_MODULE, + llseek: btaudio_llseek, + open: btaudio_dsp_open, + release: btaudio_dsp_release, + read: btaudio_dsp_read, + write: btaudio_dsp_write, + ioctl: btaudio_dsp_ioctl, + poll: btaudio_dsp_poll, +}; + +/* -------------------------------------------------------------- */ + +static char *irq_name[] = { "", "", "", "OFLOW", "", "", "", "", "", "", "", + "RISCI", "FBUS", "FTRGT", "FDSR", "PPERR", + "RIPERR", "PABORT", "OCERR", "SCERR" }; + +static void btaudio_irq(int irq, void *dev_id, struct pt_regs * regs) +{ + int count = 0; + u32 stat,astat; + struct btaudio *bta = dev_id; + + for (;;) { + count++; + stat = btread(REG_INT_STAT); + astat = stat & btread(REG_INT_MASK); + if (!astat) + return; + btwrite(astat,REG_INT_STAT); + + if (irq_debug) { + int i; + printk("btaudio: irq loop=%d risc=%x, bits:", + count, stat>>28); + for (i = 0; i < (sizeof(irq_name)/sizeof(char*)); i++) { + if (stat & (1 << i)) + printk(" %s",irq_name[i]); + if (astat & (1 << i)) + printk("*"); + } + printk("\n"); + } + if (stat & IRQ_RISCI) { + int blocks; + blocks = (stat >> 28) - bta->dma_block; + if (blocks < 0) + blocks += bta->block_count; + bta->dma_block = stat >> 28; + if (bta->read_count + 2*bta->block_bytes > bta->buf_size) { + stop_recording(bta); + printk("btaudio: buffer overrun\n"); + } + if (blocks > 0) { + bta->read_count += blocks * bta->block_bytes; + wake_up_interruptible(&bta->readq); + } + } + if (count > 10) { + printk("btaudio: Oops - irq mask cleared\n"); + btwrite(0, REG_INT_MASK); + } + } + return; +} + +/* -------------------------------------------------------------- */ + +static int __devinit btaudio_probe(struct pci_dev *pci_dev, + const struct pci_device_id *pci_id) +{ + struct btaudio *bta; + unsigned char revision,latency; + int rc = -EBUSY; + + if (pci_enable_device(pci_dev)) + return -EIO; + if (!request_mem_region(pci_resource_start(pci_dev,0), + pci_resource_len(pci_dev,0), + "btaudio")) { + return -EBUSY; + } + + bta = kmalloc(sizeof(*bta),GFP_ATOMIC); + memset(bta,0,sizeof(*bta)); + + bta->pci = pci_dev; + bta->irq = pci_dev->irq; + bta->mem = pci_resource_start(pci_dev,0); + bta->mmio = ioremap(pci_resource_start(pci_dev,0), + pci_resource_len(pci_dev,0)); + + bta->source = 1; + bta->bits = 8; + bta->channels = 1; + if (analog) { + bta->decimation = 15; + } else { + bta->decimation = 0; + bta->sampleshift = 1; + } + + init_MUTEX(&bta->lock); + init_waitqueue_head(&bta->readq); + + pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &revision); + pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &latency); + printk("btaudio: Bt%x (rev %d) at %02x:%02x.%x, ", + pci_dev->device,revision,pci_dev->bus->number, + PCI_SLOT(pci_dev->devfn),PCI_FUNC(pci_dev->devfn)); + printk("irq: %d, latency: %d, memory: 0x%lx\n", + bta->irq, latency, bta->mem); + + /* init hw */ + btwrite(0, REG_GPIO_DMA_CTL); + btwrite(0, REG_INT_MASK); + btwrite(~(u32)0x0, REG_INT_STAT); + pci_set_master(pci_dev); + + if ((rc = request_irq(bta->irq, btaudio_irq, SA_SHIRQ|SA_INTERRUPT, + "btaudio",(void *)bta)) < 0) { + printk("btaudio: can't request irq (rc=%d)\n",rc); + goto fail1; + } + + /* register devices */ + rc = bta->dsp_dev = register_sound_dsp(&btaudio_dsp_fops,dsp); + if (rc < 0) { + printk("btaudio: can't register dsp (rc=%d)\n",rc); + goto fail2; + } + if (analog) { + rc = bta->mixer_dev = register_sound_mixer(&btaudio_mixer_fops,mixer); + if (rc < 0) { + printk("btaudio: can't register mixer (rc=%d)\n",rc); + goto fail3; + } + } + if (debug) + printk("btaudio: dsp: minor=%d, mixer: minor=%d\n", + bta->dsp_dev,bta->mixer_dev); + + /* hook into linked list */ + bta->next = btaudios; + btaudios = bta; + + pci_set_drvdata(pci_dev,bta); + return 0; + + fail3: + unregister_sound_dsp(bta->dsp_dev); + fail2: + free_irq(bta->irq,bta); + fail1: + release_mem_region(pci_resource_start(pci_dev,0), + pci_resource_len(pci_dev,0)); + kfree(bta); + return rc; +} + +static void __devexit btaudio_remove(struct pci_dev *pci_dev) +{ + struct btaudio *bta = pci_get_drvdata(pci_dev); + struct btaudio *walk; + + /* turn off all DMA / IRQs */ + btand(~15, REG_GPIO_DMA_CTL); + btwrite(0, REG_INT_MASK); + btwrite(~(u32)0x0, REG_INT_STAT); + + /* unregister devices */ + unregister_sound_dsp(bta->dsp_dev); + if (analog) + unregister_sound_mixer(bta->mixer_dev); + + /* free resources */ + free_buffer(bta); + free_irq(bta->irq,bta); + release_mem_region(pci_resource_start(pci_dev,0), + pci_resource_len(pci_dev,0)); + + /* remove from linked list */ + if (bta == btaudios) { + btaudios = NULL; + } else { + for (walk = btaudios; walk->next != bta; walk = walk->next) + ; /* if (NULL == walk->next) BUG(); */ + walk->next = bta->next; + } + + pci_set_drvdata(pci_dev, NULL); + kfree(bta); + return; +} + +/* -------------------------------------------------------------- */ + +static struct pci_device_id btaudio_pci_tbl[] __devinitdata = { + { PCI_VENDOR_ID_BROOKTREE, 0x0878, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + { PCI_VENDOR_ID_BROOKTREE, 0x0879, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + {0,} +}; + +static struct pci_driver btaudio_pci_driver = { + name: "btaudio", + id_table: btaudio_pci_tbl, + probe: btaudio_probe, + remove: btaudio_remove, +}; + +int btaudio_init_module(void) +{ + printk("btaudio: driver version 0.5 loaded [%s mode]\n", + analog ? "audio A/D" : "digital audio"); + return pci_module_init(&btaudio_pci_driver); +} + +void btaudio_cleanup_module(void) +{ + pci_unregister_driver(&btaudio_pci_driver); + return; +} + +module_init(btaudio_init_module); +module_exit(btaudio_cleanup_module); + +MODULE_PARM(dsp,"i"); +MODULE_PARM(mixer,"i"); +MODULE_PARM(debug,"i"); +MODULE_PARM(irq_debug,"i"); +MODULE_PARM(analog,"i"); + +MODULE_DEVICE_TABLE(pci, btaudio_pci_tbl); +MODULE_DESCRIPTION("btaudio - bt878 audio dma driver"); +MODULE_AUTHOR("Gerd Knorr"); + +/* + * Local variables: + * c-basic-offset: 8 + * End: + */ diff -u --recursive --new-file v2.4.8/linux/drivers/sound/cmpci.c linux/drivers/sound/cmpci.c --- v2.4.8/linux/drivers/sound/cmpci.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/sound/cmpci.c Sun Aug 12 10:51:41 2001 @@ -84,7 +84,6 @@ /*****************************************************************************/ -#define EXPORT_SYMTAB #include #include #include @@ -93,7 +92,7 @@ #include #include #include -#include +#include #include #include #include @@ -346,7 +345,7 @@ /* --------------------------------------------------------------------- */ -extern __inline__ unsigned ld2(unsigned int x) +static inline unsigned ld2(unsigned int x) { unsigned r = 0; @@ -380,7 +379,7 @@ #undef hweight32 #endif -extern __inline__ unsigned int hweight32(unsigned int w) +static inline unsigned int hweight32(unsigned int w) { unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555); res = (res & 0x33333333) + ((res >> 2) & 0x33333333); @@ -448,7 +447,7 @@ set_countadc(s, count); } -extern __inline__ unsigned get_dmadac(struct cm_state *s) +static inline unsigned get_dmadac(struct cm_state *s) { unsigned int curr_addr; @@ -464,7 +463,7 @@ return curr_addr; } -extern __inline__ unsigned get_dmaadc(struct cm_state *s) +static inline unsigned get_dmaadc(struct cm_state *s) { unsigned int curr_addr; @@ -771,7 +770,7 @@ pause_adc(s); } -extern inline void disable_adc(struct cm_state *s) +static inline void disable_adc(struct cm_state *s) { /* disable channel */ s->enable &= ~CM_ENABLE_CH0; @@ -779,7 +778,7 @@ reset_adc(s); } -extern inline void disable_dac(struct cm_state *s) +static inline void disable_dac(struct cm_state *s) { /* disable channel */ s->enable &= ~CM_ENABLE_CH1; @@ -789,7 +788,7 @@ disable_adc(s); } -extern inline void enable_adc(struct cm_state *s) +static inline void enable_adc(struct cm_state *s) { if (!(s->enable & CM_ENABLE_CH0)) { /* enable channel */ @@ -799,7 +798,7 @@ maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~4, 0); } -extern inline void enable_dac_unlocked(struct cm_state *s) +static inline void enable_dac_unlocked(struct cm_state *s) { if (!(s->enable & CM_ENABLE_CH1)) { /* enable channel */ @@ -812,7 +811,7 @@ enable_adc(s); } -extern inline void enable_dac(struct cm_state *s) +static inline void enable_dac(struct cm_state *s) { unsigned long flags; @@ -821,7 +820,7 @@ spin_unlock_irqrestore(&s->lock, flags); } -extern inline void stop_adc_unlocked(struct cm_state *s) +static inline void stop_adc_unlocked(struct cm_state *s) { if (s->enable & CM_ENABLE_CH0) { /* disable interrupt */ @@ -830,7 +829,7 @@ } } -extern inline void stop_adc(struct cm_state *s) +static inline void stop_adc(struct cm_state *s) { unsigned long flags; @@ -840,7 +839,7 @@ } -extern inline void stop_dac_unlocked(struct cm_state *s) +static inline void stop_dac_unlocked(struct cm_state *s) { if (s->enable & CM_ENABLE_CH1) { /* disable interrupt */ @@ -851,7 +850,7 @@ stop_adc_unlocked(s); } -extern inline void stop_dac(struct cm_state *s) +static inline void stop_dac(struct cm_state *s) { unsigned long flags; @@ -1095,7 +1094,7 @@ return 0; } -extern __inline__ void clear_advance(struct cm_state *s) +static inline void clear_advance(struct cm_state *s) { unsigned char c = (s->fmt & (CM_CFMT_16BIT << CM_CFMT_DACSHIFT)) ? 0 : 0x80; unsigned char *buf = s->dma_dac.rawbuf; @@ -1568,13 +1567,6 @@ /* --------------------------------------------------------------------- */ -static loff_t cm_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - -/* --------------------------------------------------------------------- */ - static int cm_open_mixdev(struct inode *inode, struct file *file) { int minor = MINOR(inode->i_rdev); @@ -1604,7 +1596,7 @@ static /*const*/ struct file_operations cm_mixer_fops = { owner: THIS_MODULE, - llseek: cm_llseek, + llseek: no_llseek, ioctl: cm_ioctl_mixdev, open: cm_open_mixdev, release: cm_release_mixdev, @@ -2422,7 +2414,7 @@ static /*const*/ struct file_operations cm_audio_fops = { owner: THIS_MODULE, - llseek: cm_llseek, + llseek: no_llseek, read: cm_read, write: cm_write, poll: cm_poll, @@ -2701,7 +2693,7 @@ static /*const*/ struct file_operations cm_midi_fops = { owner: THIS_MODULE, - llseek: cm_llseek, + llseek: no_llseek, read: cm_midi_read, write: cm_midi_write, poll: cm_midi_poll, @@ -2868,7 +2860,7 @@ static /*const*/ struct file_operations cm_dmfm_fops = { owner: THIS_MODULE, - llseek: cm_llseek, + llseek: no_llseek, ioctl: cm_dmfm_ioctl, open: cm_dmfm_open, release: cm_dmfm_release, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/cs4281/cs4281m.c linux/drivers/sound/cs4281/cs4281m.c --- v2.4.8/linux/drivers/sound/cs4281/cs4281m.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/sound/cs4281/cs4281m.c Sun Aug 12 10:51:41 2001 @@ -65,7 +65,7 @@ #include #include #include -#include +#include #include #include #include @@ -2567,14 +2567,6 @@ // --------------------------------------------------------------------- -static loff_t cs4281_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - - -// --------------------------------------------------------------------- - static int cs4281_open_mixdev(struct inode *inode, struct file *file) { int minor = MINOR(inode->i_rdev); @@ -2630,7 +2622,7 @@ // Mixer file operations struct. // ****************************************************************************************** static /*const */ struct file_operations cs4281_mixer_fops = { - llseek:cs4281_llseek, + llseek:no_llseek, ioctl:cs4281_ioctl_mixdev, open:cs4281_open_mixdev, release:cs4281_release_mixdev, @@ -3747,7 +3739,7 @@ // Wave (audio) file operations struct. // ****************************************************************************************** static /*const */ struct file_operations cs4281_audio_fops = { - llseek:cs4281_llseek, + llseek:no_llseek, read:cs4281_read, write:cs4281_write, poll:cs4281_poll, @@ -4096,7 +4088,7 @@ // Midi file operations struct. // ****************************************************************************************** static /*const */ struct file_operations cs4281_midi_fops = { - llseek:cs4281_llseek, + llseek:no_llseek, read:cs4281_midi_read, write:cs4281_midi_write, poll:cs4281_midi_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/cs46xx.c linux/drivers/sound/cs46xx.c --- v2.4.8/linux/drivers/sound/cs46xx.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/sound/cs46xx.c Sun Aug 12 10:51:41 2001 @@ -51,6 +51,11 @@ * 20010420-tw cleanup powerdown/up code. * 20010521-tw eliminate pops, and fixes for powerdown. * 20010525-tw added fixes for thinkpads with powerdown logic. + * 20010723-sh patch from Horms (Simon Horman) - + * SOUND_PCM_READ_BITS returns bits as set in driver + * rather than a logical or of the possible values. + * Various ioctls handle the case where the device + * is open for reading or writing but not both better. * * Status: * Playback/Capture supported from 8k-48k. @@ -378,7 +383,6 @@ static int cs_release_mixdev(struct inode *inode, struct file *file); static int cs_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); -static loff_t cs_llseek(struct file *file, loff_t offset, int origin); static int cs_hardware_init(struct cs_card *card); static int cs46xx_powerup(struct cs_card *card, unsigned int type); static int cs461x_powerdown(struct cs_card *card, unsigned int type, int suspendflag); @@ -997,7 +1001,7 @@ /* get current playback/recording dma buffer pointer (byte offset from LBA), called with spinlock held! */ -extern __inline__ unsigned cs_get_dma_addr(struct cs_state *state) +static inline unsigned cs_get_dma_addr(struct cs_state *state) { struct dmabuf *dmabuf = &state->dmabuf; u32 offset; @@ -1044,7 +1048,7 @@ } /* Stop recording (lock held) */ -extern __inline__ void __stop_adc(struct cs_state *state) +static inline void __stop_adc(struct cs_state *state) { struct dmabuf *dmabuf = &state->dmabuf; struct cs_card *card = state->card; @@ -1931,7 +1935,7 @@ */ static /*const*/ struct file_operations cs_midi_fops = { CS_OWNER CS_THIS_MODULE - llseek: cs_llseek, + llseek: no_llseek, read: cs_midi_read, write: cs_midi_write, poll: cs_midi_poll, @@ -1939,11 +1943,6 @@ release: cs_midi_release, }; -static loff_t cs_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - /* * * CopySamples copies 16-bit stereo signed samples from the source to the @@ -2846,6 +2845,8 @@ return 0; case SNDCTL_DSP_GETOSPACE: + if (!(file->f_mode & FMODE_WRITE)) + return -EINVAL; state = (struct cs_state *)card->states[1]; if(state) { @@ -2869,6 +2870,8 @@ return -ENODEV; case SNDCTL_DSP_GETISPACE: + if (!(file->f_mode & FMODE_READ)) + return -EINVAL; state = (struct cs_state *)card->states[0]; if(state) { @@ -2950,6 +2953,8 @@ return 0; case SNDCTL_DSP_GETIPTR: + if (!(file->f_mode & FMODE_READ)) + return -EINVAL; state = (struct cs_state *)card->states[0]; if(state) { @@ -2965,6 +2970,8 @@ return -ENODEV; case SNDCTL_DSP_GETOPTR: + if (!(file->f_mode & FMODE_WRITE)) + return -EINVAL; state = (struct cs_state *)card->states[1]; if(state) { @@ -3015,7 +3022,10 @@ return put_user(val, (int *)arg); case SOUND_PCM_READ_RATE: - state = (struct cs_state *)card->states[0]; + if(file->f_mode & FMODE_READ) + state = (struct cs_state *)card->states[0]; + else + state = (struct cs_state *)card->states[1]; if(state) { dmabuf = &state->dmabuf; @@ -3025,7 +3035,10 @@ case SOUND_PCM_READ_CHANNELS: - state = (struct cs_state *)card->states[0]; + if(file->f_mode & FMODE_READ) + state = (struct cs_state *)card->states[0]; + else + state = (struct cs_state *)card->states[1]; if(state) { dmabuf = &state->dmabuf; @@ -3035,11 +3048,16 @@ return put_user(0, (int *)arg); case SOUND_PCM_READ_BITS: - state = (struct cs_state *)card->states[0]; + if(file->f_mode & FMODE_READ) + state = (struct cs_state *)card->states[0]; + else + state = (struct cs_state *)card->states[1]; if(state) { dmabuf = &state->dmabuf; - return put_user(AFMT_S16_LE | AFMT_U8, (int *)arg); + return put_user((dmabuf->fmt & CS_FMT_16BIT) ? + AFMT_S16_LE : AFMT_U8, (int *)arg); + } return put_user(0, (int *)arg); @@ -3799,7 +3817,7 @@ static /*const*/ struct file_operations cs461x_fops = { CS_OWNER CS_THIS_MODULE - llseek: cs_llseek, + llseek: no_llseek, read: cs_read, write: cs_write, poll: cs_poll, @@ -4206,7 +4224,7 @@ static /*const*/ struct file_operations cs_mixer_fops = { CS_OWNER CS_THIS_MODULE - llseek: cs_llseek, + llseek: no_llseek, ioctl: cs_ioctl_mixdev, open: cs_open_mixdev, release: cs_release_mixdev, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/dmasound/dmasound.h linux/drivers/sound/dmasound/dmasound.h --- v2.4.8/linux/drivers/sound/dmasound/dmasound.h Tue Nov 7 10:59:43 2000 +++ linux/drivers/sound/dmasound/dmasound.h Wed Aug 15 01:22:16 2001 @@ -47,7 +47,6 @@ #define MAX_BUFSIZE 128 /* Limit for Amiga in KB */ -#define min(x, y) ((x) < (y) ? (x) : (y)) #define le2be16(x) (((x)<<8 & 0xff00) | ((x)>>8 & 0x00ff)) #define le2be16dbl(x) (((x)<<8 & 0xff00ff00) | ((x)>>8 & 0x00ff00ff)) diff -u --recursive --new-file v2.4.8/linux/drivers/sound/dmasound/dmasound_atari.c linux/drivers/sound/dmasound/dmasound_atari.c --- v2.4.8/linux/drivers/sound/dmasound/dmasound_atari.c Mon Nov 27 17:57:34 2000 +++ linux/drivers/sound/dmasound/dmasound_atari.c Wed Aug 15 01:22:16 2001 @@ -154,7 +154,7 @@ ssize_t count, used; u_char *p = &frame[*frameUsed]; - count = min(userCount, frameLeft); + count = min(unsigned long, userCount, frameLeft); if (dmasound.soft.stereo) count &= ~1; used = count; @@ -177,7 +177,7 @@ ssize_t count, used; void *p = &frame[*frameUsed]; - count = min(userCount, frameLeft); + count = min(unsigned long, userCount, frameLeft); if (dmasound.soft.stereo) count &= ~1; used = count; @@ -196,7 +196,7 @@ if (!dmasound.soft.stereo) { u_char *p = &frame[*frameUsed]; - count = min(userCount, frameLeft); + count = min(unsigned long, userCount, frameLeft); used = count; while (count > 0) { u_char data; @@ -207,7 +207,7 @@ } } else { u_short *p = (u_short *)&frame[*frameUsed]; - count = min(userCount, frameLeft)>>1; + count = min(unsigned long, userCount, frameLeft)>>1; used = count*2; while (count > 0) { u_short data; @@ -230,7 +230,7 @@ if (!dmasound.soft.stereo) { u_short *p = (u_short *)&frame[*frameUsed]; - count = min(userCount, frameLeft)>>1; + count = min(unsigned long, userCount, frameLeft)>>1; used = count*2; while (count > 0) { u_short data; @@ -243,7 +243,7 @@ *frameUsed += used*2; } else { void *p = (u_short *)&frame[*frameUsed]; - count = min(userCount, frameLeft) & ~3; + count = min(unsigned long, userCount, frameLeft) & ~3; used = count; if (copy_from_user(p, userPtr, count)) return -EFAULT; @@ -261,7 +261,7 @@ if (!dmasound.soft.stereo) { u_short *p = (u_short *)&frame[*frameUsed]; - count = min(userCount, frameLeft)>>1; + count = min(unsigned long, userCount, frameLeft)>>1; used = count*2; while (count > 0) { u_short data; @@ -275,7 +275,7 @@ *frameUsed += used*2; } else { u_long *p = (u_long *)&frame[*frameUsed]; - count = min(userCount, frameLeft)>>2; + count = min(unsigned long, userCount, frameLeft)>>2; used = count*4; while (count > 0) { u_long data; @@ -299,7 +299,7 @@ count = frameLeft; if (!dmasound.soft.stereo) { u_short *p = (u_short *)&frame[*frameUsed]; - count = min(userCount, frameLeft)>>1; + count = min(unsigned long, userCount, frameLeft)>>1; used = count*2; while (count > 0) { u_short data; @@ -313,7 +313,7 @@ *frameUsed += used*2; } else { u_long *p = (u_long *)&frame[*frameUsed]; - count = min(userCount, frameLeft)>>2; + count = min(unsigned long, userCount, frameLeft)>>2; used = count*4; while (count > 0) { u_long data; @@ -338,7 +338,7 @@ count = frameLeft; if (!dmasound.soft.stereo) { u_short *p = (u_short *)&frame[*frameUsed]; - count = min(userCount, frameLeft)>>1; + count = min(unsigned long, userCount, frameLeft)>>1; used = count*2; while (count > 0) { u_short data; @@ -351,7 +351,7 @@ *frameUsed += used*2; } else { u_long *p = (u_long *)&frame[*frameUsed]; - count = min(userCount, frameLeft)>>2; + count = min(unsigned long, userCount, frameLeft)>>2; used = count; while (count > 0) { u_long data; diff -u --recursive --new-file v2.4.8/linux/drivers/sound/dmasound/dmasound_awacs.c linux/drivers/sound/dmasound/dmasound_awacs.c --- v2.4.8/linux/drivers/sound/dmasound/dmasound_awacs.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/sound/dmasound/dmasound_awacs.c Wed Aug 15 01:22:16 2001 @@ -267,7 +267,7 @@ frameLeft >>= 2; if (stereo) userCount >>= 1; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { u_char data; if (get_user(data, userPtr++)) @@ -298,7 +298,7 @@ frameLeft >>= 2; if (stereo) userCount >>= 1; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { u_char data; if (get_user(data, userPtr++)) @@ -329,7 +329,7 @@ frameLeft >>= 2; if (stereo) userCount >>= 1; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { u_char data; if (get_user(data, userPtr++)) @@ -359,7 +359,7 @@ frameLeft >>= 2; userCount >>= (stereo? 2: 1); - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); if (!stereo) { short *up = (short *) userPtr; while (count > 0) { @@ -390,7 +390,7 @@ frameLeft >>= 2; userCount >>= (stereo? 2: 1); - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { int data; if (get_user(data, up++)) @@ -648,7 +648,7 @@ frameLeft >>= 2; if (stereo) userCount >>= 1; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { u_char data; @@ -681,7 +681,7 @@ frameLeft >>= 2; if (stereo) userCount >>= 1; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { u_char data; @@ -713,7 +713,7 @@ frameLeft >>= 2; userCount >>= (stereo? 2: 1); - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); if (!stereo) { short *up = (short *) userPtr; while (count > 0) { @@ -744,7 +744,7 @@ frameLeft >>= 2; userCount >>= (stereo? 2: 1); - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { int data; diff -u --recursive --new-file v2.4.8/linux/drivers/sound/dmasound/dmasound_core.c linux/drivers/sound/dmasound/dmasound_core.c --- v2.4.8/linux/drivers/sound/dmasound/dmasound_core.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/sound/dmasound/dmasound_core.c Sun Aug 12 10:51:41 2001 @@ -385,16 +385,6 @@ /* - * Common stuff - */ - -static long long sound_lseek(struct file *file, long long offset, int orig) -{ - return -ESPIPE; -} - - - /* * Mid level stuff */ @@ -536,7 +526,7 @@ static struct file_operations mixer_fops = { owner: THIS_MODULE, - llseek: sound_lseek, + llseek: no_llseek, ioctl: mixer_ioctl, open: mixer_open, release: mixer_release, @@ -1036,7 +1026,7 @@ static struct file_operations sq_fops = { owner: THIS_MODULE, - llseek: sound_lseek, + llseek: no_llseek, write: sq_write, ioctl: sq_ioctl, open: sq_open, @@ -1174,7 +1164,7 @@ static struct file_operations state_fops = { owner: THIS_MODULE, - llseek: sound_lseek, + llseek: no_llseek, read: state_read, open: state_open, release: state_release, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/dmasound/dmasound_paula.c linux/drivers/sound/dmasound/dmasound_paula.c --- v2.4.8/linux/drivers/sound/dmasound/dmasound_paula.c Mon Nov 27 17:57:34 2000 +++ linux/drivers/sound/dmasound/dmasound_paula.c Wed Aug 15 01:22:16 2001 @@ -155,14 +155,14 @@ if (!dmasound.soft.stereo) { void *p = &frame[*frameUsed]; - count = min(userCount, frameLeft) & ~1; + count = min(unsigned long, userCount, frameLeft) & ~1; used = count; if (copy_from_user(p, userPtr, count)) return -EFAULT; } else { u_char *left = &frame[*frameUsed>>1]; u_char *right = left+write_sq_block_size_half; - count = min(userCount, frameLeft)>>1 & ~1; + count = min(unsigned long, userCount, frameLeft)>>1 & ~1; used = count*2; while (count > 0) { if (get_user(*left++, userPtr++) @@ -189,7 +189,7 @@ \ if (!dmasound.soft.stereo) { \ u_char *p = &frame[*frameUsed]; \ - count = min(userCount, frameLeft) & ~1; \ + count = min(unsigned long, userCount, frameLeft) & ~1; \ used = count; \ while (count > 0) { \ u_char data; \ @@ -201,7 +201,7 @@ } else { \ u_char *left = &frame[*frameUsed>>1]; \ u_char *right = left+write_sq_block_size_half; \ - count = min(userCount, frameLeft)>>1 & ~1; \ + count = min(unsigned long, userCount, frameLeft)>>1 & ~1;\ used = count*2; \ while (count > 0) { \ u_char data; \ @@ -242,7 +242,7 @@ if (!dmasound.soft.stereo) { \ u_char *high = &frame[*frameUsed>>1]; \ u_char *low = high+write_sq_block_size_half; \ - count = min(userCount, frameLeft)>>1 & ~1; \ + count = min(unsigned long, userCount, frameLeft)>>1 & ~1;\ used = count*2; \ while (count > 0) { \ if (get_user(data, ((u_short *)userPtr)++)) \ @@ -257,7 +257,7 @@ u_char *leftl = lefth+write_sq_block_size_quarter; \ u_char *righth = lefth+write_sq_block_size_half; \ u_char *rightl = righth+write_sq_block_size_quarter; \ - count = min(userCount, frameLeft)>>2 & ~1; \ + count = min(unsigned long, userCount, frameLeft)>>2 & ~1;\ used = count*4; \ while (count > 0) { \ if (get_user(data, ((u_short *)userPtr)++)) \ diff -u --recursive --new-file v2.4.8/linux/drivers/sound/dmasound/dmasound_q40.c linux/drivers/sound/dmasound/dmasound_q40.c --- v2.4.8/linux/drivers/sound/dmasound/dmasound_q40.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/sound/dmasound/dmasound_q40.c Wed Aug 15 01:22:16 2001 @@ -58,7 +58,7 @@ ssize_t count, used; u_char *p = (u_char *) &frame[*frameUsed]; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); if (copy_from_user(p,userPtr,count)) return -EFAULT; while (count > 0) { @@ -84,7 +84,7 @@ frameLeft >>= 1; if (stereo) userCount >>= 1; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { u_char data; if (get_user(data, userPtr++)) @@ -112,7 +112,7 @@ ssize_t count, used; u_char *p = (u_char *) &frame[*frameUsed]; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); if (copy_from_user(p,userPtr,count)) return -EFAULT; while (count > 0) { @@ -136,7 +136,7 @@ frameLeft >>= 1; if (stereo) userCount >>= 1; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { u_char data; if (get_user(data, userPtr++)) @@ -164,7 +164,7 @@ ssize_t count, used; u_char *p = (u_char *) &frame[*frameUsed]; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); if (copy_from_user(p,userPtr,count)) return -EFAULT; *frameUsed += used; @@ -184,7 +184,7 @@ frameLeft >>= 1; if (stereo) userCount >>= 1; - used = count = min(userCount, frameLeft); + used = count = min(unsigned long, userCount, frameLeft); while (count > 0) { u_char data; if (get_user(data, userPtr++)) diff -u --recursive --new-file v2.4.8/linux/drivers/sound/emu10k1/Makefile linux/drivers/sound/emu10k1/Makefile --- v2.4.8/linux/drivers/sound/emu10k1/Makefile Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/emu10k1/Makefile Sun Aug 12 10:25:31 2001 @@ -5,13 +5,16 @@ O_TARGET := emu10k1.o obj-y := audio.o cardmi.o cardmo.o cardwi.o cardwo.o ecard.o \ - efxmgr.o emuadxmg.o hwaccess.o irqmgr.o joystick.o \ - main.o midi.o mixer.o passthrough.o recmgr.o timer.o \ - voicemgr.o + efxmgr.o emuadxmg.o hwaccess.o irqmgr.o main.o midi.o \ + mixer.o passthrough.o recmgr.o timer.o voicemgr.o obj-m := $(O_TARGET) ifdef DEBUG EXTRA_CFLAGS += -DEMU10K1_DEBUG +endif + +ifdef CONFIG_MIDI_EMU10K1 + EXTRA_CFLAGS += -DEMU10K1_SEQUENCER endif include $(TOPDIR)/Rules.make diff -u --recursive --new-file v2.4.8/linux/drivers/sound/emu10k1/audio.c linux/drivers/sound/emu10k1/audio.c --- v2.4.8/linux/drivers/sound/emu10k1/audio.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/emu10k1/audio.c Wed Aug 15 01:22:16 2001 @@ -55,11 +55,6 @@ static void calculate_ifrag(struct wiinst *); /* Audio file operations */ -static loff_t emu10k1_audio_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static ssize_t emu10k1_audio_read(struct file *file, char *buffer, size_t count, loff_t * ppos) { struct emu10k1_wavedevice *wave_dev = (struct emu10k1_wavedevice *) file->private_data; @@ -120,7 +115,7 @@ if ((bytestocopy >= wiinst->buffer.fragment_size) || (bytestocopy >= count)) { - bytestocopy = min(bytestocopy, count); + bytestocopy = min(u32, bytestocopy, count); emu10k1_wavein_xferdata(wiinst, (u8 *) buffer, &bytestocopy); @@ -220,7 +215,7 @@ if ((bytestocopy >= woinst->buffer.fragment_size) || (bytestocopy >= count)) { - bytestocopy = min(bytestocopy, count); + bytestocopy = min(u32, bytestocopy, count); emu10k1_waveout_xferdata(woinst, (u8 *) buffer, &bytestocopy); @@ -1223,7 +1218,6 @@ tasklet_init(&woinst->timer.tasklet, emu10k1_waveout_bh, (unsigned long) wave_dev); wave_dev->woinst = woinst; emu10k1_waveout_setformat(wave_dev, &woinst->format); - } file->private_data = (void *) wave_dev; @@ -1266,7 +1260,7 @@ spin_unlock_irqrestore(&woinst->lock, flags); /* wait for the tasklet (bottom-half) to finish */ - tasklet_unlock_wait(&woinst->timer.tasklet); + tasklet_kill(&woinst->timer.tasklet); kfree(wave_dev->woinst); } @@ -1280,7 +1274,7 @@ } spin_unlock_irqrestore(&wiinst->lock, flags); - tasklet_unlock_wait(&wiinst->timer.tasklet); + tasklet_kill(&wiinst->timer.tasklet); kfree(wave_dev->wiinst); } @@ -1496,6 +1490,9 @@ u32 bytestocopy; unsigned long flags; + if (!wiinst) + return; + spin_lock_irqsave(&wiinst->lock, flags); if (!(wiinst->state & WAVE_STATE_STARTED)) { @@ -1523,6 +1520,9 @@ u32 bytestocopy; unsigned long flags; + if (!woinst) + return; + spin_lock_irqsave(&woinst->lock, flags); if (!(woinst->state & WAVE_STATE_STARTED)) { @@ -1549,7 +1549,7 @@ struct file_operations emu10k1_audio_fops = { owner: THIS_MODULE, - llseek: emu10k1_audio_llseek, + llseek: no_llseek, read: emu10k1_audio_read, write: emu10k1_audio_write, poll: emu10k1_audio_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/emu10k1/cardwi.c linux/drivers/sound/emu10k1/cardwi.c --- v2.4.8/linux/drivers/sound/emu10k1/cardwi.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/emu10k1/cardwi.c Wed Aug 15 01:22:16 2001 @@ -325,7 +325,7 @@ u32 sizetocopy, sizetocopy_now, start; unsigned long flags; - sizetocopy = min(buffer->size, *size); + sizetocopy = min(u32, buffer->size, *size); *size = sizetocopy; if (!sizetocopy) diff -u --recursive --new-file v2.4.8/linux/drivers/sound/emu10k1/cardwo.c linux/drivers/sound/emu10k1/cardwo.c --- v2.4.8/linux/drivers/sound/emu10k1/cardwo.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/emu10k1/cardwo.c Wed Aug 15 01:22:16 2001 @@ -581,7 +581,7 @@ u32 sizetocopy, sizetocopy_now, start; unsigned long flags; - sizetocopy = min(buffer->size, *size); + sizetocopy = min(u32, buffer->size, *size); *size = sizetocopy; if (!sizetocopy) diff -u --recursive --new-file v2.4.8/linux/drivers/sound/emu10k1/hwaccess.h linux/drivers/sound/emu10k1/hwaccess.h --- v2.4.8/linux/drivers/sound/emu10k1/hwaccess.h Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/emu10k1/hwaccess.h Wed Aug 15 01:22:16 2001 @@ -53,8 +53,6 @@ #define FLAGS_AVAILABLE 0x0001 #define FLAGS_READY 0x0002 -#define min(x,y) ((x) < (y)) ? (x) : (y) - struct memhandle { dma_addr_t dma_handle; diff -u --recursive --new-file v2.4.8/linux/drivers/sound/emu10k1/joystick.c linux/drivers/sound/emu10k1/joystick.c --- v2.4.8/linux/drivers/sound/emu10k1/joystick.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/emu10k1/joystick.c Wed Dec 31 16:00:00 1969 @@ -1,204 +0,0 @@ -/* - ********************************************************************** - * joystick.c - Creative EMU10K1 Joystick port driver - * Copyright 2000 Rui Sousa. - * - ********************************************************************** - * - * Date Author Summary of changes - * ---- ------ ------------------ - * April 1, 2000 Rui Sousa initial version - * April 28, 2000 Rui Sousa fixed a kernel oops, - * make use of kcompat24 for - * 2.2 kernels compatibility. - * May 1, 2000 Rui Sousa improved kernel compatibility - * layer. - * - ********************************************************************** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, - * USA. - * - **********************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -#define DRIVER_VERSION "0.3.1" - -#ifndef PCI_VENDOR_ID_CREATIVE -#define PCI_VENDOR_ID_CREATIVE 0x1102 -#endif - -#ifndef PCI_DEVICE_ID_CREATIVE_EMU10K1_JOYSTICK -#define PCI_DEVICE_ID_CREATIVE_EMU10K1_JOYSTICK 0x7002 -#endif - -/* PCI function 1 registers, address = + PCIBASE1 */ - -#define JOYSTICK1 0x00 /* Analog joystick port register */ -#define JOYSTICK2 0x01 /* Analog joystick port register */ -#define JOYSTICK3 0x02 /* Analog joystick port register */ -#define JOYSTICK4 0x03 /* Analog joystick port register */ -#define JOYSTICK5 0x04 /* Analog joystick port register */ -#define JOYSTICK6 0x05 /* Analog joystick port register */ -#define JOYSTICK7 0x06 /* Analog joystick port register */ -#define JOYSTICK8 0x07 /* Analog joystick port register */ - -/* When writing, any write causes JOYSTICK_COMPARATOR output enable to be pulsed on write. */ -/* When reading, use these bitfields: */ -#define JOYSTICK_BUTTONS 0x0f /* Joystick button data */ -#define JOYSTICK_COMPARATOR 0xf0 /* Joystick comparator data */ - -#define NR_DEV 5 - -static int io[NR_DEV] = { 0, }; - -enum { - EMU10K1_JOYSTICK = 0 -}; - -static char *card_names[] = { - "EMU10K1 Joystick Port" -}; - -static struct pci_device_id emu10k1_joy_pci_tbl[] __devinitdata = { - {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_EMU10K1_JOYSTICK, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, EMU10K1_JOYSTICK}, - {0,} -}; - -MODULE_DEVICE_TABLE(pci, emu10k1_joy_pci_tbl); - -struct emu10k1_joy_card { - struct list_head list; - - struct pci_dev *pci_dev; - unsigned long iobase; - unsigned long length; - u8 addr_changed; -}; - -static LIST_HEAD(emu10k1_joy_devs); -static unsigned int devindex = 0; - -/* Driver initialization routine */ -static int __devinit emu10k1_joy_probe(struct pci_dev *pci_dev, const struct pci_device_id *pci_id) -{ - struct emu10k1_joy_card *card; - u16 model; - u8 chiprev; - - if ((card = kmalloc(sizeof(struct emu10k1_joy_card), GFP_KERNEL)) == NULL) { - printk(KERN_ERR "emu10k1-joy: out of memory\n"); - return -ENOMEM; - } - memset(card, 0, sizeof(struct emu10k1_joy_card)); - - if (pci_enable_device(pci_dev)) { - printk(KERN_ERR "emu10k1-joy: couldn't enable device\n"); - kfree(card); - return -ENODEV; - } - - card->iobase = pci_resource_start(pci_dev, 0); - card->length = pci_resource_len(pci_dev, 0); - - if (request_region(card->iobase, card->length, card_names[pci_id->driver_data]) - == NULL) { - printk(KERN_ERR "emu10k1-joy: IO space in use\n"); - kfree(card); - return -ENODEV; - } - - pci_set_drvdata(pci_dev, card); - - card->pci_dev = pci_dev; - card->addr_changed = 0; - - pci_read_config_byte(pci_dev, PCI_REVISION_ID, &chiprev); - pci_read_config_word(pci_dev, PCI_SUBSYSTEM_ID, &model); - - printk(KERN_INFO "emu10k1-joy: %s rev %d model 0x%x found, IO at 0x%04lx-0x%04lx\n", - card_names[pci_id->driver_data], chiprev, model, card->iobase, - card->iobase + card->length - 1); - - if (io[devindex]) { - if ((io[devindex] & ~0x18) != 0x200) { - printk(KERN_ERR "emu10k1-joy: invalid io value\n"); - release_region(card->iobase, card->length); - kfree(card); - return -ENODEV; - } - - card->addr_changed = 1; - pci_write_config_dword(pci_dev, PCI_BASE_ADDRESS_0, io[devindex]); - printk(KERN_INFO "emu10k1-joy: IO ports mirrored at 0x%03x\n", io[devindex]); - } - - list_add(&card->list, &emu10k1_joy_devs); - devindex++; - - return 0; -} - -static void __devexit emu10k1_joy_remove(struct pci_dev *pci_dev) -{ - struct emu10k1_joy_card *card = pci_get_drvdata(pci_dev); - - if(card->addr_changed) - pci_write_config_dword(pci_dev, PCI_BASE_ADDRESS_0, card->iobase); - - release_region(card->iobase, card->length); - - list_del(&card->list); - kfree(card); - pci_set_drvdata(pci_dev, NULL); -} - -MODULE_PARM(io, "1-" __MODULE_STRING(NR_DEV) "i"); -MODULE_PARM_DESC(io, "sets joystick port address"); -MODULE_AUTHOR("Rui Sousa (Email to: emu10k1-devel@opensource.creative.com)"); -MODULE_DESCRIPTION("Creative EMU10K1 PCI Joystick Port v" DRIVER_VERSION - "\nCopyright (C) 2000 Rui Sousa"); - -static struct pci_driver emu10k1_joy_pci_driver = { - name:"emu10k1 joystick", - id_table:emu10k1_joy_pci_tbl, - probe:emu10k1_joy_probe, - remove:emu10k1_joy_remove, -}; - -static int __init emu10k1_joy_init_module(void) -{ - printk(KERN_INFO "Creative EMU10K1 PCI Joystick Port, version " DRIVER_VERSION ", " __TIME__ - " " __DATE__ "\n"); - - return pci_module_init(&emu10k1_joy_pci_driver); -} - -static void __exit emu10k1_joy_cleanup_module(void) -{ - pci_unregister_driver(&emu10k1_joy_pci_driver); - return; -} - -module_init(emu10k1_joy_init_module); -module_exit(emu10k1_joy_cleanup_module); diff -u --recursive --new-file v2.4.8/linux/drivers/sound/emu10k1/main.c linux/drivers/sound/emu10k1/main.c --- v2.4.8/linux/drivers/sound/emu10k1/main.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/emu10k1/main.c Sun Aug 12 17:53:57 2001 @@ -92,8 +92,8 @@ #define MIDI_SYNTH_NAME "EMU10K1 MIDI" #define MIDI_SYNTH_CAPS SYNTH_CAP_INPUT -#include "sound_config.h" -#include "midi_synth.h" +#include "../sound_config.h" +#include "../midi_synth.h" /* this should be in dev_table.h */ #define SNDCARD_EMU10K1 46 @@ -370,10 +370,10 @@ static void __devinit emu10k1_midi_cleanup(struct emu10k1_card *card) { - tasklet_unlock_wait(&card->mpuout->tasklet); + tasklet_kill(&card->mpuout->tasklet); kfree(card->mpuout); - tasklet_unlock_wait(&card->mpuin->tasklet); + tasklet_kill(&card->mpuin->tasklet); kfree(card->mpuin); #ifdef EMU10K1_SEQUENCER @@ -1039,6 +1039,7 @@ static struct midi_operations emu10k1_midi_operations = { + THIS_MODULE, {"EMU10K1 MIDI", 0, 0, SNDCARD_EMU10K1}, &std_midi_synth, {0}, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/emu10k1/midi.c linux/drivers/sound/emu10k1/midi.c --- v2.4.8/linux/drivers/sound/emu10k1/midi.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/emu10k1/midi.c Sun Aug 12 10:25:31 2001 @@ -43,7 +43,7 @@ #include "midi.h" #ifdef EMU10K1_SEQUENCER -#include "sound_config.h" +#include "../sound_config.h" #endif static spinlock_t midi_spinlock __attribute((unused)) = SPIN_LOCK_UNLOCKED; diff -u --recursive --new-file v2.4.8/linux/drivers/sound/emu10k1/passthrough.h linux/drivers/sound/emu10k1/passthrough.h --- v2.4.8/linux/drivers/sound/emu10k1/passthrough.h Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/emu10k1/passthrough.h Sun Aug 12 10:25:31 2001 @@ -32,6 +32,7 @@ #ifndef _PASSTHROUGH_H #define _PASSTHROUGH_H +#include "hwaccess.h" #include "audio.h" /* number of 16-bit stereo samples in XTRAM buffer */ diff -u --recursive --new-file v2.4.8/linux/drivers/sound/es1370.c linux/drivers/sound/es1370.c --- v2.4.8/linux/drivers/sound/es1370.c Tue May 22 10:23:16 2001 +++ linux/drivers/sound/es1370.c Sun Aug 12 10:51:42 2001 @@ -401,6 +401,7 @@ } midi; struct gameport gameport; + struct semaphore sem; }; /* --------------------------------------------------------------------- */ @@ -416,7 +417,7 @@ /* --------------------------------------------------------------------- */ -extern inline unsigned ld2(unsigned int x) +static inline unsigned ld2(unsigned int x) { unsigned r = 0; @@ -460,7 +461,7 @@ /* --------------------------------------------------------------------- */ -extern inline void stop_adc(struct es1370_state *s) +static inline void stop_adc(struct es1370_state *s) { unsigned long flags; @@ -470,7 +471,7 @@ spin_unlock_irqrestore(&s->lock, flags); } -extern inline void stop_dac1(struct es1370_state *s) +static inline void stop_dac1(struct es1370_state *s) { unsigned long flags; @@ -480,7 +481,7 @@ spin_unlock_irqrestore(&s->lock, flags); } -extern inline void stop_dac2(struct es1370_state *s) +static inline void stop_dac2(struct es1370_state *s) { unsigned long flags; @@ -564,7 +565,7 @@ #define DMABUF_DEFAULTORDER (17-PAGE_SHIFT) #define DMABUF_MINORDER 1 -extern inline void dealloc_dmabuf(struct es1370_state *s, struct dmabuf *db) +static inline void dealloc_dmabuf(struct es1370_state *s, struct dmabuf *db) { struct page *page, *pend; @@ -632,28 +633,28 @@ return 0; } -extern inline int prog_dmabuf_adc(struct es1370_state *s) +static inline int prog_dmabuf_adc(struct es1370_state *s) { stop_adc(s); return prog_dmabuf(s, &s->dma_adc, DAC2_DIVTOSR((s->ctrl & CTRL_PCLKDIV) >> CTRL_SH_PCLKDIV), (s->sctrl >> SCTRL_SH_R1FMT) & ES1370_FMT_MASK, ES1370_REG_ADC_FRAMEADR); } -extern inline int prog_dmabuf_dac2(struct es1370_state *s) +static inline int prog_dmabuf_dac2(struct es1370_state *s) { stop_dac2(s); return prog_dmabuf(s, &s->dma_dac2, DAC2_DIVTOSR((s->ctrl & CTRL_PCLKDIV) >> CTRL_SH_PCLKDIV), (s->sctrl >> SCTRL_SH_P2FMT) & ES1370_FMT_MASK, ES1370_REG_DAC2_FRAMEADR); } -extern inline int prog_dmabuf_dac1(struct es1370_state *s) +static inline int prog_dmabuf_dac1(struct es1370_state *s) { stop_dac1(s); return prog_dmabuf(s, &s->dma_dac1, dac1_samplerate[(s->ctrl & CTRL_WTSRSEL) >> CTRL_SH_WTSRSEL], (s->sctrl >> SCTRL_SH_P1FMT) & ES1370_FMT_MASK, ES1370_REG_DAC1_FRAMEADR); } -extern inline unsigned get_hwptr(struct es1370_state *s, struct dmabuf *db, unsigned reg) +static inline unsigned get_hwptr(struct es1370_state *s, struct dmabuf *db, unsigned reg) { unsigned hwptr, diff; @@ -664,7 +665,7 @@ return diff; } -extern inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c) +static inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c) { if (bptr + len > bsize) { unsigned x = bsize - bptr; @@ -1042,13 +1043,6 @@ /* --------------------------------------------------------------------- */ -static loff_t es1370_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - -/* --------------------------------------------------------------------- */ - static int es1370_open_mixdev(struct inode *inode, struct file *file) { int minor = MINOR(inode->i_rdev); @@ -1082,7 +1076,7 @@ static /*const*/ struct file_operations es1370_mixer_fops = { owner: THIS_MODULE, - llseek: es1370_llseek, + llseek: no_llseek, ioctl: es1370_ioctl_mixdev, open: es1370_open_mixdev, release: es1370_release_mixdev, @@ -1168,7 +1162,7 @@ { struct es1370_state *s = (struct es1370_state *)file->private_data; DECLARE_WAITQUEUE(wait, current); - ssize_t ret; + ssize_t ret = 0; unsigned long flags; unsigned swptr; int cnt; @@ -1178,12 +1172,13 @@ return -ESPIPE; if (s->dma_adc.mapped) return -ENXIO; - if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s))) - return ret; if (!access_ok(VERIFY_WRITE, buffer, count)) return -EFAULT; - ret = 0; - add_wait_queue(&s->dma_adc.wait, &wait); + down(&s->sem); + if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s))) + goto out; + + add_wait_queue(&s->dma_adc.wait, &wait); while (count > 0) { spin_lock_irqsave(&s->lock, flags); swptr = s->dma_adc.swptr; @@ -1201,20 +1196,27 @@ if (file->f_flags & O_NONBLOCK) { if (!ret) ret = -EAGAIN; - break; + goto out; } + up(&s->sem); schedule(); if (signal_pending(current)) { if (!ret) ret = -ERESTARTSYS; - break; + goto out; + } + down(&s->sem); + if (s->dma_adc.mapped) + { + ret = -ENXIO; + goto out; } continue; } if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt)) { if (!ret) ret = -EFAULT; - break; + goto out; } swptr = (swptr + cnt) % s->dma_adc.dmasize; spin_lock_irqsave(&s->lock, flags); @@ -1227,6 +1229,8 @@ if (s->dma_adc.enabled) start_adc(s); } +out: + up(&s->sem); remove_wait_queue(&s->dma_adc.wait, &wait); set_current_state(TASK_RUNNING); return ret; @@ -1246,10 +1250,11 @@ return -ESPIPE; if (s->dma_dac2.mapped) return -ENXIO; - if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s))) - return ret; if (!access_ok(VERIFY_READ, buffer, count)) return -EFAULT; + down(&s->sem); + if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s))) + goto out; ret = 0; add_wait_queue(&s->dma_dac2.wait, &wait); while (count > 0) { @@ -1273,20 +1278,27 @@ if (file->f_flags & O_NONBLOCK) { if (!ret) ret = -EAGAIN; - break; + goto out; } + up(&s->sem); schedule(); if (signal_pending(current)) { if (!ret) ret = -ERESTARTSYS; - break; + goto out; + } + down(&s->sem); + if (s->dma_dac2.mapped) + { + ret = -ENXIO; + goto out; } continue; } if (copy_from_user(s->dma_dac2.rawbuf + swptr, buffer, cnt)) { if (!ret) ret = -EFAULT; - break; + goto out; } swptr = (swptr + cnt) % s->dma_dac2.dmasize; spin_lock_irqsave(&s->lock, flags); @@ -1300,6 +1312,8 @@ if (s->dma_dac2.enabled) start_dac2(s); } +out: + up(&s->sem); remove_wait_queue(&s->dma_dac2.wait, &wait); set_current_state(TASK_RUNNING); return ret; @@ -1346,43 +1360,44 @@ { struct es1370_state *s = (struct es1370_state *)file->private_data; struct dmabuf *db; - int ret; + int ret = 0; unsigned long size; VALIDATE_STATE(s); lock_kernel(); + down(&s->sem); if (vma->vm_flags & VM_WRITE) { if ((ret = prog_dmabuf_dac2(s)) != 0) { - unlock_kernel(); - return ret; + goto out; } db = &s->dma_dac2; } else if (vma->vm_flags & VM_READ) { if ((ret = prog_dmabuf_adc(s)) != 0) { - unlock_kernel(); - return ret; + goto out; } db = &s->dma_adc; } else { - unlock_kernel(); - return -EINVAL; + ret = -EINVAL; + goto out; } if (vma->vm_pgoff != 0) { - unlock_kernel(); - return -EINVAL; + ret = -EINVAL; + goto out; } size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << db->buforder)) { - unlock_kernel(); - return -EINVAL; + ret = -EINVAL; + goto out; } if (remap_page_range(vma->vm_start, virt_to_phys(db->rawbuf), size, vma->vm_page_prot)) { - unlock_kernel(); - return -EAGAIN; + ret = -EAGAIN; + goto out; } db->mapped = 1; +out: + up(&s->sem); unlock_kernel(); - return 0; + return ret; } static int es1370_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) @@ -1788,6 +1803,7 @@ spin_unlock_irqrestore(&s->lock, flags); s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE); up(&s->open_sem); + init_MUTEX(&s->sem); return 0; } @@ -1818,7 +1834,7 @@ static /*const*/ struct file_operations es1370_audio_fops = { owner: THIS_MODULE, - llseek: es1370_llseek, + llseek: no_llseek, read: es1370_read, write: es1370_write, poll: es1370_poll, @@ -2240,7 +2256,7 @@ static /*const*/ struct file_operations es1370_dac_fops = { owner: THIS_MODULE, - llseek: es1370_llseek, + llseek: no_llseek, write: es1370_write_dac, poll: es1370_poll_dac, ioctl: es1370_ioctl_dac, @@ -2513,7 +2529,7 @@ static /*const*/ struct file_operations es1370_midi_fops = { owner: THIS_MODULE, - llseek: es1370_llseek, + llseek: no_llseek, read: es1370_midi_read, write: es1370_midi_write, poll: es1370_midi_poll, @@ -2612,14 +2628,12 @@ * mic bias setting (by Kim.Berts@fisub.mail.abb.com) */ s->ctrl = CTRL_CDC_EN | (DAC2_SRTODIV(8000) << CTRL_SH_PCLKDIV) | (1 << CTRL_SH_WTSRSEL); s->gameport.io = 0; - s->gameport.size = 0; if (joystick[devindex]) { if (!request_region(0x200, JOY_EXTENT, "es1370")) printk(KERN_ERR "es1370: joystick io port 0x200 in use\n"); else { s->ctrl |= CTRL_JYSTK_EN; s->gameport.io = 0x200; - s->gameport.size = JOY_EXTENT; } } if (lineout[devindex]) @@ -2693,7 +2707,7 @@ printk(KERN_ERR "es1370: cannot register misc device\n"); free_irq(s->irq, s); if (s->gameport.io) - release_region(s->gameport.io, s->gameport.size); + release_region(s->gameport.io, JOY_EXTENT); err_irq: release_region(s->io, ES1370_EXTENT); err_region: @@ -2714,7 +2728,7 @@ free_irq(s->irq, s); if (s->gameport.io) { gameport_unregister_port(&s->gameport); - release_region(s->gameport.io, s->gameport.size); + release_region(s->gameport.io, JOY_EXTENT); } release_region(s->io, ES1370_EXTENT); unregister_sound_dsp(s->dev_audio); diff -u --recursive --new-file v2.4.8/linux/drivers/sound/es1371.c linux/drivers/sound/es1371.c --- v2.4.8/linux/drivers/sound/es1371.c Tue May 22 10:23:16 2001 +++ linux/drivers/sound/es1371.c Sun Aug 12 10:51:42 2001 @@ -109,6 +109,7 @@ * suggested by Stephan Müller * 31.01.2001 0.30 Register/Unregister gameport * Fix SETTRIGGER non OSS API conformity + * 14.07.2001 0.31 Add list of laptops needing amplifier control */ /*****************************************************************************/ @@ -474,6 +475,7 @@ } midi; struct gameport gameport; + struct semaphore sem; }; /* --------------------------------------------------------------------- */ @@ -482,7 +484,7 @@ /* --------------------------------------------------------------------- */ -extern inline unsigned ld2(unsigned int x) +static inline unsigned ld2(unsigned int x) { unsigned r = 0; @@ -792,7 +794,7 @@ /* --------------------------------------------------------------------- */ -extern inline void stop_adc(struct es1371_state *s) +static inline void stop_adc(struct es1371_state *s) { unsigned long flags; @@ -802,7 +804,7 @@ spin_unlock_irqrestore(&s->lock, flags); } -extern inline void stop_dac1(struct es1371_state *s) +static inline void stop_dac1(struct es1371_state *s) { unsigned long flags; @@ -812,7 +814,7 @@ spin_unlock_irqrestore(&s->lock, flags); } -extern inline void stop_dac2(struct es1371_state *s) +static inline void stop_dac2(struct es1371_state *s) { unsigned long flags; @@ -897,7 +899,7 @@ #define DMABUF_MINORDER 1 -extern inline void dealloc_dmabuf(struct es1371_state *s, struct dmabuf *db) +static inline void dealloc_dmabuf(struct es1371_state *s, struct dmabuf *db) { struct page *page, *pend; @@ -965,28 +967,28 @@ return 0; } -extern inline int prog_dmabuf_adc(struct es1371_state *s) +static inline int prog_dmabuf_adc(struct es1371_state *s) { stop_adc(s); return prog_dmabuf(s, &s->dma_adc, s->adcrate, (s->sctrl >> SCTRL_SH_R1FMT) & ES1371_FMT_MASK, ES1371_REG_ADC_FRAMEADR); } -extern inline int prog_dmabuf_dac2(struct es1371_state *s) +static inline int prog_dmabuf_dac2(struct es1371_state *s) { stop_dac2(s); return prog_dmabuf(s, &s->dma_dac2, s->dac2rate, (s->sctrl >> SCTRL_SH_P2FMT) & ES1371_FMT_MASK, ES1371_REG_DAC2_FRAMEADR); } -extern inline int prog_dmabuf_dac1(struct es1371_state *s) +static inline int prog_dmabuf_dac1(struct es1371_state *s) { stop_dac1(s); return prog_dmabuf(s, &s->dma_dac1, s->dac1rate, (s->sctrl >> SCTRL_SH_P1FMT) & ES1371_FMT_MASK, ES1371_REG_DAC1_FRAMEADR); } -extern inline unsigned get_hwptr(struct es1371_state *s, struct dmabuf *db, unsigned reg) +static inline unsigned get_hwptr(struct es1371_state *s, struct dmabuf *db, unsigned reg) { unsigned hwptr, diff; @@ -997,7 +999,7 @@ return diff; } -extern inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c) +static inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c) { if (bptr + len > bsize) { unsigned x = bsize - bptr; @@ -1148,13 +1150,6 @@ /* --------------------------------------------------------------------- */ -static loff_t es1371_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - -/* --------------------------------------------------------------------- */ - /* Conversion table for S/PDIF PCM volume emulation through the SRC */ /* dB-linear table of DAC vol values; -0dB to -46.5dB with mute */ static const unsigned short DACVolTable[101] = @@ -1268,7 +1263,7 @@ static /*const*/ struct file_operations es1371_mixer_fops = { owner: THIS_MODULE, - llseek: es1371_llseek, + llseek: no_llseek, ioctl: es1371_ioctl_mixdev, open: es1371_open_mixdev, release: es1371_release_mixdev, @@ -1352,7 +1347,7 @@ { struct es1371_state *s = (struct es1371_state *)file->private_data; DECLARE_WAITQUEUE(wait, current); - ssize_t ret; + ssize_t ret = 0; unsigned long flags; unsigned swptr; int cnt; @@ -1362,11 +1357,12 @@ return -ESPIPE; if (s->dma_adc.mapped) return -ENXIO; - if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s))) - return ret; if (!access_ok(VERIFY_WRITE, buffer, count)) return -EFAULT; - ret = 0; + down(&s->sem); + if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s))) + goto out2; + add_wait_queue(&s->dma_adc.wait, &wait); while (count > 0) { spin_lock_irqsave(&s->lock, flags); @@ -1385,20 +1381,27 @@ if (file->f_flags & O_NONBLOCK) { if (!ret) ret = -EAGAIN; - break; + goto out; } + up(&s->sem); schedule(); if (signal_pending(current)) { if (!ret) ret = -ERESTARTSYS; - break; + goto out2; + } + down(&s->sem); + if (s->dma_adc.mapped) + { + ret = -ENXIO; + goto out; } continue; } if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt)) { if (!ret) ret = -EFAULT; - break; + goto out; } swptr = (swptr + cnt) % s->dma_adc.dmasize; spin_lock_irqsave(&s->lock, flags); @@ -1411,6 +1414,9 @@ if (s->dma_adc.enabled) start_adc(s); } +out: + up(&s->sem); +out2: remove_wait_queue(&s->dma_adc.wait, &wait); set_current_state(TASK_RUNNING); return ret; @@ -1430,10 +1436,11 @@ return -ESPIPE; if (s->dma_dac2.mapped) return -ENXIO; - if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s))) - return ret; if (!access_ok(VERIFY_READ, buffer, count)) return -EFAULT; + down(&s->sem); + if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s))) + goto out3; ret = 0; add_wait_queue(&s->dma_dac2.wait, &wait); while (count > 0) { @@ -1457,20 +1464,27 @@ if (file->f_flags & O_NONBLOCK) { if (!ret) ret = -EAGAIN; - break; - } + goto out; + } + up(&s->sem); schedule(); if (signal_pending(current)) { if (!ret) ret = -ERESTARTSYS; - break; + goto out2; + } + down(&s->sem); + if (s->dma_dac2.mapped) + { + ret = -ENXIO; + goto out; } continue; } if (copy_from_user(s->dma_dac2.rawbuf + swptr, buffer, cnt)) { if (!ret) ret = -EFAULT; - break; + goto out; } swptr = (swptr + cnt) % s->dma_dac2.dmasize; spin_lock_irqsave(&s->lock, flags); @@ -1484,7 +1498,11 @@ if (s->dma_dac2.enabled) start_dac2(s); } +out: + up(&s->sem); +out2: remove_wait_queue(&s->dma_dac2.wait, &wait); +out3: set_current_state(TASK_RUNNING); return ret; } @@ -1530,43 +1548,45 @@ { struct es1371_state *s = (struct es1371_state *)file->private_data; struct dmabuf *db; - int ret; + int ret = 0; unsigned long size; VALIDATE_STATE(s); lock_kernel(); + down(&s->sem); + if (vma->vm_flags & VM_WRITE) { if ((ret = prog_dmabuf_dac2(s)) != 0) { - unlock_kernel(); - return ret; + goto out; } db = &s->dma_dac2; } else if (vma->vm_flags & VM_READ) { if ((ret = prog_dmabuf_adc(s)) != 0) { - unlock_kernel(); - return ret; + goto out; } db = &s->dma_adc; } else { - unlock_kernel(); - return -EINVAL; + ret = -EINVAL; + goto out; } if (vma->vm_pgoff != 0) { - unlock_kernel(); - return -EINVAL; + ret = -EINVAL; + goto out; } size = vma->vm_end - vma->vm_start; if (size > (PAGE_SIZE << db->buforder)) { - unlock_kernel(); - return -EINVAL; + ret = -EINVAL; + goto out; } if (remap_page_range(vma->vm_start, virt_to_phys(db->rawbuf), size, vma->vm_page_prot)) { - unlock_kernel(); - return -EAGAIN; + ret = -EAGAIN; + goto out; } db->mapped = 1; +out: + up(&s->sem); unlock_kernel(); - return 0; + return ret; } static int es1371_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) @@ -1970,6 +1990,7 @@ spin_unlock_irqrestore(&s->lock, flags); s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE); up(&s->open_sem); + init_MUTEX(&s->sem); return 0; } @@ -1999,7 +2020,7 @@ static /*const*/ struct file_operations es1371_audio_fops = { owner: THIS_MODULE, - llseek: es1371_llseek, + llseek: no_llseek, read: es1371_read, write: es1371_write, poll: es1371_poll, @@ -2411,7 +2432,7 @@ static /*const*/ struct file_operations es1371_dac_fops = { owner: THIS_MODULE, - llseek: es1371_llseek, + llseek: no_llseek, write: es1371_write_dac, poll: es1371_poll_dac, ioctl: es1371_ioctl_dac, @@ -2683,7 +2704,7 @@ static /*const*/ struct file_operations es1371_midi_fops = { owner: THIS_MODULE, - llseek: es1371_llseek, + llseek: no_llseek, read: es1371_midi_read, write: es1371_midi_write, poll: es1371_midi_poll, @@ -2739,6 +2760,7 @@ static int nomix[NR_DEVICE] = { 0, }; static unsigned int devindex = 0; +static int amplifier = 0; MODULE_PARM(joystick, "1-" __MODULE_STRING(NR_DEVICE) "i"); MODULE_PARM_DESC(joystick, "sets address and enables joystick interface (still need separate driver)"); @@ -2746,6 +2768,8 @@ MODULE_PARM_DESC(spdif, "if 1 the output is in S/PDIF digital mode"); MODULE_PARM(nomix, "1-" __MODULE_STRING(NR_DEVICE) "i"); MODULE_PARM_DESC(nomix, "if 1 no analog audio is mixed to the digital output"); +MODULE_PARM(amplifier, "i"); +MODULE_PARM_DESC(amplifier, "Set to 1 if the machine needs the amp control enabling (many laptops)"); MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu"); MODULE_DESCRIPTION("ES1371 AudioPCI97 Driver"); @@ -2771,11 +2795,25 @@ { SOUND_MIXER_WRITE_IGAIN, 0x4040 } }; +static struct +{ + short svid, sdid; +} amplifier_needed[] = +{ + { 0x107B, 0x2150 }, /* Gateway Solo 2150 */ + { 0x13BD, 0x100C }, /* Mebius PC-MJ100V */ + { 0x1102, 0x5938 }, /* Targa Xtender 300 */ + { 0x1102, 0x8938 }, /* IPC notebook */ + { PCI_ANY_ID, PCI_ANY_ID } +}; + + static int __devinit es1371_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid) { struct es1371_state *s; mm_segment_t fs; int i, val, res = -1; + int idx; unsigned long tmo; signed long tmo2; unsigned int cssr; @@ -2845,25 +2883,33 @@ /* initialize codec registers */ s->ctrl = 0; - if (pcidev->subsystem_vendor == 0x107b && pcidev->subsystem_device == 0x2150) { + + /* Check amplifier requirements */ + + if(amplifier) s->ctrl |= CTRL_GPIO_OUT0; - printk(KERN_INFO PFX "Running On Gateway 2000 Solo 2510 - Amp On \n"); - } - s->gameport.io = s->gameport.size = 0; + else for(idx = 0; amplifier_needed[idx].svid != PCI_ANY_ID; idx++) + { + if(pcidev->subsystem_vendor == amplifier_needed[idx].svid && + pcidev->subsystem_device == amplifier_needed[idx].sdid) + { + s->ctrl |= CTRL_GPIO_OUT0; /* turn internal amplifier on */ + printk(KERN_INFO PFX "Enabling internal amplifier.\n"); + } + } + s->gameport.io = 0; if ((joystick[devindex] & ~0x18) == 0x200) { if (!request_region(joystick[devindex], JOY_EXTENT, "es1371")) printk(KERN_ERR PFX "joystick address 0x%x already in use\n", joystick[devindex]); else { s->ctrl |= CTRL_JYSTK_EN | (((joystick[devindex] >> 3) & CTRL_JOY_MASK) << CTRL_JOY_SHIFT); s->gameport.io = joystick[devindex]; - s->gameport.size = JOY_EXTENT; } } else if (joystick[devindex] == 1) { for (i = 0x218; i >= 0x200; i -= 0x08) { if (request_region(i, JOY_EXTENT, "es1371")) { s->ctrl |= CTRL_JYSTK_EN | (((i >> 3) & CTRL_JOY_MASK) << CTRL_JOY_SHIFT); s->gameport.io = i; - s->gameport.size = JOY_EXTENT; break; } } @@ -2951,7 +2997,7 @@ err_gp: if (s->gameport.io) - release_region(s->gameport.io, s->gameport.size); + release_region(s->gameport.io, JOY_EXTENT); err_dev4: unregister_sound_dsp(s->dev_dac); err_dev3: @@ -2985,7 +3031,7 @@ free_irq(s->irq, s); if (s->gameport.io) { gameport_unregister_port(&s->gameport); - release_region(s->gameport.io, s->gameport.size); + release_region(s->gameport.io, JOY_EXTENT); } release_region(s->io, ES1371_EXTENT); unregister_sound_dsp(s->dev_audio); diff -u --recursive --new-file v2.4.8/linux/drivers/sound/esssolo1.c linux/drivers/sound/esssolo1.c --- v2.4.8/linux/drivers/sound/esssolo1.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/sound/esssolo1.c Sun Aug 12 10:51:42 2001 @@ -230,7 +230,7 @@ /* --------------------------------------------------------------------- */ -extern inline void write_seq(struct solo1_state *s, unsigned char data) +static inline void write_seq(struct solo1_state *s, unsigned char data) { int i; unsigned long flags; @@ -250,7 +250,7 @@ outb(data, s->sbbase+0xc); } -extern inline int read_seq(struct solo1_state *s, unsigned char *data) +static inline int read_seq(struct solo1_state *s, unsigned char *data) { int i; @@ -313,7 +313,7 @@ /* --------------------------------------------------------------------- */ -extern inline unsigned ld2(unsigned int x) +static inline unsigned ld2(unsigned int x) { unsigned r = 0; @@ -340,7 +340,7 @@ /* --------------------------------------------------------------------- */ -extern inline void stop_dac(struct solo1_state *s) +static inline void stop_dac(struct solo1_state *s) { unsigned long flags; @@ -364,7 +364,7 @@ spin_unlock_irqrestore(&s->lock, flags); } -extern inline void stop_adc(struct solo1_state *s) +static inline void stop_adc(struct solo1_state *s) { unsigned long flags; @@ -414,7 +414,7 @@ #define DMABUF_DEFAULTORDER (15-PAGE_SHIFT) #define DMABUF_MINORDER 1 -extern inline void dealloc_dmabuf(struct solo1_state *s, struct dmabuf *db) +static inline void dealloc_dmabuf(struct solo1_state *s, struct dmabuf *db) { struct page *page, *pend; @@ -480,7 +480,7 @@ return 0; } -extern inline int prog_dmabuf_adc(struct solo1_state *s) +static inline int prog_dmabuf_adc(struct solo1_state *s) { unsigned long va; int c; @@ -508,7 +508,7 @@ return 0; } -extern inline int prog_dmabuf_dac(struct solo1_state *s) +static inline int prog_dmabuf_dac(struct solo1_state *s) { unsigned long va; int c; @@ -531,7 +531,7 @@ return 0; } -extern inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c) +static inline void clear_advance(void *buf, unsigned bsize, unsigned bptr, unsigned len, unsigned char c) { if (bptr + len > bsize) { unsigned x = bsize - bptr; @@ -911,13 +911,6 @@ /* --------------------------------------------------------------------- */ -static loff_t solo1_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - -/* --------------------------------------------------------------------- */ - static int solo1_open_mixdev(struct inode *inode, struct file *file) { int minor = MINOR(inode->i_rdev); @@ -957,7 +950,7 @@ static /*const*/ struct file_operations solo1_mixer_fops = { owner: THIS_MODULE, - llseek: solo1_llseek, + llseek: no_llseek, ioctl: solo1_ioctl_mixdev, open: solo1_open_mixdev, release: solo1_release_mixdev, @@ -1652,7 +1645,7 @@ static /*const*/ struct file_operations solo1_audio_fops = { owner: THIS_MODULE, - llseek: solo1_llseek, + llseek: no_llseek, read: solo1_read, write: solo1_write, poll: solo1_poll, @@ -2003,7 +1996,7 @@ static /*const*/ struct file_operations solo1_midi_fops = { owner: THIS_MODULE, - llseek: solo1_llseek, + llseek: no_llseek, read: solo1_midi_read, write: solo1_midi_write, poll: solo1_midi_poll, @@ -2191,7 +2184,7 @@ static /*const*/ struct file_operations solo1_dmfm_fops = { owner: THIS_MODULE, - llseek: solo1_llseek, + llseek: no_llseek, ioctl: solo1_dmfm_ioctl, open: solo1_dmfm_open, release: solo1_dmfm_release, @@ -2265,8 +2258,8 @@ return 0; } -static void -solo1_suspend(struct pci_dev *pci_dev) { +static int +solo1_suspend(struct pci_dev *pci_dev, u32 state) { struct solo1_state *s = (struct solo1_state*)pci_get_drvdata(pci_dev); if (!s) return; @@ -2277,14 +2270,16 @@ outb(3, s->sbbase+6); /* turn off DDMA controller address space */ pci_write_config_word(s->dev, 0x60, 0); + return 0; } -static void +static int solo1_resume(struct pci_dev *pci_dev) { struct solo1_state *s = (struct solo1_state*)pci_get_drvdata(pci_dev); if (!s) - return; + return 1; setup_solo1(s); + return 0; } static int __devinit solo1_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid) diff -u --recursive --new-file v2.4.8/linux/drivers/sound/i810_audio.c linux/drivers/sound/i810_audio.c --- v2.4.8/linux/drivers/sound/i810_audio.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/sound/i810_audio.c Sun Aug 12 17:37:53 2001 @@ -109,6 +109,7 @@ //#define DEBUG //#define DEBUG2 +//#define DEBUG_INTERRUPTS #define ADC_RUNNING 1 #define DAC_RUNNING 2 @@ -190,7 +191,7 @@ #define INT_MASK (INT_SEC|INT_PRI|INT_MC|INT_PO|INT_PI|INT_MO|INT_NI|INT_GPI) -#define DRIVER_VERSION "0.02" +#define DRIVER_VERSION "0.03" /* magic numbers to protect our data structures */ #define I810_CARD_MAGIC 0x5072696E /* "Prin" */ @@ -281,10 +282,15 @@ wait_queue_head_t wait; /* put process on wait queue when no more space in buffer */ /* redundant, but makes calculations easier */ - unsigned fragsize; + /* what the hardware uses */ unsigned dmasize; + unsigned fragsize; unsigned fragsamples; + /* what we tell the user to expect */ + unsigned userfrags; + unsigned userfragsize; + /* OSS stuff */ unsigned mapped:1; unsigned ready:1; @@ -337,9 +343,8 @@ static int i810_open_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); -extern __inline__ unsigned ld2(unsigned int x) +static inline unsigned ld2(unsigned int x) { unsigned r = 0; @@ -498,7 +503,7 @@ /* get current playback/recording dma buffer pointer (byte offset from LBA), called with spinlock held! */ -extern __inline__ unsigned i810_get_dma_addr(struct i810_state *state, int rec) +static inline unsigned i810_get_dma_addr(struct i810_state *state, int rec) { struct dmabuf *dmabuf = &state->dmabuf; unsigned int civ, offset; @@ -543,13 +548,18 @@ //} /* Stop recording (lock held) */ -extern __inline__ void __stop_adc(struct i810_state *state) +static inline void __stop_adc(struct i810_state *state) { struct dmabuf *dmabuf = &state->dmabuf; struct i810_card *card = state->card; dmabuf->enable &= ~ADC_RUNNING; outb(0, card->iobase + PI_CR); + // wait for the card to acknowledge shutdown + while( inb(card->iobase + PI_CR) != 0 ) ; + // now clear any latent interrupt bits (like the halt bit) + outb( inb(card->iobase + PI_SR), card->iobase + PI_SR ); + outl( inl(card->iobase + GLOB_STA) & INT_PI, card->iobase + GLOB_STA); } static void stop_adc(struct i810_state *state) @@ -578,13 +588,18 @@ } /* stop playback (lock held) */ -extern __inline__ void __stop_dac(struct i810_state *state) +static inline void __stop_dac(struct i810_state *state) { struct dmabuf *dmabuf = &state->dmabuf; struct i810_card *card = state->card; dmabuf->enable &= ~DAC_RUNNING; outb(0, card->iobase + PO_CR); + // wait for the card to acknowledge shutdown + while( inb(card->iobase + PO_CR) != 0 ) ; + // now clear any latent interrupt bits (like the halt bit) + outb( inb(card->iobase + PO_SR), card->iobase + PO_SR ); + outl( inl(card->iobase + GLOB_STA) & INT_PO, card->iobase + GLOB_STA); } static void stop_dac(struct i810_state *state) @@ -710,24 +725,22 @@ dmabuf->numfrag = SG_LEN; dmabuf->fragsize = dmabuf->dmasize/dmabuf->numfrag; dmabuf->fragsamples = dmabuf->fragsize >> 1; + dmabuf->userfragsize = dmabuf->ossfragsize; + dmabuf->userfrags = dmabuf->dmasize/dmabuf->ossfragsize; memset(dmabuf->rawbuf, 0, dmabuf->dmasize); if(dmabuf->ossmaxfrags == 4) { fragint = 8; - dmabuf->ossfragsize = dmabuf->dmasize>>2; dmabuf->fragshift = 2; } else if (dmabuf->ossmaxfrags == 8) { fragint = 4; - dmabuf->ossfragsize = dmabuf->dmasize>>3; dmabuf->fragshift = 3; } else if (dmabuf->ossmaxfrags == 16) { fragint = 2; - dmabuf->ossfragsize = dmabuf->dmasize>>4; dmabuf->fragshift = 4; } else { fragint = 1; - dmabuf->ossfragsize = dmabuf->dmasize>>5; dmabuf->fragshift = 5; } /* @@ -862,7 +875,7 @@ dmabuf->error++; } } - if (dmabuf->count > dmabuf->ossfragsize) + if (dmabuf->count > dmabuf->userfragsize) wake_up(&dmabuf->wait); } /* error handling and process wake up for DAC */ @@ -890,7 +903,7 @@ dmabuf->error++; } } - if (dmabuf->count < (dmabuf->dmasize-dmabuf->ossfragsize)) + if (dmabuf->count < (dmabuf->dmasize-dmabuf->userfragsize)) wake_up(&dmabuf->wait); } } @@ -940,6 +953,8 @@ break; } } + stop_dac(state); + synchronize_irq(); remove_wait_queue(&dmabuf->wait, &wait); current->state = TASK_RUNNING; if (signal_pending(current)) @@ -977,13 +992,14 @@ status = inw(port + OFF_SR); #ifdef DEBUG_INTERRUPTS - printk("NUM %d PORT %lX IRQ ( ST%d ", c->num, c->port, status); + printk("NUM %d PORT %X IRQ ( ST%d ", c->num, c->port, status); #endif if(status & DMA_INT_COMPLETE) { i810_update_ptr(state); #ifdef DEBUG_INTERRUPTS - printk("COMP%d ",x); + printk("COMP %d ", dmabuf->hwptr / + dmabuf->fragsize); #endif } if(status & DMA_INT_LVI) @@ -1040,11 +1056,6 @@ spin_unlock(&card->lock); } -static loff_t i810_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - /* in this loop, dmabuf.count signifies the amount of data that is waiting to be copied to the user's buffer. it is filled by the dma machine and drained by this loop. */ static ssize_t i810_read(struct file *file, char *buffer, size_t count, loff_t *ppos) @@ -1084,9 +1095,10 @@ spin_lock_irqsave(&state->card->lock, flags); swptr = dmabuf->swptr; if (dmabuf->count > dmabuf->dmasize) { - dmabuf->count = 0; + dmabuf->count = dmabuf->dmasize; } - cnt = dmabuf->count; + cnt = dmabuf->count - dmabuf->fragsize; + // this is to make the copy_to_user simpler below if(cnt > (dmabuf->dmasize - swptr)) cnt = dmabuf->dmasize - swptr; spin_unlock_irqrestore(&state->card->lock, flags); @@ -1095,13 +1107,11 @@ cnt = count; if (cnt <= 0) { unsigned long tmo; - // are we already running? only start us if we aren't running - // currently - i810_update_lvi(state,1); if(!dmabuf->enable) { dmabuf->trigger |= PCM_ENABLE_INPUT; start_adc(state); } + i810_update_lvi(state,1); if (file->f_flags & O_NONBLOCK) { if (!ret) ret = -EAGAIN; return ret; @@ -1150,7 +1160,8 @@ ret += cnt; } i810_update_lvi(state,1); - start_adc(state); + if(!(dmabuf->enable & ADC_RUNNING)) + start_adc(state); return ret; } @@ -1194,23 +1205,30 @@ if (dmabuf->count < 0) { dmabuf->count = 0; } - cnt = dmabuf->dmasize - swptr; - if(cnt > (dmabuf->dmasize - dmabuf->count)) - cnt = dmabuf->dmasize - dmabuf->count; + cnt = dmabuf->dmasize - dmabuf->fragsize - dmabuf->count; + // this is to make the copy_from_user simpler below + if(cnt > (dmabuf->dmasize - swptr)) + cnt = dmabuf->dmasize - swptr; spin_unlock_irqrestore(&state->card->lock, flags); +#ifdef DEBUG2 + printk(KERN_INFO "i810_audio: i810_write: %d bytes available space\n", cnt); +#endif if (cnt > count) cnt = count; if (cnt <= 0) { unsigned long tmo; // There is data waiting to be played - i810_update_lvi(state,0); if(!dmabuf->enable && dmabuf->count) { /* force the starting incase SETTRIGGER has been used */ /* to stop it, otherwise this is a deadlock situation */ dmabuf->trigger |= PCM_ENABLE_OUTPUT; start_dac(state); } + // Update the LVI pointer in case we have already + // written data in this syscall and are just waiting + // on the tail bit of data + i810_update_lvi(state,0); if (file->f_flags & O_NONBLOCK) { if (!ret) ret = -EAGAIN; return ret; @@ -1259,11 +1277,10 @@ } if (swptr % dmabuf->fragsize) { x = dmabuf->fragsize - (swptr % dmabuf->fragsize); - if((x + dmabuf->count) < dmabuf->dmasize) - memset(dmabuf->rawbuf + swptr, '\0', x); + memset(dmabuf->rawbuf + swptr, '\0', x); } i810_update_lvi(state,0); - if (!dmabuf->enable && dmabuf->count >= dmabuf->ossfragsize) + if (!dmabuf->enable && dmabuf->count >= dmabuf->userfragsize) start_dac(state); return ret; @@ -1398,8 +1415,6 @@ if (dmabuf->enable != DAC_RUNNING || file->f_flags & O_NONBLOCK) return 0; drain_dac(state, 0); - stop_dac(state); - synchronize_irq(); dmabuf->ready = 0; dmabuf->swptr = dmabuf->hwptr = 0; dmabuf->count = dmabuf->total_bytes = 0; @@ -1436,7 +1451,7 @@ if (get_user(val, (int *)arg)) return -EFAULT; if(val==0) { - ret = -EINVAL; + return -EINVAL; } else { ret = 1; } @@ -1458,9 +1473,9 @@ return val; } #ifdef DEBUG - printk("SNDCTL_DSP_GETBLKSIZE %d\n", dmabuf->ossfragsize); + printk("SNDCTL_DSP_GETBLKSIZE %d\n", dmabuf->userfragsize); #endif - return put_user(dmabuf->ossfragsize, (int *)arg); + return put_user(dmabuf->userfragsize, (int *)arg); case SNDCTL_DSP_GETFMTS: /* Returns a mask of supported sample format*/ #ifdef DEBUG @@ -1545,13 +1560,13 @@ return val; spin_lock_irqsave(&state->card->lock, flags); i810_update_ptr(state); - abinfo.fragsize = dmabuf->ossfragsize; - abinfo.fragstotal = dmabuf->ossmaxfrags; + abinfo.fragsize = dmabuf->userfragsize; + abinfo.fragstotal = dmabuf->userfrags; if(dmabuf->mapped) abinfo.bytes = dmabuf->count; else abinfo.bytes = dmabuf->dmasize - dmabuf->count; - abinfo.fragments = abinfo.bytes / dmabuf->ossfragsize; + abinfo.fragments = abinfo.bytes / dmabuf->userfragsize; spin_unlock_irqrestore(&state->card->lock, flags); #ifdef DEBUG printk("SNDCTL_DSP_GETOSPACE %d, %d, %d, %d\n", abinfo.bytes, @@ -1568,10 +1583,10 @@ i810_update_ptr(state); cinfo.bytes = dmabuf->total_bytes; cinfo.ptr = dmabuf->hwptr; - cinfo.blocks = (dmabuf->dmasize - dmabuf->count)/dmabuf->ossfragsize; + cinfo.blocks = (dmabuf->dmasize - dmabuf->count)/dmabuf->userfragsize; if (dmabuf->mapped) { dmabuf->count = (dmabuf->dmasize - - (dmabuf->count & (dmabuf->ossfragsize-1))); + (dmabuf->count & (dmabuf->userfragsize-1))); __i810_update_lvi(state, 0); } spin_unlock_irqrestore(&state->card->lock, flags); @@ -1588,10 +1603,10 @@ return val; spin_lock_irqsave(&state->card->lock, flags); i810_update_ptr(state); - abinfo.fragsize = dmabuf->ossfragsize; - abinfo.fragstotal = dmabuf->ossmaxfrags; + abinfo.fragsize = dmabuf->userfragsize; + abinfo.fragstotal = dmabuf->userfrags; abinfo.bytes = dmabuf->dmasize - dmabuf->count; - abinfo.fragments = abinfo.bytes / dmabuf->ossfragsize; + abinfo.fragments = abinfo.bytes / dmabuf->userfragsize; spin_unlock_irqrestore(&state->card->lock, flags); #ifdef DEBUG printk("SNDCTL_DSP_GETISPACE %d, %d, %d, %d\n", abinfo.bytes, @@ -1607,10 +1622,10 @@ spin_lock_irqsave(&state->card->lock, flags); i810_update_ptr(state); cinfo.bytes = dmabuf->total_bytes; - cinfo.blocks = dmabuf->count/dmabuf->ossfragsize; + cinfo.blocks = dmabuf->count/dmabuf->userfragsize; cinfo.ptr = dmabuf->hwptr; if (dmabuf->mapped) { - dmabuf->count &= dmabuf->ossfragsize-1; + dmabuf->count &= (dmabuf->userfragsize-1); __i810_update_lvi(state, 1); } spin_unlock_irqrestore(&state->card->lock, flags); @@ -1667,7 +1682,7 @@ dmabuf->count = dmabuf->dmasize; i810_update_lvi(state,0); } - if (!dmabuf->enable && dmabuf->count > dmabuf->fragsize) + if (!dmabuf->enable && dmabuf->count > dmabuf->userfragsize) start_dac(state); } if(val & PCM_ENABLE_INPUT) { @@ -1684,7 +1699,7 @@ i810_update_lvi(state,1); } if (!dmabuf->enable && dmabuf->count < - (dmabuf->dmasize - dmabuf->fragsize)) + (dmabuf->dmasize - dmabuf->userfragsize)) start_adc(state); } return 0; @@ -1794,8 +1809,6 @@ dmabuf->trigger |= PCM_ENABLE_OUTPUT; } - down(&state->open_sem); - /* 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, but we don't support those so we @@ -1806,7 +1819,6 @@ dmabuf->subdivision = 0; state->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE); - up(&state->open_sem); return 0; } @@ -1814,21 +1826,21 @@ static int i810_release(struct inode *inode, struct file *file) { struct i810_state *state = (struct i810_state *)file->private_data; + struct i810_card *card = state->card; struct dmabuf *dmabuf = &state->dmabuf; + unsigned long flags; lock_kernel(); - down(&state->open_sem); - /* stop DMA state machine and free DMA buffers/channels */ - if(dmabuf->enable == DAC_RUNNING || + if(dmabuf->enable & DAC_RUNNING || (dmabuf->count && (dmabuf->trigger & PCM_ENABLE_OUTPUT))) { drain_dac(state,0); - stop_dac(state); } if(dmabuf->enable & ADC_RUNNING) { stop_adc(state); } + spin_lock_irqsave(&card->lock, flags); dealloc_dmabuf(state); if (file->f_mode & FMODE_WRITE) { state->card->free_pcm_channel(state->card, dmabuf->write_channel->num); @@ -1837,11 +1849,9 @@ state->card->free_pcm_channel(state->card, dmabuf->read_channel->num); } - /* we're covered by the open_sem */ - up(&state->open_sem); - state->card->states[state->virt] = NULL; kfree(state); + spin_unlock_irqrestore(&card->lock, flags); unlock_kernel(); return 0; @@ -1849,7 +1859,7 @@ static /*const*/ struct file_operations i810_audio_fops = { owner: THIS_MODULE, - llseek: i810_llseek, + llseek: no_llseek, read: i810_read, write: i810_write, poll: i810_poll, @@ -1910,7 +1920,7 @@ static /*const*/ struct file_operations i810_mixer_fops = { owner: THIS_MODULE, - llseek: i810_llseek, + llseek: no_llseek, ioctl: i810_ioctl_mixdev, open: i810_open_mixdev, }; diff -u --recursive --new-file v2.4.8/linux/drivers/sound/maestro.c linux/drivers/sound/maestro.c --- v2.4.8/linux/drivers/sound/maestro.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/sound/maestro.c Sun Aug 12 10:51:42 2001 @@ -1290,7 +1290,7 @@ } /* Stop our host of recording apus */ -extern inline void stop_adc(struct ess_state *s) +static inline void stop_adc(struct ess_state *s) { /* XXX lets hope we don't have to lock around this */ if (! (s->enable & ADC_RUNNING)) return; @@ -1594,7 +1594,7 @@ } /* Playback pointer */ -extern __inline__ unsigned get_dmaa(struct ess_state *s) +static inline unsigned get_dmaa(struct ess_state *s) { int offset; @@ -1608,7 +1608,7 @@ } /* Record pointer */ -extern __inline__ unsigned get_dmac(struct ess_state *s) +static inline unsigned get_dmac(struct ess_state *s) { int offset; @@ -2122,13 +2122,6 @@ } /* --------------------------------------------------------------------- */ - -static loff_t ess_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - -/* --------------------------------------------------------------------- */ static int ess_open_mixdev(struct inode *inode, struct file *file) { int minor = MINOR(inode->i_rdev); @@ -2172,7 +2165,7 @@ static /*const*/ struct file_operations ess_mixer_fops = { owner: THIS_MODULE, - llseek: ess_llseek, + llseek: no_llseek, ioctl: ess_ioctl_mixdev, open: ess_open_mixdev, release: ess_release_mixdev, @@ -3104,7 +3097,7 @@ static struct file_operations ess_audio_fops = { owner: THIS_MODULE, - llseek: ess_llseek, + llseek: no_llseek, read: ess_read, write: ess_write, poll: ess_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/maestro3.c linux/drivers/sound/maestro3.c --- v2.4.8/linux/drivers/sound/maestro3.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/sound/maestro3.c Sun Aug 12 10:38:48 2001 @@ -130,7 +130,7 @@ #include #include #include -#include +#include #include #include #include @@ -1280,13 +1280,6 @@ /* --------------------------------------------------------------------- */ -static loff_t m3_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - -/* --------------------------------------------------------------------- */ - static int drain_dac(struct m3_state *s, int nonblock) { DECLARE_WAITQUEUE(wait,current); @@ -2180,7 +2173,7 @@ } static struct file_operations m3_mixer_fops = { - llseek: m3_llseek, + llseek: no_llseek, ioctl: m3_ioctl_mixdev, open: m3_open_mixdev, release: m3_release_mixdev, @@ -2553,7 +2546,7 @@ } static struct file_operations m3_audio_fops = { - llseek: &m3_llseek, + llseek: &no_llseek, read: &m3_read, write: &m3_write, poll: &m3_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/rme96xx.c linux/drivers/sound/rme96xx.c --- v2.4.8/linux/drivers/sound/rme96xx.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/sound/rme96xx.c Sun Aug 12 10:51:42 2001 @@ -0,0 +1,1561 @@ +/* (C) 2000 Guenter Geiger + with copy/pastes from the driver of Winfried Ritsch + based on es1370.c + + + + * 10 Jan 2001: 0.1 initial version + * 19 Jan 2001: 0.2 fixed bug in select() + * 27 Apr 2001: 0.3 more than one card usable + * 11 May 2001: 0.4 fixed for SMP, included into kernel source tree + * 17 May 2001: 0.5 draining code didn't work on new cards + * 18 May 2001: 0.6 remove synchronize_irq() call + +TODO: + - test more than one card --- done + - check for pci IOREGION (see es1370) in rme96xx_probe ?? + - error detection + - mmap interface + - mixer mmap interface + - mixer ioctl + - get rid of noise upon first open (why ??) + - allow multiple open(at least for read) + - allow multiple open for non overlapping regions + - recheck the multiple devices part (offsets of different devices, etc) + - do decent draining in _release --- done + - SMP support +*/ + +#ifndef RMEVERSION +#define RMEVERSION "0.6" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "rme96xx.h" + +#define NR_DEVICE 2 + +static int devices = 1; +MODULE_PARM(devices, "1-" __MODULE_STRING(NR_DEVICE) "i"); +MODULE_PARM_DESC(devices, "number of dsp devices allocated by the driver"); + + +MODULE_AUTHOR("Guenter Geiger, geiger@debian.org"); +MODULE_DESCRIPTION("RME9652/36 \"Hammerfall\" Driver"); + +#ifdef DEBUG +#define DBG(x) printk("RME_DEBUG:");x +#define COMM(x) printk("RME_COMM: " x "\n"); +#else +#define DBG(x) while (0) {} +#define COMM(x) +#endif + +/*-------------------------------------------------------------------------- + Preporcessor Macros and Definitions + --------------------------------------------------------------------------*/ + +#define RME96xx_MAGIC 0x6473 + +/* Registers-Space in offsets from base address with 16MByte size */ + +#define RME96xx_IO_EXTENT 16l*1024l*1024l +#define RME96xx_CHANNELS_PER_CARD 26 + +/* Write - Register */ + +/* 0,4,8,12,16,20,24,28 ... hardware init (erasing fifo-pointer intern) */ +#define RME96xx_num_of_init_regs 8 + +#define RME96xx_init_buffer (0/4) +#define RME96xx_play_buffer (32/4) /* pointer to 26x64kBit RAM from mainboard */ +#define RME96xx_rec_buffer (36/4) /* pointer to 26x64kBit RAM from mainboard */ +#define RME96xx_control_register (64/4) /* exact meaning see below */ +#define RME96xx_irq_clear (96/4) /* irq acknowledge */ +#define RME96xx_time_code (100/4) /* if used with alesis adat */ +#define RME96xx_thru_base (128/4) /* 132...228 Thru for 26 channels */ +#define RME96xx_thru_channels RME96xx_CHANNELS_PER_CARD + +/* Read Register */ + +#define RME96xx_status_register 0 /* meaning see below */ + + + +/* Status Register: */ +/* ------------------------------------------------------------------------ */ +#define RME96xx_IRQ 0x0000001 /* IRQ is High if not reset by RMExx_irq_clear */ +#define RME96xx_lock_2 0x0000002 /* ADAT 3-PLL: 1=locked, 0=unlocked */ +#define RME96xx_lock_1 0x0000004 /* ADAT 2-PLL: 1=locked, 0=unlocked */ +#define RME96xx_lock_0 0x0000008 /* ADAT 1-PLL: 1=locked, 0=unlocked */ + +#define RME96xx_fs48 0x0000010 /* sample rate 0 ...44.1/88.2, 1 ... 48/96 Khz */ +#define RME96xx_wsel_rd 0x0000020 /* if Word-Clock is used and valid then 1 */ +#define RME96xx_buf_pos1 0x0000040 /* Bit 6..15 : Position of buffer-pointer in 64Bytes-blocks */ +#define RME96xx_buf_pos2 0x0000080 /* resolution +/- 1 64Byte/block (since 64Bytes bursts) */ + +#define RME96xx_buf_pos3 0x0000100 /* 10 bits = 1024 values */ +#define RME96xx_buf_pos4 0x0000200 /* if we mask off the first 6 bits, we can take the status */ +#define RME96xx_buf_pos5 0x0000400 /* register as sample counter in the hardware buffer */ +#define RME96xx_buf_pos6 0x0000800 + +#define RME96xx_buf_pos7 0x0001000 +#define RME96xx_buf_pos8 0x0002000 +#define RME96xx_buf_pos9 0x0004000 +#define RME96xx_buf_pos10 0x0008000 + +#define RME96xx_sync_2 0x0010000 /* if ADAT-IN3 synced to system clock */ +#define RME96xx_sync_1 0x0020000 /* if ADAT-IN2 synced to system clock */ +#define RME96xx_sync_0 0x0040000 /* if ADAT-IN1 synced to system clock */ +#define RME96xx_DS_rd 0x0080000 /* 1=Double Speed, 0=Normal Speed */ + +#define RME96xx_tc_busy 0x0100000 /* 1=time-code copy in progress (960ms) */ +#define RME96xx_tc_out 0x0200000 /* time-code out bit */ +#define RME96xx_F_0 0x0400000 /* 000=64kHz, 100=88.2kHz, 011=96kHz */ +#define RME96xx_F_1 0x0800000 /* 111=32kHz, 110=44.1kHz, 101=48kHz, */ + +#define RME96xx_F_2 0x1000000 /* od external Crystal Chip if ERF=1*/ +#define RME96xx_ERF 0x2000000 /* Error-Flag of SDPIF Receiver (1=No Lock)*/ +#define RME96xx_buffer_id 0x4000000 /* toggles by each interrupt on rec/play */ +#define RME96xx_tc_valid 0x8000000 /* 1 = a signal is detected on time-code input */ + +/* Status Register Fields */ + +#define RME96xx_lock (RME96xx_lock_0|RME96xx_lock_1|RME96xx_lock_2) +#define RME96xx_buf_pos 0x000FFC0 +#define RME96xx_sync (RME96xx_sync_0|RME96xx_sync_1|RME96xx_sync_2) +#define RME96xx_F (RME96xx_F_0|RME96xx_F_1|RME96xx_F_2) + + + +/* Control-Register: */ +/*--------------------------------------------------------------------------------*/ + +#define RME96xx_start_bit 0x0001 /* start record/play */ +#define RME96xx_latency0 0x0002 /* Bit 0 - Buffer size or latency */ +#define RME96xx_latency1 0x0004 /* Bit 1 - Buffer size or latency */ +#define RME96xx_latency2 0x0008 /* Bit 2 - Buffer size or latency */ + +#define RME96xx_Master 0x0010 /* Clock Mode Master=1,Slave/Auto=0 */ +#define RME96xx_IE 0x0020 /* Interupt Enable */ +#define RME96xx_freq 0x0040 /* samplerate 0=44.1/88.2, 1=48/96 kHz*/ + + +#define RME96xx_DS 0x0100 /* Doule Speed 0=44.1/48, 1=88.2/96 Khz */ +#define RME96xx_PRO 0x0200 /* spdif 0=consumer, 1=professional Mode*/ +#define RME96xx_EMP 0x0400 /* spdif Emphasis 0=None, 1=ON */ +#define RME96xx_Dolby 0x0800 /* spdif Non-audio bit 1=set, 0=unset */ + +#define RME96xx_opt_out 0x1000 /* Use 1st optical OUT as SPDIF: 1=yes,0=no */ +#define RME96xx_wsel 0x2000 /* use Wordclock as sync (overwrites master)*/ +#define RME96xx_inp_0 0x4000 /* SPDIF-IN: 00=optical (ADAT1), */ +#define RME96xx_inp_1 0x8000 /* 01=koaxial (Cinch), 10=Internal CDROM*/ + +#define RME96xx_SyncRef0 0x10000 /* preferred sync-source in autosync */ +#define RME96xx_SyncRef1 0x20000 /* 00=ADAT1,01=ADAT2,10=ADAT3,11=SPDIF */ + + +#define RME96xx_ctrl_init (RME96xx_latency0 |\ + RME96xx_Master |\ + RME96xx_inp_1) + + + +/* Control register fields and shortcuts */ + +#define RME96xx_latency (RME96xx_latency0|RME96xx_latency1|RME96xx_latency2) +#define RME96xx_inp (RME96xx_inp_0|RME96xx_inp_1) +#define RME96xx_SyncRef (RME96xx_SyncRef0|RME96xx_SyncRef1) +/* latency = 512Bytes * 2^n, where n is made from Bit3 ... Bit0 */ + +#define RME96xx_SET_LATENCY(x) (((x)&0x7)<<1) +#define RME96xx_GET_LATENCY(x) (((x)>>1)&0x7) +#define RME96xx_SET_inp(x) (((x)&0x3)<<14) +#define RME96xx_GET_inp(x) (((x)>>14)&0x3) +#define RME96xx_SET_SyncRef(x) (((x)&0x3)<<17) +#define RME96xx_GET_SyncRef(x) (((x)>>17)&0x3) + + +/* buffer sizes */ +#define RME96xx_BYTES_PER_SAMPLE 4 /* sizeof(u32) */ +#define RME_16K 16*1024 + +#define RME96xx_DMA_MAX_SAMPLES (RME_16K) +#define RME96xx_DMA_MAX_SIZE (RME_16K * RME96xx_BYTES_PER_SAMPLE) +#define RME96xx_DMA_MAX_SIZE_ALL (RME96xx_DMA_MAX_SIZE * RME96xx_CHANNELS_PER_CARD) + +#define RME96xx_NUM_OF_FRAGMENTS 2 +#define RME96xx_FRAGMENT_MAX_SIZE (RME96xx_DMA_MAX_SIZE/2) +#define RME96xx_FRAGMENT_MAX_SAMPLES (RME96xx_DMA_MAX_SAMPLES/2) +#define RME96xx_MAX_LATENCY 7 /* 16k samples */ + + +#define RME96xx_MAX_DEVS 4 /* we provide some OSS stereodevs */ + +#define RME_MESS "rme96xx:" +/*------------------------------------------------------------------------ + Types, struct and function declarations + ------------------------------------------------------------------------*/ + + +/* --------------------------------------------------------------------- */ + +static const char invalid_magic[] = KERN_CRIT RME_MESS" invalid magic value\n"; + +#define VALIDATE_STATE(s) \ +({ \ + if (!(s) || (s)->magic != RME96xx_MAGIC) { \ + printk(invalid_magic); \ + return -ENXIO; \ + } \ +}) + +/* --------------------------------------------------------------------- */ + + +static struct file_operations rme96xx_audio_fops; +static struct file_operations rme96xx_mixer_fops; +static int numcards; + +typedef int32_t raw_sample_t; + +typedef struct _rme96xx_info { + + /* hardware settings */ + int magic; + struct pci_dev * pcidev; /* pci_dev structure */ + unsigned long *iobase; + unsigned int irq; + + /* list of rme96xx devices */ + struct list_head devs; + + spinlock_t lock; + + u32 *recbuf; /* memory for rec buffer */ + u32 *playbuf; /* memory for play buffer */ + + u32 control_register; + + u32 thru_bits; /* thru 1=on, 0=off channel 1=Bit1... channel 26= Bit26 */ + + int open_count; + + + int rate; + int latency; + unsigned int fragsize; + int started; + + int hwptr; /* can be negativ because of pci burst offset */ + unsigned int hwbufid; /* set by interrupt, buffer which is written/read now */ + + struct dmabuf { + + unsigned int format; + int formatshift; + int inchannels; /* number of channels for device */ + int outchannels; /* number of channels for device */ + int mono; /* if true, we play mono on 2 channels */ + int inoffset; /* which channel is considered the first one */ + int outoffset; + + /* state */ + int opened; /* open() made */ + int started; /* first write/read */ + int mmapped; /* mmap */ + int open_mode; + + struct _rme96xx_info *s; + + /* pointer to read/write position in buffer */ + unsigned readptr; + unsigned writeptr; + + unsigned error; /* over/underruns cleared on sync again */ + + /* waiting and locking */ + wait_queue_head_t wait; + struct semaphore open_sem; + wait_queue_head_t open_wait; + + } dma[RME96xx_MAX_DEVS]; + + int dspnum[RME96xx_MAX_DEVS]; /* register with sound subsystem */ + int mixer; /* register with sound subsystem */ +} rme96xx_info; + + +/* fiddling with the card (first level hardware control) */ + +inline void rme96xx_set_ctrl(rme96xx_info* s,int mask) +{ + + s->control_register|=mask; + writel(s->control_register,s->iobase + RME96xx_control_register); + +} + +inline void rme96xx_unset_ctrl(rme96xx_info* s,int mask) +{ + + s->control_register&=(~mask); + writel(s->control_register,s->iobase + RME96xx_control_register); + +} + + + +/* the hwbuf in the status register seems to have some jitter, to get rid of + it, we first only let the numbers grow, to be on the secure side we + subtract a certain amount RME96xx_BURSTBYTES from the resulting number */ + +/* the function returns the hardware pointer in bytes */ +#define RME96xx_BURSTBYTES -64 /* bytes by which hwptr could be off */ + +inline int rme96xx_gethwptr(rme96xx_info* s,int exact) +{ + long flags; + if (exact) { + unsigned int hwp; +/* the hwptr seems to be rather unreliable :(, so we don't use it */ + spin_lock_irqsave(&s->lock,flags); + + hwp = readl(s->iobase + RME96xx_status_register) & 0xffc0; + s->hwptr = (hwp < s->hwptr) ? s->hwptr : hwp; +// s->hwptr = hwp; + + spin_unlock_irqrestore(&s->lock,flags); + return (s->hwptr+RME96xx_BURSTBYTES) & ((s->fragsize<<1)-1); + } + return (s->hwbufid ? s->fragsize : 0); +} + +inline void rme96xx_setlatency(rme96xx_info* s,int l) +{ + s->latency = l; + s->fragsize = 1<<(8+l); + rme96xx_unset_ctrl(s,RME96xx_latency); + rme96xx_set_ctrl(s,RME96xx_SET_LATENCY(l)); +} + + +static void rme96xx_clearbufs(struct dmabuf* dma) +{ + int i,j; + unsigned long flags; + + /* clear dmabufs */ + for(i=0;ioutchannels + dma->mono;j++) + memset(&dma->s->playbuf[(dma->outoffset + j)*RME96xx_DMA_MAX_SAMPLES], + 0, RME96xx_DMA_MAX_SIZE); + } + spin_lock_irqsave(&dma->s->lock,flags); + dma->writeptr = 0; + dma->readptr = 0; + spin_unlock_irqrestore(&dma->s->lock,flags); +} + +static int rme96xx_startcard(rme96xx_info *s,int stop) +{ + int i; + long flags; + + COMM ("startcard"); + if(s->control_register & RME96xx_IE){ + /* disable interrupt first */ + + rme96xx_unset_ctrl( s,RME96xx_start_bit ); + udelay(10); + rme96xx_unset_ctrl( s,RME96xx_IE); + spin_lock_irqsave(&s->lock,flags); /* timing is critical */ + s->started = 0; + spin_unlock_irqrestore(&s->lock,flags); + if (stop) { + COMM("Sound card stopped"); + return 1; + } + } + COMM ("interupt disabled"); + /* first initialize all pointers on card */ + for(i=0;iiobase + i); + udelay(10); /* ?? */ + } + COMM ("regs cleaned"); + + spin_lock_irqsave(&s->lock,flags); /* timing is critical */ + udelay(10); + s->started = 1; + s->hwptr = 0; + spin_unlock_irqrestore(&s->lock,flags); + + rme96xx_set_ctrl( s, RME96xx_IE | RME96xx_start_bit); + + + COMM("Sound card started"); + + return 1; +} + + +inline int rme96xx_getospace(struct dmabuf * dma, unsigned int hwp) +{ + int cnt; + int swptr; + unsigned long flags; + + spin_lock_irqsave(&dma->s->lock,flags); + swptr = dma->writeptr; + cnt = (hwp - swptr); + + if (cnt < 0) { + cnt = ((dma->s->fragsize<<1) - swptr); + } + spin_unlock_irqrestore(&dma->s->lock,flags); + return cnt; +} + +inline int rme96xx_getispace(struct dmabuf * dma, unsigned int hwp) +{ + int cnt; + int swptr; + unsigned long flags; + + spin_lock_irqsave(&dma->s->lock,flags); + swptr = dma->readptr; + cnt = (hwp - swptr); + + if (cnt < 0) { + cnt = ((dma->s->fragsize<<1) - swptr); + } + spin_unlock_irqrestore(&dma->s->lock,flags); + return cnt; +} + + +inline int rme96xx_copyfromuser(struct dmabuf* dma,const char* buffer,int count,int hop) +{ + int swptr = dma->writeptr; + switch (dma->format) { + case AFMT_S32_BLOCKED: + { + char* buf = (char*)buffer; + int cnt = count/dma->outchannels; + int i; + for (i=0;i < dma->outchannels;i++) { + char* hwbuf =(char*) &dma->s->playbuf[(dma->outoffset + i)*RME96xx_DMA_MAX_SAMPLES]; + hwbuf+=swptr; + + if (copy_from_user(hwbuf,buf, cnt)) + return -1; + buf+=hop; + } + swptr+=cnt; + break; + } + case AFMT_S16_LE: + { + int i,j; + int cnt = count/dma->outchannels; + for (i=0;i < dma->outchannels + dma->mono;i++) { + short* sbuf = (short*)buffer + i*(!dma->mono); + short* hwbuf =(short*) &dma->s->playbuf[(dma->outoffset + i)*RME96xx_DMA_MAX_SAMPLES]; + hwbuf+=(swptr>>1); + for (j=0;j<(cnt>>1);j++) { + hwbuf++; /* skip the low 16 bits */ + __get_user(*hwbuf++,sbuf++); + sbuf+=(dma->outchannels-1); + } + } + swptr += (cnt<<1); + break; + } + default: + printk(RME_MESS" unsupported format\n"); + return -1; + } /* switch */ + + swptr&=((dma->s->fragsize<<1) -1); + dma->writeptr = swptr; + + return 0; +} + +/* The count argument is the number of bytes */ +inline int rme96xx_copytouser(struct dmabuf* dma,const char* buffer,int count,int hop) +{ + int swptr = dma->readptr; + switch (dma->format) { + case AFMT_S32_BLOCKED: + { + char* buf = (char*)buffer; + int cnt = count/dma->inchannels; + int i; + + for (i=0;i < dma->inchannels;i++) { + char* hwbuf =(char*) &dma->s->recbuf[(dma->inoffset + i)*RME96xx_DMA_MAX_SAMPLES]; + hwbuf+=swptr; + + if (copy_to_user(buf,hwbuf,cnt)) + return -1; + buf+=hop; + } + swptr+=cnt; + break; + } + case AFMT_S16_LE: + { + int i,j; + int cnt = count/dma->inchannels; + for (i=0;i < dma->inchannels;i++) { + short* sbuf = (short*)buffer + i; + short* hwbuf =(short*) &dma->s->recbuf[(dma->inoffset + i)*RME96xx_DMA_MAX_SAMPLES]; + hwbuf+=(swptr>>1); + for (j=0;j<(cnt>>1);j++) { + hwbuf++; + __put_user(*hwbuf++,sbuf++); + sbuf+=(dma->inchannels-1); + } + } + swptr += (cnt<<1); + break; + } + default: + printk(RME_MESS" unsupported format\n"); + return -1; + } /* switch */ + + swptr&=((dma->s->fragsize<<1) -1); + dma->readptr = swptr; + return 0; +} + + +static void rme96xx_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + int i; + rme96xx_info *s = (rme96xx_info *)dev_id; + struct dmabuf *db; + u32 status; + unsigned long flags; + + status = readl(s->iobase + RME96xx_status_register); + if (!(status & RME96xx_IRQ)) { + return; + } + + spin_lock_irqsave(&s->lock,flags); + writel(0,s->iobase + RME96xx_irq_clear); + + s->hwbufid = (status & RME96xx_buffer_id)>>26; + if ((status & 0xffc0) <= 256) s->hwptr = 0; + for(i=0;idma[i]); + if(db->started > 0) + wake_up(&(db->wait)); + } + spin_unlock_irqrestore(&s->lock,flags); +} + + + +/*---------------------------------------------------------------------------- + PCI detection and module initialization stuff + ----------------------------------------------------------------------------*/ + +void* busmaster_malloc(int size) { + int pg; /* 2 s exponent of memory size */ + char *buf; + + DBG(printk("kernel malloc pages ..\n")); + + for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++); + + buf = (char *) __get_free_pages(GFP_KERNEL | GFP_DMA, pg); + + if (buf) { + struct page* page, *last_page; + + page = virt_to_page(buf); + last_page = virt_to_page(buf + (1 << pg)); + DBG(printk("setting reserved bit\n")); + while (page < last_page) { + SetPageReserved(page); + page++; + } + return buf; + } + DBG(printk("allocated %ld",(long)buf)); + return NULL; +} + +void busmaster_free(void* ptr,int size) { + int pg; + struct page* page, *last_page; + + if (ptr == NULL) + return; + + for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++); + + page = virt_to_page(ptr); + last_page = page + (1 << pg); + while (page < last_page) { + ClearPageReserved(page); + page++; + } + DBG(printk("freeing pages\n")); + free_pages((unsigned long) ptr, pg); + DBG(printk("done\n")); +} + +/* initialize those parts of the info structure which are not pci detectable resources */ + +static int rme96xx_dmabuf_init(rme96xx_info * s,struct dmabuf* dma,int ioffset,int ooffset) { + + init_MUTEX(&dma->open_sem); + init_waitqueue_head(&dma->open_wait); + init_waitqueue_head(&dma->wait); + dma->s = s; + dma->error = 0; + + dma->format = AFMT_S32_BLOCKED; + dma->formatshift = 0; + dma->inchannels = dma->outchannels = 1; + dma->inoffset = ioffset; + dma->outoffset = ooffset; + + dma->opened=0; + dma->started=0; + dma->mmapped=0; + dma->open_mode=0; + dma->mono=0; + + rme96xx_clearbufs(dma); + return 0; +} + + +int rme96xx_init(rme96xx_info* s) +{ + int i; + DBG(printk(__FUNCTION__"\n")); + numcards++; + + s->magic = RME96xx_MAGIC; + + spin_lock_init(&s->lock); + + COMM ("setup busmaster memory") + s->recbuf = busmaster_malloc(RME96xx_DMA_MAX_SIZE_ALL); + s->playbuf = busmaster_malloc(RME96xx_DMA_MAX_SIZE_ALL); + + if (!s->recbuf || !s->playbuf) { + printk(KERN_ERR RME_MESS" Unable to allocate busmaster memory\n"); + return -ENODEV; + } + + COMM ("setting rec and playbuffers") + + writel((u32) virt_to_bus(s->recbuf),s->iobase + RME96xx_rec_buffer); + writel((u32) virt_to_bus(s->playbuf),s->iobase + RME96xx_play_buffer); + + COMM ("initializing control register") + rme96xx_unset_ctrl(s,0xffffffff); + rme96xx_set_ctrl(s,RME96xx_ctrl_init); + + + COMM ("setup devices") + for (i=0;i < devices;i++) { + struct dmabuf * dma = &s->dma[i]; + rme96xx_dmabuf_init(s,dma,2*i,2*i); + } + + s->started = 0; + rme96xx_setlatency(s,7); + + printk(KERN_INFO RME_MESS" card %d initialized\n",numcards); + return 0; +} + + +/* open uses this to figure out which device was opened .. this seems to be + unnecessary complex */ + +static LIST_HEAD(devs); + +static int __devinit rme96xx_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid) +{ + int i; + rme96xx_info *s; + + DBG(printk(__FUNCTION__"\n")); + + if (pcidev->irq == 0) + return -1; + if (!pci_dma_supported(pcidev, 0xffffffff)) { + printk(KERN_WARNING RME_MESS" architecture does not support 32bit PCI busmaster DMA\n"); + return -1; + } + if (!(s = kmalloc(sizeof(rme96xx_info), GFP_KERNEL))) { + printk(KERN_WARNING RME_MESS" out of memory\n"); + return -1; + } + memset(s, 0, sizeof(rme96xx_info)); + + s->pcidev = pcidev; + s->iobase = ioremap(pci_resource_start(pcidev, 0),RME96xx_IO_EXTENT); + s->irq = pcidev->irq; + + DBG(printk("remapped iobase: %lx irq %d\n",(long)s->iobase,s->irq)); + + if (pci_enable_device(pcidev)) + goto err_irq; + if (request_irq(s->irq, rme96xx_interrupt, SA_SHIRQ, "es1370", s)) { + printk(KERN_ERR RME_MESS" irq %u in use\n", s->irq); + goto err_irq; + } + + /* initialize the card */ + + i = 0; + if (rme96xx_init(s) < 0) { + printk(KERN_ERR RME_MESS" initialization failed\n"); + goto err_devices; + } + for (i=0;idspnum[i] = register_sound_dsp(&rme96xx_audio_fops, -1)) < 0) + goto err_devices; + } + + if ((s->mixer = register_sound_mixer(&rme96xx_mixer_fops, -1)) < 0) + goto err_devices; + + pci_set_drvdata(pcidev, s); + pcidev->dma_mask = 0xffffffff; /* ????? */ + /* put it into driver list */ + list_add_tail(&s->devs, &devs); + + DBG(printk("initialization successful\n")); + return 0; + + /* error handler */ + err_devices: + while (i--) + unregister_sound_dsp(s->dspnum[i]); + free_irq(s->irq,s); + err_irq: + kfree(s); + return -1; +} + + +static void __devinit rme96xx_remove(struct pci_dev *dev) +{ + int i; + rme96xx_info *s = pci_get_drvdata(dev); + + if (!s) { + printk(KERN_ERR"device structure not valid\n"); + return ; + } + + if (s->started) rme96xx_startcard(s,0); + + i = devices; + while (i) { + i--; + unregister_sound_dsp(s->dspnum[i]); + } + + unregister_sound_mixer(s->mixer); +/* synchronize_irq(); This call got lost somehow ? */ + free_irq(s->irq,s); + busmaster_free(s->recbuf,RME96xx_DMA_MAX_SIZE_ALL); + busmaster_free(s->playbuf,RME96xx_DMA_MAX_SIZE_ALL); + kfree(s); + pci_set_drvdata(dev, NULL); +} + + +#ifndef PCI_VENDOR_ID_RME +#define PCI_VENDOR_ID_RME 0x10ee +#endif +#ifndef PCI_DEVICE_ID_RME9652 +#define PCI_DEVICE_ID_RME9652 0x3fc4 +#endif +#ifndef PCI_ANY_ID +#define PCI_ANY_ID 0 +#endif + +static struct pci_device_id id_table[] __devinitdata = { + { PCI_VENDOR_ID_RME, PCI_DEVICE_ID_RME9652, PCI_ANY_ID, PCI_ANY_ID, 0, 0 }, + { 0, } +}; + +MODULE_DEVICE_TABLE(pci, id_table); + +static struct pci_driver rme96xx_driver = { + name: "rme96xx", + id_table: id_table, + probe: rme96xx_probe, + remove: rme96xx_remove +}; + +static int __init init_rme96xx(void) +{ + + if (!pci_present()) /* No PCI bus in this machine! */ + return -ENODEV; + printk(KERN_INFO RME_MESS" version "RMEVERSION" time " __TIME__ " " __DATE__ "\n"); + printk(KERN_INFO RME_MESS" reserving %d dsp device(s)\n",devices); + numcards = 0; + return pci_module_init(&rme96xx_driver); +} + +static void __exit cleanup_rme96xx(void) +{ + printk(KERN_INFO RME_MESS" unloading\n"); + pci_unregister_driver(&rme96xx_driver); +} + +module_init(init_rme96xx); +module_exit(cleanup_rme96xx); + + + + + +/*-------------------------------------------------------------------------- + Implementation of file operations +---------------------------------------------------------------------------*/ + +#define RME96xx_FMT (AFMT_S16_LE|AFMT_U8|AFMT_S32_BLOCKED) + + +static int rme96xx_ioctl(struct inode *in, struct file *file, + unsigned int cmd, unsigned long arg) +{ + + + struct dmabuf * dma = (struct dmabuf *)file->private_data; + rme96xx_info *s = dma->s; + unsigned long flags; + audio_buf_info abinfo; + count_info cinfo; + int count; + int val = 0; + + VALIDATE_STATE(s); + + DBG(printk("ioctl %ud\n",cmd)); + + switch (cmd) { + case OSS_GETVERSION: + return put_user(SOUND_VERSION, (int *)arg); + + case SNDCTL_DSP_SYNC: +#if 0 + if (file->f_mode & FMODE_WRITE) + return drain_dac2(s, 0/*file->f_flags & O_NONBLOCK*/); +#endif + return 0; + + case SNDCTL_DSP_SETDUPLEX: + return 0; + + case SNDCTL_DSP_GETCAPS: + return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg); + + case SNDCTL_DSP_RESET: +// rme96xx_clearbufs(dma); + return 0; + + case SNDCTL_DSP_SPEED: + if (get_user(val, (int *)arg)) + return -EFAULT; + if (val >= 0) { +/* generally it's not a problem if we change the speed + if (dma->open_mode & (~file->f_mode) & (FMODE_READ|FMODE_WRITE)) + return -EINVAL; +*/ + spin_lock_irqsave(&s->lock, flags); + + switch (val) { + case 44100: + case 88200: + rme96xx_unset_ctrl(s,RME96xx_freq); + break; + case 48000: + case 96000: + rme96xx_set_ctrl(s,RME96xx_freq); + break; + default: + rme96xx_unset_ctrl(s,RME96xx_freq); + val = 44100; + } + if (val > 50000) + rme96xx_set_ctrl(s,RME96xx_DS); + else + rme96xx_unset_ctrl(s,RME96xx_DS); + s->rate = val; + spin_unlock_irqrestore(&s->lock, flags); + } + DBG(printk("speed set to %d\n",val)); + return put_user(val, (int *)arg); + + case SNDCTL_DSP_STEREO: /* this plays a mono file on two channels */ + if (get_user(val, (int *)arg)) + return -EFAULT; + + if (!val) { + DBG(printk("setting to mono\n")); + dma->mono=1; + dma->inchannels = 1; + dma->outchannels = 1; + } + else { + DBG(printk("setting to stereo\n")); + dma->mono = 0; + dma->inchannels = 2; + dma->outchannels = 2; + } + return 0; + case SNDCTL_DSP_CHANNELS: + /* remember to check for resonable offset/channel pairs here */ + if (get_user(val, (int *)arg)) + return -EFAULT; + + if (file->f_mode & FMODE_WRITE) { + if (val > 0 && (dma->outoffset + val) <= RME96xx_CHANNELS_PER_CARD) + dma->outchannels = val; + else + dma->outchannels = val = 2; + DBG(printk("setting to outchannels %d\n",val)); + } + if (file->f_mode & FMODE_READ) { + if (val > 0 && (dma->inoffset + val) <= RME96xx_CHANNELS_PER_CARD) + dma->inchannels = val; + else + dma->inchannels = val = 2; + DBG(printk("setting to inchannels %d\n",val)); + } + + dma->mono=0; + + return put_user(val, (int *)arg); + + case SNDCTL_DSP_GETFMTS: /* Returns a mask */ + return put_user(RME96xx_FMT, (int *)arg); + + case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/ + DBG(printk("setting to format %x\n",val)); + if (get_user(val, (int *)arg)) + return -EFAULT; + if (val != AFMT_QUERY) { + if (val & RME96xx_FMT) + dma->format = val; + switch (dma->format) { + case AFMT_S16_LE: + dma->formatshift=1; + break; + case AFMT_S32_BLOCKED: + dma->formatshift=0; + break; + } + } + return put_user(dma->format, (int *)arg); + + case SNDCTL_DSP_POST: + return 0; + + case SNDCTL_DSP_GETTRIGGER: + val = 0; +#if 0 + if (file->f_mode & FMODE_READ && s->ctrl & CTRL_ADC_EN) + val |= PCM_ENABLE_INPUT; + if (file->f_mode & FMODE_WRITE && s->ctrl & CTRL_DAC2_EN) + val |= PCM_ENABLE_OUTPUT; +#endif + return put_user(val, (int *)arg); + + case SNDCTL_DSP_SETTRIGGER: + if (get_user(val, (int *)arg)) + return -EFAULT; +#if 0 + if (file->f_mode & FMODE_READ) { + if (val & PCM_ENABLE_INPUT) { + if (!s->dma_adc.ready && (ret = prog_dmabuf_adc(s))) + return ret; + start_adc(s); + } else + stop_adc(s); + } + if (file->f_mode & FMODE_WRITE) { + if (val & PCM_ENABLE_OUTPUT) { + if (!s->dma_dac2.ready && (ret = prog_dmabuf_dac2(s))) + return ret; + start_dac2(s); + } else + stop_dac2(s); + } +#endif + return 0; + + case SNDCTL_DSP_GETOSPACE: + if (!(file->f_mode & FMODE_WRITE)) + return -EINVAL; + + val = rme96xx_gethwptr(dma->s,0); + + + count = rme96xx_getospace(dma,val); + if (!s->started) count = s->fragsize*2; + abinfo.fragsize =(s->fragsize*dma->outchannels)>>dma->formatshift; + abinfo.bytes = (count*dma->outchannels)>>dma->formatshift; + abinfo.fragstotal = 2; + abinfo.fragments = (count > s->fragsize); + + return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0; + + case SNDCTL_DSP_GETISPACE: + if (!(file->f_mode & FMODE_READ)) + return -EINVAL; + + val = rme96xx_gethwptr(dma->s,0); + + count = rme96xx_getispace(dma,val); + + abinfo.fragsize = (s->fragsize*dma->inchannels)>>dma->formatshift; + abinfo.bytes = (count*dma->inchannels)>>dma->formatshift;; + abinfo.fragstotal = 2; + abinfo.fragments = count > s->fragsize; + return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0; + + case SNDCTL_DSP_NONBLOCK: + file->f_flags |= O_NONBLOCK; + return 0; + + case SNDCTL_DSP_GETODELAY: /* What shold this exactly do ? , + ATM it is just abinfo.bytes */ + if (!(file->f_mode & FMODE_WRITE)) + return -EINVAL; + + val = rme96xx_gethwptr(dma->s,0); + count = val - dma->readptr; + if (count < 0) + count += s->fragsize<<1; + + return put_user(count, (int *)arg); + + +/* check out how to use mmaped mode (can only be blocked !!!) */ + case SNDCTL_DSP_GETIPTR: + if (!(file->f_mode & FMODE_READ)) + return -EINVAL; + val = rme96xx_gethwptr(dma->s,0); + spin_lock_irqsave(&s->lock,flags); + cinfo.bytes = s->fragsize<<1;; + count = val - dma->readptr; + if (count < 0) + count += s->fragsize<<1; + + cinfo.blocks = (count > s->fragsize); + cinfo.ptr = val; + if (dma->mmapped) + dma->readptr &= s->fragsize<<1; + spin_unlock_irqrestore(&s->lock,flags); + + return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)); + + case SNDCTL_DSP_GETOPTR: + if (!(file->f_mode & FMODE_READ)) + return -EINVAL; + val = rme96xx_gethwptr(dma->s,0); + spin_lock_irqsave(&s->lock,flags); + cinfo.bytes = s->fragsize<<1;; + count = val - dma->writeptr; + if (count < 0) + count += s->fragsize<<1; + + cinfo.blocks = (count > s->fragsize); + cinfo.ptr = val; + if (dma->mmapped) + dma->writeptr &= s->fragsize<<1; + spin_unlock_irqrestore(&s->lock,flags); + return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)); + case SNDCTL_DSP_GETBLKSIZE: + return put_user(s->fragsize, (int *)arg); + + case SNDCTL_DSP_SETFRAGMENT: + if (get_user(val, (int *)arg)) + return -EFAULT; + val&=0xffff; + val -= 7; + if (val < 0) val = 0; + if (val > 7) val = 7; + rme96xx_setlatency(s,val); + return 0; + + case SNDCTL_DSP_SUBDIVIDE: +#if 0 + if ((file->f_mode & FMODE_READ && s->dma_adc.subdivision) || + (file->f_mode & FMODE_WRITE && s->dma_dac2.subdivision)) + return -EINVAL; + if (get_user(val, (int *)arg)) + return -EFAULT; + if (val != 1 && val != 2 && val != 4) + return -EINVAL; + if (file->f_mode & FMODE_READ) + s->dma_adc.subdivision = val; + if (file->f_mode & FMODE_WRITE) + s->dma_dac2.subdivision = val; +#endif + return 0; + + case SOUND_PCM_READ_RATE: + return put_user(s->rate, (int *)arg); + + case SOUND_PCM_READ_CHANNELS: + return put_user(dma->outchannels, (int *)arg); + + case SOUND_PCM_READ_BITS: + switch (dma->format) { + case AFMT_S32_BLOCKED: + val = 32; + break; + case AFMT_S16_LE: + val = 16; + break; + } + return put_user(val, (int *)arg); + + case SOUND_PCM_WRITE_FILTER: + case SNDCTL_DSP_SETSYNCRO: + case SOUND_PCM_READ_FILTER: + return -EINVAL; + + } + + + return -ENODEV; +} + + + +static int rme96xx_open(struct inode *in, struct file *f) +{ + int minor = MINOR(in->i_rdev); + struct list_head *list; + int devnum = ((minor-3)/16) % devices; /* default = 0 */ + rme96xx_info *s; + struct dmabuf* dma; + DECLARE_WAITQUEUE(wait, current); + + DBG(printk("device num %d open\n",devnum)); + +/* ??? */ + for (list = devs.next; ; list = list->next) { + if (list == &devs) + return -ENODEV; + s = list_entry(list, rme96xx_info, devs); + if (!((s->dspnum[devnum] ^ minor) & ~0xf)) + break; + } + VALIDATE_STATE(s); +/* ??? */ + + dma = &s->dma[devnum]; + f->private_data = dma; + /* wait for device to become free */ + down(&s->dma[devnum].open_sem); + while (dma->open_mode & f->f_mode) { + if (f->f_flags & O_NONBLOCK) { + up(&dma->open_sem); + return -EBUSY; + } + add_wait_queue(&dma->open_wait, &wait); + __set_current_state(TASK_INTERRUPTIBLE); + up(&dma->open_sem); + schedule(); + remove_wait_queue(&dma->open_wait, &wait); + set_current_state(TASK_RUNNING); + if (signal_pending(current)) + return -ERESTARTSYS; + down(&dma->open_sem); + } + + COMM ("hardware open") + + if (!s->dma[devnum].opened) rme96xx_dmabuf_init(dma->s,dma,dma->inoffset,dma->outoffset); + + s->dma[devnum].open_mode |= (f->f_mode & (FMODE_READ | FMODE_WRITE)); + s->dma[devnum].opened = 1; + up(&s->dma[devnum].open_sem); + + DBG(printk("device num %d open finished\n",devnum)); + return 0; +} + +static int rme96xx_release(struct inode *in, struct file *file) +{ + struct dmabuf * dma = (struct dmabuf*) file->private_data; + int hwp; + DBG(printk(__FUNCTION__"\n")); + + COMM ("draining") + if (dma->open_mode & FMODE_WRITE) { +#if 0 /* Why doesn't this work with some cards ?? */ + hwp = rme96xx_gethwptr(dma->s,0); + while (rme96xx_getospace(dma,hwp)) { + interruptible_sleep_on(&(dma->wait)); + hwp = rme96xx_gethwptr(dma->s,0); + } +#endif + rme96xx_clearbufs(dma); + } + + dma->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE); + + if (!(dma->open_mode & (FMODE_READ|FMODE_WRITE))) { + dma->opened = 0; + if (dma->s->started) rme96xx_startcard(dma->s,1); + } + + wake_up(&dma->open_wait); + up(&dma->open_sem); + + return 0; +} + + +static ssize_t rme96xx_write(struct file *file, const char *buffer, + size_t count, loff_t *ppos) +{ + struct dmabuf *dma = (struct dmabuf *)file->private_data; + ssize_t ret = 0; + int cnt; /* number of bytes from "buffer" that will/can be used */ + int hop = count/dma->outchannels; + int hwp; + int exact = (file->f_flags & O_NONBLOCK); + + + if(dma == NULL || (dma->s) == NULL) + return -ENXIO; + + if (ppos != &file->f_pos) + return -ESPIPE; + + if (dma->mmapped || !dma->opened) + return -ENXIO; + + if (!access_ok(VERIFY_READ, buffer, count)) + return -EFAULT; + + if (! (dma->open_mode & FMODE_WRITE)) + return -ENXIO; + + if (!dma->s->started) rme96xx_startcard(dma->s,exact); + hwp = rme96xx_gethwptr(dma->s,0); + + if(!(dma->started)){ + COMM ("first write") + + dma->readptr = hwp; + dma->writeptr = hwp; + dma->started = 1; + COMM ("first write done") + } + + while (count > 0) { + cnt = rme96xx_getospace(dma,hwp); + cnt>>=dma->formatshift; + cnt*=dma->outchannels; + if (cnt > count) + cnt = count; + + if (cnt != 0) { + if (rme96xx_copyfromuser(dma,buffer,cnt,hop)) + return ret ? ret : -EFAULT; + count -= cnt; + buffer += cnt; + ret += cnt; + if (count == 0) return ret; + } + if (file->f_flags & O_NONBLOCK) + return ret ? ret : -EAGAIN; + + if ((hwp - dma->writeptr) <= 0) { + interruptible_sleep_on(&(dma->wait)); + + if (signal_pending(current)) + return ret ? ret : -ERESTARTSYS; + } + + hwp = rme96xx_gethwptr(dma->s,exact); + + }; /* count > 0 */ + + return ret; +} + +static ssize_t rme96xx_read(struct file *file, char *buffer,size_t count, loff_t *ppos) +{ + struct dmabuf *dma = (struct dmabuf *)file->private_data; + ssize_t ret = 0; + int cnt; + int hop = count/dma->inchannels; + int hwp; + int exact = (file->f_flags & O_NONBLOCK); + + + if(dma == NULL || (dma->s) == NULL) + return -ENXIO; + + if (ppos != &file->f_pos) + return -ESPIPE; + + if (dma->mmapped || !dma->opened) + return -ENXIO; + + if (!access_ok(VERIFY_WRITE, buffer, count)) + return -EFAULT; + + if (! (dma->open_mode & FMODE_READ)) + return -ENXIO; + + if (count > ((dma->s->fragsize*dma->inchannels)>>dma->formatshift)) + return -EFAULT; + + if (!dma->s->started) rme96xx_startcard(dma->s,exact); + hwp = rme96xx_gethwptr(dma->s,0); + + if(!(dma->started)){ + COMM ("first read") + + dma->writeptr = hwp; + dma->readptr = hwp; + dma->started = 1; + } + + while (count > 0) { + cnt = rme96xx_getispace(dma,hwp); + cnt>>=dma->formatshift; + cnt*=dma->inchannels; + + if (cnt > count) + cnt = count; + + if (cnt != 0) { + + if (rme96xx_copytouser(dma,buffer,cnt,hop)) + return ret ? ret : -EFAULT; + + count -= cnt; + buffer += cnt; + ret += cnt; + if (count == 0) return ret; + } + if (file->f_flags & O_NONBLOCK) + return ret ? ret : -EAGAIN; + + if ((hwp - dma->readptr) <= 0) { + interruptible_sleep_on(&(dma->wait)); + + if (signal_pending(current)) + return ret ? ret : -ERESTARTSYS; + } + hwp = rme96xx_gethwptr(dma->s,exact); + + }; /* count > 0 */ + + return ret; +} + +static int rm96xx_mmap(struct file *file, struct vm_area_struct *vma) { + struct dmabuf *dma = (struct dmabuf *)file->private_data; + rme96xx_info* s = dma->s; + unsigned long size; + + VALIDATE_STATE(s); + lock_kernel(); + + if (vma->vm_pgoff != 0) { + unlock_kernel(); + return -EINVAL; + } + size = vma->vm_end - vma->vm_start; + if (size > RME96xx_DMA_MAX_SIZE) { + unlock_kernel(); + return -EINVAL; + } + + + if (vma->vm_flags & VM_WRITE) { + if (!s->started) rme96xx_startcard(s,1); + + if (remap_page_range(vma->vm_start, virt_to_phys(s->playbuf + dma->outoffset*RME96xx_DMA_MAX_SIZE), size, vma->vm_page_prot)) { + unlock_kernel(); + return -EAGAIN; + } + } + else if (vma->vm_flags & VM_READ) { + if (!s->started) rme96xx_startcard(s,1); + if (remap_page_range(vma->vm_start, virt_to_phys(s->playbuf + dma->inoffset*RME96xx_DMA_MAX_SIZE), size, vma->vm_page_prot)) { + unlock_kernel(); + return -EAGAIN; + } + } else { + unlock_kernel(); + return -EINVAL; + } + + +/* this is the mapping */ + + dma->mmapped = 1; + unlock_kernel(); + return 0; +} + +static unsigned int rme96xx_poll(struct file *file, struct poll_table_struct *wait) +{ + struct dmabuf *dma = (struct dmabuf *)file->private_data; + rme96xx_info* s = dma->s; + unsigned int mask = 0; + unsigned int hwp,cnt; + + DBG(printk("rme96xx poll_wait ...\n")); + VALIDATE_STATE(s); + + if (!s->started) { + mask |= POLLOUT | POLLWRNORM; + } + poll_wait(file, &dma->wait, wait); + + hwp = rme96xx_gethwptr(dma->s,0); + + DBG(printk("rme96xx poll: ..cnt %d > %d\n",cnt,s->fragsize)); + + cnt = rme96xx_getispace(dma,hwp); + + if (file->f_mode & FMODE_READ) + if (cnt > 0) + mask |= POLLIN | POLLRDNORM; + + + + cnt = rme96xx_getospace(dma,hwp); + + if (file->f_mode & FMODE_WRITE) + if (cnt > 0) + mask |= POLLOUT | POLLWRNORM; + + +// printk("rme96xx poll_wait ...%d > %d\n",rme96xx_getospace(dma,hwp),rme96xx_getispace(dma,hwp)); + + return mask; +} + + +static struct file_operations rme96xx_audio_fops = { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + owner: THIS_MODULE, +#endif + read: rme96xx_read, + write: rme96xx_write, + poll: rme96xx_poll, + ioctl: rme96xx_ioctl, + mmap: rm96xx_mmap, + open: rme96xx_open, + release: rme96xx_release +}; + +static int rme96xx_mixer_open(struct inode *inode, struct file *file) +{ + int minor = MINOR(inode->i_rdev); + struct list_head *list; + rme96xx_info *s; + + COMM ("mixer open"); + + for (list = devs.next; ; list = list->next) { + if (list == &devs) + return -ENODEV; + s = list_entry(list, rme96xx_info, devs); + if (s->mixer== minor) + break; + } + VALIDATE_STATE(s); + file->private_data = s; + + COMM ("mixer opened") + return 0; +} + +static int rme96xx_mixer_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) +{ + rme96xx_info *s = (rme96xx_info *)file->private_data; + u32 status; + + status = readl(s->iobase + RME96xx_status_register); + + VALIDATE_STATE(s); + if (cmd == SOUND_MIXER_PRIVATE1) { + rme_mixer mixer; + copy_from_user(&mixer,(void*)arg,sizeof(mixer)); + + if (file->f_mode & FMODE_WRITE) { + s->dma[mixer.devnr].outoffset = mixer.o_offset; + s->dma[mixer.devnr].inoffset = mixer.i_offset; + } + + mixer.o_offset = s->dma[mixer.devnr].outoffset; + mixer.i_offset = s->dma[mixer.devnr].inoffset; + + return copy_to_user((void *)arg, &mixer, sizeof(mixer)) ? -EFAULT : 0; + } + if (cmd == SOUND_MIXER_PRIVATE2) { + return put_user(status, (int *)arg); + } + if (cmd == SOUND_MIXER_PRIVATE3) { + u32 control; + copy_from_user(&control,(void*)arg,sizeof(control)); + if (file->f_mode & FMODE_WRITE) { + s->control_register = control; + writel(control,s->iobase + RME96xx_control_register); + } + + return put_user(s->control_register, (int *)arg); + } + return -1; +} + + + +static int rme96xx_mixer_release(struct inode *inode, struct file *file) +{ + return 0; +} + +static /*const*/ struct file_operations rme96xx_mixer_fops = { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + owner: THIS_MODULE, +#endif + ioctl: rme96xx_mixer_ioctl, + open: rme96xx_mixer_open, + release: rme96xx_mixer_release, +}; diff -u --recursive --new-file v2.4.8/linux/drivers/sound/rme96xx.h linux/drivers/sound/rme96xx.h --- v2.4.8/linux/drivers/sound/rme96xx.h Wed Dec 31 16:00:00 1969 +++ linux/drivers/sound/rme96xx.h Sun Aug 12 10:51:42 2001 @@ -0,0 +1,61 @@ +/* (C) 2000 Guenter Geiger + with copy/pastes from the driver of Winfried Ritsch +*/ + + +#ifndef AFMT_S32_BLOCKED +#define AFMT_S32_BLOCKED 0x0000400 +#endif + +#ifndef AFMT_S16_BLOCKED +#define AFMT_S16_BLOCKED 0x0000800 +#endif + + +typedef struct rme_status { + unsigned int irq:1; /* high or low */ + unsigned int lockmask:3; /* ADAT1, ADAT2, ADAT3 */ + unsigned int sr48:1; /* current sample rate */ + unsigned int wclock:1; /* wordclock used ? */ + unsigned int bufpoint:10; + + unsigned int syncmask:3; /* ADAT1, ADAT2, ADAT3 */ + unsigned int doublespeed:1; + unsigned int tc_busy:1; + unsigned int tc_out:1; + unsigned int crystalrate:3; + unsigned int spdif_error:1; + unsigned int bufid:1; + unsigned int tc_valid:1; +} rme_status_t; + + +typedef struct rme_control { + unsigned int start:1; + unsigned int latency:3; + + unsigned int master:1; + unsigned int ie:1; + unsigned int sr48:1; + unsigned int spare:1; + + unsigned int doublespeed:1; + unsigned int pro:1; + unsigned int emphasis:1; + unsigned int dolby:1; + + unsigned int opt_out:1; + unsigned int wordclock:1; + unsigned int spdif_in:2; + + unsigned int sync_ref:2; +} rme_ctrl_t; + + +typedef struct _rme_mixer { + int i_offset; + int o_offset; + int devnr; + int spare[8]; +} rme_mixer; + diff -u --recursive --new-file v2.4.8/linux/drivers/sound/sonicvibes.c linux/drivers/sound/sonicvibes.c --- v2.4.8/linux/drivers/sound/sonicvibes.c Sun May 20 12:11:39 2001 +++ linux/drivers/sound/sonicvibes.c Sun Aug 12 10:51:42 2001 @@ -92,6 +92,8 @@ * Tjeerd Mulder * 31.01.2001 0.29 Register/Unregister gameport * Fix SETTRIGGER non OSS API conformity + * 18.05.2001 0.30 PCI probing and error values cleaned up by Marcus + * Meissner * */ @@ -388,7 +390,7 @@ /* --------------------------------------------------------------------- */ -extern __inline__ unsigned ld2(unsigned int x) +static inline unsigned ld2(unsigned int x) { unsigned r = 0; @@ -422,7 +424,7 @@ #undef hweight32 #endif -extern __inline__ unsigned int hweight32(unsigned int w) +static inline unsigned int hweight32(unsigned int w) { unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555); res = (res & 0x33333333) + ((res >> 2) & 0x33333333); @@ -477,7 +479,7 @@ outb(0x14, s->iodmac + SV_DMA_MODE); } -extern __inline__ unsigned get_dmaa(struct sv_state *s) +static inline unsigned get_dmaa(struct sv_state *s) { #ifdef DMABYTEIO unsigned io = s->iodmaa+6, v = 0, u; @@ -492,7 +494,7 @@ #endif /* DMABYTEIO */ } -extern __inline__ unsigned get_dmac(struct sv_state *s) +static inline unsigned get_dmac(struct sv_state *s) { #ifdef DMABYTEIO unsigned io = s->iodmac+6, v = 0, u; @@ -663,7 +665,7 @@ /* --------------------------------------------------------------------- */ -extern inline void stop_adc(struct sv_state *s) +static inline void stop_adc(struct sv_state *s) { unsigned long flags; @@ -673,7 +675,7 @@ spin_unlock_irqrestore(&s->lock, flags); } -extern inline void stop_dac(struct sv_state *s) +static inline void stop_dac(struct sv_state *s) { unsigned long flags; @@ -815,7 +817,7 @@ return 0; } -extern __inline__ void clear_advance(struct sv_state *s) +static inline void clear_advance(struct sv_state *s) { unsigned char c = (s->fmt & (SV_CFMT_16BIT << SV_CFMT_ASHIFT)) ? 0 : 0x80; unsigned char *buf = s->dma_dac.rawbuf; @@ -1246,13 +1248,6 @@ /* --------------------------------------------------------------------- */ -static loff_t sv_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - -/* --------------------------------------------------------------------- */ - static int sv_open_mixdev(struct inode *inode, struct file *file) { int minor = MINOR(inode->i_rdev); @@ -1286,7 +1281,7 @@ static /*const*/ struct file_operations sv_mixer_fops = { owner: THIS_MODULE, - llseek: sv_llseek, + llseek: no_llseek, ioctl: sv_ioctl_mixdev, open: sv_open_mixdev, release: sv_release_mixdev, @@ -1993,7 +1988,7 @@ static /*const*/ struct file_operations sv_audio_fops = { owner: THIS_MODULE, - llseek: sv_llseek, + llseek: no_llseek, read: sv_read, write: sv_write, poll: sv_poll, @@ -2275,7 +2270,7 @@ static /*const*/ struct file_operations sv_midi_fops = { owner: THIS_MODULE, - llseek: sv_llseek, + llseek: no_llseek, read: sv_midi_read, write: sv_midi_write, poll: sv_midi_poll, @@ -2450,7 +2445,7 @@ static /*const*/ struct file_operations sv_dmfm_fops = { owner: THIS_MODULE, - llseek: sv_llseek, + llseek: no_llseek, ioctl: sv_dmfm_ioctl, open: sv_dmfm_open, release: sv_dmfm_release, @@ -2504,21 +2499,24 @@ static const char __initdata sv_ddma_name[] = "S3 Inc. SonicVibes DDMA Controller"; struct sv_state *s; mm_segment_t fs; - int i, val; + int i, val, ret; char *ddmaname; unsigned ddmanamelen; + if ((ret=pci_enable_device(pcidev))) + return ret; + if (!RSRCISIOREGION(pcidev, RESOURCE_SB) || !RSRCISIOREGION(pcidev, RESOURCE_ENH) || !RSRCISIOREGION(pcidev, RESOURCE_SYNTH) || !RSRCISIOREGION(pcidev, RESOURCE_MIDI) || !RSRCISIOREGION(pcidev, RESOURCE_GAME)) - return -1; + return -ENODEV; if (pcidev->irq == 0) - return -1; + return -ENODEV; if (pci_set_dma_mask(pcidev, 0x00ffffff)) { printk(KERN_WARNING "sonicvibes: architecture does not support 24bit PCI busmaster DMA\n"); - return -1; + return -ENODEV; } /* try to allocate a DDMA resource if not already available */ if (!RSRCISIOREGION(pcidev, RESOURCE_DDMA)) { @@ -2534,12 +2532,12 @@ pcidev->resource[RESOURCE_DDMA].name = NULL; kfree(ddmaname); printk(KERN_ERR "sv: cannot allocate DDMA controller io ports\n"); - return -1; + return -EBUSY; } } if (!(s = kmalloc(sizeof(struct sv_state), GFP_KERNEL))) { printk(KERN_WARNING "sv: out of memory\n"); - return -1; + return -ENOMEM; } memset(s, 0, sizeof(struct sv_state)); init_waitqueue_head(&s->dma_adc.wait); @@ -2558,7 +2556,6 @@ s->iodmaa = pci_resource_start(pcidev, RESOURCE_DDMA); s->iodmac = pci_resource_start(pcidev, RESOURCE_DDMA) + SV_EXTENT_DMA; s->gameport.io = pci_resource_start(pcidev, RESOURCE_GAME); - s->gameport.size = pci_resource_len(pcidev,RESOURCE_GAME); pci_write_config_dword(pcidev, 0x40, s->iodmaa | 9); /* enable and use extended mode */ pci_write_config_dword(pcidev, 0x48, s->iodmac | 9); /* enable */ printk(KERN_DEBUG "sv: io ports: %#lx %#lx %#lx %#lx %#x %#x %#x\n", @@ -2567,7 +2564,8 @@ /* hack */ pci_write_config_dword(pcidev, 0x60, wavetable_mem >> 12); /* wavetable base address */ - + + ret = -EBUSY; if (!request_region(s->ioenh, SV_EXTENT_ENH, "S3 SonicVibes PCM")) { printk(KERN_ERR "sv: io ports %#lx-%#lx in use\n", s->ioenh, s->ioenh+SV_EXTENT_ENH-1); goto err_region5; @@ -2588,14 +2586,10 @@ printk(KERN_ERR "sv: io ports %#lx-%#lx in use\n", s->iosynth, s->iosynth+SV_EXTENT_SYNTH-1); goto err_region1; } - if (!s->gameport.size) - s->gameport.io = 0; - if (s->gameport.io && !request_region(s->gameport.io, s->gameport.size, "ESS Solo1")) { + if (s->gameport.io && !request_region(s->gameport.io, SV_EXTENT_GAME, "ESS Solo1")) { printk(KERN_ERR "sv: gameport io ports in use\n"); - s->gameport.io = s->gameport.size = 0; + s->gameport.io = 0; } - if (pci_enable_device(pcidev)) - goto err_irq; /* initialize codec registers */ outb(0x80, s->ioenh + SV_CODEC_CONTROL); /* assert reset */ udelay(50); @@ -2619,21 +2613,29 @@ wrindir(s, SV_CIPCMSR1, ((8000 * 65536 / FULLRATE) >> 8) & 0xff); wrindir(s, SV_CIADCOUTPUT, 0); /* request irq */ - if (request_irq(s->irq, sv_interrupt, SA_SHIRQ, "S3 SonicVibes", s)) { + if ((ret=request_irq(s->irq,sv_interrupt,SA_SHIRQ,"S3 SonicVibes",s))) { printk(KERN_ERR "sv: irq %u in use\n", s->irq); goto err_irq; } printk(KERN_INFO "sv: found adapter at io %#lx irq %u dmaa %#06x dmac %#06x revision %u\n", s->ioenh, s->irq, s->iodmaa, s->iodmac, rdindir(s, SV_CIREVISION)); /* register devices */ - if ((s->dev_audio = register_sound_dsp(&sv_audio_fops, -1)) < 0) + if ((s->dev_audio = register_sound_dsp(&sv_audio_fops, -1)) < 0) { + ret = s->dev_audio; goto err_dev1; - if ((s->dev_mixer = register_sound_mixer(&sv_mixer_fops, -1)) < 0) + } + if ((s->dev_mixer = register_sound_mixer(&sv_mixer_fops, -1)) < 0) { + ret = s->dev_mixer; goto err_dev2; - if ((s->dev_midi = register_sound_midi(&sv_midi_fops, -1)) < 0) + } + if ((s->dev_midi = register_sound_midi(&sv_midi_fops, -1)) < 0) { + ret = s->dev_midi; goto err_dev3; - if ((s->dev_dmfm = register_sound_special(&sv_dmfm_fops, 15 /* ?? */)) < 0) + } + if ((s->dev_dmfm = register_sound_special(&sv_dmfm_fops, 15 /* ?? */)) < 0) { + ret = s->dev_dmfm; goto err_dev4; + } pci_set_master(pcidev); /* enable bus mastering */ /* initialize the chips */ fs = get_fs(); @@ -2667,7 +2669,7 @@ free_irq(s->irq, s); err_irq: if (s->gameport.io) - release_region(s->gameport.io, s->gameport.size); + release_region(s->gameport.io, SV_EXTENT_GAME); release_region(s->iosynth, SV_EXTENT_SYNTH); err_region1: release_region(s->iomidi, SV_EXTENT_MIDI); @@ -2679,7 +2681,7 @@ release_region(s->ioenh, SV_EXTENT_ENH); err_region5: kfree(s); - return -1; + return ret; } static void __devinit sv_remove(struct pci_dev *dev) @@ -2698,7 +2700,7 @@ free_irq(s->irq, s); if (s->gameport.io) { gameport_unregister_port(&s->gameport); - release_region(s->gameport.io, s->gameport.size); + release_region(s->gameport.io, SV_EXTENT_GAME); } release_region(s->iodmac, SV_EXTENT_DMA); release_region(s->iodmaa, SV_EXTENT_DMA); @@ -2731,7 +2733,7 @@ { if (!pci_present()) /* No PCI bus in this machine! */ return -ENODEV; - printk(KERN_INFO "sv: version v0.29 time " __TIME__ " " __DATE__ "\n"); + printk(KERN_INFO "sv: version v0.30 time " __TIME__ " " __DATE__ "\n"); #if 0 if (!(wavetable_mem = __get_free_pages(GFP_KERNEL, 20-PAGE_SHIFT))) printk(KERN_INFO "sv: cannot allocate 1MB of contiguous nonpageable memory for wavetable data\n"); diff -u --recursive --new-file v2.4.8/linux/drivers/sound/soundcard.c linux/drivers/sound/soundcard.c --- v2.4.8/linux/drivers/sound/soundcard.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/sound/soundcard.c Sun Aug 12 10:51:42 2001 @@ -202,11 +202,6 @@ return ret; } -static long long sound_lseek(struct file *file, long long offset, int orig) -{ - return -ESPIPE; -} - static int sound_open(struct inode *inode, struct file *file) { int dev = MINOR(inode->i_rdev); @@ -499,7 +494,7 @@ struct file_operations oss_sound_fops = { owner: THIS_MODULE, - llseek: sound_lseek, + llseek: no_llseek, read: sound_read, write: sound_write, poll: sound_poll, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/trident.c linux/drivers/sound/trident.c --- v2.4.8/linux/drivers/sound/trident.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/sound/trident.c Sun Aug 12 10:51:42 2001 @@ -31,6 +31,17 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * History + * v0.14.9b + * Switch to static inline not extern inline (gcc 3) + * v0.14.9a + * Aug 6 2001 Alan Cox + * 0.14.9 crashed on rmmod due to a timer/bh left running. Simplified + * the existing logic (the BH doesnt help as ac97 is lock_irqsave) + * and used del_timer_sync to clean up + * Fixed a problem where the ALi change broke my generic card + * v0.14.9 + * Jul 10 2001 Matt Wu + * Add H/W Volume Control * v0.14.8a * July 7 2001 Alan Cox * Moved Matt Wu's ac97 register cache into the card structure @@ -146,6 +157,7 @@ #include #include #include +#include #if defined CONFIG_ALPHA_NAUTILUS || CONFIG_ALPHA_GENERIC #include @@ -155,7 +167,7 @@ #include -#define DRIVER_VERSION "0.14.8" +#define DRIVER_VERSION "0.14.9b" /* magic numbers to protect our data structures */ #define TRIDENT_CARD_MAGIC 0x5072696E /* "Prin" */ @@ -348,6 +360,10 @@ int rec_channel_use_count; u16 mixer_regs[64][NR_AC97]; /* Made card local by Alan */ int mixer_regs_ready; + + /* Added for hardware volume control */ + int hwvolctl; + struct timer_list timer; }; /* table to map from CHANNELMASK to channel attribute for SiS 7018 */ @@ -379,7 +395,6 @@ static int trident_open_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); static void ali_ac97_set(struct trident_card *card, int secondary, u8 reg, u16 val); static u16 ali_ac97_get(struct trident_card *card, int secondary, u8 reg); @@ -890,7 +905,7 @@ /* get current playback/recording dma buffer pointer (byte offset from LBA), called with spinlock held! */ -extern __inline__ unsigned trident_get_dma_addr(struct trident_state *state) +static inline unsigned trident_get_dma_addr(struct trident_state *state) { struct dmabuf *dmabuf = &state->dmabuf; u32 cso; @@ -928,7 +943,7 @@ } /* Stop recording (lock held) */ -extern __inline__ void __stop_adc(struct trident_state *state) +static inline void __stop_adc(struct trident_state *state) { struct dmabuf *dmabuf = &state->dmabuf; unsigned int chan_num = dmabuf->channel->num; @@ -966,7 +981,7 @@ } /* stop playback (lock held) */ -extern __inline__ void __stop_dac(struct trident_state *state) +static inline void __stop_dac(struct trident_state *state) { struct dmabuf *dmabuf = &state->dmabuf; unsigned int chan_num = dmabuf->channel->num; @@ -1415,10 +1430,109 @@ } } +static void ali_hwvol_control(struct trident_card *card, int opt) +{ + u16 dwTemp, volume[2], mute, diff, *pVol[2]; + + dwTemp = ali_ac97_read(card->ac97_codec[0], 0x02); + mute = dwTemp & 0x8000; + volume[0] = dwTemp & 0x001f; + volume[1] = (dwTemp & 0x1f00) >> 8; + if (volume[0] < volume [1]) { + pVol[0] = &volume[0]; + pVol[1] = &volume[1]; + } else { + pVol[1] = &volume[0]; + pVol[0] = &volume[1]; + } + diff = *(pVol[1]) - *(pVol[0]); + + if (opt == 1) { // MUTE + dwTemp ^= 0x8000; + ali_ac97_write(card->ac97_codec[0], 0x02, dwTemp); + } else if (opt == 2) { // Down + if (mute) + return; + if (*(pVol[1]) < 0x001f) { + (*pVol[1])++; + *(pVol[0]) = *(pVol[1]) - diff; + } + dwTemp &= 0xe0e0; + dwTemp |= (volume[0]) | (volume[1] << 8); + ali_ac97_write(card->ac97_codec[0], 0x02, dwTemp); + card->ac97_codec[0]->mixer_state[0] = ((32-volume[0])*25/8) | (((32-volume[1])*25/8) << 8); + } else if (opt == 4) { // Up + if (mute) + return; + if (*(pVol[0]) >0) { + (*pVol[0])--; + *(pVol[1]) = *(pVol[0]) + diff; + } + dwTemp &= 0xe0e0; + dwTemp |= (volume[0]) | (volume[1] << 8); + ali_ac97_write(card->ac97_codec[0], 0x02, dwTemp); + card->ac97_codec[0]->mixer_state[0] = ((32-volume[0])*25/8) | (((32-volume[1])*25/8) << 8); + } + else + { + /* Nothing needs doing */ + } +} + +/* + * Re-enable reporting of vol change after 0.1 seconds + */ + +static void ali_timeout(unsigned long ptr) +{ + struct trident_card *card = (struct trident_card *)ptr; + u16 temp = 0; + + /* Enable GPIO IRQ (MISCINT bit 18h)*/ + temp = inw(TRID_REG(card, T4D_MISCINT + 2)); + temp |= 0x0004; + outw(temp, TRID_REG(card, T4D_MISCINT + 2)); +} + +/* + * Set up the timer to clear the vol change notification + */ + +static void ali_set_timer(struct trident_card *card) +{ + /* Add Timer Routine to Enable GPIO IRQ */ + del_timer(&card->timer); /* Never queue twice */ + card->timer.function = ali_timeout; + card->timer.data = (unsigned long) card; + card->timer.expires = jiffies + HZ/10; + add_timer(&card->timer); +} + +/* + * Process a GPIO event + */ + +static void ali_queue_task(struct trident_card *card, int opt) +{ + u16 temp; + + /* Disable GPIO IRQ (MISCINT bit 18h)*/ + temp = inw(TRID_REG(card, T4D_MISCINT + 2)); + temp &= (u16)(~0x0004); + outw(temp, TRID_REG(card, T4D_MISCINT + 2)); + + /* Adjust the volume */ + ali_hwvol_control(card, opt); + + /* Set the timer for 1/10th sec */ + ali_set_timer(card); +} + static void trident_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct trident_card *card = (struct trident_card *)dev_id; u32 event; + u32 gpio; spin_lock(&card->lock); event = inl(TRID_REG(card, T4D_MISCINT)); @@ -1431,17 +1545,27 @@ card->address_interrupt(card); } + if(card->pci_id == PCI_DEVICE_ID_ALI_5451) + { + /* GPIO IRQ (H/W Volume Control) */ + event = inl(TRID_REG(card, T4D_MISCINT)); + if (event & (1<<25)) { + gpio = inl(TRID_REG(card, ALI_GPIO)); + if (!timer_pending(&card->timer)) + ali_queue_task(card, gpio&0x07); + } + event = inl(TRID_REG(card, T4D_MISCINT)); + outl(event | (ST_TARGET_REACHED | MIXER_OVERFLOW | MIXER_UNDERFLOW), TRID_REG(card, T4D_MISCINT)); + spin_unlock(&card->lock); + return; + } + /* manually clear interrupt status, bad hardware design, blame T^2 */ outl((ST_TARGET_REACHED | MIXER_OVERFLOW | MIXER_UNDERFLOW), TRID_REG(card, T4D_MISCINT)); spin_unlock(&card->lock); } -static loff_t trident_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - /* in this loop, dmabuf.count signifies the amount of data that is waiting to be copied to the user's buffer. it is filled by the dma machine and drained by this loop. */ static ssize_t trident_read(struct file *file, char *buffer, size_t count, loff_t *ppos) @@ -2459,7 +2583,7 @@ static /*const*/ struct file_operations trident_audio_fops = { owner: THIS_MODULE, - llseek: trident_llseek, + llseek: no_llseek, read: trident_read, write: trident_write, poll: trident_poll, @@ -3486,7 +3610,7 @@ static /*const*/ struct file_operations trident_mixer_fops = { owner: THIS_MODULE, - llseek: trident_llseek, + llseek: no_llseek, ioctl: trident_ioctl_mixdev, open: trident_open_mixdev, }; @@ -3638,9 +3762,11 @@ unsigned long iobase; struct trident_card *card; dma_addr_t mask; - int bits; + u8 bits; u8 revision; int i = 0; + u16 temp; + struct pci_dev *pci_dev_m1533 = NULL; if (pci_enable_device(pci_dev)) return -ENODEV; @@ -3676,8 +3802,11 @@ card->banks[BANK_A].bitmap = 0UL; card->banks[BANK_B].addresses = &bank_b_addrs; card->banks[BANK_B].bitmap = 0UL; + init_MUTEX(&card->open_sem); spin_lock_init(&card->lock); + init_timer(&card->timer); + devs = card; pci_set_master(pci_dev); @@ -3708,6 +3837,23 @@ } #endif } + + /* Add H/W Volume Control By Matt Wu Jul. 06, 2001 */ + card->hwvolctl = 0; + pci_dev_m1533 = pci_find_device(PCI_VENDOR_ID_AL,PCI_DEVICE_ID_AL_M1533, pci_dev_m1533); + if (pci_dev_m1533 == NULL) + return -ENODEV; + pci_read_config_byte(pci_dev_m1533, 0x63, &bits); + if (bits & (1<<5)) + card->hwvolctl = 1; + if (card->hwvolctl) + { + /* Clear m1533 pci cfg 78h bit 30 to zero, which makes + GPIO11/12/13 work as ACGP_UP/DOWN/MUTE. */ + pci_read_config_byte(pci_dev_m1533, 0x7b, &bits); + bits &= 0xbf; /*clear bit 6 */ + pci_write_config_byte(pci_dev_m1533, 0x7b, bits); + } } else { card->alloc_pcm_channel = trident_alloc_pcm_channel; @@ -3753,17 +3899,33 @@ outl(0x00, TRID_REG(card, T4D_MUSICVOL_WAVEVOL)); if (card->pci_id == PCI_DEVICE_ID_ALI_5451) { + /* Add H/W Volume Control By Matt Wu Jul. 06, 2001 */ + if(card->hwvolctl) + { + /* Enable GPIO IRQ (MISCINT bit 18h)*/ + temp = inw(TRID_REG(card, T4D_MISCINT + 2)); + temp |= 0x0004; + outw(temp, TRID_REG(card, T4D_MISCINT + 2)); + + /* Enable H/W Volume Control GLOVAL CONTROL bit 0*/ + temp = inw(TRID_REG(card, ALI_GLOBAL_CONTROL)); + temp |= 0x0001; + outw(temp, TRID_REG(card, ALI_GLOBAL_CONTROL)); + + } if(card->revision == ALI_5451_V02) ali_close_multi_channels(); /* edited by HMSEO for GT sound */ #if defined CONFIG_ALPHA_NAUTILUS || CONFIG_ALPHA_GENERIC - u16 ac97_data; - extern struct hwrpb_struct *hwrpb; + { + u16 ac97_data; + extern struct hwrpb_struct *hwrpb; - if ((hwrpb->sys_type) == 201) { - printk(KERN_INFO "trident: Running on Alpha system type Nautilus\n"); - ac97_data = ali_ac97_get(card, 0, AC97_POWER_CONTROL); - ali_ac97_set(card, 0, AC97_POWER_CONTROL, ac97_data | + if ((hwrpb->sys_type) == 201) { + printk(KERN_INFO "trident: Running on Alpha system type Nautilus\n"); + ac97_data = ali_ac97_get(card, 0, AC97_POWER_CONTROL); + ali_ac97_set(card, 0, AC97_POWER_CONTROL, ac97_data | + } } #endif /* edited by HMSEO for GT sound*/ @@ -3782,6 +3944,13 @@ int i; struct trident_card *card = pci_get_drvdata(pci_dev); + /* + * Kill running timers before unload. We can't have them + * going off after rmmod! + */ + if(card->hwvolctl) + del_timer_sync(&card->timer); + /* ALi S/PDIF and Power Management */ if(card->pci_id == PCI_DEVICE_ID_ALI_5451) { ali_setup_spdif_out(card, ALI_PCM_TO_SPDIF_OUT); diff -u --recursive --new-file v2.4.8/linux/drivers/sound/trident.h linux/drivers/sound/trident.h --- v2.4.8/linux/drivers/sound/trident.h Wed Jul 25 17:10:23 2001 +++ linux/drivers/sound/trident.h Sun Aug 12 10:51:42 2001 @@ -90,8 +90,8 @@ T4D_STOP_B = 0xb8, T4D_CSPF_B = 0xbc, T4D_SBBL_SBCL = 0xc0, T4D_SBCTRL_SBE2R_SBDD = 0xc4, T4D_STIMER = 0xc8, T4D_LFO_B_I2S_DELTA = 0xcc, - T4D_AINT_B = 0xd8, T4D_AINTEN_B = 0xdc, - ALI_MPUR2 = 0x22, + T4D_AINT_B = 0xd8, T4D_AINTEN_B = 0xdc, + ALI_MPUR2 = 0x22, ALI_GPIO = 0x7c, ALI_EBUF1 = 0xf4, ALI_EBUF2 = 0xf8 }; diff -u --recursive --new-file v2.4.8/linux/drivers/sound/via82cxxx_audio.c linux/drivers/sound/via82cxxx_audio.c --- v2.4.8/linux/drivers/sound/via82cxxx_audio.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/sound/via82cxxx_audio.c Sun Aug 12 10:38:48 2001 @@ -1362,19 +1362,10 @@ } -static loff_t via_llseek(struct file *file, loff_t offset, int origin) -{ - DPRINTK ("ENTER\n"); - - DPRINTK ("EXIT, returning -ESPIPE\n"); - return -ESPIPE; -} - - static struct file_operations via_mixer_fops = { owner: THIS_MODULE, open: via_mixer_open, - llseek: via_llseek, + llseek: no_llseek, ioctl: via_mixer_ioctl, }; @@ -1780,7 +1771,7 @@ read: via_dsp_read, write: via_dsp_write, poll: via_dsp_poll, - llseek: via_llseek, + llseek: no_llseek, ioctl: via_dsp_ioctl, mmap: via_dsp_mmap, }; diff -u --recursive --new-file v2.4.8/linux/drivers/sound/vwsnd.c linux/drivers/sound/vwsnd.c --- v2.4.8/linux/drivers/sound/vwsnd.c Mon Dec 11 13:13:51 2000 +++ linux/drivers/sound/vwsnd.c Sun Aug 12 10:38:48 2001 @@ -2250,12 +2250,6 @@ vwsnd_audio_write_intr(devc, status); } -static loff_t vwsnd_audio_llseek(struct file *file, loff_t offset, int whence) -{ - DBGEV("(file=0x%p, offset=%Ld, whence=%d)\n", file, offset, whence); - return -ESPIPE; -} - static ssize_t vwsnd_audio_do_read(struct file *file, char *buffer, size_t count, @@ -3037,7 +3031,7 @@ static struct file_operations vwsnd_audio_fops = { owner: THIS_MODULE, - llseek: vwsnd_audio_llseek, + llseek: no_llseek, read: vwsnd_audio_read, write: vwsnd_audio_write, poll: vwsnd_audio_poll, @@ -3080,13 +3074,6 @@ return 0; } -/* seek is illegal on mixer. */ - -static loff_t vwsnd_mixer_llseek(struct file *file, loff_t offset, int whence) -{ - return -ESPIPE; -} - /* mixer_read_ioctl handles all read ioctls on the mixer device. */ static int mixer_read_ioctl(vwsnd_dev_t *devc, unsigned int nr, caddr_t arg) @@ -3234,7 +3221,7 @@ static struct file_operations vwsnd_mixer_fops = { owner: THIS_MODULE, - llseek: vwsnd_mixer_llseek, + llseek: no_llseek, ioctl: vwsnd_mixer_ioctl, open: vwsnd_mixer_open, release: vwsnd_mixer_release, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/wavfront.c linux/drivers/sound/wavfront.c --- v2.4.8/linux/drivers/sound/wavfront.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/sound/wavfront.c Sun Aug 12 10:38:48 2001 @@ -1947,12 +1947,6 @@ /* WaveFront: Linux file system interface (for access via raw synth) */ /***********************************************************************/ -static loff_t -wavefront_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static int wavefront_open (struct inode *inode, struct file *file) { @@ -2002,7 +1996,7 @@ static /*const*/ struct file_operations wavefront_fops = { owner: THIS_MODULE, - llseek: wavefront_llseek, + llseek: no_llseek, ioctl: wavefront_ioctl, open: wavefront_open, release: wavefront_release, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/ymfpci.c linux/drivers/sound/ymfpci.c --- v2.4.8/linux/drivers/sound/ymfpci.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/sound/ymfpci.c Sun Aug 12 10:51:42 2001 @@ -38,6 +38,7 @@ * - 2001/01/07 Replace the OPL3 part of CONFIG_SOUND_YMFPCI_LEGACY code with * native synthesizer through a playback slot. * - Use new 2.3.x cache coherent PCI DMA routines instead of virt_to_bus. + * - Make the thing big endian compatible. ALSA has it done. */ #include @@ -488,32 +489,34 @@ * Hardware start management */ -static void ymfpci_hw_start(ymfpci_t *codec) +static void ymfpci_hw_start(ymfpci_t *unit) { unsigned long flags; - spin_lock_irqsave(&codec->reg_lock, flags); - if (codec->start_count++ == 0) { - ymfpci_writel(codec, YDSXGR_MODE, 3); - codec->active_bank = ymfpci_readl(codec, YDSXGR_CTRLSELECT) & 1; + spin_lock_irqsave(&unit->reg_lock, flags); + if (unit->start_count++ == 0) { + ymfpci_writel(unit, YDSXGR_MODE, + ymfpci_readl(unit, YDSXGR_MODE) | 3); + unit->active_bank = ymfpci_readl(unit, YDSXGR_CTRLSELECT) & 1; } - spin_unlock_irqrestore(&codec->reg_lock, flags); + spin_unlock_irqrestore(&unit->reg_lock, flags); } -static void ymfpci_hw_stop(ymfpci_t *codec) +static void ymfpci_hw_stop(ymfpci_t *unit) { unsigned long flags; long timeout = 1000; - spin_lock_irqsave(&codec->reg_lock, flags); - if (--codec->start_count == 0) { - ymfpci_writel(codec, YDSXGR_MODE, 0); + spin_lock_irqsave(&unit->reg_lock, flags); + if (--unit->start_count == 0) { + ymfpci_writel(unit, YDSXGR_MODE, + ymfpci_readl(unit, YDSXGR_MODE) & ~3); while (timeout-- > 0) { - if ((ymfpci_readl(codec, YDSXGR_STATUS) & 2) == 0) + if ((ymfpci_readl(unit, YDSXGR_STATUS) & 2) == 0) break; } } - spin_unlock_irqrestore(&codec->reg_lock, flags); + spin_unlock_irqrestore(&unit->reg_lock, flags); } /* @@ -525,7 +528,7 @@ ymfpci_voice_t *voice, *voice2; int idx; - for (idx = 0; idx < 64; idx += pair ? 2 : 1) { + for (idx = 0; idx < YDSXG_PLAYBACK_VOICES; idx += pair ? 2 : 1) { voice = &codec->voices[idx]; voice2 = pair ? &codec->voices[idx+1] : NULL; if (voice->use || (voice2 && voice2->use)) @@ -867,19 +870,19 @@ } else { if (!spdif) { if ((voice->number & 1) == 0) { - bank->format |= 1; bank->left_gain = bank->left_gain_end = 0x40000000; } else { + bank->format |= 1; bank->right_gain = bank->right_gain_end = 0x40000000; } } else { if ((voice->number & 1) == 0) { - bank->format |= 1; bank->eff2_gain = bank->eff2_gain_end = 0x40000000; } else { + bank->format |= 1; bank->eff3_gain = bank->eff3_gain_end = 0x40000000; } @@ -997,12 +1000,12 @@ if (status & 0x80000000) { codec->active_bank = ymfpci_readl(codec, YDSXGR_CTRLSELECT) & 1; spin_lock(&codec->voice_lock); - for (nvoice = 0; nvoice < 64; nvoice++) { + for (nvoice = 0; nvoice < YDSXG_PLAYBACK_VOICES; nvoice++) { voice = &codec->voices[nvoice]; if (voice->use) ymf_pcm_interrupt(codec, voice); } - for (nvoice = 0; nvoice < 5; nvoice++) { + for (nvoice = 0; nvoice < YDSXG_CAPTURE_VOICES; nvoice++) { cap = &codec->capture[nvoice]; if (cap->use) ymf_cap_interrupt(codec, cap); @@ -1169,11 +1172,6 @@ * User interface */ -static loff_t ymf_llseek(struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - /* * in this loop, dmabuf.count signifies the amount of data that is * waiting to be copied to the user's buffer. it is filled by the dma @@ -1971,7 +1969,7 @@ } static /*const*/ struct file_operations ymf_fops = { - llseek: ymf_llseek, + llseek: no_llseek, read: ymf_read, write: ymf_write, poll: ymf_poll, @@ -1982,7 +1980,7 @@ }; static /*const*/ struct file_operations ymf_mixer_fops = { - llseek: ymf_llseek, + llseek: no_llseek, ioctl: ymf_ioctl_mixdev, open: ymf_open_mixdev, release: ymf_release_mixdev, diff -u --recursive --new-file v2.4.8/linux/drivers/sound/ymfpci.h linux/drivers/sound/ymfpci.h --- v2.4.8/linux/drivers/sound/ymfpci.h Wed Jul 25 17:10:23 2001 +++ linux/drivers/sound/ymfpci.h Sun Aug 12 10:51:42 2001 @@ -260,8 +260,8 @@ int suspended; u32 active_bank; - struct ymf_voice voices[64]; - struct ymf_capture capture[5]; + struct ymf_voice voices[YDSXG_PLAYBACK_VOICES]; + struct ymf_capture capture[YDSXG_CAPTURE_VOICES]; struct ac97_codec *ac97_codec[NR_AC97]; u16 ac97_features; diff -u --recursive --new-file v2.4.8/linux/drivers/telephony/ixj.c linux/drivers/telephony/ixj.c --- v2.4.8/linux/drivers/telephony/ixj.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/telephony/ixj.c Wed Aug 15 01:22:16 2001 @@ -1844,14 +1844,15 @@ remove_wait_queue(&j->read_q, &wait); set_current_state(TASK_RUNNING); /* Don't ever copy more than the user asks */ - i = copy_to_user(buf, j->read_buffer, min(length, j->read_buffer_size)); + i = copy_to_user(buf, j->read_buffer, + min(unsigned int, length, j->read_buffer_size)); j->read_buffer_ready = 0; if (i) { j->flags.inread = 0; return -EFAULT; } else { j->flags.inread = 0; - return min(length, j->read_buffer_size); + return min(unsigned int, length, j->read_buffer_size); } } @@ -1934,13 +1935,14 @@ remove_wait_queue(&j->write_q, &wait); if (j->write_buffer_wp + count >= j->write_buffer_end) j->write_buffer_wp = j->write_buffer; - i = copy_from_user(j->write_buffer_wp, buf, min(count, j->write_buffer_size)); + i = copy_from_user(j->write_buffer_wp, buf, + min(unsigned int, count, j->write_buffer_size)); if (i) { j->flags.inwrite = 0; return -EFAULT; } j->flags.inwrite = 0; - return min(count, j->write_buffer_size); + return min(unsigned int, count, j->write_buffer_size); } ssize_t ixj_enhanced_write(struct file * file_p, const char *buf, size_t count, loff_t * ppos) diff -u --recursive --new-file v2.4.8/linux/drivers/telephony/ixj.h linux/drivers/telephony/ixj.h --- v2.4.8/linux/drivers/telephony/ixj.h Sun Feb 4 10:05:29 2001 +++ linux/drivers/telephony/ixj.h Wed Aug 15 01:22:16 2001 @@ -54,13 +54,6 @@ #define TRUE 1 #define FALSE 0 -#ifndef min -#define min(a,b) (((a)<(b))?(a):(b)) -#endif -#ifndef max -#define max(a,b) (((a)>(b))?(a):(b)) -#endif - /****************************************************************************** * * This structure when unioned with the structures below makes simple byte diff -u --recursive --new-file v2.4.8/linux/drivers/usb/CDCEther.c linux/drivers/usb/CDCEther.c --- v2.4.8/linux/drivers/usb/CDCEther.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/usb/CDCEther.c Sun Aug 12 17:37:53 2001 @@ -0,0 +1,1279 @@ +// Portions of this file taken from +// Petko Manolov - Petkan (petkan@dce.bg) +// from his driver pegasus.c + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "CDCEther.h" + +static const char *version = __FILE__ ": v0.98.4 4 July 2001 Brad Hards and another"; + +// We will attempt to probe anything that is in the +// communication device class... +// We will sort through them later. +static struct usb_device_id CDCEther_ids[] = { + { USB_DEVICE_INFO(2, 0, 0) }, + { } +}; + +////////////////////////////////////////////////////////////////////////////// +// Callback routines from USB device ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +static void read_bulk_callback( struct urb *urb ) +{ + ether_dev_t *ether_dev = urb->context; + struct net_device *net; + int count = urb->actual_length, res; + struct sk_buff *skb; + + // Sanity check + if ( !ether_dev || !(ether_dev->flags & CDC_ETHER_RUNNING) ) { + dbg("BULK IN callback but driver is not active!"); + return; + } + + net = ether_dev->net; + if ( !netif_device_present(net) ) { + // Somebody killed our network interface... + return; + } + + if ( ether_dev->flags & CDC_ETHER_RX_BUSY ) { + // Are we already trying to receive a frame??? + ether_dev->stats.rx_errors++; + dbg("ether_dev Rx busy"); + return; + } + + // We are busy, leave us alone! + ether_dev->flags |= CDC_ETHER_RX_BUSY; + + switch ( urb->status ) { + case USB_ST_NOERROR: + break; + case USB_ST_NORESPONSE: + dbg( "no repsonse in BULK IN" ); + ether_dev->flags &= ~CDC_ETHER_RX_BUSY; + break; + default: + dbg( "%s: RX status %d", net->name, urb->status ); + goto goon; + } + + // Check to make sure we got some data... + if ( !count ) { + // We got no data!!! + goto goon; + } + + // Tell the kernel we want some memory + if ( !(skb = dev_alloc_skb(count)) ) { + // We got no receive buffer. + goto goon; + } + + // Here's where it came from + skb->dev = net; + + // Now we copy it over + eth_copy_and_sum(skb, ether_dev->rx_buff, count, 0); + + // Not sure + skb_put(skb, count); + // Not sure here either + skb->protocol = eth_type_trans(skb, net); + + // Ship it off to the kernel + netif_rx(skb); + + // update out statistics + ether_dev->stats.rx_packets++; + ether_dev->stats.rx_bytes += count; + +goon: + // Prep the USB to wait for another frame + FILL_BULK_URB( ðer_dev->rx_urb, ether_dev->usb, + usb_rcvbulkpipe(ether_dev->usb, ether_dev->data_ep_in), + ether_dev->rx_buff, ether_dev->wMaxSegmentSize, + read_bulk_callback, ether_dev ); + + // Give this to the USB subsystem so it can tell us + // when more data arrives. + if ( (res = usb_submit_urb(ðer_dev->rx_urb)) ) { + warn( __FUNCTION__ " failed submint rx_urb %d", res); + } + + // We are no longer busy, show us the frames!!! + ether_dev->flags &= ~CDC_ETHER_RX_BUSY; +} + +static void write_bulk_callback( struct urb *urb ) +{ + ether_dev_t *ether_dev = urb->context; + + // Sanity check + if ( !ether_dev || !(ether_dev->flags & CDC_ETHER_RUNNING) ) { + // We are insane!!! + err( "write_bulk_callback: device not running" ); + return; + } + + // Do we still have a valid kernel network device? + if ( !netif_device_present(ether_dev->net) ) { + // Someone killed our network interface. + err( "write_bulk_callback: net device not present" ); + return; + } + + // Hmm... What on Earth could have happened??? + if ( urb->status ) { + info("%s: TX status %d", ether_dev->net->name, urb->status); + } + + // Update the network interface and tell it we are + // ready for another frame + ether_dev->net->trans_start = jiffies; + netif_wake_queue( ether_dev->net ); +} + +//static void intr_callback( struct urb *urb ) +//{ +// ether_dev_t *ether_dev = urb->context; +// struct net_device *net; +// __u8 *d; +// +// if ( !ether_dev ) +// return; +// +// switch ( urb->status ) { +// case USB_ST_NOERROR: +// break; +// case USB_ST_URB_KILLED: +// return; +// default: +// info("intr status %d", urb->status); +// } +// +// d = urb->transfer_buffer; +// net = ether_dev->net; +// if ( d[0] & 0xfc ) { +// ether_dev->stats.tx_errors++; +// if ( d[0] & TX_UNDERRUN ) +// ether_dev->stats.tx_fifo_errors++; +// if ( d[0] & (EXCESSIVE_COL | JABBER_TIMEOUT) ) +// ether_dev->stats.tx_aborted_errors++; +// if ( d[0] & LATE_COL ) +// ether_dev->stats.tx_window_errors++; +// if ( d[0] & (NO_CARRIER | LOSS_CARRIER) ) +// ether_dev->stats.tx_carrier_errors++; +// } +//} + +////////////////////////////////////////////////////////////////////////////// +// Routines for turning net traffic on and off on the USB side /////////////// +////////////////////////////////////////////////////////////////////////////// + +static inline int enable_net_traffic( ether_dev_t *ether_dev ) +{ + struct usb_device *usb = ether_dev->usb; + + // Here would be the time to set the data interface to the configuration where + // it has two endpoints that use a protocol we can understand. + + if (usb_set_interface( usb, + ether_dev->data_bInterfaceNumber, + ether_dev->data_bAlternateSetting_with_traffic ) ) { + err("usb_set_interface() failed" ); + err("Attempted to set interface %d", ether_dev->data_bInterfaceNumber); + err("To alternate setting %d", ether_dev->data_bAlternateSetting_with_traffic); + return -1; + } + return 0; +} + +static inline void disable_net_traffic( ether_dev_t *ether_dev ) +{ + // The thing to do is to set the data interface to the alternate setting that has + // no endpoints. This is what the spec suggests. + + if (ether_dev->data_interface_altset_num_without_traffic >= 0 ) { + if (usb_set_interface( ether_dev->usb, + ether_dev->data_bInterfaceNumber, + ether_dev->data_bAlternateSetting_without_traffic ) ) { + err("usb_set_interface() failed"); + } + } else { + // Some devices just may not support this... + warn("No way to disable net traffic"); + } +} + +////////////////////////////////////////////////////////////////////////////// +// Callback routines for kernel Ethernet Device ////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +static void CDCEther_tx_timeout( struct net_device *net ) +{ + ether_dev_t *ether_dev = net->priv; + + // Sanity check + if ( !ether_dev ) { + // Seems to be a case of insanity here + return; + } + + // Tell syslog we are hosed. + warn("%s: Tx timed out.", net->name); + + // Tear the waiting frame off the list + ether_dev->tx_urb.transfer_flags |= USB_ASYNC_UNLINK; + usb_unlink_urb( ðer_dev->tx_urb ); + + // Update statistics + ether_dev->stats.tx_errors++; +} + +static int CDCEther_start_xmit( struct sk_buff *skb, struct net_device *net ) +{ + ether_dev_t *ether_dev = net->priv; + int count; + int res; + + // If we are told to transmit an ethernet frame that fits EXACTLY + // into an integer number of USB packets, we force it to send one + // more byte so the device will get a runt USB packet signalling the + // end of the ethernet frame + if ( (skb->len) ^ (ether_dev->data_ep_out_size) ) { + // It was not an exact multiple + // no need to add anything extra + count = skb->len; + } else { + // Add one to make it NOT an exact multiple + count = skb->len + 1; + } + + // Tell the kernel, "No more frames 'til we are done + // with this one.' + netif_stop_queue( net ); + + // Copy it from kernel memory to OUR memory + memcpy(ether_dev->tx_buff, skb->data, skb->len); + + // Fill in the URB for shipping it out. + FILL_BULK_URB( ðer_dev->tx_urb, ether_dev->usb, + usb_sndbulkpipe(ether_dev->usb, ether_dev->data_ep_out), + ether_dev->tx_buff, ether_dev->wMaxSegmentSize, + write_bulk_callback, ether_dev ); + + // Tell the URB how much it will be transporting today + ether_dev->tx_urb.transfer_buffer_length = count; + + // Send the URB on its merry way. + if ((res = usb_submit_urb(ðer_dev->tx_urb))) { + // Hmm... It didn't go. Tell someone... + warn("failed tx_urb %d", res); + // update some stats... + ether_dev->stats.tx_errors++; + // and tell the kernel to give us another. + // Maybe we'll get it right next time. + netif_start_queue( net ); + } else { + // Okay, it went out. + // Update statistics + ether_dev->stats.tx_packets++; + ether_dev->stats.tx_bytes += skb->len; + // And tell the kernel when the last transmit occurred. + net->trans_start = jiffies; + } + + // We are done with the kernel's memory + dev_kfree_skb(skb); + + // We are done here. + return 0; +} + +static struct net_device_stats *CDCEther_netdev_stats( struct net_device *net ) +{ + // Easy enough! + return &((ether_dev_t *)net->priv)->stats; +} + +static int CDCEther_open(struct net_device *net) +{ + ether_dev_t *ether_dev = (ether_dev_t *)net->priv; + int res; + + // We are finally getting used! + MOD_INC_USE_COUNT; + + // Turn on the USB and let the packets flow!!! + if ( (res = enable_net_traffic( ether_dev )) ) { + err( __FUNCTION__ "can't enable_net_traffic() - %d", res ); + MOD_DEC_USE_COUNT; + return -EIO; + } + + // Prep a receive URB + FILL_BULK_URB( ðer_dev->rx_urb, ether_dev->usb, + usb_rcvbulkpipe(ether_dev->usb, ether_dev->data_ep_in), + ether_dev->rx_buff, ether_dev->wMaxSegmentSize, + read_bulk_callback, ether_dev ); + + // Put it out there so the device can send us stuff + if ( (res = usb_submit_urb(ðer_dev->rx_urb)) ) + { + // Hmm... Okay... + warn( __FUNCTION__ " failed rx_urb %d", res ); + } + + // Tell the kernel we are ready to start receiving from it + netif_start_queue( net ); + + // We are up and running. + ether_dev->flags |= CDC_ETHER_RUNNING; + + // Let's get ready to move frames!!! + return 0; +} + +static int CDCEther_close( struct net_device *net ) +{ + ether_dev_t *ether_dev = net->priv; + + // We are no longer running. + ether_dev->flags &= ~CDC_ETHER_RUNNING; + + // Tell the kernel to stop sending us stuff + netif_stop_queue( net ); + + // If we are not already unplugged, turn off USB + // traffic + if ( !(ether_dev->flags & CDC_ETHER_UNPLUG) ) { + disable_net_traffic( ether_dev ); + } + + // We don't need the URBs anymore. + usb_unlink_urb( ðer_dev->rx_urb ); + usb_unlink_urb( ðer_dev->tx_urb ); + usb_unlink_urb( ðer_dev->intr_urb ); + + // We are not being used now. + MOD_DEC_USE_COUNT; + + // That's it. I'm done. + return 0; +} + +static int CDCEther_ioctl( struct net_device *net, struct ifreq *rq, int cmd ) +{ + //__u16 *data = (__u16 *)&rq->ifr_data; + //ether_dev_t *ether_dev = net->priv; + + // No support here yet. + // Do we need support??? + switch(cmd) { + case SIOCDEVPRIVATE: + return -EOPNOTSUPP; + case SIOCDEVPRIVATE+1: + return -EOPNOTSUPP; + case SIOCDEVPRIVATE+2: + //return 0; + return -EOPNOTSUPP; + default: + return -EOPNOTSUPP; + } +} + +static void CDCEther_set_multicast( struct net_device *net ) +{ + ether_dev_t *ether_dev = net->priv; + + // Tell the kernel to stop sending us frames while we get this + // all set up. + netif_stop_queue(net); + + // Do what we are told. + if (net->flags & IFF_PROMISC) { + // TODO - Turn on promiscuous mode + info( "%s: Promiscuous mode enabled", net->name); + } else if (net->flags & IFF_ALLMULTI){ + // TODO - Here we need to tell the device to block ALL multicast traffic. + info("%s: set allmulti", net->name); + } else if (net->mc_count > ether_dev->wNumberMCFilters) { + // TODO - Here we need to set multicast filters, but + // There are more than our limit... Hmm... + info("%s: set too many MC filters", net->name); + } else { + // TODO - Here we are supposed to set SOME of the multicast filters. + // I must learn how to do this... + //info("%s: set Rx mode", net->name); + } + + // Tell the kernel to start giving frames to us again. + netif_wake_queue(net); +} + +////////////////////////////////////////////////////////////////////////////// +// Routines used to parse out the Functional Descriptors ///////////////////// +////////////////////////////////////////////////////////////////////////////// + +static int parse_header_functional_descriptor( int *bFunctionLength, + int bDescriptorType, + int bDescriptorSubtype, + unsigned char *data, + ether_dev_t *ether_dev, + int *requirements ) +{ + // Check to make sure we haven't seen one of these already. + if ( (~*requirements) & REQ_HDR_FUNC_DESCR ) { + err( "Multiple Header Functional Descriptors found." ); + return -1; + } + + // Is it the right size??? + if (*bFunctionLength != 5) { + info( "Invalid length in Header Functional Descriptor" ); + // This is a hack to get around a particular device (NO NAMES) + // It has this function length set to the length of the + // whole class-specific descriptor + *bFunctionLength = 5; + } + + // Nothing extremely useful here. + // We'll keep it for posterity + ether_dev->bcdCDC = data[0] + (data[1] << 8); + dbg( "Found Header descriptor, CDC version %x", ether_dev->bcdCDC); + + // We've seen one of these + *requirements &= ~REQ_HDR_FUNC_DESCR; + + // It's all good. + return 0; +} + +static int parse_union_functional_descriptor( int *bFunctionLength, + int bDescriptorType, + int bDescriptorSubtype, + unsigned char *data, + ether_dev_t *ether_dev, + int *requirements ) +{ + // Check to make sure we haven't seen one of these already. + if ( (~*requirements) & REQ_UNION_FUNC_DESCR ) { + err( "Multiple Union Functional Descriptors found." ); + return -1; + } + + // Is it the right size? + if (*bFunctionLength != 5) { + // It is NOT the size we expected. + err( "Unsupported length in Union Functional Descriptor" ); + return -1; + } + + // Sanity check of sorts + if (ether_dev->comm_interface != data[0]) { + // This tells us that we are chasing the wrong comm + // interface or we are crazy or something else weird. + if (ether_dev->comm_interface == data[1]) { + info( "Probably broken Union descriptor, fudging data interface" ); + // We'll need this in a few microseconds, + // so guess here, and hope for the best + ether_dev->data_interface = data[0]; + } else { + err( "Union Functional Descriptor is broken beyond repair" ); + return -1; + } + } else{ // Descriptor is OK + // We'll need this in a few microseconds! + ether_dev->data_interface = data[1]; + } + + // We've seen one of these now. + *requirements &= ~REQ_UNION_FUNC_DESCR; + + // Done + return 0; +} + +static int parse_ethernet_functional_descriptor( int *bFunctionLength, + int bDescriptorType, + int bDescriptorSubtype, + unsigned char *data, + ether_dev_t *ether_dev, + int *requirements ) +{ + // Check to make sure we haven't seen one of these already. + if ( (~*requirements) & REQ_ETH_FUNC_DESCR ) { + err( "Multiple Ethernet Functional Descriptors found." ); + return -1; + } + + // Is it the right size? + if (*bFunctionLength != 13) { + err( "Invalid length in Ethernet Networking Functional Descriptor" ); + return -1; + } + + // Lots of goodies from this one. They are all important. + ether_dev->iMACAddress = data[0]; + ether_dev->bmEthernetStatistics = data[1] + (data[2] << 8) + (data[3] << 16) + (data[4] << 24); + ether_dev->wMaxSegmentSize = data[5] + (data[6] << 8); + ether_dev->wNumberMCFilters = (data[7] + (data[8] << 8)) & 0x00007FFF; + ether_dev->bNumberPowerFilters = data[9]; + + // We've seen one of these now. + *requirements &= ~REQ_ETH_FUNC_DESCR; + + // That's all she wrote. + return 0; +} + +static int parse_protocol_unit_functional_descriptor( int *bFunctionLength, + int bDescriptorType, + int bDescriptorSubtype, + unsigned char *data, + ether_dev_t *ether_dev, + int *requirements ) +{ + // There should only be one type if we are sane + if (bDescriptorType != CS_INTERFACE) { + info( "Invalid bDescriptorType found." ); + return -1; + } + + // The Subtype tells the tale. + switch (bDescriptorSubtype){ + case 0x00: // Header Functional Descriptor + return parse_header_functional_descriptor( bFunctionLength, + bDescriptorType, + bDescriptorSubtype, + data, + ether_dev, + requirements ); + break; + case 0x06: // Union Functional Descriptor + return parse_union_functional_descriptor( bFunctionLength, + bDescriptorType, + bDescriptorSubtype, + data, + ether_dev, + requirements ); + break; + case 0x0F: // Ethernet Networking Functional Descriptor + return parse_ethernet_functional_descriptor( bFunctionLength, + bDescriptorType, + bDescriptorSubtype, + data, + ether_dev, + requirements ); + break; + default: // We don't support this at this time... + // However that doesn't necessarily indicate an error. + dbg( "Unexpected header type %x:", bDescriptorSubtype ); + return 0; + } + // How did we get here??? + return -1; +} + +static int parse_ethernet_class_information( unsigned char *data, int length, ether_dev_t *ether_dev ) +{ + int loc = 0; + int rc; + int bFunctionLength; + int bDescriptorType; + int bDescriptorSubtype; + int requirements = REQUIREMENTS_TOTAL; + + // As long as there is something here, we will try to parse it + while (loc < length) { + // Length + bFunctionLength = data[loc]; + loc++; + + // Type + bDescriptorType = data[loc]; + loc++; + + // Subtype + bDescriptorSubtype = data[loc]; + loc++; + + // ship this off to be processed elsewhere. + rc = parse_protocol_unit_functional_descriptor( &bFunctionLength, + bDescriptorType, + bDescriptorSubtype, + &data[loc], + ether_dev, + &requirements ); + // Did it process okay? + if (rc) { + // Something was hosed somewhere. + // No need to continue; + err("Bad descriptor parsing: %x", rc ); + return -1; + } + // We have already taken three bytes. + loc += (bFunctionLength - 3); + } + // Check to see if we got everything we need. + if (requirements) { + // We missed some of the requirements... + err( "Not all required functional descriptors present 0x%08X", requirements ); + return -1; + } + // We got everything. + return 0; +} + +////////////////////////////////////////////////////////////////////////////// +// Routine to check for the existence of the Functional Descriptors ////////// +////////////////////////////////////////////////////////////////////////////// + +static int find_and_parse_ethernet_class_information( struct usb_device *device, ether_dev_t *ether_dev ) +{ + struct usb_config_descriptor *conf = NULL; + struct usb_interface *comm_intf_group = NULL; + struct usb_interface_descriptor *comm_intf = NULL; + int rc = -1; + // The assumption here is that find_ethernet_comm_interface + // and find_valid_configuration + // have already filled in the information about where to find + // the a valid commication interface. + + conf = &( device->config[ether_dev->configuration_num] ); + comm_intf_group = &( conf->interface[ether_dev->comm_interface] ); + comm_intf = &( comm_intf_group->altsetting[ether_dev->comm_interface_altset_num] ); + // Let's check and see if it has the extra information we need... + + if (comm_intf->extralen > 0) { + // This is where the information is SUPPOSED to be. + rc = parse_ethernet_class_information( comm_intf->extra, comm_intf->extralen, ether_dev ); + } else if (conf->extralen > 0) { + // This is a hack. The spec says it should be at the interface + // location checked above. However I have seen it here also. + // This is the same device that requires the functional descriptor hack above + warn( "Ethernet information found at device configuration. This is broken." ); + rc = parse_ethernet_class_information( conf->extra, conf->extralen, ether_dev ); + } else { + // I don't know where else to look. + warn( "No ethernet information found." ); + rc = -1; + } + return rc; +} + +////////////////////////////////////////////////////////////////////////////// +// Routines to verify the data interface ///////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +static int get_data_interface_endpoints( struct usb_device *device, ether_dev_t *ether_dev ) +{ + struct usb_config_descriptor *conf = NULL; + struct usb_interface *data_intf_group = NULL; + struct usb_interface_descriptor *data_intf = NULL; + + // Walk through and get to the data interface we are checking. + conf = &( device->config[ether_dev->configuration_num] ); + data_intf_group = &( conf->interface[ether_dev->data_interface] ); + data_intf = &( data_intf_group->altsetting[ether_dev->data_interface_altset_num_with_traffic] ); + + // Start out assuming we won't find anything we can use + ether_dev->data_ep_in = 0; + ether_dev->data_ep_out = 0; + + // If these are not BULK endpoints, we don't want them + if ( data_intf->endpoint[0].bmAttributes != 0x02 ) { + return -1; + } if ( data_intf->endpoint[1].bmAttributes != 0x02 ) { + return -1; + } + + // Check the first endpoint to see if it is IN or OUT + if ( data_intf->endpoint[0].bEndpointAddress & 0x80 ) { + // This endpoint is IN + ether_dev->data_ep_in = data_intf->endpoint[0].bEndpointAddress & 0x7F; + } else { + // This endpoint is OUT + ether_dev->data_ep_out = data_intf->endpoint[0].bEndpointAddress & 0x7F; + ether_dev->data_ep_out_size = data_intf->endpoint[0].wMaxPacketSize; + } + + // Check the second endpoint to see if it is IN or OUT + if ( data_intf->endpoint[1].bEndpointAddress & 0x80 ) { + // This endpoint is IN + ether_dev->data_ep_in = data_intf->endpoint[1].bEndpointAddress & 0x7F; + } else { + // This endpoint is OUT + ether_dev->data_ep_out = data_intf->endpoint[1].bEndpointAddress & 0x7F; + ether_dev->data_ep_out_size = data_intf->endpoint[1].wMaxPacketSize; + } + + // Now make sure we got both an IN and an OUT + if (ether_dev->data_ep_in && ether_dev->data_ep_out) { + // We did get both, we are in good shape... + info( "detected BULK OUT packets of size %d", ether_dev->data_ep_out_size ); + return 0; + } + return -1; +} + +static int verify_ethernet_data_interface( struct usb_device *device, ether_dev_t *ether_dev ) +{ + struct usb_config_descriptor *conf = NULL; + struct usb_interface *data_intf_group = NULL; + struct usb_interface_descriptor *data_intf = NULL; + int rc = -1; + int status; + int altset_num; + + // The assumption here is that parse_ethernet_class_information() + // and find_valid_configuration() + // have already filled in the information about where to find + // a data interface + conf = &( device->config[ether_dev->configuration_num] ); + data_intf_group = &( conf->interface[ether_dev->data_interface] ); + + // start out assuming we won't find what we are looking for. + ether_dev->data_interface_altset_num_with_traffic = -1; + ether_dev->data_bAlternateSetting_with_traffic = -1; + ether_dev->data_interface_altset_num_without_traffic = -1; + ether_dev->data_bAlternateSetting_without_traffic = -1; + + // Walk through every possible setting for this interface until + // we find what makes us happy. + for ( altset_num = 0; altset_num < data_intf_group->num_altsetting; altset_num++ ) { + data_intf = &( data_intf_group->altsetting[altset_num] ); + + // Is this a data interface we like? + if ( ( data_intf->bInterfaceClass == 0x0A ) + && ( data_intf->bInterfaceSubClass == 0x00 ) + && ( data_intf->bInterfaceProtocol == 0x00 ) ) { + if ( data_intf->bNumEndpoints == 2 ) { + // We are required to have one of these. + // An interface with 2 endpoints to send Ethernet traffic back and forth + // It actually may be possible that the device might only + // communicate in a vendor specific manner. + // That would not be very nice. + // We can add that one later. + ether_dev->data_bInterfaceNumber = data_intf->bInterfaceNumber; + ether_dev->data_interface_altset_num_with_traffic = altset_num; + ether_dev->data_bAlternateSetting_with_traffic = data_intf->bAlternateSetting; + status = get_data_interface_endpoints( device, ether_dev ); + if (!status) { + rc = 0; + } + } + if ( data_intf->bNumEndpoints == 0 ) { + // According to the spec we are SUPPOSED to have one of these + // In fact the device is supposed to come up in this state. + // However, I have seen a device that did not have such an interface. + // So it must be just optional for our driver... + ether_dev->data_bInterfaceNumber = data_intf->bInterfaceNumber; + ether_dev->data_interface_altset_num_without_traffic = altset_num; + ether_dev->data_bAlternateSetting_without_traffic = data_intf->bAlternateSetting; + } + } + } + return rc; +} + +////////////////////////////////////////////////////////////////////////////// +// Routine to find a communication interface ///////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +static int find_ethernet_comm_interface( struct usb_device *device, ether_dev_t *ether_dev ) +{ + struct usb_config_descriptor *conf = NULL; + struct usb_interface *comm_intf_group = NULL; + struct usb_interface_descriptor *comm_intf = NULL; + int intf_num; + int altset_num; + int rc; + + conf = &( device->config[ether_dev->configuration_num] ); + + // We need to check and see if any of these interfaces are something we want. + // Walk through each interface one at a time + for ( intf_num = 0; intf_num < conf->bNumInterfaces; intf_num++ ) { + comm_intf_group = &( conf->interface[intf_num] ); + // Now for each of those interfaces, check every possible + // alternate setting. + for ( altset_num = 0; altset_num < comm_intf_group->num_altsetting; altset_num++ ) { + comm_intf = &( comm_intf_group->altsetting[altset_num] ); + + // Is this a communication class of interface of the + // ethernet subclass variety. + if ( ( comm_intf->bInterfaceClass == 0x02 ) + && ( comm_intf->bInterfaceSubClass == 0x06 ) + && ( comm_intf->bInterfaceProtocol == 0x00 ) ) { + if ( comm_intf->bNumEndpoints == 1 ) { + // Good, we found one, we will try this one + // Fill in the structure... + ether_dev->comm_interface = intf_num; + ether_dev->comm_bInterfaceNumber = comm_intf->bInterfaceNumber; + ether_dev->comm_interface_altset_num = altset_num; + ether_dev->comm_bAlternateSetting = comm_intf->bAlternateSetting; + + // Look for the Ethernet Functional Descriptors + rc = find_and_parse_ethernet_class_information( device, ether_dev ); + if (rc) { + // Nope this was no good after all. + continue; + } + + // Check that we really can talk to the data + // interface + // This includes # of endpoints, protocols, + // etc. + rc = verify_ethernet_data_interface( device, ether_dev ); + if (rc) { + // We got something we didn't like + continue; + } + // This communication interface seems to give us everything + // we require. We have all the ethernet info we need. + // Let's get out of here and go home right now. + return 0; + } else { + // bNumEndPoints != 1 + // We found an interface that had the wrong number of + // endpoints but would have otherwise been okay + } // end bNumEndpoints check. + } // end interface specifics check. + } // end for altset_num + } // end for intf_num + return -1; +} + +////////////////////////////////////////////////////////////////////////////// +// Routine to go through all configurations and find one that //////////////// +// is an Ethernet Networking Device ////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +static int find_valid_configuration( struct usb_device *device, ether_dev_t *ether_dev ) +{ + struct usb_config_descriptor *conf = NULL; + int conf_num; + int rc; + + // We will try each and every possible configuration + for ( conf_num = 0; conf_num < device->descriptor.bNumConfigurations; conf_num++ ) { + conf = &( device->config[conf_num] ); + + // Our first requirement : 2 interfaces + if ( conf->bNumInterfaces != 2 ) { + // I currently don't know how to handle devices with any number of interfaces + // other than 2. + continue; + } + + // This one passed our first check, fill in some + // useful data + ether_dev->configuration_num = conf_num; + ether_dev->bConfigurationValue = conf->bConfigurationValue; + + // Now run it through the ringers and see what comes + // out the other side. + rc = find_ethernet_comm_interface( device, ether_dev ); + + // Check if we found an ethernet Communcation Device + if ( !rc ) { + // We found one. + return 0; + } + } + // None of the configurations suited us. + return -1; +} + +////////////////////////////////////////////////////////////////////////////// +// Routine that checks a given configuration to see if any driver //////////// +// has claimed any of the devices interfaces ///////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +static int check_for_claimed_interfaces( struct usb_config_descriptor *config ) +{ + struct usb_interface *comm_intf_group; + int intf_num; + + // Go through all the interfaces and make sure none are + // claimed by anybody else. + for ( intf_num = 0; intf_num < config->bNumInterfaces; intf_num++ ) { + comm_intf_group = &( config->interface[intf_num] ); + if ( usb_interface_claimed( comm_intf_group ) ) { + // Somebody has beat us to this guy. + // We can't change the configuration out from underneath of whoever + // is using this device, so we will go ahead and give up. + return -1; + } + } + // We made it all the way through. + // I guess no one has claimed any of these interfaces. + return 0; +} + +////////////////////////////////////////////////////////////////////////////// +// Routines to ask for and set the kernel network interface's MAC address //// +// Used by driver's probe routine //////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +static inline unsigned char hex2dec( unsigned char digit ) +{ + // Is there a standard way to do this??? + // I have written this code TOO MANY times. + if ( (digit >= '0') && (digit <= '9') ) { + return (digit - '0'); + } + if ( (digit >= 'a') && (digit <= 'f') ) { + return (digit - 'a' + 10); + } + if ( (digit >= 'A') && (digit <= 'F') ) { + return (digit - 'A' + 10); + } + return 0; +} + +static void set_ethernet_addr( ether_dev_t *ether_dev ) +{ + unsigned char mac_addr[6]; + int i; + int len; + unsigned char buffer[13]; + + // Let's assume we don't get anything... + mac_addr[0] = 0x00; + mac_addr[1] = 0x00; + mac_addr[2] = 0x00; + mac_addr[3] = 0x00; + mac_addr[4] = 0x00; + mac_addr[5] = 0x00; + + // Let's ask the device... + len = usb_string(ether_dev->usb, ether_dev->iMACAddress, buffer, 13); + + // Sanity check! + if (len != 12) { + // You gotta love failing sanity checks + err("Attempting to get MAC address returned %d bytes", len); + return; + } + + // Fill in the mac_addr + for (i = 0; i < 6; i++) { + mac_addr[i] = ( hex2dec( buffer[2 * i] ) << 4 ) + hex2dec( buffer[2 * i + 1] ); + } + + // Now copy it over to the kernel's network driver. + memcpy( ether_dev->net->dev_addr, mac_addr, sizeof(mac_addr) ); +} + +////////////////////////////////////////////////////////////////////////////// +// Routine to print to syslog information about the driver /////////////////// +// Used by driver's probe routine //////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +void log_device_info(ether_dev_t *ether_dev) +{ + int len; + int string_num; + unsigned char manu[256]; + unsigned char prod[256]; + unsigned char sern[256]; + unsigned char *mac_addr; + + // Default empty strings in case we don't find a real one + manu[0] = 0x00; + prod[0] = 0x00; + sern[0] = 0x00; + + // Try to get the device Manufacturer + string_num = ether_dev->usb->descriptor.iManufacturer; + if (string_num) { + // Put it into its buffer + len = usb_string(ether_dev->usb, string_num, manu, 255); + // Just to be safe + manu[len] = 0x00; + } + + // Try to get the device Product Name + string_num = ether_dev->usb->descriptor.iProduct; + if (string_num) { + // Put it into its buffer + len = usb_string(ether_dev->usb, string_num, prod, 255); + // Just to be safe + prod[len] = 0x00; + } + + // Try to get the device Serial Number + string_num = ether_dev->usb->descriptor.iSerialNumber; + if (string_num) { + // Put it into its buffer + len = usb_string(ether_dev->usb, string_num, sern, 255); + // Just to be safe + sern[len] = 0x00; + } + + // This makes it easier for us to print + mac_addr = ether_dev->net->dev_addr; + + // Now send everything we found to the syslog + info( "%s: %s %s %s %02X:%02X:%02X:%02X:%02X:%02X", + ether_dev->net->name, manu, prod, sern, mac_addr[0], + mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], + mac_addr[5] ); +} + +/* Forward declaration */ +static struct usb_driver CDCEther_driver ; + +////////////////////////////////////////////////////////////////////////////// +// Module's probe routine //////////////////////////////////////////////////// +// claims interfaces if they are for an Ethernet CDC ///////////////////////// +////////////////////////////////////////////////////////////////////////////// + +static void * CDCEther_probe( struct usb_device *usb, unsigned int ifnum, + const struct usb_device_id *id) +{ + struct net_device *net; + ether_dev_t *ether_dev; + int rc; + + // First we should check the active configuration to see if + // any other driver has claimed any of the interfaces. + if ( check_for_claimed_interfaces( usb->actconfig ) ) { + // Someone has already put there grubby paws on this device. + // We don't want it now... + return NULL; + } + + // We might be finding a device we can use. + // We all go ahead and allocate our storage space. + // We need to because we have to start filling in the data that + // we are going to need later. + if(!(ether_dev = kmalloc(sizeof(ether_dev_t), GFP_KERNEL))) { + err("out of memory allocating device structure"); + return NULL; + } + + // Zero everything out. + memset(ether_dev, 0, sizeof(ether_dev_t)); + + // Let's see if we can find a configuration we can use. + rc = find_valid_configuration( usb, ether_dev ); + if (rc) { + // Nope we couldn't find one we liked. + // This device was not meant for us to control. + kfree( ether_dev ); + return NULL; + } + + // Now that we FOUND a configuration. let's try to make the + // device go into it. + if ( usb_set_configuration( usb, ether_dev->bConfigurationValue ) ) { + err("usb_set_configuration() failed"); + kfree( ether_dev ); + return NULL; + } + + // Now set the communication interface up as required. + if (usb_set_interface(usb, ether_dev->comm_bInterfaceNumber, ether_dev->comm_bAlternateSetting)) { + err("usb_set_interface() failed"); + kfree( ether_dev ); + return NULL; + } + + // Only turn traffic on right now if we must... + if (ether_dev->data_interface_altset_num_without_traffic >= 0) { + // We found an alternate setting for the data + // interface that allows us to turn off traffic. + // We should use it. + if (usb_set_interface( usb, + ether_dev->data_bInterfaceNumber, + ether_dev->data_bAlternateSetting_without_traffic)) { + err("usb_set_interface() failed"); + kfree( ether_dev ); + return NULL; + } + } else { + // We didn't find an alternate setting for the data + // interface that would let us turn off traffic. + // Oh well, let's go ahead and do what we must... + if (usb_set_interface( usb, + ether_dev->data_bInterfaceNumber, + ether_dev->data_bAlternateSetting_with_traffic)) { + err("usb_set_interface() failed"); + kfree( ether_dev ); + return NULL; + } + } + + // Now we need to get a kernel Ethernet interface. + net = init_etherdev( NULL, 0 ); + if ( !net ) { + // Hmm... The kernel is not sharing today... + // Fine, we didn't want it anyway... + err( "Unable to initialize ethernet device" ); + kfree( ether_dev ); + return NULL; + } + + // Now that we have an ethernet device, let's set it up + // (And I don't mean "set [it] up the bomb".) + net->priv = ether_dev; + net->open = CDCEther_open; + net->stop = CDCEther_close; + net->watchdog_timeo = CDC_ETHER_TX_TIMEOUT; + net->tx_timeout = CDCEther_tx_timeout; // TX timeout function + net->do_ioctl = CDCEther_ioctl; + net->hard_start_xmit = CDCEther_start_xmit; + net->set_multicast_list = CDCEther_set_multicast; + net->get_stats = CDCEther_netdev_stats; + net->mtu = ether_dev->wMaxSegmentSize - 14; + + // We'll keep track of this information for later... + ether_dev->usb = usb; + ether_dev->net = net; + + // and don't forget the MAC address. + set_ethernet_addr( ether_dev ); + + // Send a message to syslog about what we are handling + log_device_info( ether_dev ); + + // I claim this interface to be a CDC Ethernet Networking device + usb_driver_claim_interface( &CDCEther_driver, + &(usb->config[ether_dev->configuration_num].interface[ether_dev->comm_interface]), + ether_dev ); + // I claim this interface to be a CDC Ethernet Networking device + usb_driver_claim_interface( &CDCEther_driver, + &(usb->config[ether_dev->configuration_num].interface[ether_dev->data_interface]), + ether_dev ); + + // Does this REALLY do anything??? + usb_inc_dev_use( usb ); + + // TODO - last minute HACK + ether_dev->comm_ep_in = 5; + + // Okay, we are finally done... + return NULL; +} + + +////////////////////////////////////////////////////////////////////////////// +// Module's disconnect routine /////////////////////////////////////////////// +// Called when the driver is unloaded or the device is unplugged ///////////// +// (Whichever happens first assuming the driver suceeded at its probe) /////// +////////////////////////////////////////////////////////////////////////////// + +static void CDCEther_disconnect( struct usb_device *usb, void *ptr ) +{ + ether_dev_t *ether_dev = ptr; + + // Sanity check!!! + if ( !ether_dev || !ether_dev->usb ) { + // We failed. We are insane!!! + warn("unregistering non-existant device"); + return; + } + + // Make sure we fail the sanity check if we try this again. + ether_dev->usb = NULL; + + // It is possible that this function is called before + // the "close" function. + // This tells the close function we are already disconnected + ether_dev->flags |= CDC_ETHER_UNPLUG; + + // We don't need the network device any more + unregister_netdev( ether_dev->net ); + + // For sanity checks + ether_dev->net = NULL; + + // I ask again, does this do anything??? + usb_dec_dev_use( usb ); + + // We are done with this interface + usb_driver_release_interface( &CDCEther_driver, + &(usb->config[ether_dev->configuration_num].interface[ether_dev->comm_interface]) ); + + // We are done with this interface too + usb_driver_release_interface( &CDCEther_driver, + &(usb->config[ether_dev->configuration_num].interface[ether_dev->data_interface]) ); + + // No more tied up kernel memory + kfree( ether_dev ); + + // This does no good, but it looks nice! + ether_dev = NULL; +} + +////////////////////////////////////////////////////////////////////////////// +// Driver info /////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +static struct usb_driver CDCEther_driver = { + name: "CDCEther", + probe: CDCEther_probe, + disconnect: CDCEther_disconnect, + id_table: CDCEther_ids, +}; + +////////////////////////////////////////////////////////////////////////////// +// init and exit routines called when driver is installed and uninstalled //// +////////////////////////////////////////////////////////////////////////////// + +int __init CDCEther_init(void) +{ + info( "%s", version ); + return usb_register( &CDCEther_driver ); +} + +void __exit CDCEther_exit(void) +{ + usb_deregister( &CDCEther_driver ); +} + +////////////////////////////////////////////////////////////////////////////// +// Module info /////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +module_init( CDCEther_init ); +module_exit( CDCEther_exit ); + +MODULE_AUTHOR("Brad Hards and another"); +MODULE_DESCRIPTION("USB CDC Ethernet driver"); + +MODULE_DEVICE_TABLE (usb, CDCEther_ids); + +////////////////////////////////////////////////////////////////////////////// +// End of file /////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// diff -u --recursive --new-file v2.4.8/linux/drivers/usb/CDCEther.h linux/drivers/usb/CDCEther.h --- v2.4.8/linux/drivers/usb/CDCEther.h Wed Dec 31 16:00:00 1969 +++ linux/drivers/usb/CDCEther.h Sun Aug 12 17:37:53 2001 @@ -0,0 +1,88 @@ +// Portions of this file taken from +// Petko Manolov - Petkan (petkan@dce.bg) +// from his driver pegasus.h + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#define CS_INTERFACE 0x24 + +#define CDC_ETHER_MAX_MTU 1536 + +#define CDC_ETHER_PRESENT 0x00000001 +#define CDC_ETHER_RUNNING 0x00000002 +#define CDC_ETHER_TX_BUSY 0x00000004 +#define CDC_ETHER_RX_BUSY 0x00000008 +#define CDC_ETHER_UNPLUG 0x00000040 + +#define CDC_ETHER_TX_TIMEOUT (HZ*10) + +#define TX_UNDERRUN 0x80 +#define EXCESSIVE_COL 0x40 +#define LATE_COL 0x20 +#define NO_CARRIER 0x10 +#define LOSS_CARRIER 0x08 +#define JABBER_TIMEOUT 0x04 + +#define CDC_ETHER_REQT_READ 0xc0 +#define CDC_ETHER_REQT_WRITE 0x40 +#define CDC_ETHER_REQ_GET_REGS 0xf0 +#define CDC_ETHER_REQ_SET_REGS 0xf1 +#define CDC_ETHER_REQ_SET_REG PIPERIDER_REQ_SET_REGS +#define ALIGN(x) x __attribute__((aligned(L1_CACHE_BYTES))) + +typedef struct _ether_dev_t { + struct usb_device *usb; + struct net_device *net; + struct net_device_stats stats; + unsigned flags; + int configuration_num; + int bConfigurationValue; + int comm_interface; + int comm_bInterfaceNumber; + int comm_interface_altset_num; + int comm_bAlternateSetting; + int comm_ep_in; + int data_interface; + int data_bInterfaceNumber; + int data_interface_altset_num_with_traffic; + int data_bAlternateSetting_with_traffic; + int data_interface_altset_num_without_traffic; + int data_bAlternateSetting_without_traffic; + int data_ep_in; + int data_ep_out; + int data_ep_out_size; + __u16 bcdCDC; + __u8 iMACAddress; + __u32 bmEthernetStatistics; + __u16 wMaxSegmentSize; + __u16 wNumberMCFilters; + __u8 bNumberPowerFilters; + int intr_interval; + struct urb rx_urb, tx_urb, intr_urb; + unsigned char ALIGN(rx_buff[CDC_ETHER_MAX_MTU]); + unsigned char ALIGN(tx_buff[CDC_ETHER_MAX_MTU]); + unsigned char ALIGN(intr_buff[8]); +} ether_dev_t; + +#define REQ_HDR_FUNC_DESCR 0x0001 +#define REQ_UNION_FUNC_DESCR 0x0002 +#define REQ_ETH_FUNC_DESCR 0x0004 +#define REQUIREMENTS_TOTAL 0x0007 + + + diff -u --recursive --new-file v2.4.8/linux/drivers/usb/dabusb.c linux/drivers/usb/dabusb.c --- v2.4.8/linux/drivers/usb/dabusb.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/usb/dabusb.c Sun Aug 12 10:38:48 2001 @@ -422,11 +422,6 @@ return ret; } -static loff_t dabusb_llseek (struct file *file, loff_t offset, int origin) -{ - return -ESPIPE; -} - static int dabusb_stop (pdabusb_t s) { dbg("dabusb_stop"); @@ -705,7 +700,7 @@ static struct file_operations dabusb_fops = { owner: THIS_MODULE, - llseek: dabusb_llseek, + llseek: no_llseek, read: dabusb_read, ioctl: dabusb_ioctl, open: dabusb_open, diff -u --recursive --new-file v2.4.8/linux/drivers/usb/devio.c linux/drivers/usb/devio.c --- v2.4.8/linux/drivers/usb/devio.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/usb/devio.c Wed Aug 15 01:22:16 2001 @@ -1082,7 +1082,7 @@ if (retval == 0) /* ifno might usefully be passed ... */ retval = ifp->driver->ioctl (ps->dev, ctrl.ioctl_code, buf); - /* size = min (size, retval)? */ + /* size = min(int, size, retval)? */ } /* cleanup and return */ diff -u --recursive --new-file v2.4.8/linux/drivers/usb/hub.c linux/drivers/usb/hub.c --- v2.4.8/linux/drivers/usb/hub.c Wed Apr 25 14:10:47 2001 +++ linux/drivers/usb/hub.c Sun Aug 12 10:52:29 2001 @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -36,7 +37,7 @@ static DECLARE_WAIT_QUEUE_HEAD(khubd_wait); static int khubd_pid = 0; /* PID of khubd */ -static DECLARE_MUTEX_LOCKED(khubd_exited); +static DECLARE_COMPLETION(khubd_exited); static int usb_get_hub_descriptor(struct usb_device *dev, void *data, int size) { @@ -781,7 +782,7 @@ dbg("usb_hub_thread exiting"); - up_and_exit(&khubd_exited, 0); + complete_and_exit(&khubd_exited, 0); } static struct usb_device_id hub_id_table [] = { @@ -834,7 +835,7 @@ /* Kill the thread */ ret = kill_proc(khubd_pid, SIGTERM, 1); - down(&khubd_exited); + wait_for_completion(&khubd_exited); /* * Hub resources are freed for us by usb_deregister. It calls diff -u --recursive --new-file v2.4.8/linux/drivers/usb/kaweth.c linux/drivers/usb/kaweth.c --- v2.4.8/linux/drivers/usb/kaweth.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/usb/kaweth.c Sun Aug 12 17:37:53 2001 @@ -0,0 +1,1054 @@ +/**************************************************************** + * + * kaweth.c - driver for KL5KUSB101 based USB->Ethernet + * + * (c) 2000 Interlan Communications + * (c) 2000 Stephane Alnet + * (C) 2001 Brad Hards + * + * Original author: The Zapman + * Inspired by, and much credit goes to Michael Rothwell + * for the test equipment, help, and patience + * Based off of (and with thanks to) Petko Manolov's pegaus.c driver. + * Also many thanks to Joel Silverman and Ed Surprenant at Kawasaki + * for providing the firmware and driver resources. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + ****************************************************************/ + +/* TODO: + * Fix in_interrupt() problem + * Develop test procedures for USB net interfaces + * Run test procedures + * Fix bugs from previous two steps + * Snoop other OSs for any tricks we're not doing + * SMP locking + * Reduce arbitrary timeouts + * Smart multicast support + * Temporary MAC change support + * Tunable SOFs parameter - ioctl()? + * Ethernet stats collection + * Code formatting improvements + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEBUG + +#ifdef DEBUG +#define kaweth_dbg(format, arg...) printk(KERN_DEBUG __FILE__ ": " format "\n" ,##arg) +#else +#define kaweth_dbg(format, arg...) do {} while (0) +#endif +#define kaweth_err(format, arg...) printk(KERN_ERR __FILE__ ": " format "\n" ,##arg) +#define kaweth_info(format, arg...) printk(KERN_INFO __FILE__ ": " format "\n" , ##arg) +#define kaweth_warn(format, arg...) printk(KERN_WARNING __FILE__ ": " format "\n" , ##arg) + + +#include "kawethfw.h" + +#define KAWETH_MTU 1514 +#define KAWETH_BUF_SIZE 1664 +#define KAWETH_TX_TIMEOUT (5 * HZ) +#define KAWETH_FIRMWARE_BUF_SIZE 4096 +#define KAWETH_CONTROL_TIMEOUT (30 * HZ) + +#define KAWETH_STATUS_BROKEN 0x0000001 +#define KAWETH_STATUS_CLOSING 0x0000002 + +#define KAWETH_PACKET_FILTER_PROMISCUOUS 0x01 +#define KAWETH_PACKET_FILTER_ALL_MULTICAST 0x02 +#define KAWETH_PACKET_FILTER_DIRECTED 0x04 +#define KAWETH_PACKET_FILTER_BROADCAST 0x08 +#define KAWETH_PACKET_FILTER_MULTICAST 0x10 + +/* Table 7 */ +#define KAWETH_COMMAND_GET_ETHERNET_DESC 0x00 +#define KAWETH_COMMAND_MULTICAST_FILTERS 0x01 +#define KAWETH_COMMAND_SET_PACKET_FILTER 0x02 +#define KAWETH_COMMAND_STATISTICS 0x03 +#define KAWETH_COMMAND_SET_TEMP_MAC 0x06 +#define KAWETH_COMMAND_GET_TEMP_MAC 0x07 +#define KAWETH_COMMAND_SET_URB_SIZE 0x08 +#define KAWETH_COMMAND_SET_SOFS_WAIT 0x09 +#define KAWETH_COMMAND_SCAN 0xFF + +#define KAWETH_SOFS_TO_WAIT 0x05 + + +MODULE_AUTHOR("Michael Zappe , Stephane Alnet and Brad Hards "); +MODULE_DESCRIPTION("KL5USB101 USB Ethernet driver"); + +static void *kaweth_probe( + struct usb_device *dev, /* the device */ + unsigned ifnum, /* what interface */ + const struct usb_device_id *id /* from id_table */ + ); +static void kaweth_disconnect(struct usb_device *dev, void *ptr); +int kaweth_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe, + devrequest *cmd, void *data, int len, + int timeout); + +/**************************************************************** + * usb_device_id + ****************************************************************/ +static struct usb_device_id usb_klsi_table[] = { + { USB_DEVICE(0x03e8, 0x0008) }, /* AOX Endpoints USB Ethernet */ + { USB_DEVICE(0x04bb, 0x0901) }, /* I-O DATA USB-ET/T */ + { USB_DEVICE(0x0506, 0x03e8) }, /* 3Com 3C19250 */ + { USB_DEVICE(0x0557, 0x2002) }, /* ATEN USB Ethernet */ + { USB_DEVICE(0x0557, 0x4000) }, /* D-Link DSB-650C */ + { USB_DEVICE(0x0565, 0x0002) }, /* Peracom Enet */ + { USB_DEVICE(0x0565, 0x0005) }, /* Peracom Enet2 */ + { USB_DEVICE(0x05e9, 0x0008) }, /* KLSI KL5KUSB101B */ + { USB_DEVICE(0x05e9, 0x0009) }, /* KLSI KL5KUSB101B (Board change) */ + { USB_DEVICE(0x066b, 0x2202) }, /* Linksys USB10T */ + { USB_DEVICE(0x06e1, 0x0008) }, /* ADS USB-10BT */ + { USB_DEVICE(0x06e1, 0x0009) }, /* ADS USB-10BT */ + { USB_DEVICE(0x0707, 0x0100) }, /* SMC 2202USB */ + { USB_DEVICE(0x07aa, 0x0001) }, /* Correga K.K. */ + { USB_DEVICE(0x07b8, 0x4000) }, /* D-Link DU-E10 */ + { USB_DEVICE(0x0846, 0x1001) }, /* NetGear EA-101 */ + { USB_DEVICE(0x0846, 0x1002) }, /* NetGear EA-101 */ + { USB_DEVICE(0x085a, 0x0008) }, /* PortGear Ethernet Adapter */ + { USB_DEVICE(0x085a, 0x0009) }, /* PortGear Ethernet Adapter */ + { USB_DEVICE(0x087d, 0x5704) }, /* Jaton USB Ethernet Device Adapter */ + { USB_DEVICE(0x0951, 0x0008) }, /* Kingston Technology USB Ethernet Adapter */ + { USB_DEVICE(0x095a, 0x3003) }, /* Portsmith Express Ethernet Adapter */ + { USB_DEVICE(0x10bd, 0x1427) }, /* ASANTE USB To Ethernet Adapter */ + { USB_DEVICE(0x1342, 0x0204) }, /* Mobility USB-Ethernet Adapter */ + { USB_DEVICE(0x13d2, 0x0400) }, /* Shark Pocket Adapter */ + { USB_DEVICE(0x1645, 0x0005) }, /* Entrega E45 */ + { USB_DEVICE(0x1645, 0x0008) }, /* Entrega USB Ethernet Adapter */ + { USB_DEVICE(0x1645, 0x8005) }, /* PortGear Ethernet Adapter */ + { USB_DEVICE(0x2001, 0x4000) }, /* D-link DSB-650C */ + {} /* Null terminator */ +}; + +MODULE_DEVICE_TABLE (usb, usb_klsi_table); + +/**************************************************************** + * kaweth_driver + ****************************************************************/ +static struct usb_driver kaweth_driver = { + name: "kaweth", + probe: kaweth_probe, + disconnect: kaweth_disconnect, + id_table: usb_klsi_table, +}; + +typedef __u8 eth_addr_t[6]; + +/**************************************************************** + * usb_eth_dev + ****************************************************************/ +struct usb_eth_dev { + char *name; + __u16 vendor; + __u16 device; + void *pdata; +}; + +/**************************************************************** + * kaweth_ethernet_configuration + * Refer Table 8 + ****************************************************************/ +struct kaweth_ethernet_configuration +{ + __u8 size; + __u8 reserved1; + __u8 reserved2; + eth_addr_t hw_addr; + __u32 statistics_mask; + __u16 segment_size; + __u16 max_multicast_filters; + __u8 reserved3; +} __attribute__ ((packed)); + +/**************************************************************** + * kaweth_device + ****************************************************************/ +struct kaweth_device +{ + spinlock_t device_lock; + + __u32 status; + + struct usb_device *dev; + struct net_device *net; + wait_queue_head_t control_wait; + + struct urb *rx_urb; + struct urb *tx_urb; + + __u8 firmware_buf[KAWETH_FIRMWARE_BUF_SIZE]; + __u8 tx_buf[KAWETH_BUF_SIZE]; + __u8 rx_buf[KAWETH_BUF_SIZE]; + __u16 packet_filter_bitmap; + + struct kaweth_ethernet_configuration configuration; + + struct net_device_stats stats; +} __attribute__ ((packed)); + + +/**************************************************************** + * kaweth_control + ****************************************************************/ +static int kaweth_control(struct kaweth_device *kaweth, + unsigned int pipe, + __u8 request, + __u8 requesttype, + __u16 value, + __u16 index, + void *data, + __u16 size, + int timeout) +{ + devrequest *dr; + + kaweth_dbg("kaweth_control()"); + + if(in_interrupt()) { + kaweth_dbg("in_interrupt()"); + return -EBUSY; + } + + dr = kmalloc(sizeof(devrequest), + in_interrupt() ? GFP_ATOMIC : GFP_KERNEL); + + if(!dr) + { + kaweth_dbg("kmalloc() failed"); + return -ENOMEM; + } + + dr->requesttype = requesttype; + dr->request = request; + dr->value = value; + dr->index = index; + dr->length = size; + + return kaweth_internal_control_msg(kaweth->dev, + pipe, + dr, + data, + size, + timeout); +} + +/**************************************************************** + * kaweth_read_configuration + ****************************************************************/ +static int kaweth_read_configuration(struct kaweth_device *kaweth) +{ + int retval; + + kaweth_dbg("Reading kaweth configuration"); + + retval = kaweth_control(kaweth, + usb_rcvctrlpipe(kaweth->dev, 0), + KAWETH_COMMAND_GET_ETHERNET_DESC, + USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE, + 0, + 0, + (void *)&kaweth->configuration, + sizeof(kaweth->configuration), + KAWETH_CONTROL_TIMEOUT); + + return retval; +} + +/**************************************************************** + * kaweth_set_urb_size + ****************************************************************/ +static int kaweth_set_urb_size(struct kaweth_device *kaweth, __u16 urb_size) +{ + int retval; + + kaweth_dbg("Setting URB size to %d", (unsigned)urb_size); + + retval = kaweth_control(kaweth, + usb_sndctrlpipe(kaweth->dev, 0), + KAWETH_COMMAND_SET_URB_SIZE, + USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE, + urb_size, + 0, + (void *)&kaweth->firmware_buf, + 0, + KAWETH_CONTROL_TIMEOUT); + + return retval; +} + +/**************************************************************** + * kaweth_set_sofs_wait + ****************************************************************/ +static int kaweth_set_sofs_wait(struct kaweth_device *kaweth, __u16 sofs_wait) +{ + int retval; + + kaweth_dbg("Set SOFS wait to %d", (unsigned)sofs_wait); + + retval = kaweth_control(kaweth, + usb_sndctrlpipe(kaweth->dev, 0), + KAWETH_COMMAND_SET_SOFS_WAIT, + USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE, + sofs_wait, + 0, + (void *)&kaweth->firmware_buf, + 0, + KAWETH_CONTROL_TIMEOUT); + + return retval; +} + +/**************************************************************** + * kaweth_set_receive_filter + ****************************************************************/ +static int kaweth_set_receive_filter(struct kaweth_device *kaweth, + __u16 receive_filter) +{ + int retval; + + kaweth_dbg("Set receive filter to %d", (unsigned)receive_filter); + + retval = kaweth_control(kaweth, + usb_sndctrlpipe(kaweth->dev, 0), + KAWETH_COMMAND_SET_PACKET_FILTER, + USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE, + receive_filter, + 0, + (void *)&kaweth->firmware_buf, + 0, + KAWETH_CONTROL_TIMEOUT); + + return retval; +} + +/**************************************************************** + * kaweth_download_firmware + ****************************************************************/ +static int kaweth_download_firmware(struct kaweth_device *kaweth, + __u8 *data, + __u16 data_len, + __u8 interrupt, + __u8 type) +{ + if(data_len > KAWETH_FIRMWARE_BUF_SIZE) { + kaweth_err("Firmware too big: %d", data_len); + return -ENOSPC; + } + + memcpy(kaweth->firmware_buf, data, data_len); + + kaweth->firmware_buf[2] = (data_len & 0xFF) - 7; + kaweth->firmware_buf[3] = data_len >> 8; + kaweth->firmware_buf[4] = type; + kaweth->firmware_buf[5] = interrupt; + + kaweth_dbg("Downloading firmware at %x to kaweth device at %x", + (int)data, + (int)kaweth); + kaweth_dbg("Firmware length: %d", data_len); + + return kaweth_control(kaweth, + usb_sndctrlpipe(kaweth->dev, 0), + KAWETH_COMMAND_SCAN, + USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE, + 0, + 0, + (void *)&kaweth->firmware_buf, + data_len, + KAWETH_CONTROL_TIMEOUT); +} + +/**************************************************************** + * kaweth_trigger_firmware + ****************************************************************/ +static int kaweth_trigger_firmware(struct kaweth_device *kaweth, + __u8 interrupt) +{ + kaweth->firmware_buf[0] = 0xB6; + kaweth->firmware_buf[1] = 0xC3; + kaweth->firmware_buf[2] = 0x01; + kaweth->firmware_buf[3] = 0x00; + kaweth->firmware_buf[4] = 0x06; + kaweth->firmware_buf[5] = interrupt; + kaweth->firmware_buf[6] = 0x00; + kaweth->firmware_buf[7] = 0x00; + + kaweth_dbg("Triggering firmware"); + + return kaweth_control(kaweth, + usb_sndctrlpipe(kaweth->dev, 0), + KAWETH_COMMAND_SCAN, + USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE, + 0, + 0, + (void *)&kaweth->firmware_buf, + 8, + KAWETH_CONTROL_TIMEOUT); +} + +/**************************************************************** + * kaweth_reset + ****************************************************************/ +static int kaweth_reset(struct kaweth_device *kaweth) +{ + int result; + + kaweth_dbg("kaweth_reset(%p)", kaweth); + result = kaweth_control(kaweth, + usb_sndctrlpipe(kaweth->dev, 0), + USB_REQ_SET_CONFIGURATION, + 0, + kaweth->dev->config[0].bConfigurationValue, + 0, + NULL, + 0, + KAWETH_CONTROL_TIMEOUT); + + udelay(10000); + + kaweth_dbg("kaweth_reset() returns %d.",result); + + return result; +} + +static void kaweth_usb_receive(struct urb *); + +/**************************************************************** + * kaweth_resubmit_rx_urb + ****************************************************************/ +static inline void kaweth_resubmit_rx_urb(struct kaweth_device *kaweth) +{ + int result; + + memset(kaweth->rx_urb, 0, sizeof(*kaweth->rx_urb)); + + FILL_BULK_URB(kaweth->rx_urb, + kaweth->dev, + usb_rcvbulkpipe(kaweth->dev, 1), + kaweth->rx_buf, + KAWETH_BUF_SIZE, + kaweth_usb_receive, + kaweth); + + if((result = usb_submit_urb(kaweth->rx_urb))) { + kaweth_err("resubmitting rx_urb %d failed", result); + } +} + +static void kaweth_async_set_rx_mode(struct kaweth_device *kaweth); + +/**************************************************************** + * kaweth_usb_receive + ****************************************************************/ +static void kaweth_usb_receive(struct urb *urb) +{ + struct kaweth_device *kaweth = urb->context; + struct net_device *net = kaweth->net; + + int count = urb->actual_length; + int count2 = urb->transfer_buffer_length; + + __u16 pkt_len = *(__u16 *)kaweth->rx_buf; + + struct sk_buff *skb; + + if(kaweth->status & KAWETH_STATUS_CLOSING) { + return; + } + + if(urb->status && urb->status != -EREMOTEIO && count != 1) { + kaweth_err("%s RX status: %d count: %d packet_len: %d", + net->name, + urb->status, + count, + (int)pkt_len); + kaweth_resubmit_rx_urb(kaweth); + return; + } + + if(kaweth->net && (count > 2)) { + if(pkt_len > (count - 2)) { + kaweth_err("Packet length too long for USB frame (pkt_len: %x, count: %x)",pkt_len, count); + kaweth_err("Packet len & 2047: %x", pkt_len & 2047); + kaweth_err("Count 2: %x", count2); + kaweth_resubmit_rx_urb(kaweth); + return; + } + + if(!(skb = dev_alloc_skb(pkt_len+2))) { + kaweth_resubmit_rx_urb(kaweth); + return; + } + + skb->dev = net; + + eth_copy_and_sum(skb, kaweth->rx_buf + 2, pkt_len, 0); + + skb_put(skb, pkt_len); + + skb->protocol = eth_type_trans(skb, net); + + netif_rx(skb); + + kaweth->stats.rx_packets++; + kaweth->stats.rx_bytes += pkt_len; + } + + kaweth_resubmit_rx_urb(kaweth); +} + +/**************************************************************** + * kaweth_open + ****************************************************************/ +static int kaweth_open(struct net_device *net) +{ + struct kaweth_device *kaweth = (struct kaweth_device *)net->priv; + + kaweth_dbg("Dev usage: %d", kaweth->dev->refcnt.counter); + + kaweth_dbg("Opening network device."); + + kaweth_resubmit_rx_urb(kaweth); + + netif_start_queue(net); + + MOD_INC_USE_COUNT; + + kaweth_async_set_rx_mode(kaweth); + return 0; +} + +/**************************************************************** + * kaweth_close + ****************************************************************/ +static int kaweth_close(struct net_device *net) +{ + struct kaweth_device *kaweth = net->priv; + + netif_stop_queue(net); + + kaweth->status |= KAWETH_STATUS_CLOSING; + + usb_unlink_urb(kaweth->rx_urb); + + kaweth->status &= ~KAWETH_STATUS_CLOSING; + + MOD_DEC_USE_COUNT; + + printk("Dev usage: %d", kaweth->dev->refcnt.counter); + + return 0; +} + +/**************************************************************** + * kaweth_ioctl + ****************************************************************/ +static int kaweth_ioctl(struct net_device *net, struct ifreq *rq, int cmd) +{ + return -EOPNOTSUPP; +} + +/**************************************************************** + * kaweth_usb_transmit_complete + ****************************************************************/ +static void kaweth_usb_transmit_complete(struct urb *urb) +{ + struct kaweth_device *kaweth = urb->context; + + spin_lock(&kaweth->device_lock); + + if (urb->status) + kaweth_dbg("%s: TX status %d.", kaweth->net->name, urb->status); + + netif_wake_queue(kaweth->net); + + spin_unlock(&kaweth->device_lock); +} + +/**************************************************************** + * kaweth_start_xmit + ****************************************************************/ +static int kaweth_start_xmit(struct sk_buff *skb, struct net_device *net) +{ + struct kaweth_device *kaweth = net->priv; + int count = skb->len; + + int res; + + spin_lock(&kaweth->device_lock); + + kaweth_async_set_rx_mode(kaweth); + netif_stop_queue(net); + + *((__u16 *)kaweth->tx_buf) = skb->len; + + memcpy(kaweth->tx_buf + 2, skb->data, skb->len); + + memset(kaweth->tx_urb, 0, sizeof(*kaweth->tx_urb)); + + FILL_BULK_URB(kaweth->tx_urb, + kaweth->dev, + usb_sndbulkpipe(kaweth->dev, 2), + kaweth->tx_buf, + count + 2, + kaweth_usb_transmit_complete, + kaweth); + + if((res = usb_submit_urb(kaweth->tx_urb))) + { + kaweth_warn("kaweth failed tx_urb %d", res); + kaweth->stats.tx_errors++; + + netif_start_queue(net); + } + else + { + kaweth->stats.tx_packets++; + kaweth->stats.tx_bytes += skb->len; + net->trans_start = jiffies; + } + + dev_kfree_skb(skb); + + spin_unlock(&kaweth->device_lock); + + return 0; +} + +/**************************************************************** + * kaweth_set_rx_mode + ****************************************************************/ +static void kaweth_set_rx_mode(struct net_device *net) +{ + struct kaweth_device *kaweth = net->priv; + + __u16 packet_filter_bitmap = KAWETH_PACKET_FILTER_DIRECTED | + KAWETH_PACKET_FILTER_BROADCAST | + KAWETH_PACKET_FILTER_MULTICAST; + + kaweth_dbg("Setting Rx mode to %d", packet_filter_bitmap); + + netif_stop_queue(net); + + if (net->flags & IFF_PROMISC) { + packet_filter_bitmap |= KAWETH_PACKET_FILTER_PROMISCUOUS; + } + else if ((net->mc_count) || (net->flags & IFF_ALLMULTI)) { + packet_filter_bitmap |= KAWETH_PACKET_FILTER_ALL_MULTICAST; + } + + kaweth->packet_filter_bitmap = packet_filter_bitmap; + netif_wake_queue(net); +} + +/**************************************************************** + * kaweth_async_set_rx_mode + ****************************************************************/ +static void kaweth_async_set_rx_mode(struct kaweth_device *kaweth) +{ + __u16 packet_filter_bitmap = kaweth->packet_filter_bitmap; + kaweth->packet_filter_bitmap = 0; + if(packet_filter_bitmap == 0) return; + + { + int result; + result = kaweth_control(kaweth, + usb_sndctrlpipe(kaweth->dev, 0), + KAWETH_COMMAND_SET_PACKET_FILTER, + USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE, + packet_filter_bitmap, + 0, + (void *)&kaweth->firmware_buf, + 0, + KAWETH_CONTROL_TIMEOUT); + + if(result < 0) { + kaweth_err("Failed to set Rx mode: %d", result); + } + else { + kaweth_dbg("Set Rx mode to %d", packet_filter_bitmap); + } + } +} + +/**************************************************************** + * kaweth_netdev_stats + ****************************************************************/ +static struct net_device_stats *kaweth_netdev_stats(struct net_device *dev) +{ + return &((struct kaweth_device *)dev->priv)->stats; +} + +/**************************************************************** + * kaweth_tx_timeout + ****************************************************************/ +static void kaweth_tx_timeout(struct net_device *net) +{ + struct kaweth_device *kaweth = net->priv; + + kaweth_warn("%s: Tx timed out. Resetting.", net->name); + kaweth->stats.tx_errors++; + net->trans_start = jiffies; + + usb_unlink_urb(kaweth->tx_urb); + + netif_wake_queue(net); +} + +/**************************************************************** + * kaweth_probe + ****************************************************************/ +static void *kaweth_probe( + struct usb_device *dev, /* the device */ + unsigned ifnum, /* what interface */ + const struct usb_device_id *id /* from id_table */ + ) +{ + struct kaweth_device *kaweth; + const eth_addr_t bcast_addr = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + int result = 0; + + kaweth_dbg("Kawasaki Device Probe (Device number:%d): 0x%4.4x:0x%4.4x:0x%4.4x", + dev->devnum, + (int)dev->descriptor.idVendor, + (int)dev->descriptor.idProduct, + (int)dev->descriptor.bcdDevice); + + kaweth_dbg("Device at %p", dev); + + kaweth_dbg("Descriptor length: %x type: %x", + (int)dev->descriptor.bLength, + (int)dev->descriptor.bDescriptorType); + + if(!(kaweth = kmalloc(sizeof(struct kaweth_device), GFP_KERNEL))) { + kaweth_dbg("out of memory allocating device structure\n"); + return NULL; + } + + memset(kaweth, 0, sizeof(struct kaweth_device)); + + kaweth->dev = dev; + kaweth->status = 0; + kaweth->net = NULL; + kaweth->device_lock = SPIN_LOCK_UNLOCKED; + + kaweth_dbg("Resetting."); + + kaweth_reset(kaweth); + + /* + * If high byte of bcdDevice is nonzero, firmware is already + * downloaded. Don't try to do it again, or we'll hang the device. + */ + + if (dev->descriptor.bcdDevice >> 8) { + kaweth_info("Firmware present in device."); + } else { + /* Download the firmware */ + kaweth_info("Downloading firmware..."); + if ((result = kaweth_download_firmware(kaweth, + kaweth_new_code, + len_kaweth_new_code, + 100, + 2)) < 0) { + kaweth_err("Error downloading firmware (%d)", result); + kfree(kaweth); + return NULL; + } + + if ((result = kaweth_download_firmware(kaweth, + kaweth_new_code_fix, + len_kaweth_new_code_fix, + 100, + 3)) < 0) { + kaweth_err("Error downloading firmware fix (%d)", result); + kfree(kaweth); + return NULL; + } + + if ((result = kaweth_download_firmware(kaweth, + kaweth_trigger_code, + len_kaweth_trigger_code, + 126, + 2)) < 0) { + kaweth_err("Error downloading trigger code (%d)", result); + kfree(kaweth); + return NULL; + } + + if ((result = kaweth_download_firmware(kaweth, + kaweth_trigger_code_fix, + len_kaweth_trigger_code_fix, + 126, + 3)) < 0) { + kaweth_err("Error downloading trigger code fix (%d)", result); + kfree(kaweth); + return NULL; + } + + + if ((result = kaweth_trigger_firmware(kaweth, 126)) < 0) { + kaweth_err("Error triggering firmware (%d)", result); + kfree(kaweth); + return NULL; + } + + /* Device will now disappear for a moment... */ + kaweth_info("Firmware loaded. I'll be back..."); + return NULL; + } + + result = kaweth_read_configuration(kaweth); + + if(result < 0) { + kaweth_err("Error reading configuration (%d), no net device created", result); + kfree(kaweth); + return NULL; + } + + kaweth_info("Statistics collection: %x", kaweth->configuration.statistics_mask); + kaweth_info("Multicast filter limit: %x", kaweth->configuration.max_multicast_filters & ((1 << 15) - 1)); + kaweth_info("MTU: %d", kaweth->configuration.segment_size); + kaweth_info("Read MAC address %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x", + (int)kaweth->configuration.hw_addr[0], + (int)kaweth->configuration.hw_addr[1], + (int)kaweth->configuration.hw_addr[2], + (int)kaweth->configuration.hw_addr[3], + (int)kaweth->configuration.hw_addr[4], + (int)kaweth->configuration.hw_addr[5]); + + if(!memcmp(&kaweth->configuration.hw_addr, + &bcast_addr, + sizeof(bcast_addr))) { + kaweth_err("Firmware not functioning properly, no net device created"); + kfree(kaweth); + return NULL; + } + + if(kaweth_set_urb_size(kaweth, KAWETH_BUF_SIZE) < 0) { + kaweth_dbg("Error setting URB size"); + return kaweth; + } + + if(kaweth_set_sofs_wait(kaweth, KAWETH_SOFS_TO_WAIT) < 0) { + kaweth_err("Error setting SOFS wait"); + return kaweth; + } + + result = kaweth_set_receive_filter(kaweth, + KAWETH_PACKET_FILTER_DIRECTED | + KAWETH_PACKET_FILTER_BROADCAST | + KAWETH_PACKET_FILTER_MULTICAST); + + if(result < 0) { + kaweth_err("Error setting receive filter"); + return kaweth; + } + + kaweth_dbg("Initializing net device."); + + kaweth->tx_urb = usb_alloc_urb(0); + kaweth->rx_urb = usb_alloc_urb(0); + + kaweth->net = init_etherdev(0, 0); + + memcpy(kaweth->net->broadcast, &bcast_addr, sizeof(bcast_addr)); + memcpy(kaweth->net->dev_addr, + &kaweth->configuration.hw_addr, + sizeof(kaweth->configuration.hw_addr)); + + kaweth->net->priv = kaweth; + kaweth->net->open = kaweth_open; + kaweth->net->stop = kaweth_close; + + kaweth->net->watchdog_timeo = KAWETH_TX_TIMEOUT; + kaweth->net->tx_timeout = kaweth_tx_timeout; + + kaweth->net->do_ioctl = kaweth_ioctl; + kaweth->net->hard_start_xmit = kaweth_start_xmit; + kaweth->net->set_multicast_list = kaweth_set_rx_mode; + kaweth->net->get_stats = kaweth_netdev_stats; + kaweth->net->mtu = kaweth->configuration.segment_size; + + memset(&kaweth->stats, 0, sizeof(kaweth->stats)); + + kaweth_info("kaweth interface created at %s", kaweth->net->name); + + kaweth_dbg("Kaweth probe returning."); + + return kaweth; +} + +/**************************************************************** + * kaweth_disconnect + ****************************************************************/ +static void kaweth_disconnect(struct usb_device *dev, void *ptr) +{ + struct kaweth_device *kaweth = ptr; + + kaweth_info("Unregistering"); + + if (!kaweth) { + kaweth_warn("unregistering non-existant device"); + return; + } + + if(kaweth->net) { + if(kaweth->net->flags & IFF_UP) { + kaweth_dbg("Closing net device"); + dev_close(kaweth->net); + } + + kaweth_dbg("Unregistering net device"); + unregister_netdev(kaweth->net); + } + + usb_free_urb(kaweth->rx_urb); + usb_free_urb(kaweth->tx_urb); + + kfree(kaweth); +} + + +/*-------------------------------------------------------------------* + * completion handler for compatibility wrappers (sync control/bulk) * + *-------------------------------------------------------------------*/ +static void usb_api_blocking_completion(urb_t *urb) +{ + api_wrapper_data *awd = (api_wrapper_data *)urb->context; + + if (waitqueue_active(awd->wakeup)) { + wake_up(awd->wakeup); + } + +} + +/*-------------------------------------------------------------------* + * COMPATIBILITY STUFF * + *-------------------------------------------------------------------*/ + +// Starts urb and waits for completion or timeout +static int usb_start_wait_urb(urb_t *urb, int timeout, int* actual_length) +{ + DECLARE_WAITQUEUE(wait, current); + DECLARE_WAIT_QUEUE_HEAD(wqh); + api_wrapper_data awd; + int status; + + awd.wakeup = &wqh; + init_waitqueue_head(&wqh); + current->state = TASK_INTERRUPTIBLE; + add_wait_queue(&wqh, &wait); + urb->context = &awd; + status = usb_submit_urb(urb); + if (status) { + // something went wrong + usb_free_urb(urb); + current->state = TASK_RUNNING; + remove_wait_queue(&wqh, &wait); + return status; + } + + if (urb->status == -EINPROGRESS) { + while (timeout && urb->status == -EINPROGRESS) + status = timeout = schedule_timeout(timeout); + } + else { + status = 1; + } + + current->state = TASK_RUNNING; + remove_wait_queue(&wqh, &wait); + + if (!status) { + // timeout + kaweth_warn("usb_control/bulk_msg: timeout"); + usb_unlink_urb(urb); // remove urb safely + status = -ETIMEDOUT; + } + else { + status = urb->status; + } + + if (actual_length) { + *actual_length = urb->actual_length; + } + + usb_free_urb(urb); + return status; +} + +/*-------------------------------------------------------------------*/ +// returns status (negative) or length (positive) +int kaweth_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe, + devrequest *cmd, void *data, int len, int timeout) +{ + urb_t *urb; + int retv; + int length; + + urb = usb_alloc_urb(0); + if (!urb) + return -ENOMEM; + + FILL_CONTROL_URB(urb, usb_dev, pipe, (unsigned char*)cmd, data, + len, (usb_complete_t)usb_api_blocking_completion,0); + + retv = usb_start_wait_urb(urb, timeout, &length); + if (retv < 0) { + return retv; + } + else { + return length; + } +} + + +/**************************************************************** + * kaweth_init + ****************************************************************/ +int __init kaweth_init(void) +{ + kaweth_dbg("Driver loading"); + return usb_register(&kaweth_driver); +} + +/**************************************************************** + * kaweth_exit + ****************************************************************/ +void __exit kaweth_exit(void) +{ + usb_deregister(&kaweth_driver); +} + +module_init(kaweth_init); +module_exit(kaweth_exit); + diff -u --recursive --new-file v2.4.8/linux/drivers/usb/kawethfw.h linux/drivers/usb/kawethfw.h --- v2.4.8/linux/drivers/usb/kawethfw.h Wed Dec 31 16:00:00 1969 +++ linux/drivers/usb/kawethfw.h Sun Aug 12 17:37:53 2001 @@ -0,0 +1,557 @@ +/******************************************/ +/* NOTE: B6/C3 is data header signature */ +/* 0xAA/0xBB is data length = total */ +/* bytes - 7, 0xCC is type, 0xDD is */ +/* interrupt to use. */ +/******************************************/ + +/**************************************************************** + * kaweth_trigger_code + ****************************************************************/ +static __u8 kaweth_trigger_code[] = +{ + 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD, + 0xc8, 0x07, 0xa0, 0x00, 0xf0, 0x07, 0x5e, 0x00, + 0x06, 0x00, 0xf0, 0x07, 0x0a, 0x00, 0x08, 0x00, + 0xf0, 0x09, 0x00, 0x00, 0x02, 0x00, 0xe7, 0x07, + 0x36, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, + 0x04, 0x00, 0xe7, 0x07, 0x50, 0xc3, 0x10, 0xc0, + 0xf0, 0x09, 0x0e, 0xc0, 0x00, 0x00, 0xe7, 0x87, + 0x01, 0x00, 0x0e, 0xc0, 0x97, 0xcf, 0xd7, 0x09, + 0x00, 0xc0, 0x17, 0x02, 0xc8, 0x07, 0xa0, 0x00, + 0xe7, 0x17, 0x50, 0xc3, 0x10, 0xc0, 0x30, 0xd8, + 0x04, 0x00, 0x30, 0x5c, 0x08, 0x00, 0x04, 0x00, + 0xb0, 0xc0, 0x06, 0x00, 0xc8, 0x05, 0xe7, 0x05, + 0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, 0x49, 0xaf, + 0xc0, 0x07, 0x00, 0x00, 0x60, 0xaf, 0x4a, 0xaf, + 0x00, 0x0c, 0x0c, 0x00, 0x40, 0xd2, 0x00, 0x1c, + 0x0c, 0x00, 0x40, 0xd2, 0x30, 0x00, 0x08, 0x00, + 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00, 0xf0, 0x07, + 0x86, 0x00, 0x06, 0x00, 0x67, 0xcf, 0x27, 0x0c, + 0x02, 0x00, 0x00, 0x00, 0x27, 0x0c, 0x00, 0x00, + 0x0e, 0xc0, 0x49, 0xaf, 0x64, 0xaf, 0xc0, 0x07, + 0x00, 0x00, 0x4b, 0xaf, 0x4a, 0xaf, 0x5a, 0xcf, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, + 0x00, 0x00 +}; +/**************************************************************** + * kaweth_trigger_code_fix + ****************************************************************/ +static __u8 kaweth_trigger_code_fix[] = +{ + 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD, + 0x02, 0x00, 0x06, 0x00, 0x18, 0x00, 0x3e, 0x00, + 0x80, 0x00, 0x98, 0x00, 0xaa, 0x00, + 0x00, 0x00 +}; + +/**************************************************************** + * kaweth_new_code + ****************************************************************/ +static __u8 kaweth_new_code[] = +{ + 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD, + 0x9f, 0xcf, 0xde, 0x06, 0xe7, 0x57, 0x00, 0x00, + 0xc4, 0x06, 0x97, 0xc1, 0xe7, 0x67, 0xff, 0x1f, + 0x28, 0xc0, 0xe7, 0x87, 0x00, 0x04, 0x24, 0xc0, + 0xe7, 0x67, 0xff, 0xf9, 0x22, 0xc0, 0x97, 0xcf, + 0xd7, 0x09, 0x00, 0xc0, 0xe7, 0x09, 0xa2, 0xc0, + 0xbe, 0x06, 0x9f, 0xaf, 0x36, 0x00, 0xe7, 0x05, + 0x00, 0xc0, 0xa7, 0xcf, 0xbc, 0x06, 0x97, 0xcf, + 0xe7, 0x57, 0x00, 0x00, 0xb8, 0x06, 0xa7, 0xa1, + 0xb8, 0x06, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00, + 0x14, 0x08, 0x0a, 0xc0, 0xe7, 0x57, 0x00, 0x00, + 0xa4, 0xc0, 0xa7, 0xc0, 0x7a, 0x06, 0x9f, 0xaf, + 0x92, 0x07, 0xe7, 0x07, 0x00, 0x00, 0x14, 0x08, + 0xe7, 0x57, 0xff, 0xff, 0xba, 0x06, 0x9f, 0xa0, + 0x38, 0x00, 0xe7, 0x59, 0xba, 0x06, 0xbe, 0x06, + 0x9f, 0xa0, 0x38, 0x00, 0xc8, 0x09, 0xca, 0x06, + 0x08, 0x62, 0x9f, 0xa1, 0x36, 0x08, 0xc0, 0x09, + 0x76, 0x06, 0x00, 0x60, 0xa7, 0xc0, 0x7a, 0x06, + 0x9f, 0xaf, 0xcc, 0x02, 0xe7, 0x57, 0x00, 0x00, + 0xb8, 0x06, 0xa7, 0xc1, 0x7a, 0x06, 0x9f, 0xaf, + 0x04, 0x00, 0xe7, 0x57, 0x00, 0x00, 0x8e, 0x06, + 0x0a, 0xc1, 0xe7, 0x09, 0x20, 0xc0, 0x10, 0x08, + 0xe7, 0xd0, 0x10, 0x08, 0xe7, 0x67, 0x40, 0x00, + 0x10, 0x08, 0x9f, 0xaf, 0x92, 0x0c, 0xc0, 0x09, + 0xd0, 0x06, 0x00, 0x60, 0x05, 0xc4, 0xc0, 0x59, + 0xbe, 0x06, 0x02, 0xc0, 0x9f, 0xaf, 0xec, 0x00, + 0x9f, 0xaf, 0x34, 0x02, 0xe7, 0x57, 0x00, 0x00, + 0xa6, 0x06, 0x9f, 0xa0, 0x7a, 0x02, 0xa7, 0xcf, + 0x7a, 0x06, 0x48, 0x02, 0xe7, 0x09, 0xbe, 0x06, + 0xd0, 0x06, 0xc8, 0x37, 0x04, 0x00, 0x9f, 0xaf, + 0x08, 0x03, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00, + 0xce, 0x06, 0x97, 0xc0, 0xd7, 0x09, 0x00, 0xc0, + 0xc1, 0xdf, 0xc8, 0x09, 0xc6, 0x06, 0x08, 0x62, + 0x14, 0xc0, 0x27, 0x04, 0xc6, 0x06, 0x10, 0x94, + 0xf0, 0x07, 0x10, 0x08, 0x02, 0x00, 0xc1, 0x07, + 0x01, 0x00, 0x70, 0x00, 0x04, 0x00, 0xf0, 0x07, + 0x30, 0x01, 0x06, 0x00, 0x50, 0xaf, 0xe7, 0x07, + 0xff, 0xff, 0xd0, 0x06, 0xe7, 0x07, 0x00, 0x00, + 0xce, 0x06, 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, + 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x48, 0x02, + 0xd0, 0x09, 0xc6, 0x06, 0x27, 0x02, 0xc6, 0x06, + 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, 0x48, 0x02, + 0xc8, 0x37, 0x04, 0x00, 0x00, 0x0c, 0x0c, 0x00, + 0x00, 0x60, 0x21, 0xc0, 0xc0, 0x37, 0x3e, 0x00, + 0x23, 0xc9, 0xc0, 0x57, 0xb4, 0x05, 0x1b, 0xc8, + 0xc0, 0x17, 0x3f, 0x00, 0xc0, 0x67, 0xc0, 0xff, + 0x30, 0x00, 0x08, 0x00, 0xf0, 0x07, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x02, 0xc0, 0x17, 0x4c, 0x00, + 0x30, 0x00, 0x06, 0x00, 0xf0, 0x07, 0xa0, 0x01, + 0x0a, 0x00, 0x48, 0x02, 0xc1, 0x07, 0x02, 0x00, + 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x51, 0xaf, + 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, 0x9f, 0xaf, + 0x08, 0x03, 0x9f, 0xaf, 0x7a, 0x02, 0x97, 0xcf, + 0x9f, 0xaf, 0x7a, 0x02, 0xc9, 0x37, 0x04, 0x00, + 0xc1, 0xdf, 0xc8, 0x09, 0xa2, 0x06, 0x50, 0x02, + 0x67, 0x02, 0xa2, 0x06, 0xd1, 0x07, 0x00, 0x00, + 0x27, 0xd8, 0xaa, 0x06, 0xc0, 0xdf, 0x9f, 0xaf, + 0xc4, 0x01, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00, + 0xd2, 0x06, 0x97, 0xc1, 0xe7, 0x57, 0x01, 0x00, + 0xa8, 0x06, 0x97, 0xc0, 0xc8, 0x09, 0xa0, 0x06, + 0x08, 0x62, 0x97, 0xc0, 0x00, 0x02, 0xc0, 0x17, + 0x0e, 0x00, 0x27, 0x00, 0x34, 0x01, 0x27, 0x0c, + 0x0c, 0x00, 0x36, 0x01, 0xe7, 0x07, 0x50, 0xc3, + 0x12, 0xc0, 0xe7, 0x07, 0xcc, 0x0b, 0x02, 0x00, + 0xe7, 0x07, 0x01, 0x00, 0xa8, 0x06, 0xe7, 0x07, + 0x05, 0x00, 0x90, 0xc0, 0x97, 0xcf, 0xc8, 0x09, + 0xa4, 0x06, 0x08, 0x62, 0x02, 0xc0, 0x10, 0x64, + 0x07, 0xc1, 0xe7, 0x07, 0x00, 0x00, 0x9e, 0x06, + 0xe7, 0x07, 0x72, 0x04, 0x24, 0x00, 0x97, 0xcf, + 0x27, 0x04, 0xa4, 0x06, 0xc8, 0x17, 0x0e, 0x00, + 0x27, 0x02, 0x9e, 0x06, 0xe7, 0x07, 0x80, 0x04, + 0x24, 0x00, 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, + 0xc1, 0xdf, 0xe7, 0x57, 0x00, 0x00, 0x90, 0x06, + 0x13, 0xc1, 0x9f, 0xaf, 0x06, 0x02, 0xe7, 0x57, + 0x00, 0x00, 0x9e, 0x06, 0x13, 0xc0, 0xe7, 0x09, + 0x9e, 0x06, 0x30, 0x01, 0xe7, 0x07, 0xf2, 0x05, + 0x32, 0x01, 0xe7, 0x07, 0x10, 0x00, 0x96, 0xc0, + 0xe7, 0x09, 0x9e, 0x06, 0x90, 0x06, 0x04, 0xcf, + 0xe7, 0x57, 0x00, 0x00, 0x9e, 0x06, 0x02, 0xc1, + 0x9f, 0xaf, 0x06, 0x02, 0xe7, 0x05, 0x00, 0xc0, + 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, + 0x08, 0x92, 0xe7, 0x57, 0x02, 0x00, 0xaa, 0x06, + 0x02, 0xc3, 0xc8, 0x09, 0xa4, 0x06, 0x27, 0x02, + 0xa6, 0x06, 0x08, 0x62, 0x03, 0xc1, 0xe7, 0x05, + 0x00, 0xc0, 0x97, 0xcf, 0x27, 0x04, 0xa4, 0x06, + 0xe7, 0x05, 0x00, 0xc0, 0xf0, 0x07, 0x40, 0x00, + 0x08, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x02, 0xc0, 0x17, 0x0c, 0x00, 0x30, 0x00, + 0x06, 0x00, 0xf0, 0x07, 0x46, 0x01, 0x0a, 0x00, + 0xc8, 0x17, 0x04, 0x00, 0xc1, 0x07, 0x02, 0x00, + 0x51, 0xaf, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00, + 0x96, 0x06, 0x97, 0xc0, 0xc1, 0xdf, 0xc8, 0x09, + 0x96, 0x06, 0x27, 0x04, 0x96, 0x06, 0x27, 0x52, + 0x98, 0x06, 0x03, 0xc1, 0xe7, 0x07, 0x96, 0x06, + 0x98, 0x06, 0xc0, 0xdf, 0x17, 0x02, 0xc8, 0x17, + 0x0e, 0x00, 0x9f, 0xaf, 0xba, 0x03, 0xc8, 0x05, + 0x00, 0x60, 0x03, 0xc0, 0x9f, 0xaf, 0x24, 0x03, + 0x97, 0xcf, 0x9f, 0xaf, 0x08, 0x03, 0x97, 0xcf, + 0x57, 0x02, 0xc9, 0x07, 0xa4, 0x06, 0xd7, 0x09, + 0x00, 0xc0, 0xc1, 0xdf, 0x08, 0x62, 0x1b, 0xc0, + 0x50, 0x04, 0x11, 0x02, 0xe7, 0x05, 0x00, 0xc0, + 0xc9, 0x05, 0x97, 0xcf, 0x97, 0x02, 0xca, 0x09, + 0xd6, 0x06, 0xf2, 0x17, 0x01, 0x00, 0x04, 0x00, + 0xf2, 0x27, 0x00, 0x00, 0x06, 0x00, 0xca, 0x17, + 0x2c, 0x00, 0xf8, 0x77, 0x01, 0x00, 0x0e, 0x00, + 0x06, 0xc0, 0xca, 0xd9, 0xf8, 0x57, 0xff, 0x00, + 0x0e, 0x00, 0x01, 0xc1, 0xca, 0xd9, 0x22, 0x1c, + 0x0c, 0x00, 0xe2, 0x27, 0x00, 0x00, 0xe2, 0x17, + 0x01, 0x00, 0xe2, 0x27, 0x00, 0x00, 0xca, 0x05, + 0x00, 0x0c, 0x0c, 0x00, 0xc0, 0x17, 0x41, 0x00, + 0xc0, 0x67, 0xc0, 0xff, 0x30, 0x00, 0x08, 0x00, + 0x00, 0x02, 0xc0, 0x17, 0x0c, 0x00, 0x30, 0x00, + 0x06, 0x00, 0xf0, 0x07, 0xda, 0x00, 0x0a, 0x00, + 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0c, + 0x08, 0x00, 0x40, 0xd1, 0x01, 0x00, 0xc0, 0x19, + 0xce, 0x06, 0xc0, 0x59, 0xc2, 0x06, 0x04, 0xc9, + 0x49, 0xaf, 0x9f, 0xaf, 0xec, 0x00, 0x4a, 0xaf, + 0x67, 0x10, 0xce, 0x06, 0xc8, 0x17, 0x04, 0x00, + 0xc1, 0x07, 0x01, 0x00, 0xd7, 0x09, 0x00, 0xc0, + 0xc1, 0xdf, 0x50, 0xaf, 0xe7, 0x05, 0x00, 0xc0, + 0x97, 0xcf, 0xc0, 0x07, 0x01, 0x00, 0xc1, 0x09, + 0xac, 0x06, 0xc1, 0x77, 0x01, 0x00, 0x97, 0xc1, + 0xd8, 0x77, 0x01, 0x00, 0x12, 0xc0, 0xc9, 0x07, + 0x6a, 0x06, 0x9f, 0xaf, 0x08, 0x04, 0x04, 0xc1, + 0xc1, 0x77, 0x08, 0x00, 0x13, 0xc0, 0x97, 0xcf, + 0xc1, 0x77, 0x02, 0x00, 0x97, 0xc1, 0xc1, 0x77, + 0x10, 0x00, 0x0c, 0xc0, 0x9f, 0xaf, 0x2c, 0x04, + 0x97, 0xcf, 0xc1, 0x77, 0x04, 0x00, 0x06, 0xc0, + 0xc9, 0x07, 0x70, 0x06, 0x9f, 0xaf, 0x08, 0x04, + 0x97, 0xc0, 0x00, 0xcf, 0x00, 0x90, 0x97, 0xcf, + 0x50, 0x54, 0x97, 0xc1, 0x70, 0x5c, 0x02, 0x00, + 0x02, 0x00, 0x97, 0xc1, 0x70, 0x5c, 0x04, 0x00, + 0x04, 0x00, 0x97, 0xcf, 0x80, 0x01, 0xc0, 0x00, + 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0c, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xcb, 0x09, 0xb2, 0x06, + 0xcc, 0x09, 0xb4, 0x06, 0x0b, 0x53, 0x11, 0xc0, + 0xc9, 0x02, 0xca, 0x07, 0x1c, 0x04, 0x9f, 0xaf, + 0x08, 0x04, 0x97, 0xc0, 0x0a, 0xc8, 0x82, 0x08, + 0x0a, 0xcf, 0x82, 0x08, 0x9f, 0xaf, 0x08, 0x04, + 0x97, 0xc0, 0x05, 0xc2, 0x89, 0x30, 0x82, 0x60, + 0x78, 0xc1, 0x00, 0x90, 0x97, 0xcf, 0x89, 0x10, + 0x09, 0x53, 0x79, 0xc2, 0x89, 0x30, 0x82, 0x08, + 0x7a, 0xcf, 0xc0, 0xdf, 0x97, 0xcf, 0xc0, 0xdf, + 0x97, 0xcf, 0xe7, 0x09, 0x96, 0xc0, 0x92, 0x06, + 0xe7, 0x09, 0x98, 0xc0, 0x94, 0x06, 0x0f, 0xcf, + 0xe7, 0x09, 0x96, 0xc0, 0x92, 0x06, 0xe7, 0x09, + 0x98, 0xc0, 0x94, 0x06, 0xe7, 0x09, 0x9e, 0x06, + 0x30, 0x01, 0xe7, 0x07, 0xf2, 0x05, 0x32, 0x01, + 0xe7, 0x07, 0x10, 0x00, 0x96, 0xc0, 0xd7, 0x09, + 0x00, 0xc0, 0x17, 0x02, 0xc8, 0x09, 0x90, 0x06, + 0xc8, 0x37, 0x0e, 0x00, 0xe7, 0x77, 0x2a, 0x00, + 0x92, 0x06, 0x30, 0xc0, 0x97, 0x02, 0xca, 0x09, + 0xd6, 0x06, 0xe7, 0x77, 0x20, 0x00, 0x92, 0x06, + 0x0e, 0xc0, 0xf2, 0x17, 0x01, 0x00, 0x10, 0x00, + 0xf2, 0x27, 0x00, 0x00, 0x12, 0x00, 0xe7, 0x77, + 0x0a, 0x00, 0x92, 0x06, 0xca, 0x05, 0x1e, 0xc0, + 0x97, 0x02, 0xca, 0x09, 0xd6, 0x06, 0xf2, 0x17, + 0x01, 0x00, 0x0c, 0x00, 0xf2, 0x27, 0x00, 0x00, + 0x0e, 0x00, 0xe7, 0x77, 0x02, 0x00, 0x92, 0x06, + 0x07, 0xc0, 0xf2, 0x17, 0x01, 0x00, 0x44, 0x00, + 0xf2, 0x27, 0x00, 0x00, 0x46, 0x00, 0x06, 0xcf, + 0xf2, 0x17, 0x01, 0x00, 0x60, 0x00, 0xf2, 0x27, + 0x00, 0x00, 0x62, 0x00, 0xca, 0x05, 0x9f, 0xaf, + 0x08, 0x03, 0x0f, 0xcf, 0x57, 0x02, 0x09, 0x02, + 0xf1, 0x09, 0x94, 0x06, 0x0c, 0x00, 0xf1, 0xda, + 0x0c, 0x00, 0xc8, 0x09, 0x98, 0x06, 0x50, 0x02, + 0x67, 0x02, 0x98, 0x06, 0xd1, 0x07, 0x00, 0x00, + 0xc9, 0x05, 0xe7, 0x09, 0x9e, 0x06, 0x90, 0x06, + 0xe7, 0x57, 0x00, 0x00, 0x90, 0x06, 0x02, 0xc0, + 0x9f, 0xaf, 0x06, 0x02, 0xc8, 0x05, 0xe7, 0x05, + 0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, 0xd7, 0x09, + 0x00, 0xc0, 0x17, 0x00, 0x17, 0x02, 0x97, 0x02, + 0xc0, 0x09, 0x92, 0xc0, 0xe7, 0x07, 0x04, 0x00, + 0x90, 0xc0, 0xca, 0x09, 0xd6, 0x06, 0xe7, 0x07, + 0x00, 0x00, 0xa8, 0x06, 0xe7, 0x07, 0x6a, 0x04, + 0x02, 0x00, 0xc0, 0x77, 0x02, 0x00, 0x08, 0xc0, + 0xf2, 0x17, 0x01, 0x00, 0x50, 0x00, 0xf2, 0x27, + 0x00, 0x00, 0x52, 0x00, 0x9f, 0xcf, 0x24, 0x06, + 0xc0, 0x77, 0x10, 0x00, 0x06, 0xc0, 0xf2, 0x17, + 0x01, 0x00, 0x58, 0x00, 0xf2, 0x27, 0x00, 0x00, + 0x5a, 0x00, 0xc0, 0x77, 0x80, 0x00, 0x06, 0xc0, + 0xf2, 0x17, 0x01, 0x00, 0x70, 0x00, 0xf2, 0x27, + 0x00, 0x00, 0x72, 0x00, 0xc0, 0x77, 0x08, 0x00, + 0x1d, 0xc1, 0xf2, 0x17, 0x01, 0x00, 0x08, 0x00, + 0xf2, 0x27, 0x00, 0x00, 0x0a, 0x00, 0xc0, 0x77, + 0x00, 0x02, 0x06, 0xc0, 0xf2, 0x17, 0x01, 0x00, + 0x64, 0x00, 0xf2, 0x27, 0x00, 0x00, 0x66, 0x00, + 0xc0, 0x77, 0x40, 0x00, 0x06, 0xc0, 0xf2, 0x17, + 0x01, 0x00, 0x5c, 0x00, 0xf2, 0x27, 0x00, 0x00, + 0x5e, 0x00, 0xc0, 0x77, 0x01, 0x00, 0x01, 0xc0, + 0x1b, 0xcf, 0x1a, 0xcf, 0xf2, 0x17, 0x01, 0x00, + 0x00, 0x00, 0xf2, 0x27, 0x00, 0x00, 0x02, 0x00, + 0xc8, 0x09, 0x34, 0x01, 0xca, 0x17, 0x14, 0x00, + 0xd8, 0x77, 0x01, 0x00, 0x05, 0xc0, 0xca, 0xd9, + 0xd8, 0x57, 0xff, 0x00, 0x01, 0xc0, 0xca, 0xd9, + 0xe2, 0x19, 0x94, 0xc0, 0xe2, 0x27, 0x00, 0x00, + 0xe2, 0x17, 0x01, 0x00, 0xe2, 0x27, 0x00, 0x00, + 0x9f, 0xaf, 0x40, 0x06, 0x9f, 0xaf, 0xc4, 0x01, + 0xe7, 0x57, 0x00, 0x00, 0xd2, 0x06, 0x9f, 0xa1, + 0x0e, 0x0a, 0xca, 0x05, 0xc8, 0x05, 0xc0, 0x05, + 0xe7, 0x05, 0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, + 0xc8, 0x09, 0xa0, 0x06, 0x08, 0x62, 0x97, 0xc0, + 0x27, 0x04, 0xa0, 0x06, 0x27, 0x52, 0xa2, 0x06, + 0x03, 0xc1, 0xe7, 0x07, 0xa0, 0x06, 0xa2, 0x06, + 0x9f, 0xaf, 0x08, 0x03, 0xe7, 0x57, 0x00, 0x00, + 0xaa, 0x06, 0x02, 0xc0, 0x27, 0xda, 0xaa, 0x06, + 0x97, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xfb, 0x13, 0xe7, 0x57, + 0x00, 0x80, 0xb2, 0x00, 0x06, 0xc2, 0xe7, 0x07, + 0xee, 0x0b, 0x12, 0x00, 0xe7, 0x07, 0x34, 0x0c, + 0xb2, 0x00, 0xe7, 0x07, 0xc6, 0x07, 0xf2, 0x02, + 0xc8, 0x09, 0xb4, 0x00, 0xf8, 0x07, 0x02, 0x00, + 0x0d, 0x00, 0xd7, 0x09, 0x0e, 0xc0, 0xe7, 0x07, + 0x00, 0x00, 0x0e, 0xc0, 0xc8, 0x09, 0xde, 0x00, + 0xc8, 0x17, 0x09, 0x00, 0xc9, 0x07, 0xda, 0x06, + 0xc0, 0x07, 0x04, 0x00, 0x68, 0x0a, 0x00, 0xda, + 0x7d, 0xc1, 0xe7, 0x09, 0xc0, 0x00, 0x7c, 0x06, + 0xe7, 0x09, 0xbe, 0x00, 0x78, 0x06, 0xe7, 0x09, + 0x10, 0x00, 0xbc, 0x06, 0xc8, 0x07, 0xd6, 0x07, + 0x9f, 0xaf, 0xae, 0x07, 0x9f, 0xaf, 0x00, 0x0a, + 0xc8, 0x09, 0xde, 0x00, 0x00, 0x0e, 0x0f, 0x00, + 0x41, 0x90, 0x9f, 0xde, 0x06, 0x00, 0x44, 0xaf, + 0x27, 0x00, 0xb2, 0x06, 0x27, 0x00, 0xb4, 0x06, + 0x27, 0x00, 0xb6, 0x06, 0xc0, 0x07, 0x74, 0x00, + 0x44, 0xaf, 0x27, 0x00, 0xd6, 0x06, 0x08, 0x00, + 0x00, 0x90, 0xc1, 0x07, 0x3a, 0x00, 0x20, 0x00, + 0x01, 0xda, 0x7d, 0xc1, 0x9f, 0xaf, 0xba, 0x09, + 0xc0, 0x07, 0x44, 0x00, 0x48, 0xaf, 0x27, 0x00, + 0x7a, 0x06, 0x9f, 0xaf, 0x96, 0x0a, 0xe7, 0x07, + 0x01, 0x00, 0xc0, 0x06, 0xe7, 0x05, 0x0e, 0xc0, + 0x97, 0xcf, 0x49, 0xaf, 0xe7, 0x87, 0x43, 0x00, + 0x0e, 0xc0, 0xe7, 0x07, 0xff, 0xff, 0xbe, 0x06, + 0x9f, 0xaf, 0xae, 0x0a, 0xc0, 0x07, 0x01, 0x00, + 0x60, 0xaf, 0x4a, 0xaf, 0x97, 0xcf, 0x00, 0x08, + 0x09, 0x08, 0x11, 0x08, 0x00, 0xda, 0x7c, 0xc1, + 0x97, 0xcf, 0x67, 0x04, 0xcc, 0x02, 0xc0, 0xdf, + 0x51, 0x94, 0xb1, 0xaf, 0x06, 0x00, 0xc1, 0xdf, + 0xc9, 0x09, 0xcc, 0x02, 0x49, 0x62, 0x75, 0xc1, + 0xc0, 0xdf, 0xa7, 0xcf, 0xd6, 0x02, 0x0e, 0x00, + 0x24, 0x00, 0x80, 0x04, 0x22, 0x00, 0x4e, 0x05, + 0xd0, 0x00, 0x0e, 0x0a, 0xaa, 0x00, 0x30, 0x08, + 0xbe, 0x00, 0x4a, 0x0a, 0x10, 0x00, 0x20, 0x00, + 0x04, 0x00, 0x6e, 0x04, 0x02, 0x00, 0x6a, 0x04, + 0x06, 0x00, 0x00, 0x00, 0x24, 0xc0, 0x04, 0x04, + 0x28, 0xc0, 0xfe, 0xfb, 0x1e, 0xc0, 0x00, 0x04, + 0x22, 0xc0, 0xff, 0xf4, 0xc0, 0x00, 0x90, 0x09, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0x08, + 0x60, 0x08, 0xd0, 0x08, 0xda, 0x08, 0x00, 0x09, + 0x04, 0x09, 0x08, 0x09, 0x32, 0x09, 0x42, 0x09, + 0x50, 0x09, 0x52, 0x09, 0x5a, 0x09, 0x5a, 0x09, + 0x27, 0x02, 0xca, 0x06, 0x97, 0xcf, 0xe7, 0x07, + 0x00, 0x00, 0xca, 0x06, 0x0a, 0x0e, 0x01, 0x00, + 0xca, 0x57, 0x0e, 0x00, 0x9f, 0xc3, 0x5a, 0x09, + 0xca, 0x37, 0x00, 0x00, 0x9f, 0xc2, 0x5a, 0x09, + 0x0a, 0xd2, 0xb2, 0xcf, 0x16, 0x08, 0xc8, 0x09, + 0xde, 0x00, 0x07, 0x06, 0x9f, 0xcf, 0x6c, 0x09, + 0x17, 0x02, 0xc8, 0x09, 0xde, 0x00, 0x00, 0x0e, + 0x0f, 0x00, 0x41, 0x90, 0x9f, 0xde, 0x06, 0x00, + 0xc8, 0x05, 0x30, 0x50, 0x06, 0x00, 0x9f, 0xc8, + 0x5a, 0x09, 0x27, 0x0c, 0x02, 0x00, 0xb0, 0x06, + 0xc0, 0x09, 0xb2, 0x06, 0x27, 0x00, 0xb4, 0x06, + 0xe7, 0x07, 0x00, 0x00, 0xae, 0x06, 0x27, 0x00, + 0x80, 0x06, 0x00, 0x1c, 0x06, 0x00, 0x27, 0x00, + 0xb6, 0x06, 0x41, 0x90, 0x67, 0x50, 0xb0, 0x06, + 0x0d, 0xc0, 0x67, 0x00, 0x7e, 0x06, 0x27, 0x0c, + 0x06, 0x00, 0x82, 0x06, 0xe7, 0x07, 0xbc, 0x08, + 0x84, 0x06, 0xc8, 0x07, 0x7e, 0x06, 0x41, 0x90, + 0x51, 0xaf, 0x97, 0xcf, 0x9f, 0xaf, 0x48, 0x0c, + 0xe7, 0x09, 0xb6, 0x06, 0xb4, 0x06, 0xe7, 0x09, + 0xb0, 0x06, 0xae, 0x06, 0x59, 0xaf, 0x97, 0xcf, + 0x27, 0x0c, 0x02, 0x00, 0xac, 0x06, 0x59, 0xaf, + 0x97, 0xcf, 0x09, 0x0c, 0x02, 0x00, 0x09, 0xda, + 0x49, 0xd2, 0xc9, 0x19, 0xd6, 0x06, 0xc8, 0x07, + 0x7e, 0x06, 0xe0, 0x07, 0x00, 0x00, 0x60, 0x02, + 0xe0, 0x07, 0x04, 0x00, 0xd0, 0x07, 0xcc, 0x08, + 0x48, 0xdb, 0x41, 0x90, 0x50, 0xaf, 0x97, 0xcf, + 0x59, 0xaf, 0x97, 0xcf, 0x59, 0xaf, 0x97, 0xcf, + 0xf0, 0x57, 0x06, 0x00, 0x06, 0x00, 0x25, 0xc1, + 0xe7, 0x07, 0x70, 0x06, 0x80, 0x06, 0x41, 0x90, + 0x67, 0x00, 0x7e, 0x06, 0x27, 0x0c, 0x06, 0x00, + 0x82, 0x06, 0xe7, 0x07, 0x8c, 0x09, 0x84, 0x06, + 0xc8, 0x07, 0x7e, 0x06, 0x41, 0x90, 0x51, 0xaf, + 0x97, 0xcf, 0x07, 0x0c, 0x06, 0x00, 0xc7, 0x57, + 0x06, 0x00, 0x0f, 0xc1, 0xc8, 0x07, 0x70, 0x06, + 0x15, 0xcf, 0x00, 0x0c, 0x02, 0x00, 0x00, 0xda, + 0x40, 0xd1, 0x27, 0x00, 0xc2, 0x06, 0x1e, 0xcf, + 0x1d, 0xcf, 0x27, 0x0c, 0x02, 0x00, 0xcc, 0x06, + 0x19, 0xcf, 0x27, 0x02, 0x20, 0x01, 0xe7, 0x07, + 0x08, 0x00, 0x22, 0x01, 0xe7, 0x07, 0x13, 0x00, + 0xb0, 0xc0, 0x97, 0xcf, 0x41, 0x90, 0x67, 0x00, + 0x7e, 0x06, 0xe7, 0x01, 0x82, 0x06, 0x27, 0x02, + 0x80, 0x06, 0xe7, 0x07, 0x8c, 0x09, 0x84, 0x06, + 0xc8, 0x07, 0x7e, 0x06, 0xc1, 0x07, 0x00, 0x80, + 0x50, 0xaf, 0x97, 0xcf, 0x59, 0xaf, 0x97, 0xcf, + 0x00, 0x60, 0x05, 0xc0, 0xe7, 0x07, 0x00, 0x00, + 0xc4, 0x06, 0xa7, 0xcf, 0x7c, 0x06, 0x9f, 0xaf, + 0x00, 0x0a, 0xe7, 0x07, 0x01, 0x00, 0xc4, 0x06, + 0x49, 0xaf, 0xd7, 0x09, 0x00, 0xc0, 0x07, 0xaf, + 0xe7, 0x05, 0x00, 0xc0, 0x4a, 0xaf, 0xa7, 0xcf, + 0x7c, 0x06, 0xc0, 0x07, 0xfe, 0x7f, 0x44, 0xaf, + 0x40, 0x00, 0xc0, 0x37, 0x00, 0x01, 0x41, 0x90, + 0xc0, 0x37, 0x08, 0x00, 0xdf, 0xde, 0x50, 0x06, + 0xc0, 0x57, 0x10, 0x00, 0x02, 0xc2, 0xc0, 0x07, + 0x10, 0x00, 0x27, 0x00, 0x9a, 0x06, 0x41, 0x90, + 0x9f, 0xde, 0x40, 0x06, 0x44, 0xaf, 0x27, 0x00, + 0x9c, 0x06, 0xc0, 0x09, 0x9a, 0x06, 0x41, 0x90, + 0x00, 0xd2, 0x00, 0xd8, 0x9f, 0xde, 0x08, 0x00, + 0x44, 0xaf, 0x27, 0x00, 0xc8, 0x06, 0x97, 0xcf, + 0xe7, 0x87, 0x00, 0x84, 0x28, 0xc0, 0xe7, 0x67, + 0xff, 0xfb, 0x24, 0xc0, 0x97, 0xcf, 0xe7, 0x87, + 0x01, 0x00, 0xd2, 0x06, 0xe7, 0x57, 0x00, 0x00, + 0xa8, 0x06, 0x97, 0xc1, 0x9f, 0xaf, 0x00, 0x0a, + 0xe7, 0x87, 0x00, 0x06, 0x22, 0xc0, 0xe7, 0x07, + 0x00, 0x00, 0x90, 0xc0, 0xe7, 0x67, 0xfe, 0xff, + 0x3e, 0xc0, 0xe7, 0x07, 0x26, 0x00, 0x0a, 0xc0, + 0xe7, 0x87, 0x01, 0x00, 0x3e, 0xc0, 0xe7, 0x07, + 0xff, 0xff, 0xbe, 0x06, 0x9f, 0xaf, 0x10, 0x0b, + 0x97, 0xcf, 0x17, 0x00, 0xa7, 0xaf, 0x78, 0x06, + 0xc0, 0x05, 0x27, 0x00, 0x76, 0x06, 0xe7, 0x87, + 0x01, 0x00, 0xd2, 0x06, 0x9f, 0xaf, 0x00, 0x0a, + 0xe7, 0x07, 0x0c, 0x00, 0x40, 0xc0, 0x9f, 0xaf, + 0x10, 0x0b, 0x00, 0x90, 0x27, 0x00, 0xa6, 0x06, + 0x27, 0x00, 0xaa, 0x06, 0xe7, 0x09, 0xb2, 0x06, + 0xb4, 0x06, 0x27, 0x00, 0xae, 0x06, 0x27, 0x00, + 0xac, 0x06, 0x9f, 0xaf, 0xae, 0x0a, 0xc0, 0x07, + 0x00, 0x00, 0x27, 0x00, 0xb2, 0x02, 0x27, 0x00, + 0xb4, 0x02, 0x27, 0x00, 0x8e, 0x06, 0xc0, 0x07, + 0x06, 0x00, 0xc8, 0x09, 0xde, 0x00, 0xc8, 0x17, + 0x03, 0x00, 0xc9, 0x07, 0x70, 0x06, 0x29, 0x0a, + 0x00, 0xda, 0x7d, 0xc1, 0x97, 0xcf, 0xd7, 0x09, + 0x00, 0xc0, 0xc1, 0xdf, 0x00, 0x90, 0x27, 0x00, + 0x96, 0x06, 0xe7, 0x07, 0x96, 0x06, 0x98, 0x06, + 0x27, 0x00, 0xa0, 0x06, 0xe7, 0x07, 0xa0, 0x06, + 0xa2, 0x06, 0x27, 0x00, 0xa6, 0x06, 0x27, 0x00, + 0x90, 0x06, 0x27, 0x00, 0x9e, 0x06, 0xc8, 0x09, + 0x9c, 0x06, 0xc1, 0x09, 0x9a, 0x06, 0xc9, 0x07, + 0xa4, 0x06, 0x11, 0x02, 0x09, 0x02, 0xc8, 0x17, + 0x40, 0x06, 0x01, 0xda, 0x7a, 0xc1, 0x51, 0x94, + 0xc8, 0x09, 0xc8, 0x06, 0xc9, 0x07, 0xc6, 0x06, + 0xc1, 0x09, 0x9a, 0x06, 0x11, 0x02, 0x09, 0x02, + 0xc8, 0x17, 0x08, 0x00, 0x01, 0xda, 0x7a, 0xc1, + 0x51, 0x94, 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, + 0xe7, 0x57, 0x00, 0x00, 0x76, 0x06, 0x97, 0xc0, + 0x9f, 0xaf, 0x04, 0x00, 0xe7, 0x09, 0xbe, 0x06, + 0xba, 0x06, 0xe7, 0x57, 0xff, 0xff, 0xba, 0x06, + 0x04, 0xc1, 0xe7, 0x07, 0x10, 0x0b, 0xb8, 0x06, + 0x97, 0xcf, 0xe7, 0x17, 0x32, 0x00, 0xba, 0x06, + 0xe7, 0x67, 0xff, 0x07, 0xba, 0x06, 0xe7, 0x07, + 0x46, 0x0b, 0xb8, 0x06, 0x97, 0xcf, 0xe7, 0x57, + 0x00, 0x00, 0xc0, 0x06, 0x23, 0xc0, 0xe7, 0x07, + 0x04, 0x00, 0x90, 0xc0, 0xe7, 0x07, 0x00, 0x80, + 0x80, 0xc0, 0xe7, 0x07, 0x00, 0x00, 0x80, 0xc0, + 0xe7, 0x07, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x07, + 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xc0, 0x07, + 0x00, 0x00, 0xe7, 0x07, 0x00, 0x00, 0x80, 0xc0, + 0xe7, 0x07, 0x00, 0x80, 0x80, 0xc0, 0xe7, 0x07, + 0x00, 0x80, 0x40, 0xc0, 0xc0, 0x07, 0x00, 0x00, + 0xe7, 0x07, 0x00, 0x00, 0x40, 0xc0, 0xe7, 0x07, + 0x00, 0x00, 0x80, 0xc0, 0xe7, 0x07, 0x04, 0x00, + 0x90, 0xc0, 0xe7, 0x07, 0x00, 0x02, 0x40, 0xc0, + 0xe7, 0x07, 0x0c, 0x02, 0x40, 0xc0, 0xe7, 0x07, + 0x00, 0x00, 0xc0, 0x06, 0xe7, 0x07, 0x00, 0x00, + 0xb8, 0x06, 0xe7, 0x07, 0x00, 0x00, 0xd2, 0x06, + 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x9f, 0xaf, + 0x34, 0x02, 0xe7, 0x05, 0x00, 0xc0, 0x9f, 0xaf, + 0xc4, 0x01, 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, + 0x17, 0x00, 0x17, 0x02, 0x97, 0x02, 0xe7, 0x57, + 0x00, 0x00, 0xa8, 0x06, 0x06, 0xc0, 0xc0, 0x09, + 0x92, 0xc0, 0xc0, 0x77, 0x09, 0x02, 0x9f, 0xc1, + 0x5c, 0x05, 0x9f, 0xcf, 0x32, 0x06, 0xd7, 0x09, + 0x0e, 0xc0, 0xe7, 0x07, 0x00, 0x00, 0x0e, 0xc0, + 0x9f, 0xaf, 0x02, 0x0c, 0xe7, 0x05, 0x0e, 0xc0, + 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, 0x17, 0x02, + 0xc8, 0x09, 0xb0, 0xc0, 0xe7, 0x67, 0xfe, 0x7f, + 0xb0, 0xc0, 0xc8, 0x77, 0x00, 0x20, 0x9f, 0xc1, + 0x64, 0xeb, 0xe7, 0x57, 0x00, 0x00, 0xc8, 0x02, + 0x9f, 0xc1, 0x80, 0xeb, 0xc8, 0x99, 0xca, 0x02, + 0xc8, 0x67, 0x04, 0x00, 0x9f, 0xc1, 0x96, 0xeb, + 0x9f, 0xcf, 0x4c, 0xeb, 0xe7, 0x07, 0x00, 0x00, + 0xa6, 0xc0, 0xe7, 0x09, 0xb0, 0xc0, 0xc8, 0x02, + 0xe7, 0x07, 0x03, 0x00, 0xb0, 0xc0, 0x97, 0xcf, + 0xc0, 0x09, 0xb0, 0x06, 0xc0, 0x37, 0x01, 0x00, + 0x97, 0xc9, 0xc9, 0x09, 0xb2, 0x06, 0x02, 0x00, + 0x41, 0x90, 0x48, 0x02, 0xc9, 0x17, 0x06, 0x00, + 0x9f, 0xaf, 0x08, 0x04, 0x9f, 0xa2, 0x72, 0x0c, + 0x02, 0xda, 0x77, 0xc1, 0x41, 0x60, 0x71, 0xc1, + 0x97, 0xcf, 0x17, 0x02, 0x57, 0x02, 0x43, 0x04, + 0x21, 0x04, 0xe0, 0x00, 0x43, 0x04, 0x21, 0x04, + 0xe0, 0x00, 0x43, 0x04, 0x21, 0x04, 0xe0, 0x00, + 0xc1, 0x07, 0x01, 0x00, 0xc9, 0x05, 0xc8, 0x05, + 0x97, 0xcf, 0xe7, 0x07, 0x01, 0x00, 0x8e, 0x06, + 0xc8, 0x07, 0x86, 0x06, 0xe7, 0x07, 0x00, 0x00, + 0x86, 0x06, 0xe7, 0x07, 0x10, 0x08, 0x88, 0x06, + 0xe7, 0x07, 0x04, 0x00, 0x8a, 0x06, 0xe7, 0x07, + 0xbc, 0x0c, 0x8c, 0x06, 0xc1, 0x07, 0x03, 0x80, + 0x50, 0xaf, 0x97, 0xcf, 0xe7, 0x07, 0x00, 0x00, + 0x8e, 0x06, 0x97, 0xcf, + 0x00, 0x00 +}; + +/**************************************************************** + * kaweth_new_code_fix + ****************************************************************/ +static __u8 kaweth_new_code_fix[] = +{ + 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD, + 0x02, 0x00, 0x08, 0x00, 0x28, 0x00, 0x2c, 0x00, + 0x34, 0x00, 0x3c, 0x00, 0x40, 0x00, 0x48, 0x00, + 0x54, 0x00, 0x58, 0x00, 0x5e, 0x00, 0x64, 0x00, + 0x68, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x72, 0x00, + 0x76, 0x00, 0x7c, 0x00, 0x80, 0x00, 0x86, 0x00, + 0x8a, 0x00, 0x90, 0x00, 0x94, 0x00, 0x98, 0x00, + 0x9e, 0x00, 0xa6, 0x00, 0xaa, 0x00, 0xb0, 0x00, + 0xb4, 0x00, 0xb8, 0x00, 0xc0, 0x00, 0xc6, 0x00, + 0xca, 0x00, 0xd0, 0x00, 0xd4, 0x00, 0xd8, 0x00, + 0xe0, 0x00, 0xde, 0x00, 0xe8, 0x00, 0xf0, 0x00, + 0xfc, 0x00, 0x04, 0x01, 0x0a, 0x01, 0x18, 0x01, + 0x22, 0x01, 0x28, 0x01, 0x3a, 0x01, 0x3e, 0x01, + 0x7e, 0x01, 0x98, 0x01, 0x9c, 0x01, 0xa2, 0x01, + 0xac, 0x01, 0xb2, 0x01, 0xba, 0x01, 0xc0, 0x01, + 0xc8, 0x01, 0xd0, 0x01, 0xd6, 0x01, 0xf4, 0x01, + 0xfc, 0x01, 0x08, 0x02, 0x16, 0x02, 0x1a, 0x02, + 0x22, 0x02, 0x2a, 0x02, 0x2e, 0x02, 0x3e, 0x02, + 0x44, 0x02, 0x4a, 0x02, 0x50, 0x02, 0x64, 0x02, + 0x62, 0x02, 0x6c, 0x02, 0x72, 0x02, 0x86, 0x02, + 0x8c, 0x02, 0x90, 0x02, 0x9e, 0x02, 0xbc, 0x02, + 0xd0, 0x02, 0xd8, 0x02, 0xdc, 0x02, 0xe0, 0x02, + 0xe8, 0x02, 0xe6, 0x02, 0xf4, 0x02, 0xfe, 0x02, + 0x04, 0x03, 0x0c, 0x03, 0x28, 0x03, 0x7c, 0x03, + 0x90, 0x03, 0x94, 0x03, 0x9c, 0x03, 0xa2, 0x03, + 0xc0, 0x03, 0xd0, 0x03, 0xd4, 0x03, 0xee, 0x03, + 0xfa, 0x03, 0xfe, 0x03, 0x2e, 0x04, 0x32, 0x04, + 0x3c, 0x04, 0x40, 0x04, 0x4e, 0x04, 0x76, 0x04, + 0x7c, 0x04, 0x84, 0x04, 0x8a, 0x04, 0x8e, 0x04, + 0xa6, 0x04, 0xb0, 0x04, 0xb8, 0x04, 0xbe, 0x04, + 0xd2, 0x04, 0xdc, 0x04, 0xee, 0x04, 0x10, 0x05, + 0x1a, 0x05, 0x24, 0x05, 0x2a, 0x05, 0x36, 0x05, + 0x34, 0x05, 0x3c, 0x05, 0x42, 0x05, 0x64, 0x05, + 0x6a, 0x05, 0x6e, 0x05, 0x86, 0x05, 0x22, 0x06, + 0x26, 0x06, 0x2c, 0x06, 0x30, 0x06, 0x42, 0x06, + 0x4a, 0x06, 0x4e, 0x06, 0x56, 0x06, 0x54, 0x06, + 0x5a, 0x06, 0x60, 0x06, 0x66, 0x06, 0xe8, 0x06, + 0xee, 0x06, 0xf4, 0x06, 0x16, 0x07, 0x26, 0x07, + 0x2c, 0x07, 0x32, 0x07, 0x36, 0x07, 0x3a, 0x07, + 0x3e, 0x07, 0x52, 0x07, 0x56, 0x07, 0x5a, 0x07, + 0x64, 0x07, 0x76, 0x07, 0x7a, 0x07, 0x80, 0x07, + 0x84, 0x07, 0x8a, 0x07, 0x9e, 0x07, 0xa2, 0x07, + 0xda, 0x07, 0xde, 0x07, 0xe2, 0x07, 0xe6, 0x07, + 0xea, 0x07, 0xee, 0x07, 0xf2, 0x07, 0xf6, 0x07, + 0x0e, 0x08, 0x16, 0x08, 0x18, 0x08, 0x1a, 0x08, + 0x1c, 0x08, 0x1e, 0x08, 0x20, 0x08, 0x22, 0x08, + 0x24, 0x08, 0x26, 0x08, 0x28, 0x08, 0x2a, 0x08, + 0x2c, 0x08, 0x2e, 0x08, 0x32, 0x08, 0x3a, 0x08, + 0x46, 0x08, 0x4e, 0x08, 0x54, 0x08, 0x5e, 0x08, + 0x78, 0x08, 0x7e, 0x08, 0x82, 0x08, 0x86, 0x08, + 0x8c, 0x08, 0x90, 0x08, 0x98, 0x08, 0x9e, 0x08, + 0xa4, 0x08, 0xaa, 0x08, 0xb0, 0x08, 0xae, 0x08, + 0xb4, 0x08, 0xbe, 0x08, 0xc4, 0x08, 0xc2, 0x08, + 0xca, 0x08, 0xc8, 0x08, 0xd4, 0x08, 0xe4, 0x08, + 0xe8, 0x08, 0xf6, 0x08, 0x14, 0x09, 0x12, 0x09, + 0x1a, 0x09, 0x20, 0x09, 0x26, 0x09, 0x24, 0x09, + 0x2a, 0x09, 0x3e, 0x09, 0x4c, 0x09, 0x56, 0x09, + 0x70, 0x09, 0x74, 0x09, 0x78, 0x09, 0x7e, 0x09, + 0x7c, 0x09, 0x82, 0x09, 0x98, 0x09, 0x9c, 0x09, + 0xa0, 0x09, 0xa6, 0x09, 0xb8, 0x09, 0xdc, 0x09, + 0xe8, 0x09, 0xec, 0x09, 0xfc, 0x09, 0x12, 0x0a, + 0x18, 0x0a, 0x1e, 0x0a, 0x42, 0x0a, 0x46, 0x0a, + 0x4e, 0x0a, 0x54, 0x0a, 0x5a, 0x0a, 0x5e, 0x0a, + 0x68, 0x0a, 0x6e, 0x0a, 0x72, 0x0a, 0x78, 0x0a, + 0x76, 0x0a, 0x7c, 0x0a, 0x80, 0x0a, 0x84, 0x0a, + 0x94, 0x0a, 0xa4, 0x0a, 0xb8, 0x0a, 0xbe, 0x0a, + 0xbc, 0x0a, 0xc2, 0x0a, 0xc8, 0x0a, 0xc6, 0x0a, + 0xcc, 0x0a, 0xd0, 0x0a, 0xd4, 0x0a, 0xd8, 0x0a, + 0xdc, 0x0a, 0xe0, 0x0a, 0xf2, 0x0a, 0xf6, 0x0a, + 0xfa, 0x0a, 0x14, 0x0b, 0x1a, 0x0b, 0x20, 0x0b, + 0x1e, 0x0b, 0x26, 0x0b, 0x2e, 0x0b, 0x2c, 0x0b, + 0x36, 0x0b, 0x3c, 0x0b, 0x42, 0x0b, 0x40, 0x0b, + 0x4a, 0x0b, 0xaa, 0x0b, 0xb0, 0x0b, 0xb6, 0x0b, + 0xc0, 0x0b, 0xc8, 0x0b, 0xda, 0x0b, 0xe8, 0x0b, + 0xec, 0x0b, 0xfa, 0x0b, 0x4a, 0x0c, 0x54, 0x0c, + 0x62, 0x0c, 0x66, 0x0c, 0x96, 0x0c, 0x9a, 0x0c, + 0xa0, 0x0c, 0xa6, 0x0c, 0xa4, 0x0c, 0xac, 0x0c, + 0xb2, 0x0c, 0xb0, 0x0c, 0xc0, 0x0c, + 0x00, 0x00 +}; + + +const int len_kaweth_trigger_code = sizeof(kaweth_trigger_code); +const int len_kaweth_trigger_code_fix = sizeof(kaweth_trigger_code_fix); +const int len_kaweth_new_code = sizeof(kaweth_new_code); +const int len_kaweth_new_code_fix = sizeof(kaweth_new_code_fix); diff -u --recursive --new-file v2.4.8/linux/drivers/usb/pwc-ctrl.c linux/drivers/usb/pwc-ctrl.c --- v2.4.8/linux/drivers/usb/pwc-ctrl.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/usb/pwc-ctrl.c Sun Aug 12 10:51:42 2001 @@ -137,7 +137,7 @@ #include "pwc_timon.h" }; -/* Entries for the Kiara (730/740) camera */ +/* Entries for the Kiara (730/740/750) camera */ struct Kiara_table_entry { @@ -412,6 +412,7 @@ case 730: case 740: + case 750: ret = set_video_mode_Kiara(pdev, size, frames, compression, snapshot); break; } @@ -427,7 +428,6 @@ pdev->view.y = height; pwc_set_image_buffer_size(pdev); Trace(TRACE_SIZE, "Set viewport to %dx%d, image size is %dx%d, palette = %d.\n", width, height, pwc_image_sizes[size].x, pwc_image_sizes[size].y, pdev->vpalette); -Debug("bandlength = %d\n", pdev->vbandlength); return 0; } @@ -752,6 +752,7 @@ break; case 730: case 740: + case 750: /* speed seems to range from 0x0 to 0xff */ buf[1] = 0; buf[0] = value >> 8; diff -u --recursive --new-file v2.4.8/linux/drivers/usb/pwc-if.c linux/drivers/usb/pwc-if.c --- v2.4.8/linux/drivers/usb/pwc-if.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/usb/pwc-if.c Sun Aug 12 10:51:42 2001 @@ -66,6 +66,7 @@ { USB_DEVICE(0x0471, 0x030C) }, { USB_DEVICE(0x0471, 0x0310) }, { USB_DEVICE(0x0471, 0x0311) }, + { USB_DEVICE(0x0471, 0x0312) }, { USB_DEVICE(0x069A, 0x0001) }, { } }; @@ -84,10 +85,10 @@ static int default_size = PSZ_QCIF; static int default_fps = 10; -static int default_palette = VIDEO_PALETTE_YUV420P; /* This format is understood by most tools */ +static int default_palette = VIDEO_PALETTE_YUV420P; /* This is normal for webcams */ static int default_fbufs = 3; /* Default number of frame buffers */ static int default_mbufs = 2; /* Default number of mmap() buffers */ - int pwc_trace = TRACE_MODULE | TRACE_FLOW | TRACE_PWCX; + int pwc_trace = TRACE_MODULE | TRACE_FLOW; static int power_save = 0; int pwc_preferred_compression = 2; /* 0..3 = uncompressed..high */ @@ -977,7 +978,7 @@ /* Set some defaults */ pdev->vsnapshot = 0; - if (pdev->type == 730 || pdev->type == 740) + if (pdev->type == 730 || pdev->type == 740 || pdev->type == 750) pdev->vsize = PSZ_QSIF; else pdev->vsize = PSZ_QCIF; @@ -990,7 +991,7 @@ i = pwc_set_video_mode(pdev, pwc_image_sizes[default_size].x, pwc_image_sizes[default_size].y, default_fps, pdev->vcompression, 0); if (i) { Trace(TRACE_OPEN, "First attempt at set_video_mode failed.\n"); - if (pdev->type == 730 || pdev->type == 740) + if (pdev->type == 730 || pdev->type == 740 || pdev->type == 750) i = pwc_set_video_mode(pdev, pwc_image_sizes[PSZ_QSIF].x, pwc_image_sizes[PSZ_QSIF].y, 10, pdev->vcompression, 0); else i = pwc_set_video_mode(pdev, pwc_image_sizes[PSZ_QCIF].x, pwc_image_sizes[PSZ_QCIF].y, 10, pdev->vcompression, 0); @@ -1490,7 +1491,49 @@ return -EFAULT; break; } - + + case VIDIOCGAUDIO: + { + struct video_audio v; + + strcpy(v.name, "Microphone"); + v.audio = -1; /* unknown audio minor */ + v.flags = 0; + v.mode = VIDEO_SOUND_MONO; + v.volume = 0; + v.bass = 0; + v.treble = 0; + v.balance = 0x8000; + v.step = 1; + + if (copy_to_user(arg, &v, sizeof(v))) + return -EFAULT; + break; + } + + case VIDIOCSAUDIO: + { + struct video_audio v; + + if (copy_from_user(&v, arg, sizeof(v))) + return -EFAULT; + /* Dummy: nothing can be set */ + break; + } + + case VIDIOCGUNIT: + { + struct video_unit vu; + + vu.video = pdev->vdev->minor & 0x3F; + vu.audio = -1; /* not known yet */ + vu.vbi = -1; + vu.radio = -1; + vu.teletext = -1; + if (copy_to_user(arg, &vu, sizeof(vu))) + return -EFAULT; + break; + } default: return pwc_ioctl(pdev, cmd, arg); } /* ..switch */ @@ -1536,8 +1579,6 @@ { struct pwc_device *pdev = NULL; struct video_device *vdev; - struct usb_config_descriptor *config; - struct usb_interface *iface; int vendor_id, product_id, type_id; int i; @@ -1579,7 +1620,7 @@ type_id = 680; break; case 0x030C: - Info("Philips PCVC690K (Vesta Scanner) USB webcam detected.\n"); + Info("Philips PCVC690K (Vesta Pro Scan) USB webcam detected.\n"); type_id = 690; break; case 0x0310: @@ -1590,6 +1631,10 @@ Info("Philips PCVC740K (ToUCam Pro) USB webcam detected.\n"); type_id = 740; break; + case 0x0312: + Info("Philips PCVC750K (ToUCam Pro Scan) USB webcam detected.\n"); + type_id = 750; + break; default: return NULL; break; @@ -1611,9 +1656,6 @@ if (udev->descriptor.bNumConfigurations > 1) Info("Warning: more than 1 configuration available.\n"); - config = udev->actconfig; - iface = &config->interface[0]; - /* Allocate structure, initialize pointers, mutexes, etc. and link it to the usb_device */ pdev = kmalloc(sizeof(struct pwc_device), GFP_KERNEL); if (pdev == NULL) { @@ -1771,7 +1813,7 @@ int s; char *sizenames[PSZ_MAX] = { "sqcif", "qsif", "qcif", "sif", "cif", "vga" }; - Info("Philips PCA645/646 + PCVC675/680/690 + PCVC730/740 webcam module version " PWC_VERSION " loaded.\n"); + Info("Philips PCA645/646 + PCVC675/680/690 + PCVC730/740/750 webcam module version " PWC_VERSION " loaded.\n"); Info("Also supports Askey VC010 cam.\n"); if (fps) { @@ -1801,10 +1843,12 @@ /* Determine default palette */ if (!strcmp(palette, "yuv420")) default_palette = VIDEO_PALETTE_YUV420; - if (!strcmp(palette, "yuv420p")) + else if (!strcmp(palette, "yuv420p")) default_palette = VIDEO_PALETTE_YUV420P; else { Err("Palette not recognized: try palette=yuv420 or yuv420p.\n"); + Info("Download the driver from http://www.smcc.demon.nl/webcam/ for in kernel\n"); + Info("format conversion support.\n"); return -EINVAL; } Info("Default palette set to %d.\n", default_palette); diff -u --recursive --new-file v2.4.8/linux/drivers/usb/pwc-misc.c linux/drivers/usb/pwc-misc.c --- v2.4.8/linux/drivers/usb/pwc-misc.c Tue May 22 10:25:36 2001 +++ linux/drivers/usb/pwc-misc.c Sun Aug 12 10:51:42 2001 @@ -83,6 +83,7 @@ break; case 730: case 740: + case 750: pdev->view_min.x = 160; pdev->view_min.y = 120; pdev->view_max.x = 640; diff -u --recursive --new-file v2.4.8/linux/drivers/usb/pwc.h linux/drivers/usb/pwc.h --- v2.4.8/linux/drivers/usb/pwc.h Tue Jul 3 17:08:21 2001 +++ linux/drivers/usb/pwc.h Sun Aug 12 10:51:42 2001 @@ -58,8 +58,8 @@ /* Version block */ #define PWC_MAJOR 8 -#define PWC_MINOR 0 -#define PWC_VERSION "8.0" +#define PWC_MINOR 1 +#define PWC_VERSION "8.1" #define PWC_NAME "pwc" /* Turn certain features on/off */ @@ -138,7 +138,7 @@ int vbandlength; /* compressed band length; 0 is uncompressed */ char vsnapshot; /* snapshot mode */ char vsync; /* used by isoc handler */ - + /* The image acquisition requires 3 to 4 steps: 1. data is gathered in short packets from the USB controller 2. data is synchronized and packed into a frame buffer @@ -157,7 +157,7 @@ struct pwc_frame_buf *fbuf; /* all frames */ struct pwc_frame_buf *empty_frames, *empty_frames_tail; /* all empty frames */ struct pwc_frame_buf *full_frames, *full_frames_tail; /* all filled frames */ - struct pwc_frame_buf *fill_frame; /* frame currently filled */ + struct pwc_frame_buf *fill_frame; /* frame currently being filled */ struct pwc_frame_buf *read_frame; /* frame currently read by user process */ int frame_size; int frame_header_size, frame_trailer_size; diff -u --recursive --new-file v2.4.8/linux/drivers/usb/serial/io_usbvend.h linux/drivers/usb/serial/io_usbvend.h --- v2.4.8/linux/drivers/usb/serial/io_usbvend.h Mon Mar 19 17:21:54 2001 +++ linux/drivers/usb/serial/io_usbvend.h Wed Aug 15 01:22:16 2001 @@ -115,7 +115,7 @@ // TxCredits value below which driver won't bother sending (to prevent too many small writes). // Send only if above 25% -#define EDGE_FW_GET_TX_CREDITS_SEND_THRESHOLD(InitialCredit) (max( ((InitialCredit) / 4), EDGE_FW_BULK_MAX_PACKET_SIZE )) +#define EDGE_FW_GET_TX_CREDITS_SEND_THRESHOLD(InitialCredit) (max(int, ((InitialCredit) / 4), EDGE_FW_BULK_MAX_PACKET_SIZE)) #define EDGE_FW_BULK_MAX_PACKET_SIZE 64 // Max Packet Size for Bulk In Endpoint (EP1) #define EDGE_FW_BULK_READ_BUFFER_SIZE 1024 // Size to use for Bulk reads diff -u --recursive --new-file v2.4.8/linux/drivers/usb/storage/datafab.c linux/drivers/usb/storage/datafab.c --- v2.4.8/linux/drivers/usb/storage/datafab.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/usb/storage/datafab.c Wed Aug 15 01:22:16 2001 @@ -204,7 +204,7 @@ do { // loop, never allocate or transfer more than 64k at once (min(128k, 255*info->ssize) is the real limit) - len = min(totallen, 65536); + len = min(int, totallen, 65536); if (use_sg) { sg = (struct scatterlist *) dest; @@ -329,7 +329,7 @@ do { // loop, never allocate or transfer more than 64k at once (min(128k, 255*info->ssize) is the real limit) - len = min(totallen, 65536); + len = min(int, totallen, 65536); if (use_sg) { sg = (struct scatterlist *) src; diff -u --recursive --new-file v2.4.8/linux/drivers/usb/storage/datafab.h linux/drivers/usb/storage/datafab.h --- v2.4.8/linux/drivers/usb/storage/datafab.h Sun Aug 12 13:28:00 2001 +++ linux/drivers/usb/storage/datafab.h Wed Aug 15 01:22:16 2001 @@ -24,8 +24,6 @@ #ifndef _USB_DATAFAB_MDCFE_B_H #define _USB_DATAFAB_MDCFE_B_H -#define min(a,b) (((a)<(b))?(a):(b)) // this is defined in tons of header files, i wish it had a standard single definition... - extern int datafab_transport(Scsi_Cmnd *srb, struct us_data *us); struct datafab_info { diff -u --recursive --new-file v2.4.8/linux/drivers/usb/storage/jumpshot.c linux/drivers/usb/storage/jumpshot.c --- v2.4.8/linux/drivers/usb/storage/jumpshot.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/usb/storage/jumpshot.c Wed Aug 15 01:22:16 2001 @@ -280,7 +280,7 @@ do { // loop, never allocate or transfer more than 64k at once (min(128k, 255*info->ssize) is the real limit) - len = min(totallen, 65536); + len = min(int, totallen, 65536); if (use_sg) { sg = (struct scatterlist *) dest; @@ -395,7 +395,7 @@ do { // loop, never allocate or transfer more than 64k at once (min(128k, 255*info->ssize) is the real limit) - len = min(totallen, 65536); + len = min(int, totallen, 65536); if (use_sg) { sg = (struct scatterlist *) src; diff -u --recursive --new-file v2.4.8/linux/drivers/usb/storage/jumpshot.h linux/drivers/usb/storage/jumpshot.h --- v2.4.8/linux/drivers/usb/storage/jumpshot.h Sun Aug 12 13:28:00 2001 +++ linux/drivers/usb/storage/jumpshot.h Wed Aug 15 01:22:16 2001 @@ -24,8 +24,6 @@ #ifndef _USB_JUMPSHOT_H #define _USB_JUMPSHOT_H -#define min(a,b) (((a)<(b))?(a):(b)) // this is defined in tons of header files, i wish it had a standar single definition... - extern int jumpshot_transport(Scsi_Cmnd *srb, struct us_data *us); struct jumpshot_info { diff -u --recursive --new-file v2.4.8/linux/drivers/usb/storage/scsiglue.c linux/drivers/usb/storage/scsiglue.c --- v2.4.8/linux/drivers/usb/storage/scsiglue.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/usb/storage/scsiglue.c Sun Aug 12 13:54:53 2001 @@ -249,7 +249,7 @@ for (i = 0; i < us->pusb_dev->actconfig->bNumInterfaces; i++) { struct usb_interface *intf = &us->pusb_dev->actconfig->interface[i]; - struct usb_device_id *id; + const struct usb_device_id *id; /* if this is an unclaimed interface, skip it */ if (!intf->driver) { diff -u --recursive --new-file v2.4.8/linux/drivers/usb/uhci.c linux/drivers/usb/uhci.c --- v2.4.8/linux/drivers/usb/uhci.c Wed Jul 25 17:10:24 2001 +++ linux/drivers/usb/uhci.c Wed Aug 15 01:22:16 2001 @@ -98,8 +98,6 @@ static void suspend_hc(struct uhci *uhci); static void wakeup_hc(struct uhci *uhci); -#define min(a,b) (((a)<(b))?(a):(b)) - /* If a transfer is still active after this much time, turn off FSBR */ #define IDLE_TIMEOUT (HZ / 20) /* 50 ms */ @@ -2133,11 +2131,15 @@ case RH_GET_DESCRIPTOR: switch ((wValue & 0xff00) >> 8) { case 0x01: /* device descriptor */ - len = min(leni, min(sizeof(root_hub_dev_des), wLength)); + len = min(unsigned int, leni, + min(unsigned int, + sizeof(root_hub_dev_des), wLength)); memcpy(data, root_hub_dev_des, len); OK(len); case 0x02: /* configuration descriptor */ - len = min(leni, min(sizeof(root_hub_config_des), wLength)); + len = min(unsigned int, leni, + min(unsigned int, + sizeof(root_hub_config_des), wLength)); memcpy (data, root_hub_config_des, len); OK(len); case 0x03: /* string descriptors */ @@ -2145,14 +2147,15 @@ uhci->io_addr, "UHCI-alt", data, wLength); if (len > 0) { - OK (min (leni, len)); + OK(min(int, leni, len)); } else stat = -EPIPE; } break; case RH_GET_DESCRIPTOR | RH_CLASS: root_hub_hub_des[2] = uhci->rh.numports; - len = min(leni, min(sizeof(root_hub_hub_des), wLength)); + len = min(unsigned int, leni, + min(unsigned int, sizeof(root_hub_hub_des), wLength)); memcpy(data, root_hub_hub_des, len); OK(len); case RH_GET_CONFIGURATION: diff -u --recursive --new-file v2.4.8/linux/drivers/usb/usb-ohci.c linux/drivers/usb/usb-ohci.c --- v2.4.8/linux/drivers/usb/usb-ohci.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/usb/usb-ohci.c Wed Aug 15 01:22:16 2001 @@ -1805,7 +1805,9 @@ len = i/8 + 1; if (ret > 0) { - memcpy (rh_data, data, min (len, min (rh_len, sizeof(data)))); + memcpy(rh_data, data, + min(unsigned int, len, + min(unsigned int, rh_len, sizeof(data)))); return len; } return 0; @@ -1987,10 +1989,18 @@ case RH_GET_DESCRIPTOR: switch ((wValue & 0xff00) >> 8) { case (0x01): /* device descriptor */ - len = min (leni, min (sizeof (root_hub_dev_des), wLength)); + len = min(unsigned int, + leni, + min(unsigned int, + sizeof (root_hub_dev_des), + wLength)); data_buf = root_hub_dev_des; OK(len); case (0x02): /* configuration descriptor */ - len = min (leni, min (sizeof (root_hub_config_des), wLength)); + len = min(unsigned int, + leni, + min(unsigned int, + sizeof (root_hub_config_des), + wLength)); data_buf = root_hub_config_des; OK(len); case (0x03): /* string descriptors */ len = usb_root_hub_string (wValue & 0xff, @@ -1998,7 +2008,7 @@ data, wLength); if (len > 0) { data_buf = data; - OK (min (leni, len)); + OK(min(int, leni, len)); } // else fallthrough default: @@ -2033,7 +2043,8 @@ data_buf [10] = data_buf [9] = 0xff; } - len = min (leni, min (data_buf [0], wLength)); + len = min(unsigned int, leni, + min(unsigned int, data_buf [0], wLength)); OK (len); } @@ -2050,7 +2061,7 @@ // ohci_dump_roothub (ohci, 0); #endif - len = min(len, leni); + len = min(int, len, leni); if (data != data_buf) memcpy (data, data_buf, len); urb->actual_length = len; diff -u --recursive --new-file v2.4.8/linux/drivers/usb/usb-ohci.h linux/drivers/usb/usb-ohci.h --- v2.4.8/linux/drivers/usb/usb-ohci.h Sun Aug 12 13:28:00 2001 +++ linux/drivers/usb/usb-ohci.h Wed Aug 15 01:22:16 2001 @@ -329,9 +329,6 @@ #define RH_A_NOCP (1 << 12) /* no over current protection */ #define RH_A_POTPGT (0xff << 24) /* power on to power good time */ -#define min(a,b) (((a)<(b))?(a):(b)) - - /* urb */ typedef struct { diff -u --recursive --new-file v2.4.8/linux/drivers/usb/usb-uhci.c linux/drivers/usb/usb-uhci.c --- v2.4.8/linux/drivers/usb/usb-uhci.c Tue Jul 3 17:08:21 2001 +++ linux/drivers/usb/usb-uhci.c Wed Aug 15 01:22:16 2001 @@ -2159,11 +2159,15 @@ case RH_GET_DESCRIPTOR: switch ((wValue & 0xff00) >> 8) { case (0x01): /* device descriptor */ - len = min (leni, min (sizeof (root_hub_dev_des), wLength)); + len = min(unsigned int, leni, + min(unsigned int, + sizeof (root_hub_dev_des), wLength)); memcpy (data, root_hub_dev_des, len); OK (len); case (0x02): /* configuration descriptor */ - len = min (leni, min (sizeof (root_hub_config_des), wLength)); + len = min(unsigned int, leni, + min(unsigned int, + sizeof (root_hub_config_des), wLength)); memcpy (data, root_hub_config_des, len); OK (len); case (0x03): /* string descriptors */ @@ -2171,7 +2175,7 @@ uhci->io_addr, "UHCI", data, wLength); if (len > 0) { - OK (min (leni, len)); + OK(min(int, leni, len)); } else stat = -EPIPE; } @@ -2179,7 +2183,8 @@ case RH_GET_DESCRIPTOR | RH_CLASS: root_hub_hub_des[2] = uhci->rh.numports; - len = min (leni, min (sizeof (root_hub_hub_des), wLength)); + len = min(unsigned int, leni, + min(unsigned int, sizeof (root_hub_hub_des), wLength)); memcpy (data, root_hub_hub_des, len); OK (len); diff -u --recursive --new-file v2.4.8/linux/drivers/usb/usb-uhci.h linux/drivers/usb/usb-uhci.h --- v2.4.8/linux/drivers/usb/usb-uhci.h Wed May 16 10:31:27 2001 +++ linux/drivers/usb/usb-uhci.h Wed Aug 15 01:22:16 2001 @@ -282,6 +282,4 @@ #define RH_REQ_ERR -1 #define RH_NACK 0x00 -#define min(a,b) (((a)<(b))?(a):(b)) - #endif diff -u --recursive --new-file v2.4.8/linux/drivers/video/acornfb.c linux/drivers/video/acornfb.c --- v2.4.8/linux/drivers/video/acornfb.c Wed Apr 18 11:49:12 2001 +++ linux/drivers/video/acornfb.c Sun Aug 12 17:37:53 2001 @@ -1,7 +1,7 @@ /* * linux/drivers/video/acornfb.c * - * Copyright (C) 1998-2000 Russell King + * Copyright (C) 1998-2001 Russell King * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -30,6 +30,7 @@ #include #include #include +#include #include #include