From 9a8827cda3fe5df33f588744ae092a37cac22b7c Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 23 Nov 2007 15:30:06 -0500 Subject: [PATCH] Import 2.3.40pre1 --- Documentation/Configure.help | 380 ++++---- Documentation/fb/framebuffer.txt | 4 +- Documentation/filesystems/cramfs.txt | 40 + Documentation/kernel-parameters.txt | 446 ++++----- Documentation/usb/CREDITS | 4 + Makefile | 2 +- arch/alpha/config.in | 4 + arch/alpha/defconfig | 91 +- arch/alpha/kernel/osf_sys.c | 3 +- arch/alpha/kernel/pci.c | 16 +- arch/alpha/mm/init.c | 3 +- arch/i386/config.in | 4 + arch/i386/defconfig | 1 + arch/i386/kernel/acpi.c | 123 ++- arch/i386/kernel/pci-i386.c | 87 +- arch/i386/kernel/pci-pc.c | 16 +- arch/i386/kernel/smp.c | 1 - arch/i386/kernel/traps.c | 2 +- arch/i386/vmlinux.lds | 6 + arch/ppc/kernel/ppc4xx_pic.c | 1 - drivers/char/tty_io.c | 2 +- drivers/char/vc_screen.c | 2 +- drivers/net/oaknet.c | 2 - drivers/net/pcmcia/tulip_cb.c | 108 +-- drivers/pci/Makefile | 4 +- drivers/pci/pci.c | 45 +- drivers/pci/pcisyms.c | 7 +- drivers/pci/{setup.c => setup-bus.c} | 177 +--- drivers/pci/setup-irq.c | 71 ++ drivers/pci/setup-res.c | 165 ++++ drivers/pcmcia/cardbus.c | 39 +- drivers/pcmcia/cs.c | 6 +- drivers/pcmcia/i82365.c | 2 - drivers/pcmcia/pci_socket.c | 5 +- drivers/pcmcia/pci_socket.h | 4 +- drivers/pcmcia/ricoh.h | 70 +- drivers/pcmcia/ti113x.h | 124 ++- drivers/pcmcia/yenta.c | 119 ++- drivers/pnp/quirks.c | 2 + drivers/usb/Config.in | 2 +- drivers/usb/acm.c | 18 +- drivers/usb/usb-serial.c | 243 ++++- drivers/usb/usb.c | 2 - drivers/usb/usbdevice_fs.h | 1 - drivers/usb/whiteheat.h | 1241 ++++++++++++++++++++++++++ fs/cramfs/README | 166 ++++ fs/cramfs/cramfs.h | 27 +- fs/cramfs/inode.c | 156 ++-- fs/cramfs/uncompress.c | 19 +- fs/ext2/file.c | 6 +- fs/lockd/xdr.c | 4 +- fs/nfs/inode.c | 2 +- fs/nfsd/export.c | 8 +- fs/nfsd/nfsfh.c | 2 +- fs/proc/generic.c | 6 +- fs/ufs/super.c | 44 +- include/asm-alpha/core_cia.h | 41 +- include/asm-alpha/core_pyxis.h | 17 + include/asm-alpha/pci.h | 5 + include/asm-i386/hardirq.h | 1 + include/asm-i386/pci.h | 3 + include/asm-i386/smplock.h | 2 + include/linux/acpi.h | 28 + include/linux/fs.h | 2 - include/linux/init.h | 16 +- include/linux/mm.h | 42 +- include/linux/module.h | 5 + include/linux/pci.h | 14 +- include/linux/pci_ids.h | 1 + include/linux/types.h | 8 +- include/pcmcia/cs.h | 3 +- ipc/msg.c | 4 +- ipc/sem.c | 4 +- ipc/shm.c | 144 ++- kernel/signal.c | 13 +- mm/filemap.c | 20 +- net/ipv4/route.c | 5 +- net/socket.c | 4 +- net/sunrpc/svcsock.c | 12 +- scripts/cramfs/GNUmakefile | 11 + scripts/cramfs/mkcramfs.c | 381 ++++++-- 81 files changed, 3616 insertions(+), 1305 deletions(-) rename drivers/pci/{setup.c => setup-bus.c} (52%) create mode 100644 drivers/pci/setup-irq.c create mode 100644 drivers/pci/setup-res.c create mode 100644 drivers/usb/whiteheat.h create mode 100644 fs/cramfs/README create mode 100644 scripts/cramfs/GNUmakefile diff --git a/Documentation/Configure.help b/Documentation/Configure.help index 534a23975edf..8725dcb62da8 100644 --- a/Documentation/Configure.help +++ b/Documentation/Configure.help @@ -29,7 +29,7 @@ # # Information about what a kernel is, what it does, how to patch and # compile it and much more is contained in the Kernel-HOWTO, available -# at http://metalab.unc.edu/mdw/linux.html#howto . Before you start +# at http://www.linuxdoc.org/docs.html#howto . Before you start # compiling, make sure that you have the necessary versions of all # programs and libraries required to compile and run this kernel; they # are listed in the file Documentation/Changes. Make sure to read the @@ -134,7 +134,7 @@ CONFIG_MATH_EMULATION is broken. Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto .) This + available from http://www.linuxdoc.org/docs.html#howto .) This means that it is a good idea to say Y here if you intend to use this kernel on different machines. @@ -326,7 +326,7 @@ CONFIG_BLK_DEV_IDE detected, sound card IDE ports, module support, and other topics, is contained in Documentation/ide.txt. For detailed information about hard drives, consult the Disk-HOWTO and the Multi-Disk-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . To fine-tune IDE drive/interface parameters for improved performance, look for the hdparm package at @@ -359,7 +359,7 @@ CONFIG_BLK_DEV_HD_ONLY If you are unsure, then just choose the Enhanced IDE/MFM/RLL driver instead of this one. For more detailed information, read the Disk-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . People with SCSI-only systems can say N here. @@ -420,7 +420,7 @@ CONFIG_BLK_DEV_IDECD to say Y or M to "ISO 9660 CDROM filesystem support". Read the CDROM-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto and the file + http://www.linuxdoc.org/docs.html#howto and the file Documentation/cdrom/ide-cd. Note that older versions of lilo (the Linux boot loader) cannot properly deal with IDE/ATAPI CDROMs, so install lilo-16 or higher, available from @@ -521,7 +521,7 @@ CONFIG_BLK_DEV_CMD640 bootparam" or see the documentation of your boot loader about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto .) + http://www.linuxdoc.org/docs.html#howto .) The CMD640 chip is also used on add-in cards by Acculogic, and on the "CSA-6400E PCI to IDE controller" that some people have. For @@ -603,7 +603,7 @@ CONFIG_BLK_DEV_OFFBOARD documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto .) + http://www.linuxdoc.org/docs.html#howto .) Note that, if you do this, the order of the hd* devices will be rearranged which may require modification of fstab and other files. @@ -1237,7 +1237,7 @@ CONFIG_BLK_DEV_MD More information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . There you will also + http://www.linuxdoc.org/docs.html#howto . There you will also learn where to get the supporting user space utilities raidtools. If unsure, say N. @@ -1265,7 +1265,7 @@ CONFIG_MD_STRIPED Information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . There you will also + http://www.linuxdoc.org/docs.html#howto . There you will also learn where to get the supporting user space utilities raidtools. If you want to compile this as a module ( = code which can be @@ -1287,7 +1287,7 @@ CONFIG_MD_MIRRORING Information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . There you will also + http://www.linuxdoc.org/docs.html#howto . There you will also learn where to get the supporting user space utilities raidtools. If you want to use such a RAID-1 set, say Y. This code is also @@ -1310,7 +1310,7 @@ CONFIG_MD_RAID5 Information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . There you will also + http://www.linuxdoc.org/docs.html#howto . There you will also learn where to get the supporting user space utilities raidtools. If you want to use such a RAID-4/RAID-5 set, say Y. This code is @@ -1416,7 +1416,7 @@ CONFIG_NET For a general introduction to Linux networking, it is highly recommended to read the NET-3-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Socket filtering CONFIG_FILTER @@ -1623,7 +1623,7 @@ CONFIG_SERIAL_MANY_PORTS Say Y here if you have dumb serial boards other than the four standard COM 1/2/3/4 ports. This may happen if you have an AST FourPort, Accent Async, Boca (read the Boca mini-HOWTO, available - from http://metalab.unc.edu/mdw/linux.html#howto ), or other custom + from http://www.linuxdoc.org/docs.html#howto ), or other custom serial port hardware which acts similar to standard serial port hardware. If you only use the standard COM 1/2/3/4 ports, you can say N here to save some memory. You can also say Y if you have an @@ -1700,7 +1700,7 @@ CONFIG_PCI VESA. If you have PCI, say Y, otherwise N. The PCI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , contains valuable + http://www.linuxdoc.org/docs.html#howto , contains valuable information about which PCI hardware does work under Linux and which doesn't. @@ -1901,12 +1901,12 @@ CONFIG_SYSVIPC and some programs won't run unless you say Y here. In particular, if you want to run the DOS emulator dosemu under Linux (read the DOSEMU-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto ), you'll need to say Y + http://www.linuxdoc.org/docs.html#howto ), you'll need to say Y here. You can find documentation about IPC with "info ipc" and also in section 6.4 of the Linux Programmer's Guide, available from - http://metalab.unc.edu/mdw/linux.html#guide . + http://www.linuxdoc.org/docs.html#guide . Saying Y here enlarges your kernel by about 18 KB. Just say Y. @@ -1968,7 +1968,7 @@ CONFIG_BINFMT_ELF want to say Y here. Information about ELF is contained in the ELF HOWTO available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you find that after upgrading from Linux kernel 1.2 and saying Y here, you still can't run any ELF binaries (they just crash), then @@ -2023,7 +2023,7 @@ CONFIG_BINFMT_MISC programs that need an interpreter to run like Java, Python or Emacs-Lisp. It's also useful if you often run DOS executables under the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto ). Once you have + http://www.linuxdoc.org/docs.html#howto ). Once you have registered such a binary class with the kernel, you can start one of those programs simply by typing in its name at a shell prompt; Linux will automatically feed it to the correct interpreter. @@ -2101,7 +2101,7 @@ CONFIG_VIDEO_SELECT "man bootparam" or see the documentation of your boot loader about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto .) + http://www.linuxdoc.org/docs.html#howto .) Read the file Documentation/svga.txt for more information about the Video mode selection support. If unsure, say N. @@ -2686,7 +2686,7 @@ CONFIG_INET For an excellent introduction to Linux networking, please read the NET-3-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This option is also necessary if you want to use the full power of term (term is a program which gives you almost full Internet @@ -2914,7 +2914,7 @@ CONFIG_IP_ALIAS connect to you. This is called "multihosting" or "virtual domains" or "virtual hosting services" and is explained in the Virtual-Services-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Another scenario would be that there are two logical networks living on your local Ethernet and you want to access them both with the @@ -3088,7 +3088,7 @@ CONFIG_IPX Novell client ncpfs (available from ftp://metalab.unc.edu/pub/Linux/system/filesystems/ ) or from within the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto ). In order to do the + http://www.linuxdoc.org/docs.html#howto ). In order to do the former, you'll also have to say Y to "NCP filesystem support", below. @@ -3101,7 +3101,7 @@ CONFIG_IPX ftp://metalab.unc.edu/pub/Linux/system/network/daemons/ or mars_nwe from ftp://ftp.gwdg.de/pub/linux/misc/ncpfs . For more information, read the IPX-HOWTO available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html . @@ -3122,7 +3122,7 @@ CONFIG_IPX_INTERN same address). The way this is done is to create a virtual internal "network" inside your box and to assign an IPX address to this network. Say Y here if you want to do this; read the IPX-HOWTO at - http://metalab.unc.edu/mdw/linux.html#howto for details. + http://www.linuxdoc.org/docs.html#howto for details. The full internal IPX network enables you to allocate sockets on different virtual nodes of the internal network. This is done by @@ -3152,7 +3152,7 @@ CONFIG_SPX space programs lwared or mars_nwe for the server side). Say Y here if you have use for SPX; read the IPX-HOWTO at - http://metalab.unc.edu/mdw/linux.html#howto for details. + http://www.linuxdoc.org/docs.html#howto for details. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -3221,7 +3221,7 @@ CONFIG_ATALK General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html The NET-3-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , contains valuable + http://www.linuxdoc.org/docs.html#howto , contains valuable information as well. This driver is also available as a module ( = code which can be @@ -3309,7 +3309,7 @@ CONFIG_HAMRADIO If you want to connect your Linux box to an amateur radio, answer Y here. You want to read http://www.tapr.org/tapr/html/pkthome.html and the HAM-HOWTO and the AX25-HOWTO, both available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all @@ -3333,7 +3333,7 @@ CONFIG_AX25 Information about where to get supporting software for Linux amateur radio as well as information about how to configure an AX.25 port is contained in the AX25-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . You might also want to + http://www.linuxdoc.org/docs.html#howto . You might also want to check out the file Documentation/networking/ax25.txt in the kernel source. More information about digital amateur radio in general is on the WWW at http://www.tapr.org/tapr/html/pkthome.html . @@ -3369,7 +3369,7 @@ CONFIG_NETROM A comprehensive listing of all the software for Linux amateur radio users as well as information about how to configure an AX.25 port is contained in the AX25-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . You also might want to + http://www.linuxdoc.org/docs.html#howto . You also might want to check out the file Documentation/networking/ax25.txt. More information about digital amateur radio in general is on the WWW at http://www.tapr.org/tapr/html/pkthome.html . @@ -3388,7 +3388,7 @@ CONFIG_ROSE A comprehensive listing of all the software for Linux amateur radio users as well as information about how to configure an AX.25 port is contained in the AX25-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . You also might want to + http://www.linuxdoc.org/docs.html#howto . You also might want to check out the file Documentation/networking/ax25.txt. More information about digital amateur radio in general is on the WWW at http://www.tapr.org/tapr/html/pkthome.html . @@ -3454,7 +3454,7 @@ CONFIG_DMASCC (http://www.paccomm.com/gracilis.html ) boards. They are detected automatically. If you have one of these cards, say Y here and read the AX25-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver can operate multiple boards simultaneously. If you compile it as a module (by saying M instead of Y), it will be called @@ -3477,7 +3477,7 @@ CONFIG_SCC These cards are used to connect your Linux box to an amateur radio in order to communicate with other computers. If you want to use this, read Documentation/networking/z8530drv.txt and the AX25-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . Also + available from http://www.linuxdoc.org/docs.html#howto . Also make sure to say Y to "Amateur Radio AX.25 Level 2" support. If you want to compile this as a module ( = code which can be @@ -3736,7 +3736,7 @@ CONFIG_BRIDGE as a bridge, it probably contains several Ethernet devices, but the kernel is not able to recognize more than one at boot time without help; for details read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . The Bridging code is still in test. If unsure, say N. @@ -4008,7 +4008,7 @@ CONFIG_SCSI port version of the 100 MB IOMEGA ZIP drive. Please read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . The + http://www.linuxdoc.org/docs.html#howto . The SCSI-Programming-HOWTO contains information about how to add or remove an SCSI device from a running Linux machine without rebooting. @@ -4026,7 +4026,7 @@ CONFIG_BLK_DEV_SD If you want to use a SCSI hard disk or the SCSI or parallel port version of the IOMEGA ZIP drive under Linux, say Y and read the SCSI-HOWTO, the Disk-HOWTO and the Multi-Disk-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . This is NOT for SCSI + http://www.linuxdoc.org/docs.html#howto . This is NOT for SCSI CDROMs. This driver is also available as a module ( = code which can be @@ -4042,7 +4042,7 @@ SCSI tape support CONFIG_CHR_DEV_ST If you want to use a SCSI tape drive under Linux, say Y and read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , and + http://www.linuxdoc.org/docs.html#howto , and drivers/scsi/README.st in the kernel source. This is NOT for SCSI CDROMs. @@ -4056,7 +4056,7 @@ SCSI CDROM support CONFIG_BLK_DEV_SR If you want to use a SCSI CDROM under Linux, say Y and read the SCSI-HOWTO and the CDROM-HOWTO at - http://metalab.unc.edu/mdw/linux.html#howto . Also make sure to say Y + http://www.linuxdoc.org/docs.html#howto . Also make sure to say Y or M to "ISO 9660 CDROM filesystem support" later. This driver is also available as a module ( = code which can be @@ -4084,7 +4084,7 @@ CONFIG_CHR_DEV_SG devices, it's possible that you'll have to write the driver software yourself, so have a look at the SCSI-HOWTO and at the SCSI-Programming-HOWTO, both available from - http://metalab.unc.edu/mdw/linux.html#howto . Please read the file + http://www.linuxdoc.org/docs.html#howto . Please read the file Documentation/scsi-generic.txt for more information. If you want to compile this as a module ( = code which can be @@ -4160,7 +4160,7 @@ CONFIG_SCSI_AHA152X must be manually specified in this case. It is explained in section 3.3 of the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . You might also want to + http://www.linuxdoc.org/docs.html#howto . You might also want to read the comments at the top of drivers/scsi/aha152x.c. This driver is also available as a module ( = code which can be @@ -4172,7 +4172,7 @@ Adaptec AHA1542 support CONFIG_SCSI_AHA1542 This is support for a SCSI host adapter. It is explained in section 3.4 of the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Note that Trantor was + http://www.linuxdoc.org/docs.html#howto . Note that Trantor was purchased by Adaptec, and some former Trantor products are being sold under the Adaptec name. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/aha1542.h. @@ -4186,7 +4186,7 @@ Adaptec AHA1740 support CONFIG_SCSI_AHA1740 This is support for a SCSI host adapter. It is explained in section 3.5 of the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . If it doesn't work out + http://www.linuxdoc.org/docs.html#howto . If it doesn't work out of the box, you may have to change some settings in drivers/scsi/aha1740.h. @@ -4221,7 +4221,7 @@ CONFIG_SCSI_AIC7XXX configuration options. You should read drivers/scsi/README.aic7xxx at a minimum before contacting the maintainer with any questions. The SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , can also be of great + http://www.linuxdoc.org/docs.html#howto , can also be of great help. If you want to compile this driver as a module ( = code which can be @@ -4334,7 +4334,7 @@ BusLogic SCSI support CONFIG_SCSI_BUSLOGIC This is support for BusLogic MultiMaster and FlashPoint SCSI Host Adapters. Consult the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , and the files + http://www.linuxdoc.org/docs.html#howto , and the files README.BusLogic and README.FlashPoint in drivers/scsi for more information. If this driver does not work correctly without modification, please contact the author, Leonard N. Zubkoff, by @@ -4357,7 +4357,7 @@ DTC3180/3280 SCSI support CONFIG_SCSI_DTC3280 This is support for DTC 3180/3280 SCSI Host Adapters. Please read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , and the file + http://www.linuxdoc.org/docs.html#howto , and the file drivers/scsi/README.dtc3x80. This driver is also available as a module ( = code which can be @@ -4374,7 +4374,7 @@ CONFIG_SCSI_EATA_DMA Note that this driver is obsolete; if you have one of the above SCSI Host Adapters, you should normally say N here and Y to "EATA ISA/EISA/PCI support", below. Please read the SCSI-HOWTO, available - from http://metalab.unc.edu/mdw/linux.html#howto . + from http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -4388,7 +4388,7 @@ CONFIG_SCSI_EATA_PIO host adapters could also use this driver but are discouraged from doing so, since this driver only supports hard disks and lacks numerous features. You might want to have a look at the SCSI-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -4402,7 +4402,7 @@ CONFIG_SCSI_U14_34F this hardware. If the driver doesn't work out of the box, you may have to change some settings in drivers/scsi/u14-34f.c. Read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Note that there is also + http://www.linuxdoc.org/docs.html#howto . Note that there is also another driver for the same hardware: "UltraStor SCSI support", below. You should say Y to both only if you want 24F support as well. @@ -4437,7 +4437,7 @@ CONFIG_SCSI_FUTURE_DOMAIN other adapters based on the Future Domain chipsets (Quantum ISA-200S, ISA-250MG; Adaptec AHA-2920A; and at least one IBM board). It is explained in section 3.7 of the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . NOTE: Newer Adaptec AHA-2920C boards use the Adaptec AIC-7850 chip and should use the aic7xxx driver ("Adaptec AIC7xxx chipset SCSI @@ -4467,7 +4467,7 @@ CONFIG_SCSI_GENERIC_NCR5380 This is the generic NCR family of SCSI controllers, not to be confused with the NCR 53c7 or 8xx controllers. It is explained in section 3.8 of the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . If it doesn't work out + http://www.linuxdoc.org/docs.html#howto . If it doesn't work out of the box, you may have to change some settings in drivers/scsi/g_NCR5380.h. @@ -4496,7 +4496,7 @@ CONFIG_SCSI_NCR53C7xx This is a driver for the 53c7 and 8xx NCR family of SCSI controllers, not to be confused with the NCR 5380 controllers. It is explained in section 3.8 of the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . If it doesn't work out + http://www.linuxdoc.org/docs.html#howto . If it doesn't work out of the box, you may have to change some settings in drivers/scsi/53c7,8xx.h. Please read drivers/scsi/README.ncr53c7xx for the available boot time command line options. @@ -4718,7 +4718,7 @@ CONFIG_SCSI_IBMMCA bootparam" or see the documentation of your boot loader about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -4796,7 +4796,7 @@ Initio 91XXU(W) SCSI support CONFIG_SCSI_INITIO This is support for the Initio 91XXU(W) SCSI host adapter. Please read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -4807,7 +4807,7 @@ PAS16 SCSI support CONFIG_SCSI_PAS16 This is support for a SCSI host adapter. It is explained in section 3.10 of the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . If it doesn't work out + http://www.linuxdoc.org/docs.html#howto . If it doesn't work out of the box, you may have to change some settings in drivers/scsi/pas16.h. @@ -4820,7 +4820,7 @@ Initio INI-A100U2W SCSI support CONFIG_SCSI_INIA100 This is support for the Initio INI-A100U2W SCSI host adapter. Please read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -4831,7 +4831,7 @@ PCI2000 support CONFIG_SCSI_PCI2000 This is support for the PCI2000I EIDE interface card which acts as a SCSI host adapter. Please read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module called pci2000.o ( = code which can be inserted in and removed from the running kernel @@ -4842,7 +4842,7 @@ PCI2220i support CONFIG_SCSI_PCI2220I This is support for the PCI2220i EIDE interface card which acts as a SCSI host adapter. Please read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module called pci2220i.o ( = code which can be inserted in and removed from the running kernel @@ -4853,7 +4853,7 @@ PSI240i support CONFIG_SCSI_PSI240I This is support for the PSI240i EIDE interface card which acts as a SCSI host adapter. Please read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module called psi240i.o ( = code which can be inserted in and removed from the running kernel @@ -4872,7 +4872,7 @@ CONFIG_SCSI_QLOGIC_FAS Information about this driver is contained in drivers/scsi/README.qlogicfas. You should also read the SCSI-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -4890,7 +4890,7 @@ CONFIG_SCSI_QLOGIC_ISP Please read the file drivers/scsi/README.qlogicisp. You should also read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -4910,7 +4910,7 @@ Seagate ST-02 and Future Domain TMC-8xx SCSI support CONFIG_SCSI_SEAGATE These are 8-bit SCSI controllers; the ST-01 is also supported by this driver. It is explained in section 3.9 of the SCSI-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . If it + available from http://www.linuxdoc.org/docs.html#howto . If it doesn't work out of the box, you may have to change some settings in drivers/scsi/seagate.h. @@ -4923,7 +4923,7 @@ Trantor T128/T128F/T228 SCSI support CONFIG_SCSI_T128 This is support for a SCSI host adapter. It is explained in section 3.11 of the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . If it doesn't work out + http://www.linuxdoc.org/docs.html#howto . If it doesn't work out of the box, you may have to change some settings in drivers/scsi/t128.h. Note that Trantor was purchased by Adaptec, and some former Trantor products are being sold under the Adaptec name. @@ -4938,7 +4938,7 @@ CONFIG_SCSI_ULTRASTOR This is support for the UltraStor 14F, 24F and 34F SCSI-2 host adapter family. This driver is explained in section 3.12 of the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . If it doesn't work out + http://www.linuxdoc.org/docs.html#howto . If it doesn't work out of the box, you may have to change some settings in drivers/scsi/ultrastor.h. @@ -4979,7 +4979,7 @@ CONFIG_SCSI_EATA You want to read the start of drivers/scsi/eata.c and the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Note that there is also another driver for the same hardware available: "EATA-DMA support". You should say Y to only one of them. @@ -5019,7 +5019,7 @@ CONFIG_SCSI_NCR53C406A This is support for the NCR53c406a SCSI host adapter. For user configurable parameters, check out drivers/scsi/NCR53c406.c in the kernel source. Also read the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -5082,7 +5082,7 @@ AM53/79C974 PCI SCSI support CONFIG_SCSI_AM53C974 This is support for the AM53/79C974 SCSI host adapters. Please read drivers/scsi/README.AM53C974 for details. Also, the SCSI-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto , is for + available from http://www.linuxdoc.org/docs.html#howto , is for you. Note that there is another driver for AM53C974 based adapters: @@ -5132,7 +5132,7 @@ CONFIG_SCSI_PPA For more information about this driver and how to use it you should read the file drivers/scsi/README.ppa. You should also read the SCSI-HOWTO, which is available from - http://metalab.unc.edu/mdw/linux.html#howto . If you use this driver, + http://www.linuxdoc.org/docs.html#howto . If you use this driver, you will still be able to use the parallel port for other tasks, such as a printer; it is safe to compile both drivers into the kernel. @@ -5159,7 +5159,7 @@ CONFIG_SCSI_IMM For more information about this driver and how to use it you should read the file drivers/scsi/README.ppa. You should also read the SCSI-HOWTO, which is available from - http://metalab.unc.edu/mdw/linux.html#howto . If you use this driver, + http://www.linuxdoc.org/docs.html#howto . If you use this driver, you will still be able to use the parallel port for other tasks, such as a printer; it is safe to compile both drivers into the kernel. @@ -5284,7 +5284,7 @@ CONFIG_NETDEVICES telephone line with a modem either via UUCP (UUCP is a protocol to forward mail and news between unix hosts over telephone lines; read the UUCP-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto ) or dialing up a shell + http://www.linuxdoc.org/docs.html#howto ) or dialing up a shell account or a BBS, even using term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on some Internet connected Unix computer. Read @@ -5344,7 +5344,7 @@ CONFIG_SLIP allows you to use SLIP over a regular dial up shell connection. If you plan to use SLiRP, make sure to say Y to CSLIP, below. The NET-3-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , explains how to + http://www.linuxdoc.org/docs.html#howto , explains how to configure SLIP. Note that you don't need this option if you just want to run term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on @@ -5368,7 +5368,7 @@ CONFIG_SLIP_COMPRESSED ftp://metalab.unc.edu/pub/Linux/system/network/serial/ ) which allows you to use SLIP over a regular dial up shell connection, you definitely want to say Y here. The NET-3-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , explains how to + http://www.linuxdoc.org/docs.html#howto , explains how to configure CSLIP. This won't enlarge your kernel. Keepalive and linefill @@ -5397,7 +5397,7 @@ CONFIG_PPP To use PPP, you need an additional program called pppd as described in Documentation/networking/ppp.txt and in the PPP-HOWTO, available - at http://metalab.unc.edu/mdw/linux.html#howto . If you upgrade + at http://www.linuxdoc.org/docs.html#howto . If you upgrade from an older kernel, you might need to upgrade pppd as well. The PPP option enlarges your kernel by about 16 KB. @@ -5517,7 +5517,7 @@ CONFIG_WAVELAN If you want to use an ISA WaveLAN card under Linux, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Some more specific + http://www.linuxdoc.org/docs.html#howto . Some more specific information is contained in Documentation/networking/wavelan.txt and in the source code drivers/net/wavelan.p.h. @@ -5821,7 +5821,7 @@ CONFIG_PLIP If you want to use PLIP, say Y and read the PLIP mini-HOWTO as well as the NET-3-HOWTO, both available from - http://metalab.unc.edu/mdw/linux.html#howto . Note that the PLIP + http://www.linuxdoc.org/docs.html#howto . Note that the PLIP protocol has been changed and this PLIP driver won't work together with the PLIP support in Linux versions 1.0.x. This option enlarges your kernel by about 8 KB. @@ -5844,7 +5844,7 @@ CONFIG_EQUALIZER Say Y if you want this and read Documentation/networking/eql.txt. You may also want to read section 6.2 of the NET-3-HOWTO, available - from http://metalab.unc.edu/mdw/linux.html#howto . + from http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6419,7 +6419,7 @@ CONFIG_NET_ETHERNET If your Linux machine will be connected to an Ethernet and you have an Ethernet network interface card (NIC) installed in your computer, say Y here and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . You will then also have + http://www.linuxdoc.org/docs.html#howto . You will then also have to say Y to the driver for your particular NIC. Note that the answer to this question won't directly affect the @@ -6446,7 +6446,7 @@ Western Digital/SMC cards CONFIG_NET_VENDOR_SMC If you have a network (Ethernet) card belonging to this class, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all @@ -6457,7 +6457,7 @@ WD80*3 support CONFIG_WD80x3 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6469,7 +6469,7 @@ SMC Ultra MCA support CONFIG_ULTRAMCA If you have a network (Ethernet) card of this type and are running an MCA based system (PS/2), say Y and read the Ethernet-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6481,7 +6481,7 @@ SMC Ultra support CONFIG_ULTRA If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Important: There have been many reports that, with some motherboards mixing an SMC Ultra and an Adaptec AHA154x SCSI card (or compatible, @@ -6500,7 +6500,7 @@ SMC Ultra32 EISA support CONFIG_ULTRA32 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6515,7 +6515,7 @@ CONFIG_SMC9194 another SMC9192/9194 based chipset. Say Y if you want it compiled into the kernel, and read the file Documentation/networking/smc9.txt and the Ethernet-HOWTO, available - from http://metalab.unc.edu/mdw/linux.html#howto . + from http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you @@ -6529,7 +6529,7 @@ CONFIG_NE2K_PCI with ISA NE2000 cards (they have their own driver, "NE2000/NE1000 support" below). If you have a PCI NE2000 network (Ethernet) card, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6553,7 +6553,7 @@ Racal-Interlan (Micom) NI cards CONFIG_NET_VENDOR_RACAL If you have a network (Ethernet) card belonging to this class, such as the NI5010, NI5210 or NI6210, say Y and read the Ethernet-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all @@ -6564,7 +6564,7 @@ NI5010 support (EXPERIMENTAL) CONFIG_NI5010 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Note that this is still + http://www.linuxdoc.org/docs.html#howto . Note that this is still experimental code. This driver is also available as a module ( = code which can be @@ -6577,7 +6577,7 @@ NI5210 support CONFIG_NI52 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6589,7 +6589,7 @@ NI6510 support CONFIG_NI65 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6602,7 +6602,7 @@ CONFIG_RTL8139 This is a driver for the Fast Ethernet PCI network cards based on the RTL8129 and RTL8139 chips. If you have one of those, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -6712,7 +6712,7 @@ AMD LANCE and PCnet (AT1500 and NE2100) support CONFIG_LANCE If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Some LinkSys cards are + http://www.linuxdoc.org/docs.html#howto . Some LinkSys cards are of this type. If you want to compile this driver as a module ( = code which can be @@ -6724,7 +6724,7 @@ CONFIG_LANCE CONFIG_NET_VENDOR_3COM If you have a network (Ethernet) card belonging to this class, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all @@ -6735,7 +6735,7 @@ CONFIG_NET_VENDOR_3COM CONFIG_EL1 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Also, consider buying a + http://www.linuxdoc.org/docs.html#howto . Also, consider buying a new card, since the 3c501 is slow, broken, and obsolete: you will have problems. Some people suggest to ping ("man ping") a nearby machine every minute ("man cron") when using this card. @@ -6750,7 +6750,7 @@ CONFIG_EL1 CONFIG_EL2 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6763,7 +6763,7 @@ CONFIG_ELPLUS Information about this network (Ethernet) card can be found in Documentation/networking/3c505.txt. If you have a card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -6775,7 +6775,7 @@ CONFIG_ELPLUS CONFIG_EL16 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6787,7 +6787,7 @@ CONFIG_EL16 CONFIG_ELMC If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6799,7 +6799,7 @@ CONFIG_ELMC CONFIG_ELMC_II If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6811,7 +6811,7 @@ CONFIG_ELMC_II CONFIG_EL3 If you have a network (Ethernet) card belonging to the 3Com EtherLinkIII series, say Y and read the Ethernet-HOWTO, available - from http://metalab.unc.edu/mdw/linux.html#howto . + from http://www.linuxdoc.org/docs.html#howto . If your card is not working you may need to use the DOS setup disk to disable Plug & Play mode, and to select the default @@ -6828,7 +6828,7 @@ CONFIG_VORTEX If you have a 3Com "Vortex" (Fast EtherLink 3c590/3c592/3c595/3c597) or "Boomerang" series (EtherLink XL 3c900 or 3c905) network (Ethernet) card, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . More specific + http://www.linuxdoc.org/docs.html#howto . More specific information is in Documentation/networking/vortex.txt and in the comments at the beginning of drivers/net/3c59x.c. @@ -6843,7 +6843,7 @@ CONFIG_NET_ISA bus system (that's the way the cards talks to the other components of your computer) is ISA (as opposed to EISA, VLB or PCI), say Y. Make sure you know the name of your card. Read the Ethernet-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . If unsure, say Y. @@ -6863,7 +6863,7 @@ CONFIG_ARCNET support" below. You might also want to have a look at the Ethernet-HOWTO, available - from http://metalab.unc.edu/mdw/linux.html#howto (even though ARCnet + from http://www.linuxdoc.org/docs.html#howto (even though ARCnet is not really Ethernet). This driver is also available as a module ( = code which can be @@ -6951,7 +6951,7 @@ Cabletron E21xx support CONFIG_E2100 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -6964,7 +6964,7 @@ CONFIG_CS89x0 Support for CS89x0 chipset based Ethernet cards. If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto as well as + http://www.linuxdoc.org/docs.html#howto as well as Documentation/networking/cs89x0.txt. If you want to compile this as a module ( = code which can be @@ -6977,7 +6977,7 @@ DEPCA support CONFIG_DEPCA If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto as well as + http://www.linuxdoc.org/docs.html#howto as well as drivers/net/depca.c. If you want to compile this as a module ( = code which can be @@ -6992,7 +6992,7 @@ CONFIG_EWRK3 cards. If this is for you, say Y and read Documentation/networking/ewrk3.txt in the kernel source as well as the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -7004,7 +7004,7 @@ SEEQ8005 support CONFIG_SEEQ8005 This is a driver for the SEEQ 8005 network (Ethernet) card. If this is for you, read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -7016,7 +7016,7 @@ AT1700/1720 support CONFIG_AT1700 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7029,7 +7029,7 @@ FMV-181/182/183/184 support CONFIG_FMV18X If you have a Fujitsu FMV-181/182/183/184 network (Ethernet) card, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you use an FMV-183 or FMV-184 and it is not working, you may need to disable Plug & Play mode of the card. @@ -7045,7 +7045,7 @@ CONFIG_EEXPRESS_PRO If you have a network (Ethernet) card of this type, say Y. Note however that the EtherExpress PRO/100 Ethernet card has its own separate driver. Please read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7057,7 +7057,7 @@ EtherExpress support CONFIG_EEXPRESS If you have an EtherExpress16 network (Ethernet) card, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Note that the Intel + http://www.linuxdoc.org/docs.html#howto . Note that the Intel EtherExpress16 card used to be regarded as a very poor choice because the driver was very unreliable. We now have a new driver that should do better. @@ -7072,7 +7072,7 @@ HP PCLAN+ (27247B and 27252A) support CONFIG_HPLAN_PLUS If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7084,7 +7084,7 @@ HP PCLAN (27245 and other 27xxx series) support CONFIG_HPLAN If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7096,7 +7096,7 @@ HP 10/100VG PCLAN (ISA, EISA, PCI) support CONFIG_HP100 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -7108,7 +7108,7 @@ NE2000/NE1000 support CONFIG_NE2000 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Many Ethernet cards + http://www.linuxdoc.org/docs.html#howto . Many Ethernet cards without a specific driver are compatible with NE2000. If you have a PCI NE2000 card however, say N here and Y to "PCI @@ -7127,13 +7127,13 @@ SK_G16 support CONFIG_SK_G16 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . NE/2 (ne2000 MCA version) support CONFIG_NE2_MCA If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7160,7 +7160,7 @@ EISA, VLB, PCI and on board controllers CONFIG_NET_EISA This is another class of network cards which attach directly to the bus. If you have one of those, say Y and read the Ethernet-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all @@ -7172,7 +7172,7 @@ AMD PCnet32 (VLB and PCI) support CONFIG_PCNET32 If you have a PCnet32 or PCnetPCI based network (Ethernet) card, answer Y here and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7184,7 +7184,7 @@ Ansel Communications EISA 3200 support CONFIG_AC3200 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7196,7 +7196,7 @@ Mylex EISA LNE390A/LNE390B support (EXPERIMENTAL) CONFIG_LNE390 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7208,7 +7208,7 @@ Novell/Eagle/Microdyne NE3210 EISA support (EXPERIMENTAL) CONFIG_NE3210 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Note that this driver + http://www.linuxdoc.org/docs.html#howto . Note that this driver will NOT WORK for NE3200 cards as they are completely different. This driver is also available as a module ( = code which can be @@ -7221,7 +7221,7 @@ Apricot Xen-II on board Ethernet CONFIG_APRICOT If you have a network (Ethernet) controller of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -7235,7 +7235,7 @@ CONFIG_DE4X5 These include the DE425, DE434, DE435, DE450 and DE500 models. If you have a network card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . More specific + http://www.linuxdoc.org/docs.html#howto . More specific information is contained in Documentation/networking/de4x5.txt. This driver is also available as a module ( = code which can be @@ -7253,7 +7253,7 @@ CONFIG_DEC_ELCP (smc9332dst), you can also try the driver for "Generic DECchip" cards, above. However, most people with a network card of this type will say Y here.) Do read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . More specific + http://www.linuxdoc.org/docs.html#howto . More specific information is contained in Documentation/networking/tulip.txt. This driver is also available as a module ( = code which can be @@ -7268,7 +7268,7 @@ CONFIG_DGRS PCI/EISA Ethernet switch cards. These include the SE-4 and the SE-6 models. If you have a network card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . More specific + http://www.linuxdoc.org/docs.html#howto . More specific information is contained in Documentation/networking/dgrs.txt. This driver is also available as a module ( = code which can be @@ -7281,7 +7281,7 @@ EtherExpress PRO/100 support CONFIG_EEXPRESS_PRO100 If you have an Intel EtherExpress PRO/100 PCI network (Ethernet) card, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7293,7 +7293,7 @@ ICL EtherTeam 16i/32 support (EXPERIMENTAL) CONFIG_ETH16I If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7306,7 +7306,7 @@ CONFIG_TLAN If you have a PCI Ethernet network card based on the ThunderLAN chip which is supported by this driver, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Devices currently supported by this driver are Compaq Netelligent, Compaq NetFlex and Olicom cards. Please read the file @@ -7335,7 +7335,7 @@ Racal-Interlan EISA ES3210 support (EXPERIMENTAL) CONFIG_ES3210 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7347,7 +7347,7 @@ SMC EtherPower II (EXPERIMENTAL) CONFIG_EPIC100 If you have an SMC EtherPower II 9432 PCI Ethernet network card which is based on the SMC83c170, say Y and read the Ethernet-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7366,13 +7366,13 @@ CONFIG_ZNET (Ethernet) card, and this is the Linux driver for it. Note that the IBM Thinkpad 300 is compatible with the Z-Note and is also supported by this driver. Read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Adaptec Starfire support CONFIG_ADAPTEC_STARFIRE If you have an Ethernet network card like this, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7385,7 +7385,7 @@ CONFIG_NET_POCKET Cute little network (Ethernet) devices which attach to the parallel port ("pocket adapters"), commonly used with laptops. If you have one of those, say Y and read the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to plug a network (or some other) card into the PCMCIA (or PC-card) slot of your laptop instead (PCMCIA is the standard for @@ -7405,7 +7405,7 @@ AT-LAN-TEC/RealTek pocket adapter support CONFIG_ATP This is a network (Ethernet) device which attaches to your parallel port. Read drivers/net/atp.c as well as the Ethernet-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto , if you + available from http://www.linuxdoc.org/docs.html#howto , if you want to use this. If you intend to use this driver, you should have said N to the Parallel Printer support, because the two drivers don't like each other. @@ -7415,7 +7415,7 @@ CONFIG_DE600 This is a network (Ethernet) device which attaches to your parallel port. Read Documentation/networking/DLINK.txt as well as the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , if you want to use + http://www.linuxdoc.org/docs.html#howto , if you want to use this. It is possible to have several devices share a single parallel port and it is safe to compile the corresponding drivers into the kernel. @@ -7430,7 +7430,7 @@ CONFIG_DE620 This is a network (Ethernet) device which attaches to your parallel port. Read Documentation/networking/DLINK.txt as well as the Ethernet-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , if you want to use + http://www.linuxdoc.org/docs.html#howto , if you want to use this. It is possible to have several devices share a single parallel port and it is safe to compile the corresponding drivers into the kernel. @@ -7448,14 +7448,14 @@ CONFIG_TR connected to such a Token Ring network and want to use your Token Ring card under Linux, say Y here and to the driver for your particular card below and read the Token-Ring mini-HOWTO, available - from http://metalab.unc.edu/mdw/linux.html#howto . Most people can + from http://www.linuxdoc.org/docs.html#howto . Most people can say N here. IBM Tropic chipset based adapter support CONFIG_IBMTR This is support for all IBM Token Ring cards that don't use DMA. If you have such a beast, say Y and read the Token-Ring mini-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . Warning: this driver will almost definitely fail if more than one active Token Ring card is present. @@ -7473,7 +7473,7 @@ CONFIG_IBMOL If you have such an adapter, say Y and read the Token-Ring mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7495,7 +7495,7 @@ CONFIG_TMS380TR If you have such an adapter and would like to use it, say Y or M and read the Token-Ring mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Also read the file linux/Documentation/networking/tms380tr.txt or check http://www.auk.cx/tms380tr/ @@ -7507,7 +7507,7 @@ CONFIG_SMCTR If you have such an adapter and would like to use it, say Y or M and read the Token-Ring mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Traffic Shaper (EXPERIMENTAL) CONFIG_SHAPER @@ -7598,7 +7598,7 @@ Support CDROM drives that are not SCSI or IDE/ATAPI CONFIG_CD_NO_IDESCSI If you have a CDROM drive that is neither SCSI nor IDE/ATAPI, say Y here, otherwise N. Read the CDROM-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all @@ -7865,10 +7865,10 @@ CONFIG_QUOTA usage (also called disk quotas). Currently, it works only for the ext2 filesystem. You need additional software in order to use quota support; for details, read the Quota mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . Probably the quota + http://www.linuxdoc.org/docs.html#howto . Probably the quota support is only useful for multi user systems. If unsure, say N. -Support for USB (EXPERIMENTAL) +Support for USB CONFIG_USB Universal Serial Bus (USB) is a specification for a serial bus subsystem which offers higher speeds and more features than the @@ -7892,7 +7892,7 @@ CONFIG_USB The module will be called usbcore.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. -UHCI (intel PIIX4, VIA, and others) support? +UHCI (intel PIIX4, VIA, ...) support? CONFIG_USB_UHCI The Universal Host Controller Interface is a standard by Intel for accessing the USB hardware in the PC (which is also called the USB @@ -7908,17 +7908,17 @@ CONFIG_USB_UHCI The module will be called usb-uhci.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. -OHCI-HCD (Compaq, iMacs, OPTi, SiS, ALi, and others) support? +OHCI-HCD (Compaq, iMacs, OPTi, SiS, ALi, ...) support? CONFIG_USB_OHCI_HCD The Open Host Controller Interface is a standard by Compaq/Microsoft/National for accessing the USB PC hardware (also called USB host controller). If your USB host controller conforms to this standard, say Y. The USB host controllers on most - non-Intel architectures and on several x86 compatibles with non-Intel - chipsets - like SiS (aktual 610, 610 and so on) or ALi (ALi IV, ALi V, - Aladin Pro..) - conform to this standard. + non-Intel architectures and on several x86 compatibles with non-Intel + chipsets - like SiS (actual 610, 610 and so on) or ALi (ALi IV, ALi V, + Aladdin Pro..) - conform to this standard. - You may want to read the file drivers/usb/README.ohci_hcd. + You may want to read the file Documentation/usb/ohci-hcd.txt. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -7971,29 +7971,18 @@ CONFIG_INPUT_EVDEV under /dev/inputX (misc 64+) in a generic way. This is the future ... -USB HID debug output -CONFIG_USB_HID_DEBUG - Say Y here if you want to see what the HID driver is doing, - perhaps it's doing something wrong with your device. - -USB HID lots of debug output -CONFIG_USB_HID_DEBUG_LOTS - Say Y here if you don't fear to read all the HID dumps the - HID driver will generate when you switch this on. Really LOTS - of debug output. - -USB scanner support +USB Scanner support CONFIG_USB_SCANNER Say Y here if you want to connect a USB scanner to your - computer's USB port. Please read drivers/usb/README.scanner - and drivers/usb/README.scanner_hp_sane for more information. + computer's USB port. Please read Documentation/usb/scanner.txt + and Documentation/usb/scanner-hp-sane.txt for more information. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called hp_scanner.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. -USB audio parsing support +USB Audio support CONFIG_USB_AUDIO Say Y here if you want to connect USB audio equipment such as speakers to your computer's USB port. @@ -8003,11 +7992,10 @@ CONFIG_USB_AUDIO The module will be called audio.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. -USB Communications Device Class (ACM) support (Preliminary) +USB Modem (CDC ACM) support CONFIG_USB_ACM - This driver allows for devices which support the Abstract Control - Model, including many USB-based modems, ISDN adapters, and network - adapters. + This driver supports USB modems and ISDN adapters which support the + Communication Device Class Abstract Control Model interface. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -8019,6 +8007,7 @@ CONFIG_USB_SERIAL Say Y here if you want to connect a Connect Tech WhiteHEAT multi-port USB to serial converter; a Belkin, Peracom, or eTek single port USB to serial converter; or a Handspring Visor. + Please read Documentation/usb/usb-serial.txt for more information. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -8059,7 +8048,7 @@ CONFIG_USB_OV511 USB Kodak DC-2xx Camera support CONFIG_USB_DC2XX Say Y here if you want to connect this type of still camera to - your computer's USB port. See drivers/usb/README.dc2xx for more + your computer's USB port. See Documentation/usb/dc2xx.txt for more information; some non-Kodak cameras may also work with this driver, given application support (such as www.gPhoto.org). @@ -8068,7 +8057,7 @@ CONFIG_USB_DC2XX The module will be called dc2xx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. -USB SCSI Support +USB SCSI (mass storage) support CONFIG_USB_SCSI Say Y here if you want to connect USB mass storage devices to your computer's USB port. @@ -8083,9 +8072,6 @@ CONFIG_USB_SCSI_DEBUG Say Y here in order to have the USB SCSI code generate verbose debugging messages. -#EZUSB Firmware downloader -#CONFIG_USB_EZUSB - USS720 parport driver CONFIG_USB_USS720 This driver is for USB parallel port adapters that use the Lucent @@ -8113,7 +8099,7 @@ CONFIG_USB_USS720 The module will be called uss720.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. -USB /proc filesystem support +/proc/bus/usb support CONFIG_USB_PROC This reports USB drivers and devices in the /proc filesystem. Entries are located in /proc/bus/usb. The entries are described in @@ -8122,7 +8108,7 @@ CONFIG_USB_PROC Note that you must say Y to global "/proc filesystem support" under Filesystems for this to work. -USB device file system +USB device filesystem CONFIG_USB_DEVICEFS This file system implements a "devices" file, that lists the currently connected to your USB busses, a "drivers" file @@ -8144,7 +8130,7 @@ CONFIG_USB_DABUSB inserted in and removed from the running kernel whenever you want). The module will be called dabusb.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. - + ACPI support CONFIG_ACPI Advanced Configuration and Power Interface (ACPI) is an interface @@ -8189,7 +8175,7 @@ CONFIG_EXT2_FS by about 44 kB. The Ext2fs-Undeletion mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , gives information about + http://www.linuxdoc.org/docs.html#howto , gives information about how to retrieve deleted files on ext2fs filesystems. To change the behavior of ext2 filesystems, you can use the tune2fs @@ -8239,7 +8225,7 @@ CONFIG_ISO9660_FS If you have a CDROM drive and want to do more with it than just listen to audio CDs and watch its LEDs, say Y (and read Documentation/filesystems/isofs.txt and the CDROM-HOWTO, available - from http://metalab.unc.edu/mdw/linux.html#howto ), thereby + from http://www.linuxdoc.org/docs.html#howto ), thereby enlarging your kernel by about 27 KB; otherwise say N. If you want to compile this as a module ( = code which can be @@ -8318,7 +8304,7 @@ CONFIG_MSDOS_FS they are compressed; to access compressed MSDOS partitions under Linux, you can either use the DOS emulator DOSEMU, described in the DOSEMU-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , or try dmsdosfs in + http://www.linuxdoc.org/docs.html#howto , or try dmsdosfs in ftp://metalab.unc.edu/pub/Linux/system/filesystems/dosfs . If you intend to use dosemu with a non-compressed MSDOS partition, say Y here) and MSDOS floppies. This means that file access becomes @@ -8833,7 +8819,7 @@ CONFIG_SMB_FS works only if the Windows machines use TCP/IP as the underlying transport protocol, and not NetBEUI. For details, read Documentation/filesystems/smbfs.txt and the SMB-HOWTO, available - from http://metalab.unc.edu/mdw/linux.html#howto . + from http://www.linuxdoc.org/docs.html#howto . Note: if you just want your box to act as an SMB *server* and make files and printing services available to Windows clients (which need @@ -8878,7 +8864,7 @@ CONFIG_NCP_FS mount NetWare file server volumes and to access them just like any other Unix directory. For details, please read the file Documentation/filesystems/ncpfs.txt in the kernel source and the - IPX-HOWTO from http://metalab.unc.edu/mdw/linux.html#howto . + IPX-HOWTO from http://www.linuxdoc.org/docs.html#howto . You do not have to say Y here if you want your Linux box to act as a file *server* for Novell NetWare clients. @@ -9319,7 +9305,7 @@ CONFIG_VT_CONSOLE bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto .) + http://www.linuxdoc.org/docs.html#howto .) If unsure, say Y. @@ -9383,7 +9369,7 @@ CONFIG_SERIAL_CONSOLE your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto .) + http://www.linuxdoc.org/docs.html#howto .) If you don't have a VGA card installed and you say Y here, the kernel will automatically use the first serial line, /dev/ttyS0, as @@ -9634,7 +9620,7 @@ CONFIG_PRINTER box (as opposed to using a serial printer; if the connector at the printer has 9 or 25 holes ["female"], then it's serial), say Y. Also read the Printing-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . It is possible to share one parallel port among several devices (e.g. printer and ZIP drive) and it is safe to compile the @@ -9649,7 +9635,7 @@ CONFIG_PRINTER or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto .) The syntax of the "lp" + http://www.linuxdoc.org/docs.html#howto .) The syntax of the "lp" command line option can be found in drivers/char/lp.c. If you have more than 3 printers, you need to increase the LP_NO @@ -9675,7 +9661,7 @@ CONFIG_BUSMOUSE Microsoft mouse (made by Logitech) that plugs into a COM port (rectangular with 9 or 25 pins). These people say N here. If you have something else, read the Busmouse-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto , and say Y here. + http://www.linuxdoc.org/docs.html#howto , and say Y here. If you have a laptop, you either have to check the documentation or experiment a bit to find out whether the trackball is a serial mouse @@ -9698,7 +9684,7 @@ CONFIG_MOUSE MouseSystem or Microsoft mouse (made by Logitech) that plugs into a COM port (rectangular with 9 or 25 pins). These people say N here. If you have something else, read the Busmouse-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . This HOWTO contains + http://www.linuxdoc.org/docs.html#howto . This HOWTO contains information about all non-serial mice, not just bus mice. If you have a laptop, you either have to check the documentation or @@ -9715,7 +9701,7 @@ CONFIG_LOGIBUSMOUSE generally a round connector with 9 pins. Note that the newer mice made by Logitech don't use the Logitech protocol anymore; for those, you don't need this option. You want to read the Busmouse-HOWTO , - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -9735,7 +9721,7 @@ CONFIG_PSMOUSE Although PS/2 mice are not technically bus mice, they are explained in detail in the Busmouse-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . When using a PS/2 mouse, you can get problems if you want to use the mouse both on the Linux console and under X. Using the "-R" option @@ -9748,7 +9734,7 @@ CONFIG_82C710_MOUSE This is a certain kind of PS/2 mouse used on the TI Travelmate. If you are unsure, try first to say N here and come back if the mouse doesn't work. Read the Busmouse-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . PC110 digitizer pad support CONFIG_PC110_PAD @@ -9766,7 +9752,7 @@ CONFIG_MS_BUSMOUSE These animals (also called Inport mice) are connected to an expansion board using a round connector with 9 pins. If this is what you have, say Y and read the Busmouse-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you are unsure, say N and read the HOWTO nevertheless: it will tell you what you have. Also be aware that several vendors talk @@ -9782,7 +9768,7 @@ Apple Desktop Bus mouse support CONFIG_ADBMOUSE Say Y here if you have this type of bus mouse (4 pin connector) as is common on Macintoshes. You may want to read the Busmouse-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto . + available from http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -9796,7 +9782,7 @@ CONFIG_ATIXL_BUSMOUSE most mice by ATI are actually Microsoft busmice; you should say Y to "Microsoft busmouse support" above if you have one of those. Read the Busmouse-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), @@ -10228,7 +10214,7 @@ CONFIG_APM Supporting software is available; for more information, read the Battery Powered Linux mini-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . + http://www.linuxdoc.org/docs.html#howto . This driver does not spin down disk drives (see the hdparm(8) manpage ("man 8 hdparm") for that), and it doesn't turn off @@ -10691,7 +10677,7 @@ CONFIG_SOUND interrupt and DMA channel), because you will be asked for it. You want to read the Sound-HOWTO, available from - http://metalab.unc.edu/mdw/linux.html#howto . General information + http://www.linuxdoc.org/docs.html#howto . General information about the modular sound system is contained in the files Documentation/sound/Introduction. The file Documentation/sound/README.OSS contains some slightly outdated but @@ -11102,7 +11088,7 @@ CONFIG_AWE32_SYNTH Say Y here if you have a Sound Blaster SB32, AWE32-PnP, SB AWE64 or similar sound card. See Documentation/sound/README.awe, Documentation/sound/AWE32 and the Soundblaster-AWE mini-HOWTO, - available from http://metalab.unc.edu/mdw/linux.html#howto for more + available from http://www.linuxdoc.org/docs.html#howto for more info. Gallant's Audio Excel DSP 16 support (SC-6000 and SC-6600) @@ -12792,7 +12778,7 @@ CONFIG_1GB such as "mem=256M". (Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the - SCSI-HOWTO, available from http://metalab.unc.edu/mdw/linux.html#howto .) + SCSI-HOWTO, available from http://www.linuxdoc.org/docs.html#howto .) Math emulation CONFIG_NWFPE @@ -12950,7 +12936,7 @@ CONFIG_IRDA some user-space utilities like the irmanager and probably irattach as well. For more information, see the file Documentation/networking/irda.txt. You also want to read the - IR-HOWTO, available at http://metalab.unc.edu/mdw/linux.html#howto . + IR-HOWTO, available at http://www.linuxdoc.org/docs.html#howto . This support is also available as a module. If you want to compile it as a module, say M here and read Documentation/modules.txt. diff --git a/Documentation/fb/framebuffer.txt b/Documentation/fb/framebuffer.txt index c36c76f037bf..e8c51d1b51bd 100644 --- a/Documentation/fb/framebuffer.txt +++ b/Documentation/fb/framebuffer.txt @@ -29,9 +29,9 @@ By convention, the following device nodes are used (numbers indicate the device minor numbers): 0 = /dev/fb0 First frame buffer - 32 = /dev/fb1 Second frame buffer + 1 = /dev/fb1 Second frame buffer ... - 224 = /dev/fb7 8th frame buffer + 31 = /dev/fb31 32nd frame buffer For backwards compatibility, you may want to create the following symbolic links: diff --git a/Documentation/filesystems/cramfs.txt b/Documentation/filesystems/cramfs.txt index a408b88289aa..9bbee1613842 100644 --- a/Documentation/filesystems/cramfs.txt +++ b/Documentation/filesystems/cramfs.txt @@ -11,3 +11,43 @@ diskspace than traditional filesystems. You can't write to a cramfs filesystem (making it compressible and compact also makes it _very_ hard to update on-the-fly), so you have to create the disk image with the "mkcramfs" utility in scripts/cramfs. + + +Usage Notes +----------- + +File sizes are limited to less than 16MB. + +Maximum filesystem size is a little over 256MB. (The last file on the +filesystem is allowed to extend past 256MB.) (Comments in mkcramfs.c +suggest that ROM sizes may be limited to 64MB, though that's not a +limitation in cramfs code.) + +Only the low 8 bits of gid are stored. The current version of +mkcramfs simply truncates to 8 bits, which is a potential security +issue. + +Hard links are not supported, but symlinks are. (See also the TODO +comment in mkcramfs.c at the nlink test.) + +Cramfs directories have no `.' or `..' entries. Directories (like +every other file on cramfs) always have a link count of 1. (There's +no need to use -noleaf in `find', btw.) + +No timestamps are stored in a cramfs, so these default to the epoch +(1970 GMT). Recently-accessed files may have updated timestamps, but +the update lasts only as long as the inode is cached in memory, after +which the timestamp reverts to 1970, i.e. moves backwards in time. + +Currently, cramfs must be written and read with architectures of the +same endianness, and can be read only by kernels with PAGE_CACHE_SIZE +== 4096. At least the latter of these is a bug, but it hasn't been +decided what the best fix is. For the moment if you have larger pages +you can just change the #define in mkcramfs.c, so long as you don't +mind the filesystem becoming unreadable to future kernels. + + +Hacker Notes +------------ + +See fs/cramfs/README for filesystem layout and implementation notes. diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index d82ffd885bd7..2821f515d016 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -10,41 +10,41 @@ The text in square brackets at the beginning of the description state the restrictions on the kernel for the said kernel parameter to be valid. The restrictions referred to are that the relevant option is valid if: - APIC APIC support is enabled. - APM Advanced Power Management support is enabled. - AX25 Appropriate AX.25 support is enabled. - CD Appropriate CD support is enabled. - EIDE EIDE/ATAPI support is enabled. - FB The frame buffer device is enabled. - HW Appropriate hardware is enabled. - ISDN Appropriate ISDN support is enabled. - JOY Appropriate joystick support is enabled. - LP Printer support is enabled. - LOOP Loopback device support is enabled. - MCA MCA bus support is enabled. - MDA The MDA console is enabled. - MOUSE Appropriate mouse support is enabled. - NET Appropriate network support is enabled. - NFS Appropriate NFS support is enabled. - PARIDE The ParIDE subsystem is enabled. - PCI PCI bus support is enabled. - PCMCIA The PCMCIA subsystem is enabled. - PNP Plug & Play support is enabled. - PPT Parallel port support is enabled. - PS2 Appropriate PS/2 support is enabled. - RAM RAMdisc support is enabled. - SCSI Appropriate SCSI support is enabled. - SERIAL Serial support is enabled. - SMP The kernel is an SMP kernel. - SOUND Appropriate sound system support is enabled. - VGA The VGA console has been enabled. - VT Virtual terminal support is enabled. - XT IBM PC/XT MFM hard disk support is enabled. + APIC APIC support is enabled. + APM Advanced Power Management support is enabled. + AX25 Appropriate AX.25 support is enabled. + CD Appropriate CD support is enabled. + EIDE EIDE/ATAPI support is enabled. + FB The frame buffer device is enabled. + HW Appropriate hardware is enabled. + ISDN Appropriate ISDN support is enabled. + JOY Appropriate joystick support is enabled. + LP Printer support is enabled. + LOOP Loopback device support is enabled. + MCA MCA bus support is enabled. + MDA MDA console support is enabled. + MOUSE Appropriate mouse support is enabled. + NET Appropriate network support is enabled. + NFS Appropriate NFS support is enabled. + PARIDE The ParIDE subsystem is enabled. + PCI PCI bus support is enabled. + PCMCIA The PCMCIA subsystem is enabled. + PNP Plug & Play support is enabled. + PPT Parallel port support is enabled. + PS2 Appropriate PS/2 support is enabled. + RAM RAM disk support is enabled. + SCSI Appropriate SCSI support is enabled. + SERIAL Serial support is enabled. + SMP The kernel is an SMP kernel. + SOUND Appropriate sound system support is enabled. + VGA The VGA console has been enabled. + VT Virtual terminal support is enabled. + XT IBM PC/XT MFM hard disk support is enabled. In addition, the following text indicates that the option: - BUGS= Relates to possible processor bugs on the said processor. - KNL Is a kernel start-up parameter. + BUGS= Relates to possible processor bugs on the said processor. + KNL Is a kernel start-up parameter. Note that ALL kernel parameters listed below are CASE SENSITIVE, and that a trailing = on the name of any parameter states that that parameter will @@ -52,353 +52,353 @@ be entered as an environment variable, whereas its absence indicates that it will appear as a kernel argument readable via /proc/cmdline by programs running once the system is up. - 53c7xx= [HW,SCSI] Amiga SCSI controllers + 53c7xx= [HW,SCSI] Amiga SCSI controllers. - adb_buttons= [HW,MOUSE] + adb_buttons= [HW,MOUSE] - advansys= [HW,SCSI] + advansys= [HW,SCSI] - aha152x= [HW,SCSI] + aha152x= [HW,SCSI] - aha1542= [HW,SCSI] + aha1542= [HW,SCSI] - aic7xxx= [HW,SCSI] + aic7xxx= [HW,SCSI] - AM53C974= [HW,SCSI] + AM53C974= [HW,SCSI] - apm= [APM] Advanced Power Management. + apm= [APM] Advanced Power Management. - arcrimi= [HW,NET] + arcrimi= [HW,NET] - ataflop= [HW, M68k] + ataflop= [HW, M68k] - atamouse= [HW,MOUSE] Atari Mouse. + atamouse= [HW,MOUSE] Atari Mouse. - atascsi= [HW,SCSI] Atari SCSI. + atascsi= [HW,SCSI] Atari SCSI. - aztcd= [HW,CD] Aztec CD driver. + aztcd= [HW,CD] Aztec CD driver. - baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem. + baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem. - baycom_ser_fdx= [HW,AX25] BayCom Serial Port AX.25 Modem in Full + baycom_ser_fdx= [HW,AX25] BayCom Serial Port AX.25 Modem in Full Duplex Mode. - baycom_ser_hdx= [HW,AX25] BayCom Serial Port AX.25 Modem in Half + baycom_ser_hdx= [HW,AX25] BayCom Serial Port AX.25 Modem in Half Duplex Mode. - bmouse= [HW,MOUSE,PS2] Bus mouse. + bmouse= [HW,MOUSE,PS2] Bus mouse. - BusLogic= [HW,SCSI] + BusLogic= [HW,SCSI] - cdu31a= [HW,CD] + cdu31a= [HW,CD] - cm206= [HW,CD] + cm206= [HW,CD] - com20020= [HW,NET] + com20020= [HW,NET] - com90io= [HW,NET] + com90io= [HW,NET] - com90xx= [HW,NET] + com90xx= [HW,NET] - console= [KNL] output console + comm spec (speed, control, parity) + console= [KNL] output console + comm spec (speed, control, + parity). - cyclades= [HW,SERIAL] Cyclades multi-serial port adapter. + cyclades= [HW,SERIAL] Cyclades multi-serial port adapter. - debug [KNL] Enable kernel debugging (events log level). + debug [KNL] Enable kernel debugging (events log level). - decnet= [HW,NET] + decnet= [HW,NET] - digi= [HW,SERIAL] io parameters + enable/disable command + digi= [HW,SERIAL] io parameters + enable/disable command. - digiepca= [HW,SERIAL] + digiepca= [HW,SERIAL] - dmascc= [HW,AX25,SERIAL] AX.25 Z80SCC driver with DMA + dmascc= [HW,AX25,SERIAL] AX.25 Z80SCC driver with DMA support available. - dmasound= [HW,SOUND] (sound subsystem buffers) + dmasound= [HW,SOUND] (sound subsystem buffers). - dtc3181e= [HW,SCSI] + dtc3181e= [HW,SCSI] - eata= [HW,SCSI] + eata= [HW,SCSI] - eda= [HW,PS2] + eda= [HW,PS2] - edb= [HW,PS2] + edb= [HW,PS2] - ether= [HW,NET] Ethernet cards parameters (iomem,irq,dev_name). + ether= [HW,NET] Ethernet cards parameters (iomem, irq, + dev_name). - fd_mcs= [HW,SCSI] + fd_mcs= [HW,SCSI] - fdomain= [HW,SCSI] + fdomain= [HW,SCSI] - floppy= [HW] + floppy= [HW] - ftape= [HW] Floppy Tape subsystem debugging options. + ftape= [HW] Floppy Tape subsystem debugging options. - gdth= [HW,SCSI] + gdth= [HW,SCSI] - gscd= [HW,CD] + gscd= [HW,CD] - gvp11= [HW,SCSI] + gvp11= [HW,SCSI] - hd= [EIDE] (E)IDE hard drive subsystem - geometry (Cyl/heads/sectors) or tune parameters. + hd= [EIDE] (E)IDE hard drive subsystem geometry + (Cyl/heads/sectors) or tune parameters. - hfmodem= [HW,AX25] + hfmodem= [HW,AX25] - HiSax= [HW,ISDN] + HiSax= [HW,ISDN] - hisax= [HW,ISDN] + hisax= [HW,ISDN] - in2000= [HW,SCSI] + in2000= [HW,SCSI] - init= [KNL] + init= [KNL] + ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter. - - ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter. - - icn= [HW,ISDN] + icn= [HW,ISDN] ide?= [HW] (E)IDE subsystem : config (iomem/irq), tuning or - debugging (serialize,reset,no{dma,tune,probe}) or - chipset specific parameters + debugging (serialize,reset,no{dma,tune,probe}) or + chipset specific parameters. - idebus= [HW] (E)IDE subsystem : VLB/PCI bus speed - - in2000= [HW,SCSI] + idebus= [HW] (E)IDE subsystem : VLB/PCI bus speed. - init= [KNL] default init level + in2000= [HW,SCSI] - initrd= [KNL] initial ramdisk path + init= [KNL] Default init level. - ip= [PNP] + ip= [PNP] - isp16= [HW,CD] + isp16= [HW,CD] - js_14= [HW,JOY] + js_14= [HW,JOY] - js_am= [HW,JOY] + js_am= [HW,JOY] - js_an= [HW,JOY] + js_an= [HW,JOY] - js_as= [HW.JOY] + js_as= [HW.JOY] - js_console= [HW,JOY] + js_console= [HW,JOY] - js_console2= [HW,JOY] + js_console2= [HW,JOY] - js_console3= [HW,JOY] + js_console3= [HW,JOY] - js_db9= [HW,JOY] + js_db9= [HW,JOY] - js_db9_2= [HW,JOY] + js_db9_2= [HW,JOY] - js_db9_3= [HW,JOY] + js_db9_3= [HW,JOY] - js_tg= [HW,JOY] + js_tg= [HW,JOY] - js_tg_2= [HW,JOY] + js_tg_2= [HW,JOY] - js_tg_3= [HW,JOY] + js_tg_3= [HW,JOY] - kbd-reset [VT] + kbd-reset [VT] - load_ramdisk= [RAM] initrd loading boolean + load_ramdisk= [RAM] List of ramdisks to load from floppy. - lp=0 [LP] Specify parallel ports to use, e.g, -or lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses -or lp=reset first parallel port). 'lp=0' disables the printer -or lp=auto driver. 'lp=reset' (which can be specified in - addition to the ports) causes attached - printers to be reset. Using - lp=port1,port2,... specifies the parallel - ports to associate lp devices with, starting - with lp0. A port specification may be 'none' - to skip that lp device, or a parport name such - as 'parport0'. Specifying 'lp=auto' instead - of a port specification list means that device - IDs from each port should be examined, to see - if an IEEE 1284-compliant printer is attached; - if so, the driver will manage that printer. + lp=0 [LP] Specify parallel ports to use, e.g, + lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses + lp=reset first parallel port). 'lp=0' disables the + lp=auto printer driver. 'lp=reset' (which can be + specified in addition to the ports) causes + attached printers to be reset. Using + lp=port1,port2,... specifies the parallel ports + to associate lp devices with, starting with + lp0. A port specification may be 'none' to skip + that lp device, or a parport name such as + 'parport0'. Specifying 'lp=auto' instead of a + port specification list means that device IDs + from each port should be examined, to see if + an IEEE 1284-compliant printer is attached; if + so, the driver will manage that printer. - ltpc= [HW] + ltpc= [HW] - mac5380= [HW,SCSI] + mac5380= [HW,SCSI] - max_loop=[0-255] [LOOP] States the maximum number of loopback devices - that can be mounted. + max_loop=[0-255] [LOOP] Set the maximum number of loopback devices + that can be mounted. - maxcpus= [SMP] States the maximum number of processors that + maxcpus= [SMP] States the maximum number of processors that an SMP kernel should make use of. - max_scsi_luns= [SCSI] + max_scsi_luns= [SCSI] - mca-pentium [BUGS=ix86] + mca-pentium [BUGS=ix86] - mcd= [HW,CD] + mcd= [HW,CD] - mcdx= [HW,CD] + mcdx= [HW,CD] - md= [HW] RAID subsystems devices and level + md= [HW] RAID subsystems devices and level. - mdacon= [MDA] + mdacon= [MDA] - mem= [KNL] force use XX Mb of memory when the kernel is not able - to see the whole system memory or for test + mem= [KNL] force use XX Mb of memory when the kernel is not + able to see the whole system memory or for test. - msmouse= [HW,MOUSE] Microsoft Mouse. + msmouse= [HW,MOUSE] Microsoft Mouse. - ncr5380= [HW,SCSI] + ncr5380= [HW,SCSI] - ncr53c400= [HW,SCSI] + ncr53c400= [HW,SCSI] - ncr53c400a= [HW,SCSI] + ncr53c400a= [HW,SCSI] - ncr53c406a= [HW,SCSI] + ncr53c406a= [HW,SCSI] - ncr53c8xx= [HW,SCSI] + ncr53c8xx= [HW,SCSI] - nfsaddrs= [NFS] + nfsaddrs= [NFS] - nfsroot= [NFS] nfs root filesystem for disk-less boxes + nfsroot= [NFS] nfs root filesystem for disk-less boxes. - nmi_watchdog= [KNL, BUGS=ix86] debugging features for SMP kernels + nmi_watchdog= [KNL, BUGS=ix86] debugging features for SMP kernels. - no387 [BUGS=ix86] Tells the kernel to use the 387 maths + no387 [BUGS=ix86] Tells the kernel to use the 387 maths emulation library even if a 387 maths coprocessor is present. - noapic [SMP,APIC] Tells the kernel not to make use of any + noapic [SMP,APIC] Tells the kernel not to make use of any APIC that may be present on the system. - noasync [HW, M68K] Disables async and sync negotiation for all devices. + noasync [HW, M68K] Disables async and sync negotiation for + all devices. - nodisconnect [HW,SCSI, M68K] Disables SCSI disconnects. + nodisconnect [HW,SCSI, M68K] Disables SCSI disconnects. - no-halt [BUGS=ix86] + no-halt [BUGS=ix86] - noinitrd [RAM] Tells the kernel not to load any configured - initial ramdisc. + noinitrd [RAM] Tells the kernel not to load any configured + initial RAM disk. - no-scroll [VGA] + no-scroll [VGA] - nosmp [SMP] Tells an SMP kernel to act as a UP kernel. + nosmp [SMP] Tells an SMP kernel to act as a UP kernel. - nosync [HW, M68K] Disables sync negotiation for all devices. + nosync [HW, M68K] Disables sync negotiation for all devices. - optcd= [HW,CD] + optcd= [HW,CD] - panic= [KNL] kernel behaviour on panic + panic= [KNL] kernel behaviour on panic. - parport=0 [HW,PPT] Specify parallel ports. 0 -or parport=auto disables. Use 'auto' to force the driver -or parport=0xBBB[,IRQ[,DMA]] to use any IRQ/DMA settings detected - (the default is to ignore detected - IRQ/DMA settings because of possible - conflicts). You can specify the base - address, IRQ, and DMA settings; IRQ - and DMA should be numbers, or 'auto' - (for using detected settings on that - particular port), or 'nofifo' (to - avoid using a FIFO even if it is - detected). Parallel ports are - assigned in the order they are - specified on the command line, - starting with parport0. + parport=0 [HW,PPT] Specify parallel ports. 0 disables. + parport=auto Use 'auto' to force the driver to use + parport=0xBBB[,IRQ[,DMA]] any IRQ/DMA settings detected (the + default is to ignore detected IRQ/DMA + settings because of possible + conflicts). You can specify the base + address, IRQ, and DMA settings; IRQ and + DMA should be numbers, or 'auto' (for + using detected settings on that + particular port), or 'nofifo' (to avoid + using a FIFO even if it is detected). + Parallel ports are assigned in the + order they are specified on the command + line, starting with parport0. - pas16= [HW,SCSI] + pas16= [HW,SCSI] - pcbit= [HW,ISDN] + pcbit= [HW,ISDN] - pcd. [PARIDE] + pcd. [PARIDE] - pci= [PCI] + pci= [PCI] - pd. [PARIDE] + pd. [PARIDE] - pf. [PARIDE] + pf. [PARIDE] - pg. [PARIDE] + pg. [PARIDE] - pirq= [SMP,APIC] mp-table + pirq= [SMP,APIC] mp-table. - plip= [PPT,NET] Parallel port network link. + plip= [PPT,NET] Parallel port network link. - profile= [KNL] enable kernel profiling via /proc/profile (param:log level) + profile= [KNL] enable kernel profiling via /proc/profile + (param:log level). - prompt_ramdisk= [RAM] Whether to prompt for ramdisk before loading - its contents into memory. + prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk + before loading. - pt. [PARIDE] + pt. [PARIDE] - ramdisk= [RAM] + ramdisk= [RAM] Sizes of RAM disks in kilobytes [deprecated]. - ramdisk_size= [RAM] + ramdisk_size= [RAM] New name for the ramdisk parameter. - ramdisk_start= [RAM] + ramdisk_start= [RAM] Starting block of RAM disk image (so you can + place it after the kernel image on a boot floppy). - reboot= [BUGS=ix86] + reboot= [BUGS=ix86] - reserve= [KNL,BUGS] force the kernel to ignore some iomem area + reserve= [KNL,BUGS] force the kernel to ignore some iomem area. - riscom8= [HW,SERIAL] + riscom8= [HW,SERIAL] - ro [KNL] Mount root device read-only on boot. + ro [KNL] Mount root device read-only on boot. - root= [KNL] root filesystem + root= [KNL] root filesystem. - rw [KNL] Mount root device read-write on boot. + rw [KNL] Mount root device read-write on boot. - S [KNL] run init in single mode + S [KNL] run init in single mode. - sbpcd= [HW,CD] Soundblaster CD adapter. + sbpcd= [HW,CD] Soundblaster CD adapter. - scsi_logging= [SCSI] + scsi_logging= [SCSI] - sjcd= [HW,CD] + sjcd= [HW,CD] - sonycd535= [HW,CD] + sonycd535= [HW,CD] - sound= [SOUND] + sound= [SOUND] - soundmodem= [HW,AX25,SOUND] Sound cards used as AX.25 modems. + soundmodem= [HW,AX25,SOUND] Use sound card as packet radio modem. - specialix= [HW,SERIAL] Specialix multi-serial port adapter. + specialix= [HW,SERIAL] Specialix multi-serial port adapter. - st= [HW] SCSI tape parameters (buffers, ..) + st= [HW] SCSI tape parameters (buffers, etc.). - st0x= [HW,SCSI] + st0x= [HW,SCSI] - stram_swap= [HW] + stram_swap= [HW] - switches= [HW, M68K] + switches= [HW, M68K] - sym53c416= [HW,SCSI] + sym53c416= [HW,SCSI] - sym53c8xx= [HW,SCSI] + sym53c8xx= [HW,SCSI] - t128= [HW,SCSI] + t128= [HW,SCSI] - tmc8xx= [HW,SCSI] + tmc8xx= [HW,SCSI] - tmscsim= [HW,SCSI] + tmscsim= [HW,SCSI] - tp720= [HW,PS2] + tp720= [HW,PS2] - u14-34f= [HW,SCSI] + u14-34f= [HW,SCSI] - video= [FB] frame buffer configuration + video= [FB] frame buffer configuration. - vga= [KNL] on ix386, enable to choose a peculiar video mode - vga=ask + vga= [KNL] on ix386, enable to choose a peculiar video mode + (use vga=ask for menu). - wd33c93= [HW,SCSI] + wd33c93= [HW,SCSI] - wd7000= [HW,SCSI] + wd7000= [HW,SCSI] - wdt= [HW] + wdt= [HW] - xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks + xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. - xd_geo= [HW,XT] + xd_geo= [HW,XT] diff --git a/Documentation/usb/CREDITS b/Documentation/usb/CREDITS index 18fd431e927a..6f30946dc757 100644 --- a/Documentation/usb/CREDITS +++ b/Documentation/usb/CREDITS @@ -10,6 +10,7 @@ difficult to maintain, add yourself with a patch if desired. Deti Fliegl ham Bradley M Keryan + Greg Kroah-Hartman Paul Mackerras David E. Nelson Vojtech Pavlik @@ -104,6 +105,9 @@ THANKS file in Inaky's driver): - Thanks to Entrega for providing PCI to USB cards, hubs and converter products for development. + - Thanks to ConnectTech for providing a WhiteHEAT usb to + serial converter, and the documentation for the device to + allow a driver to be written. And thanks go to (hey! in no particular order :) diff --git a/Makefile b/Makefile index 65e33103d34a..a47112682541 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 3 -SUBLEVEL = 39 +SUBLEVEL = 40 EXTRAVERSION = ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) diff --git a/arch/alpha/config.in b/arch/alpha/config.in index 35e9edeb0479..6830ee64994c 100644 --- a/arch/alpha/config.in +++ b/arch/alpha/config.in @@ -250,6 +250,10 @@ endmenu source drivers/char/Config.in +source drivers/usb/Config.in + +source drivers/misc/Config.in + source fs/Config.in if [ "$CONFIG_VT" = "y" ]; then diff --git a/arch/alpha/defconfig b/arch/alpha/defconfig index ba6f0070b922..b80c36954fc8 100644 --- a/arch/alpha/defconfig +++ b/arch/alpha/defconfig @@ -28,6 +28,7 @@ CONFIG_ALPHA_GENERIC=y # CONFIG_ALPHA_EB64P is not set # CONFIG_ALPHA_EB66 is not set # CONFIG_ALPHA_EB66P is not set +# CONFIG_ALPHA_EIGER is not set # CONFIG_ALPHA_JENSEN is not set # CONFIG_ALPHA_LX164 is not set # CONFIG_ALPHA_MIATA is not set @@ -44,14 +45,14 @@ CONFIG_ALPHA_GENERIC=y # CONFIG_ALPHA_SABLE is not set # CONFIG_ALPHA_TAKARA is not set CONFIG_PCI=y -CONFIG_PCI_NAMES=y # CONFIG_SMP is not set +CONFIG_PCI_NAMES=y CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set -CONFIG_SYSCTL=y CONFIG_BINFMT_AOUT=y CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set @@ -84,6 +85,7 @@ CONFIG_BLK_DEV_FD=y # CONFIG_BLK_DEV_MD is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_XD is not set +# CONFIG_BLK_DEV_DAC960 is not set CONFIG_PARIDE_PARPORT=y # CONFIG_PARIDE is not set # CONFIG_BLK_DEV_IDE_MODES is not set @@ -92,7 +94,8 @@ CONFIG_PARIDE_PARPORT=y # # Networking options # -# CONFIG_PACKET is not set +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set # CONFIG_NETLINK is not set # CONFIG_NETFILTER is not set # CONFIG_FILTER is not set @@ -135,6 +138,7 @@ CONFIG_BLK_DEV_SR=y # # Some SCSI devices (e.g. CD jukebox) support multiple LUNs # +# CONFIG_SCSI_DEBUG_QUEUES is not set # CONFIG_SCSI_MULTI_LUN is not set CONFIG_SCSI_CONSTANTS=y # CONFIG_SCSI_LOGGING is not set @@ -148,6 +152,7 @@ CONFIG_SCSI_CONSTANTS=y # CONFIG_SCSI_AHA1542 is not set # CONFIG_SCSI_AHA1740 is not set # CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_IPS is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set @@ -164,6 +169,7 @@ CONFIG_SCSI_CONSTANTS=y # CONFIG_SCSI_INIA100 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 @@ -201,6 +207,7 @@ CONFIG_NET_ETHERNET=y # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_DEPCA is not set # CONFIG_NET_ISA is not set CONFIG_NET_EISA=y # CONFIG_PCNET32 is not set @@ -211,16 +218,27 @@ CONFIG_DE4X5=y # CONFIG_DGRS is not set # CONFIG_EEXPRESS_PRO100 is not set # CONFIG_NE2K_PCI is not set +# CONFIG_SIS900 is not set # CONFIG_TLAN is not set # CONFIG_VIA_RHINE is not set # CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_SK98LIN is not set # CONFIG_FDDI 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 +# Token Ring driver support # # CONFIG_TR is not set # CONFIG_NET_FC is not set @@ -228,13 +246,12 @@ CONFIG_DE4X5=y # # Wan interfaces # -# CONFIG_HOSTESS_SV11 is not set -# CONFIG_COSA is not set -# CONFIG_SEALEVEL_4021 is not set -# CONFIG_DLCI is not set -# CONFIG_WAN_DRIVERS is not set -# CONFIG_LAPBETHER is not set -# CONFIG_X25_ASY is not set +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +# CONFIG_NET_PCMCIA is not set # # Amateur Radio support @@ -263,6 +280,11 @@ CONFIG_SERIAL=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 +# +# I2C support +# +# CONFIG_I2C is not set + # # Mice # @@ -271,7 +293,16 @@ CONFIG_MOUSE=y CONFIG_PSMOUSE=y # 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_NVRAM is not set # CONFIG_RTC is not set @@ -280,17 +311,31 @@ CONFIG_PSMOUSE=y # Video For Linux # # CONFIG_VIDEO_DEV is not set - -# -# Joystick support -# -# CONFIG_JOYSTICK 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_DRM is not set +# CONFIG_DRM_TDFX is not set + +# +# PCMCIA character device support +# +CONFIG_PCMCIA_SERIAL=y +# CONFIG_PCMCIA_SERIAL_CS is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Misc devices +# # # Filesystems @@ -298,11 +343,11 @@ CONFIG_PSMOUSE=y # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AFFS_FS is not set -# CONFIG_HFS_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_CRAMFS is not set CONFIG_ISO9660_FS=y # CONFIG_JOLIET is not set # CONFIG_MINIX_FS is not set @@ -313,6 +358,7 @@ CONFIG_DEVPTS_FS=y # CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set # CONFIG_UFS_FS is not set # @@ -320,6 +366,7 @@ CONFIG_EXT2_FS=y # # CONFIG_CODA_FS is not set CONFIG_NFS_FS=y +# CONFIG_NFSD is not set CONFIG_SUNRPC=y CONFIG_LOCKD=y # CONFIG_SMB_FS is not set @@ -329,16 +376,20 @@ CONFIG_LOCKD=y # Partition Types # # CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y CONFIG_OSF_PARTITION=y -# CONFIG_SMD_DISKLABEL is not set -# CONFIG_SGI_DISKLABEL is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SGI_PARTITION is not set +# CONFIG_SUN_PARTITION is not set # CONFIG_NLS is not set # # Console drivers # CONFIG_VGA_CONSOLE=y + +# +# Frame-buffer support +# # CONFIG_FB is not set # diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index be351ebc19fb..95e539d345a2 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c @@ -439,7 +439,7 @@ static int osf_ufs_mount(char *dirname, struct ufs_args *args, int flags) dentry = getdev(tmp.devname, 0); retval = PTR_ERR(dentry); - if (IS_ERR(dentry) + if (IS_ERR(dentry)) goto out; retval = do_mount(dentry->d_inode->i_bdev, tmp.devname, dirname, "ext2", flags, NULL); @@ -471,7 +471,6 @@ out: static int osf_procfs_mount(char *dirname, struct procfs_args *args, int flags) { - int retval; struct procfs_args tmp; if (copy_from_user(&tmp, args, sizeof(tmp))) diff --git a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c index 601cb940136e..aa0a8d9689f2 100644 --- a/arch/alpha/kernel/pci.c +++ b/arch/alpha/kernel/pci.c @@ -251,11 +251,13 @@ pcibios_fixup_bus(struct pci_bus *bus) /* Propogate hose info into the subordinate devices. */ struct pci_controler *hose = (struct pci_controler *) bus->sysdata; - struct pci_dev *dev; + struct list_head *ln; bus->resource[0] = hose->io_space; bus->resource[1] = hose->mem_space; - for (dev = bus->devices; dev; dev = dev->sibling) { + + for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) { + struct pci_dev *dev = pci_dev_b(ln); if ((dev->class >> 8) != PCI_CLASS_BRIDGE_PCI) pcibios_fixup_device_resources(dev, bus); } @@ -322,6 +324,13 @@ pcibios_fixup_pbus_ranges(struct pci_bus * bus, ranges->mem_end -= bus->resource[1]->start; } +int __init +pcibios_enable_device(struct pci_dev *dev) +{ + /* Not needed, since we enable all devices at startup. */ + return 0; +} + void __init common_init_pci(void) { @@ -339,8 +348,7 @@ common_init_pci(void) next_busno += 1; } - pci_assign_unassigned_resources(alpha_mv.min_io_address, - alpha_mv.min_mem_address); + pci_assign_unassigned_resources(); pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq); pci_set_bus_ranges(); } diff --git a/arch/alpha/mm/init.c b/arch/alpha/mm/init.c index daaa36e09240..97bb6df9d677 100644 --- a/arch/alpha/mm/init.c +++ b/arch/alpha/mm/init.c @@ -274,7 +274,8 @@ srm_paging_stop (void) } #endif -static void __init printk_memory_info(void) +static void __init +printk_memory_info(void) { unsigned long codesize, reservedpages, datasize, initsize, tmp; extern int page_is_ram(unsigned long) __init; diff --git a/arch/i386/config.in b/arch/i386/config.in index 654602855d72..7d56f423d12a 100644 --- a/arch/i386/config.in +++ b/arch/i386/config.in @@ -103,7 +103,11 @@ if [ "$CONFIG_VISWS" != "y" ]; then bool 'MCA support' CONFIG_MCA fi +bool 'Support for hot-pluggable devices' CONFIG_HOTPLUG + +if [ "$CONFIG_HOTPLUG" = "y" ] ; then source drivers/pcmcia/Config.in +fi bool 'System V IPC' CONFIG_SYSVIPC bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT diff --git a/arch/i386/defconfig b/arch/i386/defconfig index 5399a0ecb9f6..dfc2249816da 100644 --- a/arch/i386/defconfig +++ b/arch/i386/defconfig @@ -53,6 +53,7 @@ CONFIG_PCI_BIOS=y CONFIG_PCI_DIRECT=y CONFIG_PCI_NAMES=y # CONFIG_MCA is not set +CONFIG_HOTPLUG=y # # PCMCIA/CardBus support diff --git a/arch/i386/kernel/acpi.c b/arch/i386/kernel/acpi.c index 49444d258c52..772169536c9f 100644 --- a/arch/i386/kernel/acpi.c +++ b/arch/i386/kernel/acpi.c @@ -501,21 +501,14 @@ static void acpi_destroy_tables(void) } /* - * Locate PIIX4 device and create a fake FACP + * Init PIIX4 device and create a fake FACP */ -static int __init acpi_find_piix4(void) +static int __init acpi_init_piix4(struct pci_dev *dev) { - struct pci_dev *dev; u32 base; u16 cmd; u8 pmregmisc; - dev = pci_find_device(PCI_VENDOR_ID_INTEL, - PCI_DEVICE_ID_INTEL_82371AB_3, - NULL); - if (!dev) - return -ENODEV; - pci_read_config_word(dev, PCI_COMMAND, &cmd); if (!(cmd & PCI_COMMAND_IO)) return -ENODEV; @@ -567,6 +560,97 @@ static int __init acpi_find_piix4(void) return 0; } +/* + * Init VIA ACPI device and create a fake FACP + */ +static int __init acpi_init_via(struct pci_dev *dev) +{ + u32 base; + u8 tmp, irq; + + pci_read_config_byte(dev, 0x41, &tmp); + if (!(tmp & 0x80)) + return -ENODEV; + + pci_read_config_byte(dev, 8, &tmp); + tmp = (tmp & 0x10 ? 0x48 : 0x20); + + pci_read_config_dword(dev, tmp, &base); + if (!(base & PCI_BASE_ADDRESS_SPACE_IO)) + return -ENODEV; + + base &= PCI_BASE_ADDRESS_IO_MASK; + if (!base) + return -ENODEV; + + pci_read_config_byte(dev, 0x42, &irq); + + printk(KERN_INFO "ACPI: found %s at 0x%04x\n", dev->name, base); + + acpi_facp = kmalloc(sizeof(struct acpi_facp), GFP_KERNEL); + if (!acpi_facp) + return -ENOMEM; + + acpi_fake_facp = 1; + memset(acpi_facp, 0, sizeof(struct acpi_facp)); + + acpi_facp->int_model = ACPI_VIA_INT_MODEL; + acpi_facp->sci_int = irq; + acpi_facp->smi_cmd = base + ACPI_VIA_SMI_CMD; + acpi_facp->acpi_enable = ACPI_VIA_ACPI_ENABLE; + acpi_facp->acpi_disable = ACPI_VIA_ACPI_DISABLE; + acpi_facp->pm1a_evt = base + ACPI_PIIX4_PM1_EVT; + acpi_facp->pm1a_cnt = base + ACPI_PIIX4_PM1_CNT; + acpi_facp->pm_tmr = base + ACPI_VIA_PM_TMR; + acpi_facp->gpe0 = base + ACPI_VIA_GPE0; + + acpi_facp->pm1_evt_len = ACPI_VIA_PM1_EVT_LEN; + acpi_facp->pm1_cnt_len = ACPI_VIA_PM1_CNT_LEN; + acpi_facp->pm_tm_len = ACPI_VIA_PM_TM_LEN; + acpi_facp->gpe0_len = ACPI_VIA_GPE0_LEN; + acpi_facp->p_lvl2_lat = (__u16) ACPI_INFINITE_LAT; + acpi_facp->p_lvl3_lat = (__u16) ACPI_INFINITE_LAT; + + acpi_facp->duty_offset = ACPI_VIA_DUTY_OFFSET; + acpi_facp->duty_width = ACPI_VIA_DUTY_WIDTH; + + acpi_facp->day_alarm = ACPI_VIA_DAY_ALARM; + acpi_facp->mon_alarm = ACPI_VIA_MON_ALARM; + acpi_facp->century = ACPI_VIA_CENTURY; + + acpi_facp_addr = virt_to_phys(acpi_facp); + acpi_dsdt_addr = 0; + + acpi_p_blk = base + ACPI_VIA_P_BLK; + + return 0; +} + +static struct pci_simple_probe_entry acpi_devices[] __initdata = +{ + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, 0, 0, + acpi_init_piix4}, + {PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, 0, 0, + acpi_init_via}, + {0,} +}; + +/* + * Probe for matching PCI device + */ +static int __init acpi_probe(struct pci_dev *dev, + int match, + const struct pci_simple_probe_entry *entry, + void *data) +{ + if(entry->dev_data) { + typedef int (*init_fn)(struct pci_dev*); + init_fn init = (init_fn) entry->dev_data; + return (*init)(dev); + } + return -ENODEV; +} + /* * Handle an ACPI SCI (fixed or general purpose event) */ @@ -692,7 +776,7 @@ static void acpi_idle_handler(void) sleep3: sleep_level = 3; if (!acpi_p_lvl3_tested) { - printk("ACPI C3 works\n"); + printk(KERN_INFO "ACPI C3 works\n"); acpi_p_lvl3_tested = 1; } wake_on_busmaster(); @@ -732,7 +816,7 @@ sleep3_with_arbiter: sleep2: sleep_level = 2; if (!acpi_p_lvl2_tested) { - printk("ACPI C2 works\n"); + printk(KERN_INFO "ACPI C2 works\n"); acpi_p_lvl2_tested = 1; } wake_on_busmaster(); /* Required to track BM activity.. */ @@ -1170,17 +1254,18 @@ static int __init acpi_init(void) if (acpi_disabled) return -ENODEV; - if (acpi_find_tables() && acpi_find_piix4()) { - // no ACPI tables and not PIIX4 + if (acpi_find_tables() + && pci_simple_probe(acpi_devices, 0, acpi_probe, NULL) <= 0) { + // no ACPI tables and not a recognized ACPI chipset return -ENODEV; } - /* - * Internally we always keep latencies in timer - * ticks, which is simpler and more consistent (what is - * an uS to us?). Besides, that gives people more - * control in the /proc interfaces. - */ + /* + * Internally we always keep latencies in timer + * ticks, which is simpler and more consistent (what is + * an uS to us?). Besides, that gives people more + * control in the /proc interfaces. + */ if (acpi_facp->p_lvl2_lat && acpi_facp->p_lvl2_lat <= ACPI_MAX_P_LVL2_LAT) { acpi_p_lvl2_lat = ACPI_uS_TO_TMR_TICKS(acpi_facp->p_lvl2_lat); diff --git a/arch/i386/kernel/pci-i386.c b/arch/i386/kernel/pci-i386.c index e94868cd979b..27715f16a6b4 100644 --- a/arch/i386/kernel/pci-i386.c +++ b/arch/i386/kernel/pci-i386.c @@ -94,59 +94,56 @@ #include "pci-i386.h" -/* - * Assign new address to PCI resource. We hope our resource information - * is complete. On the PC, we don't re-assign resources unless we are - * forced to do so. - * - * Expects start=0, end=size-1, flags=resource type. - */ - -int pci_assign_resource(struct pci_dev *dev, int i) +void +pcibios_update_resource(struct pci_dev *dev, struct resource *root, + struct resource *res, int resource) { - struct resource *r = &dev->resource[i]; - struct resource *pr = pci_find_parent_resource(dev, r); - unsigned long size = r->end + 1; u32 new, check; + int reg; - if (!pr) { - printk(KERN_ERR "PCI: Cannot find parent resource for device %s\n", dev->slot_name); - return -EINVAL; - } - if (r->flags & IORESOURCE_IO) { - /* - * We need to avoid collisions with `mirrored' VGA ports and other strange - * ISA hardware, so we always want the addresses kilobyte aligned. - */ - if (size > 0x100) { - printk(KERN_ERR "PCI: I/O Region %s/%d too large (%ld bytes)\n", dev->slot_name, i, size); - return -EFBIG; - } - if (allocate_resource(pr, r, size, 0x1000, ~0, 1024, NULL, NULL)) { - printk(KERN_ERR "PCI: Allocation of I/O region %s/%d (%ld bytes) failed\n", dev->slot_name, i, size); - return -EBUSY; - } + new = res->start | (res->flags & PCI_REGION_FLAG_MASK); + if (resource < 6) { + reg = PCI_BASE_ADDRESS_0 + 4*resource; + } else if (resource == PCI_ROM_RESOURCE) { + res->flags |= PCI_ROM_ADDRESS_ENABLE; + reg = dev->rom_base_reg; } else { - if (allocate_resource(pr, r, size, 0x10000000, ~0, size, NULL, NULL)) { - printk(KERN_ERR "PCI: Allocation of memory region %s/%d (%ld bytes) failed\n", dev->slot_name, i, size); - return -EBUSY; - } + /* Bug? */ + return; } - if (i < 6) { - int reg = PCI_BASE_ADDRESS_0 + 4*i; - new = r->start | (r->flags & PCI_REGION_FLAG_MASK); - pci_write_config_dword(dev, reg, new); - pci_read_config_dword(dev, reg, &check); - if (new != check) - printk(KERN_ERR "PCI: Error while updating region %s/%d (%08x != %08x)\n", dev->slot_name, i, new, check); - } else if (i == PCI_ROM_RESOURCE) { - r->flags |= PCI_ROM_ADDRESS_ENABLE; - pci_write_config_dword(dev, dev->rom_base_reg, r->start | (r->flags & PCI_REGION_FLAG_MASK)); + + pci_write_config_dword(dev, reg, new); + pci_read_config_dword(dev, reg, &check); + if (new != check) { + printk(KERN_ERR "PCI: Error while updating region " + "%s/%d (%08x != %08x)\n", dev->slot_name, resource, + new, check); } - printk("PCI: Assigned addresses %08lx-%08lx to region %s/%d\n", r->start, r->end, dev->slot_name, i); - return 0; } +void +pcibios_align_resource(void *data, struct resource *res, unsigned long size) +{ + struct pci_dev *dev = data; + + if (res->flags & IORESOURCE_IO) { + unsigned long start = res->start; + + /* We need to avoid collisions with `mirrored' VGA ports + and other strange ISA hardware, so we always want the + addresses kilobyte aligned. */ + if (size >= 0x100) { + printk(KERN_ERR "PCI: I/O Region %s/%d too large" + " (%ld bytes)\n", dev->slot_name, + dev->resource - res, size); + } + + start = (start + 1024 - 1) & ~(1024 - 1); + res->start = start; + } +} + + /* * Handle resources of PCI devices. If the world were perfect, we could * just allocate all the resource regions and do nothing more. It isn't. diff --git a/arch/i386/kernel/pci-pc.c b/arch/i386/kernel/pci-pc.c index 6b7d65589b1b..601ffd3bf38c 100644 --- a/arch/i386/kernel/pci-pc.c +++ b/arch/i386/kernel/pci-pc.c @@ -23,6 +23,7 @@ unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2; static struct pci_bus *pci_root_bus; +static struct pci_ops *pci_root_ops; /* * IRQ routing table provided by the BIOS @@ -876,9 +877,9 @@ static void __init pci_fixup_i450nx(struct pci_dev *d) pci_read_config_byte(d, reg++, &subb); DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb); if (busno) - pci_scan_bus(busno, pci_root_bus->ops, NULL); /* Bus A */ + pci_scan_bus(busno, pci_root_ops, NULL); /* Bus A */ if (suba < subb) - pci_scan_bus(suba+1, pci_root_bus->ops, NULL); /* Bus B */ + pci_scan_bus(suba+1, pci_root_ops, NULL); /* Bus B */ } } @@ -891,7 +892,7 @@ static void __init pci_fixup_rcc(struct pci_dev *d) u8 busno; pci_read_config_byte(d, 0x44, &busno); printk("PCI: RCC host bridge: secondary bus %02x\n", busno); - pci_scan_bus(busno, pci_root_bus->ops, NULL); + pci_scan_bus(busno, pci_root_ops, NULL); } static void __init pci_fixup_compaq(struct pci_dev *d) @@ -903,7 +904,7 @@ static void __init pci_fixup_compaq(struct pci_dev *d) u8 busno; pci_read_config_byte(d, 0xc8, &busno); printk("PCI: Compaq host bridge: secondary bus %02x\n", busno); - pci_scan_bus(busno, pci_root_bus->ops, NULL); + pci_scan_bus(busno, pci_root_ops, NULL); } static void __init pci_fixup_umc_ide(struct pci_dev *d) @@ -1189,7 +1190,6 @@ void __init pcibios_init(void) { struct pci_ops *bios = NULL; struct pci_ops *dir = NULL; - struct pci_ops *ops; #ifdef CONFIG_PCI_BIOS if ((pci_probe & PCI_PROBE_BIOS) && ((bios = pci_find_bios()))) { @@ -1202,16 +1202,16 @@ void __init pcibios_init(void) dir = pci_check_direct(); #endif if (dir) - ops = dir; + pci_root_ops = dir; else if (bios) - ops = bios; + pci_root_ops = bios; else { printk("PCI: No PCI bus detected\n"); return; } printk("PCI: Probing PCI hardware\n"); - pci_root_bus = pci_scan_bus(0, ops, NULL); + pci_root_bus = pci_scan_bus(0, pci_root_ops, NULL); pcibios_fixup_irqs(); if (pci_probe & PCI_PEER_FIXUP) diff --git a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c index 535f19e81d05..b106c412d016 100644 --- a/arch/i386/kernel/smp.c +++ b/arch/i386/kernel/smp.c @@ -448,7 +448,6 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic, struct call_data_struct data; int ret, cpus = smp_num_cpus-1; static spinlock_t lock = SPIN_LOCK_UNLOCKED; - unsigned long timeout; if(cpus == 0) return 0; diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index 063e9fefb6eb..323ac103c63b 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c @@ -138,7 +138,7 @@ static void show_registers(struct pt_regs *regs) unsigned short ss; unsigned long *stack, addr, module_start, module_end; - esp = (unsigned long) (1+regs); + esp = (unsigned long) (®s->esp); ss = __KERNEL_DS; if (regs->xcs & 3) { in_kernel = 0; diff --git a/arch/i386/vmlinux.lds b/arch/i386/vmlinux.lds index 9624cae47bd1..5790bb5d4496 100644 --- a/arch/i386/vmlinux.lds +++ b/arch/i386/vmlinux.lds @@ -64,6 +64,12 @@ SECTIONS } _end = . ; + /* Sections to be discarded */ + /DISCARD/ : { + *(.text.exit) + *(.data.exit) + } + /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } diff --git a/arch/ppc/kernel/ppc4xx_pic.c b/arch/ppc/kernel/ppc4xx_pic.c index 4a3405d780bc..8b40080b4e73 100644 --- a/arch/ppc/kernel/ppc4xx_pic.c +++ b/arch/ppc/kernel/ppc4xx_pic.c @@ -22,7 +22,6 @@ * */ -#include #include #include #include diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index f78171281801..9d1f63bf9b0b 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -344,7 +344,7 @@ static int hung_up_tty_ioctl(struct inode * inode, struct file * file, return cmd == TIOCSPGRP ? -ENOTTY : -EIO; } -static long long tty_lseek(struct file * file, long long offset, int orig) +static loff_t tty_lseek(struct file * file, loff_t offset, int orig) { return -ESPIPE; } diff --git a/drivers/char/vc_screen.c b/drivers/char/vc_screen.c index a25013fea525..5fc98155b74d 100644 --- a/drivers/char/vc_screen.c +++ b/drivers/char/vc_screen.c @@ -59,7 +59,7 @@ vcs_size(struct inode *inode) return size; } -static long long vcs_lseek(struct file *file, long long offset, int orig) +static loff_t vcs_lseek(struct file *file, loff_t offset, int orig) { int size = vcs_size(file->f_dentry->d_inode); diff --git a/drivers/net/oaknet.c b/drivers/net/oaknet.c index f206b34d4dff..282d436fd54c 100644 --- a/drivers/net/oaknet.c +++ b/drivers/net/oaknet.c @@ -12,8 +12,6 @@ */ #include - -#include #include #include #include diff --git a/drivers/net/pcmcia/tulip_cb.c b/drivers/net/pcmcia/tulip_cb.c index 5c9d1b27a36a..37e05bfd3567 100644 --- a/drivers/net/pcmcia/tulip_cb.c +++ b/drivers/net/pcmcia/tulip_cb.c @@ -256,58 +256,6 @@ them. The MII transceiver status is polled using an kernel timer. */ -static struct net_device * -tulip_probe1(int pci_bus, int pci_devfn, struct net_device *dev, long ioaddr, - int irq, int chip_idx, int board_idx); - -/* This table drives the PCI probe routines. It's mostly boilerplate in all - of the drivers, and will likely be provided by some future kernel. - Note the matching code -- the first table entry matchs all 56** cards but - second only the 1234 card. -*/ -enum pci_flags_bit { - PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4, - PCI_ADDR0=0x10<<0, PCI_ADDR1=0x10<<1, PCI_ADDR2=0x10<<2, PCI_ADDR3=0x10<<3, -}; -#define PCI_ADDR0_IO (PCI_USES_IO|PCI_ADDR0) - -struct pci_id_info { - const char *name; - u16 vendor_id, device_id, device_id_mask, flags; - int io_size, min_latency; - struct net_device *(*probe1)(int pci_bus, int pci_devfn, struct net_device *dev, - long ioaddr, int irq, int chip_idx, int fnd_cnt); -}; -static struct pci_id_info pci_tbl[] = { - { "Digital DC21040 Tulip", - 0x1011, 0x0002, 0xffff, PCI_ADDR0_IO, 128, 32, tulip_probe1 }, - { "Digital DC21041 Tulip", - 0x1011, 0x0014, 0xffff, PCI_ADDR0_IO, 128, 32, tulip_probe1 }, - { "Digital DS21140 Tulip", - 0x1011, 0x0009, 0xffff, PCI_ADDR0_IO, 128, 32, tulip_probe1 }, - { "Digital DS21143 Tulip", - 0x1011, 0x0019, 0xffff, PCI_ADDR0_IO, 128, 32, tulip_probe1 }, - { "Lite-On 82c168 PNIC", - 0x11AD, 0x0002, 0xffff, PCI_ADDR0_IO, 256, 32, tulip_probe1 }, - { "Macronix 98713 PMAC", - 0x10d9, 0x0512, 0xffff, PCI_ADDR0_IO, 256, 32, tulip_probe1 }, - { "Macronix 98715 PMAC", - 0x10d9, 0x0531, 0xffff, PCI_ADDR0_IO, 256, 32, tulip_probe1 }, - { "Macronix 98725 PMAC", - 0x10d9, 0x0531, 0xffff, PCI_ADDR0_IO, 256, 32, tulip_probe1 }, - { "ASIX AX88140", - 0x125B, 0x1400, 0xffff, PCI_ADDR0_IO, 128, 32, tulip_probe1 }, - { "Lite-On LC82C115 PNIC-II", - 0x11AD, 0xc115, 0xffff, PCI_ADDR0_IO, 256, 32, tulip_probe1 }, - { "ADMtek AN981 Comet", - 0x1317, 0x0981, 0xffff, PCI_ADDR0_IO, 256, 32, tulip_probe1 }, - { "Compex RL100-TX", - 0x11F6, 0x9881, 0xffff, PCI_ADDR0_IO, 128, 32, tulip_probe1 }, - { "Xircom Cardbus Adapter (DEC 21143 compatible mode)", - 0x115D, 0x0003, 0xffff, PCI_ADDR0_IO, 128, 32, tulip_probe1 }, - {0}, -}; - /* This table use during operation for capabilities and media timer. */ static void tulip_timer(unsigned long data); @@ -3140,29 +3088,38 @@ static void set_rx_mode(struct net_device *dev) outl_CSR6(csr6 | 0x0000, ioaddr, tp->chip_id); } -static int tulip_probe(struct pci_dev *pdev) +static struct pci_device_id tulip_pci_table[] = { + { 0x1011, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21040 }, + { 0x1011, 0x0014, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21041 }, + { 0x1011, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21140 }, + { 0x1011, 0x0019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21142 }, + { 0x11AD, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, LC82C168 }, + { 0x10d9, 0x0512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98713 }, + { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98715 }, + { 0x10d9, 0x0531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, MX98725 }, + { 0x125B, 0x1400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AX88140 }, + { 0x11AD, 0xc115, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PNIC2 }, + { 0x1317, 0x0981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMET }, + { 0x11F6, 0x9881, PCI_ANY_ID, PCI_ANY_ID, 0, 0, COMPEX9881 }, + { 0x115D, 0x0003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, X3201_3 }, + {0}, +}; + +MODULE_DEVICE_TABLE(pci, tulip_pci_table); + +static int __devinit tulip_pci_probe(struct pci_dev *pdev, struct pci_device_id *id) { struct net_device *dev; - int chip_idx; static int board_idx = 0; printk(KERN_INFO "tulip_attach(%s)\n", pdev->slot_name); - for (chip_idx = 0; pci_tbl[chip_idx].vendor_id; chip_idx++) - if (pdev->vendor == pci_tbl[chip_idx].vendor_id - && (pdev->device & pci_tbl[chip_idx].device_id_mask) == - pci_tbl[chip_idx].device_id) - break; - if (pci_tbl[chip_idx].vendor_id == 0) - return 0; - pci_set_master(pdev); - dev = pci_tbl[chip_idx].probe1(pdev->bus->number, pdev->devfn, NULL, + dev = tulip_probe1(pdev->bus->number, pdev->devfn, NULL, pdev->resource[0].start, pdev->irq, - chip_idx, board_idx++); + id->driver_data, board_idx++); if (dev) { pdev->driver_data = dev; - MOD_INC_USE_COUNT; return 1; } return 0; @@ -3184,7 +3141,7 @@ static void tulip_resume(struct pci_dev *pdev) if (tp->open) tulip_up(dev); } -static void tulip_remove(struct pci_dev *pdev) +static void __devexit tulip_remove(struct pci_dev *pdev) { struct net_device *dev = pdev->driver_data; struct tulip_private *tp = (struct tulip_private *)dev->priv; @@ -3197,25 +3154,34 @@ static void tulip_remove(struct pci_dev *pdev) struct pci_driver tulip_ops = { name: "tulip_cb", - probe: tulip_probe, + id_table: tulip_pci_table, + probe: tulip_pci_probe, remove: tulip_remove, suspend: tulip_suspend, resume: tulip_resume }; -int __init tulip_init(void) +#ifdef MODULE + +int module_init(void) { pci_register_driver(&tulip_ops); return 0; } -void __exit tulip_cleanup(void) +void module_cleanup(void) { pci_unregister_driver(&tulip_ops); } -module_init(tulip_init); -module_exit(tulip_cleanup); +#else + +void tulip_probe(void) +{ + pci_register_driver(&tulip_ops); +} + +#endif /* * Local variables: diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile index 41829a29c3fc..f1709045fd7b 100644 --- a/drivers/pci/Makefile +++ b/drivers/pci/Makefile @@ -24,10 +24,10 @@ ifdef CONFIG_PROC_FS O_OBJS += proc.o endif -L_OBJS += compat.o names.o helper.o +L_OBJS += compat.o names.o helper.o setup-res.o setup-bus.o setup-irq.o ifndef CONFIG_X86 -L_OBJS += syscall.o setup.o +L_OBJS += syscall.o endif include $(TOPDIR)/Rules.make diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 5e76ece463cf..b2767548e2b3 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -202,6 +202,39 @@ pci_enable_device(struct pci_dev *dev) static LIST_HEAD(pci_drivers); +static struct pci_device_id * +pci_match_device(struct pci_device_id *ids, struct pci_dev *dev) +{ + while (ids->vendor || ids->subvendor || ids->class_mask) { + if ((ids->vendor == PCI_ANY_ID || ids->vendor == dev->vendor) && + (ids->device == PCI_ANY_ID || ids->device == dev->device) && + (ids->subvendor == PCI_ANY_ID || ids->subvendor == dev->subsystem_vendor) && + (ids->subdevice == PCI_ANY_ID || ids->subdevice == dev->subsystem_device) && + !((ids->class ^ dev->class) & ids->class_mask)) + return ids; + ids++; + } + return NULL; +} + +static int +pci_announce_device(struct pci_driver *drv, struct pci_dev *dev) +{ + struct pci_device_id *id; + + if (drv->id_table) { + id = pci_match_device(drv->id_table, dev); + if (!id) + return 0; + } else + id = NULL; + if (drv->probe(dev, id)) { + dev->driver = drv; + return 1; + } + return 0; +} + void pci_register_driver(struct pci_driver *drv) { @@ -209,8 +242,8 @@ pci_register_driver(struct pci_driver *drv) list_add_tail(&drv->node, &pci_drivers); pci_for_each_dev(dev) { - if (!pci_dev_driver(dev) && drv->probe(dev)) - dev->driver = drv; + if (!pci_dev_driver(dev)) + pci_announce_device(drv, dev); } } @@ -229,6 +262,8 @@ pci_unregister_driver(struct pci_driver *drv) } } +#ifdef CONFIG_HOTPLUG + void pci_insert_device(struct pci_dev *dev, struct pci_bus *bus) { @@ -241,10 +276,8 @@ pci_insert_device(struct pci_dev *dev, struct pci_bus *bus) #endif for(ln=pci_drivers.next; ln != &pci_drivers; ln=ln->next) { struct pci_driver *drv = list_entry(ln, struct pci_driver, node); - if (drv->probe(dev)) { - dev->driver = drv; + if (pci_announce_device(drv, dev)) break; - } } } @@ -273,6 +306,8 @@ pci_remove_device(struct pci_dev *dev) #endif } +#endif + static struct pci_driver pci_compat_driver = { name: "compat" }; diff --git a/drivers/pci/pcisyms.c b/drivers/pci/pcisyms.c index e581c0ea26c9..fb38bede2a50 100644 --- a/drivers/pci/pcisyms.c +++ b/drivers/pci/pcisyms.c @@ -26,11 +26,14 @@ EXPORT_SYMBOL(pci_set_master); EXPORT_SYMBOL(pci_simple_probe); EXPORT_SYMBOL(pci_set_power_state); EXPORT_SYMBOL(pci_assign_resource); +EXPORT_SYMBOL(pci_register_driver); +EXPORT_SYMBOL(pci_unregister_driver); + +#ifdef CONFIG_HOTPLUG EXPORT_SYMBOL(pci_setup_device); EXPORT_SYMBOL(pci_insert_device); EXPORT_SYMBOL(pci_remove_device); -EXPORT_SYMBOL(pci_register_driver); -EXPORT_SYMBOL(pci_unregister_driver); +#endif /* Obsolete functions */ diff --git a/drivers/pci/setup.c b/drivers/pci/setup-bus.c similarity index 52% rename from drivers/pci/setup.c rename to drivers/pci/setup-bus.c index 96d35c2ba386..401185890b2f 100644 --- a/drivers/pci/setup.c +++ b/drivers/pci/setup-bus.c @@ -1,5 +1,5 @@ /* - * drivers/pci/setup.c + * drivers/pci/setup-bus.c * * Extruded from code written by * Dave Rusling (david.rusling@reo.mts.dec.com) @@ -9,8 +9,6 @@ * Support routines for initializing a PCI subsystem. */ -/* fixed for multiple pci buses, 1999 Andrea Arcangeli */ - #include #include #include @@ -26,129 +24,6 @@ # define DBGC(args) #endif -int __init -pci_claim_resource(struct pci_dev *dev, int resource) -{ - struct resource *res = &dev->resource[resource]; - struct resource *root = pci_find_parent_resource(dev, res); - int err; - - err = -EINVAL; - if (root != NULL) { - err = request_resource(root, res); - if (err) { - printk(KERN_ERR "PCI: Address space collision on " - "region %d of device %s [%lx:%lx]\n", - resource, dev->name, res->start, res->end); - } - } else { - printk(KERN_ERR "PCI: No parent found for region %d " - "of device %s\n", resource, dev->name); - } - - return err; -} - -static void -pdev_assign_unassigned_resources(struct pci_dev *dev, u32 min_io, u32 min_mem) -{ - u32 reg; - u16 cmd; - int i; - - DBGC(("PCI assign unassigned: (%s)\n", dev->name)); - - pci_read_config_word(dev, PCI_COMMAND, &cmd); - - for (i = 0; i < PCI_NUM_RESOURCES; i++) { - struct resource *root, *res; - unsigned long size, min; - - res = &dev->resource[i]; - - if (res->flags & IORESOURCE_IO) - cmd |= PCI_COMMAND_IO; - else if (res->flags & IORESOURCE_MEM) - cmd |= PCI_COMMAND_MEMORY; - - /* If it is already assigned or the resource does - not exist, there is nothing to do. */ - if (res->parent != NULL || res->flags == 0) - continue; - - /* Determine the root we allocate from. */ - res->end -= res->start; - res->start = 0; - root = pci_find_parent_resource(dev, res); - if (root == NULL) - continue; - - min = (res->flags & IORESOURCE_IO ? min_io : min_mem); - min += root->start; - size = res->end + 1; - DBGC((" for root[%lx:%lx] min[%lx] size[%lx]\n", - root->start, root->end, min, size)); - - if (allocate_resource(root, res, size, min, -1, size, pcibios_align_resource, dev) < 0) { - printk(KERN_ERR - "PCI: Failed to allocate resource %d for %s\n", - i, dev->name); - continue; - } - - DBGC((" got res[%lx:%lx] for resource %d\n", - res->start, res->end, i)); - - /* Update PCI config space. */ - pcibios_update_resource(dev, root, res, i); - } - - /* Special case, disable the ROM. Several devices act funny - (ie. do not respond to memory space writes) when it is left - enabled. A good example are QlogicISP adapters. */ - - if (dev->rom_base_reg) { - pci_read_config_dword(dev, dev->rom_base_reg, ®); - reg &= ~PCI_ROM_ADDRESS_ENABLE; - pci_write_config_dword(dev, dev->rom_base_reg, reg); - dev->resource[PCI_ROM_RESOURCE].flags &= ~PCI_ROM_ADDRESS_ENABLE; - } - - /* All of these (may) have I/O scattered all around and may not - use I/O base address registers at all. So we just have to - always enable IO to these devices. */ - if ((dev->class >> 8) == PCI_CLASS_NOT_DEFINED - || (dev->class >> 8) == PCI_CLASS_NOT_DEFINED_VGA - || (dev->class >> 8) == PCI_CLASS_STORAGE_IDE - || (dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) { - cmd |= PCI_COMMAND_IO; - } - - /* ??? Always turn on bus mastering. If the device doesn't support - it, the bit will go into the bucket. */ - cmd |= PCI_COMMAND_MASTER; - - /* Enable the appropriate bits in the PCI command register. */ - pci_write_config_word(dev, PCI_COMMAND, cmd); - - DBGC((" cmd reg 0x%x\n", cmd)); - - /* If this is a PCI bridge, set the cache line correctly. */ - if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { - pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, - (L1_CACHE_BYTES / sizeof(u32))); - } -} - -void __init -pci_assign_unassigned_resources(u32 min_io, u32 min_mem) -{ - struct pci_dev *dev; - - pci_for_each_dev(dev) { - pdev_assign_unassigned_resources(dev, min_io, min_mem); - } -} #define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1)) #define ROUND_DOWN(x, a) ((x) & ~((a) - 1)) @@ -279,53 +154,3 @@ pci_set_bus_ranges(void) for(ln=pci_root_buses.next; ln != &pci_root_buses; ln=ln->next) pbus_set_ranges(pci_bus_b(ln), NULL); } - -static void __init -pdev_fixup_irq(struct pci_dev *dev, - u8 (*swizzle)(struct pci_dev *, u8 *), - int (*map_irq)(struct pci_dev *, u8, u8)) -{ - u8 pin, slot; - int irq; - - /* If this device is not on the primary bus, we need to figure out - which interrupt pin it will come in on. We know which slot it - will come in on 'cos that slot is where the bridge is. Each - time the interrupt line passes through a PCI-PCI bridge we must - apply the swizzle function. */ - - pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); - /* Cope with 0 and illegal. */ - if (pin == 0 || pin > 4) - pin = 1; - - /* Follow the chain of bridges, swizzling as we go. */ - slot = (*swizzle)(dev, &pin); - - irq = (*map_irq)(dev, slot, pin); - if (irq == -1) - irq = 0; - dev->irq = irq; - - DBGC(("PCI fixup irq: (%s) got %d\n", dev->name, dev->irq)); - - /* Always tell the device, so the driver knows what is - the real IRQ to use; the device does not use it. */ - pcibios_update_irq(dev, irq); -} - -void __init -pci_fixup_irqs(u8 (*swizzle)(struct pci_dev *, u8 *), - int (*map_irq)(struct pci_dev *, u8, u8)) -{ - struct pci_dev *dev; - pci_for_each_dev(dev) { - pdev_fixup_irq(dev, swizzle, map_irq); - } -} - -int -pcibios_enable_device(struct pci_dev *dev) -{ - return 0; -} diff --git a/drivers/pci/setup-irq.c b/drivers/pci/setup-irq.c new file mode 100644 index 000000000000..f15eba9dde58 --- /dev/null +++ b/drivers/pci/setup-irq.c @@ -0,0 +1,71 @@ +/* + * drivers/pci/setup-irq.c + * + * Extruded from code written by + * Dave Rusling (david.rusling@reo.mts.dec.com) + * David Mosberger (davidm@cs.arizona.edu) + * David Miller (davem@redhat.com) + * + * Support routines for initializing a PCI subsystem. + */ + + +#include +#include +#include +#include +#include +#include + + +#define DEBUG_CONFIG 0 +#if DEBUG_CONFIG +# define DBGC(args) printk args +#else +# define DBGC(args) +#endif + + +static void __init +pdev_fixup_irq(struct pci_dev *dev, + u8 (*swizzle)(struct pci_dev *, u8 *), + int (*map_irq)(struct pci_dev *, u8, u8)) +{ + u8 pin, slot; + int irq; + + /* If this device is not on the primary bus, we need to figure out + which interrupt pin it will come in on. We know which slot it + will come in on 'cos that slot is where the bridge is. Each + time the interrupt line passes through a PCI-PCI bridge we must + apply the swizzle function. */ + + pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); + /* Cope with 0 and illegal. */ + if (pin == 0 || pin > 4) + pin = 1; + + /* Follow the chain of bridges, swizzling as we go. */ + slot = (*swizzle)(dev, &pin); + + irq = (*map_irq)(dev, slot, pin); + if (irq == -1) + irq = 0; + dev->irq = irq; + + DBGC(("PCI fixup irq: (%s) got %d\n", dev->name, dev->irq)); + + /* Always tell the device, so the driver knows what is + the real IRQ to use; the device does not use it. */ + pcibios_update_irq(dev, irq); +} + +void __init +pci_fixup_irqs(u8 (*swizzle)(struct pci_dev *, u8 *), + int (*map_irq)(struct pci_dev *, u8, u8)) +{ + struct pci_dev *dev; + pci_for_each_dev(dev) { + pdev_fixup_irq(dev, swizzle, map_irq); + } +} diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c new file mode 100644 index 000000000000..1284c9aa8762 --- /dev/null +++ b/drivers/pci/setup-res.c @@ -0,0 +1,165 @@ +/* + * drivers/pci/setup-res.c + * + * Extruded from code written by + * Dave Rusling (david.rusling@reo.mts.dec.com) + * David Mosberger (davidm@cs.arizona.edu) + * David Miller (davem@redhat.com) + * + * Support routines for initializing a PCI subsystem. + */ + +/* fixed for multiple pci buses, 1999 Andrea Arcangeli */ + +#include +#include +#include +#include +#include +#include + + +#define DEBUG_CONFIG 0 +#if DEBUG_CONFIG +# define DBGC(args) printk args +#else +# define DBGC(args) +#endif + + +int __init +pci_claim_resource(struct pci_dev *dev, int resource) +{ + struct resource *res = &dev->resource[resource]; + struct resource *root = pci_find_parent_resource(dev, res); + int err; + + err = -EINVAL; + if (root != NULL) { + err = request_resource(root, res); + if (err) { + printk(KERN_ERR "PCI: Address space collision on " + "region %d of device %s [%lx:%lx]\n", + resource, dev->name, res->start, res->end); + } + } else { + printk(KERN_ERR "PCI: No parent found for region %d " + "of device %s\n", resource, dev->name); + } + + return err; +} + +int +pci_assign_resource(struct pci_dev *dev, int i) +{ + struct resource *root, *res; + unsigned long size, min; + + res = &dev->resource[i]; + + /* Determine the root we allocate from. */ + res->end -= res->start; + res->start = 0; + root = pci_find_parent_resource(dev, res); + if (root == NULL) { + printk(KERN_ERR "PCI: Cannot find parent resource for " + "device %s\n", dev->slot_name); + return -EINVAL; + } + + min = (res->flags & IORESOURCE_IO ? PCIBIOS_MIN_IO : PCIBIOS_MIN_MEM); + min += root->start; + size = res->end + 1; + DBGC((" for root[%lx:%lx] min[%lx] size[%lx]\n", + root->start, root->end, min, size)); + + if (allocate_resource(root, res, size, min, -1, size, + pcibios_align_resource, dev) < 0) { + printk(KERN_ERR "PCI: Failed to allocate resource %d for %s\n", + i, dev->name); + return -EBUSY; + } + + DBGC((" got res[%lx:%lx] for resource %d\n", + res->start, res->end, i)); + + /* Update PCI config space. */ + pcibios_update_resource(dev, root, res, i); + + return 0; +} + +static void +pdev_assign_unassigned_resources(struct pci_dev *dev) +{ + u32 reg; + u16 cmd; + int i; + + DBGC(("PCI assign unassigned: (%s)\n", dev->name)); + + pci_read_config_word(dev, PCI_COMMAND, &cmd); + + for (i = 0; i < PCI_NUM_RESOURCES; i++) { + struct resource *res = &dev->resource[i]; + + if (res->flags & IORESOURCE_IO) + cmd |= PCI_COMMAND_IO; + else if (res->flags & IORESOURCE_MEM) + cmd |= PCI_COMMAND_MEMORY; + + /* If it is already assigned or the resource does + not exist, there is nothing to do. */ + if (res->parent != NULL || res->flags == 0) + continue; + + pci_assign_resource(dev, i); + } + + /* Special case, disable the ROM. Several devices act funny + (ie. do not respond to memory space writes) when it is left + enabled. A good example are QlogicISP adapters. */ + + if (dev->rom_base_reg) { + pci_read_config_dword(dev, dev->rom_base_reg, ®); + reg &= ~PCI_ROM_ADDRESS_ENABLE; + pci_write_config_dword(dev, dev->rom_base_reg, reg); + dev->resource[PCI_ROM_RESOURCE].flags &= ~PCI_ROM_ADDRESS_ENABLE; + } + + /* All of these (may) have I/O scattered all around and may not + use I/O base address registers at all. So we just have to + always enable IO to these devices. */ + if ((dev->class >> 8) == PCI_CLASS_NOT_DEFINED + || (dev->class >> 8) == PCI_CLASS_NOT_DEFINED_VGA + || (dev->class >> 8) == PCI_CLASS_STORAGE_IDE + || (dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) { + cmd |= PCI_COMMAND_IO; + } + + /* ??? Always turn on bus mastering. If the device doesn't support + it, the bit will go into the bucket. */ + cmd |= PCI_COMMAND_MASTER; + + /* Enable the appropriate bits in the PCI command register. */ + pci_write_config_word(dev, PCI_COMMAND, cmd); + + DBGC((" cmd reg 0x%x\n", cmd)); + + /* If this is a PCI bridge, set the cache line correctly. */ + if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) { + pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, + (L1_CACHE_BYTES / sizeof(u32))); + } +} + +void __init +pci_assign_unassigned_resources(void) +{ + struct pci_dev *dev; + + pci_for_each_dev(dev) { + pdev_assign_unassigned_resources(dev); + } +} diff --git a/drivers/pcmcia/cardbus.c b/drivers/pcmcia/cardbus.c index acddfb20e327..74114b4fe986 100644 --- a/drivers/pcmcia/cardbus.c +++ b/drivers/pcmcia/cardbus.c @@ -106,39 +106,12 @@ typedef struct cb_config_t { /*===================================================================== Expansion ROM's have a special layout, and pointers specify an - image number and an offset within that image. check_rom() - verifies that the expansion ROM exists and has the standard - layout. xlate_rom_addr() converts an image/offset address to an - absolute offset from the ROM's base address. + image number and an offset within that image. xlate_rom_addr() + converts an image/offset address to an absolute offset from the + ROM's base address. =====================================================================*/ -static int check_rom(u_char * b, u_long len) -{ - u_int img = 0, ofs = 0, sz; - u_short data; - DEBUG(0, "ROM image dump:\n"); - while ((readb(b) == 0x55) && (readb(b + 1) == 0xaa)) { - data = readb(b + ROM_DATA_PTR) + - (readb(b + ROM_DATA_PTR + 1) << 8); - sz = 512 * (readb(b + data + PCDATA_IMAGE_SZ) + - (readb(b + data + PCDATA_IMAGE_SZ + 1) << 8)); - DEBUG(0, " image %d: 0x%06x-0x%06x, signature %c%c%c%c\n", - img, ofs, ofs + sz - 1, - readb(b + data + PCDATA_SIGNATURE), - readb(b + data + PCDATA_SIGNATURE + 1), - readb(b + data + PCDATA_SIGNATURE + 2), - readb(b + data + PCDATA_SIGNATURE + 3)); - ofs += sz; - img++; - if ((readb(b + data + PCDATA_INDICATOR) & 0x80) || - (sz == 0) || (ofs >= len)) - break; - b += sz; - } - return img; -} - static u_int xlate_rom_addr(u_char * b, u_int addr) { u_int img = 0, ofs = 0, sz; @@ -326,12 +299,8 @@ int cb_alloc(socket_info_t * s) /* FIXME: Do we need to enable the expansion ROM? */ for (r = 0; r < 7; r++) { struct resource *res = dev->resource + r; - if (res->flags) { - /* Unset resource address, assign new one! */ - res->end -= res->start; - res->start = 0; + if (res->flags) pci_assign_resource(dev, r); - } } pci_enable_device(dev); diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c index 5498f3958f1b..a04245762eb2 100644 --- a/drivers/pcmcia/cs.c +++ b/drivers/pcmcia/cs.c @@ -1129,11 +1129,11 @@ int pcmcia_get_window(window_handle_t *handle, int idx, win_req_t *req) return CS_SUCCESS; } /* get_window */ -int pcmcia_get_first_window(client_handle_t *handle, win_req_t *req) +int pcmcia_get_first_window(window_handle_t *win, win_req_t *req) { - if ((handle == NULL) || CHECK_HANDLE(*handle)) + if ((win == NULL) || ((*win)->magic != WINDOW_MAGIC)) return CS_BAD_HANDLE; - return pcmcia_get_window((window_handle_t *)handle, 0, req); + return pcmcia_get_window(win, 0, req); } int pcmcia_get_next_window(window_handle_t *win, win_req_t *req) diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c index 8c96585c6221..d109da3b3dfd 100644 --- a/drivers/pcmcia/i82365.c +++ b/drivers/pcmcia/i82365.c @@ -61,12 +61,10 @@ #include "i82365.h" #include "cirrus.h" #include "vg468.h" -#include "ricoh.h" #include "o2micro.h" /* PCI-bus controllers */ #include "old-yenta.h" -#include "ti113x.h" #include "smc34c90.h" #include "topic.h" diff --git a/drivers/pcmcia/pci_socket.c b/drivers/pcmcia/pci_socket.c index 8fdcd32d0a1a..3f4463e75a96 100644 --- a/drivers/pcmcia/pci_socket.c +++ b/drivers/pcmcia/pci_socket.c @@ -70,9 +70,8 @@ static int pci_inquire_socket(unsigned int sock, socket_cap_t *cap) { pci_socket_t *socket = pci_socket_array + sock; - if (socket->op && socket->op->inquire) - return socket->op->inquire(socket, cap); - return -EINVAL; + *cap = socket->cap; + return 0; } static int pci_get_status(unsigned int sock, unsigned int *value) diff --git a/drivers/pcmcia/pci_socket.h b/drivers/pcmcia/pci_socket.h index 082cb87961cd..d8474b3f6b98 100644 --- a/drivers/pcmcia/pci_socket.h +++ b/drivers/pcmcia/pci_socket.h @@ -16,6 +16,9 @@ typedef struct pci_socket { socket_cap_t cap; wait_queue_head_t wait; unsigned int events; + + /* A few words of private data for the low-level driver.. */ + unsigned int private[8]; } pci_socket_t; struct pci_socket_ops { @@ -24,7 +27,6 @@ struct pci_socket_ops { int (*init)(struct pci_socket *); int (*suspend)(struct pci_socket *); - int (*inquire)(struct pci_socket *, socket_cap_t *cap); int (*get_status)(struct pci_socket *, unsigned int *); int (*get_socket)(struct pci_socket *, socket_state_t *); int (*set_socket)(struct pci_socket *, socket_state_t *); diff --git a/drivers/pcmcia/ricoh.h b/drivers/pcmcia/ricoh.h index 8cfd30dac086..2228b4769d91 100644 --- a/drivers/pcmcia/ricoh.h +++ b/drivers/pcmcia/ricoh.h @@ -70,25 +70,6 @@ /* Register definitions for Ricoh PCI-to-CardBus bridges */ -#ifndef PCI_VENDOR_ID_RICOH -#define PCI_VENDOR_ID_RICOH 0x1180 -#endif -#ifndef PCI_DEVICE_ID_RICOH_RL5C465 -#define PCI_DEVICE_ID_RICOH_RL5C465 0x0465 -#endif -#ifndef PCI_DEVICE_ID_RICOH_RL5C466 -#define PCI_DEVICE_ID_RICOH_RL5C466 0x0466 -#endif -#ifndef PCI_DEVICE_ID_RICOH_RL5C475 -#define PCI_DEVICE_ID_RICOH_RL5C475 0x0475 -#endif -#ifndef PCI_DEVICE_ID_RICOH_RL5C476 -#define PCI_DEVICE_ID_RICOH_RL5C476 0x0476 -#endif -#ifndef PCI_DEVICE_ID_RICOH_RL5C478 -#define PCI_DEVICE_ID_RICOH_RL5C478 0x0478 -#endif - /* Extra bits in CB_BRIDGE_CONTROL */ #define RL5C46X_BCR_3E0_ENA 0x0800 #define RL5C46X_BCR_3E2_ENA 0x1000 @@ -129,4 +110,55 @@ #define RL5C4XX_HOLD_MASK 0x1c00 #define RL5C4XX_HOLD_SHIFT 10 +#ifdef CONFIG_CARDBUS + +#define rl_misc(socket) ((socket)->private[0]) +#define rl_ctl(socket) ((socket)->private[1]) +#define rl_io(socket) ((socket)->private[2]) +#define rl_mem(socket) ((socket)->private[3]) + +/* + * Magic Ricoh initialization code.. Save state at + * beginning, re-initialize it after suspend. + */ +static int ricoh_open(pci_socket_t *socket) +{ + rl_misc(socket) = config_readw(socket, RL5C4XX_MISC); + rl_ctl(socket) = config_readw(socket, RL5C4XX_16BIT_CTL); + rl_io(socket) = config_readw(socket, RL5C4XX_16BIT_IO_0); + rl_mem(socket) = config_readw(socket, RL5C4XX_16BIT_MEM_0); + + /* Set the default timings, don't trust the original values */ + rl_ctl(socket) = RL5C4XX_16CTL_IO_TIMING | RL5C4XX_16CTL_MEM_TIMING; + return 0; +} + +static int ricoh_init(pci_socket_t *socket) +{ + yenta_init(socket); + + config_writew(socket, RL5C4XX_MISC, rl_misc(socket)); + config_writew(socket, RL5C4XX_16BIT_CTL, rl_ctl(socket)); + config_writew(socket, RL5C4XX_16BIT_IO_0, rl_io(socket)); + config_writew(socket, RL5C4XX_16BIT_MEM_0, rl_mem(socket)); + return 0; +} + +static struct pci_socket_ops ricoh_ops = { + ricoh_open, + yenta_close, + ricoh_init, + yenta_suspend, + yenta_get_status, + yenta_get_socket, + yenta_set_socket, + yenta_get_io_map, + yenta_set_io_map, + yenta_get_mem_map, + yenta_set_mem_map, + yenta_proc_setup +}; + +#endif /* CONFIG_CARDBUS */ + #endif /* _LINUX_RICOH_H */ diff --git a/drivers/pcmcia/ti113x.h b/drivers/pcmcia/ti113x.h index f37faeba5f38..5564462ab65d 100644 --- a/drivers/pcmcia/ti113x.h +++ b/drivers/pcmcia/ti113x.h @@ -30,49 +30,6 @@ #ifndef _LINUX_TI113X_H #define _LINUX_TI113X_H -#ifndef PCI_VENDOR_ID_TI -#define PCI_VENDOR_ID_TI 0x104c -#endif - -#ifndef PCI_DEVICE_ID_TI_1130 -#define PCI_DEVICE_ID_TI_1130 0xac12 -#endif -#ifndef PCI_DEVICE_ID_TI_1131 -#define PCI_DEVICE_ID_TI_1131 0xac15 -#endif -#ifndef PCI_DEVICE_ID_TI_1031 -#define PCI_DEVICE_ID_TI_1031 0xac13 -#endif -#ifndef PCI_DEVICE_ID_TI_1250A -#define PCI_DEVICE_ID_TI_1250A 0xac16 -#endif -#ifndef PCI_DEVICE_ID_TI_1220 -#define PCI_DEVICE_ID_TI_1220 0xac17 -#endif -#ifndef PCI_DEVICE_ID_TI_1221 -#define PCI_DEVICE_ID_TI_1221 0xac19 -#endif -#ifndef PCI_DEVICE_ID_TI_1210 -#define PCI_DEVICE_ID_TI_1210 0xac1a -#endif -#ifndef PCI_DEVICE_ID_TI_1450 -#define PCI_DEVICE_ID_TI_1450 0xac1b -#endif -#ifndef PCI_DEVICE_ID_TI_1225 -#define PCI_DEVICE_ID_TI_1225 0xac1c -#endif -#ifndef PCI_DEVICE_ID_TI_1251A -#define PCI_DEVICE_ID_TI_1251A 0xac1d -#endif -#ifndef PCI_DEVICE_ID_TI_1211 -#define PCI_DEVICE_ID_TI_1211 0xac1e -#endif -#ifndef PCI_DEVICE_ID_TI_1251B -#define PCI_DEVICE_ID_TI_1251B 0xac1f -#endif -#ifndef PCI_DEVICE_ID_TI_1420 -#define PCI_DEVICE_ID_TI_1420 0xac51 -#endif /* Register definitions for TI 113X PCI-to-CardBus bridges */ @@ -176,5 +133,86 @@ /* ExCA IO offset registers */ #define TI113X_IO_OFFSET(map) (0x36+((map)<<1)) +#ifdef CONFIG_CARDBUS + +#define ti_sysctl(socket) ((socket)->private[0]) +#define ti_cardctl(socket) ((socket)->private[1]) +#define ti_devctl(socket) ((socket)->private[2]) + +static int ti113x_open(pci_socket_t *socket) +{ + ti_sysctl(socket) = config_readl(socket, TI113X_SYSTEM_CONTROL); + ti_cardctl(socket) = config_readb(socket, TI113X_CARD_CONTROL); + ti_devctl(socket) = config_readb(socket, TI113X_DEVICE_CONTROL); + + ti_cardctl(socket) &= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC); + if (socket->cb_irq) + ti_cardctl(socket) |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ; + return 0; +} + +static int ti113x_init(pci_socket_t *socket) +{ + yenta_init(socket); + + config_writel(socket, TI113X_SYSTEM_CONTROL, ti_sysctl(socket)); + config_writeb(socket, TI113X_CARD_CONTROL, ti_cardctl(socket)); + config_writeb(socket, TI113X_DEVICE_CONTROL, ti_devctl(socket)); + + return 0; +} + +static struct pci_socket_ops ti113x_ops = { + ti113x_open, + yenta_close, + ti113x_init, + yenta_suspend, + yenta_get_status, + yenta_get_socket, + yenta_set_socket, + yenta_get_io_map, + yenta_set_io_map, + yenta_get_mem_map, + yenta_set_mem_map, + yenta_proc_setup +}; + +#define ti_diag(socket) ((socket)->private[0]) + +static int ti1250_open(pci_socket_t *socket) +{ + ti_diag(socket) = config_readb(socket, TI1250_DIAGNOSTIC); + + ti_diag(socket) &= ~(TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ); + if (socket->cb_irq) + ti_diag(socket) |= TI1250_DIAG_PCI_CSC | TI1250_DIAG_PCI_IREQ; + return 0; +} + +static int ti1250_init(pci_socket_t *socket) +{ + yenta_init(socket); + + config_writeb(socket, TI1250_DIAGNOSTIC, ti_diag(socket)); + return 0; +} + +static struct pci_socket_ops ti1250_ops = { + ti1250_open, + yenta_close, + ti1250_init, + yenta_suspend, + yenta_get_status, + yenta_get_socket, + yenta_set_socket, + yenta_get_io_map, + yenta_set_io_map, + yenta_get_mem_map, + yenta_set_mem_map, + yenta_proc_setup +}; + +#endif /* CONFIG_CARDBUS */ + #endif /* _LINUX_TI113X_H */ diff --git a/drivers/pcmcia/yenta.c b/drivers/pcmcia/yenta.c index 942b52df754b..465df600251a 100644 --- a/drivers/pcmcia/yenta.c +++ b/drivers/pcmcia/yenta.c @@ -15,7 +15,6 @@ #include "yenta.h" #include "i82365.h" -#include "ricoh.h" /* Don't ask.. */ #define to_cycles(ns) ((ns)/120) @@ -68,12 +67,6 @@ static void exca_writew(pci_socket_t *socket, unsigned reg, u16 val) exca_writeb(socket, reg+1, val >> 8); } -static int yenta_inquire(pci_socket_t *socket, socket_cap_t *cap) -{ - *cap = socket->cap; - return 0; -} - /* * Ugh, mixed-mode cardbus and 16-bit pccard state: things depend * on what kind of card is inserted.. @@ -190,13 +183,13 @@ static int yenta_set_socket(pci_socket_t *socket, socket_state_t *state) u16 bridge; yenta_set_power(socket, state); + socket->io_irq = state->io_irq; bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~CB_BRIDGE_CRST; if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) { bridge |= (state->flags & SS_RESET) ? CB_BRIDGE_CRST : 0; - bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN; /* ISA interrupt control? */ - if (bridge & CB_BRIDGE_INTR) { + if (!socket->cb_irq) { u8 intr = exca_readb(socket, I365_INTCTL); intr = (intr & ~0xf) | state->io_irq; exca_writeb(socket, I365_INTCTL, intr); @@ -207,7 +200,8 @@ static int yenta_set_socket(pci_socket_t *socket, socket_state_t *state) reg = exca_readb(socket, I365_INTCTL) & (I365_RING_ENA | I365_INTR_ENA); reg |= (state->flags & SS_RESET) ? 0 : I365_PC_RESET; reg |= (state->flags & SS_IOCARD) ? I365_PC_IOCARD : 0; - reg |= state->io_irq; + if (!socket->cb_irq) + reg |= state->io_irq; exca_writeb(socket, I365_INTCTL, reg); reg = exca_readb(socket, I365_POWER) & (I365_VCC_MASK|I365_VPP1_MASK); @@ -426,7 +420,7 @@ static void yenta_interrupt(int irq, void *dev_id, struct pt_regs *regs) * more timely manner if the state change interrupt * works..) */ -static int socket_thread(void * data) +static int yenta_socket_thread(void * data) { pci_socket_t * socket = (pci_socket_t *) data; DECLARE_WAITQUEUE(wait, current); @@ -516,6 +510,7 @@ static void yenta_clear_maps(pci_socket_t *socket) /* Called at resume and initialization events */ static int yenta_init(pci_socket_t *socket) { + u16 bridge; struct pci_dev *dev = socket->dev; pci_set_power_state(socket->dev, 0); @@ -536,6 +531,19 @@ static int yenta_init(pci_socket_t *socket) config_writeb(socket, PCI_SECONDARY_BUS, dev->subordinate->number); config_writeb(socket, PCI_SUBORDINATE_BUS, dev->subordinate->number); + /* + * Set up the bridging state: + * - enable write posting. + * - memory window 0 prefetchable, window 1 non-prefetchable + * - PCI interrupts enabled if a PCI interrupt exists.. + */ + bridge = config_readw(socket, CB_BRIDGE_CONTROL); + bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_INTR | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN); + bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN; + if (!socket->cb_irq) + bridge |= CB_BRIDGE_INTR; + config_writew(socket, CB_BRIDGE_CONTROL, bridge); + exca_writeb(socket, I365_GBLCTL, 0x00); exca_writeb(socket, I365_GENCTL, 0x00); @@ -543,29 +551,6 @@ static int yenta_init(pci_socket_t *socket) return 0; } -/* - * More of an example than anything else... The standard - * yenta init code works well enough - but this is how - * you'd do it if you wanted to have a special init sequence. - */ -static int ricoh_init(pci_socket_t *socket) -{ - u16 misc = config_readw(socket, RL5C4XX_MISC); - u16 ctl = config_readw(socket, RL5C4XX_16BIT_CTL); - u16 io = config_readw(socket, RL5C4XX_16BIT_IO_0); - u16 mem = config_readw(socket, RL5C4XX_16BIT_MEM_0); - - ctl = RL5C4XX_16CTL_IO_TIMING | RL5C4XX_16CTL_MEM_TIMING; - - config_writew(socket, RL5C4XX_MISC, misc); - config_writew(socket, RL5C4XX_16BIT_CTL, ctl); - config_writew(socket, RL5C4XX_16BIT_IO_0, io); - config_writew(socket, RL5C4XX_16BIT_MEM_0, mem); - - return yenta_init(socket); -} - - static int yenta_suspend(pci_socket_t *socket) { yenta_set_socket(socket, &dead_socket); @@ -643,6 +628,43 @@ static void yenta_allocate_resources(pci_socket_t *socket) yenta_allocate_res(socket, 2, IORESOURCE_IO); } +/* + * Close it down - release our resources and go home.. + */ +static void yenta_close(pci_socket_t *sock) +{ + if (sock->cb_irq) + free_irq(sock->cb_irq, sock); + if (sock->base) + iounmap(sock->base); +} + +#include "ti113x.h" +#include "ricoh.h" + +/* + * Different cardbus controllers have slightly different + * initialization sequences etc details. List them here.. + */ +#define PD(x,y) PCI_VENDOR_ID_##x, PCI_DEVICE_ID_##x##_##y +static struct cardbus_override_struct { + unsigned short vendor; + unsigned short device; + struct pci_socket_ops *op; +} cardbus_override[] = { + { PD(TI,1130), &ti113x_ops }, + { PD(TI,1131), &ti113x_ops }, + { PD(TI,1250), &ti1250_ops }, + + { PD(RICOH,RL5C465), &ricoh_ops }, + { PD(RICOH,RL5C466), &ricoh_ops }, + { PD(RICOH,RL5C475), &ricoh_ops }, + { PD(RICOH,RL5C476), &ricoh_ops }, + { PD(RICOH,RL5C478), &ricoh_ops } +}; + +#define NR_OVERRIDES (sizeof(cardbus_override)/sizeof(struct cardbus_override_struct)) + /* * Initialize a cardbus controller. Make sure we have a usable * interrupt, and that we can map the cardbus area. Fill in the @@ -650,6 +672,7 @@ static void yenta_allocate_resources(pci_socket_t *socket) */ static int yenta_open(pci_socket_t *socket) { + int i; struct pci_dev *dev = socket->dev; /* @@ -684,22 +707,24 @@ static int yenta_open(pci_socket_t *socket) /* And figure out what the dang thing can do for the PCMCIA layer... */ yenta_get_socket_capabilities(socket); - kernel_thread(socket_thread, socket, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + /* Do we have special options for the device? */ + for (i = 0; i < NR_OVERRIDES; i++) { + struct cardbus_override_struct *d = cardbus_override+i; + if (dev->vendor == d->vendor && dev->device == d->device) { + socket->op = d->op; + if (d->op->open) { + int retval = d->op->open(socket); + if (retval < 0) + return retval; + } + } + } + + kernel_thread(yenta_socket_thread, socket, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); printk("Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE)); return 0; } -/* - * Close it down - release our resources and go home.. - */ -static void yenta_close(pci_socket_t *sock) -{ - if (sock->cb_irq) - free_irq(sock->cb_irq, sock); - if (sock->base) - iounmap(sock->base); -} - /* * Standard plain cardbus - no frills, no extensions */ @@ -708,7 +733,6 @@ struct pci_socket_ops yenta_operations = { yenta_close, yenta_init, yenta_suspend, - yenta_inquire, yenta_get_status, yenta_get_socket, yenta_set_socket, @@ -728,7 +752,6 @@ struct pci_socket_ops ricoh_operations = { yenta_close, ricoh_init, yenta_suspend, - yenta_inquire, yenta_get_status, yenta_get_socket, yenta_set_socket, diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c index 028eda7dadfc..72849c1082a5 100644 --- a/drivers/pnp/quirks.c +++ b/drivers/pnp/quirks.c @@ -16,6 +16,8 @@ #include #include #include +#include + static void __init quirk_awe32_resources(struct pci_dev *dev) { diff --git a/drivers/usb/Config.in b/drivers/usb/Config.in index fef7dd0fe34d..13b426c9d3ff 100644 --- a/drivers/usb/Config.in +++ b/drivers/usb/Config.in @@ -21,7 +21,7 @@ comment 'USB Devices' dep_tristate ' USB Printer support' CONFIG_USB_PRINTER $CONFIG_USB dep_tristate ' USB Scanner support' CONFIG_USB_SCANNER $CONFIG_USB dep_tristate ' USB Audio support' CONFIG_USB_AUDIO $CONFIG_USB - dep_tristate ' USB Communications Device Class (ACM) support' CONFIG_USB_ACM $CONFIG_USB + dep_tristate ' USB Modem (CDC ACM) support' CONFIG_USB_ACM $CONFIG_USB dep_tristate ' USB Serial Converter support' CONFIG_USB_SERIAL $CONFIG_USB dep_tristate ' USB CPiA Camera support' CONFIG_USB_CPIA $CONFIG_USB dep_tristate ' USB OV511 Camera support' CONFIG_USB_OV511 $CONFIG_USB diff --git a/drivers/usb/acm.c b/drivers/usb/acm.c index c85e60039595..70a4d593d726 100644 --- a/drivers/usb/acm.c +++ b/drivers/usb/acm.c @@ -1,5 +1,5 @@ /* - * acm.c Version 0.12 + * acm.c Version 0.13 * * Copyright (c) 1999 Armin Fuerst * Copyright (c) 1999 Pavel Machek @@ -496,11 +496,14 @@ static void *acm_probe(struct usb_device *dev, unsigned int ifnum) for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++); if (acm_table[minor]) { - dbg("no more free acm devices"); + err("no more free acm devices"); return NULL; } - if (!(acm = kmalloc(sizeof(struct acm), GFP_KERNEL))) return NULL; + if (!(acm = kmalloc(sizeof(struct acm), GFP_KERNEL))) { + err("out of memory"); + return NULL; + } memset(acm, 0, sizeof(struct acm)); ctrlsize = epctrl->wMaxPacketSize; @@ -512,6 +515,7 @@ static void *acm_probe(struct usb_device *dev, unsigned int ifnum) acm->dev = dev; if (!(buf = kmalloc(ctrlsize + readsize + acm->writesize, GFP_KERNEL))) { + err("out of memory"); kfree(acm); return NULL; } @@ -523,15 +527,15 @@ static void *acm_probe(struct usb_device *dev, unsigned int ifnum) buf += ctrlsize, readsize, acm_read_bulk, acm); FILL_BULK_URB(&acm->writeurb, dev, usb_sndbulkpipe(dev, epwrite->bEndpointAddress), - buf += readsize , acm->writesize, acm_write_bulk, acm); + buf += readsize, acm->writesize, acm_write_bulk, acm); printk(KERN_INFO "ttyACM%d: USB ACM device\n", minor); acm_set_control(acm, acm->ctrlout); - acm->linecoding.speed = 115200; - acm->linecoding.databits = 8; - acm_set_coding(acm, &acm->linecoding); + acm->line.speed = cpu_to_le32(9600); + acm->line.databits = 8; + acm_set_line(acm, &acm->line); usb_driver_claim_interface(&acm_driver, acm->iface + 0, acm); usb_driver_claim_interface(&acm_driver, acm->iface + 1, acm); diff --git a/drivers/usb/usb-serial.c b/drivers/usb/usb-serial.c index 0cb3bdcba8c2..78e3ecdb3fa7 100644 --- a/drivers/usb/usb-serial.c +++ b/drivers/usb/usb-serial.c @@ -1,7 +1,7 @@ /* * USB Serial Converter driver * - * (C) Copyright (C) 1999 + * (C) Copyright (C) 1999, 2000 * Greg Kroah-Hartman (greg@kroah.com) * * This program is free software; you can redistribute it and/or modify @@ -12,8 +12,16 @@ * This driver was originally based on the ACM driver by Armin Fuerst (which was * based on a driver by Brad Keryan) * - * See README.serial for more information on using this driver. + * See Documentation/usb-serial.txt for more information on using this driver. * + * version 0.4.0 (01/10/2000) gkh + * Added whiteheat.h containing the firmware for the ConnectTech WhiteHEAT + * device. Added startup function to allow firmware to be downloaded to + * a device if it needs to be. + * Added firmware download logic to the WhiteHEAT device. + * Started to add #defines to split up the different drivers for potential + * configuration option. + * * version 0.3.1 (12/30/99) gkh * Fixed problems with urb for bulk out. * Added initial support for multiple sets of endpoints. This enables @@ -77,10 +85,19 @@ #include #include -#undef DEBUG +#include "whiteheat.h" + +#define DEBUG #include "usb.h" +/* different configuration options to cut down on code size if you wish */ +#define CONFIG_BELKIN_SERIAL +#define CONFIG_PERACOM_SERIAL +#define CONFIG_VISOR_SERIAL +#define CONFIG_WHITEHEAT_SERIAL +#define CONFIG_GENERIC_SERIAL + /* Module information */ MODULE_AUTHOR("Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux-usb/"); MODULE_DESCRIPTION("USB Serial Driver"); @@ -114,6 +131,48 @@ static void * usb_serial_probe(struct usb_device *dev, unsigned int ifnum); static void usb_serial_disconnect(struct usb_device *dev, void *ptr); +#define MAX_ENDPOINTS 8 + +struct usb_serial_state { + struct usb_device * dev; + struct usb_serial_device_type * type; + void * irq_handle; + unsigned int irqpipe; + struct tty_struct * tty; /* the coresponding tty for this device */ + unsigned char number; + char present; + char active; + + char num_interrupt_in; /* number of interrupt in endpoints we have */ + char interrupt_in_inuse; /* if the interrupt in endpoint is in use */ + __u8 interrupt_in_endpoint[MAX_ENDPOINTS]; + __u8 interrupt_in_interval[MAX_ENDPOINTS]; + __u16 interrupt_in_size[MAX_ENDPOINTS]; /* the size of the interrupt in endpoint */ + unsigned int interrupt_in_pipe[MAX_ENDPOINTS]; + unsigned char * interrupt_in_buffer[MAX_ENDPOINTS]; + void * interrupt_in_transfer[MAX_ENDPOINTS]; + struct urb control_urb; + + char num_bulk_in; /* number of bulk in endpoints we have */ + __u8 bulk_in_endpoint[MAX_ENDPOINTS]; + __u8 bulk_in_interval[MAX_ENDPOINTS]; + __u16 bulk_in_size[MAX_ENDPOINTS]; /* the size of the bulk in endpoint */ + unsigned int bulk_in_pipe[MAX_ENDPOINTS]; + unsigned char * bulk_in_buffer[MAX_ENDPOINTS]; + void * bulk_in_transfer[MAX_ENDPOINTS]; + struct urb read_urb; + + char num_bulk_out; /* number of bulk out endpoints we have */ + __u8 bulk_out_endpoint[MAX_ENDPOINTS]; + __u8 bulk_out_interval[MAX_ENDPOINTS]; + __u16 bulk_out_size[MAX_ENDPOINTS]; /* the size of the bulk out endpoint */ + unsigned int bulk_out_pipe[MAX_ENDPOINTS]; + unsigned char * bulk_out_buffer[MAX_ENDPOINTS]; + void * bulk_out_transfer[MAX_ENDPOINTS]; + struct urb write_urb; +}; + + #define MUST_HAVE_NOT 0x01 #define MUST_HAVE 0x02 #define DONT_CARE 0x03 @@ -147,7 +206,7 @@ struct usb_serial_device_type { char num_bulk_out; /* function call to make before accepting driver */ - void (*startup) (void); + int (*startup) (struct usb_serial_state *serial); /* return 0 to continue initialization, anything else to abort */ /* serial function calls */ int (*open)(struct tty_struct * tty, struct file * filp); @@ -189,10 +248,13 @@ static struct usb_serial_device_type generic_device = { }; +#if defined(CONFIG_BELKIN_SERIAL) || defined(CONFIG_PERACOM_SERIAL) /* function prototypes for the eTek type converters (this includes Belkin and Peracom) */ static int etek_serial_open (struct tty_struct *tty, struct file *filp); static void etek_serial_close (struct tty_struct *tty, struct file *filp); +#endif +#ifdef CONFIG_BELKIN_SERIAL /* All of the device info needed for the Belkin Serial Converter */ static __u16 belkin_vendor_id = BELKIN_VENDOR_ID; static __u16 belkin_product_id = BELKIN_SERIAL_CONVERTER; @@ -213,7 +275,10 @@ static struct usb_serial_device_type belkin_device = { write_room: generic_write_room, chars_in_buffer: generic_chars_in_buffer, }; +#endif + +#ifdef CONFIG_PERACOM_SERIAL /* All of the device info needed for the Peracom Serial Converter */ static __u16 peracom_vendor_id = PERACOM_VENDOR_ID; static __u16 peracom_product_id = PERACOM_SERIAL_CONVERTER; @@ -234,13 +299,16 @@ static struct usb_serial_device_type peracom_device = { write_room: generic_write_room, chars_in_buffer: generic_chars_in_buffer, }; +#endif +#ifdef CONFIG_WHITEHEAT_SERIAL /* function prototypes for the Connect Tech WhiteHEAT serial converter */ static int whiteheat_serial_open (struct tty_struct *tty, struct file *filp); static void whiteheat_serial_close (struct tty_struct *tty, struct file *filp); static void whiteheat_throttle (struct tty_struct *tty); static void whiteheat_unthrottle (struct tty_struct *tty); +static int whiteheat_startup (struct usb_serial_state *serial); /* All of the device info needed for the Connect Tech WhiteHEAT */ static __u16 connecttech_vendor_id = CONNECT_TECH_VENDOR_ID; @@ -256,6 +324,7 @@ static struct usb_serial_device_type whiteheat_fake_device = { num_interrupt_in: NUM_DONT_CARE, num_bulk_in: NUM_DONT_CARE, num_bulk_out: NUM_DONT_CARE, + startup: whiteheat_startup }; static struct usb_serial_device_type whiteheat_device = { name: "Connect Tech - WhiteHEAT", @@ -276,8 +345,10 @@ static struct usb_serial_device_type whiteheat_device = { throttle: whiteheat_throttle, unthrottle: whiteheat_unthrottle }; +#endif +#ifdef CONFIG_VISOR_SERIAL /* function prototypes for a handspring visor */ static int visor_serial_open (struct tty_struct *tty, struct file *filp); static void visor_serial_close (struct tty_struct *tty, struct file *filp); @@ -306,63 +377,30 @@ static struct usb_serial_device_type handspring_device = { throttle: visor_throttle, unthrottle: visor_unthrottle }; - +#endif /* To add support for another serial converter, create a usb_serial_device_type structure for that device, and add it to this list, making sure that the last entry is NULL. */ static struct usb_serial_device_type *usb_serial_devices[] = { &generic_device, +#ifdef CONFIG_WHITEHEAT_SERIAL &whiteheat_fake_device, &whiteheat_device, +#endif +#ifdef CONFIG_BELKIN_SERIAL &belkin_device, +#endif +#ifdef CONFIG_PERACOM_SERIAL &peracom_device, +#endif +#ifdef CONFIG_VISOR_SERIAL &handspring_device, +#endif NULL }; -#define MAX_ENDPOINTS 8 - -struct usb_serial_state { - struct usb_device * dev; - struct usb_serial_device_type * type; - void * irq_handle; - unsigned int irqpipe; - struct tty_struct * tty; /* the coresponding tty for this device */ - unsigned char number; - char present; - char active; - - char num_interrupt_in; /* number of interrupt in endpoints we have */ - char interrupt_in_inuse; /* if the interrupt in endpoint is in use */ - __u8 interrupt_in_endpoint[MAX_ENDPOINTS]; - __u8 interrupt_in_interval[MAX_ENDPOINTS]; - __u16 interrupt_in_size[MAX_ENDPOINTS]; /* the size of the interrupt in endpoint */ - unsigned int interrupt_in_pipe[MAX_ENDPOINTS]; - unsigned char * interrupt_in_buffer[MAX_ENDPOINTS]; - void * interrupt_in_transfer[MAX_ENDPOINTS]; - struct urb control_urb; - - char num_bulk_in; /* number of bulk in endpoints we have */ - __u8 bulk_in_endpoint[MAX_ENDPOINTS]; - __u8 bulk_in_interval[MAX_ENDPOINTS]; - __u16 bulk_in_size[MAX_ENDPOINTS]; /* the size of the bulk in endpoint */ - unsigned int bulk_in_pipe[MAX_ENDPOINTS]; - unsigned char * bulk_in_buffer[MAX_ENDPOINTS]; - void * bulk_in_transfer[MAX_ENDPOINTS]; - struct urb read_urb; - - char num_bulk_out; /* number of bulk out endpoints we have */ - __u8 bulk_out_endpoint[MAX_ENDPOINTS]; - __u8 bulk_out_interval[MAX_ENDPOINTS]; - __u16 bulk_out_size[MAX_ENDPOINTS]; /* the size of the bulk out endpoint */ - unsigned int bulk_out_pipe[MAX_ENDPOINTS]; - unsigned char * bulk_out_buffer[MAX_ENDPOINTS]; - void * bulk_out_transfer[MAX_ENDPOINTS]; - struct urb write_urb; -}; - static struct usb_driver usb_serial_driver = { "serial", usb_serial_probe, @@ -697,6 +735,7 @@ static void serial_unthrottle (struct tty_struct * tty) } +#if defined(CONFIG_BELKIN_SERIAL) || defined(CONFIG_PERACOM_SERIAL) /***************************************************************************** * eTek specific driver functions *****************************************************************************/ @@ -741,8 +780,11 @@ static void etek_serial_close(struct tty_struct *tty, struct file * filp) usb_unlink_urb (&serial->read_urb); serial->active = 0; } +#endif /* defined(CONFIG_BELKIN_SERIAL) || defined(CONFIG_PERACOM_SERIAL) */ + +#ifdef CONFIG_WHITEHEAT_SERIAL /***************************************************************************** * Connect Tech's White Heat specific driver functions *****************************************************************************/ @@ -792,7 +834,7 @@ static void whiteheat_serial_close(struct tty_struct *tty, struct file * filp) static void whiteheat_throttle (struct tty_struct * tty) { dbg("whiteheat_throttle"); - + /* Change the control signals */ /* FIXME!!! */ @@ -803,7 +845,7 @@ static void whiteheat_throttle (struct tty_struct * tty) static void whiteheat_unthrottle (struct tty_struct * tty) { dbg("whiteheat_unthrottle"); - + /* Change the control signals */ /* FIXME!!! */ @@ -811,6 +853,104 @@ static void whiteheat_unthrottle (struct tty_struct * tty) } +static int whiteheat_writememory (struct usb_serial_state *serial, int address, unsigned char *data, int length, __u8 bRequest) +{ + int result; + unsigned char *transfer_buffer = kmalloc (length, GFP_KERNEL); + if (!transfer_buffer) { + err("whiteheat_writememory: kmalloc(%d) failed.\n", length); + return -ENOMEM; + } + memcpy (transfer_buffer, data, length); + result = usb_control_msg (serial->dev, usb_sndctrlpipe(serial->dev, 0), bRequest, 0x40, address, 0, transfer_buffer, length, 300); + kfree (transfer_buffer); + return result; +} + +/* EZ-USB Control and Status Register. Bit 0 controls 8051 reset */ +#define CPUCS_REG 0x7F92 + +static int whiteheat_set_reset (struct usb_serial_state *serial, unsigned char reset_bit) +{ + dbg("whiteheat_set_reset: %d", reset_bit); + return (whiteheat_writememory (serial, CPUCS_REG, &reset_bit, 1, 0xa0)); +} + + +/* steps to download the firmware to the WhiteHEAT device: + - hold the reset (by writing to the reset bit of the CPUCS register) + - download the VEND_AX.HEX file to the chip using VENDOR_REQUEST-ANCHOR_LOAD + - release the reset (by writing to the CPUCS register) + - download the WH.HEX file for all addresses greater than 0x1b3f using + VENDOR_REQUEST-ANCHOR_EXTERNAL_RAM_LOAD + - hold the reset + - download the WH.HEX file for all addresses less than 0x1b40 using + VENDOR_REQUEST_ANCHOR_LOAD + - release the reset + - device renumerated itself and comes up as new device id with all + firmware download completed. +*/ +static int whiteheat_startup (struct usb_serial_state *serial) +{ + int response; + const struct whiteheat_hex_record *record; + + dbg("whiteheat_startup\n"); + + response = whiteheat_set_reset (serial, 1); + + record = &whiteheat_loader[0]; + while (record->address != 0xffff) { + response = whiteheat_writememory (serial, record->address, + (unsigned char *)record->data, record->data_size, 0xa0); + if (response < 0) { + err("whiteheat_writememory failed for loader (%d %04X %p %d)", + response, record->address, record->data, record->data_size); + break; + } + ++record; + } + + response = whiteheat_set_reset (serial, 0); + + record = &whiteheat_firmware[0]; + while (record->address < 0x8000) { + ++record; + } + while (record->address != 0xffff) { + response = whiteheat_writememory (serial, record->address, + (unsigned char *)record->data, record->data_size, 0xa3); + if (response < 0) { + err("whiteheat_writememory failed for first firmware step (%d %04X %p %d)", + response, record->address, record->data, record->data_size); + break; + } + ++record; + } + + response = whiteheat_set_reset (serial, 1); + + record = &whiteheat_firmware[0]; + while (record->address < 0x8000) { + response = whiteheat_writememory (serial, record->address, + (unsigned char *)record->data, record->data_size, 0xa0); + if (response < 0) { + err("whiteheat_writememory failed for first firmware step (%d %04X %p %d)\n", + response, record->address, record->data, record->data_size); + break; + } + ++record; + } + + response = whiteheat_set_reset (serial, 0); + + /* we want this device to fail to have a driver assigned to it. */ + return (1); +} +#endif /* CONFIG_WHITEHEAT_SERIAL */ + + +#ifdef CONFIG_VISOR_SERIAL /****************************************************************************** * Handspring Visor specific driver functions ******************************************************************************/ @@ -874,6 +1014,7 @@ static void visor_unthrottle (struct tty_struct * tty) return; } +#endif /* CONFIG_VISOR_SERIAL*/ /***************************************************************************** @@ -1124,6 +1265,12 @@ static void * usb_serial_probe(struct usb_device *dev, unsigned int ifnum) serial->num_bulk_out = num_bulk_out; serial->num_interrupt_in = num_interrupt_in; + /* if this device type has a startup function, call it */ + if (type->startup) { + if (type->startup (serial)) + return NULL; + } + /* set up the endpoint information */ for (i = 0; i < num_bulk_in; ++i) { serial->bulk_in_endpoint[i] = bulk_in_endpoint[i]->bEndpointAddress; diff --git a/drivers/usb/usb.c b/drivers/usb/usb.c index 41dfecfc2977..45d859d3c639 100644 --- a/drivers/usb/usb.c +++ b/drivers/usb/usb.c @@ -653,8 +653,6 @@ int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *usb_request_bulk(struct usb_device *dev, unsigned int pipe, usb_device_irq handler, void *data, int len, void *dev_id) { urb_t *urb; - DECLARE_WAITQUEUE(wait, current); - DECLARE_WAIT_QUEUE_HEAD(wqh); api_wrapper_data *awd; if (!(urb=usb_alloc_urb(0))) diff --git a/drivers/usb/usbdevice_fs.h b/drivers/usb/usbdevice_fs.h index 99cceadbd794..fcbc602f4c06 100644 --- a/drivers/usb/usbdevice_fs.h +++ b/drivers/usb/usbdevice_fs.h @@ -111,7 +111,6 @@ struct usbdevfs_urb { #ifdef __KERNEL__ -#include #include #include diff --git a/drivers/usb/whiteheat.h b/drivers/usb/whiteheat.h new file mode 100644 index 000000000000..e360cc70b08b --- /dev/null +++ b/drivers/usb/whiteheat.h @@ -0,0 +1,1241 @@ +/***************************************************************************** + * + * whiteheat.h -- ConnectTech WhiteHEAT Firmware. + * + * Copyright (C) 2000 ConnectTech Inc (http://www.connecttech.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 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. + * + * version 1.0 (01/09/2000) gkh + * Original firmware from ConnectTech massaged a little to be program + * readable. + * + *****************************************************************************/ + +#define whiteheat_DATE "20000106" + +struct whiteheat_hex_record { + __u16 address; + __u8 data_size; + __u8 data[16]; +}; + +static const struct whiteheat_hex_record whiteheat_firmware[] = { +{ 0x0000, 3, {0x02, 0x91, 0x00} }, +{ 0x0003, 3, {0x02, 0x13, 0x00} }, +{ 0x000b, 3, {0x02, 0x0a, 0x00} }, +{ 0x0033, 3, {0x02, 0x07, 0x00} }, +{ 0x0043, 3, {0x02, 0x09, 0x00} }, +{ 0x0053, 3, {0x02, 0x0f, 0x00} }, +{ 0x005b, 3, {0x02, 0x11, 0x00} }, +{ 0x0300, 16, {0x90, 0x7f, 0xe9, 0xe0, 0x70, 0x03, 0x02, 0x04, 0x03, 0x14, 0x70, 0x03, 0x02, 0x04, 0x77, 0x02} }, +{ 0x0310, 16, {0xfe, 0x70, 0x03, 0x02, 0x04, 0xca, 0x24, 0xfb, 0x70, 0x03, 0x02, 0x03, 0xf4, 0x14, 0x70, 0xf4} }, +{ 0x0320, 16, {0x02, 0x03, 0xe2, 0x14, 0x70, 0x03, 0x02, 0x03, 0xca, 0x14, 0x70, 0x03, 0x02, 0x03, 0xd9, 0x02} }, +{ 0x0330, 16, {0x05, 0x60, 0x03, 0x02, 0x05, 0x19, 0x90, 0x7f, 0xeb, 0xe0, 0x24, 0xfe, 0x60, 0x16, 0x14, 0x60} }, +{ 0x0340, 16, {0x36, 0x24, 0x02, 0x70, 0x7b, 0x74, 0x12, 0x90, 0x7f, 0xd4, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0x00} }, +{ 0x0350, 16, {0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x09, 0x58, 0xea, 0x49, 0x60, 0xea} }, +{ 0x0360, 16, {0xea, 0x90, 0x7f, 0xd4, 0xf0, 0xe9, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x20} }, +{ 0x0370, 16, {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0x08, 0xa9, 0x12} }, +{ 0x0380, 16, {0x49, 0x60, 0x33, 0x12, 0x9a, 0x48, 0xf5, 0x5e, 0x90, 0x7f, 0xee, 0xe0, 0xff, 0xe5, 0x5e, 0xff} }, +{ 0x0390, 16, {0x9f, 0x40, 0x03, 0xe0, 0xf5, 0x5e, 0xe5, 0x5e, 0xd3, 0x94, 0x40, 0x40, 0x03, 0x75, 0x5e, 0x03} }, +{ 0x03a0, 16, {0xae, 0x02, 0xaf, 0x01, 0x7c, 0x7f, 0x7d, 0x00, 0xab, 0x5e, 0x12, 0x1b, 0x0c, 0x90, 0x7f, 0x0c} }, +{ 0x03b0, 16, {0xe5, 0x5e, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xf0} }, +{ 0x03c0, 16, {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x00, 0xe5, 0x21, 0x00} }, +{ 0x03d0, 16, {0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x21, 0xe0} }, +{ 0x03e0, 16, {0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x31, 0xd2, 0x02, 0x43, 0x88, 0x10, 0xd2, 0xeb, 0x10} }, +{ 0x03f0, 16, {0xa8, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x00, 0xe5, 0x31, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xb5} }, +{ 0x0400, 16, {0x02, 0x05, 0x20, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0x7f, 0x60, 0x24, 0x14, 0x60, 0x31, 0x24, 0x60} }, +{ 0x0410, 16, {0x70, 0x5b, 0xa2, 0x00, 0xe4, 0x33, 0xff, 0x25, 0xe0, 0xff, 0xa2, 0x05, 0xe4, 0x33, 0x4f, 0xe4} }, +{ 0x0420, 16, {0x7f, 0x00, 0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x20, 0x02} }, +{ 0x0430, 16, {0x90, 0x7f, 0x00, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x20, 0x02} }, +{ 0x0440, 16, {0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x54} }, +{ 0x0450, 16, {0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x54, 0x01, 0x90, 0x7f, 0x01} }, +{ 0x0460, 16, {0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0x20} }, +{ 0x0470, 16, {0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0xfe, 0x60, 0x1d, 0xfe} }, +{ 0x0480, 16, {0x02, 0x60, 0x03, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x05, 0xc2, 0x00, 0x05} }, +{ 0x0490, 16, {0x05, 0x20, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0x20, 0x90, 0x7f, 0xea, 0x90} }, +{ 0x04a0, 16, {0x70, 0x1f, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x0f} }, +{ 0x04b0, 16, {0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x83} }, +{ 0x04c0, 16, {0x5f, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x56, 0x90, 0x7f, 0xe8, 0xe0, 0x24, 0xe8} }, +{ 0x04d0, 16, {0x60, 0x18, 0x24, 0x02, 0x70, 0x4a, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0x04, 0xd2, 0x00, 0x04} }, +{ 0x04e0, 16, {0x3f, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x36, 0x90, 0x7f, 0xea, 0xe0, 0x70, 0xea} }, +{ 0x04f0, 16, {0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0xe0} }, +{ 0x0500, 16, {0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01, 0xf0, 0x80, 0x01} }, +{ 0x0510, 16, {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x07, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xe0} }, +{ 0x0520, 7, {0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xe0} }, +{ 0x0527, 1, {0x05} }, +{ 0x0528, 16, {0x75, 0x5a, 0xff, 0x75, 0x59, 0xff, 0x75, 0x58, 0x0f, 0x75, 0x57, 0x00, 0xd2, 0x03, 0xc2, 0xd2} }, +{ 0x0538, 16, {0xc2, 0x02, 0xc2, 0x00, 0xc2, 0x05, 0xc2, 0x01, 0x90, 0x02, 0x9e, 0x74, 0x19, 0xf0, 0xe4, 0x19} }, +{ 0x0548, 16, {0x01, 0x5b, 0xf0, 0xc2, 0x04, 0x90, 0x01, 0x5e, 0xf0, 0xa3, 0xf0, 0xc2, 0xaf, 0xc2, 0xa8, 0xaf} }, +{ 0x0558, 16, {0x0a, 0xfa, 0xe4, 0x90, 0x02, 0x4d, 0xf0, 0x90, 0x01, 0x00, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xf0} }, +{ 0x0568, 16, {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x08, 0xf0, 0x74} }, +{ 0x0578, 16, {0x01, 0x7f, 0x00, 0x12, 0x19, 0xc1, 0x75, 0x5c, 0x12, 0x75, 0x5d, 0x0a, 0x90, 0x01, 0x0b, 0x90} }, +{ 0x0588, 16, {0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0xf5} }, +{ 0x0598, 16, {0xef, 0xf0, 0x90, 0x01, 0x0c, 0xe0, 0x44, 0x80, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x5d} }, +{ 0x05a8, 16, {0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0d, 0xe0, 0xff, 0x0d} }, +{ 0x05b8, 16, {0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0x8c} }, +{ 0x05c8, 16, {0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x02} }, +{ 0x05d8, 16, {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x12, 0x0a, 0xe4, 0x93, 0xff, 0x74, 0x01, 0x93, 0x74} }, +{ 0x05e8, 16, {0x01, 0x1c, 0xcf, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0xff, 0xa3, 0xe0, 0xfe, 0xa3} }, +{ 0x05f8, 16, {0x6e, 0xff, 0x90, 0x01, 0x1c, 0xf0, 0xa3, 0xe0, 0x6f, 0xff, 0xf0, 0x90, 0x01, 0x1c, 0xe0, 0x01} }, +{ 0x0608, 16, {0xf0, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe4, 0xfc, 0xfd, 0x75, 0x62, 0x10, 0x75, 0x63, 0x02, 0x75} }, +{ 0x0618, 16, {0x64, 0x12, 0x75, 0x65, 0xac, 0x12, 0x8e, 0x35, 0x75, 0x5c, 0x12, 0x75, 0x5d, 0xb2, 0x90, 0x5d} }, +{ 0x0628, 16, {0x0d, 0xe0, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x14, 0xf5, 0x5c} }, +{ 0x0638, 16, {0x8c, 0x83, 0xef, 0xf0, 0x90, 0x01, 0x0e, 0xe0, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x5d} }, +{ 0x0648, 16, {0x02, 0x05, 0x5c, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0x92} }, +{ 0x0658, 16, {0x54, 0x0f, 0x24, 0x41, 0xff, 0x05, 0x5d, 0xe5, 0x5d, 0xac, 0x5c, 0x70, 0x02, 0x05, 0x5c, 0x02} }, +{ 0x0668, 16, {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x05, 0x5d, 0xe5, 0x5d, 0xae, 0x5c, 0x70, 0x02, 0x05, 0x70} }, +{ 0x0678, 16, {0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x75, 0x82, 0x10, 0x75, 0x83, 0x01, 0xe0, 0xfc, 0x01} }, +{ 0x0688, 16, {0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x90, 0x01, 0x18, 0x12, 0x9b, 0xfb, 0x7e, 0x9b} }, +{ 0x0698, 16, {0x7f, 0x18, 0x12, 0x84, 0x61, 0x90, 0x01, 0x18, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfd} }, +{ 0x06a8, 16, {0xa3, 0xe0, 0xff, 0x75, 0x62, 0x0a, 0x75, 0x63, 0x06, 0x75, 0x64, 0x12, 0x75, 0x65, 0xb8, 0x75} }, +{ 0x06b8, 16, {0x8e, 0x35, 0xd2, 0xe8, 0x43, 0xd8, 0x20, 0x90, 0x7f, 0xab, 0x74, 0xff, 0xf0, 0x53, 0x91, 0xf0} }, +{ 0x06c8, 16, {0x90, 0x7f, 0xaf, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xae, 0xe0, 0x44, 0x1f, 0xf0, 0xd2, 0x1f} }, +{ 0x06d8, 16, {0x20, 0x01, 0x2e, 0x20, 0x01, 0x2b, 0xa2, 0x03, 0x92, 0x07, 0x12, 0x09, 0xa7, 0x75, 0x56, 0xa7} }, +{ 0x06e8, 16, {0x75, 0x55, 0x6d, 0x75, 0x54, 0x33, 0x75, 0x53, 0x00, 0x20, 0x01, 0xe4, 0x7f, 0xff, 0x7e, 0x7f} }, +{ 0x06f8, 16, {0x7d, 0xff, 0x7c, 0xff, 0x78, 0x53, 0x12, 0x9b, 0xe4, 0xec, 0x4d, 0x4e, 0x4f, 0x60, 0xd1, 0x4f} }, +{ 0x0708, 16, {0xe8, 0x30, 0x01, 0x05, 0x12, 0x03, 0x00, 0xc2, 0x01, 0x30, 0x06, 0x0d, 0x12, 0x08, 0xfb, 0x12} }, +{ 0x0718, 16, {0x06, 0x12, 0x0a, 0x00, 0x12, 0x09, 0xf4, 0xc2, 0x06, 0x12, 0x90, 0x58, 0x12, 0x98, 0x7d, 0x12} }, +{ 0x0728, 16, {0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x90, 0x01, 0xfe} }, +{ 0x0738, 16, {0xe0, 0x5e, 0x60, 0x14, 0x74, 0x27, 0x2f, 0xf8, 0xe6, 0xd3, 0x94, 0x0a, 0x40, 0x04, 0x7e, 0x40} }, +{ 0x0748, 16, {0x80, 0x02, 0x7e, 0x00, 0x8e, 0x5b, 0x80, 0x03, 0x75, 0x5b, 0x01, 0x74, 0x68, 0x2f, 0xf5, 0x68} }, +{ 0x0758, 16, {0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe5, 0x5b, 0xf0, 0x0f, 0xbf, 0x04, 0xc5, 0xe5, 0x2b, 0xd3, 0xe5} }, +{ 0x0768, 16, {0x0a, 0x40, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0x90, 0x20, 0x6c, 0xef, 0xf0, 0x90, 0xef} }, +{ 0x0778, 11, {0x4d, 0xe0, 0x64, 0x0f, 0x70, 0x8b, 0x12, 0x93, 0x50, 0x80, 0x93} }, +{ 0x0783, 1, {0x07} }, +{ 0x0784, 4, {0x53, 0xd8, 0xef, 0x53} }, +{ 0x0788, 16, {0xe4, 0x90, 0x7f, 0x9c, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0x74, 0x7f} }, +{ 0x0798, 16, {0xf0, 0x90, 0x7f, 0x9c, 0x74, 0xcf, 0xf0, 0x7f, 0xf4, 0x7e, 0x01, 0x12, 0x08, 0x92, 0x90, 0x08} }, +{ 0x07a8, 16, {0x96, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x7f, 0x02, 0x7d, 0x7f} }, +{ 0x07b8, 16, {0x12, 0x11, 0x4b, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x96} }, +{ 0x07c8, 16, {0xf0, 0xe0, 0x54, 0x7f, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0x90} }, +{ 0x07d8, 16, {0x44, 0x40, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x54, 0x96} }, +{ 0x07e8, 16, {0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x44} }, +{ 0x07f8, 7, {0x32, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x12} }, +{ 0x07ff, 16, {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xfd, 0xf0, 0xe0, 0x44, 0x80, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x0a} }, +{ 0x080f, 16, {0x08, 0x92, 0x7f, 0x02, 0xe4, 0xfd, 0x12, 0x11, 0x4b, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x00} }, +{ 0x081f, 16, {0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x08} }, +{ 0x082f, 16, {0x96, 0xe0, 0x44, 0x04, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0x90} }, +{ 0x083f, 16, {0x54, 0xf7, 0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x96} }, +{ 0x084f, 12, {0xf0, 0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x12, 0x0a, 0x00, 0x12} }, +{ 0x085b, 16, {0x90, 0x11, 0xef, 0xe4, 0x93, 0x70, 0x2f, 0x90, 0x7f, 0x93, 0x74, 0x30, 0xf0, 0x90, 0x7f, 0xf0} }, +{ 0x086b, 16, {0x74, 0x3c, 0xf0, 0x90, 0x7f, 0x95, 0x74, 0xc6, 0xf0, 0xe4, 0x90, 0x7f, 0x97, 0xf0, 0x90, 0x97} }, +{ 0x087b, 16, {0x9d, 0x74, 0x02, 0xf0, 0x90, 0x7f, 0xe2, 0x74, 0x12, 0xf0, 0x12, 0x07, 0x88, 0x75, 0x82, 0x88} }, +{ 0x088b, 7, {0x75, 0x83, 0x11, 0x74, 0xff, 0xf0, 0x74} }, +{ 0x0892, 16, {0x8e, 0x6d, 0x8f, 0x6e, 0xe5, 0x6e, 0x15, 0x6e, 0xae, 0x6d, 0x70, 0x02, 0x15, 0x6d, 0x4e, 0x15} }, +{ 0x08a2, 7, {0x05, 0x12, 0x08, 0xea, 0x80, 0xee, 0xea} }, +{ 0x08a9, 2, {0x8f, 0xa9} }, +{ 0x08ab, 16, {0xe4, 0xf5, 0x60, 0x75, 0x61, 0xff, 0x75, 0x62, 0x12, 0x75, 0x63, 0x6a, 0xab, 0x61, 0xaa, 0xab} }, +{ 0x08bb, 16, {0xa9, 0x63, 0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0xb4, 0x03, 0x1d, 0xaf, 0x60, 0x05, 0x60, 0x60} }, +{ 0x08cb, 16, {0xb5, 0x5f, 0x01, 0x22, 0x12, 0x9a, 0x48, 0x7e, 0x00, 0x29, 0xff, 0xee, 0x3a, 0xa9, 0x07, 0x3a} }, +{ 0x08db, 14, {0x61, 0xff, 0xf5, 0x62, 0x89, 0x63, 0x80, 0xd4, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7a} }, +{ 0x08e9, 1, {0x08} }, +{ 0x08ea, 16, {0x74, 0x00, 0xf5, 0x86, 0x90, 0xfd, 0xa5, 0x7c, 0x05, 0xa3, 0xe5, 0x82, 0x45, 0x83, 0x70, 0x45} }, +{ 0x08fa, 1, {0x08} }, +{ 0x08fb, 5, {0x12, 0x07, 0xff, 0xd3, 0x07} }, +{ 0x0900, 16, {0x02, 0x0b, 0x17, 0x00, 0x02, 0x0b, 0x4a, 0x00, 0x02, 0x0b, 0x2f, 0x00, 0x02, 0x0b, 0x89, 0x02} }, +{ 0x0910, 16, {0x02, 0x0b, 0x73, 0x00, 0x02, 0x09, 0xf9, 0x00, 0x02, 0x09, 0xfa, 0x00, 0x02, 0x09, 0xfb, 0x02} }, +{ 0x0920, 16, {0x02, 0x0b, 0xa4, 0x00, 0x02, 0x0c, 0x78, 0x00, 0x02, 0x0b, 0xd9, 0x00, 0x02, 0x0c, 0xc5, 0x02} }, +{ 0x0930, 16, {0x02, 0x0c, 0x0e, 0x00, 0x02, 0x0d, 0x12, 0x00, 0x02, 0x0c, 0x43, 0x00, 0x02, 0x0d, 0x5f, 0x02} }, +{ 0x0940, 16, {0x02, 0x09, 0xfc, 0x00, 0x02, 0x09, 0xfe, 0x00, 0x02, 0x09, 0xfd, 0x00, 0x02, 0x09, 0xff, 0x02} }, +{ 0x0950, 8, {0x02, 0x0d, 0xac, 0x00, 0x02, 0x0d, 0xc2, 0x02} }, +{ 0x0958, 16, {0xe4, 0xfe, 0x75, 0x61, 0xff, 0x75, 0x62, 0x12, 0x75, 0x63, 0x12, 0xab, 0x61, 0xaa, 0x62, 0x61} }, +{ 0x0968, 16, {0x63, 0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0x64, 0x02, 0x70, 0x2d, 0xad, 0x06, 0x0e, 0xed, 0x06} }, +{ 0x0978, 16, {0x07, 0x01, 0x22, 0x90, 0x00, 0x02, 0x12, 0x9a, 0xba, 0x85, 0xf0, 0x5f, 0xf5, 0x60, 0x62, 0xf5} }, +{ 0x0988, 16, {0xe5, 0x5f, 0x62, 0x60, 0xe5, 0x60, 0x62, 0x5f, 0x29, 0xfd, 0xe5, 0x5f, 0x3a, 0xa9, 0x05, 0x3a} }, +{ 0x0998, 14, {0x61, 0xff, 0xf5, 0x62, 0x89, 0x63, 0x80, 0xc3, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7a} }, +{ 0x09a6, 1, {0x09} }, +{ 0x09a7, 16, {0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfb, 0xf0, 0xe0, 0x44, 0x08, 0xf0, 0x30, 0x07, 0x04, 0xe0, 0x07} }, +{ 0x09b7, 16, {0x02, 0xf0, 0x7f, 0xd0, 0x7e, 0x07, 0x12, 0x08, 0x92, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xf7, 0xe0} }, +{ 0x09c7, 5, {0xe0, 0x44, 0x04, 0xf0, 0x44} }, +{ 0x09cc, 16, {0x53, 0x8e, 0xf7, 0xe5, 0x89, 0x54, 0xf1, 0x44, 0x01, 0xf5, 0x89, 0x75, 0x8c, 0xb1, 0xd2, 0x8c} }, +{ 0x09dc, 16, {0x75, 0x98, 0x40, 0x75, 0xcb, 0xff, 0x75, 0xca, 0xf3, 0x75, 0xc8, 0x34, 0xe4, 0xff, 0x7f, 0xe4} }, +{ 0x09ec, 7, {0x78, 0x27, 0xe4, 0xf6, 0x08, 0xdf, 0xf6} }, +{ 0x09f3, 1, {0x09} }, +{ 0x09f4, 5, {0x12, 0x07, 0x88, 0xd3, 0x07} }, +{ 0x09f9, 1, {0x09} }, +{ 0x09fa, 1, {0x09} }, +{ 0x09fb, 1, {0x09} }, +{ 0x09fc, 1, {0x09} }, +{ 0x09fd, 1, {0x09} }, +{ 0x09fe, 1, {0x09} }, +{ 0x09ff, 1, {0x09} }, +{ 0x0a00, 9, {0x90, 0x7f, 0xd6, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x80} }, +{ 0x0a7d, 16, {0x43, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }, +{ 0x0a8d, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x06, 0x00} }, +{ 0x0a9d, 1, {0x0a} }, +{ 0x0a9e, 16, {0x30, 0x04, 0x16, 0x75, 0x8c, 0xf8, 0x75, 0x8a, 0x30, 0x7f, 0x2f, 0xae, 0x07, 0x1f, 0xee, 0x07} }, +{ 0x0aae, 16, {0x3c, 0x90, 0x20, 0x00, 0x74, 0x55, 0xf0, 0x80, 0xf2, 0x75, 0x8c, 0xb1, 0x7f, 0x27, 0xef, 0x7f} }, +{ 0x0abe, 16, {0x94, 0x2b, 0x50, 0x09, 0xa8, 0x07, 0xe6, 0x60, 0x01, 0x16, 0x0f, 0x80, 0xf1, 0x90, 0x02, 0xf1} }, +{ 0x0ace, 16, {0xe0, 0x60, 0x02, 0x14, 0xf0, 0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x60, 0x0e, 0xe0} }, +{ 0x0ade, 13, {0x01, 0x5f, 0xe0, 0x24, 0xff, 0xf0, 0x90, 0x01, 0x5e, 0xe0, 0x34, 0xff, 0xe0} }, +{ 0x0aeb, 15, {0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0afa, 16, {0xd2, 0x00, 0x75, 0x8e, 0x10, 0xe4, 0x90, 0x7f, 0x92, 0xf0, 0x12, 0x0f, 0x72, 0x12, 0x08, 0x72} }, +{ 0x0b0a, 13, {0x12, 0x0e, 0x0f, 0x12, 0x8f, 0x06, 0x12, 0x11, 0x9c, 0x12, 0x09, 0xcc, 0x12} }, +{ 0x0b17, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x01, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x7f} }, +{ 0x0b27, 8, {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0b2f, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x7f, 0xc4, 0xe4, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x91} }, +{ 0x0b3f, 11, {0xab, 0x74, 0x04, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0b4a, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x02, 0xf0, 0x74} }, +{ 0x0b5a, 16, {0x7f, 0xd8, 0xe0, 0x70, 0x0d, 0x90, 0x7f, 0xd9, 0xe0, 0x70, 0x07, 0xe5, 0x2b, 0x70, 0x03, 0x2b} }, +{ 0x0b6a, 9, {0x2b, 0x14, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0b73, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x10, 0xf0, 0x74} }, +{ 0x0b83, 6, {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0b89, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x30, 0x02, 0x02, 0xd2, 0x06, 0x53, 0x91, 0xef, 0x90, 0x91} }, +{ 0x0b99, 11, {0xab, 0x74, 0x08, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0ba4, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x02, 0xf0, 0x74} }, +{ 0x0bb4, 16, {0x30, 0x30, 0xe0, 0x13, 0xe5, 0x3b, 0x30, 0xe0, 0x07, 0x90, 0x20, 0x04, 0xe0, 0x44, 0x01, 0xe0} }, +{ 0x0bc4, 16, {0x90, 0x20, 0x01, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x2b} }, +{ 0x0bd4, 5, {0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0bd9, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x04, 0xf0, 0x74} }, +{ 0x0be9, 16, {0x30, 0x30, 0xe1, 0x13, 0xe5, 0x3b, 0x30, 0xe1, 0x07, 0x90, 0x20, 0x0c, 0xe0, 0x44, 0x01, 0xe0} }, +{ 0x0bf9, 16, {0x90, 0x20, 0x09, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x2b} }, +{ 0x0c09, 5, {0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0c0e, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x08, 0xf0, 0x74} }, +{ 0x0c1e, 16, {0x30, 0x30, 0xe2, 0x13, 0xe5, 0x3b, 0x30, 0xe2, 0x07, 0x90, 0x20, 0x14, 0xe0, 0x44, 0x01, 0xe0} }, +{ 0x0c2e, 16, {0x90, 0x20, 0x11, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x2b} }, +{ 0x0c3e, 5, {0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0c43, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x10, 0xf0, 0x74} }, +{ 0x0c53, 16, {0x30, 0x30, 0xe3, 0x13, 0xe5, 0x3b, 0x30, 0xe3, 0x07, 0x90, 0x20, 0x1c, 0xe0, 0x44, 0x01, 0xe0} }, +{ 0x0c63, 16, {0x90, 0x20, 0x19, 0xe0, 0x44, 0x01, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x14, 0xd0, 0x2b} }, +{ 0x0c73, 5, {0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0c78, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} }, +{ 0x0c88, 16, {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x02, 0xf0, 0xe5, 0x30, 0x20, 0xe0, 0x06, 0x90, 0x7f, 0x06} }, +{ 0x0c98, 16, {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe0, 0x0a, 0x90, 0x7f, 0xc7, 0xe0, 0x90, 0x02, 0x96, 0x90} }, +{ 0x0ca8, 16, {0x80, 0x07, 0x90, 0x20, 0x01, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x03} }, +{ 0x0cb8, 13, {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0cc5, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} }, +{ 0x0cd5, 16, {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x04, 0xf0, 0xe5, 0x30, 0x20, 0xe1, 0x06, 0x90, 0x7f, 0x06} }, +{ 0x0ce5, 16, {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe1, 0x0a, 0x90, 0x7f, 0xc9, 0xe0, 0x90, 0x02, 0x97, 0x90} }, +{ 0x0cf5, 16, {0x80, 0x07, 0x90, 0x20, 0x09, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x03} }, +{ 0x0d05, 13, {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0d12, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} }, +{ 0x0d22, 16, {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x08, 0xf0, 0xe5, 0x30, 0x20, 0xe2, 0x06, 0x90, 0x7f, 0x06} }, +{ 0x0d32, 16, {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe2, 0x0a, 0x90, 0x7f, 0xcb, 0xe0, 0x90, 0x02, 0x98, 0x90} }, +{ 0x0d42, 16, {0x80, 0x07, 0x90, 0x20, 0x11, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x03} }, +{ 0x0d52, 13, {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0d5f, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} }, +{ 0x0d6f, 16, {0x91, 0xef, 0x90, 0x7f, 0xaa, 0x74, 0x10, 0xf0, 0xe5, 0x30, 0x20, 0xe3, 0x06, 0x90, 0x7f, 0x06} }, +{ 0x0d7f, 16, {0xf0, 0x80, 0x16, 0xe5, 0x3b, 0x30, 0xe3, 0x0a, 0x90, 0x7f, 0xcd, 0xe0, 0x90, 0x02, 0x99, 0x90} }, +{ 0x0d8f, 16, {0x80, 0x07, 0x90, 0x20, 0x19, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x2b, 0x70, 0x03, 0x75, 0x2b, 0x03} }, +{ 0x0d9f, 13, {0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0dac, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xa9, 0x74, 0x80, 0xf0, 0x74} }, +{ 0x0dbc, 6, {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0dc2, 16, {0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0x00} }, +{ 0x0dd2, 16, {0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x53, 0x91, 0x07} }, +{ 0x0de2, 16, {0x90, 0x7f, 0xaa, 0x74, 0x80, 0xf0, 0x7e, 0x7b, 0x7f, 0x40, 0x12, 0x8c, 0xfb, 0x90, 0x7f, 0xfb} }, +{ 0x0df2, 16, {0xe4, 0xf0, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0xd0} }, +{ 0x0e02, 13, {0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0xf0} }, +{ 0x0e0f, 16, {0x90, 0x01, 0x20, 0x12, 0x9c, 0x07, 0x00, 0x00, 0x25, 0x80, 0x90, 0x01, 0x24, 0x74, 0x08, 0x24} }, +{ 0x0e1f, 16, {0xa3, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x6e, 0xf0, 0xa3, 0xf0, 0xe4, 0xa3, 0xf0, 0xa3, 0xf0, 0xf0} }, +{ 0x0e2f, 16, {0xf0, 0xa3, 0xf0, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0xc3, 0x94, 0x04, 0xc3} }, +{ 0x0e3f, 16, {0x13, 0xef, 0x04, 0xa3, 0xf0, 0x7e, 0x01, 0x7f, 0x1f, 0x12, 0x84, 0xf4, 0x90, 0x01, 0x1e, 0x90} }, +{ 0x0e4f, 16, {0x04, 0xf0, 0x80, 0xe3, 0xe4, 0xf5, 0x26, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0x01} }, +{ 0x0e5f, 16, {0xc3, 0x94, 0x04, 0x50, 0x1a, 0x74, 0x96, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x02} }, +{ 0x0e6f, 16, {0xf0, 0x74, 0x22, 0x2f, 0xf8, 0xe4, 0xf6, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xdc, 0xf0} }, +{ 0x0e7f, 16, {0xf5, 0x30, 0xe5, 0xc0, 0x60, 0x2f, 0x90, 0x01, 0x1e, 0x74, 0x01, 0xf0, 0x90, 0x01, 0x1e, 0x90} }, +{ 0x0e8f, 16, {0xff, 0xd3, 0x94, 0x04, 0x50, 0x1f, 0xef, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x07} }, +{ 0x0e9f, 16, {0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x30, 0x7e, 0x01, 0x7f, 0x1e, 0x12, 0x82, 0xea, 0x90, 0x01, 0xea} }, +{ 0x0eaf, 16, {0xe0, 0x04, 0xf0, 0x80, 0xd7, 0xe4, 0xf5, 0x3a, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0x90} }, +{ 0x0ebf, 16, {0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xf5} }, +{ 0x0ecf, 16, {0xf0, 0xfe, 0x74, 0x63, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0xee, 0xf0, 0x74, 0xee} }, +{ 0x0edf, 16, {0x2f, 0xf8, 0xa6, 0x06, 0x74, 0x32, 0x2f, 0xf8, 0xe4, 0xf6, 0x74, 0x2c, 0x2f, 0xf8, 0xe4, 0x2f} }, +{ 0x0eef, 16, {0x74, 0x9a, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0x90, 0x01, 0x1e, 0x90} }, +{ 0x0eff, 16, {0x04, 0xf0, 0xe0, 0xb4, 0x04, 0xb6, 0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xf5, 0x5e, 0x60, 0xf5} }, +{ 0x0f0f, 16, {0xe4, 0x90, 0x01, 0x1e, 0xf0, 0x90, 0x01, 0x1e, 0xe0, 0xff, 0xc3, 0x94, 0x04, 0x50, 0xe7, 0x04} }, +{ 0x0f1f, 16, {0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x55, 0x5e, 0x60, 0x38, 0x90, 0x60} }, +{ 0x0f2f, 1, {0x0f} }, +{ 0x0f30, 16, {0xe0, 0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0x20} }, +{ 0x0f40, 16, {0xfe, 0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0x20} }, +{ 0x0f50, 16, {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xf5} }, +{ 0x0f60, 14, {0x7d, 0x06, 0x12, 0x82, 0x60, 0x90, 0x01, 0x1e, 0xe0, 0x04, 0xf0, 0x80, 0xa7, 0xf0} }, +{ 0x0f6e, 4, {0x53, 0x91, 0xbf, 0x53} }, +{ 0x0f72, 16, {0x7b, 0xff, 0x7a, 0x12, 0x79, 0x1b, 0x90, 0x00, 0x04, 0x12, 0x9a, 0x61, 0xfd, 0x8b, 0x60, 0xfd} }, +{ 0x0f82, 16, {0x61, 0x12, 0x75, 0x62, 0x24, 0xe4, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0x7f, 0xe0, 0xf0, 0xf5, 0xe0} }, +{ 0x0f92, 16, {0xf5, 0x5f, 0x90, 0x02, 0x4c, 0xf0, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0xde} }, +{ 0x0fa2, 16, {0xa9, 0x74, 0xff, 0xf0, 0x90, 0x7f, 0xaa, 0xf0, 0xe4, 0xfc, 0xec, 0x25, 0xe0, 0x24, 0xb4, 0xe0} }, +{ 0x0fb2, 16, {0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x0c, 0xbc, 0x10, 0xee, 0xe4, 0x90, 0x7f, 0xe4} }, +{ 0x0fc2, 16, {0xf0, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x03, 0x02, 0x11, 0x38, 0xab, 0x60, 0xaa, 0x61, 0xa9, 0xaa} }, +{ 0x0fd2, 16, {0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0x64, 0x05, 0x60, 0x03, 0x02, 0x11, 0x27, 0x90, 0x00, 0x27} }, +{ 0x0fe2, 16, {0x12, 0x9a, 0x61, 0x64, 0x01, 0x60, 0x03, 0x02, 0x10, 0xae, 0x90, 0x00, 0x02, 0x12, 0x9a, 0x02} }, +{ 0x0ff2, 16, {0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0x50, 0x03, 0x02, 0x10, 0x88, 0xec, 0xc3, 0x94, 0xec} }, +{ 0x1002, 16, {0x40, 0x03, 0x02, 0x10, 0x88, 0xef, 0x30, 0xe7, 0x42, 0xe5, 0x5f, 0xae, 0x5e, 0x78, 0x02, 0x5e} }, +{ 0x1012, 16, {0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xf0, 0x2c, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xe4} }, +{ 0x1022, 16, {0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe0, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0x01, 0xa8, 0x74} }, +{ 0x1032, 16, {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe0, 0xf0, 0x90, 0x02, 0x4c, 0x90} }, +{ 0x1042, 16, {0x04, 0xf0, 0x90, 0x7f, 0xdd, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x3e, 0xe5, 0x5f, 0xae, 0x5e, 0x5f} }, +{ 0x1052, 16, {0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0x74, 0xe8, 0x2c, 0xf5, 0x82, 0xe4, 0xf5} }, +{ 0x1062, 16, {0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0xe1, 0xe0, 0xff, 0xec, 0x24, 0xf8, 0xfe, 0x74, 0xf8} }, +{ 0x1072, 16, {0xa8, 0x06, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x4f, 0x90, 0x7f, 0xe1, 0xf0, 0x90, 0xe1} }, +{ 0x1082, 16, {0x4c, 0xe0, 0x04, 0xf0, 0x80, 0x03, 0x7f, 0xff, 0x22, 0x90, 0x00, 0x04, 0x12, 0x9a, 0x61, 0x12} }, +{ 0x1092, 16, {0x5f, 0xf5, 0x5f, 0xe4, 0x35, 0x5e, 0xf5, 0x5e, 0x90, 0x00, 0x05, 0x12, 0x9a, 0x61, 0xfe, 0x9a} }, +{ 0x10a2, 16, {0x25, 0x5f, 0xf5, 0x5f, 0xee, 0x35, 0x5e, 0xf5, 0x5e, 0x02, 0x11, 0x2a, 0xab, 0x60, 0xaa, 0xab} }, +{ 0x10b2, 16, {0xa9, 0x62, 0x90, 0x00, 0x03, 0x12, 0x9a, 0x61, 0xff, 0x64, 0x02, 0x60, 0x05, 0xef, 0x64, 0x05} }, +{ 0x10c2, 16, {0x70, 0x60, 0x90, 0x00, 0x02, 0x12, 0x9a, 0x61, 0xff, 0x54, 0x7f, 0xfc, 0xd3, 0x94, 0x07, 0xd3} }, +{ 0x10d2, 16, {0x4e, 0xef, 0x30, 0xe7, 0x1e, 0x90, 0x7f, 0xde, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0xa8} }, +{ 0x10e2, 16, {0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xde, 0xf0, 0x90, 0x7f, 0xac, 0xe0, 0x7f} }, +{ 0x10f2, 16, {0xf0, 0x80, 0x35, 0x90, 0x7f, 0xdf, 0xe0, 0xff, 0x74, 0x01, 0xa8, 0x04, 0x08, 0x80, 0x02, 0x08} }, +{ 0x1102, 16, {0x33, 0xd8, 0xfc, 0xfe, 0x4f, 0x90, 0x7f, 0xdf, 0xf0, 0x90, 0x7f, 0xad, 0xe0, 0x4e, 0xf0, 0xe0} }, +{ 0x1112, 16, {0x25, 0xe0, 0x24, 0xc5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xec, 0xf0, 0x80, 0x09, 0xf0} }, +{ 0x1122, 16, {0xff, 0x22, 0x7f, 0xff, 0x22, 0x7f, 0xff, 0x22, 0x74, 0x07, 0x25, 0x62, 0xf5, 0x62, 0xe4, 0xf5} }, +{ 0x1132, 16, {0x61, 0xf5, 0x61, 0x02, 0x0f, 0xc3, 0x20, 0x03, 0x0d, 0x90, 0x02, 0x4c, 0xe0, 0x60, 0x07, 0xe0} }, +{ 0x1142, 8, {0x7f, 0xae, 0xe0, 0x44, 0x02, 0xf0, 0x7f, 0x02} }, +{ 0x114a, 1, {0x11} }, +{ 0x114b, 2, {0xae, 0x4b} }, +{ 0x114d, 16, {0x7c, 0x02, 0xec, 0x14, 0x60, 0x15, 0x14, 0x70, 0x1e, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xe0} }, +{ 0x115d, 16, {0xee, 0x25, 0xe0, 0x44, 0x40, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x0c, 0x90, 0x7f, 0xa6, 0xed, 0x7f} }, +{ 0x116d, 16, {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xfb, 0x30, 0xe0, 0xf8, 0x30} }, +{ 0x117d, 16, {0x02, 0x0a, 0x20, 0xe1, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0x22, 0xeb, 0x30, 0xe2, 0xeb} }, +{ 0x118d, 14, {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06, 0x22, 0xdc, 0xb6, 0x7f, 0xdc} }, +{ 0x119b, 1, {0x11} }, +{ 0x119c, 16, {0x7f, 0x05, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x7f, 0x02, 0x7d, 0xff, 0x12, 0x11, 0x4b, 0x7f, 0x11} }, +{ 0x11ac, 13, {0x7e, 0x00, 0x12, 0x08, 0x92, 0x7f, 0x03, 0x7d, 0xff, 0x12, 0x11, 0x4b, 0x12} }, +{ 0x11b9, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc2, 0xa9, 0x90, 0x02, 0x9e, 0x74, 0x19, 0xf0, 0xd2, 0x19} }, +{ 0x11c9, 15, {0x53, 0x91, 0x7f, 0x90, 0x01, 0x62, 0xe4, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x11d8, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x80} }, +{ 0x11e8, 7, {0xd8, 0xfc, 0x42, 0x3a, 0x7f, 0x00, 0x3a} }, +{ 0x11ef, 3, {0x00, 0x02, 0x00} }, +{ 0x1200, 16, {0x12, 0x01, 0x00, 0x01, 0xff, 0xff, 0xff, 0x40, 0x10, 0x07, 0x01, 0x80, 0x42, 0x00, 0x01, 0x42} }, +{ 0x1210, 16, {0x03, 0x01, 0x09, 0x02, 0x58, 0x00, 0x01, 0x01, 0x04, 0x80, 0x3c, 0x09, 0x04, 0x00, 0x00, 0x04} }, +{ 0x1220, 16, {0xff, 0xff, 0xff, 0x05, 0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x01, 0x02, 0x05} }, +{ 0x1230, 16, {0x00, 0x00, 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x02} }, +{ 0x1240, 16, {0x07, 0x05, 0x83, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x03, 0x02, 0x40, 0x00, 0x00, 0x07, 0x00} }, +{ 0x1250, 16, {0x84, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x04, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x87, 0x07} }, +{ 0x1260, 16, {0x40, 0x00, 0x00, 0x07, 0x05, 0x07, 0x02, 0x40, 0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x24, 0x09} }, +{ 0x1270, 16, {0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x20, 0x74} }, +{ 0x1280, 16, {0x54, 0x00, 0x65, 0x00, 0x63, 0x00, 0x68, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x6e} }, +{ 0x1290, 16, {0x2e, 0x00, 0x18, 0x03, 0x57, 0x00, 0x68, 0x00, 0x69, 0x00, 0x74, 0x00, 0x65, 0x00, 0x48, 0x65} }, +{ 0x12a0, 16, {0x45, 0x00, 0x41, 0x00, 0x54, 0x00, 0x2d, 0x00, 0x34, 0x00, 0x1a, 0x03, 0x58, 0x00, 0x58, 0x58} }, +{ 0x12b0, 16, {0x2d, 0x00, 0x58, 0x00, 0x58, 0x00, 0x2d, 0x00, 0x58, 0x00, 0x58, 0x00, 0x58, 0x00, 0x58, 0x58} }, +{ 0x12c0, 16, {0x58, 0x00, 0x58, 0x00, 0x2a, 0x03, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x69, 0x66} }, +{ 0x12d0, 16, {0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x6f} }, +{ 0x12e0, 16, {0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x22, 0x67} }, +{ 0x12f0, 16, {0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66, 0x00, 0x61, 0x00, 0x63, 0x61} }, +{ 0x1300, 16, {0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x6e} }, +{ 0x1310, 2, {0x00, 0x10} }, +{ 0x1312, 16, {0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0xc0, 0xc0} }, +{ 0x1322, 16, {0x75, 0x86, 0x00, 0x75, 0xd0, 0x18, 0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xf5, 0xf0, 0x70, 0xf5} }, +{ 0x1332, 16, {0xd0, 0xd0, 0xd0, 0x86, 0xd0, 0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xd0} }, +{ 0x1342, 16, {0x32, 0x75, 0x86, 0x00, 0x10, 0xf0, 0x0b, 0x10, 0xf1, 0x12, 0x10, 0xf2, 0x19, 0x10, 0xf3, 0x19} }, +{ 0x1352, 16, {0x80, 0xd4, 0xe5, 0x27, 0x70, 0x03, 0x75, 0x27, 0x14, 0x02, 0x13, 0x7c, 0xe5, 0x28, 0x70, 0xe5} }, +{ 0x1362, 16, {0x75, 0x28, 0x14, 0x02, 0x15, 0x0d, 0xe5, 0x29, 0x70, 0x03, 0x75, 0x29, 0x14, 0x02, 0x16, 0x14} }, +{ 0x1372, 16, {0xe5, 0x2a, 0x70, 0x03, 0x75, 0x2a, 0x14, 0x02, 0x18, 0x2f, 0x90, 0x20, 0x02, 0xe0, 0x54, 0x02} }, +{ 0x1382, 16, {0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5, 0x14, 0x60, 0x09, 0x02, 0x60} }, +{ 0x1392, 16, {0x43, 0x02, 0x14, 0x65, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0xf5, 0x36, 0x02, 0x13, 0x36} }, +{ 0x13a2, 16, {0x43, 0x82, 0x04, 0xe0, 0x43, 0x2c, 0x01, 0x02, 0x13, 0x43, 0x53, 0x82, 0xf8, 0x43, 0x82, 0xf8} }, +{ 0x13b2, 16, {0xe0, 0x42, 0x32, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02, 0x13, 0x43, 0x30, 0xe1, 0x43} }, +{ 0x13c2, 16, {0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe0, 0x0a, 0x53, 0x82, 0xf8, 0x43, 0x82, 0x04, 0x43} }, +{ 0x13d2, 16, {0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50, 0x74, 0x00, 0xf0, 0x90, 0x00} }, +{ 0x13e2, 16, {0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05, 0x7f} }, +{ 0x13f2, 16, {0x90, 0x7e, 0x80, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90, 0x05} }, +{ 0x1402, 16, {0xe5, 0xe5, 0x3c, 0xfd, 0x03, 0x03, 0x03, 0xfe, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0} }, +{ 0x1412, 16, {0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x74} }, +{ 0x1422, 16, {0x7f, 0xb7, 0xed, 0xf0, 0x90, 0x20, 0x01, 0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x7f, 0x13} }, +{ 0x1432, 16, {0x90, 0x7e, 0x80, 0x05, 0x86, 0x90, 0x20, 0x00, 0xe5, 0x84, 0xfe, 0x24, 0x05, 0xfd, 0x8d, 0x05} }, +{ 0x1442, 16, {0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xdf, 0xef, 0x86} }, +{ 0x1452, 16, {0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xb7, 0xf0, 0x05, 0x86, 0xa3, 0xe0, 0x54, 0xfe, 0xe0} }, +{ 0x1462, 16, {0x02, 0x13, 0x43, 0x53, 0x2c, 0xfa, 0xe5, 0x22, 0x60, 0x08, 0x75, 0x22, 0x00, 0xd2, 0xe7, 0x00} }, +{ 0x1472, 16, {0x80, 0x0a, 0x90, 0x7f, 0xc7, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x14, 0xff, 0x90, 0x20, 0x50, 0x90} }, +{ 0x1482, 16, {0x00, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x44} }, +{ 0x1492, 16, {0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7e, 0x40, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xa3} }, +{ 0x14a2, 16, {0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86, 0xe0, 0x24, 0x38, 0xf0, 0x24} }, +{ 0x14b2, 16, {0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78, 0x60, 0x30, 0x03, 0x03, 0x30} }, +{ 0x14c2, 16, {0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0} }, +{ 0x14d2, 16, {0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70, 0x11, 0x8b, 0x22, 0x90, 0x8b} }, +{ 0x14e2, 16, {0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x80, 0x1b, 0xe0, 0xde, 0x1b} }, +{ 0x14f2, 16, {0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x90, 0x20, 0xf0} }, +{ 0x1502, 16, {0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xc7, 0xf0, 0x02, 0x13, 0x43, 0x90, 0x20, 0x0a, 0xe0, 0x20} }, +{ 0x1512, 16, {0x3f, 0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5, 0x14, 0x60, 0x09, 0x14} }, +{ 0x1522, 16, {0x13, 0x43, 0x02, 0x15, 0xf6, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0xf5, 0x37, 0x02, 0xf5} }, +{ 0x1532, 16, {0x43, 0x43, 0x82, 0x04, 0xe0, 0x43, 0x2d, 0x01, 0x02, 0x13, 0x43, 0x53, 0x82, 0xf8, 0x43, 0x82} }, +{ 0x1542, 16, {0x05, 0xe0, 0x42, 0x33, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02, 0x13, 0x43, 0x30, 0x13} }, +{ 0x1552, 16, {0x02, 0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe1, 0x0a, 0x53, 0x82, 0xf8, 0x43, 0x82, 0xf8} }, +{ 0x1562, 16, {0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50, 0x74, 0x01, 0xf0, 0x74} }, +{ 0x1572, 16, {0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x90} }, +{ 0x1582, 16, {0x86, 0x90, 0x7e, 0x00, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0xf0} }, +{ 0x1592, 16, {0x7f, 0xe5, 0xe5, 0x3d, 0xfd, 0x03, 0x03, 0x03, 0xfe, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0} }, +{ 0x15a2, 16, {0xf0, 0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0x58} }, +{ 0x15b2, 16, {0x90, 0x7f, 0xb9, 0xed, 0xf0, 0x90, 0x20, 0x09, 0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x02} }, +{ 0x15c2, 16, {0x40, 0x90, 0x7e, 0x00, 0x05, 0x86, 0x90, 0x20, 0x08, 0xe5, 0x84, 0xfe, 0x24, 0x05, 0xfd, 0x24} }, +{ 0x15d2, 16, {0x84, 0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xdf, 0x05} }, +{ 0x15e2, 16, {0x05, 0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xb9, 0xf0, 0x05, 0x86, 0xa3, 0xe0, 0x54, 0xa3} }, +{ 0x15f2, 16, {0xf0, 0x02, 0x13, 0x43, 0x53, 0x2d, 0xfa, 0xe5, 0x23, 0x60, 0x08, 0x75, 0x23, 0x00, 0xd2, 0x23} }, +{ 0x1602, 16, {0xfe, 0x80, 0x0a, 0x90, 0x7f, 0xc9, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x16, 0x90, 0x90, 0x20, 0x90} }, +{ 0x1612, 16, {0x74, 0x01, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xe0} }, +{ 0x1622, 16, {0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0xc0, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0xf0} }, +{ 0x1632, 16, {0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86, 0xe0, 0x24, 0x38, 0xe0} }, +{ 0x1642, 16, {0x05, 0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78, 0x60, 0x30, 0x03, 0x60} }, +{ 0x1652, 16, {0x03, 0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0} }, +{ 0x1662, 16, {0xe0, 0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70, 0x11, 0x8b, 0x23, 0x11} }, +{ 0x1672, 16, {0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x80, 0x1b, 0xe0, 0x80} }, +{ 0x1682, 14, {0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0x58} }, +{ 0x1690, 16, {0x90, 0x20, 0x09, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xc9, 0xf0, 0x02, 0x13, 0x43, 0x90, 0x13} }, +{ 0x16a0, 16, {0x12, 0xe0, 0x54, 0x3f, 0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe5, 0x0b} }, +{ 0x16b0, 16, {0x60, 0x09, 0x02, 0x13, 0x43, 0x02, 0x17, 0x87, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0x82} }, +{ 0x16c0, 16, {0x38, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0x43, 0x2e, 0x01, 0x02, 0x13, 0x43, 0x53, 0x13} }, +{ 0x16d0, 16, {0xf8, 0x43, 0x82, 0x05, 0xe0, 0x42, 0x34, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x02, 0xfb} }, +{ 0x16e0, 16, {0x43, 0x30, 0xe1, 0x02, 0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe2, 0x0a, 0x53, 0x82, 0x0a} }, +{ 0x16f0, 16, {0x43, 0x82, 0x04, 0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x50, 0x90} }, +{ 0x1700, 16, {0x02, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xf0, 0x44} }, +{ 0x1710, 16, {0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0x80, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0x84, 0xa3} }, +{ 0x1720, 16, {0x05, 0x86, 0x90, 0x7f, 0xe5, 0xe5, 0x3e, 0xfd, 0x03, 0x03, 0x03, 0xfe, 0xf0, 0xf0, 0xf0, 0xf0} }, +{ 0x1730, 16, {0xf0, 0xf0, 0xf0, 0xf0, 0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0xf0} }, +{ 0x1740, 16, {0x74, 0x00, 0xf0, 0x90, 0x7f, 0xbb, 0xed, 0xf0, 0x90, 0x20, 0x11, 0xe0, 0x54, 0xfe, 0xf0, 0x54} }, +{ 0x1750, 16, {0x13, 0x43, 0x7f, 0x40, 0x90, 0x7d, 0x80, 0x05, 0x86, 0x90, 0x20, 0x10, 0xe5, 0x84, 0xfe, 0xe5} }, +{ 0x1760, 16, {0x05, 0xfd, 0x8d, 0x84, 0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0xa3, 0x86} }, +{ 0x1770, 16, {0x86, 0xdf, 0xef, 0x05, 0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xbb, 0xf0, 0x05, 0x86, 0xf0} }, +{ 0x1780, 16, {0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x53, 0x2e, 0xfa, 0xe5, 0x24, 0x60, 0x08, 0x75, 0x60} }, +{ 0x1790, 16, {0x00, 0xd2, 0xe7, 0xfe, 0x80, 0x0a, 0x90, 0x7f, 0xcb, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x18, 0x03} }, +{ 0x17a0, 16, {0x90, 0x20, 0x50, 0x74, 0x02, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0x90} }, +{ 0x17b0, 16, {0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0x40, 0x05, 0x86, 0xe5, 0x85, 0x86} }, +{ 0x17c0, 16, {0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0x86, 0x08} }, +{ 0x17d0, 16, {0x24, 0x38, 0xf0, 0x05, 0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0x78, 0xee} }, +{ 0x17e0, 16, {0x30, 0x03, 0x03, 0x03, 0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xe0, 0xfc} }, +{ 0x17f0, 16, {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0x70, 0x64} }, +{ 0x1800, 16, {0x8b, 0x24, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0xf0, 0x74} }, +{ 0x1810, 16, {0x1b, 0xe0, 0xde, 0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x20} }, +{ 0x1820, 16, {0xf0, 0x90, 0x20, 0x11, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xcb, 0xf0, 0x02, 0x13, 0x43, 0x02} }, +{ 0x1830, 16, {0x20, 0x1a, 0xe0, 0x54, 0x3f, 0x20, 0xe2, 0x3a, 0x20, 0xe1, 0x0b, 0x20, 0xe4, 0x0b, 0x20, 0xe4} }, +{ 0x1840, 16, {0x14, 0x60, 0x09, 0x02, 0x13, 0x43, 0x02, 0x19, 0x18, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0x43} }, +{ 0x1850, 16, {0xf5, 0x39, 0x02, 0x13, 0x43, 0x43, 0x82, 0x04, 0xe0, 0x43, 0x2f, 0x01, 0x02, 0x13, 0x43, 0x02} }, +{ 0x1860, 16, {0x82, 0xf8, 0x43, 0x82, 0x05, 0xe0, 0x42, 0x35, 0x53, 0x82, 0xfb, 0xe0, 0x54, 0xfb, 0xf0, 0x54} }, +{ 0x1870, 16, {0x13, 0x43, 0x30, 0xe1, 0x02, 0x80, 0xe8, 0xf5, 0x85, 0xe5, 0x3b, 0x30, 0xe3, 0x0a, 0x53, 0xe3} }, +{ 0x1880, 16, {0xf8, 0x43, 0x82, 0x04, 0xe0, 0x54, 0xfe, 0xf0, 0xe5, 0x85, 0x20, 0xe3, 0x56, 0x90, 0x20, 0x56} }, +{ 0x1890, 16, {0x74, 0x03, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xe2, 0xe0, 0x44, 0x40, 0xe0} }, +{ 0x18a0, 16, {0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7d, 0x00, 0x05, 0x86, 0xe5, 0x85, 0xf0, 0xa3, 0xe5, 0xf0} }, +{ 0x18b0, 16, {0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xe5, 0x3f, 0xfd, 0x03, 0x03, 0x03, 0xfe, 0xf0, 0xf0, 0xfe} }, +{ 0x18c0, 16, {0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xde, 0xf6, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0xbf} }, +{ 0x18d0, 16, {0x58, 0x74, 0x00, 0xf0, 0x90, 0x7f, 0xbd, 0xed, 0xf0, 0x90, 0x20, 0x19, 0xe0, 0x54, 0xfe, 0xe0} }, +{ 0x18e0, 16, {0x02, 0x13, 0x43, 0x7f, 0x40, 0x90, 0x7d, 0x00, 0x05, 0x86, 0x90, 0x20, 0x18, 0xe5, 0x84, 0x18} }, +{ 0x18f0, 16, {0x24, 0x05, 0xfd, 0x8d, 0x84, 0xe0, 0x8e, 0x84, 0x30, 0xe0, 0x09, 0xe0, 0x05, 0x86, 0xf0, 0x05} }, +{ 0x1900, 16, {0x05, 0x86, 0xdf, 0xef, 0x05, 0x86, 0xc3, 0x74, 0x40, 0x9f, 0x90, 0x7f, 0xbd, 0xf0, 0x05, 0xbd} }, +{ 0x1910, 16, {0xa3, 0xe0, 0x54, 0xfe, 0xf0, 0x02, 0x13, 0x43, 0x53, 0x2f, 0xfa, 0xe5, 0x25, 0x60, 0x08, 0x25} }, +{ 0x1920, 16, {0x25, 0x00, 0xd2, 0xe7, 0xfe, 0x80, 0x0a, 0x90, 0x7f, 0xcd, 0xe0, 0xfe, 0x70, 0x03, 0x02, 0x70} }, +{ 0x1930, 16, {0xb2, 0x90, 0x20, 0x50, 0x74, 0x03, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xf0} }, +{ 0x1940, 16, {0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xe3, 0x05, 0x86, 0x90, 0x7c, 0xc0, 0x05, 0x86, 0xe5, 0x05} }, +{ 0x1950, 16, {0xf0, 0xa3, 0xe5, 0x84, 0xf0, 0x05, 0x86, 0x90, 0x7f, 0xe5, 0xee, 0x30, 0xe7, 0x08, 0x05, 0xe7} }, +{ 0x1960, 16, {0xe0, 0x24, 0x38, 0xf0, 0x05, 0x86, 0xee, 0x54, 0x7f, 0xfe, 0x54, 0x07, 0xfb, 0xee, 0x54, 0xfb} }, +{ 0x1970, 16, {0x60, 0x30, 0x03, 0x03, 0x03, 0x30, 0xe3, 0x04, 0x74, 0x07, 0x7b, 0x08, 0xfd, 0xfc, 0xe0, 0xfd} }, +{ 0x1980, 16, {0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdd, 0xf6, 0xeb, 0xfe, 0x60, 0x19, 0xec, 0x64, 0x07, 0xec} }, +{ 0x1990, 16, {0x11, 0x8b, 0x25, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x74, 0x00, 0x58} }, +{ 0x19a0, 16, {0x80, 0x1b, 0xe0, 0xde, 0xfd, 0x90, 0x7f, 0xe2, 0xe0, 0x54, 0xbf, 0xf0, 0x90, 0x20, 0x58, 0x90} }, +{ 0x19b0, 16, {0x00, 0xf0, 0x90, 0x20, 0x19, 0xe0, 0x54, 0xfd, 0xf0, 0x90, 0x7f, 0xcd, 0xf0, 0x02, 0x13, 0xf0} }, +{ 0x19c0, 1, {0x19} }, +{ 0x19c1, 4, {0xad, 0x07, 0xac, 0xad} }, +{ 0x19c5, 16, {0x79, 0x06, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xfa} }, +{ 0x19d5, 16, {0x4a, 0x70, 0x03, 0x02, 0x1b, 0x09, 0xe9, 0xb4, 0x07, 0x00, 0x40, 0x03, 0x02, 0x1a, 0xdb, 0x02} }, +{ 0x19e5, 16, {0x19, 0xeb, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x1a, 0xb9, 0x02, 0x1a, 0x71, 0x02, 0x1a, 0x5a, 0x02} }, +{ 0x19f5, 16, {0x1a, 0x40, 0x02, 0x1a, 0x2f, 0x02, 0x1a, 0x1a, 0x02, 0x1a, 0x00, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} }, +{ 0x1a05, 16, {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa0} }, +{ 0x1a15, 16, {0xf0, 0x19, 0x02, 0x1a, 0xdb, 0x19, 0x8d, 0x82, 0x8c, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x94} }, +{ 0x1a25, 16, {0xa3, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x02, 0x1a, 0xdb, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0x8c} }, +{ 0x1a35, 16, {0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x19, 0x02, 0x1a, 0xdb, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} }, +{ 0x1a45, 16, {0x80, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa1, 0x90, 0x7f, 0xa1} }, +{ 0x1a55, 16, {0xf0, 0x19, 0x02, 0x1a, 0xdb, 0xeb, 0x64, 0x01, 0x4a, 0x70, 0x08, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} }, +{ 0x1a65, 16, {0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xf5, 0x69, 0x19, 0x80, 0x6a, 0xed, 0x24, 0x04, 0xed} }, +{ 0x1a75, 16, {0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfe, 0xa3, 0xe0, 0x64, 0x02, 0x4e, 0x70, 0x08, 0x90, 0x70} }, +{ 0x1a85, 16, {0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x19, 0x90, 0x7f, 0xa6, 0xe0, 0xff, 0xed, 0x24, 0x06, 0xf5, 0x24} }, +{ 0x1a95, 16, {0xe4, 0x3c, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0xf0} }, +{ 0x1aa5, 16, {0xef, 0xf0, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0xff} }, +{ 0x1ab5, 16, {0x9a, 0x8e, 0x80, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0x7f} }, +{ 0x1ac5, 16, {0xed, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3c, 0xf5, 0x83, 0xe0, 0xfa, 0xa3, 0xe0, 0xf5, 0x82, 0xe0} }, +{ 0x1ad5, 16, {0x83, 0xef, 0xf0, 0x7f, 0x08, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0xf5, 0x69, 0x30, 0xe0, 0xf7, 0x30} }, +{ 0x1ae5, 16, {0xe2, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x06, 0x22, 0xe9, 0xd3, 0x94, 0x02, 0x50, 0x03, 0x02} }, +{ 0x1af5, 16, {0x19, 0xc7, 0xe5, 0x69, 0x30, 0xe1, 0x03, 0x02, 0x19, 0xc7, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0xa5} }, +{ 0x1b05, 6, {0xf0, 0x7f, 0x07, 0x22, 0x7f, 0x07} }, +{ 0x1b0b, 1, {0x1b} }, +{ 0x1b0c, 16, {0x8e, 0x5f, 0x8f, 0x60, 0x8c, 0x61, 0x8d, 0x62, 0xaf, 0x03, 0x1b, 0xef, 0x60, 0x24, 0x05, 0x60} }, +{ 0x1b1c, 16, {0xe5, 0x60, 0xae, 0x5f, 0x70, 0x02, 0x05, 0x5f, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe0, 0xff, 0x83} }, +{ 0x1b2c, 16, {0x62, 0xe5, 0x62, 0xac, 0x61, 0x70, 0x02, 0x05, 0x61, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0x8c} }, +{ 0x1b3c, 3, {0x80, 0xd6, 0x00} }, +{ 0x8000, 4, {0x8e, 0x69, 0x8f, 0x8e} }, +{ 0x8004, 16, {0x75, 0x6b, 0x03, 0xe5, 0x6a, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x69, 0xf5, 0x83, 0xe0, 0xf5} }, +{ 0x8014, 16, {0xa3, 0xe0, 0x4e, 0x70, 0x03, 0x02, 0x81, 0x0e, 0xe5, 0x6b, 0x60, 0x4e, 0x14, 0x60, 0x38, 0x14} }, +{ 0x8024, 16, {0x60, 0x20, 0x14, 0x60, 0x03, 0x02, 0x80, 0xb2, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0x44} }, +{ 0x8034, 16, {0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0x90, 0x7f, 0xa6, 0x90} }, +{ 0x8044, 16, {0x80, 0x6c, 0x85, 0x6a, 0x82, 0x85, 0x69, 0x83, 0xe0, 0xc3, 0x94, 0x20, 0x40, 0x09, 0xa3, 0x40} }, +{ 0x8054, 16, {0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x57, 0x15, 0x6b, 0x85, 0x6a, 0x82, 0x85, 0x69, 0x83, 0x85} }, +{ 0x8064, 16, {0xa3, 0xe0, 0xa3, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x80, 0x44, 0xe5, 0x6a, 0x24, 0x06, 0xf5, 0x24} }, +{ 0x8074, 16, {0xe4, 0x35, 0x69, 0xf5, 0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0x85} }, +{ 0x8084, 16, {0x83, 0xe0, 0x90, 0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe5, 0x6a, 0xf0} }, +{ 0x8094, 16, {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x69, 0xf5, 0x83, 0x74, 0xff, 0xf5, 0xf0, 0x12, 0x9a, 0x8e, 0x12} }, +{ 0x80a4, 16, {0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3, 0xa3, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0x8e, 0x90, 0x9a} }, +{ 0x80b4, 16, {0xa5, 0xe0, 0xf5, 0x6c, 0x30, 0xe0, 0xf7, 0x30, 0xe2, 0x07, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x40} }, +{ 0x80c4, 16, {0x22, 0xe5, 0x6c, 0x20, 0xe1, 0x0a, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x07, 0xf0} }, +{ 0x80d4, 16, {0xe5, 0x6b, 0x70, 0x31, 0x7f, 0x01, 0x7e, 0x00, 0x12, 0x08, 0x92, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} }, +{ 0x80e4, 16, {0x80, 0xf0, 0x85, 0x6a, 0x82, 0x85, 0x69, 0x83, 0xa3, 0xe0, 0xff, 0x25, 0xe0, 0x44, 0xa0, 0xe0} }, +{ 0x80f4, 16, {0x7f, 0xa6, 0xf0, 0x90, 0x7f, 0xa5, 0xe0, 0xf5, 0x6c, 0x30, 0xe0, 0xf7, 0x30, 0xe1, 0xd5, 0x30} }, +{ 0x8104, 12, {0x6b, 0x03, 0x02, 0x80, 0x07, 0x15, 0x6b, 0x02, 0x80, 0x07, 0x7f, 0x80} }, +{ 0x8110, 1, {0x81} }, +{ 0x8111, 2, {0xac, 0x11} }, +{ 0x8113, 16, {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xec, 0x25, 0xe0, 0x44, 0x41, 0x90, 0x7f, 0xa6, 0x90} }, +{ 0x8123, 16, {0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x44} }, +{ 0x8133, 16, {0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0xd4, 0x80, 0xf8, 0x90, 0x80} }, +{ 0x8143, 16, {0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xdc, 0x20, 0xe1, 0x09, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0xf0} }, +{ 0x8153, 16, {0xf9, 0x22, 0xed, 0x30, 0xe2, 0x0c, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0xf0} }, +{ 0x8163, 16, {0xfa, 0x22, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x20, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7b, 0xe0} }, +{ 0x8173, 16, {0xaf, 0x03, 0x1b, 0xef, 0x70, 0x16, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0x90, 0x7f, 0xf0} }, +{ 0x8183, 16, {0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x60, 0x86, 0x80, 0xf8, 0x90, 0x7f, 0xa5, 0x90} }, +{ 0x8193, 16, {0xfd, 0x20, 0xe0, 0xdc, 0x7b, 0x3c, 0xaf, 0x03, 0x1b, 0xef, 0x70, 0x19, 0x90, 0x7f, 0xa5, 0x90} }, +{ 0x81a3, 16, {0x44, 0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0x7d, 0x32, 0xaf, 0x05, 0x1d, 0xef, 0x70, 0x1d} }, +{ 0x81b3, 16, {0x02, 0x81, 0x13, 0x80, 0xf5, 0x90, 0x7f, 0xa5, 0xe0, 0xfd, 0x30, 0xe0, 0xd9, 0x30, 0xe2, 0xd9} }, +{ 0x81c3, 16, {0xe0, 0x44, 0x40, 0xf0, 0x7e, 0xff, 0x7f, 0xfa, 0x22, 0xc2, 0xaf, 0x90, 0x7f, 0xa5, 0xe0, 0x7f} }, +{ 0x81d3, 12, {0x40, 0xf0, 0x90, 0x7f, 0xa6, 0xe0, 0xfd, 0xd2, 0xaf, 0xff, 0x7e, 0xaf} }, +{ 0x81df, 1, {0x81} }, +{ 0x81e0, 16, {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xab} }, +{ 0x81f0, 16, {0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xf9, 0x74, 0xbf, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0x83} }, +{ 0x8200, 16, {0x44, 0x10, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0xe4, 0xf0, 0x8b, 0x82, 0x8a, 0x8b} }, +{ 0x8210, 16, {0xa3, 0xf0, 0xed, 0x60, 0x29, 0x74, 0x01, 0x7e, 0x00, 0xa8, 0x07, 0x08, 0x80, 0x05, 0xc3, 0x80} }, +{ 0x8220, 16, {0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0xe4, 0xef, 0x55, 0x3b, 0x60, 0x0a, 0x8b, 0x82, 0x8a, 0x8b} }, +{ 0x8230, 16, {0xa3, 0x74, 0x01, 0xf0, 0x80, 0x08, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0x74, 0xad, 0xf0, 0x8b, 0xad} }, +{ 0x8240, 16, {0x8a, 0x83, 0xa3, 0xa3, 0xa3, 0x74, 0xbf, 0xf0, 0x8b, 0x82, 0x8a, 0x83, 0xa3, 0xa3, 0xe0, 0xa3} }, +{ 0x8250, 15, {0xef, 0xf0, 0xae, 0x02, 0xaf, 0x03, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xe9, 0xa3} }, +{ 0x825f, 1, {0x82} }, +{ 0x8260, 4, {0x8f, 0x68, 0x8d, 0x8f} }, +{ 0x8264, 16, {0xe4, 0xf5, 0x6a, 0x74, 0x3c, 0x2f, 0xf8, 0x76, 0x08, 0xe5, 0x68, 0x75, 0xf0, 0x0d, 0xa4, 0xf0} }, +{ 0x8274, 16, {0xa0, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfd} }, +{ 0x8284, 16, {0xa3, 0xe0, 0xff, 0x7b, 0x80, 0x7a, 0x25, 0x79, 0x00, 0x78, 0x00, 0xc3, 0x12, 0x9b, 0xc0, 0x12} }, +{ 0x8294, 16, {0x3c, 0xe5, 0x68, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0xa0, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x34} }, +{ 0x82a4, 16, {0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7b, 0x00, 0x7a, 0x96, 0x00} }, +{ 0x82b4, 16, {0x00, 0xc3, 0x12, 0x9b, 0xc0, 0x40, 0x0c, 0x75, 0x6a, 0x40, 0x74, 0x3c, 0x25, 0x68, 0xf8, 0x25} }, +{ 0x82c4, 16, {0x10, 0x80, 0x0a, 0x75, 0x6a, 0x80, 0x74, 0x3c, 0x25, 0x68, 0xf8, 0x76, 0x38, 0xe5, 0x6a, 0x38} }, +{ 0x82d4, 16, {0x69, 0x44, 0x01, 0xff, 0xe5, 0x68, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x02, 0xf5, 0x82, 0xe4, 0xf5} }, +{ 0x82e4, 5, {0x20, 0xf5, 0x83, 0xef, 0xf5} }, +{ 0x82e9, 1, {0x82} }, +{ 0x82ea, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x5f, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x24} }, +{ 0x82fa, 16, {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x61, 0x8f, 0x62, 0xf5, 0x83, 0xe5, 0x82, 0x24, 0x04, 0x82} }, +{ 0x830a, 16, {0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x44, 0x03, 0xf0, 0xaf, 0x5f, 0x7d, 0x06, 0x12, 0x7d} }, +{ 0x831a, 16, {0x60, 0xaf, 0x5f, 0x7d, 0x01, 0x12, 0x81, 0xe0, 0x85, 0x62, 0x82, 0x85, 0x61, 0x83, 0xa3, 0x61} }, +{ 0x832a, 16, {0xe0, 0x20, 0xe0, 0x28, 0xe0, 0xf5, 0x60, 0xe5, 0x62, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x82} }, +{ 0x833a, 16, {0xf5, 0x83, 0xe0, 0xf5, 0x60, 0xe5, 0x62, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x35} }, +{ 0x834a, 16, {0xe0, 0xf5, 0x60, 0xaf, 0x5f, 0x7d, 0x06, 0x12, 0x82, 0x60, 0x80, 0xcc, 0x74, 0x96, 0x25, 0x74} }, +{ 0x835a, 16, {0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x5f, 0x25, 0xe0, 0xff, 0xc3, 0xe0} }, +{ 0x836a, 16, {0x0c, 0x9f, 0x75, 0xf0, 0x40, 0xa4, 0x24, 0x40, 0xf5, 0x82, 0xe5, 0xf0, 0x34, 0x7b, 0xaf, 0x34} }, +{ 0x837a, 16, {0xfe, 0xe5, 0x5f, 0x25, 0xe0, 0x24, 0x8d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xee, 0xf5} }, +{ 0x838a, 16, {0xa3, 0xef, 0xf0, 0xaf, 0x5f, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xc3} }, +{ 0x839a, 4, {0x42, 0x30, 0x7f, 0x42} }, +{ 0x839e, 1, {0x83} }, +{ 0x839f, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x47, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x24} }, +{ 0x83af, 16, {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x49, 0x8f, 0x4a, 0x74, 0x96, 0x25, 0x47, 0xf5, 0x82, 0x47} }, +{ 0x83bf, 16, {0x34, 0x02, 0xf5, 0x83, 0xe4, 0xf0, 0xe5, 0x4a, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x49, 0xe4} }, +{ 0x83cf, 16, {0x83, 0xe0, 0x54, 0xfc, 0xf0, 0xaf, 0x47, 0xe4, 0xfd, 0x12, 0x81, 0xe0, 0xaf, 0x47, 0x7d, 0xaf} }, +{ 0x83df, 16, {0x12, 0x82, 0x60, 0xe5, 0x4a, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x49, 0xf5, 0x83, 0xe0, 0xf5} }, +{ 0x83ef, 16, {0xe0, 0x0b, 0x85, 0x4a, 0x82, 0x85, 0x49, 0x83, 0xe0, 0xf5, 0x48, 0x80, 0xe6, 0xaf, 0x47, 0xe6} }, +{ 0x83ff, 16, {0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf4, 0x52, 0x30, 0xe5, 0x47, 0x30} }, +{ 0x840f, 13, {0xe0, 0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf0, 0x83} }, +{ 0x841c, 1, {0x84} }, +{ 0x841d, 4, {0x8e, 0x47, 0x8f, 0x8e} }, +{ 0x8421, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x49, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x24} }, +{ 0x8431, 16, {0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x54, 0x03, 0x70, 0x23, 0x85, 0x48, 0x82, 0x8e, 0x83, 0x82} }, +{ 0x8441, 16, {0xe0, 0x30, 0xe0, 0x07, 0xaf, 0x49, 0x7d, 0x02, 0x12, 0x82, 0x60, 0x85, 0x48, 0x82, 0x85, 0x48} }, +{ 0x8451, 15, {0x83, 0xa3, 0xe0, 0x30, 0xe1, 0x07, 0xaf, 0x49, 0x7d, 0x04, 0x12, 0x82, 0x60, 0x7f, 0x82} }, +{ 0x8460, 1, {0x84} }, +{ 0x8461, 16, {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0xa3, 0xa3, 0xa3, 0xe0, 0xfc, 0xa3} }, +{ 0x8471, 16, {0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xa3, 0xc0, 0x83, 0xa3} }, +{ 0x8481, 16, {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0x82} }, +{ 0x8491, 16, {0x8f, 0x82, 0x8e, 0x83, 0xc0, 0x83, 0xc0, 0x82, 0xa3, 0xa3, 0xa3, 0xe0, 0xfd, 0xec, 0x6d, 0xfd} }, +{ 0x84a1, 16, {0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x82} }, +{ 0x84b1, 16, {0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x83} }, +{ 0x84c1, 16, {0x8e, 0x83, 0xa3, 0xa3, 0xc0, 0x83, 0xc0, 0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0x8e} }, +{ 0x84d1, 16, {0xfc, 0xed, 0x6c, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xc0, 0x83, 0xa3} }, +{ 0x84e1, 16, {0x82, 0xe0, 0xfd, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xa3, 0xe0, 0xff, 0xed, 0x6f, 0xd0, 0x82, 0x6f} }, +{ 0x84f1, 3, {0x83, 0xf0, 0x00} }, +{ 0x84f4, 4, {0x8e, 0x5f, 0x8f, 0x8e} }, +{ 0x84f8, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0xff, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0xf5} }, +{ 0x8508, 16, {0x1f, 0xad, 0x82, 0xf5, 0x66, 0x8d, 0x67, 0xaa, 0x5f, 0xa9, 0x60, 0x7b, 0x01, 0xc0, 0x03, 0x01} }, +{ 0x8518, 16, {0x01, 0xef, 0x75, 0xf0, 0x0d, 0xa4, 0x24, 0x92, 0xf9, 0x74, 0x02, 0x35, 0xf0, 0xa8, 0x01, 0xf0} }, +{ 0x8528, 16, {0xad, 0x03, 0xd0, 0x01, 0xd0, 0x03, 0x7e, 0x00, 0x7f, 0x0d, 0x12, 0x9a, 0x1f, 0x85, 0x60, 0x1f} }, +{ 0x8538, 16, {0x85, 0x5f, 0x83, 0xa3, 0xe0, 0xf8, 0xa3, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0xa3} }, +{ 0x8548, 16, {0x00, 0x7e, 0x08, 0x7d, 0x07, 0x7c, 0x00, 0x12, 0x9b, 0x2e, 0x8f, 0x64, 0x8e, 0x63, 0x8d, 0x8e} }, +{ 0x8558, 16, {0x8c, 0x61, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0xc3, 0x12, 0x9b, 0xc0, 0x70, 0x9b} }, +{ 0x8568, 16, {0x75, 0x64, 0x01, 0xf5, 0x63, 0xf5, 0x62, 0xf5, 0x61, 0x7f, 0xff, 0x7e, 0xff, 0x7d, 0x00, 0xff} }, +{ 0x8578, 16, {0x00, 0xab, 0x64, 0xaa, 0x63, 0xa9, 0x62, 0xa8, 0x61, 0xd3, 0x12, 0x9b, 0xc0, 0x40, 0x0c, 0xc0} }, +{ 0x8588, 16, {0x64, 0xff, 0x75, 0x63, 0xff, 0x75, 0x62, 0x00, 0x75, 0x61, 0x00, 0x85, 0x67, 0x82, 0x85, 0x67} }, +{ 0x8598, 16, {0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x80, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xe5, 0x66} }, +{ 0x85a8, 16, {0xf0, 0xaf, 0x64, 0xae, 0x63, 0xad, 0x62, 0xac, 0x61, 0x78, 0x08, 0x12, 0x9b, 0xd1, 0x85, 0x9b} }, +{ 0x85b8, 16, {0x82, 0x85, 0x66, 0x83, 0xa3, 0xef, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0x83} }, +{ 0x85c8, 16, {0xe0, 0x54, 0x7f, 0xf0, 0xe4, 0xf5, 0x65, 0xe5, 0x60, 0x24, 0x08, 0xf5, 0x82, 0xe4, 0x35, 0x82} }, +{ 0x85d8, 16, {0xf5, 0x83, 0xe0, 0xff, 0xb4, 0x62, 0x05, 0x43, 0x65, 0x0a, 0x80, 0x10, 0xef, 0xb4, 0x72, 0xef} }, +{ 0x85e8, 16, {0x43, 0x65, 0x08, 0x80, 0x07, 0xef, 0xb4, 0x74, 0x03, 0x43, 0x65, 0x02, 0xe5, 0x60, 0x24, 0xe5} }, +{ 0x85f8, 16, {0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0x30, 0xe3, 0x03, 0x43, 0x65, 0x80, 0x43} }, +{ 0x8608, 16, {0x30, 0xe7, 0x12, 0x43, 0x65, 0x40, 0xe5, 0x67, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xe4} }, +{ 0x8618, 16, {0x83, 0xe0, 0x44, 0x02, 0xf0, 0xe5, 0x60, 0x24, 0x0b, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x35} }, +{ 0x8628, 16, {0xe0, 0xff, 0x20, 0xe1, 0x03, 0x30, 0xe4, 0x27, 0x85, 0x60, 0x82, 0x85, 0x5f, 0x83, 0xe0, 0x5f} }, +{ 0x8638, 16, {0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x42, 0x3b, 0xe5, 0x42} }, +{ 0x8648, 16, {0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x17, 0xf0} }, +{ 0x8658, 16, {0x60, 0x82, 0x85, 0x5f, 0x83, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0x08} }, +{ 0x8668, 16, {0x33, 0xd8, 0xfc, 0xf4, 0x52, 0x3b, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xa3, 0xa3} }, +{ 0x8678, 16, {0xbf, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x65, 0xf0, 0xe5} }, +{ 0x8688, 16, {0x60, 0x24, 0x0a, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x67, 0x24, 0xe5} }, +{ 0x8698, 16, {0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x60, 0x24, 0x0a, 0xf5, 0x82, 0x0a} }, +{ 0x86a8, 16, {0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x67, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xe4} }, +{ 0x86b8, 16, {0x83, 0xef, 0xf0, 0xe5, 0x60, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xf5} }, +{ 0x86c8, 16, {0xe5, 0x67, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x60, 0xf0} }, +{ 0x86d8, 16, {0x09, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x67, 0x24, 0x07, 0xf5, 0x24} }, +{ 0x86e8, 16, {0xe4, 0x35, 0x66, 0xf5, 0x83, 0xef, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0x83} }, +{ 0x86f8, 16, {0xe4, 0xf0, 0x85, 0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xf0, 0x85, 0x60, 0x82, 0x85, 0x60} }, +{ 0x8708, 16, {0x83, 0xe0, 0x14, 0xff, 0x7d, 0x06, 0x12, 0x82, 0x60, 0x75, 0x65, 0x08, 0xe5, 0x60, 0x24, 0xe5} }, +{ 0x8718, 16, {0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x60, 0x03, 0x43, 0x65, 0x10, 0xe5, 0x67, 0x10} }, +{ 0x8728, 16, {0x04, 0xf5, 0x82, 0xe4, 0x35, 0x66, 0xf5, 0x83, 0xe0, 0x54, 0x03, 0x45, 0x65, 0xf0, 0xe5, 0x65} }, +{ 0x8738, 16, {0x24, 0x06, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x14, 0xff, 0x25, 0xe0, 0x25, 0x25} }, +{ 0x8748, 16, {0xff, 0xe5, 0x60, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x24, 0xfb, 0xe0} }, +{ 0x8758, 16, {0xf5, 0x65, 0xe5, 0x60, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x5f, 0xf5, 0x83, 0xe0, 0x24, 0x83} }, +{ 0x8768, 16, {0x60, 0x15, 0x14, 0x60, 0x17, 0x24, 0xc2, 0x60, 0x09, 0x24, 0x0a, 0x70, 0x12, 0x43, 0x65, 0x12} }, +{ 0x8778, 16, {0x80, 0x0d, 0x43, 0x65, 0x08, 0x80, 0x08, 0x43, 0x65, 0x38, 0x80, 0x03, 0x43, 0x65, 0x28, 0x43} }, +{ 0x8788, 13, {0x67, 0x82, 0x85, 0x66, 0x83, 0xa3, 0xa3, 0xa3, 0xe5, 0x65, 0xf0, 0x7f, 0x65} }, +{ 0x8795, 1, {0x87} }, +{ 0x8796, 4, {0x8e, 0x47, 0x8f, 0x8e} }, +{ 0x879a, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x14, 0xf5, 0x4a, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x24} }, +{ 0x87aa, 16, {0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x4d, 0x8f, 0x4e, 0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x80} }, +{ 0x87ba, 16, {0xf5, 0x4c, 0xe4, 0x3e, 0xf5, 0x4b, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x08, 0xf0, 0xe5, 0x4a, 0xf0} }, +{ 0x87ca, 16, {0x85, 0x4c, 0x82, 0x85, 0x4b, 0x83, 0xf0, 0xa3, 0xe4, 0xf0, 0xe5, 0x4e, 0x24, 0x06, 0xf5, 0x24} }, +{ 0x87da, 16, {0xe4, 0x35, 0x4d, 0xf5, 0x83, 0xe0, 0x85, 0x4c, 0x82, 0x85, 0x4b, 0x83, 0xa3, 0xa3, 0xf0, 0xa3} }, +{ 0x87ea, 16, {0x4e, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x4d, 0xf5, 0x83, 0xe0, 0x54, 0x1e, 0x85, 0x4c, 0x1e} }, +{ 0x87fa, 16, {0x85, 0x4b, 0x83, 0xa3, 0xa3, 0xa3, 0xf0, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x24, 0x83} }, +{ 0x880a, 16, {0xf8, 0xe6, 0xff, 0xe5, 0x4c, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x4b, 0xf5, 0x83, 0xef, 0xf5} }, +{ 0x881a, 16, {0xaf, 0x4a, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x49, 0xfc} }, +{ 0x882a, 16, {0x02, 0x12, 0x81, 0x11, 0xc3, 0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xe5, 0x49, 0x5f, 0xe5} }, +{ 0x883a, 16, {0xe5, 0x4c, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x4b, 0xf5, 0x83, 0xef, 0xf0, 0x90, 0x7f, 0xf0} }, +{ 0x884a, 5, {0x74, 0x07, 0xf0, 0x7f, 0x07} }, +{ 0x884f, 1, {0x88} }, +{ 0x8850, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x82} }, +{ 0x8860, 16, {0xaf, 0x82, 0xf5, 0x47, 0x8f, 0x48, 0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01, 0xfd, 0xe4, 0x01} }, +{ 0x8870, 16, {0xfc, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x0a, 0xf0, 0xe5, 0x48, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0xf5} }, +{ 0x8880, 16, {0x47, 0xf5, 0x83, 0xe0, 0x8d, 0x82, 0x8c, 0x83, 0xf0, 0x90, 0x7f, 0xc3, 0x74, 0x02, 0xf0, 0x74} }, +{ 0x8890, 1, {0x88} }, +{ 0x8891, 1, {0x88} }, +{ 0x8892, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x82} }, +{ 0x88a2, 16, {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0f, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0xf5} }, +{ 0x88b2, 16, {0xf5, 0x83, 0xe0, 0x44, 0x02, 0xf0, 0x80, 0x11, 0xae, 0x04, 0xaf, 0x05, 0xef, 0x24, 0x04, 0xef} }, +{ 0x88c2, 11, {0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54, 0xfd, 0xf0, 0x7f, 0xfd} }, +{ 0x88cd, 1, {0x88} }, +{ 0x88ce, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x82} }, +{ 0x88de, 16, {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0f, 0xed, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0xf5} }, +{ 0x88ee, 16, {0xf5, 0x83, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x11, 0xae, 0x04, 0xaf, 0x05, 0xef, 0x24, 0x04, 0xef} }, +{ 0x88fe, 11, {0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0xfe} }, +{ 0x8909, 1, {0x89} }, +{ 0x890a, 16, {0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0xf8, 0xf5, 0x82, 0xe4, 0x34, 0x82} }, +{ 0x891a, 16, {0xad, 0x82, 0xfc, 0x8f, 0x82, 0xa3, 0xe0, 0x60, 0x0d, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3, 0x83} }, +{ 0x892a, 16, {0xe0, 0x44, 0x40, 0xf0, 0x80, 0x0f, 0xae, 0x04, 0xaf, 0x05, 0x8f, 0x82, 0x8e, 0x83, 0xa3, 0x8e} }, +{ 0x893a, 7, {0xa3, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0xbf} }, +{ 0x8941, 1, {0x89} }, +{ 0x8942, 4, {0x8e, 0x47, 0x8f, 0x8e} }, +{ 0x8946, 16, {0x8f, 0x82, 0x8e, 0x83, 0xa3, 0xe0, 0xf5, 0x4b, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x24, 0xfe, 0xe0} }, +{ 0x8956, 16, {0x16, 0x14, 0x60, 0x1f, 0x14, 0x60, 0x28, 0x24, 0x03, 0x70, 0x2e, 0x7e, 0x7e, 0x7f, 0x80, 0x7e} }, +{ 0x8966, 16, {0x49, 0x7e, 0x75, 0x4a, 0x80, 0x80, 0x22, 0x7e, 0x7e, 0x7f, 0x00, 0x75, 0x49, 0x7e, 0x75, 0x49} }, +{ 0x8976, 16, {0x00, 0x80, 0x16, 0x7e, 0x7d, 0x7f, 0x80, 0x75, 0x49, 0x7d, 0x75, 0x4a, 0x80, 0x80, 0x0a, 0x80} }, +{ 0x8986, 16, {0x7d, 0x7f, 0x00, 0x75, 0x49, 0x7d, 0x75, 0x4a, 0x00, 0xe5, 0x4b, 0x70, 0x20, 0x85, 0x4a, 0x20} }, +{ 0x8996, 16, {0x85, 0x49, 0x83, 0x74, 0xff, 0xf0, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x25, 0xe0, 0xe0} }, +{ 0x89a6, 16, {0xb5, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0x01, 0xf0, 0x80, 0x3a, 0xe5, 0x48, 0x3a} }, +{ 0x89b6, 16, {0x02, 0xff, 0xe4, 0x35, 0x47, 0xfe, 0xe5, 0x4b, 0x60, 0x10, 0x8f, 0x82, 0x8e, 0x83, 0xe0, 0x8e} }, +{ 0x89c6, 16, {0x4a, 0x82, 0x85, 0x49, 0x83, 0xf0, 0x15, 0x4b, 0x80, 0xec, 0x85, 0x48, 0x82, 0x85, 0x47, 0x82} }, +{ 0x89d6, 16, {0xa3, 0xe0, 0xff, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x25, 0xe0, 0x24, 0xb5, 0xf5, 0x24} }, +{ 0x89e6, 9, {0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x7f, 0xef} }, +{ 0x89ef, 1, {0x89} }, +{ 0x89f0, 16, {0xef, 0x24, 0x01, 0xf5, 0x48, 0xe4, 0x3e, 0xf5, 0x47, 0x7c, 0x7b, 0x7d, 0x80, 0x7e, 0x7b, 0x80} }, +{ 0x8a00, 16, {0x80, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x07, 0xf0, 0xef, 0x24, 0x01, 0xff, 0xe4, 0x3e, 0x90, 0xe4} }, +{ 0x8a10, 16, {0x31, 0xf0, 0xa3, 0xef, 0xf0, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xa3} }, +{ 0x8a20, 16, {0xa3, 0xe0, 0x8e, 0x49, 0xf5, 0x4a, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x24, 0x9e, 0xe0} }, +{ 0x8a30, 16, {0x61, 0x24, 0xf9, 0x60, 0x0e, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8a, 0xdd, 0x24, 0x14, 0x60, 0x24} }, +{ 0x8a40, 16, {0x02, 0x8b, 0x30, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xa3} }, +{ 0x8a50, 16, {0xe4, 0x9f, 0xf5, 0x4c, 0x74, 0x01, 0x9e, 0xf5, 0x4b, 0xd3, 0xe5, 0x4c, 0x94, 0x40, 0xe5, 0x94} }, +{ 0x8a60, 16, {0x94, 0x00, 0x40, 0x06, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x40, 0xd3, 0xe5, 0x4a, 0x95, 0x4c, 0x4a} }, +{ 0x8a70, 16, {0x49, 0x95, 0x4b, 0x50, 0x03, 0x02, 0x8b, 0x30, 0xae, 0x4b, 0xaf, 0x4c, 0x85, 0x48, 0x82, 0x85} }, +{ 0x8a80, 16, {0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x49, 0xf5, 0x4a, 0x49} }, +{ 0x8a90, 16, {0x8b, 0x30, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0xe0} }, +{ 0x8aa0, 16, {0x30, 0x9f, 0xf5, 0x4c, 0xe4, 0x9e, 0xf5, 0x4b, 0xd3, 0xe5, 0x4c, 0x94, 0x40, 0xe5, 0x4b, 0x40} }, +{ 0x8ab0, 16, {0x00, 0x40, 0x06, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x40, 0xd3, 0xe5, 0x4a, 0x95, 0x4c, 0xe5, 0x95} }, +{ 0x8ac0, 16, {0x95, 0x4b, 0x40, 0x6c, 0xae, 0x4b, 0xaf, 0x4c, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0x47} }, +{ 0x8ad0, 16, {0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x49, 0xf5, 0x4a, 0x80, 0x53, 0x85, 0x48, 0x53} }, +{ 0x8ae0, 16, {0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0xe4, 0x9f, 0xf5, 0x4c, 0xe4, 0xf5} }, +{ 0x8af0, 16, {0xf5, 0x4b, 0x45, 0x4c, 0x70, 0x07, 0xf5, 0x4b, 0x75, 0x4c, 0x40, 0x80, 0x11, 0xd3, 0xe5, 0x11} }, +{ 0x8b00, 16, {0x94, 0x40, 0xe5, 0x4b, 0x94, 0x00, 0x40, 0x06, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x40, 0xd3, 0x4c} }, +{ 0x8b10, 16, {0x4a, 0x95, 0x4c, 0xe5, 0x49, 0x95, 0x4b, 0x40, 0x17, 0xae, 0x4b, 0xaf, 0x4c, 0x85, 0x48, 0x4c} }, +{ 0x8b20, 16, {0x85, 0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xee, 0xf0, 0xfe, 0xa3, 0xef, 0xf0, 0x8e, 0x49, 0xf5, 0x8e} }, +{ 0x8b30, 16, {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xe0, 0x24, 0x9e, 0x70, 0x03, 0x02, 0x8b, 0xf0, 0x24, 0x8b} }, +{ 0x8b40, 16, {0x60, 0x58, 0x24, 0xf1, 0x70, 0x03, 0x02, 0x8c, 0x40, 0x24, 0x14, 0x60, 0x03, 0x02, 0x8c, 0x03} }, +{ 0x8b50, 16, {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xd3, 0x94, 0xff, 0xd3} }, +{ 0x8b60, 16, {0x94, 0x00, 0x40, 0x03, 0x02, 0x8c, 0x84, 0x90, 0x01, 0x2c, 0xef, 0xf0, 0xe5, 0x4a, 0x15, 0xe5} }, +{ 0x8b70, 16, {0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e, 0x70, 0x03, 0x02, 0x8c, 0x84, 0x90, 0x01, 0x2c, 0x90} }, +{ 0x8b80, 16, {0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0x31, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0xf0} }, +{ 0x8b90, 16, {0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xd2, 0x85, 0x48, 0x82, 0x85, 0x47, 0x82} }, +{ 0x8ba0, 16, {0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x80, 0xee, 0x94, 0x00, 0x50, 0x03, 0x02, 0x50} }, +{ 0x8bb0, 16, {0x84, 0xd3, 0xef, 0x94, 0xff, 0xee, 0x94, 0x00, 0x40, 0x03, 0x02, 0x8c, 0x84, 0x90, 0x01, 0x84} }, +{ 0x8bc0, 16, {0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e, 0x70, 0x03, 0x4e} }, +{ 0x8bd0, 16, {0x8c, 0x84, 0x90, 0x01, 0x2d, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0xff} }, +{ 0x8be0, 16, {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xef} }, +{ 0x8bf0, 16, {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x94, 0x20, 0xc3} }, +{ 0x8c00, 16, {0x94, 0x00, 0x50, 0x03, 0x02, 0x8c, 0x84, 0xd3, 0xef, 0x94, 0x2f, 0xee, 0x94, 0x00, 0x50, 0x94} }, +{ 0x8c10, 16, {0x90, 0x01, 0x2e, 0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x02} }, +{ 0x8c20, 16, {0x60, 0x62, 0x90, 0x01, 0x2e, 0xe0, 0xff, 0x04, 0xf0, 0xa8, 0x07, 0xe6, 0xff, 0x90, 0x01, 0xff} }, +{ 0x8c30, 16, {0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xef, 0xf0, 0x80, 0xef} }, +{ 0x8c40, 16, {0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xe0, 0xff, 0xa3, 0xe0, 0x90, 0x01, 0x2f, 0xcf, 0x01} }, +{ 0x8c50, 16, {0xa3, 0xef, 0xf0, 0xe5, 0x4a, 0x15, 0x4a, 0xae, 0x49, 0x70, 0x02, 0x15, 0x49, 0x4e, 0x60, 0x49} }, +{ 0x8c60, 16, {0x90, 0x01, 0x2f, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0x82} }, +{ 0x8c70, 16, {0xff, 0x90, 0x01, 0x31, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0xf0} }, +{ 0x8c80, 16, {0xef, 0xf0, 0x80, 0xcf, 0x85, 0x48, 0x82, 0x85, 0x47, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xa3, 0xa3} }, +{ 0x8c90, 6, {0x90, 0x7f, 0xc3, 0xf0, 0x7f, 0xc3} }, +{ 0x8c96, 1, {0x8c} }, +{ 0x8c97, 16, {0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01, 0xfd, 0xe4, 0x3e, 0xfc, 0x8f, 0x82, 0x8e, 0x83, 0x82} }, +{ 0x8ca7, 16, {0x0b, 0xf0, 0x90, 0x20, 0x70, 0xe0, 0x54, 0xf0, 0xff, 0xc4, 0x54, 0x0f, 0x8d, 0x82, 0x8c, 0x8d} }, +{ 0x8cb7, 16, {0xf0, 0x90, 0x11, 0xf0, 0xe4, 0x93, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xf0, 0x90, 0x11, 0xf1, 0x90} }, +{ 0x8cc7, 16, {0x93, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0xa3, 0xf0, 0xe4, 0x90, 0x01, 0x33, 0xf0, 0xa3, 0xf0, 0xf0} }, +{ 0x8cd7, 16, {0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xed, 0x24, 0x03, 0xfe, 0xe4, 0x3c, 0xfe} }, +{ 0x8ce7, 16, {0xf0, 0xa3, 0xce, 0xf0, 0x7e, 0x01, 0x7f, 0x33, 0x12, 0x19, 0xc1, 0x90, 0x7f, 0xc3, 0x74, 0x7f} }, +{ 0x8cf7, 3, {0xf0, 0x7f, 0x00} }, +{ 0x8cfa, 1, {0x8c} }, +{ 0x8cfb, 4, {0x8e, 0x40, 0x8f, 0x8e} }, +{ 0x8cff, 16, {0x85, 0x40, 0x43, 0x85, 0x41, 0x44, 0x85, 0x44, 0x82, 0x85, 0x43, 0x83, 0xe0, 0x14, 0xb4, 0xe0} }, +{ 0x8d0f, 16, {0x00, 0x40, 0x03, 0x02, 0x8e, 0x32, 0x90, 0x8d, 0x1c, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x8d, 0x73} }, +{ 0x8d1f, 16, {0x02, 0x8d, 0x5a, 0x02, 0x8d, 0x6b, 0x02, 0x8d, 0x8e, 0x02, 0x8d, 0x9f, 0x02, 0x8d, 0xb0, 0x02} }, +{ 0x8d2f, 16, {0x8d, 0xc0, 0x02, 0x8d, 0xcb, 0x02, 0x8d, 0xdb, 0x02, 0x8d, 0xeb, 0x02, 0x8d, 0xfb, 0x02, 0x8d} }, +{ 0x8d3f, 16, {0x02, 0x02, 0x8e, 0x32, 0x02, 0x8e, 0x12, 0x02, 0x8e, 0x22, 0xe5, 0x44, 0x24, 0x01, 0xff, 0x24} }, +{ 0x8d4f, 16, {0x35, 0x43, 0xfe, 0x12, 0x82, 0xea, 0x8f, 0x42, 0x02, 0x8e, 0x32, 0xe5, 0x44, 0x24, 0x01, 0x44} }, +{ 0x8d5f, 16, {0xe4, 0x35, 0x43, 0xfe, 0x12, 0x83, 0x9f, 0x8f, 0x42, 0x02, 0x8e, 0x32, 0xe5, 0x44, 0x24, 0xe5} }, +{ 0x8d6f, 16, {0xf5, 0x46, 0xe4, 0x35, 0x43, 0xf5, 0x45, 0xe5, 0x46, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x45, 0xe4} }, +{ 0x8d7f, 16, {0x12, 0x84, 0x61, 0xaf, 0x46, 0xae, 0x45, 0x12, 0x84, 0xf4, 0x8f, 0x42, 0x02, 0x8e, 0x32, 0x02} }, +{ 0x8d8f, 16, {0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x88, 0x92, 0x8f, 0x42, 0x02, 0x8e, 0x42} }, +{ 0x8d9f, 16, {0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x88, 0xce, 0x8f, 0x42, 0x02, 0x8f} }, +{ 0x8daf, 16, {0x32, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x89, 0x0a, 0x8f, 0x42, 0x0a} }, +{ 0x8dbf, 16, {0x72, 0xaf, 0x41, 0xae, 0x40, 0x12, 0x89, 0xf0, 0x8f, 0x42, 0x80, 0x67, 0xe5, 0x44, 0x24, 0xe5} }, +{ 0x8dcf, 16, {0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x87, 0x96, 0x8f, 0x42, 0x80, 0x57, 0xe5, 0x44, 0x24, 0xe5} }, +{ 0x8ddf, 16, {0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x84, 0x1d, 0x8f, 0x42, 0x80, 0x47, 0xe5, 0x44, 0x24, 0xe5} }, +{ 0x8def, 16, {0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x88, 0x50, 0x8f, 0x42, 0x80, 0x37, 0x12, 0x8c, 0x97, 0x12} }, +{ 0x8dff, 16, {0x42, 0x80, 0x30, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x11, 0xd8, 0x12} }, +{ 0x8e0f, 16, {0x42, 0x80, 0x20, 0xe5, 0x44, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x43, 0xfe, 0x12, 0x89, 0x42, 0x12} }, +{ 0x8e1f, 16, {0x42, 0x80, 0x10, 0xaf, 0x41, 0xae, 0x40, 0x7c, 0x02, 0x7d, 0x4d, 0x7b, 0x40, 0x12, 0x1b, 0x40} }, +{ 0x8e2f, 5, {0xe4, 0xf5, 0x42, 0xaf, 0xf5} }, +{ 0x8e34, 1, {0x8e} }, +{ 0x8e35, 8, {0x8f, 0x61, 0x8e, 0x60, 0x8d, 0x5f, 0x8c, 0x8d} }, +{ 0x8e3d, 16, {0x75, 0x68, 0x01, 0x75, 0x69, 0x3b, 0xe4, 0xf5, 0x67, 0xaf, 0x63, 0x15, 0x63, 0xef, 0x70, 0x63} }, +{ 0x8e4d, 16, {0x02, 0x8e, 0xd3, 0xaf, 0x62, 0xe4, 0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xaf, 0xab} }, +{ 0x8e5d, 16, {0xae, 0x60, 0xad, 0x5f, 0xac, 0x5e, 0x12, 0x9b, 0x2e, 0xaf, 0x03, 0x8f, 0x66, 0xaf, 0x61, 0x66} }, +{ 0x8e6d, 16, {0x60, 0xad, 0x5f, 0xac, 0x5e, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0xaf, 0x62, 0x07} }, +{ 0x8e7d, 16, {0xfc, 0xfd, 0xfe, 0xf8, 0xf9, 0xfa, 0xab, 0x07, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0xd0} }, +{ 0x8e8d, 16, {0x12, 0x9b, 0x2e, 0x8f, 0x61, 0x8e, 0x60, 0x8d, 0x5f, 0x8c, 0x5e, 0xe5, 0x66, 0x24, 0x30, 0x66} }, +{ 0x8e9d, 16, {0x66, 0xd3, 0x94, 0x39, 0x40, 0x06, 0x74, 0x07, 0x25, 0x66, 0xf5, 0x66, 0x05, 0x69, 0xe5, 0x05} }, +{ 0x8ead, 16, {0xae, 0x68, 0x70, 0x02, 0x05, 0x68, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe4, 0xf0, 0x05, 0x69, 0xf0} }, +{ 0x8ebd, 16, {0x69, 0xae, 0x68, 0x70, 0x02, 0x05, 0x68, 0x14, 0xf5, 0x82, 0x8e, 0x83, 0xe5, 0x66, 0xf0, 0xe5} }, +{ 0x8ecd, 16, {0x67, 0x05, 0x67, 0x02, 0x8e, 0x46, 0xe5, 0x69, 0x15, 0x69, 0x70, 0x02, 0x15, 0x68, 0xaf, 0x15} }, +{ 0x8edd, 16, {0x15, 0x67, 0xef, 0x60, 0x23, 0xe5, 0x69, 0x15, 0x69, 0xae, 0x68, 0x70, 0x02, 0x15, 0x68, 0x02} }, +{ 0x8eed, 16, {0x82, 0x8e, 0x83, 0xe0, 0xff, 0x05, 0x65, 0xe5, 0x65, 0xac, 0x64, 0x70, 0x02, 0x05, 0x64, 0x02} }, +{ 0x8efd, 8, {0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x80, 0xef} }, +{ 0x8f05, 1, {0x8f} }, +{ 0x8f06, 16, {0xe4, 0x90, 0x01, 0x67, 0xf0, 0x7e, 0x01, 0x7f, 0x68, 0x90, 0x01, 0x5c, 0xee, 0xf0, 0xa3, 0xee} }, +{ 0x8f16, 10, {0xf0, 0x90, 0x01, 0x60, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xa3} }, +{ 0x8f20, 16, {0xaa, 0x07, 0xa9, 0x05, 0x90, 0x01, 0x67, 0xe0, 0xc3, 0x94, 0x40, 0x50, 0x61, 0xac, 0x02, 0x61} }, +{ 0x8f30, 16, {0x01, 0x7e, 0x00, 0xa8, 0x04, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xce} }, +{ 0x8f40, 16, {0xe4, 0xef, 0x55, 0x30, 0x60, 0x45, 0xea, 0x04, 0xff, 0x90, 0x01, 0x60, 0xe0, 0xfc, 0xa3, 0xe0} }, +{ 0x8f50, 16, {0xfd, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0xa3, 0xe9, 0xf0, 0x8d, 0x82, 0x8c, 0x83, 0xa3, 0x8c} }, +{ 0x8f60, 16, {0xeb, 0xf0, 0x90, 0x01, 0x60, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9a, 0x8e, 0xfc, 0xd3, 0xe5, 0xfc} }, +{ 0x8f70, 16, {0x94, 0x25, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0x60, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0xf0} }, +{ 0x8f80, 16, {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0x67, 0xe0, 0x04, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x01} }, +{ 0x8f90, 1, {0x8f} }, +{ 0x8f91, 16, {0x90, 0x01, 0x67, 0xe0, 0xd3, 0x94, 0x00, 0x40, 0x55, 0x90, 0x01, 0x5c, 0xe0, 0xfc, 0xa3, 0xe0} }, +{ 0x8fa1, 16, {0xaa, 0x04, 0xf9, 0x7b, 0x01, 0xc0, 0x03, 0xc0, 0x02, 0xc0, 0x01, 0xaa, 0x06, 0xa9, 0x07, 0x06} }, +{ 0x8fb1, 16, {0x01, 0xac, 0x02, 0xad, 0x03, 0xd0, 0x01, 0xd0, 0x02, 0xd0, 0x03, 0x7e, 0x00, 0x7f, 0x03, 0x00} }, +{ 0x8fc1, 16, {0x9a, 0x1f, 0x90, 0x01, 0x5c, 0xe4, 0x75, 0xf0, 0x03, 0x12, 0x9a, 0x8e, 0xfc, 0xd3, 0xe5, 0xfc} }, +{ 0x8fd1, 16, {0x94, 0x25, 0xec, 0x94, 0x02, 0x40, 0x0a, 0x90, 0x01, 0x5c, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0xf0} }, +{ 0x8fe1, 16, {0xf0, 0xc2, 0xaf, 0x90, 0x01, 0x67, 0xe0, 0x14, 0xf0, 0xd2, 0xaf, 0x7f, 0x01, 0x22, 0x7f, 0x01} }, +{ 0x8ff1, 1, {0x8f} }, +{ 0x8ff2, 16, {0x90, 0x7f, 0xc2, 0xe0, 0x20, 0xe1, 0x5e, 0x7e, 0x7b, 0x7f, 0x80, 0x75, 0x63, 0x7b, 0x75, 0x63} }, +{ 0x9002, 16, {0x80, 0xe5, 0x64, 0x24, 0x01, 0xff, 0xe4, 0x35, 0x63, 0xa9, 0x07, 0x7b, 0x01, 0x8b, 0x65, 0x01} }, +{ 0x9012, 16, {0x66, 0x89, 0x67, 0xfe, 0x12, 0x8f, 0x91, 0xef, 0x60, 0x3b, 0xab, 0x65, 0xaa, 0x66, 0xa9, 0xaa} }, +{ 0x9022, 16, {0x12, 0x9a, 0x48, 0x14, 0xff, 0x90, 0x00, 0x01, 0x12, 0x9a, 0x61, 0xb4, 0x02, 0x16, 0xc2, 0x02} }, +{ 0x9032, 16, {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x01, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0xf5} }, +{ 0x9042, 16, {0x04, 0xf0, 0xd2, 0xaf, 0x85, 0x64, 0x82, 0x85, 0x63, 0x83, 0x74, 0x0d, 0xf0, 0x90, 0x7f, 0xf0} }, +{ 0x9052, 5, {0x74, 0x04, 0xf0, 0xd2, 0x04} }, +{ 0x9057, 1, {0x90} }, +{ 0x9058, 16, {0x12, 0x8f, 0xf2, 0xe4, 0xf5, 0x5e, 0x74, 0x36, 0x25, 0x5e, 0xf8, 0xe6, 0x54, 0xf0, 0xf5, 0x54} }, +{ 0x9068, 16, {0x74, 0x63, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0xe0, 0x65, 0x5f, 0xff, 0x65} }, +{ 0x9078, 16, {0x54, 0x0f, 0xf5, 0x60, 0x60, 0x22, 0x74, 0x63, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xe4} }, +{ 0x9088, 16, {0x83, 0xe5, 0x5f, 0xf0, 0xaf, 0x5e, 0x7d, 0x01, 0xe5, 0x5f, 0x45, 0x60, 0xfb, 0x12, 0x8f, 0xfb} }, +{ 0x9098, 16, {0xef, 0x70, 0x05, 0x12, 0x8f, 0xf2, 0x80, 0xec, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0xc3} }, +{ 0x90a8, 16, {0xb5, 0x12, 0x8f, 0xf2, 0xe5, 0x3a, 0x60, 0x48, 0xe4, 0xf5, 0x5e, 0xaf, 0x5e, 0x74, 0x01, 0x5e} }, +{ 0x90b8, 16, {0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x5f, 0x55, 0x3a, 0x60, 0x29, 0xe5, 0x60} }, +{ 0x90c8, 16, {0x75, 0xf0, 0x08, 0xa4, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xf5, 0x83, 0xe0, 0x30, 0x83} }, +{ 0x90d8, 16, {0x16, 0xaf, 0x5e, 0x7d, 0x04, 0x7b, 0x80, 0x12, 0x8f, 0x20, 0xef, 0x70, 0x05, 0x12, 0x8f, 0x05} }, +{ 0x90e8, 16, {0x80, 0xef, 0xe5, 0x5f, 0xf4, 0x52, 0x3a, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40, 0x94} }, +{ 0x90f8, 16, {0x90, 0x02, 0x9e, 0xe0, 0x60, 0x03, 0x02, 0x91, 0xc5, 0x74, 0x19, 0xf0, 0x7f, 0x02, 0x12, 0x7f} }, +{ 0x9108, 16, {0x11, 0x8e, 0x61, 0x8f, 0x62, 0xc3, 0xe5, 0x61, 0x64, 0x80, 0x94, 0x80, 0x40, 0xee, 0x90, 0x40} }, +{ 0x9118, 16, {0x5b, 0xe0, 0x65, 0x62, 0xf0, 0x60, 0x37, 0xe4, 0xf5, 0x5e, 0xaf, 0x5e, 0x74, 0x01, 0xa8, 0x74} }, +{ 0x9128, 16, {0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x5f, 0x90, 0x01, 0x5b, 0xe0, 0x55, 0x5f, 0xe0} }, +{ 0x9138, 16, {0x14, 0xaf, 0x5e, 0x7d, 0x08, 0xe5, 0x5f, 0x55, 0x62, 0xfb, 0x12, 0x8f, 0x20, 0xef, 0x70, 0x20} }, +{ 0x9148, 16, {0x12, 0x8f, 0xf2, 0x80, 0xec, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40, 0xcc, 0x90, 0x40} }, +{ 0x9158, 16, {0x5b, 0xe5, 0x62, 0xf0, 0xe4, 0xf5, 0x5e, 0xc2, 0xaf, 0x74, 0x32, 0x25, 0x5e, 0xf8, 0xe6, 0x5e} }, +{ 0x9168, 16, {0x5f, 0xe4, 0xf6, 0xd2, 0xaf, 0x53, 0x5f, 0x1e, 0xe5, 0x5f, 0x60, 0x11, 0xaf, 0x5e, 0x7d, 0xaf} }, +{ 0x9178, 16, {0xab, 0x5f, 0x12, 0x8f, 0x20, 0xef, 0x70, 0x05, 0x12, 0x8f, 0xf2, 0x80, 0xef, 0x74, 0x2c, 0xef} }, +{ 0x9188, 16, {0x5e, 0xf8, 0xe6, 0xf5, 0x5f, 0x74, 0x9a, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x34} }, +{ 0x9198, 16, {0xe0, 0x65, 0x5f, 0x60, 0x11, 0xaf, 0x5e, 0x7d, 0x04, 0xab, 0x5f, 0x12, 0x8f, 0x20, 0xef, 0x8f} }, +{ 0x91a8, 16, {0x05, 0x12, 0x8f, 0xf2, 0x80, 0xef, 0x74, 0x9a, 0x25, 0x5e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xe4} }, +{ 0x91b8, 16, {0x83, 0xe5, 0x5f, 0xf0, 0x05, 0x5e, 0xe5, 0x5e, 0xc3, 0x94, 0x04, 0x40, 0x9a, 0x12, 0x8f, 0x9a} }, +{ 0x91c8, 1, {0x91} }, +{ 0x91c9, 12, {0x78, 0x7f, 0xe4, 0xf6, 0xd8, 0xfd, 0x75, 0x81, 0x6e, 0x02, 0x92, 0x6e} }, +{ 0x91d5, 16, {0x02, 0x05, 0x28, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf6} }, +{ 0x91e5, 16, {0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x0c} }, +{ 0x91f5, 16, {0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0x01} }, +{ 0x9205, 16, {0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x92, 0x55, 0xe4, 0x92} }, +{ 0x9215, 16, {0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x1f} }, +{ 0x9225, 16, {0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xb8} }, +{ 0x9235, 16, {0xfa, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca} }, +{ 0x9245, 16, {0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xde} }, +{ 0x9255, 16, {0x60, 0x24, 0x02, 0x28, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x81, 0x82, 0x84, 0x81} }, +{ 0x9265, 16, {0x90, 0xa0, 0xc0, 0xc1, 0xc2, 0xc4, 0xc8, 0xd0, 0xe0, 0xe1, 0xe2, 0xe4, 0xe8, 0xf0, 0xf1, 0xe8} }, +{ 0x9275, 8, {0xf4, 0xf8, 0xf9, 0xfa, 0xfc, 0xfd, 0xfe, 0xfc} }, +{ 0x927d, 1, {0x92} }, +{ 0x927e, 11, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0xd0} }, +{ 0x9289, 16, {0x90, 0x20, 0x60, 0xe0, 0x54, 0x0f, 0xfe, 0x30, 0xe0, 0x05, 0x90, 0x20, 0x02, 0xe0, 0xff, 0x02} }, +{ 0x9299, 16, {0x30, 0xe1, 0x05, 0x90, 0x20, 0x0a, 0xe0, 0xff, 0xee, 0x30, 0xe2, 0x05, 0x90, 0x20, 0x12, 0x90} }, +{ 0x92a9, 16, {0xff, 0xee, 0x30, 0xe3, 0x05, 0x90, 0x20, 0x1a, 0xe0, 0xff, 0x90, 0x01, 0x62, 0xe0, 0xb5, 0x62} }, +{ 0x92b9, 10, {0x04, 0xe4, 0xf0, 0x80, 0x05, 0x90, 0x01, 0x62, 0xee, 0x01} }, +{ 0x92c3, 9, {0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x92cc, 2, {0xa9, 0xcc} }, +{ 0x92ce, 16, {0xef, 0x75, 0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xab, 0x82, 0xfa, 0xab} }, +{ 0x92de, 16, {0x6c, 0x45, 0x6d, 0xf5, 0x6e, 0xe9, 0x60, 0x14, 0x8a, 0x83, 0xe5, 0x82, 0x24, 0x04, 0xf5, 0x24} }, +{ 0x92ee, 16, {0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x4d, 0xf0, 0xe4, 0xfe, 0x80, 0x13, 0xeb, 0x24, 0x04, 0xeb} }, +{ 0x92fe, 16, {0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0xff, 0xed, 0xf4, 0xfc, 0xef, 0x5c, 0xf0, 0xae, 0x6e, 0xf0} }, +{ 0x930e, 16, {0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3a, 0xf5, 0x83, 0xe0, 0x55, 0x6e, 0xfc, 0xb5, 0x06, 0x03, 0xb5} }, +{ 0x931e, 16, {0x05, 0x22, 0xe5, 0x6c, 0x5c, 0xfe, 0xe5, 0x6d, 0x5c, 0xfd, 0xe9, 0x60, 0x16, 0xee, 0x70, 0x16} }, +{ 0x932e, 16, {0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0xae, 0x07, 0xed, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x01} }, +{ 0x933e, 16, {0x00, 0xad, 0x07, 0xee, 0x60, 0x03, 0xaf, 0x6c, 0x22, 0xed, 0x60, 0x03, 0xaf, 0x6d, 0x22, 0xaf} }, +{ 0x934e, 1, {0x93} }, +{ 0x934f, 1, {0x93} }, +{ 0x9350, 16, {0x7e, 0x7b, 0x7f, 0x80, 0xef, 0x24, 0x01, 0xf5, 0x66, 0xe4, 0x3e, 0xf5, 0x65, 0x75, 0x63, 0x65} }, +{ 0x9360, 16, {0x75, 0x64, 0x4e, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x0f, 0xf0, 0x85, 0x64, 0x82, 0x85, 0x63, 0x82} }, +{ 0x9370, 16, {0xe0, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xf0, 0x85, 0x64, 0x82, 0x85, 0x63, 0x83, 0xa3, 0x63} }, +{ 0x9380, 16, {0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xf0, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0x65} }, +{ 0x9390, 16, {0x74, 0xff, 0xf0, 0xe5, 0x66, 0x24, 0x03, 0xf5, 0x68, 0xe4, 0x35, 0x65, 0xf5, 0x67, 0x85, 0xf5} }, +{ 0x93a0, 16, {0x82, 0x85, 0x63, 0x83, 0xe0, 0x14, 0xb4, 0x0b, 0x00, 0x40, 0x03, 0x02, 0x98, 0x43, 0x90, 0x98} }, +{ 0x93b0, 16, {0xb5, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x93, 0xd6, 0x02, 0x94, 0x7c, 0x02, 0x95, 0xba, 0x02, 0x95} }, +{ 0x93c0, 16, {0xda, 0x02, 0x95, 0xda, 0x02, 0x96, 0x7f, 0x02, 0x96, 0xbd, 0x02, 0x96, 0xe4, 0x02, 0x97, 0xe4} }, +{ 0x93d0, 16, {0x02, 0x97, 0xda, 0x02, 0x98, 0x0b, 0xe4, 0xf5, 0x5e, 0xe5, 0x5e, 0x75, 0xf0, 0x08, 0xa4, 0xf0} }, +{ 0x93e0, 16, {0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x61, 0x8f, 0x62, 0xe4, 0xff, 0xe4, 0xe4} }, +{ 0x93f0, 16, {0xef, 0x60, 0x10, 0x74, 0x28, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf4, 0x83} }, +{ 0x9400, 16, {0x5f, 0x80, 0x0d, 0x74, 0x28, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0xf5, 0x83} }, +{ 0x9410, 16, {0xe5, 0x62, 0x24, 0x07, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x83, 0xe5, 0x5f, 0xf0, 0xe0, 0x5f} }, +{ 0x9420, 16, {0x60, 0x65, 0x5f, 0x60, 0x3d, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xa3} }, +{ 0x9430, 16, {0x5e, 0x04, 0xfd, 0x05, 0x68, 0xe5, 0x68, 0xaa, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x67} }, +{ 0x9440, 16, {0x8a, 0x83, 0xed, 0xf0, 0x05, 0x68, 0xe5, 0x68, 0xac, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0x05} }, +{ 0x9450, 16, {0x82, 0x8c, 0x83, 0xe5, 0x5f, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0xe5, 0x60, 0xf0, 0xe5} }, +{ 0x9460, 16, {0x98, 0x4e, 0x0e, 0xee, 0x64, 0x24, 0x70, 0x88, 0x0f, 0xef, 0x64, 0x02, 0x70, 0x80, 0x05, 0x70} }, +{ 0x9470, 16, {0xe5, 0x5e, 0x64, 0x04, 0x60, 0x03, 0x02, 0x93, 0xd9, 0x02, 0x98, 0x4e, 0x7e, 0x20, 0x7f, 0x7e} }, +{ 0x9480, 16, {0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xe4, 0xf5, 0x5e, 0xaf, 0x62, 0xae, 0x61, 0xe4, 0xfd, 0x61} }, +{ 0x9490, 16, {0x81, 0xe0, 0x74, 0x08, 0x25, 0x62, 0xf5, 0x62, 0xe4, 0x35, 0x61, 0xf5, 0x61, 0x05, 0x5e, 0x61} }, +{ 0x94a0, 16, {0x5e, 0xd3, 0x94, 0x03, 0x40, 0xe3, 0x90, 0x00, 0x04, 0x74, 0x92, 0xf0, 0xa3, 0x74, 0x7e, 0xa3} }, +{ 0x94b0, 16, {0xe4, 0xf5, 0x60, 0x7e, 0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xf5, 0x5e, 0x00} }, +{ 0x94c0, 16, {0x5e, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0xf5, 0x5f, 0x90, 0xf5} }, +{ 0x94d0, 16, {0x62, 0xf0, 0x90, 0x01, 0x5e, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x85, 0x62, 0x82, 0x85, 0x62} }, +{ 0x94e0, 16, {0x83, 0xa3, 0x74, 0x02, 0xf0, 0x90, 0x01, 0x62, 0xe0, 0x65, 0x5f, 0x70, 0x39, 0x90, 0x01, 0x39} }, +{ 0x94f0, 16, {0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xee, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0x83} }, +{ 0x9500, 16, {0xe5, 0x5e, 0x04, 0xff, 0x05, 0x68, 0xe5, 0x68, 0xac, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0x05} }, +{ 0x9510, 16, {0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0x74, 0xff, 0xf0, 0xe4, 0xff} }, +{ 0x9520, 16, {0x01, 0x62, 0xf0, 0x75, 0x60, 0xff, 0x90, 0x01, 0x62, 0xe0, 0xff, 0x60, 0x3c, 0x85, 0x66, 0x3c} }, +{ 0x9530, 16, {0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x5e, 0x04, 0xfe, 0x05, 0x68, 0xe5, 0x68, 0x68} }, +{ 0x9540, 16, {0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xee, 0xf0, 0x05, 0x68, 0xe5, 0x05} }, +{ 0x9550, 16, {0xac, 0x67, 0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x68, 0xf0} }, +{ 0x9560, 16, {0x85, 0x67, 0x83, 0xe5, 0x5f, 0xf0, 0x75, 0x60, 0xff, 0xe5, 0x60, 0x70, 0x16, 0x74, 0x08, 0x16} }, +{ 0x9570, 16, {0x62, 0xf5, 0x62, 0xe4, 0x35, 0x61, 0xf5, 0x61, 0x05, 0x5e, 0xe5, 0x5e, 0x64, 0x04, 0x60, 0x64} }, +{ 0x9580, 16, {0x02, 0x94, 0xbf, 0x7e, 0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xe4, 0xf5, 0x00} }, +{ 0x9590, 16, {0xaf, 0x62, 0xae, 0x61, 0x7d, 0x01, 0x12, 0x81, 0xe0, 0x74, 0x08, 0x25, 0x62, 0xf5, 0x62, 0x62} }, +{ 0x95a0, 16, {0x35, 0x61, 0xf5, 0x61, 0x05, 0x5e, 0xe5, 0x5e, 0xd3, 0x94, 0x03, 0x40, 0xe3, 0x90, 0x00, 0xe3} }, +{ 0x95b0, 16, {0x74, 0x13, 0xf0, 0xa3, 0x74, 0x12, 0xf0, 0x02, 0x98, 0x4e, 0x85, 0x64, 0x82, 0x85, 0x63, 0x82} }, +{ 0x95c0, 16, {0xa3, 0xe0, 0x14, 0xff, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 0x33} }, +{ 0x95d0, 16, {0x02, 0x95, 0xf0, 0x90, 0x01, 0x62, 0xf0, 0x02, 0x98, 0x4e, 0x90, 0x01, 0x5e, 0x74, 0x03, 0x5e} }, +{ 0x95e0, 16, {0xa3, 0x74, 0xe8, 0xf0, 0xe4, 0xf5, 0x60, 0x90, 0x02, 0x95, 0xe0, 0xff, 0x90, 0x01, 0x62, 0x90} }, +{ 0x95f0, 16, {0xb5, 0x07, 0x1e, 0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xea, 0x85, 0x66, 0xea} }, +{ 0x9600, 16, {0x85, 0x65, 0x83, 0xa3, 0xa3, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0x74, 0xff, 0xf0, 0x74} }, +{ 0x9610, 16, {0x60, 0xe5, 0x60, 0x60, 0x03, 0x02, 0x98, 0x4e, 0x90, 0x01, 0x5e, 0xf0, 0xa3, 0x74, 0x96, 0xa3} }, +{ 0x9620, 16, {0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x70, 0xf6, 0x7f, 0x02, 0x12, 0x81, 0x11, 0x12} }, +{ 0x9630, 16, {0xee, 0x64, 0x80, 0x94, 0x80, 0x40, 0xf3, 0xef, 0x54, 0x0f, 0xf5, 0x60, 0x90, 0x02, 0x95, 0x90} }, +{ 0x9640, 16, {0x55, 0x60, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x00, 0x8f, 0x5f, 0x85, 0x64, 0x82, 0x85} }, +{ 0x9650, 16, {0x63, 0x83, 0xe0, 0xb4, 0x05, 0x0c, 0xe5, 0x5f, 0x70, 0x04, 0x7f, 0x01, 0x80, 0x02, 0x7f, 0x80} }, +{ 0x9660, 16, {0x8f, 0x5f, 0xe5, 0x5f, 0x70, 0x03, 0x02, 0x98, 0x4e, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0x85} }, +{ 0x9670, 16, {0xa3, 0xe4, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x67, 0x83, 0xe5, 0x60, 0xf0, 0x02, 0x98, 0x4e, 0x02} }, +{ 0x9680, 16, {0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xaf, 0x62, 0xae, 0x61, 0xe4, 0xfd, 0x61} }, +{ 0x9690, 16, {0x81, 0xe0, 0x85, 0x62, 0x82, 0x85, 0x61, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x44, 0x80, 0xf0, 0x44} }, +{ 0x96a0, 16, {0x62, 0x82, 0x85, 0x61, 0x83, 0x74, 0x01, 0xf0, 0xa3, 0xe4, 0xf0, 0x85, 0x62, 0x82, 0x85, 0x62} }, +{ 0x96b0, 16, {0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0x54, 0x7f, 0xf0, 0xd2, 0x04, 0x02, 0x98, 0x4e, 0xc2, 0x04, 0x4e} }, +{ 0x96c0, 16, {0x20, 0x7f, 0x00, 0x75, 0x61, 0x20, 0x75, 0x62, 0x00, 0xe5, 0x62, 0x24, 0x05, 0xf5, 0x82, 0x05} }, +{ 0x96d0, 16, {0x35, 0x61, 0xf5, 0x83, 0xe0, 0x30, 0xe6, 0xf1, 0xaf, 0x62, 0xae, 0x61, 0x7d, 0x01, 0x12, 0x7d} }, +{ 0x96e0, 16, {0xe0, 0x02, 0x98, 0x4e, 0xe4, 0xf5, 0x60, 0xf5, 0x5e, 0xe5, 0x5e, 0x75, 0xf0, 0x08, 0xa4, 0xf0} }, +{ 0x96f0, 16, {0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xf5, 0x61, 0x8f, 0x62, 0xfe, 0xe4, 0xfd, 0xfe} }, +{ 0x9700, 16, {0x81, 0xe0, 0xe5, 0x62, 0x24, 0x04, 0xf5, 0x82, 0xe4, 0x35, 0x61, 0xf5, 0x83, 0xe0, 0x54, 0x83} }, +{ 0x9710, 16, {0xf0, 0xaf, 0x5e, 0x7d, 0x01, 0x7b, 0x01, 0x75, 0x6c, 0x80, 0x75, 0x6d, 0x40, 0x12, 0x92, 0x40} }, +{ 0x9720, 16, {0x8f, 0x60, 0xe5, 0x60, 0x70, 0x11, 0xaf, 0x5e, 0x7d, 0x02, 0x7b, 0x01, 0x75, 0x6c, 0x10, 0x75} }, +{ 0x9730, 16, {0x6d, 0x20, 0x12, 0x92, 0xcc, 0x8f, 0x60, 0xe5, 0x60, 0x70, 0x10, 0xaf, 0x5e, 0x7d, 0x01, 0x5e} }, +{ 0x9740, 16, {0x75, 0x6c, 0x80, 0x75, 0x6d, 0x40, 0x12, 0x92, 0xcc, 0x8f, 0x60, 0xe5, 0x60, 0x70, 0x10, 0x60} }, +{ 0x9750, 16, {0x5e, 0x7d, 0x02, 0xfb, 0x75, 0x6c, 0x10, 0x75, 0x6d, 0x20, 0x12, 0x92, 0xcc, 0x8f, 0x60, 0xcc} }, +{ 0x9760, 16, {0x62, 0xae, 0x61, 0x7d, 0x01, 0x12, 0x81, 0xe0, 0xe5, 0x60, 0x60, 0x2b, 0x85, 0x66, 0x82, 0x85} }, +{ 0x9770, 16, {0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0xe5, 0x5e, 0x04, 0xff, 0x05, 0x68, 0xe5, 0x68, 0xac, 0xe5} }, +{ 0x9780, 16, {0x70, 0x02, 0x05, 0x67, 0x14, 0xf5, 0x82, 0x8c, 0x83, 0xef, 0xf0, 0x85, 0x68, 0x82, 0x85, 0x68} }, +{ 0x9790, 16, {0x83, 0xe5, 0x60, 0xf0, 0x02, 0x98, 0x4e, 0x05, 0x5e, 0xe5, 0x5e, 0xd3, 0x94, 0x03, 0x50, 0x94} }, +{ 0x97a0, 16, {0x02, 0x96, 0xe9, 0x02, 0x98, 0x4e, 0xe4, 0x90, 0x02, 0xd3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xf0} }, +{ 0x97b0, 16, {0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0x74, 0x98, 0xf0, 0xa3, 0x74, 0x6d, 0xf0, 0x74} }, +{ 0x97c0, 16, {0x02, 0x7f, 0xd3, 0x12, 0x80, 0x00, 0xef, 0x64, 0x08, 0x70, 0x03, 0x02, 0x98, 0x4e, 0x85, 0x98} }, +{ 0x97d0, 16, {0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0x80, 0x74, 0xe4, 0x90, 0x02, 0xd3, 0xf0, 0x02} }, +{ 0x97e0, 16, {0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xa3, 0xe5, 0x67, 0xf0, 0xe5} }, +{ 0x97f0, 16, {0xe5, 0x68, 0xf0, 0x7e, 0x02, 0x7f, 0xd3, 0x12, 0x19, 0xc1, 0xef, 0x64, 0x08, 0x60, 0x4f, 0x08} }, +{ 0x9800, 16, {0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0xe4, 0xf0, 0x80, 0x43, 0xe4, 0x90, 0x02, 0xd3, 0x90} }, +{ 0x9810, 16, {0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x10, 0xf0, 0xe5, 0x64, 0x24, 0xe5} }, +{ 0x9820, 16, {0x90, 0x02, 0xda, 0xf0, 0xe4, 0x35, 0x63, 0x90, 0x02, 0xd9, 0xf0, 0x7e, 0x02, 0x7f, 0xd3, 0x02} }, +{ 0x9830, 16, {0x80, 0x00, 0xef, 0x64, 0x08, 0x60, 0x17, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0x83} }, +{ 0x9840, 16, {0xf0, 0x80, 0x0b, 0x85, 0x66, 0x82, 0x85, 0x65, 0x83, 0xa3, 0xa3, 0x74, 0x01, 0xf0, 0x90, 0x01} }, +{ 0x9850, 16, {0x5e, 0xe4, 0xf0, 0xa3, 0x74, 0x0a, 0xf0, 0x90, 0x01, 0x5e, 0xe0, 0x70, 0x02, 0xa3, 0xe0, 0x02} }, +{ 0x9860, 12, {0xf6, 0x90, 0x7f, 0xc3, 0x74, 0x24, 0xf0, 0xe4, 0x90, 0x02, 0x4d, 0x90} }, +{ 0x986c, 1, {0x98} }, +{ 0x986d, 16, {0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf3} }, +{ 0x987d, 16, {0xe4, 0xfd, 0x74, 0x01, 0x7e, 0x00, 0xa8, 0x05, 0x08, 0x80, 0x05, 0xc3, 0x33, 0xce, 0x33, 0x33} }, +{ 0x988d, 16, {0xd8, 0xf9, 0xff, 0xe5, 0x3b, 0xfb, 0xe4, 0xef, 0x5b, 0x70, 0x03, 0x02, 0x99, 0x45, 0xed, 0x99} }, +{ 0x989d, 16, {0xf0, 0x08, 0xa4, 0x24, 0x00, 0xf5, 0x82, 0xe4, 0x34, 0x20, 0xaf, 0x82, 0xfe, 0xf5, 0x83, 0xfe} }, +{ 0x98ad, 16, {0x82, 0x24, 0x05, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0x54, 0x60, 0x64, 0x60, 0x60} }, +{ 0x98bd, 16, {0x03, 0x02, 0x99, 0x45, 0xef, 0x24, 0x06, 0xf5, 0x82, 0xe4, 0x3e, 0xf5, 0x83, 0xe0, 0xfc, 0x83} }, +{ 0x98cd, 16, {0x36, 0x2d, 0xf8, 0xec, 0xf6, 0x30, 0xe5, 0x70, 0x74, 0x96, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0x82} }, +{ 0x98dd, 16, {0xf5, 0x83, 0xe0, 0x60, 0x63, 0xed, 0x25, 0xe0, 0x24, 0x8d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xe4} }, +{ 0x98ed, 16, {0x83, 0xe4, 0x75, 0xf0, 0x01, 0x12, 0x9a, 0xa4, 0x85, 0xf0, 0x82, 0xf5, 0x83, 0xe0, 0x8f, 0x83} }, +{ 0x98fd, 16, {0x8e, 0x83, 0xf0, 0x74, 0x96, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0x14, 0x83} }, +{ 0x990d, 16, {0x70, 0x36, 0xed, 0x25, 0xe0, 0x24, 0xc7, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe4, 0xf5} }, +{ 0x991d, 16, {0xed, 0x25, 0xe0, 0xff, 0xc3, 0x74, 0x0c, 0x9f, 0x75, 0xf0, 0x40, 0xa4, 0x24, 0x40, 0xf5, 0x24} }, +{ 0x992d, 16, {0xe5, 0xf0, 0x34, 0x7b, 0xaf, 0x82, 0xfe, 0xed, 0x25, 0xe0, 0x24, 0x8d, 0xf5, 0x82, 0xe4, 0xf5} }, +{ 0x993d, 16, {0x02, 0xf5, 0x83, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x0d, 0xed, 0x64, 0x04, 0x60, 0x03, 0x02, 0x60} }, +{ 0x994d, 1, {0x99} }, +{ 0x994e, 1, {0x99} }, +{ 0x994f, 16, {0xe7, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x46, 0xe7, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0xdf} }, +{ 0x995f, 16, {0x88, 0x82, 0x8c, 0x83, 0xe7, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x32, 0xe3, 0x09, 0xf6, 0xe3} }, +{ 0x996f, 16, {0xdf, 0xfa, 0x80, 0x78, 0xe3, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x70, 0x88, 0x82, 0x8c, 0x88} }, +{ 0x997f, 16, {0xe3, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x64, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf6, 0xe0} }, +{ 0x998f, 16, {0xdf, 0xfa, 0x80, 0x58, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0xdf} }, +{ 0x999f, 16, {0x80, 0xd2, 0x80, 0xfa, 0x80, 0xc6, 0x80, 0xd4, 0x80, 0x69, 0x80, 0xf2, 0x80, 0x33, 0x80, 0x80} }, +{ 0x99af, 16, {0x80, 0xa6, 0x80, 0xea, 0x80, 0x9a, 0x80, 0xa8, 0x80, 0xda, 0x80, 0xe2, 0x80, 0xca, 0x80, 0x80} }, +{ 0x99bf, 16, {0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0xc8} }, +{ 0x99cf, 16, {0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xe9, 0xde, 0xe7, 0xe9} }, +{ 0x99df, 16, {0x0d, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf6, 0x08, 0xdf, 0xf9, 0xec, 0xfa, 0xa9, 0xec} }, +{ 0x99ef, 16, {0xed, 0xfb, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xc5} }, +{ 0x99ff, 16, {0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xea, 0xcc} }, +{ 0x9a0f, 16, {0xe8, 0x80, 0xdb, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf2, 0x08, 0xdf, 0xf9, 0x80, 0xdf} }, +{ 0x9a1f, 16, {0x88, 0xf0, 0xed, 0x24, 0x02, 0xb4, 0x04, 0x00, 0x50, 0xc2, 0xf5, 0x82, 0xeb, 0x24, 0x02, 0xeb} }, +{ 0x9a2f, 16, {0x04, 0x00, 0x50, 0xb8, 0x23, 0x23, 0x45, 0x82, 0xf5, 0x82, 0xef, 0x4e, 0x60, 0xae, 0xef, 0x60} }, +{ 0x9a3f, 9, {0x01, 0x0e, 0xe5, 0x82, 0x23, 0x90, 0x99, 0x9f, 0x90} }, +{ 0x9a48, 16, {0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x22} }, +{ 0x9a58, 9, {0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x83} }, +{ 0x9a61, 16, {0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x83} }, +{ 0x9a71, 16, {0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x82} }, +{ 0x9a81, 13, {0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x83} }, +{ 0x9a8e, 16, {0xc5, 0xf0, 0xf8, 0xa3, 0xe0, 0x28, 0xf0, 0xc5, 0xf0, 0xf8, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x15} }, +{ 0x9a9e, 6, {0x15, 0x83, 0xe0, 0x38, 0xf0, 0xe0} }, +{ 0x9aa4, 16, {0xa3, 0xf8, 0xe0, 0xc5, 0xf0, 0x25, 0xf0, 0xf0, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x70} }, +{ 0x9ab4, 6, {0xe0, 0xc8, 0x38, 0xf0, 0xe8, 0x38} }, +{ 0x9aba, 16, {0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0x83} }, +{ 0x9aca, 16, {0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xe6} }, +{ 0x9ada, 16, {0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2, 0x22, 0xe5, 0x83, 0x2a, 0xf5, 0x83} }, +{ 0x9aea, 8, {0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0xa3} }, +{ 0x9af2, 16, {0x75, 0xf0, 0x08, 0x75, 0x82, 0x00, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xcd, 0x33, 0xcd, 0xcd} }, +{ 0x9b02, 16, {0x33, 0xcc, 0xc5, 0x82, 0x33, 0xc5, 0x82, 0x9b, 0xed, 0x9a, 0xec, 0x99, 0xe5, 0x82, 0x98, 0xe5} }, +{ 0x9b12, 16, {0x0c, 0xf5, 0x82, 0xee, 0x9b, 0xfe, 0xed, 0x9a, 0xfd, 0xec, 0x99, 0xfc, 0x0f, 0xd5, 0xf0, 0x0f} }, +{ 0x9b22, 16, {0xe4, 0xce, 0xfb, 0xe4, 0xcd, 0xfa, 0xe4, 0xcc, 0xf9, 0xa8, 0x82, 0x22, 0xb8, 0x00, 0xc1, 0xb8} }, +{ 0x9b32, 16, {0x00, 0x59, 0xba, 0x00, 0x2d, 0xec, 0x8b, 0xf0, 0x84, 0xcf, 0xce, 0xcd, 0xfc, 0xe5, 0xf0, 0xfc} }, +{ 0x9b42, 16, {0xf9, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xec} }, +{ 0x9b52, 16, {0x33, 0xfb, 0x10, 0xd7, 0x03, 0x99, 0x40, 0x04, 0xeb, 0x99, 0xfb, 0x0f, 0xd8, 0xe5, 0xe4, 0xd8} }, +{ 0x9b62, 16, {0xfa, 0x22, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfd} }, +{ 0x9b72, 16, {0xc9, 0x33, 0xc9, 0x10, 0xd7, 0x05, 0x9b, 0xe9, 0x9a, 0x40, 0x07, 0xec, 0x9b, 0xfc, 0xe9, 0x9b} }, +{ 0x9b82, 16, {0xf9, 0x0f, 0xd8, 0xe0, 0xe4, 0xc9, 0xfa, 0xe4, 0xcc, 0xfb, 0x22, 0x75, 0xf0, 0x10, 0xef, 0xf0} }, +{ 0x9b92, 16, {0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xcc, 0x33, 0xcc, 0xc8, 0x33, 0xc8, 0x10, 0xd7, 0xc8} }, +{ 0x9ba2, 16, {0x9b, 0xec, 0x9a, 0xe8, 0x99, 0x40, 0x0a, 0xed, 0x9b, 0xfd, 0xec, 0x9a, 0xfc, 0xe8, 0x99, 0xfc} }, +{ 0x9bb2, 14, {0x0f, 0xd5, 0xf0, 0xda, 0xe4, 0xcd, 0xfb, 0xe4, 0xcc, 0xfa, 0xe4, 0xc8, 0xf9, 0xe4} }, +{ 0x9bc0, 16, {0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xe8} }, +{ 0x9bd0, 1, {0x9b} }, +{ 0x9bd1, 16, {0xe8, 0x60, 0x0f, 0xec, 0xc3, 0x13, 0xfc, 0xed, 0x13, 0xfd, 0xee, 0x13, 0xfe, 0xef, 0x13, 0xfe} }, +{ 0x9be1, 3, {0xd8, 0xf1, 0x00} }, +{ 0x9be4, 16, {0x08, 0x08, 0x08, 0xe6, 0xcf, 0x2f, 0xf6, 0x18, 0xe6, 0xce, 0x3e, 0xf6, 0x18, 0xe6, 0xcd, 0x18} }, +{ 0x9bf4, 7, {0xf6, 0x18, 0xe6, 0xcc, 0x3c, 0xf6, 0xcc} }, +{ 0x9bfb, 12, {0xec, 0xf0, 0xa3, 0xed, 0xf0, 0xa3, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xa3} }, +{ 0x9c07, 16, {0xa8, 0x82, 0x85, 0x83, 0xf0, 0xd0, 0x83, 0xd0, 0x82, 0x12, 0x9c, 0x1e, 0x12, 0x9c, 0x1e, 0x12} }, +{ 0x9c17, 16, {0x9c, 0x1e, 0x12, 0x9c, 0x1e, 0xe4, 0x73, 0xe4, 0x93, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0xc5} }, +{ 0x9c27, 16, {0xc8, 0xc5, 0x82, 0xc8, 0xf0, 0xa3, 0xc5, 0x83, 0xc5, 0xf0, 0xc5, 0x83, 0xc8, 0xc5, 0x82, 0xc8} }, +{ 0x9c37, 1, {0x9c} }, +{ 0xffff, 0, {0x00} } +}; + +static const struct whiteheat_hex_record whiteheat_loader[] = { +{ 0x0000, 3, {0x02, 0x09, 0x00} }, +{ 0x0033, 3, {0x02, 0x08, 0x00} }, +{ 0x0043, 3, {0x02, 0x0b, 0x00} }, +{ 0x004b, 3, {0x02, 0x05, 0x00} }, +{ 0x0100, 16, {0x90, 0x7f, 0xa5, 0xe0, 0x54, 0x10, 0xff, 0xc4, 0x54, 0x0f, 0x44, 0x50, 0xf5, 0x0f, 0x13, 0xf5} }, +{ 0x0110, 16, {0x33, 0xf5, 0x11, 0x90, 0x7f, 0xe9, 0xe0, 0x24, 0x5e, 0xb4, 0x07, 0x00, 0x40, 0x03, 0x02, 0x40} }, +{ 0x0120, 16, {0x78, 0x90, 0x01, 0x28, 0xf8, 0x28, 0x28, 0x73, 0x02, 0x01, 0xbc, 0x02, 0x01, 0xbc, 0x02, 0x01} }, +{ 0x0130, 16, {0x91, 0x02, 0x01, 0x3d, 0x02, 0x01, 0x53, 0x02, 0x01, 0x6f, 0x02, 0x01, 0x9a, 0x90, 0x7f, 0x9a} }, +{ 0x0140, 16, {0xe5, 0x11, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xe0} }, +{ 0x0150, 16, {0x02, 0x03, 0x78, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4, 0x54, 0x0f, 0x90, 0x7f, 0x00, 0xf0, 0x7f} }, +{ 0x0160, 16, {0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x03, 0x78, 0x02} }, +{ 0x0170, 16, {0x0a, 0x89, 0x50, 0x07, 0xe4, 0x90, 0x7f, 0x00, 0xf0, 0x80, 0x06, 0x90, 0x7f, 0x00, 0x74, 0x7f} }, +{ 0x0180, 16, {0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x02} }, +{ 0x0190, 16, {0x78, 0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x0f, 0x02, 0x03, 0x78, 0x90, 0x7f, 0x00, 0x74, 0x07, 0x00} }, +{ 0x01a0, 16, {0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x7f, 0xe8, 0xf0} }, +{ 0x01b0, 16, {0x03, 0x12, 0x0d, 0x94, 0xd2, 0x06, 0x12, 0x0c, 0xcc, 0x02, 0x03, 0x78, 0x90, 0x7f, 0xea, 0x90} }, +{ 0x01c0, 16, {0x75, 0x28, 0x00, 0xf5, 0x29, 0xa3, 0xe0, 0xfe, 0xe4, 0xee, 0x42, 0x28, 0x90, 0x7f, 0xee, 0x90} }, +{ 0x01d0, 16, {0x75, 0x2a, 0x00, 0xf5, 0x2b, 0xa3, 0xe0, 0xfe, 0xe4, 0xee, 0x42, 0x2a, 0x90, 0x7f, 0xe8, 0x90} }, +{ 0x01e0, 16, {0x64, 0xc0, 0x60, 0x03, 0x02, 0x02, 0xc9, 0xe5, 0x2b, 0x45, 0x2a, 0x70, 0x03, 0x02, 0x03, 0x03} }, +{ 0x01f0, 16, {0xc3, 0xe5, 0x2b, 0x94, 0x40, 0xe5, 0x2a, 0x94, 0x00, 0x50, 0x08, 0x85, 0x2a, 0x2c, 0x85, 0x2a} }, +{ 0x0200, 16, {0x2d, 0x80, 0x06, 0x75, 0x2c, 0x00, 0x75, 0x2d, 0x40, 0x90, 0x7f, 0xe9, 0xe0, 0x64, 0xa3, 0xe0} }, +{ 0x0210, 16, {0x34, 0xf5, 0x30, 0xf5, 0x31, 0xc3, 0xe5, 0x31, 0x95, 0x2d, 0xe5, 0x30, 0x95, 0x2c, 0x50, 0x95} }, +{ 0x0220, 16, {0xe5, 0x29, 0x25, 0x31, 0xf5, 0x82, 0xe5, 0x30, 0x35, 0x28, 0xf5, 0x83, 0xe0, 0xff, 0x74, 0xe0} }, +{ 0x0230, 16, {0x25, 0x31, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xef, 0xf0, 0x05, 0x31, 0xe5, 0x31, 0x31} }, +{ 0x0240, 16, {0x02, 0x05, 0x30, 0x80, 0xd0, 0xe4, 0xf5, 0x30, 0xf5, 0x31, 0xc3, 0xe5, 0x31, 0x95, 0x2d, 0x31} }, +{ 0x0250, 16, {0x30, 0x95, 0x2c, 0x50, 0x18, 0x74, 0x00, 0x25, 0x31, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x34} }, +{ 0x0260, 16, {0x74, 0xcd, 0xf0, 0x05, 0x31, 0xe5, 0x31, 0x70, 0x02, 0x05, 0x30, 0x80, 0xdd, 0xaf, 0x29, 0xdd} }, +{ 0x0270, 16, {0x28, 0xad, 0x2d, 0x7a, 0x7f, 0x79, 0x00, 0x7b, 0x00, 0x12, 0x0b, 0xf4, 0x90, 0x7f, 0xb5, 0x90} }, +{ 0x0280, 16, {0x2d, 0xf0, 0xe5, 0x2d, 0x25, 0x29, 0xf5, 0x29, 0xe5, 0x2c, 0x35, 0x28, 0xf5, 0x28, 0xc3, 0xf5} }, +{ 0x0290, 16, {0x2b, 0x95, 0x2d, 0xf5, 0x2b, 0xe5, 0x2a, 0x95, 0x2c, 0xf5, 0x2a, 0x90, 0x7f, 0x92, 0xe0, 0x7f} }, +{ 0x02a0, 16, {0xc4, 0x54, 0x0f, 0x75, 0x2e, 0x00, 0xf5, 0x2f, 0xd3, 0x94, 0x00, 0xe5, 0x2e, 0x94, 0x00, 0x2e} }, +{ 0x02b0, 16, {0x0c, 0x90, 0x7f, 0xb4, 0xe0, 0x20, 0xe1, 0x03, 0x02, 0x01, 0xe7, 0x80, 0xf4, 0x90, 0x7f, 0xf4} }, +{ 0x02c0, 16, {0xe0, 0x20, 0xe2, 0x03, 0x02, 0x01, 0xe7, 0x80, 0xf4, 0x90, 0x7f, 0xe8, 0xe0, 0x64, 0x40, 0xe0} }, +{ 0x02d0, 16, {0x03, 0x02, 0x03, 0x78, 0xe5, 0x2b, 0x45, 0x2a, 0x70, 0x03, 0x02, 0x03, 0x78, 0xe4, 0x90, 0x78} }, +{ 0x02e0, 16, {0xc5, 0xf0, 0x90, 0x7f, 0x92, 0xe0, 0xff, 0xc4, 0x54, 0x0f, 0x75, 0x2e, 0x00, 0xf5, 0x2f, 0x00} }, +{ 0x02f0, 16, {0x94, 0x00, 0xe5, 0x2e, 0x94, 0x00, 0x50, 0x09, 0x90, 0x7f, 0xc4, 0xe0, 0x30, 0xe1, 0x09, 0x30} }, +{ 0x0300, 16, {0xf7, 0x90, 0x7f, 0xb4, 0xe0, 0x20, 0xe3, 0xf9, 0x90, 0x7f, 0xc5, 0xe0, 0x75, 0x2c, 0x00, 0x75} }, +{ 0x0310, 16, {0x2d, 0x90, 0x7f, 0xe9, 0xe0, 0x64, 0xa3, 0x70, 0x34, 0xf5, 0x30, 0xf5, 0x31, 0xc3, 0xe5, 0x31} }, +{ 0x0320, 16, {0x95, 0x2d, 0xe5, 0x30, 0x95, 0x2c, 0x50, 0x34, 0x74, 0xc0, 0x25, 0x31, 0xf5, 0x82, 0xe4, 0xf5} }, +{ 0x0330, 1, {0x03} }, +{ 0x0331, 16, {0xf5, 0x83, 0xe0, 0xff, 0xe5, 0x29, 0x25, 0x31, 0xf5, 0x82, 0xe5, 0x30, 0x35, 0x28, 0xf5, 0x35} }, +{ 0x0341, 16, {0xef, 0xf0, 0x05, 0x31, 0xe5, 0x31, 0x70, 0x02, 0x05, 0x30, 0x80, 0xd0, 0xaf, 0x29, 0xae, 0xaf} }, +{ 0x0351, 16, {0xad, 0x2d, 0x7a, 0x7e, 0x79, 0xc0, 0x7b, 0xc0, 0x12, 0x0c, 0x3f, 0xe5, 0x2d, 0x25, 0x29, 0x2d} }, +{ 0x0361, 16, {0x29, 0xe5, 0x2c, 0x35, 0x28, 0xf5, 0x28, 0xc3, 0xe5, 0x2b, 0x95, 0x2d, 0xf5, 0x2b, 0xe5, 0xf5} }, +{ 0x0371, 9, {0x95, 0x2c, 0xf5, 0x2a, 0x02, 0x02, 0xd4, 0xc3, 0x02} }, +{ 0x037a, 16, {0x90, 0x7f, 0xe9, 0xe0, 0x70, 0x03, 0x02, 0x04, 0x52, 0x14, 0x70, 0x03, 0x02, 0x04, 0xce, 0x02} }, +{ 0x038a, 16, {0xfe, 0x70, 0x03, 0x02, 0x05, 0x42, 0x24, 0xfb, 0x70, 0x03, 0x02, 0x04, 0x4c, 0x14, 0x70, 0x4c} }, +{ 0x039a, 16, {0x02, 0x04, 0x46, 0x14, 0x70, 0x03, 0x02, 0x04, 0x3a, 0x14, 0x70, 0x03, 0x02, 0x04, 0x40, 0x02} }, +{ 0x03aa, 16, {0x05, 0x60, 0x03, 0x02, 0x05, 0x96, 0x12, 0x0e, 0x44, 0x40, 0x03, 0x02, 0x05, 0xa2, 0x90, 0x05} }, +{ 0x03ba, 16, {0xeb, 0xe0, 0x24, 0xfe, 0x60, 0x16, 0x14, 0x60, 0x40, 0x24, 0x02, 0x70, 0x69, 0x74, 0x11, 0x69} }, +{ 0x03ca, 16, {0x7f, 0xd4, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xea, 0x90} }, +{ 0x03da, 16, {0xff, 0x12, 0x0b, 0x58, 0x8b, 0x25, 0x8a, 0x26, 0x89, 0x27, 0xea, 0x49, 0x60, 0x11, 0xae, 0x60} }, +{ 0x03ea, 16, {0xee, 0x90, 0x7f, 0xd4, 0xf0, 0xaf, 0x01, 0xef, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa2, 0x02} }, +{ 0x03fa, 16, {0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xea, 0xe0, 0xff, 0x12, 0xe0} }, +{ 0x040a, 16, {0xba, 0x8b, 0x25, 0x8a, 0x26, 0x89, 0x27, 0xea, 0x49, 0x60, 0x11, 0xae, 0x02, 0xee, 0x90, 0x02} }, +{ 0x041a, 16, {0xd4, 0xf0, 0xaf, 0x01, 0xef, 0x90, 0x7f, 0xd5, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0x90} }, +{ 0x042a, 16, {0x44, 0x01, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x05, 0xf0} }, +{ 0x043a, 16, {0x12, 0x0e, 0x1f, 0x02, 0x05, 0xa2, 0x12, 0x0e, 0x2d, 0x02, 0x05, 0xa2, 0x12, 0x0a, 0xf7, 0x12} }, +{ 0x044a, 16, {0x05, 0xa2, 0x12, 0x0e, 0x11, 0x02, 0x05, 0xa2, 0x12, 0x0e, 0x46, 0x40, 0x03, 0x02, 0x05, 0x03} }, +{ 0x045a, 16, {0x90, 0x7f, 0xe8, 0xe0, 0x24, 0x7f, 0x60, 0x24, 0x14, 0x60, 0x31, 0x24, 0x02, 0x70, 0x5b, 0x02} }, +{ 0x046a, 16, {0x00, 0xe4, 0x33, 0xff, 0x25, 0xe0, 0xff, 0xa2, 0x02, 0xe4, 0x33, 0x4f, 0x90, 0x7f, 0x00, 0x90} }, +{ 0x047a, 16, {0xe4, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa2, 0xe4, 0x90, 0x7f, 0xe4} }, +{ 0x048a, 16, {0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xec, 0x90} }, +{ 0x049a, 16, {0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0x25} }, +{ 0x04aa, 16, {0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0xe0, 0x54, 0xfd, 0x90, 0x7f, 0x00, 0xf0, 0xe4, 0x00} }, +{ 0x04ba, 16, {0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0xb4} }, +{ 0x04ca, 16, {0xf0, 0x02, 0x05, 0xa2, 0x12, 0x0e, 0x48, 0x40, 0x03, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xe8, 0x90} }, +{ 0x04da, 16, {0x24, 0xfe, 0x60, 0x1d, 0x24, 0x02, 0x60, 0x03, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xea, 0xe0, 0x7f} }, +{ 0x04ea, 16, {0x01, 0x05, 0xc2, 0x00, 0x02, 0x05, 0xa2, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x02, 0x01} }, +{ 0x04fa, 16, {0xa2, 0x90, 0x7f, 0xea, 0xe0, 0x70, 0x38, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0x54} }, +{ 0x050a, 16, {0x54, 0x0f, 0xff, 0xe0, 0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x82} }, +{ 0x051a, 16, {0xf5, 0x83, 0xe4, 0xf0, 0x90, 0x7f, 0xec, 0xe0, 0x54, 0x80, 0xff, 0x13, 0x13, 0x13, 0x54, 0x13} }, +{ 0x052a, 16, {0xff, 0xe0, 0x54, 0x07, 0x2f, 0x90, 0x7f, 0xd7, 0xf0, 0xe0, 0x44, 0x20, 0xf0, 0x80, 0x69, 0xf0} }, +{ 0x053a, 16, {0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x60, 0x12, 0x0e, 0x4a, 0x50, 0x5b, 0x90, 0x7f, 0x5b} }, +{ 0x054a, 16, {0xe0, 0x24, 0xfe, 0x60, 0x18, 0x24, 0x02, 0x70, 0x4f, 0x90, 0x7f, 0xea, 0xe0, 0xb4, 0x01, 0xe0} }, +{ 0x055a, 16, {0xd2, 0x00, 0x80, 0x44, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x3b, 0x90, 0x7f, 0x3b} }, +{ 0x056a, 16, {0xe0, 0x70, 0x20, 0x90, 0x7f, 0xec, 0xe0, 0xf4, 0x54, 0x80, 0xff, 0xc4, 0x54, 0x0f, 0xff, 0x54} }, +{ 0x057a, 16, {0x54, 0x07, 0x2f, 0x25, 0xe0, 0x24, 0xb4, 0xf5, 0x82, 0xe4, 0x34, 0x7f, 0xf5, 0x83, 0x74, 0xf5} }, +{ 0x058a, 16, {0xf0, 0x80, 0x15, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x0c, 0x12, 0x01, 0x00, 0x12} }, +{ 0x059a, 16, {0x07, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x02, 0xf0, 0x44} }, +{ 0x05aa, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0x85, 0xc0, 0x84, 0xc0, 0x86, 0x75, 0x86, 0x00, 0x75} }, +{ 0x05ba, 16, {0xd0, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x7f, 0x07} }, +{ 0x05ca, 16, {0xe0, 0x30, 0xe2, 0x06, 0x75, 0x0d, 0x06, 0x02, 0x06, 0x76, 0x90, 0x7f, 0xa5, 0xe0, 0x20, 0xa5} }, +{ 0x05da, 16, {0x0c, 0xe5, 0x0d, 0x64, 0x02, 0x60, 0x06, 0x75, 0x0d, 0x07, 0x02, 0x06, 0x76, 0xaf, 0x0d, 0x76} }, +{ 0x05ea, 16, {0x24, 0xfe, 0x60, 0x48, 0x14, 0x60, 0x2c, 0x24, 0xfe, 0x60, 0x77, 0x24, 0x04, 0x60, 0x03, 0x04} }, +{ 0x05fa, 16, {0x06, 0x76, 0xab, 0x09, 0xaa, 0x0a, 0xa9, 0x0b, 0xaf, 0x0c, 0x05, 0x0c, 0x8f, 0x82, 0x75, 0x8f} }, +{ 0x060a, 16, {0x00, 0x12, 0x08, 0x22, 0x90, 0x7f, 0xa6, 0xf0, 0xe5, 0x0c, 0x65, 0x08, 0x70, 0x5e, 0x75, 0x70} }, +{ 0x061a, 16, {0x05, 0x80, 0x59, 0x90, 0x7f, 0xa6, 0xe0, 0xab, 0x09, 0xaa, 0x0a, 0xa9, 0x0b, 0xae, 0x0c, 0x0b} }, +{ 0x062a, 16, {0x82, 0x75, 0x83, 0x00, 0x12, 0x08, 0x4f, 0x75, 0x0d, 0x02, 0x80, 0x40, 0xe5, 0x08, 0x24, 0xe5} }, +{ 0x063a, 16, {0xb5, 0x0c, 0x07, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x20, 0xf0, 0xe5, 0x08, 0x14, 0xb5, 0x0c, 0x14} }, +{ 0x064a, 16, {0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe4, 0xf5, 0x0d, 0x90, 0x7f, 0xa6, 0xe0, 0xab, 0xa6} }, +{ 0x065a, 16, {0xaa, 0x0a, 0xa9, 0x0b, 0xae, 0x0c, 0x8e, 0x82, 0x75, 0x83, 0x00, 0x12, 0x08, 0x4f, 0x05, 0x08} }, +{ 0x066a, 16, {0x80, 0x0a, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x40, 0xf0, 0xe4, 0xf5, 0x0d, 0x53, 0x91, 0xdf, 0x53} }, +{ 0x067a, 16, {0x07, 0xd0, 0x06, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x86, 0xd0} }, +{ 0x068a, 10, {0x84, 0xd0, 0x85, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0694, 16, {0x8c, 0x33, 0x8d, 0x34, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0xc0, 0xf0, 0xe4, 0xf5, 0x35, 0xf5, 0xf5} }, +{ 0x06a4, 16, {0xc3, 0xe5, 0x36, 0x95, 0x34, 0xe5, 0x35, 0x95, 0x33, 0x50, 0x69, 0xef, 0x25, 0x36, 0xf5, 0x25} }, +{ 0x06b4, 16, {0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x74, 0xff, 0xf0, 0xf4, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x22} }, +{ 0x06c4, 16, {0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0xe4, 0xf0, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x22} }, +{ 0x06d4, 16, {0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x74, 0xaa, 0xf0, 0x64, 0xaa, 0x60, 0x02, 0xc3, 0x60} }, +{ 0x06e4, 16, {0xef, 0x25, 0x36, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x74, 0x55, 0xf0, 0x64, 0x55, 0xf0} }, +{ 0x06f4, 16, {0x02, 0xc3, 0x22, 0xad, 0x36, 0xe5, 0x36, 0x2f, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x3e} }, +{ 0x0704, 16, {0xf0, 0xfc, 0xac, 0x05, 0xed, 0x6c, 0x60, 0x02, 0xc3, 0x22, 0x05, 0x36, 0xe5, 0x36, 0x70, 0xe5} }, +{ 0x0714, 16, {0x05, 0x35, 0x80, 0x8c, 0xe4, 0xf5, 0x35, 0xf5, 0x36, 0xc3, 0xe5, 0x36, 0x95, 0x34, 0xe5, 0x95} }, +{ 0x0724, 16, {0x95, 0x33, 0x50, 0x27, 0xef, 0x25, 0x36, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0xe0, 0xf5} }, +{ 0x0734, 16, {0x36, 0x60, 0x02, 0xc3, 0x22, 0xef, 0x25, 0x36, 0xf5, 0x82, 0xe5, 0x35, 0x3e, 0xf5, 0x83, 0x3e} }, +{ 0x0744, 13, {0xf0, 0x05, 0x36, 0xe5, 0x36, 0x70, 0x02, 0x05, 0x35, 0x80, 0xce, 0xd3, 0x80} }, +{ 0x0751, 16, {0xc2, 0x04, 0xd2, 0x05, 0xc2, 0x03, 0xc2, 0x00, 0xc2, 0x02, 0xc2, 0x01, 0x12, 0x0e, 0x3d, 0x12} }, +{ 0x0761, 16, {0xe8, 0x43, 0xd8, 0x20, 0x90, 0x7f, 0xab, 0x74, 0xff, 0xf0, 0x90, 0x7f, 0xa9, 0xf0, 0x90, 0xa9} }, +{ 0x0771, 16, {0xaa, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0xc0, 0xf0, 0x90, 0x7f, 0x93, 0x90} }, +{ 0x0781, 16, {0x30, 0xf0, 0x12, 0x0a, 0x19, 0x90, 0x7f, 0xaf, 0xe0, 0x44, 0x01, 0xf0, 0x90, 0x7f, 0xae, 0x90} }, +{ 0x0791, 16, {0x44, 0x0d, 0xf0, 0xd2, 0xaf, 0x12, 0x0e, 0x35, 0x20, 0x01, 0x42, 0x75, 0x24, 0x00, 0x75, 0x24} }, +{ 0x07a1, 16, {0x00, 0x75, 0x22, 0x00, 0x75, 0x21, 0x00, 0x7f, 0x48, 0x7e, 0x92, 0x7d, 0x00, 0x7c, 0x00, 0x00} }, +{ 0x07b1, 16, {0x24, 0xaa, 0x23, 0xa9, 0x22, 0xa8, 0x21, 0xc3, 0x12, 0x08, 0xa9, 0x50, 0xdb, 0x20, 0x01, 0xdb} }, +{ 0x07c1, 16, {0x7a, 0x00, 0x79, 0x00, 0x78, 0x00, 0xe5, 0x24, 0x24, 0x01, 0xf5, 0x24, 0xea, 0x35, 0x23, 0xea} }, +{ 0x07d1, 16, {0x23, 0xe9, 0x35, 0x22, 0xf5, 0x22, 0xe8, 0x35, 0x21, 0xf5, 0x21, 0x80, 0xca, 0x30, 0x01, 0xca} }, +{ 0x07e1, 16, {0x12, 0x03, 0x7a, 0xc2, 0x01, 0x30, 0x04, 0x1a, 0x12, 0x0e, 0x40, 0x50, 0x13, 0x12, 0x09, 0x13} }, +{ 0x07f1, 16, {0x30, 0x00, 0x07, 0x90, 0x7f, 0xd6, 0xe0, 0x30, 0xe7, 0xf3, 0x12, 0x0d, 0x4a, 0x12, 0x0e, 0x4a} }, +{ 0x0801, 8, {0xc2, 0x03, 0x12, 0x08, 0xff, 0x80, 0xd6, 0xff} }, +{ 0x0809, 16, {0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x22} }, +{ 0x0819, 9, {0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0x83} }, +{ 0x0822, 16, {0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 0x83} }, +{ 0x0832, 16, {0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0x82} }, +{ 0x0842, 13, {0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x83} }, +{ 0x084f, 16, {0xf8, 0xbb, 0x01, 0x0d, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe8, 0xf5} }, +{ 0x085f, 16, {0x22, 0x50, 0x06, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 0x22, 0xbb, 0xfe, 0x05, 0xe9, 0x25, 0x82, 0xe9} }, +{ 0x086f, 2, {0xf2, 0x6f} }, +{ 0x0871, 16, {0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0x83} }, +{ 0x0881, 16, {0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xe6} }, +{ 0x0891, 16, {0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2, 0x22, 0xe5, 0x83, 0x2a, 0xf5, 0x83} }, +{ 0x08a1, 8, {0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0xa3} }, +{ 0x08a9, 16, {0xeb, 0x9f, 0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xe8} }, +{ 0x08b9, 1, {0x08} }, +{ 0x08ba, 2, {0x8f, 0xba} }, +{ 0x08bc, 16, {0xe4, 0xf5, 0x29, 0x75, 0x2a, 0xff, 0x75, 0x2b, 0x11, 0x75, 0x2c, 0x32, 0xab, 0x2a, 0xaa, 0xab} }, +{ 0x08cc, 16, {0xa9, 0x2c, 0x90, 0x00, 0x01, 0x12, 0x08, 0x22, 0xb4, 0x03, 0x1d, 0xaf, 0x29, 0x05, 0x29, 0x29} }, +{ 0x08dc, 16, {0xb5, 0x28, 0x01, 0x22, 0x12, 0x08, 0x09, 0x7e, 0x00, 0x29, 0xff, 0xee, 0x3a, 0xa9, 0x07, 0x3a} }, +{ 0x08ec, 14, {0x2a, 0xff, 0xf5, 0x2b, 0x89, 0x2c, 0x80, 0xd4, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7a} }, +{ 0x08fa, 1, {0x08} }, +{ 0x08fb, 4, {0x53, 0xd8, 0xef, 0x53} }, +{ 0x08ff, 1, {0x08} }, +{ 0x0900, 9, {0x90, 0x7f, 0xd6, 0xe0, 0x44, 0x80, 0xf0, 0x80, 0x80} }, +{ 0x097d, 16, {0x43, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }, +{ 0x098d, 12, {0x78, 0x7f, 0xe4, 0xf6, 0xd8, 0xfd, 0x75, 0x81, 0x39, 0x02, 0x09, 0x39} }, +{ 0x0999, 16, {0x02, 0x07, 0x51, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0x40, 0x03, 0xf6, 0x80, 0x01, 0xf6} }, +{ 0x09a9, 16, {0x08, 0xdf, 0xf4, 0x80, 0x29, 0xe4, 0x93, 0xa3, 0xf8, 0x54, 0x07, 0x24, 0x0c, 0xc8, 0xc3, 0x0c} }, +{ 0x09b9, 16, {0xc4, 0x54, 0x0f, 0x44, 0x20, 0xc8, 0x83, 0x40, 0x04, 0xf4, 0x56, 0x80, 0x01, 0x46, 0xf6, 0x01} }, +{ 0x09c9, 16, {0xe4, 0x80, 0x0b, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x0d, 0xec, 0xe4, 0x0d} }, +{ 0x09d9, 16, {0x01, 0x93, 0x60, 0xbc, 0xa3, 0xff, 0x54, 0x3f, 0x30, 0xe5, 0x09, 0x54, 0x1f, 0xfe, 0xe4, 0x1f} }, +{ 0x09e9, 16, {0xa3, 0x60, 0x01, 0x0e, 0xcf, 0x54, 0xc0, 0x25, 0xe0, 0x60, 0xa8, 0x40, 0xb8, 0xe4, 0x93, 0xb8} }, +{ 0x09f9, 16, {0xfa, 0xe4, 0x93, 0xa3, 0xf8, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca} }, +{ 0x0a09, 16, {0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xca, 0xc5, 0x83, 0xca, 0xdf, 0xe9, 0xde, 0xe7, 0x80, 0xde} }, +{ 0x0a19, 16, {0xe4, 0x90, 0x7f, 0x9c, 0xf0, 0x7f, 0x0a, 0xfe, 0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0x74, 0x7f} }, +{ 0x0a29, 16, {0xf0, 0x90, 0x7f, 0x9c, 0x74, 0xcf, 0xf0, 0x7f, 0xf4, 0x7e, 0x01, 0x12, 0x0d, 0x94, 0x90, 0x0d} }, +{ 0x0a39, 16, {0x96, 0xe0, 0x54, 0xfe, 0xf0, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x0d, 0x94, 0x7f, 0x05, 0x7e, 0x7f} }, +{ 0x0a49, 16, {0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x02, 0xf0, 0xe0, 0x54, 0x7f, 0xf0, 0x7f, 0x7f} }, +{ 0x0a59, 16, {0x7e, 0x00, 0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x05, 0x7e, 0x7f} }, +{ 0x0a69, 16, {0x12, 0x0d, 0x94, 0x90, 0x7f, 0x96, 0xe0, 0x54, 0xbf, 0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x7e} }, +{ 0x0a79, 16, {0x94, 0x90, 0x7f, 0x96, 0xe0, 0x44, 0x40, 0xf0, 0x7f, 0x32, 0x7e, 0x00, 0x12, 0x0d, 0x94, 0x12} }, +{ 0x0a89, 16, {0x75, 0x32, 0x01, 0xe5, 0x32, 0x60, 0x1b, 0x7f, 0x01, 0x12, 0x0d, 0xd7, 0x7f, 0x00, 0x7e, 0x7f} }, +{ 0x0a99, 16, {0x7d, 0x00, 0x7c, 0x01, 0x12, 0x06, 0x94, 0xe4, 0x33, 0xf5, 0x32, 0x70, 0x05, 0x7f, 0x0f, 0x05} }, +{ 0x0aa9, 16, {0x0d, 0xd7, 0xe5, 0x32, 0x60, 0x1b, 0x7f, 0x02, 0x12, 0x0d, 0xd7, 0x7f, 0x00, 0x7e, 0x80, 0x00} }, +{ 0x0ab9, 16, {0x00, 0x7c, 0x80, 0x12, 0x06, 0x94, 0xe4, 0x33, 0xf5, 0x32, 0x70, 0x05, 0x7f, 0x0f, 0x12, 0x7f} }, +{ 0x0ac9, 16, {0xd7, 0xe5, 0x32, 0x60, 0x1b, 0x7f, 0x03, 0x12, 0x0d, 0xd7, 0x7f, 0x00, 0x7e, 0x20, 0x7d, 0x7e} }, +{ 0x0ad9, 16, {0x7c, 0x5b, 0x12, 0x06, 0x94, 0xe4, 0x33, 0xf5, 0x32, 0x70, 0x05, 0x7f, 0x0f, 0x12, 0x0d, 0x0f} }, +{ 0x0ae9, 14, {0xe5, 0x32, 0x60, 0x05, 0xe4, 0xff, 0x12, 0x0d, 0xd7, 0xe5, 0x32, 0x24, 0xff, 0x32} }, +{ 0x0af7, 8, {0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x10, 0xd3, 0xf5} }, +{ 0x0aff, 1, {0x0a} }, +{ 0x0b00, 16, {0x02, 0x0d, 0x64, 0x00, 0x02, 0x0d, 0xab, 0x00, 0x02, 0x0d, 0x2f, 0x00, 0x02, 0x0d, 0x7c, 0x02} }, +{ 0x0b10, 16, {0x02, 0x0d, 0xc1, 0x00, 0x02, 0x0a, 0xff, 0x00, 0x02, 0x0e, 0x4c, 0x00, 0x02, 0x0e, 0x4d, 0x02} }, +{ 0x0b20, 16, {0x02, 0x0e, 0x4e, 0x00, 0x02, 0x0e, 0x4f, 0x00, 0x02, 0x0e, 0x50, 0x00, 0x02, 0x0e, 0x51, 0x02} }, +{ 0x0b30, 16, {0x02, 0x0e, 0x52, 0x00, 0x02, 0x0e, 0x53, 0x00, 0x02, 0x0e, 0x54, 0x00, 0x02, 0x0e, 0x55, 0x02} }, +{ 0x0b40, 16, {0x02, 0x0e, 0x56, 0x00, 0x02, 0x0e, 0x57, 0x00, 0x02, 0x0e, 0x58, 0x00, 0x02, 0x0e, 0x59, 0x02} }, +{ 0x0b50, 8, {0x02, 0x0e, 0x5a, 0x00, 0x02, 0x0e, 0x5b, 0x02} }, +{ 0x0b58, 16, {0xe4, 0xfe, 0x75, 0x2a, 0xff, 0x75, 0x2b, 0x11, 0x75, 0x2c, 0x12, 0xab, 0x2a, 0xaa, 0x2b, 0x2a} }, +{ 0x0b68, 16, {0x2c, 0x90, 0x00, 0x01, 0x12, 0x08, 0x22, 0x64, 0x02, 0x70, 0x2d, 0xad, 0x06, 0x0e, 0xed, 0x06} }, +{ 0x0b78, 16, {0x07, 0x01, 0x22, 0x90, 0x00, 0x02, 0x12, 0x08, 0x71, 0x85, 0xf0, 0x28, 0xf5, 0x29, 0x62, 0xf5} }, +{ 0x0b88, 16, {0xe5, 0x28, 0x62, 0x29, 0xe5, 0x29, 0x62, 0x28, 0x29, 0xfd, 0xe5, 0x28, 0x3a, 0xa9, 0x05, 0x3a} }, +{ 0x0b98, 14, {0x2a, 0xff, 0xf5, 0x2b, 0x89, 0x2c, 0x80, 0xc3, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x7a} }, +{ 0x0ba6, 1, {0x0b} }, +{ 0x0ba7, 16, {0xab, 0x07, 0xaa, 0x06, 0xac, 0x05, 0xe4, 0xfd, 0xe5, 0x11, 0x60, 0x11, 0xea, 0xff, 0xae, 0xea} }, +{ 0x0bb7, 16, {0x0d, 0xee, 0x24, 0x10, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xef, 0xf0, 0xeb, 0xae, 0xf0} }, +{ 0x0bc7, 16, {0x0d, 0x74, 0x10, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xeb, 0xf0, 0xaf, 0x05, 0xf0} }, +{ 0x0bd7, 16, {0x74, 0x10, 0x2f, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xf5, 0x83, 0xec, 0xf0, 0xaf, 0x0f, 0x7a, 0xaf} }, +{ 0x0be7, 13, {0x7b, 0x10, 0x12, 0x0d, 0x10, 0x7f, 0x0a, 0x7e, 0x00, 0x12, 0x0d, 0x94, 0x12} }, +{ 0x0bf4, 16, {0x8e, 0x32, 0x8f, 0x33, 0x8d, 0x34, 0x8a, 0x35, 0x8b, 0x36, 0xe4, 0xfd, 0xf5, 0x37, 0xe5, 0xf5} }, +{ 0x0c04, 16, {0x60, 0x12, 0xe5, 0x32, 0xff, 0xae, 0x05, 0x0d, 0xee, 0x24, 0x13, 0xf5, 0x82, 0xe4, 0x34, 0x82} }, +{ 0x0c14, 16, {0xf5, 0x83, 0xef, 0xf0, 0xe5, 0x33, 0xae, 0x05, 0x0d, 0x74, 0x13, 0x2e, 0xf5, 0x82, 0xe4, 0xf5} }, +{ 0x0c24, 16, {0x0f, 0xf5, 0x83, 0xe5, 0x33, 0xf0, 0xaf, 0x0f, 0x7a, 0x0f, 0x7b, 0x13, 0x12, 0x0d, 0x10, 0x12} }, +{ 0x0c34, 11, {0x0f, 0xad, 0x34, 0xab, 0x36, 0xaa, 0x35, 0x12, 0x0c, 0xf1, 0x12} }, +{ 0x0c3f, 16, {0x8e, 0x32, 0x8f, 0x33, 0x8d, 0x34, 0x8a, 0x35, 0x8b, 0x36, 0xe4, 0xf5, 0x37, 0xe5, 0x37, 0x37} }, +{ 0x0c4f, 16, {0x95, 0x34, 0x50, 0x20, 0x05, 0x33, 0xe5, 0x33, 0xae, 0x32, 0x70, 0x02, 0x05, 0x32, 0x14, 0x05} }, +{ 0x0c5f, 16, {0xe5, 0x36, 0x25, 0x37, 0xf5, 0x82, 0xe4, 0x35, 0x35, 0xf5, 0x83, 0xe0, 0xfd, 0x12, 0x0b, 0xfd} }, +{ 0x0c6f, 5, {0x05, 0x37, 0x80, 0xd9, 0x37} }, +{ 0x0c74, 16, {0xa9, 0x07, 0xe5, 0x0d, 0x70, 0x25, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xe9, 0x25, 0xf0} }, +{ 0x0c84, 16, {0x44, 0x01, 0x90, 0x7f, 0xa6, 0xf0, 0x8d, 0x08, 0xaf, 0x03, 0xa9, 0x07, 0x75, 0x09, 0x01, 0x75} }, +{ 0x0c94, 13, {0x0a, 0x89, 0x0b, 0xe4, 0xf5, 0x0c, 0x75, 0x0d, 0x03, 0xd3, 0x22, 0xc3, 0xd3} }, +{ 0x0ca1, 16, {0xa9, 0x07, 0xe5, 0x0d, 0x70, 0x23, 0x90, 0x7f, 0xa5, 0xe0, 0x44, 0x80, 0xf0, 0xe9, 0x25, 0xf0} }, +{ 0x0cb1, 16, {0x90, 0x7f, 0xa6, 0xf0, 0x8d, 0x08, 0xaf, 0x03, 0xa9, 0x07, 0x75, 0x09, 0x01, 0x8a, 0x0a, 0x01} }, +{ 0x0cc1, 11, {0x0b, 0xe4, 0xf5, 0x0c, 0x75, 0x0d, 0x01, 0xd3, 0x22, 0xc3, 0xd3} }, +{ 0x0ccc, 16, {0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfb, 0xf0, 0xe0, 0x44, 0x08, 0xf0, 0x30, 0x06, 0x04, 0xe0, 0x06} }, +{ 0x0cdc, 16, {0x02, 0xf0, 0x7f, 0xd0, 0x7e, 0x07, 0x12, 0x0d, 0x94, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xf7, 0xe0} }, +{ 0x0cec, 5, {0xe0, 0x44, 0x04, 0xf0, 0x44} }, +{ 0x0cf1, 16, {0x12, 0x0c, 0x74, 0xe5, 0x0d, 0x24, 0xfa, 0x60, 0x10, 0x14, 0x60, 0x07, 0x24, 0x07, 0x70, 0x24} }, +{ 0x0d01, 15, {0x7f, 0x08, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x07, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x06, 0x0d} }, +{ 0x0d10, 16, {0x12, 0x0c, 0xa1, 0xe5, 0x0d, 0x24, 0xfa, 0x60, 0x10, 0x14, 0x60, 0x07, 0x24, 0x07, 0x70, 0x24} }, +{ 0x0d20, 15, {0x7f, 0x08, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x07, 0x22, 0xe4, 0xf5, 0x0d, 0x7f, 0x06, 0x0d} }, +{ 0x0d2f, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x7f, 0xc4, 0xe4, 0xf0, 0x53, 0x91, 0xef, 0x90, 0x91} }, +{ 0x0d3f, 11, {0xab, 0x74, 0x04, 0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0d4a, 16, {0x90, 0x7f, 0xd6, 0xe0, 0x30, 0xe7, 0x12, 0xe0, 0x44, 0x01, 0xf0, 0x7f, 0x14, 0x7e, 0x00, 0x14} }, +{ 0x0d5a, 10, {0x0d, 0x94, 0x90, 0x7f, 0xd6, 0xe0, 0x54, 0xfe, 0xf0, 0x54} }, +{ 0x0d64, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x01, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x7f} }, +{ 0x0d74, 8, {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0d7c, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xd2, 0x03, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x7f} }, +{ 0x0d8c, 8, {0xf0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0d94, 16, {0x8e, 0x38, 0x8f, 0x39, 0xe5, 0x39, 0x15, 0x39, 0xae, 0x38, 0x70, 0x02, 0x15, 0x38, 0x4e, 0x15} }, +{ 0x0da4, 7, {0x05, 0x12, 0x0e, 0x00, 0x80, 0xee, 0x00} }, +{ 0x0dab, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x02, 0xf0, 0x74} }, +{ 0x0dbb, 6, {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0dc1, 16, {0xc0, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x53, 0x91, 0xef, 0x90, 0x7f, 0xab, 0x74, 0x10, 0xf0, 0x74} }, +{ 0x0dd1, 6, {0x82, 0xd0, 0x83, 0xd0, 0xe0, 0x83} }, +{ 0x0dd7, 16, {0xae, 0x07, 0x7f, 0x21, 0x7d, 0x01, 0x74, 0x00, 0x2e, 0xf5, 0x82, 0xe4, 0x34, 0x0f, 0xab, 0x34} }, +{ 0x0de7, 5, {0xfa, 0x12, 0x0d, 0x10, 0x12} }, +{ 0x0dec, 16, {0x50, 0x0f, 0x00, 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, 0x88, 0x83, 0x98} }, +{ 0x0dfc, 3, {0xa1, 0x86, 0x00} }, +{ 0x0dff, 1, {0x0d} }, +{ 0x0e00, 16, {0x74, 0x00, 0xf5, 0x86, 0x90, 0xfd, 0xa5, 0x7c, 0x05, 0xa3, 0xe5, 0x82, 0x45, 0x83, 0x70, 0x45} }, +{ 0x0e10, 1, {0x0e} }, +{ 0x0e11, 14, {0x90, 0x7f, 0x00, 0xe5, 0x10, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0xd3, 0x01} }, +{ 0x0e1f, 14, {0x90, 0x7f, 0x00, 0xe5, 0x0e, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x01, 0xf0, 0xd3, 0x01} }, +{ 0x0e2d, 8, {0x90, 0x7f, 0xea, 0xe0, 0xf5, 0x0e, 0xd3, 0xf5} }, +{ 0x0e35, 8, {0xe4, 0xf5, 0x0d, 0xd2, 0xe9, 0xd2, 0xaf, 0xe9} }, +{ 0x0e3d, 3, {0xd2, 0x00, 0x00} }, +{ 0x0e40, 2, {0xd3, 0x40} }, +{ 0x0e42, 2, {0xd3, 0x42} }, +{ 0x0e44, 2, {0xd3, 0x44} }, +{ 0x0e46, 2, {0xd3, 0x46} }, +{ 0x0e48, 2, {0xd3, 0x48} }, +{ 0x0e4a, 2, {0xd3, 0x4a} }, +{ 0x0e4c, 1, {0x0e} }, +{ 0x0e4d, 1, {0x0e} }, +{ 0x0e4e, 1, {0x0e} }, +{ 0x0e4f, 1, {0x0e} }, +{ 0x0e50, 1, {0x0e} }, +{ 0x0e51, 1, {0x0e} }, +{ 0x0e52, 1, {0x0e} }, +{ 0x0e53, 1, {0x0e} }, +{ 0x0e54, 1, {0x0e} }, +{ 0x0e55, 1, {0x0e} }, +{ 0x0e56, 1, {0x0e} }, +{ 0x0e57, 1, {0x0e} }, +{ 0x0e58, 1, {0x0e} }, +{ 0x0e59, 1, {0x0e} }, +{ 0x0e5a, 1, {0x0e} }, +{ 0x0e5b, 1, {0x0e} }, +{ 0x1100, 16, {0x12, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x47, 0x05, 0x10, 0x27, 0x01, 0x00, 0x01, 0x01} }, +{ 0x1110, 16, {0x00, 0x01, 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x03, 0xa0, 0x00, 0x09, 0x04, 0x00, 0x00, 0x04} }, +{ 0x1120, 16, {0xff, 0x00, 0x00, 0x04, 0x07, 0x05, 0x82, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02, 0x05} }, +{ 0x1130, 16, {0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x26, 0x03, 0x41, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x63} }, +{ 0x1140, 16, {0x6f, 0x00, 0x72, 0x00, 0x20, 0x00, 0x43, 0x00, 0x68, 0x00, 0x69, 0x00, 0x70, 0x00, 0x73, 0x70} }, +{ 0x1150, 16, {0x2c, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x2e, 0x00, 0x28, 0x03, 0x46, 0x28} }, +{ 0x1160, 16, {0x69, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x77, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x20, 0x65} }, +{ 0x1170, 16, {0x46, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x57, 0x00, 0x6f, 0x00, 0x72, 0x6f} }, +{ 0x1180, 16, {0x6b, 0x00, 0x73, 0x00, 0x2a, 0x03, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x69, 0x66} }, +{ 0x1190, 16, {0x67, 0x00, 0x75, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x6f} }, +{ 0x11a0, 16, {0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x22, 0x67} }, +{ 0x11b0, 16, {0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66, 0x00, 0x61, 0x00, 0x63, 0x61} }, +{ 0x11c0, 16, {0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x6e} }, +{ 0x11d0, 2, {0x00, 0xd0} }, +{ 0xffff, 0, {0x00} } +}; diff --git a/fs/cramfs/README b/fs/cramfs/README new file mode 100644 index 000000000000..a04f41b1f267 --- /dev/null +++ b/fs/cramfs/README @@ -0,0 +1,166 @@ +Notes on Filesystem Layout +-------------------------- + +These notes describe what mkcramfs generates. Kernel requirements are +a bit looser, e.g. it doesn't care if the items are +swapped around (though it does care that directory entries (inodes) in +a given directory are contiguous, as this is used by readdir). + +All data is in host-endian format; neither mkcramfs nor the kernel +ever do swabbing. (See section `Block Size' below.) + +: + + + + +: struct cramfs_super (see cramfs.h). + +: + For each file: + struct cramfs_inode (see cramfs.h). + Filename. Not generally null-terminated, but it is + null-padded to a multiple of 4 bytes. + +The order of inode traversal is described as "width-first" (not to be +confused with breadth-first); i.e. like depth-first but listing all of +a directory's entries before recursing down its subdirectories: the +same order as `ls -AUR' (but without the /^\..*:$/ directory header +lines); put another way, the same order as `find -type d -exec +ls -AU1 {} \;'. + +: + One for each file that's either a symlink or a + regular file of non-zero st_size. + +: + nblocks * + (where nblocks = (st_size - 1) / blksize + 1) + nblocks * + padding to multiple of 4 bytes + +The i'th for a file stores the byte offset of the +*end* of the i'th (i.e. one past the last byte, which is the +same as the start of the (i+1)'th if there is one). The first + immediately follows the last for the file. +s are each 32 bits long. + +The order of 's is a depth-first descent of the directory +tree, i.e. the same order as `find -size +0 \( -type f -o -type l \) +-print'. + + +: The i'th is the output of zlib's compress function +applied to the i'th blksize-sized chunk of the input data. +(For the last of the file, the input may of course be smaller.) +Each may be a different size. (See above.) +s are merely byte-aligned, not generally u32-aligned. + + +Holes +----- + +This kernel supports cramfs holes (i.e. [efficient representation of] +blocks in uncompressed data consisting entirely of NUL bytes), but by +default mkcramfs doesn't test for & create holes, since cramfs in +kernels up to at least 2.3.39 didn't support holes. Compile mkcramfs +with -DDO_HOLES if you want it to create files that can have holes in +them. + + +Tools +----- + +If you're hacking on cramfs, you might find useful some tools for +testing cramfs at , including a +rudimentary fsck for cramfs. + + +Future Development +================== + +Block Size +---------- + +(Block size in cramfs refers to the size of input data that is +compressed at a time. It's intended to be somewhere around +PAGE_CACHE_SIZE for cramfs_readpage's convenience.) + +The superblock ought to indicate the block size that the fs was +written for, since comments in indicate that +PAGE_CACHE_SIZE may grow in future (if I interpret the comment +correctly). + +Currently, mkcramfs #define's PAGE_CACHE_SIZE as 4096 and uses that +for blksize, whereas Linux-2.3.39 uses its PAGE_CACHE_SIZE, which in +turn is defined as PAGE_SIZE (which can be as large as 32KB on arm). +This discrepancy is a bug, though it's not clear which should be +changed. + +One option is to change mkcramfs to take its PAGE_CACHE_SIZE from +. Personally I don't like this option, but it does +require the least amount of change: just change `#define +PAGE_CACHE_SIZE (4096)' to `#include '. The disadvantage +is that the generated cramfs cannot always be shared between different +kernels, not even necessarily kernels of the same architecture if +PAGE_CACHE_SIZE is subject to change between kernel versions. + + +The remaining options try to make cramfs more sharable. + +One part of that is addressing endianness. The two options here are +`always use little-endian' (like ext2fs) or `writer chooses +endianness; kernel adapts at runtime'. Little-endian wins because of +code simplicity and little CPU overhead even on big-endian machines. + +The cost of swabbing is changing the code to use the le32_to_cpu +etc. macros as used by ext2fs. We don't need to swab the compressed +data, only the superblock, inodes and block pointers. + + +The other part of making cramfs more sharable is choosing a block +size. The options are: + + 1. Always 4096 bytes. + + 2. Writer chooses blocksize; kernel adapts but rejects blocksize > + PAGE_CACHE_SIZE. + + 3. Writer chooses blocksize; kernel adapts even to blocksize > + PAGE_CACHE_SIZE. + +It's easy enough to change the kernel to use a smaller value than +PAGE_CACHE_SIZE: just make cramfs_readpage read multiple blocks. + +The cost of option 1 is that kernels with a larger PAGE_CACHE_SIZE +value don't get as good compression as they can. + +The cost of option 2 relative to option 1 is that the code uses +variables instead of #define'd constants. The gain is that people +with kernels having larger PAGE_CACHE_SIZE can make use of that if +they don't mind their cramfs being inaccessible to kernels with +smaller PAGE_CACHE_SIZE values. + +Option 3 is easy to implement if we don't mind being CPU-inefficient: +e.g. get readpage to decompress to a buffer of size MAX_BLKSIZE (which +must be no larger than 32KB) and discard what it doesn't need. +Getting readpage to read into all the covered pages is harder. + +The main advantage of option 3 over 1, 2, is better compression. The +cost is greater complexity. Probably not worth it, but I hope someone +will disagree. (If it is implemented, then I'll re-use that code in +e2compr.) + + +Another cost of 2 and 3 over 1 is making mkcramfs use a different +block size, but that just means adding and parsing a -b option. + + +Inode Size +---------- + +Given that cramfs will probably be used for CDs etc. as well as just +silicon ROMs, it might make sense to expand the inode a little from +its current 12 bytes. Inodes other than the root inode are followed +by filename, so the expansion doesn't even have to be a multiple of 4 +bytes. diff --git a/fs/cramfs/cramfs.h b/fs/cramfs/cramfs.h index e98cd7309054..b7e4e76003ff 100644 --- a/fs/cramfs/cramfs.h +++ b/fs/cramfs/cramfs.h @@ -5,17 +5,20 @@ #define CRAMFS_SIGNATURE "Compressed ROMFS" /* - * Reasonably terse representation of the inode - * data.. When the mode of the inode indicates - * a special device node, the "offset" bits will - * encode i_rdev. In other cases, "offset" points - * to the ROM image for the actual file data - * (whether that data be directory or compressed - * file data depends on the inode type again) + * Reasonably terse representation of the inode data. */ struct cramfs_inode { u32 mode:16, uid:16; + /* SIZE for device files is i_rdev */ u32 size:24, gid:8; + /* NAMELEN is the length of the file name, divided by 4 and + rounded up. (cramfs doesn't support hard links.) */ + /* OFFSET: For symlinks and non-empty regular files, this + contains the offset (divided by 4) of the file data in + compressed form (starting with an array of block pointers; + see README). For non-empty directories it is the offset + (divided by 4) of the inode of the first file in that + directory. For anything else, offset is zero. */ u32 namelen:6, offset:26; }; @@ -24,7 +27,8 @@ struct cramfs_inode { */ struct cramfs_super { u32 magic; /* 0x28cd3d45 - random number */ - u32 size; /* > offset, < 2**26 */ + u32 size; /* Not used. mkcramfs currently + writes a constant 1<<16 here. */ u32 flags; /* 0 */ u32 future; /* 0 */ u8 signature[16]; /* "Compressed ROMFS" */ @@ -33,6 +37,13 @@ struct cramfs_super { struct cramfs_inode root; /* Root inode data */ }; +/* + * Valid values in super.flags. Currently we refuse to mount + * if (flags & ~CRAMFS_SUPPORTED_FLAGS). Maybe that should be + * changed to test super.future instead. + */ +#define CRAMFS_SUPPORTED_FLAGS (0xff) + /* Uncompression interfaces to the underlying zlib */ int cramfs_uncompress_block(void *dst, int dstlen, void *src, int srclen); int cramfs_uncompress_init(void); diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c index 1bd40cb92ba5..07c8f15a1015 100644 --- a/fs/cramfs/inode.c +++ b/fs/cramfs/inode.c @@ -27,7 +27,10 @@ static struct inode_operations cramfs_file_inode_operations; static struct inode_operations cramfs_dir_inode_operations; static struct inode_operations cramfs_symlink_inode_operations; +/* These two macros may change in future, to provide better st_ino + semantics. */ #define CRAMINO(x) ((x)->offset?(x)->offset<<2:1) +#define OFFSET(x) ((x)->i_ino) static struct inode *get_cramfs_inode(struct super_block *sb, struct cramfs_inode * cramfs_inode) { @@ -41,6 +44,12 @@ static struct inode *get_cramfs_inode(struct super_block *sb, struct cramfs_inod inode->i_ino = CRAMINO(cramfs_inode); inode->i_sb = sb; inode->i_dev = sb->s_dev; + inode->i_nlink = 1; /* arguably wrong for directories, + but it's the best we can do + without reading the directory + contents. 1 yields the right + result in GNU find, even + without -noleaf option. */ insert_inode_hash(inode); if (S_ISREG(inode->i_mode)) inode->i_op = &cramfs_file_inode_operations; @@ -62,45 +71,75 @@ static struct inode *get_cramfs_inode(struct super_block *sb, struct cramfs_inod * up the accesses should be fairly regular and cached in the * page cache and dentry tree anyway.. * - * This also acts as a way to guarantee contiguous areas of - * up to 2*PAGE_CACHE_SIZE, so that the caller doesn't need - * to worry about end-of-buffer issues even when decompressing - * a full page cache. + * This also acts as a way to guarantee contiguous areas of up to + * BLKS_PER_BUF*PAGE_CACHE_SIZE, so that the caller doesn't need to + * worry about end-of-buffer issues even when decompressing a full + * page cache. */ #define READ_BUFFERS (2) -static unsigned char read_buffers[READ_BUFFERS][PAGE_CACHE_SIZE*4]; -static int buffer_blocknr[READ_BUFFERS]; -static int last_buffer = 0; +/* NEXT_BUFFER(): Loop over [0..(READ_BUFFERS-1)]. */ +#define NEXT_BUFFER(_ix) ((_ix) ^ 1) -static void *cramfs_read(struct super_block *sb, unsigned int offset) +/* + * BLKS_PER_BUF_SHIFT must be at least 1 to allow for "compressed" + * data that takes up more space than the original. 1 is guaranteed + * to suffice, though. Larger values provide more read-ahead and + * proportionally less wastage at the end of the buffer. + */ +#define BLKS_PER_BUF_SHIFT (2) +#define BLKS_PER_BUF (1 << BLKS_PER_BUF_SHIFT) +static unsigned char read_buffers[READ_BUFFERS][BLKS_PER_BUF][PAGE_CACHE_SIZE]; +static unsigned buffer_blocknr[READ_BUFFERS]; +static int next_buffer = 0; + +/* + * Returns a pointer to a buffer containing at least LEN bytes of + * filesystem starting at byte offset OFFSET into the filesystem. + */ +static void *cramfs_read(struct super_block *sb, unsigned int offset, unsigned int len) { - struct buffer_head * bh_array[4]; - int i, blocknr, buffer; + struct buffer_head * bh_array[BLKS_PER_BUF]; + unsigned i, blocknr, last_blocknr, buffer; + if (!len) + return NULL; blocknr = offset >> PAGE_CACHE_SHIFT; - offset &= PAGE_CACHE_SIZE-1; + last_blocknr = (offset + len - 1) >> PAGE_CACHE_SHIFT; + if (last_blocknr - blocknr >= BLKS_PER_BUF) + goto eek; resume: + offset &= PAGE_CACHE_SIZE - 1; for (i = 0; i < READ_BUFFERS; i++) { - if (blocknr == buffer_blocknr[i]) - return read_buffers[i] + offset; + if ((blocknr >= buffer_blocknr[i]) && + (last_blocknr - buffer_blocknr[i] < BLKS_PER_BUF)) + return &read_buffers[i][blocknr - buffer_blocknr[i]][offset]; } - /* Ok, read in four buffers completely first */ - for (i = 0; i < 4; i++) + /* Ok, read in BLKS_PER_BUF pages completely first. */ + for (i = 0; i < BLKS_PER_BUF; i++) bh_array[i] = bread(sb->s_dev, blocknr + i, PAGE_CACHE_SIZE); - /* Ok, copy them to the staging area without sleeping.. */ - buffer = last_buffer; - last_buffer = buffer ^ 1; + /* Ok, copy them to the staging area without sleeping. */ + buffer = next_buffer; + next_buffer = NEXT_BUFFER(buffer); buffer_blocknr[buffer] = blocknr; - for (i = 0; i < 4; i++) { + for (i = 0; i < BLKS_PER_BUF; i++) { struct buffer_head * bh = bh_array[i]; if (bh) { - memcpy(read_buffers[buffer] + i*PAGE_CACHE_SIZE, bh->b_data, PAGE_CACHE_SIZE); + memcpy(read_buffers[buffer][i], bh->b_data, PAGE_CACHE_SIZE); bforget(bh); - } - blocknr++; + } else + memset(read_buffers[buffer][i], 0, PAGE_CACHE_SIZE); } - return read_buffers[buffer] + offset; + return read_buffers[buffer][0] + offset; + + eek: + printk(KERN_ERR + "cramfs (device %s): requested chunk (%u:+%u) bigger than buffer\n", + bdevname(sb->s_dev), offset, len); + /* TODO: return EIO to process or kill the current process + instead of resuming. */ + *((int *)0) = 0; /* XXX: doesn't work on all archs */ + goto resume; } @@ -121,7 +160,7 @@ static struct super_block * cramfs_read_super(struct super_block *sb, void *data buffer_blocknr[i] = -1; /* Read the first block and get the superblock from it */ - memcpy(&super, cramfs_read(sb, 0), sizeof(super)); + memcpy(&super, cramfs_read(sb, 0, sizeof(super)), sizeof(super)); /* Do sanity checks on the superblock */ if (super.magic != CRAMFS_MAGIC) { @@ -132,21 +171,23 @@ static struct super_block * cramfs_read_super(struct super_block *sb, void *data printk("wrong signature\n"); goto out; } - - /* Check that the root inode is in a sane state */ - root_offset = super.root.offset << 2; - if (root_offset < sizeof(struct cramfs_super)) { - printk("root offset too small\n"); - goto out; - } - if (root_offset >= super.size) { - printk("root offset too large (%lu %u)\n", root_offset, super.size); + if (super.flags & ~CRAMFS_SUPPORTED_FLAGS) { + printk("unsupported filesystem features\n"); goto out; } + + /* Check that the root inode is in a sane state */ if (!S_ISDIR(super.root.mode)) { printk("root is not a directory\n"); goto out; } + root_offset = super.root.offset << 2; + if (root_offset == 0) + printk(KERN_INFO "cramfs: note: empty filesystem"); + else if (root_offset != sizeof(struct cramfs_super)) { + printk("bad root offset %lu\n", root_offset); + goto out; + } /* Set it all up.. */ sb->s_op = &cramfs_ops; @@ -168,19 +209,20 @@ static int cramfs_statfs(struct super_block *sb, struct statfs *buf, int bufsize { struct statfs tmp; - memset(&tmp, 0, sizeof(tmp)); + /* Unsupported fields set to -1 as per man page. */ + memset(&tmp, 0xff, sizeof(tmp)); + tmp.f_type = CRAMFS_MAGIC; tmp.f_bsize = PAGE_CACHE_SIZE; - tmp.f_blocks = 0; + tmp.f_bfree = 0; + tmp.f_bavail = 0; + tmp.f_ffree = 0; tmp.f_namelen = 255; return copy_to_user(buf, &tmp, bufsize) ? -EFAULT : 0; } /* - * Read a cramfs directory entry.. - * - * Remember: the inode number is the byte offset of the start - * of the directory.. + * Read a cramfs directory entry. */ static int cramfs_readdir(struct file *filp, void *dirent, filldir_t filldir) { @@ -189,7 +231,7 @@ static int cramfs_readdir(struct file *filp, void *dirent, filldir_t filldir) unsigned int offset; int copied; - /* Offset within the thing.. */ + /* Offset within the thing. */ offset = filp->f_pos; if (offset >= inode->i_size) return 0; @@ -204,7 +246,7 @@ static int cramfs_readdir(struct file *filp, void *dirent, filldir_t filldir) char *name; int namelen, error; - de = cramfs_read(sb, offset + inode->i_ino); + de = cramfs_read(sb, OFFSET(inode) + offset, sizeof(*de)+256); name = (char *)(de+1); /* @@ -244,7 +286,7 @@ static struct dentry * cramfs_lookup(struct inode *dir, struct dentry *dentry) char *name; int namelen; - de = cramfs_read(dir->i_sb, offset + dir->i_ino); + de = cramfs_read(dir->i_sb, OFFSET(dir) + offset, sizeof(*de)+256); name = (char *)(de+1); namelen = de->namelen << 2; offset += sizeof(*de) + namelen; @@ -274,27 +316,29 @@ static struct dentry * cramfs_lookup(struct inode *dir, struct dentry *dentry) static int cramfs_readpage(struct dentry *dentry, struct page * page) { struct inode *inode = dentry->d_inode; - unsigned long maxblock, bytes; + u32 maxblock, bytes_filled; maxblock = (inode->i_size + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; - bytes = 0; + bytes_filled = 0; if (page->index < maxblock) { struct super_block *sb = inode->i_sb; - unsigned long block_offset = inode->i_ino + page->index*4; - unsigned long start_offset = inode->i_ino + maxblock*4; - unsigned long end_offset; + u32 blkptr_offset = OFFSET(inode) + page->index*4; + u32 start_offset, compr_len; - end_offset = *(u32 *) cramfs_read(sb, block_offset); + start_offset = OFFSET(inode) + maxblock*4; if (page->index) - start_offset = *(u32 *) cramfs_read(sb, block_offset-4); - - bytes = inode->i_size & (PAGE_CACHE_SIZE - 1); - if (page->index < maxblock) - bytes = PAGE_CACHE_SIZE; - - cramfs_uncompress_block((void *) page_address(page), PAGE_CACHE_SIZE, cramfs_read(sb, start_offset), end_offset - start_offset); + start_offset = *(u32 *) cramfs_read(sb, blkptr_offset-4, 4); + compr_len = (*(u32 *) cramfs_read(sb, blkptr_offset, 4) + - start_offset); + if (compr_len == 0) + ; /* hole */ + else + bytes_filled = cramfs_uncompress_block((void *) page_address(page), + PAGE_CACHE_SIZE, + cramfs_read(sb, start_offset, compr_len), + compr_len); } - memset((void *) (page_address(page) + bytes), 0, PAGE_CACHE_SIZE - bytes); + memset((void *) (page_address(page) + bytes_filled), 0, PAGE_CACHE_SIZE - bytes_filled); SetPageUptodate(page); UnlockPage(page); return 0; diff --git a/fs/cramfs/uncompress.c b/fs/cramfs/uncompress.c index 8e92eb1229c0..7a34b2b30571 100644 --- a/fs/cramfs/uncompress.c +++ b/fs/cramfs/uncompress.c @@ -22,6 +22,7 @@ static z_stream stream; static int initialized = 0; +/* Returns length of decompressed data. */ int cramfs_uncompress_block(void *dst, int dstlen, void *src, int srclen) { int err; @@ -32,14 +33,22 @@ int cramfs_uncompress_block(void *dst, int dstlen, void *src, int srclen) stream.next_out = dst; stream.avail_out = dstlen; - inflateReset(&stream); + err = inflateReset(&stream); + if (err != Z_OK) { + printk("inflateReset error %d\n", err); + inflateEnd(&stream); + inflateInit(&stream); + } err = inflate(&stream, Z_FINISH); - if (err != Z_STREAM_END) { - printk("Error %d while decompressing!\n", err); - printk("%p(%d)->%p(%d)\n", src, srclen, dst, dstlen); - } + if (err != Z_STREAM_END) + goto err; return stream.total_out; + +err: + printk("Error %d while decompressing!\n", err); + printk("%p(%d)->%p(%d)\n", src, srclen, dst, dstlen); + return 0; } int cramfs_uncompress_init(void) diff --git a/fs/ext2/file.c b/fs/ext2/file.c index 1c915e274c02..df010f223b20 100644 --- a/fs/ext2/file.c +++ b/fs/ext2/file.c @@ -28,7 +28,7 @@ #define MIN(a,b) (((a)<(b))?(a):(b)) #define MAX(a,b) (((a)>(b))?(a):(b)) -static long long ext2_file_lseek(struct file *, long long, int); +static loff_t ext2_file_lseek(struct file *, loff_t, int); static int ext2_open_file (struct inode *, struct file *); #define EXT2_MAX_SIZE(bits) \ @@ -45,9 +45,9 @@ EXT2_MAX_SIZE(10), EXT2_MAX_SIZE(11), EXT2_MAX_SIZE(12), EXT2_MAX_SIZE(13) /* * Make sure the offset never goes beyond the 32-bit mark.. */ -static long long ext2_file_lseek( +static loff_t ext2_file_lseek( struct file *file, - long long offset, + loff_t offset, int origin) { struct inode *inode = file->f_dentry->d_inode; diff --git a/fs/lockd/xdr.c b/fs/lockd/xdr.c index 85fb7c729090..cb090cfd35fc 100644 --- a/fs/lockd/xdr.c +++ b/fs/lockd/xdr.c @@ -95,8 +95,8 @@ nlm_decode_fh(u32 *p, struct nfs_fh *f) if ((len = ntohl(*p++)) != sizeof(*f)) { printk(KERN_NOTICE - "lockd: bad fhandle size %x (should be %d)\n", - len, sizeof(*f)); + "lockd: bad fhandle size %u (should be %lu)\n", + len, (unsigned long) sizeof(*f)); return NULL; } memcpy(f, p, sizeof(*f)); diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index abf7f16f9568..aae8d3d0ab5d 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -681,7 +681,7 @@ printk("nfs_notify_change: revalidate failed, error=%d\n", error); if (attr->ia_valid & ATTR_SIZE) { if (attr->ia_size != fattr.size) printk("nfs_notify_change: attr=%Ld, fattr=%d??\n", - attr->ia_size, fattr.size); + (long long) attr->ia_size, fattr.size); inode->i_size = attr->ia_size; inode->i_mtime = fattr.mtime.seconds; } diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index 14b55c4501ba..ed84d4a3c96f 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -221,7 +221,7 @@ exp_export(struct nfsctl_export *nxp) dprintk("exp_export called for %s:%s (%x/%ld fl %x).\n", nxp->ex_client, nxp->ex_path, - nxp->ex_dev, nxp->ex_ino, nxp->ex_flags); + nxp->ex_dev, (long) nxp->ex_ino, nxp->ex_flags); dev = to_kdev_t(nxp->ex_dev); ino = nxp->ex_ino; @@ -453,11 +453,11 @@ exp_rootfh(struct svc_client *clp, kdev_t dev, ino_t ino, ino = dentry->d_inode->i_ino; dprintk("nfsd: exp_rootfh(%s [%p] %s:%x/%ld)\n", - path, dentry, clp->cl_ident, dev, ino); + path, dentry, clp->cl_ident, dev, (long) ino); exp = exp_parent(clp, dev, dentry); } else { dprintk("nfsd: exp_rootfh(%s:%x/%ld)\n", - clp->cl_ident, dev, ino); + clp->cl_ident, dev, (long) ino); if ((exp = exp_get(clp, dev, ino))) if (!(dentry = dget(exp->ex_dentry))) { printk("exp_rootfh: Aieee, NULL dentry\n"); @@ -478,7 +478,7 @@ exp_rootfh(struct svc_client *clp, kdev_t dev, ino_t ino, printk("exp_rootfh: Aieee, ino/dev mismatch\n"); printk("exp_rootfh: arg[dev(%x):ino(%ld)]" " inode[dev(%x):ino(%ld)]\n", - dev, ino, inode->i_dev, inode->i_ino); + dev, (long) ino, inode->i_dev, (long) inode->i_ino); } /* diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c index ce3b08e9d79b..e0636f6352a9 100644 --- a/fs/nfsd/nfsfh.c +++ b/fs/nfsd/nfsfh.c @@ -614,7 +614,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry) struct dentry *parent = dentry->d_parent; dprintk("nfsd: fh_compose(exp %x/%ld %s/%s, ino=%ld)\n", - exp->ex_dev, exp->ex_ino, + exp->ex_dev, (long) exp->ex_ino, parent->d_name.name, dentry->d_name.name, (inode ? inode->i_ino : 0)); diff --git a/fs/proc/generic.c b/fs/proc/generic.c index 5f43c691e885..3017323b2aeb 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c @@ -20,7 +20,7 @@ static ssize_t proc_file_read(struct file * file, char * buf, size_t nbytes, loff_t *ppos); static ssize_t proc_file_write(struct file * file, const char * buffer, size_t count, loff_t *ppos); -static long long proc_file_lseek(struct file *, long long, int); +static loff_t proc_file_lseek(struct file *, loff_t, int); int proc_match(int len, const char *name,struct proc_dir_entry * de) { @@ -139,8 +139,8 @@ proc_file_write(struct file * file, const char * buffer, } -static long long -proc_file_lseek(struct file * file, long long offset, int orig) +static loff_t +proc_file_lseek(struct file * file, loff_t offset, int orig) { switch (orig) { case 0: diff --git a/fs/ufs/super.c b/fs/ufs/super.c index 11a13baecd6f..901c91ff28b9 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c @@ -452,8 +452,14 @@ struct super_block * ufs_read_super (struct super_block * sb, void * data, MOD_INC_USE_COUNT; lock_super (sb); + UFSD(("flag %u\n", (int)(sb->s_flags & MS_RDONLY))) + #ifndef CONFIG_UFS_FS_WRITE - sb->s_flags |= MS_RDONLY; + if (!(sb->s_flags & MS_RDONLY)) { + printk("ufs was compiled with read-only support, " + "can't be mounted as read-write\n"); + goto failed; + } #endif /* * Set default mount options @@ -632,12 +638,14 @@ magic_found: uspi->s_fmask = SWAB32(usb1->fs_fmask); uspi->s_fshift = SWAB32(usb1->fs_fshift); - if (uspi->s_bsize != 4096 && uspi->s_bsize != 8192) { - printk("ufs_read_super: fs_bsize %u != {4096, 8192}\n", uspi->s_bsize); + if (uspi->s_bsize != 4096 && uspi->s_bsize != 8192 + && uspi->s_bsize != 32768) { + printk("ufs_read_super: fs_bsize %u != {4096, 8192, 32768}\n", uspi->s_bsize); goto failed; } - if (uspi->s_fsize != 512 && uspi->s_fsize != 1024 && uspi->s_fsize != 2048) { - printk("ufs_read_super: fs_fsize %u != {512, 1024, 2048}\n", uspi->s_fsize); + if (uspi->s_fsize != 512 && uspi->s_fsize != 1024 + && uspi->s_fsize != 2048 && uspi->s_fsize != 4096) { + printk("ufs_read_super: fs_fsize %u != {512, 1024, 2048. 4096}\n", uspi->s_fsize); goto failed; } if (uspi->s_fsize != block_size || uspi->s_sbsize != super_block_size) { @@ -869,10 +877,15 @@ int ufs_remount (struct super_block * sb, int * mount_flags, char * data) printk("ufstype can't be changed during remount\n"); return -EINVAL; } - sb->u.ufs_sb.s_mount_opt = new_mount_opt; - if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) + if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) { + sb->u.ufs_sb.s_mount_opt = new_mount_opt; return 0; + } + + /* + * fs was mouted as rw, remounting ro + */ if (*mount_flags & MS_RDONLY) { ufs_put_cylinder_structures(sb); usb1->fs_time = SWAB32(CURRENT_TIME); @@ -883,18 +896,29 @@ int ufs_remount (struct super_block * sb, int * mount_flags, char * data) sb->s_dirt = 0; sb->s_flags |= MS_RDONLY; } + /* + * fs was mounted as ro, remounting rw + */ else { +#ifndef CONFIG_UFS_FS_WRITE + printk("ufs was compiled with read-only support, " + "can't be mounted as read-write\n"); + return -EINVAL; +#else if (ufstype != UFS_MOUNT_UFSTYPE_SUN && - ufstype != UFS_MOUNT_UFSTYPE_44BSD) { + ufstype != UFS_MOUNT_UFSTYPE_44BSD && + ufstype != UFS_MOUNT_UFSTYPE_SUNx86) { printk("this ufstype is read-only supported\n"); - return 0; + return -EINVAL; } if (!ufs_read_cylinder_structures (sb)) { printk("failed during remounting\n"); - return 0; + return -EPERM; } sb->s_flags &= ~MS_RDONLY; +#endif } + sb->u.ufs_sb.s_mount_opt = new_mount_opt; return 0; } diff --git a/include/asm-alpha/core_cia.h b/include/asm-alpha/core_cia.h index b549029d1698..34b2f03b87e1 100644 --- a/include/asm-alpha/core_cia.h +++ b/include/asm-alpha/core_cia.h @@ -218,32 +218,12 @@ * Data structure for handling CIA machine checks. */ -/* EV5-specific info. */ -struct el_CIA_procdata { - unsigned long shadow[8]; /* PALmode shadow registers */ - unsigned long paltemp[24]; /* PAL temporary registers */ - /* EV5-specific fields */ - unsigned long exc_addr; /* Address of excepting instruction. */ - unsigned long exc_sum; /* Summary of arithmetic traps. */ - unsigned long exc_mask; /* Exception mask (from exc_sum). */ - unsigned long exc_base; /* PALbase at time of exception. */ - unsigned long isr; /* Interrupt summary register. */ - unsigned long icsr; /* Ibox control register. */ - unsigned long ic_perr_stat; - unsigned long dc_perr_stat; - unsigned long va; /* Effective VA of fault or miss. */ - unsigned long mm_stat; - unsigned long sc_addr; - unsigned long sc_stat; - unsigned long bc_tag_addr; - unsigned long ei_addr; - unsigned long fill_syn; - unsigned long ei_stat; - unsigned long ld_lock; -}; - /* System-specific info. */ struct el_CIA_sysdata_mcheck { +#if 0 + /* ??? Where did this come from. It appears to bear no + relation to the cia logout written in the milo sources. + Who knows what happens in the srm console... */ unsigned long coma_gcr; unsigned long coma_edsr; unsigned long coma_ter; @@ -285,6 +265,19 @@ struct el_CIA_sysdata_mcheck { unsigned long epic_data5; unsigned long epic_data6; unsigned long epic_data7; +#else + unsigned long cpu_err0; + unsigned long cpu_err1; + unsigned long cia_err; + unsigned long cia_stat; + unsigned long err_mask; + unsigned long cia_syn; + unsigned long mem_err0; + unsigned long mem_err1; + unsigned long pci_err0; + unsigned long pci_err1; + unsigned long pci_err2; +#endif }; diff --git a/include/asm-alpha/core_pyxis.h b/include/asm-alpha/core_pyxis.h index efdcd7d43b4d..2850a949ccf3 100644 --- a/include/asm-alpha/core_pyxis.h +++ b/include/asm-alpha/core_pyxis.h @@ -203,6 +203,10 @@ * Data structure for handling PYXIS machine checks: */ struct el_PYXIS_sysdata_mcheck { +#if 0 + /* ??? Where did this come from. It appears to bear no + relation to the pyxis logout written in the milo sources. + Who knows what happens in the srm console... */ u_long coma_gcr; u_long coma_edsr; u_long coma_ter; @@ -244,6 +248,19 @@ struct el_PYXIS_sysdata_mcheck { u_long epic_data5; u_long epic_data6; u_long epic_data7; +#else + unsigned long cpu_err0; + unsigned long cpu_err1; + unsigned long cia_err; + unsigned long cia_stat; + unsigned long err_mask; + unsigned long cia_syn; + unsigned long mem_err0; + unsigned long mem_err1; + unsigned long pci_err0; + unsigned long pci_err1; + unsigned long pci_err2; +#endif }; diff --git a/include/asm-alpha/pci.h b/include/asm-alpha/pci.h index f78c9b975032..cc4ecb4bbd68 100644 --- a/include/asm-alpha/pci.h +++ b/include/asm-alpha/pci.h @@ -1,6 +1,8 @@ #ifndef __ALPHA_PCI_H #define __ALPHA_PCI_H +#include + /* * The following structure is used to manage multiple PCI busses. */ @@ -27,5 +29,8 @@ struct pci_controler { #define pcibios_assign_all_busses() 1 +#define PCIBIOS_MIN_IO alpha_mv.min_io_address +#define PCIBIOS_MIN_MEM alpha_mv.min_mem_address + #endif /* __ALPHA_PCI_H */ diff --git a/include/asm-i386/hardirq.h b/include/asm-i386/hardirq.h index 4679cb3ef63c..fc8ff9016b3f 100644 --- a/include/asm-i386/hardirq.h +++ b/include/asm-i386/hardirq.h @@ -25,6 +25,7 @@ extern unsigned int local_irq_count[NR_CPUS]; #else #include +#include extern unsigned char global_irq_holder; extern unsigned volatile int global_irq_lock; diff --git a/include/asm-i386/pci.h b/include/asm-i386/pci.h index d7c59f21be21..ef5198dfca17 100644 --- a/include/asm-i386/pci.h +++ b/include/asm-i386/pci.h @@ -7,5 +7,8 @@ #define pcibios_assign_all_busses() 0 +#define PCIBIOS_MIN_IO 0x1000 +#define PCIBIOS_MIN_MEM 0x10000000 + #endif /* __i386_PCI_H */ diff --git a/include/asm-i386/smplock.h b/include/asm-i386/smplock.h index ed5c5825406a..2c4b30791144 100644 --- a/include/asm-i386/smplock.h +++ b/include/asm-i386/smplock.h @@ -5,6 +5,8 @@ */ #include #include +#include +#include extern spinlock_t kernel_flag; diff --git a/include/linux/acpi.h b/include/linux/acpi.h index f2f655150fb4..0c3fd8d9e6fb 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -401,4 +401,32 @@ enum #define ACPI_PIIX4_PMREGMISC 0x80 #define ACPI_PIIX4_PMIOSE 0x01 +/* + * VIA-specific ACPI info (for systems with VT82C586B but no ACPI tables) + */ + +#define ACPI_VIA_INT_MODEL 0x00 + +#define ACPI_VIA_SMI_CMD 0x002f +#define ACPI_VIA_ACPI_ENABLE 0xa1 +#define ACPI_VIA_ACPI_DISABLE 0xa0 + +#define ACPI_VIA_PM1_EVT 0x0000 +#define ACPI_VIA_PM1_CNT 0x0004 +#define ACPI_VIA_PM_TMR 0x0008 +#define ACPI_VIA_GPE0 0x0020 +#define ACPI_VIA_P_BLK 0x0010 + +#define ACPI_VIA_PM1_EVT_LEN 0x04 +#define ACPI_VIA_PM1_CNT_LEN 0x02 +#define ACPI_VIA_PM_TM_LEN 0x04 +#define ACPI_VIA_GPE0_LEN 0x04 + +#define ACPI_VIA_DUTY_OFFSET 1 +#define ACPI_VIA_DUTY_WIDTH 3 + +#define ACPI_VIA_DAY_ALARM 0x7d +#define ACPI_VIA_MON_ALARM 0x7e +#define ACPI_VIA_CENTURY 0x7f + #endif /* _LINUX_ACPI_H */ diff --git a/include/linux/fs.h b/include/linux/fs.h index 63edd1245896..0046b3f7e019 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -773,7 +773,6 @@ extern int unregister_blkdev(unsigned int, const char *); extern struct block_device *bdget(dev_t); extern void bdput(struct block_device *); extern int blkdev_open(struct inode *, struct file *); -extern int blkdev_close(struct inode *, struct file *); extern struct file_operations def_blk_fops; extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long); extern int blkdev_get(struct block_device *, mode_t, unsigned, int); @@ -1025,7 +1024,6 @@ extern int change_root(kdev_t, const char *); extern ssize_t char_read(struct file *, char *, size_t, loff_t *); extern ssize_t block_read(struct file *, char *, size_t, loff_t *); -extern int block_fsync(struct file *, struct dentry *); extern int read_ahead[]; extern ssize_t char_write(struct file *, const char *, size_t, loff_t *); diff --git a/include/linux/init.h b/include/linux/init.h index 98497fe18ef3..28bcbbc86f18 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -68,9 +68,9 @@ extern struct kernel_param __setup_start, __setup_end; * or exit time. */ #define __init __attribute__ ((__section__ (".text.init"))) -#define __exit __attribute__ ((unused, __section__(".text.init"))) +#define __exit __attribute__ ((unused, __section__(".text.exit"))) #define __initdata __attribute__ ((__section__ (".data.init"))) -#define __exitdata __attribute__ ((unused, __section__ (".data.init"))) +#define __exitdata __attribute__ ((unused, __section__ (".data.exit"))) #define __initsetup __attribute__ ((unused,__section__ (".setup.init"))) #define __init_call __attribute__ ((unused,__section__ (".initcall.init"))) @@ -113,4 +113,16 @@ extern struct kernel_param __setup_start, __setup_end; #define __initlocaldata #endif +#ifdef CONFIG_HOTPLUG +#define __devinit +#define __devinitdata +#define __devexit +#define __devexitdata +#else +#define __devinit __init +#define __devinitdata __initdata +#define __devexit __exit +#define __devexitdata __exitdata +#endif + #endif /* _LINUX_INIT_H */ diff --git a/include/linux/mm.h b/include/linux/mm.h index b2f7487bff10..1c9ca4b65951 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -44,7 +44,7 @@ struct vm_area_struct { struct vm_area_struct *vm_next; pgprot_t vm_page_prot; - unsigned short vm_flags; + unsigned long vm_flags; /* AVL tree of VM areas per task, sorted by address */ short vm_avl_height; @@ -66,26 +66,26 @@ struct vm_area_struct { /* * vm_flags.. */ -#define VM_READ 0x0001 /* currently active flags */ -#define VM_WRITE 0x0002 -#define VM_EXEC 0x0004 -#define VM_SHARED 0x0008 - -#define VM_MAYREAD 0x0010 /* limits for mprotect() etc */ -#define VM_MAYWRITE 0x0020 -#define VM_MAYEXEC 0x0040 -#define VM_MAYSHARE 0x0080 - -#define VM_GROWSDOWN 0x0100 /* general info on the segment */ -#define VM_GROWSUP 0x0200 -#define VM_SHM 0x0400 /* shared memory area, don't swap out */ -#define VM_DENYWRITE 0x0800 /* ETXTBSY on write attempts.. */ - -#define VM_EXECUTABLE 0x1000 -#define VM_LOCKED 0x2000 -#define VM_IO 0x4000 /* Memory mapped I/O or similar */ - -#define VM_STACK_FLAGS 0x0177 +#define VM_READ 0x00000001 /* currently active flags */ +#define VM_WRITE 0x00000002 +#define VM_EXEC 0x00000004 +#define VM_SHARED 0x00000008 + +#define VM_MAYREAD 0x00000010 /* limits for mprotect() etc */ +#define VM_MAYWRITE 0x00000020 +#define VM_MAYEXEC 0x00000040 +#define VM_MAYSHARE 0x00000080 + +#define VM_GROWSDOWN 0x00000100 /* general info on the segment */ +#define VM_GROWSUP 0x00000200 +#define VM_SHM 0x00000400 /* shared memory area, don't swap out */ +#define VM_DENYWRITE 0x00000800 /* ETXTBSY on write attempts.. */ + +#define VM_EXECUTABLE 0x00001000 +#define VM_LOCKED 0x00002000 +#define VM_IO 0x00004000 /* Memory mapped I/O or similar */ + +#define VM_STACK_FLAGS 0x00000177 /* * mapping from the currently active vm_flags protection bits (the diff --git a/include/linux/module.h b/include/linux/module.h index ce2d3aa98a09..56d29ce62727 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -188,6 +188,10 @@ const char __module_parm_desc_##var[] \ __attribute__((section(".modinfo"))) = \ "parm_desc_" __MODULE_STRING(var) "=" desc +#define MODULE_DEVICE_TABLE(type,name) \ +const struct type##_device_id * __module_##type##_device_table = name +/* not put to .modinfo section to avoid section type conflicts */ + /* The attributes of a section are set the first time the section is seen; we want .modinfo to not be allocated. */ @@ -218,6 +222,7 @@ const char __module_using_checksums[] __attribute__((section(".modinfo"))) = #define MODULE_SUPPORTED_DEVICE(name) #define MODULE_PARM(var,type) #define MODULE_PARM_DESC(var,desc) +#define MODULE_DEVICE_TABLE(type,name) #ifndef __GENKSYMS__ diff --git a/include/linux/pci.h b/include/linux/pci.h index 5b4abfd562c9..a8cfb2cfb186 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -495,17 +495,27 @@ int pci_assign_resource(struct pci_dev *dev, int i); /* Helper functions for low-level code (drivers/pci/setup.c) */ int pci_claim_resource(struct pci_dev *, int); -void pci_assign_unassigned_resources(u32 min_io, u32 min_mem); +void pci_assign_unassigned_resources(void); void pci_set_bus_ranges(void); void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), int (*)(struct pci_dev *, u8, u8)); /* New-style probing supporting hot-pluggable devices */ +struct pci_device_id { + unsigned int vendor, device; /* Vendor and device ID or PCI_ANY_ID */ + unsigned int subvendor, subdevice; /* Subsystem ID's or PCI_ANY_ID */ + unsigned int class, class_mask; /* (class,subclass,prog-if) triplet */ + unsigned long driver_data; /* Data private to the driver */ +}; + +#define PCI_ID(vendor,device) (((vendor)<<16) | (device)) + struct pci_driver { struct list_head node; char *name; - int (*probe)(struct pci_dev *dev); /* New device inserted, check if known */ + struct pci_device_id *id_table; /* NULL if wants all devices */ + int (*probe)(struct pci_dev *dev, struct pci_device_id *id); /* New device inserted */ void (*remove)(struct pci_dev *dev); /* Device removed */ void (*suspend)(struct pci_dev *dev); /* Device suspended */ void (*resume)(struct pci_dev *dev); /* Device woken up */ diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 5705c01e6a73..7d8f25e72379 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -787,6 +787,7 @@ #define PCI_DEVICE_ID_RICOH_RL5C465 0x0465 #define PCI_DEVICE_ID_RICOH_RL5C466 0x0466 #define PCI_DEVICE_ID_RICOH_RL5C475 0x0475 +#define PCI_DEVICE_ID_RICOH_RL5C476 0x0476 #define PCI_DEVICE_ID_RICOH_RL5C478 0x0478 #define PCI_VENDOR_ID_ARTOP 0x1191 diff --git a/include/linux/types.h b/include/linux/types.h index 381a0748c90d..c96e510f3fec 100644 --- a/include/linux/types.h +++ b/include/linux/types.h @@ -23,6 +23,10 @@ typedef __kernel_gid32_t gid_t; typedef __kernel_uid16_t uid16_t; typedef __kernel_gid16_t gid16_t; +/* This is defined by include/asm-{arch}/posix_types.h */ +typedef __kernel_old_uid_t old_uid_t; +typedef __kernel_old_gid_t old_gid_t; + /* libc5 includes this file to define uid_t, thus uid_t can never change * when it is included by non-kernel code */ @@ -31,10 +35,6 @@ typedef __kernel_uid_t uid_t; typedef __kernel_gid_t gid_t; #endif /* __KERNEL__ */ -/* This is defined by include/asm-{arch}/posix_types.h */ -typedef __kernel_old_uid_t old_uid_t; -typedef __kernel_old_gid_t old_gid_t; - #if defined(__GNUC__) && !defined(__STRICT_ANSI__) typedef __kernel_loff_t loff_t; #endif diff --git a/include/pcmcia/cs.h b/include/pcmcia/cs.h index 7a27cb2eb956..669de1eac5ab 100644 --- a/include/pcmcia/cs.h +++ b/include/pcmcia/cs.h @@ -441,7 +441,7 @@ int pcmcia_get_card_services_info(servinfo_t *info); int pcmcia_get_first_client(client_handle_t *handle, client_req_t *req); int pcmcia_get_next_client(client_handle_t *handle, client_req_t *req); int pcmcia_get_window(window_handle_t *handle, int idx, win_req_t *req); -int pcmcia_get_first_window(client_handle_t *handle, win_req_t *req); +int pcmcia_get_first_window(window_handle_t *win, win_req_t *req); int pcmcia_get_next_window(window_handle_t *win, win_req_t *req); int pcmcia_get_status(client_handle_t handle, cs_status_t *status); int pcmcia_get_mem_page(window_handle_t win, memreq_t *req); @@ -464,6 +464,7 @@ int pcmcia_eject_card(client_handle_t handle, client_req_t *req); int pcmcia_insert_card(client_handle_t handle, client_req_t *req); int pcmcia_set_event_mask(client_handle_t handle, eventmask_t *mask); int pcmcia_report_error(client_handle_t handle, error_info_t *err); +struct pci_bus *pcmcia_lookup_bus(client_handle_t handle); /* rsrc_mgr.c */ int pcmcia_adjust_resource_info(client_handle_t handle, adjust_t *adj); diff --git a/ipc/msg.c b/ipc/msg.c index 99c1b4469b53..de2c406b975d 100644 --- a/ipc/msg.c +++ b/ipc/msg.c @@ -851,13 +851,13 @@ static int sysvipc_msg_read_proc(char *buffer, char **start, off_t offset, int l int i, len = 0; down(&msg_ids.sem); - len += sprintf(buffer, " key msqid perms cbytes qnum lspid lrpid uid gid cuid cgid stime rtime ctime\n"); + len += sprintf(buffer, " key msqid perms cbytes qnum lspid lrpid uid gid cuid cgid stime rtime ctime\n"); for(i = 0; i <= msg_ids.max_id; i++) { struct msg_queue * msq; msq = msg_lock(i); if(msq != NULL) { - len += sprintf(buffer + len, "%10d %10d %4o %5u %5u %5u %5u %5u %5u %5u %5u %10lu %10lu %10lu\n", + len += sprintf(buffer + len, "%10d %10d %4o %10lu %10lu %5u %5u %5u %5u %5u %5u %10lu %10lu %10lu\n", msq->q_perm.key, msg_buildid(i,msq->q_perm.seq), msq->q_perm.mode, diff --git a/ipc/sem.c b/ipc/sem.c index 0e4489795534..1dfdc92c0e78 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -1047,14 +1047,14 @@ static int sysvipc_sem_read_proc(char *buffer, char **start, off_t offset, int l off_t begin = 0; int i, len = 0; - len += sprintf(buffer, " key semid perms nsems uid gid cuid cgid otime ctime\n"); + len += sprintf(buffer, " key semid perms nsems uid gid cuid cgid otime ctime\n"); down(&sem_ids.sem); for(i = 0; i <= sem_ids.max_id; i++) { struct sem_array *sma; sma = sem_lock(i); if(sma) { - len += sprintf(buffer + len, "%10d %10d %4o %5u %5u %5u %5u %5u %10lu %10lu\n", + len += sprintf(buffer + len, "%10d %10d %4o %10lu %5u %5u %5u %5u %10lu %10lu\n", sma->sem_perm.key, sem_buildid(i,sma->sem_perm.seq), sma->sem_perm.mode, diff --git a/ipc/shm.c b/ipc/shm.c index b39a5eca01c3..8b4976195619 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -31,16 +31,14 @@ struct shmid_kernel /* private to the kernel */ { - struct { - struct kern_ipc_perm shm_perm; - size_t shm_segsz; - time_t shm_atime; - time_t shm_dtime; - time_t shm_ctime; - pid_t shm_cpid; - pid_t shm_lpid; - unsigned long shm_nattch; - } u; + struct kern_ipc_perm shm_perm; + size_t shm_segsz; + time_t shm_atime; + time_t shm_dtime; + time_t shm_ctime; + pid_t shm_cpid; + pid_t shm_lpid; + unsigned long shm_nattch; unsigned long shm_npages; /* size of segment (pages) */ pte_t **shm_dir; /* ptr to array of ptrs to frames -> SHMMAX */ struct vm_area_struct *attaches; /* descriptors for attaches */ @@ -57,7 +55,7 @@ static struct ipc_ids shm_ids; #define shm_get(id) ((struct shmid_kernel*)ipc_get(&shm_ids,id)) #define shm_rmid(id) ((struct shmid_kernel*)ipc_rmid(&shm_ids,id)) #define shm_checkid(s, id) \ - ipc_checkid(&shm_ids,&s->u.shm_perm,id) + ipc_checkid(&shm_ids,&s->shm_perm,id) #define shm_buildid(id, seq) \ ipc_buildid(&shm_ids, id, seq) @@ -174,7 +172,7 @@ static int shm_revalidate(struct shmid_kernel* shp, int shmid, int pagecount, in shm_unlock(shmid); return -EIDRM; } - if (ipcperms(&shp->u.shm_perm, flg)) { + if (ipcperms(&shp->shm_perm, flg)) { shm_unlock(shmid); return -EACCES; } @@ -204,28 +202,28 @@ static int newseg (key_t key, int shmflg, size_t size) kfree(shp); return -ENOMEM; } - id = ipc_addid(&shm_ids, &shp->u.shm_perm, shm_ctlmni); + id = ipc_addid(&shm_ids, &shp->shm_perm, shm_ctlmni); if(id == -1) { shm_free(shp->shm_dir,numpages); kfree(shp); return -ENOSPC; } - shp->u.shm_perm.key = key; - shp->u.shm_perm.mode = (shmflg & S_IRWXUGO); - shp->u.shm_segsz = size; - shp->u.shm_cpid = current->pid; + shp->shm_perm.key = key; + shp->shm_perm.mode = (shmflg & S_IRWXUGO); + shp->shm_segsz = size; + shp->shm_cpid = current->pid; shp->attaches = NULL; - shp->u.shm_lpid = shp->u.shm_nattch = 0; - shp->u.shm_atime = shp->u.shm_dtime = 0; - shp->u.shm_ctime = CURRENT_TIME; + shp->shm_lpid = shp->shm_nattch = 0; + shp->shm_atime = shp->shm_dtime = 0; + shp->shm_ctime = CURRENT_TIME; shp->shm_npages = numpages; - shp->id = shm_buildid(id,shp->u.shm_perm.seq); + shp->id = shm_buildid(id,shp->shm_perm.seq); init_MUTEX(&shp->sem); shm_tot += numpages; shm_unlock(id); - return shm_buildid(id,shp->u.shm_perm.seq); + return shm_buildid(id,shp->shm_perm.seq); } asmlinkage long sys_shmget (key_t key, size_t size, int shmflg) @@ -247,10 +245,10 @@ asmlinkage long sys_shmget (key_t key, size_t size, int shmflg) shp = shm_lock(id); if(shp==NULL) BUG(); - if (ipcperms(&shp->u.shm_perm, shmflg)) + if (ipcperms(&shp->shm_perm, shmflg)) err = -EACCES; else - err = shm_buildid(id, shp->u.shm_perm.seq); + err = shm_buildid(id, shp->shm_perm.seq); shm_unlock(id); } up(&shm_ids.sem); @@ -274,8 +272,8 @@ out_up: up(&shm_ids.sem); return; } - if(shm_checkid(shp,shmid) || shp->u.shm_nattch > 0 || - !(shp->u.shm_perm.mode & SHM_DEST)) { + if(shm_checkid(shp,shmid) || shp->shm_nattch > 0 || + !(shp->shm_perm.mode & SHM_DEST)) { shm_unlock(shmid); goto out_up; } @@ -464,7 +462,7 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds *buf) err = -EINVAL; if (shmid > shm_ids.max_id) goto out_unlock; - result = shm_buildid(shmid, shp->u.shm_perm.seq); + result = shm_buildid(shmid, shp->shm_perm.seq); } else { err = -EIDRM; if(shm_checkid(shp,shmid)) @@ -472,16 +470,16 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds *buf) result = 0; } err=-EACCES; - if (ipcperms (&shp->u.shm_perm, S_IRUGO)) + if (ipcperms (&shp->shm_perm, S_IRUGO)) goto out_unlock; - kernel_to_ipc64_perm(&shp->u.shm_perm, &tbuf.shm_perm); - tbuf.shm_segsz = shp->u.shm_segsz; - tbuf.shm_atime = shp->u.shm_atime; - tbuf.shm_dtime = shp->u.shm_dtime; - tbuf.shm_ctime = shp->u.shm_ctime; - tbuf.shm_cpid = shp->u.shm_cpid; - tbuf.shm_lpid = shp->u.shm_lpid; - tbuf.shm_nattch = shp->u.shm_nattch; + kernel_to_ipc64_perm(&shp->shm_perm, &tbuf.shm_perm); + tbuf.shm_segsz = shp->shm_segsz; + tbuf.shm_atime = shp->shm_atime; + tbuf.shm_dtime = shp->shm_dtime; + tbuf.shm_ctime = shp->shm_ctime; + tbuf.shm_cpid = shp->shm_cpid; + tbuf.shm_lpid = shp->shm_lpid; + tbuf.shm_nattch = shp->shm_nattch; shm_unlock(shmid); if(copy_shmid_to_user (buf, &tbuf, version)) return -EFAULT; @@ -503,7 +501,7 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds *buf) err=-EIDRM; if(shm_checkid(shp,shmid)) goto out_unlock; - ipcp = &shp->u.shm_perm; + ipcp = &shp->shm_perm; if(cmd==SHM_LOCK) { if (!(ipcp->mode & SHM_LOCKED)) { ipcp->mode |= SHM_LOCKED; @@ -538,23 +536,23 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds *buf) if(shm_checkid(shp,shmid)) goto out_unlock_up; err=-EPERM; - if (current->euid != shp->u.shm_perm.uid && - current->euid != shp->u.shm_perm.cuid && + if (current->euid != shp->shm_perm.uid && + current->euid != shp->shm_perm.cuid && !capable(CAP_SYS_ADMIN)) { goto out_unlock_up; } switch (cmd) { case IPC_SET: - shp->u.shm_perm.uid = setbuf.uid; - shp->u.shm_perm.gid = setbuf.gid; - shp->u.shm_perm.mode = (shp->u.shm_perm.mode & ~S_IRWXUGO) + shp->shm_perm.uid = setbuf.uid; + shp->shm_perm.gid = setbuf.gid; + shp->shm_perm.mode = (shp->shm_perm.mode & ~S_IRWXUGO) | (setbuf.mode & S_IRWXUGO); - shp->u.shm_ctime = CURRENT_TIME; + shp->shm_ctime = CURRENT_TIME; break; case IPC_RMID: - shp->u.shm_perm.mode |= SHM_DEST; - if (shp->u.shm_nattch <= 0) { + shp->shm_perm.mode |= SHM_DEST; + if (shp->shm_nattch <= 0) { shm_unlock(shmid); up(&shm_ids.sem); killseg (shmid); @@ -662,7 +660,7 @@ asmlinkage long sys_shmat (int shmid, char *shmaddr, int shmflg, ulong *raddr) goto out_up; err = -EACCES; - if (ipcperms(&shp->u.shm_perm, flg)) + if (ipcperms(&shp->shm_perm, flg)) goto out_unlock_up; err = -EIDRM; @@ -675,7 +673,7 @@ asmlinkage long sys_shmat (int shmid, char *shmaddr, int shmflg, ulong *raddr) err = -ENOMEM; addr = 0; again: - if (!(addr = get_unmapped_area(addr, (unsigned long)shp->u.shm_segsz))) + if (!(addr = get_unmapped_area(addr, (unsigned long)shp->shm_segsz))) goto out_unlock_up; if(addr & (SHMLBA - 1)) { addr = (addr + (SHMLBA - 1)) & ~(SHMLBA - 1); @@ -702,7 +700,7 @@ asmlinkage long sys_shmat (int shmid, char *shmaddr, int shmflg, ulong *raddr) if (addr < current->mm->start_stack && addr > current->mm->start_stack - PAGE_SIZE*(shp->shm_npages + 4)) goto out_unlock_up; - if (!(shmflg & SHM_REMAP) && find_vma_intersection(current->mm, addr, addr + (unsigned long)shp->u.shm_segsz)) + if (!(shmflg & SHM_REMAP) && find_vma_intersection(current->mm, addr, addr + (unsigned long)shp->shm_segsz)) goto out_unlock_up; shm_unlock(shmid); @@ -726,7 +724,7 @@ asmlinkage long sys_shmat (int shmid, char *shmaddr, int shmflg, ulong *raddr) shmd->vm_pgoff = 0; shmd->vm_ops = &shm_vm_ops; - shp->u.shm_nattch++; /* prevent destruction */ + shp->shm_nattch++; /* prevent destruction */ shm_unlock(shp->id); err = shm_map (shmd); shm_lock(shmid); /* cannot fail */ @@ -735,8 +733,8 @@ asmlinkage long sys_shmat (int shmid, char *shmaddr, int shmflg, ulong *raddr) insert_attach(shp,shmd); /* insert shmd into shp->attaches */ - shp->u.shm_lpid = current->pid; - shp->u.shm_atime = CURRENT_TIME; + shp->shm_lpid = current->pid; + shp->shm_atime = CURRENT_TIME; *raddr = addr; err = 0; @@ -749,7 +747,7 @@ out_up: failed_shm_map: { int delete = 0; - if (--shp->u.shm_nattch <= 0 && shp->u.shm_perm.mode & SHM_DEST) + if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) delete = 1; shm_unlock(shmid); up(¤t->mm->mmap_sem); @@ -769,9 +767,9 @@ static void shm_open (struct vm_area_struct *shmd) if(shp != shm_lock(shp->id)) BUG(); insert_attach(shp,shmd); /* insert shmd into shp->attaches */ - shp->u.shm_nattch++; - shp->u.shm_atime = CURRENT_TIME; - shp->u.shm_lpid = current->pid; + shp->shm_nattch++; + shp->shm_atime = CURRENT_TIME; + shp->shm_lpid = current->pid; shm_unlock(shp->id); } @@ -791,10 +789,10 @@ static void shm_close (struct vm_area_struct *shmd) if(shp != shm_lock(shp->id)) BUG(); remove_attach(shp,shmd); /* remove from shp->attaches */ - shp->u.shm_lpid = current->pid; - shp->u.shm_dtime = CURRENT_TIME; + shp->shm_lpid = current->pid; + shp->shm_dtime = CURRENT_TIME; id=-1; - if (--shp->u.shm_nattch <= 0 && shp->u.shm_perm.mode & SHM_DEST) + if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) id=shp->id; shm_unlock(shp->id); if(id!=-1) @@ -936,7 +934,7 @@ int shm_swap (int prio, int gfp_mask, zone_t *zone) shm_lockall(); check_id: shp = shm_get(swap_id); - if(shp==NULL || shp->u.shm_perm.mode & SHM_LOCKED) { + if(shp==NULL || shp->shm_perm.mode & SHM_LOCKED) { next_id: swap_idx = 0; if (++swap_id > shm_ids.max_id) { @@ -1061,20 +1059,20 @@ static int sysvipc_shm_read_proc(char *buffer, char **start, off_t offset, int l else format = BIG_STRING; len += sprintf(buffer + len, format, - shp->u.shm_perm.key, - shm_buildid(i, shp->u.shm_perm.seq), - shp->u.shm_perm.mode, - shp->u.shm_segsz, - shp->u.shm_cpid, - shp->u.shm_lpid, - shp->u.shm_nattch, - shp->u.shm_perm.uid, - shp->u.shm_perm.gid, - shp->u.shm_perm.cuid, - shp->u.shm_perm.cgid, - shp->u.shm_atime, - shp->u.shm_dtime, - shp->u.shm_ctime); + shp->shm_perm.key, + shm_buildid(i, shp->shm_perm.seq), + shp->shm_perm.mode, + shp->shm_segsz, + shp->shm_cpid, + shp->shm_lpid, + shp->shm_nattch, + shp->shm_perm.uid, + shp->shm_perm.gid, + shp->shm_perm.cuid, + shp->shm_perm.cgid, + shp->shm_atime, + shp->shm_dtime, + shp->shm_ctime); shm_unlock(i); pos += len; diff --git a/kernel/signal.c b/kernel/signal.c index 43d01627979b..868ff5854fb8 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -739,6 +739,7 @@ sys_rt_sigtimedwait(const sigset_t *uthese, siginfo_t *uinfo, * Invert the set of allowed signals to get those we * want to block. */ + sigdelsetmask(&these, sigmask(SIGKILL)|sigmask(SIGSTOP)); signotset(&these); if (uts) { @@ -922,10 +923,18 @@ do_sigaltstack (const stack_t *uss, stack_t *uoss, unsigned long sp) goto out; error = -EINVAL; - if (ss_flags & ~SS_DISABLE) + /* + * + * Note - this code used to test ss_flags incorrectly + * old code may have been written using ss_flags==0 + * to mean ss_flags==SS_ONSTACK (as this was the only + * way that worked) - this fix preserves that older + * mechanism + */ + if (ss_flags != SS_DISABLE && ss_flags != SS_ONSTACK && ss_flags != 0) goto out; - if (ss_flags & SS_DISABLE) { + if (ss_flags == SS_DISABLE) { ss_size = 0; ss_sp = NULL; } else { diff --git a/mm/filemap.c b/mm/filemap.c index 35a4b6d37a79..63a50b7e624c 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -547,24 +547,22 @@ static inline int page_cache_read(struct file * file, unsigned long offset) /* * Read in an entire cluster at once. A cluster is usually a 64k- - * aligned block that includes the address requested in "offset." + * aligned block that includes the page requested in "offset." */ -static int read_cluster_nonblocking(struct file * file, unsigned long offset) +static int read_cluster_nonblocking(struct file * file, unsigned long offset, + unsigned long filesize) { - int error = 0; - unsigned long filesize = (file->f_dentry->d_inode->i_size + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; unsigned long pages = CLUSTER_PAGES; offset = CLUSTER_OFFSET(offset); while ((pages-- > 0) && (offset < filesize)) { - error = page_cache_read(file, offset); - if (error >= 0) - offset ++; - else - break; + int error = page_cache_read(file, offset); + if (error < 0) + return error; + offset ++; } - return error; + return 0; } /* @@ -1364,7 +1362,7 @@ no_cached_page: * so we need to map a zero page. */ if (pgoff < size) - error = read_cluster_nonblocking(file, pgoff); + error = read_cluster_nonblocking(file, pgoff, size); else error = page_cache_read(file, pgoff); diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 5acfa8953072..782e3d9ae580 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -2261,8 +2261,9 @@ void __init ip_rt_init(void) if (!rt_hash_table) panic("Failed to allocate IP route cache hash table\n"); - printk("IP: routing cache hash table of %u buckets, %dKbytes\n", - rt_hash_mask, (rt_hash_mask*sizeof(struct rt_hash_bucket))/1024); + printk("IP: routing cache hash table of %u buckets, %ldKbytes\n", + rt_hash_mask, + (long) (rt_hash_mask*sizeof(struct rt_hash_bucket))/1024); for (rt_hash_log=0; (1< static int sock_no_open(struct inode *irrelevant, struct file *dontcare); -static long long sock_lseek(struct file *file, long long offset, int whence); +static loff_t sock_lseek(struct file *file, loff_t offset, int whence); static ssize_t sock_read(struct file *file, char *buf, size_t size, loff_t *ppos); static ssize_t sock_write(struct file *file, const char *buf, @@ -419,7 +419,7 @@ int sock_recvmsg(struct socket *sock, struct msghdr *msg, int size, int flags) * Sockets are not seekable. */ -static long long sock_lseek(struct file *file,long long offset, int whence) +static loff_t sock_lseek(struct file *file, loff_t offset, int whence) { return -ESPIPE; } diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 25ac47242b11..2b3731607cc2 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c @@ -266,10 +266,10 @@ svc_sendto(struct svc_rqst *rqstp, struct iovec *iov, int nr) set_fs(oldfs); #endif - dprintk("svc: socket %p sendto([%p %d... ], %d, %d) = %d\n", - rqstp->rq_sock, - iov[0].iov_base, iov[0].iov_len, nr, - buflen, len); + dprintk("svc: socket %p sendto([%p %lu... ], %d, %d) = %d\n", + rqstp->rq_sock, iov[0].iov_base, + (unsigned long) iov[0].iov_len, nr, + buflen, len); return len; } @@ -326,8 +326,8 @@ svc_recvfrom(struct svc_rqst *rqstp, struct iovec *iov, int nr, int buflen) set_fs(oldfs); #endif - dprintk("svc: socket %p recvfrom(%p, %d) = %d\n", rqstp->rq_sock, - iov[0].iov_base, iov[0].iov_len, len); + dprintk("svc: socket %p recvfrom(%p, %lu) = %d\n", rqstp->rq_sock, + iov[0].iov_base, (unsigned long) iov[0].iov_len, len); return len; } diff --git a/scripts/cramfs/GNUmakefile b/scripts/cramfs/GNUmakefile new file mode 100644 index 000000000000..ea972e38fa47 --- /dev/null +++ b/scripts/cramfs/GNUmakefile @@ -0,0 +1,11 @@ +CFLAGS = -Wall -O2 +CPPFLAGS = -I../../fs/cramfs +LDLIBS = -lz +PROGS = mkcramfs + +all: $(PROGS) + +distclean clean: + rm -f $(PROGS) + +.PHONY: all clean diff --git a/scripts/cramfs/mkcramfs.c b/scripts/cramfs/mkcramfs.c index af4ce300a0ae..5c4dd725ee26 100644 --- a/scripts/cramfs/mkcramfs.c +++ b/scripts/cramfs/mkcramfs.c @@ -6,7 +6,9 @@ #include #include #include +#include #include +#include /* zlib required.. */ #include @@ -17,11 +19,11 @@ typedef unsigned int u32; #include "cramfs.h" -#define PAGE_CACHE_SIZE (4096) - static const char *progname = "mkcramfs"; -void usage(void) +/* N.B. If you change the disk format of cramfs, please update fs/cramfs/README. */ + +static void usage(void) { fprintf(stderr, "Usage: '%s dirname outfile'\n" " where is the root of the\n" @@ -29,6 +31,27 @@ void usage(void) exit(1); } +/* + * If DO_HOLES is defined, then mkcramfs can create explicit holes in the + * data, which saves 26 bytes per hole (which is a lot smaller a saving than + * most filesystems). + * + * Note that kernels up to at least 2.3.39 don't support cramfs holes, which + * is why this defaults to undefined at the moment. + */ +/* #define DO_HOLES 1 */ + +#define PAGE_CACHE_SIZE (4096) +/* The kernel assumes PAGE_CACHE_SIZE as block size. */ +static unsigned int blksize = PAGE_CACHE_SIZE; + +static int warn_dev, warn_gid, warn_link, warn_namelen, warn_size, warn_uid; + +#ifndef MIN +# define MIN(_a,_b) ((_a) < (_b) ? (_a) : (_b)) +#endif + +/* In-core version of inode / directory entry. */ struct entry { /* stats */ char *name; @@ -37,34 +60,51 @@ struct entry { /* FS data */ void *uncompressed; unsigned int dir_offset; /* Where in the archive is the directory entry? */ - unsigned int data_offset; /* Where in the archive is the start of the data? */ /* organization */ - struct entry *child; + struct entry *child; /* null for non-directories and empty directories */ struct entry *next; }; /* - * We should mind about memory leaks and - * checking for out-of-memory. - * - * We don't. + * Width of various bitfields in struct cramfs_inode. + * Used only to generate warnings. */ -static unsigned int parse_directory(const char *name, struct entry **prev) +#define SIZE_WIDTH 24 +#define UID_WIDTH 16 +#define GID_WIDTH 8 +#define OFFSET_WIDTH 26 + +/* + * The longest file name component to allow for in the input directory tree. + * Ext2fs (and many others) allow up to 255 bytes. A couple of filesystems + * allow longer (e.g. smbfs 1024), but there isn't much use in supporting + * >255-byte names in the input directory tree given that such names get + * truncated to 255 bytes when written to cramfs. + */ +#define MAX_INPUT_NAMELEN 255 + +static unsigned int parse_directory(const char *name, struct entry **prev, loff_t *fslen_ub) { DIR *dir; int count = 0, totalsize = 0; struct dirent *dirent; char *path, *endpath; - int len = strlen(name); + size_t len = strlen(name); dir = opendir(name); if (!dir) { perror(name); exit(2); } - /* Set up the path.. */ - path = malloc(4096); + + /* Set up the path. */ + /* TODO: Reuse the parent's buffer to save memcpy'ing and duplication. */ + path = malloc(len + 1 + MAX_INPUT_NAMELEN + 1); + if (!path) { + perror(NULL); + exit(1); + } memcpy(path, name, len); endpath = path + len; *endpath = '/'; @@ -73,7 +113,8 @@ static unsigned int parse_directory(const char *name, struct entry **prev) while ((dirent = readdir(dir)) != NULL) { struct entry *entry; struct stat st; - int fd, size; + int size; + size_t namelen; /* Ignore "." and ".." - we won't be adding them to the archive */ if (dirent->d_name[0] == '.') { @@ -84,44 +125,119 @@ static unsigned int parse_directory(const char *name, struct entry **prev) continue; } } - strcpy(endpath, dirent->d_name); + namelen = strlen(dirent->d_name); + if (namelen > MAX_INPUT_NAMELEN) { + fprintf(stderr, + "Very long (%u bytes) filename `%s' found.\n" + " Please increase MAX_INPUT_NAMELEN in mkcramfs.c and recompile. Exiting.\n", + namelen, dirent->d_name); + exit(1); + } + memcpy(endpath, dirent->d_name, namelen + 1); if (lstat(path, &st) < 0) { perror(endpath); continue; } entry = calloc(1, sizeof(struct entry)); + if (!entry) { + perror(NULL); + exit(5); + } entry->name = strdup(dirent->d_name); + if (!entry->name) { + perror(NULL); + exit(1); + } + if (namelen > 255) { + /* Can't happen when reading from ext2fs. */ + + /* TODO: we ought to avoid chopping in half + multi-byte UTF8 characters. */ + entry->name[namelen = 255] = '\0'; + warn_namelen = 1; + } entry->mode = st.st_mode; entry->size = st.st_size; entry->uid = st.st_uid; + if (entry->uid >= 1 << UID_WIDTH) + warn_uid = 1; entry->gid = st.st_gid; - size = sizeof(struct cramfs_inode) + (~3 & (strlen(entry->name) + 3)); + if (entry->gid >= 1 << GID_WIDTH) + /* TODO: We ought to replace with a default + gid instead of truncating; otherwise there + are security problems. Maybe mode should + be &= ~070. Same goes for uid once Linux + supports >16-bit uids. */ + warn_gid = 1; + size = sizeof(struct cramfs_inode) + ((namelen + 3) & ~3); + *fslen_ub += size; if (S_ISDIR(st.st_mode)) { - entry->size = parse_directory(path, &entry->child); + entry->size = parse_directory(path, &entry->child, fslen_ub); } else if (S_ISREG(st.st_mode)) { + /* TODO: We ought to open files in do_compress, one + at a time, instead of amassing all these memory + maps during parse_directory (which don't get used + until do_compress anyway). As it is, we tend to + get EMFILE errors (especially if mkcramfs is run + by non-root). + + While we're at it, do analagously for symlinks + (which would just save a little memory). */ int fd = open(path, O_RDONLY); if (fd < 0) { perror(path); continue; } - if (entry->size) - entry->uncompressed = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); - if (-1 == (int) (long) entry->uncompressed) { - perror("mmap"); - exit(5); + if (entry->size) { + if ((entry->size >= 1 << SIZE_WIDTH)) { + warn_size = 1; + entry->size = (1 << SIZE_WIDTH) - 1; + } + + entry->uncompressed = mmap(NULL, entry->size, PROT_READ, MAP_PRIVATE, fd, 0); + if (-1 == (int) (long) entry->uncompressed) { + perror("mmap"); + exit(5); + } + if (st.st_nlink > 1) { + /* TODO: Although cramfs doesn't + support hard links, we could still + share data offset values between + different inodes (safe because + read-only). This would give at + least the space saving of hard + links. Just keep a hash mapping + onto struct + entry*. Alternatively, steal some + code from Roger Wolff's `same' + program, which creates a hash of + file data contents. */ + warn_link = 1; + } } close(fd); } else if (S_ISLNK(st.st_mode)) { - entry->uncompressed = malloc(st.st_size); - if (readlink(path, entry->uncompressed, st.st_size) < 0) { + entry->uncompressed = malloc(entry->size); + if (!entry->uncompressed) { + perror(NULL); + exit(5); + } + if (readlink(path, entry->uncompressed, entry->size) < 0) { perror(path); continue; } } else { entry->size = st.st_rdev; + if (entry->size & -(1<size - 1) / blksize + 1) + + MIN(entry->size + 3, st.st_blocks << 9)); + /* Link it into the list */ *prev = entry; prev = &entry->next; @@ -133,7 +249,7 @@ static unsigned int parse_directory(const char *name, struct entry **prev) return totalsize; } -static void set_random(void *area, int size) +static void set_random(void *area, size_t size) { int fd = open("/dev/random", O_RDONLY); @@ -144,6 +260,7 @@ static void set_random(void *area, int size) memset(area, 0x00, size); } +/* Returns sizeof(struct cramfs_super), which includes the root inode. */ static unsigned int write_superblock(struct entry *root, char *base) { struct cramfs_super *super = (struct cramfs_super *) base; @@ -151,6 +268,8 @@ static unsigned int write_superblock(struct entry *root, char *base) super->magic = CRAMFS_MAGIC; super->flags = 0; + /* Note: 0x10000 is meaningless, which is a bug; but + super->size is never used anyway. */ super->size = 0x10000; memcpy(super->signature, CRAMFS_SIGNATURE, sizeof(super->signature)); set_random(super->fsid, sizeof(super->fsid)); @@ -168,6 +287,11 @@ static unsigned int write_superblock(struct entry *root, char *base) static void set_data_offset(struct entry *entry, char *base, unsigned long offset) { struct cramfs_inode *inode = (struct cramfs_inode *) (base + entry->dir_offset); + assert ((offset & 3) == 0); + if (offset >= (1 << (2 + OFFSET_WIDTH))) { + fprintf(stderr, "filesystem too big. Exiting.\n"); + exit(1); + } inode->offset = (offset >> 2); } @@ -178,25 +302,28 @@ static void set_data_offset(struct entry *entry, char *base, unsigned long offse * we've seen. */ #define MAXENTRIES (100) -static int stack_entries = 0; -static struct entry *entry_stack[MAXENTRIES]; - static unsigned int write_directory_structure(struct entry *entry, char *base, unsigned int offset) { + int stack_entries = 0; + struct entry *entry_stack[MAXENTRIES]; + for (;;) { + int dir_start = stack_entries; while (entry) { struct cramfs_inode *inode = (struct cramfs_inode *) (base + offset); - int len = strlen(entry->name); + size_t len = strlen(entry->name); entry->dir_offset = offset; - offset += sizeof(struct cramfs_inode); inode->mode = entry->mode; inode->uid = entry->uid; inode->gid = entry->gid; inode->size = entry->size; - inode->offset = 0; /* Fill in later */ + inode->offset = 0; + /* Non-empty directories, regfiles and symlinks will + write over inode->offset later. */ + offset += sizeof(struct cramfs_inode); memcpy(base + offset, entry->name, len); /* Pad up the name to a 4-byte boundary */ while (len & 3) { @@ -206,14 +333,41 @@ static unsigned int write_directory_structure(struct entry *entry, char *base, u inode->namelen = len >> 2; offset += len; + /* TODO: this may get it wrong for chars >= 0x80. + Most filesystems use UTF8 encoding for filenames, + whereas the console is a single-byte character + set like iso-latin-1. */ printf(" %s\n", entry->name); - if (entry->child) { + if (stack_entries >= MAXENTRIES) { + fprintf(stderr, "Exceeded MAXENTRIES. Raise this value in mkcramfs.c and recompile. Exiting.\n"); + exit(1); + } entry_stack[stack_entries] = entry; stack_entries++; } entry = entry->next; } + + /* + * Reverse the order the stack entries pushed during + * this directory, for a small optimization of disk + * access in the created fs. This change makes things + * `ls -UR' order. + */ + { + struct entry **lo = entry_stack + dir_start; + struct entry **hi = entry_stack + stack_entries; + struct entry *tmp; + + while (lo < --hi) { + tmp = *lo; + *lo++ = *hi; + *hi = tmp; + } + } + + /* Pop a subdirectory entry from the stack, and recurse. */ if (!stack_entries) break; stack_entries--; @@ -226,35 +380,61 @@ static unsigned int write_directory_structure(struct entry *entry, char *base, u return offset; } +#ifdef DO_HOLES +/* + * Returns non-zero iff the first LEN bytes from BEGIN are all NULs. + */ +static int +is_zero(char const *begin, unsigned len) +{ + return (len-- == 0 || + (begin[0] == '\0' && + (len-- == 0 || + (begin[1] == '\0' && + (len-- == 0 || + (begin[2] == '\0' && + (len-- == 0 || + (begin[3] == '\0' && + memcmp(begin, begin + 4, len) == 0)))))))); +} +#else /* !DO_HOLES */ +# define is_zero(_begin,_len) (0) /* Never create holes. */ +#endif /* !DO_HOLES */ + /* * One 4-byte pointer per block and then the actual blocked * output. The first block does not need an offset pointer, - * as it will start immediately after the pointer block. + * as it will start immediately after the pointer block; + * so the i'th pointer points to the end of the i'th block + * (i.e. the start of the (i+1)'th block or past EOF). * * Note that size > 0, as a zero-sized file wouldn't ever * have gotten here in the first place. */ -static unsigned int do_compress(char *base, unsigned int offset, char *uncompressed, unsigned int size) +static unsigned int do_compress(char *base, unsigned int offset, char const *name, char *uncompressed, unsigned int size) { unsigned long original_size = size; unsigned long original_offset = offset; unsigned long new_size; - unsigned long blocks = (size - 1) / PAGE_CACHE_SIZE + 1; + unsigned long blocks = (size - 1) / blksize + 1; unsigned long curr = offset + 4 * blocks; int change; do { + unsigned long len = 2 * blksize; unsigned int input = size; - unsigned long len = 8192; - if (input > PAGE_CACHE_SIZE) - input = PAGE_CACHE_SIZE; - compress(base + curr, &len, uncompressed, input); - uncompressed += input; + if (input > blksize) + input = blksize; size -= input; - curr += len; + if (!is_zero (uncompressed, input)) { + compress(base + curr, &len, uncompressed, input); + uncompressed += input; + curr += len; + } - if (len > PAGE_CACHE_SIZE*2) { - printf("AIEEE: block expanded to > 2*blocklength (%d)\n", len); + if (len > blksize*2) { + /* (I don't think this can happen with zlib.) */ + printf("AIEEE: block \"compressed\" to > 2*blocklength (%ld)\n", len); exit(1); } @@ -262,67 +442,120 @@ static unsigned int do_compress(char *base, unsigned int offset, char *uncompres offset += 4; } while (size); + curr = (curr + 3) & ~3; new_size = curr - original_offset; + /* TODO: Arguably, original_size in these 2 lines should be + st_blocks * 512. But if you say that then perhaps + administrative data should also be included in both. */ change = new_size - original_size; - printf("%4.2f %% (%d bytes)\n", (change * 100) / (double) original_size, change); + printf("%5.2f%% (%d bytes)\t%s\n", + (change * 100) / (double) original_size, change, name); - return (curr + 3) & ~3; + return curr; } + +/* + * Traverse the entry tree, writing data for every item that has + * non-null entry->compressed (i.e. every symlink and non-empty + * regfile). + * + * Frees the entry pointers as it goes. + */ static unsigned int write_data(struct entry *entry, char *base, unsigned int offset) { do { if (entry->uncompressed) { set_data_offset(entry, base, offset); - offset = do_compress(base, offset, entry->uncompressed, entry->size); + offset = do_compress(base, offset, entry->name, entry->uncompressed, entry->size); } - if (entry->child) + else if (entry->child) offset = write_data(entry->child, base, offset); - entry = entry->next; + + /* Free the old before processing the next. */ + { + struct entry *tmp = entry; + entry = entry->next; + free(tmp->name); + free(tmp); + } } while (entry); return offset; } -/* This is the maximum rom-image you can create */ -#define MAXROM (64*1024*1024) + +/* + * Maximum size fs you can create is roughly 256MB. (The last file's + * data must begin within 256MB boundary but can extend beyond that.) + * + * Note that if you want it to fit in a ROM then you're limited to what the + * hardware and kernel can support (64MB?). + */ +#define MAXFSLEN ((((1 << OFFSET_WIDTH) - 1) << 2) /* offset */ \ + + (1 << SIZE_WIDTH) - 1 /* filesize */ \ + + (1 << SIZE_WIDTH) * 4 / PAGE_CACHE_SIZE /* block pointers */ ) + /* * Usage: * - * mkcramfs directory-name + * mkcramfs directory-name outfile * * where "directory-name" is simply the root of the directory * tree that we want to generate a compressed filesystem out - * of.. + * of. */ int main(int argc, char **argv) { struct stat st; struct entry *root_entry; char *rom_image; - unsigned int offset, written; + unsigned int offset; + ssize_t written; int fd; + loff_t fslen_ub = 0; /* initial guess (upper-bound) of + required filesystem size */ + char const *dirname; if (argc) progname = argv[0]; if (argc != 3) usage(); - if (stat(argv[1], &st) < 0) { + if (stat(dirname = argv[1], &st) < 0) { perror(argv[1]); exit(1); } fd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0666); root_entry = calloc(1, sizeof(struct entry)); + if (!root_entry) { + perror(NULL); + exit(5); + } root_entry->mode = st.st_mode; root_entry->uid = st.st_uid; root_entry->gid = st.st_gid; - root_entry->name = ""; - root_entry->size = parse_directory(argv[1], &root_entry->child); + root_entry->size = parse_directory(argv[1], &root_entry->child, &fslen_ub); + if (fslen_ub > MAXFSLEN) { + fprintf(stderr, + "warning: guestimate of required size (upper bound) is %luMB, but maximum image size is %uMB. We might die prematurely.\n", + (unsigned long) (fslen_ub >> 20), + MAXFSLEN >> 20); + fslen_ub = MAXFSLEN; + } - rom_image = mmap(NULL, MAXROM, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + /* TODO: Why do we use a private/anonymous mapping here + followed by a write below, instead of just a shared mapping + and a couple of ftruncate calls? Is it just to save us + having to deal with removing the file afterwards? If we + really need this huge anonymous mapping, we ought to mmap + in smaller chunks, so that the user doesn't need nn MB of + RAM free. If the reason is to be able to write to + un-mmappable block devices, then we could try shared mmap + and revert to anonymous mmap if the shared mmap fails. */ + rom_image = mmap(NULL, fslen_ub, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (-1 == (int) (long) rom_image) { perror("ROM image map"); exit(1); @@ -334,7 +567,11 @@ int main(int argc, char **argv) printf("Directory data: %d bytes\n", offset); offset = write_data(root_entry, rom_image, offset); - printf("Everything: %d bytes\n", offset); + + /* We always write a multiple of blksize bytes, so that + losetup works. */ + offset = ((offset - 1) | (blksize - 1)) + 1; + printf("Everything: %d kilobytes\n", offset >> 10); written = write(fd, rom_image, offset); if (written < 0) { @@ -345,5 +582,33 @@ int main(int argc, char **argv) fprintf(stderr, "ROM image write failed (%d %d)\n", written, offset); exit(1); } + + /* (These warnings used to come at the start, but they scroll off the + screen too quickly.) */ + if (warn_namelen) /* (can't happen when reading from ext2fs) */ + fprintf(stderr, /* bytes, not chars: think UTF8. */ + "warning: filenames truncated to 255 bytes.\n"); + if (warn_link) + fprintf(stderr, + "warning: cramfs cannot represent hard links. You may want to change hard links in\n" + " %s with symlinks to other files in %s.\n", + dirname, dirname); + if (warn_size) + fprintf(stderr, + "warning: file sizes truncated to %luMB (minus 1 byte).\n", + 1L << (SIZE_WIDTH - 20)); + if (warn_uid) /* (not possible with current Linux versions) */ + fprintf(stderr, + "warning: uids truncated to %u bits. (This may be a security concern.)\n", + UID_WIDTH); + if (warn_gid) + fprintf(stderr, + "warning: gids truncated to %u bits. (This may be a security concern.)\n", + GID_WIDTH); + if (warn_dev) + fprintf(stderr, + "WARNING: device numbers truncated to %u bits. This almost certainly means\n" + "that some device files will be wrong.\n", + OFFSET_WIDTH); return 0; } -- 2.39.5