Commit c9b92268 authored by Linus Torvalds's avatar Linus Torvalds

v2.4.0.11 -> v2.4.0.12

  - Get non-cpuid Cyrix probing right (it's not a NexGen)
  - Jens Axboe: cdrom tray status and queing cleanups
  - AGP GART: don't disable VIA, and allow i815 with external AGP
  - Coda: use iget4() in order to have big inode numbers without clashes.
  - Fix UDF writepage() page locking
  - NIIBE Yutaka: SuperH update
  - Martin Diehl and others: SiS pirq routing fixes
  - Andy Grover: ACPI update
  - Andrea Arkangeli: LVM update
  - Ingo Molnar: RAID cleanups
  - David Miller: sparc and networking updates
  - Make NFS really be able to handle large files
parent 5e787ed5
......@@ -1450,15 +1450,6 @@ CONFIG_BLK_DEV_LVM
want), say M here and read Documentation/modules.txt. The module
will be called lvm-mod.o.
Logical Volume Manager /proc file system information
CONFIG_LVM_PROC_FS
If you say Y here, you are able to access overall Logical Volume
Manager, Volume Group, Logical and Physical Volume information in
/proc/lvm.
To use this option, you have to check, that the "/proc file system
support" (CONFIG_PROC_FS) is enabled too.
Multiple devices driver support
CONFIG_BLK_DEV_MD
This driver lets you combine several hard disk partitions into one
......@@ -1565,20 +1556,6 @@ CONFIG_MD_RAID5
If unsure, say Y.
RAID Boot support
CONFIG_MD_BOOT
To boot with an initial raid volume (any type) you can select
autodetect, or answer Y here and appropriate options to the kernel
at boot time.
For lilo and loadlin options see the file Documentation/md.txt.
RAID AutoDetect support
CONFIG_AUTODETECT_RAID
An alternative to "Raid Boot support" is autodetect support.
With this selected, any partitons of type 0xFD will be considered for
inclusion in a RAID array. Information in the RAID-superblock on
the partition will determine how it is included.
Support for Acer PICA 1 chipset
CONFIG_ACER_PICA_61
This is a machine with a R4400 133/150 MHz CPU. To compile a Linux
......
......@@ -196,6 +196,12 @@ L: linux-kernel@vger.kernel.org
W: http://www.ocston.org/~tigran/patches/bfs
S: Maintained
BLOCK LAYER
P: Jens Axboe
M: axboe@suse.de
L: linux-kernel@vger.kernel.org
S: Maintained
BTTV VIDEO4LINUX DRIVER
P: Gerd Knorr
M: kraxel@goldbach.in-berlin.de
......
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 1
EXTRAVERSION =-pre11
EXTRAVERSION =-pre12
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
......
......@@ -234,22 +234,107 @@ static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
return 1;
}
/*
* PIRQ routing for SiS 85C503 router used in several SiS chipsets
* According to the SiS 5595 datasheet (preliminary V1.0, 12/24/1997)
* the related registers work as follows:
*
* general: one byte per re-routable IRQ,
* bit 7 IRQ mapping enabled (0) or disabled (1)
* bits [6:4] reserved
* bits [3:0] IRQ to map to
* allowed: 3-7, 9-12, 14-15
* reserved: 0, 1, 2, 8, 13
*
* individual registers in device config space:
*
* 0x41/0x42/0x43/0x44: PCI INT A/B/C/D - bits as in general case
*
* 0x61: IDEIRQ: bits as in general case - but:
* bits [6:5] must be written 01
* bit 4 channel-select primary (0), secondary (1)
*
* 0x62: USBIRQ: bits as in general case - but:
* bit 4 OHCI function disabled (0), enabled (1)
*
* 0x6a: ACPI/SCI IRQ - bits as in general case
*
* 0x7e: Data Acq. Module IRQ - bits as in general case
*
* Apparently there are systems implementing PCI routing table using both
* link values 0x01-0x04 and 0x41-0x44 for PCI INTA..D, but register offsets
* like 0x62 as link values for USBIRQ e.g. So there is no simple
* "register = offset + pirq" relation.
* Currently we support PCI INTA..D and USBIRQ and try our best to handle
* both link mappings.
* IDE/ACPI/DAQ mapping is currently unsupported (left untouched as set by BIOS).
*/
static int pirq_sis_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
{
u8 x;
int reg = 0x41 + (pirq - 'A') ;
pci_read_config_byte(router, reg, &x);
int reg = pirq;
switch(pirq) {
case 0x01:
case 0x02:
case 0x03:
case 0x04:
reg += 0x40;
case 0x41:
case 0x42:
case 0x43:
case 0x44:
case 0x62:
pci_read_config_byte(router, reg, &x);
if (reg != 0x62)
break;
if (!(x & 0x40))
return 0;
break;
case 0x61:
case 0x6a:
case 0x7e:
printk("SiS pirq: advanced IDE/ACPI/DAQ mapping not yet implemented\n");
return 0;
default:
printk("SiS router pirq escape (%d)\n", pirq);
return 0;
}
return (x & 0x80) ? 0 : (x & 0x0f);
}
static int pirq_sis_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
{
u8 x;
int reg = 0x41 + (pirq - 'A') ;
pci_read_config_byte(router, reg, &x);
x = (pirq & 0x20) ? 0 : (irq & 0x0f);
int reg = pirq;
switch(pirq) {
case 0x01:
case 0x02:
case 0x03:
case 0x04:
reg += 0x40;
case 0x41:
case 0x42:
case 0x43:
case 0x44:
case 0x62:
x = (irq&0x0f) ? (irq&0x0f) : 0x80;
if (reg != 0x62)
break;
/* always mark OHCI enabled, as nothing else knows about this */
x |= 0x40;
break;
case 0x61:
case 0x6a:
case 0x7e:
printk("advanced SiS pirq mapping not yet implemented\n");
return 0;
default:
printk("SiS router pirq escape (%d)\n", pirq);
return 0;
}
pci_write_config_byte(router, reg, x);
return 1;
......@@ -462,18 +547,9 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
irq = pirq & 0xf;
DBG(" -> hardcoded IRQ %d\n", irq);
msg = "Hardcoded";
if (dev->irq && dev->irq != irq) {
printk("IRQ routing conflict in pirq table! Try 'pci=autoirq'\n");
return 0;
}
} else if (r->get && (irq = r->get(pirq_router_dev, dev, pirq))) {
DBG(" -> got IRQ %d\n", irq);
msg = "Found";
/* We refuse to override the dev->irq information. Give a warning! */
if (dev->irq && dev->irq != irq) {
printk("IRQ routing conflict in pirq table! Try 'pci=autoirq'\n");
return 0;
}
} else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) {
DBG(" -> assigning IRQ %d", newirq);
if (r->set(pirq_router_dev, dev, pirq, newirq)) {
......@@ -504,6 +580,11 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
if (!info)
continue;
if (info->irq[pin].link == pirq) {
/* We refuse to override the dev->irq information. Give a warning! */
if (dev2->irq && dev2->irq != irq) {
printk("IRQ routing conflict in pirq table for device %s\n", dev2->slot_name);
continue;
}
dev2->irq = irq;
pirq_penalty[irq]++;
if (dev != dev2)
......
......@@ -1401,9 +1401,6 @@ static void __init init_centaur(struct cpuinfo_x86 *c)
wrmsr (0x1107, lo, hi);
set_bit(X86_FEATURE_CX8, &c->x86_capability);
rdmsr (0x80000001, lo, hi);
if (hi & (1<<31))
set_bit(X86_FEATURE_3DNOW, &c->x86_capability);
get_model_name(c);
display_cacheinfo(c);
......@@ -1874,7 +1871,8 @@ static int __init id_and_try_enable_cpuid(struct cpuinfo_x86 *c)
/* Detect Cyrix with disabled CPUID */
if ( c->x86 == 4 && test_cyrix_52div() ) {
strcpy(c->x86_vendor_id, "CyrixInstead");
}
c->x86_vendor = X86_VENDOR_CYRIX;
} else
/* Detect NexGen with old hypercode */
if ( deep_magic_nexgen_probe() ) {
......
......@@ -43,7 +43,7 @@ bss_start_addr:
end_addr:
.long _end
init_sr:
.long 0x40000000 /* Privileged mode, Bank=0, Block=0, I3-I0=0 */
.long 0x400000F0 /* Privileged mode, Bank=0, Block=0, IMASK=0xF */
init_stack_addr:
.long stack_start
decompress_kernel_addr:
......
This diff is collapsed.
......@@ -21,43 +21,43 @@
void
save_fpu(struct task_struct *tsk)
{
asm volatile("sts.l $fpul, @-%0\n\t"
"sts.l $fpscr, @-%0\n\t"
"lds %1, $fpscr\n\t"
asm volatile("sts.l fpul, @-%0\n\t"
"sts.l fpscr, @-%0\n\t"
"lds %1, fpscr\n\t"
"frchg\n\t"
"fmov.s $fr15, @-%0\n\t"
"fmov.s $fr14, @-%0\n\t"
"fmov.s $fr13, @-%0\n\t"
"fmov.s $fr12, @-%0\n\t"
"fmov.s $fr11, @-%0\n\t"
"fmov.s $fr10, @-%0\n\t"
"fmov.s $fr9, @-%0\n\t"
"fmov.s $fr8, @-%0\n\t"
"fmov.s $fr7, @-%0\n\t"
"fmov.s $fr6, @-%0\n\t"
"fmov.s $fr5, @-%0\n\t"
"fmov.s $fr4, @-%0\n\t"
"fmov.s $fr3, @-%0\n\t"
"fmov.s $fr2, @-%0\n\t"
"fmov.s $fr1, @-%0\n\t"
"fmov.s $fr0, @-%0\n\t"
"fmov.s fr15, @-%0\n\t"
"fmov.s fr14, @-%0\n\t"
"fmov.s fr13, @-%0\n\t"
"fmov.s fr12, @-%0\n\t"
"fmov.s fr11, @-%0\n\t"
"fmov.s fr10, @-%0\n\t"
"fmov.s fr9, @-%0\n\t"
"fmov.s fr8, @-%0\n\t"
"fmov.s fr7, @-%0\n\t"
"fmov.s fr6, @-%0\n\t"
"fmov.s fr5, @-%0\n\t"
"fmov.s fr4, @-%0\n\t"
"fmov.s fr3, @-%0\n\t"
"fmov.s fr2, @-%0\n\t"
"fmov.s fr1, @-%0\n\t"
"fmov.s fr0, @-%0\n\t"
"frchg\n\t"
"fmov.s $fr15, @-%0\n\t"
"fmov.s $fr14, @-%0\n\t"
"fmov.s $fr13, @-%0\n\t"
"fmov.s $fr12, @-%0\n\t"
"fmov.s $fr11, @-%0\n\t"
"fmov.s $fr10, @-%0\n\t"
"fmov.s $fr9, @-%0\n\t"
"fmov.s $fr8, @-%0\n\t"
"fmov.s $fr7, @-%0\n\t"
"fmov.s $fr6, @-%0\n\t"
"fmov.s $fr5, @-%0\n\t"
"fmov.s $fr4, @-%0\n\t"
"fmov.s $fr3, @-%0\n\t"
"fmov.s $fr2, @-%0\n\t"
"fmov.s $fr1, @-%0\n\t"
"fmov.s $fr0, @-%0"
"fmov.s fr15, @-%0\n\t"
"fmov.s fr14, @-%0\n\t"
"fmov.s fr13, @-%0\n\t"
"fmov.s fr12, @-%0\n\t"
"fmov.s fr11, @-%0\n\t"
"fmov.s fr10, @-%0\n\t"
"fmov.s fr9, @-%0\n\t"
"fmov.s fr8, @-%0\n\t"
"fmov.s fr7, @-%0\n\t"
"fmov.s fr6, @-%0\n\t"
"fmov.s fr5, @-%0\n\t"
"fmov.s fr4, @-%0\n\t"
"fmov.s fr3, @-%0\n\t"
"fmov.s fr2, @-%0\n\t"
"fmov.s fr1, @-%0\n\t"
"fmov.s fr0, @-%0"
: /* no output */
: "r" ((char *)(&tsk->thread.fpu.hard.status)),
"r" (FPSCR_INIT)
......@@ -70,43 +70,43 @@ save_fpu(struct task_struct *tsk)
static void
restore_fpu(struct task_struct *tsk)
{
asm volatile("lds %1, $fpscr\n\t"
"fmov.s @%0+, $fr0\n\t"
"fmov.s @%0+, $fr1\n\t"
"fmov.s @%0+, $fr2\n\t"
"fmov.s @%0+, $fr3\n\t"
"fmov.s @%0+, $fr4\n\t"
"fmov.s @%0+, $fr5\n\t"
"fmov.s @%0+, $fr6\n\t"
"fmov.s @%0+, $fr7\n\t"
"fmov.s @%0+, $fr8\n\t"
"fmov.s @%0+, $fr9\n\t"
"fmov.s @%0+, $fr10\n\t"
"fmov.s @%0+, $fr11\n\t"
"fmov.s @%0+, $fr12\n\t"
"fmov.s @%0+, $fr13\n\t"
"fmov.s @%0+, $fr14\n\t"
"fmov.s @%0+, $fr15\n\t"
asm volatile("lds %1, fpscr\n\t"
"fmov.s @%0+, fr0\n\t"
"fmov.s @%0+, fr1\n\t"
"fmov.s @%0+, fr2\n\t"
"fmov.s @%0+, fr3\n\t"
"fmov.s @%0+, fr4\n\t"
"fmov.s @%0+, fr5\n\t"
"fmov.s @%0+, fr6\n\t"
"fmov.s @%0+, fr7\n\t"
"fmov.s @%0+, fr8\n\t"
"fmov.s @%0+, fr9\n\t"
"fmov.s @%0+, fr10\n\t"
"fmov.s @%0+, fr11\n\t"
"fmov.s @%0+, fr12\n\t"
"fmov.s @%0+, fr13\n\t"
"fmov.s @%0+, fr14\n\t"
"fmov.s @%0+, fr15\n\t"
"frchg\n\t"
"fmov.s @%0+, $fr0\n\t"
"fmov.s @%0+, $fr1\n\t"
"fmov.s @%0+, $fr2\n\t"
"fmov.s @%0+, $fr3\n\t"
"fmov.s @%0+, $fr4\n\t"
"fmov.s @%0+, $fr5\n\t"
"fmov.s @%0+, $fr6\n\t"
"fmov.s @%0+, $fr7\n\t"
"fmov.s @%0+, $fr8\n\t"
"fmov.s @%0+, $fr9\n\t"
"fmov.s @%0+, $fr10\n\t"
"fmov.s @%0+, $fr11\n\t"
"fmov.s @%0+, $fr12\n\t"
"fmov.s @%0+, $fr13\n\t"
"fmov.s @%0+, $fr14\n\t"
"fmov.s @%0+, $fr15\n\t"
"fmov.s @%0+, fr0\n\t"
"fmov.s @%0+, fr1\n\t"
"fmov.s @%0+, fr2\n\t"
"fmov.s @%0+, fr3\n\t"
"fmov.s @%0+, fr4\n\t"
"fmov.s @%0+, fr5\n\t"
"fmov.s @%0+, fr6\n\t"
"fmov.s @%0+, fr7\n\t"
"fmov.s @%0+, fr8\n\t"
"fmov.s @%0+, fr9\n\t"
"fmov.s @%0+, fr10\n\t"
"fmov.s @%0+, fr11\n\t"
"fmov.s @%0+, fr12\n\t"
"fmov.s @%0+, fr13\n\t"
"fmov.s @%0+, fr14\n\t"
"fmov.s @%0+, fr15\n\t"
"frchg\n\t"
"lds.l @%0+, $fpscr\n\t"
"lds.l @%0+, $fpul\n\t"
"lds.l @%0+, fpscr\n\t"
"lds.l @%0+, fpul\n\t"
: /* no output */
: "r" (&tsk->thread.fpu), "r" (FPSCR_INIT)
: "memory");
......@@ -120,41 +120,41 @@ restore_fpu(struct task_struct *tsk)
void fpu_init(void)
{
asm volatile("lds %0, $fpul\n\t"
"lds %1, $fpscr\n\t"
"fsts $fpul, $fr0\n\t"
"fsts $fpul, $fr1\n\t"
"fsts $fpul, $fr2\n\t"
"fsts $fpul, $fr3\n\t"
"fsts $fpul, $fr4\n\t"
"fsts $fpul, $fr5\n\t"
"fsts $fpul, $fr6\n\t"
"fsts $fpul, $fr7\n\t"
"fsts $fpul, $fr8\n\t"
"fsts $fpul, $fr9\n\t"
"fsts $fpul, $fr10\n\t"
"fsts $fpul, $fr11\n\t"
"fsts $fpul, $fr12\n\t"
"fsts $fpul, $fr13\n\t"
"fsts $fpul, $fr14\n\t"
"fsts $fpul, $fr15\n\t"
asm volatile("lds %0, fpul\n\t"
"lds %1, fpscr\n\t"
"fsts fpul, fr0\n\t"
"fsts fpul, fr1\n\t"
"fsts fpul, fr2\n\t"
"fsts fpul, fr3\n\t"
"fsts fpul, fr4\n\t"
"fsts fpul, fr5\n\t"
"fsts fpul, fr6\n\t"
"fsts fpul, fr7\n\t"
"fsts fpul, fr8\n\t"
"fsts fpul, fr9\n\t"
"fsts fpul, fr10\n\t"
"fsts fpul, fr11\n\t"
"fsts fpul, fr12\n\t"
"fsts fpul, fr13\n\t"
"fsts fpul, fr14\n\t"
"fsts fpul, fr15\n\t"
"frchg\n\t"
"fsts $fpul, $fr0\n\t"
"fsts $fpul, $fr1\n\t"
"fsts $fpul, $fr2\n\t"
"fsts $fpul, $fr3\n\t"
"fsts $fpul, $fr4\n\t"
"fsts $fpul, $fr5\n\t"
"fsts $fpul, $fr6\n\t"
"fsts $fpul, $fr7\n\t"
"fsts $fpul, $fr8\n\t"
"fsts $fpul, $fr9\n\t"
"fsts $fpul, $fr10\n\t"
"fsts $fpul, $fr11\n\t"
"fsts $fpul, $fr12\n\t"
"fsts $fpul, $fr13\n\t"
"fsts $fpul, $fr14\n\t"
"fsts $fpul, $fr15\n\t"
"fsts fpul, fr0\n\t"
"fsts fpul, fr1\n\t"
"fsts fpul, fr2\n\t"
"fsts fpul, fr3\n\t"
"fsts fpul, fr4\n\t"
"fsts fpul, fr5\n\t"
"fsts fpul, fr6\n\t"
"fsts fpul, fr7\n\t"
"fsts fpul, fr8\n\t"
"fsts fpul, fr9\n\t"
"fsts fpul, fr10\n\t"
"fsts fpul, fr11\n\t"
"fsts fpul, fr12\n\t"
"fsts fpul, fr13\n\t"
"fsts fpul, fr14\n\t"
"fsts fpul, fr15\n\t"
"frchg"
: /* no output */
: "r" (0), "r" (FPSCR_INIT));
......@@ -192,9 +192,9 @@ do_fpu_state_restore(unsigned long r4, unsigned long r5, unsigned long r6,
*
* There's race condition in __cli:
*
* (1) $SR --> register
* (1) SR --> register
* (2) Set IMASK of register
* (3) $SR <-- register
* (3) SR <-- register
*
* Between (1) and (2), or (2) and (3) getting
* interrupt, and interrupt handler (or
......
......@@ -37,40 +37,40 @@ ENTRY(empty_zero_page)
*/
ENTRY(_stext)
! Initialize Status Register
mov.l 1f, $r0 ! MD=1, RB=0, BL=0, IMASK=0xF
ldc $r0, $sr
mov.l 1f, r0 ! MD=1, RB=0, BL=0, IMASK=0xF
ldc r0, sr
! Initialize global interrupt mask
mov #0, $r0
ldc $r0, $r6_bank
mov #0, r0
ldc r0, r6_bank
!
mov.l 2f, $r0
mov $r0, $r15 ! Set initial r15 (stack pointer)
mov #0x20, $r1 !
shll8 $r1 ! $r1 = 8192
sub $r1, $r0 !
ldc $r0, $r7_bank ! ... and init_task
mov.l 2f, r0
mov r0, r15 ! Set initial r15 (stack pointer)
mov #0x20, r1 !
shll8 r1 ! r1 = 8192
sub r1, r0 !
ldc r0, r7_bank ! ... and init_task
!
#if defined(__SH4__)
! Initialize fpu
mov.l 7f, $r0
jsr @$r0
mov.l 7f, r0
jsr @r0
nop
#endif
! Enable cache
mov.l 6f, $r0
jsr @$r0
mov.l 6f, r0
jsr @r0
nop
! Clear BSS area
mov.l 3f, $r1
add #4, $r1
mov.l 4f, $r2
mov #0, $r0
9: cmp/hs $r2, $r1
mov.l 3f, r1
add #4, r1
mov.l 4f, r2
mov #0, r0
9: cmp/hs r2, r1
bf/s 9b ! while (r1 < r2)
mov.l $r0,@-$r2
mov.l r0,@-r2
! Start kernel
mov.l 5f, $r0
jmp @$r0
mov.l 5f, r0
jmp @r0
nop
.balign 4
......
......@@ -235,7 +235,7 @@ asmlinkage int do_IRQ(unsigned long r4, unsigned long r5,
unsigned int status;
/* Get IRQ number */
asm volatile("stc $r2_bank, %0\n\t"
asm volatile("stc r2_bank, %0\n\t"
"shlr2 %0\n\t"
"shlr2 %0\n\t"
"shlr %0\n\t"
......
......@@ -59,16 +59,16 @@ void static inline set_interrupt_registers(int ip)
{
unsigned long __dummy;
asm volatile("ldc %2, $r6_bank\n\t"
"stc $sr, %0\n\t"
asm volatile("ldc %2, r6_bank\n\t"
"stc sr, %0\n\t"
"and #0xf0, %0\n\t"
"shlr2 %0\n\t"
"cmp/eq #0x3c, %0\n\t"
"bt/s 1f ! CLI-ed\n\t"
" stc $sr, %0\n\t"
" stc sr, %0\n\t"
"and %1, %0\n\t"
"or %2, %0\n\t"
"ldc %0, $sr\n"
"ldc %0, sr\n"
"1:"
: "=&z" (__dummy)
: "r" (~0xf0), "r" (ip << 4)
......
......@@ -14,6 +14,8 @@
#define __KERNEL_SYSCALLS__
#include <stdarg.h>
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
......@@ -31,6 +33,7 @@
#include <linux/delay.h>
#include <linux/reboot.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
......@@ -39,8 +42,9 @@
#include <asm/processor.h>
#include <asm/mmu_context.h>
#include <asm/elf.h>
#include <linux/irq.h>
#ifdef CONFIG_SH_STANDARD_BIOS
#include <asm/sh_bios.h>
#endif
static int hlt_counter=0;
......@@ -79,11 +83,17 @@ void cpu_idle(void *unused)
}
void machine_restart(char * __unused)
{ /* Need to set MMU_TTB?? */
{
#ifdef CONFIG_SH_STANDARD_BIOS
sh_bios_shutdown(1);
#endif
}
void machine_halt(void)
{
#ifdef CONFIG_SH_STANDARD_BIOS
sh_bios_shutdown(0);
#endif
}
void machine_power_off(void)
......@@ -93,7 +103,7 @@ void machine_power_off(void)
void show_regs(struct pt_regs * regs)
{
printk("\n");
printk("PC : %08lx SP : %08lx SR : %08lx TEA : %08lx\n",
printk("PC : %08lx SP : %08lx SR : %08lx TEA : %08x\n",
regs->pc, regs->regs[15], regs->sr, ctrl_inl(MMU_TEA));
printk("R0 : %08lx R1 : %08lx R2 : %08lx R3 : %08lx\n",
regs->regs[0],regs->regs[1],
......@@ -144,12 +154,12 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
register unsigned long __sc9 __asm__ ("r9") = (long) fn;
__asm__("trapa #0x12\n\t" /* Linux/SH system call */
"tst #0xff, $r0\n\t" /* child or parent? */
"tst #0xff, r0\n\t" /* child or parent? */
"bf 1f\n\t" /* parent - jump */
"jsr @$r9\n\t" /* call fn */
" mov $r8, $r4\n\t" /* push argument */
"mov $r0, $r4\n\t" /* return value to arg of exit */
"mov %1, $r3\n\t" /* exit */
"jsr @r9\n\t" /* call fn */
" mov r8, r4\n\t" /* push argument */
"mov r0, r4\n\t" /* return value to arg of exit */
"mov %1, r3\n\t" /* exit */
"trapa #0x11\n"
"1:"
: "=z" (__sc0)
......@@ -285,7 +295,7 @@ void __switch_to(struct task_struct *prev, struct task_struct *next)
* Restore the kernel mode register
* k7 (r7_bank1)
*/
asm volatile("ldc %0, $r7_bank"
asm volatile("ldc %0, r7_bank"
: /* no output */
:"r" (next));
}
......@@ -376,7 +386,7 @@ unsigned long get_wchan(struct task_struct *p)
asmlinkage void print_syscall(int x)
{
unsigned long flags, sr;
asm("stc $sr, %0": "=r" (sr));
asm("stc sr, %0": "=r" (sr));
save_and_cli(flags);
printk("%c: %c %c, %c: SYSCALL\n", (x&63)+32,
(current->flags&PF_USEDFPU)?'C':' ',
......
......@@ -503,8 +503,8 @@ int get_cpuinfo(char *buffer)
"cache size\t: 8K-byte/16K-byte\n");
#endif
p += sprintf(p, "bogomips\t: %lu.%02lu\n\n",
(loops_per_jiffy+2500)/(500000/HZ),
((loops_per_jiffy+2500)/(5000/HZ)) % 100);
loops_per_jiffy/(500000/HZ),
(loops_per_jiffy/(5000/HZ)) % 100);
p += sprintf(p, "Machine: %s\n", sh_mv.mv_name);
#define PRINT_CLOCK(name, value) \
......
/* $Id: sh_bios.c,v 1.3 2000/09/30 03:43:30 gniibe Exp $
/* $Id: sh_bios.c,v 1.5 2001/01/08 08:42:32 gniibe Exp $
*
* linux/arch/sh/kernel/sh_bios.c
* C interface for trapping into the standard LinuxSH BIOS.
......@@ -7,13 +7,12 @@
*
*/
#include <linux/config.h>
#include <asm/sh_bios.h>
#ifdef CONFIG_SH_STANDARD_BIOS
#define BIOS_CALL_CONSOLE_WRITE 0
#define BIOS_CALL_READ_BLOCK 1 /* not implemented */
#define BIOS_CALL_READ_BLOCK 1
#define BIOS_CALL_ETH_NODE_ADDR 10
#define BIOS_CALL_SHUTDOWN 11
#define BIOS_CALL_CHAR_OUT 0x1f /* TODO: hack */
#define BIOS_CALL_GDB_GET_MODE_PTR 0xfe
#define BIOS_CALL_GDB_DETACH 0xff
......@@ -66,5 +65,12 @@ void sh_bios_gdb_detach(void)
sh_bios_call(BIOS_CALL_GDB_DETACH, 0, 0, 0, 0);
}
#endif
void sh_bios_get_node_addr (unsigned char *node_addr)
{
sh_bios_call(BIOS_CALL_ETH_NODE_ADDR, 0, (long)node_addr, 0, 0);
}
void sh_bios_shutdown(unsigned int how)
{
sh_bios_call(BIOS_CALL_SHUTDOWN, how, 0, 0, 0);
}
......@@ -64,10 +64,11 @@ EXPORT_SYMBOL(get_vm_area);
#define DECLARE_EXPORT(name) extern void name(void);EXPORT_SYMBOL_NOVERS(name)
/* These symbols are generated by the compiler itself */
DECLARE_EXPORT(__udivsi3);
DECLARE_EXPORT(__sdivsi3);
#ifdef __SH4__
DECLARE_EXPORT(__udivsi3_i4);
DECLARE_EXPORT(__sdivsi3_i4);
DECLARE_EXPORT(__movstr_i4_even);
DECLARE_EXPORT(__movstr_i4_odd);
DECLARE_EXPORT(__ashrdi3);
......
......@@ -431,7 +431,7 @@ static void setup_frame(int sig, struct k_sigaction *ka,
current->comm, current->pid, frame, regs->pc, regs->pr);
#endif
flush_icache_range(regs->pr, regs->pr+4);
flush_cache_sigtramp(regs->pr);
return;
give_sigsegv:
......@@ -505,7 +505,7 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
current->comm, current->pid, frame, regs->pc, regs->pr);
#endif
flush_icache_range(regs->pr, regs->pr+4);
flush_cache_sigtramp(regs->pr);
return;
give_sigsegv:
......
This diff is collapsed.
......@@ -49,99 +49,99 @@ ENTRY(csum_partial)
* Fortunately, it is easy to convert 2-byte alignment to 4-byte
* alignment for the unrolled loop.
*/
mov $r5, $r1
mov $r4, $r0
tst #2, $r0 ! Check alignment.
mov r5, r1
mov r4, r0
tst #2, r0 ! Check alignment.
bt 2f ! Jump if alignment is ok.
!
add #-2, $r5 ! Alignment uses up two bytes.
cmp/pz $r5 !
add #-2, r5 ! Alignment uses up two bytes.
cmp/pz r5 !
bt/s 1f ! Jump if we had at least two bytes.
clrt
bra 6f
add #2, $r5 ! $r5 was < 2. Deal with it.
add #2, r5 ! r5 was < 2. Deal with it.
1:
mov.w @$r4+, $r0
extu.w $r0, $r0
addc $r0, $r6
mov.w @r4+, r0
extu.w r0, r0
addc r0, r6
bf 2f
add #1, $r6
add #1, r6
2:
mov #-5, $r0
shld $r0, $r5
tst $r5, $r5
mov #-5, r0
shld r0, r5
tst r5, r5
bt/s 4f ! if it's =0, go to 4f
clrt
.align 2
3:
mov.l @$r4+, $r0
mov.l @$r4+, $r2
mov.l @$r4+, $r3
addc $r0, $r6
mov.l @$r4+, $r0
addc $r2, $r6
mov.l @$r4+, $r2
addc $r3, $r6
mov.l @$r4+, $r3
addc $r0, $r6
mov.l @$r4+, $r0
addc $r2, $r6
mov.l @$r4+, $r2
addc $r3, $r6
addc $r0, $r6
addc $r2, $r6
movt $r0
dt $r5
mov.l @r4+, r0
mov.l @r4+, r2
mov.l @r4+, r3
addc r0, r6
mov.l @r4+, r0
addc r2, r6
mov.l @r4+, r2
addc r3, r6
mov.l @r4+, r3
addc r0, r6
mov.l @r4+, r0
addc r2, r6
mov.l @r4+, r2
addc r3, r6
addc r0, r6
addc r2, r6
movt r0
dt r5
bf/s 3b
cmp/eq #1, $r0
! here, we know $r5==0
addc $r5, $r6 ! add carry to $r6
cmp/eq #1, r0
! here, we know r5==0
addc r5, r6 ! add carry to r6
4:
mov $r1, $r0
and #0x1c, $r0
tst $r0, $r0
mov r1, r0
and #0x1c, r0
tst r0, r0
bt/s 6f
mov $r0, $r5
shlr2 $r5
mov #0, $r2
mov r0, r5
shlr2 r5
mov #0, r2
5:
addc $r2, $r6
mov.l @$r4+, $r2
movt $r0
dt $r5
addc r2, r6
mov.l @r4+, r2
movt r0
dt r5
bf/s 5b
cmp/eq #1, $r0
addc $r2, $r6
addc $r5, $r6 ! $r5==0 here, so it means add carry-bit
cmp/eq #1, r0
addc r2, r6
addc r5, r6 ! r5==0 here, so it means add carry-bit
6:
mov $r1, $r5
mov #3, $r0
and $r0, $r5
tst $r5, $r5
mov r1, r5
mov #3, r0
and r0, r5
tst r5, r5
bt 9f ! if it's =0 go to 9f
mov #2, $r1
cmp/hs $r1, $r5
mov #2, r1
cmp/hs r1, r5
bf 7f
mov.w @r4+, $r0
extu.w $r0, $r0
cmp/eq $r1, $r5
mov.w @r4+, r0
extu.w r0, r0
cmp/eq r1, r5
bt/s 8f
clrt
shll16 $r0
addc $r0, $r6
shll16 r0
addc r0, r6
7:
mov.b @$r4+, $r0
extu.b $r0, $r0
mov.b @r4+, r0
extu.b r0, r0
#ifndef __LITTLE_ENDIAN__
shll8 $r0
shll8 r0
#endif
8:
addc $r0, $r6
mov #0, $r0
addc $r0, $r6
addc r0, r6
mov #0, r0
addc r0, r6
9:
rts
mov $r6, $r0
mov r6, r0
/*
unsigned int csum_partial_copy_generic (const char *src, char *dst, int len,
......@@ -159,14 +159,14 @@ unsigned int csum_partial_copy_generic (const char *src, char *dst, int len,
* them all but there's no guarantee.
*/
#define SRC(x,y) \
9999: x,y; \
#define SRC(...) \
9999: __VA_ARGS__ ; \
.section __ex_table, "a"; \
.long 9999b, 6001f ; \
.previous
#define DST(x,y) \
9999: x,y; \
#define DST(...) \
9999: __VA_ARGS__ ; \
.section __ex_table, "a"; \
.long 9999b, 6002f ; \
.previous
......@@ -202,7 +202,7 @@ ENTRY(csum_partial_copy_generic)
bt/s 1f
clrt
bra 4f
add #2,r6 ! $r6 was < 2. Deal with it.
add #2,r6 ! r6 was < 2. Deal with it.
3: ! Handle different src and dest alinments.
! This is not common, so simple byte by byte copy will do.
......@@ -211,7 +211,8 @@ ENTRY(csum_partial_copy_generic)
tst r6, r6
bt 4f
clrt
SRC(5: mov.b @r4+,r0 )
5:
SRC( mov.b @r4+,r0 )
DST( mov.b r0,@r5 )
add #1, r5
SRC( mov.b @r4+,r1 )
......@@ -244,7 +245,8 @@ DST( mov.b r1,@r5 )
! src and dest equally aligned, but to a two byte boundary.
! Handle first two bytes as a special case
.align 5
SRC(1: mov.w @r4+,r0 )
1:
SRC( mov.w @r4+,r0 )
DST( mov.w r0,@r5 )
add #2,r5
extu.w r0,r0
......@@ -258,7 +260,8 @@ DST( mov.w r0,@r5 )
tst r6,r6
bt/s 2f
clrt
SRC(1: mov.l @r4+,r0 )
1:
SRC( mov.l @r4+,r0 )
SRC( mov.l @r4+,r1 )
addc r0,r7
DST( mov.l r0,@r5 )
......@@ -276,7 +279,7 @@ DST( mov.l r0,@r5 )
DST( mov.l r1,@r5 )
add #4,r5
SRC( mov.l @r4+,r0 )
SRC( mov.l @r4+,r0 )
SRC( mov.l @r4+,r1 )
addc r0,r7
DST( mov.l r0,@r5 )
......@@ -307,7 +310,8 @@ DST( mov.l r1,@r5 )
bf/s 4f
clrt
shlr2 r6
SRC(3: mov.l @r4+,r0 )
3:
SRC( mov.l @r4+,r0 )
addc r0,r7
DST( mov.l r0,@r5 )
add #4,r5
......@@ -334,7 +338,8 @@ DST( mov.w r0,@r5 )
clrt
shll16 r0
addc r0,r7
SRC(5: mov.b @r4+,r0 )
5:
SRC( mov.b @r4+,r0 )
DST( mov.b r0,@r5 )
extu.b r0,r0
#ifndef __LITTLE_ENDIAN__
......
......@@ -21,7 +21,11 @@ void __delay(unsigned long loops)
inline void __const_udelay(unsigned long xloops)
{
xloops *= current_cpu_data.loops_per_jiffy;
__asm__("dmulu.l %0, %2\n\t"
"sts mach, %0"
: "=r" (xloops)
: "0" (xloops), "r" (current_cpu_data.loops_per_jiffy)
: "macl", "mach");
__delay(xloops * HZ);
}
......
......@@ -243,6 +243,22 @@ void flush_icache_range(unsigned long start, unsigned long end)
restore_flags(flags);
}
/*
* Write back the D-cache and purge the I-cache for signal trampoline.
*/
void flush_cache_sigtramp(unsigned long addr)
{
unsigned long v, index;
v = addr & ~(L1_CACHE_BYTES-1);
asm volatile("ocbwb %0"
: /* no output */
: "m" (__m(v)));
index = CACHE_IC_ADDRESS_ARRAY| (v&CACHE_IC_ENTRY_MASK);
ctrl_outl(0, index); /* Clear out Valid-bit */
}
/*
* Invalidate the I-cache of the page (don't need to write back D-cache).
*
......
/* $Id: entry.S,v 1.168 2001/01/01 01:46:15 davem Exp $
/* $Id: entry.S,v 1.169 2001/01/25 21:47:20 davem Exp $
* arch/sparc/kernel/entry.S: Sparc trap low-level entry points.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
......@@ -999,6 +999,7 @@ C_LABEL(invalid_segment_patch1):
ld [%l4 + 0x18], %l3
inc %l3 ! sun4c_kernel_ring.num_entries++
st %l3, [%l4 + 0x18]
b 4f
ld [%l6 + 0x08], %l5
......
......@@ -416,6 +416,8 @@ CONFIG_DRM_FFB=m
# CONFIG_QUOTA is not set
CONFIG_AUTOFS_FS=m
CONFIG_AUTOFS4_FS=m
# CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
CONFIG_AFFS_FS=m
......
......@@ -290,8 +290,8 @@ void __init smp_boot_cpus(void)
}
printk("Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
cpucount + 1,
(bogosum + 2500)/500000,
((bogosum + 2500)/5000)%100);
bogosum/(500000/HZ),
(bogosum/(5000/HZ))%100);
smp_activated = 1;
smp_num_cpus = cpucount + 1;
}
......
......@@ -81,11 +81,3 @@ 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_processor_throttling_info);
EXPORT_SYMBOL(acpi_get_processor_throttling_state);
EXPORT_SYMBOL(acpi_set_processor_throttling_state);
EXPORT_SYMBOL(acpi_get_processor_cx_info);
EXPORT_SYMBOL(acpi_set_processor_sleep_state);
EXPORT_SYMBOL(acpi_processor_sleep);
/******************************************************************************
*
* Module Name: cmalloc - local memory allocation routines
* $Revision: 83 $
* $Revision: 84 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Module Name: cmxface - External interfaces for "global" ACPI functions
* $Revision: 58 $
* $Revision: 62 $
*
*****************************************************************************/
......@@ -304,16 +304,22 @@ acpi_get_system_info (
out_buffer->length = sizeof (ACPI_SYSTEM_INFO);
info_ptr = (ACPI_SYSTEM_INFO *) out_buffer->pointer;
/* TBD [Future]: need a version number, or use the version string */
info_ptr->acpi_ca_version = 0x1234;
info_ptr->acpi_ca_version = ACPI_CA_VERSION;
/* System flags (ACPI capabilities) */
info_ptr->flags = acpi_gbl_system_flags;
/* Timer resolution - 24 or 32 bits */
info_ptr->timer_resolution = acpi_hw_pmt_resolution ();
if (!acpi_gbl_FADT) {
info_ptr->timer_resolution = 0;
}
else if (acpi_gbl_FADT->tmr_val_ext == 0) {
info_ptr->timer_resolution = 24;
}
else {
info_ptr->timer_resolution = 32;
}
/* Clear the reserved fields */
......
......@@ -39,6 +39,9 @@ static int acpi_c3_tested = 0;
static int acpi_max_c_state = 1;
static int acpi_pm_tmr_len;
#define MAX_C2_LATENCY 100
#define MAX_C3_LATENCY 1000
/*
* Clear busmaster activity flag
*/
......@@ -251,10 +254,7 @@ static ACPI_STATUS
acpi_found_cpu(ACPI_HANDLE handle, u32 level, void *ctx, void **value)
{
ACPI_OBJECT obj;
ACPI_CX_STATE lat[4];
ACPI_CPU_THROTTLING_STATE throttle[ACPI_MAX_THROTTLE];
ACPI_BUFFER buf;
int i, count;
buf.length = sizeof(obj);
buf.pointer = &obj;
......@@ -273,41 +273,28 @@ acpi_found_cpu(ACPI_HANDLE handle, u32 level, void *ctx, void **value)
acpi_pblk = obj.processor.pblk_address;
buf.length = sizeof(lat);
buf.pointer = lat;
if (!ACPI_SUCCESS(acpi_get_processor_cx_info(handle, &buf)))
return AE_OK;
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_TMR_HZ / 1000);
acpi_max_c_state = 2;
if (lat[2].latency < MAX_CX_STATE_LATENCY) {
printk(KERN_INFO "ACPI: System firmware supports: C2");
acpi_c2_exit_latency = lat[2].latency;
acpi_max_c_state = 2;
if (lat[3].latency < MAX_CX_STATE_LATENCY) {
printk(" C3");
acpi_c3_exit_latency = lat[3].latency;
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 * 5);
acpi_max_c_state = 3;
}
printk("\n");
}
memset(throttle, 0, sizeof(throttle));
buf.length = sizeof(throttle);
buf.pointer = throttle;
if (!ACPI_SUCCESS(acpi_get_processor_throttling_info(handle, &buf)))
return AE_OK;
for (i = 0, count = 0; i < ACPI_MAX_THROTTLE; i++) {
if (throttle[i].percent_of_clock)
count++;
}
/* 0% throttled really doesn't count */
count--;
printk(" C3");
}
if (count > 0) {
DEBUG_PRINT(ACPI_INFO, ("%d throttling states\n", count));
printk("\n");
}
return AE_OK;
......
/*******************************************************************************
*
* Module Name: dsmthdat - control method arguments and local variables
* $Revision: 38 $
* $Revision: 39 $
*
******************************************************************************/
......@@ -40,7 +40,7 @@
*
* FUNCTION: Acpi_ds_method_data_init
*
* PARAMETERS: *Obj_desc
* PARAMETERS: Walk_state - Current walk state object
*
* RETURN: Status
*
......@@ -97,7 +97,7 @@ acpi_ds_method_data_init (
*
* FUNCTION: Acpi_ds_method_data_delete_all
*
* PARAMETERS: None
* PARAMETERS: Walk_state - Current walk state object
*
* RETURN: Status
*
......@@ -153,7 +153,9 @@ acpi_ds_method_data_delete_all (
*
* FUNCTION: Acpi_ds_method_data_init_args
*
* PARAMETERS: None
* PARAMETERS: *Params - Pointer to a parameter list for the method
* Max_param_count - The arg count for this method
* Walk_state - Current walk state object
*
* RETURN: Status
*
......@@ -214,6 +216,7 @@ acpi_ds_method_data_init_args (
* Index - Which local_var or argument to get
* Entry - Pointer to where a pointer to the stack
* entry is returned.
* Walk_state - Current walk state object
*
* RETURN: Status
*
......@@ -276,6 +279,7 @@ acpi_ds_method_data_get_entry (
* PARAMETERS: Type - Either MTH_TYPE_LOCAL or MTH_TYPE_ARG
* Index - Which local_var or argument to get
* Object - Object to be inserted into the stack entry
* Walk_state - Current walk state object
*
* RETURN: Status
*
......@@ -320,6 +324,7 @@ acpi_ds_method_data_set_entry (
* PARAMETERS: Type - Either MTH_TYPE_LOCAL or MTH_TYPE_ARG
* Index - Which local_var or argument whose type
* to get
* Walk_state - Current walk state object
*
* RETURN: Data type of selected Arg or Local
* Used only in Exec_monadic2()/Type_op.
......@@ -366,6 +371,7 @@ acpi_ds_method_data_get_type (
* PARAMETERS: Type - Either MTH_TYPE_LOCAL or MTH_TYPE_ARG
* Index - Which local_var or argument whose type
* to get
* Walk_state - Current walk state object
*
* RETURN: Get the Node associated with a local or arg.
*
......@@ -418,7 +424,8 @@ acpi_ds_method_data_get_nte (
*
* PARAMETERS: Type - Either MTH_TYPE_LOCAL or MTH_TYPE_ARG
* Index - Which local_var or argument to get
* *Dest_desc - Descriptor into which selected Arg
* Walk_state - Current walk state object
* *Dest_desc - Ptr to Descriptor into which selected Arg
* or Local value should be copied
*
* RETURN: Status
......@@ -474,10 +481,12 @@ acpi_ds_method_data_get_value (
switch (type)
{
case MTH_TYPE_ARG:
return (AE_AML_UNINITIALIZED_ARG);
break;
case MTH_TYPE_LOCAL:
return (AE_AML_UNINITIALIZED_LOCAL);
break;
}
......@@ -502,6 +511,7 @@ acpi_ds_method_data_get_value (
*
* PARAMETERS: Type - Either MTH_TYPE_LOCAL or MTH_TYPE_ARG
* Index - Which local_var or argument to delete
* Walk_state - Current walk state object
*
* RETURN: Status
*
......@@ -548,7 +558,6 @@ acpi_ds_method_data_delete_value (
* Decrement the reference count by one to balance the
* increment when the object was stored in the slot.
*/
acpi_cm_remove_reference (object);
}
......@@ -563,18 +572,14 @@ acpi_ds_method_data_delete_value (
*
* PARAMETERS: Type - Either MTH_TYPE_LOCAL or MTH_TYPE_ARG
* Index - Which local_var or argument to set
* *Src_desc - Value to be stored
* *Dest_desc - Descriptor into which *Src_desc
* can be copied, or NULL if one must
* be allocated for the purpose. If
* provided, this descriptor will be
* used for the new value.
* Src_desc - Value to be stored
* Walk_state - Current walk state
*
* RETURN: Status
*
* DESCRIPTION: Store a value in an Arg or Local. The Src_desc is installed
* as the new value for the Arg or Local and the reference count
* is incremented.
* for Src_desc is incremented.
*
******************************************************************************/
......@@ -644,7 +649,6 @@ acpi_ds_method_data_set_value (
* Store this object into the Node
* (do the indirect store)
*/
status = acpi_ns_attach_object ((ACPI_NAMESPACE_NODE *) *entry, src_desc,
src_desc->common.type);
return (status);
......@@ -652,10 +656,18 @@ acpi_ds_method_data_set_value (
/*
* Otherwise, just delete the existing object
* before storing the new one
* Perform "Implicit conversion" of the new object to the type of the
* existing object
*/
status = acpi_aml_convert_to_target_type ((*entry)->common.type, &src_desc, walk_state);
if (ACPI_FAILURE (status)) {
goto cleanup;
}
/*
* Delete the existing object
* before storing the new one
*/
acpi_ds_method_data_delete_value (type, index, walk_state);
}
......@@ -666,7 +678,6 @@ acpi_ds_method_data_set_value (
* Install the new object in the stack entry
* (increments the object reference count by one)
*/
status = acpi_ds_method_data_set_entry (type, index, src_desc, walk_state);
if (ACPI_FAILURE (status)) {
goto cleanup;
......
......@@ -2,7 +2,7 @@
*
* Module Name: dswexec - Dispatcher method execution callbacks;
* dispatch to interpreter.
* $Revision: 54 $
* $Revision: 55 $
*
*****************************************************************************/
......@@ -330,6 +330,8 @@ acpi_ds_exec_end_op (
walk_state->num_operands = 0;
walk_state->return_desc = NULL;
walk_state->op_info = op_info;
walk_state->opcode = opcode;
/* Call debugger for single step support (DEBUG build only) */
......
......@@ -55,7 +55,7 @@ struct acpi_run_entry
static spinlock_t acpi_event_lock = SPIN_LOCK_UNLOCKED;
static volatile u32 acpi_event_status = 0;
static volatile acpi_sstate_t acpi_event_state = ACPI_S0;
static volatile acpi_sstate_t acpi_event_state = ACPI_STATE_S0;
static DECLARE_WAIT_QUEUE_HEAD(acpi_event_wait);
static volatile int acpi_thread_pid = -1;
......@@ -243,7 +243,7 @@ acpi_do_event(ctl_table * ctl,
/*
* Enter system sleep state
*/
static int
/*static int
acpi_do_sleep(ctl_table * ctl,
int write,
struct file *file,
......@@ -257,13 +257,13 @@ acpi_do_sleep(ctl_table * ctl,
}
}
else {
int status = acpi_enter_sx(ACPI_S1);
int status = acpi_enter_sx(ACPI_STATE_S1);
if (status)
return status;
}
file->f_pos += *len;
return 0;
}
}*/
/*
......@@ -382,7 +382,8 @@ static struct ctl_table acpi_table[] =
&acpi_c3_enter_latency, sizeof(acpi_c3_enter_latency),
0644, NULL, &acpi_do_ulong},
{ACPI_SLEEP, "sleep", NULL, 0, 0600, NULL, &acpi_do_sleep},
/* until it actually works */
/* {ACPI_SLEEP, "sleep", NULL, 0, 0600, NULL, &acpi_do_sleep},*/
{ACPI_EVENT, "event", NULL, 0, 0400, NULL, &acpi_do_event},
......@@ -415,7 +416,9 @@ static struct ctl_table acpi_dir_table[] =
static int
acpi_thread(void *context)
{
ACPI_PHYSICAL_ADDRESS rsdp_phys;
ACPI_PHYSICAL_ADDRESS rsdp_phys;
ACPI_BUFFER buffer;
ACPI_SYSTEM_INFO sys_info;
/*
* initialize
......@@ -437,8 +440,6 @@ acpi_thread(void *context)
rsdp_phys = efi.acpi;
#endif
printk(KERN_ERR "ACPI: System description tables found\n");
if (!ACPI_SUCCESS(acpi_find_and_load_tables(rsdp_phys)))
return -ENODEV;
......@@ -448,6 +449,17 @@ acpi_thread(void *context)
return -ENODEV;
}
buffer.length = sizeof(sys_info);
buffer.pointer = &sys_info;
if (!ACPI_SUCCESS (acpi_get_system_info(&buffer))) {
printk(KERN_ERR "ACPI: Could not get system info\n");
acpi_terminate();
return -ENODEV;
}
printk(KERN_INFO "ACPI: Core Subsystem version [%x]\n", sys_info.acpi_ca_version);
if (!ACPI_SUCCESS(acpi_enable_subsystem(ACPI_FULL_INITIALIZATION))) {
printk(KERN_ERR "ACPI: Subsystem enable failed\n");
acpi_terminate();
......
......@@ -400,8 +400,6 @@ ec_region_setup (
{
FUNCTION_TRACE("acpi_ec_region_setup");
printk("acpi_ec_region_setup\n");
if (function == ACPI_REGION_DEACTIVATE)
{
if (*region_context)
......
/******************************************************************************
*
* Module Name: hwacpi - ACPI hardware functions - mode and timer
* $Revision: 35 $
* Module Name: hwacpi - ACPI Hardware Initialization/Mode Interface
* $Revision: 36 $
*
*****************************************************************************/
......@@ -304,48 +305,3 @@ acpi_hw_get_mode_capabilities (void)
}
/******************************************************************************
*
* FUNCTION: Acpi_hw_pmt_ticks
*
* PARAMETERS: none
*
* RETURN: Current value of the ACPI PMT (timer)
*
* DESCRIPTION: Obtains current value of ACPI PMT
*
******************************************************************************/
u32
acpi_hw_pmt_ticks (void)
{
u32 ticks;
ticks = acpi_os_in32 ((ACPI_IO_ADDRESS) ACPI_GET_ADDRESS (acpi_gbl_FADT->Xpm_tmr_blk.address));
return (ticks);
}
/******************************************************************************
*
* FUNCTION: Acpi_hw_pmt_resolution
*
* PARAMETERS: none
*
* RETURN: Number of bits of resolution in the PMT (either 24 or 32)
*
* DESCRIPTION: Obtains resolution of the ACPI PMT (either 24bit or 32bit)
*
******************************************************************************/
u32
acpi_hw_pmt_resolution (void)
{
if (0 == acpi_gbl_FADT->tmr_val_ext) {
return (24);
}
return (32);
}
This diff is collapsed.
/******************************************************************************
*
* Module Name: hwgpe - Low level GPE enable/disable/clear functions
* $Revision: 27 $
* $Revision: 28 $
*
*****************************************************************************/
......
......@@ -3,7 +3,7 @@
*
* Module Name: hwregs - Read/write access functions for the various ACPI
* control and status registers.
* $Revision: 87 $
* $Revision: 88 $
*
******************************************************************************/
......@@ -37,7 +37,7 @@
/* This matches the #defines in actypes.h. */
NATIVE_CHAR *sleep_state_table[] = {"\\_S0_","\\_S1_","\\_S2_","\\_S3_",
"\\_S4_","\\_S4_b","\\_S5_"};
"\\_S4_","\\_S5_","\\_S4_b"};
/*******************************************************************************
......@@ -53,7 +53,7 @@ NATIVE_CHAR *sleep_state_table[] = {"\\_S0_","\\_S1_","\\_S2_","
*
******************************************************************************/
static u32
u32
acpi_hw_get_bit_shift (
u32 mask)
{
......@@ -581,13 +581,8 @@ acpi_hw_register_read (
case PM1_CONTROL: /* 16-bit access */
if (register_id != SLP_TYPE_B) {
value |= acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);
}
if (register_id != SLP_TYPE_A) {
value |= acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);
}
value = acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);
value |= acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);
break;
......@@ -696,30 +691,20 @@ acpi_hw_register_write (
case PM1_CONTROL: /* 16-bit access */
/*
* If SLP_TYP_A or SLP_TYP_B, only write to one reg block.
* Otherwise, write to both.
*/
if (register_id == SLP_TYPE_A) {
acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);
}
else if (register_id == SLP_TYPE_B) {
acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);
}
else {
/* disable/re-enable interrupts if sleeping */
if (register_id == SLP_EN) {
disable();
}
acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);
acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);
break;
acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);
acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);
if (register_id == SLP_EN) {
enable();
}
}
case PM1_a_CONTROL: /* 16-bit access */
acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);
break;
case PM1_b_CONTROL: /* 16-bit access */
acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);
break;
......
/******************************************************************************
*
* Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface
* $Revision: 5 $
*
*****************************************************************************/
/*
* 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 "acnamesp.h"
#include "achware.h"
#define _COMPONENT HARDWARE
MODULE_NAME ("hwsleep")
/******************************************************************************
*
* FUNCTION: Acpi_set_firmware_waking_vector
*
* PARAMETERS: Physical_address - Physical address of ACPI real mode
* entry point.
*
* RETURN: AE_OK or AE_ERROR
*
* DESCRIPTION: Access function for d_firmware_waking_vector field in FACS
*
******************************************************************************/
ACPI_STATUS
acpi_set_firmware_waking_vector (
ACPI_PHYSICAL_ADDRESS physical_address)
{
/* Make sure that we have an FACS */
if (!acpi_gbl_FACS) {
return (AE_NO_ACPI_TABLES);
}
/* Set the vector */
if (acpi_gbl_FACS->vector_width == 32) {
* (u32 *) acpi_gbl_FACS->firmware_waking_vector = (u32) physical_address;
}
else {
*acpi_gbl_FACS->firmware_waking_vector = physical_address;
}
return (AE_OK);
}
/******************************************************************************
*
* FUNCTION: Acpi_get_firmware_waking_vector
*
* PARAMETERS: *Physical_address - Output buffer where contents of
* the Firmware_waking_vector field of
* the FACS will be stored.
*
* RETURN: Status
*
* DESCRIPTION: Access function for d_firmware_waking_vector field in FACS
*
******************************************************************************/
ACPI_STATUS
acpi_get_firmware_waking_vector (
ACPI_PHYSICAL_ADDRESS *physical_address)
{
if (!physical_address) {
return (AE_BAD_PARAMETER);
}
/* Make sure that we have an FACS */
if (!acpi_gbl_FACS) {
return (AE_NO_ACPI_TABLES);
}
/* Get the vector */
if (acpi_gbl_FACS->vector_width == 32) {
*physical_address = * (u32 *) acpi_gbl_FACS->firmware_waking_vector;
}
else {
*physical_address = *acpi_gbl_FACS->firmware_waking_vector;
}
return (AE_OK);
}
/******************************************************************************
*
* FUNCTION: Acpi_enter_sleep_state
*
* PARAMETERS: Sleep_state - Which sleep state to enter
*
* RETURN: Status
*
* DESCRIPTION: Enter a system sleep state (see ACPI 2.0 spec p 231)
*
******************************************************************************/
ACPI_STATUS
acpi_enter_sleep_state (
u8 sleep_state)
{
ACPI_STATUS status;
ACPI_OBJECT_LIST arg_list;
ACPI_OBJECT arg;
u8 type_a;
u8 type_b;
u16 PM1_acontrol;
u16 PM1_bcontrol;
/*
* _PSW methods could be run here to enable wake-on keyboard, LAN, etc.
*/
status = acpi_hw_obtain_sleep_type_register_data(sleep_state, &type_a, &type_b);
if (!ACPI_SUCCESS(status)) {
return status;
}
/* run the _PTS and _GTS methods */
MEMSET(&arg_list, 0, sizeof(arg_list));
arg_list.count = 1;
arg_list.pointer = &arg;
MEMSET(&arg, 0, sizeof(arg));
arg.type = ACPI_TYPE_INTEGER;
arg.integer.value = sleep_state;
acpi_evaluate_object(NULL, "\\_PTS", &arg_list, NULL);
acpi_evaluate_object(NULL, "\\_GTS", &arg_list, NULL);
/* clear wake status */
acpi_hw_register_bit_access(ACPI_WRITE, ACPI_MTX_LOCK, WAK_STS, 1);
PM1_acontrol = (u16) acpi_hw_register_read(ACPI_MTX_LOCK, PM1_CONTROL);
/* mask off SLP_EN and SLP_TYP fields */
PM1_acontrol &= 0xC3FF;
/* mask in SLP_EN */
PM1_acontrol |= (1 << acpi_hw_get_bit_shift (SLP_EN_MASK));
PM1_bcontrol = PM1_acontrol;
/* mask in SLP_TYP */
PM1_acontrol |= (type_a << acpi_hw_get_bit_shift (SLP_TYPE_X_MASK));
PM1_bcontrol |= (type_b << acpi_hw_get_bit_shift (SLP_TYPE_X_MASK));
/* the old version was disabling interrupts. let's try it without
* and see how that works
*/
/*disable();*/
acpi_hw_register_write(ACPI_MTX_LOCK, PM1_a_CONTROL, PM1_acontrol);
acpi_hw_register_write(ACPI_MTX_LOCK, PM1_b_CONTROL, PM1_bcontrol);
/*enable();*/
return (AE_OK);
}
/******************************************************************************
*
* Name: hwtimer.c - ACPI Power Management Timer Interface
* $Revision: 4 $
*
*****************************************************************************/
/*
* Copyright (C) 2000, 2001 R. Byron Moore
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "acpi.h"
#include "achware.h"
#define _COMPONENT HARDWARE
MODULE_NAME ("hwtimer")
/******************************************************************************
*
* FUNCTION: Acpi_get_timer_resolution
*
* PARAMETERS: none
*
* RETURN: Number of bits of resolution in the PM Timer (24 or 32).
*
* DESCRIPTION: Obtains resolution of the ACPI PM Timer.
*
******************************************************************************/
ACPI_STATUS
acpi_get_timer_resolution (
u32 *resolution)
{
if (!resolution) {
return (AE_BAD_PARAMETER);
}
if (0 == acpi_gbl_FADT->tmr_val_ext) {
*resolution = 24;
}
else {
*resolution = 32;
}
return (AE_OK);
}
/******************************************************************************
*
* FUNCTION: Acpi_get_timer
*
* PARAMETERS: none
*
* RETURN: Current value of the ACPI PM Timer (in ticks).
*
* DESCRIPTION: Obtains current value of ACPI PM Timer.
*
******************************************************************************/
ACPI_STATUS
acpi_get_timer (
u32 *ticks)
{
if (!ticks) {
return (AE_BAD_PARAMETER);
}
*ticks = acpi_os_in32 ((ACPI_IO_ADDRESS) ACPI_GET_ADDRESS (acpi_gbl_FADT->Xpm_tmr_blk.address));
return (AE_OK);
}
/******************************************************************************
*
* FUNCTION: Acpi_get_timer_duration
*
* PARAMETERS: Start_ticks
* End_ticks
* Time_elapsed
*
* RETURN: Time_elapsed
*
* DESCRIPTION: Computes the time elapsed (in microseconds) between two
* PM Timer time stamps, taking into account the possibility of
* rollovers, the timer resolution, and timer frequency.
*
* The PM Timer's clock ticks at roughly 3.6 times per
* _microsecond_, and its clock continues through Cx state
* transitions (unlike many CPU timestamp counters) -- making it
* a versatile and accurate timer.
*
* Note that this function accomodates only a single timer
* rollover. Thus for 24-bit timers, this function should only
* be used for calculating durations less than ~4.6 seconds
* (~20 hours for 32-bit timers).
*
******************************************************************************/
ACPI_STATUS
acpi_get_timer_duration (
u32 start_ticks,
u32 end_ticks,
u32 *time_elapsed)
{
u32 delta_ticks = 0;
u32 seconds = 0;
u32 milliseconds = 0;
u32 microseconds = 0;
u32 remainder = 0;
if (!time_elapsed) {
return (AE_BAD_PARAMETER);
}
/*
* Compute Tick Delta:
* -------------------
* Handle timer rollovers on 24- versus 32-bit timers.
*/
if (start_ticks < end_ticks) {
delta_ticks = end_ticks - start_ticks;
}
else if (start_ticks > end_ticks) {
/* 24-bit Timer */
if (0 == acpi_gbl_FADT->tmr_val_ext) {
delta_ticks = (0x00FFFFFF - start_ticks) + end_ticks;
}
/* 32-bit Timer */
else {
delta_ticks = (0xFFFFFFFF - start_ticks) + end_ticks;
}
}
/*
* Compute Duration:
* -----------------
* Since certain compilers (gcc/Linux, argh!) don't support 64-bit
* divides in kernel-space we have to do some trickery to preserve
* accuracy while using 32-bit math.
*
* TODO: Change to use 64-bit math when supported.
*
* The process is as follows:
* 1. Compute the number of seconds by dividing Delta Ticks by
* the timer frequency.
* 2. Compute the number of milliseconds in the remainder from step #1
* by multiplying by 1000 and then dividing by the timer frequency.
* 3. Compute the number of microseconds in the remainder from step #2
* by multiplying by 1000 and then dividing by the timer frequency.
* 4. Add the results from steps 1, 2, and 3 to get the total duration.
*
* Example: The time elapsed for Delta_ticks = 0xFFFFFFFF should be
* 1199864031 microseconds. This is computed as follows:
* Step #1: Seconds = 1199; Remainder = 3092840
* Step #2: Milliseconds = 864; Remainder = 113120
* Step #3: Microseconds = 31; Remainder = <don't care!>
*/
/* Step #1 */
seconds = delta_ticks / PM_TIMER_FREQUENCY;
remainder = delta_ticks % PM_TIMER_FREQUENCY;
/* Step #2 */
milliseconds = (remainder * 1000) / PM_TIMER_FREQUENCY;
remainder = (remainder * 1000) % PM_TIMER_FREQUENCY;
/* Step #3 */
microseconds = (remainder * 1000) / PM_TIMER_FREQUENCY;
/* Step #4 */
*time_elapsed = seconds * 1000000;
*time_elapsed += milliseconds * 1000;
*time_elapsed += microseconds;
return (AE_OK);
}
This diff is collapsed.
/******************************************************************************
*
* Name: accommon.h -- prototypes for the common (subsystem-wide) procedures
* $Revision: 86 $
* $Revision: 87 $
*
*****************************************************************************/
......
/******************************************************************************
*
* Name: acconfig.h - Global configuration constants
* $Revision: 51 $
* $Revision: 53 $
*
*****************************************************************************/
......@@ -53,7 +53,7 @@
/* Version string */
#define ACPI_CA_VERSION __DATE__
#define ACPI_CA_VERSION 0x20010125
/* Maximum objects in the various object caches */
......
/******************************************************************************
*
* Name: achware.h -- hardware specific interfaces
* $Revision: 50 $
* $Revision: 53 $
*
*****************************************************************************/
......@@ -27,6 +27,10 @@
#define __ACHWARE_H__
/* PM Timer ticks per second (HZ) */
#define PM_TIMER_FREQUENCY 3579545
/* Prototypes */
......@@ -92,6 +96,10 @@ void
acpi_hw_clear_acpi_status (
void);
u32
acpi_hw_get_bit_shift (
u32 mask);
/* GPE support */
......@@ -121,89 +129,21 @@ acpi_hw_obtain_sleep_type_register_data (
u8 *slp_typ_b);
/* Cx State Prototypes */
ACPI_STATUS
acpi_hw_enter_c1(
ACPI_IO_ADDRESS pblk_address,
u32 *pm_timer_ticks);
ACPI_STATUS
acpi_hw_enter_c2(
ACPI_IO_ADDRESS pblk_address,
u32 *pm_timer_ticks);
ACPI_STATUS
acpi_hw_enter_c3(
ACPI_IO_ADDRESS pblk_address,
u32 *pm_timer_ticks);
ACPI_STATUS
acpi_hw_enter_cx (
ACPI_IO_ADDRESS pblk_address,
u32 *pm_timer_ticks);
ACPI_STATUS
acpi_hw_set_cx (
u32 cx_state);
ACPI_STATUS
acpi_hw_get_cx_info (
u32 cx_states[]);
/* ACPI Timer prototypes */
ACPI_STATUS
acpi_hw_get_cx_handler (
u32 cx_state,
ACPI_C_STATE_HANDLER *handler);
acpi_get_timer_resolution (
u32 *resolution);
ACPI_STATUS
acpi_hw_set_cx_handler (
u32 cx_state,
ACPI_C_STATE_HANDLER handler);
/* Throttling Prototypes */
void
acpi_hw_enable_throttling (
ACPI_IO_ADDRESS pblk_address);
void
acpi_hw_disable_throttling (
ACPI_IO_ADDRESS pblk_address);
u32
acpi_hw_get_duty_cycle (
u8 duty_offset,
ACPI_IO_ADDRESS pblk_address,
u32 num_throttle_states);
void
acpi_hw_program_duty_cycle (
u8 duty_offset,
u32 duty_cycle,
ACPI_IO_ADDRESS pblk_address,
u32 num_throttle_states);
NATIVE_UINT
acpi_hw_local_pow (
NATIVE_UINT x,
NATIVE_UINT y);
/* ACPI Timer prototypes */
u32
acpi_hw_pmt_ticks (
void);
u32
acpi_hw_pmt_resolution (
void);
acpi_get_timer (
u32 *ticks);
ACPI_STATUS
acpi_get_timer (
u32 *out_ticks);
acpi_get_timer_duration (
u32 start_ticks,
u32 end_ticks,
u32 *time_elapsed);
#endif /* __ACHWARE_H__ */
/******************************************************************************
*
* Name: acinterp.h - Interpreter subcomponent prototypes and defines
* $Revision: 89 $
* $Revision: 91 $
*
*****************************************************************************/
......@@ -88,6 +88,12 @@ acpi_aml_convert_to_string (
ACPI_OPERAND_OBJECT **obj_desc,
ACPI_WALK_STATE *walk_state);
ACPI_STATUS
acpi_aml_convert_to_target_type (
OBJECT_TYPE_INTERNAL destination_type,
ACPI_OPERAND_OBJECT **obj_desc,
ACPI_WALK_STATE *walk_state);
/*
* amfield - ACPI AML (p-code) execution - field manipulation
......@@ -438,17 +444,75 @@ acpi_aml_exec_store (
ACPI_WALK_STATE *walk_state);
ACPI_STATUS
acpi_aml_store_object_to_object (
acpi_aml_store_object_to_index (
ACPI_OPERAND_OBJECT *val_desc,
ACPI_OPERAND_OBJECT *dest_desc,
ACPI_WALK_STATE *walk_state);
ACPI_STATUS
acpi_aml_store_object_to_node (
ACPI_OPERAND_OBJECT *val_desc,
ACPI_OPERAND_OBJECT *source_desc,
ACPI_NAMESPACE_NODE *node,
ACPI_WALK_STATE *walk_state);
ACPI_STATUS
acpi_aml_store_object_to_object (
ACPI_OPERAND_OBJECT *source_desc,
ACPI_OPERAND_OBJECT *dest_desc,
ACPI_WALK_STATE *walk_state);
/*
*
*/
ACPI_STATUS
acpi_aml_resolve_object (
ACPI_OPERAND_OBJECT **source_desc_ptr,
OBJECT_TYPE_INTERNAL target_type,
ACPI_WALK_STATE *walk_state);
ACPI_STATUS
acpi_aml_store_object (
ACPI_OPERAND_OBJECT *source_desc,
OBJECT_TYPE_INTERNAL target_type,
ACPI_OPERAND_OBJECT **target_desc_ptr,
ACPI_WALK_STATE *walk_state);
/*
* amcopy - object copy
*/
ACPI_STATUS
acpi_aml_copy_buffer_to_buffer (
ACPI_OPERAND_OBJECT *source_desc,
ACPI_OPERAND_OBJECT *target_desc);
ACPI_STATUS
acpi_aml_copy_string_to_string (
ACPI_OPERAND_OBJECT *source_desc,
ACPI_OPERAND_OBJECT *target_desc);
ACPI_STATUS
acpi_aml_copy_integer_to_index_field (
ACPI_OPERAND_OBJECT *source_desc,
ACPI_OPERAND_OBJECT *target_desc);
ACPI_STATUS
acpi_aml_copy_integer_to_bank_field (
ACPI_OPERAND_OBJECT *source_desc,
ACPI_OPERAND_OBJECT *target_desc);
ACPI_STATUS
acpi_aml_copy_data_to_named_field (
ACPI_OPERAND_OBJECT *source_desc,
ACPI_NAMESPACE_NODE *node);
ACPI_STATUS
acpi_aml_copy_integer_to_field_unit (
ACPI_OPERAND_OBJECT *source_desc,
ACPI_OPERAND_OBJECT *target_desc);
/*
* amutils - interpreter/scanner utilities
......
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.
......@@ -143,6 +143,5 @@ struct dn_addr {
#define SIOCGNETADDR _IOR(DECNET_IOCTL_BASE, 0xe1, struct dn_naddr)
#define OSIOCSNETADDR _IOW(DECNET_IOCTL_BASE, 0xe0, int)
#define OSIOCGNETADDR _IOR(DECNET_IOCTL_BASE, 0xe1, int)
/* #define SIOCATEOR _IOR(DECNET_IOCTL_BASE, 0x01, int) */
#endif /* _LINUX_DN_H */
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