瀏覽代碼

Merge with rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

Steve French 20 年之前
父節點
當前提交
4887c61811
共有 100 個文件被更改,包括 1777 次插入1115 次删除
  1. 35 0
      Documentation/acpi-hotkey.txt
  2. 138 0
      Documentation/filesystems/inotify.txt
  3. 0 0
      Documentation/hwmon/adm1021
  4. 0 0
      Documentation/hwmon/adm1025
  5. 0 0
      Documentation/hwmon/adm1026
  6. 0 0
      Documentation/hwmon/adm1031
  7. 0 0
      Documentation/hwmon/adm9240
  8. 0 0
      Documentation/hwmon/asb100
  9. 0 0
      Documentation/hwmon/ds1621
  10. 0 0
      Documentation/hwmon/fscher
  11. 0 0
      Documentation/hwmon/gl518sm
  12. 0 0
      Documentation/hwmon/it87
  13. 0 0
      Documentation/hwmon/lm63
  14. 0 0
      Documentation/hwmon/lm75
  15. 0 0
      Documentation/hwmon/lm77
  16. 0 0
      Documentation/hwmon/lm78
  17. 0 0
      Documentation/hwmon/lm80
  18. 0 0
      Documentation/hwmon/lm83
  19. 0 0
      Documentation/hwmon/lm85
  20. 0 0
      Documentation/hwmon/lm87
  21. 0 0
      Documentation/hwmon/lm90
  22. 0 0
      Documentation/hwmon/lm92
  23. 0 0
      Documentation/hwmon/max1619
  24. 0 0
      Documentation/hwmon/pc87360
  25. 0 0
      Documentation/hwmon/sis5595
  26. 0 0
      Documentation/hwmon/smsc47b397
  27. 0 0
      Documentation/hwmon/smsc47m1
  28. 0 0
      Documentation/hwmon/sysfs-interface
  29. 0 0
      Documentation/hwmon/userspace-tools
  30. 0 0
      Documentation/hwmon/via686a
  31. 0 0
      Documentation/hwmon/w83627hf
  32. 0 0
      Documentation/hwmon/w83781d
  33. 0 0
      Documentation/hwmon/w83l785ts
  34. 17 5
      Documentation/i2c/chips/max6875
  35. 9 6
      Documentation/i2c/dev-interface
  36. 0 7
      Documentation/i2c/writing-clients
  37. 1 1
      Documentation/kernel-parameters.txt
  38. 8 1
      Documentation/pcmcia/driver-changes.txt
  39. 1 1
      Documentation/video4linux/CARDLIST.bttv
  40. 2 0
      Documentation/video4linux/CARDLIST.cx88
  41. 8 6
      Documentation/video4linux/CARDLIST.saa7134
  42. 2 2
      Documentation/video4linux/CARDLIST.tuner
  43. 37 37
      Documentation/video4linux/bttv/Cards
  44. 4 0
      Documentation/video4linux/not-in-cx2388x-datasheet.txt
  45. 1 1
      MAINTAINERS
  46. 1 1
      Makefile
  47. 2 0
      arch/arm/Kconfig
  48. 1 1
      arch/frv/mb93090-mb00/pci-irq.c
  49. 2 0
      arch/h8300/Kconfig
  50. 4 0
      arch/i386/kernel/acpi/Makefile
  51. 103 0
      arch/i386/kernel/acpi/cstate.c
  52. 3 2
      arch/i386/kernel/acpi/wakeup.S
  53. 1 1
      arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
  54. 3 0
      arch/i386/kernel/syscall_table.S
  55. 10 6
      arch/i386/pci/irq.c
  56. 1 1
      arch/i386/pci/visws.c
  57. 54 0
      arch/ia64/kernel/acpi.c
  58. 1 1
      arch/ia64/kernel/mca.c
  59. 1 0
      arch/ia64/kernel/process.c
  60. 3 0
      arch/ia64/kernel/setup.c
  61. 7 0
      arch/ia64/kernel/topology.c
  62. 6 0
      arch/ppc/kernel/machine_kexec.c
  63. 2 0
      arch/sparc64/Kconfig
  64. 2 1
      arch/um/Makefile
  65. 2 2
      arch/x86_64/kernel/vmlinux.lds.S
  66. 0 1
      arch/xtensa/kernel/asm-offsets.c
  67. 2 2
      arch/xtensa/kernel/syscalls.c
  68. 3 3
      arch/xtensa/kernel/syscalls.h
  69. 2 2
      arch/xtensa/kernel/traps.c
  70. 3 3
      arch/xtensa/kernel/vmlinux.lds.S
  71. 2 0
      drivers/Kconfig
  72. 1 0
      drivers/Makefile
  73. 25 13
      drivers/acpi/Kconfig
  74. 3 2
      drivers/acpi/Makefile
  75. 4 0
      drivers/acpi/asus_acpi.c
  76. 7 1
      drivers/acpi/bus.c
  77. 1 244
      drivers/acpi/button.c
  78. 37 21
      drivers/acpi/dispatcher/dsfield.c
  79. 21 7
      drivers/acpi/dispatcher/dsinit.c
  80. 5 6
      drivers/acpi/dispatcher/dsmethod.c
  81. 115 80
      drivers/acpi/dispatcher/dsmthdat.c
  82. 50 29
      drivers/acpi/dispatcher/dsobject.c
  83. 70 35
      drivers/acpi/dispatcher/dsopcode.c
  84. 24 17
      drivers/acpi/dispatcher/dsutils.c
  85. 31 26
      drivers/acpi/dispatcher/dswexec.c
  86. 72 46
      drivers/acpi/dispatcher/dswload.c
  87. 15 16
      drivers/acpi/dispatcher/dswscope.c
  88. 244 214
      drivers/acpi/dispatcher/dswstate.c
  89. 288 132
      drivers/acpi/ec.c
  90. 23 10
      drivers/acpi/events/evevent.c
  91. 26 13
      drivers/acpi/events/evgpe.c
  92. 51 12
      drivers/acpi/events/evgpeblk.c
  93. 63 34
      drivers/acpi/events/evmisc.c
  94. 27 8
      drivers/acpi/events/evregion.c
  95. 7 7
      drivers/acpi/events/evrgnini.c
  96. 10 2
      drivers/acpi/events/evsci.c
  97. 12 7
      drivers/acpi/events/evxface.c
  98. 15 10
      drivers/acpi/events/evxfevnt.c
  99. 20 11
      drivers/acpi/executer/exconfig.c
  100. 26 18
      drivers/acpi/executer/exconvrt.c

+ 35 - 0
Documentation/acpi-hotkey.txt

@@ -0,0 +1,35 @@
+driver/acpi/hotkey.c implement:
+1. /proc/acpi/hotkey/event_config 
+(event based hotkey or event config interface):
+a. add a  event based hotkey(event) : 
+echo "0:bus::action:method:num:num" > event_config
+
+b. delete a event based hotkey(event): 
+echo "1:::::num:num" > event_config
+
+c.  modify a event based hotkey(event):    
+echo "2:bus::action:method:num:num" > event_config
+
+2. /proc/acpi/hotkey/poll_config 
+(polling based hotkey or event config interface):
+a.add a polling based hotkey(event) : 	
+echo "0:bus:method:action:method:num" > poll_config
+this adding command will create a proc file 
+/proc/acpi/hotkey/method, which is used to get 
+result of polling.
+
+b.delete a polling based hotkey(event): 	
+echo "1:::::num" > event_config
+
+c.modify a polling based hotkey(event):    
+echo "2:bus:method:action:method:num" > poll_config
+
+3./proc/acpi/hotkey/action 
+(interface to call aml method associated with a 
+specific hotkey(event))
+echo "event_num:event_type:event_argument" > 
+	/proc/acpi/hotkey/action.
+The result of the execution of this aml method is 
+attached to /proc/acpi/hotkey/poll_method, which is dnyamically
+created.  Please use command "cat /proc/acpi/hotkey/polling_method" 
+to retrieve it.

+ 138 - 0
Documentation/filesystems/inotify.txt

@@ -0,0 +1,138 @@
+				    inotify
+	     a powerful yet simple file change notification system
+
+
+
+Document started 15 Mar 2005 by Robert Love <rml@novell.com>
+
+(i) User Interface
+
+Inotify is controlled by a set of three sys calls 
+
+First step in using inotify is to initialise an inotify instance
+
+	int fd = inotify_init ();
+
+Change events are managed by "watches".  A watch is an (object,mask) pair where
+the object is a file or directory and the mask is a bit mask of one or more
+inotify events that the application wishes to receive.  See <linux/inotify.h>
+for valid events.  A watch is referenced by a watch descriptor, or wd.
+
+Watches are added via a path to the file.
+
+Watches on a directory will return events on any files inside of the directory.
+
+Adding a watch is simple,
+
+	int wd = inotify_add_watch (fd, path, mask);
+
+You can add a large number of files via something like
+
+	for each file to watch {
+		int wd = inotify_add_watch (fd, file, mask);
+	}
+
+You can update an existing watch in the same manner, by passing in a new mask.
+
+An existing watch is removed via the INOTIFY_IGNORE ioctl, for example
+
+	inotify_rm_watch (fd, wd);
+
+Events are provided in the form of an inotify_event structure that is read(2)
+from a inotify instance fd.  The filename is of dynamic length and follows the 
+struct. It is of size len.  The filename is padded with null bytes to ensure 
+proper alignment.  This padding is reflected in len.
+
+You can slurp multiple events by passing a large buffer, for example
+
+	size_t len = read (fd, buf, BUF_LEN);
+
+Will return as many events as are available and fit in BUF_LEN.
+
+each inotify instance fd is also select()- and poll()-able.
+
+You can find the size of the current event queue via the FIONREAD ioctl.
+
+All watches are destroyed and cleaned up on close.
+
+
+(ii) Internal Kernel Implementation
+
+Each open inotify instance is associated with an inotify_device structure.
+
+Each watch is associated with an inotify_watch structure.  Watches are chained
+off of each associated device and each associated inode.
+
+See fs/inotify.c for the locking and lifetime rules.
+
+
+(iii) Rationale
+
+Q: What is the design decision behind not tying the watch to the open fd of
+   the watched object?
+
+A: Watches are associated with an open inotify device, not an open file.
+   This solves the primary problem with dnotify: keeping the file open pins
+   the file and thus, worse, pins the mount.  Dnotify is therefore infeasible
+   for use on a desktop system with removable media as the media cannot be
+   unmounted.
+
+Q: What is the design decision behind using an-fd-per-device as opposed to
+   an fd-per-watch?
+
+A: An fd-per-watch quickly consumes more file descriptors than are allowed,
+   more fd's than are feasible to manage, and more fd's than are optimally
+   select()-able.  Yes, root can bump the per-process fd limit and yes, users
+   can use epoll, but requiring both is a silly and extraneous requirement.
+   A watch consumes less memory than an open file, separating the number
+   spaces is thus sensible.  The current design is what user-space developers
+   want: Users initialize inotify, once, and add n watches, requiring but one fd
+   and no twiddling with fd limits.  Initializing an inotify instance two
+   thousand times is silly.  If we can implement user-space's preferences 
+   cleanly--and we can, the idr layer makes stuff like this trivial--then we 
+   should.
+
+   There are other good arguments.  With a single fd, there is a single
+   item to block on, which is mapped to a single queue of events.  The single
+   fd returns all watch events and also any potential out-of-band data.  If
+   every fd was a separate watch,
+
+   - There would be no way to get event ordering.  Events on file foo and
+     file bar would pop poll() on both fd's, but there would be no way to tell
+     which happened first.  A single queue trivially gives you ordering.  Such
+     ordering is crucial to existing applications such as Beagle.  Imagine
+     "mv a b ; mv b a" events without ordering.
+
+   - We'd have to maintain n fd's and n internal queues with state,
+     versus just one.  It is a lot messier in the kernel.  A single, linear
+     queue is the data structure that makes sense.
+
+   - User-space developers prefer the current API.  The Beagle guys, for
+     example, love it.  Trust me, I asked.  It is not a surprise: Who'd want
+     to manage and block on 1000 fd's via select?
+
+   - You'd have to manage the fd's, as an example: Call close() when you
+     received a delete event.
+
+   - No way to get out of band data.
+
+   - 1024 is still too low.  ;-)
+
+   When you talk about designing a file change notification system that
+   scales to 1000s of directories, juggling 1000s of fd's just does not seem
+   the right interface.  It is too heavy.
+
+Q: Why the system call approach?
+
+A: The poor user-space interface is the second biggest problem with dnotify.
+   Signals are a terrible, terrible interface for file notification.  Or for
+   anything, for that matter.  The ideal solution, from all perspectives, is a
+   file descriptor-based one that allows basic file I/O and poll/select.
+   Obtaining the fd and managing the watches could have been done either via a
+   device file or a family of new system calls.  We decided to implement a
+   family of system calls because that is the preffered approach for new kernel
+   features and it means our user interface requirements.
+
+   Additionally, it _is_ possible to  more than one instance  and
+   juggle more than one queue and thus more than one associated fd.
+

+ 0 - 0
Documentation/i2c/chips/adm1021 → Documentation/hwmon/adm1021


+ 0 - 0
Documentation/i2c/chips/adm1025 → Documentation/hwmon/adm1025


+ 0 - 0
Documentation/i2c/chips/adm1026 → Documentation/hwmon/adm1026


+ 0 - 0
Documentation/i2c/chips/adm1031 → Documentation/hwmon/adm1031


+ 0 - 0
Documentation/i2c/chips/adm9240 → Documentation/hwmon/adm9240


+ 0 - 0
Documentation/i2c/chips/asb100 → Documentation/hwmon/asb100


+ 0 - 0
Documentation/i2c/chips/ds1621 → Documentation/hwmon/ds1621


+ 0 - 0
Documentation/i2c/chips/fscher → Documentation/hwmon/fscher


+ 0 - 0
Documentation/i2c/chips/gl518sm → Documentation/hwmon/gl518sm


+ 0 - 0
Documentation/i2c/chips/it87 → Documentation/hwmon/it87


+ 0 - 0
Documentation/i2c/chips/lm63 → Documentation/hwmon/lm63


+ 0 - 0
Documentation/i2c/chips/lm75 → Documentation/hwmon/lm75


+ 0 - 0
Documentation/i2c/chips/lm77 → Documentation/hwmon/lm77


+ 0 - 0
Documentation/i2c/chips/lm78 → Documentation/hwmon/lm78


+ 0 - 0
Documentation/i2c/chips/lm80 → Documentation/hwmon/lm80


+ 0 - 0
Documentation/i2c/chips/lm83 → Documentation/hwmon/lm83


+ 0 - 0
Documentation/i2c/chips/lm85 → Documentation/hwmon/lm85


+ 0 - 0
Documentation/i2c/chips/lm87 → Documentation/hwmon/lm87


+ 0 - 0
Documentation/i2c/chips/lm90 → Documentation/hwmon/lm90


+ 0 - 0
Documentation/i2c/chips/lm92 → Documentation/hwmon/lm92


+ 0 - 0
Documentation/i2c/chips/max1619 → Documentation/hwmon/max1619


+ 0 - 0
Documentation/i2c/chips/pc87360 → Documentation/hwmon/pc87360


+ 0 - 0
Documentation/i2c/chips/sis5595 → Documentation/hwmon/sis5595


+ 0 - 0
Documentation/i2c/chips/smsc47b397 → Documentation/hwmon/smsc47b397


+ 0 - 0
Documentation/i2c/chips/smsc47m1 → Documentation/hwmon/smsc47m1


+ 0 - 0
Documentation/i2c/sysfs-interface → Documentation/hwmon/sysfs-interface


+ 0 - 0
Documentation/i2c/userspace-tools → Documentation/hwmon/userspace-tools


+ 0 - 0
Documentation/i2c/chips/via686a → Documentation/hwmon/via686a


+ 0 - 0
Documentation/i2c/chips/w83627hf → Documentation/hwmon/w83627hf


+ 0 - 0
Documentation/i2c/chips/w83781d → Documentation/hwmon/w83781d


+ 0 - 0
Documentation/i2c/chips/w83l785ts → Documentation/hwmon/w83l785ts


+ 17 - 5
Documentation/i2c/chips/max6875

@@ -2,10 +2,10 @@ Kernel driver max6875
 =====================
 =====================
 
 
 Supported chips:
 Supported chips:
-  * Maxim max6874, max6875
-    Prefixes: 'max6875'
+  * Maxim MAX6874, MAX6875
+    Prefix: 'max6875'
     Addresses scanned: 0x50, 0x52
     Addresses scanned: 0x50, 0x52
-    Datasheets:
+    Datasheet:
         http://pdfserv.maxim-ic.com/en/ds/MAX6874-MAX6875.pdf
         http://pdfserv.maxim-ic.com/en/ds/MAX6874-MAX6875.pdf
 
 
 Author: Ben Gardner <bgardner@wabtec.com>
 Author: Ben Gardner <bgardner@wabtec.com>
@@ -23,14 +23,26 @@ Module Parameters
 Description
 Description
 -----------
 -----------
 
 
-The MAXIM max6875 is a EEPROM-programmable power-supply sequencer/supervisor.
+The Maxim MAX6875 is an EEPROM-programmable power-supply sequencer/supervisor.
 It provides timed outputs that can be used as a watchdog, if properly wired.
 It provides timed outputs that can be used as a watchdog, if properly wired.
 It also provides 512 bytes of user EEPROM.
 It also provides 512 bytes of user EEPROM.
 
 
-At reset, the max6875 reads the configuration eeprom into its configuration
+At reset, the MAX6875 reads the configuration EEPROM into its configuration
 registers.  The chip then begins to operate according to the values in the
 registers.  The chip then begins to operate according to the values in the
 registers.
 registers.
 
 
+The Maxim MAX6874 is a similar, mostly compatible device, with more intputs
+and outputs:
+
+             vin     gpi    vout
+MAX6874        6       4       8
+MAX6875        4       3       5
+
+MAX6874 chips can have four different addresses (as opposed to only two for
+the MAX6875). The additional addresses (0x54 and 0x56) are not probed by
+this driver by default, but the probe module parameter can be used if
+needed.
+
 See the datasheet for details on how to program the EEPROM.
 See the datasheet for details on how to program the EEPROM.
 
 
 
 

+ 9 - 6
Documentation/i2c/dev-interface

@@ -14,9 +14,12 @@ C example
 =========
 =========
 
 
 So let's say you want to access an i2c adapter from a C program. The
 So let's say you want to access an i2c adapter from a C program. The
