Commit 396a6123 authored by Linus Torvalds's avatar Linus Torvalds

v2.4.5.4 -> v2.4.5.5

  - Johannes Erdfelt: USB update (bluetooth and serial)
  - Andrew Grover: ACPI update for _real_ this time.
  - Neil Brown: md update
  - Keith Owens: kbuild script fix, do_softirq versioning fix
  - David Miller: sparc and portability updates
parent 7a9a18cf
......@@ -11374,6 +11374,20 @@ CONFIG_USB_PEGASUS
The module will be called pegasus.o. If you want to compile it as a
module, say M here and read Documentation/modules.txt.
USB CATC NetMate-based Ethernet device support
CONFIG_USB_CATC
Say Y if you want to use one of the following 10Mbps USB Ethernet
device based on the EL1210A chip. Supported devices are:
Belkin F5U111
CATC NetMate
CATC NetMate II
smartBridges smartNIC
This code is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called catc.o. If you want to compile it as a
module, say M here and read <file:Documentation/modules.txt>.
USB Kodak DC-2xx Camera support
CONFIG_USB_DC2XX
Say Y here if you want to connect this type of still camera to
......@@ -14133,7 +14147,7 @@ CONFIG_PM
will issue the hlt instruction if nothing is to be done, thereby
sending the processor to sleep and saving power.
ACPI Support
ACPI support
CONFIG_ACPI
ACPI/OSPM support for Linux is currently under development. As such,
this support is preliminary and EXPERIMENTAL. Configuring ACPI support
......@@ -14163,6 +14177,57 @@ CONFIG_ACPI
The ACPI mailing list may also be of interest:
http://phobos.fs.tum.de/acpi/index.html
ACPI Debug Statements
CONFIG_ACPI_DEBUG
The ACPI driver can optionally report errors with a great deal
of verbosity. Saying Y enables these statements. This will increase
your kernel size by around 50K.
ACPI Bus Manager
CONFIG_ACPI_BUSMGR
The ACPI Bus Manager enumerates devices in the ACPI namespace, and
handles PnP messages. All ACPI devices use its services, so using them
requires saying Y here.
ACPI System Driver
CONFIG_ACPI_SYS
This driver will enable your system to shut down using ACPI, and dump
your ACPI DSDT table using /proc/acpi/dsdt.
ACPI Processor Driver
CONFIG_ACPI_CPU
This driver installs ACPI as the idle handler for Linux, and uses ACPI
C2 and C3 processor states to save power, on systems that support it.
ACPI Button
CONFIG_ACPI_BUTTON
This driver registers for events based on buttons, such as the power,
sleep, and lid switch. In the future, a daemon will read
/proc/acpi/event and perform user-defined actions such as shutting
down the system. Until then, you can cat it, and see output when
a button is pressed.
ACPI AC Adapter
CONFIG_ACPI_AC
This driver adds support for the AC Adapter object, which indicates
whether a system is on AC, or not. Typically, only laptops have this
object, since desktops are always on AC.
ACPI Embedded Controller
CONFIG_ACPI_EC
This driver is required on some systems for the proper operation of the
battery and thermal drivers. If you are compiling for a laptop, say Y.
ACPI Control Method Battery
CONFIG_ACPI_CMBATT
This driver adds support for battery information through
/proc/acpi/battery. If you have a laptop with a battery, say Y.
ACPI Thermal
CONFIG_ACPI_THERMAL
This driver handles overheating conditions on laptops. It is HIGHLY
recommended, as your laptop CPU may be damaged without it.
Advanced Power Management BIOS support
CONFIG_APM
APM is a BIOS specification for saving power using several different
......
......@@ -759,8 +759,8 @@ P: Keith Owens
M: kaos@ocs.com.au
P: Michael Elizabeth Chastain
M: mec@shout.net
L: linux-kbuild@torque.net
W: http://www.kernel.org/pub/linux/kernel/projects/kbuild/
L: kbuild-devel@lists.sourceforge.net
W: http://kbuild.sourceforge.net
S: Maintained
KERNEL NFSD
......
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 6
EXTRAVERSION =-pre4
EXTRAVERSION =-pre5
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
......
......@@ -245,6 +245,10 @@ bool 'Power Management support' CONFIG_PM
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_bool ' ACPI support' CONFIG_ACPI $CONFIG_PM
if [ "$CONFIG_ACPI" != "n" ]; then
source drivers/acpi/Config.in
fi
fi
dep_tristate ' Advanced Power Management BIOS support' CONFIG_APM $CONFIG_PM
......
/* $Id: pci.c,v 1.32 2001/06/08 06:25:41 davem Exp $
/* $Id: pci.c,v 1.35 2001/06/13 06:34:30 davem Exp $
* pci.c: UltraSparc PCI controller support.
*
* Copyright (C) 1997, 1998, 1999 David S. Miller (davem@redhat.com)
......@@ -305,6 +305,53 @@ char * __init pcibios_setup(char *str)
/* Platform support for /proc/bus/pci/X/Y mmap()s. */
/* If the user uses a host-bridge as the PCI device, he may use
* this to perform a raw mmap() of the I/O or MEM space behind
* that controller.
*
* This can be useful for execution of x86 PCI bios initialization code
* on a PCI card, like the xfree86 int10 stuff does.
*/
static int __pci_mmap_make_offset_bus(struct pci_dev *pdev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state)
{
struct pcidev_cookie *pcp = pdev->sysdata;
struct pci_pbm_info *pbm;
unsigned long space_size, user_offset, user_size;
if (!pcp)
return -ENXIO;
pbm = pcp->pbm;
if (!pbm)
return -ENXIO;
if (mmap_state == pci_mmap_io) {
space_size = (pbm->io_space.end -
pbm->io_space.start) + 1;
} else {
space_size = (pbm->mem_space.end -
pbm->mem_space.start) + 1;
}
/* Make sure the request is in range. */
user_offset = vma->vm_pgoff << PAGE_SHIFT;
user_size = vma->vm_end - vma->vm_start;
if (user_offset >= space_size ||
(user_offset + user_size) > space_size)
return -EINVAL;
if (mmap_state == pci_mmap_io) {
vma->vm_pgoff = (pbm->io_space.start +
user_offset) >> PAGE_SHIFT;
} else {
vma->vm_pgoff = (pbm->mem_space.start +
user_offset) >> PAGE_SHIFT;
}
return 0;
}
/* Adjust vm_pgoff of VMA such that it is the physical page offset corresponding
* to the 32-bit pci bus offset for DEV requested by the user.
*
......@@ -315,14 +362,17 @@ char * __init pcibios_setup(char *str)
*
* Returns negative error code on failure, zero on success.
*/
static __inline__ int __pci_mmap_make_offset(struct pci_dev *dev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state)
static int __pci_mmap_make_offset(struct pci_dev *dev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state)
{
unsigned long user_offset = vma->vm_pgoff << PAGE_SHIFT;
unsigned long user32 = user_offset & 0xffffffffUL;
unsigned long largest_base, this_base, addr32;
int i;
if ((dev->class >> 8) == PCI_CLASS_BRIDGE_HOST)
return __pci_mmap_make_offset_bus(dev, vma, mmap_state);
/* Figure out which base address this is for. */
largest_base = 0UL;
for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
......@@ -370,7 +420,7 @@ static __inline__ int __pci_mmap_make_offset(struct pci_dev *dev, struct vm_area
/* Set vm_flags of VMA, as appropriate for this architecture, for a pci device
* mapping.
*/
static __inline__ void __pci_mmap_set_flags(struct pci_dev *dev, struct vm_area_struct *vma,
static void __pci_mmap_set_flags(struct pci_dev *dev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state)
{
vma->vm_flags |= (VM_SHM | VM_LOCKED);
......@@ -379,7 +429,7 @@ static __inline__ void __pci_mmap_set_flags(struct pci_dev *dev, struct vm_area_
/* Set vm_page_prot of VMA, as appropriate for this architecture, for a pci
* device mapping.
*/
static __inline__ void __pci_mmap_set_pgprot(struct pci_dev *dev, struct vm_area_struct *vma,
static void __pci_mmap_set_pgprot(struct pci_dev *dev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state)
{
/* Our io_remap_page_range takes care of this, do nothing. */
......
/* $Id: pci_common.c,v 1.21 2001/06/08 06:57:19 davem Exp $
/* $Id: pci_common.c,v 1.25 2001/06/14 16:57:41 davem Exp $
* pci_common.c: PCI controller common support.
*
* Copyright (C) 1999 David S. Miller (davem@redhat.com)
......@@ -257,11 +257,13 @@ void __init pci_fill_in_pbm_cookies(struct pci_bus *pbus,
}
}
static void __init bad_assignment(struct linux_prom_pci_registers *ap,
static void __init bad_assignment(struct pci_dev *pdev,
struct linux_prom_pci_registers *ap,
struct resource *res,
int do_prom_halt)
{
prom_printf("PCI: Bogus PROM assignment.\n");
prom_printf("PCI: Bogus PROM assignment. BUS[%02x] DEVFN[%x]\n",
pdev->bus->number, pdev->devfn);
if (ap)
prom_printf("PCI: phys[%08x:%08x:%08x] size[%08x:%08x]\n",
ap->phys_hi, ap->phys_mid, ap->phys_lo,
......@@ -319,7 +321,7 @@ __init get_device_resource(struct linux_prom_pci_registers *ap,
case PCI_ROM_ADDRESS:
/* It had better be MEM space. */
if (space != 2)
bad_assignment(ap, NULL, 0);
bad_assignment(pdev, ap, NULL, 0);
res = &pdev->resource[PCI_ROM_RESOURCE];
break;
......@@ -334,7 +336,7 @@ __init get_device_resource(struct linux_prom_pci_registers *ap,
break;
default:
bad_assignment(ap, NULL, 0);
bad_assignment(pdev, ap, NULL, 0);
res = NULL;
break;
};
......@@ -371,14 +373,15 @@ static void __init pdev_record_assignments(struct pci_pbm_info *pbm,
ap = &pcp->prom_assignments[i];
root = get_root_resource(ap, pbm);
res = get_device_resource(ap, pdev);
if (root == NULL || res == NULL)
if (root == NULL || res == NULL ||
res->flags == 0)
continue;
/* Ok we know which resource this PROM assignment is
* for, sanity check it.
*/
if ((res->start & 0xffffffffUL) != ap->phys_lo)
bad_assignment(ap, res, 1);
bad_assignment(pdev, ap, res, 1);
/* If it is a 64-bit MEM space assignment, verify that
* the resource is too and that the upper 32-bits match.
......@@ -387,9 +390,9 @@ static void __init pdev_record_assignments(struct pci_pbm_info *pbm,
if (((res->flags & IORESOURCE_MEM) == 0) ||
((res->flags & PCI_BASE_ADDRESS_MEM_TYPE_MASK)
!= PCI_BASE_ADDRESS_MEM_TYPE_64))
bad_assignment(ap, res, 1);
bad_assignment(pdev, ap, res, 1);
if ((res->start >> 32) != ap->phys_mid)
bad_assignment(ap, res, 1);
bad_assignment(pdev, ap, res, 1);
/* PBM cannot generate cpu initiated PIOs
* to the full 64-bit space. Therefore the
......@@ -441,6 +444,23 @@ void __init pci_record_assignments(struct pci_pbm_info *pbm,
pci_record_assignments(pbm, pci_bus_b(walk));
}
/* Return non-zero if PDEV has implicit I/O resources even
* though it may not have an I/O base address register
* active.
*/
static int __init has_implicit_io(struct pci_dev *pdev)
{
int class = pdev->class >> 8;
if (class == PCI_CLASS_NOT_DEFINED ||
class == PCI_CLASS_NOT_DEFINED_VGA ||
class == PCI_CLASS_STORAGE_IDE ||
(pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
return 1;
return 0;
}
static void __init pdev_assign_unassigned(struct pci_pbm_info *pbm,
struct pci_dev *pdev)
{
......@@ -504,7 +524,7 @@ static void __init pdev_assign_unassigned(struct pci_pbm_info *pbm,
*/
if (io_seen || mem_seen) {
pci_read_config_word(pdev, PCI_COMMAND, &cmd);
if (io_seen)
if (io_seen || has_implicit_io(pdev))
cmd |= PCI_COMMAND_IO;
if (mem_seen)
cmd |= PCI_COMMAND_MEMORY;
......@@ -865,6 +885,46 @@ void pci_setup_busmastering(struct pci_pbm_info *pbm,
pci_setup_busmastering(pbm, pci_bus_b(walk));
}
void pci_register_legacy_regions(struct resource *io_res,
struct resource *mem_res)
{
struct resource *p;
/* VGA Video RAM. */
p = kmalloc(sizeof(*p), GFP_KERNEL);
if (!p)
return;
memset(p, 0, sizeof(*p));
p->name = "Video RAM area";
p->start = mem_res->start + 0xa0000UL;
p->end = p->start + 0x1ffffUL;
p->flags = IORESOURCE_BUSY;
request_resource(mem_res, p);
p = kmalloc(sizeof(*p), GFP_KERNEL);
if (!p)
return;
memset(p, 0, sizeof(*p));
p->name = "System ROM";
p->start = mem_res->start + 0xf0000UL;
p->end = p->start + 0xffffUL;
p->flags = IORESOURCE_BUSY;
request_resource(mem_res, p);
p = kmalloc(sizeof(*p), GFP_KERNEL);
if (!p)
return;
memset(p, 0, sizeof(*p));
p->name = "Video ROM";
p->start = mem_res->start + 0xc0000UL;
p->end = p->start + 0x7fffUL;
p->flags = IORESOURCE_BUSY;
request_resource(mem_res, p);
}
/* Generic helper routines for PCI error reporting. */
void pci_scan_for_target_abort(struct pci_controller_info *p,
struct pci_pbm_info *pbm,
......
/* $Id: pci_impl.h,v 1.8 2001/05/15 08:54:30 davem Exp $
/* $Id: pci_impl.h,v 1.9 2001/06/13 06:34:30 davem Exp $
* pci_impl.h: Helper definitions for PCI controller support.
*
* Copyright (C) 1999 David S. Miller (davem@redhat.com)
......@@ -33,6 +33,8 @@ extern void pci_determine_66mhz_disposition(struct pci_pbm_info *pbm,
struct pci_bus *pbus);
extern void pci_setup_busmastering(struct pci_pbm_info *pbm,
struct pci_bus *pbus);
extern void pci_register_legacy_regions(struct resource *io_res,
struct resource *mem_res);
/* Error reporting support. */
extern void pci_scan_for_target_abort(struct pci_controller_info *, struct pci_pbm_info *, struct pci_bus *);
......
/* $Id: pci_psycho.c,v 1.25 2001/06/04 23:20:32 ecd Exp $
/* $Id: pci_psycho.c,v 1.26 2001/06/13 06:34:30 davem Exp $
* pci_psycho.c: PSYCHO/U2P specific PCI controller support.
*
* Copyright (C) 1997, 1998, 1999 David S. Miller (davem@caipfs.rutgers.edu)
......@@ -1409,6 +1409,8 @@ static void __init pbm_register_toplevel_resources(struct pci_controller_info *p
request_resource(&ioport_resource, &pbm->io_space);
request_resource(&iomem_resource, &pbm->mem_space);
pci_register_legacy_regions(&pbm->io_space,
&pbm->mem_space);
}
static void psycho_pbm_strbuf_init(struct pci_controller_info *p,
......
/* $Id: pci_sabre.c,v 1.36 2001/06/08 06:25:41 davem Exp $
/* $Id: pci_sabre.c,v 1.37 2001/06/13 06:34:30 davem Exp $
* pci_sabre.c: Sabre specific PCI controller support.
*
* Copyright (C) 1997, 1998, 1999 David S. Miller (davem@caipfs.rutgers.edu)
......@@ -1357,6 +1357,12 @@ static void __init pbm_register_toplevel_resources(struct pci_controller_info *p
(pbm == &p->pbm_A ? 'A' : 'B'));
prom_halt();
}
/* Register legacy regions if this PBM covers that area. */
if (pbm->io_space.start == ibase &&
pbm->mem_space.start == mbase)
pci_register_legacy_regions(&pbm->io_space,
&pbm->mem_space);
}
static void __init sabre_pbm_init(struct pci_controller_info *p, int sabre_node, u32 dma_begin)
......@@ -1497,6 +1503,9 @@ static void __init sabre_pbm_init(struct pci_controller_info *p, int sabre_node,
prom_printf("Cannot register Hummingbird's MEM space.\n");
prom_halt();
}
pci_register_legacy_regions(&pbm->io_space,
&pbm->mem_space);
}
}
......
/* $Id: pci_schizo.c,v 1.17 2001/06/04 23:20:32 ecd Exp $
/* $Id: pci_schizo.c,v 1.19 2001/06/20 21:31:00 davem Exp $
* pci_schizo.c: SCHIZO specific PCI controller support.
*
* Copyright (C) 2001 David S. Miller (davem@redhat.com)
......@@ -1196,17 +1196,38 @@ static void __init schizo_register_error_handlers(struct pci_controller_info *p)
/* Make all Safari error conditions fatal except unmapped errors
* which we make generate interrupts.
*/
#if 1
/* XXX Something wrong with some Excalibur systems
* XXX Sun is shipping. The behavior on a 2-cpu
* XXX machine is that both CPU1 parity error bits
* XXX are set and are immediately set again when
* XXX their error status bits are cleared. Just
* XXX ignore them for now. -DaveM
*/
schizo_write(base + SCHIZO_SAFARI_ERRCTRL,
(SCHIZO_SAFERRCTRL_EN |
(SAFARI_ERROR_BADCMD | SAFARI_ERROR_SSMDIS |
SAFARI_ERROR_BADMA | SAFARI_ERROR_BADMB |
SAFARI_ERROR_BADMC |
SAFARI_ERROR_CIQTO |
SAFARI_ERROR_LPQTO | SAFARI_ERROR_SFPQTO |
SAFARI_ERROR_UFPQTO | SAFARI_ERROR_APERR |
SAFARI_ERROR_BUSERR | SAFARI_ERROR_TIMEOUT |
SAFARI_ERROR_ILL)));
#else
schizo_write(base + SCHIZO_SAFARI_ERRCTRL,
(SCHIZO_SAFERRCTRL_EN |
(SAFARI_ERROR_BADCMD | SAFARI_ERROR_SSMDIS |
SAFARI_ERROR_BADMA | SAFARI_ERROR_BADMB |
SAFARI_ERROR_BADMC | SAFARI_ERROR_CPU1PS |
SAFARI_ERROR_CPU1PB | SAFARI_ERROR_CPU0PS |
SAFARI_ERROR_CPU0PB | SAFARI_ERROR_CIQTO |
SAFARI_ERROR_BADMC |
SAFARI_ERROR_CPU1PS | SAFARI_ERROR_CPU1PB |
SAFARI_ERROR_CPU0PS | SAFARI_ERROR_CPU0PB |
SAFARI_ERROR_CIQTO |
SAFARI_ERROR_LPQTO | SAFARI_ERROR_SFPQTO |
SAFARI_ERROR_UFPQTO | SAFARI_ERROR_APERR |
SAFARI_ERROR_BUSERR | SAFARI_ERROR_TIMEOUT |
SAFARI_ERROR_ILL)));
#endif
schizo_write(base + SCHIZO_SAFARI_IRQCTRL,
(SCHIZO_SAFIRQCTRL_EN | (SAFARI_ERROR_UNMAP)));
......@@ -1492,6 +1513,8 @@ static void __init pbm_register_toplevel_resources(struct pci_controller_info *p
request_resource(&ioport_resource, &pbm->io_space);
request_resource(&iomem_resource, &pbm->mem_space);
pci_register_legacy_regions(&pbm->io_space,
&pbm->mem_space);
}
#define SCHIZO_STRBUF_CONTROL_A (SCHIZO_PBM_A_REGS_OFF + 0x02800UL)
......
/* $Id: sys_sparc32.c,v 1.176 2001/04/14 01:12:02 davem Exp $
/* $Id: sys_sparc32.c,v 1.177 2001/06/10 06:48:46 davem Exp $
* sys_sparc32.c: Conversion between 32bit and 64bit native syscalls.
*
* Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
......@@ -3493,6 +3493,7 @@ sys32_get_kernel_syms(struct kernel_sym *table)
#endif /* CONFIG_MODULES */
#if defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE)
/* Stuff for NFS server syscalls... */
struct nfsctl_svc32 {
u16 svc32_port;
......@@ -3815,6 +3816,13 @@ int asmlinkage sys32_nfsservctl(int cmd, struct nfsctl_arg32 *arg32, union nfsct
kfree(kres);
return err;
}
#else /* !NFSD */
extern asmlinkage long sys_ni_syscall(void);
int asmlinkage sys32_nfsservctl(int cmd, void *notused, void *notused2)
{
return sys_ni_syscall();
}
#endif
/* Translations due to time_t size differences. Which affects all
sorts of things, like timeval and itimerval. */
......
/* $Id: sfp-util.h,v 1.4 1999/09/20 12:14:19 jj Exp $
/* $Id: sfp-util.h,v 1.5 2001/06/10 06:48:46 davem Exp $
* arch/sparc64/math-emu/sfp-util.h
*
* Copyright (C) 1999 Jakub Jelinek (jj@ultra.linux.cz)
......@@ -12,10 +12,10 @@
#include <asm/byteorder.h>
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
__asm__ ("addcc %4,%5,%1
add %2,%3,%0
bcs,a,pn %%xcc, 1f
add %0, 1, %0
__asm__ ("addcc %4,%5,%1\n\
add %2,%3,%0\n\
bcs,a,pn %%xcc, 1f\n\
add %0, 1, %0\n\
1:" \
: "=r" ((UDItype)(sh)), \
"=&r" ((UDItype)(sl)) \
......@@ -26,10 +26,10 @@
: "cc")
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
__asm__ ("subcc %4,%5,%1
sub %2,%3,%0
bcs,a,pn %%xcc, 1f
sub %0, 1, %0
__asm__ ("subcc %4,%5,%1\n\
sub %2,%3,%0\n\
bcs,a,pn %%xcc, 1f\n\
sub %0, 1, %0\n\
1:" \
: "=r" ((UDItype)(sh)), \
"=&r" ((UDItype)(sl)) \
......@@ -43,26 +43,26 @@
do { \
UDItype tmp1, tmp2, tmp3, tmp4; \
__asm__ __volatile__ ( \
"srl %7,0,%3
mulx %3,%6,%1
srlx %6,32,%2
mulx %2,%3,%4
sllx %4,32,%5
srl %6,0,%3
sub %1,%5,%5
srlx %5,32,%5
addcc %4,%5,%4
srlx %7,32,%5
mulx %3,%5,%3
mulx %2,%5,%5
sethi %%hi(0x80000000),%2
addcc %4,%3,%4
srlx %4,32,%4
add %2,%2,%2
movcc %%xcc,%%g0,%2
addcc %5,%4,%5
sllx %3,32,%3
add %1,%3,%1
"srl %7,0,%3\n\
mulx %3,%6,%1\n\
srlx %6,32,%2\n\
mulx %2,%3,%4\n\
sllx %4,32,%5\n\
srl %6,0,%3\n\
sub %1,%5,%5\n\
srlx %5,32,%5\n\
addcc %4,%5,%4\n\
srlx %7,32,%5\n\
mulx %3,%5,%3\n\
mulx %2,%5,%5\n\
sethi %%hi(0x80000000),%2\n\
addcc %4,%3,%4\n\
srlx %4,32,%4\n\
add %2,%2,%2\n\
movcc %%xcc,%%g0,%2\n\
addcc %5,%4,%5\n\
sllx %3,32,%3\n\
add %1,%3,%1\n\
add %5,%2,%0" \
: "=r" ((UDItype)(wh)), \
"=&r" ((UDItype)(wl)), \
......
#
# ACPI configuration
#
#mainmenu_option next_comment
#comment 'ACPI Configuration'
dep_bool ' ACPI Debug Statements' CONFIG_ACPI_DEBUG $CONFIG_ACPI
dep_tristate ' ACPI Bus Manager' CONFIG_ACPI_BUSMGR $CONFIG_ACPI
dep_tristate ' System' CONFIG_ACPI_SYS $CONFIG_ACPI_BUSMGR $CONFIG_ACPI
dep_tristate ' Processor' CONFIG_ACPI_CPU $CONFIG_ACPI_BUSMGR $CONFIG_ACPI
dep_tristate ' Button' CONFIG_ACPI_BUTTON $CONFIG_ACPI_BUSMGR $CONFIG_ACPI
dep_tristate ' AC Adapter' CONFIG_ACPI_AC $CONFIG_ACPI_BUSMGR $CONFIG_ACPI
dep_tristate ' Embedded Controller' CONFIG_ACPI_EC $CONFIG_ACPI_BUSMGR $CONFIG_ACPI
dep_tristate ' Control Method Battery' CONFIG_ACPI_CMBATT $CONFIG_ACPI_BUSMGR $CONFIG_ACPI $CONFIG_ACPI_EC
dep_tristate ' Thermal' CONFIG_ACPI_THERMAL $CONFIG_ACPI_BUSMGR $CONFIG_ACPI $CONFIG_ACPI_EC
#endmenu
#
# Makefile for the Linux ACPI interpreter
#
# (It's a mess, but it's all here for a reason.)
#
O_TARGET := acpi.o
export-objs := acpi_ksyms.o
export ACPI_CFLAGS
ACPI_CFLAGS := -D_LINUX
ACPI_CFLAGS := -D_LINUX -I$(CURDIR)/include
#
# CONFIG_ACPI_KERNEL_CONFIG is currently only IA64
......@@ -16,25 +18,37 @@ ifdef CONFIG_ACPI_KERNEL_CONFIG
ACPI_CFLAGS += -DCONFIG_ACPI_KERNEL_CONFIG_ONLY
endif
EXTRA_CFLAGS += -I./include
acpi-subdirs := utilities dispatcher events hardware \
executer namespace parser resources tables
EXTRA_CFLAGS += $(ACPI_CFLAGS)
ifdef CONFIG_ACPI_DEBUG
ACPI_CFLAGS += -DACPI_DEBUG -Wno-unused #-DENABLE_DEBUGGER
#acpi-subdirs += debugger
endif
acpi-subdirs := common dispatcher events hardware \
interpreter namespace parser resources tables
EXTRA_CFLAGS += $(ACPI_CFLAGS)
subdir-$(CONFIG_ACPI) += $(acpi-subdirs)
mod-subdirs := ospm
obj-$(CONFIG_ACPI) := $(patsubst %,%.o,$(acpi-subdirs))
obj-$(CONFIG_ACPI) += os.o acpi_ksyms.o
subdir-$(CONFIG_ACPI) += $(acpi-subdirs)
subdir-$(CONFIG_ACPI_BUSMGR) += ospm
obj-$(CONFIG_ACPI) += os.o acpi_ksyms.o
obj-$(CONFIG_ACPI) += $(foreach dir,$(acpi-subdirs),$(dir)/$(dir).o)
ifdef CONFIG_ACPI_KERNEL_CONFIG
obj-$(CONFIG_ACPI) += acpiconf.o osconf.o
obj-$(CONFIG_ACPI) += acpiconf.o osconf.o
else
obj-$(CONFIG_ACPI) += driver.o cmbatt.o cpu.o ec.o acpi_ksyms.o sys.o table.o power.o
obj-$(CONFIG_ACPI) += driver.o
endif
include $(TOPDIR)/Rules.make
ifeq ($(CONFIG_ACPI_BUSMGR),y)
obj-y += ospm/ospm.o
endif
clean:
$(RM) *.o */*.o
# commented out until we distribute it -ASG
#ifeq ($(CONFIG_KDB),y)
# obj-m += kdb/kdbm_acpi.o
#endif
include $(TOPDIR)/Rules.make
......@@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
......@@ -27,6 +28,7 @@
#include "acdebug.h"
extern int acpi_in_debugger;
extern FADT_DESCRIPTOR acpi_fadt;
#define _COMPONENT OS_DEPENDENT
MODULE_NAME ("symbols")
......@@ -55,9 +57,7 @@ EXPORT_SYMBOL(function_value_exit);
EXPORT_SYMBOL(debug_print_raw);
EXPORT_SYMBOL(debug_print_prefix);
EXPORT_SYMBOL(acpi_cm_strncmp);
EXPORT_SYMBOL(acpi_cm_memcpy);
EXPORT_SYMBOL(acpi_cm_memset);
EXPORT_SYMBOL(acpi_ut_format_exception);
EXPORT_SYMBOL(acpi_get_handle);
EXPORT_SYMBOL(acpi_get_parent);
......@@ -66,6 +66,7 @@ EXPORT_SYMBOL(acpi_get_name);
EXPORT_SYMBOL(acpi_get_object_info);
EXPORT_SYMBOL(acpi_get_next_object);
EXPORT_SYMBOL(acpi_evaluate_object);
EXPORT_SYMBOL(acpi_get_table);
EXPORT_SYMBOL(acpi_install_notify_handler);
EXPORT_SYMBOL(acpi_remove_notify_handler);
......@@ -73,6 +74,11 @@ EXPORT_SYMBOL(acpi_install_gpe_handler);
EXPORT_SYMBOL(acpi_remove_gpe_handler);
EXPORT_SYMBOL(acpi_install_address_space_handler);
EXPORT_SYMBOL(acpi_remove_address_space_handler);
EXPORT_SYMBOL(acpi_install_fixed_event_handler);
EXPORT_SYMBOL(acpi_remove_fixed_event_handler);
EXPORT_SYMBOL(acpi_acquire_global_lock);
EXPORT_SYMBOL(acpi_release_global_lock);
EXPORT_SYMBOL(acpi_get_current_resources);
EXPORT_SYMBOL(acpi_get_possible_resources);
......@@ -81,3 +87,20 @@ EXPORT_SYMBOL(acpi_set_current_resources);
EXPORT_SYMBOL(acpi_enable_event);
EXPORT_SYMBOL(acpi_disable_event);
EXPORT_SYMBOL(acpi_clear_event);
EXPORT_SYMBOL(acpi_get_timer_duration);
EXPORT_SYMBOL(acpi_get_timer);
EXPORT_SYMBOL(acpi_os_signal_semaphore);
EXPORT_SYMBOL(acpi_os_create_semaphore);
EXPORT_SYMBOL(acpi_os_delete_semaphore);
EXPORT_SYMBOL(acpi_os_wait_semaphore);
EXPORT_SYMBOL(acpi_os_in32);
EXPORT_SYMBOL(acpi_os_out32);
EXPORT_SYMBOL(acpi_fadt);
EXPORT_SYMBOL(acpi_hw_register_bit_access);
EXPORT_SYMBOL(acpi_hw_obtain_sleep_type_register_data);
EXPORT_SYMBOL(acpi_enter_sleep_state);
EXPORT_SYMBOL(acpi_get_system_info);
This diff is collapsed.
This diff is collapsed.
/*
* cpu.c - Processor handling
*
* Copyright (C) 2000 Andrew Henroid
* Copyright (C) 2001 Andrew Grover
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/pm.h>
#include <linux/acpi.h>
#include "acpi.h"
#include "driver.h"
#define _COMPONENT OS_DEPENDENT
MODULE_NAME ("cpu")
u32 acpi_c2_exit_latency = ACPI_INFINITE;
u32 acpi_c3_exit_latency = ACPI_INFINITE;
u32 acpi_c2_enter_latency = ACPI_INFINITE;
u32 acpi_c3_enter_latency = ACPI_INFINITE;
u32 acpi_use_idle = TRUE;
u32 acpi_c1_count = 0;
u32 acpi_c2_count = 0;
u32 acpi_c3_count = 0;
static u32 acpi_pblk = ACPI_INVALID;
static int acpi_c2_tested = 0;
static int acpi_c3_tested = 0;
static int acpi_max_c_state = 1;
static int acpi_pm_tmr_len = 24;
#define CPU_POWER_STATES 3
#define MAX_C2_LATENCY 100
#define MAX_C3_LATENCY 1000
#define ACPI_STATE_C1 0
#define ACPI_STATE_C2 1
#define ACPI_STATE_C3 2
/*
* Clear busmaster activity flag
*/
static inline void
acpi_clear_bm_activity(void)
{
acpi_hw_register_bit_access(ACPI_WRITE, ACPI_MTX_LOCK, BM_STS, 1);
}
/*
* Returns 1 if there has been busmaster activity
*/
static inline int
acpi_bm_activity(void)
{
return acpi_hw_register_bit_access(ACPI_READ, ACPI_MTX_LOCK, BM_STS);
}
/*
* Set system to sleep through busmaster requests
*/
static void
acpi_sleep_on_busmaster(void)
{
acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, BM_RLD, 1);
}
/*
* Set system to wake on busmaster requests
*/
static void
acpi_wake_on_busmaster(void)
{
acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, BM_RLD, 0);
}
u32
acpi_read_pm_timer(void)
{
return acpi_hw_register_read(ACPI_MTX_LOCK, PM_TIMER);
}
/*
* Do a compare, accounting for 24/32bit rollover
*/
static u32
acpi_compare_pm_timers(u32 first, u32 second)
{
if (first < second) {
return (second - first);
} else {
if (acpi_pm_tmr_len == 24)
return (second + (0xFFFFFF - first));
else
return (second + (0xFFFFFFFF - first));
}
}
/*
* Idle loop (uniprocessor only)
*/
static void
acpi_idle(void)
{
static int sleep_level = 1;
FADT_DESCRIPTOR *fadt = &acpi_fadt;
/*
* start from the previous sleep level.
* if not initialized, we goto sleep1
*/
if (sleep_level == 1
|| acpi_max_c_state < 2)
goto sleep1;
if (sleep_level == 2
|| acpi_max_c_state < 3)
goto sleep2;
sleep3:
sleep_level = 3;
if (!acpi_c3_tested) {
DEBUG_PRINT(ACPI_INFO, ("C3 works\n"));
acpi_c3_tested = 1;
}
acpi_wake_on_busmaster();
if (fadt->Xpm2_cnt_blk.address)
goto sleep3_with_arbiter;
for (;;) {
unsigned long time;
unsigned long diff;
__cli();
if (current->need_resched)
goto out;
if (acpi_bm_activity())
goto sleep2;
time = acpi_read_pm_timer();
acpi_c3_count++;
inb(acpi_pblk + ACPI_P_LVL3);
/* Dummy read, force synchronization with the PMU */
acpi_read_pm_timer();
diff = acpi_compare_pm_timers(time, acpi_read_pm_timer());
__sti();
if (diff < acpi_c3_exit_latency)
goto sleep1;
}
sleep3_with_arbiter:
for (;;) {
unsigned long time;
unsigned long diff;
__cli();
if (current->need_resched)
goto out;
if (acpi_bm_activity())
goto sleep2;
time = acpi_read_pm_timer();
/* Disable arbiter, park on CPU */
acpi_hw_register_bit_access(ACPI_WRITE, ACPI_MTX_LOCK, ARB_DIS, 1);
acpi_c3_count++;
inb(acpi_pblk + ACPI_P_LVL3);
/* Dummy read, force synchronization with the PMU */
acpi_read_pm_timer();
diff = acpi_compare_pm_timers(time, acpi_read_pm_timer());
/* Enable arbiter again.. */
acpi_hw_register_bit_access(ACPI_WRITE, ACPI_MTX_LOCK, ARB_DIS, 0);
__sti();
if (diff < acpi_c3_exit_latency)
goto sleep1;
}
sleep2:
sleep_level = 2;
if (!acpi_c2_tested) {
DEBUG_PRINT(ACPI_INFO, ("C2 works\n"));
acpi_c2_tested = 1;
}
acpi_wake_on_busmaster(); /* Required to track BM activity.. */
for (;;) {
unsigned long time;
unsigned long diff;
__cli();
if (current->need_resched)
goto out;
time = acpi_read_pm_timer();
acpi_c2_count++;
inb(acpi_pblk + ACPI_P_LVL2);
/* Dummy read, force synchronization with the PMU */
acpi_read_pm_timer();
diff = acpi_compare_pm_timers(time, acpi_read_pm_timer());
__sti();
if (diff < acpi_c2_exit_latency)
goto sleep1;
if (acpi_bm_activity()) {
acpi_clear_bm_activity();
continue;
}
if (diff > acpi_c3_enter_latency
&& acpi_max_c_state >= 3)
goto sleep3;
}
sleep1:
sleep_level = 1;
acpi_sleep_on_busmaster();
for (;;) {
unsigned long time;
unsigned long diff;
__cli();
if (current->need_resched)
goto out;
time = acpi_read_pm_timer();
acpi_c1_count++;
safe_halt();
diff = acpi_compare_pm_timers(time, acpi_read_pm_timer());
if (diff > acpi_c2_enter_latency
&& acpi_max_c_state >= 2)
goto sleep2;
}
out:
__sti();
}
/*
* Get processor information
*/
static ACPI_STATUS
acpi_found_cpu(ACPI_HANDLE handle, u32 level, void *ctx, void **value)
{
ACPI_OBJECT obj;
ACPI_BUFFER buf;
buf.length = sizeof(obj);
buf.pointer = &obj;
if (!ACPI_SUCCESS(acpi_evaluate_object(handle, NULL, NULL, &buf)))
return AE_OK;
DEBUG_PRINT(ACPI_INFO, ("PBLK %d @ 0x%04x:%d\n",
obj.processor.proc_id,
obj.processor.pblk_address,
obj.processor.pblk_length));
if (acpi_pblk != ACPI_INVALID
|| !obj.processor.pblk_address
|| obj.processor.pblk_length != 6)
return AE_OK;
acpi_pblk = obj.processor.pblk_address;
if (acpi_fadt.plvl2_lat
&& acpi_fadt.plvl2_lat <= MAX_C2_LATENCY) {
acpi_c2_exit_latency
= ACPI_MICROSEC_TO_TMR_TICKS(acpi_fadt.plvl2_lat);
acpi_c2_enter_latency
= ACPI_MICROSEC_TO_TMR_TICKS(acpi_fadt.plvl2_lat * 4);
acpi_max_c_state = 2;
printk(KERN_INFO "ACPI: System firmware supports: C2");
if (acpi_fadt.plvl3_lat
&& acpi_fadt.plvl3_lat <= MAX_C3_LATENCY) {
acpi_c3_exit_latency
= ACPI_MICROSEC_TO_TMR_TICKS(acpi_fadt.plvl3_lat);
acpi_c3_enter_latency
= ACPI_MICROSEC_TO_TMR_TICKS(acpi_fadt.plvl3_lat * 12);
acpi_max_c_state = 3;
printk(" C3");
}
printk("\n");
}
printk(KERN_INFO "ACPI: plvl2lat=%d plvl3lat=%d\n", acpi_fadt.plvl2_lat, acpi_fadt.plvl3_lat);
printk(KERN_INFO "ACPI: C2 enter=%d C2 exit=%d\n", acpi_c2_enter_latency, acpi_c2_exit_latency);
printk(KERN_INFO "ACPI: C3 enter=%d C3 exit=%d\n", acpi_c3_enter_latency, acpi_c3_exit_latency);
return AE_OK;
}
static int
acpi_pm_timer_init(void)
{
FADT_DESCRIPTOR *fadt = &acpi_fadt;
if (fadt->tmr_val_ext) {
acpi_pm_tmr_len = 32;
} else {
acpi_pm_tmr_len = 24;
}
DEBUG_PRINT(ACPI_INFO, ("PM Timer width: %d bits\n", acpi_pm_tmr_len));
return AE_OK;
}
int
acpi_cpu_init(void)
{
acpi_walk_namespace(ACPI_TYPE_PROCESSOR,
ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX,
acpi_found_cpu,
NULL,
NULL);
acpi_pm_timer_init();
if (acpi_use_idle) {
#ifdef CONFIG_SMP
if (smp_num_cpus == 1)
pm_idle = acpi_idle;
#else
pm_idle = acpi_idle;
#endif
printk(KERN_INFO "ACPI: Using ACPI idle\n");
printk(KERN_INFO "ACPI: If experiencing system slowness, try adding \"acpi=no-idle\" to cmdline\n");
}
else {
printk(KERN_INFO "ACPI: Not using ACPI idle\n");
}
return 0;
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/******************************************************************************
*
* Module Name: dbhistry - debugger HISTORY command
* $Revision: 18 $
*
*****************************************************************************/
/*
* Copyright (C) 2000, 2001 R. Byron Moore
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "acpi.h"
#include "acparser.h"
#include "acdispat.h"
#include "amlcode.h"
#include "acnamesp.h"
#include "acparser.h"
#include "acevents.h"
#include "acinterp.h"
#include "acdebug.h"
#include "actables.h"
#ifdef ENABLE_DEBUGGER
#define _COMPONENT ACPI_DEBUGGER
MODULE_NAME ("dbhistry")
#define HI_NO_HISTORY 0
#define HI_RECORD_HISTORY 1
#define HISTORY_SIZE 20
typedef struct history_info
{
NATIVE_CHAR command[80];
u32 cmd_num;
} HISTORY_INFO;
HISTORY_INFO history_buffer[HISTORY_SIZE];
u16 lo_history = 0;
u16 num_history = 0;
u16 next_history_index = 0;
u32 next_cmd_num = 1;
/*******************************************************************************
*
* FUNCTION: Acpi_db_add_to_history
*
* PARAMETERS: Command_line - Command to add
*
* RETURN: None
*
* DESCRIPTION: Add a command line to the history buffer.
*
******************************************************************************/
void
acpi_db_add_to_history (
NATIVE_CHAR *command_line)
{
/* Put command into the next available slot */
STRCPY (history_buffer[next_history_index].command, command_line);
history_buffer[next_history_index].cmd_num = next_cmd_num;
/* Adjust indexes */
if ((num_history == HISTORY_SIZE) &&
(next_history_index == lo_history)) {
lo_history++;
if (lo_history >= HISTORY_SIZE) {
lo_history = 0;
}
}
next_history_index++;
if (next_history_index >= HISTORY_SIZE) {
next_history_index = 0;
}
next_cmd_num++;
if (num_history < HISTORY_SIZE) {
num_history++;
}
}
/*******************************************************************************
*
* FUNCTION: Acpi_db_display_history
*
* PARAMETERS: None
*
* RETURN: None
*
* DESCRIPTION: Display the contents of the history buffer
*
******************************************************************************/
void
acpi_db_display_history (void)
{
NATIVE_UINT i;
u16 history_index;
history_index = lo_history;
/* Dump entire history buffer */
for (i = 0; i < num_history; i++) {
acpi_os_printf ("%ld %s\n", history_buffer[history_index].cmd_num, history_buffer[history_index].command);
history_index++;
if (history_index >= HISTORY_SIZE) {
history_index = 0;
}
}
}
/*******************************************************************************
*
* FUNCTION: Acpi_db_get_from_history
*
* PARAMETERS: Command_num_arg - String containing the number of the
* command to be retrieved
*
* RETURN: None
*
* DESCRIPTION: Get a command from the history buffer
*
******************************************************************************/
NATIVE_CHAR *
acpi_db_get_from_history (
NATIVE_CHAR *command_num_arg)
{
NATIVE_UINT i;
u16 history_index;
u32 cmd_num;
if (command_num_arg == NULL) {
cmd_num = next_cmd_num - 1;
}
else {
cmd_num = STRTOUL (command_num_arg, NULL, 0);
}
/* Search history buffer */
history_index = lo_history;
for (i = 0; i < num_history; i++) {
if (history_buffer[history_index].cmd_num == cmd_num) {
/* Found the commnad, return it */
return (history_buffer[history_index].command);
}
history_index++;
if (history_index >= HISTORY_SIZE) {
history_index = 0;
}
}
acpi_os_printf ("Invalid history number: %d\n", history_index);
return (NULL);
}
#endif /* ENABLE_DEBUGGER */
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#
# Makefile for all Linux ACPI interpreter subdirectories
# EXCEPT for the ospm directory
#
O_TARGET := ../$(shell basename `pwd`).o
O_TARGET := $(notdir $(CURDIR)).o
obj-$(CONFIG_ACPI) := $(patsubst %.c,%.o,$(wildcard *.c))
EXTRA_CFLAGS += -I../include
EXTRA_CFLAGS += $(ACPI_CFLAGS)
include $(TOPDIR)/Rules.make
clean:
$(RM) *.o
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/******************************************************************************
*
* Module Name: dswscope - Scope stack manipulation
* $Revision: 42 $
* $Revision: 45 $
*
*****************************************************************************/
......@@ -29,7 +29,7 @@
#include "acdispat.h"
#define _COMPONENT NAMESPACE
#define _COMPONENT ACPI_DISPATCHER
MODULE_NAME ("dswscope")
......@@ -60,7 +60,7 @@ acpi_ds_scope_stack_clear (
scope_info = walk_state->scope_info;
walk_state->scope_info = scope_info->scope.next;
acpi_cm_delete_generic_state (scope_info);
acpi_ut_delete_generic_state (scope_info);
}
}
......@@ -80,7 +80,7 @@ acpi_ds_scope_stack_clear (
ACPI_STATUS
acpi_ds_scope_stack_push (
ACPI_NAMESPACE_NODE *node,
OBJECT_TYPE_INTERNAL type,
ACPI_OBJECT_TYPE8 type,
ACPI_WALK_STATE *walk_state)
{
ACPI_GENERIC_STATE *scope_info;
......@@ -95,14 +95,14 @@ acpi_ds_scope_stack_push (
/* Make sure object type is valid */
if (!acpi_aml_validate_object_type (type)) {
if (!acpi_ex_validate_object_type (type)) {
REPORT_WARNING (("Ds_scope_stack_push: type code out of range\n"));
}
/* Allocate a new scope object */
scope_info = acpi_cm_create_generic_state ();
scope_info = acpi_ut_create_generic_state ();
if (!scope_info) {
return (AE_NO_MEMORY);
}
......@@ -114,7 +114,7 @@ acpi_ds_scope_stack_push (
/* Push new scope object onto stack */
acpi_cm_push_generic_state (&walk_state->scope_info, scope_info);
acpi_ut_push_generic_state (&walk_state->scope_info, scope_info);
return (AE_OK);
}
......@@ -148,12 +148,12 @@ acpi_ds_scope_stack_pop (
* Pop scope info object off the stack.
*/
scope_info = acpi_cm_pop_generic_state (&walk_state->scope_info);
scope_info = acpi_ut_pop_generic_state (&walk_state->scope_info);
if (!scope_info) {
return (AE_STACK_UNDERFLOW);
}
acpi_cm_delete_generic_state (scope_info);
acpi_ut_delete_generic_state (scope_info);
return (AE_OK);
}
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment