diff -u --recursive --new-file v2.4.13/linux/CREDITS linux/CREDITS --- v2.4.13/linux/CREDITS Tue Oct 23 22:48:49 2001 +++ linux/CREDITS Sun Nov 4 09:31:57 2001 @@ -1868,9 +1868,8 @@ S: Bulgaria N: Martin Mares -E: mj@suse.cz E: mj@ucw.cz -W: http://atrey.karlin.mff.cuni.cz/~mj/ +W: http://www.ucw.cz/~mj/ D: BIOS video mode handling code D: MOXA C-218 serial board driver D: Network autoconfiguration diff -u --recursive --new-file v2.4.13/linux/Documentation/Configure.help linux/Documentation/Configure.help --- v2.4.13/linux/Documentation/Configure.help Tue Oct 23 22:48:49 2001 +++ linux/Documentation/Configure.help Mon Nov 5 13:40:59 2001 @@ -1412,6 +1412,12 @@ have a high-level driver for the type of device that you want to support. +Shuttle EPAT c7/c8 extension +CONFIG_PARIDE_EPATC8 + This option enables support for the newer Shuttle EP1284 (aka c7 and + c8) chip. You need this if you are using any recent Imation SuperDisk + (LS-120) drive. + Shuttle EPIA protocol CONFIG_PARIDE_EPIA This option enables support for the (obsolete) EPIA parallel port @@ -1934,6 +1940,20 @@ If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say `N'. +IRC Send/Chat support +CONFIG_IP_NF_IRC + There is a commonly-used extension to IRC called + Direct Client-to-Client Protocol (DCC). This enables users to send + files to each other, and also chat to each other without the need + of a server. DCC Sending is used anywhere you send files over IRC, + and DCC Chat is most commonly used by Eggdrop bots. If you are + using NAT, this extension will enable you to send files and initiate + chats. Note that you do NOT need this extension to get files or + have others initiate chats, or everything else in IRC. + + If you want to compile it as a module, say 'M' here and read + Documentation/modules.txt. If unsure, say 'N'. + FTP protocol support CONFIG_IP_NF_FTP Tracking FTP connections is problematic: special helpers are @@ -1960,6 +1980,40 @@ If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say `N'. +CONFIG_IP6_NF_MATCH_LIMIT + limit matching allows you to control the rate at which a rule can be + matched: mainly useful in combination with the LOG target ("LOG + target support", below) and to avoid some Denial of Service attacks. + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + +MAC address match support +CONFIG_IP6_NF_MATCH_MAC + mac matching allows you to match packets based on the source + ethernet address of the packet. + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + +Multiple port match support +CONFIG_IP6_NF_MATCH_MULTIPORT + Multiport matching allows you to match TCP or UDP packets based on + a series of source or destination ports: normally a rule can only + match a single range of ports. + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + +Owner match support (EXPERIMENTAL) +CONFIG_IP6_NF_MATCH_OWNER + Packet owner matching allows you to match locally-generated packets + based on who created them: the user, group, process or session. + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + + limit match support CONFIG_IP_NF_MATCH_LIMIT @@ -1996,6 +2050,22 @@ If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say `N'. +TTL match support +CONFIG_IP_NF_MATCH_TTL + This adds CONFIG_IP_NF_MATCH_TTL option, which enabled the user + to match packets by their TTL value. + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + +length match support +CONFIG_IP_NF_MATCH_LENGTH + This option allows you to match the length of a packet against a + specific value or range of values. + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + TOS match support CONFIG_IP_NF_MATCH_TOS TOS matching allows you to match packets based on the Type Of @@ -2075,6 +2145,20 @@ If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say `N'. +Basic SNMP-ALG support +CONFIG_IP_NF_NAT_SNMP_BASIC + + This module implements an Application Layer Gateway (ALG) for + SNMP payloads. In conjunction with NAT, it allows a network + management system to access multiple private networks with + conflicting addresses. It works by modifying IP addresses + inside SNMP payloads to match IP-layer NAT mapping. + + This is the "basic" form of SNMP-ALG, as described in RFC 2962 + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + REDIRECT target support CONFIG_IP_NF_TARGET_REDIRECT REDIRECT is a special case of NAT: all incoming connections are @@ -2215,6 +2299,14 @@ If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say `N'. +LOG target support +CONFIG_IP6_NF_TARGET_LOG + This option adds a `LOG' target, which allows you to create rules in + any ip6tables table which records the packet header to the syslog. + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + Packet filtering CONFIG_IP6_NF_FILTER Packet filtering defines a table `filter', which has a series of @@ -11142,7 +11234,7 @@ mice, joysticks, graphic tablets, or any other HID based devices to your computer via USB. You can't use this driver and the HIDBP (Boot Protocol) keyboard and mouse drivers at the same time. - More information is available: Documentation/usb/input.txt. + More information is available: Documentation/input/input.txt. If unsure, say Y. @@ -12166,6 +12258,15 @@ http://www.unicode.org for more information). Say Y here if you want to be able to read Joliet CDROMs under Linux. +Transparent decompression extension +CONFIG_ZISOFS + This is a Linux-specific extension to RockRidge which lets you store + data in compressed form on a CD-ROM and have it transparently + decompressed when the CD-ROM is accessed. See + for the tools + necessary to create such a filesystem. Say Y here if you want to be + able to read such compressed CD-ROMs. + UDF File System support (read only) CONFIG_UDF_FS This is the new file system used on some CDROMs and DVDs. Say Y if @@ -14948,6 +15049,25 @@ http://www.buzzard.org.uk/toshiba/ Say Y if you intend to run this kernel on a Toshiba portable. + Say N otherwise. + +Dell Inspiron 8000 support +CONFIG_I8K + This adds a driver to safely access the System Management Mode + of the CPU on the Dell Inspiron 8000. The System Management Mode + is used to read cpu temperature and cooling fan status and to + control the fans on the I8K portables. + + This driver has been tested only on the Inspiron 8000 but it may + also work with other Dell laptops. You can force loading on other + models by passing the parameter `force=1' to the module. Use at + your own risk. + + For information on utilities to make use of this driver see the + I8K Linux utilities web site at: + http://www.debian.org/~dz/i8k/ + + Say Y if you intend to run this kernel on a Dell Inspiron 8000. Say N otherwise. /dev/cpu/microcode - Intel IA32 CPU microcode support diff -u --recursive --new-file v2.4.13/linux/Documentation/DocBook/Makefile linux/Documentation/DocBook/Makefile --- v2.4.13/linux/Documentation/DocBook/Makefile Tue Oct 9 17:06:51 2001 +++ linux/Documentation/DocBook/Makefile Fri Nov 2 17:13:53 2001 @@ -8,7 +8,7 @@ HTML := $(patsubst %.sgml, %, $(BOOKS)) IMG-parportbook := parport-share.fig parport-multi.fig parport-structure.fig EPS-parportbook := $(patsubst %.fig, %.eps, $(IMG-parportbook)) -JPG-parportbook := $(patsubst %.fig, %.jpeg, $(IMG-parportbook)) +PNG-parportbook := $(patsubst %.fig, %.png, $(IMG-parportbook)) C-procfs-example = procfs_example.sgml books: $(BOOKS) @@ -26,8 +26,8 @@ %.eps: %.fig fig2dev -Leps $< $@ -%.jpeg: %.fig - fig2dev -Ljpeg $< $@ +%.png: %.fig + fig2dev -Lpng $< $@ %.sgml: %.c echo "" > $@ @@ -129,8 +129,8 @@ $(TOPDIR)/scripts/kernel-doc -man $^ | \ $(PERL) $(TOPDIR)/scripts/split-man $(TOPDIR)/Documentation/man -parportbook: $(JPG-parportbook) -parportbook.ps parportbook.pdf: $(EPS-parportbook) +parportbook parportbook.pdf: $(PNG-parportbook) +parportbook.ps: $(EPS-parportbook) parportbook.sgml: parportbook.tmpl $(TOPDIR)/drivers/parport/init.c $(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/parport/init.c <$< >$@ @@ -144,7 +144,7 @@ rm -f core *~ rm -f $(BOOKS) rm -f $(DVI) $(AUX) $(TEX) $(LOG) $(OUT) - rm -f $(JPG-parportbook) $(EPS-parportbook) + rm -f $(PNG-parportbook) $(EPS-parportbook) rm -f $(C-procfs-example) mrproper: clean @@ -172,7 +172,7 @@ exit 1) rm -rf $@ db2html $< - if [ ! -z "$(JPG-$@)" ]; then cp $(JPG-$@) $@; fi + if [ ! -z "$(PNG-$@)" ]; then cp $(PNG-$@) $@; fi # # we could have our own dependency generator diff -u --recursive --new-file v2.4.13/linux/Documentation/DocBook/parportbook.tmpl linux/Documentation/DocBook/parportbook.tmpl --- v2.4.13/linux/Documentation/DocBook/parportbook.tmpl Sun Sep 23 11:40:54 2001 +++ linux/Documentation/DocBook/parportbook.tmpl Thu Oct 25 00:07:40 2001 @@ -1,5 +1,5 @@ - + @@ -184,10 +184,10 @@ - + - + @@ -270,10 +270,10 @@ - + - + @@ -461,10 +461,10 @@ - + - + diff -u --recursive --new-file v2.4.13/linux/Documentation/arm/SA1100/Assabet linux/Documentation/arm/SA1100/Assabet --- v2.4.13/linux/Documentation/arm/SA1100/Assabet Tue Oct 9 17:06:51 2001 +++ linux/Documentation/arm/SA1100/Assabet Thu Oct 25 13:53:44 2001 @@ -245,32 +245,58 @@ June 12, 2001 -Status of peripherals in -rmk tree ----------------------------------- +Status of peripherals in -rmk tree (updated 14/10/2001) +------------------------------------------------------- Assabet: Serial ports: - Radio: TX, RX, CTS, DSR, DCD, RI - COM: TX, RX, CTS, DSR, DCD, RTS, DTR, PM - I2C: TX, RX - L3: No + Radio: TX, RX, CTS, DSR, DCD, RI + PM: Not tested. + COM: TX, RX, CTS, DSR, DCD, RTS, DTR, PM + PM: Not tested. + I2C: Implemented, not fully tested. + L3: Fully tested, pass. + PM: Not tested. Video: - LCD: PM - Video out: Not fully - Touchscreen: No + LCD: Fully tested. PM + (LCD doesn't like being blanked with + neponset connected) + Video out: Not fully Audio: - Codec: No - POTS: No + UDA1341: + Playback: Fully tested, pass. + Record: Implemented, not tested. + PM: Not tested. + + UCB1200: + Audio play: Implemented, not heavily tested. + Audio rec: Implemented, not heavily tested. + Telco audio play: Implemented, not heavily tested. + Telco audio rec: Implemented, not heavily tested. + POTS control: No + Touchscreen: Yes + PM: Not tested. Other: - PCMCIA: Yes - USB: No + PCMCIA: + LPE: Fully tested, pass. + USB: No + IRDA: + SIR: Fully tested, pass. + FIR: Fully tested, pass. + PM: Not tested. Neponset: Serial ports: COM1,2: TX, RX, CTS, DSR, DCD, RTS, DTR + PM: Not tested. + USB: Implemented, not heavily tested. + PCMCIA: Implemented, not heavily tested. + PM: Not tested. + CF: Implemented, not heavily tested. + PM: Not tested. More stuff can be found in the -np (Nicolas Pitre's) tree. diff -u --recursive --new-file v2.4.13/linux/Documentation/computone.txt linux/Documentation/computone.txt --- v2.4.13/linux/Documentation/computone.txt Fri Jul 28 12:50:51 2000 +++ linux/Documentation/computone.txt Fri Nov 2 17:26:17 2001 @@ -4,16 +4,14 @@ Release Notes For Linux Kernel 2.2 and higher. These notes are for the drivers which have already been integrated into the -kernel and have been tested on Linux kernels 2.0, 2.2, and 2.3. +kernel and have been tested on Linux kernels 2.0, 2.2, 2.3, and 2.4. -Version: 1.2.9 -Date: 04/12/2000 -Author: Andrew Manison -Testing: larryg@computone.com +Version: 1.2.14 +Date: 11/01/2001 +Historical Author: Andrew Manison +Primary Author: Doug McNash Support: support@computone.com -Fixes and Updates: Doug McNash -Proc Filesystem and Kernel Integration: Mike Warfield - +Fixes and Updates: Mike Warfield This file assumes that you are using the Computone drivers which are integrated into the kernel sources. For updating the drivers or installing @@ -28,7 +26,7 @@ products previous to the Intelliport II. This driver was developed on the v2.0.x Linux tree and has been tested up -to v2.2.14; it will probably not work with earlier v1.X kernels,. +to v2.4.14; it will probably not work with earlier v1.X kernels,. 2. QUICK INSTALLATION @@ -42,7 +40,7 @@ before or after drivers installation. Note the hardware address from the Computone ISA cards installed into - the system. These are required for editing ip2.h or editing + the system. These are required for editing ip2.c or editing /etc/modules.conf, or for specification on the modprobe command line. @@ -58,7 +56,7 @@ Select (m) module for CONFIG_COMPUTONE under character devices. CONFIG_PCI and CONFIG_MODULES also may need to be set. c) Set address on ISA cards then: - edit /usr/src/linux/drivers/char/ip2/ip2.h if needed + edit /usr/src/linux/drivers/char/ip2.c if needed or edit /etc/modules.conf if needed (module). or both to match this setting. @@ -77,7 +75,8 @@ Select (y) kernel for CONFIG_COMPUTONE under character devices. CONFIG_PCI may need to be set if you have PCI bus. c) Set address on ISA cards then: - edit /usr/src/linux/drivers/char/ip2/ip2.h + edit /usr/src/linux/drivers/char/ip2.c + (Optional - may be specified on kernel command line now) d) Run "make dep" e) Run "make zImage" or whatever target you prefer. f) mv /usr/src/linux/arch/i386/boot/zImage to /boot. @@ -86,6 +85,41 @@ h) Reboot using this kernel i) run ip2mkdev (either the script below or the binary version) +Kernel command line options: + +When compiling the driver into the kernel, io and irq may be +compiled into the driver by editing ip2.c and setting the values for +io and irq in the appropriate array. An alternative is to specify +a command line parameter to the kernel at boot up. + + ip2=io0,irq0,io1,irq1,io2,irq2,io3,irq3 + +Note that this order is very different from the specifications for the +modload parameters which have separate IRQ and IO specifiers. + +The io port also selects PCI (1) and EISA (2) boards. + + io=0 No board + io=1 PCI board + io=2 EISA board + else ISA board io address + +You only need to specify the boards which are present. + + Examples: + + 2 PCI boards: + + ip2=1,0,1,0 + + 1 ISA board at 0x310 irq 5: + + ip2=0x310,5 + +This can be added to and "append" option in lilo.conf similar to this: + + append="ip2=1,0,1,0" + 3. INSTALLATION @@ -100,7 +134,7 @@ The driver can be installed as a module (recommended) or built into the kernel. This is selected as for other drivers through the `make config` command from the root of the Linux source tree. If the driver is built -into the kernel you will need to edit the file ip2.h to match the boards +into the kernel you will need to edit the file ip2.c to match the boards you are installing. See that file for instructions. If the driver is installed as a module the configuration can also be specified on the modprobe command line as follows: @@ -109,13 +143,13 @@ where irqnum is one of the valid Intelliport II interrupts (3,4,5,7,10,11, 12,15) and addr1-4 are the base addresses for up to four controllers. If -the irqs are not specified the driver uses the default in ip2/ip2.h (which +the irqs are not specified the driver uses the default in ip2.c (which selects polled mode). If no base addresses are specified the defaults in -ip2.h are used. If you are autoloading the driver module with kerneld or -kmod the base addresses and interrupt number must also be set in ip2/ip2.h +ip2.c are used. If you are autoloading the driver module with kerneld or +kmod the base addresses and interrupt number must also be set in ip2.c and recompile or just insert and options line in /etc/modules.conf or both. The options line is equivalent to the command line and takes precidence over -what is in ip2.h. +what is in ip2.c. /etc/modules.conf sample: options ip2 io=1,0x328 irq=1,10 @@ -123,22 +157,18 @@ alias char-major-72 ip2 alias char-major-73 ip2 -equivelant ip2.h: -static ip2config_t ip2config = -{ - {1,10,0,0}, - { - 0x0001, // Board 0, ttyF0 - ttyF63 /* PCI card */ - 0x0328, // Board 1, ttyF64 - ttyF127 /* ISA card */ - 0x0000, // Board 2, ttyF128 - ttyF191 /* empty */ - 0x0000 // Board 3, ttyF192 - ttyF255 /* empty */ - } -}; +The equivalent in ip2.c: + +static int io[IP2_MAX_BOARDS]= { 1, 0x328, 0, 0 }; +static int irq[IP2_MAX_BOARDS] = { 1, 10, -1, -1 }; + +The equivalent for the kernel command line (in lilo.conf): + + append="ip2=1,1,0x328,10" Note: Both io and irq should be updated to reflect YOUR system. An "io" - address of "1/2" indicates a PCI/EISA card in the board table. The - PCI or EISA irq will be assigned automatically. + address of 1 or 2 indicates a PCI or EISA card in the board table. The PCI or EISA irq will be assigned automatically. Specifying an invalid or in-use irq will default the driver into running in polled mode for that card. If all irq entries are 0 then @@ -162,18 +192,26 @@ cuf0 - cuf255 for callout devices. If you are using devfs, existing devices are automatically created within -the devfs name space. Normal devices will be ttf/0 - ttf/255 and callout -devices will be cuf/0 - cuf/255. With devfs installed, ip2mkdev will +the devfs name space. Normal devices will be tts/F0 - tts/F255 and callout +devices will be cua/F0 - cua/F255. With devfs installed, ip2mkdev will create symbolic links in /dev from the old conventional names to the newer devfs names as follows: /dev/ip2ipl[n] -> /dev/ip2/ipl[n] n = 0 - 3 /dev/ip2stat[n] -> /dev/ip2/stat[n] n = 0 - 3 - /dev/ttyF[n] -> /dev/ttf/[n] n = 0 - 255 - /dev/cuf[n] -> /dev/cuf/[n] n = 0 - 255 + /dev/ttyF[n] -> /dev/tts/F[n] n = 0 - 255 + /dev/cuf[n] -> /dev/cua/F[n] n = 0 - 255 Only devices for existing ports and boards will be created. +IMPORTANT NOTE: The naming convention used for devfs by this driver +was changed from 1.2.12 to 1.2.13. The old naming convention was to +use ttf/%d for the tty device and cuf/%d for the cua device. That +has been changed to conform to an agreed-upon standard of placing +all the tty devices under tts. The device names are now tts/F%d for +the tty device and cua/F%d for the cua devices. If you were using +the older devfs names, you must update for the newer convention. + You do not need to run ip2mkdev if you are using devfs and only want to use the devfs native device names. @@ -229,18 +267,26 @@ documentation files, .../linux/Documentation/filesystems/devfs/REAME. If you are using devfs, existing devices are automatically created within -the devfs name space. Normal devices will be ttf/0 - ttf/255 and callout -devices will be cuf/0 - cuf/255. With devfs installed, ip2mkdev will +the devfs name space. Normal devices will be tts/F0 - tts/F255 and callout +devices will be cua/F0 - cua/F255. With devfs installed, ip2mkdev will create symbolic links in /dev from the old conventional names to the newer devfs names as follows: /dev/ip2ipl[n] -> /dev/ip2/ipl[n] n = 0 - 3 /dev/ip2stat[n] -> /dev/ip2/stat[n] n = 0 - 3 - /dev/ttyF[n] -> /dev/ttf/[n] n = 0 - 255 - /dev/cuf[n] -> /dev/cuf/[n] n = 0 - 255 + /dev/ttyF[n] -> /dev/tts/F[n] n = 0 - 255 + /dev/cuf[n] -> /dev/cua/F[n] n = 0 - 255 Only devices for existing ports and boards will be created. +IMPORTANT NOTE: The naming convention used for devfs by this driver +was changed from 1.2.12 to 1.2.13. The old naming convention was to +use ttf/%d for the tty device and cuf/%d for the cua device. That +has been changed to conform to an agreed-upon standard of placing +all the tty devices under tts. The device names are now tts/F%d for +the tty device and cua/F%d for the cua devices. If you were using +the older devfs names, you must update for the newer convention. + You do not need to run ip2mkdev if you are using devfs and only want to use the devfs native device names. @@ -269,19 +315,19 @@ #!/bin/sh -# This is a shell archive (produced by GNU sharutils 4.2). +# This is a shell archive (produced by GNU sharutils 4.2.1). # To extract the files from this archive, save it to some FILE, remove # everything before the `!/bin/sh' line above, then type `sh FILE'. # -# Made on 2000-03-10 11:55 EST by . -# Source directory was `/mnt1/src/linux-2.3.50c/Documentation'. +# Made on 2001-10-29 10:32 EST by . +# Source directory was `/home2/src/tmp'. # # Existing files will *not* be overwritten unless `-c' is specified. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ -# 4061 -rwxr-xr-x ip2mkdev +# 4251 -rwxr-xr-x ip2mkdev # save_IFS="${IFS}" IFS="${IFS}:" @@ -316,9 +362,12 @@ export TEXTDOMAIN echo="$gettext_dir/gettext -s" fi -touch -am 1231235999 $$.touch >/dev/null 2>&1 -if test ! -f 1231235999 && test -f $$.touch; then - shar_touch=touch +if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then + shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"' +elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then + shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"' +elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then + shar_touch='touch -am $3$4$5$6$2 "$8"' else shar_touch=: echo @@ -326,9 +375,9 @@ $echo "installing GNU \`touch', distributed in GNU File Utilities..." echo fi -rm -f 1231235999 $$.touch +rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch # -if mkdir _sh17088; then +if mkdir _sh17581; then $echo 'x -' 'creating lock directory' else $echo 'failed to create lock directory' @@ -356,11 +405,14 @@ # before running this script. Running this script will then recreate # all the valid devices. # -# =mhw= # Michael H. Warfield +# /\/\|=mhw=|\/\/ # mhw@wittsend.com # -# Updated 03/09/2000 for devfs support in ip2 drivers. =mhw= +# Updated 10/29/2000 for version 1.2.13 naming convention +# under devfs. /\/\|=mhw=|\/\/ +# +# Updated 03/09/2000 for devfs support in ip2 drivers. /\/\|=mhw=|\/\/ # X if test -d /dev/ip2 ; then @@ -375,18 +427,19 @@ X ln -s ip2/$i ip2$i X fi X done -X for i in `ls ttf` ; do -X if test ! -L ttyF$i ; then +X for i in `( cd tts ; ls F* )` ; do +X if test ! -L tty$i ; then X # Remove it incase it wasn't a symlink (old device) -X rm -f ttyF$i -X ln -s ttyf/$i ttyF$i +X rm -f tty$i +X ln -s tts/$i tty$i X fi X done -X for i in `ls cuf` ; do -X if test ! -L cuf$i ; then +X for i in `( cd cua ; ls F* )` ; do +X DEVNUMBER=`expr $i : 'F\(.*\)'` +X if test ! -L cuf$DEVNUMBER ; then X # Remove it incase it wasn't a symlink (old device) -X rm -f cuf$i -X ln -s cuf/$i cuf$i +X rm -f cuf$DEVNUMBER +X ln -s cua/$i cuf$DEVNUMBER X fi X done X exit 0 @@ -508,20 +561,20 @@ X Xexit 0 SHAR_EOF - $shar_touch -am 03101153100 'ip2mkdev' && + (set 20 01 10 29 10 32 01 'ip2mkdev'; eval "$shar_touch") && chmod 0755 'ip2mkdev' || $echo 'restore of' 'ip2mkdev' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'ip2mkdev:' 'MD5 check failed' -b0671abeba07b0a9266b70aaf24509b3 ip2mkdev +cb5717134509f38bad9fde6b1f79b4a4 ip2mkdev SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'ip2mkdev'`" - test 4061 -eq "$shar_count" || - $echo 'ip2mkdev:' 'original size' '4061,' 'current size' "$shar_count!" + test 4251 -eq "$shar_count" || + $echo 'ip2mkdev:' 'original size' '4251,' 'current size' "$shar_count!" fi fi -rm -fr _sh17088 +rm -fr _sh17581 exit 0 diff -u --recursive --new-file v2.4.13/linux/Documentation/filesystems/devfs/ChangeLog linux/Documentation/filesystems/devfs/ChangeLog --- v2.4.13/linux/Documentation/filesystems/devfs/ChangeLog Thu Oct 11 08:02:26 2001 +++ linux/Documentation/filesystems/devfs/ChangeLog Sat Nov 3 10:06:38 2001 @@ -1771,3 +1771,10 @@ - Fixed buffer underrun in - Moved down_read() from to +=============================================================================== +Changes for patch v196 + +- Fixed race in when setting event mask + Thanks to Kari Hurtta + +- Avoid deadlock in by using temporary buffer diff -u --recursive --new-file v2.4.13/linux/Documentation/filesystems/vfat.txt linux/Documentation/filesystems/vfat.txt --- v2.4.13/linux/Documentation/filesystems/vfat.txt Wed Apr 11 19:02:27 2001 +++ linux/Documentation/filesystems/vfat.txt Thu Oct 25 13:53:44 2001 @@ -48,8 +48,15 @@ r: relaxed, case insensitive n: normal, default setting, currently case insensitive -nocase -- Returning with having the 8.3 format alias kept in - the disk. Default, return lowercase letter. +shortname=lower|win95|winnt|mixed + -- Shortname display/create setting. + lower: convert to lowercase for display, + emulate the Windows 95 rule for create. + win95: emulate the Windows 95 rule for display/create. + winnt: emulate the Windows NT rule for display/create. + mixed: emulate the Windows NT rule for display, + emulate the Windows 95 rule for create. + Default setting is `lower'. : 0,1,yes,no,true,false diff -u --recursive --new-file v2.4.13/linux/Documentation/networking/8139too.txt linux/Documentation/networking/8139too.txt --- v2.4.13/linux/Documentation/networking/8139too.txt Tue Oct 23 22:48:49 2001 +++ linux/Documentation/networking/8139too.txt Thu Oct 25 14:01:51 2001 @@ -17,9 +17,6 @@ Disclaimer ---------- -THIS DRIVER IS A DEVELOPMENT RELEASE FOR A DEVELOPMENT KERNEL. DO NOT -USE IN A PRODUCTION ENVIRONMENT. - DO NOT CONTACT DONALD BECKER FOR SUPPORT OF THIS DRIVER, his driver is completely different and maintained independently of the 8139too code base. @@ -95,6 +92,7 @@ Tested Adapters --------------- AOpen ALN-325C +AT-2500TX 10/100 PCI Fast Ethernet Network Adapter Card KTI KF-230TX KTI KF-230TX/2 Lantech FastNet TX diff -u --recursive --new-file v2.4.13/linux/Documentation/pci.txt linux/Documentation/pci.txt --- v2.4.13/linux/Documentation/pci.txt Sun Aug 12 13:27:58 2001 +++ linux/Documentation/pci.txt Sun Nov 4 09:31:57 2001 @@ -1,6 +1,6 @@ How To Write Linux PCI Drivers - by Martin Mares on 07-Feb-2000 + by Martin Mares on 07-Feb-2000 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The world of PCI is vast and it's full of (mostly unpleasant) surprises. diff -u --recursive --new-file v2.4.13/linux/MAINTAINERS linux/MAINTAINERS --- v2.4.13/linux/MAINTAINERS Tue Oct 23 22:48:49 2001 +++ linux/MAINTAINERS Sun Nov 4 09:31:58 2001 @@ -93,7 +93,12 @@ L: linux-hams@vger.kernel.org S: Maintained -8139TOO ETHERNET DRIVER +8139CP 10/100 FAST ETHERNET DRIVER +P: Jeff Garzik +M: jgarzik@mandrakesoft.com +S: Maintained + +8139TOO 10/100 FAST ETHERNET DRIVER P: Jeff Garzik M: jgarzik@mandrakesoft.com W: http://sourceforge.net/projects/gkernel/ @@ -296,9 +301,7 @@ S: Supported COMPUTONE INTELLIPORT MULTIPORT CARD -P: Doug McNash P: Michael H. Warfield -M: Doug McNash M: Michael H. Warfield W: http://www.computone.com/ W: http://www.wittsend.com/computone.html @@ -642,6 +645,13 @@ L: Linux-Kernel@vger.kernel.org S: Maintained +i386 SETUP CODE / CPU ERRATA WORKAROUNDS +P: Dave Jones +M: davej@suse.de +P: H. Peter Anvin +M: hpa@zytor.com +S: Maintained + i810 TCO TIMER WATCHDOG P: Nils Faerber M: nils@kernelconcepts.de @@ -1141,9 +1151,9 @@ PCI SUBSYSTEM P: Martin Mares -M: mj@suse.cz +M: mj@ucw.cz L: linux-kernel@vger.kernel.org -S: Supported +S: Odd Fixes PCMCIA SUBSYSTEM P: David Hinds @@ -1391,7 +1401,7 @@ SVGA HANDLING P: Martin Mares -M: mj@suse.cz +M: mj@ucw.cz L: linux-video@atrey.karlin.mff.cuni.cz S: Maintained diff -u --recursive --new-file v2.4.13/linux/Makefile linux/Makefile --- v2.4.13/linux/Makefile Tue Oct 23 22:48:49 2001 +++ linux/Makefile Mon Nov 5 12:30:48 2001 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 4 -SUBLEVEL = 13 +SUBLEVEL = 14 EXTRAVERSION = KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) diff -u --recursive --new-file v2.4.13/linux/arch/alpha/config.in linux/arch/alpha/config.in --- v2.4.13/linux/arch/alpha/config.in Tue Oct 9 17:06:51 2001 +++ linux/arch/alpha/config.in Mon Nov 5 09:47:41 2001 @@ -217,6 +217,10 @@ bool 'Symmetric multi-processing support' CONFIG_SMP fi +if [ "$CONFIG_SMP" = "y" ]; then + define_bool CONFIG_HAVE_DEC_LOCK y +fi + if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then bool 'Discontiguous Memory Support' CONFIG_DISCONTIGMEM if [ "$CONFIG_DISCONTIGMEM" = "y" ]; then diff -u --recursive --new-file v2.4.13/linux/arch/alpha/kernel/alpha_ksyms.c linux/arch/alpha/kernel/alpha_ksyms.c --- v2.4.13/linux/arch/alpha/kernel/alpha_ksyms.c Tue Oct 23 22:48:49 2001 +++ linux/arch/alpha/kernel/alpha_ksyms.c Mon Nov 5 09:47:41 2001 @@ -221,6 +221,7 @@ EXPORT_SYMBOL(__global_sti); EXPORT_SYMBOL(__global_save_flags); EXPORT_SYMBOL(__global_restore_flags); +EXPORT_SYMBOL(atomic_dec_and_lock); #if DEBUG_SPINLOCK EXPORT_SYMBOL(spin_unlock); EXPORT_SYMBOL(debug_spin_lock); diff -u --recursive --new-file v2.4.13/linux/arch/alpha/kernel/osf_sys.c linux/arch/alpha/kernel/osf_sys.c --- v2.4.13/linux/arch/alpha/kernel/osf_sys.c Mon Aug 27 12:41:37 2001 +++ linux/arch/alpha/kernel/osf_sys.c Fri Nov 2 17:39:20 2001 @@ -1320,3 +1320,67 @@ return ret; } + +/* Get an address range which is currently unmapped. Similar to the + generic version except that we know how to honor ADDR_LIMIT_32BIT. */ + +static unsigned long +arch_get_unmapped_area_1(unsigned long addr, unsigned long len, + unsigned long limit) +{ + struct vm_area_struct *vma = find_vma(current->mm, addr); + + while (1) { + /* At this point: (!vma || addr < vma->vm_end). */ + if (limit - len < addr) + return -ENOMEM; + if (!vma || addr + len <= vma->vm_start) + return addr; + addr = vma->vm_end; + vma = vma->vm_next; + } +} + +unsigned long +arch_get_unmapped_area(struct file *filp, unsigned long addr, + unsigned long len, unsigned long pgoff, + unsigned long flags) +{ + unsigned long limit; + + /* "32 bit" actually means 31 bit, since pointers sign extend. */ + if (current->personality & ADDR_LIMIT_32BIT) + limit = 0x80000000; + else + limit = TASK_SIZE; + + if (len > limit) + return -ENOMEM; + + /* First, see if the given suggestion fits. + + The OSF/1 loader (/sbin/loader) relies on us returning an + address larger than the requested if one exists, which is + a terribly broken way to program. + + That said, I can see the use in being able to suggest not + merely specific addresses, but regions of memory -- perhaps + this feature should be incorporated into all ports? */ + + if (addr) { + addr = arch_get_unmapped_area_1 (PAGE_ALIGN(addr), len, limit); + if (addr != -ENOMEM) + return addr; + } + + /* Next, try allocating at TASK_UNMAPPED_BASE. */ + addr = arch_get_unmapped_area_1 (PAGE_ALIGN(TASK_UNMAPPED_BASE), + len, limit); + if (addr != -ENOMEM) + return addr; + + /* Finally, try allocating in low memory. */ + addr = arch_get_unmapped_area_1 (PAGE_SIZE, len, limit); + + return addr; +} diff -u --recursive --new-file v2.4.13/linux/arch/alpha/kernel/pci.c linux/arch/alpha/kernel/pci.c --- v2.4.13/linux/arch/alpha/kernel/pci.c Tue Oct 23 22:48:49 2001 +++ linux/arch/alpha/kernel/pci.c Fri Nov 2 17:39:20 2001 @@ -93,16 +93,18 @@ /* The Cypress bridge responds on the PCI bus in the address range 0xffff0000-0xffffffff (conventional x86 BIOS ROM). There is no - way to turn this off, so if we use a large direct-map window, or - a large SG window, we must avoid this region. */ + way to turn this off. The bridge also supports several extended + BIOS ranges (disabled after power-up), and some consoles do turn + them on. So if we use a large direct-map window, or a large SG + window, we must avoid entire 0xfff00000-0xffffffff region. */ else if (dev->class >> 8 == PCI_CLASS_BRIDGE_ISA) { - if (__direct_map_base + __direct_map_size >= 0xffff0000) - __direct_map_size = 0xffff0000 - __direct_map_base; + if (__direct_map_base + __direct_map_size >= 0xfff00000) + __direct_map_size = 0xfff00000 - __direct_map_base; else { struct pci_controller *hose = dev->sysdata; struct pci_iommu_arena *pci = hose->sg_pci; - if (pci && pci->dma_base + pci->size >= 0xffff0000) - pci->size = 0xffff0000 - pci->dma_base; + if (pci && pci->dma_base + pci->size >= 0xfff00000) + pci->size = 0xfff00000 - pci->dma_base; } } } diff -u --recursive --new-file v2.4.13/linux/arch/alpha/kernel/pci_iommu.c linux/arch/alpha/kernel/pci_iommu.c --- v2.4.13/linux/arch/alpha/kernel/pci_iommu.c Tue Oct 23 22:48:49 2001 +++ linux/arch/alpha/kernel/pci_iommu.c Mon Nov 5 09:47:41 2001 @@ -250,7 +250,7 @@ if (dir == PCI_DMA_NONE) BUG(); return pci_map_single_1(pdev, cpu_addr, size, - (pdev->dma_mask >> 32) != 0); + pdev ? (pdev->dma_mask >> 32) != 0 : 0); } dma_addr_t @@ -260,7 +260,7 @@ if (dir == PCI_DMA_NONE) BUG(); return pci_map_single_1(pdev, (char *)page_address(page) + offset, - size, (pdev->dma_mask >> 32) != 0); + size, pdev ? (pdev->dma_mask >> 32) != 0 : 0); } /* Unmap a single streaming mode DMA translation. The DMA_ADDR and @@ -304,7 +304,7 @@ dma_ofs = (dma_addr - arena->dma_base) >> PAGE_SHIFT; if (dma_ofs * PAGE_SIZE >= arena->size) { printk(KERN_ERR "Bogus pci_unmap_single: dma_addr %lx " - " base %x size %x\n", dma_addr, arena->dma_base, + " base %lx size %x\n", dma_addr, arena->dma_base, arena->size); return; BUG(); diff -u --recursive --new-file v2.4.13/linux/arch/alpha/kernel/setup.c linux/arch/alpha/kernel/setup.c --- v2.4.13/linux/arch/alpha/kernel/setup.c Tue Oct 9 17:06:51 2001 +++ linux/arch/alpha/kernel/setup.c Fri Nov 2 17:39:20 2001 @@ -1054,7 +1054,8 @@ static char cpu_names[][8] = { "EV3", "EV4", "Simulate", "LCA4", "EV5", "EV45", "EV56", - "EV6", "PCA56", "PCA57", "EV67", "EV68CB", "EV68AL" + "EV6", "PCA56", "PCA57", "EV67", "EV68CB", "EV68AL", + "EV68CX", "EV7", "EV79", "EV69" }; struct percpu_struct *cpu; diff -u --recursive --new-file v2.4.13/linux/arch/alpha/kernel/time.c linux/arch/alpha/kernel/time.c --- v2.4.13/linux/arch/alpha/kernel/time.c Tue Oct 9 17:06:51 2001 +++ linux/arch/alpha/kernel/time.c Fri Nov 2 17:39:20 2001 @@ -169,6 +169,63 @@ init_rtc_irq(); } + +/* Validate a computed cycle counter result against the known bounds for + the given processor core. There's too much brokenness in the way of + timing hardware for any one method to work everywhere. :-( + + Return 0 if the result cannot be trusted, otherwise return the argument. */ + +static unsigned long __init +validate_cc_value(unsigned long cc) +{ + static struct bounds { + unsigned int min, max; + } cpu_hz[] __initdata = { + [EV3_CPU] = { 50000000, 200000000 }, /* guess */ + [EV4_CPU] = { 150000000, 300000000 }, + [LCA4_CPU] = { 150000000, 300000000 }, /* guess */ + [EV45_CPU] = { 200000000, 300000000 }, + [EV5_CPU] = { 266000000, 333333333 }, + [EV56_CPU] = { 366000000, 667000000 }, + [PCA56_CPU] = { 400000000, 600000000 }, /* guess */ + [PCA57_CPU] = { 500000000, 600000000 }, /* guess */ + [EV6_CPU] = { 466000000, 600000000 }, + [EV67_CPU] = { 600000000, 750000000 }, + [EV68AL_CPU] = { 750000000, 940000000 }, + [EV68CB_CPU] = { 1000000000, 1333333333 }, + /* None of the following are shipping as of 2001-11-01. */ + [EV68CX_CPU] = { 1000000000, 1700000000 }, /* guess */ + [EV69_CPU] = { 1000000000, 1700000000 }, /* guess */ + [EV7_CPU] = { 800000000, 1400000000 }, /* guess */ + [EV79_CPU] = { 1000000000, 2000000000 }, /* guess */ + }; + + /* Allow for some drift in the crystal. 10MHz is more than enough. */ + const unsigned int deviation = 10000000; + + struct percpu_struct *cpu; + unsigned int index; + + cpu = (struct percpu_struct *)((char*)hwrpb + hwrpb->processor_offset); + index = cpu->type & 0xffffffff; + + /* If index out of bounds, no way to validate. */ + if (index >= sizeof(cpu_hz)/sizeof(cpu_hz[0])) + return cc; + + /* If index contains no data, no way to validate. */ + if (cpu_hz[index].max == 0) + return cc; + + if (cc < cpu_hz[index].min - deviation + || cc > cpu_hz[index].max + deviation) + return 0; + + return cc; +} + + /* * Calibrate CPU clock using legacy 8254 timer/counter. Stolen from * arch/i386/time.c. @@ -180,8 +237,7 @@ static unsigned long __init calibrate_cc_with_pic(void) { - int cc; - unsigned long count = 0; + int cc, count = 0; /* Set the Gate high, disable speaker */ outb((inb(0x61) & ~0x02) | 0x01, 0x61); @@ -200,30 +256,18 @@ cc = rpcc(); do { count++; - } while ((inb(0x61) & 0x20) == 0); + } while ((inb(0x61) & 0x20) == 0 && count > 0); cc = rpcc() - cc; - /* Error: ECTCNEVERSET */ + /* Error: ECTCNEVERSET or ECPUTOOFAST. */ if (count <= 1) - goto bad_ctc; + return 0; - /* Error: ECPUTOOFAST */ - if (count >> 32) - goto bad_ctc; - - /* Error: ECPUTOOSLOW */ + /* Error: ECPUTOOSLOW. */ if (cc <= CALIBRATE_TIME) - goto bad_ctc; - - return ((long)cc * 1000000) / CALIBRATE_TIME; + return 0; - /* - * The CTC wasn't reliable: we got a hit on the very first read, - * or the CPU was so fast/slow that the quotient wouldn't fit in - * 32 bits.. - */ - bad_ctc: - return 0; + return (cc * 1000000UL) / CALIBRATE_TIME; } /* The Linux interpretation of the CMOS clock register contents: @@ -249,31 +293,35 @@ /* Calibrate CPU clock -- attempt #1. */ if (!est_cycle_freq) - est_cycle_freq = calibrate_cc_with_pic(); + est_cycle_freq = validate_cc_value(calibrate_cc_with_pic()); cc1 = rpcc_after_update_in_progress(); /* Calibrate CPU clock -- attempt #2. */ if (!est_cycle_freq) { cc2 = rpcc_after_update_in_progress(); - est_cycle_freq = cc2 - cc1; + est_cycle_freq = validate_cc_value(cc2 - cc1); cc1 = cc2; } - /* If the given value is within 1% of what we calculated, - accept it. Otherwise, use what we found. */ cycle_freq = hwrpb->cycle_freq; - one_percent = cycle_freq / 100; - diff = cycle_freq - est_cycle_freq; - if (diff < 0) - diff = -diff; - if (diff > one_percent) { - cycle_freq = est_cycle_freq; - printk("HWRPB cycle frequency bogus. Estimated %lu Hz\n", - cycle_freq); - } - else { - est_cycle_freq = 0; + if (est_cycle_freq) { + /* If the given value is within 1% of what we calculated, + accept it. Otherwise, use what we found. */ + one_percent = cycle_freq / 100; + diff = cycle_freq - est_cycle_freq; + if (diff < 0) + diff = -diff; + if (diff > one_percent) { + cycle_freq = est_cycle_freq; + printk("HWRPB cycle frequency bogus. " + "Estimated %lu Hz\n", cycle_freq); + } else { + est_cycle_freq = 0; + } + } else if (! validate_cc_value (cycle_freq)) { + printk("HWRPB cycle frequency bogus, " + "and unable to estimate a proper value!\n"); } /* From John Bowman : allow the values diff -u --recursive --new-file v2.4.13/linux/arch/alpha/kernel/traps.c linux/arch/alpha/kernel/traps.c --- v2.4.13/linux/arch/alpha/kernel/traps.c Tue Oct 9 17:06:51 2001 +++ linux/arch/alpha/kernel/traps.c Mon Nov 5 09:47:41 2001 @@ -295,9 +295,13 @@ we get the correct PC. If not, we set a flag to correct it every time through. */ - if (opDEC_testing && regs.pc == opDEC_test_pc) { - opDEC_fix = 4; - printk("opDEC fixup enabled.\n"); + if (opDEC_testing) { + if (regs.pc == opDEC_test_pc) { + opDEC_fix = 4; + regs.pc += 4; + printk("opDEC fixup enabled.\n"); + } + return; } regs.pc += opDEC_fix; diff -u --recursive --new-file v2.4.13/linux/arch/alpha/lib/Makefile linux/arch/alpha/lib/Makefile --- v2.4.13/linux/arch/alpha/lib/Makefile Tue Jul 3 17:08:18 2001 +++ linux/arch/alpha/lib/Makefile Mon Nov 5 09:47:41 2001 @@ -49,6 +49,10 @@ fpreg.o \ callback_srm.o srm_puts.o srm_printk.o +ifeq ($(CONFIG_SMP),y) + OBJS += dec_and_lock.o +endif + lib.a: $(OBJS) $(AR) rcs lib.a $(OBJS) diff -u --recursive --new-file v2.4.13/linux/arch/alpha/lib/dec_and_lock.c linux/arch/alpha/lib/dec_and_lock.c --- v2.4.13/linux/arch/alpha/lib/dec_and_lock.c Wed Dec 31 16:00:00 1969 +++ linux/arch/alpha/lib/dec_and_lock.c Mon Nov 5 09:47:41 2001 @@ -0,0 +1,40 @@ +/* + * arch/alpha/lib/dec_and_lock.c + * + * ll/sc version of atomic_dec_and_lock() + * + */ + +#include +#include + + asm (".text \n\ + .global atomic_dec_and_lock \n\ + .ent atomic_dec_and_lock \n\ + .align 4 \n\ +atomic_dec_and_lock: \n\ + .prologue 0 \n\ +1: ldl_l $1, 0($16) \n\ + subl $1, 1, $1 \n\ + beq $1, 2f \n\ + stl_c $1, 0($16) \n\ + beq $1, 3f \n\ + mb \n\ + clr $0 \n\ + ret \n\ +3: br 1b \n\ +2: lda $27, atomic_dec_and_lock_1 \n\ + .end atomic_dec_and_lock"); + + /* FALLTHRU */ + +static int __attribute__((unused)) +atomic_dec_and_lock_1(atomic_t *atomic, spinlock_t *lock) +{ + /* Slow path */ + spin_lock(lock); + if (atomic_dec_and_test(atomic)) + return 1; + spin_unlock(lock); + return 0; +} diff -u --recursive --new-file v2.4.13/linux/arch/arm/config.in linux/arch/arm/config.in --- v2.4.13/linux/arch/arm/config.in Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/config.in Thu Oct 25 13:53:44 2001 @@ -39,6 +39,7 @@ CLPS711x/EP721x-based CONFIG_ARCH_CLPS711X \ Co-EBSA285 CONFIG_ARCH_CO285 \ EBSA-110 CONFIG_ARCH_EBSA110 \ + Epxa10db CONFIG_ARCH_CAMELOT \ FootBridge CONFIG_ARCH_FOOTBRIDGE \ Integrator CONFIG_ARCH_INTEGRATOR \ LinkUp-L7200 CONFIG_ARCH_L7200 \ @@ -73,7 +74,16 @@ dep_bool ' Brutus' CONFIG_SA1100_BRUTUS $CONFIG_ARCH_SA1100 dep_bool ' CerfBoard' CONFIG_SA1100_CERF $CONFIG_ARCH_SA1100 if [ "$CONFIG_SA1100_CERF" = "y" ]; then - bool ' 32MB Cerf support' CONFIG_SA1100_CERF_32MB + choice 'Cerf RAM available' \ + "8MB CONFIG_SA1100_CERF_8MB \ + 16MB CONFIG_SA1100_CERF_16MB \ + 32MB CONFIG_SA1100_CERF_32MB \ + 64MB CONFIG_SA1100_CERF_64MB" CerfRam + choice 'Cerf Flash available' \ + "8MB CONFIG_SA1100_CERF_FLASH_8MB \ + 16MB CONFIG_SA1100_CERF_FLASH_16MB \ + 32MB CONFIG_SA1100_CERF_FLASH_32MB" CerfFlash + bool 'Cerf w/CPLD support (CerfPDA)' CONFIG_SA1100_CERF_CPLD fi dep_bool ' Compaq iPAQ H3600' CONFIG_SA1100_H3600 $CONFIG_ARCH_SA1100 #dep_bool ' Empeg' CONFIG_SA1100_EMPEG $CONFIG_ARCH_SA1100 @@ -194,7 +204,8 @@ "$CONFIG_ARCH_TBOX" = "y" -o "$CONFIG_ARCH_SHARK" = "y" -o \ "$CONFIG_ARCH_NEXUSPCI" = "y" -o "$CONFIG_ARCH_CLPS711X" = "y" -o \ "$CONFIG_ARCH_INTEGRATOR" = "y" -o "$CONFIG_ARCH_SA1100" = "y" -o \ - "$CONFIG_ARCH_L7200" = "y" -o "$CONFIG_ARCH_ANAKIN" = "y" ]; then + "$CONFIG_ARCH_L7200" = "y" -o "$CONFIG_ARCH_ANAKIN" = "y" -o \ + "$CONFIG_ARCH_CAMELOT" = "y" ]; then define_bool CONFIG_CPU_32v4 y else define_bool CONFIG_CPU_32v4 n @@ -369,6 +380,7 @@ "$CONFIG_ARCH_CATS" = "y" -o \ "$CONFIG_ARCH_P720T" = "y" -o \ "$CONFIG_ARCH_CDB89712" = "y" -o \ + "$CONFIG_ARCH_CAMELOT" = "y" -o \ "$CONFIG_ARCH_ANAKIN" = "y" ]; then string 'Default kernel command string' CONFIG_CMDLINE "" fi @@ -562,7 +574,9 @@ bool 'Verbose kernel error messages' CONFIG_DEBUG_ERRORS bool 'Verbose user fault messages' CONFIG_DEBUG_USER bool 'Include debugging information in kernel binary' CONFIG_DEBUG_INFO +bool 'Debug memory allocations' CONFIG_DEBUG_SLAB bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Spinlock debugging' CONFIG_DEBUG_SPINLOCK dep_bool 'Disable pgtable cache' CONFIG_NO_PGT_CACHE $CONFIG_CPU_26 # These options are only for real kernel hackers who want to get their hands dirty. dep_bool 'Kernel low-level debugging functions' CONFIG_DEBUG_LL $CONFIG_EXPERIMENTAL diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/adsbitsy linux/arch/arm/def-configs/adsbitsy --- v2.4.13/linux/arch/arm/def-configs/adsbitsy Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/adsbitsy Thu Oct 25 13:53:44 2001 @@ -0,0 +1,674 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +CONFIG_SA1100_ADSBITSY=y +CONFIG_SA1111=y +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="ip=off" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +# CONFIG_INPUT_KEYBDEV is not set +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +CONFIG_AUDIO_UCB1200=y +CONFIG_ADC_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=y +CONFIG_USB_OHCI_NOPCI=y +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_HID is not set +# CONFIG_USB_KBD is not set +CONFIG_USB_MOUSE=y +# CONFIG_USB_WACOM is not set +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_NET1080 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_RIO500 is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/assabet linux/arch/arm/def-configs/assabet --- v2.4.13/linux/arch/arm/def-configs/assabet Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/def-configs/assabet Thu Oct 25 13:53:44 2001 @@ -8,6 +8,8 @@ CONFIG_UID16=y CONFIG_RWSEM_GENERIC_SPINLOCK=y # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set # # Code maturity level options @@ -31,6 +33,7 @@ # CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_L7200 is not set @@ -62,13 +65,15 @@ # CONFIG_SA1100_ASSABET=y # CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_H3600 is not set # CONFIG_SA1100_EXTENEX1 is not set # CONFIG_SA1100_FLEXANET is not set # CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set # CONFIG_SA1100_JORNADA720 is not set # CONFIG_SA1100_HUW_WEBPANEL is not set # CONFIG_SA1100_ITSY is not set @@ -90,7 +95,12 @@ # # CLPS711X/EP721X Implementations # +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set # CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -110,14 +120,14 @@ # CONFIG_CPU_ARM1020 is not set # CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set CONFIG_DISCONTIGMEM=y -# CONFIG_CPU_BIG_ENDIAN is not set # # General setup # # CONFIG_PCI is not set -# CONFIG_ISA is not set +CONFIG_ISA=y # CONFIG_ISA_DMA is not set CONFIG_CPU_FREQ=y CONFIG_HOTPLUG=y @@ -134,6 +144,10 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# CONFIG_FPE_NWFPE=y # CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y @@ -142,10 +156,8 @@ CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set CONFIG_PM=y -# CONFIG_APM is not set # CONFIG_ARTHUR is not set CONFIG_CMDLINE="" -# CONFIG_PFS168_CMDLINE is not set CONFIG_LEDS=y CONFIG_LEDS_TIMER=y CONFIG_LEDS_CPU=y @@ -178,6 +190,8 @@ # RAM/ROM/Flash chip drivers # CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y CONFIG_MTD_CFI_ADV_OPTIONS=y CONFIG_MTD_CFI_NOSWAP=y # CONFIG_MTD_CFI_BE_BYTE_SWAP is not set @@ -191,47 +205,31 @@ # CONFIG_MTD_CFI_I4 is not set CONFIG_MTD_CFI_INTELEXT=y # CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set # CONFIG_MTD_JEDEC is not set # # Mapping drivers for chip access # # CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set # CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set CONFIG_MTD_SA1100=y -CONFIG_MTD_SA1100_REDBOOT_PARTITIONS=y -# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set # CONFIG_MTD_DC21285 is not set # CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_PCI is not set # # Self-contained MTD device drivers # # CONFIG_MTD_PMC551 is not set # CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set # CONFIG_MTD_MTDRAM is not set # CONFIG_MTD_BLKMTD is not set @@ -253,6 +251,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -262,6 +261,7 @@ # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set # CONFIG_BLK_DEV_DAC960 is not set CONFIG_BLK_DEV_LOOP=m # CONFIG_BLK_DEV_NBD is not set @@ -278,6 +278,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -339,6 +340,7 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -348,6 +350,9 @@ # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set # CONFIG_NET_ISA is not set # CONFIG_NET_PCI is not set # CONFIG_NET_POCKET is not set @@ -356,8 +361,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -442,6 +448,8 @@ # CONFIG_WINBOND_FIR is not set # CONFIG_TOSHIBA_FIR is not set # CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set CONFIG_SA1100_FIR=m # @@ -486,6 +494,9 @@ # CONFIG_IDEDMA_AUTO is not set # CONFIG_DMA_NONPCI is not set # CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set # # SCSI support @@ -510,6 +521,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Character devices @@ -519,31 +534,36 @@ # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set # CONFIG_SERIAL_AMBA is not set # CONFIG_SERIAL_AMBA_CONSOLE is not set # CONFIG_SERIAL_CLPS711X is not set # CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y CONFIG_SA1100_DEFAULT_BAUDRATE=38400 CONFIG_SERIAL_8250=m # CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=32 -CONFIG_UCB1200=y -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_AUDIO_UCB1200 is not set -CONFIG_ADC_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set # # I2C support @@ -551,6 +571,19 @@ # CONFIG_I2C is not set # +# L3 serial bus support +# +CONFIG_L3=y +CONFIG_L3_ALGOBIT=y +CONFIG_L3_BIT_SA1100_GPIO=y + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +CONFIG_BIT_SA1100_GPIO=y + +# # Mice # # CONFIG_BUSMOUSE is not set @@ -559,7 +592,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -588,6 +625,8 @@ # # PCMCIA character devices # +CONFIG_PCMCIA_SERIAL_CS=m +# CONFIG_MWAVE is not set # # Multimedia devices @@ -607,13 +646,16 @@ # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set # CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set CONFIG_FAT_FS=y CONFIG_MSDOS_FS=y # CONFIG_UMSDOS_FS is not set # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=m -CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS_FS is not set CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 # CONFIG_CRAMFS is not set @@ -621,8 +663,9 @@ # CONFIG_RAMFS is not set # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set # CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set +# CONFIG_FREEVXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -645,6 +688,7 @@ # Network File Systems # # CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_ROOT_NFS is not set @@ -662,6 +706,8 @@ # CONFIG_NCPFS_SMALLDOS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set # # Partition Types @@ -677,6 +723,7 @@ # CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set @@ -736,11 +783,10 @@ CONFIG_FB=y CONFIG_DUMMY_CONSOLE=y # CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set # CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set CONFIG_FB_SA1100=y -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_E1355 is not set +# CONFIG_FB_CYBER2000 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB2=y @@ -759,12 +805,10 @@ # Sound # CONFIG_SOUND=y -CONFIG_SOUND_ASSABET_UDA1341=y -# CONFIG_SOUND_BITSY_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_BT878 is not set # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set # CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set @@ -773,21 +817,138 @@ # CONFIG_SOUND_MAESTRO is not set # CONFIG_SOUND_MAESTRO3 is not set # CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set # CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_SA1100=y +CONFIG_SOUND_UDA1341=y +CONFIG_SOUND_ASSABET_UDA1341=y +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set # CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set # CONFIG_SOUND_TVMIXER is not set # +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA1100=y +CONFIG_MCP_UCB1200=y +CONFIG_MCP_UCB1200_AUDIO=m +CONFIG_MCP_UCB1200_TS=y + +# # USB support # # CONFIG_USB is not set # +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# # Bluetooth support # # CONFIG_BLUEZ is not set @@ -799,7 +960,9 @@ CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_SLAB is not set CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set # CONFIG_NO_PGT_CACHE is not set # CONFIG_DEBUG_LL is not set # CONFIG_DEBUG_DC21285_PORT is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/bitsy linux/arch/arm/def-configs/bitsy --- v2.4.13/linux/arch/arm/def-configs/bitsy Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/def-configs/bitsy Wed Dec 31 16:00:00 1969 @@ -1,763 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ANAKIN is not set -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_L7200 is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_SHARK is not set - -# -# Archimedes/A5000 Implementations -# - -# -# Archimedes/A5000 Implementations (select only ONE) -# -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set - -# -# Footbridge Implementations -# -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -CONFIG_SA1100_BITSY=y -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -# CONFIG_SA1100_USB_CHAR is not set - -# -# CLPS711X/EP721X Implementations -# -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set - -# -# Processor Type -# -# CONFIG_CPU_32v3 is not set -CONFIG_CPU_32v4=y -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y -# CONFIG_CPU_BIG_ENDIAN is not set - -# -# General setup -# -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_CPU_FREQ=y -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_I82365 is not set -# CONFIG_TCIC is not set -# CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -CONFIG_PM=y -CONFIG_APM=m -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="" -# CONFIG_PFS168_CMDLINE is not set -# CONFIG_LEDS is not set -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=y -CONFIG_MTD_BOOTLDR_PARTS=y -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_GEOMETRY is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_JEDEC is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set -# CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set -# CONFIG_MTD_SA1100 is not set -# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set -# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLKMTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set -# CONFIG_ISAPNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set -# CONFIG_BLK_CPQ_DA is not set -# CONFIG_BLK_CPQ_CISS_DA is not set -# CONFIG_BLK_DEV_DAC960 is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -CONFIG_BLK_DEV_INITRD=y - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_BLK_DEV_LVM is not set - -# -# Networking options -# -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# Ethernet (10 or 100Mbit) -# -# CONFIG_NET_ETHERNET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set -# CONFIG_MYRI_SBUS is not set -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PLIP is not set -CONFIG_PPP=m -# CONFIG_PPP_MULTILINK is not set -# CONFIG_PPP_FILTER is not set -CONFIG_PPP_ASYNC=m -# CONFIG_PPP_SYNC_TTY is not set -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -# CONFIG_PPPOE is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -CONFIG_NET_PCMCIA=y -# CONFIG_PCMCIA_3C589 is not set -# CONFIG_PCMCIA_3C574 is not set -# CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=y -# CONFIG_PCMCIA_NMCLAN is not set -# CONFIG_PCMCIA_SMC91C92 is not set -# CONFIG_PCMCIA_XIRC2PS is not set -# CONFIG_ARCNET_COM20020_CS is not set -# CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=m - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set -# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set -# CONFIG_BLK_DEV_IDEDISK_IBM is not set -# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set -# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set -# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set -# CONFIG_BLK_DEV_IDEDISK_WD is not set -# CONFIG_BLK_DEV_COMMERIAL is not set -# CONFIG_BLK_DEV_TIVO is not set -# CONFIG_BLK_DEV_IDECS is not set -CONFIG_BLK_DEV_IDECD=m -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_DMA_NONPCI is not set -# CONFIG_BLK_DEV_IDE_MODES is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input core support -# -# CONFIG_INPUT is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL=m -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=38400 -CONFIG_SERIAL_8250=m -# CONFIG_SERIAL_8250_CONSOLE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 -# CONFIG_UCB1200 is not set -# CONFIG_TOUCHSCREEN_UCB1200 is not set -# CONFIG_AUDIO_UCB1200 is not set -# CONFIG_ADC_UCB1200 is not set -CONFIG_TOUCHSCREEN_BITSY=y -CONFIG_PROFILER=m -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=m -# CONFIG_PSMOUSE is not set -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -CONFIG_SA1100_RTC=m -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set - -# -# PCMCIA character devices -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -# CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=m -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=m -CONFIG_JFFS_FS_VERBOSE=2 -CONFIG_JFFS2_FS=m -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_CRAMFS=m -# CONFIG_TMPFS is not set -CONFIG_RAMFS=y -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_RW is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set -# CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -CONFIG_NFSD=m -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -CONFIG_SMB_FS=m -# CONFIG_SMB_NLS_DEFAULT is not set -# CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -CONFIG_SMB_NLS=y -CONFIG_NLS=y - -# -# Native Language Support -# -CONFIG_NLS_DEFAULT="iso8859-1" -# CONFIG_NLS_CODEPAGE_437 is not set -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ISO8859_1 is not set -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Console drivers -# -CONFIG_PC_KEYMAP=y -# CONFIG_VGA_CONSOLE is not set - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_ACORN is not set -# CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set -CONFIG_FB_SA1100=y -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_E1355 is not set -# CONFIG_FB_VIRTUAL is not set -CONFIG_FBCON_ADVANCED=y -# CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -# CONFIG_FBCON_CFB8 is not set -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_CFB24 is not set -# CONFIG_FBCON_CFB32 is not set -# CONFIG_FBCON_AFB is not set -# CONFIG_FBCON_ILBM is not set -# CONFIG_FBCON_IPLAN2P2 is not set -# CONFIG_FBCON_IPLAN2P4 is not set -# CONFIG_FBCON_IPLAN2P8 is not set -# CONFIG_FBCON_MAC is not set -# CONFIG_FBCON_VGA_PLANES is not set -# CONFIG_FBCON_VGA is not set -# CONFIG_FBCON_HGA is not set -CONFIG_FBCON_FONTWIDTH8_ONLY=y -CONFIG_FBCON_FONTS=y -CONFIG_FONT_8x8=y -# CONFIG_FONT_8x16 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set - -# -# Sound -# -CONFIG_SOUND=y -# CONFIG_SOUND_ASSABET_UDA1341 is not set -CONFIG_SOUND_BITSY_UDA1341=m -# CONFIG_SOUND_SA1111_UDA1341 is not set -# CONFIG_SOUND_SA1100SSP is not set -# CONFIG_SOUND_CMPCI is not set -# CONFIG_SOUND_EMU10K1 is not set -# CONFIG_SOUND_FUSION is not set -# CONFIG_SOUND_CS4281 is not set -# CONFIG_SOUND_ES1370 is not set -# CONFIG_SOUND_ES1371 is not set -# CONFIG_SOUND_ESSSOLO1 is not set -# CONFIG_SOUND_MAESTRO is not set -# CONFIG_SOUND_MAESTRO3 is not set -# CONFIG_SOUND_ICH is not set -# CONFIG_SOUND_SONICVIBES is not set -# CONFIG_SOUND_TRIDENT is not set -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -# CONFIG_SOUND_VIA82CXXX is not set -# CONFIG_MIDI_VIA82CXXX is not set -# CONFIG_SOUND_OSS is not set -# CONFIG_SOUND_TVMIXER is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Bluetooth support -# -# CONFIG_BLUEZ is not set - -# -# Kernel hacking -# -# CONFIG_NO_FRAME_POINTER is not set -CONFIG_DEBUG_ERRORS=y -# CONFIG_DEBUG_USER is not set -# CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -# CONFIG_NO_PGT_CACHE is not set -# CONFIG_DEBUG_LL is not set -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/cerf linux/arch/arm/def-configs/cerf --- v2.4.13/linux/arch/arm/def-configs/cerf Mon Nov 27 17:07:59 2000 +++ linux/arch/arm/def-configs/cerf Wed Dec 31 16:00:00 1969 @@ -1,434 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_ARM=y -# CONFIG_SBUS is not set -CONFIG_UID16=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set - -# -# Loadable module support -# -CONFIG_MODULES=y -# CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set - -# -# System Type -# -# CONFIG_ARCH_ARCA5K is not set -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_RPC is not set -CONFIG_ARCH_SA1100=y - -# -# SA11x0 Implementations -# -# CONFIG_SA1100_ASSABET is not set -# CONFIG_SA1100_BRUTUS is not set -CONFIG_SA1100_CERF=y -CONFIG_SA1100_CERF_32MB=y -# CONFIG_SA1100_BITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_THINCLIENT is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_ANGELBOOT is not set -# CONFIG_SA1100_FREQUENCY_SCALE is not set -# CONFIG_SA1100_VOLTAGE_SCALE is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set -CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -CONFIG_CPU_32v4=y -CONFIG_CPU_SA1100=y -CONFIG_DISCONTIGMEM=y -# CONFIG_PCI is not set -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set -CONFIG_PC_KEYMAP=y - -# -# General setup -# -# CONFIG_SA1100_CERF_CMDLINE is not set -CONFIG_HOTPLUG=y - -# -# PCMCIA/CardBus support -# -CONFIG_PCMCIA=y -# CONFIG_PCMCIA_DEBUG is not set -CONFIG_SA1100_PCMCIA=y -CONFIG_VIRTUAL_BUS=y -CONFIG_NET=y -CONFIG_SYSVIPC=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_SYSCTL=y -CONFIG_NWFPE=y -CONFIG_KCORE_ELF=y -# CONFIG_KCORE_AOUT is not set -# CONFIG_BINFMT_AOUT is not set -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_PM is not set -# CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttyS0,38400" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y -CONFIG_ALIGNMENT_TRAP=y - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Memory Technology Devices (MTD) -# -# CONFIG_MTD is not set - -# -# Plug and Play configuration -# -# CONFIG_PNP is not set - -# -# Block devices -# -# CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_LOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_LVM is not set -# CONFIG_BLK_DEV_MD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y -CONFIG_BLK_DEV_FLASH=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set -# CONFIG_NETFILTER is not set -# CONFIG_FILTER is not set -CONFIG_UNIX=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set -# CONFIG_IP_ROUTER is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_IP_ALIAS is not set -# CONFIG_INET_ECN is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set -# CONFIG_ATM is not set - -# -# -# -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_DECNET is not set -# CONFIG_BRIDGE is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_LLC is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_FASTROUTE is not set -# CONFIG_NET_HW_FLOWCONTROL is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network device support -# -CONFIG_NETDEVICES=y - -# -# ARCnet devices -# -# CONFIG_ARCNET is not set -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_NET_SB1000 is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_CERF_CS8900A=y -# CONFIG_ARM_AM79C961A is not set -# CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_NET_ISA is not set -# CONFIG_NET_PCI is not set -# CONFIG_NET_POCKET is not set - -# -# Ethernet (1000 Mbit) -# -# CONFIG_YELLOWFIN is not set -# CONFIG_ACENIC is not set -# CONFIG_SK98LIN is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set - -# -# Wireless LAN (non-hamradio) -# -# CONFIG_NET_RADIO is not set - -# -# Token Ring devices -# -# CONFIG_TR is not set -# CONFIG_NET_FC is not set -# CONFIG_RCPCI is not set -# CONFIG_SHAPER is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set - -# -# PCMCIA network device support -# -# CONFIG_NET_PCMCIA is not set - -# -# Amateur Radio support -# -# CONFIG_HAMRADIO is not set - -# -# IrDA (infrared) support -# -# CONFIG_IRDA is not set - -# -# ATA/IDE/MFM/RLL support -# -CONFIG_IDE=y - -# -# IDE, ATA and ATAPI Block devices -# -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_HD_IDE is not set -# CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y -# CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set -# CONFIG_BLK_DEV_COMMERIAL is not set -CONFIG_BLK_DEV_IDECS=y -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set - -# -# IDE chipset support/bugfixes -# -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_IDE_CHIPSETS is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_DMA_NONPCI is not set -# CONFIG_BLK_DEV_IDE_MODES is not set - -# -# SCSI support -# -# CONFIG_SCSI is not set - -# -# I2O device support -# -# CONFIG_I2O is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Character devices -# -CONFIG_VT=y -# CONFIG_VT_CONSOLE is not set -CONFIG_SERIAL_SA1100=y -CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_SERIAL is not set -# CONFIG_SERIAL_EXTENDED is not set -# CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Mice -# -# CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set - -# -# Joysticks -# -# CONFIG_JOYSTICK is not set -# CONFIG_QIC02_TAPE is not set - -# -# Watchdog Cards -# -# CONFIG_WATCHDOG is not set -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set - -# -# Video For Linux -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set -# CONFIG_APPLICOM is not set - -# -# Ftape, the floppy tape device driver -# -# CONFIG_FTAPE is not set -# CONFIG_AGP is not set -# CONFIG_DRM is not set -# CONFIG_PCMCIA_SERIAL is not set - -# -# File systems -# -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_FAT_FS is not set -# CONFIG_EFS_FS is not set -CONFIG_JFFS_FS_VERBOSE=0 -# CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -CONFIG_DEVPTS_FS=y -# CONFIG_QNX4FS_FS is not set -# CONFIG_ROMFS_FS 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 - -# -# Network File Systems -# -# CONFIG_CODA_FS is not set -CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -# CONFIG_ROOT_NFS is not set -# CONFIG_NFSD is not set -CONFIG_SUNRPC=y -CONFIG_LOCKD=y -# CONFIG_SMB_FS is not set -# CONFIG_NCP_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_NLS is not set - -# -# Console drivers -# -# CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y - -# -# Frame-buffer support -# -CONFIG_FB=y -CONFIG_DUMMY_CONSOLE=y -CONFIG_FB_SA1100=y -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y -CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -# CONFIG_FBCON_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y - -# -# Sound -# -# CONFIG_SOUND is not set - -# -# USB support -# -# CONFIG_USB is not set - -# -# Kernel hacking -# -CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set -# CONFIG_DEBUG_LL is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/cerfcube linux/arch/arm/def-configs/cerfcube --- v2.4.13/linux/arch/arm/def-configs/cerfcube Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/cerfcube Thu Oct 25 13:53:44 2001 @@ -0,0 +1,887 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +CONFIG_SA1100_CERF=y +# CONFIG_SA1100_CERF_8MB is not set +# CONFIG_SA1100_CERF_16MB is not set +CONFIG_SA1100_CERF_32MB=y +# CONFIG_SA1100_CERF_64MB is not set +# CONFIG_SA1100_CERF_FLASH_8MB is not set +CONFIG_SA1100_CERF_FLASH_16MB=y +# CONFIG_SA1100_CERF_FLASH_32MB is not set +# CONFIG_SA1100_CERF_CPLD is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=y +CONFIG_SA1100_USB_NETLINK=y +CONFIG_SA1100_USB_CHAR=y + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0 root=1f03 rw" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +CONFIG_FILTER=y +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_ELMC is not set +# CONFIG_ELMC_II is not set +CONFIG_CERF_CS8900A=y +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=m +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=9600 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +# CONFIG_UCB1200 is not set +# CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_H3600 is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_BIT_SA1100_UCB1200 is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set + +# +# L3 driver support +# +# CONFIG_L3_DRV_UDA1341 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_UMSDOS_FS=y +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# Miscellaneous USB drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/cerfpda linux/arch/arm/def-configs/cerfpda --- v2.4.13/linux/arch/arm/def-configs/cerfpda Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/cerfpda Thu Oct 25 13:53:44 2001 @@ -0,0 +1,981 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +CONFIG_SA1100_CERF=y +# CONFIG_SA1100_CERF_8MB is not set +# CONFIG_SA1100_CERF_16MB is not set +# CONFIG_SA1100_CERF_32MB is not set +CONFIG_SA1100_CERF_64MB=y +# CONFIG_SA1100_CERF_FLASH_8MB is not set +# CONFIG_SA1100_CERF_FLASH_16MB is not set +CONFIG_SA1100_CERF_FLASH_32MB=y +CONFIG_SA1100_CERF_CPLD=y +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=y +CONFIG_SA1100_USB_NETLINK=y +CONFIG_SA1100_USB_CHAR=y + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0 cpufreq_max=221200 root=1f03 rw" +# CONFIG_PFS168_CMDLINE is not set +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +CONFIG_FILTER=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_ELMC is not set +# CONFIG_ELMC_II is not set +CONFIG_CERF_CS8900A=y +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +CONFIG_STRIP=m +CONFIG_WAVELAN=m +CONFIG_ARLAN=m +CONFIG_AIRONET4500=m +CONFIG_AIRONET4500_NONCS=m +# CONFIG_AIRONET4500_PNP is not set +# CONFIG_AIRONET4500_PCI is not set +# CONFIG_AIRONET4500_ISA is not set +# CONFIG_AIRONET4500_I365 is not set +CONFIG_AIRONET4500_PROC=m + +# +# Wireless Pcmcia cards support +# +CONFIG_PCMCIA_HERMES=m +CONFIG_AIRO_CS=m +CONFIG_NET_WIRELESS=y + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +CONFIG_NET_PCMCIA_RADIO=y +CONFIG_PCMCIA_RAYCS=m +CONFIG_PCMCIA_NETWAVE=m +CONFIG_PCMCIA_WAVELAN=m +CONFIG_AIRONET4500_CS=m + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +CONFIG_CERF_TS_MANUAL=y +CONFIG_CERF_TS_MAXX="924" +CONFIG_CERF_TS_MAXY="920" +CONFIG_CERF_TS_MINX="57" +CONFIG_CERF_TS_MINY="52" +CONFIG_CERF_TS_RESX="240" +CONFIG_CERF_TS_RESY="320" +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_H3600 is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set +CONFIG_SA1100_CERF_KEYPAD=y + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_BIT_SA1100_UCB1200 is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set + +# +# L3 driver support +# +# CONFIG_L3_DRV_UDA1341 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_UMSDOS_FS=y +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +CONFIG_CERF_LCD_38_A=y +# CONFIG_CERF_LCD_57_A is not set +# CONFIG_CERF_LCD_72_A is not set +CONFIG_SA1100_CERF_LCD_BACKLIGHT=y +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +CONFIG_SOUND=y +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +# CONFIG_SOUND_ASSABET_UDA1341 is not set +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +CONFIG_SOUND_CERF_UDA1341=y +# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# Miscellaneous USB drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +CONFIG_BLUEZ=y +CONFIG_BLUEZ_L2CAP=y + +# +# Bluetooth device drivers +# +# CONFIG_BLUEZ_HCIUSB is not set +CONFIG_BLUEZ_HCIUART=y +# CONFIG_BLUEZ_HCIVHCI is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/cerfpod linux/arch/arm/def-configs/cerfpod --- v2.4.13/linux/arch/arm/def-configs/cerfpod Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/cerfpod Thu Oct 25 13:53:44 2001 @@ -0,0 +1,908 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +CONFIG_SA1100_CERF=y +# CONFIG_SA1100_CERF_8MB is not set +# CONFIG_SA1100_CERF_16MB is not set +CONFIG_SA1100_CERF_32MB=y +# CONFIG_SA1100_CERF_64MB is not set +# CONFIG_SA1100_CERF_FLASH_8MB is not set +CONFIG_SA1100_CERF_FLASH_16MB=y +# CONFIG_SA1100_CERF_FLASH_32MB is not set +# CONFIG_SA1100_CERF_CPLD is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_USB=y +CONFIG_SA1100_USB_NETLINK=y +CONFIG_SA1100_USB_CHAR=y + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_CPU_FREQ=y +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttySA0 root=1f03 rw" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +CONFIG_FILTER=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +CONFIG_NET_VENDOR_3COM=y +# CONFIG_EL1 is not set +# CONFIG_EL2 is not set +# CONFIG_ELPLUS is not set +# CONFIG_EL16 is not set +# CONFIG_ELMC is not set +# CONFIG_ELMC_II is not set +CONFIG_CERF_CS8900A=y +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +# CONFIG_CERF_TS_MANUAL is not set +CONFIG_AUDIO_UCB1200=y +# CONFIG_ADC_UCB1200 is not set +# CONFIG_TOUCHSCREEN_H3600 is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_BIT_SA1100_UCB1200 is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set + +# +# L3 driver support +# +# CONFIG_L3_DRV_UDA1341 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +CONFIG_SA1100_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_UMSDOS_FS=y +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_CERF_LCD_38_A is not set +CONFIG_CERF_LCD_57_A=y +# CONFIG_CERF_LCD_72_A is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +# CONFIG_FBCON_FONTWIDTH8_ONLY is not set +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# Miscellaneous USB drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/edb7211 linux/arch/arm/def-configs/edb7211 --- v2.4.13/linux/arch/arm/def-configs/edb7211 Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/edb7211 Thu Oct 25 13:53:44 2001 @@ -0,0 +1,401 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +# CONFIG_MODULES is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +CONFIG_ARCH_CLPS711X=y + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# + +# +# CLPS711X/EP721X Implementations +# +CONFIG_ARCH_EDB7211=y +CONFIG_EP7211_BOOT_MODE=y +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +CONFIG_ARCH_EP7211=y +# CONFIG_ARCH_EP7212 is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +CONFIG_CPU_ARM720T=y +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +CONFIG_DISCONTIGMEM=y + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +# CONFIG_NET_ETHERNET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_CLPS711X=y +CONFIG_SERIAL_CLPS711X_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +CONFIG_MINIX_FS=y +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_NFS_FS is not set +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_SUNRPC is not set +# CONFIG_LOCKD is not set +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +# CONFIG_MSDOS_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_LL=y diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/epxa10db linux/arch/arm/def-configs/epxa10db --- v2.4.13/linux/arch/arm/def-configs/epxa10db Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/epxa10db Thu Oct 25 13:53:44 2001 @@ -0,0 +1,662 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +CONFIG_ARCH_CAMELOT=y +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +CONFIG_CPU_ARM922T=y +CONFIG_CPU_ARM92X_CPU_IDLE=y +CONFIG_CPU_ARM92X_I_CACHE_ON=y +CONFIG_CPU_ARM92X_D_CACHE_ON=y +# CONFIG_CPU_ARM92X_WRITETHROUGH is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +# CONFIG_ARM_THUMB is not set +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="console=ttyUA0,38400 root=/dev/mtdblock0 rw" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=0 +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +CONFIG_MTD_BOOTLDR_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +CONFIG_MTD_EPXA10DB=y +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_ETHER00=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +CONFIG_PPP=y +CONFIG_PPP_MULTILINK=y +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=y +CONFIG_PPP_SYNC_TTY=y +CONFIG_PPP_DEFLATE=y +CONFIG_PPP_BSDCOMP=y +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +# CONFIG_VT is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +CONFIG_SERIAL_UART00=y +CONFIG_SERIAL_UART00_CONSOLE=y +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_L3_SA1111 is not set +# CONFIG_L3_DRV_UDA1341 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# USB support +# +# CONFIG_USB is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set +# CONFIG_USB_DABUSB is not set +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_INFO=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/graphicsclient linux/arch/arm/def-configs/graphicsclient --- v2.4.13/linux/arch/arm/def-configs/graphicsclient Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/def-configs/graphicsclient Thu Oct 25 13:53:44 2001 @@ -6,6 +6,8 @@ # CONFIG_SBUS is not set # CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # # Code maturity level options @@ -23,16 +25,18 @@ # # System Type # +# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_RPC is not set CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_SHARK is not set # # Archimedes/A5000 Implementations @@ -62,23 +66,28 @@ # CONFIG_SA1100_CERF is not set # CONFIG_SA1100_BITSY is not set # CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set # CONFIG_SA1100_FREEBIRD is not set CONFIG_SA1100_GRAPHICSCLIENT=y +# CONFIG_SA1100_JORNADA720 is not set # CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set # CONFIG_SA1100_LART is not set -# CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set # CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set # CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_XP860 is not set # CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_PFS168 is not set -CONFIG_SA1100_USB=m -CONFIG_SA1100_USB_NETLINK=m -CONFIG_SA1100_USB_CHAR=m -# CONFIG_SA1100_FREQUENCY_SCALE is not set -# CONFIG_SA1100_VOLTAGE_SCALE is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set # # CLPS711X/EP721X Implementations @@ -104,18 +113,15 @@ # CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set # # General setup # - -# -# Please ensure that you have read the help on the next option -# -# CONFIG_ANGELBOOT is not set # CONFIG_PCI is not set # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set CONFIG_HOTPLUG=y # @@ -125,7 +131,7 @@ # CONFIG_I82365 is not set # CONFIG_TCIC is not set # CONFIG_PCMCIA_CLPS6700 is not set -CONFIG_PCMCIA_SA1100=m +CONFIG_PCMCIA_SA1100=y CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set @@ -138,12 +144,14 @@ CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set # CONFIG_PM is not set +# CONFIG_APM is not set # CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=nfs" +CONFIG_CMDLINE="ip=off" # CONFIG_PFS168_CMDLINE is not set -# CONFIG_LEDS is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y CONFIG_ALIGNMENT_TRAP=y -# CONFIG_UCB1200 is not set # # Parallel port support @@ -153,65 +161,87 @@ # # Memory Technology Devices (MTD) # -CONFIG_MTD=m +CONFIG_MTD=y # CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set # -# Disk-On-Chip Device Drivers +# User Modules And Translation Layers # -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set # -# RAM/ROM Device Drivers +# RAM/ROM/Flash chip drivers # -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set -# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_JEDEC is not set # -# Linearly Mapped Flash Device Drivers +# Mapping drivers for chip access # -CONFIG_MTD_CFI=m -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_CFI_INTELEXT=m -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_PHYSMAP is not set +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=800000 +CONFIG_MTD_PHYSMAP_LEN=1000000 +CONFIG_MTD_PHYSMAP_BUSWIDTH=4 +# CONFIG_MTD_SUN_UFLASH is not set # CONFIG_MTD_NORA is not set # CONFIG_MTD_PNC2000 is not set # CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set # CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set # CONFIG_MTD_ELAN_104NC is not set -CONFIG_MTD_SA1100=m +CONFIG_MTD_SA1100=y +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set # CONFIG_MTD_DC21285 is not set # CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_CSTM_CFI_JEDEC is not set -# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set # CONFIG_MTD_MIXMEM is not set # CONFIG_MTD_OCTAGON is not set # CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set # -# NAND Flash Device Drivers +# Self-contained MTD device drivers # -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set # -# User Modules And Translation Layers +# Disk-On-Chip Device Drivers # -CONFIG_MTD_CHAR=m -CONFIG_MTD_BLOCK=m -# CONFIG_MTD_BLOCK_RO is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set # # Plug and Play configuration @@ -258,6 +288,7 @@ # CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set CONFIG_IP_PNP_BOOTP=y # CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set @@ -302,22 +333,25 @@ # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set CONFIG_NET_VENDOR_SMC=y # CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set # CONFIG_ULTRA is not set # CONFIG_ULTRA32 is not set CONFIG_SMC9194=y # CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set # CONFIG_NET_ISA is not set # CONFIG_NET_PCI is not set # CONFIG_NET_POCKET is not set @@ -326,11 +360,14 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set +# CONFIG_PLIP is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set @@ -359,7 +396,7 @@ # CONFIG_PCMCIA_3C589 is not set # CONFIG_PCMCIA_3C574 is not set # CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_PCNET=y # CONFIG_PCMCIA_NMCLAN is not set # CONFIG_PCMCIA_SMC91C92 is not set # CONFIG_PCMCIA_XIRC2PS is not set @@ -380,19 +417,19 @@ # # ATA/IDE/MFM/RLL support # -CONFIG_IDE=m +CONFIG_IDE=y # # IDE, ATA and ATAPI Block devices # -CONFIG_BLK_DEV_IDE=m +CONFIG_BLK_DEV_IDE=y # # Please see Documentation/ide.txt for help/info on IDE drives # # CONFIG_BLK_DEV_HD_IDE is not set # CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=m +CONFIG_BLK_DEV_IDEDISK=y # CONFIG_IDEDISK_MULTI_MODE is not set # CONFIG_BLK_DEV_IDEDISK_VENDOR is not set # CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set @@ -403,7 +440,7 @@ # CONFIG_BLK_DEV_IDEDISK_WD is not set # CONFIG_BLK_DEV_COMMERIAL is not set # CONFIG_BLK_DEV_TIVO is not set -CONFIG_BLK_DEV_IDECS=m +CONFIG_BLK_DEV_IDECS=y # CONFIG_BLK_DEV_IDECD is not set # CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set @@ -452,19 +489,31 @@ # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=9600 -# CONFIG_TOUCHSCREEN_UCB1200 is not set +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +CONFIG_AUDIO_UCB1200=y +CONFIG_ADC_UCB1200=y # CONFIG_TOUCHSCREEN_BITSY is not set # CONFIG_PROFILER is not set # CONFIG_PFS168_SPI is not set # CONFIG_PFS168_DTMF is not set # CONFIG_PFS168_MISC is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 # # I2C support @@ -505,7 +554,10 @@ # CONFIG_FTAPE is not set # CONFIG_AGP is not set # CONFIG_DRM is not set -# CONFIG_PCMCIA_SERIAL is not set + +# +# PCMCIA character devices +# # # Multimedia devices @@ -525,20 +577,22 @@ # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set # CONFIG_BFS_FS is not set -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set # CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=m +CONFIG_VFAT_FS=y # CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=m +CONFIG_JFFS_FS=y CONFIG_JFFS_FS_VERBOSE=0 -CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 -# CONFIG_CRAMFS is not set -CONFIG_RAMFS=m +CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set # CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -552,7 +606,6 @@ # CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set @@ -607,11 +660,13 @@ # CONFIG_NLS_CODEPAGE_865 is not set # CONFIG_NLS_CODEPAGE_866 is not set # CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set # CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set # CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set # CONFIG_NLS_ISO8859_1 is not set # CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_3 is not set @@ -619,11 +674,12 @@ # CONFIG_NLS_ISO8859_5 is not set # CONFIG_NLS_ISO8859_6 is not set # CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set # CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set # CONFIG_NLS_ISO8859_14 is not set # CONFIG_NLS_ISO8859_15 is not set # CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_UTF8 is not set # @@ -631,7 +687,6 @@ # CONFIG_PC_KEYMAP=y # CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y # # Frame-buffer support @@ -642,6 +697,8 @@ # CONFIG_FB_CLPS711X is not set # CONFIG_FB_CYBER2000 is not set CONFIG_FB_SA1100=y +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB2=y @@ -665,6 +722,11 @@ # USB support # # CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set # # Kernel hacking diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/graphicsmaster linux/arch/arm/def-configs/graphicsmaster --- v2.4.13/linux/arch/arm/def-configs/graphicsmaster Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/def-configs/graphicsmaster Thu Oct 25 13:53:44 2001 @@ -0,0 +1,755 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +# CONFIG_KMOD is not set + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +CONFIG_SA1100_GRAPHICSMASTER=y +# CONFIG_SA1100_ADSBITSY is not set +CONFIG_SA1111=y +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set +CONFIG_CPU_SA1100=y +CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_APM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="ip=off" +# CONFIG_PFS168_CMDLINE is not set +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=800000 +CONFIG_MTD_PHYSMAP_LEN=1000000 +CONFIG_MTD_PHYSMAP_BUSWIDTH=4 +# CONFIG_MTD_SUN_UFLASH is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set +# CONFIG_MTD_SC520CDP is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set +# CONFIG_MTD_ELAN_104NC is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +CONFIG_BLK_DEV_LOOP=m +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +# CONFIG_PCMCIA_3C589 is not set +# CONFIG_PCMCIA_3C574 is not set +# CONFIG_PCMCIA_FMVJ18X is not set +CONFIG_PCMCIA_PCNET=y +# CONFIG_PCMCIA_NMCLAN is not set +# CONFIG_PCMCIA_SMC91C92 is not set +# CONFIG_PCMCIA_XIRC2PS is not set +# CONFIG_ARCNET_COM20020_CS is not set +# CONFIG_PCMCIA_IBMTR is not set +# CONFIG_NET_PCMCIA_RADIO is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +# CONFIG_BLK_DEV_HD_IDE is not set +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set +# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set +# CONFIG_BLK_DEV_IDEDISK_IBM is not set +# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set +# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set +# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set +# CONFIG_BLK_DEV_IDEDISK_WD is not set +# CONFIG_BLK_DEV_COMMERIAL is not set +# CONFIG_BLK_DEV_TIVO is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_IDE_MODES is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +# CONFIG_INPUT_KEYBDEV is not set +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +CONFIG_UCB1200=y +CONFIG_TOUCHSCREEN_UCB1200=y +CONFIG_AUDIO_UCB1200=y +CONFIG_ADC_UCB1200=y +# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_PROFILER is not set +# CONFIG_PFS168_SPI is not set +# CONFIG_PFS168_DTMF is not set +# CONFIG_PFS168_MISC is not set + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_SA1100_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +CONFIG_VFAT_FS=y +# CONFIG_EFS_FS is not set +CONFIG_JFFS_FS=y +CONFIG_JFFS_FS_VERBOSE=0 +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_PC_KEYMAP=y +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_CLPS711X is not set +# CONFIG_FB_CYBER2000 is not set +CONFIG_FB_SA1100=y +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FBCON_ADVANCED is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y +CONFIG_FBCON_CFB16=y +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=y +CONFIG_USB_OHCI_NOPCI=y +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_HID is not set +# CONFIG_USB_KBD is not set +CONFIG_USB_MOUSE=y +# CONFIG_USB_WACOM is not set +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_PWC is not set +# CONFIG_USB_SE401 is not set +# CONFIG_USB_DSBR is not set +# CONFIG_USB_DABUSB is not set +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_NET1080 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_RIO500 is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_NO_FRAME_POINTER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/h3600 linux/arch/arm/def-configs/h3600 --- v2.4.13/linux/arch/arm/def-configs/h3600 Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/def-configs/h3600 Thu Oct 25 13:53:44 2001 @@ -2,8 +2,14 @@ # Automatically generated make config: don't edit # CONFIG_ARM=y +# CONFIG_EISA is not set # CONFIG_SBUS is not set +# CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set # # Code maturity level options @@ -16,46 +22,85 @@ # CONFIG_MODULES=y # CONFIG_MODVERSIONS is not set -CONFIG_KMOD=y +# CONFIG_KMOD is not set # # System Type # +# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_RPC is not set CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_SHARK is not set # # Archimedes/A5000 Implementations # # +# Archimedes/A5000 Implementations (select only ONE) +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# # Footbridge Implementations # +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set # # SA11x0 Implementations # # CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set -CONFIG_SA1100_BITSY=y -# CONFIG_SA1100_LART is not set +CONFIG_SA1100_H3600=y +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set # CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_ANGELBOOT is not set +# CONFIG_SA1100_YOPY is not set CONFIG_SA1100_USB=m -CONFIG_SA1100_FREQUENCY_SCALE=y -# CONFIG_SA1100_VOLTAGE_SCALE is not set +CONFIG_SA1100_USB_NETLINK=m +# CONFIG_SA1100_USB_CHAR is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -66,42 +111,55 @@ # # Processor Type # +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +# CONFIG_CPU_ARM720T is not set +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set CONFIG_DISCONTIGMEM=y # # General setup # # CONFIG_PCI is not set -# CONFIG_ISA is not set +CONFIG_ISA=y # CONFIG_ISA_DMA is not set -CONFIG_PC_KEYMAP=y +CONFIG_CPU_FREQ=y CONFIG_HOTPLUG=y # # PCMCIA/CardBus support # -CONFIG_PCMCIA=m -CONFIG_PCMCIA_DEBUG=y -PCMCIA_DEBUG=1 -CONFIG_SA1100_PCMCIA=y -CONFIG_VIRTUAL_BUS=y +CONFIG_PCMCIA=y +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_CLPS6700 is not set +CONFIG_PCMCIA_SA1100=y CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_NWFPE=y + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y +# CONFIG_BINFMT_AOUT is not set CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set CONFIG_PM=y # CONFIG_ARTHUR is not set CONFIG_CMDLINE="" # CONFIG_LEDS is not set -# CONFIG_ALIGNMENT_TRAP is not set +CONFIG_ALIGNMENT_TRAP=y # # Parallel port support @@ -112,50 +170,86 @@ # Memory Technology Devices (MTD) # CONFIG_MTD=y -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=y +CONFIG_MTD_BOOTLDR_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set # -# MTD drivers for mapped chips +# User Modules And Translation Layers # -CONFIG_MTD_CFI=m -CONFIG_MTD_CFI_INTELEXT=m -CONFIG_MTD_CFI_AMDSTD=m -# CONFIG_MTD_JEDEC is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set -CONFIG_MTD_PHYSMAP=m -CONFIG_MTD_PHYSMAP_START=0 -CONFIG_MTD_PHYSMAP_LEN=0 +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set # -# Drivers for chip mappings +# Mapping drivers for chip access # -# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_PHYSMAP is not set # CONFIG_MTD_NORA is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_PCI is not set # -# User modules and translation layers for MTD devices +# Self-contained MTD device drivers # -CONFIG_MTD_CHAR=m -CONFIG_MTD_BLOCK=m -# CONFIG_FTL is not set -# CONFIG_NFTL is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set # # Plug and Play configuration # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -164,39 +258,41 @@ # CONFIG_BLK_DEV_XD is not set # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set # CONFIG_BLK_DEV_DAC960 is not set CONFIG_BLK_DEV_LOOP=m -CONFIG_BLK_DEV_NBD=m -# CONFIG_BLK_DEV_LVM is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_BLK_DEV_INITRD=y + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set # CONFIG_BLK_DEV_MD is not set # CONFIG_MD_LINEAR is not set # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -CONFIG_BLK_DEV_INITRD=y -CONFIG_BLK_DEV_FLASH=y +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set # # Networking options # -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y -CONFIG_NETLINK_DEV=y +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set # CONFIG_NETFILTER is not set # CONFIG_FILTER is not set CONFIG_UNIX=y CONFIG_INET=y -CONFIG_IP_MULTICAST=y +# CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set # CONFIG_IP_PNP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set -# CONFIG_IP_MROUTE is not set -# CONFIG_ARPD is not set # CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set # CONFIG_IPV6 is not set @@ -213,6 +309,7 @@ # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set # CONFIG_NET_FASTROUTE is not set @@ -236,8 +333,6 @@ # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set -# CONFIG_ETHERTAP is not set -# CONFIG_NET_SB1000 is not set # # Ethernet (10 or 100Mbit) @@ -247,13 +342,19 @@ # # Ethernet (1000 Mbit) # -# CONFIG_YELLOWFIN is not set # CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set +# CONFIG_PLIP is not set CONFIG_PPP=m # CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set CONFIG_PPP_ASYNC=m # CONFIG_PPP_SYNC_TTY is not set CONFIG_PPP_DEFLATE=m @@ -286,17 +387,13 @@ # CONFIG_PCMCIA_3C589 is not set # CONFIG_PCMCIA_3C574 is not set # CONFIG_PCMCIA_FMVJ18X is not set -CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_PCNET=y # CONFIG_PCMCIA_NMCLAN is not set # CONFIG_PCMCIA_SMC91C92 is not set # CONFIG_PCMCIA_XIRC2PS is not set # CONFIG_ARCNET_COM20020_CS is not set # CONFIG_PCMCIA_IBMTR is not set -CONFIG_NET_PCMCIA_RADIO=y -# CONFIG_PCMCIA_RAYCS is not set -# CONFIG_PCMCIA_NETWAVE is not set -# CONFIG_PCMCIA_WAVELAN is not set -# CONFIG_AIRONET4500_CS is not set +# CONFIG_NET_PCMCIA_RADIO is not set # # Amateur Radio support @@ -306,7 +403,43 @@ # # IrDA (infrared) support # -# CONFIG_IRDA is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set +# CONFIG_IRDA_OPTIONS is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set +# CONFIG_IRPORT_SIR is not set + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_NSC_FIR is not set +# CONFIG_WINBOND_FIR is not set +# CONFIG_TOSHIBA_FIR is not set +# CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set +CONFIG_SA1100_FIR=m # # ATA/IDE/MFM/RLL support @@ -334,10 +467,10 @@ # CONFIG_BLK_DEV_IDEDISK_WD is not set # CONFIG_BLK_DEV_COMMERIAL is not set # CONFIG_BLK_DEV_TIVO is not set -CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECS is not set CONFIG_BLK_DEV_IDECD=m -CONFIG_BLK_DEV_IDETAPE=m -CONFIG_BLK_DEV_IDEFLOPPY=m +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDESCSI is not set # @@ -350,6 +483,9 @@ # CONFIG_IDEDMA_AUTO is not set # CONFIG_DMA_NONPCI is not set # CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set # # SCSI support @@ -374,20 +510,47 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Character devices # CONFIG_VT=y -CONFIG_VT_CONSOLE=y -# CONFIG_SERIAL is not set +# CONFIG_VT_CONSOLE is not set +CONFIG_SERIAL=m # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y -CONFIG_SA1100_DEFAULT_BAUDRATE=115200 -# CONFIG_TOUCHSCREEN_UCB1200 is not set -CONFIG_TOUCHSCREEN_BITSY=y +CONFIG_SA1100_DEFAULT_BAUDRATE=38400 +CONFIG_SERIAL_8250=m +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=32 @@ -397,15 +560,35 @@ # CONFIG_I2C is not set # +# L3 serial bus support +# +CONFIG_L3=y +CONFIG_L3_ALGOBIT=y +CONFIG_L3_BIT_SA1100_GPIO=y + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +CONFIG_BIT_SA1100_GPIO=y + +# # Mice # # CONFIG_BUSMOUSE is not set -# CONFIG_MOUSE is not set +CONFIG_MOUSE=m +# CONFIG_PSMOUSE is not set +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -419,6 +602,7 @@ # CONFIG_INTEL_RNG is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set +CONFIG_SA1100_RTC=m # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set @@ -429,7 +613,17 @@ # CONFIG_FTAPE is not set # CONFIG_AGP is not set # CONFIG_DRM is not set -# CONFIG_PCMCIA_SERIAL is not set + +# +# PCMCIA character devices +# +# CONFIG_PCMCIA_SERIAL_CS is not set +# CONFIG_MWAVE is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set # # File systems @@ -437,23 +631,33 @@ # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set # CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set CONFIG_FAT_FS=m CONFIG_MSDOS_FS=m # CONFIG_UMSDOS_FS is not set CONFIG_VFAT_FS=m # CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=m -CONFIG_JFFS_FS_VERBOSE=2 -CONFIG_CRAMFS=y +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_CRAMFS=m +# CONFIG_TMPFS is not set CONFIG_RAMFS=y # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set # CONFIG_MINIX_FS is not set +# CONFIG_FREEVXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -467,7 +671,6 @@ # CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set @@ -477,15 +680,16 @@ # Network File Systems # # CONFIG_CODA_FS is not set -CONFIG_NFS_FS=m +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_ROOT_NFS is not set CONFIG_NFSD=m # CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=m -CONFIG_LOCKD=m +CONFIG_SUNRPC=y +CONFIG_LOCKD=y CONFIG_SMB_FS=m -CONFIG_SMB_NLS_REMOTE="" +# CONFIG_SMB_NLS_DEFAULT is not set # CONFIG_NCP_FS is not set # CONFIG_NCPFS_PACKET_SIGNING is not set # CONFIG_NCPFS_IOCTL_LOCKING is not set @@ -493,16 +697,17 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +CONFIG_ZLIB_FS_INFLATE=m # # Partition Types # # CONFIG_PARTITION_ADVANCED is not set CONFIG_MSDOS_PARTITION=y +CONFIG_SMB_NLS=y CONFIG_NLS=y # @@ -524,11 +729,13 @@ # CONFIG_NLS_CODEPAGE_865 is not set # CONFIG_NLS_CODEPAGE_866 is not set # CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set # CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set # CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set # CONFIG_NLS_ISO8859_1 is not set # CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_3 is not set @@ -536,69 +743,219 @@ # CONFIG_NLS_ISO8859_5 is not set # CONFIG_NLS_ISO8859_6 is not set # CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set # CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set # CONFIG_NLS_ISO8859_14 is not set # CONFIG_NLS_ISO8859_15 is not set # CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_UTF8 is not set # # Console drivers # +CONFIG_PC_KEYMAP=y # CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y # # Frame-buffer support # CONFIG_FB=y CONFIG_DUMMY_CONSOLE=y -# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_CLPS711X is not set CONFIG_FB_SA1100=y +# CONFIG_FB_CYBER2000 is not set # CONFIG_FB_VIRTUAL is not set -# CONFIG_FBCON_ADVANCED is not set -CONFIG_FBCON_CFB2=y -CONFIG_FBCON_CFB4=y -CONFIG_FBCON_CFB8=y +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +# CONFIG_FBCON_CFB4 is not set +# CONFIG_FBCON_CFB8 is not set CONFIG_FBCON_CFB16=y -# CONFIG_FBCON_FONTWIDTH8_ONLY is not set -# CONFIG_FBCON_FONTS is not set +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +CONFIG_FBCON_FONTS=y CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set # # Sound # -CONFIG_SOUND=m -CONFIG_SOUND_UDA1341=m -# CONFIG_SOUND_SA1100_SSP is not set +CONFIG_SOUND=y +# CONFIG_SOUND_BT878 is not set # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set # CONFIG_SOUND_ES1371 is not set # CONFIG_SOUND_ESSSOLO1 is not set # CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_SA1100=y +CONFIG_SOUND_UDA1341=y +# CONFIG_SOUND_ASSABET_UDA1341 is not set +CONFIG_SOUND_H3600_UDA1341=y +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set # CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set # CONFIG_SOUND_TVMIXER is not set # +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# # USB support # # CONFIG_USB is not set # +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# # Kernel hacking # -CONFIG_FRAME_POINTER=y +# CONFIG_NO_FRAME_POINTER is not set CONFIG_DEBUG_ERRORS=y # CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_INFO is not set -# CONFIG_MAGIC_SYSRQ is not set -CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_SLAB is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/lart linux/arch/arm/def-configs/lart --- v2.4.13/linux/arch/arm/def-configs/lart Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/def-configs/lart Thu Oct 25 13:53:44 2001 @@ -62,13 +62,15 @@ # # CONFIG_SA1100_ASSABET is not set # CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_H3600 is not set # CONFIG_SA1100_EXTENEX1 is not set # CONFIG_SA1100_FLEXANET is not set # CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set # CONFIG_SA1100_JORNADA720 is not set # CONFIG_SA1100_HUW_WEBPANEL is not set # CONFIG_SA1100_ITSY is not set @@ -90,7 +92,12 @@ # # CLPS711X/EP721X Implementations # +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set # CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -126,6 +133,10 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# CONFIG_FPE_NWFPE=y # CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y @@ -136,7 +147,7 @@ CONFIG_PM=y CONFIG_APM=m # CONFIG_ARTHUR is not set -CONFIG_CMDLINE="console=ttySA0,9600" +CONFIG_CMDLINE="console=ttySA0,9600 root=/dev/ram" # CONFIG_PFS168_CMDLINE is not set CONFIG_LEDS=y # CONFIG_LEDS_TIMER is not set @@ -151,10 +162,10 @@ # # Memory Technology Devices (MTD) # -CONFIG_MTD=m +CONFIG_MTD=y CONFIG_MTD_DEBUG=y CONFIG_MTD_DEBUG_VERBOSE=1 -# CONFIG_MTD_PARTITIONS is not set +CONFIG_MTD_PARTITIONS=y # CONFIG_MTD_REDBOOT_PARTS is not set # CONFIG_MTD_BOOTLDR_PARTS is not set # CONFIG_MTD_AFS_PARTS is not set @@ -162,28 +173,16 @@ # # User Modules And Translation Layers # -CONFIG_MTD_CHAR=m -CONFIG_MTD_BLOCK=m -CONFIG_MTD_BLOCK_RO=m +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y # CONFIG_FTL is not set # CONFIG_NFTL is not set # # RAM/ROM/Flash chip drivers # -CONFIG_MTD_CFI=m -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_CFI_B1 is not set -# CONFIG_MTD_CFI_B2 is not set -CONFIG_MTD_CFI_B4=y -# CONFIG_MTD_CFI_I1 is not set -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -CONFIG_MTD_CFI_INTELEXT=m +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_CFI_INTELEXT is not set # CONFIG_MTD_CFI_AMDSTD is not set # CONFIG_MTD_AMDSTD is not set # CONFIG_MTD_SHARP is not set @@ -204,28 +203,27 @@ # CONFIG_MTD_NETSC520 is not set # CONFIG_MTD_SBC_GXX is not set # CONFIG_MTD_ELAN_104NC is not set -# CONFIG_MTD_SA1100 is not set -# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set -# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set -# CONFIG_MTD_DC21285 is not set -# CONFIG_MTD_IQ80310 is not set # CONFIG_MTD_DBOX2 is not set # CONFIG_MTD_CSTM_MIPS_IXX is not set # CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set # CONFIG_MTD_SOLUTIONENGINE is not set # CONFIG_MTD_MIXMEM is not set # CONFIG_MTD_OCTAGON is not set # CONFIG_MTD_VMAX is not set # CONFIG_MTD_OCELOT is not set # CONFIG_MTD_L440GX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set # # Self-contained MTD device drivers # # CONFIG_MTD_PMC551 is not set # CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set +CONFIG_MTD_LART=y # CONFIG_MTD_MTDRAM is not set # CONFIG_MTD_BLKMTD is not set @@ -247,6 +245,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -296,7 +295,7 @@ # CONFIG_ATM is not set # -# +# # # CONFIG_IPX is not set # CONFIG_ATALK is not set @@ -351,8 +350,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -439,6 +439,8 @@ # CONFIG_WINBOND_FIR is not set # CONFIG_TOSHIBA_FIR is not set # CONFIG_SMC_IRCC_FIR is not set +# CONFIG_ALI_FIR is not set +# CONFIG_VLSI_FIR is not set CONFIG_SA1100_FIR=m # @@ -483,6 +485,9 @@ # CONFIG_IDEDMA_AUTO is not set # CONFIG_DMA_NONPCI is not set # CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set # # SCSI support @@ -507,6 +512,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Character devices @@ -515,18 +524,30 @@ # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set # CONFIG_SERIAL_AMBA is not set # CONFIG_SERIAL_AMBA_CONSOLE is not set # CONFIG_SERIAL_CLPS711X is not set # CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y CONFIG_SA1100_DEFAULT_BAUDRATE=9600 # CONFIG_SERIAL_8250 is not set # CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y @@ -535,7 +556,7 @@ CONFIG_TOUCHSCREEN_UCB1200=m CONFIG_AUDIO_UCB1200=m CONFIG_ADC_UCB1200=m -# CONFIG_TOUCHSCREEN_BITSY is not set +# CONFIG_TOUCHSCREEN_H3600 is not set CONFIG_PROFILER=m # CONFIG_PFS168_SPI is not set # CONFIG_PFS168_DTMF is not set @@ -547,6 +568,24 @@ # CONFIG_I2C is not set # +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set + +# +# L3 driver support +# +# CONFIG_L3_DRV_UDA1341 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# # Mice # # CONFIG_BUSMOUSE is not set @@ -555,7 +594,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -573,6 +616,7 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -594,18 +638,22 @@ # CONFIG_AUTOFS4_FS is not set CONFIG_REISERFS_FS=m # CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set # CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +CONFIG_EXT3_FS=m +CONFIG_JBD=m +# CONFIG_JBD_DEBUG is not set # CONFIG_FAT_FS is not set # CONFIG_MSDOS_FS is not set # CONFIG_UMSDOS_FS is not set # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=m -CONFIG_JFFS_FS_VERBOSE=1 +# CONFIG_JFFS_FS is not set CONFIG_JFFS2_FS=m CONFIG_JFFS2_FS_DEBUG=1 CONFIG_CRAMFS=m @@ -614,7 +662,7 @@ CONFIG_ISO9660_FS=m CONFIG_JOLIET=y # CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set +# CONFIG_FREEVXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -637,6 +685,7 @@ # Network File Systems # # CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set CONFIG_NFS_FS=m CONFIG_NFS_V3=y # CONFIG_ROOT_NFS is not set @@ -709,10 +758,7 @@ # Sound # CONFIG_SOUND=m -# CONFIG_SOUND_ASSABET_UDA1341 is not set -# CONFIG_SOUND_BITSY_UDA1341 is not set -# CONFIG_SOUND_SA1111_UDA1341 is not set -CONFIG_SOUND_SA1100SSP=m +# CONFIG_SOUND_BT878 is not set # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set @@ -723,19 +769,120 @@ # CONFIG_SOUND_MAESTRO is not set # CONFIG_SOUND_MAESTRO3 is not set # CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set # CONFIG_MIDI_VIA82CXXX is not set +# CONFIG_SOUND_ASSABET_UDA1341 is not set +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +CONFIG_SOUND_SA1100SSP=m # CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set # CONFIG_SOUND_TVMIXER is not set # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# Miscellaneous USB drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/neponset linux/arch/arm/def-configs/neponset --- v2.4.13/linux/arch/arm/def-configs/neponset Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/def-configs/neponset Thu Oct 25 13:53:45 2001 @@ -8,6 +8,8 @@ CONFIG_UID16=y CONFIG_RWSEM_GENERIC_SPINLOCK=y # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set # # Code maturity level options @@ -31,6 +33,7 @@ # CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_L7200 is not set @@ -62,13 +65,15 @@ # CONFIG_SA1100_ASSABET=y CONFIG_ASSABET_NEPONSET=y +# CONFIG_SA1100_ADSBITSY is not set # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_H3600 is not set # CONFIG_SA1100_EXTENEX1 is not set # CONFIG_SA1100_FLEXANET is not set # CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set # CONFIG_SA1100_JORNADA720 is not set # CONFIG_SA1100_HUW_WEBPANEL is not set # CONFIG_SA1100_ITSY is not set @@ -84,6 +89,7 @@ # CONFIG_SA1100_XP860 is not set # CONFIG_SA1100_YOPY is not set CONFIG_SA1111=y +CONFIG_FORCE_MAX_ZONEORDER=9 CONFIG_SA1100_USB=m CONFIG_SA1100_USB_NETLINK=m CONFIG_SA1100_USB_CHAR=m @@ -91,7 +97,12 @@ # # CLPS711X/EP721X Implementations # +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set # CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -111,16 +122,16 @@ # CONFIG_CPU_ARM1020 is not set # CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y +# CONFIG_ARM_THUMB is not set CONFIG_DISCONTIGMEM=y -# CONFIG_CPU_BIG_ENDIAN is not set # # General setup # # CONFIG_PCI is not set -# CONFIG_ISA is not set +CONFIG_ISA=y # CONFIG_ISA_DMA is not set -# CONFIG_CPU_FREQ is not set +CONFIG_CPU_FREQ=y CONFIG_HOTPLUG=y # @@ -135,6 +146,10 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# CONFIG_FPE_NWFPE=y # CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y @@ -143,10 +158,8 @@ CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set # CONFIG_PM is not set -# CONFIG_APM is not set # CONFIG_ARTHUR is not set CONFIG_CMDLINE="" -# CONFIG_PFS168_CMDLINE is not set CONFIG_LEDS=y CONFIG_LEDS_TIMER=y CONFIG_LEDS_CPU=y @@ -180,50 +193,36 @@ # RAM/ROM/Flash chip drivers # CONFIG_MTD_CFI=m +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=m # CONFIG_MTD_CFI_ADV_OPTIONS is not set CONFIG_MTD_CFI_INTELEXT=m # CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set # CONFIG_MTD_JEDEC is not set # # Mapping drivers for chip access # # CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_SUN_UFLASH is not set # CONFIG_MTD_NORA is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_TQM8XXL is not set -# CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_NETSC520 is not set -# CONFIG_MTD_SBC_GXX is not set -# CONFIG_MTD_ELAN_104NC is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set CONFIG_MTD_SA1100=m -# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set -# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set # CONFIG_MTD_DC21285 is not set # CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_DBOX2 is not set -# CONFIG_MTD_CSTM_MIPS_IXX is not set -# CONFIG_MTD_CFI_FLAGADM is not set -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SOLUTIONENGINE is not set -# CONFIG_MTD_MIXMEM is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_VMAX is not set -# CONFIG_MTD_OCELOT is not set -# CONFIG_MTD_L440GX is not set +# CONFIG_MTD_PCI is not set # # Self-contained MTD device drivers # # CONFIG_MTD_PMC551 is not set # CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_LART is not set # CONFIG_MTD_MTDRAM is not set # CONFIG_MTD_BLKMTD is not set @@ -245,6 +244,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -254,6 +254,7 @@ # CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set # CONFIG_BLK_DEV_DAC960 is not set CONFIG_BLK_DEV_LOOP=m # CONFIG_BLK_DEV_NBD is not set @@ -270,6 +271,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -331,6 +333,7 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -345,6 +348,9 @@ # CONFIG_ULTRA32 is not set CONFIG_SMC9194=y # CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set # CONFIG_NET_ISA is not set # CONFIG_NET_PCI is not set # CONFIG_NET_POCKET is not set @@ -353,8 +359,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -449,6 +456,9 @@ # CONFIG_IDEDMA_AUTO is not set # CONFIG_DMA_NONPCI is not set # CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set # # SCSI support @@ -488,31 +498,36 @@ # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set # CONFIG_SERIAL_AMBA is not set # CONFIG_SERIAL_AMBA_CONSOLE is not set # CONFIG_SERIAL_CLPS711X is not set # CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y CONFIG_SA1100_DEFAULT_BAUDRATE=9600 CONFIG_SERIAL_8250=m # CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=32 -CONFIG_UCB1200=y -CONFIG_TOUCHSCREEN_UCB1200=y -# CONFIG_AUDIO_UCB1200 is not set -# CONFIG_ADC_UCB1200 is not set -# CONFIG_TOUCHSCREEN_BITSY is not set -# CONFIG_PROFILER is not set -# CONFIG_PFS168_SPI is not set -# CONFIG_PFS168_DTMF is not set -# CONFIG_PFS168_MISC is not set # # I2C support @@ -520,6 +535,19 @@ # CONFIG_I2C is not set # +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# # Mice # # CONFIG_BUSMOUSE is not set @@ -528,11 +556,37 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set # -# Input core support is needed for joysticks +# Joysticks # +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set # CONFIG_QIC02_TAPE is not set # @@ -557,6 +611,8 @@ # # PCMCIA character devices # +CONFIG_PCMCIA_SERIAL_CS=m +# CONFIG_MWAVE is not set # # Multimedia devices @@ -576,13 +632,16 @@ # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set # CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set CONFIG_FAT_FS=y CONFIG_MSDOS_FS=y # CONFIG_UMSDOS_FS is not set # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set -CONFIG_JFFS_FS=m -CONFIG_JFFS_FS_VERBOSE=0 +# CONFIG_JFFS_FS is not set CONFIG_JFFS2_FS=m CONFIG_JFFS2_FS_DEBUG=0 # CONFIG_CRAMFS is not set @@ -590,8 +649,9 @@ # CONFIG_RAMFS is not set # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set # CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set +# CONFIG_FREEVXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -614,6 +674,7 @@ # Network File Systems # # CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_ROOT_NFS is not set @@ -631,6 +692,8 @@ # CONFIG_NCPFS_SMALLDOS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set # # Partition Types @@ -646,6 +709,7 @@ # CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set @@ -705,11 +769,10 @@ CONFIG_FB=y CONFIG_DUMMY_CONSOLE=y # CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set # CONFIG_FB_CLPS711X is not set -# CONFIG_FB_CYBER2000 is not set CONFIG_FB_SA1100=y -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_E1355 is not set +# CONFIG_FB_CYBER2000 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB2=y @@ -728,12 +791,10 @@ # Sound # CONFIG_SOUND=y -CONFIG_SOUND_ASSABET_UDA1341=m -# CONFIG_SOUND_BITSY_UDA1341 is not set -CONFIG_SOUND_SA1111_UDA1341=m -# CONFIG_SOUND_SA1100SSP is not set +# CONFIG_SOUND_BT878 is not set # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set # CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set @@ -742,16 +803,34 @@ # CONFIG_SOUND_MAESTRO is not set # CONFIG_SOUND_MAESTRO3 is not set # CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set # CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_SA1100=y +# CONFIG_SOUND_UDA1341 is not set +# CONFIG_SOUND_ASSABET_UDA1341 is not set +# CONFIG_SOUND_H3600_UDA1341 is not set +# CONFIG_SOUND_PANGOLIN_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set # CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_WAVEARTIST is not set # CONFIG_SOUND_TVMIXER is not set # +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA1100=y +CONFIG_MCP_UCB1200=y +CONFIG_MCP_UCB1200_AUDIO=m +CONFIG_MCP_UCB1200_TS=y + +# # USB support # CONFIG_USB=y @@ -762,6 +841,8 @@ # # CONFIG_USB_DEVICEFS is not set # CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_LONG_TIMEOUT is not set +# CONFIG_USB_LARGE_CONFIG is not set # # USB Controllers @@ -769,7 +850,7 @@ # CONFIG_USB_UHCI is not set # CONFIG_USB_UHCI_ALT is not set CONFIG_USB_OHCI=y -CONFIG_USB_OHCI_NOPCI=y +CONFIG_USB_OHCI_SA1111=y # # USB Device Class drivers @@ -777,6 +858,14 @@ # CONFIG_USB_AUDIO is not set # CONFIG_USB_BLUETOOTH is not set # CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set # CONFIG_USB_ACM is not set # CONFIG_USB_PRINTER is not set @@ -784,6 +873,7 @@ # USB Human Interface Devices (HID) # CONFIG_USB_HID=y +# CONFIG_USB_HIDDEV is not set # CONFIG_USB_WACOM is not set # @@ -793,24 +883,23 @@ # CONFIG_USB_MDC800 is not set # CONFIG_USB_SCANNER is not set # CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set # # USB Multimedia devices # -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_PWC is not set -# CONFIG_USB_SE401 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_DABUSB is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# # # USB Network adaptors # -# CONFIG_USB_PLUSB is not set # CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set # CONFIG_USB_CATC is not set -# CONFIG_USB_NET1080 is not set +# CONFIG_USB_CDCETHER is not set # CONFIG_USB_USBNET is not set # @@ -822,11 +911,36 @@ # USB Serial Converter support # # CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set # -# USB misc drivers +# USB Miscellaneous drivers # # CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set # # Bluetooth support @@ -840,7 +954,9 @@ CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_SLAB is not set CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SPINLOCK is not set # CONFIG_NO_PGT_CACHE is not set # CONFIG_DEBUG_LL is not set # CONFIG_DEBUG_DC21285_PORT is not set diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/pangolin linux/arch/arm/def-configs/pangolin --- v2.4.13/linux/arch/arm/def-configs/pangolin Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/def-configs/pangolin Thu Oct 25 13:53:45 2001 @@ -1,11 +1,13 @@ # -# Automatically generated make config: don't edit +# Automatically generated by make menuconfig: don't edit # CONFIG_ARM=y # CONFIG_EISA is not set # CONFIG_SBUS is not set # CONFIG_MCA is not set CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set # # Code maturity level options @@ -23,24 +25,22 @@ # # System Type # +# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_RPC is not set CONFIG_ARCH_SA1100=y -# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_SHARK is not set # # Archimedes/A5000 Implementations # - -# -# Archimedes/A5000 Implementations (select only ONE) -# # CONFIG_ARCH_ARC is not set # CONFIG_ARCH_A5K is not set @@ -62,14 +62,20 @@ # CONFIG_SA1100_CERF is not set # CONFIG_SA1100_BITSY is not set # CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set # CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_JORNADA720 is not set # CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set # CONFIG_SA1100_LART is not set # CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set CONFIG_SA1100_PANGOLIN=y +CONFIG_SA1100_PANGOLIN_PCMCIA_IDE=y # CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set # CONFIG_SA1100_PFS168 is not set # CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_XP860 is not set @@ -77,8 +83,6 @@ # CONFIG_SA1100_USB is not set # CONFIG_SA1100_USB_NETLINK is not set # CONFIG_SA1100_USB_CHAR is not set -# CONFIG_SA1100_FREQUENCY_SCALE is not set -# CONFIG_SA1100_VOLTAGE_SCALE is not set # # CLPS711X/EP721X Implementations @@ -90,10 +94,6 @@ # CONFIG_FOOTBRIDGE_ADDIN is not set CONFIG_CPU_32=y # CONFIG_CPU_26 is not set - -# -# Processor Type -# # CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y # CONFIG_CPU_ARM610 is not set @@ -104,18 +104,15 @@ # CONFIG_CPU_SA110 is not set CONFIG_CPU_SA1100=y CONFIG_DISCONTIGMEM=y +# CONFIG_CPU_BIG_ENDIAN is not set # # General setup # - -# -# Please ensure that you have read the help on the next option -# -# CONFIG_ANGELBOOT is not set # CONFIG_PCI is not set # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set +# CONFIG_CPU_FREQ is not set CONFIG_HOTPLUG=y # @@ -130,20 +127,20 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_FPE_NWFPE=y -# CONFIG_FPE_FASTFPE is not set +# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_FASTFPE=y CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set # CONFIG_BINFMT_AOUT is not set CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set # CONFIG_PM is not set +# CONFIG_APM is not set # CONFIG_ARTHUR is not set CONFIG_CMDLINE="keepinitrd" # CONFIG_PFS168_CMDLINE is not set # CONFIG_LEDS is not set CONFIG_ALIGNMENT_TRAP=y -# CONFIG_UCB1200 is not set # # Parallel port support @@ -155,62 +152,84 @@ # CONFIG_MTD=y # CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set # -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set - -# -# RAM/ROM Device Drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_MTDRAM is not set - -# -# Linearly Mapped Flash Device Drivers +# RAM/ROM/Flash chip drivers # CONFIG_MTD_CFI=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_CFI_GEOMETRY=y +# CONFIG_MTD_CFI_B1 is not set +# CONFIG_MTD_CFI_B2 is not set +CONFIG_MTD_CFI_B4=y +# CONFIG_MTD_CFI_I1 is not set +# CONFIG_MTD_CFI_I2 is not set +CONFIG_MTD_CFI_I4=y CONFIG_MTD_CFI_INTELEXT=y # CONFIG_MTD_CFI_AMDSTD is not set # CONFIG_MTD_AMDSTD is not set # CONFIG_MTD_SHARP is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# # CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_SUN_UFLASH is not set # CONFIG_MTD_NORA is not set # CONFIG_MTD_PNC2000 is not set # CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_TQM8XXL is not set # CONFIG_MTD_SC520CDP is not set -# CONFIG_MTD_SBC_MEDIAGX is not set +# CONFIG_MTD_NETSC520 is not set +# CONFIG_MTD_SBC_GXX is not set # CONFIG_MTD_ELAN_104NC is not set CONFIG_MTD_SA1100=y +# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set +# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set # CONFIG_MTD_DC21285 is not set # CONFIG_MTD_IQ80310 is not set -# CONFIG_MTD_CSTM_CFI_JEDEC is not set -# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_DBOX2 is not set +# CONFIG_MTD_CSTM_MIPS_IXX is not set +# CONFIG_MTD_CFI_FLAGADM is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_SOLUTIONENGINE is not set # CONFIG_MTD_MIXMEM is not set # CONFIG_MTD_OCTAGON is not set # CONFIG_MTD_VMAX is not set +# CONFIG_MTD_OCELOT is not set +# CONFIG_MTD_L440GX is not set # -# NAND Flash Device Drivers +# Self-contained MTD device drivers # -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_NAND_SPIA is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_LART is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set # -# User Modules And Translation Layers +# NAND Flash Device Drivers # -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set +# CONFIG_MTD_NAND is not set # # Plug and Play configuration @@ -264,10 +283,6 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set - -# -# -# # CONFIG_IPX is not set # CONFIG_ATALK is not set # CONFIG_DECNET is not set @@ -295,22 +310,29 @@ # ARCnet devices # # CONFIG_ARCNET is not set -CONFIG_DUMMY=y +# CONFIG_DUMMY is not set # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set +CONFIG_NET_VENDOR_SMC=y +# CONFIG_WD80x3 is not set +# CONFIG_ULTRAMCA is not set +# CONFIG_ULTRA is not set +# CONFIG_ULTRA32 is not set +CONFIG_SMC9194=y # CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set # CONFIG_NET_ISA is not set # CONFIG_NET_PCI is not set # CONFIG_NET_POCKET is not set @@ -319,11 +341,14 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set +# CONFIG_PLIP is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set @@ -358,8 +383,12 @@ # CONFIG_PCMCIA_XIRC2PS is not set # CONFIG_ARCNET_COM20020_CS is not set # CONFIG_PCMCIA_IBMTR is not set -# CONFIG_NET_PCMCIA_RADIO is not set -CONFIG_PCMCIA_NETCARD=y +CONFIG_NET_PCMCIA_RADIO=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_PCMCIA_NETWAVE is not set +# CONFIG_PCMCIA_WAVELAN is not set +# CONFIG_AIRONET4500_CS is not set +CONFIG_PCMCIA_WVLAN=y # # Amateur Radio support @@ -374,19 +403,15 @@ # # ATA/IDE/MFM/RLL support # -CONFIG_IDE=y +CONFIG_IDE=m # # IDE, ATA and ATAPI Block devices # -CONFIG_BLK_DEV_IDE=y - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# +CONFIG_BLK_DEV_IDE=m # CONFIG_BLK_DEV_HD_IDE is not set # CONFIG_BLK_DEV_HD is not set -CONFIG_BLK_DEV_IDEDISK=y +CONFIG_BLK_DEV_IDEDISK=m # CONFIG_IDEDISK_MULTI_MODE is not set # CONFIG_BLK_DEV_IDEDISK_VENDOR is not set # CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set @@ -397,15 +422,12 @@ # CONFIG_BLK_DEV_IDEDISK_WD is not set # CONFIG_BLK_DEV_COMMERIAL is not set # CONFIG_BLK_DEV_TIVO is not set -CONFIG_BLK_DEV_IDECS=y +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_PANGOLIN is not set # CONFIG_BLK_DEV_IDECD is not set # CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDESCSI is not set - -# -# IDE chipset support/bugfixes -# # CONFIG_BLK_DEV_CMD640 is not set # CONFIG_BLK_DEV_CMD640_ENHANCED is not set # CONFIG_BLK_DEV_ISAPNP is not set @@ -446,19 +468,31 @@ # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +# CONFIG_SERIAL_CLPS711X is not set +# CONFIG_SERIAL_CLPS711X_CONSOLE is not set CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100_CONSOLE=y CONFIG_SA1100_DEFAULT_BAUDRATE=115200 +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=32 +# CONFIG_UCB1200 is not set # CONFIG_TOUCHSCREEN_UCB1200 is not set +# CONFIG_AUDIO_UCB1200 is not set +# CONFIG_ADC_UCB1200 is not set # CONFIG_TOUCHSCREEN_BITSY is not set CONFIG_PROFILER=y # CONFIG_PFS168_SPI is not set # CONFIG_PFS168_DTMF is not set # CONFIG_PFS168_MISC is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=32 # # I2C support @@ -475,10 +509,6 @@ # Joysticks # # CONFIG_JOYSTICK is not set - -# -# Input core support is needed for joysticks -# # CONFIG_QIC02_TAPE is not set # @@ -503,7 +533,6 @@ # # PCMCIA character devices # -# CONFIG_PCMCIA_SERIAL_CS is not set # # Multimedia devices @@ -532,10 +561,12 @@ CONFIG_JFFS_FS_VERBOSE=0 # CONFIG_JFFS2_FS is not set CONFIG_CRAMFS=y +# CONFIG_TMPFS is not set CONFIG_RAMFS=y # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set # CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -549,7 +580,6 @@ # CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set @@ -604,11 +634,13 @@ # CONFIG_NLS_CODEPAGE_865 is not set # CONFIG_NLS_CODEPAGE_866 is not set # CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_CODEPAGE_932 is not set # CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_949 is not set CONFIG_NLS_CODEPAGE_950=y +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set # CONFIG_NLS_ISO8859_1 is not set # CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_3 is not set @@ -616,11 +648,12 @@ # CONFIG_NLS_ISO8859_5 is not set # CONFIG_NLS_ISO8859_6 is not set # CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_8 is not set # CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set # CONFIG_NLS_ISO8859_14 is not set # CONFIG_NLS_ISO8859_15 is not set # CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_UTF8 is not set # @@ -628,7 +661,6 @@ # CONFIG_PC_KEYMAP=y # CONFIG_VGA_CONSOLE is not set -CONFIG_FB=y # # Frame-buffer support @@ -640,12 +672,14 @@ # CONFIG_FB_CYBER2000 is not set # CONFIG_FB_SA1100 is not set CONFIG_FB_MQ200=y +# CONFIG_FB_ANAKIN is not set +# CONFIG_FB_E1355 is not set # CONFIG_FB_VIRTUAL is not set CONFIG_FBCON_ADVANCED=y # CONFIG_FBCON_MFB is not set -# CONFIG_FBCON_CFB2 is not set -# CONFIG_FBCON_CFB4 is not set -# CONFIG_FBCON_CFB8 is not set +CONFIG_FBCON_CFB2=y +CONFIG_FBCON_CFB4=y +CONFIG_FBCON_CFB8=y CONFIG_FBCON_CFB16=y # CONFIG_FBCON_CFB24 is not set # CONFIG_FBCON_CFB32 is not set @@ -670,8 +704,11 @@ # Sound # CONFIG_SOUND=y -CONFIG_SOUND_UDA1341=y -# CONFIG_SOUND_SA1100_SSP is not set +# CONFIG_SOUND_ASSABET_UDA1341 is not set +CONFIG_SOUND_PANGOLIN_UDA1341=y +# CONFIG_SOUND_BITSY_UDA1341 is not set +# CONFIG_SOUND_SA1111_UDA1341 is not set +# CONFIG_SOUND_SA1100SSP is not set # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set @@ -687,6 +724,7 @@ # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set # CONFIG_SOUND_OSS is not set # CONFIG_SOUND_TVMIXER is not set @@ -694,6 +732,11 @@ # USB support # # CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set # # Kernel hacking diff -u --recursive --new-file v2.4.13/linux/arch/arm/def-configs/shark linux/arch/arm/def-configs/shark --- v2.4.13/linux/arch/arm/def-configs/shark Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/def-configs/shark Thu Oct 25 13:53:45 2001 @@ -8,6 +8,7 @@ CONFIG_UID16=y CONFIG_RWSEM_GENERIC_SPINLOCK=y # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set # # Code maturity level options @@ -62,13 +63,15 @@ # # CONFIG_SA1100_ASSABET is not set # CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSBITSY is not set # CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_BITSY is not set +# CONFIG_SA1100_H3600 is not set # CONFIG_SA1100_EXTENEX1 is not set # CONFIG_SA1100_FLEXANET is not set # CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set # CONFIG_SA1100_JORNADA720 is not set # CONFIG_SA1100_HUW_WEBPANEL is not set # CONFIG_SA1100_ITSY is not set @@ -78,6 +81,7 @@ # CONFIG_SA1100_PANGOLIN is not set # CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set # CONFIG_SA1100_PFS168 is not set # CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_XP860 is not set @@ -86,7 +90,12 @@ # # CLPS711X/EP721X Implementations # +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set # CONFIG_ARCH_P720T is not set +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -106,6 +115,7 @@ # CONFIG_CPU_ARM1020 is not set CONFIG_CPU_SA110=y # CONFIG_CPU_SA1100 is not set +# CONFIG_ARM_THUMB is not set # CONFIG_DISCONTIGMEM is not set # @@ -121,6 +131,10 @@ CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# # CONFIG_FPE_NWFPE is not set CONFIG_FPE_FASTFPE=y CONFIG_KCORE_ELF=y @@ -140,12 +154,15 @@ # CONFIG_PARPORT=y CONFIG_PARPORT_PC=y +CONFIG_PARPORT_PC_CML1=y +# CONFIG_PARPORT_SERIAL is not set # CONFIG_PARPORT_PC_FIFO is not set # CONFIG_PARPORT_PC_SUPERIO is not set # CONFIG_PARPORT_ARC is not set # CONFIG_PARPORT_AMIGA is not set # CONFIG_PARPORT_MFC3 is not set # CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_GSC is not set # CONFIG_PARPORT_SUNBPP is not set # CONFIG_PARPORT_OTHER is not set # CONFIG_PARPORT_1284 is not set @@ -155,6 +172,7 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set +# CONFIG_PNPBIOS is not set # # Block devices @@ -180,6 +198,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -262,8 +281,6 @@ # CONFIG_APRICOT is not set CONFIG_CS89x0=y # CONFIG_TULIP is not set -# CONFIG_TULIP_MWI is not set -# CONFIG_TULIP_MMIO is not set # CONFIG_DE4X5 is not set # CONFIG_DGRS is not set # CONFIG_DM9102 is not set @@ -290,8 +307,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -374,6 +392,9 @@ # CONFIG_IDEDMA_AUTO is not set # CONFIG_DMA_NONPCI is not set # CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set # # SCSI support @@ -411,6 +432,7 @@ # CONFIG_SCSI_AHA1740 is not set # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set @@ -449,7 +471,7 @@ # CONFIG_SCSI_DEBUG is not set # -# IEEE 1394 (FireWire) support +# IEEE 1394 (FireWire) support (EXPERIMENTAL) # # CONFIG_IEEE1394 is not set @@ -472,6 +494,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Character devices @@ -482,17 +508,29 @@ CONFIG_SERIAL_CONSOLE=y # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set # CONFIG_SERIAL_AMBA is not set # CONFIG_SERIAL_AMBA_CONSOLE is not set # CONFIG_SERIAL_CLPS711X is not set # CONFIG_SERIAL_CLPS711X_CONSOLE is not set +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set # CONFIG_SERIAL_SA1100 is not set # CONFIG_SERIAL_SA1100_CONSOLE is not set # CONFIG_SERIAL_8250 is not set # CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 CONFIG_PRINTER=m @@ -505,6 +543,19 @@ # CONFIG_I2C is not set # +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set + +# +# Other L3 adapters +# +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# # Mice # # CONFIG_BUSMOUSE is not set @@ -516,7 +567,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -533,6 +588,7 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set +# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -540,6 +596,7 @@ # CONFIG_FTAPE is not set # CONFIG_AGP is not set # CONFIG_DRM is not set +# CONFIG_MWAVE is not set # # Multimedia devices @@ -554,11 +611,16 @@ # CONFIG_AUTOFS4_FS is not set # CONFIG_REISERFS_FS is not set # CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set # CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set # CONFIG_BFS_FS is not set +# CONFIG_CMS_FS is not set +CONFIG_EXT3_FS=y +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set CONFIG_FAT_FS=y CONFIG_MSDOS_FS=y # CONFIG_UMSDOS_FS is not set @@ -571,8 +633,9 @@ # CONFIG_RAMFS is not set CONFIG_ISO9660_FS=y CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set # CONFIG_MINIX_FS is not set -# CONFIG_VXFS_FS is not set +# CONFIG_FREEVXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -595,6 +658,7 @@ # Network File Systems # # CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set # CONFIG_ROOT_NFS is not set @@ -612,6 +676,8 @@ # CONFIG_NCPFS_SMALLDOS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set # # Partition Types @@ -627,6 +693,7 @@ # CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set @@ -689,17 +756,19 @@ # CONFIG_FB_RIVA is not set # CONFIG_FB_CLGEN is not set # CONFIG_FB_PM2 is not set +# CONFIG_FB_PM3 is not set # CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set # CONFIG_FB_CLPS711X is not set -CONFIG_FB_CYBER2000=y # CONFIG_FB_SA1100 is not set -# CONFIG_FB_ANAKIN is not set -# CONFIG_FB_E1355 is not set +CONFIG_FB_CYBER2000=y # CONFIG_FB_MATROX is not set # CONFIG_FB_ATY is not set +# CONFIG_FB_RADEON is not set # CONFIG_FB_ATY128 is not set -# CONFIG_FB_3DFX is not set # CONFIG_FB_SIS is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB8=y @@ -714,8 +783,10 @@ # Sound # CONFIG_SOUND=m +# CONFIG_SOUND_BT878 is not set # CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set # CONFIG_SOUND_FUSION is not set # CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_ES1370 is not set @@ -724,6 +795,7 @@ # CONFIG_SOUND_MAESTRO is not set # CONFIG_SOUND_MAESTRO3 is not set # CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set # CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_MSNDCLAS is not set @@ -764,9 +836,117 @@ # CONFIG_SOUND_TVMIXER is not set # +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set +# CONFIG_USB_OHCI_SA1111 is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# +# CONFIG_USB_DABUSB is not set + +# +# USB Network adaptors +# +# CONFIG_USB_PLUSB is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# Miscellaneous USB drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_ID75 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/arm/kernel/Makefile linux/arch/arm/kernel/Makefile --- v2.4.13/linux/arch/arm/kernel/Makefile Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/kernel/Makefile Thu Oct 25 13:53:45 2001 @@ -42,7 +42,7 @@ no-irq-arch := $(CONFIG_ARCH_INTEGRATOR) $(CONFIG_ARCH_CLPS711X) \ $(CONFIG_FOOTBRIDGE) $(CONFIG_ARCH_EBSA110) \ - $(CONFIG_ARCH_SA1100) + $(CONFIG_ARCH_SA1100) $(CONFIG_ARCH_CAMELOT) ifneq ($(findstring y,$(no-irq-arch)),y) obj-y += irq-arch.o diff -u --recursive --new-file v2.4.13/linux/arch/arm/kernel/debug-armv.S linux/arch/arm/kernel/debug-armv.S --- v2.4.13/linux/arch/arm/kernel/debug-armv.S Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/kernel/debug-armv.S Thu Oct 25 13:53:45 2001 @@ -333,6 +333,37 @@ bne 1001b .endm +#elif defined(CONFIG_ARCH_CAMELOT) + +#include +#define UART00_TYPE +#include + + .macro addruart,rx + mrc p15, 0, \rx, c1, c0 + tst \rx, #1 @ MMU enabled? + ldr \rx, =EXC_UART00_BASE @ physical base address + orrne \rx, \rx, #0xff000000 @ virtual base + orrne \rx, \rx, #0x00f00000 + .endm + + .macro senduart,rd,rx + str \rd, [\rx, #UART_TD(0)] + .endm + + .macro waituart,rd,rx +1001: ldr \rd, [\rx, #UART_TSR(0)] + and \rd, \rd, #UART_TSR_TX_LEVEL_MSK + cmp \rd, #15 + beq 1001b + .endm + + .macro busyuart,rd,rx +1001: ldr \rd, [\rx, #UART_TSR(0)] + ands \rd, \rd, #UART_TSR_TX_LEVEL_MSK + bne 1001b + .endm + #else #error Unknown architecture #endif diff -u --recursive --new-file v2.4.13/linux/arch/arm/kernel/entry-armv.S linux/arch/arm/kernel/entry-armv.S --- v2.4.13/linux/arch/arm/kernel/entry-armv.S Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/kernel/entry-armv.S Thu Oct 25 13:53:45 2001 @@ -16,6 +16,7 @@ #include #include "entry-header.S" + #ifdef IOC_BASE /* IOC / IOMD based hardware */ #include @@ -494,6 +495,27 @@ addeq \irqnr, \irqnr, #1 moveq \stat, \stat, lsr #1 tst \stat, #1 @ bit 0 should be set + .endm + + .macro irq_prio_table + .endm + +#elif defined (CONFIG_ARCH_CAMELOT) +#include +#undef IRQ_MODE /* same name defined in asm/proc/ptrace.h */ +#include + + .macro disable_fiq + .endm + + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp + + ldr \irqstat, =INT_ID(IO_ADDRESS(EXC_INT_CTRL00_BASE)) + ldr \irqnr,[\irqstat] + cmp \irqnr,#0 + subne \irqnr,\irqnr,#1 + + .endm .macro irq_prio_table diff -u --recursive --new-file v2.4.13/linux/arch/arm/lib/backtrace.S linux/arch/arm/lib/backtrace.S --- v2.4.13/linux/arch/arm/lib/backtrace.S Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/lib/backtrace.S Thu Oct 25 13:53:45 2001 @@ -44,33 +44,33 @@ 1: moveq r0, #-2 LOADREGS(eqfd, sp!, {r4 - r8, pc}) -2: stmfd sp!, {pc} @ calculate offset of PC in STMIA instruction +2: stmfd sp!, {pc} @ calculate offset of PC in STMIA instruction ldr r0, [sp], #4 adr r1, 2b - 4 sub offset, r0, r1 -3: tst frame, mask @ Check for address exceptions... +3: tst frame, mask @ Check for address exceptions... bne 1b - ldmda frame, {r0, r1, r2, r3} @ fp, sp, lr, pc +1001: ldmda frame, {r0, r1, r2, r3} @ fp, sp, lr, pc mov next, r0 - sub save, r3, offset @ Correct PC for prefetching + sub save, r3, offset @ Correct PC for prefetching bic save, save, mask adr r0, .Lfe mov r1, save bic r2, r2, mask - bl SYMBOL_NAME(printk) + bl SYMBOL_NAME(printk) @ print pc and link register sub r0, frame, #16 - ldr r1, [save, #4] +1002: ldr r1, [save, #4] @ get instruction at function+4 mov r3, r1, lsr #10 ldr r2, .Ldsi+4 teq r3, r2 @ Check for stmia sp!, {args} addeq save, save, #4 @ next instruction bleq .Ldumpstm - ldr r1, [save, #4] @ Get 'stmia sp!, {rlist, fp, ip, lr, pc}' instruction +1003: ldr r1, [save, #4] @ Get 'stmia sp!, {rlist, fp, ip, lr, pc}' instruction mov r3, r1, lsr #10 ldr r2, .Ldsi teq r3, r2 @@ -82,6 +82,24 @@ bne 3b LOADREGS(fd, sp!, {r4 - r8, pc}) +/* + * Fixup for LDMDB + */ + .section .fixup,"ax" + .align 0 +1004: ldr r0, =.Lbad + mov r1, frame + bl SYMBOL_NAME(printk) + LOADREGS(fd, sp!, {r4 - r8, pc}) + .ltorg + .previous + + .section __ex_table,"a" + .align 3 + .long 1001b, 1004b + .long 1002b, 1004b + .long 1003b, 1004b + .previous #define instr r4 #define reg r5 @@ -115,6 +133,7 @@ .Lfe: .asciz "Function entered at [<%p>] from [<%p>]\n" .Lfp: .asciz " r%d = %08X%c" .Lcr: .asciz "\n" +.Lbad: .asciz "Backtrace aborted due to bad frame pointer <%p>\n" .align .Ldsi: .word 0x00e92dd8 >> 2 .word 0x00e92d00 >> 2 diff -u --recursive --new-file v2.4.13/linux/arch/arm/lib/io-acorn.S linux/arch/arm/lib/io-acorn.S --- v2.4.13/linux/arch/arm/lib/io-acorn.S Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/lib/io-acorn.S Thu Oct 25 13:53:45 2001 @@ -54,39 +54,6 @@ mov r1, lr b SYMBOL_NAME(printk) -/* Purpose: read a block of data from a hardware register to memory. - * Proto : void insw(int from_port, void *to, int len_in_words); - * Notes : increment to, 'to' must be 16-bit aligned - */ - -ENTRY(insw) - addr r0 - teq r2, #0 - bne __raw_readsw - RETINSTR(mov, pc, lr) - -ENTRY(insb) - addr r0 - teq r2, #0 - bne __raw_readsb - RETINSTR(mov, pc, lr) - -@ Purpose: write a block of data from memory to a hardware register. -@ Proto : outsw(int to_reg, void *from, int len_in_words); -@ Notes : increments from - -ENTRY(outsw) - addr r0 - teq r2, #0 - bne __raw_writesw - RETINSTR(mov, pc, lr) - -ENTRY(outsb) - addr r0 - teq r2, #0 - bne __raw_writesb - RETINSTR(mov, pc, lr) - @ Purpose: write a memc register @ Proto : void memc_write(int register, int value); @ Returns: nothing diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-epxa10db/Makefile linux/arch/arm/mach-epxa10db/Makefile --- v2.4.13/linux/arch/arm/mach-epxa10db/Makefile Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-epxa10db/Makefile Thu Oct 25 13:53:45 2001 @@ -0,0 +1,22 @@ +# +# Makefile for the linux kernel. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). + +USE_STANDARD_AS_RULE := true + +O_TARGET := epxa10db.o + +# Object file lists. + +obj-y := arch.o irq.o mm.o time.o +obj-m := +obj-n := +obj- := + +export-objs := + + +include $(TOPDIR)/Rules.make diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-epxa10db/arch.c linux/arch/arm/mach-epxa10db/arch.c --- v2.4.13/linux/arch/arm/mach-epxa10db/arch.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-epxa10db/arch.c Thu Oct 25 13:53:45 2001 @@ -0,0 +1,62 @@ +/* + * linux/arch/arm/mach-epxa10db/arch.c + * + * Copyright (C) 2000 Deep Blue Solutions Ltd + * Copyright (C) 2001 Altera Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +extern void epxa10db_map_io(void); +extern void epxa10db_init_irq(void); + + +static void __init +epxa10db_fixup(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ + + mi->nr_banks = 1; + mi->bank[0].start = 0; + mi->bank[0].size = (32*1024*1024); + mi->bank[0].node = 0; + +/* + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); + setup_ramdisk( 1, 0, 0, 8192 ); + setup_initrd(0xc0200000, 6*1024*1024); +*/ +} + +MACHINE_START(CAMELOT, "Altera Epxa10db") + MAINTAINER("Altera Corporation") + BOOT_MEM(0x00000000, 0x7fffc000, 0xffffc000) + FIXUP(epxa10db_fixup) + MAPIO(epxa10db_map_io) + INITIRQ(epxa10db_init_irq) + +MACHINE_END diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-epxa10db/dma.c linux/arch/arm/mach-epxa10db/dma.c --- v2.4.13/linux/arch/arm/mach-epxa10db/dma.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-epxa10db/dma.c Thu Oct 25 13:53:45 2001 @@ -0,0 +1,36 @@ +/* + * linux/arch/arm/mach-epxa10db/dma.c + * + * Copyright (C) 1999 ARM Limited + * Copyright (C) 2000 Deep Blue Solutions Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +void __init arch_dma_init(dma_t *dma) +{ +} diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-epxa10db/irq.c linux/arch/arm/mach-epxa10db/irq.c --- v2.4.13/linux/arch/arm/mach-epxa10db/irq.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-epxa10db/irq.c Thu Oct 25 13:53:45 2001 @@ -0,0 +1,70 @@ +/* + * linux/arch/arm/mach-epxa10db/irq.c + * + * Copyright (C) 2001 Altera Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include +#include +#include +#include + + +static void mask_irq(unsigned int irq) +{ + __raw_writel(1 << irq, INT_MC(IO_ADDRESS(EXC_INT_CTRL00_BASE))); +} + +static void unmask_irq(unsigned int irq) +{ + __raw_writel(1 << irq, INT_MS(IO_ADDRESS(EXC_INT_CTRL00_BASE))); +} + +void __init epxa10db_init_irq(void) +{ + unsigned int i; + + /* + * This bit sets up the interrupt controller using + * the 6 PLD interrupts mode (the default) each + * irqs is assigned a priority which is the same + * as its interrupt number. This scheme is used because + * its easy, but you may want to change it depending + * on the contents of your PLD + */ + + __raw_writel(3,INT_MODE(IO_ADDRESS(EXC_INT_CTRL00_BASE))); + for (i = 0; i < NR_IRQS; i++){ + __raw_writel(i+1, INT_PRIORITY_P0(IO_ADDRESS(EXC_INT_CTRL00_BASE)) + (4*i)); + } + + + for (i = 0; i < NR_IRQS; i++) { + + irq_desc[i].valid = 1; + irq_desc[i].probe_ok = 1; + irq_desc[i].mask_ack = mask_irq; + irq_desc[i].mask = mask_irq; + irq_desc[i].unmask = unmask_irq; + } + + /* Disable all interrupt */ + __raw_writel(-1,INT_MC(IO_ADDRESS(EXC_INT_CTRL00_BASE))); + +} diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-epxa10db/mm.c linux/arch/arm/mach-epxa10db/mm.c --- v2.4.13/linux/arch/arm/mach-epxa10db/mm.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-epxa10db/mm.c Thu Oct 25 13:53:45 2001 @@ -0,0 +1,48 @@ +/* + * linux/arch/arm/mach-epxa10db/mm.c + * + * MM routines for Altera'a Epxa10db board + * + * Copyright (C) 2001 Altera Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include + +#include +#include +#include +#include + +#include + +/* Page table mapping for I/O region */ + +static struct map_desc epxa10db_io_desc[] __initdata = { + { IO_ADDRESS(EXC_REGISTERS_BASE), EXC_REGISTERS_BASE, SZ_16K , DOMAIN_IO, 0, 1}, +{IO_ADDRESS(EXC_PLD_BLOCK0_BASE), EXC_PLD_BLOCK0_BASE, SZ_16K , DOMAIN_IO, 0, 1}, +{IO_ADDRESS(EXC_PLD_BLOCK1_BASE), EXC_PLD_BLOCK1_BASE, SZ_16K , DOMAIN_IO, 0, 1}, +{IO_ADDRESS(EXC_PLD_BLOCK2_BASE), EXC_PLD_BLOCK2_BASE, SZ_16K , DOMAIN_IO, 0, 1}, +{IO_ADDRESS(EXC_PLD_BLOCK3_BASE), EXC_PLD_BLOCK3_BASE, SZ_16K , DOMAIN_IO, 0, 1}, +{ FLASH_VADDR(EXC_EBI_BLOCK0_BASE), EXC_EBI_BLOCK0_BASE, SZ_16M , DOMAIN_IO, 0, 1}, + LAST_DESC +}; + +void __init epxa10db_map_io(void) +{ + iotable_init(epxa10db_io_desc); +} diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-epxa10db/time.c linux/arch/arm/mach-epxa10db/time.c --- v2.4.13/linux/arch/arm/mach-epxa10db/time.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-epxa10db/time.c Thu Oct 25 13:53:45 2001 @@ -0,0 +1,33 @@ +/* + * linux/arch/arm/mach-epxa10db/time.c + * + * Copyright (C) 2000 Deep Blue Solutions + * Copyright (C) 2001 Altera Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include +#include +#include + +#include + + + +extern int (*set_rtc)(void); + +static int epxa10db_set_rtc(void) +{ + return 1; +} + +static int epxa10db_rtc_init(void) +{ + set_rtc = epxa10db_set_rtc; + + return 0; +} + +__initcall(epxa10db_rtc_init); diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/Makefile linux/arch/arm/mach-sa1100/Makefile --- v2.4.13/linux/arch/arm/mach-sa1100/Makefile Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/Makefile Thu Oct 25 13:53:45 2001 @@ -14,9 +14,12 @@ obj-n := obj- := -export-objs := assabet.o h3600.o freebird.o huw_webpanel.o yopy.o \ - generic.o hwtimer.o irq.o usb_ctl.o usb_recv.o usb_send.o \ - dma-sa1100.o dma-sa1111.o pcipool.o sa1111-pcibuf.o +export-objs := assabet.o dma-sa1100.o dma-sa1111.o freebird.o generic.o \ + h3600.o huw_webpanel.o irq.o pcipool.o sa1111-pcibuf.o \ + yopy.o + +# These aren't present yet, and prevents a plain -ac kernel building. +# hwtimer.o usb_ctl.o usb_recv.o usb_send.o # Common support (must be linked before board specific support) obj-y += generic.o irq.o dma-sa1100.o @@ -27,6 +30,7 @@ # We link the CPU support next, so that RAM timings can be tuned. ifeq ($(CONFIG_CPU_FREQ),y) obj-$(CONFIG_SA1100_ASSABET) += cpu-sa1110.o +obj-$(CONFIG_SA1100_CERF) += cpu-sa1110.o obj-$(CONFIG_SA1100_LART) += cpu-sa1100.o endif @@ -63,14 +67,19 @@ # LEDs support leds-y := leds.o +leds-$(CONFIG_SA1100_ADSBITSY) += leds-adsbitsy.o leds-$(CONFIG_SA1100_ASSABET) += leds-assabet.o leds-$(CONFIG_SA1100_BRUTUS) += leds-brutus.o leds-$(CONFIG_SA1100_CERF) += leds-cerf.o leds-$(CONFIG_SA1100_FLEXANET) += leds-flexanet.o leds-$(CONFIG_SA1100_GRAPHICSCLIENT) += leds-graphicsclient.o +leds-$(CONFIG_SA1100_GRAPHICSMASTER) += leds-graphicsmaster.o leds-$(CONFIG_SA1100_LART) += leds-lart.o leds-$(CONFIG_SA1100_PFS168) += leds-pfs168.o -leds-$(CONFIG_SA1100_GRAPHICSMASTER) += leds-graphicsmaster.o +leds-$(CONFIG_SA1100_SIMPAD) += leds-simpad.o obj-$(CONFIG_LEDS) += $(leds-y) + +# Miscelaneous functions +obj-$(CONFIG_PM) += pm.o sleep.o include $(TOPDIR)/Rules.make diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/assabet.c linux/arch/arm/mach-sa1100/assabet.c --- v2.4.13/linux/arch/arm/mach-sa1100/assabet.c Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/assabet.c Thu Oct 25 13:53:45 2001 @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -26,13 +27,13 @@ #include #include #include -#include +#include #include "generic.h" -unsigned long BCR_value = BCR_DB1110; -unsigned long SCR_value = SCR_INIT; +unsigned long BCR_value = ASSABET_BCR_DB1110; +unsigned long SCR_value = ASSABET_SCR_INIT; EXPORT_SYMBOL(BCR_value); EXPORT_SYMBOL(SCR_value); @@ -46,7 +47,7 @@ * This must precede any driver calls to BCR_set() * or BCR_clear(). */ - BCR = BCR_value = BCR_DB1111; + ASSABET_BCR = BCR_value = ASSABET_BCR_DB1111; NCR_0 = 0; #ifndef CONFIG_ASSABET_NEPONSET @@ -68,7 +69,7 @@ */ static void __init map_sa1100_gpio_regs( void ) { - unsigned long phys = _GPLR & PMD_MASK; + unsigned long phys = __PREG(GPLR) & PMD_MASK; unsigned long virt = io_p2v(phys); int prot = PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_DOMAIN(DOMAIN_IO); pmd_t pmd; @@ -185,17 +186,17 @@ { if (port->mapbase == _Ser1UTCR0) { if (state) - BCR_clear(BCR_RS232EN); + ASSABET_BCR_clear(ASSABET_BCR_RS232EN); else - BCR_set(BCR_RS232EN); + ASSABET_BCR_set(ASSABET_BCR_RS232EN); } } /* * Note! this can be called from IRQ context. - * FIXME: You _need_ to handle BCR carefully, which doesn't + * FIXME: You _need_ to handle ASSABET_BCR carefully, which doesn't * happen at the moment. Suggest putting interrupt save/restore - * in BCR_set/clear. + * in ASSABET_BCR_set/clear. * * NB: Assabet uses COM_RTS and COM_DTR for both UART1 (com port) * and UART3 (radio module). We only handle them for UART1 here. @@ -206,43 +207,43 @@ u_int set = 0, clear = 0; if (mctrl & TIOCM_RTS) - set |= BCR_COM_RTS; + set |= ASSABET_BCR_COM_RTS; else - clear |= BCR_COM_RTS; + clear |= ASSABET_BCR_COM_RTS; if (mctrl & TIOCM_DTR) - set |= BCR_COM_DTR; + set |= ASSABET_BCR_COM_DTR; else - clear |= BCR_COM_DTR; + clear |= ASSABET_BCR_COM_DTR; - BCR_clear(clear); - BCR_set(set); + ASSABET_BCR_clear(clear); + ASSABET_BCR_set(set); } } static int assabet_get_mctrl(struct uart_port *port) { u_int ret = 0; - u_int bsr = BSR; + u_int bsr = ASSABET_BSR; /* need 2 reads to read current value */ - bsr = BSR; + bsr = ASSABET_BSR; if (port->mapbase == _Ser1UTCR0) { - if (bsr & BSR_COM_DCD) + if (bsr & ASSABET_BSR_COM_DCD) ret |= TIOCM_CD; - if (bsr & BSR_COM_CTS) + if (bsr & ASSABET_BSR_COM_CTS) ret |= TIOCM_CTS; - if (bsr & BSR_COM_DSR) + if (bsr & ASSABET_BSR_COM_DSR) ret |= TIOCM_DSR; } else if (port->mapbase == _Ser3UTCR0) { - if (bsr & BSR_RAD_DCD) + if (bsr & ASSABET_BSR_RAD_DCD) ret |= TIOCM_CD; - if (bsr & BSR_RAD_CTS) + if (bsr & ASSABET_BSR_RAD_CTS) ret |= TIOCM_CTS; - if (bsr & BSR_RAD_DSR) + if (bsr & ASSABET_BSR_RAD_DSR) ret |= TIOCM_DSR; - if (bsr & BSR_RAD_RI) + if (bsr & ASSABET_BSR_RAD_RI) ret |= TIOCM_RI; } else { ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR; @@ -304,6 +305,18 @@ */ GPDR |= GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM; GPCR = GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM; + + /* + * Set up registers for sleep mode. + */ + PWER = PWER_GPIO0; + PGSR = 0; + PCFR = 0; + + /* + * Clear all possible wakeup reasons. + */ + RCSR = RCSR_HWR | RCSR_SWR | RCSR_WDR | RCSR_SMR; } diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/cerf.c linux/arch/arm/mach-sa1100/cerf.c --- v2.4.13/linux/arch/arm/mach-sa1100/cerf.c Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/mach-sa1100/cerf.c Thu Oct 25 13:53:46 2001 @@ -16,31 +16,60 @@ #include "generic.h" +static void __init cerf_init_irq (void) +{ + sa1100_init_irq(); + + /* Need to register these as rising edge interrupts + * For standard 16550 serial driver support + * Basically - I copied it from pfs168.c :) + */ +#ifdef CONFIG_SA1100_CERF_CPLD + set_GPIO_IRQ_edge(GPIO_GPIO(3), GPIO_RISING_EDGE); /* PDA Full serial port */ + set_GPIO_IRQ_edge(GPIO_GPIO(2), GPIO_RISING_EDGE); /* PDA Bluetooth */ + GPDR &= ~(GPIO_GPIO(3)); /* Set the direction of serial port GPIO pin to in */ + GPDR &= ~(GPIO_GPIO(2)); /* Set the direction of bluetooth GPIO pin to in */ +#endif /* CONFIG_SA1100_CERF_CPLD */ +} + static void __init fixup_cerf(struct machine_desc *desc, struct param_struct *params, char **cmdline, struct meminfo *mi) { -#ifdef CONFIG_SA1100_CERF_32MB - // 32MB RAM +#if defined(CONFIG_SA1100_CERF_64MB) + // 64MB RAM + SET_BANK( 0, 0xc0000000, 64*1024*1024 ); + mi->nr_banks = 1; +#elif defined(CONFIG_SA1100_CERF_32MB) // 32MB RAM SET_BANK( 0, 0xc0000000, 32*1024*1024 ); mi->nr_banks = 1; -#else - // 16Meg Ram. +#elif defined(CONFIG_SA1100_CERF_16MB) // 16Meg Ram. SET_BANK( 0, 0xc0000000, 8*1024*1024 ); - SET_BANK( 1, 0xc8000000, 8*1024*1024 ); // comment this out for 8MB Cerfs + SET_BANK( 1, 0xc8000000, 8*1024*1024 ); mi->nr_banks = 2; +#elif defined(CONFIG_SA1100_CERF_8MB) + // 8Meg Ram. + SET_BANK( 0, 0xc0000000, 8*1024*1024 ); + mi->nr_banks = 1; +#else + #error "Undefined memory size for Cerfboard." #endif - ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); - setup_ramdisk(1, 0, 0, 8192); - // Save 2Meg for RAMDisk - setup_initrd(0xc0500000, 3*1024*1024); +// ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); +// setup_ramdisk(1, 0, 0, 8192); +// // Save 2Meg for RAMDisk +// setup_initrd(0xc0500000, 3*1024*1024); } static struct map_desc cerf_io_desc[] __initdata = { - /* virtual physical length domain r w c b */ - { 0xe8000000, 0x00000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ - { 0xf0000000, 0x08000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Crystal Chip */ + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ + { 0xf0000000, 0x08000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Crystal Ethernet Chip */ +#ifdef CONFIG_SA1100_CERF_CPLD + { 0xf1000000, 0x40000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* CPLD Chip */ + { 0xf2000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* CerfPDA Bluetooth */ + { 0xf3000000, 0x18000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* CerfPDA Serial */ +#endif LAST_DESC }; @@ -49,14 +78,19 @@ sa1100_map_io(); iotable_init(cerf_io_desc); - sa1100_register_uart(0, 3); + sa1100_register_uart(0, 3); +#ifdef CONFIG_SA1100_CERF_IRDA_ENABLED sa1100_register_uart(1, 1); +#else + sa1100_register_uart(1, 2); + sa1100_register_uart(2, 1); +#endif } -MACHINE_START(CERF, "Intrinsyc CerfBoard") - MAINTAINER("Pieter Truter") +MACHINE_START(CERF, "Intrinsyc's Cerf Family of Products") + MAINTAINER("support@intrinsyc.com") BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000) FIXUP(fixup_cerf) MAPIO(cerf_map_io) - INITIRQ(sa1100_init_irq) + INITIRQ(cerf_init_irq) MACHINE_END diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/dma-sa1100.c linux/arch/arm/mach-sa1100/dma-sa1100.c --- v2.4.13/linux/arch/arm/mach-sa1100/dma-sa1100.c Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/dma-sa1100.c Thu Oct 25 13:53:46 2001 @@ -611,7 +611,7 @@ int channel; for (channel = 0; channel < SA1100_DMA_CHANNELS; channel++) { dma_chan[channel].regs = - (dma_regs_t *) io_p2v(_DDAR(channel)); + (dma_regs_t *) &DDAR(channel); dma_chan[channel].irq = IRQ_DMA0 + channel; } return 0; diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/dma-sa1111.c linux/arch/arm/mach-sa1100/dma-sa1111.c --- v2.4.13/linux/arch/arm/mach-sa1100/dma-sa1111.c Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/dma-sa1111.c Thu Oct 25 13:53:46 2001 @@ -23,7 +23,6 @@ #include #include - // #define DEBUG #ifdef DEBUG #define DPRINTK( s, arg... ) printk( "dma<%s>: " s, dma->device_id , ##arg ) @@ -305,7 +304,7 @@ * SDRAM bank 1 on Neponset). The default configuration selects * Assabet, so any address in bank 1 is necessarily invalid. */ - if((machine_is_assabet() || machine_is_pfs168()) && addr >= _DRAMBnk1) + if((machine_is_assabet() || machine_is_pfs168()) && addr >= 0xc8000000) return -1; /* The bug only applies to buffers located more than one megabyte @@ -340,7 +339,7 @@ return -1; break; default: - printk(KERN_ERR "%s(): invalid SMCR DRAC value 0%o\n", + printk(KERN_ERR "%s(): invalid SMCR DRAC value 0%lo\n", __FUNCTION__, FExtr(SBI_SMCR, SMCR_DRAC)); return -1; } diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/freebird.c linux/arch/arm/mach-sa1100/freebird.c --- v2.4.13/linux/arch/arm/mach-sa1100/freebird.c Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/mach-sa1100/freebird.c Thu Oct 25 13:53:46 2001 @@ -50,6 +50,11 @@ sa1100_register_uart(0, 3); sa1100_register_uart(1, 1); + + /* Set up sleep mode registers */ + PWER = 0x1; + PGSR = 0x0; + PCFR = PCFR_OPDE | PCFR_FP | PCFR_FS; } MACHINE_START(FREEBIRD, "Freebird-HPC-1.1") diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/graphicsclient.c linux/arch/arm/mach-sa1100/graphicsclient.c --- v2.4.13/linux/arch/arm/mach-sa1100/graphicsclient.c Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/graphicsclient.c Thu Oct 25 13:53:46 2001 @@ -23,6 +23,7 @@ #include #include #include +#include #include @@ -143,11 +144,185 @@ LAST_DESC }; +static struct gc_uart_ctrl_data_t gc_uart_ctrl_data[] = { + { GPIO_GC_UART0_CTS, 0, NULL,NULL }, + { GPIO_GC_UART1_CTS, 0, NULL,NULL }, + { GPIO_GC_UART2_CTS, 0, NULL,NULL } +}; + +static void +graphicsclient_cts_intr(int irq, void *dev_id, struct pt_regs *regs) +{ + struct gc_uart_ctrl_data_t * uart_data = (struct gc_uart_ctrl_data_t *)dev_id; + int cts = !(GPLR & uart_data->cts_gpio); + + /* NOTE: I supose that we will no get any interrupt + if the GPIO is not changed, so maybe + the cts_prev_state can be removed ... */ + if (cts != uart_data->cts_prev_state) { + uart_data->cts_prev_state = cts; + + uart_handle_cts_change(uart_data->info, cts); + } +} + +static int +graphicsclient_register_cts_intr(int gpio, int irq, + struct gc_uart_ctrl_data_t *uart_data) +{ + int ret = 0; + + set_GPIO_IRQ_edge(gpio, GPIO_BOTH_EDGES); + + ret = request_irq(irq, graphicsclient_cts_intr, + 0, "GC RS232 CTS", uart_data); + if (ret) { + printk(KERN_ERR "uart_open: failed to register CTS irq (%d)\n", + ret); + free_irq(irq, uart_data); + } + + return ret; +} + +static int +graphicsclient_uart_open(struct uart_port *port, struct uart_info *info) +{ + int ret = 0; + + if (port->mapbase == _Ser1UTCR0) { + Ser1SDCR0 |= SDCR0_UART; + /* Set RTS Output */ + GPDR |= GPIO_GC_UART0_RTS; + GPSR = GPIO_GC_UART0_RTS; + + /* Set CTS Input */ + GPDR &= ~GPIO_GC_UART0_CTS; + + gc_uart_ctrl_data[0].cts_prev_state = 0; + gc_uart_ctrl_data[0].info = info; + gc_uart_ctrl_data[0].port = port; + + /* register uart0 CTS irq */ + ret = graphicsclient_register_cts_intr(GPIO_GC_UART0_CTS, + IRQ_GC_UART0_CTS, + &gc_uart_ctrl_data[0]); + } else if (port->mapbase == _Ser2UTCR0) { + Ser2UTCR4 = Ser2HSCR0 = 0; + /* Set RTS Output */ + GPDR |= GPIO_GC_UART1_RTS; + GPSR = GPIO_GC_UART1_RTS; + + /* Set CTS Input */ + GPDR &= ~GPIO_GC_UART1_RTS; + + gc_uart_ctrl_data[1].cts_prev_state = 0; + gc_uart_ctrl_data[1].info = info; + gc_uart_ctrl_data[1].port = port; + + /* register uart1 CTS irq */ + ret = graphicsclient_register_cts_intr(GPIO_GC_UART1_CTS, + IRQ_GC_UART1_CTS, + &gc_uart_ctrl_data[1]); + } else if (port->mapbase == _Ser3UTCR0) { + /* Set RTS Output */ + GPDR |= GPIO_GC_UART2_RTS; + GPSR = GPIO_GC_UART2_RTS; + + /* Set CTS Input */ + GPDR &= ~GPIO_GC_UART2_RTS; + + gc_uart_ctrl_data[2].cts_prev_state = 0; + gc_uart_ctrl_data[2].info = info; + gc_uart_ctrl_data[2].port = port; + + /* register uart2 CTS irq */ + ret = graphicsclient_register_cts_intr(GPIO_GC_UART2_CTS, + IRQ_GC_UART2_CTS, + &gc_uart_ctrl_data[2]); + } + return ret; +} + +static int +graphicsclient_uart_close(struct uart_port *port, struct uart_info *info) +{ + if (port->mapbase == _Ser1UTCR0) { + free_irq(IRQ_GC_UART0_CTS, &gc_uart_ctrl_data[0]); + } else if (port->mapbase == _Ser2UTCR0) { + free_irq(IRQ_GC_UART1_CTS, &gc_uart_ctrl_data[1]); + } else if (port->mapbase == _Ser3UTCR0) { + free_irq(IRQ_GC_UART2_CTS, &gc_uart_ctrl_data[2]); + } + + return 0; +} + +static int graphicsclient_get_mctrl(struct uart_port *port) +{ + int result = TIOCM_CD | TIOCM_DSR; + + if (port->mapbase == _Ser1UTCR0) { + if (!(GPLR & GPIO_GC_UART0_CTS)) + result |= TIOCM_CTS; + } else if (port->mapbase == _Ser2UTCR0) { + if (!(GPLR & GPIO_GC_UART1_CTS)) + result |= TIOCM_CTS; + } else if (port->mapbase == _Ser3UTCR0) { + if (!(GPLR & GPIO_GC_UART2_CTS)) + result |= TIOCM_CTS; + } else { + result = TIOCM_CTS; + } + + return result; +} + +static void graphicsclient_set_mctrl(struct uart_port *port, u_int mctrl) +{ + if (port->mapbase == _Ser1UTCR0) { + if (mctrl & TIOCM_RTS) + GPCR = GPIO_GC_UART0_RTS; + else + GPSR = GPIO_GC_UART0_RTS; + } else if (port->mapbase == _Ser2UTCR0) { + if (mctrl & TIOCM_RTS) + GPCR = GPIO_GC_UART1_RTS; + else + GPSR = GPIO_GC_UART1_RTS; + } else if (port->mapbase == _Ser3UTCR0) { + if (mctrl & TIOCM_RTS) + GPCR = GPIO_GC_UART2_RTS; + else + GPSR = GPIO_GC_UART2_RTS; + } +} + +static void +graphicsclient_uart_pm(struct uart_port *port, u_int state, u_int oldstate) +{ + if (!state) { + /* make serial ports work ... */ + Ser2UTCR4 = 0; + Ser2HSCR0 = 0; + Ser1SDCR0 |= SDCR0_UART; + } +} + +static struct sa1100_port_fns graphicsclient_port_fns __initdata = { + open: graphicsclient_uart_open, + close: graphicsclient_uart_close, + get_mctrl: graphicsclient_get_mctrl, + set_mctrl: graphicsclient_set_mctrl, + pm: graphicsclient_uart_pm, +}; + static void __init graphicsclient_map_io(void) { sa1100_map_io(); iotable_init(graphicsclient_io_desc); + sa1100_register_uart_fns(&graphicsclient_port_fns); sa1100_register_uart(0, 3); sa1100_register_uart(1, 1); sa1100_register_uart(2, 2); diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/graphicsmaster.c linux/arch/arm/mach-sa1100/graphicsmaster.c --- v2.4.13/linux/arch/arm/mach-sa1100/graphicsmaster.c Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/graphicsmaster.c Thu Oct 25 13:53:46 2001 @@ -207,11 +207,100 @@ LAST_DESC }; +static int graphicsmaster_uart_open(struct uart_port *port, struct uart_info *info) +{ + int ret = 0; + + if (port->mapbase == _Ser1UTCR0) { + Ser1SDCR0 |= SDCR0_UART; + /* Set RTS Output */ + GPSR = GPIO_GPIO15; + GPDR |= GPIO_GPIO15; + /* Set CTS Input */ + GPDR &= ~GPIO_GPIO14; + } + else if (port->mapbase == _Ser2UTCR0) { + Ser2UTCR4 = Ser2HSCR0 = 0; + /* Set RTS Output */ + GPSR = GPIO_GPIO17; + GPDR |= GPIO_GPIO17; + /* Set CTS Input */ + GPDR &= ~GPIO_GPIO16; + } + else if (port->mapbase == _Ser3UTCR0) { + /* Set RTS Output */ + GPSR = GPIO_GPIO19; + GPDR |= GPIO_GPIO19; + /* Set CTS Input */ + GPDR &= ~GPIO_GPIO18; + } + return ret; +} + +static int graphicsmaster_get_mctrl(struct uart_port *port) +{ + int result = TIOCM_CD | TIOCM_DSR; + + if (port->mapbase == _Ser1UTCR0) { + if (!(GPLR & GPIO_GPIO14)) + result |= TIOCM_CTS; + } else if (port->mapbase == _Ser2UTCR0) { + if (!(GPLR & GPIO_GPIO16)) + result |= TIOCM_CTS; + } else if (port->mapbase == _Ser3UTCR0) { + if (!(GPLR & GPIO_GPIO17)) + result |= TIOCM_CTS; + } else { + result = TIOCM_CTS; + } + + return result; +} + +static void graphicsmaster_set_mctrl(struct uart_port *port, u_int mctrl) +{ + if (port->mapbase == _Ser1UTCR0) { + if (mctrl & TIOCM_RTS) + GPCR = GPIO_GPIO15; + else + GPSR = GPIO_GPIO15; + } else if (port->mapbase == _Ser2UTCR0) { + if (mctrl & TIOCM_RTS) + GPCR = GPIO_GPIO17; + else + GPSR = GPIO_GPIO17; + } else if (port->mapbase == _Ser3UTCR0) { + if (mctrl & TIOCM_RTS) + GPCR = GPIO_GPIO19; + else + GPSR = GPIO_GPIO19; + } +} + +static void +graphicsmaster_uart_pm(struct uart_port *port, u_int state, u_int oldstate) +{ + if (!state) { + /* make serial ports work ... */ + Ser2UTCR4 = 0; + Ser2HSCR0 = 0; + Ser1SDCR0 |= SDCR0_UART; + } +} + +static struct sa1100_port_fns graphicsmaster_port_fns __initdata = { + open: graphicsmaster_uart_open, + get_mctrl: graphicsmaster_get_mctrl, + set_mctrl: graphicsmaster_set_mctrl, + pm: graphicsmaster_uart_pm, +}; + static void __init graphicsmaster_map_io(void) { sa1100_map_io(); iotable_init(graphicsmaster_io_desc); + sa1100_register_uart_fns(&graphicsmaster_port_fns); sa1100_register_uart(0, 3); sa1100_register_uart(1, 1); sa1100_register_uart(2, 2); diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/h3600.c linux/arch/arm/mach-sa1100/h3600.c --- v2.4.13/linux/arch/arm/mach-sa1100/h3600.c Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/h3600.c Thu Oct 25 13:53:46 2001 @@ -27,14 +27,62 @@ static int h3600_egpio = EGPIO_H3600_RS232_ON; +void init_h3600_egpio(void) +{ +#ifdef CONFIG_IPAQ_H3100 + int h3100_controls = (GPIO_H3100_BT_ON + | GPIO_H3100_QMUTE + | GPIO_H3100_LCD_3V_ON + | GPIO_H3100_AUD_ON + | GPIO_H3100_AUD_PWR_ON + | GPIO_H3100_IR_ON + | GPIO_H3100_IR_FSEL); + GPDR |= h3100_controls; + GPCR = h3100_controls; + GAFR = GPIO_SSP_CLK; +#endif +} + void clr_h3600_egpio(unsigned long x) { +#ifdef CONFIG_IPAQ_H3100 + unsigned long gpcr = 0; + if (x&EGPIO_H3600_QMUTE) + gpcr |= GPIO_H3100_QMUTE; + if (x&EGPIO_H3600_LCD_ON) + gpcr |= GPIO_H3100_LCD_3V_ON; + if (x&EGPIO_H3600_AUD_AMP_ON) + gpcr |= GPIO_H3100_AUD_ON; + if (x&EGPIO_H3600_AUD_PWR_ON) + gpcr |= GPIO_H3100_AUD_PWR_ON; + if (x&EGPIO_H3600_IR_ON) + gpcr |= GPIO_H3100_IR_ON; + if (x&EGPIO_H3600_IR_FSEL) + gpcr |= GPIO_H3100_IR_FSEL; + GPCR = gpcr; +#endif h3600_egpio &= ~x; H3600_EGPIO = h3600_egpio; } void set_h3600_egpio(unsigned long x) { +#ifdef CONFIG_IPAQ_H3100 + unsigned long gpsr = 0; + if (x&EGPIO_H3600_QMUTE) + gpsr |= GPIO_H3100_QMUTE; + if (x&EGPIO_H3600_LCD_ON) + gpsr |= GPIO_H3100_LCD_3V_ON; + if (x&EGPIO_H3600_AUD_AMP_ON) + gpsr |= GPIO_H3100_AUD_ON; + if (x&EGPIO_H3600_AUD_PWR_ON) + gpsr |= GPIO_H3100_AUD_PWR_ON; + if (x&EGPIO_H3600_IR_ON) + gpsr |= GPIO_H3100_IR_ON; + if (x&EGPIO_H3600_IR_FSEL) + gpsr |= GPIO_H3100_IR_FSEL; + GPSR = gpsr; +#endif h3600_egpio |= x; H3600_EGPIO = h3600_egpio; } @@ -153,8 +201,8 @@ /* virtual physical length domain r w c b */ { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */ { 0xf0000000, 0x49000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* EGPIO 0 */ - { 0xf1000000, 0x10000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* static memory bank 2 */ - { 0xf3000000, 0x40000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* static memory bank 4 */ + { 0xf1000000, 0x10000000, 0x02800000, DOMAIN_IO, 1, 1, 0, 0 }, /* static memory bank 2 */ + { 0xf3800000, 0x40000000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* static memory bank 4 */ LAST_DESC }; @@ -166,7 +214,7 @@ sa1100_register_uart_fns(&h3600_port_fns); sa1100_register_uart(0, 3); sa1100_register_uart(1, 1); /* isn't this one driven elsewhere? */ - sa1100_register_uart(2, 2); + init_h3600_egpio(); /* * Default GPIO settings. @@ -179,6 +227,11 @@ */ PPDR |= PPC_TXD4 | PPC_SCLK | PPC_SFRM; PPSR &= ~(PPC_TXD4 | PPC_SCLK | PPC_SFRM); + + /* Configure suspend conditions */ + PGSR = 0; + PWER = 0x1 | (1 << 31); + PCFR = PCFR_OPDE | PCFR_FP | PCFR_FS; } MACHINE_START(H3600, "Compaq iPAQ") diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/leds-adsbitsy.c linux/arch/arm/mach-sa1100/leds-adsbitsy.c --- v2.4.13/linux/arch/arm/mach-sa1100/leds-adsbitsy.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/leds-adsbitsy.c Thu Oct 25 13:53:46 2001 @@ -0,0 +1,96 @@ +/* + * linux/arch/arm/mach-sa1100/leds-adsbitsy.c + * + * ADS Bitsy LED + * 7/25/01 Woojung Huh + */ +#include +#include + +#include +#include +#include + +#include "leds.h" + + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static unsigned int led_state; +static unsigned int hw_led_state; + +#define LED_TIMER GPIO_GPIO20 /* green heartbeat */ + +#define LED_MASK (LED_TIMER) + +void adsbitsy_leds_event(led_event_t evt) +{ + unsigned long flags; + + save_flags_cli(flags); + + switch (evt) { + case led_start: + hw_led_state = 0; /* gc leds are positive logic */ + led_state = LED_STATE_ENABLED; + break; + + case led_stop: + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + led_state |= LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + + case led_release: + led_state &= ~LED_STATE_CLAIMED; + hw_led_state = LED_MASK; + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + if (!(led_state & LED_STATE_CLAIMED)) + hw_led_state ^= LED_TIMER; + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + break; + + case led_idle_end: + break; +#endif + + case led_green_on: + break; + + case led_green_off: + break; + + case led_amber_on: + break; + + case led_amber_off: + break; + + case led_red_on: + break; + + case led_red_off: + break; + + default: + break; + } + + if (led_state & LED_STATE_ENABLED) { + GPSR = hw_led_state; + GPCR = hw_led_state ^ LED_MASK; + } + + restore_flags(flags); +} diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/leds-assabet.c linux/arch/arm/mach-sa1100/leds-assabet.c --- v2.4.13/linux/arch/arm/mach-sa1100/leds-assabet.c Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/mach-sa1100/leds-assabet.c Thu Oct 25 13:53:46 2001 @@ -15,6 +15,7 @@ #include #include #include +#include #include "leds.h" @@ -25,7 +26,7 @@ static unsigned int led_state; static unsigned int hw_led_state; -#define BCR_LED_MASK (BCR_LED_GREEN | BCR_LED_RED) +#define ASSABET_BCR_LED_MASK (ASSABET_BCR_LED_GREEN | ASSABET_BCR_LED_RED) void assabet_leds_event(led_event_t evt) { @@ -35,7 +36,7 @@ switch (evt) { case led_start: - hw_led_state = BCR_LED_RED | BCR_LED_GREEN; + hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; led_state = LED_STATE_ENABLED; break; @@ -45,30 +46,30 @@ case led_claim: led_state |= LED_STATE_CLAIMED; - hw_led_state = BCR_LED_RED | BCR_LED_GREEN; + hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; break; case led_release: led_state &= ~LED_STATE_CLAIMED; - hw_led_state = BCR_LED_RED | BCR_LED_GREEN; + hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; break; #ifdef CONFIG_LEDS_TIMER case led_timer: if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state ^= BCR_LED_GREEN; + hw_led_state ^= ASSABET_BCR_LED_GREEN; break; #endif #ifdef CONFIG_LEDS_CPU case led_idle_start: if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= BCR_LED_RED; + hw_led_state |= ASSABET_BCR_LED_RED; break; case led_idle_end: if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state &= ~BCR_LED_RED; + hw_led_state &= ~ASSABET_BCR_LED_RED; break; #endif @@ -77,12 +78,12 @@ case led_green_on: if (led_state & LED_STATE_CLAIMED) - hw_led_state &= ~BCR_LED_GREEN; + hw_led_state &= ~ASSABET_BCR_LED_GREEN; break; case led_green_off: if (led_state & LED_STATE_CLAIMED) - hw_led_state |= BCR_LED_GREEN; + hw_led_state |= ASSABET_BCR_LED_GREEN; break; case led_amber_on: @@ -93,12 +94,12 @@ case led_red_on: if (led_state & LED_STATE_CLAIMED) - hw_led_state &= ~BCR_LED_RED; + hw_led_state &= ~ASSABET_BCR_LED_RED; break; case led_red_off: if (led_state & LED_STATE_CLAIMED) - hw_led_state |= BCR_LED_RED; + hw_led_state |= ASSABET_BCR_LED_RED; break; default: @@ -106,7 +107,8 @@ } if (led_state & LED_STATE_ENABLED) - BCR = BCR_value = (BCR_value & ~BCR_LED_MASK) | hw_led_state; + ASSABET_BCR = BCR_value = (BCR_value & ~ASSABET_BCR_LED_MASK) | + hw_led_state; local_irq_restore(flags); } diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/leds-cerf.c linux/arch/arm/mach-sa1100/leds-cerf.c --- v2.4.13/linux/arch/arm/mach-sa1100/leds-cerf.c Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/mach-sa1100/leds-cerf.c Thu Oct 25 13:53:46 2001 @@ -19,11 +19,23 @@ static unsigned int led_state; static unsigned int hw_led_state; +#ifdef CONFIG_SA1100_CERF_CPLD + +#define LED_D0 GPIO_GPIO(0) +#define LED_D1 GPIO_GPIO(0) +#define LED_D2 GPIO_GPIO(0) +#define LED_D3 GPIO_GPIO(0) +#define LED_MASK (LED_D0|LED_D1|LED_D2|LED_D3) + +#else + #define LED_D0 GPIO_GPIO(0) #define LED_D1 GPIO_GPIO(1) #define LED_D2 GPIO_GPIO(2) #define LED_D3 GPIO_GPIO(3) #define LED_MASK (LED_D0|LED_D1|LED_D2|LED_D3) + +#endif void cerf_leds_event(led_event_t evt) { diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/leds-simpad.c linux/arch/arm/mach-sa1100/leds-simpad.c --- v2.4.13/linux/arch/arm/mach-sa1100/leds-simpad.c Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/mach-sa1100/leds-simpad.c Thu Oct 25 13:53:46 2001 @@ -22,13 +22,16 @@ #define LED_GREEN (1) #define LED_MASK (1) +extern void set_cs3_bit(int value); +extern void clear_cs3_bit(int value); + void simpad_leds_event(led_event_t evt) { unsigned long flags; //local_irq_save(flags); - switch (evt) + switch (evt) { case led_start: hw_led_state = LED_GREEN; @@ -94,8 +97,9 @@ } if (led_state & LED_STATE_ENABLED) - cs3_shadow |= LED2_ON; - + set_cs3_bit(LED2_ON); + else + clear_cs3_bit(LED2_ON); //local_irq_restore(flags); } diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/leds.c linux/arch/arm/mach-sa1100/leds.c --- v2.4.13/linux/arch/arm/mach-sa1100/leds.c Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/leds.c Thu Oct 25 13:53:46 2001 @@ -32,6 +32,8 @@ leds_event = pfs168_leds_event; if (machine_is_graphicsmaster()) leds_event = graphicsmaster_leds_event; + if (machine_is_adsbitsy()) + leds_event = adsbitsy_leds_event; leds_event(led_start); return 0; diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/leds.h linux/arch/arm/mach-sa1100/leds.h --- v2.4.13/linux/arch/arm/mach-sa1100/leds.h Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/leds.h Thu Oct 25 13:53:46 2001 @@ -6,3 +6,4 @@ extern void lart_leds_event(led_event_t evt); extern void pfs168_leds_event(led_event_t evt); extern void graphicsmaster_leds_event(led_event_t evt); +extern void adsbitsy_leds_event(led_event_t evt); diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/neponset.c linux/arch/arm/mach-sa1100/neponset.c --- v2.4.13/linux/arch/arm/mach-sa1100/neponset.c Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mach-sa1100/neponset.c Thu Oct 25 13:53:46 2001 @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -14,7 +15,7 @@ #include #include #include -#include +#include #include "sa1111.h" @@ -68,8 +69,8 @@ irq = NEPONSET_USAR_IRQ; irq_desc[irq].valid = 1; irq_desc[irq].probe_ok = 1; - set_GPIO_IRQ_edge( GPIO_NEP_IRQ, GPIO_RISING_EDGE ); - setup_arm_irq( IRQ_GPIO_NEP_IRQ, &neponset_irq ); + set_GPIO_IRQ_edge(ASSABET_GPIO_NEP_IRQ, GPIO_RISING_EDGE); + setup_arm_irq(ASSABET_IRQ_GPIO_NEP_IRQ, &neponset_irq); } static int __init neponset_init(void) diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/pm.c linux/arch/arm/mach-sa1100/pm.c --- v2.4.13/linux/arch/arm/mach-sa1100/pm.c Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/pm.c Thu Oct 25 13:53:46 2001 @@ -0,0 +1,183 @@ +/* + * SA1100 Power Management Routines + * + * Copyright (c) 2001 Cliff Brake + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License. + * + * History: + * + * 2001-02-06: Cliff Brake Initial code + * + * 2001-02-25: Sukjae Cho & + * Chester Kuo + * Save more value for the resume function! Support + * Bitsy/Assabet/Freebird board + * + * 2001-08-29: Nicolas Pitre + * Cleaned up, pushed platform dependent stuff + * in the platform specific files. + */ + +/* + * Debug macros + */ +#define DEBUG 1 +#ifdef DEBUG +# define DPRINTK(fmt, args...) printk("%s: " fmt, __FUNCTION__ , ## args) +#else +# define DPRINTK(fmt, args...) +#endif + + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "sleep.h" + +extern void sa1100_cpu_suspend(void); +extern void sa1100_cpu_resume(void); + +extern unsigned long *sleep_save; /* virtual address */ +extern unsigned long sleep_save_p; /* physical address */ + +#define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x +#define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] + +int pm_do_suspend(void) +{ + int retval; + + /* set up pointer to sleep parameters */ + sleep_save = kmalloc (SLEEP_SAVE_SIZE*sizeof(long), GFP_ATOMIC); + if (!sleep_save) + return -ENOMEM; + sleep_save_p = virt_to_phys(sleep_save); + + retval = pm_send_all(PM_SUSPEND, (void *)2); + if (retval) { + kfree(sleep_save); + return retval; + } + + cli(); + + /* preserve current time */ + RCNR = xtime.tv_sec; + + /* save vital registers */ + SAVE(OSCR); + SAVE(OSMR0); + SAVE(OSMR1); + SAVE(OSMR2); + SAVE(OSMR3); + SAVE(OIER); + + SAVE(GPDR); + SAVE(GRER); + SAVE(GFER); + SAVE(GAFR); + + SAVE(PPDR); + SAVE(PPSR); + SAVE(PPAR); + SAVE(PSDR); + + SAVE(Ser1SDCR0); + + SAVE(ICMR); + + /* ... maybe a global variable initialized by arch code to set this? */ + GRER = PWER; + GFER = 0; + GEDR = GEDR; + + /* Clear previous reset status */ + RCSR = RCSR_HWR | RCSR_SWR | RCSR_WDR | RCSR_SMR; + + /* set resume return address */ + PSPR = virt_to_phys(sa1100_cpu_resume); + + /* go zzz */ + sa1100_cpu_suspend(); + + /* ensure not to come back here if it wasn't intended */ + PSPR = 0; + + DPRINTK("*** made it back from resume\n"); + + /* restore registers */ + RESTORE(GPDR); + RESTORE(GRER); + RESTORE(GFER); + RESTORE(GAFR); + + /* clear any edge detect bit */ + GEDR = GEDR; + + RESTORE(PPDR); + RESTORE(PPSR); + RESTORE(PPAR); + RESTORE(PSDR); + + RESTORE(Ser1SDCR0); + + PSSR = PSSR_PH; + + RESTORE(OSMR0); + RESTORE(OSMR1); + RESTORE(OSMR2); + RESTORE(OSMR3); + RESTORE(OSCR); + RESTORE(OIER); + + ICLR = 0; + ICCR = 1; + RESTORE(ICMR); + + /* restore current time */ + xtime.tv_sec = RCNR; + + sti(); + + kfree (sleep_save); + + retval = pm_send_all(PM_RESUME, (void *)0); + if (retval) + return retval; + + return 0; +} + + +static struct ctl_table pm_table[] = +{ + {ACPI_S1_SLP_TYP, "suspend", NULL, 0, 0600, NULL, (proc_handler *)&pm_do_suspend}, + {0} +}; + +static struct ctl_table pm_dir_table[] = +{ + {CTL_ACPI, "pm", NULL, 0, 0555, pm_table}, + {0} +}; + +/* + * Initialize power interface + */ +static int __init pm_init(void) +{ + register_sysctl_table(pm_dir_table, 1); + return 0; +} + +__initcall(pm_init); + diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/simpad.c linux/arch/arm/mach-sa1100/simpad.c --- v2.4.13/linux/arch/arm/mach-sa1100/simpad.c Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/mach-sa1100/simpad.c Thu Oct 25 13:53:46 2001 @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include @@ -15,32 +17,46 @@ #include #include #include +#include #include "generic.h" -void init_simpad_cs3() +long cs3_shadow; + +static int __init simpad_init(void) +{ + PSPR = 0xc0008000; + GPDR &= ~GPIO_GPIO0; + cs3_shadow = (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | + ENABLE_5V | RESET_SIMCARD); + *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; + return 0; +} + +__initcall(simpad_init); + +long get_cs3_shadow() { - cs3_shadow =(DISPLAY_ON | RS232_ON | PCMCIA_BUFF_DIS | RESET_SIMCARD); - printk("\nCall CS3 init:%x\n",cs3_shadow); - *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; - cs3_shadow =(DISPLAY_ON| RS232_ON |RESET_SIMCARD); + return cs3_shadow; } -void PCMCIA_setbit(int value) +void set_cs3_bit(int value) { - cs3_shadow |= value; + cs3_shadow |= value; + *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; } -void PCMCIA_clearbit(int value) +void clear_cs3_bit(int value) { - cs3_shadow &= ~value; + cs3_shadow &= ~value; + *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; } static void __init fixup_simpad(struct machine_desc *desc, struct param_struct *params, char **cmdline, struct meminfo *mi) { -#ifdef CONFIG_SA1100_SIMPAD_64MB +#ifdef CONFIG_SA1100_SIMPAD_DRAM_64MB /* DRAM */ SET_BANK( 0, 0xc0000000, 64*1024*1024 ); #else SET_BANK( 0, 0xc0000000, 32*1024*1024 ); @@ -48,27 +64,109 @@ mi->nr_banks = 1; ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); setup_ramdisk( 1, 0, 0, 8192 ); - setup_initrd( __phys_to_virt(0xc0800000), 8*1024*1024 ); + setup_initrd( __phys_to_virt(0xc0800000), 4*1024*1024 ); } static struct map_desc simpad_io_desc[] __initdata = { - /* virtual physical length domain r w c b */ - { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0, neccessary for mtd */ - { 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* MQ200 */ + /* virtual physical length domain r w c b */ + { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, + { 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* MQ200 */ { 0xf1000000, 0x18000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Paules CS3, write only */ LAST_DESC }; + +static void simpad_uart_pm(struct uart_port *port, u_int state, u_int oldstate) +{ + if (port->mapbase == (u_int)&Ser1UTCR0) { + if (state) + clear_cs3_bit(RS232_ON); + else + set_cs3_bit(RS232_ON); + } +} + +static struct sa1100_port_fns simpad_port_fns __initdata = { + pm: simpad_uart_pm, +}; + static void __init simpad_map_io(void) { sa1100_map_io(); iotable_init(simpad_io_desc); +#ifndef CONFIG_SERIAL_SA1100_OLD + //It is only possible to register 3 UART in serial_sa1100.c sa1100_register_uart(0, 3); - sa1100_register_uart(1, 1); + sa1100_register_uart(1, 1); +#endif +} + +#ifdef CONFIG_PROC_FS + +static char* name[]={ + "VCC_5V_EN", + "VCC_3V_EN", + "EN1", + "EN0", + "DISPLAY_ON", + "PCMCIA_BUFF_DIS", + "MQ_RESET", + "PCMCIA_RESET", + "DECT_POWER_ON", + "IRDA_SD", + "RS232_ON", + "SD_MEDIAQ", + "LED2_ON", + "IRDA_MODE", + "ENABLE_5V", + "RESET_SIMCARD" +}; + +static int proc_cs3_read(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + char *p = page; + int len, i; + + p += sprintf(p, "Chipselect3 : %x\n", cs3_shadow); + for (i = 0; i <= 15; i++) { + if(cs3_shadow & (1<read_proc = proc_cs3_read; + return 0; +} + +static int __exit cs3_exit(void) +{ + if (proc_cs3) + remove_proc_entry( "cs3", 0); + return 0; +} +__initcall(cs3_init); +#endif // CONFIG_PROC_FS MACHINE_START(SIMPAD, "Simpad") MAINTAINER("Juergen Messerer") diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/sleep.S linux/arch/arm/mach-sa1100/sleep.S --- v2.4.13/linux/arch/arm/mach-sa1100/sleep.S Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/sleep.S Thu Oct 25 13:53:46 2001 @@ -0,0 +1,238 @@ +/* + * SA11x0 Assembler Sleep/WakeUp Management Routines + * + * Copyright (c) 2001 Cliff Brake + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License. + * + * History: + * + * 2001-02-06: Cliff Brake Initial code + * + * 2001-08-29: Nicolas Pitre Simplified. + */ + +#include +#include +#include +#include "sleep.h" + +/* + * sa1100_cpu_suspend() + * + * Causes sa11x0 to enter sleep state + * + */ + + .text + +ENTRY(sleep_save) .word 0 @ virtual address of parameter array +ENTRY(sleep_save_p) .word 0 @ physical address of parameter array + +ENTRY(sa1100_cpu_suspend) + + @ save registers on stack + stmfd sp!, {r4 - r12, lr} + + @ load virtual address for sleep_save array + ldr r4, sleep_save + + @ save stack pointer + str sp, [r4, #(SLEEP_SAVE_SP*4)] + + @ save coprocessor registers + mrc p15, 0, r1, c1, c0, 0 + str r1, [r4, #(SLEEP_SAVE_CP15_R1*4)] + mrc p15, 0, r1, c2, c0, 0 + str r1, [r4, #(SLEEP_SAVE_CP15_R2*4)] + mrc p15, 0, r1, c3, c0, 0 + str r1, [r4, #(SLEEP_SAVE_CP15_R3*4)] + mrc p15, 0, r1, c5, c0, 0 + str r1, [r4, #(SLEEP_SAVE_CP15_R5*4)] + mrc p15, 0, r1, c6, c0, 0 + str r1, [r4, #(SLEEP_SAVE_CP15_R6*4)] + mrc p15, 0, r1, c13, c0, 0 + str r1, [r4, #(SLEEP_SAVE_CP15_R13*4)] + + @ clean data cache and invalidate WB + bl cpu_sa1100_cache_clean_invalidate_all + + @ disable clock switching + mcr p15, 0, r1, c15, c2, 2 + + @ Adjust memory timing before lowering CPU clock + @ Clock speed adjustment without changing memory timing makes + @ CPU hang in some cases + ldr r0, =MDREFR + ldr r1, [r0] + orr r1, r1, #MDREFR_K1DB2 + str r1, [r0] + + @ delay 90us and set CPU PLL to lowest speed + @ fixes resume problem on high speed SA1110 + mov r0, #90 + bl SYMBOL_NAME(udelay) + ldr r0, =PPCR + mov r1, #0 + str r1, [r0] + mov r0, #90 + bl SYMBOL_NAME(udelay) + + +/* setup up register contents for jump to page containing SA1110 SDRAM controller bug fix suspend code + * + * r0 points to MSC0 register + * r1 points to MSC1 register + * r2 points to MSC2 register + * r3 is MSC0 value + * r4 is MSC1 value + * r5 is MSC2 value + * r6 points to MDREFR register + * r7 is first MDREFR value + * r8 is second MDREFR value + * r9 is pointer to MDCNFG register + * r10 is MDCNFG value + * r11 is third MDREFR value + * r12 is pointer to PMCR register + * r13 is PMCR value (1) + * + */ + + ldr r0, =MSC0 + ldr r1, =MSC1 + ldr r2, =MSC2 + + ldr r3, [r0] + bic r3, r3, #FMsk(MSC_RT) + bic r3, r3, #FMsk(MSC_RT)<<16 + + ldr r4, [r1] + bic r4, r4, #FMsk(MSC_RT) + bic r4, r4, #FMsk(MSC_RT)<<16 + + ldr r5, [r2] + bic r5, r5, #FMsk(MSC_RT) + bic r5, r5, #FMsk(MSC_RT)<<16 + + ldr r6, =MDREFR + + ldr r7, [r6] + bic r7, r7, #0x0000FF00 + bic r7, r7, #0x000000F0 + orr r8, r7, #MDREFR_SLFRSH + + ldr r9, =MDCNFG + ldr r10, [r9] + bic r10, r10, #(MDCNFG_DE0+MDCNFG_DE1) + bic r10, r10, #(MDCNFG_DE2+MDCNFG_DE3) + + bic r11, r8, #MDREFR_SLFRSH + bic r11, r11, #MDREFR_E1PIN + + ldr r12, =PMCR + + mov r13, #PMCR_SF + + b sa1110_sdram_controller_fix + + .align 5 +sa1110_sdram_controller_fix: + + @ Step 1 clear RT field of all MSCx registers + str r3, [r0] + str r4, [r1] + str r5, [r2] + + @ Step 2 clear DRI field in MDREFR + str r7, [r6] + + @ Step 3 set SLFRSH bit in MDREFR + str r8, [r6] + + @ Step 4 clear DE bis in MDCNFG + str r10, [r9] + + @ Step 5 clear DRAM refresh control register + str r11, [r6] + + @ Wow, now the hardware suspend request pins can be used, that makes them functional for + @ about 7 ns out of the entire time that the CPU is running! + + @ Step 6 set force sleep bit in PMCR + + str r13, [r12] + +20: b 20b @ loop waiting for sleep + +/* + * cpu_sa1100_resume() + * + * entry point from bootloader into kernel during resume + * + */ + + .align 5 +ENTRY(sa1100_cpu_resume) + + @ set SVC, irqs off + mov r0, #I_BIT | MODE_SVC + msr cpsr_c, r0 + + @ load physical address of sleep_save + ldr r4, sleep_save_p + + @ restore cp15_r3, domain id + ldr r1, [r4, #(SLEEP_SAVE_CP15_R3*4)] + mcr p15, 0, r1, c3, c0 ,0 + + @ restore cp15_r2, translation table base address + ldr r1, [r4, #(SLEEP_SAVE_CP15_R2*4)] + mcr p15, 0, r1, c2, c0 ,0 + + mov r1, #0 + mcr p15, 0, r1, c8, c7, 0 @ flush I+D TLBs + mcr p15, 0, r1, c7, c7, 0 @ flush I&D cache + + @ get saved cp15 r1 (control register) + ldr r1, [r4, #(SLEEP_SAVE_CP15_R1*4)] + + @ get address to jump to after turning on MMU + ldr r2, =resume_after_mmu + + cmp r2, #0 + + b resume_turn_on_mmu + + .align 5 +resume_turn_on_mmu: + + @ turn on mmu + mcr p15, 0, r1, c1, c0 ,0 + + @ jump to resume_after_mmu + mov pc, r2 + nop + nop + + .align 5 +resume_after_mmu: + + @ load virtual address for sleep_save array + ldr r4, sleep_save + + @ restore the rest of CPU state + ldr r1, [r4, #(SLEEP_SAVE_CP15_R13*4)] + mcr p15, 0, r1, c13, c0, 0 + ldr r1, [r4, #(SLEEP_SAVE_CP15_R5*4)] + mcr p15, 0, r1, c5, c0 ,0 + ldr r1, [r4, #(SLEEP_SAVE_CP15_R6*4)] + mcr p15, 0, r1, c6, c0 ,0 + + @ restore stack pointer + ldr sp, [r4, #(SLEEP_SAVE_SP*4)] + + @ return to caller + ldmfd sp!, {r4 - r12, pc} + + diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/sleep.h linux/arch/arm/mach-sa1100/sleep.h --- v2.4.13/linux/arch/arm/mach-sa1100/sleep.h Wed Dec 31 16:00:00 1969 +++ linux/arch/arm/mach-sa1100/sleep.h Thu Oct 25 13:53:46 2001 @@ -0,0 +1,30 @@ +/* + * Offsets for register values preserved in RAM while in sleep mode + */ + +#define SLEEP_SAVE_OSCR 0 +#define SLEEP_SAVE_OSMR0 1 +#define SLEEP_SAVE_OSMR1 2 +#define SLEEP_SAVE_OSMR2 3 +#define SLEEP_SAVE_OSMR3 4 +#define SLEEP_SAVE_OIER 5 +#define SLEEP_SAVE_GPDR 6 +#define SLEEP_SAVE_GRER 7 +#define SLEEP_SAVE_GFER 8 +#define SLEEP_SAVE_GAFR 9 +#define SLEEP_SAVE_PPDR 10 +#define SLEEP_SAVE_PPSR 11 +#define SLEEP_SAVE_PPAR 12 +#define SLEEP_SAVE_PSDR 13 +#define SLEEP_SAVE_Ser1SDCR0 14 +#define SLEEP_SAVE_ICMR 15 +#define SLEEP_SAVE_SP 16 +#define SLEEP_SAVE_CP15_R1 17 +#define SLEEP_SAVE_CP15_R2 18 +#define SLEEP_SAVE_CP15_R3 19 +#define SLEEP_SAVE_CP15_R5 20 +#define SLEEP_SAVE_CP15_R6 21 +#define SLEEP_SAVE_CP15_R13 22 + +#define SLEEP_SAVE_SIZE 23 + diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-shark/dma.c linux/arch/arm/mach-shark/dma.c --- v2.4.13/linux/arch/arm/mach-shark/dma.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-shark/dma.c Thu Oct 25 13:53:46 2001 @@ -1,7 +1,7 @@ /* * linux/arch/arm/mach-shark/dma.c * - * by Alexander Schulz + * by Alexander Schulz * * derived from: * arch/arm/kernel/dma-ebsa285.c diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-shark/leds.c linux/arch/arm/mach-shark/leds.c --- v2.4.13/linux/arch/arm/mach-shark/leds.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-shark/leds.c Thu Oct 25 13:53:46 2001 @@ -1,6 +1,6 @@ /* * arch/arm/kernel/leds-shark.c - * by Alexander Schulz + * by Alexander Schulz * * derived from: * arch/arm/kernel/leds-footbridge.c diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-shark/mm.c linux/arch/arm/mach-shark/mm.c --- v2.4.13/linux/arch/arm/mach-shark/mm.c Thu Apr 12 12:20:31 2001 +++ linux/arch/arm/mach-shark/mm.c Thu Oct 25 13:53:46 2001 @@ -1,7 +1,7 @@ /* * linux/arch/arm/mach-shark/mm.c * - * by Alexander Schulz + * by Alexander Schulz * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as diff -u --recursive --new-file v2.4.13/linux/arch/arm/mm/fault-armv.c linux/arch/arm/mm/fault-armv.c --- v2.4.13/linux/arch/arm/mm/fault-armv.c Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/mm/fault-armv.c Thu Oct 25 13:53:46 2001 @@ -514,7 +514,7 @@ * Oops, we didn't handle the instruction. */ printk(KERN_ERR "Alignment trap: not handling instruction " - "%08lx at [<%08lx>]", instr, instrptr); + "%08lx at [<%08lx>]\n", instr, instrptr); ai_skipped += 1; return 1; diff -u --recursive --new-file v2.4.13/linux/arch/arm/mm/proc-arm920.S linux/arch/arm/mm/proc-arm920.S --- v2.4.13/linux/arch/arm/mm/proc-arm920.S Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/mm/proc-arm920.S Thu Oct 25 13:53:46 2001 @@ -73,7 +73,7 @@ sbc r1, r1, r1 @ r1 = C - 1 and r3, r3, #255 mov pc, lr - + /* * cpu_arm920_check_bugs() */ @@ -150,7 +150,7 @@ mov r2, #1 cpu_arm920_cache_clean_invalidate_all_r2: mov ip, #0 -#ifdef CONFIG_CPU_ARM920_FORCE_WRITE_THROUGH +#ifdef CONFIG_CPU_ARM920_WRITETHROUGH mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache #else /* @@ -180,21 +180,33 @@ * end: Area end address * flags: nonzero for I cache as well */ - .align 5 + .align 5 ENTRY(cpu_arm920_cache_clean_invalidate_range) bic r0, r0, #DCACHELINESIZE - 1 @ && added by PGM + bic r1, r1, #DCACHELINESIZE - 1 @ && added by DHM sub r3, r1, r0 cmp r3, #MAX_AREA_SIZE bgt cpu_arm920_cache_clean_invalidate_all_r2 -1: mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D entry +1: teq r2, #0 +#ifdef CONFIG_CPU_ARM920_WRITETHROUGH + mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry + mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry + add r0, r0, #DCACHELINESIZE + mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry + mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry + add r0, r0, #DCACHELINESIZE +#else + mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D entry + mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry add r0, r0, #DCACHELINESIZE mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D entry + mcrne p15, 0, r0, c7, c5, 1 @ invalidate I entry add r0, r0, #DCACHELINESIZE +#endif cmp r0, r1 blt 1b - teq r2, #0 - movne r0, #0 - mcrne p15, 0, r0, c7, c5, 0 @ invalidate I cache + + mcr p15, 0, r1, c7, c10, 4 @ drain WB mov pc, lr /* @@ -207,10 +219,17 @@ .align 5 ENTRY(cpu_arm920_flush_ram_page) mov r1, #PAGESIZE +#ifdef CONFIG_CPU_ARM920_WRITETHROUGH +1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry + add r0, r0, #DCACHELINESIZE + mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry + add r0, r0, #DCACHELINESIZE +#else 1: mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D entry add r0, r0, #DCACHELINESIZE mcr p15, 0, r0, c7, c14, 1 @ clean and invalidate D entry add r0, r0, #DCACHELINESIZE +#endif subs r1, r1, #2 * DCACHELINESIZE bne 1b mcr p15, 0, r1, c7, c10, 4 @ drain WB @@ -231,11 +250,14 @@ */ .align 5 ENTRY(cpu_arm920_dcache_invalidate_range) +#ifndef CONFIG_CPU_ARM920_WRITETHROUGH tst r0, #DCACHELINESIZE - 1 - bic r0, r0, #DCACHELINESIZE - 1 mcrne p15, 0, r0, c7, c10, 1 @ clean D entry tst r1, #DCACHELINESIZE - 1 mcrne p15, 0, r1, c7, c10, 1 @ clean D entry +#endif @ clean D entry + bic r0, r0, #DCACHELINESIZE - 1 + bic r1, r1, #DCACHELINESIZE - 1 1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry add r0, r0, #DCACHELINESIZE cmp r0, r1 @@ -254,18 +276,21 @@ */ .align 5 ENTRY(cpu_arm920_dcache_clean_range) +#ifndef CONFIG_CPU_ARM920_WRITETHROUGH bic r0, r0, #DCACHELINESIZE - 1 sub r1, r1, r0 cmp r1, #MAX_AREA_SIZE mov r2, #0 bgt cpu_arm920_cache_clean_invalidate_all_r2 + bic r1, r1, #DCACHELINESIZE -1 + add r1, r1, #DCACHELINESIZE + 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry add r0, r0, #DCACHELINESIZE - mcr p15, 0, r0, c7, c10, 1 @ clean D entry - add r0, r0, #DCACHELINESIZE - subs r1, r1, #2 * DCACHELINESIZE + subs r1, r1, #DCACHELINESIZE bpl 1b +#endif mcr p15, 0, r2, c7, c10, 4 @ drain WB mov pc, lr @@ -284,7 +309,7 @@ */ .align 5 ENTRY(cpu_arm920_dcache_clean_page) -#ifndef CONFIG_CPU_ARM920_FORCE_WRITE_THROUGH +#ifndef CONFIG_CPU_ARM920_WRITETHROUGH mov r1, #PAGESIZE 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry add r0, r0, #DCACHELINESIZE @@ -305,7 +330,7 @@ */ .align 5 ENTRY(cpu_arm920_dcache_clean_entry) -#ifndef CONFIG_CPU_ARM920_FORCE_WRITE_THROUGH +#ifndef CONFIG_CPU_ARM920_WRITETHROUGH mcr p15, 0, r0, c7, c10, 1 @ clean D entry #endif mcr p15, 0, r0, c7, c10, 4 @ drain WB @@ -318,22 +343,44 @@ * * invalidate a range of virtual addresses from the Icache * + * This is a little misleading, it is not intended to clean out + * the i-cache but to make sure that any data written to the + * range is made consistant. This means that when we execute code + * in that region, everything works as we expect. + * + * This generally means writing back data in the Dcache and + * write buffer and flushing the Icache over that region + * * start: virtual start address * end: virtual end address + * + * NOTE: ICACHELINESIZE == DCACHELINESIZE (so we don't need to + * loop twice, once for i-cache, once for d-cache) */ .align 5 ENTRY(cpu_arm920_icache_invalidate_range) -1: mcr p15, 0, r0, c7, c10, 1 @ Clean D entry - add r0, r0, #DCACHELINESIZE - cmp r0, r1 - blo 1b + bic r0, r0, #ICACHELINESIZE - 1 @ Safety check + sub r1, r1, r0 + cmp r1, #MAX_AREA_SIZE + bgt cpu_arm920_cache_clean_invalidate_all_r2 + + bic r1, r1, #ICACHELINESIZE - 1 + add r1, r1, #ICACHELINESIZE + +1: mcr p15, 0, r0, c7, c5, 1 @ Clean I entry + mcr p15, 0, r0, c7, c10, 1 @ Clean D entry + add r0, r0, #ICACHELINESIZE + subs r1, r1, #ICACHELINESIZE + bne 1b + mov r0, #0 mcr p15, 0, r0, c7, c10, 4 @ drain WB + mov pc, lr + ENTRY(cpu_arm920_icache_invalidate_page) mcr p15, 0, r0, c7, c5, 0 @ invalidate I cache mov pc, lr - /* ================================== TLB ================================= */ /* @@ -360,6 +407,12 @@ ENTRY(cpu_arm920_tlb_invalidate_range) mov r3, #0 mcr p15, 0, r3, c7, c10, 4 @ drain WB + + mov r3, #PAGESIZE + sub r3, r3, #1 + bic r0, r0, r3 + bic r1, r1, r3 + 1: mcr p15, 0, r0, c8, c6, 1 @ invalidate D TLB entry mcr p15, 0, r0, c8, c5, 1 @ invalidate I TLB entry add r0, r0, #PAGESIZE @@ -396,7 +449,7 @@ .align 5 ENTRY(cpu_arm920_set_pgd) mov ip, #0 -#ifdef CONFIG_CPU_ARM920_FORCE_WRITE_THROUGH +#ifdef CONFIG_CPU_ARM920_WRITETHROUGH /* Any reason why we don't use mcr p15, 0, r0, c7, c7, 0 here? --rmk */ mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache #else @@ -429,7 +482,7 @@ */ .align 5 ENTRY(cpu_arm920_set_pmd) -#ifdef CONFIG_CPU_ARM920_FORCE_WRITE_THROUGH +#ifdef CONFIG_CPU_ARM920_WRITETHROUGH eor r2, r1, #0x0a @ C & Section tst r2, #0x0b biceq r1, r1, #4 @ clear bufferable bit @@ -463,8 +516,8 @@ tst r1, #LPTE_PRESENT | LPTE_YOUNG @ Present and Young? movne r2, #0 -#ifdef CONFIG_CPU_ARM920_FORCE_WRITE_THROUGH - eor r3, r1, #0x0a @ C & small page? +#ifdef CONFIG_CPU_ARM920_WRITETHROUGH + eor r3, r2, #0x0a @ C & small page? tst r3, #0x0b biceq r2, r2, #4 #endif @@ -476,9 +529,9 @@ cpu_manu_name: - .asciz "ARM/VLSI" + .asciz "ARM/CIRRUS" ENTRY(cpu_arm920_name) - .ascii "Arm920" + .ascii "Arm920T" #if defined(CONFIG_CPU_ARM920_CPU_IDLE) .ascii "s" #endif @@ -487,7 +540,7 @@ #endif #if defined(CONFIG_CPU_ARM920_D_CACHE_ON) .ascii "d" -#if defined(CONFIG_CPU_ARM920_FORCE_WRITE_THROUGH) +#if defined(CONFIG_CPU_ARM920_WRITETHROUGH) .ascii "(wt)" #else .ascii "(wb)" diff -u --recursive --new-file v2.4.13/linux/arch/arm/mm/proc-sa110.S linux/arch/arm/mm/proc-sa110.S --- v2.4.13/linux/arch/arm/mm/proc-sa110.S Mon Aug 27 12:41:38 2001 +++ linux/arch/arm/mm/proc-sa110.S Thu Oct 25 13:53:46 2001 @@ -271,7 +271,7 @@ bic r0, r0, #DCACHELINESIZE - 1 sub r3, r1, r0 cmp r3, #MAX_AREA_SIZE - bgt cpu_sa110_cache_clean_invalidate_all_r2 + bhi cpu_sa110_cache_clean_invalidate_all_r2 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry add r0, r0, #DCACHELINESIZE @@ -279,7 +279,7 @@ mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry add r0, r0, #DCACHELINESIZE cmp r0, r1 - blt 1b + blo 1b teq r2, #0 movne r0, #0 mcrne p15, 0, r0, c7, c5, 0 @ invalidate I cache @@ -288,7 +288,7 @@ ENTRY(cpu_sa1100_cache_clean_invalidate_range) sub r3, r1, r0 cmp r3, #MAX_AREA_SIZE - bgt cpu_sa1100_cache_clean_invalidate_all_r2 + bhi cpu_sa1100_cache_clean_invalidate_all_r2 b 1b /* @@ -335,7 +335,7 @@ 1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry add r0, r0, #DCACHELINESIZE cmp r0, r1 - blt 1b + blo 1b mov pc, lr /* @@ -354,7 +354,7 @@ sub r1, r1, r0 cmp r1, #MAX_AREA_SIZE mov r2, #0 - bgt cpu_sa110_cache_clean_invalidate_all_r2 + bhi cpu_sa110_cache_clean_invalidate_all_r2 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry add r0, r0, #DCACHELINESIZE mcr p15, 0, r0, c7, c10, 1 @ clean D entry @@ -369,7 +369,7 @@ sub r1, r1, r0 cmp r1, #MAX_AREA_SIZE mov r2, #0 - bgt cpu_sa1100_cache_clean_invalidate_all_r2 + bhi cpu_sa1100_cache_clean_invalidate_all_r2 b 1b /* @@ -423,6 +423,7 @@ .align 5 ENTRY(cpu_sa110_icache_invalidate_range) ENTRY(cpu_sa1100_icache_invalidate_range) + bic r0, r0, #DCACHELINESIZE - 1 1: mcr p15, 0, r0, c7, c10, 1 @ Clean D entry add r0, r0, #DCACHELINESIZE cmp r0, r1 @@ -460,12 +461,14 @@ .align 5 ENTRY(cpu_sa110_tlb_invalidate_range) ENTRY(cpu_sa1100_tlb_invalidate_range) + bic r0, r0, #0x0ff + bic r0, r0, #0xf00 mov r3, #0 mcr p15, 0, r3, c7, c10, 4 @ drain WB 1: mcr p15, 0, r0, c8, c6, 1 @ invalidate D TLB entry add r0, r0, #PAGESIZE cmp r0, r1 - blt 1b + blo 1b mcr p15, 0, r3, c8, c5, 0 @ invalidate I TLB mov pc, lr diff -u --recursive --new-file v2.4.13/linux/arch/arm/tools/mach-types linux/arch/arm/tools/mach-types --- v2.4.13/linux/arch/arm/tools/mach-types Tue Oct 23 22:48:49 2001 +++ linux/arch/arm/tools/mach-types Thu Oct 25 13:53:46 2001 @@ -6,7 +6,7 @@ # To add an entry into this database, please see Documentation/arm/README, # or contact rmk@arm.linux.org.uk # -# Last update: Fri Oct 5 18:40:53 2001 +# Last update: Mon Oct 22 09:49:06 2001 # # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number # @@ -114,7 +114,7 @@ gator SA1100_GATOR GATOR 103 granite ARCH_GRANITE GRANITE 104 consus SA1100_CONSUS CONSUS 105 -agilent_aaed2000 ARCH_AAEC2000_AAED2000 AAEC2000_AAED2000 106 +aaed2000 ARCH_AAED2000 AAED2000 106 cdb89712 ARCH_CDB89712 CDB89712 107 graphicsmaster SA1100_GRAPHICSMASTER GRAPHICSMASTER 108 adsbitsy SA1100_ADSBITSY ADSBITSY 109 @@ -131,3 +131,6 @@ bluestem SA1100_BLUESTEM BLUESTEM 120 xingu8 ARCH_XINGU8 XINGU8 121 bushstb ARCH_BUSHSTB BUSHSTB 122 +epsilon1 SA1100_EPSILON1 EPSILON1 123 +balloon SA1100_BALLOON BALLOON 124 +puppy ARCH_PUPPY PUPPY 125 diff -u --recursive --new-file v2.4.13/linux/arch/i386/config.in linux/arch/i386/config.in --- v2.4.13/linux/arch/i386/config.in Tue Oct 23 22:48:49 2001 +++ linux/arch/i386/config.in Fri Nov 2 17:46:47 2001 @@ -149,6 +149,7 @@ define_bool CONFIG_X86_USE_PPRO_CHECKSUM y fi tristate 'Toshiba Laptop support' CONFIG_TOSHIBA +tristate 'Dell Inspiron 8000 support' CONFIG_I8K tristate '/dev/cpu/microcode - Intel IA32 CPU microcode support' CONFIG_MICROCODE tristate '/dev/cpu/*/msr - Model-specific register support' CONFIG_X86_MSR diff -u --recursive --new-file v2.4.13/linux/arch/i386/defconfig linux/arch/i386/defconfig --- v2.4.13/linux/arch/i386/defconfig Tue Oct 23 22:48:49 2001 +++ linux/arch/i386/defconfig Mon Nov 5 15:24:04 2001 @@ -50,6 +50,7 @@ CONFIG_X86_PGE=y CONFIG_X86_USE_PPRO_CHECKSUM=y # CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set # CONFIG_MICROCODE is not set # CONFIG_X86_MSR is not set # CONFIG_X86_CPUID is not set @@ -84,6 +85,7 @@ # CONFIG_PCMCIA=y CONFIG_CARDBUS=y +# CONFIG_I82092 is not set # CONFIG_I82365 is not set # CONFIG_TCIC is not set CONFIG_SYSVIPC=y @@ -612,6 +614,7 @@ # CONFIG_RAMFS is not set CONFIG_ISO9660_FS=y # CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set # CONFIG_MINIX_FS is not set # CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set @@ -653,6 +656,8 @@ # CONFIG_NCPFS_SMALLDOS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set +# CONFIG_ZLIB_FS_INFLATE is not set # # Partition Types @@ -706,7 +711,6 @@ # CONFIG_USB_DEVICEFS is not set # CONFIG_USB_BANDWIDTH is not set # CONFIG_USB_LONG_TIMEOUT is not set -# CONFIG_USB_LARGE_CONFIG is not set # # USB Controllers diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/apic.c linux/arch/i386/kernel/apic.c --- v2.4.13/linux/arch/i386/kernel/apic.c Tue Oct 9 17:06:51 2001 +++ linux/arch/i386/kernel/apic.c Sat Oct 27 15:39:24 2001 @@ -588,6 +588,7 @@ goto no_apic; case X86_VENDOR_INTEL: if (boot_cpu_data.x86 == 6 || + (boot_cpu_data.x86 == 15 && cpu_has_apic) || (boot_cpu_data.x86 == 5 && cpu_has_apic)) break; goto no_apic; diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/entry.S linux/arch/i386/kernel/entry.S --- v2.4.13/linux/arch/i386/kernel/entry.S Tue Oct 23 22:48:49 2001 +++ linux/arch/i386/kernel/entry.S Fri Nov 2 17:18:49 2001 @@ -195,10 +195,10 @@ pushl %eax # save orig_eax SAVE_ALL GET_CURRENT(%ebx) - cmpl $(NR_syscalls),%eax - jae badsys testb $0x02,tsk_ptrace(%ebx) # PT_TRACESYS jne tracesys + cmpl $(NR_syscalls),%eax + jae badsys call *SYMBOL_NAME(sys_call_table)(,%eax,4) movl %eax,EAX(%esp) # save the return value ENTRY(ret_from_sys_call) diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/io_apic.c linux/arch/i386/kernel/io_apic.c --- v2.4.13/linux/arch/i386/kernel/io_apic.c Tue Oct 9 17:06:51 2001 +++ linux/arch/i386/kernel/io_apic.c Fri Nov 2 17:35:05 2001 @@ -750,12 +750,14 @@ ) UNEXPECTED_IO_APIC(); + printk(KERN_DEBUG "....... : PRQ implemented: %X\n", reg_01.PRQ); printk(KERN_DEBUG "....... : IO APIC version: %04X\n", reg_01.version); if ( (reg_01.version != 0x01) && /* 82489DX IO-APICs */ + (reg_01.version != 0x02) && /* 82801BA IO-APICs (ICH2) */ (reg_01.version != 0x10) && /* oldest IO-APICs */ (reg_01.version != 0x11) && /* Pentium/Pro IO-APICs */ (reg_01.version != 0x13) && /* Xeon IO-APICs */ - (reg_01.entries != 0x20) /* Intel P64H (82806 AA) */ + (reg_01.version != 0x20) /* Intel P64H (82806 AA) */ ) UNEXPECTED_IO_APIC(); if (reg_01.__reserved_1 || reg_01.__reserved_2) @@ -1237,14 +1239,17 @@ ack_APIC_irq(); if (!(v & (1 << (i & 0x1f)))) { +#ifdef APIC_LOCKUP_DEBUG + struct irq_pin_list *entry; +#endif + #ifdef APIC_MISMATCH_DEBUG atomic_inc(&irq_mis_count); #endif spin_lock(&ioapic_lock); __mask_and_edge_IO_APIC_irq(irq); #ifdef APIC_LOCKUP_DEBUG - for (;;) { - struct irq_pin_list *entry = irq_2_pin + irq; + for (entry = irq_2_pin + irq;;) { unsigned int reg; if (entry->pin == -1) diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/irq.c linux/arch/i386/kernel/irq.c --- v2.4.13/linux/arch/i386/kernel/irq.c Sun Sep 23 11:40:55 2001 +++ linux/arch/i386/kernel/irq.c Thu Oct 25 13:53:46 2001 @@ -512,6 +512,7 @@ if (!local_irq_count(smp_processor_id())) { do { barrier(); + cpu_relax(); } while (irq_desc[irq].status & IRQ_INPROGRESS); } } @@ -766,8 +767,10 @@ #ifdef CONFIG_SMP /* Wait to make sure it's not being used on another CPU */ - while (desc->status & IRQ_INPROGRESS) + while (desc->status & IRQ_INPROGRESS) { barrier(); + cpu_relax(); + } #endif kfree(action); return; diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/microcode.c linux/arch/i386/kernel/microcode.c --- v2.4.13/linux/arch/i386/kernel/microcode.c Tue Oct 23 22:48:49 2001 +++ linux/arch/i386/kernel/microcode.c Tue Oct 30 15:13:17 2001 @@ -47,6 +47,10 @@ * 1.08 11 Dec 2000, Richard Schaal and * Tigran Aivazian * Intel Pentium 4 processor support and bugfixes. + * 1.09 30 Oct 2001, Tigran Aivazian + * Bugfix for HT (Hyper-Threading) enabled processors + * whereby processor resources are shared by all logical processors + * in a single CPU package. */ #include @@ -61,7 +65,7 @@ #include #include -#define MICROCODE_VERSION "1.08" +#define MICROCODE_VERSION "1.09" MODULE_DESCRIPTION("Intel CPU (IA-32) microcode update driver"); MODULE_AUTHOR("Tigran Aivazian "); @@ -240,10 +244,6 @@ printk(KERN_ERR "microcode: CPU%d not 'upgrading' to earlier revision" " %d (current=%d)\n", cpu_num, microcode[i].rev, rev); - } else if (microcode[i].rev == rev) { - printk(KERN_ERR - "microcode: CPU%d already up-to-date (revision %d)\n", - cpu_num, rev); } else { int sum = 0; struct microcode *m = µcode[i]; diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/mtrr.c linux/arch/i386/kernel/mtrr.c --- v2.4.13/linux/arch/i386/kernel/mtrr.c Tue Oct 23 22:48:49 2001 +++ linux/arch/i386/kernel/mtrr.c Thu Oct 25 14:05:52 2001 @@ -473,25 +473,16 @@ unsigned long config, dummy; struct pci_dev *dev = NULL; - /* ServerWorks LE chipsets have problems with write-combining - Don't allow it and leave room for other chipsets to be tagged */ + /* ServerWorks LE chipsets have problems with write-combining + Don't allow it and leave room for other chipsets to be tagged */ - if ((dev = pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, NULL)) != NULL) { - switch(dev->vendor) { - case PCI_VENDOR_ID_SERVERWORKS: - switch (dev->device) { - case PCI_DEVICE_ID_SERVERWORKS_LE: + if ((dev = pci_find_class(PCI_CLASS_BRIDGE_HOST << 8, NULL)) != NULL) { + if ((dev->vendor == PCI_VENDOR_ID_SERVERWORKS) && + (dev->device == PCI_DEVICE_ID_SERVERWORKS_LE)) { + printk (KERN_INFO "mtrr: Serverworks LE detected. Write-combining disabled.\n"); return 0; - break; - default: - break; - } - break; - default: - break; + } } - } - switch ( mtrr_if ) { diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/pci-i386.c linux/arch/i386/kernel/pci-i386.c --- v2.4.13/linux/arch/i386/kernel/pci-i386.c Sat May 19 18:07:04 2001 +++ linux/arch/i386/kernel/pci-i386.c Sun Nov 4 09:31:58 2001 @@ -12,7 +12,7 @@ * Hannover, Germany * hm@ix.de * - * Copyright 1997--2000 Martin Mares + * Copyright 1997--2000 Martin Mares * * For more information, please consult the following manuals (look at * http://www.pcisig.com/ for how to get them): diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/pci-irq.c linux/arch/i386/kernel/pci-irq.c --- v2.4.13/linux/arch/i386/kernel/pci-irq.c Tue Oct 23 22:48:49 2001 +++ linux/arch/i386/kernel/pci-irq.c Sun Nov 4 09:31:58 2001 @@ -1,7 +1,7 @@ /* * Low-Level PCI Support for PC -- Routing of Interrupts * - * (c) 1999--2000 Martin Mares + * (c) 1999--2000 Martin Mares */ #include diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/pci-pc.c linux/arch/i386/kernel/pci-pc.c --- v2.4.13/linux/arch/i386/kernel/pci-pc.c Tue Oct 9 17:06:51 2001 +++ linux/arch/i386/kernel/pci-pc.c Sun Nov 4 09:31:58 2001 @@ -1,7 +1,7 @@ /* * Low-Level PCI Support for PC * - * (c) 1999--2000 Martin Mares + * (c) 1999--2000 Martin Mares */ #include @@ -521,7 +521,7 @@ DBG("PCI: BIOS probe returned s=%02x hw=%02x ver=%02x.%02x l=%02x\n", status, hw_mech, major_ver, minor_ver, pcibios_last_bus); if (status || signature != PCI_SIGNATURE) { - printk (KERN_ERR "PCI: BIOS BUG #%x[%08x] found, report to \n", + printk (KERN_ERR "PCI: BIOS BUG #%x[%08x] found\n", status, signature); return 0; } @@ -773,7 +773,7 @@ if (sum != 0) continue; if (check->fields.revision != 0) { - printk("PCI: unsupported BIOS32 revision %d at 0x%p, report to \n", + printk("PCI: unsupported BIOS32 revision %d at 0x%p\n", check->fields.revision, check); continue; } diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/pci-visws.c linux/arch/i386/kernel/pci-visws.c --- v2.4.13/linux/arch/i386/kernel/pci-visws.c Thu Jun 22 07:17:16 2000 +++ linux/arch/i386/kernel/pci-visws.c Sun Nov 4 09:31:58 2001 @@ -1,7 +1,7 @@ /* * Low-Level PCI Support for SGI Visual Workstation * - * (c) 1999--2000 Martin Mares + * (c) 1999--2000 Martin Mares */ #include diff -u --recursive --new-file v2.4.13/linux/arch/i386/kernel/setup.c linux/arch/i386/kernel/setup.c --- v2.4.13/linux/arch/i386/kernel/setup.c Tue Oct 23 22:48:49 2001 +++ linux/arch/i386/kernel/setup.c Thu Oct 25 13:53:46 2001 @@ -229,8 +229,7 @@ #define SIO_PM_GP_EN 0x80 -static void -visws_get_board_type_and_rev(void) +static void __init visws_get_board_type_and_rev(void) { int raw; @@ -402,7 +401,7 @@ } } -void __init add_memory_region(unsigned long long start, +static void __init add_memory_region(unsigned long long start, unsigned long long size, int type) { int x = e820.nr_map; @@ -667,7 +666,7 @@ */ #define LOWMEMSIZE() (0x9f000) -void __init setup_memory_region(void) +static void __init setup_memory_region(void) { char *who = "BIOS-e820"; @@ -699,7 +698,7 @@ } /* setup_memory_region */ -static inline void parse_mem_cmdline (char ** cmdline_p) +static void __init parse_mem_cmdline (char ** cmdline_p) { char c = ' ', *to = command_line, *from = COMMAND_LINE; int len = 0; @@ -1263,11 +1262,11 @@ /* * Read Cyrix DEVID registers (DIR) to get more detailed info. about the CPU */ -static void do_cyrix_devid(unsigned char *dir0, unsigned char *dir1) +static void __init do_cyrix_devid(unsigned char *dir0, unsigned char *dir1) { unsigned char ccr2, ccr3; unsigned long flags; - + /* we test for DEVID by checking whether CCR3 is writable */ local_irq_save(flags); ccr3 = getCx86(CX86_CCR3); @@ -1303,7 +1302,7 @@ * Actually since bugs.h doesnt even reference this perhaps someone should * fix the documentation ??? */ -unsigned char Cx86_dir0_msb __initdata = 0; +static unsigned char Cx86_dir0_msb __initdata = 0; static char Cx86_model[][9] __initdata = { "Cx486", "Cx486", "5x86 ", "6x86", "MediaGX ", "6x86MX ", @@ -1336,7 +1335,7 @@ static void __init check_cx686_slop(struct cpuinfo_x86 *c) { unsigned long flags; - + if (Cx86_dir0_msb == 3) { unsigned char ccr3, ccr5; @@ -1503,6 +1502,248 @@ return; } +#ifdef CONFIG_X86_OOSTORE + +static u32 __init power2(u32 x) +{ + u32 s=1; + while(s<=x) + s<<=1; + return s>>=1; +} + +/* + * Set up an actual MCR + */ + +static void __init winchip_mcr_insert(int reg, u32 base, u32 size, int key) +{ + u32 lo, hi; + + hi = base & ~0xFFF; + lo = ~(size-1); /* Size is a power of 2 so this makes a mask */ + lo &= ~0xFFF; /* Remove the ctrl value bits */ + lo |= key; /* Attribute we wish to set */ + wrmsr(reg+MSR_IDT_MCR0, lo, hi); + mtrr_centaur_report_mcr(reg, lo, hi); /* Tell the mtrr driver */ +} + +/* + * Figure what we can cover with MCR's + * + * Shortcut: We know you can't put 4Gig of RAM on a winchip + */ + +static u32 __init ramtop(void) /* 16388 */ +{ + int i; + u32 top = 0; + u32 clip = 0xFFFFFFFFUL; + + for (i = 0; i < e820.nr_map; i++) { + unsigned long start, end; + + if (e820.map[i].addr > 0xFFFFFFFFUL) + continue; + /* + * Don't MCR over reserved space. Ignore the ISA hole + * we frob around that catastrophy already + */ + + if (e820.map[i].type == E820_RESERVED) + { + if(e820.map[i].addr >= 0x100000UL && e820.map[i].addr < clip) + clip = e820.map[i].addr; + continue; + } + start = e820.map[i].addr; + end = e820.map[i].addr + e820.map[i].size; + if (start >= end) + continue; + if (end > top) + top = end; + } + /* Everything below 'top' should be RAM except for the ISA hole. + Because of the limited MCR's we want to map NV/ACPI into our + MCR range for gunk in RAM + + Clip might cause us to MCR insufficient RAM but that is an + acceptable failure mode and should only bite obscure boxes with + a VESA hole at 15Mb + + The second case Clip sometimes kicks in is when the EBDA is marked + as reserved. Again we fail safe with reasonable results + */ + + if(top>clip) + top=clip; + + return top; +} + +/* + * Compute a set of MCR's to give maximum coverage + */ + +static int __init winchip_mcr_compute(int nr, int key) +{ + u32 mem = ramtop(); + u32 root = power2(mem); + u32 base = root; + u32 top = root; + u32 floor = 0; + int ct = 0; + + while(ct high && fspace > low) + { + winchip_mcr_insert(ct, floor, fspace, key); + floor += fspace; + } + else if(high > low) + { + winchip_mcr_insert(ct, top, high, key); + top += high; + } + else if(low > 0) + { + base -= low; + winchip_mcr_insert(ct, base, low, key); + } + else break; + ct++; + } + /* + * We loaded ct values. We now need to set the mask. The caller + * must do this bit. + */ + + return ct; +} + +static void __init winchip_create_optimal_mcr(void) +{ + int i; + /* + * Allocate up to 6 mcrs to mark as much of ram as possible + * as write combining and weak write ordered. + * + * To experiment with: Linux never uses stack operations for + * mmio spaces so we could globally enable stack operation wc + * + * Load the registers with type 31 - full write combining, all + * writes weakly ordered. + */ + int used = winchip_mcr_compute(6, 31); + + /* + * Wipe unused MCRs + */ + + for(i=used;i<8;i++) + wrmsr(MSR_IDT_MCR0+i, 0, 0); +} + +static void __init winchip2_create_optimal_mcr(void) +{ + u32 lo, hi; + int i; + + /* + * Allocate up to 6 mcrs to mark as much of ram as possible + * as write combining, weak store ordered. + * + * Load the registers with type 25 + * 8 - weak write ordering + * 16 - weak read ordering + * 1 - write combining + */ + + int used = winchip_mcr_compute(6, 25); + + /* + * Mark the registers we are using. + */ + + rdmsr(MSR_IDT_MCR_CTRL, lo, hi); + for(i=0;i>17) & 7; + lo |= key<<6; /* replace with unlock key */ + wrmsr(MSR_IDT_MCR_CTRL, lo, hi); +} + +static void __init winchip2_protect_mcr(void) +{ + u32 lo, hi; + + rdmsr(MSR_IDT_MCR_CTRL, lo, hi); + lo&=~0x1C0; /* blank bits 8-6 */ + wrmsr(MSR_IDT_MCR_CTRL, lo, hi); +} + +#endif + static void __init init_centaur(struct cpuinfo_x86 *c) { enum { @@ -1546,6 +1787,19 @@ fcr_clr=DPDC; printk(KERN_NOTICE "Disabling bugged TSC.\n"); clear_bit(X86_FEATURE_TSC, &c->x86_capability); +#ifdef CONFIG_X86_OOSTORE + winchip_create_optimal_mcr(); + /* Enable + write combining on non-stack, non-string + write combining on string, all types + weak write ordering + + The C6 original lacks weak read order + + Note 0x120 is write only on Winchip 1 */ + + wrmsr(MSR_IDT_MCR_CTRL, 0x01F0001F, 0); +#endif break; case 8: switch(c->x86_mask) { @@ -1561,11 +1815,37 @@ } fcr_set=ECX8|DSMC|DTLOCK|EMMX|EBRPRED|ERETSTK|E2MMX|EAMD3D; fcr_clr=DPDC; +#ifdef CONFIG_X86_OOSTORE + winchip2_unprotect_mcr(); + winchip2_create_optimal_mcr(); + rdmsr(MSR_IDT_MCR_CTRL, lo, hi); + /* Enable + write combining on non-stack, non-string + write combining on string, all types + weak write ordering + */ + lo|=31; + wrmsr(MSR_IDT_MCR_CTRL, lo, hi); + winchip2_protect_mcr(); +#endif break; case 9: name="3"; fcr_set=ECX8|DSMC|DTLOCK|EMMX|EBRPRED|ERETSTK|E2MMX|EAMD3D; fcr_clr=DPDC; +#ifdef CONFIG_X86_OOSTORE + winchip2_unprotect_mcr(); + winchip2_create_optimal_mcr(); + rdmsr(MSR_IDT_MCR_CTRL, lo, hi); + /* Enable + write combining on non-stack, non-string + write combining on string, all types + weak write ordering + */ + lo|=31; + wrmsr(MSR_IDT_MCR_CTRL, lo, hi); + winchip2_protect_mcr(); +#endif break; case 10: name="4"; diff -u --recursive --new-file v2.4.13/linux/arch/ppc/8260_io/commproc.c linux/arch/ppc/8260_io/commproc.c --- v2.4.13/linux/arch/ppc/8260_io/commproc.c Mon May 21 17:04:46 2001 +++ linux/arch/ppc/8260_io/commproc.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.commproc.c 1.5 05/17/01 18:14:19 cort + * BK Id: SCCS/s.commproc.c 1.10 10/16/01 16:21:52 trini */ /* @@ -137,7 +137,7 @@ * Baud rate clocks are zero-based in the driver code (as that maps * to port numbers). Documentation uses 1-based numbering. */ -#define BRG_INT_CLK (((bd_t *)__res)->bi_brgfreq * 1000000) +#define BRG_INT_CLK (((bd_t *)__res)->bi_brgfreq) #define BRG_UART_CLK (BRG_INT_CLK/16) /* This function is used by UARTS, or anything else that uses a 16x @@ -169,8 +169,6 @@ { volatile uint *bp; - /* This is good enough to get SMCs running..... - */ if (brg < 4) { bp = (uint *)&immr->im_brgc1; } diff -u --recursive --new-file v2.4.13/linux/arch/ppc/8xx_io/commproc.c linux/arch/ppc/8xx_io/commproc.c --- v2.4.13/linux/arch/ppc/8xx_io/commproc.c Tue Oct 9 17:06:51 2001 +++ linux/arch/ppc/8xx_io/commproc.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.commproc.c 1.13 09/14/01 18:01:16 trini + * BK Id: SCCS/s.commproc.c 1.15 10/16/01 16:21:52 trini */ /* @@ -38,6 +38,8 @@ #include #include +extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep); + static uint dp_alloc_base; /* Starting offset in DP ram */ static uint dp_alloc_top; /* Max offset + 1 */ static uint host_buffer; /* One page of host buffer */ @@ -64,6 +66,18 @@ imp = (immap_t *)IMAP_ADDR; commproc = (cpm8xx_t *)&imp->im_cpm; +#ifdef CONFIG_UCODE_PATCH + /* Perform a reset. + */ + commproc->cp_cpcr = (CPM_CR_RST | CPM_CR_FLG); + + /* Wait for it. + */ + while (commproc->cp_cpcr & CPM_CR_FLG); + + cpm_load_patch(imp); +#endif + /* Set SDMA Bus Request priority 5. * On 860T, this also enables FEC priority 6. I am not sure * this is what we realy want for some applications, but the @@ -81,9 +95,17 @@ */ host_buffer = host_page_addr; /* Host virtual page address */ host_end = host_page_addr + PAGE_SIZE; - pte = va_to_pte(host_page_addr); - pte_val(*pte) |= _PAGE_NO_CACHE; - flush_tlb_page(init_mm.mmap, host_buffer); + + /* We need to get this page early, so I have to do it the + * hard way. + */ + if (get_pteptr(&init_mm, host_page_addr, &pte)) { + pte_val(*pte) |= _PAGE_NO_CACHE; + flush_tlb_page(init_mm.mmap, host_buffer); + } + else { + panic("Huh? No CPM host page?"); + } /* Tell everyone where the comm processor resides. */ diff -u --recursive --new-file v2.4.13/linux/arch/ppc/8xx_io/uart.c linux/arch/ppc/8xx_io/uart.c --- v2.4.13/linux/arch/ppc/8xx_io/uart.c Tue Oct 9 17:06:51 2001 +++ linux/arch/ppc/8xx_io/uart.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.uart.c 1.16 09/14/01 18:01:17 trini + * BK Id: SCCS/s.uart.c 1.19 10/26/01 09:59:32 trini */ /* * UART driver for MPC860 CPM SCC or SMC @@ -94,10 +94,10 @@ static int serial_refcount; static int serial_console_setup(struct console *co, char *options); -static int serial_console_wait_key(struct console *co); static void serial_console_write(struct console *c, const char *s, unsigned count); static kdev_t serial_console_device(struct console *c); +static int serial_console_wait_key(struct console *co); #if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) static unsigned long break_pressed; /* break, really ... */ @@ -481,7 +481,9 @@ tty->flip.count++; } +#if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) ignore_char: +#endif /* This BD is ready to be used again. Clear status. * Get next BD. */ @@ -876,7 +878,7 @@ static void change_speed(ser_info_t *info) { int baud_rate; - unsigned cflag, cval, scval, prev_mode; + unsigned cflag, cval, scval, prev_mode, new_mode; int i, bits, sbits, idx; unsigned long flags; struct serial_state *state; @@ -917,10 +919,10 @@ cval |= SMCMR_PEN; scval |= SCU_PMSR_PEN; bits++; - } - if (!(cflag & PARODD)) { - cval |= SMCMR_PM_EVEN; - scval |= (SCU_PMSR_REVP | SCU_PMSR_TEVP); + if (!(cflag & PARODD)) { + cval |= SMCMR_PM_EVEN; + scval |= (SCU_PMSR_REVP | SCU_PMSR_TEVP); + } } /* Determine divisor based on baud rate */ @@ -993,7 +995,13 @@ idx = PORT_NUM(state->smc_scc_num); if (state->smc_scc_num & NUM_IS_SCC) { sccp = &cpmp->cp_scc[idx]; - sccp->scc_pmsr = (sbits << 12) | scval; + new_mode = (sbits << 12) | scval; + prev_mode = sccp->scc_pmsr; + if (!(prev_mode & SCU_PMSR_PEN)) + /* If parity is disabled, mask out even/odd */ + prev_mode &= ~(SCU_PMSR_TPM|SCU_PMSR_RPM); + if (prev_mode != new_mode) + sccp->scc_pmsr = new_mode; } else { smcp = &cpmp->cp_smc[idx]; @@ -1003,8 +1011,13 @@ * present. */ prev_mode = smcp->smc_smcmr; - smcp->smc_smcmr = smcr_mk_clen(bits) | cval | SMCMR_SM_UART; - smcp->smc_smcmr |= (prev_mode & (SMCMR_REN | SMCMR_TEN)); + new_mode = smcr_mk_clen(bits) | cval | SMCMR_SM_UART; + new_mode |= (prev_mode & (SMCMR_REN | SMCMR_TEN)); + if (!(prev_mode & SMCMR_PEN)) + /* If parity is disabled, mask out even/odd */ + prev_mode &= ~SMCMR_PM_EVEN; + if (prev_mode != new_mode) + smcp->smc_smcmr = new_mode; } m8xx_cpm_setbrg((state - rs_table), baud_rate); diff -u --recursive --new-file v2.4.13/linux/arch/ppc/config.in linux/arch/ppc/config.in --- v2.4.13/linux/arch/ppc/config.in Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/config.in Fri Nov 2 17:43:54 2001 @@ -1,4 +1,4 @@ -# BK Id: SCCS/s.config.in 1.40 08/24/01 20:31:47 paulus +# BK Id: SCCS/s.config.in 1.43 10/16/01 15:18:50 trini # # For a description of the syntax of this configuration file, # see Documentation/kbuild/config-language.txt. @@ -46,6 +46,8 @@ if [ "$CONFIG_6xx" = "y" -o "$CONFIG_POWER3" = "y" -o \ "$CONFIG_POWER4" = "y" ]; then define_bool CONFIG_PPC_STD_MMU y +else + define_bool CONFIG_PPC_STD_MMU n fi if [ "$CONFIG_8260" = "y" ]; then @@ -66,6 +68,7 @@ "RPX-Lite CONFIG_RPXLITE \ RPX-Classic CONFIG_RPXCLASSIC \ BSE-IP CONFIG_BSEIP \ + FADS CONFIG_FADS \ TQM823L CONFIG_TQM823L \ TQM850L CONFIG_TQM850L \ TQM855L CONFIG_TQM855L \ @@ -74,6 +77,7 @@ TQM860 CONFIG_TQM860 \ SPD823TS CONFIG_SPD823TS \ IVMS8 CONFIG_IVMS8 \ + IVML24 CONFIG_IVML24 \ SM850 CONFIG_SM850 \ MBX CONFIG_MBX \ WinCept CONFIG_WINCEPT" RPX-Lite @@ -95,12 +99,7 @@ Synergy-Gemini CONFIG_GEMINI" CHRP/PowerMac/PReP fi -if [ "$CONFIG_PPC64BRIDGE" != "y" ]; then - bool 'Workarounds for PPC601 bugs' CONFIG_PPC601_SYNC_FIX -fi - -if [ "$CONFIG_POWER3" = "n" -a "$CONFIG_POWER4" = "n" -a \ - "$CONFIG_6xx" = "n" ]; then +if [ "$CONFIG_PPC_STD_MMU" != "y" ]; then define_bool CONFIG_ALL_PPC n fi @@ -183,6 +182,10 @@ else bool 'Generic /dev/rtc emulation' CONFIG_GEN_RTC fi +fi + +if [ "$CONFIG_ALL_PPC" = "y" -a "$CONFIG_POWER3" = "n" ] ; then + bool 'Workarounds for PPC601 bugs' CONFIG_PPC601_SYNC_FIX fi if [ "$CONFIG_ALL_PPC" = "y" ]; then diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/IVMS8_defconfig linux/arch/ppc/configs/IVMS8_defconfig --- v2.4.13/linux/arch/ppc/configs/IVMS8_defconfig Tue Oct 9 17:06:51 2001 +++ linux/arch/ppc/configs/IVMS8_defconfig Fri Nov 2 17:43:54 2001 @@ -27,10 +27,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y # CONFIG_RPXLITE is not set # CONFIG_RPXCLASSIC is not set # CONFIG_BSEIP is not set +# CONFIG_FADS is not set # CONFIG_TQM823L is not set # CONFIG_TQM850L is not set # CONFIG_TQM855L is not set @@ -39,10 +41,10 @@ # CONFIG_TQM860 is not set # CONFIG_SPD823TS is not set CONFIG_IVMS8=y +# CONFIG_IVML24 is not set # CONFIG_SM850 is not set # CONFIG_MBX is not set # CONFIG_WINCEPT is not set -# CONFIG_PPC601_SYNC_FIX is not set # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -85,7 +87,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -138,6 +139,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -237,7 +239,6 @@ # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -372,7 +373,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -491,12 +491,108 @@ CONFIG_8xx_COPYBACK=y # CONFIG_8xx_CPU6 is not set # CONFIG_UCODE_PATCH is not set -CONFIG_BLK_DEV_MPC8xx_IDE=y # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/SM850_defconfig linux/arch/ppc/configs/SM850_defconfig --- v2.4.13/linux/arch/ppc/configs/SM850_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/SM850_defconfig Fri Nov 2 17:43:54 2001 @@ -27,10 +27,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y # CONFIG_RPXLITE is not set # CONFIG_RPXCLASSIC is not set # CONFIG_BSEIP is not set +# CONFIG_FADS is not set # CONFIG_TQM823L is not set # CONFIG_TQM850L is not set # CONFIG_TQM855L is not set @@ -39,11 +41,11 @@ # CONFIG_TQM860 is not set # CONFIG_SPD823TS is not set # CONFIG_IVMS8 is not set +# CONFIG_IVML24 is not set CONFIG_SM850=y # CONFIG_MBX is not set # CONFIG_WINCEPT is not set CONFIG_TQM8xxL=y -# CONFIG_PPC601_SYNC_FIX is not set # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -86,7 +88,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -111,6 +112,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -138,6 +140,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -191,12 +194,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -214,9 +214,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -277,6 +277,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -306,7 +310,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -323,7 +331,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -356,6 +363,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -444,11 +452,109 @@ # CONFIG_8xx_COPYBACK=y CONFIG_8xx_CPU6=y +# CONFIG_UCODE_PATCH is not set # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/SPD823TS_defconfig linux/arch/ppc/configs/SPD823TS_defconfig --- v2.4.13/linux/arch/ppc/configs/SPD823TS_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/SPD823TS_defconfig Fri Nov 2 17:43:54 2001 @@ -27,10 +27,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y # CONFIG_RPXLITE is not set # CONFIG_RPXCLASSIC is not set # CONFIG_BSEIP is not set +# CONFIG_FADS is not set # CONFIG_TQM823L is not set # CONFIG_TQM850L is not set # CONFIG_TQM855L is not set @@ -39,10 +41,10 @@ # CONFIG_TQM860 is not set CONFIG_SPD823TS=y # CONFIG_IVMS8 is not set +# CONFIG_IVML24 is not set # CONFIG_SM850 is not set # CONFIG_MBX is not set # CONFIG_WINCEPT is not set -# CONFIG_PPC601_SYNC_FIX is not set # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -85,7 +87,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -110,6 +111,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -137,6 +139,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -190,12 +193,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -213,9 +213,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -276,6 +276,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -305,7 +309,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -322,7 +330,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -355,6 +362,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -443,11 +451,109 @@ # CONFIG_8xx_COPYBACK=y # CONFIG_8xx_CPU6 is not set +# CONFIG_UCODE_PATCH is not set # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/TQM823L_defconfig linux/arch/ppc/configs/TQM823L_defconfig --- v2.4.13/linux/arch/ppc/configs/TQM823L_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/TQM823L_defconfig Fri Nov 2 17:43:54 2001 @@ -27,10 +27,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y # CONFIG_RPXLITE is not set # CONFIG_RPXCLASSIC is not set # CONFIG_BSEIP is not set +# CONFIG_FADS is not set CONFIG_TQM823L=y # CONFIG_TQM850L is not set # CONFIG_TQM855L is not set @@ -39,11 +41,11 @@ # CONFIG_TQM860 is not set # CONFIG_SPD823TS is not set # CONFIG_IVMS8 is not set +# CONFIG_IVML24 is not set # CONFIG_SM850 is not set # CONFIG_MBX is not set # CONFIG_WINCEPT is not set CONFIG_TQM8xxL=y -# CONFIG_PPC601_SYNC_FIX is not set # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -86,7 +88,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -111,6 +112,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -138,6 +140,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -191,12 +194,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -214,9 +214,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -277,6 +277,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -306,7 +310,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -323,7 +331,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -356,6 +363,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -444,11 +452,109 @@ # CONFIG_8xx_COPYBACK=y # CONFIG_8xx_CPU6 is not set +# CONFIG_UCODE_PATCH is not set # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/TQM850L_defconfig linux/arch/ppc/configs/TQM850L_defconfig --- v2.4.13/linux/arch/ppc/configs/TQM850L_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/TQM850L_defconfig Fri Nov 2 17:43:54 2001 @@ -27,10 +27,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y # CONFIG_RPXLITE is not set # CONFIG_RPXCLASSIC is not set # CONFIG_BSEIP is not set +# CONFIG_FADS is not set # CONFIG_TQM823L is not set CONFIG_TQM850L=y # CONFIG_TQM855L is not set @@ -39,11 +41,11 @@ # CONFIG_TQM860 is not set # CONFIG_SPD823TS is not set # CONFIG_IVMS8 is not set +# CONFIG_IVML24 is not set # CONFIG_SM850 is not set # CONFIG_MBX is not set # CONFIG_WINCEPT is not set CONFIG_TQM8xxL=y -# CONFIG_PPC601_SYNC_FIX is not set # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -86,7 +88,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -111,6 +112,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -138,6 +140,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -191,12 +194,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -214,9 +214,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -277,6 +277,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -306,7 +310,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -323,7 +331,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -356,6 +363,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -444,11 +452,109 @@ # CONFIG_8xx_COPYBACK=y CONFIG_8xx_CPU6=y +# CONFIG_UCODE_PATCH is not set # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/TQM860L_defconfig linux/arch/ppc/configs/TQM860L_defconfig --- v2.4.13/linux/arch/ppc/configs/TQM860L_defconfig Tue Oct 9 17:06:51 2001 +++ linux/arch/ppc/configs/TQM860L_defconfig Fri Nov 2 17:43:54 2001 @@ -27,10 +27,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y # CONFIG_RPXLITE is not set # CONFIG_RPXCLASSIC is not set # CONFIG_BSEIP is not set +# CONFIG_FADS is not set # CONFIG_TQM823L is not set # CONFIG_TQM850L is not set # CONFIG_TQM855L is not set @@ -39,11 +41,11 @@ # CONFIG_TQM860 is not set # CONFIG_SPD823TS is not set # CONFIG_IVMS8 is not set +# CONFIG_IVML24 is not set # CONFIG_SM850 is not set # CONFIG_MBX is not set # CONFIG_WINCEPT is not set CONFIG_TQM8xxL=y -# CONFIG_PPC601_SYNC_FIX is not set # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -86,7 +88,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -139,6 +140,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -238,7 +240,6 @@ # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -373,7 +374,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -500,12 +500,108 @@ CONFIG_8xx_COPYBACK=y # CONFIG_8xx_CPU6 is not set # CONFIG_UCODE_PATCH is not set -CONFIG_BLK_DEV_MPC8xx_IDE=y # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/apus_defconfig linux/arch/ppc/configs/apus_defconfig --- v2.4.13/linux/arch/ppc/configs/apus_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/apus_defconfig Fri Nov 2 17:43:54 2001 @@ -32,7 +32,6 @@ # CONFIG_ALL_PPC is not set CONFIG_APUS=y # CONFIG_GEMINI is not set -# CONFIG_PPC601_SYNC_FIX is not set # CONFIG_SMP is not set # CONFIG_ALTIVEC is not set # CONFIG_TAU is not set @@ -105,7 +104,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -133,6 +131,7 @@ CONFIG_MD_RAID0=m CONFIG_MD_RAID1=m CONFIG_MD_RAID5=m +# CONFIG_MD_MULTIPATH is not set CONFIG_BLK_DEV_LVM=m # @@ -161,6 +160,7 @@ # CONFIG_IP_NF_CONNTRACK=m CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_IRC=m CONFIG_IP_NF_QUEUE=m CONFIG_IP_NF_IPTABLES=m CONFIG_IP_NF_MATCH_LIMIT=m @@ -168,6 +168,8 @@ CONFIG_IP_NF_MATCH_MARK=m CONFIG_IP_NF_MATCH_MULTIPORT=m CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_LENGTH=m +CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_MATCH_TCPMSS=m CONFIG_IP_NF_MATCH_STATE=m CONFIG_IP_NF_MATCH_UNCLEAN=m @@ -179,6 +181,8 @@ CONFIG_IP_NF_NAT_NEEDED=y CONFIG_IP_NF_TARGET_MASQUERADE=m CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_NAT_IRC=m CONFIG_IP_NF_NAT_FTP=m CONFIG_IP_NF_MANGLE=m CONFIG_IP_NF_TARGET_TOS=m @@ -191,6 +195,7 @@ # CONFIG_IPV6 is not set CONFIG_KHTTPD=m # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -261,6 +266,9 @@ # CONFIG_IDEDMA_AUTO is not set # CONFIG_DMA_NONPCI is not set # CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set # # SCSI support @@ -298,6 +306,7 @@ # CONFIG_SCSI_AHA1740 is not set # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set @@ -334,8 +343,6 @@ # CONFIG_SCSI_T128 is not set # CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_MESH is not set -# CONFIG_SCSI_MAC53C94 is not set CONFIG_A3000_SCSI=y CONFIG_A4000T_SCSI=y CONFIG_A2091_SCSI=y @@ -374,12 +381,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set CONFIG_ARIADNE=y CONFIG_NE2K_ZORRO=y CONFIG_A2065=y @@ -403,9 +407,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -496,14 +500,13 @@ # CONFIG_FB_IMSTT is not set # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set -# CONFIG_FB_PVR2 is not set -# CONFIG_FB_PVR2_DEBUG is not set -# CONFIG_FB_E1355 is not set # CONFIG_FB_MATROX is not set # CONFIG_FB_ATY is not set +# CONFIG_FB_RADEON is not set # CONFIG_FB_ATY128 is not set -# CONFIG_FB_3DFX is not set # CONFIG_FB_SIS is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VIRTUAL is not set CONFIG_FBCON_ADVANCED=y # CONFIG_FBCON_MFB is not set @@ -582,11 +585,38 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set # -# Input core support is needed for joysticks +# Joysticks # +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set +# CONFIG_INPUT_AMIJOY is not set # CONFIG_QIC02_TAPE is not set # @@ -599,7 +629,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -632,6 +661,7 @@ CONFIG_VFAT_FS=y # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set CONFIG_CRAMFS=y CONFIG_TMPFS=y CONFIG_RAMFS=m @@ -804,6 +834,104 @@ # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +# CONFIG_USB_HID is not set +# CONFIG_USB_HIDDEV is not set +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/bseip_defconfig linux/arch/ppc/configs/bseip_defconfig --- v2.4.13/linux/arch/ppc/configs/bseip_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/bseip_defconfig Fri Nov 2 17:43:54 2001 @@ -25,10 +25,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y # CONFIG_RPXLITE is not set # CONFIG_RPXCLASSIC is not set CONFIG_BSEIP=y +# CONFIG_FADS is not set # CONFIG_TQM823L is not set # CONFIG_TQM850L is not set # CONFIG_TQM855L is not set @@ -37,10 +39,10 @@ # CONFIG_TQM860 is not set # CONFIG_SPD823TS is not set # CONFIG_IVMS8 is not set +# CONFIG_IVML24 is not set # CONFIG_SM850 is not set # CONFIG_MBX is not set # CONFIG_WINCEPT is not set -CONFIG_PPC601_SYNC_FIX=y # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -83,7 +85,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -109,6 +110,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -137,6 +139,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -190,12 +193,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -213,9 +213,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -276,6 +276,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -305,7 +309,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -322,7 +330,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -355,6 +362,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -443,11 +451,109 @@ # CONFIG_8xx_COPYBACK=y # CONFIG_8xx_CPU6 is not set +# CONFIG_UCODE_PATCH is not set # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/common_defconfig linux/arch/ppc/configs/common_defconfig --- v2.4.13/linux/arch/ppc/configs/common_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/common_defconfig Fri Nov 2 17:43:54 2001 @@ -32,7 +32,6 @@ CONFIG_ALL_PPC=y # CONFIG_APUS is not set # CONFIG_GEMINI is not set -CONFIG_PPC601_SYNC_FIX=y # CONFIG_SMP is not set CONFIG_ALTIVEC=y CONFIG_TAU=y @@ -69,6 +68,7 @@ # # CONFIG_PARPORT is not set CONFIG_PPC_RTC=y +CONFIG_PPC601_SYNC_FIX=y CONFIG_PROC_DEVICETREE=y CONFIG_PPC_RTAS=y CONFIG_BOOTX_TEXT=y @@ -86,7 +86,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -112,6 +111,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -141,6 +141,7 @@ # CONFIG_IP_NF_CONNTRACK=m CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_IRC=m # CONFIG_IP_NF_QUEUE is not set CONFIG_IP_NF_IPTABLES=m CONFIG_IP_NF_MATCH_LIMIT=m @@ -148,6 +149,8 @@ CONFIG_IP_NF_MATCH_MARK=m CONFIG_IP_NF_MATCH_MULTIPORT=m CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_LENGTH=m +CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_MATCH_TCPMSS=m CONFIG_IP_NF_MATCH_STATE=m CONFIG_IP_NF_MATCH_UNCLEAN=m @@ -159,6 +162,8 @@ CONFIG_IP_NF_NAT_NEEDED=y CONFIG_IP_NF_TARGET_MASQUERADE=m CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_NAT_IRC=m CONFIG_IP_NF_NAT_FTP=m # CONFIG_IP_NF_MANGLE is not set # CONFIG_IP_NF_TARGET_LOG is not set @@ -169,6 +174,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -272,6 +278,9 @@ # CONFIG_IDEDMA_IVB is not set # CONFIG_DMA_NONPCI is not set CONFIG_BLK_DEV_IDE_MODES=y +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set # # SCSI support @@ -315,7 +324,8 @@ # CONFIG_AIC7XXX_OLD_TCQ_ON_BY_DEFAULT is not set CONFIG_AIC7XXX_OLD_CMDS_PER_DEVICE=8 CONFIG_AIC7XXX_OLD_PROC_STATS=y -CONFIG_SCSI_ADVANSYS=y +# CONFIG_SCSI_DPT_I2O is not set +CONFIG_SCSI_ADVANSYS=m # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set # CONFIG_SCSI_MEGARAID is not set @@ -389,13 +399,10 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set CONFIG_MACE=y # CONFIG_MACE_AAUI_PORT is not set CONFIG_BMAC=y CONFIG_GMAC=y -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_HAPPYMEAL is not set # CONFIG_SUNBMAC is not set @@ -426,6 +433,7 @@ # CONFIG_NE2K_PCI is not set # CONFIG_NE3210 is not set # CONFIG_ES3210 is not set +# CONFIG_8139CP is not set # CONFIG_8139TOO is not set # CONFIG_8139TOO_PIO is not set # CONFIG_8139TOO_TUNE_TWISTER is not set @@ -442,9 +450,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -464,7 +472,18 @@ # # Wireless LAN (non-hamradio) # -# CONFIG_NET_RADIO is not set +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +# CONFIG_WAVELAN is not set +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set +# CONFIG_AIRONET4500_NONCS is not set +# CONFIG_AIRONET4500_PROC is not set +# CONFIG_AIRO is not set +CONFIG_HERMES=m +CONFIG_APPLE_AIRPORT=m +# CONFIG_PLX_HERMES is not set +CONFIG_NET_WIRELESS=y # # Token Ring devices @@ -521,9 +540,6 @@ CONFIG_FB_IMSTT=y # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set -# CONFIG_FB_PVR2 is not set -# CONFIG_FB_PVR2_DEBUG is not set -# CONFIG_FB_E1355 is not set CONFIG_FB_MATROX=y CONFIG_FB_MATROX_MILLENIUM=y CONFIG_FB_MATROX_MYSTIQUE=y @@ -533,9 +549,11 @@ CONFIG_FB_ATY=y CONFIG_FB_ATY_GX=y CONFIG_FB_ATY_CT=y +CONFIG_FB_RADEON=y CONFIG_FB_ATY128=y -CONFIG_FB_3DFX=y # CONFIG_FB_SIS is not set +CONFIG_FB_3DFX=y +# CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB8=y @@ -611,11 +629,37 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set # -# Input core support is needed for joysticks +# Joysticks # +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set # CONFIG_QIC02_TAPE is not set # @@ -628,7 +672,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -661,6 +704,7 @@ CONFIG_VFAT_FS=m # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -809,6 +853,8 @@ # CONFIG_USB_DEVICEFS=y # CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_LONG_TIMEOUT is not set +# CONFIG_USB_LARGE_CONFIG is not set # # USB Controllers @@ -823,13 +869,22 @@ # CONFIG_USB_AUDIO is not set # CONFIG_USB_BLUETOOTH is not set # CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set CONFIG_USB_ACM=m -# CONFIG_USB_PRINTER is not set +CONFIG_USB_PRINTER=m # # USB Human Interface Devices (HID) # CONFIG_USB_HID=y +# CONFIG_USB_HIDDEV is not set # CONFIG_USB_WACOM is not set # @@ -837,26 +892,26 @@ # # CONFIG_USB_DC2XX is not set # CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set +CONFIG_USB_SCANNER=m # CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set # # USB Multimedia devices # -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_PWC is not set -# CONFIG_USB_SE401 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_DABUSB is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# # # USB Network adaptors # -# CONFIG_USB_PLUSB is not set # CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set # CONFIG_USB_CATC is not set -# CONFIG_USB_NET1080 is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set # # USB port drivers @@ -874,16 +929,26 @@ # CONFIG_USB_SERIAL_EMPEG is not set # CONFIG_USB_SERIAL_FTDI_SIO is not set CONFIG_USB_SERIAL_VISOR=m +# CONFIG_USB_SERIAL_IR is not set # CONFIG_USB_SERIAL_EDGEPORT is not set # CONFIG_USB_SERIAL_KEYSPAN_PDA is not set # CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set # CONFIG_USB_SERIAL_MCT_U232 is not set # CONFIG_USB_SERIAL_PL2303 is not set # CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set # CONFIG_USB_SERIAL_OMNINET is not set # -# USB misc drivers +# USB Miscellaneous drivers # # CONFIG_USB_RIO500 is not set diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/est8260_defconfig linux/arch/ppc/configs/est8260_defconfig --- v2.4.13/linux/arch/ppc/configs/est8260_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/est8260_defconfig Fri Nov 2 17:43:54 2001 @@ -29,7 +29,6 @@ CONFIG_PPC_STD_MMU=y CONFIG_SERIAL_CONSOLE=y CONFIG_EST8260=y -CONFIG_PPC601_SYNC_FIX=y # CONFIG_SMP is not set # @@ -69,7 +68,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -95,6 +93,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -123,6 +122,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -176,12 +176,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -199,9 +196,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -263,6 +260,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -292,7 +293,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -309,7 +314,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -342,6 +346,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -422,6 +427,103 @@ # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/gemini_defconfig linux/arch/ppc/configs/gemini_defconfig --- v2.4.13/linux/arch/ppc/configs/gemini_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/gemini_defconfig Fri Nov 2 17:43:54 2001 @@ -32,7 +32,6 @@ # CONFIG_ALL_PPC is not set # CONFIG_APUS is not set CONFIG_GEMINI=y -# CONFIG_PPC601_SYNC_FIX is not set # CONFIG_SMP is not set CONFIG_ALTIVEC=y CONFIG_TAU=y @@ -77,7 +76,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -103,6 +101,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -137,6 +136,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -202,6 +202,7 @@ # CONFIG_SCSI_AHA1740 is not set # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set @@ -243,8 +244,6 @@ # CONFIG_SCSI_T128 is not set # CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_MESH is not set -# CONFIG_SCSI_MAC53C94 is not set # # IEEE 1394 (FireWire) support (EXPERIMENTAL) @@ -270,12 +269,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -CONFIG_NCR885E=y -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_HAPPYMEAL is not set # CONFIG_SUNBMAC is not set @@ -295,9 +291,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -359,6 +355,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -390,7 +390,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -407,7 +411,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -440,6 +443,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -517,6 +521,103 @@ # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/ibmchrp_defconfig linux/arch/ppc/configs/ibmchrp_defconfig --- v2.4.13/linux/arch/ppc/configs/ibmchrp_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/ibmchrp_defconfig Fri Nov 2 17:43:54 2001 @@ -32,7 +32,6 @@ CONFIG_ALL_PPC=y # CONFIG_APUS is not set # CONFIG_GEMINI is not set -# CONFIG_PPC601_SYNC_FIX is not set # CONFIG_SMP is not set # CONFIG_ALTIVEC is not set # CONFIG_TAU is not set @@ -63,6 +62,7 @@ # # CONFIG_PARPORT is not set CONFIG_PPC_RTC=y +# CONFIG_PPC601_SYNC_FIX is not set CONFIG_PROC_DEVICETREE=y CONFIG_PPC_RTAS=y # CONFIG_BOOTX_TEXT is not set @@ -79,7 +79,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -105,6 +104,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -134,6 +134,7 @@ # CONFIG_IP_NF_CONNTRACK=m CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_IRC=m # CONFIG_IP_NF_QUEUE is not set CONFIG_IP_NF_IPTABLES=m CONFIG_IP_NF_MATCH_LIMIT=m @@ -141,6 +142,8 @@ CONFIG_IP_NF_MATCH_MARK=m CONFIG_IP_NF_MATCH_MULTIPORT=m CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_LENGTH=m +CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_MATCH_TCPMSS=m CONFIG_IP_NF_MATCH_STATE=m CONFIG_IP_NF_MATCH_UNCLEAN=m @@ -152,6 +155,8 @@ CONFIG_IP_NF_NAT_NEEDED=y CONFIG_IP_NF_TARGET_MASQUERADE=m CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_NAT_IRC=m CONFIG_IP_NF_NAT_FTP=m # CONFIG_IP_NF_MANGLE is not set # CONFIG_IP_NF_TARGET_LOG is not set @@ -162,6 +167,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -227,6 +233,7 @@ # CONFIG_SCSI_AHA1740 is not set # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set @@ -295,12 +302,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_HAPPYMEAL is not set # CONFIG_SUNBMAC is not set @@ -319,8 +323,6 @@ # CONFIG_APRICOT is not set # CONFIG_CS89x0 is not set # CONFIG_TULIP is not set -# CONFIG_TULIP_MWI is not set -# CONFIG_TULIP_MMIO is not set CONFIG_DE4X5=y # CONFIG_DGRS is not set # CONFIG_DM9102 is not set @@ -331,6 +333,7 @@ # CONFIG_NE2K_PCI is not set # CONFIG_NE3210 is not set # CONFIG_ES3210 is not set +# CONFIG_8139CP is not set # CONFIG_8139TOO is not set # CONFIG_8139TOO_PIO is not set # CONFIG_8139TOO_TUNE_TWISTER is not set @@ -347,9 +350,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -422,9 +425,6 @@ # CONFIG_FB_IMSTT is not set # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set -# CONFIG_FB_PVR2 is not set -# CONFIG_FB_PVR2_DEBUG is not set -# CONFIG_FB_E1355 is not set CONFIG_FB_MATROX=y CONFIG_FB_MATROX_MILLENIUM=y CONFIG_FB_MATROX_MYSTIQUE=y @@ -432,9 +432,11 @@ # CONFIG_FB_MATROX_G450 is not set # CONFIG_FB_MATROX_MULTIHEAD is not set # CONFIG_FB_ATY is not set +# CONFIG_FB_RADEON is not set # CONFIG_FB_ATY128 is not set -CONFIG_FB_3DFX=y # CONFIG_FB_SIS is not set +CONFIG_FB_3DFX=y +# CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB8=y @@ -505,11 +507,37 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set # -# Input core support is needed for joysticks +# Joysticks # +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set # CONFIG_QIC02_TAPE is not set # @@ -522,7 +550,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -555,6 +582,7 @@ CONFIG_VFAT_FS=m # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -673,6 +701,104 @@ # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +# CONFIG_USB_HID is not set +# CONFIG_USB_HIDDEV is not set +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/mbx_defconfig linux/arch/ppc/configs/mbx_defconfig --- v2.4.13/linux/arch/ppc/configs/mbx_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/mbx_defconfig Fri Nov 2 17:43:54 2001 @@ -25,10 +25,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y # CONFIG_RPXLITE is not set # CONFIG_RPXCLASSIC is not set # CONFIG_BSEIP is not set +# CONFIG_FADS is not set # CONFIG_TQM823L is not set # CONFIG_TQM850L is not set # CONFIG_TQM855L is not set @@ -37,10 +39,10 @@ # CONFIG_TQM860 is not set # CONFIG_SPD823TS is not set # CONFIG_IVMS8 is not set +# CONFIG_IVML24 is not set # CONFIG_SM850 is not set CONFIG_MBX=y # CONFIG_WINCEPT is not set -CONFIG_PPC601_SYNC_FIX=y # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -83,7 +85,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -108,6 +109,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -132,6 +134,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -184,12 +187,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -207,9 +207,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -270,6 +270,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -298,7 +302,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -315,7 +323,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -348,6 +355,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -436,11 +444,109 @@ # CONFIG_8xx_COPYBACK=y CONFIG_8xx_CPU6=y +# CONFIG_UCODE_PATCH is not set # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/oak_defconfig linux/arch/ppc/configs/oak_defconfig --- v2.4.13/linux/arch/ppc/configs/oak_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/oak_defconfig Fri Nov 2 17:43:54 2001 @@ -27,9 +27,9 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set # CONFIG_8xx is not set +# CONFIG_PPC_STD_MMU is not set CONFIG_OAK=y # CONFIG_WALNUT is not set -CONFIG_PPC601_SYNC_FIX=y # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set # CONFIG_MATH_EMULATION is not set @@ -70,7 +70,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -96,6 +95,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -121,6 +121,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -173,12 +174,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -CONFIG_OAKNET=y # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -196,9 +194,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -259,6 +257,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -288,7 +290,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -305,7 +311,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -338,6 +343,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -402,6 +408,103 @@ # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/power3_defconfig linux/arch/ppc/configs/power3_defconfig --- v2.4.13/linux/arch/ppc/configs/power3_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/power3_defconfig Fri Nov 2 17:43:54 2001 @@ -86,7 +86,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -112,6 +111,7 @@ CONFIG_MD_RAID0=y CONFIG_MD_RAID1=y CONFIG_MD_RAID5=y +# CONFIG_MD_MULTIPATH is not set CONFIG_BLK_DEV_LVM=y # @@ -137,6 +137,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -202,6 +203,7 @@ # CONFIG_SCSI_AHA1740 is not set # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set @@ -272,12 +274,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_HAPPYMEAL is not set # CONFIG_SUNBMAC is not set @@ -296,8 +295,6 @@ # CONFIG_APRICOT is not set # CONFIG_CS89x0 is not set # CONFIG_TULIP is not set -# CONFIG_TULIP_MWI is not set -# CONFIG_TULIP_MMIO is not set # CONFIG_DE4X5 is not set # CONFIG_DGRS is not set # CONFIG_DM9102 is not set @@ -308,6 +305,7 @@ # CONFIG_NE2K_PCI is not set # CONFIG_NE3210 is not set # CONFIG_ES3210 is not set +# CONFIG_8139CP is not set # CONFIG_8139TOO is not set # CONFIG_8139TOO_PIO is not set # CONFIG_8139TOO_TUNE_TWISTER is not set @@ -324,9 +322,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -399,9 +397,6 @@ # CONFIG_FB_IMSTT is not set # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set -# CONFIG_FB_PVR2 is not set -# CONFIG_FB_PVR2_DEBUG is not set -# CONFIG_FB_E1355 is not set CONFIG_FB_MATROX=y CONFIG_FB_MATROX_MILLENIUM=y CONFIG_FB_MATROX_MYSTIQUE=y @@ -411,9 +406,11 @@ # CONFIG_FB_MATROX_G450 is not set CONFIG_FB_MATROX_MULTIHEAD=y # CONFIG_FB_ATY is not set +# CONFIG_FB_RADEON is not set # CONFIG_FB_ATY128 is not set -# CONFIG_FB_3DFX is not set # CONFIG_FB_SIS is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB8=y @@ -478,6 +475,7 @@ CONFIG_I2C_ALGOPCF=y # CONFIG_I2C_ELEKTOR is not set CONFIG_I2C_CHARDEV=y +# CONFIG_I2C_PROC is not set # # Mice @@ -491,11 +489,37 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set # -# Input core support is needed for joysticks +# Joysticks # +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set # CONFIG_QIC02_TAPE is not set # @@ -508,7 +532,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -541,6 +564,7 @@ CONFIG_VFAT_FS=y # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -697,6 +721,104 @@ # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# +# CONFIG_USB_HID is not set +# CONFIG_USB_HIDDEV is not set +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_WACOM is not set + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/rpxcllf_defconfig linux/arch/ppc/configs/rpxcllf_defconfig --- v2.4.13/linux/arch/ppc/configs/rpxcllf_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/rpxcllf_defconfig Fri Nov 2 17:43:54 2001 @@ -25,10 +25,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y # CONFIG_RPXLITE is not set CONFIG_RPXCLASSIC=y # CONFIG_BSEIP is not set +# CONFIG_FADS is not set # CONFIG_TQM823L is not set # CONFIG_TQM850L is not set # CONFIG_TQM855L is not set @@ -37,10 +39,10 @@ # CONFIG_TQM860 is not set # CONFIG_SPD823TS is not set # CONFIG_IVMS8 is not set +# CONFIG_IVML24 is not set # CONFIG_SM850 is not set # CONFIG_MBX is not set # CONFIG_WINCEPT is not set -CONFIG_PPC601_SYNC_FIX=y # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -83,7 +85,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -109,6 +110,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -137,6 +139,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -190,12 +193,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -213,9 +213,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -276,6 +276,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -305,7 +309,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -322,7 +330,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -355,6 +362,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -444,11 +452,109 @@ # CONFIG_8xx_COPYBACK=y # CONFIG_8xx_CPU6 is not set +# CONFIG_UCODE_PATCH is not set # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/rpxlite_defconfig linux/arch/ppc/configs/rpxlite_defconfig --- v2.4.13/linux/arch/ppc/configs/rpxlite_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/rpxlite_defconfig Fri Nov 2 17:43:54 2001 @@ -25,10 +25,12 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set CONFIG_8xx=y +# CONFIG_PPC_STD_MMU is not set CONFIG_SERIAL_CONSOLE=y CONFIG_RPXLITE=y # CONFIG_RPXCLASSIC is not set # CONFIG_BSEIP is not set +# CONFIG_FADS is not set # CONFIG_TQM823L is not set # CONFIG_TQM850L is not set # CONFIG_TQM855L is not set @@ -37,10 +39,10 @@ # CONFIG_TQM860 is not set # CONFIG_SPD823TS is not set # CONFIG_IVMS8 is not set +# CONFIG_IVML24 is not set # CONFIG_SM850 is not set # CONFIG_MBX is not set # CONFIG_WINCEPT is not set -CONFIG_PPC601_SYNC_FIX=y # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set CONFIG_MATH_EMULATION=y @@ -83,7 +85,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -109,6 +110,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -137,6 +139,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -190,12 +193,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -213,9 +213,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -276,6 +276,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -305,7 +309,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -322,7 +330,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -355,6 +362,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -441,11 +449,109 @@ # CONFIG_8xx_COPYBACK=y # CONFIG_8xx_CPU6 is not set +# CONFIG_UCODE_PATCH is not set # # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/configs/walnut_defconfig linux/arch/ppc/configs/walnut_defconfig --- v2.4.13/linux/arch/ppc/configs/walnut_defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/configs/walnut_defconfig Fri Nov 2 17:43:54 2001 @@ -27,9 +27,9 @@ # CONFIG_POWER3 is not set # CONFIG_POWER4 is not set # CONFIG_8xx is not set +# CONFIG_PPC_STD_MMU is not set # CONFIG_OAK is not set CONFIG_WALNUT=y -CONFIG_PPC601_SYNC_FIX=y # CONFIG_ALL_PPC is not set # CONFIG_SMP is not set # CONFIG_MATH_EMULATION is not set @@ -70,7 +70,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -96,6 +95,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -121,6 +121,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -173,12 +174,9 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -196,9 +194,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -259,6 +257,10 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set # # Macintosh device drivers @@ -281,6 +283,7 @@ # CONFIG_I2C_ALGOBIT is not set # CONFIG_I2C_ALGOPCF is not set # CONFIG_I2C_CHARDEV is not set +# CONFIG_I2C_PROC is not set # # Mice @@ -291,7 +294,11 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set + +# +# Input core support is needed for gameports +# # # Input core support is needed for joysticks @@ -308,7 +315,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -341,6 +347,7 @@ # CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -405,6 +412,103 @@ # USB support # # CONFIG_USB is not set + +# +# USB Controllers +# +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +# CONFIG_USB_OHCI is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH is not set +# CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# USB Human Interface Devices (HID) +# + +# +# Input core support is needed for USB HID +# + +# +# USB Imaging devices +# +# CONFIG_USB_DC2XX is not set +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set # # Bluetooth support diff -u --recursive --new-file v2.4.13/linux/arch/ppc/defconfig linux/arch/ppc/defconfig --- v2.4.13/linux/arch/ppc/defconfig Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/defconfig Fri Nov 2 17:43:54 2001 @@ -32,7 +32,6 @@ CONFIG_ALL_PPC=y # CONFIG_APUS is not set # CONFIG_GEMINI is not set -CONFIG_PPC601_SYNC_FIX=y # CONFIG_SMP is not set CONFIG_ALTIVEC=y CONFIG_TAU=y @@ -69,6 +68,7 @@ # # CONFIG_PARPORT is not set CONFIG_PPC_RTC=y +CONFIG_PPC601_SYNC_FIX=y CONFIG_PROC_DEVICETREE=y CONFIG_PPC_RTAS=y CONFIG_BOOTX_TEXT=y @@ -86,7 +86,6 @@ # # CONFIG_PNP is not set # CONFIG_ISAPNP is not set -# CONFIG_PNPBIOS is not set # # Block devices @@ -112,6 +111,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set # @@ -141,6 +141,7 @@ # CONFIG_IP_NF_CONNTRACK=m CONFIG_IP_NF_FTP=m +CONFIG_IP_NF_IRC=m # CONFIG_IP_NF_QUEUE is not set CONFIG_IP_NF_IPTABLES=m CONFIG_IP_NF_MATCH_LIMIT=m @@ -148,6 +149,8 @@ CONFIG_IP_NF_MATCH_MARK=m CONFIG_IP_NF_MATCH_MULTIPORT=m CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_LENGTH=m +CONFIG_IP_NF_MATCH_TTL=m CONFIG_IP_NF_MATCH_TCPMSS=m CONFIG_IP_NF_MATCH_STATE=m CONFIG_IP_NF_MATCH_UNCLEAN=m @@ -159,6 +162,8 @@ CONFIG_IP_NF_NAT_NEEDED=y CONFIG_IP_NF_TARGET_MASQUERADE=m CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_NAT_SNMP_BASIC=m +CONFIG_IP_NF_NAT_IRC=m CONFIG_IP_NF_NAT_FTP=m # CONFIG_IP_NF_MANGLE is not set # CONFIG_IP_NF_TARGET_LOG is not set @@ -169,6 +174,7 @@ # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -272,6 +278,9 @@ # CONFIG_IDEDMA_IVB is not set # CONFIG_DMA_NONPCI is not set CONFIG_BLK_DEV_IDE_MODES=y +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set # # SCSI support @@ -315,7 +324,8 @@ # CONFIG_AIC7XXX_OLD_TCQ_ON_BY_DEFAULT is not set CONFIG_AIC7XXX_OLD_CMDS_PER_DEVICE=8 CONFIG_AIC7XXX_OLD_PROC_STATS=y -# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_DPT_I2O is not set +CONFIG_SCSI_ADVANSYS=m # CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_AM53C974 is not set # CONFIG_SCSI_MEGARAID is not set @@ -333,7 +343,7 @@ # CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_NCR53C7xx is not set -# CONFIG_SCSI_NCR53C8XX is not set +CONFIG_SCSI_NCR53C8XX=y CONFIG_SCSI_SYM53C8XX=y CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 @@ -389,13 +399,10 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set CONFIG_MACE=y # CONFIG_MACE_AAUI_PORT is not set CONFIG_BMAC=y CONFIG_GMAC=y -# CONFIG_NCR885E is not set -# CONFIG_OAKNET is not set # CONFIG_SUNLANCE is not set # CONFIG_HAPPYMEAL is not set # CONFIG_SUNBMAC is not set @@ -426,6 +433,7 @@ # CONFIG_NE2K_PCI is not set # CONFIG_NE3210 is not set # CONFIG_ES3210 is not set +# CONFIG_8139CP is not set # CONFIG_8139TOO is not set # CONFIG_8139TOO_PIO is not set # CONFIG_8139TOO_TUNE_TWISTER is not set @@ -442,9 +450,9 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set -# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_DL2K is not set # CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -464,7 +472,18 @@ # # Wireless LAN (non-hamradio) # -# CONFIG_NET_RADIO is not set +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +# CONFIG_WAVELAN is not set +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set +# CONFIG_AIRONET4500_NONCS is not set +# CONFIG_AIRONET4500_PROC is not set +# CONFIG_AIRO is not set +CONFIG_HERMES=m +CONFIG_APPLE_AIRPORT=m +# CONFIG_PLX_HERMES is not set +CONFIG_NET_WIRELESS=y # # Token Ring devices @@ -521,9 +540,6 @@ CONFIG_FB_IMSTT=y # CONFIG_FB_S3TRIO is not set # CONFIG_FB_VGA16 is not set -# CONFIG_FB_PVR2 is not set -# CONFIG_FB_PVR2_DEBUG is not set -# CONFIG_FB_E1355 is not set CONFIG_FB_MATROX=y CONFIG_FB_MATROX_MILLENIUM=y CONFIG_FB_MATROX_MYSTIQUE=y @@ -533,9 +549,11 @@ CONFIG_FB_ATY=y CONFIG_FB_ATY_GX=y CONFIG_FB_ATY_CT=y +CONFIG_FB_RADEON=y CONFIG_FB_ATY128=y -CONFIG_FB_3DFX=y # CONFIG_FB_SIS is not set +CONFIG_FB_3DFX=y +# CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VIRTUAL is not set # CONFIG_FBCON_ADVANCED is not set CONFIG_FBCON_CFB8=y @@ -611,11 +629,37 @@ # # Joysticks # -# CONFIG_JOYSTICK is not set +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set # -# Input core support is needed for joysticks +# Joysticks # +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set # CONFIG_QIC02_TAPE is not set # @@ -628,7 +672,6 @@ # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -# CONFIG_SONYPI is not set # # Ftape, the floppy tape device driver @@ -661,6 +704,7 @@ CONFIG_VFAT_FS=m # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set CONFIG_TMPFS=y # CONFIG_RAMFS is not set @@ -809,6 +853,8 @@ # CONFIG_USB_DEVICEFS=y # CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_LONG_TIMEOUT is not set +# CONFIG_USB_LARGE_CONFIG is not set # # USB Controllers @@ -823,13 +869,22 @@ # CONFIG_USB_AUDIO is not set # CONFIG_USB_BLUETOOTH is not set # CONFIG_USB_STORAGE is not set +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set CONFIG_USB_ACM=m -# CONFIG_USB_PRINTER is not set +CONFIG_USB_PRINTER=m # # USB Human Interface Devices (HID) # CONFIG_USB_HID=y +# CONFIG_USB_HIDDEV is not set # CONFIG_USB_WACOM is not set # @@ -837,26 +892,26 @@ # # CONFIG_USB_DC2XX is not set # CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set +CONFIG_USB_SCANNER=m # CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set # # USB Multimedia devices # -# CONFIG_USB_IBMCAM is not set -# CONFIG_USB_OV511 is not set -# CONFIG_USB_PWC is not set -# CONFIG_USB_SE401 is not set -# CONFIG_USB_DSBR is not set -# CONFIG_USB_DABUSB is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# # # USB Network adaptors # -# CONFIG_USB_PLUSB is not set # CONFIG_USB_PEGASUS is not set +# CONFIG_USB_KAWETH is not set # CONFIG_USB_CATC is not set -# CONFIG_USB_NET1080 is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set # # USB port drivers @@ -874,16 +929,26 @@ # CONFIG_USB_SERIAL_EMPEG is not set # CONFIG_USB_SERIAL_FTDI_SIO is not set CONFIG_USB_SERIAL_VISOR=m +# CONFIG_USB_SERIAL_IR is not set # CONFIG_USB_SERIAL_EDGEPORT is not set # CONFIG_USB_SERIAL_KEYSPAN_PDA is not set # CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set +# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set # CONFIG_USB_SERIAL_MCT_U232 is not set # CONFIG_USB_SERIAL_PL2303 is not set # CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set # CONFIG_USB_SERIAL_OMNINET is not set # -# USB misc drivers +# USB Miscellaneous drivers # # CONFIG_USB_RIO500 is not set diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/Makefile linux/arch/ppc/kernel/Makefile --- v2.4.13/linux/arch/ppc/kernel/Makefile Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/Makefile Fri Nov 2 17:43:54 2001 @@ -1,4 +1,4 @@ -# BK Id: SCCS/s.Makefile 1.32 08/24/01 20:07:37 paulus +# BK Id: SCCS/s.Makefile 1.34 10/16/01 15:58:42 trini # # # Makefile for the linux kernel. @@ -15,26 +15,21 @@ EXTRA_AFLAGS := -Wa,-mppc64bridge endif -ifeq ($(CONFIG_4xx),y) - KHEAD := head_4xx.o -else - ifeq ($(CONFIG_8xx),y) - KHEAD := head_8xx.o - else - KHEAD := head.o - endif -endif +# Start off with 'head.o', change as needed. +HEAD-y := head.o +HEAD-$(CONFIG_4xx) := head_4xx.o +HEAD-$(CONFIG_8xx) := head_8xx.o -all: $(KHEAD) kernel.o +all: $(HEAD-y) kernel.o O_TARGET := kernel.o export-objs := ppc_ksyms.o prep_setup.o time.o obj-y := entry.o traps.o irq.o idle.o time.o misc.o \ - process.o signal.o ptrace.o \ - ppc_htab.o semaphore.o syscalls.o \ - align.o setup.o cputable.o + process.o signal.o ptrace.o align.o \ + semaphore.o syscalls.o setup.o \ + cputable.o ppc_htab.o obj-$(CONFIG_6xx) += l2cr.o obj-$(CONFIG_MODULES) += ppc_ksyms.o obj-$(CONFIG_POWER4) += xics.o @@ -68,8 +63,8 @@ obj-$(CONFIG_NVRAM) += pmac_nvram.o obj-$(CONFIG_PMAC_BACKLIGHT) += pmac_backlight.o obj-$(CONFIG_PMAC_PBOOK) += sleep.o -obj-$(CONFIG_PPC_RTAS) += error_log.o proc_rtas.o obj-$(CONFIG_PREP_RESIDUAL) += residual.o +obj-$(CONFIG_PPC_RTAS) += error_log.o proc_rtas.o obj-$(CONFIG_GEMINI) += gemini_prom.o gemini_pci.o gemini_setup.o \ open_pic.o obj-$(CONFIG_8260) += m8260_setup.o ppc8260_pic.o diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/apus_setup.c linux/arch/ppc/kernel/apus_setup.c --- v2.4.13/linux/arch/ppc/kernel/apus_setup.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/apus_setup.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.apus_setup.c 1.20 09/08/01 15:47:42 paulus + * BK Id: SCCS/s.apus_setup.c 1.22 10/18/01 11:16:27 trini */ /* * linux/arch/ppc/kernel/apus_setup.c @@ -1111,9 +1111,6 @@ ppc_md.kbd_unexpected_up = apus_kbd_unexpected_up; ppc_md.kbd_leds = apus_kbd_leds; ppc_md.kbd_init_hw = apus_kbd_init_hw; -#ifdef CONFIG_MAGIC_SYSRQ - ppc_md.kbd_sysrq_xlate = NULL; -#endif #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) ppc_ide_md.ide_init_hwif = apus_ide_init_hwif_ports; diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/gemini_pci.c linux/arch/ppc/kernel/gemini_pci.c --- v2.4.13/linux/arch/ppc/kernel/gemini_pci.c Mon May 21 17:04:47 2001 +++ linux/arch/ppc/kernel/gemini_pci.c Fri Nov 2 17:43:54 2001 @@ -1,10 +1,10 @@ /* - * BK Id: SCCS/s.gemini_pci.c 1.5 05/17/01 18:14:21 cort + * BK Id: SCCS/s.gemini_pci.c 1.6 10/11/01 08:51:46 trini */ #include #include #include -#include +#include #include #include diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/gemini_setup.c linux/arch/ppc/kernel/gemini_setup.c --- v2.4.13/linux/arch/ppc/kernel/gemini_setup.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/gemini_setup.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.gemini_setup.c 1.11 08/20/01 14:34:41 paulus + * BK Id: SCCS/s.gemini_setup.c 1.14 10/18/01 11:16:28 trini */ /* * linux/arch/ppc/kernel/setup.c @@ -150,6 +150,9 @@ void gemini_heartbeat(void) { + /* We only want to do this on 1 CPU */ + if ( smp_processor_id() ) + return; static unsigned long led = GEMINI_LEDBASE+(4*8); static char direction = 8; *(char *)led = 0; @@ -506,8 +509,8 @@ static void smp_gemini_kick_cpu(int nr) { - openpic_init_processor( 1< #include #include +#include #ifdef CONFIG_APUS #include @@ -1083,7 +1084,7 @@ copy_and_flush: addi r5,r5,-4 addi r6,r6,-4 -4: li r0,CACHE_LINE_SIZE/4 +4: li r0,L1_CACHE_LINE_SIZE/4 mtctr r0 3: addi r6,r6,4 /* copy a cache line */ lwzx r0,r6,r4 diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/head_8xx.S linux/arch/ppc/kernel/head_8xx.S --- v2.4.13/linux/arch/ppc/kernel/head_8xx.S Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/head_8xx.S Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.head_8xx.S 1.21 08/28/01 16:27:27 trini + * BK Id: SCCS/s.head_8xx.S 1.23 09/16/01 19:32:54 trini */ /* * arch/ppc/kernel/except_8xx.S @@ -352,16 +352,21 @@ mtspr MD_TWC, r21 /* Load pte table base address */ mfspr r21, MD_TWC /* ....and get the pte address */ lwz r20, 0(r21) /* Get the pte */ -#if 0 + ori r20, r20, _PAGE_ACCESSED stw r20, 0(r21) -#endif - /* Set four subpage valid bits (24, 25, 26, and 27). - * Clear bit 28 (which should be in the PTE, but we do this anyway). + /* The Linux PTE won't go exactly into the MMU TLB. + * Software indicator bits 21, 22 and 28 must be clear. + * Software indicator bits 24, 25, 26, and 27 must be + * set. All other Linux PTE bits control the behavior + * of the MMU. */ + li r21, 0x0600 + andc r20, r20, r21 /* Clear 21, 22 */ li r21, 0x00f0 - rlwimi r20, r21, 0, 24, 28 + rlwimi r20, r21, 0, 24, 28 /* Set 24-27, clear 28 */ + #ifdef CONFIG_8xx_CPU6 li r3, 0x2d80 stw r3, 12(r0) @@ -441,21 +446,21 @@ #endif mtspr MD_TWC, r21 - /* Set PP0 to PP1 (== _PAGE_USER) & ~_PAGE_RW */ - rlwimi r20, r20, 32-1, 21, 21 - rlwinm r21, r20, 4, 21, 21 - andc r20, r20, r21 + mfspr r21, MD_TWC /* get the pte address again */ + ori r20, r20, _PAGE_ACCESSED + stw r20, 0(r21) - /* Set four subpage valid bits (24, 25, 26, and 27). - * Clear bit 28 (which should be in the PTE, but we do this anyway). + /* The Linux PTE won't go exactly into the MMU TLB. + * Software indicator bits 21, 22 and 28 must be clear. + * Software indicator bits 24, 25, 26, and 27 must be + * set. All other Linux PTE bits control the behavior + * of the MMU. */ -#if 0 - ori r20, r20, 0x00f0 -#else + li r21, 0x0600 + andc r20, r20, r21 /* Clear 21, 22 */ li r21, 0x00f0 - rlwimi r20, r21, 0, 24, 28 + rlwimi r20, r21, 0, 24, 28 /* Set 24-27, clear 28 */ -#endif #ifdef CONFIG_8xx_CPU6 li r3, 0x3d80 stw r3, 12(r0) @@ -549,15 +554,21 @@ /* Update 'changed', among others. */ - ori r20, r20, _PAGE_DIRTY|_PAGE_ACCESSED + ori r20, r20, _PAGE_DIRTY|_PAGE_ACCESSED|_PAGE_HWWRITE mfspr r21, MD_TWC /* Get pte address again */ stw r20, 0(r21) /* and update pte in table */ - /* Set four subpage valid bits (24, 25, 26, and 27). - * Clear bit 28 (which should be in the PTE, but we do this anyway). + /* The Linux PTE won't go exactly into the MMU TLB. + * Software indicator bits 21, 22 and 28 must be clear. + * Software indicator bits 24, 25, 26, and 27 must be + * set. All other Linux PTE bits control the behavior + * of the MMU. */ + li r21, 0x0600 + andc r20, r20, r21 /* Clear 21, 22 */ li r21, 0x00f0 - rlwimi r20, r21, 0, 24, 28 + rlwimi r20, r21, 0, 24, 28 /* Set 24-27, clear 28 */ + #ifdef CONFIG_8xx_CPU6 li r3, 0x3d80 stw r3, 12(r0) diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/idle.c linux/arch/ppc/kernel/idle.c --- v2.4.13/linux/arch/ppc/kernel/idle.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/idle.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.idle.c 1.14 08/15/01 22:43:06 paulus + * BK Id: SCCS/s.idle.c 1.16 10/16/01 15:58:42 trini */ /* * Idle daemon for PowerPC. Idle daemon will handle any action @@ -58,14 +58,13 @@ init_idle(); for (;;) { #ifdef CONFIG_SMP - int oldval; if (!do_power_save) { /* * Deal with another CPU just having chosen a thread to * run here: */ - oldval = xchg(¤t->need_resched, -1); + int oldval = xchg(¤t->need_resched, -1); if (!oldval) { while(current->need_resched == -1) diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/m8260_setup.c linux/arch/ppc/kernel/m8260_setup.c --- v2.4.13/linux/arch/ppc/kernel/m8260_setup.c Tue Oct 9 17:06:51 2001 +++ linux/arch/ppc/kernel/m8260_setup.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.m8260_setup.c 1.26 09/22/01 11:33:22 trini + * BK Id: SCCS/s.m8260_setup.c 1.28 10/18/01 11:16:28 trini */ /* * linux/arch/ppc/kernel/setup.c @@ -49,19 +49,14 @@ #include "ppc8260_pic.h" static int m8260_set_rtc_time(unsigned long time); -unsigned long m8260_get_rtc_time(void); -void m8260_calibrate_decr(void); - -extern unsigned long loops_per_jiffy; +static unsigned long m8260_get_rtc_time(void); +static void m8260_calibrate_decr(void); unsigned char __res[sizeof(bd_t)]; -extern char saved_command_line[256]; - -extern unsigned long find_available_memory(void); extern void m8260_cpm_reset(void); -void __init +static void __init m8260_setup_arch(void) { /* Reset the Communication Processor Module. @@ -69,7 +64,7 @@ m8260_cpm_reset(); } -void +static void abort(void) { #ifdef CONFIG_XMON @@ -82,7 +77,8 @@ /* The decrementer counts at the system (internal) clock frequency * divided by four. */ -void __init m8260_calibrate_decr(void) +static void __init +m8260_calibrate_decr(void) { bd_t *binfo = (bd_t *)__res; int freq, divisor; @@ -98,14 +94,14 @@ */ static uint rtc_time; -static int +static static int m8260_set_rtc_time(unsigned long time) { rtc_time = time; return(0); } -unsigned long +static unsigned long m8260_get_rtc_time(void) { @@ -114,7 +110,7 @@ return((unsigned long)rtc_time); } -void +static void m8260_restart(char *cmd) { extern void m8260_gorom(bd_t *bi, uint addr); @@ -134,20 +130,21 @@ m8260_gorom((unsigned int)__pa(__res), startaddr); } -void +static void m8260_power_off(void) { m8260_restart(NULL); } -void +static void m8260_halt(void) { m8260_restart(NULL); } -int m8260_setup_residual(char *buffer) +static int +m8260_setup_residual(char *buffer) { int len = 0; bd_t *bp; @@ -170,7 +167,7 @@ * External interrupts can be either edge or level triggered, and * need to be initialized by the appropriate driver. */ -void __init +static void __init m8260_init_IRQ(void) { int i; @@ -195,7 +192,8 @@ /* * Same hack as 8xx */ -unsigned long __init m8260_find_end_of_memory(void) +static unsigned long __init +m8260_find_end_of_memory(void) { bd_t *binfo; extern unsigned char __res[]; @@ -241,35 +239,33 @@ strcpy(cmd_line, (char *)(r6+KERNELBASE)); } - ppc_md.setup_arch = m8260_setup_arch; - ppc_md.setup_residual = m8260_setup_residual; - ppc_md.get_cpuinfo = NULL; - ppc_md.irq_cannonicalize = NULL; - ppc_md.init_IRQ = m8260_init_IRQ; - ppc_md.get_irq = m8260_get_irq; - ppc_md.init = NULL; - - ppc_md.restart = m8260_restart; - ppc_md.power_off = m8260_power_off; - ppc_md.halt = m8260_halt; - - ppc_md.time_init = NULL; - ppc_md.set_rtc_time = m8260_set_rtc_time; - ppc_md.get_rtc_time = m8260_get_rtc_time; - ppc_md.calibrate_decr = m8260_calibrate_decr; - - ppc_md.find_end_of_memory = m8260_find_end_of_memory; - ppc_md.setup_io_mappings = m8260_map_io; - - ppc_md.kbd_setkeycode = NULL; - ppc_md.kbd_getkeycode = NULL; - ppc_md.kbd_translate = NULL; - ppc_md.kbd_unexpected_up = NULL; - ppc_md.kbd_leds = NULL; - ppc_md.kbd_init_hw = NULL; -#ifdef CONFIG_MAGIC_SYSRQ - ppc_md.kbd_sysrq_xlate = NULL; -#endif + ppc_md.setup_arch = m8260_setup_arch; + ppc_md.setup_residual = m8260_setup_residual; + ppc_md.get_cpuinfo = NULL; + ppc_md.irq_cannonicalize = NULL; + ppc_md.init_IRQ = m8260_init_IRQ; + ppc_md.get_irq = m8260_get_irq; + ppc_md.init = NULL; + + ppc_md.restart = m8260_restart; + ppc_md.power_off = m8260_power_off; + ppc_md.halt = m8260_halt; + + ppc_md.time_init = NULL; + ppc_md.set_rtc_time = m8260_set_rtc_time; + ppc_md.get_rtc_time = m8260_get_rtc_time; + ppc_md.calibrate_decr = m8260_calibrate_decr; + + ppc_md.find_end_of_memory = m8260_find_end_of_memory; + ppc_md.setup_io_mappings = m8260_map_io; + + ppc_md.kbd_setkeycode = NULL; + ppc_md.kbd_getkeycode = NULL; + ppc_md.kbd_translate = NULL; + ppc_md.kbd_unexpected_up = NULL; + ppc_md.kbd_leds = NULL; + ppc_md.kbd_init_hw = NULL; + ppc_md.ppc_kbd_sysrq_xlate = NULL; } /* Mainly for ksyms. diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/m8xx_setup.c linux/arch/ppc/kernel/m8xx_setup.c --- v2.4.13/linux/arch/ppc/kernel/m8xx_setup.c Tue Oct 23 22:48:49 2001 +++ linux/arch/ppc/kernel/m8xx_setup.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.m8xx_setup.c 1.35 10/11/01 11:55:47 trini + * BK Id: SCCS/s.m8xx_setup.c 1.38 10/18/01 11:16:28 trini * * linux/arch/ppc/kernel/setup.c * @@ -60,8 +60,6 @@ extern int rd_image_start; /* starting block # of image */ #endif -extern char saved_command_line[256]; - extern unsigned long find_available_memory(void); extern void m8xx_cpm_reset(uint); @@ -373,35 +371,33 @@ strcpy(cmd_line, (char *)(r6+KERNELBASE)); } - ppc_md.setup_arch = m8xx_setup_arch; - ppc_md.setup_residual = m8xx_setup_residual; - ppc_md.get_cpuinfo = NULL; - ppc_md.irq_cannonicalize = NULL; - ppc_md.init_IRQ = m8xx_init_IRQ; - ppc_md.get_irq = m8xx_get_irq; - ppc_md.init = NULL; - - ppc_md.restart = m8xx_restart; - ppc_md.power_off = m8xx_power_off; - ppc_md.halt = m8xx_halt; - - ppc_md.time_init = NULL; - ppc_md.set_rtc_time = m8xx_set_rtc_time; - ppc_md.get_rtc_time = m8xx_get_rtc_time; - ppc_md.calibrate_decr = m8xx_calibrate_decr; - - ppc_md.find_end_of_memory = m8xx_find_end_of_memory; - ppc_md.setup_io_mappings = m8xx_map_io; - - ppc_md.kbd_setkeycode = NULL; - ppc_md.kbd_getkeycode = NULL; - ppc_md.kbd_translate = NULL; - ppc_md.kbd_unexpected_up = NULL; - ppc_md.kbd_leds = NULL; - ppc_md.kbd_init_hw = NULL; -#ifdef CONFIG_MAGIC_SYSRQ - ppc_md.ppc_kbd_sysrq_xlate = NULL; -#endif + ppc_md.setup_arch = m8xx_setup_arch; + ppc_md.setup_residual = m8xx_setup_residual; + ppc_md.get_cpuinfo = NULL; + ppc_md.irq_cannonicalize = NULL; + ppc_md.init_IRQ = m8xx_init_IRQ; + ppc_md.get_irq = m8xx_get_irq; + ppc_md.init = NULL; + + ppc_md.restart = m8xx_restart; + ppc_md.power_off = m8xx_power_off; + ppc_md.halt = m8xx_halt; + + ppc_md.time_init = NULL; + ppc_md.set_rtc_time = m8xx_set_rtc_time; + ppc_md.get_rtc_time = m8xx_get_rtc_time; + ppc_md.calibrate_decr = m8xx_calibrate_decr; + + ppc_md.find_end_of_memory = m8xx_find_end_of_memory; + ppc_md.setup_io_mappings = m8xx_map_io; + + ppc_md.kbd_setkeycode = NULL; + ppc_md.kbd_getkeycode = NULL; + ppc_md.kbd_translate = NULL; + ppc_md.kbd_unexpected_up = NULL; + ppc_md.kbd_leds = NULL; + ppc_md.kbd_init_hw = NULL; + ppc_md.ppc_kbd_sysrq_xlate = NULL; #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) m8xx_ide_init(); diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/misc.S linux/arch/ppc/kernel/misc.S --- v2.4.13/linux/arch/ppc/kernel/misc.S Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/misc.S Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.misc.S 1.28 08/24/01 20:07:37 paulus + * BK Id: SCCS/s.misc.S 1.32 10/18/01 17:29:53 trini */ /* * This file contains miscellaneous low-level functions. @@ -385,21 +385,21 @@ rlwinm r5,r5,16,16,31 cmpi 0,r5,1 beqlr /* for 601, do nothing */ - li r5,CACHE_LINE_SIZE-1 + li r5,L1_CACHE_LINE_SIZE-1 andc r3,r3,r5 subf r4,r3,r4 add r4,r4,r5 - srwi. r4,r4,LG_CACHE_LINE_SIZE + srwi. r4,r4,LG_L1_CACHE_LINE_SIZE beqlr mtctr r4 mr r6,r3 1: dcbst 0,r3 - addi r3,r3,CACHE_LINE_SIZE + addi r3,r3,L1_CACHE_LINE_SIZE bdnz 1b sync /* wait for dcbst's to get to ram */ mtctr r4 2: icbi 0,r6 - addi r6,r6,CACHE_LINE_SIZE + addi r6,r6,L1_CACHE_LINE_SIZE bdnz 2b sync /* additional sync needed on g4 */ isync @@ -412,37 +412,37 @@ * clean_dcache_range(unsigned long start, unsigned long stop) */ _GLOBAL(clean_dcache_range) - li r5,CACHE_LINE_SIZE-1 + li r5,L1_CACHE_LINE_SIZE-1 andc r3,r3,r5 subf r4,r3,r4 add r4,r4,r5 - srwi. r4,r4,LG_CACHE_LINE_SIZE + srwi. r4,r4,LG_L1_CACHE_LINE_SIZE beqlr mtctr r4 1: dcbst 0,r3 - addi r3,r3,CACHE_LINE_SIZE + addi r3,r3,L1_CACHE_LINE_SIZE bdnz 1b sync /* wait for dcbst's to get to ram */ blr /* - * Write any modified data cache blocks out to memory - * and invalidate the corresponding instruction cache blocks. + * Write any modified data cache blocks out to memory and invalidate them. + * Does not invalidate the corresponding instruction cache blocks. * * flush_dcache_range(unsigned long start, unsigned long stop) */ _GLOBAL(flush_dcache_range) - li r5,CACHE_LINE_SIZE-1 + li r5,L1_CACHE_LINE_SIZE-1 andc r3,r3,r5 subf r4,r3,r4 add r4,r4,r5 - srwi. r4,r4,LG_CACHE_LINE_SIZE + srwi. r4,r4,LG_L1_CACHE_LINE_SIZE beqlr mtctr r4 1: dcbf 0,r3 - addi r3,r3,CACHE_LINE_SIZE + addi r3,r3,L1_CACHE_LINE_SIZE bdnz 1b sync /* wait for dcbst's to get to ram */ blr @@ -455,16 +455,16 @@ * invalidate_dcache_range(unsigned long start, unsigned long stop) */ _GLOBAL(invalidate_dcache_range) - li r5,CACHE_LINE_SIZE-1 + li r5,L1_CACHE_LINE_SIZE-1 andc r3,r3,r5 subf r4,r3,r4 add r4,r4,r5 - srwi. r4,r4,LG_CACHE_LINE_SIZE + srwi. r4,r4,LG_L1_CACHE_LINE_SIZE beqlr mtctr r4 1: dcbi 0,r3 - addi r3,r3,CACHE_LINE_SIZE + addi r3,r3,L1_CACHE_LINE_SIZE bdnz 1b sync /* wait for dcbi's to get to ram */ blr @@ -481,18 +481,18 @@ mfspr r5,PVR rlwinm r5,r5,16,16,31 cmpi 0,r5,1 - beqlr /* for 601, do nothing */ - rlwinm r3,r3,0,0,19 /* Get page base address */ - li r4,4096/CACHE_LINE_SIZE /* Number of lines in a page */ + beqlr /* for 601, do nothing */ + rlwinm r3,r3,0,0,19 /* Get page base address */ + li r4,4096/L1_CACHE_LINE_SIZE /* Number of lines in a page */ mtctr r4 mr r6,r3 -0: dcbst 0,r3 /* Write line to ram */ - addi r3,r3,CACHE_LINE_SIZE +0: dcbst 0,r3 /* Write line to ram */ + addi r3,r3,L1_CACHE_LINE_SIZE bdnz 0b sync mtctr r4 1: icbi 0,r6 - addi r6,r6,CACHE_LINE_SIZE + addi r6,r6,L1_CACHE_LINE_SIZE bdnz 1b sync isync @@ -510,11 +510,11 @@ mfspr r5,PVR rlwinm r5,r5,16,16,31 cmpi 0,r5,1 - beqlr /* for 601, do nothing */ - li r4,4096/CACHE_LINE_SIZE /* Number of lines in a page */ + beqlr /* for 601, do nothing */ + li r4,4096/L1_CACHE_LINE_SIZE /* Number of lines in a page */ mtctr r4 1: icbi 0,r3 - addi r3,r3,CACHE_LINE_SIZE + addi r3,r3,L1_CACHE_LINE_SIZE bdnz 1b sync isync @@ -526,7 +526,7 @@ * displaced). This only works on cacheable memory. */ _GLOBAL(clear_page) - li r0,4096/CACHE_LINE_SIZE + li r0,4096/L1_CACHE_LINE_SIZE mtctr r0 #ifdef CONFIG_8xx li r4, 0 @@ -537,7 +537,7 @@ #else 1: dcbz 0,r3 #endif - addi r3,r3,CACHE_LINE_SIZE + addi r3,r3,L1_CACHE_LINE_SIZE bdnz 1b blr @@ -563,20 +563,20 @@ li r5,4 #ifndef CONFIG_8xx -#if MAX_COPY_PREFETCH > 1 - li r0,MAX_COPY_PREFETCH +#if MAX_L1_COPY_PREFETCH > 1 + li r0,MAX_L1_COPY_PREFETCH li r11,4 mtctr r0 11: dcbt r11,r4 - addi r11,r11,CACHE_LINE_SIZE + addi r11,r11,L1_CACHE_LINE_SIZE bdnz 11b -#else /* MAX_COPY_PREFETCH == 1 */ +#else /* MAX_L1_COPY_PREFETCH == 1 */ dcbt r5,r4 - li r11,CACHE_LINE_SIZE+4 -#endif /* MAX_COPY_PREFETCH */ + li r11,L1_CACHE_LINE_SIZE+4 +#endif /* MAX_L1_COPY_PREFETCH */ #endif /* CONFIG_8xx */ - li r0,4096/CACHE_LINE_SIZE + li r0,4096/L1_CACHE_LINE_SIZE mtctr r0 1: #ifndef CONFIG_8xx @@ -584,12 +584,12 @@ dcbz r5,r3 #endif COPY_16_BYTES -#if CACHE_LINE_SIZE >= 32 +#if L1_CACHE_LINE_SIZE >= 32 COPY_16_BYTES -#if CACHE_LINE_SIZE >= 64 +#if L1_CACHE_LINE_SIZE >= 64 COPY_16_BYTES COPY_16_BYTES -#if CACHE_LINE_SIZE >= 128 +#if L1_CACHE_LINE_SIZE >= 128 COPY_16_BYTES COPY_16_BYTES COPY_16_BYTES @@ -1104,22 +1104,23 @@ .long sys_ni_syscall /* streams2 */ .long sys_vfork .long sys_getrlimit /* 190 */ - .long sys_ni_syscall /* 191 */ /* Unused */ - .long sys_mmap2 /* 192 */ - .long sys_truncate64 /* 193 */ - .long sys_ftruncate64 /* 194 */ - .long sys_stat64 /* 195 */ - .long sys_lstat64 /* 196 */ - .long sys_fstat64 /* 197 */ - .long sys_pciconfig_read /* 198 */ - .long sys_pciconfig_write /* 199 */ + .long sys_readahead + .long sys_mmap2 + .long sys_truncate64 + .long sys_ftruncate64 + .long sys_stat64 /* 195 */ + .long sys_lstat64 + .long sys_fstat64 + .long sys_pciconfig_read + .long sys_pciconfig_write .long sys_pciconfig_iobase /* 200 */ .long sys_ni_syscall /* 201 - reserved - MacOnLinux - new */ - .long sys_getdents64 /* 202 */ - .long sys_pivot_root /* 203 */ - .long sys_fcntl64 /* 204 */ - .long sys_madvise /* 205 */ - .long sys_mincore /* 206 */ + .long sys_getdents64 + .long sys_pivot_root + .long sys_fcntl64 + .long sys_madvise /* 205 */ + .long sys_mincore + .long sys_gettid .rept NR_syscalls-(.-sys_call_table)/4 .long sys_ni_syscall .endr diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/oak_setup.c linux/arch/ppc/kernel/oak_setup.c --- v2.4.13/linux/arch/ppc/kernel/oak_setup.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/oak_setup.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.oak_setup.c 1.8 08/15/01 21:48:38 paulus + * BK Id: SCCS/s.oak_setup.c 1.10 10/18/01 11:16:28 trini */ /* * @@ -128,12 +128,7 @@ ppc_md.kbd_unexpected_up = NULL; ppc_md.kbd_leds = NULL; ppc_md.kbd_init_hw = NULL; - -#if defined(CONFIG_MAGIC_SYSRQ) ppc_md.ppc_kbd_sysrq_xlate = NULL; -#endif - - return; } /* diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/open_pic.c linux/arch/ppc/kernel/open_pic.c --- v2.4.13/linux/arch/ppc/kernel/open_pic.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/open_pic.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.open_pic.c 1.28 09/08/01 15:47:42 paulus + * BK Id: SCCS/s.open_pic.c 1.31 10/11/01 12:09:11 trini */ /* * arch/ppc/kernel/open_pic.c -- OpenPIC Interrupt Handling @@ -515,10 +515,9 @@ #define physmask(cpumask) (cpumask) #endif -void openpic_init_processor(u_int cpumask) +void openpic_reset_processor_phys(u_int mask) { - openpic_write(&OpenPIC->Global.Processor_Initialization, - physmask(cpumask)); + openpic_write(&OpenPIC->Global.Processor_Initialization, mask); } static spinlock_t openpic_setup_lock = SPIN_LOCK_UNLOCKED; diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/open_pic.h linux/arch/ppc/kernel/open_pic.h --- v2.4.13/linux/arch/ppc/kernel/open_pic.h Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/open_pic.h Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.open_pic.h 1.12 08/20/01 22:33:28 paulus + * BK Id: SCCS/s.open_pic.h 1.14 10/11/01 12:09:12 trini */ /* * arch/ppc/kernel/open_pic.h -- OpenPIC Interrupt Handling @@ -46,7 +46,7 @@ extern void openpic_request_IPIs(void); extern void do_openpic_setup_cpu(void); extern int openpic_get_irq(struct pt_regs *regs); -extern void openpic_init_processor(u_int cpumask); +extern void openpic_reset_processor_phys(u_int cpumask); extern void openpic_setup_ISU(int isu_num, unsigned long addr); extern void openpic_cause_IPI(u_int ipi, u_int cpumask); extern void smp_openpic_message_pass(int target, int msg, unsigned long data, diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/pci.c linux/arch/ppc/kernel/pci.c --- v2.4.13/linux/arch/ppc/kernel/pci.c Mon Aug 27 12:41:39 2001 +++ linux/arch/ppc/kernel/pci.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.pci.c 1.28 08/08/01 16:35:43 paulus + * BK Id: SCCS/s.pci.c 1.31 11/01/01 12:24:55 trini */ /* * Common pmac/prep/chrp pci routines. -- Cort @@ -39,6 +39,8 @@ unsigned long isa_io_base = 0; unsigned long isa_mem_base = 0; unsigned long pci_dram_offset = 0; + +void pcibios_make_OF_bus_map(void); static void pcibios_fixup_resources(struct pci_dev* dev); static void fixup_broken_pcnet32(struct pci_dev* dev); diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/pmac_setup.c linux/arch/ppc/kernel/pmac_setup.c --- v2.4.13/linux/arch/ppc/kernel/pmac_setup.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/pmac_setup.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.pmac_setup.c 1.39 09/08/01 15:47:42 paulus + * BK Id: SCCS/s.pmac_setup.c 1.41 10/18/01 11:16:28 trini */ /* * linux/arch/ppc/kernel/setup.c @@ -94,11 +94,9 @@ char raw_mode); extern char mac_hid_kbd_unexpected_up(unsigned char keycode); extern void mac_hid_init_hw(void); -#ifdef CONFIG_MAGIC_SYSRQ -extern unsigned char mac_hid_kbd_sysrq_xlate[128]; -extern unsigned char pckbd_sysrq_xlate[128]; -extern unsigned char mackbd_sysrq_xlate[128]; -#endif /* CONFIG_MAGIC_SYSRQ */ +extern unsigned char mac_hid_kbd_sysrq_xlate[]; +extern unsigned char pckbd_sysrq_xlate[]; +extern unsigned char mackbd_sysrq_xlate[]; extern int pckbd_setkeycode(unsigned int scancode, unsigned int keycode); extern int pckbd_getkeycode(unsigned int scancode); extern int pckbd_translate(unsigned char scancode, unsigned char *keycode, diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/ppc_asm.h linux/arch/ppc/kernel/ppc_asm.h --- v2.4.13/linux/arch/ppc/kernel/ppc_asm.h Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/ppc_asm.h Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.ppc_asm.h 1.16 08/15/01 22:43:06 paulus + * BK Id: SCCS/s.ppc_asm.h 1.18 10/18/01 15:02:09 trini */ /* * arch/ppc/kernel/ppc_asm.h @@ -156,22 +156,3 @@ #define MTMSRD(r) mtmsr r #define CLR_TOP32(r) #endif /* CONFIG_PPC64BRIDGE */ - -/* - * Defines for cache-line size etc. - */ -#if defined(CONFIG_4xx) || defined(CONFIG_8xx) -#define CACHE_LINE_SIZE 16 -#define LG_CACHE_LINE_SIZE 4 -#define MAX_COPY_PREFETCH 1 - -#elif !defined(CONFIG_PPC64BRIDGE) -#define CACHE_LINE_SIZE 32 -#define LG_CACHE_LINE_SIZE 5 -#define MAX_COPY_PREFETCH 4 - -#else -#define CACHE_LINE_SIZE 128 -#define LG_CACHE_LINE_SIZE 7 -#define MAX_COPY_PREFETCH 1 -#endif /* CONFIG_4xx || CONFIG_8xx */ diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/ppc_htab.c linux/arch/ppc/kernel/ppc_htab.c --- v2.4.13/linux/arch/ppc/kernel/ppc_htab.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/ppc_htab.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.ppc_htab.c 1.17 08/20/01 22:59:41 paulus + * BK Id: SCCS/s.ppc_htab.c 1.19 10/16/01 15:58:42 trini */ /* * PowerPC hash table management proc entry. Will show information @@ -115,10 +115,13 @@ size_t count, loff_t *ppos) { unsigned long mmcr0 = 0, pmc1 = 0, pmc2 = 0; - int n = 0, valid; + int n = 0; +#ifdef CONFIG_PPC_STD_MMU + int valid; unsigned int kptes = 0, uptes = 0, zombie_ptes = 0; PTE *ptr; struct task_struct *p; +#endif /* CONFIG_PPC_STD_MMU */ char buffer[512]; if (count < 0) @@ -206,9 +209,9 @@ "Evicts\t\t: %lu\n", htab_reloads, htab_preloads, htab_hash_searches, primary_pteg_full, htab_evicts); +return_string: #endif /* CONFIG_PPC_STD_MMU */ -return_string: n += sprintf( buffer + n, "Non-error misses: %lu\n" "Error misses\t: %lu\n", diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/ppc_ksyms.c linux/arch/ppc/kernel/ppc_ksyms.c --- v2.4.13/linux/arch/ppc/kernel/ppc_ksyms.c Tue Oct 9 17:06:51 2001 +++ linux/arch/ppc/kernel/ppc_ksyms.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.ppc_ksyms.c 1.55 10/02/01 12:33:42 trini + * BK Id: SCCS/s.ppc_ksyms.c 1.57 10/16/01 15:58:42 trini */ #include #include @@ -351,7 +351,7 @@ EXPORT_SYMBOL(set_context); EXPORT_SYMBOL(handle_mm_fault); /* For MOL */ EXPORT_SYMBOL_NOVERS(disarm_decr); -#if !defined(CONFIG_8xx) && !defined(CONFIG_4xx) +#ifdef CONFIG_PPC_STD_MMU EXPORT_SYMBOL(flush_hash_page); /* For MOL */ extern long *intercept_table; EXPORT_SYMBOL(intercept_table); diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/prep_setup.c linux/arch/ppc/kernel/prep_setup.c --- v2.4.13/linux/arch/ppc/kernel/prep_setup.c Tue Oct 23 22:48:49 2001 +++ linux/arch/ppc/kernel/prep_setup.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.prep_setup.c 1.38 09/15/01 09:13:52 trini + * BK Id: SCCS/s.prep_setup.c 1.41 10/18/01 11:16:28 trini */ /* * linux/arch/ppc/kernel/setup.c @@ -86,14 +86,14 @@ extern int pckbd_setkeycode(unsigned int scancode, unsigned int keycode); extern int pckbd_getkeycode(unsigned int scancode); extern int pckbd_translate(unsigned char scancode, unsigned char *keycode, - char raw_mode); + char raw_mode); extern char pckbd_unexpected_up(unsigned char keycode); extern void pckbd_leds(unsigned char leds); extern void pckbd_init_hw(void); -extern unsigned char pckbd_sysrq_xlate[128]; +extern unsigned char pckbd_sysrq_xlate[]; extern void prep_find_bridges(void); -extern char saved_command_line[256]; +extern char saved_command_line[]; int _prep_type; @@ -121,7 +121,7 @@ EXPORT_SYMBOL(ppc_cs4232_dma2); #endif -int __prep +static int __prep prep_get_cpuinfo(char *buffer) { extern char *Motherboard_map_name; @@ -131,11 +131,11 @@ #endif #ifdef CONFIG_SMP -#define CD(X) (cpu_data[n].X) +#define CD(X) (cpu_data[n].X) #else #define CD(X) (X) #endif - + len = sprintf(buffer,"machine\t\t: PReP %s\n",Motherboard_map_name); @@ -151,9 +151,10 @@ goto no_l2; } len += sprintf(buffer+len,"%sKb,", - (((*(unsigned char *)0x8000080d)>>2)&1)?"512":"256"); + (((*(unsigned char *)0x8000080d)>>2)&1) + ? "512" : "256"); len += sprintf(buffer+len,"%ssync\n", - ((*(unsigned char *)0x8000080d)>>7) ? "":"a"); + ((*(unsigned char *)0x8000080d)>>7) ? "" : "a"); break; case _PREP_Motorola: len += sprintf(buffer+len,"L2\t\t: "); @@ -174,26 +175,26 @@ break; default: len += sprintf(buffer+len, "%x\n", - *((unsigned char *)CACHECRBA)); + *((unsigned char *)CACHECRBA)); } len += sprintf(buffer+len,",parity %s", - (*((unsigned char *)CACHECRBA) & L2CACHE_PARITY) ? - "enabled" : "disabled"); - + (*((unsigned char *)CACHECRBA) & L2CACHE_PARITY) + ? "enabled" : "disabled"); + len += sprintf(buffer+len, " SRAM:"); switch ( ((*((unsigned char *)CACHECRBA) & 0xf0) >> 4) & ~(0x3) ) { case 1: len += sprintf(buffer+len, - "synchronous,parity,flow-through\n"); + "synchronous,parity,flow-through\n"); break; case 2: len += sprintf(buffer+len,"asynchronous,no parity\n"); break; case 3: len += sprintf(buffer+len,"asynchronous,parity\n"); break; default:len += sprintf(buffer+len, - "synchronous,pipelined,no parity\n"); + "synchronous,pipelined,no parity\n"); break; } break; @@ -214,17 +215,17 @@ for ( i = 0 ; (res->ActualNumMemories) && (i < MAX_MEMS) ; i++ ) { if ( res->Memories[i].SIMMSize != 0 ) - len += sprintf(buffer+len,"%d:%ldM ",i, - (res->Memories[i].SIMMSize > 1024) ? - res->Memories[i].SIMMSize>>20 : - res->Memories[i].SIMMSize); + len += sprintf(buffer+len,"%d:%ldM ", i, + (res->Memories[i].SIMMSize > 1024) ? + res->Memories[i].SIMMSize>>20 : + res->Memories[i].SIMMSize); } len += sprintf(buffer+len,"\n"); return len; #endif } -void __init +static void __init prep_setup_arch(void) { unsigned char reg; @@ -277,20 +278,19 @@ break; } - /* Read in NVRAM data */ - init_prep_nvram(); - - /* if no bootargs, look in NVRAM */ - if ( cmd_line[0] == '\0' ) { - char *bootargs; - bootargs = prep_nvram_get_var("bootargs"); - if (bootargs != NULL) { - strcpy(cmd_line, bootargs); - - /* again.. */ - strcpy(saved_command_line, cmd_line); - } - } + /* Read in NVRAM data */ + init_prep_nvram(); + + /* if no bootargs, look in NVRAM */ + if ( cmd_line[0] == '\0' ) { + char *bootargs; + bootargs = prep_nvram_get_var("bootargs"); + if (bootargs != NULL) { + strcpy(cmd_line, bootargs); + /* again.. */ + strcpy(saved_command_line, cmd_line); + } + } #ifdef CONFIG_SOUND_CS4232 /* @@ -303,11 +303,11 @@ if ( _machine == _MACH_prep ) { extern struct card_info snd_installed_cards[]; - struct card_info *snd_ptr; + struct card_info *snd_ptr; for ( snd_ptr = snd_installed_cards; - snd_ptr < &snd_installed_cards[num_sound_cards]; - snd_ptr++ ) + snd_ptr < &snd_installed_cards[num_sound_cards]; + snd_ptr++ ) { if ( snd_ptr->card_type == SNDCARD_CS4232 ) { @@ -321,7 +321,7 @@ if ( _prep_type == _PREP_IBM ) { snd_ptr->config.io_base = 0x530; - snd_ptr->config.irq = 5; + snd_ptr->config.irq = 5; snd_ptr->config.dma = ppc_cs4232_dma = 1; /* this is wrong - but leave it for now */ snd_ptr->config.dma2 = ppc_cs4232_dma2 = 7; @@ -357,17 +357,23 @@ * This allows for a faster boot as we do not need to calibrate the * decrementer against another clock. This is important for embedded systems. */ -void __init prep_res_calibrate_decr(void) +static int __init +prep_res_calibrate_decr(void) { -#ifdef CONFIG_PREP_RESIDUAL - unsigned long freq, divisor=4; +#ifdef CONFIG_PREP_RESIDUAL + unsigned long freq, divisor = 4; - freq = res->VitalProductData.ProcessorBusHz; - printk("time_init: decrementer frequency = %lu.%.6lu MHz\n", - (freq/divisor)/1000000, (freq/divisor)%1000000); - tb_ticks_per_jiffy = freq / HZ / divisor; - tb_to_us = mulhwu_scale_factor(freq/divisor, 1000000); + if ( res->VitalProductData.ProcessorBusHz ) { + freq = res->VitalProductData.ProcessorBusHz; + printk("time_init: decrementer frequency = %lu.%.6lu MHz\n", + (freq/divisor)/1000000, + (freq/divisor)%1000000); + tb_to_us = mulhwu_scale_factor(freq/divisor, 1000000); + tb_ticks_per_jiffy = freq / HZ / divisor; + return 0; + } else #endif + return 1; } /* @@ -383,10 +389,8 @@ static volatile int calibrate_steps __initdata = 3; static unsigned tbstamp __initdata = 0; -void __init -prep_calibrate_decr_handler(int irq, - void *dev, - struct pt_regs *regs) +static void __init +prep_calibrate_decr_handler(int irq, void *dev, struct pt_regs *regs) { unsigned long t, freq; int step=--calibrate_steps; @@ -397,44 +401,54 @@ } else { freq = (t - tbstamp)*HZ; printk("time_init: decrementer frequency = %lu.%.6lu MHz\n", - freq/1000000, freq%1000000); + freq/1000000, freq%1000000); tb_ticks_per_jiffy = freq / HZ; tb_to_us = mulhwu_scale_factor(freq, 1000000); } } -void __init prep_calibrate_decr(void) +static void __init +prep_calibrate_decr(void) { - unsigned long flags; + int res; + + /* Try and get this from the residual data. */ + res = prep_res_calibrate_decr(); + /* If we didn't get it from the residual data, try this. */ + if ( res ) { + unsigned long flags; - save_flags(flags); + save_flags(flags); #define TIMER0_COUNT 0x40 #define TIMER_CONTROL 0x43 - /* set timer to periodic mode */ - outb_p(0x34,TIMER_CONTROL);/* binary, mode 2, LSB/MSB, ch 0 */ - /* set the clock to ~100 Hz */ - outb_p(LATCH & 0xff , TIMER0_COUNT); /* LSB */ - outb(LATCH >> 8 , TIMER0_COUNT); /* MSB */ - - if (request_irq(0, prep_calibrate_decr_handler, 0, "timer", NULL) != 0) - panic("Could not allocate timer IRQ!"); - __sti(); - while ( calibrate_steps ) /* nothing */; /* wait for calibrate */ - restore_flags(flags); - free_irq( 0, NULL); + /* set timer to periodic mode */ + outb_p(0x34,TIMER_CONTROL);/* binary, mode 2, LSB/MSB, ch 0 */ + /* set the clock to ~100 Hz */ + outb_p(LATCH & 0xff , TIMER0_COUNT); /* LSB */ + outb(LATCH >> 8 , TIMER0_COUNT); /* MSB */ + + if (request_irq(0, prep_calibrate_decr_handler, 0, "timer", NULL) != 0) + panic("Could not allocate timer IRQ!"); + __sti(); + /* wait for calibrate */ + while ( calibrate_steps ) + ; + restore_flags(flags); + free_irq( 0, NULL); + } } - -static long __init mk48t59_init(void) { +static long __init +mk48t59_init(void) { unsigned char tmp; tmp = ppc_md.nvram_read_val(MK48T59_RTC_CONTROLB); if (tmp & MK48T59_RTC_CB_STOP) { printk("Warning: RTC was stopped, date will be wrong.\n"); ppc_md.nvram_write_val(MK48T59_RTC_CONTROLB, - tmp & ~MK48T59_RTC_CB_STOP); + tmp & ~MK48T59_RTC_CB_STOP); /* Low frequency crystal oscillators may take a very long * time to startup and stabilize. For now just ignore the * the issue, but attempting to calibrate the decrementer @@ -454,12 +468,13 @@ * the RTC registers have just been set up in the right state by the * preceding routine. */ -void __init mk48t59_calibrate_decr(void) +static void __init +mk48t59_calibrate_decr(void) { unsigned long freq; unsigned long t1; - unsigned char save_control; - long i; + unsigned char save_control; + long i; unsigned char sec; @@ -467,7 +482,7 @@ save_control = ppc_md.nvram_read_val(MK48T59_RTC_CONTROLB); ppc_md.nvram_write_val(MK48T59_RTC_CONTROLA, - (save_control & (~MK48T59_RTC_CB_STOP))); + (save_control & (~MK48T59_RTC_CB_STOP))); /* Now make sure the read bit is off so the value will change. */ save_control = ppc_md.nvram_read_val(MK48T59_RTC_CONTROLA); @@ -484,27 +499,26 @@ * stamp with a loop count as parameter would be the solution. */ for (i = 0 ; i < 1000000 ; i++) { /* may take up to 1 second... */ - t1 = get_tbl(); - if (ppc_md.nvram_read_val(MK48T59_RTC_SECONDS) != sec) { - break; - } + t1 = get_tbl(); + if (ppc_md.nvram_read_val(MK48T59_RTC_SECONDS) != sec) { + break; + } } sec = ppc_md.nvram_read_val(MK48T59_RTC_SECONDS); for (i = 0 ; i < 1000000 ; i++) { /* Should take up 1 second... */ - freq = get_tbl()-t1; - if (ppc_md.nvram_read_val(MK48T59_RTC_SECONDS) != sec) { - break; - } + freq = get_tbl()-t1; + if (ppc_md.nvram_read_val(MK48T59_RTC_SECONDS) != sec) + break; } printk("time_init: decrementer frequency = %lu.%.6lu MHz\n", - freq/1000000, freq%1000000); + freq/1000000, freq%1000000); tb_ticks_per_jiffy = freq / HZ; tb_to_us = mulhwu_scale_factor(freq, 1000000); } -void __prep +static void __prep prep_restart(char *cmd) { unsigned long i = 10000; @@ -523,33 +537,7 @@ panic("restart failed\n"); } -/* - * This function will restart a board regardless of port 92 functionality - */ -void __prep -prep_direct_restart(char *cmd) -{ - u32 jumpaddr=0xfff00100; - u32 defaultmsr=MSR_IP; - - /* - * This will ALWAYS work regardless of port 92 - * functionality - */ - __cli(); - - __asm__ __volatile__("\n\ - mtspr 26, %1 /* SRR0 */ \n\ - mtspr 27, %0 /* SRR1 */ \n\ - rfi" - : - : "r" (defaultmsr), "r" (jumpaddr)); - /* - * Not reached - */ -} - -void __prep +static void __prep prep_halt(void) { unsigned long flags; @@ -615,7 +603,7 @@ udelay(100); /* important: let controller recover */ } -void __prep +static void __prep prep_power_off(void) { if ( _prep_type == _PREP_IBM) { @@ -640,19 +628,19 @@ } } -int __prep +static int __prep prep_setup_residual(char *buffer) { - int len = 0; + int len = 0; /* PREP's without residual data will give incorrect values here */ len += sprintf(len+buffer, "clock\t\t: "); #ifdef CONFIG_PREP_RESIDUAL if ( res->ResidualLength ) len += sprintf(len+buffer, "%ldMHz\n", - (res->VitalProductData.ProcessorHz > 1024) ? - res->VitalProductData.ProcessorHz>>20 : - res->VitalProductData.ProcessorHz); + (res->VitalProductData.ProcessorHz > 1024) ? + res->VitalProductData.ProcessorHz>>20 : + res->VitalProductData.ProcessorHz); else #endif /* CONFIG_PREP_RESIDUAL */ len += sprintf(len+buffer, "???\n"); @@ -660,7 +648,7 @@ return len; } -u_int __prep +static unsigned int __prep prep_irq_cannonicalize(u_int irq) { if (irq == 2) @@ -673,29 +661,29 @@ } } -int __prep +static int __prep prep_get_irq(struct pt_regs *regs) { return i8259_irq(smp_processor_id()); } -void __init +static void __init prep_init_IRQ(void) { int i; if (OpenPIC_Addr != NULL) openpic_init(1, NUM_8259_INTERRUPTS, 0, -1); - for ( i = 0 ; i < NUM_8259_INTERRUPTS ; i++ ) - irq_desc[i].handler = &i8259_pic; - i8259_init(); + for ( i = 0 ; i < NUM_8259_INTERRUPTS ; i++ ) + irq_desc[i].handler = &i8259_pic; + i8259_init(); } #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) /* * IDE stuff. */ -int __prep +static int __prep prep_ide_default_irq(ide_ioreg_t base) { switch (base) { @@ -709,7 +697,7 @@ } } -ide_ioreg_t __prep +static ide_ioreg_t __prep prep_ide_default_io_base(int index) { switch (index) { @@ -718,17 +706,17 @@ case 2: return 0x1e8; case 3: return 0x168; default: - return 0; + return 0; } } -int __prep +static int __prep prep_ide_check_region(ide_ioreg_t from, unsigned int extent) { - return check_region(from, extent); + return check_region(from, extent); } -void __prep +static void __prep prep_ide_request_region(ide_ioreg_t from, unsigned int extent, const char *name) @@ -736,14 +724,14 @@ request_region(from, extent, name); } -void __prep +static void __prep prep_ide_release_region(ide_ioreg_t from, unsigned int extent) { release_region(from, extent); } -void __init +static void __init prep_ide_init_hwif_ports (hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq) { ide_ioreg_t reg = data_port; @@ -756,7 +744,7 @@ if (ctrl_port) { hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port; } else { - hw->io_ports[IDE_CONTROL_OFFSET] = hw->io_ports[IDE_DATA_OFFSET] + 0x206; + hw->io_ports[IDE_CONTROL_OFFSET] = hw->io_ports[IDE_DATA_OFFSET] + 0x206; } if (irq != NULL) *irq = 0; @@ -765,7 +753,7 @@ #ifdef CONFIG_SMP /* PReP (MTX) support */ -static int +static int __init smp_prep_probe(void) { extern int mot_multi; @@ -779,7 +767,7 @@ return 1; } -static void +static void __init smp_prep_kick_cpu(int nr) { *(unsigned long *)KERNELBASE = nr; @@ -787,14 +775,14 @@ printk("CPU1 reset, waiting\n"); } -static void +static void __init smp_prep_setup_cpu(int cpu_nr) { if (OpenPIC_Addr) do_openpic_setup_cpu(); } -static struct smp_ops_t prep_smp_ops = { +static struct smp_ops_t prep_smp_ops __prepdata = { smp_openpic_message_pass, smp_prep_probe, smp_prep_kick_cpu, @@ -808,7 +796,8 @@ * this will likely stay separate from the pmac. * -- Cort */ -unsigned long __init prep_find_end_of_memory(void) +static unsigned long __init +prep_find_end_of_memory(void) { unsigned long total = 0; extern unsigned int boot_mem_size; @@ -819,15 +808,14 @@ if (total == 0 && boot_mem_size != 0) total = boot_mem_size; - - if (total == 0) { + else if (total == 0) { /* * I need a way to probe the amount of memory if the residual * data doesn't contain it. -- Cort */ total = 0x02000000; printk(KERN_INFO "Ramsize from residual data was 0" - " -- defaulting to %ldM\n", total>>20); + " -- defaulting to %ldM\n", total>>20); } return (total); @@ -838,16 +826,17 @@ * the io areas. RAM was mapped by mapin_ram(). * -- Cort */ -void __init prep_map_io(void) +static void __init +prep_map_io(void) { io_block_mapping(0x80000000, PREP_ISA_IO_BASE, 0x10000000, _PAGE_IO); io_block_mapping(0xf0000000, PREP_ISA_MEM_BASE, 0x08000000, _PAGE_IO); } -void __init +static void __init prep_init2(void) { -#ifdef CONFIG_NVRAM +#ifdef CONFIG_NVRAM request_region(PREP_NVRAM_AS0, 0x8, "nvram"); #endif request_region(0x20,0x20,"pic1"); @@ -860,7 +849,7 @@ void __init prep_init(unsigned long r3, unsigned long r4, unsigned long r5, - unsigned long r6, unsigned long r7) + unsigned long r6, unsigned long r7) { #ifdef CONFIG_PREP_RESIDUAL RESIDUAL *old_res = (RESIDUAL *)(r3 + KERNELBASE); @@ -869,7 +858,7 @@ if ( r3 ) { memcpy((void *)res,(void *)(r3+KERNELBASE), - sizeof(RESIDUAL)); + sizeof(RESIDUAL)); } #endif @@ -882,7 +871,7 @@ #endif /* CONFIG_BLK_DEV_INITRD */ /* Copy cmd_line parameters */ - if ( r6) + if ( r6 ) { *(char *)(r7 + KERNELBASE) = 0; strcpy(cmd_line, (char *)(r6 + KERNELBASE)); @@ -905,7 +894,7 @@ _prep_type = _PREP_Motorola; } else /* assume motorola if no residual (netboot?) */ -#endif +#endif { _prep_type = _PREP_Motorola; } @@ -928,8 +917,7 @@ ppc_md.set_rtc_time = mc146818_set_rtc_time; ppc_md.get_rtc_time = mc146818_get_rtc_time; ppc_md.calibrate_decr = prep_calibrate_decr; - } - else { + } else { ppc_md.set_rtc_time = mk48t59_set_rtc_time; ppc_md.get_rtc_time = mk48t59_get_rtc_time; ppc_md.calibrate_decr = mk48t59_calibrate_decr; @@ -940,12 +928,12 @@ ppc_md.setup_io_mappings = prep_map_io; #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) - ppc_ide_md.default_irq = prep_ide_default_irq; - ppc_ide_md.default_io_base = prep_ide_default_io_base; - ppc_ide_md.ide_check_region = prep_ide_check_region; - ppc_ide_md.ide_request_region = prep_ide_request_region; - ppc_ide_md.ide_release_region = prep_ide_release_region; - ppc_ide_md.ide_init_hwif = prep_ide_init_hwif_ports; + ppc_ide_md.default_irq = prep_ide_default_irq; + ppc_ide_md.default_io_base = prep_ide_default_io_base; + ppc_ide_md.ide_check_region = prep_ide_check_region; + ppc_ide_md.ide_request_region = prep_ide_request_region; + ppc_ide_md.ide_release_region = prep_ide_release_region; + ppc_ide_md.ide_init_hwif = prep_ide_init_hwif_ports; #endif #ifdef CONFIG_VT diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/setup.c linux/arch/ppc/kernel/setup.c --- v2.4.13/linux/arch/ppc/kernel/setup.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/setup.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.setup.c 1.57 09/08/01 15:47:42 paulus + * BK Id: SCCS/s.setup.c 1.61 10/12/01 16:35:34 trini */ /* * Common prep/pmac/chrp boot and setup code. @@ -496,7 +496,7 @@ #ifdef CONFIG_BLK_DEV_INITRD case BI_INITRD: initrd_start = data[0]; - initrd_end = data[0] + rec->size; + initrd_end = data[0] + data[1]; break; #endif /* CONFIG_BLK_DEV_INITRD */ #ifdef CONFIG_ALL_PPC diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/smp.c linux/arch/ppc/kernel/smp.c --- v2.4.13/linux/arch/ppc/kernel/smp.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/kernel/smp.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.smp.c 1.31 09/08/01 15:47:42 paulus + * BK Id: SCCS/s.smp.c 1.34 10/11/01 12:06:01 trini */ /* * Smp support for ppc. @@ -35,7 +35,6 @@ #include #include #include -#include #include #include "open_pic.h" @@ -283,6 +282,7 @@ printk("Entering SMP Mode...\n"); smp_num_cpus = 1; smp_store_cpu_info(0); + cpu_online_map = 1UL; /* * assume for now that the first cpu booted is diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/syscalls.c linux/arch/ppc/kernel/syscalls.c --- v2.4.13/linux/arch/ppc/kernel/syscalls.c Mon May 21 17:04:47 2001 +++ linux/arch/ppc/kernel/syscalls.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.syscalls.c 1.8 05/17/01 18:14:22 cort + * BK Id: SCCS/s.syscalls.c 1.11 10/16/01 15:58:42 trini */ /* * linux/arch/ppc/kernel/sys_ppc.c @@ -306,7 +306,7 @@ * Those are normally defined in arch/ppc/kernel/pci.c. But when CONFIG_PCI is * not defined, this file is not linked at all, so here are the "empty" versions */ -asmlinkage int sys_pciconfig_read() { return -ENOSYS; } -asmlinkage int sys_pciconfig_write() { return -ENOSYS; } -asmlinkage long sys_pciconfig_iobase() { return -ENOSYS; } +int sys_pciconfig_read(void) { return -ENOSYS; } +int sys_pciconfig_write(void) { return -ENOSYS; } +long sys_pciconfig_iobase(void) { return -ENOSYS; } #endif diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/traps.c linux/arch/ppc/kernel/traps.c --- v2.4.13/linux/arch/ppc/kernel/traps.c Tue Oct 9 17:06:51 2001 +++ linux/arch/ppc/kernel/traps.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.traps.c 1.19 08/24/01 20:07:37 paulus + * BK Id: SCCS/s.traps.c 1.22 10/11/01 10:33:09 paulus */ /* * linux/arch/ppc/kernel/traps.c @@ -108,6 +108,7 @@ #ifdef CONFIG_ALL_PPC unsigned long fixup; #endif /* CONFIG_ALL_PPC */ + unsigned long msr = regs->msr; if (user_mode(regs)) { _exception(SIGSEGV, regs); @@ -132,31 +133,47 @@ * Check if the NIP corresponds to the address of a sync * instruction for which there is an entry in the exception * table. + * Note that the 601 only takes a machine check on TEA + * (transfer error ack) signal assertion, and does not + * set of the top 16 bits of SRR1. + * -- paulus. */ - if (regs->msr & (0x80000 | 0x40000) + if (((msr & 0xffff0000) == 0 || (msr & (0x80000 | 0x40000))) && (fixup = search_exception_table(regs->nip)) != 0) { /* - * Check that it's a sync instruction. + * Check that it's a sync instruction, or somewhere + * in the twi; isync; nop sequence that inb/inw/inl uses. * As the address is in the exception table * we should be able to read the instr there. + * For the debug message, we look at the preceding + * load or store. */ - if (*(unsigned int *)regs->nip == 0x7c0004ac) { - unsigned int lsi = ((unsigned int *)regs->nip)[-1]; - int rb = (lsi >> 11) & 0x1f; - printk(KERN_DEBUG "%s bad port %lx at %lx\n", - (lsi & 0x100)? "OUT to": "IN from", - regs->gpr[rb] - _IO_BASE, regs->nip); + unsigned int *nip = (unsigned int *)regs->nip; + if (*nip == 0x60000000) /* nop */ + nip -= 2; + else if (*nip == 0x4c00012c) /* isync */ + --nip; + if (*nip == 0x7c0004ac || (*nip >> 26) == 3) { + /* sync or twi */ + unsigned int rb; + + --nip; + rb = (*nip >> 11) & 0x1f; + printk(KERN_DEBUG "%s bad port %lx at %p\n", + (*nip & 0x100)? "OUT to": "IN from", + regs->gpr[rb] - _IO_BASE, nip); regs->nip = fixup; return; } } #endif /* CONFIG_ALL_PPC */ printk("Machine check in kernel mode.\n"); - printk("Caused by (from SRR1=%lx): ", regs->msr); - switch (regs->msr & 0xF0000) { + printk("Caused by (from SRR1=%lx): ", msr); + switch (msr & 0xF0000) { case 0x80000: printk("Machine check signal\n"); break; + case 0: /* for 601 */ case 0x40000: printk("Transfer error ack signal\n"); break; diff -u --recursive --new-file v2.4.13/linux/arch/ppc/kernel/walnut_setup.c linux/arch/ppc/kernel/walnut_setup.c --- v2.4.13/linux/arch/ppc/kernel/walnut_setup.c Mon May 21 17:04:47 2001 +++ linux/arch/ppc/kernel/walnut_setup.c Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.walnut_setup.c 1.5 05/17/01 18:14:22 cort + * BK Id: SCCS/s.walnut_setup.c 1.8 10/18/01 11:16:28 trini */ /* * @@ -123,12 +123,7 @@ ppc_md.kbd_unexpected_up = NULL; ppc_md.kbd_leds = NULL; ppc_md.kbd_init_hw = NULL; - -#if defined(CONFIG_MAGIC_SYSRQ) ppc_md.ppc_kbd_sysrq_xlate = NULL; -#endif - - return; } /* diff -u --recursive --new-file v2.4.13/linux/arch/ppc/lib/string.S linux/arch/ppc/lib/string.S --- v2.4.13/linux/arch/ppc/lib/string.S Mon May 21 17:04:47 2001 +++ linux/arch/ppc/lib/string.S Fri Nov 2 17:43:54 2001 @@ -1,5 +1,5 @@ /* - * BK Id: SCCS/s.string.S 1.5 05/17/01 18:14:22 cort + * BK Id: SCCS/s.string.S 1.9 10/25/01 10:08:51 trini */ /* * String handling functions for PowerPC. @@ -14,22 +14,9 @@ #include "../kernel/ppc_asm.tmpl" #include #include +#include #include -#if defined(CONFIG_4xx) || defined(CONFIG_8xx) -#define CACHE_LINE_SIZE 16 -#define LG_CACHE_LINE_SIZE 4 -#define MAX_COPY_PREFETCH 1 -#elif !defined(CONFIG_PPC64BRIDGE) -#define CACHE_LINE_SIZE 32 -#define LG_CACHE_LINE_SIZE 5 -#define MAX_COPY_PREFETCH 4 -#else -#define CACHE_LINE_SIZE 128 -#define LG_CACHE_LINE_SIZE 7 -#define MAX_COPY_PREFETCH 1 -#endif /* CONFIG_4xx || CONFIG_8xx */ - #define COPY_16_BYTES \ lwz r7,4(r4); \ lwz r8,8(r4); \ @@ -75,11 +62,13 @@ .long 8 ## n ## 5b,9 ## n ## 1b; \ .long 8 ## n ## 6b,9 ## n ## 1b; \ .long 8 ## n ## 7b,9 ## n ## 1b; \ -.text + .text + + .text -CACHELINE_BYTES = CACHE_LINE_SIZE -LG_CACHELINE_BYTES = LG_CACHE_LINE_SIZE -CACHELINE_MASK = (CACHE_LINE_SIZE-1) +CACHELINE_BYTES = L1_CACHE_LINE_SIZE +LG_CACHELINE_BYTES = LG_L1_CACHE_LINE_SIZE +CACHELINE_MASK = (L1_CACHE_LINE_SIZE-1) .globl strcpy strcpy: @@ -278,12 +267,12 @@ dcbz r11,r6 #endif COPY_16_BYTES -#if CACHE_LINE_SIZE >= 32 +#if L1_CACHE_LINE_SIZE >= 32 COPY_16_BYTES -#if CACHE_LINE_SIZE >= 64 +#if L1_CACHE_LINE_SIZE >= 64 COPY_16_BYTES COPY_16_BYTES -#if CACHE_LINE_SIZE >= 128 +#if L1_CACHE_LINE_SIZE >= 128 COPY_16_BYTES COPY_16_BYTES COPY_16_BYTES @@ -456,23 +445,23 @@ #if !defined(CONFIG_8xx) /* Here we decide how far ahead to prefetch the source */ -#if MAX_COPY_PREFETCH > 1 +#if MAX_L1_COPY_PREFETCH > 1 /* Heuristically, for large transfers we prefetch - MAX_COPY_PREFETCH cachelines ahead. For small transfers + MAX_L1_COPY_PREFETCH cachelines ahead. For small transfers we prefetch 1 cacheline ahead. */ - cmpwi r0,MAX_COPY_PREFETCH + cmpwi r0,MAX_L1_COPY_PREFETCH li r7,1 li r3,4 ble 111f - li r7,MAX_COPY_PREFETCH + li r7,MAX_L1_COPY_PREFETCH 111: mtctr r7 112: dcbt r3,r4 addi r3,r3,CACHELINE_BYTES bdnz 112b -#else /* MAX_COPY_PREFETCH == 1 */ +#else /* MAX_L1_COPY_PREFETCH == 1 */ li r3,CACHELINE_BYTES + 4 dcbt r11,r4 -#endif /* MAX_COPY_PREFETCH */ +#endif /* MAX_L1_COPY_PREFETCH */ #endif /* CONFIG_8xx */ mtctr r0 @@ -492,12 +481,12 @@ .text /* the main body of the cacheline loop */ COPY_16_BYTES_WITHEX(0) -#if CACHE_LINE_SIZE >= 32 +#if L1_CACHE_LINE_SIZE >= 32 COPY_16_BYTES_WITHEX(1) -#if CACHE_LINE_SIZE >= 64 +#if L1_CACHE_LINE_SIZE >= 64 COPY_16_BYTES_WITHEX(2) COPY_16_BYTES_WITHEX(3) -#if CACHE_LINE_SIZE >= 128 +#if L1_CACHE_LINE_SIZE >= 128 COPY_16_BYTES_WITHEX(4) COPY_16_BYTES_WITHEX(5) COPY_16_BYTES_WITHEX(6) @@ -546,12 +535,12 @@ * 104f (if in read part) or 105f (if in write part), after updating r5 */ COPY_16_BYTES_EXCODE(0) -#if CACHE_LINE_SIZE >= 32 +#if L1_CACHE_LINE_SIZE >= 32 COPY_16_BYTES_EXCODE(1) -#if CACHE_LINE_SIZE >= 64 +#if L1_CACHE_LINE_SIZE >= 64 COPY_16_BYTES_EXCODE(2) COPY_16_BYTES_EXCODE(3) -#if CACHE_LINE_SIZE >= 128 +#if L1_CACHE_LINE_SIZE >= 128 COPY_16_BYTES_EXCODE(4) COPY_16_BYTES_EXCODE(5) COPY_16_BYTES_EXCODE(6) diff -u --recursive --new-file v2.4.13/linux/arch/ppc/mm/4xx_mmu.c linux/arch/ppc/mm/4xx_mmu.c --- v2.4.13/linux/arch/ppc/mm/4xx_mmu.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/mm/4xx_mmu.c Fri Nov 2 17:43:54 2001 @@ -69,15 +69,15 @@ * be applied to every page which is a member of a given zone. At * present, we utilize only two of the 4xx's zones. * The zone index bits (of ZSEL) in the PTE are used for software - * indicators, except the LSB. For user access, zone 15 is used, - * for kernel access, zone 14 is used. We set all but zone 15 + * indicators, except the LSB. For user access, zone 1 is used, + * for kernel access, zone 0 is used. We set all but zone 1 * to zero, allowing only kernel access as indicated in the PTE. - * For zone 15, we set a 01 binary (a value of 10 will not work) + * For zone 1, we set a 01 binary (a value of 10 will not work) * to allow user access as indicated in the PTE. This also allows * kernel access as indicated in the PTE. */ - mtspr(SPRN_ZPR, 0x00000001); + mtspr(SPRN_ZPR, 0x10000000); flush_instruction_cache(); diff -u --recursive --new-file v2.4.13/linux/arch/ppc/mm/cachemap.c linux/arch/ppc/mm/cachemap.c --- v2.4.13/linux/arch/ppc/mm/cachemap.c Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/mm/cachemap.c Fri Nov 2 17:43:54 2001 @@ -50,6 +50,8 @@ #include #include +extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep); + void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle) { int order, rsize; diff -u --recursive --new-file v2.4.13/linux/arch/ppc/mm/mmu_decl.h linux/arch/ppc/mm/mmu_decl.h --- v2.4.13/linux/arch/ppc/mm/mmu_decl.h Sun Sep 23 11:40:56 2001 +++ linux/arch/ppc/mm/mmu_decl.h Fri Nov 2 17:43:54 2001 @@ -53,6 +53,7 @@ #elif defined(CONFIG_4xx) #define flush_HPTE(X, va, pg) _tlbie(va) +extern void MMU_init_hw(void); #else /* anything except 4xx or 8xx */ diff -u --recursive --new-file v2.4.13/linux/arch/sh/kernel/pci-sh7751.c linux/arch/sh/kernel/pci-sh7751.c --- v2.4.13/linux/arch/sh/kernel/pci-sh7751.c Sun Sep 23 11:40:56 2001 +++ linux/arch/sh/kernel/pci-sh7751.c Sun Nov 4 09:31:58 2001 @@ -3,7 +3,7 @@ * * Dustin McIntire (dustin@sensoria.com) * Derived from arch/i386/kernel/pci-*.c which bore the message: - * (c) 1999--2000 Martin Mares + * (c) 1999--2000 Martin Mares * * May be copied or modified under the terms of the GNU General Public * License. See linux/COPYING for more information. diff -u --recursive --new-file v2.4.13/linux/arch/sparc/defconfig linux/arch/sparc/defconfig --- v2.4.13/linux/arch/sparc/defconfig Wed Jul 25 17:10:19 2001 +++ linux/arch/sparc/defconfig Tue Oct 30 15:08:11 2001 @@ -70,7 +70,6 @@ CONFIG_FB=y CONFIG_DUMMY_CONSOLE=y # CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_E1355 is not set CONFIG_FB_SBUS=y CONFIG_FB_CGSIX=y CONFIG_FB_BWTWO=y @@ -128,6 +127,7 @@ # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set # CONFIG_BLK_DEV_LVM is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 @@ -153,6 +153,7 @@ CONFIG_IPV6=m # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set # # @@ -280,6 +281,7 @@ CONFIG_VFAT_FS=m CONFIG_EFS_FS=m # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set # CONFIG_TMPFS is not set # CONFIG_RAMFS is not set diff -u --recursive --new-file v2.4.13/linux/arch/sparc/kernel/check_asm.sh linux/arch/sparc/kernel/check_asm.sh --- v2.4.13/linux/arch/sparc/kernel/check_asm.sh Wed Aug 23 09:30:13 2000 +++ linux/arch/sparc/kernel/check_asm.sh Tue Oct 30 15:08:11 2001 @@ -11,7 +11,7 @@ echo " sizeof(struct $2_struct)," >> $4 ;; -ints) - sed -n -e '/check_asm_data:/,/\.size/p' <$2 | sed -e 's/check_asm_data://' -e 's/\.size.*//' -e 's/\.long[ ]\([0-9]*\)/\1,/' >>$3 + sed -n -e '/check_asm_data:/,/\.size/p' <$2 | sed -e 's/check_asm_data://' -e 's/\.size.*//' -e 's/\.ident.*//' -e 's/\.long[ ]\([0-9]*\)/\1,/' >>$3 ;; *) exit 1 diff -u --recursive --new-file v2.4.13/linux/arch/sparc/kernel/ioport.c linux/arch/sparc/kernel/ioport.c --- v2.4.13/linux/arch/sparc/kernel/ioport.c Sun Feb 18 19:49:44 2001 +++ linux/arch/sparc/kernel/ioport.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: ioport.c,v 1.44 2001/02/13 04:07:38 davem Exp $ +/* $Id: ioport.c,v 1.45 2001/10/30 04:54:21 davem Exp $ * ioport.c: Simple io mapping allocator. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -703,7 +703,7 @@ } } } -#endif CONFIG_PCI +#endif /* CONFIG_PCI */ #ifdef CONFIG_PROC_FS @@ -725,7 +725,7 @@ return p-buf; } -#endif CONFIG_PROC_FS +#endif /* CONFIG_PROC_FS */ /* * This is a version of find_resource and it belongs to kernel/resource.c. diff -u --recursive --new-file v2.4.13/linux/arch/sparc/kernel/sparc-stub.c linux/arch/sparc/kernel/sparc-stub.c --- v2.4.13/linux/arch/sparc/kernel/sparc-stub.c Tue Oct 10 10:33:51 2000 +++ linux/arch/sparc/kernel/sparc-stub.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: sparc-stub.c,v 1.27 2000/10/03 07:28:49 anton Exp $ +/* $Id: sparc-stub.c,v 1.28 2001/10/30 04:54:21 davem Exp $ * sparc-stub.c: KGDB support for the Linux kernel. * * Modifications to run under Linux @@ -330,17 +330,19 @@ * to arrange for a "return 0" upon a memory fault */ __asm__( - "1: ldub [%0], %1 - inc %0 - .section .fixup,#alloc,#execinstr - .align 4 - 2: retl - mov 0, %%o0 - .section __ex_table, #alloc - .align 4 - .word 1b, 2b - .text" - : "=r" (mem), "=r" (ch) : "0" (mem)); + "\n1:\n\t" + "ldub [%0], %1\n\t" + "inc %0\n\t" + ".section .fixup,#alloc,#execinstr\n\t" + ".align 4\n" + "2:\n\t" + "retl\n\t" + " mov 0, %%o0\n\t" + ".section __ex_table, #alloc\n\t" + ".align 4\n\t" + ".word 1b, 2b\n\t" + ".text\n" + : "=r" (mem), "=r" (ch) : "0" (mem)); *buf++ = hexchars[ch >> 4]; *buf++ = hexchars[ch & 0xf]; } @@ -364,17 +366,19 @@ ch |= hex(*buf++); /* Assembler code is *mem++ = ch; with return 0 on fault */ __asm__( - "1: stb %1, [%0] - inc %0 - .section .fixup,#alloc,#execinstr - .align 4 - 2: retl - mov 0, %%o0 - .section __ex_table, #alloc - .align 4 - .word 1b, 2b - .text" - : "=r" (mem) : "r" (ch) , "0" (mem)); + "\n1:\n\t" + "stb %1, [%0]\n\t" + "inc %0\n\t" + ".section .fixup,#alloc,#execinstr\n\t" + ".align 4\n" + "2:\n\t" + "retl\n\t" + " mov 0, %%o0\n\t" + ".section __ex_table, #alloc\n\t" + ".align 4\n\t" + ".word 1b, 2b\n\t" + ".text\n" + : "=r" (mem) : "r" (ch) , "0" (mem)); } return mem; } @@ -715,14 +719,12 @@ /* Again, watch those c-prefixes for ELF kernels */ #if defined(__svr4__) || defined(__ELF__) - asm(" .globl breakinst - - breakinst: ta 1 - "); + asm(".globl breakinst\n" + "breakinst:\n\t" + "ta 1\n"); #else - asm(" .globl _breakinst - - _breakinst: ta 1 - "); + asm(".globl _breakinst\n" + "_breakinst:\n\t" + "ta 1\n"); #endif } diff -u --recursive --new-file v2.4.13/linux/arch/sparc/kernel/time.c linux/arch/sparc/kernel/time.c --- v2.4.13/linux/arch/sparc/kernel/time.c Mon Jan 22 13:30:20 2001 +++ linux/arch/sparc/kernel/time.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: time.c,v 1.58 2001/01/11 15:07:09 davem Exp $ +/* $Id: time.c,v 1.59 2001/10/30 04:54:21 davem Exp $ * linux/arch/sparc/kernel/time.c * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -475,36 +475,39 @@ * is guarenteed to be atomic, this is why we can run this * with interrupts on full blast. Don't touch this... -DaveM */ - __asm__ __volatile__(" - sethi %hi(master_l10_counter), %o1 - ld [%o1 + %lo(master_l10_counter)], %g3 - sethi %hi(xtime), %g2 -1: ldd [%g2 + %lo(xtime)], %o4 - ld [%g3], %o1 - ldd [%g2 + %lo(xtime)], %o2 - xor %o4, %o2, %o2 - xor %o5, %o3, %o3 - orcc %o2, %o3, %g0 - bne 1b - cmp %o1, 0 - bge 1f - srl %o1, 0xa, %o1 - sethi %hi(tick), %o3 - ld [%o3 + %lo(tick)], %o3 - sethi %hi(0x1fffff), %o2 - or %o2, %lo(0x1fffff), %o2 - add %o5, %o3, %o5 - and %o1, %o2, %o1 -1: add %o5, %o1, %o5 - sethi %hi(1000000), %o2 - or %o2, %lo(1000000), %o2 - cmp %o5, %o2 - bl,a 1f - st %o4, [%o0 + 0x0] - add %o4, 0x1, %o4 - sub %o5, %o2, %o5 - st %o4, [%o0 + 0x0] -1: st %o5, [%o0 + 0x4]"); + __asm__ __volatile__( + "sethi %hi(master_l10_counter), %o1\n\t" + "ld [%o1 + %lo(master_l10_counter)], %g3\n\t" + "sethi %hi(xtime), %g2\n" + "1:\n\t" + "ldd [%g2 + %lo(xtime)], %o4\n\t" + "ld [%g3], %o1\n\t" + "ldd [%g2 + %lo(xtime)], %o2\n\t" + "xor %o4, %o2, %o2\n\t" + "xor %o5, %o3, %o3\n\t" + "orcc %o2, %o3, %g0\n\t" + "bne 1b\n\t" + " cmp %o1, 0\n\t" + "bge 1f\n\t" + " srl %o1, 0xa, %o1\n\t" + "sethi %hi(tick), %o3\n\t" + "ld [%o3 + %lo(tick)], %o3\n\t" + "sethi %hi(0x1fffff), %o2\n\t" + "or %o2, %lo(0x1fffff), %o2\n\t" + "add %o5, %o3, %o5\n\t" + "and %o1, %o2, %o1\n" + "1:\n\t" + "add %o5, %o1, %o5\n\t" + "sethi %hi(1000000), %o2\n\t" + "or %o2, %lo(1000000), %o2\n\t" + "cmp %o5, %o2\n\t" + "bl,a 1f\n\t" + " st %o4, [%o0 + 0x0]\n\t" + "add %o4, 0x1, %o4\n\t" + "sub %o5, %o2, %o5\n\t" + "st %o4, [%o0 + 0x0]\n" + "1:\n\t" + "st %o5, [%o0 + 0x4]\n"); } void do_settimeofday(struct timeval *tv) diff -u --recursive --new-file v2.4.13/linux/arch/sparc/kernel/windows.c linux/arch/sparc/kernel/windows.c --- v2.4.13/linux/arch/sparc/kernel/windows.c Tue Aug 31 11:23:29 1999 +++ linux/arch/sparc/kernel/windows.c Tue Oct 30 15:08:11 2001 @@ -19,17 +19,17 @@ register int ctr asm("g5"); ctr = 0; - __asm__ __volatile__(" -1: - ld [%%g6 + %2], %%g4 - orcc %%g0, %%g4, %%g0 - add %0, 1, %0 - bne 1b - save %%sp, -64, %%sp -2: - subcc %0, 1, %0 - bne 2b - restore %%g0, %%g0, %%g0" + __asm__ __volatile__( + "\n1:\n\t" + "ld [%%g6 + %2], %%g4\n\t" + "orcc %%g0, %%g4, %%g0\n\t" + "add %0, 1, %0\n\t" + "bne 1b\n\t" + " save %%sp, -64, %%sp\n" + "2:\n\t" + "subcc %0, 1, %0\n\t" + "bne 2b\n\t" + " restore %%g0, %%g0, %%g0\n" : "=&r" (ctr) : "0" (ctr), "i" ((const unsigned long)(&(((struct task_struct *)0)->thread.uwinmask))) diff -u --recursive --new-file v2.4.13/linux/arch/sparc/mm/fault.c linux/arch/sparc/mm/fault.c --- v2.4.13/linux/arch/sparc/mm/fault.c Sun Aug 12 13:27:59 2001 +++ linux/arch/sparc/mm/fault.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: fault.c,v 1.120 2001/07/18 13:40:05 anton Exp $ +/* $Id: fault.c,v 1.121 2001/10/30 04:54:22 davem Exp $ * fault.c: Page fault handlers for the Sparc. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -177,11 +177,11 @@ memset (®s, 0, sizeof (regs)); regs.pc = pc; regs.npc = pc + 4; - __asm__ __volatile__ (" - rd %%psr, %0 - nop - nop - nop" : "=r" (regs.psr)); + __asm__ __volatile__ ( + "rd %%psr, %0\n\t" + "nop\n\t" + "nop\n\t" + "nop\n" : "=r" (regs.psr)); unhandled_fault (address, current, ®s); /* Not reached */ return 0; diff -u --recursive --new-file v2.4.13/linux/arch/sparc/mm/srmmu.c linux/arch/sparc/mm/srmmu.c --- v2.4.13/linux/arch/sparc/mm/srmmu.c Sun Sep 23 11:40:56 2001 +++ linux/arch/sparc/mm/srmmu.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: srmmu.c,v 1.231 2001/09/20 00:35:31 davem Exp $ +/* $Id: srmmu.c,v 1.232 2001/10/30 04:54:22 davem Exp $ * srmmu.c: SRMMU specific routines for memory management. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -393,6 +393,7 @@ static pte_t *srmmu_pte_alloc_one(struct mm_struct *mm, unsigned long address) { BUG(); + return NULL; } static void srmmu_free_pte_fast(pte_t *pte) @@ -812,11 +813,11 @@ static void cypress_flush_tlb_mm(struct mm_struct *mm) { FLUSH_BEGIN(mm) - __asm__ __volatile__(" - lda [%0] %3, %%g5 - sta %2, [%0] %3 - sta %%g0, [%1] %4 - sta %%g5, [%0] %3" + __asm__ __volatile__( + "lda [%0] %3, %%g5\n\t" + "sta %2, [%0] %3\n\t" + "sta %%g0, [%1] %4\n\t" + "sta %%g5, [%0] %3\n" : /* no outputs */ : "r" (SRMMU_CTX_REG), "r" (0x300), "r" (mm->context), "i" (ASI_M_MMUREGS), "i" (ASI_M_FLUSH_PROBE) @@ -831,13 +832,14 @@ FLUSH_BEGIN(mm) start &= SRMMU_PGDIR_MASK; size = SRMMU_PGDIR_ALIGN(end) - start; - __asm__ __volatile__(" - lda [%0] %5, %%g5 - sta %1, [%0] %5 - 1: subcc %3, %4, %3 - bne 1b - sta %%g0, [%2 + %3] %6 - sta %%g5, [%0] %5" + __asm__ __volatile__( + "lda [%0] %5, %%g5\n\t" + "sta %1, [%0] %5\n" + "1:\n\t" + "subcc %3, %4, %3\n\t" + "bne 1b\n\t" + " sta %%g0, [%2 + %3] %6\n\t" + "sta %%g5, [%0] %5\n" : /* no outputs */ : "r" (SRMMU_CTX_REG), "r" (mm->context), "r" (start | 0x200), "r" (size), "r" (SRMMU_PGDIR_SIZE), "i" (ASI_M_MMUREGS), @@ -851,11 +853,11 @@ struct mm_struct *mm = vma->vm_mm; FLUSH_BEGIN(mm) - __asm__ __volatile__(" - lda [%0] %3, %%g5 - sta %1, [%0] %3 - sta %%g0, [%2] %4 - sta %%g5, [%0] %3" + __asm__ __volatile__( + "lda [%0] %3, %%g5\n\t" + "sta %1, [%0] %3\n\t" + "sta %%g0, [%2] %4\n\t" + "sta %%g5, [%0] %3\n" : /* no outputs */ : "r" (SRMMU_CTX_REG), "r" (mm->context), "r" (page & PAGE_MASK), "i" (ASI_M_MMUREGS), "i" (ASI_M_FLUSH_PROBE) diff -u --recursive --new-file v2.4.13/linux/arch/sparc/mm/sun4c.c linux/arch/sparc/mm/sun4c.c --- v2.4.13/linux/arch/sparc/mm/sun4c.c Wed Jul 25 17:10:19 2001 +++ linux/arch/sparc/mm/sun4c.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: sun4c.c,v 1.207 2001/07/17 16:17:33 anton Exp $ +/* $Id: sun4c.c,v 1.208 2001/10/30 04:54:22 davem Exp $ * sun4c.c: Doing in software what should be done in hardware. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -135,25 +135,26 @@ unsigned long nbytes = SUN4C_VAC_SIZE; unsigned long lsize = sun4c_vacinfo.linesize; - __asm__ __volatile__(" - add %2, %2, %%g1 - add %2, %%g1, %%g2 - add %2, %%g2, %%g3 - add %2, %%g3, %%g4 - add %2, %%g4, %%g5 - add %2, %%g5, %%o4 - add %2, %%o4, %%o5 -1: subcc %0, %%o5, %0 - sta %%g0, [%0] %3 - sta %%g0, [%0 + %2] %3 - sta %%g0, [%0 + %%g1] %3 - sta %%g0, [%0 + %%g2] %3 - sta %%g0, [%0 + %%g3] %3 - sta %%g0, [%0 + %%g4] %3 - sta %%g0, [%0 + %%g5] %3 - bg 1b - sta %%g0, [%1 + %%o4] %3 -" : "=&r" (nbytes) + __asm__ __volatile__( + "add %2, %2, %%g1\n\t" + "add %2, %%g1, %%g2\n\t" + "add %2, %%g2, %%g3\n\t" + "add %2, %%g3, %%g4\n\t" + "add %2, %%g4, %%g5\n\t" + "add %2, %%g5, %%o4\n\t" + "add %2, %%o4, %%o5\n" + "1:\n\t" + "subcc %0, %%o5, %0\n\t" + "sta %%g0, [%0] %3\n\t" + "sta %%g0, [%0 + %2] %3\n\t" + "sta %%g0, [%0 + %%g1] %3\n\t" + "sta %%g0, [%0 + %%g2] %3\n\t" + "sta %%g0, [%0 + %%g3] %3\n\t" + "sta %%g0, [%0 + %%g4] %3\n\t" + "sta %%g0, [%0 + %%g5] %3\n\t" + "bg 1b\n\t" + " sta %%g0, [%1 + %%o4] %3\n" + : "=&r" (nbytes) : "0" (nbytes), "r" (lsize), "i" (ASI_FLUSHCTX) : "g1", "g2", "g3", "g4", "g5", "o4", "o5", "cc"); } @@ -165,26 +166,27 @@ unsigned long nbytes = SUN4C_VAC_SIZE; unsigned long lsize = sun4c_vacinfo.linesize; - __asm__ __volatile__(" - add %2, %2, %%g1 - add %2, %%g1, %%g2 - add %2, %%g2, %%g3 - add %2, %%g3, %%g4 - add %2, %%g4, %%g5 - add %2, %%g5, %%o4 - add %2, %%o4, %%o5 -1: subcc %1, %%o5, %1 - sta %%g0, [%0] %6 - sta %%g0, [%0 + %2] %6 - sta %%g0, [%0 + %%g1] %6 - sta %%g0, [%0 + %%g2] %6 - sta %%g0, [%0 + %%g3] %6 - sta %%g0, [%0 + %%g4] %6 - sta %%g0, [%0 + %%g5] %6 - sta %%g0, [%0 + %%o4] %6 - bg 1b - add %0, %%o5, %0 -" : "=&r" (addr), "=&r" (nbytes), "=&r" (lsize) + __asm__ __volatile__( + "add %2, %2, %%g1\n\t" + "add %2, %%g1, %%g2\n\t" + "add %2, %%g2, %%g3\n\t" + "add %2, %%g3, %%g4\n\t" + "add %2, %%g4, %%g5\n\t" + "add %2, %%g5, %%o4\n\t" + "add %2, %%o4, %%o5\n" + "1:\n\t" + "subcc %1, %%o5, %1\n\t" + "sta %%g0, [%0] %6\n\t" + "sta %%g0, [%0 + %2] %6\n\t" + "sta %%g0, [%0 + %%g1] %6\n\t" + "sta %%g0, [%0 + %%g2] %6\n\t" + "sta %%g0, [%0 + %%g3] %6\n\t" + "sta %%g0, [%0 + %%g4] %6\n\t" + "sta %%g0, [%0 + %%g5] %6\n\t" + "sta %%g0, [%0 + %%o4] %6\n\t" + "bg 1b\n\t" + " add %0, %%o5, %0\n" + : "=&r" (addr), "=&r" (nbytes), "=&r" (lsize) : "0" (addr), "1" (nbytes), "2" (lsize), "i" (ASI_FLUSHSEG) : "g1", "g2", "g3", "g4", "g5", "o4", "o5", "cc"); @@ -242,26 +244,27 @@ unsigned long left = PAGE_SIZE; unsigned long lsize = sun4c_vacinfo.linesize; - __asm__ __volatile__(" - add %2, %2, %%g1 - add %2, %%g1, %%g2 - add %2, %%g2, %%g3 - add %2, %%g3, %%g4 - add %2, %%g4, %%g5 - add %2, %%g5, %%o4 - add %2, %%o4, %%o5 -1: subcc %1, %%o5, %1 - sta %%g0, [%0] %6 - sta %%g0, [%0 + %2] %6 - sta %%g0, [%0 + %%g1] %6 - sta %%g0, [%0 + %%g2] %6 - sta %%g0, [%0 + %%g3] %6 - sta %%g0, [%0 + %%g4] %6 - sta %%g0, [%0 + %%g5] %6 - sta %%g0, [%0 + %%o4] %6 - bg 1b - add %0, %%o5, %0 -" : "=&r" (addr), "=&r" (left), "=&r" (lsize) + __asm__ __volatile__( + "add %2, %2, %%g1\n\t" + "add %2, %%g1, %%g2\n\t" + "add %2, %%g2, %%g3\n\t" + "add %2, %%g3, %%g4\n\t" + "add %2, %%g4, %%g5\n\t" + "add %2, %%g5, %%o4\n\t" + "add %2, %%o4, %%o5\n" + "1:\n\t" + "subcc %1, %%o5, %1\n\t" + "sta %%g0, [%0] %6\n\t" + "sta %%g0, [%0 + %2] %6\n\t" + "sta %%g0, [%0 + %%g1] %6\n\t" + "sta %%g0, [%0 + %%g2] %6\n\t" + "sta %%g0, [%0 + %%g3] %6\n\t" + "sta %%g0, [%0 + %%g4] %6\n\t" + "sta %%g0, [%0 + %%g5] %6\n\t" + "sta %%g0, [%0 + %%o4] %6\n\t" + "bg 1b\n\t" + " add %0, %%o5, %0\n" + : "=&r" (addr), "=&r" (left), "=&r" (lsize) : "0" (addr), "1" (left), "2" (lsize), "i" (ASI_FLUSHPG) : "g1", "g2", "g3", "g4", "g5", "o4", "o5", "cc"); @@ -1402,46 +1405,46 @@ if (sun4c_vacinfo.linesize == 32) { while (begin < end) { - __asm__ __volatile__(" - ld [%0 + 0x00], %%g0 - ld [%0 + 0x20], %%g0 - ld [%0 + 0x40], %%g0 - ld [%0 + 0x60], %%g0 - ld [%0 + 0x80], %%g0 - ld [%0 + 0xa0], %%g0 - ld [%0 + 0xc0], %%g0 - ld [%0 + 0xe0], %%g0 - ld [%0 + 0x100], %%g0 - ld [%0 + 0x120], %%g0 - ld [%0 + 0x140], %%g0 - ld [%0 + 0x160], %%g0 - ld [%0 + 0x180], %%g0 - ld [%0 + 0x1a0], %%g0 - ld [%0 + 0x1c0], %%g0 - ld [%0 + 0x1e0], %%g0 - " : : "r" (begin)); + __asm__ __volatile__( + "ld [%0 + 0x00], %%g0\n\t" + "ld [%0 + 0x20], %%g0\n\t" + "ld [%0 + 0x40], %%g0\n\t" + "ld [%0 + 0x60], %%g0\n\t" + "ld [%0 + 0x80], %%g0\n\t" + "ld [%0 + 0xa0], %%g0\n\t" + "ld [%0 + 0xc0], %%g0\n\t" + "ld [%0 + 0xe0], %%g0\n\t" + "ld [%0 + 0x100], %%g0\n\t" + "ld [%0 + 0x120], %%g0\n\t" + "ld [%0 + 0x140], %%g0\n\t" + "ld [%0 + 0x160], %%g0\n\t" + "ld [%0 + 0x180], %%g0\n\t" + "ld [%0 + 0x1a0], %%g0\n\t" + "ld [%0 + 0x1c0], %%g0\n\t" + "ld [%0 + 0x1e0], %%g0\n" + : : "r" (begin)); begin += 512; } } else { while (begin < end) { - __asm__ __volatile__(" - ld [%0 + 0x00], %%g0 - ld [%0 + 0x10], %%g0 - ld [%0 + 0x20], %%g0 - ld [%0 + 0x30], %%g0 - ld [%0 + 0x40], %%g0 - ld [%0 + 0x50], %%g0 - ld [%0 + 0x60], %%g0 - ld [%0 + 0x70], %%g0 - ld [%0 + 0x80], %%g0 - ld [%0 + 0x90], %%g0 - ld [%0 + 0xa0], %%g0 - ld [%0 + 0xb0], %%g0 - ld [%0 + 0xc0], %%g0 - ld [%0 + 0xd0], %%g0 - ld [%0 + 0xe0], %%g0 - ld [%0 + 0xf0], %%g0 - " : : "r" (begin)); + __asm__ __volatile__( + "ld [%0 + 0x00], %%g0\n\t" + "ld [%0 + 0x10], %%g0\n\t" + "ld [%0 + 0x20], %%g0\n\t" + "ld [%0 + 0x30], %%g0\n\t" + "ld [%0 + 0x40], %%g0\n\t" + "ld [%0 + 0x50], %%g0\n\t" + "ld [%0 + 0x60], %%g0\n\t" + "ld [%0 + 0x70], %%g0\n\t" + "ld [%0 + 0x80], %%g0\n\t" + "ld [%0 + 0x90], %%g0\n\t" + "ld [%0 + 0xa0], %%g0\n\t" + "ld [%0 + 0xb0], %%g0\n\t" + "ld [%0 + 0xc0], %%g0\n\t" + "ld [%0 + 0xd0], %%g0\n\t" + "ld [%0 + 0xe0], %%g0\n\t" + "ld [%0 + 0xf0], %%g0\n" + : : "r" (begin)); begin += 256; } } diff -u --recursive --new-file v2.4.13/linux/arch/sparc/prom/console.c linux/arch/sparc/prom/console.c --- v2.4.13/linux/arch/sparc/prom/console.c Tue May 1 20:59:24 2001 +++ linux/arch/sparc/prom/console.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: console.c,v 1.24 2001/04/27 07:02:42 davem Exp $ +/* $Id: console.c,v 1.25 2001/10/30 04:54:22 davem Exp $ * console.c: Routines that deal with sending and receiving IO * to/from the current console device using the PROM. * @@ -207,6 +207,7 @@ } break; default: - } + ; + }; return PROMDEV_O_UNK; } diff -u --recursive --new-file v2.4.13/linux/arch/sparc64/defconfig linux/arch/sparc64/defconfig --- v2.4.13/linux/arch/sparc64/defconfig Tue Oct 23 22:48:50 2001 +++ linux/arch/sparc64/defconfig Tue Oct 30 15:08:11 2001 @@ -172,8 +172,10 @@ # Networking options # CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -# CONFIG_NETLINK is not set +CONFIG_PACKET_MMAP=y +CONFIG_NETLINK=y +CONFIG_RTNETLINK=y +CONFIG_NETLINK_DEV=y # CONFIG_NETFILTER is not set # CONFIG_FILTER is not set CONFIG_UNIX=y @@ -183,11 +185,13 @@ # CONFIG_IP_PNP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set +CONFIG_ARPD=y CONFIG_INET_ECN=y # CONFIG_SYN_COOKIES is not set CONFIG_IPV6=m # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +CONFIG_VLAN_8021Q=m # # @@ -411,6 +415,7 @@ CONFIG_BONDING=m CONFIG_EQUALIZER=m CONFIG_TUN=m +# CONFIG_ETHERTAP is not set # # Ethernet (10 or 100Mbit) @@ -453,6 +458,7 @@ CONFIG_NE2K_PCI=m # CONFIG_NE3210 is not set # CONFIG_ES3210 is not set +# CONFIG_8139CP is not set CONFIG_8139TOO=m # CONFIG_8139TOO_PIO is not set # CONFIG_8139TOO_TUNE_TWISTER is not set @@ -566,7 +572,7 @@ CONFIG_EFS_FS=m # CONFIG_JFFS_FS is not set # CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=m +# CONFIG_CRAMFS is not set # CONFIG_TMPFS is not set CONFIG_RAMFS=m CONFIG_ISO9660_FS=m diff -u --recursive --new-file v2.4.13/linux/arch/sparc64/kernel/ioctl32.c linux/arch/sparc64/kernel/ioctl32.c --- v2.4.13/linux/arch/sparc64/kernel/ioctl32.c Tue Oct 23 22:48:50 2001 +++ linux/arch/sparc64/kernel/ioctl32.c Sun Nov 4 09:31:57 2001 @@ -1,4 +1,4 @@ -/* $Id: ioctl32.c,v 1.126 2001/10/18 11:41:02 davem Exp $ +/* $Id: ioctl32.c,v 1.127 2001/11/01 23:54:19 davem Exp $ * ioctl32.c: Conversion between 32bit and 64bit native ioctls. * * Copyright (C) 1997-2000 Jakub Jelinek (jakub@redhat.com) @@ -592,44 +592,6 @@ return err; } -static int mii_ioctl(unsigned long fd, unsigned int cmd, unsigned long arg) -{ - struct ifreq ifr; - mm_segment_t old_fs; - int err; - u32 data; - - if (copy_from_user(&ifr, (struct ifreq32 *)arg, sizeof(struct ifreq32))) - return -EFAULT; - ifr.ifr_data = (__kernel_caddr_t) kmalloc(sizeof(struct mii_ioctl_data), - GFP_KERNEL); - if (!ifr.ifr_data) - return -EAGAIN; - - __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data)); - if (copy_from_user(ifr.ifr_data, (char *)A(data), - sizeof(struct mii_ioctl_data))) { - err = -EFAULT; - goto out; - } - - old_fs = get_fs(); - set_fs(KERNEL_DS); - err = sys_ioctl(fd, cmd, (unsigned long)&ifr); - set_fs(old_fs); - - if (!err) { - if (copy_to_user((char *)A(data), - ifr.ifr_data, - sizeof(struct mii_ioctl_data))) - err = -EFAULT; - } - -out: - kfree(ifr.ifr_data); - return err; -} - static inline int dev_ifsioc(unsigned int fd, unsigned int cmd, unsigned long arg) { struct ifreq ifr; @@ -4102,6 +4064,9 @@ COMPATIBLE_IOCTL(SIOCDRARP) COMPATIBLE_IOCTL(SIOCADDDLCI) COMPATIBLE_IOCTL(SIOCDELDLCI) +COMPATIBLE_IOCTL(SIOCGMIIPHY) +COMPATIBLE_IOCTL(SIOCGMIIREG) +COMPATIBLE_IOCTL(SIOCSMIIREG) /* SG stuff */ COMPATIBLE_IOCTL(SG_SET_TIMEOUT) COMPATIBLE_IOCTL(SG_GET_TIMEOUT) @@ -4523,9 +4488,6 @@ HANDLE_IOCTL(SIOCGIFTXQLEN, dev_ifsioc) HANDLE_IOCTL(SIOCSIFTXQLEN, dev_ifsioc) HANDLE_IOCTL(SIOCETHTOOL, ethtool_ioctl) -HANDLE_IOCTL(SIOCGMIIPHY, mii_ioctl) -HANDLE_IOCTL(SIOCGMIIREG, mii_ioctl) -HANDLE_IOCTL(SIOCSMIIREG, mii_ioctl) HANDLE_IOCTL(SIOCADDRT, routing_ioctl) HANDLE_IOCTL(SIOCDELRT, routing_ioctl) /* Note SIOCRTMSG is no longer, so this is safe and * the user would have seen just an -EINVAL anyways. */ diff -u --recursive --new-file v2.4.13/linux/arch/sparc64/kernel/setup.c linux/arch/sparc64/kernel/setup.c --- v2.4.13/linux/arch/sparc64/kernel/setup.c Tue Oct 23 22:48:50 2001 +++ linux/arch/sparc64/kernel/setup.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: setup.c,v 1.69 2001/10/18 09:40:00 davem Exp $ +/* $Id: setup.c,v 1.70 2001/10/25 18:48:03 davem Exp $ * linux/arch/sparc64/kernel/setup.c * * Copyright (C) 1995,1996 David S. Miller (davem@caip.rutgers.edu) @@ -195,7 +195,14 @@ pgd_t *pgdp; pmd_t *pmdp; pte_t *ptep; + int error; + if ((va >= LOW_OBP_ADDRESS) && (va < HI_OBP_ADDRESS)) { + tte = prom_virt_to_phys(va, &error); + if (!error) + res = PROM_TRUE; + goto done; + } pgdp = pgd_offset_k(va); if (pgd_none(*pgdp)) goto done; diff -u --recursive --new-file v2.4.13/linux/arch/sparc64/kernel/smp.c linux/arch/sparc64/kernel/smp.c --- v2.4.13/linux/arch/sparc64/kernel/smp.c Tue Oct 23 22:48:50 2001 +++ linux/arch/sparc64/kernel/smp.c Tue Oct 30 15:08:11 2001 @@ -585,14 +585,12 @@ extern unsigned long xcall_flush_dcache_page_cheetah; extern unsigned long xcall_flush_dcache_page_spitfire; -static spinlock_t dcache_xcall_lock = SPIN_LOCK_UNLOCKED; -static struct page *dcache_page; #ifdef DCFLUSH_DEBUG extern atomic_t dcpage_flushes; extern atomic_t dcpage_flushes_xcall; #endif -static __inline__ void __smp_flush_dcache_page_client(struct page *page) +static __inline__ void __local_flush_dcache_page(struct page *page) { #if (L1DCACHE_SIZE > PAGE_SIZE) __flush_dcache_page(page->virtual, @@ -605,37 +603,31 @@ #endif } -void smp_flush_dcache_page_client(void) -{ - __smp_flush_dcache_page_client(dcache_page); - spin_unlock(&dcache_xcall_lock); -} - -void smp_flush_dcache_page_impl(struct page *page) +void smp_flush_dcache_page_impl(struct page *page, int cpu) { if (smp_processors_ready) { - int cpu = dcache_dirty_cpu(page); unsigned long mask = 1UL << cpu; #ifdef DCFLUSH_DEBUG atomic_inc(&dcpage_flushes); #endif if (cpu == smp_processor_id()) { - __smp_flush_dcache_page_client(page); + __local_flush_dcache_page(page); } else if ((cpu_present_map & mask) != 0) { u64 data0; if (tlb_type == spitfire) { - spin_lock(&dcache_xcall_lock); - dcache_page = page; data0 = ((u64)&xcall_flush_dcache_page_spitfire); - spitfire_xcall_deliver(data0, 0, 0, mask); - /* Target cpu drops dcache_xcall_lock. */ + if (page->mapping != NULL) + data0 |= ((u64)1 << 32); + spitfire_xcall_deliver(data0, + __pa(page->virtual), + (u64) page->virtual, + mask); } else { - /* Look mom, no locks... */ data0 = ((u64)&xcall_flush_dcache_page_cheetah); cheetah_xcall_deliver(data0, - (u64) page->virtual, + __pa(page->virtual), 0, mask); } #ifdef DCFLUSH_DEBUG diff -u --recursive --new-file v2.4.13/linux/arch/sparc64/kernel/sparc64_ksyms.c linux/arch/sparc64/kernel/sparc64_ksyms.c --- v2.4.13/linux/arch/sparc64/kernel/sparc64_ksyms.c Tue Oct 23 22:48:50 2001 +++ linux/arch/sparc64/kernel/sparc64_ksyms.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: sparc64_ksyms.c,v 1.113 2001/10/17 18:26:58 davem Exp $ +/* $Id: sparc64_ksyms.c,v 1.116 2001/10/26 15:49:21 davem Exp $ * arch/sparc64/kernel/sparc64_ksyms.c: Sparc64 specific ksyms support. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -126,7 +126,9 @@ /* Hard IRQ locking */ EXPORT_SYMBOL(global_irq_holder); +#ifdef CONFIG_SMP EXPORT_SYMBOL(synchronize_irq); +#endif EXPORT_SYMBOL(__global_cli); EXPORT_SYMBOL(__global_sti); EXPORT_SYMBOL(__global_save_flags); @@ -136,7 +138,9 @@ EXPORT_SYMBOL(cpu_data); /* Misc SMP information */ +#ifdef CONFIG_SMP EXPORT_SYMBOL(smp_num_cpus); +#endif EXPORT_SYMBOL(__cpu_number_map); EXPORT_SYMBOL(__cpu_logical_map); @@ -151,7 +155,9 @@ EXPORT_SYMBOL(_do_write_unlock); #endif +#ifdef CONFIG_SMP EXPORT_SYMBOL(smp_call_function); +#endif #endif @@ -307,8 +313,6 @@ EXPORT_SYMBOL(sys_ioctl); EXPORT_SYMBOL(sys32_ioctl); EXPORT_SYMBOL(sparc32_open); -EXPORT_SYMBOL(move_addr_to_kernel); -EXPORT_SYMBOL(move_addr_to_user); #endif /* Special internal versions of library functions. */ diff -u --recursive --new-file v2.4.13/linux/arch/sparc64/kernel/sys_sparc.c linux/arch/sparc64/kernel/sys_sparc.c --- v2.4.13/linux/arch/sparc64/kernel/sys_sparc.c Fri Apr 13 20:15:55 2001 +++ linux/arch/sparc64/kernel/sys_sparc.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: sys_sparc.c,v 1.52 2001/04/14 01:12:02 davem Exp $ +/* $Id: sys_sparc.c,v 1.54 2001/10/28 20:49:13 davem Exp $ * linux/arch/sparc64/kernel/sys_sparc.c * * This file contains various random system calls that @@ -255,13 +255,27 @@ asmlinkage int sparc64_personality(unsigned long personality) { - int ret; - if (current->personality == PER_LINUX32 && personality == PER_LINUX) - personality = PER_LINUX32; - ret = sys_personality(personality); - if (ret == PER_LINUX32) + unsigned long ret, trying, orig_ret; + + trying = ret = personality; + + if (current->personality == PER_LINUX32 && + trying == PER_LINUX) + trying = ret = PER_LINUX32; + + /* For PER_LINUX32 we want to retain &default_exec_domain. */ + if (trying == PER_LINUX32) ret = PER_LINUX; - return ret; + + orig_ret = ret; + ret = sys_personality(ret); + + if (orig_ret == PER_LINUX && trying == PER_LINUX32) { + current->personality = PER_LINUX32; + ret = PER_LINUX; + } + + return (int) ret; } /* Linux version of mmap */ diff -u --recursive --new-file v2.4.13/linux/arch/sparc64/mm/init.c linux/arch/sparc64/mm/init.c --- v2.4.13/linux/arch/sparc64/mm/init.c Tue Oct 23 22:48:50 2001 +++ linux/arch/sparc64/mm/init.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: init.c,v 1.194 2001/10/17 18:26:58 davem Exp $ +/* $Id: init.c,v 1.199 2001/10/25 18:48:03 davem Exp $ * arch/sparc64/mm/init.c * * Copyright (C) 1996-1999 David S. Miller (davem@caip.rutgers.edu) @@ -132,21 +132,69 @@ #endif } +#define PG_dcache_dirty PG_arch_1 + +#define dcache_dirty_cpu(page) \ + (((page)->flags >> 24) & (NR_CPUS - 1UL)) + +static __inline__ void set_dcache_dirty(struct page *page) +{ + unsigned long mask = smp_processor_id(); + unsigned long non_cpu_bits = (1UL << 24UL) - 1UL; + mask = (mask << 24) | (1UL << PG_dcache_dirty); + __asm__ __volatile__("1:\n\t" + "ldx [%2], %%g7\n\t" + "and %%g7, %1, %%g5\n\t" + "or %%g5, %0, %%g5\n\t" + "casx [%2], %%g7, %%g5\n\t" + "cmp %%g7, %%g5\n\t" + "bne,pn %%xcc, 1b\n\t" + " nop" + : /* no outputs */ + : "r" (mask), "r" (non_cpu_bits), "r" (&page->flags) + : "g5", "g7"); +} + +static __inline__ void clear_dcache_dirty_cpu(struct page *page, unsigned long cpu) +{ + unsigned long mask = (1UL << PG_dcache_dirty); + + __asm__ __volatile__("! test_and_clear_dcache_dirty\n" + "1:\n\t" + "ldx [%2], %%g7\n\t" + "srlx %%g7, 24, %%g5\n\t" + "cmp %%g5, %0\n\t" + "bne,pn %%icc, 2f\n\t" + " andn %%g7, %1, %%g5\n\t" + "casx [%2], %%g7, %%g5\n\t" + "cmp %%g7, %%g5\n\t" + "bne,pn %%xcc, 1b\n\t" + " nop\n" + "2:" + : /* no outputs */ + : "r" (cpu), "r" (mask), "r" (&page->flags) + : "g5", "g7"); +} + void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t pte) { struct page *page = pte_page(pte); + unsigned long pg_flags; + + if (VALID_PAGE(page) && + page->mapping && + ((pg_flags = page->flags) & (1UL << PG_dcache_dirty))) { + int cpu = (pg_flags >> 24); - if (VALID_PAGE(page) && page->mapping && - test_bit(PG_dcache_dirty, &page->flags)) { /* This is just to optimize away some function calls * in the SMP case. */ - if (dcache_dirty_cpu(page) == smp_processor_id()) + if (cpu == smp_processor_id()) flush_dcache_page_impl(page); else - smp_flush_dcache_page_impl(page); + smp_flush_dcache_page_impl(page, cpu); - clear_dcache_dirty(page); + clear_dcache_dirty_cpu(page, cpu); } __update_mmu_cache(vma, address, pte); } @@ -162,7 +210,7 @@ if (dirty) { if (dirty_cpu == smp_processor_id()) return; - smp_flush_dcache_page_impl(page); + smp_flush_dcache_page_impl(page, dirty_cpu); } set_dcache_dirty(page); } else { @@ -244,12 +292,44 @@ prom_halt(); } +#define BASE_PAGE_SIZE 8192 +static pmd_t *prompmd; + +/* + * Translate PROM's mapping we capture at boot time into physical address. + * The second parameter is only set from prom_callback() invocations. + */ +unsigned long prom_virt_to_phys(unsigned long promva, int *error) +{ + pmd_t *pmdp = prompmd + ((promva >> 23) & 0x7ff); + pte_t *ptep; + unsigned long base; + + if (pmd_none(*pmdp)) { + if (error) + *error = 1; + return(0); + } + ptep = (pte_t *)pmd_page(*pmdp) + ((promva >> 13) & 0x3ff); + if (!pte_present(*ptep)) { + if (error) + *error = 1; + return(0); + } + if (error) { + *error = 0; + return(pte_val(*ptep)); + } + base = pte_val(*ptep) & _PAGE_PADDR; + return(base + (promva & (BASE_PAGE_SIZE - 1))); +} + static void inherit_prom_mappings(void) { struct linux_prom_translation *trans; unsigned long phys_page, tte_vaddr, tte_data; void (*remap_func)(unsigned long, unsigned long, int); - pmd_t *pmdp, *pmd; + pmd_t *pmdp; pte_t *ptep; int node, n, i, tsz; extern unsigned int obp_iaddr_patch[2], obp_daddr_patch[2]; @@ -283,21 +363,21 @@ * in inherit_locked_prom_mappings()). */ #define OBP_PMD_SIZE 2048 -#define BASE_PAGE_SIZE 8192 - pmd = __alloc_bootmem(OBP_PMD_SIZE, OBP_PMD_SIZE, 0UL); - if (pmd == NULL) + prompmd = __alloc_bootmem(OBP_PMD_SIZE, OBP_PMD_SIZE, 0UL); + if (prompmd == NULL) early_pgtable_allocfail("pmd"); - memset(pmd, 0, OBP_PMD_SIZE); + memset(prompmd, 0, OBP_PMD_SIZE); for (i = 0; i < n; i++) { unsigned long vaddr; - if (trans[i].virt >= 0xf0000000 && trans[i].virt < 0x100000000) { + if (trans[i].virt >= LOW_OBP_ADDRESS && trans[i].virt < HI_OBP_ADDRESS) { for (vaddr = trans[i].virt; - vaddr < trans[i].virt + trans[i].size; + ((vaddr < trans[i].virt + trans[i].size) && + (vaddr < HI_OBP_ADDRESS)); vaddr += BASE_PAGE_SIZE) { unsigned long val; - pmdp = pmd + ((vaddr >> 23) & 0x7ff); + pmdp = prompmd + ((vaddr >> 23) & 0x7ff); if (pmd_none(*pmdp)) { ptep = __alloc_bootmem(BASE_PAGE_SIZE, BASE_PAGE_SIZE, @@ -321,7 +401,7 @@ } } } - phys_page = __pa(pmd); + phys_page = __pa(prompmd); obp_iaddr_patch[0] |= (phys_page >> 10); obp_iaddr_patch[1] |= (phys_page & 0x3ff); flushi((long)&obp_iaddr_patch[0]); diff -u --recursive --new-file v2.4.13/linux/arch/sparc64/mm/ultra.S linux/arch/sparc64/mm/ultra.S --- v2.4.13/linux/arch/sparc64/mm/ultra.S Tue Oct 23 22:48:50 2001 +++ linux/arch/sparc64/mm/ultra.S Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: ultra.S,v 1.63 2001/10/17 19:30:21 davem Exp $ +/* $Id: ultra.S,v 1.67 2001/10/23 14:28:20 davem Exp $ * ultra.S: Don't expand these all over the place... * * Copyright (C) 1997, 2000 David S. Miller (davem@redhat.com) @@ -505,7 +505,7 @@ .align 32 .globl xcall_flush_dcache_page_cheetah -xcall_flush_dcache_page_cheetah: +xcall_flush_dcache_page_cheetah: /* %g1 == physical page address */ sethi %hi(PAGE_SIZE), %g3 1: subcc %g3, (1 << 5), %g3 stxa %g0, [%g1 + %g3] ASI_DCACHE_INVALIDATE @@ -516,18 +516,39 @@ nop .globl xcall_flush_dcache_page_spitfire -xcall_flush_dcache_page_spitfire: - rdpr %pstate, %g2 - wrpr %g2, PSTATE_IG | PSTATE_AG, %pstate - rdpr %pil, %g2 - wrpr %g0, 15, %pil - sethi %hi(109f), %g7 - b,pt %xcc, etrap_irq -109: or %g7, %lo(109b), %g7 - call smp_flush_dcache_page_client +xcall_flush_dcache_page_spitfire: /* %g1 == physical page address + %g7 == kernel page virtual address + %g5 == (page->mapping != NULL) */ +#if (L1DCACHE_SIZE > PAGE_SIZE) + srlx %g1, (13 - 2), %g1 ! Form tag comparitor + sethi %hi(L1DCACHE_SIZE), %g3 ! D$ size == 16K + sub %g3, (1 << 5), %g3 ! D$ linesize == 32 +1: ldxa [%g3] ASI_DCACHE_TAG, %g2 + andcc %g2, 0x3, %g0 + be,pn %xcc, 2f + andn %g2, 0x3, %g2 + cmp %g2, %g1 + + bne,pt %xcc, 2f nop - b,pt %xcc, rtrap - clr %l6 + stxa %g0, [%g3] ASI_DCACHE_TAG + membar #Sync +2: cmp %g3, 0 + bne,pt %xcc, 1b + sub %g3, (1 << 5), %g3 + + brz,pn %g5, 2f +#endif /* L1DCACHE_SIZE > PAGE_SIZE */ + sethi %hi(PAGE_SIZE), %g3 + +1: flush %g7 + subcc %g3, (1 << 5), %g3 + bne,pt %icc, 1b + add %g7, (1 << 5), %g7 + +2: retry + nop + nop .globl xcall_capture xcall_capture: diff -u --recursive --new-file v2.4.13/linux/drivers/acorn/block/mfmhd.c linux/drivers/acorn/block/mfmhd.c --- v2.4.13/linux/drivers/acorn/block/mfmhd.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/acorn/block/mfmhd.c Thu Oct 25 13:58:35 2001 @@ -1208,11 +1208,6 @@ return -EFAULT; return 0; - case BLKGETSIZE: - return put_user (mfm[minor].nr_sects, (unsigned long *)arg); - case BLKGETSIZE64: - return put_user ((u64)mfm[minor].nr_sects << 9, (u64 *)arg); - case BLKFRASET: if (!capable(CAP_SYS_ADMIN)) return -EACCES; @@ -1230,6 +1225,8 @@ return -EACCES; return mfm_reread_partitions(dev); + case BLKGETSIZE: + case BLKGETSIZE64: case BLKFLSBUF: case BLKROSET: case BLKROGET: @@ -1250,7 +1247,6 @@ if (dev >= mfm_drives) return -ENODEV; - MOD_INC_USE_COUNT; while (mfm_info[dev].busy) sleep_on (&mfm_wait_open); @@ -1265,7 +1261,6 @@ static int mfm_release(struct inode *inode, struct file *file) { mfm_info[DEVICE_NR(MINOR(inode->i_rdev))].access_count--; - MOD_DEC_USE_COUNT; return 0; } @@ -1324,6 +1319,7 @@ static struct block_device_operations mfm_fops = { + owner: THIS_MODULE, open: mfm_open, release: mfm_release, ioctl: mfm_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/acorn/char/keyb_ps2.c linux/drivers/acorn/char/keyb_ps2.c --- v2.4.13/linux/drivers/acorn/char/keyb_ps2.c Tue Jul 3 17:08:19 2001 +++ linux/drivers/acorn/char/keyb_ps2.c Thu Oct 25 13:53:46 2001 @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -212,7 +213,7 @@ }; #ifdef CONFIG_MAGIC_SYSRQ -unsigned char ps2kbd_sysrq_xlate[] = +static unsigned char ps2kbd_sysrq_xlate[] = { 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -360,7 +361,7 @@ status = 0; } -void ps2kbd_leds(unsigned int leds) +static void ps2kbd_leds(unsigned char leds) { ps2kbd_sendbyte(KBD_SETLEDS); ps2kbd_sendbyte(leds); @@ -380,6 +381,17 @@ { } +static int ps2kbd_translate(unsigned char scancode, unsigned char *keycode, char rawmode) +{ + *keycode = scancode; + return 1; +} + +static char ps2kbd_unexpected_up(unsigned char scancode) +{ + return 0200; +} + int __init ps2kbd_init_hw(void) { /* Reset the keyboard state machine. */ @@ -391,6 +403,14 @@ panic("Could not allocate keyboard receive IRQ!"); if (request_irq (IRQ_KEYBOARDTX, ps2kbd_tx, 0, "keyboard", NULL) != 0) panic("Could not allocate keyboard transmit IRQ!"); + + k_translate = ps2kbd_translate; + k_unexpected_up = ps2kbd_unexpected_up; + k_leds = ps2kbd_leds; +#ifdef CONFIG_MAGIC_SYSRQ + k_sysrq_xlate = ps2kbd_sysrq_xlate; + k_sysrq_key = 13; +#endif return 0; } diff -u --recursive --new-file v2.4.13/linux/drivers/acorn/scsi/cumana_2.c linux/drivers/acorn/scsi/cumana_2.c --- v2.4.13/linux/drivers/acorn/scsi/cumana_2.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/acorn/scsi/cumana_2.c Sun Nov 4 09:31:57 2001 @@ -195,6 +195,7 @@ memcpy(info->sg + 1, SCp->buffer + 1, sizeof(struct scatterlist) * bufs); info->sg[0].address = SCp->ptr; + info->sg[0].page = NULL; info->sg[0].length = SCp->this_residual; if (direction == DMA_OUT) diff -u --recursive --new-file v2.4.13/linux/drivers/acorn/scsi/ecoscsi.c linux/drivers/acorn/scsi/ecoscsi.c --- v2.4.13/linux/drivers/acorn/scsi/ecoscsi.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/acorn/scsi/ecoscsi.c Thu Oct 25 13:53:46 2001 @@ -232,7 +232,6 @@ #endif #undef STAT -#ifndef HOSTS_C #define NCR5380_implementation_fields \ int port, ctrl diff -u --recursive --new-file v2.4.13/linux/drivers/acorn/scsi/eesox.c linux/drivers/acorn/scsi/eesox.c --- v2.4.13/linux/drivers/acorn/scsi/eesox.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/acorn/scsi/eesox.c Sun Nov 4 09:31:57 2001 @@ -199,7 +199,8 @@ memcpy(info->sg + 1, SCp->buffer + 1, sizeof(struct scatterlist) * bufs); info->sg[0].address = SCp->ptr; - info->sg[0].length = SCp->this_residual; + info->sg[0].page = NULL; + info->sg[0].length = SCp->this_residual; if (direction == DMA_OUT) pci_dir = PCI_DMA_TODEVICE, diff -u --recursive --new-file v2.4.13/linux/drivers/acorn/scsi/powertec.c linux/drivers/acorn/scsi/powertec.c --- v2.4.13/linux/drivers/acorn/scsi/powertec.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/acorn/scsi/powertec.c Sun Nov 4 09:31:57 2001 @@ -187,7 +187,8 @@ memcpy(info->sg + 1, SCp->buffer + 1, sizeof(struct scatterlist) * bufs); info->sg[0].address = SCp->ptr; - info->sg[0].length = SCp->this_residual; + info->sg[0].page = NULL; + info->sg[0].length = SCp->this_residual; if (direction == DMA_OUT) pci_dir = PCI_DMA_TODEVICE, diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/Makefile linux/drivers/acpi/Makefile --- v2.4.13/linux/drivers/acpi/Makefile Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/Makefile Wed Oct 24 14:06:21 2001 @@ -36,12 +36,11 @@ subdir-$(CONFIG_ACPI) += $(acpi-subdirs) subdir-$(CONFIG_ACPI_BUSMGR) += ospm -obj-$(CONFIG_ACPI) += os.o acpi_ksyms.o +obj-$(CONFIG_ACPI) += driver.o os.o acpi_ksyms.o obj-$(CONFIG_ACPI) += $(foreach dir,$(acpi-subdirs),$(dir)/$(dir).o) ifdef CONFIG_ACPI_KERNEL_CONFIG obj-$(CONFIG_ACPI) += acpiconf.o osconf.o endif -obj-$(CONFIG_ACPI) += driver.o ifeq ($(CONFIG_ACPI_BUSMGR),y) obj-y += ospm/ospm.o diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/acpi_ksyms.c linux/drivers/acpi/acpi_ksyms.c --- v2.4.13/linux/drivers/acpi/acpi_ksyms.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/acpi_ksyms.c Wed Oct 24 14:06:21 2001 @@ -38,6 +38,14 @@ EXPORT_SYMBOL(acpi_db_user_commands); #endif +#ifdef ACPI_DEBUG +EXPORT_SYMBOL(acpi_ut_debug_print_raw); +EXPORT_SYMBOL(acpi_ut_debug_print); +EXPORT_SYMBOL(acpi_ut_status_exit); +EXPORT_SYMBOL(acpi_ut_exit); +EXPORT_SYMBOL(acpi_ut_trace); +#endif + EXPORT_SYMBOL(acpi_gbl_FADT); EXPORT_SYMBOL(acpi_os_free); @@ -103,6 +111,5 @@ EXPORT_SYMBOL(acpi_hw_register_read); EXPORT_SYMBOL(acpi_set_firmware_waking_vector); EXPORT_SYMBOL(acpi_subsystem_status); - EXPORT_SYMBOL(acpi_os_signal); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/debugger/dbcmds.c linux/drivers/acpi/debugger/dbcmds.c --- v2.4.13/linux/drivers/acpi/debugger/dbcmds.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/debugger/dbcmds.c Wed Oct 24 14:06:21 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dbcmds - debug commands and output routines - * $Revision: 65 $ + * $Revision: 66 $ * ******************************************************************************/ @@ -422,7 +422,7 @@ /* Display the subtree */ acpi_db_set_output_destination (DB_REDIRECTABLE_OUTPUT); - acpi_ns_dump_objects (ACPI_TYPE_ANY, max_depth, ACPI_UINT32_MAX, subtree_entry); + acpi_ns_dump_objects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, max_depth, ACPI_UINT32_MAX, subtree_entry); acpi_db_set_output_destination (DB_CONSOLE_OUTPUT); } @@ -466,7 +466,7 @@ /* Display the subtree */ acpi_db_set_output_destination (DB_REDIRECTABLE_OUTPUT); - acpi_ns_dump_objects (ACPI_TYPE_ANY, max_depth, owner_id, subtree_entry); + acpi_ns_dump_objects (ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, max_depth, owner_id, subtree_entry); acpi_db_set_output_destination (DB_CONSOLE_OUTPUT); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/debugger/dbdisasm.c linux/drivers/acpi/debugger/dbdisasm.c --- v2.4.13/linux/drivers/acpi/debugger/dbdisasm.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/debugger/dbdisasm.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dbdisasm - parser op tree display routines - * $Revision: 48 $ + * $Revision: 50 $ * ******************************************************************************/ @@ -97,6 +97,7 @@ acpi_status acpi_ps_display_object_pathname ( + acpi_walk_state *walk_state, acpi_parse_object *op) { acpi_parse_object *target_op; @@ -130,26 +131,43 @@ acpi_status acpi_ps_display_object_pathname ( + acpi_walk_state *walk_state, acpi_parse_object *op) { acpi_status status; acpi_namespace_node *node; NATIVE_CHAR buffer[MAX_SHOW_ENTRY]; u32 buffer_size = MAX_SHOW_ENTRY; + u32 debug_level; - acpi_os_printf (" (Path "); + /* Save current debug level so we don't get extraneous debug output */ + + debug_level = acpi_dbg_level; + acpi_dbg_level = 0; /* Just get the Node out of the Op object */ node = op->node; if (!node) { - /* - * No Named obj, so we can't get the pathname since the object - * is not in the namespace. This can happen during single - * stepping where a dynamic named object is *about* to be created. - */ - return (AE_OK); + /* Node not defined in this scope, look it up */ + + status = acpi_ns_lookup (walk_state->scope_info, op->value.string, ACPI_TYPE_ANY, + IMODE_EXECUTE, NS_SEARCH_PARENT, walk_state, &(node)); + + if (ACPI_FAILURE (status)) { + /* + * We can't get the pathname since the object + * is not in the namespace. This can happen during single + * stepping where a dynamic named object is *about* to be created. + */ + acpi_os_printf (" [Path not found]"); + goto exit; + } + + /* Save it for next time. */ + + op->node = node; } /* Convert Named_desc/handle to a full pathname */ @@ -157,11 +175,17 @@ status = acpi_ns_handle_to_pathname (node, &buffer_size, buffer); if (ACPI_FAILURE (status)) { acpi_os_printf ("****Could not get pathname****)"); - return (status); + goto exit; } - acpi_os_printf ("%s)", buffer); - return (AE_OK); + acpi_os_printf (" (Path %s)", buffer); + + +exit: + /* Restore the debug level */ + + acpi_dbg_level = debug_level; + return (status); } #endif @@ -275,7 +299,7 @@ if ((op->opcode == AML_INT_NAMEPATH_OP && op->value.name) && (op->parent) && (acpi_gbl_db_opt_verbose)) { - acpi_ps_display_object_pathname (op); + acpi_ps_display_object_pathname (walk_state, op); } acpi_os_printf ("\n"); @@ -561,7 +585,7 @@ case AML_QWORD_OP: if (acpi_gbl_db_opt_verbose) { - acpi_os_printf ("(UINT64) 0x%8.8X%8.8X", op->value.integer64.hi, + acpi_os_printf ("(u64) 0x%8.8X%8.8X", op->value.integer64.hi, op->value.integer64.lo); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/debugger/dbdisply.c linux/drivers/acpi/debugger/dbdisply.c --- v2.4.13/linux/drivers/acpi/debugger/dbdisply.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/debugger/dbdisply.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dbdisply - debug display commands - * $Revision: 52 $ + * $Revision: 57 $ * ******************************************************************************/ @@ -246,7 +246,7 @@ } else { - acpi_os_printf ("Object Pathname: %s\n", ret_buf.pointer); + acpi_os_printf ("Object (%p) Pathname: %s\n", node, ret_buf.pointer); } if (!acpi_os_readable (node, sizeof (acpi_namespace_node))) { @@ -264,7 +264,7 @@ return; } - acpi_ut_dump_buffer (node->object, sizeof (acpi_operand_object), display, ACPI_UINT32_MAX); + acpi_ut_dump_buffer ((void *) node->object, sizeof (acpi_operand_object), display, ACPI_UINT32_MAX); acpi_ex_dump_object_descriptor (node->object, 1); } } @@ -402,7 +402,7 @@ break; case AML_REVISION_OP: - acpi_os_printf ("[Const] Revision (%X)", ACPI_CA_VERSION); + acpi_os_printf ("[Const] Revision (%X)", ACPI_CA_SUPPORT_LEVEL); break; case AML_LOCAL_OP: @@ -520,28 +520,22 @@ num_remaining_ops++; } - op_info = acpi_ps_get_opcode_info (op->opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { - /* Bad opcode or ASCII character */ - - continue; - } - - /* Decode the opcode */ - switch (ACPI_GET_OP_CLASS (op_info)) { - case OPTYPE_CONSTANT: /* argument type only */ - case OPTYPE_LITERAL: /* argument type only */ - case OPTYPE_DATA_TERM: /* argument type only */ - case OPTYPE_LOCAL_VARIABLE: /* argument type only */ - case OPTYPE_METHOD_ARGUMENT: /* argument type only */ + op_info = acpi_ps_get_opcode_info (op->opcode); + switch (op_info->class) { + case AML_CLASS_ARGUMENT: if (count_remaining) { num_remaining_operands++; } num_operands++; break; + + case AML_CLASS_UNKNOWN: + /* Bad opcode or ASCII character */ + + continue; default: if (count_remaining) { diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/debugger/dbfileio.c linux/drivers/acpi/debugger/dbfileio.c --- v2.4.13/linux/drivers/acpi/debugger/dbfileio.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/debugger/dbfileio.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: dbfileio - Debugger file I/O commands. These can't usually * be used when running the debugger in Ring 0 (Kernel mode) - * $Revision: 48 $ + * $Revision: 53 $ * ******************************************************************************/ @@ -38,16 +38,18 @@ MODULE_NAME ("dbfileio") +/* + * NOTE: this is here for lack of a better place. It is used in all + * flavors of the debugger, need LCD file + */ #ifdef ACPI_APPLICATION #include FILE *acpi_gbl_debug_file = NULL; #endif -/* - * NOTE: this is here for lack of a better place. It is used in all - * flavors of the debugger, need LCD file - */ +acpi_table_header *acpi_gbl_db_table_ptr = NULL; + /******************************************************************************* * @@ -172,7 +174,7 @@ u32 *table_length) { acpi_table_header table_header; - u8 *aml_ptr; + u8 *aml_start; u32 aml_length; u32 actual; acpi_status status; @@ -209,7 +211,7 @@ /* Allocate a buffer for the table */ *table_length = table_header.length; - *table_ptr = ACPI_MEM_ALLOCATE ((size_t) *table_length); + *table_ptr = acpi_os_allocate ((size_t) *table_length); if (!*table_ptr) { acpi_os_printf ("Could not allocate memory for ACPI table %4.4s (size=%X)\n", table_header.signature, table_header.length); @@ -217,8 +219,8 @@ } - aml_ptr = (u8 *) *table_ptr + sizeof (table_header); - aml_length = *table_length - sizeof (table_header); + aml_start = (u8 *) *table_ptr + sizeof (table_header); + aml_length = *table_length - sizeof (table_header); /* Copy the header to the buffer */ @@ -226,19 +228,19 @@ /* Get the rest of the table */ - actual = fread (aml_ptr, 1, (size_t) aml_length, fp); + actual = fread (aml_start, 1, (size_t) aml_length, fp); if (actual == aml_length) { return (AE_OK); } if (actual > 0) { acpi_os_printf ("Warning - reading table, asked for %X got %X\n", aml_length, actual); - return (AE_OK); + return (AE_OK); } acpi_os_printf ("Error - could not read the table file\n"); - ACPI_MEM_FREE (*table_ptr); + acpi_os_free (*table_ptr); *table_ptr = NULL; *table_length = 0; @@ -325,7 +327,6 @@ #ifdef ACPI_APPLICATION FILE *fp; acpi_status status; - acpi_table_header *table_ptr; u32 table_length; @@ -341,7 +342,7 @@ /* Get the entire file */ acpi_os_printf ("Loading Acpi table from file %s\n", filename); - status = acpi_db_load_table (fp, &table_ptr, &table_length); + status = acpi_db_load_table (fp, &acpi_gbl_db_table_ptr, &table_length); fclose(fp); if (ACPI_FAILURE (status)) { @@ -349,27 +350,25 @@ return (status); } - /* Attempt to recognize and install the table */ - status = ae_local_load_table (table_ptr); + status = ae_local_load_table (acpi_gbl_db_table_ptr); if (ACPI_FAILURE (status)) { if (status == AE_EXIST) { acpi_os_printf ("Table %4.4s is already installed\n", - &table_ptr->signature); + &acpi_gbl_db_table_ptr->signature); } - else { acpi_os_printf ("Could not install table, %s\n", acpi_format_exception (status)); } - ACPI_MEM_FREE (table_ptr); + acpi_os_free (acpi_gbl_db_table_ptr); return (status); } acpi_os_printf ("%4.4s at %p successfully installed and loaded\n", - &table_ptr->signature, table_ptr); + &acpi_gbl_db_table_ptr->signature, acpi_gbl_db_table_ptr); acpi_gbl_acpi_hardware_present = FALSE; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/debugger/dbinput.c linux/drivers/acpi/debugger/dbinput.c --- v2.4.13/linux/drivers/acpi/debugger/dbinput.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/debugger/dbinput.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dbinput - user front-end to the AML debugger - * $Revision: 68 $ + * $Revision: 72 $ * ******************************************************************************/ @@ -47,11 +47,10 @@ NATIVE_CHAR acpi_gbl_db_scope_buf[40]; NATIVE_CHAR acpi_gbl_db_debug_filename[40]; NATIVE_CHAR *acpi_gbl_db_args[DB_MAX_ARGS]; -NATIVE_CHAR *acpi_gbl_db_buffer; +NATIVE_CHAR *acpi_gbl_db_buffer = NULL; NATIVE_CHAR *acpi_gbl_db_filename = NULL; u8 acpi_gbl_db_output_to_file = FALSE; - u32 acpi_gbl_db_debug_level = ACPI_LV_VERBOSITY2; u32 acpi_gbl_db_console_debug_level = NORMAL_DEFAULT | ACPI_LV_TABLES; u8 acpi_gbl_db_output_flags = DB_CONSOLE_OUTPUT; @@ -525,7 +524,7 @@ case CMD_ALLOCATIONS: #ifdef ACPI_DBG_TRACK_ALLOCATIONS - acpi_ut_dump_current_allocations ((u32) -1, NULL); + acpi_ut_dump_allocations ((u32) -1, NULL); #endif break; @@ -917,7 +916,6 @@ * because all the semaphores are deleted during termination */ acpi_terminate (); - return (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/debugger/dbstats.c linux/drivers/acpi/debugger/dbstats.c --- v2.4.13/linux/drivers/acpi/debugger/dbstats.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/debugger/dbstats.c Wed Oct 24 14:06:22 2001 @@ -368,11 +368,11 @@ if (acpi_gbl_memory_lists[i].object_size) { - size = ROUND_UP_TO_1_k (outstanding * acpi_gbl_memory_lists[i].object_size); + size = ROUND_UP_TO_1K (outstanding * acpi_gbl_memory_lists[i].object_size); } else { - size = ROUND_UP_TO_1_k (acpi_gbl_memory_lists[i].current_total_size); + size = ROUND_UP_TO_1K (acpi_gbl_memory_lists[i].current_total_size); } acpi_os_printf (" Mem: [Alloc Free Outstanding Size] % 7d % 7d % 7d % 7d Kb\n", diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/debugger/dbutils.c linux/drivers/acpi/debugger/dbutils.c --- v2.4.13/linux/drivers/acpi/debugger/dbutils.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/debugger/dbutils.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dbutils - AML debugger utilities - * $Revision: 43 $ + * $Revision: 45 $ * ******************************************************************************/ @@ -135,7 +135,7 @@ case ACPI_TYPE_INTEGER: - acpi_os_printf ("[Integer] = %X%8.8X\n", HIDWORD (obj_desc->integer.value), + acpi_os_printf ("[Integer] = %8.8X%8.8X\n", HIDWORD (obj_desc->integer.value), LODWORD (obj_desc->integer.value)); break; @@ -265,15 +265,37 @@ acpi_parse_object *start_op; acpi_status status = AE_OK; u32 base_aml_offset; + acpi_walk_state *walk_state; + + + FUNCTION_ENTRY (); acpi_os_printf ("Pass two parse ....\n"); + while (op) { if (op->opcode == AML_METHOD_OP) { method = (acpi_parse2_object *) op; - status = acpi_ps_parse_aml (op, method->data, method->length, 0, - NULL, NULL, NULL, acpi_ds_load1_begin_op, acpi_ds_load1_end_op); + + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, + NULL, NULL, NULL); + if (!walk_state) { + return (AE_NO_MEMORY); + } + + + walk_state->parser_state.aml = + walk_state->parser_state.aml_start = method->data; + walk_state->parser_state.aml_end = + walk_state->parser_state.pkg_end = method->data + method->length; + walk_state->parser_state.start_scope = op; + + walk_state->descending_callback = acpi_ds_load1_begin_op; + walk_state->ascending_callback = acpi_ds_load1_end_op; + + + status = acpi_ps_parse_aml (walk_state); base_aml_offset = (method->value.arg)->aml_offset + 1; @@ -297,7 +319,7 @@ } if (ACPI_FAILURE (status)) { - return (status); + break; } op = acpi_ps_get_depth_next (root, op); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/debugger/dbxface.c linux/drivers/acpi/debugger/dbxface.c --- v2.4.13/linux/drivers/acpi/debugger/dbxface.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/debugger/dbxface.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dbxface - AML Debugger external interfaces - * $Revision: 41 $ + * $Revision: 45 $ * ******************************************************************************/ @@ -46,7 +46,7 @@ * * PARAMETERS: Walk_state - Current walk * Op - Current executing op - * Op_type - Type of the current AML Opcode + * Opcode_class - Class of the current AML Opcode * * RETURN: Status * @@ -58,7 +58,7 @@ acpi_db_single_step ( acpi_walk_state *walk_state, acpi_parse_object *op, - u8 op_type) + u32 opcode_class) { acpi_parse_object *next; acpi_status status = AE_OK; @@ -91,22 +91,11 @@ return (AE_OK); } - switch (op_type) { - case OPTYPE_UNDEFINED: - case OPTYPE_CONSTANT: /* argument type only */ - case OPTYPE_LITERAL: /* argument type only */ - case OPTYPE_DATA_TERM: /* argument type only */ - case OPTYPE_LOCAL_VARIABLE: /* argument type only */ - case OPTYPE_METHOD_ARGUMENT: /* argument type only */ + switch (opcode_class) { + case AML_CLASS_UNKNOWN: + case AML_CLASS_ARGUMENT: /* constants, literals, etc. do nothing */ return (AE_OK); break; - - case OPTYPE_NAMED_OBJECT: - switch (op->opcode) { - case AML_INT_NAMEPATH_OP: - return (AE_OK); - break; - } } /* @@ -270,7 +259,7 @@ /* Init globals */ - acpi_gbl_db_buffer = acpi_os_allocate (ACPI_DEBUG_BUFFER_SIZE); + acpi_gbl_db_buffer = acpi_os_callocate (ACPI_DEBUG_BUFFER_SIZE); /* Initial scope is the root */ @@ -301,6 +290,31 @@ } return (0); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_db_terminate + * + * PARAMETERS: None + * + * RETURN: Status + * + * DESCRIPTION: Stop debugger + * + ******************************************************************************/ + +void +acpi_db_terminate (void) +{ + + if (acpi_gbl_db_table_ptr) { + acpi_os_free (acpi_gbl_db_table_ptr); + } + if (acpi_gbl_db_buffer) { + acpi_os_free (acpi_gbl_db_buffer); + } } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/dispatcher/dsfield.c linux/drivers/acpi/dispatcher/dsfield.c --- v2.4.13/linux/drivers/acpi/dispatcher/dsfield.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/dispatcher/dsfield.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dsfield - Dispatcher field routines - * $Revision: 44 $ + * $Revision: 46 $ * *****************************************************************************/ @@ -29,78 +29,178 @@ #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" +#include "acparser.h" #define _COMPONENT ACPI_DISPATCHER MODULE_NAME ("dsfield") -/* - * Field flags: Bits 00 - 03 : Access_type (Any_acc, Byte_acc, etc.) - * 04 : Lock_rule (1 == Lock) - * 05 - 06 : Update_rule - */ - -#define FIELD_ACCESS_TYPE_MASK 0x0F -#define FIELD_LOCK_RULE_MASK 0x10 -#define FIELD_UPDATE_RULE_MASK 0x60 - - /******************************************************************************* * - * FUNCTION: Acpi_ds_create_field + * FUNCTION: Acpi_ds_create_buffer_field * - * PARAMETERS: Op - Op containing the Field definition and args - * Region_node - Object for the containing Operation Region - * ` Walk_state - Current method state + * PARAMETERS: Opcode - The opcode to be executed + * Operands - List of operands for the opcode + * Walk_state - Current state * * RETURN: Status * - * DESCRIPTION: Create a new field in the specified operation region + * DESCRIPTION: Execute the Create_field operators: + * Create_bit_field_op, + * Create_byte_field_op, + * Create_word_field_op, + * Create_dWord_field_op, + * Create_qWord_field_op, + * Create_field_op (all of which define fields in buffers) * ******************************************************************************/ acpi_status -acpi_ds_create_field ( +acpi_ds_create_buffer_field ( acpi_parse_object *op, - acpi_namespace_node *region_node, acpi_walk_state *walk_state) { - acpi_status status = AE_AML_ERROR; acpi_parse_object *arg; acpi_namespace_node *node; - u8 field_flags; - u32 field_bit_position = 0; + acpi_status status; + acpi_operand_object *obj_desc; - FUNCTION_TRACE_PTR ("Ds_create_field", op); + FUNCTION_TRACE ("Ds_create_buffer_field"); - /* First arg is the name of the parent Op_region */ + /* Get the Name_string argument */ - arg = op->value.arg; - if (!region_node) { - status = acpi_ns_lookup (walk_state->scope_info, arg->value.name, - ACPI_TYPE_REGION, IMODE_EXECUTE, - NS_SEARCH_PARENT, walk_state, ®ion_node); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } + if (op->opcode == AML_CREATE_FIELD_OP) { + arg = acpi_ps_get_arg (op, 3); } + else { + /* Create Bit/Byte/Word/Dword field */ - /* Second arg is the field flags */ + arg = acpi_ps_get_arg (op, 2); + } - arg = arg->next; - field_flags = (u8) arg->value.integer; + if (!arg) { + return_ACPI_STATUS (AE_AML_NO_OPERAND); + } - /* Each remaining arg is a Named Field */ + /* + * Enter the Name_string into the namespace + */ + status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, + INTERNAL_TYPE_DEF_ANY, IMODE_LOAD_PASS1, + NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, + walk_state, &(node)); + if (ACPI_FAILURE (status)) { + return_ACPI_STATUS (status); + } + + /* We could put the returned object (Node) on the object stack for later, but + * for now, we will put it in the "op" object that the parser uses, so we + * can get it again at the end of this scope + */ + op->node = node; + + /* + * If there is no object attached to the node, this node was just created and + * we need to create the field object. Otherwise, this was a lookup of an + * existing node and we don't want to create the field object again. + */ + if (node->object) { + return_ACPI_STATUS (AE_OK); + } + + /* + * The Field definition is not fully parsed at this time. + * (We must save the address of the AML for the buffer and index operands) + */ + + /* Create the buffer field object */ + + obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER_FIELD); + if (!obj_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + /* + * Allocate a method object for this field unit + */ + obj_desc->buffer_field.extra = acpi_ut_create_internal_object ( + INTERNAL_TYPE_EXTRA); + if (!obj_desc->buffer_field.extra) { + status = AE_NO_MEMORY; + goto cleanup; + } + + /* + * Remember location in AML stream of the field unit + * opcode and operands -- since the buffer and index + * operands must be evaluated. + */ + obj_desc->buffer_field.extra->extra.aml_start = ((acpi_parse2_object *) op)->data; + obj_desc->buffer_field.extra->extra.aml_length = ((acpi_parse2_object *) op)->length; + obj_desc->buffer_field.node = node; + + /* Attach constructed field descriptor to parent node */ + + status = acpi_ns_attach_object (node, obj_desc, ACPI_TYPE_BUFFER_FIELD); + + +cleanup: + + /* Remove local reference to the object */ + + acpi_ut_remove_reference (obj_desc); + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ds_get_field_names + * + * PARAMETERS: Info - Create_field info structure + * ` Walk_state - Current method state + * Arg - First parser arg for the field name list + * + * RETURN: Status + * + * DESCRIPTION: Process all named fields in a field declaration. Names are + * entered into the namespace. + * + ******************************************************************************/ + +acpi_status +acpi_ds_get_field_names ( + ACPI_CREATE_FIELD_INFO *info, + acpi_walk_state *walk_state, + acpi_parse_object *arg) +{ + acpi_status status; + + + FUNCTION_TRACE_U32 ("Ds_get_field_names", info); + + + /* First field starts at bit zero */ + + info->field_bit_position = 0; + + /* Process all elements in the field list (of parse nodes) */ - arg = arg->next; while (arg) { + /* + * Three types of field elements are handled: + * 1) Offset - specifies a bit offset + * 2) Access_as - changes the access mode + * 3) Name - Enters a new named field into the namespace + */ switch (arg->opcode) { case AML_INT_RESERVEDFIELD_OP: - field_bit_position += arg->value.size; + info->field_bit_position += arg->value.size; break; @@ -110,48 +210,57 @@ * Get a new Access_type and Access_attribute for all * entries (until end or another Access_as keyword) */ - field_flags = (u8) ((field_flags & FIELD_ACCESS_TYPE_MASK) || - ((u8) (arg->value.integer >> 8))); + info->field_flags = (u8) ((info->field_flags & FIELD_ACCESS_TYPE_MASK) || + ((u8) (arg->value.integer >> 8))); break; case AML_INT_NAMEDFIELD_OP: + /* Enter a new field name into the namespace */ + status = acpi_ns_lookup (walk_state->scope_info, (NATIVE_CHAR *) &((acpi_parse2_object *)arg)->name, - INTERNAL_TYPE_REGION_FIELD, IMODE_LOAD_PASS1, + info->field_type, IMODE_LOAD_PASS1, NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &node); + NULL, &info->field_node); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } - /* - * Initialize an object for the new Node that is on - * the object stack - */ - status = acpi_ex_prep_region_field_value (node, region_node, field_flags, - field_bit_position, arg->value.size); + /* Create and initialize an object for the new Field Node */ + + info->field_bit_length = arg->value.size; + + status = acpi_ex_prep_field_value (info); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } - /* Keep track of bit position for *next* field */ + /* Keep track of bit position for the next field */ + + info->field_bit_position += info->field_bit_length; + break; + + + default: - field_bit_position += arg->value.size; + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid opcode in field list: %X\n", + arg->opcode)); + return_ACPI_STATUS (AE_AML_ERROR); break; } arg = arg->next; } - return_ACPI_STATUS (status); + return_ACPI_STATUS (AE_OK); } /******************************************************************************* * - * FUNCTION: Acpi_ds_create_bank_field + * FUNCTION: Acpi_ds_create_field * * PARAMETERS: Op - Op containing the Field definition and args * Region_node - Object for the containing Operation Region @@ -159,29 +268,25 @@ * * RETURN: Status * - * DESCRIPTION: Create a new bank field in the specified operation region + * DESCRIPTION: Create a new field in the specified operation region * ******************************************************************************/ acpi_status -acpi_ds_create_bank_field ( +acpi_ds_create_field ( acpi_parse_object *op, acpi_namespace_node *region_node, acpi_walk_state *walk_state) { acpi_status status = AE_AML_ERROR; acpi_parse_object *arg; - acpi_namespace_node *register_node; - acpi_namespace_node *node; - u32 bank_value; - u8 field_flags; - u32 field_bit_position = 0; + ACPI_CREATE_FIELD_INFO info; - FUNCTION_TRACE_PTR ("Ds_create_bank_field", op); + FUNCTION_TRACE_PTR ("Ds_create_field", op); - /* First arg is the name of the parent Op_region */ + /* First arg is the name of the parent Op_region (must already exist) */ arg = op->value.arg; if (!region_node) { @@ -193,82 +298,88 @@ } } - /* Second arg is the Bank Register */ + /* Second arg is the field flags */ arg = arg->next; + info.field_flags = arg->value.integer8; - status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, - INTERNAL_TYPE_BANK_FIELD_DEFN, IMODE_LOAD_PASS1, - NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, ®ister_node); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } + /* Each remaining arg is a Named Field */ - /* Third arg is the Bank_value */ + info.field_type = INTERNAL_TYPE_REGION_FIELD; + info.region_node = region_node; - arg = arg->next; - bank_value = arg->value.integer32; + status = acpi_ds_get_field_names (&info, walk_state, arg->next); + return_ACPI_STATUS (status); +} - /* Next arg is the field flags */ - arg = arg->next; - field_flags = arg->value.integer8; +/******************************************************************************* + * + * FUNCTION: Acpi_ds_create_bank_field + * + * PARAMETERS: Op - Op containing the Field definition and args + * Region_node - Object for the containing Operation Region + * ` Walk_state - Current method state + * + * RETURN: Status + * + * DESCRIPTION: Create a new bank field in the specified operation region + * + ******************************************************************************/ - /* Each remaining arg is a Named Field */ +acpi_status +acpi_ds_create_bank_field ( + acpi_parse_object *op, + acpi_namespace_node *region_node, + acpi_walk_state *walk_state) +{ + acpi_status status = AE_AML_ERROR; + acpi_parse_object *arg; + ACPI_CREATE_FIELD_INFO info; - arg = arg->next; - while (arg) { - switch (arg->opcode) { - case AML_INT_RESERVEDFIELD_OP: - field_bit_position += arg->value.size; - break; + FUNCTION_TRACE_PTR ("Ds_create_bank_field", op); - case AML_INT_ACCESSFIELD_OP: + /* First arg is the name of the parent Op_region (must already exist) */ - /* - * Get a new Access_type and Access_attribute for - * all entries (until end or another Access_as keyword) - */ - field_flags = (u8) ((field_flags & FIELD_ACCESS_TYPE_MASK) || - ((u8) (arg->value.integer >> 8))); - break; + arg = op->value.arg; + if (!region_node) { + status = acpi_ns_lookup (walk_state->scope_info, arg->value.name, + ACPI_TYPE_REGION, IMODE_EXECUTE, + NS_SEARCH_PARENT, walk_state, ®ion_node); + if (ACPI_FAILURE (status)) { + return_ACPI_STATUS (status); + } + } + /* Second arg is the Bank Register (must already exist) */ - case AML_INT_NAMEDFIELD_OP: + arg = arg->next; + status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, + INTERNAL_TYPE_BANK_FIELD_DEFN, IMODE_EXECUTE, + NS_SEARCH_PARENT, walk_state, &info.register_node); + if (ACPI_FAILURE (status)) { + return_ACPI_STATUS (status); + } - status = acpi_ns_lookup (walk_state->scope_info, - (NATIVE_CHAR *) &((acpi_parse2_object *)arg)->name, - INTERNAL_TYPE_REGION_FIELD, IMODE_LOAD_PASS1, - NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &node); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } + /* Third arg is the Bank_value */ - /* - * Initialize an object for the new Node that is on - * the object stack - */ - status = acpi_ex_prep_bank_field_value (node, region_node, register_node, - bank_value, field_flags, field_bit_position, - arg->value.size); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } + arg = arg->next; + info.bank_value = arg->value.integer32; - /* Keep track of bit position for the *next* field */ + /* Fourth arg is the field flags */ - field_bit_position += arg->value.size; - break; + arg = arg->next; + info.field_flags = arg->value.integer8; - } + /* Each remaining arg is a Named Field */ - arg = arg->next; - } + info.field_type = INTERNAL_TYPE_BANK_FIELD; + info.region_node = region_node; + + status = acpi_ds_get_field_names (&info, walk_state, arg->next); return_ACPI_STATUS (status); } @@ -296,107 +407,44 @@ { acpi_status status; acpi_parse_object *arg; - acpi_namespace_node *node; - acpi_namespace_node *index_register_node; - acpi_namespace_node *data_register_node; - u8 field_flags; - u32 field_bit_position = 0; + ACPI_CREATE_FIELD_INFO info; FUNCTION_TRACE_PTR ("Ds_create_index_field", op); - arg = op->value.arg; - - /* First arg is the name of the Index register */ + /* First arg is the name of the Index register (must already exist) */ + arg = op->value.arg; status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, - ACPI_TYPE_ANY, IMODE_LOAD_PASS1, - NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &index_register_node); + ACPI_TYPE_ANY, IMODE_EXECUTE, + NS_SEARCH_PARENT, walk_state, &info.register_node); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } - /* Second arg is the data register */ + /* Second arg is the data register (must already exist) */ arg = arg->next; - status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, - INTERNAL_TYPE_INDEX_FIELD_DEFN, IMODE_LOAD_PASS1, - NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &data_register_node); + INTERNAL_TYPE_INDEX_FIELD_DEFN, IMODE_EXECUTE, + NS_SEARCH_PARENT, walk_state, &info.data_register_node); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } - /* Next arg is the field flags */ arg = arg->next; - field_flags = (u8) arg->value.integer; + info.field_flags = arg->value.integer8; /* Each remaining arg is a Named Field */ - arg = arg->next; - while (arg) { - switch (arg->opcode) { - case AML_INT_RESERVEDFIELD_OP: - - field_bit_position += arg->value.size; - break; - - - case AML_INT_ACCESSFIELD_OP: - - /* - * Get a new Access_type and Access_attribute for all - * entries (until end or another Access_as keyword) - */ - field_flags = (u8) ((field_flags & FIELD_ACCESS_TYPE_MASK) || - ((u8) (arg->value.integer >> 8))); - break; - + info.field_type = INTERNAL_TYPE_INDEX_FIELD; + info.region_node = region_node; - case AML_INT_NAMEDFIELD_OP: - - status = acpi_ns_lookup (walk_state->scope_info, - (NATIVE_CHAR *) &((acpi_parse2_object *)arg)->name, - INTERNAL_TYPE_INDEX_FIELD, IMODE_LOAD_PASS1, - NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &node); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - - /* - * Initialize an object for the new Node that is on - * the object stack - */ - status = acpi_ex_prep_index_field_value (node, index_register_node, - data_register_node, field_flags, - field_bit_position, arg->value.size); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - - /* Keep track of bit position for the *next* field */ - - field_bit_position += arg->value.size; - break; - - - default: - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid opcode in field list: %X\n", - arg->opcode)); - status = AE_AML_ERROR; - break; - } - - arg = arg->next; - } + status = acpi_ds_get_field_names (&info, walk_state, arg->next); return_ACPI_STATUS (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/dispatcher/dsmethod.c linux/drivers/acpi/dispatcher/dsmethod.c --- v2.4.13/linux/drivers/acpi/dispatcher/dsmethod.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/dispatcher/dsmethod.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dsmethod - Parser/Interpreter interface - control method parsing - * $Revision: 65 $ + * $Revision: 69 $ * *****************************************************************************/ @@ -65,6 +65,7 @@ acpi_parse_object *op; acpi_namespace_node *node; acpi_owner_id owner_id; + acpi_walk_state *walk_state; FUNCTION_TRACE_PTR ("Ds_parse_method", obj_handle); @@ -77,7 +78,7 @@ } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Parsing [%4.4s] **** Named_obj=%p\n", - &((acpi_namespace_node *)obj_handle)->name, obj_handle)); + (char*)&((acpi_namespace_node *)obj_handle)->name, obj_handle)); /* Extract the method object from the method Node */ @@ -88,7 +89,7 @@ return_ACPI_STATUS (AE_NULL_OBJECT); } - /* Create a mutex for the method if there is a concurrency limit */ + /* Create a mutex for the method if there is a concurrency limit */ if ((obj_desc->method.concurrency != INFINITE_CONCURRENCY) && (!obj_desc->method.semaphore)) { @@ -114,6 +115,20 @@ acpi_ps_set_name (op, node->name); op->node = node; + /* Create and initialize a new walk state */ + + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, + NULL, NULL, NULL); + if (!walk_state) { + return_ACPI_STATUS (AE_NO_MEMORY); + } + + status = acpi_ds_init_aml_walk (walk_state, op, node, obj_desc->method.aml_start, + obj_desc->method.aml_length, NULL, NULL, 1); + if (ACPI_FAILURE (status)) { + /* TBD: delete walk state */ + return_ACPI_STATUS (status); + } /* * Parse the method, first pass @@ -125,12 +140,7 @@ * method so that operands to the named objects can * take on dynamic run-time values. */ - status = acpi_ps_parse_aml (op, obj_desc->method.pcode, - obj_desc->method.pcode_length, - ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE, - node, NULL, NULL, - acpi_ds_load1_begin_op, acpi_ds_load1_end_op); - + status = acpi_ps_parse_aml (walk_state); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } @@ -141,10 +151,7 @@ obj_desc->method.owning_id = owner_id; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** [%4.4s] Parsed **** Named_obj=%p Op=%p\n", - &((acpi_namespace_node *)obj_handle)->name, obj_handle, op)); - - /* Install the parsed tree in the method object */ - /* TBD: [Restructure] Obsolete field? */ + (char*)&((acpi_namespace_node *)obj_handle)->name, obj_handle, op)); acpi_ps_delete_parse_tree (op); @@ -242,13 +249,12 @@ acpi_ds_call_control_method ( acpi_walk_list *walk_list, acpi_walk_state *this_walk_state, - acpi_parse_object *op) + acpi_parse_object *op) /* TBD: This operand is obsolete */ { acpi_status status; acpi_namespace_node *method_node; acpi_operand_object *obj_desc; acpi_walk_state *next_walk_state; - acpi_parse_state *parser_state; u32 i; @@ -270,7 +276,6 @@ return_ACPI_STATUS (AE_NULL_OBJECT); } - /* Init for new method, wait on concurrency semaphore */ status = acpi_ds_begin_method_execution (method_node, obj_desc, @@ -279,78 +284,62 @@ return_ACPI_STATUS (status); } - /* Create and initialize a new parser state */ - - parser_state = acpi_ps_create_state (obj_desc->method.pcode, - obj_desc->method.pcode_length); - if (!parser_state) { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - acpi_ps_init_scope (parser_state, NULL); - parser_state->start_node = method_node; - - /* Create a new state for the preempting walk */ + /* 1) Parse: Create a new walk state for the preempting walk */ next_walk_state = acpi_ds_create_walk_state (obj_desc->method.owning_id, - NULL, obj_desc, walk_list); + op, obj_desc, NULL); if (!next_walk_state) { - /* TBD: delete parser state */ - return_ACPI_STATUS (AE_NO_MEMORY); + goto cleanup; } - next_walk_state->walk_type = WALK_METHOD; - next_walk_state->method_node = method_node; - next_walk_state->parser_state = parser_state; - next_walk_state->parse_flags = this_walk_state->parse_flags; - next_walk_state->descending_callback = this_walk_state->descending_callback; - next_walk_state->ascending_callback = this_walk_state->ascending_callback; - - /* The Next_op of the Next_walk will be the beginning of the method */ - /* TBD: [Restructure] -- obsolete? */ - - next_walk_state->next_op = NULL; + /* Create and init a Root Node */ - /* Open a new scope */ + op = acpi_ps_alloc_op (AML_SCOPE_OP); + if (!op) { + status = AE_NO_MEMORY; + goto cleanup; + } - status = acpi_ds_scope_stack_push (method_node, - ACPI_TYPE_METHOD, next_walk_state); + status = acpi_ds_init_aml_walk (next_walk_state, op, method_node, + obj_desc->method.aml_start, obj_desc->method.aml_length, + NULL, NULL, 1); if (ACPI_FAILURE (status)) { + /* TBD: delete walk state */ goto cleanup; } + /* Begin AML parse */ + + status = acpi_ps_parse_aml (next_walk_state); + acpi_ps_delete_parse_tree (op); + + + /* 2) Execute: Create a new state for the preempting walk */ + + next_walk_state = acpi_ds_create_walk_state (obj_desc->method.owning_id, + NULL, obj_desc, walk_list); + if (!next_walk_state) { + status = AE_NO_MEMORY; + goto cleanup; + } /* - * Initialize the arguments for the method. The resolved - * arguments were put on the previous walk state's operand + * The resolved arguments were put on the previous walk state's operand * stack. Operands on the previous walk state stack always * start at index 0. + * Null terminate the list of arguments */ - status = acpi_ds_method_data_init_args (&this_walk_state->operands[0], - this_walk_state->num_operands, - next_walk_state); + this_walk_state->operands [this_walk_state->num_operands] = NULL; + + status = acpi_ds_init_aml_walk (next_walk_state, NULL, method_node, + obj_desc->method.aml_start, obj_desc->method.aml_length, + &this_walk_state->operands[0], NULL, 3); if (ACPI_FAILURE (status)) { goto cleanup; } - - /* Create and init a Root Node */ - - op = acpi_ps_alloc_op (AML_SCOPE_OP); - if (!op) { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - status = acpi_ps_parse_aml (op, obj_desc->method.pcode, - obj_desc->method.pcode_length, - ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE, - method_node, NULL, NULL, - acpi_ds_load1_begin_op, acpi_ds_load1_end_op); - acpi_ps_delete_parse_tree (op); - - /* * Delete the operands on the previous walkstate operand stack * (they were copied to new objects) @@ -363,7 +352,6 @@ /* Clear the operand stack */ this_walk_state->num_operands = 0; - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Starting nested execution, newstate=%p\n", next_walk_state)); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/dispatcher/dsobject.c linux/drivers/acpi/dispatcher/dsobject.c --- v2.4.13/linux/drivers/acpi/dispatcher/dsobject.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/dispatcher/dsobject.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dsobject - Dispatcher object management routines - * $Revision: 75 $ + * $Revision: 81 $ * *****************************************************************************/ @@ -64,7 +64,7 @@ { acpi_object_type8 type; acpi_status status; - ACPI_INIT_WALK_INFO *info = (ACPI_INIT_WALK_INFO *) context; + acpi_init_walk_info *info = (acpi_init_walk_info *) context; u8 table_revision; @@ -118,15 +118,14 @@ * Always parse methods to detect errors, we may delete * the parse tree below */ - status = acpi_ds_parse_method (obj_handle); - - /* TBD: [Errors] what do we do with an error? */ - if (ACPI_FAILURE (status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Method %p [%4.4s] parse failed! %s\n", - obj_handle, &((acpi_namespace_node *)obj_handle)->name, + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Method %p [%4.4s] - parse failure, %s\n", + obj_handle, (char*)&((acpi_namespace_node *)obj_handle)->name, acpi_format_exception (status))); + + /* This parse failed, but we will continue parsing more methods */ + break; } @@ -168,7 +167,7 @@ acpi_namespace_node *start_node) { acpi_status status; - ACPI_INIT_WALK_INFO info; + acpi_init_walk_info info; FUNCTION_TRACE ("Ds_initialize_objects"); @@ -241,7 +240,7 @@ obj_desc = *ret_obj_desc; op_info = acpi_ps_get_opcode_info (opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (op_info->class == AML_CLASS_UNKNOWN) { /* Unknown opcode */ return (AE_TYPE); @@ -308,7 +307,7 @@ byte_list = (acpi_parse2_object *) arg->next; if (byte_list) { if (byte_list->opcode != AML_INT_BYTELIST_OP) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Expecting bytelist, got: %x\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Expecting bytelist, got: %p\n", byte_list)); return (AE_TYPE); } @@ -356,8 +355,8 @@ case INTERNAL_TYPE_REFERENCE: - switch (ACPI_GET_OP_CLASS (op_info)) { - case OPTYPE_LOCAL_VARIABLE: + switch (op_info->type) { + case AML_TYPE_LOCAL_VARIABLE: /* Split the opcode into a base opcode + offset */ @@ -366,7 +365,7 @@ break; - case OPTYPE_METHOD_ARGUMENT: + case AML_TYPE_METHOD_ARGUMENT: /* Split the opcode into a base opcode + offset */ @@ -655,6 +654,15 @@ FUNCTION_TRACE_PTR ("Ds_create_node", op); + /* + * Because of the execution pass through the non-control-method + * parts of the table, we can arrive here twice. Only init + * the named object node the first time through + */ + if (node->object) { + return_ACPI_STATUS (AE_OK); + } + if (!op->value.arg) { /* No arguments, there is nothing to do */ @@ -675,14 +683,8 @@ /* Init obj */ status = acpi_ns_attach_object (node, obj_desc, (u8) node->type); - if (ACPI_FAILURE (status)) { - goto cleanup; - } - - return_ACPI_STATUS (status); - -cleanup: + /* Remove local reference to the object */ acpi_ut_remove_reference (obj_desc); return_ACPI_STATUS (status); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/dispatcher/dsopcode.c linux/drivers/acpi/dispatcher/dsopcode.c --- v2.4.13/linux/drivers/acpi/dispatcher/dsopcode.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/dispatcher/dsopcode.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: dsopcode - Dispatcher Op Region support and handling of * "control" opcodes - * $Revision: 52 $ + * $Revision: 56 $ * *****************************************************************************/ @@ -61,6 +61,7 @@ acpi_parse_object *field_op; acpi_status status; acpi_table_desc *table_desc; + acpi_walk_state *walk_state; FUNCTION_TRACE_PTR ("Ds_get_buffer_field_arguments", obj_desc); @@ -78,7 +79,7 @@ DEBUG_EXEC(acpi_ut_display_init_pathname (node, " [Field]")); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] Buffer_field JIT Init\n", - &node->name)); + (char*)&node->name)); /* @@ -101,17 +102,34 @@ return_ACPI_STATUS (status); } + /* Create and initialize a new parser state */ + + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, + NULL, NULL, NULL); + if (!walk_state) { + return_ACPI_STATUS (AE_NO_MEMORY); + } + + status = acpi_ds_init_aml_walk (walk_state, op, NULL, extra_desc->extra.aml_start, + extra_desc->extra.aml_length, NULL, NULL, 1); + if (ACPI_FAILURE (status)) { + /* TBD: delete walk state */ + return_ACPI_STATUS (status); + } + + /* TBD: No Walk flags?? */ + + walk_state->parse_flags = 0; + /* Pass1: Parse the entire Buffer_field declaration */ - status = acpi_ps_parse_aml (op, extra_desc->extra.pcode, - extra_desc->extra.pcode_length, 0, - NULL, NULL, NULL, acpi_ds_load1_begin_op, acpi_ds_load1_end_op); + status = acpi_ps_parse_aml (walk_state); if (ACPI_FAILURE (status)) { acpi_ps_delete_parse_tree (op); return_ACPI_STATUS (status); } - /* Get and init the actual Fiel_unit_op created above */ + /* Get and init the actual Field_unit Op created above */ field_op = op->value.arg; op->node = node; @@ -121,7 +139,7 @@ field_op->node = node; acpi_ps_delete_parse_tree (op); - /* Acpi_evaluate the address and length arguments for the Op_region */ + /* Evaluate the address and length arguments for the Op_region */ op = acpi_ps_alloc_op (AML_SCOPE_OP); if (!op) { @@ -130,15 +148,23 @@ op->node = acpi_ns_get_parent_object (node); - status = acpi_ps_parse_aml (op, extra_desc->extra.pcode, - extra_desc->extra.pcode_length, - ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE, - NULL /*Method_desc*/, NULL, NULL, - acpi_ds_exec_begin_op, acpi_ds_exec_end_op); - /* All done with the parse tree, delete it */ + /* Create and initialize a new parser state */ - acpi_ps_delete_parse_tree (op); + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, + NULL, NULL, NULL); + if (!walk_state) { + return_ACPI_STATUS (AE_NO_MEMORY); + } + status = acpi_ds_init_aml_walk (walk_state, op, NULL, extra_desc->extra.aml_start, + extra_desc->extra.aml_length, NULL, NULL, 3); + if (ACPI_FAILURE (status)) { + /* TBD: delete walk state */ + return_ACPI_STATUS (status); + } + + status = acpi_ps_parse_aml (walk_state); + acpi_ps_delete_parse_tree (op); /* * The pseudo-method object is no longer needed since the region is @@ -174,6 +200,7 @@ acpi_parse_object *region_op; acpi_status status; acpi_table_desc *table_desc; + acpi_walk_state *walk_state; FUNCTION_TRACE_PTR ("Ds_get_region_arguments", obj_desc); @@ -191,9 +218,8 @@ DEBUG_EXEC(acpi_ut_display_init_pathname (node, " [Operation Region]")); - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] Op_region Init at AML %p[%x]\n", - &node->name, extra_desc->extra.pcode, - *(u32*) extra_desc->extra.pcode)); + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] Op_region Init at AML %p\n", + (char*)&node->name, extra_desc->extra.aml_start)); /* * Allocate a new parser op to be the root of the parsed @@ -215,11 +241,28 @@ return_ACPI_STATUS (status); } + /* Create and initialize a new parser state */ + + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, + op, NULL, NULL); + if (!walk_state) { + return_ACPI_STATUS (AE_NO_MEMORY); + } + + status = acpi_ds_init_aml_walk (walk_state, op, NULL, extra_desc->extra.aml_start, + extra_desc->extra.aml_length, NULL, NULL, 1); + if (ACPI_FAILURE (status)) { + /* TBD: delete walk state */ + return_ACPI_STATUS (status); + } + + /* TBD: No Walk flags?? */ + + walk_state->parse_flags = 0; + /* Parse the entire Op_region declaration, creating a parse tree */ - status = acpi_ps_parse_aml (op, extra_desc->extra.pcode, - extra_desc->extra.pcode_length, 0, - NULL, NULL, NULL, acpi_ds_load1_begin_op, acpi_ds_load1_end_op); + status = acpi_ps_parse_aml (walk_state); if (ACPI_FAILURE (status)) { acpi_ps_delete_parse_tree (op); return_ACPI_STATUS (status); @@ -244,14 +287,22 @@ op->node = acpi_ns_get_parent_object (node); - status = acpi_ps_parse_aml (op, extra_desc->extra.pcode, - extra_desc->extra.pcode_length, - ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE, - NULL /*Method_desc*/, NULL, NULL, - acpi_ds_exec_begin_op, acpi_ds_exec_end_op); + /* Create and initialize a new parser state */ + + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, + op, NULL, NULL); + if (!walk_state) { + return_ACPI_STATUS (AE_NO_MEMORY); + } - /* All done with the parse tree, delete it */ + status = acpi_ds_init_aml_walk (walk_state, op, NULL, extra_desc->extra.aml_start, + extra_desc->extra.aml_length, NULL, NULL, 3); + if (ACPI_FAILURE (status)) { + /* TBD: delete walk state */ + return_ACPI_STATUS (status); + } + status = acpi_ps_parse_aml (walk_state); acpi_ps_delete_parse_tree (op); return_ACPI_STATUS (status); @@ -668,7 +719,7 @@ acpi_ut_remove_reference (operand_desc); - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Rgn_obj %p Addr %8.8lX%8.8lX Len %X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Rgn_obj %p Addr %8.8X%8.8X Len %X\n", obj_desc, HIDWORD(obj_desc->region.address), LODWORD(obj_desc->region.address), obj_desc->region.length)); @@ -731,7 +782,7 @@ * of a loop */ walk_state->control_state->control.aml_predicate_start = - walk_state->parser_state->aml - 1; + walk_state->parser_state.aml - 1; /* TBD: can this be removed? */ /*Acpi_ps_pkg_length_encoding_size (GET8 (Walk_state->Parser_state->Aml));*/ break; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/dispatcher/dsutils.c linux/drivers/acpi/dispatcher/dsutils.c --- v2.4.13/linux/drivers/acpi/dispatcher/dsutils.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/dispatcher/dsutils.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: dsutils - Dispatcher utilities - * $Revision: 72 $ + * $Revision: 80 $ * ******************************************************************************/ @@ -85,8 +85,8 @@ */ parent_info = acpi_ps_get_opcode_info (op->parent->opcode); - if (ACPI_GET_OP_TYPE (parent_info) != ACPI_OP_TYPE_OPCODE) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown parent opcode. Op=%X\n", op)); + if (parent_info->class == AML_CLASS_UNKNOWN) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown parent opcode. Op=%p\n", op)); return_VALUE (FALSE); } @@ -97,11 +97,11 @@ * Otherwise leave it as is, it will be deleted when it is used * as an operand later. */ - switch (ACPI_GET_OP_CLASS (parent_info)) { + switch (parent_info->class) { /* * In these cases, the parent will never use the return object */ - case OPTYPE_CONTROL: /* IF, ELSE, WHILE only */ + case AML_CLASS_CONTROL: /* IF, ELSE, WHILE only */ switch (op->parent->opcode) { case AML_RETURN_OP: @@ -109,7 +109,7 @@ /* Never delete the return value associated with a return opcode */ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Result used, [RETURN] opcode=%X Op=%X\n", op->opcode, op)); + "Result used, [RETURN] opcode=%X Op=%p\n", op->opcode, op)); return_VALUE (TRUE); break; @@ -123,7 +123,7 @@ if ((walk_state->control_state->common.state == CONTROL_PREDICATE_EXECUTING) && (walk_state->control_state->control.predicate_op == op)) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Result used as a predicate, [IF/WHILE] opcode=%X Op=%X\n", + "Result used as a predicate, [IF/WHILE] opcode=%X Op=%p\n", op->opcode, op)); return_VALUE (TRUE); } @@ -135,7 +135,8 @@ /* Fall through to not used case below */ - case OPTYPE_NAMED_OBJECT: /* Scope, method, etc. */ + case AML_CLASS_NAMED_OBJECT: /* Scope, method, etc. */ + case AML_CLASS_CREATE: /* * These opcodes allow Term_arg(s) as operands and therefore @@ -149,13 +150,13 @@ (op->parent->opcode == AML_CREATE_DWORD_FIELD_OP) || (op->parent->opcode == AML_CREATE_QWORD_FIELD_OP)) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Result used, [Region or Create_field] opcode=%X Op=%X\n", + "Result used, [Region or Create_field] opcode=%X Op=%p\n", op->opcode, op)); return_VALUE (TRUE); } ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Result not used, Parent opcode=%X Op=%X\n", op->opcode, op)); + "Result not used, Parent opcode=%X Op=%p\n", op->opcode, op)); return_VALUE (FALSE); break; @@ -338,6 +339,11 @@ * very serious error at this point */ status = AE_AML_NAME_NOT_FOUND; + + /* TBD: Externalize Name_string and print */ + + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, + "Object name was not found in namespace\n")); } } @@ -580,16 +586,21 @@ op_info = acpi_ps_get_opcode_info (opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (op_info->class == AML_CLASS_UNKNOWN) { /* Unknown opcode */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown AML opcode: %x\n", opcode)); return (data_type); } - switch (ACPI_GET_OP_CLASS (op_info)) { - case OPTYPE_LITERAL: +/* + * TBD: Use op class + */ + + switch (op_info->type) { + + case AML_TYPE_LITERAL: switch (opcode) { case AML_BYTE_OP: @@ -618,7 +629,7 @@ break; - case OPTYPE_DATA_TERM: + case AML_TYPE_DATA_TERM: switch (opcode) { case AML_BUFFER_OP: @@ -640,44 +651,49 @@ break; - case OPTYPE_CONSTANT: - case OPTYPE_METHOD_ARGUMENT: - case OPTYPE_LOCAL_VARIABLE: + case AML_TYPE_CONSTANT: + case AML_TYPE_METHOD_ARGUMENT: + case AML_TYPE_LOCAL_VARIABLE: data_type = INTERNAL_TYPE_REFERENCE; break; - case OPTYPE_MONADIC2: - case OPTYPE_MONADIC2_r: - case OPTYPE_DYADIC2: - case OPTYPE_DYADIC2_r: - case OPTYPE_DYADIC2_s: - case OPTYPE_TRIADIC: - case OPTYPE_QUADRADIC: - case OPTYPE_HEXADIC: - case OPTYPE_RETURN: + case AML_TYPE_EXEC_1A_0T_1R: + case AML_TYPE_EXEC_1A_1T_1R: + case AML_TYPE_EXEC_2A_0T_1R: + case AML_TYPE_EXEC_2A_1T_1R: + case AML_TYPE_EXEC_2A_2T_1R: + case AML_TYPE_EXEC_3A_1T_1R: + case AML_TYPE_EXEC_6A_0T_1R: + case AML_TYPE_RETURN: flags = OP_HAS_RETURN_VALUE; data_type = ACPI_TYPE_ANY; break; - case OPTYPE_METHOD_CALL: + case AML_TYPE_METHOD_CALL: flags = OP_HAS_RETURN_VALUE; data_type = ACPI_TYPE_METHOD; break; - case OPTYPE_NAMED_OBJECT: + case AML_TYPE_NAMED_FIELD: + case AML_TYPE_NAMED_SIMPLE: + case AML_TYPE_NAMED_COMPLEX: + case AML_TYPE_NAMED_NO_OBJ: data_type = acpi_ds_map_named_opcode_to_data_type (opcode); break; - case OPTYPE_DYADIC1: - case OPTYPE_CONTROL: + case AML_TYPE_EXEC_1A_0T_0R: + case AML_TYPE_EXEC_2A_0T_0R: + case AML_TYPE_EXEC_3A_0T_0R: + case AML_TYPE_EXEC_1A_1T_0R: + case AML_TYPE_CONTROL: /* No mapping needed at this time */ @@ -784,6 +800,7 @@ data_type = ACPI_TYPE_EVENT; break; + case AML_DATA_REGION_OP: case AML_REGION_OP: data_type = ACPI_TYPE_REGION; break; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/dispatcher/dswexec.c linux/drivers/acpi/dispatcher/dswexec.c --- v2.4.13/linux/drivers/acpi/dispatcher/dswexec.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/dispatcher/dswexec.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: dswexec - Dispatcher method execution callbacks; * dispatch to interpreter. - * $Revision: 70 $ + * $Revision: 79 $ * *****************************************************************************/ @@ -37,6 +37,21 @@ #define _COMPONENT ACPI_DISPATCHER MODULE_NAME ("dswexec") +/* + * Dispatch tables for opcode classes + */ +ACPI_EXECUTE_OP acpi_gbl_op_type_dispatch [] = { + acpi_ex_opcode_1A_0T_0R, + acpi_ex_opcode_1A_0T_1R, + acpi_ex_opcode_1A_1T_0R, + acpi_ex_opcode_1A_1T_1R, + acpi_ex_opcode_2A_0T_0R, + acpi_ex_opcode_2A_0T_1R, + acpi_ex_opcode_2A_1T_1R, + acpi_ex_opcode_2A_2T_1R, + acpi_ex_opcode_3A_0T_0R, + acpi_ex_opcode_3A_1T_1R, + acpi_ex_opcode_6A_0T_1R}; /***************************************************************************** * @@ -53,9 +68,7 @@ acpi_status acpi_ds_get_predicate_value ( acpi_walk_state *walk_state, - acpi_parse_object *op, - u32 has_result_obj) -{ + u32 has_result_obj) { acpi_status status = AE_OK; acpi_operand_object *obj_desc; @@ -77,7 +90,7 @@ } else { - status = acpi_ds_create_operand (walk_state, op, 0); + status = acpi_ds_create_operand (walk_state, walk_state->op, 0); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } @@ -91,7 +104,7 @@ } if (!obj_desc) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No predicate Obj_desc=%X State=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No predicate Obj_desc=%p State=%p\n", obj_desc, walk_state)); return_ACPI_STATUS (AE_AML_NO_OPERAND); @@ -104,7 +117,7 @@ */ if (obj_desc->common.type != ACPI_TYPE_INTEGER) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Bad predicate (not a number) Obj_desc=%X State=%X Type=%X\n", + "Bad predicate (not a number) Obj_desc=%p State=%p Type=%X\n", obj_desc, walk_state, obj_desc->common.type)); status = AE_AML_OPERAND_TYPE; @@ -136,8 +149,8 @@ cleanup: - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Completed a predicate eval=%X Op=%X\n", - walk_state->control_state->common.value, op)); + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Completed a predicate eval=%X Op=%pn", + walk_state->control_state->common.value, walk_state->op)); /* Break to debugger to display result */ @@ -159,8 +172,7 @@ * FUNCTION: Acpi_ds_exec_begin_op * * PARAMETERS: Walk_state - Current state of the parse tree walk - * Op - Op that has been just been reached in the - * walk; Arguments have not been evaluated yet. + * Out_op - Return op if a new one is created * * RETURN: Status * @@ -172,26 +184,28 @@ acpi_status acpi_ds_exec_begin_op ( - u16 opcode, - acpi_parse_object *op, acpi_walk_state *walk_state, acpi_parse_object **out_op) { - const acpi_opcode_info *op_info; + acpi_parse_object *op; acpi_status status = AE_OK; - u8 opcode_class; + u32 opcode_class; - FUNCTION_TRACE_PTR ("Ds_exec_begin_op", op); + FUNCTION_TRACE_PTR ("Ds_exec_begin_op", walk_state); + op = walk_state->op; if (!op) { - status = acpi_ds_load2_begin_op (opcode, NULL, walk_state, out_op); + status = acpi_ds_load2_begin_op (walk_state, out_op); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } op = *out_op; + walk_state->op = op; + walk_state->op_info = acpi_ps_get_opcode_info (op->opcode); + walk_state->opcode = op->opcode; } if (op == walk_state->origin) { @@ -210,7 +224,7 @@ if ((walk_state->control_state) && (walk_state->control_state->common.state == CONTROL_CONDITIONAL_EXECUTING)) { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Exec predicate Op=%X State=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Exec predicate Op=%p State=%p\n", op, walk_state)); walk_state->control_state->common.state = CONTROL_PREDICATE_EXECUTING; @@ -221,20 +235,19 @@ } - op_info = acpi_ps_get_opcode_info (op->opcode); - opcode_class = (u8) ACPI_GET_OP_CLASS (op_info); + opcode_class = walk_state->op_info->class; /* We want to send namepaths to the load code */ if (op->opcode == AML_INT_NAMEPATH_OP) { - opcode_class = OPTYPE_NAMED_OBJECT; + opcode_class = AML_CLASS_NAMED_OBJECT; } /* * Handle the opcode based upon the opcode type */ switch (opcode_class) { - case OPTYPE_CONTROL: + case AML_CLASS_CONTROL: status = acpi_ds_result_stack_push (walk_state); if (ACPI_FAILURE (status)) { @@ -245,7 +258,7 @@ break; - case OPTYPE_NAMED_OBJECT: + case AML_CLASS_NAMED_OBJECT: if (walk_state->walk_type == WALK_METHOD) { /* @@ -255,7 +268,7 @@ * will be deleted upon completion of the execution * of this method. */ - status = acpi_ds_load2_begin_op (op->opcode, op, walk_state, NULL); + status = acpi_ds_load2_begin_op (walk_state, NULL); } @@ -268,18 +281,8 @@ /* most operators with arguments */ - case OPTYPE_MONADIC1: - case OPTYPE_DYADIC1: - case OPTYPE_MONADIC2: - case OPTYPE_MONADIC2_r: - case OPTYPE_DYADIC2: - case OPTYPE_DYADIC2_r: - case OPTYPE_DYADIC2_s: - case OPTYPE_RECONFIGURATION: - case OPTYPE_TRIADIC: - case OPTYPE_QUADRADIC: - case OPTYPE_HEXADIC: - case OPTYPE_CREATE_FIELD: + case AML_CLASS_EXECUTE: + case AML_CLASS_CREATE: /* Start a new result/operand state */ @@ -315,85 +318,53 @@ acpi_status acpi_ds_exec_end_op ( - acpi_walk_state *walk_state, - acpi_parse_object *op) + acpi_walk_state *walk_state) { + acpi_parse_object *op; acpi_status status = AE_OK; - u16 opcode; - u8 optype; + u32 op_type; + u32 op_class; acpi_parse_object *next_op; acpi_parse_object *first_arg; - acpi_operand_object *result_obj = NULL; - const acpi_opcode_info *op_info; u32 i; - FUNCTION_TRACE_PTR ("Ds_exec_end_op", op); - + FUNCTION_TRACE_PTR ("Ds_exec_end_op", walk_state); - opcode = (u16) op->opcode; + op = walk_state->op; + op_type = walk_state->op_info->type; + op_class = walk_state->op_info->class; - op_info = acpi_ps_get_opcode_info (op->opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (op_class == AML_CLASS_UNKNOWN) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown opcode %X\n", op->opcode)); return_ACPI_STATUS (AE_NOT_IMPLEMENTED); } - optype = (u8) ACPI_GET_OP_CLASS (op_info); first_arg = op->value.arg; /* Init the walk state */ walk_state->num_operands = 0; walk_state->return_desc = NULL; - walk_state->op_info = op_info; - walk_state->opcode = opcode; + walk_state->result_obj = NULL; /* Call debugger for single step support (DEBUG build only) */ - DEBUGGER_EXEC (status = acpi_db_single_step (walk_state, op, optype)); + DEBUGGER_EXEC (status = acpi_db_single_step (walk_state, op, op_class)); DEBUGGER_EXEC (if (ACPI_FAILURE (status)) {return_ACPI_STATUS (status);}); - /* Decode the opcode */ - - switch (optype) { - case OPTYPE_UNDEFINED: - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Undefined opcode type Op=%X\n", op)); - return_ACPI_STATUS (AE_NOT_IMPLEMENTED); - break; - - - case OPTYPE_BOGUS: - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Internal opcode=%X type Op=%X\n", - opcode, op)); - break; + switch (op_class) { + /* Decode the Opcode Class */ - case OPTYPE_CONSTANT: /* argument type only */ - case OPTYPE_LITERAL: /* argument type only */ - case OPTYPE_DATA_TERM: /* argument type only */ - case OPTYPE_LOCAL_VARIABLE: /* argument type only */ - case OPTYPE_METHOD_ARGUMENT: /* argument type only */ + case AML_CLASS_ARGUMENT: /* constants, literals, etc. do nothing */ break; - /* most operators with arguments */ - case OPTYPE_MONADIC1: - case OPTYPE_DYADIC1: - case OPTYPE_MONADIC2: - case OPTYPE_MONADIC2_r: - case OPTYPE_DYADIC2: - case OPTYPE_DYADIC2_r: - case OPTYPE_DYADIC2_s: - case OPTYPE_RECONFIGURATION: - case OPTYPE_TRIADIC: - case OPTYPE_QUADRADIC: - case OPTYPE_HEXADIC: - + case AML_CLASS_EXECUTE: /* Build resolved operand stack */ @@ -411,14 +382,14 @@ /* Resolve all operands */ - status = acpi_ex_resolve_operands (opcode, + status = acpi_ex_resolve_operands (walk_state->opcode, &(walk_state->operands [walk_state->num_operands -1]), walk_state); if (ACPI_FAILURE (status)) { /* TBD: must pop and delete operands */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "[%s]: Could not resolve operands, %s\n", - acpi_ps_get_opcode_name (opcode), acpi_format_exception (status))); + acpi_ps_get_opcode_name (walk_state->opcode), acpi_format_exception (status))); /* * On error, we must delete all the operands and clear the @@ -430,103 +401,31 @@ } walk_state->num_operands = 0; - goto cleanup; } - DUMP_OPERANDS (WALK_OPERANDS, IMODE_EXECUTE, acpi_ps_get_opcode_name (opcode), + DUMP_OPERANDS (WALK_OPERANDS, IMODE_EXECUTE, acpi_ps_get_opcode_name (walk_state->opcode), walk_state->num_operands, "after Ex_resolve_operands"); - switch (optype) { - case OPTYPE_MONADIC1: - - /* 1 Operand, 0 External_result, 0 Internal_result */ - - status = acpi_ex_monadic1 (opcode, walk_state); - break; - - - case OPTYPE_MONADIC2: - - /* 1 Operand, 0 External_result, 1 Internal_result */ - - status = acpi_ex_monadic2 (opcode, walk_state, &result_obj); - break; - - - case OPTYPE_MONADIC2_r: - - /* 1 Operand, 1 External_result, 1 Internal_result */ - - status = acpi_ex_monadic2_r (opcode, walk_state, &result_obj); - break; - - - case OPTYPE_DYADIC1: - - /* 2 Operands, 0 External_result, 0 Internal_result */ - - status = acpi_ex_dyadic1 (opcode, walk_state); - break; - - - case OPTYPE_DYADIC2: - - /* 2 Operands, 0 External_result, 1 Internal_result */ - - status = acpi_ex_dyadic2 (opcode, walk_state, &result_obj); - break; - - - case OPTYPE_DYADIC2_r: - - /* 2 Operands, 1 or 2 External_results, 1 Internal_result */ - - status = acpi_ex_dyadic2_r (opcode, walk_state, &result_obj); - break; - - - case OPTYPE_DYADIC2_s: /* Synchronization Operator */ - - /* 2 Operands, 0 External_result, 1 Internal_result */ - - status = acpi_ex_dyadic2_s (opcode, walk_state, &result_obj); - break; - - - case OPTYPE_TRIADIC: /* Opcode with 3 operands */ - - /* 3 Operands, 1 External_result, 1 Internal_result */ - - status = acpi_ex_triadic (opcode, walk_state, &result_obj); - break; - - - case OPTYPE_QUADRADIC: /* Opcode with 4 operands */ - break; - - - case OPTYPE_HEXADIC: /* Opcode with 6 operands */ - - /* 6 Operands, 0 External_result, 1 Internal_result */ - - status = acpi_ex_hexadic (opcode, walk_state, &result_obj); - break; - - - case OPTYPE_RECONFIGURATION: - - /* 1 or 2 operands, 0 Internal Result */ + /* + * Dispatch the request to the appropriate interpreter handler + * routine. There is one routine per opcode "type" based upon the + * number of opcode arguments and return type. + */ + status = acpi_gbl_op_type_dispatch [op_type] (walk_state); - status = acpi_ex_reconfiguration (opcode, walk_state); - break; - } - /* Clear the operand stack */ + /* Delete argument objects and clear the operand stack */ for (i = 0; i < walk_state->num_operands; i++) { + /* + * Remove a reference to all operands, including both + * "Arguments" and "Targets". + */ + acpi_ut_remove_reference (walk_state->operands[i]); walk_state->operands[i] = NULL; } + walk_state->num_operands = 0; /* @@ -534,144 +433,140 @@ * current result stack */ if (ACPI_SUCCESS (status) && - result_obj) { - status = acpi_ds_result_push (result_obj, walk_state); + walk_state->result_obj) { + status = acpi_ds_result_push (walk_state->result_obj, walk_state); } break; - case OPTYPE_CONTROL: /* Type 1 opcode, IF/ELSE/WHILE/NOOP */ + default: - /* 1 Operand, 0 External_result, 0 Internal_result */ + switch (op_type) { + case AML_TYPE_CONTROL: /* Type 1 opcode, IF/ELSE/WHILE/NOOP */ - status = acpi_ds_exec_end_control_op (walk_state, op); + /* 1 Operand, 0 External_result, 0 Internal_result */ - acpi_ds_result_stack_pop (walk_state); - break; + status = acpi_ds_exec_end_control_op (walk_state, op); + acpi_ds_result_stack_pop (walk_state); + break; - case OPTYPE_METHOD_CALL: - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Method invocation, Op=%X\n", op)); + case AML_TYPE_METHOD_CALL: - /* - * (AML_METHODCALL) Op->Value->Arg->Node contains - * the method Node pointer - */ - /* Next_op points to the op that holds the method name */ + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Method invocation, Op=%p\n", op)); - next_op = first_arg; + /* + * (AML_METHODCALL) Op->Value->Arg->Node contains + * the method Node pointer + */ + /* Next_op points to the op that holds the method name */ - /* Next_op points to first argument op */ + next_op = first_arg; - next_op = next_op->next; + /* Next_op points to first argument op */ - /* - * Get the method's arguments and put them on the operand stack - */ - status = acpi_ds_create_operands (walk_state, next_op); - if (ACPI_FAILURE (status)) { - break; - } - - /* - * Since the operands will be passed to another - * control method, we must resolve all local - * references here (Local variables, arguments - * to *this* method, etc.) - */ - status = acpi_ds_resolve_operands (walk_state); - if (ACPI_FAILURE (status)) { - break; - } - - /* - * Tell the walk loop to preempt this running method and - * execute the new method - */ - status = AE_CTRL_TRANSFER; - - /* - * Return now; we don't want to disturb anything, - * especially the operand count! - */ - return_ACPI_STATUS (status); - break; + next_op = next_op->next; + /* + * Get the method's arguments and put them on the operand stack + */ + status = acpi_ds_create_operands (walk_state, next_op); + if (ACPI_FAILURE (status)) { + break; + } - case OPTYPE_CREATE_FIELD: + /* + * Since the operands will be passed to another + * control method, we must resolve all local + * references here (Local variables, arguments + * to *this* method, etc.) + */ + status = acpi_ds_resolve_operands (walk_state); + if (ACPI_FAILURE (status)) { + break; + } - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Executing Create_field Buffer/Index Op=%X\n", op)); + /* + * Tell the walk loop to preempt this running method and + * execute the new method + */ + status = AE_CTRL_TRANSFER; - status = acpi_ds_load2_end_op (walk_state, op); - if (ACPI_FAILURE (status)) { + /* + * Return now; we don't want to disturb anything, + * especially the operand count! + */ + return_ACPI_STATUS (status); break; - } - status = acpi_ds_eval_buffer_field_operands (walk_state, op); - break; + case AML_TYPE_CREATE_FIELD: - case OPTYPE_NAMED_OBJECT: + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, + "Executing Create_field Buffer/Index Op=%p\n", op)); - status = acpi_ds_load2_end_op (walk_state, op); - if (ACPI_FAILURE (status)) { + status = acpi_ds_load2_end_op (walk_state); + if (ACPI_FAILURE (status)) { + break; + } + + status = acpi_ds_eval_buffer_field_operands (walk_state, op); break; - } - switch (op->opcode) { - case AML_REGION_OP: - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Executing Op_region Address/Length Op=%X\n", op)); + case AML_TYPE_NAMED_FIELD: + case AML_TYPE_NAMED_COMPLEX: + case AML_TYPE_NAMED_SIMPLE: - status = acpi_ds_eval_region_operands (walk_state, op); + status = acpi_ds_load2_end_op (walk_state); if (ACPI_FAILURE (status)) { break; } - status = acpi_ds_result_stack_pop (walk_state); - break; + if (op->opcode == AML_REGION_OP) { + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, + "Executing Op_region Address/Length Op=%p\n", op)); + + status = acpi_ds_eval_region_operands (walk_state, op); + if (ACPI_FAILURE (status)) { + break; + } + status = acpi_ds_result_stack_pop (walk_state); + } - case AML_METHOD_OP: break; + case AML_TYPE_UNDEFINED: - case AML_ALIAS_OP: - - /* Alias creation was already handled by call - to psxload above */ + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Undefined opcode type Op=%p\n", op)); + return_ACPI_STATUS (AE_NOT_IMPLEMENTED); break; - default: - /* Nothing needs to be done */ - - status = AE_OK; + case AML_TYPE_BOGUS: + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Internal opcode=%X type Op=%p\n", + walk_state->opcode, op)); break; - } - - break; - default: + default: - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Unimplemented opcode, type=%X Opcode=%X Op=%X\n", - optype, op->opcode, op)); + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, + "Unimplemented opcode, class=%X type=%X Opcode=%X Op=%p\n", + op_class, op_type, op->opcode, op)); - status = AE_NOT_IMPLEMENTED; - break; + status = AE_NOT_IMPLEMENTED; + break; + } } - /* * ACPI 2.0 support for 64-bit integers: * Truncate numeric result value if we are executing from a 32-bit ACPI table */ - acpi_ex_truncate_for32bit_table (result_obj, walk_state); + acpi_ex_truncate_for32bit_table (walk_state->result_obj, walk_state); /* * Check if we just completed the evaluation of a @@ -682,23 +577,23 @@ (walk_state->control_state->common.state == CONTROL_PREDICATE_EXECUTING) && (walk_state->control_state->control.predicate_op == op)) { - status = acpi_ds_get_predicate_value (walk_state, op, (u32) result_obj); - result_obj = NULL; + status = acpi_ds_get_predicate_value (walk_state, (u32) walk_state->result_obj); + walk_state->result_obj = NULL; } cleanup: - if (result_obj) { + if (walk_state->result_obj) { /* Break to debugger to display result */ - DEBUGGER_EXEC (acpi_db_display_result_object (result_obj, walk_state)); + DEBUGGER_EXEC (acpi_db_display_result_object (walk_state->result_obj, walk_state)); /* * Delete the result op if and only if: * Parent will not use the result -- such as any * non-nested type2 op in a method (parent will be method) */ - acpi_ds_delete_result_if_not_used (op, result_obj, walk_state); + acpi_ds_delete_result_if_not_used (op, walk_state->result_obj, walk_state); } /* Always clear the object stack */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/dispatcher/dswload.c linux/drivers/acpi/dispatcher/dswload.c --- v2.4.13/linux/drivers/acpi/dispatcher/dswload.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/dispatcher/dswload.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dswload - Dispatcher namespace load callbacks - * $Revision: 44 $ + * $Revision: 50 $ * *****************************************************************************/ @@ -39,6 +39,53 @@ /******************************************************************************* * + * FUNCTION: Acpi_ds_init_callbacks + * + * PARAMETERS: Walk_state - Current state of the parse tree walk + * Pass_number - 1, 2, or 3 + * + * RETURN: Status + * + * DESCRIPTION: Init walk state callbacks + * + ******************************************************************************/ + +acpi_status +acpi_ds_init_callbacks ( + acpi_walk_state *walk_state, + u32 pass_number) +{ + + switch (pass_number) { + case 1: + walk_state->parse_flags = ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE; + walk_state->descending_callback = acpi_ds_load1_begin_op; + walk_state->ascending_callback = acpi_ds_load1_end_op; + break; + + case 2: + walk_state->parse_flags = ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE; + walk_state->descending_callback = acpi_ds_load2_begin_op; + walk_state->ascending_callback = acpi_ds_load2_end_op; + break; + + case 3: + walk_state->parse_flags |= ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE; + walk_state->descending_callback = acpi_ds_exec_begin_op; + walk_state->ascending_callback = acpi_ds_exec_end_op; + break; + + default: + return (AE_BAD_PARAMETER); + break; + } + + return (AE_OK); +} + + +/******************************************************************************* + * * FUNCTION: Acpi_ds_load1_begin_op * * PARAMETERS: Walk_state - Current state of the parse tree walk @@ -53,49 +100,50 @@ acpi_status acpi_ds_load1_begin_op ( - u16 opcode, - acpi_parse_object *op, acpi_walk_state *walk_state, acpi_parse_object **out_op) { + acpi_parse_object *op; acpi_namespace_node *node; acpi_status status; acpi_object_type8 data_type; NATIVE_CHAR *path; - const acpi_opcode_info *op_info; PROC_NAME ("Ds_load1_begin_op"); + + op = walk_state->op; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, walk_state)); /* We are only interested in opcodes that have an associated name */ - op_info = acpi_ps_get_opcode_info (opcode); - if (!(op_info->flags & AML_NAMED)) { - *out_op = op; - return (AE_OK); - } + if (walk_state->op) { + if (!(walk_state->op_info->flags & AML_NAMED)) { + *out_op = op; + return (AE_OK); + } - /* Check if this object has already been installed in the namespace */ + /* Check if this object has already been installed in the namespace */ - if (op && op->node) { - *out_op = op; - return (AE_OK); + if (op->node) { + *out_op = op; + return (AE_OK); + } } - path = acpi_ps_get_next_namestring (walk_state->parser_state); + path = acpi_ps_get_next_namestring (&walk_state->parser_state); /* Map the raw opcode into an internal object type */ - data_type = acpi_ds_map_named_opcode_to_data_type (opcode); + data_type = acpi_ds_map_named_opcode_to_data_type (walk_state->opcode); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "State=%p Op=%p Type=%x\n", walk_state, op, data_type)); - if (opcode == AML_SCOPE_OP) { + if (walk_state->opcode == AML_SCOPE_OP) { ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "State=%p Op=%p Type=%x\n", walk_state, op, data_type)); } @@ -115,7 +163,7 @@ if (!op) { /* Create a new op */ - op = acpi_ps_alloc_op (opcode); + op = acpi_ps_alloc_op (walk_state->opcode); if (!op) { return (AE_NO_MEMORY); } @@ -130,7 +178,7 @@ * can get it again quickly when this scope is closed */ op->node = node; - acpi_ps_append_arg (acpi_ps_get_parent_scope (walk_state->parser_state), op); + acpi_ps_append_arg (acpi_ps_get_parent_scope (&walk_state->parser_state), op); *out_op = op; return (status); @@ -154,21 +202,21 @@ acpi_status acpi_ds_load1_end_op ( - acpi_walk_state *walk_state, - acpi_parse_object *op) + acpi_walk_state *walk_state) { + acpi_parse_object *op; acpi_object_type8 data_type; - const acpi_opcode_info *op_info; PROC_NAME ("Ds_load1_end_op"); + + op = walk_state->op; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, walk_state)); /* We are only interested in opcodes that have an associated name */ - op_info = acpi_ps_get_opcode_info (op->opcode); - if (!(op_info->flags & AML_NAMED)) { + if (!(walk_state->op_info->flags & AML_NAMED)) { return (AE_OK); } @@ -216,42 +264,41 @@ acpi_status acpi_ds_load2_begin_op ( - u16 opcode, - acpi_parse_object *op, acpi_walk_state *walk_state, acpi_parse_object **out_op) { + acpi_parse_object *op; acpi_namespace_node *node; acpi_status status; acpi_object_type8 data_type; NATIVE_CHAR *buffer_ptr; void *original = NULL; - const acpi_opcode_info *op_info; PROC_NAME ("Ds_load2_begin_op"); + + op = walk_state->op; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, walk_state)); - /* We only care about Namespace opcodes here */ + if (op) { + /* We only care about Namespace opcodes here */ - op_info = acpi_ps_get_opcode_info (opcode); - if (!(op_info->flags & AML_NSOPCODE) && - opcode != AML_INT_NAMEPATH_OP) { - return (AE_OK); - } + if (!(walk_state->op_info->flags & AML_NSOPCODE) && + walk_state->opcode != AML_INT_NAMEPATH_OP) { + return (AE_OK); + } - /* TBD: [Restructure] Temp! same code as in psparse */ + /* TBD: [Restructure] Temp! same code as in psparse */ - if (!(op_info->flags & AML_NAMED)) { - return (AE_OK); - } + if (!(walk_state->op_info->flags & AML_NAMED)) { + return (AE_OK); + } - if (op) { /* * Get the name we are going to enter or lookup in the namespace */ - if (opcode == AML_INT_NAMEPATH_OP) { + if (walk_state->opcode == AML_INT_NAMEPATH_OP) { /* For Namepath op, get the path string */ buffer_ptr = op->value.string; @@ -261,35 +308,33 @@ return (AE_OK); } } - else { /* Get name from the op */ buffer_ptr = (NATIVE_CHAR *) &((acpi_parse2_object *)op)->name; } } - else { - buffer_ptr = acpi_ps_get_next_namestring (walk_state->parser_state); + buffer_ptr = acpi_ps_get_next_namestring (&walk_state->parser_state); } /* Map the raw opcode into an internal object type */ - data_type = acpi_ds_map_named_opcode_to_data_type (opcode); + data_type = acpi_ds_map_named_opcode_to_data_type (walk_state->opcode); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "State=%p Op=%p Type=%x\n", walk_state, op, data_type)); - if (opcode == AML_FIELD_OP || - opcode == AML_BANK_FIELD_OP || - opcode == AML_INDEX_FIELD_OP) { + if (walk_state->opcode == AML_FIELD_OP || + walk_state->opcode == AML_BANK_FIELD_OP || + walk_state->opcode == AML_INDEX_FIELD_OP) { node = NULL; status = AE_OK; } - else if (opcode == AML_INT_NAMEPATH_OP) { + else if (walk_state->opcode == AML_INT_NAMEPATH_OP) { /* * The Name_path is an object reference to an existing object. Don't enter the * name into the namespace, but look it up for use later @@ -326,7 +371,7 @@ if (!op) { /* Create a new op */ - op = acpi_ps_alloc_op (opcode); + op = acpi_ps_alloc_op (walk_state->opcode); if (!op) { return (AE_NO_MEMORY); } @@ -374,25 +419,26 @@ acpi_status acpi_ds_load2_end_op ( - acpi_walk_state *walk_state, - acpi_parse_object *op) + acpi_walk_state *walk_state) { + acpi_parse_object *op; acpi_status status = AE_OK; acpi_object_type8 data_type; acpi_namespace_node *node; acpi_parse_object *arg; acpi_namespace_node *new_node; - const acpi_opcode_info *op_info; + u32 i; PROC_NAME ("Ds_load2_end_op"); + + op = walk_state->op; ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, walk_state)); /* Only interested in opcodes that have namespace objects */ - op_info = acpi_ps_get_opcode_info (op->opcode); - if (!(op_info->flags & AML_NSOBJECT)) { + if (!(walk_state->op_info->flags & AML_NSOBJECT)) { return (AE_OK); } @@ -435,323 +481,210 @@ /* * Named operations are as follows: * - * AML_SCOPE - * AML_DEVICE - * AML_THERMALZONE - * AML_METHOD - * AML_POWERRES - * AML_PROCESSOR - * AML_FIELD - * AML_INDEXFIELD - * AML_BANKFIELD - * AML_NAMEDFIELD - * AML_NAME * AML_ALIAS - * AML_MUTEX - * AML_EVENT - * AML_OPREGION - * AML_CREATEFIELD + * AML_BANKFIELD * AML_CREATEBITFIELD * AML_CREATEBYTEFIELD - * AML_CREATEWORDFIELD * AML_CREATEDWORDFIELD + * AML_CREATEFIELD * AML_CREATEQWORDFIELD + * AML_CREATEWORDFIELD + * AML_DATA_REGION + * AML_DEVICE + * AML_EVENT + * AML_FIELD + * AML_INDEXFIELD + * AML_METHOD * AML_METHODCALL + * AML_MUTEX + * AML_NAME + * AML_NAMEDFIELD + * AML_OPREGION + * AML_POWERRES + * AML_PROCESSOR + * AML_SCOPE + * AML_THERMALZONE */ + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, + "Create-Load [%s] State=%p Op=%p Named_obj=%p\n", + acpi_ps_get_opcode_name (op->opcode), walk_state, op, node)); /* Decode the opcode */ arg = op->value.arg; - switch (op->opcode) { - - case AML_CREATE_FIELD_OP: - case AML_CREATE_BIT_FIELD_OP: - case AML_CREATE_BYTE_FIELD_OP: - case AML_CREATE_WORD_FIELD_OP: - case AML_CREATE_DWORD_FIELD_OP: - case AML_CREATE_QWORD_FIELD_OP: + switch (walk_state->op_info->type) { + case AML_TYPE_CREATE_FIELD: /* * Create the field object, but the field buffer and index must * be evaluated later during the execution phase */ - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Create_xxx_field: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); - - /* Get the Name_string argument */ - - if (op->opcode == AML_CREATE_FIELD_OP) { - arg = acpi_ps_get_arg (op, 3); - } - else { - /* Create Bit/Byte/Word/Dword field */ - - arg = acpi_ps_get_arg (op, 2); - } - - if (!arg) { - status = AE_AML_NO_OPERAND; - goto cleanup; - } - - /* - * Enter the Name_string into the namespace - */ - status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, - INTERNAL_TYPE_DEF_ANY, IMODE_LOAD_PASS1, - NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - walk_state, &(new_node)); - if (ACPI_FAILURE (status)) { - goto cleanup; - } - - /* We could put the returned object (Node) on the object stack for later, but - * for now, we will put it in the "op" object that the parser uses, so we - * can get it again at the end of this scope - */ - op->node = new_node; - - /* - * If there is no object attached to the node, this node was just created and - * we need to create the field object. Otherwise, this was a lookup of an - * existing node and we don't want to create the field object again. - */ - if (!new_node->object) { - /* - * The Field definition is not fully parsed at this time. - * (We must save the address of the AML for the buffer and index operands) - */ - status = acpi_ex_create_buffer_field (((acpi_parse2_object *) op)->data, - ((acpi_parse2_object *) op)->length, - new_node, walk_state); - } + status = acpi_ds_create_buffer_field (op, walk_state); break; - case AML_INT_METHODCALL_OP: - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "RESOLVING-Method_call: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); - - /* - * Lookup the method name and save the Node - */ - status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, - ACPI_TYPE_ANY, IMODE_LOAD_PASS2, - NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE, - walk_state, &(new_node)); - if (ACPI_SUCCESS (status)) { - /* TBD: has name already been resolved by here ??*/ - - /* TBD: [Restructure] Make sure that what we found is indeed a method! */ - /* We didn't search for a method on purpose, to see if the name would resolve! */ + case AML_TYPE_NAMED_FIELD: - /* We could put the returned object (Node) on the object stack for later, but - * for now, we will put it in the "op" object that the parser uses, so we - * can get it again at the end of this scope - */ - op->node = new_node; - } + arg = op->value.arg; + switch (op->opcode) { + case AML_INDEX_FIELD_OP: + status = acpi_ds_create_index_field (op, (acpi_handle) arg->node, + walk_state); + break; - break; + case AML_BANK_FIELD_OP: - case AML_PROCESSOR_OP: + status = acpi_ds_create_bank_field (op, arg->node, walk_state); + break; - /* Nothing to do other than enter object into namespace */ - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Processor: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); + case AML_FIELD_OP: - status = acpi_ex_create_processor (op, node); - if (ACPI_FAILURE (status)) { - goto cleanup; + status = acpi_ds_create_field (op, arg->node, walk_state); + break; } - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Completed Processor Init, Op=%p State=%p entry=%p\n", - op, walk_state, node)); break; - case AML_POWER_RES_OP: + case AML_TYPE_NAMED_SIMPLE: - /* Nothing to do other than enter object into namespace */ - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Power_resource: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); - - status = acpi_ex_create_power_resource (op, node); + status = acpi_ds_create_operands (walk_state, arg); if (ACPI_FAILURE (status)) { goto cleanup; } - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Completed Power_resource Init, Op=%p State=%p entry=%p\n", - op, walk_state, node)); - break; - - - case AML_THERMAL_ZONE_OP: - - /* Nothing to do other than enter object into namespace */ - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Thermal_zone: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); - break; + switch (op->opcode) { + case AML_PROCESSOR_OP: + status = acpi_ex_create_processor (walk_state); + break; - case AML_FIELD_OP: - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Field: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); + case AML_POWER_RES_OP: - arg = op->value.arg; + status = acpi_ex_create_power_resource (walk_state); + break; - status = acpi_ds_create_field (op, arg->node, walk_state); - break; + case AML_MUTEX_OP: - case AML_INDEX_FIELD_OP: + status = acpi_ex_create_mutex (walk_state); + break; - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Index_field: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); - arg = op->value.arg; - - status = acpi_ds_create_index_field (op, (acpi_handle) arg->node, - walk_state); - break; + case AML_EVENT_OP: + status = acpi_ex_create_event (walk_state); + break; - case AML_BANK_FIELD_OP: - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Bank_field: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); + case AML_DATA_REGION_OP: - arg = op->value.arg; - status = acpi_ds_create_bank_field (op, arg->node, walk_state); - break; + status = acpi_ex_create_table_region (walk_state); + break; + case AML_ALIAS_OP: - /* - * Method_op Pkg_length Names_string Method_flags Term_list - */ - case AML_METHOD_OP: + status = acpi_ex_create_alias (walk_state); + break; - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Method: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); + default: + /* Unknown opcode */ - if (!node->object) { - status = acpi_ex_create_method (((acpi_parse2_object *) op)->data, - ((acpi_parse2_object *) op)->length, - arg->value.integer32, node); + status = AE_OK; + goto cleanup; + break; } - break; + /* Delete operands */ - case AML_MUTEX_OP: - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Mutex: Op=%p State=%p\n", op, walk_state)); - - status = acpi_ds_create_operands (walk_state, arg); - if (ACPI_FAILURE (status)) { - goto cleanup; + for (i = 1; i < walk_state->num_operands; i++) { + acpi_ut_remove_reference (walk_state->operands[i]); + walk_state->operands[i] = NULL; } - status = acpi_ex_create_mutex (walk_state); break; - case AML_EVENT_OP: - - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Event: Op=%p State=%p\n", op, walk_state)); + case AML_TYPE_NAMED_COMPLEX: - status = acpi_ds_create_operands (walk_state, arg); - if (ACPI_FAILURE (status)) { - goto cleanup; - } + switch (op->opcode) { + case AML_METHOD_OP: + /* + * Method_op Pkg_length Names_string Method_flags Term_list + */ + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, + "LOADING-Method: State=%p Op=%p Named_obj=%p\n", + walk_state, op, node)); - status = acpi_ex_create_event (walk_state); - break; + if (!node->object) { + status = acpi_ds_create_operands (walk_state, arg); + if (ACPI_FAILURE (status)) { + goto cleanup; + } + status = acpi_ex_create_method (((acpi_parse2_object *) op)->data, + ((acpi_parse2_object *) op)->length, + walk_state); + } + break; - case AML_REGION_OP: - if (node->object) { + case AML_REGION_OP: + /* + * The Op_region is not fully parsed at this time. Only valid argument is the Space_id. + * (We must save the address of the AML of the address and length operands) + */ + status = acpi_ex_create_region (((acpi_parse2_object *) op)->data, + ((acpi_parse2_object *) op)->length, + (ACPI_ADR_SPACE_TYPE) arg->value.integer, walk_state); break; - } - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Opregion: Op=%p State=%p Named_obj=%p\n", - op, walk_state, node)); - /* - * The Op_region is not fully parsed at this time. Only valid argument is the Space_id. - * (We must save the address of the AML of the address and length operands) - */ - status = acpi_ex_create_region (((acpi_parse2_object *) op)->data, - ((acpi_parse2_object *) op)->length, - (ACPI_ADR_SPACE_TYPE) arg->value.integer, walk_state); + case AML_NAME_OP: - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "Completed Op_region Init, Op=%p State=%p entry=%p\n", - op, walk_state, node)); + status = acpi_ds_create_node (walk_state, node, op); + break; + } break; - /* Namespace Modifier Opcodes */ - - case AML_ALIAS_OP: + case AML_CLASS_INTERNAL: - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Alias: Op=%p State=%p\n", op, walk_state)); - - status = acpi_ds_create_operands (walk_state, arg); - if (ACPI_FAILURE (status)) { - goto cleanup; - } - - status = acpi_ex_create_alias (walk_state); + /* case AML_INT_NAMEPATH_OP: */ break; - case AML_NAME_OP: + case AML_CLASS_METHOD_CALL: ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Name: Op=%p State=%p\n", op, walk_state)); + "RESOLVING-Method_call: State=%p Op=%p Named_obj=%p\n", + walk_state, op, node)); /* - * Because of the execution pass through the non-control-method - * parts of the table, we can arrive here twice. Only init - * the named object node the first time through + * Lookup the method name and save the Node */ - if (!node->object) { - status = acpi_ds_create_node (walk_state, node, op); - } - - break; + status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, + ACPI_TYPE_ANY, IMODE_LOAD_PASS2, + NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE, + walk_state, &(new_node)); + if (ACPI_SUCCESS (status)) { + /* TBD: has name already been resolved by here ??*/ + /* TBD: [Restructure] Make sure that what we found is indeed a method! */ + /* We didn't search for a method on purpose, to see if the name would resolve! */ - case AML_INT_NAMEPATH_OP: + /* We could put the returned object (Node) on the object stack for later, but + * for now, we will put it in the "op" object that the parser uses, so we + * can get it again at the end of this scope + */ + op->node = new_node; + } - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, - "LOADING-Name_path object: State=%p Op=%p Named_obj=%p\n", - walk_state, op, node)); break; @@ -764,7 +697,8 @@ /* Remove the Node pushed at the very beginning */ - acpi_ds_obj_stack_pop (1, walk_state); + walk_state->operands[0] = NULL; + walk_state->num_operands = 0; return (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/dispatcher/dswscope.c linux/drivers/acpi/dispatcher/dswscope.c --- v2.4.13/linux/drivers/acpi/dispatcher/dswscope.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/dispatcher/dswscope.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dswscope - Scope stack manipulation - * $Revision: 48 $ + * $Revision: 49 $ * *****************************************************************************/ @@ -116,8 +116,9 @@ /* Init new scope object */ - scope_info->scope.node = node; - scope_info->common.value = (u16) type; + scope_info->common.data_type = ACPI_DESC_TYPE_STATE_WSCOPE; + scope_info->scope.node = node; + scope_info->common.value = (u16) type; /* Push new scope object onto stack */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/dispatcher/dswstate.c linux/drivers/acpi/dispatcher/dswstate.c --- v2.4.13/linux/drivers/acpi/dispatcher/dswstate.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/dispatcher/dswstate.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: dswstate - Dispatcher parse tree walk management routines - * $Revision: 51 $ + * $Revision: 54 $ * *****************************************************************************/ @@ -368,6 +368,7 @@ return (AE_NO_MEMORY); } + state->common.data_type = ACPI_DESC_TYPE_STATE_RESULT; acpi_ut_push_generic_state (&walk_state->results, state); ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Results=%p State=%p\n", @@ -744,7 +745,7 @@ * ******************************************************************************/ -static void +void acpi_ds_push_walk_state ( acpi_walk_state *walk_state, acpi_walk_list *walk_list) @@ -855,12 +856,103 @@ /* Put the new state at the head of the walk list */ - acpi_ds_push_walk_state (walk_state, walk_list); + if (walk_list) { + acpi_ds_push_walk_state (walk_state, walk_list); + } return_PTR (walk_state); } +#ifndef _ACPI_ASL_COMPILER +/******************************************************************************* + * + * FUNCTION: Acpi_ds_init_aml_walk + * + * PARAMETERS: Walk_state - New state to be initialized + * + * RETURN: None + * + * DESCRIPTION: Initialize a walk state for a pass 1 or 2 parse tree walk + * + ******************************************************************************/ + +acpi_status +acpi_ds_init_aml_walk ( + acpi_walk_state *walk_state, + acpi_parse_object *op, + acpi_namespace_node *method_node, + u8 *aml_start, + u32 aml_length, + acpi_operand_object **params, + acpi_operand_object **return_obj_desc, + u32 pass_number) +{ + acpi_status status; + acpi_parse_state *parser_state = &walk_state->parser_state; + + + FUNCTION_TRACE ("Ds_init_aml_walk"); + + + walk_state->parser_state.aml = + walk_state->parser_state.aml_start = aml_start; + walk_state->parser_state.aml_end = + walk_state->parser_state.pkg_end = aml_start + aml_length; + + /* The Next_op of the Next_walk will be the beginning of the method */ + /* TBD: [Restructure] -- obsolete? */ + + walk_state->next_op = NULL; + walk_state->params = params; + walk_state->caller_return_desc = return_obj_desc; + + status = acpi_ps_init_scope (&walk_state->parser_state, op); + if (ACPI_FAILURE (status)) { + return_ACPI_STATUS (status); + } + + if (method_node) { + walk_state->parser_state.start_node = method_node; + walk_state->walk_type = WALK_METHOD; + walk_state->method_node = method_node; + walk_state->method_desc = acpi_ns_get_attached_object (method_node); + + + /* Push start scope on scope stack and make it current */ + + status = acpi_ds_scope_stack_push (method_node, ACPI_TYPE_METHOD, walk_state); + if (ACPI_FAILURE (status)) { + return_ACPI_STATUS (status); + } + + /* Init the method arguments */ + + acpi_ds_method_data_init_args (params, MTH_NUM_ARGS, walk_state); + } + + else { + /* Setup the current scope */ + + parser_state->start_node = parser_state->start_op->node; + if (parser_state->start_node) { + /* Push start scope on scope stack and make it current */ + + status = acpi_ds_scope_stack_push (parser_state->start_node, + parser_state->start_node->type, walk_state); + if (ACPI_FAILURE (status)) { + return_ACPI_STATUS (status); + } + } + } + + acpi_ds_init_callbacks (walk_state, pass_number); + + return_ACPI_STATUS (AE_OK); +} +#endif + + /******************************************************************************* * * FUNCTION: Acpi_ds_delete_walk_state @@ -893,7 +985,11 @@ } - /* Always must free any linked control states */ + if (walk_state->parser_state.scope) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p walk still has a scope list\n", walk_state)); + } + + /* Always must free any linked control states */ while (walk_state->control_state) { state = walk_state->control_state; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/driver.c linux/drivers/acpi/driver.c --- v2.4.13/linux/drivers/acpi/driver.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/driver.c Wed Oct 24 14:06:22 2001 @@ -40,7 +40,6 @@ #include #include #include "acpi.h" -#include "driver.h" #define _COMPONENT OS_DEPENDENT @@ -50,6 +49,70 @@ static int acpi_disabled = 0; +enum acpi_blacklist_predicates +{ + all_versions, + less_than_or_equal, + equal, + greater_than_or_equal, +}; + +struct acpi_blacklist_item +{ + char oem_id[7]; + char oem_table_id[9]; + u32 oem_revision; + enum acpi_blacklist_predicates oem_revision_predicate; +}; + +/* + * Currently, this blacklists based on items in the FADT. We may want to + * expand this to using other ACPI tables in the future, too. + */ +static struct acpi_blacklist_item acpi_blacklist[] __initdata = +{ + {"TOSHIB", "750 ", 0x970814, less_than_or_equal}, /* Portege 7020, BIOS 8.10 */ + {""} +}; + +int +acpi_blacklisted(FADT_DESCRIPTOR *fadt) +{ + int i = 0; + + while (acpi_blacklist[i].oem_id[0] != '\0') + { + if (strncmp(acpi_blacklist[i].oem_id, fadt->header.oem_id, 6)) { + i++; + continue; + } + + if (strncmp(acpi_blacklist[i].oem_table_id, fadt->header.oem_table_id, 8)) { + i++; + continue; + } + + if (acpi_blacklist[i].oem_revision_predicate == all_versions) + return TRUE; + + if (acpi_blacklist[i].oem_revision_predicate == less_than_or_equal + && fadt->header.oem_revision <= acpi_blacklist[i].oem_revision) + return TRUE; + + if (acpi_blacklist[i].oem_revision_predicate == greater_than_or_equal + && fadt->header.oem_revision >= acpi_blacklist[i].oem_revision) + return TRUE; + + if (acpi_blacklist[i].oem_revision_predicate == equal + && fadt->header.oem_revision == acpi_blacklist[i].oem_revision) + return TRUE; + + i++; + } + + return FALSE; +} + /* * Start the interpreter */ @@ -64,7 +127,6 @@ return -ENODEV; } - if (acpi_disabled) { printk(KERN_NOTICE "ACPI: disabled by cmdline, exiting\n"); return -ENODEV; @@ -89,6 +151,12 @@ if (!ACPI_SUCCESS(acpi_get_table(ACPI_TABLE_FADT, 1, &buffer))) { printk(KERN_ERR "ACPI: Could not get FADT\n"); + acpi_terminate(); + return -ENODEV; + } + + if (acpi_blacklisted(&acpi_fadt)) { + printk(KERN_ERR "ACPI: On blacklist -- BIOS not fully ACPI compliant\n"); acpi_terminate(); return -ENODEV; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/driver.h linux/drivers/acpi/driver.h --- v2.4.13/linux/drivers/acpi/driver.h Tue Jul 3 17:08:19 2001 +++ linux/drivers/acpi/driver.h Wed Dec 31 16:00:00 1969 @@ -1,72 +0,0 @@ -/* - * driver.h - ACPI driver - * - * Copyright (C) 2000 Andrew Henroid - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __DRIVER_H -#define __DRIVER_H - -#include -#include -#include -#include -#include - -#define ACPI_MAX_THROTTLE 10 -#define ACPI_INVALID ~0UL -#define ACPI_INFINITE ~0UL - -/* - * cpu.c - */ -int acpi_cpu_init(void); -u32 acpi_read_pm_timer(void); - -extern u32 acpi_c2_exit_latency; -extern u32 acpi_c3_exit_latency; -extern u32 acpi_c2_enter_latency; -extern u32 acpi_c3_enter_latency; -extern u32 acpi_use_idle; -extern u32 acpi_c1_count; -extern u32 acpi_c2_count; -extern u32 acpi_c3_count; - -/* - * driver.c - */ -int acpi_run(void (*callback)(void*), void *context); - -/* - * ec.c - */ -int acpi_ec_init(void); - -/* - * power.c - */ -int acpi_power_init(void); - -/* - * sys.c - */ -int acpi_sys_init(void); -int acpi_enter_sx(acpi_sstate_t state); - -extern volatile acpi_sstate_t acpi_sleep_state; - -#endif /* __DRIVER_H */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/events/evevent.c linux/drivers/acpi/events/evevent.c --- v2.4.13/linux/drivers/acpi/events/evevent.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/events/evevent.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: evevent - Fixed and General Purpose Acpi_event * handling and dispatch - * $Revision: 50 $ + * $Revision: 51 $ * *****************************************************************************/ @@ -354,7 +354,7 @@ * Allocate the Gpe information block */ acpi_gbl_gpe_registers = ACPI_MEM_CALLOCATE (acpi_gbl_gpe_register_count * - sizeof (ACPI_GPE_REGISTERS)); + sizeof (acpi_gpe_registers)); if (!acpi_gbl_gpe_registers) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not allocate the Gpe_registers block\n")); @@ -442,9 +442,9 @@ register_index++; } - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "GPE registers: %X@%p (Blk0) %X@%p (Blk1)\n", - gpe0register_count, acpi_gbl_FADT->Xgpe0blk.address, gpe1_register_count, - acpi_gbl_FADT->Xgpe1_blk.address)); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "GPE registers: %X@%8.8X%8.8X (Blk0) %X@%8.8X%8.8X (Blk1)\n", + gpe0register_count, HIDWORD(acpi_gbl_FADT->Xgpe0blk.address), LODWORD(acpi_gbl_FADT->Xgpe0blk.address), + gpe1_register_count, HIDWORD(acpi_gbl_FADT->Xgpe1_blk.address), LODWORD(acpi_gbl_FADT->Xgpe1_blk.address))); return_ACPI_STATUS (AE_OK); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/events/evmisc.c linux/drivers/acpi/events/evmisc.c --- v2.4.13/linux/drivers/acpi/events/evmisc.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/events/evmisc.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: evmisc - ACPI device notification handler dispatch * and ACPI Global Lock support - * $Revision: 33 $ + * $Revision: 35 $ * *****************************************************************************/ @@ -88,7 +88,7 @@ break; default: - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Unknown Notify Value: %lx \n", notify_value)); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Unknown Notify Value: %X \n", notify_value)); break; } @@ -134,6 +134,7 @@ return (AE_NO_MEMORY); } + notify_info->common.data_type = ACPI_DESC_TYPE_STATE_NOTIFY; notify_info->notify.node = node; notify_info->notify.value = (u16) notify_value; notify_info->notify.handler_obj = handler_obj; @@ -173,7 +174,7 @@ void *context) { acpi_generic_state *notify_info = (acpi_generic_state *) context; - ACPI_NOTIFY_HANDLER global_handler = NULL; + acpi_notify_handler global_handler = NULL; void *global_context = NULL; acpi_operand_object *handler_obj; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/events/evregion.c linux/drivers/acpi/events/evregion.c --- v2.4.13/linux/drivers/acpi/events/evregion.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/events/evregion.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: evregion - ACPI Address_space (Op_region) handler dispatch - * $Revision: 110 $ + * $Revision: 113 $ * *****************************************************************************/ @@ -147,17 +147,16 @@ params[1] = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); if (!params[1]) { - acpi_ut_remove_reference (params[0]); - return_ACPI_STATUS (AE_NO_MEMORY); + status = AE_NO_MEMORY; + goto cleanup; } - params[2] = NULL; - /* * Set up the parameter objects */ params[0]->integer.value = region_obj->region.space_id; params[1]->integer.value = function; + params[2] = NULL; /* * Execute the method, no return value @@ -165,9 +164,10 @@ DEBUG_EXEC(acpi_ut_display_init_pathname (region_obj->region.extra->extra.method_REG, " [Method]")); status = acpi_ns_evaluate_by_handle (region_obj->region.extra->extra.method_REG, params, NULL); + acpi_ut_remove_reference (params[1]); +cleanup: acpi_ut_remove_reference (params[0]); - acpi_ut_remove_reference (params[1]); return_ACPI_STATUS (status); } @@ -200,8 +200,8 @@ u32 *value) { acpi_status status; - ACPI_ADR_SPACE_HANDLER handler; - ACPI_ADR_SPACE_SETUP region_setup; + acpi_adr_space_handler handler; + acpi_adr_space_setup region_setup; acpi_operand_object *handler_desc; void *region_context = NULL; @@ -276,7 +276,7 @@ handler = handler_desc->addr_handler.handler; ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Addrhandler %p (%p), Address %8.8lX%8.8lX\n", + "Addrhandler %p (%p), Address %8.8X%8.8X\n", ®ion_obj->region.addr_handler->addr_handler, handler, HIDWORD(address), LODWORD(address))); @@ -335,7 +335,7 @@ acpi_operand_object *handler_obj; acpi_operand_object *obj_desc; acpi_operand_object **last_obj_ptr; - ACPI_ADR_SPACE_SETUP region_setup; + acpi_adr_space_setup region_setup; void *region_context; acpi_status status; @@ -548,7 +548,7 @@ /* Convert and validate the device handle */ - node = acpi_ns_convert_handle_to_entry (obj_handle); + node = acpi_ns_map_handle_to_node (obj_handle); if (!node) { return (AE_BAD_PARAMETER); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/events/evrgnini.c linux/drivers/acpi/events/evrgnini.c --- v2.4.13/linux/drivers/acpi/events/evrgnini.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/events/evrgnini.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: evrgnini- ACPI Address_space (Op_region) init - * $Revision: 46 $ + * $Revision: 48 $ * *****************************************************************************/ @@ -145,7 +145,7 @@ acpi_operand_object *handler_obj; acpi_namespace_node *node; acpi_operand_object *region_obj = (acpi_operand_object *) handle; - ACPI_DEVICE_ID object_hID; + acpi_device_id object_hID; FUNCTION_TRACE ("Ev_pci_config_region_setup"); @@ -158,7 +158,7 @@ * routine checks before we get here, but we check again just in case. */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, - "Attempting to init a region %X, with no handler\n", region_obj)); + "Attempting to init a region %p, with no handler\n", region_obj)); return_ACPI_STATUS (AE_NOT_EXIST); } @@ -257,6 +257,70 @@ } *region_context = pci_id; + return_ACPI_STATUS (AE_OK); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ev_pci_bar_region_setup + * + * PARAMETERS: Region_obj - region we are interested in + * Function - start or stop + * Handler_context - Address space handler context + * Region_context - Region specific context + * + * RETURN: Status + * + * DESCRIPTION: Do any prep work for region handling + * + * MUTEX: Assumes namespace is not locked + * + ******************************************************************************/ + +acpi_status +acpi_ev_pci_bar_region_setup ( + acpi_handle handle, + u32 function, + void *handler_context, + void **region_context) +{ + + FUNCTION_TRACE ("Ev_pci_bar_region_setup"); + + + return_ACPI_STATUS (AE_OK); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ev_cmos_region_setup + * + * PARAMETERS: Region_obj - region we are interested in + * Function - start or stop + * Handler_context - Address space handler context + * Region_context - Region specific context + * + * RETURN: Status + * + * DESCRIPTION: Do any prep work for region handling + * + * MUTEX: Assumes namespace is not locked + * + ******************************************************************************/ + +acpi_status +acpi_ev_cmos_region_setup ( + acpi_handle handle, + u32 function, + void *handler_context, + void **region_context) +{ + + FUNCTION_TRACE ("Ev_cmos_region_setup"); + + return_ACPI_STATUS (AE_OK); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/events/evxface.c linux/drivers/acpi/events/evxface.c --- v2.4.13/linux/drivers/acpi/events/evxface.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/events/evxface.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: evxface - External interfaces for ACPI events - * $Revision: 112 $ + * $Revision: 116 $ * *****************************************************************************/ @@ -54,7 +54,7 @@ acpi_status acpi_install_fixed_event_handler ( u32 event, - ACPI_EVENT_HANDLER handler, + acpi_event_handler handler, void *context) { acpi_status status; @@ -63,13 +63,6 @@ FUNCTION_TRACE ("Acpi_install_fixed_event_handler"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if (event > ACPI_EVENT_MAX) { @@ -86,12 +79,12 @@ } - /* Install the handler before enabling the event - just in case... */ + /* Install the handler before enabling the event */ acpi_gbl_fixed_event_handlers[event].handler = handler; acpi_gbl_fixed_event_handlers[event].context = context; - status = acpi_enable_event (event, ACPI_EVENT_FIXED); + status = acpi_enable_event (event, ACPI_EVENT_FIXED, 0); if (!ACPI_SUCCESS (status)) { ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Could not enable fixed event.\n")); @@ -129,7 +122,7 @@ acpi_status acpi_remove_fixed_event_handler ( u32 event, - ACPI_EVENT_HANDLER handler) + acpi_event_handler handler) { acpi_status status = AE_OK; @@ -137,13 +130,6 @@ FUNCTION_TRACE ("Acpi_remove_fixed_event_handler"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if (event > ACPI_EVENT_MAX) { @@ -152,21 +138,19 @@ acpi_ut_acquire_mutex (ACPI_MTX_EVENTS); - /* Disable the event before removing the handler - just in case... */ + /* Disable the event before removing the handler */ - status = acpi_disable_event(event, ACPI_EVENT_FIXED); + status = acpi_disable_event(event, ACPI_EVENT_FIXED, 0); /* Always Remove the handler */ acpi_gbl_fixed_event_handlers[event].handler = NULL; acpi_gbl_fixed_event_handlers[event].context = NULL; - - if (!ACPI_SUCCESS(status)) { + if (!ACPI_SUCCESS (status)) { ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Could not write to fixed event enable register.\n")); } - else { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Disabled fixed event %X.\n", event)); } @@ -197,7 +181,7 @@ acpi_install_notify_handler ( acpi_handle device, u32 handler_type, - ACPI_NOTIFY_HANDLER handler, + acpi_notify_handler handler, void *context) { acpi_operand_object *obj_desc; @@ -209,13 +193,6 @@ FUNCTION_TRACE ("Acpi_install_notify_handler"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if ((!handler) || @@ -227,7 +204,7 @@ /* Convert and validate the device handle */ - device_node = acpi_ns_convert_handle_to_entry (device); + device_node = acpi_ns_map_handle_to_node (device); if (!device_node) { status = AE_BAD_PARAMETER; goto unlock_and_exit; @@ -235,7 +212,6 @@ /* * Root Object: - * ------------ * Registering a notify handler on the root object indicates that the * caller wishes to receive notifications for all objects. Note that * only one global handler can be regsitered (per notify type). @@ -266,8 +242,7 @@ } /* - * Other Objects: - * -------------- + * All Other Objects: * Caller will only receive notifications specific to the target object. * Note that only certain object types can receive notifications. */ @@ -338,6 +313,7 @@ } } + unlock_and_exit: acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (status); @@ -363,7 +339,7 @@ acpi_remove_notify_handler ( acpi_handle device, u32 handler_type, - ACPI_NOTIFY_HANDLER handler) + acpi_notify_handler handler) { acpi_operand_object *notify_obj; acpi_operand_object *obj_desc; @@ -374,13 +350,6 @@ FUNCTION_TRACE ("Acpi_remove_notify_handler"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if ((!handler) || @@ -392,18 +361,16 @@ /* Convert and validate the device handle */ - device_node = acpi_ns_convert_handle_to_entry (device); + device_node = acpi_ns_map_handle_to_node (device); if (!device_node) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } /* - * Root Object: - * ------------ + * Root Object */ if (device == ACPI_ROOT_OBJECT) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing notify handler for ROOT object.\n")); if (((handler_type == ACPI_SYSTEM_NOTIFY) && @@ -415,20 +382,19 @@ } if (handler_type == ACPI_SYSTEM_NOTIFY) { - acpi_gbl_sys_notify.node = NULL; + acpi_gbl_sys_notify.node = NULL; acpi_gbl_sys_notify.handler = NULL; acpi_gbl_sys_notify.context = NULL; } else { - acpi_gbl_drv_notify.node = NULL; + acpi_gbl_drv_notify.node = NULL; acpi_gbl_drv_notify.handler = NULL; acpi_gbl_drv_notify.context = NULL; } } /* - * Other Objects: - * -------------- + * All Other Objects */ else { /* @@ -505,7 +471,7 @@ acpi_install_gpe_handler ( u32 gpe_number, u32 type, - ACPI_GPE_HANDLER handler, + acpi_gpe_handler handler, void *context) { acpi_status status = AE_OK; @@ -514,13 +480,6 @@ FUNCTION_TRACE ("Acpi_install_gpe_handler"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if (!handler || (gpe_number > ACPI_GPE_MAX)) { @@ -553,6 +512,7 @@ acpi_hw_clear_gpe (gpe_number); acpi_hw_enable_gpe (gpe_number); + cleanup: acpi_ut_release_mutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (status); @@ -575,7 +535,7 @@ acpi_status acpi_remove_gpe_handler ( u32 gpe_number, - ACPI_GPE_HANDLER handler) + acpi_gpe_handler handler) { acpi_status status = AE_OK; @@ -583,13 +543,6 @@ FUNCTION_TRACE ("Acpi_remove_gpe_handler"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if (!handler || (gpe_number > ACPI_GPE_MAX)) { @@ -621,6 +574,7 @@ acpi_gbl_gpe_info[gpe_number].handler = NULL; acpi_gbl_gpe_info[gpe_number].context = NULL; + cleanup: acpi_ut_release_mutex (ACPI_MTX_EVENTS); return_ACPI_STATUS (status); @@ -639,6 +593,7 @@ * DESCRIPTION: Acquire the ACPI Global Lock * ******************************************************************************/ + acpi_status acpi_acquire_global_lock ( void) @@ -646,13 +601,6 @@ acpi_status status; - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return (status); - } - status = acpi_ex_enter_interpreter (); if (ACPI_FAILURE (status)) { return (status); @@ -685,15 +633,6 @@ acpi_release_global_lock ( void) { - acpi_status status; - - - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return (status); - } acpi_ev_release_global_lock (); return (AE_OK); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/events/evxfevnt.c linux/drivers/acpi/events/evxfevnt.c --- v2.4.13/linux/drivers/acpi/events/evxfevnt.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/events/evxfevnt.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: evxfevnt - External Interfaces, ACPI event disable/enable - * $Revision: 36 $ + * $Revision: 38 $ * *****************************************************************************/ @@ -106,13 +106,6 @@ FUNCTION_TRACE ("Acpi_disable"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Restore original mode */ status = acpi_hw_set_mode (acpi_gbl_original_mode); @@ -136,6 +129,7 @@ * * PARAMETERS: Event - The fixed event or GPE to be enabled * Type - The type of event + * Flags - Just enable, or also wake enable? * * RETURN: Status * @@ -146,7 +140,8 @@ acpi_status acpi_enable_event ( u32 event, - u32 type) + u32 type, + u32 flags) { acpi_status status = AE_OK; u32 register_id; @@ -155,13 +150,6 @@ FUNCTION_TRACE ("Acpi_enable_event"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* The Type must be either Fixed Acpi_event or GPE */ switch (type) { @@ -223,7 +211,13 @@ /* Enable the requested GPE number */ - acpi_hw_enable_gpe (event); + if (flags & ACPI_EVENT_ENABLE) { + acpi_hw_enable_gpe (event); + } + if (flags & ACPI_EVENT_WAKE_ENABLE) { + acpi_hw_enable_gpe_for_wakeup (event); + } + break; @@ -242,7 +236,8 @@ * FUNCTION: Acpi_disable_event * * PARAMETERS: Event - The fixed event or GPE to be enabled - * Type - The type of event + * Type - The type of event, fixed or general purpose + * Flags - Wake disable vs. non-wake disable * * RETURN: Status * @@ -253,7 +248,8 @@ acpi_status acpi_disable_event ( u32 event, - u32 type) + u32 type, + u32 flags) { acpi_status status = AE_OK; u32 register_id; @@ -262,13 +258,6 @@ FUNCTION_TRACE ("Acpi_disable_event"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* The Type must be either Fixed Acpi_event or GPE */ switch (type) { @@ -329,7 +318,13 @@ /* Disable the requested GPE number */ - acpi_hw_disable_gpe (event); + if (flags & ACPI_EVENT_DISABLE) { + acpi_hw_disable_gpe (event); + } + if (flags & ACPI_EVENT_WAKE_DISABLE) { + acpi_hw_disable_gpe_for_wakeup (event); + } + break; @@ -366,13 +361,6 @@ FUNCTION_TRACE ("Acpi_clear_event"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* The Type must be either Fixed Acpi_event or GPE */ switch (type) { @@ -466,13 +454,6 @@ FUNCTION_TRACE ("Acpi_get_event_status"); - - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } if (!event_status) { return_ACPI_STATUS (AE_BAD_PARAMETER); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/events/evxfregn.c linux/drivers/acpi/events/evxfregn.c --- v2.4.13/linux/drivers/acpi/events/evxfregn.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/events/evxfregn.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: evxfregn - External Interfaces, ACPI Operation Regions and * Address Spaces. - * $Revision: 36 $ + * $Revision: 40 $ * *****************************************************************************/ @@ -56,8 +56,8 @@ acpi_install_address_space_handler ( acpi_handle device, ACPI_ADR_SPACE_TYPE space_id, - ACPI_ADR_SPACE_HANDLER handler, - ACPI_ADR_SPACE_SETUP setup, + acpi_adr_space_handler handler, + acpi_adr_space_setup setup, void *context) { acpi_operand_object *obj_desc; @@ -71,13 +71,6 @@ FUNCTION_TRACE ("Acpi_install_address_space_handler"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if ((!device) || @@ -90,16 +83,16 @@ /* Convert and validate the device handle */ - node = acpi_ns_convert_handle_to_entry (device); + node = acpi_ns_map_handle_to_node (device); if (!node) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } /* - * This registration is valid for only the types below - * and the root. This is where the default handlers - * get placed. + * This registration is valid for only the types below + * and the root. This is where the default handlers + * get placed. */ if ((node->type != ACPI_TYPE_DEVICE) && (node->type != ACPI_TYPE_PROCESSOR) && @@ -115,17 +108,27 @@ switch (space_id) { case ACPI_ADR_SPACE_SYSTEM_MEMORY: handler = acpi_ex_system_memory_space_handler; - setup = acpi_ev_system_memory_region_setup; + setup = acpi_ev_system_memory_region_setup; break; case ACPI_ADR_SPACE_SYSTEM_IO: handler = acpi_ex_system_io_space_handler; - setup = acpi_ev_io_space_region_setup; + setup = acpi_ev_io_space_region_setup; break; case ACPI_ADR_SPACE_PCI_CONFIG: handler = acpi_ex_pci_config_space_handler; - setup = acpi_ev_pci_config_region_setup; + setup = acpi_ev_pci_config_region_setup; + break; + + case ACPI_ADR_SPACE_CMOS: + handler = acpi_ex_cmos_space_handler; + setup = acpi_ev_cmos_region_setup; + break; + + case ACPI_ADR_SPACE_PCI_BAR_TARGET: + handler = acpi_ex_pci_bar_space_handler; + setup = acpi_ev_pci_bar_region_setup; break; default: @@ -136,20 +139,20 @@ } /* - * If the caller hasn't specified a setup routine, use the default + * If the caller hasn't specified a setup routine, use the default */ if (!setup) { setup = acpi_ev_default_region_setup; } /* - * Check for an existing internal object + * Check for an existing internal object */ obj_desc = acpi_ns_get_attached_object (node); if (obj_desc) { /* - * The object exists. - * Make sure the handler is not already installed. + * The object exists. + * Make sure the handler is not already installed. */ /* check the address handler the user requested */ @@ -157,8 +160,8 @@ handler_obj = obj_desc->device.addr_handler; while (handler_obj) { /* - * We have an Address handler, see if user requested this - * address space. + * We have an Address handler, see if user requested this + * address space. */ if(handler_obj->addr_handler.space_id == space_id) { status = AE_EXIST; @@ -166,7 +169,7 @@ } /* - * Move through the linked list of handlers + * Move through the linked list of handlers */ handler_obj = handler_obj->addr_handler.next; } @@ -181,7 +184,6 @@ if (node->type == ACPI_TYPE_ANY) { type = ACPI_TYPE_DEVICE; } - else { type = node->type; } @@ -210,11 +212,11 @@ acpi_ut_get_region_name (space_id), space_id, node, obj_desc)); /* - * Now we can install the handler + * Now we can install the handler * - * At this point we know that there is no existing handler. - * So, we just allocate the object for the handler and link it - * into the list. + * At this point we know that there is no existing handler. + * So, we just allocate the object for the handler and link it + * into the list. */ handler_obj = acpi_ut_create_internal_object (INTERNAL_TYPE_ADDRESS_HANDLER); if (!handler_obj) { @@ -232,16 +234,16 @@ handler_obj->addr_handler.setup = setup; /* - * Now walk the namespace finding all of the regions this - * handler will manage. + * Now walk the namespace finding all of the regions this + * handler will manage. * - * We start at the device and search the branch toward - * the leaf nodes until either the leaf is encountered or - * a device is detected that has an address handler of the - * same type. + * We start at the device and search the branch toward + * the leaf nodes until either the leaf is encountered or + * a device is detected that has an address handler of the + * same type. * - * In either case we back up and search down the remainder - * of the branch + * In either case we back up and search down the remainder + * of the branch */ status = acpi_ns_walk_namespace (ACPI_TYPE_ANY, device, ACPI_UINT32_MAX, NS_WALK_UNLOCK, @@ -249,7 +251,7 @@ handler_obj, NULL); /* - * Place this handler 1st on the list + * Place this handler 1st on the list */ handler_obj->common.reference_count = (u16) (handler_obj->common.reference_count + @@ -280,7 +282,7 @@ acpi_remove_address_space_handler ( acpi_handle device, ACPI_ADR_SPACE_TYPE space_id, - ACPI_ADR_SPACE_HANDLER handler) + acpi_adr_space_handler handler) { acpi_operand_object *obj_desc; acpi_operand_object *handler_obj; @@ -293,13 +295,6 @@ FUNCTION_TRACE ("Acpi_remove_address_space_handler"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if ((!device) || @@ -312,7 +307,7 @@ /* Convert and validate the device handle */ - node = acpi_ns_convert_handle_to_entry (device); + node = acpi_ns_map_handle_to_node (device); if (!node) { status = AE_BAD_PARAMETER; goto unlock_and_exit; @@ -323,25 +318,22 @@ obj_desc = acpi_ns_get_attached_object (node); if (!obj_desc) { - /* - * The object DNE. - */ status = AE_NOT_EXIST; goto unlock_and_exit; } /* - * find the address handler the user requested + * find the address handler the user requested */ handler_obj = obj_desc->device.addr_handler; last_obj_ptr = &obj_desc->device.addr_handler; while (handler_obj) { /* - * We have a handler, see if user requested this one + * We have a handler, see if user requested this one */ - if(handler_obj->addr_handler.space_id == space_id) { + if (handler_obj->addr_handler.space_id == space_id) { /* - * Got it, first dereference this in the Regions + * Got it, first dereference this in the Regions */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Removing address handler %p(%p) for region %s on Device %p(%p)\n", @@ -354,30 +346,30 @@ while (region_obj) { /* - * First disassociate the handler from the region. + * First disassociate the handler from the region. * - * NOTE: this doesn't mean that the region goes away - * The region is just inaccessible as indicated to - * the _REG method + * NOTE: this doesn't mean that the region goes away + * The region is just inaccessible as indicated to + * the _REG method */ acpi_ev_disassociate_region_from_handler(region_obj, TRUE); /* - * Walk the list, since we took the first region and it - * was removed from the list by the dissassociate call - * we just get the first item on the list again + * Walk the list, since we took the first region and it + * was removed from the list by the dissassociate call + * we just get the first item on the list again */ region_obj = handler_obj->addr_handler.region_list; } /* - * Remove this Handler object from the list + * Remove this Handler object from the list */ *last_obj_ptr = handler_obj->addr_handler.next; /* - * Now we can delete the handler object + * Now we can delete the handler object */ acpi_ut_remove_reference (handler_obj); acpi_ut_remove_reference (handler_obj); @@ -386,7 +378,7 @@ } /* - * Move through the linked list of handlers + * Move through the linked list of handlers */ last_obj_ptr = &handler_obj->addr_handler.next; handler_obj = handler_obj->addr_handler.next; @@ -394,7 +386,7 @@ /* - * The handler does not exist + * The handler does not exist */ ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, "Unable to remove address handler %p for %s(%X), Dev_node %p, obj %p\n", diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exconfig.c linux/drivers/acpi/executer/exconfig.c --- v2.4.13/linux/drivers/acpi/executer/exconfig.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exconfig.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exconfig - Namespace reconfiguration (Load/Unload opcodes) - * $Revision: 41 $ + * $Revision: 44 $ * *****************************************************************************/ @@ -51,10 +51,10 @@ * ****************************************************************************/ -static acpi_status -acpi_ex_load_table_op ( +acpi_status +acpi_ex_load_op ( acpi_operand_object *rgn_desc, - acpi_operand_object **ddb_handle) + acpi_operand_object *ddb_handle) { acpi_status status; acpi_operand_object *table_desc = NULL; @@ -65,7 +65,7 @@ u32 i; - FUNCTION_TRACE ("Ex_load_table"); + FUNCTION_TRACE ("Ex_load_op"); /* TBD: [Unhandled] Object can be either a field or an opregion */ @@ -117,7 +117,7 @@ acpi_gbl_acpi_table_data[ACPI_TABLE_SSDT].sig_length))) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Table has invalid signature [%4.4s], must be SSDT or PSDT\n", - table_header.signature)); + (char*)table_header.signature)); status = AE_BAD_SIGNATURE; goto cleanup; } @@ -165,7 +165,8 @@ table_desc->reference.opcode = AML_LOAD_OP; table_desc->reference.object = table_info.installed_desc; - *ddb_handle = table_desc; + /* TBD: store the tabledesc into the Ddb_handle target */ + /* Ddb_handle = Table_desc; */ return_ACPI_STATUS (status); @@ -175,7 +176,6 @@ ACPI_MEM_FREE (table_desc); ACPI_MEM_FREE (table_ptr); return_ACPI_STATUS (status); - } @@ -191,7 +191,7 @@ * ****************************************************************************/ -static acpi_status +acpi_status acpi_ex_unload_table ( acpi_operand_object *ddb_handle) { @@ -236,60 +236,6 @@ /* Delete the table descriptor (Ddb_handle) */ acpi_ut_remove_reference (table_desc); - - return_ACPI_STATUS (status); -} - - -/***************************************************************************** - * - * FUNCTION: Acpi_ex_reconfiguration - * - * PARAMETERS: Opcode - The opcode to be executed - * Walk_state - Current state of the parse tree walk - * - * RETURN: Status - * - * DESCRIPTION: Reconfiguration opcodes such as LOAD and UNLOAD - * - ****************************************************************************/ - -acpi_status -acpi_ex_reconfiguration ( - u16 opcode, - acpi_walk_state *walk_state) -{ - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_status status; - - - FUNCTION_TRACE ("Ex_reconfiguration"); - -#define ddb_handle operand[0] -#define region_desc operand[1] - - - switch (opcode) { - - case AML_LOAD_OP: - - status = acpi_ex_load_table_op (region_desc, &ddb_handle); - break; - - - case AML_UNLOAD_OP: - - status = acpi_ex_unload_table (ddb_handle); - break; - - - default: - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "bad opcode=%X\n", opcode)); - status = AE_AML_BAD_OPCODE; - break; - } - return_ACPI_STATUS (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exconvrt.c linux/drivers/acpi/executer/exconvrt.c --- v2.4.13/linux/drivers/acpi/executer/exconvrt.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exconvrt.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exconvrt - Object conversion routines - * $Revision: 22 $ + * $Revision: 24 $ * *****************************************************************************/ @@ -230,7 +230,7 @@ new_buf = ACPI_MEM_CALLOCATE (integer_size); if (!new_buf) { REPORT_ERROR - (("Ex_dyadic2_r/Concat_op: Buffer allocation failure\n")); + (("Ex_convert_to_buffer: Buffer allocation failure\n")); acpi_ut_remove_reference (ret_desc); return (AE_NO_MEMORY); } @@ -296,8 +296,9 @@ u32 k = 0; u8 hex_digit; acpi_integer digit; - u8 leading_zero = TRUE; + u32 remainder; u32 length = sizeof (acpi_integer); + u8 leading_zero = TRUE; FUNCTION_ENTRY (); @@ -306,12 +307,13 @@ switch (base) { case 10: + remainder = 0; for (i = ACPI_MAX_DECIMAL_DIGITS; i > 0 ; i--) { /* Divide by nth factor of 10 */ digit = integer; for (j = 1; j < i; j++) { - digit = ACPI_DIVIDE (digit, 10); + acpi_ut_short_divide (&digit, 10, &digit, &remainder); } /* Create the decimal digit */ @@ -321,7 +323,7 @@ } if (!leading_zero) { - string[k] = (u8) (ASCII_ZERO + ACPI_MODULO (digit, 10)); + string[k] = (u8) (ASCII_ZERO + remainder); k++; } } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/excreate.c linux/drivers/acpi/executer/excreate.c --- v2.4.13/linux/drivers/acpi/executer/excreate.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/excreate.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: excreate - Named object creation - * $Revision: 66 $ + * $Revision: 71 $ * *****************************************************************************/ @@ -37,162 +37,6 @@ MODULE_NAME ("excreate") -/******************************************************************************* - * - * FUNCTION: Acpi_ex_create_buffer_field - * - * PARAMETERS: Opcode - The opcode to be executed - * Operands - List of operands for the opcode - * - * RETURN: Status - * - * DESCRIPTION: Execute Create_field operators: Create_bit_field_op, - * Create_byte_field_op, Create_word_field_op, Create_dWord_field_op, - * Create_field_op (which define fields in buffers) - * - * ALLOCATION: Deletes Create_field_op's count operand descriptor - * - * - * ACPI SPECIFICATION REFERENCES: - * Def_create_bit_field := Create_bit_field_op Src_buf Bit_idx Name_string - * Def_create_byte_field := Create_byte_field_op Src_buf Byte_idx Name_string - * Def_create_dWord_field := Create_dWord_field_op Src_buf Byte_idx Name_string - * Def_create_field := Create_field_op Src_buf Bit_idx Num_bits Name_string - * Def_create_word_field := Create_word_field_op Src_buf Byte_idx Name_string - * Bit_index := Term_arg=>Integer - * Byte_index := Term_arg=>Integer - * Num_bits := Term_arg=>Integer - * Source_buff := Term_arg=>Buffer - * - ******************************************************************************/ - -acpi_status -acpi_ex_create_buffer_field ( - u8 *aml_ptr, - u32 aml_length, - acpi_namespace_node *node, - acpi_walk_state *walk_state) -{ - acpi_status status; - acpi_operand_object *obj_desc; - acpi_operand_object *tmp_desc; - - - FUNCTION_TRACE ("Ex_create_buffer_field"); - - - /* Create the descriptor */ - - obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER_FIELD); - if (!obj_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - - /* - * Allocate a method object for this field unit - */ - obj_desc->buffer_field.extra = acpi_ut_create_internal_object ( - INTERNAL_TYPE_EXTRA); - if (!obj_desc->buffer_field.extra) { - status = AE_NO_MEMORY; - goto cleanup; - } - - /* - * Remember location in AML stream of the field unit - * opcode and operands -- since the buffer and index - * operands must be evaluated. - */ - obj_desc->buffer_field.extra->extra.pcode = aml_ptr; - obj_desc->buffer_field.extra->extra.pcode_length = aml_length; - obj_desc->buffer_field.node = node; - - - /* - * This operation is supposed to cause the destination Name to refer - * to the defined Buffer_field -- it must not store the constructed - * Buffer_field object (or its current value) in some location that the - * Name may already be pointing to. So, if the Name currently contains - * a reference which would cause Acpi_ex_store() to perform an indirect - * store rather than setting the value of the Name itself, clobber that - * reference before calling Acpi_ex_store(). - */ - - /* Type of Name's existing value */ - - switch (acpi_ns_get_type (node)) { - - case ACPI_TYPE_BUFFER_FIELD: - case INTERNAL_TYPE_ALIAS: - case INTERNAL_TYPE_REGION_FIELD: - case INTERNAL_TYPE_BANK_FIELD: - case INTERNAL_TYPE_INDEX_FIELD: - - tmp_desc = acpi_ns_get_attached_object (node); - if (tmp_desc) { - /* - * There is an existing object here; delete it and zero out the - * object field within the Node - */ - DUMP_PATHNAME (node, - "Ex_create_buffer_field: Removing Current Reference", - ACPI_LV_BFIELD, _COMPONENT); - - DUMP_ENTRY (node, ACPI_LV_BFIELD); - DUMP_STACK_ENTRY (tmp_desc); - - acpi_ut_remove_reference (tmp_desc); - acpi_ns_attach_object ((acpi_namespace_node *) node, NULL, - ACPI_TYPE_ANY); - } - - /* Set the type to ANY (or the store below will fail) */ - - ((acpi_namespace_node *) node)->type = ACPI_TYPE_ANY; - - break; - - - default: - - break; - } - - - /* Store constructed field descriptor in result location */ - - status = acpi_ex_store (obj_desc, (acpi_operand_object *) node, - walk_state); - - /* - * If the field descriptor was not physically stored (or if a failure - * above), we must delete it - */ - if (obj_desc->common.reference_count <= 1) { - acpi_ut_remove_reference (obj_desc); - } - - - return_ACPI_STATUS (AE_OK); - - -cleanup: - - /* Delete region object and method subobject */ - - if (obj_desc) { - /* Remove deletes both objects! */ - - acpi_ut_remove_reference (obj_desc); - obj_desc = NULL; - } - - return_ACPI_STATUS (status); -} - - /***************************************************************************** * * FUNCTION: Acpi_ex_create_alias @@ -211,7 +55,6 @@ acpi_walk_state *walk_state) { acpi_namespace_node *source_node; - acpi_namespace_node *alias_node; acpi_status status; @@ -220,29 +63,19 @@ /* Get the source/alias operands (both namespace nodes) */ - source_node = (acpi_namespace_node *) walk_state->operands[walk_state->num_operands -1]; - walk_state->num_operands--; - - /* - * Don't pop it, it gets removed in the calling routine - */ - alias_node = acpi_ds_obj_stack_get_value (0, walk_state); + source_node = (acpi_namespace_node *) walk_state->operands[1]; - /* Add an additional reference to the object */ - acpi_ut_add_reference (source_node->object); + /* Attach the original source object to the new Alias Node */ - /* - * Attach the original source Node to the new Alias Node. - */ - status = acpi_ns_attach_object (alias_node, source_node->object, + status = acpi_ns_attach_object ((acpi_namespace_node *) walk_state->operands[0], + source_node->object, source_node->type); - /* * The new alias assumes the type of the source, but it points - * to the same object. The reference count of the object has two - * additional references to prevent deletion out from under either the + * to the same object. The reference count of the object has an + * additional reference to prevent deletion out from under either the * source or the alias Node */ @@ -256,7 +89,7 @@ * * FUNCTION: Acpi_ex_create_event * - * PARAMETERS: None + * PARAMETERS: Walk_state - Current state * * RETURN: Status * @@ -288,23 +121,20 @@ status = acpi_os_create_semaphore (ACPI_NO_UNIT_LIMIT, 1, &obj_desc->event.semaphore); if (ACPI_FAILURE (status)) { - acpi_ut_remove_reference (obj_desc); goto cleanup; } /* Attach object to the Node */ - status = acpi_ns_attach_object (acpi_ds_obj_stack_get_value (0, walk_state), + status = acpi_ns_attach_object ((acpi_namespace_node *) walk_state->operands[0], obj_desc, (u8) ACPI_TYPE_EVENT); - if (ACPI_FAILURE (status)) { - acpi_os_delete_semaphore (obj_desc->event.semaphore); - acpi_ut_remove_reference (obj_desc); - goto cleanup; - } - cleanup: - + /* + * Remove local reference to the object (on error, will cause deletion + * of both object and semaphore if present.) + */ + acpi_ut_remove_reference (obj_desc); return_ACPI_STATUS (status); } @@ -313,13 +143,14 @@ * * FUNCTION: Acpi_ex_create_mutex * - * PARAMETERS: Interpreter_mode - Current running mode (load1/Load2/Exec) - * Operands - List of operands for the opcode + * PARAMETERS: Walk_state - Current state * * RETURN: Status * * DESCRIPTION: Create a new mutex object * + * Mutex (Name[0], Sync_level[1]) + * ****************************************************************************/ acpi_status @@ -327,19 +158,13 @@ acpi_walk_state *walk_state) { acpi_status status = AE_OK; - acpi_operand_object *sync_desc; acpi_operand_object *obj_desc; FUNCTION_TRACE_PTR ("Ex_create_mutex", WALK_OPERANDS); - /* Get the operand */ - - sync_desc = walk_state->operands[walk_state->num_operands -1]; - walk_state->num_operands--; - - /* Attempt to allocate a new object */ + /* Create the new mutex object */ obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_MUTEX); if (!obj_desc) { @@ -351,29 +176,23 @@ status = acpi_os_create_semaphore (1, 1, &obj_desc->mutex.semaphore); if (ACPI_FAILURE (status)) { - acpi_ut_remove_reference (obj_desc); goto cleanup; } - obj_desc->mutex.sync_level = (u8) sync_desc->integer.value; + /* Init object and attach to NS node */ - /* Obj_desc was on the stack top, and the name is below it */ + obj_desc->mutex.sync_level = (u8) walk_state->operands[1]->integer.value; - status = acpi_ns_attach_object (acpi_ds_obj_stack_get_value (0, walk_state), + status = acpi_ns_attach_object ((acpi_namespace_node *) walk_state->operands[0], obj_desc, (u8) ACPI_TYPE_MUTEX); - if (ACPI_FAILURE (status)) { - acpi_os_delete_semaphore (obj_desc->mutex.semaphore); - acpi_ut_remove_reference (obj_desc); - goto cleanup; - } cleanup: - - /* Always delete the operand */ - - acpi_ut_remove_reference (sync_desc); - + /* + * Remove local reference to the object (on error, will cause deletion + * of both object and semaphore if present.) + */ + acpi_ut_remove_reference (obj_desc); return_ACPI_STATUS (status); } @@ -382,10 +201,10 @@ * * FUNCTION: Acpi_ex_create_region * - * PARAMETERS: Aml_ptr - Pointer to the region declaration AML + * PARAMETERS: Aml_start - Pointer to the region declaration AML * Aml_length - Max length of the declaration AML * Operands - List of operands for the opcode - * Interpreter_mode - Load1/Load2/Execute + * Walk_state - Current state * * RETURN: Status * @@ -395,7 +214,7 @@ acpi_status acpi_ex_create_region ( - u8 *aml_ptr, + u8 *aml_start, u32 aml_length, u8 region_space, acpi_walk_state *walk_state) @@ -408,6 +227,18 @@ FUNCTION_TRACE ("Ex_create_region"); + /* Get the Node from the object stack */ + + node = (acpi_namespace_node *) walk_state->operands[0]; + + /* + * If the region object is already attached to this node, + * just return + */ + if (node->object) { + return_ACPI_STATUS (AE_OK); + } + /* * Space ID must be one of the predefined IDs, or in the user-defined * range @@ -422,10 +253,6 @@ acpi_ut_get_region_name (region_space), region_space)); - /* Get the Node from the object stack */ - - node = (acpi_namespace_node *) acpi_ds_obj_stack_get_value (0, walk_state); - /* Create the region descriptor */ obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_REGION); @@ -434,9 +261,8 @@ goto cleanup; } - /* - * Allocate a method object for this region. - */ + /* Allocate a method object for this region */ + obj_desc->region.extra = acpi_ut_create_internal_object ( INTERNAL_TYPE_EXTRA); if (!obj_desc->region.extra) { @@ -448,23 +274,20 @@ * Remember location in AML stream of address & length * operands since they need to be evaluated at run time. */ - obj_desc->region.extra->extra.pcode = aml_ptr; - obj_desc->region.extra->extra.pcode_length = aml_length; + obj_desc->region.extra->extra.aml_start = aml_start; + obj_desc->region.extra->extra.aml_length = aml_length; /* Init the region from the operands */ - obj_desc->region.space_id = region_space; - obj_desc->region.address = 0; - obj_desc->region.length = 0; - + obj_desc->region.space_id = region_space; + obj_desc->region.address = 0; + obj_desc->region.length = 0; + obj_desc->region.node = node; /* Install the new region object in the parent Node */ - obj_desc->region.node = node; - status = acpi_ns_attach_object (node, obj_desc, (u8) ACPI_TYPE_REGION); - if (ACPI_FAILURE (status)) { goto cleanup; } @@ -474,7 +297,6 @@ * Namespace is NOT locked at this point. */ status = acpi_ev_initialize_region (obj_desc, FALSE); - if (ACPI_FAILURE (status)) { /* * If AE_NOT_EXIST is returned, it is not fatal @@ -488,17 +310,48 @@ cleanup: - if (ACPI_FAILURE (status)) { - /* Delete region object and method subobject */ + /* Remove local reference to the object */ - if (obj_desc) { - /* Remove deletes both objects! */ + acpi_ut_remove_reference (obj_desc); - acpi_ut_remove_reference (obj_desc); - obj_desc = NULL; - } + return_ACPI_STATUS (status); +} + + +/***************************************************************************** + * + * FUNCTION: Acpi_ex_create_table_region + * + * PARAMETERS: Walk_state - Current state + * + * RETURN: Status + * + * DESCRIPTION: Create a new Data_table_region object + * + ****************************************************************************/ + +acpi_status +acpi_ex_create_table_region ( + acpi_walk_state *walk_state) +{ + acpi_status status = AE_OK; + + + FUNCTION_TRACE ("Ex_create_table_region"); + +/* + acpi_operand_object *Obj_desc; + Obj_desc = Acpi_ut_create_internal_object (ACPI_TYPE_REGION); + if (!Obj_desc) + { + Status = AE_NO_MEMORY; + goto Cleanup; } + +Cleanup: +*/ + return_ACPI_STATUS (status); } @@ -515,68 +368,46 @@ * * DESCRIPTION: Create a new processor object and populate the fields * + * Processor (Name[0], Cpu_iD[1], Pblock_addr[2], Pblock_length[3]) + * ****************************************************************************/ acpi_status acpi_ex_create_processor ( - acpi_parse_object *op, - acpi_namespace_node *processor_node) + acpi_walk_state *walk_state) { - acpi_status status; - acpi_parse_object *arg; + acpi_operand_object **operand = &walk_state->operands[0]; acpi_operand_object *obj_desc; + acpi_status status; + + FUNCTION_TRACE_PTR ("Ex_create_processor", walk_state); - FUNCTION_TRACE_PTR ("Ex_create_processor", op); + /* Create the processor object */ obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_PROCESSOR); if (!obj_desc) { return_ACPI_STATUS (AE_NO_MEMORY); } - /* Install the new processor object in the parent Node */ - - status = acpi_ns_attach_object (processor_node, obj_desc, - (u8) ACPI_TYPE_PROCESSOR); - if (ACPI_FAILURE (status)) { - acpi_ut_delete_object_desc (obj_desc); - return_ACPI_STATUS (status); - } - - /* Get first arg and verify existence */ - - arg = op->value.arg; - if (!arg) { - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - /* First arg is the Processor ID */ - - obj_desc->processor.proc_id = (u8) arg->value.integer; - - /* Get second arg and verify existence */ - - arg = arg->next; - if (!arg) { - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - /* Second arg is the PBlock Address */ + /* + * Initialize the processor object from the operands + */ + obj_desc->processor.proc_id = (u8) operand[1]->integer.value; + obj_desc->processor.address = (ACPI_IO_ADDRESS) operand[2]->integer.value; + obj_desc->processor.length = (u8) operand[3]->integer.value; - obj_desc->processor.address = (ACPI_IO_ADDRESS) arg->value.integer; + /* Install the processor object in the parent Node */ - /* Get third arg and verify existence */ + status = acpi_ns_attach_object ((acpi_namespace_node *) operand[0], + obj_desc, (u8) ACPI_TYPE_PROCESSOR); - arg = arg->next; - if (!arg) { - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - /* Third arg is the PBlock Length */ + /* Remove local reference to the object */ - obj_desc->processor.length = (u8) arg->value.integer; - return_ACPI_STATUS (AE_OK); + acpi_ut_remove_reference (obj_desc); + return_ACPI_STATUS (status); } @@ -592,58 +423,44 @@ * * DESCRIPTION: Create a new Power_resource object and populate the fields * + * Power_resource (Name[0], System_level[1], Resource_order[2]) + * ****************************************************************************/ acpi_status acpi_ex_create_power_resource ( - acpi_parse_object *op, - acpi_namespace_node *power_node) + acpi_walk_state *walk_state) { + acpi_operand_object **operand = &walk_state->operands[0]; acpi_status status; - acpi_parse_object *arg; acpi_operand_object *obj_desc; - FUNCTION_TRACE_PTR ("Ex_create_power_resource", op); + FUNCTION_TRACE_PTR ("Ex_create_power_resource", walk_state); + + /* Create the power resource object */ obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_POWER); if (!obj_desc) { return_ACPI_STATUS (AE_NO_MEMORY); } - /* Install the new power resource object in the parent Node */ - - status = acpi_ns_attach_object (power_node, obj_desc, - (u8) ACPI_TYPE_POWER); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS(status); - } + /* Initialize the power object from the operands */ + obj_desc->power_resource.system_level = (u8) operand[1]->integer.value; + obj_desc->power_resource.resource_order = (u16) operand[2]->integer.value; - /* Get first arg and verify existence */ + /* Install the power resource object in the parent Node */ - arg = op->value.arg; - if (!arg) { - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - /* First arg is the System_level */ - - obj_desc->power_resource.system_level = (u8) arg->value.integer; - - /* Get second arg and check existence */ - - arg = arg->next; - if (!arg) { - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } + status = acpi_ns_attach_object ((acpi_namespace_node *) operand[0], + obj_desc, (u8) ACPI_TYPE_POWER); - /* Second arg is the PBlock Address */ - obj_desc->power_resource.resource_order = (u16) arg->value.integer; + /* Remove local reference to the object */ - return_ACPI_STATUS (AE_OK); + acpi_ut_remove_reference (obj_desc); + return_ACPI_STATUS (status); } @@ -651,7 +468,7 @@ * * FUNCTION: Acpi_ex_create_method * - * PARAMETERS: Aml_ptr - First byte of the method's AML + * PARAMETERS: Aml_start - First byte of the method's AML * Aml_length - AML byte count for this method * Method_flags - AML method flag byte * Method - Method Node @@ -664,16 +481,17 @@ acpi_status acpi_ex_create_method ( - u8 *aml_ptr, + u8 *aml_start, u32 aml_length, - u32 method_flags, - acpi_namespace_node *method) + acpi_walk_state *walk_state) { + acpi_operand_object **operand = &walk_state->operands[0]; acpi_operand_object *obj_desc; acpi_status status; + u8 method_flags; - FUNCTION_TRACE_PTR ("Ex_create_method", method); + FUNCTION_TRACE_PTR ("Ex_create_method", walk_state); /* Create a new method object */ @@ -683,18 +501,17 @@ return_ACPI_STATUS (AE_NO_MEMORY); } - /* Get the method's AML pointer/length from the Op */ + /* Save the method's AML pointer and length */ - obj_desc->method.pcode = aml_ptr; - obj_desc->method.pcode_length = aml_length; + obj_desc->method.aml_start = aml_start; + obj_desc->method.aml_length = aml_length; - /* - * First argument is the Method Flags (contains parameter count for the - * method) - */ - obj_desc->method.method_flags = (u8) method_flags; - obj_desc->method.param_count = (u8) (method_flags & - METHOD_FLAGS_ARG_COUNT); + /* disassemble the method flags */ + + method_flags = (u8) operand[1]->integer.value; + + obj_desc->method.method_flags = method_flags; + obj_desc->method.param_count = (u8) (method_flags & METHOD_FLAGS_ARG_COUNT); /* * Get the concurrency count. If required, a semaphore will be @@ -715,11 +532,16 @@ /* Attach the new object to the method Node */ - status = acpi_ns_attach_object (method, obj_desc, (u8) ACPI_TYPE_METHOD); - if (ACPI_FAILURE (status)) { - acpi_ut_delete_object_desc (obj_desc); - } + status = acpi_ns_attach_object ((acpi_namespace_node *) operand[0], + obj_desc, (u8) ACPI_TYPE_METHOD); + + /* Remove local reference to the object */ + + acpi_ut_remove_reference (obj_desc); + + /* Remove a reference to the operand */ + acpi_ut_remove_reference (operand[1]); return_ACPI_STATUS (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exdump.c linux/drivers/acpi/executer/exdump.c --- v2.4.13/linux/drivers/acpi/executer/exdump.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exdump.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exdump - Interpreter debug output routines - * $Revision: 123 $ + * $Revision: 126 $ * *****************************************************************************/ @@ -46,12 +46,12 @@ * FUNCTION: Acpi_ex_show_hex_value * * PARAMETERS: Byte_count - Number of bytes to print (1, 2, or 4) - * *Aml_ptr - Address in AML stream of bytes to print + * *Aml_start - Address in AML stream of bytes to print * Interpreter_mode - Current running mode (load1/Load2/Exec) * Lead_space - # of spaces to print ahead of value * 0 => none ahead but one behind * - * DESCRIPTION: Print Byte_count byte(s) starting at Aml_ptr as a single + * DESCRIPTION: Print Byte_count byte(s) starting at Aml_start as a single * value, in hex. If Byte_count > 1 or the value printed is > 9, also * print in decimal. * @@ -60,7 +60,7 @@ void acpi_ex_show_hex_value ( u32 byte_count, - u8 *aml_ptr, + u8 *aml_start, u32 lead_space) { u32 value; /* Value retrieved from AML stream */ @@ -72,7 +72,7 @@ FUNCTION_TRACE ("Ex_show_hex_value"); - if (!aml_ptr) { + if (!aml_start) { REPORT_ERROR (("Ex_show_hex_value: null pointer\n")); } @@ -80,9 +80,9 @@ * AML numbers are always stored little-endian, * even if the processor is big-endian. */ - for (current_aml_ptr = aml_ptr + byte_count, + for (current_aml_ptr = aml_start + byte_count, value = 0; - current_aml_ptr > aml_ptr; ) { + current_aml_ptr > aml_start; ) { value = (value << 8) + (u32)* --current_aml_ptr; } @@ -96,14 +96,12 @@ length += 3 + acpi_ex_digits_needed (value, 10); } - ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "")); - for (length = lead_space; length; --length ) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, " ")); } while (byte_count--) { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, "%02x", *aml_ptr++)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, "%02x", *aml_start++)); if (byte_count) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, " ")); @@ -111,7 +109,7 @@ } if (show_decimal_value) { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, " [%ld]", value)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_LOAD, " [%d]", value)); } if (0 == lead_space) { @@ -163,12 +161,6 @@ return (AE_OK); } - if (acpi_tb_system_table_pointer (entry_desc)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%p is an AML pointer\n", - entry_desc)); - return (AE_OK); - } - if (!VALID_DESCRIPTOR_TYPE (entry_desc, ACPI_DESC_TYPE_INTERNAL)) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%p Is not a local object \n", entry_desc)); DUMP_BUFFER (entry_desc, sizeof (acpi_operand_object)); @@ -236,8 +228,9 @@ if (ACPI_TYPE_INTEGER == entry_desc->common.type) { /* Value is a Number */ - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " value is [%ld]", - entry_desc->integer.value)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " value is [%8.8X%8.8x]", + HIDWORD(entry_desc->integer.value), + LODWORD(entry_desc->integer.value))); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n")); @@ -253,8 +246,9 @@ /* Value is a Number */ - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " value is [%ld]", - entry_desc->integer.value)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " value is [%8.8X%8.8x]", + HIDWORD(entry_desc->integer.value), + LODWORD(entry_desc->integer.value))); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n")); @@ -262,7 +256,7 @@ case AML_INT_NAMEPATH_OP: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference.Node->Name %x\n", + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Reference.Node->Name %X\n", entry_desc->reference.node->name)); break; @@ -297,8 +291,7 @@ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "Buffer Contents: ")); for (buf = entry_desc->buffer.pointer; length--; ++buf) { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, - length ? " %02x" : " %02x", *buf)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " %02x", *buf)); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO,"\n")); } @@ -371,8 +364,10 @@ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n")); } else { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " base %p Length %X\n", - entry_desc->region.address, entry_desc->region.length)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, " base %8.8X%8.8X Length %X\n", + HIDWORD(entry_desc->region.address), + LODWORD(entry_desc->region.address), + entry_desc->region.length)); } break; @@ -400,7 +395,7 @@ case INTERNAL_TYPE_REGION_FIELD: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, - "Region_field: bits=%X bitaccwidth=%X lock=%X update=%X at byte=%lX bit=%X of below:\n", + "Region_field: bits=%X bitaccwidth=%X lock=%X update=%X at byte=%X bit=%X of below:\n", entry_desc->field.bit_length, entry_desc->field.access_bit_width, entry_desc->field.lock_rule, entry_desc->field.update_rule, entry_desc->field.base_byte_offset, entry_desc->field.start_field_bit_offset)); @@ -417,7 +412,7 @@ case ACPI_TYPE_BUFFER_FIELD: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, - "Buffer_field: %X bits at byte %lX bit %X of \n", + "Buffer_field: %X bits at byte %X bit %X of \n", entry_desc->buffer_field.bit_length, entry_desc->buffer_field.base_byte_offset, entry_desc->buffer_field.start_field_bit_offset)); @@ -449,9 +444,9 @@ case ACPI_TYPE_METHOD: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, - "Method(%X) @ %p:%lX\n", + "Method(%X) @ %p:%X\n", entry_desc->method.param_count, - entry_desc->method.pcode, entry_desc->method.pcode_length)); + entry_desc->method.aml_start, entry_desc->method.aml_length)); break; @@ -608,7 +603,7 @@ } - acpi_os_printf ("%20s : %4.4s\n", "Name", &node->name); + acpi_os_printf ("%20s : %4.4s\n", "Name", (char*)&node->name); acpi_os_printf ("%20s : %s\n", "Type", acpi_ut_get_type_name (node->type)); acpi_os_printf ("%20s : %X\n", "Flags", node->flags); acpi_os_printf ("%20s : %X\n", "Owner Id", node->owner_id); @@ -730,8 +725,8 @@ acpi_os_printf ("%20s : %X\n", "Param_count", obj_desc->method.param_count); acpi_os_printf ("%20s : %X\n", "Concurrency", obj_desc->method.concurrency); acpi_os_printf ("%20s : %p\n", "Semaphore", obj_desc->method.semaphore); - acpi_os_printf ("%20s : %X\n", "Pcode_length", obj_desc->method.pcode_length); - acpi_os_printf ("%20s : %X\n", "Pcode", obj_desc->method.pcode); + acpi_os_printf ("%20s : %X\n", "Aml_length", obj_desc->method.aml_length); + acpi_os_printf ("%20s : %X\n", "Aml_start", obj_desc->method.aml_start); break; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exdyadic.c linux/drivers/acpi/executer/exdyadic.c --- v2.4.13/linux/drivers/acpi/executer/exdyadic.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exdyadic.c Wed Dec 31 16:00:00 1969 @@ -1,874 +0,0 @@ -/****************************************************************************** - * - * Module Name: exdyadic - ACPI AML execution for dyadic (2-operand) operators - * $Revision: 88 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000, 2001 R. Byron Moore - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - - -#include "acpi.h" -#include "acparser.h" -#include "acnamesp.h" -#include "acinterp.h" -#include "acevents.h" -#include "amlcode.h" -#include "acdispat.h" - - -#define _COMPONENT ACPI_EXECUTER - MODULE_NAME ("exdyadic") - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_do_concatenate - * - * PARAMETERS: *Obj_desc - Object to be converted. Must be an - * Integer, Buffer, or String - * Walk_state - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Concatenate two objects OF THE SAME TYPE. - * - ******************************************************************************/ - -acpi_status -acpi_ex_do_concatenate ( - acpi_operand_object *obj_desc, - acpi_operand_object *obj_desc2, - acpi_operand_object **actual_ret_desc, - acpi_walk_state *walk_state) -{ - acpi_status status; - u32 i; - acpi_integer this_integer; - acpi_operand_object *ret_desc; - NATIVE_CHAR *new_buf; - u32 integer_size = sizeof (acpi_integer); - - - FUNCTION_ENTRY (); - - - /* - * There are three cases to handle: - * 1) Two Integers concatenated to produce a buffer - * 2) Two Strings concatenated to produce a string - * 3) Two Buffers concatenated to produce a buffer - */ - switch (obj_desc->common.type) { - case ACPI_TYPE_INTEGER: - - /* Handle both ACPI 1.0 and ACPI 2.0 Integer widths */ - - if (walk_state->method_node->flags & ANOBJ_DATA_WIDTH_32) { - /* - * We are running a method that exists in a 32-bit ACPI table. - * Truncate the value to 32 bits by zeroing out the upper - * 32-bit field - */ - integer_size = sizeof (u32); - } - - /* Result of two integers is a buffer */ - - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER); - if (!ret_desc) { - return (AE_NO_MEMORY); - } - - /* Need enough space for two integers */ - - ret_desc->buffer.length = integer_size * 2; - new_buf = ACPI_MEM_CALLOCATE (ret_desc->buffer.length); - if (!new_buf) { - REPORT_ERROR - (("Ex_do_concatenate: Buffer allocation failure\n")); - status = AE_NO_MEMORY; - goto cleanup; - } - - ret_desc->buffer.pointer = (u8 *) new_buf; - - /* Convert the first integer */ - - this_integer = obj_desc->integer.value; - for (i = 0; i < integer_size; i++) { - new_buf[i] = (u8) this_integer; - this_integer >>= 8; - } - - /* Convert the second integer */ - - this_integer = obj_desc2->integer.value; - for (; i < (integer_size * 2); i++) { - new_buf[i] = (u8) this_integer; - this_integer >>= 8; - } - - break; - - - case ACPI_TYPE_STRING: - - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_STRING); - if (!ret_desc) { - return (AE_NO_MEMORY); - } - - /* Operand1 is string */ - - new_buf = ACPI_MEM_ALLOCATE (obj_desc->string.length + - obj_desc2->string.length + 1); - if (!new_buf) { - REPORT_ERROR - (("Ex_do_concatenate: String allocation failure\n")); - status = AE_NO_MEMORY; - goto cleanup; - } - - STRCPY (new_buf, obj_desc->string.pointer); - STRCPY (new_buf + obj_desc->string.length, - obj_desc2->string.pointer); - - /* Point the return object to the new string */ - - ret_desc->string.pointer = new_buf; - ret_desc->string.length = obj_desc->string.length += - obj_desc2->string.length; - break; - - - case ACPI_TYPE_BUFFER: - - /* Operand1 is a buffer */ - - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER); - if (!ret_desc) { - return (AE_NO_MEMORY); - } - - new_buf = ACPI_MEM_ALLOCATE (obj_desc->buffer.length + - obj_desc2->buffer.length); - if (!new_buf) { - REPORT_ERROR - (("Ex_do_concatenate: Buffer allocation failure\n")); - status = AE_NO_MEMORY; - goto cleanup; - } - - MEMCPY (new_buf, obj_desc->buffer.pointer, - obj_desc->buffer.length); - MEMCPY (new_buf + obj_desc->buffer.length, obj_desc2->buffer.pointer, - obj_desc2->buffer.length); - - /* - * Point the return object to the new buffer - */ - - ret_desc->buffer.pointer = (u8 *) new_buf; - ret_desc->buffer.length = obj_desc->buffer.length + - obj_desc2->buffer.length; - break; - - default: - status = AE_AML_INTERNAL; - ret_desc = NULL; - } - - - *actual_ret_desc = ret_desc; - return (AE_OK); - - -cleanup: - - acpi_ut_remove_reference (ret_desc); - return (status); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_dyadic1 - * - * PARAMETERS: Opcode - The opcode to be executed - * Walk_state - Current walk state - * - * RETURN: Status - * - * DESCRIPTION: Execute Type 1 dyadic operator with numeric operands: - * Notify_op - * - * ALLOCATION: Deletes both operands - * - ******************************************************************************/ - -acpi_status -acpi_ex_dyadic1 ( - u16 opcode, - acpi_walk_state *walk_state) -{ - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_namespace_node *node; - acpi_status status = AE_OK; - - - FUNCTION_TRACE_PTR ("Ex_dyadic1", WALK_OPERANDS); - - - /* Examine the opcode */ - - switch (opcode) { - - /* Def_notify := Notify_op (0)Notify_object (1)Notify_value */ - - case AML_NOTIFY_OP: - - /* The Obj_desc is actually an Node */ - - node = (acpi_namespace_node *) operand[0]; - operand[0] = NULL; - - /* Object must be a device or thermal zone */ - - if (node && operand[1]) { - switch (node->type) { - case ACPI_TYPE_DEVICE: - case ACPI_TYPE_THERMAL: - - /* - * Dispatch the notify to the appropriate handler - * NOTE: the request is queued for execution after this method - * completes. The notify handlers are NOT invoked synchronously - * from this thread -- because handlers may in turn run other - * control methods. - */ - status = acpi_ev_queue_notify_request (node, - (u32) operand[1]->integer.value); - break; - - default: - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unexpected notify object type %X\n", - operand[0]->common.type)); - - status = AE_AML_OPERAND_TYPE; - break; - } - } - break; - - default: - - REPORT_ERROR (("Acpi_ex_dyadic1: Unknown dyadic opcode %X\n", opcode)); - status = AE_AML_BAD_OPCODE; - } - - - /* Always delete both operands */ - - acpi_ut_remove_reference (operand[1]); - acpi_ut_remove_reference (operand[0]); - - - return_ACPI_STATUS (status); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_dyadic2_r - * - * PARAMETERS: Opcode - The opcode to be executed - * Walk_state - Current walk state - * Return_desc - Where to store the return object - * - * RETURN: Status - * - * DESCRIPTION: Execute Type 2 dyadic operator with numeric operands and - * one or two result operands. - * - * ALLOCATION: Deletes one operand descriptor -- other remains on stack - * - ******************************************************************************/ - -acpi_status -acpi_ex_dyadic2_r ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc) -{ - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_operand_object *ret_desc = NULL; - acpi_operand_object *ret_desc2 = NULL; - acpi_status status = AE_OK; - - - FUNCTION_TRACE_U32 ("Ex_dyadic2_r", opcode); - - - /* Create an internal return object if necessary */ - - switch (opcode) { - case AML_ADD_OP: - case AML_BIT_AND_OP: - case AML_BIT_NAND_OP: - case AML_BIT_OR_OP: - case AML_BIT_NOR_OP: - case AML_BIT_XOR_OP: - case AML_DIVIDE_OP: - case AML_MOD_OP: - case AML_MULTIPLY_OP: - case AML_SHIFT_LEFT_OP: - case AML_SHIFT_RIGHT_OP: - case AML_SUBTRACT_OP: - - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - break; - } - - - /* - * Execute the opcode - */ - switch (opcode) { - - /* Def_add := Add_op Operand1 Operand2 Result */ - - case AML_ADD_OP: - - ret_desc->integer.value = operand[0]->integer.value + - operand[1]->integer.value; - break; - - - /* Def_and := And_op Operand1 Operand2 Result */ - - case AML_BIT_AND_OP: - - ret_desc->integer.value = operand[0]->integer.value & - operand[1]->integer.value; - break; - - - /* Def_nAnd := NAnd_op Operand1 Operand2 Result */ - - case AML_BIT_NAND_OP: - - ret_desc->integer.value = ~(operand[0]->integer.value & - operand[1]->integer.value); - break; - - - /* Def_or := Or_op Operand1 Operand2 Result */ - - case AML_BIT_OR_OP: - - ret_desc->integer.value = operand[0]->integer.value | - operand[1]->integer.value; - break; - - - /* Def_nOr := NOr_op Operand1 Operand2 Result */ - - case AML_BIT_NOR_OP: - - ret_desc->integer.value = ~(operand[0]->integer.value | - operand[1]->integer.value); - break; - - - /* Def_xOr := XOr_op Operand1 Operand2 Result */ - - case AML_BIT_XOR_OP: - - ret_desc->integer.value = operand[0]->integer.value ^ - operand[1]->integer.value; - break; - - - /* Def_divide := Divide_op Dividend Divisor Remainder Quotient */ - - case AML_DIVIDE_OP: - - if (!operand[1]->integer.value) { - REPORT_ERROR - (("Divide_op: Divide by zero\n")); - - status = AE_AML_DIVIDE_BY_ZERO; - goto cleanup; - } - - ret_desc2 = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc2) { - status = AE_NO_MEMORY; - goto cleanup; - } - - /* Remainder (modulo) */ - - ret_desc->integer.value = ACPI_MODULO (operand[0]->integer.value, - operand[1]->integer.value); - - /* Result (what we used to call the quotient) */ - - ret_desc2->integer.value = ACPI_DIVIDE (operand[0]->integer.value, - operand[1]->integer.value); - break; - - - /* Def_mod := Mod_op Dividend Divisor Remainder */ - - case AML_MOD_OP: /* ACPI 2.0 */ - - if (!operand[1]->integer.value) { - REPORT_ERROR - (("Mod_op: Divide by zero\n")); - - status = AE_AML_DIVIDE_BY_ZERO; - goto cleanup; - } - - /* Remainder (modulo) */ - - ret_desc->integer.value = ACPI_MODULO (operand[0]->integer.value, - operand[1]->integer.value); - break; - - - /* Def_multiply := Multiply_op Operand1 Operand2 Result */ - - case AML_MULTIPLY_OP: - - ret_desc->integer.value = operand[0]->integer.value * - operand[1]->integer.value; - break; - - - /* Def_shift_left := Shift_left_op Operand Shift_count Result */ - - case AML_SHIFT_LEFT_OP: - - ret_desc->integer.value = operand[0]->integer.value << - operand[1]->integer.value; - break; - - - /* Def_shift_right := Shift_right_op Operand Shift_count Result */ - - case AML_SHIFT_RIGHT_OP: - - ret_desc->integer.value = operand[0]->integer.value >> - operand[1]->integer.value; - break; - - - /* Def_subtract := Subtract_op Operand1 Operand2 Result */ - - case AML_SUBTRACT_OP: - - ret_desc->integer.value = operand[0]->integer.value - - operand[1]->integer.value; - break; - - - /* Def_concat := Concat_op Data1 Data2 Result */ - - case AML_CONCAT_OP: - - /* - * Convert the second operand if necessary. The first operand - * determines the type of the second operand, (See the Data Types - * section of the ACPI specification.) Both object types are - * guaranteed to be either Integer/String/Buffer by the operand - * resolution mechanism above. - */ - switch (operand[0]->common.type) { - case ACPI_TYPE_INTEGER: - status = acpi_ex_convert_to_integer (operand[1], &operand[1], walk_state); - break; - - case ACPI_TYPE_STRING: - status = acpi_ex_convert_to_string (operand[1], &operand[1], 16, ACPI_UINT32_MAX, walk_state); - break; - - case ACPI_TYPE_BUFFER: - status = acpi_ex_convert_to_buffer (operand[1], &operand[1], walk_state); - break; - - default: - status = AE_AML_INTERNAL; - } - - if (ACPI_FAILURE (status)) { - goto cleanup; - } - - - /* - * Both operands are now known to be the same object type - * (Both are Integer, String, or Buffer), and we can now perform the - * concatenation. - */ - status = acpi_ex_do_concatenate (operand[0], operand[1], &ret_desc, walk_state); - if (ACPI_FAILURE (status)) { - goto cleanup; - } - break; - - - /* Def_to_string := Buffer, Length, Result */ - - case AML_TO_STRING_OP: /* ACPI 2.0 */ - - status = acpi_ex_convert_to_string (operand[0], &ret_desc, 16, - (u32) operand[1]->integer.value, walk_state); - break; - - - /* Def_concat_res := Buffer, Buffer, Result */ - - case AML_CONCAT_RES_OP: /* ACPI 2.0 */ - - status = AE_NOT_IMPLEMENTED; - goto cleanup; - break; - - - default: - - REPORT_ERROR (("Acpi_ex_dyadic2_r: Unknown dyadic opcode %X\n", - opcode)); - status = AE_AML_BAD_OPCODE; - goto cleanup; - } - - - /* - * Store the result of the operation (which is now in Operand[0]) into - * the result descriptor, or the location pointed to by the result - * descriptor (Operand[2]). - */ - status = acpi_ex_store (ret_desc, operand[2], walk_state); - if (ACPI_FAILURE (status)) { - goto cleanup; - } - - if (AML_DIVIDE_OP == opcode) { - status = acpi_ex_store (ret_desc2, operand[3], walk_state); - - /* - * Since the remainder is not returned, remove a reference to - * the object we created earlier - */ - acpi_ut_remove_reference (ret_desc); - *return_desc = ret_desc2; - } - - else { - *return_desc = ret_desc; - } - - -cleanup: - - /* Always delete the operands */ - - acpi_ut_remove_reference (operand[0]); - acpi_ut_remove_reference (operand[1]); - - - /* Delete return object on error */ - - if (ACPI_FAILURE (status)) { - /* On failure, delete the result ops */ - - acpi_ut_remove_reference (operand[2]); - acpi_ut_remove_reference (operand[3]); - - if (ret_desc) { - /* And delete the internal return object */ - - acpi_ut_remove_reference (ret_desc); - ret_desc = NULL; - } - } - - /* Set the return object and exit */ - - return_ACPI_STATUS (status); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_dyadic2_s - * - * PARAMETERS: Opcode - The opcode to be executed - * Walk_state - Current walk state - * Return_desc - Where to store the return object - * - * RETURN: Status - * - * DESCRIPTION: Execute Type 2 dyadic synchronization operator - * - * ALLOCATION: Deletes one operand descriptor -- other remains on stack - * - ******************************************************************************/ - -acpi_status -acpi_ex_dyadic2_s ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc) -{ - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_operand_object *ret_desc = NULL; - acpi_status status; - - - FUNCTION_TRACE_PTR ("Ex_dyadic2_s", WALK_OPERANDS); - - - /* Create the internal return object */ - - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - /* Default return value is FALSE, operation did not time out */ - - ret_desc->integer.value = 0; - - - /* Examine the opcode */ - - switch (opcode) { - - /* Def_acquire := Acquire_op Mutex_object Timeout */ - - case AML_ACQUIRE_OP: - - status = acpi_ex_acquire_mutex (operand[1], operand[0], walk_state); - break; - - - /* Def_wait := Wait_op Acpi_event_object Timeout */ - - case AML_WAIT_OP: - - status = acpi_ex_system_wait_event (operand[1], operand[0]); - break; - - - default: - - REPORT_ERROR (("Acpi_ex_dyadic2_s: Unknown dyadic synchronization opcode %X\n", opcode)); - status = AE_AML_BAD_OPCODE; - goto cleanup; - } - - - /* - * Return a boolean indicating if operation timed out - * (TRUE) or not (FALSE) - */ - if (status == AE_TIME) { - ret_desc->integer.value = ACPI_INTEGER_MAX; /* TRUE, op timed out */ - status = AE_OK; - } - - -cleanup: - - /* Delete params */ - - acpi_ut_remove_reference (operand[1]); - acpi_ut_remove_reference (operand[0]); - - /* Delete return object on error */ - - if (ACPI_FAILURE (status) && - (ret_desc)) { - acpi_ut_remove_reference (ret_desc); - ret_desc = NULL; - } - - - /* Set the return object and exit */ - - *return_desc = ret_desc; - return_ACPI_STATUS (status); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_dyadic2 - * - * PARAMETERS: Opcode - The opcode to be executed - * Walk_state - Current walk state - * Return_desc - Where to store the return object - * - * RETURN: Status - * - * DESCRIPTION: Execute Type 2 dyadic operator with numeric operands and - * no result operands - * - * ALLOCATION: Deletes one operand descriptor -- other remains on stack - * containing result value - * - ******************************************************************************/ - -acpi_status -acpi_ex_dyadic2 ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc) -{ - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_operand_object *ret_desc = NULL; - acpi_status status = AE_OK; - u8 lboolean; - - - FUNCTION_TRACE_PTR ("Ex_dyadic2", WALK_OPERANDS); - - - /* Create the internal return object */ - - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - /* - * Execute the Opcode - */ - lboolean = FALSE; - switch (opcode) { - - /* Def_lAnd := LAnd_op Operand1 Operand2 */ - - case AML_LAND_OP: - - lboolean = (u8) (operand[0]->integer.value && - operand[1]->integer.value); - break; - - - /* Def_lEqual := LEqual_op Operand1 Operand2 */ - - case AML_LEQUAL_OP: - - lboolean = (u8) (operand[0]->integer.value == - operand[1]->integer.value); - break; - - - /* Def_lGreater := LGreater_op Operand1 Operand2 */ - - case AML_LGREATER_OP: - - lboolean = (u8) (operand[0]->integer.value > - operand[1]->integer.value); - break; - - - /* Def_lLess := LLess_op Operand1 Operand2 */ - - case AML_LLESS_OP: - - lboolean = (u8) (operand[0]->integer.value < - operand[1]->integer.value); - break; - - - /* Def_lOr := LOr_op Operand1 Operand2 */ - - case AML_LOR_OP: - - lboolean = (u8) (operand[0]->integer.value || - operand[1]->integer.value); - break; - - - /* Def_copy := Source, Destination */ - - case AML_COPY_OP: /* ACPI 2.0 */ - - status = AE_NOT_IMPLEMENTED; - goto cleanup; - break; - - - default: - - REPORT_ERROR (("Acpi_ex_dyadic2: Unknown dyadic opcode %X\n", opcode)); - status = AE_AML_BAD_OPCODE; - goto cleanup; - break; - } - - - /* Set return value to logical TRUE (all ones) or FALSE (zero) */ - - if (lboolean) { - ret_desc->integer.value = ACPI_INTEGER_MAX; - } - else { - ret_desc->integer.value = 0; - } - - -cleanup: - - /* Always delete operands */ - - acpi_ut_remove_reference (operand[0]); - acpi_ut_remove_reference (operand[1]); - - - /* Delete return object on error */ - - if (ACPI_FAILURE (status) && - (ret_desc)) { - acpi_ut_remove_reference (ret_desc); - ret_desc = NULL; - } - - - /* Set the return object and exit */ - - *return_desc = ret_desc; - return_ACPI_STATUS (status); -} - - diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exfldio.c linux/drivers/acpi/executer/exfldio.c --- v2.4.13/linux/drivers/acpi/executer/exfldio.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exfldio.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: exfldio - Aml Field I/O - * $Revision: 64 $ + * $Revision: 66 $ * *****************************************************************************/ @@ -71,7 +71,6 @@ return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } - /* * If the Region Address and Length have not been previously evaluated, * evaluate them now and save the results. @@ -84,7 +83,6 @@ } } - /* * Validate the request. The entire request from the byte offset for a * length of one field datum (access width) must fit within the region. @@ -158,7 +156,6 @@ *value = 0; - /* * Buffer_fields - Read from a Buffer * Other Fields - Read from a Operation Region. @@ -189,7 +186,6 @@ return_ACPI_STATUS (status); } - /* * The physical address of this field datum is: * @@ -201,13 +197,12 @@ address = rgn_desc->region.address + obj_desc->common_field.base_byte_offset + field_datum_byte_offset; - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Region %s(%X) width %X base:off %X:%X at %8.8lX%8.8lX\n", + ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Region %s(%X) width %X base:off %X:%X at %8.8X%8.8X\n", acpi_ut_get_region_name (rgn_desc->region.space_id), rgn_desc->region.space_id, obj_desc->common_field.access_bit_width, obj_desc->common_field.base_byte_offset, field_datum_byte_offset, HIDWORD(address), LODWORD(address))); - /* Invoke the appropriate Address_space/Op_region handler */ status = acpi_ev_address_space_dispatch (rgn_desc, ACPI_READ_ADR_SPACE, @@ -235,7 +230,7 @@ } - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Returned value=%08lX \n", *value)); + ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Returned value=%08X \n", *value)); return_ACPI_STATUS (status); } @@ -381,7 +376,6 @@ byte_field_length, datum_count, obj_desc->common_field.access_bit_width, obj_desc->common_field.access_byte_width)); - /* * Clear the caller's buffer (the whole buffer length as given) * This is very important, especially in the cases where a byte is read, @@ -485,7 +479,6 @@ } } - /* * Store the merged field datum in the caller's buffer, according to * the granularity of the field (size of each datum). @@ -501,7 +494,6 @@ datum_offset++; } - return_ACPI_STATUS (AE_OK); } @@ -576,7 +568,7 @@ field_datum_byte_offset; ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, - "Store %X in Region %s(%X) at %8.8lX%8.8lX width %X\n", + "Store %X in Region %s(%X) at %8.8X%8.8X width %X\n", value, acpi_ut_get_region_name (rgn_desc->region.space_id), rgn_desc->region.space_id, HIDWORD(address), LODWORD(address), obj_desc->common_field.access_bit_width)); @@ -612,7 +604,7 @@ } - ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Value written=%08lX \n", value)); + ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Value written=%08X \n", value)); return_ACPI_STATUS (status); } @@ -649,16 +641,13 @@ merged_value = field_value; - /* If the mask is all ones, we don't need to worry about the update rule */ if (mask != ACPI_UINT32_MAX) { /* Decode the update rule */ switch (obj_desc->common_field.update_rule) { - case UPDATE_PRESERVE: - /* * Check if update rule needs to be applied (not if mask is all * ones) The left shift drops the bits we want to ignore. @@ -772,7 +761,6 @@ byte_field_length, datum_count, obj_desc->common_field.access_bit_width, obj_desc->common_field.access_byte_width)); - /* * Break the request into up to three parts (similar to an I/O request): * 1) non-aligned part at start @@ -868,31 +856,34 @@ merged_datum = this_raw_datum; } - /* * Special handling for the last datum if the field does NOT end on * a datum boundary. Update Rule must be applied to the bits outside * the field. */ - if ((datum_offset == datum_count) && - obj_desc->common_field.end_field_valid_bits) { + if (datum_offset == datum_count) { /* - * Part3: - * This is the last datum and the field does not end on a datum boundary. - * Build the partial datum and write with the update rule. + * If there are dangling non-aligned bits, perform one more merged write + * Else - field is aligned at the end, no need for any more writes */ + if (obj_desc->common_field.end_field_valid_bits) { + /* + * Part3: + * This is the last datum and the field does not end on a datum boundary. + * Build the partial datum and write with the update rule. + * + * Mask off the unused bits above (after) the end-of-field + */ + mask = MASK_BITS_ABOVE (obj_desc->common_field.end_field_valid_bits); + merged_datum &= mask; - /* Mask off the unused bits above (after) the end-of-field */ - - mask = MASK_BITS_ABOVE (obj_desc->common_field.end_field_valid_bits); - merged_datum &= mask; - - /* Write the last datum with the update rule */ + /* Write the last datum with the update rule */ - status = acpi_ex_write_field_datum_with_update_rule (obj_desc, mask, - merged_datum, field_datum_byte_offset); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); + status = acpi_ex_write_field_datum_with_update_rule (obj_desc, mask, + merged_datum, field_datum_byte_offset); + if (ACPI_FAILURE (status)) { + return_ACPI_STATUS (status); + } } } @@ -912,7 +903,6 @@ */ previous_raw_datum = this_raw_datum; } - return_ACPI_STATUS (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exmisc.c linux/drivers/acpi/executer/exmisc.c --- v2.4.13/linux/drivers/acpi/executer/exmisc.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exmisc.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes - * $Revision: 83 $ + * $Revision: 92 $ * *****************************************************************************/ @@ -38,424 +38,403 @@ /******************************************************************************* * - * FUNCTION: Acpi_ex_triadic + * FUNCTION: Acpi_ex_get_object_reference * - * PARAMETERS: Opcode - The opcode to be executed - * Walk_state - Current walk state - * Return_desc - Where to store the return object + * PARAMETERS: Obj_desc - Create a reference to this object + * Return_desc - Where to store the reference * * RETURN: Status * - * DESCRIPTION: Execute Triadic operator (3 operands) - * - * ALLOCATION: Deletes one operand descriptor -- other remains on stack + * DESCRIPTION: Obtain and return a "reference" to the target object + * Common code for the Ref_of_op and the Cond_ref_of_op. * ******************************************************************************/ acpi_status -acpi_ex_triadic ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc) +acpi_ex_get_object_reference ( + acpi_operand_object *obj_desc, + acpi_operand_object **return_desc, + acpi_walk_state *walk_state) { - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_operand_object *ret_desc = NULL; - acpi_operand_object *tmp_desc; - ACPI_SIGNAL_FATAL_INFO *fatal; acpi_status status = AE_OK; - FUNCTION_TRACE ("Ex_triadic"); - - -#define obj_desc1 operand[0] -#define obj_desc2 operand[1] -#define res_desc operand[2] - - - switch (opcode) { - - case AML_FATAL_OP: - - /* Def_fatal := Fatal_op Fatal_type Fatal_code Fatal_arg */ + FUNCTION_TRACE_PTR ("Ex_get_object_reference", obj_desc); - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "Fatal_op: Type %x Code %x Arg %x <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", - (u32) obj_desc1->integer.value, (u32) obj_desc2->integer.value, - (u32) res_desc->integer.value)); - - fatal = ACPI_MEM_ALLOCATE (sizeof (ACPI_SIGNAL_FATAL_INFO)); - if (fatal) { - fatal->type = (u32) obj_desc1->integer.value; - fatal->code = (u32) obj_desc2->integer.value; - fatal->argument = (u32) res_desc->integer.value; + if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_INTERNAL)) { + if (obj_desc->common.type != INTERNAL_TYPE_REFERENCE) { + *return_desc = NULL; + status = AE_TYPE; + goto cleanup; } /* - * Signal the OS + * Not a Name -- an indirect name pointer would have + * been converted to a direct name pointer in Acpi_ex_resolve_operands */ - acpi_os_signal (ACPI_SIGNAL_FATAL, fatal); - - /* Might return while OS is shutting down */ - - ACPI_MEM_FREE (fatal); - break; - + switch (obj_desc->reference.opcode) { + case AML_LOCAL_OP: + case AML_ARG_OP: - case AML_MID_OP: - - /* Def_mid := Mid_op Source Index Length Result */ - - /* Create the internal return object (string or buffer) */ - - break; - - - case AML_INDEX_OP: - - /* Def_index := Index_op Source Index Destination */ + *return_desc = (void *) acpi_ds_method_data_get_node (obj_desc->reference.opcode, + obj_desc->reference.offset, walk_state); + break; - /* Create the internal return object */ + default: - ret_desc = acpi_ut_create_internal_object (INTERNAL_TYPE_REFERENCE); - if (!ret_desc) { - status = AE_NO_MEMORY; + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "(Internal) Unknown Ref subtype %02x\n", + obj_desc->reference.opcode)); + *return_desc = NULL; + status = AE_AML_INTERNAL; goto cleanup; } - /* - * At this point, the Obj_desc1 operand is either a Package or a Buffer - */ - if (obj_desc1->common.type == ACPI_TYPE_PACKAGE) { - /* Object to be indexed is a Package */ + } - if (obj_desc2->integer.value >= obj_desc1->package.count) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Index value beyond package end\n")); - status = AE_AML_PACKAGE_LIMIT; - goto cleanup; - } - - if ((res_desc->common.type == INTERNAL_TYPE_REFERENCE) && - (res_desc->reference.opcode == AML_ZERO_OP)) { - /* - * There is no actual result descriptor (the Zero_op Result - * descriptor is a placeholder), so just delete the placeholder and - * return a reference to the package element - */ - acpi_ut_remove_reference (res_desc); - } - - else { - /* - * Each element of the package is an internal object. Get the one - * we are after. - */ - tmp_desc = obj_desc1->package.elements[obj_desc2->integer.value]; - ret_desc->reference.opcode = AML_INDEX_OP; - ret_desc->reference.target_type = tmp_desc->common.type; - ret_desc->reference.object = tmp_desc; - - status = acpi_ex_store (ret_desc, res_desc, walk_state); - ret_desc->reference.object = NULL; - } + else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { + /* Must be a named object; Just return the Node */ - /* - * The local return object must always be a reference to the package element, - * not the element itself. - */ - ret_desc->reference.opcode = AML_INDEX_OP; - ret_desc->reference.target_type = ACPI_TYPE_PACKAGE; - ret_desc->reference.where = &obj_desc1->package.elements[obj_desc2->integer.value]; - } - - else { - /* Object to be indexed is a Buffer */ - - if (obj_desc2->integer.value >= obj_desc1->buffer.length) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Index value beyond end of buffer\n")); - status = AE_AML_BUFFER_LIMIT; - goto cleanup; - } - - ret_desc->reference.opcode = AML_INDEX_OP; - ret_desc->reference.target_type = ACPI_TYPE_BUFFER_FIELD; - ret_desc->reference.object = obj_desc1; - ret_desc->reference.offset = (u32) obj_desc2->integer.value; + *return_desc = obj_desc; + } - status = acpi_ex_store (ret_desc, res_desc, walk_state); - } - break; + else { + *return_desc = NULL; + status = AE_TYPE; } cleanup: - /* Always delete operands */ - - acpi_ut_remove_reference (obj_desc1); - acpi_ut_remove_reference (obj_desc2); - - /* Delete return object on error */ - - if (ACPI_FAILURE (status)) { - acpi_ut_remove_reference (res_desc); - - if (ret_desc) { - acpi_ut_remove_reference (ret_desc); - ret_desc = NULL; - } - } - - /* Set the return object and exit */ - - *return_desc = ret_desc; + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p Ref=%p\n", obj_desc, *return_desc)); return_ACPI_STATUS (status); } /******************************************************************************* * - * FUNCTION: Acpi_ex_hexadic + * FUNCTION: Acpi_ex_do_concatenate * - * PARAMETERS: Opcode - The opcode to be executed + * PARAMETERS: *Obj_desc - Object to be converted. Must be an + * Integer, Buffer, or String * Walk_state - Current walk state - * Return_desc - Where to store the return object * * RETURN: Status * - * DESCRIPTION: Execute Match operator + * DESCRIPTION: Concatenate two objects OF THE SAME TYPE. * ******************************************************************************/ acpi_status -acpi_ex_hexadic ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc) +acpi_ex_do_concatenate ( + acpi_operand_object *obj_desc, + acpi_operand_object *obj_desc2, + acpi_operand_object **actual_return_desc, + acpi_walk_state *walk_state) { - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_operand_object *ret_desc = NULL; - acpi_status status = AE_OK; - u32 index; - u32 match_value = (u32) -1; + acpi_status status; + u32 i; + acpi_integer this_integer; + acpi_operand_object *return_desc; + NATIVE_CHAR *new_buf; + u32 integer_size = sizeof (acpi_integer); - FUNCTION_TRACE ("Ex_hexadic"); + FUNCTION_ENTRY (); -#define pkg_desc operand[0] -#define op1_desc operand[1] -#define V1_desc operand[2] -#define op2_desc operand[3] -#define V2_desc operand[4] -#define start_desc operand[5] + /* + * There are three cases to handle: + * 1) Two Integers concatenated to produce a buffer + * 2) Two Strings concatenated to produce a string + * 3) Two Buffers concatenated to produce a buffer + */ + switch (obj_desc->common.type) { + case ACPI_TYPE_INTEGER: - switch (opcode) { + /* Handle both ACPI 1.0 and ACPI 2.0 Integer widths */ - case AML_MATCH_OP: + if (walk_state->method_node->flags & ANOBJ_DATA_WIDTH_32) { + /* + * We are running a method that exists in a 32-bit ACPI table. + * Truncate the value to 32 bits by zeroing out the upper + * 32-bit field + */ + integer_size = sizeof (u32); + } - /* Validate match comparison sub-opcodes */ + /* Result of two integers is a buffer */ - if ((op1_desc->integer.value > MAX_MATCH_OPERATOR) || - (op2_desc->integer.value > MAX_MATCH_OPERATOR)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "operation encoding out of range\n")); - status = AE_AML_OPERAND_VALUE; - goto cleanup; + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER); + if (!return_desc) { + return (AE_NO_MEMORY); } - index = (u32) start_desc->integer.value; - if (index >= (u32) pkg_desc->package.count) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Start position value out of range\n")); - status = AE_AML_PACKAGE_LIMIT; + /* Need enough space for two integers */ + + return_desc->buffer.length = integer_size * 2; + new_buf = ACPI_MEM_CALLOCATE (return_desc->buffer.length); + if (!new_buf) { + REPORT_ERROR + (("Ex_do_concatenate: Buffer allocation failure\n")); + status = AE_NO_MEMORY; goto cleanup; } - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc) { + return_desc->buffer.pointer = (u8 *) new_buf; + + /* Convert the first integer */ + + this_integer = obj_desc->integer.value; + for (i = 0; i < integer_size; i++) { + new_buf[i] = (u8) this_integer; + this_integer >>= 8; + } + + /* Convert the second integer */ + + this_integer = obj_desc2->integer.value; + for (; i < (integer_size * 2); i++) { + new_buf[i] = (u8) this_integer; + this_integer >>= 8; + } + + break; + + + case ACPI_TYPE_STRING: + + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_STRING); + if (!return_desc) { + return (AE_NO_MEMORY); + } + + /* Operand0 is string */ + + new_buf = ACPI_MEM_ALLOCATE (obj_desc->string.length + + obj_desc2->string.length + 1); + if (!new_buf) { + REPORT_ERROR + (("Ex_do_concatenate: String allocation failure\n")); status = AE_NO_MEMORY; goto cleanup; + } + + STRCPY (new_buf, obj_desc->string.pointer); + STRCPY (new_buf + obj_desc->string.length, + obj_desc2->string.pointer); + + /* Point the return object to the new string */ + + return_desc->string.pointer = new_buf; + return_desc->string.length = obj_desc->string.length += + obj_desc2->string.length; + break; + + + case ACPI_TYPE_BUFFER: + + /* Operand0 is a buffer */ + + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER); + if (!return_desc) { + return (AE_NO_MEMORY); + } + new_buf = ACPI_MEM_ALLOCATE (obj_desc->buffer.length + + obj_desc2->buffer.length); + if (!new_buf) { + REPORT_ERROR + (("Ex_do_concatenate: Buffer allocation failure\n")); + status = AE_NO_MEMORY; + goto cleanup; } + MEMCPY (new_buf, obj_desc->buffer.pointer, + obj_desc->buffer.length); + MEMCPY (new_buf + obj_desc->buffer.length, obj_desc2->buffer.pointer, + obj_desc2->buffer.length); + /* - * Examine each element until a match is found. Within the loop, - * "continue" signifies that the current element does not match - * and the next should be examined. - * Upon finding a match, the loop will terminate via "break" at - * the bottom. If it terminates "normally", Match_value will be -1 - * (its initial value) indicating that no match was found. When - * returned as a Number, this will produce the Ones value as specified. + * Point the return object to the new buffer */ - for ( ; index < pkg_desc->package.count; ++index) { - /* - * Treat any NULL or non-numeric elements as non-matching. - * TBD [Unhandled] - if an element is a Name, - * should we examine its value? - */ - if (!pkg_desc->package.elements[index] || - ACPI_TYPE_INTEGER != pkg_desc->package.elements[index]->common.type) { - continue; - } - /* - * Within these switch statements: - * "break" (exit from the switch) signifies a match; - * "continue" (proceed to next iteration of enclosing - * "for" loop) signifies a non-match. - */ - switch (op1_desc->integer.value) { + return_desc->buffer.pointer = (u8 *) new_buf; + return_desc->buffer.length = obj_desc->buffer.length + + obj_desc2->buffer.length; + break; - case MATCH_MTR: /* always true */ - break; + default: + status = AE_AML_INTERNAL; + return_desc = NULL; + } - case MATCH_MEQ: /* true if equal */ + *actual_return_desc = return_desc; + return (AE_OK); - if (pkg_desc->package.elements[index]->integer.value - != V1_desc->integer.value) { - continue; - } - break; +cleanup: - case MATCH_MLE: /* true if less than or equal */ + acpi_ut_remove_reference (return_desc); + return (status); +} - if (pkg_desc->package.elements[index]->integer.value - > V1_desc->integer.value) { - continue; - } - break; +/******************************************************************************* + * + * FUNCTION: Acpi_ex_do_math_op + * + * PARAMETERS: Opcode - AML opcode + * Operand0 - Integer operand #0 + * Operand0 - Integer operand #1 + * + * RETURN: Integer result of the operation + * + * DESCRIPTION: Execute a math AML opcode. The purpose of having all of the + * math functions here is to prevent a lot of pointer dereferencing + * to obtain the operands. + * + ******************************************************************************/ - case MATCH_MLT: /* true if less than */ +acpi_integer +acpi_ex_do_math_op ( + u16 opcode, + acpi_integer operand0, + acpi_integer operand1) +{ - if (pkg_desc->package.elements[index]->integer.value - >= V1_desc->integer.value) { - continue; - } - break; + switch (opcode) { + case AML_ADD_OP: /* Add (Operand0, Operand1, Result) */ - case MATCH_MGE: /* true if greater than or equal */ + return (operand0 + operand1); - if (pkg_desc->package.elements[index]->integer.value - < V1_desc->integer.value) { - continue; - } - break; + case AML_BIT_AND_OP: /* And (Operand0, Operand1, Result) */ - case MATCH_MGT: /* true if greater than */ + return (operand0 & operand1); - if (pkg_desc->package.elements[index]->integer.value - <= V1_desc->integer.value) { - continue; - } - break; + case AML_BIT_NAND_OP: /* NAnd (Operand0, Operand1, Result) */ - default: /* undefined */ + return (~(operand0 & operand1)); - continue; - } + case AML_BIT_OR_OP: /* Or (Operand0, Operand1, Result) */ - switch(op2_desc->integer.value) { + return (operand0 | operand1); - case MATCH_MTR: - break; + case AML_BIT_NOR_OP: /* NOr (Operand0, Operand1, Result) */ + return (~(operand0 | operand1)); - case MATCH_MEQ: - if (pkg_desc->package.elements[index]->integer.value - != V2_desc->integer.value) { - continue; - } - break; + case AML_BIT_XOR_OP: /* XOr (Operand0, Operand1, Result) */ + return (operand0 ^ operand1); - case MATCH_MLE: - if (pkg_desc->package.elements[index]->integer.value - > V2_desc->integer.value) { - continue; - } - break; + case AML_MULTIPLY_OP: /* Multiply (Operand0, Operand1, Result) */ + return (operand0 * operand1); - case MATCH_MLT: - if (pkg_desc->package.elements[index]->integer.value - >= V2_desc->integer.value) { - continue; - } - break; + case AML_SHIFT_LEFT_OP: /* Shift_left (Operand, Shift_count, Result) */ + return (operand0 << operand1); - case MATCH_MGE: - if (pkg_desc->package.elements[index]->integer.value - < V2_desc->integer.value) { - continue; - } - break; + case AML_SHIFT_RIGHT_OP: /* Shift_right (Operand, Shift_count, Result) */ + return (operand0 >> operand1); - case MATCH_MGT: - if (pkg_desc->package.elements[index]->integer.value - <= V2_desc->integer.value) { - continue; - } - break; + case AML_SUBTRACT_OP: /* Subtract (Operand0, Operand1, Result) */ + return (operand0 - operand1); - default: + default: - continue; - } + return (0); + } +} - /* Match found: exit from loop */ - match_value = index; - break; +/******************************************************************************* + * + * FUNCTION: Acpi_ex_do_logical_op + * + * PARAMETERS: Opcode - AML opcode + * Operand0 - Integer operand #0 + * Operand0 - Integer operand #1 + * + * RETURN: TRUE/FALSE result of the operation + * + * DESCRIPTION: Execute a logical AML opcode. The purpose of having all of the + * functions here is to prevent a lot of pointer dereferencing + * to obtain the operands and to simplify the generation of the + * logical value. + * + * Note: cleanest machine code seems to be produced by the code + * below, rather than using statements of the form: + * Result = (Operand0 == Operand1); + * + ******************************************************************************/ + +u8 +acpi_ex_do_logical_op ( + u16 opcode, + acpi_integer operand0, + acpi_integer operand1) +{ + + + switch (opcode) { + + case AML_LAND_OP: /* LAnd (Operand0, Operand1) */ + + if (operand0 && operand1) { + return (TRUE); } + break; - /* Match_value is the return value */ - ret_desc->integer.value = match_value; + case AML_LEQUAL_OP: /* LEqual (Operand0, Operand1) */ + + if (operand0 == operand1) { + return (TRUE); + } break; - } + case AML_LGREATER_OP: /* LGreater (Operand0, Operand1) */ -cleanup: + if (operand0 > operand1) { + return (TRUE); + } + break; - /* Free the operands */ - acpi_ut_remove_reference (start_desc); - acpi_ut_remove_reference (V2_desc); - acpi_ut_remove_reference (op2_desc); - acpi_ut_remove_reference (V1_desc); - acpi_ut_remove_reference (op1_desc); - acpi_ut_remove_reference (pkg_desc); - - - /* Delete return object on error */ - - if (ACPI_FAILURE (status) && - (ret_desc)) { - acpi_ut_remove_reference (ret_desc); - ret_desc = NULL; - } + case AML_LLESS_OP: /* LLess (Operand0, Operand1) */ + if (operand0 < operand1) { + return (TRUE); + } + break; - /* Set the return object and exit */ - *return_desc = ret_desc; - return_ACPI_STATUS (status); + case AML_LOR_OP: /* LOr (Operand0, Operand1) */ + + if (operand0 || operand1) { + return (TRUE); + } + break; + } + + return (FALSE); } + + diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exmonad.c linux/drivers/acpi/executer/exmonad.c --- v2.4.13/linux/drivers/acpi/executer/exmonad.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exmonad.c Wed Dec 31 16:00:00 1969 @@ -1,970 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exmonad - ACPI AML execution for monadic (1 operand) operators - * $Revision: 111 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000, 2001 R. Byron Moore - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - - -#include "acpi.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" -#include "amlcode.h" -#include "acnamesp.h" - - -#define _COMPONENT ACPI_EXECUTER - MODULE_NAME ("exmonad") - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_get_object_reference - * - * PARAMETERS: Obj_desc - Create a reference to this object - * Ret_desc - Where to store the reference - * - * RETURN: Status - * - * DESCRIPTION: Obtain and return a "reference" to the target object - * Common code for the Ref_of_op and the Cond_ref_of_op. - * - ******************************************************************************/ - -static acpi_status -acpi_ex_get_object_reference ( - acpi_operand_object *obj_desc, - acpi_operand_object **ret_desc, - acpi_walk_state *walk_state) -{ - acpi_status status = AE_OK; - - - FUNCTION_TRACE_PTR ("Ex_get_object_reference", obj_desc); - - - if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_INTERNAL)) { - if (obj_desc->common.type != INTERNAL_TYPE_REFERENCE) { - *ret_desc = NULL; - status = AE_TYPE; - goto cleanup; - } - - /* - * Not a Name -- an indirect name pointer would have - * been converted to a direct name pointer in Acpi_ex_resolve_operands - */ - switch (obj_desc->reference.opcode) { - case AML_LOCAL_OP: - case AML_ARG_OP: - - *ret_desc = (void *) acpi_ds_method_data_get_node (obj_desc->reference.opcode, - obj_desc->reference.offset, walk_state); - break; - - default: - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "(Internal) Unknown Ref subtype %02x\n", - obj_desc->reference.opcode)); - *ret_desc = NULL; - status = AE_AML_INTERNAL; - goto cleanup; - } - - } - - else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { - /* Must be a named object; Just return the Node */ - - *ret_desc = obj_desc; - } - - else { - *ret_desc = NULL; - status = AE_TYPE; - } - - -cleanup: - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p Ref=%p\n", obj_desc, *ret_desc)); - return_ACPI_STATUS (status); -} - -#define obj_desc operand[0] -#define res_desc operand[1] - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_monadic1 - * - * PARAMETERS: Opcode - The opcode to be executed - * - * RETURN: Status - * - * DESCRIPTION: Execute Type 1 monadic operator with numeric operand on - * object stack - * - ******************************************************************************/ - -acpi_status -acpi_ex_monadic1 ( - u16 opcode, - acpi_walk_state *walk_state) -{ - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_status status; - - - FUNCTION_TRACE_PTR ("Ex_monadic1", WALK_OPERANDS); - - - /* Examine the opcode */ - - switch (opcode) { - - /* Def_release := Release_op Mutex_object */ - - case AML_RELEASE_OP: - - status = acpi_ex_release_mutex (obj_desc, walk_state); - break; - - - /* Def_reset := Reset_op Acpi_event_object */ - - case AML_RESET_OP: - - status = acpi_ex_system_reset_event (obj_desc); - break; - - - /* Def_signal := Signal_op Acpi_event_object */ - - case AML_SIGNAL_OP: - - status = acpi_ex_system_signal_event (obj_desc); - break; - - - /* Def_sleep := Sleep_op Msec_time */ - - case AML_SLEEP_OP: - - acpi_ex_system_do_suspend ((u32) obj_desc->integer.value); - break; - - - /* Def_stall := Stall_op Usec_time */ - - case AML_STALL_OP: - - acpi_ex_system_do_stall ((u32) obj_desc->integer.value); - break; - - - /* Unknown opcode */ - - default: - - REPORT_ERROR (("Acpi_ex_monadic1: Unknown monadic opcode %X\n", - opcode)); - status = AE_AML_BAD_OPCODE; - break; - - } /* switch */ - - - /* Always delete the operand */ - - acpi_ut_remove_reference (obj_desc); - - return_ACPI_STATUS (AE_OK); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_monadic2_r - * - * PARAMETERS: Opcode - The opcode to be executed - * - * RETURN: Status - * - * DESCRIPTION: Execute Type 2 monadic operator with numeric operand and - * result operand on operand stack - * - ******************************************************************************/ - -acpi_status -acpi_ex_monadic2_r ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc) -{ - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_operand_object *ret_desc = NULL; - acpi_operand_object *ret_desc2 = NULL; - u32 res_val; - acpi_status status = AE_OK; - u32 i; - u32 j; - acpi_integer digit; - - - FUNCTION_TRACE_PTR ("Ex_monadic2_r", WALK_OPERANDS); - - - /* Create a return object of type NUMBER for most opcodes */ - - switch (opcode) { - case AML_BIT_NOT_OP: - case AML_FIND_SET_LEFT_BIT_OP: - case AML_FIND_SET_RIGHT_BIT_OP: - case AML_FROM_BCD_OP: - case AML_TO_BCD_OP: - case AML_COND_REF_OF_OP: - - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - break; - } - - - switch (opcode) { - /* Def_not := Not_op Operand Result */ - - case AML_BIT_NOT_OP: - - ret_desc->integer.value = ~obj_desc->integer.value; - break; - - - /* Def_find_set_left_bit := Find_set_left_bit_op Operand Result */ - - case AML_FIND_SET_LEFT_BIT_OP: - - ret_desc->integer.value = obj_desc->integer.value; - - /* - * Acpi specification describes Integer type as a little - * endian unsigned value, so this boundary condition is valid. - */ - for (res_val = 0; ret_desc->integer.value && res_val < ACPI_INTEGER_BIT_SIZE; ++res_val) { - ret_desc->integer.value >>= 1; - } - - ret_desc->integer.value = res_val; - break; - - - /* Def_find_set_right_bit := Find_set_right_bit_op Operand Result */ - - case AML_FIND_SET_RIGHT_BIT_OP: - - ret_desc->integer.value = obj_desc->integer.value; - - /* - * Acpi specification describes Integer type as a little - * endian unsigned value, so this boundary condition is valid. - */ - for (res_val = 0; ret_desc->integer.value && res_val < ACPI_INTEGER_BIT_SIZE; ++res_val) { - ret_desc->integer.value <<= 1; - } - - /* Since returns must be 1-based, subtract from 33 (65) */ - - ret_desc->integer.value = res_val == 0 ? 0 : (ACPI_INTEGER_BIT_SIZE + 1) - res_val; - break; - - - /* Def_from_bDC := From_bCDOp BCDValue Result */ - - case AML_FROM_BCD_OP: - - /* - * The 64-bit ACPI integer can hold 16 4-bit BCD integers - */ - ret_desc->integer.value = 0; - for (i = 0; i < ACPI_MAX_BCD_DIGITS; i++) { - /* Get one BCD digit */ - - digit = (acpi_integer) ((obj_desc->integer.value >> (i * 4)) & 0xF); - - /* Check the range of the digit */ - - if (digit > 9) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "BCD digit too large: \n", - digit)); - status = AE_AML_NUMERIC_OVERFLOW; - goto cleanup; - } - - if (digit > 0) { - /* Sum into the result with the appropriate power of 10 */ - - for (j = 0; j < i; j++) { - digit *= 10; - } - - ret_desc->integer.value += digit; - } - } - break; - - - /* Def_to_bDC := To_bCDOp Operand Result */ - - case AML_TO_BCD_OP: - - - if (obj_desc->integer.value > ACPI_MAX_BCD_VALUE) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "BCD overflow: %d\n", - obj_desc->integer.value)); - status = AE_AML_NUMERIC_OVERFLOW; - goto cleanup; - } - - ret_desc->integer.value = 0; - for (i = 0; i < ACPI_MAX_BCD_DIGITS; i++) { - /* Divide by nth factor of 10 */ - - digit = obj_desc->integer.value; - for (j = 0; j < i; j++) { - digit = ACPI_DIVIDE (digit, 10); - } - - /* Create the BCD digit */ - - if (digit > 0) { - ret_desc->integer.value += (ACPI_MODULO (digit, 10) << (i * 4)); - } - } - break; - - - /* Def_cond_ref_of := Cond_ref_of_op Source_object Result */ - - case AML_COND_REF_OF_OP: - - /* - * This op is a little strange because the internal return value is - * different than the return value stored in the result descriptor - * (There are really two return values) - */ - if ((acpi_namespace_node *) obj_desc == acpi_gbl_root_node) { - /* - * This means that the object does not exist in the namespace, - * return FALSE - */ - ret_desc->integer.value = 0; - - /* - * Must delete the result descriptor since there is no reference - * being returned - */ - acpi_ut_remove_reference (res_desc); - goto cleanup; - } - - /* Get the object reference and store it */ - - status = acpi_ex_get_object_reference (obj_desc, &ret_desc2, walk_state); - if (ACPI_FAILURE (status)) { - goto cleanup; - } - - status = acpi_ex_store (ret_desc2, res_desc, walk_state); - - /* The object exists in the namespace, return TRUE */ - - ret_desc->integer.value = ACPI_INTEGER_MAX; - goto cleanup; - break; - - - case AML_STORE_OP: - - /* - * A store operand is typically a number, string, buffer or lvalue - * TBD: [Unhandled] What about a store to a package? - */ - - /* - * Do the store, and be careful about deleting the source object, - * since the object itself may have been stored. - */ - status = acpi_ex_store (obj_desc, res_desc, walk_state); - if (ACPI_FAILURE (status)) { - /* On failure, just delete the Obj_desc */ - - acpi_ut_remove_reference (obj_desc); - return_ACPI_STATUS (status); - } - - /* - * Normally, we would remove a reference on the Obj_desc parameter; - * But since it is being used as the internal return object - * (meaning we would normally increment it), the two cancel out, - * and we simply don't do anything. - */ - *return_desc = obj_desc; - return_ACPI_STATUS (status); - break; - - - case AML_DEBUG_OP: - - /* Reference, returning an Reference */ - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Debug_op should never get here!\n")); - return_ACPI_STATUS (AE_OK); - break; - - - /* - * ACPI 2.0 Opcodes - */ - case AML_TO_DECSTRING_OP: - status = acpi_ex_convert_to_string (obj_desc, &ret_desc, 10, ACPI_UINT32_MAX, walk_state); - break; - - - case AML_TO_HEXSTRING_OP: - status = acpi_ex_convert_to_string (obj_desc, &ret_desc, 16, ACPI_UINT32_MAX, walk_state); - break; - - case AML_TO_BUFFER_OP: - status = acpi_ex_convert_to_buffer (obj_desc, &ret_desc, walk_state); - break; - - case AML_TO_INTEGER_OP: - status = acpi_ex_convert_to_integer (obj_desc, &ret_desc, walk_state); - break; - - - /* - * These are obsolete opcodes - */ - - /* Def_shift_left_bit := Shift_left_bit_op Source Bit_num */ - /* Def_shift_right_bit := Shift_right_bit_op Source Bit_num */ - - case AML_SHIFT_LEFT_BIT_OP: - case AML_SHIFT_RIGHT_BIT_OP: - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s is unimplemented\n", - acpi_ps_get_opcode_name (opcode))); - status = AE_SUPPORT; - goto cleanup; - break; - - - default: - - REPORT_ERROR (("Acpi_ex_monadic2_r: Unknown monadic opcode %X\n", - opcode)); - status = AE_AML_BAD_OPCODE; - goto cleanup; - } - - - status = acpi_ex_store (ret_desc, res_desc, walk_state); - - -cleanup: - /* Always delete the operand object */ - - acpi_ut_remove_reference (obj_desc); - - /* Delete return object(s) on error */ - - if (ACPI_FAILURE (status)) { - acpi_ut_remove_reference (res_desc); /* Result descriptor */ - if (ret_desc) { - acpi_ut_remove_reference (ret_desc); - ret_desc = NULL; - } - } - - /* Set the return object and exit */ - - *return_desc = ret_desc; - return_ACPI_STATUS (status); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_monadic2 - * - * PARAMETERS: Opcode - The opcode to be executed - * - * RETURN: Status - * - * DESCRIPTION: Execute Type 2 monadic operator with numeric operand: - * Deref_of_op, Ref_of_op, Size_of_op, Type_op, Increment_op, - * Decrement_op, LNot_op, - * - ******************************************************************************/ - -acpi_status -acpi_ex_monadic2 ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc) -{ - acpi_operand_object **operand = &walk_state->operands[0]; - acpi_operand_object *tmp_desc; - acpi_operand_object *ret_desc = NULL; - acpi_status status = AE_OK; - u32 type; - acpi_integer value; - - - FUNCTION_TRACE_PTR ("Ex_monadic2", WALK_OPERANDS); - - - /* Get the operand and decode the opcode */ - - switch (opcode) { - - /* Def_lNot := LNot_op Operand */ - - case AML_LNOT_OP: - - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - ret_desc->integer.value = !obj_desc->integer.value; - break; - - - /* Def_decrement := Decrement_op Target */ - /* Def_increment := Increment_op Target */ - - case AML_DECREMENT_OP: - case AML_INCREMENT_OP: - - /* - * Since we are expecting an Reference on the top of the stack, it - * can be either an Node or an internal object. - * - * TBD: [Future] This may be the prototype code for all cases where - * a Reference is expected!! 10/99 - */ - if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { - ret_desc = obj_desc; - } - - else { - /* - * Duplicate the Reference in a new object so that we can resolve it - * without destroying the original Reference object - */ - ret_desc = acpi_ut_create_internal_object (INTERNAL_TYPE_REFERENCE); - if (!ret_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - ret_desc->reference.opcode = obj_desc->reference.opcode; - ret_desc->reference.offset = obj_desc->reference.offset; - ret_desc->reference.object = obj_desc->reference.object; - } - - - /* - * Convert the Ret_desc Reference to a Number - * (This deletes the original Ret_desc) - */ - status = acpi_ex_resolve_operands (AML_LNOT_OP, &ret_desc, walk_state); - if (ACPI_FAILURE (status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s: bad operand(s) %s\n", - acpi_ps_get_opcode_name (opcode), acpi_format_exception(status))); - - goto cleanup; - } - - /* Do the actual increment or decrement */ - - if (AML_INCREMENT_OP == opcode) { - ret_desc->integer.value++; - } - else { - ret_desc->integer.value--; - } - - /* Store the result back in the original descriptor */ - - status = acpi_ex_store (ret_desc, obj_desc, walk_state); - - /* Objdesc was just deleted (because it is an Reference) */ - - obj_desc = NULL; - - break; - - - /* Def_object_type := Object_type_op Source_object */ - - case AML_TYPE_OP: - - if (INTERNAL_TYPE_REFERENCE == obj_desc->common.type) { - /* - * Not a Name -- an indirect name pointer would have - * been converted to a direct name pointer in Resolve_operands - */ - switch (obj_desc->reference.opcode) { - case AML_ZERO_OP: - case AML_ONE_OP: - case AML_ONES_OP: - case AML_REVISION_OP: - - /* Constants are of type Number */ - - type = ACPI_TYPE_INTEGER; - break; - - - case AML_DEBUG_OP: - - /* Per 1.0b spec, Debug object is of type Debug_object */ - - type = ACPI_TYPE_DEBUG_OBJECT; - break; - - - case AML_INDEX_OP: - - /* Get the type of this reference (index into another object) */ - - type = obj_desc->reference.target_type; - if (type == ACPI_TYPE_PACKAGE) { - /* - * The main object is a package, we want to get the type - * of the individual package element that is referenced by - * the index. - */ - type = (*(obj_desc->reference.where))->common.type; - } - - break; - - - case AML_LOCAL_OP: - case AML_ARG_OP: - - type = acpi_ds_method_data_get_type (obj_desc->reference.opcode, - obj_desc->reference.offset, walk_state); - break; - - - default: - - REPORT_ERROR (("Acpi_ex_monadic2/Type_op: Internal error - Unknown Reference subtype %X\n", - obj_desc->reference.opcode)); - status = AE_AML_INTERNAL; - goto cleanup; - } - } - - else { - /* - * It's not a Reference, so it must be a direct name pointer. - */ - type = acpi_ns_get_type ((acpi_namespace_node *) obj_desc); - - /* Convert internal types to external types */ - - switch (type) { - case INTERNAL_TYPE_REGION_FIELD: - case INTERNAL_TYPE_BANK_FIELD: - case INTERNAL_TYPE_INDEX_FIELD: - - type = ACPI_TYPE_FIELD_UNIT; - } - - } - - /* Allocate a descriptor to hold the type. */ - - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - ret_desc->integer.value = type; - break; - - - /* Def_size_of := Size_of_op Source_object */ - - case AML_SIZE_OF_OP: - - if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { - obj_desc = acpi_ns_get_attached_object ((acpi_namespace_node *) obj_desc); - } - - if (!obj_desc) { - value = 0; - } - - else { - switch (obj_desc->common.type) { - - case ACPI_TYPE_BUFFER: - - value = obj_desc->buffer.length; - break; - - - case ACPI_TYPE_STRING: - - value = obj_desc->string.length; - break; - - - case ACPI_TYPE_PACKAGE: - - value = obj_desc->package.count; - break; - - case INTERNAL_TYPE_REFERENCE: - - value = 4; - break; - - default: - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Not Buf/Str/Pkg - found type %X\n", - obj_desc->common.type)); - status = AE_AML_OPERAND_TYPE; - goto cleanup; - } - } - - /* - * Now that we have the size of the object, create a result - * object to hold the value - */ - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - ret_desc->integer.value = value; - break; - - - /* Def_ref_of := Ref_of_op Source_object */ - - case AML_REF_OF_OP: - - status = acpi_ex_get_object_reference (obj_desc, &ret_desc, walk_state); - if (ACPI_FAILURE (status)) { - goto cleanup; - } - break; - - - /* Def_deref_of := Deref_of_op Obj_reference */ - - case AML_DEREF_OF_OP: - - - /* Check for a method local or argument */ - - if (!VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { - /* - * Must resolve/dereference the local/arg reference first - */ - switch (obj_desc->reference.opcode) { - /* Set Obj_desc to the value of the local/arg */ - - case AML_LOCAL_OP: - case AML_ARG_OP: - - acpi_ds_method_data_get_value (obj_desc->reference.opcode, - obj_desc->reference.offset, walk_state, &tmp_desc); - - /* - * Delete our reference to the input object and - * point to the object just retrieved - */ - acpi_ut_remove_reference (obj_desc); - obj_desc = tmp_desc; - break; - - default: - - /* Index op - handled below */ - break; - } - } - - - /* Obj_desc may have changed from the code above */ - - if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { - /* Get the actual object from the Node (This is the dereference) */ - - ret_desc = ((acpi_namespace_node *) obj_desc)->object; - - /* Returning a pointer to the object, add another reference! */ - - acpi_ut_add_reference (ret_desc); - } - - else { - /* - * This must be a reference object produced by the Index - * ASL operation -- check internal opcode - */ - if ((obj_desc->reference.opcode != AML_INDEX_OP) && - (obj_desc->reference.opcode != AML_REF_OF_OP)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown opcode in ref(%p) - %X\n", - obj_desc, obj_desc->reference.opcode)); - - status = AE_TYPE; - goto cleanup; - } - - - switch (obj_desc->reference.opcode) { - case AML_INDEX_OP: - - /* - * Supported target types for the Index operator are - * 1) A Buffer - * 2) A Package - */ - if (obj_desc->reference.target_type == ACPI_TYPE_BUFFER_FIELD) { - /* - * The target is a buffer, we must create a new object that - * contains one element of the buffer, the element pointed - * to by the index. - * - * NOTE: index into a buffer is NOT a pointer to a - * sub-buffer of the main buffer, it is only a pointer to a - * single element (byte) of the buffer! - */ - ret_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); - if (!ret_desc) { - status = AE_NO_MEMORY; - goto cleanup; - } - - tmp_desc = obj_desc->reference.object; - ret_desc->integer.value = - tmp_desc->buffer.pointer[obj_desc->reference.offset]; - - /* TBD: [Investigate] (see below) Don't add an additional - * ref! - */ - } - - else if (obj_desc->reference.target_type == ACPI_TYPE_PACKAGE) { - /* - * The target is a package, we want to return the referenced - * element of the package. We must add another reference to - * this object, however. - */ - ret_desc = *(obj_desc->reference.where); - if (!ret_desc) { - /* - * We can't return a NULL dereferenced value. This is - * an uninitialized package element and is thus a - * severe error. - */ - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "NULL package element obj %p\n", - obj_desc)); - status = AE_AML_UNINITIALIZED_ELEMENT; - goto cleanup; - } - - acpi_ut_add_reference (ret_desc); - } - - else { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Target_type %X in obj %p\n", - obj_desc->reference.target_type, obj_desc)); - status = AE_AML_OPERAND_TYPE; - goto cleanup; - } - - break; - - - case AML_REF_OF_OP: - - ret_desc = obj_desc->reference.object; - - /* Add another reference to the object! */ - - acpi_ut_add_reference (ret_desc); - break; - } - } - - break; - - - default: - - REPORT_ERROR (("Acpi_ex_monadic2: Unknown monadic opcode %X\n", - opcode)); - status = AE_AML_BAD_OPCODE; - goto cleanup; - } - - -cleanup: - - if (obj_desc) { - acpi_ut_remove_reference (obj_desc); - } - - /* Delete return object on error */ - - if (ACPI_FAILURE (status) && - (ret_desc)) { - acpi_ut_remove_reference (ret_desc); - ret_desc = NULL; - } - - *return_desc = ret_desc; - return_ACPI_STATUS (status); -} - diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exoparg1.c linux/drivers/acpi/executer/exoparg1.c --- v2.4.13/linux/drivers/acpi/executer/exoparg1.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/acpi/executer/exoparg1.c Wed Oct 24 14:06:22 2001 @@ -0,0 +1,878 @@ + +/****************************************************************************** + * + * Module Name: exoparg1 - AML execution - opcodes with 1 argument + * $Revision: 120 $ + * + *****************************************************************************/ + +/* + * Copyright (C) 2000, 2001 R. Byron Moore + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "acpi.h" +#include "acparser.h" +#include "acdispat.h" +#include "acinterp.h" +#include "amlcode.h" +#include "acnamesp.h" + + +#define _COMPONENT ACPI_EXECUTER + MODULE_NAME ("exoparg1") + + +/*! + * Naming convention for AML interpreter execution routines. + * + * The routines that begin execution of AML opcodes are named with a common + * convention based upon the number of arguments, the number of target operands, + * and whether or not a value is returned: + * + * AcpiExOpcode_xA_yT_zR + * + * Where: + * + * xA - ARGUMENTS: The number of arguments (input operands) that are + * required for this opcode type (1 through 6 args). + * yT - TARGETS: The number of targets (output operands) that are required + * for this opcode type (0, 1, or 2 targets). + * zR - RETURN VALUE: Indicates whether this opcode type returns a value + * as the function return (0 or 1). + * + * The AcpiExOpcode* functions are called via the Dispatcher component with + * fully resolved operands. +!*/ + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_1A_0T_0R + * + * PARAMETERS: Walk_state - Current state (contains AML opcode) + * + * RETURN: Status + * + * DESCRIPTION: Execute Type 1 monadic operator with numeric operand on + * object stack + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_1A_0T_0R ( + acpi_walk_state *walk_state) +{ + acpi_operand_object **operand = &walk_state->operands[0]; + acpi_status status = AE_OK; + + + FUNCTION_TRACE_STR ("Ex_opcode_1A_0T_0R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + /* Examine the opcode */ + + switch (walk_state->opcode) { + case AML_RELEASE_OP: /* Release (Mutex_object) */ + + status = acpi_ex_release_mutex (operand[0], walk_state); + break; + + + case AML_RESET_OP: /* Reset (Event_object) */ + + status = acpi_ex_system_reset_event (operand[0]); + break; + + + case AML_SIGNAL_OP: /* Signal (Event_object) */ + + status = acpi_ex_system_signal_event (operand[0]); + break; + + + case AML_SLEEP_OP: /* Sleep (Msec_time) */ + + acpi_ex_system_do_suspend ((u32) operand[0]->integer.value); + break; + + + case AML_STALL_OP: /* Stall (Usec_time) */ + + acpi_ex_system_do_stall ((u32) operand[0]->integer.value); + break; + + + case AML_UNLOAD_OP: /* Unload (Handle) */ + + status = acpi_ex_unload_table (operand[0]); + break; + + + default: /* Unknown opcode */ + + REPORT_ERROR (("Acpi_ex_opcode_1A_0T_0R: Unknown opcode %X\n", + walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + break; + } + + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_1A_1T_0R + * + * PARAMETERS: Walk_state - Current state (contains AML opcode) + * + * RETURN: Status + * + * DESCRIPTION: Execute opcode with one argument, one target, and no + * return value. + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_1A_1T_0R ( + acpi_walk_state *walk_state) +{ + acpi_status status = AE_OK; + acpi_operand_object **operand = &walk_state->operands[0]; + + + FUNCTION_TRACE_STR ("Ex_opcode_1A_1T_0R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + switch (walk_state->opcode) { + + case AML_LOAD_OP: + + status = acpi_ex_load_op (operand[0], operand[1]); + break; + + default: /* Unknown opcode */ + + REPORT_ERROR (("Acpi_ex_opcode_1A_1T_0R: Unknown opcode %X\n", + walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + goto cleanup; + } + + +cleanup: + + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_1A_1T_1R + * + * PARAMETERS: Walk_state - Current state (contains AML opcode) + * + * RETURN: Status + * + * DESCRIPTION: Execute opcode with one argument, one target, and a + * return value. + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_1A_1T_1R ( + acpi_walk_state *walk_state) +{ + acpi_status status = AE_OK; + acpi_operand_object **operand = &walk_state->operands[0]; + acpi_operand_object *return_desc = NULL; + acpi_operand_object *return_desc2 = NULL; + u32 temp32; + u32 i; + u32 j; + acpi_integer digit; + + + FUNCTION_TRACE_STR ("Ex_opcode_1A_1T_1R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + /* Create a return object of type Integer for most opcodes */ + + switch (walk_state->opcode) { + case AML_BIT_NOT_OP: + case AML_FIND_SET_LEFT_BIT_OP: + case AML_FIND_SET_RIGHT_BIT_OP: + case AML_FROM_BCD_OP: + case AML_TO_BCD_OP: + case AML_COND_REF_OF_OP: + + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + break; + } + + + switch (walk_state->opcode) { + + case AML_BIT_NOT_OP: /* Not (Operand, Result) */ + + return_desc->integer.value = ~operand[0]->integer.value; + break; + + + case AML_FIND_SET_LEFT_BIT_OP: /* Find_set_left_bit (Operand, Result) */ + + + return_desc->integer.value = operand[0]->integer.value; + + /* + * Acpi specification describes Integer type as a little + * endian unsigned value, so this boundary condition is valid. + */ + for (temp32 = 0; return_desc->integer.value && temp32 < ACPI_INTEGER_BIT_SIZE; ++temp32) { + return_desc->integer.value >>= 1; + } + + return_desc->integer.value = temp32; + break; + + + case AML_FIND_SET_RIGHT_BIT_OP: /* Find_set_right_bit (Operand, Result) */ + + + return_desc->integer.value = operand[0]->integer.value; + + /* + * The Acpi specification describes Integer type as a little + * endian unsigned value, so this boundary condition is valid. + */ + for (temp32 = 0; return_desc->integer.value && temp32 < ACPI_INTEGER_BIT_SIZE; ++temp32) { + return_desc->integer.value <<= 1; + } + + /* Since the bit position is one-based, subtract from 33 (65) */ + + return_desc->integer.value = temp32 == 0 ? 0 : (ACPI_INTEGER_BIT_SIZE + 1) - temp32; + break; + + + case AML_FROM_BCD_OP: /* From_bcd (BCDValue, Result) */ + + /* + * The 64-bit ACPI integer can hold 16 4-bit BCD integers + */ + return_desc->integer.value = 0; + for (i = 0; i < ACPI_MAX_BCD_DIGITS; i++) { + /* Get one BCD digit */ + + digit = (acpi_integer) ((operand[0]->integer.value >> (i * 4)) & 0xF); + + /* Check the range of the digit */ + + if (digit > 9) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "BCD digit too large: %d\n", + (u32) digit)); + status = AE_AML_NUMERIC_OVERFLOW; + goto cleanup; + } + + if (digit > 0) { + /* Sum into the result with the appropriate power of 10 */ + + for (j = 0; j < i; j++) { + digit *= 10; + } + + return_desc->integer.value += digit; + } + } + break; + + + case AML_TO_BCD_OP: /* To_bcd (Operand, Result) */ + + if (operand[0]->integer.value > ACPI_MAX_BCD_VALUE) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "BCD overflow: %8.8X%8.8X\n", + HIDWORD(operand[0]->integer.value), LODWORD(operand[0]->integer.value))); + status = AE_AML_NUMERIC_OVERFLOW; + goto cleanup; + } + + return_desc->integer.value = 0; + for (i = 0; i < ACPI_MAX_BCD_DIGITS; i++) { + /* Divide by nth factor of 10 */ + + temp32 = 0; + digit = operand[0]->integer.value; + for (j = 0; j < i; j++) { + acpi_ut_short_divide (&digit, 10, &digit, &temp32); + } + + /* Create the BCD digit from the remainder above */ + + if (digit > 0) { + return_desc->integer.value += (temp32 << (i * 4)); + } + } + break; + + + case AML_COND_REF_OF_OP: /* Cond_ref_of (Source_object, Result) */ + + /* + * This op is a little strange because the internal return value is + * different than the return value stored in the result descriptor + * (There are really two return values) + */ + if ((acpi_namespace_node *) operand[0] == acpi_gbl_root_node) { + /* + * This means that the object does not exist in the namespace, + * return FALSE + */ + return_desc->integer.value = 0; + + /* + * Must delete the result descriptor since there is no reference + * being returned + */ + acpi_ut_remove_reference (operand[1]); + goto cleanup; + } + + /* Get the object reference and store it */ + + status = acpi_ex_get_object_reference (operand[0], &return_desc2, walk_state); + if (ACPI_FAILURE (status)) { + goto cleanup; + } + + status = acpi_ex_store (return_desc2, operand[1], walk_state); + + /* The object exists in the namespace, return TRUE */ + + return_desc->integer.value = ACPI_INTEGER_MAX; + goto cleanup; + break; + + + case AML_STORE_OP: /* Store (Source, Target) */ + + /* + * A store operand is typically a number, string, buffer or lvalue + * Be careful about deleting the source object, + * since the object itself may have been stored. + */ + status = acpi_ex_store (operand[0], operand[1], walk_state); + if (ACPI_FAILURE (status)) { + return_ACPI_STATUS (status); + } + + /* + * Normally, we would remove a reference on the Operand[0] parameter; + * But since it is being used as the internal return object + * (meaning we would normally increment it), the two cancel out, + * and we simply don't do anything. + */ + walk_state->result_obj = operand[0]; + walk_state->operands[0] = NULL; /* Prevent deletion */ + return_ACPI_STATUS (status); + break; + + + /* + * ACPI 2.0 Opcodes + */ + case AML_COPY_OP: /* Copy (Source, Target) */ + + status = AE_NOT_IMPLEMENTED; + goto cleanup; + break; + + + case AML_TO_DECSTRING_OP: /* To_decimal_string (Data, Result) */ + + status = acpi_ex_convert_to_string (operand[0], &return_desc, 10, ACPI_UINT32_MAX, walk_state); + break; + + + case AML_TO_HEXSTRING_OP: /* To_hex_string (Data, Result) */ + + status = acpi_ex_convert_to_string (operand[0], &return_desc, 16, ACPI_UINT32_MAX, walk_state); + break; + + + case AML_TO_BUFFER_OP: /* To_buffer (Data, Result) */ + + status = acpi_ex_convert_to_buffer (operand[0], &return_desc, walk_state); + break; + + + case AML_TO_INTEGER_OP: /* To_integer (Data, Result) */ + + status = acpi_ex_convert_to_integer (operand[0], &return_desc, walk_state); + break; + + + /* + * These are two obsolete opcodes + */ + case AML_SHIFT_LEFT_BIT_OP: /* Shift_left_bit (Source, Bit_num) */ + case AML_SHIFT_RIGHT_BIT_OP: /* Shift_right_bit (Source, Bit_num) */ + + + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s is obsolete and not implemented\n", + acpi_ps_get_opcode_name (walk_state->opcode))); + status = AE_SUPPORT; + goto cleanup; + break; + + + default: /* Unknown opcode */ + + REPORT_ERROR (("Acpi_ex_opcode_1A_1T_1R: Unknown opcode %X\n", + walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + goto cleanup; + } + + + /* + * Store the return value computed above into the target object + */ + status = acpi_ex_store (return_desc, operand[1], walk_state); + + +cleanup: + + walk_state->result_obj = return_desc; + + /* Delete return object on error */ + + if (ACPI_FAILURE (status)) { + acpi_ut_remove_reference (return_desc); + } + + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_1A_0T_1R + * + * PARAMETERS: Walk_state - Current state (contains AML opcode) + * + * RETURN: Status + * + * DESCRIPTION: Execute opcode with one argument, no target, and a return value + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_1A_0T_1R ( + acpi_walk_state *walk_state) +{ + acpi_operand_object **operand = &walk_state->operands[0]; + acpi_operand_object *temp_desc; + acpi_operand_object *return_desc = NULL; + acpi_status status = AE_OK; + u32 type; + acpi_integer value; + + + FUNCTION_TRACE_STR ("Ex_opcode_1A_0T_0R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + /* Get the operand and decode the opcode */ + + switch (walk_state->opcode) { + + case AML_LNOT_OP: /* LNot (Operand) */ + + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + return_desc->integer.value = !operand[0]->integer.value; + break; + + + case AML_DECREMENT_OP: /* Decrement (Operand) */ + case AML_INCREMENT_OP: /* Increment (Operand) */ + + /* + * Since we are expecting a Reference operand, it + * can be either a Node or an internal object. + */ + return_desc = operand[0]; + if (VALID_DESCRIPTOR_TYPE (operand[0], ACPI_DESC_TYPE_INTERNAL)) { + /* Internal reference object - prevent deletion */ + + acpi_ut_add_reference (return_desc); + } + + /* + * Convert the Return_desc Reference to a Number + * (This removes a reference on the Return_desc object) + */ + status = acpi_ex_resolve_operands (AML_LNOT_OP, &return_desc, walk_state); + if (ACPI_FAILURE (status)) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s: bad operand(s) %s\n", + acpi_ps_get_opcode_name (walk_state->opcode), acpi_format_exception(status))); + + goto cleanup; + } + + /* + * Return_desc is now guaranteed to be an Integer object + * Do the actual increment or decrement + */ + if (AML_INCREMENT_OP == walk_state->opcode) { + return_desc->integer.value++; + } + else { + return_desc->integer.value--; + } + + /* Store the result back in the original descriptor */ + + status = acpi_ex_store (return_desc, operand[0], walk_state); + break; + + + case AML_TYPE_OP: /* Object_type (Source_object) */ + + if (INTERNAL_TYPE_REFERENCE == operand[0]->common.type) { + /* + * Not a Name -- an indirect name pointer would have + * been converted to a direct name pointer in Resolve_operands + */ + switch (operand[0]->reference.opcode) { + case AML_ZERO_OP: + case AML_ONE_OP: + case AML_ONES_OP: + case AML_REVISION_OP: + + /* Constants are of type Integer */ + + type = ACPI_TYPE_INTEGER; + break; + + + case AML_DEBUG_OP: + + /* Per 1.0b spec, Debug object is of type "Debug_object" */ + + type = ACPI_TYPE_DEBUG_OBJECT; + break; + + + case AML_INDEX_OP: + + /* Get the type of this reference (index into another object) */ + + type = operand[0]->reference.target_type; + if (type == ACPI_TYPE_PACKAGE) { + /* + * The main object is a package, we want to get the type + * of the individual package element that is referenced by + * the index. + */ + type = (*(operand[0]->reference.where))->common.type; + } + + break; + + + case AML_LOCAL_OP: + case AML_ARG_OP: + + type = acpi_ds_method_data_get_type (operand[0]->reference.opcode, + operand[0]->reference.offset, walk_state); + break; + + + default: + + REPORT_ERROR (("Acpi_ex_opcode_1A_0T_1R/Type_op: Internal error - Unknown Reference subtype %X\n", + operand[0]->reference.opcode)); + status = AE_AML_INTERNAL; + goto cleanup; + } + } + + else { + /* + * It's not a Reference, so it must be a direct name pointer. + */ + type = acpi_ns_get_type ((acpi_namespace_node *) operand[0]); + + /* Convert internal types to external types */ + + switch (type) { + case INTERNAL_TYPE_REGION_FIELD: + case INTERNAL_TYPE_BANK_FIELD: + case INTERNAL_TYPE_INDEX_FIELD: + + type = ACPI_TYPE_FIELD_UNIT; + } + + } + + /* Allocate a descriptor to hold the type. */ + + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + return_desc->integer.value = type; + break; + + + case AML_SIZE_OF_OP: /* Size_of (Source_object) */ + + temp_desc = operand[0]; + if (VALID_DESCRIPTOR_TYPE (operand[0], ACPI_DESC_TYPE_NAMED)) { + temp_desc = acpi_ns_get_attached_object ((acpi_namespace_node *) operand[0]); + } + + if (!temp_desc) { + value = 0; + } + + else { + switch (temp_desc->common.type) { + case ACPI_TYPE_BUFFER: + value = temp_desc->buffer.length; + break; + + case ACPI_TYPE_STRING: + value = temp_desc->string.length; + break; + + case ACPI_TYPE_PACKAGE: + value = temp_desc->package.count; + break; + + case INTERNAL_TYPE_REFERENCE: + + /* TBD: this must be a reference to a buf/str/pkg?? */ + + value = 4; + break; + + default: + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Not Buf/Str/Pkg - found type %X\n", + temp_desc->common.type)); + status = AE_AML_OPERAND_TYPE; + goto cleanup; + } + } + + /* + * Now that we have the size of the object, create a result + * object to hold the value + */ + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + return_desc->integer.value = value; + break; + + + case AML_REF_OF_OP: /* Ref_of (Source_object) */ + + status = acpi_ex_get_object_reference (operand[0], &return_desc, walk_state); + if (ACPI_FAILURE (status)) { + goto cleanup; + } + break; + + + case AML_DEREF_OF_OP: /* Deref_of (Obj_reference) */ + + /* Check for a method local or argument */ + + if (!VALID_DESCRIPTOR_TYPE (operand[0], ACPI_DESC_TYPE_NAMED)) { + /* + * Must resolve/dereference the local/arg reference first + */ + switch (operand[0]->reference.opcode) { + /* Set Operand[0] to the value of the local/arg */ + + case AML_LOCAL_OP: + case AML_ARG_OP: + + acpi_ds_method_data_get_value (operand[0]->reference.opcode, + operand[0]->reference.offset, walk_state, &temp_desc); + + /* + * Delete our reference to the input object and + * point to the object just retrieved + */ + acpi_ut_remove_reference (operand[0]); + operand[0] = temp_desc; + break; + + default: + + /* Index op - handled below */ + break; + } + } + + + /* Operand[0] may have changed from the code above */ + + if (VALID_DESCRIPTOR_TYPE (operand[0], ACPI_DESC_TYPE_NAMED)) { + /* Get the actual object from the Node (This is the dereference) */ + + return_desc = ((acpi_namespace_node *) operand[0])->object; + + /* Returning a pointer to the object, add another reference! */ + + acpi_ut_add_reference (return_desc); + } + + else { + /* + * This must be a reference object produced by the Index + * ASL operation -- check internal opcode + */ + if ((operand[0]->reference.opcode != AML_INDEX_OP) && + (operand[0]->reference.opcode != AML_REF_OF_OP)) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown opcode in ref(%p) - %X\n", + operand[0], operand[0]->reference.opcode)); + + status = AE_TYPE; + goto cleanup; + } + + + switch (operand[0]->reference.opcode) { + case AML_INDEX_OP: + + /* + * Supported target types for the Index operator are + * 1) A Buffer + * 2) A Package + */ + if (operand[0]->reference.target_type == ACPI_TYPE_BUFFER_FIELD) { + /* + * The target is a buffer, we must create a new object that + * contains one element of the buffer, the element pointed + * to by the index. + * + * NOTE: index into a buffer is NOT a pointer to a + * sub-buffer of the main buffer, it is only a pointer to a + * single element (byte) of the buffer! + */ + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + temp_desc = operand[0]->reference.object; + return_desc->integer.value = + temp_desc->buffer.pointer[operand[0]->reference.offset]; + + /* TBD: [Investigate] (see below) Don't add an additional + * ref! + */ + } + + else if (operand[0]->reference.target_type == ACPI_TYPE_PACKAGE) { + /* + * The target is a package, we want to return the referenced + * element of the package. We must add another reference to + * this object, however. + */ + return_desc = *(operand[0]->reference.where); + if (!return_desc) { + /* + * We can't return a NULL dereferenced value. This is + * an uninitialized package element and is thus a + * severe error. + */ + + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "NULL package element obj %p\n", + operand[0])); + status = AE_AML_UNINITIALIZED_ELEMENT; + goto cleanup; + } + + acpi_ut_add_reference (return_desc); + } + + else { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Target_type %X in obj %p\n", + operand[0]->reference.target_type, operand[0])); + status = AE_AML_OPERAND_TYPE; + goto cleanup; + } + + break; + + + case AML_REF_OF_OP: + + return_desc = operand[0]->reference.object; + + /* Add another reference to the object! */ + + acpi_ut_add_reference (return_desc); + break; + } + } + + break; + + + default: + + REPORT_ERROR (("Acpi_ex_opcode_1A_0T_1R: Unknown opcode %X\n", + walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + goto cleanup; + } + + +cleanup: + + /* Delete return object on error */ + + if (ACPI_FAILURE (status)) { + acpi_ut_remove_reference (return_desc); + } + + walk_state->result_obj = return_desc; + return_ACPI_STATUS (status); +} + diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exoparg2.c linux/drivers/acpi/executer/exoparg2.c --- v2.4.13/linux/drivers/acpi/executer/exoparg2.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/acpi/executer/exoparg2.c Wed Oct 24 14:06:22 2001 @@ -0,0 +1,564 @@ +/****************************************************************************** + * + * Module Name: exoparg2 - AML execution - opcodes with 2 arguments + * $Revision: 97 $ + * + *****************************************************************************/ + +/* + * Copyright (C) 2000, 2001 R. Byron Moore + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "acpi.h" +#include "acparser.h" +#include "acnamesp.h" +#include "acinterp.h" +#include "acevents.h" +#include "amlcode.h" +#include "acdispat.h" + + +#define _COMPONENT ACPI_EXECUTER + MODULE_NAME ("exoparg2") + + +/*! + * Naming convention for AML interpreter execution routines. + * + * The routines that begin execution of AML opcodes are named with a common + * convention based upon the number of arguments, the number of target operands, + * and whether or not a value is returned: + * + * AcpiExOpcode_xA_yT_zR + * + * Where: + * + * xA - ARGUMENTS: The number of arguments (input operands) that are + * required for this opcode type (1 through 6 args). + * yT - TARGETS: The number of targets (output operands) that are required + * for this opcode type (0, 1, or 2 targets). + * zR - RETURN VALUE: Indicates whether this opcode type returns a value + * as the function return (0 or 1). + * + * The AcpiExOpcode* functions are called via the Dispatcher component with + * fully resolved operands. +!*/ + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_2A_0T_0R + * + * PARAMETERS: Walk_state - Current walk state + * + * RETURN: Status + * + * DESCRIPTION: Execute opcode with two arguments, no target, and no return + * value. + * + * ALLOCATION: Deletes both operands + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_2A_0T_0R ( + acpi_walk_state *walk_state) +{ + acpi_operand_object **operand = &walk_state->operands[0]; + acpi_namespace_node *node; + acpi_status status = AE_OK; + + + FUNCTION_TRACE_STR ("Ex_opcode_2A_0T_0R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + /* Examine the opcode */ + + switch (walk_state->opcode) { + + case AML_NOTIFY_OP: /* Notify (Notify_object, Notify_value) */ + + /* The first operand is a namespace node */ + + node = (acpi_namespace_node *) operand[0]; + + /* The node must refer to a device or thermal zone */ + + if (node && operand[1]) /* TBD: is this check necessary? */ { + switch (node->type) { + case ACPI_TYPE_DEVICE: + case ACPI_TYPE_THERMAL: + + /* + * Dispatch the notify to the appropriate handler + * NOTE: the request is queued for execution after this method + * completes. The notify handlers are NOT invoked synchronously + * from this thread -- because handlers may in turn run other + * control methods. + */ + status = acpi_ev_queue_notify_request (node, + (u32) operand[1]->integer.value); + break; + + default: + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unexpected notify object type %X\n", + node->type)); + + status = AE_AML_OPERAND_TYPE; + break; + } + } + break; + + default: + + REPORT_ERROR (("Acpi_ex_opcode_2A_0T_0R: Unknown opcode %X\n", walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + } + + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_2A_2T_1R + * + * PARAMETERS: Walk_state - Current walk state + * + * RETURN: Status + * + * DESCRIPTION: Execute a dyadic operator (2 operands) with 2 output targets + * and one implicit return value. + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_2A_2T_1R ( + acpi_walk_state *walk_state) +{ + acpi_operand_object **operand = &walk_state->operands[0]; + acpi_operand_object *return_desc1 = NULL; + acpi_operand_object *return_desc2 = NULL; + acpi_status status; + + + FUNCTION_TRACE_STR ("Ex_opcode_2A_2T_1R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + /* + * Execute the opcode + */ + switch (walk_state->opcode) { + case AML_DIVIDE_OP: /* Divide (Dividend, Divisor, Remainder_result Quotient_result) */ + + return_desc1 = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc1) { + status = AE_NO_MEMORY; + goto cleanup; + } + + return_desc2 = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc2) { + status = AE_NO_MEMORY; + goto cleanup; + } + + /* Quotient to Return_desc1, remainder to Return_desc2 */ + + status = acpi_ut_divide (&operand[0]->integer.value, &operand[1]->integer.value, + &return_desc1->integer.value, &return_desc2->integer.value); + if (ACPI_FAILURE (status)) { + goto cleanup; + } + break; + + + default: + + REPORT_ERROR (("Acpi_ex_opcode_2A_2T_1R: Unknown opcode %X\n", + walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + goto cleanup; + break; + } + + + /* Store the results to the target reference operands */ + + status = acpi_ex_store (return_desc2, operand[2], walk_state); + if (ACPI_FAILURE (status)) { + goto cleanup; + } + + status = acpi_ex_store (return_desc1, operand[3], walk_state); + if (ACPI_FAILURE (status)) { + goto cleanup; + } + + /* Return the remainder */ + + walk_state->result_obj = return_desc1; + + +cleanup: + /* + * Since the remainder is not returned indirectly, remove a reference to + * it. Only the quotient is returned indirectly. + */ + acpi_ut_remove_reference (return_desc2); + + if (ACPI_FAILURE (status)) { + /* Delete the return object */ + + acpi_ut_remove_reference (return_desc1); + } + + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_2A_1T_1R + * + * PARAMETERS: Walk_state - Current walk state + * + * RETURN: Status + * + * DESCRIPTION: Execute opcode with two arguments, one target, and a return + * value. + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_2A_1T_1R ( + acpi_walk_state *walk_state) +{ + acpi_operand_object **operand = &walk_state->operands[0]; + acpi_operand_object *return_desc = NULL; + acpi_operand_object *temp_desc; + u32 index; + acpi_status status = AE_OK; + + + FUNCTION_TRACE_STR ("Ex_opcode_2A_1T_1R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + /* + * Execute the opcode + */ + if (walk_state->op_info->flags & AML_MATH) { + /* All simple math opcodes (add, etc.) */ + + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + return_desc->integer.value = acpi_ex_do_math_op (walk_state->opcode, + operand[0]->integer.value, + operand[1]->integer.value); + goto store_result_to_target; + } + + + switch (walk_state->opcode) { + case AML_MOD_OP: /* Mod (Dividend, Divisor, Remainder_result (ACPI 2.0) */ + + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + /* Return_desc will contain the remainder */ + + status = acpi_ut_divide (&operand[0]->integer.value, &operand[1]->integer.value, + NULL, &return_desc->integer.value); + + break; + + + case AML_CONCAT_OP: /* Concatenate (Data1, Data2, Result) */ + + /* + * Convert the second operand if necessary. The first operand + * determines the type of the second operand, (See the Data Types + * section of the ACPI specification.) Both object types are + * guaranteed to be either Integer/String/Buffer by the operand + * resolution mechanism above. + */ + switch (operand[0]->common.type) { + case ACPI_TYPE_INTEGER: + status = acpi_ex_convert_to_integer (operand[1], &operand[1], walk_state); + break; + + case ACPI_TYPE_STRING: + status = acpi_ex_convert_to_string (operand[1], &operand[1], 16, ACPI_UINT32_MAX, walk_state); + break; + + case ACPI_TYPE_BUFFER: + status = acpi_ex_convert_to_buffer (operand[1], &operand[1], walk_state); + break; + + default: + status = AE_AML_INTERNAL; + } + + if (ACPI_FAILURE (status)) { + goto cleanup; + } + + /* + * Both operands are now known to be the same object type + * (Both are Integer, String, or Buffer), and we can now perform the + * concatenation. + */ + status = acpi_ex_do_concatenate (operand[0], operand[1], &return_desc, walk_state); + break; + + + case AML_TO_STRING_OP: /* To_string (Buffer, Length, Result) (ACPI 2.0) */ + + status = acpi_ex_convert_to_string (operand[0], &return_desc, 16, + (u32) operand[1]->integer.value, walk_state); + break; + + + case AML_CONCAT_RES_OP: /* Concatenate_res_template (Buffer, Buffer, Result) (ACPI 2.0) */ + + status = AE_NOT_IMPLEMENTED; + break; + + + case AML_INDEX_OP: /* Index (Source Index Result) */ + + /* Create the internal return object */ + + return_desc = acpi_ut_create_internal_object (INTERNAL_TYPE_REFERENCE); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + index = (u32) operand[1]->integer.value; + + /* + * At this point, the Source operand is either a Package or a Buffer + */ + if (operand[0]->common.type == ACPI_TYPE_PACKAGE) { + /* Object to be indexed is a Package */ + + if (index >= operand[0]->package.count) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Index value beyond package end\n")); + status = AE_AML_PACKAGE_LIMIT; + goto cleanup; + } + + if ((operand[2]->common.type == INTERNAL_TYPE_REFERENCE) && + (operand[2]->reference.opcode == AML_ZERO_OP)) { + /* + * There is no actual result descriptor (the Zero_op Result + * descriptor is a placeholder), so just delete the placeholder and + * return a reference to the package element + */ + acpi_ut_remove_reference (operand[2]); + } + + else { + /* + * Each element of the package is an internal object. Get the one + * we are after. + */ + temp_desc = operand[0]->package.elements [index]; + return_desc->reference.opcode = AML_INDEX_OP; + return_desc->reference.target_type = temp_desc->common.type; + return_desc->reference.object = temp_desc; + + status = acpi_ex_store (return_desc, operand[2], walk_state); + return_desc->reference.object = NULL; + } + + /* + * The local return object must always be a reference to the package element, + * not the element itself. + */ + return_desc->reference.opcode = AML_INDEX_OP; + return_desc->reference.target_type = ACPI_TYPE_PACKAGE; + return_desc->reference.where = &operand[0]->package.elements [index]; + } + + else { + /* Object to be indexed is a Buffer */ + + if (index >= operand[0]->buffer.length) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Index value beyond end of buffer\n")); + status = AE_AML_BUFFER_LIMIT; + goto cleanup; + } + + return_desc->reference.opcode = AML_INDEX_OP; + return_desc->reference.target_type = ACPI_TYPE_BUFFER_FIELD; + return_desc->reference.object = operand[0]; + return_desc->reference.offset = index; + + status = acpi_ex_store (return_desc, operand[2], walk_state); + } + + walk_state->result_obj = return_desc; + goto cleanup; + break; + + + default: + + REPORT_ERROR (("Acpi_ex_opcode_2A_1T_1R: Unknown opcode %X\n", + walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + break; + } + + +store_result_to_target: + + if (ACPI_SUCCESS (status)) { + /* + * Store the result of the operation (which is now in Return_desc) into + * the Target descriptor. + */ + status = acpi_ex_store (return_desc, operand[2], walk_state); + if (ACPI_FAILURE (status)) { + goto cleanup; + } + + walk_state->result_obj = return_desc; + } + + +cleanup: + + /* Delete return object on error */ + + if (ACPI_FAILURE (status)) { + acpi_ut_remove_reference (return_desc); + } + + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_2A_0T_1R + * + * PARAMETERS: Walk_state - Current walk state + * + * RETURN: Status + * + * DESCRIPTION: Execute opcode with 2 arguments, no target, and a return value + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_2A_0T_1R ( + acpi_walk_state *walk_state) +{ + acpi_operand_object **operand = &walk_state->operands[0]; + acpi_operand_object *return_desc = NULL; + acpi_status status = AE_OK; + u8 logical_result = FALSE; + + + FUNCTION_TRACE_STR ("Ex_opcode_2A_0T_1R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + /* Create the internal return object */ + + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + /* + * Execute the Opcode + */ + if (walk_state->op_info->flags & AML_LOGICAL) /* Logical_op (Operand0, Operand1) */ { + logical_result = acpi_ex_do_logical_op (walk_state->opcode, + operand[0]->integer.value, + operand[1]->integer.value); + goto store_logical_result; + } + + + switch (walk_state->opcode) { + case AML_ACQUIRE_OP: /* Acquire (Mutex_object, Timeout) */ + + status = acpi_ex_acquire_mutex (operand[1], operand[0], walk_state); + if (status == AE_TIME) { + logical_result = TRUE; /* TRUE = Acquire timed out */ + status = AE_OK; + } + break; + + + case AML_WAIT_OP: /* Wait (Event_object, Timeout) */ + + status = acpi_ex_system_wait_event (operand[1], operand[0]); + if (status == AE_TIME) { + logical_result = TRUE; /* TRUE, Wait timed out */ + status = AE_OK; + } + break; + + + default: + + REPORT_ERROR (("Acpi_ex_opcode_2A_0T_1R: Unknown opcode %X\n", walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + goto cleanup; + break; + } + + +store_logical_result: + /* + * Set return value to according to Logical_result. logical TRUE (all ones) + * Default is FALSE (zero) + */ + if (logical_result) { + return_desc->integer.value = ACPI_INTEGER_MAX; + } + + walk_state->result_obj = return_desc; + + +cleanup: + + /* Delete return object on error */ + + if (ACPI_FAILURE (status)) { + acpi_ut_remove_reference (return_desc); + } + + return_ACPI_STATUS (status); +} + + diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exoparg3.c linux/drivers/acpi/executer/exoparg3.c --- v2.4.13/linux/drivers/acpi/executer/exoparg3.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/acpi/executer/exoparg3.c Wed Oct 24 14:06:22 2001 @@ -0,0 +1,235 @@ + +/****************************************************************************** + * + * Module Name: exoparg3 - AML execution - opcodes with 3 arguments + * $Revision: 3 $ + * + *****************************************************************************/ + +/* + * Copyright (C) 2000, 2001 R. Byron Moore + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "acpi.h" +#include "acinterp.h" +#include "acparser.h" +#include "amlcode.h" + + +#define _COMPONENT ACPI_EXECUTER + MODULE_NAME ("exoparg3") + + +/*! + * Naming convention for AML interpreter execution routines. + * + * The routines that begin execution of AML opcodes are named with a common + * convention based upon the number of arguments, the number of target operands, + * and whether or not a value is returned: + * + * AcpiExOpcode_xA_yT_zR + * + * Where: + * + * xA - ARGUMENTS: The number of arguments (input operands) that are + * required for this opcode type (1 through 6 args). + * yT - TARGETS: The number of targets (output operands) that are required + * for this opcode type (0, 1, or 2 targets). + * zR - RETURN VALUE: Indicates whether this opcode type returns a value + * as the function return (0 or 1). + * + * The AcpiExOpcode* functions are called via the Dispatcher component with + * fully resolved operands. +!*/ + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_3A_0T_0R + * + * PARAMETERS: Walk_state - Current walk state + * + * RETURN: Status + * + * DESCRIPTION: Execute Triadic operator (3 operands) + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_3A_0T_0R ( + acpi_walk_state *walk_state) +{ + acpi_operand_object **operand = &walk_state->operands[0]; + ACPI_SIGNAL_FATAL_INFO *fatal; + acpi_status status = AE_OK; + + + FUNCTION_TRACE_STR ("Ex_opcode_3A_0T_0R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + switch (walk_state->opcode) { + + case AML_FATAL_OP: /* Fatal (Fatal_type Fatal_code Fatal_arg) */ + + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, + "Fatal_op: Type %x Code %x Arg %x <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", + (u32) operand[0]->integer.value, (u32) operand[1]->integer.value, + (u32) operand[2]->integer.value)); + + + fatal = ACPI_MEM_ALLOCATE (sizeof (ACPI_SIGNAL_FATAL_INFO)); + if (fatal) { + fatal->type = (u32) operand[0]->integer.value; + fatal->code = (u32) operand[1]->integer.value; + fatal->argument = (u32) operand[2]->integer.value; + } + + /* + * Always signal the OS! + */ + acpi_os_signal (ACPI_SIGNAL_FATAL, fatal); + + /* Might return while OS is shutting down, just continue */ + + ACPI_MEM_FREE (fatal); + break; + + + default: + + REPORT_ERROR (("Acpi_ex_opcode_3A_0T_0R: Unknown opcode %X\n", + walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + goto cleanup; + break; + } + + +cleanup: + + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_3A_1T_1R + * + * PARAMETERS: Walk_state - Current walk state + * + * RETURN: Status + * + * DESCRIPTION: Execute Triadic operator (3 operands) + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_3A_1T_1R ( + acpi_walk_state *walk_state) +{ + acpi_operand_object **operand = &walk_state->operands[0]; + acpi_operand_object *return_desc = NULL; + char *buffer; + acpi_status status = AE_OK; + u32 index; + u32 length; + + + FUNCTION_TRACE_STR ("Ex_opcode_3A_1T_1R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + switch (walk_state->opcode) { + case AML_MID_OP: /* Mid (Source[0], Index[1], Length[2], Result[3]) */ + + /* + * Create the return object. The Source operand is guaranteed to be + * either a String or a Buffer, so just use its type. + */ + return_desc = acpi_ut_create_internal_object (operand[0]->common.type); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + } + + /* Get the Integer values from the objects */ + + index = (u32) operand[1]->integer.value; + length = (u32) operand[2]->integer.value; + + /* + * If the index is beyond the length of the String/Buffer, or if the + * requested length is zero, return a zero-length String/Buffer + */ + if ((index < operand[0]->string.length) && + (length > 0)) { + /* Truncate request if larger than the actual String/Buffer */ + + if ((index + length) > + operand[0]->string.length) { + length = operand[0]->string.length - index; + } + + /* Allocate a new buffer for the String/Buffer */ + + buffer = ACPI_MEM_CALLOCATE (length + 1); + if (!buffer) { + return (AE_NO_MEMORY); + } + + /* Copy the portion requested */ + + MEMCPY (buffer, operand[0]->string.pointer + index, + length); + + /* Set the length of the new String/Buffer */ + + return_desc->string.pointer = buffer; + return_desc->string.length = length; + } + + break; + + + default: + + REPORT_ERROR (("Acpi_ex_opcode_3A_0T_0R: Unknown opcode %X\n", + walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + goto cleanup; + break; + } + + /* Store the result in the target */ + + status = acpi_ex_store (return_desc, operand[3], walk_state); + +cleanup: + + /* Delete return object on error */ + + if (ACPI_FAILURE (status)) { + acpi_ut_remove_reference (return_desc); + } + + /* Set the return object and exit */ + + walk_state->result_obj = return_desc; + return_ACPI_STATUS (status); +} + + diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exoparg6.c linux/drivers/acpi/executer/exoparg6.c --- v2.4.13/linux/drivers/acpi/executer/exoparg6.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/acpi/executer/exoparg6.c Wed Oct 24 14:06:22 2001 @@ -0,0 +1,276 @@ + +/****************************************************************************** + * + * Module Name: exoparg6 - AML execution - opcodes with 6 arguments + * $Revision: 4 $ + * + *****************************************************************************/ + +/* + * Copyright (C) 2000, 2001 R. Byron Moore + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "acpi.h" +#include "acinterp.h" +#include "acparser.h" +#include "amlcode.h" + + +#define _COMPONENT ACPI_EXECUTER + MODULE_NAME ("exoparg6") + + +/*! + * Naming convention for AML interpreter execution routines. + * + * The routines that begin execution of AML opcodes are named with a common + * convention based upon the number of arguments, the number of target operands, + * and whether or not a value is returned: + * + * AcpiExOpcode_xA_yT_zR + * + * Where: + * + * xA - ARGUMENTS: The number of arguments (input operands) that are + * required for this opcode type (1 through 6 args). + * yT - TARGETS: The number of targets (output operands) that are required + * for this opcode type (0, 1, or 2 targets). + * zR - RETURN VALUE: Indicates whether this opcode type returns a value + * as the function return (0 or 1). + * + * The AcpiExOpcode* functions are called via the Dispatcher component with + * fully resolved operands. +!*/ + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_do_match + * + * PARAMETERS: Match_op - The AML match operand + * Package_value - Value from the target package + * Match_value - Value to be matched + * + * RETURN: TRUE if the match is successful, FALSE otherwise + * + * DESCRIPTION: Implements the low-level match for the ASL Match operator + * + ******************************************************************************/ + +u8 +acpi_ex_do_match ( + u32 match_op, + acpi_integer package_value, + acpi_integer match_value) +{ + + switch (match_op) { + case MATCH_MTR: /* always true */ + + break; + + + case MATCH_MEQ: /* true if equal */ + + if (package_value != match_value) { + return (FALSE); + } + break; + + + case MATCH_MLE: /* true if less than or equal */ + + if (package_value > match_value) { + return (FALSE); + } + break; + + + case MATCH_MLT: /* true if less than */ + + if (package_value >= match_value) { + return (FALSE); + } + break; + + + case MATCH_MGE: /* true if greater than or equal */ + + if (package_value < match_value) { + return (FALSE); + } + break; + + + case MATCH_MGT: /* true if greater than */ + + if (package_value <= match_value) { + return (FALSE); + } + break; + + + default: /* undefined */ + + return (FALSE); + } + + + return TRUE; +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_opcode_6A_0T_1R + * + * PARAMETERS: Walk_state - Current walk state + * + * RETURN: Status + * + * DESCRIPTION: Execute opcode with 6 arguments, no target, and a return value + * + ******************************************************************************/ + +acpi_status +acpi_ex_opcode_6A_0T_1R ( + acpi_walk_state *walk_state) +{ + acpi_operand_object **operand = &walk_state->operands[0]; + acpi_operand_object *return_desc = NULL; + acpi_status status = AE_OK; + u32 index; + acpi_operand_object *this_element; + + + FUNCTION_TRACE_STR ("Ex_opcode_6A_0T_1R", acpi_ps_get_opcode_name (walk_state->opcode)); + + + switch (walk_state->opcode) { + case AML_MATCH_OP: + /* + * Match (Search_package[0], Match_op1[1], Match_object1[2], + * Match_op2[3], Match_object2[4], Start_index[5]) + */ + + /* Validate match comparison sub-opcodes */ + + if ((operand[1]->integer.value > MAX_MATCH_OPERATOR) || + (operand[3]->integer.value > MAX_MATCH_OPERATOR)) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "operation encoding out of range\n")); + status = AE_AML_OPERAND_VALUE; + goto cleanup; + } + + index = (u32) operand[5]->integer.value; + if (index >= (u32) operand[0]->package.count) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Index beyond package end\n")); + status = AE_AML_PACKAGE_LIMIT; + goto cleanup; + } + + return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER); + if (!return_desc) { + status = AE_NO_MEMORY; + goto cleanup; + + } + + /* Default return value if no match found */ + + return_desc->integer.value = ACPI_INTEGER_MAX; + + /* + * Examine each element until a match is found. Within the loop, + * "continue" signifies that the current element does not match + * and the next should be examined. + * Upon finding a match, the loop will terminate via "break" at + * the bottom. If it terminates "normally", Match_value will be -1 + * (its initial value) indicating that no match was found. When + * returned as a Number, this will produce the Ones value as specified. + */ + for ( ; index < operand[0]->package.count; index++) { + this_element = operand[0]->package.elements[index]; + + /* + * Treat any NULL or non-numeric elements as non-matching. + * TBD [Unhandled] - if an element is a Name, + * should we examine its value? + */ + if (!this_element || + this_element->common.type != ACPI_TYPE_INTEGER) { + continue; + } + + + /* + * Within these switch statements: + * "break" (exit from the switch) signifies a match; + * "continue" (proceed to next iteration of enclosing + * "for" loop) signifies a non-match. + */ + if (!acpi_ex_do_match ((u32) operand[1]->integer.value, + this_element->integer.value, operand[2]->integer.value)) { + continue; + } + + + if (!acpi_ex_do_match ((u32) operand[3]->integer.value, + this_element->integer.value, operand[4]->integer.value)) { + continue; + } + + /* Match found: Index is the return value */ + + return_desc->integer.value = index; + break; + } + + break; + + + case AML_LOAD_TABLE_OP: + + status = AE_NOT_IMPLEMENTED; + goto cleanup; + break; + + + default: + + REPORT_ERROR (("Acpi_ex_opcode_3A_0T_0R: Unknown opcode %X\n", + walk_state->opcode)); + status = AE_AML_BAD_OPCODE; + goto cleanup; + break; + } + + + walk_state->result_obj = return_desc; + + +cleanup: + + /* Delete return object on error */ + + if (ACPI_FAILURE (status)) { + acpi_ut_remove_reference (return_desc); + } + + return_ACPI_STATUS (status); +} diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exprep.c linux/drivers/acpi/executer/exprep.c --- v2.4.13/linux/drivers/acpi/executer/exprep.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exprep.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exprep - ACPI AML (p-code) execution - field prep utilities - * $Revision: 95 $ + * $Revision: 99 $ * *****************************************************************************/ @@ -243,7 +243,7 @@ /******************************************************************************* * - * FUNCTION: Acpi_ex_prep_region_field_value + * FUNCTION: Acpi_ex_prep_field_value * * PARAMETERS: Node - Owning Node * Region_node - Region in which field is being defined @@ -253,280 +253,128 @@ * * RETURN: Status * - * DESCRIPTION: Construct an acpi_operand_object of type Def_field and + * DESCRIPTION: Construct an acpi_operand_object of type Def_field and * connect it to the parent Node. * ******************************************************************************/ acpi_status -acpi_ex_prep_region_field_value ( - acpi_namespace_node *node, - acpi_handle region_node, - u8 field_flags, - u32 field_bit_position, - u32 field_bit_length) +acpi_ex_prep_field_value ( + ACPI_CREATE_FIELD_INFO *info) { acpi_operand_object *obj_desc; u32 type; acpi_status status; - FUNCTION_TRACE ("Ex_prep_region_field_value"); + FUNCTION_TRACE ("Ex_prep_field_value"); /* Parameter validation */ - if (!region_node) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null Region_node\n")); - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } + if (info->field_type != INTERNAL_TYPE_INDEX_FIELD) { + if (!info->region_node) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null Region_node\n")); + return_ACPI_STATUS (AE_AML_NO_OPERAND); + } + + type = acpi_ns_get_type (info->region_node); + if (type != ACPI_TYPE_REGION) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed Region, found type %X %s\n", + type, acpi_ut_get_type_name (type))); - type = acpi_ns_get_type (region_node); - if (type != ACPI_TYPE_REGION) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed Region, found type %X %s\n", - type, acpi_ut_get_type_name (type))); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); + return_ACPI_STATUS (AE_AML_OPERAND_TYPE); + } } - /* Allocate a new object */ + /* Allocate a new region object */ - obj_desc = acpi_ut_create_internal_object (INTERNAL_TYPE_REGION_FIELD); + obj_desc = acpi_ut_create_internal_object (info->field_type); if (!obj_desc) { return_ACPI_STATUS (AE_NO_MEMORY); } - - /* Obj_desc and Region valid */ - - DUMP_OPERANDS ((acpi_operand_object **) &node, IMODE_EXECUTE, - "Ex_prep_region_field_value", 1, "case Region_field"); - DUMP_OPERANDS ((acpi_operand_object **) ®ion_node, IMODE_EXECUTE, - "Ex_prep_region_field_value", 1, "case Region_field"); - /* Initialize areas of the object that are common to all fields */ - status = acpi_ex_prep_common_field_object (obj_desc, field_flags, - field_bit_position, field_bit_length); + status = acpi_ex_prep_common_field_object (obj_desc, info->field_flags, + info->field_bit_position, info->field_bit_length); if (ACPI_FAILURE (status)) { + acpi_ut_delete_object_desc (obj_desc); return_ACPI_STATUS (status); } - /* Initialize areas of the object that are specific to this field type */ - - obj_desc->field.region_obj = acpi_ns_get_attached_object (region_node); - - /* An additional reference for the container */ + /* Initialize areas of the object that are specific to the field type */ - acpi_ut_add_reference (obj_desc->field.region_obj); + switch (info->field_type) { + case INTERNAL_TYPE_REGION_FIELD: + obj_desc->field.region_obj = acpi_ns_get_attached_object (info->region_node); - /* Debug info */ - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Bitoff=%X Off=%X Gran=%X Region %p\n", - obj_desc->field.start_field_bit_offset, obj_desc->field.base_byte_offset, - obj_desc->field.access_bit_width, obj_desc->field.region_obj)); - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "set Named_obj %p (%4.4s) val = %p\n", - node, &(node->name), obj_desc)); + /* An additional reference for the container */ + acpi_ut_add_reference (obj_desc->field.region_obj); - /* - * Store the constructed descriptor (Obj_desc) into the parent Node, - * preserving the current type of that Named_obj. - */ - status = acpi_ns_attach_object (node, obj_desc, (u8) acpi_ns_get_type (node)); - return_ACPI_STATUS (status); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_prep_bank_field_value - * - * PARAMETERS: Node - Owning Node - * Region_node - Region in which field is being defined - * Bank_register_node - Bank selection register node - * Bank_val - Value to store in selection register - * Field_flags - Access, Lock_rule, and Update_rule - * Field_bit_position - Field start position - * Field_bit_length - Field length in number of bits - * - * RETURN: Status - * - * DESCRIPTION: Construct an object of type Bank_field and attach it to the - * parent Node. - * - ******************************************************************************/ - -acpi_status -acpi_ex_prep_bank_field_value ( - acpi_namespace_node *node, - acpi_namespace_node *region_node, - acpi_namespace_node *bank_register_node, - u32 bank_val, - u8 field_flags, - u32 field_bit_position, - u32 field_bit_length) -{ - acpi_operand_object *obj_desc; - u32 type; - acpi_status status; + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Region_field: Bitoff=%X Off=%X Gran=%X Region %p\n", + obj_desc->field.start_field_bit_offset, obj_desc->field.base_byte_offset, + obj_desc->field.access_bit_width, obj_desc->field.region_obj)); + break; - FUNCTION_TRACE ("Ex_prep_bank_field_value"); + case INTERNAL_TYPE_BANK_FIELD: + obj_desc->bank_field.value = info->bank_value; + obj_desc->bank_field.region_obj = acpi_ns_get_attached_object (info->region_node); + obj_desc->bank_field.bank_register_obj = acpi_ns_get_attached_object (info->register_node); - /* Parameter validation */ + /* An additional reference for the attached objects */ - if (!region_node) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null Region_node\n")); - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } + acpi_ut_add_reference (obj_desc->bank_field.region_obj); + acpi_ut_add_reference (obj_desc->bank_field.bank_register_obj); - type = acpi_ns_get_type (region_node); - if (type != ACPI_TYPE_REGION) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed Region, found type %X %s\n", - type, acpi_ut_get_type_name (type))); - return_ACPI_STATUS (AE_AML_OPERAND_TYPE); - } + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Bank Field: Bit_off=%X Off=%X Gran=%X Region %p Bank_reg %p\n", + obj_desc->bank_field.start_field_bit_offset, obj_desc->bank_field.base_byte_offset, + obj_desc->field.access_bit_width, obj_desc->bank_field.region_obj, + obj_desc->bank_field.bank_register_obj)); + break; - /* Allocate a new object */ - obj_desc = acpi_ut_create_internal_object (INTERNAL_TYPE_BANK_FIELD); - if (!obj_desc) { - return_ACPI_STATUS (AE_NO_MEMORY); - } + case INTERNAL_TYPE_INDEX_FIELD: - /* Obj_desc and Region valid */ + obj_desc->index_field.index_obj = acpi_ns_get_attached_object (info->register_node); + obj_desc->index_field.data_obj = acpi_ns_get_attached_object (info->data_register_node); + obj_desc->index_field.value = (u32) (info->field_bit_position / + obj_desc->field.access_bit_width); + + if (!obj_desc->index_field.data_obj || !obj_desc->index_field.index_obj) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null Index Object\n")); + return_ACPI_STATUS (AE_AML_INTERNAL); + } - DUMP_OPERANDS ((acpi_operand_object **) &node, IMODE_EXECUTE, - "Ex_prep_bank_field_value", 1, "case Bank_field"); - DUMP_OPERANDS ((acpi_operand_object **) ®ion_node, IMODE_EXECUTE, - "Ex_prep_bank_field_value", 1, "case Bank_field"); + /* An additional reference for the attached objects */ - /* Initialize areas of the object that are common to all fields */ + acpi_ut_add_reference (obj_desc->index_field.data_obj); + acpi_ut_add_reference (obj_desc->index_field.index_obj); - status = acpi_ex_prep_common_field_object (obj_desc, field_flags, - field_bit_position, field_bit_length); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Index_field: bitoff=%X off=%X gran=%X Index %p Data %p\n", + obj_desc->index_field.start_field_bit_offset, obj_desc->index_field.base_byte_offset, + obj_desc->field.access_bit_width, obj_desc->index_field.index_obj, + obj_desc->index_field.data_obj)); + break; } - /* Initialize areas of the object that are specific to this field type */ - - obj_desc->bank_field.value = bank_val; - obj_desc->bank_field.region_obj = acpi_ns_get_attached_object (region_node); - obj_desc->bank_field.bank_register_obj = acpi_ns_get_attached_object (bank_register_node); - - /* An additional reference for the attached objects */ - - acpi_ut_add_reference (obj_desc->bank_field.region_obj); - acpi_ut_add_reference (obj_desc->bank_field.bank_register_obj); - - /* Debug info */ - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Bit_off=%X Off=%X Gran=%X Region %p Bank_reg %p\n", - obj_desc->bank_field.start_field_bit_offset, obj_desc->bank_field.base_byte_offset, - obj_desc->field.access_bit_width, obj_desc->bank_field.region_obj, - obj_desc->bank_field.bank_register_obj)); - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Set Named_obj %p (%4.4s) val=%p\n", - node, &(node->name), obj_desc)); - - /* * Store the constructed descriptor (Obj_desc) into the parent Node, * preserving the current type of that Named_obj. */ - status = acpi_ns_attach_object (node, obj_desc, (u8) acpi_ns_get_type (node)); - return_ACPI_STATUS (status); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_prep_index_field_value - * - * PARAMETERS: Node - Owning Node - * Index_reg - Index register - * Data_reg - Data register - * Field_flags - Access, Lock_rule, and Update_rule - * Field_bit_position - Field start position - * Field_bit_length - Field length in number of bits - * - * RETURN: Status - * - * DESCRIPTION: Construct an acpi_operand_object of type Index_field and - * connect it to the parent Node. - * - ******************************************************************************/ - -acpi_status -acpi_ex_prep_index_field_value ( - acpi_namespace_node *node, - acpi_namespace_node *index_reg, - acpi_namespace_node *data_reg, - u8 field_flags, - u32 field_bit_position, - u32 field_bit_length) -{ - acpi_operand_object *obj_desc; - acpi_status status; - - - FUNCTION_TRACE ("Ex_prep_index_field_value"); - - - /* Parameter validation */ - - if (!index_reg || !data_reg) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null handle\n")); - return_ACPI_STATUS (AE_AML_NO_OPERAND); - } - - /* Allocate a new object descriptor */ - - obj_desc = acpi_ut_create_internal_object (INTERNAL_TYPE_INDEX_FIELD); - if (!obj_desc) { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - /* Initialize areas of the object that are common to all fields */ - - status = acpi_ex_prep_common_field_object (obj_desc, field_flags, - field_bit_position, field_bit_length); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - - /* Initialize areas of the object that are specific to this field type */ - - obj_desc->index_field.data_obj = acpi_ns_get_attached_object (data_reg); - obj_desc->index_field.index_obj = acpi_ns_get_attached_object (index_reg); - obj_desc->index_field.value = (u32) (field_bit_position / - obj_desc->field.access_bit_width); - - /* An additional reference for the attached objects */ - - acpi_ut_add_reference (obj_desc->index_field.data_obj); - acpi_ut_add_reference (obj_desc->index_field.index_obj); - - /* Debug info */ - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "bitoff=%X off=%X gran=%X Index %p Data %p\n", - obj_desc->index_field.start_field_bit_offset, obj_desc->index_field.base_byte_offset, - obj_desc->field.access_bit_width, obj_desc->index_field.index_obj, - obj_desc->index_field.data_obj)); + status = acpi_ns_attach_object (info->field_node, obj_desc, + (u8) acpi_ns_get_type (info->field_node)); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "set Named_obj %p (%4.4s) val = %p\n", - node, &(node->name), obj_desc)); + info->field_node, (char*)&(info->field_node->name), obj_desc)); + /* Remove local reference to the object */ - /* - * Store the constructed descriptor (Obj_desc) into the parent Node, - * preserving the current type of that Named_obj. - */ - status = acpi_ns_attach_object (node, obj_desc, (u8) acpi_ns_get_type (node)); + acpi_ut_remove_reference (obj_desc); return_ACPI_STATUS (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exregion.c linux/drivers/acpi/executer/exregion.c --- v2.4.13/linux/drivers/acpi/executer/exregion.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exregion.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exregion - ACPI default Op_region (address space) handlers - * $Revision: 58 $ + * $Revision: 61 $ * *****************************************************************************/ @@ -47,7 +47,7 @@ * Value - Pointer to in or out value * Handler_context - Pointer to Handler's context * Region_context - Pointer to context specific to the - * accessed region + * accessed region * * RETURN: Status * @@ -143,7 +143,7 @@ ((acpi_integer) address - (acpi_integer) mem_info->mapped_physical_address); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "IO %d (%d width) Address=%8.8lX%8.8lX\n", function, bit_width, + "System_memory %d (%d width) Address=%8.8X%8.8X\n", function, bit_width, HIDWORD (address), LODWORD (address))); /* Perform the memory read or write */ @@ -207,7 +207,7 @@ * Value - Pointer to in or out value * Handler_context - Pointer to Handler's context * Region_context - Pointer to context specific to the - * accessed region + * accessed region * * RETURN: Status * @@ -231,7 +231,7 @@ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "IO %d (%d width) Address=%8.8lX%8.8lX\n", function, bit_width, + "System_iO %d (%d width) Address=%8.8X%8.8X\n", function, bit_width, HIDWORD (address), LODWORD (address))); /* Decode the function parameter */ @@ -270,7 +270,7 @@ * Value - Pointer to in or out value * Handler_context - Pointer to Handler's context * Region_context - Pointer to context specific to the - * accessed region + * accessed region * * RETURN: Status * @@ -311,7 +311,7 @@ pci_register = (u16) address; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "IO %d (%d) Seg(%04x) Bus(%04x) Dev(%04x) Func(%04x) Reg(%04x)\n", + "Pci_config %d (%d) Seg(%04x) Bus(%04x) Dev(%04x) Func(%04x) Reg(%04x)\n", function, bit_width, pci_id->segment, pci_id->bus, pci_id->device, pci_id->function, pci_register)); @@ -335,6 +335,80 @@ status = AE_BAD_PARAMETER; break; } + + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_cmos_space_handler + * + * PARAMETERS: Function - Read or Write operation + * Address - Where in the space to read or write + * Bit_width - Field width in bits (8, 16, or 32) + * Value - Pointer to in or out value + * Handler_context - Pointer to Handler's context + * Region_context - Pointer to context specific to the + * accessed region + * + * RETURN: Status + * + * DESCRIPTION: Handler for the CMOS address space (Op Region) + * + ******************************************************************************/ + +acpi_status +acpi_ex_cmos_space_handler ( + u32 function, + ACPI_PHYSICAL_ADDRESS address, + u32 bit_width, + u32 *value, + void *handler_context, + void *region_context) +{ + acpi_status status = AE_OK; + + + FUNCTION_TRACE ("Ex_cmos_space_handler"); + + + return_ACPI_STATUS (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ex_pci_bar_space_handler + * + * PARAMETERS: Function - Read or Write operation + * Address - Where in the space to read or write + * Bit_width - Field width in bits (8, 16, or 32) + * Value - Pointer to in or out value + * Handler_context - Pointer to Handler's context + * Region_context - Pointer to context specific to the + * accessed region + * + * RETURN: Status + * + * DESCRIPTION: Handler for the PCI Bar_target address space (Op Region) + * + ******************************************************************************/ + +acpi_status +acpi_ex_pci_bar_space_handler ( + u32 function, + ACPI_PHYSICAL_ADDRESS address, + u32 bit_width, + u32 *value, + void *handler_context, + void *region_context) +{ + acpi_status status = AE_OK; + + + FUNCTION_TRACE ("Ex_pci_bar_space_handler"); + return_ACPI_STATUS (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exresnte.c linux/drivers/acpi/executer/exresnte.c --- v2.4.13/linux/drivers/acpi/executer/exresnte.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exresnte.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exresnte - AML Interpreter object resolution - * $Revision: 41 $ + * $Revision: 43 $ * *****************************************************************************/ @@ -43,14 +43,15 @@ * * FUNCTION: Acpi_ex_resolve_node_to_value * - * PARAMETERS: Stack_ptr - Pointer to a location on a stack that contains - * a pointer to a Node - * Walk_state - Current state + * PARAMETERS: Object_ptr - Pointer to a location that contains + * a pointer to a NS node, and will recieve a + * pointer to the resolved object. + * Walk_state - Current state. Valid only if executing AML + * code. NULL if simply resolving an object * * RETURN: Status * - * DESCRIPTION: Resolve a Namespace node (AKA a "direct name pointer") to - * a valued object + * DESCRIPTION: Resolve a Namespace node to a valued object * * Note: for some of the data types, the pointer attached to the Node * can be either a pointer to an actual internal object or a pointer into the @@ -66,12 +67,12 @@ acpi_status acpi_ex_resolve_node_to_value ( - acpi_namespace_node **stack_ptr, + acpi_namespace_node **object_ptr, acpi_walk_state *walk_state) { acpi_status status = AE_OK; - acpi_operand_object *val_desc; + acpi_operand_object *source_desc; acpi_operand_object *obj_desc = NULL; acpi_namespace_node *node; acpi_object_type8 entry_type; @@ -85,12 +86,12 @@ * The stack pointer points to a acpi_namespace_node (Node). Get the * object that is attached to the Node. */ - node = *stack_ptr; - val_desc = acpi_ns_get_attached_object (node); + node = *object_ptr; + source_desc = acpi_ns_get_attached_object (node); entry_type = acpi_ns_get_type ((acpi_handle) node); - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Entry=%p Val_desc=%p Type=%X\n", - node, val_desc, entry_type)); + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Entry=%p Source_desc=%p Type=%X\n", + node, source_desc, entry_type)); /* @@ -103,7 +104,7 @@ return_ACPI_STATUS (AE_OK); } - if (!val_desc) { + if (!source_desc) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No object attached to node %p\n", node)); return_ACPI_STATUS (AE_AML_NO_OPERAND); @@ -117,60 +118,60 @@ case ACPI_TYPE_PACKAGE: - if (ACPI_TYPE_PACKAGE != val_desc->common.type) { + if (ACPI_TYPE_PACKAGE != source_desc->common.type) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a Package, type %s\n", - acpi_ut_get_type_name (val_desc->common.type))); + acpi_ut_get_type_name (source_desc->common.type))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Return an additional reference to the object */ - obj_desc = val_desc; + obj_desc = source_desc; acpi_ut_add_reference (obj_desc); break; case ACPI_TYPE_BUFFER: - if (ACPI_TYPE_BUFFER != val_desc->common.type) { + if (ACPI_TYPE_BUFFER != source_desc->common.type) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a Buffer, type %s\n", - acpi_ut_get_type_name (val_desc->common.type))); + acpi_ut_get_type_name (source_desc->common.type))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Return an additional reference to the object */ - obj_desc = val_desc; + obj_desc = source_desc; acpi_ut_add_reference (obj_desc); break; case ACPI_TYPE_STRING: - if (ACPI_TYPE_STRING != val_desc->common.type) { + if (ACPI_TYPE_STRING != source_desc->common.type) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a String, type %s\n", - acpi_ut_get_type_name (val_desc->common.type))); + acpi_ut_get_type_name (source_desc->common.type))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Return an additional reference to the object */ - obj_desc = val_desc; + obj_desc = source_desc; acpi_ut_add_reference (obj_desc); break; case ACPI_TYPE_INTEGER: - if (ACPI_TYPE_INTEGER != val_desc->common.type) { + if (ACPI_TYPE_INTEGER != source_desc->common.type) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a Integer, type %s\n", - acpi_ut_get_type_name (val_desc->common.type))); + acpi_ut_get_type_name (source_desc->common.type))); return_ACPI_STATUS (AE_AML_OPERAND_TYPE); } /* Return an additional reference to the object */ - obj_desc = val_desc; + obj_desc = source_desc; acpi_ut_add_reference (obj_desc); break; @@ -180,10 +181,10 @@ case INTERNAL_TYPE_BANK_FIELD: case INTERNAL_TYPE_INDEX_FIELD: - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Field_read Node=%p Val_desc=%p Type=%X\n", - node, val_desc, entry_type)); + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Field_read Node=%p Source_desc=%p Type=%X\n", + node, source_desc, entry_type)); - status = acpi_ex_read_data_from_field (val_desc, &obj_desc); + status = acpi_ex_read_data_from_field (source_desc, &obj_desc); break; @@ -200,7 +201,7 @@ /* Return an additional reference to the object */ - obj_desc = val_desc; + obj_desc = source_desc; acpi_ut_add_reference (obj_desc); break; @@ -222,7 +223,7 @@ */ case INTERNAL_TYPE_REFERENCE: - switch (val_desc->reference.opcode) { + switch (source_desc->reference.opcode) { case AML_ZERO_OP: @@ -241,13 +242,13 @@ case AML_REVISION_OP: - temp_val = ACPI_CA_VERSION; + temp_val = ACPI_CA_SUPPORT_LEVEL; break; default: ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported reference opcode %X\n", - val_desc->reference.opcode)); + source_desc->reference.opcode)); return_ACPI_STATUS (AE_AML_BAD_OPCODE); } @@ -261,9 +262,15 @@ obj_desc->integer.value = temp_val; - /* Truncate value if we are executing from a 32-bit ACPI table */ - - acpi_ex_truncate_for32bit_table (obj_desc, walk_state); + /* + * Truncate value if we are executing from a 32-bit ACPI table + * AND actually executing AML code. If we are resolving + * an object in the namespace via an external call to the + * subsystem, we will have a null Walk_state + */ + if (walk_state) { + acpi_ex_truncate_for32bit_table (obj_desc, walk_state); + } break; @@ -281,7 +288,7 @@ /* Put the object descriptor on the stack */ - *stack_ptr = (void *) obj_desc; + *object_ptr = (void *) obj_desc; return_ACPI_STATUS (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exresolv.c linux/drivers/acpi/executer/exresolv.c --- v2.4.13/linux/drivers/acpi/executer/exresolv.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exresolv.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exresolv - AML Interpreter object resolution - * $Revision: 99 $ + * $Revision: 101 $ * *****************************************************************************/ @@ -131,12 +131,14 @@ (result_desc->integer.value >> obj_desc->buffer_field.start_field_bit_offset) & mask; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "** Read from buffer %p byte %ld bit %d width %d addr %p mask %08lx val %08lx\n", + "** Read from buffer %p byte %d bit %d width %d addr %p mask %08X val %8.8X%8.8X\n", obj_desc->buffer_field.buffer_obj->buffer.pointer, obj_desc->buffer_field.base_byte_offset, obj_desc->buffer_field.start_field_bit_offset, obj_desc->buffer_field.bit_length, - location, mask, result_desc->integer.value)); + location, mask, + HIDWORD(result_desc->integer.value), + LODWORD(result_desc->integer.value))); return_ACPI_STATUS (AE_OK); } @@ -323,7 +325,7 @@ break; case AML_REVISION_OP: - obj_desc->integer.value = ACPI_CA_VERSION; + obj_desc->integer.value = ACPI_CA_SUPPORT_LEVEL; break; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exresop.c linux/drivers/acpi/executer/exresop.c --- v2.4.13/linux/drivers/acpi/executer/exresop.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exresop.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exresop - AML Interpreter operand/object resolution - * $Revision: 38 $ + * $Revision: 41 $ * *****************************************************************************/ @@ -120,7 +120,7 @@ op_info = acpi_ps_get_opcode_info (opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (op_info->class == AML_CLASS_UNKNOWN) { return_ACPI_STATUS (AE_AML_BAD_OPCODE); } @@ -146,7 +146,7 @@ */ while (GET_CURRENT_ARG_TYPE (arg_types)) { if (!stack_ptr || !*stack_ptr) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null stack entry at %X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null stack entry at %p\n", stack_ptr)); return_ACPI_STATUS (AE_AML_INTERNAL); @@ -183,7 +183,7 @@ * Decode the Reference */ op_info = acpi_ps_get_opcode_info (opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (op_info->class == AML_CLASS_UNKNOWN) { return_ACPI_STATUS (AE_AML_BAD_OPCODE); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exstore.c linux/drivers/acpi/executer/exstore.c --- v2.4.13/linux/drivers/acpi/executer/exstore.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exstore.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exstore - AML Interpreter object store support - * $Revision: 148 $ + * $Revision: 150 $ * *****************************************************************************/ @@ -42,15 +42,14 @@ * * FUNCTION: Acpi_ex_store * - * PARAMETERS: *Val_desc - Value to be stored + * PARAMETERS: *Source_desc - Value to be stored * *Dest_desc - Where to store it. Must be an NS node * or an acpi_operand_object of type - * Reference; if the latter the descriptor - * will be either reused or deleted. + * Reference; * * RETURN: Status * - * DESCRIPTION: Store the value described by Val_desc into the location + * DESCRIPTION: Store the value described by Source_desc into the location * described by Dest_desc. Called by various interpreter * functions to store the result of an operation into * the destination operand. @@ -59,7 +58,7 @@ acpi_status acpi_ex_store ( - acpi_operand_object *val_desc, + acpi_operand_object *source_desc, acpi_operand_object *dest_desc, acpi_walk_state *walk_state) { @@ -72,7 +71,7 @@ /* Validate parameters */ - if (!val_desc || !dest_desc) { + if (!source_desc || !dest_desc) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null pointer\n")); return_ACPI_STATUS (AE_AML_NO_OPERAND); } @@ -84,7 +83,7 @@ * Dest is a namespace node, * Storing an object into a Name "container" */ - status = acpi_ex_store_object_to_node (val_desc, + status = acpi_ex_store_object_to_node (source_desc, (acpi_namespace_node *) dest_desc, walk_state); /* All done, that's it */ @@ -101,7 +100,7 @@ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Destination is not a Reference_obj [%p]\n", dest_desc)); - DUMP_STACK_ENTRY (val_desc); + DUMP_STACK_ENTRY (source_desc); DUMP_STACK_ENTRY (dest_desc); DUMP_OPERANDS (&dest_desc, IMODE_EXECUTE, "Ex_store", 2, "Target is not a Reference_obj"); @@ -125,7 +124,7 @@ /* Storing an object into a Name "container" */ - status = acpi_ex_store_object_to_node (val_desc, ref_desc->reference.object, + status = acpi_ex_store_object_to_node (source_desc, ref_desc->reference.object, walk_state); break; @@ -134,7 +133,7 @@ /* Storing to an Index (pointer into a packager or buffer) */ - status = acpi_ex_store_object_to_index (val_desc, ref_desc, walk_state); + status = acpi_ex_store_object_to_index (source_desc, ref_desc, walk_state); break; @@ -144,7 +143,7 @@ /* Store to a method local/arg */ status = acpi_ds_store_object_to_local (ref_desc->reference.opcode, - ref_desc->reference.offset, val_desc, walk_state); + ref_desc->reference.offset, source_desc, walk_state); break; @@ -157,39 +156,39 @@ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Write to Debug Object: ****:\n\n")); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[ACPI Debug] %s: ", - acpi_ut_get_type_name (val_desc->common.type))); + acpi_ut_get_type_name (source_desc->common.type))); - switch (val_desc->common.type) { + switch (source_desc->common.type) { case ACPI_TYPE_INTEGER: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "0x%X (%d)\n", - (u32) val_desc->integer.value, (u32) val_desc->integer.value)); + (u32) source_desc->integer.value, (u32) source_desc->integer.value)); break; case ACPI_TYPE_BUFFER: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "Length 0x%X\n", - (u32) val_desc->buffer.length)); + (u32) source_desc->buffer.length)); break; case ACPI_TYPE_STRING: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "%s\n", val_desc->string.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "%s\n", source_desc->string.pointer)); break; case ACPI_TYPE_PACKAGE: ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "Elements - 0x%X\n", - (u32) val_desc->package.elements)); + (u32) source_desc->package.elements)); break; default: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "@0x%p\n", val_desc)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "@0x%p\n", source_desc)); break; } @@ -224,12 +223,6 @@ } /* switch (Ref_desc->Reference.Opcode) */ - /* Always delete the reference descriptor object */ - - if (ref_desc) { - acpi_ut_remove_reference (ref_desc); - } - return_ACPI_STATUS (status); } @@ -238,7 +231,7 @@ * * FUNCTION: Acpi_ex_store_object_to_index * - * PARAMETERS: *Val_desc - Value to be stored + * PARAMETERS: *Source_desc - Value to be stored * *Node - Named object to receive the value * * RETURN: Status @@ -249,7 +242,7 @@ acpi_status acpi_ex_store_object_to_index ( - acpi_operand_object *val_desc, + acpi_operand_object *source_desc, acpi_operand_object *dest_desc, acpi_walk_state *walk_state) { @@ -278,7 +271,7 @@ if (dest_desc->reference.target_type == ACPI_TYPE_PACKAGE) { /* * The object at *(Dest_desc->Reference.Where) is the - * element within the package that is to be modified. + * element within the package that is to be modified. */ obj_desc = *(dest_desc->reference.where); if (obj_desc) { @@ -288,16 +281,12 @@ * * TBD: [Investigate] Should both the src and dest be required * to be packages? - * && (Val_desc->Common.Type == ACPI_TYPE_PACKAGE) + * && (Source_desc->Common.Type == ACPI_TYPE_PACKAGE) */ if (obj_desc->common.type == ACPI_TYPE_PACKAGE) { - /* - * Take away the reference for being part of a package and - * delete - */ - acpi_ut_remove_reference (obj_desc); - acpi_ut_remove_reference (obj_desc); + /* Take away the reference for being part of a package */ + acpi_ut_remove_reference (obj_desc); obj_desc = NULL; } } @@ -307,9 +296,9 @@ * If the Obj_desc is NULL, it means that an uninitialized package * element has been used as a destination (this is OK), therefore, * we must create the destination element to match the type of the - * source element NOTE: Val_desc can be of any type. + * source element NOTE: Source_desccan be of any type. */ - obj_desc = acpi_ut_create_internal_object (val_desc->common.type); + obj_desc = acpi_ut_create_internal_object (source_desc->common.type); if (!obj_desc) { return_ACPI_STATUS (AE_NO_MEMORY); } @@ -318,29 +307,25 @@ * If the source is a package, copy the source to the new dest */ if (ACPI_TYPE_PACKAGE == obj_desc->common.type) { - status = acpi_ut_copy_ipackage_to_ipackage (val_desc, obj_desc, walk_state); + status = acpi_ut_copy_ipackage_to_ipackage (source_desc, obj_desc, walk_state); if (ACPI_FAILURE (status)) { acpi_ut_remove_reference (obj_desc); return_ACPI_STATUS (status); } } - /* - * Install the new descriptor into the package and add a - * reference to the newly created descriptor for now being - * part of the parent package - */ + /* Install the new descriptor into the package */ + *(dest_desc->reference.where) = obj_desc; - acpi_ut_add_reference (obj_desc); } if (ACPI_TYPE_PACKAGE != obj_desc->common.type) { /* * The destination element is not a package, so we need to - * convert the contents of the source (Val_desc) and copy into + * convert the contents of the source (Source_desc) and copy into * the destination (Obj_desc) */ - status = acpi_ex_store_object_to_object (val_desc, obj_desc, + status = acpi_ex_store_object_to_object (source_desc, obj_desc, walk_state); if (ACPI_FAILURE (status)) { /* @@ -380,7 +365,7 @@ * The assignment of the individual elements will be slightly * different for each source type. */ - switch (val_desc->common.type) { + switch (source_desc->common.type) { case ACPI_TYPE_INTEGER: /* * Type is Integer, assign bytewise @@ -389,7 +374,7 @@ */ length = sizeof (acpi_integer); for (i = length; i != 0; i--) { - value = (u8)(val_desc->integer.value >> (MUL_8 (i - 1))); + value = (u8)(source_desc->integer.value >> (MUL_8 (i - 1))); obj_desc->buffer.pointer[dest_desc->reference.offset] = value; } break; @@ -400,9 +385,9 @@ * Type is Buffer, the Length is in the structure. * Just loop through the elements and assign each one in turn. */ - length = val_desc->buffer.length; + length = source_desc->buffer.length; for (i = 0; i < length; i++) { - value = val_desc->buffer.pointer[i]; + value = source_desc->buffer.pointer[i]; obj_desc->buffer.pointer[dest_desc->reference.offset] = value; } break; @@ -413,9 +398,9 @@ * Type is String, the Length is in the structure. * Just loop through the elements and assign each one in turn. */ - length = val_desc->string.length; + length = source_desc->string.length; for (i = 0; i < length; i++) { - value = val_desc->string.pointer[i]; + value = source_desc->string.pointer[i]; obj_desc->buffer.pointer[dest_desc->reference.offset] = value; } break; @@ -427,7 +412,7 @@ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Source must be Number/Buffer/String type, not %X\n", - val_desc->common.type)); + source_desc->common.type)); status = AE_AML_OPERAND_TYPE; break; } @@ -548,6 +533,7 @@ * Source_desc reference count is incremented by Attach_object. */ status = acpi_ns_attach_object (node, target_desc, target_type); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Store %s into %s via Convert/Attach\n", acpi_ut_get_type_name (target_desc->common.type), @@ -564,7 +550,6 @@ /* No conversions for all other types. Just attach the source object */ status = acpi_ns_attach_object (node, source_desc, source_desc->common.type); - break; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exutils.c linux/drivers/acpi/executer/exutils.c --- v2.4.13/linux/drivers/acpi/executer/exutils.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exutils.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: exutils - interpreter/scanner utilities - * $Revision: 84 $ + * $Revision: 85 $ * *****************************************************************************/ @@ -265,16 +265,16 @@ * * FUNCTION: Acpi_ex_digits_needed * - * PARAMETERS: val - Value to be represented - * base - Base of representation + * PARAMETERS: Value - Value to be represented + * Base - Base of representation * - * RETURN: the number of digits needed to represent val in base + * RETURN: the number of digits needed to represent Value in Base * ******************************************************************************/ u32 acpi_ex_digits_needed ( - acpi_integer val, + acpi_integer value, u32 base) { u32 num_digits = 0; @@ -289,9 +289,11 @@ else { /* - * acpi_integer is unsigned, which is why we don't worry about the '-' + * acpi_integer is unsigned, which is why we don't worry about a '-' */ - for (num_digits = 1; (val = ACPI_DIVIDE (val,base)); ++num_digits) { ; } + for (num_digits = 1; + (acpi_ut_short_divide (&value, base, &value, NULL)); + ++num_digits) { ; } } return_VALUE (num_digits); @@ -394,17 +396,18 @@ { u32 count; u32 digits_needed; + u32 remainder; FUNCTION_ENTRY (); digits_needed = acpi_ex_digits_needed (value, 10); - out_string[digits_needed] = '\0'; + out_string[digits_needed] = 0; for (count = digits_needed; count > 0; count--) { - out_string[count-1] = (NATIVE_CHAR) ('0' + (ACPI_MODULO (value, 10))); - value = ACPI_DIVIDE (value, 10); + acpi_ut_short_divide (&value, 10, &value, &remainder); + out_string[count-1] = (NATIVE_CHAR) ('0' + remainder); } return (AE_OK); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/executer/exxface.c linux/drivers/acpi/executer/exxface.c --- v2.4.13/linux/drivers/acpi/executer/exxface.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/executer/exxface.c Wed Dec 31 16:00:00 1969 @@ -1,102 +0,0 @@ - -/****************************************************************************** - * - * Module Name: exxface - External interpreter interfaces - * $Revision: 29 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000, 2001 R. Byron Moore - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - - -#include "acpi.h" -#include "acinterp.h" - - -#define _COMPONENT ACPI_EXECUTER - MODULE_NAME ("exxface") - -#if 0 - -/* - * DEFINE_AML_GLOBALS is tested in amlcode.h - * to determine whether certain global names should be "defined" or only - * "declared" in the current compilation. This enhances maintainability - * by enabling a single header file to embody all knowledge of the names - * in question. - * - * Exactly one module of any executable should #define DEFINE_GLOBALS - * before #including the header files which use this convention. The - * names in question will be defined and initialized in that module, - * and declared as extern in all other modules which #include those - * header files. - */ - -#define DEFINE_AML_GLOBALS -#include "amlcode.h" -#include "acparser.h" -#include "acnamesp.h" - - -/******************************************************************************* - * - * FUNCTION: Acpi_ex_execute_method - * - * PARAMETERS: Pcode - Pointer to the pcode stream - * Pcode_length - Length of pcode that comprises the method - * **Params - List of parameters to pass to method, - * terminated by NULL. Params itself may be - * NULL if no parameters are being passed. - * - * RETURN: Status - * - * DESCRIPTION: Execute a control method - * - ******************************************************************************/ - -acpi_status -acpi_ex_execute_method ( - acpi_namespace_node *method_node, - acpi_operand_object **params, - acpi_operand_object **return_obj_desc) -{ - acpi_status status; - - - FUNCTION_TRACE ("Ex_execute_method"); - - - /* - * The point here is to lock the interpreter and call the low - * level execute. - */ - status = acpi_ex_enter_interpreter (); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - - status = acpi_psx_execute (method_node, params, return_obj_desc); - - acpi_ex_exit_interpreter (); - - return_ACPI_STATUS (status); -} - - -#endif diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/hardware/hwacpi.c linux/drivers/acpi/hardware/hwacpi.c --- v2.4.13/linux/drivers/acpi/hardware/hwacpi.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/hardware/hwacpi.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: hwacpi - ACPI Hardware Initialization/Mode Interface - * $Revision: 45 $ + * $Revision: 46 $ * *****************************************************************************/ @@ -220,7 +220,7 @@ /* Give the platform some time to react */ - acpi_os_stall (5000); + acpi_os_stall (20000); if (acpi_hw_get_mode () == mode) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Mode %X successfully enabled\n", mode)); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/hardware/hwgpe.c linux/drivers/acpi/hardware/hwgpe.c --- v2.4.13/linux/drivers/acpi/hardware/hwgpe.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/hardware/hwgpe.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Module Name: hwgpe - Low level GPE enable/disable/clear functions - * $Revision: 32 $ + * $Revision: 35 $ * *****************************************************************************/ @@ -77,6 +77,45 @@ (in_byte | bit_mask), 8); } +/****************************************************************************** + * + * FUNCTION: Acpi_hw_enable_gpe_for_wakeup + * + * PARAMETERS: Gpe_number - The GPE + * + * RETURN: None + * + * DESCRIPTION: Keep track of which GPEs the OS has requested not be + * disabled when going to sleep. + * + ******************************************************************************/ + +void +acpi_hw_enable_gpe_for_wakeup ( + u32 gpe_number) +{ + u32 register_index; + u32 bit_mask; + + + FUNCTION_ENTRY (); + + + /* + * Translate GPE number to index into global registers array. + */ + register_index = acpi_gbl_gpe_valid[gpe_number]; + + /* + * Figure out the bit offset for this GPE within the target register. + */ + bit_mask = acpi_gbl_decode_to8bit [MOD_8 (gpe_number)]; + + /* + * Set the bit so we will not disable this when sleeping + */ + acpi_gbl_gpe_registers[register_index].wake_enable |= bit_mask; +} /****************************************************************************** * @@ -120,8 +159,49 @@ acpi_os_read_port (acpi_gbl_gpe_registers[register_index].enable_addr, &in_byte, 8); acpi_os_write_port (acpi_gbl_gpe_registers[register_index].enable_addr, (in_byte & ~bit_mask), 8); + + acpi_hw_disable_gpe_for_wakeup(gpe_number); } +/****************************************************************************** + * + * FUNCTION: Acpi_hw_disable_gpe_for_wakeup + * + * PARAMETERS: Gpe_number - The GPE + * + * RETURN: None + * + * DESCRIPTION: Keep track of which GPEs the OS has requested not be + * disabled when going to sleep. + * + ******************************************************************************/ + +void +acpi_hw_disable_gpe_for_wakeup ( + u32 gpe_number) +{ + u32 register_index; + u32 bit_mask; + + + FUNCTION_ENTRY (); + + + /* + * Translate GPE number to index into global registers array. + */ + register_index = acpi_gbl_gpe_valid[gpe_number]; + + /* + * Figure out the bit offset for this GPE within the target register. + */ + bit_mask = acpi_gbl_decode_to8bit [MOD_8 (gpe_number)]; + + /* + * Clear the bit so we will disable this when sleeping + */ + acpi_gbl_gpe_registers[register_index].wake_enable &= ~bit_mask; +} /****************************************************************************** * @@ -215,11 +295,88 @@ } /* + * Enabled for wake?: + */ + if (bit_mask & acpi_gbl_gpe_registers[register_index].wake_enable) { + (*event_status) |= ACPI_EVENT_FLAG_WAKE_ENABLED; + } + + /* * Set? */ in_byte = 0; acpi_os_read_port (acpi_gbl_gpe_registers[register_index].status_addr, &in_byte, 8); if (bit_mask & in_byte) { (*event_status) |= ACPI_EVENT_FLAG_SET; + } +} + +/****************************************************************************** + * + * FUNCTION: Acpi_hw_disable_non_wakeup_gpes + * + * PARAMETERS: None + * + * RETURN: None + * + * DESCRIPTION: Disable all non-wakeup GPEs + * Call with interrupts disabled. The interrupt handler also + * modifies Acpi_gbl_Gpe_registers[i].Enable, so it should not be + * given the chance to run until after non-wake GPEs are + * re-enabled. + * + ******************************************************************************/ + +void +acpi_hw_disable_non_wakeup_gpes ( + void) +{ + u32 i; + + FUNCTION_ENTRY (); + + for (i = 0; i < acpi_gbl_gpe_register_count; i++) { + /* + * Read the enabled status of all GPEs. We + * will be using it to restore all the GPEs later. + */ + acpi_os_read_port (acpi_gbl_gpe_registers[i].enable_addr, + &acpi_gbl_gpe_registers[i].enable, 8); + + /* + * Disable all GPEs but wakeup GPEs. + */ + acpi_os_write_port(acpi_gbl_gpe_registers[i].enable_addr, + acpi_gbl_gpe_registers[i].wake_enable, 8); + } +} + +/****************************************************************************** + * + * FUNCTION: Acpi_hw_enable_non_wakeup_gpes + * + * PARAMETERS: None + * + * RETURN: None + * + * DESCRIPTION: Enable all non-wakeup GPEs we previously enabled. + * + ******************************************************************************/ + +void +acpi_hw_enable_non_wakeup_gpes ( + void) +{ + u32 i; + + FUNCTION_ENTRY (); + + for (i = 0; i < acpi_gbl_gpe_register_count; i++) { + /* + * We previously stored the enabled status of all GPEs. + * Blast them back in. + */ + acpi_os_write_port(acpi_gbl_gpe_registers[i].enable_addr, + acpi_gbl_gpe_registers[i].enable, 8); } } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/hardware/hwregs.c linux/drivers/acpi/hardware/hwregs.c --- v2.4.13/linux/drivers/acpi/hardware/hwregs.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/hardware/hwregs.c Wed Oct 24 14:06:22 2001 @@ -3,7 +3,7 @@ * * Module Name: hwregs - Read/write access functions for the various ACPI * control and status registers. - * $Revision: 109 $ + * $Revision: 110 $ * ******************************************************************************/ @@ -453,8 +453,9 @@ register_value = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, PM2_CONTROL); - ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM2 control: Read %X from %p\n", - register_value, ACPI_GET_ADDRESS (acpi_gbl_FADT->Xpm2_cnt_blk.address))); + ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM2 control: Read %X from %8.8X%8.8X\n", + register_value, HIDWORD(acpi_gbl_FADT->Xpm2_cnt_blk.address), + LODWORD(acpi_gbl_FADT->Xpm2_cnt_blk.address))); if (read_write == ACPI_WRITE) { register_value &= ~mask; @@ -462,8 +463,10 @@ value &= mask; register_value |= value; - ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %p\n", register_value, - acpi_gbl_FADT->Xpm2_cnt_blk.address)); + ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %8.8X%8.8X\n", + register_value, + HIDWORD(acpi_gbl_FADT->Xpm2_cnt_blk.address), + LODWORD(acpi_gbl_FADT->Xpm2_cnt_blk.address))); acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, PM2_CONTROL, (u8) (register_value)); @@ -476,8 +479,10 @@ mask = TMR_VAL_MASK; register_value = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, PM_TIMER); - ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM_TIMER: Read %X from %p\n", - register_value, ACPI_GET_ADDRESS (acpi_gbl_FADT->Xpm_tmr_blk.address))); + ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM_TIMER: Read %X from %8.8X%8.8X\n", + register_value, + HIDWORD(acpi_gbl_FADT->Xpm_tmr_blk.address), + LODWORD(acpi_gbl_FADT->Xpm_tmr_blk.address))); break; @@ -732,13 +737,13 @@ break; - case PM1_a_CONTROL: /* 16-bit access */ + case PM1A_CONTROL: /* 16-bit access */ acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0); break; - case PM1_b_CONTROL: /* 16-bit access */ + case PM1B_CONTROL: /* 16-bit access */ acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0); break; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/hardware/hwsleep.c linux/drivers/acpi/hardware/hwsleep.c --- v2.4.13/linux/drivers/acpi/hardware/hwsleep.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/hardware/hwsleep.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface - * $Revision: 21 $ + * $Revision: 22 $ * *****************************************************************************/ @@ -137,8 +137,8 @@ acpi_object arg; u8 type_a; u8 type_b; - u16 PM1_acontrol; - u16 PM1_bcontrol; + u16 PM1Acontrol; + u16 PM1Bcontrol; FUNCTION_TRACE ("Acpi_enter_sleep_state"); @@ -171,31 +171,31 @@ disable (); - /* TODO: disable all non-wake GPEs here */ + acpi_hw_disable_non_wakeup_gpes(); - PM1_acontrol = (u16) acpi_hw_register_read (ACPI_MTX_LOCK, PM1_CONTROL); + PM1Acontrol = (u16) acpi_hw_register_read (ACPI_MTX_LOCK, PM1_CONTROL); ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Entering S%d\n", sleep_state)); /* mask off SLP_EN and SLP_TYP fields */ - PM1_acontrol &= ~(SLP_TYPE_X_MASK | SLP_EN_MASK); - PM1_bcontrol = PM1_acontrol; + PM1Acontrol &= ~(SLP_TYPE_X_MASK | SLP_EN_MASK); + PM1Bcontrol = PM1Acontrol; /* mask in SLP_TYP */ - PM1_acontrol |= (type_a << acpi_hw_get_bit_shift (SLP_TYPE_X_MASK)); - PM1_bcontrol |= (type_b << acpi_hw_get_bit_shift (SLP_TYPE_X_MASK)); + PM1Acontrol |= (type_a << acpi_hw_get_bit_shift (SLP_TYPE_X_MASK)); + PM1Bcontrol |= (type_b << acpi_hw_get_bit_shift (SLP_TYPE_X_MASK)); /* write #1: fill in SLP_TYP data */ - acpi_hw_register_write (ACPI_MTX_LOCK, PM1_a_CONTROL, PM1_acontrol); - acpi_hw_register_write (ACPI_MTX_LOCK, PM1_b_CONTROL, PM1_bcontrol); + acpi_hw_register_write (ACPI_MTX_LOCK, PM1A_CONTROL, PM1Acontrol); + acpi_hw_register_write (ACPI_MTX_LOCK, PM1B_CONTROL, PM1Bcontrol); /* mask in SLP_EN */ - PM1_acontrol |= (1 << acpi_hw_get_bit_shift (SLP_EN_MASK)); - PM1_bcontrol |= (1 << acpi_hw_get_bit_shift (SLP_EN_MASK)); + PM1Acontrol |= (1 << acpi_hw_get_bit_shift (SLP_EN_MASK)); + PM1Bcontrol |= (1 << acpi_hw_get_bit_shift (SLP_EN_MASK)); /* flush caches */ @@ -203,8 +203,8 @@ /* write #2: SLP_TYP + SLP_EN */ - acpi_hw_register_write (ACPI_MTX_LOCK, PM1_a_CONTROL, PM1_acontrol); - acpi_hw_register_write (ACPI_MTX_LOCK, PM1_b_CONTROL, PM1_bcontrol); + acpi_hw_register_write (ACPI_MTX_LOCK, PM1A_CONTROL, PM1Acontrol); + acpi_hw_register_write (ACPI_MTX_LOCK, PM1B_CONTROL, PM1Bcontrol); /* * Wait a second, then try again. This is to get S4/5 to work on all machines. @@ -223,6 +223,8 @@ } while (!acpi_hw_register_bit_access (ACPI_READ, ACPI_MTX_LOCK, WAK_STS)); + acpi_hw_enable_non_wakeup_gpes(); + enable (); return_ACPI_STATUS (AE_OK); @@ -264,7 +266,7 @@ /* _WAK returns stuff - do we want to look at it? */ - /* Re-enable GPEs */ + acpi_hw_enable_non_wakeup_gpes(); return_ACPI_STATUS (AE_OK); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/hardware/hwtimer.c linux/drivers/acpi/hardware/hwtimer.c --- v2.4.13/linux/drivers/acpi/hardware/hwtimer.c Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/hardware/hwtimer.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Name: hwtimer.c - ACPI Power Management Timer Interface - * $Revision: 12 $ + * $Revision: 14 $ * *****************************************************************************/ @@ -47,19 +47,9 @@ acpi_get_timer_resolution ( u32 *resolution) { - acpi_status status; - - FUNCTION_TRACE ("Acpi_get_timer_resolution"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - if (!resolution) { return_ACPI_STATUS (AE_BAD_PARAMETER); } @@ -92,18 +82,8 @@ acpi_get_timer ( u32 *ticks) { - acpi_status status; - - FUNCTION_TRACE ("Acpi_get_timer"); - - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } if (!ticks) { return_ACPI_STATUS (AE_BAD_PARAMETER); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acconfig.h linux/drivers/acpi/include/acconfig.h --- v2.4.13/linux/drivers/acpi/include/acconfig.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acconfig.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acconfig.h - Global configuration constants - * $Revision: 69 $ + * $Revision: 74 $ * *****************************************************************************/ @@ -53,7 +53,11 @@ /* Version string */ -#define ACPI_CA_VERSION 0x20010831 +#define ACPI_CA_VERSION 0x20011018 + +/* Version of ACPI supported */ + +#define ACPI_CA_SUPPORT_LEVEL 2 /* Maximum objects in the various object caches */ @@ -78,7 +82,7 @@ /* Max reference count (for debug only) */ -#define MAX_REFERENCE_COUNT 0x200 +#define MAX_REFERENCE_COUNT 0x400 /* Size of cached memory mapping for system memory operation region */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acdebug.h linux/drivers/acpi/include/acdebug.h --- v2.4.13/linux/drivers/acpi/include/acdebug.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acdebug.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acdebug.h - ACPI/AML debugger - * $Revision: 47 $ + * $Revision: 50 $ * *****************************************************************************/ @@ -35,7 +35,7 @@ extern int optind; extern NATIVE_CHAR *optarg; -extern u8 *aml_ptr; +extern u8 *aml_start; extern u32 aml_length; extern u8 acpi_gbl_db_opt_tables; @@ -57,6 +57,7 @@ extern u8 acpi_gbl_db_output_flags; extern u32 acpi_gbl_db_debug_level; extern u32 acpi_gbl_db_console_debug_level; +extern acpi_table_header *acpi_gbl_db_table_ptr; /* * Statistic globals @@ -119,11 +120,15 @@ acpi_db_initialize ( void); +void +acpi_db_terminate ( + void); + acpi_status acpi_db_single_step ( acpi_walk_state *walk_state, acpi_parse_object *op, - u8 op_type); + u32 op_type); /* diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acdispat.h linux/drivers/acpi/include/acdispat.h --- v2.4.13/linux/drivers/acpi/include/acdispat.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acdispat.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acdispat.h - dispatcher (parser to interpreter interface) - * $Revision: 40 $ + * $Revision: 45 $ * *****************************************************************************/ @@ -86,25 +86,20 @@ acpi_status acpi_ds_get_predicate_value ( acpi_walk_state *walk_state, - acpi_parse_object *op, u32 has_result_obj); acpi_status acpi_ds_exec_begin_op ( - u16 opcode, - acpi_parse_object *op, acpi_walk_state *walk_state, acpi_parse_object **out_op); acpi_status acpi_ds_exec_end_op ( - acpi_walk_state *state, - acpi_parse_object *op); + acpi_walk_state *state); /* dsfield - Parser/Interpreter interface for AML fields */ - acpi_status acpi_ds_create_field ( acpi_parse_object *op, @@ -123,44 +118,36 @@ acpi_namespace_node *region_node, acpi_walk_state *walk_state); +acpi_status +acpi_ds_create_buffer_field ( + acpi_parse_object *op, + acpi_walk_state *walk_state); + /* dsload - Parser/Interpreter interface, namespace load callbacks */ acpi_status acpi_ds_load1_begin_op ( - u16 opcode, - acpi_parse_object *op, acpi_walk_state *walk_state, acpi_parse_object **out_op); acpi_status acpi_ds_load1_end_op ( - acpi_walk_state *walk_state, - acpi_parse_object *op); + acpi_walk_state *walk_state); acpi_status acpi_ds_load2_begin_op ( - u16 opcode, - acpi_parse_object *op, acpi_walk_state *walk_state, acpi_parse_object **out_op); acpi_status acpi_ds_load2_end_op ( - acpi_walk_state *state, - acpi_parse_object *op); + acpi_walk_state *walk_state); acpi_status -acpi_ds_load3_begin_op ( - u16 opcode, - acpi_parse_object *op, +acpi_ds_init_callbacks ( acpi_walk_state *walk_state, - acpi_parse_object **out_op); - -acpi_status -acpi_ds_load3_end_op ( - acpi_walk_state *state, - acpi_parse_object *op); + u32 pass_number); /* dsmthdat - method data (locals/args) */ @@ -374,7 +361,7 @@ acpi_walk_state *walk_state); -/* Acpi_dswstate - parser WALK_STATE management routines */ +/* dswstate - parser WALK_STATE management routines */ acpi_walk_state * acpi_ds_create_walk_state ( @@ -384,6 +371,17 @@ acpi_walk_list *walk_list); acpi_status +acpi_ds_init_aml_walk ( + acpi_walk_state *walk_state, + acpi_parse_object *op, + acpi_namespace_node *method_node, + u8 *aml_start, + u32 aml_length, + acpi_operand_object **params, + acpi_operand_object **return_obj_desc, + u32 pass_number); + +acpi_status acpi_ds_obj_stack_delete_all ( acpi_walk_state *walk_state); @@ -398,6 +396,11 @@ acpi_walk_state * acpi_ds_pop_walk_state ( + acpi_walk_list *walk_list); + +void +acpi_ds_push_walk_state ( + acpi_walk_state *walk_state, acpi_walk_list *walk_list); acpi_status diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acevents.h linux/drivers/acpi/include/acevents.h --- v2.4.13/linux/drivers/acpi/include/acevents.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acevents.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acevents.h - Event subcomponent prototypes and defines - * $Revision: 65 $ + * $Revision: 66 $ * *****************************************************************************/ @@ -157,6 +157,20 @@ acpi_status acpi_ev_pci_config_region_setup ( + acpi_handle handle, + u32 function, + void *handler_context, + void **region_context); + +acpi_status +acpi_ev_cmos_region_setup ( + acpi_handle handle, + u32 function, + void *handler_context, + void **region_context); + +acpi_status +acpi_ev_pci_bar_region_setup ( acpi_handle handle, u32 function, void *handler_context, diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acglobal.h linux/drivers/acpi/include/acglobal.h --- v2.4.13/linux/drivers/acpi/include/acglobal.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acglobal.h Wed Oct 24 14:06:22 2001 @@ -94,7 +94,7 @@ * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs. * (The table maps local handles to the real OS handles) */ -ACPI_EXTERN ACPI_MUTEX_INFO acpi_gbl_acpi_mutex_info [NUM_MTX]; +ACPI_EXTERN acpi_mutex_info acpi_gbl_acpi_mutex_info [NUM_MTX]; /***************************************************************************** @@ -172,7 +172,7 @@ /* Address Space handlers */ -ACPI_EXTERN ACPI_ADR_SPACE_INFO acpi_gbl_address_spaces[ACPI_NUM_ADDRESS_SPACES]; +ACPI_EXTERN acpi_adr_space_info acpi_gbl_address_spaces[ACPI_NUM_ADDRESS_SPACES]; /* Control method single step flag */ @@ -194,10 +194,10 @@ * ****************************************************************************/ -ACPI_EXTERN ACPI_FIXED_EVENT_INFO acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS]; +ACPI_EXTERN acpi_fixed_event_info acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS]; ACPI_EXTERN acpi_handle acpi_gbl_gpe_obj_handle; ACPI_EXTERN u32 acpi_gbl_gpe_register_count; -ACPI_EXTERN ACPI_GPE_REGISTERS *acpi_gbl_gpe_registers; +ACPI_EXTERN acpi_gpe_registers *acpi_gbl_gpe_registers; ACPI_EXTERN acpi_gpe_level_info *acpi_gbl_gpe_info; /* diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/achware.h linux/drivers/acpi/include/achware.h --- v2.4.13/linux/drivers/acpi/include/achware.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/achware.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: achware.h -- hardware specific interfaces - * $Revision: 55 $ + * $Revision: 56 $ * *****************************************************************************/ @@ -105,20 +105,37 @@ void acpi_hw_enable_gpe ( - u32 gpe_index); + u32 gpe_number); + +void +acpi_hw_enable_gpe_for_wakeup ( + u32 gpe_number); void acpi_hw_disable_gpe ( - u32 gpe_index); + u32 gpe_number); + +void +acpi_hw_disable_gpe_for_wakeup ( + u32 gpe_number); void acpi_hw_clear_gpe ( - u32 gpe_index); + u32 gpe_number); void acpi_hw_get_gpe_status ( u32 gpe_number, acpi_event_status *event_status); + +void +acpi_hw_disable_non_wakeup_gpes ( + void); + +void +acpi_hw_enable_non_wakeup_gpes ( + void); + /* Sleep Prototypes */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acinterp.h linux/drivers/acpi/include/acinterp.h --- v2.4.13/linux/drivers/acpi/include/acinterp.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acinterp.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acinterp.h - Interpreter subcomponent prototypes and defines - * $Revision: 106 $ + * $Revision: 116 $ * *****************************************************************************/ @@ -179,51 +179,75 @@ */ acpi_status -acpi_ex_triadic ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc); +acpi_ex_opcode_3A_0T_0R ( + acpi_walk_state *walk_state); acpi_status -acpi_ex_hexadic ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc); +acpi_ex_opcode_3A_1T_1R ( + acpi_walk_state *walk_state); acpi_status -acpi_ex_create_buffer_field ( - u8 *aml_ptr, - u32 aml_length, - acpi_namespace_node *node, +acpi_ex_opcode_6A_0T_1R ( acpi_walk_state *walk_state); acpi_status -acpi_ex_reconfiguration ( - u16 opcode, +acpi_ex_get_object_reference ( + acpi_operand_object *obj_desc, + acpi_operand_object **return_desc, acpi_walk_state *walk_state); acpi_status +acpi_ex_do_concatenate ( + acpi_operand_object *obj_desc, + acpi_operand_object *obj_desc2, + acpi_operand_object **actual_return_desc, + acpi_walk_state *walk_state); + +u8 +acpi_ex_do_logical_op ( + u16 opcode, + acpi_integer operand0, + acpi_integer operand1); + +acpi_integer +acpi_ex_do_math_op ( + u16 opcode, + acpi_integer operand0, + acpi_integer operand1); + +acpi_status +acpi_ex_load_op ( + acpi_operand_object *rgn_desc, + acpi_operand_object *ddb_handle); + +acpi_status +acpi_ex_unload_table ( + acpi_operand_object *ddb_handle); + +acpi_status acpi_ex_create_mutex ( acpi_walk_state *walk_state); acpi_status acpi_ex_create_processor ( - acpi_parse_object *op, - acpi_namespace_node *processor_node); + acpi_walk_state *walk_state); acpi_status acpi_ex_create_power_resource ( - acpi_parse_object *op, - acpi_namespace_node *power_node); + acpi_walk_state *walk_state); acpi_status acpi_ex_create_region ( - u8 *aml_ptr, + u8 *aml_start, u32 aml_length, u8 region_space, acpi_walk_state *walk_state); acpi_status +acpi_ex_create_table_region ( + acpi_walk_state *walk_state); + +acpi_status acpi_ex_create_event ( acpi_walk_state *walk_state); @@ -233,10 +257,9 @@ acpi_status acpi_ex_create_method ( - u8 *aml_ptr, + u8 *aml_start, u32 aml_length, - u32 method_flags, - acpi_namespace_node *method); + acpi_walk_state *walk_state); /* @@ -301,6 +324,9 @@ u32 field_position, u32 field_length); +acpi_status +acpi_ex_prep_field_value ( + ACPI_CREATE_FIELD_INFO *info); /* * amsystem - Interface to OS services @@ -352,49 +378,40 @@ */ acpi_status -acpi_ex_monadic1 ( - u16 opcode, +acpi_ex_opcode_1A_0T_0R ( acpi_walk_state *walk_state); acpi_status -acpi_ex_monadic2 ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc); +acpi_ex_opcode_1A_0T_1R ( + acpi_walk_state *walk_state); acpi_status -acpi_ex_monadic2_r ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc); +acpi_ex_opcode_1A_1T_1R ( + acpi_walk_state *walk_state); +acpi_status +acpi_ex_opcode_1A_1T_0R ( + acpi_walk_state *walk_state); /* * amdyadic - ACPI AML (p-code) execution, dyadic operators */ acpi_status -acpi_ex_dyadic1 ( - u16 opcode, +acpi_ex_opcode_2A_0T_0R ( acpi_walk_state *walk_state); acpi_status -acpi_ex_dyadic2 ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc); +acpi_ex_opcode_2A_0T_1R ( + acpi_walk_state *walk_state); acpi_status -acpi_ex_dyadic2_r ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc); +acpi_ex_opcode_2A_1T_1R ( + acpi_walk_state *walk_state); acpi_status -acpi_ex_dyadic2_s ( - u16 opcode, - acpi_walk_state *walk_state, - acpi_operand_object **return_desc); +acpi_ex_opcode_2A_2T_1R ( + acpi_walk_state *walk_state); /* @@ -429,7 +446,7 @@ void acpi_ex_show_hex_value ( u32 byte_count, - u8 *aml_ptr, + u8 *aml_start, u32 lead_space); @@ -640,6 +657,24 @@ acpi_status acpi_ex_pci_config_space_handler ( + u32 function, + ACPI_PHYSICAL_ADDRESS address, + u32 bit_width, + u32 *value, + void *handler_context, + void *region_context); + +acpi_status +acpi_ex_cmos_space_handler ( + u32 function, + ACPI_PHYSICAL_ADDRESS address, + u32 bit_width, + u32 *value, + void *handler_context, + void *region_context); + +acpi_status +acpi_ex_pci_bar_space_handler ( u32 function, ACPI_PHYSICAL_ADDRESS address, u32 bit_width, diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/aclocal.h linux/drivers/acpi/include/aclocal.h --- v2.4.13/linux/drivers/acpi/include/aclocal.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/aclocal.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: aclocal.h - Internal data types used across the ACPI subsystem - * $Revision: 130 $ + * $Revision: 138 $ * *****************************************************************************/ @@ -29,7 +29,7 @@ #define WAIT_FOREVER ((u32) -1) -typedef void* ACPI_MUTEX; +typedef void* acpi_mutex; typedef u32 ACPI_MUTEX_HANDLE; @@ -40,7 +40,15 @@ /* Object descriptor types */ #define ACPI_CACHED_OBJECT 0x11 /* ORed in when object is cached */ -#define ACPI_DESC_TYPE_STATE 0x22 +#define ACPI_DESC_TYPE_STATE 0x20 +#define ACPI_DESC_TYPE_STATE_UPDATE 0x21 +#define ACPI_DESC_TYPE_STATE_PACKAGE 0x22 +#define ACPI_DESC_TYPE_STATE_CONTROL 0x23 +#define ACPI_DESC_TYPE_STATE_RPSCOPE 0x24 +#define ACPI_DESC_TYPE_STATE_PSCOPE 0x25 +#define ACPI_DESC_TYPE_STATE_WSCOPE 0x26 +#define ACPI_DESC_TYPE_STATE_RESULT 0x27 +#define ACPI_DESC_TYPE_STATE_NOTIFY 0x28 #define ACPI_DESC_TYPE_WALK 0x44 #define ACPI_DESC_TYPE_PARSER 0x66 #define ACPI_DESC_TYPE_INTERNAL 0x88 @@ -112,11 +120,11 @@ typedef struct acpi_mutex_info { - ACPI_MUTEX mutex; + acpi_mutex mutex; u32 use_count; u32 owner_id; -} ACPI_MUTEX_INFO; +} acpi_mutex_info; /* This owner ID means that the mutex is not in use (unlocked) */ @@ -181,7 +189,7 @@ u32 name; /* ACPI Name, always 4 chars per ACPI spec */ - void *object; /* Pointer to attached ACPI object (optional) */ + union acpi_operand_obj *object; /* Pointer to attached ACPI object (optional) */ struct acpi_node *child; /* first child */ struct acpi_node *peer; /* Next peer*/ u16 reference_count; /* Current count of references and children */ @@ -216,8 +224,8 @@ struct acpi_table_desc *installed_desc; acpi_table_header *pointer; void *base_pointer; - u8 *aml_pointer; - UINT64 physical_address; + u8 *aml_start; + u64 physical_address; u32 aml_length; u32 length; u32 count; @@ -235,13 +243,13 @@ acpi_handle *list; u32 *count; -} FIND_CONTEXT; +} find_context; typedef struct { acpi_namespace_node *node; -} NS_SEARCH_DATA; +} ns_search_data; /* @@ -274,7 +282,34 @@ u32 num_carats; u8 fully_qualified; -} ACPI_NAMESTRING_INFO; +} acpi_namestring_info; + + +/* Field creation info */ + +typedef struct +{ + acpi_namespace_node *region_node; + acpi_namespace_node *field_node; + acpi_namespace_node *register_node; + acpi_namespace_node *data_register_node; + u32 bank_value; + u32 field_bit_position; + u32 field_bit_length; + u8 field_flags; + u8 field_type; + +} ACPI_CREATE_FIELD_INFO; + +/* + * Field flags: Bits 00 - 03 : Access_type (Any_acc, Byte_acc, etc.) + * 04 : Lock_rule (1 == Lock) + * 05 - 06 : Update_rule + */ + +#define FIELD_ACCESS_TYPE_MASK 0x0F +#define FIELD_LOCK_RULE_MASK 0x10 +#define FIELD_UPDATE_RULE_MASK 0x60 /***************************************************************************** @@ -308,23 +343,24 @@ typedef struct { - ACPI_ADR_SPACE_HANDLER handler; + acpi_adr_space_handler handler; void *context; -} ACPI_ADR_SPACE_INFO; +} acpi_adr_space_info; /* Values and addresses of the GPE registers (both banks) */ typedef struct { - u8 status; /* Current value of status reg */ - u8 enable; /* Current value of enable reg */ u16 status_addr; /* Address of status reg */ u16 enable_addr; /* Address of enable reg */ + u8 status; /* Current value of status reg */ + u8 enable; /* Current value of enable reg */ + u8 wake_enable; /* Mask of bits to keep enabled when sleeping */ u8 gpe_base; /* Base GPE number */ -} ACPI_GPE_REGISTERS; +} acpi_gpe_registers; #define ACPI_GPE_LEVEL_TRIGGERED 1 @@ -338,7 +374,7 @@ u8 type; /* Level or Edge */ acpi_handle method_handle; /* Method handle for direct (fast) execution */ - ACPI_GPE_HANDLER handler; /* Address of handler, if any */ + acpi_gpe_handler handler; /* Address of handler, if any */ void *context; /* Context to be passed to handler */ } acpi_gpe_level_info; @@ -348,10 +384,10 @@ typedef struct { - ACPI_EVENT_HANDLER handler; /* Address of handler. */ + acpi_event_handler handler; /* Address of handler. */ void *context; /* Context to be passed to handler */ -} ACPI_FIXED_EVENT_INFO; +} acpi_fixed_event_info; /* Information used during field processing */ @@ -362,7 +398,7 @@ u8 field_flag; u32 pkg_length; -} ACPI_FIELD_INFO; +} acpi_field_info; /***************************************************************************** @@ -397,7 +433,7 @@ typedef struct acpi_common_state { ACPI_STATE_COMMON -} ACPI_COMMON_STATE; +} acpi_common_state; /* @@ -408,7 +444,7 @@ ACPI_STATE_COMMON union acpi_operand_obj *object; -} ACPI_UPDATE_STATE; +} acpi_update_state; /* @@ -424,7 +460,7 @@ u32 num_packages; u16 index; -} ACPI_PKG_STATE; +} acpi_pkg_state; /* @@ -437,7 +473,7 @@ struct acpi_parse_obj *predicate_op; u8 *aml_predicate_start; /* Start of if/while predicate */ -} ACPI_CONTROL_STATE; +} acpi_control_state; /* @@ -448,7 +484,7 @@ ACPI_STATE_COMMON acpi_namespace_node *node; -} ACPI_SCOPE_STATE; +} acpi_scope_state; typedef struct acpi_pscope_state @@ -460,7 +496,7 @@ u32 arg_list; /* next argument to parse */ u32 arg_count; /* Number of fixed arguments */ -} ACPI_PSCOPE_STATE; +} acpi_pscope_state; /* @@ -474,7 +510,17 @@ u8 num_results; u8 last_insert; -} ACPI_RESULT_VALUES; +} acpi_result_values; + + +typedef +acpi_status (*acpi_parse_downwards) ( + struct acpi_walk_state *walk_state, + struct acpi_parse_obj **out_op); + +typedef +acpi_status (*acpi_parse_upwards) ( + struct acpi_walk_state *walk_state); /* @@ -487,36 +533,34 @@ acpi_namespace_node *node; union acpi_operand_obj *handler_obj; -} ACPI_NOTIFY_INFO; +} acpi_notify_info; /* Generic state is union of structs above */ typedef union acpi_gen_state { - ACPI_COMMON_STATE common; - ACPI_CONTROL_STATE control; - ACPI_UPDATE_STATE update; - ACPI_SCOPE_STATE scope; - ACPI_PSCOPE_STATE parse_scope; - ACPI_PKG_STATE pkg; - ACPI_RESULT_VALUES results; - ACPI_NOTIFY_INFO notify; + acpi_common_state common; + acpi_control_state control; + acpi_update_state update; + acpi_scope_state scope; + acpi_pscope_state parse_scope; + acpi_pkg_state pkg; + acpi_result_values results; + acpi_notify_info notify; } acpi_generic_state; -typedef -acpi_status (*acpi_parse_downwards) ( - u16 opcode, - struct acpi_parse_obj *op, - struct acpi_walk_state *walk_state, - struct acpi_parse_obj **out_op); +/***************************************************************************** + * + * Interpreter typedefs and structs + * + ****************************************************************************/ typedef -acpi_status (*acpi_parse_upwards) ( - struct acpi_walk_state *walk_state, - struct acpi_parse_obj *op); +acpi_status (*ACPI_EXECUTE_OP) ( + struct acpi_walk_state *walk_state); /***************************************************************************** @@ -525,35 +569,6 @@ * ****************************************************************************/ -#define ACPI_OP_CLASS_MASK 0x1F -#define ACPI_OP_ARGS_MASK 0x20 -#define ACPI_OP_TYPE_MASK 0xC0 - -#define ACPI_OP_TYPE_OPCODE 0x00 -#define ACPI_OP_TYPE_ASCII 0x40 -#define ACPI_OP_TYPE_PREFIX 0x80 -#define ACPI_OP_TYPE_UNKNOWN 0xC0 - -#define ACPI_GET_OP_CLASS(a) ((a)->flags & ACPI_OP_CLASS_MASK) -#define ACPI_GET_OP_ARGS(a) ((a)->flags & ACPI_OP_ARGS_MASK) -#define ACPI_GET_OP_TYPE(a) ((a)->flags & ACPI_OP_TYPE_MASK) - -/* - * Flags byte: 0-4 (5 bits) = Opcode Class (0x001F - * 5 (1 bit) = Has arguments flag - * 6-7 (2 bits) = Reserved - */ -#define AML_NO_ARGS 0 -#define AML_HAS_ARGS 0x0020 -#define AML_NSOBJECT 0x0100 -#define AML_NSOPCODE 0x0200 -#define AML_NSNODE 0x0400 -#define AML_NAMED 0x0800 -#define AML_DEFER 0x1000 -#define AML_FIELD 0x2000 -#define AML_CREATE 0x4000 - - /* * AML opcode, name, and argument layout */ @@ -561,7 +576,9 @@ { u32 parse_args; /* Grammar/Parse time arguments */ u32 runtime_args; /* Interpret time arguments */ - u16 flags; /* Opcode type, Has_args flag */ + u16 flags; /* Misc flags */ + u8 class; /* Opcode class */ + u8 type; /* Opcode type */ #ifdef _OPCODE_NAMES NATIVE_CHAR *name; /* op name (debug only) */ @@ -583,7 +600,7 @@ NATIVE_CHAR *name; /* NULL terminated string */ struct acpi_parse_obj *arg; /* arguments and contained ops */ -} ACPI_PARSE_VALUE; +} acpi_parse_value; #define ACPI_PARSE_COMMON \ @@ -597,7 +614,7 @@ NATIVE_CHAR op_name[16]) /* op name (debug only) */\ /* NON-DEBUG members below: */\ acpi_namespace_node *node; /* for use by interpreter */\ - ACPI_PARSE_VALUE value; /* Value or args associated with the opcode */\ + acpi_parse_value value; /* Value or args associated with the opcode */\ /* @@ -627,18 +644,22 @@ * Parse state - one state per parser invocation and each control * method. */ - typedef struct acpi_parse_state { + u32 aml_size; u8 *aml_start; /* first AML byte */ u8 *aml; /* next AML byte */ u8 *aml_end; /* (last + 1) AML byte */ u8 *pkg_start; /* current package begin */ u8 *pkg_end; /* current package end */ - acpi_parse_object *start_op; /* root of parse tree */ + + struct acpi_parse_obj *start_op; /* root of parse tree */ struct acpi_node *start_node; - acpi_generic_state *scope; /* current scope */ - struct acpi_parse_state *next; + union acpi_gen_state *scope; /* current scope */ + + + struct acpi_parse_obj *start_scope; + } acpi_parse_state; @@ -683,8 +704,8 @@ #define PM1_STS 0x0100 #define PM1_EN 0x0200 #define PM1_CONTROL 0x0300 -#define PM1_a_CONTROL 0x0400 -#define PM1_b_CONTROL 0x0500 +#define PM1A_CONTROL 0x0400 +#define PM1B_CONTROL 0x0500 #define PM2_CONTROL 0x0600 #define PM_TIMER 0x0700 #define PROCESSOR_BLOCK 0x0800 @@ -838,7 +859,7 @@ { char buffer[ACPI_DEVICE_ID_LENGTH]; -} ACPI_DEVICE_ID; +} acpi_device_id; /***************************************************************************** @@ -879,7 +900,7 @@ NATIVE_CHAR *proc_name; NATIVE_CHAR *module_name; -} ACPI_DEBUG_PRINT_INFO; +} acpi_debug_print_info; /* Entry for a memory allocation (debug only) */ @@ -903,14 +924,14 @@ { ACPI_COMMON_DEBUG_MEM_HEADER -} ACPI_DEBUG_MEM_HEADER; +} acpi_debug_mem_header; typedef struct acpi_debug_mem_block { ACPI_COMMON_DEBUG_MEM_HEADER - UINT64 user_space; + u64 user_space; -} ACPI_DEBUG_MEM_BLOCK; +} acpi_debug_mem_block; #define ACPI_MEM_LIST_GLOBAL 0 diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acmacros.h linux/drivers/acpi/include/acmacros.h --- v2.4.13/linux/drivers/acpi/include/acmacros.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acmacros.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acmacros.h - C macros for the entire subsystem. - * $Revision: 94 $ + * $Revision: 97 $ * *****************************************************************************/ @@ -104,7 +104,7 @@ * Full 64-bit address/integer on both 32-bit and 64-bit platforms */ #ifndef LODWORD -#define LODWORD(l) ((u32)(UINT64)(l)) +#define LODWORD(l) ((u32)(u64)(l)) #endif #ifndef HIDWORD @@ -142,7 +142,7 @@ #define MOVE_UNALIGNED16_TO_16(d,s) *(u16*)(d) = *(u16*)(s) #define MOVE_UNALIGNED32_TO_32(d,s) *(u32*)(d) = *(u32*)(s) #define MOVE_UNALIGNED16_TO_32(d,s) *(u32*)(d) = *(u16*)(s) -#define MOVE_UNALIGNED64_TO_64(d,s) *(UINT64*)(d) = *(UINT64*)(s) +#define MOVE_UNALIGNED64_TO_64(d,s) *(u64*)(d) = *(u64*)(s) #else /* @@ -197,11 +197,6 @@ #define MUL_16(a) _MUL(a,4) #define MOD_16(a) _MOD(a,16) -/* - * Divide and Modulo - */ -#define ACPI_DIVIDE(n,d) ((n) / (d)) -#define ACPI_MODULO(n,d) ((n) % (d)) /* * Rounding macros (Power of two boundaries only) @@ -223,7 +218,7 @@ #define ROUND_BITS_UP_TO_BYTES(a) DIV_8((a) + 7) #define ROUND_BITS_DOWN_TO_BYTES(a) DIV_8((a)) -#define ROUND_UP_TO_1_k(a) (((a) + 1023) >> 10) +#define ROUND_UP_TO_1K(a) (((a) + 1023) >> 10) /* Generic (non-power-of-two) rounding */ @@ -243,9 +238,9 @@ #ifndef _IA16 -#define ACPI_PCI_DEVICE_MASK (UINT64) 0x0000FFFF00000000 -#define ACPI_PCI_FUNCTION_MASK (UINT64) 0x00000000FFFF0000 -#define ACPI_PCI_REGISTER_MASK (UINT64) 0x000000000000FFFF +#define ACPI_PCI_DEVICE_MASK (u64) 0x0000FFFF00000000 +#define ACPI_PCI_FUNCTION_MASK (u64) 0x00000000FFFF0000 +#define ACPI_PCI_REGISTER_MASK (u64) 0x000000000000FFFF #define ACPI_PCI_FUNCTION(a) (u16) ((((a) & ACPI_PCI_FUNCTION_MASK) >> 16)) #define ACPI_PCI_DEVICE(a) (u16) ((((a) & ACPI_PCI_DEVICE_MASK) >> 32)) @@ -279,10 +274,6 @@ #define IS_SINGLE_TABLE(x) (((x) & 0x01) == ACPI_TABLE_SINGLE ? 1 : 0) -/* Check if ACPI has been initialized properly */ - -#define ACPI_IS_INITIALIZATION_COMPLETE(s) {if (acpi_gbl_root_node) s = AE_OK; else s=AE_NO_NAMESPACE;} - /* * Macro to check if a pointer is within an ACPI table. * Parameter (a) is the pointer to check. Parameter (b) must be defined @@ -303,9 +294,9 @@ * Macros for the master AML opcode table */ #ifdef ACPI_DEBUG -#define ACPI_OP(name,Pargs,Iargs,flags) {Pargs,Iargs,flags,name} +#define ACPI_OP(name,Pargs,Iargs,class,type,flags) {Pargs,Iargs,flags,class,type,name} #else -#define ACPI_OP(name,Pargs,Iargs,flags) {Pargs,Iargs,flags} +#define ACPI_OP(name,Pargs,Iargs,class,type,flags) {Pargs,Iargs,flags,class,type} #endif #define ARG_TYPE_WIDTH 5 @@ -409,7 +400,7 @@ * as a local string ("_Proc_name) so that it can be also used by the function exit macros below. */ -#define PROC_NAME(a) ACPI_DEBUG_PRINT_INFO _dbg; \ +#define PROC_NAME(a) acpi_debug_print_info _dbg; \ _dbg.component_id = _COMPONENT; \ _dbg.proc_name = a; \ _dbg.module_name = _THIS_MODULE; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acnamesp.h linux/drivers/acpi/include/acnamesp.h --- v2.4.13/linux/drivers/acpi/include/acnamesp.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acnamesp.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acnamesp.h - Namespace subcomponent prototypes and defines - * $Revision: 107 $ + * $Revision: 110 $ * *****************************************************************************/ @@ -98,18 +98,16 @@ acpi_handle start_object, u32 max_depth, u8 unlock_before_callback, - ACPI_WALK_CALLBACK user_function, + acpi_walk_callback user_function, void *context, void **return_value); - acpi_namespace_node * -acpi_ns_get_next_object ( +acpi_ns_get_next_node ( acpi_object_type8 type, acpi_namespace_node *parent, acpi_namespace_node *child); - acpi_status acpi_ns_delete_namespace_by_owner ( u16 table_id); @@ -224,6 +222,7 @@ void acpi_ns_dump_objects ( acpi_object_type8 type, + u8 display_type, u32 max_depth, u32 ownder_id, acpi_handle start_handle); @@ -304,7 +303,6 @@ acpi_namespace_node *obj_node, NATIVE_CHAR *search_for); - acpi_status acpi_ns_get_node ( NATIVE_CHAR *pathname, @@ -382,11 +380,11 @@ acpi_status acpi_ns_build_internal_name ( - ACPI_NAMESTRING_INFO *info); + acpi_namestring_info *info); acpi_status acpi_ns_get_internal_name_length ( - ACPI_NAMESTRING_INFO *info); + acpi_namestring_info *info); acpi_status acpi_ns_internalize_name ( @@ -401,7 +399,7 @@ NATIVE_CHAR **converted_name); acpi_namespace_node * -acpi_ns_convert_handle_to_entry ( +acpi_ns_map_handle_to_node ( acpi_handle handle); acpi_handle @@ -418,7 +416,7 @@ acpi_namespace_node * -acpi_ns_get_next_valid_object ( +acpi_ns_get_next_valid_node ( acpi_namespace_node *node); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acobject.h linux/drivers/acpi/include/acobject.h --- v2.4.13/linux/drivers/acpi/include/acobject.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acobject.h Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ /****************************************************************************** * * Name: acobject.h - Definition of acpi_operand_object (Internal object only) - * $Revision: 90 $ + * $Revision: 93 $ * *****************************************************************************/ @@ -98,6 +98,13 @@ #define AFIELD_SINGLE_DATUM 0x1 +/* + * Fields common to both Strings and Buffers + */ +#define ACPI_COMMON_BUFFER_INFO \ + u32 length; + + /****************************************************************************** * * Individual Object Descriptors @@ -132,8 +139,7 @@ typedef struct /* STRING - has length and pointer - Null terminated, ASCII characters only */ { ACPI_OBJECT_COMMON_HEADER - - u32 length; + ACPI_COMMON_BUFFER_INFO NATIVE_CHAR *pointer; /* String value in AML stream or in allocated space */ } ACPI_OBJECT_STRING; @@ -142,9 +148,8 @@ typedef struct /* BUFFER - has length and pointer - not null terminated */ { ACPI_OBJECT_COMMON_HEADER - - u32 length; - u8 *pointer; /* points to the buffer in allocated space */ + ACPI_COMMON_BUFFER_INFO + u8 *pointer; /* Buffer value in AML stream or in allocated space */ } ACPI_OBJECT_BUFFER; @@ -154,7 +159,6 @@ ACPI_OBJECT_COMMON_HEADER u32 count; /* # of elements in package */ - union acpi_operand_obj **elements; /* Array of pointers to Acpi_objects */ union acpi_operand_obj **next_element; /* used only while initializing */ @@ -188,10 +192,10 @@ u8 method_flags; u8 param_count; - u32 pcode_length; + u32 aml_length; void *semaphore; - u8 *pcode; + u8 *aml_start; u8 concurrency; u8 thread_count; @@ -341,7 +345,7 @@ ACPI_OBJECT_COMMON_HEADER acpi_namespace_node *node; /* Parent device */ - ACPI_NOTIFY_HANDLER handler; + acpi_notify_handler handler; void *context; } ACPI_OBJECT_NOTIFY_HANDLER; @@ -358,11 +362,11 @@ u8 space_id; u16 hflags; - ACPI_ADR_SPACE_HANDLER handler; + acpi_adr_space_handler handler; acpi_namespace_node *node; /* Parent device */ void *context; - ACPI_ADR_SPACE_SETUP setup; + acpi_adr_space_setup setup; union acpi_operand_obj *region_list; /* regions using this handler */ union acpi_operand_obj *next; @@ -402,8 +406,8 @@ ACPI_OBJECT_COMMON_HEADER u8 byte_fill1; u16 word_fill1; - u32 pcode_length; - u8 *pcode; + u32 aml_length; + u8 *aml_start; acpi_namespace_node *method_REG; /* _REG method for this region (if any) */ void *region_context; /* Region-specific data */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acparser.h linux/drivers/acpi/include/acparser.h --- v2.4.13/linux/drivers/acpi/include/acparser.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acparser.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: acparser.h - AML Parser subcomponent prototypes and defines - * $Revision: 51 $ + * $Revision: 54 $ * *****************************************************************************/ @@ -121,8 +121,6 @@ acpi_status acpi_ps_find_object ( - u16 opcode, - acpi_parse_object *op, acpi_walk_state *walk_state, acpi_parse_object **out_op); @@ -136,15 +134,7 @@ acpi_status acpi_ps_parse_aml ( - acpi_parse_object *start_scope, - u8 *aml, - u32 aml_size, - u32 parse_flags, - acpi_namespace_node *method_node, - acpi_operand_object **params, - acpi_operand_object **caller_return_desc, - acpi_parse_downwards descending_callback, - acpi_parse_upwards ascending_callback); + acpi_walk_state *walk_state); acpi_status acpi_ps_parse_table ( @@ -245,12 +235,6 @@ /* psutils - parser utilities */ - - -acpi_parse_state * -acpi_ps_create_state ( - u8 *aml, - u32 aml_size); void acpi_ps_init_op ( diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acpixf.h linux/drivers/acpi/include/acpixf.h --- v2.4.13/linux/drivers/acpi/include/acpixf.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acpixf.h Wed Oct 24 14:06:22 2001 @@ -135,14 +135,14 @@ acpi_object_type type, acpi_handle start_object, u32 max_depth, - ACPI_WALK_CALLBACK user_function, + acpi_walk_callback user_function, void *context, void * *return_value); acpi_status acpi_get_devices ( NATIVE_CHAR *HID, - ACPI_WALK_CALLBACK user_function, + acpi_walk_callback user_function, void *context, void **return_value); @@ -200,46 +200,46 @@ acpi_status acpi_install_fixed_event_handler ( u32 acpi_event, - ACPI_EVENT_HANDLER handler, + acpi_event_handler handler, void *context); acpi_status acpi_remove_fixed_event_handler ( u32 acpi_event, - ACPI_EVENT_HANDLER handler); + acpi_event_handler handler); acpi_status acpi_install_notify_handler ( acpi_handle device, u32 handler_type, - ACPI_NOTIFY_HANDLER handler, + acpi_notify_handler handler, void *context); acpi_status acpi_remove_notify_handler ( acpi_handle device, u32 handler_type, - ACPI_NOTIFY_HANDLER handler); + acpi_notify_handler handler); acpi_status acpi_install_address_space_handler ( acpi_handle device, ACPI_ADR_SPACE_TYPE space_id, - ACPI_ADR_SPACE_HANDLER handler, - ACPI_ADR_SPACE_SETUP setup, + acpi_adr_space_handler handler, + acpi_adr_space_setup setup, void *context); acpi_status acpi_remove_address_space_handler ( acpi_handle device, ACPI_ADR_SPACE_TYPE space_id, - ACPI_ADR_SPACE_HANDLER handler); + acpi_adr_space_handler handler); acpi_status acpi_install_gpe_handler ( u32 gpe_number, u32 type, - ACPI_GPE_HANDLER handler, + acpi_gpe_handler handler, void *context); acpi_status @@ -253,17 +253,19 @@ acpi_status acpi_remove_gpe_handler ( u32 gpe_number, - ACPI_GPE_HANDLER handler); + acpi_gpe_handler handler); acpi_status acpi_enable_event ( u32 acpi_event, - u32 type); + u32 type, + u32 flags); acpi_status acpi_disable_event ( u32 acpi_event, - u32 type); + u32 type, + u32 flags); acpi_status acpi_clear_event ( diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acstruct.h linux/drivers/acpi/include/acstruct.h --- v2.4.13/linux/drivers/acpi/include/acstruct.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acstruct.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acstruct.h - Internal structs - * $Revision: 5 $ + * $Revision: 10 $ * *****************************************************************************/ @@ -51,46 +51,50 @@ u8 data_type; /* To differentiate various internal objs MUST BE FIRST!*/\ acpi_owner_id owner_id; /* Owner of objects created during the walk */ u8 last_predicate; /* Result of last predicate */ + u8 current_result; /* */ u8 next_op_info; /* Info about Next_op */ u8 num_operands; /* Stack pointer for Operands[] array */ - u8 current_result; /* */ + u8 return_used; + u8 walk_type; + u16 current_sync_level; /* Mutex Sync (nested acquire) level */ + u16 opcode; /* Current AML opcode */ + u32 arg_count; /* push for fixed or var args */ + u32 aml_offset; + u32 arg_types; + u32 method_breakpoint; /* For single stepping */ + u32 parse_flags; + u32 prev_arg_types; - struct acpi_walk_state *next; /* Next Walk_state in list */ + + u8 *aml_last_while; + struct acpi_node arguments[MTH_NUM_ARGS]; /* Control method arguments */ + union acpi_operand_obj **caller_return_desc; + acpi_generic_state *control_state; /* List of control states (nested IFs) */ + struct acpi_node local_variables[MTH_NUM_LOCALS]; /* Control method locals */ + struct acpi_node *method_call_node; /* Called method Node*/ + acpi_parse_object *method_call_op; /* Method_call Op if running a method */ + union acpi_operand_obj *method_desc; /* Method descriptor if running a method */ + struct acpi_node *method_node; /* Method Node if running a method */ + acpi_parse_object *op; /* Current parser op */ + union acpi_operand_obj *operands[OBJ_NUM_OPERANDS+1]; /* Operands passed to the interpreter (+1 for NULL terminator) */ + const acpi_opcode_info *op_info; /* Info on current opcode */ acpi_parse_object *origin; /* Start of walk [Obsolete] */ + union acpi_operand_obj **params; + acpi_parse_state parser_state; /* Current state of parser */ + union acpi_operand_obj *result_obj; + acpi_generic_state *results; /* Stack of accumulated results */ + union acpi_operand_obj *return_desc; /* Return object, if any */ + acpi_generic_state *scope_info; /* Stack of nested scopes */ /* TBD: Obsolete with removal of WALK procedure ? */ acpi_parse_object *prev_op; /* Last op that was processed */ acpi_parse_object *next_op; /* next op to be processed */ - acpi_generic_state *results; /* Stack of accumulated results */ - acpi_generic_state *control_state; /* List of control states (nested IFs) */ - acpi_generic_state *scope_info; /* Stack of nested scopes */ - acpi_parse_state *parser_state; /* Current state of parser */ - u8 *aml_last_while; - const acpi_opcode_info *op_info; /* Info on current opcode */ acpi_parse_downwards descending_callback; acpi_parse_upwards ascending_callback; - - union acpi_operand_obj *return_desc; /* Return object, if any */ - union acpi_operand_obj *method_desc; /* Method descriptor if running a method */ - struct acpi_node *method_node; /* Method Node if running a method */ - acpi_parse_object *method_call_op; /* Method_call Op if running a method */ - struct acpi_node *method_call_node; /* Called method Node*/ - union acpi_operand_obj *operands[OBJ_NUM_OPERANDS]; /* Operands passed to the interpreter */ - struct acpi_node arguments[MTH_NUM_ARGS]; /* Control method arguments */ - struct acpi_node local_variables[MTH_NUM_LOCALS]; /* Control method locals */ struct acpi_walk_list *walk_list; - u32 parse_flags; - u8 walk_type; - u8 return_used; - u16 opcode; /* Current AML opcode */ - u32 prev_arg_types; - u16 current_sync_level; /* Mutex Sync (nested acquire) level */ - - /* Debug support */ - - u32 method_breakpoint; + struct acpi_walk_state *next; /* Next Walk_state in list */ } acpi_walk_state; @@ -121,7 +125,7 @@ u16 object_count; acpi_table_desc *table_desc; -} ACPI_INIT_WALK_INFO; +} acpi_init_walk_info; /* Info used by TBD */ @@ -133,7 +137,7 @@ u16 num_INI; acpi_table_desc *table_desc; -} ACPI_DEVICE_WALK_INFO; +} acpi_device_walk_info; /* TBD: [Restructure] Merge with struct above */ @@ -142,16 +146,54 @@ { u32 debug_level; u32 owner_id; + u8 display_type; + +} acpi_walk_info; + +/* Display Types */ -} ACPI_WALK_INFO; +#define ACPI_DISPLAY_SUMMARY 0 +#define ACPI_DISPLAY_OBJECTS 1 typedef struct acpi_get_devices_info { - ACPI_WALK_CALLBACK user_function; + acpi_walk_callback user_function; void *context; NATIVE_CHAR *hid; -} ACPI_GET_DEVICES_INFO; +} acpi_get_devices_info; + + +typedef union acpi_aml_operands +{ + acpi_operand_object *operands[7]; + + struct + { + ACPI_OBJECT_INTEGER *type; + ACPI_OBJECT_INTEGER *code; + ACPI_OBJECT_INTEGER *argument; + + } fatal; + + struct + { + acpi_operand_object *source; + ACPI_OBJECT_INTEGER *index; + acpi_operand_object *target; + + } index; + + struct + { + acpi_operand_object *source; + ACPI_OBJECT_INTEGER *index; + ACPI_OBJECT_INTEGER *length; + acpi_operand_object *target; + + } mid; + +} ACPI_AML_OPERANDS; #endif diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/actables.h linux/drivers/acpi/include/actables.h --- v2.4.13/linux/drivers/acpi/include/actables.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/actables.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: actables.h - ACPI table management - * $Revision: 31 $ + * $Revision: 32 $ * *****************************************************************************/ @@ -176,10 +176,6 @@ /* * tbutils - common table utilities */ - -u8 -acpi_tb_system_table_pointer ( - void *where); acpi_status acpi_tb_map_acpi_table ( diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/actbl.h linux/drivers/acpi/include/actbl.h --- v2.4.13/linux/drivers/acpi/include/actbl.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/actbl.h Wed Oct 24 14:06:22 2001 @@ -84,7 +84,7 @@ u8 revision; /* Must be 0 for 1.0, 2 for 2.0 */ u32 rsdt_physical_address; /* 32-bit physical address of RSDT */ u32 length; /* XSDT Length in bytes including hdr */ - UINT64 xsdt_physical_address; /* 64-bit physical address of XSDT */ + u64 xsdt_physical_address; /* 64-bit physical address of XSDT */ u8 extended_checksum; /* Checksum of entire table */ NATIVE_CHAR reserved [3]; /* reserved field must be 0 */ @@ -110,7 +110,7 @@ typedef struct /* Common FACS for internal use */ { u32 *global_lock; - UINT64 *firmware_waking_vector; + u64 *firmware_waking_vector; u8 vector_width; } acpi_common_facs; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/actbl1.h linux/drivers/acpi/include/actbl1.h --- v2.4.13/linux/drivers/acpi/include/actbl1.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/actbl1.h Wed Oct 24 14:06:22 2001 @@ -51,7 +51,7 @@ u32 hardware_signature; /* hardware configuration signature */ u32 firmware_waking_vector; /* ACPI OS waking vector */ u32 global_lock; /* Global Lock */ - u32 S4_bios_f : 1; /* Indicates if S4_bIOS support is present */ + u32 S4bios_f : 1; /* Indicates if S4BIOS support is present */ u32 reserved1 : 31; /* must be 0 */ u8 resverved3 [40]; /* reserved - must be zero */ @@ -73,7 +73,7 @@ u32 smi_cmd; /* Port address of SMI command port */ u8 acpi_enable; /* value to write to smi_cmd to enable ACPI */ u8 acpi_disable; /* value to write to smi_cmd to disable ACPI */ - u8 S4_bios_req; /* Value to write to SMI CMD to enter S4_bIOS state */ + u8 S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */ u8 reserved2; /* reserved - must be zero */ u32 pm1a_evt_blk; /* Port address of Power Mgt 1a Acpi_event Reg Blk */ u32 pm1b_evt_blk; /* Port address of Power Mgt 1b Acpi_event Reg Blk */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/actbl2.h linux/drivers/acpi/include/actbl2.h --- v2.4.13/linux/drivers/acpi/include/actbl2.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/actbl2.h Wed Oct 24 14:06:22 2001 @@ -65,7 +65,7 @@ typedef struct { acpi_table_header header; /* Table header */ - UINT64 table_offset_entry [1]; /* Array of pointers to */ + u64 table_offset_entry [1]; /* Array of pointers to */ /* other tables' headers */ } XSDT_DESCRIPTOR_REV2; @@ -80,9 +80,9 @@ u32 hardware_signature; /* hardware configuration signature */ u32 firmware_waking_vector; /* 32bit physical address of the Firmware Waking Vector. */ u32 global_lock; /* Global Lock used to synchronize access to shared hardware resources */ - u32 S4_bios_f : 1; /* Indicates if S4_bIOS support is present */ + u32 S4bios_f : 1; /* Indicates if S4BIOS support is present */ u32 reserved1 : 31; /* must be 0 */ - UINT64 Xfirmware_waking_vector; /* 64bit physical address of the Firmware Waking Vector. */ + u64 Xfirmware_waking_vector; /* 64bit physical address of the Firmware Waking Vector. */ u8 version; /* Version of this table */ u8 reserved3 [31]; /* reserved - must be zero */ @@ -98,7 +98,7 @@ u8 register_bit_width; /* Size in bits of given register */ u8 register_bit_offset; /* Bit offset within the register */ u8 reserved; /* Must be 0 */ - UINT64 address; /* 64-bit address of struct or register */ + u64 address; /* 64-bit address of struct or register */ } acpi_generic_address; @@ -117,7 +117,7 @@ u32 smi_cmd; /* Port address of SMI command port */ u8 acpi_enable; /* value to write to smi_cmd to enable ACPI */ u8 acpi_disable; /* value to write to smi_cmd to disable ACPI */ - u8 S4_bios_req; /* Value to write to SMI CMD to enter S4_bIOS state */ + u8 S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */ u8 pstate_cnt; /* processor performance state control*/ u32 V1_pm1a_evt_blk; /* Port address of Power Mgt 1a Acpi_event Reg Blk */ u32 V1_pm1b_evt_blk; /* Port address of Power Mgt 1b Acpi_event Reg Blk */ @@ -139,8 +139,8 @@ u16 plvl3_lat; /* worst case HW latency to enter/exit C3 state */ u16 flush_size; /* number of flush strides that need to be read */ u16 flush_stride; /* Processor's memory cache line width, in bytes */ - u8 duty_offset; /* Processor’s duty cycle index in processor's P_CNT reg*/ - u8 duty_width; /* Processor’s duty cycle value bit width in P_CNT register.*/ + u8 duty_offset; /* Processor_’s duty cycle index in processor's P_CNT reg*/ + u8 duty_width; /* Processor_’s duty cycle value bit width in P_CNT register.*/ u8 day_alrm; /* index to day-of-month alarm in RTC CMOS RAM */ u8 mon_alrm; /* index to month-of-year alarm in RTC CMOS RAM */ u8 century; /* index to century in RTC CMOS RAM */ @@ -166,8 +166,8 @@ acpi_generic_address reset_register; /* Reset register address in GAS format */ u8 reset_value; /* Value to write to the Reset_register port to reset the system. */ u8 reserved7[3]; /* These three bytes must be zero */ - UINT64 Xfirmware_ctrl; /* 64-bit physical address of FACS */ - UINT64 Xdsdt; /* 64-bit physical address of DSDT */ + u64 Xfirmware_ctrl; /* 64-bit physical address of FACS */ + u64 Xdsdt; /* 64-bit physical address of DSDT */ acpi_generic_address Xpm1a_evt_blk; /* Extended Power Mgt 1a Acpi_event Reg Blk address */ acpi_generic_address Xpm1b_evt_blk; /* Extended Power Mgt 1b Acpi_event Reg Blk address */ acpi_generic_address Xpm1a_cnt_blk; /* Extended Power Mgt 1a Control Reg Blk address */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/actbl71.h linux/drivers/acpi/include/actbl71.h --- v2.4.13/linux/drivers/acpi/include/actbl71.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/actbl71.h Wed Oct 24 14:06:22 2001 @@ -41,7 +41,7 @@ /* Only for clarity in declarations */ -typedef UINT64 IO_ADDRESS; +typedef u64 IO_ADDRESS; #pragma pack(1) @@ -51,7 +51,7 @@ u8 checksum; /* to make sum of struct == 0 */ NATIVE_CHAR oem_id [6]; /* OEM identification */ u8 reserved; /* Must be 0 for 1.0, 2 for 2.0 */ - UINT64 rsdt_physical_address; /* 64-bit physical address of RSDT */ + u64 rsdt_physical_address; /* 64-bit physical address of RSDT */ } RSDP_DESCRIPTOR_REV071; @@ -63,7 +63,7 @@ { acpi_table_header header; /* Table header */ u32 reserved_pad; /* IA64 alignment, must be 0 */ - UINT64 table_offset_entry [1]; /* Array of pointers to other */ + u64 table_offset_entry [1]; /* Array of pointers to other */ /* tables' headers */ } RSDT_DESCRIPTOR_REV071; @@ -78,9 +78,9 @@ u32 length; /* length of structure, in bytes */ u32 hardware_signature; /* hardware configuration signature */ u32 reserved4; /* must be 0 */ - UINT64 firmware_waking_vector; /* ACPI OS waking vector */ - UINT64 global_lock; /* Global Lock */ - u32 S4_bios_f : 1; /* Indicates if S4_bIOS support is present */ + u64 firmware_waking_vector; /* ACPI OS waking vector */ + u64 global_lock; /* Global Lock */ + u32 S4bios_f : 1; /* Indicates if S4BIOS support is present */ u32 reserved1 : 31; /* must be 0 */ u8 reserved3 [28]; /* reserved - must be zero */ @@ -95,24 +95,24 @@ { acpi_table_header header; /* table header */ u32 reserved_pad; /* IA64 alignment, must be 0 */ - UINT64 firmware_ctrl; /* 64-bit Physical address of FACS */ - UINT64 dsdt; /* 64-bit Physical address of DSDT */ + u64 firmware_ctrl; /* 64-bit Physical address of FACS */ + u64 dsdt; /* 64-bit Physical address of DSDT */ u8 model; /* System Interrupt Model */ u8 address_space; /* Address Space Bitmask */ u16 sci_int; /* System vector of SCI interrupt */ u8 acpi_enable; /* value to write to smi_cmd to enable ACPI */ u8 acpi_disable; /* value to write to smi_cmd to disable ACPI */ - u8 S4_bios_req; /* Value to write to SMI CMD to enter S4_bIOS state */ + u8 S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */ u8 reserved2; /* reserved - must be zero */ - UINT64 smi_cmd; /* Port address of SMI command port */ - UINT64 pm1a_evt_blk; /* Port address of Power Mgt 1a Acpi_event Reg Blk */ - UINT64 pm1b_evt_blk; /* Port address of Power Mgt 1b Acpi_event Reg Blk */ - UINT64 pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */ - UINT64 pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */ - UINT64 pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */ - UINT64 pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */ - UINT64 gpe0blk; /* Port addr of General Purpose Acpi_event 0 Reg Blk */ - UINT64 gpe1_blk; /* Port addr of General Purpose Acpi_event 1 Reg Blk */ + u64 smi_cmd; /* Port address of SMI command port */ + u64 pm1a_evt_blk; /* Port address of Power Mgt 1a Acpi_event Reg Blk */ + u64 pm1b_evt_blk; /* Port address of Power Mgt 1b Acpi_event Reg Blk */ + u64 pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */ + u64 pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */ + u64 pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */ + u64 pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */ + u64 gpe0blk; /* Port addr of General Purpose Acpi_event 0 Reg Blk */ + u64 gpe1_blk; /* Port addr of General Purpose Acpi_event 1 Reg Blk */ u8 pm1_evt_len; /* Byte Length of ports at pm1_x_evt_blk */ u8 pm1_cnt_len; /* Byte Length of ports at pm1_x_cnt_blk */ u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/actypes.h linux/drivers/acpi/include/actypes.h --- v2.4.13/linux/drivers/acpi/include/actypes.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/actypes.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: actypes.h - Common data types for the entire ACPI subsystem - * $Revision: 188 $ + * $Revision: 193 $ * *****************************************************************************/ @@ -68,9 +68,8 @@ typedef UINT64 ACPI_IO_ADDRESS; typedef UINT64 ACPI_PHYSICAL_ADDRESS; -#define ALIGNED_ADDRESS_BOUNDARY 0x00000008 - -/* (No hardware alignment support in IA64) */ +#define ALIGNED_ADDRESS_BOUNDARY 0x00000008 /* No hardware alignment support in IA64 */ +#define ACPI_USE_NATIVE_DIVIDE /* Native 64-bit integer support */ #elif _IA16 @@ -101,6 +100,7 @@ #define ALIGNED_ADDRESS_BOUNDARY 0x00000002 #define _HW_ALIGNMENT_SUPPORT +#define ACPI_USE_NATIVE_DIVIDE /* No 64-bit integers, ok to use native divide */ /* * (16-bit only) internal integers must be 32-bits, so @@ -196,11 +196,18 @@ typedef struct { - u32 lo; - u32 hi; + u32 lo; + u32 hi; } uint64_struct; +typedef union +{ + u64 full; + uint64_struct part; + +} uint64_overlay; + /* * Acpi integer width. In ACPI version 1, integers are @@ -220,17 +227,23 @@ #define ACPI_MAX_BCD_DIGITS 8 #define ACPI_MAX_DECIMAL_DIGITS 10 +#define ACPI_USE_NATIVE_DIVIDE /* Use compiler native 32-bit divide */ + + #else /* 64-bit integers */ -typedef UINT64 acpi_integer; +typedef u64 acpi_integer; #define ACPI_INTEGER_MAX ACPI_UINT64_MAX #define ACPI_INTEGER_BIT_SIZE 64 #define ACPI_MAX_BCD_VALUE 9999999999999999 #define ACPI_MAX_BCD_DIGITS 16 #define ACPI_MAX_DECIMAL_DIGITS 19 +#ifdef _IA64 +#define ACPI_USE_NATIVE_DIVIDE /* Use compiler native 64-bit divide */ +#endif #endif @@ -453,24 +466,36 @@ #define ACPI_EVENT_EDGE_TRIGGERED (acpi_event_type) 2 /* + * GPEs + */ +#define ACPI_EVENT_ENABLE 0x1 +#define ACPI_EVENT_WAKE_ENABLE 0x2 + +#define ACPI_EVENT_DISABLE 0x1 +#define ACPI_EVENT_WAKE_DISABLE 0x2 + + +/* * Acpi_event Status: * ------------- * The encoding of acpi_event_status is illustrated below. * Note that a set bit (1) indicates the property is TRUE * (e.g. if bit 0 is set then the event is enabled). - * +---------------+-+-+ - * | Bits 31:2 |1|0| - * +---------------+-+-+ - * | | | - * | | +- Enabled? - * | +--- Set? + * +-------------+-+-+-+ + * | Bits 31:3 |2|1|0| + * +-------------+-+-+-+ + * | | | | + * | | | +- Enabled? + * | | +--- Enabled for wake? + * | +----- Set? * +----------- */ typedef u32 acpi_event_status; #define ACPI_EVENT_FLAG_DISABLED (acpi_event_status) 0x00 #define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01 -#define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x02 +#define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02 +#define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x04 /* Notify types */ @@ -604,7 +629,7 @@ { u32 count; -} ACPI_TABLE_INFO; +} acpi_table_info; /* @@ -621,7 +646,7 @@ u32 debug_level; u32 debug_layer; u32 num_table_types; - ACPI_TABLE_INFO table_info [NUM_ACPI_TABLES]; + acpi_table_info table_info [NUM_ACPI_TABLES]; } acpi_system_info; @@ -631,15 +656,15 @@ */ typedef -u32 (*ACPI_EVENT_HANDLER) ( +u32 (*acpi_event_handler) ( void *context); typedef -void (*ACPI_GPE_HANDLER) ( +void (*acpi_gpe_handler) ( void *context); typedef -void (*ACPI_NOTIFY_HANDLER) ( +void (*acpi_notify_handler) ( acpi_handle device, u32 value, void *context); @@ -651,7 +676,7 @@ #define ACPI_WRITE_ADR_SPACE 2 typedef -acpi_status (*ACPI_ADR_SPACE_HANDLER) ( +acpi_status (*acpi_adr_space_handler) ( u32 function, ACPI_PHYSICAL_ADDRESS address, u32 bit_width, @@ -659,11 +684,11 @@ void *handler_context, void *region_context); -#define ACPI_DEFAULT_HANDLER ((ACPI_ADR_SPACE_HANDLER) NULL) +#define ACPI_DEFAULT_HANDLER ((acpi_adr_space_handler) NULL) typedef -acpi_status (*ACPI_ADR_SPACE_SETUP) ( +acpi_status (*acpi_adr_space_setup) ( acpi_handle region_handle, u32 function, void *handler_context, @@ -673,7 +698,7 @@ #define ACPI_REGION_DEACTIVATE 1 typedef -acpi_status (*ACPI_WALK_CALLBACK) ( +acpi_status (*acpi_walk_callback) ( acpi_handle obj_handle, u32 nesting_level, void *context, @@ -758,7 +783,7 @@ /* * IO Attributes - * The ISA IO ranges are: n000-n0FFh, n400-n4_fFh, n800-n8_fFh, n_c00-n_cFFh. + * The ISA IO ranges are: n000-n0FFh, n400-n4_fFh, n800-n8_fFh, n_c00-n_cFFh. * The non-ISA IO ranges are: n100-n3_fFh, n500-n7_fFh, n900-n_bFFh, n_cD0-n_fFFh. */ #define NON_ISA_ONLY_RANGES (u8) 0x01 @@ -988,11 +1013,11 @@ u32 min_address_fixed; u32 max_address_fixed; acpi_resource_attribute attribute; - UINT64 granularity; - UINT64 min_address_range; - UINT64 max_address_range; - UINT64 address_translation_offset; - UINT64 address_length; + u64 granularity; + u64 min_address_range; + u64 max_address_range; + u64 address_translation_offset; + u64 address_length; acpi_resource_source resource_source; } acpi_resource_address64; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/acutils.h linux/drivers/acpi/include/acutils.h --- v2.4.13/linux/drivers/acpi/include/acutils.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/acutils.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures - * $Revision: 113 $ + * $Revision: 117 $ * *****************************************************************************/ @@ -270,47 +270,47 @@ void acpi_ut_trace ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info); + acpi_debug_print_info *dbg_info); void acpi_ut_trace_ptr ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, void *pointer); void acpi_ut_trace_u32 ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, u32 integer); void acpi_ut_trace_str ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, NATIVE_CHAR *string); void acpi_ut_exit ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info); + acpi_debug_print_info *dbg_info); void acpi_ut_status_exit ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, acpi_status status); void acpi_ut_value_exit ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, acpi_integer value); void acpi_ut_ptr_exit ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, u8 *ptr); void @@ -342,17 +342,17 @@ acpi_ut_debug_print ( u32 requested_debug_level, u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, char *format, - ...); + ...) ACPI_PRINTF_LIKE_FUNC; void acpi_ut_debug_print_raw ( u32 requested_debug_level, u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, char *format, - ...); + ...) ACPI_PRINTF_LIKE_FUNC; /* @@ -389,6 +389,7 @@ #define METHOD_NAME__REG "_REG" #define METHOD_NAME__SEG "_SEG" #define METHOD_NAME__BBN "_BBN" +#define METHOD_NAME__PRT "_PRT" acpi_status @@ -400,7 +401,7 @@ acpi_status acpi_ut_execute_HID ( acpi_namespace_node *device_node, - ACPI_DEVICE_ID *hid); + acpi_device_id *hid); acpi_status acpi_ut_execute_STA ( @@ -410,7 +411,7 @@ acpi_status acpi_ut_execute_UID ( acpi_namespace_node *device_node, - ACPI_DEVICE_ID *uid); + acpi_device_id *uid); /* @@ -562,9 +563,23 @@ void); /* - * Ututils + * utmisc */ +acpi_status +acpi_ut_divide ( + acpi_integer *in_dividend, + acpi_integer *in_divisor, + acpi_integer *out_quotient, + acpi_integer *out_remainder); + +acpi_status +acpi_ut_short_divide ( + acpi_integer *in_dividend, + u32 divisor, + acpi_integer *out_quotient, + u32 *out_remainder); + u8 acpi_ut_valid_acpi_name ( u32 name); @@ -638,7 +653,7 @@ void); void -acpi_ut_dump_current_allocations ( +acpi_ut_dump_allocations ( u32 component, NATIVE_CHAR *module); #endif diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/amlcode.h linux/drivers/acpi/include/amlcode.h --- v2.4.13/linux/drivers/acpi/include/amlcode.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/amlcode.h Wed Oct 24 14:06:22 2001 @@ -3,7 +3,7 @@ * Name: amlcode.h - Definitions for AML, as included in "definition blocks" * Declarations and definitions contained herein are derived * directly from the ACPI specification. - * $Revision: 53 $ + * $Revision: 58 $ * *****************************************************************************/ @@ -266,47 +266,96 @@ #define OPGRP_FIELD 0x02 #define OPGRP_BYTELIST 0x04 -#define OPTYPE_UNDEFINED 0 +/* + * Opcode information + */ -#define OPTYPE_LITERAL 1 -#define OPTYPE_CONSTANT 2 -#define OPTYPE_METHOD_ARGUMENT 3 -#define OPTYPE_LOCAL_VARIABLE 4 -#define OPTYPE_DATA_TERM 5 - -/* Type 1 opcodes */ - -#define OPTYPE_MONADIC1 6 -#define OPTYPE_DYADIC1 7 - -/* Type 2 opcodes */ +/* Opcode flags */ -#define OPTYPE_MONADIC2 8 -#define OPTYPE_MONADIC2_r 9 -#define OPTYPE_DYADIC2 10 -#define OPTYPE_DYADIC2_r 11 -#define OPTYPE_DYADIC2_s 12 +#define AML_HAS_ARGS 0x0800 +#define AML_HAS_TARGET 0x0400 +#define AML_HAS_RETVAL 0x0200 +#define AML_NSOBJECT 0x0100 +#define AML_NSOPCODE 0x0080 +#define AML_NSNODE 0x0040 +#define AML_NAMED 0x0020 +#define AML_DEFER 0x0010 +#define AML_FIELD 0x0008 +#define AML_CREATE 0x0004 +#define AML_MATH 0x0002 +#define AML_LOGICAL 0x0001 + +/* Convenient flag groupings */ + +#define AML_FLAGS_EXEC_1A_0T_0R AML_HAS_ARGS /* Monadic1 */ +#define AML_FLAGS_EXEC_1A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Monadic2 */ +#define AML_FLAGS_EXEC_1A_1T_0R AML_HAS_ARGS | AML_HAS_TARGET +#define AML_FLAGS_EXEC_1A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* Monadic2_r */ +#define AML_FLAGS_EXEC_2A_0T_0R AML_HAS_ARGS /* Dyadic1 */ +#define AML_FLAGS_EXEC_2A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Dyadic2 */ +#define AML_FLAGS_EXEC_2A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* Dyadic2_r */ +#define AML_FLAGS_EXEC_2A_2T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL +#define AML_FLAGS_EXEC_3A_0T_0R AML_HAS_ARGS +#define AML_FLAGS_EXEC_3A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL +#define AML_FLAGS_EXEC_6A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL -/* Multi-operand (>=3) opcodes */ -#define OPTYPE_TRIADIC 13 -#define OPTYPE_QUADRADIC 14 -#define OPTYPE_HEXADIC 15 +/* + * The opcode Type is used in a dispatch table, do not change + * without updating the table. + */ +#define AML_TYPE_EXEC_1A_0T_0R 0x00 /* Monadic1 */ +#define AML_TYPE_EXEC_1A_0T_1R 0x01 /* Monadic2 */ +#define AML_TYPE_EXEC_1A_1T_0R 0x02 +#define AML_TYPE_EXEC_1A_1T_1R 0x03 /* Monadic2_r */ +#define AML_TYPE_EXEC_2A_0T_0R 0x04 /* Dyadic1 */ +#define AML_TYPE_EXEC_2A_0T_1R 0x05 /* Dyadic2 */ +#define AML_TYPE_EXEC_2A_1T_1R 0x06 /* Dyadic2_r */ +#define AML_TYPE_EXEC_2A_2T_1R 0x07 +#define AML_TYPE_EXEC_3A_0T_0R 0x08 +#define AML_TYPE_EXEC_3A_1T_1R 0x09 +#define AML_TYPE_EXEC_6A_0T_1R 0x0A +/* End of types used in dispatch table */ + +#define AML_TYPE_LITERAL 0x0B +#define AML_TYPE_CONSTANT 0x0C +#define AML_TYPE_METHOD_ARGUMENT 0x0D +#define AML_TYPE_LOCAL_VARIABLE 0x0E +#define AML_TYPE_DATA_TERM 0x0F /* Generic for an op that returns a value */ -#define OPTYPE_METHOD_CALL 16 +#define AML_TYPE_METHOD_CALL 0x10 /* Misc */ -#define OPTYPE_CREATE_FIELD 17 -#define OPTYPE_CONTROL 18 -#define OPTYPE_RECONFIGURATION 19 -#define OPTYPE_NAMED_OBJECT 20 -#define OPTYPE_RETURN 21 +#define AML_TYPE_CREATE_FIELD 0x11 +#define AML_TYPE_CONTROL 0x12 +#define AML_TYPE_NAMED_NO_OBJ 0x13 +#define AML_TYPE_NAMED_FIELD 0x14 +#define AML_TYPE_NAMED_SIMPLE 0x15 +#define AML_TYPE_NAMED_COMPLEX 0x16 +#define AML_TYPE_RETURN 0x17 + +#define AML_TYPE_UNDEFINED 0x18 +#define AML_TYPE_BOGUS 0x19 + -#define OPTYPE_BOGUS 22 +/* + * Opcode classes + */ +#define AML_CLASS_EXECUTE 0x00 +#define AML_CLASS_CREATE 0x01 +#define AML_CLASS_ARGUMENT 0x02 +#define AML_CLASS_NAMED_OBJECT 0x03 +#define AML_CLASS_CONTROL 0x04 +#define AML_CLASS_ASCII 0x05 +#define AML_CLASS_PREFIX 0x06 +#define AML_CLASS_INTERNAL 0x07 +#define AML_CLASS_RETURN_VALUE 0x08 +#define AML_CLASS_METHOD_CALL 0x09 +#define AML_CLASS_UNKNOWN 0x0A /* Predefined Operation Region Space_iDs */ @@ -406,18 +455,5 @@ #define USER_REGION_BEGIN 0x80 -/* - * AML tables - */ - -#ifdef DEFINE_AML_GLOBALS - -/* External declarations for the AML tables */ - -extern u8 acpi_gbl_aml [NUM_OPCODES]; -extern u16 acpi_gbl_pfx [NUM_OPCODES]; - - -#endif /* DEFINE_AML_GLOBALS */ #endif /* __AMLCODE_H__ */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/platform/acenv.h linux/drivers/acpi/include/platform/acenv.h --- v2.4.13/linux/drivers/acpi/include/platform/acenv.h Sun Sep 23 11:40:56 2001 +++ linux/drivers/acpi/include/platform/acenv.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acenv.h - Generation environment specific items - * $Revision: 76 $ + * $Revision: 77 $ * *****************************************************************************/ @@ -126,6 +126,12 @@ /* Name of host operating system (returned by the _OS_ namespace object) */ #define ACPI_OS_NAME "Intel ACPI/CA Core Subsystem" + +/* This macro is used to tag functions as "printf-like" because + * some compilers can catch printf format string problems. MSVC + * doesn't, so this is proprocessed away. + */ +#define ACPI_PRINTF_LIKE_FUNC #endif diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/platform/acgcc.h linux/drivers/acpi/include/platform/acgcc.h --- v2.4.13/linux/drivers/acpi/include/platform/acgcc.h Tue Oct 23 22:48:50 2001 +++ linux/drivers/acpi/include/platform/acgcc.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: acgcc.h - GCC specific defines, etc. - * $Revision: 9 $ + * $Revision: 14 $ * *****************************************************************************/ @@ -93,6 +93,7 @@ #else /* DO IA32 */ + #define COMPILER_DEPENDENT_UINT64 unsigned long long #define ACPI_ASM_MACROS #define causeinterrupt(level) @@ -100,7 +101,6 @@ #define disable() __cli() #define enable() __sti() #define halt() __asm__ __volatile__ ("sti; hlt":::"memory") -#define wbinvd() __asm__ __volatile__ ("wbinvd":::"memory") /*! [Begin] no source code translation * @@ -139,8 +139,30 @@ :"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~3L):"dx"); \ } while(0) + +/* + * Math helper asm macros + */ +#define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \ + asm("divl %2;" \ + :"=a"(q32), "=d"(r32) \ + :"r"(d32), \ + "0"(n_lo), "1"(n_hi)) + + +#define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \ + asm("shrl $1,%2;" \ + "rcrl $1,%3;" \ + :"=r"(n_hi), "=r"(n_lo) \ + :"0"(n_hi), "1"(n_lo)) + /*! [End] no source code translation !*/ #endif /* IA 32 */ + +/* This macro is used to tag functions as "printf-like" because + * some compilers (like GCC) can catch printf format string problems. + */ +#define ACPI_PRINTF_LIKE_FUNC __attribute__ ((__format__ (__printf__, 4, 5))) #endif /* __ACGCC_H__ */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/include/platform/aclinux.h linux/drivers/acpi/include/platform/aclinux.h --- v2.4.13/linux/drivers/acpi/include/platform/aclinux.h Tue Jul 3 17:08:19 2001 +++ linux/drivers/acpi/include/platform/aclinux.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: aclinux.h - OS specific defines, etc. - * $Revision: 13 $ + * $Revision: 14 $ * *****************************************************************************/ @@ -57,15 +57,6 @@ #undef DEBUGGER_THREADING #define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED - -#ifndef _IA64 -/* Linux ia32 can't do int64 well */ -#define ACPI_NO_INTEGER64_SUPPORT -/* And the ia32 kernel doesn't include 64-bit divide support */ -#define ACPI_DIV64(dividend, divisor) do_div(dividend, divisor) -#else -#define ACPI_DIV64(dividend, divisor) ACPI_DIVIDE(dividend, divisor) -#endif #endif /* __ACLINUX_H__ */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsaccess.c linux/drivers/acpi/namespace/nsaccess.c --- v2.4.13/linux/drivers/acpi/namespace/nsaccess.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsaccess.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nsaccess - Top-level functions for accessing ACPI namespace - * $Revision: 133 $ + * $Revision: 135 $ * ******************************************************************************/ @@ -185,6 +185,10 @@ /* Store pointer to value descriptor in the Node */ acpi_ns_attach_object (new_node, obj_desc, obj_desc->common.type); + + /* Remove local reference to the object */ + + acpi_ut_remove_reference (obj_desc); } } @@ -434,7 +438,7 @@ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[")); for (i = 0; i < num_segments; i++) { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, "%4.4s/", &pathname[i * 4])); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, "%4.4s/", (char*)&pathname[i * 4])); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES, "]\n")); #endif @@ -474,8 +478,8 @@ /* Name not found in ACPI namespace */ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, - "Name [%4.4s] not found in scope %X\n", - &simple_name, current_node)); + "Name [%4.4s] not found in scope %p\n", + (char*)&simple_name, current_node)); } return_ACPI_STATUS (status); @@ -507,7 +511,7 @@ REPORT_WARNING ( ("Ns_lookup: %4.4s, type %X, checking for type %X\n", - &simple_name, this_node->type, type_to_check_for)); + (char*)&simple_name, this_node->type, type_to_check_for)); } /* @@ -525,7 +529,7 @@ * More segments or the type implies enclosed scope, * and the next scope has not been allocated. */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Load mode=%X This_node=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Load mode=%X This_node=%p\n", interpreter_mode, this_node)); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsalloc.c linux/drivers/acpi/namespace/nsalloc.c --- v2.4.13/linux/drivers/acpi/namespace/nsalloc.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsalloc.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nsalloc - Namespace allocation and deletion utilities - * $Revision: 56 $ + * $Revision: 60 $ * ******************************************************************************/ @@ -210,7 +210,7 @@ * real definition is found later. */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "[%4.4s] is a forward reference\n", - &node->name)); + (char*)&node->name)); } /* @@ -235,7 +235,7 @@ } ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%4.4s added to %p at %p\n", - &node->name, parent_node, node)); + (char*)&node->name, parent_node, node)); /* * Increment the reference count(s) of all parents up to @@ -297,7 +297,7 @@ /* Grandchildren should have all been deleted already */ if (child_node->child) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Found a grandchild! P=%X C=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Found a grandchild! P=%p C=%p\n", parent_node, child_node)); } @@ -309,12 +309,9 @@ child_node, acpi_gbl_current_node_count)); /* - * Detach an object if there is one + * Detach an object if there is one, then free the child node */ - if (child_node->object) { - acpi_ns_detach_object (child_node); - } - + acpi_ns_detach_object (child_node); ACPI_MEM_FREE (child_node); /* And move on to the next child in the list */ @@ -349,9 +346,8 @@ acpi_ns_delete_namespace_subtree ( acpi_namespace_node *parent_node) { - acpi_namespace_node *child_node; - acpi_operand_object *obj_desc; - u32 level; + acpi_namespace_node *child_node = NULL; + u32 level = 1; FUNCTION_TRACE ("Ns_delete_namespace_subtree"); @@ -361,39 +357,26 @@ return_ACPI_STATUS (AE_OK); } - - child_node = 0; - level = 1; - /* * Traverse the tree of objects until we bubble back up * to where we started. */ while (level > 0) { - /* - * Get the next typed object in this scope. - * Null returned if not found - */ - child_node = acpi_ns_get_next_object (ACPI_TYPE_ANY, parent_node, + /* Get the next node in this scope (NULL if none) */ + + child_node = acpi_ns_get_next_node (ACPI_TYPE_ANY, parent_node, child_node); if (child_node) { - /* - * Found an object - delete the object within - * the Value field - */ - obj_desc = acpi_ns_get_attached_object (child_node); - if (obj_desc) { - acpi_ns_detach_object (child_node); - acpi_ut_remove_reference (obj_desc); - } + /* Found a child node - detach any attached object */ + acpi_ns_detach_object (child_node); - /* Check if this object has any children */ + /* Check if this node has any children */ - if (acpi_ns_get_next_object (ACPI_TYPE_ANY, child_node, 0)) { + if (acpi_ns_get_next_node (ACPI_TYPE_ANY, child_node, 0)) { /* - * There is at least one child of this object, - * visit the object + * There is at least one child of this node, + * visit the node */ level++; parent_node = child_node; @@ -403,8 +386,8 @@ else { /* - * No more children in this object. - * We will move up to the grandparent. + * No more children of this parent node. + * Move up to the grandparent. */ level--; @@ -414,17 +397,16 @@ */ acpi_ns_delete_children (parent_node); - /* New "last child" is this parent object */ + /* New "last child" is this parent node */ child_node = parent_node; - /* Now we can move up the tree to the grandparent */ + /* Move up the tree to the grandparent */ parent_node = acpi_ns_get_parent_object (parent_node); } } - return_ACPI_STATUS (AE_OK); } @@ -433,13 +415,13 @@ * * FUNCTION: Acpi_ns_remove_reference * - * PARAMETERS: Node - Named object whose reference count is to be + * PARAMETERS: Node - Named node whose reference count is to be * decremented * * RETURN: None. * * DESCRIPTION: Remove a Node reference. Decrements the reference count - * of all parent Nodes up to the root. Any object along + * of all parent Nodes up to the root. Any node along * the way that reaches zero references is freed. * ******************************************************************************/ @@ -455,19 +437,19 @@ /* - * Decrement the reference count(s) of this object and all - * objects up to the root, Delete anything with zero remaining references. + * Decrement the reference count(s) of this node and all + * nodes up to the root, Delete anything with zero remaining references. */ next_node = node; while (next_node) { - /* Decrement the reference count on this object*/ + /* Decrement the reference count on this node*/ next_node->reference_count--; - /* Delete the object if no more references */ + /* Delete the node if no more references */ if (!next_node->reference_count) { - /* Delete all children and delete the object */ + /* Delete all children and delete the node */ acpi_ns_delete_children (next_node); acpi_ns_delete_node (next_node); @@ -500,7 +482,6 @@ { acpi_namespace_node *child_node; u32 level; - acpi_operand_object *obj_desc; acpi_namespace_node *parent_node; @@ -512,38 +493,28 @@ level = 1; /* - * Traverse the tree of objects until we bubble back up + * Traverse the tree of nodes until we bubble back up * to where we started. */ while (level > 0) { - /* - * Get the next typed object in this scope. - * Null returned if not found - */ - child_node = acpi_ns_get_next_object (ACPI_TYPE_ANY, parent_node, - child_node); + /* Get the next node in this scope (NULL if none) */ + child_node = acpi_ns_get_next_node (ACPI_TYPE_ANY, parent_node, + child_node); if (child_node) { if (child_node->owner_id == owner_id) { - /* - * Found an object - delete the object within - * the Value field - */ - obj_desc = acpi_ns_get_attached_object (child_node); - if (obj_desc) { - acpi_ns_detach_object (child_node); - acpi_ut_remove_reference (obj_desc); - } + /* Found a child node - detach any attached object */ + + acpi_ns_detach_object (child_node); } - /* Check if this object has any children */ + /* Check if this node has any children */ - if (acpi_ns_get_next_object (ACPI_TYPE_ANY, child_node, 0)) { + if (acpi_ns_get_next_node (ACPI_TYPE_ANY, child_node, 0)) { /* - * There is at least one child of this object, - * visit the object + * There is at least one child of this node, + * visit the node */ - level++; parent_node = child_node; child_node = 0; @@ -556,7 +527,8 @@ else { /* - * No more children in this object. Move up to grandparent. + * No more children of this parent node. + * Move up to the grandparent. */ level--; @@ -566,16 +538,15 @@ } } - /* New "last child" is this parent object */ + /* New "last child" is this parent node */ child_node = parent_node; - /* Now we can move up the tree to the grandparent */ + /* Move up the tree to the grandparent */ parent_node = acpi_ns_get_parent_object (parent_node); } } - return_ACPI_STATUS (AE_OK); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsdump.c linux/drivers/acpi/namespace/nsdump.c --- v2.4.13/linux/drivers/acpi/namespace/nsdump.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsdump.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nsdump - table dumping routines for debug - * $Revision: 99 $ + * $Revision: 105 $ * *****************************************************************************/ @@ -28,6 +28,7 @@ #include "acinterp.h" #include "acnamesp.h" #include "actables.h" +#include "acparser.h" #define _COMPONENT ACPI_NAMESPACE @@ -108,9 +109,8 @@ void *context, void **return_value) { - ACPI_WALK_INFO *info = (ACPI_WALK_INFO *) context; + acpi_walk_info *info = (acpi_walk_info *) context; acpi_namespace_node *this_node; - u8 *value; acpi_operand_object *obj_desc = NULL; acpi_object_type8 obj_type; acpi_object_type8 type; @@ -118,12 +118,13 @@ u32 downstream_sibling_mask = 0; u32 level_tmp; u32 which_bit; + u32 i; PROC_NAME ("Ns_dump_one_object"); - this_node = acpi_ns_convert_handle_to_entry (obj_handle); + this_node = acpi_ns_map_handle_to_node (obj_handle); level_tmp = level; type = this_node->type; @@ -204,56 +205,198 @@ /* * Now we can print out the pertinent information */ - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %4.4s %-9s ", &this_node->name, acpi_ut_get_type_name (type))); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "%p S:%p O:%p", this_node, this_node->child, this_node->object)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %4.4s %-12s %p", + (char*)&this_node->name, acpi_ut_get_type_name (type), this_node)); + obj_desc = this_node->object; - if (!this_node->object) { - /* No attached object, we are done */ + switch (info->display_type) { + case ACPI_DISPLAY_SUMMARY: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n")); - return (AE_OK); - } + if (!obj_desc) { + /* No attached object, we are done */ - switch (type) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n")); + return (AE_OK); + } - case ACPI_TYPE_METHOD: - /* Name is a Method and its AML offset/length are set */ + switch (type) { + case ACPI_TYPE_PROCESSOR: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ID %d Addr %.4X Len %.4X\n", + obj_desc->processor.proc_id, + obj_desc->processor.address, + obj_desc->processor.length)); + break; - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " M:%p-%X\n", - ((acpi_operand_object *) this_node->object)->method.pcode, - ((acpi_operand_object *) this_node->object)->method.pcode_length)); + case ACPI_TYPE_DEVICE: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Notification object: %p", obj_desc)); + break; - break; + case ACPI_TYPE_METHOD: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Args %d Len %.4X Aml %p \n", + obj_desc->method.param_count, + obj_desc->method.aml_length, + obj_desc->method.aml_start)); + break; + case ACPI_TYPE_INTEGER: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " = %8.8X%8.8X\n", + HIDWORD (obj_desc->integer.value), + LODWORD (obj_desc->integer.value))); + break; - case ACPI_TYPE_INTEGER: + case ACPI_TYPE_PACKAGE: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Elements %.2X\n", + obj_desc->package.count)); + break; - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " N:%X\n", - ((acpi_operand_object *) this_node->object)->integer.value)); - break; + case ACPI_TYPE_BUFFER: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Len %.2X", + obj_desc->buffer.length)); + /* Dump some of the buffer */ - case ACPI_TYPE_STRING: + if (obj_desc->buffer.length > 0) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " =")); + for (i = 0; (i < obj_desc->buffer.length && i < 12); i++) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %.2X", + obj_desc->buffer.pointer[i])); + } + } + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n")); + break; - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " S:%p-%X\n", - ((acpi_operand_object *) this_node->object)->string.pointer, - ((acpi_operand_object *) this_node->object)->string.length)); - break; + case ACPI_TYPE_STRING: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Len %.2X", + obj_desc->string.length)); + if (obj_desc->string.length > 0) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " = \"%.32s\"...", + obj_desc->string.pointer)); + } + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n")); + break; - case ACPI_TYPE_BUFFER: + case ACPI_TYPE_REGION: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [%s]", + acpi_ut_get_region_name (obj_desc->region.space_id))); + if (obj_desc->region.flags & AOPOBJ_DATA_VALID) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Addr %8.8X%8.8X Len %.4X\n", + HIDWORD(obj_desc->region.address), + LODWORD(obj_desc->region.address), + obj_desc->region.length)); + } + else { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [Address/Length not evaluated]\n")); + } + break; + + case INTERNAL_TYPE_REFERENCE: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [%s]\n", + acpi_ps_get_opcode_name (obj_desc->reference.opcode))); + break; + + case ACPI_TYPE_BUFFER_FIELD: + + /* TBD: print Buffer name when we can easily get it */ + break; + + case INTERNAL_TYPE_REGION_FIELD: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]", + (char *) &obj_desc->common_field.region_obj->region.node->name)); + break; + + case INTERNAL_TYPE_BANK_FIELD: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]", + (char *) &obj_desc->common_field.region_obj->region.node->name)); + break; + + case INTERNAL_TYPE_INDEX_FIELD: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]", + (char *) &obj_desc->index_field.index_obj->common_field.region_obj->region.node->name)); + break; + + default: + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Object %p\n", obj_desc)); + break; + } + + /* Common field handling */ + + switch (type) { + case ACPI_TYPE_BUFFER_FIELD: + case INTERNAL_TYPE_REGION_FIELD: + case INTERNAL_TYPE_BANK_FIELD: + case INTERNAL_TYPE_INDEX_FIELD: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Off %.2X Len %.2X Acc %.2d\n", + (obj_desc->common_field.base_byte_offset * 8) + obj_desc->common_field.start_field_bit_offset, + obj_desc->common_field.bit_length, + obj_desc->common_field.access_bit_width)); + break; + } - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " B:%p-%X\n", - ((acpi_operand_object *) this_node->object)->buffer.pointer, - ((acpi_operand_object *) this_node->object)->buffer.length)); break; - default: + case ACPI_DISPLAY_OBJECTS: + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "%p O:%p", + this_node, obj_desc)); + + if (!obj_desc) { + /* No attached object, we are done */ + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n")); + return (AE_OK); + } + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(R%d)", + obj_desc->common.reference_count)); + + switch (type) { + + case ACPI_TYPE_METHOD: + + /* Name is a Method and its AML offset/length are set */ + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " M:%p-%X\n", + obj_desc->method.aml_start, + obj_desc->method.aml_length)); + + break; + + + case ACPI_TYPE_INTEGER: + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " N:%X%X\n", + HIDWORD(obj_desc->integer.value), + LODWORD(obj_desc->integer.value))); + break; + + + case ACPI_TYPE_STRING: + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " S:%p-%X\n", + obj_desc->string.pointer, + obj_desc->string.length)); + break; + + + case ACPI_TYPE_BUFFER: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n")); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " B:%p-%X\n", + obj_desc->buffer.pointer, + obj_desc->buffer.length)); + break; + + + default: + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n")); + break; + } break; } @@ -266,30 +409,24 @@ /* If there is an attached object, display it */ - value = this_node->object; + obj_desc = this_node->object; /* Dump attached objects */ - while (value) { + while (obj_desc) { obj_type = INTERNAL_TYPE_INVALID; /* Decode the type of attached object and dump the contents */ - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Attached Object %p: ", value)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Attached Object %p: ", obj_desc)); - if (acpi_tb_system_table_pointer (value)) { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to AML Code)\n")); - bytes_to_dump = 16; - } - - else if (VALID_DESCRIPTOR_TYPE (value, ACPI_DESC_TYPE_NAMED)) { + if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to Node)\n")); bytes_to_dump = sizeof (acpi_namespace_node); } - else if (VALID_DESCRIPTOR_TYPE (value, ACPI_DESC_TYPE_INTERNAL)) { - obj_desc = (acpi_operand_object *) value; + else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_INTERNAL)) { obj_type = obj_desc->common.type; if (obj_type > INTERNAL_TYPE_MAX) { @@ -298,23 +435,22 @@ } else { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %X [%s])\n", + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %2.2X [%s])\n", obj_type, acpi_ut_get_type_name (obj_type))); bytes_to_dump = sizeof (acpi_operand_object); } } else { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(String or Buffer - not descriptor)\n", value)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(String or Buffer - not descriptor)\n")); bytes_to_dump = 16; } - DUMP_BUFFER (value, bytes_to_dump); + DUMP_BUFFER (obj_desc, bytes_to_dump); /* If value is NOT an internal object, we are done */ - if ((acpi_tb_system_table_pointer (value)) || - (VALID_DESCRIPTOR_TYPE (value, ACPI_DESC_TYPE_NAMED))) { + if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { goto cleanup; } @@ -323,35 +459,35 @@ */ switch (obj_type) { case ACPI_TYPE_STRING: - value = (u8 *) obj_desc->string.pointer; + obj_desc = (acpi_operand_object *) obj_desc->string.pointer; break; case ACPI_TYPE_BUFFER: - value = (u8 *) obj_desc->buffer.pointer; + obj_desc = (acpi_operand_object *) obj_desc->buffer.pointer; break; case ACPI_TYPE_BUFFER_FIELD: - value = (u8 *) obj_desc->buffer_field.buffer_obj; + obj_desc = (acpi_operand_object *) obj_desc->buffer_field.buffer_obj; break; case ACPI_TYPE_PACKAGE: - value = (u8 *) obj_desc->package.elements; + obj_desc = (acpi_operand_object *) obj_desc->package.elements; break; case ACPI_TYPE_METHOD: - value = (u8 *) obj_desc->method.pcode; + obj_desc = (acpi_operand_object *) obj_desc->method.aml_start; break; case INTERNAL_TYPE_REGION_FIELD: - value = (u8 *) obj_desc->field.region_obj; + obj_desc = (acpi_operand_object *) obj_desc->field.region_obj; break; case INTERNAL_TYPE_BANK_FIELD: - value = (u8 *) obj_desc->bank_field.region_obj; + obj_desc = (acpi_operand_object *) obj_desc->bank_field.region_obj; break; case INTERNAL_TYPE_INDEX_FIELD: - value = (u8 *) obj_desc->index_field.index_obj; + obj_desc = (acpi_operand_object *) obj_desc->index_field.index_obj; break; default: @@ -386,11 +522,12 @@ void acpi_ns_dump_objects ( acpi_object_type8 type, + u8 display_type, u32 max_depth, u32 owner_id, acpi_handle start_handle) { - ACPI_WALK_INFO info; + acpi_walk_info info; FUNCTION_ENTRY (); @@ -398,6 +535,8 @@ info.debug_level = ACPI_LV_TABLES; info.owner_id = owner_id; + info.display_type = display_type; + acpi_ns_walk_namespace (type, start_handle, max_depth, NS_WALK_NO_UNLOCK, acpi_ns_dump_one_object, (void *) &info, NULL); @@ -441,8 +580,8 @@ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ")); } - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " HID: %.8X, ADR: %.8X, Status: %x\n", - info.hardware_id, info.address, info.current_status)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " HID: %s, ADR: %8.8X%8.8X, Status: %x\n", + info.hardware_id, HIDWORD(info.address), LODWORD(info.address), info.current_status)); } return (status); @@ -524,7 +663,8 @@ } - acpi_ns_dump_objects (ACPI_TYPE_ANY, max_depth, ACPI_UINT32_MAX, search_handle); + acpi_ns_dump_objects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, max_depth, + ACPI_UINT32_MAX, search_handle); return_VOID; } @@ -545,7 +685,7 @@ acpi_handle handle, u32 debug_level) { - ACPI_WALK_INFO info; + acpi_walk_info info; FUNCTION_ENTRY (); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nseval.c linux/drivers/acpi/namespace/nseval.c --- v2.4.13/linux/drivers/acpi/namespace/nseval.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nseval.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: nseval - Object evaluation interfaces -- includes control * method lookup and execution. - * $Revision: 97 $ + * $Revision: 102 $ * ******************************************************************************/ @@ -93,7 +93,7 @@ acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); - prefix_node = acpi_ns_convert_handle_to_entry (handle); + prefix_node = acpi_ns_map_handle_to_node (handle); if (!prefix_node) { acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); status = AE_BAD_PARAMETER; @@ -271,7 +271,7 @@ acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); - node = acpi_ns_convert_handle_to_entry (handle); + node = acpi_ns_map_handle_to_node (handle); if (!node) { acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); return_ACPI_STATUS (AE_BAD_PARAMETER); @@ -378,17 +378,18 @@ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No attached method object\n")); acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); - return_ACPI_STATUS (AE_ERROR); + return_ACPI_STATUS (AE_NULL_OBJECT); } - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Control method at Offset %x Length %lx]\n", - obj_desc->method.pcode + 1, obj_desc->method.pcode_length - 1)); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Control method at Offset %p Length %x]\n", + obj_desc->method.aml_start + 1, obj_desc->method.aml_length - 1)); DUMP_PATHNAME (method_node, "Ns_execute_control_method: Executing", ACPI_LV_NAMES, _COMPONENT); - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "At offset %8XH\n", obj_desc->method.pcode + 1)); + ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "At offset %p\n", + obj_desc->method.aml_start + 1)); /* @@ -437,7 +438,7 @@ { acpi_status status = AE_OK; acpi_operand_object *obj_desc; - acpi_operand_object *val_desc; + acpi_operand_object *source_desc; FUNCTION_TRACE ("Ns_get_object_value"); @@ -460,8 +461,8 @@ /* * Get the attached object */ - val_desc = acpi_ns_get_attached_object (node); - if (!val_desc) { + source_desc = acpi_ns_get_attached_object (node); + if (!source_desc) { status = AE_NULL_OBJECT; goto unlock_and_exit; } @@ -472,7 +473,7 @@ * TBD: [Future] - need a low-level object copy that handles * the reference count automatically. (Don't want to copy it) */ - MEMCPY (obj_desc, val_desc, sizeof (acpi_operand_object)); + MEMCPY (obj_desc, source_desc, sizeof (acpi_operand_object)); obj_desc->common.reference_count = 1; acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsinit.c linux/drivers/acpi/namespace/nsinit.c --- v2.4.13/linux/drivers/acpi/namespace/nsinit.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsinit.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nsinit - namespace initialization - * $Revision: 31 $ + * $Revision: 33 $ * *****************************************************************************/ @@ -51,7 +51,7 @@ void) { acpi_status status; - ACPI_INIT_WALK_INFO info; + acpi_init_walk_info info; FUNCTION_TRACE ("Ns_initialize_objects"); @@ -112,7 +112,7 @@ void) { acpi_status status; - ACPI_DEVICE_WALK_INFO info; + acpi_device_walk_info info; FUNCTION_TRACE ("Ns_initialize_devices"); @@ -170,7 +170,7 @@ { acpi_object_type8 type; acpi_status status; - ACPI_INIT_WALK_INFO *info = (ACPI_INIT_WALK_INFO *) context; + acpi_init_walk_info *info = (acpi_init_walk_info *) context; acpi_namespace_node *node = (acpi_namespace_node *) obj_handle; acpi_operand_object *obj_desc; @@ -218,7 +218,7 @@ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR, "\n")); ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s while getting region arguments [%4.4s]\n", - acpi_format_exception (status), &node->name)); + acpi_format_exception (status), (char*)&node->name)); } if (!(acpi_dbg_level & ACPI_LV_INIT)) { @@ -241,7 +241,7 @@ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR, "\n")); ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s while getting buffer field arguments [%4.4s]\n", - acpi_format_exception (status), &node->name)); + acpi_format_exception (status), (char*)&node->name)); } if (!(acpi_dbg_level & ACPI_LV_INIT)) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, ".")); @@ -268,7 +268,7 @@ * * FUNCTION: Acpi_ns_init_one_device * - * PARAMETERS: ACPI_WALK_CALLBACK + * PARAMETERS: acpi_walk_callback * * RETURN: acpi_status * @@ -288,7 +288,7 @@ acpi_status status; acpi_namespace_node *node; u32 flags; - ACPI_DEVICE_WALK_INFO *info = (ACPI_DEVICE_WALK_INFO *) context; + acpi_device_walk_info *info = (acpi_device_walk_info *) context; FUNCTION_TRACE ("Ns_init_one_device"); @@ -302,7 +302,7 @@ acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); - node = acpi_ns_convert_handle_to_entry (obj_handle); + node = acpi_ns_map_handle_to_node (obj_handle); if (!node) { acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); return (AE_BAD_PARAMETER); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsload.c linux/drivers/acpi/namespace/nsload.c --- v2.4.13/linux/drivers/acpi/namespace/nsload.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsload.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nsload - namespace loading/expanding/contracting procedures - * $Revision: 43 $ + * $Revision: 47 $ * *****************************************************************************/ @@ -109,35 +109,14 @@ u32 pass_number, acpi_table_desc *table_desc) { - acpi_parse_downwards descending_callback; - acpi_parse_upwards ascending_callback; acpi_parse_object *parse_root; acpi_status status; + acpi_walk_state *walk_state; FUNCTION_TRACE ("Ns_one_complete_parse"); - switch (pass_number) { - case 1: - descending_callback = acpi_ds_load1_begin_op; - ascending_callback = acpi_ds_load1_end_op; - break; - - case 2: - descending_callback = acpi_ds_load2_begin_op; - ascending_callback = acpi_ds_load2_end_op; - break; - - case 3: - descending_callback = acpi_ds_exec_begin_op; - ascending_callback = acpi_ds_exec_end_op; - break; - - default: - return (AE_BAD_PARAMETER); - } - /* Create and init a Root Node */ parse_root = acpi_ps_alloc_op (AML_SCOPE_OP); @@ -148,15 +127,26 @@ ((acpi_parse2_object *) parse_root)->name = ACPI_ROOT_NAME; - /* Pass 1: Parse everything except control method bodies */ + /* Create and initialize a new walk state */ - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "*PARSE* pass %d parse\n", pass_number)); + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, + NULL, NULL, NULL); + if (!walk_state) { + acpi_ps_free_op (parse_root); + return_ACPI_STATUS (AE_NO_MEMORY); + } - status = acpi_ps_parse_aml (parse_root, table_desc->aml_pointer, - table_desc->aml_length, - ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE, - NULL, NULL, NULL, descending_callback, - ascending_callback); + status = acpi_ds_init_aml_walk (walk_state, parse_root, NULL, table_desc->aml_start, + table_desc->aml_length, NULL, NULL, pass_number); + if (ACPI_FAILURE (status)) { + acpi_ds_delete_walk_state (walk_state); + return_ACPI_STATUS (status); + } + + /* Parse the AML */ + + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "*PARSE* pass %d parse\n", pass_number)); + status = acpi_ps_parse_aml (walk_state); acpi_ps_delete_parse_tree (parse_root); return_ACPI_STATUS (status); @@ -225,8 +215,8 @@ * * FUNCTION: Acpi_ns_load_table * - * PARAMETERS: *Pcode_addr - Address of pcode block - * Pcode_length - Length of pcode block + * PARAMETERS: Table_desc - Descriptor for table to be loaded + * Node - Owning NS node * * RETURN: Status * @@ -245,12 +235,12 @@ FUNCTION_TRACE ("Ns_load_table"); - if (!table_desc->aml_pointer) { + if (!table_desc->aml_start) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null AML pointer\n")); return_ACPI_STATUS (AE_BAD_PARAMETER); } - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AML block at %p\n", table_desc->aml_pointer)); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AML block at %p\n", table_desc->aml_start)); if (!table_desc->aml_length) { diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsnames.c linux/drivers/acpi/namespace/nsnames.c --- v2.4.13/linux/drivers/acpi/namespace/nsnames.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsnames.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nsnames - Name manipulation and search - * $Revision: 63 $ + * $Revision: 64 $ * ******************************************************************************/ @@ -203,7 +203,7 @@ return_ACPI_STATUS (AE_NO_NAMESPACE); } - node = acpi_ns_convert_handle_to_entry (target_handle); + node = acpi_ns_map_handle_to_node (target_handle); if (!node) { return_ACPI_STATUS (AE_BAD_PARAMETER); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsobject.c linux/drivers/acpi/namespace/nsobject.c --- v2.4.13/linux/drivers/acpi/namespace/nsobject.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsobject.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: nsobject - Utilities for objects attached to namespace * table entries - * $Revision: 65 $ + * $Revision: 67 $ * ******************************************************************************/ @@ -63,7 +63,6 @@ acpi_operand_object *previous_obj_desc; acpi_object_type8 obj_type = ACPI_TYPE_ANY; u8 flags; - u16 opcode; FUNCTION_TRACE ("Ns_attach_object"); @@ -158,87 +157,6 @@ obj_type = type; } - /* - * Type is TYPE_Any, we must try to determinte the - * actual type of the object. - * Check if value points into the AML code - */ - else if (acpi_tb_system_table_pointer (object)) { - /* - * Object points into the AML stream. - * Set a flag bit in the Node to indicate this - */ - flags |= ANOBJ_AML_ATTACHMENT; - - /* - * The next byte (perhaps the next two bytes) - * will be the AML opcode - */ - MOVE_UNALIGNED16_TO_16 (&opcode, object); - - /* Check for a recognized Opcode */ - - switch ((u8) opcode) { - - case AML_OP_PREFIX: - - if (opcode != AML_REVISION_OP) { - /* - * Op_prefix is unrecognized unless part - * of Revision_op - */ - break; - } - - /* case AML_REVISION_OP: fall through and set the type to Integer */ - - case AML_ZERO_OP: - case AML_ONES_OP: - case AML_ONE_OP: - case AML_BYTE_OP: - case AML_WORD_OP: - case AML_DWORD_OP: - case AML_QWORD_OP: - - obj_type = ACPI_TYPE_INTEGER; - break; - - - case AML_STRING_OP: - - obj_type = ACPI_TYPE_STRING; - break; - - - case AML_BUFFER_OP: - - obj_type = ACPI_TYPE_BUFFER; - break; - - - case AML_MUTEX_OP: - - obj_type = ACPI_TYPE_MUTEX; - break; - - - case AML_PACKAGE_OP: - - obj_type = ACPI_TYPE_PACKAGE; - break; - - - default: - - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "AML Opcode/Type [%x] not supported in attach\n", - (u8) opcode)); - - return_ACPI_STATUS (AE_TYPE); - break; - } - } - else { /* * Cannot figure out the type -- set to Def_any which @@ -249,12 +167,7 @@ "Ns_attach_object confused: setting bogus type for ", ACPI_LV_INFO, _COMPONENT); - if (acpi_tb_system_table_pointer (object)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "AML-stream code %02x\n", *(u8 *) object)); - } - - else if (VALID_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_NAMED)) { + if (VALID_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_NAMED)) { DUMP_PATHNAME (object, "name ", ACPI_LV_INFO, _COMPONENT); } @@ -270,7 +183,7 @@ ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Installing %p into Node %p [%4.4s]\n", - obj_desc, node, &node->name)); + obj_desc, node, (char*)&node->name)); /* @@ -340,21 +253,12 @@ node->object = NULL; - /* Found a valid value */ - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Object=%p Value=%p Name %4.4s\n", - node, obj_desc, &node->name)); + node, obj_desc, (char*)&node->name)); - /* - * Not every value is an object allocated via ACPI_MEM_CALLOCATE, - * - must check - */ - if (!acpi_tb_system_table_pointer (obj_desc)) { - /* Attempt to delete the object (and all subobjects) */ - - acpi_ut_remove_reference (obj_desc); - } + /* Remove one reference on the object (and all subobjects) */ + acpi_ut_remove_reference (obj_desc); return_VOID; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nssearch.c linux/drivers/acpi/namespace/nssearch.c --- v2.4.13/linux/drivers/acpi/namespace/nssearch.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nssearch.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: nssearch - Namespace search - * $Revision: 74 $ + * $Revision: 75 $ * ******************************************************************************/ @@ -80,7 +80,7 @@ scope_name = acpi_ns_get_table_pathname (node); if (scope_name) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching %s [%p] For %4.4s (type %X)\n", - scope_name, node, &target_name, type)); + scope_name, node, (char*)&target_name, type)); ACPI_MEM_FREE (scope_name); } @@ -124,7 +124,7 @@ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Name %4.4s (actual type %X) found at %p\n", - &target_name, next_node->type, next_node)); + (char*)&target_name, next_node->type, next_node)); *return_node = next_node; return_ACPI_STATUS (AE_OK); @@ -150,7 +150,7 @@ /* Searched entire table, not found */ ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Name %4.4s (type %X) not found at %p\n", - &target_name, type, next_node)); + (char*)&target_name, type, next_node)); return_ACPI_STATUS (AE_NOT_FOUND); } @@ -205,12 +205,12 @@ (!parent_node)) { if (!parent_node) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] has no parent\n", - &target_name)); + (char*)&target_name)); } if (acpi_ns_local (type)) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] type %X is local(no search)\n", - &target_name, type)); + (char*)&target_name, type)); } return_ACPI_STATUS (AE_NOT_FOUND); @@ -219,7 +219,7 @@ /* Search the parent tree */ - ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching parent for %4.4s\n", &target_name)); + ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Searching parent for %4.4s\n", (char*)&target_name)); /* * Search parents until found the target or we have backed up to @@ -295,7 +295,7 @@ /* Parameter validation */ if (!node || !target_name || !return_node) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null param- Table %p Name %p Return %p\n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null param- Table %p Name %X Return %p\n", node, target_name, return_node)); REPORT_ERROR (("Ns_search_and_enter: bad (null) parameter\n")); @@ -306,7 +306,7 @@ /* Name must consist of printable characters */ if (!acpi_ut_valid_acpi_name (target_name)) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "*** Bad character in name: %08lx *** \n", + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "*** Bad character in name: %08x *** \n", target_name)); REPORT_ERROR (("Ns_search_and_enter: Bad character in ACPI Name\n")); @@ -364,7 +364,7 @@ */ if (interpreter_mode == IMODE_EXECUTE) { ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%4.4s Not found in %p [Not adding]\n", - &target_name, node)); + (char*)&target_name, node)); return_ACPI_STATUS (AE_NOT_FOUND); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsutils.c linux/drivers/acpi/namespace/nsutils.c --- v2.4.13/linux/drivers/acpi/namespace/nsutils.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsutils.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: nsutils - Utilities for accessing ACPI namespace, accessing * parents and siblings and Scope manipulation - * $Revision: 89 $ + * $Revision: 92 $ * *****************************************************************************/ @@ -148,7 +148,7 @@ acpi_status acpi_ns_get_internal_name_length ( - ACPI_NAMESTRING_INFO *info) + acpi_namestring_info *info) { NATIVE_CHAR *next_external_char; u32 i; @@ -225,7 +225,7 @@ acpi_status acpi_ns_build_internal_name ( - ACPI_NAMESTRING_INFO *info) + acpi_namestring_info *info) { u32 num_segments = info->num_segments; NATIVE_CHAR *internal_name = info->internal_name; @@ -356,7 +356,7 @@ NATIVE_CHAR **converted_name) { NATIVE_CHAR *internal_name; - ACPI_NAMESTRING_INFO info; + acpi_namestring_info info; acpi_status status; @@ -549,7 +549,7 @@ /******************************************************************************* * - * FUNCTION: Acpi_ns_convert_handle_to_entry + * FUNCTION: Acpi_ns_map_handle_to_node * * PARAMETERS: Handle - Handle to be converted to an Node * @@ -560,7 +560,7 @@ ******************************************************************************/ acpi_namespace_node * -acpi_ns_convert_handle_to_entry ( +acpi_ns_map_handle_to_node ( acpi_handle handle) { @@ -829,7 +829,7 @@ parent_node = acpi_ns_get_parent_object (child_node); if (parent_node) { ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Parent of %p [%4.4s] is %p [%4.4s]\n", - child_node, &child_node->name, parent_node, &parent_node->name)); + child_node, (char*)&child_node->name, parent_node, (char*)&parent_node->name)); if (parent_node->name) { return_VALUE (parent_node->name); @@ -837,7 +837,7 @@ } ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "unable to find parent of %p (%4.4s)\n", - child_node, &child_node->name)); + child_node, (char*)&child_node->name)); } return_VALUE (ACPI_UNKNOWN_NAME); @@ -925,21 +925,21 @@ /******************************************************************************* * - * FUNCTION: Acpi_ns_get_next_valid_object + * FUNCTION: Acpi_ns_get_next_valid_node * * PARAMETERS: Node - Current table entry * - * RETURN: Next valid object in the table. NULL if no more valid - * objects + * RETURN: Next valid Node in the linked node list. NULL if no more valid + * nodess * - * DESCRIPTION: Find the next valid object within a name table. + * DESCRIPTION: Find the next valid node within a name table. * Useful for implementing NULL-end-of-list loops. * ******************************************************************************/ acpi_namespace_node * -acpi_ns_get_next_valid_object ( +acpi_ns_get_next_valid_node ( acpi_namespace_node *node) { diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nswalk.c linux/drivers/acpi/namespace/nswalk.c --- v2.4.13/linux/drivers/acpi/namespace/nswalk.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nswalk.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: nswalk - Functions for walking the ACPI namespace - * $Revision: 24 $ + * $Revision: 26 $ * *****************************************************************************/ @@ -33,27 +33,27 @@ MODULE_NAME ("nswalk") -/**************************************************************************** +/******************************************************************************* * - * FUNCTION: Acpi_get_next_object + * FUNCTION: Acpi_ns_get_next_node * - * PARAMETERS: Type - Type of object to be searched for - * Parent - Parent object whose children we are - * getting - * Last_child - Previous child that was found. + * PARAMETERS: Type - Type of node to be searched for + * Parent_node - Parent node whose children we are + * getting + * Child_node - Previous child that was found. * The NEXT child will be returned * * RETURN: acpi_namespace_node - Pointer to the NEXT child or NULL if - * none is found. + * none is found. * - * DESCRIPTION: Return the next peer object within the namespace. If Handle - * is valid, Scope is ignored. Otherwise, the first object + * DESCRIPTION: Return the next peer node within the namespace. If Handle + * is valid, Scope is ignored. Otherwise, the first node * within Scope is returned. * - ****************************************************************************/ + ******************************************************************************/ acpi_namespace_node * -acpi_ns_get_next_object ( +acpi_ns_get_next_node ( acpi_object_type8 type, acpi_namespace_node *parent_node, acpi_namespace_node *child_node) @@ -73,12 +73,11 @@ } else { - /* Start search at the NEXT object */ + /* Start search at the NEXT node */ - next_node = acpi_ns_get_next_valid_object (child_node); + next_node = acpi_ns_get_next_valid_node (child_node); } - /* If any type is OK, we are done */ if (type == ACPI_TYPE_ANY) { @@ -87,8 +86,7 @@ return (next_node); } - - /* Must search for the object -- but within this scope only */ + /* Must search for the node -- but within this scope only */ while (next_node) { /* If type matches, we are done */ @@ -97,19 +95,18 @@ return (next_node); } - /* Otherwise, move on to the next object */ + /* Otherwise, move on to the next node */ - next_node = acpi_ns_get_next_valid_object (next_node); + next_node = acpi_ns_get_next_valid_node (next_node); } - /* Not found */ return (NULL); } -/****************************************************************************** +/******************************************************************************* * * FUNCTION: Acpi_ns_walk_namespace * @@ -120,13 +117,13 @@ * the callback routine * User_function - Called when an object of "Type" is found * Context - Passed to user function - * - * RETURNS Return value from the User_function if terminated early. - * Otherwise, returns NULL. + * Return_value - from the User_function if terminated early. + * Otherwise, returns NULL. + * RETURNS: Status * * DESCRIPTION: Performs a modified depth-first walk of the namespace tree, - * starting (and ending) at the object specified by Start_handle. - * The User_function is called whenever an object that matches + * starting (and ending) at the node specified by Start_handle. + * The User_function is called whenever a node that matches * the type parameter is found. If the user function returns * a non-zero value, the search is terminated immediately and this * value is returned to the caller. @@ -145,7 +142,7 @@ acpi_handle start_node, u32 max_depth, u8 unlock_before_callback, - ACPI_WALK_CALLBACK user_function, + acpi_walk_callback user_function, void *context, void **return_value) { @@ -165,32 +162,26 @@ start_node = acpi_gbl_root_node; } - - /* Null child means "get first object" */ + /* Null child means "get first node" */ parent_node = start_node; - child_node = 0; + child_node = 0; child_type = ACPI_TYPE_ANY; level = 1; /* - * Traverse the tree of objects until we bubble back up to where we + * Traverse the tree of nodes until we bubble back up to where we * started. When Level is zero, the loop is done because we have * bubbled up to (and passed) the original parent handle (Start_entry) */ while (level > 0) { - /* - * Get the next typed object in this scope. Null returned - * if not found - */ - status = AE_OK; - child_node = acpi_ns_get_next_object (ACPI_TYPE_ANY, - parent_node, - child_node); + /* Get the next node in this scope. Null if not found */ + status = AE_OK; + child_node = acpi_ns_get_next_node (ACPI_TYPE_ANY, parent_node, child_node); if (child_node) { /* - * Found an object, Get the type if we are not + * Found node, Get the type if we are not * searching for ANY */ if (type != ACPI_TYPE_ANY) { @@ -199,7 +190,7 @@ if (child_type == type) { /* - * Found a matching object, invoke the user + * Found a matching node, invoke the user * callback function */ if (unlock_before_callback) { @@ -245,11 +236,10 @@ * maximum depth has been reached. */ if ((level < max_depth) && (status != AE_CTRL_DEPTH)) { - if (acpi_ns_get_next_object (ACPI_TYPE_ANY, - child_node, 0)) { + if (acpi_ns_get_next_node (ACPI_TYPE_ANY, child_node, 0)) { /* * There is at least one child of this - * object, visit the object + * node, visit the onde */ level++; parent_node = child_node; @@ -260,9 +250,9 @@ else { /* - * No more children in this object (Acpi_ns_get_next_object + * No more children of this node (Acpi_ns_get_next_node * failed), go back upwards in the namespace tree to - * the object's parent. + * the node's parent. */ level--; child_node = parent_node; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsxfname.c linux/drivers/acpi/namespace/nsxfname.c --- v2.4.13/linux/drivers/acpi/namespace/nsxfname.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsxfname.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: nsxfname - Public interfaces to the ACPI subsystem * ACPI Namespace oriented interfaces - * $Revision: 80 $ + * $Revision: 82 $ * *****************************************************************************/ @@ -70,13 +70,6 @@ FUNCTION_ENTRY (); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return (status); - } - /* Parameter Validation */ if (!ret_handle || !pathname) { @@ -88,7 +81,7 @@ if (parent) { acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); - prefix_node = acpi_ns_convert_handle_to_entry (parent); + prefix_node = acpi_ns_map_handle_to_node (parent); if (!prefix_node) { acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); return (AE_BAD_PARAMETER); @@ -144,13 +137,6 @@ acpi_namespace_node *node; - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return (status); - } - /* Buffer pointer must be valid always */ if (!ret_path_ptr || (name_type > ACPI_NAME_TYPE_MAX)) { @@ -177,7 +163,7 @@ * Validate handle and convert to an Node */ acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); - node = acpi_ns_convert_handle_to_entry (handle); + node = acpi_ns_map_handle_to_node (handle); if (!node) { status = AE_BAD_PARAMETER; goto unlock_and_exit; @@ -226,21 +212,14 @@ acpi_handle handle, acpi_device_info *info) { - ACPI_DEVICE_ID hid; - ACPI_DEVICE_ID uid; + acpi_device_id hid; + acpi_device_id uid; acpi_status status; u32 device_status = 0; acpi_integer address = 0; acpi_namespace_node *node; - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return (status); - } - /* Parameter validation */ if (!handle || !info) { @@ -249,7 +228,7 @@ acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); - node = acpi_ns_convert_handle_to_entry (handle); + node = acpi_ns_map_handle_to_node (handle); if (!node) { acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); return (AE_BAD_PARAMETER); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/namespace/nsxfobj.c linux/drivers/acpi/namespace/nsxfobj.c --- v2.4.13/linux/drivers/acpi/namespace/nsxfobj.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/namespace/nsxfobj.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: nsxfobj - Public interfaces to the ACPI subsystem * ACPI Object oriented interfaces - * $Revision: 90 $ + * $Revision: 95 $ * ******************************************************************************/ @@ -41,12 +41,10 @@ * * PARAMETERS: Handle - Object handle (optional) * *Pathname - Object pathname (optional) - * **Params - List of parameters to pass to - * method, terminated by NULL. - * Params itself may be NULL - * if no parameters are being - * passed. - * *Return_object - Where to put method's return value (if + * **External_params - List of parameters to pass to method, + * terminated by NULL. May be NULL + * if no parameters are being passed. + * *Return_buffer - Where to put method's return value (if * any). If NULL, no value is returned. * * RETURN: Status @@ -61,12 +59,12 @@ acpi_evaluate_object ( acpi_handle handle, acpi_string pathname, - acpi_object_list *param_objects, + acpi_object_list *external_params, acpi_buffer *return_buffer) { acpi_status status; - acpi_operand_object **param_ptr = NULL; - acpi_operand_object *return_obj = NULL; + acpi_operand_object **internal_params = NULL; + acpi_operand_object *internal_return_obj = NULL; u32 buffer_space_needed; u32 user_buffer_length; u32 i; @@ -75,25 +73,18 @@ FUNCTION_TRACE ("Acpi_evaluate_object"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* * If there are parameters to be passed to the object * (which must be a control method), the external objects * must be converted to internal objects */ - if (param_objects && param_objects->count) { + if (external_params && external_params->count) { /* * Allocate a new parameter block for the internal objects * Add 1 to count to allow for null terminated internal list */ - param_ptr = ACPI_MEM_CALLOCATE ((param_objects->count + 1) * sizeof (void *)); - if (!param_ptr) { + internal_params = ACPI_MEM_CALLOCATE ((external_params->count + 1) * sizeof (void *)); + if (!internal_params) { return_ACPI_STATUS (AE_NO_MEMORY); } @@ -102,16 +93,16 @@ * Convert each external object in the list to an * internal object */ - for (i = 0; i < param_objects->count; i++) { - status = acpi_ut_copy_eobject_to_iobject (¶m_objects->pointer[i], - ¶m_ptr[i]); + for (i = 0; i < external_params->count; i++) { + status = acpi_ut_copy_eobject_to_iobject (&external_params->pointer[i], + &internal_params[i]); if (ACPI_FAILURE (status)) { - acpi_ut_delete_internal_object_list (param_ptr); + acpi_ut_delete_internal_object_list (internal_params); return_ACPI_STATUS (status); } } - param_ptr[param_objects->count] = NULL; + internal_params[external_params->count] = NULL; } @@ -126,7 +117,7 @@ /* * The path is fully qualified, just evaluate by name */ - status = acpi_ns_evaluate_by_name (pathname, param_ptr, &return_obj); + status = acpi_ns_evaluate_by_name (pathname, internal_params, &internal_return_obj); } else if (!handle) { @@ -157,15 +148,15 @@ * The null pathname case means the handle is for * the actual object to be evaluated */ - status = acpi_ns_evaluate_by_handle (handle, param_ptr, &return_obj); + status = acpi_ns_evaluate_by_handle (handle, internal_params, &internal_return_obj); } else { /* * Both a Handle and a relative Pathname */ - status = acpi_ns_evaluate_relative (handle, pathname, param_ptr, - &return_obj); + status = acpi_ns_evaluate_relative (handle, pathname, internal_params, + &internal_return_obj); } } @@ -179,8 +170,8 @@ user_buffer_length = return_buffer->length; return_buffer->length = 0; - if (return_obj) { - if (VALID_DESCRIPTOR_TYPE (return_obj, ACPI_DESC_TYPE_NAMED)) { + if (internal_return_obj) { + if (VALID_DESCRIPTOR_TYPE (internal_return_obj, ACPI_DESC_TYPE_NAMED)) { /* * If we got an Node as a return object, * this means the object we are evaluating @@ -193,7 +184,7 @@ * types at a later date if necessary. */ status = AE_TYPE; - return_obj = NULL; /* No need to delete an Node */ + internal_return_obj = NULL; /* No need to delete an Node */ } if (ACPI_SUCCESS (status)) { @@ -201,7 +192,7 @@ * Find out how large a buffer is needed * to contain the returned object */ - status = acpi_ut_get_object_size (return_obj, + status = acpi_ut_get_object_size (internal_return_obj, &buffer_space_needed); if (ACPI_SUCCESS (status)) { /* @@ -226,7 +217,7 @@ /* * We have enough space for the object, build it */ - status = acpi_ut_copy_iobject_to_eobject (return_obj, + status = acpi_ut_copy_iobject_to_eobject (internal_return_obj, return_buffer); return_buffer->length = buffer_space_needed; } @@ -238,21 +229,21 @@ /* Delete the return and parameter objects */ - if (return_obj) { + if (internal_return_obj) { /* * Delete the internal return object. (Or at least * decrement the reference count by one) */ - acpi_ut_remove_reference (return_obj); + acpi_ut_remove_reference (internal_return_obj); } /* * Free the input parameter list (if we created one), */ - if (param_ptr) { + if (internal_params) { /* Free the allocated parameter block */ - acpi_ut_delete_internal_object_list (param_ptr); + acpi_ut_delete_internal_object_list (internal_params); } return_ACPI_STATUS (status); @@ -290,13 +281,6 @@ acpi_namespace_node *child_node = NULL; - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return (status); - } - /* Parameter validation */ if (type > ACPI_TYPE_MAX) { @@ -310,7 +294,7 @@ if (!child) { /* Start search at the beginning of the specified scope */ - parent_node = acpi_ns_convert_handle_to_entry (parent); + parent_node = acpi_ns_map_handle_to_node (parent); if (!parent_node) { status = AE_BAD_PARAMETER; goto unlock_and_exit; @@ -322,7 +306,7 @@ else { /* Convert and validate the handle */ - child_node = acpi_ns_convert_handle_to_entry (child); + child_node = acpi_ns_map_handle_to_node (child); if (!child_node) { status = AE_BAD_PARAMETER; goto unlock_and_exit; @@ -332,7 +316,7 @@ /* Internal function does the real work */ - node = acpi_ns_get_next_object ((acpi_object_type8) type, + node = acpi_ns_get_next_node ((acpi_object_type8) type, parent_node, child_node); if (!node) { status = AE_NOT_FOUND; @@ -370,15 +354,7 @@ acpi_object_type *ret_type) { acpi_namespace_node *node; - acpi_status status; - - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return (status); - } /* Parameter Validation */ @@ -399,7 +375,7 @@ /* Convert and validate the handle */ - node = acpi_ns_convert_handle_to_entry (handle); + node = acpi_ns_map_handle_to_node (handle); if (!node) { acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); return (AE_BAD_PARAMETER); @@ -436,13 +412,6 @@ acpi_status status = AE_OK; - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return (status); - } - if (!ret_handle) { return (AE_BAD_PARAMETER); } @@ -458,7 +427,7 @@ /* Convert and validate the handle */ - node = acpi_ns_convert_handle_to_entry (handle); + node = acpi_ns_map_handle_to_node (handle); if (!node) { status = AE_BAD_PARAMETER; goto unlock_and_exit; @@ -519,7 +488,7 @@ acpi_object_type type, acpi_handle start_object, u32 max_depth, - ACPI_WALK_CALLBACK user_function, + acpi_walk_callback user_function, void *context, void **return_value) { @@ -529,13 +498,6 @@ FUNCTION_TRACE ("Acpi_walk_namespace"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if ((type > ACPI_TYPE_MAX) || @@ -551,11 +513,9 @@ * must be allowed to make Acpi calls itself. */ acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); - status = acpi_ns_walk_namespace ((acpi_object_type8) type, - start_object, max_depth, - NS_WALK_UNLOCK, - user_function, context, - return_value); + status = acpi_ns_walk_namespace ((acpi_object_type8) type, start_object, + max_depth, NS_WALK_UNLOCK, user_function, context, + return_value); acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); @@ -587,14 +547,14 @@ acpi_status status; acpi_namespace_node *node; u32 flags; - ACPI_DEVICE_ID device_id; - ACPI_GET_DEVICES_INFO *info; + acpi_device_id device_id; + acpi_get_devices_info *info; info = context; acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); - node = acpi_ns_convert_handle_to_entry (obj_handle); + node = acpi_ns_map_handle_to_node (obj_handle); acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); if (!node) { @@ -665,23 +625,16 @@ acpi_status acpi_get_devices ( NATIVE_CHAR *HID, - ACPI_WALK_CALLBACK user_function, + acpi_walk_callback user_function, void *context, void **return_value) { acpi_status status; - ACPI_GET_DEVICES_INFO info; + acpi_get_devices_info info; FUNCTION_TRACE ("Acpi_get_devices"); - - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } /* Parameter validation */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/os.c linux/drivers/acpi/os.c --- v2.4.13/linux/drivers/acpi/os.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/os.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: os.c - Linux OSL functions - * $Revision: 46 $ + * $Revision: 49 $ * *****************************************************************************/ @@ -40,7 +40,6 @@ #include #include #include -#include "driver.h" #ifdef CONFIG_ACPI_EFI #include @@ -191,14 +190,7 @@ } if ((unsigned long) phys < virt_to_phys(high_memory)) { - struct page *page; *virt = phys_to_virt((unsigned long) phys); - - /* Check for stamping */ - page = virt_to_page(*virt); - if(page && !test_bit(PG_reserved, &page->flags)) - printk(KERN_WARNING "ACPI attempting to access kernel owned memory at %08lX.\n", (unsigned long)phys); - return AE_OK; } @@ -322,7 +314,7 @@ acpi_status acpi_os_write_port( ACPI_IO_ADDRESS port, - u32 value, + NATIVE_UINT value, u32 width) { switch (width) diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/ac_adapter/ac.c linux/drivers/acpi/ospm/ac_adapter/ac.c --- v2.4.13/linux/drivers/acpi/ospm/ac_adapter/ac.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/ac_adapter/ac.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: ac.c - * $Revision: 22 $ + * $Revision: 23 $ * *****************************************************************************/ @@ -76,7 +76,7 @@ * Print out basic adapter information. */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| AC Adapter[%02x]:[%p] %s\n", ac_adapter->device_handle, ac_adapter->acpi_handle, buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| AC Adapter[%02x]:[%p] %s\n", ac_adapter->device_handle, ac_adapter->acpi_handle, (char*)buffer.pointer)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); acpi_os_free(buffer.pointer); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/ac_adapter/ac_osl.c linux/drivers/acpi/ospm/ac_adapter/ac_osl.c --- v2.4.13/linux/drivers/acpi/ospm/ac_adapter/ac_osl.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/ac_adapter/ac_osl.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: ac_osl.c - * $Revision: 9 $ + * $Revision: 10 $ * *****************************************************************************/ @@ -35,7 +35,6 @@ MODULE_AUTHOR("Andrew Grover"); MODULE_DESCRIPTION("ACPI Component Architecture (CA) - AC Adapter Driver"); -MODULE_LICENSE("GPL"); #define AC_PROC_ROOT "ac_adapter" @@ -122,7 +121,7 @@ return(AE_BAD_PARAMETER); } - printk(KERN_INFO "AC Adapter: found\n"); + printk(KERN_INFO "ACPI: AC Adapter found\n"); proc_entry = proc_mkdir(ac_adapter->uid, ac_proc_root); if (!proc_entry) { diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/battery/bt.c linux/drivers/acpi/ospm/battery/bt.c --- v2.4.13/linux/drivers/acpi/ospm/battery/bt.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/battery/bt.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: bt.c - * $Revision: 27 $ + * $Revision: 29 $ * *****************************************************************************/ @@ -76,7 +76,7 @@ */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Battery[%02x]:[%p] %s\n", battery->device_handle, battery->acpi_handle, buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Battery[%02x]:[%p] %s\n", battery->device_handle, battery->acpi_handle, (char*)buffer.pointer)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| uid[%s] is_present[%d] power_units[%s]\n", battery->uid, battery->is_present, battery->power_units)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); @@ -116,7 +116,7 @@ return_ACPI_STATUS(AE_BAD_PARAMETER); } - MEMSET(&bif_buffer, 0, sizeof(acpi_buffer)); + memset(&bif_buffer, 0, sizeof(acpi_buffer)); /* * Evalute _BIF: @@ -147,7 +147,7 @@ package_format.length = sizeof("NNNNNNNNNSSSS"); package_format.pointer = "NNNNNNNNNSSSS"; - MEMSET(&package_data, 0, sizeof(acpi_buffer)); + memset(&package_data, 0, sizeof(acpi_buffer)); status = bm_extract_package_data(package, &package_format, &package_data); @@ -206,7 +206,7 @@ return_ACPI_STATUS(AE_BAD_PARAMETER); } - MEMSET(&bst_buffer, 0, sizeof(acpi_buffer)); + memset(&bst_buffer, 0, sizeof(acpi_buffer)); /* * Evalute _BST: @@ -237,7 +237,7 @@ package_format.length = sizeof("NNNN"); package_format.pointer = "NNNN"; - MEMSET(&package_data, 0, sizeof(acpi_buffer)); + memset(&package_data, 0, sizeof(acpi_buffer)); status = bm_extract_package_data(package, &package_format, &package_data); @@ -495,8 +495,8 @@ FUNCTION_TRACE("bt_initialize"); - MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID)); - MEMSET(&driver, 0, sizeof(BM_DRIVER)); + memset(&criteria, 0, sizeof(BM_DEVICE_ID)); + memset(&driver, 0, sizeof(BM_DRIVER)); /* * Register driver for driver method battery devices. @@ -533,8 +533,8 @@ FUNCTION_TRACE("bt_terminate"); - MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID)); - MEMSET(&driver, 0, sizeof(BM_DRIVER)); + memset(&criteria, 0, sizeof(BM_DEVICE_ID)); + memset(&driver, 0, sizeof(BM_DRIVER)); /* * Unregister driver for driver method battery devices. diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/battery/bt_osl.c linux/drivers/acpi/ospm/battery/bt_osl.c --- v2.4.13/linux/drivers/acpi/ospm/battery/bt_osl.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/battery/bt_osl.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: bt_osl.c - * $Revision: 22 $ + * $Revision: 24 $ * *****************************************************************************/ @@ -44,7 +44,6 @@ MODULE_AUTHOR("Andrew Grover"); MODULE_DESCRIPTION("ACPI Component Architecture (CA) - Control Method Battery Driver"); -MODULE_LICENSE("GPL"); #define BT_PROC_ROOT "battery" @@ -107,7 +106,7 @@ } else { p += sprintf(p, "Design Capacity: %d %sh\n", - battery_info->design_capacity, + (u32)battery_info->design_capacity, battery->power_units); } @@ -116,7 +115,7 @@ } else { p += sprintf(p, "Last Full Capacity: %d %sh\n", - battery_info->last_full_capacity, + (u32)battery_info->last_full_capacity, battery->power_units); } @@ -135,20 +134,20 @@ } else { p += sprintf(p, "Design Voltage: %d mV\n", - battery_info->design_voltage); + (u32)battery_info->design_voltage); } p += sprintf(p, "Design Capacity Warning: %d %sh\n", - battery_info->design_capacity_warning, + (u32)battery_info->design_capacity_warning, battery->power_units); p += sprintf(p, "Design Capacity Low: %d %sh\n", - battery_info->design_capacity_low, + (u32)battery_info->design_capacity_low, battery->power_units); p += sprintf(p, "Capacity Granularity 1: %d %sh\n", - battery_info->battery_capacity_granularity_1, + (u32)battery_info->battery_capacity_granularity_1, battery->power_units); p += sprintf(p, "Capacity Granularity 2: %d %sh\n", - battery_info->battery_capacity_granularity_2, + (u32)battery_info->battery_capacity_granularity_2, battery->power_units); p += sprintf(p, "Model Number: %s\n", battery_info->model_number); @@ -242,7 +241,7 @@ } else { p += sprintf(p, "Present Rate: %d %s\n", - battery_status->present_rate, + (u32)battery_status->present_rate, battery->power_units); } @@ -251,7 +250,7 @@ } else { p += sprintf(p, "Remaining Capacity: %d %sh\n", - battery_status->remaining_capacity, + (u32)battery_status->remaining_capacity, battery->power_units); } @@ -260,7 +259,7 @@ } else { p += sprintf(p, "Battery Voltage: %d mV\n", - battery_status->present_voltage); + (u32)battery_status->present_voltage); } end: @@ -294,10 +293,10 @@ } if (battery->is_present) { - printk("Battery: socket found, battery present\n"); + printk("ACPI: Battery socket found, battery present\n"); } else { - printk("Battery: socket found, battery absent\n"); + printk("ACPI: Battery socket found, battery absent\n"); } proc_entry = proc_mkdir(battery->uid, bt_proc_root); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/busmgr/bm.c linux/drivers/acpi/ospm/busmgr/bm.c --- v2.4.13/linux/drivers/acpi/ospm/busmgr/bm.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/busmgr/bm.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: bm.c - * $Revision: 47 $ + * $Revision: 48 $ * *****************************************************************************/ @@ -223,7 +223,7 @@ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+-------------------------------------------------------------------------------\n")); } - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| %s[%02x]:[%p] flags[%02x] hid[%s] %s\n", type_string, device->handle, device->acpi_handle, device->flags, (device->id.hid[0] ? device->id.hid : " "), buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| %s[%02x]:[%p] flags[%02x] hid[%s] %s\n", type_string, device->handle, device->acpi_handle, device->flags, (device->id.hid[0] ? device->id.hid : " "), (char*)buffer.pointer)); if (flags & BM_PRINT_IDENTIFICATION) { ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| identification: uid[%s] adr[%08x]\n", device->id.uid, device->id.adr)); @@ -919,7 +919,7 @@ for (i=0; idevice_handle, pr->acpi_handle, buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Power_resource[%02x]:[%p] %s\n", pr->device_handle, pr->acpi_handle, (char*)buffer.pointer)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| system_level[S%d] resource_order[%d]\n", pr->system_level, pr->resource_order)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| state[D%d] reference_count[%d]\n", pr->state, pr->reference_count)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/busmgr/bmutils.c linux/drivers/acpi/ospm/busmgr/bmutils.c --- v2.4.13/linux/drivers/acpi/ospm/busmgr/bmutils.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/busmgr/bmutils.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: bmutils.c - * $Revision: 38 $ + * $Revision: 43 $ * *****************************************************************************/ @@ -81,11 +81,11 @@ } if (pathname) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Evaluate object [%s.%s], %s\n", buffer.pointer, pathname, + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluate object [%s.%s], %s\n", (char*)buffer.pointer, pathname, acpi_format_exception(status))); } else { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Evaluate object [%s], %s\n", buffer.pointer, + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluate object [%s], %s\n", (char*)buffer.pointer, acpi_format_exception(status))); } @@ -175,68 +175,70 @@ * ****************************************************************************/ -/* - * TBD: Don't assume numbers (in ASL) are 32-bit values!!!! (IA64) - * TBD: Issue with 'assumed' types coming out of interpreter... - * (e.g. toshiba _BIF) - */ - acpi_status bm_extract_package_data ( acpi_object *package, - acpi_buffer *package_format, + acpi_buffer *format, acpi_buffer *buffer) { - acpi_status status = AE_OK; - u8 *head = NULL; - u8 *tail = NULL; - u8 **pointer = NULL; u32 tail_offset = 0; - acpi_object *element = NULL; u32 size_required = 0; - char* format = NULL; + char *format_string = NULL; u32 format_count = 0; u32 i = 0; + u8 *head = NULL; + u8 *tail = NULL; FUNCTION_TRACE("bm_extract_package_data"); - if (!package || (package->type != ACPI_TYPE_PACKAGE) || - (package->package.count == 0) || !package_format || - (package_format->length < 1) || - (!package_format->pointer) || !buffer) { + if (!package || (package->type != ACPI_TYPE_PACKAGE) || (package->package.count < 1)) { + ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid 'package' argument\n")); return_ACPI_STATUS(AE_BAD_PARAMETER); } - format_count = package_format->length - 1; + if (!format || !format->pointer || (format->length < 1)) { + ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid 'format' argument\n")); + return_ACPI_STATUS(AE_BAD_PARAMETER); + } + + if (!buffer) { + ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid 'buffer' argument\n")); + return_ACPI_STATUS(AE_BAD_PARAMETER); + } + format_count = (format->length/sizeof(char)) - 1; if (format_count > package->package.count) { - ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Format specifies more objects [%d] than exist in package [%d].", format_count, package->package.count)); + ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Format specifies more objects [%d] than exist in package [%d].", format_count, package->package.count)); return_ACPI_STATUS(AE_BAD_DATA); } - format = (char*)package_format->pointer; + format_string = (char*)format->pointer; /* * Calculate size_required. */ for (i=0; ipackage.elements[i]); + + acpi_object *element = &(package->package.elements[i]); + + if (!element) { + return_ACPI_STATUS(AE_BAD_DATA); + } switch (element->type) { case ACPI_TYPE_INTEGER: - switch (format[i]) { + switch (format_string[i]) { case 'N': size_required += sizeof(acpi_integer); tail_offset += sizeof(acpi_integer); break; case 'S': - size_required += sizeof(u8*) + - sizeof(acpi_integer) + 1; - tail_offset += sizeof(acpi_integer); + size_required += sizeof(char*) + sizeof(acpi_integer) + sizeof(char); + tail_offset += sizeof(char*); break; default: - ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Invalid package element [%d]: got number, expecing [%c].\n", i, format[i])); + ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid package element [%d]: got number, expecing [%c].\n", i, format_string[i])); return_ACPI_STATUS(AE_BAD_DATA); break; } @@ -244,19 +246,17 @@ case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: - switch (format[i]) { + switch (format_string[i]) { case 'S': - size_required += sizeof(u8*) + - element->string.length + 1; - tail_offset += sizeof(u8*); + size_required += sizeof(char*) + (element->string.length * sizeof(char)) + sizeof(char); + tail_offset += sizeof(char*); break; case 'B': - size_required += sizeof(u8*) + - element->buffer.length; + size_required += sizeof(u8*) + (element->buffer.length * sizeof(u8)); tail_offset += sizeof(u8*); break; default: - ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Invalid package element [%d] got string/buffer, expecing [%c].\n", i, format[i])); + ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid package element [%d] got string/buffer, expecing [%c].\n", i, format_string[i])); return_ACPI_STATUS(AE_BAD_DATA); break; } @@ -264,52 +264,52 @@ case ACPI_TYPE_PACKAGE: default: + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found unsupported element at index=%d\n", i)); /* TBD: handle nested packages... */ return_ACPI_STATUS(AE_SUPPORT); break; } } - if (size_required > buffer->length) { + /* + * Validate output buffer. + */ + if (buffer->length < size_required) { buffer->length = size_required; return_ACPI_STATUS(AE_BUFFER_OVERFLOW); } - - buffer->length = size_required; - - if (!buffer->pointer) { + else if (buffer->length != size_required || !buffer->pointer) { return_ACPI_STATUS(AE_BAD_PARAMETER); } head = buffer->pointer; tail = buffer->pointer + tail_offset; - /* - * Extract package data: + /* + * Extract package data. */ for (i=0; ipackage.elements[i]); + u8 **pointer = NULL; + acpi_object *element = &(package->package.elements[i]); switch (element->type) { case ACPI_TYPE_INTEGER: - switch (format[i]) { + switch (format_string[i]) { case 'N': - *((acpi_integer*)head) = - element->integer.value; + *((acpi_integer*)head) = element->integer.value; head += sizeof(acpi_integer); break; case 'S': pointer = (u8**)head; *pointer = tail; - *((acpi_integer*)tail) = - element->integer.value; + *((acpi_integer*)tail) = element->integer.value; head += sizeof(acpi_integer*); tail += sizeof(acpi_integer); /* NULL terminate string */ - *tail = 0; - tail++; + *tail = (char)0; + tail += sizeof(char); break; default: /* Should never get here */ @@ -319,25 +319,23 @@ case ACPI_TYPE_STRING: case ACPI_TYPE_BUFFER: - switch (format[i]) { + switch (format_string[i]) { case 'S': pointer = (u8**)head; *pointer = tail; - memcpy(tail, element->string.pointer, - element->string.length); - head += sizeof(u8*); - tail += element->string.length; + memcpy(tail, element->string.pointer, element->string.length); + head += sizeof(char*); + tail += element->string.length * sizeof(char); /* NULL terminate string */ - *tail = 0; - tail++; + *tail = (char)0; + tail += sizeof(char); break; case 'B': pointer = (u8**)head; *pointer = tail; - memcpy(tail, element->buffer.pointer, - element->buffer.length); + memcpy(tail, element->buffer.pointer, element->buffer.length); head += sizeof(u8*); - tail += element->buffer.length; + tail += element->buffer.length * sizeof(u8); break; default: /* Should never get here */ @@ -353,7 +351,7 @@ } } - return_ACPI_STATUS(status); + return_ACPI_STATUS(AE_OK); } @@ -465,7 +463,7 @@ */ status = bm_evaluate_object(handle, pathname, NULL, &buffer); if (ACPI_FAILURE(status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "failed to evaluate object (%s)\n", + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "failed to evaluate object (%s)\n", acpi_format_exception(status))); goto end; } @@ -569,7 +567,7 @@ if (!element || (element->type != ACPI_TYPE_STRING)) { status = AE_BAD_DATA; - ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Invalid element in package (not a device reference).\n")); + ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid element in package (not a device reference).\n")); DEBUG_EVAL_ERROR (ACPI_LV_WARN, handle, pathname, status); break; } @@ -582,7 +580,7 @@ element->string.pointer, &reference_handle); if (ACPI_FAILURE(status)) { status = AE_BAD_DATA; - ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Unable to resolve device reference [%s].\n", element->string.pointer)); + ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Unable to resolve device reference [%s].\n", element->string.pointer)); DEBUG_EVAL_ERROR (ACPI_LV_WARN, handle, pathname, status); break; } @@ -594,12 +592,12 @@ &(reference_list->handles[i])); if (ACPI_FAILURE(status)) { status = AE_BAD_DATA; - ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Unable to resolve device reference for [%p].\n", reference_handle)); + ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Unable to resolve device reference for [%p].\n", reference_handle)); DEBUG_EVAL_ERROR (ACPI_LV_WARN, handle, pathname, status); break; } - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Resolved reference [%s]->[%p]->[%02x]\n", element->string.pointer, reference_handle, reference_list->handles[i])); + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Resolved reference [%s]->[%p]->[%02x]\n", element->string.pointer, reference_handle, reference_list->handles[i])); (reference_list->count)++; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/button/bn.c linux/drivers/acpi/ospm/button/bn.c --- v2.4.13/linux/drivers/acpi/ospm/button/bn.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/button/bn.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: bn.c - * $Revision: 25 $ + * $Revision: 27 $ * *****************************************************************************/ @@ -81,16 +81,16 @@ case BN_TYPE_POWER_BUTTON: case BN_TYPE_POWER_BUTTON_FIXED: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Power_button[%02x]:[%p] %s\n", button->device_handle, button->acpi_handle, buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Power_button[%02x]:[%p] %s\n", button->device_handle, button->acpi_handle, (char*)buffer.pointer)); break; case BN_TYPE_SLEEP_BUTTON: case BN_TYPE_SLEEP_BUTTON_FIXED: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Sleep_button[%02x]:[%p] %s\n", button->device_handle, button->acpi_handle, buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Sleep_button[%02x]:[%p] %s\n", button->device_handle, button->acpi_handle, (char*)buffer.pointer)); break; case BN_TYPE_LID_SWITCH: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Lid_switch[%02x]:[%p] %s\n", button->device_handle, button->acpi_handle, buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Lid_switch[%02x]:[%p] %s\n", button->device_handle, button->acpi_handle, (char*)buffer.pointer)); break; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/button/bn_osl.c linux/drivers/acpi/ospm/button/bn_osl.c --- v2.4.13/linux/drivers/acpi/ospm/button/bn_osl.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/button/bn_osl.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: bn_osl.c - * $Revision: 14 $ + * $Revision: 16 $ * *****************************************************************************/ @@ -35,7 +35,6 @@ MODULE_AUTHOR("Andrew Grover"); MODULE_DESCRIPTION("ACPI Component Architecture (CA) - Button Driver"); -MODULE_LICENSE("GPL"); #define BN_PROC_ROOT "button" @@ -47,6 +46,15 @@ static struct proc_dir_entry *bn_proc_root = NULL; +#define BN_TYPE_UNKNOWN 0 +#define BN_TYPE_FIXED 1 +#define BN_TYPE_GENERIC 2 + +static int bn_power_button = BN_TYPE_UNKNOWN; +static int bn_sleep_button = BN_TYPE_UNKNOWN; +static int bn_lid_switch = BN_TYPE_UNKNOWN; + + /**************************************************************************** * * FUNCTION: bn_osl_add_device @@ -65,24 +73,77 @@ switch (button->type) { - case BN_TYPE_POWER_BUTTON: case BN_TYPE_POWER_BUTTON_FIXED: - printk(KERN_INFO "Power Button: found\n"); + bn_power_button = BN_TYPE_FIXED; + printk(KERN_INFO "ACPI: Power Button (FF) found\n"); if (!proc_mkdir(BN_PROC_POWER_BUTTON, bn_proc_root)) { status = AE_ERROR; } break; - case BN_TYPE_SLEEP_BUTTON: + case BN_TYPE_POWER_BUTTON: + /* + * Avoid creating multiple /proc entries when (buggy) ACPI + * BIOS tables erroneously list both fixed- and generic- + * feature buttons. Note that fixed-feature buttons are + * always enumerated first (and there can only be one) so + * we only need to check here. + */ + switch (bn_power_button) { + case BN_TYPE_GENERIC: + printk(KERN_WARNING "ACPI: Multiple generic-space power buttons detected, using first\n"); + break; + case BN_TYPE_FIXED: + printk(KERN_WARNING "ACPI: Multiple power buttons detected, ignoring fixed-feature\n"); + default: + printk(KERN_INFO "ACPI: Power Button (CM) found\n"); + bn_power_button = BN_TYPE_GENERIC; + if (!proc_mkdir(BN_PROC_POWER_BUTTON, bn_proc_root)) { + status = AE_ERROR; + } + break; + } + break; + case BN_TYPE_SLEEP_BUTTON_FIXED: - printk(KERN_INFO "Sleep Button: found\n"); + bn_sleep_button = BN_TYPE_FIXED; + printk(KERN_INFO "ACPI: Sleep Button (FF) found\n"); if (!proc_mkdir(BN_PROC_SLEEP_BUTTON, bn_proc_root)) { status = AE_ERROR; } break; + case BN_TYPE_SLEEP_BUTTON: + /* + * Avoid creating multiple /proc entries when (buggy) ACPI + * BIOS tables erroneously list both fixed- and generic- + * feature buttons. Note that fixed-feature buttons are + * always enumerated first (and there can only be one) so + * we only need to check here. + */ + switch (bn_sleep_button) { + case BN_TYPE_GENERIC: + printk(KERN_WARNING "ACPI: Multiple generic-space sleep buttons detected, using first\n"); + break; + case BN_TYPE_FIXED: + printk(KERN_WARNING "ACPI: Multiple sleep buttons detected, ignoring fixed-feature\n"); + default: + bn_sleep_button = BN_TYPE_GENERIC; + printk(KERN_INFO "ACPI: Sleep Button (CM) found\n"); + if (!proc_mkdir(BN_PROC_SLEEP_BUTTON, bn_proc_root)) { + status = AE_ERROR; + } + break; + } + break; + case BN_TYPE_LID_SWITCH: - printk(KERN_INFO "Lid Switch: found\n"); + if (bn_lid_switch) { + printk(KERN_WARNING "ACPI: Multiple generic-space lid switches detected, using first\n"); + break; + } + bn_lid_switch = BN_TYPE_GENERIC; + printk(KERN_INFO "ACPI: Lid Switch (CM) found\n"); if (!proc_mkdir(BN_PROC_LID_SWITCH, bn_proc_root)) { status = AE_ERROR; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/ec/ec_osl.c linux/drivers/acpi/ospm/ec/ec_osl.c --- v2.4.13/linux/drivers/acpi/ospm/ec/ec_osl.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/ec/ec_osl.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: ec_osl.c - * $Revision: 10 $ + * $Revision: 11 $ * *****************************************************************************/ @@ -36,25 +36,6 @@ MODULE_AUTHOR("Andrew Grover"); MODULE_DESCRIPTION("ACPI Component Architecture (CA) - Embedded Controller Driver"); -MODULE_LICENSE("GPL"); - -#ifdef ACPI_DEBUG - -static int dbg_layer = ACPI_COMPONENT_DEFAULT; -MODULE_PARM(dbg_layer, "i"); -MODULE_PARM_DESC(dbg_layer, "Controls debug output (see acpi_dbg_layer).\n"); - -static int dbg_level = DEBUG_DEFAULT; -MODULE_PARM(dbg_level, "i"); -MODULE_PARM_DESC(dbg_level, "Controls debug output (see acpi_dbg_level).\n"); - -#endif /*ACPI_DEBUG*/ - - -#ifdef ACPI_DEBUG -static u32 save_dbg_layer; -static u32 save_dbg_level; -#endif /*ACPI_DEBUG*/ extern struct proc_dir_entry *bm_proc_root; @@ -80,14 +61,6 @@ if (!bm_proc_root) return -ENODEV; -#ifdef ACPI_DEBUG - save_dbg_layer = acpi_dbg_layer; - acpi_dbg_layer = dbg_layer; - - save_dbg_level = acpi_dbg_level; - acpi_dbg_level = dbg_level; -#endif /*ACPI_DEBUG*/ - status = ec_initialize(); return (ACPI_SUCCESS(status)) ? 0 : -ENODEV; @@ -109,11 +82,6 @@ ec_osl_cleanup(void) { ec_terminate(); - -#ifdef ACPI_DEBUG - acpi_dbg_layer = save_dbg_layer; - acpi_dbg_level = save_dbg_level; -#endif /*ACPI_DEBUG*/ return; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/ec/ecmain.c linux/drivers/acpi/ospm/ec/ecmain.c --- v2.4.13/linux/drivers/acpi/ospm/ec/ecmain.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/ec/ecmain.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: ecmain.c - * $Revision: 28 $ + * $Revision: 29 $ * *****************************************************************************/ @@ -79,7 +79,7 @@ * Print out basic thermal zone information. */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Embedded_controller[%02x]:[%p] %s\n", ec->device_handle, ec->acpi_handle, buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Embedded_controller[%02x]:[%p] %s\n", ec->device_handle, ec->acpi_handle, (char*)buffer.pointer)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| gpe_bit[%02x] status/command_port[%02x] data_port[%02x]\n", ec->gpe_bit, ec->status_port, ec->data_port)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/ec/ecspace.c linux/drivers/acpi/ospm/ec/ecspace.c --- v2.4.13/linux/drivers/acpi/ospm/ec/ecspace.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/ec/ecspace.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: ecspace.c - * $Revision: 22 $ + * $Revision: 23 $ * *****************************************************************************/ @@ -113,7 +113,7 @@ break; default: - ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Received request with invalid function [%p].\n", function)); + ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Received request with invalid function [%X].\n", function)); return_ACPI_STATUS(AE_BAD_PARAMETER); break; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/include/bn.h linux/drivers/acpi/ospm/include/bn.h --- v2.4.13/linux/drivers/acpi/ospm/include/bn.h Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/include/bn.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: bn.h - * $Revision: 10 $ + * $Revision: 12 $ * *****************************************************************************/ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/include/bt.h linux/drivers/acpi/ospm/include/bt.h --- v2.4.13/linux/drivers/acpi/ospm/include/bt.h Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/include/bt.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: bt.h - * $Revision: 16 $ + * $Revision: 18 $ * *****************************************************************************/ @@ -66,15 +66,15 @@ */ typedef struct { - u32 power_unit; - u32 design_capacity; - u32 last_full_capacity; - u32 battery_technology; - u32 design_voltage; - u32 design_capacity_warning; - u32 design_capacity_low; - u32 battery_capacity_granularity_1; - u32 battery_capacity_granularity_2; + acpi_integer power_unit; + acpi_integer design_capacity; + acpi_integer last_full_capacity; + acpi_integer battery_technology; + acpi_integer design_voltage; + acpi_integer design_capacity_warning; + acpi_integer design_capacity_low; + acpi_integer battery_capacity_granularity_1; + acpi_integer battery_capacity_granularity_2; acpi_string model_number; acpi_string serial_number; acpi_string battery_type; @@ -89,10 +89,10 @@ */ typedef struct { - u32 state; - u32 present_rate; - u32 remaining_capacity; - u32 present_voltage; + acpi_integer state; + acpi_integer present_rate; + acpi_integer remaining_capacity; + acpi_integer present_voltage; } BT_BATTERY_STATUS; @@ -137,7 +137,7 @@ acpi_status bt_get_status ( - BT_CONTEXT *battery, + BT_CONTEXT *battery, BT_BATTERY_STATUS **battery_status); acpi_status diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/include/pr.h linux/drivers/acpi/ospm/include/pr.h --- v2.4.13/linux/drivers/acpi/ospm/include/pr.h Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/include/pr.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: processor.h - * $Revision: 9 $ + * $Revision: 13 $ * *****************************************************************************/ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/include/tz.h linux/drivers/acpi/ospm/include/tz.h --- v2.4.13/linux/drivers/acpi/ospm/include/tz.h Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/include/tz.h Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: tz.h - * $Revision: 21 $ + * $Revision: 24 $ * *****************************************************************************/ @@ -116,68 +116,42 @@ typedef u32 TZ_STATE; #define TZ_STATE_OK ((TZ_STATE) 0x00000000) +#define TZ_STATE_HOT ((TZ_STATE) 0x10000000) #define TZ_STATE_ACTIVE ((TZ_STATE) 0x20000000) #define TZ_STATE_PASSIVE ((TZ_STATE) 0x40000000) #define TZ_STATE_CRITICAL ((TZ_STATE) 0x80000000) - -/* - * TZ_THRESHOLD: - * ------------- - * Information on an individual threshold. - */ typedef struct { - TZ_THRESHOLD_TYPE type; - u32 index; u32 temperature; - TZ_COOLING_STATE cooling_state; - BM_HANDLE_LIST cooling_devices; -} TZ_THRESHOLD; - - -/* - * TZ_THRESHOLD_LIST: - * ------------------ - * Container for the thresholds of a given thermal zone. - * Note that thresholds are always ordered by increasing - * temperature value to simplify use by thermal policy. - */ -typedef struct { - u32 count; - TZ_THRESHOLD thresholds[TZ_MAX_THRESHOLDS]; -} TZ_THRESHOLD_LIST; - +} TZ_CRITICAL_THRESHOLD; -/* - * TZ_CRITICAL_POLICY: - * ------------------- - */ typedef struct { - TZ_THRESHOLD *threshold; -} TZ_CRITICAL_POLICY; - + u8 is_valid; + u32 temperature; +} TZ_HOT_THRESHOLD; -/* - * TZ_PASSIVE_POLICY: - * ------------------ - */ typedef struct { + u8 is_valid; + u32 temperature; u32 tc1; u32 tc2; u32 tsp; - TZ_THRESHOLD *threshold; -} TZ_PASSIVE_POLICY; - + BM_HANDLE_LIST devices; +} TZ_PASSIVE_THRESHOLD; -/* - * TZ_ACTIVE_POLICY: - * ----------------- - */ typedef struct { - u32 threshold_count; - TZ_THRESHOLD *threshold[TZ_MAX_ACTIVE_THRESHOLDS]; -} TZ_ACTIVE_POLICY; + u8 is_valid; + u32 temperature; + TZ_COOLING_STATE cooling_state; + BM_HANDLE_LIST devices; +} TZ_ACTIVE_THRESHOLD; +typedef struct { + TZ_CRITICAL_THRESHOLD critical; + TZ_HOT_THRESHOLD hot; + TZ_PASSIVE_THRESHOLD passive; + TZ_ACTIVE_THRESHOLD active[TZ_MAX_ACTIVE_THRESHOLDS]; +} TZ_THRESHOLDS; /* * TZ_POLICY: @@ -188,11 +162,7 @@ TZ_STATE state; TZ_COOLING_MODE cooling_mode; u32 polling_freq; - TZ_THRESHOLD_LIST threshold_list; - TZ_CRITICAL_POLICY critical; - TZ_PASSIVE_POLICY passive; - TZ_ACTIVE_POLICY active; - /* TBD: Linux-specific */ + TZ_THRESHOLDS thresholds; struct timer_list timer; } TZ_POLICY; @@ -213,7 +183,7 @@ * Function Prototypes *****************************************************************************/ -/* thermal_zone.c */ +/* tz.c */ acpi_status tz_initialize (void); @@ -234,46 +204,49 @@ acpi_status tz_get_temperature ( - TZ_CONTEXT *thermal_zone, - u32 *temperature); + TZ_CONTEXT *tz); acpi_status tz_get_thresholds ( - TZ_CONTEXT *thermal_zone, - TZ_THRESHOLD_LIST *threshold_list); + TZ_CONTEXT *tz); + +acpi_status +tz_set_cooling_preference ( + TZ_CONTEXT *tz, + TZ_COOLING_MODE cooling_mode); void tz_print ( - TZ_CONTEXT *thermal_zone); + TZ_CONTEXT *tz); /* tzpolicy.c */ acpi_status tz_policy_add_device ( - TZ_CONTEXT *thermal_zone); + TZ_CONTEXT *tz); acpi_status tz_policy_remove_device ( - TZ_CONTEXT *thermal_zone); + TZ_CONTEXT *tz); void tz_policy_check ( void *context); -/* Thermal Zone Driver OSL */ +/* tz_osl.c */ acpi_status tz_osl_add_device ( - TZ_CONTEXT *thermal_zone); + TZ_CONTEXT *tz); acpi_status tz_osl_remove_device ( - TZ_CONTEXT *thermal_zone); + TZ_CONTEXT *tz); acpi_status tz_osl_generate_event ( u32 event, - TZ_CONTEXT *thermal_zone); + TZ_CONTEXT *tz); #endif /* __TZ_H__ */ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/processor/pr.c linux/drivers/acpi/ospm/processor/pr.c --- v2.4.13/linux/drivers/acpi/ospm/processor/pr.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/processor/pr.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: pr.c - * $Revision: 32 $ + * $Revision: 34 $ * *****************************************************************************/ @@ -63,7 +63,7 @@ #ifdef ACPI_DEBUG acpi_buffer buffer; - PROC_NAME("pr_print"); + FUNCTION_TRACE("pr_print"); buffer.length = 256; buffer.pointer = acpi_os_callocate(buffer.length); @@ -80,7 +80,7 @@ * Print out basic processor information. */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Processor[%02x]:[%p] uid[%02x] %s\n", processor->device_handle, processor->acpi_handle, processor->uid, buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Processor[%02x]:[%p] uid[%02x] %s\n", processor->device_handle, processor->acpi_handle, processor->uid, (char*)buffer.pointer)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| power: %cC0 %cC1 %cC2[%d] %cC3[%d]\n", (processor->power.state[0].is_valid?'+':'-'), (processor->power.state[1].is_valid?'+':'-'), (processor->power.state[2].is_valid?'+':'-'), processor->power.state[2].latency, (processor->power.state[3].is_valid?'+':'-'), processor->power.state[3].latency)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| performance: states[%d]\n", processor->performance.state_count)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); @@ -140,7 +140,7 @@ * Processor Block: * ---------------- */ - MEMSET(&acpi_object, 0, sizeof(acpi_object)); + memset(&acpi_object, 0, sizeof(acpi_object)); buffer.length = sizeof(acpi_object); buffer.pointer = &acpi_object; @@ -261,8 +261,8 @@ FUNCTION_TRACE("pr_initialize"); - MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID)); - MEMSET(&driver, 0, sizeof(BM_DRIVER)); + memset(&criteria, 0, sizeof(BM_DEVICE_ID)); + memset(&driver, 0, sizeof(BM_DRIVER)); /* * Initialize power (Cx state) policy. @@ -307,8 +307,8 @@ FUNCTION_TRACE("pr_terminate"); - MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID)); - MEMSET(&driver, 0, sizeof(BM_DRIVER)); + memset(&criteria, 0, sizeof(BM_DEVICE_ID)); + memset(&driver, 0, sizeof(BM_DRIVER)); /* * Terminate power (Cx state) policy. diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/processor/pr_osl.c linux/drivers/acpi/ospm/processor/pr_osl.c --- v2.4.13/linux/drivers/acpi/ospm/processor/pr_osl.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/processor/pr_osl.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: pr_osl.c - * $Revision: 18 $ + * $Revision: 21 $ * *****************************************************************************/ @@ -37,7 +37,6 @@ MODULE_AUTHOR("Andrew Grover"); MODULE_DESCRIPTION("ACPI Component Architecture (CA) - IA32 Processor Driver"); -MODULE_LICENSE("GPL"); #define PR_PROC_ROOT "processor" @@ -157,14 +156,10 @@ printk(" C%d", i); } } - - if (processor->performance.state_count > 1) { - printk(", throttling states: %d", processor->performance.state_count); - } - - if (acpi_piix4_bmisx) - printk(", PIIX workaround active"); - + if (processor->performance.state_count > 1) + printk(", %d throttling states", processor->performance.state_count); + if (acpi_piix4_bmisx && processor->power.state[3].is_valid) + printk(" (PIIX errata enabled)"); printk("\n"); sprintf(processor_uid, "%d", processor->uid); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/processor/prperf.c linux/drivers/acpi/ospm/processor/prperf.c --- v2.4.13/linux/drivers/acpi/ospm/processor/prperf.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/processor/prperf.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: prperf.c - * $Revision: 19 $ + * $Revision: 21 $ * *****************************************************************************/ @@ -179,7 +179,8 @@ return_ACPI_STATUS(AE_BAD_DATA); } - if (processor->performance.state_count == 1) { + if ((state == processor->performance.active_state) || + (processor->performance.state_count == 1)) { return_ACPI_STATUS(AE_OK); } @@ -233,6 +234,8 @@ acpi_os_write_port(processor->pblk.address, pblk_value, 32); } + processor->performance.active_state = state; + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Processor [%02x] set to performance state [%d%%].\n", processor->device_handle, processor->performance.state[state].performance)); return_ACPI_STATUS(AE_OK); @@ -279,14 +282,14 @@ if (performance->active_state < (performance->state_count-1)) { status = pr_perf_set_state(processor, - (performance->active_state-1)); + (performance->active_state+1)); } break; case PR_PERF_INC: if (performance->active_state > 0) { status = pr_perf_set_state(processor, - (performance->active_state+1)); + (performance->active_state-1)); } break; @@ -302,7 +305,7 @@ } if (ACPI_SUCCESS(status)) { - performance->thermal_limit = limit; + performance->thermal_limit = performance->active_state; } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Processor [%02x] thermal performance limit set to [%d%%].\n", processor->device_handle, processor->performance.state[performance->active_state].performance)); @@ -403,8 +406,20 @@ * Get Current State: * ------------------ */ - status = pr_perf_get_state(processor, - &(processor->performance.active_state)); + status = pr_perf_get_state(processor, &(processor->performance.active_state)); + if (ACPI_FAILURE(status)) { + return_ACPI_STATUS(status); + } + + /* + * Set to Maximum Performance: + * --------------------------- + * We'll let subsequent policy (e.g. thermal/power) decide to lower + * performance if it so chooses, but for now crank up the speed. + */ + if (0 != processor->performance.active_state) { + status = pr_perf_set_state(processor, 0); + } return_ACPI_STATUS(status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/processor/prpower.c linux/drivers/acpi/ospm/processor/prpower.c --- v2.4.13/linux/drivers/acpi/ospm/processor/prpower.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/processor/prpower.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: prpower.c - * $Revision: 30 $ + * $Revision: 32 $ * *****************************************************************************/ @@ -41,7 +41,7 @@ * Globals ****************************************************************************/ -extern fadt_descriptor_rev2 acpi_fadt; +extern FADT_DESCRIPTOR acpi_fadt; static u32 last_idle_jiffies = 0; static PR_CONTEXT *processor_list[NR_CPUS]; static void (*pr_pm_idle_save)(void) = NULL; @@ -207,7 +207,10 @@ case PR_C1: /* Invoke C1 */ enable(); halt(); - /* no C1 time measurement, so just enter some number of times */ + /* + * TBD: Can't get time duration while in C1, as resumes + * go to an ISR rather than here. + */ time_elapsed = 0xFFFFFFFF; break; @@ -217,8 +220,7 @@ /* Invoke C2 */ acpi_os_read_port(processor->power.p_lvl2, NULL, 8); /* Dummy op - must do something useless after P_LVL2 read */ - acpi_hw_register_bit_access(ACPI_READ, ACPI_MTX_DO_NOT_LOCK, - BM_STS); + acpi_hw_register_bit_access(ACPI_READ, ACPI_MTX_DO_NOT_LOCK, BM_STS); /* Compute time elapsed */ acpi_get_timer(&end_ticks); /* Re-enable interrupts */ @@ -228,15 +230,13 @@ case PR_C3: /* Disable bus master arbitration */ - acpi_hw_register_bit_access(ACPI_WRITE, ACPI_MTX_DO_NOT_LOCK, - ARB_DIS, 1); + acpi_hw_register_bit_access(ACPI_WRITE, ACPI_MTX_DO_NOT_LOCK, ARB_DIS, 1); /* See how long we're asleep for */ acpi_get_timer(&start_ticks); /* Invoke C3 */ acpi_os_read_port(processor->power.p_lvl3, NULL, 8); /* Dummy op - must do something useless after P_LVL3 read */ - acpi_hw_register_bit_access(ACPI_READ, ACPI_MTX_DO_NOT_LOCK, - BM_STS); + acpi_hw_register_bit_access(ACPI_READ, ACPI_MTX_DO_NOT_LOCK, BM_STS); /* Compute time elapsed */ acpi_get_timer(&end_ticks); /* Enable bus master arbitration */ @@ -266,18 +266,14 @@ c_state->promotion.count++; c_state->demotion.count = 0; - if (c_state->promotion.count >= - c_state->promotion.count_threshold) { - + if (c_state->promotion.count >= c_state->promotion.count_threshold) { /* * Bus Mastering Activity, if active and used * by this state's promotion policy, prevents * promotions from occuring. */ - if (bm_control && !(processor->power.bm_activity & - c_state->promotion.bm_threshold)) { + if (!bm_control || !(processor->power.bm_activity & c_state->promotion.bm_threshold)) next_state = c_state->promotion.target_state; - } } } @@ -305,10 +301,8 @@ * state's promotion policy, causes an immediate demotion * to occur. */ - if (bm_control && (processor->power.bm_activity & - c_state->demotion.bm_threshold)) { + if (bm_control && (processor->power.bm_activity & c_state->demotion.bm_threshold)) next_state = c_state->demotion.target_state; - } } /* @@ -627,7 +621,7 @@ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Max CPUs[%d], this CPU[%d].\n", NR_CPUS, smp_processor_id())); - /* only use C3 if we can control busmastering */ + /* Only use C3 if we can control bus mastering. */ if (acpi_fadt.V1_pm2_cnt_blk && acpi_fadt.pm2_cnt_len) bm_control = 1; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/system/sm.c linux/drivers/acpi/ospm/system/sm.c --- v2.4.13/linux/drivers/acpi/ospm/system/sm.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/system/sm.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: sm.c - * $Revision: 19 $ + * $Revision: 20 $ * *****************************************************************************/ @@ -71,7 +71,7 @@ * Print out basic system information. */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| System[%02x]:[%p] %s\n", system->device_handle, system->acpi_handle, buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| System[%02x]:[%p] %s\n", system->device_handle, system->acpi_handle, (char*)buffer.pointer)); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| states: %cS0 %cS1 %cS2 %cS3 %cS4 %cS5\n", (system->states[0]?'+':'-'), (system->states[1]?'+':'-'), (system->states[2]?'+':'-'), (system->states[3]?'+':'-'), (system->states[4]?'+':'-'), (system->states[5]?'+':'-'))); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/system/sm_osl.c linux/drivers/acpi/ospm/system/sm_osl.c --- v2.4.13/linux/drivers/acpi/ospm/system/sm_osl.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/system/sm_osl.c Wed Oct 24 14:06:22 2001 @@ -42,7 +42,6 @@ MODULE_AUTHOR("Andrew Grover"); MODULE_DESCRIPTION("ACPI Component Architecture (CA) - ACPI System Driver"); -MODULE_LICENSE("GPL"); #define SM_PROC_INFO "info" diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/thermal/tz.c linux/drivers/acpi/ospm/thermal/tz.c --- v2.4.13/linux/drivers/acpi/ospm/thermal/tz.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/thermal/tz.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /***************************************************************************** * * Module Name: tz.c - * $Revision: 40 $ + * $Revision: 44 $ * *****************************************************************************/ @@ -23,22 +23,24 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* - * TBD: 1. Finish /proc interface (threshold values, _SCP changes, etc.) - * 2. Update policy for ACPI 2.0 compliance - * 3. Check for all required methods prior to enabling a threshold - * 4. Support for multiple processors in a zone (passive cooling devices) - */ #include #include #include "tz.h" + #define _COMPONENT ACPI_THERMAL MODULE_NAME ("tz") /**************************************************************************** + * Globals + ****************************************************************************/ + +extern int TZP; + + +/**************************************************************************** * Internal Functions ****************************************************************************/ @@ -46,73 +48,63 @@ * * FUNCTION: tz_print * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: Prints out information on a specific thermal zone. - * ****************************************************************************/ void tz_print ( - TZ_CONTEXT *thermal_zone) + TZ_CONTEXT *tz) { #ifdef ACPI_DEBUG acpi_buffer buffer; u32 i,j = 0; - TZ_THRESHOLD *threshold = NULL; + TZ_THRESHOLDS *thresholds = NULL; - PROC_NAME("tz_print"); + FUNCTION_TRACE("tz_print"); - if (!thermal_zone) { + if (!tz) return; - } + + thresholds = &(tz->policy.thresholds); buffer.length = 256; buffer.pointer = acpi_os_callocate(buffer.length); - if (!buffer.pointer) { + if (!buffer.pointer) return; - } /* * Get the full pathname for this ACPI object. */ - acpi_get_name(thermal_zone->acpi_handle, ACPI_FULL_PATHNAME, &buffer); + acpi_get_name(tz->acpi_handle, ACPI_FULL_PATHNAME, &buffer); /* * Print out basic thermal zone information. */ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n")); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Thermal_zone[%02x]:[%p] %s\n", thermal_zone->device_handle, thermal_zone->acpi_handle, buffer.pointer)); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| temperature[%d] state[%08x]\n", thermal_zone->policy.temperature, thermal_zone->policy.state)); - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| cooling_mode[%08x] polling_freq[%d]\n", thermal_zone->policy.cooling_mode, thermal_zone->policy.polling_freq)); - - for (i=0; ipolicy.threshold_list.count; i++) { - - threshold = &(thermal_zone->policy.threshold_list.thresholds[i]); - - switch (threshold->type) { - case TZ_THRESHOLD_CRITICAL: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| critical[%d]\n", threshold->temperature)); - break; - case TZ_THRESHOLD_PASSIVE: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| passive[%d]: tc1[%d] tc2[%d] tsp[%d]\n", threshold->temperature, thermal_zone->policy.passive.tc1, thermal_zone->policy.passive.tc2, thermal_zone->policy.passive.tsp)); - break; - case TZ_THRESHOLD_ACTIVE: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| active[%d]: index[%d]\n", threshold->temperature, threshold->index)); - break; - default: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| unknown[%d]\n", threshold->temperature)); - break; + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Thermal_zone[%02x]:[%p] %s\n", tz->device_handle, tz->acpi_handle, (char*)buffer.pointer)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| temperature[%d] state[%08x]\n", tz->policy.temperature, tz->policy.state)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| cooling_mode[%08x] polling_freq[%d]\n", tz->policy.cooling_mode, tz->policy.polling_freq)); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| critical[%d]\n", thresholds->critical.temperature)); + if (thresholds->hot.is_valid) + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| hot[%d]\n", thresholds->hot.temperature)); + if (thresholds->passive.is_valid) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| passive[%d]: tc1[%d] tc2[%d] tsp[%d]\n", thresholds->passive.temperature, thresholds->passive.tc1, thresholds->passive.tc2, thresholds->passive.tsp)); + if (thresholds->passive.devices.count > 0) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| devices")); + for (j=0; (jpassive.devices.count && j<10); j++) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "[%02x]", thresholds->passive.devices.handles[j])); + } + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n")); } - - if (threshold->cooling_devices.count > 0) { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| cooling_devices")); - for (j=0; (jcooling_devices.count && j<10); j++) { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "[%02x]", threshold->cooling_devices.handles[j])); + } + for (i=0; iactive[i].is_valid) + break; + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| active[%d]: index[%d]\n", thresholds->active[i].temperature, i)); + if (thresholds->active[i].devices.count > 0) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| devices")); + for (j=0; (jactive[i].devices.count && j<10); j++) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "[%02x]", thresholds->active[i].devices.handles[j])); } - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "\n")); } } @@ -130,32 +122,29 @@ * * FUNCTION: tz_get_temperaturee * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: - * ****************************************************************************/ acpi_status tz_get_temperature ( - TZ_CONTEXT *thermal_zone, - u32 *temperature) + TZ_CONTEXT *tz) { acpi_status status = AE_OK; FUNCTION_TRACE("tz_get_temperature"); - if (!thermal_zone || !temperature) { + if (!tz) { return_ACPI_STATUS(AE_BAD_PARAMETER); } /* - * Evaluate the _TMP driver method to get the current temperature. + * Evaluate the _TMP method to get the current temperature. */ - status = bm_evaluate_simple_integer(thermal_zone->acpi_handle, - "_TMP", temperature); + status = bm_evaluate_simple_integer(tz->acpi_handle, "_TMP", &(tz->policy.temperature)); + if (ACPI_FAILURE(status)) { + return_ACPI_STATUS(status); + } + + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Temperature is %d d_k\n", tz->policy.temperature)); return_ACPI_STATUS(status); } @@ -165,17 +154,11 @@ * * FUNCTION: tz_set_cooling_preference * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: - * ****************************************************************************/ acpi_status tz_set_cooling_preference ( - TZ_CONTEXT *thermal_zone, + TZ_CONTEXT *tz, TZ_COOLING_MODE cooling_mode) { acpi_status status = AE_OK; @@ -184,8 +167,7 @@ FUNCTION_TRACE("tz_set_cooling_preference"); - if (!thermal_zone || ((cooling_mode != TZ_COOLING_MODE_ACTIVE) && - (cooling_mode != TZ_COOLING_MODE_PASSIVE))) { + if (!tz || ((cooling_mode != TZ_COOLING_MODE_ACTIVE) && (cooling_mode != TZ_COOLING_MODE_PASSIVE))) { return_ACPI_STATUS(AE_BAD_PARAMETER); } @@ -193,204 +175,143 @@ * Build the argument list, which simply consists of the current * cooling preference. */ - MEMSET(&arg_list, 0, sizeof(acpi_object)); + memset(&arg_list, 0, sizeof(acpi_object)); arg_list.count = 1; arg_list.pointer = &arg0; - MEMSET(&arg0, 0, sizeof(acpi_object)); + memset(&arg0, 0, sizeof(acpi_object)); arg0.type = ACPI_TYPE_INTEGER; arg0.integer.value = cooling_mode; /* * Evaluate "_SCP" - setting the new cooling preference. */ - status = acpi_evaluate_object(thermal_zone->acpi_handle, "_SCP", - &arg_list, NULL); + status = acpi_evaluate_object(tz->acpi_handle, "_SCP", &arg_list, NULL); + if (ACPI_FAILURE(status)) { + tz->policy.cooling_mode = -1; + return_ACPI_STATUS(status); + } + + tz->policy.cooling_mode = cooling_mode; return_ACPI_STATUS(status); } -/*************************************************************************** - * - * FUNCTION: tz_get_single_threshold - * - * PARAMETERS: - * - * RETURN: +/**************************************************************************** * - * DESCRIPTION: + * FUNCTION: tz_get_thresholds * ****************************************************************************/ acpi_status -tz_get_single_threshold ( - TZ_CONTEXT *thermal_zone, - TZ_THRESHOLD *threshold) +tz_get_thresholds ( + TZ_CONTEXT *tz) { - acpi_status status = AE_OK; + acpi_status status = AE_OK; + TZ_THRESHOLDS *thresholds = NULL; + u32 value = 0; + u32 i = 0; - FUNCTION_TRACE("tz_get_single_threshold"); + FUNCTION_TRACE("acpi_tz_get_thresholds"); - if (!thermal_zone || !threshold) { + if (!tz) { return_ACPI_STATUS(AE_BAD_PARAMETER); } - switch (threshold->type) { + thresholds = &(tz->policy.thresholds); - /* - * Critical Threshold: - * ------------------- - */ - case TZ_THRESHOLD_CRITICAL: - threshold->index = 0; - threshold->cooling_devices.count = 0; - status = bm_evaluate_simple_integer( - thermal_zone->acpi_handle, "_CRT", - &(threshold->temperature)); - break; - - /* - * Passive Threshold: - * ------------------ - * Evaluate _PSV to get the threshold temperature and _PSL to get - * references to all passive cooling devices. - */ - case TZ_THRESHOLD_PASSIVE: - threshold->index = 0; - threshold->cooling_devices.count = 0; - status = bm_evaluate_simple_integer( - thermal_zone->acpi_handle, "_PSV", - &(threshold->temperature)); - if (ACPI_SUCCESS(status)) { - status = bm_evaluate_reference_list( - thermal_zone->acpi_handle, "_PSL", - &(threshold->cooling_devices)); - } + /* Critical Shutdown (required) */ - break; - - /* - * Active Thresholds: - * ------------------ - * Evaluate _ACx to get all threshold temperatures, and _ALx to get - * references to all passive cooling devices. - */ - case TZ_THRESHOLD_ACTIVE: - { - char object_name[5] = {'_','A', 'C', - ('0'+threshold->index),'\0'}; - status = bm_evaluate_simple_integer( - thermal_zone->acpi_handle, object_name, - &(threshold->temperature)); - if (ACPI_SUCCESS(status)) { - object_name[2] = 'L'; - status = bm_evaluate_reference_list( - thermal_zone->acpi_handle, - object_name, - &(threshold->cooling_devices)); - } - } - break; + status = bm_evaluate_simple_integer(tz->acpi_handle, "_CRT", &value); + if (ACPI_FAILURE(status)) { + ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "No critical threshold\n")); + return_ACPI_STATUS(status); + } + else { + thresholds->critical.temperature = value; + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found critical threshold [%d]\n", thresholds->critical.temperature)); - default: - status = AE_SUPPORT; - break; } - return_ACPI_STATUS(status); -} + /* Critical Sleep (optional) */ + status = bm_evaluate_simple_integer(tz->acpi_handle, "_HOT", &value); + if (ACPI_FAILURE(status)) { + thresholds->hot.is_valid = 0; + thresholds->hot.temperature = 0; + } + else { + thresholds->hot.is_valid = 1; + thresholds->hot.temperature = value; + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found hot threshold [%d]\n", thresholds->hot.temperature)); + } -/**************************************************************************** - * - * FUNCTION: tz_get_thresholds - * - * PARAMETERS: thermal_zone - Identifies the thermal zone to parse. - * buffer - Output buffer. - * - * RETURN: acpi_status result code. - * - * DESCRIPTION: Builds a TZ_THRESHOLD_LIST structure containing information - * on all thresholds for a given thermal zone. - * - * NOTES: The current design limits the number of cooling devices - * per theshold to the value specified by BM_MAX_HANDLES. - * This simplifies parsing of thresholds by allowing a maximum - * threshold list size to be computed (and enforced) -- which - * allows all thresholds to be parsed in a single pass (since - * memory must be contiguous when returned in the acpi_buffer). - * - ****************************************************************************/ + /* Passive: Processors (optional) */ -acpi_status -tz_get_thresholds ( - TZ_CONTEXT *thermal_zone, - TZ_THRESHOLD_LIST *threshold_list) -{ - acpi_status status = AE_OK; - TZ_THRESHOLD *threshold = NULL; - u32 i = 0; + status = bm_evaluate_simple_integer(tz->acpi_handle, "_PSV", &value); + if (ACPI_FAILURE(status)) { + thresholds->passive.is_valid = 0; + thresholds->passive.temperature = 0; + } + else { + thresholds->passive.is_valid = 1; + thresholds->passive.temperature = value; - FUNCTION_TRACE("tz_get_thresholds"); + status = bm_evaluate_simple_integer(tz->acpi_handle, "_TC1", &value); + if (ACPI_FAILURE(status)) { + thresholds->passive.is_valid = 0; + } + thresholds->passive.tc1 = value; - if (!thermal_zone || !threshold_list) { - return_ACPI_STATUS(AE_BAD_PARAMETER); - } + status = bm_evaluate_simple_integer(tz->acpi_handle, "_TC2", &value); + if (ACPI_FAILURE(status)) { + thresholds->passive.is_valid = 0; + } + thresholds->passive.tc2 = value; - threshold_list->count = 0; + status = bm_evaluate_simple_integer(tz->acpi_handle, "_TSP", &value); + if (ACPI_FAILURE(status)) { + thresholds->passive.is_valid = 0; + } + thresholds->passive.tsp = value; - /* - * Critical threshold: - * ------------------- - * Every thermal zone must have one! - */ - threshold = &(threshold_list->thresholds[threshold_list->count]); - threshold->type = TZ_THRESHOLD_CRITICAL; + status = bm_evaluate_reference_list(tz->acpi_handle, "_PSL", &(thresholds->passive.devices)); + if (ACPI_FAILURE(status)) { + thresholds->passive.is_valid = 0; + } - status = tz_get_single_threshold(thermal_zone, threshold); - if (ACPI_SUCCESS(status)) { - (threshold_list->count)++; - } - else { - return_ACPI_STATUS(status); + if (thresholds->passive.is_valid) { + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found passive threshold [%d]\n", thresholds->passive.temperature)); + } + else { + ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid passive threshold\n")); + } } + /* Active: Fans, etc. (optional) */ - /* - * Passive threshold: - * ------------------ - */ - threshold = &(threshold_list->thresholds[threshold_list->count]); - threshold->type = TZ_THRESHOLD_PASSIVE; + for (i=0; icount)++; - } + char name[5] = {'_','A','C',('0'+i),'\0'}; - /* - * Active threshold: - * ----------------- - * Note that active thresholds are sorted by index (e.g. _AC0, - * _AC1, ...), and thus from highest (_AC0) to lowest (_AC9) - * temperature. - */ - for (i = 0; i < TZ_MAX_ACTIVE_THRESHOLDS; i++) { + status = bm_evaluate_simple_integer(tz->acpi_handle, name, &value); + if (ACPI_FAILURE(status)) { + thresholds->active[i].is_valid = 0; + thresholds->active[i].temperature = 0; + break; + } - threshold = &(threshold_list->thresholds[threshold_list->count]); - threshold->type = TZ_THRESHOLD_ACTIVE; - threshold->index = i; + thresholds->active[i].temperature = value; + name[2] = 'L'; - status = tz_get_single_threshold(thermal_zone, threshold); + status = bm_evaluate_reference_list(tz->acpi_handle, name, &(thresholds->active[i].devices)); if (ACPI_SUCCESS(status)) { - (threshold_list->count)++; + thresholds->active[i].is_valid = 1; + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found active threshold [%d]:[%d]\n", i, thresholds->active[i].temperature)); } else { - threshold->type = TZ_THRESHOLD_UNKNOWN; - threshold->index = 0; - thermal_zone->policy.active.threshold_count = i; - break; + ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid active threshold [%d]\n", i)); } } @@ -402,12 +323,6 @@ * * FUNCTION: tz_add_device * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: - * ****************************************************************************/ acpi_status @@ -416,7 +331,7 @@ void **context) { acpi_status status = AE_OK; - TZ_CONTEXT *thermal_zone = NULL; + TZ_CONTEXT *tz = NULL; BM_DEVICE *device = NULL; acpi_handle tmp_handle = NULL; static u32 zone_count = 0; @@ -441,50 +356,67 @@ /* * Allocate a new Thermal Zone device. */ - thermal_zone = acpi_os_callocate(sizeof(TZ_CONTEXT)); - if (!thermal_zone) { - return AE_NO_MEMORY; + tz = acpi_os_callocate(sizeof(TZ_CONTEXT)); + if (!tz) { + return_ACPI_STATUS(AE_NO_MEMORY); } - thermal_zone->device_handle = device->handle; - thermal_zone->acpi_handle = device->acpi_handle; + tz->device_handle = device->handle; + tz->acpi_handle = device->acpi_handle; /* TBD: How to manage 'uid' when zones are Pn_p? */ - sprintf(thermal_zone->uid, "%d", zone_count++); + sprintf(tz->uid, "%d", zone_count++); /* - * _TMP? - * ----- + * Temperature: + * ------------ + * Make sure we can read the zone's current temperature (_TMP). + * If we can't, there's no use in doing any policy (abort). */ - status = acpi_get_handle(thermal_zone->acpi_handle, "_TMP", - &tmp_handle); - if (ACPI_FAILURE(status)) { + status = tz_get_temperature(tz); + if (ACPI_FAILURE(status)) goto end; - } /* - * Initialize Policy: + * Polling Frequency: * ------------------ - * TBD: Move all thermal zone policy to user-mode daemon... + * If _TZP doesn't exist use the OS default polling frequency. */ - status = tz_policy_add_device(thermal_zone); + status = bm_evaluate_simple_integer(tz->acpi_handle, "_TZP", &(tz->policy.polling_freq)); if (ACPI_FAILURE(status)) { - goto end; + tz->policy.polling_freq = TZP; } + status = AE_OK; - status = tz_osl_add_device(thermal_zone); - if (ACPI_FAILURE(status)) { + /* + * Cooling Preference: + * ------------------- + * Default to ACTIVE (noisy) cooling until policy decides otherwise. + * Note that _SCP is optional. + */ + tz_set_cooling_preference(tz, TZ_COOLING_MODE_ACTIVE); + + /* + * Start Policy: + * ------------- + * Thermal policy is included in the kernel (this driver) because + * of the critical role it plays in avoiding nuclear meltdown. =O + */ + status = tz_policy_add_device(tz); + if (ACPI_FAILURE(status)) goto end; - } - *context = thermal_zone; + status = tz_osl_add_device(tz); + if (ACPI_FAILURE(status)) + goto end; - tz_print(thermal_zone); + *context = tz; + + tz_print(tz); end: - if (ACPI_FAILURE(status)) { - acpi_os_free(thermal_zone); - } + if (ACPI_FAILURE(status)) + acpi_os_free(tz); return_ACPI_STATUS(status); } @@ -494,12 +426,6 @@ * * FUNCTION: tz_remove_device * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: - * ****************************************************************************/ acpi_status @@ -507,7 +433,7 @@ void **context) { acpi_status status = AE_OK; - TZ_CONTEXT *thermal_zone = NULL; + TZ_CONTEXT *tz = NULL; FUNCTION_TRACE("tz_remove_device"); @@ -515,23 +441,23 @@ return_ACPI_STATUS(AE_BAD_PARAMETER); } - thermal_zone = (TZ_CONTEXT*)(*context); + tz = (TZ_CONTEXT*)(*context); - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing thermal zone [%02x].\n", thermal_zone->device_handle)); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing thermal zone [%02x].\n", tz->device_handle)); - status = tz_osl_remove_device(thermal_zone); + status = tz_osl_remove_device(tz); /* * Remove Policy: * -------------- * TBD: Move all thermal zone policy to user-mode daemon... */ - status = tz_policy_remove_device(thermal_zone); + status = tz_policy_remove_device(tz); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } - acpi_os_free(thermal_zone); + acpi_os_free(tz); return_ACPI_STATUS(status); } @@ -545,12 +471,6 @@ * * FUNCTION: tz_initialize * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: - * ****************************************************************************/ acpi_status @@ -562,8 +482,8 @@ FUNCTION_TRACE("tz_initialize"); - MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID)); - MEMSET(&driver, 0, sizeof(BM_DRIVER)); + memset(&criteria, 0, sizeof(BM_DEVICE_ID)); + memset(&driver, 0, sizeof(BM_DRIVER)); /* * Register driver for thermal zone devices. @@ -583,12 +503,6 @@ * * FUNCTION: tz_terminate * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: - * ****************************************************************************/ acpi_status @@ -600,8 +514,8 @@ FUNCTION_TRACE("tz_terminate"); - MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID)); - MEMSET(&driver, 0, sizeof(BM_DRIVER)); + memset(&criteria, 0, sizeof(BM_DEVICE_ID)); + memset(&driver, 0, sizeof(BM_DRIVER)); /* * Unregister driver for thermal zone devices. @@ -621,13 +535,8 @@ * * FUNCTION: tz_notify * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: - * ****************************************************************************/ + acpi_status tz_notify ( BM_NOTIFY notify_type, @@ -635,7 +544,7 @@ void **context) { acpi_status status = AE_OK; - TZ_CONTEXT *thermal_zone = NULL; + TZ_CONTEXT *tz = NULL; FUNCTION_TRACE("tz_notify"); @@ -643,7 +552,7 @@ return_ACPI_STATUS(AE_BAD_PARAMETER); } - thermal_zone = (TZ_CONTEXT*)*context; + tz = (TZ_CONTEXT*)*context; switch (notify_type) { @@ -657,40 +566,29 @@ case TZ_NOTIFY_TEMPERATURE_CHANGE: ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Temperature (_TMP) change event detected.\n")); - /* -------------------------------------------- */ - /* TBD: Remove when policy moves to user-mode. */ tz_policy_check(*context); - /* -------------------------------------------- */ - status = tz_get_temperature(thermal_zone, - &(thermal_zone->policy.temperature)); + status = tz_get_temperature(tz); if (ACPI_SUCCESS(status)) { - status = tz_osl_generate_event(notify_type, - thermal_zone); + status = tz_osl_generate_event(notify_type, tz); } break; case TZ_NOTIFY_THRESHOLD_CHANGE: ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Threshold (_SCP) change event detected.\n")); - /* -------------------------------------------- */ - /* TBD: Remove when policy moves to user-mode. */ - status = tz_policy_remove_device(thermal_zone); + status = tz_policy_remove_device(tz); if (ACPI_SUCCESS(status)) { - status = tz_policy_add_device(thermal_zone); + status = tz_policy_add_device(tz); } - /* -------------------------------------------- */ - status = tz_osl_generate_event(notify_type, thermal_zone); + status = tz_osl_generate_event(notify_type, tz); break; case TZ_NOTIFY_DEVICE_LISTS_CHANGE: ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Device lists (_ALx, _PSL, _TZD) change event detected.\n")); - /* -------------------------------------------- */ - /* TBD: Remove when policy moves to user-mode. */ - status = tz_policy_remove_device(thermal_zone); + status = tz_policy_remove_device(tz); if (ACPI_SUCCESS(status)) { - status = tz_policy_add_device(thermal_zone); + status = tz_policy_add_device(tz); } - /* -------------------------------------------- */ - status = tz_osl_generate_event(notify_type, thermal_zone); + status = tz_osl_generate_event(notify_type, tz); break; default: @@ -706,12 +604,6 @@ * * FUNCTION: tz_request * - * PARAMETERS: - * - * RETURN: Exception code. - * - * DESCRIPTION: - * ****************************************************************************/ acpi_status @@ -720,7 +612,7 @@ void *context) { acpi_status status = AE_OK; - TZ_CONTEXT *thermal_zone = NULL; + TZ_CONTEXT *tz = NULL; FUNCTION_TRACE("tz_request"); @@ -731,7 +623,7 @@ return_ACPI_STATUS(AE_BAD_PARAMETER); } - thermal_zone = (TZ_CONTEXT*)context; + tz = (TZ_CONTEXT*)context; /* * Handle request: diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/thermal/tz_osl.c linux/drivers/acpi/ospm/thermal/tz_osl.c --- v2.4.13/linux/drivers/acpi/ospm/thermal/tz_osl.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/acpi/ospm/thermal/tz_osl.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tz_osl.c - * $Revision: 21 $ + * $Revision: 25 $ * *****************************************************************************/ @@ -35,7 +35,6 @@ MODULE_AUTHOR("Andrew Grover"); MODULE_DESCRIPTION("ACPI Component Architecture (CA) - Thermal Zone Driver"); -MODULE_LICENSE("GPL"); int TZP = 0; MODULE_PARM(TZP, "i"); @@ -65,17 +64,64 @@ int *eof, void *context) { - TZ_CONTEXT *thermal_zone = NULL; + acpi_status status = AE_OK; + char name[5]; + acpi_buffer buffer = {sizeof(name), &name}; + TZ_CONTEXT *tz = NULL; + TZ_THRESHOLDS *thresholds = NULL; char *p = page; int len = 0; + u32 i,j; + u32 t = 0; - if (!context || (off != 0)) { + if (!context || (off != 0)) goto end; + + tz = (TZ_CONTEXT*)context; + + thresholds = &(tz->policy.thresholds); + + p += sprintf(p, "critical (S5): trip=%d\n", thresholds->critical.temperature); + + if (thresholds->hot.is_valid) + p += sprintf(p, "critical (S4): trip=%d\n", thresholds->hot.temperature); + + if (thresholds->passive.is_valid) { + p += sprintf(p, "passive: trip=%d tc1=%d tc2=%d tsp=%d devices=", thresholds->passive.temperature, thresholds->passive.tc1, thresholds->passive.tc2, thresholds->passive.tsp); + for (j=0; jpassive.devices.count; j++) + p += sprintf(p, "%08x%c", thresholds->passive.devices.handles[j], (j==thresholds->passive.devices.count-1)?'\n':','); } - thermal_zone = (TZ_CONTEXT*)context; + for (i=0; iactive[i].is_valid)) + break; + p += sprintf(p, "active[%d]: trip=%d devices=", i, thresholds->active[i].temperature); + for (j=0; jactive[i].devices.count; j++) + p += sprintf(p, "%08x%c", thresholds->active[i].devices.handles[j], (j==thresholds->passive.devices.count-1)?'\n':','); + } - p += sprintf(p, "\n"); + p += sprintf(p, "cooling mode: "); + switch (tz->policy.cooling_mode) { + case TZ_COOLING_MODE_ACTIVE: + p += sprintf(p, "active (noisy)\n"); + break; + case TZ_COOLING_MODE_PASSIVE: + p += sprintf(p, "passive (quiet)\n"); + break; + default: + p += sprintf(p, "unknown\n"); + break; + } + + p += sprintf(p, "polling: "); + switch (tz->policy.polling_freq) { + case 0: + p += sprintf(p, "disabled\n"); + break; + default: + p += sprintf(p, "%d dS\n", tz->policy.polling_freq); + break; + } end: len = (p - page); @@ -85,7 +131,49 @@ if (len>count) len = count; if (len<0) len = 0; - return(len); + return len; +} + + +/**************************************************************************** + * + * FUNCTION: tz_osl_proc_write_info + * + ****************************************************************************/ + +static int tz_osl_proc_write_info ( + struct file *file, + const char *buffer, + unsigned long count, + void *data) +{ + TZ_CONTEXT *tz = NULL; + u32 state = 0; + u32 size = 0; + + if (!buffer || (count==0) || !data) { + goto end; + } + + tz = (TZ_CONTEXT*)data; + + size = strlen(buffer); + if (size < 4) + goto end; + + /* Cooling preference: "scp=0" (active) or "scp=1" (passive) */ + if (0 == strncmp(buffer, "scp=", 4)) { + tz_set_cooling_preference(tz, (buffer[4] - '0')); + } + + /* Polling frequency: "tzp=X" (poll every X [0-9] seconds) */ + else if (0 == strncmp(buffer, "tzp=", 4)) { + tz->policy.polling_freq = (buffer[4] - '0') * 10; + tz_policy_check(tz); + } + +end: + return count; } @@ -104,7 +192,7 @@ int *eof, void *context) { - TZ_CONTEXT *thermal_zone = NULL; + TZ_CONTEXT *tz = NULL; char *p = page; int len = 0; @@ -112,47 +200,27 @@ goto end; } - thermal_zone = (TZ_CONTEXT*)context; + tz = (TZ_CONTEXT*)context; - p += sprintf(p, "Temperature: %d (1/10th degrees Kelvin)\n", - thermal_zone->policy.temperature); + /* Temperature */ - p += sprintf(p, "State: "); - if (thermal_zone->policy.state & TZ_STATE_ACTIVE) { - p += sprintf(p, "active[%d] ", thermal_zone->policy.state & 0x07); - } - if (thermal_zone->policy.state & TZ_STATE_PASSIVE) { - p += sprintf(p, "passive "); - } - if (thermal_zone->policy.state & TZ_STATE_CRITICAL) { - p += sprintf(p, "critical "); - } - if (thermal_zone->policy.state == 0) { - p += sprintf(p, "ok "); - } - p += sprintf(p, "\n"); + tz_get_temperature(tz); - p += sprintf(p, "Cooling Mode: "); - switch (thermal_zone->policy.cooling_mode) { - case TZ_COOLING_MODE_ACTIVE: - p += sprintf(p, "active (noisy)\n"); - break; - case TZ_COOLING_MODE_PASSIVE: - p += sprintf(p, "passive (quiet)\n"); - break; - default: - p += sprintf(p, "unknown\n"); - break; - } + p += sprintf(p, "temperature: %d dK\n", tz->policy.temperature); - p += sprintf(p, "Polling Frequency: "); - switch (thermal_zone->policy.polling_freq) { - case 0: - p += sprintf(p, "n/a\n"); - break; - default: - p += sprintf(p, "%d (1/10th seconds)\n", thermal_zone->policy.polling_freq); - break; + p += sprintf(p, "state: "); + if (tz->policy.state == 0) + p += sprintf(p, "ok\n"); + else if (tz->policy.state & TZ_STATE_CRITICAL) + p += sprintf(p, "critical\n"); + else if (tz->policy.state & TZ_STATE_HOT) + p += sprintf(p, "hot\n"); + else { + if (tz->policy.state & TZ_STATE_ACTIVE) + p += sprintf(p, "active[%d] ", tz->policy.state & 0x07); + if (tz->policy.state & TZ_STATE_PASSIVE) + p += sprintf(p, "passive "); + p += sprintf(p, "\n"); } end: @@ -175,30 +243,33 @@ acpi_status tz_osl_add_device( - TZ_CONTEXT *thermal_zone) + TZ_CONTEXT *tz) { - struct proc_dir_entry *proc_entry = NULL, *proc; + struct proc_dir_entry *proc_entry = NULL; + struct proc_dir_entry *proc_child_entry = NULL; - if (!thermal_zone) { + if (!tz) { return(AE_BAD_PARAMETER); } - printk("Thermal Zone: found\n"); + printk("ACPI: Thermal Zone found\n"); - proc_entry = proc_mkdir(thermal_zone->uid, tz_proc_root); - if (!proc_entry) + proc_entry = proc_mkdir(tz->uid, tz_proc_root); + if (!proc_entry) return(AE_ERROR); - proc = create_proc_read_entry(TZ_PROC_STATUS, S_IFREG | S_IRUGO, - proc_entry, tz_osl_proc_read_status, (void*)thermal_zone); - if (!proc) + proc_child_entry = create_proc_read_entry(TZ_PROC_STATUS, S_IFREG | S_IRUGO, proc_entry, tz_osl_proc_read_status, (void*)tz); + if (!proc_child_entry) return(AE_ERROR); - proc = create_proc_read_entry(TZ_PROC_INFO, S_IFREG | S_IRUGO, - proc_entry, tz_osl_proc_read_info, (void*)thermal_zone); - if (!proc) + proc_child_entry = create_proc_entry(TZ_PROC_INFO, S_IFREG | 0644, proc_entry); + if (!proc_child_entry) return(AE_ERROR); + proc_child_entry->read_proc = tz_osl_proc_read_info; + proc_child_entry->write_proc = tz_osl_proc_write_info; + proc_child_entry->data = (void*)tz; + return(AE_OK); } @@ -211,21 +282,21 @@ acpi_status tz_osl_remove_device ( - TZ_CONTEXT *thermal_zone) + TZ_CONTEXT *tz) { char proc_entry[64]; - if (!thermal_zone) { + if (!tz) { return(AE_BAD_PARAMETER); } - sprintf(proc_entry, "%s/%s", thermal_zone->uid, TZ_PROC_INFO); + sprintf(proc_entry, "%s/%s", tz->uid, TZ_PROC_INFO); remove_proc_entry(proc_entry, tz_proc_root); - sprintf(proc_entry, "%s/%s", thermal_zone->uid, TZ_PROC_STATUS); + sprintf(proc_entry, "%s/%s", tz->uid, TZ_PROC_STATUS); remove_proc_entry(proc_entry, tz_proc_root); - sprintf(proc_entry, "%s", thermal_zone->uid); + sprintf(proc_entry, "%s", tz->uid); remove_proc_entry(proc_entry, tz_proc_root); return(AE_OK); @@ -241,26 +312,26 @@ acpi_status tz_osl_generate_event ( u32 event, - TZ_CONTEXT *thermal_zone) + TZ_CONTEXT *tz) { acpi_status status = AE_OK; - if (!thermal_zone) { + if (!tz) { return(AE_BAD_PARAMETER); } switch (event) { case TZ_NOTIFY_TEMPERATURE_CHANGE: - status = bm_osl_generate_event(thermal_zone->device_handle, - TZ_PROC_ROOT, thermal_zone->uid, event, - thermal_zone->policy.temperature); + status = bm_osl_generate_event(tz->device_handle, + TZ_PROC_ROOT, tz->uid, event, + tz->policy.temperature); break; case TZ_NOTIFY_THRESHOLD_CHANGE: case TZ_NOTIFY_DEVICE_LISTS_CHANGE: - status = bm_osl_generate_event(thermal_zone->device_handle, - TZ_PROC_ROOT, thermal_zone->uid, event, 0); + status = bm_osl_generate_event(tz->device_handle, + TZ_PROC_ROOT, tz->uid, event, 0); break; default: @@ -276,12 +347,6 @@ * * FUNCTION: tz_osl_init * - * PARAMETERS: - * - * RETURN: 0: Success - * - * DESCRIPTION: Module initialization. - * ****************************************************************************/ static int __init @@ -312,12 +377,6 @@ /**************************************************************************** * * FUNCTION: tz_osl_cleanup - * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: Module cleanup. * ****************************************************************************/ diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/ospm/thermal/tzpolicy.c linux/drivers/acpi/ospm/thermal/tzpolicy.c --- v2.4.13/linux/drivers/acpi/ospm/thermal/tzpolicy.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/ospm/thermal/tzpolicy.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /**************************************************************************** * * Module Name: tzpolicy.c - - * $Revision: 28 $ + * $Revision: 30 $ * ****************************************************************************/ @@ -24,13 +24,10 @@ */ /* - * TBD: 1. Move to user-space! - * 2. Support ACPI 2.0 items (e.g. _TZD, _HOT). - * 3. Support performance-limit control for non-processor devices + * TBD: 1. Support performance-limit control for non-processor devices * (those listed in _TZD, e.g. graphics). */ -/* TBD: Linux specific */ #include #include #include @@ -48,8 +45,6 @@ * Globals ****************************************************************************/ -extern int TZP; - void tz_policy_run ( unsigned long data); @@ -75,12 +70,10 @@ status = bm_request(&request); - if (ACPI_FAILURE(status)) { + if (ACPI_FAILURE(status)) return status; - } - else { + else return request.status; - } } @@ -102,14 +95,44 @@ { FUNCTION_TRACE("tz_policy_critical"); - if (!tz || !tz->policy.critical.threshold) { + if (!tz) { return_ACPI_STATUS(AE_BAD_PARAMETER); } - if (tz->policy.temperature >= - tz->policy.critical.threshold->temperature) { - ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Critical threshold reached - shutting down system.\n")); - /* TBD: Need method for calling 'halt' - OSL function? */ + if (tz->policy.temperature >= tz->policy.thresholds.critical.temperature) { + ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Critical (S5) threshold reached.\n")); + /* TBD: Need method for shutting down system. */ + } + + return_ACPI_STATUS(AE_OK); +} + + +/**************************************************************************** + * + * FUNCTION: tz_policy_hot + * + * PARAMETERS: + * + * RETURN: + * + * DESCRIPTION: + * + ****************************************************************************/ + +acpi_status +tz_policy_hot( + TZ_CONTEXT *tz) +{ + FUNCTION_TRACE("tz_policy_hot"); + + if (!tz || !tz->policy.thresholds.hot.is_valid) { + return_ACPI_STATUS(AE_BAD_PARAMETER); + } + + if (tz->policy.temperature >= tz->policy.thresholds.hot.temperature) { + ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Critical (S4) threshold reached.\n")); + /* TBD: Need method for invoking OS-level critical suspend. */ } return_ACPI_STATUS(AE_OK); @@ -132,20 +155,20 @@ tz_policy_passive( TZ_CONTEXT *tz) { - TZ_PASSIVE_POLICY *passive = NULL; + TZ_PASSIVE_THRESHOLD *passive = NULL; static u32 last_temperature = 0; s32 trend = 0; u32 i = 0; FUNCTION_TRACE("tz_policy_passive"); - if (!tz || !tz->policy.passive.threshold) { + if (!tz || !tz->policy.thresholds.passive.is_valid) { return_ACPI_STATUS(AE_BAD_PARAMETER); } - passive = &(tz->policy.passive); + passive = &(tz->policy.thresholds.passive); - if (tz->policy.temperature >= passive->threshold->temperature) { + if (tz->policy.temperature >= passive->temperature) { /* * Thermal trend? * -------------- @@ -153,15 +176,8 @@ * Specification), calculate the current thermal trend * (a.k.a. performance delta). */ - trend = passive->tc1 * - (tz->policy.temperature - last_temperature) + - passive->tc2 * - (tz->policy.temperature - passive->threshold->temperature); - - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "trend[%d] = TC1[%d]*(temp[%d]-last[%d]) + TC2[%d]*(temp[%d]-passive[%d])\n", - trend, passive->tc1, tz->policy.temperature, - last_temperature, passive->tc2, tz->policy.temperature, - passive->threshold->temperature)); + trend = passive->tc1 * (tz->policy.temperature - last_temperature) + passive->tc2 * (tz->policy.temperature - passive->temperature); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "trend[%d] = TC1[%d]*(temp[%d]-last[%d]) + TC2[%d]*(temp[%d]-passive[%d])\n", trend, passive->tc1, tz->policy.temperature, last_temperature, passive->tc2, tz->policy.temperature, passive->temperature)); last_temperature = tz->policy.temperature; @@ -172,11 +188,8 @@ * cooling devices (processors). */ if (trend > 0) { - for (i=0; ithreshold->cooling_devices.count; i++) { - set_performance_limit( - passive->threshold->cooling_devices.handles[i], - PR_PERF_DEC); - } + for (i=0; idevices.count; i++) + set_performance_limit(passive->devices.handles[i], PR_PERF_DEC); } /* * Cooling Off? @@ -185,11 +198,8 @@ * cooling devices (processors). */ else if (trend < 0) { - for (i=0; ithreshold->cooling_devices.count; i++) { - set_performance_limit( - passive->threshold->cooling_devices.handles[i], - PR_PERF_INC); - } + for (i=0; idevices.count; i++) + set_performance_limit(passive->devices.handles[i], PR_PERF_INC); } } @@ -214,21 +224,20 @@ TZ_CONTEXT *tz) { acpi_status status = AE_OK; - TZ_THRESHOLD *active = NULL; + TZ_ACTIVE_THRESHOLD *active = NULL; u32 i,j = 0; FUNCTION_TRACE("tz_policy_active"); - if (!tz || !tz->policy.active.threshold) { + if (!tz || !tz->policy.thresholds.active[0].is_valid) { return_ACPI_STATUS(AE_BAD_PARAMETER); } - for (i = 0; i < TZ_MAX_ACTIVE_THRESHOLDS; i++) { + for (i=0; ipolicy.active.threshold[i]; - if (!active) { + active = &(tz->policy.thresholds.active[i]); + if (!active || !active->is_valid) break; - } /* * Above Threshold? @@ -236,24 +245,17 @@ * If not already enabled, turn ON all cooling devices * associated with this active threshold. */ - if ((tz->policy.temperature >= active->temperature) && - (active->cooling_state != TZ_COOLING_ENABLED)) { - - for (j = 0; j < active->cooling_devices.count; j++) { - - status = bm_set_device_power_state( - active->cooling_devices.handles[j], - ACPI_STATE_D0); - + if ((tz->policy.temperature >= active->temperature) && (active->cooling_state != TZ_COOLING_ENABLED)) { + for (j = 0; j < active->devices.count; j++) { + status = bm_set_device_power_state(active->devices.handles[j], ACPI_STATE_D0); if (ACPI_SUCCESS(status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Cooling device [%02x] now ON.\n", active->cooling_devices.handles[j])); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Cooling device [%02x] now ON.\n", active->devices.handles[j])); } else { - ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Unable to turn ON cooling device [%02x].\n", active->cooling_devices.handles[j])); + ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Unable to turn ON cooling device [%02x].\n", active->devices.handles[j])); } } - - active->cooling_state = TZ_COOLING_ENABLED; + active->cooling_state = TZ_COOLING_ENABLED; } /* * Below Threshold? @@ -265,21 +267,15 @@ * during the first pass. */ else if (active->cooling_state != TZ_COOLING_DISABLED) { - - for (j = 0; j < active->cooling_devices.count; j++) { - - status = bm_set_device_power_state( - active->cooling_devices.handles[j], - ACPI_STATE_D3); - + for (j = 0; j < active->devices.count; j++) { + status = bm_set_device_power_state(active->devices.handles[j], ACPI_STATE_D3); if (ACPI_SUCCESS(status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Cooling device [%02x] now OFF.\n", active->cooling_devices.handles[j])); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Cooling device [%02x] now OFF.\n", active->devices.handles[j])); } else { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Unable to turn OFF cooling device [%02x].\n", active->cooling_devices.handles[j])); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Unable to turn OFF cooling device [%02x].\n", active->devices.handles[j])); } } - active->cooling_state = TZ_COOLING_DISABLED; } } @@ -308,6 +304,8 @@ { acpi_status status = AE_OK; TZ_CONTEXT *tz = NULL; + TZ_POLICY *policy = NULL; + TZ_THRESHOLDS *thresholds = NULL; u32 previous_temperature = 0; u32 previous_state = 0; u32 active_index = 0; @@ -322,6 +320,8 @@ } tz = (TZ_CONTEXT*)context; + policy = &(tz->policy); + thresholds = &(tz->policy.thresholds); /* * Preserve Previous State: @@ -334,7 +334,7 @@ * Get Temperature: * ---------------- */ - status = tz_get_temperature(tz, &(tz->policy.temperature)); + status = tz_get_temperature(tz); if (ACPI_FAILURE(status)) { return_VOID; } @@ -343,32 +343,30 @@ * Calculate State: * ---------------- */ - tz->policy.state = TZ_STATE_OK; + policy->state = TZ_STATE_OK; /* Critical? */ - if ((tz->policy.critical.threshold) && - (tz->policy.temperature >= tz->policy.critical.threshold->temperature)) { - tz->policy.state |= TZ_STATE_CRITICAL; - } + if (policy->temperature >= thresholds->critical.temperature) + policy->state |= TZ_STATE_CRITICAL; + + /* Hot? */ + if ((thresholds->hot.is_valid) && (policy->temperature >= thresholds->hot.temperature)) + policy->state |= TZ_STATE_CRITICAL; /* Passive? */ - if ((tz->policy.passive.threshold) && - (tz->policy.temperature >= tz->policy.passive.threshold->temperature)) { - tz->policy.state |= TZ_STATE_PASSIVE; - } + if ((thresholds->passive.is_valid) && (policy->temperature >= thresholds->passive.temperature)) + policy->state |= TZ_STATE_PASSIVE; /* Active? */ - if (tz->policy.active.threshold[0]) { - for (i=0; ipolicy.active.threshold_count; i++) { - if ((tz->policy.active.threshold[i]) && - (tz->policy.temperature >= tz->policy.active.threshold[i]->temperature)) { - tz->policy.state |= TZ_STATE_ACTIVE; - if (tz->policy.active.threshold[i]->index > active_index) { - active_index = tz->policy.active.threshold[i]->index; - } + if (thresholds->active[0].is_valid) { + for (i=0; iactive[i].is_valid) && (policy->temperature >= thresholds->active[i].temperature)) { + policy->state |= TZ_STATE_ACTIVE; + if (i > active_index) + active_index = i; } } - tz->policy.state |= active_index; + policy->state |= active_index; } /* @@ -379,17 +377,14 @@ * out of' a policy state (e.g. to allow fans to be turned off); * thus we must preserve the previous state. */ - if (tz->policy.state & TZ_STATE_CRITICAL) { + if (policy->state & TZ_STATE_CRITICAL) tz_policy_critical(tz); - } - if ((tz->policy.state & TZ_STATE_PASSIVE) || - (previous_state & TZ_STATE_PASSIVE)) { + if (policy->state & TZ_STATE_HOT) + tz_policy_hot(tz); + if ((policy->state & TZ_STATE_PASSIVE) || (previous_state & TZ_STATE_PASSIVE)) tz_policy_passive(tz); - } - if ((tz->policy.state & TZ_STATE_ACTIVE) || - (previous_state & TZ_STATE_ACTIVE)) { + if ((policy->state & TZ_STATE_ACTIVE) || (previous_state & TZ_STATE_ACTIVE)) tz_policy_active(tz); - } /* * Calculate Sleep Time: @@ -400,42 +395,33 @@ * a thermal event occurs -- e.g. never poll). Note that _TSP * and _TZD values are given in 1/10th seconds. */ - if (tz->policy.state & TZ_STATE_PASSIVE) { - sleep_time = tz->policy.passive.tsp * 100; - } - else if (tz->policy.polling_freq > 0) { - sleep_time = tz->policy.polling_freq * 100; - } - else { + if (policy->state & TZ_STATE_PASSIVE) + sleep_time = thresholds->passive.tsp * 100; + else if (policy->polling_freq > 0) + sleep_time = policy->polling_freq * 100; + else sleep_time = WAIT_FOREVER; - } -#ifdef ACPI_DEBUG - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Thermal_zone[%02x]: temperature[%d] state[%08x]\n", tz->device_handle, tz->policy.temperature, tz->policy.state)); + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Thermal_zone[%02x]: temperature[%d] state[%08x]\n", tz->device_handle, policy->temperature, policy->state)); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Scheduling next poll in [%d]ms.\n", sleep_time)); -#endif /*ACPI_DEBUG*/ /* * Schedule Next Poll: * ------------------- */ if (sleep_time < WAIT_FOREVER) { - if (timer_pending(&(tz->policy.timer))) { - mod_timer(&(tz->policy.timer), - (HZ*sleep_time)/1000); - } + if (timer_pending(&(policy->timer))) + mod_timer(&(policy->timer), (HZ*sleep_time)/1000); else { - tz->policy.timer.data = (u32)tz; - tz->policy.timer.function = tz_policy_run; - tz->policy.timer.expires = - jiffies + (HZ*sleep_time)/1000; - add_timer(&(tz->policy.timer)); + policy->timer.data = (u32)tz; + policy->timer.function = tz_policy_run; + policy->timer.expires = jiffies + (HZ*sleep_time)/1000; + add_timer(&(policy->timer)); } } else { - if (timer_pending(&(tz->policy.timer))) { - del_timer(&(tz->policy.timer)); - } + if (timer_pending(&(policy->timer))) + del_timer(&(policy->timer)); } return_VOID; @@ -454,6 +440,7 @@ * ****************************************************************************/ + void tz_policy_run ( unsigned long data) @@ -472,8 +459,7 @@ * ----------------------------- * Note that all Linux kernel timers run at interrupt-level (ack!). */ - status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE, - tz_policy_check, (void*)data); + status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE, tz_policy_check, (void*)data); if (ACPI_FAILURE(status)) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Error invoking thermal policy.\n")); } @@ -499,7 +485,7 @@ TZ_CONTEXT *tz) { acpi_status status = AE_OK; - TZ_THRESHOLD *threshold = NULL; + TZ_THRESHOLDS *thresholds = NULL; u32 i,j = 0; FUNCTION_TRACE("tz_policy_add_device"); @@ -511,36 +497,10 @@ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Adding policy for thermal zone [%02x].\n", tz->device_handle)); /* - * Temperature: - * ------------ - * Make sure we can read the zone's current temperature (_TMP). - * If we can't, there's no use in doing any policy (abort). - */ - status = tz_get_temperature(tz, &(tz->policy.temperature)); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* - * Polling Frequency: - * ------------------ - * If a _TZP object doesn't exist, use the OS default polling - * frequency. - */ - status = bm_evaluate_simple_integer(tz->acpi_handle, "_TZP", - &(tz->policy.polling_freq)); - if (ACPI_FAILURE(status)) { - tz->policy.polling_freq = TZP; - } - status = AE_OK; - - /* * Get Thresholds: * --------------- - * Get all of the zone's thresholds, parse, and organize for - * later use. */ - status = tz_get_thresholds(tz, &(tz->policy.threshold_list)); + status = tz_get_thresholds(tz); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } @@ -549,70 +509,17 @@ * Initialize Policies: * -------------------- */ - for (i = 0; i < tz->policy.threshold_list.count; i++) { - - threshold = &(tz->policy.threshold_list.thresholds[i]); - - switch (threshold->type) { - - case TZ_THRESHOLD_CRITICAL: - tz->policy.critical.threshold = threshold; - break; - - case TZ_THRESHOLD_PASSIVE: - - /* - * Set thermal performance limit on all processors - * to max. - */ - for (j=0; jcooling_devices.count; j++) { - set_performance_limit( - threshold->cooling_devices.handles[j], - PR_PERF_MAX); - } - - /* - * Get passive cooling constants. - */ - status = bm_evaluate_simple_integer(tz->acpi_handle, - "_TC1", &(tz->policy.passive.tc1)); - if (ACPI_FAILURE(status)) { - break; - } - - status = bm_evaluate_simple_integer(tz->acpi_handle, - "_TC2", &(tz->policy.passive.tc2)); - if (ACPI_FAILURE(status)) { - break; - } - - status = bm_evaluate_simple_integer(tz->acpi_handle, - "_TSP", &(tz->policy.passive.tsp)); - if (ACPI_FAILURE(status)) { - break; - } - - tz->policy.passive.threshold = threshold; - - tz_policy_passive(tz); - - break; - - case TZ_THRESHOLD_ACTIVE: - tz->policy.active.threshold[threshold->index] = threshold; - tz_policy_active(tz); - break; - } - } - - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); + if (tz->policy.thresholds.passive.is_valid) { + for (i=0; ipolicy.thresholds.passive.devices.count; i++) + set_performance_limit(tz->policy.thresholds.passive.devices.handles[i], PR_PERF_MAX); + tz_policy_passive(tz); } + if (tz->policy.thresholds.active[0].is_valid) + tz_policy_active(tz); /* * Initialize Policy Timer: * ------------------------ - * TBD: Linux-specific - remove when policy moves to user-space. */ init_timer(&(tz->policy.timer)); @@ -623,7 +530,7 @@ */ tz_policy_check(tz); - return_ACPI_STATUS(status); + return_ACPI_STATUS(AE_OK); } @@ -656,19 +563,15 @@ /* * Delete the thermal zone policy timer entry, if exists. */ - if (timer_pending(&(tz->policy.timer))) { + if (timer_pending(&(tz->policy.timer))) del_timer(&(tz->policy.timer)); - } /* * Reset thermal performance limit on all processors back to max. */ - if (tz->policy.passive.threshold) { - for (i=0; ipolicy.passive.threshold->cooling_devices.count; i++) { - set_performance_limit( - tz->policy.passive.threshold->cooling_devices.handles[i], - PR_PERF_MAX); - } + if (tz->policy.thresholds.passive.is_valid) { + for (i=0; ipolicy.thresholds.passive.devices.count; i++) + set_performance_limit(tz->policy.thresholds.passive.devices.handles[i], PR_PERF_MAX); } return_ACPI_STATUS(AE_OK); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/parser/psargs.c linux/drivers/acpi/parser/psargs.c --- v2.4.13/linux/drivers/acpi/parser/psargs.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/parser/psargs.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psargs - Parse AML opcode arguments - * $Revision: 51 $ + * $Revision: 52 $ * *****************************************************************************/ @@ -391,11 +391,11 @@ name_op->node = method_node; acpi_ps_append_arg (arg, name_op); - if (!(acpi_operand_object *) method_node->object) { + if (!method_node->object) { return_VOID; } - *arg_count = ((acpi_operand_object *) method_node->object)->method.param_count; + *arg_count = (method_node->object)->method.param_count; } return_VOID; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/parser/psopcode.c linux/drivers/acpi/parser/psopcode.c --- v2.4.13/linux/drivers/acpi/parser/psopcode.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/parser/psopcode.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * - * Module Name: psopcode - Parser opcode information table - * $Revision: 41 $ + * Module Name: psopcode - Parser/Interpreter opcode information table + * $Revision: 49 $ * *****************************************************************************/ @@ -67,28 +67,11 @@ * into a 32-bit number and stored in the master opcode table at the end of this file. */ -#define ARGP_ZERO_OP ARG_NONE -#define ARGP_ONE_OP ARG_NONE + +#define ARGP_ACCESSFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) +#define ARGP_ACQUIRE_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_WORDDATA) +#define ARGP_ADD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_ALIAS_OP ARGP_LIST2 (ARGP_NAMESTRING, ARGP_NAME) -#define ARGP_NAME_OP ARGP_LIST2 (ARGP_NAME, ARGP_DATAOBJ) -#define ARGP_BYTE_OP ARGP_LIST1 (ARGP_BYTEDATA) -#define ARGP_WORD_OP ARGP_LIST1 (ARGP_WORDDATA) -#define ARGP_DWORD_OP ARGP_LIST1 (ARGP_DWORDDATA) -#define ARGP_STRING_OP ARGP_LIST1 (ARGP_CHARLIST) -#define ARGP_QWORD_OP ARGP_LIST1 (ARGP_QWORDDATA) -#define ARGP_SCOPE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_TERMLIST) -#define ARGP_BUFFER_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_BYTELIST) -#define ARGP_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_BYTEDATA, ARGP_DATAOBJLIST) -#define ARGP_VAR_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_BYTEDATA, ARGP_DATAOBJLIST) -#define ARGP_METHOD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_TERMLIST) -#define ARGP_LOCAL0 ARG_NONE -#define ARGP_LOCAL1 ARG_NONE -#define ARGP_LOCAL2 ARG_NONE -#define ARGP_LOCAL3 ARG_NONE -#define ARGP_LOCAL4 ARG_NONE -#define ARGP_LOCAL5 ARG_NONE -#define ARGP_LOCAL6 ARG_NONE -#define ARGP_LOCAL7 ARG_NONE #define ARGP_ARG0 ARG_NONE #define ARGP_ARG1 ARG_NONE #define ARGP_ARG2 ARG_NONE @@ -96,98 +79,116 @@ #define ARGP_ARG4 ARG_NONE #define ARGP_ARG5 ARG_NONE #define ARGP_ARG6 ARG_NONE -#define ARGP_STORE_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_SUPERNAME) -#define ARGP_REF_OF_OP ARGP_LIST1 (ARGP_SUPERNAME) -#define ARGP_ADD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_CONCAT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_SUBTRACT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_INCREMENT_OP ARGP_LIST1 (ARGP_SUPERNAME) -#define ARGP_DECREMENT_OP ARGP_LIST1 (ARGP_SUPERNAME) -#define ARGP_MULTIPLY_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_DIVIDE_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET, ARGP_TARGET) -#define ARGP_SHIFT_LEFT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_SHIFT_RIGHT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) +#define ARGP_BANK_FIELD_OP ARGP_LIST6 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_NAMESTRING,ARGP_TERMARG, ARGP_BYTEDATA, ARGP_FIELDLIST) #define ARGP_BIT_AND_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_BIT_NAND_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_BIT_OR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_BIT_NOR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_BIT_XOR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_BIT_NOT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_FIND_SET_LEFT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_FIND_SET_RIGHT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_DEREF_OF_OP ARGP_LIST1 (ARGP_TERMARG) +#define ARGP_BIT_OR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) +#define ARGP_BIT_XOR_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) +#define ARGP_BREAK_OP ARG_NONE +#define ARGP_BREAK_POINT_OP ARG_NONE +#define ARGP_BUFFER_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_BYTELIST) +#define ARGP_BYTE_OP ARGP_LIST1 (ARGP_BYTEDATA) +#define ARGP_BYTELIST_OP ARGP_LIST1 (ARGP_NAMESTRING) +#define ARGP_CONCAT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_CONCAT_RES_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_MOD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_NOTIFY_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG) -#define ARGP_SIZE_OF_OP ARGP_LIST1 (ARGP_SUPERNAME) -#define ARGP_INDEX_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_MATCH_OP ARGP_LIST6 (ARGP_TERMARG, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_CREATE_DWORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) -#define ARGP_CREATE_WORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) -#define ARGP_CREATE_BYTE_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) +#define ARGP_COND_REF_OF_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_SUPERNAME) +#define ARGP_CONTINUE_OP ARG_NONE +#define ARGP_COPY_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_SIMPLENAME) #define ARGP_CREATE_BIT_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) -#define ARGP_TYPE_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_CREATE_BYTE_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) +#define ARGP_CREATE_DWORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) +#define ARGP_CREATE_FIELD_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) #define ARGP_CREATE_QWORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) +#define ARGP_CREATE_WORD_FIELD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) +#define ARGP_DATA_REGION_OP ARGP_LIST4 (ARGP_NAME, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG) +#define ARGP_DEBUG_OP ARG_NONE +#define ARGP_DECREMENT_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_DEREF_OF_OP ARGP_LIST1 (ARGP_TERMARG) +#define ARGP_DEVICE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST) +#define ARGP_DIVIDE_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET, ARGP_TARGET) +#define ARGP_DWORD_OP ARGP_LIST1 (ARGP_DWORDDATA) +#define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST) +#define ARGP_EVENT_OP ARGP_LIST1 (ARGP_NAME) +#define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG) +#define ARGP_FIELD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_FIELDLIST) +#define ARGP_FIND_SET_LEFT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_FIND_SET_RIGHT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_FROM_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_IF_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST) +#define ARGP_INCREMENT_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_INDEX_FIELD_OP ARGP_LIST5 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_NAMESTRING,ARGP_BYTEDATA, ARGP_FIELDLIST) +#define ARGP_INDEX_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) #define ARGP_LAND_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_LOR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_LNOT_OP ARGP_LIST1 (ARGP_TERMARG) #define ARGP_LEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LGREATER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) +#define ARGP_LGREATEREQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) #define ARGP_LLESS_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_TO_BUFFER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_TO_DEC_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_TO_HEX_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_TO_INTEGER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_TO_STRING_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_COPY_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_SIMPLENAME) +#define ARGP_LLESSEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) +#define ARGP_LNOT_OP ARGP_LIST1 (ARGP_TERMARG) +#define ARGP_LNOTEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) +#define ARGP_LOAD_OP ARGP_LIST2 (ARGP_NAMESTRING, ARGP_SUPERNAME) +#define ARGP_LOAD_TABLE_OP ARGP_LIST6 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG) +#define ARGP_LOCAL0 ARG_NONE +#define ARGP_LOCAL1 ARG_NONE +#define ARGP_LOCAL2 ARG_NONE +#define ARGP_LOCAL3 ARG_NONE +#define ARGP_LOCAL4 ARG_NONE +#define ARGP_LOCAL5 ARG_NONE +#define ARGP_LOCAL6 ARG_NONE +#define ARGP_LOCAL7 ARG_NONE +#define ARGP_LOR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) +#define ARGP_MATCH_OP ARGP_LIST6 (ARGP_TERMARG, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_TERMARG) +#define ARGP_METHOD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_TERMLIST) +#define ARGP_METHODCALL_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_MID_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) -#define ARGP_CONTINUE_OP ARG_NONE -#define ARGP_IF_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST) -#define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST) -#define ARGP_WHILE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST) +#define ARGP_MOD_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) +#define ARGP_MULTIPLY_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) +#define ARGP_MUTEX_OP ARGP_LIST2 (ARGP_NAME, ARGP_BYTEDATA) +#define ARGP_NAME_OP ARGP_LIST2 (ARGP_NAME, ARGP_DATAOBJ) +#define ARGP_NAMEDFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) +#define ARGP_NAMEPATH_OP ARGP_LIST1 (ARGP_NAMESTRING) #define ARGP_NOOP_OP ARG_NONE -#define ARGP_RETURN_OP ARGP_LIST1 (ARGP_TERMARG) -#define ARGP_BREAK_OP ARG_NONE -#define ARGP_BREAK_POINT_OP ARG_NONE +#define ARGP_NOTIFY_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG) +#define ARGP_ONE_OP ARG_NONE #define ARGP_ONES_OP ARG_NONE -#define ARGP_MUTEX_OP ARGP_LIST2 (ARGP_NAME, ARGP_BYTEDATA) -#define ARGP_EVENT_OP ARGP_LIST1 (ARGP_NAME) -#define ARGP_COND_REF_OF_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_SUPERNAME) -#define ARGP_CREATE_FIELD_OP ARGP_LIST4 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_NAME) -#define ARGP_LOAD_TABLE_OP ARGP_LIST6 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_LOAD_OP ARGP_LIST2 (ARGP_NAMESTRING, ARGP_SUPERNAME) -#define ARGP_STALL_OP ARGP_LIST1 (ARGP_TERMARG) -#define ARGP_SLEEP_OP ARGP_LIST1 (ARGP_TERMARG) -#define ARGP_ACQUIRE_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_WORDDATA) -#define ARGP_SIGNAL_OP ARGP_LIST1 (ARGP_SUPERNAME) -#define ARGP_WAIT_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG) -#define ARGP_RESET_OP ARGP_LIST1 (ARGP_SUPERNAME) -#define ARGP_RELEASE_OP ARGP_LIST1 (ARGP_SUPERNAME) -#define ARGP_FROM_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_TO_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_UNLOAD_OP ARGP_LIST1 (ARGP_SUPERNAME) -#define ARGP_REVISION_OP ARG_NONE -#define ARGP_DEBUG_OP ARG_NONE -#define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG) -#define ARGP_REGION_OP ARGP_LIST4 (ARGP_NAME, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_FIELD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_FIELDLIST) -#define ARGP_DEVICE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST) -#define ARGP_PROCESSOR_OP ARGP_LIST6 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_BYTEDATA, ARGP_OBJLIST) +#define ARGP_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_BYTEDATA, ARGP_DATAOBJLIST) #define ARGP_POWER_RES_OP ARGP_LIST5 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_WORDDATA, ARGP_OBJLIST) -#define ARGP_THERMAL_ZONE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST) -#define ARGP_INDEX_FIELD_OP ARGP_LIST5 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_NAMESTRING,ARGP_BYTEDATA, ARGP_FIELDLIST) -#define ARGP_BANK_FIELD_OP ARGP_LIST6 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_NAMESTRING,ARGP_TERMARG, ARGP_BYTEDATA, ARGP_FIELDLIST) -#define ARGP_DATA_REGION_OP ARGP_LIST4 (ARGP_NAMESTRING, ARGP_TERMARG, ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_LNOTEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_LLESSEQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_LGREATEREQUAL_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TERMARG) -#define ARGP_NAMEPATH_OP ARGP_LIST1 (ARGP_NAMESTRING) -#define ARGP_METHODCALL_OP ARGP_LIST1 (ARGP_NAMESTRING) -#define ARGP_BYTELIST_OP ARGP_LIST1 (ARGP_NAMESTRING) +#define ARGP_PROCESSOR_OP ARGP_LIST6 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_BYTEDATA, ARGP_OBJLIST) +#define ARGP_QWORD_OP ARGP_LIST1 (ARGP_QWORDDATA) +#define ARGP_REF_OF_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_REGION_OP ARGP_LIST4 (ARGP_NAME, ARGP_BYTEDATA, ARGP_TERMARG, ARGP_TERMARG) +#define ARGP_RELEASE_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_RESERVEDFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) -#define ARGP_NAMEDFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) -#define ARGP_ACCESSFIELD_OP ARGP_LIST1 (ARGP_NAMESTRING) +#define ARGP_RESET_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_RETURN_OP ARGP_LIST1 (ARGP_TERMARG) +#define ARGP_REVISION_OP ARG_NONE +#define ARGP_SCOPE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_TERMLIST) +#define ARGP_SHIFT_LEFT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) +#define ARGP_SHIFT_RIGHT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) +#define ARGP_SIGNAL_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_SIZE_OF_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_SLEEP_OP ARGP_LIST1 (ARGP_TERMARG) +#define ARGP_STALL_OP ARGP_LIST1 (ARGP_TERMARG) #define ARGP_STATICSTRING_OP ARGP_LIST1 (ARGP_NAMESTRING) +#define ARGP_STORE_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_SUPERNAME) +#define ARGP_STRING_OP ARGP_LIST1 (ARGP_CHARLIST) +#define ARGP_SUBTRACT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) +#define ARGP_THERMAL_ZONE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST) +#define ARGP_TO_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_TO_BUFFER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_TO_DEC_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_TO_HEX_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_TO_INTEGER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_TO_STRING_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET) +#define ARGP_TYPE_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_UNLOAD_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_VAR_PACKAGE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_BYTEDATA, ARGP_DATAOBJLIST) +#define ARGP_WAIT_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG) +#define ARGP_WHILE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST) +#define ARGP_WORD_OP ARGP_LIST1 (ARGP_WORDDATA) +#define ARGP_ZERO_OP ARG_NONE /* @@ -197,28 +198,11 @@ * (Used by Prep_operands procedure and the ASL Compiler) */ -#define ARGI_ZERO_OP ARG_NONE -#define ARGI_ONE_OP ARG_NONE + +#define ARGI_ACCESSFIELD_OP ARGI_INVALID_OPCODE +#define ARGI_ACQUIRE_OP ARGI_LIST2 (ARGI_MUTEX, ARGI_INTEGER) +#define ARGI_ADD_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_ALIAS_OP ARGI_INVALID_OPCODE -#define ARGI_NAME_OP ARGI_INVALID_OPCODE -#define ARGI_BYTE_OP ARGI_INVALID_OPCODE -#define ARGI_WORD_OP ARGI_INVALID_OPCODE -#define ARGI_DWORD_OP ARGI_INVALID_OPCODE -#define ARGI_STRING_OP ARGI_INVALID_OPCODE -#define ARGI_QWORD_OP ARGI_INVALID_OPCODE -#define ARGI_SCOPE_OP ARGI_INVALID_OPCODE -#define ARGI_BUFFER_OP ARGI_INVALID_OPCODE -#define ARGI_PACKAGE_OP ARGI_INVALID_OPCODE -#define ARGI_VAR_PACKAGE_OP ARGI_INVALID_OPCODE -#define ARGI_METHOD_OP ARGI_INVALID_OPCODE -#define ARGI_LOCAL0 ARG_NONE -#define ARGI_LOCAL1 ARG_NONE -#define ARGI_LOCAL2 ARG_NONE -#define ARGI_LOCAL3 ARG_NONE -#define ARGI_LOCAL4 ARG_NONE -#define ARGI_LOCAL5 ARG_NONE -#define ARGI_LOCAL6 ARG_NONE -#define ARGI_LOCAL7 ARG_NONE #define ARGI_ARG0 ARG_NONE #define ARGI_ARG1 ARG_NONE #define ARGI_ARG2 ARG_NONE @@ -226,98 +210,116 @@ #define ARGI_ARG4 ARG_NONE #define ARGI_ARG5 ARG_NONE #define ARGI_ARG6 ARG_NONE -#define ARGI_STORE_OP ARGI_LIST2 (ARGI_ANYTYPE, ARGI_TARGETREF) -#define ARGI_REF_OF_OP ARGI_LIST1 (ARGI_OBJECT_REF) -#define ARGI_ADD_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_CONCAT_OP ARGI_LIST3 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA, ARGI_TARGETREF) -#define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_INCREMENT_OP ARGI_LIST1 (ARGI_INTEGER_REF) -#define ARGI_DECREMENT_OP ARGI_LIST1 (ARGI_INTEGER_REF) -#define ARGI_MULTIPLY_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_DIVIDE_OP ARGI_LIST4 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF, ARGI_TARGETREF) -#define ARGI_SHIFT_LEFT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_SHIFT_RIGHT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_BANK_FIELD_OP ARGI_INVALID_OPCODE #define ARGI_BIT_AND_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_BIT_NAND_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_BIT_OR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_BIT_NOR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_BIT_XOR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_BIT_NOT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_FIND_SET_LEFT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_FIND_SET_RIGHT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_DEREF_OF_OP ARGI_LIST1 (ARGI_REFERENCE) +#define ARGI_BIT_OR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_BIT_XOR_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_BREAK_OP ARG_NONE +#define ARGI_BREAK_POINT_OP ARG_NONE +#define ARGI_BUFFER_OP ARGI_INVALID_OPCODE +#define ARGI_BYTE_OP ARGI_INVALID_OPCODE +#define ARGI_BYTELIST_OP ARGI_INVALID_OPCODE +#define ARGI_CONCAT_OP ARGI_LIST3 (ARGI_COMPUTEDATA,ARGI_COMPUTEDATA, ARGI_TARGETREF) #define ARGI_CONCAT_RES_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_BUFFER, ARGI_TARGETREF) -#define ARGI_MOD_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_NOTIFY_OP ARGI_LIST2 (ARGI_DEVICE_REF, ARGI_INTEGER) -#define ARGI_SIZE_OF_OP ARGI_LIST1 (ARGI_DATAOBJECT) -#define ARGI_INDEX_OP ARGI_LIST3 (ARGI_COMPLEXOBJ, ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_MATCH_OP ARGI_LIST6 (ARGI_PACKAGE, ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER) -#define ARGI_CREATE_DWORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) -#define ARGI_CREATE_WORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) -#define ARGI_CREATE_BYTE_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) +#define ARGI_COND_REF_OF_OP ARGI_LIST2 (ARGI_OBJECT_REF, ARGI_TARGETREF) +#define ARGI_CONTINUE_OP ARGI_INVALID_OPCODE +#define ARGI_COPY_OP ARGI_LIST2 (ARGI_ANYTYPE, ARGI_SIMPLE_TARGET) #define ARGI_CREATE_BIT_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) -#define ARGI_TYPE_OP ARGI_LIST1 (ARGI_ANYTYPE) +#define ARGI_CREATE_BYTE_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) +#define ARGI_CREATE_DWORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) +#define ARGI_CREATE_FIELD_OP ARGI_LIST4 (ARGI_BUFFER, ARGI_INTEGER, ARGI_INTEGER, ARGI_REFERENCE) #define ARGI_CREATE_QWORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) +#define ARGI_CREATE_WORD_FIELD_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_REFERENCE) +#define ARGI_DATA_REGION_OP ARGI_LIST3 (ARGI_STRING, ARGI_STRING, ARGI_STRING) +#define ARGI_DEBUG_OP ARG_NONE +#define ARGI_DECREMENT_OP ARGI_LIST1 (ARGI_INTEGER_REF) +#define ARGI_DEREF_OF_OP ARGI_LIST1 (ARGI_REFERENCE) +#define ARGI_DEVICE_OP ARGI_INVALID_OPCODE +#define ARGI_DIVIDE_OP ARGI_LIST4 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF, ARGI_TARGETREF) +#define ARGI_DWORD_OP ARGI_INVALID_OPCODE +#define ARGI_ELSE_OP ARGI_INVALID_OPCODE +#define ARGI_EVENT_OP ARGI_INVALID_OPCODE +#define ARGI_FATAL_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER) +#define ARGI_FIELD_OP ARGI_INVALID_OPCODE +#define ARGI_FIND_SET_LEFT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_FIND_SET_RIGHT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_IF_OP ARGI_INVALID_OPCODE +#define ARGI_INCREMENT_OP ARGI_LIST1 (ARGI_INTEGER_REF) +#define ARGI_INDEX_FIELD_OP ARGI_INVALID_OPCODE +#define ARGI_INDEX_OP ARGI_LIST3 (ARGI_COMPLEXOBJ, ARGI_INTEGER, ARGI_TARGETREF) #define ARGI_LAND_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) -#define ARGI_LOR_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) -#define ARGI_LNOT_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_LEQUAL_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) #define ARGI_LGREATER_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) +#define ARGI_LGREATEREQUAL_OP ARGI_INVALID_OPCODE #define ARGI_LLESS_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) -#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) -#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) -#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) -#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) -#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_FIXED_TARGET) -#define ARGI_COPY_OP ARGI_LIST2 (ARGI_ANYTYPE, ARGI_SIMPLE_TARGET) +#define ARGI_LLESSEQUAL_OP ARGI_INVALID_OPCODE +#define ARGI_LNOT_OP ARGI_LIST1 (ARGI_INTEGER) +#define ARGI_LNOTEQUAL_OP ARGI_INVALID_OPCODE +#define ARGI_LOAD_OP ARGI_LIST2 (ARGI_REGION, ARGI_TARGETREF) +#define ARGI_LOAD_TABLE_OP ARGI_LIST6 (ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_TARGETREF) +#define ARGI_LOCAL0 ARG_NONE +#define ARGI_LOCAL1 ARG_NONE +#define ARGI_LOCAL2 ARG_NONE +#define ARGI_LOCAL3 ARG_NONE +#define ARGI_LOCAL4 ARG_NONE +#define ARGI_LOCAL5 ARG_NONE +#define ARGI_LOCAL6 ARG_NONE +#define ARGI_LOCAL7 ARG_NONE +#define ARGI_LOR_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) +#define ARGI_MATCH_OP ARGI_LIST6 (ARGI_PACKAGE, ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER) +#define ARGI_METHOD_OP ARGI_INVALID_OPCODE +#define ARGI_METHODCALL_OP ARGI_INVALID_OPCODE #define ARGI_MID_OP ARGI_LIST4 (ARGI_BUFFERSTRING,ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_CONTINUE_OP ARGI_INVALID_OPCODE -#define ARGI_IF_OP ARGI_INVALID_OPCODE -#define ARGI_ELSE_OP ARGI_INVALID_OPCODE -#define ARGI_WHILE_OP ARGI_INVALID_OPCODE +#define ARGI_MOD_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_MULTIPLY_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_MUTEX_OP ARGI_INVALID_OPCODE +#define ARGI_NAME_OP ARGI_INVALID_OPCODE +#define ARGI_NAMEDFIELD_OP ARGI_INVALID_OPCODE +#define ARGI_NAMEPATH_OP ARGI_INVALID_OPCODE #define ARGI_NOOP_OP ARG_NONE -#define ARGI_RETURN_OP ARGI_INVALID_OPCODE -#define ARGI_BREAK_OP ARG_NONE -#define ARGI_BREAK_POINT_OP ARG_NONE +#define ARGI_NOTIFY_OP ARGI_LIST2 (ARGI_DEVICE_REF, ARGI_INTEGER) +#define ARGI_ONE_OP ARG_NONE #define ARGI_ONES_OP ARG_NONE -#define ARGI_MUTEX_OP ARGI_INVALID_OPCODE -#define ARGI_EVENT_OP ARGI_INVALID_OPCODE -#define ARGI_COND_REF_OF_OP ARGI_LIST2 (ARGI_OBJECT_REF, ARGI_TARGETREF) -#define ARGI_CREATE_FIELD_OP ARGI_LIST4 (ARGI_BUFFER, ARGI_INTEGER, ARGI_INTEGER, ARGI_REFERENCE) -#define ARGI_LOAD_TABLE_OP ARGI_LIST6 (ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_STRING, ARGI_TARGETREF) -#define ARGI_LOAD_OP ARGI_LIST2 (ARGI_REGION, ARGI_TARGETREF) -#define ARGI_STALL_OP ARGI_LIST1 (ARGI_INTEGER) -#define ARGI_SLEEP_OP ARGI_LIST1 (ARGI_INTEGER) -#define ARGI_ACQUIRE_OP ARGI_LIST2 (ARGI_MUTEX, ARGI_INTEGER) -#define ARGI_SIGNAL_OP ARGI_LIST1 (ARGI_EVENT) -#define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_INTEGER) -#define ARGI_RESET_OP ARGI_LIST1 (ARGI_EVENT) -#define ARGI_RELEASE_OP ARGI_LIST1 (ARGI_MUTEX) -#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF) -#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) -#define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE) -#define ARGI_REVISION_OP ARG_NONE -#define ARGI_DEBUG_OP ARG_NONE -#define ARGI_FATAL_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER) -#define ARGI_REGION_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) -#define ARGI_FIELD_OP ARGI_INVALID_OPCODE -#define ARGI_DEVICE_OP ARGI_INVALID_OPCODE -#define ARGI_PROCESSOR_OP ARGI_INVALID_OPCODE +#define ARGI_PACKAGE_OP ARGI_INVALID_OPCODE #define ARGI_POWER_RES_OP ARGI_INVALID_OPCODE -#define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE -#define ARGI_INDEX_FIELD_OP ARGI_INVALID_OPCODE -#define ARGI_BANK_FIELD_OP ARGI_INVALID_OPCODE -#define ARGI_DATA_REGION_OP ARGI_LIST3 (ARGI_STRING, ARGI_STRING, ARGI_STRING) -#define ARGI_LNOTEQUAL_OP ARGI_INVALID_OPCODE -#define ARGI_LLESSEQUAL_OP ARGI_INVALID_OPCODE -#define ARGI_LGREATEREQUAL_OP ARGI_INVALID_OPCODE -#define ARGI_NAMEPATH_OP ARGI_INVALID_OPCODE -#define ARGI_METHODCALL_OP ARGI_INVALID_OPCODE -#define ARGI_BYTELIST_OP ARGI_INVALID_OPCODE +#define ARGI_PROCESSOR_OP ARGI_INVALID_OPCODE +#define ARGI_QWORD_OP ARGI_INVALID_OPCODE +#define ARGI_REF_OF_OP ARGI_LIST1 (ARGI_OBJECT_REF) +#define ARGI_REGION_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_INTEGER) +#define ARGI_RELEASE_OP ARGI_LIST1 (ARGI_MUTEX) #define ARGI_RESERVEDFIELD_OP ARGI_INVALID_OPCODE -#define ARGI_NAMEDFIELD_OP ARGI_INVALID_OPCODE -#define ARGI_ACCESSFIELD_OP ARGI_INVALID_OPCODE +#define ARGI_RESET_OP ARGI_LIST1 (ARGI_EVENT) +#define ARGI_RETURN_OP ARGI_INVALID_OPCODE +#define ARGI_REVISION_OP ARG_NONE +#define ARGI_SCOPE_OP ARGI_INVALID_OPCODE +#define ARGI_SHIFT_LEFT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_SHIFT_RIGHT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_SIGNAL_OP ARGI_LIST1 (ARGI_EVENT) +#define ARGI_SIZE_OF_OP ARGI_LIST1 (ARGI_DATAOBJECT) +#define ARGI_SLEEP_OP ARGI_LIST1 (ARGI_INTEGER) +#define ARGI_STALL_OP ARGI_LIST1 (ARGI_INTEGER) #define ARGI_STATICSTRING_OP ARGI_INVALID_OPCODE +#define ARGI_STORE_OP ARGI_LIST2 (ARGI_ANYTYPE, ARGI_TARGETREF) +#define ARGI_STRING_OP ARGI_INVALID_OPCODE +#define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF) +#define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE +#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET) +#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_HEX_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_INTEGER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET) +#define ARGI_TO_STRING_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_INTEGER, ARGI_FIXED_TARGET) +#define ARGI_TYPE_OP ARGI_LIST1 (ARGI_ANYTYPE) +#define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE) +#define ARGI_VAR_PACKAGE_OP ARGI_INVALID_OPCODE +#define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_INTEGER) +#define ARGI_WHILE_OP ARGI_INVALID_OPCODE +#define ARGI_WORD_OP ARGI_INVALID_OPCODE +#define ARGI_ZERO_OP ARG_NONE /* @@ -447,143 +449,143 @@ static const acpi_opcode_info aml_op_info[] = { -/* Index Name Parser Args Interpreter Args Flags */ +/* Index Name Parser Args Interpreter Args Class Type Flags */ -/* 00 */ ACPI_OP ("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS ), -/* 01 */ ACPI_OP ("One", ARGP_ONE_OP, ARGI_ONE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS ), -/* 02 */ ACPI_OP ("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED), -/* 03 */ ACPI_OP ("Name", ARGP_NAME_OP, ARGI_NAME_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED), -/* 04 */ ACPI_OP ("Byte_const", ARGP_BYTE_OP, ARGI_BYTE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS ), -/* 05 */ ACPI_OP ("Word_const", ARGP_WORD_OP, ARGI_WORD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS ), -/* 06 */ ACPI_OP ("Dword_const", ARGP_DWORD_OP, ARGI_DWORD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS ), -/* 07 */ ACPI_OP ("String", ARGP_STRING_OP, ARGI_STRING_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS ), -/* 08 */ ACPI_OP ("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED), -/* 09 */ ACPI_OP ("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DATA_TERM| AML_HAS_ARGS), -/* 0A */ ACPI_OP ("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DATA_TERM| AML_HAS_ARGS), -/* 0B */ ACPI_OP ("Method", ARGP_METHOD_OP, ARGI_METHOD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED|AML_DEFER), -/* 0C */ ACPI_OP ("Local0", ARGP_LOCAL0, ARGI_LOCAL0, ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS ), -/* 0D */ ACPI_OP ("Local1", ARGP_LOCAL1, ARGI_LOCAL1, ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS ), -/* 0E */ ACPI_OP ("Local2", ARGP_LOCAL2, ARGI_LOCAL2, ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS ), -/* 0F */ ACPI_OP ("Local3", ARGP_LOCAL3, ARGI_LOCAL3, ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS ), -/* 10 */ ACPI_OP ("Local4", ARGP_LOCAL4, ARGI_LOCAL4, ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS ), -/* 11 */ ACPI_OP ("Local5", ARGP_LOCAL5, ARGI_LOCAL5, ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS ), -/* 12 */ ACPI_OP ("Local6", ARGP_LOCAL6, ARGI_LOCAL6, ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS ), -/* 13 */ ACPI_OP ("Local7", ARGP_LOCAL7, ARGI_LOCAL7, ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS ), -/* 14 */ ACPI_OP ("Arg0", ARGP_ARG0, ARGI_ARG0, ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS ), -/* 15 */ ACPI_OP ("Arg1", ARGP_ARG1, ARGI_ARG1, ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS ), -/* 16 */ ACPI_OP ("Arg2", ARGP_ARG2, ARGI_ARG2, ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS ), -/* 17 */ ACPI_OP ("Arg3", ARGP_ARG3, ARGI_ARG3, ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS ), -/* 18 */ ACPI_OP ("Arg4", ARGP_ARG4, ARGI_ARG4, ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS ), -/* 19 */ ACPI_OP ("Arg5", ARGP_ARG5, ARGI_ARG5, ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS ), -/* 1_a */ ACPI_OP ("Arg6", ARGP_ARG6, ARGI_ARG6, ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS ), -/* 1_b */ ACPI_OP ("Store", ARGP_STORE_OP, ARGI_STORE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 1_c */ ACPI_OP ("Ref_of", ARGP_REF_OF_OP, ARGI_REF_OF_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS), -/* 1_d */ ACPI_OP ("Add", ARGP_ADD_OP, ARGI_ADD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 1_e */ ACPI_OP ("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 1_f */ ACPI_OP ("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 20 */ ACPI_OP ("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS), -/* 21 */ ACPI_OP ("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS), -/* 22 */ ACPI_OP ("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 23 */ ACPI_OP ("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 24 */ ACPI_OP ("Shift_left", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 25 */ ACPI_OP ("Shift_right", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 26 */ ACPI_OP ("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 27 */ ACPI_OP ("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 28 */ ACPI_OP ("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 29 */ ACPI_OP ("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 2_a */ ACPI_OP ("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 2_b */ ACPI_OP ("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 2_c */ ACPI_OP ("Find_set_left_bit", ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 2_d */ ACPI_OP ("Find_set_right_bit", ARGP_FIND_SET_RIGHT_BIT_OP,ARGI_FIND_SET_RIGHT_BIT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 2_e */ ACPI_OP ("Deref_of", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS), -/* 2_f */ ACPI_OP ("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC1| AML_HAS_ARGS), -/* 30 */ ACPI_OP ("Size_of", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS), -/* 31 */ ACPI_OP ("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_TRIADIC| AML_HAS_ARGS), -/* 32 */ ACPI_OP ("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_HEXADIC| AML_HAS_ARGS), -/* 33 */ ACPI_OP ("Create_dWord_field", ARGP_CREATE_DWORD_FIELD_OP,ARGI_CREATE_DWORD_FIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS|AML_NSOBJECT|AML_NSNODE|AML_DEFER|AML_CREATE), -/* 34 */ ACPI_OP ("Create_word_field", ARGP_CREATE_WORD_FIELD_OP, ARGI_CREATE_WORD_FIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS|AML_NSOBJECT|AML_NSNODE|AML_DEFER|AML_CREATE), -/* 35 */ ACPI_OP ("Create_byte_field", ARGP_CREATE_BYTE_FIELD_OP, ARGI_CREATE_BYTE_FIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS|AML_NSOBJECT|AML_NSNODE|AML_DEFER|AML_CREATE), -/* 36 */ ACPI_OP ("Create_bit_field", ARGP_CREATE_BIT_FIELD_OP, ARGI_CREATE_BIT_FIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS|AML_NSOBJECT|AML_NSNODE|AML_DEFER|AML_CREATE), -/* 37 */ ACPI_OP ("Object_type", ARGP_TYPE_OP, ARGI_TYPE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS), -/* 38 */ ACPI_OP ("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS), -/* 39 */ ACPI_OP ("LOr", ARGP_LOR_OP, ARGI_LOR_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS), -/* 3_a */ ACPI_OP ("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS), -/* 3_b */ ACPI_OP ("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS), -/* 3_c */ ACPI_OP ("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS), -/* 3_d */ ACPI_OP ("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS), -/* 3_e */ ACPI_OP ("If", ARGP_IF_OP, ARGI_IF_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_HAS_ARGS), -/* 3_f */ ACPI_OP ("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_HAS_ARGS), -/* 40 */ ACPI_OP ("While", ARGP_WHILE_OP, ARGI_WHILE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_HAS_ARGS), -/* 41 */ ACPI_OP ("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_NO_ARGS ), -/* 42 */ ACPI_OP ("Return", ARGP_RETURN_OP, ARGI_RETURN_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_HAS_ARGS), -/* 43 */ ACPI_OP ("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_NO_ARGS ), -/* 44 */ ACPI_OP ("Break_point", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_NO_ARGS ), -/* 45 */ ACPI_OP ("Ones", ARGP_ONES_OP, ARGI_ONES_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS ), +/* 00 */ ACPI_OP ("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), +/* 01 */ ACPI_OP ("One", ARGP_ONE_OP, ARGI_ONE_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), +/* 02 */ ACPI_OP ("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), +/* 03 */ ACPI_OP ("Name", ARGP_NAME_OP, ARGI_NAME_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), +/* 04 */ ACPI_OP ("Byte_const", ARGP_BYTE_OP, ARGI_BYTE_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0), +/* 05 */ ACPI_OP ("Word_const", ARGP_WORD_OP, ARGI_WORD_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0), +/* 06 */ ACPI_OP ("Dword_const", ARGP_DWORD_OP, ARGI_DWORD_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0), +/* 07 */ ACPI_OP ("String", ARGP_STRING_OP, ARGI_STRING_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0), +/* 08 */ ACPI_OP ("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), +/* 09 */ ACPI_OP ("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS), +/* 0A */ ACPI_OP ("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS), +/* 0B */ ACPI_OP ("Method", ARGP_METHOD_OP, ARGI_METHOD_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER), +/* 0C */ ACPI_OP ("Local0", ARGP_LOCAL0, ARGI_LOCAL0, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), +/* 0D */ ACPI_OP ("Local1", ARGP_LOCAL1, ARGI_LOCAL1, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), +/* 0E */ ACPI_OP ("Local2", ARGP_LOCAL2, ARGI_LOCAL2, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), +/* 0F */ ACPI_OP ("Local3", ARGP_LOCAL3, ARGI_LOCAL3, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), +/* 10 */ ACPI_OP ("Local4", ARGP_LOCAL4, ARGI_LOCAL4, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), +/* 11 */ ACPI_OP ("Local5", ARGP_LOCAL5, ARGI_LOCAL5, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), +/* 12 */ ACPI_OP ("Local6", ARGP_LOCAL6, ARGI_LOCAL6, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), +/* 13 */ ACPI_OP ("Local7", ARGP_LOCAL7, ARGI_LOCAL7, AML_CLASS_ARGUMENT, AML_TYPE_LOCAL_VARIABLE, 0), +/* 14 */ ACPI_OP ("Arg0", ARGP_ARG0, ARGI_ARG0, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), +/* 15 */ ACPI_OP ("Arg1", ARGP_ARG1, ARGI_ARG1, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), +/* 16 */ ACPI_OP ("Arg2", ARGP_ARG2, ARGI_ARG2, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), +/* 17 */ ACPI_OP ("Arg3", ARGP_ARG3, ARGI_ARG3, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), +/* 18 */ ACPI_OP ("Arg4", ARGP_ARG4, ARGI_ARG4, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), +/* 19 */ ACPI_OP ("Arg5", ARGP_ARG5, ARGI_ARG5, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), +/* 1_a */ ACPI_OP ("Arg6", ARGP_ARG6, ARGI_ARG6, AML_CLASS_ARGUMENT, AML_TYPE_METHOD_ARGUMENT, 0), +/* 1_b */ ACPI_OP ("Store", ARGP_STORE_OP, ARGI_STORE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 1_c */ ACPI_OP ("Ref_of", ARGP_REF_OF_OP, ARGI_REF_OF_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), +/* 1_d */ ACPI_OP ("Add", ARGP_ADD_OP, ARGI_ADD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 1_e */ ACPI_OP ("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R), +/* 1_f */ ACPI_OP ("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 20 */ ACPI_OP ("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), +/* 21 */ ACPI_OP ("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), +/* 22 */ ACPI_OP ("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 23 */ ACPI_OP ("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_2T_1R, AML_FLAGS_EXEC_2A_2T_1R), +/* 24 */ ACPI_OP ("Shift_left", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 25 */ ACPI_OP ("Shift_right", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 26 */ ACPI_OP ("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 27 */ ACPI_OP ("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 28 */ ACPI_OP ("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 29 */ ACPI_OP ("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 2_a */ ACPI_OP ("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R | AML_MATH), +/* 2_b */ ACPI_OP ("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 2_c */ ACPI_OP ("Find_set_left_bit", ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 2_d */ ACPI_OP ("Find_set_right_bit", ARGP_FIND_SET_RIGHT_BIT_OP,ARGI_FIND_SET_RIGHT_BIT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 2_e */ ACPI_OP ("Deref_of", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), +/* 2_f */ ACPI_OP ("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R), +/* 30 */ ACPI_OP ("Size_of", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), +/* 31 */ ACPI_OP ("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R), +/* 32 */ ACPI_OP ("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R), +/* 33 */ ACPI_OP ("Create_dWord_field", ARGP_CREATE_DWORD_FIELD_OP,ARGI_CREATE_DWORD_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), +/* 34 */ ACPI_OP ("Create_word_field", ARGP_CREATE_WORD_FIELD_OP, ARGI_CREATE_WORD_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), +/* 35 */ ACPI_OP ("Create_byte_field", ARGP_CREATE_BYTE_FIELD_OP, ARGI_CREATE_BYTE_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), +/* 36 */ ACPI_OP ("Create_bit_field", ARGP_CREATE_BIT_FIELD_OP, ARGI_CREATE_BIT_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), +/* 37 */ ACPI_OP ("Object_type", ARGP_TYPE_OP, ARGI_TYPE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), +/* 38 */ ACPI_OP ("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL), +/* 39 */ ACPI_OP ("LOr", ARGP_LOR_OP, ARGI_LOR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL), +/* 3_a */ ACPI_OP ("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), +/* 3_b */ ACPI_OP ("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL), +/* 3_c */ ACPI_OP ("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL), +/* 3_d */ ACPI_OP ("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL), +/* 3_e */ ACPI_OP ("If", ARGP_IF_OP, ARGI_IF_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), +/* 3_f */ ACPI_OP ("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), +/* 40 */ ACPI_OP ("While", ARGP_WHILE_OP, ARGI_WHILE_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), +/* 41 */ ACPI_OP ("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), +/* 42 */ ACPI_OP ("Return", ARGP_RETURN_OP, ARGI_RETURN_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), +/* 43 */ ACPI_OP ("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), +/* 44 */ ACPI_OP ("Break_point", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), +/* 45 */ ACPI_OP ("Ones", ARGP_ONES_OP, ARGI_ONES_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), /* Prefixed opcodes (Two-byte opcodes with a prefix op) */ -/* 46 */ ACPI_OP ("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED), -/* 47 */ ACPI_OP ("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_NO_ARGS |AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED ), -/* 48 */ ACPI_OP ("Cond_ref_of", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 49 */ ACPI_OP ("Create_field", ARGP_CREATE_FIELD_OP, ARGI_CREATE_FIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS|AML_NSOBJECT|AML_NSNODE|AML_DEFER|AML_FIELD|AML_CREATE), -/* 4_a */ ACPI_OP ("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_RECONFIGURATION| AML_HAS_ARGS), -/* 4_b */ ACPI_OP ("Stall", ARGP_STALL_OP, ARGI_STALL_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS), -/* 4_c */ ACPI_OP ("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS), -/* 4_d */ ACPI_OP ("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_s| AML_HAS_ARGS), -/* 4_e */ ACPI_OP ("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS), -/* 4_f */ ACPI_OP ("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_s| AML_HAS_ARGS), -/* 50 */ ACPI_OP ("Reset", ARGP_RESET_OP, ARGI_RESET_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS), -/* 51 */ ACPI_OP ("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS), -/* 52 */ ACPI_OP ("From_bCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 53 */ ACPI_OP ("To_bCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 54 */ ACPI_OP ("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_RECONFIGURATION| AML_HAS_ARGS), -/* 55 */ ACPI_OP ("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS ), -/* 56 */ ACPI_OP ("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS ), -/* 57 */ ACPI_OP ("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_TRIADIC| AML_HAS_ARGS), -/* 58 */ ACPI_OP ("Op_region", ARGP_REGION_OP, ARGI_REGION_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED|AML_DEFER), -/* 59 */ ACPI_OP ("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_FIELD), -/* 5_a */ ACPI_OP ("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED), -/* 5_b */ ACPI_OP ("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED), -/* 5_c */ ACPI_OP ("Power_resource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED), -/* 5_d */ ACPI_OP ("Thermal_zone", ARGP_THERMAL_ZONE_OP, ARGI_THERMAL_ZONE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED), -/* 5_e */ ACPI_OP ("Index_field", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_FIELD), -/* 5_f */ ACPI_OP ("Bank_field", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_FIELD), +/* 46 */ ACPI_OP ("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), +/* 47 */ ACPI_OP ("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ), +/* 48 */ ACPI_OP ("Cond_ref_of", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 49 */ ACPI_OP ("Create_field", ARGP_CREATE_FIELD_OP, ARGI_CREATE_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_FIELD | AML_CREATE), +/* 4_a */ ACPI_OP ("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_0R, AML_FLAGS_EXEC_1A_1T_0R), +/* 4_b */ ACPI_OP ("Stall", ARGP_STALL_OP, ARGI_STALL_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), +/* 4_c */ ACPI_OP ("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), +/* 4_d */ ACPI_OP ("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R), +/* 4_e */ ACPI_OP ("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), +/* 4_f */ ACPI_OP ("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R), +/* 50 */ ACPI_OP ("Reset", ARGP_RESET_OP, ARGI_RESET_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), +/* 51 */ ACPI_OP ("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), +/* 52 */ ACPI_OP ("From_bCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 53 */ ACPI_OP ("To_bCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 54 */ ACPI_OP ("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), +/* 55 */ ACPI_OP ("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), +/* 56 */ ACPI_OP ("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP, AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, 0), +/* 57 */ ACPI_OP ("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R), +/* 58 */ ACPI_OP ("Op_region", ARGP_REGION_OP, ARGI_REGION_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER), +/* 59 */ ACPI_OP ("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD), +/* 5_a */ ACPI_OP ("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), +/* 5_b */ ACPI_OP ("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), +/* 5_c */ ACPI_OP ("Power_resource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), +/* 5_d */ ACPI_OP ("Thermal_zone", ARGP_THERMAL_ZONE_OP, ARGI_THERMAL_ZONE_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), +/* 5_e */ ACPI_OP ("Index_field", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD), +/* 5_f */ ACPI_OP ("Bank_field", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD), /* Internal opcodes that map to invalid AML opcodes */ -/* 60 */ ACPI_OP ("LNot_equal", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_HAS_ARGS), -/* 61 */ ACPI_OP ("LLess_equal", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_HAS_ARGS), -/* 62 */ ACPI_OP ("LGreater_equal", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_HAS_ARGS), -/* 63 */ ACPI_OP ("[Name_path]", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS|AML_NSOBJECT|AML_NSNODE ), -/* 64 */ ACPI_OP ("[Method_call]", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_CALL| AML_HAS_ARGS|AML_NSOBJECT|AML_NSNODE), -/* 65 */ ACPI_OP ("[Byte_list]", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS ), -/* 66 */ ACPI_OP ("[Reserved_field]", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_NO_ARGS ), -/* 67 */ ACPI_OP ("[Named_field]", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_NO_ARGS|AML_NSOBJECT|AML_NSOPCODE|AML_NSNODE|AML_NAMED ), -/* 68 */ ACPI_OP ("[Access_field]", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_NO_ARGS ), -/* 69 */ ACPI_OP ("[Static_string", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_NO_ARGS ), -/* 6_a */ ACPI_OP ("[Return Value]", ARG_NONE, ARG_NONE, ACPI_OP_TYPE_OPCODE | OPTYPE_RETURN| AML_HAS_ARGS), -/* 6_b */ ACPI_OP ("UNKNOWN_OP!", ARG_NONE, ARG_NONE, ACPI_OP_TYPE_UNKNOWN | OPTYPE_BOGUS| AML_HAS_ARGS), -/* 6_c */ ACPI_OP ("ASCII_ONLY!", ARG_NONE, ARG_NONE, ACPI_OP_TYPE_ASCII | OPTYPE_BOGUS| AML_HAS_ARGS), -/* 6_d */ ACPI_OP ("PREFIX_ONLY!", ARG_NONE, ARG_NONE, ACPI_OP_TYPE_PREFIX | OPTYPE_BOGUS| AML_HAS_ARGS), - - -/* ACPI 2.0 (new) opcodes */ - -/* 6_e */ ACPI_OP ("Qword_const", ARGP_QWORD_OP, ARGI_QWORD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS ), -/* 6_f */ ACPI_OP ("Var_package", ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DATA_TERM| AML_HAS_ARGS|AML_DEFER), -/* 70 */ ACPI_OP ("Concat_res", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 72 */ ACPI_OP ("Create_qWord_field", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS|AML_NSOBJECT|AML_NSNODE|AML_DEFER|AML_CREATE), -/* 73 */ ACPI_OP ("To_buffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 74 */ ACPI_OP ("To_decimal_string", ARGP_TO_DEC_STR_OP, ARGI_TO_DEC_STR_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 75 */ ACPI_OP ("To_hex_string", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 76 */ ACPI_OP ("To_integer", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 77 */ ACPI_OP ("To_string", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS), -/* 78 */ ACPI_OP ("Copy_object", ARGP_COPY_OP, ARGI_COPY_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 79 */ ACPI_OP ("Mid", ARGP_MID_OP, ARGI_MID_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 7_a */ ACPI_OP ("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_NO_ARGS ), -/* 7_b */ ACPI_OP ("Load_table", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), -/* 7_c */ ACPI_OP ("Data_op_region", ARGP_DATA_REGION_OP, ARGI_DATA_REGION_OP, ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS), +/* 60 */ ACPI_OP ("LNot_equal", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS), +/* 61 */ ACPI_OP ("LLess_equal", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS), +/* 62 */ ACPI_OP ("LGreater_equal", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS), +/* 63 */ ACPI_OP ("[Name_path]", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE ), +/* 64 */ ACPI_OP ("[Method_call]", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, AML_CLASS_METHOD_CALL, AML_TYPE_METHOD_CALL, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE), +/* 65 */ ACPI_OP ("[Byte_list]", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0), +/* 66 */ ACPI_OP ("[Reserved_field]", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), +/* 67 */ ACPI_OP ("[Named_field]", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ), +/* 68 */ ACPI_OP ("[Access_field]", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), +/* 69 */ ACPI_OP ("[Static_string", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP, AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), +/* 6_a */ ACPI_OP ("[Return Value]", ARG_NONE, ARG_NONE, AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN, AML_HAS_ARGS | AML_HAS_RETVAL), +/* 6_b */ ACPI_OP ("UNKNOWN_OP!", ARG_NONE, ARG_NONE, AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS), +/* 6_c */ ACPI_OP ("ASCII_ONLY!", ARG_NONE, ARG_NONE, AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS), +/* 6_d */ ACPI_OP ("PREFIX_ONLY!", ARG_NONE, ARG_NONE, AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS), + + +/* ACPI 2.0 opcodes */ + +/* 6_e */ ACPI_OP ("Qword_const", ARGP_QWORD_OP, ARGI_QWORD_OP, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, 0), +/* 6_f */ ACPI_OP ("Var_package", ARGP_VAR_PACKAGE_OP, ARGI_VAR_PACKAGE_OP, AML_CLASS_ARGUMENT, AML_TYPE_DATA_TERM, AML_HAS_ARGS | AML_DEFER), +/* 70 */ ACPI_OP ("Concat_res", ARGP_CONCAT_RES_OP, ARGI_CONCAT_RES_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R), +/* 71 */ ACPI_OP ("Mod", ARGP_MOD_OP, ARGI_MOD_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R), +/* 72 */ ACPI_OP ("Create_qWord_field", ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE), +/* 73 */ ACPI_OP ("To_buffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 74 */ ACPI_OP ("To_decimal_string", ARGP_TO_DEC_STR_OP, ARGI_TO_DEC_STR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 75 */ ACPI_OP ("To_hex_string", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 76 */ ACPI_OP ("To_integer", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 77 */ ACPI_OP ("To_string", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, AML_FLAGS_EXEC_2A_1T_1R), +/* 78 */ ACPI_OP ("Copy_object", ARGP_COPY_OP, ARGI_COPY_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), +/* 79 */ ACPI_OP ("Mid", ARGP_MID_OP, ARGI_MID_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_1T_1R, AML_FLAGS_EXEC_3A_1T_1R), +/* 7_a */ ACPI_OP ("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), +/* 7_b */ ACPI_OP ("Load_table", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R), +/* 7_c */ ACPI_OP ("Data_op_region", ARGP_DATA_REGION_OP, ARGI_DATA_REGION_OP, AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), }; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/parser/psparse.c linux/drivers/acpi/parser/psparse.c --- v2.4.13/linux/drivers/acpi/parser/psparse.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/parser/psparse.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psparse - Parser top level AML parse routines - * $Revision: 96 $ + * $Revision: 104 $ * *****************************************************************************/ @@ -122,10 +122,8 @@ /* Extended opcode */ opcode = (u16) ((opcode << 8) | GET8 (aml)); - aml++; } - /* don't convert bare name to a namepath */ return (opcode); } @@ -133,45 +131,6 @@ /******************************************************************************* * - * FUNCTION: Acpi_ps_create_state - * - * PARAMETERS: Aml - Aml code pointer - * Aml_size - Length of AML code - * - * RETURN: A new parser state object - * - * DESCRIPTION: Create and initialize a new parser state object - * - ******************************************************************************/ - -acpi_parse_state * -acpi_ps_create_state ( - u8 *aml, - u32 aml_size) -{ - acpi_parse_state *parser_state; - - - FUNCTION_TRACE ("Ps_create_state"); - - - parser_state = ACPI_MEM_CALLOCATE (sizeof (acpi_parse_state)); - if (!parser_state) { - return_PTR (NULL); - } - - parser_state->aml = aml; - parser_state->aml_end = aml + aml_size; - parser_state->pkg_end = parser_state->aml_end; - parser_state->aml_start = aml; - - - return_PTR (parser_state); -} - - -/******************************************************************************* - * * FUNCTION: Acpi_ps_find_object * * PARAMETERS: Opcode - Current opcode @@ -192,29 +151,25 @@ acpi_status acpi_ps_find_object ( - u16 opcode, - acpi_parse_object *op, acpi_walk_state *walk_state, acpi_parse_object **out_op) { NATIVE_CHAR *path; - const acpi_opcode_info *op_info; /* We are only interested in opcodes that have an associated name */ - op_info = acpi_ps_get_opcode_info (opcode); - if (!(op_info->flags & AML_NAMED)) { - *out_op = op; + if (!(walk_state->op_info->flags & AML_NAMED)) { + *out_op = walk_state->op; return (AE_OK); } /* Find the name in the parse tree */ - path = acpi_ps_get_next_namestring (walk_state->parser_state); + path = acpi_ps_get_next_namestring (&walk_state->parser_state); - *out_op = acpi_ps_find (acpi_ps_get_parent_scope (walk_state->parser_state), - path, opcode, 1); + *out_op = acpi_ps_find (acpi_ps_get_parent_scope (&walk_state->parser_state), + path, walk_state->opcode, 1); if (!(*out_op)) { return (AE_NOT_FOUND); @@ -247,28 +202,17 @@ #ifndef PARSER_ONLY acpi_parse_object *prev; acpi_parse_object *next; - const acpi_opcode_info *op_info; const acpi_opcode_info *parent_info; - u32 opcode_class; acpi_parse_object *replacement_op = NULL; FUNCTION_TRACE_PTR ("Ps_complete_this_op", op); - op_info = acpi_ps_get_opcode_info (op->opcode); - opcode_class = ACPI_GET_OP_CLASS (op_info); - - /* Delete this op and the subtree below it if asked to */ if (((walk_state->parse_flags & ACPI_PARSE_TREE_MASK) == ACPI_PARSE_DELETE_TREE) && - (opcode_class != OPTYPE_CONSTANT) && - (opcode_class != OPTYPE_LITERAL) && - (opcode_class != OPTYPE_LOCAL_VARIABLE) && - (opcode_class != OPTYPE_METHOD_ARGUMENT) && - (opcode_class != OPTYPE_DATA_TERM) && - (op->opcode != AML_INT_NAMEPATH_OP)) { + (walk_state->op_info->class != AML_CLASS_ARGUMENT)) { /* Make sure that we only delete this subtree */ if (op->parent) { @@ -278,11 +222,12 @@ */ parent_info = acpi_ps_get_opcode_info (op->parent->opcode); - switch (ACPI_GET_OP_CLASS (parent_info)) { - case OPTYPE_CONTROL: /* IF, ELSE, WHILE only */ + switch (parent_info->class) { + case AML_CLASS_CONTROL: /* IF, ELSE, WHILE only */ break; - case OPTYPE_NAMED_OBJECT: /* Scope, method, etc. */ + case AML_CLASS_NAMED_OBJECT: /* Scope, method, etc. */ + case AML_CLASS_CREATE: /* * These opcodes contain Term_arg operands. The current @@ -385,7 +330,7 @@ acpi_parse_object *op, acpi_status callback_status) { - acpi_parse_state *parser_state = walk_state->parser_state; + acpi_parse_state *parser_state = &walk_state->parser_state; acpi_status status = AE_CTRL_PENDING; u8 *start; u32 package_length; @@ -500,13 +445,7 @@ { acpi_status status = AE_OK; acpi_parse_object *op = NULL; /* current op */ - const acpi_opcode_info *op_info; acpi_parse_object *arg = NULL; - acpi_parse2_object *deferred_op; - u32 arg_count; /* push for fixed or var args */ - u32 arg_types = 0; - u32 aml_offset; - u16 opcode; acpi_parse_object pre_op; acpi_parse_state *parser_state; u8 *aml_op_start; @@ -515,7 +454,8 @@ FUNCTION_TRACE_PTR ("Ps_parse_loop", walk_state); - parser_state = walk_state->parser_state; + parser_state = &walk_state->parser_state; + walk_state->arg_types = 0; #ifndef PARSER_ONLY if (walk_state->walk_type & WALK_METHOD_RESTART) { @@ -527,7 +467,7 @@ * was just completed */ if ((parser_state->scope->parse_scope.op) && - ((parser_state->scope->parse_scope.op->opcode == AML_IF_OP) || + ((parser_state->scope->parse_scope.op->opcode == AML_IF_OP) || (parser_state->scope->parse_scope.op->opcode == AML_WHILE_OP)) && (walk_state->control_state) && (walk_state->control_state->common.state == @@ -537,7 +477,8 @@ * A predicate was just completed, get the value of the * predicate and branch based on that value */ - status = acpi_ds_get_predicate_value (walk_state, NULL, TRUE); + walk_state->op = NULL; + status = acpi_ds_get_predicate_value (walk_state, TRUE); if (ACPI_FAILURE (status) && ((status & AE_CODE_MASK) != AE_CODE_CONTROL)) { if (status == AE_AML_NO_RETURN_VALUE) { @@ -554,7 +495,7 @@ status = acpi_ps_next_parse_state (walk_state, op, status); } - acpi_ps_pop_scope (parser_state, &op, &arg_types, &arg_count); + acpi_ps_pop_scope (parser_state, &op, &walk_state->arg_types, &walk_state->arg_count); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped scope, Op=%p\n", op)); } @@ -562,7 +503,7 @@ /* We were in the middle of an op */ op = walk_state->prev_op; - arg_types = walk_state->prev_arg_types; + walk_state->arg_types = walk_state->prev_arg_types; } } #endif @@ -575,8 +516,8 @@ /* Get the next opcode from the AML stream */ aml_op_start = parser_state->aml; - aml_offset = parser_state->aml - parser_state->aml_start; - opcode = acpi_ps_peek_opcode (parser_state); + walk_state->aml_offset = parser_state->aml - parser_state->aml_start; + walk_state->opcode = acpi_ps_peek_opcode (parser_state); /* * First cut to determine what we have found: @@ -584,33 +525,25 @@ * 2) A name string * 3) An unknown/invalid opcode */ - op_info = acpi_ps_get_opcode_info (opcode); - switch (ACPI_GET_OP_TYPE (op_info)) { - case ACPI_OP_TYPE_OPCODE: - - /* Found opcode info, this is a normal opcode */ - - parser_state->aml += acpi_ps_get_opcode_size (opcode); - arg_types = op_info->parse_args; - break; - - case ACPI_OP_TYPE_ASCII: - case ACPI_OP_TYPE_PREFIX: + walk_state->op_info = acpi_ps_get_opcode_info (walk_state->opcode); + switch (walk_state->op_info->class) { + case AML_CLASS_ASCII: + case AML_CLASS_PREFIX: /* * Starts with a valid prefix or ASCII char, this is a name * string. Convert the bare name string to a namepath. */ - opcode = AML_INT_NAMEPATH_OP; - arg_types = ARGP_NAMESTRING; + walk_state->opcode = AML_INT_NAMEPATH_OP; + walk_state->arg_types = ARGP_NAMESTRING; break; - case ACPI_OP_TYPE_UNKNOWN: + case AML_CLASS_UNKNOWN: /* The opcode is unrecognized. Just skip unknown opcodes */ ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Found unknown opcode %lX at AML offset %X, ignoring\n", - opcode, aml_offset)); + "Found unknown opcode %X at AML offset %X, ignoring\n", + walk_state->opcode, walk_state->aml_offset)); DUMP_BUFFER (parser_state->aml, 128); @@ -618,34 +551,54 @@ parser_state->aml++; continue; + + default: + + /* Found opcode info, this is a normal opcode */ + + parser_state->aml += acpi_ps_get_opcode_size (walk_state->opcode); + walk_state->arg_types = walk_state->op_info->parse_args; + break; + } /* Create Op structure and append to parent's argument list */ - if (op_info->flags & AML_NAMED) { + if (walk_state->op_info->flags & AML_NAMED) { pre_op.value.arg = NULL; - pre_op.opcode = opcode; + pre_op.opcode = walk_state->opcode; - while (GET_CURRENT_ARG_TYPE (arg_types) != ARGP_NAME) { + while (GET_CURRENT_ARG_TYPE (walk_state->arg_types) != ARGP_NAME) { arg = acpi_ps_get_next_arg (parser_state, - GET_CURRENT_ARG_TYPE (arg_types), - &arg_count); + GET_CURRENT_ARG_TYPE (walk_state->arg_types), + &walk_state->arg_count); acpi_ps_append_arg (&pre_op, arg); - INCREMENT_ARG_LIST (arg_types); + INCREMENT_ARG_LIST (walk_state->arg_types); } /* We know that this arg is a name, move to next arg */ - INCREMENT_ARG_LIST (arg_types); + INCREMENT_ARG_LIST (walk_state->arg_types); if (walk_state->descending_callback != NULL) { /* * Find the object. This will either insert the object into * the namespace or simply look it up */ - status = walk_state->descending_callback (opcode, NULL, walk_state, &op); + walk_state->op = NULL; + + status = walk_state->descending_callback (walk_state, &op); + + /* TBD: check status here? */ + + if (ACPI_FAILURE (status)) { + ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "During name lookup/catalog, %s\n", + acpi_format_exception (status))); + goto close_this_op; + } + if (op == NULL) { continue; } @@ -665,8 +618,6 @@ if (op->opcode == AML_REGION_OP) { - deferred_op = (acpi_parse2_object *) op; - /* * Defer final parsing of an Operation_region body, * because we don't have enough info in the first pass @@ -679,8 +630,8 @@ * * (Length is unknown until parse of the body complete) */ - deferred_op->data = aml_op_start; - deferred_op->length = 0; + ((acpi_parse2_object * ) op)->data = aml_op_start; + ((acpi_parse2_object * ) op)->length = 0; } } @@ -688,22 +639,20 @@ else { /* Not a named opcode, just allocate Op and append to parent */ - op_info = acpi_ps_get_opcode_info (opcode); - op = acpi_ps_alloc_op (opcode); + walk_state->op_info = acpi_ps_get_opcode_info (walk_state->opcode); + op = acpi_ps_alloc_op (walk_state->opcode); if (!op) { return_ACPI_STATUS (AE_NO_MEMORY); } - if (op_info->flags & AML_CREATE) { + if (walk_state->op_info->flags & AML_CREATE) { /* * Backup to beginning of Create_xXXfield declaration * Body_length is unknown until we parse the body */ - deferred_op = (acpi_parse2_object *) op; - - deferred_op->data = aml_op_start; - deferred_op->length = 0; + ((acpi_parse2_object * ) op)->data = aml_op_start; + ((acpi_parse2_object * ) op)->length = 0; } acpi_ps_append_arg (acpi_ps_get_parent_scope (parser_state), op); @@ -713,7 +662,9 @@ * Find the object. This will either insert the object into * the namespace or simply look it up */ - status = walk_state->descending_callback (opcode, op, walk_state, &op); + walk_state->op = op; + + status = walk_state->descending_callback (walk_state, &op); status = acpi_ps_next_parse_state (walk_state, op, status); if (status == AE_CTRL_PENDING) { status = AE_OK; @@ -726,11 +677,11 @@ } } - op->aml_offset = aml_offset; + op->aml_offset = walk_state->aml_offset; - if (op_info) { + if (walk_state->op_info) { ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, - "Op=%p Opcode=%4.4lX Aml %p Oft=%5.5lX\n", + "Op=%p Opcode=%4.4X Aml %p Oft=%5.5X\n", op, op->opcode, parser_state->aml, op->aml_offset)); } } @@ -738,10 +689,10 @@ /* Start Arg_count at zero because we don't know if there are any args yet */ - arg_count = 0; + walk_state->arg_count = 0; - if (arg_types) /* Are there any arguments that must be processed? */ { + if (walk_state->arg_types) /* Are there any arguments that must be processed? */ { /* get arguments */ switch (op->opcode) { @@ -754,13 +705,13 @@ /* fill in constant or string argument directly */ acpi_ps_get_next_simple_arg (parser_state, - GET_CURRENT_ARG_TYPE (arg_types), op); + GET_CURRENT_ARG_TYPE (walk_state->arg_types), op); break; case AML_INT_NAMEPATH_OP: /* AML_NAMESTRING_ARG */ - acpi_ps_get_next_namepath (parser_state, op, &arg_count, 1); - arg_types = 0; + acpi_ps_get_next_namepath (parser_state, op, &walk_state->arg_count, 1); + walk_state->arg_types = 0; break; @@ -768,32 +719,30 @@ /* Op is not a constant or string, append each argument */ - while (GET_CURRENT_ARG_TYPE (arg_types) && !arg_count) { - aml_offset = parser_state->aml - parser_state->aml_start; + while (GET_CURRENT_ARG_TYPE (walk_state->arg_types) && !walk_state->arg_count) { + walk_state->aml_offset = parser_state->aml - parser_state->aml_start; arg = acpi_ps_get_next_arg (parser_state, - GET_CURRENT_ARG_TYPE (arg_types), - &arg_count); + GET_CURRENT_ARG_TYPE (walk_state->arg_types), + &walk_state->arg_count); if (arg) { - arg->aml_offset = aml_offset; + arg->aml_offset = walk_state->aml_offset; acpi_ps_append_arg (op, arg); } - INCREMENT_ARG_LIST (arg_types); + INCREMENT_ARG_LIST (walk_state->arg_types); } /* For a method, save the length and address of the body */ if (op->opcode == AML_METHOD_OP) { - deferred_op = (acpi_parse2_object *) op; - /* * Skip parsing of control method or opregion body, * because we don't have enough info in the first pass * to parse them correctly. */ - deferred_op->data = parser_state->aml; - deferred_op->length = (u32) (parser_state->pkg_end - + ((acpi_parse2_object * ) op)->data = parser_state->aml; + ((acpi_parse2_object * ) op)->length = (u32) (parser_state->pkg_end - parser_state->aml); /* @@ -802,7 +751,7 @@ * package (We don't know where the end is). */ parser_state->aml = parser_state->pkg_end; - arg_count = 0; + walk_state->arg_count = 0; } break; @@ -813,18 +762,16 @@ /* * Zero Arg_count means that all arguments for this op have been processed */ - if (!arg_count) { + if (!walk_state->arg_count) { /* completed Op, prepare for next */ - op_info = acpi_ps_get_opcode_info (op->opcode); - if (op_info->flags & AML_NAMED) { + walk_state->op_info = acpi_ps_get_opcode_info (op->opcode); + if (walk_state->op_info->flags & AML_NAMED) { if (acpi_gbl_depth) { acpi_gbl_depth--; } if (op->opcode == AML_REGION_OP) { - deferred_op = (acpi_parse2_object *) op; - /* * Skip parsing of control method or opregion body, * because we don't have enough info in the first pass @@ -833,27 +780,29 @@ * Completed parsing an Op_region declaration, we now * know the length. */ - deferred_op->length = (u32) (parser_state->aml - - deferred_op->data); + ((acpi_parse2_object * ) op)->length = (u32) (parser_state->aml - + ((acpi_parse2_object * ) op)->data); } } - if (op_info->flags & AML_CREATE) { + if (walk_state->op_info->flags & AML_CREATE) { /* * Backup to beginning of Create_xXXfield declaration (1 for * Opcode) * * Body_length is unknown until we parse the body */ - deferred_op = (acpi_parse2_object *) op; - deferred_op->length = (u32) (parser_state->aml - - deferred_op->data); + ((acpi_parse2_object * ) op)->length = (u32) (parser_state->aml - + ((acpi_parse2_object * ) op)->data); } /* This op complete, notify the dispatcher */ if (walk_state->ascending_callback != NULL) { - status = walk_state->ascending_callback (walk_state, op); + walk_state->op = op; + walk_state->opcode = op->opcode; + + status = walk_state->ascending_callback (walk_state); status = acpi_ps_next_parse_state (walk_state, op, status); if (status == AE_CTRL_PENDING) { status = AE_OK; @@ -887,16 +836,20 @@ * We are about to transfer to a called method. */ walk_state->prev_op = op; - walk_state->prev_arg_types = arg_types; + walk_state->prev_arg_types = walk_state->arg_types; return_ACPI_STATUS (status); break; case AE_CTRL_END: - acpi_ps_pop_scope (parser_state, &op, &arg_types, &arg_count); + acpi_ps_pop_scope (parser_state, &op, &walk_state->arg_types, &walk_state->arg_count); + + walk_state->op = op; + walk_state->op_info = acpi_ps_get_opcode_info (op->opcode); + walk_state->opcode = op->opcode; - status = walk_state->ascending_callback (walk_state, op); + status = walk_state->ascending_callback (walk_state); status = acpi_ps_next_parse_state (walk_state, op, status); acpi_ps_complete_this_op (walk_state, op); @@ -915,7 +868,7 @@ acpi_ps_complete_this_op (walk_state, op); } - acpi_ps_pop_scope (parser_state, &op, &arg_types, &arg_count); + acpi_ps_pop_scope (parser_state, &op, &walk_state->arg_types, &walk_state->arg_count); } while (op); return_ACPI_STATUS (status); @@ -925,10 +878,10 @@ default: /* All other non-AE_OK status */ if (op == NULL) { - acpi_ps_pop_scope (parser_state, &op, &arg_types, &arg_count); + acpi_ps_pop_scope (parser_state, &op, &walk_state->arg_types, &walk_state->arg_count); } walk_state->prev_op = op; - walk_state->prev_arg_types = arg_types; + walk_state->prev_arg_types = walk_state->arg_types; /* * TEMP: @@ -941,7 +894,7 @@ /* This scope complete? */ if (acpi_ps_has_completed_scope (parser_state)) { - acpi_ps_pop_scope (parser_state, &op, &arg_types, &arg_count); + acpi_ps_pop_scope (parser_state, &op, &walk_state->arg_types, &walk_state->arg_count); ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped scope, Op=%p\n", op)); } @@ -957,7 +910,7 @@ else { /* complex argument, push Op and prepare for argument */ - acpi_ps_push_scope (parser_state, op, arg_types, arg_count); + acpi_ps_push_scope (parser_state, op, walk_state->arg_types, walk_state->arg_count); op = NULL; } @@ -967,14 +920,18 @@ /* * Complete the last Op (if not completed), and clear the scope stack. * It is easily possible to end an AML "package" with an unbounded number - * of open scopes (such as when several AML blocks are closed with + * of open scopes (such as when several ASL blocks are closed with * sequential closing braces). We want to terminate each one cleanly. */ - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Package complete at Op %p\n", op)); + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "AML package complete at Op %p\n", op)); do { if (op) { if (walk_state->ascending_callback != NULL) { - status = walk_state->ascending_callback (walk_state, op); + walk_state->op = op; + walk_state->op_info = acpi_ps_get_opcode_info (op->opcode); + walk_state->opcode = op->opcode; + + status = walk_state->ascending_callback (walk_state); status = acpi_ps_next_parse_state (walk_state, op, status); if (status == AE_CTRL_PENDING) { status = AE_OK; @@ -990,7 +947,7 @@ acpi_ps_complete_this_op (walk_state, op); } - acpi_ps_pop_scope (parser_state, &op, &arg_types, &arg_count); + acpi_ps_pop_scope (parser_state, &op, &walk_state->arg_types, &walk_state->arg_count); } while (op); @@ -1006,7 +963,7 @@ acpi_ps_complete_this_op (walk_state, op); } - acpi_ps_pop_scope (parser_state, &op, &arg_types, &arg_count); + acpi_ps_pop_scope (parser_state, &op, &walk_state->arg_types, &walk_state->arg_count); } while (op); @@ -1032,101 +989,34 @@ acpi_status acpi_ps_parse_aml ( - acpi_parse_object *start_scope, - u8 *aml, - u32 aml_size, - u32 parse_flags, - acpi_namespace_node *method_node, - acpi_operand_object **params, - acpi_operand_object **caller_return_desc, - acpi_parse_downwards descending_callback, - acpi_parse_upwards ascending_callback) + acpi_walk_state *walk_state) { acpi_status status; - acpi_parse_state *parser_state; - acpi_walk_state *walk_state; acpi_walk_list walk_list; acpi_walk_list *prev_walk_list = acpi_gbl_current_walk_list; - acpi_operand_object *return_desc; - acpi_operand_object *mth_desc = NULL; + acpi_walk_state *previous_walk_state; FUNCTION_TRACE ("Ps_parse_aml"); - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Entered with Scope=%p Aml=%p size=%lX\n", - start_scope, aml, aml_size)); - + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Entered with Walk_state=%p Aml=%p size=%X\n", + walk_state, walk_state->parser_state.aml, walk_state->parser_state.aml_size)); - /* Create and initialize a new parser state */ - - parser_state = acpi_ps_create_state (aml, aml_size); - if (!parser_state) { - return_ACPI_STATUS (AE_NO_MEMORY); - } - - acpi_ps_init_scope (parser_state, start_scope); - - if (method_node) { - mth_desc = acpi_ns_get_attached_object (method_node); - } /* Create and initialize a new walk list */ - walk_list.walk_state = NULL; + walk_list.walk_state = NULL; walk_list.acquired_mutex_list.prev = NULL; walk_list.acquired_mutex_list.next = NULL; - walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, parser_state->start_op, - mth_desc, &walk_list); - if (!walk_state) { - status = AE_NO_MEMORY; - goto cleanup; - } + walk_state->walk_list = &walk_list; + acpi_ds_push_walk_state (walk_state, &walk_list); - walk_state->method_node = method_node; - walk_state->parser_state = parser_state; - walk_state->parse_flags = parse_flags; - walk_state->descending_callback = descending_callback; - walk_state->ascending_callback = ascending_callback; /* TBD: [Restructure] TEMP until we pass Walk_state to the interpreter */ acpi_gbl_current_walk_list = &walk_list; - - if (method_node) { - parser_state->start_node = method_node; - walk_state->walk_type = WALK_METHOD; - - /* Push start scope on scope stack and make it current */ - - status = acpi_ds_scope_stack_push (method_node, ACPI_TYPE_METHOD, walk_state); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - - /* Init arguments if this is a control method */ - /* TBD: [Restructure] add walkstate as a param */ - - acpi_ds_method_data_init_args (params, MTH_NUM_ARGS, walk_state); - } - - else { - /* Setup the current scope */ - - parser_state->start_node = parser_state->start_op->node; - if (parser_state->start_node) { - /* Push start scope on scope stack and make it current */ - - status = acpi_ds_scope_stack_push (parser_state->start_node, - parser_state->start_node->type, walk_state); - if (ACPI_FAILURE (status)) { - goto cleanup; - } - - } - } - /* * Execute the walk loop as long as there is a valid Walk State. This * handles nested control method invocations without recursion. @@ -1136,6 +1026,10 @@ status = AE_OK; while (walk_state) { if (ACPI_SUCCESS (status)) { + /* + * The Parse_loop executes AML until the method terminates + * or calls another method. + */ status = acpi_ps_parse_loop (walk_state); } @@ -1165,13 +1059,6 @@ walk_state = acpi_ds_pop_walk_state (&walk_list); - /* Extract return value before we delete Walk_state */ - - return_desc = walk_state->return_desc; - - ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Return_value=%p, State=%p\n", - walk_state->return_desc, walk_state)); - /* Reset the current scope to the beginning of scope stack */ acpi_ds_scope_stack_clear (walk_state); @@ -1186,38 +1073,44 @@ /* Delete this walk state and all linked control states */ - acpi_ps_cleanup_scope (walk_state->parser_state); - ACPI_MEM_FREE (walk_state->parser_state); - acpi_ds_delete_walk_state (walk_state); + acpi_ps_cleanup_scope (&walk_state->parser_state); + + previous_walk_state = walk_state; + + ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Return_value=%p, State=%p\n", + walk_state->return_desc, walk_state)); /* Check if we have restarted a preempted walk */ walk_state = acpi_ds_get_current_walk_state (&walk_list); - if (walk_state && - ACPI_SUCCESS (status)) { - /* There is another walk state, restart it */ + if (walk_state) { + if (ACPI_SUCCESS (status)) { + /* There is another walk state, restart it */ - /* - * If the method returned value is not used by the parent, - * The object is deleted - */ - acpi_ds_restart_control_method (walk_state, return_desc); - walk_state->walk_type |= WALK_METHOD_RESTART; + /* + * If the method returned value is not used by the parent, + * The object is deleted + */ + acpi_ds_restart_control_method (walk_state, previous_walk_state->return_desc); + walk_state->walk_type |= WALK_METHOD_RESTART; + } } /* * Just completed a 1st-level method, save the final internal return * value (if any) */ - else if (caller_return_desc) { - *caller_return_desc = return_desc; /* NULL if no return value */ + else if (previous_walk_state->caller_return_desc) { + *(previous_walk_state->caller_return_desc) = previous_walk_state->return_desc; /* NULL if no return value */ } - else if (return_desc) { + else if (previous_walk_state->return_desc) { /* Caller doesn't want it, must delete it */ - acpi_ut_remove_reference (return_desc); + acpi_ut_remove_reference (previous_walk_state->return_desc); } + + acpi_ds_delete_walk_state (previous_walk_state); } @@ -1225,20 +1118,6 @@ acpi_ex_release_all_mutexes ((acpi_operand_object *) &walk_list.acquired_mutex_list); acpi_gbl_current_walk_list = prev_walk_list; - return_ACPI_STATUS (status); - - -cleanup: - - /* Cleanup */ - - acpi_ds_delete_walk_state (walk_state); - acpi_ps_cleanup_scope (parser_state); - ACPI_MEM_FREE (parser_state); - - acpi_ex_release_all_mutexes ((acpi_operand_object *)&walk_list.acquired_mutex_list); - acpi_gbl_current_walk_list = prev_walk_list; - return_ACPI_STATUS (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/parser/psscope.c linux/drivers/acpi/parser/psscope.c --- v2.4.13/linux/drivers/acpi/parser/psscope.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/parser/psscope.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psscope - Parser scope stack management routines - * $Revision: 29 $ + * $Revision: 30 $ * *****************************************************************************/ @@ -103,6 +103,7 @@ return_ACPI_STATUS (AE_NO_MEMORY); } + scope->common.data_type = ACPI_DESC_TYPE_STATE_RPSCOPE; scope->parse_scope.op = root_op; scope->parse_scope.arg_count = ACPI_VAR_ARGS; scope->parse_scope.arg_end = parser_state->aml_end; @@ -149,6 +150,7 @@ } + scope->common.data_type = ACPI_DESC_TYPE_STATE_PSCOPE; scope->parse_scope.op = op; scope->parse_scope.arg_list = remaining_args; scope->parse_scope.arg_count = arg_count; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/parser/pstree.c linux/drivers/acpi/parser/pstree.c --- v2.4.13/linux/drivers/acpi/parser/pstree.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/parser/pstree.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: pstree - Parser op tree manipulation/traversal/search - * $Revision: 32 $ + * $Revision: 35 $ * *****************************************************************************/ @@ -60,7 +60,7 @@ /* Get the info structure for this opcode */ op_info = acpi_ps_get_opcode_info (op->opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (op_info->class == AML_CLASS_UNKNOWN) { /* Invalid opcode or ASCII character */ return (NULL); @@ -68,7 +68,7 @@ /* Check if this opcode requires argument sub-objects */ - if (!(ACPI_GET_OP_ARGS (op_info))) { + if (!(op_info->flags & AML_HAS_ARGS)) { /* Has no linked argument objects */ return (NULL); @@ -118,15 +118,16 @@ /* Get the info structure for this opcode */ op_info = acpi_ps_get_opcode_info (op->opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (op_info->class == AML_CLASS_UNKNOWN) { /* Invalid opcode */ + REPORT_ERROR (("Ps_append_arg: Invalid AML Opcode: 0x%2.2X\n", op->opcode)); return; } /* Check if this opcode requires argument sub-objects */ - if (!(ACPI_GET_OP_ARGS (op_info))) { + if (!(op_info->flags & AML_HAS_ARGS)) { /* Has no linked argument objects */ return; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/parser/psutils.c linux/drivers/acpi/parser/psutils.c --- v2.4.13/linux/drivers/acpi/parser/psutils.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/parser/psutils.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psutils - Parser miscellaneous utilities (Parser only) - * $Revision: 43 $ + * $Revision: 44 $ * *****************************************************************************/ @@ -34,8 +34,8 @@ #define PARSEOP_GENERIC 0x01 #define PARSEOP_NAMED 0x02 -#define PARSEOP_DEFERRED 0x03 -#define PARSEOP_BYTELIST 0x04 +#define PARSEOP_DEFERRED 0x04 +#define PARSEOP_BYTELIST 0x08 #define PARSEOP_IN_CACHE 0x80 diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/parser/pswalk.c linux/drivers/acpi/parser/pswalk.c --- v2.4.13/linux/drivers/acpi/parser/pswalk.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/parser/pswalk.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: pswalk - Parser routines to walk parsed op tree(s) - * $Revision: 56 $ + * $Revision: 58 $ * *****************************************************************************/ @@ -88,7 +88,11 @@ next = op->next; parent = op->parent; - status = ascending_callback (walk_state, op); + walk_state->op = op; + walk_state->op_info = acpi_ps_get_opcode_info (op->opcode); + walk_state->opcode = op->opcode; + + status = ascending_callback (walk_state); /* * If we are back to the starting point, the walk is complete. @@ -144,7 +148,11 @@ grand_parent = parent->parent; next = parent->next; - status = ascending_callback (walk_state, parent); + walk_state->op = parent; + walk_state->op_info = acpi_ps_get_opcode_info (parent->opcode); + walk_state->opcode = parent->opcode; + + status = ascending_callback (walk_state); /* * If we are back to the starting point, the walk is complete. @@ -206,11 +214,10 @@ static acpi_status acpi_ps_delete_completed_op ( - acpi_walk_state *state, - acpi_parse_object *op) + acpi_walk_state *walk_state) { - acpi_ps_free_op (op); + acpi_ps_free_op (walk_state->op); return (AE_OK); } @@ -253,7 +260,6 @@ return_VOID; } - walk_state->parser_state = NULL; walk_state->parse_flags = 0; walk_state->descending_callback = NULL; walk_state->ascending_callback = NULL; diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/parser/psxface.c linux/drivers/acpi/parser/psxface.c --- v2.4.13/linux/drivers/acpi/parser/psxface.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/parser/psxface.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: psxface - Parser external interfaces - * $Revision: 47 $ + * $Revision: 52 $ * *****************************************************************************/ @@ -64,6 +64,7 @@ acpi_operand_object *obj_desc; u32 i; acpi_parse_object *op; + acpi_walk_state *walk_state; FUNCTION_TRACE ("Psx_execute"); @@ -98,11 +99,11 @@ } /* - * Perform the first pass parse of the method to enter any + * 1) Perform the first pass parse of the method to enter any * named objects that it creates into the namespace */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "**** Begin Method Execution **** Entry=%p obj=%p\n", + "**** Begin Method Parse **** Entry=%p obj=%p\n", method_node, obj_desc)); /* Create and init a Root Node */ @@ -112,13 +113,34 @@ return_ACPI_STATUS (AE_NO_MEMORY); } - status = acpi_ps_parse_aml (op, obj_desc->method.pcode, - obj_desc->method.pcode_length, - ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE, - method_node, params, return_obj_desc, - acpi_ds_load1_begin_op, acpi_ds_load1_end_op); + /* Create and initialize a new walk state */ + + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, + NULL, NULL, NULL); + if (!walk_state) { + return_ACPI_STATUS (AE_NO_MEMORY); + } + + status = acpi_ds_init_aml_walk (walk_state, op, method_node, obj_desc->method.aml_start, + obj_desc->method.aml_length, NULL, NULL, 1); + if (ACPI_FAILURE (status)) { + /* TBD: delete walk state */ + return_ACPI_STATUS (status); + } + + /* Parse the AML */ + + status = acpi_ps_parse_aml (walk_state); acpi_ps_delete_parse_tree (op); + + /* + * 2) Execute the method. Performs second pass parse simultaneously + */ + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, + "**** Begin Method Execution **** Entry=%p obj=%p\n", + method_node, obj_desc)); + /* Create and init a Root Node */ op = acpi_ps_alloc_op (AML_SCOPE_OP); @@ -126,20 +148,30 @@ return_ACPI_STATUS (AE_NO_MEMORY); } - /* Init new op with the method name and pointer back to the NS node */ acpi_ps_set_name (op, method_node->name); op->node = method_node; + /* Create and initialize a new walk state */ + + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, + NULL, NULL, NULL); + if (!walk_state) { + return_ACPI_STATUS (AE_NO_MEMORY); + } + + status = acpi_ds_init_aml_walk (walk_state, op, method_node, obj_desc->method.aml_start, + obj_desc->method.aml_length, params, return_obj_desc, 3); + if (ACPI_FAILURE (status)) { + /* TBD: delete walk state */ + return_ACPI_STATUS (status); + } + /* * The walk of the parse tree is where we actually execute the method */ - status = acpi_ps_parse_aml (op, obj_desc->method.pcode, - obj_desc->method.pcode_length, - ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE, - method_node, params, return_obj_desc, - acpi_ds_exec_begin_op, acpi_ds_exec_end_op); + status = acpi_ps_parse_aml (walk_state); acpi_ps_delete_parse_tree (op); if (params) { @@ -151,12 +183,18 @@ } + if (ACPI_FAILURE (status)) { + DUMP_PATHNAME (method_node, "Ps_execute: method failed -", + ACPI_LV_ERROR, _COMPONENT); + } + + /* * If the method has returned an object, signal this to the caller with * a control exception code */ if (*return_obj_desc) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Method returned Obj_desc=%X\n", + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Method returned Obj_desc=%p\n", *return_obj_desc)); DUMP_STACK_ENTRY (*return_obj_desc); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/resources/rsutils.c linux/drivers/acpi/resources/rsutils.c --- v2.4.13/linux/drivers/acpi/resources/rsutils.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/resources/rsutils.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsutils - Utilities for the resource manager - * $Revision: 22 $ + * $Revision: 23 $ * ******************************************************************************/ @@ -384,7 +384,6 @@ */ cleanup: - ACPI_MEM_FREE (byte_stream); return_ACPI_STATUS (status); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/resources/rsxface.c linux/drivers/acpi/resources/rsxface.c --- v2.4.13/linux/drivers/acpi/resources/rsxface.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/resources/rsxface.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: rsxface - Public interfaces to the resource manager - * $Revision: 14 $ + * $Revision: 15 $ * ******************************************************************************/ @@ -67,13 +67,6 @@ FUNCTION_TRACE ("Acpi_get_irq_routing_table "); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* * Must have a valid handle and buffer, So we have to have a handle * and a return buffer structure, and if there is a non-zero buffer length @@ -126,13 +119,6 @@ FUNCTION_TRACE ("Acpi_get_current_resources"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* * Must have a valid handle and buffer, So we have to have a handle * and a return buffer structure, and if there is a non-zero buffer length @@ -182,13 +168,6 @@ FUNCTION_TRACE ("Acpi_get_possible_resources"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* * Must have a valid handle and buffer, So we have to have a handle * and a return buffer structure, and if there is a non-zero buffer length @@ -234,13 +213,6 @@ FUNCTION_TRACE ("Acpi_set_current_resources"); - - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } /* * Must have a valid handle and buffer diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/tables/tbconvrt.c linux/drivers/acpi/tables/tbconvrt.c --- v2.4.13/linux/drivers/acpi/tables/tbconvrt.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/tables/tbconvrt.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbconvrt - ACPI Table conversion utilities - * $Revision: 27 $ + * $Revision: 28 $ * *****************************************************************************/ @@ -66,7 +66,7 @@ else #endif { - pointer_size = sizeof (UINT64); + pointer_size = sizeof (u64); } /* @@ -109,7 +109,7 @@ /* Compute size of the converted XSDT */ - table_size = (*number_of_tables * sizeof (UINT64)) + sizeof (acpi_table_header); + table_size = (*number_of_tables * sizeof (u64)) + sizeof (acpi_table_header); /* Allocate an XSDT */ @@ -239,7 +239,7 @@ FADT2->sci_int = FADT71->sci_int; FADT2->acpi_enable = FADT71->acpi_enable; FADT2->acpi_disable = FADT71->acpi_disable; - FADT2->S4_bios_req = FADT71->S4_bios_req; + FADT2->S4bios_req = FADT71->S4bios_req; FADT2->plvl2_lat = FADT71->plvl2_lat; FADT2->plvl3_lat = FADT71->plvl3_lat; FADT2->day_alrm = FADT71->day_alrm; @@ -476,7 +476,7 @@ /* Dump the entire FADT */ ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, - "Hex dump of common internal FADT, size %ld (%lX)\n", + "Hex dump of common internal FADT, size %d (%X)\n", acpi_gbl_FADT->header.length, acpi_gbl_FADT->header.length)); DUMP_BUFFER ((u8 *) (acpi_gbl_FADT), acpi_gbl_FADT->header.length); @@ -540,7 +540,7 @@ FACS1 = (facs_descriptor_rev1 *) acpi_gbl_FACS; common_facs->global_lock = &(FACS1->global_lock); - common_facs->firmware_waking_vector = (UINT64 *) &FACS1->firmware_waking_vector; + common_facs->firmware_waking_vector = (u64 *) &FACS1->firmware_waking_vector; common_facs->vector_width = 32; #endif diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/tables/tbget.c linux/drivers/acpi/tables/tbget.c --- v2.4.13/linux/drivers/acpi/tables/tbget.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/tables/tbget.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbget - ACPI Table get* routines - * $Revision: 55 $ + * $Revision: 56 $ * *****************************************************************************/ @@ -617,7 +617,7 @@ * Get the RSDT from the RSDP */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "RSDP located at %p, RSDT physical=%8.8lX%8.8lX \n", + "RSDP located at %p, RSDT physical=%8.8X%8.8X \n", acpi_gbl_RSDP, HIDWORD(acpi_gbl_RSDP->rsdt_physical_address), LODWORD(acpi_gbl_RSDP->rsdt_physical_address))); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/tables/tbinstal.c linux/drivers/acpi/tables/tbinstal.c --- v2.4.13/linux/drivers/acpi/tables/tbinstal.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/tables/tbinstal.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbinstal - ACPI table installation and removal - * $Revision: 42 $ + * $Revision: 45 $ * *****************************************************************************/ @@ -142,7 +142,7 @@ status = acpi_gbl_acpi_table_data[i].status; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Found %4.4s\n", - acpi_gbl_acpi_table_data[i].signature)); + (char*)acpi_gbl_acpi_table_data[i].signature)); break; } } @@ -266,7 +266,7 @@ table_desc->base_pointer = table_info->base_pointer; table_desc->length = table_info->length; table_desc->allocation = table_info->allocation; - table_desc->aml_pointer = (u8 *) (table_desc->pointer + 1), + table_desc->aml_start = (u8 *) (table_desc->pointer + 1), table_desc->aml_length = (u32) (table_desc->length - (u32) sizeof (acpi_table_header)); table_desc->table_id = acpi_ut_allocate_owner_id (OWNER_TYPE_TABLE); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/tables/tbutils.c linux/drivers/acpi/tables/tbutils.c --- v2.4.13/linux/drivers/acpi/tables/tbutils.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/tables/tbutils.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbutils - Table manipulation utilities - * $Revision: 40 $ + * $Revision: 42 $ * *****************************************************************************/ @@ -196,10 +196,10 @@ MOVE_UNALIGNED32_TO_32 (&signature, &table_header->signature); if (!acpi_ut_valid_acpi_name (signature)) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "Table signature at %p [%X] has invalid characters\n", + "Table signature at %p [%p] has invalid characters\n", table_header, &signature)); - REPORT_WARNING (("Invalid table signature %4.4s found\n", &signature)); + REPORT_WARNING (("Invalid table signature %4.4s found\n", (char*)&signature)); DUMP_BUFFER (table_header, sizeof (acpi_table_header)); return (AE_BAD_SIGNATURE); } @@ -210,7 +210,7 @@ if (table_header->length < sizeof (acpi_table_header)) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid length in table header %p name %4.4s\n", - table_header, &signature)); + table_header, (char*)&signature)); REPORT_WARNING (("Invalid table header length found\n")); DUMP_BUFFER (table_header, sizeof (acpi_table_header)); @@ -334,7 +334,7 @@ if (checksum) { REPORT_WARNING (("Invalid checksum (%X) in table %4.4s\n", - checksum, &table_header->signature)); + checksum, (char*)&table_header->signature)); status = AE_BAD_CHECKSUM; } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/tables/tbxface.c linux/drivers/acpi/tables/tbxface.c --- v2.4.13/linux/drivers/acpi/tables/tbxface.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/tables/tbxface.c Wed Oct 24 14:06:22 2001 @@ -2,7 +2,7 @@ * * Module Name: tbxface - Public interfaces to the ACPI subsystem * ACPI table oriented interfaces - * $Revision: 43 $ + * $Revision: 45 $ * *****************************************************************************/ @@ -59,14 +59,6 @@ FUNCTION_TRACE ("Acpi_load_tables"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - - /* Get the RSDP */ status = acpi_os_get_root_pointer (ACPI_LOGICAL_ADDRESSING, @@ -154,13 +146,6 @@ FUNCTION_TRACE ("Acpi_load_table"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - if (!table_ptr) { return_ACPI_STATUS (AE_BAD_PARAMETER); } @@ -213,19 +198,11 @@ acpi_table_type table_type) { acpi_table_desc *list_head; - acpi_status status; FUNCTION_TRACE ("Acpi_unload_table"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Parameter validation */ if (table_type > ACPI_TABLE_MAX) { @@ -289,13 +266,6 @@ FUNCTION_TRACE ("Acpi_get_table_header"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - if ((instance == 0) || (table_type == ACPI_TABLE_RSDP) || (!out_table_header)) { @@ -371,13 +341,6 @@ FUNCTION_TRACE ("Acpi_get_table"); - - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } /* * If we have a buffer, we must have a length too diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/tables/tbxfroot.c linux/drivers/acpi/tables/tbxfroot.c --- v2.4.13/linux/drivers/acpi/tables/tbxfroot.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/tables/tbxfroot.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbxfroot - Find the root ACPI table (RSDT) - * $Revision: 49 $ + * $Revision: 52 $ * *****************************************************************************/ @@ -152,7 +152,7 @@ { u8 *table_ptr; u8 *mem_rover; - UINT64 phys_addr; + u64 phys_addr; acpi_status status = AE_OK; @@ -277,10 +277,10 @@ acpi_table_header **table_pointer) { ACPI_PHYSICAL_ADDRESS physical_address; - acpi_table_header *rsdt_ptr; + acpi_table_header *rsdt_ptr = NULL; acpi_table_header *table_ptr; acpi_status status; - u32 rsdt_size; + u32 rsdt_size = 0; u32 table_size; u32 table_count; u32 i; @@ -304,18 +304,49 @@ return_ACPI_STATUS (AE_BAD_PARAMETER); } - /* Get the RSDP */ + if (!acpi_gbl_RSDP) { + /* Get the RSDP */ - status = acpi_os_get_root_pointer (flags, &physical_address); - if (ACPI_FAILURE (status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "RSDP not found\n")); - return_ACPI_STATUS (AE_NO_ACPI_TABLES); + status = acpi_os_get_root_pointer (flags, &physical_address); + if (ACPI_FAILURE (status)) { + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "RSDP not found\n")); + return_ACPI_STATUS (AE_NO_ACPI_TABLES); + } + + /* Map and validate the RSDP */ + + if ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING) { + status = acpi_os_map_memory (physical_address, sizeof (RSDP_DESCRIPTOR), + (void **) &acpi_gbl_RSDP); + if (ACPI_FAILURE (status)) { + return_ACPI_STATUS (status); + } + } + else { + acpi_gbl_RSDP = (void *) (NATIVE_UINT) physical_address; + } + + /* + * The signature and checksum must both be correct + */ + if (STRNCMP ((NATIVE_CHAR *) acpi_gbl_RSDP, RSDP_SIG, sizeof (RSDP_SIG)-1) != 0) { + /* Nope, BAD Signature */ + + status = AE_BAD_SIGNATURE; + goto cleanup; + } + + if (acpi_tb_checksum (acpi_gbl_RSDP, RSDP_CHECKSUM_LENGTH) != 0) { + /* Nope, BAD Checksum */ + + status = AE_BAD_CHECKSUM; + goto cleanup; + } } - acpi_gbl_RSDP = (RSDP_DESCRIPTOR *) (ACPI_TBLPTR) physical_address; ACPI_DEBUG_PRINT ((ACPI_DB_INFO, - "RSDP located at %p, RSDT physical=%8.8lX%8.8lX \n", + "RSDP located at %p, RSDT physical=%8.8X%8.8X \n", acpi_gbl_RSDP, HIDWORD(acpi_gbl_RSDP->rsdt_physical_address), LODWORD(acpi_gbl_RSDP->rsdt_physical_address))); @@ -377,7 +408,8 @@ /* Delete table mapping if using virtual addressing */ - if (table_size) { + if ((table_size) && + ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING)) { acpi_os_unmap_memory (table_ptr, table_size); } } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utalloc.c linux/drivers/acpi/utilities/utalloc.c --- v2.4.13/linux/drivers/acpi/utilities/utalloc.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/utalloc.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utalloc - local cache and memory allocation routines - * $Revision: 100 $ + * $Revision: 106 $ * *****************************************************************************/ @@ -75,6 +75,7 @@ /* Mark the object as cached */ MEMSET (object, 0xCA, cache_info->object_size); + ((acpi_operand_object *) object)->common.data_type = ACPI_CACHED_OBJECT; /* Put the object at the head of the cache list */ @@ -200,14 +201,14 @@ * Each memory allocation is tracked via a doubly linked list. Each * element contains the caller's component, module name, function name, and * line number. Acpi_ut_allocate and Acpi_ut_callocate call - * Acpi_ut_add_element_to_alloc_list to add an element to the list; deletion + * Acpi_ut_track_allocation to add an element to the list; deletion * occurs in the body of Acpi_ut_free. */ /******************************************************************************* * - * FUNCTION: Acpi_ut_search_alloc_list + * FUNCTION: Acpi_ut_find_allocation * * PARAMETERS: Address - Address of allocated memory * @@ -217,12 +218,12 @@ * ******************************************************************************/ -ACPI_DEBUG_MEM_BLOCK * -acpi_ut_search_alloc_list ( +acpi_debug_mem_block * +acpi_ut_find_allocation ( u32 list_id, void *address) { - ACPI_DEBUG_MEM_BLOCK *element; + acpi_debug_mem_block *element; FUNCTION_ENTRY (); @@ -250,7 +251,7 @@ /******************************************************************************* * - * FUNCTION: Acpi_ut_add_element_to_alloc_list + * FUNCTION: Acpi_ut_track_allocation * * PARAMETERS: Address - Address of allocated memory * Size - Size of the allocation @@ -266,9 +267,9 @@ ******************************************************************************/ acpi_status -acpi_ut_add_element_to_alloc_list ( +acpi_ut_track_allocation ( u32 list_id, - ACPI_DEBUG_MEM_BLOCK *address, + acpi_debug_mem_block *address, u32 size, u8 alloc_type, u32 component, @@ -276,11 +277,11 @@ u32 line) { ACPI_MEMORY_LIST *mem_list; - ACPI_DEBUG_MEM_BLOCK *element; + acpi_debug_mem_block *element; acpi_status status = AE_OK; - FUNCTION_TRACE_PTR ("Ut_add_element_to_alloc_list", address); + FUNCTION_TRACE_PTR ("Ut_track_allocation", address); if (list_id > ACPI_MEM_LIST_MAX) { @@ -295,9 +296,9 @@ * This will catch several kinds of problems. */ - element = acpi_ut_search_alloc_list (list_id, address); + element = acpi_ut_find_allocation (list_id, address); if (element) { - REPORT_ERROR (("Ut_add_element_to_alloc_list: Address already present in list! (%p)\n", + REPORT_ERROR (("Ut_track_allocation: Address already present in list! (%p)\n", address)); ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Element %p Address %p\n", element, address)); @@ -317,7 +318,7 @@ /* Insert at list head */ if (mem_list->list_head) { - ((ACPI_DEBUG_MEM_BLOCK *)(mem_list->list_head))->previous = address; + ((acpi_debug_mem_block *)(mem_list->list_head))->previous = address; } address->next = mem_list->list_head; @@ -334,7 +335,7 @@ /******************************************************************************* * - * FUNCTION: Acpi_ut_delete_element_from_alloc_list + * FUNCTION: Acpi_ut_remove_allocation * * PARAMETERS: Address - Address of allocated memory * Component - Component type of caller @@ -348,9 +349,9 @@ ******************************************************************************/ acpi_status -acpi_ut_delete_element_from_alloc_list ( +acpi_ut_remove_allocation ( u32 list_id, - ACPI_DEBUG_MEM_BLOCK *address, + acpi_debug_mem_block *address, u32 component, NATIVE_CHAR *module, u32 line) @@ -358,7 +359,7 @@ ACPI_MEMORY_LIST *mem_list; - FUNCTION_TRACE ("Ut_delete_element_from_alloc_list"); + FUNCTION_TRACE ("Ut_remove_allocation"); if (list_id > ACPI_MEM_LIST_MAX) { @@ -370,7 +371,7 @@ /* No allocations! */ _REPORT_ERROR (module, line, component, - ("Ut_delete_element_from_alloc_list: Empty allocation list, nothing to free!\n")); + ("Ut_remove_allocation: Empty allocation list, nothing to free!\n")); return_ACPI_STATUS (AE_OK); } @@ -429,34 +430,34 @@ ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Current allocations", Mem_list->Current_count, - ROUND_UP_TO_1_k (Mem_list->Current_size))); + ROUND_UP_TO_1K (Mem_list->Current_size))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Max concurrent allocations", Mem_list->Max_concurrent_count, - ROUND_UP_TO_1_k (Mem_list->Max_concurrent_size))); + ROUND_UP_TO_1K (Mem_list->Max_concurrent_size))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Total (all) internal objects", Running_object_count, - ROUND_UP_TO_1_k (Running_object_size))); + ROUND_UP_TO_1K (Running_object_size))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Total (all) allocations", Running_alloc_count, - ROUND_UP_TO_1_k (Running_alloc_size))); + ROUND_UP_TO_1K (Running_alloc_size))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Current Nodes", Acpi_gbl_Current_node_count, - ROUND_UP_TO_1_k (Acpi_gbl_Current_node_size))); + ROUND_UP_TO_1K (Acpi_gbl_Current_node_size))); ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES, ("%30s: %4d (%3d Kb)\n", "Max Nodes", Acpi_gbl_Max_concurrent_node_count, - ROUND_UP_TO_1_k ((Acpi_gbl_Max_concurrent_node_count * sizeof (acpi_namespace_node))))); + ROUND_UP_TO_1K ((Acpi_gbl_Max_concurrent_node_count * sizeof (acpi_namespace_node))))); */ return_VOID; } @@ -464,7 +465,7 @@ /******************************************************************************* * - * FUNCTION: Acpi_ut_dump_current_allocations + * FUNCTION: Acpi_ut_dump_allocations * * PARAMETERS: Component - Component(s) to dump info for. * Module - Module to dump info for. NULL means all. @@ -476,20 +477,20 @@ ******************************************************************************/ void -acpi_ut_dump_current_allocations ( +acpi_ut_dump_allocations ( u32 component, NATIVE_CHAR *module) { - ACPI_DEBUG_MEM_BLOCK *element; + acpi_debug_mem_block *element; u32 i; - FUNCTION_TRACE ("Ut_dump_current_allocations"); + FUNCTION_TRACE ("Ut_dump_allocations"); element = acpi_gbl_memory_lists[0].list_head; if (element == NULL) { - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, + ACPI_DEBUG_PRINT ((ACPI_DB_OK, "No outstanding allocations.\n")); return_VOID; } @@ -500,46 +501,89 @@ */ acpi_ut_acquire_mutex (ACPI_MTX_MEMORY); - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, + ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Outstanding allocations:\n")); for (i = 1; ; i++) /* Just a counter */ { if ((element->component & component) && ((module == NULL) || (0 == STRCMP (module, element->module)))) { - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, - "%p Len %04lX %9.9s-%ld", - &element->user_space, element->size, element->module, - element->line)); - - /* Most of the elements will be internal objects. */ - - switch (((acpi_operand_object *) - (&element->user_space))->common.data_type) { - case ACPI_DESC_TYPE_INTERNAL: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, - " Obj_type %s", - acpi_ut_get_type_name (((acpi_operand_object *)(&element->user_space))->common.type))); - break; - - case ACPI_DESC_TYPE_PARSER: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, - " Parse_obj Opcode %04X", - ((acpi_parse_object *)(&element->user_space))->opcode)); - break; - - case ACPI_DESC_TYPE_NAMED: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, - " Node %4.4s", - &((acpi_namespace_node *)(&element->user_space))->name)); - break; - - case ACPI_DESC_TYPE_STATE: - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, - " State_obj")); - break; - } + if (((acpi_operand_object *)(&element->user_space))->common.type != ACPI_CACHED_OBJECT) { + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + "%p Len %04X %9.9s-%d", + &element->user_space, element->size, element->module, + element->line)); + + /* Most of the elements will be internal objects. */ + + switch (((acpi_operand_object *) + (&element->user_space))->common.data_type) { + case ACPI_DESC_TYPE_INTERNAL: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " Obj_type %12.12s R%d", + acpi_ut_get_type_name (((acpi_operand_object *)(&element->user_space))->common.type), + ((acpi_operand_object *)(&element->user_space))->common.reference_count)); + break; + + case ACPI_DESC_TYPE_PARSER: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " Parse_obj Opcode %04X", + ((acpi_parse_object *)(&element->user_space))->opcode)); + break; + + case ACPI_DESC_TYPE_NAMED: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " Node %4.4s", + (char*)&((acpi_namespace_node *)(&element->user_space))->name)); + break; + + case ACPI_DESC_TYPE_STATE: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " Untyped State_obj")); + break; + + case ACPI_DESC_TYPE_STATE_UPDATE: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " UPDATE State_obj")); + break; + + case ACPI_DESC_TYPE_STATE_PACKAGE: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " PACKAGE State_obj")); + break; + + case ACPI_DESC_TYPE_STATE_CONTROL: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " CONTROL State_obj")); + break; + + case ACPI_DESC_TYPE_STATE_RPSCOPE: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " ROOT-PARSE-SCOPE State_obj")); + break; + + case ACPI_DESC_TYPE_STATE_PSCOPE: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " PARSE-SCOPE State_obj")); + break; + + case ACPI_DESC_TYPE_STATE_WSCOPE: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " WALK-SCOPE State_obj")); + break; + + case ACPI_DESC_TYPE_STATE_RESULT: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " RESULT State_obj")); + break; + + case ACPI_DESC_TYPE_STATE_NOTIFY: + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, + " NOTIFY State_obj")); + break; + } - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ALLOCATIONS, "\n")); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OK, "\n")); + } } if (element->next == NULL) { @@ -551,7 +595,7 @@ acpi_ut_release_mutex (ACPI_MTX_MEMORY); - ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, + ACPI_DEBUG_PRINT ((ACPI_DB_OK, "Total number of unfreed allocations = %d(%X)\n", i,i)); @@ -582,7 +626,7 @@ NATIVE_CHAR *module, u32 line) { - ACPI_DEBUG_MEM_BLOCK *address; + acpi_debug_mem_block *address; acpi_status status; @@ -597,7 +641,7 @@ size = 1; } - address = acpi_os_allocate (size + sizeof (ACPI_DEBUG_MEM_BLOCK)); + address = acpi_os_allocate (size + sizeof (acpi_debug_mem_block)); if (!address) { /* Report allocation error */ @@ -607,7 +651,7 @@ return_PTR (NULL); } - status = acpi_ut_add_element_to_alloc_list (ACPI_MEM_LIST_GLOBAL, address, size, + status = acpi_ut_track_allocation (ACPI_MEM_LIST_GLOBAL, address, size, MEM_MALLOC, component, module, line); if (ACPI_FAILURE (status)) { acpi_os_free (address); @@ -645,7 +689,7 @@ NATIVE_CHAR *module, u32 line) { - ACPI_DEBUG_MEM_BLOCK *address; + acpi_debug_mem_block *address; acpi_status status; @@ -661,7 +705,7 @@ } - address = acpi_os_callocate (size + sizeof (ACPI_DEBUG_MEM_BLOCK)); + address = acpi_os_callocate (size + sizeof (acpi_debug_mem_block)); if (!address) { /* Report allocation error */ @@ -670,7 +714,7 @@ return_PTR (NULL); } - status = acpi_ut_add_element_to_alloc_list (ACPI_MEM_LIST_GLOBAL, address, size, + status = acpi_ut_track_allocation (ACPI_MEM_LIST_GLOBAL, address, size, MEM_CALLOC, component, module, line); if (ACPI_FAILURE (status)) { acpi_os_free (address); @@ -707,7 +751,7 @@ NATIVE_CHAR *module, u32 line) { - ACPI_DEBUG_MEM_BLOCK *debug_block; + acpi_debug_mem_block *debug_block; FUNCTION_TRACE_PTR ("Ut_free", address); @@ -720,13 +764,13 @@ return_VOID; } - debug_block = (ACPI_DEBUG_MEM_BLOCK *) - (((char *) address) - sizeof (ACPI_DEBUG_MEM_HEADER)); + debug_block = (acpi_debug_mem_block *) + (((char *) address) - sizeof (acpi_debug_mem_header)); acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].total_freed++; acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].current_total_size -= debug_block->size; - acpi_ut_delete_element_from_alloc_list (ACPI_MEM_LIST_GLOBAL, debug_block, + acpi_ut_remove_allocation (ACPI_MEM_LIST_GLOBAL, debug_block, component, module, line); acpi_os_free (debug_block); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utcopy.c linux/drivers/acpi/utilities/utcopy.c --- v2.4.13/linux/drivers/acpi/utilities/utcopy.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/utcopy.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utcopy - Internal to external object translation utilities - * $Revision: 82 $ + * $Revision: 83 $ * *****************************************************************************/ @@ -135,7 +135,7 @@ case AML_REVISION_OP: external_object->type = ACPI_TYPE_INTEGER; - external_object->integer.value = ACPI_CA_VERSION; + external_object->integer.value = ACPI_CA_SUPPORT_LEVEL; break; case AML_INT_NAMEPATH_OP: diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utdebug.c linux/drivers/acpi/utilities/utdebug.c --- v2.4.13/linux/drivers/acpi/utilities/utdebug.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/utdebug.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utdebug - Debug print routines - * $Revision: 87 $ + * $Revision: 90 $ * *****************************************************************************/ @@ -87,10 +87,6 @@ if (acpi_gbl_nesting_level > acpi_gbl_deepest_nesting) { acpi_gbl_deepest_nesting = acpi_gbl_nesting_level; - - if (acpi_gbl_deepest_nesting == 34) { - acpi_os_printf ("hit deepest nesting\n"); - } } } @@ -119,7 +115,7 @@ acpi_ut_debug_print ( u32 requested_debug_level, u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, char *format, ...) { @@ -192,7 +188,7 @@ acpi_ut_debug_print_raw ( u32 requested_debug_level, u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, char *format, ...) { @@ -230,7 +226,7 @@ void acpi_ut_trace ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info) + acpi_debug_print_info *dbg_info) { acpi_gbl_nesting_level++; @@ -262,7 +258,7 @@ void acpi_ut_trace_ptr ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, void *pointer) { acpi_gbl_nesting_level++; @@ -294,7 +290,7 @@ void acpi_ut_trace_str ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, NATIVE_CHAR *string) { @@ -327,7 +323,7 @@ void acpi_ut_trace_u32 ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, u32 integer) { @@ -359,7 +355,7 @@ void acpi_ut_exit ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info) + acpi_debug_print_info *dbg_info) { acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info, @@ -390,7 +386,7 @@ void acpi_ut_status_exit ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, acpi_status status) { @@ -430,12 +426,12 @@ void acpi_ut_value_exit ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, acpi_integer value) { acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info, - "%s %08X\n", acpi_gbl_fn_exit_str, value); + "%s %8.8X%8.8X\n", acpi_gbl_fn_exit_str, HIDWORD(value), LODWORD(value)); acpi_gbl_nesting_level--; } @@ -462,7 +458,7 @@ void acpi_ut_ptr_exit ( u32 line_number, - ACPI_DEBUG_PRINT_INFO *dbg_info, + acpi_debug_print_info *dbg_info, u8 *ptr) { diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utdelete.c linux/drivers/acpi/utilities/utdelete.c --- v2.4.13/linux/drivers/acpi/utilities/utdelete.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/utdelete.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: utdelete - object deletion and reference count utilities - * $Revision: 76 $ + * $Revision: 81 $ * ******************************************************************************/ @@ -183,14 +183,10 @@ * Delete any allocated memory found above */ if (obj_pointer) { - if (!acpi_tb_system_table_pointer (obj_pointer)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Deleting Obj Ptr %p \n", obj_pointer)); - - ACPI_MEM_FREE (obj_pointer); - } + ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Deleting Obj Ptr %p \n", obj_pointer)); + ACPI_MEM_FREE (obj_pointer); } - /* Only delete the object if it was dynamically allocated */ if (object->common.flags & AOPOBJ_STATIC_ALLOCATION) { @@ -346,8 +342,8 @@ */ if (count > MAX_REFERENCE_COUNT) { - ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, - "**** AE_ERROR **** Invalid Reference Count (%X) in object %p\n\n", + ACPI_DEBUG_PRINT ((ACPI_DB_WARN, + "**** Warning **** Large Reference Count (%X) in object %p\n\n", count, object)); } @@ -408,11 +404,6 @@ return_ACPI_STATUS (AE_OK); } - if (acpi_tb_system_table_pointer (object)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Object %p is Pcode Ptr\n", object)); - return_ACPI_STATUS (AE_OK); - } - state = acpi_ut_create_update_state (object, action); @@ -529,24 +520,9 @@ case ACPI_TYPE_REGION: - - /* TBD: [Investigate] - Acpi_ut_update_ref_count (Object->Region.Addr_handler, Action); - */ -/* - Status = - Acpi_ut_create_update_state_and_push (Object->Region.Addr_handler, - Action, &State_list); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); - } -*/ - break; - - case INTERNAL_TYPE_REFERENCE: + /* No subobjects */ break; } @@ -625,6 +601,15 @@ FUNCTION_TRACE_PTR ("Ut_remove_reference", object); + /* + * Allow a NULL pointer to be passed in, just ignore it. This saves + * each caller from having to check. Also, ignore NS nodes. + * + */ + if (!object || + (VALID_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_NAMED))) { + return_VOID; + } /* * Ensure that we have a valid object diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/uteval.c linux/drivers/acpi/utilities/uteval.c --- v2.4.13/linux/drivers/acpi/utilities/uteval.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/uteval.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: uteval - Object evaluation - * $Revision: 30 $ + * $Revision: 31 $ * *****************************************************************************/ @@ -69,11 +69,11 @@ if (ACPI_FAILURE (status)) { if (status == AE_NOT_FOUND) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s on %4.4s was not found\n", - object_name, &device_node->name)); + object_name, (char*)&device_node->name)); } else { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s on %4.4s failed with status %s\n", - object_name, &device_node->name, + object_name, (char*)&device_node->name, acpi_format_exception (status))); } @@ -132,7 +132,7 @@ acpi_status acpi_ut_execute_HID ( acpi_namespace_node *device_node, - ACPI_DEVICE_ID *hid) + acpi_device_id *hid) { acpi_operand_object *obj_desc; acpi_status status; @@ -148,12 +148,12 @@ if (ACPI_FAILURE (status)) { if (status == AE_NOT_FOUND) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "_HID on %4.4s was not found\n", - &device_node->name)); + (char*)&device_node->name)); } else { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "_HID on %4.4s failed %s\n", - &device_node->name, acpi_format_exception (status))); + (char*)&device_node->name, acpi_format_exception (status))); } return_ACPI_STATUS (status); @@ -220,7 +220,7 @@ acpi_status acpi_ut_execute_UID ( acpi_namespace_node *device_node, - ACPI_DEVICE_ID *uid) + acpi_device_id *uid) { acpi_operand_object *obj_desc; acpi_status status; @@ -236,13 +236,13 @@ if (ACPI_FAILURE (status)) { if (status == AE_NOT_FOUND) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "_UID on %4.4s was not found\n", - &device_node->name)); + (char*)&device_node->name)); } else { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "_UID on %4.4s failed %s\n", - &device_node->name, acpi_format_exception (status))); + (char*)&device_node->name, acpi_format_exception (status))); } return (status); @@ -325,7 +325,7 @@ if (AE_NOT_FOUND == status) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "_STA on %4.4s was not found, assuming present.\n", - &device_node->name)); + (char*)&device_node->name)); *flags = 0x0F; status = AE_OK; @@ -333,7 +333,7 @@ else if (ACPI_FAILURE (status)) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "_STA on %4.4s failed %s\n", - &device_node->name, + (char*)&device_node->name, acpi_format_exception (status))); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utglobal.c linux/drivers/acpi/utilities/utglobal.c --- v2.4.13/linux/drivers/acpi/utilities/utglobal.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/utglobal.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utglobal - Global variables for the ACPI subsystem - * $Revision: 131 $ + * $Revision: 133 $ * *****************************************************************************/ @@ -147,7 +147,7 @@ const NATIVE_CHAR *acpi_gbl_db_sleep_states[ACPI_NUM_SLEEP_STATES] = { "\\_S0_","\\_S1_","\\_S2_","\\_S3_", - "\\_S4_","\\_S5_","\\_S4_b"}; + "\\_S4_","\\_S5_","\\_S4B"}; /****************************************************************************** @@ -331,7 +331,7 @@ */ static const NATIVE_CHAR acpi_gbl_bad_type[] = "UNDEFINED"; -#define TYPE_NAME_LENGTH 9 /* Maximum length of each string */ +#define TYPE_NAME_LENGTH 12 /* Maximum length of each string */ static const NATIVE_CHAR *acpi_gbl_ns_type_names[] = /* printable names of ACPI types */ { @@ -349,21 +349,21 @@ /* 11 */ "Power", /* 12 */ "Processor", /* 13 */ "Thermal", - /* 14 */ "Buff_field", + /* 14 */ "Buffer_field", /* 15 */ "Ddb_handle", - /* 16 */ "Debug_obj", - /* 17 */ "Regn_field", + /* 16 */ "Debug_object", + /* 17 */ "Region_field", /* 18 */ "Bank_field", - /* 19 */ "Indx_field", + /* 19 */ "Index_field", /* 20 */ "Reference", /* 21 */ "Alias", /* 22 */ "Notify", - /* 23 */ "Addr_hndlr", - /* 24 */ "Rsrc_desc", - /* 25 */ "Rsrc_field", - /* 26 */ "Rgn_fld_dfn", - /* 27 */ "Bnk_fld_dfn", - /* 28 */ "Idx_fld_dfn", + /* 23 */ "Addr_handler", + /* 24 */ "Resource_desc", + /* 25 */ "Resource_fld", + /* 26 */ "Region_fld_dfn", + /* 27 */ "Bank_fld_dfn", + /* 28 */ "Index_fld_dfn", /* 29 */ "If", /* 30 */ "Else", /* 31 */ "While", diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utinit.c linux/drivers/acpi/utilities/utinit.c --- v2.4.13/linux/drivers/acpi/utilities/utinit.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/utinit.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utinit - Common ACPI subsystem initialization - * $Revision: 101 $ + * $Revision: 102 $ * *****************************************************************************/ @@ -245,7 +245,7 @@ /* Debug only - display leftover memory allocation, if any */ #ifdef ACPI_DBG_TRACK_ALLOCATIONS - acpi_ut_dump_current_allocations (ACPI_UINT32_MAX, NULL); + acpi_ut_dump_allocations (ACPI_UINT32_MAX, NULL); #endif return_ACPI_STATUS (AE_OK); diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utmath.c linux/drivers/acpi/utilities/utmath.c --- v2.4.13/linux/drivers/acpi/utilities/utmath.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/acpi/utilities/utmath.c Wed Oct 24 14:06:22 2001 @@ -0,0 +1,314 @@ +/******************************************************************************* + * + * Module Name: utmath - Integer math support routines + * $Revision: 7 $ + * + ******************************************************************************/ + +/* + * Copyright (C) 2000, 2001 R. Byron Moore + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "acpi.h" + + +#define _COMPONENT ACPI_UTILITIES + MODULE_NAME ("utmath") + +/* + * Support for double-precision integer divide. This code is included here + * in order to support kernel environments where the double-precision math + * library is not available. + */ + +#ifndef ACPI_USE_NATIVE_DIVIDE +/******************************************************************************* + * + * FUNCTION: Acpi_ut_short_divide + * + * PARAMETERS: In_dividend - Pointer to the dividend + * Divisor - 32-bit divisor + * Out_quotient - Pointer to where the quotient is returned + * Out_remainder - Pointer to where the remainder is returned + * + * RETURN: Status (Checks for divide-by-zero) + * + * DESCRIPTION: Perform a short (maximum 64 bits divided by 32 bits) + * divide and modulo. The result is a 64-bit quotient and a + * 32-bit remainder. + * + ******************************************************************************/ + +acpi_status +acpi_ut_short_divide ( + acpi_integer *in_dividend, + u32 divisor, + acpi_integer *out_quotient, + u32 *out_remainder) +{ + uint64_overlay dividend; + uint64_overlay quotient; + u32 remainder32; + + + FUNCTION_TRACE ("Ut_short_divide"); + + dividend.full = *in_dividend; + + /* Always check for a zero divisor */ + + if (divisor == 0) { + REPORT_ERROR (("Acpi_ut_short_divide: Divide by zero\n")); + return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); + } + + /* + * The quotient is 64 bits, the remainder is always 32 bits, + * and is generated by the second divide. + */ + ACPI_DIV_64_BY_32 (0, dividend.part.hi, divisor, + quotient.part.hi, remainder32); + ACPI_DIV_64_BY_32 (remainder32, dividend.part.lo, divisor, + quotient.part.lo, remainder32); + + /* Return only what was requested */ + + if (out_quotient) { + *out_quotient = quotient.full; + } + if (out_remainder) { + *out_remainder = remainder32; + } + + return_ACPI_STATUS (AE_OK); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_ut_divide + * + * PARAMETERS: In_dividend - Pointer to the dividend + * In_divisor - Pointer to the divisor + * Out_quotient - Pointer to where the quotient is returned + * Out_remainder - Pointer to where the remainder is returned + * + * RETURN: Status (Checks for divide-by-zero) + * + * DESCRIPTION: Perform a divide and modulo. + * + ******************************************************************************/ + +acpi_status +acpi_ut_divide ( + acpi_integer *in_dividend, + acpi_integer *in_divisor, + acpi_integer *out_quotient, + acpi_integer *out_remainder) +{ + uint64_overlay dividend; + uint64_overlay divisor; + uint64_overlay quotient; + uint64_overlay remainder; + uint64_overlay normalized_dividend; + uint64_overlay normalized_divisor; + u32 partial1; + uint64_overlay partial2; + uint64_overlay partial3; + + + FUNCTION_TRACE ("Ut_divide"); + + + /* Always check for a zero divisor */ + + if (*in_divisor == 0) { + REPORT_ERROR (("Acpi_ut_divide: Divide by zero\n")); + return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); + } + + divisor.full = *in_divisor; + dividend.full = *in_dividend; + if (divisor.part.hi == 0) { + /* + * 1) Simplest case is where the divisor is 32 bits, we can + * just do two divides + */ + remainder.part.hi = 0; + + /* + * The quotient is 64 bits, the remainder is always 32 bits, + * and is generated by the second divide. + */ + ACPI_DIV_64_BY_32 (0, dividend.part.hi, divisor.part.lo, + quotient.part.hi, partial1); + ACPI_DIV_64_BY_32 (partial1, dividend.part.lo, divisor.part.lo, + quotient.part.lo, remainder.part.lo); + } + + else { + /* + * 2) The general case where the divisor is a full 64 bits + * is more difficult + */ + quotient.part.hi = 0; + normalized_dividend = dividend; + normalized_divisor = divisor; + + /* Normalize the operands (shift until the divisor is < 32 bits) */ + + do { + ACPI_SHIFT_RIGHT_64 (normalized_divisor.part.hi, + normalized_divisor.part.lo); + ACPI_SHIFT_RIGHT_64 (normalized_dividend.part.hi, + normalized_dividend.part.lo); + + } while (normalized_divisor.part.hi != 0); + + /* Partial divide */ + + ACPI_DIV_64_BY_32 (normalized_dividend.part.hi, + normalized_dividend.part.lo, + normalized_divisor.part.lo, + quotient.part.lo, partial1); + + /* + * The quotient is always 32 bits, and simply requires adjustment. + * The 64-bit remainder must be generated. + */ + partial1 = quotient.part.lo * divisor.part.hi; + partial2.full = (acpi_integer) quotient.part.lo * divisor.part.lo; + partial3.full = partial2.part.hi + partial1; + + remainder.part.hi = partial3.part.lo; + remainder.part.lo = partial2.part.lo; + + if (partial3.part.hi == 0) { + if (partial3.part.lo >= dividend.part.hi) { + if (partial3.part.lo == dividend.part.hi) { + if (partial2.part.lo > dividend.part.lo) { + quotient.part.lo--; + remainder.full -= divisor.full; + } + } + else { + quotient.part.lo--; + remainder.full -= divisor.full; + } + } + + remainder.full = remainder.full - dividend.full; + remainder.part.hi = -((s32) remainder.part.hi); + remainder.part.lo = -((s32) remainder.part.lo); + + if (remainder.part.lo) { + remainder.part.hi--; + } + } + } + + /* Return only what was requested */ + + if (out_quotient) { + *out_quotient = quotient.full; + } + if (out_remainder) { + *out_remainder = remainder.full; + } + + return_ACPI_STATUS (AE_OK); +} + +#else + +/******************************************************************************* + * + * FUNCTION: Acpi_ut_short_divide, Acpi_ut_divide + * + * DESCRIPTION: Native versions of the Ut_divide functions. Use these if either + * 1) The target is a 64-bit platform and therefore 64-bit + * integer math is supported directly by the machine. + * 2) The target is a 32-bit or 16-bit platform, and the + * double-precision integer math library is available to + * perform the divide. + * + ******************************************************************************/ + +acpi_status +acpi_ut_short_divide ( + acpi_integer *in_dividend, + u32 divisor, + acpi_integer *out_quotient, + u32 *out_remainder) +{ + + FUNCTION_TRACE ("Ut_short_divide"); + + + /* Always check for a zero divisor */ + + if (divisor == 0) { + REPORT_ERROR (("Acpi_ut_short_divide: Divide by zero\n")); + return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); + } + + /* Return only what was requested */ + + if (out_quotient) { + *out_quotient = *in_dividend / divisor; + } + if (out_remainder) { + *out_remainder = (u32) *in_dividend % divisor; + } + + return_ACPI_STATUS (AE_OK); +} + +acpi_status +acpi_ut_divide ( + acpi_integer *in_dividend, + acpi_integer *in_divisor, + acpi_integer *out_quotient, + acpi_integer *out_remainder) +{ + FUNCTION_TRACE ("Ut_divide"); + + + /* Always check for a zero divisor */ + + if (*in_divisor == 0) { + REPORT_ERROR (("Acpi_ut_divide: Divide by zero\n")); + return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO); + } + + + /* Return only what was requested */ + + if (out_quotient) { + *out_quotient = *in_dividend / *in_divisor; + } + if (out_remainder) { + *out_remainder = *in_dividend % *in_divisor; + } + + return_ACPI_STATUS (AE_OK); +} + +#endif + + diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utmisc.c linux/drivers/acpi/utilities/utmisc.c --- v2.4.13/linux/drivers/acpi/utilities/utmisc.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/utmisc.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /******************************************************************************* * * Module Name: utmisc - common utility procedures - * $Revision: 50 $ + * $Revision: 52 $ * ******************************************************************************/ @@ -662,6 +662,7 @@ /* Init fields specific to the update struct */ + state->common.data_type = ACPI_DESC_TYPE_STATE_UPDATE; state->update.object = object; state->update.value = action; @@ -679,9 +680,7 @@ * * RETURN: Status * - * DESCRIPTION: Create an "Update State" - a flavor of the generic state used - * to update reference counts and delete complex objects such - * as packages. + * DESCRIPTION: Create a "Package State" * ******************************************************************************/ @@ -706,6 +705,7 @@ /* Init fields specific to the update struct */ + state->common.data_type = ACPI_DESC_TYPE_STATE_PACKAGE; state->pkg.source_object = (acpi_operand_object *) internal_object; state->pkg.dest_object = external_object; state->pkg.index = index; @@ -748,7 +748,8 @@ /* Init fields specific to the control struct */ - state->common.state = CONTROL_CONDITIONAL_EXECUTING; + state->common.data_type = ACPI_DESC_TYPE_STATE_CONTROL; + state->common.state = CONTROL_CONDITIONAL_EXECUTING; return_PTR (state); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utobject.c linux/drivers/acpi/utilities/utobject.c --- v2.4.13/linux/drivers/acpi/utilities/utobject.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/utobject.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utobject - ACPI object create/delete/size/cache routines - * $Revision: 55 $ + * $Revision: 57 $ * *****************************************************************************/ @@ -116,13 +116,6 @@ if (!object) { ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Null Object Ptr\n")); - return (FALSE); - } - - /* Check for a pointer within one of the ACPI tables */ - - if (acpi_tb_system_table_pointer (object)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Object %p is a Pcode Ptr\n", object)); return (FALSE); } diff -u --recursive --new-file v2.4.13/linux/drivers/acpi/utilities/utxface.c linux/drivers/acpi/utilities/utxface.c --- v2.4.13/linux/drivers/acpi/utilities/utxface.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/acpi/utilities/utxface.c Wed Oct 24 14:06:22 2001 @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: utxface - External interfaces for "global" ACPI functions - * $Revision: 80 $ + * $Revision: 82 $ * *****************************************************************************/ @@ -240,19 +240,9 @@ acpi_status acpi_terminate (void) { - acpi_status status; - - FUNCTION_TRACE ("Acpi_terminate"); - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } - /* Terminate the AML Debugger if present */ DEBUGGER_EXEC(acpi_gbl_db_terminate_threads = TRUE); @@ -271,10 +261,18 @@ acpi_ut_mutex_terminate (); +#ifdef ENABLE_DEBUGGER + + /* Shut down the debugger */ + + acpi_db_terminate (); +#endif + /* Now we can shutdown the OS-dependent layer */ acpi_os_terminate (); + return_ACPI_STATUS (AE_OK); } @@ -330,18 +328,10 @@ { acpi_system_info *info_ptr; u32 i; - acpi_status status; FUNCTION_TRACE ("Acpi_get_system_info"); - - /* Ensure that ACPI has been initialized */ - - ACPI_IS_INITIALIZATION_COMPLETE (status); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } /* * Must have a valid buffer diff -u --recursive --new-file v2.4.13/linux/drivers/atm/Config.in linux/drivers/atm/Config.in --- v2.4.13/linux/drivers/atm/Config.in Fri Feb 16 16:02:35 2001 +++ linux/drivers/atm/Config.in Thu Oct 25 13:53:46 2001 @@ -7,6 +7,7 @@ tristate 'ATM over TCP' CONFIG_ATM_TCP fi if [ "$CONFIG_PCI" = "y" ]; then + tristate 'Efficient Networks Speedstream 3010' CONFIG_ATM_LANAI tristate 'Efficient Networks ENI155P' CONFIG_ATM_ENI if [ "$CONFIG_ATM_ENI" != "n" ]; then bool ' Enable extended debugging' CONFIG_ATM_ENI_DEBUG diff -u --recursive --new-file v2.4.13/linux/drivers/atm/Makefile linux/drivers/atm/Makefile --- v2.4.13/linux/drivers/atm/Makefile Sun Sep 23 11:40:57 2001 +++ linux/drivers/atm/Makefile Thu Oct 25 13:53:46 2001 @@ -26,6 +26,7 @@ obj-$(CONFIG_ATM_TCP) += atmtcp.o obj-$(CONFIG_ATM_IA) += iphase.o suni.o obj-$(CONFIG_ATM_FIRESTREAM) += firestream.o +obj-$(CONFIG_ATM_LANAI) += lanai.o ifeq ($(CONFIG_ATM_FORE200E_PCA),y) FORE200E_FW_OBJS += fore200e_pca_fw.o diff -u --recursive --new-file v2.4.13/linux/drivers/atm/atmdev_init.c linux/drivers/atm/atmdev_init.c --- v2.4.13/linux/drivers/atm/atmdev_init.c Fri Dec 29 14:35:47 2000 +++ linux/drivers/atm/atmdev_init.c Thu Oct 25 13:53:46 2001 @@ -25,6 +25,9 @@ #ifdef CONFIG_ATM_FORE200E extern int fore200e_detect(void); #endif +#ifdef CONFIG_ATM_LANAI +extern int lanai_detect(void); +#endif /* @@ -55,6 +58,9 @@ #endif #ifdef CONFIG_ATM_FORE200E devs += fore200e_detect(); +#endif +#ifdef CONFIG_ATM_LANAI + devs += lanai_detect(); #endif return devs; } diff -u --recursive --new-file v2.4.13/linux/drivers/atm/lanai.c linux/drivers/atm/lanai.c --- v2.4.13/linux/drivers/atm/lanai.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/atm/lanai.c Thu Oct 25 13:53:46 2001 @@ -0,0 +1,2917 @@ +/* lanai.c -- Copyright 1999 by Mitchell Blank Jr + * + * 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 driver supports ATM cards based on the Efficient "Lanai" + * chipset such as the Speedstream 3010 and the ENI-25p. The + * Speedstream 3060 is currently not supported since we don't + * have the code to drive the on-board Alcatel DSL chipset (yet). + * + * Thanks to Efficient for supporting this project with hardware, + * documentation, and by answering my questions. + * + * Things not working yet: + * + * o We're only set up to compile as a module currently. i.e. + * you should put the source in drivers/atm/lanai.c and then + * just do "make drivers/atm/lanai.o" from the main + * source directory. This will produce a drivers/atm/lanai.o + * file suitable for insmod'ing + * + * o We don't support the Speedstream 3060 yet - this card has + * an on-board DSL modem chip by Alcatel and the driver will + * need some extra code added to handle it + * + * o Note that due to limitations of the Lanai only one VCC can be + * in CBR at once + * + * o We don't currently parse the EEPROM at all. The code is all + * there as per the spec, but it doesn't actually work. I think + * there may be some issues with the docs. Anyway, do NOT + * enable it yet - bugs in that code may actually damage your + * hardware! Because of this you should hardware an ESI before + * trying to use this in a LANE or MPOA environment. + * + * o AAL0 is stubbed in but the actual rx/tx path isn't written yet: + * vcc_tx_aal0() needs to send or queue a SKB + * vcc_tx_unqueue_aal0() needs to attempt to send queued SKBs + * vcc_rx_aal0() needs to handle AAL0 interrupts + * This isn't too much work - I just wanted to get other things + * done first. + * + * o lanai_change_qos() isn't written yet + * + * o There aren't any ioctl's yet -- I'd like to eventually support + * setting loopback and LED modes that way. (see lanai_ioctl) + * + * o If the segmentation engine or DMA gets shut down we should restart + * card as per section 17.0i. (see lanai_reset) + * + * o setsockopt(SO_CIRANGE) isn't done (although despite what the + * API says it isn't exactly commonly implemented) + */ + +/* Version history: + * v.0.02 -- 11-JAN-2000 -- Endian fixes + * v.0.01 -- 30-NOV-1999 -- Initial release + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef PCI_VENDOR_ID_EF_ATM_LANAI2 +/* These need to eventually go into - they're here for now */ +#define PCI_VENDOR_ID_EF_ATM_LANAI2 0x0003 +#define PCI_VENDOR_ID_EF_ATM_LANAIHB 0x0005 +#endif + +/* -------------------- TUNABLE PARAMATERS: */ + +/* + * Maximum number of VCIs per card. Setting it lower could theoretically + * save some memory, but since we allocate our vcc list with get_free_pages, + * it's not really likely for most architectures + */ +#define NUM_VCI (1024) + +/* + * Enable extra debugging + */ +#define DEBUG +/* + * Debug _all_ register operations with card, except the memory test. + * Also disables the timed poll to prevent extra chattiness. This + * isn't for normal use + */ +#undef DEBUG_RW + +/* + * The programming guide specifies a full test of the on-board SRAM + * at initialization time. Undefine to remove this + */ +#define FULL_MEMORY_TEST + +/* + * This is the number of (4 byte) service entries that we will + * try to allocate at startup. Note that we will end up with + * one PAGE_SIZE's worth regardless of what this is set to + */ +#define SERVICE_ENTRIES (1024) +/* TODO: make above a module load-time option */ + +/* + * We normally read the onboard EEPROM in order to discover our MAC + * address. Undefine to _not_ do this + */ +/* #define READ_EEPROM */ /* ***DONT ENABLE YET*** */ +/* TODO: make above a module load-time option (also) */ + +/* + * Depth of TX fifo (in 128 byte units; range 2-31) + * Smaller numbers are better for network latency + * Larger numbers are better for PCI latency + * I'm really sure where the best tradeoff is, but the BSD driver uses + * 7 and it seems to work ok. + */ +#define TX_FIFO_DEPTH (7) +/* TODO: make above a module load-time option */ + +/* + * How often (in jiffies) we will try to unstick stuck connections - + * shouldn't need to happen much + */ +#define LANAI_POLL_PERIOD (10*HZ) +/* TODO: make above a module load-time option */ + +/* + * When allocating an AAL5 receiving buffer, try to make it at least + * large enough to hold this many max_sdu sized PDUs + */ +#define AAL5_RX_MULTIPLIER (3) +/* TODO: make above a module load-time option */ + +/* + * Same for transmitting buffer + */ +#define AAL5_TX_MULTIPLIER (3) +/* TODO: make above a module load-time option */ + +/* + * When allocating an AAL0 transmiting buffer, how many cells should fit. + * Remember we'll end up with a PAGE_SIZE of them anyway, so this isn't + * really critical + */ +#define AAL0_TX_MULTIPLIER (40) +/* TODO: make above a module load-time option */ + +/* + * How large should we make the AAL0 receiving buffer. Remember that this + * is shared between all AAL0 VC's + */ +#define AAL0_RX_BUFFER_SIZE (PAGE_SIZE) +/* TODO: make above a module load-time option */ + +/* + * Should we use Lanai's "powerdown" feature when no vcc's are bound? + */ +/* #define USE_POWERDOWN */ +/* TODO: make above a module load-time option (also) */ + +/* -------------------- DEBUGGING AIDS: */ + +#define DEV_LABEL "lanai" + +#ifdef DEBUG + +#define DPRINTK(format, args...) \ + printk(KERN_DEBUG DEV_LABEL ": " format, ##args) +#define APRINTK(truth, format, args...) \ + do { \ + if (!(truth)) \ + printk(KERN_ERR DEV_LABEL ": " format, ##args); \ + } while (0) + +#else /* !DEBUG */ + +#define DPRINTK(format, args...) +#define APRINTK(truth, format, args...) + +#endif /* DEBUG */ + +#ifdef DEBUG_RW +#define RWDEBUG(format, args...) \ + printk(KERN_DEBUG DEV_LABEL ": " format, ##args) +#else /* !DEBUG_RW */ +#define RWDEBUG(format, args...) +#endif + +/* -------------------- DATA DEFINITIONS: */ + +#define LANAI_MAPPING_SIZE (0x40000) +#define LANAI_EEPROM_SIZE (128) + +typedef int vci_t; +typedef unsigned long bus_addr_t; + +/* A bitfield large enough for NUM_VCI */ +#define VCI_BITFIELD_NELEM ((NUM_VCI + BITS_PER_LONG - 1) / BITS_PER_LONG) +typedef struct { + unsigned long ul[VCI_BITFIELD_NELEM]; +} vci_bitfield; + +/* DMA buffer in host memory for TX, RX, or service list. */ +struct lanai_buffer { + u32 *start; /* From get_free_pages */ + u32 *end; /* One past last byte */ + u32 *ptr; /* Pointer to current host location */ + int order; /* log2(size/PAGE_SIZE) */ +}; + +struct lanai_vcc_stats { + unsigned rx_nomem; + union { + struct { + unsigned rx_badlen; + unsigned service_trash; + unsigned service_stream; + unsigned service_rxcrc; + } aal5; + struct { + } aal0; + } x; +}; + +struct lanai_dev; /* Forward declaration */ + +/* + * This is the card-specific per-vcc data. Note that unlike some other + * drivers there is NOT a 1-to-1 correspondance between these and + * atm_vcc's - each one of these represents an actual 2-way vcc, but + * an atm_vcc can be 1-way and share with a 1-way vcc in the other + * direction. To make it weirder, there can even be 0-way vccs + * bound to us, waiting to do a change_qos + */ +struct lanai_vcc { + bus_addr_t vbase; /* Base of VCC's registers */ + struct lanai_vcc_stats stats; + int nref; /* # of atm_vcc's who reference us */ + vci_t vci; + struct { + struct lanai_buffer buf; + struct atm_vcc *atmvcc; /* atm_vcc who is receiver */ + } rx; + struct { + struct lanai_buffer buf; + struct atm_vcc *atmvcc; /* atm_vcc who is transmitter */ + int endptr; /* last endptr from service entry */ + struct sk_buff_head backlog; + struct sk_buff *inprogress; /* We're streaming this PDU */ + unsigned char *pptr; /* Where we are in above */ + int inprogleft; /* Bytes left to send "inprogress" */ + void (*unqueue)(struct lanai_dev *, struct lanai_vcc *, int); + } tx; +}; + +enum lanai_type { + lanai2 = PCI_VENDOR_ID_EF_ATM_LANAI2, + lanaihb = PCI_VENDOR_ID_EF_ATM_LANAIHB +}; + +struct lanai_dev_stats { + unsigned ovfl_trash; /* # of cells dropped - buffer overflow */ + unsigned vci_trash; /* # of cells dropped - closed vci */ + unsigned hec_err; /* # of cells dropped - bad HEC */ + unsigned atm_ovfl; /* # of cells dropped - rx fifo overflow */ + unsigned pcierr_parity_detect; + unsigned pcierr_serr_set; + unsigned pcierr_master_abort; + unsigned pcierr_m_target_abort; + unsigned pcierr_s_target_abort; + unsigned pcierr_master_parity; + unsigned service_novcc_rx; + unsigned service_novcc_tx; + unsigned service_notx; + unsigned service_norx; + unsigned service_rxnotaal5; + unsigned dma_reenable; + unsigned card_reset; +}; + +struct lanai_dev { + bus_addr_t base; + struct lanai_dev_stats stats; + struct lanai_buffer service; + struct lanai_vcc **vccs; +#ifdef USE_POWERDOWN + int nbound; /* number of bound vccs */ +#endif + enum lanai_type type; + vci_t num_vci; /* Currently just NUM_VCI */ + u8 eeprom[LANAI_EEPROM_SIZE]; + u32 serialno, magicno; + struct pci_dev *pci; + vci_bitfield backlog_vccs; /* VCCs that are backlogged */ + vci_bitfield transmit_ready; /* VCCs that have transmit space */ + struct timer_list timer; + int naal0; + struct lanai_buffer aal0buf; /* AAL0 RX buffers */ + u32 conf1, conf2; /* CONFIG[12] registers */ + u32 status; /* STATUS register */ + spinlock_t txlock; + spinlock_t servicelock; + struct atm_vcc *cbrvcc; + int number; + int board_rev; + u8 pci_revision; +/* TODO - look at race conditions with maintence of conf1/conf2 */ +/* TODO - transmit locking: should we use _irq not _irqsave? */ +/* TODO - organize above in some rational fashion (see ) */ +}; + +/* -------------------- VCI_BITFIELD UTILITIES: */ + +/* + * These functions assume that BITS_PER_LONG is a power of two, which + * should be safe + */ +#if (BITS_PER_LONG & (BITS_PER_LONG - 1)) +#error lanai driver requires type long to have a power of two number of bits +#endif + +/* + * In vci_bitfield_{set,clear} we do the operation in three + * parts to ensure that gcc doesn't cast anything down to + * 32 bits (and then sign extend them later) on 64-bit + * platforms like the alpha + */ +static inline void vci_bitfield_set(vci_bitfield *bf, vci_t vci) +{ + unsigned long bit = 1; + bit <<= (unsigned long) (vci & (BITS_PER_LONG - 1)); + bf->ul[vci / BITS_PER_LONG] |= bit; +} + +static inline void vci_bitfield_clear(vci_bitfield *bf, vci_t vci) +{ + unsigned long bit = 1; + bit <<= (unsigned long) (vci & (BITS_PER_LONG - 1)); + bf->ul[vci / BITS_PER_LONG] &= ~bit; +} + +static inline void vci_bitfield_init(vci_bitfield *bf) +{ + memset(bf, 0, sizeof(*bf)); +} + +static void vci_bitfield_iterate(struct lanai_dev *lanai, + const vci_bitfield *bf, void (*func)(struct lanai_dev *,vci_t vci)) +{ + vci_t vci; + unsigned long mask; + const unsigned long *lp = &(bf->ul[0]); + for (vci = 0; vci < NUM_VCI; lp++) + if (*lp == 0) + vci += BITS_PER_LONG; + else + for (mask = 1; mask != 0; mask <<= 1, vci++) + if (*lp & mask) + func(lanai, vci); +} + +/* -------------------- BUFFER UTILITIES: */ + +/* + * Lanai needs DMA buffers aligned to 256 bytes of at least 1024 bytes - + * we assume that any page allocation will do. I'm sure this is + * never going to be a problem, but it's good to document assumtions + */ +#if PAGE_SIZE < 1024 +#error PAGE_SIZE too small to support LANAI chipset +#endif +/* + * We also assume that the maximum buffer size will be some number + * of whole pages, although that wouldn't be too hard to fix + */ +#if PAGE_SIZE > (128 * 1024) +#error PAGE_SIZE too large to support LANAI chipset +#endif + +/* Convert a size to "order" for __get_free_pages */ +static int bytes_to_order(int bytes) +{ + int order = 0; + if (bytes > (128 * 1024)) + bytes = 128 * 1024; /* Max buffer size for lanai */ + while ((PAGE_SIZE << order) < bytes) + order++; + return order; +} + +/* + * Allocate a buffer in host RAM for service list, RX, or TX + * Returns buf->order<0 if no memory + * Note that the size will be rounded up to an "order" of pages, and + * if we can't allocate that we'll settle for something smaller + * until minbytes + * + * NOTE: buffer must be 32-bit DMA capable - when linux can + * make distinction, this will need tweaking for this + * to work on BIG memory machines. + */ +static void lanai_buf_allocate(struct lanai_buffer *buf, + int bytes, int minbytes) +{ + unsigned long address; + int order = bytes_to_order(bytes); + do { + address = __get_free_pages(GFP_KERNEL, order); + if (address != 0) { /* Success */ + bytes = PAGE_SIZE << order; + buf->start = buf->ptr = (u32 *) address; + buf->end = (u32 *) (address + bytes); + memset((void *) address, 0, bytes); + break; + } + if ((PAGE_SIZE << --order) < minbytes) + order = -1; /* Too small - give up */ + } while (order >= 0); + buf->order = order; +} + +static inline void lanai_buf_deallocate(struct lanai_buffer *buf) +{ + if (buf->order >= 0) { + APRINTK(buf->start != 0, "lanai_buf_deallocate: start==0!\n"); + free_pages((unsigned long) buf->start, buf->order); + buf->start = buf->end = buf->ptr = 0; + } +} + +/* size of buffer in bytes */ +static inline int lanai_buf_size(const struct lanai_buffer *buf) +{ + return ((unsigned long) buf->end) - ((unsigned long) buf->start); +} + +/* size of buffer as "card order" (0=1k .. 7=128k) */ +static inline int lanai_buf_size_cardorder(const struct lanai_buffer *buf) +{ + return buf->order + PAGE_SHIFT - 10; +} + +/* DMA-able address for this buffer */ +static unsigned long lanai_buf_dmaaddr(const struct lanai_buffer *buf) +{ + unsigned long r = virt_to_bus(buf->start); + APRINTK((r & ~0xFFFFFF00) == 0, "bad dmaaddr: 0x%lx\n", (long) r); + return r; +} + +/* -------------------- HANDLE BACKLOG_VCCS BITFIELD: */ + +static inline void vcc_mark_backlogged(struct lanai_dev *lanai, + const struct lanai_vcc *lvcc) +{ + APRINTK(lvcc->vbase != 0, "vcc_mark_backlogged: zero vbase!\n"); + vci_bitfield_set(&lanai->backlog_vccs, lvcc->vci); +} + +static inline void vcc_unmark_backlogged(struct lanai_dev *lanai, + const struct lanai_vcc *lvcc) +{ + APRINTK(lvcc->vbase != 0, "vcc_unmark_backlogged: zero vbase!\n"); + vci_bitfield_clear(&lanai->backlog_vccs, lvcc->vci); +} + +static inline void vcc_backlog_init(struct lanai_dev *lanai) +{ + vci_bitfield_init(&lanai->backlog_vccs); +} + +static inline int vcc_is_backlogged(/*const*/ struct lanai_vcc *lvcc) +{ + return lvcc->tx.inprogress != NULL || + !skb_queue_empty(&lvcc->tx.backlog); +} + +/* -------------------- PORT I/O UTILITIES: */ + +/* Registers (and their bit-fields) */ +enum lanai_register { + Reset_Reg = 0x00, /* Reset; read for chip type; bits: */ +#define RESET_GET_BOARD_REV(x) (((x)>> 0)&0x03) /* Board revision */ +#define RESET_GET_BOARD_ID(x) (((x)>> 2)&0x03) /* Board ID */ +#define BOARD_ID_LANAI256 (0) /* 25.6M adaptor card */ + Endian_Reg = 0x04, /* Endian setting */ + IntStatus_Reg = 0x08, /* Interrupt status */ + IntStatusMasked_Reg = 0x0C, /* Interrupt status (masked) */ + IntAck_Reg = 0x10, /* Interrupt acknowledge */ + IntAckMasked_Reg = 0x14, /* Interrupt acknowledge (masked) */ + IntStatusSet_Reg = 0x18, /* Get status + enable/disable */ + IntStatusSetMasked_Reg = 0x1C, /* Get status + en/di (masked) */ + IntControlEna_Reg = 0x20, /* Interrupt control enable */ + IntControlDis_Reg = 0x24, /* Interrupt control disable */ + Status_Reg = 0x28, /* Status */ +#define STATUS_PROMDATA (0x00000001) /* PROM_DATA pin */ +#define STATUS_WAITING (0x00000002) /* Interrupt being delayed */ +#define STATUS_SOOL (0x00000004) /* SOOL alarm */ +#define STATUS_LOCD (0x00000008) /* LOCD alarm */ +#define STATUS_LED (0x00000010) /* LED (HAPPI) output */ +#define STATUS_GPIN (0x00000020) /* GPIN pin */ +#define STATUS_BUTTBUSY (0x00000040) /* Butt register is pending */ + Config1_Reg = 0x2C, /* Config word 1; bits: */ +#define CONFIG1_PROMDATA (0x00000001) /* PROM_DATA pin */ +#define CONFIG1_PROMCLK (0x00000002) /* PROM_CLK pin */ +#define CONFIG1_SET_READMODE(x) ((x)*0x004) /* PCI BM reads; values: */ +#define READMODE_PLAIN (0) /* Plain memory read */ +#define READMODE_LINE (2) /* Memory read line */ +#define READMODE_MULTIPLE (3) /* Memory read multiple */ +#define CONFIG1_DMA_ENABLE (0x00000010) /* Turn on DMA */ +#define CONFIG1_POWERDOWN (0x00000020) /* Turn off clocks */ +#define CONFIG1_SET_LOOPMODE(x) ((x)*0x080) /* Clock&loop mode; values: */ +#define LOOPMODE_NORMAL (0) /* Normal - no loop */ +#define LOOPMODE_TIME (1) +#define LOOPMODE_DIAG (2) +#define LOOPMODE_LINE (3) +#define CONFIG1_MASK_LOOPMODE (0x00000180) +#define CONFIG1_SET_LEDMODE(x) ((x)*0x0200) /* Mode of LED; values: */ +#define LEDMODE_NOT_SOOL (0) /* !SOOL */ +#define LEDMODE_OFF (1) /* 0 */ +#define LEDMODE_ON (2) /* 1 */ +#define LEDMODE_NOT_LOCD (3) /* !LOCD */ +#define LEDMORE_GPIN (4) /* GPIN */ +#define LEDMODE_NOT_GPIN (7) /* !GPIN */ +#define CONFIG1_MASK_LEDMODE (0x00000E00) +#define CONFIG1_GPOUT1 (0x00001000) /* Toggle for reset */ +#define CONFIG1_GPOUT2 (0x00002000) /* Loopback PHY */ +#define CONFIG1_GPOUT3 (0x00004000) /* Loopback lanai */ + Config2_Reg = 0x30, /* Config word 2; bits: */ +#define CONFIG2_HOWMANY (0x00000001) /* >512 VCIs? */ +#define CONFIG2_PTI7_MODE (0x00000002) /* Make PTI=7 RM, not OAM */ +#define CONFIG2_VPI_CHK_DIS (0x00000004) /* Ignore RX VPI value */ +#define CONFIG2_HEC_DROP (0x00000008) /* Drop cells w/ HEC errors */ +#define CONFIG2_VCI0_NORMAL (0x00000010) /* Treat VCI=0 normally */ +#define CONFIG2_CBR_ENABLE (0x00000020) /* Deal with CBR traffic */ +#define CONFIG2_TRASH_ALL (0x00000040) /* Trashing incoming cells */ +#define CONFIG2_TX_DISABLE (0x00000080) /* Trashing outgoing cells */ +#define CONFIG2_SET_TRASH (0x00000100) /* Turn trashing on */ + Statistics_Reg = 0x34, /* Statistics; bits: */ +#define STATS_GET_FIFO_OVFL(x) (((x)>> 0)&0xFF) /* FIFO overflowed */ +#define STATS_GET_HEC_ERR(x) (((x)>> 8)&0xFF) /* HEC was bad */ +#define STATS_GET_BAD_VCI(x) (((x)>>16)&0xFF) /* VCI not open */ +#define STATS_GET_BUF_OVFL(x) (((x)>>24)&0xFF) /* VCC buffer full */ + ServiceStuff_Reg = 0x38, /* Service stuff; bits: */ +#define SSTUFF_SET_SIZE(x) ((x)*0x20000000) /* size of service buffer */ +#define SSTUFF_SET_ADDR(x) ((x)>>8) /* set address of buffer */ + ServWrite_Reg = 0x3C, /* ServWrite Pointer */ + ServRead_Reg = 0x40, /* ServRead Pointer */ + TxDepth_Reg = 0x44, /* FIFO Transmit Depth */ + Butt_Reg = 0x48, /* Butt register */ + CBR_ICG_Reg = 0x50, + CBR_PTR_Reg = 0x54, + PingCount_Reg = 0x58, /* Ping count */ + DMA_Addr_Reg = 0x5C /* DMA address */ +}; + +static inline bus_addr_t reg_addr(const struct lanai_dev *lanai, + enum lanai_register reg) +{ + return lanai->base + (bus_addr_t) reg; +} + + +static inline u32 reg_read(const struct lanai_dev *lanai, + enum lanai_register reg) +{ + u32 t; + t = readl(reg_addr(lanai, reg)); + RWDEBUG("R [0x%08X] 0x%02X = 0x%08X\n", (unsigned int) lanai->base, + (int) reg, t); + return t; +} + +static inline void reg_write(const struct lanai_dev *lanai, u32 val, + enum lanai_register reg) +{ + RWDEBUG("W [0x%08X] 0x%02X < 0x%08X\n", (unsigned int) lanai->base, + (int) reg, val); + writel(val, reg_addr(lanai, reg)); + mdelay(1); +} + +static inline void conf1_write(const struct lanai_dev *lanai) +{ + reg_write(lanai, lanai->conf1, Config1_Reg); +} + +static inline void conf2_write(const struct lanai_dev *lanai) +{ + reg_write(lanai, lanai->conf2, Config2_Reg); +} + +static inline void reset_board(const struct lanai_dev *lanai) +{ + DPRINTK("about to reset board\n"); + reg_write(lanai, 0, Reset_Reg); + /* + * If we don't delay a little while here then we can end up + * leaving the card in a VERY weird state and lock up the + * PCI bus. This isn't documented anywhere but I've convinced + * myself after a lot of painful experimentation + */ + udelay(5); +} + +/* -------------------- VCC LIST LOCK: */ + +/* + * The linux-atm code disables local IRQs while managing the list of + * VCCs on a card. This is good, but it doesn't save us against + * SMP. Unfortunately, fixing this will require changes in the + * API which will have to wait a little bit. It's a hard race to + * trigger accidentally, so it isn't TOO horrible so far. + * + * One possible solution would be to have an rwlock which is + * always grabbed _irq-style on writing. This would automatically + * be grabbed (for writing) by the higher layers on things that + * would result in a change in the vcc list (_open, _close, + * probably _change_qos) - thus it would also protect the + * higher-level list of vccs on each device (atm_dev->vccs). + * The driver would be responsible for grabbing it as a read_lock + * anytime it wants to consult its table of vccs - for instance + * when handling an incoming PDU. This also explains why we would + * probably want the write_lock while in _change_qos - to prevent + * handling of PDUs while possibly in an inconsistant state. + * Also, _send would grab the lock for reading. + * + * One problem with this is that _open and _close could no longer + * do anything that might provoke a schedule. First, it would + * force us to use GFP_ATOMIC memory (which is bad), but also + * some devices pretty much require scheduling due to long + * delays (see lanai_close for an example). So in this case + * we need a way to schedule without losing the spinlock. + * The cleanest way to do this is probably have a way to mark a + * VCC as "in progress" so that the interrupt handler can + * still disregard any traffic for it while _open or _close + * are sleeping on it. Then it will need to be _open and + * _close's job to relinquish the write_lock. Thus, the + * lock could be dropped around the times that scheduling + * might occur. Perhaps the _READY flag can be used for + * this purpose. + * + * One short note about this "upper layer grabs, driver + * relinquishes" write lock - since this needs to be + * an _irq lock we're going to have problem saving + * and restoring flags (_irqsave/_irqrestore). This + * shouldn't be a problem, however - we must just + * require that those syscalls are never called with + * interrupts disabled so we can use the non-flags-saving + * versions. + * + * Anyway, all of the above is vaporware currently - fixing + * this right will require changes in the API and all of + * the drivers - this will wait until 2.5.x most likely. + * The following NOP macros are just here to mark where + * the locks will be needed in the future. + */ +#define vcclist_read_lock() do {} while (0) +#define vcclist_read_unlock() do {} while (0) +#define vcclist_write_lock() do {} while (0) +#define vcclist_write_unlock() do {} while (0) + +/* -------------------- CARD SRAM UTILITIES: */ + +/* The SRAM is mapped into normal PCI memory space - the only catch is + * that it is only 16-bits wide but must be accessed as 32-bit. The + * 16 high bits will be zero. We don't hide this, since they get + * programmed mostly like discrete registers anyway + */ +#define SRAM_START (0x20000) +#define SRAM_BYTES (0x20000) /* Again, half don't really exist */ + +static inline bus_addr_t sram_addr(const struct lanai_dev *lanai, int offset) +{ + return lanai->base + SRAM_START + offset; +} + +static inline u32 sram_read(const struct lanai_dev *lanai, int offset) +{ + return readl(sram_addr(lanai, offset)); +} + +static inline void sram_write(const struct lanai_dev *lanai, + u32 val, int offset) +{ + writel(val, sram_addr(lanai, offset)); +} + +static int __init sram_test_word( + const struct lanai_dev *lanai, int offset, u32 pattern) +{ + u32 readback; + sram_write(lanai, pattern, offset); + readback = sram_read(lanai, offset); + if (readback == pattern) + return 0; + printk(KERN_ERR DEV_LABEL + "(itf %d): SRAM word at %d bad: wrote 0x%X, read 0x%X\n", + lanai->number, offset, pattern, readback); + return -EIO; +} + +static int __init sram_test_pass(const struct lanai_dev *lanai, u32 pattern) +{ + int offset, result = 0; + for (offset = 0; offset < SRAM_BYTES && result == 0; offset += 4) + result = sram_test_word(lanai, offset, pattern); + return result; +} + +static int __init sram_test_and_clear(const struct lanai_dev *lanai) +{ +#ifdef FULL_MEMORY_TEST + int result; + DPRINTK("testing SRAM\n"); + if ((result = sram_test_pass(lanai, 0x5555)) != 0) + return result; + if ((result = sram_test_pass(lanai, 0xAAAA)) != 0) + return result; +#endif + DPRINTK("clearing SRAM\n"); + return sram_test_pass(lanai, 0x0000); +} + +/* -------------------- CARD-BASED VCC TABLE UTILITIES: */ + +/* vcc table */ +enum lanai_vcc_offset { + vcc_rxaddr1 = 0x00, /* Location1, plus bits: */ +#define RXADDR1_SET_SIZE(x) ((x)*0x0000100) /* size of RX buffer */ +#define RXADDR1_SET_RMMODE(x) ((x)*0x00800) /* RM cell action; values: */ +#define RMMODE_TRASH (0) /* discard */ +#define RMMODE_PRESERVE (1) /* input as AAL0 */ +#define RMMODE_PIPE (2) /* pipe to coscheduler */ +#define RMMODE_PIPEALL (3) /* pipe non-RM too */ +#define RXADDR1_OAM_PRESERVE (0x00002000) /* Input OAM cells as AAL0 */ +#define RXADDR1_SET_MODE(x) ((x)*0x0004000) /* Reassembly mode */ +#define RXMODE_TRASH (0) /* discard */ +#define RXMODE_AAL0 (1) /* non-AAL5 mode */ +#define RXMODE_AAL5 (2) /* AAL5, intr. each PDU */ +#define RXMODE_AAL5_STREAM (3) /* AAL5 w/o per-PDU intr */ + vcc_rxaddr2 = 0x04, /* Location2 */ + vcc_rxcrc1 = 0x08, /* RX CRC claculation space */ + vcc_rxcrc2 = 0x0C, + vcc_rxwriteptr = 0x10, /* RX writeptr, plus bits: */ +#define RXWRITEPTR_LASTEFCI (0x00002000) /* Last PDU had EFCI bit */ +#define RXWRITEPTR_DROPPING (0x00004000) /* Had error, dropping */ +#define RXWRITEPTR_TRASHING (0x00008000) /* Trashing */ + vcc_rxbufstart = 0x14, /* RX bufstart, plus bits: */ +#define RXBUFSTART_CLP (0x00004000) +#define RXBUFSTART_CI (0x00008000) + vcc_rxreadptr = 0x18, /* RX readptr */ + vcc_txicg = 0x1C, /* TX ICG */ + vcc_txaddr1 = 0x20, /* Location1, plus bits: */ +#define TXADDR1_SET_SIZE(x) ((x)*0x0000100) /* size of TX buffer */ +#define TXADDR1_ABR (0x00008000) /* use ABR (doesn't work) */ + vcc_txaddr2 = 0x24, /* Location2 */ + vcc_txcrc1 = 0x28, /* TX CRC claculation space */ + vcc_txcrc2 = 0x2C, + vcc_txreadptr = 0x30, /* TX Readptr, plus bits: */ +#define TXREADPTR_GET_PTR(x) ((x)&0x01FFF) +#define TXREADPTR_MASK_DELTA (0x0000E000) /* ? */ + vcc_txendptr = 0x34, /* TX Endptr, plus bits: */ +#define TXENDPTR_CLP (0x00002000) +#define TXENDPTR_MASK_PDUMODE (0x0000C000) /* PDU mode; values: */ +#define PDUMODE_AAL0 (0*0x04000) +#define PDUMODE_AAL5 (2*0x04000) +#define PDUMODE_AAL5STREAM (3*0x04000) + vcc_txwriteptr = 0x38, /* TX Writeptr */ +#define TXWRITEPTR_GET_PTR(x) ((x)&0x1FFF) + vcc_txcbr_next = 0x3C /* # of next CBR VCI in ring */ +#define TXCBR_NEXT_BOZO (0x00008000) /* "bozo bit" */ +}; + +#define CARDVCC_SIZE (0x40) + +static inline bus_addr_t cardvcc_addr(const struct lanai_dev *lanai, + vci_t vci) +{ + return sram_addr(lanai, vci * CARDVCC_SIZE); +} + +static inline u32 cardvcc_read(const struct lanai_vcc *lvcc, + enum lanai_vcc_offset offset) +{ + u32 val; + APRINTK(lvcc->vbase != 0, "cardvcc_read: unbound vcc!\n"); + val= readl(lvcc->vbase + (bus_addr_t) offset); + RWDEBUG("VR vci=%04d 0x%02X = 0x%08X\n", + lvcc->vci, (int) offset, val); + return val; +} + +static inline void cardvcc_write(const struct lanai_vcc *lvcc, + u32 val, enum lanai_vcc_offset offset) +{ + APRINTK(lvcc->vbase != 0, "cardvcc_write: unbound vcc!\n"); + APRINTK((val & ~0xFFFF) == 0, + "cardvcc_write: bad val 0x%X (vci=%d, addr=0x%02X)\n", + val, lvcc->vci, (int) offset); + RWDEBUG("VW vci=%04d 0x%02X > 0x%08X\n", + lvcc->vci, (int) offset, val); + writel(val, lvcc->vbase + (bus_addr_t) offset); +} + +/* -------------------- COMPUTE SIZE OF AN AAL5 PDU: */ + +/* How many bytes will an AAL5 PDU take to transmit - remember that: + * o we need to add 8 bytes for length, CPI, UU, and CRC + * o we need to round up to 48 bytes for cells + */ +static inline int aal5_size(int size) +{ + int cells = (size + 8 + 47) / 48; + return cells * 48; +} + +/* How many bytes can we send if we have "space" space, assuming we have + * to send full cells + */ +static inline int aal5_spacefor(int space) +{ + int cells = space / 48; + return cells * 48; +} + +/* -------------------- FREE AN ATM SKB: */ + +static inline void lanai_free_skb(struct atm_vcc *atmvcc, struct sk_buff *skb) +{ + if (atmvcc->pop != NULL) + atmvcc->pop(atmvcc, skb); + else + dev_kfree_skb_any(skb); +} + +/* -------------------- TURN VCCS ON AND OFF: */ + +static void host_vcc_start_rx(const struct lanai_vcc *lvcc) +{ + u32 addr1; + if (lvcc->rx.atmvcc->qos.aal == ATM_AAL5) { + unsigned long dmaaddr = lanai_buf_dmaaddr(&lvcc->rx.buf); + cardvcc_write(lvcc, 0xFFFF, vcc_rxcrc1); + cardvcc_write(lvcc, 0xFFFF, vcc_rxcrc2); + cardvcc_write(lvcc, 0, vcc_rxwriteptr); + cardvcc_write(lvcc, 0, vcc_rxbufstart); + cardvcc_write(lvcc, 0, vcc_rxreadptr); + cardvcc_write(lvcc, (dmaaddr >> 16) & 0xFFFF, vcc_rxaddr2); + addr1 = ((dmaaddr >> 8) & 0xFF) | + RXADDR1_SET_SIZE(lanai_buf_size_cardorder(&lvcc->rx.buf))| + RXADDR1_SET_RMMODE(RMMODE_TRASH) | /* ??? */ + /* RXADDR1_OAM_PRESERVE | --- no OAM support yet */ + RXADDR1_SET_MODE(RXMODE_AAL5); + } else + addr1 = RXADDR1_SET_RMMODE(RMMODE_PRESERVE) | /* ??? */ + RXADDR1_OAM_PRESERVE | /* ??? */ + RXADDR1_SET_MODE(RXMODE_AAL0); + /* This one must be last! */ + cardvcc_write(lvcc, addr1, vcc_rxaddr1); +} + +static void host_vcc_start_tx(const struct lanai_vcc *lvcc) +{ + unsigned long dmaaddr = lanai_buf_dmaaddr(&lvcc->tx.buf); + cardvcc_write(lvcc, 0, vcc_txicg); + cardvcc_write(lvcc, 0xFFFF, vcc_txcrc1); + cardvcc_write(lvcc, 0xFFFF, vcc_txcrc2); + cardvcc_write(lvcc, 0, vcc_txreadptr); + cardvcc_write(lvcc, 0, vcc_txendptr); + cardvcc_write(lvcc, 0, vcc_txwriteptr); + cardvcc_write(lvcc, + (lvcc->tx.atmvcc->qos.txtp.traffic_class == ATM_CBR) ? + TXCBR_NEXT_BOZO | lvcc->vci : 0, vcc_txcbr_next); + cardvcc_write(lvcc, (dmaaddr >> 16) & 0xFFFF, vcc_txaddr2); + cardvcc_write(lvcc, + ((dmaaddr >> 8) & 0xFF) | + TXADDR1_SET_SIZE(lanai_buf_size_cardorder(&lvcc->tx.buf)), + vcc_txaddr1); +} + +/* Shutdown receiving on card */ +static void lanai_shutdown_rx_vci(const struct lanai_vcc *lvcc) +{ + if (lvcc->vbase == 0) /* We were never bound to a VCI */ + return; + /* 15.1.1 - set to trashing, wait one cell time (15us) */ + cardvcc_write(lvcc, + RXADDR1_SET_RMMODE(RMMODE_TRASH) | + RXADDR1_SET_MODE(RXMODE_TRASH), vcc_rxaddr1); + udelay(15); + /* 15.1.2 - clear rest of entries */ + cardvcc_write(lvcc, 0, vcc_rxaddr2); + cardvcc_write(lvcc, 0, vcc_rxcrc1); + cardvcc_write(lvcc, 0, vcc_rxcrc2); + cardvcc_write(lvcc, 0, vcc_rxwriteptr); + cardvcc_write(lvcc, 0, vcc_rxbufstart); + cardvcc_write(lvcc, 0, vcc_rxreadptr); +} + +/* Shutdown transmitting on card. + * Unfortunately the lanai needs us to wait until all the data + * drains out of the buffer before we can dealloc it, so this + * can take awhile -- up to 370ms for a full 128KB buffer + * assuming everone else is quiet. In theory the time is + * boundless if there's a CBR VCC holding things up. + */ +static void lanai_shutdown_tx_vci(struct lanai_dev *lanai, + struct lanai_vcc *lvcc) +{ + struct sk_buff *skb; + unsigned long flags, timeout; + int read, write, lastread = -1; + APRINTK(!in_interrupt(), + "lanai_shutdown_tx_vci called w/o process context!\n"); + if (lvcc->vbase == 0) /* We were never bound to a VCI */ + return; + /* 15.2.1 - wait for queue to drain */ + spin_lock_irqsave(&lanai->txlock, flags); + if (lvcc->tx.inprogress != NULL) { + lanai_free_skb(lvcc->tx.atmvcc, lvcc->tx.inprogress); + lvcc->tx.inprogress = NULL; + } + while ((skb = skb_dequeue(&lvcc->tx.backlog)) != NULL) + lanai_free_skb(lvcc->tx.atmvcc, skb); + vcc_unmark_backlogged(lanai, lvcc); + spin_unlock_irqrestore(&lanai->txlock, flags); + timeout = jiffies + ((lanai_buf_size(&lvcc->tx.buf) * HZ) >> 17); + write = TXWRITEPTR_GET_PTR(cardvcc_read(lvcc, vcc_txwriteptr)); + goto start; + while (time_before_eq(jiffies, timeout)) { + schedule_timeout(HZ / 25); + start: + read = TXREADPTR_GET_PTR(cardvcc_read(lvcc, vcc_txreadptr)); + if (read == write && /* Is TX buffer empty? */ + (lvcc->tx.atmvcc->qos.txtp.traffic_class != ATM_CBR || + (cardvcc_read(lvcc, vcc_txcbr_next) & + TXCBR_NEXT_BOZO) == 0)) + goto done; + if (read != lastread) { /* Has there been any progress? */ + lastread = read; + timeout += HZ / 10; + } + } + printk(KERN_ERR DEV_LABEL "(itf %d): Timed out on backlog closing " + "vci %d\n", lvcc->tx.atmvcc->dev->number, lvcc->vci); + DPRINTK("read, write = %d, %d\n", read, write); + done: + /* 15.2.2 - clear out all tx registers */ + cardvcc_write(lvcc, 0, vcc_txreadptr); + cardvcc_write(lvcc, 0, vcc_txwriteptr); + cardvcc_write(lvcc, 0, vcc_txendptr); + cardvcc_write(lvcc, 0, vcc_txcrc1); + cardvcc_write(lvcc, 0, vcc_txcrc2); + cardvcc_write(lvcc, 0, vcc_txaddr2); + cardvcc_write(lvcc, 0, vcc_txaddr1); +} + +/* -------------------- MANAGING AAL0 RX BUFFER: */ + +static inline int aal0_buffer_allocate(struct lanai_dev *lanai) +{ + DPRINTK("aal0_buffer_allocate: allocating AAL0 RX buffer\n"); + lanai_buf_allocate(&lanai->aal0buf, AAL0_RX_BUFFER_SIZE, 80); + return (lanai->aal0buf.order < 0) ? -ENOMEM : 0; +} + +static inline void aal0_buffer_free(struct lanai_dev *lanai) +{ + DPRINTK("aal0_buffer_allocate: freeing AAL0 RX buffer\n"); + lanai_buf_deallocate(&lanai->aal0buf); +} + +/* -------------------- EEPROM UTILITIES: */ + +/* Offsets of data in the EEPROM */ +#define EEPROM_COPYRIGHT (0) +#define EEPROM_COPYRIGHT_LEN (44) +#define EEPROM_CHECKSUM (62) +#define EEPROM_CHECKSUM_REV (63) +#define EEPROM_MAC (64) +#define EEPROM_MAC_REV (70) +#define EEPROM_SERIAL (112) +#define EEPROM_SERIAL_REV (116) +#define EEPROM_MAGIC (120) +#define EEPROM_MAGIC_REV (124) + +#define EEPROM_MAGIC_VALUE (0x5AB478D2) + +#ifndef READ_EEPROM + +/* Stub functions to use if EEPROM reading is disabled */ +static int __init eeprom_read(struct lanai_dev *lanai) +{ + printk(KERN_INFO DEV_LABEL "(itf %d): *NOT* reading EEPROM\n", + lanai->number); + memset(&lanai->eeprom[EEPROM_MAC], 0, 6); + return 0; +} + +static int __init eeprom_validate(struct lanai_dev *lanai) +{ + lanai->serialno = 0; + lanai->magicno = EEPROM_MAGIC_VALUE; + return 0; +} + +#else /* READ_EEPROM */ + +static int __init eeprom_read(struct lanai_dev *lanai) +{ + int i, address; + u8 data; + u32 tmp; +#define set_config1(x) do { lanai->conf1 = x; conf1_write(lanai); \ + } while (0) +#define clock_h() set_config1(lanai->conf1 | CONFIG1_PROMCLK) +#define clock_l() set_config1(lanai->conf1 &~ CONFIG1_PROMCLK) +#define data_h() set_config1(lanai->conf1 | CONFIG1_PROMDATA) +#define data_l() set_config1(lanai->conf1 &~ CONFIG1_PROMDATA) +#define pre_read() do { data_h(); clock_h(); udelay(5); } while (0) +#define read_pin() (reg_read(lanai, Status_Reg) & STATUS_PROMDATA) +#define send_stop() do { data_l(); udelay(5); clock_h(); udelay(5); \ + data_h(); udelay(5); } while (0) + /* start with both clock and data high */ + data_h(); clock_h(); udelay(5); + for (address = 0; address < LANAI_EEPROM_SIZE; address++) { + data = (address << 1) | 1; /* Command=read + address */ + /* send start bit */ + data_l(); udelay(5); + clock_l(); udelay(5); + for (i = 128; i != 0; i >>= 1) { /* write command out */ + tmp = (lanai->conf1 & ~CONFIG1_PROMDATA) | + (data & i) ? CONFIG1_PROMDATA : 0; + if (lanai->conf1 != tmp) { + set_config1(tmp); + udelay(5); /* Let new data settle */ + } + clock_h(); udelay(5); clock_l(); udelay(5); + } + /* look for ack */ + data_h(); clock_h(); udelay(5); + if (read_pin() != 0) + goto error; /* No ack seen */ + clock_l(); udelay(5); + /* read back result */ + for (data = 0, i = 7; i >= 0; i--) { + data_h(); clock_h(); udelay(5); + data = (data << 1) | !!read_pin(); + clock_l(); udelay(5); + } + /* look again for ack */ + data_h(); clock_h(); udelay(5); + if (read_pin() == 0) + goto error; /* Spurious ack */ + clock_l(); udelay(5); + send_stop(); + lanai->eeprom[address] = data; + DPRINTK("EEPROM 0x%04X %02X\n", address, data); + } + return 0; + error: + clock_l(); udelay(5); /* finish read */ + send_stop(); + printk(KERN_ERR DEV_LABEL "(itf %d): error reading EEPROM byte %d\n", + lanai->number, address); + return -EIO; +#undef set_config1 +#undef clock_h +#undef clock_l +#undef data_h +#undef data_l +#undef pre_read +#undef read_pin +#undef send_stop +} + +/* read a big-endian 4-byte value out of eeprom */ +static inline u32 eeprom_be4(const struct lanai_dev *lanai, int address) +{ + return be32_to_cpup((u32 *) (&lanai->eeprom[address])); +} + +/* Checksum/validate EEPROM contents */ +static int __init eeprom_validate(struct lanai_dev *lanai) +{ + int i, s; + u32 v; + const u8 *e = lanai->eeprom; +#ifdef DEBUG + /* First, see if we can get an ASCIIZ string out of the copyright */ + for (i = EEPROM_COPYRIGHT; + i < (EEPROM_COPYRIGHT + EEPROM_COPYRIGHT_LEN); i++) + if (e[i] < 0x20 || e[i] > 0x7E) + break; + if ( i != EEPROM_COPYRIGHT && + i != EEPROM_COPYRIGHT + EEPROM_COPYRIGHT_LEN && e[i] == '\0') + DPRINTK("eeprom: copyright = \"%s\"\n", + (char *) &e[EEPROM_COPYRIGHT]); + else + DPRINTK("eeprom: copyright not found\n"); +#endif + /* Validate checksum */ + for (i = s = 0; i < EEPROM_CHECKSUM; i++) + s += e[i]; + s &= 0xFF; + if (s != e[EEPROM_CHECKSUM]) { + printk(KERN_ERR DEV_LABEL "(itf %d): EEPROM checksum bad " + "(wanted 0x%02X, got 0x%02X)\n", lanai->number, + s, e[EEPROM_CHECKSUM]); + return -EIO; + } + s ^= 0xFF; + if (s != e[EEPROM_CHECKSUM_REV]) { + printk(KERN_ERR DEV_LABEL "(itf %d): EEPROM inverse checksum " + "bad (wanted 0x%02X, got 0x%02X)\n", lanai->number, + s, e[EEPROM_CHECKSUM_REV]); + return -EIO; + } + /* Verify MAC address */ + for (i = 0; i < 6; i++) + if ((e[EEPROM_MAC + i] ^ e[EEPROM_MAC_REV + i]) != 0xFF) { + printk(KERN_ERR DEV_LABEL + "(itf %d) : EEPROM MAC addresses don't match " + "(0x%02X, inverse 0x%02X)\n", lanai->number, + e[EEPROM_MAC + i], e[EEPROM_MAC_REV + i]); + return -EIO; + } + DPRINTK("eeprom: MAC address = %02X:%02X:%02X:%02X:%02X:%02X\n", + e[EEPROM_MAC + 0], e[EEPROM_MAC + 1], e[EEPROM_MAC + 2], + e[EEPROM_MAC + 3], e[EEPROM_MAC + 4], e[EEPROM_MAC + 5]); + /* Verify serial number */ + lanai->serialno = eeprom_be4(lanai, EEPROM_SERIAL); + v = eeprom_be4(lanai, EEPROM_SERIAL_REV); + if ((lanai->serialno ^ v) != 0xFFFFFFFF) { + printk(KERN_ERR DEV_LABEL "(itf %d): EEPROM serial numbers " + "don't match (0x%08X, inverse 0x%08X)\n", lanai->number, + lanai->serialno, v); + return -EIO; + } + DPRINTK("eeprom: Serial number = %d\n", lanai->serialno); + /* Verify magic number */ + lanai->magicno = eeprom_be4(lanai, EEPROM_MAGIC); + v = eeprom_be4(lanai, EEPROM_MAGIC_REV); + if ((lanai->magicno ^ v) != 0xFFFFFFFF) { + printk(KERN_ERR DEV_LABEL "(itf %d): EEPROM magic numbers " + "don't match (0x%08X, inverse 0x%08X)\n", lanai->number, + lanai->magicno, v); + return -EIO; + } + DPRINTK("eeprom: Magic number = 0x%08X\n", lanai->magicno); + if (lanai->magicno != EEPROM_MAGIC_VALUE) + printk(KERN_WARNING DEV_LABEL "(itf %d): warning - EEPROM " + "magic not what expected (got 0x%08X, not 0x%08X)\n", + lanai->number, lanai->magicno, EEPROM_MAGIC_VALUE); + return 0; +} + +#endif /* READ_EEPROM */ + +static inline const u8 *eeprom_mac(const struct lanai_dev *lanai) +{ + return &lanai->eeprom[EEPROM_MAC]; +} + +/* -------------------- INTERRUPT HANDLING UTILITIES: */ + +/* Interrupt types */ +#define INT_STATS (0x00000002) /* Statistics counter overflow */ +#define INT_SOOL (0x00000004) /* SOOL changed state */ +#define INT_LOCD (0x00000008) /* LOCD changed state */ +#define INT_LED (0x00000010) /* LED (HAPPI) changed state */ +#define INT_GPIN (0x00000020) /* GPIN changed state */ +#define INT_PING (0x00000040) /* PING_COUNT fulfilled */ +#define INT_WAKE (0x00000080) /* Lanai wants bus */ +#define INT_CBR0 (0x00000100) /* CBR sched hit VCI 0 */ +#define INT_LOCK (0x00000200) /* Service list overflow */ +#define INT_MISMATCH (0x00000400) /* TX magic list mismatch */ +#define INT_AAL0_STR (0x00000800) /* Non-AAL5 buffer half filled */ +#define INT_AAL0 (0x00001000) /* Non-AAL5 data available */ +#define INT_SERVICE (0x00002000) /* Service list entries available */ +#define INT_TABORTSENT (0x00004000) /* Target abort sent by lanai */ +#define INT_TABORTBM (0x00008000) /* Abort rcv'd as bus master */ +#define INT_TIMEOUTBM (0x00010000) /* No response to bus master */ +#define INT_PCIPARITY (0x00020000) /* Parity error on PCI */ + +/* Sets of the above */ +#define INT_ALL (0x0003FFFE) /* All interrupts */ +#define INT_STATUS (0x0000003C) /* Some status pin changed */ +#define INT_DMASHUT (0x00038000) /* DMA engine got shut down */ +#define INT_SEGSHUT (0x00000700) /* Segmentation got shut down */ + +static inline u32 intr_pending(const struct lanai_dev *lanai) +{ + return reg_read(lanai, IntStatusMasked_Reg); +} + +static inline void intr_enable(const struct lanai_dev *lanai, u32 i) +{ + reg_write(lanai, i, IntControlEna_Reg); +} + +static inline void intr_disable(const struct lanai_dev *lanai, u32 i) +{ + reg_write(lanai, i, IntControlDis_Reg); +} + +/* -------------------- CARD/PCI STATUS: */ + +static void status_message(int itf, const char *name, int status) +{ + static const char *onoff[2] = { "off to on", "on to off" }; + printk(KERN_INFO DEV_LABEL "(itf %d): %s changed from %s\n", + itf, name, onoff[!status]); +} + +static void lanai_check_status(struct lanai_dev *lanai) +{ + u32 new = reg_read(lanai, Status_Reg); + u32 changes = new ^ lanai->status; + lanai->status = new; +#define e(flag, name) \ + if (changes & flag) \ + status_message(lanai->number, name, new & flag) + e(STATUS_SOOL, "SOOL"); + e(STATUS_LOCD, "LOCD"); + e(STATUS_LED, "LED"); + e(STATUS_GPIN, "GPIN"); +#undef e +} + +static void pcistatus_got(int itf, const char *name) +{ + printk(KERN_INFO DEV_LABEL "(itf %d): PCI got %s error\n", itf, name); +} + +static void pcistatus_check(struct lanai_dev *lanai, int clearonly) +{ + u16 s; + int result; + result = pci_read_config_word(lanai->pci, PCI_STATUS, &s); + if (result != PCIBIOS_SUCCESSFUL) { + printk(KERN_ERR DEV_LABEL "(itf %d): can't read PCI_STATUS: " + "%d\n", lanai->number, result); + return; + } + s &= PCI_STATUS_DETECTED_PARITY | PCI_STATUS_SIG_SYSTEM_ERROR | + PCI_STATUS_REC_MASTER_ABORT | PCI_STATUS_REC_TARGET_ABORT | + PCI_STATUS_SIG_TARGET_ABORT | PCI_STATUS_PARITY; + if (s == 0) + return; + result = pci_write_config_word(lanai->pci, PCI_STATUS, s); + if (result != PCIBIOS_SUCCESSFUL) + printk(KERN_ERR DEV_LABEL "(itf %d): can't write PCI_STATUS: " + "%d\n", lanai->number, result); + if (clearonly) + return; +#define e(flag, name, stat) \ + if (s & flag) { \ + pcistatus_got(lanai->number, name); \ + ++lanai->stats.pcierr_##stat; \ + } + e(PCI_STATUS_DETECTED_PARITY, "parity", parity_detect); + e(PCI_STATUS_SIG_SYSTEM_ERROR, "signalled system", serr_set); + e(PCI_STATUS_REC_MASTER_ABORT, "master", master_abort); + e(PCI_STATUS_REC_TARGET_ABORT, "master target", m_target_abort); + e(PCI_STATUS_SIG_TARGET_ABORT, "slave", s_target_abort); + e(PCI_STATUS_PARITY, "master parity", master_parity); +#undef e +} + +/* -------------------- VCC TX BUFFER UTILITIES: */ + +/* space left in tx buffer in bytes */ +static inline int vcc_tx_space(const struct lanai_vcc *lvcc, int endptr) +{ + int r; + r = endptr * 16; + r -= ((unsigned long) lvcc->tx.buf.ptr) - + ((unsigned long) lvcc->tx.buf.start); + r -= 16; /* Leave "bubble" - if start==end it looks empty */ + if (r < 0) + r += lanai_buf_size(&lvcc->tx.buf); + return r; +} + +/* Bit fields in the segmentation buffer descriptor */ +#define DESCRIPTOR_MAGIC (0xD0000000) +#define DESCRIPTOR_AAL5 (0x00008000) +#define DESCRIPTOR_AAL5_STREAM (0x00004000) +#define DESCRIPTOR_CLP (0x00002000) + +/* Add 32-bit descriptor with it's padding */ +static inline void vcc_tx_add_aal5_descriptor(struct lanai_vcc *lvcc, + u32 flags, int len) +{ + int pos; + APRINTK((((unsigned long) lvcc->tx.buf.ptr) & 15) == 0, + "vcc_tx_add_aal5_descriptor: bad ptr=%p\n", lvcc->tx.buf.ptr); + lvcc->tx.buf.ptr += 4; /* Hope the values REALLY don't matter */ + pos = ((unsigned char *) lvcc->tx.buf.ptr) - + (unsigned char *) lvcc->tx.buf.start; + APRINTK((pos & ~0x0001FFF0) == 0, + "vcc_tx_add_aal5_descriptor: bad pos (%d) before, vci=%d, " + "start,ptr,end=%p,%p,%p\n", pos, lvcc->vci, + lvcc->tx.buf.start, lvcc->tx.buf.ptr, lvcc->tx.buf.end); + pos = (pos + len) & (lanai_buf_size(&lvcc->tx.buf) - 1); + APRINTK((pos & ~0x0001FFF0) == 0, + "vcc_tx_add_aal5_descriptor: bad pos (%d) after, vci=%d, " + "start,ptr,end=%p,%p,%p\n", pos, lvcc->vci, + lvcc->tx.buf.start, lvcc->tx.buf.ptr, lvcc->tx.buf.end); + lvcc->tx.buf.ptr[-1] = + cpu_to_le32(DESCRIPTOR_MAGIC | DESCRIPTOR_AAL5 | + ((lvcc->tx.atmvcc->atm_options & ATM_ATMOPT_CLP) ? + DESCRIPTOR_CLP : 0) | flags | pos >> 4); + if (lvcc->tx.buf.ptr >= lvcc->tx.buf.end) + lvcc->tx.buf.ptr = lvcc->tx.buf.start; +} + +/* Add 32-bit AAL5 trailer and leave room for its CRC */ +static inline void vcc_tx_add_aal5trailer(struct lanai_vcc *lvcc, + int len, int cpi, int uu) +{ + APRINTK((((unsigned long) lvcc->tx.buf.ptr) & 15) == 8, + "vcc_tx_add_aal5_descriptor: bad ptr=%p\n", lvcc->tx.buf.ptr); + lvcc->tx.buf.ptr += 2; + lvcc->tx.buf.ptr[-2] = cpu_to_be32((uu << 24) | (cpi << 16) | len); + if (lvcc->tx.buf.ptr >= lvcc->tx.buf.end) + lvcc->tx.buf.ptr = lvcc->tx.buf.start; +} + +static inline void vcc_tx_memcpy(struct lanai_vcc *lvcc, + const unsigned char *src, int n) +{ + unsigned char *e; + int m; + e = ((unsigned char *) lvcc->tx.buf.ptr) + n; + m = e - (unsigned char *) lvcc->tx.buf.end; + if (m < 0) + m = 0; + memcpy(lvcc->tx.buf.ptr, src, n - m); + if (m != 0) { + memcpy(lvcc->tx.buf.start, src + n - m, m); + e = ((unsigned char *) lvcc->tx.buf.start) + m; + } + lvcc->tx.buf.ptr = (u32 *) e; +} + +static inline void vcc_tx_memzero(struct lanai_vcc *lvcc, int n) +{ + unsigned char *e; + int m; + if (n == 0) + return; + e = ((unsigned char *) lvcc->tx.buf.ptr) + n; + m = e - (unsigned char *) lvcc->tx.buf.end; + if (m < 0) + m = 0; + memset(lvcc->tx.buf.ptr, 0, n - m); + if (m != 0) { + memset(lvcc->tx.buf.start, 0, m); + e = ((unsigned char *) lvcc->tx.buf.start) + m; + } + lvcc->tx.buf.ptr = (u32 *) e; +} + +/* Update "butt" register to specify new WritePtr */ +static inline void lanai_endtx(const struct lanai_dev *lanai, + const struct lanai_vcc *lvcc) +{ + int i, ptr = ((unsigned char *) lvcc->tx.buf.ptr) - + (unsigned char *) lvcc->tx.buf.start; + APRINTK((ptr & ~0x0001FFF0) == 0, + "lanai_endtx: bad ptr (%d), vci=%d, start,ptr,end=%p,%p,%p\n", + ptr, lvcc->vci, lvcc->tx.buf.start, lvcc->tx.buf.ptr, + lvcc->tx.buf.end); + /* + * We need to check if the "butt busy" bit is set before + * updating the butt register. In theory this should + * never happen because the ATM card is plenty fast at + * updating the register. Still, we should make sure + */ + for (i = 0; reg_read(lanai, Status_Reg) & STATUS_BUTTBUSY; i++) { + if (i > 50) { + printk(KERN_ERR DEV_LABEL "(itf %d): butt register " + "always busy!\n", lanai->number); + break; + } + udelay(5); + } + reg_write(lanai, (ptr << 12) | lvcc->vci, Butt_Reg); +} + +/* Try to fill the buffer - don't call unless there is backlog */ +static void vcc_tx_unqueue_aal5(struct lanai_dev *lanai, + struct lanai_vcc *lvcc, int endptr) +{ + int pad, n; + struct sk_buff *skb; + int space = vcc_tx_space(lvcc, endptr); + APRINTK(vcc_is_backlogged(lvcc), + "vcc_tx_unqueue() called with empty backlog (vci=%d)\n", + lvcc->vci); + if (space < 64) + return; /* No space for even 1 cell+descriptor */ + if (lvcc->tx.inprogress != NULL) { + APRINTK((lvcc->tx.inprogleft % 48) == 0, + "vcc_tx_unqueue_aal5: bad progleft=%d\n", + lvcc->tx.inprogleft); + if (lvcc->tx.inprogleft + 16 > space) { /* Can't send all? */ + n = aal5_spacefor(space - 16); /* Bytes to send */ + vcc_tx_add_aal5_descriptor(lvcc, + DESCRIPTOR_AAL5_STREAM, n); + pad = lvcc->tx.pptr + n - lvcc->tx.inprogress->tail; + if (pad < 0) + pad = 0; + vcc_tx_memcpy(lvcc, lvcc->tx.pptr, n - pad); + vcc_tx_memzero(lvcc, pad); + lvcc->tx.pptr += n; + lvcc->tx.inprogleft -= n; + goto end; /* Buffer is now full */ + } + /* OK, there's at least space for all of "inprogress" skb */ + vcc_tx_add_aal5_descriptor(lvcc, 0, + lvcc->tx.inprogleft); + pad = lvcc->tx.pptr + lvcc->tx.inprogleft - + lvcc->tx.inprogress->tail; + if (pad >= lvcc->tx.inprogleft) { /* Nothing but pad left */ + APRINTK(lvcc->tx.inprogleft == 48, + "vcc_tx_unqueue_aal5: bad pure-pad=%d\n", + lvcc->tx.inprogleft); + pad = 48; + } else + vcc_tx_memcpy(lvcc, lvcc->tx.pptr, + lvcc->tx.inprogleft - pad); + vcc_tx_memzero(lvcc, pad - 8); + vcc_tx_add_aal5trailer(lvcc, lvcc->tx.inprogress->len, 0, 0); + lanai_free_skb(lvcc->tx.atmvcc, lvcc->tx.inprogress); + lvcc->tx.inprogress = NULL; + space -= lvcc->tx.inprogleft + 16; + atomic_inc(&lvcc->tx.atmvcc->stats->tx); + } + while (space >= 64) { + if ((skb = skb_dequeue(&lvcc->tx.backlog)) == NULL) + break; + n = aal5_size(skb->len); + if (n + 16 > space) { /* Can only send part */ + int m = aal5_spacefor(space - 16); /* Bytes to send */ + vcc_tx_add_aal5_descriptor(lvcc, + DESCRIPTOR_AAL5_STREAM, m); + lvcc->tx.pptr = skb->data + m; + pad = lvcc->tx.pptr - skb->tail; + if (pad < 0) + pad = 0; + vcc_tx_memcpy(lvcc, skb->data, m - pad); + vcc_tx_memzero(lvcc, pad); + lvcc->tx.inprogleft = n - m; + lvcc->tx.inprogress = skb; + goto end; + } + vcc_tx_add_aal5_descriptor(lvcc, 0, n); + pad = n - skb->len - 8; + vcc_tx_memcpy(lvcc, skb->data, skb->len); + vcc_tx_memzero(lvcc, pad); + lanai_free_skb(lvcc->tx.atmvcc, skb); + vcc_tx_add_aal5trailer(lvcc, skb->len, 0, 0); + space -= n + 16; + atomic_inc(&lvcc->tx.atmvcc->stats->tx); + } + if (skb_queue_empty(&lvcc->tx.backlog)) + vcc_unmark_backlogged(lanai, lvcc); + end: + lanai_endtx(lanai, lvcc); +} + +/* Given an skb that we want to transmit either send it now or queue */ +static void vcc_tx_aal5(struct lanai_dev *lanai, struct lanai_vcc *lvcc, + struct sk_buff *skb) +{ + int space, n, pad; + if (vcc_is_backlogged(lvcc)) /* Already backlogged */ + goto queue_it; + space = vcc_tx_space(lvcc, TXREADPTR_GET_PTR(cardvcc_read(lvcc, + vcc_txreadptr))); + if (space < 64) { + vcc_mark_backlogged(lanai, lvcc); /* No space */ + goto queue_it; + } + if (space >= 16 + (n = aal5_size(skb->len))) { + /* We can send the whole thing now */ + vcc_tx_add_aal5_descriptor(lvcc, 0, n); + pad = n - skb->len; + vcc_tx_memcpy(lvcc, skb->data, skb->len); + vcc_tx_memzero(lvcc, pad - 8); + vcc_tx_add_aal5trailer(lvcc, skb->len, 0, 0); + lanai_free_skb(lvcc->tx.atmvcc, skb); + atomic_inc(&lvcc->tx.atmvcc->stats->tx); + } else { /* Space for only part of skb */ + int bytes = aal5_spacefor(space - 16); /* Bytes to send */ + vcc_tx_add_aal5_descriptor(lvcc, + DESCRIPTOR_AAL5_STREAM, bytes); + pad = bytes - skb->len; + if (pad < 0) + pad = 0; + vcc_tx_memcpy(lvcc, skb->data, bytes - pad); + vcc_tx_memzero(lvcc, pad); + lvcc->tx.inprogress = skb; + lvcc->tx.inprogleft = n - bytes; + lvcc->tx.pptr = skb->data + bytes; + vcc_mark_backlogged(lanai, lvcc); + } + lanai_endtx(lanai, lvcc); + return; + queue_it: + skb_queue_tail(&lvcc->tx.backlog, skb); +} + +static void vcc_tx_unqueue_aal0(struct lanai_dev *lanai, + struct lanai_vcc *lvcc, int endptr) +{ + printk(KERN_INFO DEV_LABEL + ": vcc_tx_unqueue_aal0: not implemented\n"); +} + +static void vcc_tx_aal0(struct lanai_dev *lanai, struct lanai_vcc *lvcc, + struct sk_buff *skb) +{ + printk(KERN_INFO DEV_LABEL ": vcc_tx_aal0: not implemented\n"); + /* Remember to increment lvcc->tx.atmvcc->stats->tx */ + lanai_free_skb(lvcc->tx.atmvcc, skb); +} + +/* Try to undequeue 1 backlogged vcc */ +static void iter_dequeue(struct lanai_dev *lanai, vci_t vci) +{ + struct lanai_vcc *lvcc = lanai->vccs[vci]; + int endptr; + if (lvcc == NULL || !vcc_is_backlogged(lvcc)) { + vci_bitfield_clear(&lanai->backlog_vccs, vci); + return; + } + endptr = TXREADPTR_GET_PTR(cardvcc_read(lvcc, vcc_txreadptr)); + lvcc->tx.unqueue(lanai, lvcc, endptr); +} + +/* Try a dequeue on all backlogged connections */ +static inline void vcc_tx_dequeue_all(struct lanai_dev *lanai) +{ + unsigned long flags; + spin_lock_irqsave(&lanai->txlock, flags); + vci_bitfield_iterate(lanai, &lanai->backlog_vccs, iter_dequeue); + spin_unlock_irqrestore(&lanai->txlock, flags); +} + +/* -------------------- VCC RX BUFFER UTILITIES: */ + +/* unlike the _tx_ cousins, this doesn't update ptr */ +static inline void vcc_rx_memcpy(unsigned char *dest, + const struct lanai_vcc *lvcc, int n) +{ + int m = ((const unsigned char *) lvcc->rx.buf.ptr) + n - + ((const unsigned char *) (lvcc->rx.buf.end)); + if (m < 0) + m = 0; + memcpy(dest, lvcc->rx.buf.ptr, n - m); + memcpy(dest + n - m, lvcc->rx.buf.start, m); +} + +/* Receive AAL5 data on a VCC with a particular endptr */ +static void vcc_rx_aal5(struct lanai_vcc *lvcc, int endptr) +{ + int size; + struct sk_buff *skb; + /*const*/ u32 *x, *end = &lvcc->rx.buf.start[endptr * 4]; + int n = ((unsigned long) end) - ((unsigned long) lvcc->rx.buf.ptr); + if (n < 0) + n += lanai_buf_size(&lvcc->rx.buf); + APRINTK(n >= 0 && n < lanai_buf_size(&lvcc->rx.buf) && !(n & 15), + "vcc_rx_aal5: n out of range (%d/%d)\n", + n, lanai_buf_size(&lvcc->rx.buf)); + /* Recover the second-to-last word to get true pdu length */ + if ((x = &end[-2]) < lvcc->rx.buf.start) + x = &lvcc->rx.buf.end[-2]; + size = be32_to_cpup(x) & 0xffff; + if (n != aal5_size(size)) { /* Make sure size matches padding */ + printk(KERN_INFO DEV_LABEL "(itf %d): Got bad AAL5 length " + "on vci=%d - size=%d n=%d\n", + lvcc->rx.atmvcc->dev->number, lvcc->vci, size, n); + lvcc->stats.x.aal5.rx_badlen++; + goto out; + } + skb = atm_alloc_charge(lvcc->rx.atmvcc, size, GFP_ATOMIC); + if (skb == NULL) { + lvcc->stats.rx_nomem++; + goto out; + } + skb_put(skb, size); + ATM_SKB(skb)->vcc = lvcc->rx.atmvcc; + skb->stamp = xtime; + vcc_rx_memcpy(skb->data, lvcc, size); + lvcc->rx.atmvcc->push(lvcc->rx.atmvcc, skb); + atomic_inc(&lvcc->rx.atmvcc->stats->rx); + out: + lvcc->rx.buf.ptr = end; + cardvcc_write(lvcc, endptr, vcc_rxreadptr); +} + +static void vcc_rx_aal0(struct lanai_dev *lanai) +{ + printk(KERN_INFO DEV_LABEL ": vcc_rx_aal0: not implemented\n"); + /* Remember to get vcclist_read_lock while looking up VC */ + /* Remember to increment lvcc->rx.atmvcc->stats->rx */ +} + +/* -------------------- MANAGING HOST-BASED VCC TABLE: */ + +/* Decide whether to use vmalloc or get_free_page for VCC table */ +#if (NUM_VCI * BITS_PER_LONG) <= PAGE_SIZE +#define VCCTABLE_GETFREEPAGE +#else +#include +#endif + +static int __init vcc_table_allocate(struct lanai_dev *lanai) +{ +#ifdef VCCTABLE_GETFREEPAGE + APRINTK((lanai->num_vci) * sizeof(struct lanai_vcc *) <= PAGE_SIZE, + "vcc table > PAGE_SIZE!"); + lanai->vccs = (struct lanai_vcc **) get_free_page(GFP_KERNEL); + return (lanai->vccs == NULL) ? -ENOMEM : 0; +#else + int bytes = (lanai->num_vci) * sizeof(struct lanai_vcc *); + lanai->vccs = (struct lanai_vcc **) vmalloc(bytes); + if (lanai->vccs == NULL) + return -ENOMEM; + memset(lanai->vccs, 0, bytes); + return 0; +#endif +} + +static inline void vcc_table_deallocate(const struct lanai_dev *lanai) +{ +#ifdef VCCTABLE_GETFREEPAGE + free_page((unsigned long) lanai->vccs); +#else + vfree(lanai->vccs); +#endif +} + +/* Allocate a fresh lanai_vcc, with the appropriate things cleared */ +static inline struct lanai_vcc *new_lanai_vcc(void) +{ + struct lanai_vcc *lvcc; + lvcc = (struct lanai_vcc *) kmalloc(sizeof(*lvcc), GFP_KERNEL); + if (lvcc != NULL) { + lvcc->vbase = 0; + lvcc->rx.atmvcc = lvcc->tx.atmvcc = NULL; + lvcc->nref = 0; + memset(&lvcc->stats, 0, sizeof lvcc->stats); + lvcc->rx.buf.start = lvcc->tx.buf.start = NULL; + skb_queue_head_init(&lvcc->tx.backlog); + lvcc->tx.inprogress = NULL; +#ifdef DEBUG + lvcc->tx.unqueue = NULL; + lvcc->vci = -1; +#endif + } + return lvcc; +} + +static int lanai_get_sized_buffer(int number, struct lanai_buffer *buf, + int max_sdu, int multiplier, int min, const char *name) +{ + int size; + if (max_sdu < 1) + max_sdu = 1; + max_sdu = aal5_size(max_sdu); + size = (max_sdu + 16) * multiplier + 16; + lanai_buf_allocate(buf, size, min); + if (buf->order < 0) + return -ENOMEM; + if (lanai_buf_size(buf) < size) + printk(KERN_WARNING DEV_LABEL "(itf %d): wanted %d bytes " + "for %s buffer, got only %d\n", number, size, name, + lanai_buf_size(buf)); + DPRINTK("Allocated %d byte %s buffer\n", lanai_buf_size(buf), name); + return 0; +} + +/* Setup a RX buffer for a currently unbound AAL5 vci */ +static inline int lanai_setup_rx_vci_aal5(int number, struct lanai_vcc *lvcc, + const struct atm_qos *qos) +{ + return lanai_get_sized_buffer(number, &lvcc->rx.buf, + qos->rxtp.max_sdu, AAL5_RX_MULTIPLIER, qos->rxtp.max_sdu + 32, + "RX"); +} + +/* Setup a TX buffer for a currently unbound AAL5 vci */ +static int lanai_setup_tx_vci(int number, struct lanai_vcc *lvcc, + const struct atm_qos *qos) +{ + int max_sdu, multiplier; + if (qos->aal == ATM_AAL0) { + lvcc->tx.unqueue = vcc_tx_unqueue_aal0; + max_sdu = ATM_CELL_SIZE - 1; + multiplier = AAL0_TX_MULTIPLIER; + } else { + lvcc->tx.unqueue = vcc_tx_unqueue_aal5; + max_sdu = qos->txtp.max_sdu; + multiplier = AAL5_TX_MULTIPLIER; + } + return lanai_get_sized_buffer(number, &lvcc->tx.buf, max_sdu, + multiplier, 80, "TX"); +} + +static inline void host_vcc_bind(struct lanai_dev *lanai, + struct lanai_vcc *lvcc, vci_t vci) +{ + if (lvcc->vbase != 0) + return; /* We already were bound in the other direction */ + DPRINTK("Binding vci %d\n", vci); +#ifdef USE_POWERDOWN + if (lanai->nbound++ == 0) { + DPRINTK("Coming out of powerdown\n"); + lanai->conf1 &= ~CONFIG1_POWERDOWN; + conf1_write(lanai); + conf2_write(lanai); + } +#endif + lvcc->vbase = cardvcc_addr(lanai, vci); + lanai->vccs[lvcc->vci = vci] = lvcc; +} + +static inline void host_vcc_unbind(struct lanai_dev *lanai, + struct lanai_vcc *lvcc) +{ + if (lvcc->vbase == 0) + return; /* This vcc was never bound */ + DPRINTK("Unbinding vci %d\n", lvcc->vci); + lvcc->vbase = 0; + lanai->vccs[lvcc->vci] = NULL; +#ifdef USE_POWERDOWN + if (--lanai->nbound == 0) { + DPRINTK("Going into powerdown\n"); + lanai->conf1 |= CONFIG1_POWERDOWN; + conf1_write(lanai); + } +#endif +} + +/* -------------------- RESET CARD: */ + +static void lanai_reset(struct lanai_dev *lanai) +{ + printk(KERN_CRIT DEV_LABEL "(itf %d): *NOT* reseting - not " + "implemented\n", lanai->number); + /* TODO */ + /* The following is just a hack until we write the real + * resetter - at least ack whatever interrupt sent us + * here + */ + reg_write(lanai, INT_ALL, IntAck_Reg); + lanai->stats.card_reset++; +} + +/* -------------------- SERVICE LIST UTILITIES: */ + +/* + * Allocate service buffer and tell card about it + */ +static int __init service_buffer_allocate(struct lanai_dev *lanai) +{ + lanai_buf_allocate(&lanai->service, SERVICE_ENTRIES * 4, 0); + if (lanai->service.order < 0) + return -ENOMEM; + DPRINTK("allocated service buffer at 0x%08lX, size %d(%d)\n", + (unsigned long) lanai->service.start, + lanai_buf_size(&lanai->service), + lanai_buf_size_cardorder(&lanai->service)); + /* Clear ServWrite register to be safe */ + reg_write(lanai, 0, ServWrite_Reg); + /* ServiceStuff register contains size and address of buffer */ + reg_write(lanai, + SSTUFF_SET_SIZE(lanai_buf_size_cardorder(&lanai->service)) | + SSTUFF_SET_ADDR(lanai_buf_dmaaddr(&lanai->service)), + ServiceStuff_Reg); + return 0; +} + +static inline void service_buffer_deallocate(struct lanai_dev *lanai) +{ + lanai_buf_deallocate(&lanai->service); +} + +/* Bitfields in service list */ +#define SERVICE_TX (0x80000000) /* Was from transmission */ +#define SERVICE_TRASH (0x40000000) /* RXed PDU was trashed */ +#define SERVICE_CRCERR (0x20000000) /* RXed PDU had CRC error */ +#define SERVICE_CI (0x10000000) /* RXed PDU had CI set */ +#define SERVICE_CLP (0x08000000) /* RXed PDU had CLP set */ +#define SERVICE_STREAM (0x04000000) /* RX Stream mode */ +#define SERVICE_GET_VCI(x) (((x)>>16)&0x3FF) +#define SERVICE_GET_END(x) ((x)&0x1FFF) + +/* Handle one thing from the service list - returns true if it marked a + * VCC ready for xmit + */ +static int handle_service(struct lanai_dev *lanai, u32 s) +{ + vci_t vci = SERVICE_GET_VCI(s); + struct lanai_vcc *lvcc; + vcclist_read_lock(); + lvcc = lanai->vccs[vci]; + if (lvcc == NULL) { + vcclist_read_unlock(); + DPRINTK("(itf %d) got service entry 0x%X for nonexistent " + "vcc %d\n", lanai->number, s, vci); + if (s & SERVICE_TX) + lanai->stats.service_novcc_tx++; + else + lanai->stats.service_novcc_rx++; + return 0; + } + if (s & SERVICE_TX) { /* segmentation interrupt */ + if (lvcc->tx.atmvcc == NULL) { + vcclist_read_unlock(); + DPRINTK("(itf %d) got service entry 0x%X for non-TX " + "vcc %d\n", lanai->number, s, vci); + lanai->stats.service_notx++; + return 0; + } + vci_bitfield_set(&lanai->transmit_ready, vci); + lvcc->tx.endptr = SERVICE_GET_END(s); + vcclist_read_unlock(); + return 1; + } + if (lvcc->rx.atmvcc == NULL) { + vcclist_read_unlock(); + DPRINTK("(itf %d) got service entry 0x%X for non-RX " + "vcc %d\n", lanai->number, s, vci); + lanai->stats.service_norx++; + return 0; + } + if (lvcc->rx.atmvcc->qos.aal != ATM_AAL5) { + vcclist_read_unlock(); + DPRINTK("(itf %d) got RX service entry 0x%X for non-AAL5 " + "vcc %d\n", lanai->number, s, vci); + lanai->stats.service_rxnotaal5++; + atomic_inc(&lvcc->rx.atmvcc->stats->rx_err); + return 0; + } + if ((s & (SERVICE_TRASH | SERVICE_STREAM | SERVICE_CRCERR)) == 0) { + vcc_rx_aal5(lvcc, SERVICE_GET_END(s)); + vcclist_read_unlock(); + return 0; + } + if (s & SERVICE_TRASH) { + int bytes; + vcclist_read_unlock(); + DPRINTK("got trashed rx pdu on vci %d\n", vci); + atomic_inc(&lvcc->rx.atmvcc->stats->rx_err); + lvcc->stats.x.aal5.service_trash++; + bytes = (SERVICE_GET_END(s) * 16) - + (((unsigned long) lvcc->rx.buf.ptr) - + ((unsigned long) lvcc->rx.buf.start)) + 47; + if (bytes < 0) + bytes += lanai_buf_size(&lvcc->rx.buf); + lanai->stats.ovfl_trash += (bytes / 48); + return 0; + } + if (s & SERVICE_STREAM) { + vcclist_read_unlock(); + atomic_inc(&lvcc->rx.atmvcc->stats->rx_err); + lvcc->stats.x.aal5.service_stream++; + printk(KERN_ERR DEV_LABEL "(itf %d): Got AAL5 stream " + "PDU on VCI %d!\n", lanai->number, vci); + lanai_reset(lanai); + return 0; + } + DPRINTK("got rx crc error on vci %d\n", vci); + atomic_inc(&lvcc->rx.atmvcc->stats->rx_err); + lvcc->stats.x.aal5.service_rxcrc++; + lvcc->rx.buf.ptr = &lvcc->rx.buf.start[SERVICE_GET_END(s) * 4]; + cardvcc_write(lvcc, SERVICE_GET_END(s), vcc_rxreadptr); + vcclist_read_unlock(); + return 0; +} + +/* Try transmitting on all VCIs that we marked ready to serve */ +static void iter_transmit(struct lanai_dev *lanai, vci_t vci) +{ + struct lanai_vcc *lvcc = lanai->vccs[vci]; + if (!vcc_is_backlogged(lvcc)) + return; + lvcc->tx.unqueue(lanai, lvcc, lvcc->tx.endptr); +} + +/* Run service queue -- called from interrupt context or with + * interrupts otherwise disabled and with the lanai->servicelock + * lock held + */ +static void run_service(struct lanai_dev *lanai) +{ + int ntx = 0; + u32 wreg = reg_read(lanai, ServWrite_Reg); + const u32 *end = lanai->service.start + wreg; + while (lanai->service.ptr != end) { + ntx += handle_service(lanai, + le32_to_cpup(lanai->service.ptr++)); + if (lanai->service.ptr >= lanai->service.end) + lanai->service.ptr = lanai->service.start; + } + reg_write(lanai, wreg, ServRead_Reg); + if (ntx != 0) { + spin_lock(&lanai->txlock); + vcclist_read_lock(); + vci_bitfield_iterate(lanai, &lanai->transmit_ready, + iter_transmit); + vci_bitfield_init(&lanai->transmit_ready); + vcclist_read_unlock(); + spin_unlock(&lanai->txlock); + } +} + +/* -------------------- GATHER STATISTICS: */ + +static void get_statistics(struct lanai_dev *lanai) +{ + u32 statreg = reg_read(lanai, Statistics_Reg); + lanai->stats.atm_ovfl += STATS_GET_FIFO_OVFL(statreg); + lanai->stats.hec_err += STATS_GET_HEC_ERR(statreg); + lanai->stats.vci_trash += STATS_GET_BAD_VCI(statreg); + lanai->stats.ovfl_trash += STATS_GET_BUF_OVFL(statreg); +} + +/* -------------------- POLLING TIMER: */ + +static void lanai_timed_poll(unsigned long arg) +{ +#ifndef DEBUG_RW + struct lanai_dev *lanai = (struct lanai_dev *) arg; + unsigned long flags; +#ifdef USE_POWERDOWN + if (lanai->conf1 & CONFIG1_POWERDOWN) + return; +#endif + spin_lock_irqsave(&lanai->servicelock, flags); + run_service(lanai); + spin_unlock_irqrestore(&lanai->servicelock, flags); + vcc_tx_dequeue_all(lanai); + get_statistics(lanai); + mod_timer(&lanai->timer, jiffies + LANAI_POLL_PERIOD); +#endif /* DEBUG_RW */ +} + +static inline void lanai_timed_poll_start(struct lanai_dev *lanai) +{ + init_timer(&lanai->timer); + lanai->timer.expires = jiffies + LANAI_POLL_PERIOD; + lanai->timer.data = (unsigned long) lanai; + lanai->timer.function = lanai_timed_poll; + add_timer(&lanai->timer); +} + +static inline void lanai_timed_poll_stop(struct lanai_dev *lanai) +{ + del_timer(&lanai->timer); +} + +/* -------------------- INTERRUPT SERVICE: */ + +static inline void lanai_int_1(struct lanai_dev *lanai, u32 reason) +{ + u32 ack = 0; + if (reason & INT_SERVICE) { + ack = INT_SERVICE; + spin_lock(&lanai->servicelock); + run_service(lanai); + spin_unlock(&lanai->servicelock); + } + if (reason & (INT_AAL0_STR | INT_AAL0)) { + ack |= reason & (INT_AAL0_STR | INT_AAL0); + vcc_rx_aal0(lanai); + } + if (reason & INT_STATS) { + reason &= ~INT_STATS; /* No need to ack */ + get_statistics(lanai); + } + if (reason & INT_STATUS) { + ack |= reason & INT_STATUS; + lanai_check_status(lanai); + } + if (reason & INT_DMASHUT) { + printk(KERN_ERR DEV_LABEL "(itf %d): driver error - DMA " + "shutdown, reason=0x%08X, address=0x%08X\n", + lanai->number, reason & INT_DMASHUT, + reg_read(lanai, DMA_Addr_Reg)); + if (reason & INT_TABORTBM) { + lanai_reset(lanai); + return; + } + ack |= (reason & INT_DMASHUT); + printk(KERN_ERR DEV_LABEL "(itf %d): re-enabling DMA\n", + lanai->number); + conf1_write(lanai); + lanai->stats.dma_reenable++; + pcistatus_check(lanai, 0); + } + if (reason & INT_TABORTSENT) { + ack |= (reason & INT_TABORTSENT); + printk(KERN_ERR DEV_LABEL "(itf %d): sent PCI target abort\n", + lanai->number); + pcistatus_check(lanai, 0); + } + if (reason & INT_SEGSHUT) { + printk(KERN_ERR DEV_LABEL "(itf %d): driver error - " + "segmentation shutdown, reason=0x%08X\n", lanai->number, + reason & INT_SEGSHUT); + lanai_reset(lanai); + return; + } + if (reason & (INT_PING | INT_WAKE)) { + printk(KERN_ERR DEV_LABEL "(itf %d): driver error - " + "unexpected interrupt 0x%08X, resetting\n", + lanai->number, reason & (INT_PING | INT_WAKE)); + lanai_reset(lanai); + return; + } +#ifdef DEBUG + if (ack != reason) { + DPRINTK("unacked ints: 0x%08X\n", reason & ~ack); + ack = reason; + } +#endif + if (ack != 0) + reg_write(lanai, ack, IntAck_Reg); +} + +static void lanai_int(int irq, void *devid, struct pt_regs *regs) +{ + struct lanai_dev *lanai = (struct lanai_dev *) devid; + u32 reason; + (void) irq; (void) regs; /* unused variables */ +#ifdef USE_POWERDOWN + if (lanai->conf1 & CONFIG1_POWERDOWN) { + lanai->conf1 &= ~CONFIG1_POWERDOWN; + conf1_write(lanai); + printk(KERN_WARNING DEV_LABEL "(itf %d): Got interrupt " + "0x%08X while in POWERDOWN, powering up\n", lanai->conf1, + intr_pending(lanai)); + conf2_write(lanai); + } +#endif + while ((reason = intr_pending(lanai)) != 0) + lanai_int_1(lanai, reason); +} + +/* TODO - it would be nice if we could use the "delayed interrupt" system + * to some advantage + */ + +/* -------------------- CHECK BOARD ID/REV: */ + +/* + * The board id and revision are stored both in the reset register and + * in the PCI configuration space - the documentation says to check + * each of them. If revp!=NULL we store the revision there + */ +static int check_board_id_and_rev(const char *name, u32 val, int *revp) +{ + DPRINTK("%s says board_id=%d, board_rev=%d\n", name, + RESET_GET_BOARD_ID(val), RESET_GET_BOARD_REV(val)); + if (RESET_GET_BOARD_ID(val) != BOARD_ID_LANAI256) { + printk(KERN_ERR DEV_LABEL ": Found %s board-id %d -- not a " + "Lanai 25.6\n", name, RESET_GET_BOARD_ID(val)); + return -ENODEV; + } + if (revp != NULL) + *revp = RESET_GET_BOARD_REV(val); + return 0; +} + +/* -------------------- PCI INITIALIZATION/SHUTDOWN: */ + +static inline int __init lanai_pci_start(struct lanai_dev *lanai) +{ + struct pci_dev *pci = lanai->pci; + int result; + u16 w; + /* Get the pci revision byte */ + result = pci_read_config_byte(pci, PCI_REVISION_ID, + &lanai->pci_revision); + if (result != PCIBIOS_SUCCESSFUL) { + printk(KERN_ERR DEV_LABEL "(itf %d): can't read " + "PCI_REVISION_ID: %d\n", lanai->number, result); + return -EINVAL; + } + result = pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &w); + if (result != PCIBIOS_SUCCESSFUL) { + printk(KERN_ERR DEV_LABEL "(itf %d): can't read "" + PCI_SUBSYSTEM_ID: %d\n", lanai->number, result); + return -EINVAL; + } + if ((result = check_board_id_and_rev("PCI", w, NULL)) != 0) + return result; + /* Set latency timer to zero as per lanai docs */ + result = pci_write_config_byte(pci, PCI_LATENCY_TIMER, 0); + if (result != PCIBIOS_SUCCESSFUL) { + printk(KERN_ERR DEV_LABEL "(itf %d): can't write " + "PCI_LATENCY_TIMER: %d\n", lanai->number, result); + return -EINVAL; + } + result = pci_read_config_word(pci, PCI_COMMAND, &w); + if (result != PCIBIOS_SUCCESSFUL) { + printk(KERN_ERR DEV_LABEL "(itf %d): can't read " + "PCI_COMMAND: %d\n", lanai->number, result); + return -EINVAL; + } + w |= (PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_SERR | + PCI_COMMAND_PARITY); + result = pci_write_config_word(pci, PCI_COMMAND, w); + if (result != PCIBIOS_SUCCESSFUL) { + printk(KERN_ERR DEV_LABEL "(itf %d): can't " + "write PCI_COMMAND: %d\n", lanai->number, result); + return -EINVAL; + } + pcistatus_check(lanai, 1); + pcistatus_check(lanai, 0); + return 0; +} + +static void lanai_pci_stop(struct lanai_dev *lanai) +{ + struct pci_dev *pci = lanai->pci; + int result; + u16 pci_command; + result = pci_read_config_word(pci, PCI_COMMAND, &pci_command); + if (result != PCIBIOS_SUCCESSFUL) { + printk(KERN_ERR DEV_LABEL "(itf %d): can't " + "read PCI_COMMAND: %d\n", lanai->number, result); + return; + } + pci_command &= ~(PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER); + result = pci_write_config_word(pci, PCI_COMMAND, pci_command); + if (result != PCIBIOS_SUCCESSFUL) + printk(KERN_ERR DEV_LABEL "(itf %d): can't " + "write PCI_COMMAND: %d\n", lanai->number, result); +} + +/* -------------------- VPI/VCI ALLOCATION: */ + +/* + * We _can_ use VCI==0 for normal traffic, but only for UBR (or we'll + * get a CBRZERO interrupt), and we can use it only if noone is receiving + * AAL0 traffic (since they will use the same queue) - according to the + * docs we shouldn't even use it for AAL0 traffic + */ +static inline int vci0_is_ok(struct lanai_dev *lanai, + const struct atm_qos *qos) +{ + if (qos->txtp.traffic_class == ATM_CBR || qos->aal == ATM_AAL0) + return 0; + if (qos->rxtp.traffic_class != ATM_NONE) { + if (lanai->naal0 != 0) + return 0; + lanai->conf2 |= CONFIG2_VCI0_NORMAL; +#ifdef USE_POWERDOWN + if ((lanai->conf1 & CONFIG1_POWERDOWN) == 0) +#endif + conf2_write(lanai); + } + return 1; +} + +/* return true if vci is currently unused, or if requested qos is + * compatible + */ +static int vci_is_ok(struct lanai_dev *lanai, vci_t vci, + const struct atm_vcc *atmvcc) +{ + const struct atm_qos *qos = &atmvcc->qos; + const struct lanai_vcc *lvcc = lanai->vccs[vci]; + if (vci == 0 && !vci0_is_ok(lanai, qos)) + return 0; + if (lvcc != NULL) { + if (qos->rxtp.traffic_class != ATM_NONE && + lvcc->rx.atmvcc != NULL && lvcc->rx.atmvcc != atmvcc) + return 0; + if (qos->txtp.traffic_class != ATM_NONE && + lvcc->tx.atmvcc != NULL && lvcc->tx.atmvcc != atmvcc) + return 0; + if (qos->txtp.traffic_class == ATM_CBR && + lanai->cbrvcc != NULL && lanai->cbrvcc != atmvcc) + return 0; + } + if (qos->aal == ATM_AAL0 && lanai->naal0 == 0 && + qos->rxtp.traffic_class != ATM_NONE) { + const struct lanai_vcc *vci0 = lanai->vccs[0]; + if (vci0 != NULL && vci0->rx.atmvcc != NULL) + return 0; + lanai->conf2 &= ~CONFIG2_VCI0_NORMAL; +#ifdef USE_POWERDOWN + if ((lanai->conf1 & CONFIG1_POWERDOWN) == 0) +#endif + conf2_write(lanai); + } + return 1; +} + +static int lanai_normalize_ci(struct lanai_dev *lanai, + const struct atm_vcc *atmvcc, short *vpip, vci_t *vcip) +{ + switch (*vpip) { + case ATM_VPI_ANY: + *vpip = 0; + /* FALLTHROUGH */ + case 0: + break; + default: + return -EADDRINUSE; + } + switch (*vcip) { + case ATM_VCI_ANY: + for (*vcip = ATM_NOT_RSV_VCI; *vcip < lanai->num_vci; + (*vcip)++) + if (vci_is_ok(lanai, *vcip, atmvcc)) + return 0; + return -EADDRINUSE; + default: + if (*vcip >= lanai->num_vci || *vcip < 0 || + !vci_is_ok(lanai, *vcip, atmvcc)) + return -EADDRINUSE; + } + return 0; +} + +/* -------------------- MANAGE CBR: */ + +/* + * CBR ICG is stored as a fixed-point number with 4 fractional bits. + * Note that storing a number greater than 2046.0 will result in + * incorrect shaping + */ +#define CBRICG_FRAC_BITS (4) +#define CBRICG_MAX (2046 << CBRICG_FRAC_BITS) + +/* + * ICG is related to PCR with the formula PCR = MAXPCR / (ICG + 1) + * where MAXPCR is (according to the docs) 25600000/(54*8), + * which is equal to (3125<<9)/27. + * + * Solving for ICG, we get: + * ICG = MAXPCR/PCR - 1 + * ICG = (3125<<9)/(27*PCR) - 1 + * ICG = ((3125<<9) - (27*PCR)) / (27*PCR) + * + * The end result is supposed to be a fixed-point number with FRAC_BITS + * bits of a fractional part, so we keep everything in the numerator + * shifted by that much as we compute + * + */ +static int pcr_to_cbricg(/*const*/ struct atm_qos *qos) +{ + int rounddown = 0; /* 1 = Round PCR down, i.e. round ICG _up_ */ + int x, icg, pcr = atm_pcr_goal(&qos->txtp); + if (pcr == 0) /* Use maximum bandwidth */ + return 0; + if (pcr < 0) { + rounddown = 1; + pcr = -pcr; + } + x = pcr * 27; + icg = (3125 << (9 + CBRICG_FRAC_BITS)) - (x << CBRICG_FRAC_BITS); + if (rounddown) + icg += x - 1; + icg /= x; + if (icg > CBRICG_MAX) + icg = CBRICG_MAX; + DPRINTK("pcr_to_cbricg: pcr=%d rounddown=%c icg=%d\n", + pcr, rounddown ? 'Y' : 'N', icg); + return icg; +} + +static inline void lanai_cbr_setup(struct lanai_dev *lanai) +{ + reg_write(lanai, pcr_to_cbricg(&lanai->cbrvcc->qos), CBR_ICG_Reg); + reg_write(lanai, lanai->cbrvcc->vci, CBR_PTR_Reg); + lanai->conf2 |= CONFIG2_CBR_ENABLE; + conf2_write(lanai); +} + +static inline void lanai_cbr_shutdown(struct lanai_dev *lanai) +{ + lanai->conf2 &= ~CONFIG2_CBR_ENABLE; + conf2_write(lanai); +} + +/* -------------------- OPERATIONS: */ + +/* setup a newly detected device */ +static int __init lanai_dev_open(struct atm_dev *atmdev) +{ + struct lanai_dev *lanai = (struct lanai_dev *) atmdev->dev_data; + unsigned long raw_base; + int result; + + DPRINTK("In lanai_dev_open()\n"); + /* Basic device fields */ + lanai->number = atmdev->number; + lanai->num_vci = NUM_VCI; + vci_bitfield_init(&lanai->backlog_vccs); + vci_bitfield_init(&lanai->transmit_ready); + lanai->naal0 = 0; +#ifdef USE_POWERDOWN + lanai->nbound = 0; +#endif + lanai->cbrvcc = NULL; + memset(&lanai->stats, 0, sizeof lanai->stats); + spin_lock_init(&lanai->txlock); + spin_lock_init(&lanai->servicelock); + atmdev->ci_range.vpi_bits = 0; + atmdev->ci_range.vci_bits = 0; + while (1 << atmdev->ci_range.vci_bits < lanai->num_vci) + atmdev->ci_range.vci_bits++; + atmdev->link_rate = ((25600000 / 8 - 8000) / 54); + + /* 3.2: PCI initialization */ + if ((result = lanai_pci_start(lanai)) != 0) + goto error; + raw_base = (bus_addr_t) lanai->pci->resource[0].start; + lanai->base = (bus_addr_t) ioremap(raw_base, LANAI_MAPPING_SIZE); + if (lanai->base == 0) { + printk(KERN_ERR DEV_LABEL ": couldn't remap I/O space\n"); + goto error_pci; + } + /* 3.3: Reset lanai and PHY */ + reset_board(lanai); + lanai->conf1 = reg_read(lanai, Config1_Reg); + lanai->conf1 &= ~(CONFIG1_GPOUT1 | CONFIG1_POWERDOWN | + CONFIG1_MASK_LEDMODE); + lanai->conf1 |= CONFIG1_SET_LEDMODE(LEDMODE_NOT_SOOL); + reg_write(lanai, lanai->conf1 | CONFIG1_GPOUT1, Config1_Reg); + udelay(1000); + conf1_write(lanai); + + /* + * 3.4: Turn on endian mode for big-endian hardware + * We don't actually want to do this - the actual bit fields + * in the endian register are not documented anywhere. + * Instead we do the bit-flipping ourselves on big-endian + * hardware. + * + * 3.5: get the board ID/rev by reading the reset register + */ + result = check_board_id_and_rev("register", + reg_read(lanai, Reset_Reg), &lanai->board_rev); + if (result != 0) + goto error_unmap; + + /* 3.6: read EEPROM */ + if ((result = eeprom_read(lanai)) != 0) + goto error_unmap; + if ((result = eeprom_validate(lanai)) != 0) + goto error_unmap; + + /* 3.7: re-reset PHY, do loopback tests, setup PHY */ + reg_write(lanai, lanai->conf1 | CONFIG1_GPOUT1, Config1_Reg); + udelay(1000); + conf1_write(lanai); + /* TODO - loopback tests */ + lanai->conf1 |= (CONFIG1_GPOUT2 | CONFIG1_GPOUT3 | CONFIG1_DMA_ENABLE); + conf1_write(lanai); + + /* 3.8/3.9: test and initialize card SRAM */ + if ((result = sram_test_and_clear(lanai)) != 0) + goto error_unmap; + + /* 3.10: initialize lanai registers */ + lanai->conf1 |= CONFIG1_DMA_ENABLE; + conf1_write(lanai); + if ((result = service_buffer_allocate(lanai)) != 0) + goto error_unmap; + if ((result = vcc_table_allocate(lanai)) != 0) + goto error_service; + lanai->conf2 = (lanai->num_vci >= 512 ? CONFIG2_HOWMANY : 0) | + CONFIG2_HEC_DROP | /* ??? */ CONFIG2_PTI7_MODE; + conf2_write(lanai); + reg_write(lanai, TX_FIFO_DEPTH, TxDepth_Reg); + reg_write(lanai, 0, CBR_ICG_Reg); /* CBR defaults to no limit */ + if ((result = request_irq(lanai->pci->irq, lanai_int, SA_SHIRQ, + "lanai", lanai)) != 0) { + printk(KERN_ERR DEV_LABEL ": can't allocate interrupt\n"); + goto error_vcctable; + } + MOD_INC_USE_COUNT; /* At this point we can't fail */ + intr_enable(lanai, INT_ALL & ~(INT_PING | INT_WAKE)); + /* 3.11: initialize loop mode (i.e. turn looping off) */ + lanai->conf1 = (lanai->conf1 & ~CONFIG1_MASK_LOOPMODE) | + CONFIG1_SET_LOOPMODE(LOOPMODE_NORMAL) | + CONFIG1_GPOUT2 | CONFIG1_GPOUT3; + conf1_write(lanai); + lanai->status = reg_read(lanai, Status_Reg); + /* We're now done initializing this card */ +#ifdef USE_POWERDOWN + lanai->conf1 |= CONFIG1_POWERDOWN; + conf1_write(lanai); +#endif + memcpy(atmdev->esi, eeprom_mac(lanai), ESI_LEN); + lanai_timed_poll_start(lanai); + printk(KERN_NOTICE DEV_LABEL "(itf %d): rev.%d, base=0x%lx, irq=%d " + "(%02X-%02X-%02X-%02X-%02X-%02X)\n", lanai->number, + lanai->pci_revision, (long) lanai->base, lanai->pci->irq, + atmdev->esi[0], atmdev->esi[1], atmdev->esi[2], + atmdev->esi[3], atmdev->esi[4], atmdev->esi[5]); + printk(KERN_NOTICE DEV_LABEL "(itf %d): LANAI%s, serialno=%d(0x%X), " + "board_rev=%d\n", lanai->number, + lanai->type==lanai2 ? "2" : "HB", lanai->serialno, + lanai->serialno, lanai->board_rev); + return 0; + + error_vcctable: + vcc_table_deallocate(lanai); + error_service: + service_buffer_deallocate(lanai); + error_unmap: + reset_board(lanai); +#ifdef USE_POWERDOWN + lanai->conf1 = reg_read(lanai, Config1_Reg) | CONFIG1_POWERDOWN; + conf1_write(lanai); +#endif + iounmap((void *) lanai->base); + error_pci: + lanai_pci_stop(lanai); + error: + return result; +} + +/* called when device is being shutdown, and all vcc's are gone - higher + * levels will deallocate the atm device for us + */ +static void lanai_dev_close(struct atm_dev *atmdev) +{ + struct lanai_dev *lanai = (struct lanai_dev *) atmdev->dev_data; + printk(KERN_INFO DEV_LABEL "(itf %d): shutting down interface\n", + lanai->number); + lanai_timed_poll_stop(lanai); +#ifdef USE_POWERDOWN + lanai->conf1 = reg_read(lanai, Config1_Reg) & ~CONFIG1_POWERDOWN; + conf1_write(lanai); +#endif + intr_disable(lanai, INT_ALL); + free_irq(lanai->pci->irq, lanai); + reset_board(lanai); +#ifdef USE_POWERDOWN + lanai->conf1 |= CONFIG1_POWERDOWN; + conf1_write(lanai); +#endif + lanai_pci_stop(lanai); + vcc_table_deallocate(lanai); + service_buffer_deallocate(lanai); + iounmap((void *) lanai->base); + kfree(lanai); + MOD_DEC_USE_COUNT; +} + +/* close a vcc */ +static void lanai_close(struct atm_vcc *atmvcc) +{ + struct lanai_vcc *lvcc = (struct lanai_vcc *) atmvcc->dev_data; + struct lanai_dev *lanai = (struct lanai_dev *) atmvcc->dev->dev_data; + if (lvcc == NULL) + return; + clear_bit(ATM_VF_READY, &atmvcc->flags); + clear_bit(ATM_VF_PARTIAL, &atmvcc->flags); + if (lvcc->rx.atmvcc == atmvcc) { + lanai_shutdown_rx_vci(lvcc); + if (atmvcc->qos.aal == ATM_AAL0) { + if (--lanai->naal0 <= 0) + aal0_buffer_free(lanai); + } else + lanai_buf_deallocate(&lvcc->rx.buf); + lvcc->rx.atmvcc = NULL; + } + if (lvcc->tx.atmvcc == atmvcc) { + if (atmvcc == lanai->cbrvcc) { + if (lvcc->vbase != 0) + lanai_cbr_shutdown(lanai); + lanai->cbrvcc = NULL; + } + lanai_shutdown_tx_vci(lanai, lvcc); + lanai_buf_deallocate(&lvcc->tx.buf); + lvcc->tx.atmvcc = NULL; + } + if (--lvcc->nref == 0) { + host_vcc_unbind(lanai, lvcc); + kfree(lvcc); + } + atmvcc->dev_data = NULL; + clear_bit(ATM_VF_ADDR, &atmvcc->flags); +} + +/* open a vcc on the card to vpi/vci */ +static int lanai_open(struct atm_vcc *atmvcc, short vpi, int vci) +{ + struct lanai_dev *lanai; + struct lanai_vcc *lvcc; + int result = 0; + /* we don't support partial open - it's not really useful anyway */ + if ((test_bit(ATM_VF_PARTIAL, &atmvcc->flags)) || + (vpi == ATM_VPI_UNSPEC) || (vci == ATM_VCI_UNSPEC)) + return -EINVAL; + lanai = (struct lanai_dev *) atmvcc->dev->dev_data; + if ((result = lanai_normalize_ci(lanai, atmvcc, &vpi, &vci)) != 0) + goto out; + atmvcc->vpi = vpi; + atmvcc->vci = vci; + set_bit(ATM_VF_ADDR, &atmvcc->flags); + lvcc = lanai->vccs[vci]; + if (atmvcc->qos.aal != ATM_AAL0 && atmvcc->qos.aal != ATM_AAL5) + return -EINVAL; +#if 0 + DPRINTK(DEV_LABEL "(itf %d): open %d.%d flags=0x%X\n", + lanai->number, vpi, vci, (unsigned long) atmvcc->flags); +#else + DPRINTK(DEV_LABEL "(itf %d): open %d.%d\n", lanai->number, vpi, vci); +#endif + if (lvcc == NULL && (lvcc = new_lanai_vcc()) == NULL) + return -ENOMEM; + atmvcc->dev_data = lvcc; + lvcc->nref++; + if (atmvcc->qos.rxtp.traffic_class != ATM_NONE) { + APRINTK(lvcc->rx.atmvcc == NULL, "rx.atmvcc!=NULL, vci=%d\n", + vci); + if (atmvcc->qos.aal == ATM_AAL0) { + if (lanai->naal0 == 0) + result = aal0_buffer_allocate(lanai); + } else + result = lanai_setup_rx_vci_aal5( + lanai->number, lvcc, &atmvcc->qos); + if (result != 0) + goto out_free; + lvcc->rx.atmvcc = atmvcc; + lvcc->stats.rx_nomem = 0; + lvcc->stats.x.aal5.rx_badlen = 0; + lvcc->stats.x.aal5.service_trash = 0; + lvcc->stats.x.aal5.service_stream = 0; + lvcc->stats.x.aal5.service_rxcrc = 0; + if (atmvcc->qos.aal == ATM_AAL0) + lanai->naal0++; + } + if (atmvcc->qos.txtp.traffic_class != ATM_NONE) { + APRINTK(lvcc->tx.atmvcc == NULL, "tx.atmvcc!=NULL, vci=%d\n", + vci); + result = lanai_setup_tx_vci(lanai->number, lvcc, &atmvcc->qos); + if (result != 0) + goto out_free; + lvcc->tx.atmvcc = atmvcc; + if (atmvcc->qos.txtp.traffic_class == ATM_CBR) { + APRINTK(lanai->cbrvcc == NULL, + "cbrvcc!=NULL, vci=%d\n", vci); + lanai->cbrvcc = atmvcc; + } + } + host_vcc_bind(lanai, lvcc, vci); + if (atmvcc == lvcc->rx.atmvcc) + host_vcc_start_rx(lvcc); + if (atmvcc == lvcc->tx.atmvcc) { + host_vcc_start_tx(lvcc); + if (lanai->cbrvcc == atmvcc) + lanai_cbr_setup(lanai); + } + set_bit(ATM_VF_READY, &atmvcc->flags); + return 0; + out_free: + lanai_close(atmvcc); + out: + return result; +} + +/* ioctl operations for card */ +/* NOTE: these are all DEBUGGING ONLY currently */ +static int lanai_ioctl(struct atm_dev *atmdev, unsigned int cmd, void *arg) +{ + int result = 0; + struct lanai_dev *lanai = (struct lanai_dev *) atmdev->dev_data; + switch(cmd) { + case 2106275: + shutdown_atm_dev(atmdev); + return 0; + case 2200000: { + unsigned long flags; + spin_lock_irqsave(&lanai->servicelock, flags); + run_service(lanai); + spin_unlock_irqrestore(&lanai->servicelock, flags); + return 0; } + case 2200001: + vcc_tx_dequeue_all(lanai); + return 0; + case 2200002: + get_statistics(lanai); + return 0; + case 2200003: { + int i; + for (i = 0; i <= 0x5C ; i += 4) { + if (i==0x48) /* Write-only butt reg */ + continue; + printk(KERN_CRIT DEV_LABEL " 0x%02X: " + "0x%08X\n", i, + (u32) readl(lanai->base + i)); + barrier(); mb(); + pcistatus_check(lanai, 0); + barrier(); mb(); + } + return 0; } + case 2200004: { + u8 b; + u16 w; + u32 dw; + struct pci_dev *pci = lanai->pci; + (void) pci_read_config_word(pci, PCI_VENDOR_ID, &w); + DPRINTK("vendor = 0x%X\n", w); + (void) pci_read_config_word(pci, PCI_DEVICE_ID, &w); + DPRINTK("device = 0x%X\n", w); + (void) pci_read_config_word(pci, PCI_COMMAND, &w); + DPRINTK("command = 0x%X\n", w); + (void) pci_read_config_word(pci, PCI_STATUS, &w); + DPRINTK("status = 0x%X\n", w); + (void) pci_read_config_dword(pci, + PCI_CLASS_REVISION, &dw); + DPRINTK("class/revision = 0x%X\n", dw); + (void) pci_read_config_byte(pci, + PCI_CACHE_LINE_SIZE, &b); + DPRINTK("cache line size = 0x%X\n", b); + (void) pci_read_config_byte(pci, PCI_LATENCY_TIMER, &b); + DPRINTK("latency = %d (0x%X)\n", b, b); + (void) pci_read_config_byte(pci, PCI_HEADER_TYPE, &b); + DPRINTK("header type = 0x%X\n", b); + (void) pci_read_config_byte(pci, PCI_BIST, &b); + DPRINTK("bist = 0x%X\n", b); + /* skipping a few here */ + (void) pci_read_config_byte(pci, + PCI_INTERRUPT_LINE, &b); + DPRINTK("pci_int_line = 0x%X\n", b); + (void) pci_read_config_byte(pci, + PCI_INTERRUPT_PIN, &b); + DPRINTK("pci_int_pin = 0x%X\n", b); + (void) pci_read_config_byte(pci, PCI_MIN_GNT, &b); + DPRINTK("min_gnt = 0x%X\n", b); + (void) pci_read_config_byte(pci, PCI_MAX_LAT, &b); + DPRINTK("max_lat = 0x%X\n", b); } + return 0; +#ifdef USE_POWERDOWN + case 2200005: + DPRINTK("Coming out of powerdown\n"); + lanai->conf1 &= ~CONFIG1_POWERDOWN; + conf1_write(lanai); + return 0; +#endif + default: + result = -EINVAL; + } + return result; +} + +static int lanai_send(struct atm_vcc *atmvcc, struct sk_buff *skb) +{ + struct lanai_vcc *lvcc = (struct lanai_vcc *) atmvcc->dev_data; + struct lanai_dev *lanai = (struct lanai_dev *) atmvcc->dev->dev_data; + unsigned long flags; + if (lvcc == NULL || lvcc->vbase == 0 || lvcc->tx.atmvcc != atmvcc) + goto einval; +#ifdef DEBUG + if (skb == NULL) { + DPRINTK("lanai_send: skb==NULL for vci=%d\n", atmvcc->vci); + goto einval; + } + if (lanai == NULL) { + DPRINTK("lanai_send: lanai==NULL for vci=%d\n", atmvcc->vci); + goto einval; + } +#endif + ATM_SKB(skb)->vcc = atmvcc; + switch (atmvcc->qos.aal) { + case ATM_AAL5: + spin_lock_irqsave(&lanai->txlock, flags); + vcc_tx_aal5(lanai, lvcc, skb); + spin_unlock_irqrestore(&lanai->txlock, flags); + return 0; + case ATM_AAL0: + if (skb->len != ATM_CELL_SIZE-1) + goto einval; + /* NOTE - this next line is technically invalid - we haven't unshared skb */ + cpu_to_be32s((u32 *) skb->data); + spin_lock_irqsave(&lanai->txlock, flags); + vcc_tx_aal0(lanai, lvcc, skb); + spin_unlock_irqrestore(&lanai->txlock, flags); + return 0; + } + DPRINTK("lanai_send: bad aal=%d on vci=%d\n", atmvcc->qos.aal, + atmvcc->vci); + einval: + lanai_free_skb(atmvcc, skb); + return -EINVAL; +} + +static int lanai_change_qos(struct atm_vcc *atmvcc, + /*const*/ struct atm_qos *qos, int flags) +{ + return -EBUSY; /* TODO: need to write this */ +} + +#ifndef CONFIG_PROC_FS +#define lanai_proc_read NULL +#else +static int lanai_proc_read(struct atm_dev *atmdev, loff_t *pos, char *page) +{ + struct lanai_dev *lanai = (struct lanai_dev *) atmdev->dev_data; + loff_t left = *pos; + struct lanai_vcc *lvcc; + if (left-- == 0) + return sprintf(page, DEV_LABEL "(itf %d): chip=LANAI%s, " + "serial=%d, magic=0x%08X, num_vci=%d\n", + atmdev->number, lanai->type==lanai2 ? "2" : "HB", + lanai->serialno, lanai->magicno, lanai->num_vci); + if (left-- == 0) + return sprintf(page, "revision: board=%d, pci_if=%d\n", + lanai->board_rev, lanai->pci_revision); + if (left-- == 0) + return sprintf(page, "EEPROM ESI: " + "%02X:%02X:%02X:%02X:%02X:%02X\n", + lanai->eeprom[EEPROM_MAC + 0], + lanai->eeprom[EEPROM_MAC + 1], + lanai->eeprom[EEPROM_MAC + 2], + lanai->eeprom[EEPROM_MAC + 3], + lanai->eeprom[EEPROM_MAC + 4], + lanai->eeprom[EEPROM_MAC + 5]); + if (left-- == 0) + return sprintf(page, "status: SOOL=%d, LOCD=%d, LED=%d, " + "GPIN=%d\n", (lanai->status & STATUS_SOOL) ? 1 : 0, + (lanai->status & STATUS_LOCD) ? 1 : 0, + (lanai->status & STATUS_LED) ? 1 : 0, + (lanai->status & STATUS_GPIN) ? 1 : 0); + if (left-- == 0) + return sprintf(page, "global buffer sizes: service=%d, " + "aal0_rx=%d\n", lanai_buf_size(&lanai->service), + lanai->naal0 ? lanai_buf_size(&lanai->aal0buf) : 0); + if (left-- == 0) { + get_statistics(lanai); + return sprintf(page, "cells in error: overflow=%d, " + "closed_vci=%d, bad_HEC=%d, rx_fifo=%d\n", + lanai->stats.ovfl_trash, lanai->stats.vci_trash, + lanai->stats.hec_err, lanai->stats.atm_ovfl); + } + if (left-- == 0) + return sprintf(page, "PCI errors: parity_detect=%d, " + "master_abort=%d, master_target_abort=%d,\n", + lanai->stats.pcierr_parity_detect, + lanai->stats.pcierr_serr_set, + lanai->stats.pcierr_m_target_abort); + if (left-- == 0) + return sprintf(page, " slave_target_abort=%d, " + "master_parity=%d\n", lanai->stats.pcierr_s_target_abort, + lanai->stats.pcierr_master_parity); + if (left-- == 0) + return sprintf(page, "service list errors: no_vcc_rx=%d, " + "no_vcc_tx=%d,\n", lanai->stats.service_novcc_rx, + lanai->stats.service_novcc_tx); + if (left-- == 0) + return sprintf(page, " no_tx=%d, " + "no_rx=%d, bad_rx_aal=%d\n", lanai->stats.service_norx, + lanai->stats.service_notx, + lanai->stats.service_rxnotaal5); + if (left-- == 0) + return sprintf(page, "resets: dma=%d, card=%d\n", + lanai->stats.dma_reenable, lanai->stats.card_reset); + /* At this point, "left" should be the VCI we're looking for */ + vcclist_read_lock(); + for (; ; left++) { + if (left >= NUM_VCI) { + left = 0; + goto out; + } + if ((lvcc = lanai->vccs[left]) != NULL) + break; + (*pos)++; + } + /* Note that we re-use "left" here since we're done with it */ + left = sprintf(page, "VCI %4d: nref=%d, rx_nomem=%d", (vci_t) left, + lvcc->nref, lvcc->stats.rx_nomem); + if (lvcc->rx.atmvcc != NULL) { + left += sprintf(&page[left], ",\n rx_AAL=%d", + lvcc->rx.atmvcc->qos.aal == ATM_AAL5 ? 5 : 0); + if (lvcc->rx.atmvcc->qos.aal == ATM_AAL5) + left += sprintf(&page[left], ", rx_buf_size=%d, " + "rx_bad_len=%d,\n rx_service_trash=%d, " + "rx_service_stream=%d, rx_bad_crc=%d", + lanai_buf_size(&lvcc->rx.buf), + lvcc->stats.x.aal5.rx_badlen, + lvcc->stats.x.aal5.service_trash, + lvcc->stats.x.aal5.service_stream, + lvcc->stats.x.aal5.service_rxcrc); + } + if (lvcc->tx.atmvcc != NULL) + left += sprintf(&page[left], ",\n tx_AAL=%d, " + "tx_buf_size=%d, tx_qos=%cBR, tx_backlogged=%c", + lvcc->tx.atmvcc->qos.aal == ATM_AAL5 ? 5 : 0, + lanai_buf_size(&lvcc->tx.buf), + lvcc->tx.atmvcc == lanai->cbrvcc ? 'C' : 'U', + vcc_is_backlogged(lvcc) ? 'Y' : 'N'); + page[left++] = '\n'; + page[left] = '\0'; + out: + vcclist_read_unlock(); + return left; +} +#endif /* CONFIG_PROC_FS */ + +/* -------------------- HOOKS: */ + +static const struct atmdev_ops ops = { + dev_close: lanai_dev_close, + open: lanai_open, + close: lanai_close, + ioctl: lanai_ioctl, + getsockopt: NULL, + setsockopt: NULL, + send: lanai_send, + sg_send: NULL, /* no scatter-gather on card */ + send_oam: NULL, /* OAM support not in linux yet */ + phy_put: NULL, + phy_get: NULL, + feedback: NULL, + change_qos: lanai_change_qos, + free_rx_skb: NULL, + proc_read: lanai_proc_read +}; + +/* detect one type of card LANAI2 or LANAIHB */ +static int __init lanai_detect_1(unsigned int vendor, unsigned int device) +{ + struct pci_dev *pci = NULL; + struct lanai_dev *lanai; + struct atm_dev *atmdev; + int count = 0, result; + while ((pci = pci_find_device(vendor, device, pci)) != NULL) { + lanai = (struct lanai_dev *) + kmalloc(sizeof *lanai, GFP_KERNEL); + if (lanai == NULL) { + printk(KERN_ERR DEV_LABEL ": couldn't allocate " + "dev_data structure!\n"); + break; + } + atmdev = atm_dev_register(DEV_LABEL, &ops, -1, 0); + if (atmdev == NULL) { + printk(KERN_ERR DEV_LABEL ": couldn't register " + "atm device!\n"); + kfree(lanai); + break; + } + atmdev->dev_data = lanai; + lanai->pci = pci; + lanai->type = (enum lanai_type) device; + if ((result = lanai_dev_open(atmdev)) != 0) { + DPRINTK("lanai_start() failed, err=%d\n", -result); + atm_dev_deregister(atmdev); + kfree(lanai); + continue; + } + count++; + } + return count; +} + +#ifdef MODULE +static +#endif +int __init lanai_detect(void) +{ + return lanai_detect_1(PCI_VENDOR_ID_EF, PCI_VENDOR_ID_EF_ATM_LANAI2) + + lanai_detect_1(PCI_VENDOR_ID_EF, PCI_VENDOR_ID_EF_ATM_LANAIHB); +} + +#ifdef MODULE + +int init_module(void) +{ + if (lanai_detect() == 0) { + printk(KERN_ERR DEV_LABEL ": no adaptor found\n"); + return -ENODEV; + } + return 0; +} + +void cleanup_module(void) +{ + /* We'll only get called when all the interfaces are already + * gone, so there isn't much to do + */ + DPRINTK("cleanup_module()\n"); +} + +MODULE_AUTHOR("Mitchell Blank Jr "); +MODULE_DESCRIPTION("Efficient Networks Speedstream 3010 driver"); +MODULE_LICENSE("GPL"); + +#endif /* MODULE */ diff -u --recursive --new-file v2.4.13/linux/drivers/atm/nicstar.h linux/drivers/atm/nicstar.h --- v2.4.13/linux/drivers/atm/nicstar.h Fri Feb 16 16:02:35 2001 +++ linux/drivers/atm/nicstar.h Thu Oct 25 13:53:46 2001 @@ -625,7 +625,7 @@ #define NS_CFG_LGBUFSIZE NS_CFG_LGBUFSIZE_2048 #elif (NS_LGBUFSIZE == 4096) #define NS_CFG_LGBUFSIZE NS_CFG_LGBUFSIZE_4096 -#eliif (NS_LGBUFSIZE == 8192) +#elif (NS_LGBUFSIZE == 8192) #define NS_CFG_LGBUFSIZE NS_CFG_LGBUFSIZE_8192 #elif (NS_LGBUFSIZE == 16384) #define NS_CFG_LGBUFSIZE NS_CFG_LGBUFSIZE_16384 diff -u --recursive --new-file v2.4.13/linux/drivers/block/DAC960.c linux/drivers/block/DAC960.c --- v2.4.13/linux/drivers/block/DAC960.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/DAC960.c Thu Oct 25 13:58:35 2001 @@ -82,7 +82,8 @@ static BlockDeviceOperations_T DAC960_BlockDeviceOperations = - { open: DAC960_Open, + { owner: THIS_MODULE, + open: DAC960_Open, release: DAC960_Release, ioctl: DAC960_IOCTL }; @@ -5378,7 +5379,6 @@ Controller->ControllerUsageCount++; Controller->LogicalDriveUsageCount[LogicalDriveNumber]++; ModuleOnly: - MOD_INC_USE_COUNT; return 0; } @@ -5401,7 +5401,6 @@ Controller->LogicalDriveUsageCount[LogicalDriveNumber]--; Controller->ControllerUsageCount--; ModuleOnly: - MOD_DEC_USE_COUNT; return 0; } diff -u --recursive --new-file v2.4.13/linux/drivers/block/acsi.c linux/drivers/block/acsi.c --- v2.4.13/linux/drivers/block/acsi.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/acsi.c Thu Oct 25 13:58:35 2001 @@ -1196,7 +1196,6 @@ acsi_prevent_removal(device, 1); } access_count[device]++; - MOD_INC_USE_COUNT; if (filp && filp->f_mode) { check_disk_change( inode->i_rdev ); @@ -1221,7 +1220,6 @@ int device = DEVICE_NR(MINOR(inode->i_rdev)); if (--access_count[device] == 0 && acsi_info[device].removable) acsi_prevent_removal(device, 0); - MOD_DEC_USE_COUNT; return( 0 ); } @@ -1657,6 +1655,7 @@ #endif static struct block_device_operations acsi_fops = { + owner: THIS_MODULE, open: acsi_open, release: acsi_release, ioctl: acsi_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/block/amiflop.c linux/drivers/block/amiflop.c --- v2.4.13/linux/drivers/block/amiflop.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/amiflop.c Thu Oct 25 13:58:34 2001 @@ -1738,6 +1738,7 @@ } static struct block_device_operations floppy_fops = { + owner: THIS_MODULE, open: floppy_open, release: floppy_release, ioctl: fd_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/block/ataflop.c linux/drivers/block/ataflop.c --- v2.4.13/linux/drivers/block/ataflop.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/ataflop.c Thu Oct 25 13:58:35 2001 @@ -1910,8 +1910,6 @@ if (fd_ref[drive] == -1 || (fd_ref[drive] && filp->f_flags & O_EXCL)) return -EBUSY; - MOD_INC_USE_COUNT; - if (filp->f_flags & O_EXCL) fd_ref[drive] = -1; else @@ -1950,11 +1948,11 @@ fd_ref[drive] = 0; } - MOD_DEC_USE_COUNT; return 0; } static struct block_device_operations floppy_fops = { + owner: THIS_MODULE, open: floppy_open, release: floppy_release, ioctl: fd_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/block/cciss.c linux/drivers/block/cciss.c --- v2.4.13/linux/drivers/block/cciss.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/cciss.c Fri Nov 2 17:45:42 2001 @@ -119,6 +119,7 @@ #endif /* CONFIG_PROC_FS */ static struct block_device_operations cciss_fops = { + owner: THIS_MODULE, open: cciss_open, release: cciss_release, ioctl: cciss_ioctl, @@ -347,7 +348,6 @@ hba[ctlr]->drv[dsk].usage_count++; hba[ctlr]->usage_count++; - MOD_INC_USE_COUNT; return 0; } /* @@ -366,7 +366,6 @@ hba[ctlr]->drv[dsk].usage_count--; hba[ctlr]->usage_count--; - MOD_DEC_USE_COUNT; return 0; } @@ -1215,7 +1214,12 @@ status=0; } } - complete_buffers(cmd->bh, status); + complete_buffers(cmd->rq->bh, status); + +#ifdef CCISS_DEBUG + printk("Done with %p\n", cmd->rq); +#endif /* CCISS_DEBUG */ + end_that_request_last(cmd->rq); } @@ -1270,7 +1274,7 @@ { ctlr_info_t *h= q->queuedata; CommandList_struct *c; - int log_unit, start_blk, seg, sect; + int log_unit, start_blk, seg; char *lastdataend; struct buffer_head *bh; struct list_head *queue_head = &q->queue_head; @@ -1279,13 +1283,12 @@ struct my_sg tmp_sg[MAXSGENTRIES]; int i; - // Loop till the queue is empty if or it is plugged - while (1) - { - if (q->plugged || list_empty(queue_head)) { - start_io(h); - return; - } + if (q->plugged) + goto startio; + +queue_next: + if (list_empty(queue_head)) + goto startio; creq = blkdev_entry_next_request(queue_head); if (creq->nr_segments > MAXSGENTRIES) @@ -1297,17 +1300,18 @@ h->ctlr, creq->rq_dev, creq); blkdev_dequeue_request(creq); complete_buffers(creq->bh, 0); - start_io(h); - return; + end_that_request_last(creq); + goto startio; } if (( c = cmd_alloc(h, 1)) == NULL) - { - start_io(h); - return; - } + goto startio; + + spin_unlock_irq(&io_request_lock); + c->cmd_type = CMD_RWREQ; - bh = c->bh = creq->bh; + bh = creq->bh; + c->rq = creq; /* fill in the request */ log_unit = MINOR(creq->rq_dev) >> NWD_SHIFT; @@ -1331,10 +1335,8 @@ #endif /* CCISS_DEBUG */ seg = 0; lastdataend = NULL; - sect = 0; while(bh) { - sect += bh->b_size/512; if (bh->b_data == lastdataend) { // tack it on to the last segment tmp_sg[seg-1].len +=bh->b_size; @@ -1368,7 +1370,7 @@ h->maxSG = seg; #ifdef CCISS_DEBUG - printk(KERN_DEBUG "cciss: Submitting %d sectors in %d segments\n", sect, seg); + printk(KERN_DEBUG "cciss: Submitting %d sectors in %d segments\n", creq->nr_sectors, seg); #endif /* CCISS_DEBUG */ c->Header.SGList = c->Header.SGTotal = seg; @@ -1378,28 +1380,26 @@ c->Request.CDB[4]= (start_blk >> 8) & 0xff; c->Request.CDB[5]= start_blk & 0xff; c->Request.CDB[6]= 0; // (sect >> 24) & 0xff; MSB - c->Request.CDB[7]= (sect >> 8) & 0xff; - c->Request.CDB[8]= sect & 0xff; + c->Request.CDB[7]= (creq->nr_sectors >> 8) & 0xff; + c->Request.CDB[8]= creq->nr_sectors & 0xff; c->Request.CDB[9] = c->Request.CDB[11] = c->Request.CDB[12] = 0; - + spin_lock_irq(&io_request_lock); + blkdev_dequeue_request(creq); - /* * ehh, we can't really end the request here since it's not * even started yet. for now it shouldn't hurt though */ -#ifdef CCISS_DEBUG - printk("Done with %p\n", creq); -#endif /* CCISS_DEBUG */ - end_that_request_last(creq); - addQ(&(h->reqQ),c); h->Qdepth++; if(h->Qdepth > h->maxQsinceinit) h->maxQsinceinit = h->Qdepth; - } // while loop + + goto queue_next; +startio: + start_io(h); } static void do_cciss_intr(int irq, void *dev_id, struct pt_regs *regs) diff -u --recursive --new-file v2.4.13/linux/drivers/block/cciss_cmd.h linux/drivers/block/cciss_cmd.h --- v2.4.13/linux/drivers/block/cciss_cmd.h Tue May 22 10:23:16 2001 +++ linux/drivers/block/cciss_cmd.h Fri Nov 2 17:45:42 2001 @@ -228,7 +228,7 @@ int cmd_type; struct _CommandList_struct *prev; struct _CommandList_struct *next; - struct buffer_head * bh; + struct request * rq; } CommandList_struct; //Configuration Table Structure diff -u --recursive --new-file v2.4.13/linux/drivers/block/cpqarray.c linux/drivers/block/cpqarray.c --- v2.4.13/linux/drivers/block/cpqarray.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/cpqarray.c Fri Nov 2 17:45:42 2001 @@ -188,6 +188,7 @@ } static struct block_device_operations ida_fops = { + owner: THIS_MODULE, open: ida_open, release: ida_release, ioctl: ida_ioctl, @@ -853,7 +854,6 @@ hba[ctlr]->drv[dsk].usage_count++; hba[ctlr]->usage_count++; - MOD_INC_USE_COUNT; return 0; } @@ -869,7 +869,6 @@ hba[ctlr]->drv[dsk].usage_count--; hba[ctlr]->usage_count--; - MOD_DEC_USE_COUNT; return 0; } @@ -912,21 +911,19 @@ { ctlr_info_t *h = q->queuedata; cmdlist_t *c; - int seg, sect; char *lastdataend; struct list_head * queue_head = &q->queue_head; struct buffer_head *bh; struct request *creq; struct my_sg tmp_sg[SG_MAX]; - int i; + int i, seg; -// Loop till the queue is empty if or it is plugged - while (1) -{ - if (q->plugged || list_empty(queue_head)) { - start_io(h); - return; - } + if (q->plugged) + goto startio; + +queue_next: + if (list_empty(queue_head)) + goto startio; creq = blkdev_entry_next_request(queue_head); if (creq->nr_segments > SG_MAX) @@ -938,15 +935,14 @@ h->ctlr, creq->rq_dev, creq); blkdev_dequeue_request(creq); complete_buffers(creq->bh, 0); - start_io(h); - return; + end_that_request_last(creq); + goto startio; } if ((c = cmd_alloc(h,1)) == NULL) - { - start_io(h); - return; - } + goto startio; + + spin_unlock_irq(&io_request_lock); bh = creq->bh; @@ -956,7 +952,7 @@ c->size += sizeof(rblk_t); c->req.hdr.blk = ida[(h->ctlr<rq_dev)].start_sect + creq->sector; - c->bh = bh; + c->rq = creq; DBGPX( if (bh == NULL) panic("bh == NULL?"); @@ -964,9 +960,7 @@ printk("sector=%d, nr_sectors=%d\n", creq->sector, creq->nr_sectors); ); seg = 0; lastdataend = NULL; - sect = 0; while(bh) { - sect += bh->b_size/512; if (bh->b_data == lastdataend) { tmp_sg[seg-1].size += bh->b_size; lastdataend += bh->b_size; @@ -992,26 +986,12 @@ } DBGPX( printk("Submitting %d sectors in %d segments\n", sect, seg); ); c->req.hdr.sg_cnt = seg; - c->req.hdr.blk_cnt = sect; + c->req.hdr.blk_cnt = creq->nr_sectors; - /* - * Since we control our own merging, we know that this request - * is now fully setup and there's nothing left. - */ - if (creq->nr_sectors != sect) { - printk("ida: %ld != %d sectors\n", creq->nr_sectors, sect); - BUG(); - } + spin_lock_irq(&io_request_lock); blkdev_dequeue_request(creq); - /* - * ehh, we can't really end the request here since it's not - * even started yet. for now it shouldn't hurt though - */ -DBGPX( printk("Done with %p\n", creq); ); - end_that_request_last(creq); - c->req.hdr.cmd = (creq->cmd == READ) ? IDA_READ : IDA_WRITE; c->type = CMD_RWREQ; @@ -1020,7 +1000,11 @@ h->Qdepth++; if (h->Qdepth > h->maxQsinceinit) h->maxQsinceinit = h->Qdepth; - } // while loop + + goto queue_next; + +startio: + start_io(h); } /* @@ -1097,7 +1081,13 @@ cmd->req.sg[i].addr, cmd->req.sg[i].size, (cmd->req.hdr.cmd == IDA_READ) ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); } - complete_buffers(cmd->bh, ok); + + complete_buffers(cmd->rq->bh, ok); + + DBGPX(printk("Done with %p\n", cmd->rq);); + end_that_request_last(cmd->rq); + + } /* diff -u --recursive --new-file v2.4.13/linux/drivers/block/floppy.c linux/drivers/block/floppy.c --- v2.4.13/linux/drivers/block/floppy.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/floppy.c Thu Oct 25 13:58:34 2001 @@ -397,6 +397,7 @@ static struct floppy_drive_params drive_params[N_DRIVE]; static struct floppy_drive_struct drive_state[N_DRIVE]; static struct floppy_write_errors write_errors[N_DRIVE]; +static struct timer_list motor_off_timer[N_DRIVE]; static struct floppy_raw_cmd *raw_cmd, default_raw_cmd; /* @@ -927,17 +928,6 @@ set_dor(FDC(nr), mask, 0); } -static struct timer_list motor_off_timer[N_DRIVE] = { - { data: 0, function: motor_off_callback }, - { data: 1, function: motor_off_callback }, - { data: 2, function: motor_off_callback }, - { data: 3, function: motor_off_callback }, - { data: 4, function: motor_off_callback }, - { data: 5, function: motor_off_callback }, - { data: 6, function: motor_off_callback }, - { data: 7, function: motor_off_callback } -}; - /* schedules motor off */ static void floppy_off(unsigned int drive) { @@ -3902,6 +3892,7 @@ } static struct block_device_operations floppy_fops = { + owner: THIS_MODULE, open: floppy_open, release: floppy_release, ioctl: fd_ioctl, @@ -4067,8 +4058,10 @@ DPRINT("bad drive for set_cmos\n"); return; } +#if N_FDC > 1 if (current_drive >= 4 && !FDC2) FDC2 = 0x370; +#endif DP->cmos = ints[2]; DPRINT("setting CMOS code to %d\n", ints[2]); } @@ -4088,10 +4081,10 @@ { "dma", 0, &FLOPPY_DMA, 2, 0 }, { "daring", daring, 0, 1, 0}, - +#if N_FDC > 1 { "two_fdc", 0, &FDC2, 0x370, 0 }, { "one_fdc", 0, &FDC2, 0, 0 }, - +#endif { "thinkpad", floppy_set_flags, 0, 1, FD_INVERTED_DCL }, { "broken_dcl", floppy_set_flags, 0, 1, FD_BROKEN_DCL }, { "messages", floppy_set_flags, 0, 1, FTD_MSG }, @@ -4112,6 +4105,8 @@ { "unexpected_interrupts", 0, &print_unex, 1, 0 }, { "no_unexpected_interrupts", 0, &print_unex, 0, 0 }, { "L40SX", 0, &print_unex, 0, 0 } + + EXTRA_FLOPPY_PARAMS }; static int __init floppy_setup(char *str) @@ -4275,6 +4270,8 @@ } for (drive = 0; drive < N_DRIVE; drive++) { + motor_off_timer[drive].data = drive; + motor_off_timer[drive].function = motor_off_callback; if (!(allowed_drive_mask & (1 << drive))) continue; if (fdc_state[FDC(drive)].version == FDC_NONE) diff -u --recursive --new-file v2.4.13/linux/drivers/block/ida_cmd.h linux/drivers/block/ida_cmd.h --- v2.4.13/linux/drivers/block/ida_cmd.h Sun Aug 12 13:27:59 2001 +++ linux/drivers/block/ida_cmd.h Fri Nov 2 17:45:42 2001 @@ -93,7 +93,7 @@ int ctlr; struct cmdlist *prev; struct cmdlist *next; - struct buffer_head *bh; + struct request *rq; int type; } cmdlist_t; diff -u --recursive --new-file v2.4.13/linux/drivers/block/ll_rw_blk.c linux/drivers/block/ll_rw_blk.c --- v2.4.13/linux/drivers/block/ll_rw_blk.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/ll_rw_blk.c Mon Oct 29 12:11:17 2001 @@ -140,21 +140,23 @@ return &blk_dev[MAJOR(dev)].request_queue; } -static int __blk_cleanup_queue(struct list_head *head) +static int __blk_cleanup_queue(struct request_list *list) { + struct list_head *head = &list->free; struct request *rq; int i = 0; - if (list_empty(head)) - return 0; - - do { + while (!list_empty(head)) { rq = list_entry(head->next, struct request, queue); list_del(&rq->queue); kmem_cache_free(request_cachep, rq); i++; - } while (!list_empty(head)); + }; + + if (i != list->count) + printk("request list leak!\n"); + list->count = 0; return i; } @@ -176,10 +178,8 @@ { int count = queue_nr_requests; - count -= __blk_cleanup_queue(&q->request_freelist[READ]); - count -= __blk_cleanup_queue(&q->request_freelist[WRITE]); - count -= __blk_cleanup_queue(&q->pending_freelist[READ]); - count -= __blk_cleanup_queue(&q->pending_freelist[WRITE]); + count -= __blk_cleanup_queue(&q->rq[READ]); + count -= __blk_cleanup_queue(&q->rq[WRITE]); if (count) printk("blk_cleanup_queue: leaked requests (%d)\n", count); @@ -331,11 +331,10 @@ struct request *rq; int i; - INIT_LIST_HEAD(&q->request_freelist[READ]); - INIT_LIST_HEAD(&q->request_freelist[WRITE]); - INIT_LIST_HEAD(&q->pending_freelist[READ]); - INIT_LIST_HEAD(&q->pending_freelist[WRITE]); - q->pending_free[READ] = q->pending_free[WRITE] = 0; + INIT_LIST_HEAD(&q->rq[READ].free); + INIT_LIST_HEAD(&q->rq[WRITE].free); + q->rq[READ].count = 0; + q->rq[WRITE].count = 0; /* * Divide requests in half between read and write @@ -349,7 +348,8 @@ } memset(rq, 0, sizeof(struct request)); rq->rq_status = RQ_INACTIVE; - list_add(&rq->queue, &q->request_freelist[i & 1]); + list_add(&rq->queue, &q->rq[i&1].free); + q->rq[i&1].count++; } init_waitqueue_head(&q->wait_for_request); @@ -423,10 +423,12 @@ static inline struct request *get_request(request_queue_t *q, int rw) { struct request *rq = NULL; + struct request_list *rl = q->rq + rw; - if (!list_empty(&q->request_freelist[rw])) { - rq = blkdev_free_rq(&q->request_freelist[rw]); + if (!list_empty(&rl->free)) { + rq = blkdev_free_rq(&rl->free); list_del(&rq->queue); + rl->count--; rq->rq_status = RQ_ACTIVE; rq->special = NULL; rq->q = q; @@ -443,17 +445,16 @@ register struct request *rq; DECLARE_WAITQUEUE(wait, current); - add_wait_queue_exclusive(&q->wait_for_request, &wait); - for (;;) { - __set_current_state(TASK_UNINTERRUPTIBLE); + generic_unplug_device(q); + add_wait_queue(&q->wait_for_request, &wait); + do { + set_current_state(TASK_UNINTERRUPTIBLE); + if (q->rq[rw].count < batch_requests) + schedule(); spin_lock_irq(&io_request_lock); - rq = get_request(q, rw); + rq = get_request(q,rw); spin_unlock_irq(&io_request_lock); - if (rq) - break; - generic_unplug_device(q); - schedule(); - } + } while (rq == NULL); remove_wait_queue(&q->wait_for_request, &wait); current->state = TASK_RUNNING; return rq; @@ -542,15 +543,6 @@ list_add(&req->queue, insert_here); } -inline void blk_refill_freelist(request_queue_t *q, int rw) -{ - if (q->pending_free[rw]) { - list_splice(&q->pending_freelist[rw], &q->request_freelist[rw]); - INIT_LIST_HEAD(&q->pending_freelist[rw]); - q->pending_free[rw] = 0; - } -} - /* * Must be called with io_request_lock held and interrupts disabled */ @@ -564,19 +556,12 @@ /* * Request may not have originated from ll_rw_blk. if not, - * asumme it has free buffers and check waiters + * assume it has free buffers and check waiters */ if (q) { - /* - * Add to pending free list and batch wakeups - */ - list_add(&req->queue, &q->pending_freelist[rw]); - - if (++q->pending_free[rw] >= batch_requests) { - int wake_up = q->pending_free[rw]; - blk_refill_freelist(q, rw); - wake_up_nr(&q->wait_for_request, wake_up); - } + list_add(&req->queue, &q->rq[rw].free); + if (++q->rq[rw].count >= batch_requests && waitqueue_active(&q->wait_for_request)) + wake_up(&q->wait_for_request); } } @@ -1135,7 +1120,7 @@ /* * Batch frees according to queue length */ - batch_requests = queue_nr_requests >> 3; + batch_requests = queue_nr_requests/4; printk("block: %d slots per queue, batch=%d\n", queue_nr_requests, batch_requests); #ifdef CONFIG_AMIGA_Z2RAM diff -u --recursive --new-file v2.4.13/linux/drivers/block/loop.c linux/drivers/block/loop.c --- v2.4.13/linux/drivers/block/loop.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/loop.c Thu Oct 25 13:58:34 2001 @@ -941,6 +941,7 @@ } static struct block_device_operations lo_fops = { + owner: THIS_MODULE, open: lo_open, release: lo_release, ioctl: lo_ioctl, @@ -951,6 +952,7 @@ */ MODULE_PARM(max_loop, "i"); MODULE_PARM_DESC(max_loop, "Maximum number of loop devices (1-255)"); +MODULE_LICENSE("GPL"); int loop_register_transfer(struct loop_func_table *funcs) { diff -u --recursive --new-file v2.4.13/linux/drivers/block/nbd.c linux/drivers/block/nbd.c --- v2.4.13/linux/drivers/block/nbd.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/nbd.c Fri Oct 26 15:39:02 2001 @@ -82,7 +82,6 @@ return -ENODEV; nbd_dev[dev].refcnt++; - MOD_INC_USE_COUNT; return 0; } @@ -467,12 +466,12 @@ printk(KERN_ALERT "nbd_release: refcount(%d) <= 0\n", lo->refcnt); lo->refcnt--; /* N.B. Doesn't lo->file need an fput?? */ - MOD_DEC_USE_COUNT; return 0; } static struct block_device_operations nbd_fops = { + owner: THIS_MODULE, open: nbd_open, release: nbd_release, ioctl: nbd_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/block/paride/Config.in linux/drivers/block/paride/Config.in --- v2.4.13/linux/drivers/block/paride/Config.in Fri Apr 6 10:42:55 2001 +++ linux/drivers/block/paride/Config.in Thu Oct 25 00:07:39 2001 @@ -27,6 +27,12 @@ dep_tristate ' FIT TD-2000 protocol' CONFIG_PARIDE_FIT2 $CONFIG_PARIDE dep_tristate ' FIT TD-3000 protocol' CONFIG_PARIDE_FIT3 $CONFIG_PARIDE dep_tristate ' Shuttle EPAT/EPEZ protocol' CONFIG_PARIDE_EPAT $CONFIG_PARIDE +if [ "$CONFIG_PARIDE_EPAT" != "n" ]; then + if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then + bool ' Support c7/c8 chips (EXPERIMENTAL)' CONFIG_PARIDE_EPATC8 $CONFIG_PARIDE + fi +fi + dep_tristate ' Shuttle EPIA protocol' CONFIG_PARIDE_EPIA $CONFIG_PARIDE dep_tristate ' Freecom IQ ASIC-2 protocol' CONFIG_PARIDE_FRIQ $CONFIG_PARIDE dep_tristate ' FreeCom power protocol' CONFIG_PARIDE_FRPW $CONFIG_PARIDE diff -u --recursive --new-file v2.4.13/linux/drivers/block/paride/epat.c linux/drivers/block/paride/epat.c --- v2.4.13/linux/drivers/block/paride/epat.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/paride/epat.c Thu Oct 25 00:07:39 2001 @@ -12,10 +12,11 @@ /* Changes: 1.01 GRG 1998.05.06 init_proto, release_proto + 1.02 Joshua b. Jore CPP(renamed), epat_connect, epat_disconnect */ -#define EPAT_VERSION "1.01" +#define EPAT_VERSION "1.02" #include #include @@ -197,30 +198,50 @@ #define WRi(r,v) epat_write_regr(pi,0,r,v) #define RRi(r) (epat_read_regr(pi,0,r)) -/* FIXME: the CCP stuff should be fixed to handle multiple EPATs on a chain */ +/* FIXME: the CPP stuff should be fixed to handle multiple EPATs on a chain */ -#define CCP(x) w2(4);w0(0x22);w0(0xaa);w0(0x55);w0(0);w0(0xff);\ +#define CPP(x) w2(4);w0(0x22);w0(0xaa);w0(0x55);w0(0);w0(0xff);\ w0(0x87);w0(0x78);w0(x);w2(4);w2(5);w2(4);w0(0xff); static void epat_connect ( PIA *pi ) { pi->saved_r0 = r0(); pi->saved_r2 = r2(); - CCP(0); CCP(0xe0); + +#ifdef CONFIG_PARIDE_EPATC8 + /* Initialize the chip */ + CPP(0);CPP(0x40);CPP(0xe0); + w0(0);w2(1);w2(4); + WR(0x8,0x12);WR(0xc,0x14);WR(0x12,0x10); + WR(0xe,0xf);WR(0xf,4); + /* WR(0xe,0xa);WR(0xf,4); */ + WR(0xe,0xd);WR(0xf,0); + /* CPP(0x30); */ + + /* Connect to the chip */ + CPP(0xe0); + w0(0);w2(1);w2(4); /* Idle into SPP */ + if (pi->mode >= 3) { + w0(0);w2(1);w2(4);w2(0xc); + /* Request EPP */ + w0(0x40);w2(6);w2(7);w2(4);w2(0xc);w2(4); + } +#else + CPP(0); CPP(0xe0); w0(0); w2(1); w2(4); if (pi->mode >= 3) { w0(0); w2(1); w2(4); w2(0xc); w0(0x40); w2(6); w2(7); w2(4); w2(0xc); w2(4); } WR(8,0x10); WR(0xc,0x14); WR(0xa,0x38); WR(0x12,0x10); +#endif } -static void epat_disconnect ( PIA *pi ) - -{ CCP(0x30); - w0(pi->saved_r0); - w2(pi->saved_r2); -} +static void epat_disconnect (PIA *pi) +{ CPP(0x30); + w0(pi->saved_r0); + w2(pi->saved_r2); +} static int epat_test_proto( PIA *pi, char * scratch, int verbose ) @@ -282,6 +303,7 @@ static void epat_init_proto( PIA *pi) { MOD_INC_USE_COUNT; + printk("epat_init_proto"); } static void epat_release_proto( PIA *pi) diff -u --recursive --new-file v2.4.13/linux/drivers/block/paride/pcd.c linux/drivers/block/paride/pcd.c --- v2.4.13/linux/drivers/block/paride/pcd.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/paride/pcd.c Sat Oct 27 02:03:47 2001 @@ -265,6 +265,14 @@ /* kernel glue structures */ +static struct block_device_operations pcd_bdops = { + owner: THIS_MODULE, + open: cdrom_open, + release: cdrom_release, + ioctl: cdrom_ioctl, + check_media_change: cdrom_media_changed, +}; + static struct cdrom_device_ops pcd_dops = { pcd_open, pcd_release, @@ -335,13 +343,17 @@ /* get the atapi capabilities page */ pcd_probe_capabilities(); - if (register_blkdev(MAJOR_NR,name,&cdrom_fops)) { + if (register_blkdev(MAJOR_NR,name,&pcd_bdops)) { printk("pcd: unable to get major number %d\n",MAJOR_NR); return -1; } - for (unit=0;unit= PCD_UNITS) || (!PCD.present)) return -ENODEV; - MOD_INC_USE_COUNT; - return 0; } static void pcd_release(struct cdrom_device_info *cdi) -{ MOD_DEC_USE_COUNT; +{ } #ifdef MODULE diff -u --recursive --new-file v2.4.13/linux/drivers/block/paride/pd.c linux/drivers/block/paride/pd.c --- v2.4.13/linux/drivers/block/paride/pd.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/paride/pd.c Thu Oct 25 13:58:35 2001 @@ -354,6 +354,7 @@ }; static struct block_device_operations pd_fops = { + owner: THIS_MODULE, open: pd_open, release: pd_release, ioctl: pd_ioctl, @@ -430,8 +431,6 @@ if ((unit >= PD_UNITS) || (!PD.present)) return -ENODEV; - MOD_INC_USE_COUNT; - wait_event (pd_wait_open, pd_valid); PD.access++; @@ -515,8 +514,6 @@ if (!PD.access && PD.removable) pd_doorlock(unit,IDE_DOORUNLOCK); - - MOD_DEC_USE_COUNT; return 0; } diff -u --recursive --new-file v2.4.13/linux/drivers/block/paride/pf.c linux/drivers/block/paride/pf.c --- v2.4.13/linux/drivers/block/paride/pf.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/paride/pf.c Thu Oct 25 13:58:35 2001 @@ -312,6 +312,7 @@ /* kernel glue structures */ static struct block_device_operations pf_fops = { + owner: THIS_MODULE, open: pf_open, release: pf_release, ioctl: pf_ioctl, @@ -427,19 +428,13 @@ if ((unit >= PF_UNITS) || (!PF.present)) return -ENODEV; - MOD_INC_USE_COUNT; - pf_identify(unit); - if (PF.media_status == PF_NM) { - MOD_DEC_USE_COUNT; + if (PF.media_status == PF_NM) return -ENODEV; - } - if ((PF.media_status == PF_RO) && (file ->f_mode & 2)) { - MOD_DEC_USE_COUNT; + if ((PF.media_status == PF_RO) && (file ->f_mode & 2)) return -EROFS; - } PF.access++; if (PF.removable) pf_lock(unit,1); @@ -512,8 +507,6 @@ if (!PF.access && PF.removable) pf_lock(unit,0); - - MOD_DEC_USE_COUNT; return 0; diff -u --recursive --new-file v2.4.13/linux/drivers/block/ps2esdi.c linux/drivers/block/ps2esdi.c --- v2.4.13/linux/drivers/block/ps2esdi.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/ps2esdi.c Thu Oct 25 13:58:34 2001 @@ -150,6 +150,7 @@ static struct block_device_operations ps2esdi_fops = { + owner: THIS_MODULE, open: ps2esdi_open, release: ps2esdi_release, ioctl: ps2esdi_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/block/rd.c linux/drivers/block/rd.c --- v2.4.13/linux/drivers/block/rd.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/rd.c Thu Oct 25 13:58:35 2001 @@ -203,17 +203,6 @@ return 0; } -/* - * Writing: just make sure the page gets marked dirty, so that - * the page stealer won't grab it. - */ -static int ramdisk_writepage(struct page *page) -{ - SetPageDirty(page); - UnlockPage(page); - return 0; -} - static int ramdisk_prepare_write(struct file *file, struct page *page, unsigned offset, unsigned to) { if (!Page_Uptodate(page)) { @@ -233,7 +222,7 @@ static struct address_space_operations ramdisk_aops = { readpage: ramdisk_readpage, - writepage: ramdisk_writepage, + writepage: fail_writepage, prepare_write: ramdisk_prepare_write, commit_write: ramdisk_commit_write, }; @@ -463,20 +452,12 @@ rd_bdev[unit]->bd_inode->i_mapping->a_ops = &ramdisk_aops; } - MOD_INC_USE_COUNT; - - return 0; -} - -static int rd_release(struct inode * inode, struct file * filp) -{ - MOD_DEC_USE_COUNT; return 0; } static struct block_device_operations rd_bd_op = { + owner: THIS_MODULE, open: rd_open, - release: rd_release, ioctl: rd_ioctl, }; diff -u --recursive --new-file v2.4.13/linux/drivers/block/xd.c linux/drivers/block/xd.c --- v2.4.13/linux/drivers/block/xd.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/block/xd.c Thu Oct 25 13:58:35 2001 @@ -137,6 +137,7 @@ }; static struct block_device_operations xd_fops = { + owner: THIS_MODULE, open: xd_open, release: xd_release, ioctl: xd_ioctl, @@ -264,8 +265,6 @@ { int dev = DEVICE_NR(inode->i_rdev); - MOD_INC_USE_COUNT; - if (dev < xd_drives) { while (!xd_valid[dev]) sleep_on(&xd_wait_open); @@ -275,7 +274,6 @@ return (0); } - MOD_DEC_USE_COUNT; return -ENXIO; } @@ -374,10 +372,8 @@ static int xd_release (struct inode *inode, struct file *file) { int target = DEVICE_NR(inode->i_rdev); - if (target < xd_drives) { + if (target < xd_drives) xd_access[target]--; - MOD_DEC_USE_COUNT; - } return 0; } diff -u --recursive --new-file v2.4.13/linux/drivers/block/z2ram.c linux/drivers/block/z2ram.c --- v2.4.13/linux/drivers/block/z2ram.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/block/z2ram.c Thu Oct 25 13:58:35 2001 @@ -168,8 +168,6 @@ sizeof( z2ram_map[0] ); int rc = -ENOMEM; - MOD_INC_USE_COUNT; - device = DEVICE_NR( inode->i_rdev ); if ( current_device != -1 && current_device != device ) @@ -319,7 +317,6 @@ err_out_kfree: kfree( z2ram_map ); err_out: - MOD_DEC_USE_COUNT; return rc; } @@ -333,13 +330,12 @@ * FIXME: unmap memory */ - MOD_DEC_USE_COUNT; - return 0; } static struct block_device_operations z2_fops = { + owner: THIS_MODULE, open: z2_open, release: z2_release, }; diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/aztcd.c linux/drivers/cdrom/aztcd.c --- v2.4.13/linux/drivers/cdrom/aztcd.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/aztcd.c Thu Oct 25 13:58:35 2001 @@ -355,6 +355,7 @@ int aztcd_init(void); static struct block_device_operations azt_fops = { + owner:THIS_MODULE, open:aztcd_open, release:aztcd_release, ioctl:aztcd_ioctl, @@ -1658,8 +1659,6 @@ if (aztPresent == 0) return -ENXIO; /* no hardware */ - MOD_INC_USE_COUNT; - if (!azt_open_count && azt_state == AZT_S_IDLE) { azt_invalidate_buffers(); @@ -1691,7 +1690,6 @@ return 0; err_out: - MOD_DEC_USE_COUNT; return -EIO; } @@ -1706,7 +1704,6 @@ printk("inode: %p, inode->i_rdev: %x file: %p\n", inode, inode->i_rdev, file); #endif - MOD_DEC_USE_COUNT; if (!--azt_open_count) { azt_invalidate_buffers(); aztUnlockDoor(); diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/cdrom.c linux/drivers/cdrom/cdrom.c --- v2.4.13/linux/drivers/cdrom/cdrom.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/cdrom/cdrom.c Wed Oct 24 14:04:02 2001 @@ -310,11 +310,6 @@ #define CHECKAUDIO if ((ret=check_for_audio_disc(cdi, cdo))) return ret /* Not-exported routines. */ -static int cdrom_open(struct inode *ip, struct file *fp); -static int cdrom_release(struct inode *ip, struct file *fp); -static int cdrom_ioctl(struct inode *ip, struct file *fp, - unsigned int cmd, unsigned long arg); -static int cdrom_media_changed(kdev_t dev); static int open_for_data(struct cdrom_device_info * cdi); static int check_for_audio_disc(struct cdrom_device_info * cdi, struct cdrom_device_ops * cdo); @@ -333,14 +328,6 @@ static devfs_handle_t devfs_handle; static struct unique_numspace cdrom_numspace = UNIQUE_NUMBERSPACE_INITIALISER; -struct block_device_operations cdrom_fops = -{ - open: cdrom_open, - release: cdrom_release, - ioctl: cdrom_ioctl, - check_media_change: cdrom_media_changed, -}; - /* This macro makes sure we don't have to check on cdrom_device_ops * existence in the run-time routines below. Change_capability is a * hack to have the capability flags defined const, while we can still @@ -354,7 +341,6 @@ int major = MAJOR(cdi->dev); struct cdrom_device_ops *cdo = cdi->ops; int *change_capability = (int *)&cdo->capability; /* hack */ - char vname[16]; cdinfo(CD_OPEN, "entering register_cdrom\n"); @@ -396,7 +382,6 @@ if (!devfs_handle) devfs_handle = devfs_mk_dir (NULL, "cdroms", NULL); cdi->number = devfs_alloc_unique_number (&cdrom_numspace); - sprintf (vname, "cdrom%d", cdi->number); if (cdi->de) { int pos; devfs_handle_t slave; @@ -405,6 +390,8 @@ pos = devfs_generate_path (cdi->de, rname + 3, sizeof rname - 3); if (pos >= 0) { + char vname[16]; + sprintf (vname, "cdrom%d", cdi->number); strncpy (rname + pos, "../", 3); devfs_mk_symlink (devfs_handle, vname, DEVFS_FL_DEFAULT, @@ -412,13 +399,6 @@ devfs_auto_unregister (cdi->de, slave); } } - else { - cdi->de = - devfs_register (devfs_handle, vname, DEVFS_FL_DEFAULT, - MAJOR (cdi->dev), MINOR (cdi->dev), - S_IFBLK | S_IRUGO | S_IWUGO, - &cdrom_fops, NULL); - } cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name); cdi->next = topCdromPtr; topCdromPtr = cdi; @@ -475,7 +455,6 @@ * is in their own interest: device control becomes a lot easier * this way. */ -static int cdrom_open(struct inode *ip, struct file *fp) { struct cdrom_device_info *cdi; @@ -669,7 +648,6 @@ /* Admittedly, the logic below could be performed in a nicer way. */ -static int cdrom_release(struct inode *ip, struct file *fp) { kdev_t dev = ip->i_rdev; @@ -867,7 +845,7 @@ return ret; } -static int cdrom_media_changed(kdev_t dev) +int cdrom_media_changed(kdev_t dev) { struct cdrom_device_info *cdi = cdrom_find_device(dev); /* This talks to the VFS, which doesn't like errors - just 1 or 0. @@ -1480,7 +1458,7 @@ * these days. ATAPI / SCSI specific code now mainly resides in * mmc_ioct(). */ -static int cdrom_ioctl(struct inode *ip, struct file *fp, unsigned int cmd, +int cdrom_ioctl(struct inode *ip, struct file *fp, unsigned int cmd, unsigned long arg) { kdev_t dev = ip->i_rdev; @@ -2391,7 +2369,10 @@ EXPORT_SYMBOL(cdrom_count_tracks); EXPORT_SYMBOL(register_cdrom); EXPORT_SYMBOL(unregister_cdrom); -EXPORT_SYMBOL(cdrom_fops); +EXPORT_SYMBOL(cdrom_open); +EXPORT_SYMBOL(cdrom_release); +EXPORT_SYMBOL(cdrom_ioctl); +EXPORT_SYMBOL(cdrom_media_changed); EXPORT_SYMBOL(cdrom_number_of_slots); EXPORT_SYMBOL(cdrom_select_disc); EXPORT_SYMBOL(cdrom_mode_select); diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/cdu31a.c linux/drivers/cdrom/cdu31a.c --- v2.4.13/linux/drivers/cdrom/cdu31a.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/cdu31a.c Thu Oct 25 13:58:35 2001 @@ -3112,17 +3112,13 @@ unsigned int res_size; unsigned char params[2]; - MOD_INC_USE_COUNT; if (sony_usage == 0) { - if (scd_spinup() != 0) { - MOD_DEC_USE_COUNT; + if (scd_spinup() != 0) return -EIO; - } sony_get_toc(); if (!sony_toc_read) { do_sony_cd_cmd(SONY_SPIN_DOWN_CMD, NULL, 0, res_reg, &res_size); - MOD_DEC_USE_COUNT; return -EIO; } @@ -3183,9 +3179,17 @@ sony_spun_up = 0; } sony_usage--; - MOD_DEC_USE_COUNT; } +struct block_device_operations scd_bdops = +{ + owner: THIS_MODULE, + open: cdrom_open, + release: cdrom_release, + ioctl: cdrom_ioctl, + check_media_change: cdrom_media_changed, +}; + static struct cdrom_device_ops scd_dops = { open:scd_open, release:scd_release, @@ -3383,7 +3387,7 @@ request_region(cdu31a_port, 4, "cdu31a"); - if (devfs_register_blkdev(MAJOR_NR, "cdu31a", &cdrom_fops)) { + if (devfs_register_blkdev(MAJOR_NR, "cdu31a", &scd_bdops)) { printk("Unable to get major %d for CDU-31a\n", MAJOR_NR); goto errout2; @@ -3465,6 +3469,7 @@ if (register_cdrom(&scd_info)) { goto errout0; } + devfs_plain_cdrom(&scd_info, &scd_bdops); } diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/cm206.c linux/drivers/cdrom/cm206.c --- v2.4.13/linux/drivers/cdrom/cm206.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/cm206.c Thu Oct 25 13:58:35 2001 @@ -765,11 +765,19 @@ } } +struct block_device_operations cm206_bdops = +{ + owner: THIS_MODULE, + open: cdrom_open, + release: cdrom_release, + ioctl: cdrom_ioctl, + check_media_change: cdrom_media_changed, +}; + /* The new open. The real opening strategy is defined in cdrom.c. */ static int cm206_open(struct cdrom_device_info *cdi, int purpose) { - MOD_INC_USE_COUNT; if (!cd->openfiles) { /* reset only first time */ cd->background = 0; reset_cm260(); @@ -792,7 +800,6 @@ FIRST_TRACK = 0; /* No valid disc status */ } --cd->openfiles; - MOD_DEC_USE_COUNT; } /* Empty buffer empties $sectors$ sectors of the adapter card buffer, @@ -1478,7 +1485,7 @@ return -EIO; } printk(".\n"); - if (devfs_register_blkdev(MAJOR_NR, "cm206", &cdrom_fops) != 0) { + if (devfs_register_blkdev(MAJOR_NR, "cm206", &cm206_bdops) != 0) { printk(KERN_INFO "Cannot register for major %d!\n", MAJOR_NR); cleanup(3); @@ -1491,6 +1498,7 @@ cleanup(3); return -EIO; } + devfs_plain_cdrom(&cm206_info, &cm206_bdops); blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST); blksize_size[MAJOR_NR] = cm206_blocksizes; read_ahead[MAJOR_NR] = 16; /* reads ahead what? */ diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/gscd.c linux/drivers/cdrom/gscd.c --- v2.4.13/linux/drivers/cdrom/gscd.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/gscd.c Thu Oct 25 13:58:35 2001 @@ -164,6 +164,7 @@ static struct timer_list gscd_timer; static struct block_device_operations gscd_fops = { + owner:THIS_MODULE, open:gscd_open, release:gscd_release, ioctl:gscd_ioctl, @@ -381,13 +382,10 @@ if (gscdPresent == 0) return -ENXIO; /* no hardware */ - MOD_INC_USE_COUNT; - get_status(); st = disk_state & (ST_NO_DISK | ST_DOOR_OPEN); if (st) { printk("GSCD: no disk or door open\n"); - MOD_DEC_USE_COUNT; return -ENXIO; } @@ -412,7 +410,6 @@ gscd_bn = -1; - MOD_DEC_USE_COUNT; return 0; } diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/mcd.c linux/drivers/cdrom/mcd.c --- v2.4.13/linux/drivers/cdrom/mcd.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/mcd.c Thu Oct 25 13:58:35 2001 @@ -189,6 +189,15 @@ void *arg); int mcd_drive_status(struct cdrom_device_info *cdi, int slot_nr); +struct block_device_operations mcd_bdops = +{ + owner: THIS_MODULE, + open: cdrom_open, + release: cdrom_release, + ioctl: cdrom_ioctl, + check_media_change: cdrom_media_changed, +}; + static struct timer_list mcd_timer; static struct cdrom_device_ops mcd_dops = { @@ -978,8 +987,6 @@ if (mcdPresent == 0) return -ENXIO; /* no hardware */ - MOD_INC_USE_COUNT; - if (mcd_open_count || mcd_state != MCD_S_IDLE) goto bump_count; @@ -1002,7 +1009,6 @@ return 0; err_out: - MOD_DEC_USE_COUNT; return -EIO; } @@ -1015,7 +1021,6 @@ if (!--mcd_open_count) { mcd_invalidate_buffers(); } - MOD_DEC_USE_COUNT; } @@ -1060,7 +1065,7 @@ return -EIO; } - if (devfs_register_blkdev(MAJOR_NR, "mcd", &cdrom_fops) != 0) { + if (devfs_register_blkdev(MAJOR_NR, "mcd", &mcd_bdops) != 0) { printk(KERN_ERR "mcd: Unable to get major %d for Mitsumi CD-ROM\n", MAJOR_NR); return -EIO; } @@ -1152,6 +1157,7 @@ cleanup(3); return -EIO; } + devfs_plain_cdrom(&mcd_info, &mcd_bdops); printk(msg); return 0; diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/mcdx.c linux/drivers/cdrom/mcdx.c --- v2.4.13/linux/drivers/cdrom/mcdx.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/mcdx.c Thu Oct 25 13:58:35 2001 @@ -219,6 +219,15 @@ int mcdx_init(void); void do_mcdx_request(request_queue_t * q); +struct block_device_operations mcdx_bdops = +{ + owner: THIS_MODULE, + open: cdrom_open, + release: cdrom_release, + ioctl: cdrom_ioctl, + check_media_change: cdrom_media_changed, +}; + /* Indirect exported functions. These functions are exported by their addresses, such as mcdx_open and mcdx_close in the @@ -640,13 +649,10 @@ /* Make the modules looking used ... (thanx bjorn). * But we shouldn't forget to decrement the module counter * on error return */ - MOD_INC_USE_COUNT; /* this is only done to test if the drive talks with us */ - if (-1 == mcdx_getstatus(stuffp, 1)) { - MOD_DEC_USE_COUNT; + if (-1 == mcdx_getstatus(stuffp, 1)) return -EIO; - } if (stuffp->xxx) { @@ -705,10 +711,8 @@ } xtrace(OPENCLOSE, "open() init irq generation\n"); - if (-1 == mcdx_config(stuffp, 1)) { - MOD_DEC_USE_COUNT; + if (-1 == mcdx_config(stuffp, 1)) return -EIO; - } #if FALLBACK /* Set the read speed */ xwarn("AAA %x AAA\n", stuffp->readcmd); @@ -745,7 +749,7 @@ MODE2 : MODE1, 1))) { - /* MOD_DEC_USE_COUNT, return -EIO; */ + /* return -EIO; */ stuffp->xa = 0; break; } @@ -765,10 +769,8 @@ /* xa disks will be read in raw mode, others not */ if (-1 == mcdx_setdrivemode(stuffp, stuffp->xa ? RAW : COOKED, - 1)) { - MOD_DEC_USE_COUNT; + 1)) return -EIO; - } if (stuffp->audio) { xinfo("open() audio disk found\n"); } else if (stuffp->lastsector >= 0) { @@ -792,8 +794,6 @@ stuffp = mcdx_stuffp[MINOR(cdi->dev)]; --stuffp->users; - - MOD_DEC_USE_COUNT; } static int mcdx_media_changed(struct cdrom_device_info *cdi, int disc_nr) @@ -1180,7 +1180,7 @@ } xtrace(INIT, "init() register blkdev\n"); - if (devfs_register_blkdev(MAJOR_NR, "mcdx", &cdrom_fops) != 0) { + if (devfs_register_blkdev(MAJOR_NR, "mcdx", &mcdx_bdops) != 0) { xwarn("%s=0x%3p,%d: Init failed. Can't get major %d.\n", MCDX, stuffp->wreg_data, stuffp->irq, MAJOR_NR); kfree(stuffp); @@ -1240,6 +1240,7 @@ blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); return 2; } + devfs_plain_cdrom(&mcdx_info, &mcdx_bdops); printk(msg); return 0; } diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/optcd.c linux/drivers/cdrom/optcd.c --- v2.4.13/linux/drivers/cdrom/optcd.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/optcd.c Thu Oct 25 13:58:35 2001 @@ -1871,8 +1871,6 @@ { DEBUG((DEBUG_VFS, "starting opt_open")); - MOD_INC_USE_COUNT; - if (!open_count && state == S_IDLE) { int status; @@ -1916,7 +1914,6 @@ return 0; err_out: - MOD_DEC_USE_COUNT; return -EIO; } @@ -1944,7 +1941,6 @@ del_timer(&delay_timer); del_timer(&req_timer); } - MOD_DEC_USE_COUNT; return 0; } @@ -2005,6 +2001,7 @@ static struct block_device_operations opt_fops = { + owner: THIS_MODULE, open: opt_open, release: opt_release, ioctl: opt_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/sbpcd.c linux/drivers/cdrom/sbpcd.c --- v2.4.13/linux/drivers/cdrom/sbpcd.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/sbpcd.c Thu Oct 25 13:58:35 2001 @@ -5418,6 +5418,15 @@ return (1); } /*==========================================================================*/ + +static struct block_device_operations sbpcd_bdops = +{ + owner: THIS_MODULE, + open: cdrom_open, + release: cdrom_release, + ioctl: cdrom_ioctl, + check_media_change: cdrom_media_changed, +}; /*==========================================================================*/ /* * Open the device special file. Check that a disk is in. Read TOC. @@ -5428,7 +5437,6 @@ i = MINOR(cdi->dev); - MOD_INC_USE_COUNT; down(&ioctl_read_sem); switch_drive(i); @@ -5495,7 +5503,6 @@ } } up(&ioctl_read_sem); - MOD_DEC_USE_COUNT; return ; } /*==========================================================================*/ @@ -5848,7 +5855,7 @@ OUT(MIXER_data,0xCC); /* one nibble per channel, max. value: 0xFF */ #endif /* SOUND_BASE */ - if (devfs_register_blkdev(MAJOR_NR, major_name, &cdrom_fops) != 0) + if (devfs_register_blkdev(MAJOR_NR, major_name, &sbpcd_bdops) != 0) { msg(DBG_INF, "Can't get MAJOR %d for Matsushita CDROM\n", MAJOR_NR); #ifdef MODULE @@ -5923,7 +5930,7 @@ sbpcd_infop->de = devfs_register (devfs_handle, nbuff, DEVFS_FL_DEFAULT, MAJOR_NR, j, S_IFBLK | S_IRUGO | S_IWUGO, - &cdrom_fops, NULL); + &sbpcd_bdops, NULL); if (register_cdrom(sbpcd_infop)) { printk(" sbpcd: Unable to register with Uniform CD-ROm driver\n"); diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/sjcd.c linux/drivers/cdrom/sjcd.c --- v2.4.13/linux/drivers/cdrom/sjcd.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/sjcd.c Thu Oct 25 13:58:35 2001 @@ -1551,8 +1551,6 @@ if (fp->f_mode & 2) return (-EROFS); - MOD_INC_USE_COUNT; - if (sjcd_open_count == 0) { int s, sjcd_open_tries; /* We don't know that, do we? */ @@ -1618,7 +1616,6 @@ return (0); err_out: - MOD_DEC_USE_COUNT; return (-EIO); } @@ -1632,9 +1629,6 @@ #if defined( SJCD_TRACE ) printk("SJCD: release\n"); #endif -#ifdef MODULE - MOD_DEC_USE_COUNT; -#endif if (--sjcd_open_count == 0) { sjcd_invalidate_buffers(); s = sjcd_tray_unlock(); @@ -1662,6 +1656,7 @@ * A list of file operations allowed for this cdrom. */ static struct block_device_operations sjcd_fops = { + owner:THIS_MODULE, open:sjcd_open, release:sjcd_release, ioctl:sjcd_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/cdrom/sonycd535.c linux/drivers/cdrom/sonycd535.c --- v2.4.13/linux/drivers/cdrom/sonycd535.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/cdrom/sonycd535.c Thu Oct 25 13:58:35 2001 @@ -1399,13 +1399,11 @@ if (check_drive_status() != 0) return -EIO; sony_inuse = 1; - MOD_INC_USE_COUNT; if (spin_up_drive(status) != 0) { printk(CDU535_MESSAGE_NAME " error 0x%.2x (cdu_open, spin up)\n", status[0]); sony_inuse = 0; - MOD_DEC_USE_COUNT; return -EIO; } sony_get_toc(); @@ -1413,7 +1411,6 @@ cmd_buff[0] = SONY535_SPIN_DOWN; do_sony_cmd(cmd_buff, 1, status, NULL, 0, 0); sony_inuse = 0; - MOD_DEC_USE_COUNT; return -EIO; } if (inode) { @@ -1442,7 +1439,6 @@ Byte status[2], cmd_no; sony_inuse = 0; - MOD_DEC_USE_COUNT; if (0 < sony_usage) { sony_usage--; @@ -1463,9 +1459,9 @@ return 0; } - static struct block_device_operations cdu_fops = { + owner: THIS_MODULE, open: cdu_open, release: cdu_release, ioctl: cdu_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/char/Config.in linux/drivers/char/Config.in --- v2.4.13/linux/drivers/char/Config.in Tue Oct 23 22:48:50 2001 +++ linux/drivers/char/Config.in Thu Oct 25 14:01:51 2001 @@ -221,6 +221,8 @@ source drivers/char/pcmcia/Config.in fi -tristate 'ACP Modem (Mwave) support' CONFIG_MWAVE +if [ "$CONFIG_X86" = "y" ]; then + tristate 'ACP Modem (Mwave) support' CONFIG_MWAVE +fi endmenu diff -u --recursive --new-file v2.4.13/linux/drivers/char/Makefile linux/drivers/char/Makefile --- v2.4.13/linux/drivers/char/Makefile Tue Oct 23 22:48:50 2001 +++ linux/drivers/char/Makefile Fri Nov 2 17:46:47 2001 @@ -192,6 +192,7 @@ obj-$(CONFIG_NVRAM) += nvram.o endif obj-$(CONFIG_TOSHIBA) += toshiba.o +obj-$(CONFIG_I8K) += i8k.o obj-$(CONFIG_DS1620) += ds1620.o obj-$(CONFIG_INTEL_RNG) += i810_rng.o diff -u --recursive --new-file v2.4.13/linux/drivers/char/README.computone linux/drivers/char/README.computone --- v2.4.13/linux/drivers/char/README.computone Fri Feb 16 16:02:36 2001 +++ linux/drivers/char/README.computone Wed Oct 24 12:05:18 2001 @@ -1,227 +1,10 @@ - Computone Intelliport II/Plus Multiport Serial Driver ----------------------------------------------------- -Release Notes For Linux Kernel 2.2 -These notes have been tested on Linux kernels 2.0 and 2.2. - -Please refer to Documentation/computone.txt for information on the driver -that is included with the kernel sources. - - -Version: 1.2.9 -Date: 04/12/2000 -Fixes and Updates: Doug McNash -Historical Author: Andrew Manison -Kernel Integration: Mike Warfield - -1. INTRODUCTION - -This driver supports the entire family of Intelliport II/Plus controllers -with the exception of the MicroChannel controllers. - -This driver was developed on the v2.0.x Linux source tree and has been -tested up to v2.2.14; it will probably not work with earlier v1.X kernels, -and has not yet been tested on the v2.1.x tree. The most likely problems -will be in patching the kernel sources to support the driver. For this -reason there are 2 different patch files for 2.0.XX and 2.2.XX kernels. -Make sure you use the right one! -Note that a version (1.2.5) is included in the 2.2.12+ kernels so this -will not be a new install but and upgrade. - - -2. QUICK INSTALLATION - -Hardware - If you have an ISA card, find a free interrupt and io port. - List those in use with `cat /proc/interrupts` and - `cat /proc/ioports`. Set the card dip switches to that free - address. You may need to configure your BIOS to reserve the - irq for the ISA card. PCI and EISA parameters are set - automagically and need only be set to nonzero values. - Insert card into computer with the power off before or after - driver installation. - -Software - New Installation - -Module installation: - -a) Obtain driver-kernel patch file -b) Copy to the linux source tree root, Run ip2build (if not patch) -c) Determine free irq/address to use if any (configure BIOS if need be) -d) Run "make config" or "make menuconfig" or "make xconfig" - Select (m) module for CONFIG_COMPUTONE under character - devices. CONFIG_PCI and CONFIG_MODULES also may need to be set. -e) Set address on ISA cards then: - edit /usr/src/linux/drivers/char/ip2/ip2.h if needed - or - edit /etc/modules.conf if needed (module). - or both to match this setting. -f) Run "make dep" -g) Run "make modules" -h) Run "make modules_install" -i) Run "/sbin/depmod -a" -i) install driver using `modprobe ip2 ` (options listed below) -j) run mkip2dev - - -Kernel installation: - -a) Obtain driver-kernel patch file -b) Copy to the linux source tree root, Run ip2build (if not patch) -c) Determine free irq/address to use if any (configure BIOS if need be) -d) Run "make config" or "make menuconfig" or "make xconfig" - Select (y) kernel for CONFIG_COMPUTONE under character - devices. CONFIG_PCI may need to be set if you have PCI bus. -e) Set address on ISA cards then: - edit /usr/src/linux/drivers/char/ip2/ip2.h -f) Run "make dep" -g) Run "make zImage" or whatever target you prefer. -h) mv /usr/src/linux/arch/i386/boot/zImage to /boot. -i) add new config for this kernel into /etc/lilo.conf, run "lilo" -j) reboot using this kernel -k) make and run ip2/mkip2dev - -Software - Upgrades - -a) Install new sources in proper location, usually /usr/src/linux/drivers/char -b) Follow steps above to create new kernel or modules - -3. INSTALLATION - -Previously, the driver sources were packaged with a set of patch files -to update the character drivers' makefile and configuration file, and other -kernel source files. A build script (ip2build) was included which applies -the patches if needed, and build any utilities needed. -What you receive may be a single patch file in conventional kernel -patch format build script. That form can also be applied by -running patch -p1 < ThePatchFile. Otherwise the drivers source may be -a tar file, then untar and run ip2build if a new installation. - -The driver can be installed as a module (recommended) or built into the -kernel. This is selected as for other drivers through the `make config` -command from the root of the Linux source tree. If the driver is built -into the kernel you will need to edit the file ip2.h to match the boards -you are installing. See that file for instructions. If the driver is -installed as a module the configuration can also be specified on the -modprobe command line as follows: - - modprobe ip2 irq=irq1,irq2,irq3,irq4 io=addr1,addr2,addr3,addr4 - -where irqnum is one of the valid Intelliport II interrupts (3,4,5,7,10,11, -12,15) and addr1-4 are the base addresses for up to four controllers. If -the irqs are not specified the driver uses the default in ip2/ip2.h (which -selects polled mode). The io addresses are set to io=1 for PCI cards,i -io=2 for EISA cards or io=[some valid ISA address] for ISA cards. If no -base addresses are specified the defaults in ip2.h are used. If you are -autoloading the driver module with kerneld or kmod the base addresses and -interrupt number must also be set in ip2/ip2.h and recompile or just insert -an options line in /etc/modules.conf or both. The command line takes -precidence over the options line which takes precidence over the defaults -in ip2.h. - -command line sample: - - modprobe ip2 io=1,0x328 irq=1,10 - -/etc/modules.conf sample: - - options ip2 io=1,0x328 irq=1,10 - alias char-major-71 ip2 - alias char-major-72 ip2 - alias char-major-73 ip2 - -the equivelant ip2.h: - -static ip2config_t ip2config = -{ - {1,10,0,0}, - { - 0x0001, // Board 0, ttyF0 - ttyF63 /* PCI card */ - 0x0328, // Board 1, ttyF64 - ttyF127 /* ISA card */ - 0x0000, // Board 2, ttyF128 - ttyF191 /* empty */ - 0x0000 // Board 3, ttyF192 - ttyF255 /* empty */ - } -}; - -Specifying an invalid or in-use ISA irq will default the driver into -running in polled mode for that card. If all irq entries are 0 then -all cards will operate in polled mode. Note that the PCI will be -assigned it's irq by the BIOS and may not match what you specify. -It must be non-zero otherwise it will be polled. - -Tarball Install: - -The whole tarfile should be untarred in the /usr/src/linux/drivers/char/ -directory. Most files required for the driver are placed in the ip2 -subdirectory. Then execute the script (for a new install only) - - ip2build - -which will patch the files. - -Kernel Patch Install: - - cd to the Linux source root, run patch -p1 < ThePatchFile. - -Now return to the root directory of the Linux -source tree and run make config or make menuconfig. You will be prompted -for the Computone drivers, either as a module or part of the kernel. -If you have a PCI card you many need to select PCI bios support (CONFIG_PCI) -if not enabled already. Ditto for CONFIG_MODULES if you use modules. - -If you select the driver as part of the kernel run : - - make depend - make bzImage(,zlilo or whatever you do to create a bootable kernel) - -If you selected a module run : - - make modules && make modules_install - -The utility ip2mkdev creates all the device nodes required by the driver. -For a device to be created it must be configured in the driver and the -board must be installed. Only devices corresponding to real IntelliPort II -ports are created. With multiple boards and expansion boxes this will -leave gaps in the sequence of device names. ip2mkdev uses Linux tty naming -conventions: ttyF0 - ttyF255 for normal devices, and cuf0 - cuf255 for -callout devices. Note that the callout devices are going away in the -future and that is what the warning messages are trying to tell you. - -4. USING THE DRIVERS - -As noted above, the driver implements the ports in accordance with Linux -conventions, and the devices should be interchangeable with the standard -serial devices. (This is a key point for problem reporting: please make -sure that what you are trying do works on the ttySx/cuax ports first; then -tell us what went wrong with the ip2 ports!) - -Higher speeds can be obtained using the setserial utility which remaps -38,400 bps (extb) to 57,600 bps, 115,200 bps, or a custom speed. -Intelliport II installations using the PowerPort expansion module can -use the custom speed setting to select the highest speeds: 153,600 bps, -230,400 bps, 307,200 bps, 460,800bps and 921,600 bps. The base for -custom baud rate configuration is fixed at 921,600 for cards/expantion -modules with ST654's and 115200 for those with Cirrus CD1400's. This -corresponds to the maximum bit rates those chips are capable. -For example if the baud base is 921600 and the baud divisor is 18 then -the custom rate is 921600/18 = 51200 bps. See the setserial man page for -complete details. Of course, if stty accepts the higher rates now you can -use that as well as the standard ioctls(). - -5. NOTES - -This is a release version of the driver, but it is impossible to test it -in all configurations of Linux. If there is any anomalous behaviour that -does not match the standard serial port's behaviour please let us know. - -Some installations report that characters fail to echo immediatly at a -terminal if the kernel/modules are compiled with the CONFIG_M386 and -the card is run in polling mode on a pentium class machine. Compiling -with a more appropriate processor flag or running on interrupt would be -the fix as well as the wise thing to do. +Release Notes For Linux Kernel 2.2 and higher +This file is now deprecated and will be removed at some point. +Please refer to the file Documentation/computone.txt instead. -Author: dougm@computone.com -Testing: larryg@computone.com -Support: support@computone.com +Michael H. Warfield 08/12/2001 diff -u --recursive --new-file v2.4.13/linux/drivers/char/applicom.c linux/drivers/char/applicom.c --- v2.4.13/linux/drivers/char/applicom.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/applicom.c Thu Oct 25 13:53:47 2001 @@ -72,6 +72,17 @@ "PCI2000PFB" }; +static struct pci_device_id applicom_pci_tbl[] = { + { PCI_VENDOR_ID_APPLICOM, PCI_DEVICE_ID_APPLICOM_PCIGENERIC, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, + { PCI_VENDOR_ID_APPLICOM, PCI_DEVICE_ID_APPLICOM_PCI2000IBS_CAN, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, + { PCI_VENDOR_ID_APPLICOM, PCI_DEVICE_ID_APPLICOM_PCI2000PFB, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, + { 0 } +}; +MODULE_DEVICE_TABLE(pci, applicom_pci_tbl); + MODULE_AUTHOR("David Woodhouse & Applicom International"); MODULE_DESCRIPTION("Driver for Applicom Profibus card"); MODULE_LICENSE("GPL"); @@ -437,7 +448,7 @@ } /* We may not have actually slept */ - current->state = TASK_RUNNING; + set_current_state(TASK_RUNNING); remove_wait_queue(&apbs[IndexCard].FlagSleepSend, &wait); writeb(1, apbs[IndexCard].RamIO + DATA_FROM_PC_READY); diff -u --recursive --new-file v2.4.13/linux/drivers/char/drm/drmP.h linux/drivers/char/drm/drmP.h --- v2.4.13/linux/drivers/char/drm/drmP.h Thu Oct 18 13:48:13 2001 +++ linux/drivers/char/drm/drmP.h Mon Nov 5 12:42:41 2001 @@ -781,30 +781,30 @@ #if LINUX_VERSION_CODE < 0x020317 extern unsigned long DRM(vm_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access); + int unused); extern unsigned long DRM(vm_shm_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access); + int unused); extern unsigned long DRM(vm_dma_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access); + int unused); extern unsigned long DRM(vm_sg_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access); + int unused); #else /* Return type changed in 2.3.23 */ extern struct page *DRM(vm_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access); + int unused); extern struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access); + int unused); extern struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access); + int unused); extern struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access); + int unused); #endif extern void DRM(vm_open)(struct vm_area_struct *vma); extern void DRM(vm_close)(struct vm_area_struct *vma); diff -u --recursive --new-file v2.4.13/linux/drivers/char/drm/drm_vm.h linux/drivers/char/drm/drm_vm.h --- v2.4.13/linux/drivers/char/drm/drm_vm.h Tue Oct 23 22:48:50 2001 +++ linux/drivers/char/drm/drm_vm.h Mon Nov 5 12:42:41 2001 @@ -59,12 +59,12 @@ #if LINUX_VERSION_CODE < 0x020317 unsigned long DRM(vm_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access) + int unused) #else /* Return type changed in 2.3.23 */ struct page *DRM(vm_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access) + int unused) #endif { #if __REALLY_HAVE_AGP @@ -137,12 +137,12 @@ #if LINUX_VERSION_CODE < 0x020317 unsigned long DRM(vm_shm_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access) + int unused) #else /* Return type changed in 2.3.23 */ struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access) + int unused) #endif { #if LINUX_VERSION_CODE >= 0x020300 @@ -273,12 +273,12 @@ #if LINUX_VERSION_CODE < 0x020317 unsigned long DRM(vm_dma_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access) + int unused) #else /* Return type changed in 2.3.23 */ struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access) + int unused) #endif { drm_file_t *priv = vma->vm_file->private_data; @@ -310,12 +310,12 @@ #if LINUX_VERSION_CODE < 0x020317 unsigned long DRM(vm_sg_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access) + int unused) #else /* Return type changed in 2.3.23 */ struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma, unsigned long address, - int write_access) + int unused) #endif { #if LINUX_VERSION_CODE >= 0x020300 diff -u --recursive --new-file v2.4.13/linux/drivers/char/eurotechwdt.c linux/drivers/char/eurotechwdt.c --- v2.4.13/linux/drivers/char/eurotechwdt.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/char/eurotechwdt.c Thu Oct 25 13:53:47 2001 @@ -0,0 +1,480 @@ +/* + * Eurotech CPU-1220/1410 on board WDT driver for Linux 2.4.x + * + * (c) Copyright 2001 Ascensit + * (c) Copyright 2001 Rodolfo Giometti + * + * Based on wdt.c. + * Original copyright messages: + * + * (c) Copyright 1996-1997 Alan Cox , All Rights Reserved. + * http://www.redhat.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. + * + * Neither Alan Cox nor CymruNet Ltd. admit liability nor provide + * warranty for any of this software. This material is provided + * "AS-IS" and at no charge. + * + * (c) Copyright 1995 Alan Cox * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static int eurwdt_is_open; +static int eurwdt_timeout; +static spinlock_t eurwdt_lock; + +/* + * You must set these - there is no sane way to probe for this board. + * You can use wdt=x,y to set these now. + */ + +static int io = 0x3f0; +static int irq = 10; +static char *ev = "int"; + +#define WDT_TIMEOUT 60 /* 1 minute */ + + +/* + * Some symbolic names + */ + +#define WDT_CTRL_REG 0x30 +#define WDT_OUTPIN_CFG 0xe2 + #define WDT_EVENT_INT 0x00 + #define WDT_EVENT_REBOOT 0x08 +#define WDT_UNIT_SEL 0xf1 + #define WDT_UNIT_SECS 0x80 +#define WDT_TIMEOUT_VAL 0xf2 +#define WDT_TIMER_CFG 0xf3 + + +#ifndef MODULE + +/** + * eurwdt_setup: + * @str: command line string + * + * Setup options. The board isn't really probe-able so we have to + * get the user to tell us the configuration. Sane people build it + * modular but the others come here. + */ + +static int __init eurwdt_setup(char *str) +{ + int ints[4]; + + str = get_options (str, ARRAY_SIZE(ints), ints); + + if (ints[0] > 0) { + io = ints[1]; + if (ints[0] > 1) + irq = ints[2]; + } + + return 1; +} + +__setup("wdt=", eurwdt_setup); + +#endif /* !MODULE */ + +MODULE_PARM(io, "i"); +MODULE_PARM_DESC(io, "Eurotech WDT io port (default=0x3f0)"); +MODULE_PARM(irq, "i"); +MODULE_PARM_DESC(irq, "Eurotech WDT irq (default=10)"); +MODULE_PARM(ev, "s"); +MODULE_PARM_DESC(ev, "Eurotech WDT event type (default is `reboot')"); + + +/* + * Programming support + */ + +static inline void eurwdt_write_reg(u8 index, u8 data) +{ + outb(index, io); + outb(data, io+1); +} + +static inline void eurwdt_lock_chip(void) +{ + outb(0xaa, io); +} + +static inline void eurwdt_unlock_chip(void) +{ + outb(0x55, io); + eurwdt_write_reg(0x07, 0x08); /* set the logical device */ +} + +static inline void eurwdt_set_timeout(int timeout) +{ + eurwdt_write_reg(WDT_TIMEOUT_VAL, (u8) timeout); +} + +static inline void eurwdt_disable_timer(void) +{ + eurwdt_set_timeout(0); +} + +static void eurwdt_activate_timer(void) +{ + eurwdt_disable_timer(); + eurwdt_write_reg(WDT_CTRL_REG, 0x01); /* activate the WDT */ + eurwdt_write_reg(WDT_OUTPIN_CFG, !strcmp("int", ev) ? + WDT_EVENT_INT : WDT_EVENT_REBOOT); + /* Setting interrupt line */ + if (irq == 2 || irq > 15 || irq < 0) { + printk(KERN_ERR ": invalid irq number\n"); + irq = 0; /* if invalid we disable interrupt */ + } + if (irq == 0) + printk(KERN_INFO ": interrupt disabled\n"); + eurwdt_write_reg(WDT_TIMER_CFG, irq<<4); + + eurwdt_write_reg(WDT_UNIT_SEL, WDT_UNIT_SECS); /* we use seconds */ + eurwdt_set_timeout(0); /* the default timeout */ +} + + +/* + * Kernel methods. + */ + +void eurwdt_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + printk(KERN_CRIT "timeout WDT timeout\n"); + +#ifdef ONLY_TESTING + printk(KERN_CRIT "Would Reboot.\n"); +#else + printk(KERN_CRIT "Initiating system reboot.\n"); + machine_restart(NULL); +#endif +} + + +/** + * eurwdt_ping: + * + * Reload counter one with the watchdog timeout. + */ + +static void eurwdt_ping(void) +{ + /* Write the watchdog default value */ + eurwdt_set_timeout(eurwdt_timeout); +} + +/** + * eurwdt_write: + * @file: file handle to the watchdog + * @buf: buffer to write (unused as data does not matter here + * @count: count of bytes + * @ppos: pointer to the position to write. No seeks allowed + * + * A write to a watchdog device is defined as a keepalive signal. Any + * write of data will do, as we we don't define content meaning. + */ + +static ssize_t eurwdt_write(struct file *file, const char *buf, size_t count, +loff_t *ppos) +{ + /* Can't seek (pwrite) on this device */ + if (ppos != &file->f_pos) + return -ESPIPE; + + if (count) { + eurwdt_ping(); /* the default timeout */ + return 1; + } + + return 0; +} + +/** + * eurwdt_ioctl: + * @inode: inode of the device + * @file: file handle to the device + * @cmd: watchdog command + * @arg: argument pointer + * + * The watchdog API defines a common set of functions for all watchdogs + * according to their available features. + */ + +static int eurwdt_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + static struct watchdog_info ident = { + options : WDIOF_CARDRESET, + firmware_version : 1, + identity : "WDT Eurotech CPU-1220/1410" + }; + + int time; + + switch(cmd) { + default: + return -ENOTTY; + + case WDIOC_GETSUPPORT: + return copy_to_user((struct watchdog_info *)arg, &ident, + sizeof(ident)) ? -EFAULT : 0; + + case WDIOC_GETBOOTSTATUS: + return put_user(0, (int *) arg); + + case WDIOC_KEEPALIVE: + eurwdt_ping(); + return 0; + + case WDIOC_SETTIMEOUT: + if (copy_from_user(&time, (int *) arg, sizeof(int))) + return -EFAULT; + + /* Sanity check */ + if (time < 0 || time > 255) + return -EINVAL; + + eurwdt_timeout = time; + eurwdt_set_timeout(time); + return 0; + } +} + +/** + * eurwdt_open: + * @inode: inode of device + * @file: file handle to device + * + * The misc device has been opened. The watchdog device is single + * open and on opening we load the counter. + */ + +static int eurwdt_open(struct inode *inode, struct file *file) +{ + switch (MINOR(inode->i_rdev)) { + case WATCHDOG_MINOR: + spin_lock(&eurwdt_lock); + if (eurwdt_is_open) { + spin_unlock(&eurwdt_lock); + return -EBUSY; + } + + eurwdt_is_open = 1; + eurwdt_timeout = WDT_TIMEOUT; /* initial timeout */ + + /* Activate the WDT */ + eurwdt_activate_timer(); + + spin_unlock(&eurwdt_lock); + + MOD_INC_USE_COUNT; + + return 0; + + case TEMP_MINOR: + return 0; + + default: + return -ENODEV; + } +} + +/** + * eurwdt_release: + * @inode: inode to board + * @file: file handle to board + * + * The watchdog has a configurable API. There is a religious dispute + * between people who want their watchdog to be able to shut down and + * those who want to be sure if the watchdog manager dies the machine + * reboots. In the former case we disable the counters, in the latter + * case you have to open it again very soon. + */ + +static int eurwdt_release(struct inode *inode, struct file *file) +{ + if (MINOR(inode->i_rdev) == WATCHDOG_MINOR) { +#ifndef CONFIG_WATCHDOG_NOWAYOUT + eurwdt_disable_timer(); +#endif + eurwdt_is_open = 0; + + MOD_DEC_USE_COUNT; + } + + return 0; +} + +/** + * eurwdt_notify_sys: + * @this: our notifier block + * @code: the event being reported + * @unused: unused + * + * Our notifier is called on system shutdowns. We want to turn the card + * off at reboot otherwise the machine will reboot again during memory + * test or worse yet during the following fsck. This would suck, in fact + * trust me - if it happens it does suck. + */ + +static int eurwdt_notify_sys(struct notifier_block *this, unsigned long code, + void *unused) +{ + if (code == SYS_DOWN || code == SYS_HALT) { + /* Turn the card off */ + eurwdt_disable_timer(); + } + + return NOTIFY_DONE; +} + +/* + * Kernel Interfaces + */ + + +static struct file_operations eurwdt_fops = { + owner: THIS_MODULE, + llseek: no_llseek, + write: eurwdt_write, + ioctl: eurwdt_ioctl, + open: eurwdt_open, + release: eurwdt_release, +}; + +static struct miscdevice eurwdt_miscdev = +{ + WATCHDOG_MINOR, + "watchdog", + &eurwdt_fops +}; + +/* + * The WDT card needs to learn about soft shutdowns in order to + * turn the timebomb registers off. + */ + +static struct notifier_block eurwdt_notifier = +{ + eurwdt_notify_sys, + NULL, + 0 +}; + +/** + * cleanup_module: + * + * Unload the watchdog. You cannot do this with any file handles open. + * If your watchdog is set to continue ticking on close and you unload + * it, well it keeps ticking. We won't get the interrupt but the board + * will not touch PC memory so all is fine. You just have to load a new + * module in 60 seconds or reboot. + */ + +static void __exit eurwdt_exit(void) +{ + eurwdt_lock_chip(); + + misc_deregister(&eurwdt_miscdev); + + unregister_reboot_notifier(&eurwdt_notifier); + release_region(io, 2); + free_irq(irq, NULL); +} + +/** + * eurwdt_init: + * + * Set up the WDT watchdog board. After grabbing the resources + * we require we need also to unlock the device. + * The open() function will actually kick the board off. + */ + +static int __init eurwdt_init(void) +{ + int ret; + + ret = misc_register(&eurwdt_miscdev); + if (ret) { + printk(KERN_ERR "eurwdt: can't misc_register on minor=%d\n", + WATCHDOG_MINOR); + goto out; + } + + ret = request_irq(irq, eurwdt_interrupt, SA_INTERRUPT, "eurwdt", NULL); + if(ret) { + printk(KERN_ERR "eurwdt: IRQ %d is not free.\n", irq); + goto outmisc; + } + + if (!request_region(io, 2, "eurwdt")) { + printk(KERN_ERR "eurwdt: IO %X is not free.\n", io); + ret = -EBUSY; + goto outirq; + } + + ret = register_reboot_notifier(&eurwdt_notifier); + if (ret) { + printk(KERN_ERR "eurwdt: can't register reboot notifier (err=%d)\n", ret); + goto outreg; + } + + eurwdt_unlock_chip(); + + ret = 0; + printk(KERN_INFO "Eurotech WDT driver 0.01 at %X (Interrupt %d)" + " - timeout event: %s\n", + io, irq, (!strcmp("int", ev) ? "int" : "reboot")); + + spin_lock_init(&eurwdt_lock); + + out: + return ret; + + outreg: + release_region(io, 2); + + outirq: + free_irq(irq, NULL); + + outmisc: + misc_deregister(&eurwdt_miscdev); + goto out; +} + +module_init(eurwdt_init); +module_exit(eurwdt_exit); + +MODULE_AUTHOR("Rodolfo Giometti"); +MODULE_DESCRIPTION("Driver for Eurotech CPU-1220/1410 on board watchdog"); +MODULE_LICENSE("GPL"); +EXPORT_NO_SYMBOLS; diff -u --recursive --new-file v2.4.13/linux/drivers/char/i8k.c linux/drivers/char/i8k.c --- v2.4.13/linux/drivers/char/i8k.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/char/i8k.c Fri Nov 2 17:46:47 2001 @@ -0,0 +1,556 @@ +/* + * i8k.c -- Linux driver for accessing the SMM BIOS on Dell I8000 laptops + * + * Copyright (C) 2001 Massimo Dal Zotto + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#define I8K_VERSION "1.1 02/11/2001" +#define I8K_BIOS_SIGNATURE "Dell System Inspiron 8000" +#define I8K_BIOS_SIGNATURE_ADDR 0x000ec000 +#define I8K_BIOS_VERSION_OFFSET 32 + +#define I8K_SMM_FN_STATUS 0x0025 +#define I8K_SMM_POWER_STATUS 0x0069 +#define I8K_SMM_SET_FAN 0x01a3 +#define I8K_SMM_GET_FAN 0x00a3 +#define I8K_SMM_GET_SPEED 0x02a3 +#define I8K_SMM_GET_TEMP 0x10a3 +#define I8K_SMM_BIOS_VERSION 0x00a6 + +#define I8K_FAN_MULT 30 +#define I8K_MAX_TEMP 127 + +#define I8K_FN_NONE 0x08 +#define I8K_FN_UP 0x09 +#define I8K_FN_DOWN 0x0a +#define I8K_FN_MUTE 0x0c + +#define I8K_POWER_AC 0x05 +#define I8K_POWER_BATTERY 0x01 + +#define I8K_TEMPERATURE_BUG 1 + +static char bios_version[4] = "?"; +static char bios_machine_id[16] = "?"; + +int force = 0; + +MODULE_AUTHOR("Massimo Dal Zotto (dz@debian.org)"); +MODULE_DESCRIPTION("Driver for accessing the SMM BIOS on Dell I8000 laptops"); +MODULE_LICENSE("GPL"); +MODULE_PARM(force, "i"); +MODULE_PARM_DESC(force, "Force loading without checking for an Inspiron 8000"); + +static ssize_t i8k_read(struct file *, char *, size_t, loff_t *); +static int i8k_ioctl(struct inode *, struct file *, unsigned int, + unsigned long); + +static struct file_operations i8k_fops = { + read: i8k_read, + ioctl: i8k_ioctl, +}; + +typedef struct { + unsigned int eax; + unsigned int ebx __attribute__ ((packed)); + unsigned int ecx __attribute__ ((packed)); + unsigned int edx __attribute__ ((packed)); + unsigned int esi __attribute__ ((packed)); + unsigned int edi __attribute__ ((packed)); +} SMMRegisters; + +/* + * Call the System Management Mode BIOS. + */ +static int i8k_smm(SMMRegisters *regs) +{ + int rc; + + asm("pushl %%eax\n\t" \ + "movl 0(%%eax),%%edx\n\t" \ + "push %%edx\n\t" \ + "movl 4(%%eax),%%ebx\n\t" \ + "movl 8(%%eax),%%ecx\n\t" \ + "movl 12(%%eax),%%edx\n\t" \ + "movl 16(%%eax),%%esi\n\t" \ + "movl 20(%%eax),%%edi\n\t" \ + "popl %%eax\n\t" \ + "out %%al,$0xb2\n\t" \ + "out %%al,$0x84\n\t" \ + "xchgl %%eax,(%%esp)\n\t" + "movl %%ebx,4(%%eax)\n\t" \ + "movl %%ecx,8(%%eax)\n\t" \ + "movl %%edx,12(%%eax)\n\t" \ + "movl %%esi,16(%%eax)\n\t" \ + "movl %%edi,20(%%eax)\n\t" \ + "popl %%edx\n\t" \ + "movl %%edx,0(%%eax)\n\t" \ + "lahf\n\t" \ + "shrl $8,%%eax\n\t" \ + "andl $1,%%eax\n" \ + : "=a" (rc) + : "a" (regs) + : "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory"); + + if ((rc != 0) || ((regs->eax & 0xffff) == 0xffff)) { + return -EINVAL; + } + + return 0; +} + +/* + * Read the bios version. Return the version as an integer corresponding + * to the ascii value, for example "A17" is returned as 0x00413137. + */ +static int i8k_get_bios_version(void) +{ + SMMRegisters regs = { 0, 0, 0, 0, 0, 0 }; + int rc; + + regs.eax = I8K_SMM_BIOS_VERSION; + if ((rc=i8k_smm(®s)) < 0) { + return rc; + } + + return regs.eax; +} + +/* + * Read the machine id. Not yet implemented. + */ +static int i8k_get_machine_id(unsigned char *buff) +{ + return -EINVAL; +} + +/* + * Read the Fn key status. + */ +static int i8k_get_fn_status(void) +{ + SMMRegisters regs = { 0, 0, 0, 0, 0, 0 }; + int rc; + + regs.eax = I8K_SMM_FN_STATUS; + if ((rc=i8k_smm(®s)) < 0) { + return rc; + } + + switch ((regs.eax & 0xff00) >> 8) { + case I8K_FN_UP: + return I8K_VOL_UP; + case I8K_FN_DOWN: + return I8K_VOL_DOWN; + case I8K_FN_MUTE: + return I8K_VOL_MUTE; + default: + return 0; + } +} + +/* + * Read the power status. + */ +static int i8k_get_power_status(void) +{ + SMMRegisters regs = { 0, 0, 0, 0, 0, 0 }; + int rc; + + regs.eax = I8K_SMM_POWER_STATUS; + if ((rc=i8k_smm(®s)) < 0) { + return rc; + } + + switch (regs.eax & 0xff) { + case I8K_POWER_AC: + return I8K_AC; + default: + return I8K_BATTERY; + } +} + +/* + * Read the fan status. + */ +static int i8k_get_fan_status(int fan) +{ + SMMRegisters regs = { 0, 0, 0, 0, 0, 0 }; + int rc; + + regs.eax = I8K_SMM_GET_FAN; + regs.ebx = fan & 0xff; + if ((rc=i8k_smm(®s)) < 0) { + return rc; + } + + return (regs.eax & 0xff); +} + +/* + * Read the fan speed in RPM. + */ +static int i8k_get_fan_speed(int fan) +{ + SMMRegisters regs = { 0, 0, 0, 0, 0, 0 }; + int rc; + + regs.eax = I8K_SMM_GET_SPEED; + regs.ebx = fan & 0xff; + if ((rc=i8k_smm(®s)) < 0) { + return rc; + } + + return (regs.eax & 0xffff) * I8K_FAN_MULT; +} + +/* + * Set the fan speed (off, low, high). Returns the new fan status. + */ +static int i8k_set_fan(int fan, int speed) +{ + SMMRegisters regs = { 0, 0, 0, 0, 0, 0 }; + int rc; + + speed = (speed < 0) ? 0 : ((speed > I8K_FAN_MAX) ? I8K_FAN_MAX : speed); + + regs.eax = I8K_SMM_SET_FAN; + regs.ebx = (fan & 0xff) | (speed << 8); + if ((rc=i8k_smm(®s)) < 0) { + return rc; + } + + return (i8k_get_fan_status(fan)); +} + +/* + * Read the cpu temperature. + */ +static int i8k_get_cpu_temp(void) +{ + SMMRegisters regs = { 0, 0, 0, 0, 0, 0 }; + int rc; + int temp; + +#ifdef I8K_TEMPERATURE_BUG + static int prev = 0; +#endif + + regs.eax = I8K_SMM_GET_TEMP; + if ((rc=i8k_smm(®s)) < 0) { + return rc; + } + temp = regs.eax & 0xff; + +#ifdef I8K_TEMPERATURE_BUG + /* + * Sometimes the temperature sensor returns 0x99, which is out of range. + * In this case we return (once) the previous cached value. For example: + # 1003655137 00000058 00005a4b + # 1003655138 00000099 00003a80 <--- 0x99 = 153 degrees + # 1003655139 00000054 00005c52 + */ + if (temp > I8K_MAX_TEMP) { + temp = prev; + prev = I8K_MAX_TEMP; + } else { + prev = temp; + } +#endif + + return temp; +} + +static int i8k_ioctl(struct inode *ip, struct file *fp, unsigned int cmd, + unsigned long arg) +{ + int val; + int speed; + unsigned char buff[16]; + + if (!arg) { + return -EINVAL; + } + + switch (cmd) { + case I8K_BIOS_VERSION: + val = i8k_get_bios_version(); + break; + + case I8K_MACHINE_ID: + memset(buff, 0, 16); + val = i8k_get_machine_id(buff); + break; + + case I8K_FN_STATUS: + val = i8k_get_fn_status(); + break; + + case I8K_POWER_STATUS: + val = i8k_get_power_status(); + break; + + case I8K_GET_TEMP: + val = i8k_get_cpu_temp(); + break; + + case I8K_GET_SPEED: + if (copy_from_user(&val, (int *)arg, sizeof(int))) { + return -EFAULT; + } + val = i8k_get_fan_speed(val); + break; + + case I8K_GET_FAN: + if (copy_from_user(&val, (int *)arg, sizeof(int))) { + return -EFAULT; + } + val = i8k_get_fan_status(val); + break; + + case I8K_SET_FAN: + if (copy_from_user(&val, (int *)arg, sizeof(int))) { + return -EFAULT; + } + if (copy_from_user(&speed, (int *)arg+1, sizeof(int))) { + return -EFAULT; + } + val = i8k_set_fan(val, speed); + break; + + default: + return -EINVAL; + } + + if (val < 0) { + return val; + } + + switch (cmd) { + case I8K_BIOS_VERSION: + if (copy_to_user((int *)arg, &val, 4)) { + return -EFAULT; + } + break; + case I8K_MACHINE_ID: + if (copy_to_user((int *)arg, buff, 16)) { + return -EFAULT; + } + break; + default: + if (copy_to_user((int *)arg, &val, sizeof(int))) { + return -EFAULT; + } + break; + } + + return 0; +} + +/* + * Print the information for /proc/i8k. + */ +static int i8k_get_info(char *buffer, char **start, off_t fpos, int length) +{ + int n, fn_key, cpu_temp, ac_power; + int left_fan, right_fan, left_speed, right_speed; + + cpu_temp = i8k_get_cpu_temp(); + left_fan = i8k_get_fan_status(I8K_FAN_LEFT); + right_fan = i8k_get_fan_status(I8K_FAN_RIGHT); + left_speed = i8k_get_fan_speed(I8K_FAN_LEFT); + right_speed = i8k_get_fan_speed(I8K_FAN_RIGHT); + ac_power = i8k_get_power_status(); + fn_key = i8k_get_fn_status(); + + /* + * Info: + * + * 1) Format version (this will change if format changes) + * 2) BIOS version + * 3) BIOS machine ID + * 4) Cpu temperature + * 5) Left fan status + * 6) Right fan status + * 7) Left fan speed + * 8) Right fan speed + * 9) AC power + * 10) Fn Key status + */ + n = sprintf(buffer, "%s %s %s %d %d %d %d %d %d %d\n", + I8K_PROC_FMT, + bios_version, + bios_machine_id, + cpu_temp, + left_fan, + right_fan, + left_speed, + right_speed, + ac_power, + fn_key); + + return n; +} + +static ssize_t i8k_read(struct file *f, char *buffer, size_t len, loff_t *fpos) +{ + int n; + char info[128]; + + n = i8k_get_info(info, NULL, 0, 128); + if (n <= 0) { + return n; + } + + if (*fpos >= n) { + return 0; + } + + if ((*fpos + len) >= n) { + len = n - *fpos; + } + + if (copy_to_user(buffer, info, len) != 0) { + return -EFAULT; + } + + *fpos += len; + return len; +} + +/* + * Probe for the presence of an Inspiron I8000. + */ +static int i8k_probe(void) +{ + unsigned char *buff, *p; + unsigned char bios_vers[4]; + int version; + + /* + * Until Dell tell us how to reliably check for an Inspiron system + * look for a signature at a fixed location in the BIOS memory. + * Ugly but safe. + */ + if (!force) { + buff = ioremap(I8K_BIOS_SIGNATURE_ADDR, I8K_BIOS_VERSION_OFFSET+4); + if (buff == NULL) { + printk("i8k: ioremap failed\n"); + return -ENODEV; + } + if (strncmp(buff,I8K_BIOS_SIGNATURE,sizeof(I8K_BIOS_SIGNATURE)) != 0) { + printk("i8k: Inspiron 8000 BIOS signature not found\n"); + iounmap(buff); + return -ENODEV; + } + strncpy(bios_vers, buff+I8K_BIOS_VERSION_OFFSET, 3); + bios_vers[3] = '\0'; + iounmap(buff); + } + if (force >= 2) { + buff = ioremap(0x000c0000, 0x00100000-0x000c0000); + if (buff == NULL) { + printk("i8k: ioremap failed\n"); + return -ENODEV; + } + for (p=buff; (p-buff)<(0x00100000-0x000c0000); p+=16) { + if (strncmp(p,I8K_BIOS_SIGNATURE,sizeof(I8K_BIOS_SIGNATURE))==0) { + printk("i8k: Inspiron 8000 BIOS signature found at %08x\n", + 0x000c0000+(p-buff)); + break; + } + } + iounmap(buff); + } + + /* + * Next try to get the BIOS version with an SMM call. If this + * fails SMM can't be reliably used on this system. + */ + version = i8k_get_bios_version(); + if (version <= 0) { + printk("i8k: unable to get BIOS version\n"); + return -ENODEV; + } + bios_version[0] = (version >> 16) & 0xff; + bios_version[1] = (version >> 8) & 0xff; + bios_version[2] = (version) & 0xff; + bios_version[3] = '\0'; + + /* + * Finally check if the two versions match. + */ + if (!force) { + if (strncmp(bios_version,bios_vers,sizeof(bios_version)) != 0) { + printk("i8k: BIOS version mismatch: %s != %s\n", + bios_version, bios_vers); + return -ENODEV; + } + } + + return 0; +} + +#ifdef MODULE +static +#endif +int __init i8k_init(void) +{ + struct proc_dir_entry *proc_i8k; + + /* Are we running on an Inspiron 8000 laptop? */ + if (i8k_probe() != 0) { + return -ENODEV; + } + + /* Register the proc entry */ + proc_i8k = create_proc_info_entry("i8k", 0, NULL, i8k_get_info); + if (!proc_i8k) { + return -ENOENT; + } + proc_i8k->proc_fops = &i8k_fops; + SET_MODULE_OWNER(proc_i8k); + + printk(KERN_INFO + "Inspiron 8000 SMM driver v%s Massimo Dal Zotto (dz@debian.org)\n", + I8K_VERSION); + + return 0; +} + +#ifdef MODULE +int init_module(void) +{ + return i8k_init(); +} + +void cleanup_module(void) +{ + /* Remove the proc entry */ + remove_proc_entry("i8k", NULL); + + printk(KERN_INFO "i8k: module unloaded\n"); +} +#endif + +/* end of file */ diff -u --recursive --new-file v2.4.13/linux/drivers/char/ip2/i2cmd.c linux/drivers/char/ip2/i2cmd.c --- v2.4.13/linux/drivers/char/ip2/i2cmd.c Wed Jul 25 17:10:19 2001 +++ linux/drivers/char/ip2/i2cmd.c Wed Oct 24 12:05:18 2001 @@ -139,7 +139,7 @@ //static UCHAR ct86[]={ 2, BTH, 0x56,0 }; // RCV_ENABLE static UCHAR ct87[] = { 1, BYP, 0x57 }; // HW_TEST //static UCHAR ct88[]={ 3, BTH, 0x58,0,0 }; // RCV_THRESHOLD -//static UCHAR ct89[]={ 1, BYP, 0x59 }; // DSS_NOW +static UCHAR ct89[]={ 1, BYP, 0x59 }; // DSS_NOW //static UCHAR ct90[]={ 3, BYP, 0x5A,0,0 }; // Set SILO //static UCHAR ct91[]={ 2, BYP, 0x5B,0 }; // timed break diff -u --recursive --new-file v2.4.13/linux/drivers/char/ip2/i2ellis.c linux/drivers/char/ip2/i2ellis.c --- v2.4.13/linux/drivers/char/ip2/i2ellis.c Mon Oct 16 12:58:51 2000 +++ linux/drivers/char/ip2/i2ellis.c Wed Oct 24 12:05:18 2001 @@ -552,6 +552,9 @@ pB->i2eStartMail = iiGetMail(pB); + // Throw it away and clear the mailbox structure element + pB->i2eStartMail = NO_MAIL_HERE; + // Everything is ok now, return with good status/ pB->i2eValid = I2E_MAGIC; @@ -592,14 +595,27 @@ static void ii2DelayTimer(unsigned int mseconds) { + wait_queue_t wait; + + init_waitqueue_entry(&wait, current); + init_timer ( pDelayTimer ); + add_wait_queue(&pDelayWait, &wait); + + set_current_state( TASK_INTERRUPTIBLE ); + pDelayTimer->expires = jiffies + ( mseconds + 9 ) / 10; pDelayTimer->function = ii2DelayWakeup; pDelayTimer->data = 0; add_timer ( pDelayTimer ); - interruptible_sleep_on ( &pDelayWait ); + + schedule(); + + set_current_state( TASK_RUNNING ); + remove_wait_queue(&pDelayWait, &wait); + del_timer ( pDelayTimer ); } diff -u --recursive --new-file v2.4.13/linux/drivers/char/ip2/i2ellis.h linux/drivers/char/ip2/i2ellis.h --- v2.4.13/linux/drivers/char/ip2/i2ellis.h Wed Jul 5 11:00:22 2000 +++ linux/drivers/char/ip2/i2ellis.h Wed Oct 24 12:05:18 2001 @@ -400,6 +400,12 @@ rwlock_t read_fifo_spinlock; rwlock_t write_fifo_spinlock; +// For queuing interupt bottom half handlers. /\/\|=mhw=|\/\/ + struct tq_struct tqueue_interrupt; + + struct timer_list SendPendingTimer; // Used by iiSendPending + unsigned int SendPendingRetry; + #ifdef CONFIG_DEVFS_FS /* Device handles into devfs */ devfs_handle_t devfs_ipl_handle; diff -u --recursive --new-file v2.4.13/linux/drivers/char/ip2/i2lib.c linux/drivers/char/ip2/i2lib.c --- v2.4.13/linux/drivers/char/ip2/i2lib.c Wed Jul 5 11:00:22 2000 +++ linux/drivers/char/ip2/i2lib.c Fri Nov 2 17:26:17 2001 @@ -174,6 +174,25 @@ pB->i2eWaitingForEmptyFifo |= (pB->i2eOutMailWaiting & MB_OUT_STUFFED); pB->i2eOutMailWaiting = 0; + pB->SendPendingRetry = 0; + } else { +/* The only time we hit this area is when "iiTrySendMail" has + failed. That only occurs when the outbound mailbox is + still busy with the last message. We take a short breather + to let the board catch up with itself and then try again. + 16 Retries is the limit - then we got a borked board. + /\/\|=mhw=|\/\/ */ + + if( ++pB->SendPendingRetry < 16 ) { + + init_timer( &(pB->SendPendingTimer) ); + pB->SendPendingTimer.expires = jiffies + 1; + pB->SendPendingTimer.function = (void*)(unsigned long)iiSendPendingMail; + pB->SendPendingTimer.data = (unsigned long)pB; + add_timer( &(pB->SendPendingTimer) ); + } else { + printk( KERN_ERR "IP2: iiSendPendingMail unable to queue outbound mail\n" ); + } } } } @@ -225,6 +244,8 @@ pB->i2Dbuf_strip = pB->i2Dbuf_stuff = 0; pB->i2Bbuf_strip = pB->i2Bbuf_stuff = 0; + pB->SendPendingRetry = 0; + memset ( pCh, 0, sizeof (i2ChanStr) * nChannels ); for (index = stuffIndex = 0, ppCh = (i2ChanStrPtr *)(pB->i2Fbuf); @@ -311,15 +332,15 @@ pCh->ClosingDelay = 5*HZ/10; pCh->ClosingWaitTime = 30*HZ; -#ifdef USE_IQ // Initialize task queue objects pCh->tqueue_input.routine = (void(*)(void*)) do_input; pCh->tqueue_input.data = pCh; pCh->tqueue_status.routine = (void(*)(void*)) do_status; pCh->tqueue_status.data = pCh; -#endif +#ifdef IP2DEBUG_TRACE pCh->trace = ip2trace; +#endif ++pCh; --nChannels; @@ -535,9 +556,9 @@ if ( !i2Validate ( pCh ) ) { return -1; } -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_QUEUE, ITRC_ENTER, 0 ); -#endif + pB = pCh->pMyBord; // Board must also exist, and THE INTERRUPT COMMAND ALREADY SENT @@ -615,9 +636,9 @@ if (--bufroom < 0) { bufroom += maxBuff; } -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_QUEUE, 2, 1, bufroom ); -#endif + // Check for overflow if (totalsize <= bufroom) { // Normal Expected path - We still hold LOCK @@ -625,9 +646,8 @@ } } -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_QUEUE, 3, 1, totalsize ); -#endif + // Prepare to wait for buffers to empty WRITE_UNLOCK_IRQRESTORE(lock_var_p,flags); serviceOutgoingFifo(pB); // Dump what we got @@ -649,9 +669,8 @@ return 0; // Wake up! Time to die!!! } -#ifdef IP2DEBUG_TRACE - ip2trace (CHANN, ITRC_QUEUE, 4, 0 ); -#endif + ip2trace (CHANN, ITRC_QUEUE, 4, 0 ); + } // end of for(;;) // At this point we have room and the lock - stick them in. @@ -673,9 +692,9 @@ // pCs->cmd[0]. if (pCs == CMD_BMARK_REQ) { pCh->bookMarks++; -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_DRAIN, 30, 1, pCh->bookMarks ); -#endif + } cnt = pCs->length; @@ -683,9 +702,9 @@ // if the last command had to be at the end of a block, we end // the existing block here and start a new one. if ((blocksize + cnt > maxBlock) || lastended) { -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_QUEUE, 5, 0 ); -#endif + PTYPE_OF(pInsert) = type; CHANNEL_OF(pInsert) = channel; // count here does not include the header @@ -747,9 +766,9 @@ i2QueueNeeds(pB, pCh, NEED_BYPASS); break; } -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_QUEUE, ITRC_RETURN, 1, nCommands ); -#endif + return nCommands; // Good status: number of commands sent } @@ -772,9 +791,7 @@ unsigned short status; i2eBordStrPtr pB; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_STATUS, ITRC_ENTER, 2, pCh->dataSetIn, resetBits ); -#endif // Make sure the channel exists, otherwise do nothing */ if ( !i2Validate ( pCh ) ) @@ -792,9 +809,7 @@ pCh->dataSetIn &= ~(I2_DDCD | I2_DCTS | I2_DDSR | I2_DRI); } -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_STATUS, ITRC_RETURN, 1, pCh->dataSetIn ); -#endif return status; } @@ -819,9 +834,7 @@ int count; unsigned long flags = 0; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_INPUT, ITRC_ENTER, 0); -#endif // Ensure channel structure seems real if ( !i2Validate( pCh ) ) { @@ -887,9 +900,8 @@ i2Input_exit: -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_INPUT, ITRC_RETURN, 1, count); -#endif + return count; } @@ -913,9 +925,7 @@ if ( !i2Validate ( pCh ) ) return -1; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_INPUT, 10, 0); -#endif WRITE_LOCK_IRQSAVE(&pCh->Ibuf_spinlock,flags); count = pCh->Ibuf_stuff - pCh->Ibuf_strip; @@ -943,9 +953,9 @@ } else { WRITE_UNLOCK_IRQRESTORE(&pCh->Ibuf_spinlock,flags); } -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_INPUT, 19, 1, count); -#endif + return count; } @@ -1015,9 +1025,7 @@ int bailout = 10; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_OUTPUT, ITRC_ENTER, 2, count, user ); -#endif // Ensure channel structure seems real if ( !i2Validate ( pCh ) ) @@ -1064,9 +1072,8 @@ // Small WINDOW here with no LOCK but I can't call Flush with LOCK // We would be flushing (or ending flush) anyway -#ifdef IP2DEBUG_TRACE - ip2trace (CHANN, ITRC_OUTPUT, 10, 1, amountToMove ); -#endif + ip2trace (CHANN, ITRC_OUTPUT, 10, 1, amountToMove ); + if ( !(pCh->flush_flags && i2RetryFlushOutput(pCh) ) && amountToMove > 0 ) { @@ -1104,9 +1111,7 @@ WRITE_UNLOCK_IRQRESTORE(&pCh->Obuf_spinlock,flags); -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_OUTPUT, 13, 1, stuffIndex ); -#endif } else { @@ -1114,25 +1119,23 @@ // becuz we need to stuff a flush // or amount to move is <= 0 -#ifdef IP2DEBUG_TRACE ip2trace(CHANN, ITRC_OUTPUT, 14, 3, - amountToMove, pB->i2eFifoRemains, pB->i2eWaitingForEmptyFifo ); -#endif + amountToMove, pB->i2eFifoRemains, + pB->i2eWaitingForEmptyFifo ); + // Put this channel back on queue // this ultimatly gets more data or wakes write output i2QueueNeeds(pB, pCh, NEED_INLINE); if ( pB->i2eWaitingForEmptyFifo ) { -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_OUTPUT, 16, 0 ); -#endif + // or schedule if (!in_interrupt()) { -#ifdef IP2DEBUG_TRACE - ip2trace (CHANN, ITRC_OUTPUT, 61, 0 ); -#endif + ip2trace (CHANN, ITRC_OUTPUT, 61, 0 ); + current->state = TASK_INTERRUPTIBLE; schedule_timeout(2); if (signal_pending(current)) { @@ -1140,9 +1143,9 @@ } continue; } else { -#ifdef IP2DEBUG_TRACE - ip2trace (CHANN, ITRC_OUTPUT, 62, 0 ); -#endif + + ip2trace (CHANN, ITRC_OUTPUT, 62, 0 ); + // let interrupt in = WAS restore_flags() // We hold no lock nor is irq off anymore??? @@ -1152,31 +1155,31 @@ } else if ( pB->i2eFifoRemains < 32 && !pB->i2eTxMailEmpty ( pB ) ) { -#ifdef IP2DEBUG_TRACE - ip2trace (CHANN, ITRC_OUTPUT, 19, 2, pB->i2eFifoRemains, - pB->i2eTxMailEmpty ); -#endif + ip2trace (CHANN, ITRC_OUTPUT, 19, 2, + pB->i2eFifoRemains, + pB->i2eTxMailEmpty ); + break; // from while(count) } else if ( pCh->channelNeeds & NEED_CREDIT ) { -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_OUTPUT, 22, 0 ); -#endif + break; // from while(count) } else if ( --bailout) { // Try to throw more things (maybe not us) in the fifo if we're // not already waiting for it. -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_OUTPUT, 20, 0 ); -#endif + serviceOutgoingFifo(pB); //break; CONTINUE; } else { -#ifdef IP2DEBUG_TRACE - ip2trace (CHANN, ITRC_OUTPUT, 21, 3, pB->i2eFifoRemains, - pB->i2eOutMailWaiting, pB->i2eWaitingForEmptyFifo ); -#endif + ip2trace (CHANN, ITRC_OUTPUT, 21, 3, + pB->i2eFifoRemains, + pB->i2eOutMailWaiting, + pB->i2eWaitingForEmptyFifo ); + break; // from while(count) } } @@ -1187,14 +1190,13 @@ // We drop through either when the count expires, or when there is some // count left, but there was a non-blocking write. if (countOriginal > count) { -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_OUTPUT, 17, 2, countOriginal, count ); -#endif + serviceOutgoingFifo( pB ); } -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_OUTPUT, ITRC_RETURN, 2, countOriginal, count ); -#endif return countOriginal - count; } @@ -1213,23 +1215,20 @@ i2FlushOutput(i2ChanStrPtr pCh) { -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_FLUSH, 1, 1, pCh->flush_flags ); -#endif if (pCh->flush_flags) return; if ( 1 != i2QueueCommands(PTYPE_BYPASS, pCh, 0, 1, CMD_STARTFL) ) { pCh->flush_flags = STARTFL_FLAG; // Failed - flag for later -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_FLUSH, 2, 0 ); -#endif + } else if ( 1 != i2QueueCommands(PTYPE_INLINE, pCh, 0, 1, CMD_STOPFL) ) { pCh->flush_flags = STOPFL_FLAG; // Failed - flag for later -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_FLUSH, 3, 0 ); -#endif } } @@ -1238,9 +1237,7 @@ { int old_flags = pCh->flush_flags; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_FLUSH, 14, 1, old_flags ); -#endif pCh->flush_flags = 0; // Clear flag so we can avoid recursion // and queue the commands @@ -1251,23 +1248,21 @@ } else { old_flags = STARTFL_FLAG; //Failure - Flag for retry later } -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_FLUSH, 15, 1, old_flags ); -#endif + } if ( old_flags & STOPFL_FLAG ) { if ( 1 == i2QueueCommands(PTYPE_INLINE, pCh, 0, 1, CMD_STOPFL) > 0 ) { old_flags = 0; // Success - clear flags } -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_FLUSH, 16, 1, old_flags ); -#endif } - pCh->flush_flags = old_flags; + pCh->flush_flags = old_flags; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_FLUSH, 17, 1, old_flags ); -#endif + return old_flags; } @@ -1284,9 +1279,8 @@ static void i2DrainWakeup(i2ChanStrPtr pCh) { -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_DRAIN, 10, 1, pCh->BookmarkTimer.expires ); -#endif + pCh->BookmarkTimer.expires = 0; wake_up_interruptible( &pCh->pBookmarkWait ); } @@ -1294,11 +1288,11 @@ static void i2DrainOutput(i2ChanStrPtr pCh, int timeout) { + wait_queue_t wait; i2eBordStrPtr pB; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_DRAIN, ITRC_ENTER, 1, pCh->BookmarkTimer.expires); -#endif + pB = pCh->pMyBord; // If the board has gone fatal, return bad, // and also hit the trap routine if it exists. @@ -1315,31 +1309,35 @@ pCh->BookmarkTimer.function = (void*)(unsigned long)i2DrainWakeup; pCh->BookmarkTimer.data = (unsigned long)pCh; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_DRAIN, 1, 1, pCh->BookmarkTimer.expires ); -#endif add_timer( &(pCh->BookmarkTimer) ); } i2QueueCommands( PTYPE_INLINE, pCh, -1, 1, CMD_BMARK_REQ ); + + init_waitqueue_entry(&wait, current); + add_wait_queue(&(pCh->pBookmarkWait), &wait); + set_current_state( TASK_INTERRUPTIBLE ); + serviceOutgoingFifo( pB ); - interruptible_sleep_on( &(pCh->pBookmarkWait) ); + schedule(); // Now we take our interruptible sleep on + + // Clean up the queue + set_current_state( TASK_RUNNING ); + remove_wait_queue(&(pCh->pBookmarkWait), &wait); // if expires == 0 then timer poped, then do not need to del_timer if ((timeout > 0) && pCh->BookmarkTimer.expires && (pCh->BookmarkTimer.expires > jiffies)) { del_timer( &(pCh->BookmarkTimer) ); pCh->BookmarkTimer.expires = 0; -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_DRAIN, 3, 1, pCh->BookmarkTimer.expires ); -#endif } -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_DRAIN, ITRC_RETURN, 1, pCh->BookmarkTimer.expires ); -#endif return; } @@ -1384,17 +1382,17 @@ pCh = tp->driver_data; -#ifdef IP2DEBUG_TRACE - ip2trace (CHANN, ITRC_SICMD, 10, 2, tp->flags, (1 << TTY_DO_WRITE_WAKEUP) ); -#endif + ip2trace (CHANN, ITRC_SICMD, 10, 2, tp->flags, + (1 << TTY_DO_WRITE_WAKEUP) ); + wake_up_interruptible ( &tp->write_wait ); if ( ( tp->flags & (1 << TTY_DO_WRITE_WAKEUP) ) && tp->ldisc.write_wakeup ) { (tp->ldisc.write_wakeup) ( tp ); -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_SICMD, 11, 0 ); -#endif + } } @@ -1480,14 +1478,11 @@ unsigned char dss_change; unsigned long bflags,cflags; -#ifdef IP2DEBUG_TRACE - //ip2trace (ITRC_NO_PORT, ITRC_SFIFO, ITRC_ENTER, 0 ); -#endif +// ip2trace (ITRC_NO_PORT, ITRC_SFIFO, ITRC_ENTER, 0 ); while (HAS_INPUT(pB)) { -#ifdef IP2DEBUG_TRACE - //ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 2, 0 ); -#endif +// ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 2, 0 ); + // Process packet from fifo a one atomic unit WRITE_LOCK_IRQSAVE(&pB->read_fifo_spinlock,bflags); @@ -1500,9 +1495,8 @@ case PTYPE_DATA: pB->got_input = 1; -#ifdef IP2DEBUG_TRACE - //ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 3, 0 ); -#endif +// ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 3, 0 ); + channel = CHANNEL_OF(pB->i2eLeadoffWord); /* Store channel */ count = iiReadWord(pB); /* Count is in the next word */ @@ -1602,9 +1596,7 @@ break; // From switch: ready for next packet case PTYPE_STATUS: -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 4, 0 ); -#endif count = CMD_COUNT_OF(pB->i2eLeadoffWord); @@ -1617,9 +1609,9 @@ while (pc < pcLimit) { channel = *pc++; -#ifdef IP2DEBUG_TRACE + ip2trace (channel, ITRC_SFIFO, 7, 2, channel, *pc ); -#endif + /* check for valid channel */ if (channel < pB->i2eChannelCnt && @@ -1652,41 +1644,32 @@ break; case STAT_DCD_UP: -#ifdef IP2DEBUG_TRACE ip2trace (channel, ITRC_MODEM, 1, 1, pCh->dataSetIn ); -#endif + if ( !(pCh->dataSetIn & I2_DCD) ) { -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_MODEM, 2, 0 ); -#endif pCh->dataSetIn |= I2_DDCD; pCh->icount.dcd++; dss_change = 1; } pCh->dataSetIn |= I2_DCD; -#ifdef IP2DEBUG_TRACE + ip2trace (channel, ITRC_MODEM, 3, 1, pCh->dataSetIn ); -#endif break; case STAT_DCD_DN: -#ifdef IP2DEBUG_TRACE ip2trace (channel, ITRC_MODEM, 4, 1, pCh->dataSetIn ); -#endif if ( pCh->dataSetIn & I2_DCD ) { -#ifdef IP2DEBUG_TRACE ip2trace (channel, ITRC_MODEM, 5, 0 ); -#endif pCh->dataSetIn |= I2_DDCD; pCh->icount.dcd++; dss_change = 1; } pCh->dataSetIn &= ~I2_DCD; -#ifdef IP2DEBUG_TRACE + ip2trace (channel, ITRC_MODEM, 6, 1, pCh->dataSetIn ); -#endif break; case STAT_DSR_UP: @@ -1742,9 +1725,8 @@ if (pCh->bookMarks <= 0 ) { pCh->bookMarks = 0; wake_up_interruptible( &pCh->pBookmarkWait ); -#ifdef IP2DEBUG_TRACE + ip2trace (channel, ITRC_DRAIN, 20, 1, pCh->BookmarkTimer.expires ); -#endif } break; @@ -1754,22 +1736,21 @@ pCh->outfl.room = ((flowStatPtr)pc)->room - (pCh->outfl.asof - ((flowStatPtr)pc)->asof); -#ifdef IP2DEBUG_TRACE + ip2trace (channel, ITRC_STFLW, 1, 1, pCh->outfl.room ); -#endif + if (pCh->channelNeeds & NEED_CREDIT) { -#ifdef IP2DEBUG_TRACE - ip2trace (channel, ITRC_STFLW, 2, 1, pCh->channelNeeds); -#endif + ip2trace (channel, ITRC_STFLW, 2, 1, pCh->channelNeeds); + pCh->channelNeeds &= ~NEED_CREDIT; i2QueueNeeds(pB, pCh, NEED_INLINE); if ( pCh->pTTY ) ip2_owake(pCh->pTTY); } -#ifdef IP2DEBUG_TRACE + ip2trace (channel, ITRC_STFLW, 3, 1, pCh->channelNeeds); -#endif + pc += sizeof(flowStat); break; @@ -1865,16 +1846,15 @@ break; default: // Neither packet? should be impossible -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_SFIFO, 5, 1, PTYPE_OF(pB->i2eLeadoffWord) ); -#endif + break; } // End of switch on type of packets } //while(board HAS_INPUT) -#ifdef IP2DEBUG_TRACE + ip2trace (ITRC_NO_PORT, ITRC_SFIFO, ITRC_RETURN, 0 ); -#endif + // Send acknowledgement to the board even if there was no data! pB->i2eOutMailWaiting |= MB_IN_STRIPPED; return; @@ -1992,9 +1972,8 @@ i2ChanStrPtr pCh; unsigned short paddedSize = ROUNDUP(sizeof(flowIn)); -#ifdef IP2DEBUG_TRACE -ip2trace (ITRC_NO_PORT, ITRC_SFLOW, ITRC_ENTER, 2, pB->i2eFifoRemains, paddedSize ); -#endif + ip2trace (ITRC_NO_PORT, ITRC_SFLOW, ITRC_ENTER, 2, + pB->i2eFifoRemains, paddedSize ); // Continue processing so long as there are entries, or there is room in the // fifo. Each entry represents a channel with something to do. @@ -2006,14 +1985,12 @@ break; } #ifdef DEBUG_FIFO -WriteDBGBuf("FLOW",(unsigned char *) &(pCh->infl), paddedSize); + WriteDBGBuf("FLOW",(unsigned char *) &(pCh->infl), paddedSize); #endif /* DEBUG_FIFO */ } // Either clogged or finished all the work -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_SFLOW, ITRC_RETURN, 0 ); -#endif } //****************************************************************************** @@ -2041,10 +2018,8 @@ int bailout = 1000; int bailout2; -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_SICMD, ITRC_ENTER, 3, pB->i2eFifoRemains, pB->i2Dbuf_strip, pB->i2Dbuf_stuff ); -#endif // Continue processing so long as there are entries, or there is room in the // fifo. Each entry represents a channel with something to do. @@ -2054,9 +2029,8 @@ WRITE_LOCK_IRQSAVE(&pCh->Obuf_spinlock,flags); stripIndex = pCh->Obuf_strip; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_SICMD, 3, 2, stripIndex, pCh->Obuf_stuff ); -#endif + // as long as there are packets for this channel... bailout2 = 1000; while ( --bailout2 && stripIndex != pCh->Obuf_stuff) { @@ -2075,16 +2049,15 @@ flowsize = CREDIT_USAGE(flowsize); paddedSize = ROUNDUP(packetSize); -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_SICMD, 4, 2, pB->i2eFifoRemains, paddedSize ); -#endif + // If we don't have enough credits from the board to send the data, // flag the channel that we are waiting for flow control credit, and // break out. This will clean up this channel and remove us from the // queue of hot things to do. -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_SICMD, 5, 2, pCh->outfl.room, flowsize ); -#endif + if (pCh->outfl.room <= flowsize) { // Do Not have the credits to send this packet. i2QueueNeeds(pB, pCh, NEED_CREDIT); @@ -2112,15 +2085,15 @@ } pRemove += packetSize; stripIndex += packetSize; -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_SICMD, 6, 2, stripIndex, pCh->Obuf_strip); -#endif + if (stripIndex >= OBUF_SIZE) { stripIndex = 0; pRemove = pCh->Obuf; -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_SICMD, 7, 1, stripIndex ); -#endif + } } /* while */ if ( !bailout2 ) { @@ -2132,23 +2105,20 @@ WRITE_UNLOCK_IRQRESTORE(&pCh->Obuf_spinlock,flags); if ( notClogged ) { -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_SICMD, 8, 0 ); -#endif + if ( pCh->pTTY ) { ip2_owake(pCh->pTTY); } } } // Either clogged or finished all the work -#ifdef IP2DEBUG_TRACE + if ( !bailout ) { ip2trace (ITRC_NO_PORT, ITRC_ERROR, 4, 0 ); } -#endif -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_SICMD, ITRC_RETURN, 1,pB->i2Dbuf_strip); -#endif } //****************************************************************************** @@ -2212,11 +2182,13 @@ unsigned long flags; - inmail = iiGetMail(pB); + /* This should be atomic because of the way we are called... */ + if (NO_MAIL_HERE == ( inmail = pB->i2eStartMail ) ) { + inmail = iiGetMail(pB); + } + pB->i2eStartMail = NO_MAIL_HERE; -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INTR, 2, 1, inmail ); -#endif if (inmail != NO_MAIL_HERE) { // If the board has gone fatal, nothing to do but hit a bit that will @@ -2238,16 +2210,14 @@ pB->i2eFifoRemains = pB->i2eFifoSize; pB->i2eWaitingForEmptyFifo = 0; WRITE_UNLOCK_IRQRESTORE(&pB->write_fifo_spinlock,flags); -#ifdef IP2DEBUG_TRACE - ip2trace (ITRC_NO_PORT, ITRC_INTR, 30, 1, pB->i2eFifoRemains ); -#endif + + ip2trace (ITRC_NO_PORT, ITRC_INTR, 30, 1, pB->i2eFifoRemains ); + } serviceOutgoingFifo(pB); } -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INTR, 8, 0 ); -#endif exit_i2ServiceBoard: diff -u --recursive --new-file v2.4.13/linux/drivers/char/ip2/i2lib.h linux/drivers/char/ip2/i2lib.h --- v2.4.13/linux/drivers/char/ip2/i2lib.h Fri Feb 16 16:02:35 2001 +++ linux/drivers/char/ip2/i2lib.h Fri Nov 2 17:26:17 2001 @@ -341,6 +341,12 @@ static int i2ServiceBoard(i2eBordStrPtr); static void i2DrainOutput(i2ChanStrPtr, int); +#ifdef IP2DEBUG_TRACE +void ip2trace(unsigned short,unsigned char,unsigned char,unsigned long,...); +#else +#define ip2trace(a,b,c,d...) do {} while (0) +#endif + // Argument to i2QueueCommands // #define C_IN_LINE 1 diff -u --recursive --new-file v2.4.13/linux/drivers/char/ip2/ip2.h linux/drivers/char/ip2/ip2.h --- v2.4.13/linux/drivers/char/ip2/ip2.h Sat Nov 6 10:38:40 1999 +++ linux/drivers/char/ip2/ip2.h Wed Oct 24 12:05:18 2001 @@ -94,10 +94,20 @@ * /etc/modules.conf and load with modprobe, kerneld or kmod, the kernel * module loader */ + + /* This structure is NOW always initialized when the driver is initialized. + * Compiled in defaults MUST be added to the io and irq arrays in + * ip2.c. Those values are configurable from insmod parameters in the + * case of modules or from command line parameters (ip2=io,irq) when + * compiled in. + */ + static ip2config_t ip2config = { {0,0,0,0}, // irqs { // Addresses + /* Do NOT set compile time defaults HERE! Use the arrays in + ip2.c! These WILL be overwritten! =mhw= */ 0x0000, // Board 0, ttyF0 - ttyF63 0x0000, // Board 1, ttyF64 - ttyF127 0x0000, // Board 2, ttyF128 - ttyF191 diff -u --recursive --new-file v2.4.13/linux/drivers/char/ip2.c linux/drivers/char/ip2.c --- v2.4.13/linux/drivers/char/ip2.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/ip2.c Wed Oct 24 12:05:18 2001 @@ -27,10 +27,15 @@ int ip2_loadmain(int *, int *, unsigned char *, int ); // ref into ip2main.c -#ifdef MODULE +/* Note: Add compiled in defaults to these arrays, not to the structure + in ip2/ip2.h any longer. That structure WILL get overridden + by these values, or command line values, or insmod values!!! =mhw= +*/ +static int io[IP2_MAX_BOARDS]= { 0, 0, 0, 0 }; +static int irq[IP2_MAX_BOARDS] = { -1, -1, -1, -1 }; +static int poll_only = 0; -static int io[IP2_MAX_BOARDS]= { 0,}; -static int irq[IP2_MAX_BOARDS] = { 0,}; +#ifdef MODULE # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) MODULE_AUTHOR("Doug McNash"); @@ -39,6 +44,8 @@ MODULE_PARM_DESC(irq,"Interrupts for IntelliPort Cards"); MODULE_PARM(io,"1-"__MODULE_STRING(IP2_MAX_BOARDS) "i"); MODULE_PARM_DESC(io,"I/O ports for IntelliPort Cards"); + MODULE_PARM(poll_only,"1i"); + MODULE_PARM_DESC(poll_only,"Do not use card interrupts"); # endif /* LINUX_VERSION */ @@ -50,6 +57,11 @@ MOD_INC_USE_COUNT; // hold till done + if( poll_only ) { + /* Hard lock the interrupts to zero */ + irq[0] = irq[1] = irq[2] = irq[3] = 0; + } + rc = ip2_loadmain(io,irq,(unsigned char *)fip_firm,sizeof(fip_firm)); // The call to lock and load main, create dep @@ -61,7 +73,7 @@ int ip2_init(void) { - // call to this is int tty_io.c so we need this + // call to this is in tty_io.c so we need this return 0; } @@ -79,9 +91,61 @@ # define NULL ((void *) 0) #endif +/****************************************************************************** + * ip2_setup: + * str: kernel command line string + * + * Can't autoprobe the boards so user must specify configuration on + * kernel command line. Sane people build it modular but the others + * come here. + * + * Alternating pairs of io,irq for up to 4 boards. + * ip2=io0,irq0,io1,irq1,io2,irq2,io3,irq3 + * + * io=0 => No board + * io=1 => PCI + * io=2 => EISA + * else => ISA I/O address + * + * irq=0 or invalid for ISA will revert to polling mode + * + * Any value = -1, do not overwrite compiled in value. + * + ******************************************************************************/ +static int __init ip2_setup(char *str) +{ + int ints[10]; /* 4 boards, 2 parameters + 2 */ + int i, j; + + str = get_options (str, ARRAY_SIZE(ints), ints); + + for( i = 0, j = 1; i < 4; i++ ) { + if( j > ints[0] ) { + break; + } + if( ints[j] >= 0 ) { + io[i] = ints[j]; + } + j++; + if( j > ints[0] ) { + break; + } + if( ints[j] >= 0 ) { + irq[i] = ints[j]; + } + j++; + } + return 1; +} + int ip2_init(void) { - return ip2_loadmain(NULL,NULL,(unsigned char *)fip_firm,sizeof(fip_firm)); + return ip2_loadmain(io,irq,(unsigned char *)fip_firm,sizeof(fip_firm)); } + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,13)) +__setup("ip2=", ip2_setup); +__initcall(ip2_init); +#endif #endif /* !MODULE */ diff -u --recursive --new-file v2.4.13/linux/drivers/char/ip2main.c linux/drivers/char/ip2main.c --- v2.4.13/linux/drivers/char/ip2main.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/char/ip2main.c Fri Nov 2 17:26:17 2001 @@ -12,8 +12,42 @@ *******************************************************************************/ // ToDo: // +// Fix the immediate DSS_NOW problem. +// Work over the channel stats return logic in ip2_ipl_ioctl so they +// make sense for all 256 possible channels and so the user space +// utilities will compile and work properly. +// // Done: // +// 1.2.14 /\/\|=mhw=|\/\/ +// Added bounds checking to ip2_ipl_ioctl to avoid potential terroristic acts. +// Changed the definition of ip2trace to be more consistant with kernel style +// Thanks to Andreas Dilger for these updates +// +// 1.2.13 /\/\|=mhw=|\/\/ +// DEVFS: Renamed ttf/{n} to tts/F{n} and cuf/{n} to cua/F{n} to conform +// to agreed devfs serial device naming convention. +// +// 1.2.12 /\/\|=mhw=|\/\/ +// Cleaned up some remove queue cut and paste errors +// +// 1.2.11 /\/\|=mhw=|\/\/ +// Clean up potential NULL pointer dereferences +// Clean up devfs registration +// Add kernel command line parsing for io and irq +// Compile defaults for io and irq are now set in ip2.c not ip2/ip2.h! +// Reworked poll_only hack for explicit parameter setting +// You must now EXPLICITLY set poll_only = 1 or set all irqs to 0 +// Merged ip2_loadmain and old_ip2_init +// Converted all instances of interruptible_sleep_on into queue calls +// Most of these had no race conditions but better to clean up now +// +// 1.2.10 /\/\|=mhw=|\/\/ +// Fixed the bottom half interrupt handler and enabled USE_IQI +// to split the interrupt handler into a formal top-half / bottom-half +// Fixed timing window on high speed processors that queued messages to +// the outbound mail fifo faster than the board could handle. +// // 1.2.9 // Four box EX was barfing on >128k kmalloc, made structure smaller by // reducing output buffer size @@ -193,13 +227,13 @@ /* String constants to identify ourselves */ static char *pcName = "Computone IntelliPort Plus multiport driver"; -static char *pcVersion = "1.2.9"; +static char *pcVersion = "1.2.14"; /* String constants for port names */ static char *pcDriver_name = "ip2"; #ifdef CONFIG_DEVFS_FS -static char *pcTty = "ttf/%d"; -static char *pcCallout = "cuf/%d"; +static char *pcTty = "tts/F%d"; +static char *pcCallout = "cua/F%d"; #else static char *pcTty = "ttyF"; static char *pcCallout = "cuf"; @@ -225,8 +259,6 @@ void cleanup_module(void); #endif -int old_ip2_init(void); - /* Private (static) functions */ static int ip2_open(PTTY, struct file *); static void ip2_close(PTTY, struct file *); @@ -246,6 +278,7 @@ static void ip2_hangup(PTTY); static void set_irq(int, int); +static void ip2_interrupt_bh(i2eBordStrPtr pB); static void ip2_interrupt(int irq, void *dev_id, struct pt_regs * regs); static void ip2_poll(unsigned long arg); static inline void service_all_boards(void); @@ -268,7 +301,6 @@ static int ip2_ipl_ioctl(struct inode *, struct file *, UINT, ULONG); static int ip2_ipl_open(struct inode *, struct file *); -void ip2trace(unsigned short,unsigned char,unsigned char,unsigned long,...); static int DumpTraceBuffer(char *, int); static int DumpFifoBuffer( char *, int); @@ -310,11 +342,11 @@ open: ip2_ipl_open, }; -static long irq_counter; -static long bh_counter; +static unsigned long irq_counter = 0; +static unsigned long bh_counter = 0; // Use immediate queue to service interrupts -//#define USE_IQI // PCI&2.2 needs work +#define USE_IQI //#define USE_IQ // PCI&2.2 needs work /* The timer_list entry for our poll routine. If interrupt operation is not @@ -364,7 +396,7 @@ # endif /* LINUX_VERSION */ #endif /* MODULE */ -static int poll_only; +static int poll_only = 0; static int Eisa_irq; static int Eisa_slot; @@ -373,32 +405,6 @@ static char rirqs[IP2_MAX_BOARDS]; static int Valid_Irqs[] = { 3, 4, 5, 7, 10, 11, 12, 15, 0}; -/******************************************************************************/ -/* Initialisation Section */ -/******************************************************************************/ -int -ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize) -{ - int i; - /* process command line arguments to modprobe or insmod i.e. iop & irqp */ - /* otherwise ip2config is initialized by what's in ip2/ip2.h */ - /* command line trumps initialization in ip2.h */ - /* first two args are null if builtin to kernel */ - if ((irqp != NULL) || (iop != NULL)) { - for ( i = 0; i < IP2_MAX_BOARDS; ++i ) { - if (irqp && irqp[i]) { - ip2config.irq[i] = irqp[i]; - } - if (iop && iop[i]) { - ip2config.addr[i] = iop[i]; - } - } - } - Fip_firmware = firmware; - Fip_firmware_size = firmsize; - return old_ip2_init(); -} - // Some functions to keep track of what irq's we have static int __init @@ -461,7 +467,6 @@ #ifdef IP2DEBUG_INIT printk (KERN_DEBUG "Loading module ...\n" ); #endif - //was return old_ip2_init(); return 0; } #endif /* MODULE */ @@ -559,8 +564,9 @@ #endif /* MODULE */ /******************************************************************************/ -/* Function: old_ip2_init() */ +/* Function: ip2_loadmain() */ /* Parameters: irq, io from command line of insmod et. al. */ +/* pointer to fip firmware and firmware size for boards */ /* Returns: Success (0) */ /* */ /* Description: */ @@ -575,7 +581,7 @@ #define IP2_SA_FLAGS 0 int __init -old_ip2_init(void) +ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize) { #ifdef CONFIG_DEVFS_FS static devfs_handle_t devfs_handle; @@ -588,9 +594,40 @@ i2eBordStrPtr pB = NULL; int rc = -1; -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INIT, ITRC_ENTER, 0 ); -#endif + + /* process command line arguments to modprobe or + insmod i.e. iop & irqp */ + /* irqp and iop should ALWAYS be specified now... But we check + them individually just to be sure, anyways... */ + for ( i = 0; i < IP2_MAX_BOARDS; ++i ) { + if (iop) { + ip2config.addr[i] = iop[i]; + if (irqp) { + if( irqp[i] >= 0 ) { + ip2config.irq[i] = irqp[i]; + } else { + ip2config.irq[i] = 0; + } + // This is a little bit of a hack. If poll_only=1 on command + // line back in ip2.c OR all IRQs on all specified boards are + // explicitly set to 0, then drop to poll only mode and override + // PCI or EISA interrupts. This superceeds the old hack of + // triggering if all interrupts were zero (like da default). + // Still a hack but less prone to random acts of terrorism. + // + // What we really should do, now that the IRQ default is set + // to -1, is to use 0 as a hard coded, do not probe. + // + // /\/\|=mhw=|\/\/ + poll_only |= irqp[i]; + } + } + } + poll_only = !poll_only; + + Fip_firmware = firmware; + Fip_firmware_size = firmsize; /* Announce our presence */ printk( KERN_INFO "%s version %s\n", pcName, pcVersion ); @@ -604,12 +641,6 @@ } loaded++; - /* if all irq config is zero we shall poll_only */ - for ( i = 0; i < IP2_MAX_BOARDS; ++i ) { - poll_only |= ip2config.irq[i]; - } - poll_only = !poll_only; - /* Initialise the iiEllis subsystem. */ iiEllisInit(); @@ -672,10 +703,13 @@ pcibios_read_config_byte(pci_bus, pci_devfn, PCI_INTERRUPT_LINE, &pci_irq); - if (!is_valid_irq(pci_irq)) { - printk( KERN_ERR "IP2: Bad PCI BIOS IRQ(%d)\n",pci_irq); - pci_irq = 0; - } +// If the PCI BIOS assigned it, lets try and use it. If we +// can't acquire it or it screws up, deal with it then. + +// if (!is_valid_irq(pci_irq)) { +// printk( KERN_ERR "IP2: Bad PCI BIOS IRQ(%d)\n",pci_irq); +// pci_irq = 0; +// } ip2config.irq[i] = pci_irq; } else { // ann error ip2config.addr[i] = 0; @@ -706,10 +740,13 @@ status = pci_read_config_byte(pci_dev_i, PCI_INTERRUPT_LINE, &pci_irq); - if (!is_valid_irq(pci_irq)) { - printk( KERN_ERR "IP2: Bad PCI BIOS IRQ(%d)\n",pci_irq); - pci_irq = 0; - } +// If the PCI BIOS assigned it, lets try and use it. If we +// can't acquire it or it screws up, deal with it then. + +// if (!is_valid_irq(pci_irq)) { +// printk( KERN_ERR "IP2: Bad PCI BIOS IRQ(%d)\n",pci_irq); +// pci_irq = 0; +// } ip2config.irq[i] = pci_irq; } else { // ann error ip2config.addr[i] = 0; @@ -761,9 +798,7 @@ } } -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INIT, 2, 0 ); -#endif /* Zero out the normal tty device structure. */ memset ( &ip2_tty_driver, 0, sizeof ip2_tty_driver ); @@ -822,9 +857,7 @@ ip2_callout_driver.major = IP2_CALLOUT_MAJOR; ip2_callout_driver.subtype = SERIAL_TYPE_CALLOUT; -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INIT, 3, 0 ); -#endif /* Register the tty devices. */ if ( ( err = tty_register_driver ( &ip2_tty_driver ) ) ) { @@ -847,9 +880,7 @@ printk(KERN_ERR "IP2: failed to register read_procmem\n"); } else { -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INIT, 4, 0 ); -#endif /* Register the interrupt handler or poll handler, depending upon the * specified interrupt. */ @@ -868,41 +899,45 @@ } #ifdef CONFIG_DEVFS_FS - sprintf( name, "ipl%d", i ); - i2BoardPtrTable[i]->devfs_ipl_handle = - devfs_register (devfs_handle, name, - DEVFS_FL_DEFAULT, - IP2_IPL_MAJOR, 4 * i, - S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, - &ip2_ipl, NULL); - - sprintf( name, "stat%d", i ); - i2BoardPtrTable[i]->devfs_stat_handle = - devfs_register (devfs_handle, name, - DEVFS_FL_DEFAULT, - IP2_IPL_MAJOR, 4 * i + 1, - S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, - &ip2_ipl, NULL); + if ( NULL != ( pB = i2BoardPtrTable[i] ) ) { + sprintf( name, "ipl%d", i ); + pB->devfs_ipl_handle = + devfs_register (devfs_handle, name, + DEVFS_FL_DEFAULT, + IP2_IPL_MAJOR, 4 * i, + S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, + &ip2_ipl, NULL); + + sprintf( name, "stat%d", i ); + pB->devfs_stat_handle = + devfs_register (devfs_handle, name, + DEVFS_FL_DEFAULT, + IP2_IPL_MAJOR, 4 * i + 1, + S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, + &ip2_ipl, NULL); - for ( box = 0; box < ABS_MAX_BOXES; ++box ) - { - for ( j = 0; j < ABS_BIGGEST_BOX; ++j ) + for ( box = 0; box < ABS_MAX_BOXES; ++box ) { - if ( pB->i2eChannelMap[box] & (1 << j) ) - { - tty_register_devfs(&ip2_tty_driver, - 0, j + ABS_BIGGEST_BOX * - (box+i*ABS_MAX_BOXES)); - tty_register_devfs(&ip2_callout_driver, - 0, j + ABS_BIGGEST_BOX * - (box+i*ABS_MAX_BOXES)); - } + for ( j = 0; j < ABS_BIGGEST_BOX; ++j ) + { + if ( pB->i2eChannelMap[box] & (1 << j) ) + { + tty_register_devfs(&ip2_tty_driver, + 0, j + ABS_BIGGEST_BOX * + (box+i*ABS_MAX_BOXES)); + tty_register_devfs(&ip2_callout_driver, + 0, j + ABS_BIGGEST_BOX * + (box+i*ABS_MAX_BOXES)); + } + } } } #endif if (poll_only) { - ip2config.irq[i] = CIR_POLL; +// Poll only forces driver to only use polling and +// to ignore the probed PCI or EISA interrupts. + ip2config.irq[i] = CIR_POLL; } if ( ip2config.irq[i] == CIR_POLL ) { retry: @@ -935,9 +970,7 @@ } } } -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INIT, ITRC_RETURN, 0 ); -#endif return 0; } @@ -963,26 +996,24 @@ if ( !iiInitialize ( pB ) ) { printk ( KERN_ERR "IP2: Failed to initialize board at 0x%x, error %d\n", pB->i2eBase, pB->i2eError ); - kfree ( pB ); - i2BoardPtrTable[boardnum] = NULL; - return; + goto err_initialize; } - printk(KERN_INFO "Board %d: addr=0x%x irq=%d ", boardnum + 1, + printk(KERN_INFO "IP2: Board %d: addr=0x%x irq=%d\n", boardnum + 1, ip2config.addr[boardnum], ip2config.irq[boardnum] ); if (0 != ( rc = check_region( ip2config.addr[boardnum], 8))) { - i2BoardPtrTable[boardnum] = NULL; - printk(KERN_ERR "bad addr=0x%x rc = %d\n", + printk(KERN_ERR "IP2: bad addr=0x%x rc = %d\n", ip2config.addr[boardnum], rc ); - return; + goto err_initialize; } request_region( ip2config.addr[boardnum], 8, pcName ); if ( iiDownloadAll ( pB, (loadHdrStrPtr)Fip_firmware, 1, Fip_firmware_size ) != II_DOWN_GOOD ) { - printk ( KERN_ERR "IP2:failed to download loadware " ); + printk ( KERN_ERR "IP2: failed to download loadware\n" ); + goto err_release_region; } else { - printk ( KERN_INFO "fv=%d.%d.%d lv=%d.%d.%d\n", + printk ( KERN_INFO "IP2: fv=%d.%d.%d lv=%d.%d.%d\n", pB->i2ePom.e.porVersion, pB->i2ePom.e.porRevision, pB->i2ePom.e.porSubRev, pB->i2eLVersion, @@ -992,24 +1023,24 @@ switch ( pB->i2ePom.e.porID & ~POR_ID_RESERVED ) { default: - printk( KERN_ERR "IP2: Unknown board type, ID = %x", + printk( KERN_ERR "IP2: Unknown board type, ID = %x\n", pB->i2ePom.e.porID ); nports = 0; - goto ex_exit; + goto err_release_region; break; case POR_ID_II_4: /* IntelliPort-II, ISA-4 (4xRJ45) */ - printk ( KERN_INFO "ISA-4" ); + printk ( KERN_INFO "IP2: ISA-4\n" ); nports = 4; break; case POR_ID_II_8: /* IntelliPort-II, 8-port using standard brick. */ - printk ( KERN_INFO "ISA-8 std" ); + printk ( KERN_INFO "IP2: ISA-8 std\n" ); nports = 8; break; case POR_ID_II_8R: /* IntelliPort-II, 8-port using RJ11's (no CTS) */ - printk ( KERN_INFO "ISA-8 RJ11" ); + printk ( KERN_INFO "IP2: ISA-8 RJ11\n" ); nports = 8; break; @@ -1030,8 +1061,14 @@ } DevTableMem[boardnum] = pCh = kmalloc( sizeof(i2ChanStr) * nports, GFP_KERNEL ); + if ( !pCh ) { + printk ( KERN_ERR "IP2: (i2_init_channel:) Out of memory.\n"); + goto err_release_region; + } if ( !i2InitChannels( pB, nports, pCh ) ) { - printk(KERN_ERR "i2InitChannels failed: %d\n",pB->i2eError); + printk(KERN_ERR "IP2: i2InitChannels failed: %d\n",pB->i2eError); + kfree ( pCh ); + goto err_release_region; } pB->i2eChannelPtr = &DevTable[portnum]; pB->i2eChannelCnt = ABS_MOST_PORTS; @@ -1045,17 +1082,24 @@ } } } - printk(KERN_INFO "IP2: EX box=%d ports=%d %d bit", + printk(KERN_INFO "IP2: EX box=%d ports=%d %d bit\n", nboxes, nports, pB->i2eDataWidth16 ? 16 : 8 ); } goto ex_exit; - break; } DevTableMem[boardnum] = pCh = kmalloc ( sizeof (i2ChanStr) * nports, GFP_KERNEL ); + if ( !pCh ) { + printk ( KERN_ERR "IP2: (i2_init_channel:) Out of memory.\n"); + goto err_release_region; + } pB->i2eChannelPtr = pCh; pB->i2eChannelCnt = nports; - i2InitChannels ( pB, pB->i2eChannelCnt, pCh ); + if ( !i2InitChannels( pB, nports, pCh ) ) { + printk(KERN_ERR "IP2: i2InitChannels failed: %d\n",pB->i2eError); + kfree ( pCh ); + goto err_release_region; + } pB->i2eChannelPtr = &DevTable[IP2_PORTS_PER_BOARD * boardnum]; for( i = 0; i < pB->i2eChannelCnt; ++i ) { @@ -1064,7 +1108,16 @@ pCh++; } ex_exit: - printk ( KERN_INFO "\n" ); + pB->tqueue_interrupt.routine = (void(*)(void*)) ip2_interrupt_bh; + pB->tqueue_interrupt.data = pB; + return; + +err_release_region: + release_region(ip2config.addr[boardnum], 8); +err_initialize: + kfree ( pB ); + i2BoardPtrTable[boardnum] = NULL; + return; } /******************************************************************************/ @@ -1262,16 +1315,34 @@ } -#ifdef USE_IQI -static struct tq_struct -senior_service = -{ // it's the death that worse than fate - NULL, - 0, - (void(*)(void*)) service_all_boards, - NULL, //later - board address XXX -}; -#endif +/******************************************************************************/ +/* Function: ip2_interrupt_bh(pB) */ +/* Parameters: pB - pointer to the board structure */ +/* Returns: Nothing */ +/* */ +/* Description: */ +/* Service the board in a bottom half interrupt handler and then */ +/* reenable the board's interrupts if it has an IRQ number */ +/* */ +/******************************************************************************/ +static void +ip2_interrupt_bh(i2eBordStrPtr pB) +{ +// pB better well be set or we have a problem! We can only get +// here from the IMMEDIATE queue. Here, we process the boards. +// Checking pB doesn't cost much and it saves us from the sanity checkers. + + bh_counter++; + + if ( pB ) { + i2ServiceBoard( pB ); + if( pB->i2eUsingIrq ) { +// Re-enable his interrupts + iiEnableMailIrq(pB); + } + } +} + /******************************************************************************/ /* Function: ip2_interrupt(int irq, void *dev_id, struct pt_regs * regs) */ @@ -1282,6 +1353,14 @@ /* */ /* Description: */ /* */ +/* Our task here is simply to identify each board which needs servicing. */ +/* If we are queuing then, queue it to be serviced, and disable its irq */ +/* mask otherwise process the board directly. */ +/* */ +/* We could queue by IRQ but that just complicates things on both ends */ +/* with very little gain in performance (how many instructions does */ +/* it take to iterate on the immediate queue). */ +/* */ /* */ /******************************************************************************/ static void @@ -1290,31 +1369,41 @@ int i; i2eBordStrPtr pB; -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INTR, 99, 1, irq ); -#endif - -#ifdef USE_IQI - - queue_task(&senior_service, &tq_immediate); - mark_bh(IMMEDIATE_BH); -#else /* Service just the boards on the list using this irq */ for( i = 0; i < i2nBoards; ++i ) { pB = i2BoardPtrTable[i]; + +// Only process those boards which match our IRQ. +// IRQ = 0 for polled boards, we won't poll "IRQ" boards + if ( pB && (pB->i2eUsingIrq == irq) ) { +#ifdef USE_IQI + + if (NO_MAIL_HERE != ( pB->i2eStartMail = iiGetMail(pB))) { +// Disable his interrupt (will be enabled when serviced) +// This is mostly to protect from reentrancy. + iiDisableMailIrq(pB); + +// Park the board on the immediate queue for processing. + queue_task(&pB->tqueue_interrupt, &tq_immediate); + +// Make sure the immediate queue is flagged to fire. + mark_bh(IMMEDIATE_BH); + } +#else +// We are using immediate servicing here. This sucks and can +// cause all sorts of havoc with ppp and others. The failsafe +// check on iiSendPendingMail could also throw a hairball. i2ServiceBoard( pB ); +#endif /* USE_IQI */ } } -#endif /* USE_IQI */ - ++irq_counter; -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 ); -#endif } /******************************************************************************/ @@ -1330,31 +1419,20 @@ static void ip2_poll(unsigned long arg) { -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INTR, 100, 0 ); -#endif - TimerOn = 0; // it's the truth but not checked in service - - bh_counter++; -#ifdef USE_IQI - - queue_task(&senior_service, &tq_immediate); - mark_bh(IMMEDIATE_BH); + TimerOn = 0; // it's the truth but not checked in service -#else - // Just polled boards, service_all might be better + // Just polled boards, IRQ = 0 will hit all non-interrupt boards. + // It will NOT poll boards handled by hard interrupts. + // The issue of queued BH interrups is handled in ip2_interrupt(). ip2_interrupt(0, NULL, NULL); -#endif /* USE_IQI */ - PollTimer.expires = POLL_TIMEOUT; add_timer( &PollTimer ); TimerOn = 1; -#ifdef IP2DEBUG_TRACE ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 ); -#endif } static inline void @@ -1362,9 +1440,8 @@ { unsigned long flags; -#ifdef IP2DEBUG_TRACE ip2trace(CHANN, ITRC_INPUT, 21, 0 ); -#endif + // Data input if ( pCh->pTTY != NULL ) { READ_LOCK_IRQSAVE(&pCh->Ibuf_spinlock,flags) @@ -1374,9 +1451,8 @@ } else READ_UNLOCK_IRQRESTORE(&pCh->Ibuf_spinlock,flags) } else { -#ifdef IP2DEBUG_TRACE ip2trace(CHANN, ITRC_INPUT, 22, 0 ); -#endif + i2InputFlush( pCh ); } } @@ -1401,9 +1477,7 @@ status = i2GetStatus( pCh, (I2_BRK|I2_PAR|I2_FRA|I2_OVR) ); -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_STATUS, 21, 1, status ); -#endif if (pCh->pTTY && (status & (I2_BRK|I2_PAR|I2_FRA|I2_OVR)) ) { if ( (status & I2_BRK) ) { @@ -1463,9 +1537,7 @@ } } -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_STATUS, 26, 0 ); -#endif } /******************************************************************************/ @@ -1515,13 +1587,12 @@ static int ip2_open( PTTY tty, struct file *pFile ) { + wait_queue_t wait; int rc = 0; int do_clocal = 0; i2ChanStrPtr pCh = DevTable[MINOR(tty->device)]; -#ifdef IP2DEBUG_TRACE ip2trace (MINOR(tty->device), ITRC_OPEN, ITRC_ENTER, 0 ); -#endif if ( pCh == NULL ) { return -ENODEV; @@ -1548,14 +1619,23 @@ * 1. If the port is in the middle of closing wait for the completion * and then return the appropriate error. */ + init_waitqueue_entry(&wait, current); + add_wait_queue(&pCh->close_wait, &wait); + set_current_state( TASK_INTERRUPTIBLE ); + if ( tty_hung_up_p(pFile) || ( pCh->flags & ASYNC_CLOSING )) { if ( pCh->flags & ASYNC_CLOSING ) { - interruptible_sleep_on( &pCh->close_wait); + schedule(); } if ( tty_hung_up_p(pFile) ) { + set_current_state( TASK_RUNNING ); + remove_wait_queue(&pCh->close_wait, &wait); return( pCh->flags & ASYNC_HUP_NOTIFY ) ? -EAGAIN : -ERESTARTSYS; } } + set_current_state( TASK_RUNNING ); + remove_wait_queue(&pCh->close_wait, &wait); + /* * 2. If this is a callout device, make sure the normal port is not in * use, and that someone else doesn't have the callout device locked. @@ -1608,13 +1688,20 @@ #endif ++pCh->wopen; + + init_waitqueue_entry(&wait, current); + add_wait_queue(&pCh->open_wait, &wait); + for(;;) { if ( !(pCh->flags & ASYNC_CALLOUT_ACTIVE)) { i2QueueCommands(PTYPE_INLINE, pCh, 100, 2, CMD_DTRUP, CMD_RTSUP); pCh->dataSetOut |= (I2_DTR | I2_RTS); + set_current_state( TASK_INTERRUPTIBLE ); serviceOutgoingFifo( pCh->pMyBord ); } if ( tty_hung_up_p(pFile) ) { + set_current_state( TASK_RUNNING ); + remove_wait_queue(&pCh->open_wait, &wait); return ( pCh->flags & ASYNC_HUP_NOTIFY ) ? -EBUSY : -ERESTARTSYS; } if ( !(pCh->flags & ASYNC_CALLOUT_ACTIVE) && @@ -1631,21 +1718,22 @@ (pCh->flags & ASYNC_CLOSING)?"True":"False"); printk(KERN_DEBUG "OpenBlock: waiting for CD or signal\n"); #endif -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_OPEN, 3, 2, (pCh->flags & ASYNC_CALLOUT_ACTIVE), - (pCh->flags & ASYNC_CLOSING) ); -#endif + (pCh->flags & ASYNC_CLOSING) ); /* check for signal */ if (signal_pending(current)) { rc = (( pCh->flags & ASYNC_HUP_NOTIFY ) ? -EAGAIN : -ERESTARTSYS); break; } - interruptible_sleep_on(&pCh->open_wait); + schedule(); } + set_current_state( TASK_RUNNING ); + remove_wait_queue(&pCh->open_wait, &wait); + --pCh->wopen; //why count? -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_OPEN, 4, 0 ); -#endif + if (rc != 0 ) { return rc; } @@ -1682,9 +1770,8 @@ #endif serviceOutgoingFifo( pCh->pMyBord ); -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_OPEN, ITRC_RETURN, 0 ); -#endif + return 0; } @@ -1707,9 +1794,7 @@ return; } -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_CLOSE, ITRC_ENTER, 0 ); -#endif #ifdef IP2DEBUG_OPEN printk(KERN_DEBUG "IP2:close ttyF%02X:\n",MINOR(tty->device)); @@ -1718,16 +1803,15 @@ if ( tty_hung_up_p ( pFile ) ) { MOD_DEC_USE_COUNT; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_CLOSE, 2, 1, 2 ); -#endif + return; } if ( tty->count > 1 ) { /* not the last close */ MOD_DEC_USE_COUNT; -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_CLOSE, 2, 1, 3 ); -#endif + return; } pCh->flags |= ASYNC_CLOSING; // last close actually @@ -1794,9 +1878,8 @@ MOD_DEC_USE_COUNT; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_CLOSE, ITRC_RETURN, 1, 1 ); -#endif + return; } @@ -1814,9 +1897,11 @@ { i2ChanStrPtr pCh = tty->driver_data; -#ifdef IP2DEBUG_TRACE + if( !pCh ) { + return; + } + ip2trace (CHANN, ITRC_HANGUP, ITRC_ENTER, 0 ); -#endif ip2_flush_buffer(tty); @@ -1824,7 +1909,7 @@ i2QueueCommands(PTYPE_BYPASS, pCh, 0, 1, CMD_DCD_NREP); i2QueueCommands(PTYPE_INLINE, pCh, 0, 2, CMD_CTSFL_DSAB, CMD_RTSFL_DSAB); - if ( !tty || (tty->termios->c_cflag & HUPCL) ) { + if ( (tty->termios->c_cflag & HUPCL) ) { i2QueueCommands(PTYPE_BYPASS, pCh, 0, 2, CMD_RTSDN, CMD_DTRDN); pCh->dataSetOut &= ~(I2_DTR | I2_RTS); i2QueueCommands( PTYPE_INLINE, pCh, 100, 1, CMD_PAUSE(25)); @@ -1839,9 +1924,7 @@ pCh->pTTY = NULL; wake_up_interruptible ( &pCh->open_wait ); -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_HANGUP, ITRC_RETURN, 0 ); -#endif } /******************************************************************************/ @@ -1869,9 +1952,7 @@ int bytesSent = 0; unsigned long flags; -#ifdef IP2DEBUG_TRACE - ip2trace (CHANN, ITRC_WRITE, ITRC_ENTER, 2, count, -1 ); -#endif + ip2trace (CHANN, ITRC_WRITE, ITRC_ENTER, 2, count, -1 ); /* Flush out any buffered data left over from ip2_putchar() calls. */ ip2_flush_chars( tty ); @@ -1881,9 +1962,8 @@ bytesSent = i2Output( pCh, pData, count, user ); WRITE_UNLOCK_IRQRESTORE(&pCh->Pbuf_spinlock,flags); -#ifdef IP2DEBUG_TRACE - ip2trace (CHANN, ITRC_WRITE, ITRC_RETURN, 1, bytesSent ); -#endif + ip2trace (CHANN, ITRC_WRITE, ITRC_RETURN, 1, bytesSent ); + return bytesSent > 0 ? bytesSent : 0; } @@ -1903,9 +1983,7 @@ i2ChanStrPtr pCh = tty->driver_data; unsigned long flags; -#ifdef IP2DEBUG_TRACE // ip2trace (CHANN, ITRC_PUTC, ITRC_ENTER, 1, ch ); -#endif WRITE_LOCK_IRQSAVE(&pCh->Pbuf_spinlock,flags); pCh->Pbuf[pCh->Pbuf_stuff++] = ch; @@ -1915,9 +1993,7 @@ } else WRITE_UNLOCK_IRQRESTORE(&pCh->Pbuf_spinlock,flags); -#ifdef IP2DEBUG_TRACE // ip2trace (CHANN, ITRC_PUTC, ITRC_RETURN, 1, ch ); -#endif } /******************************************************************************/ @@ -1937,9 +2013,9 @@ WRITE_LOCK_IRQSAVE(&pCh->Pbuf_spinlock,flags); if ( pCh->Pbuf_stuff ) { -#ifdef IP2DEBUG_TRACE -// ip2trace (CHANN, ITRC_PUTC, 10, 1, strip ); -#endif + +// ip2trace (CHANN, ITRC_PUTC, 10, 1, strip ); + // // We may need to restart i2Output if it does not fullfill this request // @@ -1971,9 +2047,7 @@ bytesFree = i2OutputFree( pCh ) - pCh->Pbuf_stuff; READ_UNLOCK_IRQRESTORE(&pCh->Pbuf_spinlock,flags); -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_WRITE, 11, 1, bytesFree ); -#endif return ((bytesFree > 0) ? bytesFree : 0); } @@ -1993,9 +2067,9 @@ i2ChanStrPtr pCh = tty->driver_data; int rc; unsigned long flags; -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_WRITE, 12, 1, pCh->Obuf_char_count + pCh->Pbuf_stuff ); -#endif + #ifdef IP2DEBUG_WRITE printk (KERN_DEBUG "IP2: chars in buffer = %d (%d,%d)\n", pCh->Obuf_char_count + pCh->Pbuf_stuff, @@ -2025,9 +2099,8 @@ i2ChanStrPtr pCh = tty->driver_data; unsigned long flags; -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_FLUSH, ITRC_ENTER, 0 ); -#endif + #ifdef IP2DEBUG_WRITE printk (KERN_DEBUG "IP2: flush buffer\n" ); #endif @@ -2036,9 +2109,9 @@ WRITE_UNLOCK_IRQRESTORE(&pCh->Pbuf_spinlock,flags); i2FlushOutput( pCh ); ip2_owake(tty); -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_FLUSH, ITRC_RETURN, 0 ); -#endif + } /******************************************************************************/ @@ -2173,6 +2246,7 @@ static int ip2_ioctl ( PTTY tty, struct file *pFile, UINT cmd, ULONG arg ) { + wait_queue_t wait; i2ChanStrPtr pCh = DevTable[MINOR(tty->device)]; struct async_icount cprev, cnow; /* kernel counter temps */ struct serial_icounter_struct *p_cuser; /* user space */ @@ -2183,9 +2257,7 @@ return -ENODEV; } -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_IOCTL, ITRC_ENTER, 2, cmd, arg ); -#endif #ifdef IP2DEBUG_IOCTL printk(KERN_DEBUG "IP2: ioctl cmd (%x), arg (%lx)\n", cmd, arg ); @@ -2193,18 +2265,18 @@ switch(cmd) { case TIOCGSERIAL: -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_IOCTL, 2, 1, rc ); -#endif + rc = get_serial_info(pCh, (struct serial_struct *) arg); if (rc) return rc; break; case TIOCSSERIAL: -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_IOCTL, 3, 1, rc ); -#endif + rc = set_serial_info(pCh, (struct serial_struct *) arg); if (rc) return rc; @@ -2240,9 +2312,9 @@ case TCSBRK: /* SVID version: non-zero arg --> no break */ rc = tty_check_change(tty); -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_IOCTL, 4, 1, rc ); -#endif + if (!rc) { ip2_wait_until_sent(tty,0); if (!arg) { @@ -2254,9 +2326,9 @@ case TCSBRKP: /* support for POSIX tcsendbreak() */ rc = tty_check_change(tty); -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_IOCTL, 5, 1, rc ); -#endif + if (!rc) { ip2_wait_until_sent(tty,0); i2QueueCommands(PTYPE_INLINE, pCh, 100, 1, @@ -2266,18 +2338,18 @@ break; case TIOCGSOFTCAR: -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_IOCTL, 6, 1, rc ); -#endif + PUT_USER(rc,C_CLOCAL(tty) ? 1 : 0, (unsigned long *) arg); if (rc) return rc; break; case TIOCSSOFTCAR: -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_IOCTL, 7, 1, rc ); -#endif + GET_USER(rc,arg,(unsigned long *) arg); if (rc) return rc; @@ -2287,23 +2359,38 @@ break; case TIOCMGET: -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_IOCTL, 8, 1, rc ); -#endif + /* FIXME - the following code is causing a NULL pointer dereference in 2.3.51 in an interrupt handler. It's suppose to prompt the board to return the DSS signal status immediately. Why doesn't it do the same thing in 2.2.14? */ -/* + +/* This thing is still busted in the 1.2.12 driver on 2.4.x + and even hoses the serial console so the oops can be trapped. + /\/\|=mhw=|\/\/ */ + +#ifdef ENABLE_DSSNOW i2QueueCommands(PTYPE_BYPASS, pCh, 100, 1, CMD_DSS_NOW); + + init_waitqueue_entry(&wait, current); + add_wait_queue(&pCh->dss_now_wait, &wait); + set_current_state( TASK_INTERRUPTIBLE ); + serviceOutgoingFifo( pCh->pMyBord ); - interruptible_sleep_on(&pCh->dss_now_wait); + + schedule(); + + set_current_state( TASK_RUNNING ); + remove_wait_queue(&pCh->dss_now_wait, &wait); + if (signal_pending(current)) { return -EINTR; } -*/ +#endif PUT_USER(rc, ((pCh->dataSetOut & I2_RTS) ? TIOCM_RTS : 0) | ((pCh->dataSetOut & I2_DTR) ? TIOCM_DTR : 0) @@ -2317,9 +2404,8 @@ case TIOCMBIS: case TIOCMBIC: case TIOCMSET: -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_IOCTL, 9, 0 ); -#endif + rc = set_modem_info(pCh, cmd, (unsigned int *) arg); break; @@ -2334,15 +2420,18 @@ restore_flags(flags); i2QueueCommands(PTYPE_BYPASS, pCh, 100, 4, CMD_DCD_REP, CMD_CTS_REP, CMD_DSR_REP, CMD_RI_REP); + init_waitqueue_entry(&wait, current); + add_wait_queue(&pCh->delta_msr_wait, &wait); + set_current_state( TASK_INTERRUPTIBLE ); + serviceOutgoingFifo( pCh->pMyBord ); for(;;) { -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_IOCTL, 10, 0 ); -#endif - interruptible_sleep_on(&pCh->delta_msr_wait); -#ifdef IP2DEBUG_TRACE + + schedule(); + ip2trace (CHANN, ITRC_IOCTL, 11, 0 ); -#endif + /* see if a signal did it */ if (signal_pending(current)) { rc = -ERESTARTSYS; @@ -2365,6 +2454,9 @@ } cprev = cnow; } + set_current_state( TASK_RUNNING ); + remove_wait_queue(&pCh->delta_msr_wait, &wait); + i2QueueCommands(PTYPE_BYPASS, pCh, 100, 3, CMD_CTS_NREP, CMD_DSR_NREP, CMD_RI_NREP); if ( ! (pCh->flags & ASYNC_CHECK_CD)) { @@ -2383,9 +2475,8 @@ * serial driver. */ case TIOCGICOUNT: -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_IOCTL, 11, 1, rc ); -#endif + save_flags(flags);cli(); cnow = pCh->icount; restore_flags(flags); @@ -2416,15 +2507,14 @@ case TIOCSERSETMULTI: default: -#ifdef IP2DEBUG_TRACE ip2trace (CHANN, ITRC_IOCTL, 12, 0 ); -#endif + rc = -ENOIOCTLCMD; break; } -#ifdef IP2DEBUG_TRACE + ip2trace (CHANN, ITRC_IOCTL, ITRC_RETURN, 0 ); -#endif + return rc; } @@ -2635,9 +2725,9 @@ #ifdef IP2DEBUG_IOCTL printk (KERN_DEBUG "IP2: set line discipline\n" ); #endif -#ifdef IP2DEBUG_TRACE + ip2trace (((i2ChanStrPtr)tty->driver_data)->port_index, ITRC_IOCTL, 16, 0 ); -#endif + } /******************************************************************************/ @@ -3093,12 +3183,16 @@ break; default: - pCh = DevTable[cmd]; - if ( pCh ) - { - COPY_TO_USER(rc, (char*)arg, (char*)pCh, sizeof(i2ChanStr) ); + if (cmd < IP2_MAX_PORTS) { + pCh = DevTable[cmd]; + if ( pCh ) + { + COPY_TO_USER(rc, (char*)arg, (char*)pCh, sizeof(i2ChanStr) ); + } else { + rc = -ENODEV; + } } else { - rc = cmd < 64 ? -ENODEV : -EINVAL; + rc = -EINVAL; } } break; @@ -3411,10 +3505,10 @@ /* */ /* */ /******************************************************************************/ +#ifdef IP2DEBUG_TRACE void ip2trace (unsigned short pn, unsigned char cat, unsigned char label, unsigned long codes, ...) { -#ifdef IP2DEBUG_TRACE long flags; unsigned long *pCode = &codes; union ip2breadcrumb bc; @@ -3454,8 +3548,8 @@ tracebuf[tracestuff++] = *++pCode; } -#endif } +#endif MODULE_LICENSE("GPL"); diff -u --recursive --new-file v2.4.13/linux/drivers/char/istallion.c linux/drivers/char/istallion.c --- v2.4.13/linux/drivers/char/istallion.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/char/istallion.c Thu Oct 25 13:53:47 2001 @@ -431,6 +431,12 @@ #endif #endif +static struct pci_device_id istallion_pci_tbl[] = { + { PCI_VENDOR_ID_STALLION, PCI_DEVICE_ID_ECRA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, + { 0 } +}; +MODULE_DEVICE_TABLE(pci, istallion_pci_tbl); + /*****************************************************************************/ /* @@ -1529,9 +1535,9 @@ printk("stli_delay(len=%d)\n", len); #endif if (len > 0) { - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(len); - current->state = TASK_RUNNING; + set_current_state(TASK_RUNNING); } } diff -u --recursive --new-file v2.4.13/linux/drivers/char/joystick/analog.c linux/drivers/char/joystick/analog.c --- v2.4.13/linux/drivers/char/joystick/analog.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/char/joystick/analog.c Thu Oct 25 14:01:51 2001 @@ -146,7 +146,7 @@ #define DELTA(x,y) ((y)-(x)) #define TIME_NAME "TSC" #elif __alpha__ -#define GET_TIME(x) get_cycles(x) +#define GET_TIME(x) ((x) = get_cycles()) #define DELTA(x,y) ((y)-(x)) #define TIME_NAME "PCC" #else diff -u --recursive --new-file v2.4.13/linux/drivers/char/lp.c linux/drivers/char/lp.c --- v2.4.13/linux/drivers/char/lp.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/lp.c Thu Oct 25 00:07:39 2001 @@ -153,6 +153,10 @@ #undef LP_DEBUG +/* Bits used to manage claiming the parport device */ +#define LP_PREEMPT_REQUEST 1 +#define LP_PARPORT_CLAIMED 2 + /* --- low-level port access ----------------------------------- */ #define r_dtr(x) (parport_read_data(lp_table[(x)].dev->port)) @@ -160,15 +164,55 @@ #define w_ctr(x,y) do { parport_write_control(lp_table[(x)].dev->port, (y)); } while (0) #define w_dtr(x,y) do { parport_write_data(lp_table[(x)].dev->port, (y)); } while (0) +/* Claim the parport or block trying unless we've already claimed it */ +static void lp_claim_parport_or_block(struct lp_struct *this_lp) +{ + if (!test_and_set_bit(LP_PARPORT_CLAIMED, &this_lp->bits)) { + parport_claim_or_block (this_lp->dev); + } +} + +/* Claim the parport or block trying unless we've already claimed it */ +static void lp_release_parport(struct lp_struct *this_lp) +{ + if (test_and_clear_bit(LP_PARPORT_CLAIMED, &this_lp->bits)) { + parport_release (this_lp->dev); + } +} + + + +static int lp_preempt(void *handle) +{ + struct lp_struct *this_lp = (struct lp_struct *)handle; + set_bit(LP_PREEMPT_REQUEST, &this_lp->bits); + return (1); +} + + +/* + * Try to negotiate to a new mode; if unsuccessful negotiate to + * compatibility mode. Return the mode we ended up in. + */ +static int lp_negotiate(struct parport * port, int mode) +{ + if (parport_negotiate (port, mode) != 0) { + mode = IEEE1284_MODE_COMPAT; + parport_negotiate (port, mode); + } + + return (mode); +} + static int lp_reset(int minor) { int retval; - parport_claim_or_block (lp_table[minor].dev); + lp_claim_parport_or_block (&lp_table[minor]); w_ctr(minor, LP_PSELECP); udelay (LP_DELAY); w_ctr(minor, LP_PSELECP | LP_PINITP); retval = r_str(minor); - parport_release (lp_table[minor].dev); + lp_release_parport (&lp_table[minor]); return retval; } @@ -180,10 +224,10 @@ return; polling = lp_table[minor].dev->port->irq == PARPORT_IRQ_NONE; - if (polling) parport_release (lp_table[minor].dev); + if (polling) lp_release_parport (&lp_table[minor]); interruptible_sleep_on_timeout (&lp_table[minor].waitq, LP_TIMEOUT_POLLED); - if (polling) parport_claim_or_block (lp_table[minor].dev); + if (polling) lp_claim_parport_or_block (&lp_table[minor]); else parport_yield_blocking (lp_table[minor].dev); } @@ -229,6 +273,12 @@ static int lp_wait_ready(int minor) { int error = 0; + + /* If we're not in compatibility mode, we're ready now! */ + if (lp_table[minor].current_mode != IEEE1284_MODE_COMPAT) { + return (0); + } + do { error = lp_check_status (minor); if (error && (LP_F(minor) & LP_ABORT)) @@ -270,10 +320,10 @@ /* Claim Parport or sleep until it becomes available */ - parport_claim_or_block (lp_table[minor].dev); - - /* Go to compatibility mode. */ - parport_negotiate (port, IEEE1284_MODE_COMPAT); + lp_claim_parport_or_block (&lp_table[minor]); + /* Go to the proper mode. */ + lp_table[minor].current_mode = lp_negotiate (port, + lp_table[minor].best_mode); parport_set_timeout (lp_table[minor].dev, lp_table[minor].timeout); @@ -298,7 +348,13 @@ if (copy_size > 0) { /* incomplete write -> check error ! */ - int error = lp_wait_ready (minor); + int error; + + parport_negotiate (lp_table[minor].dev->port, + IEEE1284_MODE_COMPAT); + lp_table[minor].current_mode = IEEE1284_MODE_COMPAT; + + error = lp_wait_ready (minor); if (error) { if (retv == 0) @@ -307,6 +363,10 @@ } parport_yield_blocking (lp_table[minor].dev); + lp_table[minor].current_mode + = lp_negotiate (port, + lp_table[minor].best_mode); + } else if (current->need_resched) schedule (); @@ -323,7 +383,14 @@ } } while (count > 0); - parport_release (lp_table[minor].dev); + if (test_and_clear_bit(LP_PREEMPT_REQUEST, + &lp_table[minor].bits)) { + printk(KERN_INFO "lp%d releasing parport\n", minor); + parport_negotiate (lp_table[minor].dev->port, + IEEE1284_MODE_COMPAT); + lp_table[minor].current_mode = IEEE1284_MODE_COMPAT; + lp_release_parport (&lp_table[minor]); + } up (&lp_table[minor].port_mutex); @@ -347,9 +414,9 @@ if (down_interruptible (&lp_table[minor].port_mutex)) return -EINTR; - parport_claim_or_block (lp_table[minor].dev); + lp_claim_parport_or_block (&lp_table[minor]); retval = parport_read (port, kbuf, count); - parport_release (lp_table[minor].dev); + lp_release_parport (&lp_table[minor]); if (retval > 0 && copy_to_user (buf, kbuf, retval)) retval = -EFAULT; @@ -379,9 +446,9 @@ should most likely only ever be used by the tunelp application. */ if ((LP_F(minor) & LP_ABORTOPEN) && !(file->f_flags & O_NONBLOCK)) { int status; - parport_claim_or_block (lp_table[minor].dev); + lp_claim_parport_or_block (&lp_table[minor]); status = r_str(minor); - parport_release (lp_table[minor].dev); + lp_release_parport (&lp_table[minor]); if (status & LP_POUTPA) { printk(KERN_INFO "lp%d out of paper\n", minor); LP_F(minor) &= ~LP_BUSY; @@ -401,6 +468,21 @@ LP_F(minor) &= ~LP_BUSY; return -ENOMEM; } + /* Determine if the peripheral supports ECP mode */ + lp_claim_parport_or_block (&lp_table[minor]); + if ( (lp_table[minor].dev->port->modes & PARPORT_MODE_ECP) && + !parport_negotiate (lp_table[minor].dev->port, + IEEE1284_MODE_ECP)) { + printk (KERN_INFO "lp%d: ECP mode\n", minor); + lp_table[minor].best_mode = IEEE1284_MODE_ECP; + } else { + printk (KERN_INFO "lp%d: compatibility mode\n", minor); + lp_table[minor].best_mode = IEEE1284_MODE_COMPAT; + } + /* Leave peripheral in compatibility mode */ + parport_negotiate (lp_table[minor].dev->port, IEEE1284_MODE_COMPAT); + lp_release_parport (&lp_table[minor]); + lp_table[minor].current_mode = IEEE1284_MODE_COMPAT; return 0; } @@ -408,6 +490,10 @@ { unsigned int minor = MINOR(inode->i_rdev); + lp_claim_parport_or_block (&lp_table[minor]); + parport_negotiate (lp_table[minor].dev->port, IEEE1284_MODE_COMPAT); + lp_table[minor].current_mode = IEEE1284_MODE_COMPAT; + lp_release_parport (&lp_table[minor]); lock_kernel(); kfree(lp_table[minor].lp_buffer); lp_table[minor].lp_buffer = NULL; @@ -470,9 +556,9 @@ return -EFAULT; break; case LPGETSTATUS: - parport_claim_or_block (lp_table[minor].dev); + lp_claim_parport_or_block (&lp_table[minor]); status = r_str(minor); - parport_release (lp_table[minor].dev); + lp_release_parport (&lp_table[minor]); if (copy_to_user((int *) arg, &status, sizeof(int))) return -EFAULT; @@ -657,7 +743,7 @@ char name[8]; lp_table[nr].dev = parport_register_device(port, "lp", - NULL, NULL, NULL, 0, + lp_preempt, NULL, NULL, 0, (void *) &lp_table[nr]); if (lp_table[nr].dev == NULL) return 1; diff -u --recursive --new-file v2.4.13/linux/drivers/char/misc.c linux/drivers/char/misc.c --- v2.4.13/linux/drivers/char/misc.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/misc.c Fri Nov 2 17:46:47 2001 @@ -75,6 +75,7 @@ extern int ds1286_init(void); extern int pmu_device_init(void); extern int tosh_init(void); +extern int i8k_init(void); static int misc_read_proc(char *buf, char **start, off_t offset, int len, int *eof, void *private) @@ -275,6 +276,9 @@ #endif #ifdef CONFIG_TOSHIBA tosh_init(); +#endif +#ifdef CONFIG_I8K + i8k_init(); #endif if (devfs_register_chrdev(MISC_MAJOR,"misc",&misc_fops)) { printk("unable to get major %d for misc devices\n", diff -u --recursive --new-file v2.4.13/linux/drivers/char/moxa.c linux/drivers/char/moxa.c --- v2.4.13/linux/drivers/char/moxa.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/moxa.c Thu Oct 25 13:53:47 2001 @@ -105,18 +105,16 @@ "CP-204J series", }; -typedef struct { - unsigned short vendor_id; - unsigned short device_id; - unsigned short board_type; -} moxa_pciinfo; - -static moxa_pciinfo moxa_pcibrds[] = -{ - {PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_C218, MOXA_BOARD_C218_PCI}, - {PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_C320, MOXA_BOARD_C320_PCI}, - {PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_CP204J, MOXA_BOARD_CP204J}, +static struct pci_device_id moxa_pcibrds[] = { + { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_C218, PCI_ANY_ID, PCI_ANY_ID, + 0, 0, MOXA_BOARD_C218_PCI }, + { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_C320, PCI_ANY_ID, PCI_ANY_ID, + 0, 0, MOXA_BOARD_C320_PCI }, + { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_CP204J, PCI_ANY_ID, PCI_ANY_ID, + 0, 0, MOXA_BOARD_CP204J }, + { 0 } }; +MODULE_DEVICE_TABLE(pci, moxa_pcibrds); typedef struct _moxa_isa_board_conf { int boardType; @@ -487,10 +485,10 @@ #ifdef CONFIG_PCI { struct pci_dev *p = NULL; - n = sizeof(moxa_pcibrds) / sizeof(moxa_pciinfo); + n = (sizeof(moxa_pcibrds) / sizeof(moxa_pcibrds[0])) - 1; i = 0; while (i < n) { - while((p = pci_find_device(moxa_pcibrds[i].vendor_id, moxa_pcibrds[i].device_id, p))!=NULL) + while ((p = pci_find_device(moxa_pcibrds[i].vendor, moxa_pcibrds[i].device, p))!=NULL) { if (pci_enable_device(p)) continue; @@ -498,7 +496,7 @@ if (verbose) printk("More than %d MOXA Intellio family boards found. Board is ignored.", MAX_BOARDS); } else { - moxa_get_PCI_conf(p, moxa_pcibrds[i].board_type, + moxa_get_PCI_conf(p, moxa_pcibrds[i].driver_data, &moxa_boards[numBoards]); numBoards++; } @@ -686,7 +684,7 @@ ch->tty = 0; if (ch->blocked_open) { if (ch->close_delay) { - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(ch->close_delay); } wake_up_interruptible(&ch->open_wait); @@ -1140,7 +1138,7 @@ restore_flags(flags); ch->blocked_open++; while (1) { - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); if (tty_hung_up_p(filp) || !(ch->asyncflags & ASYNC_INITIALIZED)) { #ifdef SERIAL_DO_RESTART @@ -1164,7 +1162,7 @@ } schedule(); } - current->state = TASK_RUNNING; + set_current_state(TASK_RUNNING); remove_wait_queue(&ch->open_wait, &wait); if (!tty_hung_up_p(filp)) ch->count++; diff -u --recursive --new-file v2.4.13/linux/drivers/char/mxser.c linux/drivers/char/mxser.c --- v2.4.13/linux/drivers/char/mxser.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/mxser.c Thu Oct 25 13:53:47 2001 @@ -159,17 +159,14 @@ #define MOXA_GET_CUMAJOR (MOXA + 64) #define MOXA_GETMSTATUS (MOXA + 65) -typedef struct { - unsigned short vendor_id; - unsigned short device_id; - unsigned short board_type; -} mxser_pciinfo; - -static mxser_pciinfo mxser_pcibrds[] = -{ - {PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_C168, MXSER_BOARD_C168_PCI}, - {PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_C104, MXSER_BOARD_C104_PCI}, +static struct pci_device_id mxser_pcibrds[] = { + { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_C168, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + MXSER_BOARD_C168_PCI }, + { PCI_VENDOR_ID_MOXA, PCI_DEVICE_ID_C104, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + MXSER_BOARD_C104_PCI }, + { 0 } }; +MODULE_DEVICE_TABLE(pci, mxser_pcibrds); static int ioaddr[MXSER_BOARDS]; static int ttymajor = MXSERMAJOR; @@ -614,22 +611,22 @@ { struct pci_dev *pdev = NULL; - n = sizeof(mxser_pcibrds) / sizeof(mxser_pciinfo); + n = (sizeof(mxser_pcibrds) / sizeof(mxser_pcibrds[0])) - 1; index = 0; for (b = 0; b < n; b++) { - pdev = pci_find_device(mxser_pcibrds[b].vendor_id, - mxser_pcibrds[b].device_id, pdev); + pdev = pci_find_device(mxser_pcibrds[b].vendor, + mxser_pcibrds[b].device, pdev); if (!pdev || pci_enable_device(pdev)) continue; hwconf.pdev = pdev; printk("Found MOXA %s board(BusNo=%d,DevNo=%d)\n", - mxser_brdname[mxser_pcibrds[b].board_type], + mxser_brdname[mxser_pcibrds[b].driver_data], pdev->bus->number, PCI_SLOT(pdev->devfn)); if (m >= MXSER_BOARDS) { printk("Too many Smartio family boards found (maximum %d),board not configured\n", MXSER_BOARDS); } else { retval = mxser_get_PCI_conf(pdev, - mxser_pcibrds[b].board_type, &hwconf); + mxser_pcibrds[b].driver_data, &hwconf); if (retval < 0) { if (retval == MXSER_ERR_IRQ) printk("Invalid interrupt number,board not configured\n"); @@ -848,7 +845,7 @@ */ timeout = jiffies + HZ; while (!(inb(info->base + UART_LSR) & UART_LSR_TEMT)) { - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(5); if (jiffies > timeout) break; @@ -864,7 +861,7 @@ info->tty = 0; if (info->blocked_open) { if (info->close_delay) { - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(info->close_delay); } wake_up_interruptible(&info->open_wait); @@ -1622,7 +1619,7 @@ outb(inb(info->base + UART_MCR) | UART_MCR_DTR | UART_MCR_RTS, info->base + UART_MCR); restore_flags(flags); - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); if (tty_hung_up_p(filp) || !(info->flags & ASYNC_INITIALIZED)) { #ifdef SERIAL_DO_RESTART if (info->flags & ASYNC_HUP_NOTIFY) @@ -1644,7 +1641,7 @@ } schedule(); } - current->state = TASK_RUNNING; + set_current_state(TASK_RUNNING); remove_wait_queue(&info->open_wait, &wait); if (!tty_hung_up_p(filp)) info->count++; @@ -2227,7 +2224,7 @@ unsigned long flags; if (!info->base) return; - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); save_flags(flags); cli(); outb(inb(info->base + UART_LCR) | UART_LCR_SBC, info->base + UART_LCR); diff -u --recursive --new-file v2.4.13/linux/drivers/char/random.c linux/drivers/char/random.c --- v2.4.13/linux/drivers/char/random.c Tue Oct 23 22:48:50 2001 +++ linux/drivers/char/random.c Tue Oct 30 15:08:12 2001 @@ -569,7 +569,7 @@ __u32 w; while (nwords--) { - w = rotate_left(r->input_rotate, *in); + w = rotate_left(r->input_rotate, *in++); i = r->add_ptr = (r->add_ptr - 1) & wordmask; /* * Normally, we add 7 bits of rotation to the pool. @@ -1245,15 +1245,16 @@ if (r->entropy_count < nbytes * 8 && r->entropy_count < r->poolinfo.POOLBITS) { - int nwords = min(r->poolinfo.poolwords - r->entropy_count/32, - sizeof(tmp) / 4); + int nwords = min_t(int, + r->poolinfo.poolwords - r->entropy_count/32, + sizeof(tmp) / 4); DEBUG_ENT("xfer %d from primary to %s (have %d, need %d)\n", nwords * 32, r == sec_random_state ? "secondary" : "unknown", r->entropy_count, nbytes * 8); - extract_entropy(random_state, tmp, nwords, 0); + extract_entropy(random_state, tmp, nwords * 4, 0); add_entropy_words(r, tmp, nwords); credit_entropy_store(r, nwords * 32); } diff -u --recursive --new-file v2.4.13/linux/drivers/char/rio/rio_linux.c linux/drivers/char/rio/rio_linux.c --- v2.4.13/linux/drivers/char/rio/rio_linux.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/rio/rio_linux.c Thu Oct 25 13:53:47 2001 @@ -63,6 +63,9 @@ #include #include +#if BITS_PER_LONG != 32 +# error FIXME: this driver only works on 32-bit platforms +#endif #include "linux_compat.h" #include "typdef.h" diff -u --recursive --new-file v2.4.13/linux/drivers/char/serial.c linux/drivers/char/serial.c --- v2.4.13/linux/drivers/char/serial.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/serial.c Sun Nov 4 17:35:36 2001 @@ -4457,7 +4457,7 @@ else if (serial_pci_guess_board(dev, &tmp) == 0) { printk(KERN_INFO "Redundant entry in serial pci_table. " "Please send the output of\n" - "lspci -vv, this message (%d,%d,%d,%d)\n" + "lspci -vv, this message (%04x,%04x,%04x,%04x)\n" "and the manufacturer and name of " "serial board or modem board\n" "to serial-pci-info@lists.sourceforge.net.\n", diff -u --recursive --new-file v2.4.13/linux/drivers/char/tty_io.c linux/drivers/char/tty_io.c --- v2.4.13/linux/drivers/char/tty_io.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/tty_io.c Fri Nov 2 17:26:17 2001 @@ -2329,9 +2329,6 @@ #ifdef CONFIG_SERIAL_TX3912 tx3912_rs_init(); #endif -#ifdef CONFIG_COMPUTONE - ip2_init(); -#endif #ifdef CONFIG_ROCKETPORT rp_init(); #endif diff -u --recursive --new-file v2.4.13/linux/drivers/char/vt.c linux/drivers/char/vt.c --- v2.4.13/linux/drivers/char/vt.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/char/vt.c Fri Oct 26 13:33:47 2001 @@ -1184,6 +1184,24 @@ switch_screen(new_console); /* + * This can't appear below a successful kill_proc(). If it did, + * then the *blank_screen operation could occur while X, having + * received acqsig, is waking up on another processor. This + * condition can lead to overlapping accesses to the VGA range + * and the framebuffer (causing system lockups). + * + * To account for this we duplicate this code below only if the + * controlling process is gone and we've called reset_vc. + */ + if (old_vc_mode != vt_cons[new_console]->vc_mode) + { + if (vt_cons[new_console]->vc_mode == KD_TEXT) + unblank_screen(); + else + do_blank_screen(1); + } + + /* * If this new console is under process control, send it a signal * telling it that it has acquired. Also check if it has died and * clean up (similar to logic employed in change_console()) @@ -1209,19 +1227,15 @@ * to account for and tracking tty count may be undesirable. */ reset_vc(new_console); - } - } - /* - * We do this here because the controlling process above may have - * gone, and so there is now a new vc_mode - */ - if (old_vc_mode != vt_cons[new_console]->vc_mode) - { - if (vt_cons[new_console]->vc_mode == KD_TEXT) - unblank_screen(); - else - do_blank_screen(1); + if (old_vc_mode != vt_cons[new_console]->vc_mode) + { + if (vt_cons[new_console]->vc_mode == KD_TEXT) + unblank_screen(); + else + do_blank_screen(1); + } + } } /* diff -u --recursive --new-file v2.4.13/linux/drivers/ide/ataraid.c linux/drivers/ide/ataraid.c --- v2.4.13/linux/drivers/ide/ataraid.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/ide/ataraid.c Thu Oct 25 13:58:35 2001 @@ -51,6 +51,7 @@ static int ataraid_readahead[256]; static struct block_device_operations ataraid_fops = { + owner: THIS_MODULE, open: ataraid_open, release: ataraid_release, ioctl: ataraid_ioctl, @@ -208,11 +209,9 @@ int ataraid_get_device(struct raid_device_operations *fops) { int bit; - MOD_INC_USE_COUNT; down(&ataraid_sem); if (ataraiduse==~0U) { up(&ataraid_sem); - MOD_DEC_USE_COUNT; return -ENODEV; } bit=ffz(ataraiduse); @@ -232,7 +231,6 @@ ataraiduse &= ~(1<io_ports[IDE_IRQ_OFFSET]); + ch = z_readb(hwif->io_ports[IDE_IRQ_OFFSET]); if (!(ch & 0x80)) - return 0; + return 0; return 1; } - - /* - * Any Buddha or Catweasel boards present? - */ - -static int __init find_buddha(void) +static int xsurf_ack_intr(ide_hwif_t *hwif) { - struct zorro_dev *z = NULL; + unsigned char ch; - buddha_num_hwifs = 0; - while ((z = zorro_find_device(ZORRO_WILDCARD, z))) { - unsigned long board; - if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA) - buddha_num_hwifs = BUDDHA_NUM_HWIFS; - else if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_CATWEASEL) - buddha_num_hwifs = CATWEASEL_NUM_HWIFS; - else - continue; - board = z->resource.start; - if (!request_mem_region(board+BUDDHA_BASE1, 0x800, "IDE")) - continue; - buddha_board = ZTWO_VADDR(board); - /* write to BUDDHA_IRQ_MR to enable the board IRQ */ - *(char *)(buddha_board+BUDDHA_IRQ_MR) = 0; - break; - } - return buddha_num_hwifs; + ch = z_readb(hwif->io_ports[IDE_IRQ_OFFSET]); + /* X-Surf needs a 0 written to IRQ register to ensure ISA bit A11 stays at 0 */ + z_writeb(0, hwif->io_ports[IDE_IRQ_OFFSET]); + if (!(ch & 0x80)) + return 0; + return 1; } - /* * Probe for a Buddha or Catweasel IDE interface - * We support only _one_ of them, no multiple boards! */ void __init buddha_init(void) { - hw_regs_t hw; - int i, index; - - if (buddha_num_hwifs < 0 && !find_buddha()) - return; + hw_regs_t hw; + int i, index; - for (i = 0; i < buddha_num_hwifs; i++) { - ide_setup_ports(&hw, (ide_ioreg_t)(buddha_board+buddha_bases[i]), - buddha_offsets, 0, - (ide_ioreg_t)(buddha_board+buddha_irqports[i]), - buddha_ack_intr, IRQ_AMIGA_PORTS); - index = ide_register_hw(&hw, NULL); - if (index != -1) - printk("ide%d: %s IDE interface\n", index, - buddha_num_hwifs == BUDDHA_NUM_HWIFS ? "Buddha" : - "Catweasel"); - } + struct zorro_dev *z = NULL; + u_long buddha_board = 0; + BuddhaType type; + int buddha_num_hwifs; + + while ((z = zorro_find_device(ZORRO_WILDCARD, z))) { + unsigned long board; + if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_BUDDHA) { + buddha_num_hwifs = BUDDHA_NUM_HWIFS; + type=BOARD_BUDDHA; + } else if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_CATWEASEL) { + buddha_num_hwifs = CATWEASEL_NUM_HWIFS; + type=BOARD_CATWEASEL; + } else if (z->id == ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF) { + buddha_num_hwifs = XSURF_NUM_HWIFS; + type=BOARD_XSURF; + } else + continue; + + board = z->resource.start; + + if(type != BOARD_XSURF) { + if (!request_mem_region(board+BUDDHA_BASE1, 0x800, "IDE")) + continue; + } else { + if (!request_mem_region(board+XSURF_BASE1, 0x1000, "IDE")) + continue; + if (!request_mem_region(board+XSURF_BASE2, 0x1000, "IDE")) + continue; + if (!request_mem_region(board+XSURF_IRQ1, 0x8, "IDE")) + continue; + } + buddha_board = ZTWO_VADDR(board); + + /* write to BUDDHA_IRQ_MR to enable the board IRQ */ + /* X-Surf doesn't have this. IRQs are always on */ + if(type != BOARD_XSURF) *(char *)(buddha_board+BUDDHA_IRQ_MR) = 0; + + for(i=0;i #include #include #include @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -41,7 +42,7 @@ #define ATA_HD_STATUS 0x1d /* see status-bits */ #define ATA_HD_CONTROL 0x39 -static int __init falconide_offsets[IDE_NR_PORTS] = { +static int falconide_offsets[IDE_NR_PORTS] __initdata = { ATA_HD_DATA, ATA_HD_ERROR, ATA_HD_NSECTOR, ATA_HD_SECTOR, ATA_HD_LCYL, ATA_HD_HCYL, ATA_HD_SELECT, ATA_HD_STATUS, ATA_HD_CONTROL, -1 }; diff -u --recursive --new-file v2.4.13/linux/drivers/ide/icside.c linux/drivers/ide/icside.c --- v2.4.13/linux/drivers/ide/icside.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/ide/icside.c Thu Oct 25 13:53:47 2001 @@ -318,6 +318,117 @@ return icside_config_if(drive, speed); } +/* + * dma_intr() is the handler for disk read/write DMA interrupts + */ +static ide_startstop_t icside_dmaintr(ide_drive_t *drive) +{ + int i; + byte stat, dma_stat; + + dma_stat = HWIF(drive)->dmaproc(ide_dma_end, drive); + stat = GET_STAT(); /* get drive status */ + if (OK_STAT(stat,DRIVE_READY,drive->bad_wstat|DRQ_STAT)) { + if (!dma_stat) { + struct request *rq = HWGROUP(drive)->rq; + rq = HWGROUP(drive)->rq; + for (i = rq->nr_sectors; i > 0;) { + i -= rq->current_nr_sectors; + ide_end_request(1, HWGROUP(drive)); + } + return ide_stopped; + } + printk("%s: dma_intr: bad DMA status (dma_stat=%x)\n", + drive->name, dma_stat); + } + return ide_error(drive, "dma_intr", stat); +} + +/* + * The following is a sick duplication from ide-dma.c ;( + * + * This should be defined in one place only. + */ +struct drive_list_entry { + char * id_model; + char * id_firmware; +}; + +static struct drive_list_entry drive_whitelist [] = { + { "Micropolis 2112A", "ALL" }, + { "CONNER CTMA 4000", "ALL" }, + { "CONNER CTT8000-A", "ALL" }, + { "ST34342A", "ALL" }, + { NULL, 0 } +}; + +static struct drive_list_entry drive_blacklist [] = { + { "WDC AC11000H", "ALL" }, + { "WDC AC22100H", "ALL" }, + { "WDC AC32500H", "ALL" }, + { "WDC AC33100H", "ALL" }, + { "WDC AC31600H", "ALL" }, + { "WDC AC32100H", "24.09P07" }, + { "WDC AC23200L", "21.10N21" }, + { "Compaq CRD-8241B", "ALL" }, + { "CRD-8400B", "ALL" }, + { "CRD-8480B", "ALL" }, + { "CRD-8480C", "ALL" }, + { "CRD-8482B", "ALL" }, + { "CRD-84", "ALL" }, + { "SanDisk SDP3B", "ALL" }, + { "SanDisk SDP3B-64", "ALL" }, + { "SANYO CD-ROM CRD", "ALL" }, + { "HITACHI CDR-8", "ALL" }, + { "HITACHI CDR-8335", "ALL" }, + { "HITACHI CDR-8435", "ALL" }, + { "Toshiba CD-ROM XM-6202B", "ALL" }, + { "CD-532E-A", "ALL" }, + { "E-IDE CD-ROM CR-840", "ALL" }, + { "CD-ROM Drive/F5A", "ALL" }, + { "RICOH CD-R/RW MP7083A", "ALL" }, + { "WPI CDD-820", "ALL" }, + { "SAMSUNG CD-ROM SC-148C", "ALL" }, + { "SAMSUNG CD-ROM SC-148F", "ALL" }, + { "SAMSUNG CD-ROM SC", "ALL" }, + { "SanDisk SDP3B-64", "ALL" }, + { "SAMSUNG CD-ROM SN-124", "ALL" }, + { "PLEXTOR CD-R PX-W8432T", "ALL" }, + { "ATAPI CD-ROM DRIVE 40X MAXIMUM", "ALL" }, + { "_NEC DV5800A", "ALL" }, + { NULL, 0 } +}; + +static int in_drive_list(struct hd_driveid *id, struct drive_list_entry * drive_table) +{ + for ( ; drive_table->id_model ; drive_table++) + if ((!strcmp(drive_table->id_model, id->model)) && + ((!strstr(drive_table->id_firmware, id->fw_rev)) || + (!strcmp(drive_table->id_firmware, "ALL")))) + return 1; + return 0; +} + +/* + * For both Blacklisted and Whitelisted drives. + * This is setup to be called as an extern for future support + * to other special driver code. + */ +static int check_drive_lists(ide_drive_t *drive, int good_bad) +{ + struct hd_driveid *id = drive->id; + + if (good_bad) { + return in_drive_list(id, drive_whitelist); + } else { + int blacklist = in_drive_list(id, drive_blacklist); + if (blacklist) + printk("%s: Disabling DMA for %s\n", drive->name, id->model); + return(blacklist); + } + return 0; +} + static int icside_dma_check(ide_drive_t *drive) { @@ -333,7 +444,7 @@ /* * Consult the list of known "bad" drives */ - if (ide_dmaproc(ide_dma_bad_drive, drive)) { + if (check_drive_lists(drive, 0)) { func = ide_dma_off; goto out; } @@ -358,7 +469,7 @@ /* * Consult the list of known "good" drives */ - if (ide_dmaproc(ide_dma_good_drive, drive)) { + if (check_drive_lists(drive, 1)) { if (id->eide_dma_time > 150) goto out; xfer_mode = XFER_MW_DMA_1; @@ -372,12 +483,28 @@ } static int +icside_dma_verbose(ide_drive_t *drive) +{ + printk(", DMA"); + return 1; +} + +static int icside_dmaproc(ide_dma_action_t func, ide_drive_t *drive) { ide_hwif_t *hwif = HWIF(drive); int count, reading = 0; switch (func) { + case ide_dma_off: + printk("%s: DMA disabled\n", drive->name); + /*FALLTHROUGH*/ + + case ide_dma_off_quietly: + case ide_dma_on: + drive->using_dma = (func == ide_dma_on); + return 0; + case ide_dma_check: return icside_dma_check(drive); @@ -407,7 +534,7 @@ if (drive->media != ide_disk) return 0; - ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL); + ide_set_handler(drive, &icside_dmaintr, WAIT_CMD, NULL); OUT_BYTE(reading ? WIN_READDMA : WIN_WRITEDMA, IDE_COMMAND_REG); @@ -424,9 +551,19 @@ case ide_dma_test_irq: return inb((unsigned long)hwif->hw.priv) & 1; + case ide_dma_bad_drive: + case ide_dma_good_drive: + return check_drive_lists(drive, (func == ide_dma_good_drive)); + + case ide_dma_verbose: + return icside_dma_verbose(drive); + + case ide_dma_timeout: default: - return ide_dmaproc(func, drive); + printk("icside_dmaproc: unsupported %s func: %d\n", + ide_dmafunc_verbose(func), func); } + return 1; } static int @@ -464,13 +601,13 @@ for (index = 0; index < MAX_HWIFS; ++index) { hwif = &ide_hwifs[index]; - if (hwif->hw.io_ports[IDE_DATA_OFFSET] == (ide_ioreg_t)dataport) + if (hwif->io_ports[IDE_DATA_OFFSET] == (ide_ioreg_t)dataport) goto found; } for (index = 0; index < MAX_HWIFS; ++index) { hwif = &ide_hwifs[index]; - if (!hwif->hw.io_ports[IDE_DATA_OFFSET]) + if (!hwif->io_ports[IDE_DATA_OFFSET]) goto found; } @@ -493,10 +630,13 @@ for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { hwif->hw.io_ports[i] = (ide_ioreg_t)port; + hwif->io_ports[i] = (ide_ioreg_t)port; port += 1 << info->stepping; } hwif->hw.io_ports[IDE_CONTROL_OFFSET] = base + info->ctrloffset; + hwif->io_ports[IDE_CONTROL_OFFSET] = base + info->ctrloffset; hwif->hw.irq = irq; + hwif->irq = irq; hwif->hw.dma = NO_DMA; hwif->noprobe = 0; hwif->chipset = ide_acorn; @@ -579,9 +719,8 @@ icside_setup_dma(mate, autodma); } } -#endif - no_dma: +#endif return hwif || mate ? 0 : -1; } diff -u --recursive --new-file v2.4.13/linux/drivers/ide/ide-cd.c linux/drivers/ide/ide-cd.c --- v2.4.13/linux/drivers/ide/ide-cd.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/ide/ide-cd.c Wed Oct 24 23:53:51 2001 @@ -2863,7 +2863,7 @@ struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { - return cdrom_fops.ioctl (inode, file, cmd, arg); + return cdrom_ioctl (inode, file, cmd, arg); } static @@ -2875,7 +2875,7 @@ MOD_INC_USE_COUNT; if (info->buffer == NULL) info->buffer = (char *) kmalloc(SECTOR_BUFFER_SIZE, GFP_KERNEL); - if ((info->buffer == NULL) || (rc = cdrom_fops.open(ip, fp))) { + if ((info->buffer == NULL) || (rc = cdrom_open(ip, fp))) { drive->usage--; MOD_DEC_USE_COUNT; } @@ -2886,14 +2886,14 @@ void ide_cdrom_release (struct inode *inode, struct file *file, ide_drive_t *drive) { - cdrom_fops.release (inode, file); + cdrom_release (inode, file); MOD_DEC_USE_COUNT; } static int ide_cdrom_check_media_change (ide_drive_t *drive) { - return cdrom_fops.check_media_change(MKDEV (HWIF (drive)->major, + return cdrom_media_changed(MKDEV (HWIF (drive)->major, (drive->select.b.unit) << PARTN_BITS)); } diff -u --recursive --new-file v2.4.13/linux/drivers/ide/ide-pci.c linux/drivers/ide/ide-pci.c --- v2.4.13/linux/drivers/ide/ide-pci.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/ide/ide-pci.c Thu Oct 25 13:53:47 2001 @@ -37,6 +37,7 @@ #define DEVID_PIIX4NX ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX}) #define DEVID_PIIX4U3 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_9}) #define DEVID_PIIX4U4 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_8}) +#define DEVID_PIIX4U5 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10}) #define DEVID_VIA_IDE ((ide_pci_devid_t){PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C561}) #define DEVID_MR_IDE ((ide_pci_devid_t){PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1}) #define DEVID_VP_IDE ((ide_pci_devid_t){PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1}) @@ -385,6 +386,7 @@ {DEVID_PIIX4NX, "PIIX4", PCI_PIIX, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, {DEVID_PIIX4U3, "PIIX4", PCI_PIIX, ATA66_PIIX, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, {DEVID_PIIX4U4, "PIIX4", PCI_PIIX, ATA66_PIIX, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, + {DEVID_PIIX4U5, "PIIX4", PCI_PIIX, ATA66_PIIX, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 }, {DEVID_VIA_IDE, "VIA_IDE", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }, {DEVID_MR_IDE, "VP_IDE", PCI_VIA82CXXX, ATA66_VIA82CXXX,INIT_VIA82CXXX, DMA_VIA82CXXX, {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, ON_BOARD, 0 }, {DEVID_VP_IDE, "VP_IDE", PCI_VIA82CXXX, ATA66_VIA82CXXX,INIT_VIA82CXXX, DMA_VIA82CXXX, {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, ON_BOARD, 0 }, diff -u --recursive --new-file v2.4.13/linux/drivers/ide/ide.c linux/drivers/ide/ide.c --- v2.4.13/linux/drivers/ide/ide.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/ide/ide.c Thu Oct 25 13:58:35 2001 @@ -1950,11 +1950,9 @@ static int ide_open (struct inode * inode, struct file * filp) { ide_drive_t *drive; - int rc; if ((drive = get_info_ptr(inode->i_rdev)) == NULL) return -ENXIO; - MOD_INC_USE_COUNT; if (drive->driver == NULL) ide_driver_module(); #ifdef CONFIG_KMOD @@ -1972,14 +1970,10 @@ while (drive->busy) sleep_on(&drive->wqueue); drive->usage++; - if (drive->driver != NULL) { - if ((rc = DRIVER(drive)->open(inode, filp, drive))) - MOD_DEC_USE_COUNT; - return rc; - } + if (drive->driver != NULL) + return DRIVER(drive)->open(inode, filp, drive); printk ("%s: driver not present\n", drive->name); drive->usage--; - MOD_DEC_USE_COUNT; return -ENXIO; } @@ -1995,7 +1989,6 @@ drive->usage--; if (drive->driver != NULL) DRIVER(drive)->release(inode, file, drive); - MOD_DEC_USE_COUNT; } return 0; } @@ -3643,6 +3636,7 @@ } struct block_device_operations ide_fops[] = {{ + owner: THIS_MODULE, open: ide_open, release: ide_release, ioctl: ide_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/ide/pdc202xx.c linux/drivers/ide/pdc202xx.c --- v2.4.13/linux/drivers/ide/pdc202xx.c Sun Sep 23 11:40:57 2001 +++ linux/drivers/ide/pdc202xx.c Thu Oct 25 13:53:47 2001 @@ -563,7 +563,7 @@ if (((ultra_66) || (ultra_100)) && (EP & c_mask)) { #ifdef DEBUG - printk("ULTRA66: %s channel of Ultra 66 requires an 80-pin cable for Ultra66 operation.\n", hwif->channel ? "Secondary", "Primary"); + printk("ULTRA66: %s channel of Ultra 66 requires an 80-pin cable for Ultra66 operation.\n", hwif->channel ? "Secondary" : "Primary"); printk(" Switching to Ultra33 mode.\n"); #endif /* DEBUG */ /* Primary : zero out second bit */ diff -u --recursive --new-file v2.4.13/linux/drivers/ide/piix.c linux/drivers/ide/piix.c --- v2.4.13/linux/drivers/ide/piix.c Mon Aug 27 12:41:41 2001 +++ linux/drivers/ide/piix.c Thu Oct 25 13:53:47 2001 @@ -91,6 +91,7 @@ switch(bmide_dev->device) { case PCI_DEVICE_ID_INTEL_82801BA_8: case PCI_DEVICE_ID_INTEL_82801BA_9: + case PCI_DEVICE_ID_INTEL_82801CA_10: p += sprintf(p, "\n Intel PIIX4 Ultra 100 Chipset.\n"); break; case PCI_DEVICE_ID_INTEL_82372FB_1: @@ -364,7 +365,8 @@ byte udma_66 = eighty_ninty_three(drive); int ultra100 = ((dev->device == PCI_DEVICE_ID_INTEL_82801BA_8) || - (dev->device == PCI_DEVICE_ID_INTEL_82801BA_9)) ? 1 : 0; + (dev->device == PCI_DEVICE_ID_INTEL_82801BA_9) || + (dev->device == PCI_DEVICE_ID_INTEL_82801CA_10)) ? 1 : 0; int ultra66 = ((ultra100) || (dev->device == PCI_DEVICE_ID_INTEL_82801AA_1) || (dev->device == PCI_DEVICE_ID_INTEL_82372FB_1)) ? 1 : 0; diff -u --recursive --new-file v2.4.13/linux/drivers/ide/q40ide.c linux/drivers/ide/q40ide.c --- v2.4.13/linux/drivers/ide/q40ide.c Tue Dec 5 12:43:47 2000 +++ linux/drivers/ide/q40ide.c Thu Oct 25 13:53:47 2001 @@ -41,8 +41,11 @@ * Offsets from one of the above bases */ + +/* HD_DATA was redefined in asm-m68k/ide.h */ #undef HD_DATA #define HD_DATA 0x1f0 + #define PCIDE_REG(x) ((q40ide_ioreg_t)(HD_##x-PCIDE_BASE1)) diff -u --recursive --new-file v2.4.13/linux/drivers/isdn/hisax/md5sums.asc linux/drivers/isdn/hisax/md5sums.asc --- v2.4.13/linux/drivers/isdn/hisax/md5sums.asc Sun Aug 12 13:27:59 2001 +++ linux/drivers/isdn/hisax/md5sums.asc Wed Oct 24 15:34:51 2001 @@ -6,17 +6,17 @@ # in the moment. # Read ../../../Documentation/isdn/HiSax.cert for more informations. # -6f9433a8b696076562562d090e3c420f isac.c -13c3eed869f5139f44c563e3a8fea1f5 isdnl1.c -addcff863b0ff1e366c0f2ae9fa6e81e isdnl2.c -7076deb94a363945c21ea27aca4a720a isdnl3.c -51c603829b6cc4f8421f744ad657ceff tei.c -669050ab5079f02887ed0239d86e5474 callc.c -ecacd146b8f8881ef9349935dab3df4a cert.c -fadeb3b85bb23bc1ac48470c0848d6fa l3dss1.c -cf7dec9fac6283716904d26b99188476 l3_1tr6.c -2f75c8765e1be13d114d5f4433cf364b elsa.c -b4cf8a4dceed9ea6dcba65a85b4eecc7 diva.c -dee3f8f40c6fe78a4b57729804b7e6cd sedlbauer.c -0d79fe6dfc5bfaa4826970c41a6d273d hfc_pci.c +d08b59f56fb9ed1fbd17713342c75081 isac.c +e81e6e96f307e55f8b9777aca2b356d9 isdnl1.c +cfd2527d9fb01885484cba74bfc67121 isdnl2.c +8c6829f11459f9d044b5768803fb646d isdnl3.c +d40f88dff4191d2660240749cbdcb688 tei.c +3bd3bd05ee4cb25ffe046200b569a83a callc.c +d518f52402ebc3f1be84e09af375313c cert.c +c425de1f8be86e84006de63c9bb3cc5f l3dss1.c +4c411e29d4103ba60e9af4e3e1234a99 l3_1tr6.c +68c6cc2784f208e3247a5a555918d014 elsa.c +8d63a85d7222cf7b40e663e543191d8f diva.c +8c8cb4ce621fb84d8e337a696e75b0df sedlbauer.c +ebe5613d535748409407568435b2be97 hfc_pci.c # end of md5sums diff -u --recursive --new-file v2.4.13/linux/drivers/isdn/hisax/niccy.c linux/drivers/isdn/hisax/niccy.c --- v2.4.13/linux/drivers/isdn/hisax/niccy.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/isdn/hisax/niccy.c Wed Oct 24 15:34:51 2001 @@ -1,4 +1,4 @@ -/* $Id: niccy.c,v 1.15.6.5 2001/09/23 22:24:50 kai Exp $ +/* $Id: niccy.c,v 1.15.6.6 2001/10/20 22:08:24 kai Exp $ * * low level stuff for Dr. Neuhaus NICCY PnP and NICCY PCI and * compatible (SAGEM cybermodem) @@ -24,7 +24,7 @@ #include extern const char *CardType[]; -const char *niccy_revision = "$Revision: 1.15.6.5 $"; +const char *niccy_revision = "$Revision: 1.15.6.6 $"; #define byteout(addr,val) outb(val,addr) #define bytein(addr) inb(addr) @@ -197,7 +197,7 @@ val = inl(cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG); val &= PCI_IRQ_DISABLE; outl(val, cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG); - release_region(cs->hw.niccy.cfg_reg, 0x80); + release_region(cs->hw.niccy.cfg_reg, 0x40); release_region(cs->hw.niccy.isac, 4); } else { release_region(cs->hw.niccy.isac, 2); @@ -324,16 +324,16 @@ return (0); } else request_region(cs->hw.niccy.isac, 4, "niccy"); - if (check_region(cs->hw.niccy.cfg_reg, 0x80)) { + if (check_region(cs->hw.niccy.cfg_reg, 0x40)) { printk(KERN_WARNING "HiSax: %s pci port %x-%x already in use\n", CardType[card->typ], cs->hw.niccy.cfg_reg, - cs->hw.niccy.cfg_reg + 0x80); + cs->hw.niccy.cfg_reg + 0x40); release_region(cs->hw.niccy.isac, 4); return (0); } else { - request_region(cs->hw.niccy.cfg_reg, 0x80, "niccy pci"); + request_region(cs->hw.niccy.cfg_reg, 0x40, "niccy pci"); } #else printk(KERN_WARNING "Niccy: io0 0 and NO_PCI_BIOS\n"); diff -u --recursive --new-file v2.4.13/linux/drivers/isdn/hisax/st5481_d.c linux/drivers/isdn/hisax/st5481_d.c --- v2.4.13/linux/drivers/isdn/hisax/st5481_d.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/isdn/hisax/st5481_d.c Wed Oct 24 15:34:51 2001 @@ -174,7 +174,6 @@ va_start(args, fmt); vsprintf(buf, fmt, args); - printk("buf %s\n", buf); DBG(8, "%s", buf); va_end(args); } diff -u --recursive --new-file v2.4.13/linux/drivers/isdn/hisax/st5481_usb.c linux/drivers/isdn/hisax/st5481_usb.c --- v2.4.13/linux/drivers/isdn/hisax/st5481_usb.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/isdn/hisax/st5481_usb.c Wed Oct 24 15:34:51 2001 @@ -427,8 +427,8 @@ // Fill the isochronous URB fill_isoc_urb(urb[j], dev, pipe, buf, - num_packets, packet_size, complete, - context); + num_packets, packet_size, complete, + context); } return 0; diff -u --recursive --new-file v2.4.13/linux/drivers/isdn/isdn_ppp.c linux/drivers/isdn/isdn_ppp.c --- v2.4.13/linux/drivers/isdn/isdn_ppp.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/isdn/isdn_ppp.c Wed Oct 24 15:34:51 2001 @@ -2453,10 +2453,15 @@ /* if we RECEIVE an ackowledge we enable the decompressor */ if(is->debug & 0x10) printk(KERN_DEBUG "Enable decompression here!\n"); - if(proto == PPP_CCP) + if(proto == PPP_CCP) { + if (!mis->decompressor) + break; mis->compflags |= SC_DECOMP_ON; - else + } else { + if (!is->decompressor) + break; is->compflags |= SC_LINK_DECOMP_ON; + } break; case CCP_RESETACK: @@ -2620,10 +2625,15 @@ /* if we SEND an ackowledge we can/must enable the compressor */ if(is->debug & 0x10) printk(KERN_DEBUG "Enable compression here!\n"); - if(proto == PPP_CCP) + if(proto == PPP_CCP) { + if (!is->compressor) + break; is->compflags |= SC_COMP_ON; - else + } else { + if (!is->compressor) + break; is->compflags |= SC_LINK_COMP_ON; + } break; case CCP_RESETACK: /* If we send a ACK we should reset our compressor */ diff -u --recursive --new-file v2.4.13/linux/drivers/md/lvm.c linux/drivers/md/lvm.c --- v2.4.13/linux/drivers/md/lvm.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/md/lvm.c Thu Oct 25 13:58:35 2001 @@ -357,6 +357,7 @@ static struct file_operations lvm_chr_fops = { + owner: THIS_MODULE, open: lvm_chr_open, release: lvm_chr_close, ioctl: lvm_chr_ioctl, @@ -366,6 +367,7 @@ /* block device operations structure needed for 2.3.38? and above */ static struct block_device_operations lvm_blk_dops = { + owner: THIS_MODULE, open: lvm_blk_open, release: lvm_blk_close, ioctl: lvm_blk_ioctl, @@ -544,8 +546,6 @@ lvm_chr_open_count++; - MOD_INC_USE_COUNT; - return 0; } /* lvm_chr_open() */ @@ -786,8 +786,6 @@ wake_up_interruptible(&lvm_wait); } - MOD_DEC_USE_COUNT; - return 0; } /* lvm_chr_close() */ @@ -840,8 +838,6 @@ if (lv_ptr->lv_open == 0) vg_ptr->lv_open++; lv_ptr->lv_open++; - MOD_INC_USE_COUNT; - #ifdef DEBUG_LVM_BLK_OPEN printk(KERN_DEBUG "%s -- lvm_blk_open MINOR: %d VG#: %d LV#: %d size: %d\n", @@ -1042,8 +1038,6 @@ if (lv_ptr->lv_open == 1) vg_ptr->lv_open--; lv_ptr->lv_open--; - - MOD_DEC_USE_COUNT; return 0; } /* lvm_blk_close() */ diff -u --recursive --new-file v2.4.13/linux/drivers/md/md.c linux/drivers/md/md.c --- v2.4.13/linux/drivers/md/md.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/md/md.c Thu Oct 25 13:58:34 2001 @@ -2895,6 +2895,7 @@ static struct block_device_operations md_fops= { + owner: THIS_MODULE, open: md_open, release: md_release, ioctl: md_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/media/video/cpia.c linux/drivers/media/video/cpia.c --- v2.4.13/linux/drivers/media/video/cpia.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/media/video/cpia.c Thu Oct 25 13:53:47 2001 @@ -56,8 +56,9 @@ #ifdef MODULE MODULE_PARM(video_nr,"i"); -MODULE_AUTHOR("Scott J. Bertin & Peter Pregler & Johannes Erdfelt "); +MODULE_AUTHOR("Scott J. Bertin & Peter Pregler & Johannes Erdfelt "); MODULE_DESCRIPTION("V4L-driver for Vision CPiA based cameras"); +MODULE_LICENSE("GPL"); MODULE_SUPPORTED_DEVICE("video"); #endif @@ -2869,7 +2870,7 @@ /* set video size */ video_size = match_videosize(vm.width, vm.height); - if (cam->video_size < 0) { + if (video_size < 0) { retval = -EINVAL; break; } @@ -3253,41 +3254,7 @@ } } -/**************************************************************************** - * - * Module routines - * - ***************************************************************************/ - -#ifdef MODULE -int init_module(void) -{ - printk(KERN_INFO "%s v%d.%d.%d\n", ABOUT, - CPIA_MAJ_VER, CPIA_MIN_VER, CPIA_PATCH_VER); -#ifdef CONFIG_PROC_FS - proc_cpia_create(); -#endif -#ifdef CONFIG_KMOD -#ifdef CONFIG_VIDEO_CPIA_PP_MODULE - request_module("cpia_pp"); -#endif -#ifdef CONFIG_VIDEO_CPIA_USB_MODULE - request_module("cpia_usb"); -#endif -#endif -return 0; -} - -void cleanup_module(void) -{ -#ifdef CONFIG_PROC_FS - proc_cpia_destroy(); -#endif -} - -#else - -int cpia_init(struct video_init *unused) +static int __init cpia_init(void) { printk(KERN_INFO "%s v%d.%d.%d\n", ABOUT, CPIA_MAJ_VER, CPIA_MIN_VER, CPIA_PATCH_VER); @@ -3313,9 +3280,17 @@ return 0; } +static void __exit cpia_exit(void) +{ +#ifdef CONFIG_PROC_FS + proc_cpia_destroy(); +#endif +} + +module_init(cpia_init); +module_exit(cpia_exit); + /* Exported symbols for modules. */ EXPORT_SYMBOL(cpia_register_camera); EXPORT_SYMBOL(cpia_unregister_camera); - -#endif diff -u --recursive --new-file v2.4.13/linux/drivers/media/video/cpia.h linux/drivers/media/video/cpia.h --- v2.4.13/linux/drivers/media/video/cpia.h Fri Mar 2 11:12:10 2001 +++ linux/drivers/media/video/cpia.h Thu Oct 25 13:53:47 2001 @@ -416,6 +416,26 @@ } while (0) +static inline void cpia_add_to_list(struct cam_data* l, struct cam_data* drv) +{ + drv->next = l; + drv->previous = &l; + l = drv; +} + + +static inline void cpia_remove_from_list(struct cam_data* drv) +{ + if (drv->previous != NULL) { + if (drv->next != NULL) + drv->next->previous = drv->previous; + *(drv->previous) = drv->next; + drv->previous = NULL; + drv->next = NULL; + } +} + + #endif /* __KERNEL__ */ #endif /* cpia_h */ diff -u --recursive --new-file v2.4.13/linux/drivers/media/video/cpia_pp.c linux/drivers/media/video/cpia_pp.c --- v2.4.13/linux/drivers/media/video/cpia_pp.c Fri Mar 2 11:12:10 2001 +++ linux/drivers/media/video/cpia_pp.c Thu Oct 25 13:53:47 2001 @@ -123,6 +123,8 @@ MODULE_AUTHOR("B. Huisman & Peter Pregler "); MODULE_DESCRIPTION("Parallel port driver for Vision CPiA based cameras"); +MODULE_LICENSE("GPL"); + MODULE_PARM(parport, "1-" __MODULE_STRING(PARPORT_MAX) "s"); MODULE_PARM_DESC(parport, "'auto' or a list of parallel port numbers. Just like lp."); #else @@ -158,6 +160,7 @@ }; static struct cam_data *cam_list; +static spinlock_t cam_list_lock_pp; #ifdef _CPIA_DEBUG_ #define DEB_PORT(port) { \ @@ -582,7 +585,9 @@ kfree(cam); return -ENXIO; } - ADD_TO_LIST(cam_list, cpia); + spin_lock( &cam_list_lock_pp ); + cpia_add_to_list(cam_list, cpia); + spin_unlock( &cam_list_lock_pp ); return 0; } @@ -591,11 +596,12 @@ { struct cam_data *cpia; + spin_lock( &cam_list_lock_pp ); for(cpia = cam_list; cpia != NULL; cpia = cpia->next) { struct pp_cam_entry *cam = cpia->lowlevel_data; if (cam && cam->port->number == port->number) { - REMOVE_FROM_LIST(cpia); - + cpia_remove_from_list(cpia); + spin_unlock( &cam_list_lock_pp ); cpia_unregister_camera(cpia); if(cam->open_count > 0) { @@ -660,6 +666,9 @@ LOG ("unable to register with parport\n"); return -EIO; } + + cam_list = NULL; + spin_lock_init( &cam_list_lock_pp ); return 0; } diff -u --recursive --new-file v2.4.13/linux/drivers/media/video/cpia_usb.c linux/drivers/media/video/cpia_usb.c --- v2.4.13/linux/drivers/media/video/cpia_usb.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/media/video/cpia_usb.c Thu Oct 25 13:53:47 2001 @@ -104,6 +104,7 @@ }; static struct cam_data *cam_list; +static spinlock_t cam_list_lock_usb; static void cpia_usb_complete(struct urb *urb) { @@ -536,7 +537,9 @@ goto fail_all; } - ADD_TO_LIST(cam_list, cam); + spin_lock( &cam_list_lock_usb ); + cpia_add_to_list(cam_list, cam); + spin_unlock( &cam_list_lock_usb ); return cam; @@ -563,6 +566,8 @@ }; MODULE_DEVICE_TABLE (usb, cpia_id_table); +MODULE_LICENSE("GPL"); + static struct usb_driver cpia_driver = { name: "cpia", @@ -579,8 +584,10 @@ struct cam_data *cam = (struct cam_data *) ptr; struct usb_cpia *ucpia = (struct usb_cpia *) cam->lowlevel_data; - REMOVE_FROM_LIST(cam); - + spin_lock( &cam_list_lock_usb ); + cpia_remove_from_list(cam); + spin_unlock( &cam_list_lock_usb ); + /* Don't even try to reset the altsetting if we're disconnected */ cpia_usb_free_resources(ucpia, 0); @@ -620,7 +627,7 @@ static int __init usb_cpia_init(void) { cam_list = NULL; - + spin_lock_init(&cam_list_lock_usb); return usb_register(&cpia_driver); } diff -u --recursive --new-file v2.4.13/linux/drivers/media/video/meye.c linux/drivers/media/video/meye.c --- v2.4.13/linux/drivers/media/video/meye.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/media/video/meye.c Thu Oct 25 13:53:47 2001 @@ -35,6 +35,7 @@ #include #include #include +#include #include "meye.h" #include "linux/meye.h" @@ -1482,6 +1483,7 @@ MODULE_DESCRIPTION("video4linux driver for the MotionEye camera"); MODULE_LICENSE("GPL"); +EXPORT_NO_SYMBOLS; MODULE_PARM(gbuffers,"i"); MODULE_PARM_DESC(gbuffers,"number of capture buffers, default is 2 (32 max)"); diff -u --recursive --new-file v2.4.13/linux/drivers/media/video/planb.c linux/drivers/media/video/planb.c --- v2.4.13/linux/drivers/media/video/planb.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/media/video/planb.c Thu Oct 25 13:53:47 2001 @@ -64,7 +64,7 @@ #if 0 #define IDEBUG(x...) printk(KERN_DEBUG ## x) /* Debug interrupt part */ -#endif +#else #define IDEBUG(x...) /* Don't debug interrupt part */ #endif diff -u --recursive --new-file v2.4.13/linux/drivers/message/i2o/i2o_block.c linux/drivers/message/i2o/i2o_block.c --- v2.4.13/linux/drivers/message/i2o/i2o_block.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/message/i2o/i2o_block.c Thu Oct 25 13:58:35 2001 @@ -1247,7 +1247,6 @@ DEBUG("Unclaim\n"); } - MOD_DEC_USE_COUNT; return 0; } @@ -1306,7 +1305,6 @@ i2o_post_wait(dev->controller, msg, 20, 2); DEBUG("Ready.\n"); } - MOD_INC_USE_COUNT; return 0; } @@ -1371,34 +1369,34 @@ for(i=unit;i<=unit+15;i++) { - if(d->controller->type == I2O_TYPE_PCI && d->controller->bus.pci.queue_buggy) + i2ob_max_sectors[i] = 256; + i2ob_dev[i].max_segments = (d->controller->status_block->inbound_frame_size - 8)/2; + + if(d->controller->type == I2O_TYPE_PCI && d->controller->bus.pci.queue_buggy == 2) + i2ob_dev[i].depth = 32; + + if(d->controller->type == I2O_TYPE_PCI && d->controller->bus.pci.queue_buggy == 1) { i2ob_max_sectors[i] = 32; i2ob_dev[i].max_segments = 8; i2ob_dev[i].depth = 4; } - else if(d->controller->type == I2O_TYPE_PCI && d->controller->bus.pci.short_req) + + if(d->controller->type == I2O_TYPE_PCI && d->controller->bus.pci.short_req) { i2ob_max_sectors[i] = 8; i2ob_dev[i].max_segments = 8; } - else - { - /* MAX_SECTORS was used but 255 is a dumb number for - striped RAID */ - i2ob_max_sectors[i]=256; - i2ob_dev[i].max_segments = (d->controller->status_block->inbound_frame_size - 8)/2; - } } - printk(KERN_INFO "Max segments set to %d\n", - i2ob_dev[unit].max_segments); - printk(KERN_INFO "Byte limit is %d.\n", limit); - i2ob_query_device(dev, 0x0000, 0, &type, 1); - sprintf(d->dev_name, "%s%c", i2ob_gendisk.major_name, 'a' + (unit>>4)); + printk(KERN_INFO "%s: Max segments %d, queue depth %d, byte limit %d.\n", + d->dev_name, i2ob_dev[unit].max_segments, i2ob_dev[unit].depth, limit); + + i2ob_query_device(dev, 0x0000, 0, &type, 1); + printk(KERN_INFO "%s: ", d->dev_name); switch(type) { @@ -1417,7 +1415,7 @@ printk(KERN_INFO " Not loaded.\n"); return 1; } - printk("- %dMb, %d byte sectors", + printk(": %dMB, %d byte sectors", (int)(size>>20), blocksize); if(status&(1<<0)) { @@ -1838,6 +1836,7 @@ static struct block_device_operations i2ob_fops = { + owner: THIS_MODULE, open: i2ob_open, release: i2ob_release, ioctl: i2ob_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/message/i2o/i2o_pci.c linux/drivers/message/i2o/i2o_pci.c --- v2.4.13/linux/drivers/message/i2o/i2o_pci.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/message/i2o/i2o_pci.c Thu Oct 25 13:53:47 2001 @@ -192,6 +192,8 @@ if(dev->subsystem_vendor == PCI_VENDOR_ID_PROMISE) { c->bus.pci.queue_buggy=1; + if (dev->subsystem_device == 0x0000) /* SX6000 ???? */ + c->bus.pci.queue_buggy=2; printk(KERN_INFO "I2O: Promise workarounds activated.\n"); } diff -u --recursive --new-file v2.4.13/linux/drivers/message/i2o/i2o_proc.c linux/drivers/message/i2o/i2o_proc.c --- v2.4.13/linux/drivers/message/i2o/i2o_proc.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/message/i2o/i2o_proc.c Thu Oct 25 13:53:47 2001 @@ -955,13 +955,14 @@ i2o_driver_result_table *result; i2o_driver_store_table *dst; - spin_lock(&i2o_proc_lock); len = 0; result = kmalloc(sizeof(i2o_driver_result_table), GFP_KERNEL); if(result == NULL) return -ENOMEM; + + spin_lock(&i2o_proc_lock); token = i2o_query_table(I2O_PARAMS_TABLE_GET, c, ADAPTER_TID, 0x0005, -1, NULL, 0, diff -u --recursive --new-file v2.4.13/linux/drivers/mtd/chips/cfi_cmdset_0002.c linux/drivers/mtd/chips/cfi_cmdset_0002.c --- v2.4.13/linux/drivers/mtd/chips/cfi_cmdset_0002.c Tue Oct 9 17:06:51 2001 +++ linux/drivers/mtd/chips/cfi_cmdset_0002.c Thu Oct 25 00:07:09 2001 @@ -8,7 +8,7 @@ * * This code is GPL * - * $Id: cfi_cmdset_0002.c,v 1.51 2001/10/02 15:05:12 dwmw2 Exp $ + * $Id: cfi_cmdset_0002.c,v 1.52 2001/10/24 09:37:30 dwmw2 Exp $ * */ @@ -66,7 +66,7 @@ major = cfi_read_query(map, base + (adr+3)*ofs_factor); minor = cfi_read_query(map, base + (adr+4)*ofs_factor); - printk(" Amd/Fujitsu Extended Query Table v%c.%c at 0x%4.4X\n", + printk(KERN_NOTICE " Amd/Fujitsu Extended Query Table v%c.%c at 0x%4.4X\n", major, minor, adr); cfi_send_gen_cmd(0xf0, 0x55, base, map, cfi, cfi->device_type, NULL); @@ -148,10 +148,10 @@ unsigned long devsize = (1<cfiq->DevSize) * cfi->interleave; mtd = kmalloc(sizeof(*mtd), GFP_KERNEL); - printk("number of %s chips: %d\n", (cfi->cfi_mode)?"JEDEC":"CFI",cfi->numchips); + printk(KERN_NOTICE "number of %s chips: %d\n", (cfi->cfi_mode)?"CFI":"JEDEC",cfi->numchips); if (!mtd) { - printk("Failed to allocate memory for MTD device\n"); + printk(KERN_WARNING "Failed to allocate memory for MTD device\n"); kfree(cfi->cmdset_priv); return NULL; } @@ -172,7 +172,7 @@ mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips; mtd->eraseregions = kmalloc(sizeof(struct mtd_erase_region_info) * mtd->numeraseregions, GFP_KERNEL); if (!mtd->eraseregions) { - printk("Failed to allocate memory for MTD erase region info\n"); + printk(KERN_WARNING "Failed to allocate memory for MTD erase region info\n"); kfree(cfi->cmdset_priv); return NULL; } @@ -194,11 +194,12 @@ } if (offset != devsize) { /* Argh */ - printk("Sum of regions (%lx) != total size of set of interleaved chips (%lx)\n", offset, devsize); + printk(KERN_WARNING "Sum of regions (%lx) != total size of set of interleaved chips (%lx)\n", offset, devsize); kfree(mtd->eraseregions); kfree(cfi->cmdset_priv); return NULL; } +#if 0 // debug for (i=0; inumeraseregions;i++){ printk("%d: offset=0x%x,size=0x%x,blocks=%d\n", @@ -206,6 +207,7 @@ mtd->eraseregions[i].erasesize, mtd->eraseregions[i].numblocks); } +#endif } switch (CFIDEV_BUSWIDTH) @@ -224,7 +226,7 @@ break; default: - printk("Unsupported buswidth\n"); + printk(KERN_WARNING "Unsupported buswidth\n"); kfree(mtd); kfree(cfi->cmdset_priv); return NULL; @@ -249,7 +251,9 @@ cfi_spin_lock(chip->mutex); if (chip->state != FL_READY){ - printk("Waiting for chip to read, status = %d\n", chip->state); +#if 0 + printk(KERN_DEBUG "Waiting for chip to read, status = %d\n", chip->state); +#endif set_current_state(TASK_UNINTERRUPTIBLE); add_wait_queue(&chip->wq, &wait); @@ -332,7 +336,9 @@ cfi_spin_lock(chip->mutex); if (chip->state != FL_READY){ - printk("Waiting for chip to write, status = %d\n", chip->state); +#if 0 + printk(KERN_DEBUG "Waiting for chip to write, status = %d\n", chip->state); +#endif set_current_state(TASK_UNINTERRUPTIBLE); add_wait_queue(&chip->wq, &wait); @@ -340,8 +346,8 @@ schedule(); remove_wait_queue(&chip->wq, &wait); - printk("Wake up to write:\n"); #if 0 + printk(KERN_DEBUG "Wake up to write:\n"); if(signal_pending(current)) return -EINTR; #endif @@ -386,7 +392,7 @@ } if (Last[(Count - 1) % 4] != datum){ - printk("Last[%ld] is %x, datum is %x\n",(Count - 1) % 4,Last[(Count - 1) % 4],datum); + printk(KERN_WARNING "Last[%ld] is %x, datum is %x\n",(Count - 1) % 4,Last[(Count - 1) % 4],datum); cfi_send_gen_cmd(0xF0, 0, chip->start, map, cfi, cfi->device_type, NULL); DISABLE_VPP(map); ret = -EIO; @@ -600,7 +606,7 @@ add_wait_queue(&chip->wq, &wait); cfi_spin_unlock(chip->mutex); - printk("erase suspended. Sleeping\n"); + printk(KERN_DEBUG "erase suspended. Sleeping\n"); schedule(); remove_wait_queue(&chip->wq, &wait); @@ -617,7 +623,7 @@ if (time_after(jiffies, timeo)) { chip->state = FL_READY; cfi_spin_unlock(chip->mutex); - printk("waiting for erase to complete timed out."); + printk(KERN_WARNING "waiting for erase to complete timed out."); DISABLE_VPP(map); return -EIO; } @@ -627,7 +633,7 @@ z++; if ( 0 && !(z % 100 )) - printk("chip not ready yet after erase. looping\n"); + printk(KERN_WARNING "chip not ready yet after erase. looping\n"); cfi_udelay(1); @@ -914,7 +920,7 @@ wake_up(&chip->wq); } else - printk("Argh. Chip not in PM_SUSPENDED state upon resume()\n"); + printk(KERN_ERR "Argh. Chip not in PM_SUSPENDED state upon resume()\n"); cfi_spin_unlock(chip->mutex); } diff -u --recursive --new-file v2.4.13/linux/drivers/mtd/ftl.c linux/drivers/mtd/ftl.c --- v2.4.13/linux/drivers/mtd/ftl.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/mtd/ftl.c Thu Oct 25 13:58:35 2001 @@ -235,6 +235,7 @@ }; #else static struct block_device_operations ftl_blk_fops = { + owner: THIS_MODULE, open: ftl_open, release: ftl_close, ioctl: ftl_ioctl, @@ -894,16 +895,11 @@ if (ftl_gendisk.part[minor].nr_sects == 0) return -ENXIO; - MOD_INC_USE_COUNT; - - if (!get_mtd_device(partition->mtd, -1)) { - MOD_DEC_USE_COUNT; + if (!get_mtd_device(partition->mtd, -1)) return /* -E'SBUGGEREDOFF */ -ENXIO; - } - + if ((file->f_mode & 2) && !(partition->mtd->flags & MTD_CLEAR_BITS) ) { put_mtd_device(partition->mtd); - MOD_DEC_USE_COUNT; return -EROFS; } @@ -939,7 +935,6 @@ atomic_dec(&part->open); put_mtd_device(part->mtd); - MOD_DEC_USE_COUNT; release_return(0); } /* ftl_close */ diff -u --recursive --new-file v2.4.13/linux/drivers/mtd/mtdblock.c linux/drivers/mtd/mtdblock.c --- v2.4.13/linux/drivers/mtd/mtdblock.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/mtd/mtdblock.c Thu Oct 25 13:58:35 2001 @@ -295,8 +295,6 @@ return -ENODEV; } - MOD_INC_USE_COUNT; - spin_lock(&mtdblks_lock); /* If it's already open, no need to piss about. */ @@ -316,7 +314,6 @@ mtdblk = kmalloc(sizeof(struct mtdblk_dev), GFP_KERNEL); if (!mtdblk) { put_mtd_device(mtd); - MOD_DEC_USE_COUNT; return -ENOMEM; } memset(mtdblk, 0, sizeof(*mtdblk)); @@ -332,7 +329,6 @@ if (!mtdblk->cache_data) { put_mtd_device(mtdblk->mtd); kfree(mtdblk); - MOD_DEC_USE_COUNT; return -ENOMEM; } } @@ -400,7 +396,6 @@ DEBUG(MTD_DEBUG_LEVEL1, "ok\n"); - MOD_DEC_USE_COUNT; release_return(0); } @@ -574,6 +569,7 @@ #else static struct block_device_operations mtd_fops = { + owner: THIS_MODULE, open: mtdblock_open, release: mtdblock_release, ioctl: mtdblock_ioctl diff -u --recursive --new-file v2.4.13/linux/drivers/mtd/mtdblock_ro.c linux/drivers/mtd/mtdblock_ro.c --- v2.4.13/linux/drivers/mtd/mtdblock_ro.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/mtd/mtdblock_ro.c Thu Oct 25 13:58:35 2001 @@ -62,8 +62,6 @@ return -EINVAL; } - MOD_INC_USE_COUNT; - mtd_sizes[dev] = mtd->size>>9; DEBUG(1, "ok\n"); @@ -88,7 +86,6 @@ if (!mtd) { printk(KERN_WARNING "MTD device is absent on mtd_release!\n"); - MOD_DEC_USE_COUNT; release_return(-ENODEV); } @@ -99,7 +96,6 @@ DEBUG(1, "ok\n"); - MOD_DEC_USE_COUNT; release_return(0); } @@ -244,6 +240,7 @@ #else static struct block_device_operations mtd_fops = { + owner: THIS_MODULE, open: mtdblock_open, release: mtdblock_release, ioctl: mtdblock_ioctl diff -u --recursive --new-file v2.4.13/linux/drivers/mtd/nftlcore.c linux/drivers/mtd/nftlcore.c --- v2.4.13/linux/drivers/mtd/nftlcore.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/mtd/nftlcore.c Thu Oct 25 13:58:35 2001 @@ -984,11 +984,8 @@ #endif /* !CONFIG_NFTL_RW */ thisNFTL->usecount++; - MOD_INC_USE_COUNT; - if (!get_mtd_device(thisNFTL->mtd, -1)) { - MOD_DEC_USE_COUNT; + if (!get_mtd_device(thisNFTL->mtd, -1)) return /* -E'SBUGGEREDOFF */ -ENXIO; - } return 0; } @@ -1006,7 +1003,6 @@ if (thisNFTL->mtd->sync) thisNFTL->mtd->sync(thisNFTL->mtd); thisNFTL->usecount--; - MOD_DEC_USE_COUNT; put_mtd_device(thisNFTL->mtd); @@ -1024,6 +1020,7 @@ #else static struct block_device_operations nftl_fops = { + owner: THIS_MODULE, open: nftl_open, release: nftl_release, ioctl: nftl_ioctl diff -u --recursive --new-file v2.4.13/linux/drivers/net/8139cp.c linux/drivers/net/8139cp.c --- v2.4.13/linux/drivers/net/8139cp.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/net/8139cp.c Thu Oct 25 14:01:51 2001 @@ -17,23 +17,24 @@ See the file COPYING in this distribution for more information. - TODO: + TODO, in rough priority order: * dev->tx_timeout + * LinkChg interrupt + * ETHTOOL_[GS]SET + * Support forcing media type with a module parameter, + like dl2k.c/sundance.c + * Implement PCI suspend/resume * Constants (module parms?) for Rx work limit * support 64-bit PCI DMA - * ETHTOOL_[GS]SET, ETHTOOL_GREGS, ETHTOOL_[GS]WOL, - ETHTOOL_[GS]MSGLVL, ETHTOOL_NWAY_RST * Complete reset on PciErr - * LinkChg and LenChg interrupts * Consider Rx interrupt mitigation using TimerIntr - * Implement 8139C+ statistics dump - * Support forcing media type with a module parameter, - like dl2k.c/sundance.c + * Implement 8139C+ statistics dump; maybe not... + h/w stats can be reset only by software reset * Rx checksumming * Tx checksumming + * ETHTOOL_GREGS, ETHTOOL_[GS]WOL, + ETHTOOL_[GS]MSGLVL, ETHTOOL_NWAY_RST * Jumbo frames / dev->change_mtu - * Tx abort stops Tx DMA? - * Investigate IntrStatus bit 10 purpose and use * Investigate using skb->priority with h/w VLAN priority * Investigate using High Priority Tx Queue with skb->priority * Adjust Rx FIFO threshold and Max Rx DMA burst on Rx FIFO error diff -u --recursive --new-file v2.4.13/linux/drivers/net/acenic.c linux/drivers/net/acenic.c --- v2.4.13/linux/drivers/net/acenic.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/net/acenic.c Wed Oct 24 14:02:56 2001 @@ -1051,7 +1051,8 @@ struct ace_private *ap; struct ace_regs *regs; struct ace_info *info = NULL; - unsigned long tmp_ptr, myjif; + u64 tmp_ptr; + unsigned long myjif; u32 tig_ver, mac1, mac2, tmp, pci_state; int board_idx, ecode = 0; short i; diff -u --recursive --new-file v2.4.13/linux/drivers/net/arcnet/arc-rimi.c linux/drivers/net/arcnet/arc-rimi.c --- v2.4.13/linux/drivers/net/arcnet/arc-rimi.c Tue Feb 13 13:15:05 2001 +++ linux/drivers/net/arcnet/arc-rimi.c Sun Nov 4 09:31:58 2001 @@ -2,7 +2,7 @@ * Linux ARCnet driver - "RIM I" (entirely mem-mapped) cards * * Written 1994-1999 by Avery Pennarun. - * Written 1999-2000 by Martin Mares . + * Written 1999-2000 by Martin Mares . * Derived from skeleton.c by Donald Becker. * * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) diff -u --recursive --new-file v2.4.13/linux/drivers/net/arcnet/arcnet.c linux/drivers/net/arcnet/arcnet.c --- v2.4.13/linux/drivers/net/arcnet/arcnet.c Wed Apr 18 14:40:06 2001 +++ linux/drivers/net/arcnet/arcnet.c Sun Nov 4 09:31:58 2001 @@ -3,7 +3,7 @@ * * Written 1997 by David Woodhouse. * Written 1994-1999 by Avery Pennarun. - * Written 1999-2000 by Martin Mares . + * Written 1999-2000 by Martin Mares . * Derived from skeleton.c by Donald Becker. * * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) diff -u --recursive --new-file v2.4.13/linux/drivers/net/arcnet/com20020-isa.c linux/drivers/net/arcnet/com20020-isa.c --- v2.4.13/linux/drivers/net/arcnet/com20020-isa.c Tue Feb 13 13:15:05 2001 +++ linux/drivers/net/arcnet/com20020-isa.c Sun Nov 4 09:31:58 2001 @@ -3,7 +3,7 @@ * * Written 1997 by David Woodhouse. * Written 1994-1999 by Avery Pennarun. - * Written 1999-2000 by Martin Mares . + * Written 1999-2000 by Martin Mares . * Derived from skeleton.c by Donald Becker. * * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) diff -u --recursive --new-file v2.4.13/linux/drivers/net/arcnet/com20020-pci.c linux/drivers/net/arcnet/com20020-pci.c --- v2.4.13/linux/drivers/net/arcnet/com20020-pci.c Wed Apr 18 14:40:05 2001 +++ linux/drivers/net/arcnet/com20020-pci.c Sun Nov 4 09:31:58 2001 @@ -3,7 +3,7 @@ * * Written 1994-1999 by Avery Pennarun, * based on an ISA version by David Woodhouse. - * Written 1999-2000 by Martin Mares . + * Written 1999-2000 by Martin Mares . * Derived from skeleton.c by Donald Becker. * * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) diff -u --recursive --new-file v2.4.13/linux/drivers/net/arcnet/com20020.c linux/drivers/net/arcnet/com20020.c --- v2.4.13/linux/drivers/net/arcnet/com20020.c Tue Feb 13 13:15:05 2001 +++ linux/drivers/net/arcnet/com20020.c Sun Nov 4 09:31:58 2001 @@ -3,7 +3,7 @@ * * Written 1997 by David Woodhouse. * Written 1994-1999 by Avery Pennarun. - * Written 1999 by Martin Mares . + * Written 1999 by Martin Mares . * Derived from skeleton.c by Donald Becker. * * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) diff -u --recursive --new-file v2.4.13/linux/drivers/net/arcnet/com90io.c linux/drivers/net/arcnet/com90io.c --- v2.4.13/linux/drivers/net/arcnet/com90io.c Wed Apr 18 14:40:05 2001 +++ linux/drivers/net/arcnet/com90io.c Sun Nov 4 09:31:58 2001 @@ -3,7 +3,7 @@ * * Written 1997 by David Woodhouse. * Written 1994-1999 by Avery Pennarun. - * Written 1999-2000 by Martin Mares . + * Written 1999-2000 by Martin Mares . * Derived from skeleton.c by Donald Becker. * * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) diff -u --recursive --new-file v2.4.13/linux/drivers/net/arcnet/com90xx.c linux/drivers/net/arcnet/com90xx.c --- v2.4.13/linux/drivers/net/arcnet/com90xx.c Wed Apr 18 14:40:05 2001 +++ linux/drivers/net/arcnet/com90xx.c Sun Nov 4 09:31:58 2001 @@ -2,7 +2,7 @@ * Linux ARCnet driver - COM90xx chipset (memory-mapped buffers) * * Written 1994-1999 by Avery Pennarun. - * Written 1999 by Martin Mares . + * Written 1999 by Martin Mares . * Derived from skeleton.c by Donald Becker. * * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) diff -u --recursive --new-file v2.4.13/linux/drivers/net/hamradio/scc.c linux/drivers/net/hamradio/scc.c --- v2.4.13/linux/drivers/net/hamradio/scc.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/net/hamradio/scc.c Thu Oct 25 13:58:15 2001 @@ -1,3 +1,5 @@ +#define RCS_ID "$Id: scc.c,v 1.75 1998/11/04 15:15:01 jreuter Exp jreuter $" + #define VERSION "3.0" /* @@ -16,7 +18,7 @@ ******************************************************************** - Copyright (c) 1993, 2001 Joerg Reuter DL1BKE + Copyright (c) 1993, 2000 Joerg Reuter DL1BKE portions (c) 1993 Guido ten Dolle PE1NNZ @@ -104,10 +106,6 @@ 2000-02-13 Fixed for new network driver interface changes, still does TX timeouts itself since it uses its own queue scheme. - 2001-10-05 Set skb to NULL on Rx_OVR in scc_spint() (tnx everybody - who insisted that the skb gets in fact re-used by the - following code otherwise. I think we have another Z8530 - bug here...) Thanks to all who contributed to this driver with ideas and bug reports! @@ -585,7 +583,6 @@ if (skb != NULL) dev_kfree_skb_irq(skb); scc->rx_buff = skb = NULL; - skb = NULL; /* avoid skb being reused */ } if(status & END_FR && skb != NULL) /* end of frame */ diff -u --recursive --new-file v2.4.13/linux/drivers/net/irda/Config.in linux/drivers/net/irda/Config.in --- v2.4.13/linux/drivers/net/irda/Config.in Mon Aug 27 12:41:42 2001 +++ linux/drivers/net/irda/Config.in Thu Oct 25 13:53:47 2001 @@ -14,6 +14,9 @@ dep_tristate ' Greenwich GIrBIL dongle' CONFIG_GIRBIL_DONGLE $CONFIG_IRDA dep_tristate ' Parallax LiteLink dongle' CONFIG_LITELINK_DONGLE $CONFIG_IRDA dep_tristate ' Old Belkin dongle' CONFIG_OLD_BELKIN_DONGLE $CONFIG_IRDA + if [ "$CONFIG_ARCH_EP7211" = "y" ]; then + dep_tristate ' EP7211 I/R support' CONFIG_EP7211_IR $CONFIG_IRDA + fi fi comment 'FIR device drivers' @@ -25,6 +28,9 @@ dep_tristate 'SMC IrCC (Experimental)' CONFIG_SMC_IRCC_FIR $CONFIG_IRDA dep_tristate 'ALi M5123 FIR (Experimental)' CONFIG_ALI_FIR $CONFIG_IRDA dep_tristate 'VLSI 82C147 SIR/MIR/FIR (Experimental)' CONFIG_VLSI_FIR $CONFIG_IRDA +fi +if [ "$CONFIG_ARCH_SA1100" = "y" ]; then + dep_tristate 'SA1100 Internal IR' CONFIG_SA1100_FIR $CONFIG_IRDA fi endmenu diff -u --recursive --new-file v2.4.13/linux/drivers/net/irda/Makefile linux/drivers/net/irda/Makefile --- v2.4.13/linux/drivers/net/irda/Makefile Mon Aug 27 12:41:42 2001 +++ linux/drivers/net/irda/Makefile Thu Oct 25 13:53:47 2001 @@ -1,3 +1,4 @@ +# File: drivers/irda/Makefile # # Makefile for the Linux IrDA infrared port device drivers. # @@ -15,6 +16,7 @@ obj-$(CONFIG_USB_IRDA) += irda-usb.o obj-$(CONFIG_NSC_FIR) += nsc-ircc.o obj-$(CONFIG_WINBOND_FIR) += w83977af_ir.o +obj-$(CONFIG_SA1100_FIR) += sa1100_ir.o obj-$(CONFIG_TOSHIBA_FIR) += toshoboe.o obj-$(CONFIG_SMC_IRCC_FIR) += smc-ircc.o irport.o obj-$(CONFIG_ALI_FIR) += ali-ircc.o @@ -25,5 +27,6 @@ obj-$(CONFIG_GIRBIL_DONGLE) += girbil.o obj-$(CONFIG_LITELINK_DONGLE) += litelink.o obj-$(CONFIG_OLD_BELKIN_DONGLE) += old_belkin.o +obj-$(CONFIG_EP7211_IR) += ep7211_ir.o include $(TOPDIR)/Rules.make diff -u --recursive --new-file v2.4.13/linux/drivers/net/irda/ep7211_ir.c linux/drivers/net/irda/ep7211_ir.c --- v2.4.13/linux/drivers/net/irda/ep7211_ir.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/net/irda/ep7211_ir.c Thu Oct 25 13:53:47 2001 @@ -0,0 +1,129 @@ +/* + * IR port driver for the Cirrus Logic EP7211 processor. + * + * Copyright 2001, Blue Mug Inc. All rights reserved. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#define MIN_DELAY 25 /* 15 us, but wait a little more to be sure */ +#define MAX_DELAY 10000 /* 1 ms */ + +static void ep7211_ir_open(dongle_t *self, struct qos_info *qos); +static void ep7211_ir_close(dongle_t *self); +static int ep7211_ir_change_speed(struct irda_task *task); +static int ep7211_ir_reset(struct irda_task *task); + +static struct dongle_reg dongle = { + Q_NULL, + IRDA_EP7211_IR, + ep7211_ir_open, + ep7211_ir_close, + ep7211_ir_reset, + ep7211_ir_change_speed, +}; + +static void ep7211_ir_open(dongle_t *self, struct qos_info *qos) +{ + unsigned int syscon1, flags; + + save_flags(flags); cli(); + + /* Turn on the SIR encoder. */ + syscon1 = clps_readl(SYSCON1); + syscon1 |= SYSCON1_SIREN; + clps_writel(syscon1, SYSCON1); + + /* XXX: We should disable modem status interrupts on the first + UART (interrupt #14). */ + + restore_flags(flags); + + MOD_INC_USE_COUNT; +} + +static void ep7211_ir_close(dongle_t *self) +{ + unsigned int syscon1, flags; + + save_flags(flags); cli(); + + /* Turn off the SIR encoder. */ + syscon1 = clps_readl(SYSCON1); + syscon1 &= ~SYSCON1_SIREN; + clps_writel(syscon1, SYSCON1); + + /* XXX: If we've disabled the modem status interrupts, we should + reset them back to their original state. */ + + restore_flags(flags); + + MOD_DEC_USE_COUNT; +} + +/* + * Function ep7211_ir_change_speed (task) + * + * Change speed of the EP7211 I/R port. We don't really have to do anything + * for the EP7211 as long as the rate is being changed at the serial port + * level. + */ +static int ep7211_ir_change_speed(struct irda_task *task) +{ + irda_task_next_state(task, IRDA_TASK_DONE); + return 0; +} + +/* + * Function ep7211_ir_reset (task) + * + * Reset the EP7211 I/R. We don't really have to do anything. + * + */ +static int ep7211_ir_reset(struct irda_task *task) +{ + irda_task_next_state(task, IRDA_TASK_DONE); + return 0; +} + +/* + * Function ep7211_ir_init(void) + * + * Initialize EP7211 I/R module + * + */ +int __init ep7211_ir_init(void) +{ + return irda_device_register_dongle(&dongle); +} + +/* + * Function ep7211_ir_cleanup(void) + * + * Cleanup EP7211 I/R module + * + */ +static void __exit ep7211_ir_cleanup(void) +{ + irda_device_unregister_dongle(&dongle); +} + +MODULE_AUTHOR("Jon McClintock "); +MODULE_DESCRIPTION("EP7211 I/R driver"); +MODULE_LICENSE("GPL"); + +#ifdef MODULE +module_init(ep7211_ir_init); +#endif /* MODULE */ +module_exit(ep7211_ir_cleanup); diff -u --recursive --new-file v2.4.13/linux/drivers/net/irda/sa1100_ir.c linux/drivers/net/irda/sa1100_ir.c --- v2.4.13/linux/drivers/net/irda/sa1100_ir.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/net/irda/sa1100_ir.c Thu Oct 25 13:53:47 2001 @@ -0,0 +1,1163 @@ +/* + * linux/drivers/net/irda/sa1100_ir.c + * + * Copyright (C) 2000-2001 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Infra-red driver for the StrongARM SA1100 embedded microprocessor + * + * Note that we don't have to worry about the SA1111's DMA bugs in here, + * so we use the straight forward pci_map_* functions with a null pointer. + * IMHO we should really be using our own machine specific set. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#ifndef CONFIG_SA1100_H3600 +#define clr_h3600_egpio(x) do { } while (0) +#define set_h3600_egpio(x) do { } while (0) +#endif + +#ifndef GPIO_IRDA_FIR +#define GPIO_IRDA_FIR (0) +#endif + +#ifndef GPIO_IRDA_POWER +#define GPIO_IRDA_POWER (0) +#endif + +static int power_level = 3; +static int tx_lpm = 0; + +/* + * Our netdevice. There is only ever one of these. + */ +static struct net_device *netdev; + +struct sa1100_irda { + unsigned char hscr0; + unsigned char utcr4; + unsigned char power; + unsigned char open; + + int speed; + int newspeed; + + struct sk_buff *txskb; + struct sk_buff *rxskb; + dma_addr_t txbuf_dma; + dma_addr_t rxbuf_dma; + int txdma; + int rxdma; + + struct net_device_stats stats; + struct irlap_cb *irlap; + struct pm_dev *pmdev; + struct qos_info qos; + + iobuff_t tx_buff; + iobuff_t rx_buff; +}; + +#define IS_FIR(si) ((si)->speed >= 4000000) + +#define HPSIR_MAX_RXLEN 2047 + +/* + * Allocate and map the receive buffer, unless it is already allocated. + */ +static int sa1100_irda_rx_alloc(struct sa1100_irda *si) +{ + if (si->rxskb) + return 0; + + si->rxskb = alloc_skb(HPSIR_MAX_RXLEN + 1, GFP_ATOMIC); + + if (!si->rxskb) { + printk(KERN_ERR "sa1100_ir: out of memory for RX SKB\n"); + return -ENOMEM; + } + + /* + * Align any IP headers that may be contained + * within the frame. + */ + skb_reserve(si->rxskb, 1); + + si->rxbuf_dma = pci_map_single(NULL, si->rxskb->data, + HPSIR_MAX_RXLEN, + PCI_DMA_FROMDEVICE); + return 0; +} + +/* + * We want to get here as soon as possible, and get the receiver setup. + * We use the existing buffer. + */ +static void sa1100_irda_rx_dma_start(struct sa1100_irda *si) +{ + if (!si->rxskb) { + printk(KERN_ERR "sa1100_ir: rx buffer went missing\n"); + return; + } + + /* + * First empty receive FIFO + */ + Ser2HSCR0 = si->hscr0 | HSCR0_HSSP; + + /* + * Enable the DMA, receiver and recieve interrupt. + */ + sa1100_dma_flush_all(si->rxdma); + sa1100_dma_queue_buffer(si->rxdma, NULL, si->rxbuf_dma, HPSIR_MAX_RXLEN); + Ser2HSCR0 = si->hscr0 | HSCR0_HSSP | HSCR0_RXE; +} + +/* + * Set the IrDA communications speed. + */ +static int sa1100_irda_set_speed(struct sa1100_irda *si, int speed) +{ + unsigned long flags; + int brd, ret = -EINVAL; + + switch (speed) { + case 9600: case 19200: case 38400: + case 57600: case 115200: + brd = 3686400 / (16 * speed) - 1; + + /* + * Stop the receive DMA. + */ + if (IS_FIR(si)) + sa1100_dma_stop(si->rxdma); + + local_irq_save(flags); + + Ser2UTCR3 = 0; + Ser2HSCR0 = HSCR0_UART; + + Ser2UTCR1 = brd >> 8; + Ser2UTCR2 = brd; + + /* + * Clear status register + */ + Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID; + Ser2UTCR3 = UTCR3_RIE | UTCR3_RXE | UTCR3_TXE; + + if (machine_is_assabet()) + ASSABET_BCR_clear(ASSABET_BCR_IRDA_FSEL); + if (machine_is_h3600()) + clr_h3600_egpio(EGPIO_H3600_IR_FSEL); + if (machine_is_yopy()) + PPSR &= ~GPIO_IRDA_FIR; + + si->speed = speed; + + local_irq_restore(flags); + ret = 0; + break; + + case 4000000: + save_flags(flags); + cli(); + + si->hscr0 = 0; + + Ser2HSSR0 = 0xff; + Ser2HSCR0 = si->hscr0 | HSCR0_HSSP; + Ser2UTCR3 = 0; + + si->speed = speed; + + if (machine_is_assabet()) + ASSABET_BCR_set(ASSABET_BCR_IRDA_FSEL); + if (machine_is_h3600()) + set_h3600_egpio(EGPIO_H3600_IR_FSEL); + if (machine_is_yopy()) + PPSR |= GPIO_IRDA_FIR; + + sa1100_irda_rx_alloc(si); + sa1100_irda_rx_dma_start(si); + + restore_flags(flags); + + break; + + default: + break; + } + + return ret; +} + +/* + * This sets the IRDA power level on the Assabet. + */ +static inline int +sa1100_irda_set_power_assabet(struct sa1100_irda *si, unsigned int state) +{ + static unsigned int bcr_state[4] = { + ASSABET_BCR_IRDA_MD0, + ASSABET_BCR_IRDA_MD1|ASSABET_BCR_IRDA_MD0, + ASSABET_BCR_IRDA_MD1, + 0 + }; + + if (state < 4) { + state = bcr_state[state]; + ASSABET_BCR_clear(state ^ (ASSABET_BCR_IRDA_MD1| + ASSABET_BCR_IRDA_MD0)); + ASSABET_BCR_set(state); + } + return 0; +} + +/* + * This turns the IRDA power on or off on the Compaq H3600 + */ +static inline int +sa1100_irda_set_power_h3600(struct sa1100_irda *si, unsigned int state) +{ + if (state) + set_h3600_egpio(EGPIO_H3600_IR_ON); + else + clr_h3600_egpio(EGPIO_H3600_IR_ON); + return 0; +} + +/* + * This turns the IRDA power on or off on the Yopy + */ +static inline int +sa1100_irda_set_power_yopy(struct sa1100_irda *si, unsigned int state) +{ + if (state) + PPSR &= ~GPIO_IRDA_POWER; + else + PPSR |= GPIO_IRDA_POWER; + return 0; +} + +/* + * Control the power state of the IrDA transmitter. + * State: + * 0 - off + * 1 - short range, lowest power + * 2 - medium range, medium power + * 3 - maximum range, high power + * + * Currently, only assabet is known to support this. + */ +static int +__sa1100_irda_set_power(struct sa1100_irda *si, unsigned int state) +{ + int ret = 0; + + if (machine_is_assabet()) + ret = sa1100_irda_set_power_assabet(si, state); + if (machine_is_h3600()) + ret = sa1100_irda_set_power_h3600(si, state); + if (machine_is_yopy()) + ret = sa1100_irda_set_power_yopy(si, state); + + return ret; +} + +static inline int +sa1100_set_power(struct sa1100_irda *si, unsigned int state) +{ + int ret; + + ret = __sa1100_irda_set_power(si, state); + if (ret == 0) + si->power = state; + + return ret; +} + +static int sa1100_irda_startup(struct sa1100_irda *si) +{ + int ret; + + /* + * Ensure that the ports for this device are setup correctly. + */ + if (machine_is_yopy()) { + PPDR |= GPIO_IRDA_POWER | GPIO_IRDA_FIR; + PPSR |= GPIO_IRDA_POWER | GPIO_IRDA_FIR; + PSDR |= GPIO_IRDA_POWER | GPIO_IRDA_FIR; + } + + /* + * Configure PPC for IRDA - we want to drive TXD2 low. + * We also want to drive this pin low during sleep. + */ + PPSR &= ~PPC_TXD2; + PSDR &= ~PPC_TXD2; + PPDR |= PPC_TXD2; + + /* + * Enable HP-SIR modulation, and ensure that the port is disabled. + */ + Ser2UTCR3 = 0; + Ser2HSCR0 = HSCR0_UART; + Ser2UTCR4 = si->utcr4; + Ser2UTCR0 = UTCR0_8BitData; + Ser2HSCR2 = HSCR2_TrDataH | HSCR2_RcDataL; + + /* + * Clear status register + */ + Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID; + + ret = sa1100_irda_set_speed(si, si->speed = 9600); + if (ret) + return ret; + + return 0; +} + +static void sa1100_irda_shutdown(struct sa1100_irda *si) +{ + /* + * Stop all DMA activity. + */ + sa1100_dma_stop(si->rxdma); + sa1100_dma_stop(si->txdma); + + /* Disable the port. */ + Ser2UTCR3 = 0; + Ser2HSCR0 = 0; +} + +#ifdef CONFIG_PM +/* + * Suspend the IrDA interface. + */ +static int sa1100_irda_suspend(struct net_device *dev, int state) +{ + struct sa1100_irda *si = dev->priv; + + if (si && si->open) { + /* + * Stop the transmit queue + */ + netif_device_detach(dev); + disable_irq(dev->irq); + sa1100_irda_shutdown(si); + __sa1100_irda_set_power(si, 0); + } + + return 0; +} + +/* + * Resume the IrDA interface. + */ +static int sa1100_irda_resume(struct net_device *dev) +{ + struct sa1100_irda *si = dev->priv; + + if (si && si->open) { + /* + * If we missed a speed change, initialise at the new speed + * directly. It is debatable whether this is actually + * required, but in the interests of continuing from where + * we left off it is desireable. The converse argument is + * that we should re-negotiate at 9600 baud again. + */ + if (si->newspeed) { + si->speed = si->newspeed; + si->newspeed = 0; + } + + sa1100_irda_startup(si); + __sa1100_irda_set_power(si, si->power); + enable_irq(dev->irq); + + /* + * This automatically wakes up the queue + */ + netif_device_attach(dev); + } + + return 0; +} + +static int sa1100_irda_pmproc(struct pm_dev *dev, pm_request_t rqst, void *data) +{ + int ret; + + if (!dev->data) + return -EINVAL; + + switch (rqst) { + case PM_SUSPEND: + ret = sa1100_irda_suspend((struct net_device *)dev->data, + (int)data); + break; + + case PM_RESUME: + ret = sa1100_irda_resume((struct net_device *)dev->data); + break; + + default: + ret = -EINVAL; + break; + } + + return ret; +} +#endif + +/* + * HP-SIR format interrupt service routines. + */ +static void sa1100_irda_hpsir_irq(struct net_device *dev) +{ + struct sa1100_irda *si = dev->priv; + int status; + + status = Ser2UTSR0; + + /* + * Deal with any receive errors first. The bytes in error may be + * the only bytes in the receive FIFO, so we do this first. + */ + while (status & UTSR0_EIF) { + int stat, data; + + stat = Ser2UTSR1; + data = Ser2UTDR; + + if (stat & (UTSR1_FRE | UTSR1_ROR)) { + si->stats.rx_errors++; + if (stat & UTSR1_FRE) + si->stats.rx_frame_errors++; + if (stat & UTSR1_ROR) + si->stats.rx_fifo_errors++; + } else + async_unwrap_char(dev, &si->stats, &si->rx_buff, data); + + status = Ser2UTSR0; + } + + /* + * We must clear certain bits. + */ + Ser2UTSR0 = status & (UTSR0_RID | UTSR0_RBB | UTSR0_REB); + + if (status & UTSR0_RFS) { + /* + * There are at least 4 bytes in the FIFO. Read 3 bytes + * and leave the rest to the block below. + */ + async_unwrap_char(dev, &si->stats, &si->rx_buff, Ser2UTDR); + async_unwrap_char(dev, &si->stats, &si->rx_buff, Ser2UTDR); + async_unwrap_char(dev, &si->stats, &si->rx_buff, Ser2UTDR); + } + + if (status & (UTSR0_RFS | UTSR0_RID)) { + /* + * Fifo contains more than 1 character. + */ + do { + async_unwrap_char(dev, &si->stats, &si->rx_buff, + Ser2UTDR); + } while (Ser2UTSR1 & UTSR1_RNE); + + dev->last_rx = jiffies; + } + + if (status & UTSR0_TFS && si->tx_buff.len) { + /* + * Transmitter FIFO is not full + */ + do { + Ser2UTDR = *si->tx_buff.data++; + si->tx_buff.len -= 1; + } while (Ser2UTSR1 & UTSR1_TNF && si->tx_buff.len); + + if (si->tx_buff.len == 0) { + si->stats.tx_packets++; + si->stats.tx_bytes += si->tx_buff.data - + si->tx_buff.head; + + /* + * We need to ensure that the transmitter has + * finished. + */ + do + rmb(); + while (Ser2UTSR1 & UTSR1_TBY); + + /* + * Ok, we've finished transmitting. Now enable + * the receiver. Sometimes we get a receive IRQ + * immediately after a transmit... + */ + Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID; + Ser2UTCR3 = UTCR3_RIE | UTCR3_RXE | UTCR3_TXE; + + if (si->newspeed) { + sa1100_irda_set_speed(si, si->newspeed); + si->newspeed = 0; + } + + /* I'm hungry! */ + netif_wake_queue(dev); + } + } +} + +static void sa1100_irda_fir_error(struct sa1100_irda *si, struct net_device *dev) +{ + struct sk_buff *skb = si->rxskb; + dma_addr_t dma_addr; + unsigned int len, stat, data; + + if (!skb) { + printk(KERN_ERR "sa1100_ir: SKB is NULL!\n"); + return; + } + + /* + * Get the current data position. + */ + sa1100_dma_get_current(si->rxdma, NULL, &dma_addr); + len = dma_addr - si->rxbuf_dma; + pci_unmap_single(NULL, si->rxbuf_dma, len, PCI_DMA_FROMDEVICE); + + do { + /* + * Read Status, and then Data. + */ + stat = Ser2HSSR1; + rmb(); + data = Ser2HSDR; + + if (stat & (HSSR1_CRE | HSSR1_ROR)) { + si->stats.rx_errors++; + if (stat & HSSR1_CRE) + si->stats.rx_crc_errors++; + if (stat & HSSR1_ROR) + si->stats.rx_frame_errors++; + } else + skb->data[len++] = data; + + /* + * If we hit the end of frame, there's + * no point in continuing. + */ + if (stat & HSSR1_EOF) + break; + } while (Ser2HSSR0 & HSSR0_EIF); + + if (stat & HSSR1_EOF) { + si->rxskb = NULL; + + skb_put(skb, len); + skb->dev = dev; + skb->mac.raw = skb->data; + skb->protocol = htons(ETH_P_IRDA); + si->stats.rx_packets++; + si->stats.rx_bytes += len; + + /* + * Before we pass the buffer up, allocate a new one. + */ + sa1100_irda_rx_alloc(si); + + netif_rx(skb); + } else { + /* + * Remap the buffer. + */ + si->rxbuf_dma = pci_map_single(NULL, si->rxskb->data, + HPSIR_MAX_RXLEN, + PCI_DMA_FROMDEVICE); + } +} + +/* + * FIR format interrupt service routine. We only have to + * handle RX events; transmit events go via the TX DMA handler. + * + * No matter what, we disable RX, process, and the restart RX. + */ +static void sa1100_irda_fir_irq(struct net_device *dev) +{ + struct sa1100_irda *si = dev->priv; + + /* + * Stop RX DMA + */ + sa1100_dma_stop(si->rxdma); + + /* + * Framing error - we throw away the packet completely. + * Clearing RXE flushes the error conditions and data + * from the fifo. + */ + if (Ser2HSSR0 & (HSSR0_FRE | HSSR0_RAB)) { + si->stats.rx_errors++; + + if (Ser2HSSR0 & HSSR0_FRE) + si->stats.rx_frame_errors++; + + /* + * Clear out the DMA... + */ + Ser2HSCR0 = si->hscr0 | HSCR0_HSSP; + + /* + * Clear selected status bits now, so we + * don't miss them next time around. + */ + Ser2HSSR0 = HSSR0_FRE | HSSR0_RAB; + } + + /* + * Deal with any receive errors. The any of the lowest + * 8 bytes in the FIFO may contain an error. We must read + * them one by one. The "error" could even be the end of + * packet! + */ + if (Ser2HSSR0 & HSSR0_EIF) + sa1100_irda_fir_error(si, dev); + + /* + * No matter what happens, we must restart reception. + */ + sa1100_irda_rx_dma_start(si); +} + +static void sa1100_irda_irq(int irq, void *dev_id, struct pt_regs *regs) +{ + struct net_device *dev = dev_id; + if (IS_FIR(((struct sa1100_irda *)dev->priv))) + sa1100_irda_fir_irq(dev); + else + sa1100_irda_hpsir_irq(dev); +} + +/* + * TX DMA completion handler. + */ +static void sa1100_irda_txdma_irq(void *id, int len) +{ + struct net_device *dev = id; + struct sa1100_irda *si = dev->priv; + struct sk_buff *skb = si->txskb; + + si->txskb = NULL; + + /* + * Wait for the transmission to complete. Unfortunately, + * the hardware doesn't give us an interrupt to indicate + * "end of frame". + */ + do + rmb(); + while (!(Ser2HSSR0 & HSSR0_TUR) || Ser2HSSR1 & HSSR1_TBY); + + /* + * Clear the transmit underrun bit. + */ + Ser2HSSR0 = HSSR0_TUR; + + /* + * Do we need to change speed? Note that we're lazy + * here - we don't free the old rxskb. We don't need + * to allocate a buffer either. + */ + if (si->newspeed) { + sa1100_irda_set_speed(si, si->newspeed); + si->newspeed = 0; + } + + /* + * Start reception. This disables the transmitter for + * us. This will be using the existing RX buffer. + */ + sa1100_irda_rx_dma_start(si); + + /* + * Account and free the packet. + */ + if (skb) { + pci_unmap_single(NULL, si->txbuf_dma, len, PCI_DMA_TODEVICE); + si->stats.tx_packets ++; + si->stats.tx_bytes += len; + dev_kfree_skb_irq(skb); + } + + /* + * Make sure that the TX queue is available for sending + * (for retries). TX has priority over RX at all times. + */ + netif_wake_queue(dev); +} + +/* + * Note that we will never build up a backlog of frames; the protocol is a + * half duplex protocol which basically means we transmit a frame, we + * receive a frame, we transmit the next frame etc. + */ +static int sa1100_irda_hard_xmit(struct sk_buff *skb, struct net_device *dev) +{ + struct sa1100_irda *si = dev->priv; + int speed = irda_get_next_speed(skb); + + /* + * Does this packet contain a request to change the interface + * speed? If so, remember it until we complete the transmission + * of this frame. + */ + if (speed != si->speed && speed != -1) + si->newspeed = speed; + + /* + * If this is an empty frame, we can bypass a lot. + */ + if (skb->len == 0) { + if (si->newspeed) { + si->newspeed = 0; + sa1100_irda_set_speed(si, speed); + } + dev_kfree_skb(skb); + return 0; + } + + if (!IS_FIR(si)) { + si->tx_buff.data = si->tx_buff.head; + si->tx_buff.len = async_wrap_skb(skb, si->tx_buff.data, + si->tx_buff.truesize); + + /* + * Set the transmit interrupt enable. This will fire + * off an interrupt immediately. Note that we disable + * the receiver so we won't get spurious characteres + * received. + */ + Ser2UTCR3 = UTCR3_TIE | UTCR3_TXE; + + dev_kfree_skb(skb); + } else { + int mtt = irda_get_mtt(skb); + + /* + * We must not be transmitting... + */ + if (si->txskb) + BUG(); + + netif_stop_queue(dev); + + si->txskb = skb; + si->txbuf_dma = pci_map_single(NULL, skb->data, + skb->len, PCI_DMA_TODEVICE); + + sa1100_dma_queue_buffer(si->txdma, dev, si->txbuf_dma, + skb->len); + + /* + * If we have a mean turn-around time, impose the specified + * specified delay. We could shorten this by timing from + * the point we received the packet. + */ + if (mtt) + udelay(mtt); + + Ser2HSCR0 = si->hscr0 | HSCR0_HSSP | HSCR0_TXE; + } + + dev->trans_start = jiffies; + + return 0; +} + +static int +sa1100_irda_ioctl(struct net_device *dev, struct ifreq *ifreq, int cmd) +{ + struct if_irda_req *rq = (struct if_irda_req *)ifreq; + struct sa1100_irda *si = dev->priv; + int ret = -EOPNOTSUPP; + + switch (cmd) { + case SIOCSBANDWIDTH: + if (capable(CAP_NET_ADMIN)) { + /* + * We are unable to set the speed if the + * device is not running. + */ + if (si->open) { + ret = sa1100_irda_set_speed(si, + rq->ifr_baudrate); + } else { + printk("sa1100_irda_ioctl: SIOCSBANDWIDTH: !netif_running\n"); + ret = 0; + } + } + break; + + case SIOCSMEDIABUSY: + ret = -EPERM; + if (capable(CAP_NET_ADMIN)) { + irda_device_set_media_busy(dev, TRUE); + ret = 0; + } + break; + + case SIOCGRECEIVING: + rq->ifr_receiving = IS_FIR(si) ? 0 + : si->rx_buff.state != OUTSIDE_FRAME; + break; + + default: + break; + } + + return ret; +} + +static struct net_device_stats *sa1100_irda_stats(struct net_device *dev) +{ + struct sa1100_irda *si = dev->priv; + return &si->stats; +} + +static int sa1100_irda_start(struct net_device *dev) +{ + struct sa1100_irda *si = dev->priv; + int err; + + MOD_INC_USE_COUNT; + + si->speed = 9600; + + err = request_irq(dev->irq, sa1100_irda_irq, 0, dev->name, dev); + if (err) + goto err_irq; + + err = sa1100_request_dma(&si->rxdma, "IrDA receive", DMA_Ser2HSSPRd); + if (err) + goto err_rx_dma; + + err = sa1100_request_dma(&si->txdma, "IrDA transmit", DMA_Ser2HSSPWr); + if (err) + goto err_tx_dma; + + /* + * The interrupt must remain disabled for now. + */ + disable_irq(dev->irq); + + /* + * Setup the serial port for the specified speed. + */ + err = sa1100_irda_startup(si); + if (err) + goto err_startup; + + /* + * Open a new IrLAP layer instance. + */ + si->irlap = irlap_open(dev, &si->qos, "sa1100"); + err = -ENOMEM; + if (!si->irlap) + goto err_irlap; + + sa1100_dma_set_callback(si->txdma, sa1100_irda_txdma_irq); + + /* + * Now enable the interrupt and start the queue + */ + si->open = 1; + sa1100_set_power(si, power_level); /* low power mode */ + enable_irq(dev->irq); + netif_start_queue(dev); + return 0; + +err_irlap: + si->open = 0; + sa1100_irda_shutdown(si); +err_startup: + sa1100_free_dma(si->txdma); +err_tx_dma: + sa1100_free_dma(si->rxdma); +err_rx_dma: + free_irq(dev->irq, dev); +err_irq: + MOD_DEC_USE_COUNT; + return err; +} + +static int sa1100_irda_stop(struct net_device *dev) +{ + struct sa1100_irda *si = dev->priv; + + disable_irq(dev->irq); + sa1100_irda_shutdown(si); + + /* + * If we have been doing DMA receive, make sure we + * tidy that up cleanly. + */ + if (si->rxskb) { + pci_unmap_single(NULL, si->rxbuf_dma, HPSIR_MAX_RXLEN, + PCI_DMA_FROMDEVICE); + dev_kfree_skb(si->rxskb); + si->rxskb = NULL; + } + + /* Stop IrLAP */ + if (si->irlap) { + irlap_close(si->irlap); + si->irlap = NULL; + } + + netif_stop_queue(dev); + si->open = 0; + + /* + * Free resources + */ + sa1100_free_dma(si->txdma); + sa1100_free_dma(si->rxdma); + free_irq(dev->irq, dev); + + sa1100_set_power(si, 0); + + MOD_DEC_USE_COUNT; + + return 0; +} + +static int sa1100_irda_init_iobuf(iobuff_t *io, int size) +{ + io->head = kmalloc(size, GFP_KERNEL | GFP_DMA); + if (io->head != NULL) { + io->truesize = size; + io->in_frame = FALSE; + io->state = OUTSIDE_FRAME; + io->data = io->head; + } + return io->head ? 0 : -ENOMEM; +} + +static int sa1100_irda_net_init(struct net_device *dev) +{ + struct sa1100_irda *si = dev->priv; + unsigned int baudrate_mask; + int err = -ENOMEM; + + si = kmalloc(sizeof(struct sa1100_irda), GFP_KERNEL); + if (!si) + goto out; + + memset(si, 0, sizeof(*si)); + + /* + * Initialise the HP-SIR buffers + */ + err = sa1100_irda_init_iobuf(&si->rx_buff, 14384); + if (err) + goto out; + err = sa1100_irda_init_iobuf(&si->tx_buff, 4000); + if (err) + goto out_free_rx; + + dev->priv = si; + dev->hard_start_xmit = sa1100_irda_hard_xmit; + dev->open = sa1100_irda_start; + dev->stop = sa1100_irda_stop; + dev->do_ioctl = sa1100_irda_ioctl; + dev->get_stats = sa1100_irda_stats; + + irda_device_setup(dev); + irda_init_max_qos_capabilies(&si->qos); + + /* + * We support original IRDA up to 115k2. (we don't currently + * support 4Mbps). Min Turn Time set to 1ms or greater. + */ + baudrate_mask = IR_9600|IR_19200|IR_38400|IR_57600|IR_115200; + baudrate_mask |= IR_4000000 << 8; + si->qos.baud_rate.bits &= baudrate_mask; + si->qos.min_turn_time.bits = 7; + + irda_qos_bits_to_value(&si->qos); + + si->utcr4 = UTCR4_HPSIR; + if (tx_lpm) + si->utcr4 |= UTCR4_Z1_6us; + + /* + * Initially enable HP-SIR modulation, and ensure that the port + * is disabled. + */ + Ser2UTCR3 = 0; + Ser2UTCR4 = si->utcr4; + Ser2HSCR0 = HSCR0_UART; + +#ifdef CONFIG_PM + /* + * Power-Management is optional. + */ + si->pmdev = pm_register(PM_SYS_DEV, PM_SYS_IRDA, sa1100_irda_pmproc); + if (si->pmdev) + si->pmdev->data = dev; +#endif + + return 0; + + kfree(si->tx_buff.head); +out_free_rx: + kfree(si->rx_buff.head); +out: + kfree(si); + + return err; +} + +/* + * Remove all traces of this driver module from the kernel, so we can't be + * called. Note that the device has already been stopped, so we don't have + * to worry about interrupts or dma. + */ +static void sa1100_irda_net_uninit(struct net_device *dev) +{ + struct sa1100_irda *si = dev->priv; + + dev->hard_start_xmit = NULL; + dev->open = NULL; + dev->stop = NULL; + dev->do_ioctl = NULL; + dev->get_stats = NULL; + dev->priv = NULL; + + pm_unregister(si->pmdev); + + kfree(si->tx_buff.head); + kfree(si->rx_buff.head); + kfree(si); +} + +#ifdef MODULE +static +#endif +int __init sa1100_irda_init(void) +{ + struct net_device *dev; + int err; + + /* + * Limit power level a sensible range. + */ + if (power_level < 1) + power_level = 1; + if (power_level > 3) + power_level = 3; + + err = request_mem_region(__PREG(Ser2UTCR0), 0x24, "IrDA") ? 0 : -EBUSY; + if (err) + goto err_mem_1; + err = request_mem_region(__PREG(Ser2HSCR0), 0x1c, "IrDA") ? 0 : -EBUSY; + if (err) + goto err_mem_2; + err = request_mem_region(__PREG(Ser2HSCR2), 0x04, "IrDA") ? 0 : -EBUSY; + if (err) + goto err_mem_3; + + rtnl_lock(); + dev = dev_alloc("irda%d", &err); + if (dev) { + dev->irq = IRQ_Ser2ICP; + dev->init = sa1100_irda_net_init; + dev->uninit = sa1100_irda_net_uninit; + + err = register_netdevice(dev); + + if (err) + kfree(dev); + else + netdev = dev; + } + rtnl_unlock(); + + if (err) { + release_mem_region(__PREG(Ser2HSCR2), 0x04); +err_mem_3: + release_mem_region(__PREG(Ser2HSCR0), 0x1c); +err_mem_2: + release_mem_region(__PREG(Ser2UTCR0), 0x24); + } +err_mem_1: + return err; +} + +static void __exit sa1100_irda_exit(void) +{ + struct net_device *dev = netdev; + + netdev = NULL; + if (dev) { + rtnl_lock(); + unregister_netdevice(dev); + rtnl_unlock(); + } + + release_mem_region(__PREG(Ser2HSCR2), 0x04); + release_mem_region(__PREG(Ser2HSCR0), 0x1c); + release_mem_region(__PREG(Ser2UTCR0), 0x24); + + /* + * We now know that the netdevice is no longer in use, and all + * references to our driver have been removed. The only structure + * which may still be present is the netdevice, which will get + * cleaned up by net/core/dev.c + */ +} + +#ifdef MODULE +module_init(sa1100_irda_init); +module_exit(sa1100_irda_exit); +#endif + +MODULE_AUTHOR("Russell King "); +MODULE_DESCRIPTION("StrongARM SA1100 IrDA driver"); +MODULE_LICENSE("GPL"); +MODULE_PARM(power_level, "i"); +MODULE_PARM_DESC(power_level, "IrDA power level, 1 (low) to 3 (high)"); +MODULE_PARM(tx_lpm, "i"); +MODULE_PARM_DESC(tx_lpm, "Enable transmitter low power (1.6us) mode"); +EXPORT_NO_SYMBOLS; diff -u --recursive --new-file v2.4.13/linux/drivers/net/natsemi.c linux/drivers/net/natsemi.c --- v2.4.13/linux/drivers/net/natsemi.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/net/natsemi.c Thu Oct 25 14:01:51 2001 @@ -85,6 +85,15 @@ * use long for ee_addr (various) * print pointers properly (DaveM) * include asm/irq.h (?) + + version 1.0.11: + * check and reset if PHY errors appear (Adrian Sun) + * WoL cleanup (Tim Hockin) + * Magic number cleanup (Tim Hockin) + * Don't reload EEPROM on every reset (Tim Hockin) + * Save and restore EEPROM state across reset (Tim Hockin) + * MDIO Cleanup (Tim Hockin) + * Reformat register offsets/bits (jgarzik) TODO: * big endian support with CFG:BEM instead of cpu_to_le32 @@ -93,9 +102,8 @@ */ #define DRV_NAME "natsemi" -#define DRV_VERSION "1.07+LK1.0.10" -#define DRV_RELDATE "Oct 09, 2001" - +#define DRV_VERSION "1.07+LK1.0.11" +#define DRV_RELDATE "Oct 19, 2001" /* Updated to recommendations in pci-skeleton v2.03. */ @@ -106,7 +114,7 @@ c-help-name: National Semiconductor DP8381x series PCI Ethernet support c-help-symbol: CONFIG_NATSEMI c-help: This driver is for the National Semiconductor DP8381x series, -c-help: including the 83815 chip. +c-help: including the 8381[56] chips. c-help: More specific information and updates are available from c-help: http://www.scyld.com/network/natsemi.html */ @@ -114,10 +122,12 @@ /* The user-configurable values. These may be modified when a driver module is loaded.*/ -static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */ +static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */ + /* Maximum events (Rx packets, etc.) to handle at each interrupt. */ static int max_interrupt_work = 20; static int mtu; + /* Maximum number of multicast addresses to filter (vs. rx-all-multicast). This chip uses a 512 element hash table based on the Ethernet CRC. */ static int multicast_filter_limit = 100; @@ -143,16 +153,17 @@ bonding and packet priority. There are no ill effects from too-large receive rings. */ #define TX_RING_SIZE 16 -#define TX_QUEUE_LEN 10 /* Limit ring entries actually used, min 4. */ -#define RX_RING_SIZE 32 +#define TX_QUEUE_LEN 10 /* Limit ring entries actually used, min 4. */ +#define RX_RING_SIZE 64 /* Operational parameters that usually are not changed. */ /* Time in jiffies before concluding the transmitter is hung. */ #define TX_TIMEOUT (2*HZ) #define NATSEMI_HW_TIMEOUT 400 +#define NATSEMI_TIMER_FREQ 3*HZ -#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/ +#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer. */ #if !defined(__OPTIMIZE__) #warning You must compile this file with the correct options! @@ -179,7 +190,7 @@ #include #include #include -#include /* Processor type for cache alignment. */ +#include /* Processor type for cache alignment. */ #include #include #include @@ -308,11 +319,11 @@ const char *name; unsigned long flags; } natsemi_pci_info[] __devinitdata = { - { "NatSemi DP83815", PCI_IOTYPE }, + { "NatSemi DP8381[56]", PCI_IOTYPE }, }; static struct pci_device_id natsemi_pci_tbl[] __devinitdata = { - { 0x100B, 0x0020, PCI_ANY_ID, PCI_ANY_ID, }, + { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_83815, PCI_ANY_ID, PCI_ANY_ID, }, { 0, }, }; MODULE_DEVICE_TABLE(pci, natsemi_pci_tbl); @@ -323,88 +334,222 @@ device. */ enum register_offsets { - ChipCmd=0x00, ChipConfig=0x04, EECtrl=0x08, PCIBusCfg=0x0C, - IntrStatus=0x10, IntrMask=0x14, IntrEnable=0x18, - TxRingPtr=0x20, TxConfig=0x24, - RxRingPtr=0x30, RxConfig=0x34, ClkRun=0x3C, - WOLCmd=0x40, PauseCmd=0x44, RxFilterAddr=0x48, RxFilterData=0x4C, - BootRomAddr=0x50, BootRomData=0x54, SiliconRev=0x58, StatsCtrl=0x5C, - StatsData=0x60, RxPktErrs=0x60, RxMissed=0x68, RxCRCErrs=0x64, - BasicControl=0x80, BasicStatus=0x84, - AnegAdv=0x90, AnegPeer = 0x94, PhyStatus=0xC0, MIntrCtrl=0xC4, - MIntrStatus=0xC8, PhyCtrl=0xE4, + ChipCmd = 0x00, + ChipConfig = 0x04, + EECtrl = 0x08, + PCIBusCfg = 0x0C, + IntrStatus = 0x10, + IntrMask = 0x14, + IntrEnable = 0x18, + TxRingPtr = 0x20, + TxConfig = 0x24, + RxRingPtr = 0x30, + RxConfig = 0x34, + ClkRun = 0x3C, + WOLCmd = 0x40, + PauseCmd = 0x44, + RxFilterAddr = 0x48, + RxFilterData = 0x4C, + BootRomAddr = 0x50, + BootRomData = 0x54, + SiliconRev = 0x58, + StatsCtrl = 0x5C, + StatsData = 0x60, + RxPktErrs = 0x60, + RxMissed = 0x68, + RxCRCErrs = 0x64, + BasicControl = 0x80, + BasicStatus = 0x84, + AnegAdv = 0x90, + AnegPeer = 0x94, + PhyStatus = 0xC0, + MIntrCtrl = 0xC4, + MIntrStatus = 0xC8, + PhyCtrl = 0xE4, /* These are from the spec, around page 78... on a separate table. * The meaning of these registers depend on the value of PGSEL. */ - PGSEL=0xCC, PMDCSR=0xE4, TSTDAT=0xFC, DSPCFG=0xF4, SDCFG=0x8C + PGSEL = 0xCC, + PMDCSR = 0xE4, + TSTDAT = 0xFC, + DSPCFG = 0xF4, + SDCFG = 0xF8 }; +/* the values for the 'magic' registers above (PGSEL=1) */ +#define PMDCSR_VAL 0x189C +#define TSTDAT_VAL 0x0 +#define DSPCFG_VAL 0x5040 +#define SDCFG_VAL 0x008c /* misc PCI space registers */ -enum PCISpaceRegs { - PCIPM=0x44, +enum pci_register_offsets { + PCIPM = 0x44, +}; + +enum ChipCmd_bits { + ChipReset = 0x100, + RxReset = 0x20, + TxReset = 0x10, + RxOff = 0x08, + RxOn = 0x04, + TxOff = 0x02, + TxOn = 0x01, +}; + +enum ChipConfig_bits { + CfgPhyDis = 0x200, + CfgPhyRst = 0x400, + CfgAnegEnable = 0x2000, + CfgAneg100 = 0x4000, + CfgAnegFull = 0x8000, + CfgAnegDone = 0x8000000, + CfgFullDuplex = 0x20000000, + CfgSpeed100 = 0x40000000, + CfgLink = 0x80000000, }; -/* Bit in ChipCmd. */ -enum ChipCmdBits { - ChipReset=0x100, RxReset=0x20, TxReset=0x10, RxOff=0x08, RxOn=0x04, - TxOff=0x02, TxOn=0x01, +enum EECtrl_bits { + EE_ShiftClk = 0x04, + EE_DataIn = 0x01, + EE_ChipSelect = 0x08, + EE_DataOut = 0x02, }; -enum PCIBusCfgBits { - EepromReload=0x4, +enum PCIBusCfg_bits { + EepromReload = 0x4, }; /* Bits in the interrupt status/mask registers. */ -enum intr_status_bits { - IntrRxDone=0x0001, IntrRxIntr=0x0002, IntrRxErr=0x0004, IntrRxEarly=0x0008, - IntrRxIdle=0x0010, IntrRxOverrun=0x0020, - IntrTxDone=0x0040, IntrTxIntr=0x0080, IntrTxErr=0x0100, - IntrTxIdle=0x0200, IntrTxUnderrun=0x0400, - StatsMax=0x0800, LinkChange=0x4000, - WOLPkt=0x2000, - RxResetDone=0x1000000, TxResetDone=0x2000000, - IntrPCIErr=0x00f00000, - IntrNormalSummary=0x025f, IntrAbnormalSummary=0xCD20, +enum IntrStatus_bits { + IntrRxDone = 0x0001, + IntrRxIntr = 0x0002, + IntrRxErr = 0x0004, + IntrRxEarly = 0x0008, + IntrRxIdle = 0x0010, + IntrRxOverrun = 0x0020, + IntrTxDone = 0x0040, + IntrTxIntr = 0x0080, + IntrTxErr = 0x0100, + IntrTxIdle = 0x0200, + IntrTxUnderrun = 0x0400, + StatsMax = 0x0800, + SWInt = 0x1000, + WOLPkt = 0x2000, + LinkChange = 0x4000, + IntrHighBits = 0x8000, + RxStatusFIFOOver = 0x10000, + IntrPCIErr = 0xf00000, + RxResetDone = 0x1000000, + TxResetDone = 0x2000000, + IntrAbnormalSummary = 0xCD20, }; +/* + * Default Interrupts: + * Rx OK, Rx Packet Error, Rx Overrun, + * Tx OK, Tx Packet Error, Tx Underrun, + * MIB Service, Phy Interrupt, High Bits, + * Rx Status FIFO overrun, + * Received Target Abort, Received Master Abort, + * Signalled System Error, Received Parity Error + */ #define DEFAULT_INTR 0x00f1cd65 -/* Bits in the RxMode register. */ -enum rx_mode_bits { - AcceptErr=0x20, AcceptRunt=0x10, - AcceptBroadcast=0xC0000000, - AcceptMulticast=0x00200000, AcceptAllMulticast=0x20000000, - AcceptAllPhys=0x10000000, AcceptMyPhys=0x08000000, -}; - -/* Bits in WOLCmd register. */ -enum wol_bits { - WakePhy=0x1, WakeUnicast=0x2, WakeMulticast=0x4, WakeBroadcast=0x8, - WakeArp=0x10, WakePMatch0=0x20, WakePMatch1=0x40, WakePMatch2=0x80, - WakePMatch3=0x100, WakeMagic=0x200, WakeMagicSecure=0x400, - SecureHack=0x100000, WokePhy=0x400000, WokeUnicast=0x800000, - WokeMulticast=0x1000000, WokeBroadcast=0x2000000, WokeArp=0x4000000, - WokePMatch0=0x8000000, WokePMatch1=0x10000000, WokePMatch2=0x20000000, - WokePMatch3=0x40000000, WokeMagic=0x80000000, WakeOptsSummary=0x7ff -}; - -enum aneg_bits { - Aneg10BaseT=0x20, Aneg10BaseTFull=0x40, - Aneg100BaseT=0x80, Aneg100BaseTFull=0x100, -}; - -enum config_bits { - CfgPhyDis=0x200, CfgPhyRst=0x400, CfgAnegEnable=0x2000, - CfgAneg100=0x4000, CfgAnegFull=0x8000, CfgAnegDone=0x8000000, - CfgFullDuplex=0x20000000, - CfgSpeed100=0x40000000, CfgLink=0x80000000, -}; - -enum bmcr_bits { - BMCRDuplex=0x100, BMCRAnegRestart=0x200, BMCRAnegEnable=0x1000, - BMCRSpeed=0x2000, BMCRPhyReset=0x8000, +enum TxConfig_bits { + TxDrthMask = 0x3f, + TxFlthMask = 0x3f00, + TxMxdmaMask = 0x700000, + TxMxdma_512 = 0x0, + TxMxdma_4 = 0x100000, + TxMxdma_8 = 0x200000, + TxMxdma_16 = 0x300000, + TxMxdma_32 = 0x400000, + TxMxdma_64 = 0x500000, + TxMxdma_128 = 0x600000, + TxMxdma_256 = 0x700000, + TxCollRetry = 0x800000, + TxAutoPad = 0x10000000, + TxMacLoop = 0x20000000, + TxHeartIgn = 0x40000000, + TxCarrierIgn = 0x80000000 +}; + +enum RxConfig_bits { + RxDrthMask = 0x3e, + RxMxdmaMask = 0x700000, + RxMxdma_512 = 0x0, + RxMxdma_4 = 0x100000, + RxMxdma_8 = 0x200000, + RxMxdma_16 = 0x300000, + RxMxdma_32 = 0x400000, + RxMxdma_64 = 0x500000, + RxMxdma_128 = 0x600000, + RxMxdma_256 = 0x700000, + RxAcceptLong = 0x8000000, + RxAcceptTx = 0x10000000, + RxAcceptRunt = 0x40000000, + RxAcceptErr = 0x80000000 +}; + +enum ClkRun_bits { + PMEEnable = 0x100, + PMEStatus = 0x8000, +}; + +enum WolCmd_bits { + WakePhy = 0x1, + WakeUnicast = 0x2, + WakeMulticast = 0x4, + WakeBroadcast = 0x8, + WakeArp = 0x10, + WakePMatch0 = 0x20, + WakePMatch1 = 0x40, + WakePMatch2 = 0x80, + WakePMatch3 = 0x100, + WakeMagic = 0x200, + WakeMagicSecure = 0x400, + SecureHack = 0x100000, + WokePhy = 0x400000, + WokeUnicast = 0x800000, + WokeMulticast = 0x1000000, + WokeBroadcast = 0x2000000, + WokeArp = 0x4000000, + WokePMatch0 = 0x8000000, + WokePMatch1 = 0x10000000, + WokePMatch2 = 0x20000000, + WokePMatch3 = 0x40000000, + WokeMagic = 0x80000000, + WakeOptsSummary = 0x7ff }; +enum RxFilterAddr_bits { + RFCRAddressMask = 0x3ff, + AcceptMulticast = 0x00200000, + AcceptMyPhys = 0x08000000, + AcceptAllPhys = 0x10000000, + AcceptAllMulticast = 0x20000000, + AcceptBroadcast = 0x40000000, + RxFilterEnable = 0x80000000 +}; + +enum StatsCtrl_bits { + StatsWarn = 0x1, + StatsFreeze = 0x2, + StatsClear = 0x4, + StatsStrobe = 0x8, +}; + +enum MIntrCtrl_bits { + MICRIntEn = 0x2, +}; + +enum PhyCtrl_bits { + PhyAddrMask = 0xf, +}; + +#define SRR_REV_C 0x0302 +#define SRR_REV_D 0x0403 + /* The Rx and Tx buffer descriptors. */ /* Note that using only 32 bit fields simplifies conversion to big-endian architectures. */ @@ -418,8 +563,19 @@ /* Bits in network_desc.status */ enum desc_status_bits { DescOwn=0x80000000, DescMore=0x40000000, DescIntr=0x20000000, - DescNoCRC=0x10000000, - DescPktOK=0x08000000, RxTooLong=0x00400000, + DescNoCRC=0x10000000, DescPktOK=0x08000000, + DescSizeMask=0xfff, + + DescTxAbort=0x04000000, DescTxFIFO=0x02000000, + DescTxCarrier=0x01000000, DescTxDefer=0x00800000, + DescTxExcDefer=0x00400000, DescTxOOWCol=0x00200000, + DescTxExcColl=0x00100000, DescTxCollCount=0x000f0000, + + DescRxAbort=0x04000000, DescRxOver=0x02000000, + DescRxDest=0x01800000, DescRxLong=0x00400000, + DescRxRunt=0x00200000, DescRxInvalid=0x00100000, + DescRxCRC=0x00080000, DescRxAlign=0x00040000, + DescRxLoop=0x00020000, DesRxColl=0x00010000, }; struct netdev_private { @@ -450,17 +606,21 @@ u32 tx_config, rx_config; /* original contents of ClkRun register */ u32 SavedClkRun; + /* silicon revision */ + u32 srr; /* MII transceiver section. */ - u16 advertising; /* NWay media advertisement */ + u16 advertising; /* NWay media advertisement */ unsigned int iosize; spinlock_t lock; }; -static int eeprom_read(long ioaddr, int location); -static int mdio_read(struct net_device *dev, int phy_id, int location); +static int eeprom_read(long ioaddr, int location); +static int mdio_read(struct net_device *dev, int phy_id, int reg); +static void mdio_write(struct net_device *dev, int phy_id, int reg, u16 data); static void natsemi_reset(struct net_device *dev); +static void natsemi_reload_eeprom(struct net_device *dev); static void natsemi_stop_rxtx(struct net_device *dev); -static int netdev_open(struct net_device *dev); +static int netdev_open(struct net_device *dev); static void check_link(struct net_device *dev); static void netdev_timer(unsigned long data); static void tx_timeout(struct net_device *dev); @@ -469,7 +629,7 @@ static void drain_ring(struct net_device *dev); static void free_ring(struct net_device *dev); static void init_registers(struct net_device *dev); -static int start_tx(struct sk_buff *skb, struct net_device *dev); +static int start_tx(struct sk_buff *skb, struct net_device *dev); static void intr_handler(int irq, void *dev_instance, struct pt_regs *regs); static void netdev_error(struct net_device *dev, int intr_status); static void netdev_rx(struct net_device *dev); @@ -486,7 +646,7 @@ static int netdev_get_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd); static int netdev_set_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd); static void enable_wol_mode(struct net_device *dev, int enable_intr); -static int netdev_close(struct net_device *dev); +static int netdev_close(struct net_device *dev); static int __devinit natsemi_probe1 (struct pci_dev *pdev, @@ -516,9 +676,9 @@ * to be brought to D0 in this manner. */ pci_read_config_dword(pdev, PCIPM, &tmp); - if (tmp & (0x03|0x100)) { + if (tmp & PCI_PM_CTRL_STATE_MASK) { /* D0 state, disable PME assertion */ - u32 newtmp = tmp & ~(0x03|0x100); + u32 newtmp = tmp & ~PCI_PM_CTRL_STATE_MASK; pci_write_config_dword(pdev, PCIPM, newtmp); } @@ -571,7 +731,9 @@ spin_lock_init(&np->lock); /* Reset the chip to erase previous misconfiguration. */ + natsemi_reload_eeprom(dev); natsemi_reset(dev); + option = find_cnt < MAX_UNITS ? options[find_cnt] : 0; if (dev->mem_start) option = dev->mem_start; @@ -616,20 +778,23 @@ printk("%2.2x:", dev->dev_addr[i]); printk("%2.2x, IRQ %d.\n", dev->dev_addr[i], irq); - np->advertising = mdio_read(dev, 1, 4); + np->advertising = mdio_read(dev, 1, MII_ADVERTISE); if ((readl(ioaddr + ChipConfig) & 0xe000) != 0xe000) { u32 chip_config = readl(ioaddr + ChipConfig); printk(KERN_INFO "%s: Transceiver default autonegotiation %s " "10%s %s duplex.\n", dev->name, - chip_config & 0x2000 ? "enabled, advertise" : "disabled, force", - chip_config & 0x4000 ? "0" : "", - chip_config & 0x8000 ? "full" : "half"); + chip_config & CfgAnegEnable ? "enabled, advertise" : "disabled, force", + chip_config & CfgAneg100 ? "0" : "", + chip_config & CfgAnegFull ? "full" : "half"); } printk(KERN_INFO "%s: Transceiver status 0x%4.4x advertising %4.4x.\n", - dev->name, (int)readl(ioaddr + BasicStatus), + dev->name, (int)mdio_read(dev, 1, MII_BMSR), np->advertising); + /* save the silicon revision for later querying */ + np->srr = readl(ioaddr + SiliconRev); + return 0; } @@ -646,9 +811,6 @@ */ #define eeprom_delay(ee_addr) readl(ee_addr) -enum EEPROM_Ctrl_Bits { - EE_ShiftClk=0x04, EE_DataIn=0x01, EE_ChipSelect=0x08, EE_DataOut=0x02, -}; #define EE_Write0 (EE_ChipSelect) #define EE_Write1 (EE_ChipSelect | EE_DataIn) @@ -694,18 +856,67 @@ The 83815 series has an internal transceiver, and we present the management registers as if they were MII connected. */ -static int mdio_read(struct net_device *dev, int phy_id, int location) +static int mdio_read(struct net_device *dev, int phy_id, int reg) { - if (phy_id == 1 && location < 32) - return readl(dev->base_addr+BasicControl+(location<<2))&0xffff; + if (phy_id == 1 && reg < 32) + return readl(dev->base_addr+BasicControl+(reg<<2))&0xffff; else return 0xffff; } +static void mdio_write(struct net_device *dev, int phy_id, int reg, u16 data) +{ + struct netdev_private *np = dev->priv; + if (phy_id == 1 && reg < 32) { + writew(data, dev->base_addr+BasicControl+(reg<<2)); + switch (reg) { + case MII_ADVERTISE: np->advertising = data; break; + } + } +} + +/* CFG bits [13:16] [18:23] */ +#define CFG_RESET_SAVE 0xfde000 +/* WCSR bits [0:4] [9:10] */ +#define WCSR_RESET_SAVE 0x61f +/* RFCR bits [20] [22] [27:31] */ +#define RFCR_RESET_SAVE 0xf8500000; + static void natsemi_reset(struct net_device *dev) { int i; + u32 cfg; + u32 wcsr; + u32 rfcr; + u16 pmatch[3]; + u16 sopass[3]; + + /* + * Resetting the chip causes some registers to be lost. + * Natsemi suggests NOT reloading the EEPROM while live, so instead + * we save the state that would have been loaded from EEPROM + * on a normal power-up (see the spec EEPROM map). This assumes + * whoever calls this will follow up with init_registers() eventually. + */ + /* CFG */ + cfg = readl(dev->base_addr + ChipConfig) & CFG_RESET_SAVE; + /* WCSR */ + wcsr = readl(dev->base_addr + WOLCmd) & WCSR_RESET_SAVE; + /* RFCR */ + rfcr = readl(dev->base_addr + RxFilterAddr) & RFCR_RESET_SAVE; + /* PMATCH */ + for (i = 0; i < 3; i++) { + writel(i*2, dev->base_addr + RxFilterAddr); + pmatch[i] = readw(dev->base_addr + RxFilterData); + } + /* SOPAS */ + for (i = 0; i < 3; i++) { + writel(0xa+(i*2), dev->base_addr + RxFilterAddr); + sopass[i] = readw(dev->base_addr + RxFilterData); + } + + /* now whack the chip */ writel(ChipReset, dev->base_addr + ChipCmd); for (i=0;ibase_addr + ChipCmd) & ChipReset)) @@ -720,6 +931,32 @@ dev->name, i*5); } + /* restore CFG */ + cfg |= readl(dev->base_addr + ChipConfig) & ~CFG_RESET_SAVE; + writel(cfg, dev->base_addr + ChipConfig); + /* restore WCSR */ + wcsr |= readl(dev->base_addr + WOLCmd) & ~WCSR_RESET_SAVE; + writel(wcsr, dev->base_addr + WOLCmd); + /* read RFCR */ + rfcr |= readl(dev->base_addr + RxFilterAddr) & ~RFCR_RESET_SAVE; + /* restore PMATCH */ + for (i = 0; i < 3; i++) { + writel(i*2, dev->base_addr + RxFilterAddr); + writew(pmatch[i], dev->base_addr + RxFilterData); + } + for (i = 0; i < 3; i++) { + writel(0xa+(i*2), dev->base_addr + RxFilterAddr); + writew(sopass[i], dev->base_addr + RxFilterData); + } + /* restore RFCR */ + writel(rfcr, dev->base_addr + RxFilterAddr); + +} + +static void natsemi_reload_eeprom(struct net_device *dev) +{ + int i; + writel(EepromReload, dev->base_addr + PCIBusCfg); for (i=0;ibase_addr + PCIBusCfg) & EepromReload)) @@ -788,9 +1025,9 @@ /* Set the timer to check for link beat. */ init_timer(&np->timer); - np->timer.expires = jiffies + 3*HZ; + np->timer.expires = jiffies + NATSEMI_TIMER_FREQ; np->timer.data = (unsigned long)dev; - np->timer.function = &netdev_timer; /* timer handler */ + np->timer.function = &netdev_timer; /* timer handler */ add_timer(&np->timer); return 0; @@ -803,7 +1040,7 @@ int duplex; int chipcfg = readl(ioaddr + ChipConfig); - if(!(chipcfg & 0x80000000)) { + if(!(chipcfg & CfgLink)) { if (netif_carrier_ok(dev)) { if (debug) printk(KERN_INFO "%s: no link. Disabling watchdog.\n", @@ -819,20 +1056,20 @@ netif_carrier_on(dev); } - duplex = np->full_duplex || (chipcfg & 0x20000000 ? 1 : 0); + duplex = np->full_duplex || (chipcfg & CfgFullDuplex ? 1 : 0); /* if duplex is set then bit 28 must be set, too */ - if (duplex ^ !!(np->rx_config & 0x10000000)) { + if (duplex ^ !!(np->rx_config & RxAcceptTx)) { if (debug) printk(KERN_INFO "%s: Setting %s-duplex based on negotiated link" " capability.\n", dev->name, duplex ? "full" : "half"); if (duplex) { - np->rx_config |= 0x10000000; - np->tx_config |= 0xC0000000; + np->rx_config |= RxAcceptTx; + np->tx_config |= TxCarrierIgn | TxHeartIgn; } else { - np->rx_config &= ~0x10000000; - np->tx_config &= ~0xC0000000; + np->rx_config &= ~RxAcceptTx; + np->tx_config &= ~(TxCarrierIgn | TxHeartIgn); } writel(np->tx_config, ioaddr + TxConfig); writel(np->rx_config, ioaddr + RxConfig); @@ -845,9 +1082,21 @@ long ioaddr = dev->base_addr; int i; + /* save the silicon revision for later */ if (debug > 4) printk(KERN_DEBUG "%s: found silicon revision %xh.\n", - dev->name, readl(ioaddr + SiliconRev)); + dev->name, np->srr); + + for (i=0;ibase_addr + ChipConfig) & CfgAnegDone) + break; + udelay(10); + } + if (i==NATSEMI_HW_TIMEOUT && debug) { + printk(KERN_INFO + "%s: autonegotiation did not complete in %d usec.\n", + dev->name, i*10); + } /* On page 78 of the spec, they recommend some settings for "optimum performance" to be done in sequence. These settings optimize some @@ -856,26 +1105,26 @@ Kennedy) recommends always setting them. If you don't, you get errors on some autonegotiations that make the device unusable. */ - writew(0x0001, ioaddr + PGSEL); - writew(0x189C, ioaddr + PMDCSR); - writew(0x0000, ioaddr + TSTDAT); - writew(0x5040, ioaddr + DSPCFG); - writew(0x008C, ioaddr + SDCFG); - writew(0x0000, ioaddr + PGSEL); + writew(1, ioaddr + PGSEL); + writew(PMDCSR_VAL, ioaddr + PMDCSR); + writew(TSTDAT_VAL, ioaddr + TSTDAT); + writew(DSPCFG_VAL, ioaddr + DSPCFG); + writew(SDCFG_VAL, ioaddr + SDCFG); + writew(0, ioaddr + PGSEL); /* Enable PHY Specific event based interrupts. Link state change and Auto-Negotiation Completion are among the affected. + Read the intr status to clear it (needed for wake events). */ - writew(0x0002, ioaddr + MIntrCtrl); + readw(ioaddr + MIntrStatus); + writew(MICRIntEn, ioaddr + MIntrCtrl); - writel(np->ring_dma, ioaddr + RxRingPtr); - writel(np->ring_dma + RX_RING_SIZE * sizeof(struct netdev_desc), ioaddr + TxRingPtr); + /* clear any interrupts that are pending, such as wake events */ + readl(ioaddr + IntrStatus); - for (i = 0; i < ETH_ALEN; i += 2) { - writel(i, ioaddr + RxFilterAddr); - writew(dev->dev_addr[i] + (dev->dev_addr[i+1] << 8), - ioaddr + RxFilterData); - } + writel(np->ring_dma, ioaddr + RxRingPtr); + writel(np->ring_dma + RX_RING_SIZE * sizeof(struct netdev_desc), + ioaddr + TxRingPtr); /* Initialize other registers. * Configure the PCI bus bursts and FIFO thresholds. @@ -891,12 +1140,13 @@ * ECRETRY=1 * ATP=1 */ - np->tx_config = 0x10f01002; + np->tx_config = TxAutoPad | TxCollRetry | TxMxdma_256 | (0x1002); + writel(np->tx_config, ioaddr + TxConfig); + /* DRTH 0x10: start copying to memory if 128 bytes are in the fifo * MXDMA 0: up to 256 byte bursts */ - np->rx_config = 0x700020; - writel(np->tx_config, ioaddr + TxConfig); + np->rx_config = RxMxdma_256 | 0x20; writel(np->rx_config, ioaddr + RxConfig); /* Disable PME: @@ -906,24 +1156,37 @@ * With PME set the chip will scan incoming packets but * nothing will be written to memory. */ np->SavedClkRun = readl(ioaddr + ClkRun); - writel(np->SavedClkRun & ~0x100, ioaddr + ClkRun); + writel(np->SavedClkRun & ~PMEEnable, ioaddr + ClkRun); + if (np->SavedClkRun & PMEStatus) { + printk(KERN_NOTICE "%s: Wake-up event %8.8x\n", + dev->name, readl(ioaddr + WOLCmd)); + } check_link(dev); __set_rx_mode(dev); /* Enable interrupts by setting the interrupt mask. */ - writel(DEFAULT_INTR, ioaddr + IntrMask); + writel(DEFAULT_INTR, ioaddr + IntrMask); writel(1, ioaddr + IntrEnable); writel(RxOn | TxOn, ioaddr + ChipCmd); - writel(4, ioaddr + StatsCtrl); /* Clear Stats */ + writel(StatsClear, ioaddr + StatsCtrl); /* Clear Stats */ } +/* + * The frequency on this has been increased because of a nasty little problem. + * It seems that a reference set for this chip went out with incorrect info, + * and there exist boards that aren't quite right. An unexpected voltage drop + * can cause the PHY to get itself in a weird state (basically reset..). + * NOTE: this only seems to affect revC chips. + */ static void netdev_timer(unsigned long data) { struct net_device *dev = (struct net_device *)data; struct netdev_private *np = dev->priv; - int next_tick = 60*HZ; + int next_tick = 5*HZ; + long ioaddr = dev->base_addr; + u16 dspcfg; if (debug > 3) { /* DO NOT read the IntrStatus register, @@ -932,11 +1195,32 @@ printk(KERN_DEBUG "%s: Media selection timer tick.\n", dev->name); } - spin_lock_irq(&np->lock); - check_link(dev); - spin_unlock_irq(&np->lock); - np->timer.expires = jiffies + next_tick; - add_timer(&np->timer); + + /* check for a nasty random phy-reset - use dspcfg as a flag */ + writew(1, ioaddr+PGSEL); + dspcfg = readw(ioaddr+DSPCFG); + writew(0, ioaddr+PGSEL); + if (dspcfg != DSPCFG_VAL) { + if (!netif_queue_stopped(dev)) { + printk(KERN_INFO + "%s: possible phy reset: re-initializing\n", + dev->name); + disable_irq(dev->irq); + spin_lock_irq(&np->lock); + init_registers(dev); + spin_unlock_irq(&np->lock); + enable_irq(dev->irq); + } else { + /* hurry back */ + next_tick = HZ; + } + } else { + /* init_registers() calls check_link() for the above case */ + spin_lock_irq(&np->lock); + check_link(dev); + spin_unlock_irq(&np->lock); + } + mod_timer(&np->timer, jiffies + next_tick); } static void dump_ring(struct net_device *dev) @@ -946,15 +1230,18 @@ if (debug > 2) { int i; printk(KERN_DEBUG " Tx ring at %p:\n", np->tx_ring); - for (i = 0; i < TX_RING_SIZE; i++) + for (i = 0; i < TX_RING_SIZE; i++) { printk(KERN_DEBUG " #%d desc. %8.8x %8.8x %8.8x.\n", i, np->tx_ring[i].next_desc, - np->tx_ring[i].cmd_status, np->tx_ring[i].addr); + np->tx_ring[i].cmd_status, + np->tx_ring[i].addr); + } printk(KERN_DEBUG " Rx ring %p:\n", np->rx_ring); for (i = 0; i < RX_RING_SIZE; i++) { printk(KERN_DEBUG " #%d desc. %8.8x %8.8x %8.8x.\n", i, np->rx_ring[i].next_desc, - np->rx_ring[i].cmd_status, np->rx_ring[i].addr); + np->rx_ring[i].cmd_status, + np->rx_ring[i].addr); } } } @@ -964,12 +1251,12 @@ struct netdev_private *np = dev->priv; long ioaddr = dev->base_addr; - disable_irq(dev->irq); spin_lock_irq(&np->lock); if (netif_device_present(dev)) { printk(KERN_WARNING "%s: Transmit timed out, status %8.8x," - " resetting...\n", dev->name, readl(ioaddr + IntrStatus)); + " resetting...\n", + dev->name, readl(ioaddr + IntrStatus)); dump_ring(dev); natsemi_reset(dev); @@ -977,8 +1264,9 @@ init_ring(dev); init_registers(dev); } else { - printk(KERN_WARNING "%s: tx_timeout while in suspended state?\n", - dev->name); + printk(KERN_WARNING + "%s: tx_timeout while in suspended state?\n", + dev->name); } spin_unlock_irq(&np->lock); enable_irq(dev->irq); @@ -1019,7 +1307,7 @@ for (i = 0; i < RX_RING_SIZE; i++) { np->rx_ring[i].next_desc = cpu_to_le32(np->ring_dma +sizeof(struct netdev_desc) - *((i+1)%RX_RING_SIZE)); + *((i+1)%RX_RING_SIZE)); np->rx_ring[i].cmd_status = cpu_to_le32(DescOwn); np->rx_skbuff[i] = NULL; } @@ -1107,7 +1395,8 @@ if (netif_device_present(dev)) { np->tx_ring[entry].cmd_status = cpu_to_le32(DescOwn | skb->len); - /* StrongARM: Explicitly cache flush np->tx_ring and skb->data,skb->len. */ + /* StrongARM: Explicitly cache flush np->tx_ring and + * skb->data,skb->len. */ wmb(); np->cur_tx++; if (np->cur_tx - np->dirty_tx >= TX_QUEUE_LEN - 1) { @@ -1148,15 +1437,19 @@ printk(KERN_DEBUG "%s: tx frame #%d finished with status %8.8xh.\n", dev->name, np->dirty_tx, le32_to_cpu(np->tx_ring[entry].cmd_status)); - if (np->tx_ring[entry].cmd_status & cpu_to_le32(0x08000000)) { + if (np->tx_ring[entry].cmd_status & cpu_to_le32(DescPktOK)) { np->stats.tx_packets++; np->stats.tx_bytes += np->tx_skbuff[entry]->len; - } else { /* Various Tx errors */ + } else { /* Various Tx errors */ int tx_status = le32_to_cpu(np->tx_ring[entry].cmd_status); - if (tx_status & 0x04010000) np->stats.tx_aborted_errors++; - if (tx_status & 0x02000000) np->stats.tx_fifo_errors++; - if (tx_status & 0x01000000) np->stats.tx_carrier_errors++; - if (tx_status & 0x00200000) np->stats.tx_window_errors++; + if (tx_status & (DescTxAbort|DescTxExcColl)) + np->stats.tx_aborted_errors++; + if (tx_status & DescTxFIFO) + np->stats.tx_fifo_errors++; + if (tx_status & DescTxCarrier) + np->stats.tx_carrier_errors++; + if (tx_status & DescTxOOWCol) + np->stats.tx_window_errors++; np->stats.tx_errors++; } pci_unmap_single(np->pci_dev,np->tx_dma[entry], @@ -1219,7 +1512,7 @@ } } while (1); - if (debug > 3) + if (debug > 4) printk(KERN_DEBUG "%s: exiting interrupt.\n", dev->name); } @@ -1240,7 +1533,7 @@ entry, desc_status); if (--boguscnt < 0) break; - if ((desc_status & (DescMore|DescPktOK|RxTooLong)) != DescPktOK) { + if ((desc_status & (DescMore|DescPktOK|DescRxLong)) != DescPktOK) { if (desc_status & DescMore) { printk(KERN_WARNING "%s: Oversized(?) Ethernet frame spanned " "multiple buffers, entry %#x status %x.\n", @@ -1252,14 +1545,19 @@ printk(KERN_DEBUG " netdev_rx() Rx error was %8.8x.\n", desc_status); np->stats.rx_errors++; - if (desc_status & 0x06000000) np->stats.rx_over_errors++; - if (desc_status & 0x00600000) np->stats.rx_length_errors++; - if (desc_status & 0x00140000) np->stats.rx_frame_errors++; - if (desc_status & 0x00080000) np->stats.rx_crc_errors++; + if (desc_status & (DescRxAbort|DescRxOver)) + np->stats.rx_over_errors++; + if (desc_status & (DescRxLong|DescRxRunt)) + np->stats.rx_length_errors++; + if (desc_status & (DescRxInvalid|DescRxAlign)) + np->stats.rx_frame_errors++; + if (desc_status & DescRxCRC) + np->stats.rx_crc_errors++; } } else { struct sk_buff *skb; - int pkt_len = (desc_status & 0x0fff) - 4; /* Omit CRC size. */ + /* Omit CRC size. */ + int pkt_len = (desc_status & DescSizeMask) - 4; /* Check if the packet is long enough to accept without copying to a minimally-sized skbuff. */ if (pkt_len < rx_copybreak @@ -1324,10 +1622,11 @@ spin_lock(&np->lock); if (intr_status & LinkChange) { - printk(KERN_NOTICE "%s: Link changed: Autonegotiation advertising" - " %4.4x partner %4.4x.\n", dev->name, - (int)readl(ioaddr + AnegAdv), - (int)readl(ioaddr + AnegPeer)); + printk(KERN_NOTICE + "%s: Link changed: Autonegotiation advertising" + " %4.4x partner %4.4x.\n", dev->name, + (int)mdio_read(dev, 1, MII_ADVERTISE), + (int)mdio_read(dev, 1, MII_LPA)); /* read MII int status to clear the flag */ readw(ioaddr + MIntrStatus); check_link(dev); @@ -1336,7 +1635,7 @@ __get_stats(dev); } if (intr_status & IntrTxUnderrun) { - if ((np->tx_config & 0x3f) < 62) + if ((np->tx_config & TxDrthMask) < 62) np->tx_config += 2; if (debug > 2) printk(KERN_NOTICE "%s: increasing Tx theshold, new tx cfg %8.8xh.\n", @@ -1348,12 +1647,15 @@ printk(KERN_NOTICE "%s: Link wake-up event %8.8x\n", dev->name, wol_status); } - if ((intr_status & ~(LinkChange|StatsMax|RxResetDone|TxResetDone|0xA7ff)) - && debug) - printk(KERN_ERR "%s: Something Wicked happened! %4.4x.\n", - dev->name, intr_status); + if (intr_status & RxStatusFIFOOver && debug) { + printk(KERN_NOTICE "%s: Rx status FIFO overrun\n", dev->name); + } /* Hmmmmm, it's not clear how to recover from PCI faults. */ if (intr_status & IntrPCIErr) { + if (debug) { + printk(KERN_NOTICE "%s: PCI error %08x\n", dev->name, + intr_status & IntrPCIErr); + } np->stats.tx_fifo_errors++; np->stats.rx_fifo_errors++; } @@ -1453,11 +1755,12 @@ if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */ /* Unconditionally log net taps. */ printk(KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name); - rx_mode = AcceptBroadcast | AcceptAllMulticast | AcceptAllPhys - | AcceptMyPhys; + rx_mode = RxFilterEnable | AcceptBroadcast + | AcceptAllMulticast | AcceptAllPhys | AcceptMyPhys; } else if ((dev->mc_count > multicast_filter_limit) || (dev->flags & IFF_ALLMULTI)) { - rx_mode = AcceptBroadcast | AcceptAllMulticast | AcceptMyPhys; + rx_mode = RxFilterEnable | AcceptBroadcast + | AcceptAllMulticast | AcceptMyPhys; } else { struct dev_mc_list *mclist; int i; @@ -1467,10 +1770,12 @@ set_bit_le(ether_crc_le(ETH_ALEN, mclist->dmi_addr) & 0x1ff, mc_filter); } - rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys; + rx_mode = RxFilterEnable | AcceptBroadcast + | AcceptMulticast | AcceptMyPhys; for (i = 0; i < 64; i += 2) { writew(HASH_TABLE + i, ioaddr + RxFilterAddr); - writew((mc_filter[i+1]<<8) + mc_filter[i], ioaddr + RxFilterData); + writew((mc_filter[i+1]<<8) + mc_filter[i], + ioaddr + RxFilterData); } } writel(rx_mode, ioaddr + RxFilterAddr); @@ -1550,6 +1855,7 @@ static int netdev_set_wol(struct net_device *dev, u32 newval) { + struct netdev_private *np = dev->priv; u32 data = readl(dev->base_addr + WOLCmd) & ~WakeOptsSummary; /* translate to bitmasks this chip understands */ @@ -1565,49 +1871,65 @@ data |= WakeArp; if (newval & WAKE_MAGIC) data |= WakeMagic; - if (newval & WAKE_MAGICSECURE) - data |= WakeMagicSecure; + if (np->srr >= SRR_REV_D) { + if (newval & WAKE_MAGICSECURE) { + data |= WakeMagicSecure; + } + } writel(data, dev->base_addr + WOLCmd); - /* should we burn these into the EEPROM? */ - return 0; } static int netdev_get_wol(struct net_device *dev, u32 *supported, u32 *cur) { + struct netdev_private *np = dev->priv; u32 regval = readl(dev->base_addr + WOLCmd); *supported = (WAKE_PHY | WAKE_UCAST | WAKE_MCAST | WAKE_BCAST - | WAKE_ARP | WAKE_MAGIC | WAKE_MAGICSECURE); + | WAKE_ARP | WAKE_MAGIC); + + if (np->srr >= SRR_REV_D) { + /* SOPASS works on revD and higher */ + *supported |= WAKE_MAGICSECURE; + } *cur = 0; + /* translate from chip bitmasks */ - if (regval & 0x1) + if (regval & WakePhy) *cur |= WAKE_PHY; - if (regval & 0x2) + if (regval & WakeUnicast) *cur |= WAKE_UCAST; - if (regval & 0x4) + if (regval & WakeMulticast) *cur |= WAKE_MCAST; - if (regval & 0x8) + if (regval & WakeBroadcast) *cur |= WAKE_BCAST; - if (regval & 0x10) + if (regval & WakeArp) *cur |= WAKE_ARP; - if (regval & 0x200) + if (regval & WakeMagic) *cur |= WAKE_MAGIC; - if (regval & 0x400) + if (regval & WakeMagicSecure) { + /* this can be on in revC, but it's broken */ *cur |= WAKE_MAGICSECURE; + } return 0; } static int netdev_set_sopass(struct net_device *dev, u8 *newval) { + struct netdev_private *np = dev->priv; u16 *sval = (u16 *)newval; - u32 addr = readl(dev->base_addr + RxFilterAddr) & ~0x3ff; + u32 addr; + + if (np->srr < SRR_REV_D) { + return 0; + } /* enable writing to these registers by disabling the RX filter */ - addr &= ~0x80000000; + addr = readl(dev->base_addr + RxFilterAddr) & ~RFCRAddressMask; + addr &= ~RxFilterEnable; writel(addr, dev->base_addr + RxFilterAddr); /* write the three words to (undocumented) RFCR vals 0xa, 0xc, 0xe */ @@ -1621,19 +1943,25 @@ writew(sval[2], dev->base_addr + RxFilterData); /* re-enable the RX filter */ - writel(addr | 0x80000000, dev->base_addr + RxFilterAddr); - - /* should we burn this into the EEPROM? */ + writel(addr | RxFilterEnable, dev->base_addr + RxFilterAddr); return 0; } static int netdev_get_sopass(struct net_device *dev, u8 *data) { + struct netdev_private *np = dev->priv; u16 *sval = (u16 *)data; - u32 addr = readl(dev->base_addr + RxFilterAddr) & ~0x3ff; + u32 addr; + + if (np->srr < SRR_REV_D) { + sval[0] = sval[1] = sval[2] = 0; + return 0; + } /* read the three words from (undocumented) RFCR vals 0xa, 0xc, 0xe */ + addr = readl(dev->base_addr + RxFilterAddr) & ~RFCRAddressMask; + writel(addr | 0xa, dev->base_addr + RxFilterAddr); sval[0] = readw(dev->base_addr + RxFilterData); @@ -1643,6 +1971,8 @@ writel(addr | 0xe, dev->base_addr + RxFilterAddr); sval[2] = readw(dev->base_addr + RxFilterData); + writel(addr, dev->base_addr + RxFilterAddr); + return 0; } @@ -1662,17 +1992,17 @@ ecmd->transceiver = XCVR_INTERNAL; /* this isn't fully supported at higher layers */ - ecmd->phy_address = readw(dev->base_addr + PhyCtrl) & 0xf; + ecmd->phy_address = readw(dev->base_addr + PhyCtrl) & PhyAddrMask; - tmp = readl(dev->base_addr + AnegAdv); ecmd->advertising = ADVERTISED_TP; - if (tmp & Aneg10BaseT) + tmp = mdio_read(dev, 1, MII_ADVERTISE); + if (tmp & ADVERTISE_10HALF) ecmd->advertising |= ADVERTISED_10baseT_Half; - if (tmp & Aneg10BaseTFull) + if (tmp & ADVERTISE_10FULL) ecmd->advertising |= ADVERTISED_10baseT_Full; - if (tmp & Aneg100BaseT) + if (tmp & ADVERTISE_100HALF) ecmd->advertising |= ADVERTISED_100baseT_Half; - if (tmp & Aneg100BaseTFull) + if (tmp & ADVERTISE_100FULL) ecmd->advertising |= ADVERTISED_100baseT_Full; tmp = readl(dev->base_addr + ChipConfig); @@ -1734,30 +2064,29 @@ } writel(tmp, dev->base_addr + ChipConfig); /* turn on autonegotiation, and force a renegotiate */ - tmp = readl(dev->base_addr + BasicControl); - tmp |= BMCRAnegEnable | BMCRAnegRestart; - writel(tmp, dev->base_addr + BasicControl); - np->advertising = mdio_read(dev, 1, 4); + tmp = mdio_read(dev, 1, MII_BMCR); + tmp |= (BMCR_ANENABLE | BMCR_ANRESTART); + mdio_write(dev, 1, MII_BMCR, tmp); + np->advertising = mdio_read(dev, 1, MII_ADVERTISE); } else { /* turn off auto negotiation, set speed and duplexity */ - tmp = readl(dev->base_addr + BasicControl); - tmp &= ~(BMCRAnegEnable | BMCRSpeed | BMCRDuplex); + tmp = mdio_read(dev, 1, MII_BMCR); + tmp &= ~(BMCR_ANENABLE | BMCR_SPEED100 | BMCR_FULLDPLX); if (ecmd->speed == SPEED_100) { - tmp |= BMCRSpeed; + tmp |= BMCR_SPEED100; } if (ecmd->duplex == DUPLEX_FULL) { - tmp |= BMCRDuplex; + tmp |= BMCR_FULLDPLX; } else { np->full_duplex = 0; } - writel(tmp, dev->base_addr + BasicControl); + mdio_write(dev, 1, MII_BMCR, tmp); } return 0; } static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { - struct netdev_private *np = dev->priv; struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; switch(cmd) { @@ -1770,22 +2099,16 @@ case SIOCGMIIREG: /* Read MII PHY register. */ case SIOCDEVPRIVATE+1: /* for binary compat, remove in 2.5 */ - data->val_out = mdio_read(dev, data->phy_id & 0x1f, data->reg_num & 0x1f); + data->val_out = mdio_read(dev, data->phy_id & 0x1f, + data->reg_num & 0x1f); return 0; case SIOCSMIIREG: /* Write MII PHY register. */ case SIOCDEVPRIVATE+2: /* for binary compat, remove in 2.5 */ if (!capable(CAP_NET_ADMIN)) return -EPERM; - if (data->phy_id == 1) { - u16 miireg = data->reg_num & 0x1f; - u16 value = data->val_in; - writew(value, dev->base_addr + BasicControl - + (miireg << 2)); - switch (miireg) { - case 4: np->advertising = value; break; - } - } + mdio_write(dev, data->phy_id & 0x1f, data->reg_num & 0x1f, + data->val_in); return 0; default: return -EOPNOTSUPP; @@ -1795,16 +2118,24 @@ static void enable_wol_mode(struct net_device *dev, int enable_intr) { long ioaddr = dev->base_addr; + struct netdev_private *np = dev->priv; if (debug > 1) printk(KERN_INFO "%s: remaining active for wake-on-lan\n", dev->name); + /* For WOL we must restart the rx process in silent mode. * Write NULL to the RxRingPtr. Only possible if * rx process is stopped */ writel(0, ioaddr + RxRingPtr); + /* read WoL status to clear */ + readl(ioaddr + WOLCmd); + + /* PME on, clear status */ + writel(np->SavedClkRun | PMEEnable | PMEStatus, ioaddr + ClkRun); + /* and restart the rx process */ writel(RxOn, ioaddr + ChipCmd); @@ -1822,9 +2153,10 @@ struct netdev_private *np = dev->priv; netif_stop_queue(dev); + netif_carrier_off(dev); if (debug > 1) { - printk(KERN_DEBUG "%s: Shutting down ethercard, status was %4.4x.\n", + printk(KERN_DEBUG "%s: Shutting down ethercard, status was %4.4x.\n", dev->name, (int)readl(ioaddr + ChipCmd)); printk(KERN_DEBUG "%s: Queue pointers were Tx %d / %d, Rx %d / %d.\n", dev->name, np->cur_tx, np->dirty_tx, np->cur_rx, np->dirty_rx); @@ -1835,9 +2167,13 @@ disable_irq(dev->irq); spin_lock_irq(&np->lock); + /* Disable and clear interrupts */ writel(0, ioaddr + IntrEnable); - writel(0, ioaddr + IntrMask); - writel(2, ioaddr + StatsCtrl); /* Freeze Stats */ + readl(ioaddr + IntrMask); + readw(ioaddr + MIntrStatus); + + /* Freeze Stats */ + writel(StatsFreeze, ioaddr + StatsCtrl); /* Stop the chip's Tx and Rx processes. */ natsemi_stop_rxtx(dev); @@ -1865,20 +2201,15 @@ { u32 wol = readl(ioaddr + WOLCmd) & WakeOptsSummary; - u32 clkrun = np->SavedClkRun; - /* Restore PME enable bit */ if (wol) { /* restart the NIC in WOL mode. * The nic must be stopped for this. */ enable_wol_mode(dev, 0); - /* make sure to enable PME */ - clkrun |= 0x100; + } else { + /* Restore PME enable bit unmolested */ + writel(np->SavedClkRun, ioaddr + ClkRun); } - writel(clkrun, ioaddr + ClkRun); -#if 0 - writel(0x0200, ioaddr + ChipConfig); /* Power down Xcvr. */ -#endif } return 0; } @@ -1913,8 +2244,8 @@ * * intr_handler: doesn't acquire the spinlock. suspend calls * disable_irq() to enforce synchronization. * - * netif_device_detach must occur under spin_unlock_irq(), interrupts from a detached - * device would cause an irq storm. + * netif_device_detach must occur under spin_unlock_irq(), interrupts from a + * detached device would cause an irq storm. */ static int natsemi_suspend (struct pci_dev *pdev, u32 state) @@ -1945,7 +2276,6 @@ drain_ring(dev); { u32 wol = readl(ioaddr + WOLCmd) & WakeOptsSummary; - u32 clkrun = np->SavedClkRun; /* Restore PME enable bit */ if (wol) { /* restart the NIC in WOL mode. @@ -1953,10 +2283,10 @@ * FIXME: use the WOL interupt */ enable_wol_mode(dev, 0); - /* make sure to enable PME */ - clkrun |= 0x100; + } else { + /* Restore PME enable bit unmolested */ + writel(np->SavedClkRun, ioaddr + ClkRun); } - writel(clkrun, ioaddr + ClkRun); } } else { netif_device_detach(dev); @@ -1985,8 +2315,7 @@ netif_device_attach(dev); spin_unlock_irq(&np->lock); - np->timer.expires = jiffies + 1*HZ; - add_timer(&np->timer); + mod_timer(&np->timer, jiffies + 1*HZ); } else { netif_device_attach(dev); } diff -u --recursive --new-file v2.4.13/linux/drivers/net/pcmcia/xircom_tulip_cb.c linux/drivers/net/pcmcia/xircom_tulip_cb.c --- v2.4.13/linux/drivers/net/pcmcia/xircom_tulip_cb.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/net/pcmcia/xircom_tulip_cb.c Thu Oct 25 14:01:57 2001 @@ -101,7 +101,9 @@ #include #include #include -#include /* Processor type for cache alignment. */ + +#include +#include /* Processor type for cache alignment. */ #include diff -u --recursive --new-file v2.4.13/linux/drivers/net/sunbmac.c linux/drivers/net/sunbmac.c --- v2.4.13/linux/drivers/net/sunbmac.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/net/sunbmac.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: sunbmac.c,v 1.27 2001/04/23 03:57:48 davem Exp $ +/* $Id: sunbmac.c,v 1.28 2001/10/21 06:35:29 davem Exp $ * sunbmac.c: Driver for Sparc BigMAC 100baseT ethernet adapters. * * Copyright (C) 1997, 1998, 1999 David S. Miller (davem@redhat.com) diff -u --recursive --new-file v2.4.13/linux/drivers/net/sunlance.c linux/drivers/net/sunlance.c --- v2.4.13/linux/drivers/net/sunlance.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/net/sunlance.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: sunlance.c,v 1.108 2001/04/19 22:32:41 davem Exp $ +/* $Id: sunlance.c,v 1.109 2001/10/21 06:35:29 davem Exp $ * lance.c: Linux/Sparc/Lance driver * * Written 1995, 1996 by Miguel de Icaza diff -u --recursive --new-file v2.4.13/linux/drivers/net/wireless/hermes.h linux/drivers/net/wireless/hermes.h --- v2.4.13/linux/drivers/net/wireless/hermes.h Tue Oct 9 17:06:52 2001 +++ linux/drivers/net/wireless/hermes.h Thu Oct 25 14:01:57 2001 @@ -31,6 +31,7 @@ #include #include +#include /* * Limits and constants diff -u --recursive --new-file v2.4.13/linux/drivers/parport/ChangeLog linux/drivers/parport/ChangeLog --- v2.4.13/linux/drivers/parport/ChangeLog Thu Oct 11 08:02:26 2001 +++ linux/drivers/parport/ChangeLog Fri Nov 2 17:13:53 2001 @@ -1,3 +1,35 @@ +2001-10-26 Tim Waugh + + * parport_pc.c (parport_irq_probe): When ECR programmable IRQ + support fails, generate interrupts using the FIFO even if we don't + want to use the FIFO for real data transfers. + (parport_pc_probe_port): Display the ECR address if we have an + ECR, not just if we will use the FIFO. + +2001-10-24 Dave Strauss + + * parport_pc.c (parport_pc_compat_write_block_pio, + parport_pc_ecp_write_block_pio): Allow a few seconds for an ECP + transfer to finish up. + +2001-10-11 Tim Waugh + + * parport_pc (sio_ite_8872_probe): New function, submitted by Rich + Liu from ITE. Cleaned up, removed bogus phys_to_virt calls. + +2001-10-24 Tim Waugh + + * parport_pc.c: Support for AKS AladdinCARD. Patch from + Aladdin Knowledge Systems (Christian Groessler). + +2001-10-24 Tim Waugh + + * ieee1284_ops.c (parport_ieee1284_ecp_read_data): Try to minimise + turnaround time. + + * ieee1284.c (parport_poll_peripheral): Try a couple of times + first without delaying. + 2001-10-10 Tim Waugh * parport_pc.c: Support for OX16PCI954 PCI card. diff -u --recursive --new-file v2.4.13/linux/drivers/parport/ieee1284.c linux/drivers/parport/ieee1284.c --- v2.4.13/linux/drivers/parport/ieee1284.c Sat May 19 18:07:04 2001 +++ linux/drivers/parport/ieee1284.c Thu Oct 25 00:07:39 2001 @@ -119,9 +119,10 @@ int usec) { /* Zero return code is success, >0 is timeout. */ - int counter = usec / 5; + int count = usec / 5 + 2; + int i; unsigned char status; - for (; counter > 0; counter--) { + for (i = 0; i < count; i++) { status = parport_read_status (port); if ((status & mask) == result) return 0; @@ -129,7 +130,8 @@ return -EINTR; if (current->need_resched) break; - udelay (5); + if (i >= 2) + udelay (5); } return 1; diff -u --recursive --new-file v2.4.13/linux/drivers/parport/ieee1284_ops.c linux/drivers/parport/ieee1284_ops.c --- v2.4.13/linux/drivers/parport/ieee1284_ops.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/parport/ieee1284_ops.c Thu Oct 25 00:07:39 2001 @@ -500,6 +500,7 @@ struct pardevice *dev = port->cad; unsigned char *buf = buffer; int rle_count = 0; /* shut gcc up */ + unsigned char ctl; int rle = 0; ssize_t count = 0; @@ -512,11 +513,10 @@ port->ieee1284.phase = IEEE1284_PH_REV_DATA; /* Set HostAck low to start accepting data. */ - parport_frob_control (port, - PARPORT_CONTROL_AUTOFD - | PARPORT_CONTROL_STROBE - | PARPORT_CONTROL_INIT, - PARPORT_CONTROL_AUTOFD); + ctl = parport_read_control (port); + ctl &= ~(PARPORT_CONTROL_STROBE | PARPORT_CONTROL_INIT); + parport_write_control (port, + ctl | PARPORT_CONTROL_AUTOFD); while (count < len) { long expire = jiffies + dev->timeout; unsigned char byte; @@ -592,7 +592,7 @@ } /* Event 44: Set HostAck high, acknowledging handshake. */ - parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0); + parport_write_control (port, ctl); /* Event 45: The peripheral has 35ms to set nAck high. */ if (parport_wait_peripheral (port, PARPORT_STATUS_ACK, @@ -610,9 +610,8 @@ } /* Event 46: Set HostAck low and accept the data. */ - parport_frob_control (port, - PARPORT_CONTROL_AUTOFD, - PARPORT_CONTROL_AUTOFD); + parport_write_control (port, + ctl | PARPORT_CONTROL_AUTOFD); /* If we just read a run-length count, fetch the data. */ if (command) diff -u --recursive --new-file v2.4.13/linux/drivers/parport/parport_pc.c linux/drivers/parport/parport_pc.c --- v2.4.13/linux/drivers/parport/parport_pc.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/parport/parport_pc.c Fri Nov 2 17:13:53 2001 @@ -798,6 +798,8 @@ { size_t written; int r; + long int expire; + const struct parport_pc_private *priv = port->physport->private_data; /* Special case: a timeout of zero means we cannot call schedule(). */ if (!port->physport->cad->timeout) @@ -819,9 +821,19 @@ written = parport_pc_fifo_write_block_pio (port, buf, length); /* Finish up. */ - if (change_mode (port, ECR_PS2) == -EBUSY) { - const struct parport_pc_private *priv = - port->physport->private_data; + /* For some hardware we don't want to touch the mode until + * the FIFO is empty, so allow 4 seconds for each position + * in the fifo. + */ + expire = jiffies + (priv->fifo_depth * HZ * 4); + do { + /* Wait for the FIFO to empty */ + r = change_mode (port, ECR_PS2); + if (r != -EBUSY) { + break; + } + } while (time_before (jiffies, expire)); + if (r == -EBUSY) { printk (KERN_DEBUG "%s: FIFO is stuck\n", port->name); @@ -862,6 +874,8 @@ { size_t written; int r; + long int expire; + const struct parport_pc_private *priv = port->physport->private_data; /* Special case: a timeout of zero means we cannot call schedule(). */ if (!port->physport->cad->timeout) @@ -904,9 +918,19 @@ written = parport_pc_fifo_write_block_pio (port, buf, length); /* Finish up. */ - if (change_mode (port, ECR_PS2) == -EBUSY) { - const struct parport_pc_private *priv = - port->physport->private_data; + /* For some hardware we don't want to touch the mode until + * the FIFO is empty, so allow 4 seconds for each position + * in the fifo. + */ + expire = jiffies + (priv->fifo_depth * (HZ * 4)); + do { + /* Wait for the FIFO to empty */ + r = change_mode (port, ECR_PS2); + if (r != -EBUSY) { + break; + } + } while (time_before (jiffies, expire)); + if (r == -EBUSY) { printk (KERN_DEBUG "%s: FIFO is stuck\n", port->name); @@ -2095,10 +2119,9 @@ if (priv->ecr) { pb->irq = programmable_irq_support(pb); - } - if (pb->modes & PARPORT_MODE_ECP) { - pb->irq = irq_probe_ECP(pb); + if (pb->irq == PARPORT_IRQ_NONE) + pb->irq = irq_probe_ECP(pb); } if ((pb->irq == PARPORT_IRQ_NONE) && priv->ecr && @@ -2231,7 +2254,7 @@ p->private_data = priv; printk(KERN_INFO "%s: PC-style at 0x%lx", p->name, p->base); - if (p->base_hi && (p->modes & PARPORT_MODE_ECP)) + if (p->base_hi && priv->ecr) printk(" (0x%lx)", p->base_hi); p->irq = irq; p->dma = dma; @@ -2382,6 +2405,105 @@ } #ifdef CONFIG_PCI + +/* ITE support maintained by Rich Liu */ +static int __devinit sio_ite_8872_probe (struct pci_dev *pdev, int autoirq, + int autodma) +{ + short inta_addr[6] = { 0x2A0, 0x2C0, 0x220, 0x240, 0x1E0 }; + u32 ite8872set; + u32 ite8872_lpt, ite8872_lpthi; + u8 ite8872_irq, type; + int irq; + int i; + + DPRINTK (KERN_DEBUG "sio_ite_8872_probe()\n"); + + // make sure which one chip + for(i = 0; i < 5; i++) { + if (check_region (inta_addr[i], 0x8) >= 0) { + int test; + pci_write_config_dword (pdev, 0x60, + 0xe7000000 | inta_addr[i]); + pci_write_config_dword (pdev, 0x78, + 0x00000000 | inta_addr[i]); + test = inb (inta_addr[i]); + if (test != 0xff) break; + } + } + if(i >= 5) { + printk (KERN_INFO "parport_pc: cannot find ITE8872 INTA\n"); + return 0; + } + + type = inb (inta_addr[i] + 0x18); + type &= 0x0f; + + switch (type) { + case 0x2: + printk (KERN_INFO "parport_pc: ITE8871 found (1P)\n"); + ite8872set = 0x64200000; + break; + case 0xa: + printk (KERN_INFO "parport_pc: ITE8875 found (1P)\n"); + ite8872set = 0x64200000; + break; + case 0xe: + printk (KERN_INFO "parport_pc: ITE8872 found (2S1P)\n"); + ite8872set = 0x64e00000; + break; + case 0x6: + printk (KERN_INFO "parport_pc: ITE8873 found (1S1P)\n"); + ite8872set = 0x64a00000; + break; + case 0x8: + DPRINTK (KERN_DEBUG "parport_pc: ITE8874 found (2S)\n"); + return 0; + default: + printk (KERN_INFO "parport_pc: unknown ITE887x\n"); + printk (KERN_INFO "parport_pc: please mail 'lspci -nvv' " + "output to Rich.Liu@ite.com.tw\n"); + return 0; + } + + pci_read_config_byte (pdev, 0x3c, &ite8872_irq); + pci_read_config_dword (pdev, 0x1c, &ite8872_lpt); + ite8872_lpt &= 0x0000ff00; + pci_read_config_dword (pdev, 0x20, &ite8872_lpthi); + ite8872_lpthi &= 0x0000ff00; + pci_write_config_dword (pdev, 0x6c, 0xe3000000 | ite8872_lpt); + pci_write_config_dword (pdev, 0x70, 0xe3000000 | ite8872_lpthi); + pci_write_config_dword (pdev, 0x80, (ite8872_lpthi<<16) | ite8872_lpt); + // SET SPP&EPP , Parallel Port NO DMA , Enable All Function + // SET Parallel IRQ + pci_write_config_dword (pdev, 0x9c, + ite8872set | (ite8872_irq * 0x11111)); + + DPRINTK (KERN_DEBUG "ITE887x: The IRQ is %d.\n", ite8872_irq); + DPRINTK (KERN_DEBUG "ITE887x: The PARALLEL I/O port is 0x%x.\n", + ite8872_lpt); + DPRINTK (KERN_DEBUG "ITE887x: The PARALLEL I/O porthi is 0x%x.\n", + ite8872_lpthi); + + /* Let the user (or defaults) steer us away from interrupts */ + irq = ite8872_irq; + if (autoirq != PARPORT_IRQ_AUTO) + irq = PARPORT_IRQ_NONE; + + if (parport_pc_probe_port (ite8872_lpt, ite8872_lpthi, + irq, PARPORT_DMA_NONE, NULL)) { + printk (KERN_INFO + "parport_pc: ITE 8872 parallel port: io=0x%X", + ite8872_lpt); + if (irq != PARPORT_IRQ_NONE) + printk (", irq=%d", irq); + printk ("\n"); + return 1; + } + + return 0; +} + /* Via support maintained by Jeff Garzik */ static int __devinit sio_via_686a_probe (struct pci_dev *pdev, int autoirq, int autodma) @@ -2492,6 +2614,7 @@ enum parport_pc_sio_types { sio_via_686a = 0, /* Via VT82C686A motherboard Super I/O */ + sio_ite_8872, last_sio }; @@ -2500,6 +2623,7 @@ int (*probe) (struct pci_dev *pdev, int autoirq, int autodma); } parport_pc_superio_info[] __devinitdata = { { sio_via_686a_probe, }, + { sio_ite_8872_probe, }, }; @@ -2559,6 +2683,7 @@ avlab_2p, oxsemi_954, oxsemi_840, + aks_0100, }; @@ -2632,11 +2757,14 @@ * and 840 locks up if you write 1 to bit 2! */ /* oxsemi_954 */ { 1, { { 0, -1 }, } }, /* oxsemi_840 */ { 1, { { 0, -1 }, } }, + /* aks_0100 */ { 1, { { 0, 1 }, } }, }; static struct pci_device_id parport_pc_pci_tbl[] __devinitdata = { /* Super-IO onboard chips */ { 0x1106, 0x0686, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_via_686a }, + { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_ite_8872 }, /* PCI cards */ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_550, @@ -2725,6 +2853,8 @@ PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_954 }, { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_12PCI840, PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_840 }, + { PCI_VENDOR_ID_AKS, PCI_DEVICE_ID_AKS_ALADDINCARD, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, aks_0100 }, { 0, } /* terminate list */ }; MODULE_DEVICE_TABLE(pci,parport_pc_pci_tbl); diff -u --recursive --new-file v2.4.13/linux/drivers/pci/compat.c linux/drivers/pci/compat.c --- v2.4.13/linux/drivers/pci/compat.c Mon Jan 24 11:04:36 2000 +++ linux/drivers/pci/compat.c Sun Nov 4 09:31:58 2001 @@ -3,7 +3,7 @@ * * PCI Bus Services -- Function For Backward Compatibility * - * Copyright 1998--2000 Martin Mares + * Copyright 1998--2000 Martin Mares */ #include diff -u --recursive --new-file v2.4.13/linux/drivers/pci/gen-devlist.c linux/drivers/pci/gen-devlist.c --- v2.4.13/linux/drivers/pci/gen-devlist.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/pci/gen-devlist.c Sun Nov 4 09:31:58 2001 @@ -1,7 +1,7 @@ /* * Generate devlist.h and classlist.h from the PCI ID file. * - * (c) 1999--2000 Martin Mares + * (c) 1999--2000 Martin Mares */ #include diff -u --recursive --new-file v2.4.13/linux/drivers/pci/pci.c linux/drivers/pci/pci.c --- v2.4.13/linux/drivers/pci/pci.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/pci/pci.c Sun Nov 4 09:31:58 2001 @@ -6,7 +6,7 @@ * Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter, * David Mosberger-Tang * - * Copyright 1997 -- 2000 Martin Mares + * Copyright 1997 -- 2000 Martin Mares */ #include diff -u --recursive --new-file v2.4.13/linux/drivers/pci/pci.ids linux/drivers/pci/pci.ids --- v2.4.13/linux/drivers/pci/pci.ids Tue Oct 23 22:48:51 2001 +++ linux/drivers/pci/pci.ids Sun Nov 4 09:33:58 2001 @@ -1,10 +1,13 @@ # # List of PCI ID's # -# Maintained by Martin Mares -# If you have any new entries, send them to the maintainer. +# Maintained by Martin Mares and other volunteers from the +# Linux PCI ID's Project at http://pciids.sf.net/. New data are always +# welcome (if they are accurate), we're eagerly expecting new entries, +# so if you have anything to contribute, please visit the home page or +# send a diff -u against the most recent pci.ids to pci-ids@ucw.cz. # -# $Id: pci.ids,v 1.62 2000/06/28 10:56:36 mj Exp $ +# $Id: pci.ids,v 1.24 2001/10/28 21:55:26 mares Exp $ # # Vendors, devices and subsystems. Please keep sorted. @@ -45,6 +48,7 @@ 8086 002a PCI Hotplug Controller A 8086 002b PCI Hotplug Controller B a0f8 USB Open Host Controller + a0fc Fibre Channel Host Controller ae10 Smart-2/P RAID Controller 0e11 4030 Smart-2/P Array Controller 0e11 4031 Smart-2SL Array Controller @@ -70,6 +74,7 @@ b02f NC1120 Ethernet NIC b030 Netelligent WS 5100 b04a 10/100 TX PCI Intel WOL UTP Controller + b060 Smart Array 5300 Controller b0c6 NC3161 Fast Ethernet NIC b0c7 NC3160 Fast Ethernet NIC b0d7 NC3121 Fast Ethernet NIC @@ -84,6 +89,7 @@ b144 NC3123 Fast Ethernet NIC b163 NC3134 Fast Ethernet NIC b164 NC3135 Fast Ethernet Upgrade Module + b178 Smart Array 5i/532 b1a4 NC7131 Gigabit Server Adapter f130 NetFlex-3/P ThunderLAN 1.0 f150 NetFlex-3/P ThunderLAN 2.3 @@ -138,7 +144,7 @@ 4554 210888ET [Mach64 ET] 4654 Mach64 VT 4742 3D Rage Pro AGP 1X/2X - 1028 4082 Optiplex GX1 Onboard Display Adapter + 1028 4082 Optiplex GX1 Onboard Display Adapter 8086 4152 Rage 3D Pro AGP 4744 3D Rage Pro AGP 1X 4747 3D Rage Pro @@ -179,6 +185,9 @@ 4c52 Rage Mobility P/M 4c53 Rage Mobility L 4c54 264LT [Mach64 LT] + 4c57 Radeon Mobility M6 LW + 4c59 Radeon Mobility M6 LY + 4c5a Radeon Mobility M6 LZ 4d46 Rage Mobility M4 AGP 4d4c Rage Mobility M4 AGP 5041 Rage 128 PA @@ -207,8 +216,15 @@ 5056 Rage 128 PV 5057 Rage 128 PW 5058 Rage 128 PX + 5144 Radeon QD + 5145 Radeon QE + 5146 Radeon QF + 5147 Radeon QG + 5159 Radeon VE QY + 515a Radeon VE QZ 5245 Rage 128 RE 5246 Rage 128 RF + 5247 Rage 128 RG 524b Rage 128 RK 524c Rage 128 RL 5345 Rage 128 SE @@ -218,9 +234,12 @@ 534b Rage 128 SK 534c Rage 128 SL 534d Rage 128 SM - 534e Rage 128 4x + 534e Rage 128 SN 5354 Mach 64 VT 1002 5654 Mach 64 reference + 5446 Rage 128 Pro TF + 544c Rage 128 Pro TL + 5452 Rage 128 Pro TR 5654 264VT [Mach64 VT] 1002 5654 Mach64VT Reference 5655 264VT3 [Mach64 VT3] @@ -274,7 +293,8 @@ 000f OHCI Compliant FireWire Controller 0011 National PCI System I/O 0012 USB Controller - 0020 DP83815 + 0020 DP83815 (MacPhyter) Ethernet Controller + 0022 DP83820 10/100/1000 Ethernet Controller d001 87410 IDE 100c Tseng Labs Inc 3202 ET4000/W32p rev A @@ -348,6 +368,8 @@ 0026 DECchip 21154 0045 DECchip 21553 0046 DECchip 21554 + 103c 10c2 Hewlett-Packard NetRAID-4M + 9005 0365 Adaptec 5400S 9005 1364 Dell PowerEdge RAID Controller 2 9005 1365 Dell PowerEdge RAID Controller 2 1065 StrongARM DC21285 @@ -431,21 +453,21 @@ 007c ATM Controller (14107c00) 007d 3780IDSP [MWave] 0090 GXT 3000P - 1014 008E GXT-3000P + 1014 008e GXT-3000P 0095 20H2999 PCI Docking Bridge 0096 Chukar chipset SCSI controller - 1014 0099 iSeries 2748 DASD IOA - 1014 0098 iSeries 2763 DASD IOA 1014 0097 iSeries 2778 DASD IOA + 1014 0098 iSeries 2763 DASD IOA + 1014 0099 iSeries 2748 DASD IOA 00a5 ATM Controller (1410a500) 00a6 ATM 155MBPS MM Controller (1410a600) 00b7 256-bit Graphics Rasterizer [Fire GL1] 1902 00b8 Fire GL1 00be ATM 622MBPS Controller (1410be00) 0142 Yotta Video Compositor Input - 1014 0143 Yotta Input Controller (ytin) + 1014 0143 Yotta Input Controller (ytin) 0144 Yotta Video Compositor Output - 1014 0145 Yotta Output Controller (ytout) + 1014 0145 Yotta Output Controller (ytout) 0156 405GP PLB to PCI Bridge 01bd Netfinity ServeRAID controller 01be ServeRAID-4M @@ -475,8 +497,8 @@ c24a 90C 101e American Megatrends Inc. 1960 MegaRAID - 1028 0471 PowerEdge RAID Controller 3/QC - 1028 0493 PowerEdge RAID Controller 3/DC + 1028 0471 PowerEdge RAID Controller 3/QC + 1028 0493 PowerEdge RAID Controller 3/DC 9010 MegaRAID 9030 EIDE Controller 9031 EIDE Controller @@ -504,8 +526,8 @@ 2040 79c974 7006 AMD-751 [Irongate] System Controller 7007 AMD-751 [Irongate] AGP Bridge - 700E AMD-760 [Irongate] System Controller - 700F AMD-760 [Irongate] AGP Bridge + 700e AMD-760 [Irongate] System Controller + 700f AMD-760 [Irongate] AGP Bridge 7400 AMD-755 [Cobra] ISA 7401 AMD-755 [Cobra] IDE 7403 AMD-755 [Cobra] ACPI @@ -564,6 +586,8 @@ 9850 3DImage 9850 9880 Blade 3D PCI/AGP 1023 9880 Blade 3D + 9910 CyberBlade/XP + 9930 CyberBlade/XPm 1024 Zenith Data Systems 1025 Acer Incorporated [ALI] 1435 M1435 @@ -634,7 +658,7 @@ 0000 HYDRA 0010 ASPEN 102b Matrox Graphics, Inc. -#DJ: I've a suspicion that 0010 is a duplicate of 0d10. +# DJ: I've a suspicion that 0010 is a duplicate of 0d10. 0010 MGA-I [Impression?] 0518 MGA-II [Athena] 0519 MGA 2064W [Millennium] @@ -683,7 +707,22 @@ 102b 0328 Millennium G400 16Mb SDRAM 102b 0338 Millennium G400 16Mb SDRAM 102b 0378 Millennium G400 32Mb SDRAM + 102b 0541 Millennium G450 Dual Head + 102b 0542 Millennium G450 Dual Head LX 102b 0641 Millennium G450 32Mb SDRAM + 102b 0642 Millennium G450 32Mb SDRAM Dual Head LX + 102b 07c0 Millennium G450 Dual Head LE + 102b 07c1 Millennium G450 SDR Dual Head + 102b 0d41 Millennium G450 Dual Head PCI + 102b 0d42 Millennium G450 Dual Head LX PCI + 102b 0e00 Marvel G450 eTV + 102b 0e01 Marvel G450 eTV + 102b 0e02 Marvel G450 eTV + 102b 0e03 Marvel G450 eTV + 102b 0f80 Millennium G450 Low Profile + 102b 0f81 Millennium G450 Low Profile + 102b 0f82 Millennium G450 Low Profile DVI + 102b 0f83 Millennium G450 Low Profile DVI 102b 19d8 Millennium G400 16Mb SGRAM 102b 19f8 Millennium G400 32Mb SGRAM 102b 2159 Millennium G400 Dual Head 16Mb @@ -692,6 +731,7 @@ 102b 2f58 Millennium G400 102b 2f78 Millennium G400 102b 3693 Marvel G400 AGP + 1705 0001 Millennium G450 32MB SGRAM b16f 0e11 Matrox MGA-G400 AGP 0d10 MGA Ultima/Impression 1000 MGA G100 [Productiva] @@ -821,8 +861,8 @@ 1039 6326 SiS6326 GUI Accelerator 1092 0a50 SpeedStar A50 1092 0a70 SpeedStar A70 - 1092 4910 SpeedStar A70 - 1092 4920 SpeedStar A70 + 1092 4910 SpeedStar A70 + 1092 4920 SpeedStar A70 1569 6326 SiS6326 GUI Accelerator 7001 7001 7007 OHCI Compliant FireWire Controller @@ -948,7 +988,7 @@ 3d3d 0100 Reference Permedia 2 3D 8000 PCILynx/PCILynx2 IEEE 1394 Link Layer Controller e4bf 1010 CF1-1-SNARE - e4bf 1020 CF1-2-SNARE + e4bf 1020 CF1-2-SNARE 8009 OHCI Compliant FireWire Controller 8019 TSB12LV23 OHCI Compliant IEEE-1394 Controller 11bd 000a Studio DV500-1394 @@ -1015,8 +1055,7 @@ 9462 USB Universal Host Controller [OHCI] 9463 Power Management Controller [Bridge] 1056 ICL -# Motorola made a mistake and used 1507 instead of 1057 in some chips. -# Please look at the 1507 entry as well when updating this. +# Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this. 1057 Motorola 0001 MPC105 [Eagle] 0002 MPC106 [Grackle] @@ -1186,8 +1225,8 @@ 1022 ISP1022 1080 QLA1080 1216 QLA12160 - 101e 8471 QLA12160 on AMI MegaRAID - 101e 8493 QLA12160 on AMI MegaRAID + 101e 8471 QLA12160 on AMI MegaRAID + 101e 8493 QLA12160 on AMI MegaRAID 1240 QLA1240 1280 QLA1280 2020 ISP2020A @@ -1283,6 +1322,7 @@ 1092 Diamond Multimedia Systems 00a0 Speedstar Pro SE 00a8 Speedstar 64 + 0550 Viper V550 08d4 Supra 2260 Modem 1092 Viper V330 6120 Maximum DVD @@ -1386,7 +1426,7 @@ 14f1 1522 Bt879a Video Capture PAL I 14f1 1622 Bt879a Video Capture PAL BG 14f1 1722 Bt879a Video Capture NTSC - 1851 1850 FlyVideo'98 - Video + 1851 1850 FlyVideo'98 - Video 1851 1851 FlyVideo II 1852 1852 FlyVideo'98 - Video (with FM Tuner) 0370 Bt880 Video Capture @@ -1559,8 +1599,6 @@ 10b7 3590 TokenLink Velocity XL Adapter 4500 3c450 Cyclone/unknown 5055 3c555 Laptop Hurricane - 6055 3c556 Laptop Hurricane - 6056 3c556B Laptop Hurricane 5057 3c575 [Megahertz] 10/100 LAN CardBus 10b7 5a57 3C575 Megahertz 10/100 LAN Cardbus PC Card 5157 3c575 [Megahertz] 10/100 LAN CardBus @@ -1574,6 +1612,8 @@ 5970 3c597 EISA Fast Demon/Vortex 5b57 3c595 [Megahertz] 10/100 LAN CardBus 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card + 6055 3c556 Hurricane CardBus + 6056 3c556B Hurricane CardBus 6560 3CCFE656 Cyclone CardBus 6562 3CCFEM656 [id 6562] Cyclone CardBus 6564 3CCFEM656 [id 6564] Cyclone CardBus @@ -1684,6 +1724,7 @@ 5237 M5237 USB 5243 M5243 5247 M5247 + 5451 M5451 PCI South Bridge Audio 7101 M7101 PMU 10b9 7101 ALI M7101 Power Management Controller 10ba Mitsubishi Electric Corp. @@ -1730,6 +1771,7 @@ 0006 NM2360 [MagicMedia 256ZX] 0016 NM2380 [MagicMedia 256XL+] 10c8 0016 MagicMedia 256XL+ + 0025 [MagicMedia 256AV+] 0083 [MagicGraph 128ZV Plus] 8005 [MagicMedia 256AV Audio] 0e11 b0d1 MagicMedia 256AV Audio Device on Discovery @@ -1754,6 +1796,7 @@ 1300 ABP940-U / ABP960-U 10cd 1310 ASC1300 SCSI Adapter 2300 ABP940-UW + 2500 ABP940-U2W 10ce Radius 10cf Citicorp TTI 2001 mb86605 @@ -1791,15 +1834,15 @@ 1048 0c18 Erazor II SGRAM 1092 0550 Viper V550 1092 0552 Viper V550 - 1092 4804 Viper V550 - 1092 4808 Viper V550 + 1092 4804 Viper V550 + 1092 4808 Viper V550 1092 4810 Viper V550 1092 4812 Viper V550 1092 4815 Viper V550 1092 4820 Viper V550 with TV out 1092 4822 Viper V550 - 1092 4904 Viper V550 - 1092 4914 Viper V550 + 1092 4904 Viper V550 + 1092 4914 Viper V550 1092 8225 Viper V550 10de 0020 Riva TNT 1102 1015 Graphics Blaster CT6710 @@ -1863,11 +1906,12 @@ 0111 NV11 (GeForce2 MX DDR) 0112 GeForce2 Go 0113 NV11 (GeForce2 MXR) - 0150 NV15 (Geforce2 Pro) + 0150 NV15 (GeForce2 Pro) 107d 2840 WinFast GeForce2 GTS with TV output - 0151 NV15 DDR (Geforce2 GTS) - 0152 NV15 Bladerunner (Geforce2 Ultra) + 0151 NV15 DDR (GeForce2 GTS) + 0152 NV15 Bladerunner (GeForce2 Ultra) 0153 NV15 GL (Quadro2 Pro) + 0200 NV20 (GeForce3) 0203 Quadro DCC 10df Emulex Corporation 10df Light Pulse Fibre Channel Adapter @@ -1893,7 +1937,7 @@ 10e5 Micro Industries Corporation 10e6 Gainbery Computer Products Inc. 10e7 Vadem -10e8 Applied Micro Circuits Corporation +10e8 Applied Micro Circuits Corp. 2011 Q-Motion Video Capture/Edit board 4750 S5930 [Matchmaker] 5920 S5920 @@ -1907,7 +1951,7 @@ 80d9 PCI-9118 80da PCI-9812 811a PCI-IEEE1355-DS-DE Interface - 8170 S5933 "Matchmaker" [PCI Chipset Development Tool] + 8170 S5933 [Matchmaker] (Chipset Development Tool) 10e9 Alps Electric Co., Ltd. 10ea Intergraphics Systems 1680 IGA-1680 @@ -1989,7 +2033,7 @@ 0002 SB Live! EMU10k1 1102 0020 CT4850 SBLive! Value 1102 0021 CT4620 SBLive! - 1102 002f SBLive! mainboard implementation + 1102 002f SBLive! mainboard implementation 1102 4001 E-mu APS 1102 8022 CT4780 SBLive! Value 1102 8023 CT4790 SoundBlaster PCI512 @@ -2002,6 +2046,7 @@ 1102 8051 CT4850 SBLive! Value 7002 SB Live! 1102 0020 Gameport Joystick + 8938 ES1371 1103 Triones Technologies, Inc. 0003 HPT343 0004 HPT366 / HPT370 @@ -2066,16 +2111,16 @@ 8231 VT8231 [PCI-to-ISA Bridge] 8235 VT8235 Power Management 8305 VT8363/8365 [KT133/KM133 AGP] - 8391 VT8371 [KX133 AGP] + 8391 VT8371 [KX133 AGP] 8501 VT8501 [Apollo MVP4 AGP] 8596 VT82C596 [Apollo PRO AGP] 8597 VT82C597 [Apollo VP3 AGP] 8598 VT82C598/694x [Apollo MVP3/Pro133x AGP] 8601 VT8601 [Apollo ProMedia AGP] 8605 VT8605 [PM133 AGP] + 8691 VT82C691 [Apollo Pro] b091 VT8633 [Apollo Pro266 AGP] b099 VT8367 [KT266 AGP] - 8691 VT82C691 [Apollo Pro] 1107 Stratus Computers 0576 VIA VT82C570MV [Apollo] (Wrong vendor ID!) 1108 Proteon, Inc. @@ -2105,7 +2150,7 @@ 6037 Firepower Powerized SMP I/O ASIC 6073 Firepower Powerized SMP I/O ASIC 1111 Santa Cruz Operation -# DJ- Some people say that 0x1112 is Rockwell International ? +# DJ: Some people say that 0x1112 is Rockwell International 1112 RNS - Div. of Meret Communications Inc 2200 FDDI Adapter 2300 Fast Ethernet Adapter @@ -2115,6 +2160,7 @@ 1211 SMC2-1211TX 103c 1207 EN-1207D Fast Ethernet Adapter 1113 1211 EN-1207D Fast Ethernet Adapter + 1216 EN-1216 Ethernet Adapter 1217 EN-1217 Ethernet Adapter 5105 10Mbps Network card 9211 EN-1207D Fast Ethernet Adapter @@ -2164,10 +2210,22 @@ 0119 GDT 6128RD/6528RD/6628RD 011a GDT 6538RD/6638RD 011b GDT 6558RD/6658RD + 0120 GDT 6117RP2/6517RP2 + 0121 GDT 6127RP2/6527RP2 + 0122 GDT 6537RP2 + 0123 GDT 6557RP2 + 0124 GDT 6111RP2/6511RP2 + 0125 GDT 6121RP2/6521RP2 + 0136 GDT 6113RS/6513RS + 0137 GDT 6123RS/6523RS 0138 GDT 6118RS/6518RS/6618RS 0139 GDT 6128RS/6528RS/6628RS 013a GDT 6538RS/6638RS 013b GDT 6558RS/6658RS + 013c GDT 6533RS/6633RS + 013d GDT 6543RS/6643RS + 013e GDT 6553RS/6653RS + 013f GDT 6563RS/6663RS 0166 GDT 7113RN/7513RN/7613RN 0167 GDT 7123RN/7523RN/7623RN 0168 GDT 7118RN/7518RN/7518RN @@ -2178,10 +2236,19 @@ 016d GDT 7543RN/7643RN 016e GDT 7553RN/7653RN 016f GDT 7563RN/7663RN + 01d6 GDT 4x13RZ + 01d7 GDT 4x23RZ + 01f6 GDT 8x13RZ + 01f7 GDT 8x23RZ + 01fc GDT 8x33RZ + 01fd GDT 8x43RZ + 01fe GDT 8x53RZ + 01ff GDT 8x63RZ 0210 GDT 6519RD/6619RD 0211 GDT 6529RD/6629RD 0260 GDT 7519RN/7619RN 0261 GDT 7529RN/7629RN + 0300 GDT Raid Controller 111a Efficient Networks, Inc 0000 155P-MF1 (FPGA) 0002 155P-MF1 (ASIC) @@ -2189,13 +2256,13 @@ 111a 0000 ENI-25p Miniport ATM Adapter 0005 SpeedStream (LANAI) 111a 0001 ENI-3010 ATM - 111a 0101 ENI-3010 ATM 111a 0009 ENI-3060 ADSL (VPI=0) + 111a 0101 ENI-3010 ATM 111a 0109 ENI-3060CO ADSL (VPI=0) 111a 0809 ENI-3060 ADSL (VPI=0 or 8) 111a 0909 ENI-3060CO ADSL (VPI=0 or 8) 111a 0a09 ENI-3060 ADSL (VPI=<0..15>) - 0007 SpeedStream ADSL + 0007 SpeedStream ADSL 111a 1001 ENI-3061 ADSL [ASIC] 111b Teledyne Electronic Systems 111c Tricord Systems Inc. @@ -2273,7 +2340,7 @@ 113c Cyclone Microsystems, Inc. 0000 PCI-9060 i960 Bridge 0001 PCI-SDK [PCI i960 Evaluation Platform] - 0911 PCI-911 [PCI-based i960Jx Intelligent I/O Controller] + 0911 PCI-911 [i960Jx-based Intelligent I/O Controller] 0912 PCI-912 [i960CF-based Intelligent I/O Controller] 0913 PCI-913 0914 PCI-914 [I/O Controller w/ secondary PCI bus] @@ -2464,9 +2531,8 @@ 060f ToPIC97 0617 ToPIC95 PCI to Cardbus Bridge with ZV Support 0618 CPU to PCI and PCI to ISA bridge +# Claimed to be Lucent DSP1645 [Mars], but that's apparently incorrect. Does anyone know the correct ID? 0701 FIR Port -# This is apparently incorrect. Does anyone know the correct ID? -# 0701 Lucent DSP1645 [Mars] 0d01 FIR Port Type-DO 1179 0001 FIR Port Type-DO 117a A-Trend Technology @@ -2488,6 +2554,9 @@ 1185 Dataworld International Ltd 1186 D-Link System Inc 0100 DC21041 + 1002 Sundance Ethernet + 1300 RTL8139 Ethernet + 4000 DL2K Ethernet 1187 Advanced Technology Laboratories, Inc. 1188 Shima Seiki Manufacturing Ltd. 1189 Matsushita Electronics Co Ltd @@ -2546,8 +2615,8 @@ 119c Information Technology Inst. 119d Bug, Inc. Sapporo Japan 119e Fujitsu Microelectronics Ltd. - 0001 FireStream 155 - 0003 FireStream 50 + 0001 FireStream 155 + 0003 FireStream 50 119f Bull HN Information Systems 11a0 Convex Computer Corporation 11a1 Hamamatsu Photonics K.K. @@ -2603,8 +2672,8 @@ 11c1 Lucent Microelectronics 0440 56k WinModem 0001 0440 LT WinModem 56k Data+Fax+Voice+Dsvd - 1033 8015 LT WinModem 56k Data+Fax+Voice+Dsvd - 1033 804f LT WinModem 56k Data+Fax+Voice+Dsvd + 1033 8015 LT WinModem 56k Data+Fax+Voice+Dsvd + 1033 804f LT WinModem 56k Data+Fax+Voice+Dsvd 10cf 102c LB LT Modem V.90 56k 10cf 104a BIBLO LT Modem 56k 10cf 105f LB2 LT Modem V.90 56k @@ -2614,8 +2683,8 @@ 13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd 13e0 0440 LT WinModem 56k Data+Fax+Voice+Dsvd 13e0 0441 LT WinModem 56k Data+Fax+Voice+Dsvd - 13e0 f100 LT WinModem 56k Data+Fax+Voice+Dsvd - 13e0 f101 LT WinModem 56k Data+Fax+Voice+Dsvd + 13e0 f100 LT WinModem 56k Data+Fax+Voice+Dsvd + 13e0 f101 LT WinModem 56k Data+Fax+Voice+Dsvd 144d 2101 LT56PV Modem 149f 0440 LT WinModem 56k Data+Fax+Voice+Dsvd 0441 56k WinModem @@ -2623,15 +2692,15 @@ 1092 0440 Supra 56i 1179 0001 Internal V.90 Modem 11c1 0440 LT WinModem 56k Data+Fax - 11c1 0441 LT WinModem 56k Data+Fax + 11c1 0441 LT WinModem 56k Data+Fax 122d 4100 MDP7800-U Modem - 13e0 0040 LT WinModem 56k Data+Fax - 13e0 0100 LT WinModem 56k Data+Fax - 13e0 0410 LT WinModem 56k Data+Fax + 13e0 0040 LT WinModem 56k Data+Fax + 13e0 0100 LT WinModem 56k Data+Fax + 13e0 0410 LT WinModem 56k Data+Fax 13e0 0420 TelePath Internet 56k WinModem - 13e0 0443 LT WinModem 56k Data+Fax + 13e0 0443 LT WinModem 56k Data+Fax 1416 9804 CommWave 56k Modem - 141d 0440 LT WinModem 56k Data+Fax + 141d 0440 LT WinModem 56k Data+Fax 144f 0441 Lucent 56k V.90 DF Modem 1468 0441 Presario 56k V.90 DF Modem 0442 56k WinModem @@ -2973,12 +3042,16 @@ 2120 VideoPlex CC 2130 VideoQuest 1256 Perceptive Solutions, Inc. + 4201 PCI-2220I + 4401 PCI-2240I + 5201 PCI-2000 1257 Vertex Networks, Inc. 1258 Gilbarco, Inc. 1259 Allied Telesyn International 2560 AT-2560 Fast Ethernet Adapter (i82557B) 125a ABB Power Systems 125b Asix Electronics Corporation + 1400 ALFA GFC2204 125c Aurora Technologies, Inc. 125d ESS Technology 0000 ES336H Fax Modem (Early Model) @@ -3225,7 +3298,10 @@ 1280 Photoscript Group Ltd. 1281 Yokogawa Electric Corporation 1282 Davicom Semiconductor, Inc. + 9009 Ethernet 100/10 MBit + 9100 Ethernet 100/10 MBit 9102 Ethernet 100/10 MBit + 9132 Ethernet 100/10 MBit 1283 Integrated Technology Express, Inc. 673a IT8330G 8330 IT8330G @@ -3330,6 +3406,8 @@ 12c1 GMM Research Corp 12c2 Mentec Limited 12c3 Holtek Microelectronics Inc + 0058 PCI NE2K Ethernet + 5598 PCI NE2K Ethernet 12c4 Connect Tech Inc 12c5 Picture Elements Incorporated 0081 PCIVST [Grayscale Thresholding Engine] @@ -3509,7 +3587,9 @@ 1313 Yaskawa Electric Co. 1316 Teradyne Inc 1317 Linksys + 0981 Fast Ethernet 10/100 0985 Network Everywhere Fast Ethernet 10/100 model NC100 + 1985 Fast Ethernet 10/100 1318 Packet Engines Inc. 0911 PCI Ethernet Adapter 1319 Fortemedia, Inc @@ -3669,6 +3749,8 @@ 1384 Reality Simulation Systems Inc 1385 Netgear 620a GA620 + 622a GA622 + 630a GA630 f311 FA311 1386 Video Domain Technologies 1387 Systran Corp @@ -3685,6 +3767,11 @@ 1391 Development Concepts Inc 1392 Medialight Inc 1393 Moxa Technologies Co Ltd + 1040 Smartio C104H/PCI + 1680 Smartio C168H/PCI + 2040 Intellio CP-204J + 2180 Intellio C218 Turbo PCI + 3200 Intellio C320 Turbo PCI 1394 Level One Communications 1395 Ambicom Inc 1396 Cipher Systems Inc @@ -3736,6 +3823,7 @@ 0010 SyncLink WAN Adapter 13c1 3ware Inc 1000 3ware ATA-RAID + 1001 3ware 7000-series ATA-RAID 13c2 Technotrend Systemtechnik GmbH 13c3 Janz Computer AG 13c4 Phase Metrics @@ -3767,7 +3855,7 @@ 13de ABB Robotics Products AB 13df E-Tech Inc 0001 PCI56RVP Modem - 13df 0001 PCI56RVP Modem + 13df 0001 PCI56RVP Modem 13e0 GVC Corporation 13e1 Silicom Multimedia Systems Inc 13e2 Dynamics Research Corporation @@ -3784,7 +3872,8 @@ 13ed Raytheion E-Systems 13ee Hayes Microcomputer Products Inc 13ef Coppercom Inc -13f0 Sundance technology Inc +13f0 Sundance Technology Inc + 0201 Sundance Ethernet 13f1 Oce' - Technologies B.V. 13f2 Ford Microelectronics Inc 13f3 Mcdata Corporation @@ -3808,6 +3897,7 @@ 13fe Advantech Co. Ltd 13ff Silicon Spice Inc 1400 Artx Inc + 1401 9432 TX 1401 CR-Systems A/S 1402 Meilhaus Electronic GmbH 1403 Ascor Inc @@ -3815,6 +3905,14 @@ 1405 Excalibur Systems Inc 1406 Oce' Printing Systems GmbH 1407 Lava Computer mfg Inc + 0100 Lava Dual Serial + 0101 Lava Quatro A + 0102 Lava Quatro B + 0200 Lava Port Plus + 0201 Lava Quad A + 0202 Lava Quad B + 0500 Lava Single Serial + 0600 Lava Port 650 8000 Lava Parallel 8002 Lava Dual Parallel port A 8003 Lava Dual Parallel port B @@ -4075,8 +4173,8 @@ 14e4 0004 NetXtreme 1000BaseTX 14e4 1644 NetXtreme BCM5700 1000BaseTX 1645 NetXtreme BCM5701 Gigabit Ethernet - 0e11 007d NC6770 1000BaseSX 0e11 007c NC7770 1000BaseTX + 0e11 007d NC6770 1000BaseSX 0e11 0085 NC7780 1000BaseTX 10b7 1004 3C996-SX 1000BaseSX 10b7 1006 3C996B-T 1000BaseTX @@ -4088,6 +4186,7 @@ 14e4 0007 NetXtreme BCM5701 1000BaseSX 14e4 0008 NetXtreme BCM5701 1000BaseTX 14e4 8008 NetXtreme BCM5701 1000BaseTX + 1647 NetXtreme BCM5701 Gigabit Ethernet 5820 BCM5820 Crypto Accelerator 14e5 Pixelfusion Ltd 14e6 SHINING Technology Inc @@ -4103,29 +4202,24 @@ 14f0 CANON RESEACH CENTRE FRANCE 14f1 Conexant 1033 HCF 56k Data/Fax Modem - 1033 8077 NEC - 122d 4027 Dell Zeus - MDP3880-W(B) Data Fax Modem # Aztech - 122d 4030 Dell Mercury - MDP3880-U(B) Data Fax Modem # Aztech - 122d 4034 Dell Thor - MDP3880-W(U) Data Fax Modem # Aztech + 122d 4027 Dell Zeus - MDP3880-W(B) Data Fax Modem + 122d 4030 Dell Mercury - MDP3880-U(B) Data Fax Modem + 122d 4034 Dell Thor - MDP3880-W(U) Data Fax Modem 13e0 020d Dell Copper 13e0 020e Dell Silver - 13e0 0261 IBM # GVC 13e0 0290 Compaq Goldwing - 13e0 02a0 IBM # GVC - 13e0 02b0 IBM # GVC 13e0 02c0 Compaq Scooter - 13e0 02d0 IBM # GVC - 144f 1500 IBM P85-DF # Askey - 144f 1501 IBM P85-DF # Askey - 144f 150a IBM P85-DF # Askey - 144f 150b IBM P85-DF Low Profile # Askey - 144f 1510 IBM P85-DF Low Profile # Askey + 144f 1500 IBM P85-DF (1) + 144f 1501 IBM P85-DF (2) + 144f 150a IBM P85-DF (3) + 144f 150b IBM P85-DF Low Profile (1) + 144f 1510 IBM P85-DF Low Profile (2) 1034 HCF 56k Data/Fax/Voice Modem 1035 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 10cf 1098 Fujitsu P85-DFSV 1036 HCF 56k Data/Fax/Voice/Spkp Modem - 122d 4029 MDP3880SP-W # Aztech - 122d 4031 MDP3880SP-U # Aztech + 122d 4029 MDP3880SP-W + 122d 4031 MDP3880SP-U 13e0 0209 Dell Titanium 13e0 020a Dell Graphite 13e0 0260 Gateway Red Owl @@ -4141,80 +4235,72 @@ 1064 HCF 56k Data/Fax/Voice Modem 1065 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 1066 HCF 56k Data/Fax/Voice/Spkp Modem - 122d 4033 Dell Athena - MDP3900V-U # Aztech + 122d 4033 Dell Athena - MDP3900V-U 1433 HCF 56k Data/Fax Modem 1434 HCF 56k Data/Fax/Voice Modem 1435 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 1436 HCF 56k Data/Fax Modem 1453 HCF 56k Data/Fax Modem - 13e0 0240 IBM # GVC - 13e0 0250 IBM # GVC - 144f 1502 IBM P95-DF # Askey - 144f 1503 IBM P95-DF # Askey + 144f 1502 IBM P95-DF (1) + 144f 1503 IBM P95-DF (2) 1454 HCF 56k Data/Fax/Voice Modem 1455 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 1456 HCF 56k Data/Fax/Voice/Spkp Modem - 122d 4035 Dell Europa - MDP3900V-W # Aztech - 122d 4302 MP3930V-W(C) MiniPCI # Aztech + 122d 4035 Dell Europa - MDP3900V-W + 122d 4302 Dell MP3930V-W(C) MiniPCI 1803 HCF 56k Modem - 0e11 0023 623-LAN Grizzly # Compaq - 0e11 0043 623-LAN Yogi # Compaq + 0e11 0023 623-LAN Grizzly + 0e11 0043 623-LAN Yogi 1815 HCF 56k Modem - 0e11 0022 Grizzly # Compaq - 0e11 0042 Yogi # Compaq + 0e11 0022 Grizzly + 0e11 0042 Yogi 2003 HSF 56k Data/Fax Modem 2004 HSF 56k Data/Fax/Voice Modem 2005 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 2006 HSF 56k Data/Fax/Voice/Spkp Modem 2013 HSF 56k Data/Fax Modem - 0e11 b195 Bear # Compaq - 0e11 b196 Seminole 1 # Compaq - 0e11 b1be Seminole 2 # Compaq - 1025 8013 Acer - 1033 809d NEC - 1033 80bc NEC + 0e11 b195 Bear + 0e11 b196 Seminole 1 + 0e11 b1be Seminole 2 155d 6793 HP 155d 8850 E Machines 2014 HSF 56k Data/Fax/Voice Modem 2015 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 2016 HSF 56k Data/Fax/Voice/Spkp Modem - 2043 HSF 56k Data/Fax Modem (Worldwide SmartDAA) - 2044 HSF 56k Data/Fax/Voice Modem (Worldwide SmartDAA) - 2045 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide SmartDAA) - 2046 HSF 56k Data/Fax/Voice/Spkp Modem (Worldwide SmartDAA) + 2043 HSF 56k Data/Fax Modem (WorldW SmartDAA) + 2044 HSF 56k Data/Fax/Voice Modem (WorldW SmartDAA) + 2045 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (WorldW SmartDAA) + 2046 HSF 56k Data/Fax/Voice/Spkp Modem (WorldW SmartDAA) 2063 HSF 56k Data/Fax Modem (SmartDAA) 2064 HSF 56k Data/Fax/Voice Modem (SmartDAA) 2065 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA) 2066 HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA) 2093 HSF 56k Modem 155d 2f07 Legend - 2143 HSF 56k Data/Fax/Cell Modem (Mobile Worldwide SmartDAA) - 2144 HSF 56k Data/Fax/Voice/Cell Modem (Mobile Worldwide SmartDAA) - 2145 HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WW SmartDAA) - 2146 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mobile Worldwide SmartDAA) - 2163 HSF 56k Data/Fax/Cell Modem (Mobile SmartDAA) - 2164 HSF 56k Data/Fax/Voice/Cell Modem (Mobile SmartDAA) - 2165 HSF 56k Data/Fax/Voice/Spkp (w/Handset)/Cell Modem (Mobile SmartDAA) - 2166 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mobile SmartDAA) - 2343 HSF 56k Data/Fax CardBus Modem (Mobile Worldwide SmartDAA) - 2344 HSF 56k Data/Fax/Voice CardBus Modem (Mobile Worldwide SmartDAA) - 2345 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WW SmartDAA) - 2346 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mobile Worldwide SmartDAA) - 2363 HSF 56k Data/Fax CardBus Modem (Mobile SmartDAA) - 2364 HSF 56k Data/Fax/Voice CardBus Modem (Mobile SmartDAA) + 2143 HSF 56k Data/Fax/Cell Modem (Mob WorldW SmartDAA) + 2144 HSF 56k Data/Fax/Voice/Cell Modem (Mob WorldW SmartDAA) + 2145 HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WorldW SmartDAA) + 2146 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob WorldW SmartDAA) + 2163 HSF 56k Data/Fax/Cell Modem (Mob SmartDAA) + 2164 HSF 56k Data/Fax/Voice/Cell Modem (Mob SmartDAA) + 2165 HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob SmartDAA) + 2166 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob SmartDAA) + 2343 HSF 56k Data/Fax CardBus Modem (Mob WorldW SmartDAA) + 2344 HSF 56k Data/Fax/Voice CardBus Modem (Mob WorldW SmartDAA) + 2345 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WorldW SmartDAA) + 2346 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob WorldW SmartDAA) + 2363 HSF 56k Data/Fax CardBus Modem (Mob SmartDAA) + 2364 HSF 56k Data/Fax/Voice CardBus Modem (Mob SmartDAA) 2365 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA) - 2366 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mobile SmartDAA) - 2443 HSF 56k Data/Fax Modem (Mobile Worldwide SmartDAA) - 104d 8075 Modem # Sony - 104d 8083 Modem # Sony - 104d 8097 Modem # Sony - 2444 HSF 56k Data/Fax/Voice Modem (Mobile Worldwide SmartDAA) - 2445 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mobile WW SmartDAA) - 2446 HSF 56k Data/Fax/Voice/Spkp Modem (Mobile Worldwide SmartDAA) - 2463 HSF 56k Data/Fax Modem (Mobile SmartDAA) - 2464 HSF 56k Data/Fax/Voice Modem (Mobile SmartDAA) - 2465 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Mobile SmartDAA) - 2466 HSF 56k Data/Fax/Voice/Spkp Modem (Mobile SmartDAA) + 2366 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA) + 2443 HSF 56k Data/Fax Modem (Mob WorldW SmartDAA) + 2444 HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA) + 2445 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA) + 2446 HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA) + 2463 HSF 56k Data/Fax Modem (Mob SmartDAA) + 2464 HSF 56k Data/Fax/Voice Modem (Mob SmartDAA) + 2465 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA) + 2466 HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA) 2f00 HSF 56k HSFi Modem 13e0 8d84 IBM HSFi V.90 13e0 8d85 Compaq Stinger @@ -4239,9 +4325,7 @@ 1504 KAISER Electronics 1505 ITA INGENIEURBURO FUR TESTAUFGABEN GmbH 1506 CHAMELEON Systems Inc -# 1507 HTEC Ltd -# Commented out because there are no known HTEC chips and 1507 is already -# used by mistake by Motorola (see vendor ID 1057) +# Should be HTEC Ltd, but there are no known HTEC chips and 1507 is already used by mistake by Motorola (see vendor ID 1057). 1507 Motorola ?? / HTEC 0001 MPC105 [Eagle] 0002 MPC106 [Grackle] @@ -4616,8 +4700,11 @@ 4000 ALS4000 Audio Chipset 4005 4000 ALS4000 Audio Chipset 4033 Addtron Technology Co, Inc. + 1360 RTL8139 Ethernet 4143 Digital Equipment Corp 416c Aladdin Knowledge Systems + 0100 AladdinCARD + 0200 CPC 4444 Internext Compression Inc 4468 Bridgeport machines 4594 Cogetec Informatique Inc @@ -4782,7 +4869,7 @@ 8008 Quancom Electronic GmbH 0010 WDOG1 [PCI-Watchdog 1] 0011 PWDOG2 [PCI-Watchdog 2] -8086 Intel Corporation +8086 Intel Corp. 0007 82379AB 0039 21145 0122 82437FX @@ -4792,6 +4879,7 @@ 0486 82430ZX [Aries] 04a3 82434LX [Mercury/Neptune] 04d0 82437FX [Triton FX] + 0600 RAID Controller 0960 80960RP [i960 RP Microprocessor/Bridge] 0964 80960RP [i960 RP Microprocessor/Bridge] 1000 82542 Gigabit Ethernet Controller @@ -4802,8 +4890,10 @@ 1001 82543GC Gigabit Ethernet Controller 1004 82543GC Gigabit Ethernet Controller 1008 82544EI Gigabit Ethernet Controller + 1009 82544EI Gigabit Ethernet Controller 100c 82544GC Gigabit Ethernet Controller 100d 82544GC Gigabit Ethernet Controller + 1029 82559 Ethernet Controller 1030 82559 InBusiness 10/100 1031 82801CAM (ICH3) Chipset Ethernet Controller 1032 82801CAM (ICH3) Chipset Ethernet Controller @@ -4814,7 +4904,7 @@ 1037 82801CAM (ICH3) Chipset Ethernet Controller 1038 82801CAM (ICH3) Chipset Ethernet Controller 1130 82815 815 Chipset Host Bridge and Memory Controller Hub - 1132 82815 CGC [Chipset Graphics Controller] + 1132 82815 CGC [Chipset Graphics Controller] 1161 82806AA PCI64 Hub Advanced Programmable Interrupt Controller 1209 82559ER 1221 82092AA_0 @@ -4846,7 +4936,7 @@ 103c 1200 Ethernet Pro 10/100TX 10c3 1100 SmartEther100 SC1100 1179 0002 PCI FastEther LAN on Docker - 1259 2560 AT-2560 100 + 1259 2560 AT-2560 100 1259 2561 AT-2560 100 FX Ethernet Adapter 1266 0001 NE10/100 Adapter 8086 0001 EtherExpress PRO/100B (TX) @@ -4875,8 +4965,8 @@ 122e 82371FB PIIX ISA [Triton I] 1230 82371FB PIIX IDE [Triton I] 1231 DSVD Modem - 1234 430MX - 82371MX MPIIX [430MX PCIset - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)] - 1235 430MX - 82437MX MTSC [430MX PCIset - 82437MX Mobile System Controller (MTSC) and 82438MX Mobile Data Path (MTDP)] + 1234 430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX) + 1235 430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP) 1237 440FX - 82441FX PMC [Natoma] 1239 82371FB 123b 82380PB @@ -4891,10 +4981,13 @@ 101e 0438 MegaRaid 438 101e 0466 MegaRaid 466 101e 0467 MegaRaid 467 + 101e 09a0 PowerEdge Expandable RAID Controller 2/SC 1028 0467 PowerEdge Expandable RAID Controller 2/DC 1028 1111 PowerEdge Expandable RAID Controller 2/SC + 103c 03a2 MegaRaid 103c 10c6 MegaRaid 438 103c 10c7 MegaRaid T5 + 103c 10cc MegaRaid 1111 1111 MegaRaid 466 113c 03a2 MegaRaid 1a21 82840 840 (Carmel) Chipset Host Bridge (Hub A) @@ -4933,6 +5026,7 @@ 244b 82820 820 (Camino 2) Chipset IDE U100 244c 82820 820 (Camino 2) Chipset ISA Bridge (ICH2-M) 244e 82820 820 (Camino 2) Chipset PCI + 2485 AC'97 Audio Controller 2500 82820 820 (Camino) Chipset Host Bridge (MCH) 1043 801c P3C-2000 system chipset 2501 82820 820 (Camino) Chipset Host Bridge (MCH) @@ -4945,6 +5039,7 @@ 2531 82850 860 (Wombat) Chipset Host Bridge (MCH) 2532 82850 850 (Tehama) Chipset AGP Bridge 2533 82860 860 (Wombat) Chipset AGP Bridge + 3092 Integrated RAID 5200 EtherExpress PRO/100 Intelligent Server 5201 EtherExpress PRO/100 Intelligent Server 8086 0001 EtherExpress PRO/100 Server Ethernet Adapter @@ -5000,6 +5095,10 @@ 84e2 460GX - 84460GX AGP Bridge (GXB) 84e3 460GX - 84460GX Memory Address Controller (MAC) 84e4 460GX - 84460GX Memory Data Controller (MDC) + 9621 Integrated RAID + 9622 Integrated RAID + 9641 Integrated RAID + 96a1 Integrated RAID ffff 450NX/GX [Orion] - 82453KX/GX Memory controller [BUG] 8800 Trigem Computer Inc. 2008 Video assistent component @@ -5009,7 +5108,6 @@ 8e2e KTI 3000 ET32P2 9004 Adaptec -# FIXME: [dj] In one document I have, lot of these AIC's are actually AHA's 1078 AIC-7810 1160 AIC-1160 [Family Fibre Channel Adapter] 2178 AIC-7821 @@ -5064,8 +5162,9 @@ 7278 AHA-3940 / AIC-7872 7378 AHA-3985 / AIC-7873 7478 AHA-2944 / AIC-7874 -# FIXME: [dj] Where did the 3rd number come from in 0x7578 & 0x7678 ? +# DJ: Where did the 3rd number come from? 7578 AHA-3944 / AHA-3944W / 7875 +# DJ: Where did the 3rd number come from? 7678 AHA-4944W/UW / 7876 7778 AIC-787x 7810 AIC-7810 @@ -5311,7 +5410,7 @@ 00 UHCI 10 OHCI 80 Unspecified - Fe USB Device + fe USB Device 04 Fibre Channel 05 SMBus 06 InfiniBand diff -u --recursive --new-file v2.4.13/linux/drivers/pci/proc.c linux/drivers/pci/proc.c --- v2.4.13/linux/drivers/pci/proc.c Sat May 19 12:48:33 2001 +++ linux/drivers/pci/proc.c Sun Nov 4 09:31:58 2001 @@ -3,7 +3,7 @@ * * Procfs interface for the PCI bus. * - * Copyright (c) 1997--1999 Martin Mares + * Copyright (c) 1997--1999 Martin Mares */ #include diff -u --recursive --new-file v2.4.13/linux/drivers/pci/quirks.c linux/drivers/pci/quirks.c --- v2.4.13/linux/drivers/pci/quirks.c Sun Sep 23 11:40:59 2001 +++ linux/drivers/pci/quirks.c Sun Nov 4 09:31:58 2001 @@ -5,7 +5,7 @@ * bugs. Devices present only on certain architectures (host * bridges et cetera) should be handled in arch-specific code. * - * Copyright (c) 1999 Martin Mares + * Copyright (c) 1999 Martin Mares * * The bridge optimization stuff has been removed. If you really * have a silly BIOS which is unable to set your host bridge right, diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/Config.in linux/drivers/pcmcia/Config.in --- v2.4.13/linux/drivers/pcmcia/Config.in Fri Feb 16 16:02:36 2001 +++ linux/drivers/pcmcia/Config.in Thu Oct 25 13:53:48 2001 @@ -17,6 +17,7 @@ if [ "$CONFIG_PCI" != "n" ]; then bool ' CardBus support' CONFIG_CARDBUS fi + bool ' i82092 compatible bridge support' CONFIG_I82092 bool ' i82365 compatible bridge support' CONFIG_I82365 bool ' Databook TCIC host bridge support' CONFIG_TCIC if [ "$CONFIG_HD64465" = "y" ]; then diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/Makefile linux/drivers/pcmcia/Makefile --- v2.4.13/linux/drivers/pcmcia/Makefile Tue Oct 23 22:48:51 2001 +++ linux/drivers/pcmcia/Makefile Thu Oct 25 13:53:48 2001 @@ -29,6 +29,9 @@ ifeq ($(CONFIG_I82365),y) obj-y += i82365.o endif + ifeq ($(CONFIG_I82092),y) + obj-y += i82092.o + endif ifeq ($(CONFIG_TCIC),y) obj-y += tcic.o endif @@ -40,6 +43,9 @@ obj-m := pcmcia_core.o ds.o ifeq ($(CONFIG_I82365),y) obj-m += i82365.o + endif + ifeq ($(CONFIG_I82092),y) + obj-m += i82092.o endif ifeq ($(CONFIG_TCIC),y) obj-m += tcic.o diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/ds.c linux/drivers/pcmcia/ds.c --- v2.4.13/linux/drivers/pcmcia/ds.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/pcmcia/ds.c Thu Oct 25 13:53:47 2001 @@ -640,8 +640,8 @@ if (signal_pending(current)) return -EINTR; } - put_user(get_queued_event(user), (int *)buf); - return 4; + + return put_user(get_queued_event(user), (int *)buf) ? -EFAULT : 4; } /* ds_read */ /*====================================================================*/ diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/i82092.c linux/drivers/pcmcia/i82092.c --- v2.4.13/linux/drivers/pcmcia/i82092.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/pcmcia/i82092.c Thu Oct 25 13:53:48 2001 @@ -0,0 +1,909 @@ +/* + * Driver for Intel I82092AA PCI-PCMCIA bridge. + * + * (C) 2001 Red Hat, Inc. + * + * Author: Arjan Van De Ven + * Loosly based on i82365.c from the pcmcia-cs package + * + * $Id: i82092aa.c,v 1.2 2001/10/23 14:43:34 arjanv Exp $ + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "i82092aa.h" +#include "i82365.h" + +/* PCI core routines */ +static struct pci_device_id i82092aa_pci_ids[] = { + { + vendor:PCI_VENDOR_ID_INTEL, + device:PCI_DEVICE_ID_INTEL_82092AA_0, + subvendor:PCI_ANY_ID, + subdevice:PCI_ANY_ID, + class: 0, class_mask:0, + + }, + {} +}; + +static struct pci_driver i82092aa_pci_drv = { + name: "i82092aa", + id_table: i82092aa_pci_ids, + probe: i82092aa_pci_probe, + remove: i82092aa_pci_remove, + suspend: NULL, + resume: NULL +}; + + +/* the pccard structure and its functions */ +static struct pccard_operations i82092aa_operations = { + init: i82092aa_init, + suspend: i82092aa_suspend, + register_callback: i82092aa_register_callback, + inquire_socket: i82092aa_inquire_socket, + get_status: i82092aa_get_status, + get_socket: i82092aa_get_socket, + set_socket: i82092aa_set_socket, + get_io_map: i82092aa_get_io_map, + set_io_map: i82092aa_set_io_map, + get_mem_map: i82092aa_get_mem_map, + set_mem_map: i82092aa_set_mem_map, + proc_setup: i82092aa_proc_setup, +}; + +/* The card can do upto 4 sockets, allocate a structure for each of them */ + +struct socket_info { + int card_state; /* 0 = no socket, + 1 = empty socket, + 2 = card but not initialized, + 3 = operational card */ + int io_base; /* base io address of the socket */ + socket_cap_t cap; + + unsigned int pending_events; /* Pending events on this interface */ + + void (*handler)(void *info, u_int events); + /* callback to the driver of the card */ + void *info; /* to be passed to the handler */ + + struct pci_dev *dev; /* The PCI device for the socket */ +}; + +#define MAX_SOCKETS 4 +static struct socket_info sockets[MAX_SOCKETS]; +static int socket_count; /* shortcut */ + + +static int __init i82092aa_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + unsigned char configbyte; + int i; + + enter("i82092aa_pci_probe"); + + if (pci_enable_device(dev)) + return -EIO; + + pci_read_config_byte(dev, 0x40, &configbyte); /* PCI Configuration Control */ + switch(configbyte&6) { + case 0: + printk(KERN_INFO "i82092aa: configured as a 2 socket device.\n"); + socket_count = 2; + break; + case 2: + printk(KERN_INFO "i82092aa: configured as a 1 socket device.\n"); + socket_count = 1; + break; + case 4: + case 6: + printk(KERN_INFO "i82092aa: configured as a 4 socket device.\n"); + socket_count = 4; + break; + + default: + printk(KERN_ERR "i82092aa: Oops, you did something we didn't think of.\n"); + return -EIO; + break; + } + + for (i = 0;iresource[0].start & ~1); + if (sockets[i].io_base > 0) + request_region(sockets[i].io_base, 2, "i82092aa"); + + + sockets[i].cap.features |= SS_CAP_PCCARD; + sockets[i].cap.map_size = 0x1000; + sockets[i].cap.irq_mask = 0; + sockets[i].cap.pci_irq = dev->irq; + + if (card_present(i)) { + sockets[i].card_state = 3; + dprintk(KERN_DEBUG "i82092aa: slot %i is occupied\n",i); + } else { + dprintk(KERN_DEBUG "i82092aa: slot %i is vacant\n",i); + } + } + + /* Now, specifiy that all interrupts are to be done as PCI interrupts */ + configbyte = 0xFF; /* bitmask, one bit per event, 1 = PCI interrupt, 0 = ISA interrupt */ + pci_write_config_byte(dev, 0x50, configbyte); /* PCI Interrupt Routing Register */ + + + /* Register the interrupt handler */ + dprintk(KERN_DEBUG "Requesting interrupt %i \n",dev->irq); + if (request_irq(dev->irq, i82092aa_interrupt, SA_SHIRQ, "i82092aa", i82092aa_interrupt)) { + printk(KERN_ERR "i82092aa: Failed to register IRQ %d, aborting\n", dev->irq); + return -EIO; + } + + + if (register_ss_entry(socket_count, &i82092aa_operations) != 0) + printk(KERN_NOTICE "i82092aa: register_ss_entry() failed\n"); + + leave("i82092aa_pci_probe"); + return 0; +} + +static void __exit i82092aa_pci_remove(struct pci_dev *dev) +{ + enter("i82092aa_pci_remove"); + + free_irq(dev->irq, i82092aa_interrupt); + + leave("i82092aa_pci_remove"); +} + +static spinlock_t port_lock = SPIN_LOCK_UNLOCKED; + +/* basic value read/write functions */ + +static unsigned char indirect_read(int socket, unsigned short reg) +{ + unsigned short int port; + unsigned char val; + unsigned long flags; + spin_lock_irqsave(&port_lock,flags); + reg += socket * 0x40; + port = sockets[socket].io_base; + outb(reg,port); + val = inb(port+1); + spin_unlock_irqrestore(&port_lock,flags); + return val; +} + +static unsigned short indirect_read16(int socket, unsigned short reg) +{ + unsigned short int port; + unsigned short tmp; + unsigned long flags; + spin_lock_irqsave(&port_lock,flags); + reg = reg + socket * 0x40; + port = sockets[socket].io_base; + outb(reg,port); + tmp = inb(port+1); + reg++; + outb(reg,port); + tmp = tmp | (inb(port+1)<<8); + spin_unlock_irqrestore(&port_lock,flags); + return tmp; +} + +static void indirect_write(int socket, unsigned short reg, unsigned char value) +{ + unsigned short int port; + unsigned long flags; + spin_lock_irqsave(&port_lock,flags); + reg = reg + socket * 0x40; + port = sockets[socket].io_base; + outb(reg,port); + outb(value,port+1); + spin_unlock_irqrestore(&port_lock,flags); +} + +static void indirect_setbit(int socket, unsigned short reg, unsigned char mask) +{ + unsigned short int port; + unsigned char val; + unsigned long flags; + spin_lock_irqsave(&port_lock,flags); + reg = reg + socket * 0x40; + port = sockets[socket].io_base; + outb(reg,port); + val = inb(port+1); + val |= mask; + outb(reg,port); + outb(val,port+1); + spin_unlock_irqrestore(&port_lock,flags); +} + + +static void indirect_resetbit(int socket, unsigned short reg, unsigned char mask) +{ + unsigned short int port; + unsigned char val; + unsigned long flags; + spin_lock_irqsave(&port_lock,flags); + reg = reg + socket * 0x40; + port = sockets[socket].io_base; + outb(reg,port); + val = inb(port+1); + val &= ~mask; + outb(reg,port); + outb(val,port+1); + spin_unlock_irqrestore(&port_lock,flags); +} + +static void indirect_write16(int socket, unsigned short reg, unsigned short value) +{ + unsigned short int port; + unsigned char val; + unsigned long flags; + spin_lock_irqsave(&port_lock,flags); + reg = reg + socket * 0x40; + port = sockets[socket].io_base; + + outb(reg,port); + val = value & 255; + outb(val,port+1); + + reg++; + + outb(reg,port); + val = value>>8; + outb(val,port+1); + spin_unlock_irqrestore(&port_lock,flags); +} + +/* simple helper functions */ +/* External clock time, in nanoseconds. 120 ns = 8.33 MHz */ +static int cycle_time = 120; + +static int to_cycles(int ns) +{ + if (cycle_time!=0) + return ns/cycle_time; + else + return 0; +} + +static int to_ns(int cycles) +{ + return cycle_time*cycles; +} + + +/* Interrupt handler functionality */ + +static void i82092aa_bh(void *dummy) +{ + unsigned int events; + int i; + + for (i=0; i < socket_count; i++) { + events = xchg(&(sockets[i].pending_events),0); + printk("events = %x \n",events); + if (sockets[i].handler) + sockets[i].handler(sockets[i].info, events); + } +} + + +static struct tq_struct i82092aa_task = { + routine: i82092aa_bh +}; + + +static void i82092aa_interrupt(int irq, void *dev, struct pt_regs *regs) +{ + int i; + int loopcount = 0; + + unsigned int events, active=0; + +/* enter("i82092aa_interrupt");*/ + + while (1) { + loopcount++; + if (loopcount>20) { + printk(KERN_ERR "i82092aa: infinite eventloop in interrupt \n"); + break; + } + + active = 0; + + for (i=0;i MAX_SOCKETS)) + return 0; + if (sockets[socketno].io_base == 0) + return 0; + + + val = indirect_read(socketno, 1); /* Interface status register */ + if ((val&12)==12) { + leave("card_present 1"); + return 1; + } + + leave("card_present 0"); + return 0; +} + +static void set_bridge_state(int sock) +{ + enter("set_bridge_state"); + indirect_write(sock, I365_GBLCTL,0x00); + indirect_write(sock, I365_GENCTL,0x00); + + indirect_setbit(sock, I365_INTCTL,0x08); + leave("set_bridge_state"); +} + + + + + + +static int i82092aa_init(unsigned int s) +{ + int i; + pccard_io_map io = { 0, 0, 0, 0, 1 }; + pccard_mem_map mem = { 0, 0, 0, 0, 0, 0 }; + + enter("i82092aa_init"); + + mem.sys_stop = 0x0fff; + i82092aa_set_socket(s, &dead_socket); + for (i = 0; i < 2; i++) { + io.map = i; + i82092aa_set_io_map(s, &io); + } + for (i = 0; i < 5; i++) { + mem.map = i; + i82092aa_set_mem_map(s, &mem); + } + + leave("i82092aa_init"); + return 0; +} + +static int i82092aa_suspend(unsigned int sock) +{ + int retval; + enter("i82092aa_suspend"); + retval = i82092aa_set_socket(sock, &dead_socket); + leave("i82092aa_suspend"); + return retval; +} + +static int i82092aa_register_callback(unsigned int sock, void (*handler)(void *, unsigned int), void * info) +{ + enter("i82092aa_register_callback"); + sockets[sock].handler = handler; + sockets[sock].info = info; + if (handler == NULL) { + MOD_DEC_USE_COUNT; + } else { + MOD_INC_USE_COUNT; + } + leave("i82092aa_register_callback"); + return 0; +} /* i82092aa_register_callback */ + +static int i82092aa_inquire_socket(unsigned int sock, socket_cap_t *cap) +{ + enter("i82092aa_inquire_socket"); + *cap = sockets[sock].cap; + leave("i82092aa_inquire_socket"); + return 0; +} /* i82092aa_inquire_socket */ + + +static int i82092aa_get_status(unsigned int sock, u_int *value) +{ + unsigned int status; + + enter("i82092aa_get_status"); + + status = indirect_read(sock,I365_STATUS); /* Interface Status Register */ + *value = 0; + + if ((status & I365_CS_DETECT) == I365_CS_DETECT) { + *value |= SS_DETECT; + } + + /* IO cards have a different meaning of bits 0,1 */ + /* Also notice the inverse-logic on the bits */ + if (indirect_read(sock, I365_INTCTL) & I365_PC_IOCARD) { + /* IO card */ + if (!(status & I365_CS_STSCHG)) + *value |= SS_STSCHG; + } else { /* non I/O card */ + if (!(status & I365_CS_BVD1)) + *value |= SS_BATDEAD; + if (!(status & I365_CS_BVD2)) + *value |= SS_BATWARN; + + } + + if (status & I365_CS_WRPROT) + (*value) |= SS_WRPROT; /* card is write protected */ + + if (status & I365_CS_READY) + (*value) |= SS_READY; /* card is not busy */ + + if (status & I365_CS_POWERON) + (*value) |= SS_POWERON; /* power is applied to the card */ + + + leave("i82092aa_get_status"); + return 0; +} + + +static int i82092aa_get_socket(unsigned int sock, socket_state_t *state) +{ + unsigned char reg,vcc,vpp; + + enter("i82092aa_get_socket"); + state->flags = 0; + state->Vcc = 0; + state->Vpp = 0; + state->io_irq = 0; + state->csc_mask = 0; + + /* First the power status of the socket */ + reg = indirect_read(sock,I365_POWER); /* PCTRL - Power Control Register */ + + if (reg & I365_PWR_AUTO) + state->flags |= SS_PWR_AUTO; /* Automatic Power Switch */ + + if (reg & I365_PWR_OUT) + state->flags |= SS_OUTPUT_ENA; /* Output signals are enabled */ + + vcc = reg & I365_VCC_MASK; vpp = reg & I365_VPP1_MASK; + + if (reg & I365_VCC_5V) { /* Can still be 3.3V, in this case the Vcc value will be overwritten later */ + state->Vcc = 50; + + if (vpp == I365_VPP1_5V) + state->Vpp = 50; + if (vpp == I365_VPP1_12V) + state->Vpp = 120; + + } + + if ((reg & I365_VCC_3V)==I365_VCC_3V) + state->Vcc = 33; + + + /* Now the IO card, RESET flags and IO interrupt */ + + reg = indirect_read(sock, I365_INTCTL); /* IGENC, Interrupt and General Control */ + + if ((reg & I365_PC_RESET)==0) + state->flags |= SS_RESET; + if (reg & I365_PC_IOCARD) + state->flags |= SS_IOCARD; /* This is an IO card */ + + /* Set the IRQ number */ + if (sockets[sock].dev!=NULL) + state->io_irq = sockets[sock].dev->irq; + + /* Card status change */ + reg = indirect_read(sock, I365_CSCINT); /* CSCICR, Card Status Change Interrupt Configuration */ + + if (reg & I365_CSC_DETECT) + state->csc_mask |= SS_DETECT; /* Card detect is enabled */ + + if (state->flags & SS_IOCARD) {/* IO Cards behave different */ + if (reg & I365_CSC_STSCHG) + state->csc_mask |= SS_STSCHG; + } else { + if (reg & I365_CSC_BVD1) + state->csc_mask |= SS_BATDEAD; + if (reg & I365_CSC_BVD2) + state->csc_mask |= SS_BATWARN; + if (reg & I365_CSC_READY) + state->csc_mask |= SS_READY; + } + + leave("i82092aa_get_socket"); + return 0; +} + +static int i82092aa_set_socket(unsigned int sock, socket_state_t *state) +{ + unsigned char reg; + + enter("i82092aa_set_socket"); + + /* First, set the global controller options */ + + set_bridge_state(sock); + + /* Values for the IGENC register */ + + reg = 0; + if (!(state->flags & SS_RESET)) /* The reset bit has "inverse" logic */ + reg = reg | I365_PC_RESET; + if (state->flags & SS_IOCARD) + reg = reg | I365_PC_IOCARD; + + indirect_write(sock,I365_INTCTL,reg); /* IGENC, Interrupt and General Control Register */ + + /* Power registers */ + + reg = I365_PWR_NORESET; /* default: disable resetdrv on resume */ + + if (state->flags & SS_PWR_AUTO) { + printk("Auto power\n"); + reg |= I365_PWR_AUTO; /* automatic power mngmnt */ + } + if (state->flags & SS_OUTPUT_ENA) { + printk("Power Enabled \n"); + reg |= I365_PWR_OUT; /* enable power */ + } + + switch (state->Vcc) { + case 0: + break; + case 50: + printk("setting voltage to Vcc to 5V on socket %i\n",sock); + reg |= I365_VCC_5V; + break; + default: + printk("i82092aa: i82092aa_set_socket called with invalid VCC power value: %i ", state->Vcc); + leave("i82092aa_set_socket"); + return -EINVAL; + } + + + switch (state->Vpp) { + case 0: + printk("not setting Vpp on socket %i\n",sock); + break; + case 50: + printk("setting Vpp to 5.0 for socket %i\n",sock); + reg |= I365_VPP1_5V | I365_VPP2_5V; + break; + case 120: + printk("setting Vpp to 12.0\n"); + reg |= I365_VPP1_12V | I365_VPP2_12V; + break; + default: + printk("i82092aa: i82092aa_set_socket called with invalid VPP power value: %i ", state->Vcc); + leave("i82092aa_set_socket"); + return -EINVAL; + } + + if (reg != indirect_read(sock,I365_POWER)) /* only write if changed */ + indirect_write(sock,I365_POWER,reg); + + /* Enable specific interrupt events */ + + reg = 0x00; + if (state->csc_mask & SS_DETECT) { + reg |= I365_CSC_DETECT; + } + if (state->flags & SS_IOCARD) { + if (state->csc_mask & SS_STSCHG) + reg |= I365_CSC_STSCHG; + } else { + if (state->csc_mask & SS_BATDEAD) + reg |= I365_CSC_BVD1; + if (state->csc_mask & SS_BATWARN) + reg |= I365_CSC_BVD2; + if (state->csc_mask & SS_READY) + reg |= I365_CSC_READY; + + } + + /* now write the value and clear the (probably bogus) pending stuff by doing a dummy read*/ + + indirect_write(sock,I365_CSCINT,reg); + (void)indirect_read(sock,I365_CSC); + + leave("i82092aa_set_socket"); + return 0; +} + +static int i82092aa_get_io_map(unsigned int sock, struct pccard_io_map *io) +{ + unsigned char map, ioctl, addr; + + enter("i82092aa_get_io_map"); + map = io->map; + if (map > 1) { + leave("i82092aa_get_io_map with -EINVAL"); + return -EINVAL; + } + + /* FIXME: How does this fit in with the PCI resource (re)allocation */ + io->start = indirect_read16(sock, I365_IO(map)+I365_W_START); + io->stop = indirect_read16(sock, I365_IO(map)+I365_W_START); + + ioctl = indirect_read(sock,I365_IOCTL); /* IOCREG: I/O Control Register */ + addr = indirect_read(sock,I365_ADDRWIN); /* */ + + io->speed = to_ns(ioctl & I365_IOCTL_WAIT(map)) ? 1 : 0; /* check this out later */ + io->flags = 0; + + if (addr & I365_IOCTL_16BIT(map)) + io->flags |= MAP_AUTOSZ; + + leave("i82092aa_get_io_map"); + return 0; +} + +static int i82092aa_set_io_map(unsigned sock, struct pccard_io_map *io) +{ + unsigned char map, ioctl; + + enter("i82092aa_set_io_map"); + + map = io->map; + + /* Check error conditions */ + if (map > 1) { + leave("i82092aa_set_io_map with invalid map"); + return -EINVAL; + } + if ((io->start > 0xffff) || (io->stop > 0xffff) || (io->stop < io->start)){ + leave("i82092aa_set_io_map with invalid io"); + return -EINVAL; + } + + /* Turn off the window before changing anything */ + if (indirect_read(sock, I365_ADDRWIN) & I365_ENA_IO(map)) + indirect_resetbit(sock, I365_ADDRWIN, I365_ENA_IO(map)); + +/* printk("set_io_map: Setting range to %x - %x \n",io->start,io->stop); */ + + /* write the new values */ + indirect_write16(sock,I365_IO(map)+I365_W_START,io->start); + indirect_write16(sock,I365_IO(map)+I365_W_STOP,io->stop); + + ioctl = indirect_read(sock,I365_IOCTL) & ~I365_IOCTL_MASK(map); + + if (io->flags & (MAP_16BIT|MAP_AUTOSZ)) + ioctl |= I365_IOCTL_16BIT(map); + + indirect_write(sock,I365_IOCTL,ioctl); + + /* Turn the window back on if needed */ + if (io->flags & MAP_ACTIVE) + indirect_setbit(sock,I365_ADDRWIN,I365_ENA_IO(map)); + + leave("i82092aa_set_io_map"); + return 0; +} + +static int i82092aa_get_mem_map(unsigned sock, struct pccard_mem_map *mem) +{ + unsigned short base, i; + unsigned char map, addr; + + enter("i82092aa_get_mem_map"); + + mem->flags = 0; + mem->speed = 0; + map = mem->map; + if (map > 4) { + leave("i82092aa_get_mem_map: -EINVAL"); + return -EINVAL; + } + + addr = indirect_read(sock, I365_ADDRWIN); + + if (addr & I365_ENA_MEM(map)) + mem->flags |= MAP_ACTIVE; /* yes this mapping is active */ + + base = I365_MEM(map); + + /* Find the start address - this register also has mapping info */ + + i = indirect_read16(sock,base+I365_W_START); + if (i & I365_MEM_16BIT) + mem->flags |= MAP_16BIT; + if (i & I365_MEM_0WS) + mem->flags |= MAP_0WS; + + mem->sys_start = ((unsigned long)(i & 0x0fff) << 12); + + /* Find the end address - this register also has speed info */ + i = indirect_read16(sock,base+I365_W_STOP); + if (i & I365_MEM_WS0) + mem->speed = 1; + if (i & I365_MEM_WS1) + mem->speed += 2; + mem->speed = to_ns(mem->speed); + mem->sys_stop = ( (unsigned long)(i & 0x0fff) << 12) + 0x0fff; + + /* Find the card start address, also some more MAP attributes */ + + i = indirect_read16(sock, base+I365_W_OFF); + if (i & I365_MEM_WRPROT) + mem->flags |= MAP_WRPROT; + if (i & I365_MEM_REG) + mem->flags |= MAP_ATTRIB; + mem->card_start = ( (unsigned long)(i & 0x3fff)<12) + mem->sys_start; + mem->card_start &= 0x3ffffff; + + printk("Card %i is from %x to %x \n",sock,mem->sys_start,mem->sys_stop); + + leave("i82092aa_get_mem_map"); + return 0; + +} + +static int i82092aa_set_mem_map(unsigned sock, struct pccard_mem_map *mem) +{ + unsigned short base, i; + unsigned char map; + + enter("i82092aa_set_mem_map"); + + map = mem->map; + if (map > 4) { + leave("i82092aa_set_mem_map: invalid map"); + return -EINVAL; + } + + + if ( (mem->card_start > 0x3ffffff) || (mem->sys_start > mem->sys_stop) || + (mem->speed > 1000) ) { + leave("i82092aa_set_mem_map: invalid address / speed"); + printk("invalid mem map for socket %i : %x to %x with a start of %x \n",sock,mem->sys_start, mem->sys_stop, mem->card_start); + return -EINVAL; + } + + /* Turn off the window before changing anything */ + if (indirect_read(sock, I365_ADDRWIN) & I365_ENA_MEM(map)) + indirect_resetbit(sock, I365_ADDRWIN, I365_ENA_MEM(map)); + + +/* printk("set_mem_map: Setting map %i range to %x - %x on socket %i, speed is %i, active = %i \n",map, mem->sys_start,mem->sys_stop,sock,mem->speed,mem->flags & MAP_ACTIVE); */ + + /* write the start address */ + base = I365_MEM(map); + i = (mem->sys_start >> 12) & 0x0fff; + if (mem->flags & MAP_16BIT) + i |= I365_MEM_16BIT; + if (mem->flags & MAP_0WS) + i |= I365_MEM_0WS; + indirect_write16(sock,base+I365_W_START,i); + + /* write the stop address */ + + i= (mem->sys_stop >> 12) & 0x0fff; + switch (to_cycles(mem->speed)) { + case 0: + break; + case 1: + i |= I365_MEM_WS0; + break; + case 2: + i |= I365_MEM_WS1; + break; + default: + i |= I365_MEM_WS1 | I365_MEM_WS0; + break; + } + + indirect_write16(sock,base+I365_W_STOP,i); + + /* card start */ + + i = ((mem->card_start - mem->sys_start) >> 12) & 0x3fff; + if (mem->flags & MAP_WRPROT) + i |= I365_MEM_WRPROT; + if (mem->flags & MAP_ATTRIB) { +/* printk("requesting attribute memory for socket %i\n",sock);*/ + i |= I365_MEM_REG; + } else { +/* printk("requesting normal memory for socket %i\n",sock);*/ + } + indirect_write16(sock,base+I365_W_OFF,i); + + /* Enable the window if necessary */ + if (mem->flags & MAP_ACTIVE) + indirect_setbit(sock, I365_ADDRWIN, I365_ENA_MEM(map)); + + leave("i82092aa_set_mem_map"); + return 0; +} + +static void i82092aa_proc_setup(unsigned int sock, struct proc_dir_entry *base) +{ + +} +/* Module stuff */ + +static int i82092aa_module_init(void) +{ + enter("i82092aa_module_init"); + pci_register_driver(&i82092aa_pci_drv); + leave("i82092aa_module_init"); + return 0; +} + +static void i82092aa_module_exit(void) +{ + int i; + enter("i82092aa_module_exit"); + pci_unregister_driver(&i82092aa_pci_drv); + unregister_ss_entry(&i82092aa_operations); + if (sockets[0].io_base>0) + release_region(sockets[0].io_base, 2); + leave("i82092aa_module_exit"); +} + +module_init(i82092aa_module_init); +module_exit(i82092aa_module_exit); + diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/i82092aa.h linux/drivers/pcmcia/i82092aa.h --- v2.4.13/linux/drivers/pcmcia/i82092aa.h Wed Dec 31 16:00:00 1969 +++ linux/drivers/pcmcia/i82092aa.h Sun Nov 4 09:58:59 2001 @@ -0,0 +1,43 @@ +#ifndef _INCLUDE_GUARD_i82092aa_H_ +#define _INCLUDE_GUARD_i82092aa_H_ + +/* $Id: i82092aa.h,v 1.1.1.1 2001/09/19 14:53:15 dwmw2 Exp $ */ + +/* Debuging defines */ +#ifdef NOTRACE +#define enter(x) printk("Enter: %s, %s line %i\n",x,__FILE__,__LINE__) +#define leave(x) printk("Leave: %s, %s line %i\n",x,__FILE__,__LINE__) +#define dprintk(fmt, args...) printk(fmt , ## args) +#else +#define enter(x) do {} while (0) +#define leave(x) do {} while (0) +#define dprintk(fmt, args...) do {} while (0) +#endif + + + +/* prototypes */ + +static int i82092aa_pci_probe(struct pci_dev *dev, const struct pci_device_id *id); +static void i82092aa_pci_remove(struct pci_dev *dev); +static int card_present(int socketno); +static void i82092aa_interrupt(int irq, void *dev, struct pt_regs *regs); + + + + +static int i82092aa_get_status(unsigned int sock, u_int *value); +static int i82092aa_get_socket(unsigned int sock, socket_state_t *state); +static int i82092aa_set_socket(unsigned int sock, socket_state_t *state); +static int i82092aa_get_io_map(unsigned int sock, struct pccard_io_map *io); +static int i82092aa_set_io_map(unsigned int sock, struct pccard_io_map *io); +static int i82092aa_get_mem_map(unsigned int sock, struct pccard_mem_map *mem); +static int i82092aa_set_mem_map(unsigned int sock, struct pccard_mem_map *mem); +static int i82092aa_init(unsigned int s); +static int i82092aa_suspend(unsigned int sock); +static int i82092aa_register_callback(unsigned int sock, void (*handler)(void *, unsigned int), void * info); +static int i82092aa_inquire_socket(unsigned int sock, socket_cap_t *cap); +static void i82092aa_proc_setup(unsigned int sock, struct proc_dir_entry *base); + +#endif + diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/sa1100_assabet.c linux/drivers/pcmcia/sa1100_assabet.c --- v2.4.13/linux/drivers/pcmcia/sa1100_assabet.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/pcmcia/sa1100_assabet.c Thu Oct 25 13:53:48 2001 @@ -10,29 +10,29 @@ #include #include #include - +#include static int assabet_pcmcia_init(struct pcmcia_init *init){ int irq, res; /* Enable CF bus: */ - BCR_clear(BCR_CF_BUS_OFF); + ASSABET_BCR_clear(ASSABET_BCR_CF_BUS_OFF); /* All those are inputs */ - GPDR &= ~(GPIO_CF_CD | GPIO_CF_BVD2 | GPIO_CF_BVD1 | GPIO_CF_IRQ); + GPDR &= ~(ASSABET_GPIO_CF_CD | ASSABET_GPIO_CF_BVD2 | ASSABET_GPIO_CF_BVD1 | ASSABET_GPIO_CF_IRQ); /* Set transition detect */ - set_GPIO_IRQ_edge( GPIO_CF_CD|GPIO_CF_BVD2|GPIO_CF_BVD1, GPIO_BOTH_EDGES ); - set_GPIO_IRQ_edge( GPIO_CF_IRQ, GPIO_FALLING_EDGE ); + set_GPIO_IRQ_edge( ASSABET_GPIO_CF_CD|ASSABET_GPIO_CF_BVD2|ASSABET_GPIO_CF_BVD1, GPIO_BOTH_EDGES ); + set_GPIO_IRQ_edge( ASSABET_GPIO_CF_IRQ, GPIO_FALLING_EDGE ); /* Register interrupts */ - irq = IRQ_GPIO_CF_CD; + irq = ASSABET_IRQ_GPIO_CF_CD; res = request_irq( irq, init->handler, SA_INTERRUPT, "CF_CD", NULL ); if( res < 0 ) goto irq_err; - irq = IRQ_GPIO_CF_BVD2; + irq = ASSABET_IRQ_GPIO_CF_BVD2; res = request_irq( irq, init->handler, SA_INTERRUPT, "CF_BVD2", NULL ); if( res < 0 ) goto irq_err; - irq = IRQ_GPIO_CF_BVD1; + irq = ASSABET_IRQ_GPIO_CF_BVD1; res = request_irq( irq, init->handler, SA_INTERRUPT, "CF_BVD1", NULL ); if( res < 0 ) goto irq_err; @@ -47,12 +47,12 @@ static int assabet_pcmcia_shutdown(void) { /* disable IRQs */ - free_irq( IRQ_GPIO_CF_CD, NULL ); - free_irq( IRQ_GPIO_CF_BVD2, NULL ); - free_irq( IRQ_GPIO_CF_BVD1, NULL ); + free_irq( ASSABET_IRQ_GPIO_CF_CD, NULL ); + free_irq( ASSABET_IRQ_GPIO_CF_BVD2, NULL ); + free_irq( ASSABET_IRQ_GPIO_CF_BVD1, NULL ); /* Disable CF bus: */ - BCR_set(BCR_CF_BUS_OFF); + ASSABET_BCR_set(ASSABET_BCR_CF_BUS_OFF); return 0; } @@ -68,13 +68,13 @@ levels=GPLR; - state_array->state[1].detect=((levels & GPIO_CF_CD)==0)?1:0; + state_array->state[1].detect=((levels & ASSABET_GPIO_CF_CD)==0)?1:0; - state_array->state[1].ready=(levels & GPIO_CF_IRQ)?1:0; + state_array->state[1].ready=(levels & ASSABET_GPIO_CF_IRQ)?1:0; - state_array->state[1].bvd1=(levels & GPIO_CF_BVD1)?1:0; + state_array->state[1].bvd1=(levels & ASSABET_GPIO_CF_BVD1)?1:0; - state_array->state[1].bvd2=(levels & GPIO_CF_BVD2)?1:0; + state_array->state[1].bvd2=(levels & ASSABET_GPIO_CF_BVD2)?1:0; state_array->state[1].wrprot=0; /* Not available on Assabet. */ @@ -90,7 +90,7 @@ if(info->sock>1) return -1; if(info->sock==1) - info->irq=IRQ_GPIO_CF_IRQ; + info->irq=ASSABET_IRQ_GPIO_CF_IRQ; return 0; } @@ -110,7 +110,7 @@ switch(configure->vcc){ case 0: - value &= ~BCR_CF_PWR; + value &= ~ASSABET_BCR_CF_PWR; break; case 50: @@ -118,7 +118,7 @@ __FUNCTION__); case 33: /* Can only apply 3.3V to the CF slot. */ - value |= BCR_CF_PWR; + value |= ASSABET_BCR_CF_PWR; break; default: @@ -128,11 +128,11 @@ return -1; } - value = (configure->reset) ? (value | BCR_CF_RST) : (value & ~BCR_CF_RST); + value = (configure->reset) ? (value | ASSABET_BCR_CF_RST) : (value & ~ASSABET_BCR_CF_RST); /* Silently ignore Vpp, output enable, speaker enable. */ - BCR = BCR_value = value; + ASSABET_BCR = BCR_value = value; restore_flags(flags); diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/sa1100_cerf.c linux/drivers/pcmcia/sa1100_cerf.c --- v2.4.13/linux/drivers/pcmcia/sa1100_cerf.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/pcmcia/sa1100_cerf.c Thu Oct 25 13:53:48 2001 @@ -16,17 +16,12 @@ static int cerf_pcmcia_init(struct pcmcia_init *init){ int irq, res; - /* Enable CF bus: */ -// BCR_clear(BCR_CF_BUS_OFF); - - /* All those are inputs */ GPDR &= ~(GPIO_CF_CD | GPIO_CF_BVD2 | GPIO_CF_BVD1 | GPIO_CF_IRQ); + GPDR |= (GPIO_CF_RESET); - /* Set transition detect */ set_GPIO_IRQ_edge( GPIO_CF_CD|GPIO_CF_BVD2|GPIO_CF_BVD1, GPIO_BOTH_EDGES ); set_GPIO_IRQ_edge( GPIO_CF_IRQ, GPIO_FALLING_EDGE ); - /* Register interrupts */ irq = IRQ_GPIO_CF_CD; res = request_irq( irq, init->handler, SA_INTERRUPT, "CF_CD", NULL ); if( res < 0 ) goto irq_err; @@ -37,7 +32,6 @@ res = request_irq( irq, init->handler, SA_INTERRUPT, "CF_BVD1", NULL ); if( res < 0 ) goto irq_err; - /* There's only one slot, but it's "Slot 1": */ return 2; irq_err: @@ -47,13 +41,9 @@ static int cerf_pcmcia_shutdown(void) { - /* disable IRQs */ free_irq( IRQ_GPIO_CF_CD, NULL ); free_irq( IRQ_GPIO_CF_BVD2, NULL ); free_irq( IRQ_GPIO_CF_BVD1, NULL ); - - /* Disable CF bus: */ -// BCR_set(BCR_CF_BUS_OFF); return 0; } @@ -61,6 +51,11 @@ static int cerf_pcmcia_socket_state(struct pcmcia_state_array *state_array){ unsigned long levels; +#ifdef CONFIG_SA1100_CERF_CPLD + int i = 0; +#else + int i = 1; +#endif if(state_array->size<2) return -1; @@ -69,19 +64,19 @@ levels=GPLR; - state_array->state[1].detect=((levels & GPIO_CF_CD)==0)?1:0; + state_array->state[i].detect=((levels & GPIO_CF_CD)==0)?1:0; - state_array->state[1].ready=(levels & GPIO_CF_IRQ)?1:0; + state_array->state[i].ready=(levels & GPIO_CF_IRQ)?1:0; - state_array->state[1].bvd1=(levels & GPIO_CF_BVD1)?1:0; + state_array->state[i].bvd1=(levels & GPIO_CF_BVD1)?1:0; - state_array->state[1].bvd2=(levels & GPIO_CF_BVD2)?1:0; + state_array->state[i].bvd2=(levels & GPIO_CF_BVD2)?1:0; - state_array->state[1].wrprot=0; /* Not available on Assabet. */ + state_array->state[i].wrprot=0; - state_array->state[1].vs_3v=1; /* Can only apply 3.3V on Assabet. */ + state_array->state[i].vs_3v=1; - state_array->state[1].vs_Xv=0; + state_array->state[i].vs_Xv=0; return 1; } @@ -90,7 +85,11 @@ if(info->sock>1) return -1; +#ifdef CONFIG_SA1100_CERF_CPLD + if(info->sock==0) +#else if(info->sock==1) +#endif info->irq=IRQ_GPIO_CF_IRQ; return 0; @@ -99,28 +98,31 @@ static int cerf_pcmcia_configure_socket(const struct pcmcia_configure *configure) { - unsigned long value, flags; + unsigned long flags; - if(configure->sock>1) return -1; + if(configure->sock>1) + return -1; - if(configure->sock==0) return 0; +#ifdef CONFIG_SA1100_CERF_CPLD + if(configure->sock==1) +#else + if(configure->sock==0) +#endif + return 0; save_flags_cli(flags); -// value = BCR_value; - switch(configure->vcc){ case 0: -// value &= ~BCR_CF_PWR; break; case 50: - printk(KERN_WARNING "%s(): CS asked for 5V, applying 3.3V...\n", - __FUNCTION__); - - case 33: /* Can only apply 3.3V to the CF slot. */ -// value |= BCR_CF_PWR; - break; + case 33: +#ifdef CONFIG_SA1100_CERF_CPLD + GPDR |= GPIO_PWR_SHUTDOWN; + GPCR |= GPIO_PWR_SHUTDOWN; +#endif + break; default: printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __FUNCTION__, @@ -129,11 +131,20 @@ return -1; } -// value = (configure->reset) ? (value | BCR_CF_RST) : (value & ~BCR_CF_RST); - - /* Silently ignore Vpp, output enable, speaker enable. */ - -// BCR = BCR_value = value; + if(configure->reset) + { +#ifdef CONFIG_SA1100_CERF_CPLD + GPDR |= GPIO_CF_RESET; + GPSR |= GPIO_CF_RESET; +#endif + } + else + { +#ifdef CONFIG_SA1100_CERF_CPLD + GPDR |= GPIO_CF_RESET; + GPCR |= GPIO_CF_RESET; +#endif + } restore_flags(flags); diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/sa1100_generic.c linux/drivers/pcmcia/sa1100_generic.c --- v2.4.13/linux/drivers/pcmcia/sa1100_generic.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/pcmcia/sa1100_generic.c Thu Oct 25 13:53:48 2001 @@ -54,6 +54,7 @@ #include #include #include +#include #include "sa1100.h" @@ -375,11 +376,26 @@ * * Returns: 0 */ -static int sa1100_pcmcia_suspend(unsigned int sock){ +static int sa1100_pcmcia_suspend(unsigned int sock) +{ + struct pcmcia_configure conf; + int ret; DEBUG(2, "%s(): suspending socket %u\n", __FUNCTION__, sock); - return 0; + conf.sock = sock; + conf.vcc = 0; + conf.vpp = 0; + conf.output = 0; + conf.speaker = 0; + conf.reset = 1; + + ret = pcmcia_low_level->configure_socket(&conf); + + if (ret == 0) + sa1100_pcmcia_socket[sock].cs_state = dead_socket; + + return ret; } diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/sa1100_neponset.c linux/drivers/pcmcia/sa1100_neponset.c --- v2.4.13/linux/drivers/pcmcia/sa1100_neponset.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/pcmcia/sa1100_neponset.c Thu Oct 25 13:53:48 2001 @@ -11,6 +11,7 @@ #include #include #include +#include static int neponset_pcmcia_init(struct pcmcia_init *init){ int return_val=0; diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/sa1100_simpad.c linux/drivers/pcmcia/sa1100_simpad.c --- v2.4.13/linux/drivers/pcmcia/sa1100_simpad.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/pcmcia/sa1100_simpad.c Thu Oct 25 13:53:48 2001 @@ -1,5 +1,5 @@ /* - * drivers/pcmcia/sa1100_pangolin.c + * drivers/pcmcia/sa1100_simpad.c * * PCMCIA implementation routines for simpad * @@ -10,16 +10,23 @@ #include #include #include + +extern long get_cs3_shadow(void); +extern void set_cs3_bit(int value); +extern void clear_cs3_bit(int value); + static int simpad_pcmcia_init(struct pcmcia_init *init){ int irq, res; /* set GPIO_CF_CD & GPIO_CF_IRQ as inputs */ GPDR &= ~(GPIO_CF_CD|GPIO_CF_IRQ); - //init_simpad_cs3(); - printk("\nCS3:%x\n",cs3_shadow); - PCMCIA_setbit(PCMCIA_RESET); - PCMCIA_clearbit(PCMCIA_BUFF_DIS); + + set_cs3_bit(PCMCIA_RESET); + clear_cs3_bit(PCMCIA_BUFF_DIS); + clear_cs3_bit(PCMCIA_RESET); + + clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1); /* Set transition detect */ set_GPIO_IRQ_edge( GPIO_CF_CD, GPIO_BOTH_EDGES ); @@ -42,11 +49,12 @@ { /* disable IRQs */ free_irq( IRQ_GPIO_CF_CD, NULL ); - + /* Disable CF bus: */ - - PCMCIA_setbit(PCMCIA_BUFF_DIS); - PCMCIA_clearbit(PCMCIA_RESET); + + //set_cs3_bit(PCMCIA_BUFF_DIS); + clear_cs3_bit(PCMCIA_RESET); + return 0; } @@ -54,10 +62,11 @@ *state_array) { unsigned long levels; + unsigned long *cs3reg = CS3_BASE; if(state_array->size<2) return -1; - memset(state_array->state, 0, + memset(state_array->state, 0, (state_array->size)*sizeof(struct pcmcia_state)); levels=GPLR; @@ -72,10 +81,15 @@ state_array->state[1].wrprot=0; /* Not available on Simpad. */ - state_array->state[1].vs_3v=1; /* Can only apply 3.3V on Simpad. */ - - state_array->state[1].vs_Xv=0; - + + if((*cs3reg & 0x0c) == 0x0c) { + state_array->state[1].vs_3v=0; + state_array->state[1].vs_Xv=0; + } else + { + state_array->state[1].vs_3v=1; + state_array->state[1].vs_Xv=0; + } return 1; } @@ -100,21 +114,27 @@ save_flags_cli(flags); - /* Murphy: BUS_ON different from POWER ? */ + /* Murphy: see table of MIC2562a-1 */ switch(configure->vcc){ case 0: - PCMCIA_setbit(PCMCIA_BUFF_DIS); + clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1); + break; + + case 33: + clear_cs3_bit(VCC_3V_EN|EN0); + set_cs3_bit(VCC_5V_EN|EN1); break; - case 33: case 50: - PCMCIA_setbit(PCMCIA_BUFF_DIS); + clear_cs3_bit(VCC_5V_EN|EN1); + set_cs3_bit(VCC_3V_EN|EN0); break; default: printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __FUNCTION__, configure->vcc); + clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1); restore_flags(flags); return -1; } @@ -126,7 +146,7 @@ return 0; } -struct pcmcia_low_level simpad_pcmcia_ops = { +struct pcmcia_low_level simpad_pcmcia_ops = { simpad_pcmcia_init, simpad_pcmcia_shutdown, simpad_pcmcia_socket_state, diff -u --recursive --new-file v2.4.13/linux/drivers/pcmcia/sa1100_stork.c linux/drivers/pcmcia/sa1100_stork.c --- v2.4.13/linux/drivers/pcmcia/sa1100_stork.c Tue Oct 23 22:48:51 2001 +++ linux/drivers/pcmcia/sa1100_stork.c Thu Oct 25 13:53:48 2001 @@ -161,7 +161,7 @@ */ switch (configure->vcc) { case 0: - storkClearLatchA(STORK_PCMCIA_PULL_UPS_POWER_ON); +/* storkClearLatchA(STORK_PCMCIA_PULL_UPS_POWER_ON); */ storkClearLatchA(POWER); break; diff -u --recursive --new-file v2.4.13/linux/drivers/pnp/Config.in linux/drivers/pnp/Config.in --- v2.4.13/linux/drivers/pnp/Config.in Sun Aug 12 13:27:59 2001 +++ linux/drivers/pnp/Config.in Thu Oct 25 14:01:51 2001 @@ -8,8 +8,4 @@ dep_tristate ' ISA Plug and Play support' CONFIG_ISAPNP $CONFIG_PNP -if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then - dep_bool ' PNPBIOS support (EXPERIMENTAL)' CONFIG_PNPBIOS $CONFIG_PNP -fi - endmenu diff -u --recursive --new-file v2.4.13/linux/drivers/pnp/quirks.c linux/drivers/pnp/quirks.c --- v2.4.13/linux/drivers/pnp/quirks.c Fri Dec 29 14:07:22 2000 +++ linux/drivers/pnp/quirks.c Sun Nov 4 09:31:58 2001 @@ -8,7 +8,7 @@ * * Heavily based on PCI quirks handling which is * - * Copyright (c) 1999 Martin Mares + * Copyright (c) 1999 Martin Mares */ #include diff -u --recursive --new-file v2.4.13/linux/drivers/s390/block/dasd.c linux/drivers/s390/block/dasd.c --- v2.4.13/linux/drivers/s390/block/dasd.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/s390/block/dasd.c Thu Oct 25 13:58:35 2001 @@ -2563,7 +2563,6 @@ unsigned long flags; dasd_device_t *device; - MOD_INC_USE_COUNT; if ((!inp) || !(inp->i_rdev)) { rc = -EINVAL; goto fail; @@ -2595,13 +2594,10 @@ if (atomic_inc_return (&device->open_count) == 1 ) { if ( device->discipline->owner ) __MOD_INC_USE_COUNT(device->discipline->owner); - } else { - MOD_DEC_USE_COUNT; } unlock: spin_unlock_irqrestore(&discipline_lock,flags); fail: - if (rc) MOD_DEC_USE_COUNT; return rc; } @@ -2637,13 +2633,11 @@ rc = -ENODEV; goto out; } - // fsync_dev (inp->i_rdev); /* sync the device */ count = atomic_dec_return (&device->open_count); if ( count == 0) { invalidate_buffers (inp->i_rdev); if ( device->discipline->owner ) __MOD_DEC_USE_COUNT(device->discipline->owner); - MOD_DEC_USE_COUNT; } else if ( count == -1 ) { /* paranoia only */ atomic_set (&device->open_count,0); printk (KERN_WARNING PRINTK_HEADER @@ -2656,6 +2650,7 @@ static struct block_device_operations dasd_device_operations = { + owner:THIS_MODULE, open:dasd_open, release:dasd_release, ioctl:dasd_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/s390/block/xpram.c linux/drivers/s390/block/xpram.c --- v2.4.13/linux/drivers/s390/block/xpram.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/s390/block/xpram.c Thu Oct 25 13:58:35 2001 @@ -608,7 +608,6 @@ dev->size,dev->device_name, atomic_read(&(dev->usage))); atomic_inc(&(dev->usage)); - MOD_INC_USE_COUNT; return 0; /* success */ } @@ -627,7 +626,6 @@ /* but flush it right now */ /* Everything is already flushed by caller -- AV */ } - MOD_DEC_USE_COUNT; return(0); } @@ -740,6 +738,7 @@ #if (XPRAM_VERSION == 24) struct block_device_operations xpram_devops = { + owner: THIS_MODULE, ioctl: xpram_ioctl, open: xpram_open, release: xpram_release, diff -u --recursive --new-file v2.4.13/linux/drivers/s390/char/tapeblock.c linux/drivers/s390/char/tapeblock.c --- v2.4.13/linux/drivers/s390/char/tapeblock.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/s390/char/tapeblock.c Thu Oct 25 13:58:35 2001 @@ -40,6 +40,7 @@ #else static struct file_operations tapeblock_fops = { #endif + owner : THIS_MODULE, open : tapeblock_open, /* open */ release : tapeblock_release, /* release */ }; @@ -184,9 +185,6 @@ ti->cqr=NULL; s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags); -#ifdef MODULE - MOD_INC_USE_COUNT; -#endif /* MODULE */ return 0; } @@ -221,9 +219,6 @@ s390irq_spin_lock_irqsave (ti->devinfo.irq, lockflags); tapestate_set (ti, TS_UNUSED); s390irq_spin_unlock_irqrestore (ti->devinfo.irq, lockflags); -#ifdef MODULE - MOD_DEC_USE_COUNT; -#endif /* MODULE */ invalidate_buffers(inode->i_rdev); return 0; } diff -u --recursive --new-file v2.4.13/linux/drivers/sbus/char/aurora.c linux/drivers/sbus/char/aurora.c --- v2.4.13/linux/drivers/sbus/char/aurora.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/sbus/char/aurora.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: aurora.c,v 1.17 2001/10/13 08:27:50 davem Exp $ +/* $Id: aurora.c,v 1.18 2001/10/26 17:59:31 davem Exp $ * linux/drivers/sbus/char/aurora.c -- Aurora multiport driver * * Copyright (c) 1999 by Oliver Aldulea (oli at bv dot ro) @@ -2454,7 +2454,7 @@ #ifdef AURORA_DEBUG printk("cleanup_module: aurora_release_drivers\n"); -#endif; +#endif aurora_release_drivers(); for (i = 0; i < AURORA_NBOARD; i++) diff -u --recursive --new-file v2.4.13/linux/drivers/sbus/char/jsflash.c linux/drivers/sbus/char/jsflash.c --- v2.4.13/linux/drivers/sbus/char/jsflash.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/sbus/char/jsflash.c Thu Oct 25 13:58:35 2001 @@ -501,7 +501,6 @@ jdp = &jsf0.dv[dev]; jdp->refcnt++; - MOD_INC_USE_COUNT; return 0; } @@ -531,7 +530,6 @@ --jdp->refcnt; } /* N.B. Doesn't lo->file need an fput?? */ - MOD_DEC_USE_COUNT; return 0; } @@ -549,6 +547,7 @@ static struct miscdevice jsf_dev = { JSF_MINOR, "jsflash", &jsf_fops }; static struct block_device_operations jsfd_fops = { + owner: THIS_MODULE, open: jsfd_open, release: jsfd_release, ioctl: jsfd_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/sbus/char/zs.c linux/drivers/sbus/char/zs.c --- v2.4.13/linux/drivers/sbus/char/zs.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/sbus/char/zs.c Tue Oct 30 15:08:11 2001 @@ -1,4 +1,4 @@ -/* $Id: zs.c,v 1.67 2001/10/13 08:27:50 davem Exp $ +/* $Id: zs.c,v 1.68 2001/10/25 18:48:03 davem Exp $ * zs.c: Zilog serial port driver for the Sparc. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -1933,7 +1933,7 @@ static void show_serial_version(void) { - char *revision = "$Revision: 1.67 $"; + char *revision = "$Revision: 1.68 $"; char *version, *p; version = strchr(revision, ' '); @@ -2058,16 +2058,7 @@ if (mapped_addr != 0) { return (struct sun_zslayout *) mapped_addr; } else { - pgd_t *pgd = pgd_offset_k((unsigned long)vaddr[0]); - pmd_t *pmd = pmd_offset(pgd, (unsigned long)vaddr[0]); - pte_t *pte = pte_offset(pmd, (unsigned long)vaddr[0]); - unsigned long base = pte_val(*pte) & _PAGE_PADDR; - - /* Translate PROM's mapping we captured at boot - * time into physical address. - */ - base += ((unsigned long)vaddr[0] & ~PAGE_MASK); - return (struct sun_zslayout *) base; + return (struct sun_zslayout *) prom_virt_to_phys((unsigned long)vaddr[0], 0); } } #else /* !(__sparc_v9__) */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/53c7,8xx.c linux/drivers/scsi/53c7,8xx.c --- v2.4.13/linux/drivers/scsi/53c7,8xx.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/53c7,8xx.c Thu Oct 25 13:53:48 2001 @@ -1867,8 +1867,10 @@ */ timeout = jiffies + 5 * HZ / 10; - while ((hostdata->test_completed == -1) && jiffies < timeout) + while ((hostdata->test_completed == -1) && jiffies < timeout) { barrier(); + cpu_relax(); + } failed = 1; if (hostdata->test_completed == -1) @@ -1951,8 +1953,10 @@ restore_flags(flags); timeout = jiffies + 5 * HZ; /* arbitrary */ - while ((hostdata->test_completed == -1) && jiffies < timeout) + while ((hostdata->test_completed == -1) && jiffies < timeout) { barrier(); + cpu_relax(); + } NCR53c7x0_write32 (DSA_REG, 0); if (hostdata->test_completed == 2) { diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/53c7xx.c linux/drivers/scsi/53c7xx.c --- v2.4.13/linux/drivers/scsi/53c7xx.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/53c7xx.c Thu Oct 25 13:53:48 2001 @@ -6119,6 +6119,3 @@ return 1; } #endif /* def MODULE */ - -static Scsi_Host_Template driver_template = NCR53c7xx; -#include "scsi_module.c" diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/53c7xx.h linux/drivers/scsi/53c7xx.h --- v2.4.13/linux/drivers/scsi/53c7xx.h Mon Sep 18 14:09:49 2000 +++ linux/drivers/scsi/53c7xx.h Thu Oct 25 13:53:48 2001 @@ -51,33 +51,6 @@ #ifndef NCR53c710_H #define NCR53c710_H -#include - -/* - * Prevent name space pollution in hosts.c, and only provide the - * define we need to get the NCR53c7x0 driver into the host template - * array. - */ - -#include - -extern int NCR53c7xx_abort(Scsi_Cmnd *); -extern int NCR53c7xx_detect(Scsi_Host_Template *tpnt); -extern int NCR53c7xx_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); -extern int NCR53c7xx_reset(Scsi_Cmnd *, unsigned int); -#ifdef MODULE -extern int NCR53c7xx_release(struct Scsi_Host *); -#else -#define NCR53c7xx_release NULL -#endif - -#define NCR53c7xx {NULL, NULL, NULL, NULL, \ - "NCR53c{7,8}xx (rel 17)", NCR53c7xx_detect,\ - NULL, /* info */ NULL, /* command, deprecated */ NULL, \ - NCR53c7xx_queue_command, NCR53c7xx_abort, NCR53c7xx_reset, \ - NULL /* slave attach */, scsicam_bios_param, /* can queue */ 24, \ - /* id */ 7, 127 /* old SG_ALL */, /* cmd per lun */ 3, \ - /* present */ 0, /* unchecked isa dma */ 0, DISABLE_CLUSTERING} #ifndef HOSTS_C @@ -1503,6 +1476,13 @@ /* These could be more efficient, given that we are always memory mapped, * but they don't give the same problems as the write macros, so leave * them. */ +#ifdef __mc68000__ +#define NCR53c7x0_read8(address) \ + ((unsigned int)raw_inb((u32)NCR53c7x0_address_memory + ((u32)(address)^3)) ) + +#define NCR53c7x0_read16(address) \ + ((unsigned int)raw_inw((u32)NCR53c7x0_address_memory + ((u32)(address)^2))) +#else #define NCR53c7x0_read8(address) \ (NCR53c7x0_memory_mapped ? \ (unsigned int)readb((u32)NCR53c7x0_address_memory + ((u32)(address)^3)) : \ @@ -1512,6 +1492,7 @@ (NCR53c7x0_memory_mapped ? \ (unsigned int)readw((u32)NCR53c7x0_address_memory + ((u32)(address)^2)) : \ inw(NCR53c7x0_address_io + (address))) +#endif /* mc68000 */ #else #define NCR53c7x0_read8(address) \ (NCR53c7x0_memory_mapped ? \ @@ -1523,10 +1504,16 @@ (unsigned int)readw((u32)NCR53c7x0_address_memory + (u32)(address)) : \ inw(NCR53c7x0_address_io + (address))) #endif + +#ifdef __mc68000__ +#define NCR53c7x0_read32(address) \ + ((unsigned int) raw_inl((u32)NCR53c7x0_address_memory + (u32)(address))) +#else #define NCR53c7x0_read32(address) \ (NCR53c7x0_memory_mapped ? \ (unsigned int) readl((u32)NCR53c7x0_address_memory + (u32)(address)) : \ inl(NCR53c7x0_address_io + (address))) +#endif /* mc68000*/ #ifdef BIG_ENDIAN /* If we are big-endian, then we are not Intel, so probably don't have diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/a2091.c linux/drivers/scsi/a2091.c --- v2.4.13/linux/drivers/scsi/a2091.c Mon Nov 27 17:57:34 2000 +++ linux/drivers/scsi/a2091.c Thu Oct 25 13:53:48 2001 @@ -190,6 +190,7 @@ struct Scsi_Host *instance; unsigned long address; struct zorro_dev *z = NULL; + wd33c93_regs regs; if (!MACH_IS_AMIGA || called) return 0; @@ -215,8 +216,9 @@ instance->irq = IRQ_AMIGA_PORTS; instance->unique_id = z->slotaddr; DMA(instance)->DAWR = DAWR_A2091; - wd33c93_init(instance, (wd33c93_regs *)&(DMA(instance)->SASR), - dma_setup, dma_stop, WD33C93_FS_8_10); + regs.SASR = &(DMA(instance)->SASR); + regs.SCMD = &(DMA(instance)->SCMD); + wd33c93_init(instance, regs, dma_setup, dma_stop, WD33C93_FS_8_10); if (num_a2091++ == 0) { first_instance = instance; a2091_template = instance->hostt; diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/a3000.c linux/drivers/scsi/a3000.c --- v2.4.13/linux/drivers/scsi/a3000.c Mon Nov 27 17:57:34 2000 +++ linux/drivers/scsi/a3000.c Thu Oct 25 13:53:48 2001 @@ -171,35 +171,41 @@ int __init a3000_detect(Scsi_Host_Template *tpnt) { - static unsigned char called = 0; - - if (called) - return 0; + wd33c93_regs regs; if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(A3000_SCSI)) return 0; if (!request_mem_region(0xDD0000, 256, "wd33c93")) - return -EBUSY; + return 0; tpnt->proc_name = "A3000"; tpnt->proc_info = &wd33c93_proc_info; a3000_host = scsi_register (tpnt, sizeof(struct WD33C93_hostdata)); - if (a3000_host == NULL) { - release_mem_region(0xDD0000, 256); - return 0; - } + if (a3000_host == NULL) + goto fail_register; + a3000_host->base = ZTWO_VADDR(0xDD0000); a3000_host->irq = IRQ_AMIGA_PORTS; DMA(a3000_host)->DAWR = DAWR_A3000; - wd33c93_init(a3000_host, (wd33c93_regs *)&(DMA(a3000_host)->SASR), - dma_setup, dma_stop, WD33C93_FS_12_15); - request_irq(IRQ_AMIGA_PORTS, a3000_intr, SA_SHIRQ, "A3000 SCSI", - a3000_intr); + regs.SASR = &(DMA(a3000_host)->SASR); + regs.SCMD = &(DMA(a3000_host)->SCMD); + wd33c93_init(a3000_host, regs, dma_setup, dma_stop, WD33C93_FS_12_15); + if (request_irq(IRQ_AMIGA_PORTS, a3000_intr, SA_SHIRQ, "A3000 SCSI", + a3000_intr)) + goto fail_irq; DMA(a3000_host)->CNTR = CNTR_PDMD | CNTR_INTEN; - called = 1; return 1; + +fail_irq: +#ifdef MODULE + wd33c93_release(); +#endif /* MODULE */ + scsi_unregister(a3000_host); +fail_register: + release_mem_region(0xDD0000, 256); + return 0; } #define HOSTS_C @@ -208,13 +214,13 @@ #include "scsi_module.c" -int a3000_release(struct Scsi_Host *instance) +int __exit a3000_release(struct Scsi_Host *instance) { #ifdef MODULE wd33c93_release(); +#endif /* MODULE*/ DMA(instance)->CNTR = 0; release_mem_region(0xDD0000, 256); free_irq(IRQ_AMIGA_PORTS, a3000_intr); -#endif return 1; } diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7770.c linux/drivers/scsi/aic7xxx/aic7770.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7770.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7770.c Thu Oct 25 13:53:48 2001 @@ -9,27 +9,35 @@ * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright - * notice immediately at the beginning of the file, without modification, - * this list of conditions, and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aic7770.c#12 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7770.c#14 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7770.c,v 1.1 2000/09/16 20:02:27 gibbs Exp $ */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7770_linux.c linux/drivers/scsi/aic7xxx/aic7770_linux.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7770_linux.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7770_linux.c Thu Oct 25 13:53:48 2001 @@ -1,7 +1,7 @@ /* * Linux driver attachment glue for aic7770 based controllers. * - * Copyright (c) 2000 Adaptec Inc. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,25 +10,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7770_linux.c#7 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7770_linux.c#9 $ */ #include "aic7xxx_osm.h" diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx.c linux/drivers/scsi/aic7xxx/aic7xxx.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx.c Thu Oct 25 13:53:48 2001 @@ -2,6 +2,7 @@ * Core routines and tables shareable across OS platforms. * * Copyright (c) 1994-2001 Justin T. Gibbs. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,25 +11,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aic7xxx.c#44 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#50 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.c,v 1.61 2000/11/13 03:35:43 gibbs Exp $ */ @@ -129,6 +138,7 @@ #include "aic7xxx_seq.h" /**************************** Function Declarations ***************************/ +static void ahc_force_renegotiation(struct ahc_softc *ahc); static struct ahc_tmode_tstate* ahc_alloc_tstate(struct ahc_softc *ahc, u_int scsi_id, char channel); @@ -203,9 +213,6 @@ static void ahc_add_curscb_to_free_list(struct ahc_softc *ahc); static u_int ahc_rem_wscb(struct ahc_softc *ahc, u_int scbpos, u_int prev); -static int ahc_abort_scbs(struct ahc_softc *ahc, int target, - char channel, int lun, u_int tag, - role_t role, uint32_t status); static void ahc_reset_current_bus(struct ahc_softc *ahc); #ifdef AHC_DUMP_SEQ static void ahc_dumpseq(struct ahc_softc *ahc); @@ -240,6 +247,7 @@ ahc_outb(ahc, SCSISIGO, 0); /* De-assert BSY */ ahc_outb(ahc, MSG_OUT, MSG_NOOP); /* No message to send */ ahc_outb(ahc, SXFRCTL1, ahc_inb(ahc, SXFRCTL1) & ~BITBUCKET); + ahc_outb(ahc, LASTPHASE, P_BUSFREE); /* * Ensure that the sequencer's idea of TQINPOS @@ -705,19 +713,20 @@ MSG_TYPE_INITIATOR_MSGIN; ahc->msgin_index = 0; } - } else { + } +#if AHC_TARGET_MODE + else { if (bus_phase == P_MESGOUT) { ahc->msg_type = MSG_TYPE_TARGET_MSGOUT; ahc->msgin_index = 0; } -#if AHC_TARGET_MODE else ahc_setup_target_msgin(ahc, &devinfo, scb); -#endif } +#endif } ahc_handle_message_phase(ahc); @@ -1063,10 +1072,16 @@ else ahc_outb(ahc, MSG_OUT, mesg_out); } + /* + * Force a renegotiation with this target just in + * case we are out of sync for some external reason + * unknown (or unreported) by the target. + */ + ahc_force_renegotiation(ahc); ahc_outb(ahc, CLRINT, CLRSCSIINT); ahc_unpause(ahc); } else if ((status & SELTO) != 0) { - u_int scbptr; + u_int scbptr; /* Stop the selection */ ahc_outb(ahc, SCSISEQ, 0); @@ -1102,6 +1117,16 @@ ahc_freeze_devq(ahc, scb); } ahc_outb(ahc, CLRINT, CLRSCSIINT); + /* + * Force a renegotiation with this target just in + * case the cable was pulled and will later be + * re-attached. The target may forget its negotiation + * settings with us should it attempt to reselect + * during the interruption. The target will not issue + * a unit attention in this case, so we must always + * renegotiate. + */ + ahc_force_renegotiation(ahc); ahc_restart(ahc); } else if ((status & BUSFREE) != 0 && (ahc_inb(ahc, SIMODE1) & ENBUSFREE) != 0) { @@ -1167,7 +1192,6 @@ printerror = 0; } else if (ahc_sent_msg(ahc, AHCMSG_1B, MSG_BUS_DEV_RESET, TRUE)) { - struct ahc_devinfo devinfo; #ifdef __FreeBSD__ /* * Don't mark the user's request for this BDR @@ -1277,6 +1301,27 @@ } } +/* + * Force renegotiation to occur the next time we initiate + * a command to the current device. + */ +static void +ahc_force_renegotiation(struct ahc_softc *ahc) +{ + struct ahc_devinfo devinfo; + struct ahc_initiator_tinfo *targ_info; + struct ahc_tmode_tstate *tstate; + + ahc_fetch_devinfo(ahc, &devinfo); + targ_info = ahc_fetch_transinfo(ahc, + devinfo.channel, + devinfo.our_scsiid, + devinfo.target, + &tstate); + ahc_update_neg_request(ahc, &devinfo, tstate, + targ_info, /*force*/TRUE); +} + #define AHC_MAX_STEPS 2000 void ahc_clear_critical_section(struct ahc_softc *ahc) @@ -1382,21 +1427,9 @@ hscb->scsiid, hscb->lun, hscb->cdb_len); - printf("Shared Data: %#02x %#02x %#02x %#02x\n", - hscb->shared_data.cdb[0], - hscb->shared_data.cdb[1], - hscb->shared_data.cdb[2], - hscb->shared_data.cdb[3]); - printf(" %#02x %#02x %#02x %#02x\n", - hscb->shared_data.cdb[4], - hscb->shared_data.cdb[5], - hscb->shared_data.cdb[6], - hscb->shared_data.cdb[7]); - printf(" %#02x %#02x %#02x %#02x\n", - hscb->shared_data.cdb[8], - hscb->shared_data.cdb[9], - hscb->shared_data.cdb[10], - hscb->shared_data.cdb[11]); + printf("Shared Data: "); + for (i = 0; i < sizeof(hscb->shared_data.cdb); i++) + printf("%#02x", hscb->shared_data.cdb[i]); printf(" dataptr:%#x datacnt:%#x sgptr:%#x tag:%#x\n", ahc_le32toh(hscb->dataptr), ahc_le32toh(hscb->datacnt), @@ -2296,7 +2329,7 @@ } /* - * Build a wide negotiateion message in our message + * Build a wide negotiation message in our message * buffer based on the input parameters. */ static void @@ -2358,6 +2391,8 @@ ahc_outb(ahc, CLRSINT1, CLRATNO); } ahc_outb(ahc, MSG_OUT, MSG_NOOP); + ahc_outb(ahc, SEQ_FLAGS2, + ahc_inb(ahc, SEQ_FLAGS2) & ~TARGET_MSG_PENDING); } /* @@ -2994,6 +3029,7 @@ } break; } +#ifdef AHC_TARGET_MODE case MSG_BUS_DEV_RESET: ahc_handle_devreset(ahc, devinfo, CAM_BDR_SENT, @@ -3005,18 +3041,20 @@ case MSG_ABORT_TAG: case MSG_ABORT: case MSG_CLEAR_QUEUE: -#ifdef AHC_TARGET_MODE + { + int tag; + /* Target mode messages */ if (devinfo->role != ROLE_TARGET) { reject = TRUE; break; } + tag = SCB_LIST_NULL; + if (ahc->msgin_buf[0] == MSG_ABORT_TAG) + tag = ahc_inb(ahc, INITIATOR_TAG); ahc_abort_scbs(ahc, devinfo->target, devinfo->channel, - devinfo->lun, - ahc->msgin_buf[0] == MSG_ABORT_TAG - ? SCB_LIST_NULL - : ahc_inb(ahc, INITIATOR_TAG), - ROLE_TARGET, CAM_REQ_ABORTED); + devinfo->lun, tag, ROLE_TARGET, + CAM_REQ_ABORTED); tstate = ahc->enabled_targets[devinfo->our_scsiid]; if (tstate != NULL) { @@ -3027,12 +3065,14 @@ ahc_queue_lstate_event(ahc, lstate, devinfo->our_scsiid, ahc->msgin_buf[0], - /*arg*/0); + /*arg*/tag); ahc_send_lstate_events(ahc, lstate); } } - done = MSGLOOP_MSGCOMPLETE; + ahc_restart(ahc); + done = MSGLOOP_TERMINATED; break; + } #endif case MSG_TERM_IO_PROC: default: @@ -3501,8 +3541,10 @@ { /* The IRQMS bit is only valid on VL and EISA chips */ - if ((ahc->chip & AHC_PCI) != 0) - ahc->unpause &= ~IRQMS; + if ((ahc->chip & AHC_PCI) == 0) + ahc->unpause = ahc_inb(ahc, HCNTRL) & IRQMS; + else + ahc->unpause = 0; ahc->pause = ahc->unpause | PAUSE; /* XXX The shared scb data stuff should be deprecated */ if (ahc->scb_data == NULL) { @@ -3842,11 +3884,11 @@ /* Allocate SCB resources */ scb_data->scbarray = - (struct scb *)malloc(sizeof(struct scb) * AHC_SCB_MAX, + (struct scb *)malloc(sizeof(struct scb) * AHC_SCB_MAX_ALLOC, M_DEVBUF, M_NOWAIT); if (scb_data->scbarray == NULL) return (ENOMEM); - memset(scb_data->scbarray, 0, sizeof(struct scb) * AHC_SCB_MAX); + memset(scb_data->scbarray, 0, sizeof(struct scb) * AHC_SCB_MAX_ALLOC); /* Determine the number of hardware SCBs and initialize them */ @@ -3881,7 +3923,7 @@ /*lowaddr*/BUS_SPACE_MAXADDR_32BIT, /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, - AHC_SCB_MAX * sizeof(struct hardware_scb), + AHC_SCB_MAX_ALLOC * sizeof(struct hardware_scb), /*nsegments*/1, /*maxsegsz*/BUS_SPACE_MAXSIZE_32BIT, /*flags*/0, &scb_data->hscb_dmat) != 0) { @@ -3902,7 +3944,7 @@ /* And permanently map them */ ahc_dmamap_load(ahc, scb_data->hscb_dmat, scb_data->hscb_dmamap, scb_data->hscbs, - AHC_SCB_MAX * sizeof(struct hardware_scb), + AHC_SCB_MAX_ALLOC * sizeof(struct hardware_scb), ahc_dmamap_cb, &scb_data->hscb_busaddr, /*flags*/0); scb_data->init_level++; @@ -3913,7 +3955,7 @@ /*lowaddr*/BUS_SPACE_MAXADDR_32BIT, /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, - AHC_SCB_MAX * sizeof(struct scsi_sense_data), + AHC_SCB_MAX_ALLOC * sizeof(struct scsi_sense_data), /*nsegments*/1, /*maxsegsz*/BUS_SPACE_MAXSIZE_32BIT, /*flags*/0, &scb_data->sense_dmat) != 0) { @@ -3934,7 +3976,7 @@ /* And permanently map them */ ahc_dmamap_load(ahc, scb_data->sense_dmat, scb_data->sense_dmamap, scb_data->sense, - AHC_SCB_MAX * sizeof(struct scsi_sense_data), + AHC_SCB_MAX_ALLOC * sizeof(struct scsi_sense_data), ahc_dmamap_cb, &scb_data->sense_busaddr, /*flags*/0); scb_data->init_level++; @@ -3954,7 +3996,8 @@ scb_data->init_level++; /* Perform initial CCB allocation */ - memset(scb_data->hscbs, 0, AHC_SCB_MAX * sizeof(struct hardware_scb)); + memset(scb_data->hscbs, 0, + AHC_SCB_MAX_ALLOC * sizeof(struct hardware_scb)); ahc_alloc_scbs(ahc); if (scb_data->numscbs == 0) { @@ -4046,7 +4089,7 @@ int i; scb_data = ahc->scb_data; - if (scb_data->numscbs >= AHC_SCB_MAX) + if (scb_data->numscbs >= AHC_SCB_MAX_ALLOC) /* Can't allocate any more */ return; @@ -4075,7 +4118,8 @@ physaddr = sg_map->sg_physaddr; newcount = (PAGE_SIZE / (AHC_NSEG * sizeof(struct ahc_dma_seg))); - for (i = 0; scb_data->numscbs < AHC_SCB_MAX && i < newcount; i++) { + newcount = MIN(newcount, (AHC_SCB_MAX_ALLOC - scb_data->numscbs)); + for (i = 0; i < newcount; i++) { struct scb_platform_data *pdata; #ifndef __linux__ int error; @@ -4147,7 +4191,7 @@ if ((ahc->flags & AHC_PAGESCBS) != 0) sprintf(buf, "%d/%d SCBs", - ahc->scb_data->maxhscbs, AHC_SCB_MAX); + ahc->scb_data->maxhscbs, AHC_MAX_QUEUE); else sprintf(buf, "%d SCBs", ahc->scb_data->maxhscbs); } @@ -4313,7 +4357,7 @@ ahc_outb(ahc, SEQ_FLAGS, 0); ahc_outb(ahc, SEQ_FLAGS2, 0); - if (ahc->scb_data->maxhscbs < AHC_SCB_MAX) { + if (ahc->scb_data->maxhscbs < AHC_SCB_MAX_ALLOC) { ahc->flags |= AHC_PAGESCBS; } else { ahc->flags &= ~AHC_PAGESCBS; @@ -5517,24 +5561,40 @@ maxlun = lun + 1; } - for (;i < maxtarget; i++) { - for (j = minlun;j < maxlun; j++) - ahc_unbusy_tcl(ahc, BUILD_TCL(i << 4, j)); - } + if (role != ROLE_TARGET) { + for (;i < maxtarget; i++) { + for (j = minlun;j < maxlun; j++) { + u_int scbid; + u_int tcl; - /* - * Go through the disconnected list and remove any entries we - * have queued for completion, 0'ing their control byte too. - * We save the active SCB and restore it ourselves, so there - * is no reason for this search to restore it too. - */ - ahc_search_disc_list(ahc, target, channel, lun, tag, - /*stop_on_first*/FALSE, /*remove*/TRUE, - /*save_state*/FALSE); + tcl = BUILD_TCL(i << 4, j); + scbid = ahc_index_busy_tcl(ahc, tcl); + scbp = ahc_lookup_scb(ahc, scbid); + if (scbp == NULL + || ahc_match_scb(ahc, scbp, target, channel, + lun, tag, role) == 0) + continue; + ahc_unbusy_tcl(ahc, BUILD_TCL(i << 4, j)); + } + } + + /* + * Go through the disconnected list and remove any entries we + * have queued for completion, 0'ing their control byte too. + * We save the active SCB and restore it ourselves, so there + * is no reason for this search to restore it too. + */ + ahc_search_disc_list(ahc, target, channel, lun, tag, + /*stop_on_first*/FALSE, /*remove*/TRUE, + /*save_state*/FALSE); + } /* * Go through the hardware SCB array looking for commands that - * were active but not on any list. + * were active but not on any list. In some cases, these remnants + * might not still have mappings in the scbindex array (e.g. unexpected + * bus free with the same scb queued for an abort). Don't hold this + * against them. */ for (i = 0; i < ahc->scb_data->maxhscbs; i++) { u_int scbid; @@ -5542,8 +5602,9 @@ ahc_outb(ahc, SCBPTR, i); scbid = ahc_inb(ahc, SCB_TAG); scbp = ahc_lookup_scb(ahc, scbid); - if (scbp != NULL - && ahc_match_scb(ahc, scbp, target, channel, lun, tag, role)) + if ((scbp == NULL && scbid != SCB_LIST_NULL) + || (scbp != NULL + && ahc_match_scb(ahc, scbp, target, channel, lun, tag, role))) ahc_add_curscb_to_free_list(ahc); } diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx.h linux/drivers/scsi/aic7xxx/aic7xxx.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx.h Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx.h Thu Oct 25 13:53:49 2001 @@ -2,6 +2,7 @@ * Core definitions and data structures shareable across OS platforms. * * Copyright (c) 1994-2001 Justin T. Gibbs. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,25 +11,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aic7xxx.h#29 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.h#34 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.h,v 1.30 2000/11/10 20:13:40 gibbs Exp $ */ @@ -147,6 +156,13 @@ #define AHC_MAX_QUEUE 253 /* + * The maximum amount of SCB storage we allocate in host memory. This + * number should reflect the 1 additional SCB we require to handle our + * qinfifo mechanism. + */ +#define AHC_SCB_MAX_ALLOC (AHC_MAX_QUEUE+1) + +/* * Ring Buffer of incoming target commands. * We allocate 256 to simplify the logic in the sequencer * by using the natural wrap point of an 8bit counter. @@ -373,10 +389,12 @@ * Target mode version of the shared data SCB segment. */ struct target_data { - uint8_t target_phases; /* Bitmap of phases to execute */ - uint8_t data_phase; /* Data-In or Data-Out */ - uint8_t scsi_status; /* SCSI status to give to initiator */ - uint8_t initiator_tag; /* Initiator's transaction tag */ + uint32_t residual_datacnt; /* Residual in the current S/G seg */ + uint32_t residual_sg_ptr; /* The next S/G for this transfer */ + uint8_t scsi_status; /* SCSI status to give to initiator */ + uint8_t target_phases; /* Bitmap of phases to execute */ + uint8_t data_phase; /* Data-In or Data-Out */ + uint8_t initiator_tag; /* Initiator's transaction tag */ }; struct hardware_scb { @@ -387,10 +405,10 @@ * of the cdb payload as seen by the chip and a DMA * is used to pull it in. */ - uint8_t cdb[12]; - uint32_t cdb_ptr; - struct status_pkt status; - struct target_data tdata; + uint8_t cdb[12]; + uint32_t cdb_ptr; + struct status_pkt status; + struct target_data tdata; } shared_data; /* * A word about residuals. @@ -544,7 +562,15 @@ * Pool of SCBs ready to be assigned * commands to execute. */ - struct scb *scbindex[AHC_SCB_MAX + 1];/* Mapping from tag to SCB */ + struct scb *scbindex[256]; /* + * Mapping from tag to SCB. + * As tag identifiers are an + * 8bit value, we provide space + * for all possible tag values. + * Any lookups to entries at or + * above AHC_SCB_MAX_ALLOC will + * always fail. + */ struct hardware_scb *hscbs; /* Array of hardware SCBs */ struct scb *scbarray; /* Array of kernel SCBs */ struct scsi_sense_data *sense; /* Per SCB sense data */ @@ -1127,6 +1153,9 @@ void ahc_freeze_devq(struct ahc_softc *ahc, struct scb *scb); int ahc_reset_channel(struct ahc_softc *ahc, char channel, int initiate_reset); +int ahc_abort_scbs(struct ahc_softc *ahc, int target, + char channel, int lun, u_int tag, + role_t role, uint32_t status); void ahc_restart(struct ahc_softc *ahc); void ahc_calc_residual(struct scb *scb); /*************************** Utility Functions ********************************/ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx.reg linux/drivers/scsi/aic7xxx/aic7xxx.reg --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx.reg Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx.reg Thu Oct 25 13:53:49 2001 @@ -1,7 +1,8 @@ /* * Aic7xxx register and scratch ram definitions. * - * Copyright (c) 1994-2001 Justin Gibbs. + * Copyright (c) 1994-2001 Justin T. Gibbs. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,27 +11,35 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.reg,v 1.31 2000/11/10 20:13:40 gibbs Exp $ */ -VERSION = "$Id: //depot/src/aic7xxx/aic7xxx.reg#19 $" +VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#24 $" /* * This file is processed by the aic7xxx_asm utility for use in assembling @@ -328,6 +337,7 @@ access_mode RO mask SCSICNT 0xf0 mask OFFCNT 0x0f + mask U2OFFCNT 0x7f } /* @@ -1004,7 +1014,6 @@ size 4 alias SCB_RESIDUAL_DATACNT alias SCB_CDB_STORE - alias SCB_TARGET_INFO } SCB_RESIDUAL_SGPTR { size 4 @@ -1012,8 +1021,14 @@ SCB_SCSI_STATUS { size 1 } - SCB_CDB_STORE_PAD { - size 3 + SCB_TARGET_PHASES { + size 1 + } + SCB_TARGET_DATA_DIR { + size 1 + } + SCB_TARGET_ITAG { + size 1 } SCB_DATAPTR { size 4 @@ -1464,7 +1479,8 @@ SEQ_FLAGS2 { size 1 - bit SCB_DMA 0x01 + bit SCB_DMA 0x01 + bit TARGET_MSG_PENDING 0x02 } /* * These are reserved registers in the card's scratch ram. Some of @@ -1529,10 +1545,6 @@ const STATUS_BUSY 0x08 const STATUS_QUEUE_FULL 0x28 -const SCB_TARGET_PHASES 0 -const SCB_TARGET_DATA_DIR 1 -const SCB_TARGET_STATUS 2 -const SCB_INITIATOR_TAG 3 const TARGET_DATA_IN 1 /* diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx.seq linux/drivers/scsi/aic7xxx/aic7xxx.seq --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx.seq Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx.seq Thu Oct 25 13:53:49 2001 @@ -1,7 +1,8 @@ /* * Adaptec 274x/284x/294x device driver firmware for Linux and FreeBSD. * - * Copyright (c) 1994-2001 Justin Gibbs. + * Copyright (c) 1994-2001 Justin T. Gibbs. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,28 +11,36 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx.seq,v 1.106 2000/11/12 05:19:46 gibbs Exp $ */ -VERSION = "$Id: //depot/src/aic7xxx/aic7xxx.seq#33 $" +VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#37 $" #include "aic7xxx.reg" #include "scsi_message.h" @@ -242,6 +251,7 @@ } else { mov DFDAT, DINDEX; } + and SAVED_LUN, MSG_IDENTIFY_LUNMASK, DINDEX; /* Remember for disconnection decision */ test DINDEX, MSG_IDENTIFY_DISCFLAG jnz . + 2; @@ -257,9 +267,10 @@ * < MSG_IGN_WIDE_RESIDUE. */ add A, -MSG_SIMPLE_Q_TAG, DINDEX; - jnc ident_messages_done; + jnc ident_messages_done_msg_pending; add A, -MSG_IGN_WIDE_RESIDUE, DINDEX; - jc ident_messages_done; + jc ident_messages_done_msg_pending; + /* Store for host */ if ((ahc->features & AHC_CMD_CHAN) != 0) { mov CCSCBRAM, DINDEX; @@ -285,9 +296,23 @@ } mov INITIATOR_TAG, DINDEX; or SEQ_FLAGS, TARGET_CMD_IS_TAGGED; - test SCSISIGI, ATNI jz . + 2; - /* Initiator still wants to give us messages */ - call target_inb; + +ident_messages_done: + /* Terminate the ident list */ + if ((ahc->features & AHC_CMD_CHAN) != 0) { + mvi CCSCBRAM, SCB_LIST_NULL; + } else { + mvi DFDAT, SCB_LIST_NULL; + } + or SEQ_FLAGS, TARG_CMD_PENDING|IDENTIFY_SEEN; + test SEQ_FLAGS2, TARGET_MSG_PENDING + jnz target_mesgout_pending; + test SCSISIGI, ATNI jnz target_mesgout_continue; + jmp target_ITloop; + + +ident_messages_done_msg_pending: + or SEQ_FLAGS2, TARGET_MSG_PENDING; jmp ident_messages_done; /* @@ -299,31 +324,6 @@ cmp RETURN_1, EXIT_MSG_LOOP je target_ITloop; test SSTAT0, SPIORDY jz .; jmp host_target_message_loop; - -ident_messages_done: - /* If ring buffer is full, return busy or queue full */ - if ((ahc->features & AHC_HS_MAILBOX) != 0) { - and A, HOST_TQINPOS, HS_MAILBOX; - } else { - mov A, KERNEL_TQINPOS; - } - cmp TQINPOS, A jne tqinfifo_has_space; - mvi P_STATUS|BSYO call change_phase; - test SEQ_FLAGS, TARGET_CMD_IS_TAGGED jz . + 3; - mvi STATUS_QUEUE_FULL call target_outb; - jmp target_busfree_wait; - mvi STATUS_BUSY call target_outb; - jmp target_busfree_wait; -tqinfifo_has_space: - /* Terminate the ident list */ - if ((ahc->features & AHC_CMD_CHAN) != 0) { - mvi CCSCBRAM, SCB_LIST_NULL; - } else { - mvi DFDAT, SCB_LIST_NULL; - } - or SEQ_FLAGS, TARG_CMD_PENDING|IDENTIFY_SEEN; - test SCSISIGI, ATNI jnz target_mesgout_pending; - jmp target_ITloop; } if ((ahc->flags & AHC_INITIATORROLE) != 0) { @@ -464,13 +464,13 @@ */ test SCB_CONTROL, TAG_ENB jz . + 3; mvi MSG_SIMPLE_Q_TAG call target_outb; - mov SCB_TARGET_INFO[SCB_INITIATOR_TAG] call target_outb; + mov SCB_TARGET_ITAG call target_outb; target_synccmd: /* * Now determine what phases the host wants us * to go through. */ - mov SEQ_FLAGS, SCB_TARGET_INFO[SCB_TARGET_PHASES]; + mov SEQ_FLAGS, SCB_TARGET_PHASES; test SCB_CONTROL, MK_MESSAGE jz target_ITloop; mvi P_MESGIN|BSYO call change_phase; @@ -528,6 +528,24 @@ jmp poll_for_work; target_cmdphase: + /* + * The target has dropped ATN (doesn't want to abort or BDR) + * and we believe this selection to be valid. If the ring + * buffer for new commands is full, return busy or queue full. + */ + if ((ahc->features & AHC_HS_MAILBOX) != 0) { + and A, HOST_TQINPOS, HS_MAILBOX; + } else { + mov A, KERNEL_TQINPOS; + } + cmp TQINPOS, A jne tqinfifo_has_space; + mvi P_STATUS|BSYO call change_phase; + test SEQ_FLAGS, TARGET_CMD_IS_TAGGED jz . + 3; + mvi STATUS_QUEUE_FULL call target_outb; + jmp target_busfree_wait; + mvi STATUS_BUSY call target_outb; + jmp target_busfree_wait; +tqinfifo_has_space: mvi P_COMMAND|BSYO call change_phase; call target_inb; mov A, DINDEX; @@ -576,15 +594,14 @@ * data direction of the DMA. Toggle it for * target transfers. */ - xor LASTPHASE, IOI, SCB_TARGET_INFO[SCB_TARGET_DATA_DIR]; - or SCB_TARGET_INFO[SCB_TARGET_DATA_DIR], BSYO - call change_phase; + xor LASTPHASE, IOI, SCB_TARGET_DATA_DIR; + or SCB_TARGET_DATA_DIR, BSYO call change_phase; jmp p_data; target_sphase: mvi P_STATUS|BSYO call change_phase; mvi LASTPHASE, P_STATUS; - mov SCB_TARGET_INFO[SCB_TARGET_STATUS] call target_outb; + mov SCB_SCSI_STATUS call target_outb; /* XXX Watch for ATN or parity errors??? */ mvi SCSISIGO, P_MESGIN|BSYO; /* MSG_CMDCMPLT is 0, but we can't do an immediate of 0 */ @@ -1318,10 +1335,19 @@ and SEQ_FLAGS, ~DPHASE_PENDING; /* * For data-in phases, wait for any pending acks from the - * initiator before changing phase. + * initiator before changing phase. We only need to + * send Ignore Wide Residue messages for data-in phases. */ test DFCNTRL, DIRECTION jz target_ITloop; test SSTAT1, REQINIT jnz .; + test DATA_COUNT_ODD, 0x1 jz target_ITloop; + test SCSIRATE, WIDEXFER jz target_ITloop; + /* + * Issue an Ignore Wide Residue Message. + */ + mvi P_MESGIN|BSYO call change_phase; + mvi MSG_IGN_WIDE_RESIDUE call target_outb; + mvi 1 call target_outb; jmp target_ITloop; } else { jmp ITloop; diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.c linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.c Thu Oct 25 13:53:49 2001 @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/aic7xxx/aic7xxx_93cx6.c#8 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_93cx6.c#10 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx_93cx6.c,v 1.9 2000/11/10 20:13:41 gibbs Exp $ */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.h linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.h Sun Mar 4 14:30:18 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_93cx6.h Thu Oct 25 13:53:49 2001 @@ -12,25 +12,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aic7xxx_93cx6.h#5 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_93cx6.h#7 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx_93cx6.h,v 1.8 2000/11/10 20:13:41 gibbs Exp $ */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_inline.h linux/drivers/scsi/aic7xxx/aic7xxx_inline.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_inline.h Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_inline.h Thu Oct 25 13:53:49 2001 @@ -2,6 +2,7 @@ * Inline routines shareable across OS platforms. * * Copyright (c) 1994-2001 Justin T. Gibbs. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,25 +11,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aic7xxx_inline.h#27 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_inline.h#31 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx_inline.h,v 1.8 2000/11/12 05:19:46 gibbs Exp $ */ @@ -482,7 +491,6 @@ ahc_intr(struct ahc_softc *ahc) { u_int intstat; - u_int queuestat; /* * Instead of directly reading the interrupt status register, @@ -491,15 +499,10 @@ * most cases. */ if ((ahc->flags & (AHC_ALL_INTERRUPTS|AHC_EDGE_INTERRUPT)) == 0 - && (queuestat = ahc_check_cmdcmpltqueues(ahc)) != 0) + && (ahc_check_cmdcmpltqueues(ahc) != 0)) intstat = CMDCMPLT; else { intstat = ahc_inb(ahc, INTSTAT); - queuestat = AHC_RUN_QOUTFIFO; -#ifdef AHC_TARGET_MODE - if ((ahc->flags & AHC_TARGETROLE) != 0) - queuestat |= AHC_RUN_TQINFIFO; -#endif } if (intstat & CMDCMPLT) { @@ -515,11 +518,11 @@ */ ahc_flush_device_writes(ahc); #ifdef AHC_TARGET_MODE - if ((queuestat & AHC_RUN_QOUTFIFO) != 0) + if ((ahc->flags & AHC_INITIATORROLE) != 0) #endif ahc_run_qoutfifo(ahc); #ifdef AHC_TARGET_MODE - if ((queuestat & AHC_RUN_TQINFIFO) != 0) + if ((ahc->flags & AHC_TARGETROLE) != 0) ahc_run_tqinfifo(ahc, /*paused*/FALSE); #endif } diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_linux.c linux/drivers/scsi/aic7xxx/aic7xxx_linux.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_linux.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_linux.c Thu Oct 25 13:53:49 2001 @@ -1,7 +1,7 @@ /* * Adaptec AIC7xxx device driver for Linux. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux.c#72 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_linux.c#79 $ * * Copyright (c) 1994 John Aycock * The University of Calgary Department of Computer Science. @@ -38,8 +38,8 @@ * SCB paging, and other rework of the code. * * -------------------------------------------------------------------------- - * Copyright (c) 1994, 1995, 1996, 1997, 1998, 1999, 2000 Justin T. Gibbs. - * Copyright (c) 2000 Adaptec Inc. + * Copyright (c) 1994-2000 Justin T. Gibbs. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -48,23 +48,31 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * *--------------------------------------------------------------------------- * @@ -79,8 +87,6 @@ * * Form: aic7xxx=extended * aic7xxx=no_reset - * aic7xxx=ultra - * aic7xxx=irq_trigger:[0,1] # 0 edge, 1 level * aic7xxx=verbose * * Daniel M. Eischen, deischen@iworks.InterWorks.org, 1/23/97 @@ -113,15 +119,6 @@ * */ -/* - * The next three defines are user configurable. These should be the only - * defines a user might need to get in here and change. There are other - * defines buried deeper in the code, but those really shouldn't need touched - * under normal conditions. - */ - -#include - #include "aic7xxx_osm.h" #include "aic7xxx_inline.h" @@ -324,83 +321,6 @@ static uint32_t aic7xxx_extended = 0; /* - * The IRQ trigger method used on EISA controllers. Does not effect PCI cards. - * -1 = Use detected settings. - * 0 = Force Edge triggered mode. - * 1 = Force Level triggered mode. - */ -static int aic7xxx_irq_trigger = -1; - -/* - * This variable is used to override the termination settings on a controller. - * This should not be used under normal conditions. However, in the case - * that a controller does not have a readable SEEPROM (so that we can't - * read the SEEPROM settings directly) and that a controller has a buggered - * version of the cable detection logic, this can be used to force the - * correct termination. It is preferable to use the manual termination - * settings in the BIOS if possible, but some motherboard controllers store - * those settings in a format we can't read. In other cases, auto term - * should also work, but the chipset was put together with no auto term - * logic (common on motherboard controllers). In those cases, we have - * 32 bits here to work with. That's good for 8 controllers/channels. The - * bits are organized as 4 bits per channel, with scsi0 getting the lowest - * 4 bits in the int. A 1 in a bit position indicates the termination setting - * that corresponds to that bit should be enabled, a 0 is disabled. - * It looks something like this: - * - * 0x0f = 1111-Single Ended Low Byte Termination on/off - * ||\-Single Ended High Byte Termination on/off - * |\-LVD Low Byte Termination on/off - * \-LVD High Byte Termination on/off - * - * For non-Ultra2 controllers, the upper 2 bits are not important. So, to - * enable both high byte and low byte termination on scsi0, I would need to - * make sure that the override_term variable was set to 0x03 (bits 0011). - * To make sure that all termination is enabled on an Ultra2 controller at - * scsi2 and only high byte termination on scsi1 and high and low byte - * termination on scsi0, I would set override_term=0xf23 (bits 1111 0010 0011) - * - * For the most part, users should never have to use this, that's why I - * left it fairly cryptic instead of easy to understand. If you need it, - * most likely someone will be telling you what your's needs to be set to. - */ -static int aic7xxx_override_term = -1; - -/* - * Certain motherboard chipset controllers tend to screw - * up the polarity of the term enable output pin. Use this variable - * to force the correct polarity for your system. This is a bitfield variable - * similar to the previous one, but this one has one bit per channel instead - * of four. - * 0 = Force the setting to active low. - * 1 = Force setting to active high. - * Most Adaptec cards are active high, several motherboards are active low. - * To force a 2940 card at SCSI 0 to active high and a motherboard 7895 - * controller at scsi1 and scsi2 to active low, and a 2910 card at scsi3 - * to active high, you would need to set stpwlev=0x9 (bits 1001). - * - * People shouldn't need to use this, but if you are experiencing lots of - * SCSI timeout problems, this may help. There is one sure way to test what - * this option needs to be. Using a boot floppy to boot the system, configure - * your system to enable all SCSI termination (in the Adaptec SCSI BIOS) and - * if needed then also pass a value to override_term to make sure that the - * driver is enabling SCSI termination, then set this variable to either 0 - * or 1. When the driver boots, make sure there are *NO* SCSI cables - * connected to your controller. If it finds and inits the controller - * without problem, then the setting you passed to stpwlev was correct. If - * the driver goes into a reset loop and hangs the system, then you need the - * other setting for this variable. If neither setting lets the machine - * boot then you have definite termination problems that may not be fixable. - */ -static int aic7xxx_stpwlev = -1; - -/* - * Set this to non-0 in order to force the driver to panic the kernel - * and print out debugging info on a SCSI abort or reset cycle. - */ -static int aic7xxx_panic_on_abort = 0; - -/* * PCI bus parity checking of the Adaptec controllers. This is somewhat * dubious at best. To my knowledge, this option has never actually * solved a PCI parity problem, but on certain machines with broken PCI @@ -418,15 +338,6 @@ static int aic7xxx_pci_parity = 0; /* - * Set this to a non-0 value to make us dump out the 32 bit instruction - * registers on the card after completing the sequencer download. This - * allows the actual sequencer download to be verified. It is possible - * to use this option and still boot up and run your system. This is - * only intended for debugging purposes. - */ -static int aic7xxx_dump_sequencer = 0; - -/* * Certain newer motherboards have put new PCI based devices into the * IO spaces that used to typically be occupied by VLB or EISA cards. * This overlap can cause these newer motherboards to lock up when scanned @@ -458,13 +369,20 @@ static int aic7xxx_seltime = 0x00; /* - * So that insmod can find the variable and make it point to something + * Certain devices do not perform any aging on commands. Should the + * device be saturated by commands in one portion of the disk, it is + * possible for transactions on far away sectors to never be serviced. + * To handle these devices, we can periodically send an ordered tag to + * force all outstanding transactions to be serviced prior to a new + * transaction. + */ +int aic7xxx_periodic_otag; + +/* + * Module information and settable options. */ #ifdef MODULE static char *aic7xxx = NULL; - -MODULE_PARM(aic7xxx, "s"); - /* * Just in case someone uses commas to separate items on the insmod * command line, we define a dummy buffer here to avoid having insmod @@ -472,6 +390,32 @@ */ static char dummy_buffer[60] = "Please don't trounce on me insmod!!\n"; +MODULE_AUTHOR("Maintainer: Justin T. Gibbs "); +MODULE_DESCRIPTION("Adaptec Aic77XX/78XX SCSI Host Bus Adapter driver"); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,10) +MODULE_LICENSE("Dual BSD/GPL"); +#endif +MODULE_PARM(aic7xxx, "s"); +MODULE_PARM_DESC(aic7xxx, "period delimited, options string. + verbose Enable verbose/diagnostic logging + no_probe Disable EISA/VLB controller probing + no_reset Supress initial bus resets + extended Enable extended geometry on all controllers + periodic_otag Send an ordered tagged transaction periodically + to prevent tag starvation. This may be + required by some older disk drives/RAID arrays. + reverse_scan Sort PCI devices highest Bus/Slot to lowest + tag_info: Set per-target tag depth + seltime: Selection Timeout(0/256ms,1/128ms,2/64ms,3/32ms) + + Sample /etc/modules.conf line: + Enable verbose logging + Disable EISA/VLB probing + Set tag depth on Controller 2/Target 2 to 10 tags + Shorten the selection timeout to 128ms from its default of 256 + + options aic7xxx='\"verbose.no_probe.tag_info:{{}.{}.{..10}}.seltime:1\"' +"); #endif static void ahc_linux_handle_scsi_status(struct ahc_softc *, @@ -661,11 +605,17 @@ sg = (struct scatterlist *)cmd->request_buffer; pci_unmap_sg(ahc->dev_softc, sg, cmd->use_sg, scsi_to_pci_dma_dir(cmd->sc_data_direction)); - } else if (cmd->request_bufflen != 0) + } else if (cmd->request_bufflen != 0) { + u_int32_t high_addr; + + high_addr = ahc_le32toh(scb->sg_list[0].len) + & AHC_SG_HIGH_ADDR_MASK; pci_unmap_single(ahc->dev_softc, - ahc_le32toh(scb->sg_list[0].addr), + ahc_le32toh(scb->sg_list[0].addr) + | (((dma_addr_t)high_addr) << 8), cmd->request_bufflen, scsi_to_pci_dma_dir(cmd->sc_data_direction)); + } } static __inline int @@ -722,8 +672,10 @@ { struct ahc_softc *ahc; - TAILQ_FOREACH(ahc, &ahc_tailq, links) { - ahc_shutdown(ahc); + if (event == SYS_DOWN || event == SYS_HALT) { + TAILQ_FOREACH(ahc, &ahc_tailq, links) { + ahc_shutdown(ahc); + } } return (NOTIFY_OK); } @@ -786,22 +738,24 @@ * address). For this reason, we have to reset * our dma mask when doing allocations. */ + if(ahc->dev_softc) #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,3) - pci_set_dma_mask(ahc->dev_softc, 0xFFFFFFFF); + pci_set_dma_mask(ahc->dev_softc, 0xFFFFFFFF); #else - ahc->dev_softc->dma_mask = 0xFFFFFFFF; + ahc->dev_softc->dma_mask = 0xFFFFFFFF; #endif *vaddr = pci_alloc_consistent(ahc->dev_softc, dmat->maxsize, &map->bus_addr); + if (ahc->dev_softc) #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,3) - pci_set_dma_mask(ahc->dev_softc, ahc->platform_data->hw_dma_mask); + pci_set_dma_mask(ahc->dev_softc, ahc->platform_data->hw_dma_mask); #else - ahc->dev_softc->dma_mask = ahc->platform_data->hw_dma_mask; + ahc->dev_softc->dma_mask = ahc->platform_data->hw_dma_mask; #endif #else /* LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) */ /* * At least in 2.2.14, malloc is a slab allocator so all - * allocations are aligned. We assume, for these kernel versions + * allocations are aligned. We assume for these kernel versions * that all allocations will be bellow 4Gig, physically contiguous, * and accessable via DMA by the controller. */ @@ -906,12 +860,20 @@ { char primary_channel; - value = ahc_get_pci_bus(lahc->dev_softc) - - ahc_get_pci_bus(rahc->dev_softc); + if (aic7xxx_reverse_scan != 0) + value = ahc_get_pci_bus(rahc->dev_softc) + - ahc_get_pci_bus(lahc->dev_softc); + else + value = ahc_get_pci_bus(lahc->dev_softc) + - ahc_get_pci_bus(rahc->dev_softc); if (value != 0) break; - value = ahc_get_pci_slot(lahc->dev_softc) - - ahc_get_pci_slot(rahc->dev_softc); + if (aic7xxx_reverse_scan != 0) + value = ahc_get_pci_slot(rahc->dev_softc) + - ahc_get_pci_slot(lahc->dev_softc); + else + value = ahc_get_pci_slot(lahc->dev_softc) + - ahc_get_pci_slot(rahc->dev_softc); if (value != 0) break; /* @@ -1028,7 +990,7 @@ /* * Handle Linux boot parameters. This routine allows for assigning a value * to a parameter with a ':' between the parameter and the value. - * ie. aic7xxx=unpause:0x0A,extended + * ie. aic7xxx=stpwlev:1,extended */ int aic7xxx_setup(char *s) @@ -1043,15 +1005,11 @@ } options[] = { { "extended", &aic7xxx_extended }, { "no_reset", &aic7xxx_no_reset }, - { "irq_trigger", &aic7xxx_irq_trigger }, { "verbose", &aic7xxx_verbose }, { "reverse_scan", &aic7xxx_reverse_scan }, - { "override_term", &aic7xxx_override_term }, - { "stpwlev", &aic7xxx_stpwlev }, { "no_probe", &aic7xxx_no_probe }, - { "panic_on_abort", &aic7xxx_panic_on_abort }, + { "periodic_otag", &aic7xxx_periodic_otag }, { "pci_parity", &aic7xxx_pci_parity }, - { "dump_sequencer", &aic7xxx_dump_sequencer }, { "seltime", &aic7xxx_seltime }, { "tag_info", NULL } }; @@ -1133,7 +1091,8 @@ ahc_linux_pci_probe(template); #endif - aic7770_linux_probe(template); + if (aic7xxx_no_probe == 0) + aic7770_linux_probe(template); /* * Register with the SCSI layer all @@ -1174,8 +1133,8 @@ host->this_id = ahc->our_id; host->irq = ahc->platform_data->irq; host->max_id = (ahc->features & AHC_WIDE) ? 16 : 8; - host->max_channel = (ahc->features & AHC_TWIN) ? 1 : 0; host->max_lun = AHC_NUM_LUNS; + host->max_channel = (ahc->features & AHC_TWIN) ? 1 : 0; ahc_set_unit(ahc, ahc_linux_next_unit()); sprintf(buf, "scsi%d", host->host_no); new_name = malloc(strlen(buf) + 1, M_DEVBUF, M_NOWAIT); @@ -1387,7 +1346,7 @@ dev->qfrozen++; } - dev->flags &= ~(AHC_DEV_Q_BASIC|AHC_DEV_Q_TAGGED); + dev->flags &= ~(AHC_DEV_Q_BASIC|AHC_DEV_Q_TAGGED|AHC_DEV_PERIODIC_OTAG); if (now_queuing) { if (!was_queuing) { @@ -1399,9 +1358,11 @@ dev->maxtags = AHC_MAX_QUEUE; dev->openings = dev->maxtags - dev->active; } - if (alg == AHC_QUEUE_TAGGED) + if (alg == AHC_QUEUE_TAGGED) { dev->flags |= AHC_DEV_Q_TAGGED; - else + if (aic7xxx_periodic_otag != 0) + dev->flags |= AHC_DEV_PERIODIC_OTAG; + } else dev->flags |= AHC_DEV_Q_BASIC; } else { /* We can only have one opening */ @@ -1548,8 +1509,8 @@ if (tags != 0) { device->queue_depth = tags; ahc_set_tags(ahc, &devinfo, AHC_QUEUE_TAGGED); - printf("scsi%d:%d:%d:%d: Tagged Queuing enabled. Depth %d\n", - ahc->platform_data->host->host_no, device->channel, + printf("scsi%d:%c:%d:%d: Tagged Queuing enabled. Depth %d\n", + ahc->platform_data->host->host_no, device->channel + 'A', device->id, device->lun, tags); } else { /* @@ -1770,7 +1731,8 @@ dev->openings--; dev->active++; dev->commands_issued++; - dev->commands_since_idle_or_otag++; + if ((dev->flags & AHC_DEV_PERIODIC_OTAG) != 0) + dev->commands_since_idle_or_otag++; /* * We only allow one untagged transaction @@ -2324,10 +2286,10 @@ * are not large enough for us to pull the spi3 bits. * In this case, we assume that a device that tells us * they can provide inquiry data that spans the SPI3 - * bits can handle a PPR request. If the inquiry - * request has sufficient buffer space to cover these - * bits, we check them to see if any ppr options are - * available. + * bits and says its SCSI3 can handle a PPR request. + * If the inquiry request has sufficient buffer space to + * cover these bits, we check them to see if any ppr options + * are available. */ if ((sid->additional_length + 4) >= minlen) { if (transferred_len >= minlen @@ -2336,6 +2298,8 @@ if (targ_info->curr.protocol_version > SCSI_REV_2) targ_info->curr.transport_version = 3; + else + ppr_options = 0; } else { ppr_options = 0; } @@ -2536,8 +2500,7 @@ ahc->flags &= ~AHC_ALL_INTERRUPTS; paused = TRUE; - if (bootverbose) - ahc_dump_card_state(ahc); + ahc_dump_card_state(ahc); if ((pending_scb->flags & SCB_ACTIVE) == 0) { printf("%s:%d:%d:%d: Command already completed\n", @@ -2597,7 +2560,7 @@ * Actually re-queue this SCB in an attempt * to select the device before it reconnects. * In either case (selection or reselection), - * we will now issue a the approprate message + * we will now issue the approprate message * to the timed-out device. * * Set the MK_MESSAGE control bit indicating @@ -2672,7 +2635,7 @@ if (paused) ahc_unpause(ahc); if (wait) { - struct timer_list timer; + struct timer_list timer; int ret; ahc_unlock(ahc, &s); @@ -2711,7 +2674,7 @@ error = ahc_linux_queue_recovery_cmd(cmd, SCB_ABORT); if (error != 0) - printf("aic7xxx_abort returns %d\n", error); + printf("aic7xxx_abort returns 0x%x\n", error); return (error); } @@ -2725,7 +2688,7 @@ error = ahc_linux_queue_recovery_cmd(cmd, SCB_DEVICE_RESET); if (error != 0) - printf("aic7xxx_dev_reset returns %d\n", error); + printf("aic7xxx_dev_reset returns 0x%x\n", error); return (error); } @@ -2792,7 +2755,9 @@ sectors = 32; cylinders = disk->capacity / (heads * sectors); - if (disk->device->channel == 0) + if (aic7xxx_extended != 0) + extended = 1; + else if (disk->device->channel == 0) extended = (ahc->flags & AHC_EXTENDED_TRANS_A) != 0; else extended = (ahc->flags & AHC_EXTENDED_TRANS_B) != 0; @@ -2868,8 +2833,6 @@ } } } - -MODULE_LICENSE("Dual BSD/GPL"); #if defined(MODULE) || LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) static Scsi_Host_Template driver_template = AIC7XXX; diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_linux_host.h linux/drivers/scsi/aic7xxx/aic7xxx_linux_host.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_linux_host.h Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_linux_host.h Thu Oct 25 13:53:49 2001 @@ -1,7 +1,7 @@ /* * Adaptec AIC7xxx device driver host template for Linux. * - * Copyright (c) 2000 Adaptec Inc. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,25 +10,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux_host.h#3 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_linux_host.h#5 $ */ #ifndef _AIC7XXX_LINUX_HOST_H_ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c Thu Oct 25 13:53:49 2001 @@ -1,7 +1,7 @@ /* * Linux driver attachment glue for PCI based controllers. * - * Copyright (c) 2000, 2001 Adaptec Inc. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,25 +10,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c#23 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_linux_pci.c#27 $ */ #include "aic7xxx_osm.h" @@ -41,6 +49,11 @@ static int ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent); +static int ahc_linux_pci_reserve_io_region(struct ahc_softc *ahc, + u_long *base); +static int ahc_linux_pci_reserve_mem_region(struct ahc_softc *ahc, + u_long *bus_addr, + uint8_t **maddr); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) static void ahc_linux_pci_dev_remove(struct pci_dev *pdev); @@ -56,6 +69,7 @@ }, { 0 } }; +MODULE_DEVICE_TABLE(pci, ahc_linux_pci_id_table); struct pci_driver aic7xxx_pci_driver = { name: "aic7xxx", @@ -88,12 +102,28 @@ static int ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { - char buf[80]; - struct ahc_softc *ahc; - ahc_dev_softc_t pci; - struct ahc_pci_identity *entry; - char *name; - int error; + char buf[80]; + struct ahc_softc *ahc; + ahc_dev_softc_t pci; + struct ahc_pci_identity *entry; + char *name; + int error; + + /* + * Some BIOSen report the same device multiple times. + */ + TAILQ_FOREACH(ahc, &ahc_tailq, links) { + struct pci_dev *probed_pdev; + + probed_pdev = ahc->dev_softc; + if (probed_pdev->bus->number == pdev->bus->number + && probed_pdev->devfn == pdev->devfn) + break; + } + if (ahc != NULL) { + /* Skip duplicate. */ + return (-ENODEV); + } pci = pdev; entry = ahc_find_pci_device(pci); @@ -129,14 +159,13 @@ && pci_set_dma_mask(pdev, 0x7FFFFFFFFFULL) == 0) { #else && ahc_linux_get_memsize() > 0x80000000) { + ahc->dev_softc->dma_mask = - (bus_addr_t)(0x7FFFFFFFFFULL - & ((1ULL << (sizeof(bus_addr_t) * 8))-1)); + (bus_addr_t)(0x7FFFFFFFFFULL & (bus_addr_t)~0); #endif ahc->flags |= AHC_39BIT_ADDRESSING; ahc->platform_data->hw_dma_mask = - (bus_addr_t)(0x7FFFFFFFFFULL - & ((1ULL << (sizeof(bus_addr_t) * 8))-1)); + (bus_addr_t)(0x7FFFFFFFFFULL & (bus_addr_t)~0); } #endif ahc->dev_softc = pci; @@ -172,28 +201,10 @@ pdev = NULL; class = PCI_CLASS_STORAGE_SCSI << 8; while ((pdev = pci_find_class(class, pdev)) != NULL) { - struct ahc_softc *ahc; ahc_dev_softc_t pci; int error; pci = pdev; - - /* - * Some BIOSen report the same device multiple times. - */ - TAILQ_FOREACH(ahc, &ahc_tailq, links) { - struct pci_dev *probed_pdev; - - probed_pdev = ahc->dev_softc; - if (probed_pdev->bus->number == pdev->bus->number - && probed_pdev->devfn == pdev->devfn) - break; - } - if (ahc != NULL) { - /* Skip duplicate. */ - continue; - } - error = ahc_linux_pci_dev_probe(pdev, /*pci_devid*/NULL); if (error == 0) found++; @@ -202,22 +213,40 @@ #endif } -int -ahc_pci_map_registers(struct ahc_softc *ahc) +static int +ahc_linux_pci_reserve_io_region(struct ahc_softc *ahc, u_long *base) { - uint32_t command; - u_long base; -#ifdef MMAPIO - u_long start; - u_long base_page; - u_long base_offset; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) + *base = pci_resource_start(ahc->dev_softc, 0); +#else + *base = ahc_pci_read_config(ahc->dev_softc, PCIR_MAPS, 4); + *base &= PCI_BASE_ADDRESS_IO_MASK; #endif - uint8_t *maddr; + if (base == 0) + return (ENOMEM); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) + if (check_region(*base, 256) != 0) + return (ENOMEM); + else + request_region(*base, 256, "aic7xxx"); +#else + if (request_region(*base, 256, "aic7xxx") == 0) + return (ENOMEM); +#endif + return (0); +} - command = ahc_pci_read_config(ahc->dev_softc, PCIR_COMMAND, 4); - base = 0; - maddr = NULL; -#ifdef MMAPIO +static int +ahc_linux_pci_reserve_mem_region(struct ahc_softc *ahc, + u_long *bus_addr, + uint8_t **maddr) +{ + u_long start; + u_long base_page; + u_long base_offset; + int error; + + error = 0; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) start = pci_resource_start(ahc->dev_softc, 1); base_page = start & PAGE_MASK; @@ -229,43 +258,70 @@ base_offset -= base_page; #endif if (start != 0) { - ahc->platform_data->mem_busaddr = start; + *bus_addr = start; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) - if (request_mem_region(start, 0x1000, "aic7xxx") == 0) { - printf("aic7xxx: PCI%d:%d:%d MEM region 0x%lx " - "in use. Cannot map device.\n", + if (request_mem_region(start, 0x1000, "aic7xxx") == 0) + error = ENOMEM; +#endif + if (error == 0) { + *maddr = ioremap_nocache(base_page, base_offset + 256); + if (*maddr == NULL) + error = ENOMEM; + else + *maddr += base_offset; + } + } else + error = ENOMEM; + return (error); +} + +int +ahc_pci_map_registers(struct ahc_softc *ahc) +{ + uint32_t command; + u_long base; + uint8_t *maddr; + int error; + int io_error; + + /* + * We always reserve both our register spaces to avoid + * other devices claiming them. + */ + command = ahc_pci_read_config(ahc->dev_softc, PCIR_COMMAND, 4); + command &= ~(PCIM_CMD_PORTEN|PCIM_CMD_MEMEN); + base = 0; + maddr = NULL; +#ifdef MMAPIO + error = ahc_linux_pci_reserve_mem_region(ahc, &base, &maddr); + if (error == 0) { + ahc->platform_data->mem_busaddr = base; + ahc->tag = BUS_SPACE_MEMIO; + ahc->bsh.maddr = maddr; + ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND, + command | PCIM_CMD_MEMEN, 4); + + /* + * Do a quick test to see if memory mapped + * I/O is functioning correctly. + */ + if (ahc_inb(ahc, HCNTRL) == 0xFF) { + + printf("aic7xxx: PCI Device %d:%d:%d " + "failed memory mapped test\n", ahc_get_pci_bus(ahc->dev_softc), ahc_get_pci_slot(ahc->dev_softc), - ahc_get_pci_function(ahc->dev_softc), - start); + ahc_get_pci_function(ahc->dev_softc)); + maddr = NULL; } else -#endif - maddr = ioremap_nocache(base_page, base_offset + 256); - if (maddr != NULL) { - ahc->tag = BUS_SPACE_MEMIO; - ahc->bsh.maddr = maddr + base_offset; command |= PCIM_CMD_MEMEN; - ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND, - command, 4); - - /* - * Do a quick test to see if memory mapped - * I/O is functioning correctly. - */ - if (ahc_inb(ahc, HCNTRL) == 0xFF) { - printf("aic7xxx: PCI Device %d:%d:%d " - "failed memory mapped test\n", - ahc_get_pci_bus(ahc->dev_softc), - ahc_get_pci_slot(ahc->dev_softc), - ahc_get_pci_function(ahc->dev_softc)); - iounmap((void *)base_page); - maddr = NULL; - } else { - command &= ~PCIM_CMD_PORTEN; - ahc_pci_write_config(ahc->dev_softc, - PCIR_COMMAND, command, 4); - } - } + } else { + printf("aic7xxx: PCI%d:%d:%d MEM region 0x%lx " + "unavailable. Cannot map device.\n", + ahc_get_pci_bus(ahc->dev_softc), + ahc_get_pci_slot(ahc->dev_softc), + ahc_get_pci_function(ahc->dev_softc), + base); } #endif @@ -274,46 +330,25 @@ * complain about our ioport conflicting with * another device if we are going to use it. */ + io_error = ahc_linux_pci_reserve_io_region(ahc, &base); if (maddr == NULL) { - ahc->tag = BUS_SPACE_PIO; - command &= ~(PCIM_CMD_MEMEN|PCIM_CMD_PORTEN); - ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND, command, 4); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) - base = pci_resource_start(ahc->dev_softc, 0); -#else - base = ahc_pci_read_config(ahc->dev_softc, PCIR_MAPS, 4); - base &= PCI_BASE_ADDRESS_IO_MASK; -#endif - if (base == 0) { - printf("aic7xxx: PCI%d:%d:%d No mapping available. " - "Cannot map device.\n", - ahc_get_pci_bus(ahc->dev_softc), - ahc_get_pci_slot(ahc->dev_softc), - ahc_get_pci_function(ahc->dev_softc)); - return (ENXIO); - } -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) - if (check_region(base, 256) != 0) { -#else - if (request_region(base, 256, "aic7xxx") == 0) { -#endif + error = io_error; + if (error != 0) { printf("aic7xxx: PCI%d:%d:%d IO region 0x%lx[0..255] " - "in use. Cannot map device.\n", + "unavailable. Cannot map device.\n", ahc_get_pci_bus(ahc->dev_softc), ahc_get_pci_slot(ahc->dev_softc), ahc_get_pci_function(ahc->dev_softc), base); base = 0; - return (EBUSY); + } else { + ahc->tag = BUS_SPACE_PIO; + ahc->bsh.ioport = base; + command |= PCIM_CMD_PORTEN; } -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) - request_region(base, 256, "aic7xxx"); -#endif - ahc->bsh.ioport = base; - command |= PCIM_CMD_PORTEN; - ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND, command, 4); } - return (0); + ahc_pci_write_config(ahc->dev_softc, PCIR_COMMAND, command, 4); + return (error); } int diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h linux/drivers/scsi/aic7xxx/aic7xxx_osm.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h Sun Sep 23 11:40:59 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_osm.h Thu Oct 25 13:53:49 2001 @@ -18,9 +18,9 @@ * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux.h#65 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_linux.h#72 $ * - * Copyright (c) 2000, 2001 Adaptec Inc. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -29,25 +29,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_linux.h#65 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_linux.h#72 $ * */ #ifndef _AIC7XXX_LINUX_H_ @@ -61,6 +69,8 @@ #include #include #include +#include +#include #ifndef KERNEL_VERSION #define KERNEL_VERSION(x,y,z) (((x)<<16)+((y)<<8)+(z)) @@ -103,6 +113,23 @@ #define ahc_le32toh(x) le32_to_cpu(x) #define ahc_le64toh(x) le64_to_cpu(x) +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1234 +#endif + +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 4321 +#endif + +#ifndef BYTE_ORDER +#if defined(__BIG_ENDIAN) +#define BYTE_ORDER BIG_ENDIAN +#endif +#if defined(__LITTLE_ENDIAN) +#define BYTE_ORDER LITTLE_ENDIAN +#endif +#endif /* BYTE_ORDER */ + /************************* Configuration Data *********************************/ extern int aic7xxx_no_probe; extern int aic7xxx_detect_complete; @@ -376,7 +403,7 @@ #include #endif -#define AIC7XXX_DRIVER_VERSION "6.2.1" +#define AIC7XXX_DRIVER_VERSION "6.2.4" /**************************** Front End Queues ********************************/ /* @@ -422,7 +449,8 @@ AHC_DEV_TIMER_ACTIVE = 0x04, /* Our timer is active */ AHC_DEV_ON_RUN_LIST = 0x08, /* Queued to be run later */ AHC_DEV_Q_BASIC = 0x10, /* Allow basic device queuing */ - AHC_DEV_Q_TAGGED = 0x20 /* Allow full SCSI2 command queueing */ + AHC_DEV_Q_TAGGED = 0x20, /* Allow full SCSI2 command queueing */ + AHC_DEV_PERIODIC_OTAG = 0x40 /* Send OTAG to prevent starvation */ } ahc_dev_flags; struct ahc_linux_target; @@ -491,10 +519,14 @@ /* * How many transactions have been queued * without the device going idle. We use - * this statistic to + * this statistic to determine when to issue + * an ordered tag to prevent transaction + * starvation. This statistic is only updated + * if the AHC_DEV_PERIODIC_OTAG flag is set + * on this device. */ u_int commands_since_idle_or_otag; -#define AHC_OTAG_THRESH 250 +#define AHC_OTAG_THRESH 500 int lun; struct ahc_linux_target *target; @@ -580,7 +612,7 @@ /***************************** Low Level I/O **********************************/ -#if defined(__powerpc__) || defined(__i386__) || defined(__ia64__) || defined(__x86_64__) +#if defined(__powerpc__) || defined(__i386__) || defined(__ia64__) #define MMAPIO #endif @@ -594,19 +626,19 @@ static __inline uint8_t ahc_inb(struct ahc_softc * ahc, long port) { -#ifdef MMAPIO uint8_t x; +#ifdef MMAPIO if (ahc->tag == BUS_SPACE_MEMIO) { x = readb(ahc->bsh.maddr + port); } else { x = inb(ahc->bsh.ioport + port); } - mb(); - return (x); #else - return (inb(ahc->bsh.ioport + port)); + x = inb(ahc->bsh.ioport + port); #endif + mb(); + return (x); } static __inline void @@ -618,10 +650,10 @@ } else { outb(val, ahc->bsh.ioport + port); } - mb(); #else outb(val, ahc->bsh.ioport + port); #endif + mb(); } static __inline void diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_pci.c linux/drivers/scsi/aic7xxx/aic7xxx_pci.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_pci.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_pci.c Thu Oct 25 13:53:49 2001 @@ -3,7 +3,8 @@ * 3940, 2940, aic7895, aic7890, aic7880, * aic7870, aic7860 and aic7850 SCSI controllers * - * Copyright (c) 1995-2000 Justin T. Gibbs + * Copyright (c) 1994-2001 Justin T. Gibbs. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -11,26 +12,34 @@ * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aic7xxx_pci.c#28 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_pci.c#32 $ * * $FreeBSD: src/sys/dev/aic7xxx/aic7xxx_pci.c,v 1.6 2000/11/10 20:13:41 gibbs Exp $ */ @@ -137,7 +146,7 @@ #define DEVID_9005_TYPE(id) ((id) & 0xF) #define DEVID_9005_TYPE_HBA 0x0 /* Standard Card */ #define DEVID_9005_TYPE_AAA 0x3 /* RAID Card */ -#define DEVID_9005_TYPE_SISL 0x5 /* Low Cost Card */ +#define DEVID_9005_TYPE_SISL 0x5 /* Container ROMB */ #define DEVID_9005_TYPE_MB 0xF /* On Motherboard */ #define DEVID_9005_MAXRATE(id) (((id) & 0x30) >> 4) @@ -645,6 +654,8 @@ #define CACHESIZE 0x0000003ful /* only 5 bits */ #define LATTIME 0x0000ff00ul +static int ahc_9005_subdevinfo_valid(uint16_t vendor, uint16_t device, + uint16_t subvendor, uint16_t subdevice); static int ahc_ext_scbram_present(struct ahc_softc *ahc); static void ahc_scbram_config(struct ahc_softc *ahc, int enable, int pcheck, int fast, int large); @@ -674,6 +685,40 @@ static void write_brdctl(struct ahc_softc *ahc, uint8_t value); static uint8_t read_brdctl(struct ahc_softc *ahc); +static int +ahc_9005_subdevinfo_valid(uint16_t device, uint16_t vendor, + uint16_t subdevice, uint16_t subvendor) +{ + int result; + + /* Default to invalid. */ + result = 0; + if (vendor == 0x9005 + && subvendor == 0x9005 + && subdevice != device + && SUBID_9005_TYPE_KNOWN(subdevice) != 0) { + + switch (SUBID_9005_TYPE(subdevice)) { + case SUBID_9005_TYPE_MB: + break; + case SUBID_9005_TYPE_CARD: + case SUBID_9005_TYPE_LCCARD: + /* + * Currently only trust Adaptec cards to + * get the sub device info correct. + */ + if (DEVID_9005_TYPE(device) == DEVID_9005_TYPE_HBA) + result = 1; + break; + case SUBID_9005_TYPE_RAID: + break; + default: + break; + } + } + return (result); +} + struct ahc_pci_identity * ahc_find_pci_device(ahc_dev_softc_t pci) { @@ -702,9 +747,7 @@ * ID as valid. */ if (ahc_get_pci_function(pci) > 0 - && subvendor == 0x9005 - && subdevice != device - && SUBID_9005_TYPE_KNOWN(subdevice) != 0 + && ahc_9005_subdevinfo_valid(vendor, device, subvendor, subdevice) && SUBID_9005_MFUNCENB(subdevice) == 0) return (NULL); diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_proc.c linux/drivers/scsi/aic7xxx/aic7xxx_proc.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_proc.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_proc.c Thu Oct 25 13:53:49 2001 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001 Adaptec Inc. + * Copyright (c) 2000-2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -8,28 +8,36 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * * String handling code courtesy of Gerard Roudier's * sym driver. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/aic7xxx_proc.c#11 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_proc.c#13 $ */ #include "aic7xxx_osm.h" #include "aic7xxx_inline.h" diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_reg.h linux/drivers/scsi/aic7xxx/aic7xxx_reg.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_reg.h Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_reg.h Thu Oct 25 13:53:49 2001 @@ -2,8 +2,8 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/src/aic7xxx/aic7xxx.seq#33 $ - * $Id: //depot/src/aic7xxx/aic7xxx.reg#19 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#37 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#24 $ */ #define SCSISEQ 0x00 @@ -127,6 +127,7 @@ #define SSTAT3 0x0e #define SCSICNT 0xf0 +#define U2OFFCNT 0x7f #define OFFCNT 0x0f #define SCSIID_ULTRA2 0x0f @@ -331,6 +332,7 @@ #define INITIATOR_TAG 0x56 #define SEQ_FLAGS2 0x57 +#define TARGET_MSG_PENDING 0x02 #define SCB_DMA 0x01 #define SCSICONF 0x5a @@ -541,13 +543,16 @@ #define SCB_CDB_PTR 0xa0 #define SCB_RESIDUAL_DATACNT 0xa0 #define SCB_CDB_STORE 0xa0 -#define SCB_TARGET_INFO 0xa0 #define SCB_RESIDUAL_SGPTR 0xa4 #define SCB_SCSI_STATUS 0xa8 -#define SCB_CDB_STORE_PAD 0xa9 +#define SCB_TARGET_PHASES 0xa9 + +#define SCB_TARGET_DATA_DIR 0xaa + +#define SCB_TARGET_ITAG 0xab #define SCB_DATAPTR 0xac @@ -677,9 +682,6 @@ #define SG_CACHE_PRE 0xfc -#define SCB_INITIATOR_TAG 0x03 -#define SCB_TARGET_DATA_DIR 0x01 -#define SCB_TARGET_PHASES 0x00 #define MAX_OFFSET_ULTRA2 0x7f #define MAX_OFFSET_16BIT 0x08 #define BUS_8_BIT 0x00 @@ -692,7 +694,6 @@ #define TID_SHIFT 0x04 #define SCB_DOWNLOAD_SIZE_64 0x30 #define HOST_MAILBOX_SHIFT 0x04 -#define SCB_TARGET_STATUS 0x02 #define CMD_GROUP_CODE_SHIFT 0x05 #define CCSGRAM_MAXSEGS 0x10 #define SCB_LIST_NULL 0xff diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_seq.h linux/drivers/scsi/aic7xxx/aic7xxx_seq.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aic7xxx_seq.h Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aic7xxx_seq.h Thu Oct 25 13:53:49 2001 @@ -2,13 +2,13 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/src/aic7xxx/aic7xxx.seq#33 $ - * $Id: //depot/src/aic7xxx/aic7xxx.reg#19 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#37 $ + * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#24 $ */ static uint8_t seqprog[] = { 0xb2, 0x00, 0x00, 0x08, 0xf7, 0x11, 0x22, 0x08, - 0x00, 0x65, 0xde, 0x59, + 0x00, 0x65, 0xe0, 0x59, 0xf7, 0x01, 0x02, 0x08, 0xff, 0x6a, 0x24, 0x08, 0x40, 0x00, 0x40, 0x68, @@ -21,15 +21,15 @@ 0x01, 0x4d, 0xc8, 0x30, 0x00, 0x4c, 0x12, 0x70, 0x01, 0x39, 0xa2, 0x30, - 0x00, 0x6a, 0xa6, 0x5e, + 0x00, 0x6a, 0xb2, 0x5e, 0x01, 0x51, 0x20, 0x31, 0x01, 0x57, 0xae, 0x00, 0x0d, 0x6a, 0x76, 0x00, - 0x00, 0x51, 0xf8, 0x5d, + 0x00, 0x51, 0x04, 0x5e, 0x01, 0x51, 0xc8, 0x30, - 0x00, 0x39, 0xd8, 0x60, + 0x00, 0x39, 0xc8, 0x60, 0x00, 0xbb, 0x30, 0x70, - 0xc1, 0x6a, 0xbe, 0x5e, + 0xc1, 0x6a, 0xca, 0x5e, 0x01, 0xbf, 0x72, 0x30, 0x01, 0x40, 0x7e, 0x31, 0x01, 0x90, 0x80, 0x30, @@ -37,22 +37,22 @@ 0x01, 0x4d, 0x9a, 0x18, 0xfe, 0x57, 0xae, 0x08, 0x01, 0x40, 0x20, 0x31, - 0x00, 0x65, 0xdc, 0x58, + 0x00, 0x65, 0xcc, 0x58, 0x60, 0x0b, 0x40, 0x78, 0x08, 0x6a, 0x18, 0x00, 0x08, 0x11, 0x22, 0x00, 0x60, 0x0b, 0x00, 0x78, - 0x40, 0x0b, 0x0c, 0x69, - 0x80, 0x0b, 0xc6, 0x78, + 0x40, 0x0b, 0xfc, 0x68, + 0x80, 0x0b, 0xb6, 0x78, 0x20, 0x6a, 0x16, 0x00, 0xa4, 0x6a, 0x06, 0x00, 0x08, 0x3c, 0x78, 0x00, 0x01, 0x50, 0xc8, 0x30, 0xe0, 0x6a, 0xcc, 0x00, - 0x48, 0x6a, 0xe2, 0x5d, + 0x48, 0x6a, 0xee, 0x5d, 0x01, 0x6a, 0xdc, 0x01, 0x88, 0x6a, 0xcc, 0x00, - 0x48, 0x6a, 0xe2, 0x5d, + 0x48, 0x6a, 0xee, 0x5d, 0x01, 0x6a, 0x26, 0x01, 0xf0, 0x19, 0x7a, 0x08, 0x0f, 0x18, 0xc8, 0x08, @@ -63,81 +63,73 @@ 0x80, 0x3d, 0x7a, 0x00, 0x01, 0x3d, 0xd8, 0x31, 0x01, 0x3d, 0x32, 0x31, - 0x10, 0x03, 0x56, 0x79, - 0x00, 0x65, 0x04, 0x59, - 0x80, 0x66, 0xa2, 0x78, + 0x10, 0x03, 0x46, 0x79, + 0x00, 0x65, 0xf4, 0x58, + 0x80, 0x66, 0xae, 0x78, 0x01, 0x66, 0xd8, 0x31, 0x01, 0x66, 0x32, 0x31, - 0x40, 0x66, 0x80, 0x68, + 0x3f, 0x66, 0x7c, 0x08, + 0x40, 0x66, 0x82, 0x68, 0x01, 0x3c, 0x78, 0x00, - 0x10, 0x03, 0xaa, 0x78, - 0x00, 0x65, 0x04, 0x59, + 0x10, 0x03, 0x9e, 0x78, + 0x00, 0x65, 0xf4, 0x58, 0xe0, 0x66, 0xc8, 0x18, 0x00, 0x65, 0xaa, 0x50, 0xdd, 0x66, 0xc8, 0x18, 0x00, 0x65, 0xaa, 0x48, 0x01, 0x66, 0xd8, 0x31, 0x01, 0x66, 0x32, 0x31, - 0x10, 0x03, 0x56, 0x79, - 0x00, 0x65, 0x04, 0x59, + 0x10, 0x03, 0x46, 0x79, + 0x00, 0x65, 0xf4, 0x58, 0x01, 0x66, 0xd8, 0x31, 0x01, 0x66, 0x32, 0x31, 0x01, 0x66, 0xac, 0x30, 0x40, 0x3c, 0x78, 0x00, - 0x10, 0x03, 0xa0, 0x78, - 0x00, 0x65, 0x04, 0x59, - 0x00, 0x65, 0xaa, 0x40, - 0x61, 0x6a, 0xbe, 0x5e, - 0x08, 0x51, 0x2e, 0x71, - 0x02, 0x0b, 0xa6, 0x78, - 0x00, 0x65, 0xa2, 0x40, - 0x80, 0x86, 0xc8, 0x08, - 0x01, 0x4f, 0xc8, 0x30, - 0x00, 0x50, 0xbc, 0x60, - 0xc4, 0x6a, 0x54, 0x5d, - 0x40, 0x3c, 0xb8, 0x78, - 0x28, 0x6a, 0x6a, 0x5d, - 0x00, 0x65, 0x54, 0x41, - 0x08, 0x6a, 0x6a, 0x5d, - 0x00, 0x65, 0x54, 0x41, 0xff, 0x6a, 0xd8, 0x01, 0xff, 0x6a, 0x32, 0x01, 0x90, 0x3c, 0x78, 0x00, - 0x10, 0x03, 0x4a, 0x69, - 0x00, 0x65, 0x2e, 0x41, + 0x02, 0x57, 0x3a, 0x69, + 0x10, 0x03, 0x38, 0x69, + 0x00, 0x65, 0x1e, 0x41, + 0x02, 0x57, 0xae, 0x00, + 0x00, 0x65, 0x9e, 0x40, + 0x61, 0x6a, 0xca, 0x5e, + 0x08, 0x51, 0x1e, 0x71, + 0x02, 0x0b, 0xb2, 0x78, + 0x00, 0x65, 0xae, 0x40, 0x1a, 0x01, 0x02, 0x00, 0xf0, 0x19, 0x7a, 0x08, 0x0f, 0x0f, 0xc8, 0x08, 0x0f, 0x05, 0xc8, 0x08, 0x00, 0x3d, 0x7a, 0x00, - 0x08, 0x1f, 0xd4, 0x78, + 0x08, 0x1f, 0xc4, 0x78, 0x80, 0x3d, 0x7a, 0x00, 0x20, 0x6a, 0x16, 0x00, - 0x00, 0x65, 0xbe, 0x41, - 0x00, 0x65, 0x98, 0x5e, + 0x00, 0x65, 0xc0, 0x41, + 0x00, 0x65, 0xa4, 0x5e, 0x00, 0x65, 0x12, 0x40, - 0x20, 0x11, 0xe2, 0x68, + 0x20, 0x11, 0xd2, 0x68, 0x20, 0x6a, 0x18, 0x00, 0x20, 0x11, 0x22, 0x00, 0xf7, 0x1f, 0xca, 0x08, - 0x80, 0xb9, 0xe8, 0x78, + 0x80, 0xb9, 0xd8, 0x78, 0x08, 0x65, 0xca, 0x00, 0x01, 0x65, 0x3e, 0x30, 0x01, 0xb9, 0x1e, 0x30, 0x7f, 0xb9, 0x0a, 0x08, 0x01, 0xb9, 0x0a, 0x30, 0x01, 0x54, 0xca, 0x30, - 0x80, 0xb8, 0xf6, 0x78, + 0x80, 0xb8, 0xe6, 0x78, 0x80, 0x65, 0xca, 0x00, 0x01, 0x65, 0x00, 0x34, 0x01, 0x54, 0x00, 0x34, 0x1a, 0x01, 0x02, 0x00, - 0x08, 0xb8, 0x00, 0x79, + 0x08, 0xb8, 0xf0, 0x78, 0x20, 0x01, 0x02, 0x00, 0x02, 0xbd, 0x08, 0x34, 0x01, 0xbd, 0x08, 0x34, 0x08, 0x01, 0x02, 0x00, - 0x02, 0x0b, 0x06, 0x79, + 0x02, 0x0b, 0xf6, 0x78, 0xf7, 0x01, 0x02, 0x08, 0x01, 0x06, 0xcc, 0x34, 0xb2, 0x00, 0x00, 0x08, @@ -146,105 +138,114 @@ 0x01, 0xbf, 0x80, 0x30, 0x01, 0xb9, 0x7a, 0x30, 0x01, 0xba, 0x7c, 0x30, - 0x00, 0x65, 0xfa, 0x58, - 0x80, 0x0b, 0xba, 0x79, - 0xe4, 0x6a, 0x54, 0x5d, - 0x80, 0xba, 0x6a, 0x5d, - 0x20, 0xb8, 0x26, 0x79, - 0x20, 0x6a, 0x6a, 0x5d, - 0x00, 0xa3, 0x6a, 0x5d, - 0x01, 0xa0, 0x78, 0x30, - 0x10, 0xb8, 0x2e, 0x79, - 0xe4, 0x6a, 0x54, 0x5d, - 0x00, 0x65, 0xa2, 0x40, - 0x10, 0x03, 0x46, 0x69, - 0x08, 0x3c, 0x62, 0x69, - 0x04, 0x3c, 0x88, 0x69, - 0x02, 0x3c, 0x8e, 0x69, - 0x01, 0x3c, 0x4c, 0x79, + 0x00, 0x65, 0xea, 0x58, + 0x80, 0x0b, 0xbc, 0x79, + 0xe4, 0x6a, 0x60, 0x5d, + 0x80, 0xba, 0x76, 0x5d, + 0x20, 0xb8, 0x16, 0x79, + 0x20, 0x6a, 0x76, 0x5d, + 0x00, 0xab, 0x76, 0x5d, + 0x01, 0xa9, 0x78, 0x30, + 0x10, 0xb8, 0x1e, 0x79, + 0xe4, 0x6a, 0x60, 0x5d, + 0x00, 0x65, 0xae, 0x40, + 0x10, 0x03, 0x36, 0x69, + 0x08, 0x3c, 0x52, 0x69, + 0x04, 0x3c, 0x8a, 0x69, + 0x02, 0x3c, 0x90, 0x69, + 0x01, 0x3c, 0x3c, 0x79, 0x01, 0x6a, 0xa2, 0x30, - 0x00, 0x65, 0x9a, 0x59, - 0x04, 0x51, 0x3c, 0x61, - 0x00, 0x6a, 0xa6, 0x5e, + 0x00, 0x65, 0x9c, 0x59, + 0x04, 0x51, 0x2c, 0x61, + 0x00, 0x6a, 0xb2, 0x5e, 0x0d, 0x6a, 0x76, 0x00, - 0x00, 0xbb, 0xf8, 0x5d, - 0x00, 0x65, 0x26, 0x41, + 0x00, 0xbb, 0x04, 0x5e, + 0x00, 0x65, 0x16, 0x41, 0xa4, 0x6a, 0x06, 0x00, - 0x00, 0x65, 0x04, 0x59, - 0x00, 0x65, 0xa2, 0x40, - 0xe4, 0x6a, 0x54, 0x5d, - 0x20, 0x3c, 0x52, 0x79, - 0x02, 0x6a, 0x6a, 0x5d, - 0x04, 0x6a, 0x6a, 0x5d, - 0x01, 0x03, 0x54, 0x69, + 0x00, 0x65, 0xf4, 0x58, + 0x00, 0x65, 0xae, 0x40, + 0xe4, 0x6a, 0x60, 0x5d, + 0x20, 0x3c, 0x42, 0x79, + 0x02, 0x6a, 0x76, 0x5d, + 0x04, 0x6a, 0x76, 0x5d, + 0x01, 0x03, 0x44, 0x69, 0xf7, 0x11, 0x22, 0x08, 0xff, 0x6a, 0x24, 0x08, 0xff, 0x6a, 0x06, 0x08, 0x01, 0x6a, 0x7e, 0x00, - 0x00, 0x65, 0x9a, 0x59, + 0x00, 0x65, 0x9c, 0x59, 0x00, 0x65, 0x04, 0x40, - 0x84, 0x6a, 0x54, 0x5d, - 0x00, 0x65, 0x04, 0x59, + 0x80, 0x86, 0xc8, 0x08, + 0x01, 0x4f, 0xc8, 0x30, + 0x00, 0x50, 0x64, 0x61, + 0xc4, 0x6a, 0x60, 0x5d, + 0x40, 0x3c, 0x60, 0x79, + 0x28, 0x6a, 0x76, 0x5d, + 0x00, 0x65, 0x44, 0x41, + 0x08, 0x6a, 0x76, 0x5d, + 0x00, 0x65, 0x44, 0x41, + 0x84, 0x6a, 0x60, 0x5d, + 0x00, 0x65, 0xf4, 0x58, 0x01, 0x66, 0xc8, 0x30, 0x01, 0x64, 0xd8, 0x31, 0x01, 0x64, 0x32, 0x31, 0x5b, 0x64, 0xc8, 0x28, 0x30, 0x64, 0xca, 0x18, 0x01, 0x6c, 0xc8, 0x30, - 0xff, 0x64, 0x84, 0x79, + 0xff, 0x64, 0x86, 0x79, 0x08, 0x01, 0x02, 0x00, - 0x02, 0x0b, 0x76, 0x79, - 0x01, 0x64, 0x7c, 0x61, + 0x02, 0x0b, 0x78, 0x79, + 0x01, 0x64, 0x7e, 0x61, 0xf7, 0x01, 0x02, 0x08, 0x01, 0x06, 0xd8, 0x31, 0x01, 0x06, 0x32, 0x31, 0xff, 0x64, 0xc8, 0x18, - 0xff, 0x64, 0x76, 0x69, + 0xff, 0x64, 0x78, 0x69, 0xf7, 0x3c, 0x78, 0x08, - 0x00, 0x65, 0x2e, 0x41, - 0x40, 0xa1, 0x7e, 0x10, - 0x04, 0xa1, 0x54, 0x5d, - 0x00, 0x65, 0x50, 0x42, - 0xc4, 0x6a, 0x54, 0x5d, + 0x00, 0x65, 0x1e, 0x41, + 0x40, 0xaa, 0x7e, 0x10, + 0x04, 0xaa, 0x60, 0x5d, + 0x00, 0x65, 0x52, 0x42, + 0xc4, 0x6a, 0x60, 0x5d, 0xc0, 0x6a, 0x7e, 0x00, - 0x00, 0xa2, 0x6a, 0x5d, + 0x00, 0xa8, 0x76, 0x5d, 0xe4, 0x6a, 0x06, 0x00, - 0x00, 0x6a, 0x6a, 0x5d, - 0x00, 0x65, 0x54, 0x41, - 0x10, 0x3c, 0x9e, 0x69, - 0x00, 0xbb, 0x74, 0x44, + 0x00, 0x6a, 0x76, 0x5d, + 0x00, 0x65, 0x44, 0x41, + 0x10, 0x3c, 0xa0, 0x69, + 0x00, 0xbb, 0x80, 0x44, 0x18, 0x6a, 0xda, 0x01, 0x01, 0x69, 0xd8, 0x31, 0x1c, 0x6a, 0xd0, 0x01, 0x09, 0xee, 0xdc, 0x01, - 0x80, 0xee, 0xa6, 0x79, + 0x80, 0xee, 0xa8, 0x79, 0xff, 0x6a, 0xdc, 0x09, 0x01, 0x93, 0x26, 0x01, 0x03, 0x6a, 0x2a, 0x01, 0x01, 0x69, 0x32, 0x31, - 0x1c, 0x6a, 0xc6, 0x5d, + 0x1c, 0x6a, 0xd2, 0x5d, 0x0a, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x8e, 0x5e, + 0x00, 0x65, 0x9a, 0x5e, 0x01, 0x50, 0xa0, 0x18, 0x02, 0x6a, 0x22, 0x05, 0x80, 0x6a, 0x74, 0x00, 0x80, 0x3c, 0x78, 0x00, - 0x00, 0x65, 0xbe, 0x5d, + 0x00, 0x65, 0xca, 0x5d, 0x01, 0x3f, 0xc8, 0x30, - 0xbf, 0x64, 0x50, 0x7a, - 0x80, 0x64, 0x9a, 0x73, - 0xa0, 0x64, 0xf8, 0x73, - 0xc0, 0x64, 0xec, 0x73, - 0xe0, 0x64, 0x28, 0x74, - 0x01, 0x6a, 0xbe, 0x5e, - 0x00, 0x65, 0xbe, 0x41, + 0xbf, 0x64, 0x52, 0x7a, + 0x80, 0x64, 0xa6, 0x73, + 0xa0, 0x64, 0x04, 0x74, + 0xc0, 0x64, 0xf8, 0x73, + 0xe0, 0x64, 0x34, 0x74, + 0x01, 0x6a, 0xca, 0x5e, + 0x00, 0x65, 0xc0, 0x41, 0xf7, 0x11, 0x22, 0x08, 0x01, 0x06, 0xd4, 0x30, 0xff, 0x6a, 0x24, 0x08, 0xf7, 0x01, 0x02, 0x08, - 0x09, 0x0c, 0xd8, 0x79, + 0x09, 0x0c, 0xda, 0x79, 0x08, 0x0c, 0x04, 0x68, - 0xb1, 0x6a, 0xbe, 0x5e, + 0xb1, 0x6a, 0xca, 0x5e, 0xff, 0x6a, 0x26, 0x09, 0x12, 0x01, 0x02, 0x00, 0x02, 0x6a, 0x08, 0x30, @@ -257,33 +258,33 @@ 0x00, 0xa5, 0x4a, 0x21, 0x00, 0xa6, 0x4c, 0x21, 0x00, 0xa7, 0x4e, 0x25, - 0x08, 0xeb, 0xc2, 0x7e, - 0x80, 0xeb, 0xf8, 0x79, + 0x08, 0xeb, 0xce, 0x7e, + 0x80, 0xeb, 0xfa, 0x79, 0xff, 0x6a, 0xd6, 0x09, - 0x08, 0xeb, 0xfc, 0x69, + 0x08, 0xeb, 0xfe, 0x69, 0xff, 0x6a, 0xd4, 0x0c, - 0x80, 0xa3, 0xc2, 0x6e, - 0x88, 0xeb, 0x12, 0x72, - 0x08, 0xeb, 0xc2, 0x6e, - 0x04, 0xea, 0x16, 0xe2, - 0x08, 0xee, 0xc2, 0x6e, + 0x80, 0xa3, 0xce, 0x6e, + 0x88, 0xeb, 0x14, 0x72, + 0x08, 0xeb, 0xce, 0x6e, + 0x04, 0xea, 0x18, 0xe2, + 0x08, 0xee, 0xce, 0x6e, 0x04, 0x6a, 0xd0, 0x81, 0x05, 0xa4, 0xc0, 0x89, 0x03, 0xa5, 0xc2, 0x31, 0x09, 0x6a, 0xd6, 0x05, - 0x00, 0x65, 0xfa, 0x59, + 0x00, 0x65, 0xfc, 0x59, 0x06, 0xa4, 0xd4, 0x89, - 0x80, 0x94, 0xc2, 0x7e, + 0x80, 0x94, 0xce, 0x7e, 0x07, 0xe9, 0x10, 0x31, - 0x01, 0x8c, 0x1e, 0x7a, + 0x01, 0x8c, 0x20, 0x7a, 0x01, 0x55, 0xaa, 0x10, 0x01, 0xe9, 0x46, 0x31, - 0x00, 0xa3, 0xa0, 0x5e, - 0x00, 0x65, 0xec, 0x59, + 0x00, 0xa3, 0xac, 0x5e, + 0x00, 0x65, 0xee, 0x59, 0x01, 0xa4, 0xca, 0x30, - 0x01, 0x55, 0x2a, 0x7a, + 0x01, 0x55, 0x2c, 0x7a, 0x04, 0x65, 0xca, 0x00, - 0x80, 0xa3, 0x2e, 0x7a, + 0x80, 0xa3, 0x30, 0x7a, 0x02, 0x65, 0xca, 0x00, 0x01, 0x65, 0xf8, 0x31, 0x80, 0x93, 0x26, 0x01, @@ -291,168 +292,168 @@ 0x01, 0x8c, 0xc8, 0x30, 0x00, 0x88, 0xc8, 0x18, 0x02, 0x64, 0xc8, 0x88, - 0xff, 0x64, 0xc2, 0x7e, - 0xff, 0x8d, 0x44, 0x6a, - 0xff, 0x8e, 0x44, 0x6a, + 0xff, 0x64, 0xce, 0x7e, + 0xff, 0x8d, 0x46, 0x6a, + 0xff, 0x8e, 0x46, 0x6a, 0x03, 0x8c, 0xd4, 0x98, - 0x00, 0x65, 0xc2, 0x56, + 0x00, 0x65, 0xce, 0x56, 0x01, 0x64, 0x70, 0x30, 0xff, 0x64, 0xc8, 0x10, 0x01, 0x64, 0xc8, 0x18, 0x00, 0x8c, 0x18, 0x19, 0xff, 0x8d, 0x1a, 0x21, 0xff, 0x8e, 0x1c, 0x25, - 0x80, 0x3c, 0x54, 0x6a, - 0x21, 0x6a, 0xbe, 0x46, + 0x80, 0x3c, 0x56, 0x6a, + 0x21, 0x6a, 0xca, 0x46, 0xa8, 0x6a, 0x76, 0x00, 0x79, 0x6a, 0x76, 0x00, - 0x40, 0x3f, 0x5c, 0x6a, + 0x40, 0x3f, 0x5e, 0x6a, 0x04, 0x3b, 0x76, 0x00, 0x04, 0x6a, 0xd4, 0x81, - 0x20, 0x3c, 0x64, 0x7a, - 0x51, 0x6a, 0xbe, 0x5e, - 0x00, 0x65, 0x7e, 0x42, + 0x20, 0x3c, 0x66, 0x7a, + 0x51, 0x6a, 0xca, 0x5e, + 0x00, 0x65, 0x80, 0x42, 0x20, 0x3c, 0x78, 0x00, - 0x00, 0xb3, 0xa0, 0x5e, + 0x00, 0xb3, 0xac, 0x5e, 0x07, 0xac, 0x10, 0x31, 0x05, 0xb3, 0x46, 0x31, 0x88, 0x6a, 0xcc, 0x00, - 0xac, 0x6a, 0xd4, 0x5d, + 0xac, 0x6a, 0xe0, 0x5d, 0xa3, 0x6a, 0xcc, 0x00, - 0xb3, 0x6a, 0xd8, 0x5d, - 0x00, 0x65, 0x34, 0x5a, + 0xb3, 0x6a, 0xe4, 0x5d, + 0x00, 0x65, 0x36, 0x5a, 0xfd, 0xa4, 0x48, 0x09, 0x01, 0x8c, 0xaa, 0x08, 0x03, 0x8c, 0x10, 0x30, - 0x00, 0x65, 0xcc, 0x5d, - 0x01, 0xa4, 0x90, 0x7a, + 0x00, 0x65, 0xd8, 0x5d, + 0x01, 0xa4, 0x92, 0x7a, 0x04, 0x3b, 0x76, 0x08, 0x01, 0x3b, 0x26, 0x31, 0x80, 0x02, 0x04, 0x00, - 0x10, 0x0c, 0x86, 0x7a, - 0x03, 0x9e, 0x88, 0x6a, + 0x10, 0x0c, 0x88, 0x7a, + 0x03, 0x9e, 0x8a, 0x6a, 0x7f, 0x02, 0x04, 0x08, - 0x91, 0x6a, 0xbe, 0x5e, - 0x00, 0x65, 0xbe, 0x41, + 0x91, 0x6a, 0xca, 0x5e, + 0x00, 0x65, 0xc0, 0x41, 0x01, 0xa4, 0xca, 0x30, - 0x80, 0xa3, 0x96, 0x7a, + 0x80, 0xa3, 0x98, 0x7a, 0x02, 0x65, 0xca, 0x00, - 0x01, 0x55, 0x9a, 0x7a, + 0x01, 0x55, 0x9c, 0x7a, 0x04, 0x65, 0xca, 0x00, 0x01, 0x65, 0xf8, 0x31, 0x01, 0x3b, 0x26, 0x31, - 0x00, 0x65, 0x00, 0x5a, - 0x01, 0xfc, 0xa8, 0x6a, - 0x80, 0x0b, 0x9e, 0x6a, - 0x10, 0x0c, 0x9e, 0x7a, - 0x20, 0x93, 0x9e, 0x6a, + 0x00, 0x65, 0x02, 0x5a, + 0x01, 0xfc, 0xaa, 0x6a, + 0x80, 0x0b, 0xa0, 0x6a, + 0x10, 0x0c, 0xa0, 0x7a, + 0x20, 0x93, 0xa0, 0x6a, 0x02, 0x93, 0x26, 0x01, - 0x02, 0xfc, 0xb2, 0x7a, - 0x40, 0x0d, 0xcc, 0x6a, + 0x02, 0xfc, 0xb4, 0x7a, + 0x40, 0x0d, 0xce, 0x6a, 0x01, 0xa4, 0x48, 0x01, - 0x00, 0x65, 0xcc, 0x42, - 0x40, 0x0d, 0xb8, 0x6a, - 0x00, 0x65, 0x00, 0x5a, - 0x00, 0x65, 0xaa, 0x42, - 0x80, 0xfc, 0xc2, 0x7a, - 0x80, 0xa4, 0xc2, 0x6a, + 0x00, 0x65, 0xce, 0x42, + 0x40, 0x0d, 0xba, 0x6a, + 0x00, 0x65, 0x02, 0x5a, + 0x00, 0x65, 0xac, 0x42, + 0x80, 0xfc, 0xc4, 0x7a, + 0x80, 0xa4, 0xc4, 0x6a, 0xff, 0xa5, 0x4a, 0x19, 0xff, 0xa6, 0x4c, 0x21, 0xff, 0xa7, 0x4e, 0x21, 0xf8, 0xfc, 0x48, 0x09, 0xff, 0x6a, 0xaa, 0x08, - 0x04, 0xfc, 0xca, 0x7a, + 0x04, 0xfc, 0xcc, 0x7a, 0x01, 0x55, 0xaa, 0x00, 0xff, 0x6a, 0x46, 0x09, - 0x04, 0x3b, 0xe4, 0x6a, + 0x04, 0x3b, 0xe6, 0x6a, 0x02, 0x93, 0x26, 0x01, - 0x01, 0x94, 0xce, 0x7a, - 0x01, 0x94, 0xce, 0x7a, - 0x01, 0x94, 0xce, 0x7a, - 0x01, 0x94, 0xce, 0x7a, - 0x01, 0x94, 0xce, 0x7a, - 0x01, 0xa4, 0xe2, 0x7a, - 0x01, 0xfc, 0xdc, 0x7a, - 0x01, 0x94, 0xe4, 0x6a, - 0x00, 0x65, 0x7e, 0x42, - 0x01, 0x94, 0xe2, 0x7a, - 0x10, 0x94, 0xe4, 0x6a, + 0x01, 0x94, 0xd0, 0x7a, + 0x01, 0x94, 0xd0, 0x7a, + 0x01, 0x94, 0xd0, 0x7a, + 0x01, 0x94, 0xd0, 0x7a, + 0x01, 0x94, 0xd0, 0x7a, + 0x01, 0xa4, 0xe4, 0x7a, + 0x01, 0xfc, 0xde, 0x7a, + 0x01, 0x94, 0xe6, 0x6a, + 0x00, 0x65, 0x80, 0x42, + 0x01, 0x94, 0xe4, 0x7a, + 0x10, 0x94, 0xe6, 0x6a, 0xd7, 0x93, 0x26, 0x09, - 0x28, 0x93, 0xe8, 0x6a, + 0x28, 0x93, 0xea, 0x6a, 0x01, 0x85, 0x0a, 0x01, - 0x02, 0xfc, 0xf0, 0x6a, + 0x02, 0xfc, 0xf2, 0x6a, 0x01, 0x14, 0x46, 0x31, 0xff, 0x6a, 0x10, 0x09, 0xfe, 0x85, 0x0a, 0x09, - 0xff, 0x38, 0xfe, 0x6a, - 0x80, 0xa3, 0xfe, 0x7a, - 0x80, 0x0b, 0xfc, 0x7a, - 0x04, 0x3b, 0xfe, 0x7a, + 0xff, 0x38, 0x00, 0x6b, + 0x80, 0xa3, 0x00, 0x7b, + 0x80, 0x0b, 0xfe, 0x7a, + 0x04, 0x3b, 0x00, 0x7b, 0xbf, 0x3b, 0x76, 0x08, 0x01, 0x3b, 0x26, 0x31, - 0x00, 0x65, 0x00, 0x5a, - 0x01, 0x0b, 0x0c, 0x6b, - 0x10, 0x0c, 0x00, 0x7b, - 0x04, 0x93, 0x0a, 0x6b, - 0x01, 0x94, 0x08, 0x7b, - 0x10, 0x94, 0x0a, 0x6b, + 0x00, 0x65, 0x02, 0x5a, + 0x01, 0x0b, 0x0e, 0x6b, + 0x10, 0x0c, 0x02, 0x7b, + 0x04, 0x93, 0x0c, 0x6b, + 0x01, 0x94, 0x0a, 0x7b, + 0x10, 0x94, 0x0c, 0x6b, 0xc7, 0x93, 0x26, 0x09, 0x01, 0x99, 0xd4, 0x30, - 0x38, 0x93, 0x0e, 0x6b, - 0xff, 0x08, 0x60, 0x6b, - 0xff, 0x09, 0x60, 0x6b, - 0xff, 0x0a, 0x60, 0x6b, - 0xff, 0x38, 0x2a, 0x7b, + 0x38, 0x93, 0x10, 0x6b, + 0xff, 0x08, 0x62, 0x6b, + 0xff, 0x09, 0x62, 0x6b, + 0xff, 0x0a, 0x62, 0x6b, + 0xff, 0x38, 0x2c, 0x7b, 0x04, 0x14, 0x10, 0x31, 0x01, 0x38, 0x18, 0x31, 0x02, 0x6a, 0x1a, 0x31, 0x88, 0x6a, 0xcc, 0x00, - 0x14, 0x6a, 0xda, 0x5d, - 0x00, 0x38, 0xc6, 0x5d, + 0x14, 0x6a, 0xe6, 0x5d, + 0x00, 0x38, 0xd2, 0x5d, 0xff, 0x6a, 0x70, 0x08, - 0x00, 0x65, 0x56, 0x43, - 0x80, 0xa3, 0x30, 0x7b, + 0x00, 0x65, 0x58, 0x43, + 0x80, 0xa3, 0x32, 0x7b, 0x01, 0xa4, 0x48, 0x01, - 0x00, 0x65, 0x60, 0x43, - 0x08, 0xeb, 0x36, 0x7b, - 0x00, 0x65, 0x00, 0x5a, - 0x08, 0xeb, 0x32, 0x6b, + 0x00, 0x65, 0x62, 0x43, + 0x08, 0xeb, 0x38, 0x7b, + 0x00, 0x65, 0x02, 0x5a, + 0x08, 0xeb, 0x34, 0x6b, 0x07, 0xe9, 0x10, 0x31, 0x01, 0xe9, 0xca, 0x30, 0x01, 0x65, 0x46, 0x31, - 0x00, 0x6a, 0xa0, 0x5e, + 0x00, 0x6a, 0xac, 0x5e, 0x88, 0x6a, 0xcc, 0x00, - 0xa4, 0x6a, 0xda, 0x5d, - 0x08, 0x6a, 0xc6, 0x5d, + 0xa4, 0x6a, 0xe6, 0x5d, + 0x08, 0x6a, 0xd2, 0x5d, 0x0d, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x8e, 0x5e, + 0x00, 0x65, 0x9a, 0x5e, 0x88, 0x6a, 0xcc, 0x00, - 0x00, 0x65, 0x70, 0x5e, + 0x00, 0x65, 0x7c, 0x5e, 0x01, 0x99, 0x46, 0x31, - 0x00, 0xa3, 0xa0, 0x5e, + 0x00, 0xa3, 0xac, 0x5e, 0x01, 0x88, 0x10, 0x31, - 0x00, 0x65, 0x34, 0x5a, - 0x00, 0x65, 0xec, 0x59, + 0x00, 0x65, 0x36, 0x5a, + 0x00, 0x65, 0xee, 0x59, 0x03, 0x8c, 0x10, 0x30, - 0x00, 0x65, 0xcc, 0x5d, - 0x01, 0x8c, 0x5e, 0x7b, + 0x00, 0x65, 0xd8, 0x5d, + 0x01, 0x8c, 0x60, 0x7b, 0x01, 0x55, 0xaa, 0x10, - 0x80, 0x0b, 0x7e, 0x6a, - 0x80, 0x0b, 0x68, 0x6b, - 0x01, 0x0c, 0x62, 0x7b, - 0x10, 0x0c, 0x7e, 0x7a, - 0x03, 0x9e, 0x7e, 0x6a, - 0x00, 0x65, 0xf6, 0x59, - 0x00, 0x6a, 0xa0, 0x5e, - 0x01, 0xa4, 0x88, 0x6b, - 0xff, 0x38, 0x7e, 0x7b, + 0x80, 0x0b, 0x80, 0x6a, + 0x80, 0x0b, 0x6a, 0x6b, + 0x01, 0x0c, 0x64, 0x7b, + 0x10, 0x0c, 0x80, 0x7a, + 0x03, 0x9e, 0x80, 0x6a, + 0x00, 0x65, 0xf8, 0x59, + 0x00, 0x6a, 0xac, 0x5e, + 0x01, 0xa4, 0x8a, 0x6b, + 0xff, 0x38, 0x80, 0x7b, 0x01, 0x38, 0xc8, 0x30, 0x00, 0x08, 0x40, 0x19, 0xff, 0x6a, 0xc8, 0x08, 0x00, 0x09, 0x42, 0x21, 0x00, 0x0a, 0x44, 0x21, 0xff, 0x6a, 0x70, 0x08, - 0x00, 0x65, 0x80, 0x43, + 0x00, 0x65, 0x82, 0x43, 0x03, 0x08, 0x40, 0x31, 0x03, 0x08, 0x40, 0x31, 0x01, 0x08, 0x40, 0x31, @@ -461,14 +462,19 @@ 0xfd, 0xb4, 0x68, 0x09, 0x12, 0x01, 0x02, 0x00, 0x12, 0x01, 0x02, 0x00, - 0x04, 0x3c, 0xbe, 0x79, + 0x04, 0x3c, 0xc0, 0x79, 0xfb, 0x3c, 0x78, 0x08, - 0x04, 0x93, 0x2e, 0x79, - 0x01, 0x0c, 0x94, 0x6b, - 0x00, 0x65, 0x2e, 0x41, - 0x00, 0x65, 0xbe, 0x41, - 0x80, 0x3c, 0x9e, 0x6b, - 0x21, 0x6a, 0xbe, 0x46, + 0x04, 0x93, 0x1e, 0x79, + 0x01, 0x0c, 0x96, 0x6b, + 0x01, 0x55, 0x1e, 0x79, + 0x80, 0x04, 0x1e, 0x79, + 0xe4, 0x6a, 0x60, 0x5d, + 0x23, 0x6a, 0x76, 0x5d, + 0x01, 0x6a, 0x76, 0x5d, + 0x00, 0x65, 0x1e, 0x41, + 0x00, 0x65, 0xc0, 0x41, + 0x80, 0x3c, 0xaa, 0x6b, + 0x21, 0x6a, 0xca, 0x46, 0x01, 0xbc, 0x18, 0x31, 0x02, 0x6a, 0x1a, 0x31, 0x02, 0x6a, 0xf8, 0x01, @@ -478,16 +484,16 @@ 0xff, 0x6a, 0x12, 0x08, 0xff, 0x6a, 0x14, 0x08, 0xf3, 0xbc, 0xd4, 0x18, - 0xa0, 0x6a, 0xc4, 0x53, + 0xa0, 0x6a, 0xd0, 0x53, 0x04, 0xa0, 0x10, 0x31, 0xac, 0x6a, 0x26, 0x01, 0x04, 0xa0, 0x10, 0x31, 0x03, 0x08, 0x18, 0x31, 0x88, 0x6a, 0xcc, 0x00, - 0xa0, 0x6a, 0xda, 0x5d, - 0x00, 0xbc, 0xc6, 0x5d, + 0xa0, 0x6a, 0xe6, 0x5d, + 0x00, 0xbc, 0xd2, 0x5d, 0x3d, 0x6a, 0x26, 0x01, - 0x00, 0x65, 0xdc, 0x43, + 0x00, 0x65, 0xe8, 0x43, 0xff, 0x6a, 0x10, 0x09, 0xa4, 0x6a, 0x26, 0x01, 0x0c, 0xa0, 0x32, 0x31, @@ -497,117 +503,117 @@ 0x36, 0x6a, 0x26, 0x01, 0x02, 0x93, 0x26, 0x01, 0x35, 0x6a, 0x26, 0x01, - 0x00, 0x65, 0x82, 0x5e, - 0x00, 0x65, 0x82, 0x5e, + 0x00, 0x65, 0x8e, 0x5e, + 0x00, 0x65, 0x8e, 0x5e, 0x02, 0x93, 0x26, 0x01, - 0x04, 0x0b, 0xe0, 0x6b, - 0x10, 0x0c, 0xdc, 0x7b, - 0x01, 0x03, 0xe0, 0x6b, - 0x20, 0x93, 0xdc, 0x6b, + 0x04, 0x0b, 0xec, 0x6b, + 0x10, 0x0c, 0xe8, 0x7b, + 0x01, 0x03, 0xec, 0x6b, + 0x20, 0x93, 0xe8, 0x6b, 0xc7, 0x93, 0x26, 0x09, - 0x38, 0x93, 0xe6, 0x6b, + 0x38, 0x93, 0xf2, 0x6b, 0x10, 0x01, 0x02, 0x00, - 0x00, 0x65, 0xbe, 0x41, - 0x80, 0x3c, 0xf0, 0x6b, - 0x21, 0x6a, 0xbe, 0x46, + 0x00, 0x65, 0xc0, 0x41, + 0x80, 0x3c, 0xfc, 0x6b, + 0x21, 0x6a, 0xca, 0x46, 0x01, 0x06, 0x50, 0x31, - 0x00, 0x65, 0xbe, 0x41, + 0x00, 0x65, 0xc0, 0x41, 0x10, 0x3f, 0x06, 0x00, 0x10, 0x6a, 0x06, 0x00, 0x01, 0x3a, 0xca, 0x30, - 0x80, 0x65, 0x14, 0x64, - 0x10, 0xb8, 0x38, 0x6c, + 0x80, 0x65, 0x20, 0x64, + 0x10, 0xb8, 0x44, 0x6c, 0xc0, 0xba, 0xca, 0x00, - 0x40, 0xb8, 0x04, 0x6c, + 0x40, 0xb8, 0x10, 0x6c, 0xbf, 0x65, 0xca, 0x08, - 0x20, 0xb8, 0x18, 0x7c, + 0x20, 0xb8, 0x24, 0x7c, 0x01, 0x65, 0x0c, 0x30, - 0x00, 0x65, 0xbe, 0x5d, - 0xa0, 0x3f, 0x20, 0x64, + 0x00, 0x65, 0xca, 0x5d, + 0xa0, 0x3f, 0x2c, 0x64, 0x23, 0xb8, 0x0c, 0x08, - 0x00, 0x65, 0xbe, 0x5d, - 0xa0, 0x3f, 0x20, 0x64, - 0x00, 0xbb, 0x18, 0x44, - 0xff, 0x65, 0x18, 0x64, - 0x00, 0x65, 0x38, 0x44, + 0x00, 0x65, 0xca, 0x5d, + 0xa0, 0x3f, 0x2c, 0x64, + 0x00, 0xbb, 0x24, 0x44, + 0xff, 0x65, 0x24, 0x64, + 0x00, 0x65, 0x44, 0x44, 0x40, 0x6a, 0x18, 0x00, 0x01, 0x65, 0x0c, 0x30, - 0x00, 0x65, 0xbe, 0x5d, - 0xa0, 0x3f, 0xf4, 0x73, + 0x00, 0x65, 0xca, 0x5d, + 0xa0, 0x3f, 0x00, 0x74, 0x40, 0x6a, 0x18, 0x00, 0x01, 0x3a, 0xa6, 0x30, 0x08, 0x6a, 0x74, 0x00, - 0x00, 0x65, 0xbe, 0x41, - 0x64, 0x6a, 0x4e, 0x5d, - 0x80, 0x64, 0xbe, 0x6c, - 0x04, 0x64, 0x84, 0x74, - 0x02, 0x64, 0x92, 0x74, - 0x00, 0x6a, 0x54, 0x74, - 0x03, 0x64, 0xb0, 0x74, - 0x23, 0x64, 0x40, 0x74, - 0x08, 0x64, 0x50, 0x74, - 0x61, 0x6a, 0xbe, 0x5e, - 0x00, 0x65, 0xbe, 0x5d, - 0x08, 0x51, 0xc0, 0x71, - 0x00, 0x65, 0x38, 0x44, - 0x80, 0x04, 0x4e, 0x7c, - 0x51, 0x6a, 0x44, 0x5d, - 0x01, 0x51, 0x4e, 0x64, - 0x01, 0xa4, 0x4a, 0x7c, - 0x01, 0x55, 0x50, 0x7c, - 0x41, 0x6a, 0xbe, 0x5e, - 0x00, 0x65, 0x50, 0x44, - 0x07, 0x6a, 0x3a, 0x5d, + 0x00, 0x65, 0xc0, 0x41, + 0x64, 0x6a, 0x5a, 0x5d, + 0x80, 0x64, 0xca, 0x6c, + 0x04, 0x64, 0x90, 0x74, + 0x02, 0x64, 0x9e, 0x74, + 0x00, 0x6a, 0x60, 0x74, + 0x03, 0x64, 0xbc, 0x74, + 0x23, 0x64, 0x4c, 0x74, + 0x08, 0x64, 0x5c, 0x74, + 0x61, 0x6a, 0xca, 0x5e, + 0x00, 0x65, 0xca, 0x5d, + 0x08, 0x51, 0xc2, 0x71, + 0x00, 0x65, 0x44, 0x44, + 0x80, 0x04, 0x5a, 0x7c, + 0x51, 0x6a, 0x50, 0x5d, + 0x01, 0x51, 0x5a, 0x64, + 0x01, 0xa4, 0x56, 0x7c, + 0x01, 0x55, 0x5c, 0x7c, + 0x41, 0x6a, 0xca, 0x5e, + 0x00, 0x65, 0x5c, 0x44, + 0x07, 0x6a, 0x46, 0x5d, 0x01, 0x06, 0xd4, 0x30, - 0x00, 0x65, 0xbe, 0x41, - 0x10, 0xb8, 0x58, 0x7c, - 0xa1, 0x6a, 0xbe, 0x5e, - 0x01, 0xb4, 0x5e, 0x6c, - 0x02, 0xb4, 0x60, 0x6c, - 0x01, 0xa4, 0x60, 0x7c, - 0xff, 0xa8, 0x70, 0x7c, + 0x00, 0x65, 0xc0, 0x41, + 0x10, 0xb8, 0x64, 0x7c, + 0xa1, 0x6a, 0xca, 0x5e, + 0x01, 0xb4, 0x6a, 0x6c, + 0x02, 0xb4, 0x6c, 0x6c, + 0x01, 0xa4, 0x6c, 0x7c, + 0xff, 0xa8, 0x7c, 0x7c, 0x04, 0xb4, 0x68, 0x01, 0x01, 0x6a, 0x76, 0x00, - 0x00, 0xbb, 0xf8, 0x5d, - 0xff, 0xa8, 0x70, 0x7c, - 0x71, 0x6a, 0xbe, 0x5e, - 0x40, 0x51, 0x70, 0x64, - 0x00, 0x65, 0x98, 0x5e, - 0x00, 0x65, 0xd0, 0x41, - 0x00, 0xbb, 0x74, 0x5c, - 0x00, 0x65, 0xd0, 0x41, - 0x00, 0x65, 0x98, 0x5e, + 0x00, 0xbb, 0x04, 0x5e, + 0xff, 0xa8, 0x7c, 0x7c, + 0x71, 0x6a, 0xca, 0x5e, + 0x40, 0x51, 0x7c, 0x64, + 0x00, 0x65, 0xa4, 0x5e, + 0x00, 0x65, 0xd2, 0x41, + 0x00, 0xbb, 0x80, 0x5c, + 0x00, 0x65, 0xd2, 0x41, + 0x00, 0x65, 0xa4, 0x5e, 0x01, 0x65, 0xa2, 0x30, 0x01, 0xf8, 0xc8, 0x30, 0x01, 0x4e, 0xc8, 0x30, - 0x00, 0x6a, 0x9c, 0xdd, - 0x00, 0x51, 0xae, 0x5d, + 0x00, 0x6a, 0xa8, 0xdd, + 0x00, 0x51, 0xba, 0x5d, 0x01, 0x4e, 0x9c, 0x18, 0x02, 0x6a, 0x22, 0x05, 0x04, 0xb8, 0x70, 0x01, - 0x00, 0x65, 0xba, 0x5e, - 0x20, 0xb8, 0xd0, 0x69, + 0x00, 0x65, 0xc6, 0x5e, + 0x20, 0xb8, 0xd2, 0x69, 0x01, 0xbb, 0xa2, 0x30, 0x01, 0xba, 0x7c, 0x30, - 0x00, 0xb9, 0xb4, 0x5c, - 0x00, 0x65, 0xd0, 0x41, + 0x00, 0xb9, 0xc0, 0x5c, + 0x00, 0x65, 0xd2, 0x41, 0x01, 0x06, 0xd4, 0x30, - 0x20, 0x3c, 0xbe, 0x79, - 0x20, 0x3c, 0x50, 0x7c, - 0x01, 0xa4, 0xa0, 0x7c, + 0x20, 0x3c, 0xc0, 0x79, + 0x20, 0x3c, 0x5c, 0x7c, + 0x01, 0xa4, 0xac, 0x7c, 0x01, 0xb4, 0x68, 0x01, - 0x00, 0x65, 0xbe, 0x41, - 0x00, 0x65, 0x50, 0x44, + 0x00, 0x65, 0xc0, 0x41, + 0x00, 0x65, 0x5c, 0x44, 0x04, 0x14, 0x58, 0x31, 0x01, 0x06, 0xd4, 0x30, 0x08, 0xa0, 0x60, 0x31, 0xac, 0x6a, 0xcc, 0x00, - 0x14, 0x6a, 0xda, 0x5d, + 0x14, 0x6a, 0xe6, 0x5d, 0x01, 0x06, 0xd4, 0x30, - 0xa0, 0x6a, 0xd2, 0x5d, - 0x00, 0x65, 0xbe, 0x41, + 0xa0, 0x6a, 0xde, 0x5d, + 0x00, 0x65, 0xc0, 0x41, 0xdf, 0x3c, 0x78, 0x08, - 0x00, 0x65, 0x50, 0x44, + 0x00, 0x65, 0x5c, 0x44, 0x4c, 0x65, 0xcc, 0x28, 0x01, 0x3e, 0x20, 0x31, 0xd0, 0x66, 0xcc, 0x18, @@ -618,102 +624,102 @@ 0xd0, 0x65, 0xca, 0x18, 0x01, 0x3e, 0x20, 0x31, 0x30, 0x65, 0xd4, 0x18, - 0x00, 0x65, 0xcc, 0x4c, + 0x00, 0x65, 0xd8, 0x4c, 0xe1, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, 0x20, 0x65, 0xd4, 0x18, - 0x00, 0x65, 0xd4, 0x54, + 0x00, 0x65, 0xe0, 0x54, 0xe1, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, 0x20, 0x65, 0xca, 0x18, 0xe0, 0x65, 0xd4, 0x18, - 0x00, 0x65, 0xde, 0x4c, + 0x00, 0x65, 0xea, 0x4c, 0xe1, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, 0xd0, 0x65, 0xd4, 0x18, - 0x00, 0x65, 0xe6, 0x54, + 0x00, 0x65, 0xf2, 0x54, 0xe1, 0x6a, 0x22, 0x01, 0xff, 0x6a, 0xd4, 0x08, 0x01, 0x6c, 0xa2, 0x30, - 0xff, 0x51, 0xf8, 0x74, - 0x00, 0x51, 0x74, 0x5d, + 0xff, 0x51, 0x04, 0x75, + 0x00, 0x51, 0x80, 0x5d, 0x01, 0x51, 0x20, 0x31, - 0x00, 0x65, 0x1a, 0x45, + 0x00, 0x65, 0x26, 0x45, 0x01, 0xba, 0xc8, 0x30, - 0x00, 0x3e, 0x1a, 0x75, - 0x00, 0x65, 0x96, 0x5e, + 0x00, 0x3e, 0x26, 0x75, + 0x00, 0x65, 0xa2, 0x5e, 0x80, 0x3c, 0x78, 0x00, 0x01, 0x06, 0xd4, 0x30, - 0x00, 0x65, 0xbe, 0x5d, + 0x00, 0x65, 0xca, 0x5d, 0x01, 0x3c, 0x78, 0x00, - 0xe0, 0x3f, 0x36, 0x65, + 0xe0, 0x3f, 0x42, 0x65, 0x02, 0x3c, 0x78, 0x00, - 0x20, 0x12, 0x36, 0x65, - 0x51, 0x6a, 0x44, 0x5d, - 0x00, 0x51, 0x74, 0x5d, - 0x51, 0x6a, 0x44, 0x5d, + 0x20, 0x12, 0x42, 0x65, + 0x51, 0x6a, 0x50, 0x5d, + 0x00, 0x51, 0x80, 0x5d, + 0x51, 0x6a, 0x50, 0x5d, 0x01, 0x51, 0x20, 0x31, 0x04, 0x3c, 0x78, 0x00, 0x01, 0xb9, 0xc8, 0x30, - 0x00, 0x3d, 0x34, 0x65, + 0x00, 0x3d, 0x40, 0x65, 0x08, 0x3c, 0x78, 0x00, 0x01, 0xba, 0xc8, 0x30, - 0x00, 0x3e, 0x34, 0x65, + 0x00, 0x3e, 0x40, 0x65, 0x10, 0x3c, 0x78, 0x00, - 0x04, 0xb8, 0x34, 0x7d, + 0x04, 0xb8, 0x40, 0x7d, 0xfb, 0xb8, 0x70, 0x09, - 0x20, 0xb8, 0x2a, 0x6d, + 0x20, 0xb8, 0x36, 0x6d, 0x01, 0x90, 0xc8, 0x30, 0xff, 0x6a, 0xa2, 0x00, - 0x00, 0x3d, 0xb4, 0x5c, + 0x00, 0x3d, 0xc0, 0x5c, 0x01, 0x64, 0x20, 0x31, 0x80, 0x6a, 0x78, 0x00, - 0x00, 0x65, 0xfc, 0x58, - 0x10, 0xb8, 0x50, 0x7c, - 0xff, 0x6a, 0x3a, 0x5d, - 0x00, 0x65, 0x50, 0x44, - 0x00, 0x65, 0x96, 0x5e, - 0x31, 0x6a, 0xbe, 0x5e, - 0x00, 0x65, 0x50, 0x44, + 0x00, 0x65, 0xec, 0x58, + 0x10, 0xb8, 0x5c, 0x7c, + 0xff, 0x6a, 0x46, 0x5d, + 0x00, 0x65, 0x5c, 0x44, + 0x00, 0x65, 0xa2, 0x5e, + 0x31, 0x6a, 0xca, 0x5e, + 0x00, 0x65, 0x5c, 0x44, 0x10, 0x3f, 0x06, 0x00, 0x10, 0x6a, 0x06, 0x00, 0x01, 0x65, 0x74, 0x34, - 0x81, 0x6a, 0xbe, 0x5e, - 0x00, 0x65, 0x46, 0x45, + 0x81, 0x6a, 0xca, 0x5e, + 0x00, 0x65, 0x52, 0x45, 0x01, 0x06, 0xd4, 0x30, - 0x01, 0x0c, 0x46, 0x7d, - 0x04, 0x0c, 0x40, 0x6d, + 0x01, 0x0c, 0x52, 0x7d, + 0x04, 0x0c, 0x4c, 0x6d, 0xe0, 0x03, 0x7e, 0x08, - 0xe0, 0x3f, 0xbe, 0x61, + 0xe0, 0x3f, 0xc0, 0x61, 0x01, 0x65, 0xcc, 0x30, 0x01, 0x12, 0xda, 0x34, 0x01, 0x06, 0xd4, 0x34, - 0x01, 0x03, 0x54, 0x6d, + 0x01, 0x03, 0x60, 0x6d, 0x40, 0x03, 0xcc, 0x08, 0x01, 0x65, 0x06, 0x30, 0x40, 0x65, 0xc8, 0x08, - 0x00, 0x66, 0x62, 0x75, - 0x40, 0x65, 0x62, 0x7d, - 0x00, 0x65, 0x62, 0x5d, + 0x00, 0x66, 0x6e, 0x75, + 0x40, 0x65, 0x6e, 0x7d, + 0x00, 0x65, 0x6e, 0x5d, 0xff, 0x6a, 0xd4, 0x08, 0xff, 0x6a, 0xd4, 0x08, 0xff, 0x6a, 0xd4, 0x08, 0xff, 0x6a, 0xd4, 0x0c, 0x08, 0x01, 0x02, 0x00, - 0x02, 0x0b, 0x6c, 0x7d, + 0x02, 0x0b, 0x78, 0x7d, 0x01, 0x65, 0x0c, 0x30, - 0x02, 0x0b, 0x70, 0x7d, + 0x02, 0x0b, 0x7c, 0x7d, 0xf7, 0x01, 0x02, 0x0c, 0x01, 0x65, 0xc8, 0x30, - 0xff, 0x41, 0x94, 0x75, + 0xff, 0x41, 0xa0, 0x75, 0x01, 0x41, 0x20, 0x31, 0xff, 0x6a, 0xa4, 0x00, - 0x00, 0x65, 0x84, 0x45, - 0xff, 0xbf, 0x94, 0x75, + 0x00, 0x65, 0x90, 0x45, + 0xff, 0xbf, 0xa0, 0x75, 0x01, 0x90, 0xa4, 0x30, 0x01, 0xbf, 0x20, 0x31, - 0x00, 0xbb, 0x7e, 0x65, - 0xff, 0x52, 0x92, 0x75, + 0x00, 0xbb, 0x8a, 0x65, + 0xff, 0x52, 0x9e, 0x75, 0x01, 0xbf, 0xcc, 0x30, 0x01, 0x90, 0xca, 0x30, 0x01, 0x52, 0x20, 0x31, @@ -721,28 +727,28 @@ 0x01, 0x65, 0x20, 0x35, 0x01, 0xbf, 0x82, 0x34, 0x01, 0x64, 0xa2, 0x30, - 0x00, 0x6a, 0xa6, 0x5e, + 0x00, 0x6a, 0xb2, 0x5e, 0x0d, 0x6a, 0x76, 0x00, - 0x00, 0x51, 0xf8, 0x45, + 0x00, 0x51, 0x04, 0x46, 0x01, 0x65, 0xa4, 0x30, 0xe0, 0x6a, 0xcc, 0x00, - 0x48, 0x6a, 0xec, 0x5d, + 0x48, 0x6a, 0xf8, 0x5d, 0x01, 0x6a, 0xd0, 0x01, 0x01, 0x6a, 0xdc, 0x05, 0x88, 0x6a, 0xcc, 0x00, - 0x48, 0x6a, 0xec, 0x5d, - 0x01, 0x6a, 0xc6, 0x5d, + 0x48, 0x6a, 0xf8, 0x5d, + 0x01, 0x6a, 0xd2, 0x5d, 0x01, 0x6a, 0x26, 0x05, 0x01, 0x65, 0xd8, 0x31, 0x09, 0xee, 0xdc, 0x01, - 0x80, 0xee, 0xb2, 0x7d, + 0x80, 0xee, 0xbe, 0x7d, 0xff, 0x6a, 0xdc, 0x0d, 0x01, 0x65, 0x32, 0x31, 0x0a, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x8e, 0x46, - 0x81, 0x6a, 0xbe, 0x5e, - 0x01, 0x0c, 0xbe, 0x7d, - 0x04, 0x0c, 0xbc, 0x6d, + 0x00, 0x65, 0x9a, 0x46, + 0x81, 0x6a, 0xca, 0x5e, + 0x01, 0x0c, 0xca, 0x7d, + 0x04, 0x0c, 0xc8, 0x6d, 0xe0, 0x03, 0x06, 0x08, 0xe0, 0x03, 0x7e, 0x0c, 0x01, 0x65, 0x18, 0x31, @@ -761,7 +767,7 @@ 0x01, 0x6c, 0xda, 0x34, 0x3d, 0x64, 0xa4, 0x28, 0x55, 0x64, 0xc8, 0x28, - 0x00, 0x65, 0xec, 0x45, + 0x00, 0x65, 0xf8, 0x45, 0x2e, 0x64, 0xa4, 0x28, 0x66, 0x64, 0xc8, 0x28, 0x00, 0x6c, 0xda, 0x18, @@ -772,63 +778,63 @@ 0x00, 0x6c, 0xda, 0x24, 0x01, 0x65, 0xc8, 0x30, 0xe0, 0x6a, 0xcc, 0x00, - 0x44, 0x6a, 0xe8, 0x5d, + 0x44, 0x6a, 0xf4, 0x5d, 0x01, 0x90, 0xe2, 0x31, - 0x04, 0x3b, 0x0c, 0x7e, + 0x04, 0x3b, 0x18, 0x7e, 0x30, 0x6a, 0xd0, 0x01, 0x20, 0x6a, 0xd0, 0x01, 0x1d, 0x6a, 0xdc, 0x01, - 0xdc, 0xee, 0x08, 0x66, - 0x00, 0x65, 0x24, 0x46, + 0xdc, 0xee, 0x14, 0x66, + 0x00, 0x65, 0x30, 0x46, 0x20, 0x6a, 0xd0, 0x01, 0x01, 0x6a, 0xdc, 0x01, 0x20, 0xa0, 0xd8, 0x31, 0x09, 0xee, 0xdc, 0x01, - 0x80, 0xee, 0x14, 0x7e, + 0x80, 0xee, 0x20, 0x7e, 0x11, 0x6a, 0xdc, 0x01, - 0x50, 0xee, 0x18, 0x66, + 0x50, 0xee, 0x24, 0x66, 0x20, 0x6a, 0xd0, 0x01, 0x09, 0x6a, 0xdc, 0x01, - 0x88, 0xee, 0x1e, 0x66, + 0x88, 0xee, 0x2a, 0x66, 0x19, 0x6a, 0xdc, 0x01, - 0xd8, 0xee, 0x22, 0x66, + 0xd8, 0xee, 0x2e, 0x66, 0xff, 0x6a, 0xdc, 0x09, - 0x18, 0xee, 0x26, 0x6e, + 0x18, 0xee, 0x32, 0x6e, 0xff, 0x6a, 0xd4, 0x0c, 0x88, 0x6a, 0xcc, 0x00, - 0x44, 0x6a, 0xe8, 0x5d, - 0x20, 0x6a, 0xc6, 0x5d, + 0x44, 0x6a, 0xf4, 0x5d, + 0x20, 0x6a, 0xd2, 0x5d, 0x01, 0x3b, 0x26, 0x31, - 0x04, 0x3b, 0x40, 0x6e, + 0x04, 0x3b, 0x4c, 0x6e, 0xa0, 0x6a, 0xca, 0x00, 0x20, 0x65, 0xc8, 0x18, - 0x00, 0x65, 0x7e, 0x5e, - 0x00, 0x65, 0x38, 0x66, + 0x00, 0x65, 0x8a, 0x5e, + 0x00, 0x65, 0x44, 0x66, 0x0a, 0x93, 0x26, 0x01, - 0x00, 0x65, 0x8e, 0x46, + 0x00, 0x65, 0x9a, 0x46, 0xa0, 0x6a, 0xcc, 0x00, 0xff, 0x6a, 0xc8, 0x08, - 0x20, 0x94, 0x44, 0x6e, - 0x10, 0x94, 0x46, 0x6e, - 0x08, 0x94, 0x60, 0x6e, - 0x08, 0x94, 0x60, 0x6e, - 0x08, 0x94, 0x60, 0x6e, + 0x20, 0x94, 0x50, 0x6e, + 0x10, 0x94, 0x52, 0x6e, + 0x08, 0x94, 0x6c, 0x6e, + 0x08, 0x94, 0x6c, 0x6e, + 0x08, 0x94, 0x6c, 0x6e, 0xff, 0x8c, 0xc8, 0x10, 0xc1, 0x64, 0xc8, 0x18, 0xf8, 0x64, 0xc8, 0x08, 0x01, 0x99, 0xda, 0x30, - 0x00, 0x66, 0x54, 0x66, - 0xc0, 0x66, 0x90, 0x76, + 0x00, 0x66, 0x60, 0x66, + 0xc0, 0x66, 0x9c, 0x76, 0x60, 0x66, 0xc8, 0x18, 0x3d, 0x64, 0xc8, 0x28, - 0x00, 0x65, 0x44, 0x46, + 0x00, 0x65, 0x50, 0x46, 0xf7, 0x93, 0x26, 0x09, - 0x08, 0x93, 0x62, 0x6e, + 0x08, 0x93, 0x6e, 0x6e, 0x00, 0x62, 0xc4, 0x18, - 0x00, 0x65, 0x8e, 0x5e, - 0x00, 0x65, 0x6e, 0x5e, - 0x00, 0x65, 0x6e, 0x5e, - 0x00, 0x65, 0x6e, 0x5e, + 0x00, 0x65, 0x9a, 0x5e, + 0x00, 0x65, 0x7a, 0x5e, + 0x00, 0x65, 0x7a, 0x5e, + 0x00, 0x65, 0x7a, 0x5e, 0x01, 0x99, 0xda, 0x30, 0x01, 0x99, 0xda, 0x30, 0x01, 0x99, 0xda, 0x30, @@ -845,11 +851,11 @@ 0x01, 0x6c, 0x32, 0x31, 0x01, 0x6c, 0x32, 0x31, 0x01, 0x6c, 0x32, 0x35, - 0x08, 0x94, 0x8e, 0x7e, + 0x08, 0x94, 0x9a, 0x7e, 0xf7, 0x93, 0x26, 0x09, - 0x08, 0x93, 0x92, 0x6e, + 0x08, 0x93, 0x9e, 0x6e, 0xff, 0x6a, 0xd4, 0x0c, - 0x04, 0xb8, 0xba, 0x6e, + 0x04, 0xb8, 0xc6, 0x6e, 0x01, 0x42, 0x7e, 0x31, 0xff, 0x6a, 0x76, 0x01, 0x01, 0x90, 0x84, 0x34, @@ -857,14 +863,14 @@ 0x01, 0x85, 0x0a, 0x01, 0x7f, 0x65, 0x10, 0x09, 0xfe, 0x85, 0x0a, 0x0d, - 0xff, 0x42, 0xb6, 0x66, - 0xff, 0x41, 0xae, 0x66, - 0xd1, 0x6a, 0xbe, 0x5e, + 0xff, 0x42, 0xc2, 0x66, + 0xff, 0x41, 0xba, 0x66, + 0xd1, 0x6a, 0xca, 0x5e, 0xff, 0x6a, 0xca, 0x04, 0x01, 0x41, 0x20, 0x31, 0x01, 0xbf, 0x82, 0x30, 0x01, 0x6a, 0x76, 0x00, - 0x00, 0xbb, 0xf8, 0x45, + 0x00, 0xbb, 0x04, 0x46, 0x01, 0x42, 0x20, 0x31, 0x01, 0xbf, 0x84, 0x34, 0x01, 0x41, 0x7e, 0x31, @@ -967,7 +973,7 @@ static int ahc_patch12_func(struct ahc_softc *ahc) { - return ((ahc->features & AHC_ULTRA) != 0); + return ((ahc->features & AHC_HS_MAILBOX) != 0); } static int ahc_patch11_func(struct ahc_softc *ahc); @@ -975,7 +981,7 @@ static int ahc_patch11_func(struct ahc_softc *ahc) { - return ((ahc->features & AHC_HS_MAILBOX) != 0); + return ((ahc->features & AHC_ULTRA) != 0); } static int ahc_patch10_func(struct ahc_softc *ahc); @@ -1084,7 +1090,7 @@ { ahc_patch3_func, 27, 1, 2 }, { ahc_patch0_func, 28, 1, 1 }, { ahc_patch6_func, 34, 1, 1 }, - { ahc_patch7_func, 37, 62, 21 }, + { ahc_patch7_func, 37, 54, 19 }, { ahc_patch8_func, 37, 1, 1 }, { ahc_patch9_func, 42, 3, 2 }, { ahc_patch0_func, 45, 3, 1 }, @@ -1097,185 +1103,185 @@ { ahc_patch0_func, 56, 1, 1 }, { ahc_patch9_func, 60, 1, 2 }, { ahc_patch0_func, 61, 1, 1 }, - { ahc_patch9_func, 70, 1, 2 }, - { ahc_patch0_func, 71, 1, 1 }, - { ahc_patch9_func, 74, 1, 2 }, - { ahc_patch0_func, 75, 1, 1 }, - { ahc_patch11_func, 85, 1, 2 }, - { ahc_patch0_func, 86, 1, 1 }, - { ahc_patch9_func, 94, 1, 2 }, - { ahc_patch0_func, 95, 1, 1 }, - { ahc_patch8_func, 99, 9, 4 }, - { ahc_patch1_func, 101, 1, 2 }, - { ahc_patch0_func, 102, 1, 1 }, - { ahc_patch2_func, 104, 2, 1 }, - { ahc_patch2_func, 113, 4, 1 }, - { ahc_patch1_func, 117, 1, 2 }, - { ahc_patch0_func, 118, 2, 3 }, - { ahc_patch2_func, 118, 1, 2 }, - { ahc_patch0_func, 119, 1, 1 }, - { ahc_patch7_func, 120, 4, 2 }, - { ahc_patch0_func, 124, 1, 1 }, - { ahc_patch12_func, 126, 2, 1 }, - { ahc_patch1_func, 128, 1, 2 }, - { ahc_patch0_func, 129, 1, 1 }, - { ahc_patch7_func, 130, 4, 1 }, - { ahc_patch7_func, 141, 80, 9 }, - { ahc_patch4_func, 159, 1, 1 }, - { ahc_patch1_func, 172, 1, 1 }, - { ahc_patch9_func, 180, 1, 2 }, - { ahc_patch0_func, 181, 1, 1 }, - { ahc_patch9_func, 190, 1, 2 }, - { ahc_patch0_func, 191, 1, 1 }, - { ahc_patch9_func, 207, 6, 2 }, - { ahc_patch0_func, 213, 6, 1 }, - { ahc_patch8_func, 221, 18, 2 }, - { ahc_patch1_func, 234, 1, 1 }, - { ahc_patch1_func, 241, 1, 2 }, - { ahc_patch0_func, 242, 2, 2 }, - { ahc_patch12_func, 243, 1, 1 }, - { ahc_patch9_func, 251, 31, 3 }, - { ahc_patch1_func, 267, 14, 2 }, - { ahc_patch13_func, 272, 1, 1 }, - { ahc_patch14_func, 282, 14, 1 }, - { ahc_patch1_func, 298, 1, 2 }, - { ahc_patch0_func, 299, 1, 1 }, - { ahc_patch9_func, 302, 1, 1 }, - { ahc_patch13_func, 307, 1, 1 }, - { ahc_patch9_func, 308, 2, 2 }, - { ahc_patch0_func, 310, 4, 1 }, - { ahc_patch14_func, 314, 1, 1 }, - { ahc_patch15_func, 317, 2, 3 }, - { ahc_patch9_func, 317, 1, 2 }, - { ahc_patch0_func, 318, 1, 1 }, - { ahc_patch6_func, 323, 1, 2 }, - { ahc_patch0_func, 324, 1, 1 }, - { ahc_patch1_func, 328, 50, 11 }, - { ahc_patch6_func, 337, 2, 4 }, - { ahc_patch7_func, 337, 1, 1 }, - { ahc_patch8_func, 338, 1, 1 }, - { ahc_patch0_func, 339, 1, 1 }, - { ahc_patch16_func, 340, 1, 1 }, - { ahc_patch6_func, 359, 6, 3 }, - { ahc_patch16_func, 359, 5, 1 }, - { ahc_patch0_func, 365, 5, 1 }, - { ahc_patch13_func, 373, 5, 1 }, - { ahc_patch0_func, 378, 54, 17 }, - { ahc_patch14_func, 378, 1, 1 }, - { ahc_patch7_func, 380, 2, 2 }, - { ahc_patch17_func, 381, 1, 1 }, - { ahc_patch9_func, 384, 1, 1 }, - { ahc_patch18_func, 391, 1, 1 }, - { ahc_patch14_func, 396, 9, 3 }, - { ahc_patch9_func, 397, 3, 2 }, - { ahc_patch0_func, 400, 3, 1 }, - { ahc_patch9_func, 408, 6, 2 }, - { ahc_patch0_func, 414, 9, 2 }, - { ahc_patch13_func, 414, 1, 1 }, - { ahc_patch13_func, 423, 2, 1 }, - { ahc_patch14_func, 425, 1, 1 }, - { ahc_patch9_func, 427, 1, 2 }, - { ahc_patch0_func, 428, 1, 1 }, - { ahc_patch7_func, 431, 1, 1 }, + { ahc_patch9_func, 71, 1, 2 }, + { ahc_patch0_func, 72, 1, 1 }, + { ahc_patch9_func, 75, 1, 2 }, + { ahc_patch0_func, 76, 1, 1 }, + { ahc_patch9_func, 79, 1, 2 }, + { ahc_patch0_func, 80, 1, 1 }, + { ahc_patch8_func, 91, 9, 4 }, + { ahc_patch1_func, 93, 1, 2 }, + { ahc_patch0_func, 94, 1, 1 }, + { ahc_patch2_func, 96, 2, 1 }, + { ahc_patch2_func, 105, 4, 1 }, + { ahc_patch1_func, 109, 1, 2 }, + { ahc_patch0_func, 110, 2, 3 }, + { ahc_patch2_func, 110, 1, 2 }, + { ahc_patch0_func, 111, 1, 1 }, + { ahc_patch7_func, 112, 4, 2 }, + { ahc_patch0_func, 116, 1, 1 }, + { ahc_patch11_func, 118, 2, 1 }, + { ahc_patch1_func, 120, 1, 2 }, + { ahc_patch0_func, 121, 1, 1 }, + { ahc_patch7_func, 122, 4, 1 }, + { ahc_patch7_func, 133, 89, 11 }, + { ahc_patch4_func, 151, 1, 1 }, + { ahc_patch1_func, 164, 1, 1 }, + { ahc_patch12_func, 169, 1, 2 }, + { ahc_patch0_func, 170, 1, 1 }, + { ahc_patch9_func, 181, 1, 2 }, + { ahc_patch0_func, 182, 1, 1 }, + { ahc_patch9_func, 191, 1, 2 }, + { ahc_patch0_func, 192, 1, 1 }, + { ahc_patch9_func, 208, 6, 2 }, + { ahc_patch0_func, 214, 6, 1 }, + { ahc_patch8_func, 222, 18, 2 }, + { ahc_patch1_func, 235, 1, 1 }, + { ahc_patch1_func, 242, 1, 2 }, + { ahc_patch0_func, 243, 2, 2 }, + { ahc_patch11_func, 244, 1, 1 }, + { ahc_patch9_func, 252, 31, 3 }, + { ahc_patch1_func, 268, 14, 2 }, + { ahc_patch13_func, 273, 1, 1 }, + { ahc_patch14_func, 283, 14, 1 }, + { ahc_patch1_func, 299, 1, 2 }, + { ahc_patch0_func, 300, 1, 1 }, + { ahc_patch9_func, 303, 1, 1 }, + { ahc_patch13_func, 308, 1, 1 }, + { ahc_patch9_func, 309, 2, 2 }, + { ahc_patch0_func, 311, 4, 1 }, + { ahc_patch14_func, 315, 1, 1 }, + { ahc_patch15_func, 318, 2, 3 }, + { ahc_patch9_func, 318, 1, 2 }, + { ahc_patch0_func, 319, 1, 1 }, + { ahc_patch6_func, 324, 1, 2 }, + { ahc_patch0_func, 325, 1, 1 }, + { ahc_patch1_func, 329, 50, 11 }, + { ahc_patch6_func, 338, 2, 4 }, + { ahc_patch7_func, 338, 1, 1 }, + { ahc_patch8_func, 339, 1, 1 }, + { ahc_patch0_func, 340, 1, 1 }, + { ahc_patch16_func, 341, 1, 1 }, + { ahc_patch6_func, 360, 6, 3 }, + { ahc_patch16_func, 360, 5, 1 }, + { ahc_patch0_func, 366, 5, 1 }, + { ahc_patch13_func, 374, 5, 1 }, + { ahc_patch0_func, 379, 54, 17 }, + { ahc_patch14_func, 379, 1, 1 }, + { ahc_patch7_func, 381, 2, 2 }, + { ahc_patch17_func, 382, 1, 1 }, + { ahc_patch9_func, 385, 1, 1 }, + { ahc_patch18_func, 392, 1, 1 }, + { ahc_patch14_func, 397, 9, 3 }, + { ahc_patch9_func, 398, 3, 2 }, + { ahc_patch0_func, 401, 3, 1 }, + { ahc_patch9_func, 409, 6, 2 }, + { ahc_patch0_func, 415, 9, 2 }, + { ahc_patch13_func, 415, 1, 1 }, + { ahc_patch13_func, 424, 2, 1 }, + { ahc_patch14_func, 426, 1, 1 }, + { ahc_patch9_func, 428, 1, 2 }, + { ahc_patch0_func, 429, 1, 1 }, { ahc_patch7_func, 432, 1, 1 }, - { ahc_patch8_func, 433, 3, 3 }, - { ahc_patch6_func, 434, 1, 2 }, - { ahc_patch0_func, 435, 1, 1 }, - { ahc_patch9_func, 436, 1, 1 }, - { ahc_patch15_func, 437, 1, 2 }, - { ahc_patch13_func, 437, 1, 1 }, - { ahc_patch14_func, 439, 9, 4 }, - { ahc_patch9_func, 439, 1, 1 }, - { ahc_patch9_func, 446, 2, 1 }, - { ahc_patch0_func, 448, 4, 3 }, - { ahc_patch9_func, 448, 1, 2 }, - { ahc_patch0_func, 449, 3, 1 }, - { ahc_patch1_func, 453, 2, 1 }, - { ahc_patch7_func, 455, 5, 2 }, - { ahc_patch0_func, 460, 1, 1 }, - { ahc_patch8_func, 461, 109, 23 }, - { ahc_patch1_func, 463, 3, 2 }, - { ahc_patch0_func, 466, 5, 3 }, - { ahc_patch9_func, 466, 2, 2 }, - { ahc_patch0_func, 468, 3, 1 }, - { ahc_patch1_func, 473, 2, 2 }, - { ahc_patch0_func, 475, 6, 3 }, - { ahc_patch9_func, 475, 2, 2 }, - { ahc_patch0_func, 477, 3, 1 }, - { ahc_patch1_func, 483, 2, 2 }, - { ahc_patch0_func, 485, 9, 7 }, - { ahc_patch9_func, 485, 5, 6 }, - { ahc_patch19_func, 485, 1, 2 }, - { ahc_patch0_func, 486, 1, 1 }, - { ahc_patch19_func, 488, 1, 2 }, - { ahc_patch0_func, 489, 1, 1 }, - { ahc_patch0_func, 490, 4, 1 }, - { ahc_patch6_func, 494, 3, 2 }, - { ahc_patch0_func, 497, 1, 1 }, - { ahc_patch1_func, 500, 1, 1 }, - { ahc_patch6_func, 506, 1, 2 }, - { ahc_patch0_func, 507, 1, 1 }, - { ahc_patch20_func, 544, 7, 1 }, - { ahc_patch3_func, 572, 1, 2 }, - { ahc_patch0_func, 573, 1, 1 }, - { ahc_patch21_func, 576, 1, 1 }, - { ahc_patch8_func, 578, 104, 33 }, - { ahc_patch4_func, 579, 1, 1 }, - { ahc_patch1_func, 585, 2, 2 }, - { ahc_patch0_func, 587, 1, 1 }, - { ahc_patch1_func, 590, 1, 2 }, - { ahc_patch0_func, 591, 1, 1 }, - { ahc_patch9_func, 592, 3, 3 }, - { ahc_patch15_func, 593, 1, 1 }, - { ahc_patch0_func, 595, 4, 1 }, - { ahc_patch19_func, 603, 2, 2 }, - { ahc_patch0_func, 605, 1, 1 }, - { ahc_patch19_func, 609, 10, 3 }, - { ahc_patch5_func, 611, 8, 1 }, - { ahc_patch0_func, 619, 9, 2 }, - { ahc_patch5_func, 620, 8, 1 }, - { ahc_patch4_func, 630, 1, 2 }, - { ahc_patch0_func, 631, 1, 1 }, - { ahc_patch19_func, 632, 1, 2 }, - { ahc_patch0_func, 633, 3, 2 }, - { ahc_patch4_func, 635, 1, 1 }, - { ahc_patch5_func, 636, 1, 1 }, - { ahc_patch5_func, 639, 1, 1 }, - { ahc_patch5_func, 641, 1, 1 }, - { ahc_patch4_func, 643, 2, 2 }, - { ahc_patch0_func, 645, 2, 1 }, + { ahc_patch7_func, 433, 1, 1 }, + { ahc_patch8_func, 434, 3, 3 }, + { ahc_patch6_func, 435, 1, 2 }, + { ahc_patch0_func, 436, 1, 1 }, + { ahc_patch9_func, 437, 1, 1 }, + { ahc_patch15_func, 438, 1, 2 }, + { ahc_patch13_func, 438, 1, 1 }, + { ahc_patch14_func, 440, 9, 4 }, + { ahc_patch9_func, 440, 1, 1 }, + { ahc_patch9_func, 447, 2, 1 }, + { ahc_patch0_func, 449, 4, 3 }, + { ahc_patch9_func, 449, 1, 2 }, + { ahc_patch0_func, 450, 3, 1 }, + { ahc_patch1_func, 454, 2, 1 }, + { ahc_patch7_func, 456, 10, 2 }, + { ahc_patch0_func, 466, 1, 1 }, + { ahc_patch8_func, 467, 109, 23 }, + { ahc_patch1_func, 469, 3, 2 }, + { ahc_patch0_func, 472, 5, 3 }, + { ahc_patch9_func, 472, 2, 2 }, + { ahc_patch0_func, 474, 3, 1 }, + { ahc_patch1_func, 479, 2, 2 }, + { ahc_patch0_func, 481, 6, 3 }, + { ahc_patch9_func, 481, 2, 2 }, + { ahc_patch0_func, 483, 3, 1 }, + { ahc_patch1_func, 489, 2, 2 }, + { ahc_patch0_func, 491, 9, 7 }, + { ahc_patch9_func, 491, 5, 6 }, + { ahc_patch19_func, 491, 1, 2 }, + { ahc_patch0_func, 492, 1, 1 }, + { ahc_patch19_func, 494, 1, 2 }, + { ahc_patch0_func, 495, 1, 1 }, + { ahc_patch0_func, 496, 4, 1 }, + { ahc_patch6_func, 500, 3, 2 }, + { ahc_patch0_func, 503, 1, 1 }, + { ahc_patch1_func, 506, 1, 1 }, + { ahc_patch6_func, 512, 1, 2 }, + { ahc_patch0_func, 513, 1, 1 }, + { ahc_patch20_func, 550, 7, 1 }, + { ahc_patch3_func, 578, 1, 2 }, + { ahc_patch0_func, 579, 1, 1 }, + { ahc_patch21_func, 582, 1, 1 }, + { ahc_patch8_func, 584, 104, 33 }, + { ahc_patch4_func, 585, 1, 1 }, + { ahc_patch1_func, 591, 2, 2 }, + { ahc_patch0_func, 593, 1, 1 }, + { ahc_patch1_func, 596, 1, 2 }, + { ahc_patch0_func, 597, 1, 1 }, + { ahc_patch9_func, 598, 3, 3 }, + { ahc_patch15_func, 599, 1, 1 }, + { ahc_patch0_func, 601, 4, 1 }, + { ahc_patch19_func, 609, 2, 2 }, + { ahc_patch0_func, 611, 1, 1 }, + { ahc_patch19_func, 615, 10, 3 }, + { ahc_patch5_func, 617, 8, 1 }, + { ahc_patch0_func, 625, 9, 2 }, + { ahc_patch5_func, 626, 8, 1 }, + { ahc_patch4_func, 636, 1, 2 }, + { ahc_patch0_func, 637, 1, 1 }, + { ahc_patch19_func, 638, 1, 2 }, + { ahc_patch0_func, 639, 3, 2 }, + { ahc_patch4_func, 641, 1, 1 }, + { ahc_patch5_func, 642, 1, 1 }, + { ahc_patch5_func, 645, 1, 1 }, { ahc_patch5_func, 647, 1, 1 }, - { ahc_patch5_func, 650, 1, 1 }, + { ahc_patch4_func, 649, 2, 2 }, + { ahc_patch0_func, 651, 2, 1 }, { ahc_patch5_func, 653, 1, 1 }, - { ahc_patch19_func, 657, 1, 1 }, - { ahc_patch19_func, 660, 1, 1 }, - { ahc_patch4_func, 666, 1, 1 }, - { ahc_patch6_func, 669, 1, 2 }, - { ahc_patch0_func, 670, 1, 1 }, - { ahc_patch7_func, 682, 16, 1 }, - { ahc_patch4_func, 698, 20, 1 }, - { ahc_patch9_func, 719, 4, 2 }, - { ahc_patch0_func, 723, 4, 1 }, - { ahc_patch9_func, 727, 4, 2 }, - { ahc_patch0_func, 731, 3, 1 }, - { ahc_patch6_func, 737, 1, 1 }, - { ahc_patch22_func, 739, 14, 1 }, - { ahc_patch7_func, 753, 3, 1 }, - { ahc_patch9_func, 765, 24, 8 }, - { ahc_patch19_func, 769, 1, 2 }, - { ahc_patch0_func, 770, 1, 1 }, - { ahc_patch15_func, 775, 4, 2 }, - { ahc_patch0_func, 779, 7, 3 }, - { ahc_patch23_func, 779, 5, 2 }, - { ahc_patch0_func, 784, 2, 1 }, - { ahc_patch0_func, 789, 42, 3 }, - { ahc_patch18_func, 801, 18, 2 }, - { ahc_patch0_func, 819, 1, 1 }, - { ahc_patch4_func, 843, 1, 1 }, - { ahc_patch4_func, 844, 3, 2 }, - { ahc_patch0_func, 847, 1, 1 }, - { ahc_patch13_func, 848, 3, 1 }, - { ahc_patch4_func, 851, 12, 1 } + { ahc_patch5_func, 656, 1, 1 }, + { ahc_patch5_func, 659, 1, 1 }, + { ahc_patch19_func, 663, 1, 1 }, + { ahc_patch19_func, 666, 1, 1 }, + { ahc_patch4_func, 672, 1, 1 }, + { ahc_patch6_func, 675, 1, 2 }, + { ahc_patch0_func, 676, 1, 1 }, + { ahc_patch7_func, 688, 16, 1 }, + { ahc_patch4_func, 704, 20, 1 }, + { ahc_patch9_func, 725, 4, 2 }, + { ahc_patch0_func, 729, 4, 1 }, + { ahc_patch9_func, 733, 4, 2 }, + { ahc_patch0_func, 737, 3, 1 }, + { ahc_patch6_func, 743, 1, 1 }, + { ahc_patch22_func, 745, 14, 1 }, + { ahc_patch7_func, 759, 3, 1 }, + { ahc_patch9_func, 771, 24, 8 }, + { ahc_patch19_func, 775, 1, 2 }, + { ahc_patch0_func, 776, 1, 1 }, + { ahc_patch15_func, 781, 4, 2 }, + { ahc_patch0_func, 785, 7, 3 }, + { ahc_patch23_func, 785, 5, 2 }, + { ahc_patch0_func, 790, 2, 1 }, + { ahc_patch0_func, 795, 42, 3 }, + { ahc_patch18_func, 807, 18, 2 }, + { ahc_patch0_func, 825, 1, 1 }, + { ahc_patch4_func, 849, 1, 1 }, + { ahc_patch4_func, 850, 3, 2 }, + { ahc_patch0_func, 853, 1, 1 }, + { ahc_patch13_func, 854, 3, 1 }, + { ahc_patch4_func, 857, 12, 1 } }; struct cs { u_int16_t begin; @@ -1283,11 +1289,11 @@ } critical_sections[] = { { 11, 18 }, { 21, 30 }, - { 698, 714 }, - { 844, 847 }, - { 851, 857 }, - { 859, 861 }, - { 861, 863 } + { 704, 720 }, + { 850, 853 }, + { 857, 863 }, + { 865, 867 }, + { 867, 869 } }; const int num_critical_sections = sizeof(critical_sections) / sizeof(*critical_sections); diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/Makefile linux/drivers/scsi/aic7xxx/aicasm/Makefile --- v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/Makefile Fri May 4 15:16:28 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/Makefile Thu Oct 25 13:53:49 2001 @@ -1,8 +1,9 @@ PROG= aicasm +.SUFFIXES= .l .y .c + CSRCS= aicasm.c aicasm_symbol.c GENSRCS= aicasm_gram.c aicasm_scan.c -DEPHDRS= aicdb.h GENHDRS= y.tab.h aicdb.h SRCS= ${GENSRCS} ${CSRCS} @@ -25,9 +26,7 @@ LFLAGS= -d endif -.SUFFIXES= .l .y .c - -$(PROG): $(SRCS) $(DEPHDRS) +$(PROG): $(SRCS) $(GENHDRS) $(AICASM_CC) $(AICASM_CFLAGS) $(SRCS) -o $(PROG) aicdb.h: @@ -45,3 +44,9 @@ clean: rm -f $(CLEANFILES) $(PROG) + +y.tab.h aicasm_gram.c: aicasm_gram.y + $(YACC) $(YFLAGS) aicasm_gram.y + mv y.tab.c aicasm_gram.c + +aicasm_scan.c: y.tab.h diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm.c linux/drivers/scsi/aic7xxx/aicasm/aicasm.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm.c Thu Oct 25 13:53:49 2001 @@ -1,7 +1,8 @@ /* * Aic7xxx SCSI host adapter firmware asssembler * - * Copyright (c) 1997, 1998, 2000 Justin T. Gibbs. + * Copyright (c) 1997, 1998, 2000, 2001 Justin T. Gibbs. + * Copyright (c) 2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -9,26 +10,34 @@ * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm.c#8 $ + * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm.c#11 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm.c,v 1.29 2000/10/05 04:25:42 gibbs Exp $ */ @@ -42,6 +51,12 @@ #include #include #include + +#if linux +#include +#else +#include +#endif #include "aicasm.h" #include "aicasm_symbol.h" diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm.h linux/drivers/scsi/aic7xxx/aicasm/aicasm.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm.h Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm.h Thu Oct 25 13:53:49 2001 @@ -2,6 +2,7 @@ * Assembler for the sequencer program downloaded to Aic7xxx SCSI host adapters * * Copyright (c) 1997 Justin T. Gibbs. + * Copyright (c) 2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,25 +11,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm.h#5 $ + * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm.h#7 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm.h,v 1.11 2000/09/22 22:19:54 gibbs Exp $ */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y --- v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y Thu Oct 25 13:53:49 2001 @@ -3,6 +3,7 @@ * Parser for the Aic7xxx SCSI Host adapter sequencer assembler. * * Copyright (c) 1997, 1998, 2000 Justin T. Gibbs. + * Copyright (c) 2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -11,25 +12,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm_gram.y#7 $ + * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_gram.y#9 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_gram.y,v 1.12 2000/10/31 18:44:32 gibbs Exp $ */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_insformat.h linux/drivers/scsi/aic7xxx/aicasm/aicasm_insformat.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_insformat.h Sun Mar 4 14:30:18 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_insformat.h Thu Oct 25 13:53:49 2001 @@ -11,34 +11,36 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm_insformat.h#4 $ + * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_insformat.h#7 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_insformat.h,v 1.3 2000/09/22 22:19:54 gibbs Exp $ */ - -#if linux -#include -#else -#include -#endif struct ins_format1 { #if BYTE_ORDER == LITTLE_ENDIAN diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l linux/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l --- v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l Thu Oct 25 13:53:49 2001 @@ -2,7 +2,8 @@ /* * Lexical Analyzer for the Aic7xxx SCSI Host adapter sequencer assembler. * - * Copyright (c) 1997, 1998 Justin T. Gibbs. + * Copyright (c) 1997, 1998, 2000 Justin T. Gibbs. + * Copyright (c) 2001 Adaptec Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -11,25 +12,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm_scan.l#5 $ + * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_scan.l#7 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_scan.l,v 1.13 2000/09/22 22:19:54 gibbs Exp $ */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c --- v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c Thu Oct 25 13:53:49 2001 @@ -10,25 +10,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm_symbol.c#7 $ + * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_symbol.c#9 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_symbol.c,v 1.11 2000/09/22 22:19:54 gibbs Exp $ */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h --- v2.4.13/linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h Sun Mar 4 14:30:18 2001 +++ linux/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h Thu Oct 25 13:53:49 2001 @@ -10,25 +10,33 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. * - * $Id: //depot/src/aic7xxx/aicasm/aicasm_symbol.h#4 $ + * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_symbol.h#6 $ * * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_symbol.h,v 1.11 2000/09/22 22:19:55 gibbs Exp $ */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/aic7xxx/cam.h linux/drivers/scsi/aic7xxx/cam.h --- v2.4.13/linux/drivers/scsi/aic7xxx/cam.h Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/aic7xxx/cam.h Thu Oct 25 13:53:49 2001 @@ -15,7 +15,7 @@ * derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the - * GNU Public License ("GPL"). + * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: //depot/src/linux/drivers/scsi/aic7xxx/cam.h#10 $ + * $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/cam.h#11 $ */ #ifndef _AIC7XXX_CAM_H diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/amiga7xx.c linux/drivers/scsi/amiga7xx.c --- v2.4.13/linux/drivers/scsi/amiga7xx.c Fri Dec 29 14:07:22 2000 +++ linux/drivers/scsi/amiga7xx.c Thu Oct 25 13:53:49 2001 @@ -20,7 +20,7 @@ #include #include #include -#include + #include #include "scsi.h" @@ -133,3 +133,6 @@ called = 1; return num; } + +static Scsi_Host_Template driver_template = AMIGA7XX_SCSI; +#include "scsi_module.c" diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/blz1230.c linux/drivers/scsi/blz1230.c --- v2.4.13/linux/drivers/scsi/blz1230.c Tue Mar 6 19:44:37 2001 +++ linux/drivers/scsi/blz1230.c Thu Oct 25 13:53:49 2001 @@ -51,7 +51,7 @@ static int dma_ports_p(struct NCR_ESP *esp); static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write); -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* This is where all commands are put * before they are transferred to the ESP chip * via PIO. @@ -64,6 +64,7 @@ struct zorro_dev *z = NULL; unsigned long address; struct ESP_regs *eregs; + unsigned long board; #if MKIV #define REAL_BLZ1230_ID ZORRO_PROD_PHASE5_BLIZZARD_1230_IV_1260 @@ -76,7 +77,7 @@ #endif if ((z = zorro_find_device(REAL_BLZ1230_ID, z))) { - unsigned long board = z->resource.start; + board = z->resource.start; if (request_mem_region(board+REAL_BLZ1230_ESP_ADDR, sizeof(struct ESP_regs), "NCR53C9x")) { /* Do some magic to figure out if the blizzard is diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/blz2060.c linux/drivers/scsi/blz2060.c --- v2.4.13/linux/drivers/scsi/blz2060.c Fri Mar 2 18:38:38 2001 +++ linux/drivers/scsi/blz2060.c Thu Oct 25 13:53:49 2001 @@ -51,7 +51,7 @@ static int dma_ports_p(struct NCR_ESP *esp); static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write); -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* This is where all commands are put * before they are transferred to the ESP chip * via PIO. diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/bvme6000.c linux/drivers/scsi/bvme6000.c --- v2.4.13/linux/drivers/scsi/bvme6000.c Thu Nov 11 16:57:30 1999 +++ linux/drivers/scsi/bvme6000.c Thu Oct 25 13:53:49 2001 @@ -50,3 +50,6 @@ called = 1; return 1; } + +static Scsi_Host_Template driver_template = BVME6000_SCSI; +#include "scsi_module.c" diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/constants.c linux/drivers/scsi/constants.c --- v2.4.13/linux/drivers/scsi/constants.c Tue Jul 3 17:08:20 2001 +++ linux/drivers/scsi/constants.c Thu Oct 25 13:53:50 2001 @@ -74,6 +74,18 @@ }; +/* The following are 16 byte commands in group 4 */ +static const char *group_4_commands[] = { +/* 80-84 */ unknown, unknown, unknown, unknown, unknown, +/* 85-89 */ "Memory Export In (16)", unknown, unknown, unknown, + "Memory Export Out (16)", +/* 8a-8f */ unknown, unknown, unknown, unknown, unknown, unknown, +/* 90-94 */ unknown, unknown, unknown, unknown, unknown, +/* 95-99 */ unknown, unknown, unknown, unknown, unknown, +/* 9a-9f */ unknown, unknown, unknown, unknown, unknown, unknown, +}; + + /* The following are 12 byte commands in group 5 */ static const char *group_5_commands[] = { /* a0-a5 */ unknown, unknown, unknown, unknown, unknown, @@ -97,7 +109,7 @@ static const char **commands[] = { group_0_commands, group_1_commands, group_2_commands, - (const char **) RESERVED_GROUP, (const char **) RESERVED_GROUP, + (const char **) RESERVED_GROUP, group_4_commands, group_5_commands, (const char **) VENDOR_GROUP, (const char **) VENDOR_GROUP }; diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/cpqfc.Readme linux/drivers/scsi/cpqfc.Readme --- v2.4.13/linux/drivers/scsi/cpqfc.Readme Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/cpqfc.Readme Thu Oct 25 13:53:50 2001 @@ -7,6 +7,21 @@ SEST size 512 Exchanges (simultaneous I/Os) limited by module kmalloc() max of 128k bytes contiguous. +Ver 2.1.1 Oct 18, 2001 + * reinitialize Cmnd->SCp.sent_command (used to identify commands as + passthrus) on calling scsi_done, since the scsi mid layer does not + use (or reinitialize) this field to prevent subsequent comands from + having it set incorrectly. + +Ver 2.1.0 Aug 27, 2001 + * Revise driver to use new kernel 2.4.x PCI DMA API, instead of + virt_to_bus(). (enables driver to work w/ ia64 systems with >2Gb RAM.) + Rework main scatter-gather code to handle cases where SG element + lengths are larger than 0x7FFFF bytes and use as many scatter + gather pages as necessary. (Steve Cameron) + * Makefile changes to bring cpqfc into line w/ rest of SCSI drivers + (thanks to Keith Owens) + Ver 2.0.5 Aug 06, 2001 * Reject non-existent luns in the driver rather than letting the hardware do it. (some HW behaves differently than others in this area.) diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/cpqfcTScontrol.c linux/drivers/scsi/cpqfcTScontrol.c --- v2.4.13/linux/drivers/scsi/cpqfcTScontrol.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/cpqfcTScontrol.c Thu Oct 25 13:53:50 2001 @@ -55,6 +55,21 @@ static void CpqTsGetSFQEntry(TACHYON * fcChip, USHORT pi, ULONG * buffr, BOOLEAN UpdateChip); +static void +cpqfc_free_dma_consistent(CPQFCHBA *cpqfcHBAdata) +{ + // free up the primary EXCHANGES struct and Link Q + PTACHYON fcChip = &cpqfcHBAdata->fcChip; + + if (fcChip->Exchanges != NULL) + pci_free_consistent(cpqfcHBAdata->PciDev, sizeof(FC_EXCHANGES), + fcChip->Exchanges, fcChip->exch_dma_handle); + fcChip->Exchanges = NULL; + if (cpqfcHBAdata->fcLQ != NULL) + pci_free_consistent(cpqfcHBAdata->PciDev, sizeof(FC_LINK_QUE), + cpqfcHBAdata->fcLQ, cpqfcHBAdata->fcLQ_dma_handle); + cpqfcHBAdata->fcLQ = NULL; +} // Note special requirements for Q alignment! (TL/TS UG pg. 190) // We place critical index pointers at end of QUE elements to assist @@ -68,7 +83,8 @@ int iStatus=0; unsigned long ulAddr; - + dma_addr_t ERQdma, IMQdma, SPQdma, SESTdma; + int i; // NOTE! fcMemManager() will return system virtual addresses. // System (kernel) virtual addresses, though non-paged, still @@ -78,15 +94,18 @@ // Allocate primary EXCHANGES array... + fcChip->Exchanges = NULL; + cpqfcHBAdata->fcLQ = NULL; printk("Allocating %u for %u Exchanges ", (ULONG)sizeof(FC_EXCHANGES), TACH_MAX_XID); - fcChip->Exchanges = kmalloc( sizeof( FC_EXCHANGES), GFP_KERNEL ); + fcChip->Exchanges = pci_alloc_consistent(cpqfcHBAdata->PciDev, + sizeof(FC_EXCHANGES), &fcChip->exch_dma_handle); printk("@ %p\n", fcChip->Exchanges); if( fcChip->Exchanges == NULL ) // fatal error!! { - printk("kmalloc failure on Exchanges: fatal error\n"); + printk("pci_alloc_consistent failure on Exchanges: fatal error\n"); return -1; } // zero out the entire EXCHANGE space @@ -94,25 +113,24 @@ printk("Allocating %u for LinkQ ", (ULONG)sizeof(FC_LINK_QUE)); - cpqfcHBAdata->fcLQ = kmalloc( sizeof( FC_LINK_QUE), GFP_KERNEL ); + cpqfcHBAdata->fcLQ = pci_alloc_consistent(cpqfcHBAdata->PciDev, + sizeof( FC_LINK_QUE), &cpqfcHBAdata->fcLQ_dma_handle); printk("@ %p (%u elements)\n", cpqfcHBAdata->fcLQ, FC_LINKQ_DEPTH); memset( cpqfcHBAdata->fcLQ, 0, sizeof( FC_LINK_QUE)); if( cpqfcHBAdata->fcLQ == NULL ) // fatal error!! { - printk("kmalloc failure on fc Link Que: fatal error\n"); + cpqfc_free_dma_consistent(cpqfcHBAdata); + printk("pci_alloc_consistent() failure on fc Link Que: fatal error\n"); return -1; } // zero out the entire EXCHANGE space memset( cpqfcHBAdata->fcLQ, 0, sizeof( FC_LINK_QUE)); - - - // Verify that basic Tach I/O registers are not NULL - if( !fcChip->Registers.ReMapMemBase ) { + cpqfc_free_dma_consistent(cpqfcHBAdata); printk("HBA base address NULL: fatal error\n"); return -1; } @@ -125,18 +143,21 @@ // Allocate Tach's Exchange Request Queue (each ERQ entry 32 bytes) - fcChip->ERQ = fcMemManager( &cpqfcHBAdata->dynamic_mem[0], - sizeof( TachLiteERQ ), 32*(ERQ_LEN), 0L ); + fcChip->ERQ = fcMemManager( cpqfcHBAdata->PciDev, + &cpqfcHBAdata->dynamic_mem[0], + sizeof( TachLiteERQ ), 32*(ERQ_LEN), 0L, &ERQdma); if( !fcChip->ERQ ) { - printk("kmalloc/alignment failure on ERQ: fatal error\n"); + cpqfc_free_dma_consistent(cpqfcHBAdata); + printk("pci_alloc_consistent/alignment failure on ERQ: fatal error\n"); return -1; } fcChip->ERQ->length = ERQ_LEN-1; - ulAddr = virt_to_bus( fcChip->ERQ); + ulAddr = (ULONG) ERQdma; #if BITS_PER_LONG > 32 if( (ulAddr >> 32) ) { + cpqfc_free_dma_consistent(cpqfcHBAdata); printk(" FATAL! ERQ ptr %p exceeds Tachyon's 32-bit register size\n", (void*)ulAddr); return -1; // failed @@ -147,19 +168,22 @@ // Allocate Tach's Inbound Message Queue (32 bytes per entry) - fcChip->IMQ = fcMemManager( &cpqfcHBAdata->dynamic_mem[0], - sizeof( TachyonIMQ ), 32*(IMQ_LEN), 0L ); + fcChip->IMQ = fcMemManager( cpqfcHBAdata->PciDev, + &cpqfcHBAdata->dynamic_mem[0], + sizeof( TachyonIMQ ), 32*(IMQ_LEN), 0L, &IMQdma ); if( !fcChip->IMQ ) { - printk("kmalloc/alignment failure on IMQ: fatal error\n"); + cpqfc_free_dma_consistent(cpqfcHBAdata); + printk("pci_alloc_consistent/alignment failure on IMQ: fatal error\n"); return -1; } fcChip->IMQ->length = IMQ_LEN-1; - ulAddr = virt_to_bus( fcChip->IMQ); + ulAddr = IMQdma; #if BITS_PER_LONG > 32 if( (ulAddr >> 32) ) { + cpqfc_free_dma_consistent(cpqfcHBAdata); printk(" FATAL! IMQ ptr %p exceeds Tachyon's 32-bit register size\n", (void*)ulAddr); return -1; // failed @@ -169,20 +193,23 @@ // Allocate Tach's Single Frame Queue (64 bytes per entry) - fcChip->SFQ = fcMemManager( &cpqfcHBAdata->dynamic_mem[0], - sizeof( TachLiteSFQ ), 64*(SFQ_LEN),0L ); + fcChip->SFQ = fcMemManager( cpqfcHBAdata->PciDev, + &cpqfcHBAdata->dynamic_mem[0], + sizeof( TachLiteSFQ ), 64*(SFQ_LEN),0L, &SPQdma ); if( !fcChip->SFQ ) { - printk("kmalloc/alignment failure on SFQ: fatal error\n"); + cpqfc_free_dma_consistent(cpqfcHBAdata); + printk("pci_alloc_consistent/alignment failure on SFQ: fatal error\n"); return -1; } fcChip->SFQ->length = SFQ_LEN-1; // i.e. Que length [# entries - // min. 32; max. 4096 (0xffff)] - ulAddr = virt_to_bus( fcChip->SFQ); + ulAddr = SPQdma; #if BITS_PER_LONG > 32 if( (ulAddr >> 32) ) { + cpqfc_free_dma_consistent(cpqfcHBAdata); printk(" FATAL! SFQ ptr %p exceeds Tachyon's 32-bit register size\n", (void*)ulAddr); return -1; // failed @@ -197,22 +224,28 @@ // be on physical page (e.g. 4k) boundary. printk("Allocating %u for TachSEST for %u Exchanges\n", (ULONG)sizeof(TachSEST), TACH_SEST_LEN); - fcChip->SEST = fcMemManager( &cpqfcHBAdata->dynamic_mem[0], - sizeof(TachSEST), 4, 0L ); + fcChip->SEST = fcMemManager( cpqfcHBAdata->PciDev, + &cpqfcHBAdata->dynamic_mem[0], + sizeof(TachSEST), 4, 0L, &SESTdma ); // sizeof(TachSEST), 64*TACH_SEST_LEN, 0L ); if( !fcChip->SEST ) { - printk("kmalloc/alignment failure on SEST: fatal error\n"); + cpqfc_free_dma_consistent(cpqfcHBAdata); + printk("pci_alloc_consistent/alignment failure on SEST: fatal error\n"); return -1; } + for( i=0; i < TACH_SEST_LEN; i++) // for each exchange + fcChip->SEST->sgPages[i] = NULL; + fcChip->SEST->length = TACH_SEST_LEN; // e.g. DON'T subtract one // (TL/TS UG, pg 153) - ulAddr = virt_to_bus( fcChip->SEST); + ulAddr = SESTdma; #if BITS_PER_LONG > 32 if( (ulAddr >> 32) ) { + cpqfc_free_dma_consistent(cpqfcHBAdata); printk(" FATAL! SFQ ptr %p exceeds Tachyon's 32-bit register size\n", (void*)ulAddr); return -1; // failed @@ -241,7 +274,8 @@ // NOTE! write consumer index last, since the write // causes Tachyon to process the other registers - ulAddr = virt_to_bus( &fcChip->ERQ->consumerIndex); + ulAddr = ((unsigned long)&fcChip->ERQ->consumerIndex - + (unsigned long)fcChip->ERQ) + (unsigned long) ERQdma; // NOTE! Tachyon DMAs to the ERQ consumer Index host // address; must be correctly aligned @@ -269,10 +303,13 @@ // NOTE: TachLite DMAs to the producerIndex host address // must be correctly aligned with address bits 1-0 cleared // Writing the BASE register clears the PI register, so write it last - ulAddr = virt_to_bus( &fcChip->IMQ->producerIndex); + ulAddr = ((unsigned long)&fcChip->IMQ->producerIndex - + (unsigned long)fcChip->IMQ) + (unsigned long) IMQdma; + #if BITS_PER_LONG > 32 if( (ulAddr >> 32) ) { + cpqfc_free_dma_consistent(cpqfcHBAdata); printk(" FATAL! IMQ ptr %p exceeds Tachyon's 32-bit register size\n", (void*)ulAddr); return -1; // failed @@ -1225,7 +1262,7 @@ #endif Exchanges->fcExchange[i].status |= INITIATOR_ABORT; - cpqfcTSCompleteExchange( fcChip, i); // abort on LDn + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, i); // abort on LDn } } @@ -1505,7 +1542,7 @@ if( RPCset ) // SEST transaction Response frame rec'd { // complete the command in our driver... - cpqfcTSCompleteExchange( fcChip, x_ID); + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev,fcChip, x_ID); } // end "RPCset" @@ -1709,16 +1746,15 @@ case 3: // allocate mem, set Tachyon Que registers iStatus = CpqTsCreateTachLiteQues( cpqfcHBAdata, opcode2); + if( iStatus ) + break; + // now that the Queues exist, Tach can DMA to them, so // we can begin processing INTs // INTEN register - enable INT (TachLite interrupt) writeb( 0x1F, fcChip->Registers.ReMapMemBase + IINTEN); - - if( iStatus ) - break; - - + // Fall through case 4: // Config Fame Manager, Init Loop Command, laser on // L_PORT or loopback @@ -1750,9 +1786,11 @@ { CPQFCHBA *cpqfcHBAdata = (CPQFCHBA*)pHBA; PTACHYON fcChip = &cpqfcHBAdata->fcChip; - USHORT i, j, iStatus=0; + USHORT i, iStatus=0; void* vPtr; // mem Align manager sets this to the freed address on success unsigned long ulPtr; // for 64-bit pointer cast (e.g. Alpa machine) + FC_EXCHANGES *Exchanges = fcChip->Exchanges; + PSGPAGES j, next; ENTER("DestroyTachLiteQues"); @@ -1760,19 +1798,25 @@ { // search out and free Pool for Extended S/G list pages - for( i=0, j=0; i < TACH_SEST_LEN; i++, j=0) // for each exchange + for( i=0; i < TACH_SEST_LEN; i++) // for each exchange { - // It's possible that extended S/G pages were allocated and + // It's possible that extended S/G pages were allocated, mapped, and // not cleared due to error conditions or O/S driver termination. // Make sure they're all gone. - while( fcChip->SEST->sgPages[i].PoolPage[j] && - (j < TL_MAX_SGPAGES)) - kfree( fcChip->SEST->sgPages[i].PoolPage[j++]); - + if (Exchanges->fcExchange[i].Cmnd != NULL) + cpqfc_pci_unmap(cpqfcHBAdata->PciDev, Exchanges->fcExchange[i].Cmnd, + fcChip, i); // undo DMA mappings. + + for (j=fcChip->SEST->sgPages[i] ; j != NULL ; j = next) { + next = j->next; + kfree(j); + } + fcChip->SEST->sgPages[i] = NULL; } ulPtr = (unsigned long)fcChip->SEST; - vPtr = fcMemManager( &cpqfcHBAdata->dynamic_mem[0], - 0,0, (ULONG)ulPtr ); // 'free' mem + vPtr = fcMemManager( cpqfcHBAdata->PciDev, + &cpqfcHBAdata->dynamic_mem[0], + 0,0, (ULONG)ulPtr, NULL ); // 'free' mem fcChip->SEST = 0L; // null invalid ptr if( !vPtr ) { @@ -1785,8 +1829,9 @@ { ulPtr = (unsigned long)fcChip->SFQ; - vPtr = fcMemManager( &cpqfcHBAdata->dynamic_mem[0], - 0,0, (ULONG)ulPtr ); // 'free' mem + vPtr = fcMemManager( cpqfcHBAdata->PciDev, + &cpqfcHBAdata->dynamic_mem[0], + 0,0, (ULONG)ulPtr, NULL ); // 'free' mem fcChip->SFQ = 0L; // null invalid ptr if( !vPtr ) { @@ -1803,8 +1848,8 @@ fcChip->IMQ->consumerIndex = 0; ulPtr = (unsigned long)fcChip->IMQ; - vPtr = fcMemManager( &cpqfcHBAdata->dynamic_mem[0], - 0,0, (ULONG)ulPtr ); // 'free' mem + vPtr = fcMemManager( cpqfcHBAdata->PciDev, &cpqfcHBAdata->dynamic_mem[0], + 0,0, (ULONG)ulPtr, NULL ); // 'free' mem fcChip->IMQ = 0L; // null invalid ptr if( !vPtr ) { @@ -1816,8 +1861,8 @@ if( fcChip->ERQ ) // release memory blocks used by the queues { ulPtr = (unsigned long)fcChip->ERQ; - vPtr = fcMemManager( &cpqfcHBAdata->dynamic_mem[0], - 0,0, (ULONG)ulPtr ); // 'free' mem + vPtr = fcMemManager( cpqfcHBAdata->PciDev, &cpqfcHBAdata->dynamic_mem[0], + 0,0, (ULONG)ulPtr, NULL ); // 'free' mem fcChip->ERQ = 0L; // null invalid ptr if( !vPtr ) { @@ -1826,19 +1871,8 @@ } } - // free up the primary EXCHANGES struct - if( fcChip->Exchanges != NULL) - { -// printk("kfree() on Exchanges @%p\n", fcChip->Exchanges); - kfree( fcChip->Exchanges); - } - - // free up Link Q - if( cpqfcHBAdata->fcLQ != NULL ) - { -// printk("kfree() on LinkQ @%p\n", fcChip->fcLQ); - kfree( cpqfcHBAdata->fcLQ); - } + // free up the primary EXCHANGES struct and Link Q + cpqfc_free_dma_consistent(cpqfcHBAdata); LEAVE("DestroyTachLiteQues"); diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/cpqfcTSinit.c linux/drivers/scsi/cpqfcTSinit.c --- v2.4.13/linux/drivers/scsi/cpqfcTSinit.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/cpqfcTSinit.c Thu Oct 25 13:53:50 2001 @@ -67,7 +67,7 @@ /* Embedded module documentation macros - see module.h */ MODULE_AUTHOR("Compaq Computer Corporation"); -MODULE_DESCRIPTION("Driver for Compaq 64-bit/66Mhz PCI Fibre Channel HBA"); +MODULE_DESCRIPTION("Driver for Compaq 64-bit/66Mhz PCI Fibre Channel HBA v. 2.1.1"); MODULE_LICENSE("GPL"); int cpqfcTS_TargetDeviceReset( Scsi_Device *ScsiDev, unsigned int reset_flags); @@ -304,6 +304,13 @@ while( (PciDev = pci_find_device( PCIids[i].vendor_id, PCIids[i].device_id, PciDev) )) { + + if (pci_set_dma_mask(PciDev, CPQFCTS_DMA_MASK) != 0) { + printk(KERN_WARNING + "cpqfc: HBA cannot support required DMA mask, skipping.\n"); + continue; + } + // NOTE: (kernel 2.2.12-32) limits allocation to 128k bytes... printk(" scsi_register allocating %d bytes for FC HBA\n", (ULONG)sizeof(CPQFCHBA)); @@ -415,8 +422,10 @@ // now initialize our hardware... - - cpqfcHBAdata->fcChip.InitializeTachyon( cpqfcHBAdata, 1,1); + if (cpqfcHBAdata->fcChip.InitializeTachyon( cpqfcHBAdata, 1,1)) { + printk(KERN_WARNING "cpqfc: initialization of HBA hardware failed.\n"); + // FIXME: might want to do something better than nothing here. + } cpqfcHBAdata->fcStatsTime = jiffies; // (for FC Statistics delta) @@ -660,7 +669,7 @@ - case SCSI_IOCTL_FC_TARGET_ADDRESS: + case CPQFC_IOCTL_FC_TARGET_ADDRESS: result = verify_area(VERIFY_WRITE, arg, sizeof(Scsi_FCTargAddress)); if (result) @@ -678,7 +687,7 @@ break; - case SCSI_IOCTL_FC_TDR: + case CPQFC_IOCTL_FC_TDR: result = cpqfcTS_TargetDeviceReset( ScsiDev, 0); @@ -880,7 +889,6 @@ cpqfcTSDecodeGBICtype( &cpqfcHBA->fcChip, &buf[0]); cpqfcTSGetLPSM( &cpqfcHBA->fcChip, &buf[ strlen(buf)]); copy_info(&info, "%s\n", buf); - #define DISPLAY_WWN_INFO #ifdef DISPLAY_WWN_INFO @@ -905,6 +913,9 @@ } } #endif + + + // Unfortunately, the proc_info buffer isn't big enough @@ -1191,6 +1202,9 @@ // The file "hosts.h" says not to call scsi_done from // inside _queuecommand, so we'll do it from the heartbeat timer +// (clarification: Turns out it's ok to call scsi_done from queuecommand +// for cases that don't go to the hardware like scsi cmds destined +// for LUNs we know don't exist, so this code might be simplified...) static void QueBadTargetCmnd( CPQFCHBA *cpqfcHBAdata, Scsi_Cmnd *Cmnd) { @@ -1675,8 +1689,15 @@ printk(" cpqfcTS adapter PCI master address crossed 45-bit boundary\n"); if( IntPending & 0x2 ) printk(" cpqfcTS adapter DMA error detected\n"); - if( IntPending & 0x1 ) + if( IntPending & 0x1 ) { + UCHAR IntStat; printk(" cpqfcTS adapter PCI error detected\n"); + IntStat = readb( cpqfcHBA->fcChip.Registers.INTSTAT.address); + if (IntStat & 0x4) printk("(INT)\n"); + if (IntStat & 0x8) + printk("CRS: PCI master address crossed 46 bit bouandary\n"); + if (IntStat & 0x10) printk("MRE: external memory parity error.\n"); + } } } spin_unlock_irqrestore( &io_request_lock, flags); @@ -1859,8 +1880,9 @@ // we need about 8 allocations per HBA. Figuring at most 10 HBAs per server // size the dynamic_mem array at 80. -void* fcMemManager( ALIGNED_MEM *dynamic_mem, ULONG n_alloc, ULONG ab, - ULONG u32_AlignedAddress) +void* fcMemManager( struct pci_dev *pdev, ALIGNED_MEM *dynamic_mem, + ULONG n_alloc, ULONG ab, ULONG u32_AlignedAddress, + dma_addr_t *dma_handle) { USHORT allocBoundary=1; // compiler specific - worst case 1 // best case - replace malloc() call @@ -1882,38 +1904,51 @@ if( dynamic_mem[i].AlignedAddress == u32_AlignedAddress ) { alloc_address = dynamic_mem[i].BaseAllocated; // 'success' status - kfree( dynamic_mem[i].BaseAllocated); // return pages to kernel + pci_free_consistent(pdev,dynamic_mem[i].size, + alloc_address, + dynamic_mem[i].dma_handle); dynamic_mem[i].BaseAllocated = 0; // clear for next use dynamic_mem[i].AlignedAddress = 0; + dynamic_mem[i].size = 0; break; // quit for loop; done } } } else if( n_alloc ) // want new memory? { + dma_addr_t handle; t_alloc = n_alloc + (ab - allocBoundary); // pad bytes for alignment -// printk("kmalloc() for Tach alignment: %ld bytes\n", t_alloc); +// printk("pci_alloc_consistent() for Tach alignment: %ld bytes\n", t_alloc); +// (would like to) allow thread block to free pages alloc_address = // total bytes (NumberOfBytes) - kmalloc( t_alloc, GFP_KERNEL); // allow thread block to free pages - + pci_alloc_consistent(pdev, t_alloc, &handle); // now mask off least sig. bits of address if( alloc_address ) // (only if non-NULL) { // find place to store ptr, so we // can free it later... + + mask = (LONG)(ab - 1); // mask all low-order bits + mask = ~mask; // invert bits for( i=0; i jiffies ;) ; } + #define CPQFCTS_DRIVER_VER(maj,min,submin) ((maj<<16)|(min<<8)|(submin)) +// don't forget to also change MODULE_DESCRIPTION in cpqfcTSinit.c #define VER_MAJOR 2 -#define VER_MINOR 0 -#define VER_SUBMINOR 5 +#define VER_MINOR 1 +#define VER_SUBMINOR 1 // Macros for kernel (esp. SMP) tracing using a PCI analyzer // (e.g. x86). @@ -413,11 +415,23 @@ // struct is sized for largest expected cmnd (LOGIN) } TachLiteERQ; +// for now, just 32 bit DMA, eventually 40something, with code changes +#define CPQFCTS_DMA_MASK ((unsigned long) (0x00000000FFFFFFFF)) + +#define TL_MAX_SG_ELEM_LEN 0x7ffff // Max buffer length a single S/G entry + // may represent (a hardware limitation). The + // only reason to ever change this is if you + // want to exercise very-hard-to-reach code in + // cpqfcTSworker.c:build_SEST_sglist(). + +#define TL_DANGER_SGPAGES 7 // arbitrary high water mark for # of S/G pages + // we must exceed to elicit a warning indicative + // of EXTREMELY large data transfers or + // EXTREME memory fragmentation. + // (means we just used up 2048 S/G elements, + // Never seen this is real life, only in + // testing with tricked up driver.) -#define TL_MAX_SGPAGES 4 // arbitrary limit to # of TL Ext. S/G pages - // stores array of allocated page blocks used - // in extended S/G lists. Affects amount of static - // memory consumed by driver. #define TL_EXT_SG_PAGE_COUNT 256 // Number of Extended Scatter/Gather a/l PAIRS // Tachyon register (IOBaseU 0x68) // power-of-2 value ONLY! 4 min, 256 max @@ -435,6 +449,8 @@ ULONG RSP_Len; ULONG RSP_Addr; ULONG Buff_Off; +#define USES_EXTENDED_SGLIST(this_sest, x_ID) \ + (!((this_sest)->u[ x_ID ].IWE.Buff_Off & 0x80000000)) ULONG Link; ULONG RX_ID; ULONG Data_Len; @@ -514,12 +530,14 @@ ULONG GAddr3; } TachLiteTRE; -typedef struct +typedef struct ext_sg_page_ptr_t *PSGPAGES; +typedef struct ext_sg_page_ptr_t { - void *PoolPage[TL_MAX_SGPAGES]; -} SGPAGES, *PSGPAGES; // linked list of S/G pairs, by Exchange - - + unsigned char page[TL_EXT_SG_PAGE_BYTELEN * 2]; // 2x for alignment + dma_addr_t busaddr; // need the bus addresses and + unsigned int maplen; // lengths for later pci unmapping. + PSGPAGES next; +} SGPAGES; // linked list of S/G pairs, by Exchange typedef struct // SCSI Exchange State Table { @@ -533,7 +551,7 @@ TachFCHDR DataHDR[TACH_SEST_LEN]; // for SEST FCP_DATA frame hdr (no pl) TachFCHDR_RSP RspHDR[TACH_SEST_LEN]; // space for SEST FCP_RSP frame - SGPAGES sgPages[TACH_SEST_LEN]; // array of Pool-allocations + PSGPAGES sgPages[TACH_SEST_LEN]; // head of linked list of Pool-allocations ULONG length; // Length register ULONG base; // copy of base ptr for debug } TachSEST; @@ -642,6 +660,8 @@ { void *BaseAllocated; // address as allocated from O/S; unsigned long AlignedAddress; // aligned address (used by Tachyon DMA) + dma_addr_t dma_handle; + size_t size; } ALIGNED_MEM; @@ -785,6 +805,8 @@ TachLiteSFQ *SFQ; // Single Frame Queue TachSEST *SEST; // SCSI Exchange State Table + dma_addr_t exch_dma_handle; + // these function pointers are for "generic" functions, which are // replaced with Host Bus Adapter types at // runtime. @@ -834,8 +856,9 @@ // define misc functions int cpqfcTSGetLPSM( PTACHYON fcChip, char cErrorString[]); int cpqfcTSDecodeGBICtype( PTACHYON fcChip, char cErrorString[]); -void* fcMemManager( ALIGNED_MEM *dyn_mem_pair, ULONG n_alloc, ULONG ab, - ULONG ulAlignedAddress); +void* fcMemManager( struct pci_dev *pdev, + ALIGNED_MEM *dyn_mem_pair, ULONG n_alloc, ULONG ab, + ULONG ulAlignedAddress, dma_addr_t *dma_handle); void BigEndianSwap( UCHAR *source, UCHAR *dest, USHORT cnt); @@ -903,6 +926,7 @@ ALIGNED_MEM dynamic_mem[DYNAMIC_ALLOCATIONS]; struct pci_dev *PciDev; + dma_addr_t fcLQ_dma_handle; Scsi_Cmnd *LinkDnCmnd[CPQFCTS_REQ_QUEUE_LEN]; // collects Cmnds during LDn // (for Acceptable targets) @@ -964,6 +988,7 @@ LONG ExchangeID ); void cpqfcTSCompleteExchange( + struct pci_dev *pcidev, PTACHYON fcChip, ULONG exchange_ID); @@ -993,9 +1018,10 @@ void fcSestReset( CPQFCHBA *); - - - +void cpqfc_pci_unmap(struct pci_dev *pcidev, + Scsi_Cmnd *cmd, + PTACHYON fcChip, + ULONG x_ID); extern const UCHAR valid_al_pa[]; extern const int number_of_al_pa; @@ -1376,6 +1402,12 @@ ULONG s_id; } ADISC_PAYLOAD; + +struct ext_sg_entry_t { + __u32 len:18; /* buffer length, bits 0-17 */ + __u32 uba:13; /* upper bus address bits 18-31 */ + __u32 lba; /* lower bus address bits 0-31 */ +}; // J. McCarty's LINK.H // diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/cpqfcTSworker.c linux/drivers/scsi/cpqfcTSworker.c --- v2.4.13/linux/drivers/scsi/cpqfcTSworker.c Mon Aug 27 12:41:44 2001 +++ linux/drivers/scsi/cpqfcTSworker.c Thu Oct 25 13:53:50 2001 @@ -703,8 +703,7 @@ { // printk(" *Terminating x_ID %Xh on %Xh* ", // x_ID, Exchanges->fcExchange[x_ID].status); - cpqfcTSCompleteExchange( fcChip, x_ID); - + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, x_ID); } } // end of ABTS case @@ -2061,7 +2060,7 @@ Done: // Regardless of whether the Reply is valid or not, the // the exchange is done - complete - cpqfcTSCompleteExchange( fcChip, (fchs->ox_rx_id >>16)); // complete + cpqfcTSCompleteExchange(cpqfcHBAdata->PciDev, fcChip, (fchs->ox_rx_id >>16)); Quit: return; @@ -2146,7 +2145,7 @@ // Regardless of whether the Reply is valid or not, the // the exchange is done - complete - cpqfcTSCompleteExchange( fcChip, (fchs->ox_rx_id >>16)); // complete + cpqfcTSCompleteExchange(cpqfcHBAdata->PciDev, fcChip, (fchs->ox_rx_id >>16)); Quit: return; @@ -2328,7 +2327,7 @@ !(fcChip->SEST->u[ ExchangeID].IWE.Hdr_Len & 0x80000000)) { - cpqfcTSCompleteExchange( fcChip, ExchangeID); + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, ExchangeID); } else { @@ -2370,7 +2369,7 @@ ((Exchanges->fcExchange[ ExchangeID].fchs.d_id & 0xFFFFFF) == (fchs->s_id & 0xFFFFFF)) ) { - cpqfcTSCompleteExchange( fcChip, ExchangeID ); + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, ExchangeID ); } } } @@ -2409,7 +2408,7 @@ // already completed the exchange... // printk("complete x_ID %Xh on ABTS RJT\n", ExchangeID); - cpqfcTSCompleteExchange( fcChip, ExchangeID ); + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, ExchangeID ); } } } // end of ABTS check @@ -2672,7 +2671,7 @@ printk("completing x_ID %X on status %Xh\n", ExchangeID, Exchanges->fcExchange[ExchangeID].status); #endif - cpqfcTSCompleteExchange( fcChip, ExchangeID); + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, ExchangeID); } } else // Xchange setup failed... @@ -2915,6 +2914,22 @@ Done: } +static void +call_scsi_done(Scsi_Cmnd *Cmnd) +{ + // We have to reinitialize sent_command here, so the scsi-mid + // layer won't re-use the scsi command leaving it set incorrectly. + // (incorrectly for our purposes...it's normally unused.) + + if (Cmnd->SCp.sent_command != 0) { // was it a passthru? + Cmnd->SCp.sent_command = 0; + Cmnd->result &= 0xff00ffff; + Cmnd->result |= (DID_PASSTHROUGH << 16); // prevents retry + } + if (Cmnd->scsi_done != NULL) + (*Cmnd->scsi_done)(Cmnd); +} + // After successfully getting a "Process Login" (PRLI) from an // FC port, we want to Discover the LUNs so that we know the // addressing type (e.g., FCP-SCSI Volume Set Address, Peripheral @@ -3035,8 +3050,7 @@ Cmnd->result = (DID_SOFT_ERROR << 16); // ask for retry // printk(" BoardLockCmnd[%d] %p Complete, chnl/target/lun %d/%d/%d\n", // i,Cmnd, Cmnd->channel, Cmnd->target, Cmnd->lun); - if( Cmnd->scsi_done != NULL) - (*Cmnd->scsi_done)(Cmnd); + call_scsi_done(Cmnd); } } } @@ -3083,7 +3097,9 @@ // Complete the "bad target" commands (normally only used during // initialization, since we aren't supposed to call "scsi_done" - // inside the queuecommand() function). + // inside the queuecommand() function). (this is overly contorted, + // scsi_done can be safely called from queuecommand for + // this bad target case. May want to simplify this later) for( i=0; i< CPQFCTS_MAX_TARGET_ID; i++) { @@ -3092,8 +3108,7 @@ Scsi_Cmnd *Cmnd = cpqfcHBAdata->BadTargetCmnd[i]; cpqfcHBAdata->BadTargetCmnd[i] = NULL; Cmnd->result = (DID_BAD_TARGET << 16); - if( Cmnd->scsi_done != NULL) - (*Cmnd->scsi_done)(Cmnd); + call_scsi_done(Cmnd); } else break; @@ -3153,7 +3168,7 @@ if( i >= TACH_SEST_LEN ) // Link Service Exchange { - cpqfcTSCompleteExchange( fcChip, i); // Don't "abort" LinkService + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, i); // Don't "abort" LinkService } else // SEST Exchange TO -- may post ABTS to Worker Thread Que @@ -3511,11 +3526,14 @@ (Cmnd->channel == pLoggedInPort->ScsiNexus.channel) ) { Cmnd->result = (DID_SOFT_ERROR <<16); // force retry - if( Cmnd->scsi_done != NULL) - (*Cmnd->scsi_done)(Cmnd); - else + if( Cmnd->scsi_done == NULL) + { printk("LinkDnCmnd scsi_done ptr null, port_id %Xh\n", pLoggedInPort->port_id); + Cmnd->SCp.sent_command = 0; + } + else + call_scsi_done(Cmnd); *SCptr = NULL; // free this slot for next use } } @@ -4035,10 +4053,11 @@ static LONG FindFreeExchange( PTACHYON fcChip, ULONG type ); static ULONG build_SEST_sgList( + struct pci_dev *pcidev, ULONG *SESTalPairStart, Scsi_Cmnd *Cmnd, ULONG *sgPairs, - PSGPAGES sgPages // link list of TL Ext. S/G pages from O/S Pool + PSGPAGES *sgPages_head // link list of TL Ext. S/G pages from O/S Pool ); static int build_FCP_payload( Scsi_Cmnd *Cmnd, @@ -4202,7 +4221,6 @@ // assign tmp ptr (shorthand) CMDfchs = &Exchanges->fcExchange[ *fcExchangeIndex].fchs; - if( Cmnd != NULL ) // (necessary for ABTS cases) { Exchanges->fcExchange[ *fcExchangeIndex].Cmnd = Cmnd; // Linux Scsi @@ -4575,21 +4593,26 @@ pIWE->Hdr_Len |= fl; // add xmit FC frame len for data phase - pIWE->Hdr_Addr = virt_to_bus( dataHDR ); + pIWE->Hdr_Addr = fcChip->SEST->base + + ((unsigned long)&fcChip->SEST->DataHDR[*fcExchangeIndex] - + (unsigned long)fcChip->SEST); + pIWE->RSP_Len = sizeof(TachFCHDR_RSP) ; // hdr+data (recv'd RSP frame) pIWE->RSP_Len |= (InFCHS->s_id << 8); // MS 24 bits Remote_ID memset( &fcChip->SEST->RspHDR[ *fcExchangeIndex].pl, 0, sizeof( FCP_STATUS_RESPONSE) ); // clear out previous status - - pIWE->RSP_Addr = virt_to_bus( - &fcChip->SEST->RspHDR[ *fcExchangeIndex ]); + + pIWE->RSP_Addr = fcChip->SEST->base + + ((unsigned long)&fcChip->SEST->RspHDR[*fcExchangeIndex] - + (unsigned long)fcChip->SEST); // Do we need local or extended gather list? // depends on size - we can handle 3 len/addr pairs // locally. fcp_dl = build_SEST_sgList( + cpqfcHBAdata->PciDev, &pIWE->GLen1, Cmnd, // S/G list &sgPairs, // return # of pairs in S/G list (from "Data" descriptor) @@ -4690,16 +4713,16 @@ pIRE->RSP_Len = sizeof(TachFCHDR_RSP) ; // hdr+data (recv'd RSP frame) pIRE->RSP_Len |= (InFCHS->s_id << 8); // MS 24 bits Remote_ID - - pIRE->RSP_Addr = virt_to_bus( - &fcChip->SEST->RspHDR[ *fcExchangeIndex ]); - + pIRE->RSP_Addr = fcChip->SEST->base + + ((unsigned long)&fcChip->SEST->RspHDR[*fcExchangeIndex] - + (unsigned long)fcChip->SEST); // Do we need local or extended gather list? // depends on size - we can handle 3 len/addr pairs // locally. fcp_dl = build_SEST_sgList( + cpqfcHBAdata->PciDev, &pIRE->SLen1, Cmnd, // SCSI command Data desc. with S/G list &sgPairs, // return # of pairs in S/G list (from "Data" descriptor) @@ -4806,6 +4829,7 @@ // locally. fcp_dl = build_SEST_sgList( + cpqfcHBAdata->PciDev, &pTWE->SLen1, Cmnd, // S/G list &sgPairs, // return # of pairs in S/G list (from "Data" descriptor) @@ -4900,17 +4924,24 @@ // VALid entry:Dir outbound:enable CM:enal INT: pTRE->Hdr_Len = 0x86010020L; // data frame Len always 32 bytes - pTRE->Hdr_Addr = virt_to_bus( dataHDR ); + pTRE->Hdr_Addr = // bus address of dataHDR; + fcChip->SEST->base + + ((unsigned long)&fcChip->SEST->DataHDR[ *fcExchangeIndex ] - + (unsigned long)fcChip->SEST); + pTRE->RSP_Len = 64L; // hdr+data (TL assisted RSP frame) pTRE->RSP_Len |= (InFCHS->s_id << 8); // MS 24 bits Remote_ID - pTRE->RSP_Addr = virt_to_bus( rspHDR ); - + pTRE->RSP_Addr = // bus address of rspHDR + fcChip->SEST->base + + ((unsigned long)&fcChip->SEST->RspHDR[ *fcExchangeIndex ] - + (unsigned long)fcChip->SEST); // Do we need local or extended gather list? // depends on size - we can handle 3 len/addr pairs // locally. fcp_dl = build_SEST_sgList( + cpqfcHBAdata->PciDev, &pTRE->GLen1, Cmnd, // S/G list &sgPairs, // return # of pairs in S/G list (from "Data" descriptor) @@ -5001,8 +5032,10 @@ // len & flags according to command type above pIRB->Req_A_SFS_Len = SfsLen; // includes IRB flags & len - pIRB->Req_A_SFS_Addr = virt_to_bus(CMDfchs); // TL needs physical addr - // of frame to send + pIRB->Req_A_SFS_Addr = // TL needs physical addr of frame to send + fcChip->exch_dma_handle + (unsigned long)CMDfchs - + (unsigned long)Exchanges; + pIRB->Req_A_SFS_D_ID = CMDfchs->d_id << 8; // Dest_ID must be consistent! // Exchange is complete except for "fix-up" fields to be set @@ -5017,7 +5050,7 @@ printk( "FC Error: SEST build Pool Allocation failed\n"); #endif // return resources... - cpqfcTSCompleteExchange( fcChip, *fcExchangeIndex); // SEST build failed + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, *fcExchangeIndex); // SEST build failed } } else // no Exchanges available @@ -5059,7 +5092,61 @@ } +static dma_addr_t +cpqfc_pci_map_sg_page( + struct pci_dev *pcidev, + ULONG *hw_paddr, // where to put phys addr for HW use + void *sgp_vaddr, // the virtual address of the sg page + dma_addr_t *umap_paddr, // where to put phys addr for unmap + unsigned int *maplen, // where to store sg entry length + int PairCount) // number of sg pairs used in the page. +{ + unsigned long aligned_addr = (unsigned long) sgp_vaddr; + + *maplen = PairCount * 8; + aligned_addr += TL_EXT_SG_PAGE_BYTELEN; + aligned_addr &= ~(TL_EXT_SG_PAGE_BYTELEN -1); + + *umap_paddr = pci_map_single(pcidev, (void *) aligned_addr, + *maplen, PCI_DMA_TODEVICE); + *hw_paddr = (ULONG) *umap_paddr; + +# if BITS_PER_LONG > 32 + if( *umap_paddr >>32 ) { + printk("cqpfcTS:Tach SG DMA addr %p>32 bits\n", + (void*)umap_paddr); + return 0; + } +# endif + return *umap_paddr; +} + +static void +cpqfc_undo_SEST_mappings(struct pci_dev *pcidev, + unsigned long contigaddr, int len, int dir, + struct scatterlist *sgl, int use_sg, + PSGPAGES *sgPages_head, + int allocated_pages) +{ + PSGPAGES i, next; + + if (contigaddr != (unsigned long) NULL) + pci_unmap_single(pcidev, contigaddr, len, dir); + + if (sgl != NULL) + pci_unmap_sg(pcidev, sgl, use_sg, dir); + for (i=*sgPages_head; i != NULL ;i = next) + { + pci_unmap_single(pcidev, i->busaddr, i->maplen, + scsi_to_pci_dma_dir(PCI_DMA_TODEVICE)); + i->busaddr = (dma_addr_t) NULL; + i->maplen = 0L; + next = i->next; + kfree(i); + } + *sgPages_head = NULL; +} // This routine builds scatter/gather lists into SEST entries // INPUTS: @@ -5077,263 +5164,380 @@ //#define DBG_SEST_SGLIST 1 // for printing out S/G pairs with Ext. pages +static int ap_hi_water = TL_DANGER_SGPAGES; + static ULONG build_SEST_sgList( + struct pci_dev *pcidev, ULONG *SESTalPairStart, // the 3 len/address buffers in SEST Scsi_Cmnd *Cmnd, ULONG *sgPairs, - PSGPAGES sgPages) // link list of TL Ext. S/G pages from O/S Pool + PSGPAGES *sgPages_head) // link list of TL Ext. S/G pages from O/S Pool { ULONG i, AllocatedPages=0; // Tach Ext. S/G page allocations ULONG* alPair = SESTalPairStart; - ULONG alignedPageAddress; // TL hardware alignment requirement + ULONG* ext_sg_page_phys_addr_place = NULL; int PairCount; - unsigned long ulBuff; + unsigned long ulBuff, contigaddr; ULONG total_data_len=0; // (in bytes) ULONG bytes_to_go = Cmnd->request_bufflen; // total xfer (S/G sum) ULONG thisMappingLen; - struct scatterlist *sgl; // S/G list (Linux format) - + struct scatterlist *sgl = NULL; // S/G list (Linux format) + int sg_count, totalsgs; + dma_addr_t busaddr; + unsigned long thislen, offset; + PSGPAGES *sgpage = sgPages_head; + PSGPAGES prev_page = NULL; +# define WE_HAVE_SG_LIST (sgl != (unsigned long) NULL) + contigaddr = (unsigned long) NULL; if( !Cmnd->use_sg ) // no S/G list? { - *sgPairs = 1; // use "local" S/G pair in SEST entry - // (for now, ignore address bits above #31) - *alPair++ = bytes_to_go & 0x7ffff; // bits 18-0, length - ulBuff = virt_to_bus( Cmnd->request_buffer); -#if BITS_PER_LONG > 32 - if( ulBuff >>32 ) - { - printk("FATAL! Tachyon DMA address %p exceeds 32 bits\n", (void*)ulBuff ); - return 0; - } -#endif - *alPair = (ULONG)ulBuff; - return bytes_to_go; - } + if (bytes_to_go <= TL_MAX_SG_ELEM_LEN) + { + *sgPairs = 1; // use "local" S/G pair in SEST entry + // (for now, ignore address bits above #31) + *alPair++ = bytes_to_go; // bits 18-0, length - // [TBD - update for Linux to support > 32 bits addressing] - // since the format for local & extended S/G lists is different, - // check if S/G pairs exceeds 3. - *sgPairs = Cmnd->use_sg; - sgl = (struct scatterlist*)Cmnd->request_buffer; - - if( *sgPairs <= 3 ) // need "local" SEST list + if (bytes_to_go != 0) { + contigaddr = ulBuff = pci_map_single(pcidev, + Cmnd->request_buffer, + Cmnd->request_bufflen, + scsi_to_pci_dma_dir(Cmnd->sc_data_direction)); + // printk("ms %p ", ulBuff); + } + else { + // No data transfer, (e.g.: Test Unit Ready) + // printk("btg=0 "); + *sgPairs = 0; + memset(alPair, 0, sizeof(*alPair)); + return 0; + } + +# if BITS_PER_LONG > 32 + if( ulBuff >>32 ) { + printk("FATAL! Tachyon DMA address %p " + "exceeds 32 bits\n", (void*)ulBuff ); + return 0; + } +# endif + *alPair = (ULONG)ulBuff; + return bytes_to_go; + } + else // We have a single large (too big) contiguous buffer. + { // We will have to break it up. We'll use the scatter + // gather code way below, but use contigaddr instead + // of sg_dma_addr(). (this is a very rare case). + + unsigned long btg; + contigaddr = pci_map_single(pcidev, Cmnd->request_buffer, + Cmnd->request_bufflen, + scsi_to_pci_dma_dir(Cmnd->sc_data_direction)); + + // printk("contigaddr = %p, len = %d\n", + // (void *) contigaddr, bytes_to_go); + totalsgs = 0; + for (btg = bytes_to_go; btg > 0; ) { + btg -= ( btg > TL_MAX_SG_ELEM_LEN ? + TL_MAX_SG_ELEM_LEN : btg ); + totalsgs++; + } + sgl = NULL; + *sgPairs = totalsgs; + } + } + else // we do have a scatter gather list + { + // [TBD - update for Linux to support > 32 bits addressing] + // since the format for local & extended S/G lists is different, + // check if S/G pairs exceeds 3. + // *sgPairs = Cmnd->use_sg; Nope, that's wrong. + + sgl = (struct scatterlist*)Cmnd->request_buffer; + sg_count = pci_map_sg(pcidev, sgl, Cmnd->use_sg, + scsi_to_pci_dma_dir(Cmnd->sc_data_direction)); + // printk("sgl = %p, sg_count = %d\n", (void *) sgl, sg_count); + if( sg_count <= 3 ) { + + // we need to be careful here that no individual mapping + // is too large, and if any is, that breaking it up + // doesn't push us over 3 sgs, or, if it does, that we + // handle that case. Tachyon can take 0x7FFFF bits for length, + // but sg structure uses "unsigned int", on the face of it, + // up to 0xFFFFFFFF or even more. + + int i; + unsigned long thislen; + + totalsgs = 0; + for (i=0;i= TL_MAX_SG_ELEM_LEN) { + totalsgs++; + thislen -= TL_MAX_SG_ELEM_LEN; + } + if (thislen > 0) totalsgs++; + } + *sgPairs = totalsgs; + } else totalsgs = 999; // as a first estimate, definitely >3, + + // if (totalsgs != sg_count) + // printk("totalsgs = %d, sgcount=%d\n",totalsgs,sg_count); + } + + // printk("totalsgs = %d, sgcount=%d\n", totalsgs, sg_count); + if( totalsgs <= 3 ) // can (must) use "local" SEST list { while( bytes_to_go) { - thisMappingLen = sgl->length; // we want them ALL on every pass - bytes_to_go = bytes_to_go - thisMappingLen; + offset = 0L; - // we have L/A pair; L = thisMappingLen, A = physicalAddress - // load into SEST... - total_data_len += thisMappingLen & 0x7ffff; // mask in valid bits - // per SEST format - *alPair = thisMappingLen & 0x7ffff; // bits 18-0, length -// physicalAddress.HighPart <= 19; // shift to bit 19 - - // pick up bits 44-32 of upper 64-bit address - // and load into 31-19 LBAU (upper addr) of SEST entry -// *alPair++ |=(ULONG)((physicalAddress.HighPart & 0xFFF8)); - // on Tachlite TS's local S/G, we can handle 13 extra address bits - // i.e., bits 31-19 are actually bits 44-32 of physicalAddress - - alPair++; - - ulBuff = virt_to_bus( sgl->address); -#if BITS_PER_LONG > 32 - if( ulBuff >>32 ) - { - printk("cqpfcTS: Tach DMA address %p > 32 bits\n", (void*)ulBuff ); - return 0; - } -#endif - *alPair++ = (ULONG)ulBuff; // lower 32 bits (31-0) + if ( WE_HAVE_SG_LIST ) + thisMappingLen = sg_dma_len(sgl); + else // or contiguous buffer? + thisMappingLen = bytes_to_go; - ++sgl; // next S/G pair -#ifdef DBG_SEST_SGLIST - printk(" thisLen %d ", thisMappingLen); - printk(" remain %d\n", bytes_to_go); -#endif + while (thisMappingLen > 0) + { + thislen = thisMappingLen > TL_MAX_SG_ELEM_LEN ? + TL_MAX_SG_ELEM_LEN : thisMappingLen; + bytes_to_go = bytes_to_go - thislen; - } - } + // we have L/A pair; L = thislen, A = physicalAddress + // load into SEST... + + total_data_len += thislen; + *alPair = thislen; // bits 18-0, length + + alPair++; + if ( WE_HAVE_SG_LIST ) + ulBuff = sg_dma_address(sgl) + offset; + else + ulBuff = contigaddr + offset; + offset += thislen; +# if BITS_PER_LONG > 32 + if( ulBuff >>32 ) { + printk("cqpfcTS: 2Tach DMA address %p > 32 bits\n", + (void*)ulBuff ); + printk("%s = %p, offset = %ld\n", + WE_HAVE_SG_LIST ? "ulBuff" : "contigaddr", + WE_HAVE_SG_LIST ? (void *) ulBuff : (void *) contigaddr, + offset); + return 0; + } +# endif + *alPair++ = (ULONG)ulBuff; // lower 32 bits (31-0) + thisMappingLen -= thislen; + } + + if ( WE_HAVE_SG_LIST ) ++sgl; // next S/G pair + else if (bytes_to_go != 0) printk("BTG not zero!\n"); + +# ifdef DBG_SEST_SGLIST + printk("L=%d ", thisMappingLen); + printk("btg=%d ", bytes_to_go); +# endif + } + // printk("i:%d\n", *sgPairs); + } else // more than 3 pairs requires Extended S/G page (Pool Allocation) { // clear out SEST DWORDs (local S/G addr) C-F (A-B set in following logic) - - - for( i=2; i<6; i++) alPair[i] = 0; PairCount = TL_EXT_SG_PAGE_COUNT; // forces initial page allocation - + totalsgs = 0; while( bytes_to_go ) { - - - // Per SEST format, we can support 524287 byte lenghts per + // Per SEST format, we can support 524287 byte lengths per // S/G pair. Typical user buffers are 4k, and very rarely // exceed 12k due to fragmentation of physical memory pages. // However, on certain O/S system (not "user") buffers (on platforms - // with huge memories like 256Meg), it's possible to exceed this - // length in a single S/G address/len mapping. - // - // Check for Tachyon length boundary - // - if( sgl->length > 0x7ffff ) - { - // never ask for more than we can handle - thisMappingLen = sgl->length & 0x7ffff; - } + // with huge memories), it's possible to exceed this + // length in a single S/G address/len mapping, so we have to handle + // that. + + offset = 0L; + if ( WE_HAVE_SG_LIST ) + thisMappingLen = sg_dma_len(sgl); else - thisMappingLen = sgl->length; - + thisMappingLen = bytes_to_go; - - // should we load into "this" extended S/G page, or allocate - // new page? - - if( PairCount >= TL_EXT_SG_PAGE_COUNT ) + while (thisMappingLen > 0) { - // have we exceeded the max possible extended pages? - if( AllocatedPages >= TL_MAX_SGPAGES) - { - printk("Error: aborted loop on %d Ext. S/G page allocations\n", - AllocatedPages); - - total_data_len = 0; // failure!! Ext. S/G is All-or-none affair - break; // failed - } - - // Allocate the TL Extended S/G list page from O/S pool. We have - // to allocated twice what we want to ensure required TL alignment - // (Tachlite TL/TS User Man. Rev 6.0, p 168) - // We store the original allocated PVOID so we can free later - - sgPages->PoolPage[ AllocatedPages] = - kmalloc( TL_EXT_SG_PAGE_BYTELEN*2,GFP_ATOMIC); // double for alignment - - - if( !sgPages->PoolPage[ AllocatedPages] ) // Allocation failed? - { - - printk("Error: Allocation failed @ %d S/G page allocations\n", - AllocatedPages); - - total_data_len = 0; // failure!! Ext. S/G is All-or-none affair - break; // give up - } - // clear out memory we just allocated - memset( sgPages->PoolPage[AllocatedPages], 0, - TL_EXT_SG_PAGE_BYTELEN*2); - + thislen = thisMappingLen > TL_MAX_SG_ELEM_LEN ? + TL_MAX_SG_ELEM_LEN : thisMappingLen; + // printk("%d/%d/%d\n", thislen, thisMappingLen, bytes_to_go); - // align the memory - TL requires sizeof() Ext. S/G page alignment. - // We doubled the actual required size so we could mask off LSBs - // to get desired offset - - ulBuff = virt_to_bus( sgPages->PoolPage[AllocatedPages]); - -#if BITS_PER_LONG > 32 - if( ulBuff >>32 ) - { - printk("cqpfcTS: Tach ext. S/G DMA address %p > 32 bits\n", - (void*)ulBuff ); - return 0; - } -#endif - - ulBuff += TL_EXT_SG_PAGE_BYTELEN; // ensures we pass align. boundary - ulBuff &= (0xFFFFFFFF - (TL_EXT_SG_PAGE_BYTELEN -1) );// mask off LSBs - - alignedPageAddress = (ULONG)ulBuff; -#ifdef DBG_SEST_SGLIST - printk("new PoolPage: %p, alignedPageAddress %lXh\n", - sgPages->PoolPage[AllocatedPages], ulBuff); -#endif - + // should we load into "this" extended S/G page, or allocate + // new page? - // set pointer, in SEST if first Ext. S/G page, or in last pair - // of linked Ext. S/G pages... - // (Only 32-bit PVOIDs, so just load lower 32 bits) - // NOTE: the Len field must be '0' if this is the first Ext. S/G - // pointer in SEST, and not 0 otherwise. - if( alPair == SESTalPairStart) // initial Ext. S/G list? - *alPair = 0; - else // not the SEST entry... Len must be non-0, so - // arbitrarily set it to number bytes remaining - *alPair = ( bytes_to_go & 0x7ffff); - -#ifdef DBG_SEST_SGLIST - printk("PairCount %d @%p even %Xh, ", - PairCount, alPair, *alPair); -#endif - alPair++; // next DWORD + if( PairCount >= TL_EXT_SG_PAGE_COUNT ) + { + // Now, we have to map the previous page, (triggering buffer bounce) + // The first time thru the loop, there won't be a previous page. + if (prev_page != NULL) // is there a prev page? + { + // this code is normally kind of hard to trigger, + // you have to use up more than 256 scatter gather + // elements to get here. Cranking down TL_MAX_SG_ELEM_LEN + // to an absurdly low value (128 bytes or so) to artificially + // break i/o's into a zillion pieces is how I tested it. + busaddr = cpqfc_pci_map_sg_page(pcidev, + ext_sg_page_phys_addr_place, + prev_page->page, + &prev_page->busaddr, + &prev_page->maplen, + PairCount); + } + // Allocate the TL Extended S/G list page. We have + // to allocate twice what we want to ensure required TL alignment + // (Tachlite TL/TS User Man. Rev 6.0, p 168) + // We store the original allocated PVOID so we can free later + *sgpage = kmalloc( sizeof(SGPAGES), GFP_ATOMIC); + if ( ! *sgpage ) + { + printk("cpqfc: Allocation failed @ %d S/G page allocations\n", + AllocatedPages); + total_data_len = 0; // failure!! Ext. S/G is All-or-none affair + + // unmap the previous mappings, if any. + + cpqfc_undo_SEST_mappings(pcidev, contigaddr, + Cmnd->request_bufflen, + scsi_to_pci_dma_dir(Cmnd->sc_data_direction), + sgl, Cmnd->use_sg, sgPages_head, AllocatedPages+1); + + // FIXME: testing shows that if we get here, + // it's bad news. (this has been this way for a long + // time though, AFAIK. Not that that excuses it.) - *alPair = alignedPageAddress; // TL needs 32-bit physical -#ifdef DBG_SEST_SGLIST - printk("odd %Xh\n", *alPair); -#endif - - // now reset the pointer to the ACTUAL (Extended) S/G page - // which will accept the Len/ PhysicalAddress pairs - alPair = bus_to_virt(alignedPageAddress); - - AllocatedPages++; - PairCount = 1; // starting new Ext. S/G page - } // end of new TL Ext. S/G page allocation + return 0; // give up (and probably hang the system) + } + // clear out memory we just allocated + memset( (*sgpage)->page,0,TL_EXT_SG_PAGE_BYTELEN*2); + (*sgpage)->next = NULL; + (*sgpage)->busaddr = (dma_addr_t) NULL; + (*sgpage)->maplen = 0L; + + // align the memory - TL requires sizeof() Ext. S/G page alignment. + // We doubled the actual required size so we could mask off LSBs + // to get desired offset + + ulBuff = (unsigned long) (*sgpage)->page; + ulBuff += TL_EXT_SG_PAGE_BYTELEN; + ulBuff &= ~(TL_EXT_SG_PAGE_BYTELEN -1); + + // set pointer, in SEST if first Ext. S/G page, or in last pair + // of linked Ext. S/G pages... (Only 32-bit PVOIDs, so just + // load lower 32 bits) + // NOTE: the Len field must be '0' if this is the first Ext. S/G + // pointer in SEST, and not 0 otherwise (we know thislen != 0). + + *alPair = (alPair != SESTalPairStart) ? thislen : 0; + +# ifdef DBG_SEST_SGLIST + printk("PairCount %d @%p even %Xh, ", + PairCount, alPair, *alPair); +# endif + + // Save the place where we need to store the physical + // address of this scatter gather page which we get when we map it + // (and mapping we can do only after we fill it in.) + alPair++; // next DWORD, will contain phys addr of the ext page + ext_sg_page_phys_addr_place = alPair; + + // Now, set alPair = the virtual addr of the (Extended) S/G page + // which will accept the Len/ PhysicalAddress pairs + alPair = (ULONG *) ulBuff; - - *alPair = thisMappingLen; // bits 18-0, length (range check above) - - -// physicalAddress.HighPart <= 19; // shift to bit 19 - - // pick up bits 44-32 of upper 64-bit address - // and load into 31-19 LBAU (upper addr) of SEST entry -// *alPair |=(ULONG)((physicalAddress.HighPart & 0xFFF8)); + AllocatedPages++; + if (AllocatedPages >= ap_hi_water) + { + // This message should rarely, if ever, come out. + // Previously (cpqfc version <= 2.0.5) the driver would + // just puke if more than 4 SG pages were used, and nobody + // ever complained about that. This only comes out if + // more than 8 pages are used. + + printk(KERN_WARNING + "cpqfc: Possible danger. %d scatter gather pages used.\n" + "cpqfc: detected seemingly extreme memory " + "fragmentation or huge data transfers.\n", + AllocatedPages); + ap_hi_water = AllocatedPages+1; + } + + PairCount = 1; // starting new Ext. S/G page + prev_page = (*sgpage); // remember this page, for next time thru + sgpage = &((*sgpage)->next); + } // end of new TL Ext. S/G page allocation + *alPair = thislen; // bits 18-0, length (range check above) -#ifdef DBG_SEST_SGLIST - printk("PairCount %d @%p, even %Xh, ", - PairCount, alPair, *alPair); -#endif +# ifdef DBG_SEST_SGLIST + printk("PairCount %d @%p, even %Xh, ", PairCount, alPair, *alPair); +# endif - alPair++; // next DWORD - // on Tachlite TS's local S/G, we can handle 13 extra address bits - // i.e., bits 31-19 are actually bits 44-32 of physicalAddress + alPair++; // next DWORD, physical address + if ( WE_HAVE_SG_LIST ) + ulBuff = sg_dma_address(sgl) + offset; + else + ulBuff = contigaddr + offset; + offset += thislen; - ulBuff = virt_to_bus( sgl->address); -#if BITS_PER_LONG > 32 - if( ulBuff >>32 ) - { - printk("cqpfcTS: Tach DMA address %p > 32 bits\n", (void*)ulBuff ); - return 0; - } -#endif - *alPair = (ULONG)ulBuff; // lower 32 bits (31-0) +# if BITS_PER_LONG > 32 + if( ulBuff >>32 ) + { + printk("cqpfcTS: 1Tach DMA address %p > 32 bits\n", (void*)ulBuff ); + printk("%s = %p, offset = %ld\n", + WE_HAVE_SG_LIST ? "ulBuff" : "contigaddr", + WE_HAVE_SG_LIST ? (void *) ulBuff : (void *) contigaddr, + offset); + return 0; + } +# endif + *alPair = (ULONG) ulBuff; // lower 32 bits (31-0) -#ifdef DBG_SEST_SGLIST - printk("odd %Xh\n", *alPair); -#endif - alPair++; // next DWORD +# ifdef DBG_SEST_SGLIST + printk("odd %Xh\n", *alPair); +# endif + alPair++; // next DWORD, next address/length pair + PairCount++; // next Length/Address pair - PairCount++; // next Length/Address pair - bytes_to_go -= thisMappingLen; - total_data_len += thisMappingLen; - sgl++; // next S/G pair - } + // if (PairCount > pc_hi_water) + // { + // printk("pc hi = %d ", PairCount); + // pc_hi_water = PairCount; + // } + bytes_to_go -= thislen; + total_data_len += thislen; + thisMappingLen -= thislen; + totalsgs++; + } // while (thisMappingLen > 0) + if ( WE_HAVE_SG_LIST ) sgl++; // next S/G pair + } // while (bytes_to_go) + + // printk("Totalsgs=%d\n", totalsgs); + *sgPairs = totalsgs; + + // PCI map (and bounce) the last (and usually only) extended SG page + busaddr = cpqfc_pci_map_sg_page(pcidev, + ext_sg_page_phys_addr_place, + prev_page->page, + &prev_page->busaddr, + &prev_page->maplen, + PairCount); } return total_data_len; } @@ -5584,7 +5788,7 @@ if( CompleteExchange || // flag from Reply frames pExchange->status ) // typically, can get FRAME_TO { - cpqfcTSCompleteExchange( fcChip, ExchangeID); + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, ExchangeID); } } @@ -5594,7 +5798,7 @@ if( CompleteExchange ) // by Type of exchange (e.g. end-of-xchng) { - cpqfcTSCompleteExchange( fcChip, ExchangeID); + cpqfcTSCompleteExchange( cpqfcHBAdata->PciDev, fcChip, ExchangeID); } else @@ -5738,9 +5942,46 @@ return i; } +static void +cpqfc_pci_unmap_extended_sg(struct pci_dev *pcidev, + PTACHYON fcChip, + ULONG x_ID) +{ + // Unmaps the memory regions used to hold the scatter gather lists + PSGPAGES i; + // Were there any such regions needing unmapping? + if (! USES_EXTENDED_SGLIST(fcChip->SEST, x_ID)) + return; // No such regions, we're outta here. + + // for each extended scatter gather region needing unmapping... + for (i=fcChip->SEST->sgPages[x_ID] ; i != NULL ; i = i->next) + pci_unmap_single(pcidev, i->busaddr, i->maplen, + scsi_to_pci_dma_dir(PCI_DMA_TODEVICE)); +} +// Called also from cpqfcTScontrol.o, so can't be static +void +cpqfc_pci_unmap(struct pci_dev *pcidev, + Scsi_Cmnd *cmd, + PTACHYON fcChip, + ULONG x_ID) +{ + // Undo the DMA mappings + if (cmd->use_sg) { // Used scatter gather list for data buffer? + cpqfc_pci_unmap_extended_sg(pcidev, fcChip, x_ID); + pci_unmap_sg(pcidev, cmd->buffer, cmd->use_sg, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); + // printk("umsg %d\n", cmd->use_sg); + } + else if (cmd->request_bufflen) { + // printk("ums %p ", fcChip->SEST->u[ x_ID ].IWE.GAddr1); + pci_unmap_single(pcidev, fcChip->SEST->u[ x_ID ].IWE.GAddr1, + cmd->request_bufflen, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); + } +} // We call this routine to free an Exchange for any reason: // completed successfully, completed with error, aborted, etc. @@ -5751,10 +5992,12 @@ //scompleteexchange void cpqfcTSCompleteExchange( + struct pci_dev *pcidev, PTACHYON fcChip, ULONG x_ID) { FC_EXCHANGES *Exchanges = fcChip->Exchanges; + int already_unmapped = 0; if( x_ID < TACH_SEST_LEN ) // SEST-based (or LinkServ for FCP exchange) { @@ -5883,9 +6126,38 @@ // case for. Need code maintenance! Return "ERROR" else { - printk("DEFAULT result %Xh, x_ID %Xh, Cmnd %p\n", + unsigned int stat = Exchanges->fcExchange[ x_ID ].status; + printk("DEFAULT result %Xh, x_ID %Xh, Cmnd %p", Exchanges->fcExchange[ x_ID ].status, x_ID, Exchanges->fcExchange[ x_ID ].Cmnd); + + if (stat & INVALID_ARGS) printk(" INVALID_ARGS "); + if (stat & LNKDWN_OSLS) printk(" LNKDWN_OSLS "); + if (stat & LNKDWN_LASER) printk(" LNKDWN_LASER "); + if (stat & OUTQUE_FULL) printk(" OUTQUE_FULL "); + if (stat & DRIVERQ_FULL) printk(" DRIVERQ_FULL "); + if (stat & SEST_FULL) printk(" SEST_FULL "); + if (stat & BAD_ALPA) printk(" BAD_ALPA "); + if (stat & OVERFLOW) printk(" OVERFLOW "); + if (stat & COUNT_ERROR) printk(" COUNT_ERROR "); + if (stat & LINKFAIL_RX) printk(" LINKFAIL_RX "); + if (stat & ABORTSEQ_NOTIFY) printk(" ABORTSEQ_NOTIFY "); + if (stat & LINKFAIL_TX) printk(" LINKFAIL_TX "); + if (stat & HOSTPROG_ERR) printk(" HOSTPROG_ERR "); + if (stat & FRAME_TO) printk(" FRAME_TO "); + if (stat & INV_ENTRY) printk(" INV_ENTRY "); + if (stat & SESTPROG_ERR) printk(" SESTPROG_ERR "); + if (stat & OUTBOUND_TIMEOUT) printk(" OUTBOUND_TIMEOUT "); + if (stat & INITIATOR_ABORT) printk(" INITIATOR_ABORT "); + if (stat & MEMPOOL_FAIL) printk(" MEMPOOL_FAIL "); + if (stat & FC2_TIMEOUT) printk(" FC2_TIMEOUT "); + if (stat & TARGET_ABORT) printk(" TARGET_ABORT "); + if (stat & EXCHANGE_QUEUED) printk(" EXCHANGE_QUEUED "); + if (stat & PORTID_CHANGED) printk(" PORTID_CHANGED "); + if (stat & DEVICE_REMOVED) printk(" DEVICE_REMOVED "); + if (stat & SFQ_FRAME) printk(" SFQ_FRAME "); + printk("\n"); + Exchanges->fcExchange[ x_ID ].Cmnd->result = (DID_ERROR <<16); } } @@ -5896,6 +6168,10 @@ cpqfcTSCheckandSnoopFCP( fcChip, x_ID); // (will set ->result) } + cpqfc_pci_unmap(pcidev, Exchanges->fcExchange[x_ID].Cmnd, + fcChip, x_ID); // undo DMA mappings. + already_unmapped = 1; + // OK, we've set the Scsi "->result" field, so proceed with calling // Linux Scsi "done" (if not NULL), and free any kernel memory we // may have allocated for the exchange. @@ -5910,17 +6186,17 @@ if( Exchanges->fcExchange[ x_ID ].Cmnd->result != (DID_ABORT<<16) ) { PCI_TRACE(0xAC) - (*Exchanges->fcExchange[ x_ID ].Cmnd->scsi_done) - (Exchanges->fcExchange[ x_ID ].Cmnd); + call_scsi_done(Exchanges->fcExchange[ x_ID ].Cmnd); } else { - + Exchanges->fcExchange[ x_ID ].Cmnd->SCp.sent_command = 0; // printk(" not calling scsi_done on x_ID %Xh, Cmnd %p\n", // x_ID, Exchanges->fcExchange[ x_ID ].Cmnd); } } else{ + Exchanges->fcExchange[ x_ID ].Cmnd->SCp.sent_command = 0; printk(" x_ID %Xh, type %Xh, Cdb0 %Xh\n", x_ID, Exchanges->fcExchange[ x_ID ].type, Exchanges->fcExchange[ x_ID ].Cmnd->cmnd[0]); @@ -5930,22 +6206,23 @@ // Now, clean up non-Scsi_Cmnd items... CleanUpSestResources: - + + if (!already_unmapped) + cpqfc_pci_unmap(pcidev, Exchanges->fcExchange[x_ID].Cmnd, + fcChip, x_ID); // undo DMA mappings. + // Was an Extended Scatter/Gather page allocated? We know // this by checking DWORD 4, bit 31 ("LOC") of SEST entry if( !(fcChip->SEST->u[ x_ID ].IWE.Buff_Off & 0x80000000)) { - int i = 0; + PSGPAGES p, next; // extended S/G list was used -- Free the allocated ext. S/G pages - - while( fcChip->SEST->sgPages[x_ID].PoolPage[i] && - (i < TL_MAX_SGPAGES) ) - { - kfree( fcChip->SEST->sgPages[x_ID].PoolPage[i]); - fcChip->SEST->sgPages[x_ID].PoolPage[i] = NULL; - i++; + for (p = fcChip->SEST->sgPages[x_ID]; p != NULL; p = next) { + next = p->next; + kfree(p); } + fcChip->SEST->sgPages[x_ID] = NULL; } Exchanges->fcExchange[ x_ID ].Cmnd = NULL; diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/cyberstorm.c linux/drivers/scsi/cyberstorm.c --- v2.4.13/linux/drivers/scsi/cyberstorm.c Fri Mar 2 18:38:38 2001 +++ linux/drivers/scsi/cyberstorm.c Thu Oct 25 13:53:50 2001 @@ -60,7 +60,7 @@ * the hardware register! */ -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* This is where all commands are put * before they are transferred to the ESP chip * via PIO. diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/cyberstormII.c linux/drivers/scsi/cyberstormII.c --- v2.4.13/linux/drivers/scsi/cyberstormII.c Fri Mar 2 18:38:38 2001 +++ linux/drivers/scsi/cyberstormII.c Thu Oct 25 13:53:50 2001 @@ -50,7 +50,7 @@ static int dma_ports_p(struct NCR_ESP *esp); static void dma_setup(struct NCR_ESP *esp, __u32 addr, int count, int write); -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* This is where all commands are put * before they are transferred to the ESP chip * via PIO. diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/dtc.h linux/drivers/scsi/dtc.h --- v2.4.13/linux/drivers/scsi/dtc.h Mon Sep 18 14:12:01 2000 +++ linux/drivers/scsi/dtc.h Thu Oct 25 13:53:51 2001 @@ -80,29 +80,29 @@ #define DTC_address(reg) (base + DTC_5380_OFFSET + reg) #define dbNCR5380_read(reg) \ - (rval=readb(DTC_address(reg)), \ + (rval=isa_readb(DTC_address(reg)), \ (((unsigned char) printk("DTC : read register %d at addr %08x is: %02x\n"\ , (reg), (int)DTC_address(reg), rval)), rval ) ) #define dbNCR5380_write(reg, value) do { \ printk("DTC : write %02x to register %d at address %08x\n", \ (value), (reg), (int)DTC_address(reg)); \ - writeb(value, DTC_address(reg));} while(0) + isa_writeb(value, DTC_address(reg));} while(0) #if !(DTCDEBUG & DTCDEBUG_TRANSFER) -#define NCR5380_read(reg) (readb(DTC_address(reg))) -#define NCR5380_write(reg, value) (writeb(value, DTC_address(reg))) +#define NCR5380_read(reg) (isa_readb(DTC_address(reg))) +#define NCR5380_write(reg, value) (isa_writeb(value, DTC_address(reg))) #else -#define NCR5380_read(reg) (readb(DTC_address(reg))) +#define NCR5380_read(reg) (isa_readb(DTC_address(reg))) #define xNCR5380_read(reg) \ (((unsigned char) printk("DTC : read register %d at address %08x\n"\ - , (reg), DTC_address(reg))), readb(DTC_address(reg))) + , (reg), DTC_address(reg))), isa_readb(DTC_address(reg))) #define NCR5380_write(reg, value) do { \ printk("DTC : write %02x to register %d at address %08x\n", \ (value), (reg), (int)DTC_address(reg)); \ - writeb(value, DTC_address(reg));} while(0) + isa_writeb(value, DTC_address(reg));} while(0) #endif #define NCR5380_intr dtc_intr diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/fastlane.c linux/drivers/scsi/fastlane.c --- v2.4.13/linux/drivers/scsi/fastlane.c Wed Apr 11 19:02:37 2001 +++ linux/drivers/scsi/fastlane.c Thu Oct 25 13:53:51 2001 @@ -41,7 +41,7 @@ #include #include -#include + #include #include @@ -74,7 +74,7 @@ * the hardware register! */ -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* This is where all commands are put * before they are transferred to the ESP chip * via PIO. diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/gdth.c linux/drivers/scsi/gdth.c --- v2.4.13/linux/drivers/scsi/gdth.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/gdth.c Thu Oct 25 13:53:51 2001 @@ -4574,7 +4574,7 @@ Scsi_Device sdev; #endif char cmnd[MAX_COMMAND_SIZE]; - memset(cmnd, 0xff, 12); + memset(cmnd, 0xff, MAX_COMMAND_SIZE); TRACE2(("gdth_flush() hanum %d\n",hanum)); ha = HADATA(gdth_ctr_tab[hanum]); @@ -4652,7 +4652,7 @@ #ifndef __alpha__ /* controller reset */ - memset(cmnd, 0xff, 12); + memset(cmnd, 0xff, MAX_COMMAND_SIZE); #if LINUX_VERSION_CODE >= 0x020322 sdev = scsi_get_host_dev(gdth_ctr_tab[hanum]); scp = scsi_allocate_device(sdev, 1, FALSE); diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/gvp11.c linux/drivers/scsi/gvp11.c --- v2.4.13/linux/drivers/scsi/gvp11.c Mon Nov 27 17:57:34 2000 +++ linux/drivers/scsi/gvp11.c Thu Oct 25 13:53:51 2001 @@ -186,6 +186,7 @@ unsigned int epc; struct zorro_dev *z = NULL; unsigned int default_dma_xfer_mask; + wd33c93_regs regs; #ifdef CHECK_WD33C93 volatile unsigned char *sasr_3393, *scmd_3393; unsigned char save_sasr; @@ -329,12 +330,11 @@ /* * Check for 14MHz SCSI clock */ - if (epc & GVP_SCSICLKMASK) - wd33c93_init(instance, (wd33c93_regs *)&(DMA(instance)->SASR), - dma_setup, dma_stop, WD33C93_FS_8_10); - else - wd33c93_init(instance, (wd33c93_regs *)&(DMA(instance)->SASR), - dma_setup, dma_stop, WD33C93_FS_12_15); + regs.SASR = &(DMA(instance)->SASR); + regs.SCMD = &(DMA(instance)->SCMD); + wd33c93_init(instance, regs, dma_setup, dma_stop, + (epc & GVP_SCSICLKMASK) ? WD33C93_FS_8_10 + : WD33C93_FS_12_15); if (num_gvp11++ == 0) { first_instance = instance; diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/jazz_esp.c linux/drivers/scsi/jazz_esp.c --- v2.4.13/linux/drivers/scsi/jazz_esp.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/scsi/jazz_esp.c Thu Oct 25 13:53:51 2001 @@ -46,7 +46,7 @@ static void dma_led_on(struct NCR_ESP *); -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* This is where all commands are put * before they are trasfered to the ESP chip * via PIO. diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/mac_esp.c linux/drivers/scsi/mac_esp.c --- v2.4.13/linux/drivers/scsi/mac_esp.c Fri Mar 2 18:38:38 2001 +++ linux/drivers/scsi/mac_esp.c Thu Oct 25 13:53:51 2001 @@ -65,7 +65,7 @@ static int esp_dafb_dma_irq_p(struct NCR_ESP * espdev); static int esp_iosb_dma_irq_p(struct NCR_ESP * espdev); -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* This is where all commands are put * before they are transferred to the ESP chip * via PIO. diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/mca_53c9x.c linux/drivers/scsi/mca_53c9x.c --- v2.4.13/linux/drivers/scsi/mca_53c9x.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/scsi/mca_53c9x.c Thu Oct 25 13:53:51 2001 @@ -68,7 +68,7 @@ * 53c9x via PIO. */ -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* * We keep the structure that is used to access the registers on the 53c9x diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/megaraid.c linux/drivers/scsi/megaraid.c --- v2.4.13/linux/drivers/scsi/megaraid.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/megaraid.c Thu Oct 25 13:53:51 2001 @@ -9,9 +9,9 @@ * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * - * Version : v1.17a (July 13, 2001) + * Version : v1.18 (Oct 11, 2001) * - * Description: Linux device driver for AMI MegaRAID controller + * Description: Linux device driver for LSI Logic MegaRAID controller * * Supported controllers: MegaRAID 418, 428, 438, 466, 762, 467, 471, 490 * 493. @@ -427,12 +427,39 @@ * our current formula working to calculate logical drive number, return * failure for LUN > 7 * + * + * Version 1.17b + * Mon Jul 30 19:24:02 EDT 2001 - AM + * + * Added support for random deletion of logical drives + * + * Version 1.17c + * Tue Sep 25 09:37:49 EDT 2001 - Atul Mukker + * + * With single and dual channel controllers, some virtaul channels are + * displayed negative. + * * Version 1.17a-ac * Mon Aug 6 14:59:29 BST 2001 - "Michael Johnson" * * Make the HP print formatting and check for buggy firmware runtime not * ifdef dependant. * + * + * Version 1.17d + * Thu Oct 11 10:48:45 EDT 2001 - Atul Mukker + * + * Driver 1.17c oops when loaded without controller. + * + * Special case for "use_sg == 1" removed while building the scatter gather + * list. + * + * Version 1.18 + * Thu Oct 11 15:02:53 EDT 2001 - Atul Mukker + * + * References to AMI have been changed to LSI Logic. + * + * * BUGS: * Some older 2.1 kernels (eg. 2.1.90) have a bug in pci.c that * fails to detect the controller as a pci device on the system. @@ -550,16 +577,15 @@ * queue task is a simple api without irq forms */ -MODULE_AUTHOR ("American Megatrends Inc."); -MODULE_DESCRIPTION ("AMI MegaRAID driver"); -MODULE_LICENSE("GPL"); - +MODULE_AUTHOR ("LSI Logic Corporation"); +MODULE_DESCRIPTION ("LSI Logic MegaRAID driver"); +MODULE_LICENSE ("GPL"); #define DRIVER_LOCK_T #define DRIVER_LOCK_INIT(p) #define DRIVER_LOCK(p) #define DRIVER_UNLOCK(p) -#define IO_LOCK_T unsigned long io_flags = 0; +#define IO_LOCK_T unsigned long io_flags = 0 #define IO_LOCK spin_lock_irqsave(&io_request_lock,io_flags); #define IO_UNLOCK spin_unlock_irqrestore(&io_request_lock,io_flags); @@ -578,14 +604,14 @@ */ static char kernel_version[] = UTS_RELEASE; -MODULE_AUTHOR ("American Megatrends Inc."); -MODULE_DESCRIPTION ("AMI MegaRAID driver"); +MODULE_AUTHOR ("LSI Logic Corporation"); +MODULE_DESCRIPTION ("LSI Logic MegaRAID driver"); #define DRIVER_LOCK_T #define DRIVER_LOCK_INIT(p) #define DRIVER_LOCK(p) #define DRIVER_UNLOCK(p) -#define IO_LOCK_T unsigned long io_flags = 0; +#define IO_LOCK_T unsigned long io_flags = 0 #define IO_LOCK spin_lock_irqsave(&io_request_lock,io_flags); #define IO_UNLOCK spin_unlock_irqrestore(&io_request_lock,io_flags); @@ -746,7 +772,7 @@ static struct mcontroller mcontroller[MAX_CONTROLLERS]; /* The current driver version */ -static u32 driver_ver = 117; +static u32 driver_ver = 114; /* major number used by the device for character interface */ static int major; @@ -1050,7 +1076,11 @@ panic(KERN_ERR "megaraid:Problem...!\n"); } + islogical = ( (SCpnt->channel >= megaCfg->productInfo.SCSIChanPresent) && + (SCpnt->channel <= megaCfg->host->max_channel) ); +#if 0 islogical = (SCpnt->channel == megaCfg->host->max_channel); +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) /* Special Case to handle PassThrough->XferAddrress > 4GB */ @@ -1174,7 +1204,8 @@ mega_ext_passthru *epthru; long seg; char islogical; - char lun = SCpnt->lun; + int lun = SCpnt->lun; + int max_lun; if ((SCpnt->cmnd[0] == MEGADEVIOC)) return megadev_doioctl (megaCfg, SCpnt); @@ -1191,8 +1222,12 @@ } #endif + islogical = ( (SCpnt->channel >= megaCfg->productInfo.SCSIChanPresent) && + (SCpnt->channel <= megaCfg->host->max_channel) ); +#if 0 islogical = (IS_RAID_CH(SCpnt->channel) && /* virtual ch is raid - AM */ (SCpnt->channel == megaCfg->host->max_channel)); +#endif if ( ! megaCfg->support_ext_cdb ) { if (!islogical && lun != 0) { @@ -1208,21 +1243,28 @@ return NULL; } - /* - * Return error for LUN > 7. The way we calculate logical drive number - * requires it to be so. - */ - if( lun > 7 ) { - SCpnt->result = (DID_BAD_TARGET << 16); - callDone (SCpnt); - return NULL; - } - if (islogical) { - lun = (SCpnt->target * 8) + lun; + /* have just LUN 0 for each target on virtual channels */ + if( SCpnt->lun != 0 ) { + SCpnt->result = (DID_BAD_TARGET << 16); + callDone (SCpnt); + return NULL; + } + + lun = mega_get_lun(megaCfg, SCpnt); - if(lun >= megaCfg->numldrv ) { + max_lun = (megaCfg->flag & BOARD_40LD) ? + FC_MAX_LOGICAL_DRIVES : MAX_LOGICAL_DRIVES; + + /* + * max_lun increases by 0x80 if some logical drive was deleted. + */ + if(megaCfg->read_ldidmap) { + max_lun += 0x80; + } + + if( lun > max_lun ) { SCpnt->result = (DID_BAD_TARGET << 16); callDone (SCpnt); return NULL; @@ -1241,6 +1283,13 @@ } } } + } else { + if ( lun > 7) { + /* Do not support lun >7 for physically accessed devices */ + SCpnt->result = (DID_BAD_TARGET << 16); + callDone (SCpnt); + return NULL; + } } /*----------------------------------------------------- * @@ -1503,6 +1552,44 @@ return NULL; } +static int +mega_get_lun(mega_host_config *this_hba, Scsi_Cmnd *sc) +{ + int tgt; + int lun; + int virt_chan; + + tgt = sc->target; + + if ( tgt > 7 ) tgt--; /* we do not get inquires for tgt 7 */ + + virt_chan = sc->channel - this_hba->productInfo.SCSIChanPresent; + lun = (virt_chan * 15) + tgt; + + /* + * If "delete logical drive" feature is enabled on this controller. + * Do only if at least one delete logical drive operation was done. + * + * Also, after logical drive deletion, instead of logical drive number, + * the value returned should be 0x80+logical drive id. + * + * These is valid only for IO commands. + */ + + if( this_hba->support_random_del && this_hba->read_ldidmap ) { + switch(sc->cmnd[0]) { + case READ_6: /* fall through */ + case WRITE_6: /* fall through */ + case READ_10: /* fall through */ + case WRITE_10: + lun += 0x80; + } + } + + return lun; +} + + static mega_passthru * mega_prepare_passthru(mega_host_config *megacfg, mega_scb *scb, Scsi_Cmnd *sc) { @@ -1969,7 +2056,7 @@ *--------------------------------------------------------------------*/ static void megaraid_isr (int irq, void *devp, struct pt_regs *regs) { - IO_LOCK_T + IO_LOCK_T; mega_host_config * megaCfg; u_char byte, idx, sIdx, tmpBox[MAILBOX_SIZE]; u32 dword = 0; @@ -2367,7 +2454,7 @@ } sgList = (struct scatterlist *) scb->SCpnt->request_buffer; - +#if 0 if (scb->SCpnt->use_sg == 1) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) @@ -2395,7 +2482,7 @@ return 0; } - +#endif /* Copy Scatter-Gather list info into controller structure */ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) sgcnt = pci_map_sg (megaCfg->dev, @@ -2640,7 +2727,7 @@ mboxData[2] = NC_SUBOP_PRODUCT_INFO; /* i.e. 0x0E */ if ((retval = megaIssueCmd (megaCfg, mboxData, NULL, 0)) != 0) - printk ("ami:Product_info cmd failed with error: %d\n", + printk ("megaraid: Product_info cmd failed with error: %d\n", retval); pci_unmap_single (megaCfg->dev, @@ -2649,12 +2736,21 @@ PCI_DMA_FROMDEVICE); } - megaCfg->host->max_channel = megaCfg->productInfo.SCSIChanPresent; + /* + * kernel scans the channels from 0 to <= max_channel + */ + megaCfg->host->max_channel = + megaCfg->productInfo.SCSIChanPresent + NVIRT_CHAN -1; + megaCfg->host->max_id = 16; /* max targets per channel */ /*(megaCfg->flag & BOARD_40LD)?FC_MAX_TARGETS_PER_CHANNEL:MAX_TARGET+1; */ +#if 0 megaCfg->host->max_lun = /* max lun */ - (megaCfg-> - flag & BOARD_40LD) ? FC_MAX_LOGICAL_DRIVES : MAX_LOGICAL_DRIVES; + (megaCfg->flag & BOARD_40LD) ? + FC_MAX_LOGICAL_DRIVES : MAX_LOGICAL_DRIVES; +#endif + megaCfg->host->max_lun = 7; /* Upto 7 luns for non disk devices */ + megaCfg->host->cmd_per_lun = MAX_CMD_PER_LUN; megaCfg->numldrv = enquiry3Pnt->numLDrv; @@ -2670,27 +2766,27 @@ } #endif - /* use HP firmware and bios version encoding */ -if (megaCfg->productInfo.subSystemVendorID == HP_SUBSYS_ID) { - sprintf (megaCfg->fwVer, "%c%d%d.%d%d", - megaCfg->productInfo.FwVer[2], - megaCfg->productInfo.FwVer[1] >> 8, - megaCfg->productInfo.FwVer[1] & 0x0f, - megaCfg->productInfo.FwVer[2] >> 8, - megaCfg->productInfo.FwVer[2] & 0x0f); - sprintf (megaCfg->biosVer, "%c%d%d.%d%d", - megaCfg->productInfo.BiosVer[2], - megaCfg->productInfo.BiosVer[1] >> 8, - megaCfg->productInfo.BiosVer[1] & 0x0f, - megaCfg->productInfo.BiosVer[2] >> 8, - megaCfg->productInfo.BiosVer[2] & 0x0f); -} else { - memcpy (megaCfg->fwVer, (char *) megaCfg->productInfo.FwVer, 4); - megaCfg->fwVer[4] = 0; + /* use HP firmware and bios version encoding */ + if (megaCfg->productInfo.subSystemVendorID == HP_SUBSYS_ID) { + sprintf (megaCfg->fwVer, "%c%d%d.%d%d", + megaCfg->productInfo.FwVer[2], + megaCfg->productInfo.FwVer[1] >> 8, + megaCfg->productInfo.FwVer[1] & 0x0f, + megaCfg->productInfo.FwVer[0] >> 8, + megaCfg->productInfo.FwVer[0] & 0x0f); + sprintf (megaCfg->biosVer, "%c%d%d.%d%d", + megaCfg->productInfo.BiosVer[2], + megaCfg->productInfo.BiosVer[1] >> 8, + megaCfg->productInfo.BiosVer[1] & 0x0f, + megaCfg->productInfo.BiosVer[0] >> 8, + megaCfg->productInfo.BiosVer[0] & 0x0f); + } else { + memcpy (megaCfg->fwVer, (char *) megaCfg->productInfo.FwVer, 4); + megaCfg->fwVer[4] = 0; - memcpy (megaCfg->biosVer, (char *) megaCfg->productInfo.BiosVer, 4); - megaCfg->biosVer[4] = 0; -} + memcpy (megaCfg->biosVer, (char *) megaCfg->productInfo.BiosVer, 4); + megaCfg->biosVer[4] = 0; + } megaCfg->support_ext_cdb = mega_support_ext_cdb(megaCfg); printk (KERN_NOTICE "megaraid: [%s:%s] detected %d logical drives" M_RD_CRLFSTR, @@ -2737,7 +2833,7 @@ u32 magic64; #endif - int i; + int i; #ifdef __LP64__ u64 megaBase; @@ -2859,7 +2955,6 @@ if (!host) goto err_unmap; -#if 0 /* * Comment the following initialization if you know 'max_sectors' is * not defined for this kernel. @@ -2867,7 +2962,6 @@ * greatly increases the IO performance - AM */ host->max_sectors = 1024; -#endif scsi_set_pci_device(host, pdev); megaCfg = (mega_host_config *) host->hostdata; @@ -2894,6 +2988,9 @@ megaCfg->lock_pend = SPIN_LOCK_UNLOCKED; megaCfg->lock_scsicmd = SPIN_LOCK_UNLOCKED; megaCfg->flag = flag; + megaCfg->int_qh = NULL; + megaCfg->int_qt = NULL; + megaCfg->int_qlen = 0; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) megaCfg->dev = pdev; @@ -2999,7 +3096,7 @@ * Find out which channel is raid and which is scsi */ mega_enum_raid_scsi(megaCfg); - for( i = 0; i < megaCfg->host->max_channel; i++ ) { + for( i = 0; i < megaCfg->productInfo.SCSIChanPresent; i++ ) { if(IS_RAID_CH(i)) printk(KERN_NOTICE"megaraid: channel[%d] is raid.\n", i+1); else @@ -3014,6 +3111,12 @@ mega_hbas[numCtlrs].hostdata_addr = megaCfg; + /* + * Do we support random deletion and addition of logical drives + */ + megaCfg->read_ldidmap = 0; /* set it after first logdrv delete cmd */ + megaCfg->support_random_del = mega_support_random_del(megaCfg); + /* Initialize SCBs */ if (mega_init_scb (megaCfg)) { pci_free_consistent (megaCfg->dev, @@ -3100,7 +3203,7 @@ skip_id = (skip_id > 15) ? -1 : skip_id; } - printk (KERN_NOTICE "megaraid: " MEGARAID_VERSION M_RD_CRLFSTR); + printk (KERN_NOTICE "megaraid: " MEGARAID_VERSION); memset (mega_hbas, 0, sizeof (mega_hbas)); @@ -3267,6 +3370,7 @@ { mega_mailbox *mboxp; unsigned char mbox[16]; + int i; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) dma_addr_t dma_handle; @@ -3299,8 +3403,10 @@ if( megaIssueCmd(megacfg, mbox, NULL, 0) == 0 ) { mega_ch_class = *((char *)megacfg->mega_buffer); - /* logical drives channel is RAID */ - mega_ch_class |= (0x01 << megacfg->host->max_channel); + for( i = 0; i < NVIRT_CHAN; i++ ) { + /* logical drives channel is RAID */ + mega_ch_class |= (0x01 << (megacfg->productInfo.SCSIChanPresent+i)); + } } else { mega_ch_class = 0xFF; @@ -3572,7 +3678,7 @@ megaCfg = (mega_host_config *) pSHost->hostdata; sprintf (buffer, - "AMI MegaRAID %s %d commands %d targs %d chans %d luns", + "LSI Logic MegaRAID %s %d commands %d targs %d chans %d luns", megaCfg->fwVer, megaCfg->productInfo.MaxConcCmds, megaCfg->host->max_id, megaCfg->host->max_channel, megaCfg->host->max_lun); @@ -3604,14 +3710,15 @@ DRIVER_LOCK (megaCfg); if (!(megaCfg->flag & (1L << SCpnt->channel))) { - if (SCpnt->channel < SCpnt->host->max_channel) + if (SCpnt->channel < megaCfg->productInfo.SCSIChanPresent) printk ( KERN_NOTICE - "scsi%d: scanning channel %c for devices.\n", - megaCfg->host->host_no, SCpnt->channel + '1'); + "scsi%d: scanning channel %d for devices.\n", + megaCfg->host->host_no, SCpnt->channel); else printk ( KERN_NOTICE - "scsi%d: scanning virtual channel for logical drives.\n", - megaCfg->host->host_no); + "scsi%d: scanning virtual channel %d for logical drives.\n", + megaCfg->host->host_no, + SCpnt->channel-megaCfg->productInfo.SCSIChanPresent+1); megaCfg->flag |= (1L << SCpnt->channel); } @@ -3657,21 +3764,38 @@ megaCfg->flag |= IN_QUEUE; /* Allocate and build a SCB request */ if ((pScb = mega_build_cmd (megaCfg, SCpnt)) != NULL) { - /*build SCpnt for M_RD_IOCTL_CMD_NEW cmd in mega_ioctl() */ - /* Add SCB to the head of the pending queue */ - /* Add SCB to the head of the pending queue */ - if (megaCfg->qPendingH == NULL) { - megaCfg->qPendingH = megaCfg->qPendingT = pScb; - } else { - megaCfg->qPendingT->next = pScb; - megaCfg->qPendingT = pScb; - } - megaCfg->qPendingT->next = NULL; - megaCfg->qPcnt++; - if (mega_runpendq (megaCfg) == -1) { - DRIVER_UNLOCK (megaCfg); - return 0; + /* + * Check if the HBA is in quiescent state, e.g., during a delete + * logical drive opertion. If it is, queue the commands in the + * internal queue until the delete operation is complete. + */ + if( ! megaCfg->quiescent ) { + /* Add SCB to the head of the pending queue */ + if (megaCfg->qPendingH == NULL) { + megaCfg->qPendingH = megaCfg->qPendingT = pScb; + } else { + megaCfg->qPendingT->next = pScb; + megaCfg->qPendingT = pScb; + } + megaCfg->qPendingT->next = NULL; + megaCfg->qPcnt++; + + if (mega_runpendq (megaCfg) == -1) { + DRIVER_UNLOCK (megaCfg); + return 0; + } + } + else { + /* Add SCB to the internal queue */ + if (megaCfg->int_qh == NULL) { + megaCfg->int_qh = megaCfg->int_qt = pScb; + } else { + megaCfg->int_qt->next = pScb; + megaCfg->int_qt = pScb; + } + megaCfg->int_qt->next = NULL; + megaCfg->int_qlen++; } if (pScb->SCpnt->cmnd[0] == M_RD_IOCTL_CMD_NEW) { @@ -4184,6 +4308,7 @@ return -1; if( *(unsigned short *)(bh->b_data + 510) == 0xAA55 ) { + for( largest_cyl = -1, p = (struct partition *)(0x1BE + bh->b_data), i = 0; i < 4; ++i, ++p) { @@ -4197,6 +4322,7 @@ } } } + if (largest) { heads = largest->end_head + 1; sectors = largest->end_sector & 0x3f; @@ -4519,6 +4645,14 @@ break; case M_RD_IOCTL_CMD_NEW: + + /* + * Deletion of logical drives is only handled in 0x80 commands + */ + if( ioc.mbox[0] == FC_DEL_LOGDRV && ioc.mbox[2] == OP_DEL_LOGDRV ) { + return -EINVAL; + } + /* which adapter? */ adapno = ioc.ui.fcs.adapno; @@ -4686,6 +4820,28 @@ } if(shpnt == NULL) return -ENODEV; + /* + * ioctls for deleting logical drives is a special case, so check + * for it first + */ + if( ioc.mbox[0] == FC_DEL_LOGDRV && ioc.mbox[2] == OP_DEL_LOGDRV ) { + + if( !megacfg->support_random_del ) { + printk("megaraid: logdrv delete on non supporting f/w.\n"); + return -EINVAL; + } + + uioc = (struct uioctl_t *)arg; + + ret = mega_del_logdrv(megacfg, ioc.mbox[3]); + + put_user(1, &uioc->mbox[16]); /* numstatus */ + put_user(ret, &uioc->mbox[17]); /* status */ + + /* if deletion failed, let the user know by failing ioctl */ + return ret; + } + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) scsicmd = (Scsi_Cmnd *)kmalloc(sizeof(Scsi_Cmnd), GFP_KERNEL|GFP_DMA); #else @@ -4760,8 +4916,7 @@ put_user (scsicmd->result, &uioc->pthru.scsistatus); } else { put_user (1, &uioc->mbox[16]); /* numstatus */ - /* status */ - put_user (scsicmd->result, &uioc->mbox[17]); + put_user (scsicmd->result, &uioc->mbox[17]); /* status */ } if (kvaddr) { @@ -4918,6 +5073,139 @@ return !ret; } + +/* + * Find out if this controller supports random deletion and addition of + * logical drives + */ +static int +mega_support_random_del(mega_host_config *this_hba) +{ + mega_mailbox *mboxpnt; + unsigned char mbox[16]; + int ret; + + mboxpnt = (mega_mailbox *)mbox; + + memset(mbox, 0, sizeof(mbox)); + + /* + * issue command + */ + mbox[0] = FC_DEL_LOGDRV; + mbox[2] = OP_SUP_DEL_LOGDRV; + + ret = megaIssueCmd(this_hba, mbox, NULL, 0); + + return !ret; +} + +static int +mega_del_logdrv(mega_host_config *this_hba, int logdrv) +{ + int rval; + IO_LOCK_T; + DECLARE_WAIT_QUEUE_HEAD(wq); + mega_scb *scbp; + + /* + * Stop sending commands to the controller, queue them internally. + * When deletion is complete, ISR will flush the queue. + */ + IO_LOCK; + this_hba->quiescent = 1; + IO_UNLOCK; + + while( this_hba->qPcnt ) { + sleep_on_timeout( &wq, 1*HZ ); /* sleep for 1s */ + } + rval = mega_do_del_logdrv(this_hba, logdrv); + + IO_LOCK; + /* + * Attach the internal queue to the pending queue + */ + if( this_hba->qPendingH == NULL ) { + /* + * If pending queue head is null, make internal queue as + * pending queue + */ + this_hba->qPendingH = this_hba->int_qh; + this_hba->qPendingT = this_hba->int_qt; + this_hba->qPcnt = this_hba->int_qlen; + } + else { + /* + * Append pending queue to internal queue + */ + if( this_hba->int_qt ) { + this_hba->int_qt->next = this_hba->qPendingH; + + this_hba->qPendingH = this_hba->int_qh; + this_hba->qPcnt += this_hba->int_qlen; + } + } + + this_hba->int_qh = this_hba->int_qt = NULL; + this_hba->int_qlen = 0; + + /* + * If delete operation was successful, add 0x80 to the logical drive + * ids for commands in the pending queue. + */ + if( this_hba->read_ldidmap) { + for( scbp = this_hba->qPendingH; scbp; scbp = scbp->next ) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + if( scbp->pthru->logdrv < 0x80 ) + scbp->pthru->logdrv += 0x80; +#else + if( scbp->pthru.logdrv < 0x80 ) + scbp->pthru.logdrv += 0x80; +#endif + } + } + this_hba->quiescent = 0; + + IO_UNLOCK; + + return rval; +} + + +static int +mega_do_del_logdrv(mega_host_config *this_hba, int logdrv) +{ + mega_mailbox *mboxpnt; + unsigned char mbox[16]; + int rval; + + mboxpnt = (mega_mailbox *)mbox; + + memset(mbox, 0, sizeof(mbox)); + + mbox[0] = FC_DEL_LOGDRV; + mbox[2] = OP_DEL_LOGDRV; + mbox[3] = logdrv; + + rval = megaIssueCmd(this_hba, mbox, NULL, 0); + + /* log this event */ + if( rval != 0 ) { + printk("megaraid: Attempt to delete logical drive %d failed.", + logdrv); + return rval; + } + + printk("megaraid: logical drive %d deleted.\n", logdrv); + + /* + * After deleting first logical drive, the logical drives must be + * addressed by adding 0x80 to the logical drive id. + */ + this_hba->read_ldidmap = 1; + + return rval; +} #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) void * diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/megaraid.h linux/drivers/scsi/megaraid.h --- v2.4.13/linux/drivers/scsi/megaraid.h Sun Aug 12 13:28:00 2001 +++ linux/drivers/scsi/megaraid.h Thu Oct 25 13:53:51 2001 @@ -5,11 +5,14 @@ #include #endif +/* + * For state flag. Do not use LSB(8 bits) which are + * reserved for storing info about channels. + */ #define IN_ISR 0x80000000L #define IN_ABORT 0x40000000L #define IN_RESET 0x20000000L #define IN_QUEUE 0x10000000L - #define BOARD_QUARTZ 0x08000000L #define BOARD_40LD 0x04000000L #define BOARD_64BIT 0x02000000L @@ -27,7 +30,7 @@ #define M_RD_IOCTL_CMD_NEW 0x81 #define M_RD_DRIVER_IOCTL_INTERFACE 0x82 -#define MEGARAID_VERSION "v1.17a (Release Date: Fri Jul 13 18:44:01 EDT 2001)" +#define MEGARAID_VERSION "v1.18 (Release Date: Thu Oct 11 15:02:53 EDT 2001\n)" #define MEGARAID_IOCTL_VERSION 114 @@ -767,6 +770,17 @@ int support_ext_cdb; int boot_ldrv_enabled; int boot_ldrv; + + int support_random_del; /* Do we support random deletion of logdrvs */ + int read_ldidmap; /* set after logical drive deltion. The logical + drive number must be read from the map */ + int quiescent; /* a stage reached when delete logical drive needs to + be done. Stop sending requests to the hba till + delete operation is completed */ + + mega_scb *int_qh; /* commands are queued in the internal queue */ + mega_scb *int_qt; /* while the hba is quiescent */ + int int_qlen; } mega_host_config; typedef struct _driver_info { @@ -911,6 +925,16 @@ }; #pragma pack() +#define NVIRT_CHAN 4 /* # of virtual channels to represent 60 logical + drives */ + +/* + * Command for random deletion of logical drives + */ +#define FC_DEL_LOGDRV 0xA4 /* f/w command */ +#define OP_SUP_DEL_LOGDRV 0x2A /* is feature supported */ +#define OP_GET_LDID_MAP 0x18 /* get logdrv id and logdrv number map */ +#define OP_DEL_LOGDRV 0x1C /* delete logical drive */ /*================================================================ * @@ -975,6 +999,10 @@ static void mega_enum_raid_scsi(mega_host_config *); static int mega_partsize(Disk *, kdev_t, int *); static void mega_get_boot_ldrv(mega_host_config *); +static int mega_get_lun(mega_host_config *, Scsi_Cmnd *); +static int mega_support_random_del(mega_host_config *); +static int mega_del_logdrv(mega_host_config *, int); +static int mega_do_del_logdrv(mega_host_config *, int); #endif diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/mvme147.c linux/drivers/scsi/mvme147.c --- v2.4.13/linux/drivers/scsi/mvme147.c Mon Nov 27 17:57:34 2000 +++ linux/drivers/scsi/mvme147.c Thu Oct 25 13:53:51 2001 @@ -65,6 +65,7 @@ int mvme147_detect(Scsi_Host_Template *tpnt) { static unsigned char called = 0; + wd33c93_regs regs; if (!MACH_IS_MVME147 || called) return 0; @@ -74,13 +75,19 @@ tpnt->proc_info = &wd33c93_proc_info; mvme147_host = scsi_register (tpnt, sizeof(struct WD33C93_hostdata)); + if (!mvme147_host) + goto err_out; + mvme147_host->base = 0xfffe4000; mvme147_host->irq = MVME147_IRQ_SCSI_PORT; - wd33c93_init(mvme147_host, (wd33c93_regs *)0xfffe4000, - dma_setup, dma_stop, WD33C93_FS_8_10); - - request_irq(MVME147_IRQ_SCSI_PORT, mvme147_intr, 0, "MVME147 SCSI PORT", mvme147_intr); - request_irq(MVME147_IRQ_SCSI_DMA, mvme147_intr, 0, "MVME147 SCSI DMA", mvme147_intr); + regs.SASR = (volatile unsigned char *)0xfffe4000; + regs.SCMD = (volatile unsigned char *)0xfffe4001; + wd33c93_init(mvme147_host, regs, dma_setup, dma_stop, WD33C93_FS_8_10); + + if (request_irq(MVME147_IRQ_SCSI_PORT, mvme147_intr, 0, "MVME147 SCSI PORT", mvme147_intr)) + goto err_unregister; + if (request_irq(MVME147_IRQ_SCSI_DMA, mvme147_intr, 0, "MVME147 SCSI DMA", mvme147_intr)) + goto err_free_irq; #if 0 /* Disabled; causes problems booting */ m147_pcc->scsi_interrupt = 0x10; /* Assert SCSI bus reset */ udelay(100); @@ -94,6 +101,14 @@ m147_pcc->dma_intr = 0x89; /* Ack and enable ints */ return 1; + + err_free_irq: + free_irq(MVME147_IRQ_SCSI_PORT, mvme147_intr); + err_unregister: + wd33c93_release(); + scsi_unregister(mvme147_host); + err_out: + return 0; } #define HOSTS_C diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/mvme16x.c linux/drivers/scsi/mvme16x.c --- v2.4.13/linux/drivers/scsi/mvme16x.c Sun Feb 13 11:21:42 2000 +++ linux/drivers/scsi/mvme16x.c Thu Oct 25 13:53:51 2001 @@ -52,3 +52,6 @@ called = 1; return 1; } + +static Scsi_Host_Template driver_template = MVME16x_SCSI; +#include "scsi_module.c" diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/oktagon_esp.c linux/drivers/scsi/oktagon_esp.c --- v2.4.13/linux/drivers/scsi/oktagon_esp.c Fri Feb 9 11:30:23 2001 +++ linux/drivers/scsi/oktagon_esp.c Thu Oct 25 13:53:51 2001 @@ -27,7 +27,7 @@ #include #include #include -#include + #include "scsi.h" #include "hosts.h" @@ -106,7 +106,7 @@ static struct NCR_ESP *current_esp; -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* This is where all commands are put * before they are trasfered to the ESP chip * via PIO. diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/osst.c linux/drivers/scsi/osst.c --- v2.4.13/linux/drivers/scsi/osst.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/scsi/osst.c Sun Nov 4 09:31:57 2001 @@ -4935,6 +4935,7 @@ tb->sg[0].address = (unsigned char *)__get_free_pages(priority, order); if (tb->sg[0].address != NULL) { + tb->sg[0].page = NULL; tb->sg[0].length = b_size; break; } @@ -4970,6 +4971,7 @@ tb = NULL; break; } + tb->sg[segs].page = NULL; tb->sg[segs].length = b_size; got += b_size; segs++; @@ -5043,6 +5045,7 @@ normalize_buffer(STbuffer); return FALSE; } + STbuffer->sg[segs].page = NULL; STbuffer->sg[segs].length = b_size; STbuffer->sg_segs += 1; got += b_size; diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/qlogicfas.c linux/drivers/scsi/qlogicfas.c --- v2.4.13/linux/drivers/scsi/qlogicfas.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/qlogicfas.c Thu Oct 25 13:53:51 2001 @@ -271,8 +271,10 @@ int i,k; k = 0; i = jiffies + WATCHDOG; - while ( i > jiffies && !qabort && !((k = inb(qbase + 4)) & 0xe0)) + while ( i > jiffies && !qabort && !((k = inb(qbase + 4)) & 0xe0)) { barrier(); + cpu_relax(); + } if (i <= jiffies) return (DID_TIME_OUT); if (qabort) @@ -431,6 +433,7 @@ i = inb(qbase + 5); /* should be bus service */ while (!qabort && ((i & 0x20) != 0x20)) { barrier(); + cpu_relax(); i |= inb(qbase + 5); } rtrc(0) @@ -513,8 +516,10 @@ cmd->scsi_done = done; /* wait for the last command's interrupt to finish */ - while (qlcmd != NULL) + while (qlcmd != NULL) { barrier(); + cpu_relax(); + } ql_icmd(cmd); return 0; } diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/qlogicfc.c linux/drivers/scsi/qlogicfc.c --- v2.4.13/linux/drivers/scsi/qlogicfc.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/scsi/qlogicfc.c Thu Oct 25 13:53:51 2001 @@ -803,9 +803,10 @@ outw(HCCR_CLEAR_RISC_INTR, host->io_port + HOST_HCCR); isp2x00_enable_irqs(host); /* wait for the loop to come up */ - for (wait_time = jiffies + 10 * HZ; wait_time > jiffies && hostdata->adapter_state == AS_LOOP_DOWN;) + for (wait_time = jiffies + 10 * HZ; wait_time > jiffies && hostdata->adapter_state == AS_LOOP_DOWN;) { barrier(); - + cpu_relax(); + } if (hostdata->adapter_state == AS_LOOP_DOWN) { printk("qlogicfc%d : link is not up\n", hostdata->host_id); } @@ -819,8 +820,10 @@ some time before recognizing it is attached to a fabric */ #if ISP2x00_FABRIC - for (wait_time = jiffies + 5 * HZ; wait_time > jiffies;) + for (wait_time = jiffies + 5 * HZ; wait_time > jiffies;) { barrier(); + cpu_relax(); + } #endif LEAVE("isp2x00_detect"); @@ -1840,8 +1843,10 @@ outw(HCCR_BIOS_DISABLE, host->io_port + HOST_HCCR); loop_count = DEFAULT_LOOP_COUNT; - while (--loop_count && inw(host->io_port + HOST_HCCR) == RISC_BUSY) + while (--loop_count && inw(host->io_port + HOST_HCCR) == RISC_BUSY) { barrier(); + cpu_relax(); + } if (!loop_count) printk("qlogicfc%d : reset_hardware loop timeout\n", hostdata->host_id); @@ -2118,8 +2123,10 @@ return 1; loop_count = DEFAULT_LOOP_COUNT; - while (--loop_count && inw(host->io_port + HOST_HCCR) & 0x0080) + while (--loop_count && inw(host->io_port + HOST_HCCR) & 0x0080) { barrier(); + cpu_relax(); + } if (!loop_count) { printk("qlogicfc%d : mbox_command loop timeout #1\n", hostdata->host_id); param[0] = 0x4006; @@ -2153,8 +2160,9 @@ while (1) { loop_count = DEFAULT_LOOP_COUNT; - while (--loop_count && !(inw(host->io_port + PCI_INTER_STS) & 0x08)) { + while (--loop_count && !(inw(host->io_port + PCI_INTER_STS) & 0x08)) { barrier(); + cpu_relax(); } if (!loop_count) { @@ -2172,6 +2180,7 @@ loop_count = DEFAULT_LOOP_COUNT; while (--loop_count && inw(host->io_port + MBOX0) == 0x04) { barrier(); + cpu_relax(); } if (!loop_count) printk("qlogicfc%d : mbox_command loop timeout #3\n", hostdata->host_id); diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/qlogicisp.c linux/drivers/scsi/qlogicisp.c --- v2.4.13/linux/drivers/scsi/qlogicisp.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/qlogicisp.c Thu Oct 25 13:53:51 2001 @@ -1279,8 +1279,10 @@ isp_outw(HCCR_BIOS_DISABLE, host, HOST_HCCR); loop_count = DEFAULT_LOOP_COUNT; - while (--loop_count && isp_inw(host, HOST_HCCR) == RISC_BUSY) + while (--loop_count && isp_inw(host, HOST_HCCR) == RISC_BUSY) { barrier(); + cpu_relax(); + } if (!loop_count) printk("qlogicisp: reset_hardware loop timeout\n"); @@ -1904,8 +1906,10 @@ return 1; loop_count = DEFAULT_LOOP_COUNT; - while (--loop_count && isp_inw(host, HOST_HCCR) & 0x0080) + while (--loop_count && isp_inw(host, HOST_HCCR) & 0x0080) { barrier(); + cpu_relax(); + } if (!loop_count) printk("qlogicisp: mbox_command loop timeout #1\n"); @@ -1925,14 +1929,18 @@ isp_outw(HCCR_SET_HOST_INTR, host, HOST_HCCR); loop_count = DEFAULT_LOOP_COUNT; - while (--loop_count && !(isp_inw(host, PCI_INTF_STS) & 0x04)) + while (--loop_count && !(isp_inw(host, PCI_INTF_STS) & 0x04)) { barrier(); + cpu_relax(); + } if (!loop_count) printk("qlogicisp: mbox_command loop timeout #2\n"); loop_count = DEFAULT_LOOP_COUNT; - while (--loop_count && isp_inw(host, MBOX0) == 0x04) + while (--loop_count && isp_inw(host, MBOX0) == 0x04) { barrier(); + cpu_relax(); + } if (!loop_count) printk("qlogicisp: mbox_command loop timeout #3\n"); diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/qlogicpti.c linux/drivers/scsi/qlogicpti.c --- v2.4.13/linux/drivers/scsi/qlogicpti.c Wed Jul 25 17:10:23 2001 +++ linux/drivers/scsi/qlogicpti.c Tue Oct 30 15:08:11 2001 @@ -35,7 +35,6 @@ #include #include #include -#include #include #include @@ -184,8 +183,10 @@ /* Wait for host IRQ bit to clear. */ loop_count = DEFAULT_LOOP_COUNT; - while (--loop_count && (sbus_readw(qpti->qregs + HCCTRL) & HCCTRL_HIRQ)) + while (--loop_count && (sbus_readw(qpti->qregs + HCCTRL) & HCCTRL_HIRQ)) { barrier(); + cpu_relax(); + } if (!loop_count) printk(KERN_EMERG "qlogicpti: mbox_command loop timeout #1\n"); diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/scsi_merge.c linux/drivers/scsi/scsi_merge.c --- v2.4.13/linux/drivers/scsi/scsi_merge.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/scsi/scsi_merge.c Thu Oct 25 14:05:31 2001 @@ -943,6 +943,7 @@ } count++; sgpnt[count - 1].address = bh->b_data; + sgpnt[count - 1].page = NULL; sgpnt[count - 1].length += bh->b_size; if (!dma_host) { SCpnt->request_bufflen += bh->b_size; diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/sd.c linux/drivers/scsi/sd.c --- v2.4.13/linux/drivers/scsi/sd.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/scsi/sd.c Thu Oct 25 13:58:35 2001 @@ -555,6 +555,7 @@ static struct block_device_operations sd_fops = { + owner: THIS_MODULE, open: sd_open, release: sd_release, ioctl: sd_ioctl, diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/sg.c linux/drivers/scsi/sg.c --- v2.4.13/linux/drivers/scsi/sg.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/sg.c Sun Nov 4 09:31:57 2001 @@ -1544,6 +1544,7 @@ num = (rem_sz > (PAGE_SIZE - offset)) ? (PAGE_SIZE - offset) : rem_sz; sclp->address = page_address(kp->maplist[k]) + offset; + sclp->page = NULL; sclp->length = num; mem_src_arr[k] = SG_USER_MEM; rem_sz -= num; @@ -1630,6 +1631,7 @@ break; } sclp->address = p; + sclp->page = NULL; sclp->length = ret_sz; mem_src_arr[k] = mem_src; @@ -1787,6 +1789,7 @@ k, sclp->address, sclp->length, mem_src)); sg_free(sclp->address, sclp->length, mem_src); sclp->address = NULL; + sclp->page = NULL; sclp->length = 0; } sg_free(schp->buffer, schp->sglist_len, schp->buffer_mem_src); diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/sr.c linux/drivers/scsi/sr.c --- v2.4.13/linux/drivers/scsi/sr.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/scsi/sr.c Thu Oct 25 13:58:35 2001 @@ -484,6 +484,15 @@ return 1; } +struct block_device_operations sr_bdops = +{ + owner: THIS_MODULE, + open: cdrom_open, + release: cdrom_release, + ioctl: cdrom_ioctl, + check_media_change: cdrom_media_changed, +}; + static int sr_open(struct cdrom_device_info *cdi, int purpose) { check_disk_change(cdi->dev); @@ -778,7 +787,7 @@ return 0; if (!sr_registered) { - if (devfs_register_blkdev(MAJOR_NR, "sr", &cdrom_fops)) { + if (devfs_register_blkdev(MAJOR_NR, "sr", &sr_bdops)) { printk("Unable to get major %d for SCSI-CD\n", MAJOR_NR); return 1; } @@ -875,7 +884,7 @@ devfs_register (scsi_CDs[i].device->de, "cd", DEVFS_FL_DEFAULT, MAJOR_NR, i, S_IFBLK | S_IRUGO | S_IWUGO, - &cdrom_fops, NULL); + &sr_bdops, NULL); register_cdrom(&scsi_CDs[i].cdi); } diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/st.c linux/drivers/scsi/st.c --- v2.4.13/linux/drivers/scsi/st.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/scsi/st.c Tue Oct 30 15:08:12 2001 @@ -3233,6 +3233,7 @@ break; } } + tb->sg[0].page = NULL; if (tb->sg[segs].address == NULL) { kfree(tb); tb = NULL; @@ -3264,6 +3265,7 @@ tb = NULL; break; } + tb->sg[segs].page = NULL; tb->sg[segs].length = b_size; got += b_size; segs++; @@ -3337,6 +3339,7 @@ normalize_buffer(STbuffer); return FALSE; } + STbuffer->sg[segs].page = NULL; STbuffer->sg[segs].length = b_size; STbuffer->sg_segs += 1; got += b_size; diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/sun3_NCR5380.c linux/drivers/scsi/sun3_NCR5380.c --- v2.4.13/linux/drivers/scsi/sun3_NCR5380.c Fri Dec 29 14:07:22 2000 +++ linux/drivers/scsi/sun3_NCR5380.c Thu Oct 25 13:53:51 2001 @@ -647,10 +647,10 @@ static volatile int main_running = 0; static struct tq_struct NCR5380_tqueue = { - NULL, /* next */ - 0, /* sync */ - (void (*)(void*))NCR5380_main, /* routine, must have (void *) arg... */ - NULL /* data */ +// NULL, /* next */ + sync: 0, /* sync */ + routine: (void (*)(void*))NCR5380_main, /* routine, must have (void *) arg... */ + data: NULL /* data */ }; static __inline__ void queue_main(void) @@ -1217,7 +1217,7 @@ HOSTNO, NCR5380_read(BUS_AND_STATUS_REG), NCR5380_read(STATUS_REG)); - if((sun3scsi_dma_finish())) { + if((sun3scsi_dma_finish(hostdata->connected->request.cmd))) { printk("scsi%d: overrun in UDC counter -- not prepared to deal with this!\n", HOSTNO); printk("please e-mail sammy@oh.verio.com with a description of how this\n"); printk("error was produced.\n"); diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/sun3_scsi.c linux/drivers/scsi/sun3_scsi.c --- v2.4.13/linux/drivers/scsi/sun3_scsi.c Fri Mar 2 18:38:39 2001 +++ linux/drivers/scsi/sun3_scsi.c Thu Oct 25 13:53:51 2001 @@ -68,6 +68,9 @@ #include #include +#include +#include + /* dma on! */ #define REAL_DMA @@ -113,7 +116,7 @@ #define AFTER_RESET_DELAY (HZ/2) /* ms to wait after hitting dma regs */ -#define SUN3_DMA_DELAY 5 +#define SUN3_DMA_DELAY 10 /* dvma buffer to allocate -- 32k should hopefully be more than sufficient */ #define SUN3_DVMA_BUFSIZE 0xe000 @@ -125,9 +128,10 @@ static volatile struct sun3_dma_regs *dregs; static unsigned char *dmabuf = NULL; /* dma memory buffer */ static struct sun3_udc_regs *udc_regs = NULL; -static void *sun3_dma_orig_addr = NULL; +static unsigned char *sun3_dma_orig_addr = NULL; static unsigned long sun3_dma_orig_count = 0; static int sun3_dma_active = 0; +static unsigned long last_residual = 0; /* * NCR 5380 register access functions @@ -189,6 +193,16 @@ static int called = 0; struct Scsi_Host *instance; + /* check that this machine has an onboard 5380 */ + switch(idprom->id_machtype) { + case SM_SUN3|SM_3_50: + case SM_SUN3|SM_3_60: + break; + + default: + return 0; + } + if(called) return 0; @@ -233,17 +247,17 @@ sun3_scsi_regp = (unsigned char *)ioaddr; dregs = (struct sun3_dma_regs *)(((unsigned char *)ioaddr) + 8); - if((dmabuf = sun3_dvma_malloc(SUN3_DVMA_BUFSIZE)) == NULL) { + if((udc_regs = dvma_malloc(sizeof(struct sun3_udc_regs))) + == NULL) { printk("SUN3 Scsi couldn't allocate DVMA memory!\n"); return 0; } - - if((udc_regs = sun3_dvma_malloc(sizeof(struct sun3_udc_regs))) - == NULL) { +#ifdef OLDDMA + if((dmabuf = dvma_malloc_align(SUN3_DVMA_BUFSIZE, 0x10000)) == NULL) { printk("SUN3 Scsi couldn't allocate DVMA memory!\n"); return 0; } - +#endif #ifdef SUPPORT_TAGS if (setup_use_tagged_queuing < 0) setup_use_tagged_queuing = DEFAULT_USE_TAGGED_QUEUING; @@ -403,13 +417,21 @@ /* sun3scsi_dma_setup() -- initialize the dma controller for a read/write */ static unsigned long sun3scsi_dma_setup(void *data, unsigned long count, int write_flag) { +#ifdef OLDDMA if(write_flag) memcpy(dmabuf, data, count); else { sun3_dma_orig_addr = data; sun3_dma_orig_count = count; } +#else + void *addr; +// addr = sun3_dvma_page((unsigned long)data, (unsigned long)dmabuf); + addr = (void *)dvma_map((unsigned long) data, count); + sun3_dma_orig_addr = addr; + sun3_dma_orig_count = count; +#endif dregs->fifo_count = 0; sun3_udc_write(UDC_RESET, UDC_CSR); @@ -441,8 +463,13 @@ } /* setup udc */ - udc_regs->addr_hi = ((sun3_dvma_vtop(dmabuf) & 0xff0000) >> 8); - udc_regs->addr_lo = (sun3_dvma_vtop(dmabuf) & 0xffff); +#ifdef OLDDMA + udc_regs->addr_hi = ((dvma_vtob(dmabuf) & 0xff0000) >> 8); + udc_regs->addr_lo = (dvma_vtob(dmabuf) & 0xffff); +#else + udc_regs->addr_hi = (((unsigned long)(addr) & 0xff0000) >> 8); + udc_regs->addr_lo = ((unsigned long)(addr) & 0xffff); +#endif udc_regs->count = count/2; /* count in words */ udc_regs->mode_hi = UDC_MODE_HIWORD; if(write_flag) { @@ -456,10 +483,10 @@ } /* announce location of regs block */ - sun3_udc_write(((sun3_dvma_vtop(udc_regs) & 0xff0000) >> 8), + sun3_udc_write(((dvma_vtob(udc_regs) & 0xff0000) >> 8), UDC_CHN_HI); - sun3_udc_write((sun3_dvma_vtop(udc_regs) & 0xffff), UDC_CHN_LO); + sun3_udc_write((dvma_vtob(udc_regs) & 0xffff), UDC_CHN_LO); /* set dma master on */ sun3_udc_write(0xd, UDC_MODE); @@ -471,7 +498,7 @@ } -static inline unsigned long sun3scsi_dma_residual(struct Scsi_Host *instance) +static inline unsigned long sun3scsi_dma_count(struct Scsi_Host *instance) { unsigned short resid; @@ -484,6 +511,11 @@ return (unsigned long) resid; } +static inline unsigned long sun3scsi_dma_residual(struct Scsi_Host *instance) +{ + return last_residual; +} + static inline unsigned long sun3scsi_dma_xfer_len(unsigned long wanted, Scsi_Cmnd *cmd, int write_flag) { @@ -494,15 +526,33 @@ } /* clean up after our dma is done */ -static int sun3scsi_dma_finish(void) +static int sun3scsi_dma_finish(int write_flag) { unsigned short count; + unsigned short fifo; int ret = 0; - count = sun3scsi_dma_residual(default_instance); - sun3_dma_active = 0; + // check to empty the fifo on a read + if(!write_flag) { + int tmo = 200000; /* 2 sec */ + + while(1) { + if(dregs->csr & CSR_FIFO_EMPTY) + break; + + if(--tmo <= 0) + return 1; + + udelay(10); + } + } + + + count = sun3scsi_dma_count(default_instance); +#ifdef OLDDMA + /* if we've finished a read, copy out the data we read */ if(sun3_dma_orig_addr) { /* check for residual bytes after dma end */ @@ -518,9 +568,29 @@ sun3_dma_orig_addr = NULL; } - +#else + + fifo = dregs->fifo_count; + last_residual = fifo; + + /* empty bytes from the fifo which didn't make it */ + if((!write_flag) && (count - fifo) == 2) { + unsigned short data; + unsigned char *vaddr; + + data = dregs->fifo_data; + vaddr = (unsigned char *)dvma_btov(sun3_dma_orig_addr); + + vaddr += (sun3_dma_orig_count - fifo); + + vaddr[-2] = (data & 0xff00) >> 8; + vaddr[-1] = (data & 0xff); + } + + dvma_unmap(sun3_dma_orig_addr); +#endif sun3_udc_write(UDC_RESET, UDC_CSR); - + dregs->fifo_count = 0; dregs->csr &= ~CSR_SEND; /* reset fifo */ diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/sun3x_esp.c linux/drivers/scsi/sun3x_esp.c --- v2.4.13/linux/drivers/scsi/sun3x_esp.c Tue Mar 6 19:44:37 2001 +++ linux/drivers/scsi/sun3x_esp.c Thu Oct 25 13:53:51 2001 @@ -21,6 +21,7 @@ #include "sun3x_esp.h" #include #include +#include extern struct NCR_ESP *espchain; @@ -28,6 +29,7 @@ static int dma_bytes_sent(struct NCR_ESP *esp, int fifo_count); static int dma_can_transfer(struct NCR_ESP *esp, Scsi_Cmnd *sp); static void dma_drain(struct NCR_ESP *esp); +static void dma_invalidate(struct NCR_ESP *esp); static void dma_dump_state(struct NCR_ESP *esp); static void dma_init_read(struct NCR_ESP *esp, __u32 vaddress, int length); static void dma_init_write(struct NCR_ESP *esp, __u32 vaddress, int length); @@ -44,7 +46,7 @@ static void dma_mmu_release_scsi_sgl (struct NCR_ESP *esp, Scsi_Cmnd *sp); static void dma_advance_sg (Scsi_Cmnd *sp); -volatile unsigned char cmd_buffer[16]; +static volatile unsigned char cmd_buffer[16]; /* This is where all commands are put * before they are trasfered to the ESP chip * via PIO. @@ -78,9 +80,10 @@ /* Optional functions */ esp->dma_barrier = &dma_barrier; + esp->dma_invalidate = &dma_invalidate; esp->dma_drain = &dma_drain; - esp->dma_irq_entry = &dma_ints_off; - esp->dma_irq_exit = &dma_ints_on; + esp->dma_irq_entry = 0; + esp->dma_irq_exit = 0; esp->dma_led_on = 0; esp->dma_led_off = 0; esp->dma_poll = &dma_poll; @@ -98,9 +101,14 @@ esp->eregs = (struct ESP_regs *)(SUN3X_ESP_BASE); esp->dregs = (void *)SUN3X_ESP_DMA; - esp->esp_command = (volatile unsigned char *)cmd_buffer; - esp->esp_command_dvma = dvma_alloc(virt_to_phys(cmd_buffer), - sizeof (cmd_buffer)); +#if 0 + esp->esp_command = (volatile unsigned char *)cmd_buffer; + esp->esp_command_dvma = dvma_map((unsigned long)cmd_buffer, + sizeof (cmd_buffer)); +#else + esp->esp_command = (volatile unsigned char *)dvma_malloc(DVMA_PAGE_SIZE); + esp->esp_command_dvma = dvma_vtob((unsigned long)esp->esp_command); +#endif esp->irq = 2; if (request_irq(esp->irq, esp_intr, SA_INTERRUPT, @@ -114,20 +122,57 @@ esp_initialize(esp); + /* for reasons beyond my knowledge (and which should likely be fixed) + sync mode doesn't work on a 3/80 at 5mhz. but it does at 4. */ + esp->sync_defp = 0x3f; + printk("ESP: Total of %d ESP hosts found, %d actually in use.\n", nesps, esps_in_use); esps_running = esps_in_use; return esps_in_use; } +static void dma_do_drain(struct NCR_ESP *esp) +{ + struct sparc_dma_registers *dregs = + (struct sparc_dma_registers *) esp->dregs; + + int count = 500000; + + while((dregs->cond_reg & DMA_PEND_READ) && (--count > 0)) + udelay(1); + + if(!count) { + printk("%s:%d timeout CSR %08lx\n", __FILE__, __LINE__, dregs->cond_reg); + } + + dregs->cond_reg |= DMA_FIFO_STDRAIN; + + count = 500000; + + while((dregs->cond_reg & DMA_FIFO_ISDRAIN) && (--count > 0)) + udelay(1); + + if(!count) { + printk("%s:%d timeout CSR %08lx\n", __FILE__, __LINE__, dregs->cond_reg); + } + +} + static void dma_barrier(struct NCR_ESP *esp) { - struct sparc_dma_registers *dregs = - (struct sparc_dma_registers *) esp->dregs; - - while(dregs->cond_reg & DMA_PEND_READ) - udelay(1); - dregs->cond_reg &= ~(DMA_ENABLE); + struct sparc_dma_registers *dregs = + (struct sparc_dma_registers *) esp->dregs; + int count = 500000; + + while((dregs->cond_reg & DMA_PEND_READ) && (--count > 0)) + udelay(1); + + if(!count) { + printk("%s:%d timeout CSR %08lx\n", __FILE__, __LINE__, dregs->cond_reg); + } + + dregs->cond_reg &= ~(DMA_ENABLE); } /* This uses various DMA csr fields and the fifo flags count value to @@ -145,27 +190,44 @@ static int dma_can_transfer(struct NCR_ESP *esp, Scsi_Cmnd *sp) { - __u32 base, end, sz; - - base = ((__u32)sp->SCp.ptr); - base &= (0x1000000 - 1); - end = (base + sp->SCp.this_residual); - if(end > 0x1000000) - end = 0x1000000; - sz = (end - base); - return sz; + return sp->SCp.this_residual; } static void dma_drain(struct NCR_ESP *esp) { struct sparc_dma_registers *dregs = (struct sparc_dma_registers *) esp->dregs; + int count = 500000; if(dregs->cond_reg & DMA_FIFO_ISDRAIN) { dregs->cond_reg |= DMA_FIFO_STDRAIN; - while(dregs->cond_reg & DMA_FIFO_ISDRAIN) + while((dregs->cond_reg & DMA_FIFO_ISDRAIN) && (--count > 0)) udelay(1); + if(!count) { + printk("%s:%d timeout CSR %08lx\n", __FILE__, __LINE__, dregs->cond_reg); + } + + } +} + +static void dma_invalidate(struct NCR_ESP *esp) +{ + struct sparc_dma_registers *dregs = + (struct sparc_dma_registers *) esp->dregs; + + __u32 tmp; + int count = 500000; + + while(((tmp = dregs->cond_reg) & DMA_PEND_READ) && (--count > 0)) + udelay(1); + + if(!count) { + printk("%s:%d timeout CSR %08lx\n", __FILE__, __LINE__, dregs->cond_reg); } + + dregs->cond_reg = tmp | DMA_FIFO_INV; + dregs->cond_reg &= ~DMA_FIFO_INV; + } static void dma_dump_state(struct NCR_ESP *esp) @@ -173,7 +235,7 @@ struct sparc_dma_registers *dregs = (struct sparc_dma_registers *) esp->dregs; - ESPLOG(("esp%d: dma -- cond_reg<%08lx> addr<%p>\n", + ESPLOG(("esp%d: dma -- cond_reg<%08lx> addr<%08lx>\n", esp->esp_id, dregs->cond_reg, dregs->st_addr)); } @@ -182,8 +244,8 @@ struct sparc_dma_registers *dregs = (struct sparc_dma_registers *) esp->dregs; - dregs->cond_reg |= (DMA_ST_WRITE | DMA_ENABLE); dregs->st_addr = vaddress; + dregs->cond_reg |= (DMA_ST_WRITE | DMA_ENABLE); } static void dma_init_write(struct NCR_ESP *esp, __u32 vaddress, int length) @@ -192,8 +254,9 @@ (struct sparc_dma_registers *) esp->dregs; /* Set up the DMA counters */ - dregs->cond_reg = ((dregs->cond_reg & ~(DMA_ST_WRITE)) | DMA_ENABLE); + dregs->st_addr = vaddress; + dregs->cond_reg = ((dregs->cond_reg & ~(DMA_ST_WRITE)) | DMA_ENABLE); } static void dma_ints_off(struct NCR_ESP *esp) @@ -213,11 +276,21 @@ static void dma_poll(struct NCR_ESP *esp, unsigned char *vaddr) { - dma_drain(esp); + int count = 50; + dma_do_drain(esp); /* Wait till the first bits settle. */ - while(vaddr[0] == 0xff) + while((*(volatile unsigned char *)vaddr == 0xff) && (--count > 0)) udelay(1); + + if(!count) { +// printk("%s:%d timeout expire (data %02x)\n", __FILE__, __LINE__, +// esp_read(esp->eregs->esp_fdata)); + //mach_halt(); + vaddr[0] = esp_read(esp->eregs->esp_fdata); + vaddr[1] = esp_read(esp->eregs->esp_fdata); + } + } static int dma_ports_p(struct NCR_ESP *esp) @@ -244,10 +317,17 @@ (struct sparc_dma_registers *) esp->dregs; unsigned long nreg = dregs->cond_reg; +// printk("dma_setup %c addr %08x cnt %08x\n", +// write ? 'W' : 'R', addr, count); + + dma_do_drain(esp); + if(write) nreg |= DMA_ST_WRITE; - else + else { nreg &= ~(DMA_ST_WRITE); + } + nreg |= DMA_ENABLE; dregs->cond_reg = nreg; dregs->st_addr = addr; @@ -255,7 +335,7 @@ static void dma_mmu_get_scsi_one (struct NCR_ESP *esp, Scsi_Cmnd *sp) { - sp->SCp.have_data_in = dvma_alloc(virt_to_phys(sp->SCp.buffer), + sp->SCp.have_data_in = dvma_map((unsigned long)sp->SCp.buffer, sp->SCp.this_residual); sp->SCp.ptr = (char *)((unsigned long)sp->SCp.have_data_in); } @@ -266,7 +346,7 @@ struct mmu_sglist *sg = (struct mmu_sglist *) sp->SCp.buffer; while (sz >= 0) { - sg[sz].dvma_addr = dvma_alloc(virt_to_phys(sg[sz].addr), sg[sz].len); + sg[sz].dvma_addr = dvma_map((unsigned long)sg[sz].addr, sg[sz].len); sz--; } sp->SCp.ptr=(char *)((unsigned long)sp->SCp.buffer->dvma_address); @@ -274,7 +354,7 @@ static void dma_mmu_release_scsi_one (struct NCR_ESP *esp, Scsi_Cmnd *sp) { - dvma_free(sp->SCp.have_data_in, sp->request_bufflen); + dvma_unmap(sp->SCp.have_data_in); } static void dma_mmu_release_scsi_sgl (struct NCR_ESP *esp, Scsi_Cmnd *sp) @@ -283,7 +363,7 @@ struct mmu_sglist *sg = (struct mmu_sglist *)sp->buffer; while(sz >= 0) { - dvma_free(sg[sz].dvma_addr,sg[sz].len); + dvma_unmap(sg[sz].dvma_addr); sz--; } } diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/u14-34f.c linux/drivers/scsi/u14-34f.c --- v2.4.13/linux/drivers/scsi/u14-34f.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/scsi/u14-34f.c Thu Oct 25 13:53:51 2001 @@ -334,6 +334,7 @@ * the driver sets host->wish_block = TRUE for all ISA boards. */ +#include #include #ifndef LinuxVersionCode @@ -342,9 +343,6 @@ #define MAX_INT_PARAM 10 -#if defined(MODULE) -#include - MODULE_PARM(boot_options, "s"); MODULE_PARM(io_port, "1-" __MODULE_STRING(MAX_INT_PARAM) "i"); MODULE_PARM(linked_comm, "i"); @@ -353,8 +351,6 @@ MODULE_PARM(max_queue_depth, "i"); MODULE_PARM(ext_tran, "i"); MODULE_AUTHOR("Dario Ballabio"); - -#endif #include #include diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/wd33c93.c linux/drivers/scsi/wd33c93.c --- v2.4.13/linux/drivers/scsi/wd33c93.c Tue Dec 5 12:43:48 2000 +++ linux/drivers/scsi/wd33c93.c Thu Oct 25 13:53:51 2001 @@ -175,71 +175,72 @@ -static inline uchar read_wd33c93(wd33c93_regs *regp,uchar reg_num) +static inline uchar read_wd33c93(const wd33c93_regs regs, uchar reg_num) { - regp->SASR = reg_num; + *regs.SASR = reg_num; mb(); - return(regp->SCMD); + return(*regs.SCMD); } -#define READ_AUX_STAT() (regp->SASR) +#define READ_AUX_STAT() (*regs.SASR) -static inline void write_wd33c93(wd33c93_regs *regp,uchar reg_num, uchar value) +static inline void write_wd33c93(const wd33c93_regs regs, uchar reg_num, + uchar value) { - regp->SASR = reg_num; + *regs.SASR = reg_num; mb(); - regp->SCMD = value; + *regs.SCMD = value; mb(); } -static inline void write_wd33c93_cmd(wd33c93_regs *regp, uchar cmd) +static inline void write_wd33c93_cmd(const wd33c93_regs regs, uchar cmd) { - regp->SASR = WD_COMMAND; + *regs.SASR = WD_COMMAND; mb(); - regp->SCMD = cmd; + *regs.SCMD = cmd; mb(); } -static inline uchar read_1_byte(wd33c93_regs *regp) +static inline uchar read_1_byte(const wd33c93_regs regs) { uchar asr; uchar x = 0; - write_wd33c93(regp, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); - write_wd33c93_cmd(regp, WD_CMD_TRANS_INFO|0x80); + write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); + write_wd33c93_cmd(regs, WD_CMD_TRANS_INFO|0x80); do { asr = READ_AUX_STAT(); if (asr & ASR_DBR) - x = read_wd33c93(regp, WD_DATA); + x = read_wd33c93(regs, WD_DATA); } while (!(asr & ASR_INT)); return x; } -static void write_wd33c93_count(wd33c93_regs *regp,unsigned long value) +static void write_wd33c93_count(const wd33c93_regs regs, unsigned long value) { - regp->SASR = WD_TRANSFER_COUNT_MSB; + *regs.SASR = WD_TRANSFER_COUNT_MSB; mb(); - regp->SCMD = value >> 16; - regp->SCMD = value >> 8; - regp->SCMD = value; + *regs.SCMD = value >> 16; + *regs.SCMD = value >> 8; + *regs.SCMD = value; mb(); } -static unsigned long read_wd33c93_count(wd33c93_regs *regp) +static unsigned long read_wd33c93_count(const wd33c93_regs regs) { unsigned long value; - regp->SASR = WD_TRANSFER_COUNT_MSB; + *regs.SASR = WD_TRANSFER_COUNT_MSB; mb(); - value = regp->SCMD << 16; - value |= regp->SCMD << 8; - value |= regp->SCMD; + value = *regs.SCMD << 16; + value |= *regs.SCMD << 8; + value |= *regs.SCMD; mb(); return value; } @@ -423,14 +424,11 @@ */ static void wd33c93_execute (struct Scsi_Host *instance) { -struct WD33C93_hostdata *hostdata; -wd33c93_regs *regp; +struct WD33C93_hostdata *hostdata = (struct WD33C93_hostdata *)instance->hostdata; +const wd33c93_regs regs = hostdata->regs; Scsi_Cmnd *cmd, *prev; int i; - hostdata = (struct WD33C93_hostdata *)instance->hostdata; - regp = hostdata->regp; - DB(DB_EXECUTE,printk("EX(")) if (hostdata->selecting || hostdata->connected) { @@ -479,9 +477,9 @@ */ if (is_dir_out(cmd)) - write_wd33c93(regp, WD_DESTINATION_ID, cmd->target); + write_wd33c93(regs, WD_DESTINATION_ID, cmd->target); else - write_wd33c93(regp, WD_DESTINATION_ID, cmd->target | DSTID_DPD); + write_wd33c93(regs, WD_DESTINATION_ID, cmd->target | DSTID_DPD); /* Now we need to figure out whether or not this command is a good * candidate for disconnect/reselect. We guess to the best of our @@ -537,10 +535,10 @@ no: - write_wd33c93(regp, WD_SOURCE_ID, ((cmd->SCp.phase)?SRCID_ER:0)); + write_wd33c93(regs, WD_SOURCE_ID, ((cmd->SCp.phase)?SRCID_ER:0)); - write_wd33c93(regp, WD_TARGET_LUN, cmd->lun); - write_wd33c93(regp,WD_SYNCHRONOUS_TRANSFER,hostdata->sync_xfer[cmd->target]); + write_wd33c93(regs, WD_TARGET_LUN, cmd->lun); + write_wd33c93(regs, WD_SYNCHRONOUS_TRANSFER,hostdata->sync_xfer[cmd->target]); hostdata->busy[cmd->target] |= (1 << cmd->lun); if ((hostdata->level2 == L2_NONE) || @@ -571,8 +569,8 @@ if (hostdata->sync_stat[cmd->target] == SS_UNSET) hostdata->sync_stat[cmd->target] = SS_FIRST; hostdata->state = S_SELECTING; - write_wd33c93_count(regp,0); /* guarantee a DATA_PHASE interrupt */ - write_wd33c93_cmd(regp, WD_CMD_SEL_ATN); + write_wd33c93_count(regs, 0); /* guarantee a DATA_PHASE interrupt */ + write_wd33c93_cmd(regs, WD_CMD_SEL_ATN); } else { @@ -586,15 +584,15 @@ */ hostdata->connected = cmd; - write_wd33c93(regp, WD_COMMAND_PHASE, 0); + write_wd33c93(regs, WD_COMMAND_PHASE, 0); /* copy command_descriptor_block into WD chip * (take advantage of auto-incrementing) */ - regp->SASR = WD_CDB_1; + *regs.SASR = WD_CDB_1; for (i=0; icmd_len; i++) - regp->SCMD = cmd->cmnd[i]; + *regs.SCMD = cmd->cmnd[i]; /* The wd33c93 only knows about Group 0, 1, and 5 commands when * it's doing a 'select-and-transfer'. To be safe, we write the @@ -602,7 +600,7 @@ * way there won't be problems with vendor-unique, audio, etc. */ - write_wd33c93(regp, WD_OWN_ID, cmd->cmd_len); + write_wd33c93(regs, WD_OWN_ID, cmd->cmd_len); /* When doing a non-disconnect command with DMA, we can save * ourselves a DATA phase interrupt later by setting everything @@ -612,18 +610,18 @@ if ((cmd->SCp.phase == 0) && (hostdata->no_dma == 0)) { if (hostdata->dma_setup(cmd, (is_dir_out(cmd))?DATA_OUT_DIR:DATA_IN_DIR)) - write_wd33c93_count(regp,0); /* guarantee a DATA_PHASE interrupt */ + write_wd33c93_count(regs, 0); /* guarantee a DATA_PHASE interrupt */ else { - write_wd33c93_count(regp, cmd->SCp.this_residual); - write_wd33c93(regp,WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_DMA); + write_wd33c93_count(regs, cmd->SCp.this_residual); + write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_DMA); hostdata->dma = D_DMA_RUNNING; } } else - write_wd33c93_count(regp,0); /* guarantee a DATA_PHASE interrupt */ + write_wd33c93_count(regs, 0); /* guarantee a DATA_PHASE interrupt */ hostdata->state = S_RUNNING_LEVEL2; - write_wd33c93_cmd(regp, WD_CMD_SEL_ATN_XFER); + write_wd33c93_cmd(regs, WD_CMD_SEL_ATN_XFER); } /* @@ -638,28 +636,28 @@ -static void transfer_pio(wd33c93_regs *regp, uchar *buf, int cnt, - int data_in_dir, struct WD33C93_hostdata *hostdata) +static void transfer_pio(const wd33c93_regs regs, uchar *buf, int cnt, + int data_in_dir, struct WD33C93_hostdata *hostdata) { uchar asr; DB(DB_TRANSFER,printk("(%p,%d,%s:",buf,cnt,data_in_dir?"in":"out")) - write_wd33c93(regp, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); - write_wd33c93_count(regp,cnt); - write_wd33c93_cmd(regp, WD_CMD_TRANS_INFO); + write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); + write_wd33c93_count(regs, cnt); + write_wd33c93_cmd(regs, WD_CMD_TRANS_INFO); if (data_in_dir) { do { asr = READ_AUX_STAT(); if (asr & ASR_DBR) - *buf++ = read_wd33c93(regp, WD_DATA); + *buf++ = read_wd33c93(regs, WD_DATA); } while (!(asr & ASR_INT)); } else { do { asr = READ_AUX_STAT(); if (asr & ASR_DBR) - write_wd33c93(regp, WD_DATA, *buf++); + write_wd33c93(regs, WD_DATA, *buf++); } while (!(asr & ASR_INT)); } @@ -674,7 +672,8 @@ -static void transfer_bytes(wd33c93_regs *regp, Scsi_Cmnd *cmd, int data_in_dir) +static void transfer_bytes(const wd33c93_regs regs, Scsi_Cmnd *cmd, + int data_in_dir) { struct WD33C93_hostdata *hostdata; unsigned long length; @@ -696,7 +695,7 @@ cmd->SCp.ptr = cmd->SCp.buffer->address; } - write_wd33c93(regp,WD_SYNCHRONOUS_TRANSFER,hostdata->sync_xfer[cmd->target]); + write_wd33c93(regs, WD_SYNCHRONOUS_TRANSFER,hostdata->sync_xfer[cmd->target]); /* 'hostdata->no_dma' is TRUE if we don't even want to try DMA. * Update 'this_residual' and 'ptr' after 'transfer_pio()' returns. @@ -714,10 +713,10 @@ #ifdef PROC_STATISTICS hostdata->pio_cnt++; #endif - transfer_pio(regp, (uchar *)cmd->SCp.ptr, cmd->SCp.this_residual, + transfer_pio(regs, (uchar *)cmd->SCp.ptr, cmd->SCp.this_residual, data_in_dir, hostdata); length = cmd->SCp.this_residual; - cmd->SCp.this_residual = read_wd33c93_count(regp); + cmd->SCp.this_residual = read_wd33c93_count(regs); cmd->SCp.ptr += (length - cmd->SCp.this_residual); } @@ -734,17 +733,17 @@ #ifdef PROC_STATISTICS hostdata->dma_cnt++; #endif - write_wd33c93(regp, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_DMA); - write_wd33c93_count(regp,cmd->SCp.this_residual); + write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_DMA); + write_wd33c93_count(regs, cmd->SCp.this_residual); if ((hostdata->level2 >= L2_DATA) || (hostdata->level2 == L2_BASIC && cmd->SCp.phase == 0)) { - write_wd33c93(regp, WD_COMMAND_PHASE, 0x45); - write_wd33c93_cmd(regp, WD_CMD_SEL_ATN_XFER); + write_wd33c93(regs, WD_COMMAND_PHASE, 0x45); + write_wd33c93_cmd(regs, WD_CMD_SEL_ATN_XFER); hostdata->state = S_RUNNING_LEVEL2; } else - write_wd33c93_cmd(regp, WD_CMD_TRANS_INFO); + write_wd33c93_cmd(regs, WD_CMD_TRANS_INFO); hostdata->dma = D_DMA_RUNNING; } @@ -754,15 +753,12 @@ void wd33c93_intr (struct Scsi_Host *instance) { -struct WD33C93_hostdata *hostdata; +struct WD33C93_hostdata *hostdata = (struct WD33C93_hostdata *)instance->hostdata; +const wd33c93_regs regs = hostdata->regs; Scsi_Cmnd *patch, *cmd; -wd33c93_regs *regp; uchar asr, sr, phs, id, lun, *ucp, msg; unsigned long length, flags; - hostdata = (struct WD33C93_hostdata *)instance->hostdata; - regp = hostdata->regp; - asr = READ_AUX_STAT(); if (!(asr & ASR_INT) || (asr & ASR_BSY)) return; @@ -774,8 +770,8 @@ #endif cmd = (Scsi_Cmnd *)hostdata->connected; /* assume we're connected */ - sr = read_wd33c93(regp, WD_SCSI_STATUS); /* clear the interrupt */ - phs = read_wd33c93(regp, WD_COMMAND_PHASE); + sr = read_wd33c93(regs, WD_SCSI_STATUS); /* clear the interrupt */ + phs = read_wd33c93(regs, WD_COMMAND_PHASE); DB(DB_INTR,printk("{%02x:%02x-",asr,sr)) @@ -799,7 +795,7 @@ hostdata->dma_stop(cmd->host, cmd, 1); hostdata->dma = D_DMA_OFF; length = cmd->SCp.this_residual; - cmd->SCp.this_residual = read_wd33c93_count(regp); + cmd->SCp.this_residual = read_wd33c93_count(regs); cmd->SCp.ptr += (length - cmd->SCp.this_residual); DB(DB_TRANSFER,printk("%p/%d]",cmd->SCp.ptr,cmd->SCp.this_residual)) } @@ -894,7 +890,7 @@ case CSR_UNEXP |PHS_DATA_IN: case CSR_SRV_REQ |PHS_DATA_IN: DB(DB_INTR,printk("IN-%d.%d",cmd->SCp.this_residual,cmd->SCp.buffers_residual)) - transfer_bytes(regp, cmd, DATA_IN_DIR); + transfer_bytes(regs, cmd, DATA_IN_DIR); if (hostdata->state != S_RUNNING_LEVEL2) hostdata->state = S_CONNECTED; break; @@ -904,7 +900,7 @@ case CSR_UNEXP |PHS_DATA_OUT: case CSR_SRV_REQ |PHS_DATA_OUT: DB(DB_INTR,printk("OUT-%d.%d",cmd->SCp.this_residual,cmd->SCp.buffers_residual)) - transfer_bytes(regp, cmd, DATA_OUT_DIR); + transfer_bytes(regs, cmd, DATA_OUT_DIR); if (hostdata->state != S_RUNNING_LEVEL2) hostdata->state = S_CONNECTED; break; @@ -916,7 +912,7 @@ case CSR_UNEXP |PHS_COMMAND: case CSR_SRV_REQ |PHS_COMMAND: DB(DB_INTR,printk("CMND-%02x,%ld",cmd->cmnd[0],cmd->pid)) - transfer_pio(regp, cmd->cmnd, cmd->cmd_len, DATA_OUT_DIR, hostdata); + transfer_pio(regs, cmd->cmnd, cmd->cmd_len, DATA_OUT_DIR, hostdata); hostdata->state = S_CONNECTED; break; @@ -926,13 +922,13 @@ case CSR_SRV_REQ |PHS_STATUS: DB(DB_INTR,printk("STATUS=")) - cmd->SCp.Status = read_1_byte(regp); + cmd->SCp.Status = read_1_byte(regs); DB(DB_INTR,printk("%02x",cmd->SCp.Status)) if (hostdata->level2 >= L2_BASIC) { - sr = read_wd33c93(regp, WD_SCSI_STATUS); /* clear interrupt */ + sr = read_wd33c93(regs, WD_SCSI_STATUS); /* clear interrupt */ hostdata->state = S_RUNNING_LEVEL2; - write_wd33c93(regp, WD_COMMAND_PHASE, 0x50); - write_wd33c93_cmd(regp, WD_CMD_SEL_ATN_XFER); + write_wd33c93(regs, WD_COMMAND_PHASE, 0x50); + write_wd33c93_cmd(regs, WD_CMD_SEL_ATN_XFER); } else { hostdata->state = S_CONNECTED; @@ -945,8 +941,8 @@ case CSR_SRV_REQ |PHS_MESS_IN: DB(DB_INTR,printk("MSG_IN=")) - msg = read_1_byte(regp); - sr = read_wd33c93(regp, WD_SCSI_STATUS); /* clear interrupt */ + msg = read_1_byte(regs); + sr = read_wd33c93(regs, WD_SCSI_STATUS); /* clear interrupt */ hostdata->incoming_msg[hostdata->incoming_ptr] = msg; if (hostdata->incoming_msg[0] == EXTENDED_MESSAGE) @@ -959,25 +955,25 @@ case COMMAND_COMPLETE: DB(DB_INTR,printk("CCMP-%ld",cmd->pid)) - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_PRE_CMP_DISC; break; case SAVE_POINTERS: DB(DB_INTR,printk("SDP")) - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_CONNECTED; break; case RESTORE_POINTERS: DB(DB_INTR,printk("RDP")) if (hostdata->level2 >= L2_BASIC) { - write_wd33c93(regp, WD_COMMAND_PHASE, 0x45); - write_wd33c93_cmd(regp, WD_CMD_SEL_ATN_XFER); + write_wd33c93(regs, WD_COMMAND_PHASE, 0x45); + write_wd33c93_cmd(regs, WD_CMD_SEL_ATN_XFER); hostdata->state = S_RUNNING_LEVEL2; } else { - write_wd33c93_cmd(regp, WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_CONNECTED; } break; @@ -985,7 +981,7 @@ case DISCONNECT: DB(DB_INTR,printk("DIS")) cmd->device->disconnect = 1; - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_PRE_TMP_DISC; break; @@ -996,7 +992,7 @@ #endif if (hostdata->sync_stat[cmd->target] == SS_WAITING) hostdata->sync_stat[cmd->target] = SS_SET; - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_CONNECTED; break; @@ -1027,7 +1023,7 @@ * specifically ask for sync transfers, we won't do any. */ - write_wd33c93_cmd(regp,WD_CMD_ASSERT_ATN); /* want MESS_OUT */ + write_wd33c93_cmd(regs, WD_CMD_ASSERT_ATN); /* want MESS_OUT */ hostdata->outgoing_msg[0] = EXTENDED_MESSAGE; hostdata->outgoing_msg[1] = 3; hostdata->outgoing_msg[2] = EXTENDED_SDTR; @@ -1044,26 +1040,26 @@ printk("sync_xfer=%02x",hostdata->sync_xfer[cmd->target]); #endif hostdata->sync_stat[cmd->target] = SS_SET; - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_CONNECTED; break; case EXTENDED_WDTR: - write_wd33c93_cmd(regp,WD_CMD_ASSERT_ATN); /* want MESS_OUT */ + write_wd33c93_cmd(regs, WD_CMD_ASSERT_ATN); /* want MESS_OUT */ printk("sending WDTR "); hostdata->outgoing_msg[0] = EXTENDED_MESSAGE; hostdata->outgoing_msg[1] = 2; hostdata->outgoing_msg[2] = EXTENDED_WDTR; hostdata->outgoing_msg[3] = 0; /* 8 bit transfer width */ hostdata->outgoing_len = 4; - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_CONNECTED; break; default: - write_wd33c93_cmd(regp,WD_CMD_ASSERT_ATN); /* want MESS_OUT */ + write_wd33c93_cmd(regs, WD_CMD_ASSERT_ATN); /* want MESS_OUT */ printk("Rejecting Unknown Extended Message(%02x). ",ucp[2]); hostdata->outgoing_msg[0] = MESSAGE_REJECT; hostdata->outgoing_len = 1; - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_CONNECTED; break; } @@ -1074,17 +1070,17 @@ else { hostdata->incoming_ptr++; - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_CONNECTED; } break; default: printk("Rejecting Unknown Message(%02x) ",msg); - write_wd33c93_cmd(regp,WD_CMD_ASSERT_ATN); /* want MESS_OUT */ + write_wd33c93_cmd(regs, WD_CMD_ASSERT_ATN); /* want MESS_OUT */ hostdata->outgoing_msg[0] = MESSAGE_REJECT; hostdata->outgoing_len = 1; - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); hostdata->state = S_CONNECTED; } restore_flags(flags); @@ -1099,11 +1095,11 @@ * have been turned off for the command that just completed. */ - write_wd33c93(regp,WD_SOURCE_ID, SRCID_ER); + write_wd33c93(regs, WD_SOURCE_ID, SRCID_ER); if (phs == 0x60) { DB(DB_INTR,printk("SX-DONE-%ld",cmd->pid)) cmd->SCp.Message = COMMAND_COMPLETE; - lun = read_wd33c93(regp, WD_TARGET_LUN); + lun = read_wd33c93(regs, WD_TARGET_LUN); DB(DB_INTR,printk(":%d.%d",cmd->SCp.Status,lun)) hostdata->connected = NULL; hostdata->busy[cmd->target] &= ~(1 << cmd->lun); @@ -1133,8 +1129,8 @@ case CSR_SDP: DB(DB_INTR,printk("SDP")) hostdata->state = S_RUNNING_LEVEL2; - write_wd33c93(regp, WD_COMMAND_PHASE, 0x41); - write_wd33c93_cmd(regp, WD_CMD_SEL_ATN_XFER); + write_wd33c93(regs, WD_COMMAND_PHASE, 0x41); + write_wd33c93_cmd(regs, WD_CMD_SEL_ATN_XFER); break; @@ -1160,7 +1156,7 @@ hostdata->outgoing_len = 1; hostdata->outgoing_msg[0] = NOP; } - transfer_pio(regp, hostdata->outgoing_msg, hostdata->outgoing_len, + transfer_pio(regs, hostdata->outgoing_msg, hostdata->outgoing_len, DATA_OUT_DIR, hostdata); DB(DB_INTR,printk("%02x",hostdata->outgoing_msg[0])) hostdata->outgoing_len = 0; @@ -1182,7 +1178,7 @@ * have been turned off for the command that just completed. */ - write_wd33c93(regp,WD_SOURCE_ID, SRCID_ER); + write_wd33c93(regs, WD_SOURCE_ID, SRCID_ER); if (cmd == NULL) { printk(" - Already disconnected! "); hostdata->state = S_UNCONNECTED; @@ -1213,7 +1209,7 @@ * have been turned off for the command that just completed. */ - write_wd33c93(regp,WD_SOURCE_ID, SRCID_ER); + write_wd33c93(regs, WD_SOURCE_ID, SRCID_ER); DB(DB_INTR,printk("DISC-%ld",cmd->pid)) if (cmd == NULL) { printk(" - Already disconnected! "); @@ -1298,7 +1294,7 @@ /* OK - find out which device reselected us. */ - id = read_wd33c93(regp, WD_SOURCE_ID); + id = read_wd33c93(regs, WD_SOURCE_ID); id &= SRCID_MASK; /* and extract the lun from the ID message. (Note that we don't @@ -1307,9 +1303,9 @@ */ if (sr == CSR_RESEL_AM) { - lun = read_wd33c93(regp, WD_DATA); + lun = read_wd33c93(regs, WD_DATA); if (hostdata->level2 < L2_RESELECT) - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); lun &= 7; } else { @@ -1325,12 +1321,12 @@ } else { /* Verify this is a change to MSG_IN and read the message */ - sr = read_wd33c93(regp, WD_SCSI_STATUS); + sr = read_wd33c93(regs, WD_SCSI_STATUS); if (sr == (CSR_ABORT | PHS_MESS_IN) || sr == (CSR_UNEXP | PHS_MESS_IN) || sr == (CSR_SRV_REQ | PHS_MESS_IN)) { /* Got MSG_IN, grab target LUN */ - lun = read_1_byte(regp); + lun = read_1_byte(regs); /* Now we expect a 'paused with ACK asserted' int.. */ asr = READ_AUX_STAT(); if (!(asr & ASR_INT)) { @@ -1340,12 +1336,12 @@ printk("wd33c93: No int after LUN on RESEL (%02x)\n", asr); } - sr = read_wd33c93(regp, WD_SCSI_STATUS); + sr = read_wd33c93(regs, WD_SCSI_STATUS); if (sr != CSR_MSGIN) printk("wd33c93: Not paused with ACK on RESEL (%02x)\n", sr); lun &= 7; - write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK); + write_wd33c93_cmd(regs, WD_CMD_NEGATE_ACK); } else { printk("wd33c93: Not MSG_IN on reselect (%02x)\n", sr); @@ -1386,13 +1382,13 @@ */ if (is_dir_out(cmd)) - write_wd33c93(regp, WD_DESTINATION_ID, cmd->target); + write_wd33c93(regs, WD_DESTINATION_ID, cmd->target); else - write_wd33c93(regp, WD_DESTINATION_ID, cmd->target | DSTID_DPD); + write_wd33c93(regs, WD_DESTINATION_ID, cmd->target | DSTID_DPD); if (hostdata->level2 >= L2_RESELECT) { - write_wd33c93_count(regp, 0); /* we want a DATA_PHASE interrupt */ - write_wd33c93(regp, WD_COMMAND_PHASE, 0x45); - write_wd33c93_cmd(regp, WD_CMD_SEL_ATN_XFER); + write_wd33c93_count(regs, 0); /* we want a DATA_PHASE interrupt */ + write_wd33c93(regs, WD_COMMAND_PHASE, 0x45); + write_wd33c93_cmd(regs, WD_CMD_SEL_ATN_XFER); hostdata->state = S_RUNNING_LEVEL2; } else @@ -1413,36 +1409,33 @@ static void reset_wd33c93(struct Scsi_Host *instance) { -struct WD33C93_hostdata *hostdata; -wd33c93_regs *regp; +struct WD33C93_hostdata *hostdata = (struct WD33C93_hostdata *)instance->hostdata; +const wd33c93_regs regs = hostdata->regs; uchar sr; - hostdata = (struct WD33C93_hostdata *)instance->hostdata; - regp = hostdata->regp; - - write_wd33c93(regp, WD_OWN_ID, OWNID_EAF | OWNID_RAF | + write_wd33c93(regs, WD_OWN_ID, OWNID_EAF | OWNID_RAF | instance->this_id | hostdata->clock_freq); - write_wd33c93(regp, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); - write_wd33c93(regp, WD_SYNCHRONOUS_TRANSFER, + write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); + write_wd33c93(regs, WD_SYNCHRONOUS_TRANSFER, calc_sync_xfer(hostdata->default_sx_per/4,DEFAULT_SX_OFF)); - write_wd33c93(regp, WD_COMMAND, WD_CMD_RESET); + write_wd33c93(regs, WD_COMMAND, WD_CMD_RESET); #ifdef CONFIG_MVME147_SCSI udelay(25); /* The old wd33c93 on MVME147 needs this, at least */ #endif while (!(READ_AUX_STAT() & ASR_INT)) ; - sr = read_wd33c93(regp, WD_SCSI_STATUS); + sr = read_wd33c93(regs, WD_SCSI_STATUS); - hostdata->microcode = read_wd33c93(regp, WD_CDB_1); + hostdata->microcode = read_wd33c93(regs, WD_CDB_1); if (sr == 0x00) hostdata->chip = C_WD33C93; else if (sr == 0x01) { - write_wd33c93(regp, WD_QUEUE_TAG, 0xa5); /* any random number */ - sr = read_wd33c93(regp, WD_QUEUE_TAG); + write_wd33c93(regs, WD_QUEUE_TAG, 0xa5); /* any random number */ + sr = read_wd33c93(regs, WD_QUEUE_TAG); if (sr == 0xa5) { hostdata->chip = C_WD33C93B; - write_wd33c93(regp, WD_QUEUE_TAG, 0); + write_wd33c93(regs, WD_QUEUE_TAG, 0); } else hostdata->chip = C_WD33C93A; @@ -1450,8 +1443,8 @@ else hostdata->chip = C_UNKNOWN_CHIP; - write_wd33c93(regp, WD_TIMEOUT_PERIOD, TIMEOUT_PERIOD_VALUE); - write_wd33c93(regp, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); + write_wd33c93(regs, WD_TIMEOUT_PERIOD, TIMEOUT_PERIOD_VALUE); + write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); } @@ -1495,14 +1488,14 @@ { struct Scsi_Host *instance; struct WD33C93_hostdata *hostdata; -wd33c93_regs *regp; +wd33c93_regs regs; Scsi_Cmnd *tmp, *prev; disable_irq(cmd->host->irq); instance = cmd->host; hostdata = (struct WD33C93_hostdata *)instance->hostdata; - regp = hostdata->regp; + regs = hostdata->regs; /* * Case 1 : If the command hasn't been issued yet, we simply remove it @@ -1554,8 +1547,8 @@ } printk("sending wd33c93 ABORT command - "); - write_wd33c93(regp, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); - write_wd33c93_cmd(regp, WD_CMD_ABORT); + write_wd33c93(regs, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_POLLED); + write_wd33c93_cmd(regs, WD_CMD_ABORT); /* Now we have to attempt to flush out the FIFO... */ @@ -1564,11 +1557,11 @@ do { asr = READ_AUX_STAT(); if (asr & ASR_DBR) - read_wd33c93(regp, WD_DATA); + read_wd33c93(regs, WD_DATA); } while (!(asr & ASR_INT) && timeout-- > 0); - sr = read_wd33c93(regp, WD_SCSI_STATUS); + sr = read_wd33c93(regs, WD_SCSI_STATUS); printk("asr=%02x, sr=%02x, %ld bytes un-transferred (timeout=%ld) - ", - asr, sr, read_wd33c93_count(regp), timeout); + asr, sr, read_wd33c93_count(regs), timeout); /* * Abort command processed. @@ -1577,13 +1570,13 @@ */ printk("sending wd33c93 DISCONNECT command - "); - write_wd33c93_cmd(regp, WD_CMD_DISCONNECT); + write_wd33c93_cmd(regs, WD_CMD_DISCONNECT); timeout = 1000000; asr = READ_AUX_STAT(); while ((asr & ASR_CIP) && timeout-- > 0) asr = READ_AUX_STAT(); - sr = read_wd33c93(regp, WD_SCSI_STATUS); + sr = read_wd33c93(regs, WD_SCSI_STATUS); printk("asr=%02x, sr=%02x.",asr,sr); hostdata->busy[cmd->target] &= ~(1 << cmd->lun); @@ -1733,8 +1726,8 @@ -void wd33c93_init (struct Scsi_Host *instance, wd33c93_regs *regs, - dma_setup_t setup, dma_stop_t stop, int clock_freq) +void wd33c93_init(struct Scsi_Host *instance, const wd33c93_regs regs, + dma_setup_t setup, dma_stop_t stop, int clock_freq) { struct WD33C93_hostdata *hostdata; int i; @@ -1747,7 +1740,7 @@ hostdata = (struct WD33C93_hostdata *)instance->hostdata; - hostdata->regp = regs; + hostdata->regs = regs; hostdata->clock_freq = clock_freq; hostdata->dma_setup = setup; hostdata->dma_stop = stop; @@ -2036,8 +2029,8 @@ #ifdef MODULE int init_module(void) { return 0; } void cleanup_module(void) {} +#endif void wd33c93_release(void) { -MOD_DEC_USE_COUNT; + MOD_DEC_USE_COUNT; } -#endif diff -u --recursive --new-file v2.4.13/linux/drivers/scsi/wd33c93.h linux/drivers/scsi/wd33c93.h --- v2.4.13/linux/drivers/scsi/wd33c93.h Mon Nov 27 17:57:34 2000 +++ linux/drivers/scsi/wd33c93.h Thu Oct 25 13:53:51 2001 @@ -189,14 +189,8 @@ /* This is what the 3393 chip looks like to us */ typedef struct { - volatile unsigned char SASR; -#if !defined(CONFIG_MVME147_SCSI) - char pad; -#endif -#ifdef CONFIG_SGI_IP22 - char pad2,pad3; -#endif - volatile unsigned char SCMD; + volatile unsigned char *SASR; + volatile unsigned char *SCMD; } wd33c93_regs; @@ -225,7 +219,7 @@ struct WD33C93_hostdata { struct Scsi_Host *next; - wd33c93_regs *regp; + wd33c93_regs regs; uchar clock_freq; uchar chip; /* what kind of wd33c93? */ uchar microcode; /* microcode rev */ @@ -336,7 +330,7 @@ #define PR_STOP 1<<7 -void wd33c93_init (struct Scsi_Host *instance, wd33c93_regs *regs, +void wd33c93_init (struct Scsi_Host *instance, const wd33c93_regs regs, dma_setup_t setup, dma_stop_t stop, int clock_freq); int wd33c93_abort (Scsi_Cmnd *cmd); int wd33c93_queuecommand (Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *)); diff -u --recursive --new-file v2.4.13/linux/drivers/sound/dmasound/dmasound_atari.c linux/drivers/sound/dmasound/dmasound_atari.c --- v2.4.13/linux/drivers/sound/dmasound/dmasound_atari.c Sun Sep 23 11:40:59 2001 +++ linux/drivers/sound/dmasound/dmasound_atari.c Thu Oct 25 13:53:52 2001 @@ -1559,3 +1559,4 @@ module_init(dmasound_atari_init); module_exit(dmasound_atari_cleanup); +MODULE_LICENSE("GPL"); diff -u --recursive --new-file v2.4.13/linux/drivers/sound/dmasound/dmasound_awacs.c linux/drivers/sound/dmasound/dmasound_awacs.c --- v2.4.13/linux/drivers/sound/dmasound/dmasound_awacs.c Sun Sep 23 11:40:59 2001 +++ linux/drivers/sound/dmasound/dmasound_awacs.c Thu Oct 25 13:53:52 2001 @@ -2180,3 +2180,4 @@ module_init(dmasound_awacs_init); module_exit(dmasound_awacs_cleanup); +MODULE_LICENSE("GPL"); diff -u --recursive --new-file v2.4.13/linux/drivers/sound/dmasound/dmasound_core.c linux/drivers/sound/dmasound/dmasound_core.c --- v2.4.13/linux/drivers/sound/dmasound/dmasound_core.c Mon Aug 27 12:41:45 2001 +++ linux/drivers/sound/dmasound/dmasound_core.c Thu Oct 25 13:53:52 2001 @@ -135,6 +135,7 @@ MODULE_PARM(writeBufSize, "i"); MODULE_PARM(numReadBufs, "i"); MODULE_PARM(readBufSize, "i"); +MODULE_LICENSE("GPL"); #ifdef MODULE static int sq_unit = -1; diff -u --recursive --new-file v2.4.13/linux/drivers/sound/dmasound/dmasound_paula.c linux/drivers/sound/dmasound/dmasound_paula.c --- v2.4.13/linux/drivers/sound/dmasound/dmasound_paula.c Sun Sep 23 11:40:59 2001 +++ linux/drivers/sound/dmasound/dmasound_paula.c Thu Oct 25 13:53:52 2001 @@ -720,3 +720,4 @@ module_init(dmasound_paula_init); module_exit(dmasound_paula_cleanup); +MODULE_LICENSE("GPL"); diff -u --recursive --new-file v2.4.13/linux/drivers/sound/dmasound/dmasound_q40.c linux/drivers/sound/dmasound/dmasound_q40.c --- v2.4.13/linux/drivers/sound/dmasound/dmasound_q40.c Sun Sep 23 11:40:59 2001 +++ linux/drivers/sound/dmasound/dmasound_q40.c Thu Oct 25 13:53:52 2001 @@ -585,3 +585,4 @@ module_init(dmasound_q40_init); module_exit(dmasound_q40_cleanup); +MODULE_LICENSE("GPL"); diff -u --recursive --new-file v2.4.13/linux/drivers/sound/emu10k1/hwaccess.h linux/drivers/sound/emu10k1/hwaccess.h --- v2.4.13/linux/drivers/sound/emu10k1/hwaccess.h Tue Oct 9 17:06:52 2001 +++ linux/drivers/sound/emu10k1/hwaccess.h Thu Oct 25 14:01:57 2001 @@ -37,6 +37,9 @@ #include #include #include +#include +#include +#include #include "efxmgr.h" #include "passthrough.h" diff -u --recursive --new-file v2.4.13/linux/drivers/sound/i810_audio.c linux/drivers/sound/i810_audio.c --- v2.4.13/linux/drivers/sound/i810_audio.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/sound/i810_audio.c Thu Oct 25 13:53:52 2001 @@ -247,6 +247,12 @@ MODULE_DEVICE_TABLE (pci, i810_pci_tbl); +#ifdef CONFIG_PM +#define PM_SUSPENDED(card) (card->pm_suspended) +#else +#define PM_SUSPENDED(card) (0) +#endif + /* "software" or virtual channel, an instance of opened /dev/dsp */ struct i810_state { unsigned int magic; @@ -262,6 +268,9 @@ /* virtual channel number */ int virt; +#ifdef CONFIG_PM + unsigned int pm_saved_dac_rate,pm_saved_adc_rate; +#endif struct dmabuf { /* wave sample stuff */ unsigned int rate; @@ -322,7 +331,11 @@ /* PCI device stuff */ struct pci_dev * pci_dev; u16 pci_id; - +#ifdef CONFIG_PM + u16 pm_suspended; + u32 pm_save_state[64/sizeof(u32)]; + int pm_saved_mixer_settings[SOUND_MIXER_NRDEVICES][NR_AC97]; +#endif /* soundcore stuff */ int dev_audio; @@ -451,7 +464,7 @@ if(!(state->card->ac97_features & 4)) { #ifdef DEBUG - printk(KERN_WARNING "i810_audio: S/PDIF transmitter not avalible.\n"); + printk(KERN_WARNING "i810_audio: S/PDIF transmitter not available.\n"); #endif state->card->ac97_status &= ~SPDIF_ON; } else { @@ -572,6 +585,10 @@ if(!(state->card->ac97_features&0x0001)) { dmabuf->rate = clocking; +#ifdef DEBUG + printk("Asked for %d Hz, but ac97_features says we only do %dHz. Sorry!\n", + rate,clocking); +#endif return clocking; } @@ -594,11 +611,11 @@ if(new_rate != rate) { dmabuf->rate = (new_rate * 48000)/clocking; - rate = new_rate; } #ifdef DEBUG - printk("i810_audio: called i810_set_dac_rate : rate = %d/%d\n", dmabuf->rate, rate); + printk("i810_audio: called i810_set_dac_rate : asked for %d, got %d\n", rate, dmabuf->rate); #endif + rate = new_rate; return dmabuf->rate; } @@ -1066,7 +1083,7 @@ for (;;) { /* It seems that we have to set the current state to TASK_INTERRUPTIBLE every time to make the process really go to sleep */ - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); spin_lock_irqsave(&state->card->lock, flags); i810_update_ptr(state); @@ -1085,7 +1102,7 @@ if (nonblock) { remove_wait_queue(&dmabuf->wait, &wait); - current->state = TASK_RUNNING; + set_current_state(TASK_RUNNING); return -EBUSY; } @@ -1099,7 +1116,7 @@ stop_dac(state); synchronize_irq(); remove_wait_queue(&dmabuf->wait, &wait); - current->state = TASK_RUNNING; + set_current_state(TASK_RUNNING); if (signal_pending(current)) return -ERESTARTSYS; @@ -1201,16 +1218,20 @@ spin_unlock(&card->lock); } -/* in this loop, dmabuf.count signifies the amount of data that is waiting to be copied to - the user's buffer. it is filled by the dma machine and drained by this loop. */ +/* in this loop, dmabuf.count signifies the amount of data that is + waiting to be copied to the user's buffer. It is filled by the dma + machine and drained by this loop. */ + static ssize_t i810_read(struct file *file, char *buffer, size_t count, loff_t *ppos) { struct i810_state *state = (struct i810_state *)file->private_data; + struct i810_card *card=state ? state->card : 0; struct dmabuf *dmabuf = &state->dmabuf; ssize_t ret; unsigned long flags; unsigned int swptr; int cnt; + DECLARE_WAITQUEUE(waita, current); #ifdef DEBUG2 printk("i810_audio: i810_read called, count = %d\n", count); @@ -1224,7 +1245,7 @@ return -ENODEV; if (!dmabuf->read_channel) { dmabuf->ready = 0; - dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card); + dmabuf->read_channel = card->alloc_rec_pcm_channel(card); if (!dmabuf->read_channel) { return -EBUSY; } @@ -1236,8 +1257,19 @@ dmabuf->trigger &= ~PCM_ENABLE_OUTPUT; ret = 0; + add_wait_queue(&dmabuf->wait, &waita); while (count > 0) { - spin_lock_irqsave(&state->card->lock, flags); + spin_lock_irqsave(&card->lock, flags); + if (PM_SUSPENDED(card)) { + spin_unlock_irqrestore(&card->lock, flags); + set_current_state(TASK_INTERRUPTIBLE); + schedule(); + if (signal_pending(current)) { + if (!ret) ret = -EAGAIN; + break; + } + continue; + } swptr = dmabuf->swptr; if (dmabuf->count > dmabuf->dmasize) { dmabuf->count = dmabuf->dmasize; @@ -1246,7 +1278,7 @@ // this is to make the copy_to_user simpler below if(cnt > (dmabuf->dmasize - swptr)) cnt = dmabuf->dmasize - swptr; - spin_unlock_irqrestore(&state->card->lock, flags); + spin_unlock_irqrestore(&card->lock, flags); if (cnt > count) cnt = count; @@ -1290,15 +1322,20 @@ if (copy_to_user(buffer, dmabuf->rawbuf + swptr, cnt)) { if (!ret) ret = -EFAULT; - return ret; + goto done; } swptr = (swptr + cnt) % dmabuf->dmasize; - spin_lock_irqsave(&state->card->lock, flags); + spin_lock_irqsave(&card->lock, flags); + + if (PM_SUSPENDED(card)) { + spin_unlock_irqrestore(&card->lock, flags); + continue; + } dmabuf->swptr = swptr; dmabuf->count -= cnt; - spin_unlock_irqrestore(&state->card->lock, flags); + spin_unlock_irqrestore(&card->lock, flags); count -= cnt; buffer += cnt; @@ -1307,6 +1344,10 @@ i810_update_lvi(state,1); if(!(dmabuf->enable & ADC_RUNNING)) start_adc(state); + done: + set_current_state(TASK_RUNNING); + remove_wait_queue(&dmabuf->wait, &waita); + return ret; } @@ -1315,11 +1356,13 @@ static ssize_t i810_write(struct file *file, const char *buffer, size_t count, loff_t *ppos) { struct i810_state *state = (struct i810_state *)file->private_data; + struct i810_card *card=state ? state->card : 0; struct dmabuf *dmabuf = &state->dmabuf; ssize_t ret; unsigned long flags; unsigned int swptr = 0; int cnt, x; + DECLARE_WAITQUEUE(waita, current); #ifdef DEBUG2 printk("i810_audio: i810_write called, count = %d\n", count); @@ -1333,7 +1376,7 @@ return -ENODEV; if (!dmabuf->write_channel) { dmabuf->ready = 0; - dmabuf->write_channel = state->card->alloc_pcm_channel(state->card); + dmabuf->write_channel = card->alloc_pcm_channel(card); if(!dmabuf->write_channel) return -EBUSY; } @@ -1344,8 +1387,20 @@ dmabuf->trigger &= ~PCM_ENABLE_INPUT; ret = 0; + add_wait_queue(&dmabuf->wait, &waita); while (count > 0) { spin_lock_irqsave(&state->card->lock, flags); + if (PM_SUSPENDED(card)) { + spin_unlock_irqrestore(&card->lock, flags); + set_current_state(TASK_INTERRUPTIBLE); + schedule(); + if (signal_pending(current)) { + if (!ret) ret = -EAGAIN; + break; + } + continue; + } + swptr = dmabuf->swptr; if (dmabuf->count < 0) { dmabuf->count = 0; @@ -1376,7 +1431,7 @@ i810_update_lvi(state,0); if (file->f_flags & O_NONBLOCK) { if (!ret) ret = -EAGAIN; - return ret; + goto ret; } /* Not strictly correct but works */ tmo = (dmabuf->dmasize * HZ) / (dmabuf->rate * 4); @@ -1400,25 +1455,30 @@ } if (signal_pending(current)) { if (!ret) ret = -ERESTARTSYS; - return ret; + goto ret; } continue; } if (copy_from_user(dmabuf->rawbuf+swptr,buffer,cnt)) { if (!ret) ret = -EFAULT; - return ret; + goto ret; } swptr = (swptr + cnt) % dmabuf->dmasize; spin_lock_irqsave(&state->card->lock, flags); + if (PM_SUSPENDED(card)) { + spin_unlock_irqrestore(&card->lock, flags); + continue; + } + dmabuf->swptr = swptr; dmabuf->count += cnt; - spin_unlock_irqrestore(&state->card->lock, flags); count -= cnt; buffer += cnt; ret += cnt; + spin_unlock_irqrestore(&state->card->lock, flags); } if (swptr % dmabuf->fragsize) { x = dmabuf->fragsize - (swptr % dmabuf->fragsize); @@ -1427,6 +1487,9 @@ i810_update_lvi(state,0); if (!dmabuf->enable && dmabuf->count >= dmabuf->userfragsize) start_dac(state); + ret: + set_current_state(TASK_RUNNING); + remove_wait_queue(&dmabuf->wait, &waita); return ret; } @@ -2310,18 +2373,52 @@ open: i810_open_mixdev, }; -/* AC97 codec initialisation. */ -static int __init i810_ac97_init(struct i810_card *card) +/* AC97 codec initialisation. These small functions exist so we don't + duplicate code between module init and apm resume */ + +static inline int i810_ac97_exists(struct i810_card *card,int ac97_number) { - int num_ac97 = 0; - int total_channels = 0; - struct ac97_codec *codec; - u16 eid; - int i=0; - u32 reg; + u32 reg = inl(card->iobase + GLOB_STA); + return (reg & (0x100 << ac97_number)); +} - reg = inl(card->iobase + GLOB_CNT); +static inline int i810_ac97_enable_variable_rate(struct ac97_codec *codec) +{ + i810_ac97_set(codec, AC97_EXTENDED_STATUS, 9); + i810_ac97_set(codec,AC97_EXTENDED_STATUS, + i810_ac97_get(codec, AC97_EXTENDED_STATUS)|0xE800); + return (i810_ac97_get(codec, AC97_EXTENDED_STATUS)&1); +} + + +static int i810_ac97_probe_and_powerup(struct i810_card *card,struct ac97_codec *codec) +{ + /* Returns 0 on failure */ + int i; + + if (ac97_probe_codec(codec) == 0) return 0; + + /* power it all up */ + i810_ac97_set(codec, AC97_POWER_CONTROL, + i810_ac97_get(codec, AC97_POWER_CONTROL) & ~0x7f00); + /* wait for analog ready */ + for (i=10; + i && ((i810_ac97_get(codec, AC97_POWER_CONTROL) & 0xf) != 0xf); + i--) + { + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(HZ/20); + } + return i; +} + +/* if I knew what this did, I'd give it a better name */ +static int i810_ac97_random_init_stuff(struct i810_card *card) +{ + u32 reg = inl(card->iobase + GLOB_CNT); + int i; + if((reg&2)==0) /* Cold required */ reg|=2; else @@ -2330,13 +2427,13 @@ reg&=~8; /* ACLink on */ outl(reg , card->iobase + GLOB_CNT); - while(i<10) + for(i=0;i<10;i++) { if((inl(card->iobase+GLOB_CNT)&4)==0) break; - current->state = TASK_UNINTERRUPTIBLE; + + set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(HZ/20); - i++; } if(i==10) { @@ -2344,8 +2441,22 @@ return 0; } - current->state = TASK_UNINTERRUPTIBLE; - schedule_timeout(HZ/5); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(HZ/2); + reg = inl(card->iobase + GLOB_STA); + inw(card->ac97base); + return 1; +} + +static int __init i810_ac97_init(struct i810_card *card) +{ + int num_ac97 = 0; + int total_channels = 0; + struct ac97_codec *codec; + u16 eid; + u32 reg; + + if(!i810_ac97_random_init_stuff(card)) return 0; /* Number of channels supported */ /* What about the codec? Just because the ICH supports */ @@ -2371,10 +2482,10 @@ /* check the ready status before probing. So we chk */ /* What do we do if it's not ready? Wait and try */ /* again, or abort? */ - reg = inl(card->iobase + GLOB_STA); - if (!(reg & (0x100 << num_ac97))) { + if (!i810_ac97_exists(card,num_ac97)) { if(num_ac97 == 0) printk(KERN_ERR "i810_audio: Primary codec not ready.\n"); + card->ac97_codec[num_ac97] = 0; break; /* I think this works, if not ready stop */ } @@ -2390,24 +2501,13 @@ codec->codec_read = i810_ac97_get; codec->codec_write = i810_ac97_set; - if (ac97_probe_codec(codec) == 0) - break; - - /* power up everything, modify this when implementing power saving */ - i810_ac97_set(codec, AC97_POWER_CONTROL, - i810_ac97_get(codec, AC97_POWER_CONTROL) & ~0x7f00); - /* wait for analog ready */ - for (i=10; - i && ((i810_ac97_get(codec, AC97_POWER_CONTROL) & 0xf) != 0xf); - i--) - { - current->state = TASK_UNINTERRUPTIBLE; - schedule_timeout(HZ/20); + if(!i810_ac97_probe_and_powerup(card,codec)) { + printk("i810_audio: timed out waiting for codec %d analog ready", num_ac97); + break; /* it didn't work */ } - /* Store state information about S/PDIF transmitter */ card->ac97_status = 0; - + /* Don't attempt to get eid until powerup is complete */ eid = i810_ac97_get(codec, AC97_EXTENDED_ID); @@ -2427,16 +2527,10 @@ printk(KERN_WARNING "i810_audio: only 48Khz playback available.\n"); else { - /* Enable variable rate mode */ - i810_ac97_set(codec, AC97_EXTENDED_STATUS, 9); - i810_ac97_set(codec,AC97_EXTENDED_STATUS, - i810_ac97_get(codec, AC97_EXTENDED_STATUS)|0xE800); - - if(!(i810_ac97_get(codec, AC97_EXTENDED_STATUS)&1)) - { + if(!i810_ac97_enable_variable_rate(codec)) { printk(KERN_WARNING "i810_audio: Codec refused to allow VRA, using 48Khz only.\n"); card->ac97_features&=~1; - } + } } /* Determine how many channels the codec(s) support */ @@ -2609,6 +2703,9 @@ card->irq = pci_dev->irq; card->next = devs; card->magic = I810_CARD_MAGIC; +#ifdef CONFIG_PM + card->pm_suspended=0; +#endif spin_lock_init(&card->lock); devs = card; @@ -2697,6 +2794,131 @@ kfree(card); } +#ifdef CONFIG_PM +static int i810_pm_suspend(struct pci_dev *dev, u32 pm_state) +{ + struct i810_card *card = dev->driver_data; + struct i810_state *state; + unsigned long flags; + struct dmabuf *dmabuf; + int i,num_ac97; +#ifdef DEBUG + printk("i810_audio: i810_pm_suspend called\n"); +#endif + if(!card) return 0; + spin_lock_irqsave(&card->lock, flags); + card->pm_suspended=1; + for(i=0;istates[i]; + if(!state) continue; + /* this happens only if there are open files */ + dmabuf = &state->dmabuf; + if(dmabuf->enable & DAC_RUNNING || + (dmabuf->count && (dmabuf->trigger & PCM_ENABLE_OUTPUT))) { + state->pm_saved_dac_rate=dmabuf->rate; + stop_dac(state); + } else { + state->pm_saved_dac_rate=0; + } + if(dmabuf->enable & ADC_RUNNING) { + state->pm_saved_adc_rate=dmabuf->rate; + stop_adc(state); + } else { + state->pm_saved_adc_rate=0; + } + dmabuf->ready = 0; + dmabuf->swptr = dmabuf->hwptr = 0; + dmabuf->count = dmabuf->total_bytes = 0; + } + + spin_unlock_irqrestore(&card->lock, flags); + + /* save mixer settings */ + for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) { + struct ac97_codec *codec = card->ac97_codec[num_ac97]; + if(!codec) continue; + for(i=0;i< SOUND_MIXER_NRDEVICES ;i++) { + if((supported_mixer(codec,i)) && + (codec->read_mixer)) { + card->pm_saved_mixer_settings[i][num_ac97]= + codec->read_mixer(codec,i); + } + } + } + pci_save_state(dev,card->pm_save_state); /* XXX do we need this? */ + pci_disable_device(dev); /* disable busmastering */ + pci_set_power_state(dev,3); /* Zzz. */ + + return 0; +} + + +static int i810_pm_resume(struct pci_dev *dev) +{ + int num_ac97,i=0; + struct i810_card *card=(struct i810_card *)dev->driver_data; + pci_enable_device(dev); + pci_restore_state (dev,card->pm_save_state); + + /* observation of a toshiba portege 3440ct suggests that the + hardware has to be more or less completely reinitialized from + scratch after an apm suspend. Works For Me. -dan */ + + i810_ac97_random_init_stuff(card); + + for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) { + struct ac97_codec *codec = card->ac97_codec[num_ac97]; + /* check they haven't stolen the hardware while we were + away */ + if(!i810_ac97_exists(card,num_ac97)) { + if(num_ac97) continue; + else BUG(); + } + if(!i810_ac97_probe_and_powerup(card,codec)) BUG(); + + if((card->ac97_features&0x0001)) { + /* at probe time we found we could do variable + rates, but APM suspend has made it forget + its magical powers */ + if(!i810_ac97_enable_variable_rate(codec)) BUG(); + } + /* we lost our mixer settings, so restore them */ + for(i=0;i< SOUND_MIXER_NRDEVICES ;i++) { + if(supported_mixer(codec,i)){ + int val=card-> + pm_saved_mixer_settings[i][num_ac97]; + codec->mixer_state[i]=val; + codec->write_mixer(codec,i, + (val & 0xff) , + ((val >> 8) & 0xff) ); + } + } + } + + /* we need to restore the sample rate from whatever it was */ + for(i=0;istates[i]; + if(state) { + if(state->pm_saved_adc_rate) + i810_set_adc_rate(state,state->pm_saved_adc_rate); + if(state->pm_saved_dac_rate) + i810_set_dac_rate(state,state->pm_saved_dac_rate); + } + } + + + card->pm_suspended = 0; + + /* any processes that were reading/writing during the suspend + probably ended up here */ + for(i=0;istates[i]; + if(state) wake_up(&state->dmabuf.wait); + } + + return 0; +} +#endif /* CONFIG_PM */ MODULE_AUTHOR(""); MODULE_DESCRIPTION("Intel 810 audio support"); @@ -2713,6 +2935,10 @@ id_table: i810_pci_tbl, probe: i810_probe, remove: i810_remove, +#ifdef CONFIG_PM + suspend: i810_pm_suspend, + resume: i810_pm_resume, +#endif /* CONFIG_PM */ }; @@ -2753,3 +2979,9 @@ module_init(i810_init_module); module_exit(i810_cleanup_module); + +/* +Local Variables: +c-basic-offset: 8 +End: +*/ diff -u --recursive --new-file v2.4.13/linux/drivers/sound/ite8172.c linux/drivers/sound/ite8172.c --- v2.4.13/linux/drivers/sound/ite8172.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/sound/ite8172.c Thu Oct 25 13:53:52 2001 @@ -1721,6 +1721,7 @@ MODULE_AUTHOR("Monta Vista Software, stevel@mvista.com"); MODULE_DESCRIPTION("IT8172 AudioPCI97 Driver"); +MODULE_LICENSE("GPL"); /* --------------------------------------------------------------------- */ diff -u --recursive --new-file v2.4.13/linux/drivers/sound/nec_vrc5477.c linux/drivers/sound/nec_vrc5477.c --- v2.4.13/linux/drivers/sound/nec_vrc5477.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/sound/nec_vrc5477.c Thu Oct 25 13:53:52 2001 @@ -1774,6 +1774,7 @@ MODULE_AUTHOR("Monta Vista Software, jsun@mvista.com or jsun@junsun.net"); MODULE_DESCRIPTION("NEC Vrc5477 audio (AC97) Driver"); +MODULE_LICENSE("GPL"); /* --------------------------------------------------------------------- */ extern void jsun_scan_pci_bus(void); diff -u --recursive --new-file v2.4.13/linux/drivers/sound/rme96xx.c linux/drivers/sound/rme96xx.c --- v2.4.13/linux/drivers/sound/rme96xx.c Tue Oct 9 17:06:52 2001 +++ linux/drivers/sound/rme96xx.c Thu Oct 25 13:53:52 2001 @@ -38,6 +38,8 @@ #include #include #include +#include +#include #include #include #include diff -u --recursive --new-file v2.4.13/linux/drivers/sound/sb_ess.c linux/drivers/sound/sb_ess.c --- v2.4.13/linux/drivers/sound/sb_ess.c Fri Feb 16 16:02:37 2001 +++ linux/drivers/sound/sb_ess.c Thu Oct 25 13:53:52 2001 @@ -352,7 +352,8 @@ *speedp = speed1; retval = 1; } else { - *divp = div2; + /* *divp = div2; */ + *divp = 0x80 | div2; *speedp = speed2; retval = 2; } @@ -376,10 +377,19 @@ /* * The 0x80 is important for the first audio channel */ - div = 0x80 | ess_calc_div (795500, 128, speedp, &diff); + if (devc->submodel == SUBMDL_ES1888) { + div = 0x80 | ess_calc_div (795500, 256, speedp, &diff); + } else { + div = 0x80 | ess_calc_div (795500, 128, speedp, &diff); + } } else if(devc->caps & SB_CAP_ES18XX_RATE) { - ess_calc_best_speed(ES18XX_CLOCK1, 128, ES18XX_CLOCK2, 256, + if (devc->submodel == SUBMDL_ES1888) { + ess_calc_best_speed(397700, 128, 795500, 256, &div, speedp); + } else { + ess_calc_best_speed(ES18XX_CLOCK1, 128, ES18XX_CLOCK2, 256, + &div, speedp); + } } else { if (*speedp > 22000) { div = 0x80 | ess_calc_div (ES1688_CLOCK1, 256, speedp, &diff); diff -u --recursive --new-file v2.4.13/linux/drivers/sound/trident.c linux/drivers/sound/trident.c --- v2.4.13/linux/drivers/sound/trident.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/sound/trident.c Thu Oct 25 13:53:52 2001 @@ -4104,7 +4104,7 @@ if ((hwrpb->sys_type) == 201) { printk(KERN_INFO "trident: Running on Alpha system type Nautilus\n"); ac97_data = ali_ac97_get(card, 0, AC97_POWER_CONTROL); - ali_ac97_set(card, 0, AC97_POWER_CONTROL, ac97_data | + ali_ac97_set(card, 0, AC97_POWER_CONTROL, ac97_data | ALI_EAPD_POWER_DOWN); } } #endif diff -u --recursive --new-file v2.4.13/linux/drivers/sound/waveartist.c linux/drivers/sound/waveartist.c --- v2.4.13/linux/drivers/sound/waveartist.c Fri Apr 13 20:26:07 2001 +++ linux/drivers/sound/waveartist.c Thu Oct 25 13:53:52 2001 @@ -39,26 +39,22 @@ #include #include #include -#include #include +#include -#include -#include #include #include "sound_config.h" #include "waveartist.h" -#ifndef _ISA_DMA -#define _ISA_DMA(x) (x) -#endif -#ifndef _ISA_IRQ -#define _ISA_IRQ(x) (x) +#ifdef CONFIG_ARM +#include +#include #endif -#define POSSIBLE_RECORDING_DEVICES (SOUND_MASK_LINE |\ - SOUND_MASK_MIC |\ - SOUND_MASK_LINE1) +#ifndef NO_DMA +#define NO_DMA 255 +#endif #define SUPPORTED_MIXER_DEVICES (SOUND_MASK_SYNTH |\ SOUND_MASK_PCM |\ @@ -75,15 +71,15 @@ 0x0000, /* Treble */ 0x2323, /* Synth (FM) */ 0x4b4b, /* PCM */ - 0x0000, /* PC Speaker */ + 0x6464, /* PC Speaker */ 0x0000, /* Ext Line */ 0x0000, /* Mic */ 0x0000, /* CD */ - 0x0000, /* Recording monitor */ + 0x6464, /* Recording monitor */ 0x0000, /* SB PCM (ALT PCM) */ 0x0000, /* Recording level */ - 0x0000, /* Input gain */ - 0x0000, /* Output gain */ + 0x6464, /* Input gain */ + 0x6464, /* Output gain */ 0x0000, /* Line1 (Aux1) */ 0x0000, /* Line2 (Aux2) */ 0x0000, /* Line3 (Aux3) */ @@ -91,7 +87,7 @@ 0x0000, /* Digital2 */ 0x0000, /* Digital3 */ 0x0000, /* Phone In */ - 0x0000, /* Phone Out */ + 0x6464, /* Phone Out */ 0x0000, /* Video */ 0x0000, /* Radio */ 0x0000 /* Monitor */ @@ -110,10 +106,10 @@ int dev_no; /* Mixer parameters */ + const struct waveartist_mixer_info *mix; + unsigned short *levels; /* cache of volume settings */ int recmask; /* currently enabled recording device! */ - int supported_devices; /* SUPPORTED_MIXER_DEVICES */ - int rec_devices; /* POSSIBLE_RECORDING_DEVICES */ #ifdef CONFIG_ARCH_NETWINDER signed int slider_vol; /* hardware slider volume */ @@ -126,6 +122,21 @@ #endif } wavnc_info; +/* + * This is the implementation specific mixer information. + */ +struct waveartist_mixer_info { + unsigned int supported_devs; /* Supported devices */ + unsigned int recording_devs; /* Recordable devies */ + unsigned int stereo_devs; /* Stereo devices */ + + unsigned int (*select_input)(wavnc_info *, unsigned int, + unsigned char *, unsigned char *); + int (*decode_mixer)(wavnc_info *, int, + unsigned char, unsigned char); + int (*get_mixer)(wavnc_info *, int); +}; + typedef struct wavnc_port_info { int open_mode; int speed; @@ -137,14 +148,14 @@ static wavnc_info adev_info[MAX_AUDIO_DEV]; static spinlock_t waveartist_lock = SPIN_LOCK_UNLOCKED; -#ifndef machine_is_netwinder +#ifndef CONFIG_ARCH_NETWINDER #define machine_is_netwinder() 0 -#endif - +#else static struct timer_list vnc_timer; -static void vnc_configure_mixer(wavnc_info *devc); +static void vnc_configure_mixer(wavnc_info *devc, unsigned int input_mask); static int vnc_private_ioctl(int dev, unsigned int cmd, caddr_t arg); static void vnc_slider_tick(unsigned long data); +#endif static inline void waveartist_set_ctlr(struct address_info *hw, unsigned char clear, unsigned char set) @@ -176,7 +187,7 @@ unsigned int timeout = timeout_ms * 10 * HZ / 100; do { - current->state = TASK_INTERRUPTIBLE; + set_current_state(TASK_INTERRUPTIBLE); timeout = schedule_timeout(timeout); } while (timeout); @@ -804,21 +815,21 @@ } static struct audio_driver waveartist_audio_driver = { - owner: THIS_MODULE, - open: waveartist_open, - close: waveartist_close, - output_block: waveartist_output_block, - start_input: waveartist_start_input, - ioctl: waveartist_ioctl, + owner: THIS_MODULE, + open: waveartist_open, + close: waveartist_close, + output_block: waveartist_output_block, + start_input: waveartist_start_input, + ioctl: waveartist_ioctl, prepare_for_input: waveartist_prepare_for_input, prepare_for_output: waveartist_prepare_for_output, - halt_io: waveartist_halt, - halt_input: waveartist_halt_input, - halt_output: waveartist_halt_output, - trigger: waveartist_trigger, - set_speed: waveartist_set_speed, - set_bits: waveartist_set_bits, - set_channels: waveartist_set_channels + halt_io: waveartist_halt, + halt_input: waveartist_halt_input, + halt_output: waveartist_halt_output, + trigger: waveartist_trigger, + set_speed: waveartist_set_speed, + set_bits: waveartist_set_bits, + set_channels: waveartist_set_channels }; @@ -864,220 +875,338 @@ /* ------------------------------------------------------------------------- * Mixer stuff */ +struct mix_ent { + unsigned char reg_l; + unsigned char reg_r; + unsigned char shift; + unsigned char max; +}; + +static const struct mix_ent mix_devs[SOUND_MIXER_NRDEVICES] = { + { 2, 6, 1, 7 }, /* SOUND_MIXER_VOLUME */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_BASS */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_TREBLE */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_SYNTH */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_PCM */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_SPEAKER */ + { 0, 4, 6, 31 }, /* SOUND_MIXER_LINE */ + { 2, 6, 4, 3 }, /* SOUND_MIXER_MIC */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_CD */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_IMIX */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_ALTPCM */ +#if 0 + { 3, 7, 0, 10 }, /* SOUND_MIXER_RECLEV */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_IGAIN */ +#else + { 0, 0, 0, 0 }, /* SOUND_MIXER_RECLEV */ + { 3, 7, 0, 7 }, /* SOUND_MIXER_IGAIN */ +#endif + { 0, 0, 0, 0 }, /* SOUND_MIXER_OGAIN */ + { 0, 4, 1, 31 }, /* SOUND_MIXER_LINE1 */ + { 1, 5, 6, 31 }, /* SOUND_MIXER_LINE2 */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_LINE3 */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_DIGITAL1 */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_DIGITAL2 */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_DIGITAL3 */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_PHONEIN */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_PHONEOUT */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_VIDEO */ + { 0, 0, 0, 0 }, /* SOUND_MIXER_RADIO */ + { 0, 0, 0, 0 } /* SOUND_MIXER_MONITOR */ +}; + static void waveartist_mixer_update(wavnc_info *devc, int whichDev) { - unsigned int mask, reg_l, reg_r; unsigned int lev_left, lev_right; - unsigned int vals[3]; lev_left = devc->levels[whichDev] & 0xff; lev_right = devc->levels[whichDev] >> 8; + if (lev_left > 100) + lev_left = 100; + if (lev_right > 100) + lev_right = 100; + #define SCALE(lev,max) ((lev) * (max) / 100) if (machine_is_netwinder() && whichDev == SOUND_MIXER_PHONEOUT) whichDev = SOUND_MIXER_VOLUME; - switch(whichDev) { - case SOUND_MIXER_VOLUME: - mask = 0x000e; - reg_l = 0x200; - reg_r = 0x600; - lev_left = SCALE(lev_left, 7) << 1; - lev_right = SCALE(lev_right, 7) << 1; - break; + if (mix_devs[whichDev].reg_l || mix_devs[whichDev].reg_r) { + const struct mix_ent *mix = mix_devs + whichDev; + unsigned int mask, left, right; + + mask = mix->max << mix->shift; + lev_left = SCALE(lev_left, mix->max) << mix->shift; + lev_right = SCALE(lev_right, mix->max) << mix->shift; + + /* read left setting */ + left = waveartist_cmd1_r(devc, WACMD_GET_LEVEL | + mix->reg_l << 8); + + /* read right setting */ + right = waveartist_cmd1_r(devc, WACMD_GET_LEVEL | + mix->reg_r << 8); + + left = (left & ~mask) | (lev_left & mask); + right = (right & ~mask) | (lev_right & mask); + + /* write left,right back */ + waveartist_cmd3(devc, WACMD_SET_MIXER, left, right); + } else { + switch(whichDev) { + case SOUND_MIXER_PCM: + waveartist_cmd3(devc, WACMD_SET_LEVEL, + SCALE(lev_left, 32767), + SCALE(lev_right, 32767)); + break; - case SOUND_MIXER_LINE: - if ((devc->recmask & SOUND_MASK_LINE) == 0) - return; - mask = 0x07c0; - reg_l = 0x000; - reg_r = 0x400; - lev_left = SCALE(lev_left, 31) << 6; - lev_right = SCALE(lev_right, 31) << 6; - break; + case SOUND_MIXER_SYNTH: + waveartist_cmd3(devc, 0x0100 | WACMD_SET_LEVEL, + SCALE(lev_left, 32767), + SCALE(lev_right, 32767)); + break; + } + } +} - case SOUND_MIXER_MIC: - if ((devc->recmask & SOUND_MASK_MIC) == 0) - return; - mask = 0x0030; - reg_l = 0x200; - reg_r = 0x600; - lev_left = SCALE(lev_left, 3) << 4; - lev_right = SCALE(lev_right, 3) << 4; - break; +/* + * Set the ADC MUX to the specified values. We do NOT do any + * checking of the values passed, since we assume that the + * relevant *_select_input function has done that for us. + */ +static void +waveartist_set_adc_mux(wavnc_info *devc, char left_dev, char right_dev) +{ + unsigned int reg_08, reg_09; - case SOUND_MIXER_RECLEV: - mask = 0x000f; - reg_l = 0x300; - reg_r = 0x700; - lev_left = SCALE(lev_left, 10); - lev_right = SCALE(lev_right, 10); - break; + reg_08 = waveartist_cmd1_r(devc, WACMD_GET_LEVEL | 0x0800); + reg_09 = waveartist_cmd1_r(devc, WACMD_GET_LEVEL | 0x0900); - case SOUND_MIXER_LINE1: - if ((devc->recmask & SOUND_MASK_LINE1) == 0) - return; - mask = 0x003e; - reg_l = 0x000; - reg_r = 0x400; - lev_left = SCALE(lev_left, 31) << 1; - lev_right = SCALE(lev_right, 31) << 1; - break; + reg_08 = (reg_08 & ~0x3f) | right_dev << 3 | left_dev; - case SOUND_MIXER_PCM: - waveartist_cmd3(devc, WACMD_SET_LEVEL, - SCALE(lev_left, 32767), - SCALE(lev_right, 32767)); - return; + waveartist_cmd3(devc, WACMD_SET_MIXER, reg_08, reg_09); +} - case SOUND_MIXER_SYNTH: - waveartist_cmd3(devc, 0x0100 | WACMD_SET_LEVEL, - SCALE(lev_left, 32767), - SCALE(lev_right, 32767)); - return; +/* + * Decode a recording mask into a mixer selection as follows: + * + * OSS Source WA Source Actual source + * SOUND_MASK_IMIX Mixer Mixer output (same as AD1848) + * SOUND_MASK_LINE Line Line in + * SOUND_MASK_LINE1 Aux 1 Aux 1 in + * SOUND_MASK_LINE2 Aux 2 Aux 2 in + * SOUND_MASK_MIC Mic Microphone + */ +static unsigned int +waveartist_select_input(wavnc_info *devc, unsigned int recmask, + unsigned char *dev_l, unsigned char *dev_r) +{ + unsigned int recdev = ADC_MUX_NONE; - default: - return; + if (recmask & SOUND_MASK_IMIX) { + recmask = SOUND_MASK_IMIX; + recdev = ADC_MUX_MIXER; + } else if (recmask & SOUND_MASK_LINE2) { + recmask = SOUND_MASK_LINE2; + recdev = ADC_MUX_AUX2; + } else if (recmask & SOUND_MASK_LINE1) { + recmask = SOUND_MASK_LINE1; + recdev = ADC_MUX_AUX1; + } else if (recmask & SOUND_MASK_LINE) { + recmask = SOUND_MASK_LINE; + recdev = ADC_MUX_LINE; + } else if (recmask & SOUND_MASK_MIC) { + recmask = SOUND_MASK_MIC; + recdev = ADC_MUX_MIC; } - /* read left setting */ - vals[0] = reg_l + WACMD_GET_LEVEL; - waveartist_cmd(devc, 1, vals, 1, vals + 1); + *dev_l = *dev_r = recdev; + + return recmask; +} + +static int +waveartist_decode_mixer(wavnc_info *devc, int dev, unsigned char lev_l, + unsigned char lev_r) +{ + switch (dev) { + case SOUND_MIXER_VOLUME: + case SOUND_MIXER_SYNTH: + case SOUND_MIXER_PCM: + case SOUND_MIXER_LINE: + case SOUND_MIXER_MIC: + case SOUND_MIXER_IGAIN: + case SOUND_MIXER_LINE1: + case SOUND_MIXER_LINE2: + devc->levels[dev] = lev_l | lev_r << 8; + break; + + case SOUND_MIXER_IMIX: + break; - /* read right setting */ - vals[0] = reg_r + 0x30; - waveartist_cmd(devc, 1, vals, 1, vals + 2); + default: + dev = -EINVAL; + break; + } - vals[1] = (vals[1] & ~mask) | (lev_left & mask); - vals[2] = (vals[2] & ~mask) | (lev_right & mask); + return dev; +} - /* write left,right back */ - vals[0] = WACMD_SET_MIXER; - waveartist_cmd(devc, 3, vals, 0, NULL); +static int waveartist_get_mixer(wavnc_info *devc, int dev) +{ + return devc->levels[dev]; } +static const struct waveartist_mixer_info waveartist_mixer = { + supported_devs: SUPPORTED_MIXER_DEVICES | SOUND_MASK_IGAIN, + recording_devs: SOUND_MASK_LINE | SOUND_MASK_MIC | + SOUND_MASK_LINE1 | SOUND_MASK_LINE2 | + SOUND_MASK_IMIX, + stereo_devs: (SUPPORTED_MIXER_DEVICES | SOUND_MASK_IGAIN) & ~ + (SOUND_MASK_SPEAKER | SOUND_MASK_IMIX), + select_input: waveartist_select_input, + decode_mixer: waveartist_decode_mixer, + get_mixer: waveartist_get_mixer, +}; + static void -waveartist_select_input(wavnc_info *devc, unsigned int input) +waveartist_set_recmask(wavnc_info *devc, unsigned int recmask) { - unsigned int vals[3]; + unsigned char dev_l, dev_r; - /* - * Get reg 9 - */ - vals[0] = 0x0830; - waveartist_cmd(devc, 1, vals, 1, vals + 1); + recmask &= devc->mix->recording_devs; /* - * Get reg 10, only so that we can write it back. + * If more than one recording device selected, + * disable the device that is currently in use. */ - vals[0] = 0x0930; - waveartist_cmd(devc, 1, vals, 1, vals + 2); - - if (debug_flg & DEBUG_MIXER) - printk("RECSRC: old left: 0x%04X, old right: 0x%04X.\n", - vals[1] & 0x07, (vals[1] >> 3) & 0x07); + if (hweight32(recmask) > 1) + recmask &= ~devc->recmask; /* - * kill current left/right mux input select + * Translate the recording device mask into + * the ADC multiplexer settings. */ - vals[1] &= ~0x03F; + devc->recmask = devc->mix->select_input(devc, recmask, + &dev_l, &dev_r); - switch (input) { - case SOUND_MASK_MIC: - /* - * right=mic, left=mic - */ - vals[1] |= 0x002D; - break; - - case SOUND_MASK_LINE1: - /* - * right=none, left=Aux1; - */ - vals[1] |= 0x0004; - break; + waveartist_set_adc_mux(devc, dev_l, dev_r); +} - case SOUND_MASK_LINE: - /* - * right=Line, left=Line; - */ - vals[1] |= 0x0012; - break; - } +static int +waveartist_set_mixer(wavnc_info *devc, int dev, unsigned int level) +{ + unsigned int lev_left = level & 0x00ff; + unsigned int lev_right = (level & 0xff00) >> 8; - if (debug_flg & DEBUG_MIXER) - printk("RECSRC %d: left=0x%04X, right=0x%04X.\n", input, - vals[1] & 0x07, (vals[1] >> 3) & 0x07); + if (lev_left > 100) + lev_left = 100; + if (lev_right > 100) + lev_right = 100; /* - * and finally - write the reg pair back.... + * Mono devices have their right volume forced to their + * left volume. (from ALSA driver OSS emulation). */ - vals[0] = WACMD_SET_MIXER; + if (!(devc->mix->stereo_devs & (1 << dev))) + lev_right = lev_left; - waveartist_cmd(devc, 3, vals, 0, NULL); + dev = devc->mix->decode_mixer(devc, dev, lev_left, lev_right); + + if (dev >= 0) + waveartist_mixer_update(devc, dev); + + return dev < 0 ? dev : 0; } static int -waveartist_mixer_set(wavnc_info *devc, int whichDev, unsigned int level) +waveartist_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg) { - unsigned int lev_left = level & 0x007f; - unsigned int lev_right = (level & 0x7f00) >> 8; - int left, right, devmask; - - left = level & 0x7f; - right = (level & 0x7f00) >> 8; - - if (debug_flg & DEBUG_MIXER) - printk("wa_mixer_set(dev=%d, level=%X)\n", - whichDev, level); - - switch (whichDev) { - case SOUND_MIXER_VOLUME: /* master volume (0-7) */ - case SOUND_MIXER_LINE: /* external line (0-31) */ - case SOUND_MIXER_MIC: /* mono mic (0-3) */ - case SOUND_MIXER_RECLEV: /* recording level (0-7) */ - case SOUND_MIXER_LINE1: /* mono external aux1 (0-31) */ - case SOUND_MIXER_PCM: /* Waveartist PCM (0-32767) */ - case SOUND_MIXER_SYNTH: /* internal synth (0-31) */ - case SOUND_MIXER_IMIX: /* recording feedback */ - devc->levels[whichDev] = lev_left | lev_right << 8; - waveartist_mixer_update(devc, whichDev); - break; + wavnc_info *devc = (wavnc_info *)audio_devs[dev]->devc; + int ret = 0, val, nr; - /* Select recording input source + /* + * All SOUND_MIXER_* ioctls use type 'M' */ - case SOUND_MIXER_RECSRC: - devmask = level & devc->rec_devices; + if (((cmd >> 8) & 255) != 'M') + return -ENOIOCTLCMD; #ifdef CONFIG_ARCH_NETWINDER - if (machine_is_netwinder()) - vnc_configure_mixer(devc); + if (machine_is_netwinder()) { + ret = vnc_private_ioctl(dev, cmd, arg); + if (ret != -ENOIOCTLCMD) + return ret; else + ret = 0; + } #endif - { - waveartist_select_input(devc, level); - /* - * if record monitoring is on, make sure the bit is set - */ - if (devc->levels[SOUND_MIXER_IMIX]) - waveartist_mixer_update(devc, SOUND_MIXER_IMIX); + nr = cmd & 0xff; + + if (_SIOC_DIR(cmd) & _SIOC_WRITE) { + if (get_user(val, (int *)arg)) + return -EFAULT; + + switch (nr) { + case SOUND_MIXER_RECSRC: + waveartist_set_recmask(devc, val); + break; + + default: + ret = -EINVAL; + if (nr < SOUND_MIXER_NRDEVICES && + devc->mix->supported_devs & (1 << nr)) + ret = waveartist_set_mixer(devc, nr, val); } + } - /* - * do not save in "levels", return current setting - */ - return devc->recmask; + if (ret == 0 && _SIOC_DIR(cmd) & _SIOC_READ) { + ret = -EINVAL; - default: - return -EINVAL; + switch (nr) { + case SOUND_MIXER_RECSRC: + ret = devc->recmask; + break; + + case SOUND_MIXER_DEVMASK: + ret = devc->mix->supported_devs; + break; + + case SOUND_MIXER_STEREODEVS: + ret = devc->mix->stereo_devs; + break; + + case SOUND_MIXER_RECMASK: + ret = devc->mix->recording_devs; + break; + + case SOUND_MIXER_CAPS: + ret = SOUND_CAP_EXCL_INPUT; + break; + + default: + if (nr < SOUND_MIXER_NRDEVICES) + ret = devc->mix->get_mixer(devc, nr); + break; + } + + if (ret >= 0) + ret = put_user(ret, (int *)arg) ? -EFAULT : 0; } - return devc->levels[whichDev]; + return ret; } +static struct mixer_operations waveartist_mixer_operations = +{ + owner: THIS_MODULE, + id: "WaveArtist", + name: "WaveArtist", + ioctl: waveartist_mixer_ioctl +}; + static void waveartist_mixer_reset(wavnc_info *devc) { @@ -1098,7 +1227,7 @@ waveartist_cmd3(devc, WACMD_SET_MIXER, 0x9800, 0xa836); /* - * set mixer input select to none, RX filter gains 0 db + * set mixer input select to none, RX filter gains 0 dB */ waveartist_cmd3(devc, WACMD_SET_MIXER, 0x4c00, 0x8c00); @@ -1110,90 +1239,12 @@ /* set default input device = internal mic * current recording device = none */ - devc->recmask = 0; + waveartist_set_recmask(devc, 0); for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) waveartist_mixer_update(devc, i); - - devc->supported_devices = SUPPORTED_MIXER_DEVICES; - devc->rec_devices = POSSIBLE_RECORDING_DEVICES; - - if (machine_is_netwinder()) { - devc->supported_devices |= SOUND_MASK_PHONEIN | SOUND_MASK_PHONEOUT; - devc->rec_devices |= SOUND_MASK_PHONEIN; - } } -static int -waveartist_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg) -{ - wavnc_info *devc = (wavnc_info *)audio_devs[dev]->devc; - int ret; - -#ifdef CONFIG_ARCH_NETWINDER - if (machine_is_netwinder()) { - ret = vnc_private_ioctl(dev, cmd, arg); - if (ret != -ENOIOCTLCMD) - return ret; - } -#endif - - if (((cmd >> 8) & 0xff) == 'M') { - if (_SIOC_DIR(cmd) & _SIOC_WRITE) { - int val; - - if (get_user(val, (int *)arg)) - return -EFAULT; - - return waveartist_mixer_set(devc, cmd & 0xff, val); - } else { - /* - * Return parameters - */ - switch (cmd & 0xff) { - case SOUND_MIXER_RECSRC: - ret = devc->recmask; - break; - - case SOUND_MIXER_DEVMASK: - ret = devc->supported_devices; - break; - - case SOUND_MIXER_STEREODEVS: - ret = devc->supported_devices & - ~(SOUND_MASK_SPEAKER|SOUND_MASK_IMIX); - break; - - case SOUND_MIXER_RECMASK: - ret = devc->rec_devices; - break; - - case SOUND_MIXER_CAPS: - ret = SOUND_CAP_EXCL_INPUT; - break; - - default: - if ((cmd & 0xff) < SOUND_MIXER_NRDEVICES) - ret = devc->levels[cmd & 0xff]; - else - return -EINVAL; - } - - return put_user(ret, (int *)arg) ? -EFAULT : 0; - } - } - - return -ENOIOCTLCMD; -} - -static struct mixer_operations waveartist_mixer_operations = -{ - owner: THIS_MODULE, - id: "WaveArtist", - name: "WaveArtist NetWinder", - ioctl: waveartist_mixer_ioctl -}; - static int __init waveartist_init(wavnc_info *devc) { wavnc_port_info *portc; @@ -1297,13 +1348,13 @@ return 0; } - if (hw_config->irq > _ISA_IRQ(15) || hw_config->irq < _ISA_IRQ(0)) { + if (hw_config->irq > 15 || hw_config->irq < 0) { printk(KERN_WARNING "WaveArtist: Bad IRQ %d\n", hw_config->irq); return 0; } - if (hw_config->dma != _ISA_DMA(3)) { + if (hw_config->dma != 3) { printk(KERN_WARNING "WaveArtist: Bad DMA %d\n", hw_config->dma); return 0; @@ -1317,7 +1368,8 @@ return 1; } -static void __init attach_waveartist(struct address_info *hw) +static void __init +attach_waveartist(struct address_info *hw, const struct waveartist_mixer_info *mix) { wavnc_info *devc = &adev_info[nr_waveartist_devs]; @@ -1339,6 +1391,7 @@ request_region(hw->io_base, 15, devc->hw.name); + devc->mix = mix; devc->dev_no = waveartist_init(devc); if (devc->dev_no < 0) @@ -1352,7 +1405,9 @@ vnc_timer.data = nr_waveartist_devs; add_timer(&vnc_timer); - vnc_configure_mixer(devc); + vnc_configure_mixer(devc, 0); + + devc->no_autoselect = 1; } #endif nr_waveartist_devs += 1; @@ -1408,10 +1463,14 @@ "to unload\n"); } +#ifdef CONFIG_ARCH_NETWINDER + /* * Rebel.com Netwinder specifics... */ +#include + #define VNC_TIMER_PERIOD (HZ/4) //check slider 4 times/sec #define MIXER_PRIVATE3_RESET 0x53570000 @@ -1427,7 +1486,7 @@ extern spinlock_t gpio_lock; static inline void -vnc_update_spkr_mute(wavnc_info *devc) +vnc_mute_spkr(wavnc_info *devc) { unsigned long flags; @@ -1437,8 +1496,22 @@ } static void -vnc_mute_lout(wavnc_info *devc, int mute) +vnc_mute_lout(wavnc_info *devc) { + unsigned int left, right; + + left = waveartist_cmd1_r(devc, WACMD_GET_LEVEL); + right = waveartist_cmd1_r(devc, WACMD_GET_LEVEL | 0x400); + + if (devc->line_mute_state) { + left &= ~1; + right &= ~1; + } else { + left |= 1; + right |= 1; + } + waveartist_cmd3(devc, WACMD_SET_MIXER, left, right); + } static int @@ -1491,67 +1564,177 @@ return old_slider_volume; } -static void -vnc_configure_mixer(wavnc_info *devc) +/* + * Decode a recording mask into a mixer selection on the NetWinder + * as follows: + * + * OSS Source WA Source Actual source + * SOUND_MASK_IMIX Mixer Mixer output (same as AD1848) + * SOUND_MASK_LINE Line Line in + * SOUND_MASK_LINE1 Left Mic Handset + * SOUND_MASK_PHONEIN Left Aux Telephone microphone + * SOUND_MASK_MIC Right Mic Builtin microphone + */ +static unsigned int +netwinder_select_input(wavnc_info *devc, unsigned int recmask, + unsigned char *dev_l, unsigned char *dev_r) { - u_int vals[3]; + unsigned int recdev_l = ADC_MUX_NONE, recdev_r = ADC_MUX_NONE; - if (!devc->no_autoselect) { - if (devc->handset_detect) { - devc->recmask = SOUND_MASK_LINE1; - devc->spkr_mute_state = devc->line_mute_state = 1; - } else if (devc->telephone_detect) { - devc->recmask = SOUND_MASK_PHONEIN; - devc->spkr_mute_state = devc->line_mute_state = 1; - } else { - /* unless someone has asked for LINE-IN, - * we default to MIC - */ - if ((devc->recmask & SOUND_MASK_LINE) == 0) - devc->recmask = SOUND_MASK_MIC; - devc->spkr_mute_state = devc->line_mute_state = 0; - } - vnc_update_spkr_mute(devc); - vnc_mute_lout(devc, devc->spkr_mute_state); + if (recmask & SOUND_MASK_IMIX) { + recmask = SOUND_MASK_IMIX; + recdev_l = ADC_MUX_MIXER; + recdev_r = ADC_MUX_MIXER; + } else if (recmask & SOUND_MASK_LINE) { + recmask = SOUND_MASK_LINE; + recdev_l = ADC_MUX_LINE; + recdev_r = ADC_MUX_LINE; + } else if (recmask & SOUND_MASK_LINE1) { + recmask = SOUND_MASK_LINE1; + waveartist_cmd1(devc, WACMD_SET_MONO); /* left */ + recdev_l = ADC_MUX_MIC; + recdev_r = ADC_MUX_NONE; + } else if (recmask & SOUND_MASK_PHONEIN) { + recmask = SOUND_MASK_PHONEIN; + waveartist_cmd1(devc, WACMD_SET_MONO); /* left */ + recdev_l = ADC_MUX_AUX1; + recdev_r = ADC_MUX_NONE; + } else if (recmask & SOUND_MASK_MIC) { + recmask = SOUND_MASK_MIC; + waveartist_cmd1(devc, WACMD_SET_MONO | 0x100); /* right */ + recdev_l = ADC_MUX_NONE; + recdev_r = ADC_MUX_MIC; } - /* Ok. At this point, we have done the autoswitch logic, or we - * have had a command from an ioctl. We have a valid devc->recmask. - * Now we have to connect up the hardware to reflect the recmask. - */ - vals[1] = waveartist_cmd1_r(devc, WACMD_GET_LEVEL | 0x800); - vals[2] = waveartist_cmd1_r(devc, WACMD_GET_LEVEL | 0x900); + *dev_l = recdev_l; + *dev_r = recdev_r; - vals[1] &= ~0x3f; + return recmask; +} - switch(devc->recmask) { - case SOUND_MASK_MIC: /* builtin mic */ - waveartist_cmd1(devc, WACMD_SET_MONO | 0x100); /* right */ - vals[1] |= 0x28; +static int +netwinder_decode_mixer(wavnc_info *devc, int dev, unsigned char lev_l, + unsigned char lev_r) +{ + switch (dev) { + case SOUND_MIXER_VOLUME: + case SOUND_MIXER_SYNTH: + case SOUND_MIXER_PCM: + case SOUND_MIXER_LINE: + case SOUND_MIXER_IGAIN: + devc->levels[dev] = lev_l | lev_r << 8; break; - case SOUND_MASK_LINE1: /* out handset */ - waveartist_cmd1(devc, WACMD_SET_MONO); /* left */ - vals[1] |= 0x05; + case SOUND_MIXER_MIC: /* right mic only */ + devc->levels[SOUND_MIXER_MIC] &= 0xff; + devc->levels[SOUND_MIXER_MIC] |= lev_l << 8; break; - case SOUND_MASK_PHONEIN: /* our telephone mic */ - waveartist_cmd1(devc, WACMD_SET_MONO); /* left */ - vals[1] |= 0x04; + case SOUND_MIXER_LINE1: /* left mic only */ + devc->levels[SOUND_MIXER_MIC] &= 0xff00; + devc->levels[SOUND_MIXER_MIC] |= lev_l; + dev = SOUND_MIXER_MIC; break; - case SOUND_MASK_LINE: /* stereo line in */ - vals[1] |= 12; + case SOUND_MIXER_PHONEIN: /* left aux only */ + devc->levels[SOUND_MIXER_LINE1] = lev_l; + dev = SOUND_MIXER_LINE1; + break; + + case SOUND_MIXER_IMIX: + case SOUND_MIXER_PHONEOUT: break; default: - return; + dev = -EINVAL; + break; } + return dev; +} + +static int netwinder_get_mixer(wavnc_info *devc, int dev) +{ + int levels; + + switch (dev) { + case SOUND_MIXER_VOLUME: + case SOUND_MIXER_SYNTH: + case SOUND_MIXER_PCM: + case SOUND_MIXER_LINE: + case SOUND_MIXER_IGAIN: + levels = devc->levels[dev]; + break; + + case SOUND_MIXER_MIC: /* builtin mic: right mic only */ + levels = devc->levels[SOUND_MIXER_MIC] >> 8; + levels |= levels << 8; + break; - vals[0] = WACMD_SET_MIXER; - waveartist_cmd(devc, 3, vals, 0, NULL); + case SOUND_MIXER_LINE1: /* handset mic: left mic only */ + levels = devc->levels[SOUND_MIXER_MIC] & 0xff; + levels |= levels << 8; + break; + + case SOUND_MIXER_PHONEIN: /* phone mic: left aux1 only */ + levels = devc->levels[SOUND_MIXER_LINE1] & 0xff; + levels |= levels << 8; + break; - waveartist_mixer_update(devc, SOUND_MIXER_IMIX); + default: + levels = 0; + } + + return levels; +} + +/* + * Waveartist specific mixer information. + */ +static const struct waveartist_mixer_info netwinder_mixer = { + supported_devs: SOUND_MASK_VOLUME | SOUND_MASK_SYNTH | + SOUND_MASK_PCM | SOUND_MASK_SPEAKER | + SOUND_MASK_LINE | SOUND_MASK_MIC | + SOUND_MASK_IMIX | SOUND_MASK_LINE1 | + SOUND_MASK_PHONEIN | SOUND_MASK_PHONEOUT| + SOUND_MASK_IGAIN, + + recording_devs: SOUND_MASK_LINE | SOUND_MASK_MIC | + SOUND_MASK_IMIX | SOUND_MASK_LINE1 | + SOUND_MASK_PHONEIN, + + stereo_devs: SOUND_MASK_VOLUME | SOUND_MASK_SYNTH | + SOUND_MASK_PCM | SOUND_MASK_LINE | + SOUND_MASK_IMIX | SOUND_MASK_IGAIN, + + select_input: netwinder_select_input, + decode_mixer: netwinder_decode_mixer, + get_mixer: netwinder_get_mixer, +}; + +static void +vnc_configure_mixer(wavnc_info *devc, unsigned int recmask) +{ + if (!devc->no_autoselect) { + if (devc->handset_detect) { + recmask = SOUND_MASK_LINE1; + devc->spkr_mute_state = devc->line_mute_state = 1; + } else if (devc->telephone_detect) { + recmask = SOUND_MASK_PHONEIN; + devc->spkr_mute_state = devc->line_mute_state = 1; + } else { + /* unless someone has asked for LINE-IN, + * we default to MIC + */ + if ((devc->recmask & SOUND_MASK_LINE) == 0) + devc->recmask = SOUND_MASK_MIC; + devc->spkr_mute_state = devc->line_mute_state = 0; + } + vnc_mute_spkr(devc); + vnc_mute_lout(devc); + + if (recmask != devc->recmask) + waveartist_set_recmask(devc, recmask); + } } static int @@ -1562,10 +1745,10 @@ /* * read the "buttons" state. - * Bit 4 = handset present, - * Bit 5 = offhook + * Bit 4 = 0 means handset present + * Bit 5 = 1 means phone offhook */ - temp = inb(0x201) & 0x30; + temp = inb(0x201); old_hs = devc->handset_detect; old_td = devc->telephone_detect; @@ -1576,7 +1759,7 @@ if (!devc->no_autoselect && (old_hs != devc->handset_detect || old_td != devc->telephone_detect)) - vnc_configure_mixer(devc); + vnc_configure_mixer(devc, devc->recmask); slider_volume = vnc_volume_slider(devc); @@ -1596,7 +1779,7 @@ if (slider_volume != temp && devc->use_slider) { devc->slider_vol = slider_volume; - waveartist_mixer_set(devc, SOUND_MIXER_VOLUME, + waveartist_set_mixer(devc, SOUND_MIXER_VOLUME, slider_volume | slider_volume << 8); return 1; @@ -1648,13 +1831,13 @@ devc->line_mute_state = (val & VNC_MUTE_LINE_OUT) ? 1 : 0; if (prev_spkr_mute != devc->spkr_mute_state) - vnc_update_spkr_mute(devc); + vnc_mute_spkr(devc); if (prev_line_mute != devc->line_mute_state) - vnc_mute_lout(devc, devc->line_mute_state); + vnc_mute_lout(devc); if (prev_auto_state != devc->no_autoselect) - vnc_configure_mixer(devc); + vnc_configure_mixer(devc, devc->recmask); return 0; } @@ -1735,32 +1918,40 @@ return put_user(val, (int *)arg) ? -EFAULT : 0; } - if (((cmd >> 8) & 0xff) == 'M') { - if (_SIOC_DIR(cmd) & _SIOC_WRITE) { - /* - * special case for master volume: if we - * received this call - switch from hw - * volume control to a software volume - * control, till the hw volume is modified - * to signal that user wants to be back in - * hardware... - */ - if ((cmd & 0xff) == SOUND_MIXER_VOLUME) - devc->use_slider = 0; - } else if ((cmd & 0xff) == SOUND_MIXER_STEREODEVS) { - val = devc->supported_devices & - ~(SOUND_MASK_IMIX | - SOUND_MASK_MIC | - SOUND_MASK_LINE1 | - SOUND_MASK_PHONEIN | - SOUND_MASK_PHONEOUT); - return put_user(val, (int *)arg) ? -EFAULT : 0; + if (_SIOC_DIR(cmd) & _SIOC_WRITE) { + /* + * special case for master volume: if we + * received this call - switch from hw + * volume control to a software volume + * control, till the hw volume is modified + * to signal that user wants to be back in + * hardware... + */ + if ((cmd & 0xff) == SOUND_MIXER_VOLUME) + devc->use_slider = 0; + + /* speaker output */ + if ((cmd & 0xff) == SOUND_MIXER_SPEAKER) { + unsigned int val, l, r; + + if (get_user(val, (int *)arg)) + return -EFAULT; + + l = val & 0x7f; + r = (val & 0x7f00) >> 8; + val = (l + r) / 2; + devc->levels[SOUND_MIXER_SPEAKER] = val | (val << 8); + devc->spkr_mute_state = (val <= 50); + vnc_mute_spkr(devc); + return 0; } } return -ENOIOCTLCMD; } +#endif + static struct address_info cfg; static int attached; @@ -1771,13 +1962,10 @@ static int __initdata dma2 = 0; -MODULE_PARM(io, "i"); /* IO base */ -MODULE_PARM(irq, "i"); /* IRQ */ -MODULE_PARM(dma, "i"); /* DMA */ -MODULE_PARM(dma2, "i"); /* DMA2 */ - static int __init init_waveartist(void) { + const struct waveartist_mixer_info *mix; + if (!io && machine_is_netwinder()) { /* * The NetWinder WaveArtist is at a fixed address. @@ -1790,6 +1978,12 @@ dma2 = 7; } + mix = &waveartist_mixer; +#ifdef CONFIG_ARCH_NETWINDER + if (machine_is_netwinder()) + mix = &netwinder_mixer; +#endif + cfg.io_base = io; cfg.irq = irq; cfg.dma = dma; @@ -1798,7 +1992,7 @@ if (!probe_waveartist(&cfg)) return -ENODEV; - attach_waveartist(&cfg); + attach_waveartist(&cfg, mix); attached = 1; return 0; @@ -1830,3 +2024,10 @@ } __setup("waveartist=", setup_waveartist); #endif + +MODULE_DESCRIPTION("Rockwell WaveArtist RWA-010 sound driver"); +MODULE_PARM(io, "i"); /* IO base */ +MODULE_PARM(irq, "i"); /* IRQ */ +MODULE_PARM(dma, "i"); /* DMA */ +MODULE_PARM(dma2, "i"); /* DMA2 */ +MODULE_LICENSE("GPL"); diff -u --recursive --new-file v2.4.13/linux/drivers/sound/waveartist.h linux/drivers/sound/waveartist.h --- v2.4.13/linux/drivers/sound/waveartist.h Thu Oct 21 13:38:12 1999 +++ linux/drivers/sound/waveartist.h Thu Oct 25 13:53:52 2001 @@ -66,5 +66,27 @@ #define WACMD_RST_MIXER 0x33 #define WACMD_SET_MONO 0x34 +/* + * Definitions for left/right recording input mux + */ +#define ADC_MUX_NONE 0 +#define ADC_MUX_MIXER 1 +#define ADC_MUX_LINE 2 +#define ADC_MUX_AUX2 3 +#define ADC_MUX_AUX1 4 +#define ADC_MUX_MIC 5 + +/* + * Definitions for mixer gain settings + */ +#define MIX_GAIN_LINE 0 /* line in */ +#define MIX_GAIN_AUX1 1 /* aux1 */ +#define MIX_GAIN_AUX2 2 /* aux2 */ +#define MIX_GAIN_XMIC 3 /* crossover mic */ +#define MIX_GAIN_MIC 4 /* normal mic */ +#define MIX_GAIN_PREMIC 5 /* preamp mic */ +#define MIX_GAIN_OUT 6 /* output */ +#define MIX_GAIN_MONO 7 /* mono in */ + int wa_sendcmd(unsigned int cmd); int wa_writecmd(unsigned int cmd, unsigned int arg); diff -u --recursive --new-file v2.4.13/linux/drivers/telephony/ixj.c linux/drivers/telephony/ixj.c --- v2.4.13/linux/drivers/telephony/ixj.c Sun Sep 23 11:41:00 2001 +++ linux/drivers/telephony/ixj.c Thu Oct 25 13:53:52 2001 @@ -387,7 +387,7 @@ #ifdef PERFMON_STATS #define ixj_perfmon(x) ((x)++) #else -#deifne ixj_perfmon(x) do {} while(0); +#define ixj_perfmon(x) do {} while(0); #endif static int ixj_convert_loaded; diff -u --recursive --new-file v2.4.13/linux/drivers/usb/Config.in linux/drivers/usb/Config.in --- v2.4.13/linux/drivers/usb/Config.in Tue Oct 23 22:48:52 2001 +++ linux/drivers/usb/Config.in Fri Nov 2 17:18:58 2001 @@ -16,7 +16,6 @@ define_bool CONFIG_USB_BANDWIDTH n fi bool ' Long timeout for slow-responding devices (some MGE Ellipse UPSes)' CONFIG_USB_LONG_TIMEOUT - bool ' Large report fetching for "broken" devices (some APC UPSes)' CONFIG_USB_LARGE_CONFIG fi comment 'USB Controllers' diff -u --recursive --new-file v2.4.13/linux/drivers/usb/devio.c linux/drivers/usb/devio.c --- v2.4.13/linux/drivers/usb/devio.c Sun Sep 23 11:41:00 2001 +++ linux/drivers/usb/devio.c Fri Nov 2 17:18:58 2001 @@ -844,6 +844,14 @@ uurb.buffer_length = totlen; break; + case USBDEVFS_URB_TYPE_INTERRUPT: + uurb.number_of_packets = 0; + if (uurb.buffer_length > 16384) + return -EINVAL; + if (!access_ok((uurb.endpoint & USB_DIR_IN) ? VERIFY_WRITE : VERIFY_READ, uurb.buffer, uurb.buffer_length)) + return -EFAULT; + break; + default: return -EINVAL; } diff -u --recursive --new-file v2.4.13/linux/drivers/usb/serial/ir-usb.c linux/drivers/usb/serial/ir-usb.c --- v2.4.13/linux/drivers/usb/serial/ir-usb.c Thu Oct 11 08:02:26 2001 +++ linux/drivers/usb/serial/ir-usb.c Fri Nov 2 17:18:58 2001 @@ -19,7 +19,13 @@ * , and Jean Tourrilhes * See Documentation/usb/usb-serial.txt for more information on using this driver - * + * + * 2001_Nov_01 greg kh + * Added support for more IrDA USB devices. + * Added support for zero packet. Added buffer override paramater, so + * users can transfer larger packets at once if they wish. Both patches + * came from Dag Brattli . + * * 2001_Oct_07 greg kh * initial version released. */ @@ -52,10 +58,14 @@ /* * Version Information */ -#define DRIVER_VERSION "v0.1" +#define DRIVER_VERSION "v0.2" #define DRIVER_AUTHOR "Greg Kroah-Hartman " #define DRIVER_DESC "USB IR Dongle driver" +/* if overridden by the user, then use their value for the size of the read and + * write urbs */ +static int buffer_size = 0; + static int ir_startup (struct usb_serial *serial); static int ir_open (struct usb_serial_port *port, struct file *filep); static void ir_close (struct usb_serial_port *port, struct file *filep); @@ -66,7 +76,10 @@ static __devinitdata struct usb_device_id id_table [] = { - { USB_DEVICE(0x09c4, 0x0011) }, + { USB_DEVICE(0x050f, 0x0180) }, /* KC Technology, KC-180 */ + { USB_DEVICE(0x08e9, 0x0100) }, /* XTNDAccess */ + { USB_DEVICE(0x09c4, 0x0011) }, /* ACTiSys ACT-IR2000U */ + { USB_INTERFACE_INFO (USB_CLASS_APP_SPEC, USB_CLASS_IRDA, 0) }, { } /* Terminating entry */ }; @@ -180,6 +193,7 @@ static int ir_open (struct usb_serial_port *port, struct file *filp) { struct usb_serial *serial = port->serial; + char *buffer; int result = 0; if (port_paranoia_check (port, __FUNCTION__)) @@ -195,11 +209,28 @@ if (!port->active) { port->active = 1; - /* force low_latency on so that our tty_push actually forces the data through, - otherwise it is scheduled, and with high data rates (like with OHCI) data - can get lost. */ - port->tty->low_latency = 1; - + if (buffer_size) { + /* override the default buffer sizes */ + buffer = kmalloc (buffer_size, GFP_KERNEL); + if (!buffer) { + err (__FUNCTION__ " - out of memory."); + return -ENOMEM; + } + kfree (port->read_urb->transfer_buffer); + port->read_urb->transfer_buffer = buffer; + port->read_urb->transfer_buffer_length = buffer_size; + + buffer = kmalloc (buffer_size, GFP_KERNEL); + if (!buffer) { + err (__FUNCTION__ " - out of memory."); + return -ENOMEM; + } + kfree (port->write_urb->transfer_buffer); + port->write_urb->transfer_buffer = buffer; + port->write_urb->transfer_buffer_length = buffer_size; + port->bulk_out_size = buffer_size; + } + /* Start reading from the device */ FILL_BULK_URB(port->read_urb, serial->dev, usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), @@ -279,12 +310,14 @@ memcpy (&transfer_buffer[1], buf, count); } - transfer_buffer[0] = 0x00; + /* use 12 XBOF's as default */ + transfer_buffer[0] = 0x30; usb_serial_debug_data (__FILE__, __FUNCTION__, count+1, transfer_buffer); port->write_urb->transfer_buffer_length = count + 1; port->write_urb->dev = port->serial->dev; + port->write_urb->transfer_flags |= USB_ZERO_PACKET; result = usb_submit_urb (port->write_urb); if (result) err(__FUNCTION__ " - failed submitting write urb, error %d", result); @@ -320,7 +353,6 @@ struct usb_serial *serial = get_usb_serial (port, __FUNCTION__); struct tty_struct *tty; unsigned char *data = urb->transfer_buffer; - int i; int result; if (port_paranoia_check (port, __FUNCTION__)) @@ -340,18 +372,11 @@ usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data); + /* Bypass flip-buffers, and feed the ldisc directly due to our + * potentally large buffer size. Since we used to set low_latency, + * this is exactly what the tty layer did anyway :) */ tty = port->tty; - if (urb->actual_length > 1) { - for (i = 1; i < urb->actual_length ; ++i) { - /* if we insert more than TTY_FLIPBUF_SIZE characters, we drop them. */ - if(tty->flip.count >= TTY_FLIPBUF_SIZE) { - tty_flip_buffer_push(tty); - } - /* this doesn't actually push the data through unless tty->low_latency is set */ - tty_insert_flip_char(tty, data[i], 0); - } - tty_flip_buffer_push(tty); - } + tty->ldisc.receive_buf(tty, data+1, NULL, urb->actual_length-1); /* Continue trying to always read */ FILL_BULK_URB(port->read_urb, serial->dev, @@ -449,4 +474,6 @@ MODULE_PARM(debug, "i"); MODULE_PARM_DESC(debug, "Debug enabled or not"); +MODULE_PARM(buffer_size, "i"); +MODULE_PARM_DESC(buffer_size, "Size of the transfer buffers"); diff -u --recursive --new-file v2.4.13/linux/drivers/usb/storage/sddr09.c linux/drivers/usb/storage/sddr09.c --- v2.4.13/linux/drivers/usb/storage/sddr09.c Sun Sep 23 11:41:00 2001 +++ linux/drivers/usb/storage/sddr09.c Sun Nov 4 09:31:57 2001 @@ -637,9 +637,11 @@ for (i=0; idma_addr); + dbg("QH @ %p/%08llX:", qh, (unsigned long long)qh->dma_addr); if (qh->hw.qh.head & UHCI_PTR_TERM) dbg(" Head Terminate"); diff -u --recursive --new-file v2.4.13/linux/drivers/usb/usbnet.c linux/drivers/usb/usbnet.c --- v2.4.13/linux/drivers/usb/usbnet.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/usb/usbnet.c Fri Nov 2 17:18:58 2001 @@ -1537,6 +1537,10 @@ USB_DEVICE (0x0525, 0x1080), // NetChip ref design driver_info: (unsigned long) &net1080_info, }, +{ + USB_DEVICE (0x06D0, 0x0622), // Laplink Gold + driver_info: (unsigned long) &net1080_info, +}, #endif #ifdef CONFIG_USB_PL2301 diff -u --recursive --new-file v2.4.13/linux/drivers/video/Makefile linux/drivers/video/Makefile --- v2.4.13/linux/drivers/video/Makefile Sun Sep 23 11:41:00 2001 +++ linux/drivers/video/Makefile Thu Oct 25 13:53:52 2001 @@ -15,7 +15,7 @@ fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o \ fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o \ fbcon-cfb8.o fbcon-mac.o fbcon-mfb.o \ - cyber2000fb.o fbcon-hga.o + cyber2000fb.o sa1100fb.o fbcon-hga.o # Each configuration option enables a list of files. diff -u --recursive --new-file v2.4.13/linux/drivers/video/aty/atyfb_base.c linux/drivers/video/aty/atyfb_base.c --- v2.4.13/linux/drivers/video/aty/atyfb_base.c Tue Oct 23 22:48:52 2001 +++ linux/drivers/video/aty/atyfb_base.c Tue Oct 30 15:08:11 2001 @@ -2521,7 +2521,7 @@ if (!options || !*options) return 0; - while (this_opt = strsep(&options, ",")) { + while ((this_opt = strsep(&options, ",")) != NULL) { if (!strncmp(this_opt, "font:", 5)) { char *p; int i; diff -u --recursive --new-file v2.4.13/linux/drivers/video/aty/mach64_cursor.c linux/drivers/video/aty/mach64_cursor.c --- v2.4.13/linux/drivers/video/aty/mach64_cursor.c Sun Aug 12 13:28:00 2001 +++ linux/drivers/video/aty/mach64_cursor.c Thu Oct 25 13:53:52 2001 @@ -3,7 +3,7 @@ * ATI Mach64 CT/VT/GT/LT Cursor Support */ -#include +#include #include #include #include diff -u --recursive --new-file v2.4.13/linux/drivers/video/clgenfb.c linux/drivers/video/clgenfb.c --- v2.4.13/linux/drivers/video/clgenfb.c Tue Oct 9 17:06:53 2001 +++ linux/drivers/video/clgenfb.c Thu Oct 25 13:53:52 2001 @@ -56,6 +56,12 @@ #ifdef CONFIG_AMIGA #include #endif +#ifdef CONFIG_ALL_PPC +#include +#define isPReP (_machine == _MACH_prep) +#else +#define isPReP 0 +#endif #include