-first thing to do is `#include <linux/i2c.h>" and "#include <linux/i2c-dev.h>. 
-Yes, I know, you should never include kernel header files, but until glibc 
-knows about i2c, there is not much choice.
+first thing to do is "#include <linux/i2c-dev.h>". Please note that
+there are two files named "i2c-dev.h" out there, one is distributed
+with the Linux kernel and is meant to be included from kernel
+driver code, the other one is distributed with lm_sensors and is
+meant to be included from user-space programs. You obviously want
+the second one here.
 
 
 Now, you have to decide which adapter you want to access. You should
 Now, you have to decide which adapter you want to access. You should
 inspect /sys/class/i2c-dev/ to decide this. Adapter numbers are assigned
 inspect /sys/class/i2c-dev/ to decide this. Adapter numbers are assigned
@@ -78,7 +81,7 @@ Full interface description
 ==========================
 ==========================
 
 
 The following IOCTLs are defined and fully supported 
 The following IOCTLs are defined and fully supported 
-(see also i2c-dev.h and i2c.h):
+(see also i2c-dev.h):
 
 
 ioctl(file,I2C_SLAVE,long addr)
 ioctl(file,I2C_SLAVE,long addr)
   Change slave address. The address is passed in the 7 lower bits of the
   Change slave address. The address is passed in the 7 lower bits of the
@@ -97,10 +100,10 @@ ioctl(file,I2C_PEC,long select)
 ioctl(file,I2C_FUNCS,unsigned long *funcs)
 ioctl(file,I2C_FUNCS,unsigned long *funcs)
   Gets the adapter functionality and puts it in *funcs.
   Gets the adapter functionality and puts it in *funcs.
 
 
-ioctl(file,I2C_RDWR,struct i2c_ioctl_rdwr_data *msgset)
+ioctl(file,I2C_RDWR,struct i2c_rdwr_ioctl_data *msgset)
 
 
   Do combined read/write transaction without stop in between.
   Do combined read/write transaction without stop in between.
-  The argument is a pointer to a struct i2c_ioctl_rdwr_data {
+  The argument is a pointer to a struct i2c_rdwr_ioctl_data {
 
 
       struct i2c_msg *msgs;  /* ptr to array of simple messages */
       struct i2c_msg *msgs;  /* ptr to array of simple messages */
       int nmsgs;             /* number of messages to exchange */
       int nmsgs;             /* number of messages to exchange */

+ 0 - 7
Documentation/i2c/writing-clients

@@ -27,7 +27,6 @@ address.
 static struct i2c_driver foo_driver = {
 static struct i2c_driver foo_driver = {
 	.owner		= THIS_MODULE,
 	.owner		= THIS_MODULE,
 	.name		= "Foo version 2.3 driver",
 	.name		= "Foo version 2.3 driver",
-	.id		= I2C_DRIVERID_FOO, /* from i2c-id.h, optional */
 	.flags		= I2C_DF_NOTIFY,
 	.flags		= I2C_DF_NOTIFY,
 	.attach_adapter	= &foo_attach_adapter,
 	.attach_adapter	= &foo_attach_adapter,
 	.detach_client	= &foo_detach_client,
 	.detach_client	= &foo_detach_client,
@@ -37,12 +36,6 @@ static struct i2c_driver foo_driver = {
 The name can be chosen freely, and may be upto 40 characters long. Please
 The name can be chosen freely, and may be upto 40 characters long. Please
 use something descriptive here.
 use something descriptive here.
 
 
-If used, the id should be a unique ID. The range 0xf000 to 0xffff is
-reserved for local use, and you can use one of those until you start
-distributing the driver, at which time you should contact the i2c authors
-to get your own ID(s). Note that most of the time you don't need an ID
-at all so you can just omit it.
-
 Don't worry about the flags field; just put I2C_DF_NOTIFY into it. This
 Don't worry about the flags field; just put I2C_DF_NOTIFY into it. This
 means that your driver will be notified when new adapters are found.
 means that your driver will be notified when new adapters are found.
 This is almost always what you want.
 This is almost always what you want.

+ 1 - 1
Documentation/kernel-parameters.txt

@@ -37,7 +37,7 @@ restrictions referred to are that the relevant option is valid if:
 	IA-32	IA-32 aka i386 architecture is enabled.
 	IA-32	IA-32 aka i386 architecture is enabled.
 	IA-64	IA-64 architecture is enabled.
 	IA-64	IA-64 architecture is enabled.
 	IOSCHED	More than one I/O scheduler is enabled.
 	IOSCHED	More than one I/O scheduler is enabled.
-	IP_PNP	IP DCHP, BOOTP, or RARP is enabled.
+	IP_PNP	IP DHCP, BOOTP, or RARP is enabled.
 	ISAPNP	ISA PnP code is enabled.
 	ISAPNP	ISA PnP code is enabled.
 	ISDN	Appropriate ISDN support is enabled.
 	ISDN	Appropriate ISDN support is enabled.
 	JOY	Appropriate joystick support is enabled.
 	JOY	Appropriate joystick support is enabled.

+ 8 - 1
Documentation/pcmcia/driver-changes.txt

@@ -1,6 +1,13 @@
 This file details changes in 2.6 which affect PCMCIA card driver authors:
 This file details changes in 2.6 which affect PCMCIA card driver authors:
 
 
-* in-kernel device<->driver matching
+* event handler initialization in struct pcmcia_driver (as of 2.6.13)
+   The event handler is notified of all events, and must be initialized
+   as the event() callback in the driver's struct pcmcia_driver.
+
+* pcmcia/version.h should not be used (as of 2.6.13)
+   This file will be removed eventually.
+
+* in-kernel device<->driver matching (as of 2.6.13)
    PCMCIA devices and their correct drivers can now be matched in
    PCMCIA devices and their correct drivers can now be matched in
    kernelspace. See 'devicetable.txt' for details.
    kernelspace. See 'devicetable.txt' for details.
 
 

+ 1 - 1
Documentation/video4linux/CARDLIST.bttv

@@ -1,4 +1,4 @@
-card=0 -  *** UNKNOWN/GENERIC *** 
+card=0 -  *** UNKNOWN/GENERIC ***
 card=1 - MIRO PCTV
 card=1 - MIRO PCTV
 card=2 - Hauppauge (bt848)
 card=2 - Hauppauge (bt848)
 card=3 - STB, Gateway P/N 6000699 (bt848)
 card=3 - STB, Gateway P/N 6000699 (bt848)

+ 2 - 0
Documentation/video4linux/CARDLIST.cx88

@@ -27,3 +27,5 @@ card=25 - Digital-Logic MICROSPACE Entertainment Center (MEC)
 card=26 - IODATA GV/BCTV7E
 card=26 - IODATA GV/BCTV7E
 card=27 - PixelView PlayTV Ultra Pro (Stereo)
 card=27 - PixelView PlayTV Ultra Pro (Stereo)
 card=28 - DViCO FusionHDTV 3 Gold-T
 card=28 - DViCO FusionHDTV 3 Gold-T
+card=29 - ADS Tech Instant TV DVB-T PCI
+card=30 - TerraTec Cinergy 1400 DVB-T

+ 8 - 6
Documentation/video4linux/CARDLIST.saa7134

@@ -1,10 +1,10 @@
-  0 -> UNKNOWN/GENERIC                         
+  0 -> UNKNOWN/GENERIC
   1 -> Proteus Pro [philips reference design]   [1131:2001,1131:2001]
   1 -> Proteus Pro [philips reference design]   [1131:2001,1131:2001]
   2 -> LifeView FlyVIDEO3000                    [5168:0138,4e42:0138]
   2 -> LifeView FlyVIDEO3000                    [5168:0138,4e42:0138]
   3 -> LifeView FlyVIDEO2000                    [5168:0138]
   3 -> LifeView FlyVIDEO2000                    [5168:0138]
   4 -> EMPRESS                                  [1131:6752]
   4 -> EMPRESS                                  [1131:6752]
   5 -> SKNet Monster TV                         [1131:4e85]
   5 -> SKNet Monster TV                         [1131:4e85]
-  6 -> Tevion MD 9717                          
+  6 -> Tevion MD 9717
   7 -> KNC One TV-Station RDS / Typhoon TV Tuner RDS [1131:fe01,1894:fe01]
   7 -> KNC One TV-Station RDS / Typhoon TV Tuner RDS [1131:fe01,1894:fe01]
   8 -> Terratec Cinergy 400 TV                  [153B:1142]
   8 -> Terratec Cinergy 400 TV                  [153B:1142]
   9 -> Medion 5044
   9 -> Medion 5044
@@ -34,6 +34,7 @@
  33 -> AVerMedia DVD EZMaker                    [1461:10ff]
  33 -> AVerMedia DVD EZMaker                    [1461:10ff]
  34 -> Noval Prime TV 7133
  34 -> Noval Prime TV 7133
  35 -> AverMedia AverTV Studio 305              [1461:2115]
  35 -> AverMedia AverTV Studio 305              [1461:2115]
+ 36 -> UPMOST PURPLE TV                         [12ab:0800]
  37 -> Items MuchTV Plus / IT-005
  37 -> Items MuchTV Plus / IT-005
  38 -> Terratec Cinergy 200 TV                  [153B:1152]
  38 -> Terratec Cinergy 200 TV                  [153B:1152]
  39 -> LifeView FlyTV Platinum Mini             [5168:0212]
  39 -> LifeView FlyTV Platinum Mini             [5168:0212]
@@ -43,20 +44,21 @@
  43 -> :Zolid Xpert TV7134
  43 -> :Zolid Xpert TV7134
  44 -> Empire PCI TV-Radio LE
  44 -> Empire PCI TV-Radio LE
  45 -> Avermedia AVerTV Studio 307              [1461:9715]
  45 -> Avermedia AVerTV Studio 307              [1461:9715]
- 46 -> AVerMedia Cardbus TV/Radio               [1461:d6ee]
+ 46 -> AVerMedia Cardbus TV/Radio (E500)        [1461:d6ee]
  47 -> Terratec Cinergy 400 mobile              [153b:1162]
  47 -> Terratec Cinergy 400 mobile              [153b:1162]
  48 -> Terratec Cinergy 600 TV MK3              [153B:1158]
  48 -> Terratec Cinergy 600 TV MK3              [153B:1158]
  49 -> Compro VideoMate Gold+ Pal               [185b:c200]
  49 -> Compro VideoMate Gold+ Pal               [185b:c200]
  50 -> Pinnacle PCTV 300i DVB-T + PAL           [11bd:002d]
  50 -> Pinnacle PCTV 300i DVB-T + PAL           [11bd:002d]
  51 -> ProVideo PV952                           [1540:9524]
  51 -> ProVideo PV952                           [1540:9524]
  52 -> AverMedia AverTV/305                     [1461:2108]
  52 -> AverMedia AverTV/305                     [1461:2108]
+ 53 -> ASUS TV-FM 7135                          [1043:4845]
  54 -> LifeView FlyTV Platinum FM               [5168:0214,1489:0214]
  54 -> LifeView FlyTV Platinum FM               [5168:0214,1489:0214]
- 55 -> LifeView FlyDVB-T DUO                    [5168:0306]
+ 55 -> LifeView FlyDVB-T DUO                    [5168:0502,5168:0306]
  56 -> Avermedia AVerTV 307                     [1461:a70a]
  56 -> Avermedia AVerTV 307                     [1461:a70a]
  57 -> Avermedia AVerTV GO 007 FM               [1461:f31f]
  57 -> Avermedia AVerTV GO 007 FM               [1461:f31f]
  58 -> ADS Tech Instant TV (saa7135)            [1421:0350,1421:0370]
  58 -> ADS Tech Instant TV (saa7135)            [1421:0350,1421:0370]
  59 -> Kworld/Tevion V-Stream Xpert TV PVR7134
  59 -> Kworld/Tevion V-Stream Xpert TV PVR7134
- 60 -> Typhoon DVB-T Duo Digital/Analog Cardbus
- 61 -> Philips TOUGH DVB-T reference design
+ 60 -> Typhoon DVB-T Duo Digital/Analog Cardbus [4e42:0502]
+ 61 -> Philips TOUGH DVB-T reference design     [1131:2004]
  62 -> Compro VideoMate TV Gold+II
  62 -> Compro VideoMate TV Gold+II
  63 -> Kworld Xpert TV PVR7134
  63 -> Kworld Xpert TV PVR7134

+ 2 - 2
Documentation/video4linux/CARDLIST.tuner

@@ -56,9 +56,9 @@ tuner=54 - tda8290+75
 tuner=55 - LG PAL (TAPE series)
 tuner=55 - LG PAL (TAPE series)
 tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4)
 tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4)
 tuner=57 - Philips FQ1236A MK4
 tuner=57 - Philips FQ1236A MK4
-tuner=58 - Ymec TVision TVF-8531MF
+tuner=58 - Ymec TVision TVF-8531MF/8831MF/8731MF
 tuner=59 - Ymec TVision TVF-5533MF
 tuner=59 - Ymec TVision TVF-5533MF
 tuner=60 - Thomson DDT 7611 (ATSC/NTSC)
 tuner=60 - Thomson DDT 7611 (ATSC/NTSC)
-tuner=61 - Tena TNF9533-D/IF
+tuner=61 - Tena TNF9533-D/IF/TNF9533-B/DF
 tuner=62 - Philips TEA5767HN FM Radio
 tuner=62 - Philips TEA5767HN FM Radio
 tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner
 tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner

+ 37 - 37
Documentation/video4linux/bttv/Cards

@@ -20,7 +20,7 @@ All other cards only differ by additional components as tuners, sound
 decoders, EEPROMs, teletext decoders ...
 decoders, EEPROMs, teletext decoders ...
 
 
 
 
-Unsupported Cards: 
+Unsupported Cards:
 ------------------
 ------------------
 
 
 Cards with Zoran (ZR) or Philips (SAA) or ISA are not supported by
 Cards with Zoran (ZR) or Philips (SAA) or ISA are not supported by
@@ -50,11 +50,11 @@ Bt848a/Bt849 single crytal operation support possible!!!
 Miro/Pinnacle PCTV
 Miro/Pinnacle PCTV
 ------------------
 ------------------
 
 
-- Bt848 
-  some (all??) come with 2 crystals for PAL/SECAM and NTSC 
+- Bt848
+  some (all??) come with 2 crystals for PAL/SECAM and NTSC
 - PAL, SECAM or NTSC TV tuner (Philips or TEMIC)
 - PAL, SECAM or NTSC TV tuner (Philips or TEMIC)
 - MSP34xx sound decoder on add on board
 - MSP34xx sound decoder on add on board
-  decoder is supported but AFAIK does not yet work 
+  decoder is supported but AFAIK does not yet work
   (other sound MUX setting in GPIO port needed??? somebody who fixed this???)
   (other sound MUX setting in GPIO port needed??? somebody who fixed this???)
 - 1 tuner, 1 composite and 1 S-VHS input
 - 1 tuner, 1 composite and 1 S-VHS input
 - tuner type is autodetected
 - tuner type is autodetected
@@ -70,7 +70,7 @@ in 1997!
 Hauppauge Win/TV pci
 Hauppauge Win/TV pci
 --------------------
 --------------------
 
 
-There are many different versions of the Hauppauge cards with different 
+There are many different versions of the Hauppauge cards with different
 tuners (TV+Radio ...), teletext decoders.
 tuners (TV+Radio ...), teletext decoders.
 Note that even cards with same model numbers have (depending on the revision)
 Note that even cards with same model numbers have (depending on the revision)
 different chips on it.
 different chips on it.
@@ -80,22 +80,22 @@ different chips on it.
 - PAL, SECAM, NTSC or tuner with or without Radio support
 - PAL, SECAM, NTSC or tuner with or without Radio support
 
 
 e.g.:
 e.g.:
-  PAL: 
+  PAL:
   TDA5737: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners
   TDA5737: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners
   TSA5522: 1.4 GHz I2C-bus controlled synthesizer, I2C 0xc2-0xc3
   TSA5522: 1.4 GHz I2C-bus controlled synthesizer, I2C 0xc2-0xc3
-  
+
   NTSC:
   NTSC:
   TDA5731: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners
   TDA5731: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners
   TSA5518: no datasheet available on Philips site
   TSA5518: no datasheet available on Philips site
-- Philips SAA5246 or SAA5284 ( or no) Teletext decoder chip	
+- Philips SAA5246 or SAA5284 ( or no) Teletext decoder chip
   with buffer RAM (e.g. Winbond W24257AS-35: 32Kx8 CMOS static RAM)
   with buffer RAM (e.g. Winbond W24257AS-35: 32Kx8 CMOS static RAM)
   SAA5246 (I2C 0x22) is supported
   SAA5246 (I2C 0x22) is supported
-- 256 bytes EEPROM: Microchip 24LC02B or Philips 8582E2Y 
+- 256 bytes EEPROM: Microchip 24LC02B or Philips 8582E2Y
   with configuration information
   with configuration information
   I2C address 0xa0 (24LC02B also responds to 0xa2-0xaf)
   I2C address 0xa0 (24LC02B also responds to 0xa2-0xaf)
 - 1 tuner, 1 composite and (depending on model) 1 S-VHS input
 - 1 tuner, 1 composite and (depending on model) 1 S-VHS input
 - 14052B: mux for selection of sound source
 - 14052B: mux for selection of sound source
-- sound decoder: TDA9800, MSP34xx (stereo cards) 
+- sound decoder: TDA9800, MSP34xx (stereo cards)
 
 
 
 
 Askey CPH-Series
 Askey CPH-Series
@@ -108,17 +108,17 @@ Developed by TelSignal(?), OEMed by many vendors (Typhoon, Anubis, Dynalink)
     CPH05x: BT878 with FM
     CPH05x: BT878 with FM
     CPH06x: BT878 (w/o FM)
     CPH06x: BT878 (w/o FM)
     CPH07x: BT878 capture only
     CPH07x: BT878 capture only
- 
+
   TV standards:
   TV standards:
      CPH0x0: NTSC-M/M
      CPH0x0: NTSC-M/M
      CPH0x1: PAL-B/G
      CPH0x1: PAL-B/G
      CPH0x2: PAL-I/I
      CPH0x2: PAL-I/I
      CPH0x3: PAL-D/K
      CPH0x3: PAL-D/K
-     CPH0x4: SECAM-L/L 
-     CPH0x5: SECAM-B/G 
-     CPH0x6: SECAM-D/K 
-     CPH0x7: PAL-N/N 
-     CPH0x8: PAL-B/H 
+     CPH0x4: SECAM-L/L
+     CPH0x5: SECAM-B/G
+     CPH0x6: SECAM-D/K
+     CPH0x7: PAL-N/N
+     CPH0x8: PAL-B/H
      CPH0x9: PAL-M/M
      CPH0x9: PAL-M/M
 
 
   CPH03x was often sold as "TV capturer".
   CPH03x was often sold as "TV capturer".
@@ -174,7 +174,7 @@ Lifeview Flyvideo Series:
       "The FlyVideo2000 and FlyVideo2000s product name have renamed to FlyVideo98."
       "The FlyVideo2000 and FlyVideo2000s product name have renamed to FlyVideo98."
       Their Bt8x8 cards are listed as discontinued.
       Their Bt8x8 cards are listed as discontinued.
       Flyvideo 2000S was probably sold as Flyvideo 3000 in some contries(Europe?).
       Flyvideo 2000S was probably sold as Flyvideo 3000 in some contries(Europe?).
-      The new Flyvideo 2000/3000 are SAA7130/SAA7134 based. 
+      The new Flyvideo 2000/3000 are SAA7130/SAA7134 based.
 
 
   "Flyvideo II" had been the name for the 848 cards, nowadays (in Germany)
   "Flyvideo II" had been the name for the 848 cards, nowadays (in Germany)
   this name is re-used for LR50 Rev.W.
   this name is re-used for LR50 Rev.W.
@@ -235,12 +235,12 @@ Prolink
    Multimedia TV packages (card + software pack):
    Multimedia TV packages (card + software pack):
    PixelView Play TV Theater - (Model: PV-M4200) =  PixelView Play TV pro + Software
    PixelView Play TV Theater - (Model: PV-M4200) =  PixelView Play TV pro + Software
    PixelView Play TV PAK -     (Model: PV-BT878P+ REV 4E)
    PixelView Play TV PAK -     (Model: PV-BT878P+ REV 4E)
-   PixelView Play TV/VCR -     (Model: PV-M3200 REV 4C / 8D / 10A ) 
+   PixelView Play TV/VCR -     (Model: PV-M3200 REV 4C / 8D / 10A )
    PixelView Studio PAK -      (Model:    M2200 REV 4C / 8D / 10A )
    PixelView Studio PAK -      (Model:    M2200 REV 4C / 8D / 10A )
    PixelView PowerStudio PAK - (Model: PV-M3600 REV 4E)
    PixelView PowerStudio PAK - (Model: PV-M3600 REV 4E)
    PixelView DigitalVCR PAK -  (Model: PV-M2400 REV 4C / 8D / 10A )
    PixelView DigitalVCR PAK -  (Model: PV-M2400 REV 4C / 8D / 10A )
 
 
-   PixelView PlayTV PAK II (TV/FM card + usb camera)  PV-M3800 
+   PixelView PlayTV PAK II (TV/FM card + usb camera)  PV-M3800
    PixelView PlayTV XP PV-M4700,PV-M4700(w/FM)
    PixelView PlayTV XP PV-M4700,PV-M4700(w/FM)
    PixelView PlayTV DVR PV-M4600  package contents:PixelView PlayTV pro, windvr & videoMail s/w
    PixelView PlayTV DVR PV-M4600  package contents:PixelView PlayTV pro, windvr & videoMail s/w
 
 
@@ -254,7 +254,7 @@ Prolink
 
 
    DTV3000 PV-DTV3000P+ DVB-S CI = Twinhan VP-1030
    DTV3000 PV-DTV3000P+ DVB-S CI = Twinhan VP-1030
    DTV2000 DVB-S = Twinhan VP-1020
    DTV2000 DVB-S = Twinhan VP-1020
-   
+
    Video Conferencing:
    Video Conferencing:
    PixelView Meeting PAK - (Model: PV-BT878P)
    PixelView Meeting PAK - (Model: PV-BT878P)
    PixelView Meeting PAK Lite - (Model: PV-BT878P)
    PixelView Meeting PAK Lite - (Model: PV-BT878P)
@@ -308,7 +308,7 @@ KNC One
 
 
    newer Cards have saa7134, but model name stayed the same?
    newer Cards have saa7134, but model name stayed the same?
 
 
-Provideo 
+Provideo
 --------
 --------
   PV951 or PV-951 (also are sold as:
   PV951 or PV-951 (also are sold as:
    Boeder TV-FM Video Capture Card
    Boeder TV-FM Video Capture Card
@@ -353,7 +353,7 @@ AVerMedia
    AVerTV
    AVerTV
    AVerTV Stereo
    AVerTV Stereo
    AVerTV Studio (w/FM)
    AVerTV Studio (w/FM)
-   AVerMedia TV98 with Remote 
+   AVerMedia TV98 with Remote
    AVerMedia TV/FM98 Stereo
    AVerMedia TV/FM98 Stereo
    AVerMedia TVCAM98
    AVerMedia TVCAM98
    TVCapture (Bt848)
    TVCapture (Bt848)
@@ -373,7 +373,7 @@ AVerMedia
    (1) Daughterboard MB68-A with TDA9820T and TDA9840T
    (1) Daughterboard MB68-A with TDA9820T and TDA9840T
    (2) Sony NE41S soldered (stereo sound?)
    (2) Sony NE41S soldered (stereo sound?)
    (3) Daughterboard M118-A w/ pic 16c54 and 4 MHz quartz
    (3) Daughterboard M118-A w/ pic 16c54 and 4 MHz quartz
- 
+
    US site has different drivers for (as of 09/2002):
    US site has different drivers for (as of 09/2002):
    EZ Capture/InterCam PCI (BT-848 chip)
    EZ Capture/InterCam PCI (BT-848 chip)
    EZ Capture/InterCam PCI (BT-878 chip)
    EZ Capture/InterCam PCI (BT-878 chip)
@@ -437,7 +437,7 @@ Terratec
    Terra TValueRadio,             "LR102 Rev.C" printed on the PCB
    Terra TValueRadio,             "LR102 Rev.C" printed on the PCB
    Terra TV/Radio+ Version 1.0,   "80-CP2830100-0" TTTV3 printed on the PCB,
    Terra TV/Radio+ Version 1.0,   "80-CP2830100-0" TTTV3 printed on the PCB,
 				     "CPH010-E83" on the back, SAA6588T, TDA9873H
 				     "CPH010-E83" on the back, SAA6588T, TDA9873H
-   Terra TValue Version BT878,    "80-CP2830110-0 TTTV4" printed on the PCB, 
+   Terra TValue Version BT878,    "80-CP2830110-0 TTTV4" printed on the PCB,
 				     "CPH011-D83" on back
 				     "CPH011-D83" on back
    Terra TValue Version 1.0       "ceb105.PCB" (really identical to Terra TV+ Version 1.0)
    Terra TValue Version 1.0       "ceb105.PCB" (really identical to Terra TV+ Version 1.0)
    Terra TValue New Revision	  "LR102 Rec.C"
    Terra TValue New Revision	  "LR102 Rec.C"
@@ -528,7 +528,7 @@ Koutech
    KW-606RSF
    KW-606RSF
    KW-607A (capture only)
    KW-607A (capture only)
    KW-608 (Zoran capture only)
    KW-608 (Zoran capture only)
- 
+
 IODATA (jp)
 IODATA (jp)
 ------
 ------
    GV-BCTV/PCI
    GV-BCTV/PCI
@@ -542,15 +542,15 @@ Canopus (jp)
 -------
 -------
    WinDVR	= Kworld "KW-TVL878RF"
    WinDVR	= Kworld "KW-TVL878RF"
 
 
-www.sigmacom.co.kr 
+www.sigmacom.co.kr
 ------------------
 ------------------
-   Sigma Cyber TV II 
+   Sigma Cyber TV II
 
 
 www.sasem.co.kr
 www.sasem.co.kr
 ---------------
 ---------------
    Litte OnAir TV
    Litte OnAir TV
 
 
-hama 
+hama
 ----
 ----
    TV/Radio-Tuner Card, PCI (Model 44677) = CPH051
    TV/Radio-Tuner Card, PCI (Model 44677) = CPH051
 
 
@@ -638,7 +638,7 @@ Media-Surfer  (esc-kathrein.de)
 
 
 Jetway (www.jetway.com.tw)
 Jetway (www.jetway.com.tw)
 --------------------------
 --------------------------
-   JW-TV 878M 
+   JW-TV 878M
    JW-TV 878  = KWorld KW-TV878RF
    JW-TV 878  = KWorld KW-TV878RF
 
 
 Galaxis
 Galaxis
@@ -715,7 +715,7 @@ Hauppauge
   809 MyVideo
   809 MyVideo
   872 MyTV2Go FM
   872 MyTV2Go FM
 
 
- 
+
   546 WinTV Nova-S CI
   546 WinTV Nova-S CI
   543 WinTV Nova
   543 WinTV Nova
   907 Nova-S USB
   907 Nova-S USB
@@ -739,7 +739,7 @@ Hauppauge
   832 MyTV2Go
   832 MyTV2Go
   869 MyTV2Go-FM
   869 MyTV2Go-FM
   805 MyVideo (USB)
   805 MyVideo (USB)
-  
+
 
 
 Matrix-Vision
 Matrix-Vision
 -------------
 -------------
@@ -764,7 +764,7 @@ Gallant  (www.gallantcom.com) www.minton.com.tw
    Intervision IV-550 (bt8x8)
    Intervision IV-550 (bt8x8)
    Intervision IV-100 (zoran)
    Intervision IV-100 (zoran)
    Intervision IV-1000 (bt8x8)
    Intervision IV-1000 (bt8x8)
-   
+
 Asonic (www.asonic.com.cn) (website down)
 Asonic (www.asonic.com.cn) (website down)
 -----------------------------------------
 -----------------------------------------
    SkyEye tv 878
    SkyEye tv 878
@@ -804,11 +804,11 @@ Kworld (www.kworld.com.tw)
 
 
 JTT/ Justy Corp.http://www.justy.co.jp/ (www.jtt.com.jp website down)
 JTT/ Justy Corp.http://www.justy.co.jp/ (www.jtt.com.jp website down)
 ---------------------------------------------------------------------
 ---------------------------------------------------------------------
-   JTT-02 (JTT TV) "TV watchmate pro" (bt848) 
+   JTT-02 (JTT TV) "TV watchmate pro" (bt848)
 
 
 ADS www.adstech.com
 ADS www.adstech.com
 -------------------
 -------------------
-   Channel Surfer TV ( CHX-950 ) 
+   Channel Surfer TV ( CHX-950 )
    Channel Surfer TV+FM ( CHX-960FM )
    Channel Surfer TV+FM ( CHX-960FM )
 
 
 AVEC www.prochips.com
 AVEC www.prochips.com
@@ -874,7 +874,7 @@ www.ids-imaging.de
 ------------------
 ------------------
    Falcon Series (capture only)
    Falcon Series (capture only)
  In USA: http://www.theimagingsource.com/
  In USA: http://www.theimagingsource.com/
-   DFG/LC1	
+   DFG/LC1
 
 
 www.sknet-web.co.jp
 www.sknet-web.co.jp
 -------------------
 -------------------
@@ -890,7 +890,7 @@ Cybertainment
    CyberMail Xtreme
    CyberMail Xtreme
   These are Flyvideo
   These are Flyvideo
 
 
-VCR (http://www.vcrinc.com/) 
+VCR (http://www.vcrinc.com/)
 ---
 ---
   Video Catcher 16
   Video Catcher 16
 
 
@@ -920,7 +920,7 @@ Sdisilk www.sdisilk.com/
     SDI Silk 200 SDI Input Card
     SDI Silk 200 SDI Input Card
 
 
 www.euresys.com
 www.euresys.com
-    PICOLO series 
+    PICOLO series
 
 
 PMC/Pace
 PMC/Pace
 www.pacecom.co.uk website closed
 www.pacecom.co.uk website closed

+ 4 - 0
Documentation/video4linux/not-in-cx2388x-datasheet.txt

@@ -34,4 +34,8 @@ MO_OUTPUT_FORMAT (0x310164)
   2: HACTEXT
   2: HACTEXT
   1: HSFMT
   1: HSFMT
 
 
+0x47 is the sync byte for MPEG-2 transport stream packets.
+Datasheet incorrectly states to use 47 decimal. 188 is the length.
+All DVB compliant frontends output packets with this start code.
+
 =================================================================================
 =================================================================================

+ 1 - 1
MAINTAINERS

@@ -1240,7 +1240,7 @@ S:	Maintained
 
 
 IRDA SUBSYSTEM
 IRDA SUBSYSTEM
 P:	Jean Tourrilhes
 P:	Jean Tourrilhes
-L:	irda-users@lists.sourceforge.net
+L:	irda-users@lists.sourceforge.net (subscribers-only)
 W:	http://irda.sourceforge.net/
 W:	http://irda.sourceforge.net/
 S:	Maintained
 S:	Maintained
 
 

+ 1 - 1
Makefile

@@ -1,7 +1,7 @@
 VERSION = 2
 VERSION = 2
 PATCHLEVEL = 6
 PATCHLEVEL = 6
 SUBLEVEL = 13
 SUBLEVEL = 13
-EXTRAVERSION =-rc2
+EXTRAVERSION =-rc3
 NAME=Woozy Numbat
 NAME=Woozy Numbat
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*

+ 2 - 0
arch/arm/Kconfig

@@ -746,6 +746,8 @@ source "drivers/char/Kconfig"
 
 
 source "drivers/i2c/Kconfig"
 source "drivers/i2c/Kconfig"
 
 
+source "drivers/hwmon/Kconfig"
+
 #source "drivers/l3/Kconfig"
 #source "drivers/l3/Kconfig"
 
 
 source "drivers/misc/Kconfig"
 source "drivers/misc/Kconfig"

+ 1 - 1
arch/frv/mb93090-mb00/pci-irq.c

@@ -60,7 +60,7 @@ void __init pcibios_fixup_irqs(void)
 	}
 	}
 }
 }
 
 
-void __init pcibios_penalize_isa_irq(int irq)
+void __init pcibios_penalize_isa_irq(int irq, int active)
 {
 {
 }
 }
 
 

+ 2 - 0
arch/h8300/Kconfig

@@ -181,6 +181,8 @@ source "drivers/serial/Kconfig"
 
 
 source "drivers/i2c/Kconfig"
 source "drivers/i2c/Kconfig"
 
 
+source "drivers/hwmon/Kconfig"
+
 source "drivers/usb/Kconfig"
 source "drivers/usb/Kconfig"
 
 
 endmenu
 endmenu

+ 4 - 0
arch/i386/kernel/acpi/Makefile

@@ -2,3 +2,7 @@ obj-$(CONFIG_ACPI_BOOT)		:= boot.o
 obj-$(CONFIG_X86_IO_APIC)	+= earlyquirk.o
 obj-$(CONFIG_X86_IO_APIC)	+= earlyquirk.o
 obj-$(CONFIG_ACPI_SLEEP)	+= sleep.o wakeup.o
 obj-$(CONFIG_ACPI_SLEEP)	+= sleep.o wakeup.o
 
 
+ifneq ($(CONFIG_ACPI_PROCESSOR),)
+obj-y				+= cstate.o
+endif
+

+ 103 - 0
arch/i386/kernel/acpi/cstate.c

@@ -0,0 +1,103 @@
+/*
+ * arch/i386/kernel/acpi/cstate.c
+ *
+ * Copyright (C) 2005 Intel Corporation
+ * 	Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
+ * 	- Added _PDC for SMP C-states on Intel CPUs
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/acpi.h>
+
+#include <acpi/processor.h>
+#include <asm/acpi.h>
+
+static void acpi_processor_power_init_intel_pdc(struct acpi_processor_power
+						*pow)
+{
+	struct acpi_object_list *obj_list;
+	union acpi_object *obj;
+	u32 *buf;
+
+	/* allocate and initialize pdc. It will be used later. */
+	obj_list = kmalloc(sizeof(struct acpi_object_list), GFP_KERNEL);
+	if (!obj_list) {
+		printk(KERN_ERR "Memory allocation error\n");
+		return;
+	}
+
+	obj = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
+	if (!obj) {
+		printk(KERN_ERR "Memory allocation error\n");
+		kfree(obj_list);
+		return;
+	}
+
+	buf = kmalloc(12, GFP_KERNEL);
+	if (!buf) {
+		printk(KERN_ERR "Memory allocation error\n");
+		kfree(obj);
+		kfree(obj_list);
+		return;
+	}
+
+	buf[0] = ACPI_PDC_REVISION_ID;
+	buf[1] = 1;
+	buf[2] = ACPI_PDC_C_CAPABILITY_SMP;
+
+	obj->type = ACPI_TYPE_BUFFER;
+	obj->buffer.length = 12;
+	obj->buffer.pointer = (u8 *) buf;
+	obj_list->count = 1;
+	obj_list->pointer = obj;
+	pow->pdc = obj_list;
+
+	return;
+}
+
+/* Initialize _PDC data based on the CPU vendor */
+void acpi_processor_power_init_pdc(struct acpi_processor_power *pow,
+				   unsigned int cpu)
+{
+	struct cpuinfo_x86 *c = cpu_data + cpu;
+
+	pow->pdc = NULL;
+	if (c->x86_vendor == X86_VENDOR_INTEL)
+		acpi_processor_power_init_intel_pdc(pow);
+
+	return;
+}
+
+EXPORT_SYMBOL(acpi_processor_power_init_pdc);
+
+/*
+ * Initialize bm_flags based on the CPU cache properties
+ * On SMP it depends on cache configuration
+ * - When cache is not shared among all CPUs, we flush cache
+ *   before entering C3.
+ * - When cache is shared among all CPUs, we use bm_check
+ *   mechanism as in UP case
+ *
+ * This routine is called only after all the CPUs are online
+ */
+void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags,
+					unsigned int cpu)
+{
+	struct cpuinfo_x86 *c = cpu_data + cpu;
+
+	flags->bm_check = 0;
+	if (num_online_cpus() == 1)
+		flags->bm_check = 1;
+	else if (c->x86_vendor == X86_VENDOR_INTEL) {
+		/*
+		 * Today all CPUs that support C3 share cache.
+		 * TBD: This needs to look at cache shared map, once
+		 * multi-core detection patch makes to the base.
+		 */
+		flags->bm_check = 1;
+	}
+}
+
+EXPORT_SYMBOL(acpi_processor_power_init_bm_check);

+ 3 - 2
arch/i386/kernel/acpi/wakeup.S

@@ -74,8 +74,9 @@ wakeup_code:
 	movw	%ax,%fs
 	movw	%ax,%fs
 	movw	$0x0e00 + 'i', %fs:(0x12)
 	movw	$0x0e00 + 'i', %fs:(0x12)
 	
 	
-	# need a gdt
-	lgdt	real_save_gdt - wakeup_code
+	# need a gdt -- use lgdtl to force 32-bit operands, in case
+	# the GDT is located past 16 megabytes.
+	lgdtl	real_save_gdt - wakeup_code
 
 
 	movl	real_save_cr0 - wakeup_code, %eax
 	movl	real_save_cr0 - wakeup_code, %eax
 	movl	%eax, %cr0
 	movl	%eax, %cr0

+ 1 - 1
arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c

@@ -375,7 +375,7 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy *policy)
 	arg0.buffer.pointer = (u8 *) arg0_buf;
 	arg0.buffer.pointer = (u8 *) arg0_buf;
 	arg0_buf[0] = ACPI_PDC_REVISION_ID;
 	arg0_buf[0] = ACPI_PDC_REVISION_ID;
 	arg0_buf[1] = 1;
 	arg0_buf[1] = 1;
-	arg0_buf[2] = ACPI_PDC_EST_CAPABILITY_SMP | ACPI_PDC_EST_CAPABILITY_MSR;
+	arg0_buf[2] = ACPI_PDC_EST_CAPABILITY_SMP_MSR;
 
 
 	p.pdc = &arg_list;
 	p.pdc = &arg_list;
 
 

+ 3 - 0
arch/i386/kernel/syscall_table.S

@@ -291,3 +291,6 @@ ENTRY(sys_call_table)
 	.long sys_keyctl
 	.long sys_keyctl
 	.long sys_ioprio_set
 	.long sys_ioprio_set
 	.long sys_ioprio_get		/* 290 */
 	.long sys_ioprio_get		/* 290 */
+	.long sys_inotify_init
+	.long sys_inotify_add_watch
+	.long sys_inotify_rm_watch

+ 10 - 6
arch/i386/pci/irq.c

@@ -1051,24 +1051,28 @@ static int __init pcibios_irq_init(void)
 subsys_initcall(pcibios_irq_init);
 subsys_initcall(pcibios_irq_init);
 
 
 
 
-static void pirq_penalize_isa_irq(int irq)
+static void pirq_penalize_isa_irq(int irq, int active)
 {
 {
 	/*
 	/*
 	 *  If any ISAPnP device reports an IRQ in its list of possible
 	 *  If any ISAPnP device reports an IRQ in its list of possible
 	 *  IRQ's, we try to avoid assigning it to PCI devices.
 	 *  IRQ's, we try to avoid assigning it to PCI devices.
 	 */
 	 */
-	if (irq < 16)
-		pirq_penalty[irq] += 100;
+	if (irq < 16) {
+		if (active)
+			pirq_penalty[irq] += 1000;
+		else
+			pirq_penalty[irq] += 100;
+	}
 }
 }
 
 
-void pcibios_penalize_isa_irq(int irq)
+void pcibios_penalize_isa_irq(int irq, int active)
 {
 {
 #ifdef CONFIG_ACPI_PCI
 #ifdef CONFIG_ACPI_PCI
 	if (!acpi_noirq)
 	if (!acpi_noirq)
-		acpi_penalize_isa_irq(irq);
+		acpi_penalize_isa_irq(irq, active);
 	else
 	else
 #endif
 #endif
-		pirq_penalize_isa_irq(irq);
+		pirq_penalize_isa_irq(irq, active);
 }
 }
 
 
 static int pirq_enable_irq(struct pci_dev *dev)
 static int pirq_enable_irq(struct pci_dev *dev)

+ 1 - 1
arch/i386/pci/visws.c

@@ -21,7 +21,7 @@ static int pci_visws_enable_irq(struct pci_dev *dev) { return 0; }
 
 
 int (*pcibios_enable_irq)(struct pci_dev *dev) = &pci_visws_enable_irq;
 int (*pcibios_enable_irq)(struct pci_dev *dev) = &pci_visws_enable_irq;
 
 
-void __init pcibios_penalize_isa_irq(int irq) {}
+void __init pcibios_penalize_isa_irq(int irq, int active) {}
 
 
 
 
 unsigned int pci_bus0, pci_bus1;
 unsigned int pci_bus0, pci_bus1;

+ 54 - 0
arch/ia64/kernel/acpi.c

@@ -11,6 +11,7 @@
  *  Copyright (C) 2001 Jenna Hall <jenna.s.hall@intel.com>
  *  Copyright (C) 2001 Jenna Hall <jenna.s.hall@intel.com>
  *  Copyright (C) 2001 Takayoshi Kochi <t-kochi@bq.jp.nec.com>
  *  Copyright (C) 2001 Takayoshi Kochi <t-kochi@bq.jp.nec.com>
  *  Copyright (C) 2002 Erich Focht <efocht@ess.nec.de>
  *  Copyright (C) 2002 Erich Focht <efocht@ess.nec.de>
+ *  Copyright (C) 2004 Ashok Raj <ashok.raj@intel.com>
  *
  *
  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  *
  *
@@ -67,6 +68,11 @@ EXPORT_SYMBOL(pm_power_off);
 unsigned char acpi_kbd_controller_present = 1;
 unsigned char acpi_kbd_controller_present = 1;
 unsigned char acpi_legacy_devices;
 unsigned char acpi_legacy_devices;
 
 
+static unsigned int __initdata acpi_madt_rev;
+
+unsigned int acpi_cpei_override;
+unsigned int acpi_cpei_phys_cpuid;
+
 #define MAX_SAPICS 256
 #define MAX_SAPICS 256
 u16 ia64_acpiid_to_sapicid[MAX_SAPICS] =
 u16 ia64_acpiid_to_sapicid[MAX_SAPICS] =
 	{ [0 ... MAX_SAPICS - 1] = -1 };
 	{ [0 ... MAX_SAPICS - 1] = -1 };
@@ -265,10 +271,56 @@ acpi_parse_plat_int_src (
 						(plintsrc->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL);
 						(plintsrc->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL);
 
 
 	platform_intr_list[plintsrc->type] = vector;
 	platform_intr_list[plintsrc->type] = vector;
+	if (acpi_madt_rev > 1) {
+		acpi_cpei_override = plintsrc->plint_flags.cpei_override_flag;
+	}
+
+	/*
+	 * Save the physical id, so we can check when its being removed
+	 */
+	acpi_cpei_phys_cpuid = ((plintsrc->id << 8) | (plintsrc->eid)) & 0xffff;
+
 	return 0;
 	return 0;
 }
 }
 
 
 
 
+unsigned int can_cpei_retarget(void)
+{
+	extern int cpe_vector;
+
+	/*
+	 * Only if CPEI is supported and the override flag
+	 * is present, otherwise return that its re-targettable
+	 * if we are in polling mode.
+	 */
+	if (cpe_vector > 0 && !acpi_cpei_override)
+		return 0;
+	else
+		return 1;
+}
+
+unsigned int is_cpu_cpei_target(unsigned int cpu)
+{
+	unsigned int logical_id;
+
+	logical_id = cpu_logical_id(acpi_cpei_phys_cpuid);
+
+	if (logical_id == cpu)
+		return 1;
+	else
+		return 0;
+}
+
+void set_cpei_target_cpu(unsigned int cpu)
+{
+	acpi_cpei_phys_cpuid = cpu_physical_id(cpu);
+}
+
+unsigned int get_cpei_target_cpu(void)
+{
+	return acpi_cpei_phys_cpuid;
+}
+
 static int __init
 static int __init
 acpi_parse_int_src_ovr (
 acpi_parse_int_src_ovr (
 	acpi_table_entry_header *header, const unsigned long end)
 	acpi_table_entry_header *header, const unsigned long end)
@@ -326,6 +378,8 @@ acpi_parse_madt (unsigned long phys_addr, unsigned long size)
 
 
 	acpi_madt = (struct acpi_table_madt *) __va(phys_addr);
 	acpi_madt = (struct acpi_table_madt *) __va(phys_addr);
 
 
+	acpi_madt_rev = acpi_madt->header.revision;
+
 	/* remember the value for reference after free_initmem() */
 	/* remember the value for reference after free_initmem() */
 #ifdef CONFIG_ITANIUM
 #ifdef CONFIG_ITANIUM
 	has_8259 = 1; /* Firmware on old Itanium systems is broken */
 	has_8259 = 1; /* Firmware on old Itanium systems is broken */

+ 1 - 1
arch/ia64/kernel/mca.c

@@ -271,7 +271,7 @@ ia64_mca_log_sal_error_record(int sal_info_type)
 
 
 #ifdef CONFIG_ACPI
 #ifdef CONFIG_ACPI
 
 
-static int cpe_vector = -1;
+int cpe_vector = -1;
 
 
 static irqreturn_t
 static irqreturn_t
 ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs)
 ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs)

+ 1 - 0
arch/ia64/kernel/process.c

@@ -196,6 +196,7 @@ update_pal_halt_status(int status)
 void
 void
 default_idle (void)
 default_idle (void)
 {
 {
+	local_irq_enable();
 	while (!need_resched())
 	while (!need_resched())
 		if (can_do_pal_halt)
 		if (can_do_pal_halt)
 			safe_halt();
 			safe_halt();

+ 3 - 0
arch/ia64/kernel/setup.c

@@ -40,6 +40,8 @@
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
 #include <linux/efi.h>
 #include <linux/efi.h>
 #include <linux/initrd.h>
 #include <linux/initrd.h>
+#include <linux/platform.h>
+#include <linux/pm.h>
 
 
 #include <asm/ia32.h>
 #include <asm/ia32.h>
 #include <asm/machvec.h>
 #include <asm/machvec.h>
@@ -783,6 +785,7 @@ cpu_init (void)
 	/* size of physical stacked register partition plus 8 bytes: */
 	/* size of physical stacked register partition plus 8 bytes: */
 	__get_cpu_var(ia64_phys_stacked_size_p8) = num_phys_stacked*8 + 8;
 	__get_cpu_var(ia64_phys_stacked_size_p8) = num_phys_stacked*8 + 8;
 	platform_cpu_init();
 	platform_cpu_init();
+	pm_idle = default_idle;
 }
 }
 
 
 void
 void

+ 7 - 0
arch/ia64/kernel/topology.c

@@ -36,6 +36,13 @@ int arch_register_cpu(int num)
 	parent = &sysfs_nodes[cpu_to_node(num)];
 	parent = &sysfs_nodes[cpu_to_node(num)];
 #endif /* CONFIG_NUMA */
 #endif /* CONFIG_NUMA */
 
 
+	/*
+	 * If CPEI cannot be re-targetted, and this is
+	 * CPEI target, then dont create the control file
+	 */
+	if (!can_cpei_retarget() && is_cpu_cpei_target(num))
+		sysfs_cpus[num].cpu.no_control = 1;
+
 	return register_cpu(&sysfs_cpus[num].cpu, num, parent);
 	return register_cpu(&sysfs_cpus[num].cpu, num, parent);
 }
 }
 
 

+ 6 - 0
arch/ppc/kernel/machine_kexec.c

@@ -28,6 +28,12 @@ typedef NORET_TYPE void (*relocate_new_kernel_t)(
 const extern unsigned char relocate_new_kernel[];
 const extern unsigned char relocate_new_kernel[];
 const extern unsigned int relocate_new_kernel_size;
 const extern unsigned int relocate_new_kernel_size;
 
 
+/*
+ * Provide a dummy crash_notes definition while crash dump arrives to ppc.
+ * This prevents breakage of crash_notes attribute in kernel/ksysfs.c.
+ */
+void *crash_notes = NULL;
+
 void machine_shutdown(void)
 void machine_shutdown(void)
 {
 {
 	if (ppc_md.machine_shutdown)
 	if (ppc_md.machine_shutdown)

+ 2 - 0
arch/sparc64/Kconfig

@@ -649,6 +649,8 @@ source "drivers/input/Kconfig"
 
 
 source "drivers/i2c/Kconfig"
 source "drivers/i2c/Kconfig"
 
 
+source "drivers/hwmon/Kconfig"
+
 source "fs/Kconfig"
 source "fs/Kconfig"
 
 
 source "drivers/media/Kconfig"
 source "drivers/media/Kconfig"

+ 2 - 1
arch/um/Makefile

@@ -140,7 +140,8 @@ endef
 #When cleaning we don't include .config, so we don't include
 #When cleaning we don't include .config, so we don't include
 #TT or skas makefiles and don't clean skas_ptregs.h.
 #TT or skas makefiles and don't clean skas_ptregs.h.
 CLEAN_FILES += linux x.i gmon.out $(ARCH_DIR)/include/uml-config.h \
 CLEAN_FILES += linux x.i gmon.out $(ARCH_DIR)/include/uml-config.h \
-	$(GEN_HEADERS) $(ARCH_DIR)/include/skas_ptregs.h
+	$(GEN_HEADERS) $(ARCH_DIR)/include/skas_ptregs.h \
+	$(ARCH_DIR)/include/user_constants.h
 
 
 MRPROPER_FILES += $(SYMLINK_HEADERS) $(ARCH_SYMLINKS) \
 MRPROPER_FILES += $(SYMLINK_HEADERS) $(ARCH_SYMLINKS) \
 	$(addprefix $(ARCH_DIR)/kernel/,$(KERN_SYMLINKS)) $(ARCH_DIR)/os \
 	$(addprefix $(ARCH_DIR)/kernel/,$(KERN_SYMLINKS)) $(ARCH_DIR)/os \

+ 2 - 2
arch/x86_64/kernel/vmlinux.lds.S

@@ -62,8 +62,8 @@ SECTIONS
   }
   }
 
 
 #define VSYSCALL_ADDR (-10*1024*1024)
 #define VSYSCALL_ADDR (-10*1024*1024)
-#define VSYSCALL_PHYS_ADDR ((LOADADDR(.data.cacheline_aligned) + SIZEOF(.data.cacheline_aligned) + 4095) & ~(4095))
-#define VSYSCALL_VIRT_ADDR ((ADDR(.data.cacheline_aligned) + SIZEOF(.data.cacheline_aligned) + 4095) & ~(4095))
+#define VSYSCALL_PHYS_ADDR ((LOADADDR(.data.read_mostly) + SIZEOF(.data.read_mostly) + 4095) & ~(4095))
+#define VSYSCALL_VIRT_ADDR ((ADDR(.data.read_mostly) + SIZEOF(.data.read_mostly) + 4095) & ~(4095))
 
 
 #define VLOAD_OFFSET (VSYSCALL_ADDR - VSYSCALL_PHYS_ADDR)
 #define VLOAD_OFFSET (VSYSCALL_ADDR - VSYSCALL_PHYS_ADDR)
 #define VLOAD(x) (ADDR(x) - VLOAD_OFFSET)
 #define VLOAD(x) (ADDR(x) - VLOAD_OFFSET)

+ 0 - 1
arch/xtensa/kernel/asm-offsets.c

@@ -15,7 +15,6 @@
 #include <asm/processor.h>
 #include <asm/processor.h>
 
 
 #include <linux/types.h>
 #include <linux/types.h>
-#include <linux/sched.h>
 #include <linux/stddef.h>
 #include <linux/stddef.h>
 #include <linux/thread_info.h>
 #include <linux/thread_info.h>
 #include <linux/ptrace.h>
 #include <linux/ptrace.h>

+ 2 - 2
arch/xtensa/kernel/syscalls.c

@@ -69,8 +69,8 @@ int sys_pipe(int __user *userfds)
 /*
 /*
  * Common code for old and new mmaps.
  * Common code for old and new mmaps.
  */
  */
-long sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
-	       unsigned long flags, unsigned long fd, unsigned long pgoff)
+long sys_mmap(unsigned long addr, unsigned long len, unsigned long prot,
+	      unsigned long flags, unsigned long fd, unsigned long pgoff)
 {
 {
 	int error = -EBADF;
 	int error = -EBADF;
 	struct file * file = NULL;
 	struct file * file = NULL;

+ 3 - 3
arch/xtensa/kernel/syscalls.h

@@ -42,7 +42,7 @@ SYSCALL(sys_mknod, 3)
 SYSCALL(sys_chmod, 2)			/* 15 */
 SYSCALL(sys_chmod, 2)			/* 15 */
 SYSCALL(sys_lchown, 3)
 SYSCALL(sys_lchown, 3)
 SYSCALL(sys_ni_syscall, 0)
 SYSCALL(sys_ni_syscall, 0)
-SYSCALL(sys_stat, 2)
+SYSCALL(sys_newstat, 2)
 SYSCALL(sys_lseek, 3)
 SYSCALL(sys_lseek, 3)
 SYSCALL(sys_getpid, 0)			/* 20 */
 SYSCALL(sys_getpid, 0)			/* 20 */
 SYSCALL(sys_mount, 5)
 SYSCALL(sys_mount, 5)
@@ -52,7 +52,7 @@ SYSCALL(sys_getuid, 0)
 SYSCALL(sys_ni_syscall, 1)		/* 25 */
 SYSCALL(sys_ni_syscall, 1)		/* 25 */
 SYSCALL(sys_ptrace, 4)
 SYSCALL(sys_ptrace, 4)
 SYSCALL(sys_ni_syscall, 1)
 SYSCALL(sys_ni_syscall, 1)
-SYSCALL(sys_fstat, 2)
+SYSCALL(sys_newfstat, 2)
 SYSCALL(sys_ni_syscall, 0)
 SYSCALL(sys_ni_syscall, 0)
 SYSCALL(sys_utime, 2)			/* 30 */
 SYSCALL(sys_utime, 2)			/* 30 */
 SYSCALL(sys_ni_syscall, 0)
 SYSCALL(sys_ni_syscall, 0)
@@ -108,7 +108,7 @@ SYSCALL(sys_getgroups, 2)		/* 80 */
 SYSCALL(sys_setgroups, 2)
 SYSCALL(sys_setgroups, 2)
 SYSCALL(sys_ni_syscall, 0)
 SYSCALL(sys_ni_syscall, 0)
 SYSCALL(sys_symlink, 2)
 SYSCALL(sys_symlink, 2)
-SYSCALL(sys_lstat, 2)
+SYSCALL(sys_newlstat, 2)
 SYSCALL(sys_readlink, 3)		/* 85 */
 SYSCALL(sys_readlink, 3)		/* 85 */
 SYSCALL(sys_uselib, 1)
 SYSCALL(sys_uselib, 1)
 SYSCALL(sys_swapon, 2)
 SYSCALL(sys_swapon, 2)

+ 2 - 2
arch/xtensa/kernel/traps.c

@@ -29,6 +29,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/stringify.h>
 #include <linux/stringify.h>
 #include <linux/kallsyms.h>
 #include <linux/kallsyms.h>
+#include <linux/delay.h>
 
 
 #include <asm/ptrace.h>
 #include <asm/ptrace.h>
 #include <asm/timex.h>
 #include <asm/timex.h>
@@ -488,8 +489,7 @@ void die(const char * str, struct pt_regs * regs, long err)
 
 
 	if (panic_on_oops) {
 	if (panic_on_oops) {
 		printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
 		printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
-		set_current_state(TASK_UNINTERRUPTIBLE);
-		schedule_timeout(5 * HZ);
+		ssleep(5);
 		panic("Fatal exception");
 		panic("Fatal exception");
 	}
 	}
 	do_exit(err);
 	do_exit(err);

+ 3 - 3
arch/xtensa/kernel/vmlinux.lds.S

@@ -90,10 +90,10 @@ SECTIONS
     *(.literal .text)
     *(.literal .text)
     *(.srom.text)
     *(.srom.text)
     VMLINUX_SYMBOL(__sched_text_start) = .;
     VMLINUX_SYMBOL(__sched_text_start) = .;
-    *(.sched.text.literal .sched.text)
+    *(.sched.literal .sched.text)
     VMLINUX_SYMBOL(__sched_text_end) = .;
     VMLINUX_SYMBOL(__sched_text_end) = .;
     VMLINUX_SYMBOL(__lock_text_start) = .;
     VMLINUX_SYMBOL(__lock_text_start) = .;
-    *(.spinlock.text.literal .spinlock.text)
+    *(.spinlock.literal .spinlock.text)
     VMLINUX_SYMBOL(__lock_text_end) = .;
     VMLINUX_SYMBOL(__lock_text_end) = .;
 
 
   }
   }
@@ -164,7 +164,7 @@ SECTIONS
   __init_begin = .;
   __init_begin = .;
   .init.text : {
   .init.text : {
   	_sinittext = .;
   	_sinittext = .;
-	*(.init.text.literal) *(.init.text)
+	*(.init.literal) *(.init.text)
 	_einittext = .;
 	_einittext = .;
   }
   }
 
 

+ 2 - 0
drivers/Kconfig

@@ -44,6 +44,8 @@ source "drivers/i2c/Kconfig"
 
 
 source "drivers/w1/Kconfig"
 source "drivers/w1/Kconfig"
 
 
+source "drivers/hwmon/Kconfig"
+
 source "drivers/misc/Kconfig"
 source "drivers/misc/Kconfig"
 
 
 source "drivers/media/Kconfig"
 source "drivers/media/Kconfig"

+ 1 - 0
drivers/Makefile

@@ -52,6 +52,7 @@ obj-$(CONFIG_INPUT)		+= input/
 obj-$(CONFIG_I2O)		+= message/
 obj-$(CONFIG_I2O)		+= message/
 obj-$(CONFIG_I2C)		+= i2c/
 obj-$(CONFIG_I2C)		+= i2c/
 obj-$(CONFIG_W1)		+= w1/
 obj-$(CONFIG_W1)		+= w1/
+obj-$(CONFIG_HWMON)		+= hwmon/
 obj-$(CONFIG_PHONE)		+= telephony/
 obj-$(CONFIG_PHONE)		+= telephony/
 obj-$(CONFIG_MD)		+= md/
 obj-$(CONFIG_MD)		+= md/
 obj-$(CONFIG_BT)		+= bluetooth/
 obj-$(CONFIG_BT)		+= bluetooth/

+ 25 - 13
drivers/acpi/Kconfig

@@ -3,6 +3,7 @@
 #
 #
 
 
 menu "ACPI (Advanced Configuration and Power Interface) Support"
 menu "ACPI (Advanced Configuration and Power Interface) Support"
+	depends on PM
 	depends on !X86_VISWS
 	depends on !X86_VISWS
 	depends on !IA64_HP_SIM
 	depends on !IA64_HP_SIM
 	depends on IA64 || X86
 	depends on IA64 || X86
@@ -48,7 +49,6 @@ config ACPI_BOOT
 
 
 config ACPI_INTERPRETER
 config ACPI_INTERPRETER
 	bool
 	bool
-	depends on !IA64_SGI_SN
 	default y
 	default y
 
 
 if ACPI_INTERPRETER
 if ACPI_INTERPRETER
@@ -79,6 +79,14 @@ config ACPI_SLEEP_PROC_FS
 	depends on ACPI_SLEEP && PROC_FS
 	depends on ACPI_SLEEP && PROC_FS
 	default y
 	default y
 
 
+config ACPI_SLEEP_PROC_SLEEP
+	bool "/proc/acpi/sleep (deprecated)"
+	depends on ACPI_SLEEP_PROC_FS
+	default n
+	---help---
+	  Create /proc/acpi/sleep
+	  Deprecated by /sys/power/state
+
 config ACPI_AC
 config ACPI_AC
 	tristate "AC Adapter"
 	tristate "AC Adapter"
 	depends on X86
 	depends on X86
@@ -99,7 +107,6 @@ config ACPI_BATTERY
 
 
 config ACPI_BUTTON
 config ACPI_BUTTON
 	tristate "Button"
 	tristate "Button"
-	depends on !IA64_SGI_SN
 	default m
 	default m
 	help
 	help
 	  This driver registers for events based on buttons, such as the
 	  This driver registers for events based on buttons, such as the
@@ -111,7 +118,6 @@ config ACPI_BUTTON
 config ACPI_VIDEO
 config ACPI_VIDEO
 	tristate "Video"
 	tristate "Video"
 	depends on EXPERIMENTAL
 	depends on EXPERIMENTAL
-	depends on !IA64_SGI_SN
 	default m
 	default m
 	help
 	help
 	  This driver implement the ACPI Extensions For Display Adapters
 	  This driver implement the ACPI Extensions For Display Adapters
@@ -122,9 +128,17 @@ config ACPI_VIDEO
 	  Note that this is an ref. implementation only.  It may or may not work
 	  Note that this is an ref. implementation only.  It may or may not work
 	  for your integrated video device.
 	  for your integrated video device.
 
 
+config ACPI_HOTKEY
+	tristate "Generic Hotkey"
+	depends on ACPI_INTERPRETER
+	depends on EXPERIMENTAL
+	depends on !IA64_SGI_SN
+	default m
+	help
+	ACPI generic hotkey
+
 config ACPI_FAN
 config ACPI_FAN
 	tristate "Fan"
 	tristate "Fan"
-	depends on !IA64_SGI_SN
 	default m
 	default m
 	help
 	help
 	  This driver adds support for ACPI fan devices, allowing user-mode 
 	  This driver adds support for ACPI fan devices, allowing user-mode 
@@ -132,7 +146,6 @@ config ACPI_FAN
 
 
 config ACPI_PROCESSOR
 config ACPI_PROCESSOR
 	tristate "Processor"
 	tristate "Processor"
-	depends on !IA64_SGI_SN
 	default m
 	default m
 	help
 	help
 	  This driver installs ACPI as the idle handler for Linux, and uses
 	  This driver installs ACPI as the idle handler for Linux, and uses
@@ -142,7 +155,6 @@ config ACPI_PROCESSOR
 config ACPI_HOTPLUG_CPU
 config ACPI_HOTPLUG_CPU
 	bool "Processor Hotplug (EXPERIMENTAL)"
 	bool "Processor Hotplug (EXPERIMENTAL)"
 	depends on ACPI_PROCESSOR && HOTPLUG_CPU && EXPERIMENTAL
 	depends on ACPI_PROCESSOR && HOTPLUG_CPU && EXPERIMENTAL
-	depends on !IA64_SGI_SN
 	select ACPI_CONTAINER
 	select ACPI_CONTAINER
 	default n
 	default n
 	 ---help---
 	 ---help---
@@ -262,7 +274,6 @@ config ACPI_BLACKLIST_YEAR
 
 
 config ACPI_DEBUG
 config ACPI_DEBUG
 	bool "Debug Statements"
 	bool "Debug Statements"
-	depends on !IA64_SGI_SN
 	default n
 	default n
 	help
 	help
 	  The ACPI driver can optionally report errors with a great deal
 	  The ACPI driver can optionally report errors with a great deal
@@ -271,7 +282,6 @@ config ACPI_DEBUG
 
 
 config ACPI_BUS
 config ACPI_BUS
 	bool
 	bool
-	depends on !IA64_SGI_SN
 	default y
 	default y
 
 
 config ACPI_EC
 config ACPI_EC
@@ -285,17 +295,14 @@ config ACPI_EC
 
 
 config ACPI_POWER
 config ACPI_POWER
 	bool
 	bool
-	depends on !IA64_SGI_SN
 	default y
 	default y
 
 
 config ACPI_PCI
 config ACPI_PCI
 	bool
 	bool
-	depends on !IA64_SGI_SN
 	default PCI
 	default PCI
 
 
 config ACPI_SYSTEM
 config ACPI_SYSTEM
 	bool
 	bool
-	depends on !IA64_SGI_SN
 	default y
 	default y
 	help
 	help
 	  This driver will enable your system to shut down using ACPI, and
 	  This driver will enable your system to shut down using ACPI, and
@@ -327,8 +334,13 @@ config ACPI_CONTAINER
 	depends on EXPERIMENTAL
 	depends on EXPERIMENTAL
 	default (ACPI_HOTPLUG_MEMORY || ACPI_HOTPLUG_CPU || ACPI_HOTPLUG_IO)
 	default (ACPI_HOTPLUG_MEMORY || ACPI_HOTPLUG_CPU || ACPI_HOTPLUG_IO)
 	 ---help---
 	 ---help---
-	 	This is the ACPI generic container driver which supports
-		ACPI0004, PNP0A05 and PNP0A06 devices
+	  This allows _physical_ insertion and removal of CPUs and memory.
+	  This can be useful, for example, on NUMA machines that support
+	  ACPI based physical hotplug of nodes, or non-NUMA machines that
+	  support physical cpu/memory hot-plug.
+
+	  If one selects "m", this driver can be loaded with
+	  "modprobe acpi_container".
 
 
 config ACPI_HOTPLUG_MEMORY
 config ACPI_HOTPLUG_MEMORY
 	tristate "Memory Hotplug"
 	tristate "Memory Hotplug"

+ 3 - 2
drivers/acpi/Makefile

@@ -36,13 +36,14 @@ processor-objs	+= processor_perflib.o
 endif
 endif
 
 
 obj-$(CONFIG_ACPI_BUS)		+= sleep/
 obj-$(CONFIG_ACPI_BUS)		+= sleep/
-obj-$(CONFIG_ACPI_BUS)		+= bus.o
+obj-$(CONFIG_ACPI_BUS)		+= bus.o glue.o
 obj-$(CONFIG_ACPI_AC) 		+= ac.o
 obj-$(CONFIG_ACPI_AC) 		+= ac.o
 obj-$(CONFIG_ACPI_BATTERY)	+= battery.o
 obj-$(CONFIG_ACPI_BATTERY)	+= battery.o
 obj-$(CONFIG_ACPI_BUTTON)	+= button.o
 obj-$(CONFIG_ACPI_BUTTON)	+= button.o
 obj-$(CONFIG_ACPI_EC)		+= ec.o
 obj-$(CONFIG_ACPI_EC)		+= ec.o
 obj-$(CONFIG_ACPI_FAN)		+= fan.o
 obj-$(CONFIG_ACPI_FAN)		+= fan.o
-obj-$(CONFIG_ACPI_VIDEO)	+= video.o
+obj-$(CONFIG_ACPI_VIDEO)	+= video.o 
+obj-$(CONFIG_ACPI_HOTKEY)	+= hotkey.o
 obj-$(CONFIG_ACPI_PCI)		+= pci_root.o pci_link.o pci_irq.o pci_bind.o
 obj-$(CONFIG_ACPI_PCI)		+= pci_root.o pci_link.o pci_irq.o pci_bind.o
 obj-$(CONFIG_ACPI_POWER)	+= power.o
 obj-$(CONFIG_ACPI_POWER)	+= power.o
 obj-$(CONFIG_ACPI_PROCESSOR)	+= processor.o
 obj-$(CONFIG_ACPI_PROCESSOR)	+= processor.o

+ 4 - 0
drivers/acpi/asus_acpi.c

@@ -1204,6 +1204,10 @@ static int __init asus_acpi_init(void)
 	if (acpi_disabled)
 	if (acpi_disabled)
 		return -ENODEV;
 		return -ENODEV;
 
 
+	if (!acpi_specific_hotkey_enabled){
+		printk(KERN_ERR "Using generic hotkey driver\n");
+		return -ENODEV;	
+	}
 	asus_proc_dir = proc_mkdir(PROC_ASUS, acpi_root_dir);
 	asus_proc_dir = proc_mkdir(PROC_ASUS, acpi_root_dir);
 	if (!asus_proc_dir) {
 	if (!asus_proc_dir) {
 		printk(KERN_ERR "Asus ACPI: Unable to create /proc entry\n");
 		printk(KERN_ERR "Asus ACPI: Unable to create /proc entry\n");

+ 7 - 1
drivers/acpi/bus.c

@@ -212,6 +212,12 @@ acpi_bus_set_power (
 		ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device is not power manageable\n"));
 		ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device is not power manageable\n"));
 		return_VALUE(-ENODEV);
 		return_VALUE(-ENODEV);
 	}
 	}
+	/*
+	 * Get device's current power state if it's unknown
+	 * This means device power state isn't initialized or previous setting failed
+	 */
+	if (device->power.state == ACPI_STATE_UNKNOWN)
+		acpi_bus_get_power(device->handle, &device->power.state);
 	if (state == device->power.state) {
 	if (state == device->power.state) {
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n", state));
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n", state));
 		return_VALUE(0);
 		return_VALUE(0);
@@ -231,7 +237,7 @@ acpi_bus_set_power (
 	 * On transitions to a high-powered state we first apply power (via
 	 * On transitions to a high-powered state we first apply power (via
 	 * power resources) then evalute _PSx.  Conversly for transitions to
 	 * power resources) then evalute _PSx.  Conversly for transitions to
 	 * a lower-powered state.
 	 * a lower-powered state.
-	 */ 
+	 */
 	if (state < device->power.state) {
 	if (state < device->power.state) {
 		if (device->power.flags.power_resources) {
 		if (device->power.flags.power_resources) {
 			result = acpi_power_transition(device, state);
 			result = acpi_power_transition(device, state);

+ 1 - 244
drivers/acpi/button.c

@@ -26,9 +26,6 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/types.h>
-#include <linux/proc_fs.h>
-#include <linux/seq_file.h>
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 #include <acpi/acpi_drivers.h>
 
 
@@ -36,9 +33,6 @@
 #define ACPI_BUTTON_COMPONENT		0x00080000
 #define ACPI_BUTTON_COMPONENT		0x00080000
 #define ACPI_BUTTON_DRIVER_NAME		"ACPI Button Driver"
 #define ACPI_BUTTON_DRIVER_NAME		"ACPI Button Driver"
 #define ACPI_BUTTON_CLASS		"button"
 #define ACPI_BUTTON_CLASS		"button"
-#define ACPI_BUTTON_FILE_INFO		"info"
-#define ACPI_BUTTON_FILE_STATE		"state"
-#define ACPI_BUTTON_TYPE_UNKNOWN	0x00
 #define ACPI_BUTTON_NOTIFY_STATUS	0x80
 #define ACPI_BUTTON_NOTIFY_STATUS	0x80
 
 
 #define ACPI_BUTTON_SUBCLASS_POWER	"power"
 #define ACPI_BUTTON_SUBCLASS_POWER	"power"
@@ -70,8 +64,6 @@ MODULE_LICENSE("GPL");
 
 
 static int acpi_button_add (struct acpi_device *device);
 static int acpi_button_add (struct acpi_device *device);
 static int acpi_button_remove (struct acpi_device *device, int type);
 static int acpi_button_remove (struct acpi_device *device, int type);
-static int acpi_button_info_open_fs(struct inode *inode, struct file *file);
-static int acpi_button_state_open_fs(struct inode *inode, struct file *file);
 
 
 static struct acpi_driver acpi_button_driver = {
 static struct acpi_driver acpi_button_driver = {
 	.name =		ACPI_BUTTON_DRIVER_NAME,
 	.name =		ACPI_BUTTON_DRIVER_NAME,
@@ -90,187 +82,6 @@ struct acpi_button {
 	unsigned long		pushed;
 	unsigned long		pushed;
 };
 };
 
 
-static struct file_operations acpi_button_info_fops = {
-	.open		= acpi_button_info_open_fs,
-	.read		= seq_read,
-	.llseek		= seq_lseek,
-	.release	= single_release,
-};
-
-static struct file_operations acpi_button_state_fops = {
-	.open		= acpi_button_state_open_fs,
-	.read		= seq_read,
-	.llseek		= seq_lseek,
-	.release	= single_release,
-};
-/* --------------------------------------------------------------------------
-                              FS Interface (/proc)
-   -------------------------------------------------------------------------- */
-
-static struct proc_dir_entry	*acpi_button_dir;
-
-static int acpi_button_info_seq_show(struct seq_file *seq, void *offset)
-{
-	struct acpi_button	*button = (struct acpi_button *) seq->private;
-
-	ACPI_FUNCTION_TRACE("acpi_button_info_seq_show");
-
-	if (!button || !button->device)
-		return_VALUE(0);
-
-	seq_printf(seq, "type:                    %s\n", 
-		acpi_device_name(button->device));
-
-	return_VALUE(0);
-}
-
-static int acpi_button_info_open_fs(struct inode *inode, struct file *file)
-{
-	return single_open(file, acpi_button_info_seq_show, PDE(inode)->data);
-}
-	
-static int acpi_button_state_seq_show(struct seq_file *seq, void *offset)
-{
-	struct acpi_button	*button = (struct acpi_button *) seq->private;
-	acpi_status		status;
-	unsigned long		state;
-
-	ACPI_FUNCTION_TRACE("acpi_button_state_seq_show");
-
-	if (!button || !button->device)
-		return_VALUE(0);
-
-	status = acpi_evaluate_integer(button->handle,"_LID",NULL,&state);
-	if (ACPI_FAILURE(status)) {
-		seq_printf(seq, "state:      unsupported\n");
-	}
-	else{
-		seq_printf(seq, "state:      %s\n", (state ? "open" : "closed")); 
-	}
-
-	return_VALUE(0);
-}
-
-static int acpi_button_state_open_fs(struct inode *inode, struct file *file)
-{
-	return single_open(file, acpi_button_state_seq_show, PDE(inode)->data);
-}
-
-static int
-acpi_button_add_fs (
-	struct acpi_device	*device)
-{
-	struct proc_dir_entry	*entry = NULL;
-	struct acpi_button	*button = NULL;
-
-	ACPI_FUNCTION_TRACE("acpi_button_add_fs");
-
-	if (!device || !acpi_driver_data(device))
-		return_VALUE(-EINVAL);
-
-	button = acpi_driver_data(device);
-
-	switch (button->type) {
-	case ACPI_BUTTON_TYPE_POWER:
-	case ACPI_BUTTON_TYPE_POWERF:
-			entry = proc_mkdir(ACPI_BUTTON_SUBCLASS_POWER, 
-				acpi_button_dir);
-		break;
-	case ACPI_BUTTON_TYPE_SLEEP:
-	case ACPI_BUTTON_TYPE_SLEEPF:
-			entry = proc_mkdir(ACPI_BUTTON_SUBCLASS_SLEEP, 
-				acpi_button_dir);
-		break;
-	case ACPI_BUTTON_TYPE_LID:
-			entry = proc_mkdir(ACPI_BUTTON_SUBCLASS_LID, 
-				acpi_button_dir);
-		break;
-	}
-
-	if (!entry)
-		return_VALUE(-ENODEV);
-	entry->owner = THIS_MODULE;
-
-	acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device), entry);
-	if (!acpi_device_dir(device))
-		return_VALUE(-ENODEV);
-	acpi_device_dir(device)->owner = THIS_MODULE;
-
-	/* 'info' [R] */
-	entry = create_proc_entry(ACPI_BUTTON_FILE_INFO,
-		S_IRUGO, acpi_device_dir(device));
-	if (!entry)
-		ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-			"Unable to create '%s' fs entry\n",
-			ACPI_BUTTON_FILE_INFO));
-	else {
-		entry->proc_fops = &acpi_button_info_fops;
-		entry->data = acpi_driver_data(device);
-		entry->owner = THIS_MODULE;
-	}
-
-	/* show lid state [R] */
-	if (button->type == ACPI_BUTTON_TYPE_LID) {
-		entry = create_proc_entry(ACPI_BUTTON_FILE_STATE,
-			S_IRUGO, acpi_device_dir(device));
-		if (!entry)
-			ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-				"Unable to create '%s' fs entry\n",
-				ACPI_BUTTON_FILE_INFO));
-		else {
-			entry->proc_fops = &acpi_button_state_fops;
-			entry->data = acpi_driver_data(device);
-			entry->owner = THIS_MODULE;
-		}
-	}
-
-	return_VALUE(0);
-}
-
-
-static int
-acpi_button_remove_fs (
-	struct acpi_device	*device)
-{
-	struct acpi_button	*button = NULL;
-
-	ACPI_FUNCTION_TRACE("acpi_button_remove_fs");
-
-	button = acpi_driver_data(device);
-	if (acpi_device_dir(device)) {
-		if (button->type == ACPI_BUTTON_TYPE_LID)
-			remove_proc_entry(ACPI_BUTTON_FILE_STATE,
-					     acpi_device_dir(device));
-		remove_proc_entry(ACPI_BUTTON_FILE_INFO,
-				     acpi_device_dir(device));
-
-		remove_proc_entry(acpi_device_bid(device),
-				     acpi_device_dir(device)->parent);
-
-
-		switch (button->type) {
-			case ACPI_BUTTON_TYPE_POWER:
-			case ACPI_BUTTON_TYPE_POWERF:
-				remove_proc_entry(ACPI_BUTTON_SUBCLASS_POWER, 
-					acpi_button_dir);
-				break;
-			case ACPI_BUTTON_TYPE_SLEEP:
-			case ACPI_BUTTON_TYPE_SLEEPF:
-				remove_proc_entry(ACPI_BUTTON_SUBCLASS_SLEEP, 
-					acpi_button_dir);
-				break;
-			case ACPI_BUTTON_TYPE_LID:
-				remove_proc_entry(ACPI_BUTTON_SUBCLASS_LID, 
-					acpi_button_dir);
-				break;
-		}
-		acpi_device_dir(device) = NULL;
-	}
-
-	return_VALUE(0);
-}
-
-
 /* --------------------------------------------------------------------------
 /* --------------------------------------------------------------------------
                                 Driver Interface
                                 Driver Interface
    -------------------------------------------------------------------------- */
    -------------------------------------------------------------------------- */
@@ -310,8 +121,7 @@ acpi_button_notify_fixed (
 	
 	
 	ACPI_FUNCTION_TRACE("acpi_button_notify_fixed");
 	ACPI_FUNCTION_TRACE("acpi_button_notify_fixed");
 
 
-	if (!button)
-		return_ACPI_STATUS(AE_BAD_PARAMETER);
+	BUG_ON(!button);
 
 
 	acpi_button_notify(button->handle, ACPI_BUTTON_NOTIFY_STATUS, button);
 	acpi_button_notify(button->handle, ACPI_BUTTON_NOTIFY_STATUS, button);
 
 
@@ -327,10 +137,6 @@ acpi_button_add (
 	acpi_status		status = AE_OK;
 	acpi_status		status = AE_OK;
 	struct acpi_button	*button = NULL;
 	struct acpi_button	*button = NULL;
 
 
-	static struct acpi_device *power_button;
-	static struct acpi_device *sleep_button;
-	static struct acpi_device *lid_button;
-
 	ACPI_FUNCTION_TRACE("acpi_button_add");
 	ACPI_FUNCTION_TRACE("acpi_button_add");
 
 
 	if (!device)
 	if (!device)
@@ -391,42 +197,6 @@ acpi_button_add (
 		goto end;
 		goto end;
 	}
 	}
 
 
-	/*
-	 * Ensure only one button of each type is used.
-	 */
-	switch (button->type) {
-	case ACPI_BUTTON_TYPE_POWER:
-	case ACPI_BUTTON_TYPE_POWERF:
-		if (!power_button)
-			power_button = device;
-		else {
-			kfree(button);
-			return_VALUE(-ENODEV);
-		}
-		break;
-	case ACPI_BUTTON_TYPE_SLEEP:
-	case ACPI_BUTTON_TYPE_SLEEPF:
-		if (!sleep_button)
-			sleep_button = device;
-		else {
-			kfree(button);
-			return_VALUE(-ENODEV);
-		}
-		break;
-	case ACPI_BUTTON_TYPE_LID:
-		if (!lid_button)
-			lid_button = device;
-		else {
-			kfree(button);
-			return_VALUE(-ENODEV);
-		}
-		break;
-	}
-
-	result = acpi_button_add_fs(device);
-	if (result)
-		goto end;
-
 	switch (button->type) {
 	switch (button->type) {
 	case ACPI_BUTTON_TYPE_POWERF:
 	case ACPI_BUTTON_TYPE_POWERF:
 		status = acpi_install_fixed_event_handler (
 		status = acpi_install_fixed_event_handler (
@@ -470,7 +240,6 @@ acpi_button_add (
 
 
 end:
 end:
 	if (result) {
 	if (result) {
-		acpi_button_remove_fs(device);
 		kfree(button);
 		kfree(button);
 	}
 	}
 
 
@@ -511,8 +280,6 @@ acpi_button_remove (struct acpi_device *device, int type)
 		ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
 		ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
 			"Error removing notify handler\n"));
 			"Error removing notify handler\n"));
 
 
-	acpi_button_remove_fs(device);	
-
 	kfree(button);
 	kfree(button);
 
 
 	return_VALUE(0);
 	return_VALUE(0);
@@ -526,21 +293,14 @@ acpi_button_init (void)
 
 
 	ACPI_FUNCTION_TRACE("acpi_button_init");
 	ACPI_FUNCTION_TRACE("acpi_button_init");
 
 
-	acpi_button_dir = proc_mkdir(ACPI_BUTTON_CLASS, acpi_root_dir);
-	if (!acpi_button_dir)
-		return_VALUE(-ENODEV);
-	acpi_button_dir->owner = THIS_MODULE;
-
 	result = acpi_bus_register_driver(&acpi_button_driver);
 	result = acpi_bus_register_driver(&acpi_button_driver);
 	if (result < 0) {
 	if (result < 0) {
-		remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir);
 		return_VALUE(-ENODEV);
 		return_VALUE(-ENODEV);
 	}
 	}
 
 
 	return_VALUE(0);
 	return_VALUE(0);
 }
 }
 
 
-
 static void __exit
 static void __exit
 acpi_button_exit (void)
 acpi_button_exit (void)
 {
 {
@@ -548,11 +308,8 @@ acpi_button_exit (void)
 
 
 	acpi_bus_unregister_driver(&acpi_button_driver);
 	acpi_bus_unregister_driver(&acpi_button_driver);
 
 
-	remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir);
-
 	return_VOID;
 	return_VOID;
 }
 }
 
 
-
 module_init(acpi_button_init);
 module_init(acpi_button_init);
 module_exit(acpi_button_exit);
 module_exit(acpi_button_exit);

+ 37 - 21
drivers/acpi/dispatcher/dsfield.c

@@ -53,13 +53,20 @@
 #define _COMPONENT          ACPI_DISPATCHER
 #define _COMPONENT          ACPI_DISPATCHER
 	 ACPI_MODULE_NAME    ("dsfield")
 	 ACPI_MODULE_NAME    ("dsfield")
 
 
+/* Local prototypes */
+
+static acpi_status
+acpi_ds_get_field_names (
+	struct acpi_create_field_info   *info,
+	struct acpi_walk_state          *walk_state,
+	union acpi_parse_object         *arg);
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_create_buffer_field
  * FUNCTION:    acpi_ds_create_buffer_field
  *
  *
- * PARAMETERS:  Opcode              - The opcode to be executed
- *              Operands            - List of operands for the opcode
+ * PARAMETERS:  Op                  - Current parse op (create_xXField)
  *              walk_state          - Current state
  *              walk_state          - Current state
  *
  *
  * RETURN:      Status
  * RETURN:      Status
@@ -70,7 +77,7 @@
  *              create_word_field_op,
  *              create_word_field_op,
  *              create_dword_field_op,
  *              create_dword_field_op,
  *              create_qword_field_op,
  *              create_qword_field_op,
- *              create_field_op     (all of which define fields in buffers)
+ *              create_field_op     (all of which define a field in a buffer)
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
@@ -119,7 +126,8 @@ acpi_ds_create_buffer_field (
 			flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE;
 			flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE;
 		}
 		}
 		else {
 		else {
-			flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND;
+			flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE |
+					ACPI_NS_ERROR_IF_FOUND;
 		}
 		}
 
 
 		/*
 		/*
@@ -134,16 +142,16 @@ acpi_ds_create_buffer_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
+	/* 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->common.node = node;
 	op->common.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 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.
 	 */
 	 */
 	obj_desc = acpi_ns_get_attached_object (node);
 	obj_desc = acpi_ns_get_attached_object (node);
 	if (obj_desc) {
 	if (obj_desc) {
@@ -205,7 +213,7 @@ cleanup:
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ds_get_field_names (
 acpi_ds_get_field_names (
 	struct acpi_create_field_info   *info,
 	struct acpi_create_field_info   *info,
 	struct acpi_walk_state          *walk_state,
 	struct acpi_walk_state          *walk_state,
@@ -238,7 +246,8 @@ acpi_ds_get_field_names (
 					 + (acpi_integer) arg->common.value.size;
 					 + (acpi_integer) arg->common.value.size;
 
 
 			if (position > ACPI_UINT32_MAX) {
 			if (position > ACPI_UINT32_MAX) {
-				ACPI_REPORT_ERROR (("Bit offset within field too large (> 0xFFFFFFFF)\n"));
+				ACPI_REPORT_ERROR ((
+					"Bit offset within field too large (> 0xFFFFFFFF)\n"));
 				return_ACPI_STATUS (AE_SUPPORT);
 				return_ACPI_STATUS (AE_SUPPORT);
 			}
 			}
 
 
@@ -250,12 +259,15 @@ acpi_ds_get_field_names (
 
 
 			/*
 			/*
 			 * Get a new access_type and access_attribute -- to be used for all
 			 * Get a new access_type and access_attribute -- to be used for all
-			 * field units that follow, until field end or another access_as keyword.
+			 * field units that follow, until field end or another access_as
+			 * keyword.
 			 *
 			 *
-			 * In field_flags, preserve the flag bits other than the ACCESS_TYPE bits
+			 * In field_flags, preserve the flag bits other than the
+			 * ACCESS_TYPE bits
 			 */
 			 */
-			info->field_flags = (u8) ((info->field_flags & ~(AML_FIELD_ACCESS_TYPE_MASK)) |
-					  ((u8) ((u32) arg->common.value.integer >> 8)));
+			info->field_flags = (u8)
+				((info->field_flags & ~(AML_FIELD_ACCESS_TYPE_MASK)) |
+				((u8) ((u32) arg->common.value.integer >> 8)));
 
 
 			info->attribute = (u8) (arg->common.value.integer);
 			info->attribute = (u8) (arg->common.value.integer);
 			break;
 			break;
@@ -267,7 +279,8 @@ acpi_ds_get_field_names (
 
 
 			status = acpi_ns_lookup (walk_state->scope_info,
 			status = acpi_ns_lookup (walk_state->scope_info,
 					  (char *) &arg->named.name,
 					  (char *) &arg->named.name,
-					  info->field_type, ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE,
+					  info->field_type, ACPI_IMODE_EXECUTE,
+					  ACPI_NS_DONT_OPEN_SCOPE,
 					  walk_state, &info->field_node);
 					  walk_state, &info->field_node);
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
 				ACPI_REPORT_NSERROR ((char *) &arg->named.name, status);
 				ACPI_REPORT_NSERROR ((char *) &arg->named.name, status);
@@ -295,8 +308,9 @@ acpi_ds_get_field_names (
 					 + (acpi_integer) arg->common.value.size;
 					 + (acpi_integer) arg->common.value.size;
 
 
 			if (position > ACPI_UINT32_MAX) {
 			if (position > ACPI_UINT32_MAX) {
-				ACPI_REPORT_ERROR (("Field [%4.4s] bit offset too large (> 0xFFFFFFFF)\n",
-						(char *) &info->field_node->name));
+				ACPI_REPORT_ERROR ((
+					"Field [%4.4s] bit offset too large (> 0xFFFFFFFF)\n",
+					(char *) &info->field_node->name));
 				return_ACPI_STATUS (AE_SUPPORT);
 				return_ACPI_STATUS (AE_SUPPORT);
 			}
 			}
 
 
@@ -306,7 +320,8 @@ acpi_ds_get_field_names (
 
 
 		default:
 		default:
 
 
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid opcode in field list: %X\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Invalid opcode in field list: %X\n",
 				arg->common.aml_opcode));
 				arg->common.aml_opcode));
 			return_ACPI_STATUS (AE_AML_BAD_OPCODE);
 			return_ACPI_STATUS (AE_AML_BAD_OPCODE);
 		}
 		}
@@ -435,7 +450,8 @@ acpi_ds_init_field_objects (
 			status = acpi_ns_lookup (walk_state->scope_info,
 			status = acpi_ns_lookup (walk_state->scope_info,
 					  (char *) &arg->named.name,
 					  (char *) &arg->named.name,
 					  type, ACPI_IMODE_LOAD_PASS1,
 					  type, ACPI_IMODE_LOAD_PASS1,
-					  ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND,
+					  ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE |
+					  ACPI_NS_ERROR_IF_FOUND,
 					  walk_state, &node);
 					  walk_state, &node);
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
 				ACPI_REPORT_NSERROR ((char *) &arg->named.name, status);
 				ACPI_REPORT_NSERROR ((char *) &arg->named.name, status);

+ 21 - 7
drivers/acpi/dispatcher/dsinit.c

@@ -49,12 +49,21 @@
 #define _COMPONENT          ACPI_DISPATCHER
 #define _COMPONENT          ACPI_DISPATCHER
 	 ACPI_MODULE_NAME    ("dsinit")
 	 ACPI_MODULE_NAME    ("dsinit")
 
 
+/* Local prototypes */
+
+static acpi_status
+acpi_ds_init_one_object (
+	acpi_handle                     obj_handle,
+	u32                             level,
+	void                            *context,
+	void                            **return_value);
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_init_one_object
  * FUNCTION:    acpi_ds_init_one_object
  *
  *
- * PARAMETERS:  obj_handle      - Node
+ * PARAMETERS:  obj_handle      - Node for the object
  *              Level           - Current nesting level
  *              Level           - Current nesting level
  *              Context         - Points to a init info struct
  *              Context         - Points to a init info struct
  *              return_value    - Not used
  *              return_value    - Not used
@@ -70,7 +79,7 @@
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ds_init_one_object (
 acpi_ds_init_one_object (
 	acpi_handle                     obj_handle,
 	acpi_handle                     obj_handle,
 	u32                             level,
 	u32                             level,
@@ -105,7 +114,8 @@ acpi_ds_init_one_object (
 
 
 		status = acpi_ds_initialize_region (obj_handle);
 		status = acpi_ds_initialize_region (obj_handle);
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Region %p [%4.4s] - Init failure, %s\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Region %p [%4.4s] - Init failure, %s\n",
 				obj_handle, acpi_ut_get_node_name (obj_handle),
 				obj_handle, acpi_ut_get_node_name (obj_handle),
 				acpi_format_exception (status)));
 				acpi_format_exception (status)));
 		}
 		}
@@ -118,8 +128,10 @@ acpi_ds_init_one_object (
 
 
 		info->method_count++;
 		info->method_count++;
 
 
-		/* Print a dot for each method unless we are going to print the entire pathname */
-
+		/*
+		 * Print a dot for each method unless we are going to print
+		 * the entire pathname
+		 */
 		if (!(acpi_dbg_level & ACPI_LV_INIT_NAMES)) {
 		if (!(acpi_dbg_level & ACPI_LV_INIT_NAMES)) {
 			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "."));
 			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "."));
 		}
 		}
@@ -140,7 +152,8 @@ acpi_ds_init_one_object (
 		 */
 		 */
 		status = acpi_ds_parse_method (obj_handle);
 		status = acpi_ds_parse_method (obj_handle);
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Method %p [%4.4s] - parse failure, %s\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Method %p [%4.4s] - parse failure, %s\n",
 				obj_handle, acpi_ut_get_node_name (obj_handle),
 				obj_handle, acpi_ut_get_node_name (obj_handle),
 				acpi_format_exception (status)));
 				acpi_format_exception (status)));
 
 
@@ -154,7 +167,8 @@ acpi_ds_init_one_object (
 		 * for every execution since there isn't much overhead
 		 * for every execution since there isn't much overhead
 		 */
 		 */
 		acpi_ns_delete_namespace_subtree (obj_handle);
 		acpi_ns_delete_namespace_subtree (obj_handle);
-		acpi_ns_delete_namespace_by_owner (((struct acpi_namespace_node *) obj_handle)->object->method.owning_id);
+		acpi_ns_delete_namespace_by_owner (
+			((struct acpi_namespace_node *) obj_handle)->object->method.owning_id);
 		break;
 		break;
 
 
 
 

+ 5 - 6
drivers/acpi/dispatcher/dsmethod.c

@@ -153,12 +153,11 @@ acpi_ds_parse_method (
 	/*
 	/*
 	 * Parse the method, first pass
 	 * Parse the method, first pass
 	 *
 	 *
-	 * The first pass load is where newly declared named objects are
-	 * added into the namespace.  Actual evaluation of
-	 * the named objects (what would be called a "second
-	 * pass") happens during the actual execution of the
-	 * method so that operands to the named objects can
-	 * take on dynamic run-time values.
+	 * The first pass load is where newly declared named objects are added into
+	 * the namespace.  Actual evaluation of the named objects (what would be
+	 * called a "second pass") happens during the actual execution of the
+	 * method so that operands to the named objects can take on dynamic
+	 * run-time values.
 	 */
 	 */
 	status = acpi_ps_parse_aml (walk_state);
 	status = acpi_ps_parse_aml (walk_state);
 	if (ACPI_FAILURE (status)) {
 	if (ACPI_FAILURE (status)) {

+ 115 - 80
drivers/acpi/dispatcher/dsmthdat.c

@@ -52,6 +52,29 @@
 #define _COMPONENT          ACPI_DISPATCHER
 #define _COMPONENT          ACPI_DISPATCHER
 	 ACPI_MODULE_NAME    ("dsmthdat")
 	 ACPI_MODULE_NAME    ("dsmthdat")
 
 
+/* Local prototypes */
+
+static void
+acpi_ds_method_data_delete_value (
+	u16                             opcode,
+	u32                             index,
+	struct acpi_walk_state          *walk_state);
+
+static acpi_status
+acpi_ds_method_data_set_value (
+	u16                             opcode,
+	u32                             index,
+	union acpi_operand_object       *object,
+	struct acpi_walk_state          *walk_state);
+
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+acpi_object_type
+acpi_ds_method_data_get_type (
+	u16                             opcode,
+	u32                             index,
+	struct acpi_walk_state          *walk_state);
+#endif
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
@@ -62,8 +85,8 @@
  * RETURN:      Status
  * RETURN:      Status
  *
  *
  * DESCRIPTION: Initialize the data structures that hold the method's arguments
  * DESCRIPTION: Initialize the data structures that hold the method's arguments
- *              and locals.  The data struct is an array of NTEs for each.
- *              This allows ref_of and de_ref_of to work properly for these
+ *              and locals.  The data struct is an array of namespace nodes for
+ *              each - this allows ref_of and de_ref_of to work properly for these
  *              special data types.
  *              special data types.
  *
  *
  * NOTES:       walk_state fields are initialized to zero by the
  * NOTES:       walk_state fields are initialized to zero by the
@@ -92,7 +115,8 @@ acpi_ds_method_data_init (
 		walk_state->arguments[i].name.integer |= (i << 24);
 		walk_state->arguments[i].name.integer |= (i << 24);
 		walk_state->arguments[i].descriptor   = ACPI_DESC_TYPE_NAMED;
 		walk_state->arguments[i].descriptor   = ACPI_DESC_TYPE_NAMED;
 		walk_state->arguments[i].type         = ACPI_TYPE_ANY;
 		walk_state->arguments[i].type         = ACPI_TYPE_ANY;
-		walk_state->arguments[i].flags        = ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_ARG;
+		walk_state->arguments[i].flags        = ANOBJ_END_OF_PEER_LIST |
+				  ANOBJ_METHOD_ARG;
 	}
 	}
 
 
 	/* Init the method locals */
 	/* Init the method locals */
@@ -104,7 +128,8 @@ acpi_ds_method_data_init (
 		walk_state->local_variables[i].name.integer |= (i << 24);
 		walk_state->local_variables[i].name.integer |= (i << 24);
 		walk_state->local_variables[i].descriptor  = ACPI_DESC_TYPE_NAMED;
 		walk_state->local_variables[i].descriptor  = ACPI_DESC_TYPE_NAMED;
 		walk_state->local_variables[i].type        = ACPI_TYPE_ANY;
 		walk_state->local_variables[i].type        = ACPI_TYPE_ANY;
-		walk_state->local_variables[i].flags       = ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_LOCAL;
+		walk_state->local_variables[i].flags       = ANOBJ_END_OF_PEER_LIST |
+				 ANOBJ_METHOD_LOCAL;
 	}
 	}
 
 
 	return_VOID;
 	return_VOID;
@@ -198,15 +223,18 @@ acpi_ds_method_data_init_args (
 		return_ACPI_STATUS (AE_OK);
 		return_ACPI_STATUS (AE_OK);
 	}
 	}
 
 
-	/* Copy passed parameters into the new method stack frame  */
+	/* Copy passed parameters into the new method stack frame */
 
 
-	while ((index < ACPI_METHOD_NUM_ARGS) && (index < max_param_count) && params[index]) {
+	while ((index < ACPI_METHOD_NUM_ARGS) &&
+		   (index < max_param_count)      &&
+			params[index]) {
 		/*
 		/*
 		 * A valid parameter.
 		 * A valid parameter.
 		 * Store the argument in the method/walk descriptor.
 		 * Store the argument in the method/walk descriptor.
 		 * Do not copy the arg in order to implement call by reference
 		 * Do not copy the arg in order to implement call by reference
 		 */
 		 */
-		status = acpi_ds_method_data_set_value (AML_ARG_OP, index, params[index], walk_state);
+		status = acpi_ds_method_data_set_value (AML_ARG_OP, index,
+				 params[index], walk_state);
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
 			return_ACPI_STATUS (status);
 			return_ACPI_STATUS (status);
 		}
 		}
@@ -224,11 +252,13 @@ acpi_ds_method_data_init_args (
  * FUNCTION:    acpi_ds_method_data_get_node
  * FUNCTION:    acpi_ds_method_data_get_node
  *
  *
  * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
  * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
- *              Index               - which local_var or argument whose type
- *                                      to get
+ *              Index               - Which Local or Arg whose type to get
  *              walk_state          - Current walk state object
  *              walk_state          - Current walk state object
+ *              Node                - Where the node is returned.
  *
  *
- * RETURN:      Get the Node associated with a local or arg.
+ * RETURN:      Status and node
+ *
+ * DESCRIPTION: Get the Node associated with a local or arg.
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
@@ -249,7 +279,8 @@ acpi_ds_method_data_get_node (
 	case AML_LOCAL_OP:
 	case AML_LOCAL_OP:
 
 
 		if (index > ACPI_METHOD_MAX_LOCAL) {
 		if (index > ACPI_METHOD_MAX_LOCAL) {
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Local index %d is invalid (max %d)\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Local index %d is invalid (max %d)\n",
 				index, ACPI_METHOD_MAX_LOCAL));
 				index, ACPI_METHOD_MAX_LOCAL));
 			return_ACPI_STATUS (AE_AML_INVALID_INDEX);
 			return_ACPI_STATUS (AE_AML_INVALID_INDEX);
 		}
 		}
@@ -262,7 +293,8 @@ acpi_ds_method_data_get_node (
 	case AML_ARG_OP:
 	case AML_ARG_OP:
 
 
 		if (index > ACPI_METHOD_MAX_ARG) {
 		if (index > ACPI_METHOD_MAX_ARG) {
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Arg index %d is invalid (max %d)\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Arg index %d is invalid (max %d)\n",
 				index, ACPI_METHOD_MAX_ARG));
 				index, ACPI_METHOD_MAX_ARG));
 			return_ACPI_STATUS (AE_AML_INVALID_INDEX);
 			return_ACPI_STATUS (AE_AML_INVALID_INDEX);
 		}
 		}
@@ -286,7 +318,7 @@ acpi_ds_method_data_get_node (
  * FUNCTION:    acpi_ds_method_data_set_value
  * FUNCTION:    acpi_ds_method_data_set_value
  *
  *
  * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
  * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
- *              Index               - which local_var or argument to get
+ *              Index               - Which Local or Arg to get
  *              Object              - Object to be inserted into the stack entry
  *              Object              - Object to be inserted into the stack entry
  *              walk_state          - Current walk state object
  *              walk_state          - Current walk state object
  *
  *
@@ -297,7 +329,7 @@ acpi_ds_method_data_get_node (
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ds_method_data_set_value (
 acpi_ds_method_data_set_value (
 	u16                             opcode,
 	u16                             opcode,
 	u32                             index,
 	u32                             index,
@@ -338,56 +370,6 @@ acpi_ds_method_data_set_value (
 }
 }
 
 
 
 
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ds_method_data_get_type
- *
- * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
- *              Index               - which local_var or argument whose type
- *                                      to get
- *              walk_state          - Current walk state object
- *
- * RETURN:      Data type of current value of the selected Arg or Local
- *
- ******************************************************************************/
-#ifdef ACPI_FUTURE_USAGE
-acpi_object_type
-acpi_ds_method_data_get_type (
-	u16                             opcode,
-	u32                             index,
-	struct acpi_walk_state          *walk_state)
-{
-	acpi_status                     status;
-	struct acpi_namespace_node      *node;
-	union acpi_operand_object       *object;
-
-
-	ACPI_FUNCTION_TRACE ("ds_method_data_get_type");
-
-
-	/* Get the namespace node for the arg/local */
-
-	status = acpi_ds_method_data_get_node (opcode, index, walk_state, &node);
-	if (ACPI_FAILURE (status)) {
-		return_VALUE ((ACPI_TYPE_NOT_FOUND));
-	}
-
-	/* Get the object */
-
-	object = acpi_ns_get_attached_object (node);
-	if (!object) {
-		/* Uninitialized local/arg, return TYPE_ANY */
-
-		return_VALUE (ACPI_TYPE_ANY);
-	}
-
-	/* Get the object type */
-
-	return_VALUE (ACPI_GET_OBJECT_TYPE (object));
-}
-#endif  /*  ACPI_FUTURE_USAGE  */
-
-
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_method_data_get_value
  * FUNCTION:    acpi_ds_method_data_get_value
@@ -395,13 +377,11 @@ acpi_ds_method_data_get_type (
  * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
  * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
  *              Index               - which local_var or argument to get
  *              Index               - which local_var or argument to get
  *              walk_state          - Current walk state object
  *              walk_state          - Current walk state object
- *              *dest_desc          - Ptr to Descriptor into which selected Arg
- *                                    or Local value should be copied
+ *              dest_desc           - Where Arg or Local value is returned
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Retrieve value of selected Arg or Local from the method frame
- *              at the current top of the method stack.
+ * DESCRIPTION: Retrieve value of selected Arg or Local for this method
  *              Used only in acpi_ex_resolve_to_value().
  *              Used only in acpi_ex_resolve_to_value().
  *
  *
  ******************************************************************************/
  ******************************************************************************/
@@ -467,14 +447,16 @@ acpi_ds_method_data_get_value (
 		else switch (opcode) {
 		else switch (opcode) {
 		case AML_ARG_OP:
 		case AML_ARG_OP:
 
 
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Uninitialized Arg[%d] at node %p\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Uninitialized Arg[%d] at node %p\n",
 				index, node));
 				index, node));
 
 
 			return_ACPI_STATUS (AE_AML_UNINITIALIZED_ARG);
 			return_ACPI_STATUS (AE_AML_UNINITIALIZED_ARG);
 
 
 		case AML_LOCAL_OP:
 		case AML_LOCAL_OP:
 
 
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Uninitialized Local[%d] at node %p\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Uninitialized Local[%d] at node %p\n",
 				index, node));
 				index, node));
 
 
 			return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL);
 			return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL);
@@ -506,12 +488,12 @@ acpi_ds_method_data_get_value (
  *
  *
  * RETURN:      None
  * RETURN:      None
  *
  *
- * DESCRIPTION: Delete the entry at Opcode:Index on the method stack.  Inserts
+ * DESCRIPTION: Delete the entry at Opcode:Index.  Inserts
  *              a null into the stack slot after the object is deleted.
  *              a null into the stack slot after the object is deleted.
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-void
+static void
 acpi_ds_method_data_delete_value (
 acpi_ds_method_data_delete_value (
 	u16                             opcode,
 	u16                             opcode,
 	u32                             index,
 	u32                             index,
@@ -562,7 +544,7 @@ acpi_ds_method_data_delete_value (
  * FUNCTION:    acpi_ds_store_object_to_local
  * FUNCTION:    acpi_ds_store_object_to_local
  *
  *
  * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
  * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
- *              Index               - which local_var or argument to set
+ *              Index               - Which Local or Arg to set
  *              obj_desc            - Value to be stored
  *              obj_desc            - Value to be stored
  *              walk_state          - Current walk state
  *              walk_state          - Current walk state
  *
  *
@@ -651,19 +633,20 @@ acpi_ds_store_object_to_local (
 		 */
 		 */
 		if (opcode == AML_ARG_OP) {
 		if (opcode == AML_ARG_OP) {
 			/*
 			/*
-			 * Make sure that the object is the correct type.  This may be overkill, but
-			 * it is here because references were NS nodes in the past.  Now they are
-			 * operand objects of type Reference.
+			 * Make sure that the object is the correct type.  This may be
+			 * overkill, butit is here because references were NS nodes in
+			 *  the past.  Now they are operand objects of type Reference.
 			 */
 			 */
 			if (ACPI_GET_DESCRIPTOR_TYPE (current_obj_desc) != ACPI_DESC_TYPE_OPERAND) {
 			if (ACPI_GET_DESCRIPTOR_TYPE (current_obj_desc) != ACPI_DESC_TYPE_OPERAND) {
-				ACPI_REPORT_ERROR (("Invalid descriptor type while storing to method arg: [%s]\n",
-						acpi_ut_get_descriptor_name (current_obj_desc)));
+				ACPI_REPORT_ERROR ((
+					"Invalid descriptor type while storing to method arg: [%s]\n",
+					acpi_ut_get_descriptor_name (current_obj_desc)));
 				return_ACPI_STATUS (AE_AML_INTERNAL);
 				return_ACPI_STATUS (AE_AML_INTERNAL);
 			}
 			}
 
 
 			/*
 			/*
-			 * If we have a valid reference object that came from ref_of(), do the
-			 * indirect store
+			 * If we have a valid reference object that came from ref_of(),
+			 * do the indirect store
 			 */
 			 */
 			if ((current_obj_desc->common.type == ACPI_TYPE_LOCAL_REFERENCE) &&
 			if ((current_obj_desc->common.type == ACPI_TYPE_LOCAL_REFERENCE) &&
 				(current_obj_desc->reference.opcode == AML_REF_OF_OP)) {
 				(current_obj_desc->reference.opcode == AML_REF_OF_OP)) {
@@ -713,3 +696,55 @@ acpi_ds_store_object_to_local (
 }
 }
 
 
 
 
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ds_method_data_get_type
+ *
+ * PARAMETERS:  Opcode              - Either AML_LOCAL_OP or AML_ARG_OP
+ *              Index               - Which Local or Arg whose type to get
+ *              walk_state          - Current walk state object
+ *
+ * RETURN:      Data type of current value of the selected Arg or Local
+ *
+ * DESCRIPTION: Get the type of the object stored in the Local or Arg
+ *
+ ******************************************************************************/
+
+acpi_object_type
+acpi_ds_method_data_get_type (
+	u16                             opcode,
+	u32                             index,
+	struct acpi_walk_state          *walk_state)
+{
+	acpi_status                     status;
+	struct acpi_namespace_node      *node;
+	union acpi_operand_object       *object;
+
+
+	ACPI_FUNCTION_TRACE ("ds_method_data_get_type");
+
+
+	/* Get the namespace node for the arg/local */
+
+	status = acpi_ds_method_data_get_node (opcode, index, walk_state, &node);
+	if (ACPI_FAILURE (status)) {
+		return_VALUE ((ACPI_TYPE_NOT_FOUND));
+	}
+
+	/* Get the object */
+
+	object = acpi_ns_get_attached_object (node);
+	if (!object) {
+		/* Uninitialized local/arg, return TYPE_ANY */
+
+		return_VALUE (ACPI_TYPE_ANY);
+	}
+
+	/* Get the object type */
+
+	return_VALUE (ACPI_GET_OBJECT_TYPE (object));
+}
+#endif
+
+

+ 50 - 29
drivers/acpi/dispatcher/dsobject.c

@@ -52,9 +52,15 @@
 #define _COMPONENT          ACPI_DISPATCHER
 #define _COMPONENT          ACPI_DISPATCHER
 	 ACPI_MODULE_NAME    ("dsobject")
 	 ACPI_MODULE_NAME    ("dsobject")
 
 
+static acpi_status
+acpi_ds_build_internal_object (
+	struct acpi_walk_state          *walk_state,
+	union acpi_parse_object         *op,
+	union acpi_operand_object       **obj_desc_ptr);
+
 
 
 #ifndef ACPI_NO_METHOD_EXECUTION
 #ifndef ACPI_NO_METHOD_EXECUTION
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_build_internal_object
  * FUNCTION:    acpi_ds_build_internal_object
  *
  *
@@ -67,9 +73,9 @@
  * DESCRIPTION: Translate a parser Op object to the equivalent namespace object
  * DESCRIPTION: Translate a parser Op object to the equivalent namespace object
  *              Simple objects are any objects other than a package object!
  *              Simple objects are any objects other than a package object!
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ds_build_internal_object (
 acpi_ds_build_internal_object (
 	struct acpi_walk_state          *walk_state,
 	struct acpi_walk_state          *walk_state,
 	union acpi_parse_object         *op,
 	union acpi_parse_object         *op,
@@ -90,9 +96,11 @@ acpi_ds_build_internal_object (
 		 * Otherwise, go ahead and look it up now
 		 * Otherwise, go ahead and look it up now
 		 */
 		 */
 		if (!op->common.node) {
 		if (!op->common.node) {
-			status = acpi_ns_lookup (walk_state->scope_info, op->common.value.string,
+			status = acpi_ns_lookup (walk_state->scope_info,
+					  op->common.value.string,
 					  ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
 					  ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
-					  ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL,
+					  ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
+					  NULL,
 					  (struct acpi_namespace_node **) &(op->common.node));
 					  (struct acpi_namespace_node **) &(op->common.node));
 
 
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
@@ -104,12 +112,14 @@ acpi_ds_build_internal_object (
 
 
 	/* Create and init the internal ACPI object */
 	/* Create and init the internal ACPI object */
 
 
-	obj_desc = acpi_ut_create_internal_object ((acpi_ps_get_opcode_info (op->common.aml_opcode))->object_type);
+	obj_desc = acpi_ut_create_internal_object (
+			 (acpi_ps_get_opcode_info (op->common.aml_opcode))->object_type);
 	if (!obj_desc) {
 	if (!obj_desc) {
 		return_ACPI_STATUS (AE_NO_MEMORY);
 		return_ACPI_STATUS (AE_NO_MEMORY);
 	}
 	}
 
 
-	status = acpi_ds_init_object_from_op (walk_state, op, op->common.aml_opcode, &obj_desc);
+	status = acpi_ds_init_object_from_op (walk_state, op, op->common.aml_opcode,
+			 &obj_desc);
 	if (ACPI_FAILURE (status)) {
 	if (ACPI_FAILURE (status)) {
 		acpi_ut_remove_reference (obj_desc);
 		acpi_ut_remove_reference (obj_desc);
 		return_ACPI_STATUS (status);
 		return_ACPI_STATUS (status);
@@ -120,7 +130,7 @@ acpi_ds_build_internal_object (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_build_internal_buffer_obj
  * FUNCTION:    acpi_ds_build_internal_buffer_obj
  *
  *
@@ -134,7 +144,7 @@ acpi_ds_build_internal_object (
  * DESCRIPTION: Translate a parser Op package object to the equivalent
  * DESCRIPTION: Translate a parser Op package object to the equivalent
  *              namespace object
  *              namespace object
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_build_internal_buffer_obj (
 acpi_ds_build_internal_buffer_obj (
@@ -229,7 +239,7 @@ acpi_ds_build_internal_buffer_obj (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_build_internal_package_obj
  * FUNCTION:    acpi_ds_build_internal_package_obj
  *
  *
@@ -243,7 +253,7 @@ acpi_ds_build_internal_buffer_obj (
  * DESCRIPTION: Translate a parser Op package object to the equivalent
  * DESCRIPTION: Translate a parser Op package object to the equivalent
  *              namespace object
  *              namespace object
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_build_internal_package_obj (
 acpi_ds_build_internal_package_obj (
@@ -331,11 +341,12 @@ acpi_ds_build_internal_package_obj (
 		if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
 		if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
 			/* Object (package or buffer) is already built */
 			/* Object (package or buffer) is already built */
 
 
-			obj_desc->package.elements[i] = ACPI_CAST_PTR (union acpi_operand_object, arg->common.node);
+			obj_desc->package.elements[i] =
+				ACPI_CAST_PTR (union acpi_operand_object, arg->common.node);
 		}
 		}
 		else {
 		else {
 			status = acpi_ds_build_internal_object (walk_state, arg,
 			status = acpi_ds_build_internal_object (walk_state, arg,
-					  &obj_desc->package.elements[i]);
+					 &obj_desc->package.elements[i]);
 		}
 		}
 
 
 		i++;
 		i++;
@@ -348,7 +359,7 @@ acpi_ds_build_internal_package_obj (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_create_node
  * FUNCTION:    acpi_ds_create_node
  *
  *
@@ -360,7 +371,7 @@ acpi_ds_build_internal_package_obj (
  *
  *
  * DESCRIPTION: Create the object to be associated with a namespace node
  * DESCRIPTION: Create the object to be associated with a namespace node
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_create_node (
 acpi_ds_create_node (
@@ -392,7 +403,8 @@ acpi_ds_create_node (
 
 
 	/* Build an internal object for the argument(s) */
 	/* Build an internal object for the argument(s) */
 
 
-	status = acpi_ds_build_internal_object (walk_state, op->common.value.arg, &obj_desc);
+	status = acpi_ds_build_internal_object (walk_state, op->common.value.arg,
+			 &obj_desc);
 	if (ACPI_FAILURE (status)) {
 	if (ACPI_FAILURE (status)) {
 		return_ACPI_STATUS (status);
 		return_ACPI_STATUS (status);
 	}
 	}
@@ -414,7 +426,7 @@ acpi_ds_create_node (
 #endif /* ACPI_NO_METHOD_EXECUTION */
 #endif /* ACPI_NO_METHOD_EXECUTION */
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_init_object_from_op
  * FUNCTION:    acpi_ds_init_object_from_op
  *
  *
@@ -429,7 +441,7 @@ acpi_ds_create_node (
  *              associated arguments.  The namespace object is a more compact
  *              associated arguments.  The namespace object is a more compact
  *              representation of the Op and its arguments.
  *              representation of the Op and its arguments.
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_init_object_from_op (
 acpi_ds_init_object_from_op (
@@ -462,7 +474,8 @@ acpi_ds_init_object_from_op (
 		/*
 		/*
 		 * Defer evaluation of Buffer term_arg operand
 		 * Defer evaluation of Buffer term_arg operand
 		 */
 		 */
-		obj_desc->buffer.node     = (struct acpi_namespace_node *) walk_state->operands[0];
+		obj_desc->buffer.node     = (struct acpi_namespace_node *)
+				   walk_state->operands[0];
 		obj_desc->buffer.aml_start = op->named.data;
 		obj_desc->buffer.aml_start = op->named.data;
 		obj_desc->buffer.aml_length = op->named.length;
 		obj_desc->buffer.aml_length = op->named.length;
 		break;
 		break;
@@ -473,7 +486,8 @@ acpi_ds_init_object_from_op (
 		/*
 		/*
 		 * Defer evaluation of Package term_arg operand
 		 * Defer evaluation of Package term_arg operand
 		 */
 		 */
-		obj_desc->package.node     = (struct acpi_namespace_node *) walk_state->operands[0];
+		obj_desc->package.node     = (struct acpi_namespace_node *)
+				   walk_state->operands[0];
 		obj_desc->package.aml_start = op->named.data;
 		obj_desc->package.aml_start = op->named.data;
 		obj_desc->package.aml_length = op->named.length;
 		obj_desc->package.aml_length = op->named.length;
 		break;
 		break;
@@ -486,9 +500,10 @@ acpi_ds_init_object_from_op (
 			/*
 			/*
 			 * Resolve AML Constants here - AND ONLY HERE!
 			 * Resolve AML Constants here - AND ONLY HERE!
 			 * All constants are integers.
 			 * All constants are integers.
-			 * We mark the integer with a flag that indicates that it started life
-			 * as a constant -- so that stores to constants will perform as expected (noop).
-			 * (zero_op is used as a placeholder for optional target operands.)
+			 * We mark the integer with a flag that indicates that it started
+			 * life as a constant -- so that stores to constants will perform
+			 * as expected (noop). zero_op is used as a placeholder for optional
+			 * target operands.
 			 */
 			 */
 			obj_desc->common.flags = AOPOBJ_AML_CONSTANT;
 			obj_desc->common.flags = AOPOBJ_AML_CONSTANT;
 
 
@@ -521,7 +536,8 @@ acpi_ds_init_object_from_op (
 
 
 			default:
 			default:
 
 
-				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown constant opcode %X\n", opcode));
+				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+					"Unknown constant opcode %X\n", opcode));
 				status = AE_AML_OPERAND_TYPE;
 				status = AE_AML_OPERAND_TYPE;
 				break;
 				break;
 			}
 			}
@@ -535,7 +551,8 @@ acpi_ds_init_object_from_op (
 
 
 
 
 		default:
 		default:
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Integer type %X\n", op_info->type));
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Integer type %X\n",
+				op_info->type));
 			status = AE_AML_OPERAND_TYPE;
 			status = AE_AML_OPERAND_TYPE;
 			break;
 			break;
 		}
 		}
@@ -570,8 +587,10 @@ acpi_ds_init_object_from_op (
 			obj_desc->reference.offset = opcode - AML_LOCAL_OP;
 			obj_desc->reference.offset = opcode - AML_LOCAL_OP;
 
 
 #ifndef ACPI_NO_METHOD_EXECUTION
 #ifndef ACPI_NO_METHOD_EXECUTION
-			status = acpi_ds_method_data_get_node (AML_LOCAL_OP, obj_desc->reference.offset,
-					 walk_state, (struct acpi_namespace_node **) &obj_desc->reference.object);
+			status = acpi_ds_method_data_get_node (AML_LOCAL_OP,
+					 obj_desc->reference.offset,
+					 walk_state,
+					 (struct acpi_namespace_node **) &obj_desc->reference.object);
 #endif
 #endif
 			break;
 			break;
 
 
@@ -584,8 +603,10 @@ acpi_ds_init_object_from_op (
 			obj_desc->reference.offset = opcode - AML_ARG_OP;
 			obj_desc->reference.offset = opcode - AML_ARG_OP;
 
 
 #ifndef ACPI_NO_METHOD_EXECUTION
 #ifndef ACPI_NO_METHOD_EXECUTION
-			status = acpi_ds_method_data_get_node (AML_ARG_OP, obj_desc->reference.offset,
-					 walk_state, (struct acpi_namespace_node **) &obj_desc->reference.object);
+			status = acpi_ds_method_data_get_node (AML_ARG_OP,
+					 obj_desc->reference.offset,
+					 walk_state,
+					 (struct acpi_namespace_node **) &obj_desc->reference.object);
 #endif
 #endif
 			break;
 			break;
 
 

+ 70 - 35
drivers/acpi/dispatcher/dsopcode.c

@@ -54,12 +54,31 @@
 #define _COMPONENT          ACPI_DISPATCHER
 #define _COMPONENT          ACPI_DISPATCHER
 	 ACPI_MODULE_NAME    ("dsopcode")
 	 ACPI_MODULE_NAME    ("dsopcode")
 
 
+/* Local prototypes */
 
 
-/*****************************************************************************
+static acpi_status
+acpi_ds_execute_arguments (
+	struct acpi_namespace_node      *node,
+	struct acpi_namespace_node      *scope_node,
+	u32                             aml_length,
+	u8                              *aml_start);
+
+static acpi_status
+acpi_ds_init_buffer_field (
+	u16                             aml_opcode,
+	union acpi_operand_object       *obj_desc,
+	union acpi_operand_object       *buffer_desc,
+	union acpi_operand_object       *offset_desc,
+	union acpi_operand_object       *length_desc,
+	union acpi_operand_object       *result_desc);
+
+
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_execute_arguments
  * FUNCTION:    acpi_ds_execute_arguments
  *
  *
- * PARAMETERS:  Node                - Parent NS node
+ * PARAMETERS:  Node                - Object NS node
+ *              scope_node          - Parent NS node
  *              aml_length          - Length of executable AML
  *              aml_length          - Length of executable AML
  *              aml_start           - Pointer to the AML
  *              aml_start           - Pointer to the AML
  *
  *
@@ -67,9 +86,9 @@
  *
  *
  * DESCRIPTION: Late (deferred) execution of region or field arguments
  * DESCRIPTION: Late (deferred) execution of region or field arguments
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ds_execute_arguments (
 acpi_ds_execute_arguments (
 	struct acpi_namespace_node      *node,
 	struct acpi_namespace_node      *node,
 	struct acpi_namespace_node      *scope_node,
 	struct acpi_namespace_node      *scope_node,
@@ -162,7 +181,7 @@ acpi_ds_execute_arguments (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_get_buffer_field_arguments
  * FUNCTION:    acpi_ds_get_buffer_field_arguments
  *
  *
@@ -173,7 +192,7 @@ acpi_ds_execute_arguments (
  * DESCRIPTION: Get buffer_field Buffer and Index. This implements the late
  * DESCRIPTION: Get buffer_field Buffer and Index. This implements the late
  *              evaluation of these field attributes.
  *              evaluation of these field attributes.
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_get_buffer_field_arguments (
 acpi_ds_get_buffer_field_arguments (
@@ -208,7 +227,7 @@ acpi_ds_get_buffer_field_arguments (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_get_buffer_arguments
  * FUNCTION:    acpi_ds_get_buffer_arguments
  *
  *
@@ -219,7 +238,7 @@ acpi_ds_get_buffer_field_arguments (
  * DESCRIPTION: Get Buffer length and initializer byte list.  This implements
  * DESCRIPTION: Get Buffer length and initializer byte list.  This implements
  *              the late evaluation of these attributes.
  *              the late evaluation of these attributes.
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_get_buffer_arguments (
 acpi_ds_get_buffer_arguments (
@@ -255,7 +274,7 @@ acpi_ds_get_buffer_arguments (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_get_package_arguments
  * FUNCTION:    acpi_ds_get_package_arguments
  *
  *
@@ -266,7 +285,7 @@ acpi_ds_get_buffer_arguments (
  * DESCRIPTION: Get Package length and initializer byte list.  This implements
  * DESCRIPTION: Get Package length and initializer byte list.  This implements
  *              the late evaluation of these attributes.
  *              the late evaluation of these attributes.
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_get_package_arguments (
 acpi_ds_get_package_arguments (
@@ -353,17 +372,17 @@ acpi_ds_get_region_arguments (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_initialize_region
  * FUNCTION:    acpi_ds_initialize_region
  *
  *
- * PARAMETERS:  Op              - A valid region Op object
+ * PARAMETERS:  obj_handle      - Region namespace node
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
  * DESCRIPTION: Front end to ev_initialize_region
  * DESCRIPTION: Front end to ev_initialize_region
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_initialize_region (
 acpi_ds_initialize_region (
@@ -382,7 +401,7 @@ acpi_ds_initialize_region (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_init_buffer_field
  * FUNCTION:    acpi_ds_init_buffer_field
  *
  *
@@ -390,16 +409,16 @@ acpi_ds_initialize_region (
  *              obj_desc        - buffer_field object
  *              obj_desc        - buffer_field object
  *              buffer_desc     - Host Buffer
  *              buffer_desc     - Host Buffer
  *              offset_desc     - Offset into buffer
  *              offset_desc     - Offset into buffer
- *              Length          - Length of field (CREATE_FIELD_OP only)
- *              Result          - Where to store the result
+ *              length_desc     - Length of field (CREATE_FIELD_OP only)
+ *              result_desc     - Where to store the result
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
  * DESCRIPTION: Perform actual initialization of a buffer field
  * DESCRIPTION: Perform actual initialization of a buffer field
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ds_init_buffer_field (
 acpi_ds_init_buffer_field (
 	u16                             aml_opcode,
 	u16                             aml_opcode,
 	union acpi_operand_object       *obj_desc,
 	union acpi_operand_object       *obj_desc,
@@ -435,8 +454,10 @@ acpi_ds_init_buffer_field (
 	 * after resolution in acpi_ex_resolve_operands().
 	 * after resolution in acpi_ex_resolve_operands().
 	 */
 	 */
 	if (ACPI_GET_DESCRIPTOR_TYPE (result_desc) != ACPI_DESC_TYPE_NAMED) {
 	if (ACPI_GET_DESCRIPTOR_TYPE (result_desc) != ACPI_DESC_TYPE_NAMED) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "(%s) destination not a NS Node [%s]\n",
-				acpi_ps_get_opcode_name (aml_opcode), acpi_ut_get_descriptor_name (result_desc)));
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"(%s) destination not a NS Node [%s]\n",
+				acpi_ps_get_opcode_name (aml_opcode),
+				acpi_ut_get_descriptor_name (result_desc)));
 
 
 		status = AE_AML_OPERAND_TYPE;
 		status = AE_AML_OPERAND_TYPE;
 		goto cleanup;
 		goto cleanup;
@@ -452,9 +473,18 @@ acpi_ds_init_buffer_field (
 
 
 		/* Offset is in bits, count is in bits */
 		/* Offset is in bits, count is in bits */
 
 
+		field_flags = AML_FIELD_ACCESS_BYTE;
 		bit_offset = offset;
 		bit_offset = offset;
 		bit_count  = (u32) length_desc->integer.value;
 		bit_count  = (u32) length_desc->integer.value;
-		field_flags = AML_FIELD_ACCESS_BYTE;
+
+		/* Must have a valid (>0) bit count */
+
+		if (bit_count == 0) {
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Attempt to create_field of length 0\n"));
+			status = AE_AML_OPERAND_VALUE;
+			goto cleanup;
+		}
 		break;
 		break;
 
 
 	case AML_CREATE_BIT_FIELD_OP:
 	case AML_CREATE_BIT_FIELD_OP:
@@ -527,7 +557,8 @@ acpi_ds_init_buffer_field (
 
 
 	/*
 	/*
 	 * Initialize areas of the field object that are common to all fields
 	 * Initialize areas of the field object that are common to all fields
-	 * For field_flags, use LOCK_RULE = 0 (NO_LOCK), UPDATE_RULE = 0 (UPDATE_PRESERVE)
+	 * For field_flags, use LOCK_RULE = 0 (NO_LOCK),
+	 * UPDATE_RULE = 0 (UPDATE_PRESERVE)
 	 */
 	 */
 	status = acpi_ex_prep_common_field_object (obj_desc, field_flags, 0,
 	status = acpi_ex_prep_common_field_object (obj_desc, field_flags, 0,
 			  bit_offset, bit_count);
 			  bit_offset, bit_count);
@@ -539,8 +570,8 @@ acpi_ds_init_buffer_field (
 
 
 	/* Reference count for buffer_desc inherits obj_desc count */
 	/* Reference count for buffer_desc inherits obj_desc count */
 
 
-	buffer_desc->common.reference_count = (u16) (buffer_desc->common.reference_count +
-			  obj_desc->common.reference_count);
+	buffer_desc->common.reference_count = (u16)
+		(buffer_desc->common.reference_count + obj_desc->common.reference_count);
 
 
 
 
 cleanup:
 cleanup:
@@ -569,7 +600,7 @@ cleanup:
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_eval_buffer_field_operands
  * FUNCTION:    acpi_ds_eval_buffer_field_operands
  *
  *
@@ -581,7 +612,7 @@ cleanup:
  * DESCRIPTION: Get buffer_field Buffer and Index
  * DESCRIPTION: Get buffer_field Buffer and Index
  *              Called from acpi_ds_exec_end_op during buffer_field parse tree walk
  *              Called from acpi_ds_exec_end_op during buffer_field parse tree walk
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_eval_buffer_field_operands (
 acpi_ds_eval_buffer_field_operands (
@@ -656,7 +687,7 @@ acpi_ds_eval_buffer_field_operands (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_eval_region_operands
  * FUNCTION:    acpi_ds_eval_region_operands
  *
  *
@@ -668,7 +699,7 @@ acpi_ds_eval_buffer_field_operands (
  * DESCRIPTION: Get region address and length
  * DESCRIPTION: Get region address and length
  *              Called from acpi_ds_exec_end_op during op_region parse tree walk
  *              Called from acpi_ds_exec_end_op during op_region parse tree walk
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_eval_region_operands (
 acpi_ds_eval_region_operands (
@@ -686,7 +717,8 @@ acpi_ds_eval_region_operands (
 
 
 
 
 	/*
 	/*
-	 * This is where we evaluate the address and length fields of the op_region declaration
+	 * This is where we evaluate the address and length fields of the
+	 * op_region declaration
 	 */
 	 */
 	node =  op->common.node;
 	node =  op->common.node;
 
 
@@ -707,7 +739,8 @@ acpi_ds_eval_region_operands (
 
 
 	/* Resolve the length and address operands to numbers */
 	/* Resolve the length and address operands to numbers */
 
 
-	status = acpi_ex_resolve_operands (op->common.aml_opcode, ACPI_WALK_OPERANDS, walk_state);
+	status = acpi_ex_resolve_operands (op->common.aml_opcode,
+			 ACPI_WALK_OPERANDS, walk_state);
 	if (ACPI_FAILURE (status)) {
 	if (ACPI_FAILURE (status)) {
 		return_ACPI_STATUS (status);
 		return_ACPI_STATUS (status);
 	}
 	}
@@ -736,7 +769,8 @@ acpi_ds_eval_region_operands (
 	 */
 	 */
 	operand_desc = walk_state->operands[walk_state->num_operands - 2];
 	operand_desc = walk_state->operands[walk_state->num_operands - 2];
 
 
-	obj_desc->region.address = (acpi_physical_address) operand_desc->integer.value;
+	obj_desc->region.address = (acpi_physical_address)
+			  operand_desc->integer.value;
 	acpi_ut_remove_reference (operand_desc);
 	acpi_ut_remove_reference (operand_desc);
 
 
 	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "rgn_obj %p Addr %8.8X%8.8X Len %X\n",
 	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "rgn_obj %p Addr %8.8X%8.8X Len %X\n",
@@ -752,7 +786,7 @@ acpi_ds_eval_region_operands (
 }
 }
 
 
 
 
-/*****************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_eval_data_object_operands
  * FUNCTION:    acpi_ds_eval_data_object_operands
  *
  *
@@ -765,7 +799,7 @@ acpi_ds_eval_region_operands (
  * DESCRIPTION: Get the operands and complete the following data object types:
  * DESCRIPTION: Get the operands and complete the following data object types:
  *              Buffer, Package.
  *              Buffer, Package.
  *
  *
- ****************************************************************************/
+ ******************************************************************************/
 
 
 acpi_status
 acpi_status
 acpi_ds_eval_data_object_operands (
 acpi_ds_eval_data_object_operands (
@@ -830,7 +864,7 @@ acpi_ds_eval_data_object_operands (
 
 
 	if (ACPI_SUCCESS (status)) {
 	if (ACPI_SUCCESS (status)) {
 		/*
 		/*
-		 * Return the object in the walk_state, unless the parent is a package --
+		 * Return the object in the walk_state, unless the parent is a package -
 		 * in this case, the return object will be stored in the parse tree
 		 * in this case, the return object will be stored in the parse tree
 		 * for the package.
 		 * for the package.
 		 */
 		 */
@@ -988,7 +1022,8 @@ acpi_ds_exec_end_control_op (
 			status = AE_CTRL_PENDING;
 			status = AE_CTRL_PENDING;
 		}
 		}
 
 
-		ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[WHILE_OP] termination! Op=%p\n", op));
+		ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+			"[WHILE_OP] termination! Op=%p\n",op));
 
 
 		/* Pop this control state and free it */
 		/* Pop this control state and free it */
 
 

+ 24 - 17
drivers/acpi/dispatcher/dsutils.c

@@ -100,7 +100,6 @@ acpi_ds_clear_implicit_return (
 
 
 
 
 #ifndef ACPI_NO_METHOD_EXECUTION
 #ifndef ACPI_NO_METHOD_EXECUTION
-
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_do_implicit_return
  * FUNCTION:    acpi_ds_do_implicit_return
@@ -205,7 +204,7 @@ acpi_ds_is_result_used (
 	 * NOTE: this is optional because the ASL language does not actually
 	 * NOTE: this is optional because the ASL language does not actually
 	 * support this behavior.
 	 * support this behavior.
 	 */
 	 */
-	acpi_ds_do_implicit_return (walk_state->result_obj, walk_state, TRUE);
+	(void) acpi_ds_do_implicit_return (walk_state->result_obj, walk_state, TRUE);
 
 
 	/*
 	/*
 	 * Now determine if the parent will use the result
 	 * Now determine if the parent will use the result
@@ -219,8 +218,9 @@ acpi_ds_is_result_used (
 		(op->common.parent->common.aml_opcode == AML_SCOPE_OP)) {
 		(op->common.parent->common.aml_opcode == AML_SCOPE_OP)) {
 		/* No parent, the return value cannot possibly be used */
 		/* No parent, the return value cannot possibly be used */
 
 
-		ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "At Method level, result of [%s] not used\n",
-				acpi_ps_get_opcode_name (op->common.aml_opcode)));
+		ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+			"At Method level, result of [%s] not used\n",
+			acpi_ps_get_opcode_name (op->common.aml_opcode)));
 		return_VALUE (FALSE);
 		return_VALUE (FALSE);
 	}
 	}
 
 
@@ -228,7 +228,8 @@ acpi_ds_is_result_used (
 
 
 	parent_info = acpi_ps_get_opcode_info (op->common.parent->common.aml_opcode);
 	parent_info = acpi_ps_get_opcode_info (op->common.parent->common.aml_opcode);
 	if (parent_info->class == AML_CLASS_UNKNOWN) {
 	if (parent_info->class == AML_CLASS_UNKNOWN) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown parent opcode. Op=%p\n", op));
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"Unknown parent opcode. Op=%p\n", op));
 		return_VALUE (FALSE);
 		return_VALUE (FALSE);
 	}
 	}
 
 
@@ -309,17 +310,19 @@ acpi_ds_is_result_used (
 
 
 
 
 result_used:
 result_used:
-	ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Result of [%s] used by Parent [%s] Op=%p\n",
-			acpi_ps_get_opcode_name (op->common.aml_opcode),
-			acpi_ps_get_opcode_name (op->common.parent->common.aml_opcode), op));
+	ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+		"Result of [%s] used by Parent [%s] Op=%p\n",
+		acpi_ps_get_opcode_name (op->common.aml_opcode),
+		acpi_ps_get_opcode_name (op->common.parent->common.aml_opcode), op));
 
 
 	return_VALUE (TRUE);
 	return_VALUE (TRUE);
 
 
 
 
 result_not_used:
 result_not_used:
-	ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Result of [%s] not used by Parent [%s] Op=%p\n",
-			acpi_ps_get_opcode_name (op->common.aml_opcode),
-			acpi_ps_get_opcode_name (op->common.parent->common.aml_opcode), op));
+	ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+		"Result of [%s] not used by Parent [%s] Op=%p\n",
+		acpi_ps_get_opcode_name (op->common.aml_opcode),
+		acpi_ps_get_opcode_name (op->common.parent->common.aml_opcode), op));
 
 
 	return_VALUE (FALSE);
 	return_VALUE (FALSE);
 }
 }
@@ -522,7 +525,8 @@ acpi_ds_create_operand (
 		if ((walk_state->deferred_node) &&
 		if ((walk_state->deferred_node) &&
 			(walk_state->deferred_node->type == ACPI_TYPE_BUFFER_FIELD) &&
 			(walk_state->deferred_node->type == ACPI_TYPE_BUFFER_FIELD) &&
 			(arg_index != 0)) {
 			(arg_index != 0)) {
-			obj_desc = ACPI_CAST_PTR (union acpi_operand_object, walk_state->deferred_node);
+			obj_desc = ACPI_CAST_PTR (
+					 union acpi_operand_object, walk_state->deferred_node);
 			status = AE_OK;
 			status = AE_OK;
 		}
 		}
 		else    /* All other opcodes */ {
 		else    /* All other opcodes */ {
@@ -565,7 +569,8 @@ acpi_ds_create_operand (
 					 * indicate this to the interpreter, set the
 					 * indicate this to the interpreter, set the
 					 * object to the root
 					 * object to the root
 					 */
 					 */
-					obj_desc = ACPI_CAST_PTR (union acpi_operand_object, acpi_gbl_root_node);
+					obj_desc = ACPI_CAST_PTR (
+							 union acpi_operand_object, acpi_gbl_root_node);
 					status = AE_OK;
 					status = AE_OK;
 				}
 				}
 				else {
 				else {
@@ -612,7 +617,8 @@ acpi_ds_create_operand (
 			 */
 			 */
 			opcode = AML_ZERO_OP;       /* Has no arguments! */
 			opcode = AML_ZERO_OP;       /* Has no arguments! */
 
 
-			ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Null namepath: Arg=%p\n", arg));
+			ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+				"Null namepath: Arg=%p\n", arg));
 		}
 		}
 		else {
 		else {
 			opcode = arg->common.aml_opcode;
 			opcode = arg->common.aml_opcode;
@@ -642,7 +648,8 @@ acpi_ds_create_operand (
 				 * Only error is underflow, and this indicates
 				 * Only error is underflow, and this indicates
 				 * a missing or null operand!
 				 * a missing or null operand!
 				 */
 				 */
-				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Missing or null operand, %s\n",
+				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+					"Missing or null operand, %s\n",
 					acpi_format_exception (status)));
 					acpi_format_exception (status)));
 				return_ACPI_STATUS (status);
 				return_ACPI_STATUS (status);
 			}
 			}
@@ -657,8 +664,8 @@ acpi_ds_create_operand (
 
 
 			/* Initialize the new object */
 			/* Initialize the new object */
 
 
-			status = acpi_ds_init_object_from_op (walk_state, arg,
-					 opcode, &obj_desc);
+			status = acpi_ds_init_object_from_op (
+					 walk_state, arg, opcode, &obj_desc);
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
 				acpi_ut_delete_object_desc (obj_desc);
 				acpi_ut_delete_object_desc (obj_desc);
 				return_ACPI_STATUS (status);
 				return_ACPI_STATUS (status);

+ 31 - 26
drivers/acpi/dispatcher/dswexec.c

@@ -73,11 +73,13 @@ static ACPI_EXECUTE_OP      acpi_gbl_op_type_dispatch [] = {
 			  acpi_ex_opcode_3A_1T_1R,
 			  acpi_ex_opcode_3A_1T_1R,
 			  acpi_ex_opcode_6A_0T_1R};
 			  acpi_ex_opcode_6A_0T_1R};
 
 
+
 /*****************************************************************************
 /*****************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_get_predicate_value
  * FUNCTION:    acpi_ds_get_predicate_value
  *
  *
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
+ *              result_obj      - if non-zero, pop result from result stack
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
@@ -124,7 +126,8 @@ acpi_ds_get_predicate_value (
 	}
 	}
 
 
 	if (!obj_desc) {
 	if (!obj_desc) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No predicate obj_desc=%p State=%p\n",
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"No predicate obj_desc=%p State=%p\n",
 			obj_desc, walk_state));
 			obj_desc, walk_state));
 
 
 		return_ACPI_STATUS (AE_AML_NO_OPERAND);
 		return_ACPI_STATUS (AE_AML_NO_OPERAND);
@@ -197,7 +200,7 @@ cleanup:
  * FUNCTION:    acpi_ds_exec_begin_op
  * FUNCTION:    acpi_ds_exec_begin_op
  *
  *
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
- *              out_op          - Return op if a new one is created
+ *              out_op          - Where to return op if a new one is created
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
@@ -233,7 +236,8 @@ acpi_ds_exec_begin_op (
 		walk_state->op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
 		walk_state->op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
 
 
 		if (acpi_ns_opens_scope (walk_state->op_info->object_type)) {
 		if (acpi_ns_opens_scope (walk_state->op_info->object_type)) {
-			ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+				"(%s) Popping scope for Op %p\n",
 				acpi_ut_get_type_name (walk_state->op_info->object_type), op));
 				acpi_ut_get_type_name (walk_state->op_info->object_type), op));
 
 
 			status = acpi_ds_scope_stack_pop (walk_state);
 			status = acpi_ds_scope_stack_pop (walk_state);
@@ -297,11 +301,10 @@ acpi_ds_exec_begin_op (
 
 
 		if (walk_state->walk_type == ACPI_WALK_METHOD) {
 		if (walk_state->walk_type == ACPI_WALK_METHOD) {
 			/*
 			/*
-			 * Found a named object declaration during method
-			 * execution;  we must enter this object into the
-			 * namespace.  The created object is temporary and
-			 * will be deleted upon completion of the execution
-			 * of this method.
+			 * Found a named object declaration during method execution;
+			 * we must enter this object into the namespace.  The created
+			 * object is temporary and will be deleted upon completion of
+			 * the execution of this method.
 			 */
 			 */
 			status = acpi_ds_load2_begin_op (walk_state, NULL);
 			status = acpi_ds_load2_begin_op (walk_state, NULL);
 		}
 		}
@@ -338,8 +341,6 @@ acpi_ds_exec_begin_op (
  * FUNCTION:    acpi_ds_exec_end_op
  * FUNCTION:    acpi_ds_exec_end_op
  *
  *
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
- *              Op              - Op that has been just been completed in the
- *                                walk;  Arguments have now been evaluated.
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
@@ -389,7 +390,7 @@ acpi_ds_exec_end_op (
 	/* Decode the Opcode Class */
 	/* Decode the Opcode Class */
 
 
 	switch (op_class) {
 	switch (op_class) {
-	case AML_CLASS_ARGUMENT:    /* constants, literals, etc. -- do nothing */
+	case AML_CLASS_ARGUMENT:    /* constants, literals, etc. - do nothing */
 		break;
 		break;
 
 
 
 
@@ -417,12 +418,12 @@ acpi_ds_exec_end_op (
 			/* Resolve all operands */
 			/* Resolve all operands */
 
 
 			status = acpi_ex_resolve_operands (walk_state->opcode,
 			status = acpi_ex_resolve_operands (walk_state->opcode,
-					  &(walk_state->operands [walk_state->num_operands -1]),
-					  walk_state);
+					 &(walk_state->operands [walk_state->num_operands -1]),
+					 walk_state);
 			if (ACPI_SUCCESS (status)) {
 			if (ACPI_SUCCESS (status)) {
 				ACPI_DUMP_OPERANDS (ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
 				ACPI_DUMP_OPERANDS (ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
-						  acpi_ps_get_opcode_name (walk_state->opcode),
-						  walk_state->num_operands, "after ex_resolve_operands");
+					acpi_ps_get_opcode_name (walk_state->opcode),
+					walk_state->num_operands, "after ex_resolve_operands");
 			}
 			}
 		}
 		}
 
 
@@ -506,7 +507,8 @@ acpi_ds_exec_end_op (
 			if ((op->asl.parent) &&
 			if ((op->asl.parent) &&
 			   ((op->asl.parent->asl.aml_opcode == AML_PACKAGE_OP) ||
 			   ((op->asl.parent->asl.aml_opcode == AML_PACKAGE_OP) ||
 				(op->asl.parent->asl.aml_opcode == AML_VAR_PACKAGE_OP))) {
 				(op->asl.parent->asl.aml_opcode == AML_VAR_PACKAGE_OP))) {
-				ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Method Reference in a Package, Op=%p\n", op));
+				ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+					"Method Reference in a Package, Op=%p\n", op));
 				op->common.node = (struct acpi_namespace_node *) op->asl.value.arg->asl.node->object;
 				op->common.node = (struct acpi_namespace_node *) op->asl.value.arg->asl.node->object;
 				acpi_ut_add_reference (op->asl.value.arg->asl.node->object);
 				acpi_ut_add_reference (op->asl.value.arg->asl.node->object);
 				return_ACPI_STATUS (AE_OK);
 				return_ACPI_STATUS (AE_OK);
@@ -583,13 +585,15 @@ acpi_ds_exec_end_op (
 			case AML_NAME_OP:
 			case AML_NAME_OP:
 
 
 				/*
 				/*
-				 * Put the Node on the object stack (Contains the ACPI Name of
-				 * this object)
+				 * Put the Node on the object stack (Contains the ACPI Name
+				 * of this object)
 				 */
 				 */
 				walk_state->operands[0] = (void *) op->common.parent->common.node;
 				walk_state->operands[0] = (void *) op->common.parent->common.node;
 				walk_state->num_operands = 1;
 				walk_state->num_operands = 1;
 
 
-				status = acpi_ds_create_node (walk_state, op->common.parent->common.node, op->common.parent);
+				status = acpi_ds_create_node (walk_state,
+						 op->common.parent->common.node,
+						 op->common.parent);
 				if (ACPI_FAILURE (status)) {
 				if (ACPI_FAILURE (status)) {
 					break;
 					break;
 				}
 				}
@@ -600,7 +604,7 @@ acpi_ds_exec_end_op (
 			case AML_INT_EVAL_SUBTREE_OP:
 			case AML_INT_EVAL_SUBTREE_OP:
 
 
 				status = acpi_ds_eval_data_object_operands (walk_state, op,
 				status = acpi_ds_eval_data_object_operands (walk_state, op,
-						  acpi_ns_get_attached_object (op->common.parent->common.node));
+						 acpi_ns_get_attached_object (op->common.parent->common.node));
 				break;
 				break;
 
 
 			default:
 			default:
@@ -609,7 +613,7 @@ acpi_ds_exec_end_op (
 				break;
 				break;
 			}
 			}
 
 
-			/* Done with this result state (Now that operand stack is built) */
+			/* Done with result state (Now that operand stack is built) */
 
 
 			status = acpi_ds_result_stack_pop (walk_state);
 			status = acpi_ds_result_stack_pop (walk_state);
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
@@ -620,8 +624,7 @@ acpi_ds_exec_end_op (
 			 * If a result object was returned from above, push it on the
 			 * If a result object was returned from above, push it on the
 			 * current result stack
 			 * current result stack
 			 */
 			 */
-			if (ACPI_SUCCESS (status) &&
-				walk_state->result_obj) {
+			if (walk_state->result_obj) {
 				status = acpi_ds_result_push (walk_state->result_obj, walk_state);
 				status = acpi_ds_result_push (walk_state->result_obj, walk_state);
 			}
 			}
 			break;
 			break;
@@ -654,7 +657,8 @@ acpi_ds_exec_end_op (
 
 
 		case AML_TYPE_UNDEFINED:
 		case AML_TYPE_UNDEFINED:
 
 
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Undefined opcode type Op=%p\n", op));
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Undefined opcode type Op=%p\n", op));
 			return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
 			return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
 
 
 
 
@@ -709,13 +713,14 @@ cleanup:
 		status = acpi_gbl_exception_handler (status,
 		status = acpi_gbl_exception_handler (status,
 				 walk_state->method_node->name.integer, walk_state->opcode,
 				 walk_state->method_node->name.integer, walk_state->opcode,
 				 walk_state->aml_offset, NULL);
 				 walk_state->aml_offset, NULL);
-		acpi_ex_enter_interpreter ();
+		(void) acpi_ex_enter_interpreter ();
 	}
 	}
 
 
 	if (walk_state->result_obj) {
 	if (walk_state->result_obj) {
 		/* Break to debugger to display result */
 		/* Break to debugger to display result */
 
 
-		ACPI_DEBUGGER_EXEC (acpi_db_display_result_object (walk_state->result_obj, walk_state));
+		ACPI_DEBUGGER_EXEC (acpi_db_display_result_object (walk_state->result_obj,
+				 walk_state));
 
 
 		/*
 		/*
 		 * Delete the result op if and only if:
 		 * Delete the result op if and only if:

+ 72 - 46
drivers/acpi/dispatcher/dswload.c

@@ -79,20 +79,23 @@ acpi_ds_init_callbacks (
 
 
 	switch (pass_number) {
 	switch (pass_number) {
 	case 1:
 	case 1:
-		walk_state->parse_flags       = ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE;
+		walk_state->parse_flags       = ACPI_PARSE_LOAD_PASS1 |
+				   ACPI_PARSE_DELETE_TREE;
 		walk_state->descending_callback = acpi_ds_load1_begin_op;
 		walk_state->descending_callback = acpi_ds_load1_begin_op;
 		walk_state->ascending_callback = acpi_ds_load1_end_op;
 		walk_state->ascending_callback = acpi_ds_load1_end_op;
 		break;
 		break;
 
 
 	case 2:
 	case 2:
-		walk_state->parse_flags       = ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE;
+		walk_state->parse_flags       = ACPI_PARSE_LOAD_PASS1 |
+				   ACPI_PARSE_DELETE_TREE;
 		walk_state->descending_callback = acpi_ds_load2_begin_op;
 		walk_state->descending_callback = acpi_ds_load2_begin_op;
 		walk_state->ascending_callback = acpi_ds_load2_end_op;
 		walk_state->ascending_callback = acpi_ds_load2_end_op;
 		break;
 		break;
 
 
 	case 3:
 	case 3:
 #ifndef ACPI_NO_METHOD_EXECUTION
 #ifndef ACPI_NO_METHOD_EXECUTION
-		walk_state->parse_flags      |= ACPI_PARSE_EXECUTE  | ACPI_PARSE_DELETE_TREE;
+		walk_state->parse_flags      |= ACPI_PARSE_EXECUTE  |
+				   ACPI_PARSE_DELETE_TREE;
 		walk_state->descending_callback = acpi_ds_exec_begin_op;
 		walk_state->descending_callback = acpi_ds_exec_begin_op;
 		walk_state->ascending_callback = acpi_ds_exec_end_op;
 		walk_state->ascending_callback = acpi_ds_exec_end_op;
 #endif
 #endif
@@ -111,8 +114,7 @@ acpi_ds_init_callbacks (
  * FUNCTION:    acpi_ds_load1_begin_op
  * FUNCTION:    acpi_ds_load1_begin_op
  *
  *
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
  * 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          - Where to return op if a new one is created
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
@@ -146,7 +148,8 @@ acpi_ds_load1_begin_op (
 #if 0
 #if 0
 			if ((walk_state->op_info->class == AML_CLASS_EXECUTE) ||
 			if ((walk_state->op_info->class == AML_CLASS_EXECUTE) ||
 				(walk_state->op_info->class == AML_CLASS_CONTROL)) {
 				(walk_state->op_info->class == AML_CLASS_CONTROL)) {
-				acpi_os_printf ("\n\n***EXECUTABLE OPCODE %s***\n\n", walk_state->op_info->name);
+				acpi_os_printf ("\n\n***EXECUTABLE OPCODE %s***\n\n",
+					walk_state->op_info->name);
 				*out_op = op;
 				*out_op = op;
 				return (AE_CTRL_SKIP);
 				return (AE_CTRL_SKIP);
 			}
 			}
@@ -191,7 +194,8 @@ acpi_ds_load1_begin_op (
 			 */
 			 */
 			acpi_dm_add_to_external_list (path);
 			acpi_dm_add_to_external_list (path);
 			status = acpi_ns_lookup (walk_state->scope_info, path, object_type,
 			status = acpi_ns_lookup (walk_state->scope_info, path, object_type,
-					   ACPI_IMODE_LOAD_PASS1, ACPI_NS_SEARCH_PARENT, walk_state, &(node));
+					   ACPI_IMODE_LOAD_PASS1, ACPI_NS_SEARCH_PARENT,
+					   walk_state, &(node));
 		}
 		}
 #endif
 #endif
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
@@ -224,10 +228,12 @@ acpi_ds_load1_begin_op (
 			 *  Name (DEB, 0)
 			 *  Name (DEB, 0)
 			 *  Scope (DEB) { ... }
 			 *  Scope (DEB) { ... }
 			 *
 			 *
-			 * Note: silently change the type here.  On the second pass, we will report a warning
+			 * Note: silently change the type here.  On the second pass, we will report
+			 * a warning
 			 */
 			 */
 
 
-			ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+				"Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)\n",
 				path, acpi_ut_get_type_name (node->type)));
 				path, acpi_ut_get_type_name (node->type)));
 
 
 			node->type = ACPI_TYPE_ANY;
 			node->type = ACPI_TYPE_ANY;
@@ -238,7 +244,8 @@ acpi_ds_load1_begin_op (
 
 
 			/* All other types are an error */
 			/* All other types are an error */
 
 
-			ACPI_REPORT_ERROR (("Invalid type (%s) for target of Scope operator [%4.4s] (Cannot override)\n",
+			ACPI_REPORT_ERROR ((
+				"Invalid type (%s) for target of Scope operator [%4.4s] (Cannot override)\n",
 				acpi_ut_get_type_name (node->type), path));
 				acpi_ut_get_type_name (node->type), path));
 
 
 			return (AE_AML_OPERAND_TYPE);
 			return (AE_AML_OPERAND_TYPE);
@@ -249,7 +256,8 @@ acpi_ds_load1_begin_op (
 	default:
 	default:
 
 
 		/*
 		/*
-		 * For all other named opcodes, we will enter the name into the namespace.
+		 * For all other named opcodes, we will enter the name into
+		 * the namespace.
 		 *
 		 *
 		 * Setup the search flags.
 		 * Setup the search flags.
 		 * Since we are entering a name into the namespace, we do not want to
 		 * Since we are entering a name into the namespace, we do not want to
@@ -279,14 +287,16 @@ acpi_ds_load1_begin_op (
 					acpi_ut_get_type_name (object_type)));
 					acpi_ut_get_type_name (object_type)));
 		}
 		}
 		else {
 		else {
-			ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[%s] Both Find or Create allowed\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+				"[%s] Both Find or Create allowed\n",
 					acpi_ut_get_type_name (object_type)));
 					acpi_ut_get_type_name (object_type)));
 		}
 		}
 
 
 		/*
 		/*
 		 * Enter the named type into the internal namespace.  We enter the name
 		 * Enter the named type into the internal namespace.  We enter the name
-		 * as we go downward in the parse tree.  Any necessary subobjects that involve
-		 * arguments to the opcode must be created as we go back up the parse tree later.
+		 * as we go downward in the parse tree.  Any necessary subobjects that
+		 * involve arguments to the opcode must be created as we go back up the
+		 * parse tree later.
 		 */
 		 */
 		status = acpi_ns_lookup (walk_state->scope_info, path, object_type,
 		status = acpi_ns_lookup (walk_state->scope_info, path, object_type,
 				  ACPI_IMODE_LOAD_PASS1, flags, walk_state, &(node));
 				  ACPI_IMODE_LOAD_PASS1, flags, walk_state, &(node));
@@ -335,8 +345,6 @@ acpi_ds_load1_begin_op (
  * FUNCTION:    acpi_ds_load1_end_op
  * FUNCTION:    acpi_ds_load1_end_op
  *
  *
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
- *              Op              - Op that has been just been completed in the
- *                                walk;  Arguments have now been evaluated.
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
@@ -383,7 +391,9 @@ acpi_ds_load1_end_op (
 
 
 	if (op->common.aml_opcode == AML_REGION_OP) {
 	if (op->common.aml_opcode == AML_REGION_OP) {
 		status = acpi_ex_create_region (op->named.data, op->named.length,
 		status = acpi_ex_create_region (op->named.data, op->named.length,
-				   (acpi_adr_space_type) ((op->common.value.arg)->common.value.integer), walk_state);
+				   (acpi_adr_space_type)
+						 ((op->common.value.arg)->common.value.integer),
+						 walk_state);
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
 			return (status);
 			return (status);
 		}
 		}
@@ -394,7 +404,8 @@ acpi_ds_load1_end_op (
 		/* For Name opcode, get the object type from the argument */
 		/* For Name opcode, get the object type from the argument */
 
 
 		if (op->common.value.arg) {
 		if (op->common.value.arg) {
-			object_type = (acpi_ps_get_opcode_info ((op->common.value.arg)->common.aml_opcode))->object_type;
+			object_type = (acpi_ps_get_opcode_info (
+				(op->common.value.arg)->common.aml_opcode))->object_type;
 			op->common.node->type = (u8) object_type;
 			op->common.node->type = (u8) object_type;
 		}
 		}
 	}
 	}
@@ -448,8 +459,7 @@ acpi_ds_load1_end_op (
  * FUNCTION:    acpi_ds_load2_begin_op
  * FUNCTION:    acpi_ds_load2_begin_op
  *
  *
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
  * 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          - Wher to return op if a new one is created
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
@@ -478,14 +488,20 @@ acpi_ds_load2_begin_op (
 	if (op) {
 	if (op) {
 		/* We only care about Namespace opcodes here */
 		/* We only care about Namespace opcodes here */
 
 
-		if ((!(walk_state->op_info->flags & AML_NSOPCODE) && (walk_state->opcode != AML_INT_NAMEPATH_OP)) ||
+		if ((!(walk_state->op_info->flags & AML_NSOPCODE) &&
+			  (walk_state->opcode != AML_INT_NAMEPATH_OP)) ||
 			(!(walk_state->op_info->flags & AML_NAMED))) {
 			(!(walk_state->op_info->flags & AML_NAMED))) {
+			if ((walk_state->op_info->class == AML_CLASS_EXECUTE) ||
+				(walk_state->op_info->class == AML_CLASS_CONTROL)) {
+				ACPI_REPORT_WARNING ((
+					"Encountered executable code at module level, [%s]\n",
+					acpi_ps_get_opcode_name (walk_state->opcode)));
+			}
 			return_ACPI_STATUS (AE_OK);
 			return_ACPI_STATUS (AE_OK);
 		}
 		}
 
 
-		/*
-		 * Get the name we are going to enter or lookup in the namespace
-		 */
+		/* Get the name we are going to enter or lookup in the namespace */
+
 		if (walk_state->opcode == AML_INT_NAMEPATH_OP) {
 		if (walk_state->opcode == AML_INT_NAMEPATH_OP) {
 			/* For Namepath op, get the path string */
 			/* For Namepath op, get the path string */
 
 
@@ -528,21 +544,25 @@ acpi_ds_load2_begin_op (
 	case AML_INT_NAMEPATH_OP:
 	case 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
+		 * 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.
 		 */
 		 */
 		status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
 		status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
-				  ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, walk_state, &(node));
+				  ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
+				  walk_state, &(node));
 		break;
 		break;
 
 
 	case AML_SCOPE_OP:
 	case AML_SCOPE_OP:
 
 
 		/*
 		/*
-		 * The Path is an object reference to an existing object.  Don't enter the
-		 * name into the namespace, but look it up for use later
+		 * The Path is an object reference to an existing object.
+		 * Don't enter the name into the namespace, but look it up
+		 * for use later.
 		 */
 		 */
 		status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
 		status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
-				  ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, walk_state, &(node));
+				  ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
+				  walk_state, &(node));
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
 #ifdef _ACPI_ASL_COMPILER
 #ifdef _ACPI_ASL_COMPILER
 			if (status == AE_NOT_FOUND) {
 			if (status == AE_NOT_FOUND) {
@@ -582,7 +602,8 @@ acpi_ds_load2_begin_op (
 			 *  Scope (DEB) { ... }
 			 *  Scope (DEB) { ... }
 			 */
 			 */
 
 
-			ACPI_REPORT_WARNING (("Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)\n",
+			ACPI_REPORT_WARNING ((
+				"Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)\n",
 				buffer_ptr, acpi_ut_get_type_name (node->type)));
 				buffer_ptr, acpi_ut_get_type_name (node->type)));
 
 
 			node->type = ACPI_TYPE_ANY;
 			node->type = ACPI_TYPE_ANY;
@@ -593,7 +614,8 @@ acpi_ds_load2_begin_op (
 
 
 			/* All other types are an error */
 			/* All other types are an error */
 
 
-			ACPI_REPORT_ERROR (("Invalid type (%s) for target of Scope operator [%4.4s]\n",
+			ACPI_REPORT_ERROR ((
+				"Invalid type (%s) for target of Scope operator [%4.4s]\n",
 				acpi_ut_get_type_name (node->type), buffer_ptr));
 				acpi_ut_get_type_name (node->type), buffer_ptr));
 
 
 			return (AE_AML_OPERAND_TYPE);
 			return (AE_AML_OPERAND_TYPE);
@@ -621,8 +643,9 @@ acpi_ds_load2_begin_op (
 
 
 		/*
 		/*
 		 * Enter the named type into the internal namespace.  We enter the name
 		 * Enter the named type into the internal namespace.  We enter the name
-		 * as we go downward in the parse tree.  Any necessary subobjects that involve
-		 * arguments to the opcode must be created as we go back up the parse tree later.
+		 * as we go downward in the parse tree.  Any necessary subobjects that
+		 * involve arguments to the opcode must be created as we go back up the
+		 * parse tree later.
 		 *
 		 *
 		 * Note: Name may already exist if we are executing a deferred opcode.
 		 * Note: Name may already exist if we are executing a deferred opcode.
 		 */
 		 */
@@ -635,7 +658,8 @@ acpi_ds_load2_begin_op (
 		}
 		}
 
 
 		status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
 		status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
-				  ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, walk_state, &(node));
+				  ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH,
+				  walk_state, &(node));
 		break;
 		break;
 	}
 	}
 
 
@@ -678,8 +702,6 @@ acpi_ds_load2_begin_op (
  * FUNCTION:    acpi_ds_load2_end_op
  * FUNCTION:    acpi_ds_load2_end_op
  *
  *
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
  * PARAMETERS:  walk_state      - Current state of the parse tree walk
- *              Op              - Op that has been just been completed in the
- *                                walk;  Arguments have now been evaluated.
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
@@ -738,7 +760,8 @@ acpi_ds_load2_end_op (
 
 
 	/* Pop the scope stack */
 	/* Pop the scope stack */
 
 
-	if (acpi_ns_opens_scope (object_type) && (op->common.aml_opcode != AML_INT_METHODCALL_OP)) {
+	if (acpi_ns_opens_scope (object_type) &&
+	   (op->common.aml_opcode != AML_INT_METHODCALL_OP)) {
 		ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n",
 		ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n",
 			acpi_ut_get_type_name (object_type), op));
 			acpi_ut_get_type_name (object_type), op));
 
 
@@ -803,7 +826,7 @@ acpi_ds_load2_end_op (
 		case AML_INDEX_FIELD_OP:
 		case AML_INDEX_FIELD_OP:
 
 
 			status = acpi_ds_create_index_field (op, (acpi_handle) arg->common.node,
 			status = acpi_ds_create_index_field (op, (acpi_handle) arg->common.node,
-					   walk_state);
+					 walk_state);
 			break;
 			break;
 
 
 		case AML_BANK_FIELD_OP:
 		case AML_BANK_FIELD_OP:
@@ -884,14 +907,16 @@ acpi_ds_load2_end_op (
 #ifndef ACPI_NO_METHOD_EXECUTION
 #ifndef ACPI_NO_METHOD_EXECUTION
 		case AML_REGION_OP:
 		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)
+			 * 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)
 			 */
 			 */
 			/*
 			/*
 			 * If we have a valid region, initialize it
 			 * If we have a valid region, initialize it
 			 * Namespace is NOT locked at this point.
 			 * Namespace is NOT locked at this point.
 			 */
 			 */
-			status = acpi_ev_initialize_region (acpi_ns_get_attached_object (node), FALSE);
+			status = acpi_ev_initialize_region (acpi_ns_get_attached_object (node),
+					 FALSE);
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
 				/*
 				/*
 				 *  If AE_NOT_EXIST is returned, it is not fatal
 				 *  If AE_NOT_EXIST is returned, it is not fatal
@@ -942,15 +967,16 @@ acpi_ds_load2_end_op (
 		if (ACPI_SUCCESS (status)) {
 		if (ACPI_SUCCESS (status)) {
 			/*
 			/*
 			 * Make sure that what we found is indeed a method
 			 * 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
+			 * We didn't search for a method on purpose, to see if the name
+			 * would resolve
 			 */
 			 */
 			if (new_node->type != ACPI_TYPE_METHOD) {
 			if (new_node->type != ACPI_TYPE_METHOD) {
 				status = AE_AML_OPERAND_TYPE;
 				status = AE_AML_OPERAND_TYPE;
 			}
 			}
 
 
-			/* 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
+			/* 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->common.node = new_node;
 			op->common.node = new_node;
 		}
 		}

+ 15 - 16
drivers/acpi/dispatcher/dswscope.c

@@ -50,14 +50,13 @@
 	 ACPI_MODULE_NAME    ("dswscope")
 	 ACPI_MODULE_NAME    ("dswscope")
 
 
 
 
-#define STACK_POP(head) head
-
-
 /****************************************************************************
 /****************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_scope_stack_clear
  * FUNCTION:    acpi_ds_scope_stack_clear
  *
  *
- * PARAMETERS:  None
+ * PARAMETERS:  walk_state      - Current state
+ *
+ * RETURN:      None
  *
  *
  * DESCRIPTION: Pop (and free) everything on the scope stack except the
  * DESCRIPTION: Pop (and free) everything on the scope stack except the
  *              root scope object (which remains at the stack top.)
  *              root scope object (which remains at the stack top.)
@@ -80,7 +79,8 @@ acpi_ds_scope_stack_clear (
 		walk_state->scope_info = scope_info->scope.next;
 		walk_state->scope_info = scope_info->scope.next;
 
 
 		ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
 		ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-			"Popped object type (%s)\n", acpi_ut_get_type_name (scope_info->common.value)));
+			"Popped object type (%s)\n",
+			acpi_ut_get_type_name (scope_info->common.value)));
 		acpi_ut_delete_generic_state (scope_info);
 		acpi_ut_delete_generic_state (scope_info);
 	}
 	}
 }
 }
@@ -90,8 +90,11 @@ acpi_ds_scope_stack_clear (
  *
  *
  * FUNCTION:    acpi_ds_scope_stack_push
  * FUNCTION:    acpi_ds_scope_stack_push
  *
  *
- * PARAMETERS:  *Node,              - Name to be made current
- *              Type,               - Type of frame being pushed
+ * PARAMETERS:  Node            - Name to be made current
+ *              Type            - Type of frame being pushed
+ *              walk_state      - Current state
+ *
+ * RETURN:      Status
  *
  *
  * DESCRIPTION: Push the current scope on the scope stack, and make the
  * DESCRIPTION: Push the current scope on the scope stack, and make the
  *              passed Node current.
  *              passed Node current.
@@ -121,7 +124,8 @@ acpi_ds_scope_stack_push (
 	/* Make sure object type is valid */
 	/* Make sure object type is valid */
 
 
 	if (!acpi_ut_valid_object_type (type)) {
 	if (!acpi_ut_valid_object_type (type)) {
-		ACPI_REPORT_WARNING (("ds_scope_stack_push: Invalid object type: 0x%X\n", type));
+		ACPI_REPORT_WARNING ((
+			"ds_scope_stack_push: Invalid object type: 0x%X\n", type));
 	}
 	}
 
 
 	/* Allocate a new scope object */
 	/* Allocate a new scope object */
@@ -170,16 +174,11 @@ acpi_ds_scope_stack_push (
  *
  *
  * FUNCTION:    acpi_ds_scope_stack_pop
  * FUNCTION:    acpi_ds_scope_stack_pop
  *
  *
- * PARAMETERS:  Type                - The type of frame to be found
+ * PARAMETERS:  walk_state      - Current state
  *
  *
- * DESCRIPTION: Pop the scope stack until a frame of the requested type
- *              is found.
+ * RETURN:      Status
  *
  *
- * RETURN:      Count of frames popped.  If no frame of the requested type
- *              was found, the count is returned as a negative number and
- *              the scope stack is emptied (which sets the current scope
- *              to the root).  If the scope stack was empty at entry, the
- *              function is a no-op and returns 0.
+ * DESCRIPTION: Pop the scope stack once.
  *
  *
  ***************************************************************************/
  ***************************************************************************/
 
 

+ 244 - 214
drivers/acpi/dispatcher/dswstate.c

@@ -50,67 +50,31 @@
 #define _COMPONENT          ACPI_DISPATCHER
 #define _COMPONENT          ACPI_DISPATCHER
 	 ACPI_MODULE_NAME    ("dswstate")
 	 ACPI_MODULE_NAME    ("dswstate")
 
 
+/* Local prototypes */
 
 
-#ifdef ACPI_FUTURE_USAGE
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ds_result_insert
- *
- * PARAMETERS:  Object              - Object to push
- *              Index               - Where to insert the object
- *              walk_state          - Current Walk state
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Insert an object onto this walk's result stack
- *
- ******************************************************************************/
-
+#ifdef ACPI_OBSOLETE_FUNCTIONS
 acpi_status
 acpi_status
 acpi_ds_result_insert (
 acpi_ds_result_insert (
 	void                            *object,
 	void                            *object,
 	u32                             index,
 	u32                             index,
-	struct acpi_walk_state          *walk_state)
-{
-	union acpi_generic_state        *state;
-
+	struct acpi_walk_state          *walk_state);
 
 
-	ACPI_FUNCTION_NAME ("ds_result_insert");
-
-
-	state = walk_state->results;
-	if (!state) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result object pushed! State=%p\n",
-			walk_state));
-		return (AE_NOT_EXIST);
-	}
-
-	if (index >= ACPI_OBJ_NUM_OPERANDS) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-			"Index out of range: %X Obj=%p State=%p Num=%X\n",
-			index, object, walk_state, state->results.num_results));
-		return (AE_BAD_PARAMETER);
-	}
-
-	if (!object) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-			"Null Object! Index=%X Obj=%p State=%p Num=%X\n",
-			index, object, walk_state, state->results.num_results));
-		return (AE_BAD_PARAMETER);
-	}
-
-	state->results.obj_desc [index] = object;
-	state->results.num_results++;
+acpi_status
+acpi_ds_obj_stack_delete_all (
+	struct acpi_walk_state          *walk_state);
 
 
-	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-		"Obj=%p [%s] State=%p Num=%X Cur=%X\n",
-		object, object ? acpi_ut_get_object_type_name ((union acpi_operand_object *) object) : "NULL",
-		walk_state, state->results.num_results, walk_state->current_result));
+acpi_status
+acpi_ds_obj_stack_pop_object (
+	union acpi_operand_object       **object,
+	struct acpi_walk_state          *walk_state);
 
 
-	return (AE_OK);
-}
+void *
+acpi_ds_obj_stack_get_value (
+	u32                             index,
+	struct acpi_walk_state          *walk_state);
+#endif
 
 
+#ifdef ACPI_FUTURE_USAGE
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
@@ -178,7 +142,6 @@ acpi_ds_result_remove (
 
 
 #endif  /*  ACPI_FUTURE_USAGE  */
 #endif  /*  ACPI_FUTURE_USAGE  */
 
 
-
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_result_pop
  * FUNCTION:    acpi_ds_result_pop
@@ -227,15 +190,18 @@ acpi_ds_result_pop (
 			*object = state->results.obj_desc [index -1];
 			*object = state->results.obj_desc [index -1];
 			state->results.obj_desc [index -1] = NULL;
 			state->results.obj_desc [index -1] = NULL;
 
 
-			ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] Index=%X State=%p Num=%X\n",
-				*object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL",
+			ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
+				"Obj=%p [%s] Index=%X State=%p Num=%X\n",
+				*object,
+				(*object) ? acpi_ut_get_object_type_name (*object) : "NULL",
 				(u32) index -1, walk_state, state->results.num_results));
 				(u32) index -1, walk_state, state->results.num_results));
 
 
 			return (AE_OK);
 			return (AE_OK);
 		}
 		}
 	}
 	}
 
 
-	ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result objects! State=%p\n", walk_state));
+	ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+		"No result objects! State=%p\n", walk_state));
 	return (AE_AML_NO_RETURN_VALUE);
 	return (AE_AML_NO_RETURN_VALUE);
 }
 }
 
 
@@ -274,7 +240,8 @@ acpi_ds_result_pop_from_bottom (
 	}
 	}
 
 
 	if (!state->results.num_results) {
 	if (!state->results.num_results) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result objects! State=%p\n", walk_state));
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result objects! State=%p\n",
+			walk_state));
 		return (AE_AML_NO_RETURN_VALUE);
 		return (AE_AML_NO_RETURN_VALUE);
 	}
 	}
 
 
@@ -293,7 +260,8 @@ acpi_ds_result_pop_from_bottom (
 	/* Check for a valid result object */
 	/* Check for a valid result object */
 
 
 	if (!*object) {
 	if (!*object) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null operand! State=%p #Ops=%X, Index=%X\n",
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"Null operand! State=%p #Ops=%X, Index=%X\n",
 			walk_state, state->results.num_results, (u32) index));
 			walk_state, state->results.num_results, (u32) index));
 		return (AE_AML_NO_RETURN_VALUE);
 		return (AE_AML_NO_RETURN_VALUE);
 	}
 	}
@@ -344,7 +312,8 @@ acpi_ds_result_push (
 	}
 	}
 
 
 	if (!object) {
 	if (!object) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null Object! Obj=%p State=%p Num=%X\n",
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"Null Object! Obj=%p State=%p Num=%X\n",
 			object, walk_state, state->results.num_results));
 			object, walk_state, state->results.num_results));
 		return (AE_BAD_PARAMETER);
 		return (AE_BAD_PARAMETER);
 	}
 	}
@@ -437,43 +406,6 @@ acpi_ds_result_stack_pop (
 }
 }
 
 
 
 
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ds_obj_stack_delete_all
- *
- * PARAMETERS:  walk_state          - Current Walk state
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Clear the object stack by deleting all objects that are on it.
- *              Should be used with great care, if at all!
- *
- ******************************************************************************/
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_ds_obj_stack_delete_all (
-	struct acpi_walk_state          *walk_state)
-{
-	u32                             i;
-
-
-	ACPI_FUNCTION_TRACE_PTR ("ds_obj_stack_delete_all", walk_state);
-
-
-	/* The stack size is configurable, but fixed */
-
-	for (i = 0; i < ACPI_OBJ_NUM_OPERANDS; i++) {
-		if (walk_state->operands[i]) {
-			acpi_ut_remove_reference (walk_state->operands[i]);
-			walk_state->operands[i] = NULL;
-		}
-	}
-
-	return_ACPI_STATUS (AE_OK);
-}
-#endif  /*  ACPI_FUTURE_USAGE  */
-
-
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_obj_stack_push
  * FUNCTION:    acpi_ds_obj_stack_push
@@ -517,67 +449,6 @@ acpi_ds_obj_stack_push (
 }
 }
 
 
 
 
-#if 0
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ds_obj_stack_pop_object
- *
- * PARAMETERS:  pop_count           - Number of objects/entries to pop
- *              walk_state          - Current Walk state
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Pop this walk's object stack.  Objects on the stack are NOT
- *              deleted by this routine.
- *
- ******************************************************************************/
-
-acpi_status
-acpi_ds_obj_stack_pop_object (
-	union acpi_operand_object       **object,
-	struct acpi_walk_state          *walk_state)
-{
-	ACPI_FUNCTION_NAME ("ds_obj_stack_pop_object");
-
-
-	/* Check for stack underflow */
-
-	if (walk_state->num_operands == 0) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-			"Missing operand/stack empty! State=%p #Ops=%X\n",
-			walk_state, walk_state->num_operands));
-		*object = NULL;
-		return (AE_AML_NO_OPERAND);
-	}
-
-	/* Pop the stack */
-
-	walk_state->num_operands--;
-
-	/* Check for a valid operand */
-
-	if (!walk_state->operands [walk_state->num_operands]) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-			"Null operand! State=%p #Ops=%X\n",
-			walk_state, walk_state->num_operands));
-		*object = NULL;
-		return (AE_AML_NO_OPERAND);
-	}
-
-	/* Get operand and set stack entry to null */
-
-	*object = walk_state->operands [walk_state->num_operands];
-	walk_state->operands [walk_state->num_operands] = NULL;
-
-	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n",
-			  *object, acpi_ut_get_object_type_name (*object),
-			  walk_state, walk_state->num_operands));
-
-	return (AE_OK);
-}
-#endif
-
-
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_obj_stack_pop
  * FUNCTION:    acpi_ds_obj_stack_pop
@@ -678,48 +549,6 @@ acpi_ds_obj_stack_pop_and_delete (
 }
 }
 
 
 
 
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ds_obj_stack_get_value
- *
- * PARAMETERS:  Index               - Stack index whose value is desired.  Based
- *                                    on the top of the stack (index=0 == top)
- *              walk_state          - Current Walk state
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Retrieve an object from this walk's object stack.  Index must
- *              be within the range of the current stack pointer.
- *
- ******************************************************************************/
-#ifdef ACPI_FUTURE_USAGE
-void *
-acpi_ds_obj_stack_get_value (
-	u32                             index,
-	struct acpi_walk_state          *walk_state)
-{
-
-	ACPI_FUNCTION_TRACE_PTR ("ds_obj_stack_get_value", walk_state);
-
-
-	/* Can't do it if the stack is empty */
-
-	if (walk_state->num_operands == 0) {
-		return_PTR (NULL);
-	}
-
-	/* or if the index is past the top of the stack */
-
-	if (index > (walk_state->num_operands - (u32) 1)) {
-		return_PTR (NULL);
-	}
-
-	return_PTR (walk_state->operands[(acpi_native_uint)(walk_state->num_operands - 1) -
-			  index]);
-}
-#endif  /*  ACPI_FUTURE_USAGE  */
-
-
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ds_get_current_walk_state
  * FUNCTION:    acpi_ds_get_current_walk_state
@@ -757,11 +586,11 @@ acpi_ds_get_current_walk_state (
  * FUNCTION:    acpi_ds_push_walk_state
  * FUNCTION:    acpi_ds_push_walk_state
  *
  *
  * PARAMETERS:  walk_state      - State to push
  * PARAMETERS:  walk_state      - State to push
- *              walk_list       - The list that owns the walk stack
+ *              Thread          - Thread state object
  *
  *
  * RETURN:      None
  * RETURN:      None
  *
  *
- * DESCRIPTION: Place the walk_state at the head of the state list.
+ * DESCRIPTION: Place the Thread state at the head of the state list.
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
@@ -784,9 +613,9 @@ acpi_ds_push_walk_state (
  *
  *
  * FUNCTION:    acpi_ds_pop_walk_state
  * FUNCTION:    acpi_ds_pop_walk_state
  *
  *
- * PARAMETERS:  walk_list       - The list that owns the walk stack
+ * PARAMETERS:  Thread      - Current thread state
  *
  *
- * RETURN:      A walk_state object popped from the stack
+ * RETURN:      A walk_state object popped from the thread's stack
  *
  *
  * DESCRIPTION: Remove and return the walkstate object that is at the head of
  * DESCRIPTION: Remove and return the walkstate object that is at the head of
  *              the walk stack for the given walk list.  NULL indicates that
  *              the walk stack for the given walk list.  NULL indicates that
@@ -814,7 +643,7 @@ acpi_ds_pop_walk_state (
 		/*
 		/*
 		 * Don't clear the NEXT field, this serves as an indicator
 		 * Don't clear the NEXT field, this serves as an indicator
 		 * that there is a parent WALK STATE
 		 * that there is a parent WALK STATE
-		 *     NO: walk_state->Next = NULL;
+		 * Do Not: walk_state->Next = NULL;
 		 */
 		 */
 	}
 	}
 
 
@@ -826,7 +655,9 @@ acpi_ds_pop_walk_state (
  *
  *
  * FUNCTION:    acpi_ds_create_walk_state
  * FUNCTION:    acpi_ds_create_walk_state
  *
  *
- * PARAMETERS:  Origin          - Starting point for this walk
+ * PARAMETERS:  owner_id        - ID for object creation
+ *              Origin          - Starting point for this walk
+ *              mth_desc        - Method object
  *              Thread          - Current thread state
  *              Thread          - Current thread state
  *
  *
  * RETURN:      Pointer to the new walk state.
  * RETURN:      Pointer to the new walk state.
@@ -896,8 +727,7 @@ acpi_ds_create_walk_state (
  *              method_node     - Control method NS node, if any
  *              method_node     - Control method NS node, if any
  *              aml_start       - Start of AML
  *              aml_start       - Start of AML
  *              aml_length      - Length of AML
  *              aml_length      - Length of AML
- *              Params          - Method args, if any
- *              return_obj_desc - Where to store a return object, if any
+ *              Info            - Method info block (params, etc.)
  *              pass_number     - 1, 2, or 3
  *              pass_number     - 1, 2, or 3
  *
  *
  * RETURN:      Status
  * RETURN:      Status
@@ -931,7 +761,7 @@ acpi_ds_init_aml_walk (
 
 
 	/* The next_op of the next_walk will be the beginning of the method */
 	/* The next_op of the next_walk will be the beginning of the method */
 
 
-	walk_state->next_op             = NULL;
+	walk_state->next_op = NULL;
 
 
 	if (info) {
 	if (info) {
 		if (info->parameter_type == ACPI_PARAM_GPE) {
 		if (info->parameter_type == ACPI_PARAM_GPE) {
@@ -939,8 +769,8 @@ acpi_ds_init_aml_walk (
 					   info->parameters);
 					   info->parameters);
 		}
 		}
 		else {
 		else {
-			walk_state->params              = info->parameters;
-			walk_state->caller_return_desc  = &info->return_object;
+			walk_state->params          = info->parameters;
+			walk_state->caller_return_desc = &info->return_object;
 		}
 		}
 	}
 	}
 
 
@@ -964,7 +794,8 @@ acpi_ds_init_aml_walk (
 
 
 		/* Init the method arguments */
 		/* Init the method arguments */
 
 
-		status = acpi_ds_method_data_init_args (walk_state->params, ACPI_METHOD_NUM_ARGS, walk_state);
+		status = acpi_ds_method_data_init_args (walk_state->params,
+				 ACPI_METHOD_NUM_ARGS, walk_state);
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
 			return_ACPI_STATUS (status);
 			return_ACPI_STATUS (status);
 		}
 		}
@@ -1031,12 +862,14 @@ acpi_ds_delete_walk_state (
 	}
 	}
 
 
 	if (walk_state->data_type != ACPI_DESC_TYPE_WALK) {
 	if (walk_state->data_type != ACPI_DESC_TYPE_WALK) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p is not a valid walk state\n", walk_state));
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p is not a valid walk state\n",
+			walk_state));
 		return;
 		return;
 	}
 	}
 
 
 	if (walk_state->parser_state.scope) {
 	if (walk_state->parser_state.scope) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p walk still has a scope list\n", walk_state));
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p walk still has a scope list\n",
+			walk_state));
 	}
 	}
 
 
 	/* Always must free any linked control states */
 	/* Always must free any linked control states */
@@ -1078,7 +911,7 @@ acpi_ds_delete_walk_state (
  *
  *
  * PARAMETERS:  None
  * PARAMETERS:  None
  *
  *
- * RETURN:      Status
+ * RETURN:      None
  *
  *
  * DESCRIPTION: Purge the global state object cache.  Used during subsystem
  * DESCRIPTION: Purge the global state object cache.  Used during subsystem
  *              termination.
  *              termination.
@@ -1098,3 +931,200 @@ acpi_ds_delete_walk_state_cache (
 #endif
 #endif
 
 
 
 
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ds_result_insert
+ *
+ * PARAMETERS:  Object              - Object to push
+ *              Index               - Where to insert the object
+ *              walk_state          - Current Walk state
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Insert an object onto this walk's result stack
+ *
+ ******************************************************************************/
+
+acpi_status
+acpi_ds_result_insert (
+	void                            *object,
+	u32                             index,
+	struct acpi_walk_state          *walk_state)
+{
+	union acpi_generic_state        *state;
+
+
+	ACPI_FUNCTION_NAME ("ds_result_insert");
+
+
+	state = walk_state->results;
+	if (!state) {
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result object pushed! State=%p\n",
+			walk_state));
+		return (AE_NOT_EXIST);
+	}
+
+	if (index >= ACPI_OBJ_NUM_OPERANDS) {
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"Index out of range: %X Obj=%p State=%p Num=%X\n",
+			index, object, walk_state, state->results.num_results));
+		return (AE_BAD_PARAMETER);
+	}
+
+	if (!object) {
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"Null Object! Index=%X Obj=%p State=%p Num=%X\n",
+			index, object, walk_state, state->results.num_results));
+		return (AE_BAD_PARAMETER);
+	}
+
+	state->results.obj_desc [index] = object;
+	state->results.num_results++;
+
+	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
+		"Obj=%p [%s] State=%p Num=%X Cur=%X\n",
+		object, object ? acpi_ut_get_object_type_name ((union acpi_operand_object *) object) : "NULL",
+		walk_state, state->results.num_results, walk_state->current_result));
+
+	return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ds_obj_stack_delete_all
+ *
+ * PARAMETERS:  walk_state          - Current Walk state
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Clear the object stack by deleting all objects that are on it.
+ *              Should be used with great care, if at all!
+ *
+ ******************************************************************************/
+
+acpi_status
+acpi_ds_obj_stack_delete_all (
+	struct acpi_walk_state          *walk_state)
+{
+	u32                             i;
+
+
+	ACPI_FUNCTION_TRACE_PTR ("ds_obj_stack_delete_all", walk_state);
+
+
+	/* The stack size is configurable, but fixed */
+
+	for (i = 0; i < ACPI_OBJ_NUM_OPERANDS; i++) {
+		if (walk_state->operands[i]) {
+			acpi_ut_remove_reference (walk_state->operands[i]);
+			walk_state->operands[i] = NULL;
+		}
+	}
+
+	return_ACPI_STATUS (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ds_obj_stack_pop_object
+ *
+ * PARAMETERS:  Object              - Where to return the popped object
+ *              walk_state          - Current Walk state
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Pop this walk's object stack.  Objects on the stack are NOT
+ *              deleted by this routine.
+ *
+ ******************************************************************************/
+
+acpi_status
+acpi_ds_obj_stack_pop_object (
+	union acpi_operand_object       **object,
+	struct acpi_walk_state          *walk_state)
+{
+	ACPI_FUNCTION_NAME ("ds_obj_stack_pop_object");
+
+
+	/* Check for stack underflow */
+
+	if (walk_state->num_operands == 0) {
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"Missing operand/stack empty! State=%p #Ops=%X\n",
+			walk_state, walk_state->num_operands));
+		*object = NULL;
+		return (AE_AML_NO_OPERAND);
+	}
+
+	/* Pop the stack */
+
+	walk_state->num_operands--;
+
+	/* Check for a valid operand */
+
+	if (!walk_state->operands [walk_state->num_operands]) {
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"Null operand! State=%p #Ops=%X\n",
+			walk_state, walk_state->num_operands));
+		*object = NULL;
+		return (AE_AML_NO_OPERAND);
+	}
+
+	/* Get operand and set stack entry to null */
+
+	*object = walk_state->operands [walk_state->num_operands];
+	walk_state->operands [walk_state->num_operands] = NULL;
+
+	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n",
+			  *object, acpi_ut_get_object_type_name (*object),
+			  walk_state, walk_state->num_operands));
+
+	return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ds_obj_stack_get_value
+ *
+ * PARAMETERS:  Index               - Stack index whose value is desired.  Based
+ *                                    on the top of the stack (index=0 == top)
+ *              walk_state          - Current Walk state
+ *
+ * RETURN:      Pointer to the requested operand
+ *
+ * DESCRIPTION: Retrieve an object from this walk's operand stack.  Index must
+ *              be within the range of the current stack pointer.
+ *
+ ******************************************************************************/
+
+void *
+acpi_ds_obj_stack_get_value (
+	u32                             index,
+	struct acpi_walk_state          *walk_state)
+{
+
+	ACPI_FUNCTION_TRACE_PTR ("ds_obj_stack_get_value", walk_state);
+
+
+	/* Can't do it if the stack is empty */
+
+	if (walk_state->num_operands == 0) {
+		return_PTR (NULL);
+	}
+
+	/* or if the index is past the top of the stack */
+
+	if (index > (walk_state->num_operands - (u32) 1)) {
+		return_PTR (NULL);
+	}
+
+	return_PTR (walk_state->operands[(acpi_native_uint)(walk_state->num_operands - 1) -
+			  index]);
+}
+#endif
+
+

+ 288 - 132
drivers/acpi/ec.c

@@ -31,6 +31,7 @@
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/proc_fs.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/seq_file.h>
+#include <linux/interrupt.h>
 #include <asm/io.h>
 #include <asm/io.h>
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 #include <acpi/acpi_drivers.h>
@@ -49,17 +50,19 @@ ACPI_MODULE_NAME		("acpi_ec")
 
 
 #define ACPI_EC_FLAG_OBF	0x01	/* Output buffer full */
 #define ACPI_EC_FLAG_OBF	0x01	/* Output buffer full */
 #define ACPI_EC_FLAG_IBF	0x02	/* Input buffer full */
 #define ACPI_EC_FLAG_IBF	0x02	/* Input buffer full */
+#define ACPI_EC_FLAG_BURST	0x10	/* burst mode */
 #define ACPI_EC_FLAG_SCI	0x20	/* EC-SCI occurred */
 #define ACPI_EC_FLAG_SCI	0x20	/* EC-SCI occurred */
 
 
 #define ACPI_EC_EVENT_OBF	0x01	/* Output buffer full */
 #define ACPI_EC_EVENT_OBF	0x01	/* Output buffer full */
 #define ACPI_EC_EVENT_IBE	0x02	/* Input buffer empty */
 #define ACPI_EC_EVENT_IBE	0x02	/* Input buffer empty */
 
 
-#define ACPI_EC_UDELAY		100	/* Poll @ 100us increments */
-#define ACPI_EC_UDELAY_COUNT	1000	/* Wait 10ms max. during EC ops */
+#define ACPI_EC_DELAY		50	/* Wait 50ms max. during EC ops */
 #define ACPI_EC_UDELAY_GLK	1000	/* Wait 1ms max. to get global lock */
 #define ACPI_EC_UDELAY_GLK	1000	/* Wait 1ms max. to get global lock */
 
 
 #define ACPI_EC_COMMAND_READ	0x80
 #define ACPI_EC_COMMAND_READ	0x80
 #define ACPI_EC_COMMAND_WRITE	0x81
 #define ACPI_EC_COMMAND_WRITE	0x81
+#define ACPI_EC_BURST_ENABLE	0x82
+#define ACPI_EC_BURST_DISABLE	0x83
 #define ACPI_EC_COMMAND_QUERY	0x84
 #define ACPI_EC_COMMAND_QUERY	0x84
 
 
 static int acpi_ec_add (struct acpi_device *device);
 static int acpi_ec_add (struct acpi_device *device);
@@ -87,7 +90,11 @@ struct acpi_ec {
 	struct acpi_generic_address	command_addr;
 	struct acpi_generic_address	command_addr;
 	struct acpi_generic_address	data_addr;
 	struct acpi_generic_address	data_addr;
 	unsigned long			global_lock;
 	unsigned long			global_lock;
-	spinlock_t			lock;
+	unsigned int			expect_event;
+	atomic_t			leaving_burst; /* 0 : No, 1 : Yes, 2: abort*/
+	atomic_t			pending_gpe;
+	struct semaphore		sem;
+	wait_queue_head_t		wait;
 };
 };
 
 
 /* If we find an EC via the ECDT, we need to keep a ptr to its context */
 /* If we find an EC via the ECDT, we need to keep a ptr to its context */
@@ -100,42 +107,122 @@ static struct acpi_device *first_ec;
                              Transaction Management
                              Transaction Management
    -------------------------------------------------------------------------- */
    -------------------------------------------------------------------------- */
 
 
-static int
-acpi_ec_wait (
-	struct acpi_ec		*ec,
-	u8			event)
+static inline u32 acpi_ec_read_status(struct acpi_ec *ec)
 {
 {
-	u32			acpi_ec_status = 0;
-	u32			i = ACPI_EC_UDELAY_COUNT;
+	u32	status = 0;
 
 
-	if (!ec)
-		return -EINVAL;
+	acpi_hw_low_level_read(8, &status, &ec->status_addr);
+	return status;
+}
+
+static int acpi_ec_wait(struct acpi_ec *ec, unsigned int event)
+{
+	int	result = 0;
+
+	ACPI_FUNCTION_TRACE("acpi_ec_wait");
 
 
-	/* Poll the EC status register waiting for the event to occur. */
+	ec->expect_event = event;
+	smp_mb();
+
+	result = wait_event_interruptible_timeout(ec->wait,
+					!ec->expect_event,
+					msecs_to_jiffies(ACPI_EC_DELAY));
+	
+	ec->expect_event = 0;
+	smp_mb();
+
+	if (result < 0){
+		ACPI_DEBUG_PRINT((ACPI_DB_ERROR," result  = %d ", result));
+		return_VALUE(result);
+	}
+
+	/*
+	 * Verify that the event in question has actually happened by
+	 * querying EC status. Do the check even if operation timed-out
+	 * to make sure that we did not miss interrupt.
+	 */
 	switch (event) {
 	switch (event) {
 	case ACPI_EC_EVENT_OBF:
 	case ACPI_EC_EVENT_OBF:
-		do {
-			acpi_hw_low_level_read(8, &acpi_ec_status, &ec->status_addr);
-			if (acpi_ec_status & ACPI_EC_FLAG_OBF)
-				return 0;
-			udelay(ACPI_EC_UDELAY);
-		} while (--i>0);
+		if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_OBF)
+			return_VALUE(0);
 		break;
 		break;
+
 	case ACPI_EC_EVENT_IBE:
 	case ACPI_EC_EVENT_IBE:
-		do {
-			acpi_hw_low_level_read(8, &acpi_ec_status, &ec->status_addr);
-			if (!(acpi_ec_status & ACPI_EC_FLAG_IBF))
-				return 0;
-			udelay(ACPI_EC_UDELAY);
-		} while (--i>0);
+		if (~acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF)
+			return_VALUE(0);
 		break;
 		break;
-	default:
-		return -EINVAL;
 	}
 	}
 
 
-	return -ETIME;
+	return_VALUE(-ETIME);
+}
+
+
+
+static int
+acpi_ec_enter_burst_mode (
+	struct acpi_ec		*ec)
+{
+	u32			tmp = 0;
+	int			status = 0;
+
+	ACPI_FUNCTION_TRACE("acpi_ec_enter_burst_mode");
+
+	status = acpi_ec_read_status(ec);
+	if (status != -EINVAL &&
+		!(status & ACPI_EC_FLAG_BURST)){
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,"entering burst mode \n"));
+		acpi_hw_low_level_write(8, ACPI_EC_BURST_ENABLE, &ec->command_addr);
+		status = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
+		if (status){
+			acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+			ACPI_DEBUG_PRINT((ACPI_DB_ERROR," status = %d\n", status));
+			return_VALUE(-EINVAL);
+		}
+		acpi_hw_low_level_read(8, &tmp, &ec->data_addr);
+		acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+		if(tmp != 0x90 ) {/* Burst ACK byte*/
+			ACPI_DEBUG_PRINT((ACPI_DB_ERROR,"Ack failed \n"));
+			return_VALUE(-EINVAL);
+		}
+	} else
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,"already be in burst mode \n"));
+	atomic_set(&ec->leaving_burst , 0);
+	return_VALUE(0);
 }
 }
 
 
+static int
+acpi_ec_leave_burst_mode (
+	struct acpi_ec		*ec)
+{
+	int			status =0;
+
+	ACPI_FUNCTION_TRACE("acpi_ec_leave_burst_mode");
+
+	atomic_set(&ec->leaving_burst , 1);
+	status = acpi_ec_read_status(ec);
+	if (status != -EINVAL &&
+		(status & ACPI_EC_FLAG_BURST)){
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,"leaving burst mode\n"));
+		acpi_hw_low_level_write(8, ACPI_EC_BURST_DISABLE, &ec->command_addr);
+		status = acpi_ec_wait(ec, ACPI_EC_FLAG_IBF);
+		if (status){
+			acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+			ACPI_DEBUG_PRINT((ACPI_DB_ERROR,"------->wait fail\n"));
+			return_VALUE(-EINVAL);
+		}
+		acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+		status = acpi_ec_read_status(ec);
+		if (status != -EINVAL &&
+			(status & ACPI_EC_FLAG_BURST)) {
+			ACPI_DEBUG_PRINT((ACPI_DB_ERROR,"------->status fail\n"));
+			return_VALUE(-EINVAL);
+		}
+	}else
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,"already be in Non-burst mode \n"));
+	ACPI_DEBUG_PRINT((ACPI_DB_INFO,"leaving burst mode\n"));
+
+	return_VALUE(0);
+}
 
 
 static int
 static int
 acpi_ec_read (
 acpi_ec_read (
@@ -143,16 +230,15 @@ acpi_ec_read (
 	u8			address,
 	u8			address,
 	u32			*data)
 	u32			*data)
 {
 {
-	acpi_status		status = AE_OK;
-	int			result = 0;
-	unsigned long		flags = 0;
-	u32			glk = 0;
+	int			status = 0;
+	u32			glk;
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_read");
 	ACPI_FUNCTION_TRACE("acpi_ec_read");
 
 
 	if (!ec || !data)
 	if (!ec || !data)
 		return_VALUE(-EINVAL);
 		return_VALUE(-EINVAL);
 
 
+retry:
 	*data = 0;
 	*data = 0;
 
 
 	if (ec->global_lock) {
 	if (ec->global_lock) {
@@ -160,32 +246,50 @@ acpi_ec_read (
 		if (ACPI_FAILURE(status))
 		if (ACPI_FAILURE(status))
 			return_VALUE(-ENODEV);
 			return_VALUE(-ENODEV);
 	}
 	}
-	
-	spin_lock_irqsave(&ec->lock, flags);
+
+	WARN_ON(in_interrupt());
+	down(&ec->sem);
+
+	if(acpi_ec_enter_burst_mode(ec))
+		goto end;
 
 
 	acpi_hw_low_level_write(8, ACPI_EC_COMMAND_READ, &ec->command_addr);
 	acpi_hw_low_level_write(8, ACPI_EC_COMMAND_READ, &ec->command_addr);
-	result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
-	if (result)
+	status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
+	acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+	if (status) {
 		goto end;
 		goto end;
+	}
 
 
 	acpi_hw_low_level_write(8, address, &ec->data_addr);
 	acpi_hw_low_level_write(8, address, &ec->data_addr);
-	result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
-	if (result)
+	status= acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
+	if (status){
+		acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
 		goto end;
 		goto end;
-
+	}
 
 
 	acpi_hw_low_level_read(8, data, &ec->data_addr);
 	acpi_hw_low_level_read(8, data, &ec->data_addr);
+	acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
 
 
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Read [%02x] from address [%02x]\n",
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Read [%02x] from address [%02x]\n",
 		*data, address));
 		*data, address));
-
+	
 end:
 end:
-	spin_unlock_irqrestore(&ec->lock, flags);
+	acpi_ec_leave_burst_mode(ec);
+	up(&ec->sem);
 
 
 	if (ec->global_lock)
 	if (ec->global_lock)
 		acpi_release_global_lock(glk);
 		acpi_release_global_lock(glk);
 
 
-	return_VALUE(result);
+	if(atomic_read(&ec->leaving_burst) == 2){
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,"aborted, retry ...\n"));
+		while(atomic_read(&ec->pending_gpe)){
+			msleep(1);	
+		}
+		acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+		goto retry;
+	}
+
+	return_VALUE(status);
 }
 }
 
 
 
 
@@ -195,49 +299,80 @@ acpi_ec_write (
 	u8			address,
 	u8			address,
 	u8			data)
 	u8			data)
 {
 {
-	int			result = 0;
-	acpi_status		status = AE_OK;
-	unsigned long		flags = 0;
-	u32			glk = 0;
+	int			status = 0;
+	u32			glk;
+	u32			tmp;
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_write");
 	ACPI_FUNCTION_TRACE("acpi_ec_write");
 
 
 	if (!ec)
 	if (!ec)
 		return_VALUE(-EINVAL);
 		return_VALUE(-EINVAL);
-
+retry:
 	if (ec->global_lock) {
 	if (ec->global_lock) {
 		status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
 		status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
 		if (ACPI_FAILURE(status))
 		if (ACPI_FAILURE(status))
 			return_VALUE(-ENODEV);
 			return_VALUE(-ENODEV);
 	}
 	}
 
 
-	spin_lock_irqsave(&ec->lock, flags);
+	WARN_ON(in_interrupt());
+	down(&ec->sem);
+
+	if(acpi_ec_enter_burst_mode(ec))
+		goto end;
+
+	status = acpi_ec_read_status(ec);
+	if (status != -EINVAL &&
+		!(status & ACPI_EC_FLAG_BURST)){
+		acpi_hw_low_level_write(8, ACPI_EC_BURST_ENABLE, &ec->command_addr);
+		status = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
+		if (status)
+			goto end;
+		acpi_hw_low_level_read(8, &tmp, &ec->data_addr);
+		if(tmp != 0x90 ) /* Burst ACK byte*/
+			goto end;
+	}
+	/*Now we are in burst mode*/
 
 
 	acpi_hw_low_level_write(8, ACPI_EC_COMMAND_WRITE, &ec->command_addr);
 	acpi_hw_low_level_write(8, ACPI_EC_COMMAND_WRITE, &ec->command_addr);
-	result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
-	if (result)
+	status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
+	acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+	if (status){
 		goto end;
 		goto end;
+	}
 
 
 	acpi_hw_low_level_write(8, address, &ec->data_addr);
 	acpi_hw_low_level_write(8, address, &ec->data_addr);
-	result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
-	if (result)
+	status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
+	if (status){
+		acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
 		goto end;
 		goto end;
+	}
 
 
 	acpi_hw_low_level_write(8, data, &ec->data_addr);
 	acpi_hw_low_level_write(8, data, &ec->data_addr);
-	result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
-	if (result)
+	status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
+	acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+	if (status)
 		goto end;
 		goto end;
 
 
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Wrote [%02x] to address [%02x]\n",
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Wrote [%02x] to address [%02x]\n",
 		data, address));
 		data, address));
 
 
 end:
 end:
-	spin_unlock_irqrestore(&ec->lock, flags);
+	acpi_ec_leave_burst_mode(ec);
+	up(&ec->sem);
 
 
 	if (ec->global_lock)
 	if (ec->global_lock)
 		acpi_release_global_lock(glk);
 		acpi_release_global_lock(glk);
 
 
-	return_VALUE(result);
+	if(atomic_read(&ec->leaving_burst) == 2){
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,"aborted, retry ...\n"));
+		while(atomic_read(&ec->pending_gpe)){
+			msleep(1);	
+		}
+		acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+		goto retry;
+	}
+
+	return_VALUE(status);
 }
 }
 
 
 /*
 /*
@@ -289,16 +424,13 @@ acpi_ec_query (
 	struct acpi_ec		*ec,
 	struct acpi_ec		*ec,
 	u32			*data)
 	u32			*data)
 {
 {
-	int			result = 0;
-	acpi_status		status = AE_OK;
-	unsigned long		flags = 0;
-	u32			glk = 0;
+	int			status = 0;
+	u32			glk;
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_query");
 	ACPI_FUNCTION_TRACE("acpi_ec_query");
 
 
 	if (!ec || !data)
 	if (!ec || !data)
 		return_VALUE(-EINVAL);
 		return_VALUE(-EINVAL);
-
 	*data = 0;
 	*data = 0;
 
 
 	if (ec->global_lock) {
 	if (ec->global_lock) {
@@ -307,29 +439,39 @@ acpi_ec_query (
 			return_VALUE(-ENODEV);
 			return_VALUE(-ENODEV);
 	}
 	}
 
 
+	down(&ec->sem);
+	if(acpi_ec_enter_burst_mode(ec))
+		goto end;
 	/*
 	/*
 	 * Query the EC to find out which _Qxx method we need to evaluate.
 	 * Query the EC to find out which _Qxx method we need to evaluate.
 	 * Note that successful completion of the query causes the ACPI_EC_SCI
 	 * Note that successful completion of the query causes the ACPI_EC_SCI
 	 * bit to be cleared (and thus clearing the interrupt source).
 	 * bit to be cleared (and thus clearing the interrupt source).
 	 */
 	 */
-	spin_lock_irqsave(&ec->lock, flags);
-
 	acpi_hw_low_level_write(8, ACPI_EC_COMMAND_QUERY, &ec->command_addr);
 	acpi_hw_low_level_write(8, ACPI_EC_COMMAND_QUERY, &ec->command_addr);
-	result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
-	if (result)
+	status = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
+	if (status){
+		acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
 		goto end;
 		goto end;
-	
+	}
+
 	acpi_hw_low_level_read(8, data, &ec->data_addr);
 	acpi_hw_low_level_read(8, data, &ec->data_addr);
+	acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
 	if (!*data)
 	if (!*data)
-		result = -ENODATA;
+		status = -ENODATA;
 
 
 end:
 end:
-	spin_unlock_irqrestore(&ec->lock, flags);
+	acpi_ec_leave_burst_mode(ec);
+	up(&ec->sem);
 
 
 	if (ec->global_lock)
 	if (ec->global_lock)
 		acpi_release_global_lock(glk);
 		acpi_release_global_lock(glk);
 
 
-	return_VALUE(result);
+	if(atomic_read(&ec->leaving_burst) == 2){
+		ACPI_DEBUG_PRINT((ACPI_DB_INFO,"aborted, retry ...\n"));
+		acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+		status = -ENODATA;
+	}
+	return_VALUE(status);
 }
 }
 
 
 
 
@@ -347,42 +489,29 @@ acpi_ec_gpe_query (
 	void			*ec_cxt)
 	void			*ec_cxt)
 {
 {
 	struct acpi_ec		*ec = (struct acpi_ec *) ec_cxt;
 	struct acpi_ec		*ec = (struct acpi_ec *) ec_cxt;
-	u32			value = 0;
-	unsigned long		flags = 0;
+	u32			value;
+	int			result = -ENODATA;
 	static char		object_name[5] = {'_','Q','0','0','\0'};
 	static char		object_name[5] = {'_','Q','0','0','\0'};
 	const char		hex[] = {'0','1','2','3','4','5','6','7',
 	const char		hex[] = {'0','1','2','3','4','5','6','7',
 				         '8','9','A','B','C','D','E','F'};
 				         '8','9','A','B','C','D','E','F'};
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_gpe_query");
 	ACPI_FUNCTION_TRACE("acpi_ec_gpe_query");
 
 
-	if (!ec_cxt)
-		goto end;	
-
-	spin_lock_irqsave(&ec->lock, flags);
-	acpi_hw_low_level_read(8, &value, &ec->command_addr);
-	spin_unlock_irqrestore(&ec->lock, flags);
+	if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_SCI)
+		result = acpi_ec_query(ec, &value);
 
 
-	/* TBD: Implement asynch events!
-	 * NOTE: All we care about are EC-SCI's.  Other EC events are
-	 * handled via polling (yuck!).  This is because some systems
-	 * treat EC-SCIs as level (versus EDGE!) triggered, preventing
-	 *  a purely interrupt-driven approach (grumble, grumble).
-	 */
-	if (!(value & ACPI_EC_FLAG_SCI))
+	if (result)
 		goto end;
 		goto end;
 
 
-	if (acpi_ec_query(ec, &value))
-		goto end;
-	
 	object_name[2] = hex[((value >> 4) & 0x0F)];
 	object_name[2] = hex[((value >> 4) & 0x0F)];
 	object_name[3] = hex[(value & 0x0F)];
 	object_name[3] = hex[(value & 0x0F)];
 
 
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluating %s\n", object_name));
 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluating %s\n", object_name));
 
 
 	acpi_evaluate_object(ec->handle, object_name, NULL, NULL);
 	acpi_evaluate_object(ec->handle, object_name, NULL, NULL);
-
-end:
-	acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
+end:	
+	atomic_dec(&ec->pending_gpe);
+	return;
 }
 }
 
 
 static u32
 static u32
@@ -390,6 +519,7 @@ acpi_ec_gpe_handler (
 	void			*data)
 	void			*data)
 {
 {
 	acpi_status		status = AE_OK;
 	acpi_status		status = AE_OK;
+	u32			value;
 	struct acpi_ec		*ec = (struct acpi_ec *) data;
 	struct acpi_ec		*ec = (struct acpi_ec *) data;
 
 
 	if (!ec)
 	if (!ec)
@@ -397,13 +527,41 @@ acpi_ec_gpe_handler (
 
 
 	acpi_disable_gpe(NULL, ec->gpe_bit, ACPI_ISR);
 	acpi_disable_gpe(NULL, ec->gpe_bit, ACPI_ISR);
 
 
-	status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
-		acpi_ec_gpe_query, ec);
+	value = acpi_ec_read_status(ec);
 
 
-	if (status == AE_OK)
-		return ACPI_INTERRUPT_HANDLED;
-	else
-		return ACPI_INTERRUPT_NOT_HANDLED;
+	if((value & ACPI_EC_FLAG_IBF) &&
+		!(value & ACPI_EC_FLAG_BURST) &&
+			(atomic_read(&ec->leaving_burst) == 0)) { 
+	/*
+	 * the embedded controller disables 
+	 * burst mode for any reason other 
+	 * than the burst disable command
+	 * to process critical event.
+	 */
+		atomic_set(&ec->leaving_burst , 2); /* block current pending transaction
+					and retry */
+		wake_up(&ec->wait);
+	}else {
+		if ((ec->expect_event == ACPI_EC_EVENT_OBF &&
+				(value & ACPI_EC_FLAG_OBF)) ||
+	    			(ec->expect_event == ACPI_EC_EVENT_IBE &&
+				!(value & ACPI_EC_FLAG_IBF))) {
+			ec->expect_event = 0;
+			wake_up(&ec->wait);
+			return ACPI_INTERRUPT_HANDLED;
+		}
+	}
+
+	if (value & ACPI_EC_FLAG_SCI){
+		atomic_add(1, &ec->pending_gpe) ;
+		status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
+						acpi_ec_gpe_query, ec);
+		return status == AE_OK ?
+		ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
+	} 
+	acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_ISR);
+	return status == AE_OK ?
+		ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
 }
 }
 
 
 /* --------------------------------------------------------------------------
 /* --------------------------------------------------------------------------
@@ -421,10 +579,8 @@ acpi_ec_space_setup (
 	 * The EC object is in the handler context and is needed
 	 * The EC object is in the handler context and is needed
 	 * when calling the acpi_ec_space_handler.
 	 * when calling the acpi_ec_space_handler.
 	 */
 	 */
-	if(function == ACPI_REGION_DEACTIVATE) 
-		*return_context = NULL;
-	else 
-		*return_context = handler_context;
+	*return_context  = (function != ACPI_REGION_DEACTIVATE) ?
+						handler_context : NULL;
 
 
 	return AE_OK;
 	return AE_OK;
 }
 }
@@ -441,7 +597,7 @@ acpi_ec_space_handler (
 {
 {
 	int			result = 0;
 	int			result = 0;
 	struct acpi_ec		*ec = NULL;
 	struct acpi_ec		*ec = NULL;
-	u32			temp = 0;
+	u64			temp = *value;
 	acpi_integer		f_v = 0;
 	acpi_integer		f_v = 0;
 	int 			i = 0;
 	int 			i = 0;
 
 
@@ -450,10 +606,9 @@ acpi_ec_space_handler (
 	if ((address > 0xFF) || !value || !handler_context)
 	if ((address > 0xFF) || !value || !handler_context)
 		return_VALUE(AE_BAD_PARAMETER);
 		return_VALUE(AE_BAD_PARAMETER);
 
 
-	if(bit_width != 8) {
+	if (bit_width != 8 && acpi_strict) {
 		printk(KERN_WARNING PREFIX "acpi_ec_space_handler: bit_width should be 8\n");
 		printk(KERN_WARNING PREFIX "acpi_ec_space_handler: bit_width should be 8\n");
-		if (acpi_strict)
-			return_VALUE(AE_BAD_PARAMETER);
+		return_VALUE(AE_BAD_PARAMETER);
 	}
 	}
 
 
 	ec = (struct acpi_ec *) handler_context;
 	ec = (struct acpi_ec *) handler_context;
@@ -461,11 +616,11 @@ acpi_ec_space_handler (
 next_byte:
 next_byte:
 	switch (function) {
 	switch (function) {
 	case ACPI_READ:
 	case ACPI_READ:
-		result = acpi_ec_read(ec, (u8) address, &temp);
-		*value = (acpi_integer) temp;
+		temp = 0;
+		result = acpi_ec_read(ec, (u8) address, (u32 *)&temp);
 		break;
 		break;
 	case ACPI_WRITE:
 	case ACPI_WRITE:
-		result = acpi_ec_write(ec, (u8) address, (u8) *value);
+		result = acpi_ec_write(ec, (u8) address, (u8) temp);
 		break;
 		break;
 	default:
 	default:
 		result = -EINVAL;
 		result = -EINVAL;
@@ -474,19 +629,18 @@ next_byte:
 	}
 	}
 
 
 	bit_width -= 8;
 	bit_width -= 8;
-	if(bit_width){
-
-		if(function == ACPI_READ)
-			f_v |= (acpi_integer) (*value) << 8*i;
-		if(function == ACPI_WRITE)
-			(*value) >>=8; 
+	if (bit_width) {
+		if (function == ACPI_READ)
+			f_v |= temp << 8 * i;
+		if (function == ACPI_WRITE)
+			temp >>= 8;
 		i++;
 		i++;
+		address++;
 		goto next_byte;
 		goto next_byte;
 	}
 	}
 
 
-
-	if(function == ACPI_READ){
-		f_v |= (acpi_integer) (*value) << 8*i;
+	if (function == ACPI_READ) {
+		f_v |= temp << 8 * i;
 		*value = f_v;
 		*value = f_v;
 	}
 	}
 
 
@@ -505,8 +659,6 @@ out:
 	default:
 	default:
 		return_VALUE(AE_OK);
 		return_VALUE(AE_OK);
 	}
 	}
-	
-
 }
 }
 
 
 
 
@@ -533,6 +685,7 @@ acpi_ec_read_info (struct seq_file *seq, void *offset)
 		(u32) ec->status_addr.address, (u32) ec->data_addr.address);
 		(u32) ec->status_addr.address, (u32) ec->data_addr.address);
 	seq_printf(seq, "use global lock:         %s\n",
 	seq_printf(seq, "use global lock:         %s\n",
 		ec->global_lock?"yes":"no");
 		ec->global_lock?"yes":"no");
+	acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
 
 
 end:
 end:
 	return_VALUE(0);
 	return_VALUE(0);
@@ -555,7 +708,7 @@ static int
 acpi_ec_add_fs (
 acpi_ec_add_fs (
 	struct acpi_device	*device)
 	struct acpi_device	*device)
 {
 {
-	struct proc_dir_entry	*entry = NULL;
+	struct proc_dir_entry	*entry;
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_add_fs");
 	ACPI_FUNCTION_TRACE("acpi_ec_add_fs");
 
 
@@ -606,9 +759,9 @@ static int
 acpi_ec_add (
 acpi_ec_add (
 	struct acpi_device	*device)
 	struct acpi_device	*device)
 {
 {
-	int			result = 0;
-	acpi_status		status = AE_OK;
-	struct acpi_ec		*ec = NULL;
+	int			result;
+	acpi_status		status;
+	struct acpi_ec		*ec;
 	unsigned long		uid;
 	unsigned long		uid;
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_add");
 	ACPI_FUNCTION_TRACE("acpi_ec_add");
@@ -623,7 +776,10 @@ acpi_ec_add (
 
 
 	ec->handle = device->handle;
 	ec->handle = device->handle;
 	ec->uid = -1;
 	ec->uid = -1;
-	spin_lock_init(&ec->lock);
+ 	atomic_set(&ec->pending_gpe, 0);
+ 	atomic_set(&ec->leaving_burst , 1);
+ 	init_MUTEX(&ec->sem);
+ 	init_waitqueue_head(&ec->wait);
 	strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
 	strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
 	strcpy(acpi_device_class(device), ACPI_EC_CLASS);
 	strcpy(acpi_device_class(device), ACPI_EC_CLASS);
 	acpi_driver_data(device) = ec;
 	acpi_driver_data(device) = ec;
@@ -637,7 +793,7 @@ acpi_ec_add (
 	if (ec_ecdt && ec_ecdt->uid == uid) {
 	if (ec_ecdt && ec_ecdt->uid == uid) {
 		acpi_remove_address_space_handler(ACPI_ROOT_OBJECT,
 		acpi_remove_address_space_handler(ACPI_ROOT_OBJECT,
 			ACPI_ADR_SPACE_EC, &acpi_ec_space_handler);
 			ACPI_ADR_SPACE_EC, &acpi_ec_space_handler);
-	
+
 		acpi_remove_gpe_handler(NULL, ec_ecdt->gpe_bit, &acpi_ec_gpe_handler);
 		acpi_remove_gpe_handler(NULL, ec_ecdt->gpe_bit, &acpi_ec_gpe_handler);
 
 
 		kfree(ec_ecdt);
 		kfree(ec_ecdt);
@@ -677,7 +833,7 @@ acpi_ec_remove (
 	struct acpi_device	*device,
 	struct acpi_device	*device,
 	int			type)
 	int			type)
 {
 {
-	struct acpi_ec		*ec = NULL;
+	struct acpi_ec		*ec;
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_remove");
 	ACPI_FUNCTION_TRACE("acpi_ec_remove");
 
 
@@ -732,8 +888,8 @@ static int
 acpi_ec_start (
 acpi_ec_start (
 	struct acpi_device	*device)
 	struct acpi_device	*device)
 {
 {
-	acpi_status		status = AE_OK;
-	struct acpi_ec		*ec = NULL;
+	acpi_status		status;
+	struct acpi_ec		*ec;
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_start");
 	ACPI_FUNCTION_TRACE("acpi_ec_start");
 
 
@@ -789,8 +945,8 @@ acpi_ec_stop (
 	struct acpi_device	*device,
 	struct acpi_device	*device,
 	int			type)
 	int			type)
 {
 {
-	acpi_status		status = AE_OK;
-	struct acpi_ec		*ec = NULL;
+	acpi_status		status;
+	struct acpi_ec		*ec;
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_stop");
 	ACPI_FUNCTION_TRACE("acpi_ec_stop");
 
 
@@ -832,7 +988,6 @@ acpi_fake_ecdt_callback (
 	status = acpi_evaluate_integer(handle, "_GPE", NULL, &ec_ecdt->gpe_bit);
 	status = acpi_evaluate_integer(handle, "_GPE", NULL, &ec_ecdt->gpe_bit);
 	if (ACPI_FAILURE(status))
 	if (ACPI_FAILURE(status))
 		return status;
 		return status;
-	spin_lock_init(&ec_ecdt->lock);
 	ec_ecdt->global_lock = TRUE;
 	ec_ecdt->global_lock = TRUE;
 	ec_ecdt->handle = handle;
 	ec_ecdt->handle = handle;
 
 
@@ -890,7 +1045,7 @@ acpi_ec_get_real_ecdt(void)
 	acpi_status		status;
 	acpi_status		status;
 	struct acpi_table_ecdt 	*ecdt_ptr;
 	struct acpi_table_ecdt 	*ecdt_ptr;
 
 
-	status = acpi_get_firmware_table("ECDT", 1, ACPI_LOGICAL_ADDRESSING, 
+	status = acpi_get_firmware_table("ECDT", 1, ACPI_LOGICAL_ADDRESSING,
 		(struct acpi_table_header **) &ecdt_ptr);
 		(struct acpi_table_header **) &ecdt_ptr);
 	if (ACPI_FAILURE(status))
 	if (ACPI_FAILURE(status))
 		return -ENODEV;
 		return -ENODEV;
@@ -905,11 +1060,12 @@ acpi_ec_get_real_ecdt(void)
 		return -ENOMEM;
 		return -ENOMEM;
 	memset(ec_ecdt, 0, sizeof(struct acpi_ec));
 	memset(ec_ecdt, 0, sizeof(struct acpi_ec));
 
 
+ 	init_MUTEX(&ec_ecdt->sem);
+ 	init_waitqueue_head(&ec_ecdt->wait);
 	ec_ecdt->command_addr = ecdt_ptr->ec_control;
 	ec_ecdt->command_addr = ecdt_ptr->ec_control;
 	ec_ecdt->status_addr = ecdt_ptr->ec_control;
 	ec_ecdt->status_addr = ecdt_ptr->ec_control;
 	ec_ecdt->data_addr = ecdt_ptr->ec_data;
 	ec_ecdt->data_addr = ecdt_ptr->ec_data;
 	ec_ecdt->gpe_bit = ecdt_ptr->gpe_bit;
 	ec_ecdt->gpe_bit = ecdt_ptr->gpe_bit;
-	spin_lock_init(&ec_ecdt->lock);
 	/* use the GL just to be safe */
 	/* use the GL just to be safe */
 	ec_ecdt->global_lock = TRUE;
 	ec_ecdt->global_lock = TRUE;
 	ec_ecdt->uid = ecdt_ptr->uid;
 	ec_ecdt->uid = ecdt_ptr->uid;
@@ -978,7 +1134,7 @@ error:
 
 
 static int __init acpi_ec_init (void)
 static int __init acpi_ec_init (void)
 {
 {
-	int			result = 0;
+	int			result;
 
 
 	ACPI_FUNCTION_TRACE("acpi_ec_init");
 	ACPI_FUNCTION_TRACE("acpi_ec_init");
 
 

+ 23 - 10
drivers/acpi/events/evevent.c

@@ -47,6 +47,16 @@
 #define _COMPONENT          ACPI_EVENTS
 #define _COMPONENT          ACPI_EVENTS
 	 ACPI_MODULE_NAME    ("evevent")
 	 ACPI_MODULE_NAME    ("evevent")
 
 
+/* Local prototypes */
+
+static acpi_status
+acpi_ev_fixed_event_initialize (
+	void);
+
+static u32
+acpi_ev_fixed_event_dispatch (
+	u32                             event);
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
@@ -56,7 +66,7 @@
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Initialize global data structures for events.
+ * DESCRIPTION: Initialize global data structures for ACPI events (Fixed, GPE)
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
@@ -78,9 +88,9 @@ acpi_ev_initialize_events (
 	}
 	}
 
 
 	/*
 	/*
-	 * Initialize the Fixed and General Purpose Events. This is
-	 * done prior to enabling SCIs to prevent interrupts from
-	 * occurring before handers are installed.
+	 * Initialize the Fixed and General Purpose Events. This is done prior to
+	 * enabling SCIs to prevent interrupts from occurring before the handlers are
+	 * installed.
 	 */
 	 */
 	status = acpi_ev_fixed_event_initialize ();
 	status = acpi_ev_fixed_event_initialize ();
 	if (ACPI_FAILURE (status)) {
 	if (ACPI_FAILURE (status)) {
@@ -161,7 +171,7 @@ acpi_ev_install_xrupt_handlers (
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ev_fixed_event_initialize (
 acpi_ev_fixed_event_initialize (
 	void)
 	void)
 {
 {
@@ -180,7 +190,8 @@ acpi_ev_fixed_event_initialize (
 		/* Enable the fixed event */
 		/* Enable the fixed event */
 
 
 		if (acpi_gbl_fixed_event_info[i].enable_register_id != 0xFF) {
 		if (acpi_gbl_fixed_event_info[i].enable_register_id != 0xFF) {
-			status = acpi_set_register (acpi_gbl_fixed_event_info[i].enable_register_id,
+			status = acpi_set_register (
+					 acpi_gbl_fixed_event_info[i].enable_register_id,
 					 0, ACPI_MTX_LOCK);
 					 0, ACPI_MTX_LOCK);
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
 				return (status);
 				return (status);
@@ -200,7 +211,7 @@ acpi_ev_fixed_event_initialize (
  *
  *
  * RETURN:      INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
  * RETURN:      INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
  *
  *
- * DESCRIPTION: Checks the PM status register for fixed events
+ * DESCRIPTION: Checks the PM status register for active fixed events
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
@@ -221,8 +232,10 @@ acpi_ev_fixed_event_detect (
 	 * Read the fixed feature status and enable registers, as all the cases
 	 * Read the fixed feature status and enable registers, as all the cases
 	 * depend on their values.  Ignore errors here.
 	 * depend on their values.  Ignore errors here.
 	 */
 	 */
-	(void) acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS, &fixed_status);
-	(void) acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_ENABLE, &fixed_enable);
+	(void) acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS,
+			 &fixed_status);
+	(void) acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_ENABLE,
+			 &fixed_enable);
 
 
 	ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS,
 	ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS,
 		"Fixed Event Block: Enable %08X Status %08X\n",
 		"Fixed Event Block: Enable %08X Status %08X\n",
@@ -259,7 +272,7 @@ acpi_ev_fixed_event_detect (
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-u32
+static u32
 acpi_ev_fixed_event_dispatch (
 acpi_ev_fixed_event_dispatch (
 	u32                             event)
 	u32                             event)
 {
 {

+ 26 - 13
drivers/acpi/events/evgpe.c

@@ -48,6 +48,12 @@
 #define _COMPONENT          ACPI_EVENTS
 #define _COMPONENT          ACPI_EVENTS
 	 ACPI_MODULE_NAME    ("evgpe")
 	 ACPI_MODULE_NAME    ("evgpe")
 
 
+/* Local prototypes */
+
+static void ACPI_SYSTEM_XFACE
+acpi_ev_asynch_execute_gpe_method (
+	void                            *context);
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
@@ -335,8 +341,10 @@ acpi_ev_get_gpe_event_info (
 			gpe_block = acpi_gbl_gpe_fadt_blocks[i];
 			gpe_block = acpi_gbl_gpe_fadt_blocks[i];
 			if (gpe_block) {
 			if (gpe_block) {
 				if ((gpe_number >= gpe_block->block_base_number) &&
 				if ((gpe_number >= gpe_block->block_base_number) &&
-					(gpe_number < gpe_block->block_base_number + (gpe_block->register_count * 8))) {
-					return (&gpe_block->event_info[gpe_number - gpe_block->block_base_number]);
+					(gpe_number < gpe_block->block_base_number +
+						(gpe_block->register_count * 8))) {
+					return (&gpe_block->event_info[gpe_number -
+						gpe_block->block_base_number]);
 				}
 				}
 			}
 			}
 		}
 		}
@@ -437,7 +445,7 @@ acpi_ev_gpe_detect (
 				"Read GPE Register at GPE%X: Status=%02X, Enable=%02X\n",
 				"Read GPE Register at GPE%X: Status=%02X, Enable=%02X\n",
 				gpe_register_info->base_gpe_number, status_reg, enable_reg));
 				gpe_register_info->base_gpe_number, status_reg, enable_reg));
 
 
-			/* First check if there is anything active at all in this register */
+			/* Check if there is anything active at all in this register */
 
 
 			enabled_status_byte = (u8) (status_reg & enable_reg);
 			enabled_status_byte = (u8) (status_reg & enable_reg);
 			if (!enabled_status_byte) {
 			if (!enabled_status_byte) {
@@ -457,8 +465,8 @@ acpi_ev_gpe_detect (
 					 * or method.
 					 * or method.
 					 */
 					 */
 					int_status |= acpi_ev_gpe_dispatch (
 					int_status |= acpi_ev_gpe_dispatch (
-							  &gpe_block->event_info[(i * ACPI_GPE_REGISTER_WIDTH) + j],
-							  (u32) j + gpe_register_info->base_gpe_number);
+						&gpe_block->event_info[(i * ACPI_GPE_REGISTER_WIDTH) + j],
+						(u32) j + gpe_register_info->base_gpe_number);
 				}
 				}
 			}
 			}
 		}
 		}
@@ -523,7 +531,8 @@ acpi_ev_asynch_execute_gpe_method (
 	 * Take a snapshot of the GPE info for this level - we copy the
 	 * Take a snapshot of the GPE info for this level - we copy the
 	 * info to prevent a race condition with remove_handler/remove_block.
 	 * info to prevent a race condition with remove_handler/remove_block.
 	 */
 	 */
-	ACPI_MEMCPY (&local_gpe_event_info, gpe_event_info, sizeof (struct acpi_gpe_event_info));
+	ACPI_MEMCPY (&local_gpe_event_info, gpe_event_info,
+		sizeof (struct acpi_gpe_event_info));
 
 
 	status = acpi_ut_release_mutex (ACPI_MTX_EVENTS);
 	status = acpi_ut_release_mutex (ACPI_MTX_EVENTS);
 	if (ACPI_FAILURE (status)) {
 	if (ACPI_FAILURE (status)) {
@@ -534,7 +543,8 @@ acpi_ev_asynch_execute_gpe_method (
 	 * Must check for control method type dispatch one more
 	 * Must check for control method type dispatch one more
 	 * time to avoid race with ev_gpe_install_handler
 	 * time to avoid race with ev_gpe_install_handler
 	 */
 	 */
-	if ((local_gpe_event_info.flags & ACPI_GPE_DISPATCH_MASK) == ACPI_GPE_DISPATCH_METHOD) {
+	if ((local_gpe_event_info.flags & ACPI_GPE_DISPATCH_MASK) ==
+			ACPI_GPE_DISPATCH_METHOD) {
 		/*
 		/*
 		 * Invoke the GPE Method (_Lxx, _Exx) i.e., evaluate the _Lxx/_Exx
 		 * Invoke the GPE Method (_Lxx, _Exx) i.e., evaluate the _Lxx/_Exx
 		 * control method that corresponds to this GPE
 		 * control method that corresponds to this GPE
@@ -553,7 +563,8 @@ acpi_ev_asynch_execute_gpe_method (
 		}
 		}
 	}
 	}
 
 
-	if ((local_gpe_event_info.flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_LEVEL_TRIGGERED) {
+	if ((local_gpe_event_info.flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
+			ACPI_GPE_LEVEL_TRIGGERED) {
 		/*
 		/*
 		 * GPE is level-triggered, we clear the GPE status bit after
 		 * GPE is level-triggered, we clear the GPE status bit after
 		 * handling the event.
 		 * handling the event.
@@ -575,7 +586,7 @@ acpi_ev_asynch_execute_gpe_method (
  *
  *
  * FUNCTION:    acpi_ev_gpe_dispatch
  * FUNCTION:    acpi_ev_gpe_dispatch
  *
  *
- * PARAMETERS:  gpe_event_info  - info for this GPE
+ * PARAMETERS:  gpe_event_info  - Info for this GPE
  *              gpe_number      - Number relative to the parent GPE block
  *              gpe_number      - Number relative to the parent GPE block
  *
  *
  * RETURN:      INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
  * RETURN:      INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
@@ -602,10 +613,12 @@ acpi_ev_gpe_dispatch (
 	 * If edge-triggered, clear the GPE status bit now.  Note that
 	 * If edge-triggered, clear the GPE status bit now.  Note that
 	 * level-triggered events are cleared after the GPE is serviced.
 	 * level-triggered events are cleared after the GPE is serviced.
 	 */
 	 */
-	if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_EDGE_TRIGGERED) {
+	if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
+			ACPI_GPE_EDGE_TRIGGERED) {
 		status = acpi_hw_clear_gpe (gpe_event_info);
 		status = acpi_hw_clear_gpe (gpe_event_info);
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
-			ACPI_REPORT_ERROR (("acpi_ev_gpe_dispatch: %s, Unable to clear GPE[%2X]\n",
+			ACPI_REPORT_ERROR ((
+				"acpi_ev_gpe_dispatch: %s, Unable to clear GPE[%2X]\n",
 				acpi_format_exception (status), gpe_number));
 				acpi_format_exception (status), gpe_number));
 			return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
 			return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
 		}
 		}
@@ -639,7 +652,8 @@ acpi_ev_gpe_dispatch (
 
 
 		/* It is now safe to clear level-triggered events. */
 		/* It is now safe to clear level-triggered events. */
 
 
-		if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_LEVEL_TRIGGERED) {
+		if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
+				ACPI_GPE_LEVEL_TRIGGERED) {
 			status = acpi_hw_clear_gpe (gpe_event_info);
 			status = acpi_hw_clear_gpe (gpe_event_info);
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
 				ACPI_REPORT_ERROR ((
 				ACPI_REPORT_ERROR ((
@@ -704,7 +718,6 @@ acpi_ev_gpe_dispatch (
 
 
 
 
 #ifdef ACPI_GPE_NOTIFY_CHECK
 #ifdef ACPI_GPE_NOTIFY_CHECK
-
 /*******************************************************************************
 /*******************************************************************************
  * TBD: NOT USED, PROTOTYPE ONLY AND WILL PROBABLY BE REMOVED
  * TBD: NOT USED, PROTOTYPE ONLY AND WILL PROBABLY BE REMOVED
  *
  *

+ 51 - 12
drivers/acpi/events/evgpeblk.c

@@ -48,6 +48,39 @@
 #define _COMPONENT          ACPI_EVENTS
 #define _COMPONENT          ACPI_EVENTS
 	 ACPI_MODULE_NAME    ("evgpeblk")
 	 ACPI_MODULE_NAME    ("evgpeblk")
 
 
+/* Local prototypes */
+
+static acpi_status
+acpi_ev_save_method_info (
+	acpi_handle                     obj_handle,
+	u32                             level,
+	void                            *obj_desc,
+	void                            **return_value);
+
+static acpi_status
+acpi_ev_match_prw_and_gpe (
+	acpi_handle                     obj_handle,
+	u32                             level,
+	void                            *info,
+	void                            **return_value);
+
+static struct acpi_gpe_xrupt_info *
+acpi_ev_get_gpe_xrupt_block (
+	u32                             interrupt_level);
+
+static acpi_status
+acpi_ev_delete_gpe_xrupt (
+	struct acpi_gpe_xrupt_info      *gpe_xrupt);
+
+static acpi_status
+acpi_ev_install_gpe_block (
+	struct acpi_gpe_block_info      *gpe_block,
+	u32                             interrupt_level);
+
+static acpi_status
+acpi_ev_create_gpe_info_blocks (
+	struct acpi_gpe_block_info      *gpe_block);
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
@@ -155,7 +188,7 @@ unlock_and_exit:
 }
 }
 
 
 
 
-/******************************************************************************
+/*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ev_delete_gpe_handlers
  * FUNCTION:    acpi_ev_delete_gpe_handlers
  *
  *
@@ -190,7 +223,8 @@ acpi_ev_delete_gpe_handlers (
 		for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) {
 		for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) {
 			gpe_event_info = &gpe_block->event_info[(i * ACPI_GPE_REGISTER_WIDTH) + j];
 			gpe_event_info = &gpe_block->event_info[(i * ACPI_GPE_REGISTER_WIDTH) + j];
 
 
-			if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) == ACPI_GPE_DISPATCH_HANDLER) {
+			if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) ==
+					ACPI_GPE_DISPATCH_HANDLER) {
 				ACPI_MEM_FREE (gpe_event_info->dispatch.handler);
 				ACPI_MEM_FREE (gpe_event_info->dispatch.handler);
 				gpe_event_info->dispatch.handler = NULL;
 				gpe_event_info->dispatch.handler = NULL;
 				gpe_event_info->flags &= ~ACPI_GPE_DISPATCH_MASK;
 				gpe_event_info->flags &= ~ACPI_GPE_DISPATCH_MASK;
@@ -471,7 +505,7 @@ acpi_ev_get_gpe_xrupt_block (
 	ACPI_FUNCTION_TRACE ("ev_get_gpe_xrupt_block");
 	ACPI_FUNCTION_TRACE ("ev_get_gpe_xrupt_block");
 
 
 
 
-	/* No need for spin lock since we are not changing any list elements here */
+	/* No need for lock since we are not changing any list elements here */
 
 
 	next_gpe_xrupt = acpi_gbl_gpe_xrupt_list_head;
 	next_gpe_xrupt = acpi_gbl_gpe_xrupt_list_head;
 	while (next_gpe_xrupt) {
 	while (next_gpe_xrupt) {
@@ -619,7 +653,7 @@ acpi_ev_install_gpe_block (
 		goto unlock_and_exit;
 		goto unlock_and_exit;
 	}
 	}
 
 
-	/* Install the new block at the end of the list for this interrupt with lock */
+	/* Install the new block at the end of the list with lock */
 
 
 	acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
 	acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
 	if (gpe_xrupt_block->gpe_block_list_head) {
 	if (gpe_xrupt_block->gpe_block_list_head) {
@@ -756,10 +790,12 @@ acpi_ev_create_gpe_info_blocks (
 	 * per register.  Initialization to zeros is sufficient.
 	 * per register.  Initialization to zeros is sufficient.
 	 */
 	 */
 	gpe_event_info = ACPI_MEM_CALLOCATE (
 	gpe_event_info = ACPI_MEM_CALLOCATE (
-			   ((acpi_size) gpe_block->register_count * ACPI_GPE_REGISTER_WIDTH) *
+			   ((acpi_size) gpe_block->register_count *
+			   ACPI_GPE_REGISTER_WIDTH) *
 			   sizeof (struct acpi_gpe_event_info));
 			   sizeof (struct acpi_gpe_event_info));
 	if (!gpe_event_info) {
 	if (!gpe_event_info) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not allocate the gpe_event_info table\n"));
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"Could not allocate the gpe_event_info table\n"));
 		status = AE_NO_MEMORY;
 		status = AE_NO_MEMORY;
 		goto error_exit;
 		goto error_exit;
 	}
 	}
@@ -899,7 +935,8 @@ acpi_ev_create_gpe_block (
 	gpe_block->block_base_number = gpe_block_base_number;
 	gpe_block->block_base_number = gpe_block_base_number;
 	gpe_block->node           = gpe_device;
 	gpe_block->node           = gpe_device;
 
 
-	ACPI_MEMCPY (&gpe_block->block_address, gpe_block_address, sizeof (struct acpi_generic_address));
+	ACPI_MEMCPY (&gpe_block->block_address, gpe_block_address,
+		sizeof (struct acpi_generic_address));
 
 
 	/* Create the register_info and event_info sub-structures */
 	/* Create the register_info and event_info sub-structures */
 
 
@@ -1061,8 +1098,9 @@ acpi_ev_gpe_initialize (
 
 
 		/* Install GPE Block 0 */
 		/* Install GPE Block 0 */
 
 
-		status = acpi_ev_create_gpe_block (acpi_gbl_fadt_gpe_device, &acpi_gbl_FADT->xgpe0_blk,
-				 register_count0, 0, acpi_gbl_FADT->sci_int, &acpi_gbl_gpe_fadt_blocks[0]);
+		status = acpi_ev_create_gpe_block (acpi_gbl_fadt_gpe_device,
+				 &acpi_gbl_FADT->xgpe0_blk, register_count0, 0,
+				 acpi_gbl_FADT->sci_int, &acpi_gbl_gpe_fadt_blocks[0]);
 
 
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
 			ACPI_REPORT_ERROR ((
 			ACPI_REPORT_ERROR ((
@@ -1094,8 +1132,9 @@ acpi_ev_gpe_initialize (
 		else {
 		else {
 			/* Install GPE Block 1 */
 			/* Install GPE Block 1 */
 
 
-			status = acpi_ev_create_gpe_block (acpi_gbl_fadt_gpe_device, &acpi_gbl_FADT->xgpe1_blk,
-					 register_count1, acpi_gbl_FADT->gpe1_base,
+			status = acpi_ev_create_gpe_block (acpi_gbl_fadt_gpe_device,
+					 &acpi_gbl_FADT->xgpe1_blk, register_count1,
+					 acpi_gbl_FADT->gpe1_base,
 					 acpi_gbl_FADT->sci_int, &acpi_gbl_gpe_fadt_blocks[1]);
 					 acpi_gbl_FADT->sci_int, &acpi_gbl_gpe_fadt_blocks[1]);
 
 
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
@@ -1109,7 +1148,7 @@ acpi_ev_gpe_initialize (
 			 * space. However, GPE0 always starts at GPE number zero.
 			 * space. However, GPE0 always starts at GPE number zero.
 			 */
 			 */
 			gpe_number_max = acpi_gbl_FADT->gpe1_base +
 			gpe_number_max = acpi_gbl_FADT->gpe1_base +
-					   ((register_count1 * ACPI_GPE_REGISTER_WIDTH) - 1);
+					  ((register_count1 * ACPI_GPE_REGISTER_WIDTH) - 1);
 		}
 		}
 	}
 	}
 
 

+ 63 - 34
drivers/acpi/events/evmisc.c

@@ -50,6 +50,35 @@
 	 ACPI_MODULE_NAME    ("evmisc")
 	 ACPI_MODULE_NAME    ("evmisc")
 
 
 
 
+#ifdef ACPI_DEBUG_OUTPUT
+static const char                *acpi_notify_value_names[] =
+{
+	"Bus Check",
+	"Device Check",
+	"Device Wake",
+	"Eject request",
+	"Device Check Light",
+	"Frequency Mismatch",
+	"Bus Mode Mismatch",
+	"Power Fault"
+};
+#endif
+
+/* Local prototypes */
+
+static void ACPI_SYSTEM_XFACE
+acpi_ev_notify_dispatch (
+	void                            *context);
+
+static void ACPI_SYSTEM_XFACE
+acpi_ev_global_lock_thread (
+	void                            *context);
+
+static u32
+acpi_ev_global_lock_handler (
+	void                            *context);
+
+
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_ev_is_notify_object
  * FUNCTION:    acpi_ev_is_notify_object
@@ -98,20 +127,6 @@ acpi_ev_is_notify_object (
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-#ifdef ACPI_DEBUG_OUTPUT
-static const char                *acpi_notify_value_names[] =
-{
-	"Bus Check",
-	"Device Check",
-	"Device Wake",
-	"Eject request",
-	"Device Check Light",
-	"Frequency Mismatch",
-	"Bus Mode Mismatch",
-	"Power Fault"
-};
-#endif
-
 acpi_status
 acpi_status
 acpi_ev_queue_notify_request (
 acpi_ev_queue_notify_request (
 	struct acpi_namespace_node      *node,
 	struct acpi_namespace_node      *node,
@@ -128,9 +143,10 @@ acpi_ev_queue_notify_request (
 
 
 	/*
 	/*
 	 * For value 3 (Ejection Request), some device method may need to be run.
 	 * For value 3 (Ejection Request), some device method may need to be run.
-	 * For value 2 (Device Wake) if _PRW exists, the _PS0 method may need to be run.
+	 * For value 2 (Device Wake) if _PRW exists, the _PS0 method may need
+	 *   to be run.
 	 * For value 0x80 (Status Change) on the power button or sleep button,
 	 * For value 0x80 (Status Change) on the power button or sleep button,
-	 * initiate soft-off or sleep operation?
+	 *   initiate soft-off or sleep operation?
 	 */
 	 */
 	ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
 	ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
 		"Dispatching Notify(%X) on node %p\n", notify_value, node));
 		"Dispatching Notify(%X) on node %p\n", notify_value, node));
@@ -140,8 +156,9 @@ acpi_ev_queue_notify_request (
 				acpi_notify_value_names[notify_value]));
 				acpi_notify_value_names[notify_value]));
 	}
 	}
 	else {
 	else {
-		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Notify value: 0x%2.2X **Device Specific**\n",
-				notify_value));
+		ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+			"Notify value: 0x%2.2X **Device Specific**\n",
+			notify_value));
 	}
 	}
 
 
 	/* Get the notify object attached to the NS Node */
 	/* Get the notify object attached to the NS Node */
@@ -210,7 +227,7 @@ acpi_ev_queue_notify_request (
  *
  *
  * FUNCTION:    acpi_ev_notify_dispatch
  * FUNCTION:    acpi_ev_notify_dispatch
  *
  *
- * PARAMETERS:  Context         - To be passsed to the notify handler
+ * PARAMETERS:  Context         - To be passed to the notify handler
  *
  *
  * RETURN:      None.
  * RETURN:      None.
  *
  *
@@ -219,7 +236,7 @@ acpi_ev_queue_notify_request (
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-void ACPI_SYSTEM_XFACE
+static void ACPI_SYSTEM_XFACE
 acpi_ev_notify_dispatch (
 acpi_ev_notify_dispatch (
 	void                            *context)
 	void                            *context)
 {
 {
@@ -234,7 +251,8 @@ acpi_ev_notify_dispatch (
 
 
 	/*
 	/*
 	 * We will invoke a global notify handler if installed.
 	 * We will invoke a global notify handler if installed.
-	 * This is done _before_ we invoke the per-device handler attached to the device.
+	 * This is done _before_ we invoke the per-device handler attached
+	 * to the device.
 	 */
 	 */
 	if (notify_info->notify.value <= ACPI_MAX_SYS_NOTIFY) {
 	if (notify_info->notify.value <= ACPI_MAX_SYS_NOTIFY) {
 		/* Global system notification handler */
 		/* Global system notification handler */
@@ -256,15 +274,17 @@ acpi_ev_notify_dispatch (
 	/* Invoke the system handler first, if present */
 	/* Invoke the system handler first, if present */
 
 
 	if (global_handler) {
 	if (global_handler) {
-		global_handler (notify_info->notify.node, notify_info->notify.value, global_context);
+		global_handler (notify_info->notify.node, notify_info->notify.value,
+			global_context);
 	}
 	}
 
 
 	/* Now invoke the per-device handler, if present */
 	/* Now invoke the per-device handler, if present */
 
 
 	handler_obj = notify_info->notify.handler_obj;
 	handler_obj = notify_info->notify.handler_obj;
 	if (handler_obj) {
 	if (handler_obj) {
-		handler_obj->notify.handler (notify_info->notify.node, notify_info->notify.value,
-				  handler_obj->notify.context);
+		handler_obj->notify.handler (notify_info->notify.node,
+			notify_info->notify.value,
+			handler_obj->notify.context);
 	}
 	}
 
 
 	/* All done with the info object */
 	/* All done with the info object */
@@ -370,7 +390,8 @@ acpi_ev_global_lock_handler (
  ******************************************************************************/
  ******************************************************************************/
 
 
 acpi_status
 acpi_status
-acpi_ev_init_global_lock_handler (void)
+acpi_ev_init_global_lock_handler (
+	void)
 {
 {
 	acpi_status                     status;
 	acpi_status                     status;
 
 
@@ -380,7 +401,7 @@ acpi_ev_init_global_lock_handler (void)
 
 
 	acpi_gbl_global_lock_present = TRUE;
 	acpi_gbl_global_lock_present = TRUE;
 	status = acpi_install_fixed_event_handler (ACPI_EVENT_GLOBAL,
 	status = acpi_install_fixed_event_handler (ACPI_EVENT_GLOBAL,
-			  acpi_ev_global_lock_handler, NULL);
+			 acpi_ev_global_lock_handler, NULL);
 
 
 	/*
 	/*
 	 * If the global lock does not exist on this platform, the attempt
 	 * If the global lock does not exist on this platform, the attempt
@@ -433,8 +454,10 @@ acpi_ev_acquire_global_lock (
 
 
 	acpi_gbl_global_lock_thread_count++;
 	acpi_gbl_global_lock_thread_count++;
 
 
-	/* If we (OS side vs. BIOS side) have the hardware lock already, we are done */
-
+	/*
+	 * If we (OS side vs. BIOS side) have the hardware lock already,
+	 * we are done
+	 */
 	if (acpi_gbl_global_lock_acquired) {
 	if (acpi_gbl_global_lock_acquired) {
 		return_ACPI_STATUS (AE_OK);
 		return_ACPI_STATUS (AE_OK);
 	}
 	}
@@ -480,7 +503,8 @@ acpi_ev_acquire_global_lock (
  ******************************************************************************/
  ******************************************************************************/
 
 
 acpi_status
 acpi_status
-acpi_ev_release_global_lock (void)
+acpi_ev_release_global_lock (
+	void)
 {
 {
 	u8                              pending = FALSE;
 	u8                              pending = FALSE;
 	acpi_status                     status = AE_OK;
 	acpi_status                     status = AE_OK;
@@ -490,7 +514,8 @@ acpi_ev_release_global_lock (void)
 
 
 
 
 	if (!acpi_gbl_global_lock_thread_count) {
 	if (!acpi_gbl_global_lock_thread_count) {
-		ACPI_REPORT_WARNING(("Cannot release HW Global Lock, it has not been acquired\n"));
+		ACPI_REPORT_WARNING((
+			"Cannot release HW Global Lock, it has not been acquired\n"));
 		return_ACPI_STATUS (AE_NOT_ACQUIRED);
 		return_ACPI_STATUS (AE_NOT_ACQUIRED);
 	}
 	}
 
 
@@ -515,7 +540,8 @@ acpi_ev_release_global_lock (void)
 	 * register
 	 * register
 	 */
 	 */
 	if (pending) {
 	if (pending) {
-		status = acpi_set_register (ACPI_BITREG_GLOBAL_LOCK_RELEASE, 1, ACPI_MTX_LOCK);
+		status = acpi_set_register (ACPI_BITREG_GLOBAL_LOCK_RELEASE,
+				 1, ACPI_MTX_LOCK);
 	}
 	}
 
 
 	return_ACPI_STATUS (status);
 	return_ACPI_STATUS (status);
@@ -535,7 +561,8 @@ acpi_ev_release_global_lock (void)
  ******************************************************************************/
  ******************************************************************************/
 
 
 void
 void
-acpi_ev_terminate (void)
+acpi_ev_terminate (
+	void)
 {
 {
 	acpi_native_uint                i;
 	acpi_native_uint                i;
 	acpi_status                     status;
 	acpi_status                     status;
@@ -555,7 +582,8 @@ acpi_ev_terminate (void)
 		for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) {
 		for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) {
 			status = acpi_disable_event ((u32) i, 0);
 			status = acpi_disable_event ((u32) i, 0);
 			if (ACPI_FAILURE (status)) {
 			if (ACPI_FAILURE (status)) {
-				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not disable fixed event %d\n", (u32) i));
+				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+					"Could not disable fixed event %d\n", (u32) i));
 			}
 			}
 		}
 		}
 
 
@@ -567,7 +595,8 @@ acpi_ev_terminate (void)
 
 
 		status = acpi_ev_remove_sci_handler ();
 		status = acpi_ev_remove_sci_handler ();
 		if (ACPI_FAILURE(status)) {
 		if (ACPI_FAILURE(status)) {
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not remove SCI handler\n"));
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Could not remove SCI handler\n"));
 		}
 		}
 	}
 	}
 
 

+ 27 - 8
drivers/acpi/events/evregion.c

@@ -58,6 +58,22 @@ static u8                   acpi_gbl_default_address_spaces[ACPI_NUM_DEFAULT_SPA
 			 ACPI_ADR_SPACE_PCI_CONFIG,
 			 ACPI_ADR_SPACE_PCI_CONFIG,
 			 ACPI_ADR_SPACE_DATA_TABLE};
 			 ACPI_ADR_SPACE_DATA_TABLE};
 
 
+/* Local prototypes */
+
+static acpi_status
+acpi_ev_reg_run (
+	acpi_handle                     obj_handle,
+	u32                             level,
+	void                            *context,
+	void                            **return_value);
+
+static acpi_status
+acpi_ev_install_handler (
+	acpi_handle                     obj_handle,
+	u32                             level,
+	void                            *context,
+	void                            **return_value);
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
@@ -179,8 +195,8 @@ acpi_ev_initialize_op_regions (
  *
  *
  * FUNCTION:    acpi_ev_execute_reg_method
  * FUNCTION:    acpi_ev_execute_reg_method
  *
  *
- * PARAMETERS:  region_obj          - Object structure
- *              Function            - Passed to _REG:  On (1) or Off (0)
+ * PARAMETERS:  region_obj          - Region object
+ *              Function            - Passed to _REG: On (1) or Off (0)
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
@@ -323,14 +339,16 @@ acpi_ev_address_space_dispatch (
 		if (!region_setup) {
 		if (!region_setup) {
 			/* No initialization routine, exit with error */
 			/* No initialization routine, exit with error */
 
 
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No init routine for region(%p) [%s]\n",
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"No init routine for region(%p) [%s]\n",
 				region_obj, acpi_ut_get_region_name (region_obj->region.space_id)));
 				region_obj, acpi_ut_get_region_name (region_obj->region.space_id)));
 			return_ACPI_STATUS (AE_NOT_EXIST);
 			return_ACPI_STATUS (AE_NOT_EXIST);
 		}
 		}
 
 
 		/*
 		/*
-		 * We must exit the interpreter because the region setup will potentially
-		 * execute control methods (e.g., _REG method for this region)
+		 * We must exit the interpreter because the region
+		 * setup will potentially execute control methods
+		 * (e.g., _REG method for this region)
 		 */
 		 */
 		acpi_ex_exit_interpreter ();
 		acpi_ex_exit_interpreter ();
 
 
@@ -621,7 +639,7 @@ acpi_ev_attach_region (
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ev_install_handler (
 acpi_ev_install_handler (
 	acpi_handle                     obj_handle,
 	acpi_handle                     obj_handle,
 	u32                             level,
 	u32                             level,
@@ -848,7 +866,8 @@ acpi_ev_install_space_handler (
 				if (handler_obj->address_space.handler == handler) {
 				if (handler_obj->address_space.handler == handler) {
 					/*
 					/*
 					 * It is (relatively) OK to attempt to install the SAME
 					 * It is (relatively) OK to attempt to install the SAME
-					 * handler twice. This can easily happen with PCI_Config space.
+					 * handler twice. This can easily happen
+					 * with PCI_Config space.
 					 */
 					 */
 					status = AE_SAME_HANDLER;
 					status = AE_SAME_HANDLER;
 					goto unlock_and_exit;
 					goto unlock_and_exit;
@@ -1011,7 +1030,7 @@ acpi_ev_execute_reg_methods (
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ev_reg_run (
 acpi_ev_reg_run (
 	acpi_handle                     obj_handle,
 	acpi_handle                     obj_handle,
 	u32                             level,
 	u32                             level,

+ 7 - 7
drivers/acpi/events/evrgnini.c

@@ -61,7 +61,7 @@
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Do any prep work for region handling, a nop for now
+ * DESCRIPTION: Setup a system_memory operation region
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
@@ -115,7 +115,7 @@ acpi_ev_system_memory_region_setup (
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Do any prep work for region handling
+ * DESCRIPTION: Setup a IO operation region
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
@@ -144,14 +144,14 @@ acpi_ev_io_space_region_setup (
  *
  *
  * FUNCTION:    acpi_ev_pci_config_region_setup
  * FUNCTION:    acpi_ev_pci_config_region_setup
  *
  *
- * PARAMETERS:  Handle             - Region we are interested in
+ * PARAMETERS:  Handle              - Region we are interested in
  *              Function            - Start or stop
  *              Function            - Start or stop
  *              handler_context     - Address space handler context
  *              handler_context     - Address space handler context
  *              region_context      - Region specific context
  *              region_context      - Region specific context
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Do any prep work for region handling
+ * DESCRIPTION: Setup a PCI_Config operation region
  *
  *
  * MUTEX:       Assumes namespace is not locked
  * MUTEX:       Assumes namespace is not locked
  *
  *
@@ -324,7 +324,7 @@ acpi_ev_pci_config_region_setup (
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Do any prep work for region handling
+ * DESCRIPTION: Setup a pci_bAR operation region
  *
  *
  * MUTEX:       Assumes namespace is not locked
  * MUTEX:       Assumes namespace is not locked
  *
  *
@@ -355,7 +355,7 @@ acpi_ev_pci_bar_region_setup (
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Do any prep work for region handling
+ * DESCRIPTION: Setup a CMOS operation region
  *
  *
  * MUTEX:       Assumes namespace is not locked
  * MUTEX:       Assumes namespace is not locked
  *
  *
@@ -386,7 +386,7 @@ acpi_ev_cmos_region_setup (
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Do any prep work for region handling
+ * DESCRIPTION: Default region initialization
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 

+ 10 - 2
drivers/acpi/events/evsci.c

@@ -49,6 +49,12 @@
 #define _COMPONENT          ACPI_EVENTS
 #define _COMPONENT          ACPI_EVENTS
 	 ACPI_MODULE_NAME    ("evsci")
 	 ACPI_MODULE_NAME    ("evsci")
 
 
+/* Local prototypes */
+
+static u32 ACPI_SYSTEM_XFACE
+acpi_ev_sci_xrupt_handler (
+	void                            *context);
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
@@ -146,7 +152,8 @@ acpi_ev_gpe_xrupt_handler (
  ******************************************************************************/
  ******************************************************************************/
 
 
 u32
 u32
-acpi_ev_install_sci_handler (void)
+acpi_ev_install_sci_handler (
+	void)
 {
 {
 	u32                             status = AE_OK;
 	u32                             status = AE_OK;
 
 
@@ -180,7 +187,8 @@ acpi_ev_install_sci_handler (void)
  ******************************************************************************/
  ******************************************************************************/
 
 
 acpi_status
 acpi_status
-acpi_ev_remove_sci_handler (void)
+acpi_ev_remove_sci_handler (
+	void)
 {
 {
 	acpi_status                     status;
 	acpi_status                     status;
 
 

+ 12 - 7
drivers/acpi/events/evxface.c

@@ -64,6 +64,7 @@
  * DESCRIPTION: Saves the pointer to the handler function
  * DESCRIPTION: Saves the pointer to the handler function
  *
  *
  ******************************************************************************/
  ******************************************************************************/
+
 #ifdef ACPI_FUTURE_USAGE
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
 acpi_status
 acpi_install_exception_handler (
 acpi_install_exception_handler (
@@ -457,7 +458,8 @@ acpi_remove_notify_handler (
 	/* Root Object */
 	/* Root Object */
 
 
 	if (device == ACPI_ROOT_OBJECT) {
 	if (device == ACPI_ROOT_OBJECT) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing notify handler for ROOT object.\n"));
+		ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
+			"Removing notify handler for ROOT object.\n"));
 
 
 		if (((handler_type & ACPI_SYSTEM_NOTIFY) &&
 		if (((handler_type & ACPI_SYSTEM_NOTIFY) &&
 			  !acpi_gbl_system_notify.handler)      ||
 			  !acpi_gbl_system_notify.handler)      ||
@@ -564,8 +566,9 @@ EXPORT_SYMBOL(acpi_remove_notify_handler);
  *
  *
  * FUNCTION:    acpi_install_gpe_handler
  * FUNCTION:    acpi_install_gpe_handler
  *
  *
- * PARAMETERS:  gpe_number      - The GPE number within the GPE block
- *              gpe_block       - GPE block (NULL == FADT GPEs)
+ * PARAMETERS:  gpe_device      - Namespace node for the GPE (NULL for FADT
+ *                                defined GPEs)
+ *              gpe_number      - The GPE number within the GPE block
  *              Type            - Whether this GPE should be treated as an
  *              Type            - Whether this GPE should be treated as an
  *                                edge- or level-triggered interrupt.
  *                                edge- or level-triggered interrupt.
  *              Address         - Address of the handler
  *              Address         - Address of the handler
@@ -662,8 +665,9 @@ EXPORT_SYMBOL(acpi_install_gpe_handler);
  *
  *
  * FUNCTION:    acpi_remove_gpe_handler
  * FUNCTION:    acpi_remove_gpe_handler
  *
  *
- * PARAMETERS:  gpe_number      - The event to remove a handler
- *              gpe_block       - GPE block (NULL == FADT GPEs)
+ * PARAMETERS:  gpe_device      - Namespace node for the GPE (NULL for FADT
+ *                                defined GPEs)
+ *              gpe_number      - The event to remove a handler
  *              Address         - Address of the handler
  *              Address         - Address of the handler
  *
  *
  * RETURN:      Status
  * RETURN:      Status
@@ -766,7 +770,8 @@ EXPORT_SYMBOL(acpi_remove_gpe_handler);
  * FUNCTION:    acpi_acquire_global_lock
  * FUNCTION:    acpi_acquire_global_lock
  *
  *
  * PARAMETERS:  Timeout         - How long the caller is willing to wait
  * PARAMETERS:  Timeout         - How long the caller is willing to wait
- *              out_handle      - A handle to the lock if acquired
+ *              Handle          - Where the handle to the lock is returned
+ *                                (if acquired)
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
@@ -812,7 +817,7 @@ EXPORT_SYMBOL(acpi_acquire_global_lock);
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Release the ACPI Global Lock
+ * DESCRIPTION: Release the ACPI Global Lock. The handle must be valid.
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 

+ 15 - 10
drivers/acpi/events/evxfevnt.c

@@ -64,7 +64,8 @@
  ******************************************************************************/
  ******************************************************************************/
 
 
 acpi_status
 acpi_status
-acpi_enable (void)
+acpi_enable (
+	void)
 {
 {
 	acpi_status                     status = AE_OK;
 	acpi_status                     status = AE_OK;
 
 
@@ -91,7 +92,8 @@ acpi_enable (void)
 			return_ACPI_STATUS (status);
 			return_ACPI_STATUS (status);
 		}
 		}
 
 
-		ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Transition to ACPI mode successful\n"));
+		ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
+			"Transition to ACPI mode successful\n"));
 	}
 	}
 
 
 	return_ACPI_STATUS (status);
 	return_ACPI_STATUS (status);
@@ -106,12 +108,13 @@ acpi_enable (void)
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Transfers the system into LEGACY mode.
+ * DESCRIPTION: Transfers the system into LEGACY (non-ACPI) mode.
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
 acpi_status
 acpi_status
-acpi_disable (void)
+acpi_disable (
+	void)
 {
 {
 	acpi_status                     status = AE_OK;
 	acpi_status                     status = AE_OK;
 
 
@@ -125,7 +128,8 @@ acpi_disable (void)
 	}
 	}
 
 
 	if (acpi_hw_get_mode() == ACPI_SYS_MODE_LEGACY) {
 	if (acpi_hw_get_mode() == ACPI_SYS_MODE_LEGACY) {
-		ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "System is already in legacy (non-ACPI) mode\n"));
+		ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
+			"System is already in legacy (non-ACPI) mode\n"));
 	}
 	}
 	else {
 	else {
 		/* Transition to LEGACY mode */
 		/* Transition to LEGACY mode */
@@ -133,7 +137,8 @@ acpi_disable (void)
 		status = acpi_hw_set_mode (ACPI_SYS_MODE_LEGACY);
 		status = acpi_hw_set_mode (ACPI_SYS_MODE_LEGACY);
 
 
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
-			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not exit ACPI mode to legacy mode"));
+			ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+				"Could not exit ACPI mode to legacy mode"));
 			return_ACPI_STATUS (status);
 			return_ACPI_STATUS (status);
 		}
 		}
 
 
@@ -214,7 +219,7 @@ EXPORT_SYMBOL(acpi_enable_event);
  *
  *
  * RETURN:      Status
  * RETURN:      Status
  *
  *
- * DESCRIPTION: Enable an ACPI event (general purpose)
+ * DESCRIPTION: Set the type of an individual GPE
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
@@ -519,13 +524,12 @@ unlock_and_exit:
 
 
 
 
 #ifdef ACPI_FUTURE_USAGE
 #ifdef ACPI_FUTURE_USAGE
-
 /*******************************************************************************
 /*******************************************************************************
  *
  *
  * FUNCTION:    acpi_get_event_status
  * FUNCTION:    acpi_get_event_status
  *
  *
  * PARAMETERS:  Event           - The fixed event
  * PARAMETERS:  Event           - The fixed event
- *              Event Status    - Where the current status of the event will
+ *              event_status    - Where the current status of the event will
  *                                be returned
  *                                be returned
  *
  *
  * RETURN:      Status
  * RETURN:      Status
@@ -571,7 +575,7 @@ acpi_get_event_status (
  * PARAMETERS:  gpe_device      - Parent GPE Device
  * PARAMETERS:  gpe_device      - Parent GPE Device
  *              gpe_number      - GPE level within the GPE block
  *              gpe_number      - GPE level within the GPE block
  *              Flags           - Called from an ISR or not
  *              Flags           - Called from an ISR or not
- *              Event Status    - Where the current status of the event will
+ *              event_status    - Where the current status of the event will
  *                                be returned
  *                                be returned
  *
  *
  * RETURN:      Status
  * RETURN:      Status
@@ -775,4 +779,5 @@ unlock_and_exit:
 	(void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
 	(void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
 	return_ACPI_STATUS (status);
 	return_ACPI_STATUS (status);
 }
 }
+
 EXPORT_SYMBOL(acpi_remove_gpe_block);
 EXPORT_SYMBOL(acpi_remove_gpe_block);

+ 20 - 11
drivers/acpi/executer/exconfig.c

@@ -54,6 +54,14 @@
 #define _COMPONENT          ACPI_EXECUTER
 #define _COMPONENT          ACPI_EXECUTER
 	 ACPI_MODULE_NAME    ("exconfig")
 	 ACPI_MODULE_NAME    ("exconfig")
 
 
+/* Local prototypes */
+
+static acpi_status
+acpi_ex_add_table (
+	struct acpi_table_header        *table,
+	struct acpi_namespace_node      *parent_node,
+	union acpi_operand_object       **ddb_handle);
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
@@ -70,7 +78,7 @@
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-acpi_status
+static acpi_status
 acpi_ex_add_table (
 acpi_ex_add_table (
 	struct acpi_table_header        *table,
 	struct acpi_table_header        *table,
 	struct acpi_namespace_node      *parent_node,
 	struct acpi_namespace_node      *parent_node,
@@ -95,10 +103,10 @@ acpi_ex_add_table (
 
 
 	ACPI_MEMSET (&table_info, 0, sizeof (struct acpi_table_desc));
 	ACPI_MEMSET (&table_info, 0, sizeof (struct acpi_table_desc));
 
 
-	table_info.type        = ACPI_TABLE_SSDT;
-	table_info.pointer     = table;
-	table_info.length      = (acpi_size) table->length;
-	table_info.allocation  = ACPI_MEM_ALLOCATED;
+	table_info.type      = ACPI_TABLE_SSDT;
+	table_info.pointer   = table;
+	table_info.length    = (acpi_size) table->length;
+	table_info.allocation = ACPI_MEM_ALLOCATED;
 
 
 	status = acpi_tb_install_table (&table_info);
 	status = acpi_tb_install_table (&table_info);
 	if (ACPI_FAILURE (status)) {
 	if (ACPI_FAILURE (status)) {
@@ -226,11 +234,10 @@ acpi_ex_load_table_op (
 			start_node = parent_node;
 			start_node = parent_node;
 		}
 		}
 
 
-		/*
-		 * Find the node referenced by the parameter_path_string
-		 */
+		/* Find the node referenced by the parameter_path_string */
+
 		status = acpi_ns_get_node_by_path (operand[4]->string.pointer, start_node,
 		status = acpi_ns_get_node_by_path (operand[4]->string.pointer, start_node,
-				   ACPI_NS_SEARCH_PARENT, &parameter_node);
+				 ACPI_NS_SEARCH_PARENT, &parameter_node);
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
 			return_ACPI_STATUS (status);
 			return_ACPI_STATUS (status);
 		}
 		}
@@ -248,7 +255,8 @@ acpi_ex_load_table_op (
 	if (parameter_node) {
 	if (parameter_node) {
 		/* Store the parameter data into the optional parameter object */
 		/* Store the parameter data into the optional parameter object */
 
 
-		status = acpi_ex_store (operand[5], ACPI_CAST_PTR (union acpi_operand_object, parameter_node),
+		status = acpi_ex_store (operand[5],
+				 ACPI_CAST_PTR (union acpi_operand_object, parameter_node),
 				 walk_state);
 				 walk_state);
 		if (ACPI_FAILURE (status)) {
 		if (ACPI_FAILURE (status)) {
 			(void) acpi_ex_unload_table (ddb_handle);
 			(void) acpi_ex_unload_table (ddb_handle);
@@ -371,7 +379,8 @@ acpi_ex_load_op (
 			goto cleanup;
 			goto cleanup;
 		}
 		}
 
 
-		table_ptr = ACPI_CAST_PTR (struct acpi_table_header, buffer_desc->buffer.pointer);
+		table_ptr = ACPI_CAST_PTR (struct acpi_table_header,
+				  buffer_desc->buffer.pointer);
 
 
 		 /* Sanity check the table length */
 		 /* Sanity check the table length */
 
 

+ 26 - 18
drivers/acpi/executer/exconvrt.c

@@ -50,6 +50,15 @@
 #define _COMPONENT          ACPI_EXECUTER
 #define _COMPONENT          ACPI_EXECUTER
 	 ACPI_MODULE_NAME    ("exconvrt")
 	 ACPI_MODULE_NAME    ("exconvrt")
 
 
+/* Local prototypes */
+
+static u32
+acpi_ex_convert_to_ascii (
+	acpi_integer                    integer,
+	u16                             base,
+	u8                              *string,
+	u8                              max_length);
+
 
 
 /*******************************************************************************
 /*******************************************************************************
  *
  *
@@ -115,9 +124,8 @@ acpi_ex_convert_to_integer (
 	 */
 	 */
 	result = 0;
 	result = 0;
 
 
-	/*
-	 * String conversion is different than Buffer conversion
-	 */
+	/* String conversion is different than Buffer conversion */
+
 	switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
 	switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
 	case ACPI_TYPE_STRING:
 	case ACPI_TYPE_STRING:
 
 
@@ -168,9 +176,8 @@ acpi_ex_convert_to_integer (
 		break;
 		break;
 	}
 	}
 
 
-	/*
-	 * Create a new integer
-	 */
+	/* Create a new integer */
+
 	return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
 	return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
 	if (!return_desc) {
 	if (!return_desc) {
 		return_ACPI_STATUS (AE_NO_MEMORY);
 		return_ACPI_STATUS (AE_NO_MEMORY);
@@ -251,7 +258,8 @@ acpi_ex_convert_to_buffer (
 		 * ASL/AML code that depends on the null being transferred to the new
 		 * ASL/AML code that depends on the null being transferred to the new
 		 * buffer.
 		 * buffer.
 		 */
 		 */
-		return_desc = acpi_ut_create_buffer_object ((acpi_size) obj_desc->string.length + 1);
+		return_desc = acpi_ut_create_buffer_object (
+				  (acpi_size) obj_desc->string.length + 1);
 		if (!return_desc) {
 		if (!return_desc) {
 			return_ACPI_STATUS (AE_NO_MEMORY);
 			return_ACPI_STATUS (AE_NO_MEMORY);
 		}
 		}
@@ -291,7 +299,7 @@ acpi_ex_convert_to_buffer (
  *
  *
  ******************************************************************************/
  ******************************************************************************/
 
 
-u32
+static u32
 acpi_ex_convert_to_ascii (
 acpi_ex_convert_to_ascii (
 	acpi_integer                    integer,
 	acpi_integer                    integer,
 	u16                             base,
 	u16                             base,
@@ -357,8 +365,9 @@ acpi_ex_convert_to_ascii (
 
 
 	case 16:
 	case 16:
 
 
-		hex_length = ACPI_MUL_2 (data_width); /* 2 ascii hex chars per data byte */
+		/* hex_length: 2 ascii hex chars per data byte */
 
 
+		hex_length = ACPI_MUL_2 (data_width);
 		for (i = 0, j = (hex_length-1); i < hex_length; i++, j--) {
 		for (i = 0, j = (hex_length-1); i < hex_length; i++, j--) {
 			/* Get one hex digit, most significant digits first */
 			/* Get one hex digit, most significant digits first */
 
 
@@ -475,7 +484,7 @@ acpi_ex_convert_to_string (
 		/* Setup string length, base, and separator */
 		/* Setup string length, base, and separator */
 
 
 		switch (type) {
 		switch (type) {
-		case ACPI_EXPLICIT_CONVERT_DECIMAL: /* Used by to_decimal_string operator */
+		case ACPI_EXPLICIT_CONVERT_DECIMAL: /* Used by to_decimal_string */
 			/*
 			/*
 			 * From ACPI: "If Data is a buffer, it is converted to a string of
 			 * From ACPI: "If Data is a buffer, it is converted to a string of
 			 * decimal values separated by commas."
 			 * decimal values separated by commas."
@@ -509,7 +518,7 @@ acpi_ex_convert_to_string (
 			string_length = (obj_desc->buffer.length * 3);
 			string_length = (obj_desc->buffer.length * 3);
 			break;
 			break;
 
 
-		case ACPI_EXPLICIT_CONVERT_HEX:     /* Used by to_hex_string operator */
+		case ACPI_EXPLICIT_CONVERT_HEX:     /* Used by to_hex_string */
 			/*
 			/*
 			 * From ACPI: "If Data is a buffer, it is converted to a string of
 			 * From ACPI: "If Data is a buffer, it is converted to a string of
 			 * hexadecimal values separated by commas."
 			 * hexadecimal values separated by commas."
@@ -530,9 +539,8 @@ acpi_ex_convert_to_string (
 			return_ACPI_STATUS (AE_AML_STRING_LIMIT);
 			return_ACPI_STATUS (AE_AML_STRING_LIMIT);
 		}
 		}
 
 
-		/*
-		 * Create a new string object and string buffer
-		 */
+		/* Create a new string object and string buffer */
+
 		return_desc = acpi_ut_create_string_object ((acpi_size) string_length);
 		return_desc = acpi_ut_create_string_object ((acpi_size) string_length);
 		if (!return_desc) {
 		if (!return_desc) {
 			return_ACPI_STATUS (AE_NO_MEMORY);
 			return_ACPI_STATUS (AE_NO_MEMORY);
@@ -551,8 +559,10 @@ acpi_ex_convert_to_string (
 			*new_buf++ = separator; /* each separated by a comma or space */
 			*new_buf++ = separator; /* each separated by a comma or space */
 		}
 		}
 
 
-		/* Null terminate the string (overwrites final comma/space from above) */
-
+		/*
+		 * Null terminate the string
+		 * (overwrites final comma/space from above)
+		 */
 		new_buf--;
 		new_buf--;
 		*new_buf = 0;
 		*new_buf = 0;
 		break;
 		break;
@@ -645,7 +655,6 @@ acpi_ex_convert_to_target_type (
 
 
 
 
 		case ACPI_TYPE_STRING:
 		case ACPI_TYPE_STRING:
-
 			/*
 			/*
 			 * The operand must be a String.  We can convert an
 			 * The operand must be a String.  We can convert an
 			 * Integer or Buffer if necessary
 			 * Integer or Buffer if necessary
@@ -656,7 +665,6 @@ acpi_ex_convert_to_target_type (
 
 
 
 
 		case ACPI_TYPE_BUFFER:
 		case ACPI_TYPE_BUFFER:
-
 			/*
 			/*
 			 * The operand must be a Buffer.  We can convert an
 			 * The operand must be a Buffer.  We can convert an
 			 * Integer or String if necessary
 			 * Integer or String if necessary

部分文件因文件數量過多而無法顯示