diff -urN linux-2.4.0-test9/Documentation/Configure.help linux-2.4.0-test9-lia/Documentation/Configure.help --- linux-2.4.0-test9/Documentation/Configure.help Wed Oct 4 16:53:06 2000 +++ linux-2.4.0-test9-lia/Documentation/Configure.help Wed Oct 4 23:23:29 2000 @@ -16665,6 +16665,119 @@ another UltraSPARC-IIi-cEngine boardset with a 7-segment display, you should say N to this option. +IA-64 system type +CONFIG_IA64_GENERIC + This selects the system type of your hardware. A "generic" kernel + will run on any supported IA-64 system. However, if you configure + a kernel for your specific system, it will be faster and smaller. + + To find out what type of IA-64 system you have, you may want to + check the IA-64 Linux web site at http://www.linux-ia64.org/. + As of the time of this writing, most hardware is DIG compliant, + so the "DIG-compliant" option is usually the right choice. + + HP-simulator For the HP simulator (http://software.hp.com/ia64linux/). + SN1-simulator For the SGI SN1 simulator. + DIG-compliant For DIG ("Developer's Interface Guide") compliant system. + + If you don't know what to do, choose "generic". + +Kernel page size +CONFIG_IA64_PAGE_SIZE_4KB + + This lets you select the page size of the kernel. For best IA-64 + performance, a page size of 8KB or 16KB is recommended. For best + IA-32 compatibility, a page size of 4KB should be selected (the vast + majority of IA-32 binaries work perfectly fine with a larger page + size). For Itanium systems, do NOT chose a page size larger than + 16KB. + + 4KB For best IA-32 compatibility + 8KB For best IA-64 performance + 16KB For best IA-64 performance + 64KB Not for Itanium. + + If you don't know what to do, choose 8KB. + +Enable Itanium A-step specific code +CONFIG_ITANIUM_ASTEP_SPECIFIC + Select this option to build a kernel for an Itanium prototype system + with an A-step CPU. You have an A-step CPU if the "revision" field in + /proc/cpuinfo is 0. + +Enable Itanium A1-step specific code +CONFIG_ITANIUM_A1_SPECIFIC + Select this option to build a kernel for an Itanium prototype system + with an A1-step CPU. If you don't know whether you have an A1-step CPU, + you probably don't and you can answer "no" here. + +Enable Itanium B-step specific code +CONFIG_ITANIUM_BSTEP_SPECIFIC + Select this option to build a kernel for an Itanium prototype system + with a B-step CPU. You have a B-step CPU if the "revision" field in + /proc/cpuinfo has a value in the range from 1 to 4. + +Enable Itanium B0-step specific code +CONFIG_ITANIUM_B0_SPECIFIC + Select this option to bild a kernel for an Itanium prototype system + with a B0-step CPU. You have a B0-step CPU if the "revision" field in + /proc/cpuinfo is 1. + +Force interrupt redirection +CONFIG_IA64_HAVE_IRQREDIR + Select this option if you know that your system has the ability to + redirect interrupts to different CPUs. Select N here if you're + unsure. + +Enable use of global TLB purge instruction (ptc.g) +CONFIG_ITANIUM_PTCG + Say Y here if you want the kernel to use the IA-64 "ptc.g" + instruction to flush the TLB on all CPUs. Select N here if + you're unsure. + +Enable SoftSDV hacks +CONFIG_IA64_SOFTSDV_HACKS + Say Y here to enable hacks to make the kernel work on the Intel + SoftSDV simulator. Select N here if you're unsure. + +Enable AzusA hacks +CONFIG_IA64_AZUSA_HACKS + Say Y here to enable hacks to make the kernel work on the NEC + AzusA platform. Select N here if you're unsure. + +Force socket buffers below 4GB? +CONFIG_SKB_BELOW_4GB + Most of today's network interface cards (NICs) support DMA to + the low 32 bits of the address space only. On machines with + more then 4GB of memory, this can cause the system to slow + down if there is no I/O TLB hardware. Turning this option on + avoids the slow-down by forcing socket buffers to be allocated + from memory below 4GB. The downside is that your system could + run out of memory below 4GB before all memory has been used up. + If you're unsure how to answer this question, answer Y. + +Enable IA-64 Machine Check Abort +CONFIG_IA64_MCA + Say Y here to enable machine check support for IA-64. If you're + unsure, answer Y. + +Performance monitor support +CONFIG_PERFMON + Selects whether support for the IA-64 performance monitor hardware + is included in the kernel. This makes some kernel data-structures a + little bigger and slows down execution a bit, but it is still + usually a good idea to turn this on. If you're unsure, say N. + +/proc/pal support +CONFIG_IA64_PALINFO + If you say Y here, you are able to get PAL (Processor Abstraction + Layer) information in /proc/pal. This contains useful information + about the processors in your systems, such as cache and TLB sizes + and the PAL firmware version in use. + + To use this option, you have to check that the "/proc file system + support" (CONFIG_PROC_FS) is enabled, too. + # # A couple of things I keep forgetting: # capitalize: AppleTalk, Ethernet, DOS, DMA, FAT, FTP, Internet, diff -urN linux-2.4.0-test9/Documentation/ia64/README linux-2.4.0-test9-lia/Documentation/ia64/README --- linux-2.4.0-test9/Documentation/ia64/README Thu Aug 10 19:56:17 2000 +++ linux-2.4.0-test9-lia/Documentation/ia64/README Fri Aug 25 00:14:17 2000 @@ -1,6 +1,6 @@ - Linux kernel release 2.3.xx for the IA-64 Platform + Linux kernel release 2.4.xx for the IA-64 Platform - These are the release notes for Linux version 2.3 for IA-64 + These are the release notes for Linux version 2.4 for IA-64 platform. This document provides information specific to IA-64 ONLY, to get additional information about the Linux kernel also read the original Linux README provided with the kernel. @@ -31,46 +31,13 @@ IA-64 SPECIFICS - - Security related issues: - - o mmap needs to check whether mapping would overlap with the - address-space hole in a region or whether the mapping would be - across regions. In both cases, mmap should fail. - - o ptrace is a huge security hole right now as it does not reject - writing to security sensitive bits (such as the PSR!). - - General issues: - o Kernel modules aren't supported yet. - - o For non-RT signals, siginfo isn't passed through from the kernel - to the point where the signal is actually delivered. Also, we - should make sure the siginfo data is compliant with the UNIX - ABI. - o Hardly any performance tuning has been done. Obvious targets - include the library routines (memcpy, IP checksum, etc.). Less + include the library routines (IP checksum, etc.). Less obvious targets include making sure we don't flush the TLB - needlessly, etc. Also, the TLB handlers should probably try to - do a speculative load from the virtually mapped linear page - table and only if that fails fall back on walking the page table - tree. + needlessly, etc. - o Discontiguous large memory support; memory above 4GB will be - discontiguous since the 4GB-64MB is reserved for firmware and I/O - space. - - o Correct mapping for PAL runtime code; PAL code needs to be - mapped by a TR. - - o Make current IRQ/IOSAPIC handling closer to IA32 such as, - disable/enable interrupts, use of INPROGRESS flag etc. - - o clone system call implementation; needs to setup proper backing - store - o SMP locks cleanup/optimization - o IA32 support. Currently experimental. It mostly works but - there are problems with some dynamically loaded programs. + o IA32 support. Currently experimental. It mostly works. diff -urN linux-2.4.0-test9/Makefile linux-2.4.0-test9-lia/Makefile --- linux-2.4.0-test9/Makefile Wed Oct 4 16:53:06 2000 +++ linux-2.4.0-test9-lia/Makefile Wed Oct 4 21:24:47 2000 @@ -87,7 +87,7 @@ CPPFLAGS := -D__KERNEL__ -I$(HPATH) -CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer +CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -g -O2 -fomit-frame-pointer AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS) # @@ -185,14 +185,14 @@ # use '-fno-strict-aliasing', but only if the compiler can take it CFLAGS += $(shell if $(CC) -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-fno-strict-aliasing"; fi) -export CPPFLAGS CFLAGS AFLAGS +export CPPFLAGS CFLAGS CFLAGS_KERNEL AFLAGS AFLAGS_KERNEL export NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS .S.s: - $(CPP) $(AFLAGS) -traditional -o $*.s $< + $(CPP) $(AFLAGS) $(AFLAGS_KERNEL) -traditional -o $*.s $< .S.o: - $(CC) $(AFLAGS) -traditional -c -o $*.o $< + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -traditional -c -o $*.o $< Version: dummy @rm -f include/linux/compile.h diff -urN linux-2.4.0-test9/arch/ia64/Makefile linux-2.4.0-test9-lia/arch/ia64/Makefile --- linux-2.4.0-test9/arch/ia64/Makefile Wed Aug 2 18:54:01 2000 +++ linux-2.4.0-test9-lia/arch/ia64/Makefile Wed Oct 4 21:32:24 2000 @@ -14,13 +14,18 @@ export AWK LINKFLAGS = -static -T arch/$(ARCH)/vmlinux.lds -AFLAGS += -Wa,-x +AFLAGS += -Wa,-x +AFLAGS_KERNEL := -mconstant-gp EXTRA = CFLAGS := $(CFLAGS) -pipe $(EXTRA) -Wa,-x -ffixed-r13 -mfixed-range=f10-f15,f32-f127 \ -funwind-tables CFLAGS_KERNEL := -mconstant-gp +ifeq ($(CONFIG_ITANIUM_ASTEP_SPECIFIC),y) + CFLAGS += -ma-step +endif + ifdef CONFIG_IA64_GENERIC CORE_FILES := arch/$(ARCH)/hp/hp.a \ arch/$(ARCH)/sn/sn.a \ @@ -41,11 +46,18 @@ $(CORE_FILES) endif -ifdef CONFIG_IA64_SGI_SN1_SIM +ifdef CONFIG_IA64_SGI_SN1 +CFLAGS := $(CFLAGS) -DSN -I. -DBRINGUP -DDIRECT_L1_CONSOLE \ + -DNUMA_BASE -DSIMULATED_KLGRAPH -DNUMA_MIGR_CONTROL \ + -DLITTLE_ENDIAN -DREAL_HARDWARE -DLANGUAGE_C=1 \ + -D_LANGUAGE_C=1 SUBDIRS := arch/$(ARCH)/sn/sn1 \ arch/$(ARCH)/sn \ + arch/$(ARCH)/sn/io \ + arch/$(ARCH)/sn/fprom \ $(SUBDIRS) CORE_FILES := arch/$(ARCH)/sn/sn.a \ + arch/$(ARCH)/sn/io/sgiio.o\ $(CORE_FILES) endif diff -urN linux-2.4.0-test9/arch/ia64/boot/bootloader.c linux-2.4.0-test9-lia/arch/ia64/boot/bootloader.c --- linux-2.4.0-test9/arch/ia64/boot/bootloader.c Tue Jul 11 19:02:37 2000 +++ linux-2.4.0-test9-lia/arch/ia64/boot/bootloader.c Fri Aug 25 00:19:09 2000 @@ -68,15 +68,16 @@ void enter_virtual_mode (unsigned long new_psr) { + long tmp; + + asm volatile ("movl %0=1f" : "=r"(tmp)); asm volatile ("mov cr.ipsr=%0" :: "r"(new_psr)); - asm volatile ("mov cr.iip=%0" :: "r"(&&target)); + asm volatile ("mov cr.iip=%0" :: "r"(tmp)); asm volatile ("mov cr.ifs=r0"); - asm volatile ("rfi;;"); /* must be last insn in an insn group */ - - target: + asm volatile ("rfi;;"); + asm volatile ("1:"); } - #define MAX_ARGS 32 void @@ -96,7 +97,7 @@ char *kpath, *args; long arglen = 0; - asm volatile ("movl gp=__gp" ::: "memory"); + asm volatile ("movl gp=__gp;;" ::: "memory"); asm volatile ("mov sp=%0" :: "r"(stack) : "memory"); asm volatile ("bsw.1;;"); #ifdef CONFIG_ITANIUM_ASTEP_SPECIFIC diff -urN linux-2.4.0-test9/arch/ia64/config.in linux-2.4.0-test9-lia/arch/ia64/config.in --- linux-2.4.0-test9/arch/ia64/config.in Wed Oct 4 16:53:08 2000 +++ linux-2.4.0-test9-lia/arch/ia64/config.in Wed Oct 4 21:32:56 2000 @@ -27,7 +27,7 @@ "generic CONFIG_IA64_GENERIC \ DIG-compliant CONFIG_IA64_DIG \ HP-simulator CONFIG_IA64_HP_SIM \ - SN1-simulator CONFIG_IA64_SGI_SN1_SIM" generic + SGI-SN1 CONFIG_IA64_SGI_SN1" generic choice 'Kernel page size' \ "4KB CONFIG_IA64_PAGE_SIZE_4KB \ @@ -51,11 +51,30 @@ bool ' Enable SoftSDV hacks' CONFIG_IA64_SOFTSDV_HACKS bool ' Enable AzusA hacks' CONFIG_IA64_AZUSA_HACKS bool ' Enable IA-64 Machine Check Abort' CONFIG_IA64_MCA + bool ' Force socket buffers below 4GB?' CONFIG_SKB_BELOW_4GB + + bool ' ACPI kernel configuration manager (EXPERIMENTAL)' CONFIG_ACPI_KERNEL_CONFIG + if [ "$CONFIG_ACPI_KERNEL_CONFIG" = "y" ]; then + define_bool CONFIG_PM y + define_bool CONFIG_ACPI y + define_bool CONFIG_ACPI_INTERPRETER y + fi fi -if [ "$CONFIG_IA64_SGI_SN1_SIM" = "y" ]; then - define_bool CONFIG_NUMA y - define_bool CONFIG_IA64_SOFTSDV_HACKS y +if [ "$CONFIG_IA64_SGI_SN1" = "y" ]; then + bool ' Enable use of global TLB purge instruction (ptc.g)' CONFIG_ITANIUM_PTCG + bool ' Enable Itanium B-step specific code' CONFIG_ITANIUM_BSTEP_SPECIFIC + if [ "$CONFIG_ITANIUM_BSTEP_SPECIFIC" = "y" ]; then + bool ' Enable Itanium B0-step specific code' CONFIG_ITANIUM_B0_SPECIFIC + fi + bool ' Enable SGI Medusa Simulator Support' CONFIG_IA64_SGI_SN1_SIM n + bool ' Enable SGI hack for version 1.0 syngery bugs' CONFIG_IA64_SGI_SYNERGY_1_0_HACKS n + define_bool CONFIG_DEVFS_DEBUG y + define_bool CONFIG_DEVFS_FS y + define_bool CONFIG_IA64_BRL_EMU y + define_bool CONFIG_IA64_MCA y + define_bool CONFIG_IA64_SGI_IO y + define_bool CONFIG_ITANIUM y fi define_bool CONFIG_KCORE_ELF y # On IA-64, we always want an ELF /proc/kcore. @@ -161,6 +180,10 @@ fi # !HP_SIM +# +# input before char - char/joystick depends on it. As does USB. +# +source drivers/input/Config.in source drivers/char/Config.in #source drivers/misc/Config.in @@ -192,7 +215,6 @@ endmenu source drivers/usb/Config.in -source drivers/input/Config.in fi # !HP_SIM @@ -226,5 +248,6 @@ bool 'Turn on irq debug checks (slow!)' CONFIG_IA64_DEBUG_IRQ bool 'Print possible IA64 hazards to console' CONFIG_IA64_PRINT_HAZARDS bool 'Enable new unwind support' CONFIG_IA64_NEW_UNWIND +bool 'Disable VHPT' CONFIG_DISABLE_VHPT endmenu diff -urN linux-2.4.0-test9/arch/ia64/dig/iosapic.c linux-2.4.0-test9-lia/arch/ia64/dig/iosapic.c --- linux-2.4.0-test9/arch/ia64/dig/iosapic.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/dig/iosapic.c Wed Oct 4 21:33:55 2000 @@ -31,6 +31,10 @@ #include #include +#ifdef CONFIG_ACPI_KERNEL_CONFIG +# include +#endif + #undef DEBUG_IRQ_ROUTING static spinlock_t iosapic_lock = SPIN_LOCK_UNLOCKED; @@ -228,7 +232,7 @@ { struct hw_interrupt_type *irq_type; struct pci_vector_struct *vectors; - int i, irq; + int i, irq, num_pci_vectors; if (irqbase == 0) /* @@ -255,9 +259,14 @@ * Map the PCI Interrupt data into the ACPI IOSAPIC data using * the info that the bootstrap loader passed to us. */ +# ifdef CONFIG_ACPI_KERNEL_CONFIG + acpi_cf_get_pci_vectors(&vectors, &num_pci_vectors); +# else ia64_boot_param.pci_vectors = (__u64) __va(ia64_boot_param.pci_vectors); vectors = (struct pci_vector_struct *) ia64_boot_param.pci_vectors; - for (i = 0; i < ia64_boot_param.num_pci_vectors; i++) { + num_pci_vectors = ia64_boot_param.num_pci_vectors; +# endif + for (i = 0; i < num_pci_vectors; i++) { irq = vectors[i].irq; if (irq < 16) irq = isa_irq_to_vector(irq); @@ -277,11 +286,11 @@ iosapic_trigger(irq) = IO_SAPIC_LEVEL; iosapic_polarity(irq) = IO_SAPIC_POL_LOW; -#ifdef DEBUG_IRQ_ROUTING +# ifdef DEBUG_IRQ_ROUTING printk("PCI: BUS %d Slot %x Pin %x IRQ %02x --> Vector %02x IOSAPIC Pin %d\n", vectors[i].bus, vectors[i].pci_id>>16, vectors[i].pin, vectors[i].irq, irq, iosapic_pin(irq)); -#endif +# endif } #endif /* CONFIG_IA64_SOFTSDV_HACKS */ @@ -377,7 +386,7 @@ unsigned int ver, v; int l, max_pin; - ver = iosapic_version(iosapic->address); + ver = iosapic_version((unsigned long) ioremap(iosapic->address, 0)); max_pin = (ver >> 16) & 0xff; printk("IOSAPIC Version %x.%x: address 0x%lx IRQs 0x%x - 0x%x\n", diff -urN linux-2.4.0-test9/arch/ia64/ia32/Makefile linux-2.4.0-test9-lia/arch/ia64/ia32/Makefile --- linux-2.4.0-test9/arch/ia64/ia32/Makefile Wed Aug 2 18:54:01 2000 +++ linux-2.4.0-test9-lia/arch/ia64/ia32/Makefile Fri Aug 25 00:22:12 2000 @@ -3,9 +3,9 @@ # .S.s: - $(CPP) $(AFLAGS) -o $*.s $< + $(CPP) $(AFLAGS) $(AFLAGS_KERNEL) -o $*.s $< .S.o: - $(CC) $(AFLAGS) -c -o $*.o $< + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -o $*.o $< all: ia32.o diff -urN linux-2.4.0-test9/arch/ia64/ia32/binfmt_elf32.c linux-2.4.0-test9-lia/arch/ia64/ia32/binfmt_elf32.c --- linux-2.4.0-test9/arch/ia64/ia32/binfmt_elf32.c Thu Aug 10 19:56:18 2000 +++ linux-2.4.0-test9-lia/arch/ia64/ia32/binfmt_elf32.c Fri Sep 8 16:21:30 2000 @@ -52,7 +52,7 @@ pte_t * pte; if (page_count(page) != 1) - printk("mem_map disagrees with %p at %08lx\n", page, address); + printk("mem_map disagrees with %p at %08lx\n", (void *) page, address); pgd = pgd_offset(tsk->mm, address); pmd = pmd_alloc(pgd, address); if (!pmd) { @@ -120,6 +120,8 @@ : "r" ((ulong)IA32_FCR_DEFAULT)); __asm__("mov ar.fir = r0"); __asm__("mov ar.fdr = r0"); + __asm__("mov %0=ar.k0 ;;" : "=r" (current->thread.old_iob)); + __asm__("mov ar.k0=%0 ;;" :: "r"(IA32_IOBASE)); /* TSS */ __asm__("mov ar.k1 = %0" : /* no outputs */ diff -urN linux-2.4.0-test9/arch/ia64/ia32/ia32_signal.c linux-2.4.0-test9-lia/arch/ia64/ia32/ia32_signal.c --- linux-2.4.0-test9/arch/ia64/ia32/ia32_signal.c Thu Jun 22 07:09:44 2000 +++ linux-2.4.0-test9-lia/arch/ia64/ia32/ia32_signal.c Fri Sep 8 16:21:40 2000 @@ -278,7 +278,7 @@ err |= setup_sigcontext_ia32(&frame->sc, &frame->fpstate, regs, set->sig[0]); - if (_NSIG_WORDS > 1) { + if (_IA32_NSIG_WORDS > 1) { err |= __copy_to_user(frame->extramask, &set->sig[1], sizeof(frame->extramask)); } @@ -310,7 +310,7 @@ #if 0 printk("SIG deliver (%s:%d): sig=%d sp=%p pc=%lx ra=%x\n", - current->comm, current->pid, sig, frame, regs->cr_iip, frame->pretcode); + current->comm, current->pid, sig, (void *) frame, regs->cr_iip, frame->pretcode); #endif return 1; @@ -380,7 +380,7 @@ #if 0 printk("SIG deliver (%s:%d): sp=%p pc=%lx ra=%x\n", - current->comm, current->pid, frame, regs->cr_iip, frame->pretcode); + current->comm, current->pid, (void *) frame, regs->cr_iip, frame->pretcode); #endif return 1; diff -urN linux-2.4.0-test9/arch/ia64/ia32/ia32_support.c linux-2.4.0-test9-lia/arch/ia64/ia32/ia32_support.c --- linux-2.4.0-test9/arch/ia64/ia32/ia32_support.c Thu Jun 22 07:09:44 2000 +++ linux-2.4.0-test9-lia/arch/ia64/ia32/ia32_support.c Fri Sep 8 16:21:50 2000 @@ -42,6 +42,7 @@ thread->csd = csd; thread->ssd = ssd; thread->tssd = tssd; + asm ("mov ar.k0=%0 ;;" :: "r"(thread->old_iob)); } void @@ -68,6 +69,8 @@ "mov ar.k1=%7" :: "r"(eflag), "r"(fsr), "r"(fcr), "r"(fir), "r"(fdr), "r"(csd), "r"(ssd), "r"(tssd)); + asm ("mov %0=ar.k0 ;;" : "=r"(thread->old_iob)); + asm ("mov ar.k0=%0 ;;" :: "r"(IA32_IOBASE)); } /* diff -urN linux-2.4.0-test9/arch/ia64/ia32/sys_ia32.c linux-2.4.0-test9-lia/arch/ia64/ia32/sys_ia32.c --- linux-2.4.0-test9/arch/ia64/ia32/sys_ia32.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/ia32/sys_ia32.c Fri Sep 8 16:22:05 2000 @@ -75,11 +75,11 @@ n = 0; do { err = get_user(addr, (int *)A(arg)); - if (IS_ERR(err)) + if (err) return err; if (ap) { /* no access_ok needed, we allocated */ err = __put_user((char *)A(addr), ap++); - if (IS_ERR(err)) + if (err) return err; } arg += sizeof(unsigned int); @@ -102,13 +102,14 @@ { struct pt_regs *regs = (struct pt_regs *)&stack; char **av, **ae; - int na, ne, r, len; + int na, ne, len; + long r; na = nargs(argv, NULL); - if (IS_ERR(na)) + if (na < 0) return(na); ne = nargs(envp, NULL); - if (IS_ERR(ne)) + if (ne < 0) return(ne); len = (na + ne + 2) * sizeof(*av); /* @@ -130,19 +131,19 @@ return (long)av; ae = av + na + 1; r = __put_user(0, (av + na)); - if (IS_ERR(r)) + if (r) goto out; r = __put_user(0, (ae + ne)); - if (IS_ERR(r)) + if (r) goto out; r = nargs(argv, av); - if (IS_ERR(r)) + if (r < 0) goto out; r = nargs(envp, ae); - if (IS_ERR(r)) + if (r < 0) goto out; r = sys_execve(filename, av, ae, regs); - if (IS_ERR(r)) + if (r < 0) out: sys_munmap((unsigned long) av, len); return(r); @@ -297,7 +298,7 @@ error = do_mmap(file, addr, len, prot, flags, poff); up(¤t->mm->mmap_sem); - if (!IS_ERR(error)) + if (!IS_ERR((void *) error)) error += offset - poff; } else { down(¤t->mm->mmap_sem); @@ -788,7 +789,8 @@ } static int -fillonedir32 (void * __buf, const char * name, int namlen, off_t offset, ino_t ino) +fillonedir32 (void * __buf, const char * name, int namlen, off_t offset, ino_t ino, + unsigned int d_type) { struct readdir32_callback * buf = (struct readdir32_callback *) __buf; struct old_linux32_dirent * dirent; @@ -2543,6 +2545,78 @@ printk("IA32 syscall #%d issued, maybe we should implement it\n", (int)regs->r1); return(sys_ni_syscall()); +} + +/* + * The IA64 maps 4 I/O ports for each 4K page + */ +#define IOLEN ((65536 / 4) * 4096) + +asmlinkage long +sys_iopl (int level, long arg1, long arg2, long arg3) +{ + extern unsigned long ia64_iobase; + int fd; + struct file * file; + unsigned int old; + unsigned long addr; + mm_segment_t old_fs = get_fs (); + + if (level != 3) + return(-EINVAL); + /* Trying to gain more privileges? */ + __asm__ __volatile__("mov %0=ar.eflag ;;" : "=r"(old)); + if (level > ((old >> 12) & 3)) { + if (!capable(CAP_SYS_RAWIO)) + return -EPERM; + } + set_fs(KERNEL_DS); + fd = sys_open("/dev/mem", O_SYNC | O_RDWR, 0); + set_fs(old_fs); + if (fd < 0) + return fd; + file = fget(fd); + if (file == NULL) { + sys_close(fd); + return(-EFAULT); + } + + down(¤t->mm->mmap_sem); + lock_kernel(); + + addr = do_mmap_pgoff(file, IA32_IOBASE, + IOLEN, PROT_READ|PROT_WRITE, MAP_SHARED, + (ia64_iobase & ~PAGE_OFFSET) >> PAGE_SHIFT); + + unlock_kernel(); + up(¤t->mm->mmap_sem); + + if (addr >= 0) { + __asm__ __volatile__("mov ar.k0=%0 ;;" :: "r"(addr)); + old = (old & ~0x3000) | (level << 12); + __asm__ __volatile__("mov ar.eflag=%0 ;;" :: "r"(old)); + } + + fput(file); + sys_close(fd); + return 0; +} + +asmlinkage long +sys_ioperm (unsigned long from, unsigned long num, int on) +{ + + /* + * Since IA64 doesn't have permission bits we'd have to go to + * a lot of trouble to simulate them in software. There's + * no point, only trusted programs can make this call so we'll + * just turn it into an iopl call and let the process have + * access to all I/O ports. + * + * XXX proper ioperm() support should be emulated by + * manipulating the page protections... + */ + return(sys_iopl(3, 0, 0, 0)); } #ifdef NOTYET /* UNTESTED FOR IA64 FROM HERE DOWN */ diff -urN linux-2.4.0-test9/arch/ia64/kernel/Makefile linux-2.4.0-test9-lia/arch/ia64/kernel/Makefile --- linux-2.4.0-test9/arch/ia64/kernel/Makefile Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/Makefile Wed Oct 4 21:34:23 2000 @@ -3,9 +3,9 @@ # .S.s: - $(CPP) $(AFLAGS) -o $*.s $< + $(CPP) $(AFLAGS) $(AFLAGS_KERNEL) -o $*.s $< .S.o: - $(CC) $(AFLAGS) -c -o $*.o $< + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -o $*.o $< all: kernel.o head.o init_task.o @@ -16,7 +16,7 @@ obj-$(CONFIG_IA64_GENERIC) += machvec.o obj-$(CONFIG_IA64_PALINFO) += palinfo.o obj-$(CONFIG_PCI) += pci.o -obj-$(CONFIG_SMP) += smp.o +obj-$(CONFIG_SMP) += smp.o smpboot.o obj-$(CONFIG_IA64_MCA) += mca.o mca_asm.o obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o diff -urN linux-2.4.0-test9/arch/ia64/kernel/acpi.c linux-2.4.0-test9-lia/arch/ia64/kernel/acpi.c --- linux-2.4.0-test9/arch/ia64/kernel/acpi.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/acpi.c Wed Oct 4 21:34:32 2000 @@ -24,18 +24,17 @@ #include #include #include +#ifdef CONFIG_ACPI_KERNEL_CONFIG +# include +#endif #undef ACPI_DEBUG /* Guess what this does? */ -#ifdef CONFIG_SMP -extern struct smp_boot_data smp; -#endif - /* These are ugly but will be reclaimed by the kernel */ -int __initdata available_cpus = 0; -int __initdata total_cpus = 0; +int __initdata available_cpus; +int __initdata total_cpus; -void (*pm_idle) (void); +void (*pm_idle)(void); /* * Identify usable CPU's and remember them for SMP bringup later. @@ -60,18 +59,16 @@ add = 0; } +#ifdef CONFIG_SMP + smp_boot_data.cpu_phys_id[total_cpus] = -1; +#endif if (add) { printk("Available.\n"); available_cpus++; #ifdef CONFIG_SMP -# if LARGE_CPU_ID_OK - smp.cpu_map[total_cpus] = (lsapic->id << 8) | lsapic->eid; -# else - smp.cpu_map[total_cpus] = lsapic->id; -# endif -#endif + smp_boot_data.cpu_phys_id[total_cpus] = (lsapic->id << 8) | lsapic->eid; +#endif /* CONFIG_SMP */ } - total_cpus++; } @@ -139,13 +136,12 @@ break; } -#if 1/*def ACPI_DEBUG*/ +# ifdef ACPI_DEBUG printk("Legacy ISA IRQ %x -> IA64 Vector %x IOSAPIC Pin %x Active %s %s Trigger\n", legacy->isa_irq, vector, iosapic_pin(vector), ((iosapic_polarity(vector) == IO_SAPIC_POL_LOW) ? "Low" : "High"), ((iosapic_trigger(vector) == IO_SAPIC_LEVEL) ? "Level" : "Edge")); -#endif /* ACPI_DEBUG */ - +# endif /* ACPI_DEBUG */ #endif /* CONFIG_IA64_IRQ_ACPI */ } @@ -172,10 +168,6 @@ /* Base address of IPI Message Block */ ipi_base_addr = (unsigned long) ioremap(msapic->interrupt_block, 0); -#ifdef CONFIG_SMP - memset(&smp, -1, sizeof(smp)); -#endif - p = (char *) (msapic + 1); end = p + (msapic->header.length - sizeof(acpi_sapic_t)); @@ -248,6 +240,10 @@ printk("ACPI: %.6s %.8s %d.%d\n", rsdt->header.oem_id, rsdt->header.oem_table_id, rsdt->header.oem_revision >> 16, rsdt->header.oem_revision & 0xffff); +#ifdef CONFIG_ACPI_KERNEL_CONFIG + acpi_cf_init(rsdp); +#endif + tables = (rsdt->header.length - sizeof(acpi_desc_table_hdr_t)) / 8; for (i = 0; i < tables; i++) { hdrp = (acpi_desc_table_hdr_t *) __va(rsdt->entry_ptrs[i]); @@ -259,12 +255,16 @@ acpi_parse_msapic((acpi_sapic_t *) hdrp); } +#ifdef CONFIG_ACPI_KERNEL_CONFIG + acpi_cf_terminate(); +#endif + #ifdef CONFIG_SMP if (available_cpus == 0) { printk("ACPI: Found 0 CPUS; assuming 1\n"); available_cpus = 1; /* We've got at least one of these, no? */ } - smp.cpu_count = available_cpus; + smp_boot_data.cpu_count = available_cpus; #endif return 1; } @@ -278,7 +278,7 @@ #else # if defined (CONFIG_IA64_HP_SIM) return "hpsim"; -# elif defined (CONFIG_IA64_SGI_SN1_SIM) +# elif defined (CONFIG_IA64_SGI_SN1) return "sn1"; # elif defined (CONFIG_IA64_DIG) return "dig"; @@ -286,4 +286,4 @@ # error Unknown platform. Fix acpi.c. # endif #endif -} +} diff -urN linux-2.4.0-test9/arch/ia64/kernel/efi.c linux-2.4.0-test9-lia/arch/ia64/kernel/efi.c --- linux-2.4.0-test9/arch/ia64/kernel/efi.c Wed Oct 4 16:53:08 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/efi.c Wed Oct 4 21:34:44 2000 @@ -216,12 +216,41 @@ md->phys_addr); continue; } - mask = ~((1 << _PAGE_SIZE_4M)-1); /* XXX should be dynamic? */ + /* + * We must use the same page size as the one used + * for the kernel region when we map the PAL code. + * This way, we avoid overlapping TRs if code is + * executed nearby. The Alt I-TLB installs 256MB + * page sizes as defined for region 7. + * + * XXX Fixme: should be dynamic here (for page size) + */ + mask = ~((1 << _PAGE_SIZE_256M)-1); vaddr = PAGE_OFFSET + md->phys_addr; - printk(__FUNCTION__": mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n", - md->phys_addr, md->phys_addr + (md->num_pages << 12), - vaddr & mask, (vaddr & mask) + 4*1024*1024); + /* + * We must check that the PAL mapping won't overlap + * with the kernel mapping on ITR1. + * + * PAL code is guaranteed to be aligned on a power of 2 + * between 4k and 256KB. + * Also from the documentation, it seems like there is an + * implicit guarantee that you will need only ONE ITR to + * map it. This implies that the PAL code is always aligned + * on its size, i.e., the closest matching page size supported + * by the TLB. Therefore PAL code is guaranteed never to cross + * a 256MB unless it is bigger than 256MB (very unlikely!). + * So for now the following test is enough to determine whether + * or not we need a dedicated ITR for the PAL code. + */ + if ((vaddr & mask) == (PAGE_OFFSET & mask)) { + printk(__FUNCTION__ " : no need to install ITR for PAL Code\n"); + continue; + } + + printk("CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n", + smp_processor_id(), md->phys_addr, md->phys_addr + (md->num_pages << 12), + vaddr & mask, (vaddr & mask) + 256*1024*1024); /* * Cannot write to CRx with PSR.ic=1 @@ -232,12 +261,11 @@ * ITR0/DTR0: used for kernel code/data * ITR1/DTR1: used by HP simulator * ITR2/DTR2: map PAL code - * ITR3/DTR3: used to map PAL calls buffer */ ia64_itr(0x1, 2, vaddr & mask, pte_val(mk_pte_phys(md->phys_addr, __pgprot(__DIRTY_BITS|_PAGE_PL_0|_PAGE_AR_RX))), - _PAGE_SIZE_4M); + _PAGE_SIZE_256M); local_irq_restore(flags); ia64_srlz_i (); } @@ -348,6 +376,16 @@ #endif efi_map_pal_code(); + +#ifndef CONFIG_IA64_SOFTSDV_HACKS + /* + * (Some) SoftSDVs seem to have a problem with this call. + * Since it's mostly a performance optimization, just don't do + * it for now... --davidm 99/12/6 + */ + efi_enter_virtual_mode(); +#endif + } void diff -urN linux-2.4.0-test9/arch/ia64/kernel/entry.S linux-2.4.0-test9-lia/arch/ia64/kernel/entry.S --- linux-2.4.0-test9/arch/ia64/kernel/entry.S Fri Sep 8 14:34:53 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/entry.S Wed Oct 4 23:08:09 2000 @@ -120,6 +120,9 @@ mov r13=in0 // set "current" pointer ;; DO_LOAD_SWITCH_STACK( ) +#ifdef CONFIG_SMP + sync.i // ensure "fc"s done by this CPU are visible on other CPUs +#endif br.ret.sptk.few rp END(ia64_switch_to) @@ -1088,7 +1091,7 @@ data8 sys_setpriority data8 sys_statfs data8 sys_fstatfs - data8 sys_ioperm // 1105 + data8 ia64_ni_syscall data8 sys_semget data8 sys_semop data8 sys_semctl diff -urN linux-2.4.0-test9/arch/ia64/kernel/fw-emu.c linux-2.4.0-test9-lia/arch/ia64/kernel/fw-emu.c --- linux-2.4.0-test9/arch/ia64/kernel/fw-emu.c Wed Aug 2 18:54:01 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/fw-emu.c Fri Aug 25 00:30:24 2000 @@ -20,7 +20,7 @@ #define MB (1024*1024UL) -#define NUM_MEM_DESCS 3 +#define NUM_MEM_DESCS 2 static char fw_mem[( sizeof(efi_system_table_t) + sizeof(efi_runtime_services_t) @@ -453,6 +453,12 @@ md->num_pages = (1*MB) >> 12; /* 1MB (in 4KB pages) */ md->attribute = EFI_MEMORY_WB; +#if 0 + /* + * XXX bootmem is broken for now... (remember to NUM_MEM_DESCS + * if you re-enable this!) + */ + /* descriptor for high memory (>4GB): */ md = &efi_memmap[2]; md->type = EFI_CONVENTIONAL_MEMORY; @@ -461,6 +467,7 @@ md->virt_addr = 0; md->num_pages = (32*MB) >> 12; /* 32MB (in 4KB pages) */ md->attribute = EFI_MEMORY_WB; +#endif bp = id(ZERO_PAGE_ADDR); bp->efi_systab = __pa(&fw_mem); diff -urN linux-2.4.0-test9/arch/ia64/kernel/head.S linux-2.4.0-test9-lia/arch/ia64/kernel/head.S --- linux-2.4.0-test9/arch/ia64/kernel/head.S Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/head.S Fri Aug 25 00:31:03 2000 @@ -111,7 +111,7 @@ * be implemented more efficiently (for example, __switch_to() * always sets the psr.dfh bit of the task it is switching to). */ - addl r12=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2 + addl r12=IA64_STK_OFFSET-IA64_PT_REGS_SIZE-16,r2 addl r2=IA64_RBS_OFFSET,r2 // initialize the RSE mov ar.rsc=r0 // place RSE in enforced lazy mode ;; diff -urN linux-2.4.0-test9/arch/ia64/kernel/ia64_ksyms.c linux-2.4.0-test9-lia/arch/ia64/kernel/ia64_ksyms.c --- linux-2.4.0-test9/arch/ia64/kernel/ia64_ksyms.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/ia64_ksyms.c Wed Oct 4 21:35:21 2000 @@ -10,6 +10,7 @@ EXPORT_SYMBOL(memcmp); EXPORT_SYMBOL_NOVERS(memcpy); EXPORT_SYMBOL(memmove); +EXPORT_SYMBOL(memscan); EXPORT_SYMBOL(strcat); EXPORT_SYMBOL(strchr); EXPORT_SYMBOL(strcmp); @@ -18,6 +19,8 @@ EXPORT_SYMBOL(strncat); EXPORT_SYMBOL(strncmp); EXPORT_SYMBOL(strncpy); +EXPORT_SYMBOL(strnlen); +EXPORT_SYMBOL(strrchr); EXPORT_SYMBOL(strstr); EXPORT_SYMBOL(strtok); @@ -27,24 +30,58 @@ #include #include +/* not coded yet?? EXPORT_SYMBOL(csum_ipv6_magic); */ EXPORT_SYMBOL(csum_partial_copy_nocheck); +EXPORT_SYMBOL(csum_tcpudp_magic); +EXPORT_SYMBOL(ip_compute_csum); +EXPORT_SYMBOL(ip_fast_csum); + +#include +EXPORT_SYMBOL(__ia64_memcpy_fromio); +EXPORT_SYMBOL(__ia64_memcpy_toio); +EXPORT_SYMBOL(__ia64_memset_c_io); #include EXPORT_SYMBOL(enable_irq); EXPORT_SYMBOL(disable_irq); +EXPORT_SYMBOL(disable_irq_nosync); + +#include +EXPORT_SYMBOL(clear_page); + +#include +EXPORT_SYMBOL(pci_dma_sync_sg); +EXPORT_SYMBOL(pci_dma_sync_single); +EXPORT_SYMBOL(pci_map_sg); +EXPORT_SYMBOL(pci_map_single); +EXPORT_SYMBOL(pci_unmap_sg); +EXPORT_SYMBOL(pci_unmap_single); #include EXPORT_SYMBOL(cpu_data); EXPORT_SYMBOL(kernel_thread); +#include +#ifdef CONFIG_IA64_DEBUG_IRQ +EXPORT_SYMBOL(last_cli_ip); +#endif + #ifdef CONFIG_SMP + +#include #include EXPORT_SYMBOL(synchronize_irq); +#include +EXPORT_SYMBOL(smp_call_function); + +#include +EXPORT_SYMBOL(smp_num_cpus); + #include EXPORT_SYMBOL(kernel_flag); -#include +/* #include */ EXPORT_SYMBOL(__global_sti); EXPORT_SYMBOL(__global_cli); EXPORT_SYMBOL(__global_save_flags); @@ -54,17 +91,29 @@ #include EXPORT_SYMBOL(__copy_user); +EXPORT_SYMBOL(__do_clear_user); #include EXPORT_SYMBOL(__ia64_syscall); /* from arch/ia64/lib */ +extern void __divsi3(void); +extern void __udivsi3(void); +extern void __modsi3(void); +extern void __umodsi3(void); extern void __divdi3(void); extern void __udivdi3(void); extern void __moddi3(void); extern void __umoddi3(void); +EXPORT_SYMBOL_NOVERS(__divsi3); +EXPORT_SYMBOL_NOVERS(__udivsi3); +EXPORT_SYMBOL_NOVERS(__modsi3); +EXPORT_SYMBOL_NOVERS(__umodsi3); EXPORT_SYMBOL_NOVERS(__divdi3); EXPORT_SYMBOL_NOVERS(__udivdi3); EXPORT_SYMBOL_NOVERS(__moddi3); EXPORT_SYMBOL_NOVERS(__umoddi3); + +extern unsigned long ia64_iobase; +EXPORT_SYMBOL(ia64_iobase); diff -urN linux-2.4.0-test9/arch/ia64/kernel/irq.c linux-2.4.0-test9-lia/arch/ia64/kernel/irq.c --- linux-2.4.0-test9/arch/ia64/kernel/irq.c Thu Aug 10 19:56:18 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/irq.c Fri Sep 8 16:23:06 2000 @@ -536,8 +536,7 @@ desc->depth--; break; case 0: - printk("enable_irq() unbalanced from %p\n", - __builtin_return_address(0)); + printk("enable_irq() unbalanced from %p\n", (void *) __builtin_return_address(0)); } spin_unlock_irqrestore(&desc->lock, flags); } diff -urN linux-2.4.0-test9/arch/ia64/kernel/irq_ia64.c linux-2.4.0-test9-lia/arch/ia64/kernel/irq_ia64.c --- linux-2.4.0-test9/arch/ia64/kernel/irq_ia64.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/irq_ia64.c Wed Oct 4 21:35:32 2000 @@ -39,7 +39,8 @@ spinlock_t ivr_read_lock; #endif -unsigned long ipi_base_addr = IPI_DEFAULT_BASE_ADDR; /* default base addr of IPI table */ +/* default base addr of IPI table */ +unsigned long ipi_base_addr = (__IA64_UNCACHED_OFFSET | IPI_DEFAULT_BASE_ADDR); /* * Legacy IRQ to IA-64 vector translation table. Any vector not in @@ -220,13 +221,23 @@ { unsigned long ipi_addr; unsigned long ipi_data; + unsigned long phys_cpu_id; #ifdef CONFIG_ITANIUM_A1_SPECIFIC unsigned long flags; #endif -# define EID 0 + +#ifdef CONFIG_SMP + phys_cpu_id = cpu_physical_id(cpu); +#else + phys_cpu_id = (ia64_get_lid() >> 16) & 0xffff; +#endif + + /* + * cpu number is in 8bit ID and 8bit EID + */ ipi_data = (delivery_mode << 8) | (vector & 0xff); - ipi_addr = ipi_base_addr | ((cpu << 8 | EID) << 4) | ((redirect & 1) << 3); + ipi_addr = ipi_base_addr | (phys_cpu_id << 4) | ((redirect & 1) << 3); #ifdef CONFIG_ITANIUM_A1_SPECIFIC spin_lock_irqsave(&ivr_read_lock, flags); diff -urN linux-2.4.0-test9/arch/ia64/kernel/ivt.S linux-2.4.0-test9-lia/arch/ia64/kernel/ivt.S --- linux-2.4.0-test9/arch/ia64/kernel/ivt.S Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/ivt.S Wed Oct 4 21:36:12 2000 @@ -4,6 +4,8 @@ * Copyright (C) 1998-2000 Hewlett-Packard Co * Copyright (C) 1998, 1999 Stephane Eranian * Copyright (C) 1998-2000 David Mosberger + * + * 00/08/23 Asit Mallick TLB handling for SMP */ /* * This file defines the interrupt vector table used by the CPU. @@ -134,32 +136,51 @@ (p7) cmp.eq p6,p7=r17,r0 // was L1 entry NULL? dep r17=r18,r17,3,(PAGE_SHIFT-3) // compute address of L2 page table entry ;; -(p7) ld8 r17=[r17] // fetch the L2 entry (may be 0) +(p7) ld8 r20=[r17] // fetch the L2 entry (may be 0) shr.u r19=r16,PAGE_SHIFT // shift L3 index into position ;; -(p7) cmp.eq.or.andcm p6,p7=r17,r0 // was L2 entry NULL? - dep r17=r19,r17,3,(PAGE_SHIFT-3) // compute address of L3 page table entry +(p7) cmp.eq.or.andcm p6,p7=r20,r0 // was L2 entry NULL? + dep r21=r19,r20,3,(PAGE_SHIFT-3) // compute address of L3 page table entry ;; -(p7) ld8 r18=[r17] // read the L3 PTE +(p7) ld8 r18=[r21] // read the L3 PTE mov r19=cr.isr // cr.isr bit 0 tells us if this is an insn miss ;; (p7) tbit.z p6,p7=r18,0 // page present bit cleared? - mov r21=cr.iha // get the VHPT address that caused the TLB miss + mov r22=cr.iha // get the VHPT address that caused the TLB miss ;; // avoid RAW on p7 (p7) tbit.nz.unc p10,p11=r19,32 // is it an instruction TLB miss? - dep r17=0,r17,0,PAGE_SHIFT // clear low bits to get page address + dep r23=0,r20,0,PAGE_SHIFT // clear low bits to get page address ;; (p10) itc.i r18 // insert the instruction TLB entry (p11) itc.d r18 // insert the data TLB entry (p6) br.spnt.few page_fault // handle bad address/page not present (page fault) - mov cr.ifa=r21 + mov cr.ifa=r22 // Now compute and insert the TLB entry for the virtual page table. // We never execute in a page table page so there is no need to set // the exception deferral bit. - adds r16=__DIRTY_BITS_NO_ED|_PAGE_PL_0|_PAGE_AR_RW,r17 + adds r24=__DIRTY_BITS_NO_ED|_PAGE_PL_0|_PAGE_AR_RW,r23 + ;; +(p7) itc.d r24 + ;; +#ifdef CONFIG_SMP + // + // Re-check L2 and L3 pagetable. If they changed, we may have received + // a ptc.g between reading the pagetable and the "itc". If so, + // flush the entry we inserted and retry. + // + ld8 r25=[r21] // read L3 PTE again + ld8 r26=[r17] // read L2 entry again + ;; + cmp.ne p6,p7=r26,r20 // did L2 entry change + mov r27=PAGE_SHIFT<<2 + ;; +(p6) ptc.l r22,r27 // purge PTE page translation +(p7) cmp.ne.or.andcm p6,p7=r25,r18 // did L3 PTE change ;; -(p7) itc.d r16 +(p6) ptc.l r16,r27 // purge translation +#endif + mov pr=r31,-1 // restore predicate registers rfi @@ -175,22 +196,32 @@ * The speculative access will fail if there is no TLB entry * for the L3 page table page we're trying to access. */ - mov r16=cr.iha // get virtual address of L3 PTE + mov r16=cr.ifa // get virtual address + mov r19=cr.iha // get virtual address of L3 PTE ;; - ld8.s r16=[r16] // try to read L3 PTE + ld8.s r17=[r19] // try to read L3 PTE mov r31=pr // save predicates ;; - tnat.nz p6,p0=r16 // did read succeed? + tnat.nz p6,p0=r17 // did read succeed? (p6) br.cond.spnt.many 1f ;; - itc.i r16 + itc.i r17 + ;; +#ifdef CONFIG_SMP + ld8.s r18=[r19] // try to read L3 PTE again and see if same + mov r20=PAGE_SHIFT<<2 // setup page size for purge ;; + cmp.eq p6,p7=r17,r18 + ;; +(p7) ptc.l r16,r20 +#endif mov pr=r31,-1 rfi -1: mov r16=cr.ifa // get address that caused the TLB miss - ;; - rsm psr.dt // use physical addressing for data +#ifdef CONFIG_DISABLE_VHPT +itlb_fault: +#endif +1: rsm psr.dt // use physical addressing for data mov r19=ar.k7 // get page table base address shl r21=r16,3 // shift bit 60 into sign bit shr.u r17=r16,61 // get the region number into r17 @@ -228,6 +259,15 @@ (p7) itc.i r18 // insert the instruction TLB entry (p6) br.spnt.few page_fault // handle bad address/page not present (page fault) ;; +#ifdef CONFIG_SMP + ld8 r19=[r17] // re-read the PTE and check if same + ;; + cmp.eq p6,p7=r18,r19 + mov r20=PAGE_SHIFT<<2 + ;; +(p7) ptc.l r16,r20 // PTE changed purge translation +#endif + mov pr=r31,-1 // restore predicate registers rfi @@ -243,22 +283,32 @@ * The speculative access will fail if there is no TLB entry * for the L3 page table page we're trying to access. */ - mov r16=cr.iha // get virtual address of L3 PTE + mov r16=cr.ifa // get virtual address + mov r19=cr.iha // get virtual address of L3 PTE ;; - ld8.s r16=[r16] // try to read L3 PTE + ld8.s r17=[r19] // try to read L3 PTE mov r31=pr // save predicates ;; - tnat.nz p6,p0=r16 // did read succeed? + tnat.nz p6,p0=r17 // did read succeed? (p6) br.cond.spnt.many 1f ;; - itc.d r16 + itc.d r17 + ;; +#ifdef CONFIG_SMP + ld8.s r18=[r19] // try to read L3 PTE again and see if same + mov r20=PAGE_SHIFT<<2 // setup page size for purge ;; + cmp.eq p6,p7=r17,r18 + ;; +(p7) ptc.l r16,r20 +#endif mov pr=r31,-1 rfi -1: mov r16=cr.ifa // get address that caused the TLB miss - ;; - rsm psr.dt // use physical addressing for data +#ifdef CONFIG_DISABLE_VHPT +dtlb_fault: +#endif +1: rsm psr.dt // use physical addressing for data mov r19=ar.k7 // get page table base address shl r21=r16,3 // shift bit 60 into sign bit shr.u r17=r16,61 // get the region number into r17 @@ -296,6 +346,14 @@ (p7) itc.d r18 // insert the instruction TLB entry (p6) br.spnt.few page_fault // handle bad address/page not present (page fault) ;; +#ifdef CONFIG_SMP + ld8 r19=[r17] // re-read the PTE and check if same + ;; + cmp.eq p6,p7=r18,r19 + mov r20=PAGE_SHIFT<<2 + ;; +(p7) ptc.l r16,r20 // PTE changed purge translation +#endif mov pr=r31,-1 // restore predicate registers rfi @@ -303,6 +361,16 @@ ///////////////////////////////////////////////////////////////////////////////////////// // 0x0c00 Entry 3 (size 64 bundles) Alt ITLB (19) mov r16=cr.ifa // get address that caused the TLB miss +#ifdef CONFIG_DISABLE_VHPT + mov r31=pr + ;; + shr.u r21=r16,61 // get the region number into r21 + ;; + cmp.gt p6,p0=6,r21 // user mode +(p6) br.cond.dptk.many itlb_fault + ;; + mov pr=r31,-1 +#endif movl r17=__DIRTY_BITS|_PAGE_PL_0|_PAGE_AR_RX ;; shr.u r18=r16,57 // move address bit 61 to bit 4 @@ -323,8 +391,14 @@ movl r17=__DIRTY_BITS|_PAGE_PL_0|_PAGE_AR_RW mov r20=cr.isr mov r21=cr.ipsr - mov r19=pr + mov r31=pr ;; +#ifdef CONFIG_DISABLE_VHPT + shr.u r22=r16,61 // get the region number into r21 + ;; + cmp.gt p8,p0=6,r22 // user mode +(p8) br.cond.dptk.many dtlb_fault +#endif tbit.nz p6,p7=r20,IA64_ISR_SP_BIT // is speculation bit on? shr.u r18=r16,57 // move address bit 61 to bit 4 dep r16=0,r16,IA64_MAX_PHYS_BITS,(64-IA64_MAX_PHYS_BITS) // clear ed & reserved bits @@ -337,7 +411,7 @@ (p6) mov cr.ipsr=r21 ;; (p7) itc.d r16 // insert the TLB entry - mov pr=r19,-1 + mov pr=r31,-1 rfi ;; @@ -452,6 +526,7 @@ // a nested TLB miss hit where we look up the physical address of the L3 PTE // and then continue at label 1 below. // +#ifndef CONFIG_SMP mov r16=cr.ifa // get the address that caused the fault movl r30=1f // load continuation point in case of nested fault ;; @@ -465,6 +540,36 @@ ;; st8 [r17]=r18 // store back updated PTE itc.d r18 // install updated PTE +#else + mov r16=cr.ifa // get the address that caused the fault + movl r30=1f // load continuation point in case of nested fault + ;; + thash r17=r16 // compute virtual address of L3 PTE + mov r28=ar.ccv // save ar.ccv + mov r29=b0 // save b0 in case of nested fault + mov r27=pr + ;; +1: ld8 r18=[r17] + ;; // avoid RAW on r18 + mov ar.ccv=r18 // set compare value for cmpxchg + or r25=_PAGE_D,r18 // set the dirty bit + ;; + cmpxchg8.acq r26=[r17],r25,ar.ccv + mov r24=PAGE_SHIFT<<2 + ;; + cmp.eq p6,p7=r26,r18 + ;; +(p6) itc.d r25 // install updated PTE + ;; + ld8 r18=[r17] // read PTE again + ;; + cmp.eq p6,p7=r18,r25 // is it same as the newly installed + ;; +(p7) ptc.l r16,r24 + mov b0=r29 // restore b0 + mov ar.ccv=r28 + mov pr=r27,-1 +#endif rfi .align 1024 @@ -486,6 +591,8 @@ (p6) mov r16=r18 // if so, use cr.iip instead of cr.ifa mov pr=r31,-1 #endif /* CONFIG_ITANIUM */ + +#ifndef CONFIG_SMP movl r30=1f // load continuation point in case of nested fault ;; thash r17=r16 // compute virtual address of L3 PTE @@ -515,12 +622,58 @@ ;; st8 [r17]=r18 // store back updated PTE itc.i r18 // install updated PTE +#else + movl r30=1f // load continuation point in case of nested fault + ;; + thash r17=r16 // compute virtual address of L3 PTE + mov r28=ar.ccv // save ar.ccv + mov r29=b0 // save b0 in case of nested fault) + mov r27=pr + ;; +1: ld8 r18=[r17] +#if defined(CONFIG_IA32_SUPPORT) && \ + (defined(CONFIG_ITANIUM_ASTEP_SPECIFIC) || defined(CONFIG_ITANIUM_B0_SPECIFIC)) + // + // Erratum 85 (Access bit fault could be reported before page not present fault) + // If the PTE is indicates the page is not present, then just turn this into a + // page fault. + // + ;; + tbit.nz p6,p0=r18,0 // page present bit set? +(p6) br.cond.sptk 1f + ;; // avoid WAW on p6 + mov pr=r27,-1 + br.cond.sptk page_fault // page wasn't present +1: +#else + ;; // avoid RAW on r18 +#endif + mov ar.ccv=r18 // set compare value for cmpxchg + or r25=_PAGE_A,r18 // set the accessed bit + ;; + cmpxchg8.acq r26=[r17],r25,ar.ccv + mov r24=PAGE_SHIFT<<2 + ;; + cmp.eq p6,p7=r26,r18 + ;; +(p6) itc.i r25 // install updated PTE + ;; + ld8 r18=[r17] // read PTE again + ;; + cmp.eq p6,p7=r18,r25 // is it same as the newly installed + ;; +(p7) ptc.l r16,r24 + mov b0=r29 // restore b0 + mov ar.ccv=r28 + mov pr=r27,-1 +#endif rfi .align 1024 ///////////////////////////////////////////////////////////////////////////////////////// // 0x2800 Entry 10 (size 64 bundles) Data Access-bit (15,55) // Like Entry 8, except for data access +#ifndef CONFIG_SMP mov r16=cr.ifa // get the address that caused the fault movl r30=1f // load continuation point in case of nested fault ;; @@ -534,6 +687,36 @@ ;; st8 [r17]=r18 // store back updated PTE itc.d r18 // install updated PTE +#else + mov r16=cr.ifa // get the address that caused the fault + movl r30=1f // load continuation point in case of nested fault + ;; + thash r17=r16 // compute virtual address of L3 PTE + mov r28=ar.ccv // save ar.ccv + mov r29=b0 // save b0 in case of nested fault + mov r27=pr + ;; +1: ld8 r18=[r17] + ;; // avoid RAW on r18 + mov ar.ccv=r18 // set compare value for cmpxchg + or r25=_PAGE_A,r18 // set the dirty bit + ;; + cmpxchg8.acq r26=[r17],r25,ar.ccv + mov r24=PAGE_SHIFT<<2 + ;; + cmp.eq p6,p7=r26,r18 + ;; +(p6) itc.d r25 // install updated PTE + ;; + ld8 r18=[r17] // read PTE again + ;; + cmp.eq p6,p7=r18,r25 // is it same as the newly installed + ;; +(p7) ptc.l r16,r24 + mov b0=r29 // restore b0 + mov ar.ccv=r28 + mov pr=r27,-1 +#endif rfi .align 1024 diff -urN linux-2.4.0-test9/arch/ia64/kernel/mca.c linux-2.4.0-test9-lia/arch/ia64/kernel/mca.c --- linux-2.4.0-test9/arch/ia64/kernel/mca.c Wed Aug 2 18:54:02 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/mca.c Wed Oct 4 21:36:32 2000 @@ -43,10 +43,6 @@ u64 ia64_mca_bspstore[1024]; u64 ia64_init_stack[INIT_TASK_SIZE] __attribute__((aligned(16))); -#if defined(SAL_MPINIT_WORKAROUND) && !defined(CONFIG_SMP) -int bootstrap_processor = -1; -#endif - static void ia64_mca_cmc_vector_setup(int enable, int_vector_t cmc_vector); static void ia64_mca_wakeup_ipi_wait(void); @@ -223,12 +219,6 @@ IA64_MCA_DEBUG("ia64_mca_init : begin\n"); -#if defined(SAL_MPINIT_WORKAROUND) && !defined(CONFIG_SMP) - /* XXX -- workaround for SAL bug for running on MP system, but UP kernel */ - - bootstrap_processor = hard_smp_processor_id(); -#endif - /* Clear the Rendez checkin flag for all cpus */ for(i = 0 ; i < IA64_MAXCPUS; i++) ia64_mc_info.imi_rendez_checkin[i] = IA64_MCA_RENDEZ_CHECKIN_NOTDONE; @@ -265,8 +255,11 @@ IA64_MCA_DEBUG("ia64_mca_init : correctable mca vector setup done\n"); ia64_mc_info.imi_mca_handler = __pa(ia64_os_mca_dispatch); - ia64_mc_info.imi_mca_handler_size = - __pa(ia64_os_mca_dispatch_end) - __pa(ia64_os_mca_dispatch); + /* + * XXX - disable SAL checksum by setting size to 0; should be + * __pa(ia64_os_mca_dispatch_end) - __pa(ia64_os_mca_dispatch); + */ + ia64_mc_info.imi_mca_handler_size = 0; /* Register the os mca handler with SAL */ if (ia64_sal_set_vectors(SAL_VECTOR_OS_MCA, ia64_mc_info.imi_mca_handler, @@ -278,10 +271,14 @@ IA64_MCA_DEBUG("ia64_mca_init : registered os mca handler with SAL\n"); + /* + * XXX - disable SAL checksum by setting size to 0, should be + * IA64_INIT_HANDLER_SIZE + */ ia64_mc_info.imi_monarch_init_handler = __pa(mon_init_ptr->fp); - ia64_mc_info.imi_monarch_init_handler_size = IA64_INIT_HANDLER_SIZE; + ia64_mc_info.imi_monarch_init_handler_size = 0; ia64_mc_info.imi_slave_init_handler = __pa(slave_init_ptr->fp); - ia64_mc_info.imi_slave_init_handler_size = IA64_INIT_HANDLER_SIZE; + ia64_mc_info.imi_slave_init_handler_size = 0; IA64_MCA_DEBUG("ia64_mca_init : os init handler at %lx\n",ia64_mc_info.imi_monarch_init_handler); @@ -386,7 +383,7 @@ int cpu; /* Clear the Rendez checkin flag for all cpus */ - for(cpu = 0 ; cpu < IA64_MAXCPUS; cpu++) + for(cpu = 0 ; cpu < smp_num_cpus; cpu++) if (ia64_mc_info.imi_rendez_checkin[cpu] == IA64_MCA_RENDEZ_CHECKIN_DONE) ia64_mca_wakeup(cpu); @@ -404,11 +401,14 @@ void ia64_mca_rendez_int_handler(int rendez_irq, void *arg, struct pt_regs *ptregs) { - int flags; + int flags, cpu = 0; /* Mask all interrupts */ save_and_cli(flags); - ia64_mc_info.imi_rendez_checkin[ia64_get_cpuid(0)] = IA64_MCA_RENDEZ_CHECKIN_DONE; +#ifdef CONFIG_SMP + cpu = cpu_logical_id(hard_smp_processor_id()); +#endif + ia64_mc_info.imi_rendez_checkin[cpu] = IA64_MCA_RENDEZ_CHECKIN_DONE; /* Register with the SAL monarch that the slave has * reached SAL */ diff -urN linux-2.4.0-test9/arch/ia64/kernel/mca_asm.S linux-2.4.0-test9-lia/arch/ia64/kernel/mca_asm.S --- linux-2.4.0-test9/arch/ia64/kernel/mca_asm.S Wed Aug 2 18:54:02 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/mca_asm.S Fri Aug 25 00:51:43 2000 @@ -680,32 +680,22 @@ .proc ia64_monarch_init_handler ia64_monarch_init_handler: -#if defined(SAL_MPINIT_WORKAROUND) +#if defined(CONFIG_SMP) && defined(SAL_MPINIT_WORKAROUND) // // work around SAL bug that sends all processors to monarch entry // - .global bootstrap_processor - - movl r21=24 - movl r20=16 mov r17=cr.lid - movl r18=bootstrap_processor + movl r18=__cpu_physical_id ;; - dep r18=0,r18,61,3 // convert bsp to physical address + dep r18=0,r18,61,3 // convert to physical address ;; - shr r19=r17,r20 - shr r22=r17,r21 + shr.u r17=r17,16 ld4 r18=[r18] // get the BSP ID ;; - and r19=0xf, r19 - and r22=0xf, r22 + dep r17=0,r17,16,48 ;; - shl r19=r19,8 // get them in the right order - ;; - or r22=r22,r19 // combine EID and LID - ;; - cmp.eq p6,p7=r22,r18 // Am I the BSP ? -(p7) br.cond.spnt slave_init_spin_me + cmp4.ne p6,p0=r17,r18 // Am I the BSP ? +(p6) br.cond.spnt slave_init_spin_me ;; #endif diff -urN linux-2.4.0-test9/arch/ia64/kernel/minstate.h linux-2.4.0-test9-lia/arch/ia64/kernel/minstate.h --- linux-2.4.0-test9/arch/ia64/kernel/minstate.h Thu Jun 22 07:09:44 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/minstate.h Fri Sep 8 16:23:20 2000 @@ -192,13 +192,3 @@ #define SAVE_MIN_WITH_COVER DO_SAVE_MIN(cover;; mov rCRIFS=cr.ifs,) STOPS #define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(cover;; mov rCRIFS=cr.ifs, mov r15=r19) STOPS #define SAVE_MIN DO_SAVE_MIN(mov rCRIFS=r0,) STOPS - -#ifdef CONFIG_ITANIUM_ASTEP_SPECIFIC -# define STOPS nop.i 0x0;; nop.i 0x0;; nop.i 0x0;; -#else -# define STOPS -#endif - -#define SAVE_MIN_WITH_COVER DO_SAVE_MIN(cover;; mov rCRIFS=cr.ifs,) STOPS -#define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(cover;; mov rCRIFS=cr.ifs, mov r15=r19) STOPS -#define SAVE_MIN DO_SAVE_MIN(mov rCRIFS=r0,) STOPS diff -urN linux-2.4.0-test9/arch/ia64/kernel/pal.S linux-2.4.0-test9-lia/arch/ia64/kernel/pal.S --- linux-2.4.0-test9/arch/ia64/kernel/pal.S Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/pal.S Fri Sep 8 16:23:31 2000 @@ -54,7 +54,8 @@ * * in0 Pointer to struct ia64_pal_retval * in1 Index of PAL service - * in2 - in4 Remaning PAL arguments + * in2 - in4 Remaining PAL arguments + * in5 1 ==> clear psr.ic, 0 ==> don't clear psr.ic * */ GLOBAL_ENTRY(ia64_pal_call_static) @@ -68,18 +69,22 @@ } ;; ld8 loc2 = [loc2] // loc2 <- entry point - mov r30 = in2 - mov r31 = in3 + tbit.nz p6,p7 = in5, 0 + adds r8 = 1f-1b,r8 ;; mov loc3 = psr mov loc0 = rp UNW(.body) - adds r8 = 1f-1b,r8 - ;; - rsm psr.i + mov r30 = in2 + +(p6) rsm psr.i | psr.ic + mov r31 = in3 mov b7 = loc2 + +(p7) rsm psr.i + ;; +(p6) srlz.i mov rp = r8 - ;; br.cond.sptk.few b7 1: mov psr.l = loc3 mov ar.pfs = loc1 diff -urN linux-2.4.0-test9/arch/ia64/kernel/palinfo.c linux-2.4.0-test9-lia/arch/ia64/kernel/palinfo.c --- linux-2.4.0-test9/arch/ia64/kernel/palinfo.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/palinfo.c Fri Sep 8 16:23:41 2000 @@ -10,13 +10,12 @@ * Copyright (C) 2000 Stephane Eranian * * 05/26/2000 S.Eranian initial release + * 08/21/2000 S.Eranian updated to July 2000 PAL specs * * ISSUES: - * - because of some PAL bugs, some calls return invalid results or - * are empty for now. - * - remove hack to avoid problem with <= 256M RAM for itr. + * - as of 2.2.9/2.2.12, the following values are still wrong + * PAL_VM_SUMMARY: key & rid sizes */ -#include #include #include #include @@ -111,7 +110,7 @@ #define RSE_HINTS_COUNT (sizeof(rse_hints)/sizeof(const char *)) /* - * The current revision of the Volume 2 of + * The current revision of the Volume 2 (July 2000) of * IA-64 Architecture Software Developer's Manual is wrong. * Table 4-10 has invalid information concerning the ma field: * Correct table is: @@ -132,38 +131,6 @@ "NaTPage" /* 111 */ }; - - -/* - * Allocate a buffer suitable for calling PAL code in Virtual mode - * - * The documentation (PAL2.6) allows DTLB misses on the buffer. So - * using the TC is enough, no need to pin the entry. - * - * We allocate a kernel-sized page (at least 4KB). This is enough to - * hold any possible reply. - */ -static inline void * -get_palcall_buffer(void) -{ - void *tmp; - - tmp = (void *)__get_free_page(GFP_KERNEL); - if (tmp == 0) { - printk(KERN_ERR __FUNCTION__" : can't get a buffer page\n"); - } - return tmp; -} - -/* - * Free a palcall buffer allocated with the previous call - */ -static inline void -free_palcall_buffer(void *addr) -{ - __free_page(addr); -} - /* * Take a 64bit vector and produces a string such that * if bit n is set then 2^n in clear text is generated. The adjustment @@ -243,17 +210,12 @@ { s64 status; char *p = page; - pal_power_mgmt_info_u_t *halt_info; + u64 halt_info_buffer[8]; + pal_power_mgmt_info_u_t *halt_info =(pal_power_mgmt_info_u_t *)halt_info_buffer; int i; - halt_info = get_palcall_buffer(); - if (halt_info == 0) return 0; - status = ia64_pal_halt_info(halt_info); - if (status != 0) { - free_palcall_buffer(halt_info); - return 0; - } + if (status != 0) return 0; for (i=0; i < 8 ; i++ ) { if (halt_info[i].pal_power_mgmt_info_s.im == 1) { @@ -270,9 +232,6 @@ p += sprintf(p,"Power level %d: not implemented\n",i); } } - - free_palcall_buffer(halt_info); - return p - page; } @@ -502,7 +461,7 @@ "RSE load/store hints : %ld (%s)\n", phys_stacked, hints.ph_data, - hints.ph_data < RSE_HINTS_COUNT ? rse_hints[hints.ph_data]: "(??)"); + hints.ph_data < RSE_HINTS_COUNT ? rse_hints[hints.ph_data]: "(\?\?)"); if (ia64_pal_debug_info(&iregs, &dregs)) return 0; @@ -569,7 +528,9 @@ "Enable Half Transfer", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + "Enable Cache Line Repl. Exclusive", + "Enable Cache Line Repl. Shared", "Disable Transaction Queuing", "Disable Reponse Error Checking", "Disable Bus Error Checking", @@ -673,16 +634,10 @@ perfmon_info(char *page) { char *p = page; - u64 *pm_buffer; + u64 pm_buffer[16]; pal_perf_mon_info_u_t pm_info; - pm_buffer = (u64 *)get_palcall_buffer(); - if (pm_buffer == 0) return 0; - - if (ia64_pal_perf_mon_info(pm_buffer, &pm_info) != 0) { - free_palcall_buffer(pm_buffer); - return 0; - } + if (ia64_pal_perf_mon_info(pm_buffer, &pm_info) != 0) return 0; #ifdef IA64_PAL_PERF_MON_INFO_BUG /* @@ -718,8 +673,6 @@ p = bitregister_process(p, pm_buffer+12, 256); p += sprintf(p, "\n"); - - free_palcall_buffer(pm_buffer); return p - page; } diff -urN linux-2.4.0-test9/arch/ia64/kernel/pci-dma.c linux-2.4.0-test9-lia/arch/ia64/kernel/pci-dma.c --- linux-2.4.0-test9/arch/ia64/kernel/pci-dma.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/pci-dma.c Fri Sep 8 16:24:04 2000 @@ -97,7 +97,8 @@ io_tlb_index = 0; io_tlb_orig_addr = alloc_bootmem(io_tlb_nslabs * sizeof(char *)); - printk("Placing software IO TLB between 0x%p - 0x%p\n", io_tlb_start, io_tlb_end); + printk("Placing software IO TLB between 0x%p - 0x%p\n", + (void *) io_tlb_start, (void *) io_tlb_end); } /* @@ -394,7 +395,7 @@ * Once the device is given the dma address, the device owns this memory * until either pci_unmap_single or pci_dma_sync_single is performed. */ -extern inline dma_addr_t +dma_addr_t pci_map_single (struct pci_dev *hwdev, void *ptr, size_t size, int direction) { if (direction == PCI_DMA_NONE) @@ -410,7 +411,7 @@ * After this call, reads by the cpu to the buffer are guarenteed to see * whatever the device wrote there. */ -extern inline void +void pci_unmap_single (struct pci_dev *hwdev, dma_addr_t dma_addr, size_t size, int direction) { if (direction == PCI_DMA_NONE) @@ -433,7 +434,7 @@ * Device ownership issues as mentioned above for pci_map_single are * the same here. */ -extern inline int +int pci_map_sg (struct pci_dev *hwdev, struct scatterlist *sg, int nents, int direction) { if (direction == PCI_DMA_NONE) @@ -446,7 +447,7 @@ * Again, cpu read rules concerning calls here are the same as for * pci_unmap_single() above. */ -extern inline void +void pci_unmap_sg (struct pci_dev *hwdev, struct scatterlist *sg, int nents, int direction) { if (direction == PCI_DMA_NONE) @@ -463,7 +464,7 @@ * next point you give the PCI dma address back to the card, the * device again owns the buffer. */ -extern inline void +void pci_dma_sync_single (struct pci_dev *hwdev, dma_addr_t dma_handle, size_t size, int direction) { if (direction == PCI_DMA_NONE) @@ -478,7 +479,7 @@ * The same as pci_dma_sync_single but for a scatter-gather list, * same rules and usage. */ -extern inline void +void pci_dma_sync_sg (struct pci_dev *hwdev, struct scatterlist *sg, int nelems, int direction) { if (direction == PCI_DMA_NONE) diff -urN linux-2.4.0-test9/arch/ia64/kernel/perfmon.c linux-2.4.0-test9-lia/arch/ia64/kernel/perfmon.c --- linux-2.4.0-test9/arch/ia64/kernel/perfmon.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/perfmon.c Wed Oct 4 21:36:39 2000 @@ -10,15 +10,19 @@ #include #include +#include #include #include #include +#include +#include #include #include #include #include #include +#include /* Long blurb on how this works: * We set dcr.pp, psr.pp, and the appropriate pmc control values with @@ -52,68 +56,107 @@ #ifdef CONFIG_PERFMON #define MAX_PERF_COUNTER 4 /* true for Itanium, at least */ +#define PMU_FIRST_COUNTER 4 /* first generic counter */ + #define WRITE_PMCS_AND_START 0xa0 #define WRITE_PMCS 0xa1 #define READ_PMDS 0xa2 #define STOP_PMCS 0xa3 -#define IA64_COUNTER_MASK 0xffffffffffffff6fL -#define PERF_OVFL_VAL 0xffffffffL -volatile int used_by_system; -struct perfmon_counter { - unsigned long data; - unsigned long counter_num; -}; +/* + * this structure needs to be enhanced + */ +typedef struct { + unsigned long pmu_reg_data; /* generic PMD register */ + unsigned long pmu_reg_num; /* which register number */ +} perfmon_reg_t; + +/* + * This structure is initialize at boot time and contains + * a description of the PMU main characteristic as indicated + * by PAL + */ +typedef struct { + unsigned long perf_ovfl_val; /* overflow value for generic counters */ + unsigned long max_pmc; /* highest PMC */ + unsigned long max_pmd; /* highest PMD */ + unsigned long max_counters; /* number of generic counter pairs (PMC/PMD) */ +} pmu_config_t; +/* XXX will go static when ptrace() is cleaned */ +unsigned long perf_ovfl_val; /* overflow value for generic counters */ + +static pmu_config_t pmu_conf; + +/* + * could optimize to avoid cache conflicts in SMP + */ unsigned long pmds[NR_CPUS][MAX_PERF_COUNTER]; asmlinkage unsigned long -sys_perfmonctl (int cmd1, int cmd2, void *ptr) +sys_perfmonctl (int cmd, int count, void *ptr, long arg4, long arg5, long arg6, long arg7, long arg8, long stack) { - struct perfmon_counter tmp, *cptr = ptr; - unsigned long cnum, dcr, flags; - struct perf_counter; + struct pt_regs *regs = (struct pt_regs *) &stack; + perfmon_reg_t tmp, *cptr = ptr; + unsigned long cnum; int i; - switch (cmd1) { + switch (cmd) { case WRITE_PMCS: /* Writes to PMC's and clears PMDs */ case WRITE_PMCS_AND_START: /* Also starts counting */ - if (cmd2 <= 0 || cmd2 > MAX_PERF_COUNTER - used_by_system) - return -EINVAL; - - if (!access_ok(VERIFY_READ, cptr, sizeof(struct perf_counter)*cmd2)) + if (!access_ok(VERIFY_READ, cptr, sizeof(struct perfmon_reg_t)*count)) return -EFAULT; - current->thread.flags |= IA64_THREAD_PM_VALID; + for (i = 0; i < count; i++, cptr++) { - for (i = 0; i < cmd2; i++, cptr++) { copy_from_user(&tmp, cptr, sizeof(tmp)); - /* XXX need to check validity of counter_num and perhaps data!! */ - if (tmp.counter_num < 4 - || tmp.counter_num >= 4 + MAX_PERF_COUNTER - used_by_system) - return -EFAULT; - - ia64_set_pmc(tmp.counter_num, tmp.data); - ia64_set_pmd(tmp.counter_num, 0); - pmds[smp_processor_id()][tmp.counter_num - 4] = 0; + + /* XXX need to check validity of pmu_reg_num and perhaps data!! */ + + if (tmp.pmu_reg_num > pmu_conf.max_pmc || tmp.pmu_reg_num == 0) return -EFAULT; + + ia64_set_pmc(tmp.pmu_reg_num, tmp.pmu_reg_data); + + /* to go away */ + if (tmp.pmu_reg_num >= PMU_FIRST_COUNTER && tmp.pmu_reg_num < PMU_FIRST_COUNTER+pmu_conf.max_counters) { + ia64_set_pmd(tmp.pmu_reg_num, 0); + pmds[smp_processor_id()][tmp.pmu_reg_num - PMU_FIRST_COUNTER] = 0; + + printk(__FUNCTION__" setting PMC/PMD[%ld] es=0x%lx pmd[%ld]=%lx\n", tmp.pmu_reg_num, (tmp.pmu_reg_data>>8) & 0x7f, tmp.pmu_reg_num, ia64_get_pmd(tmp.pmu_reg_num)); + } else + printk(__FUNCTION__" setting PMC[%ld]=0x%lx\n", tmp.pmu_reg_num, tmp.pmu_reg_data); } - if (cmd1 == WRITE_PMCS_AND_START) { + if (cmd == WRITE_PMCS_AND_START) { +#if 0 +/* irrelevant with user monitors */ local_irq_save(flags); + dcr = ia64_get_dcr(); dcr |= IA64_DCR_PP; ia64_set_dcr(dcr); + local_irq_restore(flags); +#endif + ia64_set_pmc(0, 0); + + /* will start monitoring right after rfi */ + ia64_psr(regs)->up = 1; } + /* + * mark the state as valid. + * this will trigger save/restore at context switch + */ + current->thread.flags |= IA64_THREAD_PM_VALID; break; case READ_PMDS: - if (cmd2 <= 0 || cmd2 > MAX_PERF_COUNTER - used_by_system) + if (count <= 0 || count > MAX_PERF_COUNTER) return -EINVAL; - if (!access_ok(VERIFY_WRITE, cptr, sizeof(struct perf_counter)*cmd2)) + if (!access_ok(VERIFY_WRITE, cptr, sizeof(struct perfmon_reg_t)*count)) return -EFAULT; /* This looks shady, but IMHO this will work fine. This is @@ -121,14 +164,15 @@ * with the interrupt handler. See explanation in the * following comment. */ - +#if 0 +/* irrelevant with user monitors */ local_irq_save(flags); __asm__ __volatile__("rsm psr.pp\n"); dcr = ia64_get_dcr(); dcr &= ~IA64_DCR_PP; ia64_set_dcr(dcr); local_irq_restore(flags); - +#endif /* * We cannot write to pmc[0] to stop counting here, as * that particular instruction might cause an overflow @@ -142,36 +186,47 @@ * when we re-enabled interrupts. When I muck with dcr, * is the irq_save/restore needed? */ - for (i = 0, cnum = 4;i < cmd2; i++, cnum++, cptr++) { - tmp.data = (pmds[smp_processor_id()][i] - + (ia64_get_pmd(cnum) & PERF_OVFL_VAL)); - tmp.counter_num = cnum; - if (copy_to_user(cptr, &tmp, sizeof(tmp))) - return -EFAULT; - //put_user(pmd, &cptr->data); + + + /* XXX: This needs to change to read more than just the counters */ + for (i = 0, cnum = PMU_FIRST_COUNTER;i < count; i++, cnum++, cptr++) { + + tmp.pmu_reg_data = (pmds[smp_processor_id()][i] + + (ia64_get_pmd(cnum) & pmu_conf.perf_ovfl_val)); + + tmp.pmu_reg_num = cnum; + + if (copy_to_user(cptr, &tmp, sizeof(tmp))) return -EFAULT; } +#if 0 +/* irrelevant with user monitors */ local_irq_save(flags); __asm__ __volatile__("ssm psr.pp"); dcr = ia64_get_dcr(); dcr |= IA64_DCR_PP; ia64_set_dcr(dcr); local_irq_restore(flags); +#endif break; case STOP_PMCS: ia64_set_pmc(0, 1); ia64_srlz_d(); - for (i = 0; i < MAX_PERF_COUNTER - used_by_system; ++i) + for (i = 0; i < MAX_PERF_COUNTER; ++i) ia64_set_pmc(4+i, 0); - if (!used_by_system) { - local_irq_save(flags); - dcr = ia64_get_dcr(); - dcr &= ~IA64_DCR_PP; - ia64_set_dcr(dcr); - local_irq_restore(flags); - } +#if 0 +/* irrelevant with user monitors */ + local_irq_save(flags); + dcr = ia64_get_dcr(); + dcr &= ~IA64_DCR_PP; + ia64_set_dcr(dcr); + local_irq_restore(flags); + ia64_psr(regs)->up = 0; +#endif + current->thread.flags &= ~(IA64_THREAD_PM_VALID); + break; default: @@ -187,13 +242,21 @@ unsigned long mask, i, cnum, val; mask = ia64_get_pmc(0) >> 4; - for (i = 0, cnum = 4; i < MAX_PERF_COUNTER - used_by_system; cnum++, i++, mask >>= 1) { - val = 0; + for (i = 0, cnum = PMU_FIRST_COUNTER ; i < pmu_conf.max_counters; cnum++, i++, mask >>= 1) { + + + val = mask & 0x1 ? pmu_conf.perf_ovfl_val + 1 : 0; + if (mask & 0x1) - val += PERF_OVFL_VAL + 1; + printk(__FUNCTION__ " PMD%ld overflowed pmd=%lx pmod=%lx\n", cnum, ia64_get_pmd(cnum), pmds[smp_processor_id()][i]); + /* since we got an interrupt, might as well clear every pmd. */ - val += ia64_get_pmd(cnum) & PERF_OVFL_VAL; + val += ia64_get_pmd(cnum) & pmu_conf.perf_ovfl_val; + + printk(__FUNCTION__ " adding val=%lx to pmod[%ld]=%lx \n", val, i, pmds[smp_processor_id()][i]); + pmds[smp_processor_id()][i] += val; + ia64_set_pmd(cnum, 0); } } @@ -212,16 +275,69 @@ name: "perfmon" }; -void +static int +perfmon_proc_info(char *page) +{ + char *p = page; + u64 pmc0 = ia64_get_pmc(0); + + p += sprintf(p, "PMC[0]=%lx\n", pmc0); + + return p - page; +} + +static int +perfmon_read_entry(char *page, char **start, off_t off, int count, int *eof, void *data) +{ + int len = perfmon_proc_info(page); + + if (len <= off+count) *eof = 1; + + *start = page + off; + len -= off; + + if (len>count) len = count; + if (len<0) len = 0; + + return len; +} + +static struct proc_dir_entry *perfmon_dir; + +void __init perfmon_init (void) { + pal_perf_mon_info_u_t pm_info; + u64 pm_buffer[16]; + s64 status; + irq_desc[PERFMON_IRQ].status |= IRQ_PER_CPU; irq_desc[PERFMON_IRQ].handler = &irq_type_ia64_sapic; setup_irq(PERFMON_IRQ, &perfmon_irqaction); ia64_set_pmv(PERFMON_IRQ); ia64_srlz_d(); - printk("Initialized perfmon vector to %u\n",PERFMON_IRQ); + + printk("perfmon: Initialized vector to %u\n",PERFMON_IRQ); + + if ((status=ia64_pal_perf_mon_info(pm_buffer, &pm_info)) != 0) { + printk(__FUNCTION__ " pal call failed (%ld)\n", status); + return; + } + pmu_conf.perf_ovfl_val = perf_ovfl_val = (1L << pm_info.pal_perf_mon_info_s.width) - 1; + + /* XXX need to use PAL instead */ + pmu_conf.max_pmc = 13; + pmu_conf.max_pmd = 17; + pmu_conf.max_counters = pm_info.pal_perf_mon_info_s.generic; + + printk("perfmon: Counters are %d bits\n", pm_info.pal_perf_mon_info_s.width); + printk("perfmon: Maximum counter value 0x%lx\n", pmu_conf.perf_ovfl_val); + + /* + * for now here for debug purposes + */ + perfmon_dir = create_proc_read_entry ("perfmon", 0, 0, perfmon_read_entry, NULL); } void @@ -238,10 +354,13 @@ ia64_set_pmc(0, 1); ia64_srlz_d(); - for (i=0; i< IA64_NUM_PM_REGS - used_by_system ; i++) { - t->pmd[i] = ia64_get_pmd(4+i); + /* + * XXX: this will need to be extended beyong just counters + */ + for (i=0; i< IA64_NUM_PM_REGS; i++) { + t->pmd[i] = ia64_get_pmd(4+i); t->pmod[i] = pmds[smp_processor_id()][i]; - t->pmc[i] = ia64_get_pmc(4+i); + t->pmc[i] = ia64_get_pmc(4+i); } } @@ -250,7 +369,10 @@ { int i; - for (i=0; i< IA64_NUM_PM_REGS - used_by_system ; i++) { + /* + * XXX: this will need to be extended beyong just counters + */ + for (i=0; i< IA64_NUM_PM_REGS ; i++) { ia64_set_pmd(4+i, t->pmd[i]); pmds[smp_processor_id()][i] = t->pmod[i]; ia64_set_pmc(4+i, t->pmc[i]); @@ -262,7 +384,7 @@ #else /* !CONFIG_PERFMON */ asmlinkage unsigned long -sys_perfmonctl (int cmd1, int cmd2, void *ptr) +sys_perfmonctl (int cmd, int count, void *ptr) { return -ENOSYS; } diff -urN linux-2.4.0-test9/arch/ia64/kernel/process.c linux-2.4.0-test9-lia/arch/ia64/kernel/process.c --- linux-2.4.0-test9/arch/ia64/kernel/process.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/process.c Wed Oct 4 21:37:10 2000 @@ -294,7 +294,8 @@ * call behavior where scratch registers are preserved across * system calls (unless used by the system call itself). */ -# define THREAD_FLAGS_TO_CLEAR (IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID) +# define THREAD_FLAGS_TO_CLEAR (IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID \ + | IA64_THREAD_PM_VALID) # define THREAD_FLAGS_TO_SET 0 p->thread.flags = ((current->thread.flags & ~THREAD_FLAGS_TO_CLEAR) | THREAD_FLAGS_TO_SET); @@ -333,6 +334,17 @@ if (ia64_peek(pt, current, addr, &val) == 0) access_process_vm(current, addr, &val, sizeof(val), 1); + /* + * coredump format: + * r0-r31 + * NaT bits (for r0-r31; bit N == 1 iff rN is a NaT) + * predicate registers (p0-p63) + * b0-b7 + * ip cfm user-mask + * ar.rsc ar.bsp ar.bspstore ar.rnat + * ar.ccv ar.unat ar.fpsr ar.pfs ar.lc ar.ec + */ + /* r0 is zero */ for (i = 1, mask = (1UL << i); i < 32; ++i) { unw_get_gr(info, i, &dst[i], &nat); @@ -370,7 +382,6 @@ void do_dump_fpu (struct unw_frame_info *info, void *arg) { - struct task_struct *fpu_owner = ia64_get_fpu_owner(); elf_fpreg_t *dst = arg; int i; @@ -384,10 +395,9 @@ for (i = 2; i < 32; ++i) unw_get_fr(info, i, dst + i); - if ((fpu_owner == current) || (current->thread.flags & IA64_THREAD_FPH_VALID)) { - ia64_sync_fph(current); + ia64_flush_fph(current); + if ((current->thread.flags & IA64_THREAD_FPH_VALID) != 0) memcpy(dst + 32, current->thread.fph, 96*16); - } } #endif /* CONFIG_IA64_NEW_UNWIND */ @@ -463,7 +473,6 @@ unw_init_running(do_dump_fpu, dst); #else struct switch_stack *sw = ((struct switch_stack *) pt) - 1; - struct task_struct *fpu_owner = ia64_get_fpu_owner(); memset(dst, 0, sizeof (dst)); /* don't leak any "random" bits */ @@ -472,12 +481,9 @@ dst[8] = pt->f8; dst[9] = pt->f9; memcpy(dst + 10, &sw->f10, 22*16); /* f10-f31 are contiguous */ - if ((fpu_owner == current) || (current->thread.flags & IA64_THREAD_FPH_VALID)) { - if (fpu_owner == current) { - __ia64_save_fpu(current->thread.fph); - } + ia64_flush_fph(current); + if ((current->thread.flags & IA64_THREAD_FPH_VALID) != 0) memcpy(dst + 32, current->thread.fph, 96*16); - } #endif return 1; /* f0-f31 are always valid so we always return 1 */ } @@ -501,14 +507,14 @@ kernel_thread (int (*fn)(void *), void *arg, unsigned long flags) { struct task_struct *parent = current; - int result; + int result, tid; - clone(flags | CLONE_VM, 0); + tid = clone(flags | CLONE_VM, 0); if (parent != current) { result = (*fn)(arg); _exit(result); } - return 0; /* parent: just return */ + return tid; } /* @@ -520,9 +526,10 @@ /* drop floating-point and debug-register state if it exists: */ current->thread.flags &= ~(IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID); - if (ia64_get_fpu_owner() == current) { +#ifndef CONFIG_SMP + if (ia64_get_fpu_owner() == current) ia64_set_fpu_owner(0); - } +#endif } /* @@ -532,9 +539,28 @@ void exit_thread (void) { - if (ia64_get_fpu_owner() == current) { +#ifndef CONFIG_SMP + if (ia64_get_fpu_owner() == current) ia64_set_fpu_owner(0); +#endif +#ifdef CONFIG_PERFMON + /* stop monitoring */ + if ((current->thread.flags & IA64_THREAD_PM_VALID) != 0) { + /* + * we cannot rely on switch_to() to save the PMU + * context for the last time. There is a possible race + * condition in SMP mode between the child and the + * parent. by explicitly saving the PMU context here + * we garantee no race. this call we also stop + * monitoring + */ + ia64_save_pm_regs(¤t->thread); + /* + * make sure that switch_to() will not save context again + */ + current->thread.flags &= ~IA64_THREAD_PM_VALID; } +#endif } unsigned long diff -urN linux-2.4.0-test9/arch/ia64/kernel/ptrace.c linux-2.4.0-test9-lia/arch/ia64/kernel/ptrace.c --- linux-2.4.0-test9/arch/ia64/kernel/ptrace.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/ptrace.c Thu Oct 5 01:40:36 2000 @@ -376,7 +376,8 @@ ret = 0; } else { if ((unsigned long) laddr >= (unsigned long) high_memory) { - printk("yikes: trying to access long at %p\n", laddr); + printk("yikes: trying to access long at %p\n", + (void *) laddr); return -EIO; } ret = *laddr; @@ -543,21 +544,48 @@ } /* - * Ensure the state in child->thread.fph is up-to-date. + * Write f32-f127 back to task->thread.fph if it has been modified. */ -void -ia64_sync_fph (struct task_struct *child) +inline void +ia64_flush_fph (struct task_struct *task) { - if (ia64_psr(ia64_task_regs(child))->mfh && ia64_get_fpu_owner() == child) { - ia64_psr(ia64_task_regs(child))->mfh = 0; - ia64_set_fpu_owner(0); - ia64_save_fpu(&child->thread.fph[0]); - child->thread.flags |= IA64_THREAD_FPH_VALID; + struct ia64_psr *psr = ia64_psr(ia64_task_regs(task)); +#ifdef CONFIG_SMP + struct task_struct *fpu_owner = current; +#else + struct task_struct *fpu_owner = ia64_get_fpu_owner(); +#endif + + if (task == fpu_owner && psr->mfh) { + psr->mfh = 0; + ia64_save_fpu(&task->thread.fph[0]); + task->thread.flags |= IA64_THREAD_FPH_VALID; } - if (!(child->thread.flags & IA64_THREAD_FPH_VALID)) { - memset(&child->thread.fph, 0, sizeof(child->thread.fph)); - child->thread.flags |= IA64_THREAD_FPH_VALID; +} + +/* + * Sync the fph state of the task so that it can be manipulated + * through thread.fph. If necessary, f32-f127 are written back to + * thread.fph or, if the fph state hasn't been used before, thread.fph + * is cleared to zeroes. Also, access to f32-f127 is disabled to + * ensure that the task picks up the state from thread.fph when it + * executes again. + */ +void +ia64_sync_fph (struct task_struct *task) +{ + struct ia64_psr *psr = ia64_psr(ia64_task_regs(task)); + + ia64_flush_fph(task); + if (!(task->thread.flags & IA64_THREAD_FPH_VALID)) { + task->thread.flags |= IA64_THREAD_FPH_VALID; + memset(&task->thread.fph, 0, sizeof(task->thread.fph)); } +#ifndef CONFIG_SMP + if (ia64_get_fpu_owner() == task) + ia64_set_fpu_owner(0); +#endif + psr->dfh = 1; } #ifdef CONFIG_IA64_NEW_UNWIND @@ -589,6 +617,7 @@ struct switch_stack *sw; struct unw_frame_info info; struct pt_regs *pt; + unsigned long pmd_tmp; pt = ia64_task_regs(child); sw = (struct switch_stack *) (child->thread.ksp + 16); @@ -600,7 +629,10 @@ if (addr < PT_F127 + 16) { /* accessing fph */ - ia64_sync_fph(child); + if (write_access) + ia64_sync_fph(child); + else + ia64_flush_fph(child); ptr = (unsigned long *) ((unsigned long) &child->thread.fph + addr); } else if (addr >= PT_F10 && addr < PT_F15 + 16) { /* scratch registers untouched by kernel (saved in switch_stack) */ @@ -656,6 +688,9 @@ case PT_B1: case PT_B2: case PT_B3: case PT_B4: case PT_B5: return unw_access_br(&info, (addr - PT_B1)/8 + 1, data, write_access); + case PT_AR_EC: + return unw_access_ar(&info, UNW_AR_EC, data, write_access); + case PT_AR_LC: return unw_access_ar(&info, UNW_AR_LC, data, write_access); @@ -759,7 +794,11 @@ addr); return -1; } - } else { + } else +#ifdef CONFIG_PERFMON + if (addr < PT_PMD) +#endif + { /* access debug registers */ if (!(child->thread.flags & IA64_THREAD_DBG_VALID)) { @@ -782,6 +821,32 @@ ptr += regnum; } +#ifdef CONFIG_PERFMON + else { + /* + * XXX: will eventually move back to perfmonctl() + */ + unsigned long pmd = (addr - PT_PMD) >> 3; + extern unsigned long perf_ovfl_val; + + /* we just use ptrace to read */ + if (write_access) return -1; + + if (pmd > 3) { + printk("ptrace: rejecting access to PMD[%ld] address 0x%lx\n", pmd, addr); + return -1; + } + + /* + * We always need to mask upper 32bits of pmd because value is random + */ + pmd_tmp = child->thread.pmod[pmd]+(child->thread.pmd[pmd]& perf_ovfl_val); + + /*printk(__FUNCTION__" child=%d reading pmd[%ld]=%lx\n", child->pid, pmd, pmd_tmp);*/ + + ptr = &pmd_tmp; + } +#endif if (write_access) *ptr = *data; else @@ -794,8 +859,9 @@ static int access_uarea (struct task_struct *child, unsigned long addr, unsigned long *data, int write_access) { - unsigned long *ptr, *rbs, *bspstore, ndirty, regnum; + unsigned long *ptr = NULL, *rbs, *bspstore, ndirty, regnum; struct switch_stack *sw; + unsigned long pmd_tmp; struct pt_regs *pt; if ((addr & 0x7) != 0) @@ -803,7 +869,10 @@ if (addr < PT_F127+16) { /* accessing fph */ - ia64_sync_fph(child); + if (write_access) + ia64_sync_fph(child); + else + ia64_flush_fph(child); ptr = (unsigned long *) ((unsigned long) &child->thread.fph + addr); } else if (addr < PT_F9+16) { /* accessing switch_stack or pt_regs: */ @@ -864,6 +933,14 @@ *data = (pt->cr_ipsr & IPSR_READ_MASK); return 0; + case PT_AR_EC: + if (write_access) + sw->ar_pfs = (((*data & 0x3f) << 52) + | (sw->ar_pfs & ~(0x3fUL << 52))); + else + *data = (sw->ar_pfs >> 52) & 0x3f; + break; + case PT_R1: case PT_R2: case PT_R3: case PT_R4: case PT_R5: case PT_R6: case PT_R7: case PT_R8: case PT_R9: case PT_R10: case PT_R11: @@ -900,7 +977,12 @@ /* disallow accessing anything else... */ return -1; } - } else { + } else +#ifdef CONFIG_PERFMON + if (addr < PT_PMD) +#endif + { + /* access debug registers */ if (!(child->thread.flags & IA64_THREAD_DBG_VALID)) { @@ -921,6 +1003,33 @@ ptr += regnum; } +#ifdef CONFIG_PERFMON + else { + /* + * XXX: will eventually move back to perfmonctl() + */ + unsigned long pmd = (addr - PT_PMD) >> 3; + extern unsigned long perf_ovfl_val; + + /* we just use ptrace to read */ + if (write_access) return -1; + + if (pmd > 3) { + printk("ptrace: rejecting access to PMD[%ld] address 0x%lx\n", pmd, addr); + return -1; + } + + /* + * We always need to mask upper 32bits of pmd because value is random + */ + pmd_tmp = child->thread.pmod[pmd]+(child->thread.pmd[pmd]& perf_ovfl_val); + + /*printk(__FUNCTION__" child=%d reading pmd[%ld]=%lx\n", child->pid, pmd, pmd_tmp);*/ + + ptr = &pmd_tmp; + } +#endif + if (write_access) *ptr = *data; else @@ -996,10 +1105,12 @@ ret = -ESRCH; if (!(child->ptrace & PT_PTRACED)) goto out_tsk; + if (child->state != TASK_STOPPED) { - if (request != PTRACE_KILL) + if (request != PTRACE_KILL && request != PTRACE_PEEKUSR) goto out_tsk; } + if (child->p_pptr != current) goto out_tsk; diff -urN linux-2.4.0-test9/arch/ia64/kernel/sal.c linux-2.4.0-test9-lia/arch/ia64/kernel/sal.c --- linux-2.4.0-test9/arch/ia64/kernel/sal.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/sal.c Wed Oct 4 21:37:41 2000 @@ -34,6 +34,7 @@ } ia64_sal_handler ia64_sal = (ia64_sal_handler) default_handler; +ia64_sal_desc_ptc_t *ia64_ptc_domain_info; const char * ia64_sal_strerror (long status) @@ -125,6 +126,10 @@ #endif ia64_pal_handler_init(__va(ep->pal_proc)); ia64_sal_handler_init(__va(ep->sal_proc), __va(ep->gp)); + break; + + case SAL_DESC_PTC: + ia64_ptc_domain_info = (ia64_sal_desc_ptc_t *)p; break; case SAL_DESC_AP_WAKEUP: diff -urN linux-2.4.0-test9/arch/ia64/kernel/setup.c linux-2.4.0-test9-lia/arch/ia64/kernel/setup.c --- linux-2.4.0-test9/arch/ia64/kernel/setup.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/setup.c Wed Oct 4 21:37:50 2000 @@ -36,6 +36,7 @@ #include #include #include +#include #ifdef CONFIG_BLK_DEV_RAM # include @@ -43,7 +44,7 @@ extern char _end; -/* cpu_data[bootstrap_processor] is data for the bootstrap processor: */ +/* cpu_data[0] is data for the bootstrap processor: */ struct cpuinfo_ia64 cpu_data[NR_CPUS]; unsigned long ia64_cycles_per_usec; @@ -56,6 +57,8 @@ volatile unsigned long cpu_online_map; #endif +unsigned long ia64_iobase; /* virtual address for I/O accesses */ + #define COMMAND_LINE_SIZE 512 char saved_command_line[COMMAND_LINE_SIZE]; /* used in proc filesystem */ @@ -111,6 +114,7 @@ void __init setup_arch (char **cmdline_p) { + extern unsigned long ia64_iobase; unsigned long max_pfn, bootmap_start, bootmap_size; unw_init(); @@ -157,7 +161,7 @@ if (initrd_start >= PAGE_OFFSET) printk("Warning: boot loader passed virtual address " "for initrd, please upgrade the loader\n"); - } else + else #endif /* * The loader ONLY passes physical addresses @@ -215,9 +219,16 @@ ia64_sal_init(efi.sal_systab); #ifdef CONFIG_SMP - bootstrap_processor = hard_smp_processor_id(); - current->processor = bootstrap_processor; + current->processor = 0; + cpu_physical_id(0) = hard_smp_processor_id(); #endif + /* + * Set `iobase' to the appropriate address in region 6 + * (uncached access range) + */ + __asm__ ("mov %0=ar.k0;;" : "=r"(ia64_iobase)); + ia64_iobase = __IA64_UNCACHED_OFFSET | (ia64_iobase & ~PAGE_OFFSET); + cpu_init(); /* initialize the bootstrap CPU */ #ifdef CONFIG_IA64_GENERIC @@ -259,6 +270,11 @@ int get_cpuinfo (char *buffer) { +#ifdef CONFIG_SMP +# define lps c->loops_per_sec +#else +# define lps loops_per_sec +#endif char family[32], model[32], features[128], *cp, *p = buffer; struct cpuinfo_ia64 *c; unsigned long mask; @@ -309,7 +325,7 @@ features, c->ppn, c->number, c->proc_freq / 1000000, c->proc_freq % 1000000, c->itc_freq / 1000000, c->itc_freq % 1000000, - loops_per_sec() / 500000, (loops_per_sec() / 5000) % 100); + lps / 500000, (lps / 5000) % 100); } return p - buffer; } @@ -371,8 +387,8 @@ #endif phys_addr_size = vm1.pal_vm_info_1_s.phys_add_size; } - printk("processor implements %lu virtual and %lu physical address bits\n", - impl_va_msb + 1, phys_addr_size); + printk("CPU %d: %lu virtual and %lu physical address bits\n", + smp_processor_id(), impl_va_msb + 1, phys_addr_size); c->unimpl_va_mask = ~((7L<<61) | ((1L << (impl_va_msb + 1)) - 1)); c->unimpl_pa_mask = ~((1L<<63) | ((1L << phys_addr_size) - 1)); @@ -405,9 +421,12 @@ * do NOT defer TLB misses, page-not-present, access bit, or * debug faults but kernel code should not rely on any * particular setting of these bits. - */ ia64_set_dcr(IA64_DCR_DR | IA64_DCR_DK | IA64_DCR_DX | IA64_DCR_PP); + */ + ia64_set_dcr(IA64_DCR_DR | IA64_DCR_DK | IA64_DCR_DX ); +#ifndef CONFIG_SMP ia64_set_fpu_owner(0); /* initialize ar.k5 */ +#endif atomic_inc(&init_mm.mm_count); current->active_mm = &init_mm; diff -urN linux-2.4.0-test9/arch/ia64/kernel/signal.c linux-2.4.0-test9-lia/arch/ia64/kernel/signal.c --- linux-2.4.0-test9/arch/ia64/kernel/signal.c Fri Sep 8 14:34:53 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/signal.c Wed Sep 13 13:40:38 2000 @@ -147,11 +147,12 @@ ia64_put_nat_bits(&scr->pt, &scr->sw, nat); /* restore the original scratch NaT bits */ #endif - if (flags & IA64_SC_FLAG_FPH_VALID) { - struct task_struct *fpu_owner = ia64_get_fpu_owner(); + if ((flags & IA64_SC_FLAG_FPH_VALID) != 0) { + struct ia64_psr *psr = ia64_psr(&scr->pt); __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16); - if (fpu_owner == current) { + if (!psr->dfh) { + psr->mfh = 0; __ia64_load_fpu(current->thread.fph); } } @@ -235,9 +236,12 @@ goto give_sigsegv; sigdelsetmask(&set, ~_BLOCKABLE); + spin_lock_irq(¤t->sigmask_lock); - current->blocked = set; - recalc_sigpending(current); + { + current->blocked = set; + recalc_sigpending(current); + } spin_unlock_irq(¤t->sigmask_lock); if (restore_sigcontext(sc, scr)) @@ -274,7 +278,6 @@ static long setup_sigcontext (struct sigcontext *sc, sigset_t *mask, struct sigscratch *scr) { - struct task_struct *fpu_owner = ia64_get_fpu_owner(); unsigned long flags = 0, ifs, nat; long err; @@ -286,11 +289,9 @@ /* if cr_ifs isn't valid, we got here through a syscall */ flags |= IA64_SC_FLAG_IN_SYSCALL; } - if ((fpu_owner == current) || (current->thread.flags & IA64_THREAD_FPH_VALID)) { + ia64_flush_fph(current); + if ((current->thread.flags & IA64_THREAD_FPH_VALID)) { flags |= IA64_SC_FLAG_FPH_VALID; - if (fpu_owner == current) { - __ia64_save_fpu(current->thread.fph); - } __copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16); } @@ -425,9 +426,11 @@ if (!(ka->sa.sa_flags & SA_NODEFER)) { spin_lock_irq(¤t->sigmask_lock); - sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask); - sigaddset(¤t->blocked, sig); - recalc_sigpending(current); + { + sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask); + sigaddset(¤t->blocked, sig); + recalc_sigpending(current); + } spin_unlock_irq(¤t->sigmask_lock); } return 1; diff -urN linux-2.4.0-test9/arch/ia64/kernel/smp.c linux-2.4.0-test9-lia/arch/ia64/kernel/smp.c --- linux-2.4.0-test9/arch/ia64/kernel/smp.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/smp.c Wed Oct 4 21:38:41 2000 @@ -6,6 +6,8 @@ * * Lots of stuff stolen from arch/alpha/kernel/smp.c * + * 00/09/11 David Mosberger Do loops_per_sec calibration on each CPU. + * 00/08/23 Asit Mallick fixed logical processor id * 00/03/31 Rohit Seth Fixes for Bootstrap Processor & cpu_online_map * now gets done here (instead of setup.c) * 99/10/05 davidm Update to bring it in sync with new command-line processing scheme. @@ -27,6 +29,7 @@ #include #include #include +#include #include #include @@ -39,27 +42,31 @@ #include #include +extern void __init calibrate_delay(void); extern int cpu_idle(void * unused); -extern void _start(void); extern void machine_halt(void); +extern void start_ap(void); extern int cpu_now_booting; /* Used by head.S to find idle task */ extern volatile unsigned long cpu_online_map; /* Bitmap of available cpu's */ extern struct cpuinfo_ia64 cpu_data[NR_CPUS]; /* Duh... */ +struct smp_boot_data smp_boot_data __initdata; + spinlock_t kernel_flag = SPIN_LOCK_UNLOCKED; -struct smp_boot_data __initdata smp; -char __initdata no_int_routing = 0; +char __initdata no_int_routing; unsigned char smp_int_redirect; /* are INT and IPI redirectable by the chipset? */ -volatile int __cpu_number_map[NR_CPUS] = { -1, }; /* SAPIC ID -> Logical ID */ -volatile int __cpu_logical_map[NR_CPUS] = { -1, }; /* logical ID -> SAPIC ID */ +volatile int __cpu_physical_id[NR_CPUS] = { -1, }; /* Logical ID -> SAPIC ID */ int smp_num_cpus = 1; -int bootstrap_processor = -1; /* SAPIC ID of BSP */ -int smp_threads_ready = 0; /* Set when the idlers are all forked */ -cycles_t cacheflush_time = 0; +volatile int smp_threads_ready; /* Set when the idlers are all forked */ +cycles_t cacheflush_time; unsigned long ap_wakeup_vector = -1; /* External Int to use to wakeup AP's */ + +static volatile unsigned long cpu_callin_map; +static volatile int smp_commenced; + static int max_cpus = -1; /* Command line */ static unsigned long ipi_op[NR_CPUS]; struct smp_call_struct { @@ -135,6 +142,7 @@ static inline int pointer_lock(void *lock, void *data, int retry) { + volatile long *ptr = lock; again: if (cmpxchg_acq((void **) lock, 0, data) == 0) return 0; @@ -142,7 +150,7 @@ if (!retry) return -EBUSY; - while (*(void **) lock) + while (*ptr) ; goto again; @@ -275,12 +283,10 @@ send_IPI_allbutself(int op) { int i; - int cpu_id = 0; for (i = 0; i < smp_num_cpus; i++) { - cpu_id = __cpu_logical_map[i]; - if (cpu_id != smp_processor_id()) - send_IPI_single(cpu_id, op); + if (i != smp_processor_id()) + send_IPI_single(i, op); } } @@ -290,7 +296,7 @@ int i; for (i = 0; i < smp_num_cpus; i++) - send_IPI_single(__cpu_logical_map[i], op); + send_IPI_single(i, op); } static inline void @@ -335,7 +341,7 @@ smp_call_function_single (int cpuid, void (*func) (void *info), void *info, int retry, int wait) { struct smp_call_struct data; - long timeout; + unsigned long timeout; int cpus = 1; if (cpuid == smp_processor_id()) { @@ -387,7 +393,7 @@ smp_call_function (void (*func) (void *info), void *info, int retry, int wait) { struct smp_call_struct data; - long timeout; + unsigned long timeout; int cpus = smp_num_cpus - 1; if (cpus == 0) @@ -453,80 +459,16 @@ if (--data->prof_counter <= 0) { data->prof_counter = data->prof_multiplier; - /* - * update_process_times() expects us to have done irq_enter(). - * Besides, if we don't timer interrupts ignore the global - * interrupt lock, which is the WrongThing (tm) to do. - */ - irq_enter(cpu, 0); update_process_times(user); - irq_exit(cpu, 0); } } -static inline void __init -smp_calibrate_delay(int cpuid) -{ - struct cpuinfo_ia64 *c = &cpu_data[cpuid]; -#if 0 - unsigned long old = loops_per_sec; - extern void calibrate_delay(void); - - loops_per_sec = 0; - calibrate_delay(); - c->loops_per_sec = loops_per_sec; - loops_per_sec = old; -#else - c->loops_per_sec = loops_per_sec; -#endif -} - -/* - * SAL shoves the AP's here when we start them. Physical mode, no kernel TR, - * no RRs set, better than even chance that psr is bogus. Fix all that and - * call _start. In effect, pretend to be lilo. - * - * Stolen from lilo_start.c. Thanks David! - */ -void -start_ap(void) -{ - unsigned long flags; - - /* - * Install a translation register that identity maps the - * kernel's 256MB page(s). - */ - ia64_clear_ic(flags); - ia64_set_rr( 0, (0x1000 << 8) | (_PAGE_SIZE_1M << 2)); - ia64_set_rr(PAGE_OFFSET, (ia64_rid(0, PAGE_OFFSET) << 8) | (_PAGE_SIZE_256M << 2)); - ia64_srlz_d(); - ia64_itr(0x3, 1, PAGE_OFFSET, - pte_val(mk_pte_phys(0, __pgprot(__DIRTY_BITS|_PAGE_PL_0|_PAGE_AR_RWX))), - _PAGE_SIZE_256M); - ia64_srlz_i(); - - flags = (IA64_PSR_IT | IA64_PSR_IC | IA64_PSR_DT | IA64_PSR_RT | IA64_PSR_DFH | - IA64_PSR_BN); - - asm volatile ("movl r8 = 1f\n" - ";;\n" - "mov cr.ipsr=%0\n" - "mov cr.iip=r8\n" - "mov cr.ifs=r0\n" - ";;\n" - "rfi;;" - "1:\n" - "movl r1 = __gp" :: "r"(flags) : "r8"); - _start(); -} - /* * AP's start using C here. */ void __init -smp_callin(void) +smp_callin (void) { extern void ia64_rid_init(void); extern void ia64_init_itm(void); @@ -534,12 +476,17 @@ #ifdef CONFIG_PERFMON extern void perfmon_init_percpu(void); #endif + int cpu = smp_processor_id(); - efi_map_pal_code(); + if (test_and_set_bit(cpu, &cpu_online_map)) { + printk("CPU#%d already initialized!\n", cpu); + machine_halt(); + } + efi_map_pal_code(); cpu_init(); - smp_setup_percpu_timer(smp_processor_id()); + smp_setup_percpu_timer(cpu); /* setup the CPU local timer tick */ ia64_init_itm(); @@ -552,16 +499,16 @@ ia64_set_lrr0(0, 1); ia64_set_lrr1(0, 1); - if (test_and_set_bit(smp_processor_id(), &cpu_online_map)) { - printk("CPU#%d already initialized!\n", smp_processor_id()); - machine_halt(); - } - while (!smp_threads_ready) - mb(); - local_irq_enable(); /* Interrupts have been off until now */ - smp_calibrate_delay(smp_processor_id()); - printk("SMP: CPU %d starting idle loop\n", smp_processor_id()); + + calibrate_delay(); + my_cpu_data.loops_per_sec = loops_per_sec; + + /* allow the master to continue */ + set_bit(cpu, &cpu_callin_map); + + /* finally, wait for the BP to finish initialization: */ + while (!smp_commenced); cpu_idle(NULL); } @@ -583,14 +530,13 @@ } /* - * Bring one cpu online. - * - * NB: cpuid is the CPU BUS-LOCAL ID, not the entire SAPIC ID. See asm/smp.h. + * Bring one cpu online. Return 0 if this fails for any reason. */ static int __init -smp_boot_one_cpu(int cpuid, int cpunum) +smp_boot_one_cpu(int cpu) { struct task_struct *idle; + int cpu_phys_id = cpu_physical_id(cpu); long timeout; /* @@ -603,50 +549,37 @@ * Sheesh . . . */ if (fork_by_hand() < 0) - panic("failed fork for CPU %d", cpuid); + panic("failed fork for CPU 0x%x", cpu_phys_id); /* * We remove it from the pidhash and the runqueue * once we got the process: */ idle = init_task.prev_task; if (!idle) - panic("No idle process for CPU %d", cpuid); - init_tasks[cpunum] = idle; + panic("No idle process for CPU 0x%x", cpu_phys_id); + init_tasks[cpu] = idle; del_from_runqueue(idle); unhash_process(idle); /* Schedule the first task manually. */ - idle->processor = cpuid; + idle->processor = cpu; idle->has_cpu = 1; /* Let _start know what logical CPU we're booting (offset into init_tasks[] */ - cpu_now_booting = cpunum; - + cpu_now_booting = cpu; + /* Kick the AP in the butt */ - ipi_send(cpuid, ap_wakeup_vector, IA64_IPI_DM_INT, 0); - ia64_srlz_i(); - mb(); + ipi_send(cpu, ap_wakeup_vector, IA64_IPI_DM_INT, 0); - /* - * OK, wait a bit for that CPU to finish staggering about. smp_callin() will - * call cpu_init() which will set a bit for this AP. When that bit flips, the AP - * is waiting for smp_threads_ready to be 1 and we can move on. - */ + /* wait up to 10s for the AP to start */ for (timeout = 0; timeout < 100000; timeout++) { - if (test_bit(cpuid, &cpu_online_map)) - goto alive; + if (test_bit(cpu, &cpu_callin_map)) + return 1; udelay(100); - barrier(); } - printk(KERN_ERR "SMP: Processor %d is stuck.\n", cpuid); + printk(KERN_ERR "SMP: Processor 0x%x is stuck.\n", cpu_phys_id); return 0; - -alive: - /* Remember the AP data */ - __cpu_number_map[cpuid] = cpunum; - __cpu_logical_map[cpunum] = cpuid; - return 1; } @@ -663,21 +596,20 @@ unsigned long bogosum; /* Take care of some initial bookkeeping. */ - memset(&__cpu_number_map, -1, sizeof(__cpu_number_map)); - memset(&__cpu_logical_map, -1, sizeof(__cpu_logical_map)); + memset(&__cpu_physical_id, -1, sizeof(__cpu_physical_id)); memset(&ipi_op, 0, sizeof(ipi_op)); - /* Setup BSP mappings */ - __cpu_number_map[bootstrap_processor] = 0; - __cpu_logical_map[0] = bootstrap_processor; + /* Setup BP mappings */ + __cpu_physical_id[0] = hard_smp_processor_id(); - smp_calibrate_delay(smp_processor_id()); + /* on the BP, the kernel already called calibrate_delay_loop() in init/main.c */ + my_cpu_data.loops_per_sec = loops_per_sec; #if 0 smp_tune_scheduling(); #endif - smp_setup_percpu_timer(bootstrap_processor); + smp_setup_percpu_timer(0); - if (test_and_set_bit(bootstrap_processor, &cpu_online_map)) { + if (test_and_set_bit(0, &cpu_online_map)) { printk("CPU#%d already initialized!\n", smp_processor_id()); machine_halt(); } @@ -692,16 +624,18 @@ if (max_cpus != -1) printk("Limiting CPUs to %d\n", max_cpus); - if (smp.cpu_count > 1) { + if (smp_boot_data.cpu_count > 1) { printk(KERN_INFO "SMP: starting up secondaries.\n"); - for (i = 0; i < NR_CPUS; i++) { - if (smp.cpu_map[i] == -1 || - smp.cpu_map[i] == bootstrap_processor) + for (i = 0; i < smp_boot_data.cpu_count; i++) { + /* skip performance restricted and bootstrap cpu: */ + if (smp_boot_data.cpu_phys_id[i] == -1 + || smp_boot_data.cpu_phys_id[i] == hard_smp_processor_id()) continue; - if (smp_boot_one_cpu(smp.cpu_map[i], cpu_count) == 0) - continue; + cpu_physical_id(cpu_count) = smp_boot_data.cpu_phys_id[i]; + if (!smp_boot_one_cpu(cpu_count)) + continue; /* failed */ cpu_count++; /* Count good CPUs only... */ /* @@ -731,20 +665,12 @@ } /* - * Called from main.c by each AP. + * Called when the BP is just about to fire off init. */ void __init smp_commence(void) { - mb(); -} - -/* - * Not used; part of the i386 bringup - */ -void __init -initialize_secondary(void) -{ + smp_commenced = 1; } int __init @@ -759,9 +685,7 @@ * * Setup of the IPI irq handler is done in irq.c:init_IRQ_SMP(). * - * So this just gets the BSP SAPIC ID and print's it out. Dull, huh? - * - * Not anymore. This also registers the AP OS_MC_REDVEZ address with SAL. + * This also registers the AP OS_MC_REDVEZ address with SAL. */ void __init init_smp_config(void) @@ -771,9 +695,6 @@ unsigned long gp; } *ap_startup; long sal_ret; - - /* Grab the BSP ID */ - bootstrap_processor = hard_smp_processor_id(); /* Tell SAL where to drop the AP's. */ ap_startup = (struct fptr *) start_ap; diff -urN linux-2.4.0-test9/arch/ia64/kernel/smpboot.c linux-2.4.0-test9-lia/arch/ia64/kernel/smpboot.c --- linux-2.4.0-test9/arch/ia64/kernel/smpboot.c Fri Apr 21 15:21:24 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/smpboot.c Wed Oct 4 21:38:56 2000 @@ -1,2 +1,76 @@ -unsigned long cpu_online_map; +/* + * SMP Support + * + * Application processor startup code, moved from smp.c to better support kernel profile + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * SAL shoves the AP's here when we start them. Physical mode, no kernel TR, + * no RRs set, better than even chance that psr is bogus. Fix all that and + * call _start. In effect, pretend to be lilo. + * + * Stolen from lilo_start.c. Thanks David! + */ +void +start_ap(void) +{ + extern void _start (void); + unsigned long flags; + + /* + * Install a translation register that identity maps the + * kernel's 256MB page(s). + */ + ia64_clear_ic(flags); + ia64_set_rr( 0, (0x1000 << 8) | (_PAGE_SIZE_1M << 2)); + ia64_set_rr(PAGE_OFFSET, (ia64_rid(0, PAGE_OFFSET) << 8) | (_PAGE_SIZE_256M << 2)); + ia64_srlz_d(); + ia64_itr(0x3, 1, PAGE_OFFSET, + pte_val(mk_pte_phys(0, __pgprot(__DIRTY_BITS|_PAGE_PL_0|_PAGE_AR_RWX))), + _PAGE_SIZE_256M); + ia64_srlz_i(); + + flags = (IA64_PSR_IT | IA64_PSR_IC | IA64_PSR_DT | IA64_PSR_RT | IA64_PSR_DFH | + IA64_PSR_BN); + + asm volatile ("movl r8 = 1f\n" + ";;\n" + "mov cr.ipsr=%0\n" + "mov cr.iip=r8\n" + "mov cr.ifs=r0\n" + ";;\n" + "rfi;;" + "1:\n" + "movl r1 = __gp" :: "r"(flags) : "r8"); + _start(); +} + diff -urN linux-2.4.0-test9/arch/ia64/kernel/sys_ia64.c linux-2.4.0-test9-lia/arch/ia64/kernel/sys_ia64.c --- linux-2.4.0-test9/arch/ia64/kernel/sys_ia64.c Wed Aug 2 18:54:02 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/sys_ia64.c Fri Sep 8 16:26:15 2000 @@ -147,7 +147,7 @@ struct pt_regs *regs = (struct pt_regs *) &stack; addr = do_mmap2(addr, len, prot, flags, fd, pgoff); - if (!IS_ERR(addr)) + if (!IS_ERR((void *) addr)) regs->r8 = 0; /* ensure large addresses are not mistaken as failures... */ return addr; } @@ -162,26 +162,12 @@ return -EINVAL; addr = do_mmap2(addr, len, prot, flags, fd, off >> PAGE_SHIFT); - if (!IS_ERR(addr)) + if (!IS_ERR((void *) addr)) regs->r8 = 0; /* ensure large addresses are not mistaken as failures... */ return addr; } asmlinkage long -sys_ioperm (unsigned long from, unsigned long num, int on) -{ - printk(KERN_ERR "sys_ioperm(from=%lx, num=%lx, on=%d)\n", from, num, on); - return -EIO; -} - -asmlinkage long -sys_iopl (int level, long arg1, long arg2, long arg3) -{ - printk(KERN_ERR "sys_iopl(level=%d)!\n", level); - return -ENOSYS; -} - -asmlinkage long sys_vm86 (long arg0, long arg1, long arg2, long arg3) { printk(KERN_ERR "sys_vm86(%lx, %lx, %lx, %lx)!\n", arg0, arg1, arg2, arg3); @@ -204,7 +190,7 @@ unsigned long addr; addr = sys_create_module (name_user, size); - if (!IS_ERR(addr)) + if (!IS_ERR((void *) addr)) regs->r8 = 0; /* ensure large addresses are not mistaken as failures... */ return addr; } diff -urN linux-2.4.0-test9/arch/ia64/kernel/time.c linux-2.4.0-test9-lia/arch/ia64/kernel/time.c --- linux-2.4.0-test9/arch/ia64/kernel/time.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/time.c Wed Sep 13 13:43:16 2000 @@ -183,7 +183,7 @@ #ifdef CONFIG_SMP smp_do_timer(regs); - if (smp_processor_id() == bootstrap_processor) + if (smp_processor_id() == 0) do_timer(regs); #else do_timer(regs); @@ -303,7 +303,7 @@ itc_freq = (platform_base_freq*itc_ratio.num)/itc_ratio.den; itm.delta = itc_freq / HZ; - printk("timer: CPU %d base freq=%lu.%03luMHz, ITC ratio=%lu/%lu, ITC freq=%lu.%03luMHz\n", + printk("CPU %d: base freq=%lu.%03luMHz, ITC ratio=%lu/%lu, ITC freq=%lu.%03luMHz\n", smp_processor_id(), platform_base_freq / 1000000, (platform_base_freq / 1000) % 1000, itc_ratio.num, itc_ratio.den, itc_freq / 1000000, (itc_freq / 1000) % 1000); diff -urN linux-2.4.0-test9/arch/ia64/kernel/traps.c linux-2.4.0-test9-lia/arch/ia64/kernel/traps.c --- linux-2.4.0-test9/arch/ia64/kernel/traps.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/traps.c Wed Oct 4 21:39:28 2000 @@ -192,38 +192,45 @@ } /* - * disabled_fp_fault() is called when a user-level process attempts to - * access one of the registers f32..f127 while it doesn't own the + * disabled_fph_fault() is called when a user-level process attempts + * to access one of the registers f32..f127 when it doesn't own the * fp-high register partition. When this happens, we save the current * fph partition in the task_struct of the fpu-owner (if necessary) * and then load the fp-high partition of the current task (if - * necessary). + * necessary). Note that the kernel has access to fph by the time we + * get here, as the IVT's "Diabled FP-Register" handler takes care of + * clearing psr.dfh. */ static inline void disabled_fph_fault (struct pt_regs *regs) { - struct task_struct *fpu_owner = ia64_get_fpu_owner(); + struct ia64_psr *psr = ia64_psr(regs); - /* first, clear psr.dfh and psr.mfh: */ - regs->cr_ipsr &= ~(IA64_PSR_DFH | IA64_PSR_MFH); - if (fpu_owner != current) { - ia64_set_fpu_owner(current); + /* first, grant user-level access to fph partition: */ + psr->dfh = 0; +#ifndef CONFIG_SMP + { + struct task_struct *fpu_owner = ia64_get_fpu_owner(); + + if (fpu_owner == current) + return; - if (fpu_owner && ia64_psr(ia64_task_regs(fpu_owner))->mfh) { - ia64_psr(ia64_task_regs(fpu_owner))->mfh = 0; - fpu_owner->thread.flags |= IA64_THREAD_FPH_VALID; - __ia64_save_fpu(fpu_owner->thread.fph); - } - if ((current->thread.flags & IA64_THREAD_FPH_VALID) != 0) { - __ia64_load_fpu(current->thread.fph); - } else { - __ia64_init_fpu(); - /* - * Set mfh because the state in thread.fph does not match - * the state in the fph partition. - */ - ia64_psr(regs)->mfh = 1; - } + if (fpu_owner) + ia64_flush_fph(fpu_owner); + + ia64_set_fpu_owner(current); + } +#endif /* !CONFIG_SMP */ + if ((current->thread.flags & IA64_THREAD_FPH_VALID) != 0) { + __ia64_load_fpu(current->thread.fph); + psr->mfh = 0; + } else { + __ia64_init_fpu(); + /* + * Set mfh because the state in thread.fph does not match the state in + * the fph partition. + */ + psr->mfh = 1; } } @@ -247,20 +254,21 @@ * kernel, so set those bits in the mask and set the low volatile * pointer to point to these registers. */ - fp_state.bitmask_low64 = 0xffc0; /* bit6..bit15 */ #ifndef FPSWA_BUG - fp_state.fp_state_low_volatile = ®s->f6; + fp_state.bitmask_low64 = 0x3c0; /* bit 6..9 */ + fp_state.fp_state_low_volatile = (fp_state_low_volatile_t *) ®s->f6; #else + fp_state.bitmask_low64 = 0xffc0; /* bit6..bit15 */ f6_15[0] = regs->f6; f6_15[1] = regs->f7; f6_15[2] = regs->f8; f6_15[3] = regs->f9; - __asm__ ("stf.spill %0=f10" : "=m"(f6_15[4])); - __asm__ ("stf.spill %0=f11" : "=m"(f6_15[5])); - __asm__ ("stf.spill %0=f12" : "=m"(f6_15[6])); - __asm__ ("stf.spill %0=f13" : "=m"(f6_15[7])); - __asm__ ("stf.spill %0=f14" : "=m"(f6_15[8])); - __asm__ ("stf.spill %0=f15" : "=m"(f6_15[9])); + __asm__ ("stf.spill %0=f10%P0" : "=m"(f6_15[4])); + __asm__ ("stf.spill %0=f11%P0" : "=m"(f6_15[5])); + __asm__ ("stf.spill %0=f12%P0" : "=m"(f6_15[6])); + __asm__ ("stf.spill %0=f13%P0" : "=m"(f6_15[7])); + __asm__ ("stf.spill %0=f14%P0" : "=m"(f6_15[8])); + __asm__ ("stf.spill %0=f15%P0" : "=m"(f6_15[9])); fp_state.fp_state_low_volatile = (fp_state_low_volatile_t *) f6_15; #endif /* @@ -279,12 +287,12 @@ (unsigned long *) isr, (unsigned long *) pr, (unsigned long *) ifs, &fp_state); #ifdef FPSWA_BUG - __asm__ ("ldf.fill f10=%0" :: "m"(f6_15[4])); - __asm__ ("ldf.fill f11=%0" :: "m"(f6_15[5])); - __asm__ ("ldf.fill f12=%0" :: "m"(f6_15[6])); - __asm__ ("ldf.fill f13=%0" :: "m"(f6_15[7])); - __asm__ ("ldf.fill f14=%0" :: "m"(f6_15[8])); - __asm__ ("ldf.fill f15=%0" :: "m"(f6_15[9])); + __asm__ ("ldf.fill f10=%0%P0" :: "m"(f6_15[4])); + __asm__ ("ldf.fill f11=%0%P0" :: "m"(f6_15[5])); + __asm__ ("ldf.fill f12=%0%P0" :: "m"(f6_15[6])); + __asm__ ("ldf.fill f13=%0%P0" :: "m"(f6_15[7])); + __asm__ ("ldf.fill f14=%0%P0" :: "m"(f6_15[8])); + __asm__ ("ldf.fill f15=%0%P0" :: "m"(f6_15[9])); regs->f6 = f6_15[0]; regs->f7 = f6_15[1]; regs->f8 = f6_15[2]; diff -urN linux-2.4.0-test9/arch/ia64/kernel/unaligned.c linux-2.4.0-test9-lia/arch/ia64/kernel/unaligned.c --- linux-2.4.0-test9/arch/ia64/kernel/unaligned.c Wed Aug 2 18:54:02 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/unaligned.c Wed Sep 13 13:43:58 2000 @@ -278,9 +278,9 @@ bspstore = (unsigned long *)regs->ar_bspstore; DPRINT(("rse_slot_num=0x%lx\n",ia64_rse_slot_num((unsigned long *)sw->ar_bspstore))); - DPRINT(("kbs=%p nlocals=%ld\n", kbs, nlocals)); + DPRINT(("kbs=%p nlocals=%ld\n", (void *) kbs, nlocals)); DPRINT(("bspstore next rnat slot %p\n", - ia64_rse_rnat_addr((unsigned long *)sw->ar_bspstore))); + (void *) ia64_rse_rnat_addr((unsigned long *)sw->ar_bspstore))); DPRINT(("on_kbs=%ld rnats=%ld\n", on_kbs, ((sw->ar_bspstore-(unsigned long)kbs)>>3) - on_kbs)); @@ -292,7 +292,7 @@ addr = slot = ia64_rse_skip_regs(bsp, r1 - 32); DPRINT(("ubs_end=%p bsp=%p addr=%p slot=0x%lx\n", - ubs_end, bsp, addr, ia64_rse_slot_num(addr))); + (void *) ubs_end, (void *) bsp, (void *) addr, ia64_rse_slot_num(addr))); ia64_poke(regs, current, (unsigned long)addr, val); @@ -303,7 +303,7 @@ ia64_peek(regs, current, (unsigned long)addr, &rnats); DPRINT(("rnat @%p = 0x%lx nat=%d rnatval=%lx\n", - addr, rnats, nat, rnats &ia64_rse_slot_num(slot))); + (void *) addr, rnats, nat, rnats &ia64_rse_slot_num(slot))); if (nat) { rnats |= __IA64_UL(1) << ia64_rse_slot_num(slot); @@ -312,7 +312,7 @@ } ia64_poke(regs, current, (unsigned long)addr, rnats); - DPRINT(("rnat changed to @%p = 0x%lx\n", addr, rnats)); + DPRINT(("rnat changed to @%p = 0x%lx\n", (void *) addr, rnats)); } @@ -373,7 +373,7 @@ addr = slot = ia64_rse_skip_regs(bsp, r1 - 32); DPRINT(("ubs_end=%p bsp=%p addr=%p slot=0x%lx\n", - ubs_end, bsp, addr, ia64_rse_slot_num(addr))); + (void *) ubs_end, (void *) bsp, (void *) addr, ia64_rse_slot_num(addr))); ia64_peek(regs, current, (unsigned long)addr, val); @@ -383,7 +383,7 @@ addr = ia64_rse_rnat_addr(addr); ia64_peek(regs, current, (unsigned long)addr, &rnats); - DPRINT(("rnat @%p = 0x%lx\n", addr, rnats)); + DPRINT(("rnat @%p = 0x%lx\n", (void *) addr, rnats)); if (nat) *nat = rnats >> ia64_rse_slot_num(slot) & 0x1; @@ -437,13 +437,13 @@ * UNAT bit_pos = GR[r3]{8:3} form EAS-2.4 */ bitmask = __IA64_UL(1) << (addr >> 3 & 0x3f); - DPRINT(("*0x%lx=0x%lx NaT=%d prev_unat @%p=%lx\n", addr, val, nat, unat, *unat)); + DPRINT(("*0x%lx=0x%lx NaT=%d prev_unat @%p=%lx\n", addr, val, nat, (void *) unat, *unat)); if (nat) { *unat |= bitmask; } else { *unat &= ~bitmask; } - DPRINT(("*0x%lx=0x%lx NaT=%d new unat: %p=%lx\n", addr, val, nat, unat,*unat)); + DPRINT(("*0x%lx=0x%lx NaT=%d new unat: %p=%lx\n", addr, val, nat, (void *) unat,*unat)); } #define IA64_FPH_OFFS(r) (r - IA64_FIRST_ROTATING_FR) @@ -455,16 +455,15 @@ unsigned long addr; /* - * From EAS-2.5: FPDisableFault has higher priority than - * Unaligned Fault. Thus, when we get here, we know the partition is - * enabled. + * From EAS-2.5: FPDisableFault has higher priority than Unaligned + * Fault. Thus, when we get here, we know the partition is enabled. + * To update f32-f127, there are three choices: + * + * (1) save f32-f127 to thread.fph and update the values there + * (2) use a gigantic switch statement to directly access the registers + * (3) generate code on the fly to update the desired register * - * The registers [32-127] are ususally saved in the tss. When get here, - * they are NECESSARILY live because they are only saved explicitely. - * We have 3 ways of updating the values: force a save of the range - * in tss, use a gigantic switch/case statement or generate code on the - * fly to store to the right register. - * For now, we are using the (slow) save/restore way. + * For now, we are using approach (1). */ if (regnum >= IA64_FIRST_ROTATING_FR) { ia64_sync_fph(current); @@ -491,7 +490,6 @@ * let's do it for safety. */ regs->cr_ipsr |= IA64_PSR_MFL; - } } @@ -522,12 +520,12 @@ * Unaligned Fault. Thus, when we get here, we know the partition is * enabled. * - * When regnum > 31, the register is still live and - * we need to force a save to the tss to get access to it. - * See discussion in setfpreg() for reasons and other ways of doing this. + * When regnum > 31, the register is still live and we need to force a save + * to current->thread.fph to get access to it. See discussion in setfpreg() + * for reasons and other ways of doing this. */ if (regnum >= IA64_FIRST_ROTATING_FR) { - ia64_sync_fph(current); + ia64_flush_fph(current); *fpval = current->thread.fph[IA64_FPH_OFFS(regnum)]; } else { /* @@ -1084,9 +1082,9 @@ /* * XXX fixme * - * A possible optimization would be to drop fpr_final - * and directly use the storage from the saved context i.e., - * the actual final destination (pt_regs, switch_stack or tss). + * A possible optimization would be to drop fpr_final and directly + * use the storage from the saved context i.e., the actual final + * destination (pt_regs, switch_stack or thread structure). */ setfpreg(ld->r1, &fpr_final[0], regs); setfpreg(ld->imm, &fpr_final[1], regs); @@ -1212,9 +1210,9 @@ /* * XXX fixme * - * A possible optimization would be to drop fpr_final - * and directly use the storage from the saved context i.e., - * the actual final destination (pt_regs, switch_stack or tss). + * A possible optimization would be to drop fpr_final and directly + * use the storage from the saved context i.e., the actual final + * destination (pt_regs, switch_stack or thread structure). */ setfpreg(ld->r1, &fpr_final, regs); } @@ -1223,9 +1221,7 @@ * check for updates on any loads */ if (ld->op == 0x7 || ld->m) - emulate_load_updates(ld->op == 0x7 ? UPD_IMMEDIATE: UPD_REG, - ld, regs, ifa); - + emulate_load_updates(ld->op == 0x7 ? UPD_IMMEDIATE: UPD_REG, ld, regs, ifa); /* * invalidate ALAT entry in case of advanced floating point loads diff -urN linux-2.4.0-test9/arch/ia64/kernel/unwind.c linux-2.4.0-test9-lia/arch/ia64/kernel/unwind.c --- linux-2.4.0-test9/arch/ia64/kernel/unwind.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/unwind.c Wed Oct 4 21:39:58 2000 @@ -66,7 +66,7 @@ #define UNW_STATS 0 /* WARNING: this disabled interrupts for long time-spans!! */ #if UNW_DEBUG - static long unw_debug_level = 1; + static long unw_debug_level = 255; # define debug(level,format...) if (unw_debug_level > level) printk(format) # define dprintk(format...) printk(format) # define inline @@ -111,7 +111,7 @@ struct unw_table kernel_table; /* hash table that maps instruction pointer to script index: */ - unw_hash_index_t hash[UNW_HASH_SIZE]; + unsigned short hash[UNW_HASH_SIZE]; /* script cache: */ struct unw_script cache[UNW_CACHE_SIZE]; @@ -152,47 +152,47 @@ UNW_REG_UNAT, UNW_REG_LC, UNW_REG_FPSR, UNW_REG_PRI_UNAT_GR }, preg_index: { - struct_offset(struct unw_frame_info, pri_unat)/8, /* PRI_UNAT_GR */ - struct_offset(struct unw_frame_info, pri_unat)/8, /* PRI_UNAT_MEM */ - struct_offset(struct unw_frame_info, pbsp)/8, - struct_offset(struct unw_frame_info, bspstore)/8, - struct_offset(struct unw_frame_info, pfs)/8, - struct_offset(struct unw_frame_info, rnat)/8, + struct_offset(struct unw_frame_info, pri_unat_loc)/8, /* PRI_UNAT_GR */ + struct_offset(struct unw_frame_info, pri_unat_loc)/8, /* PRI_UNAT_MEM */ + struct_offset(struct unw_frame_info, bsp_loc)/8, + struct_offset(struct unw_frame_info, bspstore_loc)/8, + struct_offset(struct unw_frame_info, pfs_loc)/8, + struct_offset(struct unw_frame_info, rnat_loc)/8, struct_offset(struct unw_frame_info, psp)/8, - struct_offset(struct unw_frame_info, rp)/8, + struct_offset(struct unw_frame_info, rp_loc)/8, struct_offset(struct unw_frame_info, r4)/8, struct_offset(struct unw_frame_info, r5)/8, struct_offset(struct unw_frame_info, r6)/8, struct_offset(struct unw_frame_info, r7)/8, - struct_offset(struct unw_frame_info, unat)/8, - struct_offset(struct unw_frame_info, pr)/8, - struct_offset(struct unw_frame_info, lc)/8, - struct_offset(struct unw_frame_info, fpsr)/8, - struct_offset(struct unw_frame_info, b1)/8, - struct_offset(struct unw_frame_info, b2)/8, - struct_offset(struct unw_frame_info, b3)/8, - struct_offset(struct unw_frame_info, b4)/8, - struct_offset(struct unw_frame_info, b5)/8, - struct_offset(struct unw_frame_info, f2)/8, - struct_offset(struct unw_frame_info, f3)/8, - struct_offset(struct unw_frame_info, f4)/8, - struct_offset(struct unw_frame_info, f5)/8, - struct_offset(struct unw_frame_info, fr[16 - 16])/8, - struct_offset(struct unw_frame_info, fr[17 - 16])/8, - struct_offset(struct unw_frame_info, fr[18 - 16])/8, - struct_offset(struct unw_frame_info, fr[19 - 16])/8, - struct_offset(struct unw_frame_info, fr[20 - 16])/8, - struct_offset(struct unw_frame_info, fr[21 - 16])/8, - struct_offset(struct unw_frame_info, fr[22 - 16])/8, - struct_offset(struct unw_frame_info, fr[23 - 16])/8, - struct_offset(struct unw_frame_info, fr[24 - 16])/8, - struct_offset(struct unw_frame_info, fr[25 - 16])/8, - struct_offset(struct unw_frame_info, fr[26 - 16])/8, - struct_offset(struct unw_frame_info, fr[27 - 16])/8, - struct_offset(struct unw_frame_info, fr[28 - 16])/8, - struct_offset(struct unw_frame_info, fr[29 - 16])/8, - struct_offset(struct unw_frame_info, fr[30 - 16])/8, - struct_offset(struct unw_frame_info, fr[31 - 16])/8, + struct_offset(struct unw_frame_info, unat_loc)/8, + struct_offset(struct unw_frame_info, pr_loc)/8, + struct_offset(struct unw_frame_info, lc_loc)/8, + struct_offset(struct unw_frame_info, fpsr_loc)/8, + struct_offset(struct unw_frame_info, b1_loc)/8, + struct_offset(struct unw_frame_info, b2_loc)/8, + struct_offset(struct unw_frame_info, b3_loc)/8, + struct_offset(struct unw_frame_info, b4_loc)/8, + struct_offset(struct unw_frame_info, b5_loc)/8, + struct_offset(struct unw_frame_info, f2_loc)/8, + struct_offset(struct unw_frame_info, f3_loc)/8, + struct_offset(struct unw_frame_info, f4_loc)/8, + struct_offset(struct unw_frame_info, f5_loc)/8, + struct_offset(struct unw_frame_info, fr_loc[16 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[17 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[18 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[19 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[20 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[21 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[22 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[23 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[24 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[25 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[26 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[27 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[28 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[29 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[30 - 16])/8, + struct_offset(struct unw_frame_info, fr_loc[31 - 16])/8, }, hash : { [0 ... UNW_HASH_SIZE - 1] = -1 }, #if UNW_DEBUG @@ -211,6 +211,27 @@ /* Unwind accessors. */ +/* + * Returns offset of rREG in struct pt_regs. + */ +static inline unsigned long +pt_regs_off (unsigned long reg) +{ + unsigned long off =0; + + if (reg >= 1 && reg <= 3) + off = struct_offset(struct pt_regs, r1) + 8*(reg - 1); + else if (reg <= 11) + off = struct_offset(struct pt_regs, r8) + 8*(reg - 8); + else if (reg <= 15) + off = struct_offset(struct pt_regs, r12) + 8*(reg - 12); + else if (reg <= 31) + off = struct_offset(struct pt_regs, r16) + 8*(reg - 16); + else + dprintk("unwind: bad scratch reg r%lu\n", reg); + return off; +} + int unw_access_gr (struct unw_frame_info *info, int regnum, unsigned long *val, char *nat, int write) { @@ -251,26 +272,23 @@ } /* fall through */ case UNW_NAT_NONE: + dummy_nat = 0; nat_addr = &dummy_nat; break; - case UNW_NAT_SCRATCH: - if (info->pri_unat) - nat_addr = info->pri_unat; - else - nat_addr = &info->sw->caller_unat; - case UNW_NAT_PRI_UNAT: + case UNW_NAT_MEMSTK: nat_mask = (1UL << ((long) addr & 0x1f8)/8); break; - case UNW_NAT_STACKED: + case UNW_NAT_REGSTK: nat_addr = ia64_rse_rnat_addr(addr); if ((unsigned long) addr < info->regstk.limit || (unsigned long) addr >= info->regstk.top) { - dprintk("unwind: 0x%p outside of regstk " - "[0x%lx-0x%lx)\n", addr, - info->regstk.limit, info->regstk.top); + dprintk("unwind: %p outside of regstk " + "[0x%lx-0x%lx)\n", (void *) addr, + info->regstk.limit, + info->regstk.top); return -1; } if ((unsigned long) nat_addr >= info->regstk.top) @@ -289,18 +307,11 @@ pt = (struct pt_regs *) info->psp - 1; else pt = (struct pt_regs *) info->sp - 1; - if (regnum <= 3) - addr = &pt->r1 + (regnum - 1); - else if (regnum <= 11) - addr = &pt->r8 + (regnum - 8); - else if (regnum <= 15) - addr = &pt->r12 + (regnum - 12); - else - addr = &pt->r16 + (regnum - 16); - if (info->pri_unat) - nat_addr = info->pri_unat; + addr = (unsigned long *) ((long) pt + pt_regs_off(regnum)); + if (info->pri_unat_loc) + nat_addr = info->pri_unat_loc; else - nat_addr = &info->sw->caller_unat; + nat_addr = &info->sw->ar_unat; nat_mask = (1UL << ((long) addr & 0x1f8)/8); } } else { @@ -320,7 +331,10 @@ if (write) { *addr = *val; - *nat_addr = (*nat_addr & ~nat_mask) | nat_mask; + if (*nat) + *nat_addr |= nat_mask; + else + *nat_addr &= ~nat_mask; } else { *val = *addr; *nat = (*nat_addr & nat_mask) != 0; @@ -346,7 +360,7 @@ /* preserved: */ case 1: case 2: case 3: case 4: case 5: - addr = *(&info->b1 + (regnum - 1)); + addr = *(&info->b1_loc + (regnum - 1)); if (!addr) addr = &info->sw->b1 + (regnum - 1); break; @@ -379,7 +393,7 @@ pt = (struct pt_regs *) info->sp - 1; if (regnum <= 5) { - addr = *(&info->f2 + (regnum - 2)); + addr = *(&info->f2_loc + (regnum - 2)); if (!addr) addr = &info->sw->f2 + (regnum - 2); } else if (regnum <= 15) { @@ -388,13 +402,16 @@ else addr = &info->sw->f10 + (regnum - 10); } else if (regnum <= 31) { - addr = info->fr[regnum - 16]; + addr = info->fr_loc[regnum - 16]; if (!addr) addr = &info->sw->f16 + (regnum - 16); } else { struct task_struct *t = info->task; - ia64_sync_fph(t); + if (write) + ia64_sync_fph(t); + else + ia64_flush_fph(t); addr = t->thread.fph + (regnum - 32); } @@ -418,52 +435,53 @@ switch (regnum) { case UNW_AR_BSP: - addr = info->pbsp; + addr = info->bsp_loc; if (!addr) addr = &info->sw->ar_bspstore; break; case UNW_AR_BSPSTORE: - addr = info->bspstore; + addr = info->bspstore_loc; if (!addr) addr = &info->sw->ar_bspstore; break; case UNW_AR_PFS: - addr = info->pfs; + addr = info->pfs_loc; if (!addr) addr = &info->sw->ar_pfs; break; case UNW_AR_RNAT: - addr = info->rnat; + addr = info->rnat_loc; if (!addr) addr = &info->sw->ar_rnat; break; case UNW_AR_UNAT: - addr = info->unat; + addr = info->unat_loc; if (!addr) addr = &info->sw->ar_unat; break; case UNW_AR_LC: - addr = info->lc; + addr = info->lc_loc; if (!addr) addr = &info->sw->ar_lc; break; case UNW_AR_EC: - if (!info->cfm) + if (!info->cfm_loc) return -1; if (write) - *info->cfm = (*info->cfm & ~(0x3fUL << 52)) | ((*val & 0x3f) << 52); + *info->cfm_loc = + (*info->cfm_loc & ~(0x3fUL << 52)) | ((*val & 0x3f) << 52); else - *val = (*info->cfm >> 52) & 0x3f; + *val = (*info->cfm_loc >> 52) & 0x3f; return 0; case UNW_AR_FPSR: - addr = info->fpsr; + addr = info->fpsr_loc; if (!addr) addr = &info->sw->ar_fpsr; break; @@ -493,7 +511,7 @@ { unsigned long *addr; - addr = info->pr; + addr = info->pr_loc; if (!addr) addr = &info->sw->pr; @@ -605,9 +623,8 @@ int i; /* - * First, resolve implicit register save locations - * (see Section "11.4.2.3 Rules for Using Unwind - * Descriptors", rule 3): + * First, resolve implicit register save locations (see Section "11.4.2.3 Rules + * for Using Unwind Descriptors", rule 3): */ for (i = 0; i < (int) sizeof(unw.save_order)/sizeof(unw.save_order[0]); ++i) { reg = sr->curr.reg + unw.save_order[i]; @@ -1045,16 +1062,16 @@ static inline unw_hash_index_t hash (unsigned long ip) { -# define magic 0x9e3779b97f4a7c16 /* (sqrt(5)/2-1)*2^64 */ +# define magic 0x9e3779b97f4a7c16 /* based on (sqrt(5)/2-1)*2^64 */ return (ip >> 4)*magic >> (64 - UNW_LOG_HASH_SIZE); } static inline long -cache_match (struct unw_script *script, unsigned long ip, unsigned long pr_val) +cache_match (struct unw_script *script, unsigned long ip, unsigned long pr) { read_lock(&script->lock); - if ((ip) == (script)->ip && (((pr_val) ^ (script)->pr_val) & (script)->pr_mask) == 0) + if (ip == script->ip && ((pr ^ script->pr_val) & script->pr_mask) == 0) /* keep the read lock... */ return 1; read_unlock(&script->lock); @@ -1065,21 +1082,26 @@ script_lookup (struct unw_frame_info *info) { struct unw_script *script = unw.cache + info->hint; - unsigned long ip, pr_val; + unsigned short index; + unsigned long ip, pr; STAT(++unw.stat.cache.lookups); ip = info->ip; - pr_val = info->pr_val; + pr = info->pr; - if (cache_match(script, ip, pr_val)) { + if (cache_match(script, ip, pr)) { STAT(++unw.stat.cache.hinted_hits); return script; } - script = unw.cache + unw.hash[hash(ip)]; + index = unw.hash[hash(ip)]; + if (index >= UNW_CACHE_SIZE) + return 0; + + script = unw.cache + index; while (1) { - if (cache_match(script, ip, pr_val)) { + if (cache_match(script, ip, pr)) { /* update hint; no locking required as single-word writes are atomic */ STAT(++unw.stat.cache.normal_hits); unw.cache[info->prev_script].hint = script - unw.cache; @@ -1099,8 +1121,8 @@ script_new (unsigned long ip) { struct unw_script *script, *prev, *tmp; + unw_hash_index_t index; unsigned long flags; - unsigned char index; unsigned short head; STAT(++unw.stat.script.news); @@ -1133,22 +1155,24 @@ unw.lru_tail = head; /* remove the old script from the hash table (if it's there): */ - index = hash(script->ip); - tmp = unw.cache + unw.hash[index]; - prev = 0; - while (1) { - if (tmp == script) { - if (prev) - prev->coll_chain = tmp->coll_chain; - else - unw.hash[index] = tmp->coll_chain; - break; - } else - prev = tmp; - if (tmp->coll_chain >= UNW_CACHE_SIZE) + if (script->ip) { + index = hash(script->ip); + tmp = unw.cache + unw.hash[index]; + prev = 0; + while (1) { + if (tmp == script) { + if (prev) + prev->coll_chain = tmp->coll_chain; + else + unw.hash[index] = tmp->coll_chain; + break; + } else + prev = tmp; + if (tmp->coll_chain >= UNW_CACHE_SIZE) /* old script wasn't in the hash-table */ - break; - tmp = unw.cache + tmp->coll_chain; + break; + tmp = unw.cache + tmp->coll_chain; + } } /* enter new script in the hash table */ @@ -1198,19 +1222,17 @@ struct unw_reg_info *r = sr->curr.reg + i; enum unw_insn_opcode opc; struct unw_insn insn; - unsigned long val; + unsigned long val = 0; switch (r->where) { case UNW_WHERE_GR: if (r->val >= 32) { /* register got spilled to a stacked register */ opc = UNW_INSN_SETNAT_TYPE; - val = UNW_NAT_STACKED; - } else { + val = UNW_NAT_REGSTK; + } else /* register got spilled to a scratch register */ - opc = UNW_INSN_SETNAT_TYPE; - val = UNW_NAT_SCRATCH; - } + opc = UNW_INSN_SETNAT_MEMSTK; break; case UNW_WHERE_FR: @@ -1225,8 +1247,7 @@ case UNW_WHERE_PSPREL: case UNW_WHERE_SPREL: - opc = UNW_INSN_SETNAT_PRI_UNAT; - val = 0; + opc = UNW_INSN_SETNAT_MEMSTK; break; default: @@ -1267,18 +1288,8 @@ } val = unw.preg_index[UNW_REG_R4 + (rval - 4)]; } else { - opc = UNW_INSN_LOAD_SPREL; - val = -sizeof(struct pt_regs); - if (rval >= 1 && rval <= 3) - val += struct_offset(struct pt_regs, r1) + 8*(rval - 1); - else if (rval <= 11) - val += struct_offset(struct pt_regs, r8) + 8*(rval - 8); - else if (rval <= 15) - val += struct_offset(struct pt_regs, r12) + 8*(rval - 12); - else if (rval <= 31) - val += struct_offset(struct pt_regs, r16) + 8*(rval - 16); - else - dprintk("unwind: bad scratch reg r%lu\n", rval); + opc = UNW_INSN_ADD_SP; + val = -sizeof(struct pt_regs) + pt_regs_off(rval); } break; @@ -1288,7 +1299,7 @@ else if (rval >= 16 && rval <= 31) val = unw.preg_index[UNW_REG_F16 + (rval - 16)]; else { - opc = UNW_INSN_LOAD_SPREL; + opc = UNW_INSN_ADD_SP; val = -sizeof(struct pt_regs); if (rval <= 9) val += struct_offset(struct pt_regs, f6) + 16*(rval - 6); @@ -1301,7 +1312,7 @@ if (rval >= 1 && rval <= 5) val = unw.preg_index[UNW_REG_B1 + (rval - 1)]; else { - opc = UNW_INSN_LOAD_SPREL; + opc = UNW_INSN_ADD_SP; val = -sizeof(struct pt_regs); if (rval == 0) val += struct_offset(struct pt_regs, b0); @@ -1313,11 +1324,11 @@ break; case UNW_WHERE_SPREL: - opc = UNW_INSN_LOAD_SPREL; + opc = UNW_INSN_ADD_SP; break; case UNW_WHERE_PSPREL: - opc = UNW_INSN_LOAD_PSPREL; + opc = UNW_INSN_ADD_PSP; break; default: @@ -1330,6 +1341,18 @@ script_emit(script, insn); if (need_nat_info) emit_nat_info(sr, i, script); + + if (i == UNW_REG_PSP) { + /* + * info->psp must contain the _value_ of the previous + * sp, not it's save location. We get this by + * dereferencing the value we just stored in + * info->psp: + */ + insn.opc = UNW_INSN_LOAD; + insn.dst = insn.val = unw.preg_index[UNW_REG_PSP]; + script_emit(script, insn); + } } static inline struct unw_table_entry * @@ -1378,7 +1401,7 @@ memset(&sr, 0, sizeof(sr)); for (r = sr.curr.reg; r < sr.curr.reg + UNW_NUM_REGS; ++r) r->when = UNW_WHEN_NEVER; - sr.pr_val = info->pr_val; + sr.pr_val = info->pr; script = script_new(ip); if (!script) { @@ -1447,8 +1470,8 @@ } #if UNW_DEBUG - printk ("unwind: state record for func 0x%lx, t=%u:\n", - table->segment_base + e->start_offset, sr.when_target); + printk("unwind: state record for func 0x%lx, t=%u:\n", + table->segment_base + e->start_offset, sr.when_target); for (r = sr.curr.reg; r < sr.curr.reg + UNW_NUM_REGS; ++r) { if (r->where != UNW_WHERE_NONE || r->when != UNW_WHEN_NEVER) { printk(" %s <- ", unw.preg_name[r - sr.curr.reg]); @@ -1463,7 +1486,7 @@ break; default: printk("BADWHERE(%d)", r->where); break; } - printk ("\t\t%d\n", r->when); + printk("\t\t%d\n", r->when); } } #endif @@ -1472,13 +1495,17 @@ /* translate state record into unwinder instructions: */ - if (sr.curr.reg[UNW_REG_PSP].where == UNW_WHERE_NONE - && sr.when_target > sr.curr.reg[UNW_REG_PSP].when && sr.curr.reg[UNW_REG_PSP].val != 0) - { + /* + * First, set psp if we're dealing with a fixed-size frame; + * subsequent instructions may depend on this value. + */ + if (sr.when_target > sr.curr.reg[UNW_REG_PSP].when + && (sr.curr.reg[UNW_REG_PSP].where == UNW_WHERE_NONE) + && sr.curr.reg[UNW_REG_PSP].val != 0) { /* new psp is sp plus frame size */ insn.opc = UNW_INSN_ADD; - insn.dst = unw.preg_index[UNW_REG_PSP]; - insn.val = sr.curr.reg[UNW_REG_PSP].val; + insn.dst = struct_offset(struct unw_frame_info, psp)/8; + insn.val = sr.curr.reg[UNW_REG_PSP].val; /* frame size */ script_emit(script, insn); } @@ -1562,23 +1589,34 @@ val); break; - case UNW_INSN_LOAD_PSPREL: + case UNW_INSN_ADD_PSP: s[dst] = state->psp + val; break; - case UNW_INSN_LOAD_SPREL: + case UNW_INSN_ADD_SP: s[dst] = state->sp + val; break; - case UNW_INSN_SETNAT_PRI_UNAT: - if (!state->pri_unat) - state->pri_unat = &state->sw->caller_unat; - s[dst+1] = ((*state->pri_unat - s[dst]) << 32) | UNW_NAT_PRI_UNAT; + case UNW_INSN_SETNAT_MEMSTK: + if (!state->pri_unat_loc) + state->pri_unat_loc = &state->sw->ar_unat; + /* register off. is a multiple of 8, so the least 3 bits (type) are 0 */ + s[dst+1] = (*state->pri_unat_loc - s[dst]) | UNW_NAT_MEMSTK; break; case UNW_INSN_SETNAT_TYPE: s[dst+1] = val; break; + + case UNW_INSN_LOAD: +#if UNW_DEBUG + if ((s[val] & (my_cpu_data.unimpl_va_mask | 0x7)) || s[val] < TASK_SIZE) { + debug(1, "unwind: rejecting bad psp=0x%lx\n", s[val]); + break; + } +#endif + s[dst] = *(unsigned long *) s[val]; + break; } } STAT(unw.stat.script.run_time += ia64_get_itc() - start); @@ -1587,13 +1625,14 @@ lazy_init: off = unw.sw_off[val]; s[val] = (unsigned long) state->sw + off; - if (off >= struct_offset (struct unw_frame_info, r4) - && off <= struct_offset (struct unw_frame_info, r7)) + if (off >= struct_offset(struct switch_stack, r4) + && off <= struct_offset(struct switch_stack, r7)) /* - * We're initializing a general register: init NaT info, too. Note that we - * rely on the fact that call_unat is the first field in struct switch_stack: + * We're initializing a general register: init NaT info, too. Note that + * the offset is a multiple of 8 which gives us the 3 bits needed for + * the type field. */ - s[val+1] = (-off << 32) | UNW_NAT_PRI_UNAT; + s[val+1] = (struct_offset(struct switch_stack, ar_unat) - off) | UNW_NAT_MEMSTK; goto redo; } @@ -1603,11 +1642,10 @@ int have_write_lock = 0; struct unw_script *scr; - if ((info->ip & (my_cpu_data.unimpl_va_mask | 0xf)) || rgn_index(info->ip) != RGN_KERNEL) - { + if ((info->ip & (my_cpu_data.unimpl_va_mask | 0xf)) || info->ip < TASK_SIZE) { /* don't let obviously bad addresses pollute the cache */ debug(1, "unwind: rejecting bad ip=0x%lx\n", info->ip); - info->rp = 0; + info->rp_loc = 0; return -1; } @@ -1648,12 +1686,12 @@ prev_bsp = info->bsp; /* restore the ip */ - if (!info->rp) { + if (!info->rp_loc) { debug(1, "unwind: failed to locate return link (ip=0x%lx)!\n", info->ip); STAT(unw.stat.api.unwind_time += ia64_get_itc() - start; local_irq_restore(flags)); return -1; } - ip = info->ip = *info->rp; + ip = info->ip = *info->rp_loc; if (ip < GATE_ADDR + PAGE_SIZE) { /* * We don't have unwind info for the gate page, so we consider that part @@ -1665,23 +1703,23 @@ } /* restore the cfm: */ - if (!info->pfs) { + if (!info->pfs_loc) { dprintk("unwind: failed to locate ar.pfs!\n"); STAT(unw.stat.api.unwind_time += ia64_get_itc() - start; local_irq_restore(flags)); return -1; } - info->cfm = info->pfs; + info->cfm_loc = info->pfs_loc; /* restore the bsp: */ - pr = info->pr_val; + pr = info->pr; num_regs = 0; if ((info->flags & UNW_FLAG_INTERRUPT_FRAME)) { if ((pr & (1UL << pNonSys)) != 0) - num_regs = *info->cfm & 0x7f; /* size of frame */ - info->pfs = + num_regs = *info->cfm_loc & 0x7f; /* size of frame */ + info->pfs_loc = (unsigned long *) (info->sp + 16 + struct_offset(struct pt_regs, ar_pfs)); } else - num_regs = (*info->cfm >> 7) & 0x7f; /* size of locals */ + num_regs = (*info->cfm_loc >> 7) & 0x7f; /* size of locals */ info->bsp = (unsigned long) ia64_rse_skip_regs((unsigned long *) info->bsp, -num_regs); if (info->bsp < info->regstk.limit || info->bsp > info->regstk.top) { dprintk("unwind: bsp (0x%lx) out of range [0x%lx-0x%lx]\n", @@ -1694,7 +1732,7 @@ info->sp = info->psp; if (info->sp < info->memstk.top || info->sp > info->memstk.limit) { dprintk("unwind: sp (0x%lx) out of range [0x%lx-0x%lx]\n", - info->sp, info->regstk.top, info->regstk.limit); + info->sp, info->memstk.top, info->memstk.limit); STAT(unw.stat.api.unwind_time += ia64_get_itc() - start; local_irq_restore(flags)); return -1; } @@ -1705,8 +1743,11 @@ return -1; } + /* as we unwind, the saved ar.unat becomes the primary unat: */ + info->pri_unat_loc = info->unat_loc; + /* finally, restore the predicates: */ - unw_get_pr(info, &info->pr_val); + unw_get_pr(info, &info->pr); retval = find_save_locs(info); STAT(unw.stat.api.unwind_time += ia64_get_itc() - start; local_irq_restore(flags)); @@ -1773,11 +1814,11 @@ info->task = t; info->sw = sw; info->sp = info->psp = (unsigned long) (sw + 1) - 16; - info->cfm = &sw->ar_pfs; - sol = (*info->cfm >> 7) & 0x7f; + info->cfm_loc = &sw->ar_pfs; + sol = (*info->cfm_loc >> 7) & 0x7f; info->bsp = (unsigned long) ia64_rse_skip_regs((unsigned long *) info->regstk.top, -sol); info->ip = sw->b0; - info->pr_val = sw->pr; + info->pr = sw->pr; find_save_locs(info); STAT(unw.stat.api.init_time += ia64_get_itc() - start; local_irq_restore(flags)); @@ -1808,7 +1849,7 @@ info->regstk.top = top; info->sw = sw; info->bsp = (unsigned long) ia64_rse_skip_regs((unsigned long *) info->regstk.top, -sol); - info->cfm = &sw->ar_pfs; + info->cfm_loc = &sw->ar_pfs; info->ip = sw->b0; #endif } @@ -1845,7 +1886,7 @@ info->regstk.top = top; info->sw = sw; info->bsp = (unsigned long) ia64_rse_skip_regs(bsp, -sof); - info->cfm = ®s->cr_ifs; + info->cfm_loc = ®s->cr_ifs; info->ip = regs->cr_iip; #endif } @@ -1881,7 +1922,7 @@ int unw_unwind (struct unw_frame_info *info) { - unsigned long sol, cfm = *info->cfm; + unsigned long sol, cfm = *info->cfm_loc; int is_nat; sol = (cfm >> 7) & 0x7f; /* size of locals */ @@ -1903,7 +1944,7 @@ /* reject let obviously bad addresses */ return -1; - info->cfm = ia64_rse_skip_regs((unsigned long *) info->bsp, sol - 1); + info->cfm_loc = ia64_rse_skip_regs((unsigned long *) info->bsp, sol - 1); cfm = read_reg(info, sol - 1, &is_nat); if (is_nat) return -1; @@ -2006,7 +2047,7 @@ if (prevt->next == table) break; if (!prevt) { - dprintk("unwind: failed to find unwind table %p\n", table); + dprintk("unwind: failed to find unwind table %p\n", (void *) table); spin_unlock_irqrestore(&unw.lock, flags); return; } @@ -2070,9 +2111,9 @@ for (i = UNW_REG_F16, off = SW(F16); i <= UNW_REG_F31; ++i, off += 16) unw.sw_off[unw.preg_index[i]] = off; - unw.cache[0].coll_chain = -1; - for (i = 1; i < UNW_CACHE_SIZE; ++i) { - unw.cache[i].lru_chain = (i - 1); + for (i = 0; i < UNW_CACHE_SIZE; ++i) { + if (i > 0) + unw.cache[i].lru_chain = (i - 1); unw.cache[i].coll_chain = -1; unw.cache[i].lock = RW_LOCK_UNLOCKED; } diff -urN linux-2.4.0-test9/arch/ia64/kernel/unwind_i.h linux-2.4.0-test9-lia/arch/ia64/kernel/unwind_i.h --- linux-2.4.0-test9/arch/ia64/kernel/unwind_i.h Thu Jun 22 07:09:44 2000 +++ linux-2.4.0-test9-lia/arch/ia64/kernel/unwind_i.h Wed Oct 4 21:40:28 2000 @@ -115,21 +115,21 @@ enum unw_nat_type { UNW_NAT_NONE, /* NaT not represented */ UNW_NAT_VAL, /* NaT represented by NaT value (fp reg) */ - UNW_NAT_PRI_UNAT, /* NaT value is in unat word at offset OFF */ - UNW_NAT_SCRATCH, /* NaT value is in scratch.pri_unat */ - UNW_NAT_STACKED /* NaT is in rnat */ + UNW_NAT_MEMSTK, /* NaT value is in unat word at offset OFF */ + UNW_NAT_REGSTK /* NaT is in rnat */ }; enum unw_insn_opcode { UNW_INSN_ADD, /* s[dst] += val */ + UNW_INSN_ADD_PSP, /* s[dst] = (s.psp + val) */ + UNW_INSN_ADD_SP, /* s[dst] = (s.sp + val) */ UNW_INSN_MOVE, /* s[dst] = s[val] */ UNW_INSN_MOVE2, /* s[dst] = s[val]; s[dst+1] = s[val+1] */ UNW_INSN_MOVE_STACKED, /* s[dst] = ia64_rse_skip(*s.bsp, val) */ - UNW_INSN_LOAD_PSPREL, /* s[dst] = *(*s.psp + 8*val) */ - UNW_INSN_LOAD_SPREL, /* s[dst] = *(*s.sp + 8*val) */ - UNW_INSN_SETNAT_PRI_UNAT, /* s[dst+1].nat.type = PRI_UNAT; + UNW_INSN_SETNAT_MEMSTK, /* s[dst+1].nat.type = MEMSTK; s[dst+1].nat.off = *s.pri_unat - s[dst] */ - UNW_INSN_SETNAT_TYPE /* s[dst+1].nat.type = val */ + UNW_INSN_SETNAT_TYPE, /* s[dst+1].nat.type = val */ + UNW_INSN_LOAD /* s[dst] = *s[val] */ }; struct unw_insn { diff -urN linux-2.4.0-test9/arch/ia64/lib/Makefile linux-2.4.0-test9-lia/arch/ia64/lib/Makefile --- linux-2.4.0-test9/arch/ia64/lib/Makefile Wed Aug 2 18:54:02 2000 +++ linux-2.4.0-test9-lia/arch/ia64/lib/Makefile Wed Oct 4 21:40:41 2000 @@ -3,30 +3,49 @@ # .S.o: - $(CC) $(AFLAGS) -c $< -o $@ + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c $< -o $@ L_TARGET = lib.a -L_OBJS = __divdi3.o __udivdi3.o __moddi3.o __umoddi3.o \ - checksum.o clear_page.o csum_partial_copy.o copy_page.o \ - copy_user.o clear_user.o memcpy.o memset.o strncpy_from_user.o \ - strlen.o strlen_user.o strnlen_user.o \ +L_OBJS = __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o \ + __divdi3.o __udivdi3.o __moddi3.o __umoddi3.o \ + checksum.o clear_page.o csum_partial_copy.o copy_page.o \ + copy_user.o clear_user.o strncpy_from_user.o strlen_user.o strnlen_user.o \ flush.o do_csum.o +ifneq ($(CONFIG_ITANIUM_ASTEP_SPECIFIC),y) + L_OBJS += memcpy.o memset.o strlen.o +endif + LX_OBJS = io.o -IGNORE_FLAGS_OBJS = __divdi3.o __udivdi3.o __moddi3.o __umoddi3.o +IGNORE_FLAGS_OBJS = __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o \ + __divdi3.o __udivdi3.o __moddi3.o __umoddi3.o -include $(TOPDIR)/Rules.make +$(L_TARGET): + +__divdi3.o: idiv64.S + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -o $@ $< + +__udivdi3.o: idiv64.S + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -DUNSIGNED -c -o $@ $< -__divdi3.o: idiv.S - $(CC) $(AFLAGS) -c -o $@ $< +__moddi3.o: idiv64.S + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -DMODULO -c -o $@ $< -__udivdi3.o: idiv.S - $(CC) $(AFLAGS) -c -DUNSIGNED -c -o $@ $< +__umoddi3.o: idiv64.S + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -DMODULO -DUNSIGNED -c -o $@ $< -__moddi3.o: idiv.S - $(CC) $(AFLAGS) -c -DMODULO -c -o $@ $< +__divsi3.o: idiv32.S + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -o $@ $< -__umoddi3.o: idiv.S - $(CC) $(AFLAGS) -c -DMODULO -DUNSIGNED -c -o $@ $< +__udivsi3.o: idiv32.S + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -DUNSIGNED -c -o $@ $< + +__modsi3.o: idiv32.S + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -DMODULO -c -o $@ $< + +__umodsi3.o: idiv32.S + $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -DMODULO -DUNSIGNED -c -o $@ $< + +include $(TOPDIR)/Rules.make diff -urN linux-2.4.0-test9/arch/ia64/lib/idiv.S linux-2.4.0-test9-lia/arch/ia64/lib/idiv.S --- linux-2.4.0-test9/arch/ia64/lib/idiv.S Wed Aug 2 18:54:02 2000 +++ linux-2.4.0-test9-lia/arch/ia64/lib/idiv.S Wed Dec 31 16:00:00 1969 @@ -1,98 +0,0 @@ -/* - * Integer division routine. - * - * Copyright (C) 1999-2000 Hewlett-Packard Co - * Copyright (C) 1999-2000 David Mosberger-Tang - */ - -#include - -/* - * Compute a 64-bit unsigned integer quotient. - * - * Use reciprocal approximation and Newton-Raphson iteration to compute the - * quotient. frcpa gives 8.6 significant bits, so we need 3 iterations - * to get more than the 64 bits of precision that we need for DImode. - * - * Must use max precision for the reciprocal computations to get 64 bits of - * precision. - * - * r32 holds the dividend. r33 holds the divisor. - */ - -#ifdef MODULO -# define OP mod -#else -# define OP div -#endif - -#ifdef UNSIGNED -# define SGN u -# define INT_TO_FP(a,b) fcvt.xuf.s1 a=b -# define FP_TO_INT(a,b) fcvt.fxu.trunc.s1 a=b -#else -# define SGN -# define INT_TO_FP(a,b) fcvt.xf a=b -# define FP_TO_INT(a,b) fcvt.fx.trunc.s1 a=b -#endif - -#define PASTE1(a,b) a##b -#define PASTE(a,b) PASTE1(a,b) -#define NAME PASTE(PASTE(__,SGN),PASTE(OP,di3)) - -GLOBAL_ENTRY(NAME) - UNW(.prologue) - .regstk 2,0,0,0 - // Transfer inputs to FP registers. - setf.sig f8 = in0 - setf.sig f9 = in1 - UNW(.fframe 16) - UNW(.save.f 0x20) - stf.spill [sp] = f17,-16 - - // Convert the inputs to FP, to avoid FP software-assist faults. - INT_TO_FP(f8, f8) - ;; - - UNW(.save.f 0x10) - stf.spill [sp] = f16 - UNW(.body) - INT_TO_FP(f9, f9) - ;; - frcpa.s1 f17, p6 = f8, f9 // y = frcpa(b) - ;; - /* - * This is the magic algorithm described in Section 8.6.2 of "IA-64 - * and Elementary Functions" by Peter Markstein; HP Professional Books - * (http://www.hp.com/go/retailbooks/) - */ -(p6) fmpy.s1 f7 = f8, f17 // q = a*y -(p6) fnma.s1 f6 = f9, f17, f1 // e = -b*y + 1 - ;; -(p6) fma.s1 f16 = f7, f6, f7 // q1 = q*e + q -(p6) fmpy.s1 f7 = f6, f6 // e1 = e*e - ;; -(p6) fma.s1 f16 = f16, f7, f16 // q2 = q1*e1 + q1 -(p6) fma.s1 f6 = f17, f6, f17 // y1 = y*e + y - ;; -(p6) fma.s1 f6 = f6, f7, f6 // y2 = y1*e1 + y1 -(p6) fnma.s1 f7 = f9, f16, f8 // r = -b*q2 + a - ;; -(p6) fma.s1 f17 = f7, f6, f16 // q3 = r*y2 + q2 - ;; -#ifdef MODULO - FP_TO_INT(f17, f17) // round quotient to an unsigned integer - ;; - INT_TO_FP(f17, f17) // renormalize - ;; - fnma.s1 f17 = f17, f9, f8 // compute remainder - ;; -#endif - UNW(.restore sp) - ldf.fill f16 = [sp], 16 - FP_TO_INT(f8, f17) // round result to an (unsigned) integer - ;; - ldf.fill f17 = [sp] - getf.sig r8 = f8 // transfer result to result register - br.ret.sptk rp -END(NAME) diff -urN linux-2.4.0-test9/arch/ia64/lib/idiv32.S linux-2.4.0-test9-lia/arch/ia64/lib/idiv32.S --- linux-2.4.0-test9/arch/ia64/lib/idiv32.S Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/arch/ia64/lib/idiv32.S Wed Oct 4 21:41:02 2000 @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2000 Hewlett-Packard Co + * Copyright (C) 2000 David Mosberger-Tang + * + * 32-bit integer division. + * + * This code is based on the application note entitled "Divide, Square Root + * and Remainder Algorithms for the IA-64 Architecture". This document + * is available as Intel document number 248725-002 or via the web at + * http://developer.intel.com/software/opensource/numerics/ + * + * For more details on the theory behind these algorithms, see "IA-64 + * and Elementary Functions" by Peter Markstein; HP Professional Books + * (http://www.hp.com/go/retailbooks/) + */ + +#include + +#ifdef MODULO +# define OP mod +#else +# define OP div +#endif + +#ifdef UNSIGNED +# define SGN u +# define EXTEND zxt4 +# define INT_TO_FP(a,b) fcvt.xuf.s1 a=b +# define FP_TO_INT(a,b) fcvt.fxu.trunc.s1 a=b +#else +# define SGN +# define EXTEND sxt4 +# define INT_TO_FP(a,b) fcvt.xf a=b +# define FP_TO_INT(a,b) fcvt.fx.trunc.s1 a=b +#endif + +#define PASTE1(a,b) a##b +#define PASTE(a,b) PASTE1(a,b) +#define NAME PASTE(PASTE(__,SGN),PASTE(OP,si3)) + +GLOBAL_ENTRY(NAME) + .regstk 2,0,0,0 + // Transfer inputs to FP registers. + mov r2 = 0xffdd // r2 = -34 + 65535 (fp reg format bias) + EXTEND in0 = in0 // in0 = a + EXTEND in1 = in1 // in1 = b + ;; + setf.sig f8 = in0 + setf.sig f9 = in1 +#ifdef MODULO + sub in1 = r0, in1 // in1 = -b +#endif + ;; + // Convert the inputs to FP, to avoid FP software-assist faults. + INT_TO_FP(f8, f8) + INT_TO_FP(f9, f9) + ;; + setf.exp f7 = r2 // f7 = 2^-34 + frcpa.s1 f6, p6 = f8, f9 // y0 = frcpa(b) + ;; +(p6) fmpy.s1 f8 = f8, f6 // q0 = a*y0 +(p6) fnma.s1 f6 = f9, f6, f1 // e0 = -b*y0 + 1 + ;; +#ifdef MODULO + setf.sig f9 = in1 // f9 = -b +#endif +(p6) fma.s1 f8 = f6, f8, f8 // q1 = e0*q0 + q0 +(p6) fma.s1 f6 = f6, f6, f7 // e1 = e0*e0 + 2^-34 + ;; +#ifdef MODULO + setf.sig f7 = in0 +#endif +(p6) fma.s1 f6 = f6, f8, f8 // q2 = e1*q1 + q1 + ;; + FP_TO_INT(f6, f6) // q = trunc(q2) + ;; +#ifdef MODULO + xma.l f6 = f6, f9, f7 // r = q*(-b) + a + ;; +#endif + getf.sig r8 = f6 // transfer result to result register + br.ret.sptk rp +END(NAME) diff -urN linux-2.4.0-test9/arch/ia64/lib/idiv64.S linux-2.4.0-test9-lia/arch/ia64/lib/idiv64.S --- linux-2.4.0-test9/arch/ia64/lib/idiv64.S Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/arch/ia64/lib/idiv64.S Wed Oct 4 21:41:04 2000 @@ -0,0 +1,92 @@ +/* + * Copyright (C) 1999-2000 Hewlett-Packard Co + * Copyright (C) 1999-2000 David Mosberger-Tang + * + * 64-bit integer division. + * + * This code is based on the application note entitled "Divide, Square Root + * and Remainder Algorithms for the IA-64 Architecture". This document + * is available as Intel document number 248725-002 or via the web at + * http://developer.intel.com/software/opensource/numerics/ + * + * For more details on the theory behind these algorithms, see "IA-64 + * and Elementary Functions" by Peter Markstein; HP Professional Books + * (http://www.hp.com/go/retailbooks/) + */ + +#include + +#ifdef MODULO +# define OP mod +#else +# define OP div +#endif + +#ifdef UNSIGNED +# define SGN u +# define INT_TO_FP(a,b) fcvt.xuf.s1 a=b +# define FP_TO_INT(a,b) fcvt.fxu.trunc.s1 a=b +#else +# define SGN +# define INT_TO_FP(a,b) fcvt.xf a=b +# define FP_TO_INT(a,b) fcvt.fx.trunc.s1 a=b +#endif + +#define PASTE1(a,b) a##b +#define PASTE(a,b) PASTE1(a,b) +#define NAME PASTE(PASTE(__,SGN),PASTE(OP,di3)) + +GLOBAL_ENTRY(NAME) + UNW(.prologue) + .regstk 2,0,0,0 + // Transfer inputs to FP registers. + setf.sig f8 = in0 + setf.sig f9 = in1 + UNW(.fframe 16) + UNW(.save.f 0x20) + stf.spill [sp] = f17,-16 + + // Convert the inputs to FP, to avoid FP software-assist faults. + INT_TO_FP(f8, f8) + ;; + + UNW(.save.f 0x10) + stf.spill [sp] = f16 + UNW(.body) + INT_TO_FP(f9, f9) + ;; + frcpa.s1 f17, p6 = f8, f9 // y0 = frcpa(b) + ;; +(p6) fmpy.s1 f7 = f8, f17 // q0 = a*y0 +(p6) fnma.s1 f6 = f9, f17, f1 // e0 = -b*y0 + 1 + ;; +(p6) fma.s1 f16 = f7, f6, f7 // q1 = q0*e0 + q0 +(p6) fmpy.s1 f7 = f6, f6 // e1 = e0*e0 + ;; +#ifdef MODULO + sub in1 = r0, in1 // in1 = -b +#endif +(p6) fma.s1 f16 = f16, f7, f16 // q2 = q1*e1 + q1 +(p6) fma.s1 f6 = f17, f6, f17 // y1 = y0*e0 + y0 + ;; +(p6) fma.s1 f6 = f6, f7, f6 // y2 = y1*e1 + y1 +(p6) fnma.s1 f7 = f9, f16, f8 // r = -b*q2 + a + ;; +#ifdef MODULO + setf.sig f8 = in0 // f8 = a + setf.sig f9 = in1 // f9 = -b +#endif +(p6) fma.s1 f17 = f7, f6, f16 // q3 = r*y2 + q2 + ;; + UNW(.restore sp) + ldf.fill f16 = [sp], 16 + FP_TO_INT(f17, f17) // q = trunc(q3) + ;; +#ifdef MODULO + xma.l f17 = f17, f9, f8 // r = q*(-b) + a + ;; +#endif + getf.sig r8 = f17 // transfer result to result register + ldf.fill f17 = [sp] + br.ret.sptk rp +END(NAME) diff -urN linux-2.4.0-test9/arch/ia64/lib/io.c linux-2.4.0-test9-lia/arch/ia64/lib/io.c --- linux-2.4.0-test9/arch/ia64/lib/io.c Thu Jun 22 07:09:44 2000 +++ linux-2.4.0-test9-lia/arch/ia64/lib/io.c Wed Sep 13 13:47:27 2000 @@ -1,4 +1,3 @@ -#include #include #include @@ -49,6 +48,3 @@ } } -EXPORT_SYMBOL(__ia64_memcpy_fromio); -EXPORT_SYMBOL(__ia64_memcpy_toio); -EXPORT_SYMBOL(__ia64_memset_c_io); diff -urN linux-2.4.0-test9/arch/ia64/mm/init.c linux-2.4.0-test9-lia/arch/ia64/mm/init.c --- linux-2.4.0-test9/arch/ia64/mm/init.c Thu Aug 24 08:17:30 2000 +++ linux-2.4.0-test9-lia/arch/ia64/mm/init.c Wed Oct 4 23:03:06 2000 @@ -357,6 +357,7 @@ panic("mm/init: overlap between virtually mapped linear page table and " "mapped kernel space!"); pta = POW2(61) - POW2(impl_va_msb); +#ifndef CONFIG_DISABLE_VHPT /* * Set the (virtually mapped linear) page table address. Bit * 8 selects between the short and long format, bits 2-7 the @@ -364,6 +365,9 @@ * enabled. */ ia64_set_pta(pta | (0<<8) | ((3*(PAGE_SHIFT-3)+3)<<2) | 1); +#else + ia64_set_pta(pta | (0<<8) | ((3*(PAGE_SHIFT-3)+3)<<2) | 0); +#endif } /* @@ -444,15 +448,6 @@ /* install the gate page in the global page table: */ put_gate_page(virt_to_page(__start_gate_section), GATE_ADDR); - -#ifndef CONFIG_IA64_SOFTSDV_HACKS - /* - * (Some) SoftSDVs seem to have a problem with this call. - * Since it's mostly a performance optimization, just don't do - * it for now... --davidm 99/12/6 - */ - efi_enter_virtual_mode(); -#endif #ifdef CONFIG_IA32_SUPPORT ia32_gdt_init(); diff -urN linux-2.4.0-test9/arch/ia64/tools/Makefile linux-2.4.0-test9-lia/arch/ia64/tools/Makefile --- linux-2.4.0-test9/arch/ia64/tools/Makefile Wed Aug 2 18:54:03 2000 +++ linux-2.4.0-test9-lia/arch/ia64/tools/Makefile Fri Aug 25 01:01:47 2000 @@ -46,4 +46,4 @@ endif -.PHONY: all modules +.PHONY: all modules modules_install diff -urN linux-2.4.0-test9/drivers/acpi/Makefile linux-2.4.0-test9-lia/drivers/acpi/Makefile --- linux-2.4.0-test9/drivers/acpi/Makefile Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/Makefile Thu Aug 24 18:14:33 2000 @@ -2,7 +2,7 @@ # Makefile for the Linux ACPI interpreter # -SUB_DIRS := +SUB_DIRS := MOD_SUB_DIRS := $(SUB_DIRS) MOD_IN_SUB_DIRS := ALL_SUB_DIRS := $(SUB_DIRS) @@ -11,22 +11,17 @@ O_OBJS := M_OBJS := -export ACPI_CFLAGS -ACPI_CFLAGS := -D_LINUX +ifdef CONFIG_ACPI_KERNEL_CONFIG +ACPI_OBJS := acpiconf.o osconf.o os.o +else +ACPI_OBJS := driver.o ec.o cpu.o os.o sys.o tables.o +endif +ACPI_OBJS += $(patsubst %.c,%.o,$(wildcard */*.c)) -EXTRA_CFLAGS += -I./include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) +EXTRA_CFLAGS += -I./include -D_LINUX # if the interpreter is used, it overrides arch/i386/kernel/acpi.c ifeq ($(CONFIG_ACPI_INTERPRETER),y) - - SUB_DIRS += common dispatcher events hardware\ - interpreter namespace parser resources tables - - ACPI_OBJS := $(patsubst %,%.o,$(SUB_DIRS)) - ACPI_OBJS += $(patsubst %.c,%.o,$(wildcard *.c)) - O_OBJS += $(ACPI_OBJS) endif diff -urN linux-2.4.0-test9/drivers/acpi/acpiconf.c linux-2.4.0-test9-lia/drivers/acpi/acpiconf.c --- linux-2.4.0-test9/drivers/acpi/acpiconf.c Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/acpiconf.c Mon Sep 11 15:35:05 2000 @@ -0,0 +1,381 @@ +/* + * acpiconf.c - ACPI based kernel configuration + * + * Copyright (C) 2000 Intel Corp. + * Copyright (C) 2000 J.I. Lee + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "acpi.h" +#include "osconf.h" +#include "acpiconf.h" + + +static int acpi_cf_initialized __initdata = 0; + +ACPI_STATUS __init +acpi_cf_init ( + void * rsdp + ) +{ + ACPI_STATUS status; + ACPI_INIT_DATA acpi_init_data; + + acpi_os_bind_osd(ACPI_CF_PHASE_BOOTTIME); + + acpi_init_data.RSDP_physical_address = rsdp; + status = acpi_initialize (&acpi_init_data); + if (ACPI_FAILURE(status)) { + printk ("Acpi cfg:acpi initialize error=0x%x\n", status); + return status; + } else + printk ("Acpi cfg:acpi initialize pass\n"); + + status = acpi_load_firmware_tables (); + if (ACPI_FAILURE(status)) { + printk ("Acpi cfg:acpi load firmware tables error=0x%x\n", status); + acpi_terminate(); + return status; + } else + printk ("Acpi cfg:acpi load firmware tables pass\n"); + + status = acpi_load_namespace (); + if (ACPI_FAILURE(status)) { + printk ("Acpi cfg:acpi load namespace error=0x%x\n", status); + acpi_terminate(); + return status; + } else + printk ("Acpi cfg:acpi load namespace pass\n"); + + acpi_cf_initialized++; + + return AE_OK; +} + + +ACPI_STATUS __init +acpi_cf_terminate ( void ) +{ + ACPI_STATUS status; + + if (! ACPI_CF_INITIALIZED()) + return AE_ERROR; + + status = acpi_terminate (); + if (ACPI_FAILURE(status)) { + printk ("Acpi cfg:acpi terminate error=0x%x\n", status); + /* fall thru...*/ + } else + printk ("Acpi cfg:acpi terminate pass\n"); + + acpi_cf_cleanup(); + acpi_os_bind_osd(ACPI_CF_PHASE_RUNTIME); + + acpi_cf_initialized--; + + return status; +} + + +ACPI_STATUS __init +acpi_cf_get_pci_vectors ( + struct pci_vector_struct **vectors, + int *num_pci_vectors + ) +{ + ACPI_STATUS status; + void *prts; + + printk ("Acpi cfg:get pci vectors\n"); + if (! ACPI_CF_INITIALIZED()) { + status = acpi_cf_init((void *)efi.acpi); + if (ACPI_FAILURE (status)) + return status; + } + + *vectors = NULL; + *num_pci_vectors = 0; + + status = acpi_cf_get_prt (&prts); + if (ACPI_FAILURE (status)) { + return status; + } + + status = acpi_cf_convert_prt_to_vectors (prts, vectors, num_pci_vectors); +#ifdef CONFIG_ACPI_KERNEL_CONFIG_DEBUG + if (ACPI_SUCCESS(status)) + acpi_cf_print_pci_vectors (*vectors, *num_pci_vectors); +#endif + + return status; +} + + +static PCI_ROUTING_TABLE *pci_routing_tables[PCI_MAX_BUS] __initdata = {NULL}; +static struct pci_vector_struct *vectors_to_free __initdata = NULL; + + +static ACPI_STATUS __init +acpi_cf_get_prt ( + void **prts + ) +{ + ACPI_STATUS status; + + status = acpi_walk_namespace ( ACPI_TYPE_DEVICE, + ACPI_ROOT_OBJECT, + ACPI_UINT32_MAX, + acpi_cf_get_prt_callback, + NULL, + NULL ); + + if (ACPI_FAILURE(status)) { + printk("Acpi cfg:walk namespace error=0x%x\n", status); + } + + *prts = (void *)pci_routing_tables; + + return status; +} + + +static ACPI_STATUS __init +acpi_cf_get_prt_callback ( + ACPI_HANDLE handle, + UINT32 Level, + void *context, + void **retval + ) +{ + ACPI_BUFFER acpi_buffer; + PCI_ROUTING_TABLE *prt; + NATIVE_UINT busnum = 0; + static NATIVE_UINT next_busnum = 0; + ACPI_STATUS status; + + ACPI_HANDLE parent_handle; + ACPI_BUFFER ret_buf; + ACPI_OBJECT *ext_obj; + UINT8 buf[PATHNAME_MAX]; + + + acpi_buffer.length = 0; + acpi_buffer.pointer = NULL; + + status = acpi_get_irq_routing_table (handle, &acpi_buffer); + + switch (status) { + case AE_BUFFER_OVERFLOW: + break; /* found */ + case AE_NOT_FOUND: + return AE_OK; /* let acpi_walk_namespace continue. */ + default: + printk("Acpi cfg:get irq routing table fail=0x%x\n", status); + return AE_ERROR; + } + + prt = (PCI_ROUTING_TABLE *) acpi_os_callocate (acpi_buffer.length); + acpi_buffer.pointer = (void *) prt; + + status = acpi_get_irq_routing_table (handle, &acpi_buffer); + if (ACPI_FAILURE(status)) { + printk("Acpi cfg:get irq routing table Fail=0x%x\n", status); + acpi_os_free(prt); + return AE_OK; + } + + status = acpi_get_parent(handle, &parent_handle); + if (ACPI_FAILURE(status)) { + printk("Acpi cfg:get parent fail=0x%x\n", status); + acpi_os_free(prt); + return AE_OK; + } + + ret_buf.length = PATHNAME_MAX; + ret_buf.pointer = (void *) buf; + + status = acpi_evaluate_object(handle, METHOD_NAME__BBN, NULL, &ret_buf); + if (ACPI_FAILURE(status)) { + if (status == AE_NOT_FOUND) { + printk("Acpi cfg:_BBN not found for _PRT %ld: set busnum to %ld\n", next_busnum, next_busnum); + } else { + printk("Acpi cfg:_BBN fail=0x%x for _PRT %ld: set busnum to %ld\n", status, next_busnum, next_busnum); + } + if (next_busnum) + printk("Acpi cfg: Warning: Invalid or unimplemented _BBNs for PRTs may cause incorrect PCI vector configuration. Check AML\n"); + busnum = next_busnum++; + } else { + ext_obj = (ACPI_OBJECT *) ret_buf.pointer; + + switch (ext_obj->type) { + case ACPI_TYPE_NUMBER: + busnum = (NATIVE_UINT) ext_obj->number.value; + next_busnum = busnum + 1; + break; + default: + printk("Acpi cfg:_BBN object type incorrect: set busnum to %ld\n ", next_busnum); + printk("Acpi cfg: Warning: Invalid _BBN for PRT may cause incorrect PCI vector configuration. Check AML\n"); + busnum = next_busnum++; + break; + } + + /* + * Placeholder for PCI SEG when PAL supports it, + * status = acpi_evaluate_object(handle, "_SEG", NULL, &ret_buf); + */ + } + + + ret_buf.length = PATHNAME_MAX; + ret_buf.pointer = (void *) buf; + + status = acpi_evaluate_object(handle, METHOD_NAME__STA, NULL, &ret_buf); + if (ACPI_FAILURE(status)) { + if (status == AE_NOT_FOUND) + printk("Acpi cfg:_STA not found: pci bus %ld exist\n", busnum); + else + printk("Acpi cfg:_STA fail=0x%x: pci bus %ld exist. Check AML\n", status, busnum); + } else { + ext_obj = (ACPI_OBJECT *) ret_buf.pointer; + + switch (ext_obj->type) { + case ACPI_TYPE_NUMBER: + if((NATIVE_UINT) ext_obj->number.value & ACPI_STA_DEVICE_PRESENT) { + printk("Acpi cfg:_STA: pci bus %ld exist\n", busnum); + } else { + printk("Acpi cfg:_STA: pci bus %ld not exist. Discarding the _PRT\n", busnum); + next_busnum--; + acpi_os_free(prt); + return AE_OK; + } + break; + default: + printk("Acpi cfg:_STA object type incorrect: pci bus %ld exist. Check AML\n", busnum); + break; + } + } + + + acpi_cf_add_to_pci_routing_tables (busnum, prt); + + return AE_OK; +} + + +static void __init +acpi_cf_add_to_pci_routing_tables ( + NATIVE_UINT busnum, + PCI_ROUTING_TABLE *prt + ) +{ + if ( busnum >= PCI_MAX_BUS ) { + printk("Acpi cfg:invalid pci bus number %ld\n", busnum); + acpi_os_free(prt); + return; + } + + if (pci_routing_tables[busnum]) { + printk("Acpi cfg:duplicate PRT for pci bus %ld. overiding...\n", busnum); + acpi_os_free(pci_routing_tables[busnum]); + /* override... */ + } + + pci_routing_tables[busnum] = prt; +} + + +#define DUMPVECTOR(pv) printk("PCI bus=0x%x id=0x%x pin=0x%x irq=0x%x\n", pv->bus, pv->pci_id, pv->pin, pv->irq); + +static ACPI_STATUS __init +acpi_cf_convert_prt_to_vectors ( + void *prts, + struct pci_vector_struct **vectors, + int *num_pci_vectors + ) +{ + struct pci_vector_struct *pvec; + PCI_ROUTING_TABLE **pprts, *prt, *prtf; + int nvec = 0; + int i; + + + pprts = (PCI_ROUTING_TABLE **)prts; + + for ( i = 0; i < PCI_MAX_BUS; i++) { + prt = *pprts++; + if (prt) { + for ( ; prt->length > 0; nvec++) { + prt = (PCI_ROUTING_TABLE *) ((NATIVE_UINT)prt + (NATIVE_UINT)prt->length); + prt = (PCI_ROUTING_TABLE *) ROUND_UP_TO_4BYTES(prt); + } + } + } + + *num_pci_vectors = nvec; + *vectors = acpi_os_callocate (sizeof(struct pci_vector_struct) * nvec); + if (*vectors == NULL) { + printk("Acpi cfg:callocate error\n"); + return AE_NO_MEMORY; + } + + pvec = *vectors; + pprts = (PCI_ROUTING_TABLE **)prts; + + for ( i = 0; i < PCI_MAX_BUS; i++) { + prt = prtf = *pprts++; + if (prt) { + for ( ; prt->length > 0; pvec++) { + pvec->bus = (UINT16)i; + pvec->pci_id = prt->data.address; + pvec->pin = (UINT8)prt->data.pin; + pvec->irq = (UINT8)prt->data.source_index; + + prt = (PCI_ROUTING_TABLE *) ((NATIVE_UINT)prt + (NATIVE_UINT)prt->length); + prt = (PCI_ROUTING_TABLE *) ROUND_UP_TO_4BYTES(prt); + } + acpi_os_free((void *)prtf); + } + } + + vectors_to_free = *vectors; + + return AE_OK; +} + + +void __init +acpi_cf_cleanup ( void ) +{ + if (vectors_to_free) + acpi_os_free((void *)vectors_to_free); +} + + +#ifdef CONFIG_ACPI_KERNEL_CONFIG_DEBUG +void __init +acpi_cf_print_pci_vectors ( + struct pci_vector_struct *vectors, + int num_pci_vectors + ) +{ + struct pci_vector_struct *pvec; + int i; + + printk("number of PCI interrupt vectors = %d\n", num_pci_vectors); + + pvec = vectors; + for (i = 0; i < num_pci_vectors; i++) { + DUMPVECTOR(pvec); + pvec++; + } +} +#endif diff -urN linux-2.4.0-test9/drivers/acpi/acpiconf.h linux-2.4.0-test9-lia/drivers/acpi/acpiconf.h --- linux-2.4.0-test9/drivers/acpi/acpiconf.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/acpiconf.h Thu Aug 24 18:16:02 2000 @@ -0,0 +1,54 @@ +/* + * acpiconf.h - ACPI based kernel configuration + * + * Copyright (C) 2000 Intel Corp. + * Copyright (C) 2000 J.I. Lee + */ + + +#define PCI_MAX_BUS 0x100 +#define ACPI_STA_DEVICE_PRESENT 0x01 + +#ifdef CONFIG_ACPI_KERNEL_CONFIG_DEBUG +#define ACPI_CF_INITIALIZED() (acpi_cf_initialized > 0) +#else +#define ACPI_CF_INITIALIZED() 1 +#endif + + +static ACPI_STATUS __init acpi_cf_get_prt (void **prts); + +extern void __init +acpi_os_bind_osd(int acpi_phase); + + +static +ACPI_STATUS __init +acpi_cf_get_prt_callback ( + ACPI_HANDLE handle, + UINT32 level, + void *context, + void **retval + ); + + +static +void __init +acpi_cf_add_to_pci_routing_tables ( + NATIVE_UINT busnum, + PCI_ROUTING_TABLE *prt + ); + + +static +ACPI_STATUS __init +acpi_cf_convert_prt_to_vectors ( + void *prts, + struct pci_vector_struct **vectors, + int *num_pci_vectors + ); + + +void __init +acpi_cf_cleanup ( void ); + diff -urN linux-2.4.0-test9/drivers/acpi/common/Makefile linux-2.4.0-test9-lia/drivers/acpi/common/Makefile --- linux-2.4.0-test9/drivers/acpi/common/Makefile Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/Makefile Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -SUB_DIRS := -MOD_SUB_DIRS := $(SUB_DIRS) -MOD_IN_SUB_DIRS := -ALL_SUB_DIRS := $(SUB_DIRS) - -O_TARGET := ../$(shell basename `pwd`).o -O_OBJS := -M_OBJS := - -ACPI_OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) - -EXTRA_CFLAGS += -I../include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) - -# if the interpreter is used, it overrides arch/i386/kernel/acpi.c -ifeq ($(CONFIG_ACPI_INTERPRETER),y) - O_OBJS := $(ACPI_OBJS) -endif - -include $(TOPDIR)/Rules.make - -clean: - $(RM) *.o diff -urN linux-2.4.0-test9/drivers/acpi/common/cmalloc.c linux-2.4.0-test9-lia/drivers/acpi/common/cmalloc.c --- linux-2.4.0-test9/drivers/acpi/common/cmalloc.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmalloc.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: cmalloc - local memory allocation routines - * $Revision: 73 $ * *****************************************************************************/ @@ -25,13 +24,13 @@ #include "acpi.h" -#include "acparser.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acglobal.h" +#include "parser.h" +#include "interp.h" +#include "namesp.h" +#include "globals.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmalloc") + MODULE_NAME ("cmalloc"); /***************************************************************************** @@ -53,8 +52,8 @@ _cm_allocate ( u32 size, u32 component, - NATIVE_CHAR *module, - u32 line) + ACPI_STRING module, + s32 line) { void *address = NULL; @@ -99,8 +98,8 @@ _cm_callocate ( u32 size, u32 component, - NATIVE_CHAR *module, - u32 line) + ACPI_STRING module, + s32 line) { void *address = NULL; @@ -147,8 +146,8 @@ _cm_free ( void *address, u32 component, - NATIVE_CHAR *module, - u32 line) + ACPI_STRING module, + s32 line) { if (NULL == address) { diff -urN linux-2.4.0-test9/drivers/acpi/common/cmclib.c linux-2.4.0-test9-lia/drivers/acpi/common/cmclib.c --- linux-2.4.0-test9/drivers/acpi/common/cmclib.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmclib.c Wed Dec 31 16:00:00 1969 @@ -1,821 +0,0 @@ -/****************************************************************************** - * - * Module Name: cmclib - Local implementation of C library functions - * $Revision: 24 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 "acevents.h" -#include "achware.h" -#include "acnamesp.h" -#include "acinterp.h" -#include "amlcode.h" - -/* - * These implementations of standard C Library routines can optionally be - * used if a C library is not available. In general, they are less efficient - * than an inline or assembly implementation - */ - -#define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmclib") - - -#ifdef _MSC_VER /* disable some level-4 warnings for VC++ */ -#pragma warning(disable:4706) /* warning C4706: assignment within conditional expression */ -#endif - -#ifndef ACPI_USE_SYSTEM_CLIBRARY - -/******************************************************************************* - * - * FUNCTION: strlen - * - * PARAMETERS: String - Null terminated string - * - * RETURN: Length - * - * DESCRIPTION: Returns the length of the input string - * - ******************************************************************************/ - - -NATIVE_UINT -acpi_cm_strlen ( - const NATIVE_CHAR *string) -{ - NATIVE_UINT length = 0; - - - /* Count the string until a null is encountered */ - - while (*string) { - length++; - string++; - } - - return (length); -} - - -/******************************************************************************* - * - * FUNCTION: strcpy - * - * PARAMETERS: Dst_string - Target of the copy - * Src_string - The source string to copy - * - * RETURN: Dst_string - * - * DESCRIPTION: Copy a null terminated string - * - ******************************************************************************/ - -NATIVE_CHAR * -acpi_cm_strcpy ( - NATIVE_CHAR *dst_string, - const NATIVE_CHAR *src_string) -{ - NATIVE_CHAR *string = dst_string; - - - /* Move bytes brute force */ - - while (*src_string) { - *string = *src_string; - - string++; - src_string++; - } - - /* Null terminate */ - - *string = 0; - - return (dst_string); -} - - -/******************************************************************************* - * - * FUNCTION: strncpy - * - * PARAMETERS: Dst_string - Target of the copy - * Src_string - The source string to copy - * Count - Maximum # of bytes to copy - * - * RETURN: Dst_string - * - * DESCRIPTION: Copy a null terminated string, with a maximum length - * - ******************************************************************************/ - -NATIVE_CHAR * -acpi_cm_strncpy ( - NATIVE_CHAR *dst_string, - const NATIVE_CHAR *src_string, - NATIVE_UINT count) -{ - NATIVE_CHAR *string = dst_string; - - - /* Copy the string */ - - for (string = dst_string; - count && (count--, (*string++ = *src_string++)); ) - {;} - - /* Pad with nulls if necessary */ - - while (count--) { - *string = 0; - string++; - } - - /* Return original pointer */ - - return (dst_string); -} - - -/******************************************************************************* - * - * FUNCTION: strcmp - * - * PARAMETERS: String1 - First string - * String2 - Second string - * - * RETURN: Index where strings mismatched, or 0 if strings matched - * - * DESCRIPTION: Compare two null terminated strings - * - ******************************************************************************/ - -u32 -acpi_cm_strcmp ( - const NATIVE_CHAR *string1, - const NATIVE_CHAR *string2) -{ - - - for ( ; (*string1 == *string2); string2++) { - if (!*string1++) { - return (0); - } - } - - - return ((unsigned char) *string1 - (unsigned char) *string2); -} - - -/******************************************************************************* - * - * FUNCTION: strncmp - * - * PARAMETERS: String1 - First string - * String2 - Second string - * Count - Maximum # of bytes to compare - * - * RETURN: Index where strings mismatched, or 0 if strings matched - * - * DESCRIPTION: Compare two null terminated strings, with a maximum length - * - ******************************************************************************/ - -u32 -acpi_cm_strncmp ( - const NATIVE_CHAR *string1, - const NATIVE_CHAR *string2, - NATIVE_UINT count) -{ - - - for ( ; count-- && (*string1 == *string2); string2++) { - if (!*string1++) { - return (0); - } - } - - return ((count == -1) ? 0 : ((unsigned char) *string1 - - (unsigned char) *string2)); -} - - -/******************************************************************************* - * - * FUNCTION: Strcat - * - * PARAMETERS: Dst_string - Target of the copy - * Src_string - The source string to copy - * - * RETURN: Dst_string - * - * DESCRIPTION: Append a null terminated string to a null terminated string - * - ******************************************************************************/ - -NATIVE_CHAR * -acpi_cm_strcat ( - NATIVE_CHAR *dst_string, - const NATIVE_CHAR *src_string) -{ - NATIVE_CHAR *string; - - - /* Find end of the destination string */ - - for (string = dst_string; *string++; ) { ; } - - /* Concatinate the string */ - - for (--string; (*string++ = *src_string++); ) { ; } - - return (dst_string); -} - - -/******************************************************************************* - * - * FUNCTION: strncat - * - * PARAMETERS: Dst_string - Target of the copy - * Src_string - The source string to copy - * Count - Maximum # of bytes to copy - * - * RETURN: Dst_string - * - * DESCRIPTION: Append a null terminated string to a null terminated string, - * with a maximum count. - * - ******************************************************************************/ - -NATIVE_CHAR * -acpi_cm_strncat ( - NATIVE_CHAR *dst_string, - const NATIVE_CHAR *src_string, - NATIVE_UINT count) -{ - NATIVE_CHAR *string; - - - if (count) { - /* Find end of the destination string */ - - for (string = dst_string; *string++; ) { ; } - - /* Concatinate the string */ - - for (--string; (*string++ = *src_string++) && --count; ) { ; } - - /* Null terminate if necessary */ - - if (!count) { - *string = 0; - } - } - - return (dst_string); -} - - -/******************************************************************************* - * - * FUNCTION: memcpy - * - * PARAMETERS: Dest - Target of the copy - * Src - Source buffer to copy - * Count - Number of bytes to copy - * - * RETURN: Dest - * - * DESCRIPTION: Copy arbitrary bytes of memory - * - ******************************************************************************/ - -void * -acpi_cm_memcpy ( - void *dest, - const void *src, - NATIVE_UINT count) -{ - NATIVE_CHAR *new = (NATIVE_CHAR *) dest; - NATIVE_CHAR *old = (NATIVE_CHAR *) src; - - - while (count) { - *new = *old; - new++; - old++; - count--; - } - - return (dest); -} - - -/******************************************************************************* - * - * FUNCTION: memset - * - * PARAMETERS: Dest - Buffer to set - * Value - Value to set each byte of memory - * Count - Number of bytes to set - * - * RETURN: Dest - * - * DESCRIPTION: Initialize a buffer to a known value. - * - ******************************************************************************/ - -void * -acpi_cm_memset ( - void *dest, - u32 value, - NATIVE_UINT count) -{ - NATIVE_CHAR *new = (NATIVE_CHAR *) dest; - - - while (count) { - *new = (char) value; - new++; - count--; - } - - return (dest); -} - - -#define NEGATIVE 1 -#define POSITIVE 0 - - -#define _XA 0x00 /* extra alphabetic - not supported */ -#define _XS 0x40 /* extra space */ -#define _BB 0x00 /* BEL, BS, etc. - not supported */ -#define _CN 0x20 /* CR, FF, HT, NL, VT */ -#define _DI 0x04 /* '0'-'9' */ -#define _LO 0x02 /* 'a'-'z' */ -#define _PU 0x10 /* punctuation */ -#define _SP 0x08 /* space */ -#define _UP 0x01 /* 'A'-'Z' */ -#define _XD 0x80 /* '0'-'9', 'A'-'F', 'a'-'f' */ - -const u8 _ctype[257] = { - _CN, /* 0x0 0. */ - _CN, /* 0x1 1. */ - _CN, /* 0x2 2. */ - _CN, /* 0x3 3. */ - _CN, /* 0x4 4. */ - _CN, /* 0x5 5. */ - _CN, /* 0x6 6. */ - _CN, /* 0x7 7. */ - _CN, /* 0x8 8. */ - _CN|_SP, /* 0x9 9. */ - _CN|_SP, /* 0xA 10. */ - _CN|_SP, /* 0xB 11. */ - _CN|_SP, /* 0xC 12. */ - _CN|_SP, /* 0xD 13. */ - _CN, /* 0xE 14. */ - _CN, /* 0xF 15. */ - _CN, /* 0x10 16. */ - _CN, /* 0x11 17. */ - _CN, /* 0x12 18. */ - _CN, /* 0x13 19. */ - _CN, /* 0x14 20. */ - _CN, /* 0x15 21. */ - _CN, /* 0x16 22. */ - _CN, /* 0x17 23. */ - _CN, /* 0x18 24. */ - _CN, /* 0x19 25. */ - _CN, /* 0x1A 26. */ - _CN, /* 0x1B 27. */ - _CN, /* 0x1C 28. */ - _CN, /* 0x1D 29. */ - _CN, /* 0x1E 30. */ - _CN, /* 0x1F 31. */ - _XS|_SP, /* 0x20 32. ' ' */ - _PU, /* 0x21 33. '!' */ - _PU, /* 0x22 34. '"' */ - _PU, /* 0x23 35. '#' */ - _PU, /* 0x24 36. '$' */ - _PU, /* 0x25 37. '%' */ - _PU, /* 0x26 38. '&' */ - _PU, /* 0x27 39. ''' */ - _PU, /* 0x28 40. '(' */ - _PU, /* 0x29 41. ')' */ - _PU, /* 0x2A 42. '*' */ - _PU, /* 0x2B 43. '+' */ - _PU, /* 0x2C 44. ',' */ - _PU, /* 0x2D 45. '-' */ - _PU, /* 0x2E 46. '.' */ - _PU, /* 0x2F 47. '/' */ - _XD|_DI, /* 0x30 48. '0' */ - _XD|_DI, /* 0x31 49. '1' */ - _XD|_DI, /* 0x32 50. '2' */ - _XD|_DI, /* 0x33 51. '3' */ - _XD|_DI, /* 0x34 52. '4' */ - _XD|_DI, /* 0x35 53. '5' */ - _XD|_DI, /* 0x36 54. '6' */ - _XD|_DI, /* 0x37 55. '7' */ - _XD|_DI, /* 0x38 56. '8' */ - _XD|_DI, /* 0x39 57. '9' */ - _PU, /* 0x3A 58. ':' */ - _PU, /* 0x3B 59. ';' */ - _PU, /* 0x3C 60. '<' */ - _PU, /* 0x3D 61. '=' */ - _PU, /* 0x3E 62. '>' */ - _PU, /* 0x3F 63. '?' */ - _PU, /* 0x40 64. '@' */ - _XD|_UP, /* 0x41 65. 'A' */ - _XD|_UP, /* 0x42 66. 'B' */ - _XD|_UP, /* 0x43 67. 'C' */ - _XD|_UP, /* 0x44 68. 'D' */ - _XD|_UP, /* 0x45 69. 'E' */ - _XD|_UP, /* 0x46 70. 'F' */ - _UP, /* 0x47 71. 'G' */ - _UP, /* 0x48 72. 'H' */ - _UP, /* 0x49 73. 'I' */ - _UP, /* 0x4A 74. 'J' */ - _UP, /* 0x4B 75. 'K' */ - _UP, /* 0x4C 76. 'L' */ - _UP, /* 0x4D 77. 'M' */ - _UP, /* 0x4E 78. 'N' */ - _UP, /* 0x4F 79. 'O' */ - _UP, /* 0x50 80. 'P' */ - _UP, /* 0x51 81. 'Q' */ - _UP, /* 0x52 82. 'R' */ - _UP, /* 0x53 83. 'S' */ - _UP, /* 0x54 84. 'T' */ - _UP, /* 0x55 85. 'U' */ - _UP, /* 0x56 86. 'V' */ - _UP, /* 0x57 87. 'W' */ - _UP, /* 0x58 88. 'X' */ - _UP, /* 0x59 89. 'Y' */ - _UP, /* 0x5A 90. 'Z' */ - _PU, /* 0x5B 91. '[' */ - _PU, /* 0x5C 92. '\' */ - _PU, /* 0x5D 93. ']' */ - _PU, /* 0x5E 94. '^' */ - _PU, /* 0x5F 95. '_' */ - _PU, /* 0x60 96. '`' */ - _XD|_LO, /* 0x61 97. 'a' */ - _XD|_LO, /* 0x62 98. 'b' */ - _XD|_LO, /* 0x63 99. 'c' */ - _XD|_LO, /* 0x64 100. 'd' */ - _XD|_LO, /* 0x65 101. 'e' */ - _XD|_LO, /* 0x66 102. 'f' */ - _LO, /* 0x67 103. 'g' */ - _LO, /* 0x68 104. 'h' */ - _LO, /* 0x69 105. 'i' */ - _LO, /* 0x6A 106. 'j' */ - _LO, /* 0x6B 107. 'k' */ - _LO, /* 0x6C 108. 'l' */ - _LO, /* 0x6D 109. 'm' */ - _LO, /* 0x6E 110. 'n' */ - _LO, /* 0x6F 111. 'o' */ - _LO, /* 0x70 112. 'p' */ - _LO, /* 0x71 113. 'q' */ - _LO, /* 0x72 114. 'r' */ - _LO, /* 0x73 115. 's' */ - _LO, /* 0x74 116. 't' */ - _LO, /* 0x75 117. 'u' */ - _LO, /* 0x76 118. 'v' */ - _LO, /* 0x77 119. 'w' */ - _LO, /* 0x78 120. 'x' */ - _LO, /* 0x79 121. 'y' */ - _LO, /* 0x7A 122. 'z' */ - _PU, /* 0x7B 123. '{' */ - _PU, /* 0x7C 124. '|' */ - _PU, /* 0x7D 125. '}' */ - _PU, /* 0x7E 126. '~' */ - _CN, /* 0x7F 127. */ - - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x80 to 0x8F */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x90 to 0x9F */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xA0 to 0xAF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xB0 to 0xBF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xC0 to 0xCF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xD0 to 0xDF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xE0 to 0xEF */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* 0xF0 to 0x100 */ -}; - -#define IS_UPPER(c) (_ctype[(unsigned char)(c)] & (_UP)) -#define IS_LOWER(c) (_ctype[(unsigned char)(c)] & (_LO)) -#define IS_DIGIT(c) (_ctype[(unsigned char)(c)] & (_DI)) -#define IS_SPACE(c) (_ctype[(unsigned char)(c)] & (_SP)) - - -/******************************************************************************* - * - * FUNCTION: Acpi_cm_to_upper - * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: Convert character to uppercase - * - ******************************************************************************/ - -u32 -acpi_cm_to_upper ( - u32 c) -{ - - return (IS_LOWER(c) ? ((c)-0x20) : (c)); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_cm_to_lower - * - * PARAMETERS: - * - * RETURN: - * - * DESCRIPTION: Convert character to lowercase - * - ******************************************************************************/ - -u32 -acpi_cm_to_lower ( - u32 c) -{ - - return (IS_UPPER(c) ? ((c)+0x20) : (c)); -} - - -/******************************************************************************* - * - * FUNCTION: strupr - * - * PARAMETERS: Src_string - The source string to convert to - * - * RETURN: Src_string - * - * DESCRIPTION: Convert string to uppercase - * - ******************************************************************************/ - -NATIVE_CHAR * -acpi_cm_strupr ( - NATIVE_CHAR *src_string) -{ - NATIVE_CHAR *string; - - - /* Walk entire string, uppercasing the letters */ - - for (string = src_string; *string; ) { - *string = (char) acpi_cm_to_upper (*string); - string++; - } - - - return (src_string); -} - - -/******************************************************************************* - * - * FUNCTION: strstr - * - * PARAMETERS: String1 - - * String2 - * - * RETURN: - * - * DESCRIPTION: Checks if String2 occurs in String1. This is not really a - * full implementation of strstr, only sufficient for command - * matching - * - ******************************************************************************/ - -NATIVE_CHAR * -acpi_cm_strstr ( - NATIVE_CHAR *string1, - NATIVE_CHAR *string2) -{ - NATIVE_CHAR *string; - - - if (acpi_cm_strlen (string2) > acpi_cm_strlen (string1)) { - return (NULL); - } - - /* Walk entire string, uppercasing the letters */ - - for (string = string1; *string2; ) { - if (*string2 != *string) { - return (NULL); - } - - string2++; - string++; - } - - - return (string1); -} - - -/******************************************************************************* - * - * FUNCTION: strtoul - * - * PARAMETERS: String - Null terminated string - * Terminater - Where a pointer to the terminating byte is returned - * Base - Radix of the string - * - * RETURN: Converted value - * - * DESCRIPTION: Convert a string into an unsigned value. - * - ******************************************************************************/ - -u32 -acpi_cm_strtoul ( - const NATIVE_CHAR *string, - NATIVE_CHAR **terminator, - u32 base) -{ - u32 converted = 0; - u32 index; - u32 sign; - const NATIVE_CHAR *string_start; - u32 return_value = 0; - ACPI_STATUS status = AE_OK; - - - /* - * Save the value of the pointer to the buffer's first - * character, save the current errno value, and then - * skip over any white space in the buffer: - */ - string_start = string; - while (IS_SPACE (*string) || *string == '\t') { - ++string; - } - - /* - * The buffer may contain an optional plus or minus sign. - * If it does, then skip over it but remember what is was: - */ - if (*string == '-') { - sign = NEGATIVE; - ++string; - } - - else if (*string == '+') { - ++string; - sign = POSITIVE; - } - - else { - sign = POSITIVE; - } - - /* - * If the input parameter Base is zero, then we need to - * determine if it is octal, decimal, or hexadecimal: - */ - if (base == 0) { - if (*string == '0') { - if (acpi_cm_to_lower (*(++string)) == 'x') { - base = 16; - ++string; - } - - else { - base = 8; - } - } - - else { - base = 10; - } - } - - else if (base < 2 || base > 36) { - /* - * The specified Base parameter is not in the domain of - * this function: - */ - goto done; - } - - /* - * For octal and hexadecimal bases, skip over the leading - * 0 or 0x, if they are present. - */ - if (base == 8 && *string == '0') { - string++; - } - - if (base == 16 && - *string == '0' && - acpi_cm_to_lower (*(++string)) == 'x') - { - string++; - } - - - /* - * Main loop: convert the string to an unsigned long: - */ - while (*string) { - if (IS_DIGIT (*string)) { - index = *string - '0'; - } - - else { - index = acpi_cm_to_upper (*string); - if (IS_UPPER (index)) { - index = index - 'A' + 10; - } - - else { - goto done; - } - } - - if (index >= base) { - goto done; - } - - /* - * Check to see if value is out of range: - */ - - if (return_value > ((ACPI_UINT32_MAX - (u32) index) / - (u32) base)) - { - status = AE_ERROR; - return_value = 0L; /* reset */ - } - - else { - return_value *= base; - return_value += index; - converted = 1; - } - - ++string; - } - -done: - /* - * If appropriate, update the caller's pointer to the next - * unconverted character in the buffer. - */ - if (terminator) { - if (converted == 0 && return_value == 0L && string != NULL) { - *terminator = (NATIVE_CHAR *) string_start; - } - - else { - *terminator = (NATIVE_CHAR *) string; - } - } - - if (status == AE_ERROR) { - return_value = ACPI_UINT32_MAX; - } - - /* - * If a minus sign was present, then "the conversion is negated": - */ - if (sign == NEGATIVE) { - return_value = (ACPI_UINT32_MAX - return_value) + 1; - } - - return (return_value); -} - -#endif /* ACPI_USE_SYSTEM_CLIBRARY */ - diff -urN linux-2.4.0-test9/drivers/acpi/common/cmcopy.c linux-2.4.0-test9-lia/drivers/acpi/common/cmcopy.c --- linux-2.4.0-test9/drivers/acpi/common/cmcopy.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmcopy.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: cmcopy - Internal to external object translation utilities - * $Revision: 56 $ * *****************************************************************************/ @@ -25,17 +24,17 @@ #include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "interp.h" +#include "namesp.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmcopy") + MODULE_NAME ("cmcopy"); typedef struct search_st { - ACPI_OPERAND_OBJECT *internal_obj; + ACPI_OBJECT_INTERNAL *internal_obj; u32 index; ACPI_OBJECT *external_obj; @@ -65,13 +64,13 @@ ACPI_STATUS acpi_cm_build_external_simple_object ( - ACPI_OPERAND_OBJECT *internal_obj, + ACPI_OBJECT_INTERNAL *internal_obj, ACPI_OBJECT *external_obj, u8 *data_space, u32 *buffer_space_used) { u32 length = 0; - u8 *source_ptr = NULL; + char *source_ptr = NULL; /* @@ -104,8 +103,8 @@ length = internal_obj->string.length; external_obj->string.length = internal_obj->string.length; - external_obj->string.pointer = (NATIVE_CHAR *) data_space; - source_ptr = (u8 *) internal_obj->string.pointer; + external_obj->string.pointer = (char *) data_space; + source_ptr = internal_obj->string.pointer; break; @@ -114,7 +113,7 @@ length = internal_obj->buffer.length; external_obj->buffer.length = internal_obj->buffer.length; external_obj->buffer.pointer = data_space; - source_ptr = (u8 *) internal_obj->buffer.pointer; + source_ptr = (char *) internal_obj->buffer.pointer; break; @@ -133,7 +132,7 @@ */ external_obj->type = ACPI_TYPE_ANY; - external_obj->reference.handle = internal_obj->reference.node; + external_obj->reference.handle = internal_obj->reference.nte; break; @@ -143,10 +142,10 @@ internal_obj->processor.proc_id; external_obj->processor.pblk_address = - internal_obj->processor.address; + internal_obj->processor.pblk_address; external_obj->processor.pblk_length = - internal_obj->processor.length; + internal_obj->processor.pblk_length; break; case ACPI_TYPE_POWER: @@ -201,7 +200,7 @@ ACPI_STATUS acpi_cm_build_external_package_object ( - ACPI_OPERAND_OBJECT *internal_obj, + ACPI_OBJECT_INTERNAL *internal_obj, u8 *buffer, u32 *space_used) { @@ -212,7 +211,7 @@ u32 length = 0; u32 this_index; u32 object_space; - ACPI_OPERAND_OBJECT *this_internal_obj; + ACPI_OBJECT_INTERNAL *this_internal_obj; ACPI_OBJECT *this_external_obj; PKG_SEARCH_INFO *level_ptr; @@ -257,7 +256,7 @@ while (1) { this_index = level_ptr->index; this_internal_obj = - (ACPI_OPERAND_OBJECT *) + (ACPI_OBJECT_INTERNAL *) level_ptr->internal_obj->package.elements[this_index]; this_external_obj = (ACPI_OBJECT *) @@ -265,11 +264,10 @@ /* - * Check for - * 1) Null object -- OK, this can happen if package + * Check for 1) Null object -- OK, this can happen if package * element is never initialized - * 2) Not an internal object - can be Node instead - * 3) Any internal object other than a package. + * 2) Not an internal object - can be an NTE instead + * 3) Any internal object other than a package. * * The more complex package case is handled later */ @@ -369,6 +367,8 @@ level_ptr->index = 0; } } + + return (AE_OK); } @@ -388,7 +388,7 @@ ACPI_STATUS acpi_cm_build_external_object ( - ACPI_OPERAND_OBJECT *internal_obj, + ACPI_OBJECT_INTERNAL *internal_obj, ACPI_BUFFER *ret_buffer) { ACPI_STATUS status; @@ -446,7 +446,7 @@ ACPI_STATUS acpi_cm_build_internal_simple_object ( ACPI_OBJECT *external_obj, - ACPI_OPERAND_OBJECT *internal_obj) + ACPI_OBJECT_INTERNAL *internal_obj) { @@ -508,17 +508,18 @@ ACPI_STATUS acpi_cm_build_internal_package_object ( - ACPI_OPERAND_OBJECT *internal_obj, + ACPI_OBJECT_INTERNAL *internal_obj, u8 *buffer, u32 *space_used) { u8 *free_space; ACPI_OBJECT *external_obj; u32 current_depth = 0; + ACPI_STATUS status = AE_OK; u32 length = 0; u32 this_index; u32 object_space = 0; - ACPI_OPERAND_OBJECT *this_internal_obj; + ACPI_OBJECT_INTERNAL *this_internal_obj; ACPI_OBJECT *this_external_obj; PKG_SEARCH_INFO *level_ptr; @@ -561,7 +562,7 @@ while (1) { this_index = level_ptr->index; - this_internal_obj = (ACPI_OPERAND_OBJECT *) + this_internal_obj = (ACPI_OBJECT_INTERNAL *) &level_ptr->internal_obj->package.elements[this_index]; this_external_obj = (ACPI_OBJECT *) @@ -604,6 +605,17 @@ } /* if object is a package */ else { +/* Status = Acpi_cm_build_simple_object(This_internal_obj, + This_external_obj, Free_space, + &Object_space); +*/ + if (status != AE_OK) { + /* + * Failure get out + */ + return (status); + } + free_space += object_space; length += object_space; @@ -639,6 +651,13 @@ } } /* else object is NOT a package */ } /* while (1) */ + + + /* + * We'll never get here, but the compiler whines about + * return value + */ + return (AE_OK); } @@ -658,7 +677,7 @@ ACPI_STATUS acpi_cm_build_internal_object ( ACPI_OBJECT *external_obj, - ACPI_OPERAND_OBJECT *internal_obj) + ACPI_OBJECT_INTERNAL *internal_obj) { ACPI_STATUS status; diff -urN linux-2.4.0-test9/drivers/acpi/common/cmdebug.c linux-2.4.0-test9-lia/drivers/acpi/common/cmdebug.c --- linux-2.4.0-test9/drivers/acpi/common/cmdebug.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmdebug.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: cmdebug - Debug print routines - * $Revision: 60 $ * *****************************************************************************/ @@ -27,7 +27,7 @@ #include "acpi.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmdebug") + MODULE_NAME ("cmdebug"); /***************************************************************************** @@ -41,16 +41,16 @@ ****************************************************************************/ -u32 +s32 get_debug_level (void) { - return (acpi_dbg_level); + return acpi_dbg_level; } void set_debug_level ( - u32 new_debug_level) + s32 new_debug_level) { acpi_dbg_level = new_debug_level; @@ -75,10 +75,10 @@ void function_trace ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name) + char *module_name, + s32 line_number, + s32 component_id, + char *function_name) { acpi_gbl_nesting_level++; @@ -109,10 +109,10 @@ void function_trace_ptr ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, + char *module_name, + s32 line_number, + s32 component_id, + char *function_name, void *pointer) { @@ -142,11 +142,11 @@ void function_trace_str ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, - NATIVE_CHAR *string) + char *module_name, + s32 line_number, + s32 component_id, + char *function_name, + char *string) { acpi_gbl_nesting_level++; @@ -175,16 +175,16 @@ void function_trace_u32 ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, + char *module_name, + s32 line_number, + s32 component_id, + char *function_name, u32 integer) { acpi_gbl_nesting_level++; debug_print (module_name, line_number, component_id, TRACE_FUNCTIONS, - " %2.2ld Entered Function: %s, 0x%lX\n", + " %2.2ld Entered Function: %s, 0x%l_x\n", acpi_gbl_nesting_level, function_name, integer); } @@ -207,10 +207,10 @@ void function_exit ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name) + char *module_name, + s32 line_number, + s32 component_id, + char *function_name) { debug_print (module_name, line_number, component_id, TRACE_FUNCTIONS, @@ -240,19 +240,30 @@ void function_status_exit ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, + char *module_name, + s32 line_number, + s32 component_id, + char *function_name, ACPI_STATUS status) { - debug_print (module_name, line_number, component_id, - TRACE_FUNCTIONS, - " %2.2ld Exiting Function: %s, %s\n", - acpi_gbl_nesting_level, - function_name, - acpi_cm_format_exception (status)); + if (status > ACPI_MAX_STATUS) { + debug_print (module_name, line_number, component_id, + TRACE_FUNCTIONS, + " %2.2ld Exiting Function: %s, [Unknown Status] 0x%X\n", + acpi_gbl_nesting_level, + function_name, + status); + } + + else { + debug_print (module_name, line_number, component_id, + TRACE_FUNCTIONS, + " %2.2ld Exiting Function: %s, %s\n", + acpi_gbl_nesting_level, + function_name, + acpi_cm_format_exception (status)); + } acpi_gbl_nesting_level--; } @@ -277,10 +288,10 @@ void function_value_exit ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, + char *module_name, + s32 line_number, + s32 component_id, + char *function_name, NATIVE_UINT value) { @@ -311,11 +322,11 @@ void function_ptr_exit ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, - u8 *ptr) + char *module_name, + s32 line_number, + s32 component_id, + char *function_name, + char *ptr) { debug_print (module_name, line_number, component_id, TRACE_FUNCTIONS, @@ -346,11 +357,11 @@ void debug_print ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - u32 print_level, - NATIVE_CHAR *format, + char *module_name, + s32 line_number, + s32 component_id, + s32 print_level, + char *format, ...) { va_list args; @@ -386,8 +397,8 @@ void debug_print_prefix ( - NATIVE_CHAR *module_name, - u32 line_number) + char *module_name, + s32 line_number) { @@ -410,7 +421,7 @@ void debug_print_raw ( - NATIVE_CHAR *format, + char *format, ...) { va_list args; @@ -440,10 +451,10 @@ void acpi_cm_dump_buffer ( - u8 *buffer, + char *buffer, u32 count, u32 display, - u32 component_id) + s32 component_id) { u32 i = 0; u32 j; @@ -466,7 +477,7 @@ while (i < count) { /* Print current offset */ - acpi_os_printf ("%05X ", i); + acpi_os_printf ("%05_x ", i); /* Print 16 hex chars */ @@ -477,7 +488,7 @@ return; } - /* Make sure that the s8 doesn't get sign-extended! */ + /* Make sure that the char doesn't get sign-extended! */ switch (display) { @@ -485,7 +496,7 @@ default: - acpi_os_printf ("%02X ", + acpi_os_printf ("%02_x ", *((u8 *) &buffer[i + j])); j += 1; break; @@ -495,7 +506,7 @@ MOVE_UNALIGNED16_TO_32 (&temp32, &buffer[i + j]); - acpi_os_printf ("%04X ", temp32); + acpi_os_printf ("%04_x ", temp32); j += 2; break; @@ -504,7 +515,7 @@ MOVE_UNALIGNED32_TO_32 (&temp32, &buffer[i + j]); - acpi_os_printf ("%08X ", temp32); + acpi_os_printf ("%08_x ", temp32); j += 4; break; @@ -513,11 +524,11 @@ MOVE_UNALIGNED32_TO_32 (&temp32, &buffer[i + j]); - acpi_os_printf ("%08X", temp32); + acpi_os_printf ("%08_x", temp32); MOVE_UNALIGNED32_TO_32 (&temp32, &buffer[i + j + 4]); - acpi_os_printf ("%08X ", temp32); + acpi_os_printf ("%08_x ", temp32); j += 8; break; } diff -urN linux-2.4.0-test9/drivers/acpi/common/cmdelete.c linux-2.4.0-test9-lia/drivers/acpi/common/cmdelete.c --- linux-2.4.0-test9/drivers/acpi/common/cmdelete.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmdelete.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: cmdelete - object deletion and reference count utilities - * $Revision: 53 $ * *****************************************************************************/ @@ -25,13 +25,13 @@ #include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "actables.h" -#include "acparser.h" +#include "interp.h" +#include "namesp.h" +#include "tables.h" +#include "parser.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmdelete") + MODULE_NAME ("cmdelete"); /****************************************************************************** @@ -49,7 +49,7 @@ void acpi_cm_delete_internal_obj ( - ACPI_OPERAND_OBJECT *object) + ACPI_OBJECT_INTERNAL *object) { void *obj_pointer = NULL; @@ -110,7 +110,14 @@ case ACPI_TYPE_METHOD: - /* Delete the method semaphore if it exists */ + /* Delete parse tree if it exists */ + + if (object->method.parser_op) { + acpi_ps_delete_parse_tree (object->method.parser_op); + object->method.parser_op = NULL; + } + + /* Delete semaphore if it exists */ if (object->method.semaphore) { acpi_os_delete_semaphore (object->method.semaphore); @@ -139,7 +146,7 @@ /* Only delete the object if it was dynamically allocated */ - if (!(object->common.flags & AOPOBJ_STATIC_ALLOCATION)) { + if (!(object->common.flags & AO_STATIC_ALLOCATION)) { acpi_cm_delete_object_desc (object); } @@ -163,9 +170,9 @@ ACPI_STATUS acpi_cm_delete_internal_object_list ( - ACPI_OPERAND_OBJECT **obj_list) + ACPI_OBJECT_INTERNAL **obj_list) { - ACPI_OPERAND_OBJECT **internal_obj; + ACPI_OBJECT_INTERNAL **internal_obj; /* Walk the null-terminated internal list */ @@ -213,8 +220,8 @@ void acpi_cm_update_ref_count ( - ACPI_OPERAND_OBJECT *object, - u32 action) + ACPI_OBJECT_INTERNAL *object, + s32 action) { u16 count; u16 new_count; @@ -301,23 +308,23 @@ * DESCRIPTION: Increment the object reference count * * Object references are incremented when: - * 1) An object is attached to a Node (namespace object) + * 1) An object is added as a value in an Name Table Entry (NTE) * 2) An object is copied (all subobjects must be incremented) * * Object references are decremented when: - * 1) An object is detached from an Node + * 1) An object is removed from an NTE * ******************************************************************************/ ACPI_STATUS acpi_cm_update_object_reference ( - ACPI_OPERAND_OBJECT *object, + ACPI_OBJECT_INTERNAL *object, u16 action) { ACPI_STATUS status; u32 i; - ACPI_OPERAND_OBJECT *next; - ACPI_OPERAND_OBJECT *new; + ACPI_OBJECT_INTERNAL *next; + ACPI_OBJECT_INTERNAL *new; ACPI_GENERIC_STATE *state_list = NULL; ACPI_GENERIC_STATE *state; @@ -374,9 +381,9 @@ /* Must walk list of address handlers */ - next = object->addr_handler.next; + next = object->addr_handler.link; while (next) { - new = next->addr_handler.next; + new = next->addr_handler.link; acpi_cm_update_ref_count (next, action); next = new; @@ -505,7 +512,7 @@ void acpi_cm_add_reference ( - ACPI_OPERAND_OBJECT *object) + ACPI_OBJECT_INTERNAL *object) { @@ -542,7 +549,7 @@ void acpi_cm_remove_reference ( - ACPI_OPERAND_OBJECT *object) + ACPI_OBJECT_INTERNAL *object) { diff -urN linux-2.4.0-test9/drivers/acpi/common/cmeval.c linux-2.4.0-test9-lia/drivers/acpi/common/cmeval.c --- linux-2.4.0-test9/drivers/acpi/common/cmeval.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmeval.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: cmeval - Object evaluation - * $Revision: 14 $ * *****************************************************************************/ @@ -25,19 +25,19 @@ #include "acpi.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "namesp.h" +#include "interp.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmeval") + MODULE_NAME ("cmeval"); /**************************************************************************** * * FUNCTION: Acpi_cm_evaluate_numeric_object * - * PARAMETERS: Device_node - Node for the device + * PARAMETERS: Acpi_device - NTE for the device * *Address - Where the value is returned * * RETURN: Status @@ -51,17 +51,17 @@ ACPI_STATUS acpi_cm_evaluate_numeric_object ( - NATIVE_CHAR *object_name, - ACPI_NAMESPACE_NODE *device_node, + char *object_name, + ACPI_NAMED_OBJECT *acpi_device, u32 *address) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status; /* Execute the method */ - status = acpi_ns_evaluate_relative (device_node, object_name, NULL, &obj_desc); + status = acpi_ns_evaluate_relative (acpi_device, object_name, NULL, &obj_desc); if (ACPI_FAILURE (status)) { return (status); @@ -99,7 +99,7 @@ * * FUNCTION: Acpi_cm_execute_HID * - * PARAMETERS: Device_node - Node for the device + * PARAMETERS: Acpi_device - NTE for the device * *Hid - Where the HID is returned * * RETURN: Status @@ -113,16 +113,16 @@ ACPI_STATUS acpi_cm_execute_HID ( - ACPI_NAMESPACE_NODE *device_node, + ACPI_NAMED_OBJECT *acpi_device, DEVICE_ID *hid) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status; /* Execute the method */ - status = acpi_ns_evaluate_relative (device_node, + status = acpi_ns_evaluate_relative (acpi_device, METHOD_NAME__HID, NULL, &obj_desc); if (ACPI_FAILURE (status)) { @@ -176,7 +176,7 @@ * * FUNCTION: Acpi_cm_execute_UID * - * PARAMETERS: Device_node - Node for the device + * PARAMETERS: Acpi_device - NTE for the device * *Uid - Where the UID is returned * * RETURN: Status @@ -190,16 +190,16 @@ ACPI_STATUS acpi_cm_execute_UID ( - ACPI_NAMESPACE_NODE *device_node, + ACPI_NAMED_OBJECT *acpi_device, DEVICE_ID *uid) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status; /* Execute the method */ - status = acpi_ns_evaluate_relative (device_node, + status = acpi_ns_evaluate_relative (acpi_device, METHOD_NAME__UID, NULL, &obj_desc); if (ACPI_FAILURE (status)) { @@ -251,7 +251,7 @@ * * FUNCTION: Acpi_cm_execute_STA * - * PARAMETERS: Device_node - Node for the device + * PARAMETERS: Acpi_device - NTE for the device * *Flags - Where the status flags are returned * * RETURN: Status @@ -265,16 +265,16 @@ ACPI_STATUS acpi_cm_execute_STA ( - ACPI_NAMESPACE_NODE *device_node, + ACPI_NAMED_OBJECT *acpi_device, u32 *flags) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status; /* Execute the method */ - status = acpi_ns_evaluate_relative (device_node, + status = acpi_ns_evaluate_relative (acpi_device, METHOD_NAME__STA, NULL, &obj_desc); if (ACPI_FAILURE (status)) { diff -urN linux-2.4.0-test9/drivers/acpi/common/cmglobal.c linux-2.4.0-test9-lia/drivers/acpi/common/cmglobal.c --- linux-2.4.0-test9/drivers/acpi/common/cmglobal.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmglobal.c Thu Aug 24 18:16:02 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: cmglobal - Global variables for the ACPI subsystem - * $Revision: 99 $ * *****************************************************************************/ @@ -26,13 +26,13 @@ #define DEFINE_ACPI_GLOBALS #include "acpi.h" -#include "acevents.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "events.h" +#include "namesp.h" +#include "interp.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmglobal") + MODULE_NAME ("cmglobal"); /****************************************************************************** @@ -126,25 +126,31 @@ NSP_NEWSCOPE | NSP_LOCAL, /* 13 Thermal */ NSP_NORMAL, /* 14 Buffer_field */ NSP_NORMAL, /* 15 Ddb_handle */ - NSP_NORMAL, /* 16 Debug Object */ - NSP_NORMAL, /* 17 Def_field */ - NSP_NORMAL, /* 18 Bank_field */ - NSP_NORMAL, /* 19 Index_field */ - NSP_NORMAL, /* 20 Reference */ - NSP_NORMAL, /* 21 Alias */ - NSP_NORMAL, /* 22 Notify */ - NSP_NORMAL, /* 23 Address Handler */ - NSP_NORMAL, /* 24 Def_field_defn */ - NSP_NORMAL, /* 25 Bank_field_defn */ - NSP_NORMAL, /* 26 Index_field_defn */ - NSP_NORMAL, /* 27 If */ - NSP_NORMAL, /* 28 Else */ - NSP_NORMAL, /* 29 While */ - NSP_NEWSCOPE, /* 30 Scope */ - NSP_LOCAL, /* 31 Def_any */ - NSP_NORMAL, /* 32 Method Arg */ - NSP_NORMAL, /* 33 Method Local */ - NSP_NORMAL /* 34 Invalid */ + NSP_NORMAL, /* 16 reserved */ + NSP_NORMAL, /* 17 reserved */ + NSP_NORMAL, /* 18 reserved */ + NSP_NORMAL, /* 19 reserved */ + NSP_NORMAL, /* 20 reserved */ + NSP_NORMAL, /* 21 reserved */ + NSP_NORMAL, /* 22 reserved */ + NSP_NORMAL, /* 23 reserved */ + NSP_NORMAL, /* 24 reserved */ + NSP_NORMAL, /* 25 Def_field */ + NSP_NORMAL, /* 26 Bank_field */ + NSP_NORMAL, /* 27 Index_field */ + NSP_NORMAL, /* 28 Def_field_defn */ + NSP_NORMAL, /* 29 Bank_field_defn */ + NSP_NORMAL, /* 30 Index_field_defn */ + NSP_NORMAL, /* 31 If */ + NSP_NORMAL, /* 32 Else */ + NSP_NORMAL, /* 33 While */ + NSP_NEWSCOPE, /* 34 Scope */ + NSP_LOCAL, /* 35 Def_any */ + NSP_NORMAL, /* 36 Reference */ + NSP_NORMAL, /* 37 Alias */ + NSP_NORMAL, /* 38 Notify */ + NSP_NORMAL, /* 39 Address Handler */ + NSP_NORMAL /* 40 Invalid */ }; @@ -171,7 +177,8 @@ /* RSDT 6 */ {RSDT_SIG, RSDT_SIG, sizeof (RSDT_SIG)-1, ACPI_TABLE_SINGLE, AE_OK, NULL}, /* SSDT 7 */ {SSDT_SIG, SSDT_SIG, sizeof (SSDT_SIG)-1, ACPI_TABLE_MULTIPLE, AE_OK, NULL}, /* SBST 8 */ {SBST_SIG, SBST_SIG, sizeof (SBST_SIG)-1, ACPI_TABLE_SINGLE, AE_OK, (void **) &acpi_gbl_SBST}, - /* BOOT 9 */ {BOOT_SIG, BOOT_SIG, sizeof (BOOT_SIG)-1, ACPI_TABLE_SINGLE, AE_SUPPORT, NULL} + /* SPIC 9 */ {SPIC_SIG, SPIC_SIG, sizeof (SPIC_SIG)-1, ACPI_TABLE_MULTIPLE, AE_OK, NULL}, + /* BOOT 10 */{BOOT_SIG, BOOT_SIG, sizeof (BOOT_SIG)-1, ACPI_TABLE_SINGLE, AE_SUPPORT, NULL} }; ACPI_INIT_DATA acpi_gbl_acpi_init_data; @@ -198,11 +205,11 @@ if ((type < INTERNAL_TYPE_BEGIN) || (type > INTERNAL_TYPE_MAX)) { - return (FALSE); + return FALSE; } } - return (TRUE); + return TRUE; } @@ -218,60 +225,16 @@ * ****************************************************************************/ -NATIVE_CHAR * +char * acpi_cm_format_exception ( ACPI_STATUS status) { - NATIVE_CHAR *exception = "UNKNOWN_STATUS"; - ACPI_STATUS sub_status; - - - sub_status = (status & ~AE_CODE_MASK); - - switch (status & AE_CODE_MASK) - { - case AE_CODE_ENVIRONMENTAL: - - if (sub_status <= AE_CODE_ENV_MAX) { - exception = acpi_gbl_exception_names_env [sub_status]; - } - break; - - case AE_CODE_PROGRAMMER: - - if (sub_status <= AE_CODE_PGM_MAX) { - exception = acpi_gbl_exception_names_pgm [sub_status -1]; - } - break; - - case AE_CODE_ACPI_TABLES: - - if (sub_status <= AE_CODE_TBL_MAX) { - exception = acpi_gbl_exception_names_tbl [sub_status -1]; - } - break; - - case AE_CODE_AML: - - if (sub_status <= AE_CODE_AML_MAX) { - exception = acpi_gbl_exception_names_aml [sub_status -1]; - } - break; - - case AE_CODE_CONTROL: - - if (sub_status <= AE_CODE_CTRL_MAX) { - exception = acpi_gbl_exception_names_ctrl [sub_status -1]; - } - break; - - default: - break; + if (status > ACPI_MAX_STATUS) { + return "UNKNOWN_STATUS"; } - - return (exception); + return (acpi_gbl_exception_names [status]); } @@ -427,11 +390,6 @@ acpi_gbl_parse_cache_requests = 0; acpi_gbl_parse_cache_hits = 0; - acpi_gbl_ext_parse_cache = NULL; - acpi_gbl_ext_parse_cache_depth = 0; - acpi_gbl_ext_parse_cache_requests = 0; - acpi_gbl_ext_parse_cache_hits = 0; - acpi_gbl_object_cache = NULL; acpi_gbl_object_cache_depth = 0; acpi_gbl_object_cache_requests = 0; @@ -445,7 +403,7 @@ /* Interpreter */ acpi_gbl_buf_seq = 0; - acpi_gbl_node_err = FALSE; + acpi_gbl_named_object_err = FALSE; /* Parser */ @@ -461,15 +419,18 @@ /* Namespace */ - acpi_gbl_root_node = NULL; - - acpi_gbl_root_node_struct.name = ACPI_ROOT_NAME; - acpi_gbl_root_node_struct.data_type = ACPI_DESC_TYPE_NAMED; - acpi_gbl_root_node_struct.type = ACPI_TYPE_ANY; - acpi_gbl_root_node_struct.child = NULL; - acpi_gbl_root_node_struct.peer = NULL; - acpi_gbl_root_node_struct.object = NULL; - acpi_gbl_root_node_struct.flags = ANOBJ_END_OF_PEER_LIST; + acpi_gbl_root_name_table.next_table = NULL; + acpi_gbl_root_name_table.parent_entry = NULL; + acpi_gbl_root_name_table.parent_table = NULL; + + acpi_gbl_root_object = acpi_gbl_root_name_table.entries; + + acpi_gbl_root_object->name = ACPI_ROOT_NAME; + acpi_gbl_root_object->data_type = ACPI_DESC_TYPE_NAMED; + acpi_gbl_root_object->type = ACPI_TYPE_ANY; + acpi_gbl_root_object->this_index = 0; + acpi_gbl_root_object->child_table = NULL; + acpi_gbl_root_object->object = NULL; /* Memory allocation metrics - compiled out in non-debug mode. */ diff -urN linux-2.4.0-test9/drivers/acpi/common/cminit.c linux-2.4.0-test9-lia/drivers/acpi/common/cminit.c --- linux-2.4.0-test9/drivers/acpi/common/cminit.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cminit.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: cminit - Common ACPI subsystem initialization - * $Revision: 79 $ * *****************************************************************************/ @@ -25,14 +25,14 @@ #include "acpi.h" -#include "achware.h" -#include "acnamesp.h" -#include "acevents.h" -#include "acparser.h" -#include "acdispat.h" +#include "hardware.h" +#include "namesp.h" +#include "events.h" +#include "parser.h" +#include "dispatch.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cminit") + MODULE_NAME ("cminit"); /******************************************************************************* @@ -52,7 +52,7 @@ void acpi_cm_facp_register_error ( - NATIVE_CHAR *register_name, + char *register_name, u32 value) { @@ -77,7 +77,7 @@ acpi_cm_hardware_initialize (void) { ACPI_STATUS status = AE_OK; - u32 index; + s32 index; /* Are we running on the actual hardware */ @@ -351,9 +351,8 @@ acpi_ps_delete_parse_cache (); /* Debug only - display leftover memory allocation, if any */ -#ifdef ENABLE_DEBUGGER + acpi_cm_dump_current_allocations (ACPI_UINT32_MAX, NULL); -#endif BREAKPOINT3; diff -urN linux-2.4.0-test9/drivers/acpi/common/cmobject.c linux-2.4.0-test9-lia/drivers/acpi/common/cmobject.c --- linux-2.4.0-test9/drivers/acpi/common/cmobject.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmobject.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: cmobject - ACPI object create/delete/size/cache routines - * $Revision: 27 $ * *****************************************************************************/ @@ -25,14 +25,14 @@ #include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "actables.h" +#include "interp.h" +#include "namesp.h" +#include "tables.h" #include "amlcode.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmobject") + MODULE_NAME ("cmobject"); /****************************************************************************** @@ -57,14 +57,14 @@ * ******************************************************************************/ -ACPI_OPERAND_OBJECT * +ACPI_OBJECT_INTERNAL * _cm_create_internal_object ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, + char *module_name, + s32 line_number, + s32 component_id, OBJECT_TYPE_INTERNAL type) { - ACPI_OPERAND_OBJECT *object; + ACPI_OBJECT_INTERNAL *object; /* Allocate the raw object descriptor */ @@ -79,6 +79,7 @@ /* Save the object type in the object descriptor */ object->common.type = type; + object->common.size = (u8) sizeof (ACPI_OBJECT_INTERNAL); /* Init the reference count */ @@ -87,6 +88,10 @@ /* Any per-type initialization should go here */ + /* Memory allocation metrics - compiled out in non debug mode. */ + + INCREMENT_OBJECT_METRICS (sizeof (ACPI_OBJECT_INTERNAL)); + return (object); } @@ -97,7 +102,7 @@ * * PARAMETERS: Operand - Object to be validated * - * RETURN: Validate a pointer to be an ACPI_OPERAND_OBJECT + * RETURN: Validate a pointer to be an ACPI_OBJECT_INTERNAL * *****************************************************************************/ @@ -109,13 +114,13 @@ /* Check for a null pointer */ if (!object) { - return (FALSE); + return FALSE; } /* Check for a pointer within one of the ACPI tables */ if (acpi_tb_system_table_pointer (object)) { - return (FALSE); + return FALSE; } /* Check the descriptor type field */ @@ -126,13 +131,13 @@ - return (FALSE); + return FALSE; } - /* The object appears to be a valid ACPI_OPERAND_OBJECT */ + /* The object appears to be a valid ACPI_OBJECT_INTERNAL */ - return (TRUE); + return TRUE; } @@ -154,11 +159,11 @@ void * _cm_allocate_object_desc ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id) + char *module_name, + s32 line_number, + s32 component_id) { - ACPI_OPERAND_OBJECT *object; + ACPI_OBJECT_INTERNAL *object; acpi_cm_acquire_mutex (ACPI_MTX_CACHES); @@ -171,8 +176,8 @@ /* There is an object available, use it */ object = acpi_gbl_object_cache; - acpi_gbl_object_cache = object->cache.next; - object->cache.next = NULL; + acpi_gbl_object_cache = object->common.next; + object->common.next = NULL; acpi_gbl_object_cache_hits++; acpi_gbl_object_cache_depth--; @@ -187,8 +192,9 @@ /* Attempt to allocate new descriptor */ - object = _cm_callocate (sizeof (ACPI_OPERAND_OBJECT), component_id, + object = _cm_callocate (sizeof (ACPI_OBJECT_INTERNAL), component_id, module_name, line_number); + if (!object) { /* Allocation failed */ @@ -197,10 +203,6 @@ return (NULL); } - - /* Memory allocation metrics - compiled out in non debug mode. */ - - INCREMENT_OBJECT_METRICS (sizeof (ACPI_OPERAND_OBJECT)); } /* Mark the descriptor type */ @@ -225,19 +227,19 @@ void acpi_cm_delete_object_desc ( - ACPI_OPERAND_OBJECT *object) + ACPI_OBJECT_INTERNAL *object) { - /* Make sure that the object isn't already in the cache */ + /* Object must be an ACPI_OBJECT_INTERNAL */ - if (object->common.data_type == (ACPI_DESC_TYPE_INTERNAL | ACPI_CACHED_OBJECT)) { + if (object->common.data_type != ACPI_DESC_TYPE_INTERNAL) { return; } - /* Object must be an ACPI_OPERAND_OBJECT */ + /* Make sure that the object isn't already in the cache */ - if (object->common.data_type != ACPI_DESC_TYPE_INTERNAL) { + if (object->common.next) { return; } @@ -249,7 +251,7 @@ * Memory allocation metrics. Call the macro here since we only * care about dynamically allocated objects. */ - DECREMENT_OBJECT_METRICS (sizeof (ACPI_OPERAND_OBJECT)); + DECREMENT_OBJECT_METRICS (acpi_gbl_object_cache->common.size); acpi_cm_free (object); return; @@ -259,18 +261,17 @@ /* Clear the entire object. This is important! */ - MEMSET (object, 0, sizeof (ACPI_OPERAND_OBJECT)); - object->common.data_type = ACPI_DESC_TYPE_INTERNAL | ACPI_CACHED_OBJECT; + MEMSET (object, 0, sizeof (ACPI_OBJECT_INTERNAL)); + object->common.data_type = ACPI_DESC_TYPE_INTERNAL; /* Put the object at the head of the global cache list */ - object->cache.next = acpi_gbl_object_cache; + object->common.next = acpi_gbl_object_cache; acpi_gbl_object_cache = object; acpi_gbl_object_cache_depth++; acpi_cm_release_mutex (ACPI_MTX_CACHES); - return; } @@ -291,7 +292,7 @@ acpi_cm_delete_object_cache ( void) { - ACPI_OPERAND_OBJECT *next; + ACPI_OBJECT_INTERNAL *next; /* Traverse the global cache list */ @@ -299,18 +300,17 @@ while (acpi_gbl_object_cache) { /* Delete one cached state object */ - next = acpi_gbl_object_cache->cache.next; - acpi_gbl_object_cache->cache.next = NULL; + next = acpi_gbl_object_cache->common.next; + acpi_gbl_object_cache->common.next = NULL; /* * Memory allocation metrics. Call the macro here since we only * care about dynamically allocated objects. */ - DECREMENT_OBJECT_METRICS (sizeof (ACPI_OPERAND_OBJECT)); + DECREMENT_OBJECT_METRICS (acpi_gbl_object_cache->common.size); acpi_cm_free (acpi_gbl_object_cache); acpi_gbl_object_cache = next; - acpi_gbl_object_cache_depth--; } return; @@ -333,7 +333,7 @@ void acpi_cm_init_static_object ( - ACPI_OPERAND_OBJECT *obj_desc) + ACPI_OBJECT_INTERNAL *obj_desc) { @@ -345,12 +345,12 @@ /* * Clear the entire descriptor */ - MEMSET ((void *) obj_desc, 0, sizeof (ACPI_OPERAND_OBJECT)); + MEMSET ((void *) obj_desc, 0, sizeof (ACPI_OBJECT_INTERNAL)); /* * Initialize the header fields - * 1) This is an ACPI_OPERAND_OBJECT descriptor + * 1) This is an ACPI_OBJECT_INTERNAL descriptor * 2) The size is the full object (worst case) * 3) The flags field indicates static allocation * 4) Reference count starts at one (not really necessary since the @@ -358,7 +358,8 @@ */ obj_desc->common.data_type = ACPI_DESC_TYPE_INTERNAL; - obj_desc->common.flags = AOPOBJ_STATIC_ALLOCATION; + obj_desc->common.size = sizeof (ACPI_OBJECT_INTERNAL); + obj_desc->common.flags = AO_STATIC_ALLOCATION; obj_desc->common.reference_count = 1; return; @@ -384,7 +385,7 @@ ACPI_STATUS acpi_cm_get_simple_object_size ( - ACPI_OPERAND_OBJECT *internal_obj, + ACPI_OBJECT_INTERNAL *internal_obj, u32 *obj_length) { u32 length; @@ -404,7 +405,7 @@ length = sizeof (ACPI_OBJECT); if (VALID_DESCRIPTOR_TYPE (internal_obj, ACPI_DESC_TYPE_NAMED)) { - /* Object is a named object (reference), just return the length */ + /* Object is an NTE (reference), just return the length */ *obj_length = (u32) ROUND_UP_TO_NATIVE_WORD (length); return (status); @@ -494,13 +495,13 @@ ACPI_STATUS acpi_cm_get_package_object_size ( - ACPI_OPERAND_OBJECT *internal_obj, + ACPI_OBJECT_INTERNAL *internal_obj, u32 *obj_length) { - ACPI_OPERAND_OBJECT *this_internal_obj; - ACPI_OPERAND_OBJECT *parent_obj[MAX_PACKAGE_DEPTH] = { 0,0,0,0,0 }; - ACPI_OPERAND_OBJECT *this_parent; + ACPI_OBJECT_INTERNAL *this_internal_obj; + ACPI_OBJECT_INTERNAL *parent_obj[MAX_PACKAGE_DEPTH] = { 0,0,0,0,0 }; + ACPI_OBJECT_INTERNAL *this_parent; u32 this_index; u32 index[MAX_PACKAGE_DEPTH] = { 0,0,0,0,0 }; u32 length = 0; @@ -536,7 +537,7 @@ status = acpi_cm_get_simple_object_size (this_internal_obj, &object_space); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { return (status); } @@ -602,6 +603,8 @@ } } } + + return (AE_OK); } @@ -621,7 +624,7 @@ ACPI_STATUS acpi_cm_get_object_size( - ACPI_OPERAND_OBJECT *internal_obj, + ACPI_OBJECT_INTERNAL *internal_obj, u32 *obj_length) { ACPI_STATUS status; @@ -639,7 +642,7 @@ acpi_cm_get_simple_object_size (internal_obj, obj_length); } - return (status); + return status; } diff -urN linux-2.4.0-test9/drivers/acpi/common/cmutils.c linux-2.4.0-test9-lia/drivers/acpi/common/cmutils.c --- linux-2.4.0-test9/drivers/acpi/common/cmutils.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmutils.c Wed Jul 5 11:23:12 2000 @@ -1,9 +1,8 @@ -/******************************************************************************* +/****************************************************************************** * * Module Name: cmutils - common utility procedures - * $Revision: 18 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -25,19 +24,19 @@ #include "acpi.h" -#include "acevents.h" -#include "achware.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "events.h" +#include "hardware.h" +#include "namesp.h" +#include "interp.h" #include "amlcode.h" -#include "acdebug.h" +#include "debugger.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmutils") + MODULE_NAME ("cmutils"); -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_cm_valid_acpi_name * @@ -50,13 +49,13 @@ * 2) numeric * 3) underscore * - ******************************************************************************/ + ****************************************************************************/ u8 acpi_cm_valid_acpi_name ( u32 name) { - NATIVE_CHAR *name_ptr = (NATIVE_CHAR *) &name; + char *name_ptr = (char *) &name; u32 i; @@ -65,16 +64,16 @@ (name_ptr[i] >= 'A' && name_ptr[i] <= 'Z') || (name_ptr[i] >= '0' && name_ptr[i] <= '9'))) { - return (FALSE); + return FALSE; } } - return (TRUE); + return TRUE; } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_cm_valid_acpi_character * @@ -84,11 +83,11 @@ * * DESCRIPTION: Check for a printable character * - ******************************************************************************/ + ****************************************************************************/ u8 acpi_cm_valid_acpi_character ( - NATIVE_CHAR character) + char character) { return ((u8) ((character == '_') || @@ -97,7 +96,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_cm_mutex_initialize * @@ -107,7 +106,7 @@ * * DESCRIPTION: Create the system mutex objects. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_cm_mutex_initialize ( @@ -131,7 +130,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_cm_mutex_terminate * @@ -141,7 +140,7 @@ * * DESCRIPTION: Delete all of the system mutex objects. * - ******************************************************************************/ + ****************************************************************************/ void acpi_cm_mutex_terminate ( @@ -161,7 +160,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_cm_create_mutex * @@ -171,7 +170,7 @@ * * DESCRIPTION: Create a mutex object. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_cm_create_mutex ( @@ -196,7 +195,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_cm_delete_mutex * @@ -206,7 +205,7 @@ * * DESCRIPTION: Delete a mutex object. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_cm_delete_mutex ( @@ -229,7 +228,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_cm_acquire_mutex * @@ -239,7 +238,7 @@ * * DESCRIPTION: Acquire a mutex object. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_cm_acquire_mutex ( @@ -253,8 +252,9 @@ } - status = acpi_os_wait_semaphore (acpi_gbl_acpi_mutex_info[mutex_id].mutex, - 1, WAIT_FOREVER); + status = + acpi_os_wait_semaphore (acpi_gbl_acpi_mutex_info[mutex_id].mutex, + 1, WAIT_FOREVER); if (ACPI_SUCCESS (status)) { acpi_gbl_acpi_mutex_info[mutex_id].locked = TRUE; @@ -265,7 +265,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_cm_release_mutex * @@ -275,7 +275,7 @@ * * DESCRIPTION: Release a mutex object. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_cm_release_mutex ( @@ -291,14 +291,14 @@ acpi_gbl_acpi_mutex_info[mutex_id].locked = FALSE; /* Mark before unlocking */ - status = acpi_os_signal_semaphore (acpi_gbl_acpi_mutex_info[mutex_id].mutex, 1); - + status = + acpi_os_signal_semaphore (acpi_gbl_acpi_mutex_info[mutex_id].mutex, 1); return (status); } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_cm_create_update_state_and_push * @@ -314,7 +314,7 @@ ACPI_STATUS acpi_cm_create_update_state_and_push ( - ACPI_OPERAND_OBJECT *object, + ACPI_OBJECT_INTERNAL *object, u16 action, ACPI_GENERIC_STATE **state_list) { @@ -324,21 +324,21 @@ /* Ignore null objects; these are expected */ if (!object) { - return (AE_OK); + return AE_OK; } state = acpi_cm_create_update_state (object, action); if (!state) { - return (AE_NO_MEMORY); + return AE_NO_MEMORY; } acpi_cm_push_generic_state (state_list, state); - return (AE_OK); + return AE_OK; } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_cm_push_generic_state * @@ -365,7 +365,7 @@ } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_cm_pop_generic_state * @@ -397,7 +397,7 @@ } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_cm_create_generic_state * @@ -433,7 +433,6 @@ acpi_gbl_generic_state_cache_depth--; acpi_cm_release_mutex (ACPI_MTX_CACHES); - } else { @@ -447,23 +446,18 @@ /* Initialize */ if (state) { - /* Always zero out the object before init */ - - MEMSET (state, 0, sizeof (ACPI_GENERIC_STATE)); - state->common.data_type = ACPI_DESC_TYPE_STATE; } - return (state); + return state; } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_cm_create_update_state * - * PARAMETERS: Object - Initial Object to be installed in the - * state + * PARAMETERS: Object - Initial Object to be installed in the state * Action - Update action to be performed * * RETURN: Status @@ -476,7 +470,7 @@ ACPI_GENERIC_STATE * acpi_cm_create_update_state ( - ACPI_OPERAND_OBJECT *object, + ACPI_OBJECT_INTERNAL *object, u16 action) { ACPI_GENERIC_STATE *state; @@ -486,7 +480,7 @@ state = acpi_cm_create_generic_state (); if (!state) { - return (NULL); + return NULL; } /* Init fields specific to the update struct */ @@ -498,7 +492,7 @@ } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_cm_create_control_state * @@ -522,7 +516,7 @@ state = acpi_cm_create_generic_state (); if (!state) { - return (NULL); + return NULL; } @@ -534,7 +528,7 @@ } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_cm_delete_generic_state * @@ -581,7 +575,7 @@ } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_cm_delete_generic_state_cache * @@ -609,14 +603,13 @@ next = acpi_gbl_generic_state_cache->common.next; acpi_cm_free (acpi_gbl_generic_state_cache); acpi_gbl_generic_state_cache = next; - acpi_gbl_generic_state_cache_depth--; } return; } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: _Report_error * @@ -629,14 +622,14 @@ * * DESCRIPTION: Print error message from KD table * - ******************************************************************************/ + ****************************************************************************/ void _report_error ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *message) + char *module_name, + s32 line_number, + s32 component_id, + char *message) { debug_print (module_name, line_number, component_id, ACPI_ERROR, @@ -645,7 +638,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: _Report_warning * @@ -658,14 +651,14 @@ * * DESCRIPTION: Print warning message from KD table * - ******************************************************************************/ + ****************************************************************************/ void _report_warning ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *message) + char *module_name, + s32 line_number, + s32 component_id, + char *message) { debug_print (module_name, line_number, component_id, ACPI_WARN, @@ -674,7 +667,35 @@ } -/******************************************************************************* +/***************************************************************************** + * + * FUNCTION: _Report_success + * + * PARAMETERS: Module_name - Caller's module name (for error output) + * Line_number - Caller's line number (for error output) + * Component_id - Caller's component ID (for error output) + * Message - Error message to use on failure + * + * RETURN: None + * + * DESCRIPTION: Print warning message from KD table + * + ****************************************************************************/ + +void +_report_success ( + char *module_name, + s32 line_number, + s32 component_id, + char *message) +{ + + debug_print (module_name, line_number, component_id, ACPI_OK, + "*** Success: %s\n", message); +} + + +/***************************************************************************** * * FUNCTION: _Report_info * @@ -687,14 +708,14 @@ * * DESCRIPTION: Print information message from KD table * - ******************************************************************************/ + ****************************************************************************/ void _report_info ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *message) + char *module_name, + s32 line_number, + s32 component_id, + char *message) { debug_print (module_name, line_number, component_id, ACPI_INFO, diff -urN linux-2.4.0-test9/drivers/acpi/common/cmxface.c linux-2.4.0-test9-lia/drivers/acpi/common/cmxface.c --- linux-2.4.0-test9/drivers/acpi/common/cmxface.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/common/cmxface.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: cmxface - External interfaces for "global" ACPI functions - * $Revision: 43 $ * *****************************************************************************/ @@ -25,16 +24,16 @@ #include "acpi.h" -#include "acevents.h" -#include "achware.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "events.h" +#include "hardware.h" +#include "namesp.h" +#include "interp.h" #include "amlcode.h" -#include "acdebug.h" +#include "debugger.h" #define _COMPONENT MISCELLANEOUS - MODULE_NAME ("cmxface") + MODULE_NAME ("cmxface"); /******************************************************************************* @@ -78,8 +77,6 @@ /* If configured, initialize the AML debugger */ - DEBUGGER_EXEC (acpi_db_initialize ()); - return (status); } @@ -103,9 +100,7 @@ /* Terminate the AML Debuger if present */ acpi_gbl_db_terminate_threads = TRUE; - - /* TBD: [Investigate] This is no longer needed?*/ -/* Acpi_cm_release_mutex (ACPI_MTX_DEBUG_CMD_READY); */ + acpi_cm_release_mutex (ACPI_MTX_DEBUG_CMD_READY); /* Shutdown and free all resources */ @@ -229,7 +224,7 @@ ACPI_BUFFER *out_buffer) { u32 length; - NATIVE_CHAR *formatted_exception; + char *formatted_exception; /* @@ -242,7 +237,14 @@ } - /* Convert the exception code (Handles bad exception codes) */ + /* Exception must be within range */ + + if (exception > ACPI_MAX_STATUS) { + return (AE_BAD_PARAMETER); + } + + + /* Convert the exception code */ formatted_exception = acpi_cm_format_exception (exception); diff -urN linux-2.4.0-test9/drivers/acpi/cpu.c linux-2.4.0-test9-lia/drivers/acpi/cpu.c --- linux-2.4.0-test9/drivers/acpi/cpu.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/cpu.c Wed Jul 12 13:21:57 2000 @@ -25,9 +25,6 @@ #include "acpi.h" #include "driver.h" -#define _COMPONENT OS_DEPENDENT - MODULE_NAME ("cpu") - unsigned long acpi_c2_exit_latency = ACPI_INFINITE; unsigned long acpi_c3_exit_latency = ACPI_INFINITE; unsigned long acpi_c2_enter_latency = ACPI_INFINITE; @@ -36,7 +33,6 @@ static unsigned long acpi_pblk = ACPI_INVALID; static int acpi_c2_tested = 0; static int acpi_c3_tested = 0; -static int acpi_max_c_state = 1; /* * Clear busmaster activity flag @@ -105,14 +101,10 @@ /* * start from the previous sleep level.. */ - if (sleep_level == 1 - || acpi_max_c_state < 2) + if (sleep_level == 1) goto sleep1; - - if (sleep_level == 2 - || acpi_max_c_state < 3) + if (sleep_level == 2) goto sleep2; - sleep3: sleep_level = 3; if (!acpi_c3_tested) { @@ -201,8 +193,7 @@ acpi_clear_bm_activity(facp); continue; } - if (time > acpi_c3_enter_latency - && acpi_max_c_state >= 3) + if (time > acpi_c3_enter_latency) goto sleep3; } @@ -219,8 +210,7 @@ time = TIME_BEGIN(pm_tmr); safe_halt(); time = TIME_END(pm_tmr, time); - if (time > acpi_c2_enter_latency - && acpi_max_c_state >= 2) + if (time > acpi_c2_enter_latency) goto sleep2; } @@ -270,19 +260,12 @@ return AE_OK; if (lat[2].latency < MAX_CX_STATE_LATENCY) { - printk(KERN_INFO "ACPI: C2"); + printk(KERN_INFO "ACPI: C2 supported\n"); acpi_c2_exit_latency = lat[2].latency; - acpi_max_c_state = 2; - - if (lat[3].latency < MAX_CX_STATE_LATENCY) { - printk(", C3 supported\n"); - acpi_c3_exit_latency = lat[3].latency; - acpi_max_c_state = 3; - } - else { - printk(" supported\n"); - } - + } + if (lat[3].latency < MAX_CX_STATE_LATENCY) { + printk(KERN_INFO "ACPI: C3 supported\n"); + acpi_c3_exit_latency = lat[3].latency; } memset(throttle, 0, sizeof(throttle)); @@ -308,7 +291,7 @@ { acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, + ACPI_INT32_MAX, acpi_find_cpu, NULL, NULL); diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/Makefile linux-2.4.0-test9-lia/drivers/acpi/dispatcher/Makefile --- linux-2.4.0-test9/drivers/acpi/dispatcher/Makefile Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/Makefile Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -SUB_DIRS := -MOD_SUB_DIRS := $(SUB_DIRS) -MOD_IN_SUB_DIRS := -ALL_SUB_DIRS := $(SUB_DIRS) - -O_TARGET := ../$(shell basename `pwd`).o -O_OBJS := -M_OBJS := - -ACPI_OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) - -EXTRA_CFLAGS += -I../include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) - -# if the interpreter is used, it overrides arch/i386/kernel/acpi.c -ifeq ($(CONFIG_ACPI_INTERPRETER),y) - O_OBJS := $(ACPI_OBJS) -endif - -include $(TOPDIR)/Rules.make - -clean: - $(RM) *.o diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dsfield.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsfield.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dsfield.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsfield.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: dsfield - Dispatcher field routines - * $Revision: 29 $ * *****************************************************************************/ @@ -26,13 +26,13 @@ #include "acpi.h" #include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" #define _COMPONENT DISPATCHER - MODULE_NAME ("dsfield") + MODULE_NAME ("dsfield"); /* @@ -46,28 +46,28 @@ #define FIELD_UPDATE_RULE_MASK 0x60 -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_create_field * * PARAMETERS: Op - Op containing the Field definition and args - * Region_node - Object for the containing Operation Region + * Region - NTE for the containing Operation Region * * RETURN: Status * * DESCRIPTION: Create a new field in the specified operation region * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_create_field ( - ACPI_PARSE_OBJECT *op, - ACPI_NAMESPACE_NODE *region_node, + ACPI_GENERIC_OP *op, + ACPI_HANDLE region, ACPI_WALK_STATE *walk_state) { ACPI_STATUS status = AE_AML_ERROR; - ACPI_PARSE_OBJECT *arg; - ACPI_NAMESPACE_NODE *node; + ACPI_GENERIC_OP *arg; + ACPI_NAMED_OBJECT *entry; u8 field_flags; u8 access_attribute = 0; u32 field_bit_position = 0; @@ -76,16 +76,6 @@ /* First arg is the name of the parent Op_region */ arg = op->value.arg; - if (!region_node) { - status = acpi_ns_lookup (walk_state->scope_info, arg->value.name, - ACPI_TYPE_REGION, IMODE_EXECUTE, - NS_SEARCH_PARENT, walk_state, - ®ion_node); - - if (ACPI_FAILURE (status)) { - return (status); - } - } /* Second arg is the field flags */ @@ -121,29 +111,32 @@ case AML_NAMEDFIELD_OP: status = acpi_ns_lookup (walk_state->scope_info, - (NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)arg)->name, + (char *) &((ACPI_NAMED_OP *)arg)->name, INTERNAL_TYPE_DEF_FIELD, IMODE_LOAD_PASS1, NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &node); + NULL, &entry); if (ACPI_FAILURE (status)) { return (status); } /* - * Initialize an object for the new Node that is on + * Initialize an object for the new NTE that is on * the object stack */ - status = acpi_aml_prep_def_field_value (node, region_node, field_flags, - access_attribute, field_bit_position, arg->value.size); + status = acpi_aml_prep_def_field_value (entry, region, + field_flags, + access_attribute, + field_bit_position, + arg->value.size); if (ACPI_FAILURE (status)) { return (status); } - /* Keep track of bit position for *next* field */ + /* Keep track of bit position for the *next* field */ field_bit_position += arg->value.size; break; @@ -156,29 +149,29 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_create_bank_field * * PARAMETERS: Op - Op containing the Field definition and args - * Region_node - Object for the containing Operation Region + * Region - NTE for the containing Operation Region * * RETURN: Status * * DESCRIPTION: Create a new bank field in the specified operation region * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_create_bank_field ( - ACPI_PARSE_OBJECT *op, - ACPI_NAMESPACE_NODE *region_node, + ACPI_GENERIC_OP *op, + ACPI_HANDLE region, ACPI_WALK_STATE *walk_state) { ACPI_STATUS status = AE_AML_ERROR; - ACPI_PARSE_OBJECT *arg; - ACPI_NAMESPACE_NODE *register_node; - ACPI_NAMESPACE_NODE *node; + ACPI_GENERIC_OP *arg; + ACPI_NAMED_OBJECT *bank_reg; + ACPI_NAMED_OBJECT *entry; u32 bank_value; u8 field_flags; u8 access_attribute = 0; @@ -188,18 +181,8 @@ /* First arg is the name of the parent Op_region */ arg = op->value.arg; - if (!region_node) { - status = acpi_ns_lookup (walk_state->scope_info, arg->value.name, - ACPI_TYPE_REGION, IMODE_EXECUTE, - NS_SEARCH_PARENT, walk_state, - ®ion_node); - - if (ACPI_FAILURE (status)) { - return (status); - } - } - /* Second arg is the Bank Register */ + /* Socond arg is the Bank Register */ arg = arg->next; @@ -207,7 +190,7 @@ INTERNAL_TYPE_BANK_FIELD_DEFN, IMODE_LOAD_PASS1, NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, ®ister_node); + NULL, &bank_reg); if (ACPI_FAILURE (status)) { return (status); @@ -253,24 +236,27 @@ case AML_NAMEDFIELD_OP: status = acpi_ns_lookup (walk_state->scope_info, - (NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)arg)->name, + (char *) &((ACPI_NAMED_OP *)arg)->name, INTERNAL_TYPE_DEF_FIELD, IMODE_LOAD_PASS1, NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &node); + NULL, &entry); if (ACPI_FAILURE (status)) { return (status); } /* - * Initialize an object for the new Node that is on + * Initialize an object for the new NTE that is on * the object stack */ - status = acpi_aml_prep_bank_field_value (node, region_node, register_node, - bank_value, field_flags, access_attribute, - field_bit_position, arg->value.size); + status = acpi_aml_prep_bank_field_value (entry, region, + bank_reg, bank_value, + field_flags, + access_attribute, + field_bit_position, + arg->value.size); if (ACPI_FAILURE (status)) { return (status); @@ -290,30 +276,30 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_create_index_field * * PARAMETERS: Op - Op containing the Field definition and args - * Region_node - Object for the containing Operation Region + * Region - NTE for the containing Operation Region * * RETURN: Status * * DESCRIPTION: Create a new index field in the specified operation region * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_create_index_field ( - ACPI_PARSE_OBJECT *op, - ACPI_HANDLE region_node, + ACPI_GENERIC_OP *op, + ACPI_HANDLE region, ACPI_WALK_STATE *walk_state) { ACPI_STATUS status; - ACPI_PARSE_OBJECT *arg; - ACPI_NAMESPACE_NODE *node; - ACPI_NAMESPACE_NODE *index_register_node; - ACPI_NAMESPACE_NODE *data_register_node; + ACPI_GENERIC_OP *arg; + ACPI_NAMED_OBJECT *entry; + ACPI_NAMED_OBJECT *index_reg; + ACPI_NAMED_OBJECT *data_reg; u8 field_flags; u8 access_attribute = 0; u32 field_bit_position = 0; @@ -326,7 +312,7 @@ status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, ACPI_TYPE_ANY, IMODE_LOAD_PASS1, NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &index_register_node); + NULL, &index_reg); if (ACPI_FAILURE (status)) { return (status); @@ -340,7 +326,7 @@ INTERNAL_TYPE_INDEX_FIELD_DEFN, IMODE_LOAD_PASS1, NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &data_register_node); + NULL, &data_reg); if (ACPI_FAILURE (status)) { return (status); @@ -382,24 +368,26 @@ case AML_NAMEDFIELD_OP: status = acpi_ns_lookup (walk_state->scope_info, - (NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)arg)->name, + (char *) &((ACPI_NAMED_OP *)arg)->name, INTERNAL_TYPE_INDEX_FIELD, IMODE_LOAD_PASS1, NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, &node); + NULL, &entry); if (ACPI_FAILURE (status)) { return (status); } /* - * Initialize an object for the new Node that is on + * Initialize an object for the new NTE that is on * the object stack */ - status = acpi_aml_prep_index_field_value (node, index_register_node, data_register_node, - field_flags, access_attribute, - field_bit_position, arg->value.size); + status = acpi_aml_prep_index_field_value (entry, index_reg, + data_reg, field_flags, + access_attribute, + field_bit_position, + arg->value.size); if (ACPI_FAILURE (status)) { return (status); diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dsmethod.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsmethod.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dsmethod.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsmethod.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: dsmethod - Parser/Interpreter interface - control method parsing - * $Revision: 52 $ * *****************************************************************************/ @@ -25,24 +25,24 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "actables.h" -#include "acdebug.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" +#include "tables.h" +#include "debugger.h" #define _COMPONENT DISPATCHER - MODULE_NAME ("dsmethod") + MODULE_NAME ("dsmethod"); /******************************************************************************* * * FUNCTION: Acpi_ds_parse_method * - * PARAMETERS: Obj_handle - Node of the method + * PARAMETERS: Obj_handle - NTE of the method * Level - Current nesting level * Context - Points to a method counter * Return_value - Not used @@ -61,9 +61,9 @@ ACPI_HANDLE obj_handle) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_PARSE_OBJECT *op; - ACPI_NAMESPACE_NODE *node; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_GENERIC_OP *op; + ACPI_NAMED_OBJECT *entry; ACPI_OWNER_ID owner_id; @@ -74,10 +74,10 @@ } - /* Extract the method object from the method Node */ + /* Extract the method object from the method NTE */ - node = (ACPI_NAMESPACE_NODE *) obj_handle; - obj_desc = node->object; + entry = (ACPI_NAMED_OBJECT*) obj_handle; + obj_desc = entry->object; if (!obj_desc) { return (AE_NULL_OBJECT); } @@ -87,7 +87,8 @@ if ((obj_desc->method.concurrency != INFINITE_CONCURRENCY) && (!obj_desc->method.semaphore)) { - status = acpi_os_create_semaphore (1,obj_desc->method.concurrency, + status = acpi_os_create_semaphore (1, + obj_desc->method.concurrency, &obj_desc->method.semaphore); if (ACPI_FAILURE (status)) { return (status); @@ -104,17 +105,17 @@ return (AE_NO_MEMORY); } - /* Init new op with the method name and pointer back to the Node */ + /* Init new op with the method name and pointer back to the NTE */ - acpi_ps_set_name (op, node->name); - op->node = node; + acpi_ps_set_name (op, entry->name); + op->acpi_named_object = entry; /* - * Parse the method, first pass + * Parse the method, creating a parse tree. * - * The first pass load is - * where newly declared named objects are + * The parse also includes a first pass load of the + * namespace where newly declared named objects are * added into the namespace. Actual evaluation of * the named objects (what would be called a "second * pass") happens during the actual execution of the @@ -123,10 +124,7 @@ */ status = acpi_ps_parse_aml (op, obj_desc->method.pcode, - obj_desc->method.pcode_length, - ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE, - node, NULL, NULL, - acpi_ds_load1_begin_op, acpi_ds_load1_end_op); + obj_desc->method.pcode_length, 0); if (ACPI_FAILURE (status)) { return (status); @@ -135,13 +133,11 @@ /* Get a new Owner_id for objects created by this method */ owner_id = acpi_cm_allocate_owner_id (OWNER_TYPE_METHOD); - obj_desc->method.owning_id = owner_id; /* Install the parsed tree in the method object */ - /* TBD: [Restructure] Obsolete field? */ - - acpi_ps_delete_parse_tree (op); + obj_desc->method.parser_op = op; + obj_desc->method.owning_id = owner_id; return (status); } @@ -151,7 +147,7 @@ * * FUNCTION: Acpi_ds_begin_method_execution * - * PARAMETERS: Method_node - Node of the method + * PARAMETERS: Method_entry - NTE of the method * Obj_desc - The method object * * RETURN: Status @@ -166,31 +162,38 @@ ACPI_STATUS acpi_ds_begin_method_execution ( - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT *obj_desc) + ACPI_NAMED_OBJECT *method_entry, + ACPI_OBJECT_INTERNAL *obj_desc) { ACPI_STATUS status = AE_OK; - if (!method_node) { + if (!method_entry) { return (AE_NULL_ENTRY); } - obj_desc = acpi_ns_get_attached_object (method_node); + obj_desc = acpi_ns_get_attached_object (method_entry); if (!obj_desc) { return (AE_NULL_OBJECT); } - /* - * If there is a concurrency limit on this method, we need to - * obtain a unit from the method semaphore. This releases the - * interpreter if we block + * Lock the parser while we check for and possibly parse the + * control method */ - if (obj_desc->method.semaphore) { - status = acpi_aml_system_wait_semaphore (obj_desc->method.semaphore, - WAIT_FOREVER); + acpi_cm_acquire_mutex (ACPI_MTX_PARSER); + + + /* If method is not parsed at this time, we must parse it first */ + + if (!obj_desc->method.parser_op) { + + status = acpi_ds_parse_method (method_entry); + if (ACPI_FAILURE (status)) { + acpi_cm_release_mutex (ACPI_MTX_PARSER); + return (status); + } } @@ -201,10 +204,29 @@ * the last thread completes execution of the method */ - obj_desc->method.thread_count++; + ((ACPI_DEFERRED_OP *) obj_desc->method.parser_op)->thread_count++; + + /* + * Parsing is complete, we can unlock the parser. Parse tree + * cannot be deleted at least until this thread completes. + */ + + acpi_cm_release_mutex (ACPI_MTX_PARSER); + + /* + * If there is a concurrency limit on this method, we need to + * obtain a unit from the method semaphore. This releases the + * interpreter if we block + */ + + if (obj_desc->method.semaphore) { + status = acpi_aml_system_wait_semaphore (obj_desc->method.semaphore, + WAIT_FOREVER); + } return (status); + } @@ -225,76 +247,61 @@ acpi_ds_call_control_method ( ACPI_WALK_LIST *walk_list, ACPI_WALK_STATE *this_walk_state, - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { ACPI_STATUS status; - ACPI_NAMESPACE_NODE *method_node; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_DEFERRED_OP *method; + ACPI_NAMED_OBJECT *method_entry; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_WALK_STATE *next_walk_state; - ACPI_PARSE_STATE *parser_state; u32 i; /* - * Get the namespace entry for the control method we are about to call + * Prev_op points to the METHOD_CALL Op. + * Get the NTE entry (in the METHOD_CALL->NAME Op) and the + * corresponding METHOD Op */ - method_node = this_walk_state->method_call_node; - if (!method_node) { + method_entry = (this_walk_state->prev_op->value.arg)->acpi_named_object; + if (!method_entry) { return (AE_NULL_ENTRY); } - obj_desc = acpi_ns_get_attached_object (method_node); + obj_desc = acpi_ns_get_attached_object (method_entry); if (!obj_desc) { return (AE_NULL_OBJECT); } + /* Parse method if necessary, wait on concurrency semaphore */ - /* Init for new method, wait on concurrency semaphore */ - - status = acpi_ds_begin_method_execution (method_node, obj_desc); + status = acpi_ds_begin_method_execution (method_entry, obj_desc); if (ACPI_FAILURE (status)) { return (status); } + /* Save the (current) Op for when this walk is restarted */ - /* Create and initialize a new parser state */ - - parser_state = acpi_ps_create_state (obj_desc->method.pcode, - obj_desc->method.pcode_length); - if (!parser_state) { - return (AE_NO_MEMORY); - } - - acpi_ps_init_scope (parser_state, NULL); - parser_state->start_node = method_node; - + this_walk_state->method_call_op = this_walk_state->prev_op; + this_walk_state->prev_op = op; + method = obj_desc->method.parser_op; /* Create a new state for the preempting walk */ next_walk_state = acpi_ds_create_walk_state (obj_desc->method.owning_id, - NULL, obj_desc, walk_list); + (ACPI_GENERIC_OP *) method, + obj_desc, walk_list); if (!next_walk_state) { - /* TBD: delete parser state */ - return (AE_NO_MEMORY); } - next_walk_state->walk_type = WALK_METHOD; - next_walk_state->method_node = method_node; - next_walk_state->parser_state = parser_state; - next_walk_state->parse_flags = this_walk_state->parse_flags; - next_walk_state->descending_callback = this_walk_state->descending_callback; - next_walk_state->ascending_callback = this_walk_state->ascending_callback; - /* The Next_op of the Next_walk will be the beginning of the method */ - /* TBD: [Restructure] -- obsolete? */ - next_walk_state->next_op = NULL; + next_walk_state->next_op = (ACPI_GENERIC_OP *) method; /* Open a new scope */ - status = acpi_ds_scope_stack_push (method_node, + status = acpi_ds_scope_stack_push (method_entry->child_table, ACPI_TYPE_METHOD, next_walk_state); if (ACPI_FAILURE (status)) { goto cleanup; @@ -309,28 +316,11 @@ */ status = acpi_ds_method_data_init_args (&this_walk_state->operands[0], - this_walk_state->num_operands, - next_walk_state); + this_walk_state->num_operands); if (ACPI_FAILURE (status)) { goto cleanup; } - - /* Create and init a Root Node */ - - op = acpi_ps_alloc_op (AML_SCOPE_OP); - if (!op) { - return (AE_NO_MEMORY); - } - - status = acpi_ps_parse_aml (op, obj_desc->method.pcode, - obj_desc->method.pcode_length, - ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE, - method_node, NULL, NULL, - acpi_ds_load1_begin_op, acpi_ds_load1_end_op); - acpi_ps_delete_parse_tree (op); - - /* * Delete the operands on the previous walkstate operand stack * (they were copied to new objects) @@ -338,7 +328,6 @@ for (i = 0; i < obj_desc->method.param_count; i++) { acpi_cm_remove_reference (this_walk_state->operands [i]); - this_walk_state->operands [i] = NULL; } /* Clear the operand stack */ @@ -375,33 +364,30 @@ ACPI_STATUS acpi_ds_restart_control_method ( ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT *return_desc) + ACPI_OBJECT_INTERNAL *return_desc) { ACPI_STATUS status; if (return_desc) { - if (walk_state->return_used) { - /* - * Get the return value (if any) from the previous method. - * NULL if no return value - */ - - status = acpi_ds_result_stack_push (return_desc, walk_state); - if (ACPI_FAILURE (status)) { - acpi_cm_remove_reference (return_desc); - return (status); - } - } + /* + * Get the return value (if any) from the previous method. + * NULL if no return value + */ - else { - /* - * Delete the return value if it will not be used by the - * calling method - */ + status = acpi_ds_result_stack_push (return_desc, walk_state); + if (ACPI_FAILURE (status)) { acpi_cm_remove_reference (return_desc); + return (status); } + /* + * Delete the return value if it will not be used by the + * calling method + */ + + acpi_ds_delete_result_if_not_used (walk_state->method_call_op, + return_desc, walk_state); } @@ -428,8 +414,9 @@ ACPI_WALK_STATE *walk_state) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_NAMESPACE_NODE *method_node; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_DEFERRED_OP *op; + ACPI_NAMED_OBJECT *method_entry; /* The method object should be stored in the walk state */ @@ -451,41 +438,66 @@ acpi_cm_acquire_mutex (ACPI_MTX_PARSER); + /* + * The root of the method parse tree should be stored + * in the method object + */ + + op = obj_desc->method.parser_op; + if (!op) { + goto unlock_and_exit; + } /* Signal completion of the execution of this method if necessary */ if (walk_state->method_desc->method.semaphore) { status = acpi_os_signal_semaphore ( - walk_state->method_desc->method.semaphore, 1); + walk_state->method_desc->method.semaphore, 1); } /* Decrement the thread count on the method parse tree */ - walk_state->method_desc->method.thread_count--; - if (!walk_state->method_desc->method.thread_count) { + op->thread_count--; + if (!op->thread_count) { /* * There are no more threads executing this method. Perform * additional cleanup. * - * The method Node is stored in the walk state + * The method NTE is stored in the method Op */ - method_node = walk_state->method_node; + method_entry = op->acpi_named_object; + /* * Delete any namespace entries created immediately underneath * the method */ acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - if (method_node->child) { - acpi_ns_delete_namespace_subtree (method_node); + if (method_entry->child_table) { + acpi_ns_delete_namespace_subtree (method_entry); } /* * Delete any namespace entries created anywhere else within * the namespace */ - acpi_ns_delete_namespace_by_owner (walk_state->method_desc->method.owning_id); + + acpi_ns_delete_namespace_by_owner ( + walk_state->method_desc->method.owning_id); + acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); + + /* + * Delete the method's parse tree if asked to + */ + if (acpi_gbl_when_to_parse_methods & METHOD_DELETE_AT_COMPLETION) { + acpi_ps_delete_parse_tree ( + walk_state->method_desc->method.parser_op); + + walk_state->method_desc->method.parser_op = NULL; + } } + +unlock_and_exit: acpi_cm_release_mutex (ACPI_MTX_PARSER); return (AE_OK); diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dsmthdat.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsmthdat.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dsmthdat.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsmthdat.c Wed Jul 5 11:23:12 2000 @@ -1,9 +1,9 @@ -/******************************************************************************* + +/****************************************************************************** * * Module Name: dsmthdat - control method arguments and local variables - * $Revision: 34 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -25,18 +25,18 @@ #include "acpi.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" +#include "parser.h" +#include "dispatch.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" +#include "namesp.h" #define _COMPONENT DISPATCHER - MODULE_NAME ("dsmthdat") + MODULE_NAME ("dsmthdat"); -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_init * @@ -49,7 +49,7 @@ * This allows Ref_of and De_ref_of to work properly for these * special data types. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_method_data_init ( @@ -62,8 +62,8 @@ * Walk_state fields are initialized to zero by the * Acpi_cm_callocate(). * - * An Node is assigned to each argument and local so - * that Ref_of() can return a pointer to the Node. + * An NTE is assigned to each argument and local so + * that Ref_of() can return a pointer to the NTE. */ /* Init the method arguments */ @@ -72,9 +72,10 @@ MOVE_UNALIGNED32_TO_32 (&walk_state->arguments[i].name, NAMEOF_ARG_NTE); - walk_state->arguments[i].name |= (i << 24); - walk_state->arguments[i].data_type = ACPI_DESC_TYPE_NAMED; - walk_state->arguments[i].type = INTERNAL_TYPE_METHOD_ARGUMENT; + walk_state->arguments[i].name |= (i << 24); + walk_state->arguments[i].data_type = ACPI_DESC_TYPE_NAMED; + walk_state->arguments[i].type = + INTERNAL_TYPE_METHOD_ARGUMENT; } /* Init the method locals */ @@ -83,16 +84,18 @@ MOVE_UNALIGNED32_TO_32 (&walk_state->local_variables[i].name, NAMEOF_LOCAL_NTE); - walk_state->local_variables[i].name |= (i << 24); + walk_state->local_variables[i].name |= (i << 24); walk_state->local_variables[i].data_type = ACPI_DESC_TYPE_NAMED; - walk_state->local_variables[i].type = INTERNAL_TYPE_METHOD_LOCAL_VAR; + walk_state->local_variables[i].type = + INTERNAL_TYPE_METHOD_LOCAL_VAR; } + return (AE_OK); } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_delete_all * @@ -103,14 +106,14 @@ * DESCRIPTION: Delete method locals and arguments. Arguments are only * deleted if this method was called from another method. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_method_data_delete_all ( ACPI_WALK_STATE *walk_state) { u32 index; - ACPI_OPERAND_OBJECT *object; + ACPI_OBJECT_INTERNAL *object; /* Delete the locals */ @@ -119,11 +122,8 @@ object = walk_state->local_variables[index].object; if (object) { /* Remove first */ - walk_state->local_variables[index].object = NULL; - /* Was given a ref when stored */ - acpi_cm_remove_reference (object); } } @@ -135,11 +135,8 @@ object = walk_state->arguments[index].object; if (object) { /* Remove first */ - walk_state->arguments[index].object = NULL; - /* Was given a ref when stored */ - acpi_cm_remove_reference (object); } } @@ -148,7 +145,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_init_args * @@ -158,13 +155,12 @@ * * DESCRIPTION: Initialize arguments for a method * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_method_data_init_args ( - ACPI_OPERAND_OBJECT **params, - u32 max_param_count, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL **params, + u32 max_param_count) { ACPI_STATUS status; u32 mindex; @@ -187,8 +183,9 @@ * Set the current method argument to the * Params[Pindex++] argument object descriptor */ - status = acpi_ds_method_data_set_value (MTH_TYPE_ARG, mindex, - params[pindex], walk_state); + status = acpi_ds_method_data_set_value (MTH_TYPE_ARG, + mindex, + params[pindex]); if (ACPI_FAILURE (status)) { break; } @@ -205,7 +202,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_get_entry * @@ -218,16 +215,18 @@ * * DESCRIPTION: Get the address of the stack entry given by Type:Index * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_method_data_get_entry ( u32 type, u32 index, - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT ***entry) + ACPI_OBJECT_INTERNAL ***entry) { + ACPI_WALK_STATE *walk_state; + + walk_state = acpi_ds_get_current_walk_state (acpi_gbl_current_walk_list); /* * Get the requested object. @@ -244,7 +243,7 @@ } *entry = - (ACPI_OPERAND_OBJECT **) &walk_state->local_variables[index].object; + (ACPI_OBJECT_INTERNAL **) &walk_state->local_variables[index].object; break; @@ -255,7 +254,7 @@ } *entry = - (ACPI_OPERAND_OBJECT **) &walk_state->arguments[index].object; + (ACPI_OBJECT_INTERNAL **) &walk_state->arguments[index].object; break; @@ -268,7 +267,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_set_entry * @@ -280,22 +279,21 @@ * * DESCRIPTION: Insert an object onto the method stack at entry Type:Index. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_method_data_set_entry ( u32 type, u32 index, - ACPI_OPERAND_OBJECT *object, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL *object) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT **entry; + ACPI_OBJECT_INTERNAL **entry; /* Get a pointer to the stack entry to set */ - status = acpi_ds_method_data_get_entry (type, index, walk_state, &entry); + status = acpi_ds_method_data_get_entry (type, index, &entry); if (ACPI_FAILURE (status)) { return (status); } @@ -312,7 +310,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_get_type * @@ -323,22 +321,21 @@ * RETURN: Data type of selected Arg or Local * Used only in Exec_monadic2()/Type_op. * - ******************************************************************************/ + ****************************************************************************/ OBJECT_TYPE_INTERNAL acpi_ds_method_data_get_type ( u32 type, - u32 index, - ACPI_WALK_STATE *walk_state) + u32 index) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT **entry; - ACPI_OPERAND_OBJECT *object; + ACPI_OBJECT_INTERNAL **entry; + ACPI_OBJECT_INTERNAL *object; /* Get a pointer to the requested stack entry */ - status = acpi_ds_method_data_get_entry (type, index, walk_state, &entry); + status = acpi_ds_method_data_get_entry (type, index, &entry); if (ACPI_FAILURE (status)) { return ((ACPI_TYPE_NOT_FOUND)); } @@ -358,7 +355,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_get_nte * @@ -366,17 +363,20 @@ * Index - Which local_var or argument whose type * to get * - * RETURN: Get the Node associated with a local or arg. + * RETURN: Get the NTE associated with a local or arg. * - ******************************************************************************/ + ****************************************************************************/ -ACPI_NAMESPACE_NODE * +ACPI_NAMED_OBJECT* acpi_ds_method_data_get_nte ( u32 type, - u32 index, - ACPI_WALK_STATE *walk_state) + u32 index) { - ACPI_NAMESPACE_NODE *node = NULL; + ACPI_NAMED_OBJECT *entry = NULL; + ACPI_WALK_STATE *walk_state; + + + walk_state = acpi_ds_get_current_walk_state (acpi_gbl_current_walk_list); switch (type) @@ -385,20 +385,20 @@ case MTH_TYPE_LOCAL: if (index > MTH_MAX_LOCAL) { - return (node); + return (entry); } - node = &walk_state->local_variables[index]; + entry = &walk_state->local_variables[index]; break; case MTH_TYPE_ARG: if (index > MTH_MAX_ARG) { - return (node); + return (entry); } - node = &walk_state->arguments[index]; + entry = &walk_state->arguments[index]; break; @@ -407,11 +407,11 @@ } - return (node); + return (entry); } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_get_value * @@ -426,18 +426,17 @@ * at the current top of the method stack. * Used only in Acpi_aml_resolve_to_value(). * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_method_data_get_value ( u32 type, u32 index, - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **dest_desc) + ACPI_OBJECT_INTERNAL **dest_desc) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT **entry; - ACPI_OPERAND_OBJECT *object; + ACPI_OBJECT_INTERNAL **entry; + ACPI_OBJECT_INTERNAL *object; /* Validate the object descriptor */ @@ -449,7 +448,7 @@ /* Get a pointer to the requested method stack entry */ - status = acpi_ds_method_data_get_entry (type, index, walk_state, &entry); + status = acpi_ds_method_data_get_entry (type, index, &entry); if (ACPI_FAILURE (status)) { return (status); } @@ -495,7 +494,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_delete_value * @@ -507,22 +506,21 @@ * DESCRIPTION: Delete the entry at Type:Index on the method stack. Inserts * a null into the stack slot after the object is deleted. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_method_data_delete_value ( u32 type, - u32 index, - ACPI_WALK_STATE *walk_state) + u32 index) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT **entry; - ACPI_OPERAND_OBJECT *object; + ACPI_OBJECT_INTERNAL **entry; + ACPI_OBJECT_INTERNAL *object; /* Get a pointer to the requested entry */ - status = acpi_ds_method_data_get_entry (type, index, walk_state, &entry); + status = acpi_ds_method_data_get_entry (type, index, &entry); if (ACPI_FAILURE (status)) { return (status); } @@ -534,7 +532,7 @@ /* * Undefine the Arg or Local by setting its descriptor * pointer to NULL. Locals/Args can contain both - * ACPI_OPERAND_OBJECTS and ACPI_NAMESPACE_NODEs + * ACPI_OBJECT_INTERNALS and ACPI_NAMED_OBJECTs */ *entry = NULL; @@ -556,7 +554,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_method_data_set_value * @@ -575,17 +573,16 @@ * as the new value for the Arg or Local and the reference count * is incremented. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_method_data_set_value ( u32 type, u32 index, - ACPI_OPERAND_OBJECT *src_desc, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL *src_desc) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT **entry; + ACPI_OBJECT_INTERNAL **entry; /* Parameter validation */ @@ -597,7 +594,7 @@ /* Get a pointer to the requested method stack entry */ - status = acpi_ds_method_data_get_entry (type, index, walk_state, &entry); + status = acpi_ds_method_data_get_entry (type, index, &entry); if (ACPI_FAILURE (status)) { goto cleanup; } @@ -617,7 +614,7 @@ if (*entry) { /* * Check for an indirect store if an argument - * contains an object reference (stored as an Node). + * contains an object reference (stored as an NTE). * We don't allow this automatic dereferencing for * locals, since a store to a local should overwrite * anything there, including an object reference. @@ -635,16 +632,16 @@ if ((type == MTH_TYPE_ARG) && (VALID_DESCRIPTOR_TYPE (*entry, ACPI_DESC_TYPE_NAMED))) { - /* Detach an existing object from the Node */ + /* Detach an existing object from the NTE */ - acpi_ns_detach_object ((ACPI_NAMESPACE_NODE *) *entry); + acpi_ns_detach_object (*entry); /* - * Store this object into the Node + * Store this object into the NTE * (do the indirect store) */ - status = acpi_ns_attach_object ((ACPI_NAMESPACE_NODE *) *entry, src_desc, + status = acpi_ns_attach_object (*entry, src_desc, src_desc->common.type); return (status); } @@ -655,7 +652,7 @@ * before storing the new one */ - acpi_ds_method_data_delete_value (type, index, walk_state); + acpi_ds_method_data_delete_value (type, index); } @@ -666,7 +663,7 @@ * (increments the object reference count by one) */ - status = acpi_ds_method_data_set_entry (type, index, src_desc, walk_state); + status = acpi_ds_method_data_set_entry (type, index, src_desc); if (ACPI_FAILURE (status)) { goto cleanup; } diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dsobject.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsobject.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dsobject.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsobject.c Thu Aug 24 18:16:02 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: dsobject - Dispatcher object management routines - * $Revision: 43 $ * *****************************************************************************/ @@ -25,21 +25,21 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" #define _COMPONENT DISPATCHER - MODULE_NAME ("dsobject") + MODULE_NAME ("dsobject"); /******************************************************************************* * * FUNCTION: Acpi_ds_init_one_object * - * PARAMETERS: Obj_handle - Node + * PARAMETERS: Obj_handle - NTE of the object * Level - Current nesting level * Context - Points to a init info struct * Return_value - Not used @@ -64,6 +64,7 @@ { OBJECT_TYPE_INTERNAL type; ACPI_STATUS status; + ACPI_OBJECT_INTERNAL *obj_desc; INIT_WALK_INFO *info = (INIT_WALK_INFO *) context; @@ -72,10 +73,10 @@ * was just loaded */ - if (((ACPI_NAMESPACE_NODE *) obj_handle)->owner_id != + if (((ACPI_NAMED_OBJECT*) obj_handle)->owner_id != info->table_desc->table_id) { - return (AE_OK); + return AE_OK; } @@ -118,7 +119,12 @@ */ if (acpi_gbl_when_to_parse_methods != METHOD_PARSE_AT_INIT) { + acpi_ns_delete_namespace_subtree (obj_handle); + + obj_desc = ((ACPI_NAMED_OBJECT*)obj_handle)->object; + acpi_ps_delete_parse_tree (obj_desc->method.parser_op); + obj_desc->method.parser_op = NULL; } break; @@ -143,15 +149,15 @@ * * RETURN: Status * - * DESCRIPTION: Walk the entire namespace and perform any necessary - * initialization on the objects found therein + * DESCRIPTION: Walk the entire namespace and perform any necessary initialization + * on the objects found therein * ******************************************************************************/ ACPI_STATUS acpi_ds_initialize_objects ( ACPI_TABLE_DESC *table_desc, - ACPI_NAMESPACE_NODE *start_node) + ACPI_NAMED_OBJECT *start_entry) { ACPI_STATUS status; INIT_WALK_INFO info; @@ -164,8 +170,8 @@ /* Walk entire namespace from the supplied root */ - status = acpi_walk_namespace (ACPI_TYPE_ANY, start_node, - ACPI_UINT32_MAX, acpi_ds_init_one_object, + status = acpi_walk_namespace (ACPI_TYPE_ANY, start_entry, + ACPI_INT32_MAX, acpi_ds_init_one_object, &info, NULL); return (AE_OK); @@ -191,22 +197,22 @@ ACPI_STATUS acpi_ds_init_object_from_op ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, + ACPI_GENERIC_OP *op, u16 opcode, - ACPI_OPERAND_OBJECT **obj_desc) + ACPI_OBJECT_INTERNAL **obj_desc) { ACPI_STATUS status; - ACPI_PARSE_OBJECT *arg; - ACPI_PARSE2_OBJECT *byte_list; - ACPI_OPERAND_OBJECT *arg_desc; - ACPI_OPCODE_INFO *op_info; + ACPI_GENERIC_OP *arg; + ACPI_BYTELIST_OP *byte_list; + ACPI_OBJECT_INTERNAL *arg_desc; + ACPI_OP_INFO *op_info; op_info = acpi_ps_get_opcode_info (opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (!op_info) { /* Unknown opcode */ - return (AE_TYPE); + return AE_TYPE; } @@ -224,17 +230,17 @@ /* Resolve the object (could be an arg or local) */ - status = acpi_aml_resolve_to_value (&arg_desc, walk_state); + status = acpi_aml_resolve_to_value (&arg_desc); if (ACPI_FAILURE (status)) { acpi_cm_remove_reference (arg_desc); - return (status); + return status; } /* We are expecting a number */ if (arg_desc->common.type != ACPI_TYPE_NUMBER) { acpi_cm_remove_reference (arg_desc); - return (AE_TYPE); + return AE_TYPE; } /* Get the value, delete the internal object */ @@ -248,7 +254,7 @@ acpi_cm_callocate ((*obj_desc)->buffer.length); if (!(*obj_desc)->buffer.pointer) { - return (AE_NO_MEMORY); + return AE_NO_MEMORY; } /* @@ -259,10 +265,10 @@ /* skip first arg */ arg = op->value.arg; - byte_list = (ACPI_PARSE2_OBJECT *) arg->next; + byte_list = (ACPI_BYTELIST_OP *) arg->next; if (byte_list) { if (byte_list->opcode != AML_BYTELIST_OP) { - return (AE_TYPE); + return AE_TYPE; } MEMCPY ((*obj_desc)->buffer.pointer, byte_list->data, @@ -273,18 +279,7 @@ case ACPI_TYPE_PACKAGE: - - /* - * When called, an internal package object has already - * been built and is pointed to by *Obj_desc. - * Acpi_ds_build_internal_object build another internal - * package object, so remove reference to the original - * so that it is deleted. Error checking is done - * within the remove reference function. - */ - acpi_cm_remove_reference(*obj_desc); - - status = acpi_ds_build_internal_object (walk_state, op, obj_desc); + status = acpi_ds_build_internal_object(walk_state, op, obj_desc); break; case ACPI_TYPE_NUMBER: @@ -304,7 +299,7 @@ case INTERNAL_TYPE_REFERENCE: - switch (ACPI_GET_OP_CLASS (op_info)) + switch (op_info->flags & OP_INFO_TYPE) { case OPTYPE_LOCAL_VARIABLE: @@ -325,9 +320,9 @@ default: /* Constants, Literals, etc.. */ if (op->opcode == AML_NAMEPATH_OP) { - /* Node was saved in Op */ + /* Nte was saved in Op */ - (*obj_desc)->reference.node = op->node; + (*obj_desc)->reference.nte = op->acpi_named_object; } (*obj_desc)->reference.op_code = opcode; @@ -342,7 +337,7 @@ break; } - return (AE_OK); + return AE_OK; } @@ -363,10 +358,10 @@ ACPI_STATUS acpi_ds_build_internal_simple_obj ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - ACPI_OPERAND_OBJECT **obj_desc_ptr) + ACPI_GENERIC_OP *op, + ACPI_OBJECT_INTERNAL **obj_desc_ptr) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; OBJECT_TYPE_INTERNAL type; ACPI_STATUS status; @@ -378,13 +373,13 @@ * Otherwise, go ahead and look it up now */ - if (!op->node) { + if (!op->acpi_named_object) { status = acpi_ns_lookup (walk_state->scope_info, op->value.string, ACPI_TYPE_ANY, IMODE_EXECUTE, NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE, NULL, - (ACPI_NAMESPACE_NODE **)&(op->node)); + (ACPI_NAMED_OBJECT**)&(op->acpi_named_object)); if (ACPI_FAILURE (status)) { return (status); @@ -442,11 +437,11 @@ ACPI_STATUS acpi_ds_build_internal_package_obj ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - ACPI_OPERAND_OBJECT **obj_desc_ptr) + ACPI_GENERIC_OP *op, + ACPI_OBJECT_INTERNAL **obj_desc_ptr) { - ACPI_PARSE_OBJECT *arg; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_GENERIC_OP *arg; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status = AE_OK; @@ -523,8 +518,8 @@ ACPI_STATUS acpi_ds_build_internal_object ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - ACPI_OPERAND_OBJECT **obj_desc_ptr) + ACPI_GENERIC_OP *op, + ACPI_OBJECT_INTERNAL **obj_desc_ptr) { ACPI_STATUS status; @@ -545,7 +540,7 @@ /***************************************************************************** * - * FUNCTION: Acpi_ds_create_node + * FUNCTION: Acpi_ds_create_named_object * * PARAMETERS: Op - Parser object to be translated * Obj_desc_ptr - Where the ACPI internal object is returned @@ -557,13 +552,13 @@ ****************************************************************************/ ACPI_STATUS -acpi_ds_create_node ( +acpi_ds_create_named_object ( ACPI_WALK_STATE *walk_state, - ACPI_NAMESPACE_NODE *node, - ACPI_PARSE_OBJECT *op) + ACPI_NAMED_OBJECT *entry, + ACPI_GENERIC_OP *op) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; if (!op->value.arg) { @@ -584,12 +579,12 @@ /* Re-type the object according to it's argument */ - node->type = obj_desc->common.type; + entry->type = obj_desc->common.type; /* Init obj */ - status = acpi_ns_attach_object ((ACPI_HANDLE) node, obj_desc, - (u8) node->type); + status = acpi_ns_attach_object ((ACPI_HANDLE) entry, obj_desc, + (u8) entry->type); if (ACPI_FAILURE (status)) { goto cleanup; } diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dsopcode.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsopcode.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dsopcode.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsopcode.c Wed Jul 5 11:23:12 2000 @@ -1,8 +1,8 @@ + /****************************************************************************** * - * Module Name: dsopcode - Dispatcher Op Region support and handling of - * "control" opcodes - * $Revision: 17 $ + * Module Name: dsopcode - Dispatcher Op Region support + * and handling of "control" opcodes * *****************************************************************************/ @@ -26,16 +26,16 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acevents.h" -#include "actables.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" +#include "events.h" +#include "tables.h" #define _COMPONENT DISPATCHER - MODULE_NAME ("dsopcode") + MODULE_NAME ("dsopcode"); /***************************************************************************** @@ -53,23 +53,23 @@ ACPI_STATUS acpi_ds_get_region_arguments ( - ACPI_OPERAND_OBJECT *rgn_desc) + ACPI_OBJECT_INTERNAL *rgn_desc) { - ACPI_OPERAND_OBJECT *method_desc; - ACPI_NAMESPACE_NODE *node; - ACPI_PARSE_OBJECT *op; - ACPI_PARSE_OBJECT *region_op; + ACPI_OBJECT_INTERNAL *method_desc; + ACPI_NAMED_OBJECT *entry; + ACPI_GENERIC_OP *op; + ACPI_GENERIC_OP *region_op; ACPI_STATUS status; ACPI_TABLE_DESC *table_desc; - if (rgn_desc->region.flags & AOPOBJ_DATA_VALID) { + if (rgn_desc->region.region_flags & REGION_AGRUMENT_DATA_VALID) { return (AE_OK); } method_desc = rgn_desc->region.method; - node = rgn_desc->region.node; + entry = rgn_desc->region.nte; /* @@ -77,18 +77,18 @@ * Op_region tree */ - op = acpi_ps_alloc_op (AML_SCOPE_OP); + op = acpi_ps_alloc_op (AML_REGION_OP); if (!op) { - return (AE_NO_MEMORY); + return AE_NO_MEMORY; } - /* Save the Node for use in Acpi_ps_parse_aml */ + /* Save the NTE for use in Acpi_ps_parse_aml */ - op->node = acpi_ns_get_parent_object (node); + op->acpi_named_object = acpi_ns_get_parent_entry (entry); /* Get a handle to the parent ACPI table */ - status = acpi_tb_handle_to_object (node->owner_id, &table_desc); + status = acpi_tb_handle_to_object (entry->owner_id, &table_desc); if (ACPI_FAILURE (status)) { return (status); } @@ -96,44 +96,20 @@ /* Parse the entire Op_region declaration, creating a parse tree */ status = acpi_ps_parse_aml (op, method_desc->method.pcode, - method_desc->method.pcode_length, 0, - NULL, NULL, NULL, acpi_ds_load1_begin_op, acpi_ds_load1_end_op); - - if (ACPI_FAILURE (status)) { - acpi_ps_delete_parse_tree (op); - return (status); + method_desc->method.pcode_length, 0); + if (ACPI_SUCCESS (status)) { + /* Get and init the actual Region_op created above */ + + region_op = op->value.arg; + region_op->acpi_named_object = entry; + + /* Acpi_evaluate the address and length arguments for the Op_region */ + + acpi_ps_walk_parsed_aml (region_op, region_op, NULL, NULL, NULL, + NULL, table_desc->table_id, + acpi_ds_exec_begin_op, acpi_ds_exec_end_op); } - - /* Get and init the actual Region_op created above */ - -/* Region_op = Op->Value.Arg; - Op->Node = Node;*/ - - - region_op = op->value.arg; - region_op->node = node; - acpi_ps_delete_parse_tree (op); - - /* Acpi_evaluate the address and length arguments for the Op_region */ - - op = acpi_ps_alloc_op (AML_SCOPE_OP); - if (!op) { - return (AE_NO_MEMORY); - } - - op->node = acpi_ns_get_parent_object (node); - - status = acpi_ps_parse_aml (op, method_desc->method.pcode, - method_desc->method.pcode_length, - ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE, - NULL /*Method_desc*/, NULL, NULL, - acpi_ds_exec_begin_op, acpi_ds_exec_end_op); -/* - Acpi_ps_walk_parsed_aml (Region_op, Region_op, NULL, NULL, NULL, - NULL, Table_desc->Table_id, - Acpi_ds_exec_begin_op, Acpi_ds_exec_end_op); -*/ /* All done with the parse tree, delete it */ acpi_ps_delete_parse_tree (op); @@ -158,7 +134,7 @@ acpi_ds_initialize_region ( ACPI_HANDLE obj_handle) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status; @@ -168,7 +144,7 @@ status = acpi_ev_initialize_region (obj_desc, FALSE); - return (status); + return status; } @@ -188,20 +164,20 @@ ACPI_STATUS acpi_ds_eval_region_operands ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *region_desc; - ACPI_NAMESPACE_NODE *node; - ACPI_PARSE_OBJECT *next_op; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *region_desc; + ACPI_NAMED_OBJECT *entry; + ACPI_GENERIC_OP *next_op; /* * This is where we evaluate the address and length fields of the Op_region declaration */ - node = op->node; + entry = op->acpi_named_object; /* Next_op points to the op that holds the Space_iD */ next_op = op->value.arg; @@ -216,7 +192,7 @@ return (status); } - region_desc = acpi_ns_get_attached_object (node); + region_desc = acpi_ns_get_attached_object (entry); if (!region_desc) { return (AE_NOT_EXIST); } @@ -240,7 +216,7 @@ /* Now the address and length are valid for this opregion */ - region_desc->region.flags |= AOPOBJ_DATA_VALID; + region_desc->region.region_flags |= REGION_AGRUMENT_DATA_VALID; return (status); } @@ -263,7 +239,7 @@ ACPI_STATUS acpi_ds_exec_begin_control_op ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { ACPI_STATUS status = AE_OK; ACPI_GENERIC_STATE *control_state; @@ -287,14 +263,6 @@ } acpi_cm_push_generic_state (&walk_state->control_state, control_state); - - /* - * Save a pointer to the predicate for multiple executions - * of a loop - */ - walk_state->control_state->control.aml_predicate_start = - walk_state->parser_state->aml - 1; - /*Acpi_ps_pkg_length_encoding_size (GET8 (Walk_state->Parser_state->Aml));*/ break; @@ -319,7 +287,7 @@ break; } - return (status); + return status; } @@ -341,7 +309,7 @@ ACPI_STATUS acpi_ds_exec_end_control_op ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { ACPI_STATUS status = AE_OK; ACPI_GENERIC_STATE *control_state; @@ -382,18 +350,16 @@ if (walk_state->control_state->common.value) { /* Predicate was true, go back and evaluate it again! */ - status = AE_CTRL_PENDING; + status = AE_CTRL_TRUE; } -/* else {*/ + else { /* Pop this control state and free it */ control_state = acpi_cm_pop_generic_state (&walk_state->control_state); - - walk_state->aml_last_while = control_state->control.aml_predicate_start; acpi_cm_delete_generic_state (control_state); -/* }*/ + } break; @@ -401,62 +367,44 @@ case AML_RETURN_OP: - /* - * One optional operand -- the return value - * It can be either an immediate operand or a result that - * has been bubbled up the tree - */ - if (op->value.arg) { - /* Return statement has an immediate operand */ + /* One optional operand -- the return value */ + if (op->value.arg) { status = acpi_ds_create_operands (walk_state, op->value.arg); if (ACPI_FAILURE (status)) { - return (status); + return status; } /* + * TBD: [Restructure] Just check for NULL arg + * to signify no return value??? + */ + + /* * If value being returned is a Reference (such as * an arg or local), resolve it now because it may * cease to exist at the end of the method. */ - status = acpi_aml_resolve_to_value (&walk_state->operands [0], walk_state); + status = acpi_aml_resolve_to_value (&walk_state->operands [0]); if (ACPI_FAILURE (status)) { - return (status); + return status; } /* * Get the return value and save as the last result - * value. This is the only place where Walk_state->Return_desc + * value + * This is the only place where Walk_state->Return_desc * is set to anything other than zero! */ walk_state->return_desc = walk_state->operands[0]; } - else if (walk_state->num_results > 0) { - /* - * The return value has come from a previous calculation. - * - * If value being returned is a Reference (such as - * an arg or local), resolve it now because it may - * cease to exist at the end of the method. - */ - - status = acpi_aml_resolve_to_value (&walk_state->results [0], walk_state); - if (ACPI_FAILURE (status)) { - return (status); - } - - walk_state->return_desc = walk_state->results [0]; - } - else { /* No return operand */ - if (walk_state->num_operands) { - acpi_cm_remove_reference (walk_state->operands [0]); - } + acpi_cm_remove_reference (walk_state->operands [0]); walk_state->operands [0] = NULL; walk_state->num_operands = 0; @@ -469,7 +417,7 @@ break; - case AML_NOOP_OP: + case AML_NOOP_CODE: /* Just do nothing! */ break; @@ -511,6 +459,6 @@ } - return (status); + return status; } diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dsutils.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsutils.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dsutils.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dsutils.c Thu Aug 24 18:16:02 2000 @@ -1,9 +1,9 @@ -/******************************************************************************* + +/****************************************************************************** * * Module Name: dsutils - Dispatcher utilities - * $Revision: 44 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -25,20 +25,20 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acdebug.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" +#include "debugger.h" #define _COMPONENT PARSER - MODULE_NAME ("dsutils") + MODULE_NAME ("dsutils"); -/******************************************************************************* +/***************************************************************************** * - * FUNCTION: Acpi_ds_is_result_used + * FUNCTION: Acpi_ds_delete_result_if_not_used * * PARAMETERS: Op * Result_obj @@ -46,32 +46,52 @@ * * RETURN: Status * - * DESCRIPTION: Check if a result object will be used by the parent + * DESCRIPTION: Used after interpretation of an opcode. If there is an internal + * result descriptor, check if the parent opcode will actually use + * this result. If not, delete the result now so that it will + * not become orphaned. * - ******************************************************************************/ + ****************************************************************************/ -u8 -acpi_ds_is_result_used ( - ACPI_PARSE_OBJECT *op) +void +acpi_ds_delete_result_if_not_used ( + ACPI_GENERIC_OP *op, + ACPI_OBJECT_INTERNAL *result_obj, + ACPI_WALK_STATE *walk_state) { - ACPI_OPCODE_INFO *parent_info; - + ACPI_OP_INFO *parent_info; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_STATUS status; - /* Must have both an Op and a Result Object */ if (!op) { - return (TRUE); + return; } + if (!result_obj) { + return; + } - /* - * If there is no parent, the result can't possibly be used! - * (An executing method typically has no parent, since each - * method is parsed separately) However, a method that is - * invoked from another method has a parent. - */ if (!op->parent) { - return (FALSE); + /* + * If there is no parent, the result can't possibly be used! + * (An executing method typically has no parent, since each + * method is parsed separately + */ + + /* + * Must pop the result stack (Obj_desc should be equal + * to Result_obj) + */ + + status = acpi_ds_result_stack_pop (&obj_desc, walk_state); + if (ACPI_FAILURE (status)) { + return; + } + + acpi_cm_remove_reference (result_obj); + + return; } @@ -80,15 +100,15 @@ */ parent_info = acpi_ps_get_opcode_info (op->parent->opcode); - if (ACPI_GET_OP_TYPE (parent_info) != ACPI_OP_TYPE_OPCODE) { - return (FALSE); + if (!parent_info) { + return; } /* Never delete the return value associated with a return opcode */ if (op->parent->opcode == AML_RETURN_OP) { - return (TRUE); + return; } @@ -99,15 +119,26 @@ * as an operand later. */ - switch (ACPI_GET_OP_CLASS (parent_info)) + switch (parent_info->flags & OP_INFO_TYPE) { /* - * In these cases, the parent will never use the return object + * In these cases, the parent will never use the return object, + * so delete it here and now. */ case OPTYPE_CONTROL: /* IF, ELSE, WHILE only */ case OPTYPE_NAMED_OBJECT: /* Scope, method, etc. */ - return (FALSE); + /* + * Must pop the result stack (Obj_desc should be equal + * to Result_obj) + */ + + status = acpi_ds_result_stack_pop (&obj_desc, walk_state); + if (ACPI_FAILURE (status)) { + return; + } + + acpi_cm_remove_reference (result_obj); break; /* @@ -118,63 +149,11 @@ break; } - return (TRUE); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ds_delete_result_if_not_used - * - * PARAMETERS: Op - * Result_obj - * Walk_state - * - * RETURN: Status - * - * DESCRIPTION: Used after interpretation of an opcode. If there is an internal - * result descriptor, check if the parent opcode will actually use - * this result. If not, delete the result now so that it will - * not become orphaned. - * - ******************************************************************************/ - -void -acpi_ds_delete_result_if_not_used ( - ACPI_PARSE_OBJECT *op, - ACPI_OPERAND_OBJECT *result_obj, - ACPI_WALK_STATE *walk_state) -{ - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_STATUS status; - - - if (!op) { - return; - } - - if (!result_obj) { - return; - } - - - if (!acpi_ds_is_result_used (op)) { - /* - * Must pop the result stack (Obj_desc should be equal - * to Result_obj) - */ - - status = acpi_ds_result_stack_pop (&obj_desc, walk_state); - if (ACPI_SUCCESS (status)) { - acpi_cm_remove_reference (result_obj); - } - } - return; } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_create_operand * @@ -188,19 +167,19 @@ * looking up a name or entering a new name into the internal * namespace. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_create_operand ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *arg) + ACPI_GENERIC_OP *arg) { ACPI_STATUS status = AE_OK; - NATIVE_CHAR *name_string; + char *name_string; u32 name_length; OBJECT_TYPE_INTERNAL data_type; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_PARSE_OBJECT *parent_op; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_GENERIC_OP *parent_op; u16 opcode; u32 flags; OPERATING_MODE interpreter_mode; @@ -235,7 +214,7 @@ */ parent_op = arg->parent; - if ((acpi_ps_is_node_op (parent_op->opcode)) && + if ((acpi_ps_is_named_object_op (parent_op->opcode)) && (parent_op->opcode != AML_METHODCALL_OP) && (parent_op->opcode != AML_NAMEPATH_OP)) { @@ -254,7 +233,7 @@ ACPI_TYPE_ANY, interpreter_mode, NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE, walk_state, - (ACPI_NAMESPACE_NODE **) &obj_desc); + (ACPI_NAMED_OBJECT**) &obj_desc); /* Free the namestring created above */ @@ -273,7 +252,7 @@ * indicate this to the interpreter, set the * object to the root */ - obj_desc = (ACPI_OPERAND_OBJECT *) acpi_gbl_root_node; + obj_desc = (ACPI_OBJECT_INTERNAL *) acpi_gbl_root_object; status = AE_OK; } @@ -298,7 +277,6 @@ if (ACPI_FAILURE (status)) { return (status); } - DEBUGGER_EXEC (acpi_db_display_argument_object (obj_desc, walk_state)); } @@ -333,8 +311,6 @@ } if (flags & OP_HAS_RETURN_VALUE) { - DEBUGGER_EXEC (acpi_db_display_argument_object (walk_state->operands [walk_state->num_operands - 1], walk_state)); - /* * Use value that was already previously returned * by the evaluation of this argument @@ -376,14 +352,13 @@ return (status); } - DEBUGGER_EXEC (acpi_db_display_argument_object (obj_desc, walk_state)); } return (AE_OK); } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_create_operands * @@ -395,15 +370,15 @@ * namespace objects and place those argument object on the object * stack in preparation for evaluation by the interpreter. * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_create_operands ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *first_arg) + ACPI_GENERIC_OP *first_arg) { ACPI_STATUS status = AE_OK; - ACPI_PARSE_OBJECT *arg; + ACPI_GENERIC_OP *arg; u32 args_pushed = 0; @@ -441,7 +416,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_resolve_operands * @@ -453,7 +428,7 @@ * arguments to a control method invocation (a call from one * method to another.) * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ds_resolve_operands ( @@ -474,7 +449,7 @@ */ for (i = 0; i < walk_state->num_operands; i++) { - status = acpi_aml_resolve_to_value (&walk_state->operands[i], walk_state); + status = acpi_aml_resolve_to_value (&walk_state->operands[i]); if (ACPI_FAILURE (status)) { break; } @@ -484,7 +459,7 @@ } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_map_opcode_to_data_type * @@ -497,7 +472,7 @@ * if any. If the opcode returns a value as part of the * intepreter execution, a flag is returned in Out_flags. * - ******************************************************************************/ + ****************************************************************************/ OBJECT_TYPE_INTERNAL acpi_ds_map_opcode_to_data_type ( @@ -505,18 +480,18 @@ u32 *out_flags) { OBJECT_TYPE_INTERNAL data_type = INTERNAL_TYPE_INVALID; - ACPI_OPCODE_INFO *op_info; + ACPI_OP_INFO *op_info; u32 flags = 0; op_info = acpi_ps_get_opcode_info (opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (!op_info) { /* Unknown opcode */ - return (data_type); + return data_type; } - switch (ACPI_GET_OP_CLASS (op_info)) + switch (op_info->flags & OP_INFO_TYPE) { case OPTYPE_LITERAL: @@ -577,7 +552,6 @@ case OPTYPE_DYADIC2_s: case OPTYPE_INDEX: case OPTYPE_MATCH: - case OPTYPE_RETURN: flags = OP_HAS_RETURN_VALUE; data_type = ACPI_TYPE_ANY; @@ -618,11 +592,11 @@ *out_flags = flags; } - return (data_type); + return data_type; } -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_ds_map_named_opcode_to_data_type * @@ -633,7 +607,7 @@ * DESCRIPTION: Convert a raw Named AML opcode to the associated data type. * Named opcodes are a subsystem of the AML opcodes. * - ******************************************************************************/ + ****************************************************************************/ OBJECT_TYPE_INTERNAL acpi_ds_map_named_opcode_to_data_type ( @@ -714,7 +688,7 @@ } - return (data_type); + return data_type; } diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dswexec.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dswexec.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dswexec.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dswexec.c Wed Jul 5 11:23:12 2000 @@ -1,8 +1,7 @@ /****************************************************************************** * * Module Name: dswexec - Dispatcher method execution callbacks; - * dispatch to interpreter. - * $Revision: 42 $ + * Dispatch to interpreter. * *****************************************************************************/ @@ -26,16 +25,16 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acdebug.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" +#include "debugger.h" #define _COMPONENT DISPATCHER - MODULE_NAME ("dswexec") + MODULE_NAME ("dswexec"); /***************************************************************************** @@ -56,29 +55,14 @@ ACPI_STATUS acpi_ds_exec_begin_op ( - u16 opcode, - ACPI_PARSE_OBJECT *op, ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT **out_op) + ACPI_GENERIC_OP *op) { - ACPI_OPCODE_INFO *op_info; + ACPI_OP_INFO *op_info; ACPI_STATUS status = AE_OK; - if (!op) { - status = acpi_ds_load2_begin_op (opcode, NULL, walk_state, out_op); - if (ACPI_FAILURE (status)) { - return (status); - } - - op = *out_op; - } - if (op == walk_state->origin) { - if (out_op) { - *out_op = op; - } - return (AE_OK); } @@ -113,7 +97,7 @@ * Handle the opcode based upon the opcode type */ - switch (ACPI_GET_OP_CLASS (op_info)) + switch (op_info->flags & OP_INFO_TYPE) { case OPTYPE_CONTROL: @@ -123,7 +107,7 @@ case OPTYPE_NAMED_OBJECT: - if (walk_state->walk_type == WALK_METHOD) { + if (walk_state->origin->opcode == AML_METHOD_OP) { /* * Found a named object declaration during method * execution; we must enter this object into the @@ -132,7 +116,7 @@ * of this method. */ - status = acpi_ds_load2_begin_op (op->opcode, op, walk_state, NULL); + status = acpi_ds_load2_begin_op (walk_state, op); } break; @@ -166,17 +150,17 @@ ACPI_STATUS acpi_ds_exec_end_op ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { ACPI_STATUS status = AE_OK; u16 opcode; u8 optype; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_PARSE_OBJECT *next_op; - ACPI_NAMESPACE_NODE *node; - ACPI_PARSE_OBJECT *first_arg; - ACPI_OPERAND_OBJECT *result_obj = NULL; - ACPI_OPCODE_INFO *op_info; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_GENERIC_OP *next_op; + ACPI_NAMED_OBJECT *entry; + ACPI_GENERIC_OP *first_arg; + ACPI_OBJECT_INTERNAL *result_obj = NULL; + ACPI_OP_INFO *op_info; u32 operand_index; @@ -184,11 +168,11 @@ op_info = acpi_ps_get_opcode_info (op->opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (!op_info) { return (AE_NOT_IMPLEMENTED); } - optype = (u8) ACPI_GET_OP_CLASS (op_info); + optype = (u8) (op_info->flags & OP_INFO_TYPE); first_arg = op->value.arg; /* Init the walk state */ @@ -199,9 +183,6 @@ /* Call debugger for single step support (DEBUG build only) */ - DEBUGGER_EXEC (status = acpi_db_single_step (walk_state, op, optype)); - DEBUGGER_EXEC (if (ACPI_FAILURE (status)) {return (status);}); - /* Decode the opcode */ @@ -239,7 +220,6 @@ case OPTYPE_CREATE_FIELD: case OPTYPE_FATAL: - status = acpi_ds_create_operands (walk_state, first_arg); if (ACPI_FAILURE (status)) { goto cleanup; @@ -396,12 +376,12 @@ case OPTYPE_METHOD_CALL: /* - * (AML_METHODCALL) Op->Value->Arg->Node contains - * the method Node pointer + * (AML_METHODCALL) Op->Value->Arg->Acpi_named_object contains + * the method NTE pointer */ /* Next_op points to the op that holds the method name */ next_op = first_arg; - node = next_op->node; + entry = next_op->acpi_named_object; /* Next_op points to first argument op */ next_op = next_op->next; @@ -430,7 +410,7 @@ /* Open new scope on the scope stack */ /* - Status = Acpi_ns_scope_stack_push_entry (Node); + Status = Acpi_ns_scope_stack_push_entry (Entry); if (ACPI_FAILURE (Status)) { break; } @@ -439,7 +419,7 @@ /* Tell the walk loop to preempt this running method and execute the new method */ - status = AE_CTRL_TRANSFER; + status = AE_CTRL_PENDING; /* Return now; we don't want to disturb anything, especially the operand count! */ @@ -451,20 +431,14 @@ case OPTYPE_NAMED_OBJECT: - status = acpi_ds_load2_end_op (walk_state, op); - if (ACPI_FAILURE (status)) { - break; - } -/* - if ((Walk_state->Origin->Opcode == AML_METHOD_OP) && - (Walk_state->Origin != Op)) + if ((walk_state->origin->opcode == AML_METHOD_OP) && + (walk_state->origin != op)) { - Status = Acpi_ds_load2_end_op (Walk_state, Op); - if (ACPI_FAILURE (Status)) { + status = acpi_ds_load2_end_op (walk_state, op); + if (ACPI_FAILURE (status)) { break; } } -*/ switch (op->opcode) { @@ -530,7 +504,7 @@ goto cleanup; } - status = acpi_aml_resolve_to_value (&walk_state->operands [0], walk_state); + status = acpi_aml_resolve_to_value (&walk_state->operands [0]); if (ACPI_FAILURE (status)) { goto cleanup; } @@ -563,8 +537,6 @@ /* Break to debugger to display result */ - DEBUGGER_EXEC (acpi_db_display_result_object (obj_desc, walk_state)); - /* Delete the predicate result object (we know that we don't need it anymore) and cleanup the stack */ @@ -579,8 +551,6 @@ if (result_obj) { /* Break to debugger to display result */ - - DEBUGGER_EXEC (acpi_db_display_result_object (result_obj, walk_state)); /* * Delete the result op if and only if: diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dswload.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dswload.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dswload.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dswload.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: dswload - Dispatcher namespace load callbacks - * $Revision: 19 $ * *****************************************************************************/ @@ -25,16 +25,16 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acevents.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" +#include "events.h" #define _COMPONENT DISPATCHER - MODULE_NAME ("dswload") + MODULE_NAME ("dswload"); /***************************************************************************** @@ -53,75 +53,61 @@ ACPI_STATUS acpi_ds_load1_begin_op ( - u16 opcode, - ACPI_PARSE_OBJECT *op, ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT **out_op) + ACPI_GENERIC_OP *op) { - ACPI_NAMESPACE_NODE *node; + ACPI_NAMED_OBJECT *new_entry; ACPI_STATUS status; OBJECT_TYPE_INTERNAL data_type; - NATIVE_CHAR *path; /* We are only interested in opcodes that have an associated name */ - if (!acpi_ps_is_named_op (opcode)) { - *out_op = op; - return (AE_OK); + if (!acpi_ps_is_named_op (op->opcode)) { + return AE_OK; } /* Check if this object has already been installed in the namespace */ - if (op && op->node) { - *out_op = op; - return (AE_OK); + if (op->acpi_named_object) { + return AE_OK; } - path = acpi_ps_get_next_namestring (walk_state->parser_state); - /* Map the raw opcode into an internal object type */ - data_type = acpi_ds_map_named_opcode_to_data_type (opcode); + data_type = acpi_ds_map_named_opcode_to_data_type (op->opcode); + /* Attempt to type a NAME opcode by examining the argument */ - /* - * Enter the named type into the internal namespace. We enter the name - * as we go downward in the parse tree. Any necessary subobjects that involve - * arguments to the opcode must be created as we go back up the parse tree later. - */ - status = acpi_ns_lookup (walk_state->scope_info, path, - data_type, IMODE_LOAD_PASS1, - NS_NO_UPSEARCH, walk_state, &(node)); - - if (ACPI_FAILURE (status)) { - return (status); - } + /* TBD: [Investigate] is this the right place to do this? */ - if (!op) { - /* Create a new op */ + if (op->opcode == AML_NAME_OP) { + if (op->value.arg) { - op = acpi_ps_alloc_op (opcode); - if (!op) { - return (AE_NO_MEMORY); + data_type = acpi_ds_map_opcode_to_data_type ((op->value.arg)->opcode, + NULL); } } - /* Initialize */ - - ((ACPI_PARSE2_OBJECT *)op)->name = node->name; /* - * Put the Node in the "op" object that the parser uses, so we - * can get it again quickly when this scope is closed + * Enter the named type into the internal namespace. We enter the name + * as we go downward in the parse tree. Any necessary subobjects that involve + * arguments to the opcode must be created as we go back up the parse tree later. */ - op->node = node; - - - acpi_ps_append_arg (acpi_ps_get_parent_scope (walk_state->parser_state), op); + status = acpi_ns_lookup (walk_state->scope_info, + (char *) &((ACPI_NAMED_OP *)op)->name, + data_type, IMODE_LOAD_PASS1, + NS_NO_UPSEARCH, walk_state, &(new_entry)); - *out_op = op; + if (ACPI_SUCCESS (status)) { + /* + * Put the NTE in the "op" object that the parser uses, so we + * can get it again quickly when this scope is closed + */ + op->acpi_named_object = new_entry; + } return (status); } @@ -145,7 +131,7 @@ ACPI_STATUS acpi_ds_load1_end_op ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { OBJECT_TYPE_INTERNAL data_type; @@ -153,26 +139,20 @@ /* We are only interested in opcodes that have an associated name */ if (!acpi_ps_is_named_op (op->opcode)) { - return (AE_OK); + return AE_OK; } + /* TBD: [Investigate] can this be removed? */ - /* Get the type to determine if we should pop the scope */ - - data_type = acpi_ds_map_named_opcode_to_data_type (op->opcode); - - if (op->opcode == AML_NAME_OP) { - /* For Name opcode, check the argument */ - - if (op->value.arg) { - data_type = acpi_ds_map_opcode_to_data_type ( - (op->value.arg)->opcode, NULL); - ((ACPI_NAMESPACE_NODE *)op->node)->type = - (u8) data_type; + if (op->opcode == AML_SCOPE_OP) { + if (((ACPI_NAMED_OP *)op)->name == -1) { + return AE_OK; } } + data_type = acpi_ds_map_named_opcode_to_data_type (op->opcode); + /* Pop the scope stack */ if (acpi_ns_opens_scope (data_type)) { @@ -180,7 +160,7 @@ acpi_ds_scope_stack_pop (walk_state); } - return (AE_OK); + return AE_OK; } @@ -201,74 +181,60 @@ ACPI_STATUS acpi_ds_load2_begin_op ( - u16 opcode, - ACPI_PARSE_OBJECT *op, ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT **out_op) + ACPI_GENERIC_OP *op) { - ACPI_NAMESPACE_NODE *node; + ACPI_NAMED_OBJECT *new_entry; ACPI_STATUS status; OBJECT_TYPE_INTERNAL data_type; - NATIVE_CHAR *buffer_ptr; + char *buffer_ptr; void *original = NULL; /* We only care about Namespace opcodes here */ - if (!acpi_ps_is_namespace_op (opcode) && - opcode != AML_NAMEPATH_OP) + if (!acpi_ps_is_namespace_op (op->opcode) && + op->opcode != AML_NAMEPATH_OP) { - return (AE_OK); - } - - - /* Temp! same code as in psparse */ - - if (!acpi_ps_is_named_op (opcode)) { - return (AE_OK); + return AE_OK; } - if (op) { - /* - * Get the name we are going to enter or lookup in the namespace - */ - if (opcode == AML_NAMEPATH_OP) { - /* For Namepath op, get the path string */ - - buffer_ptr = op->value.string; - if (!buffer_ptr) { - /* No name, just exit */ - return (AE_OK); - } - } + /* + * Get the name we are going to enter or lookup in the namespace + */ + if (op->opcode == AML_NAMEPATH_OP) { + /* For Namepath op , get the path string */ - else { - /* Get name from the op */ + buffer_ptr = op->value.string; + if (!buffer_ptr) { + /* No name, just exit */ - buffer_ptr = (NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)op)->name; + return AE_OK; } } else { - buffer_ptr = acpi_ps_get_next_namestring (walk_state->parser_state); + /* Get name from the op */ + + buffer_ptr = (char *) &((ACPI_NAMED_OP *)op)->name; } /* Map the raw opcode into an internal object type */ - data_type = acpi_ds_map_named_opcode_to_data_type (opcode); + data_type = acpi_ds_map_named_opcode_to_data_type (op->opcode); - if (opcode == AML_DEF_FIELD_OP || - opcode == AML_BANK_FIELD_OP || - opcode == AML_INDEX_FIELD_OP) + if (op->opcode == AML_DEF_FIELD_OP || + op->opcode == AML_BANK_FIELD_OP || + op->opcode == AML_INDEX_FIELD_OP) { - node = NULL; + new_entry = NULL; status = AE_OK; } - else if (opcode == AML_NAMEPATH_OP) { + else if (op->opcode == AML_NAMEPATH_OP) { /* * The Name_path is an object reference to an existing object. Don't enter the * name into the namespace, but look it up for use later @@ -276,16 +242,16 @@ status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, data_type, IMODE_EXECUTE, NS_SEARCH_PARENT, walk_state, - &(node)); + &(new_entry)); } else { - if (op && op->node) { - original = op->node; - node = op->node; + if (op->acpi_named_object) { + original = op->acpi_named_object; + new_entry = op->acpi_named_object; if (acpi_ns_opens_scope (data_type)) { - status = acpi_ds_scope_stack_push (node, + status = acpi_ds_scope_stack_push (new_entry->child_table, data_type, walk_state); if (ACPI_FAILURE (status)) { @@ -293,7 +259,7 @@ } } - return (AE_OK); + return AE_OK; } /* @@ -304,30 +270,15 @@ status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, data_type, IMODE_EXECUTE, NS_NO_UPSEARCH, walk_state, - &(node)); + &(new_entry)); } if (ACPI_SUCCESS (status)) { - if (!op) { - /* Create a new op */ - - op = acpi_ps_alloc_op (opcode); - if (!op) { - return (AE_NO_MEMORY); - } - - /* Initialize */ - - ((ACPI_PARSE2_OBJECT *)op)->name = node->name; - *out_op = op; - } - - /* - * Put the Node in the "op" object that the parser uses, so we + * Put the NTE in the "op" object that the parser uses, so we * can get it again quickly when this scope is closed */ - op->node = node; + op->acpi_named_object = new_entry; } @@ -354,22 +305,22 @@ ACPI_STATUS acpi_ds_load2_end_op ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { ACPI_STATUS status = AE_OK; OBJECT_TYPE_INTERNAL data_type; - ACPI_NAMESPACE_NODE *node; - ACPI_PARSE_OBJECT *arg; - ACPI_NAMESPACE_NODE *new_node; + ACPI_NAMED_OBJECT *entry; + ACPI_GENERIC_OP *arg; + ACPI_NAMED_OBJECT *new_entry; if (!acpi_ps_is_namespace_object_op (op->opcode)) { - return (AE_OK); + return AE_OK; } if (op->opcode == AML_SCOPE_OP) { - if (((ACPI_PARSE2_OBJECT *)op)->name == -1) { - return (AE_OK); + if (((ACPI_NAMED_OP *)op)->name == -1) { + return AE_OK; } } @@ -377,17 +328,17 @@ data_type = acpi_ds_map_named_opcode_to_data_type (op->opcode); /* - * Get the Node/name from the earlier lookup + * Get the NTE/name from the earlier lookup * (It was saved in the *op structure) */ - node = op->node; + entry = op->acpi_named_object; /* - * Put the Node on the object stack (Contains the ACPI Name of + * Put the NTE on the object stack (Contains the ACPI Name of * this object) */ - walk_state->operands[0] = (void *) node; + walk_state->operands[0] = (void *) entry; walk_state->num_operands = 1; /* Pop the scope stack */ @@ -458,38 +409,29 @@ INTERNAL_TYPE_DEF_ANY, IMODE_LOAD_PASS1, NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - walk_state, &(new_node)); + walk_state, &(new_entry)); if (ACPI_SUCCESS (status)) { - /* We could put the returned object (Node) on the object stack for later, but + /* We could put the returned object (NTE) on the object stack for later, but * for now, we will put it in the "op" object that the parser uses, so we * can get it again at the end of this scope */ - op->node = new_node; - - /* - * If this is NOT a control method, we need to evaluate this opcode now. - */ - - /* THIS WON"T WORK. Must execute all operands like Add(). => Must do an execute pass - if (!Walk_state->Method_desc) { - Status = Acpi_ds_exec_end_op (Walk_state, Op); - } - */ + op->acpi_named_object = new_entry; } + break; case AML_METHODCALL_OP: /* - * Lookup the method name and save the Node + * Lookup the method name and save the NTE */ status = acpi_ns_lookup (walk_state->scope_info, arg->value.string, ACPI_TYPE_ANY, IMODE_LOAD_PASS2, NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE, - walk_state, &(new_node)); + walk_state, &(new_entry)); if (ACPI_SUCCESS (status)) { @@ -498,11 +440,11 @@ /* TBD: [Restructure] Make sure that what we found is indeed a method! */ /* We didn't search for a method on purpose, to see if the name would resolve! */ - /* We could put the returned object (Node) on the object stack for later, but + /* We could put the returned object (NTE) on the object stack for later, but * for now, we will put it in the "op" object that the parser uses, so we * can get it again at the end of this scope */ - op->node = new_node; + op->acpi_named_object = new_entry; } @@ -513,7 +455,7 @@ /* Nothing to do other than enter object into namespace */ - status = acpi_aml_exec_create_processor (op, (ACPI_HANDLE) node); + status = acpi_aml_exec_create_processor (op, (ACPI_HANDLE) entry); if (ACPI_FAILURE (status)) { goto cleanup; } @@ -525,7 +467,7 @@ /* Nothing to do other than enter object into namespace */ - status = acpi_aml_exec_create_power_resource (op, (ACPI_HANDLE) node); + status = acpi_aml_exec_create_power_resource (op, (ACPI_HANDLE) entry); if (ACPI_FAILURE (status)) { goto cleanup; } @@ -545,7 +487,7 @@ arg = op->value.arg; status = acpi_ds_create_field (op, - arg->node, + (ACPI_HANDLE) arg->acpi_named_object, walk_state); break; @@ -555,7 +497,7 @@ arg = op->value.arg; status = acpi_ds_create_index_field (op, - (ACPI_HANDLE) arg->node, + (ACPI_HANDLE) arg->acpi_named_object, walk_state); break; @@ -564,7 +506,7 @@ arg = op->value.arg; status = acpi_ds_create_bank_field (op, - arg->node, + (ACPI_HANDLE) arg->acpi_named_object, walk_state); break; @@ -574,10 +516,10 @@ */ case AML_METHOD_OP: - if (!node->object) { - status = acpi_aml_exec_create_method (((ACPI_PARSE2_OBJECT *) op)->data, - ((ACPI_PARSE2_OBJECT *) op)->length, - arg->value.integer, (ACPI_HANDLE) node); + if (!entry->object) { + status = acpi_aml_exec_create_method (((ACPI_DEFERRED_OP *) op)->body, + ((ACPI_DEFERRED_OP *) op)->body_length, + arg->value.integer, (ACPI_HANDLE) entry); } break; @@ -607,18 +549,14 @@ case AML_REGION_OP: - if (node->object) { - break; - } - /* * The Op_region is not fully parsed at this time. Only valid argument is the Space_id. * (We must save the address of the AML of the address and length operands) */ - status = acpi_aml_exec_create_region (((ACPI_PARSE2_OBJECT *) op)->data, - ((ACPI_PARSE2_OBJECT *) op)->length, + status = acpi_aml_exec_create_region (((ACPI_DEFERRED_OP *) op)->body, + ((ACPI_DEFERRED_OP *) op)->body_length, arg->value.integer, walk_state); break; @@ -639,7 +577,7 @@ case AML_NAME_OP: - status = acpi_ds_create_node (walk_state, node, op); + status = acpi_ds_create_named_object (walk_state, entry, op); break; @@ -655,9 +593,7 @@ cleanup: - - /* Remove the Node pushed at the very beginning */ - + /* Remove the NTE pushed at the very beginning */ acpi_ds_obj_stack_pop (1, walk_state); return (status); } diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dswscope.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dswscope.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dswscope.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dswscope.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: dswscope - Scope stack manipulation - * $Revision: 38 $ * *****************************************************************************/ @@ -25,12 +25,12 @@ #include "acpi.h" -#include "acinterp.h" -#include "acdispat.h" +#include "interp.h" +#include "dispatch.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("dswscope") + MODULE_NAME ("dswscope"); #define STACK_POP(head) head @@ -69,24 +69,24 @@ * * FUNCTION: Acpi_ds_scope_stack_push * - * PARAMETERS: *Node, - Name to be made current - * Type, - Type of frame being pushed + * PARAMETERS: *New_scope, - Name to be made current + * Type, - Type of frame being pushed * * DESCRIPTION: Push the current scope on the scope stack, and make the - * passed Node current. + * passed nte current. * ***************************************************************************/ ACPI_STATUS acpi_ds_scope_stack_push ( - ACPI_NAMESPACE_NODE *node, + ACPI_NAME_TABLE *new_scope, OBJECT_TYPE_INTERNAL type, ACPI_WALK_STATE *walk_state) { ACPI_GENERIC_STATE *scope_info; - if (!node) { + if (!new_scope) { /* invalid scope */ REPORT_ERROR ("Ds_scope_stack_push: null scope passed"); @@ -109,7 +109,7 @@ /* Init new scope object */ - scope_info->scope.node = node; + scope_info->scope.name_table = new_scope; scope_info->common.value = (u16) type; /* Push new scope object onto stack */ diff -urN linux-2.4.0-test9/drivers/acpi/dispatcher/dswstate.c linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dswstate.c --- linux-2.4.0-test9/drivers/acpi/dispatcher/dswstate.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/dispatcher/dswstate.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: dswstate - Dispatcher parse tree walk management routines - * $Revision: 31 $ * *****************************************************************************/ @@ -26,13 +25,13 @@ #include "acpi.h" #include "amlcode.h" -#include "acparser.h" -#include "acdispat.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "parser.h" +#include "dispatch.h" +#include "namesp.h" +#include "interp.h" #define _COMPONENT DISPATCHER - MODULE_NAME ("dswstate") + MODULE_NAME ("dswstate"); /******************************************************************************* @@ -56,7 +55,7 @@ walk_state->num_results = 0; walk_state->current_result = 0; - return (AE_OK); + return AE_OK; } @@ -81,13 +80,13 @@ if (walk_state->num_results >= OBJ_NUM_OPERANDS) { - return (AE_STACK_OVERFLOW); + return AE_STACK_OVERFLOW; } walk_state->results [walk_state->num_results] = object; walk_state->num_results++; - return (AE_OK); + return AE_OK; } @@ -107,7 +106,7 @@ ACPI_STATUS acpi_ds_result_stack_pop ( - ACPI_OPERAND_OBJECT **object, + ACPI_OBJECT_INTERNAL **object, ACPI_WALK_STATE *walk_state) { @@ -115,7 +114,7 @@ /* Check for stack underflow */ if (walk_state->num_results == 0) { - return (AE_AML_NO_OPERAND); + return AE_AML_NO_OPERAND; } @@ -126,13 +125,13 @@ /* Check for a valid result object */ if (!walk_state->results [walk_state->num_results]) { - return (AE_AML_NO_OPERAND); + return AE_AML_NO_OPERAND; } *object = walk_state->results [walk_state->num_results]; walk_state->results [walk_state->num_results] = NULL; - return (AE_OK); + return AE_OK; } @@ -192,7 +191,7 @@ /* Check for stack overflow */ if (walk_state->num_operands >= OBJ_NUM_OPERANDS) { - return (AE_STACK_OVERFLOW); + return AE_STACK_OVERFLOW; } /* Put the object onto the stack */ @@ -200,7 +199,7 @@ walk_state->operands [walk_state->num_operands] = object; walk_state->num_operands++; - return (AE_OK); + return AE_OK; } @@ -220,7 +219,7 @@ ACPI_STATUS acpi_ds_obj_stack_pop_object ( - ACPI_OPERAND_OBJECT **object, + ACPI_OBJECT_INTERNAL **object, ACPI_WALK_STATE *walk_state) { @@ -228,7 +227,7 @@ /* Check for stack underflow */ if (walk_state->num_operands == 0) { - return (AE_AML_NO_OPERAND); + return AE_AML_NO_OPERAND; } @@ -239,7 +238,7 @@ /* Check for a valid operand */ if (!walk_state->operands [walk_state->num_operands]) { - return (AE_AML_NO_OPERAND); + return AE_AML_NO_OPERAND; } /* Get operand and set stack entry to null */ @@ -247,7 +246,7 @@ *object = walk_state->operands [walk_state->num_operands]; walk_state->operands [walk_state->num_operands] = NULL; - return (AE_OK); + return AE_OK; } @@ -277,7 +276,7 @@ /* Check for stack underflow */ if (walk_state->num_operands == 0) { - return (AE_STACK_UNDERFLOW); + return AE_STACK_UNDERFLOW; } /* Just set the stack entry to null */ @@ -286,7 +285,7 @@ walk_state->operands [walk_state->num_operands] = NULL; } - return (AE_OK); + return AE_OK; } @@ -310,14 +309,14 @@ ACPI_WALK_STATE *walk_state) { u32 i; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; for (i = 0; i < pop_count; i++) { /* Check for stack underflow */ if (walk_state->num_operands == 0) { - return (AE_STACK_UNDERFLOW); + return AE_STACK_UNDERFLOW; } /* Pop the stack and delete an object if present in this stack entry */ @@ -330,7 +329,7 @@ } } - return (AE_OK); + return AE_OK; } @@ -394,10 +393,10 @@ { if (!walk_list) { - return (NULL); + return NULL; } - return (walk_list->walk_state); + return walk_list->walk_state; } @@ -484,8 +483,8 @@ ACPI_WALK_STATE * acpi_ds_create_walk_state ( ACPI_OWNER_ID owner_id, - ACPI_PARSE_OBJECT *origin, - ACPI_OPERAND_OBJECT *mth_desc, + ACPI_GENERIC_OP *origin, + ACPI_OBJECT_INTERNAL *mth_desc, ACPI_WALK_LIST *walk_list) { ACPI_WALK_STATE *walk_state; @@ -512,7 +511,6 @@ /* The cache is empty, create a new object */ /* Avoid deadlock with Acpi_cm_callocate */ - acpi_cm_release_mutex (ACPI_MTX_CACHES); walk_state = acpi_cm_callocate (sizeof (ACPI_WALK_STATE)); @@ -642,7 +640,6 @@ next = acpi_gbl_walk_state_cache->next; acpi_cm_free (acpi_gbl_walk_state_cache); acpi_gbl_walk_state_cache = next; - acpi_gbl_walk_state_cache_depth--; } return; diff -urN linux-2.4.0-test9/drivers/acpi/driver.c linux-2.4.0-test9-lia/drivers/acpi/driver.c --- linux-2.4.0-test9/drivers/acpi/driver.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/driver.c Wed Jul 12 13:21:57 2000 @@ -32,9 +32,6 @@ #include "acpi.h" #include "driver.h" -#define _COMPONENT OS_DEPENDENT - MODULE_NAME ("driver") - struct acpi_run_entry { void (*callback)(void*); diff -urN linux-2.4.0-test9/drivers/acpi/ec.c linux-2.4.0-test9-lia/drivers/acpi/ec.c --- linux-2.4.0-test9/drivers/acpi/ec.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/ec.c Thu Jul 13 09:39:49 2000 @@ -1,21 +1,21 @@ /* - * ec.c - Embedded controller support + * ec.c - Embedded controller support * - * Copyright (C) 2000 Andrew Henroid + * Copyright (C) 2000 Andrew Henroid * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This program is 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. + * 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 + * 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 @@ -28,28 +28,28 @@ #include "acpi.h" #include "driver.h" -#define _COMPONENT OS_DEPENDENT - MODULE_NAME ("ec") - -#define ACPI_EC_HID "PNP0A09" +enum +{ + ACPI_EC_HID = 0x090cd041, +}; enum { - ACPI_EC_SMI = 0x40, - ACPI_EC_SCI = 0x20, - ACPI_EC_BURST = 0x10, - ACPI_EC_CMD = 0x08, - ACPI_EC_IBF = 0x02, - ACPI_EC_OBF = 0x01 + ACPI_EC_SMI = 0x40, + ACPI_EC_SCI = 0x20, + ACPI_EC_BURST = 0x10, + ACPI_EC_CMD = 0x08, + ACPI_EC_IBF = 0x02, + ACPI_EC_OBF = 0x01 }; enum { - ACPI_EC_READ = 0x80, - ACPI_EC_WRITE = 0x81, - ACPI_EC_BURST_ENABLE = 0x82, - ACPI_EC_BURST_DISABLE = 0x83, - ACPI_EC_QUERY = 0x84, + ACPI_EC_READ = 0x80, + ACPI_EC_WRITE = 0x81, + ACPI_EC_BURST_ENABLE = 0x82, + ACPI_EC_BURST_DISABLE = 0x83, + ACPI_EC_QUERY = 0x84, }; @@ -74,9 +74,9 @@ static void acpi_ec_wait_control(void) { - udelay(1); - while(inb(acpi_ec_status) & ACPI_EC_IBF) - udelay(10); + udelay(1); + while(inb(acpi_ec_status) & ACPI_EC_IBF) + udelay(10); } /* @@ -88,12 +88,12 @@ if (!acpi_ec_data || !acpi_ec_status) return -1; - outb(ACPI_EC_READ, acpi_ec_status); - acpi_ec_wait_control(); - outb(addr, acpi_ec_data); - acpi_ec_wait_control(); - interruptible_sleep_on(&acpi_ec_wait); - *value = inb(acpi_ec_data); + outb(ACPI_EC_READ, acpi_ec_status); + acpi_ec_wait_control(); + outb(addr, acpi_ec_data); + acpi_ec_wait_control(); + interruptible_sleep_on(&acpi_ec_wait); + *value = inb(acpi_ec_data); return 0; } @@ -107,32 +107,33 @@ if (!acpi_ec_data || !acpi_ec_status) return -1; - outb(ACPI_EC_WRITE, acpi_ec_status); - acpi_ec_wait_control(); - outb(addr, acpi_ec_data); - acpi_ec_wait_control(); - outb(value, acpi_ec_data); - acpi_ec_wait_control(); - interruptible_sleep_on(&acpi_ec_wait); + outb(ACPI_EC_WRITE, acpi_ec_status); + acpi_ec_wait_control(); + outb(addr, acpi_ec_data); + acpi_ec_wait_control(); + outb(value, acpi_ec_data); + acpi_ec_wait_control(); + interruptible_sleep_on(&acpi_ec_wait); return 0; } /* - * Get Embedded Controller information + * Get processor information */ static ACPI_STATUS acpi_find_ec(ACPI_HANDLE handle, u32 level, void *ctx, void **value) { - ACPI_DEVICE_INFO dev_info; - ACPI_OBJECT obj; ACPI_BUFFER buf; + ACPI_OBJECT obj; RESOURCE *res; int gpe; - if (!ACPI_SUCCESS(acpi_get_object_info(handle, &dev_info)) - || !(dev_info.valid & ACPI_VALID_HID) - || 0 != STRCMP(dev_info.hardware_id, ACPI_EC_HID)) + buf.length = sizeof(obj); + buf.pointer = &obj; + if (!ACPI_SUCCESS(acpi_evaluate_object(handle, "_HID", NULL, &buf)) + || obj.type != ACPI_TYPE_NUMBER + || obj.number.value != ACPI_EC_HID) return AE_OK; buf.length = 0; @@ -159,23 +160,20 @@ buf.length = sizeof(obj); buf.pointer = &obj; if (!ACPI_SUCCESS(acpi_evaluate_object(handle, "_GPE", NULL, &buf)) - || obj.type != ACPI_TYPE_NUMBER) + || obj.type != ACPI_TYPE_NUMBER) return AE_OK; gpe = (int) obj.number.value; printk(KERN_INFO "ACPI: found EC @ (0x%02x,0x%02x,%d)\n", - acpi_ec_data, acpi_ec_status, gpe); + acpi_ec_data, acpi_ec_status, gpe); if (!ACPI_SUCCESS(acpi_install_gpe_handler( gpe, (ACPI_EVENT_LEVEL_TRIGGERED | ACPI_EVENT_EDGE_TRIGGERED), acpi_ec_gpe, - NULL))) { - - DEBUG_PRINT(ACPI_ERROR, ("Could not install GPE handler for EC.\n")); + NULL))) return AE_OK; - } return AE_OK; } @@ -184,10 +182,10 @@ acpi_ec_init(void) { acpi_walk_namespace(ACPI_TYPE_DEVICE, - ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, - acpi_find_ec, - NULL, - NULL); + ACPI_ROOT_OBJECT, + ACPI_INT32_MAX, + acpi_find_ec, + NULL, + NULL); return 0; } diff -urN linux-2.4.0-test9/drivers/acpi/events/Makefile linux-2.4.0-test9-lia/drivers/acpi/events/Makefile --- linux-2.4.0-test9/drivers/acpi/events/Makefile Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/events/Makefile Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -SUB_DIRS := -MOD_SUB_DIRS := $(SUB_DIRS) -MOD_IN_SUB_DIRS := -ALL_SUB_DIRS := $(SUB_DIRS) - -O_TARGET := ../$(shell basename `pwd`).o -O_OBJS := -M_OBJS := - -ACPI_OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) - -EXTRA_CFLAGS += -I../include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) - -# if the interpreter is used, it overrides arch/i386/kernel/acpi.c -ifeq ($(CONFIG_ACPI_INTERPRETER),y) - O_OBJS := $(ACPI_OBJS) -endif - -include $(TOPDIR)/Rules.make - -clean: - $(RM) *.o diff -urN linux-2.4.0-test9/drivers/acpi/events/evevent.c linux-2.4.0-test9-lia/drivers/acpi/events/evevent.c --- linux-2.4.0-test9/drivers/acpi/events/evevent.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/events/evevent.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ * * Module Name: evevent - Fixed and General Purpose Acpi_event * handling and dispatch - * $Revision: 13 $ * *****************************************************************************/ @@ -25,13 +24,13 @@ */ #include "acpi.h" -#include "achware.h" -#include "acevents.h" -#include "acnamesp.h" -#include "accommon.h" +#include "hardware.h" +#include "events.h" +#include "namesp.h" +#include "common.h" #define _COMPONENT EVENT_HANDLING - MODULE_NAME ("evevent") + MODULE_NAME ("evevent"); /****************************************************************************** @@ -69,7 +68,7 @@ acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_LOCK, ACPI_EVENT_RTC + TMR_EN, 0); - return (AE_OK); + return AE_OK; } @@ -141,7 +140,7 @@ int_status |= acpi_ev_fixed_event_dispatch (ACPI_EVENT_SLEEP_BUTTON); } - return (int_status); + return int_status; } @@ -164,7 +163,7 @@ { /* Clear the status bit */ - acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_DO_NOT_LOCK, TMR_STS + + acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_DO_NOT_LOCK, (s32)TMR_STS + event, 1); /* @@ -176,13 +175,13 @@ TMR_EN + event, 0); REPORT_ERROR("No installed handler for fixed event."); - return (INTERRUPT_NOT_HANDLED); + return INTERRUPT_NOT_HANDLED; } /* Invoke the handler */ - return ((acpi_gbl_fixed_event_handlers[event].handler)( - acpi_gbl_fixed_event_handlers[event].context)); + return (acpi_gbl_fixed_event_handlers[event].handler)( + acpi_gbl_fixed_event_handlers[event].context); } @@ -217,11 +216,6 @@ gpe1_register_count = (u16) DIV_2 (acpi_gbl_FACP->gpe1_blk_len); acpi_gbl_gpe_register_count = gpe0register_count + gpe1_register_count; - if (!acpi_gbl_gpe_register_count) { - REPORT_WARNING ("No GPEs defined in the FACP"); - return (AE_OK); - } - /* * Allocate the Gpe information block */ @@ -347,17 +341,17 @@ void **return_value) { u32 gpe_number; - NATIVE_CHAR name[ACPI_NAME_SIZE + 1]; + char name[ACPI_NAME_SIZE + 1]; u8 type; /* Extract the name from the object and convert to a string */ - MOVE_UNALIGNED32_TO_32 (name, &((ACPI_NAMESPACE_NODE *) obj_handle)->name); + MOVE_UNALIGNED32_TO_32 (name, &((ACPI_NAMED_OBJECT*) obj_handle)->name); name[ACPI_NAME_SIZE] = 0; /* - * Edge/Level determination is based on the 2nd s8 of the method name + * Edge/Level determination is based on the 2nd char of the method name */ if (name[1] == 'L') { type = ACPI_EVENT_LEVEL_TRIGGERED; @@ -368,7 +362,7 @@ else { /* Unknown method type, just ignore it! */ - return (AE_OK); + return AE_OK; } /* Convert the last two characters of the name to the Gpe Number */ @@ -377,7 +371,7 @@ if (gpe_number == ACPI_UINT32_MAX) { /* Conversion failed; invalid method, just ignore it */ - return (AE_OK); + return AE_OK; } /* Ensure that we have a valid GPE number */ @@ -385,7 +379,7 @@ if (acpi_gbl_gpe_valid[gpe_number] == ACPI_GPE_INVALID) { /* Not valid, all we can do here is ignore it */ - return (AE_OK); + return AE_OK; } /* @@ -403,7 +397,7 @@ acpi_hw_enable_gpe (gpe_number); - return (AE_OK); + return AE_OK; } @@ -437,7 +431,7 @@ /* Traverse the namespace under \_GPE to find all methods there */ status = acpi_walk_namespace (ACPI_TYPE_METHOD, acpi_gbl_gpe_obj_handle, - ACPI_UINT32_MAX, acpi_ev_save_method_info, + ACPI_INT32_MAX, acpi_ev_save_method_info, NULL, NULL); return (status); @@ -529,7 +523,7 @@ } } - return (int_status); + return int_status; } diff -urN linux-2.4.0-test9/drivers/acpi/events/evmisc.c linux-2.4.0-test9-lia/drivers/acpi/events/evmisc.c --- linux-2.4.0-test9/drivers/acpi/events/evmisc.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/events/evmisc.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ * * Module Name: evmisc - ACPI device notification handler dispatch * and ACPI Global Lock support - * $Revision: 13 $ * *****************************************************************************/ @@ -25,13 +24,13 @@ */ #include "acpi.h" -#include "acevents.h" -#include "acnamesp.h" -#include "acinterp.h" -#include "achware.h" +#include "events.h" +#include "namesp.h" +#include "interp.h" +#include "hardware.h" #define _COMPONENT EVENT_HANDLING - MODULE_NAME ("evmisc") + MODULE_NAME ("evmisc"); /************************************************************************** @@ -52,8 +51,8 @@ ACPI_HANDLE device, u32 notify_value) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *handler_obj; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *handler_obj; NOTIFY_HANDLER handler; @@ -109,7 +108,7 @@ /* - * Get the notify object which must be attached to the device Node + * Get the notify object which must be attached to the device NTE */ obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) device); @@ -212,7 +211,7 @@ context); } - return (INTERRUPT_HANDLED); + return INTERRUPT_HANDLED; } @@ -350,7 +349,7 @@ */ if (pending) { acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_LOCK, - PM1_CONTROL | GBL_RLS, 1); + (s32)PM1_CONTROL | GBL_RLS, 1); } } diff -urN linux-2.4.0-test9/drivers/acpi/events/evregion.c linux-2.4.0-test9-lia/drivers/acpi/events/evregion.c --- linux-2.4.0-test9/drivers/acpi/events/evregion.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/events/evregion.c Thu Aug 24 18:16:02 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: evregion - ACPI Address_space / Op_region handler dispatch - * $Revision: 76 $ * *****************************************************************************/ @@ -25,13 +24,13 @@ #include "acpi.h" -#include "acevents.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "events.h" +#include "namesp.h" +#include "interp.h" #include "amlcode.h" #define _COMPONENT EVENT_HANDLING - MODULE_NAME ("evregion") + MODULE_NAME ("evregion"); #define PCI_ROOT_HID_STRING "PNP0A03" @@ -57,23 +56,23 @@ void *context, void **return_value) { - ACPI_NAMESPACE_NODE *node; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_NAMED_OBJECT *entry; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status; - node = (ACPI_NAMESPACE_NODE *) obj_handle; - obj_desc = ((ACPI_NAMESPACE_NODE *) obj_handle)->object; + entry = (ACPI_NAMED_OBJECT*) obj_handle; + obj_desc = ((ACPI_NAMED_OBJECT*)obj_handle)->object; /* * We are looking for all valid _HID objects. */ - if (STRNCMP ((NATIVE_CHAR *) &node->name, METHOD_NAME__HID, ACPI_NAME_SIZE) || + if (STRNCMP ((char *)&entry->name, METHOD_NAME__HID, ACPI_NAME_SIZE) || (!obj_desc)) { - return (AE_OK); + return AE_OK; } @@ -88,7 +87,7 @@ case ACPI_TYPE_NUMBER: if (obj_desc->number.value != PCI_ROOT_HID_VALUE) { - return (AE_OK); + return AE_OK; } break; @@ -98,14 +97,14 @@ if (STRNCMP (obj_desc->string.pointer, PCI_ROOT_HID_STRING, sizeof (PCI_ROOT_HID_STRING))) { - return (AE_OK); + return AE_OK; } break; default: - return (AE_OK); + return AE_OK; } @@ -115,11 +114,11 @@ * handler for this PCI device. */ - status = acpi_install_address_space_handler (acpi_ns_get_parent_object (node), + status = acpi_install_address_space_handler (acpi_ns_get_parent_entry (entry), ADDRESS_SPACE_PCI_CONFIG, ACPI_DEFAULT_HANDLER, NULL, NULL); - return (AE_OK); + return AE_OK; } @@ -143,90 +142,7 @@ acpi_ns_walk_namespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, FALSE, acpi_ev_find_one_pci_root_bus, NULL, NULL); - return (AE_OK); -} - -/****************************************************************************** - * - * FUNCTION: Acpi_ev_init_one_device - * - * PARAMETERS: The usual "I'm a namespace callback" stuff - * - * RETURN: ACPI_STATUS - * - * DESCRIPTION: This is called once per device soon after ACPI is enabled - * to initialize each device. It determines if the device is - * present, and if so, calls _INI. - * - *****************************************************************************/ - -ACPI_STATUS -acpi_ev_init_one_device ( - ACPI_HANDLE obj_handle, - u32 nesting_level, - void *context, - void **return_value) -{ - ACPI_STATUS status; - ACPI_OPERAND_OBJECT *ret_obj; - - - /* - * Run _STA to determine if we can run _INI on the device. - */ - status = acpi_ns_evaluate_relative(obj_handle, "_STA", NULL, &ret_obj); - if (AE_NOT_FOUND == status) { - /* No _STA means device is present */ - } - else if (ACPI_FAILURE (status)) { - return (status); - } - else if (ret_obj) { - if (ACPI_TYPE_NUMBER != ret_obj->common.type) { - status = AE_AML_OPERAND_TYPE; - goto cleanup; - } - - /* - * if _STA "present" bit not set, we're done. - */ - if (!(ret_obj->number.value & 1)) { - goto cleanup; - } - } - - /* - * The device is present. Run _INI. - */ - - status = acpi_ns_evaluate_relative(obj_handle, "_INI", NULL, NULL); - -cleanup: - - acpi_cm_remove_reference (ret_obj); - return (status); -} - -/****************************************************************************** - * - * FUNCTION: Acpi_ev_init_devices - * - * PARAMETERS: None - * - * RETURN: ACPI_STATUS - * - * DESCRIPTION: This initializes all ACPI devices. - * - *****************************************************************************/ - -ACPI_STATUS -acpi_ev_init_devices ( - void) -{ - acpi_ns_walk_namespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, - FALSE, acpi_ev_init_one_device, NULL, NULL); - - return (AE_OK); + return AE_OK; } @@ -256,20 +172,28 @@ * associated with the address space. For these we use the root. */ - status = acpi_install_address_space_handler (acpi_gbl_root_node, + status = acpi_install_address_space_handler (acpi_gbl_root_object, ADDRESS_SPACE_SYSTEM_MEMORY, ACPI_DEFAULT_HANDLER, NULL, NULL); if (ACPI_FAILURE (status)) { return (status); } - status = acpi_install_address_space_handler (acpi_gbl_root_node, + status = acpi_install_address_space_handler (acpi_gbl_root_object, ADDRESS_SPACE_SYSTEM_IO, ACPI_DEFAULT_HANDLER, NULL, NULL); if (ACPI_FAILURE (status)) { return (status); } + /* + * Install PCI config space handler for all PCI root bridges. A PCI root + * bridge is found by searching for devices containing a HID with the value + * EISAID("PNP0A03") + */ + + acpi_ev_find_pci_root_buses (); + return (AE_OK); } @@ -292,12 +216,12 @@ ACPI_STATUS acpi_ev_execute_reg_method ( - ACPI_OPERAND_OBJECT *region_obj, + ACPI_OBJECT_INTERNAL *region_obj, u32 function) { - ACPI_OPERAND_OBJECT *params[3]; - ACPI_OPERAND_OBJECT space_iD_obj; - ACPI_OPERAND_OBJECT function_obj; + ACPI_OBJECT_INTERNAL *params[3]; + ACPI_OBJECT_INTERNAL space_iD_obj; + ACPI_OBJECT_INTERNAL function_obj; ACPI_STATUS status; @@ -362,7 +286,7 @@ ACPI_STATUS acpi_ev_address_space_dispatch ( - ACPI_OPERAND_OBJECT *region_obj, + ACPI_OBJECT_INTERNAL *region_obj, u32 function, u32 address, u32 bit_width, @@ -371,8 +295,9 @@ ACPI_STATUS status; ADDRESS_SPACE_HANDLER handler; ADDRESS_SPACE_SETUP region_setup; - ACPI_OPERAND_OBJECT *handler_desc; - void *region_context = NULL; + ACPI_OBJECT_INTERNAL *handler_desc; + void *region_context; + void *save_context = NULL; /* @@ -388,7 +313,7 @@ * It may be the case that the region has never been initialized * Some types of regions require special init code */ - if (!(region_obj->region.flags & AOPOBJ_INITIALIZED)) { + if (!(region_obj->region.region_flags & REGION_INITIALIZED)) { /* * This region has not been initialized yet, do it */ @@ -422,10 +347,10 @@ } /* - * Save the returned context for use in all accesses to - * this particular region. + * Save the returned context for use in all accesses to the region */ - region_obj->region.region_context = region_context; + save_context = handler_desc->addr_handler.context; + handler_desc->addr_handler.context = region_context; } /* @@ -446,8 +371,7 @@ * Invoke the handler. */ status = handler (function, address, bit_width, value, - handler_desc->addr_handler.context, - region_obj->region.region_context); + handler_desc->addr_handler.context); if (!(handler_desc->addr_handler.flags & ADDR_HANDLER_DEFAULT_INSTALLED)) { @@ -457,6 +381,9 @@ acpi_aml_enter_interpreter (); } + if (save_context) + handler_desc->addr_handler.context = save_context; + return (status); } @@ -476,13 +403,13 @@ void acpi_ev_disassociate_region_from_handler( - ACPI_OPERAND_OBJECT *region_obj) + ACPI_OBJECT_INTERNAL *region_obj) { - ACPI_OPERAND_OBJECT *handler_obj; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT **last_obj_ptr; + ACPI_OBJECT_INTERNAL *handler_obj; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL **last_obj_ptr; ADDRESS_SPACE_SETUP region_setup; - void *region_context = region_obj->region.region_context; + void *region_context; ACPI_STATUS status; @@ -514,8 +441,7 @@ /* * This is it, remove it from the handler's list */ - *last_obj_ptr = obj_desc->region.next; - obj_desc->region.next = NULL; /* Must clear field */ + *last_obj_ptr = obj_desc->region.link; /* * Now stop region accesses by executing the _REG method @@ -531,6 +457,12 @@ ®ion_context); /* + * Save the returned context (It is the original context + * passed into Install) + */ + handler_obj->addr_handler.context = region_context; + + /* * Init routine may fail, Just ignore errors */ @@ -555,8 +487,8 @@ /* * Move through the linked list of handlers */ - last_obj_ptr = &obj_desc->region.next; - obj_desc = obj_desc->region.next; + last_obj_ptr = &obj_desc->region.link; + obj_desc = obj_desc->region.link; } /* @@ -581,10 +513,9 @@ ******************************************************************************/ ACPI_STATUS -acpi_ev_associate_region_and_handler ( - ACPI_OPERAND_OBJECT *handler_obj, - ACPI_OPERAND_OBJECT *region_obj, - u8 acpi_ns_is_locked) +acpi_ev_associate_region_and_handler( + ACPI_OBJECT_INTERNAL *handler_obj, + ACPI_OBJECT_INTERNAL *region_obj) { ACPI_STATUS status; @@ -596,7 +527,7 @@ * Link this region to the front of the handler's list */ - region_obj->region.next = handler_obj->addr_handler.region_list; + region_obj->region.link = handler_obj->addr_handler.region_list; handler_obj->addr_handler.region_list = region_obj; /* @@ -613,15 +544,9 @@ /* * Last thing, tell all users that this region is usable */ - if (acpi_ns_is_locked) { - acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - } - + acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); status = acpi_ev_execute_reg_method (region_obj, 1); - - if (acpi_ns_is_locked) { - acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - } + acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); return (status); } @@ -631,7 +556,7 @@ * * FUNCTION: Acpi_ev_addr_handler_helper * - * PARAMETERS: Handle - Node to be dumped + * PARAMETERS: Handle - Entry to be dumped * Level - Nesting level of the handle * Context - Passed into Acpi_ns_walk_namespace * @@ -653,14 +578,14 @@ void *context, void **return_value) { - ACPI_OPERAND_OBJECT *handler_obj; - ACPI_OPERAND_OBJECT *tmp_obj; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_NAMESPACE_NODE *node; + ACPI_OBJECT_INTERNAL *handler_obj; + ACPI_OBJECT_INTERNAL *tmp_obj; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_NAMED_OBJECT *obj_entry; ACPI_STATUS status; - handler_obj = (ACPI_OPERAND_OBJECT *) context; + handler_obj = (ACPI_OBJECT_INTERNAL *) context; /* Parameter validation */ @@ -670,8 +595,8 @@ /* Convert and validate the device handle */ - node = acpi_ns_convert_handle_to_entry (obj_handle); - if (!node) { + obj_entry = acpi_ns_convert_handle_to_entry (obj_handle); + if (!obj_entry) { return (AE_BAD_PARAMETER); } @@ -680,16 +605,16 @@ * that can have address handlers */ - if ((node->type != ACPI_TYPE_DEVICE) && - (node->type != ACPI_TYPE_REGION) && - (node != acpi_gbl_root_node)) + if ((obj_entry->type != ACPI_TYPE_DEVICE) && + (obj_entry->type != ACPI_TYPE_REGION) && + (obj_entry != acpi_gbl_root_object)) { return (AE_OK); } /* Check for an existing internal object */ - obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node); + obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) obj_entry); if (!obj_desc) { /* * The object DNE, we don't care about it @@ -727,7 +652,7 @@ /* * Move through the linked list of handlers */ - tmp_obj = tmp_obj->addr_handler.next; + tmp_obj = tmp_obj->addr_handler.link; } /* @@ -762,7 +687,7 @@ /* * Then connect the region to the new handler */ - status = acpi_ev_associate_region_and_handler (handler_obj, obj_desc, FALSE); + status = acpi_ev_associate_region_and_handler (handler_obj, obj_desc); return (status); } diff -urN linux-2.4.0-test9/drivers/acpi/events/evrgnini.c linux-2.4.0-test9-lia/drivers/acpi/events/evrgnini.c --- linux-2.4.0-test9/drivers/acpi/events/evrgnini.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/events/evrgnini.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: evrgnini- ACPI Address_space / Op_region init - * $Revision: 22 $ * *****************************************************************************/ @@ -25,13 +24,13 @@ #include "acpi.h" -#include "acevents.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "events.h" +#include "namesp.h" +#include "interp.h" #include "amlcode.h" #define _COMPONENT EVENT_HANDLING - MODULE_NAME ("evrgnini") + MODULE_NAME ("evrgnini"); /***************************************************************************** @@ -41,8 +40,8 @@ * PARAMETERS: Region_obj - region we are interested in * Function - start or stop * Handler_context - Address space handler context - * Region_context - Region specific context - * + * Returned context - context to be used with each call to the + * handler for this region * RETURN: Status * * DESCRIPTION: Do any prep work for region handling, a nop for now @@ -54,17 +53,21 @@ ACPI_HANDLE handle, u32 function, void *handler_context, - void **region_context) + void **return_context) { - ACPI_OPERAND_OBJECT *region_obj = (ACPI_OPERAND_OBJECT *) handle; + MEM_HANDLER_CONTEXT *mem_context; + ACPI_OBJECT_INTERNAL *region_obj = (ACPI_OBJECT_INTERNAL *) handle; if (function == ACPI_REGION_DEACTIVATE) { - region_obj->region.flags &= ~(AOPOBJ_INITIALIZED); + region_obj->region.region_flags &= ~(REGION_INITIALIZED); + + *return_context = NULL; + if (handler_context) { + mem_context = handler_context; + *return_context = mem_context->handler_context; - if (*region_context) { - acpi_cm_free (*region_context); - *region_context = NULL; + acpi_cm_free (mem_context); } return (AE_OK); } @@ -72,15 +75,17 @@ /* Activate. Create a new context */ - *region_context = acpi_cm_callocate (sizeof (MEM_HANDLER_CONTEXT)); - if (!(*region_context)) { + mem_context = acpi_cm_callocate (sizeof (MEM_HANDLER_CONTEXT)); + if (!mem_context) { return (AE_NO_MEMORY); } /* Init. (Mapping fields are all set to zeros above) */ - region_obj->region.flags |= AOPOBJ_INITIALIZED; + mem_context->handler_context = handler_context; + region_obj->region.region_flags |= REGION_INITIALIZED; + *return_context = mem_context; return (AE_OK); } @@ -92,8 +97,8 @@ * PARAMETERS: Region_obj - region we are interested in * Function - start or stop * Handler_context - Address space handler context - * Region_context - Region specific context - * + * Returned context - context to be used with each call to the + * handler for this region * RETURN: Status * * DESCRIPTION: Do any prep work for region handling @@ -105,19 +110,22 @@ ACPI_HANDLE handle, u32 function, void *handler_context, - void **region_context) + void **return_context) { - ACPI_OPERAND_OBJECT *region_obj = (ACPI_OPERAND_OBJECT *) handle; + ACPI_OBJECT_INTERNAL *region_obj = (ACPI_OBJECT_INTERNAL *) handle; + if (function == ACPI_REGION_DEACTIVATE) { - *region_context = NULL; - region_obj->region.flags &= ~(AOPOBJ_INITIALIZED); - } - else { - *region_context = handler_context; - region_obj->region.flags |= AOPOBJ_INITIALIZED; + region_obj->region.region_flags &= ~(REGION_INITIALIZED); + *return_context = handler_context; + return (AE_OK); } + /* Activate the region */ + + region_obj->region.region_flags |= REGION_INITIALIZED; + *return_context = handler_context; + return (AE_OK); } @@ -129,8 +137,8 @@ * PARAMETERS: Region_obj - region we are interested in * Function - start or stop * Handler_context - Address space handler context - * Region_context - Region specific context - * + * Returned context - context to be used with each call to the + * handler for this region * RETURN: Status * * DESCRIPTION: Do any prep work for region handling @@ -144,14 +152,14 @@ ACPI_HANDLE handle, u32 function, void *handler_context, - void **region_context) + void **return_context) { ACPI_STATUS status = AE_OK; u32 temp; - PCI_HANDLER_CONTEXT *pci_context = *region_context; - ACPI_OPERAND_OBJECT *handler_obj; - ACPI_NAMESPACE_NODE *node; - ACPI_OPERAND_OBJECT *region_obj = (ACPI_OPERAND_OBJECT *) handle; + PCI_HANDLER_CONTEXT *pci_context; + ACPI_OBJECT_INTERNAL *handler_obj; + ACPI_NAMED_OBJECT *search_scope; + ACPI_OBJECT_INTERNAL *region_obj = (ACPI_OBJECT_INTERNAL *) handle; handler_obj = region_obj->region.addr_handler; @@ -165,11 +173,14 @@ } if (function == ACPI_REGION_DEACTIVATE) { - region_obj->region.flags &= ~(AOPOBJ_INITIALIZED); + region_obj->region.region_flags &= ~(REGION_INITIALIZED); + + *return_context = NULL; + if (handler_context) { + pci_context = handler_context; + *return_context = pci_context->handler_context; - if (pci_context) { acpi_cm_free (pci_context); - *region_context = NULL; } return (status); @@ -178,7 +189,7 @@ /* Create a new context */ - pci_context = acpi_cm_callocate (sizeof(PCI_HANDLER_CONTEXT)); + pci_context = acpi_cm_allocate (sizeof(PCI_HANDLER_CONTEXT)); if (!pci_context) { return (AE_NO_MEMORY); } @@ -192,16 +203,16 @@ * First get device and function numbers from the _ADR object * in the parent's scope. */ - ACPI_ASSERT(region_obj->region.node); + ACPI_ASSERT(region_obj->region.nte); - node = acpi_ns_get_parent_object (region_obj->region.node); + search_scope = acpi_ns_get_parent_entry (region_obj->region.nte); acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); /* Acpi_evaluate the _ADR object */ - status = acpi_cm_evaluate_numeric_object (METHOD_NAME__ADR, node, &temp); + status = acpi_cm_evaluate_numeric_object (METHOD_NAME__ADR, search_scope, &temp); /* * The default is zero, since the allocation above zeroed the data, just * do nothing on failures. @@ -221,9 +232,9 @@ * This is the device the handler has been registered to handle. */ - node = handler_obj->addr_handler.node; + search_scope = handler_obj->addr_handler.nte; - status = acpi_cm_evaluate_numeric_object (METHOD_NAME__SEG, node, &temp); + status = acpi_cm_evaluate_numeric_object (METHOD_NAME__SEG, search_scope, &temp); if (ACPI_SUCCESS (status)) { /* * Got it.. @@ -231,7 +242,7 @@ pci_context->seg = temp; } - status = acpi_cm_evaluate_numeric_object (METHOD_NAME__BBN, node, &temp); + status = acpi_cm_evaluate_numeric_object (METHOD_NAME__BBN, search_scope, &temp); if (ACPI_SUCCESS (status)) { /* * Got it.. @@ -239,12 +250,11 @@ pci_context->bus = temp; } - *region_context = pci_context; - acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - region_obj->region.flags |= AOPOBJ_INITIALIZED; + *return_context = pci_context; + region_obj->region.region_flags |= REGION_INITIALIZED; return (AE_OK); } @@ -256,8 +266,8 @@ * PARAMETERS: Region_obj - region we are interested in * Function - start or stop * Handler_context - Address space handler context - * Region_context - Region specific context - * + * Returned context - context to be used with each call to the + * handler for this region * RETURN: Status * * DESCRIPTION: Do any prep work for region handling @@ -269,18 +279,18 @@ ACPI_HANDLE handle, u32 function, void *handler_context, - void **region_context) + void **return_context) { - ACPI_OPERAND_OBJECT *region_obj = (ACPI_OPERAND_OBJECT *) handle; + ACPI_OBJECT_INTERNAL *region_obj = (ACPI_OBJECT_INTERNAL *) handle; if (function == ACPI_REGION_DEACTIVATE) { - *region_context = NULL; - region_obj->region.flags &= ~(AOPOBJ_INITIALIZED); + region_obj->region.region_flags &= ~(REGION_INITIALIZED); + *return_context = NULL; } else { - *region_context = handler_context; - region_obj->region.flags |= AOPOBJ_INITIALIZED; + region_obj->region.region_flags |= REGION_INITIALIZED; + *return_context = handler_context; } return (AE_OK); @@ -310,15 +320,15 @@ ACPI_STATUS acpi_ev_initialize_region ( - ACPI_OPERAND_OBJECT *region_obj, + ACPI_OBJECT_INTERNAL *region_obj, u8 acpi_ns_locked) { - ACPI_OPERAND_OBJECT *handler_obj; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *handler_obj; + ACPI_OBJECT_INTERNAL *obj_desc; u32 space_id; - ACPI_NAMESPACE_NODE *node; + ACPI_NAMED_OBJECT *entry; /* Namespace Object */ ACPI_STATUS status; - ACPI_NAMESPACE_NODE *method_node; + ACPI_NAMED_OBJECT *reg_entry; ACPI_NAME *reg_name_ptr = (ACPI_NAME *) METHOD_NAME__REG; @@ -326,44 +336,44 @@ return (AE_BAD_PARAMETER); } - ACPI_ASSERT(region_obj->region.node); + ACPI_ASSERT(region_obj->region.nte); - node = acpi_ns_get_parent_object (region_obj->region.node); + entry = acpi_ns_get_parent_entry (region_obj->region.nte); space_id = region_obj->region.space_id; region_obj->region.addr_handler = NULL; region_obj->region.REGmethod = NULL; - region_obj->region.flags &= ~(AOPOBJ_INITIALIZED); + region_obj->region.region_flags = INITIAL_REGION_FLAGS; /* * Find any "_REG" associated with this region definition */ - status = acpi_ns_search_node (*reg_name_ptr, node, - ACPI_TYPE_METHOD, &method_node); - if (ACPI_SUCCESS (status)) { + status = acpi_ns_search_one_scope (*reg_name_ptr, entry->child_table, + ACPI_TYPE_METHOD, ®_entry, NULL); + if (status == AE_OK) { /* * The _REG method is optional and there can be only one per region * definition. This will be executed when the handler is attached * or removed */ - region_obj->region.REGmethod = method_node; + region_obj->region.REGmethod = reg_entry; } /* - * The following loop depends upon the root Node having no parent - * ie: Acpi_gbl_Root_node->Parent_entry being set to NULL + * The following loop depends upon the root nte having no parent + * ie: Acpi_gbl_Root_object->Parent_entry being set to NULL */ - while (node) { + while (entry) { /* * Check to see if a handler exists */ handler_obj = NULL; - obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node); + obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) entry); if (obj_desc) { /* * can only be a handler if the object exists */ - switch (node->type) + switch (entry->type) { case ACPI_TYPE_DEVICE: @@ -390,11 +400,11 @@ /* * Found it! Now update the region and the handler */ - acpi_ev_associate_region_and_handler (handler_obj, region_obj, acpi_ns_locked); + acpi_ev_associate_region_and_handler(handler_obj, region_obj); return (AE_OK); } - handler_obj = handler_obj->addr_handler.next; + handler_obj = handler_obj->addr_handler.link; } /* while handlerobj */ } @@ -403,9 +413,9 @@ * This one does not have the handler we need * Pop up one level */ - node = acpi_ns_get_parent_object (node); + entry = acpi_ns_get_parent_entry (entry); - } /* while Node != ROOT */ + } /* while Entry != ROOT */ /* * If we get here, there is no handler for this region diff -urN linux-2.4.0-test9/drivers/acpi/events/evsci.c linux-2.4.0-test9-lia/drivers/acpi/events/evsci.c --- linux-2.4.0-test9/drivers/acpi/events/evsci.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/events/evsci.c Wed Jul 5 11:23:12 2000 @@ -1,10 +1,9 @@ -/******************************************************************************* +/****************************************************************************** * * Module Name: evsci - System Control Interrupt configuration and * legacy to ACPI mode state transition functions - * $Revision: 59 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -25,26 +24,27 @@ */ #include "acpi.h" -#include "acnamesp.h" -#include "achware.h" -#include "acevents.h" +#include "namesp.h" +#include "hardware.h" +#include "events.h" #define _COMPONENT EVENT_HANDLING - MODULE_NAME ("evsci") + MODULE_NAME ("evsci"); /* - * Elements correspond to counts for TMR, NOT_USED, GBL, PWR_BTN, SLP_BTN, RTC, - * and GENERAL respectively. These counts are modified by the ACPI interrupt - * handler. - * - * TBD: [Investigate] Note that GENERAL should probably be split out into - * one element for each bit in the GPE registers + * Elements correspond to counts for + * TMR, NOT_USED, GBL, PWR_BTN, SLP_BTN, RTC, + * and GENERAL respectively. These counts + * are modified by the ACPI interrupt handler... + * Note that GENERAL should probably be split out + * into one element for each bit in the GPE + * registers */ -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_ev_sci_handler * @@ -61,16 +61,16 @@ u32 acpi_ev_sci_handler (void *context) { - u32 interrupt_handled = INTERRUPT_NOT_HANDLED; - + u32 interrupt_handled = INTERRUPT_NOT_HANDLED; /* + * ACPI Enabled? + * ------------- * Make sure that ACPI is enabled by checking SCI_EN. Note that we are * required to treat the SCI interrupt as sharable, level, active low. */ - if (!acpi_hw_register_access (ACPI_READ, ACPI_MTX_DO_NOT_LOCK, SCI_EN)) { - /* ACPI is not enabled; this interrupt cannot be for us */ - + if (!acpi_hw_register_access (ACPI_READ, ACPI_MTX_DO_NOT_LOCK, (s32)SCI_EN)) { + REPORT_ERROR ("Received and SCI but ACPI is not enabled."); return (INTERRUPT_NOT_HANDLED); } @@ -107,12 +107,12 @@ u32 acpi_ev_install_sci_handler (void) { - u32 except = AE_OK; - + u32 except = AE_OK; - except = acpi_os_install_interrupt_handler ((u32) acpi_gbl_FACP->sci_int, - acpi_ev_sci_handler, - NULL); + except = acpi_os_install_interrupt_handler ( + (u32) acpi_gbl_FACP->sci_int, + acpi_ev_sci_handler, + NULL); return (except); } @@ -163,21 +163,24 @@ #endif - acpi_os_remove_interrupt_handler ((u32) acpi_gbl_FACP->sci_int, - acpi_ev_sci_handler); + acpi_os_remove_interrupt_handler ( + (u32) acpi_gbl_FACP->sci_int, + acpi_ev_sci_handler); return (AE_OK); } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_ev_sci_count * - * PARAMETERS: Event Event that generated an SCI. + * PARAMETERS: char * Event_name name (fully qualified name from namespace + * or one of the fixed event names defined above) + * of the event to check if it's generated an SCI. * - * RETURN: Number of SCI's for requested event since last time - * Sci_occured() was called for this event. + * RETURN: Number of SCI's for requested event since last time i_sci_occured() + * was called for this event. * * DESCRIPTION: Checks to see if SCI has been generated from requested source * since the last time this function was called. @@ -185,7 +188,7 @@ ******************************************************************************/ -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_ev_restore_acpi_state * @@ -200,7 +203,7 @@ void acpi_ev_restore_acpi_state (void) { - u32 index; + s32 index; /* Restore the state of the chipset enable bits. */ @@ -280,7 +283,6 @@ void acpi_ev_terminate (void) { - /* * Free global tables, etc. diff -urN linux-2.4.0-test9/drivers/acpi/events/evxface.c linux-2.4.0-test9-lia/drivers/acpi/events/evxface.c --- linux-2.4.0-test9/drivers/acpi/events/evxface.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/events/evxface.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: evxface - External interfaces for ACPI events - * $Revision: 88 $ * *****************************************************************************/ @@ -25,14 +24,14 @@ #include "acpi.h" -#include "achware.h" -#include "acnamesp.h" -#include "acevents.h" +#include "hardware.h" +#include "namesp.h" +#include "events.h" #include "amlcode.h" -#include "acinterp.h" +#include "interp.h" #define _COMPONENT EVENT_HANDLING - MODULE_NAME ("evxface") + MODULE_NAME ("evxface"); /****************************************************************************** @@ -173,9 +172,9 @@ NOTIFY_HANDLER handler, void *context) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *notify_obj; - ACPI_NAMESPACE_NODE *device_node; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *notify_obj; + ACPI_NAMED_OBJECT *obj_entry; ACPI_STATUS status = AE_OK; @@ -191,8 +190,8 @@ acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - device_node = acpi_ns_convert_handle_to_entry (device); - if (!device_node) { + obj_entry = acpi_ns_convert_handle_to_entry (device); + if (!obj_entry) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -218,13 +217,13 @@ } if (handler_type == ACPI_SYSTEM_NOTIFY) { - acpi_gbl_sys_notify.node = device_node; + acpi_gbl_sys_notify.nte = obj_entry; acpi_gbl_sys_notify.handler = handler; acpi_gbl_sys_notify.context = context; } else { - acpi_gbl_drv_notify.node = device_node; + acpi_gbl_drv_notify.nte = obj_entry; acpi_gbl_drv_notify.handler = handler; acpi_gbl_drv_notify.context = context; } @@ -240,10 +239,10 @@ * These are the ONLY objects that can receive ACPI notifications */ - if ((device_node->type != ACPI_TYPE_DEVICE) && - (device_node->type != ACPI_TYPE_PROCESSOR) && - (device_node->type != ACPI_TYPE_POWER) && - (device_node->type != ACPI_TYPE_THERMAL)) + if ((obj_entry->type != ACPI_TYPE_DEVICE) && + (obj_entry->type != ACPI_TYPE_PROCESSOR) && + (obj_entry->type != ACPI_TYPE_POWER) && + (obj_entry->type != ACPI_TYPE_THERMAL)) { status = AE_BAD_PARAMETER; goto unlock_and_exit; @@ -251,7 +250,7 @@ /* Check for an existing internal object */ - obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) device_node); + obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) obj_entry); if (obj_desc) { /* * The object exists. @@ -271,15 +270,15 @@ else { /* Create a new object */ - obj_desc = acpi_cm_create_internal_object (device_node->type); + obj_desc = acpi_cm_create_internal_object (obj_entry->type); if (!obj_desc) { status = AE_NO_MEMORY; goto unlock_and_exit; } - /* Attach new object to the Node */ + /* Attach new object to the NTE */ - status = acpi_ns_attach_object (device, obj_desc, (u8) device_node->type); + status = acpi_ns_attach_object (device, obj_desc, (u8) obj_entry->type); if (ACPI_FAILURE (status)) { goto unlock_and_exit; @@ -297,7 +296,7 @@ goto unlock_and_exit; } - notify_obj->notify_handler.node = device_node; + notify_obj->notify_handler.nte = obj_entry; notify_obj->notify_handler.handler = handler; notify_obj->notify_handler.context = context; @@ -338,9 +337,9 @@ u32 handler_type, NOTIFY_HANDLER handler) { - ACPI_OPERAND_OBJECT *notify_obj; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_NAMESPACE_NODE *device_node; + ACPI_OBJECT_INTERNAL *notify_obj; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_NAMED_OBJECT *obj_entry; ACPI_STATUS status = AE_OK; @@ -356,8 +355,8 @@ /* Convert and validate the device handle */ - device_node = acpi_ns_convert_handle_to_entry (device); - if (!device_node) { + obj_entry = acpi_ns_convert_handle_to_entry (device); + if (!obj_entry) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -366,10 +365,10 @@ * These are the ONLY objects that can receive ACPI notifications */ - if ((device_node->type != ACPI_TYPE_DEVICE) && - (device_node->type != ACPI_TYPE_PROCESSOR) && - (device_node->type != ACPI_TYPE_POWER) && - (device_node->type != ACPI_TYPE_THERMAL)) + if ((obj_entry->type != ACPI_TYPE_DEVICE) && + (obj_entry->type != ACPI_TYPE_PROCESSOR) && + (obj_entry->type != ACPI_TYPE_POWER) && + (obj_entry->type != ACPI_TYPE_THERMAL)) { status = AE_BAD_PARAMETER; goto unlock_and_exit; @@ -377,7 +376,7 @@ /* Check for an existing internal object */ - obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) device_node); + obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) obj_entry); if (!obj_desc) { status = AE_NOT_EXIST; goto unlock_and_exit; @@ -574,7 +573,7 @@ acpi_aml_exit_interpreter (); *out_handle = 0; - return (status); + return status; } @@ -599,7 +598,7 @@ /* TBD: [Restructure] Validate handle */ acpi_ev_release_global_lock (); - return (AE_OK); + return AE_OK; } diff -urN linux-2.4.0-test9/drivers/acpi/events/evxfevnt.c linux-2.4.0-test9-lia/drivers/acpi/events/evxfevnt.c --- linux-2.4.0-test9/drivers/acpi/events/evxfevnt.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/events/evxfevnt.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: evxfevnt - External Interfaces, ACPI event disable/enable - * $Revision: 19 $ * *****************************************************************************/ @@ -25,24 +24,16 @@ #include "acpi.h" -#include "achware.h" -#include "acnamesp.h" -#include "acevents.h" +#include "hardware.h" +#include "namesp.h" +#include "events.h" #include "amlcode.h" -#include "acinterp.h" +#include "interp.h" #define _COMPONENT EVENT_HANDLING - MODULE_NAME ("evxfevnt") + MODULE_NAME ("evxfevnt"); -ACPI_STATUS -acpi_ev_find_pci_root_buses ( - void); - -ACPI_STATUS -acpi_ev_init_devices ( - void); - /************************************************************************** * * FUNCTION: Acpi_enable @@ -69,27 +60,12 @@ return (AE_NO_ACPI_TABLES); } - /* Init the hardware */ - - /* - * With the advent of a 3-pass parser, we need to be - * prepared to execute on initialized HW before the - * namespace has completed its load. - */ - - status = acpi_cm_hardware_initialize (); - if (ACPI_FAILURE (status)) { - return (status); - } - - /* Make sure the BIOS supports ACPI mode */ if (SYS_MODE_LEGACY == acpi_hw_get_mode_capabilities()) { return (AE_ERROR); } - acpi_gbl_original_mode = acpi_hw_get_mode(); /* @@ -98,28 +74,24 @@ * before handers are installed. */ - status = acpi_ev_fixed_event_initialize (); - if (ACPI_FAILURE (status)) { - return (status); + if (ACPI_FAILURE (acpi_ev_fixed_event_initialize ())) { + return (AE_ERROR); } - status = acpi_ev_gpe_initialize (); - if (ACPI_FAILURE (status)) { - return (status); + if (ACPI_FAILURE (acpi_ev_gpe_initialize())) { + return (AE_ERROR); } /* Install the SCI handler */ - status = acpi_ev_install_sci_handler (); - if (ACPI_FAILURE (status)) { - return (status); + if (ACPI_FAILURE (acpi_ev_install_sci_handler ())) { + return (AE_ERROR); } /* Transition to ACPI mode */ - status = acpi_hw_set_mode (SYS_MODE_ACPI); - if (ACPI_FAILURE (status)) { - return (status); + if (AE_OK != acpi_hw_set_mode (SYS_MODE_ACPI)) { + return (AE_ERROR); } /* Install handlers for control method GPE handlers (_Lxx, _Exx) */ @@ -128,26 +100,6 @@ status = acpi_ev_init_global_lock_handler (); - /* - * Perform additional initialization that may cause control methods - * to be executed - * - * It may be wise to move this code to a new interface - */ - - - /* - * Install PCI config space handler for all PCI root bridges. A PCI root - * bridge is found by searching for devices containing a HID with the value - * EISAID("PNP0A03") - */ - - acpi_ev_find_pci_root_buses (); - - /* Call _INI on all devices */ - - acpi_ev_init_devices (); - return (status); } @@ -168,14 +120,12 @@ ACPI_STATUS acpi_disable (void) { - ACPI_STATUS status; /* Restore original mode */ - status = acpi_hw_set_mode (acpi_gbl_original_mode); - if (ACPI_FAILURE (status)) { - return (status); + if (AE_OK != acpi_hw_set_mode (acpi_gbl_original_mode)) { + return (AE_ERROR); } /* Unload the SCI interrupt handler */ @@ -183,7 +133,7 @@ acpi_ev_remove_sci_handler (); acpi_ev_restore_acpi_state (); - return (status); + return (AE_OK); } diff -urN linux-2.4.0-test9/drivers/acpi/events/evxfregn.c linux-2.4.0-test9-lia/drivers/acpi/events/evxfregn.c --- linux-2.4.0-test9/drivers/acpi/events/evxfregn.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/events/evxfregn.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ * * Module Name: evxfregn - External Interfaces, ACPI Operation Regions and * Address Spaces. - * $Revision: 20 $ * *****************************************************************************/ @@ -26,14 +25,14 @@ #include "acpi.h" -#include "achware.h" -#include "acnamesp.h" -#include "acevents.h" +#include "hardware.h" +#include "namesp.h" +#include "events.h" #include "amlcode.h" -#include "acinterp.h" +#include "interp.h" #define _COMPONENT EVENT_HANDLING - MODULE_NAME ("evxfregn") + MODULE_NAME ("evxfregn"); /****************************************************************************** @@ -60,9 +59,9 @@ ADDRESS_SPACE_SETUP setup, void *context) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *handler_obj; - ACPI_NAMESPACE_NODE *node; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *handler_obj; + ACPI_NAMED_OBJECT *obj_entry; ACPI_STATUS status = AE_OK; OBJECT_TYPE_INTERNAL type; u16 flags = 0; @@ -81,8 +80,8 @@ /* Convert and validate the device handle */ - node = acpi_ns_convert_handle_to_entry (device); - if (!node) { + obj_entry = acpi_ns_convert_handle_to_entry (device); + if (!obj_entry) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -93,10 +92,10 @@ * get placed. */ - if ((node->type != ACPI_TYPE_DEVICE) && - (node->type != ACPI_TYPE_PROCESSOR) && - (node->type != ACPI_TYPE_THERMAL) && - (node != acpi_gbl_root_node)) + if ((obj_entry->type != ACPI_TYPE_DEVICE) && + (obj_entry->type != ACPI_TYPE_PROCESSOR) && + (obj_entry->type != ACPI_TYPE_THERMAL) && + (obj_entry != acpi_gbl_root_object)) { status = AE_BAD_PARAMETER; goto unlock_and_exit; @@ -140,7 +139,7 @@ * Check for an existing internal object */ - obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node); + obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) obj_entry); if (obj_desc) { /* * The object exists. @@ -163,19 +162,19 @@ /* * Move through the linked list of handlers */ - handler_obj = handler_obj->addr_handler.next; + handler_obj = handler_obj->addr_handler.link; } } else { /* Obj_desc does not exist, create one */ - if (node->type == ACPI_TYPE_ANY) { + if (obj_entry->type == ACPI_TYPE_ANY) { type = ACPI_TYPE_DEVICE; } else { - type = node->type; + type = obj_entry->type; } obj_desc = acpi_cm_create_internal_object (type); @@ -188,13 +187,19 @@ obj_desc->common.type = (u8) type; - /* Attach the new object to the Node */ + /* Attach the new object to the NTE */ status = acpi_ns_attach_object (device, obj_desc, (u8) type); if (ACPI_FAILURE (status)) { acpi_cm_remove_reference (obj_desc); goto unlock_and_exit; } + + /* TBD: [Investigate] Will this always be of type DEVICE? */ + + if (type == ACPI_TYPE_DEVICE) { + obj_desc->device.handle = device; + } } /* @@ -210,11 +215,11 @@ goto unlock_and_exit; } - handler_obj->addr_handler.space_id = (u8) space_id; + handler_obj->addr_handler.space_id = (u16) space_id; handler_obj->addr_handler.hflags = flags; - handler_obj->addr_handler.next = obj_desc->device.addr_handler; + handler_obj->addr_handler.link = obj_desc->device.addr_handler; handler_obj->addr_handler.region_list = NULL; - handler_obj->addr_handler.node = node; + handler_obj->addr_handler.nte = obj_entry; handler_obj->addr_handler.handler = handler; handler_obj->addr_handler.context = context; handler_obj->addr_handler.setup = setup; @@ -232,7 +237,7 @@ * of the branch */ status = acpi_ns_walk_namespace (ACPI_TYPE_ANY, device, - ACPI_UINT32_MAX, NS_WALK_UNLOCK, + ACPI_INT32_MAX, NS_WALK_NO_UNLOCK, acpi_ev_addr_handler_helper, handler_obj, NULL); @@ -271,11 +276,11 @@ ACPI_ADDRESS_SPACE_TYPE space_id, ADDRESS_SPACE_HANDLER handler) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *handler_obj; - ACPI_OPERAND_OBJECT *region_obj; - ACPI_OPERAND_OBJECT **last_obj_ptr; - ACPI_NAMESPACE_NODE *node; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *handler_obj; + ACPI_OBJECT_INTERNAL *region_obj; + ACPI_OBJECT_INTERNAL **last_obj_ptr; + ACPI_NAMED_OBJECT *obj_entry; ACPI_STATUS status = AE_OK; @@ -292,8 +297,8 @@ /* Convert and validate the device handle */ - node = acpi_ns_convert_handle_to_entry (device); - if (!node) { + obj_entry = acpi_ns_convert_handle_to_entry (device); + if (!obj_entry) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -301,7 +306,7 @@ /* Make sure the internal object exists */ - obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node); + obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) obj_entry); if (!obj_desc) { /* * The object DNE. @@ -351,7 +356,7 @@ /* * Remove this Handler object from the list */ - *last_obj_ptr = handler_obj->addr_handler.next; + *last_obj_ptr = handler_obj->addr_handler.link; /* * Now we can delete the handler object @@ -365,8 +370,8 @@ /* * Move through the linked list of handlers */ - last_obj_ptr = &handler_obj->addr_handler.next; - handler_obj = handler_obj->addr_handler.next; + last_obj_ptr = &handler_obj->addr_handler.link; + handler_obj = handler_obj->addr_handler.link; } diff -urN linux-2.4.0-test9/drivers/acpi/hardware/Makefile linux-2.4.0-test9-lia/drivers/acpi/hardware/Makefile --- linux-2.4.0-test9/drivers/acpi/hardware/Makefile Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/hardware/Makefile Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -SUB_DIRS := -MOD_SUB_DIRS := $(SUB_DIRS) -MOD_IN_SUB_DIRS := -ALL_SUB_DIRS := $(SUB_DIRS) - -O_TARGET := ../$(shell basename `pwd`).o -O_OBJS := -M_OBJS := - -ACPI_OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) - -EXTRA_CFLAGS += -I../include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) - -# if the interpreter is used, it overrides arch/i386/kernel/acpi.c -ifeq ($(CONFIG_ACPI_INTERPRETER),y) - O_OBJS := $(ACPI_OBJS) -endif - -include $(TOPDIR)/Rules.make - -clean: - $(RM) *.o diff -urN linux-2.4.0-test9/drivers/acpi/hardware/hwacpi.c linux-2.4.0-test9-lia/drivers/acpi/hardware/hwacpi.c --- linux-2.4.0-test9/drivers/acpi/hardware/hwacpi.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/hardware/hwacpi.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: hwacpi - ACPI hardware functions - mode and timer - * $Revision: 22 $ * *****************************************************************************/ @@ -25,11 +25,11 @@ #include "acpi.h" -#include "achware.h" +#include "hardware.h" #define _COMPONENT HARDWARE - MODULE_NAME ("hwacpi") + MODULE_NAME ("hwacpi"); /****************************************************************************** @@ -95,7 +95,7 @@ { - if (acpi_hw_register_access (ACPI_READ, ACPI_MTX_LOCK, SCI_EN)) { + if (acpi_hw_register_access (ACPI_READ, ACPI_MTX_LOCK, (s32)SCI_EN)) { return (SYS_MODE_ACPI); } else { diff -urN linux-2.4.0-test9/drivers/acpi/hardware/hwcpu32.c linux-2.4.0-test9-lia/drivers/acpi/hardware/hwcpu32.c --- linux-2.4.0-test9/drivers/acpi/hardware/hwcpu32.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/hardware/hwcpu32.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Name: hwcpu32.c - CPU support for IA32 (Throttling, Cx_states) - * $Revision: 33 $ * *****************************************************************************/ @@ -24,11 +23,11 @@ */ #include "acpi.h" -#include "acnamesp.h" -#include "achware.h" +#include "namesp.h" +#include "hardware.h" #define _COMPONENT HARDWARE - MODULE_NAME ("Hwcpu32") + MODULE_NAME ("Hwcpu32"); #define BIT_4 0x10 /* TBD: [investigate] is this correct? */ @@ -83,7 +82,7 @@ *pm_timer_ticks = timer; } - return (AE_OK); + return AE_OK; } @@ -109,7 +108,7 @@ if (!pblk_address || !pm_timer_ticks) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } /* @@ -147,7 +146,7 @@ */ enable (); - return (AE_OK); + return AE_OK; } @@ -176,7 +175,7 @@ if (!pblk_address || !pm_timer_ticks) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } /* @@ -187,14 +186,14 @@ * eventually cause a demotion to C2 */ if (1 == (bus_master_status = - acpi_hw_register_access (ACPI_READ, ACPI_MTX_LOCK, BM_STS))) + acpi_hw_register_access (ACPI_READ, ACPI_MTX_LOCK, (s32)BM_STS))) { /* * Clear the BM_STS bit by setting it. */ - acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_LOCK, BM_STS, 1); + acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_LOCK, (s32)BM_STS, 1); *pm_timer_ticks = 0; - return (AE_OK); + return AE_OK; } /* @@ -254,7 +253,7 @@ */ enable(); - return (AE_OK); + return AE_OK; } @@ -278,7 +277,7 @@ { if (!acpi_hw_cx_handlers[acpi_hw_active_cx_state]) { - return (AE_SUPPORT); + return AE_SUPPORT; } return (acpi_hw_cx_handlers[acpi_hw_active_cx_state] (pblk_address, pm_timer_ticks)); @@ -306,11 +305,11 @@ * ---------------- */ if ((cx_state < 1) || (cx_state > 3)) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } if (!acpi_hw_cx_handlers[cx_state]) { - return (AE_SUPPORT); + return AE_SUPPORT; } /* @@ -319,7 +318,7 @@ * We only care when moving from one state to another... */ if (acpi_hw_active_cx_state == cx_state) { - return (AE_OK); + return AE_OK; } /* @@ -332,7 +331,7 @@ switch (cx_state) { case 3: - acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_LOCK, BM_RLD, 1); + acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_LOCK, (s32)BM_RLD, 1); break; } @@ -346,7 +345,7 @@ switch (acpi_hw_active_cx_state) { case 3: - acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_LOCK, BM_RLD, 0); + acpi_hw_register_access (ACPI_WRITE, ACPI_MTX_LOCK, (s32)BM_RLD, 0); break; } @@ -356,7 +355,7 @@ */ acpi_hw_active_cx_state = cx_state; - return (AE_OK); + return AE_OK; } @@ -527,7 +526,7 @@ result = result * x; } - return (result); + return result; } diff -urN linux-2.4.0-test9/drivers/acpi/hardware/hwgpe.c linux-2.4.0-test9-lia/drivers/acpi/hardware/hwgpe.c --- linux-2.4.0-test9/drivers/acpi/hardware/hwgpe.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/hardware/hwgpe.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: hwgpe - Low level GPE enable/disable/clear functions - * $Revision: 22 $ * *****************************************************************************/ @@ -24,12 +23,12 @@ */ #include "acpi.h" -#include "achware.h" -#include "acnamesp.h" -#include "acevents.h" +#include "hardware.h" +#include "namesp.h" +#include "events.h" #define _COMPONENT HARDWARE - MODULE_NAME ("hwgpe") + MODULE_NAME ("hwgpe"); u8 decode_to8bit [8] = {1,2,4,8,16,32,64,128}; diff -urN linux-2.4.0-test9/drivers/acpi/hardware/hwregs.c linux-2.4.0-test9-lia/drivers/acpi/hardware/hwregs.c --- linux-2.4.0-test9/drivers/acpi/hardware/hwregs.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/hardware/hwregs.c Wed Jul 5 11:23:12 2000 @@ -1,11 +1,10 @@ -/******************************************************************************* +/****************************************************************************** * * Module Name: hwregs - Read/write access functions for the various ACPI * control and status registers. - * $Revision: 67 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -27,20 +26,20 @@ #include "acpi.h" -#include "achware.h" -#include "acnamesp.h" +#include "hardware.h" +#include "namesp.h" #define _COMPONENT HARDWARE - MODULE_NAME ("hwregs") + MODULE_NAME ("hwregs"); /* This matches the #defines in actypes.h. */ -NATIVE_CHAR *sleep_state_table[] = {"\\_S0_","\\_S1_","\\_S2_","\\_S3_", +ACPI_STRING sleep_state_table[] = {"\\_S0_","\\_S1_","\\_S2_","\\_S3_", "\\_S4_","\\_S4_b","\\_S5_"}; -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_hw_get_bit_shift * @@ -53,11 +52,11 @@ * ******************************************************************************/ -u32 +s32 acpi_hw_get_bit_shift ( u32 mask) { - u32 shift; + s32 shift; for (shift = 0; ((mask >> shift) & 1) == 0; shift++) { ; } @@ -66,7 +65,7 @@ } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_hw_clear_acpi_status * @@ -117,7 +116,7 @@ } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_hw_obtain_sleep_type_register_data * @@ -130,7 +129,8 @@ * DESCRIPTION: Acpi_hw_obtain_sleep_type_register_data() obtains the SLP_TYP and * SLP_TYPb values for the sleep state requested. * - ******************************************************************************/ + + ***************************************************************************/ ACPI_STATUS acpi_hw_obtain_sleep_type_register_data ( @@ -139,7 +139,7 @@ u8 *slp_typ_b) { ACPI_STATUS status = AE_OK; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; /* @@ -157,64 +157,45 @@ */ status = acpi_ns_evaluate_by_name (sleep_state_table[sleep_state], NULL, &obj_desc); - if (ACPI_FAILURE (status)) { - return (status); - } - - if (!obj_desc) { - REPORT_ERROR ("Missing Sleep State object"); - return (AE_NOT_EXIST); - } - - /* - * We got something, now ensure it is correct. The object must - * be a package and must have at least 2 numeric values as the - * two elements - */ - - if (obj_desc->common.type != ACPI_TYPE_PACKAGE) { - /* Must be a package */ - - REPORT_ERROR ("Sleep State object is not of type Package"); - status = AE_ERROR; - } - - else if (obj_desc->package.count < 2) { - /* Must have at least two elements */ - - REPORT_ERROR ("Sleep State package does not have at least two elements"); - status = AE_ERROR; - } + if (AE_OK == status) { + if (obj_desc) { + /* + * We got something, now ensure it is correct. The object must + * be a package and must have at least 2 numeric values as the + * two elements + */ - else if (((obj_desc->package.elements[0])->common.type != - ACPI_TYPE_NUMBER) || - ((obj_desc->package.elements[1])->common.type != - ACPI_TYPE_NUMBER)) - { - /* Must have two */ + if ((obj_desc->common.type != ACPI_TYPE_PACKAGE) || + ((obj_desc->package.elements[0])->common.type != + ACPI_TYPE_NUMBER) || + ((obj_desc->package.elements[1])->common.type != + ACPI_TYPE_NUMBER)) + { + /* Invalid _Sx_ package type or value */ - REPORT_ERROR ("Sleep State package elements are not both of type Number"); - status = AE_ERROR; - } + REPORT_ERROR ("Object type returned from interpreter differs from expected value"); + status = AE_ERROR; + } + else { + /* + * Valid _Sx_ package size, type, and value + */ + *slp_typ_a = + (u8) (obj_desc->package.elements[0])->number.value; - else { - /* - * Valid _Sx_ package size, type, and value - */ - *slp_typ_a = (u8) (obj_desc->package.elements[0])->number.value; + *slp_typ_b = + (u8) (obj_desc->package.elements[1])->number.value; + } - *slp_typ_b = (u8) (obj_desc->package.elements[1])->number.value; + acpi_cm_remove_reference (obj_desc); + } } - - - acpi_cm_remove_reference (obj_desc); - return (status); } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_hw_register_access * @@ -248,7 +229,7 @@ va_list marker; va_start (marker, register_id); - value = va_arg (marker, u32); + value = va_arg (marker, s32); va_end (marker); } @@ -426,7 +407,7 @@ register_value = (u32) acpi_os_in16 (acpi_gbl_FACP->pm1a_cnt_blk); } - if (acpi_gbl_FACP->pm1b_cnt_blk && register_id != (u32) SLP_TYPE_A) { + if (acpi_gbl_FACP->pm1b_cnt_blk && register_id != (s32) SLP_TYPE_A) { register_value |= (u32) acpi_os_in16 (acpi_gbl_FACP->pm1b_cnt_blk); } @@ -488,7 +469,7 @@ } } - if (acpi_gbl_FACP->pm1b_cnt_blk && register_id != (u32) SLP_TYPE_A) { + if (acpi_gbl_FACP->pm1b_cnt_blk && register_id != (s32) SLP_TYPE_A) { acpi_os_out16 (acpi_gbl_FACP->pm1b_cnt_blk, (u16) register_value); } } @@ -570,17 +551,13 @@ mask = (((u32) register_id) & BIT_IN_REGISTER_MASK); mask = 1 << (mask-1); - /* - * The base address of the GPE 0 Register Block - * Plus 1/2 the length of the GPE 0 Register Block - * The enable register is the register following the Status Register - * and each register is defined as 1/2 of the total Register Block - */ - - /* - * This sets the bit within Enable_bit that needs to be written to - * the register indicated in Mask to a 1, all others are 0 - */ + /* The base address of the GPE 0 Register Block */ + /* Plus 1/2 the length of the GPE 0 Register Block */ + /* The enable register is the register following the Status Register */ + /* and each register is defined as 1/2 of the total Register Block */ + + /* This sets the bit within Enable_bit that needs to be written to */ + /* the register indicated in Mask to a 1, all others are 0 */ if (mask > LOW_BYTE) { /* Shift the value 1 byte to the right and add 1 to the register */ diff -urN linux-2.4.0-test9/drivers/acpi/hardware/hwxface.c linux-2.4.0-test9-lia/drivers/acpi/hardware/hwxface.c --- linux-2.4.0-test9/drivers/acpi/hardware/hwxface.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/hardware/hwxface.c Thu Aug 24 18:16:02 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Name: hwxface.c - Hardware access external interfaces - * $Revision: 31 $ * *****************************************************************************/ @@ -25,11 +24,11 @@ */ #include "acpi.h" -#include "acnamesp.h" -#include "achware.h" +#include "namesp.h" +#include "hardware.h" #define _COMPONENT HARDWARE - MODULE_NAME ("hwxface") + MODULE_NAME ("hwxface"); /****************************************************************************** @@ -69,9 +68,12 @@ NATIVE_UINT num_throttle_states; NATIVE_UINT buffer_space_needed; NATIVE_UINT i; +#ifndef _IA64 + u8 duty_offset = 0; +#endif u8 duty_width = 0; - ACPI_NAMESPACE_NODE *cpu_node; - ACPI_OPERAND_OBJECT *cpu_obj; + ACPI_NAMED_OBJECT *cpu_entry; + ACPI_OBJECT_INTERNAL *cpu_obj; ACPI_CPU_THROTTLING_STATE *state_ptr; @@ -86,8 +88,8 @@ * Convert and validate the device handle */ - cpu_node = acpi_ns_convert_handle_to_entry (processor_handle); - if (!cpu_node) { + cpu_entry = acpi_ns_convert_handle_to_entry (processor_handle); + if (!cpu_entry) { return (AE_BAD_PARAMETER); } @@ -95,27 +97,24 @@ * Check for an existing internal object */ - cpu_obj = acpi_ns_get_attached_object ((ACPI_HANDLE) cpu_node); + cpu_obj = acpi_ns_get_attached_object ((ACPI_HANDLE) cpu_entry); if (!cpu_obj) { return (AE_NOT_FOUND); } -#ifndef _IA64 - /* - * No Duty fields in IA64 tables - */ +#ifndef _IA64 + duty_offset = acpi_gbl_FACP->duty_offset; duty_width = acpi_gbl_FACP->duty_width; #endif - /* * P0 must always have a P_BLK all others may be null - * in either case, we can't throttle a processor that has no P_BLK + * in either case, we can't thottle a processor that has no P_BLK * * Also if no Duty width, one state and it is 100% * */ - if (!cpu_obj->processor.length || !duty_width || - (0xFFFF < cpu_obj->processor.address)) + if (!cpu_obj->processor.pblk_length || !duty_width || + (0xFFFF < cpu_obj->processor.pblk_address)) { /* * Acpi_even though we can't throttle, we still have one state (100%) @@ -173,32 +172,29 @@ ACPI_HANDLE processor_handle, u32 *throttle_state) { - ACPI_NAMESPACE_NODE *cpu_node; - ACPI_OPERAND_OBJECT *cpu_obj; + ACPI_NAMED_OBJECT *cpu_entry; + ACPI_OBJECT_INTERNAL *cpu_obj; u32 num_throttle_states; - u32 duty_cycle; + u32 duty_cycle = 0; u8 duty_offset = 0; u8 duty_width = 0; /* Convert and validate the device handle */ - cpu_node = acpi_ns_convert_handle_to_entry (processor_handle); - if (!cpu_node || !throttle_state) { + cpu_entry = acpi_ns_convert_handle_to_entry (processor_handle); + if (!cpu_entry || !throttle_state) { return (AE_BAD_PARAMETER); } /* Check for an existing internal object */ - cpu_obj = acpi_ns_get_attached_object ((ACPI_HANDLE) cpu_node); + cpu_obj = acpi_ns_get_attached_object ((ACPI_HANDLE) cpu_entry); if (!cpu_obj) { return (AE_NOT_FOUND); } -#ifndef _IA64 - /* - * No Duty fields in IA64 tables - */ +#ifndef _IA64 duty_offset = acpi_gbl_FACP->duty_offset; duty_width = acpi_gbl_FACP->duty_width; #endif @@ -210,8 +206,8 @@ * * also, if Duty_width is zero there are no additional states */ - if (!cpu_obj->processor.length || !duty_width || - (0xFFFF < cpu_obj->processor.address)) + if (!cpu_obj->processor.pblk_length || !duty_width || + (0xFFFF < cpu_obj->processor.pblk_address)) { *throttle_state = 0; return(AE_OK); @@ -223,7 +219,7 @@ * Get the current duty cycle value. */ duty_cycle = acpi_hw_get_duty_cycle (duty_offset, - cpu_obj->processor.address, + cpu_obj->processor.pblk_address, num_throttle_states); /* @@ -260,8 +256,8 @@ ACPI_HANDLE processor_handle, u32 throttle_state) { - ACPI_NAMESPACE_NODE *cpu_node; - ACPI_OPERAND_OBJECT *cpu_obj; + ACPI_NAMED_OBJECT *cpu_entry; + ACPI_OBJECT_INTERNAL *cpu_obj; u32 num_throttle_states = 0; u8 duty_offset = 0; u8 duty_width = 0; @@ -270,22 +266,19 @@ /* Convert and validate the device handle */ - cpu_node = acpi_ns_convert_handle_to_entry (processor_handle); - if (!cpu_node) { + cpu_entry = acpi_ns_convert_handle_to_entry (processor_handle); + if (!cpu_entry) { return (AE_BAD_PARAMETER); } /* Check for an existing internal object */ - cpu_obj = acpi_ns_get_attached_object ((ACPI_HANDLE) cpu_node); + cpu_obj = acpi_ns_get_attached_object ((ACPI_HANDLE) cpu_entry); if (!cpu_obj) { return (AE_NOT_FOUND); } -#ifndef _IA64 - /* - * No Duty fields in IA64 tables - */ +#ifndef _IA64 duty_offset = acpi_gbl_FACP->duty_offset; duty_width = acpi_gbl_FACP->duty_width; #endif @@ -297,8 +290,8 @@ * * also, if Duty_width is zero there are no additional states */ - if (!cpu_obj->processor.length || !duty_width || - (0xFFFF < cpu_obj->processor.address)) + if (!cpu_obj->processor.pblk_length || !duty_width || + (0xFFFF < cpu_obj->processor.pblk_address)) { /* * If caller wants to set the state to the only state we handle @@ -326,19 +319,19 @@ /* * Turn off throttling (don't muck with the h/w while throttling). */ - acpi_hw_disable_throttling (cpu_obj->processor.address); + acpi_hw_disable_throttling (cpu_obj->processor.pblk_address); /* * Program the throttling state. */ acpi_hw_program_duty_cycle (duty_offset, duty_cycle, - cpu_obj->processor.address, num_throttle_states); + cpu_obj->processor.pblk_address, num_throttle_states); /* * Only enable throttling for non-zero states (0 - 100%) */ if (throttle_state) { - acpi_hw_enable_throttling (cpu_obj->processor.address); + acpi_hw_enable_throttling (cpu_obj->processor.pblk_address); } return(AE_OK); @@ -452,9 +445,9 @@ ACPI_HANDLE processor_handle, u32 *pm_timer_ticks) { - ACPI_NAMESPACE_NODE *cpu_node = NULL; - ACPI_OPERAND_OBJECT *cpu_obj = NULL; - ACPI_IO_ADDRESS address = 0; + ACPI_NAMED_OBJECT *cpu_entry = NULL; + ACPI_OBJECT_INTERNAL *cpu_obj = NULL; + ACPI_IO_ADDRESS pblk_address = 0; /* @@ -463,31 +456,31 @@ /* Convert and validate the device handle */ - cpu_node = acpi_ns_convert_handle_to_entry (processor_handle); - if (!cpu_node) { - return (AE_BAD_PARAMETER); + cpu_entry = acpi_ns_convert_handle_to_entry (processor_handle); + if (!cpu_entry) { + return AE_BAD_PARAMETER; } /* Check for an existing internal object */ - cpu_obj = acpi_ns_get_attached_object ((ACPI_HANDLE) cpu_node); + cpu_obj = acpi_ns_get_attached_object ((ACPI_HANDLE) cpu_entry); if (!cpu_obj) { - return (AE_NOT_FOUND); + return AE_NOT_FOUND; } /* Get the processor register block (P_BLK) address */ - address = cpu_obj->processor.address; - if (!cpu_obj->processor.length) { + pblk_address = cpu_obj->processor.pblk_address; + if (!cpu_obj->processor.pblk_length) { /* Ensure a NULL addresss (note that P_BLK isn't required for C1) */ - address = 0; + pblk_address = 0; } /* * Enter the currently active Cx sleep state. */ - return (acpi_hw_enter_cx (address, pm_timer_ticks)); + return acpi_hw_enter_cx (pblk_address, pm_timer_ticks); } diff -urN linux-2.4.0-test9/drivers/acpi/include/accommon.h linux-2.4.0-test9-lia/drivers/acpi/include/accommon.h --- linux-2.4.0-test9/drivers/acpi/include/accommon.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/accommon.h Wed Dec 31 16:00:00 1969 @@ -1,661 +0,0 @@ -/****************************************************************************** - * - * Name: accommon.h -- prototypes for the common (subsystem-wide) procedures - * $Revision: 74 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef _ACCOMMON_H -#define _ACCOMMON_H - - -#define REF_INCREMENT (u16) 0 -#define REF_DECREMENT (u16) 1 -#define REF_FORCE_DELETE (u16) 2 - -/* Acpi_cm_dump_buffer */ - -#define DB_BYTE_DISPLAY 1 -#define DB_WORD_DISPLAY 2 -#define DB_DWORD_DISPLAY 4 -#define DB_QWORD_DISPLAY 8 - - -/* Global initialization interfaces */ - -void -acpi_cm_init_globals ( - ACPI_INIT_DATA *init_data); - -void -acpi_cm_terminate ( - void); - - -/* - * Acpi_cm_init - miscellaneous initialization and shutdown - */ - -ACPI_STATUS -acpi_cm_hardware_initialize ( - void); - -ACPI_STATUS -acpi_cm_subsystem_shutdown ( - void); - -/* - * Acpi_cm_global - Global data structures and procedures - */ - -NATIVE_CHAR * -acpi_cm_get_mutex_name ( - u32 mutex_id); - -NATIVE_CHAR * -acpi_cm_get_type_name ( - u32 type); - -u8 -acpi_cm_valid_object_type ( - u32 type); - -ACPI_OWNER_ID -acpi_cm_allocate_owner_id ( - u32 id_type); - - -/* - * Acpi_cm_clib - Local implementations of C library functions - */ - -NATIVE_UINT -acpi_cm_strlen ( - const NATIVE_CHAR *string); - -NATIVE_CHAR * -acpi_cm_strcpy ( - NATIVE_CHAR *dst_string, - const NATIVE_CHAR *src_string); - -NATIVE_CHAR * -acpi_cm_strncpy ( - NATIVE_CHAR *dst_string, - const NATIVE_CHAR *src_string, - NATIVE_UINT count); - -u32 -acpi_cm_strncmp ( - const NATIVE_CHAR *string1, - const NATIVE_CHAR *string2, - NATIVE_UINT count); - -u32 -acpi_cm_strcmp ( - const NATIVE_CHAR *string1, - const NATIVE_CHAR *string2); - -NATIVE_CHAR * -acpi_cm_strcat ( - NATIVE_CHAR *dst_string, - const NATIVE_CHAR *src_string); - -NATIVE_CHAR * -acpi_cm_strncat ( - NATIVE_CHAR *dst_string, - const NATIVE_CHAR *src_string, - NATIVE_UINT count); - -u32 -acpi_cm_strtoul ( - const NATIVE_CHAR *string, - NATIVE_CHAR **terminator, - u32 base); - -NATIVE_CHAR * -acpi_cm_strstr ( - NATIVE_CHAR *string1, - NATIVE_CHAR *string2); - -NATIVE_CHAR * -acpi_cm_strupr ( - NATIVE_CHAR *src_string); - -void * -acpi_cm_memcpy ( - void *dest, - const void *src, - NATIVE_UINT count); - -void * -acpi_cm_memset ( - void *dest, - u32 value, - NATIVE_UINT count); - -u32 -acpi_cm_to_upper ( - u32 c); - -u32 -acpi_cm_to_lower ( - u32 c); - - -/* - * Acpi_cm_copy - Object construction and conversion interfaces - */ - -ACPI_STATUS -acpi_cm_build_simple_object( - ACPI_OPERAND_OBJECT *obj, - ACPI_OBJECT *user_obj, - u8 *data_space, - u32 *buffer_space_used); - -ACPI_STATUS -acpi_cm_build_package_object ( - ACPI_OPERAND_OBJECT *obj, - u8 *buffer, - u32 *space_used); - -ACPI_STATUS -acpi_cm_build_external_object ( - ACPI_OPERAND_OBJECT *obj, - ACPI_BUFFER *ret_buffer); - -ACPI_STATUS -acpi_cm_build_internal_simple_object( - ACPI_OBJECT *user_obj, - ACPI_OPERAND_OBJECT *obj); - -ACPI_STATUS -acpi_cm_build_internal_object ( - ACPI_OBJECT *obj, - ACPI_OPERAND_OBJECT *internal_obj); - -ACPI_STATUS -acpi_cm_copy_internal_simple_object ( - ACPI_OPERAND_OBJECT *source_obj, - ACPI_OPERAND_OBJECT *dest_obj); - -ACPI_STATUS -acpi_cm_build_copy_internal_package_object ( - ACPI_OPERAND_OBJECT *source_obj, - ACPI_OPERAND_OBJECT *dest_obj); - - -/* - * Acpi_cm_create - Object creation - */ - -ACPI_STATUS -acpi_cm_update_object_reference ( - ACPI_OPERAND_OBJECT *object, - u16 action); - -ACPI_OPERAND_OBJECT * -_cm_create_internal_object ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - OBJECT_TYPE_INTERNAL type); - - -/* - * Acpi_cm_debug - Debug interfaces - */ - -u32 -get_debug_level ( - void); - -void -set_debug_level ( - u32 level); - -void -function_trace ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name); - -void -function_trace_ptr ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, - void *pointer); - -void -function_trace_u32 ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, - u32 integer); - -void -function_trace_str ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, - NATIVE_CHAR *string); - -void -function_exit ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name); - -void -function_status_exit ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, - ACPI_STATUS status); - -void -function_value_exit ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, - NATIVE_UINT value); - -void -function_ptr_exit ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *function_name, - u8 *ptr); - -void -debug_print_prefix ( - NATIVE_CHAR *module_name, - u32 line_number); - -void -debug_print ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - u32 print_level, - NATIVE_CHAR *format, ...); - -void -debug_print_raw ( - NATIVE_CHAR *format, ...); - -void -_report_info ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *message); - -void -_report_error ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *message); - -void -_report_warning ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id, - NATIVE_CHAR *message); - -void -acpi_cm_dump_buffer ( - u8 *buffer, - u32 count, - u32 display, - u32 component_id); - - -/* - * Acpi_cm_delete - Object deletion - */ - -void -acpi_cm_delete_internal_obj ( - ACPI_OPERAND_OBJECT *object); - -void -acpi_cm_delete_internal_package_object ( - ACPI_OPERAND_OBJECT *object); - -void -acpi_cm_delete_internal_simple_object ( - ACPI_OPERAND_OBJECT *object); - -ACPI_STATUS -acpi_cm_delete_internal_object_list ( - ACPI_OPERAND_OBJECT **obj_list); - - -/* - * Acpi_cm_eval - object evaluation - */ - -/* Method name strings */ - -#define METHOD_NAME__HID "_HID" -#define METHOD_NAME__UID "_UID" -#define METHOD_NAME__ADR "_ADR" -#define METHOD_NAME__STA "_STA" -#define METHOD_NAME__REG "_REG" -#define METHOD_NAME__SEG "_SEG" -#define METHOD_NAME__BBN "_BBN" - - -ACPI_STATUS -acpi_cm_evaluate_numeric_object ( - NATIVE_CHAR *method_name, - ACPI_NAMESPACE_NODE *device_node, - u32 *address); - -ACPI_STATUS -acpi_cm_execute_HID ( - ACPI_NAMESPACE_NODE *device_node, - DEVICE_ID *hid); - -ACPI_STATUS -acpi_cm_execute_STA ( - ACPI_NAMESPACE_NODE *device_node, - u32 *status_flags); - -ACPI_STATUS -acpi_cm_execute_UID ( - ACPI_NAMESPACE_NODE *device_node, - DEVICE_ID *uid); - - -/* - * Acpi_cm_error - exception interfaces - */ - -NATIVE_CHAR * -acpi_cm_format_exception ( - ACPI_STATUS status); - - -/* - * Acpi_cm_mutex - mutual exclusion interfaces - */ - -ACPI_STATUS -acpi_cm_mutex_initialize ( - void); - -void -acpi_cm_mutex_terminate ( - void); - -ACPI_STATUS -acpi_cm_create_mutex ( - ACPI_MUTEX_HANDLE mutex_id); - -ACPI_STATUS -acpi_cm_delete_mutex ( - ACPI_MUTEX_HANDLE mutex_id); - -ACPI_STATUS -acpi_cm_acquire_mutex ( - ACPI_MUTEX_HANDLE mutex_id); - -ACPI_STATUS -acpi_cm_release_mutex ( - ACPI_MUTEX_HANDLE mutex_id); - - -/* - * Acpi_cm_object - internal object create/delete/cache routines - */ - -void * -_cm_allocate_object_desc ( - NATIVE_CHAR *module_name, - u32 line_number, - u32 component_id); - -#define acpi_cm_create_internal_object(t) _cm_create_internal_object(_THIS_MODULE,__LINE__,_COMPONENT,t) -#define acpi_cm_allocate_object_desc() _cm_allocate_object_desc(_THIS_MODULE,__LINE__,_COMPONENT) - -void -acpi_cm_delete_object_desc ( - ACPI_OPERAND_OBJECT *object); - -u8 -acpi_cm_valid_internal_object ( - void *object); - - -/* - * Acpi_cm_ref_cnt - Object reference count management - */ - -void -acpi_cm_add_reference ( - ACPI_OPERAND_OBJECT *object); - -void -acpi_cm_remove_reference ( - ACPI_OPERAND_OBJECT *object); - -/* - * Acpi_cm_size - Object size routines - */ - -ACPI_STATUS -acpi_cm_get_simple_object_size ( - ACPI_OPERAND_OBJECT *obj, - u32 *obj_length); - -ACPI_STATUS -acpi_cm_get_package_object_size ( - ACPI_OPERAND_OBJECT *obj, - u32 *obj_length); - -ACPI_STATUS -acpi_cm_get_object_size( - ACPI_OPERAND_OBJECT *obj, - u32 *obj_length); - - -/* - * Acpi_cm_state - Generic state creation/cache routines - */ - -void -acpi_cm_push_generic_state ( - ACPI_GENERIC_STATE **list_head, - ACPI_GENERIC_STATE *state); - -ACPI_GENERIC_STATE * -acpi_cm_pop_generic_state ( - ACPI_GENERIC_STATE **list_head); - - -ACPI_GENERIC_STATE * -acpi_cm_create_generic_state ( - void); - -ACPI_GENERIC_STATE * -acpi_cm_create_update_state ( - ACPI_OPERAND_OBJECT *object, - u16 action); - -ACPI_STATUS -acpi_cm_create_update_state_and_push ( - ACPI_OPERAND_OBJECT *object, - u16 action, - ACPI_GENERIC_STATE **state_list); - -ACPI_GENERIC_STATE * -acpi_cm_create_control_state ( - void); - -void -acpi_cm_delete_generic_state ( - ACPI_GENERIC_STATE *state); - -void -acpi_cm_delete_generic_state_cache ( - void); - -void -acpi_cm_delete_object_cache ( - void); - -/* - * Acpi_cmutils - */ - -u8 -acpi_cm_valid_acpi_name ( - u32 name); - -u8 -acpi_cm_valid_acpi_character ( - NATIVE_CHAR character); - - -/* - * Memory allocation functions and related macros. - * Macros that expand to include filename and line number - */ - -void * -_cm_allocate ( - u32 size, - u32 component, - NATIVE_CHAR *module, - u32 line); - -void * -_cm_callocate ( - u32 size, - u32 component, - NATIVE_CHAR *module, - u32 line); - -void -_cm_free ( - void *address, - u32 component, - NATIVE_CHAR *module, - u32 line); - -void -acpi_cm_init_static_object ( - ACPI_OPERAND_OBJECT *obj_desc); - -#define acpi_cm_allocate(a) _cm_allocate(a,_COMPONENT,_THIS_MODULE,__LINE__) -#define acpi_cm_callocate(a) _cm_callocate(a, _COMPONENT,_THIS_MODULE,__LINE__) -#define acpi_cm_free(a) _cm_free(a,_COMPONENT,_THIS_MODULE,__LINE__) - -#ifndef ACPI_DEBUG - -#define acpi_cm_add_element_to_alloc_list(a,b,c,d,e,f) -#define acpi_cm_delete_element_from_alloc_list(a,b,c,d) -#define acpi_cm_dump_current_allocations(a,b) -#define acpi_cm_dump_allocation_info() - -#define DECREMENT_OBJECT_METRICS(a) -#define INCREMENT_OBJECT_METRICS(a) -#define INITIALIZE_ALLOCATION_METRICS() -#define DECREMENT_NAME_TABLE_METRICS(a) -#define INCREMENT_NAME_TABLE_METRICS(a) - -#else - -#define INITIALIZE_ALLOCATION_METRICS() \ - acpi_gbl_current_object_count = 0; \ - acpi_gbl_current_object_size = 0; \ - acpi_gbl_running_object_count = 0; \ - acpi_gbl_running_object_size = 0; \ - acpi_gbl_max_concurrent_object_count = 0; \ - acpi_gbl_max_concurrent_object_size = 0; \ - acpi_gbl_current_alloc_size = 0; \ - acpi_gbl_current_alloc_count = 0; \ - acpi_gbl_running_alloc_size = 0; \ - acpi_gbl_running_alloc_count = 0; \ - acpi_gbl_max_concurrent_alloc_size = 0; \ - acpi_gbl_max_concurrent_alloc_count = 0; \ - acpi_gbl_current_node_count = 0; \ - acpi_gbl_current_node_size = 0; \ - acpi_gbl_max_concurrent_node_count = 0 - - -#define DECREMENT_OBJECT_METRICS(a) \ - acpi_gbl_current_object_count--; \ - acpi_gbl_current_object_size -= a - -#define INCREMENT_OBJECT_METRICS(a) \ - acpi_gbl_current_object_count++; \ - acpi_gbl_running_object_count++; \ - if (acpi_gbl_max_concurrent_object_count < acpi_gbl_current_object_count) \ - { \ - acpi_gbl_max_concurrent_object_count = acpi_gbl_current_object_count; \ - } \ - acpi_gbl_running_object_size += a; \ - acpi_gbl_current_object_size += a; \ - if (acpi_gbl_max_concurrent_object_size < acpi_gbl_current_object_size) \ - { \ - acpi_gbl_max_concurrent_object_size = acpi_gbl_current_object_size; \ - } - -#define DECREMENT_NAME_TABLE_METRICS(a) \ - acpi_gbl_current_node_count--; \ - acpi_gbl_current_node_size -= (a) - -#define INCREMENT_NAME_TABLE_METRICS(a) \ - acpi_gbl_current_node_count++; \ - acpi_gbl_current_node_size+= (a); \ - if (acpi_gbl_max_concurrent_node_count < acpi_gbl_current_node_count) \ - { \ - acpi_gbl_max_concurrent_node_count = acpi_gbl_current_node_count; \ - } \ - - -void -acpi_cm_dump_allocation_info ( - void); - -void -acpi_cm_dump_current_allocations ( - u32 component, - NATIVE_CHAR *module); - -#endif - - -#endif /* _ACCOMMON_H */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acconfig.h linux-2.4.0-test9-lia/drivers/acpi/include/acconfig.h --- linux-2.4.0-test9/drivers/acpi/include/acconfig.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acconfig.h Wed Dec 31 16:00:00 1969 @@ -1,186 +0,0 @@ -/****************************************************************************** - * - * Name: acconfig.h - Global configuration constants - * $Revision: 42 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef _ACCONFIG_H -#define _ACCONFIG_H - - -/****************************************************************************** - * - * Compile-time options - * - *****************************************************************************/ - -/* - * ACPI_DEBUG - This switch enables all the debug facilities of the ACPI - * subsystem. This includes the DEBUG_PRINT output statements - * When disabled, all DEBUG_PRINT statements are compiled out. - * - * ACPI_APPLICATION - Use this switch if the subsystem is going to be run - * at the application level. - * - */ - - -/****************************************************************************** - * - * Subsystem Constants - * - *****************************************************************************/ - - -/* Version string */ - -#define ACPI_CA_VERSION __DATE__ - -/* Name of host operating system (returned by the _OS_ namespace object) */ - -#ifdef _LINUX -#define ACPI_OS_NAME "Linux" -#else -#define ACPI_OS_NAME "Intel ACPI/CA Core Subsystem" -#endif - - -/* - * How and when control methods will be parsed - * The default action is to parse all methods at table load time to verify them, but delete the parse trees - * to conserve memory. Methods are parsed just in time before execution and the parse tree is deleted - * when execution completes. - */ -#define METHOD_PARSE_AT_INIT 0x0 /* Parse at table init, never delete the method parse tree */ -#define METHOD_PARSE_JUST_IN_TIME 0x1 /* Parse only when a method is invoked */ -#define METHOD_DELETE_AT_COMPLETION 0x2 /* Delete parse tree on method completion */ - -/* Default parsing configuration */ - -#define METHOD_PARSE_CONFIGURATION (METHOD_PARSE_JUST_IN_TIME | METHOD_DELETE_AT_COMPLETION) - - -/* Maximum objects in the various object caches */ - -#define MAX_STATE_CACHE_DEPTH 64 /* State objects for stacks */ -#define MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */ -#define MAX_EXTPARSE_CACHE_DEPTH 64 /* Parse tree objects */ -#define MAX_OBJECT_CACHE_DEPTH 64 /* Interpreter operand objects */ -#define MAX_WALK_CACHE_DEPTH 2 /* Objects for parse tree walks (method execution) */ - -/* - * Name_space Table size - * - * All tables are the same size to simplify the implementation. - * Tables may be extended by allocating additional tables that - * are in turn linked together to form a chain of tables. - */ - -#define NS_TABLE_SIZE 4 - -/* String size constants */ - -#define MAX_STRING_LENGTH 512 -#define PATHNAME_MAX 256 /* A full namespace pathname */ - - -/* Maximum count for a semaphore object */ - -#define MAX_SEMAPHORE_COUNT 256 - - -/* Max reference count (for debug only) */ - -#define MAX_REFERENCE_COUNT 0x200 - - -/* Size of cached memory mapping for system memory operation region */ - -#define SYSMEM_REGION_WINDOW_SIZE 4096 - - -/* - * Debugger threading model - * Use single threaded if the entire subsystem is contained in an application - * Use multiple threaded when the the subsystem is running in the kernel. - * - * By default the model is single threaded if ACPI_APPLICATION is set, - * multi-threaded if ACPI_APPLICATION is not set. - */ - -#define DEBUGGER_SINGLE_THREADED 0 -#define DEBUGGER_MULTI_THREADED 1 - -#ifdef ACPI_APPLICATION -#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED - -#else -#define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED -#endif - - -/****************************************************************************** - * - * ACPI Specification constants (Do not change unless the specification changes) - * - *****************************************************************************/ - -/* - * Method info (in WALK_STATE), containing local variables and argumetns - */ - -#define MTH_NUM_LOCALS 8 -#define MTH_MAX_LOCAL 7 - -#define MTH_NUM_ARGS 7 -#define MTH_MAX_ARG 6 - -/* - * Operand Stack (in WALK_STATE), Must be large enough to contain MTH_MAX_ARG - */ - -#define OBJ_NUM_OPERANDS 8 -#define OBJ_MAX_OPERAND 7 - -/* Names within the namespace are 4 bytes long */ - -#define ACPI_NAME_SIZE 4 -#define PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 s8 for separator */ -#define PATH_SEPARATOR '.' - - -/* Constants used in searching for the RSDP in low memory */ - -#define LO_RSDP_WINDOW_BASE (void *) 0 -#define HI_RSDP_WINDOW_BASE (void *) 0xE0000 -#define LO_RSDP_WINDOW_SIZE 0x400 -#define HI_RSDP_WINDOW_SIZE 0x20000 -#define RSDP_SCAN_STEP 16 - - -/* Maximum nesting of package objects */ - -#define MAX_PACKAGE_DEPTH 16 - - -#endif /* _ACCONFIG_H */ - diff -urN linux-2.4.0-test9/drivers/acpi/include/acdebug.h linux-2.4.0-test9-lia/drivers/acpi/include/acdebug.h --- linux-2.4.0-test9/drivers/acpi/include/acdebug.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acdebug.h Wed Dec 31 16:00:00 1969 @@ -1,396 +0,0 @@ -/****************************************************************************** - * - * Name: acdebug.h - ACPI/AML debugger - * $Revision: 35 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACDEBUG_H__ -#define __ACDEBUG_H__ - - -#define DB_MAX_ARGS 8 /* Must be max method args + 1 */ - -#define DB_COMMAND_PROMPT '-' -#define DB_EXECUTE_PROMPT '%' - - -extern int optind; -extern NATIVE_CHAR *optarg; -extern u8 *aml_ptr; -extern u32 acpi_aml_length; - -extern u8 opt_tables; -extern u8 opt_disasm; -extern u8 opt_stats; -extern u8 opt_parse_jit; -extern u8 opt_verbose; - - -extern NATIVE_CHAR *args[DB_MAX_ARGS]; -extern NATIVE_CHAR line_buf[80]; -extern NATIVE_CHAR scope_buf[40]; -extern NATIVE_CHAR debug_filename[40]; -extern u8 output_to_file; -extern NATIVE_CHAR *buffer; -extern NATIVE_CHAR *filename; -extern NATIVE_CHAR *INDENT_STRING; -extern u8 acpi_gbl_db_output_flags; -extern u32 acpi_gbl_db_debug_level; -extern u32 acpi_gbl_db_console_debug_level; - -extern u32 num_names; -extern u32 num_methods; -extern u32 num_regions; -extern u32 num_packages; -extern u32 num_aliases; -extern u32 num_devices; -extern u32 num_field_defs; -extern u32 num_thermal_zones; -extern u32 num_nodes; -extern u32 num_grammar_elements; -extern u32 num_method_elements ; -extern u32 num_mutexes; -extern u32 num_power_resources; -extern u32 num_bank_fields ; -extern u32 num_index_fields; -extern u32 num_events; - -extern u32 size_of_parse_tree; -extern u32 size_of_method_trees; -extern u32 size_of_nTes; -extern u32 size_of_acpi_objects; - - -#define BUFFER_SIZE 4196 - -#define DB_REDIRECTABLE_OUTPUT 0x01 -#define DB_CONSOLE_OUTPUT 0x02 -#define DB_DUPLICATE_OUTPUT 0x03 - - -typedef struct command_info -{ - NATIVE_CHAR *name; /* Command Name */ - u8 min_args; /* Minimum arguments required */ - -} COMMAND_INFO; - - -typedef struct argument_info -{ - NATIVE_CHAR *name; /* Argument Name */ - -} ARGUMENT_INFO; - - -#define PARAM_LIST(pl) pl - -#define DBTEST_OUTPUT_LEVEL(lvl) if (opt_verbose) - -#define VERBOSE_PRINT(fp) DBTEST_OUTPUT_LEVEL(lvl) {\ - acpi_os_printf PARAM_LIST(fp);} - -#define EX_NO_SINGLE_STEP 1 -#define EX_SINGLE_STEP 2 - - -/* Prototypes */ - - -/* - * dbapi - external debugger interfaces - */ - -int -acpi_db_initialize ( - void); - -ACPI_STATUS -acpi_db_single_step ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - u8 op_type); - - -/* - * dbcmds - debug commands and output routines - */ - - -void -acpi_db_display_table_info ( - NATIVE_CHAR *table_arg); - -void -acpi_db_unload_acpi_table ( - NATIVE_CHAR *table_arg, - NATIVE_CHAR *instance_arg); - -void -acpi_db_set_method_breakpoint ( - NATIVE_CHAR *location, - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op); - -void -acpi_db_set_method_call_breakpoint ( - ACPI_PARSE_OBJECT *op); - -void -acpi_db_disassemble_aml ( - NATIVE_CHAR *statements, - ACPI_PARSE_OBJECT *op); - -void -acpi_db_dump_namespace ( - NATIVE_CHAR *start_arg, - NATIVE_CHAR *depth_arg); - -void -acpi_db_dump_namespace_by_owner ( - NATIVE_CHAR *owner_arg, - NATIVE_CHAR *depth_arg); - -void -acpi_db_send_notify ( - NATIVE_CHAR *name, - u32 value); - -void -acpi_db_set_method_data ( - NATIVE_CHAR *type_arg, - NATIVE_CHAR *index_arg, - NATIVE_CHAR *value_arg); - -ACPI_STATUS -acpi_db_display_objects ( - NATIVE_CHAR *obj_type_arg, - NATIVE_CHAR *display_count_arg); - -ACPI_STATUS -acpi_db_find_name_in_namespace ( - NATIVE_CHAR *name_arg); - -void -acpi_db_set_scope ( - NATIVE_CHAR *name); - -void -acpi_db_find_references ( - NATIVE_CHAR *object_arg); - - -/* - * dbdisasm - AML disassembler - */ - -void -acpi_db_display_op ( - ACPI_PARSE_OBJECT *origin, - u32 num_opcodes); - -void -acpi_db_display_namestring ( - NATIVE_CHAR *name); - -void -acpi_db_display_path ( - ACPI_PARSE_OBJECT *op); - -void -acpi_db_display_opcode ( - ACPI_PARSE_OBJECT *op); - - -/* - * dbdisply - debug display commands - */ - - -void -acpi_db_display_method_info ( - ACPI_PARSE_OBJECT *op); - -void -acpi_db_decode_and_display_object ( - NATIVE_CHAR *target, - NATIVE_CHAR *output_type); - -void -acpi_db_display_result_object ( - ACPI_OPERAND_OBJECT *obj_desc, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_db_display_all_methods ( - NATIVE_CHAR *display_count_arg); - -void -acpi_db_display_internal_object ( - ACPI_OPERAND_OBJECT *obj_desc, - ACPI_WALK_STATE *walk_state); - -void -acpi_db_display_arguments ( - void); - -void -acpi_db_display_locals ( - void); - -void -acpi_db_display_results ( - void); - -void -acpi_db_display_calling_tree ( - void); - -void -acpi_db_display_argument_object ( - ACPI_OPERAND_OBJECT *obj_desc, - ACPI_WALK_STATE *walk_state); - - -/* - * dbexec - debugger control method execution - */ - -void -acpi_db_execute ( - NATIVE_CHAR *name, - NATIVE_CHAR **args, - u32 flags); - -void -acpi_db_create_execution_threads ( - NATIVE_CHAR *num_threads_arg, - NATIVE_CHAR *num_loops_arg, - NATIVE_CHAR *method_name_arg); - - -/* - * dbfileio - Debugger file I/O commands - */ - -OBJECT_TYPE_INTERNAL -acpi_db_match_argument ( - NATIVE_CHAR *user_argument, - ARGUMENT_INFO *arguments); - - -void -acpi_db_close_debug_file ( - void); - -void -acpi_db_open_debug_file ( - NATIVE_CHAR *name); - -ACPI_STATUS -acpi_db_load_acpi_table ( - NATIVE_CHAR *filename); - - -/* - * dbhistry - debugger HISTORY command - */ - -void -acpi_db_add_to_history ( - NATIVE_CHAR *command_line); - -void -acpi_db_display_history (void); - -NATIVE_CHAR * -acpi_db_get_from_history ( - NATIVE_CHAR *command_num_arg); - - -/* - * dbinput - user front-end to the AML debugger - */ - -ACPI_STATUS -acpi_db_command_dispatch ( - NATIVE_CHAR *input_buffer, - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op); - -void -acpi_db_execute_thread ( - void *context); - -ACPI_STATUS -acpi_db_user_commands ( - NATIVE_CHAR prompt, - ACPI_PARSE_OBJECT *op); - - -/* - * dbstats - Generation and display of ACPI table statistics - */ - -void -acpi_db_generate_statistics ( - ACPI_PARSE_OBJECT *root, - u8 is_method); - - -ACPI_STATUS -acpi_db_display_statistics ( - NATIVE_CHAR *type_arg); - - -/* - * dbutils - AML debugger utilities - */ - -void -acpi_db_set_output_destination ( - u32 where); - -void -acpi_db_dump_buffer ( - u32 address); - -void -acpi_db_dump_object ( - ACPI_OBJECT *obj_desc, - u32 level); - -void -acpi_db_prep_namestring ( - NATIVE_CHAR *name); - - -ACPI_STATUS -acpi_db_second_pass_parse ( - ACPI_PARSE_OBJECT *root); - -ACPI_NAMESPACE_NODE * -acpi_db_local_ns_lookup ( - NATIVE_CHAR *name); - - -#endif /* __ACDEBUG_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acdispat.h linux-2.4.0-test9-lia/drivers/acpi/include/acdispat.h --- linux-2.4.0-test9/drivers/acpi/include/acdispat.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acdispat.h Wed Dec 31 16:00:00 1969 @@ -1,401 +0,0 @@ -/****************************************************************************** - * - * Name: acdispat.h - dispatcher (parser to interpreter interface) - * $Revision: 29 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - - -#ifndef _ACDISPAT_H_ -#define _ACDISPAT_H_ - - -#define NAMEOF_LOCAL_NTE "__L0" -#define NAMEOF_ARG_NTE "__A0" - - -/* For Acpi_ds_method_data_set_value */ - -#define MTH_TYPE_LOCAL 0 -#define MTH_TYPE_ARG 1 - - -/* Common interfaces */ - -ACPI_STATUS -acpi_ds_obj_stack_push ( - void *object, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_obj_stack_pop ( - u32 pop_count, - ACPI_WALK_STATE *walk_state); - -void * -acpi_ds_obj_stack_get_value ( - u32 index, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_obj_stack_pop_object ( - ACPI_OPERAND_OBJECT **object, - ACPI_WALK_STATE *walk_state); - - -/* dsregion - Op region support */ - -ACPI_STATUS -acpi_ds_get_region_arguments ( - ACPI_OPERAND_OBJECT *rgn_desc); - - -/* dsctrl - Parser/Interpreter interface, control stack routines */ - - -ACPI_STATUS -acpi_ds_exec_begin_control_op ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op); - -ACPI_STATUS -acpi_ds_exec_end_control_op ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op); - - -/* dsexec - Parser/Interpreter interface, method execution callbacks */ - -ACPI_STATUS -acpi_ds_exec_begin_op ( - u16 opcode, - ACPI_PARSE_OBJECT *op, - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT **out_op); - -ACPI_STATUS -acpi_ds_exec_end_op ( - ACPI_WALK_STATE *state, - ACPI_PARSE_OBJECT *op); - - -/* dsfield - Parser/Interpreter interface for AML fields */ - - -ACPI_STATUS -acpi_ds_create_field ( - ACPI_PARSE_OBJECT *op, - ACPI_NAMESPACE_NODE *region_node, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_create_bank_field ( - ACPI_PARSE_OBJECT *op, - ACPI_NAMESPACE_NODE *region_node, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_create_index_field ( - ACPI_PARSE_OBJECT *op, - ACPI_HANDLE region_node, - ACPI_WALK_STATE *walk_state); - - -/* dsload - Parser/Interpreter interface, namespace load callbacks */ - -ACPI_STATUS -acpi_ds_load1_begin_op ( - u16 opcode, - ACPI_PARSE_OBJECT *op, - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT **out_op); - -ACPI_STATUS -acpi_ds_load1_end_op ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op); - -ACPI_STATUS -acpi_ds_load2_begin_op ( - u16 opcode, - ACPI_PARSE_OBJECT *op, - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT **out_op); - -ACPI_STATUS -acpi_ds_load2_end_op ( - ACPI_WALK_STATE *state, - ACPI_PARSE_OBJECT *op); - - -/* dsmthdat - method data (locals/args) */ - - -ACPI_STATUS -acpi_ds_method_data_get_entry ( - u32 type, - u32 index, - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT ***node); - -ACPI_STATUS -acpi_ds_method_data_delete_all ( - ACPI_WALK_STATE *walk_state); - -u8 -acpi_ds_is_method_value ( - ACPI_OPERAND_OBJECT *obj_desc); - -OBJECT_TYPE_INTERNAL -acpi_ds_method_data_get_type ( - u32 type, - u32 index, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_method_data_get_value ( - u32 type, - u32 index, - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **dest_desc); - -ACPI_STATUS -acpi_ds_method_data_set_value ( - u32 type, - u32 index, - ACPI_OPERAND_OBJECT *src_desc, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_method_data_delete_value ( - u32 type, - u32 index, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_method_data_init_args ( - ACPI_OPERAND_OBJECT **params, - u32 max_param_count, - ACPI_WALK_STATE *walk_state); - -ACPI_NAMESPACE_NODE * -acpi_ds_method_data_get_nte ( - u32 type, - u32 index, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_method_data_init ( - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_method_data_set_entry ( - u32 type, - u32 index, - ACPI_OPERAND_OBJECT *object, - ACPI_WALK_STATE *walk_state); - - -/* dsmethod - Parser/Interpreter interface - control method parsing */ - -ACPI_STATUS -acpi_ds_parse_method ( - ACPI_HANDLE obj_handle); - -ACPI_STATUS -acpi_ds_call_control_method ( - ACPI_WALK_LIST *walk_list, - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op); - -ACPI_STATUS -acpi_ds_restart_control_method ( - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT *return_desc); - -ACPI_STATUS -acpi_ds_terminate_control_method ( - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_begin_method_execution ( - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT *obj_desc); - - -/* dsobj - Parser/Interpreter interface - object initialization and conversion */ - -ACPI_STATUS -acpi_ds_init_one_object ( - ACPI_HANDLE obj_handle, - u32 level, - void *context, - void **return_value); - -ACPI_STATUS -acpi_ds_initialize_objects ( - ACPI_TABLE_DESC *table_desc, - ACPI_NAMESPACE_NODE *start_node); - -ACPI_STATUS -acpi_ds_build_internal_package_obj ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - ACPI_OPERAND_OBJECT **obj_desc); - -ACPI_STATUS -acpi_ds_build_internal_object ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - ACPI_OPERAND_OBJECT **obj_desc_ptr); - -ACPI_STATUS -acpi_ds_init_object_from_op ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - u16 opcode, - ACPI_OPERAND_OBJECT **obj_desc); - -ACPI_STATUS -acpi_ds_create_node ( - ACPI_WALK_STATE *walk_state, - ACPI_NAMESPACE_NODE *node, - ACPI_PARSE_OBJECT *op); - - -/* dsregn - Parser/Interpreter interface - Op Region parsing */ - -ACPI_STATUS -acpi_ds_eval_region_operands ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op); - -ACPI_STATUS -acpi_ds_initialize_region ( - ACPI_HANDLE obj_handle); - - -/* dsutils - Parser/Interpreter interface utility routines */ - -u8 -acpi_ds_is_result_used ( - ACPI_PARSE_OBJECT *op); - -void -acpi_ds_delete_result_if_not_used ( - ACPI_PARSE_OBJECT *op, - ACPI_OPERAND_OBJECT *result_obj, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_create_operand ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *arg); - -ACPI_STATUS -acpi_ds_create_operands ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *first_arg); - -ACPI_STATUS -acpi_ds_resolve_operands ( - ACPI_WALK_STATE *walk_state); - -OBJECT_TYPE_INTERNAL -acpi_ds_map_opcode_to_data_type ( - u16 opcode, - u32 *out_flags); - -OBJECT_TYPE_INTERNAL -acpi_ds_map_named_opcode_to_data_type ( - u16 opcode); - - -/* - * dswscope - Scope Stack manipulation - */ - -ACPI_STATUS -acpi_ds_scope_stack_push ( - ACPI_NAMESPACE_NODE *node, - OBJECT_TYPE_INTERNAL type, - ACPI_WALK_STATE *walk_state); - - -ACPI_STATUS -acpi_ds_scope_stack_pop ( - ACPI_WALK_STATE *walk_state); - -void -acpi_ds_scope_stack_clear ( - ACPI_WALK_STATE *walk_state); - - -/* Acpi_dswstate - parser WALK_STATE management routines */ - -ACPI_WALK_STATE * -acpi_ds_create_walk_state ( - ACPI_OWNER_ID owner_id, - ACPI_PARSE_OBJECT *origin, - ACPI_OPERAND_OBJECT *mth_desc, - ACPI_WALK_LIST *walk_list); - -ACPI_STATUS -acpi_ds_obj_stack_delete_all ( - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_obj_stack_pop_and_delete ( - u32 pop_count, - ACPI_WALK_STATE *walk_state); - -void -acpi_ds_delete_walk_state ( - ACPI_WALK_STATE *walk_state); - -ACPI_WALK_STATE * -acpi_ds_pop_walk_state ( - ACPI_WALK_LIST *walk_list); - -ACPI_STATUS -acpi_ds_result_stack_pop ( - ACPI_OPERAND_OBJECT **object, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_result_stack_push ( - void *object, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ds_result_stack_clear ( - ACPI_WALK_STATE *walk_state); - -ACPI_WALK_STATE * -acpi_ds_get_current_walk_state ( - ACPI_WALK_LIST *walk_list); - -void -acpi_ds_delete_walk_state_cache ( - void); - - -#endif /* _ACDISPAT_H_ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acenv.h linux-2.4.0-test9-lia/drivers/acpi/include/acenv.h --- linux-2.4.0-test9/drivers/acpi/include/acenv.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acenv.h Wed Oct 4 17:05:30 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Name: acenv.h - Generation environment specific items - * $Revision: 53 $ * *****************************************************************************/ @@ -77,6 +77,10 @@ #include #include +/* Single threaded */ + +#define ACPI_APPLICATION + /* Use native Linux string library */ #define ACPI_USE_SYSTEM_CLIBRARY @@ -85,27 +89,13 @@ #define strtoul simple_strtoul -/* Linux clib doesn't to strupr, but we do. */ -char * -strupr(char *str); - -#else - -#ifdef _AED_EFI - -#include -#include -#include - #else - /* All other environments */ #define ACPI_USE_STANDARD_HEADERS #endif -#endif /****************************************************************************** @@ -128,7 +118,6 @@ #include #include #include -#include #endif /* ACPI_USE_STANDARD_HEADERS */ @@ -136,20 +125,20 @@ * We will be linking to the standard Clib functions */ -#define STRSTR(s1,s2) strstr((s1), (s2)) -#define STRUPR(s) strupr((s)) -#define STRLEN(s) strlen((s)) -#define STRCPY(d,s) strcpy((d), (s)) -#define STRNCPY(d,s,n) strncpy((d), (s), (n)) -#define STRNCMP(d,s,n) strncmp((d), (s), (n)) -#define STRCMP(d,s) strcmp((d), (s)) -#define STRCAT(d,s) strcat((d), (s)) -#define STRNCAT(d,s,n) strncat((d), (s), (n)) -#define STRTOUL(d,s,n) strtoul((d), (s), (n)) -#define MEMCPY(d,s,n) memcpy((d), (s), (n)) -#define MEMSET(d,s,n) memset((d), (s), (n)) -#define TOUPPER toupper -#define TOLOWER tolower +#define STRSTR(s1,s2) strstr((char *) (s1), (char *) (s2)) +#define STRUPR(s) strupr((char *) (s)) +#define STRLEN(s) strlen((char *) (s)) +#define STRCPY(d,s) strcpy((char *) (d), (char *) (s)) +#define STRNCPY(d,s,n) strncpy((char *) (d), (char *) (s), (n)) +#define STRNCMP(d,s,n) strncmp((char *) (d), (char *) (s), (n)) +#define STRCMP(d,s) strcmp((char *) (d), (char *) (s)) +#define STRCAT(d,s) strcat((char *) (d), (char *) (s)) +#define STRNCAT(d,s,n) strncat((char *) (d), (char *) (s), (n)) +#define STRTOUL(d,s,n) strtoul((char *) (d), (char **) (s), (n)) +#define MEMCPY(d,s,n) memcpy(d, s, (size_t) n) +#define MEMSET(d,s,n) memset(d, s, (size_t) n) +#define TOUPPER toupper +#define TOLOWER tolower /****************************************************************************** @@ -177,35 +166,37 @@ * Storage alignment properties */ -#define _AUPBND (sizeof(int) - 1) -#define _ADNBND (sizeof(int) - 1) +#define _AUPBND (sizeof(int) - 1) +#define _ADNBND (sizeof(int) - 1) /* * Variable argument list macro definitions */ -#define _bnd(X, bnd) (((sizeof(X)) + (bnd)) & (~(bnd))) -#define va_arg(ap, T) (*(T *)(((ap)+=((_bnd(T, _AUPBND)))-(_bnd(T,_ADNBND))))) -#define va_end(ap) (void)0 -#define va_start(ap, A) (void)((ap)=(((char*)&(A))+(_bnd(A,_AUPBND)))) +#define _bnd(X, bnd) (((sizeof(X)) + (bnd)) & (~(bnd))) +#define va_arg(ap, T) (*(T *)(((ap) += ((_bnd(T, _AUPBND))) \ + - (_bnd(T, _ADNBND))))) +#define va_end(ap) (void)0 +#define va_start(ap, A) (void) ((ap) = (((char *)&(A)) \ + + (_bnd(A, _AUPBND)))) #endif /* va_arg */ -#define STRSTR(s1,s2) acpi_cm_strstr ((s1), (s2)) -#define STRUPR(s) acpi_cm_strupr ((s)) -#define STRLEN(s) acpi_cm_strlen ((s)) -#define STRCPY(d,s) acpi_cm_strcpy ((d), (s)) -#define STRNCPY(d,s,n) acpi_cm_strncpy ((d), (s), (n)) -#define STRNCMP(d,s,n) acpi_cm_strncmp ((d), (s), (n)) -#define STRCMP(d,s) acpi_cm_strcmp ((d), (s)) -#define STRCAT(d,s) acpi_cm_strcat ((d), (s)) -#define STRNCAT(d,s,n) acpi_cm_strncat ((d), (s), (n)) -#define STRTOUL(d,s,n) acpi_cm_strtoul ((d), (s),(n)) -#define MEMCPY(d,s,n) acpi_cm_memcpy ((d), (s), (n)) -#define MEMSET(d,v,n) acpi_cm_memset ((d), (v), (n)) -#define TOUPPER acpi_cm_to_upper -#define TOLOWER acpi_cm_to_lower +#define STRSTR(s1,s2) acpi_cm_strstr ((char *) (s1), (char *) (s2)) +#define STRUPR(s) acpi_cm_strupr ((char *) (s)) +#define STRLEN(s) acpi_cm_strlen ((char *) (s)) +#define STRCPY(d,s) acpi_cm_strcpy ((char *) (d), (char *) (s)) +#define STRNCPY(d,s,n) acpi_cm_strncpy ((char *) (d), (char *) (s), (n)) +#define STRNCMP(d,s,n) acpi_cm_strncmp ((char *) (d), (char *) (s), (n)) +#define STRCMP(d,s) acpi_cm_strcmp ((char *) (d), (char *) (s)) +#define STRCAT(d,s) acpi_cm_strcat ((char *) (d), (char *) (s)) +#define STRNCAT(d,s,n) acpi_cm_strncat ((char *) (d), (char *) (s), (n)) +#define STRTOUL(d,s,n) acpi_cm_strtoul ((char *) (d), (char **) (s), (n)) +#define MEMCPY(d,s,n) acpi_cm_memcpy ((void *) (d), (const void *) (s), (n)) +#define MEMSET(d,v,n) acpi_cm_memset ((void *) (d), (v), (n)) +#define TOUPPER acpi_cm_to_upper +#define TOLOWER acpi_cm_to_lower #endif /* ACPI_USE_SYSTEM_CLIBRARY */ @@ -227,11 +218,9 @@ #ifdef __GNUC__ - #ifdef __ia64__ - -/* Single threaded */ -#define ACPI_APPLICATION +#define _IA64 +#endif #define ACPI_ASM_MACROS #define causeinterrupt(level) @@ -240,119 +229,105 @@ #define enable() __sti() #define wbinvd() -/*! [Begin] no source code translation */ -#include - -/* PAL_HALT[_LIGHT] */ -#define halt() ia64_pal_halt_light() - -/* PAL_HALT */ -#define safe_halt() ia64_pal_halt(1) - +#ifdef _IA64 +#define halt() /* PAL_HALT[_LIGHT] */ #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \ - do { \ - __asm__ volatile ("1: ld4 r29=%1\n" \ - ";;\n" \ - "mov ar.ccv=r29\n" \ - "mov r2=r29\n" \ - "shr.u r30=r29,1\n" \ - "and r29=-4,r29\n" \ - ";;\n" \ - "add r29=2,r29\n" \ - "and r30=1,r30\n" \ - ";;\n" \ - "add r29=r29,r30\n" \ - ";;\n" \ - "cmpxchg4.acq r30=%1,r29,ar.ccv\n" \ - ";;\n" \ - "cmp.eq p6,p7=r2,r30\n" \ - "(p7) br.dpnt.few 1b\n" \ - "cmp.gt p8,p9=3,r29\n" \ - ";;\n" \ - "(p8) mov %0=-1\n" \ - "(p9) mov %0=r0\n" \ - :"=r"(Acq):"m" __atomic_fool_gcc((GLptr)):"r2","r29","r30","memory"); \ - } while (0) + do { \ + __asm__ volatile ("1: ld4 r29=[%1]\n" \ + ";;\n" \ + "mov ar.ccv=r29\n" \ + "mov r2=r29\n" \ + "shr.u r30=r29,1\n" \ + "and r29=-4,r29\n" \ + ";;\n" \ + "add r29=2,r29\n" \ + "and r30=1,r30\n" \ + ";;\n" \ + "add r29=r29,r30\n" \ + ";;\n" \ + "cmpxchg4.acq r30=[%1],r29,ar.ccv\n" \ + ";;\n" \ + "cmp.eq p6,p7=r2,r30\n" \ + "(p7) br.dpnt.few 1b\n" \ + "cmp.gt p8,p9=3,r29\n" \ + ";;\n" \ + "(p8) mov %0=-1\n" \ + "(p9) mov %0=r0\n" \ + :"=r"(Acq):"r"(GLptr):"r2","r29","r30","memory"); \ + } while (0) #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \ - do { \ - __asm__ volatile ("1: ld4 r29=%1\n" \ - ";;\n" \ - "mov ar.ccv=r29\n" \ - "mov r2=r29\n" \ - "and r29=-4,r29\n" \ - ";;\n" \ - "cmpxchg4.acq r30=%1,r29,ar.ccv\n" \ - ";;\n" \ - "cmp.eq p6,p7=r2,r30\n" \ - "(p7) br.dpnt.few 1b\n" \ - "and %0=1,r2\n" \ - ";;\n" \ - :"=r"(Acq):"m" __atomic_fool_gcc((GLptr)):"r2","r29","r30","memory"); \ - } while (0) -/*! [End] no source code translation !*/ - -#else /* DO IA32 */ + do { \ + __asm__ volatile ("1: ld4 r29=[%1]\n" \ + ";;\n" \ + "mov ar.ccv=r29\n" \ + "mov r2=r29\n" \ + "and r29=-4,r29\n" \ + ";;\n" \ + "cmpxchg4.acq r30=[%1],r29,ar.ccv\n" \ + ";;\n" \ + "cmp.eq p6,p7=r2,r30\n" \ + "(p7) br.dpnt.few 1b\n" \ + "and %0=1,r2\n" \ + ";;\n" \ + :"=r"(Acq):"r"(GLptr):"r2","r29","r30","memory"); \ + } while (0) -#define ACPI_ASM_MACROS -#define causeinterrupt(level) -#define BREAKPOINT3 -#define disable() __cli() -#define enable() __sti() +#else #define halt() __asm__ __volatile__ ("sti; hlt":::"memory") -#define wbinvd() /*! [Begin] no source code translation * * A brief explanation as GNU inline assembly is a bit hairy * %0 is the output parameter in EAX ("=a") - * %1 and %2 are the input parameters in ECX ("c") - * and an immediate value ("i") respectively + * %1 and %2 are the input parameters in ECX ("c") and an immediate value ("i") respectively * All actual register references are preceded with "%%" as in "%%edx" * Immediate values in the assembly are preceded by "$" as in "$0x1" - * The final asm parameter are the operation altered non-output registers. + * The final asm parameter is the non-output registers altered by the operation */ + #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \ do { \ - int dummy; \ - asm("1: movl (%1),%%eax;" \ + asm("1: movl (%2),%%eax;" \ "movl %%eax,%%edx;" \ - "andl %2,%%edx;" \ + "andl %3,%%edx;" \ "btsl $0x1,%%edx;" \ "adcl $0x0,%%edx;" \ "lock; cmpxchgl %%edx,(%1);" \ "jnz 1b;" \ "cmpb $0x3,%%dl;" \ "sbbl %%eax,%%eax" \ - :"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx"); \ + :"=a"(Acq),"=c"(GLptr):"c"(GLptr),"i"(~1L):"dx"); \ } while(0) #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \ do { \ - int dummy; \ - asm("1: movl (%1),%%eax;" \ + asm("1: movl (%2),%%eax;" \ "movl %%eax,%%edx;" \ - "andl %2,%%edx;" \ + "andl %3,%%edx;" \ "lock; cmpxchgl %%edx,(%1);" \ "jnz 1b;" \ "andl $0x1,%%eax" \ - :"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~3L):"dx"); \ + :"=a"(Acq),"=c"(GLptr):"c"(GLptr),"i"(~3L):"dx"); \ } while(0) /*! [End] no source code translation !*/ -#endif /* IA 32 */ +#endif + #endif /* __GNUC__ */ -/* Unrecognized compiler, use defaults */ #ifndef ACPI_ASM_MACROS +/* Unrecognized compiler, use defaults */ + #define ACPI_ASM_MACROS #define causeinterrupt(level) #define BREAKPOINT3 #define disable() #define enable() #define halt() + #define ACPI_ACQUIRE_GLOBAL_LOCK(Glptr, acq) #define ACPI_RELEASE_GLOBAL_LOCK(Glptr, acq) diff -urN linux-2.4.0-test9/drivers/acpi/include/acevents.h linux-2.4.0-test9-lia/drivers/acpi/include/acevents.h --- linux-2.4.0-test9/drivers/acpi/include/acevents.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acevents.h Wed Dec 31 16:00:00 1969 @@ -1,210 +0,0 @@ -/****************************************************************************** - * - * Name: acevents.h - Event subcomponent prototypes and defines - * $Revision: 56 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACEVENTS_H__ -#define __ACEVENTS_H__ - - -/* - * Acpi_evfixed - Fixed event handling - */ - -ACPI_STATUS -acpi_ev_fixed_event_initialize ( - void); - -u32 -acpi_ev_fixed_event_detect ( - void); - -u32 -acpi_ev_fixed_event_dispatch ( - u32 acpi_event); - - -/* - * Acpi_evglock - Global Lock support - */ - -ACPI_STATUS -acpi_ev_acquire_global_lock( - void); - -void -acpi_ev_release_global_lock( - void); - -ACPI_STATUS -acpi_ev_init_global_lock_handler ( - void); - - -/* - * Acpi_evgpe - GPE handling and dispatch - */ - -ACPI_STATUS -acpi_ev_gpe_initialize ( - void); - -ACPI_STATUS -acpi_ev_init_gpe_control_methods ( - void); - -u32 -acpi_ev_gpe_dispatch ( - u32 gpe_number); - -u32 -acpi_ev_gpe_detect ( - void); - - -/* - * Acpi_evnotify - Device Notify handling and dispatch - */ - -void -acpi_ev_notify_dispatch ( - ACPI_HANDLE device, - u32 notify_value); - - -/* - * Acpi_evregion - Address Space handling - */ - -ACPI_STATUS -acpi_ev_install_default_address_space_handlers ( - void); - -ACPI_STATUS -acpi_ev_address_space_dispatch ( - ACPI_OPERAND_OBJECT *region_obj, - u32 function, - u32 address, - u32 bit_width, - u32 *value); - - -ACPI_STATUS -acpi_ev_addr_handler_helper ( - ACPI_HANDLE obj_handle, - u32 level, - void *context, - void **return_value); - -void -acpi_ev_disassociate_region_from_handler( - ACPI_OPERAND_OBJECT *region_obj); - - -ACPI_STATUS -acpi_ev_associate_region_and_handler ( - ACPI_OPERAND_OBJECT *handler_obj, - ACPI_OPERAND_OBJECT *region_obj, - u8 acpi_ns_is_locked); - - -/* - * Acpi_evregini - Region initialization and setup - */ - -ACPI_STATUS -acpi_ev_system_memory_region_setup ( - ACPI_HANDLE handle, - u32 function, - void *handler_context, - void **region_context); - -ACPI_STATUS -acpi_ev_io_space_region_setup ( - ACPI_HANDLE handle, - u32 function, - void *handler_context, - void **region_context); - -ACPI_STATUS -acpi_ev_pci_config_region_setup ( - ACPI_HANDLE handle, - u32 function, - void *handler_context, - void **region_context); - -ACPI_STATUS -acpi_ev_default_region_setup ( - ACPI_HANDLE handle, - u32 function, - void *handler_context, - void **region_context); - -ACPI_STATUS -acpi_ev_initialize_region ( - ACPI_OPERAND_OBJECT *region_obj, - u8 acpi_ns_locked); - - -/* - * Evsci - SCI (System Control Interrupt) handling/dispatch - */ - -u32 -acpi_ev_install_sci_handler ( - void); - -ACPI_STATUS -acpi_ev_remove_sci_handler ( - void); - -u32 -acpi_ev_initialize_sCI ( - u32 program_sCI); - -void -acpi_ev_restore_acpi_state ( - void); - -void -acpi_ev_terminate ( - void); - - -/* Debug support */ - -#ifdef ACPI_DEBUG - -u32 -acpi_ev_sci_count ( - u32 acpi_event); - -#define DEBUG_INCREMENT_EVENT_COUNT(a) acpi_gbl_event_count[a]++; - -#else - -#define DEBUG_INCREMENT_EVENT_COUNT(a) -#endif - - -#endif /* __ACEVENTS_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acexcep.h linux-2.4.0-test9-lia/drivers/acpi/include/acexcep.h --- linux-2.4.0-test9/drivers/acpi/include/acexcep.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acexcep.h Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Name: acexcep.h - Exception codes returned by the ACPI subsystem - * $Revision: 35 $ * *****************************************************************************/ @@ -31,105 +31,65 @@ * Exceptions returned by external ACPI interfaces */ -#define AE_CODE_ENVIRONMENTAL 0x0000 -#define AE_CODE_PROGRAMMER 0x1000 -#define AE_CODE_ACPI_TABLES 0x2000 -#define AE_CODE_AML 0x3000 -#define AE_CODE_CONTROL 0x4000 -#define AE_CODE_MASK 0xF000 - - #define ACPI_SUCCESS(a) (!(a)) #define ACPI_FAILURE(a) (a) - #define AE_OK (ACPI_STATUS) 0x0000 - -/* - * Environmental exceptions - */ -#define AE_ERROR (ACPI_STATUS) (0x0001 | AE_CODE_ENVIRONMENTAL) -#define AE_NO_ACPI_TABLES (ACPI_STATUS) (0x0002 | AE_CODE_ENVIRONMENTAL) -#define AE_NO_NAMESPACE (ACPI_STATUS) (0x0003 | AE_CODE_ENVIRONMENTAL) -#define AE_NO_MEMORY (ACPI_STATUS) (0x0004 | AE_CODE_ENVIRONMENTAL) -#define AE_NOT_FOUND (ACPI_STATUS) (0x0005 | AE_CODE_ENVIRONMENTAL) -#define AE_NOT_EXIST (ACPI_STATUS) (0x0006 | AE_CODE_ENVIRONMENTAL) -#define AE_EXIST (ACPI_STATUS) (0x0007 | AE_CODE_ENVIRONMENTAL) -#define AE_TYPE (ACPI_STATUS) (0x0008 | AE_CODE_ENVIRONMENTAL) -#define AE_NULL_OBJECT (ACPI_STATUS) (0x0009 | AE_CODE_ENVIRONMENTAL) -#define AE_NULL_ENTRY (ACPI_STATUS) (0x000A | AE_CODE_ENVIRONMENTAL) -#define AE_BUFFER_OVERFLOW (ACPI_STATUS) (0x000B | AE_CODE_ENVIRONMENTAL) -#define AE_STACK_OVERFLOW (ACPI_STATUS) (0x000C | AE_CODE_ENVIRONMENTAL) -#define AE_STACK_UNDERFLOW (ACPI_STATUS) (0x000D | AE_CODE_ENVIRONMENTAL) -#define AE_NOT_IMPLEMENTED (ACPI_STATUS) (0x000E | AE_CODE_ENVIRONMENTAL) -#define AE_VERSION_MISMATCH (ACPI_STATUS) (0x000F | AE_CODE_ENVIRONMENTAL) -#define AE_SUPPORT (ACPI_STATUS) (0x0010 | AE_CODE_ENVIRONMENTAL) -#define AE_SHARE (ACPI_STATUS) (0x0011 | AE_CODE_ENVIRONMENTAL) -#define AE_LIMIT (ACPI_STATUS) (0x0012 | AE_CODE_ENVIRONMENTAL) -#define AE_TIME (ACPI_STATUS) (0x0013 | AE_CODE_ENVIRONMENTAL) -#define AE_UNKNOWN_STATUS (ACPI_STATUS) (0x0014 | AE_CODE_ENVIRONMENTAL) - -#define AE_CODE_ENV_MAX 0x0014 - -/* - * Programmer exceptions - */ -#define AE_BAD_PARAMETER (ACPI_STATUS) (0x0001 | AE_CODE_PROGRAMMER) -#define AE_BAD_CHARACTER (ACPI_STATUS) (0x0002 | AE_CODE_PROGRAMMER) -#define AE_BAD_PATHNAME (ACPI_STATUS) (0x0003 | AE_CODE_PROGRAMMER) -#define AE_BAD_DATA (ACPI_STATUS) (0x0004 | AE_CODE_PROGRAMMER) -#define AE_BAD_ADDRESS (ACPI_STATUS) (0x0005 | AE_CODE_PROGRAMMER) - -#define AE_CODE_PGM_MAX 0x0005 - - -/* - * Acpi table exceptions - */ -#define AE_BAD_SIGNATURE (ACPI_STATUS) (0x0001 | AE_CODE_ACPI_TABLES) -#define AE_BAD_HEADER (ACPI_STATUS) (0x0002 | AE_CODE_ACPI_TABLES) -#define AE_BAD_CHECKSUM (ACPI_STATUS) (0x0003 | AE_CODE_ACPI_TABLES) - -#define AE_CODE_TBL_MAX 0x0003 - - -/* - * AML exceptions. These are caused by problems with - * the actual AML byte stream - */ -#define AE_AML_ERROR (ACPI_STATUS) (0x0001 | AE_CODE_AML) -#define AE_AML_PARSE (ACPI_STATUS) (0x0002 | AE_CODE_AML) -#define AE_AML_BAD_OPCODE (ACPI_STATUS) (0x0003 | AE_CODE_AML) -#define AE_AML_NO_OPERAND (ACPI_STATUS) (0x0004 | AE_CODE_AML) -#define AE_AML_OPERAND_TYPE (ACPI_STATUS) (0x0005 | AE_CODE_AML) -#define AE_AML_OPERAND_VALUE (ACPI_STATUS) (0x0006 | AE_CODE_AML) -#define AE_AML_UNINITIALIZED_LOCAL (ACPI_STATUS) (0x0007 | AE_CODE_AML) -#define AE_AML_UNINITIALIZED_ARG (ACPI_STATUS) (0x0008 | AE_CODE_AML) -#define AE_AML_UNINITIALIZED_ELEMENT (ACPI_STATUS) (0x0009 | AE_CODE_AML) -#define AE_AML_NUMERIC_OVERFLOW (ACPI_STATUS) (0x000A | AE_CODE_AML) -#define AE_AML_REGION_LIMIT (ACPI_STATUS) (0x000B | AE_CODE_AML) -#define AE_AML_BUFFER_LIMIT (ACPI_STATUS) (0x000C | AE_CODE_AML) -#define AE_AML_PACKAGE_LIMIT (ACPI_STATUS) (0x000D | AE_CODE_AML) -#define AE_AML_DIVIDE_BY_ZERO (ACPI_STATUS) (0x000E | AE_CODE_AML) -#define AE_AML_BAD_NAME (ACPI_STATUS) (0x000F | AE_CODE_AML) -#define AE_AML_NAME_NOT_FOUND (ACPI_STATUS) (0x0010 | AE_CODE_AML) -#define AE_AML_INTERNAL (ACPI_STATUS) (0x0011 | AE_CODE_AML) - -#define AE_CODE_AML_MAX 0x0011 - -/* - * Internal exceptions used for control - */ -#define AE_CTRL_RETURN_VALUE (ACPI_STATUS) (0x0001 | AE_CODE_CONTROL) -#define AE_CTRL_PENDING (ACPI_STATUS) (0x0002 | AE_CODE_CONTROL) -#define AE_CTRL_TERMINATE (ACPI_STATUS) (0x0003 | AE_CODE_CONTROL) -#define AE_CTRL_TRUE (ACPI_STATUS) (0x0004 | AE_CODE_CONTROL) -#define AE_CTRL_FALSE (ACPI_STATUS) (0x0005 | AE_CODE_CONTROL) -#define AE_CTRL_DEPTH (ACPI_STATUS) (0x0006 | AE_CODE_CONTROL) -#define AE_CTRL_END (ACPI_STATUS) (0x0007 | AE_CODE_CONTROL) -#define AE_CTRL_TRANSFER (ACPI_STATUS) (0x0008 | AE_CODE_CONTROL) - -#define AE_CODE_CTRL_MAX 0x0008 +#define AE_CTRL_RETURN_VALUE (ACPI_STATUS) 0x0001 +#define AE_CTRL_PENDING (ACPI_STATUS) 0x0002 +#define AE_CTRL_TERMINATE (ACPI_STATUS) 0x0003 +#define AE_CTRL_TRUE (ACPI_STATUS) 0x0004 +#define AE_CTRL_FALSE (ACPI_STATUS) 0x0005 +#define AE_CTRL_DEPTH (ACPI_STATUS) 0x0006 +#define AE_CTRL_RESERVED (ACPI_STATUS) 0x0007 +#define AE_AML_ERROR (ACPI_STATUS) 0x0008 +#define AE_AML_PARSE (ACPI_STATUS) 0x0009 +#define AE_AML_BAD_OPCODE (ACPI_STATUS) 0x000A +#define AE_AML_NO_OPERAND (ACPI_STATUS) 0x000B +#define AE_AML_OPERAND_TYPE (ACPI_STATUS) 0x000C +#define AE_AML_OPERAND_VALUE (ACPI_STATUS) 0x000D +#define AE_AML_UNINITIALIZED_LOCAL (ACPI_STATUS) 0x000E +#define AE_AML_UNINITIALIZED_ARG (ACPI_STATUS) 0x000F +#define AE_AML_UNINITIALIZED_ELEMENT (ACPI_STATUS) 0x0010 +#define AE_AML_NUMERIC_OVERFLOW (ACPI_STATUS) 0x0011 +#define AE_AML_REGION_LIMIT (ACPI_STATUS) 0x0012 +#define AE_AML_BUFFER_LIMIT (ACPI_STATUS) 0x0013 +#define AE_AML_PACKAGE_LIMIT (ACPI_STATUS) 0x0014 +#define AE_AML_DIVIDE_BY_ZERO (ACPI_STATUS) 0x0015 +#define AE_AML_BAD_NAME (ACPI_STATUS) 0x0016 +#define AE_AML_NAME_NOT_FOUND (ACPI_STATUS) 0x0017 +#define AE_AML_INTERNAL (ACPI_STATUS) 0x0018 +#define AE_AML_RESERVED (ACPI_STATUS) 0x0019 +#define AE_ERROR (ACPI_STATUS) 0x001A +#define AE_NO_ACPI_TABLES (ACPI_STATUS) 0x001B +#define AE_NO_NAMESPACE (ACPI_STATUS) 0x001C +#define AE_NO_MEMORY (ACPI_STATUS) 0x001D +#define AE_BAD_SIGNATURE (ACPI_STATUS) 0x001E +#define AE_BAD_HEADER (ACPI_STATUS) 0x001F +#define AE_BAD_CHECKSUM (ACPI_STATUS) 0x0020 +#define AE_BAD_PARAMETER (ACPI_STATUS) 0x0021 +#define AE_BAD_CHARACTER (ACPI_STATUS) 0x0022 +#define AE_BAD_PATHNAME (ACPI_STATUS) 0x0023 +#define AE_BAD_DATA (ACPI_STATUS) 0x0024 +#define AE_BAD_ADDRESS (ACPI_STATUS) 0x0025 +#define AE_NOT_FOUND (ACPI_STATUS) 0x0026 +#define AE_NOT_EXIST (ACPI_STATUS) 0x0027 +#define AE_EXIST (ACPI_STATUS) 0x0028 +#define AE_TYPE (ACPI_STATUS) 0x0029 +#define AE_NULL_OBJECT (ACPI_STATUS) 0x002A +#define AE_NULL_ENTRY (ACPI_STATUS) 0x002B +#define AE_BUFFER_OVERFLOW (ACPI_STATUS) 0x002C +#define AE_STACK_OVERFLOW (ACPI_STATUS) 0x002D +#define AE_STACK_UNDERFLOW (ACPI_STATUS) 0x002E +#define AE_NOT_IMPLEMENTED (ACPI_STATUS) 0x002F +#define AE_VERSION_MISMATCH (ACPI_STATUS) 0x0030 +#define AE_SUPPORT (ACPI_STATUS) 0x0031 +#define AE_SHARE (ACPI_STATUS) 0x0032 +#define AE_LIMIT (ACPI_STATUS) 0x0033 +#define AE_TIME (ACPI_STATUS) 0x0034 +#define AE_UNKNOWN_STATUS (ACPI_STATUS) 0x0035 +#define ACPI_MAX_STATUS (ACPI_STATUS) 0x0035 +#define ACPI_NUM_STATUS (ACPI_STATUS) 0x0036 #ifdef DEFINE_ACPI_GLOBALS @@ -138,13 +98,46 @@ * String versions of the exception codes above * These strings must match the corresponding defines exactly */ -static NATIVE_CHAR *acpi_gbl_exception_names_env[] = +static char *acpi_gbl_exception_names[] = { "AE_OK", + "AE_CTRL_RETURN_VALUE", + "AE_CTRL_PENDING", + "AE_CTRL_TERMINATE", + "AE_CTRL_TRUE", + "AE_CTRL_FALSE", + "AE_CTRL_DEPTH", + "AE_CTRL_RESERVED", + "AE_AML_ERROR", + "AE_AML_PARSE", + "AE_AML_BAD_OPCODE", + "AE_AML_NO_OPERAND", + "AE_AML_OPERAND_TYPE", + "AE_AML_OPERAND_VALUE", + "AE_AML_UNINITIALIZED_LOCAL", + "AE_AML_UNINITIALIZED_ARG", + "AE_AML_UNINITIALIZED_ELEMENT", + "AE_AML_NUMERIC_OVERFLOW", + "AE_AML_REGION_LIMIT", + "AE_AML_BUFFER_LIMIT", + "AE_AML_PACKAGE_LIMIT", + "AE_AML_DIVIDE_BY_ZERO", + "AE_AML_BAD_NAME", + "AE_AML_NAME_NOT_FOUND", + "AE_AML_INTERNAL", + "AE_AML_RESERVED", "AE_ERROR", "AE_NO_ACPI_TABLES", "AE_NO_NAMESPACE", "AE_NO_MEMORY", + "AE_BAD_SIGNATURE", + "AE_BAD_HEADER", + "AE_BAD_CHECKSUM", + "AE_BAD_PARAMETER", + "AE_BAD_CHARACTER", + "AE_BAD_PATHNAME", + "AE_BAD_DATA", + "AE_BAD_ADDRESS", "AE_NOT_FOUND", "AE_NOT_EXIST", "AE_EXIST", @@ -160,58 +153,8 @@ "AE_SHARE", "AE_LIMIT", "AE_TIME", - "AE_UNKNOWN_STATUS", -}; - -static NATIVE_CHAR *acpi_gbl_exception_names_pgm[] = -{ - "AE_BAD_PARAMETER", - "AE_BAD_CHARACTER", - "AE_BAD_PATHNAME", - "AE_BAD_DATA", - "AE_BAD_ADDRESS", -}; - -static NATIVE_CHAR *acpi_gbl_exception_names_tbl[] = -{ - "AE_BAD_SIGNATURE", - "AE_BAD_HEADER", - "AE_BAD_CHECKSUM", -}; - -static NATIVE_CHAR *acpi_gbl_exception_names_aml[] = -{ - "AE_AML_ERROR", - "AE_AML_PARSE", - "AE_AML_BAD_OPCODE", - "AE_AML_NO_OPERAND", - "AE_AML_OPERAND_TYPE", - "AE_AML_OPERAND_VALUE", - "AE_AML_UNINITIALIZED_LOCAL", - "AE_AML_UNINITIALIZED_ARG", - "AE_AML_UNINITIALIZED_ELEMENT", - "AE_AML_NUMERIC_OVERFLOW", - "AE_AML_REGION_LIMIT", - "AE_AML_BUFFER_LIMIT", - "AE_AML_PACKAGE_LIMIT", - "AE_AML_DIVIDE_BY_ZERO", - "AE_AML_BAD_NAME", - "AE_AML_NAME_NOT_FOUND", - "AE_AML_INTERNAL", -}; - -static NATIVE_CHAR *acpi_gbl_exception_names_ctrl[] = -{ - "AE_CTRL_RETURN_VALUE", - "AE_CTRL_PENDING", - "AE_CTRL_TERMINATE", - "AE_CTRL_TRUE", - "AE_CTRL_FALSE", - "AE_CTRL_DEPTH", - "AE_CTRL_END", - "AE_CTRL_TRANSFER", + "AE_UNKNOWN_STATUS" }; - #endif /* DEFINE_ACPI_GLOBALS */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acglobal.h linux-2.4.0-test9-lia/drivers/acpi/include/acglobal.h --- linux-2.4.0-test9/drivers/acpi/include/acglobal.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acglobal.h Wed Dec 31 16:00:00 1969 @@ -1,320 +0,0 @@ -/****************************************************************************** - * - * Name: acglobal.h - Declarations for global variables - * $Revision: 84 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACGLOBAL_H__ -#define __ACGLOBAL_H__ - - -/* - * Ensure that the globals are actually defined only once. - * - * The use of these defines allows a single list of globals (here) in order - * to simplify maintenance of the code. - */ -#ifdef DEFINE_ACPI_GLOBALS -#define ACPI_EXTERN -#else -#define ACPI_EXTERN extern -#endif - - -extern NATIVE_CHAR *msg_acpi_error_break; - -/***************************************************************************** - * - * Debug support - * - ****************************************************************************/ - -/* Runtime configuration of debug print levels */ - -extern u32 acpi_dbg_level; -extern u32 acpi_dbg_layer; - - -/* Procedure nesting level for debug output */ - -extern u32 acpi_gbl_nesting_level; - - -/***************************************************************************** - * - * ACPI Table globals - * - ****************************************************************************/ - -/* - * Table pointers. - * Although these pointers are somewhat redundant with the global Acpi_table, - * they are convenient because they are typed pointers. - * - * These tables are single-table only; meaning that there can be at most one - * of each in the system. Each global points to the actual table. - * - */ -ACPI_EXTERN ROOT_SYSTEM_DESCRIPTOR_POINTER *acpi_gbl_RSDP; -ACPI_EXTERN ROOT_SYSTEM_DESCRIPTION_TABLE *acpi_gbl_RSDT; -ACPI_EXTERN FIRMWARE_ACPI_CONTROL_STRUCTURE *acpi_gbl_FACS; -ACPI_EXTERN FIXED_ACPI_DESCRIPTION_TABLE *acpi_gbl_FACP; -ACPI_EXTERN APIC_TABLE *acpi_gbl_APIC; -ACPI_EXTERN ACPI_TABLE_HEADER *acpi_gbl_DSDT; -ACPI_EXTERN ACPI_TABLE_HEADER *acpi_gbl_SBST; -/* - * Since there may be multiple SSDTs and PSDTS, a single pointer is not - * sufficient; Therefore, there isn't one! - */ - - -/* - * ACPI Table info arrays - */ -extern ACPI_TABLE_DESC acpi_gbl_acpi_tables[NUM_ACPI_TABLES]; -extern ACPI_TABLE_SUPPORT acpi_gbl_acpi_table_data[NUM_ACPI_TABLES]; - -/* - * Predefined mutex objects. This array contains the - * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs. - * (The table maps local handles to the real OS handles) - */ -ACPI_EXTERN ACPI_MUTEX_INFO acpi_gbl_acpi_mutex_info [NUM_MTX]; -extern ACPI_INIT_DATA acpi_gbl_acpi_init_data; - - -/***************************************************************************** - * - * Miscellaneous globals - * - ****************************************************************************/ - - -ACPI_EXTERN u8 *acpi_gbl_gpe0enable_register_save; -ACPI_EXTERN u8 *acpi_gbl_gpe1_enable_register_save; -ACPI_EXTERN ACPI_WALK_STATE *acpi_gbl_breakpoint_walk; -ACPI_EXTERN ACPI_GENERIC_STATE *acpi_gbl_generic_state_cache; -ACPI_EXTERN ACPI_PARSE_OBJECT *acpi_gbl_parse_cache; -ACPI_EXTERN ACPI_PARSE2_OBJECT *acpi_gbl_ext_parse_cache; -ACPI_EXTERN ACPI_OPERAND_OBJECT *acpi_gbl_object_cache; -ACPI_EXTERN ACPI_WALK_STATE *acpi_gbl_walk_state_cache; -ACPI_EXTERN ACPI_HANDLE acpi_gbl_global_lock_semaphore; - - -ACPI_EXTERN u32 acpi_gbl_global_lock_thread_count; -ACPI_EXTERN u32 acpi_gbl_restore_acpi_chipset; -ACPI_EXTERN u32 acpi_gbl_original_mode; -ACPI_EXTERN u32 acpi_gbl_edge_level_save; -ACPI_EXTERN u32 acpi_gbl_irq_enable_save; -ACPI_EXTERN u32 acpi_gbl_rsdp_original_location; - -ACPI_EXTERN u32 acpi_gbl_state_cache_requests; -ACPI_EXTERN u32 acpi_gbl_state_cache_hits; -ACPI_EXTERN u32 acpi_gbl_parse_cache_requests; -ACPI_EXTERN u32 acpi_gbl_parse_cache_hits; -ACPI_EXTERN u32 acpi_gbl_ext_parse_cache_requests; -ACPI_EXTERN u32 acpi_gbl_ext_parse_cache_hits; -ACPI_EXTERN u32 acpi_gbl_object_cache_requests; -ACPI_EXTERN u32 acpi_gbl_object_cache_hits; -ACPI_EXTERN u32 acpi_gbl_walk_state_cache_requests; -ACPI_EXTERN u32 acpi_gbl_walk_state_cache_hits; -ACPI_EXTERN u32 acpi_gbl_ns_lookup_count; -ACPI_EXTERN u32 acpi_gbl_ps_find_count; - - -ACPI_EXTERN u16 acpi_gbl_generic_state_cache_depth; -ACPI_EXTERN u16 acpi_gbl_parse_cache_depth; -ACPI_EXTERN u16 acpi_gbl_ext_parse_cache_depth; -ACPI_EXTERN u16 acpi_gbl_object_cache_depth; -ACPI_EXTERN u16 acpi_gbl_walk_state_cache_depth; -ACPI_EXTERN u16 acpi_gbl_pm1_enable_register_save; -ACPI_EXTERN u16 acpi_gbl_next_table_owner_id; -ACPI_EXTERN u16 acpi_gbl_next_method_owner_id; - -ACPI_EXTERN u8 acpi_gbl_debugger_configuration; -ACPI_EXTERN u8 acpi_gbl_global_lock_acquired; -ACPI_EXTERN u8 acpi_gbl_global_lock_set; /* TBD: [Restructure] OBSOLETE?? */ -ACPI_EXTERN u8 acpi_gbl_step_to_next_call; -ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present; - - -ACPI_EXTERN ACPI_OBJECT_NOTIFY_HANDLER acpi_gbl_drv_notify; -ACPI_EXTERN ACPI_OBJECT_NOTIFY_HANDLER acpi_gbl_sys_notify; - - -extern u8 acpi_gbl_shutdown; -extern u32 acpi_gbl_system_flags; -extern u32 acpi_gbl_startup_flags; - - -/***************************************************************************** - * - * Namespace globals - * - ****************************************************************************/ - -#define NUM_NS_TYPES INTERNAL_TYPE_INVALID+1 -#define NUM_PREDEFINED_NAMES 9 - - -ACPI_EXTERN ACPI_NAMESPACE_NODE acpi_gbl_root_node_struct; -ACPI_EXTERN ACPI_NAMESPACE_NODE *acpi_gbl_root_node; - -extern u8 acpi_gbl_ns_properties[NUM_NS_TYPES]; -extern PREDEFINED_NAMES acpi_gbl_pre_defined_names [NUM_PREDEFINED_NAMES]; - - -/* Used to detect memory leaks (DEBUG ONLY) */ - -#ifdef ACPI_DEBUG -ACPI_EXTERN ALLOCATION_INFO *acpi_gbl_head_alloc_ptr; -ACPI_EXTERN ALLOCATION_INFO *acpi_gbl_tail_alloc_ptr; -#endif - - -/***************************************************************************** - * - * Interpreter globals - * - ****************************************************************************/ - - -ACPI_EXTERN u32 acpi_gbl_when_to_parse_methods; -ACPI_EXTERN ACPI_WALK_LIST *acpi_gbl_current_walk_list; - -/* Base of AML block, and pointer to current location in it */ - -ACPI_EXTERN u8 *acpi_gbl_Pcode_base; -ACPI_EXTERN u8 *acpi_gbl_Pcode; - -/* - * Length of AML block, and remaining length of current package. - */ -ACPI_EXTERN u32 acpi_gbl_Pcode_block_len; -ACPI_EXTERN u32 acpi_gbl_Pcode_len; - -ACPI_EXTERN u32 acpi_gbl_buf_seq; /* Counts allocated Buffer descriptors */ -ACPI_EXTERN u32 acpi_gbl_node_err; /* Indicate if inc_error should be called */ - -/* - * Handle to the last method found - used during pass1 of load - */ -ACPI_EXTERN ACPI_HANDLE acpi_gbl_last_method; - -/* - * Table of Address Space handlers - */ - -ACPI_EXTERN ACPI_ADDRESS_SPACE_INFO acpi_gbl_address_spaces[ACPI_NUM_ADDRESS_SPACES]; - - -/* Control method single step flag */ - -ACPI_EXTERN u8 acpi_gbl_cm_single_step; - - -/***************************************************************************** - * - * Parser globals - * - ****************************************************************************/ - -ACPI_EXTERN ACPI_PARSE_OBJECT *acpi_gbl_parsed_namespace_root; - -extern ACPI_OPCODE_INFO acpi_gbl_aml_op_info[]; -extern u8 acpi_gbl_aml_op_info_index[256]; - - -/***************************************************************************** - * - * Hardware globals - * - ****************************************************************************/ - -extern ACPI_C_STATE_HANDLER acpi_hw_cx_handlers[MAX_CX_STATES]; -extern u32 acpi_hw_active_cx_state; - - -/***************************************************************************** - * - * Event globals - * - ****************************************************************************/ - -ACPI_EXTERN ACPI_FIXED_EVENT_INFO acpi_gbl_fixed_event_handlers[NUM_FIXED_EVENTS]; - -ACPI_EXTERN ACPI_HANDLE acpi_gbl_gpe_obj_handle; -ACPI_EXTERN u32 acpi_gbl_gpe_register_count; -ACPI_EXTERN ACPI_GPE_REGISTERS *acpi_gbl_gpe_registers; -ACPI_EXTERN ACPI_GPE_LEVEL_INFO *acpi_gbl_gpe_info; - -/* - * Gpe validation and translation table - * Indexed by the GPE number, returns GPE_INVALID if the GPE is not supported. - * Otherwise, returns a valid index into the global GPE table. - * - * This table is needed because the GPE numbers supported by block 1 do not - * have to be contiguous with the GPE numbers supported by block 0. - */ -ACPI_EXTERN u8 acpi_gbl_gpe_valid [NUM_GPE]; - -/* Acpi_event counter for debug only */ - -#ifdef ACPI_DEBUG -ACPI_EXTERN u32 acpi_gbl_event_count[NUM_FIXED_EVENTS]; -#endif - - -/***************************************************************************** - * - * Debugger globals - * - ****************************************************************************/ - -ACPI_EXTERN u8 acpi_gbl_method_executing; -ACPI_EXTERN u8 acpi_gbl_db_terminate_threads; - - -/* Memory allocation metrics - Debug Only! */ - -#ifdef ACPI_DEBUG - -ACPI_EXTERN u32 acpi_gbl_current_alloc_size; -ACPI_EXTERN u32 acpi_gbl_current_alloc_count; -ACPI_EXTERN u32 acpi_gbl_running_alloc_size; -ACPI_EXTERN u32 acpi_gbl_running_alloc_count; -ACPI_EXTERN u32 acpi_gbl_max_concurrent_alloc_size; -ACPI_EXTERN u32 acpi_gbl_max_concurrent_alloc_count; -ACPI_EXTERN u32 acpi_gbl_current_object_count; -ACPI_EXTERN u32 acpi_gbl_current_object_size; -ACPI_EXTERN u32 acpi_gbl_max_concurrent_object_count; -ACPI_EXTERN u32 acpi_gbl_max_concurrent_object_size; -ACPI_EXTERN u32 acpi_gbl_running_object_count; -ACPI_EXTERN u32 acpi_gbl_running_object_size; -ACPI_EXTERN u32 acpi_gbl_current_node_count; -ACPI_EXTERN u32 acpi_gbl_current_node_size; -ACPI_EXTERN u32 acpi_gbl_max_concurrent_node_count; - -#endif - - -#endif /* __ACGLOBAL_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/achware.h linux-2.4.0-test9-lia/drivers/acpi/include/achware.h --- linux-2.4.0-test9/drivers/acpi/include/achware.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/achware.h Wed Dec 31 16:00:00 1969 @@ -1,169 +0,0 @@ -/****************************************************************************** - * - * Name: achware.h -- hardware specific interfaces - * $Revision: 41 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACHWARE_H__ -#define __ACHWARE_H__ - - -/* Prototypes */ - - -ACPI_STATUS -acpi_hw_initialize( - void); - -ACPI_STATUS -acpi_hw_shutdown( - void); - -ACPI_STATUS -acpi_hw_initialize_system_info( - void); - -ACPI_STATUS -acpi_hw_set_mode ( - u32 mode); - -u32 -acpi_hw_get_mode ( - void); - -u32 -acpi_hw_get_mode_capabilities ( - void); - -/* Register I/O Prototypes */ - -u32 -acpi_hw_register_access ( - NATIVE_UINT read_write, - u8 use_lock, - u32 register_id, ... /* DWORD Value */); - -void -acpi_hw_clear_acpi_status ( - void); - - -/* GPE support */ - -void -acpi_hw_enable_gpe ( - u32 gpe_index); - -void -acpi_hw_disable_gpe ( - u32 gpe_index); - -void -acpi_hw_clear_gpe ( - u32 gpe_index); - -void -acpi_hw_get_gpe_status ( - u32 gpe_number, - ACPI_EVENT_STATUS *event_status); - -/* Sleep Prototypes */ - -ACPI_STATUS -acpi_hw_obtain_sleep_type_register_data ( - u8 sleep_state, - u8 *slp_typ_a, - 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[]); - - -/* 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); - - -#endif /* __ACHWARE_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acinterp.h linux-2.4.0-test9-lia/drivers/acpi/include/acinterp.h --- linux-2.4.0-test9/drivers/acpi/include/acinterp.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acinterp.h Wed Dec 31 16:00:00 1969 @@ -1,526 +0,0 @@ -/****************************************************************************** - * - * Name: acinterp.h - Interpreter subcomponent prototypes and defines - * $Revision: 79 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACINTERP_H__ -#define __ACINTERP_H__ - - -#define WALK_OPERANDS &(walk_state->operands [walk_state->num_operands -1]) - - -/* Interpreter constants */ - -#define AML_END_OF_BLOCK -1 -#define PUSH_PKG_LENGTH 1 -#define DO_NOT_PUSH_PKG_LENGTH 0 - - -#define STACK_TOP 0 -#define STACK_BOTTOM (u32) -1 - -/* Constants for global "When_to_parse_methods" */ - -#define METHOD_PARSE_AT_INIT 0x0 -#define METHOD_PARSE_JUST_IN_TIME 0x1 -#define METHOD_DELETE_AT_COMPLETION 0x2 - - -ACPI_STATUS -acpi_aml_resolve_operands ( - u16 opcode, - ACPI_OPERAND_OBJECT **stack_ptr, - ACPI_WALK_STATE *walk_state); - - -/* - * amxface - External interpreter interfaces - */ - -ACPI_STATUS -acpi_aml_load_table ( - ACPI_TABLE_TYPE table_id); - -ACPI_STATUS -acpi_aml_execute_method ( - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_obj_desc); - - -/* - * amfield - ACPI AML (p-code) execution - field manipulation - */ - - -ACPI_STATUS -acpi_aml_read_field ( - ACPI_OPERAND_OBJECT *obj_desc, - void *buffer, - u32 buffer_length, - u32 byte_length, - u32 datum_length, - u32 bit_granularity, - u32 byte_granularity); - -ACPI_STATUS -acpi_aml_write_field ( - ACPI_OPERAND_OBJECT *obj_desc, - void *buffer, - u32 buffer_length, - u32 byte_length, - u32 datum_length, - u32 bit_granularity, - u32 byte_granularity); - -ACPI_STATUS -acpi_aml_setup_field ( - ACPI_OPERAND_OBJECT *obj_desc, - ACPI_OPERAND_OBJECT *rgn_desc, - u32 field_bit_width); - -ACPI_STATUS -acpi_aml_read_field_data ( - ACPI_OPERAND_OBJECT *obj_desc, - u32 field_byte_offset, - u32 field_bit_width, - u32 *value); - -ACPI_STATUS -acpi_aml_access_named_field ( - u32 mode, - ACPI_HANDLE named_field, - void *buffer, - u32 length); - -/* - * ammisc - ACPI AML (p-code) execution - specific opcodes - */ - -ACPI_STATUS -acpi_aml_exec_create_field ( - u16 opcode, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_exec_reconfiguration ( - u16 opcode, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_exec_fatal ( - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_exec_index ( - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc); - -ACPI_STATUS -acpi_aml_exec_match ( - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc); - -ACPI_STATUS -acpi_aml_exec_create_mutex ( - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_exec_create_processor ( - ACPI_PARSE_OBJECT *op, - ACPI_HANDLE processor_nTE); - -ACPI_STATUS -acpi_aml_exec_create_power_resource ( - ACPI_PARSE_OBJECT *op, - ACPI_HANDLE processor_nTE); - -ACPI_STATUS -acpi_aml_exec_create_region ( - u8 *aml_ptr, - u32 acpi_aml_length, - u32 region_space, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_exec_create_event ( - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_exec_create_alias ( - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_exec_create_method ( - u8 *aml_ptr, - u32 acpi_aml_length, - u32 method_flags, - ACPI_HANDLE method); - - -/* - * amprep - ACPI AML (p-code) execution - prep utilities - */ - -ACPI_STATUS -acpi_aml_prep_def_field_value ( - ACPI_NAMESPACE_NODE *node, - ACPI_HANDLE region, - u8 field_flags, - u8 field_attribute, - u32 field_position, - u32 field_length); - -ACPI_STATUS -acpi_aml_prep_bank_field_value ( - ACPI_NAMESPACE_NODE *node, - ACPI_HANDLE region, - ACPI_HANDLE bank_reg, - u32 bank_val, - u8 field_flags, - u8 field_attribute, - u32 field_position, - u32 field_length); - -ACPI_STATUS -acpi_aml_prep_index_field_value ( - ACPI_NAMESPACE_NODE *node, - ACPI_HANDLE index_reg, - ACPI_HANDLE data_reg, - u8 field_flags, - u8 field_attribute, - u32 field_position, - u32 field_length); - - -/* - * amsystem - Interface to OS services - */ - -u16 -acpi_aml_system_thread_id ( - void); - -ACPI_STATUS -acpi_aml_system_do_notify_op ( - ACPI_OPERAND_OBJECT *value, - ACPI_OPERAND_OBJECT *obj_desc); - -void -acpi_aml_system_do_suspend( - u32 time); - -void -acpi_aml_system_do_stall ( - u32 time); - -ACPI_STATUS -acpi_aml_system_acquire_mutex( - ACPI_OPERAND_OBJECT *time, - ACPI_OPERAND_OBJECT *obj_desc); - -ACPI_STATUS -acpi_aml_system_release_mutex( - ACPI_OPERAND_OBJECT *obj_desc); - -ACPI_STATUS -acpi_aml_system_signal_event( - ACPI_OPERAND_OBJECT *obj_desc); - -ACPI_STATUS -acpi_aml_system_wait_event( - ACPI_OPERAND_OBJECT *time, - ACPI_OPERAND_OBJECT *obj_desc); - -ACPI_STATUS -acpi_aml_system_reset_event( - ACPI_OPERAND_OBJECT *obj_desc); - -ACPI_STATUS -acpi_aml_system_wait_semaphore ( - ACPI_HANDLE semaphore, - u32 timeout); - - -/* - * ammonadic - ACPI AML (p-code) execution, monadic operators - */ - -ACPI_STATUS -acpi_aml_exec_monadic1 ( - u16 opcode, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_exec_monadic2 ( - u16 opcode, - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc); - -ACPI_STATUS -acpi_aml_exec_monadic2_r ( - u16 opcode, - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc); - - -/* - * amdyadic - ACPI AML (p-code) execution, dyadic operators - */ - -ACPI_STATUS -acpi_aml_exec_dyadic1 ( - u16 opcode, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_exec_dyadic2 ( - u16 opcode, - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc); - -ACPI_STATUS -acpi_aml_exec_dyadic2_r ( - u16 opcode, - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc); - -ACPI_STATUS -acpi_aml_exec_dyadic2_s ( - u16 opcode, - ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc); - - -/* - * amresolv - Object resolution and get value functions - */ - -ACPI_STATUS -acpi_aml_resolve_to_value ( - ACPI_OPERAND_OBJECT **stack_ptr, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_resolve_node_to_value ( - ACPI_NAMESPACE_NODE **stack_ptr); - -ACPI_STATUS -acpi_aml_resolve_object_to_value ( - ACPI_OPERAND_OBJECT **stack_ptr, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_get_field_unit_value ( - ACPI_OPERAND_OBJECT *field_desc, - ACPI_OPERAND_OBJECT *result_desc); - - -/* - * amdump - Scanner debug output routines - */ - -void -acpi_aml_show_hex_value ( - u32 byte_count, - u8 *aml_ptr, - u32 lead_space); - - -ACPI_STATUS -acpi_aml_dump_operand ( - ACPI_OPERAND_OBJECT *entry_desc); - -void -acpi_aml_dump_operands ( - ACPI_OPERAND_OBJECT **operands, - OPERATING_MODE interpreter_mode, - NATIVE_CHAR *ident, - u32 num_levels, - NATIVE_CHAR *note, - NATIVE_CHAR *module_name, - u32 line_number); - -void -acpi_aml_dump_object_descriptor ( - ACPI_OPERAND_OBJECT *object, - u32 flags); - - -void -acpi_aml_dump_node ( - ACPI_NAMESPACE_NODE *node, - u32 flags); - - -/* - * amnames - interpreter/scanner name load/execute - */ - -NATIVE_CHAR * -acpi_aml_allocate_name_string ( - u32 prefix_count, - u32 num_name_segs); - -u32 -acpi_aml_good_char ( - u32 character); - -ACPI_STATUS -acpi_aml_exec_name_segment ( - u8 **in_aml_address, - NATIVE_CHAR *name_string); - -ACPI_STATUS -acpi_aml_get_name_string ( - OBJECT_TYPE_INTERNAL data_type, - u8 *in_aml_address, - NATIVE_CHAR **out_name_string, - u32 *out_name_length); - -ACPI_STATUS -acpi_aml_do_name ( - ACPI_OBJECT_TYPE data_type, - OPERATING_MODE load_exec_mode); - - -/* - * amstore - Object store support - */ - -ACPI_STATUS -acpi_aml_exec_store ( - ACPI_OPERAND_OBJECT *val_desc, - ACPI_OPERAND_OBJECT *dest_desc, - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_aml_store_object_to_object ( - 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_NAMESPACE_NODE *node, - ACPI_WALK_STATE *walk_state); - - -/* - * amutils - interpreter/scanner utilities - */ - -void -acpi_aml_enter_interpreter ( - void); - -void -acpi_aml_exit_interpreter ( - void); - -u8 -acpi_aml_validate_object_type ( - ACPI_OBJECT_TYPE type); - -u8 -acpi_aml_acquire_global_lock ( - u32 rule); - -ACPI_STATUS -acpi_aml_release_global_lock ( - u8 locked); - -u32 -acpi_aml_buf_seq ( - void); - -u32 -acpi_aml_digits_needed ( - u32 value, - u32 base); - -ACPI_STATUS -acpi_aml_eisa_id_to_string ( - u32 numeric_id, - NATIVE_CHAR *out_string); - -ACPI_STATUS -acpi_aml_build_copy_internal_package_object ( - ACPI_OPERAND_OBJECT *source_obj, - ACPI_OPERAND_OBJECT *dest_obj, - ACPI_WALK_STATE *walk_state); - - -/* - * amregion - default Op_region handlers - */ - -ACPI_STATUS -acpi_aml_system_memory_space_handler ( - u32 function, - u32 address, - u32 bit_width, - u32 *value, - void *handler_context, - void *region_context); - -ACPI_STATUS -acpi_aml_system_io_space_handler ( - u32 function, - u32 address, - u32 bit_width, - u32 *value, - void *handler_context, - void *region_context); - -ACPI_STATUS -acpi_aml_pci_config_space_handler ( - u32 function, - u32 address, - u32 bit_width, - u32 *value, - void *handler_context, - void *region_context); - -ACPI_STATUS -acpi_aml_embedded_controller_space_handler ( - u32 function, - u32 address, - u32 bit_width, - u32 *value, - void *handler_context, - void *region_context); - -ACPI_STATUS -acpi_aml_sm_bus_space_handler ( - u32 function, - u32 address, - u32 bit_width, - u32 *value, - void *handler_context, - void *region_context); - - -#endif /* __INTERP_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/aclocal.h linux-2.4.0-test9-lia/drivers/acpi/include/aclocal.h --- linux-2.4.0-test9/drivers/acpi/include/aclocal.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/aclocal.h Wed Dec 31 16:00:00 1969 @@ -1,851 +0,0 @@ -/****************************************************************************** - * - * Name: aclocal.h - Internal data types used across the ACPI subsystem - * $Revision: 77 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACLOCAL_H__ -#define __ACLOCAL_H__ - - -#define WAIT_FOREVER ((u32) -1) - -typedef void* ACPI_MUTEX; -typedef u32 ACPI_MUTEX_HANDLE; - - -/* Object descriptor types */ - -#define ACPI_CACHED_OBJECT 0x11 /* ORed in when object is cached */ -#define ACPI_DESC_TYPE_STATE 0x22 -#define ACPI_DESC_TYPE_WALK 0x44 -#define ACPI_DESC_TYPE_PARSER 0x66 -#define ACPI_DESC_TYPE_INTERNAL 0x88 -#define ACPI_DESC_TYPE_NAMED 0xAA - - -/***************************************************************************** - * - * Mutex typedefs and structs - * - ****************************************************************************/ - - -/* - * Predefined handles for the mutex objects used within the subsystem - * All mutex objects are automatically created by Acpi_cm_mutex_initialize. - * NOTE: any changes here must be reflected in the Acpi_gbl_Mutex_names table also! - */ - -#define ACPI_MTX_HARDWARE 0 -#define ACPI_MTX_MEMORY 1 -#define ACPI_MTX_CACHES 2 -#define ACPI_MTX_TABLES 3 -#define ACPI_MTX_PARSER 4 -#define ACPI_MTX_DISPATCHER 5 -#define ACPI_MTX_INTERPRETER 6 -#define ACPI_MTX_EXECUTE 7 -#define ACPI_MTX_NAMESPACE 8 -#define ACPI_MTX_EVENTS 9 -#define ACPI_MTX_OP_REGIONS 10 -#define ACPI_MTX_DEBUG_CMD_READY 11 -#define ACPI_MTX_DEBUG_CMD_COMPLETE 12 - -#define MAX_MTX 12 -#define NUM_MTX MAX_MTX+1 - - -#ifdef ACPI_DEBUG -#ifdef DEFINE_ACPI_GLOBALS - -/* Names for the mutexes used in the subsystem */ - -static NATIVE_CHAR *acpi_gbl_mutex_names[] = -{ - "ACPI_MTX_Hardware", - "ACPI_MTX_Memory", - "ACPI_MTX_Caches", - "ACPI_MTX_Tables", - "ACPI_MTX_Parser", - "ACPI_MTX_Dispatcher", - "ACPI_MTX_Interpreter", - "ACPI_MTX_Execute", - "ACPI_MTX_Namespace", - "ACPI_MTX_Events", - "ACPI_MTX_Op_regions", - "ACPI_MTX_Debug_cmd_ready", - "ACPI_MTX_Debug_cmd_complete" -}; - -#endif -#endif - - -/* Table for the global mutexes */ - -typedef struct acpi_mutex_info -{ - ACPI_MUTEX mutex; - u32 use_count; - u8 locked; - -} ACPI_MUTEX_INFO; - - -/* Lock flag parameter for various interfaces */ - -#define ACPI_MTX_DO_NOT_LOCK 0 -#define ACPI_MTX_LOCK 1 - - -typedef u16 ACPI_OWNER_ID; -#define OWNER_TYPE_TABLE 0x0 -#define OWNER_TYPE_METHOD 0x1 -#define FIRST_METHOD_ID 0x0000 -#define FIRST_TABLE_ID 0x8000 - -/* TBD: [Restructure] get rid of the need for this! */ - -#define TABLE_ID_DSDT (ACPI_OWNER_ID) 0xD1D1 - -/***************************************************************************** - * - * Namespace typedefs and structs - * - ****************************************************************************/ - - -/* Operational modes of the AML interpreter/scanner */ - -typedef enum -{ - IMODE_LOAD_PASS1 = 0x01, - IMODE_LOAD_PASS2 = 0x02, - IMODE_EXECUTE = 0x0E - -} OPERATING_MODE; - - -/* - * The Node describes a named object that appears in the AML - * An Acpi_node is used to store Nodes. - * - * Data_type is used to differentiate between internal descriptors, and MUST - * be the first byte in this structure. - */ - -typedef struct acpi_node -{ - u8 data_type; - u8 type; /* Type associated with this name */ - u32 name; /* ACPI Name, always 4 chars per ACPI spec */ - u16 owner_id; - - - void *object; /* Pointer to attached ACPI object (optional) */ - struct acpi_node *child; /* first child */ - struct acpi_node *peer; /* Next peer*/ - u16 reference_count; /* Current count of references and children */ - u8 flags; - -} ACPI_NAMESPACE_NODE; - - -#define ENTRY_NOT_FOUND NULL - - -/* Node flags */ - -#define ANOBJ_AML_ATTACHMENT 0x1 -#define ANOBJ_END_OF_PEER_LIST 0x2 - - -/* - * ACPI Table Descriptor. One per ACPI table - */ -typedef struct acpi_table_desc -{ - struct acpi_table_desc *prev; - struct acpi_table_desc *next; - struct acpi_table_desc *installed_desc; - ACPI_TABLE_HEADER *pointer; - void *base_pointer; - u8 *aml_pointer; - u32 aml_length; - u32 length; - u32 count; - ACPI_OWNER_ID table_id; - u8 type; - u8 allocation; - u8 loaded_into_namespace; - -} ACPI_TABLE_DESC; - - -typedef struct -{ - NATIVE_CHAR *search_for; - ACPI_HANDLE *list; - u32 *count; - -} FIND_CONTEXT; - - -typedef struct -{ - ACPI_NAMESPACE_NODE *node; -} NS_SEARCH_DATA; - - -/* - * Predefined Namespace items - */ -#define ACPI_MAX_ADDRESS_SPACE 255 -#define ACPI_NUM_ADDRESS_SPACES 256 - - -typedef struct -{ - NATIVE_CHAR *name; - ACPI_OBJECT_TYPE type; - NATIVE_CHAR *val; - -} PREDEFINED_NAMES; - - -/***************************************************************************** - * - * Event typedefs and structs - * - ****************************************************************************/ - - -/* Status bits. */ - -#define ACPI_STATUS_PMTIMER 0x0001 -#define ACPI_STATUS_GLOBAL 0x0020 -#define ACPI_STATUS_POWER_BUTTON 0x0100 -#define ACPI_STATUS_SLEEP_BUTTON 0x0200 -#define ACPI_STATUS_RTC_ALARM 0x0400 - -/* Enable bits. */ - -#define ACPI_ENABLE_PMTIMER 0x0001 -#define ACPI_ENABLE_GLOBAL 0x0020 -#define ACPI_ENABLE_POWER_BUTTON 0x0100 -#define ACPI_ENABLE_SLEEP_BUTTON 0x0200 -#define ACPI_ENABLE_RTC_ALARM 0x0400 - - -/* - * Entry in the Address_space (AKA Operation Region) table - */ - -typedef struct -{ - ADDRESS_SPACE_HANDLER handler; - void *context; - -} ACPI_ADDRESS_SPACE_INFO; - - -/* Values and addresses of the GPE registers (both banks) */ - -typedef struct -{ - u8 status; /* Current value of status reg */ - u8 enable; /* Current value of enable reg */ - u16 status_addr; /* Address of status reg */ - u16 enable_addr; /* Address of enable reg */ - u8 gpe_base; /* Base GPE number */ - -} ACPI_GPE_REGISTERS; - - -#define ACPI_GPE_LEVEL_TRIGGERED 1 -#define ACPI_GPE_EDGE_TRIGGERED 2 - - -/* Information about each particular GPE level */ - -typedef struct -{ - u8 type; /* Level or Edge */ - - ACPI_HANDLE method_handle; /* Method handle for direct (fast) execution */ - GPE_HANDLER handler; /* Address of handler, if any */ - void *context; /* Context to be passed to handler */ - -} ACPI_GPE_LEVEL_INFO; - - -/* Information about each particular fixed event */ - -typedef struct -{ - FIXED_EVENT_HANDLER handler; /* Address of handler. */ - void *context; /* Context to be passed to handler */ - -} ACPI_FIXED_EVENT_INFO; - - -/* Information used during field processing */ - -typedef struct -{ - u8 skip_field; - u8 field_flag; - u32 pkg_length; - -} ACPI_FIELD_INFO; - - -/***************************************************************************** - * - * Generic "state" object for stacks - * - ****************************************************************************/ - - -#define CONTROL_NORMAL 0xC0 -#define CONTROL_CONDITIONAL_EXECUTING 0xC1 -#define CONTROL_PREDICATE_EXECUTING 0xC2 -#define CONTROL_PREDICATE_FALSE 0xC3 -#define CONTROL_PREDICATE_TRUE 0xC4 - - -/* Forward declaration */ -struct acpi_walk_state; -struct acpi_parse_obj ; - - -#define ACPI_STATE_COMMON /* Two 32-bit fields and a pointer */\ - u8 data_type; /* To differentiate various internal objs */\ - u8 flags; \ - u16 value; \ - u16 state; \ - u16 acpi_eval; \ - void *next; \ - -typedef struct acpi_common_state -{ - ACPI_STATE_COMMON -} ACPI_COMMON_STATE; - - -/* - * Update state - used to traverse complex objects such as packages - */ -typedef struct acpi_update_state -{ - ACPI_STATE_COMMON - union acpi_operand_obj *object; - -} ACPI_UPDATE_STATE; - -/* - * Control state - one per if/else and while constructs. - * Allows nesting of these constructs - */ -typedef struct acpi_control_state -{ - ACPI_STATE_COMMON - struct acpi_parse_obj *predicate_op; - u8 *aml_predicate_start; /* Start of if/while predicate */ - -} ACPI_CONTROL_STATE; - - -/* - * Scope state - current scope during namespace lookups - */ - -typedef struct acpi_scope_state -{ - ACPI_STATE_COMMON - ACPI_NAMESPACE_NODE *node; - -} ACPI_SCOPE_STATE; - - -typedef struct acpi_pscope_state -{ - ACPI_STATE_COMMON - struct acpi_parse_obj *op; /* current op being parsed */ - u8 *arg_end; /* current argument end */ - u8 *pkg_end; /* current package end */ - u32 arg_list; /* next argument to parse */ - u32 arg_count; /* Number of fixed arguments */ - -} ACPI_PSCOPE_STATE; - - -typedef union acpi_gen_state -{ - ACPI_COMMON_STATE common; - ACPI_CONTROL_STATE control; - ACPI_UPDATE_STATE update; - ACPI_SCOPE_STATE scope; - ACPI_PSCOPE_STATE parse_scope; - -} ACPI_GENERIC_STATE; - - -typedef -ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) ( - u16 opcode, - struct acpi_parse_obj *op, - struct acpi_walk_state *walk_state, - struct acpi_parse_obj **out_op); - -typedef -ACPI_STATUS (*ACPI_PARSE_UPWARDS) ( - struct acpi_walk_state *walk_state, - struct acpi_parse_obj *op); - - -/***************************************************************************** - * - * Parser typedefs and structs - * - ****************************************************************************/ - - -#define ACPI_OP_CLASS_MASK 0x1F -#define ACPI_OP_ARGS_MASK 0x20 -#define ACPI_OP_TYPE_MASK 0xC0 - -#define ACPI_OP_TYPE_OPCODE 0x00 -#define ACPI_OP_TYPE_ASCII 0x40 -#define ACPI_OP_TYPE_PREFIX 0x80 -#define ACPI_OP_TYPE_UNKNOWN 0xC0 - -#define ACPI_GET_OP_CLASS(a) ((a)->flags & ACPI_OP_CLASS_MASK) -#define ACPI_GET_OP_ARGS(a) ((a)->flags & ACPI_OP_ARGS_MASK) -#define ACPI_GET_OP_TYPE(a) ((a)->flags & ACPI_OP_TYPE_MASK) - - -/* - * AML opcode, name, and argument layout - */ -typedef struct acpi_opcode_info -{ - u8 flags; /* Opcode type, Has_args flag */ - u32 parse_args; /* Grammar/Parse time arguments */ - u32 runtime_args; /* Interpret time arguments */ - - DEBUG_ONLY_MEMBERS ( - NATIVE_CHAR *name) /* op name (debug only) */ - -} ACPI_OPCODE_INFO; - - -typedef union acpi_parse_val -{ - u32 integer; /* integer constant */ - u32 size; /* bytelist or field size */ - NATIVE_CHAR *string; /* NULL terminated string */ - u8 *buffer; /* buffer or string */ - NATIVE_CHAR *name; /* NULL terminated string */ - struct acpi_parse_obj *arg; /* arguments and contained ops */ - -} ACPI_PARSE_VALUE; - - -#define ACPI_PARSE_COMMON \ - u8 data_type; /* To differentiate various internal objs */\ - u8 flags; /* Type of Op */\ - u16 opcode; /* AML opcode */\ - u32 aml_offset; /* offset of declaration in AML */\ - struct acpi_parse_obj *parent; /* parent op */\ - struct acpi_parse_obj *next; /* next op */\ - DEBUG_ONLY_MEMBERS (\ - NATIVE_CHAR op_name[16]) /* op name (debug only) */\ - /* NON-DEBUG members below: */\ - ACPI_NAMESPACE_NODE *node;/* for use by interpreter */\ - ACPI_PARSE_VALUE value; /* Value or args associated with the opcode */\ - - -/* - * generic operation (eg. If, While, Store) - */ -typedef struct acpi_parse_obj -{ - ACPI_PARSE_COMMON -} ACPI_PARSE_OBJECT; - - -/* - * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and Op_regions), - * and bytelists. - */ -typedef struct acpi_parse2_obj -{ - ACPI_PARSE_COMMON - u8 *data; /* AML body or bytelist data */ - u32 length; /* AML length */ - u32 name; /* 4-byte name or zero if no name */ - -} ACPI_PARSE2_OBJECT; - - -/* - * Parse state - one state per parser invocation and each control - * method. - */ - -typedef struct acpi_parse_state -{ - u8 *aml_start; /* first AML byte */ - u8 *aml; /* next AML byte */ - u8 *aml_end; /* (last + 1) AML byte */ - u8 *pkg_start; /* current package begin */ - u8 *pkg_end; /* current package end */ - ACPI_PARSE_OBJECT *start_op; /* root of parse tree */ - struct acpi_node *start_node; - ACPI_GENERIC_STATE *scope; /* current scope */ - struct acpi_parse_state *next; - -} ACPI_PARSE_STATE; - - -/***************************************************************************** - * - * Tree walking typedefs and structs - * - ****************************************************************************/ - - -/* - * Walk state - current state of a parse tree walk. Used for both a leisurely stroll through - * the tree (for whatever reason), and for control method execution. - */ - -#define NEXT_OP_DOWNWARD 1 -#define NEXT_OP_UPWARD 2 - -#define WALK_METHOD 1 -#define WALK_NON_METHOD 0 - -typedef struct acpi_walk_state -{ - u8 data_type; /* To differentiate various internal objs */\ - ACPI_OWNER_ID owner_id; /* Owner of objects created during the walk */ - u8 last_predicate; /* Result of last predicate */ - u8 next_op_info; /* Info about Next_op */ - u8 num_operands; /* Stack pointer for Operands[] array */ - u8 num_results; /* Stack pointer for Results[] array */ - u8 current_result; /* */ - - struct acpi_walk_state *next; /* Next Walk_state in list */ - ACPI_PARSE_OBJECT *origin; /* Start of walk */ - -/* TBD: Obsolete with removal of WALK procedure ? */ - ACPI_PARSE_OBJECT *prev_op; /* Last op that was processed */ - ACPI_PARSE_OBJECT *next_op; /* next op to be processed */ - - - ACPI_GENERIC_STATE *control_state; /* List of control states (nested IFs) */ - ACPI_GENERIC_STATE *scope_info; /* Stack of nested scopes */ - ACPI_PARSE_STATE *parser_state; /* Current state of parser */ - u8 *aml_last_while; - ACPI_PARSE_DOWNWARDS descending_callback; - ACPI_PARSE_UPWARDS ascending_callback; - - union acpi_operand_obj *return_desc; /* Return object, if any */ - union acpi_operand_obj *method_desc; /* Method descriptor if running a method */ - struct acpi_node *method_node; /* Method Node if running a method */ - ACPI_PARSE_OBJECT *method_call_op; /* Method_call Op if running a method */ - struct acpi_node *method_call_node; /* Called method Node*/ - union acpi_operand_obj *operands[OBJ_NUM_OPERANDS]; /* Operands passed to the interpreter */ - union acpi_operand_obj *results[OBJ_NUM_OPERANDS]; /* Accumulated results */ - struct acpi_node arguments[MTH_NUM_ARGS]; /* Control method arguments */ - struct acpi_node local_variables[MTH_NUM_LOCALS]; /* Control method locals */ - u32 parse_flags; - u8 walk_type; - u8 return_used; - u32 prev_arg_types; - - /* Debug support */ - - u32 method_breakpoint; - - -} ACPI_WALK_STATE; - - -/* - * Walk list - head of a tree of walk states. Multiple walk states are created when there - * are nested control methods executing. - */ -typedef struct acpi_walk_list -{ - - ACPI_WALK_STATE *walk_state; - -} ACPI_WALK_LIST; - - -/* Info used by Acpi_ps_init_objects */ - -typedef struct init_walk_info -{ - u32 method_count; - u32 op_region_count; - ACPI_TABLE_DESC *table_desc; - -} INIT_WALK_INFO; - - -/* TBD: [Restructure] Merge with struct above */ - -typedef struct acpi_walk_info -{ - u32 debug_level; - u32 owner_id; - -} ACPI_WALK_INFO; - - -/***************************************************************************** - * - * Hardware and PNP - * - ****************************************************************************/ - - -/* Sleep states */ - -#define SLWA_DEBUG_LEVEL 4 -#define GTS_CALL 0 -#define GTS_WAKE 1 - -/* Cx States */ - -#define MAX_CX_STATE_LATENCY 0xFFFFFFFF -#define MAX_CX_STATES 4 - -/* - * The #define's and enum below establish an abstract way of identifying what - * register block and register is to be accessed. Do not change any of the - * values as they are used in switch statements and offset calculations. - */ - -#define REGISTER_BLOCK_MASK 0xFF00 -#define BIT_IN_REGISTER_MASK 0x00FF -#define PM1_EVT 0x0100 -#define PM1_CONTROL 0x0200 -#define PM2_CONTROL 0x0300 -#define PM_TIMER 0x0400 -#define PROCESSOR_BLOCK 0x0500 -#define GPE0_STS_BLOCK 0x0600 -#define GPE0_EN_BLOCK 0x0700 -#define GPE1_STS_BLOCK 0x0800 -#define GPE1_EN_BLOCK 0x0900 - -enum -{ - /* PM1 status register ids */ - - TMR_STS = (PM1_EVT | 0x01), - BM_STS, - GBL_STS, - PWRBTN_STS, - SLPBTN_STS, - RTC_STS, - WAK_STS, - - /* PM1 enable register ids */ - - TMR_EN, - /* need to skip 1 enable number since there's no bus master enable register */ - GBL_EN = (PM1_EVT | 0x0A), - PWRBTN_EN, - SLPBTN_EN, - RTC_EN, - - /* PM1 control register ids */ - - SCI_EN = (PM1_CONTROL | 0x01), - BM_RLD, - GBL_RLS, - SLP_TYPE_A, - SLP_TYPE_B, - SLP_EN, - - /* PM2 control register ids */ - - ARB_DIS = (PM2_CONTROL | 0x01), - - /* PM Timer register ids */ - - TMR_VAL = (PM_TIMER | 0x01), - - GPE0_STS = (GPE0_STS_BLOCK | 0x01), - GPE0_EN = (GPE0_EN_BLOCK | 0x01), - - GPE1_STS = (GPE1_STS_BLOCK | 0x01), - GPE1_EN = (GPE0_EN_BLOCK | 0x01), - - /* Last register value is one less than LAST_REG */ - - LAST_REG -}; - - -#define TMR_STS_MASK 0x0001 -#define BM_STS_MASK 0x0010 -#define GBL_STS_MASK 0x0020 -#define PWRBTN_STS_MASK 0x0100 -#define SLPBTN_STS_MASK 0x0200 -#define RTC_STS_MASK 0x0400 -#define WAK_STS_MASK 0x8000 - -#define ALL_FIXED_STS_BITS (TMR_STS_MASK | BM_STS_MASK | GBL_STS_MASK | PWRBTN_STS_MASK | \ - SLPBTN_STS_MASK | RTC_STS_MASK | WAK_STS_MASK) - -#define TMR_EN_MASK 0x0001 -#define GBL_EN_MASK 0x0020 -#define PWRBTN_EN_MASK 0x0100 -#define SLPBTN_EN_MASK 0x0200 -#define RTC_EN_MASK 0x0400 - -#define SCI_EN_MASK 0x0001 -#define BM_RLD_MASK 0x0002 -#define GBL_RLS_MASK 0x0004 -#define SLP_TYPE_X_MASK 0x1C00 -#define SLP_EN_MASK 0x2000 - -#define ARB_DIS_MASK 0x0001 - -#define GPE0_STS_MASK -#define GPE0_EN_MASK - -#define GPE1_STS_MASK -#define GPE1_EN_MASK - - -#define ACPI_READ 1 -#define ACPI_WRITE 2 - -#define LOW_BYTE 0x00FF -#define ONE_BYTE 0x08 - -#ifndef SET - #define SET 1 -#endif -#ifndef CLEAR - #define CLEAR 0 -#endif - - -/* Plug and play */ - -/* Pnp and ACPI data */ - -#define VERSION_NO 0x01 -#define LOGICAL_DEVICE_ID 0x02 -#define COMPATIBLE_DEVICE_ID 0x03 -#define IRQ_FORMAT 0x04 -#define DMA_FORMAT 0x05 -#define START_DEPENDENT_TAG 0x06 -#define END_DEPENDENT_TAG 0x07 -#define IO_PORT_DESCRIPTOR 0x08 -#define FIXED_LOCATION_IO_DESCRIPTOR 0x09 -#define RESERVED_TYPE0 0x0A -#define RESERVED_TYPE1 0x0B -#define RESERVED_TYPE2 0x0C -#define RESERVED_TYPE3 0x0D -#define SMALL_VENDOR_DEFINED 0x0E -#define END_TAG 0x0F - -/* Pnp and ACPI data */ - -#define MEMORY_RANGE_24 0x81 -#define ISA_MEMORY_RANGE 0x81 -#define LARGE_VENDOR_DEFINED 0x84 -#define EISA_MEMORY_RANGE 0x85 -#define MEMORY_RANGE_32 0x85 -#define FIXED_EISA_MEMORY_RANGE 0x86 -#define FIXED_MEMORY_RANGE_32 0x86 - -/* ACPI only data */ - -#define DWORD_ADDRESS_SPACE 0x87 -#define WORD_ADDRESS_SPACE 0x88 -#define EXTENDED_IRQ 0x89 - -/* MUST HAVES */ - - -typedef enum -{ - DWORD_DEVICE_ID, - STRING_PTR_DEVICE_ID, - STRING_DEVICE_ID - -} DEVICE_ID_TYPE; - -typedef struct -{ - DEVICE_ID_TYPE type; - union - { - u32 number; - NATIVE_CHAR *string_ptr; - NATIVE_CHAR buffer[9]; - } data; - -} DEVICE_ID; - - -/***************************************************************************** - * - * Debug - * - ****************************************************************************/ - - -/* Entry for a memory allocation (debug only) */ - -#ifdef ACPI_DEBUG - -#define MEM_MALLOC 0 -#define MEM_CALLOC 1 -#define MAX_MODULE_NAME 16 - -typedef struct allocation_info -{ - struct allocation_info *previous; - struct allocation_info *next; - void *address; - u32 size; - u32 component; - u32 line; - NATIVE_CHAR module[MAX_MODULE_NAME]; - u8 alloc_type; - -} ALLOCATION_INFO; - -#endif - -#endif /* __ACLOCAL_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acmacros.h linux-2.4.0-test9-lia/drivers/acpi/include/acmacros.h --- linux-2.4.0-test9/drivers/acpi/include/acmacros.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acmacros.h Wed Dec 31 16:00:00 1969 @@ -1,435 +0,0 @@ -/****************************************************************************** - * - * Name: acmacros.h - C macros for the entire subsystem. - * $Revision: 48 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACMACROS_H__ -#define __ACMACROS_H__ - -/* - * Data manipulation macros - */ - -#ifndef LOWORD -#define LOWORD(l) ((u16)(NATIVE_UINT)(l)) -#endif - -#ifndef HIWORD -#define HIWORD(l) ((u16)((((NATIVE_UINT)(l)) >> 16) & 0xFFFF)) -#endif - -#ifndef LOBYTE -#define LOBYTE(l) ((u8)(u16)(l)) -#endif - -#ifndef HIBYTE -#define HIBYTE(l) ((u8)((((u16)(l)) >> 8) & 0xFF)) -#endif - -#define BIT0(x) ((((x) & 0x01) > 0) ? 1 : 0) -#define BIT1(x) ((((x) & 0x02) > 0) ? 1 : 0) -#define BIT2(x) ((((x) & 0x04) > 0) ? 1 : 0) - -#define BIT3(x) ((((x) & 0x08) > 0) ? 1 : 0) -#define BIT4(x) ((((x) & 0x10) > 0) ? 1 : 0) -#define BIT5(x) ((((x) & 0x20) > 0) ? 1 : 0) -#define BIT6(x) ((((x) & 0x40) > 0) ? 1 : 0) -#define BIT7(x) ((((x) & 0x80) > 0) ? 1 : 0) - -#define LOW_BASE(w) ((u16) ((w) & 0x0000FFFF)) -#define MID_BASE(b) ((u8) (((b) & 0x00FF0000) >> 16)) -#define HI_BASE(b) ((u8) (((b) & 0xFF000000) >> 24)) -#define LOW_LIMIT(w) ((u16) ((w) & 0x0000FFFF)) -#define HI_LIMIT(b) ((u8) (((b) & 0x00FF0000) >> 16)) - - - /* - * Extract a byte of data using a pointer. Any more than a byte and we - * get into potential aligment issues -- see the STORE macros below - */ -#define GET8(addr) (*(u8*)(addr)) - - -/* - * Macros for moving data around to/from buffers that are possibly unaligned. - * If the hardware supports the transfer of unaligned data, just do the store. - * Otherwise, we have to move one byte at a time. - */ - -#ifdef _HW_ALIGNMENT_SUPPORT - -/* The hardware supports unaligned transfers, just do the move */ - -#define MOVE_UNALIGNED16_TO_16(d,s) *(u16*)(d) = *(u16*)(s) -#define MOVE_UNALIGNED32_TO_32(d,s) *(u32*)(d) = *(u32*)(s) -#define MOVE_UNALIGNED16_TO_32(d,s) *(u32*)(d) = *(u16*)(s) - -#else -/* - * The hardware does not support unaligned transfers. We must move the - * data one byte at a time. These macros work whether the source or - * the destination (or both) is/are unaligned. - */ - -#define MOVE_UNALIGNED16_TO_16(d,s) {((u8 *)(d))[0] = ((u8 *)(s))[0];\ - ((u8 *)(d))[1] = ((u8 *)(s))[1];} - -#define MOVE_UNALIGNED32_TO_32(d,s) {((u8 *)(d))[0] = ((u8 *)(s))[0];\ - ((u8 *)(d))[1] = ((u8 *)(s))[1];\ - ((u8 *)(d))[2] = ((u8 *)(s))[2];\ - ((u8 *)(d))[3] = ((u8 *)(s))[3];} - -#define MOVE_UNALIGNED16_TO_32(d,s) {(*(u32*)(d)) = 0; MOVE_UNALIGNED16_TO_16(d,s);} - -#endif - - -/* - * Fast power-of-two math macros for non-optimized compilers - */ - -#define _DIV(value,power_of2) ((u32) ((value) >> (power_of2))) -#define _MUL(value,power_of2) ((u32) ((value) << (power_of2))) -#define _MOD(value,divisor) ((u32) ((value) & ((divisor) -1))) - -#define DIV_2(a) _DIV(a,1) -#define MUL_2(a) _MUL(a,1) -#define MOD_2(a) _MOD(a,2) - -#define DIV_4(a) _DIV(a,2) -#define MUL_4(a) _MUL(a,2) -#define MOD_4(a) _MOD(a,4) - -#define DIV_8(a) _DIV(a,3) -#define MUL_8(a) _MUL(a,3) -#define MOD_8(a) _MOD(a,8) - -#define DIV_16(a) _DIV(a,4) -#define MUL_16(a) _MUL(a,4) -#define MOD_16(a) _MOD(a,16) - - -/* - * Rounding macros (Power of two boundaries only) - */ - -#define ROUND_DOWN(value,boundary) ((value) & (~((boundary)-1))) -#define ROUND_UP(value,boundary) (((value) + ((boundary)-1)) & (~((boundary)-1))) - -#define ROUND_DOWN_TO_32_BITS(a) ROUND_DOWN(a,4) -#define ROUND_DOWN_TO_NATIVE_WORD(a) ROUND_DOWN(a,ALIGNED_ADDRESS_BOUNDARY) - -#define ROUND_UP_TO_32_bITS(a) ROUND_UP(a,4) -#define ROUND_UP_TO_NATIVE_WORD(a) ROUND_UP(a,ALIGNED_ADDRESS_BOUNDARY) - - -#ifdef DEBUG_ASSERT -#undef DEBUG_ASSERT -#endif - - -/* - * An ACPI_HANDLE (which is actually an ACPI_NAMESPACE_NODE *) can appear in some contexts, - * such as on ap_obj_stack, where a pointer to an ACPI_OPERAND_OBJECT can also - * appear. This macro is used to distinguish them. - * - * The Data_type field is the first field in both structures. - */ - -#define VALID_DESCRIPTOR_TYPE(d,t) (((ACPI_NAMESPACE_NODE *)d)->data_type == t) - - -/* Macro to test the object type */ - -#define IS_THIS_OBJECT_TYPE(d,t) (((ACPI_OPERAND_OBJECT *)d)->common.type == (u8)t) - -/* Macro to check the table flags for SINGLE or MULTIPLE tables are allowed */ - -#define IS_SINGLE_TABLE(x) (((x) & 0x01) == ACPI_TABLE_SINGLE ? 1 : 0) - -/* - * Macro to check if a pointer is within an ACPI table. - * Parameter (a) is the pointer to check. Parameter (b) must be defined - * as a pointer to an ACPI_TABLE_HEADER. (b+1) then points past the header, - * and ((u8 *)b+b->Length) points one byte past the end of the table. - */ - -#ifndef _IA16 -#define IS_IN_ACPI_TABLE(a,b) (((u8 *)(a) >= (u8 *)(b + 1)) &&\ - ((u8 *)(a) < ((u8 *)b + b->length))) - -#else -#define IS_IN_ACPI_TABLE(a,b) (_segment)(a) == (_segment)(b) &&\ - (((u8 *)(a) >= (u8 *)(b + 1)) &&\ - ((u8 *)(a) < ((u8 *)b + b->length))) -#endif - -/* - * Macros for the master AML opcode table - */ - -#ifdef ACPI_DEBUG -#define OP_INFO_ENTRY(flags,name,Pargs,Iargs) {flags,Pargs,Iargs,name} -#else -#define OP_INFO_ENTRY(flags,name,Pargs,Iargs) {flags,Pargs,Iargs} -#endif - -#define ARG_TYPE_WIDTH 5 -#define ARG_1(x) ((u32)(x)) -#define ARG_2(x) ((u32)(x) << (1 * ARG_TYPE_WIDTH)) -#define ARG_3(x) ((u32)(x) << (2 * ARG_TYPE_WIDTH)) -#define ARG_4(x) ((u32)(x) << (3 * ARG_TYPE_WIDTH)) -#define ARG_5(x) ((u32)(x) << (4 * ARG_TYPE_WIDTH)) -#define ARG_6(x) ((u32)(x) << (5 * ARG_TYPE_WIDTH)) - -#define ARGI_LIST1(a) (ARG_1(a)) -#define ARGI_LIST2(a,b) (ARG_1(b)|ARG_2(a)) -#define ARGI_LIST3(a,b,c) (ARG_1(c)|ARG_2(b)|ARG_3(a)) -#define ARGI_LIST4(a,b,c,d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a)) -#define ARGI_LIST5(a,b,c,d,e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a)) -#define ARGI_LIST6(a,b,c,d,e,f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a)) - -#define ARGP_LIST1(a) (ARG_1(a)) -#define ARGP_LIST2(a,b) (ARG_1(a)|ARG_2(b)) -#define ARGP_LIST3(a,b,c) (ARG_1(a)|ARG_2(b)|ARG_3(c)) -#define ARGP_LIST4(a,b,c,d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)) -#define ARGP_LIST5(a,b,c,d,e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)) -#define ARGP_LIST6(a,b,c,d,e,f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f)) - -#define GET_CURRENT_ARG_TYPE(list) (list & 0x1F) -#define INCREMENT_ARG_LIST(list) (list >>= ARG_TYPE_WIDTH) - - -/* - * Reporting macros that are never compiled out - */ - -/* - * Error reporting. These versions add callers module and line#. Since - * _THIS_MODULE gets compiled out when ACPI_DEBUG isn't defined, only - * use it in debug mode. - */ - -#ifdef ACPI_DEBUG - -#define REPORT_INFO(a) _report_info(_THIS_MODULE,__LINE__,_COMPONENT,a) -#define REPORT_ERROR(a) _report_error(_THIS_MODULE,__LINE__,_COMPONENT,a) -#define REPORT_WARNING(a) _report_warning(_THIS_MODULE,__LINE__,_COMPONENT,a) - -#else - -#define REPORT_INFO(a) _report_info("",__LINE__,_COMPONENT,a) -#define REPORT_ERROR(a) _report_error("",__LINE__,_COMPONENT,a) -#define REPORT_WARNING(a) _report_warning("",__LINE__,_COMPONENT,a) - -#endif - -/* Error reporting. These versions pass thru the module and line# */ - -#define _REPORT_INFO(a,b,c,d) _report_info(a,b,c,d) -#define _REPORT_ERROR(a,b,c,d) _report_error(a,b,c,d) -#define _REPORT_WARNING(a,b,c,d) _report_warning(a,b,c,d) - -/* Buffer dump macros */ - -#define DUMP_BUFFER(a,b) acpi_cm_dump_buffer((u8 *)a,b,DB_BYTE_DISPLAY,_COMPONENT) - -/* - * Debug macros that are conditionally compiled - */ - -#ifdef ACPI_DEBUG - -#define MODULE_NAME(name) static char *_THIS_MODULE = name; - -/* - * Function entry tracing. - * The first parameter should be the procedure name as a quoted string. This is declared - * as a local string ("_Proc_name) so that it can be also used by the function exit macros below. - */ - -#define FUNCTION_TRACE(a) char * _proc_name = a;\ - function_trace(_THIS_MODULE,__LINE__,_COMPONENT,a) -#define FUNCTION_TRACE_PTR(a,b) char * _proc_name = a;\ - function_trace_ptr(_THIS_MODULE,__LINE__,_COMPONENT,a,(void *)b) -#define FUNCTION_TRACE_U32(a,b) char * _proc_name = a;\ - function_trace_u32(_THIS_MODULE,__LINE__,_COMPONENT,a,(u32)b) -#define FUNCTION_TRACE_STR(a,b) char * _proc_name = a;\ - function_trace_str(_THIS_MODULE,__LINE__,_COMPONENT,a,(NATIVE_CHAR *)b) -/* - * Function exit tracing. - * WARNING: These macros include a return statement. This is usually considered - * bad form, but having a separate exit macro is very ugly and difficult to maintain. - * One of the FUNCTION_TRACE macros above must be used in conjunction with these macros - * so that "_Proc_name" is defined. - */ -#define return_VOID {function_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name);return;} -#define return_ACPI_STATUS(s) {function_status_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name,s);return(s);} -#define return_VALUE(s) {function_value_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name,(NATIVE_UINT)s);return(s);} -#define return_PTR(s) {function_ptr_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name,(u8 *)s);return(s);} - - -/* Conditional execution */ - -#define DEBUG_EXEC(a) a; -#define NORMAL_EXEC(a) - -#define DEBUG_DEFINE(a) a; -#define DEBUG_ONLY_MEMBERS(a) a; - - -/* Stack and buffer dumping */ - -#define DUMP_STACK_ENTRY(a) acpi_aml_dump_operand(a) -#define DUMP_OPERANDS(a,b,c,d,e) acpi_aml_dump_operands(a,b,c,d,e,_THIS_MODULE,__LINE__) - - -#define DUMP_ENTRY(a,b) acpi_ns_dump_entry (a,b) -#define DUMP_TABLES(a,b) acpi_ns_dump_tables(a,b) -#define DUMP_PATHNAME(a,b,c,d) acpi_ns_dump_pathname(a,b,c,d) -#define DUMP_RESOURCE_LIST(a) acpi_rs_dump_resource_list(a) -#define BREAK_MSG(a) acpi_os_breakpoint (a) - -/* - * Generate INT3 on ACPI_ERROR (Debug only!) - */ - -#define ERROR_BREAK -#ifdef ERROR_BREAK -#define BREAK_ON_ERROR(lvl) if ((lvl)&ACPI_ERROR) acpi_os_breakpoint("Fatal error encountered\n") -#else -#define BREAK_ON_ERROR(lvl) -#endif - -/* - * Master debug print macros - * Print iff: - * 1) Debug print for the current component is enabled - * 2) Debug error level or trace level for the print statement is enabled - * - */ - -#define PARAM_LIST(pl) pl - -#define TEST_DEBUG_SWITCH(lvl) if (((lvl) & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer)) - -#define DEBUG_PRINT(lvl,fp) TEST_DEBUG_SWITCH(lvl) {\ - debug_print_prefix (_THIS_MODULE,__LINE__);\ - debug_print_raw PARAM_LIST(fp);\ - BREAK_ON_ERROR(lvl);} - -#define DEBUG_PRINT_RAW(lvl,fp) TEST_DEBUG_SWITCH(lvl) {\ - debug_print_raw PARAM_LIST(fp);} - - -/* Assert macros */ - -#define ACPI_ASSERT(exp) if(!(exp)) \ - acpi_os_dbg_assert(#exp, __FILE__, __LINE__, "Failed Assertion") - -#define DEBUG_ASSERT(msg, exp) if(!(exp)) \ - acpi_os_dbg_assert(#exp, __FILE__, __LINE__, msg) - - -#else -/* - * This is the non-debug case -- make everything go away, - * leaving no executable debug code! - */ - -#define MODULE_NAME(name) -#define _THIS_MODULE "" - -#define DEBUG_EXEC(a) -#define NORMAL_EXEC(a) a; - -#define DEBUG_DEFINE(a) -#define DEBUG_ONLY_MEMBERS(a) -#define FUNCTION_TRACE(a) -#define FUNCTION_TRACE_PTR(a,b) -#define FUNCTION_TRACE_U32(a,b) -#define FUNCTION_TRACE_STR(a,b) -#define FUNCTION_EXIT -#define FUNCTION_STATUS_EXIT(s) -#define FUNCTION_VALUE_EXIT(s) -#define DUMP_STACK_ENTRY(a) -#define DUMP_OPERANDS(a,b,c,d,e) -#define DUMP_ENTRY(a,b) -#define DUMP_TABLES(a,b) -#define DUMP_PATHNAME(a,b,c,d) -#define DUMP_RESOURCE_LIST(a) -#define DEBUG_PRINT(l,f) -#define DEBUG_PRINT_RAW(l,f) -#define BREAK_MSG(a) - -#define return_VOID return -#define return_ACPI_STATUS(s) return(s) -#define return_VALUE(s) return(s) -#define return_PTR(s) return(s) - -#define ACPI_ASSERT(exp) -#define DEBUG_ASSERT(msg, exp) - -#endif - -/* - * Some code only gets executed when the debugger is built in. - * Note that this is entirely independent of whether the - * DEBUG_PRINT stuff (set by ACPI_DEBUG) is on, or not. - */ -#ifdef ENABLE_DEBUGGER -#define DEBUGGER_EXEC(a) a; -#else -#define DEBUGGER_EXEC(a) -#endif - - -/* - * For 16-bit code, we want to shrink some things even though - * we are using ACPI_DEBUG to get the debug output - */ -#ifdef _IA16 -#undef DEBUG_ONLY_MEMBERS -#define DEBUG_ONLY_MEMBERS(a) -#undef OP_INFO_ENTRY -#define OP_INFO_ENTRY(opcode,flags,name,Pargs,Iargs) {opcode,flags,Pargs,Iargs} -#endif - - -#ifdef ACPI_DEBUG - -/* - * 1) Set name to blanks - * 2) Copy the object name - */ - -#define ADD_OBJECT_NAME(a,b) MEMSET (a->common.name, ' ', sizeof (a->common.name));\ - STRNCPY (a->common.name, acpi_gbl_ns_type_names[b], sizeof (a->common.name)) - -#else - -#define ADD_OBJECT_NAME(a,b) - -#endif - -#endif /* ACMACROS_H */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acnamesp.h linux-2.4.0-test9-lia/drivers/acpi/include/acnamesp.h --- linux-2.4.0-test9/drivers/acpi/include/acnamesp.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acnamesp.h Wed Dec 31 16:00:00 1969 @@ -1,393 +0,0 @@ -/****************************************************************************** - * - * Name: acnamesp.h - Namespace subcomponent prototypes and defines - * $Revision: 94 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACNAMESP_H__ -#define __ACNAMESP_H__ - - -/* To search the entire name space, pass this as Search_base */ - -#define NS_ALL ((ACPI_HANDLE)0) - -/* - * Elements of Acpi_ns_properties are bit significant - * and should be one-to-one with values of ACPI_OBJECT_TYPE - */ -#define NSP_NORMAL 0 -#define NSP_NEWSCOPE 1 /* a definition of this type opens a name scope */ -#define NSP_LOCAL 2 /* suppress search of enclosing scopes */ - - -/* Definitions of the predefined namespace names */ - -#define ACPI_UNKNOWN_NAME (u32) 0x3F3F3F3F /* Unknown name is "????" */ -#define ACPI_ROOT_NAME (u32) 0x2F202020 /* Root name is "/ " */ -#define ACPI_SYS_BUS_NAME (u32) 0x5F53425F /* Sys bus name is "_SB_" */ - -#define NS_ROOT_PATH "/" -#define NS_SYSTEM_BUS "_SB_" - - -/* Flags for Acpi_ns_lookup, Acpi_ns_search_and_enter */ - -#define NS_NO_UPSEARCH 0 -#define NS_SEARCH_PARENT 0x01 -#define NS_DONT_OPEN_SCOPE 0x02 -#define NS_NO_PEER_SEARCH 0x04 - -#define NS_WALK_UNLOCK TRUE -#define NS_WALK_NO_UNLOCK FALSE - - -ACPI_STATUS -acpi_ns_walk_namespace ( - OBJECT_TYPE_INTERNAL type, - ACPI_HANDLE start_object, - u32 max_depth, - u8 unlock_before_callback, - WALK_CALLBACK user_function, - void *context, - void **return_value); - - -ACPI_NAMESPACE_NODE * -acpi_ns_get_next_object ( - OBJECT_TYPE_INTERNAL type, - ACPI_NAMESPACE_NODE *parent, - ACPI_NAMESPACE_NODE *child); - - -ACPI_STATUS -acpi_ns_delete_namespace_by_owner ( - u16 table_id); - - -/* Namespace loading - nsload */ - -ACPI_STATUS -acpi_ns_parse_table ( - ACPI_TABLE_DESC *table_desc, - ACPI_NAMESPACE_NODE *scope); - -ACPI_STATUS -acpi_ns_load_table ( - ACPI_TABLE_DESC *table_desc, - ACPI_NAMESPACE_NODE *node); - -ACPI_STATUS -acpi_ns_load_table_by_type ( - ACPI_TABLE_TYPE table_type); - - -/* - * Top-level namespace access - nsaccess - */ - - -ACPI_STATUS -acpi_ns_root_initialize ( - void); - -ACPI_STATUS -acpi_ns_lookup ( - ACPI_GENERIC_STATE *scope_info, - NATIVE_CHAR *name, - OBJECT_TYPE_INTERNAL type, - OPERATING_MODE interpreter_mode, - u32 flags, - ACPI_WALK_STATE *walk_state, - ACPI_NAMESPACE_NODE **ret_node); - - -/* - * Named object allocation/deallocation - nsalloc - */ - - -ACPI_NAMESPACE_NODE * -acpi_ns_create_node ( - u32 acpi_name); - -void -acpi_ns_delete_node ( - ACPI_NAMESPACE_NODE *node); - -ACPI_STATUS -acpi_ns_delete_namespace_subtree ( - ACPI_NAMESPACE_NODE *parent_handle); - -void -acpi_ns_detach_object ( - ACPI_NAMESPACE_NODE *node); - -void -acpi_ns_delete_children ( - ACPI_NAMESPACE_NODE *parent); - - -/* - * Namespace modification - nsmodify - */ - -ACPI_STATUS -acpi_ns_unload_namespace ( - ACPI_HANDLE handle); - -ACPI_STATUS -acpi_ns_delete_subtree ( - ACPI_HANDLE start_handle); - - -/* - * Namespace dump/print utilities - nsdump - */ - -void -acpi_ns_dump_tables ( - ACPI_HANDLE search_base, - u32 max_depth); - -void -acpi_ns_dump_entry ( - ACPI_HANDLE handle, - u32 debug_level); - -ACPI_STATUS -acpi_ns_dump_pathname ( - ACPI_HANDLE handle, - NATIVE_CHAR *msg, - u32 level, - u32 component); - -void -acpi_ns_dump_root_devices ( - void); - -void -acpi_ns_dump_objects ( - OBJECT_TYPE_INTERNAL type, - u32 max_depth, - u32 ownder_id, - ACPI_HANDLE start_handle); - - -/* - * Namespace evaluation functions - nseval - */ - -ACPI_STATUS -acpi_ns_evaluate_by_handle ( - ACPI_NAMESPACE_NODE *prefix_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_object); - -ACPI_STATUS -acpi_ns_evaluate_by_name ( - NATIVE_CHAR *pathname, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_object); - -ACPI_STATUS -acpi_ns_evaluate_relative ( - ACPI_NAMESPACE_NODE *prefix_node, - NATIVE_CHAR *pathname, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_object); - -ACPI_STATUS -acpi_ns_execute_control_method ( - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_obj_desc); - -ACPI_STATUS -acpi_ns_get_object_value ( - ACPI_NAMESPACE_NODE *object_node, - ACPI_OPERAND_OBJECT **return_obj_desc); - - -/* - * Parent/Child/Peer utility functions - nsfamily - */ - -ACPI_NAME -acpi_ns_find_parent_name ( - ACPI_NAMESPACE_NODE *node_to_search); - -u8 -acpi_ns_exist_downstream_sibling ( - ACPI_NAMESPACE_NODE *this_node); - - -/* - * Scope manipulation - nsscope - */ - -u32 -acpi_ns_opens_scope ( - OBJECT_TYPE_INTERNAL type); - -NATIVE_CHAR * -acpi_ns_get_table_pathname ( - ACPI_NAMESPACE_NODE *node); - -NATIVE_CHAR * -acpi_ns_name_of_current_scope ( - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ns_handle_to_pathname ( - ACPI_HANDLE obj_handle, - u32 *buf_size, - NATIVE_CHAR *user_buffer); - -u8 -acpi_ns_pattern_match ( - ACPI_NAMESPACE_NODE *obj_node, - NATIVE_CHAR *search_for); - -ACPI_STATUS -acpi_ns_name_compare ( - ACPI_HANDLE obj_handle, - u32 level, - void *context, - void **return_value); - -ACPI_STATUS -acpi_ns_get_node ( - NATIVE_CHAR *pathname, - ACPI_NAMESPACE_NODE *in_prefix_node, - ACPI_NAMESPACE_NODE **out_node); - -/* - * Object management for NTEs - nsobject - */ - -ACPI_STATUS -acpi_ns_attach_object ( - ACPI_NAMESPACE_NODE *node, - ACPI_OPERAND_OBJECT *object, - OBJECT_TYPE_INTERNAL type); - - -void * -acpi_ns_compare_value ( - ACPI_HANDLE obj_handle, - u32 level, - void *obj_desc); - - -/* - * Namespace searching and entry - nssearch - */ - -ACPI_STATUS -acpi_ns_search_and_enter ( - u32 entry_name, - ACPI_WALK_STATE *walk_state, - ACPI_NAMESPACE_NODE *node, - OPERATING_MODE interpreter_mode, - OBJECT_TYPE_INTERNAL type, - u32 flags, - ACPI_NAMESPACE_NODE **ret_node); - -ACPI_STATUS -acpi_ns_search_node ( - u32 entry_name, - ACPI_NAMESPACE_NODE *node, - OBJECT_TYPE_INTERNAL type, - ACPI_NAMESPACE_NODE **ret_node); - -ACPI_NAMESPACE_NODE * -acpi_ns_create_node ( - u32 acpi_name); - -void -acpi_ns_install_node ( - ACPI_WALK_STATE *walk_state, - ACPI_NAMESPACE_NODE *parent_node, /* Parent */ - ACPI_NAMESPACE_NODE *node, /* New Child*/ - OBJECT_TYPE_INTERNAL type); - - -/* - * Utility functions - nsutils - */ - -u8 -acpi_ns_valid_root_prefix ( - NATIVE_CHAR prefix); - -u8 -acpi_ns_valid_path_separator ( - NATIVE_CHAR sep); - -OBJECT_TYPE_INTERNAL -acpi_ns_get_type ( - ACPI_HANDLE obj_handle); - -void * -acpi_ns_get_attached_object ( - ACPI_HANDLE obj_handle); - -u32 -acpi_ns_local ( - OBJECT_TYPE_INTERNAL type); - -ACPI_STATUS -acpi_ns_internalize_name ( - NATIVE_CHAR *dotted_name, - NATIVE_CHAR **converted_name); - -ACPI_STATUS -acpi_ns_externalize_name ( - u32 internal_name_length, - NATIVE_CHAR *internal_name, - u32 *converted_name_length, - NATIVE_CHAR **converted_name); - -ACPI_NAMESPACE_NODE * -acpi_ns_convert_handle_to_entry ( - ACPI_HANDLE handle); - -ACPI_HANDLE -acpi_ns_convert_entry_to_handle( - ACPI_NAMESPACE_NODE *node); - -void -acpi_ns_terminate ( - void); - -ACPI_NAMESPACE_NODE * -acpi_ns_get_parent_object ( - ACPI_NAMESPACE_NODE *node); - - -ACPI_NAMESPACE_NODE * -acpi_ns_get_next_valid_object ( - ACPI_NAMESPACE_NODE *node); - - -#endif /* __ACNAMESP_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acobject.h linux-2.4.0-test9-lia/drivers/acpi/include/acobject.h --- linux-2.4.0-test9/drivers/acpi/include/acobject.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acobject.h Wed Jul 5 11:23:12 2000 @@ -1,8 +1,7 @@ /****************************************************************************** * - * Name: acobject.h - Definition of ACPI_OPERAND_OBJECT (Internal object only) - * $Revision: 71 $ + * Name: acobject.h - Definition of ACPI_OBJECT_INTERNAL (Internal object only) * *****************************************************************************/ @@ -27,14 +26,17 @@ #ifndef _ACOBJECT_H #define _ACOBJECT_H +#include "actypes.h" +#include "macros.h" +#include "internal.h" /* - * The ACPI_OPERAND_OBJECT is used to pass AML operands from the dispatcher + * The ACPI_OBJECT_INTERNAL is used to pass AML operands from the dispatcher * to the interpreter, and to keep track of the various handlers such as * address space handlers and notify handlers. The object is a constant * size in order to allow them to be cached and reused. * - * All variants of the ACPI_OPERAND_OBJECT are defined with the same + * All variants of the ACPI_OBJECT_INTERNAL are defined with the same * sequence of field types, with fields that are not used in a particular * variant being named "Reserved". This is not strictly necessary, but * may in some circumstances simplify understanding if these structures @@ -58,31 +60,32 @@ */ -#define ACPI_OBJECT_COMMON_HEADER /* Two 32-bit fields, one pointer, 8-bit flag */\ - u8 data_type; /* To differentiate various internal objs */\ - u8 type; /* ACPI_OBJECT_TYPE */\ - u16 reference_count; /* For object deletion management */\ - u8 flags; \ +#define ACPI_OBJECT_COMMON_HEADER /* Two 32-bit fields */\ + u8 data_type; /* To differentiate various internal objs */\ + u8 type; /* ACPI_OBJECT_TYPE */\ + u8 size; /* Size of entire descriptor */\ + u8 flags;\ + u16 reference_count; /* For object deletion management */\ + u16 acpi_cm_fill2;\ + union acpi_obj_internal *next; \ /* Defines for flag byte above */ -#define AOPOBJ_STATIC_ALLOCATION 0x1 -#define AOPOBJ_DATA_VALID 0x2 -#define AOPOBJ_INITIALIZED 0x4 +#define AO_STATIC_ALLOCATION 0x1 /* * Common bitfield for the field objects */ #define ACPI_COMMON_FIELD_INFO /* Three 32-bit values */\ - u8 granularity;\ - u16 length; \ - u32 offset; /* Byte offset within containing object */\ - u8 bit_offset; /* Bit offset within min read/write data unit */\ - u8 access; /* Access_type */\ - u8 lock_rule;\ - u8 update_rule;\ - u8 access_attribute; + u32 offset; /* Byte offset within containing object */\ + u16 length; /* # of bits in buffer */ \ + u8 granularity;\ + u8 bit_offset; /* Bit offset within min read/write data unit */\ + u8 access; /* Access_type */\ + u8 lock_rule;\ + u8 update_rule;\ + u8 access_attribute; /****************************************************************************** @@ -95,23 +98,25 @@ typedef struct /* COMMON */ { ACPI_OBJECT_COMMON_HEADER + UCHAR first_non_common_byte; } ACPI_OBJECT_COMMON; -typedef struct /* CACHE_LIST */ -{ - ACPI_OBJECT_COMMON_HEADER - union acpi_operand_obj *next; /* Link for object cache and internal lists*/ - -} ACPI_OBJECT_CACHE_LIST; - - typedef struct /* NUMBER - has value */ { ACPI_OBJECT_COMMON_HEADER - u32 value; + u32 value; + u32 reserved2; + u32 reserved3; + u32 reserved4; + + void *reserved_p1; + void *reserved_p2; + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_NUMBER; @@ -120,8 +125,16 @@ { ACPI_OBJECT_COMMON_HEADER - u32 length; - NATIVE_CHAR *pointer; /* String value in AML stream or in allocated space */ + u32 length; /* # of bytes in string, excluding trailing null */ + u32 reserved2; + u32 reserved3; + u32 reserved4; + + char *pointer; /* String value in AML stream or in allocated space */ + void *reserved_p2; + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_STRING; @@ -130,10 +143,16 @@ { ACPI_OBJECT_COMMON_HEADER - u32 length; - u32 sequence; /* Sequential count of buffers created */ - - u8 *pointer; /* points to the buffer in allocated space */ + u32 length; /* # of bytes in buffer */ + u32 sequence; /* Sequential count of buffers created */ + u32 reserved3; + u32 reserved4; + + u8 *pointer; /* points to the buffer in allocated space */ + void *reserved_p2; + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_BUFFER; @@ -142,10 +161,16 @@ { ACPI_OBJECT_COMMON_HEADER - u32 count; /* # of elements in package */ - - union acpi_operand_obj **elements; /* Array of pointers to Acpi_objects */ - union acpi_operand_obj **next_element; /* used only while initializing */ + u32 count; /* # of elements in package */ + u32 reserved2; + u32 reserved3; + u32 reserved4; + + union acpi_obj_internal **elements; /* Array of pointers to Acpi_objects */ + union acpi_obj_internal **next_element; /* used only while initializing */ + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_PACKAGE; @@ -155,9 +180,13 @@ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO - u32 sequence; /* Container's sequence number */ + u32 sequence; /* Container's sequence number */ - union acpi_operand_obj *container; /* Containing object (Buffer) */ + union acpi_obj_internal *container; /* Containing object (Buffer) */ + void *reserved_p2; + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_FIELD_UNIT; @@ -166,9 +195,16 @@ { ACPI_OBJECT_COMMON_HEADER - union acpi_operand_obj *sys_handler; /* Handler for system notifies */ - union acpi_operand_obj *drv_handler; /* Handler for driver notifies */ - union acpi_operand_obj *addr_handler; /* Handler for Address space */ + u32 reserved1; + u32 reserved2; + u32 reserved3; + u32 reserved4; + + ACPI_HANDLE handle; + union acpi_obj_internal *sys_handler; /* Handler for system notifies */ + union acpi_obj_internal *drv_handler; /* Handler for driver notifies */ + union acpi_obj_internal *addr_handler; /* Handler for Address space */ + void *reserved_p5; } ACPI_OBJECT_DEVICE; @@ -177,7 +213,18 @@ { ACPI_OBJECT_COMMON_HEADER - void *semaphore; + u16 lock_count; + u16 thread_id; + u16 signal_count; + u16 fill1; + u32 reserved3; + u32 reserved4; + + void *semaphore; + void *reserved_p2; + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_EVENT; @@ -187,17 +234,21 @@ typedef struct /* METHOD */ { ACPI_OBJECT_COMMON_HEADER - u8 method_flags; - u8 param_count; - - u32 pcode_length; - void *semaphore; - u8 *pcode; - - u8 concurrency; - u8 thread_count; - ACPI_OWNER_ID owning_id; + u8 method_flags; + u8 param_count; + u8 concurrency; + u8 fill1; + u32 pcode_length; + u32 table_length; + ACPI_OWNER_ID owning_id; + u16 reserved4; + + u8 *pcode; + u8 *acpi_table; + void *parser_op; + void *semaphore; + void *reserved_p5; } ACPI_OBJECT_METHOD; @@ -205,31 +256,45 @@ typedef struct /* MUTEX */ { ACPI_OBJECT_COMMON_HEADER - u16 sync_level; - void *semaphore; + u16 lock_count; + u16 thread_id; + u16 sync_level; + u16 fill1; + u32 reserved3; + u32 reserved4; + + void *semaphore; + void *reserved_p2; + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_MUTEX; +/* Flags for Region */ + +#define INITIAL_REGION_FLAGS 0x0000 /* value set when the region is created */ +#define REGION_AGRUMENT_DATA_VALID 0x0001 /* Addr/Len are set */ +#define REGION_INITIALIZED 0x0002 /* region init handler has been called */ + /* this includes _REG method, if any */ typedef struct /* REGION */ { ACPI_OBJECT_COMMON_HEADER - u8 space_id; - u32 length; - u32 address; - void *region_context; /* Region Specific data (Handler->Context - optional things like PCI _ADR) */ - - /* TBD: [Restructure] This field can go away when Pass3 is implemented */ - union acpi_operand_obj *method; /* Associated control method */ - - - union acpi_operand_obj *addr_handler; /* Handler for system notifies */ - ACPI_NAMESPACE_NODE *REGmethod; /* _REG method for this region (if any) */ - ACPI_NAMESPACE_NODE *node; /* containing object */ - union acpi_operand_obj *next; + u16 space_id; + u16 region_flags; /* bits defined above */ + u32 address; + u32 length; + u32 reserved4; /* Region Specific data (PCI _ADR) */ + + union acpi_obj_internal *method; /* Associated control method */ + union acpi_obj_internal *addr_handler; /* Handler for system notifies */ + union acpi_obj_internal *link; /* Link in list of regions */ + /* list is owned by Addr_handler */ + ACPI_NAMED_OBJECT *REGmethod; /* _REG method for this region (if any) */ + ACPI_NAMED_OBJECT *nte; /* containing object */ } ACPI_OBJECT_REGION; @@ -238,11 +303,16 @@ { ACPI_OBJECT_COMMON_HEADER - u32 system_level; - u32 resource_order; - - union acpi_operand_obj *sys_handler; /* Handler for system notifies */ - union acpi_operand_obj *drv_handler; /* Handler for driver notifies */ + u32 system_level; + u32 resource_order; + u32 reserved3; + u32 reserved4; + + ACPI_HANDLE handle; + union acpi_obj_internal *sys_handler; /* Handler for system notifies */ + union acpi_obj_internal *drv_handler; /* Handler for driver notifies */ + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_POWER_RESOURCE; @@ -251,13 +321,17 @@ { ACPI_OBJECT_COMMON_HEADER - u32 proc_id; - u32 length; - ACPI_IO_ADDRESS address; - - union acpi_operand_obj *sys_handler; /* Handler for system notifies */ - union acpi_operand_obj *drv_handler; /* Handler for driver notifies */ - union acpi_operand_obj *addr_handler; /* Handler for Address space */ + u32 proc_id; + ACPI_IO_ADDRESS pblk_address; + u16 fill1; + u32 pblk_length; + u32 reserved4; + + ACPI_HANDLE handle; + union acpi_obj_internal *sys_handler; /* Handler for system notifies */ + union acpi_obj_internal *drv_handler; /* Handler for driver notifies */ + union acpi_obj_internal *addr_handler; /* Handler for Address space */ + void *reserved_p5; } ACPI_OBJECT_PROCESSOR; @@ -266,9 +340,16 @@ { ACPI_OBJECT_COMMON_HEADER - union acpi_operand_obj *sys_handler; /* Handler for system notifies */ - union acpi_operand_obj *drv_handler; /* Handler for driver notifies */ - union acpi_operand_obj *addr_handler; /* Handler for Address space */ + u32 reserved1; + u32 reserved2; + u32 reserved3; + u32 reserved4; + + ACPI_HANDLE handle; + union acpi_obj_internal *sys_handler; /* Handler for system notifies */ + union acpi_obj_internal *drv_handler; /* Handler for driver notifies */ + union acpi_obj_internal *addr_handler; /* Handler for Address space */ + void *reserved_p5; } ACPI_OBJECT_THERMAL_ZONE; @@ -277,14 +358,18 @@ * Internal types */ - typedef struct /* FIELD */ { ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO + u32 reserved4; - union acpi_operand_obj *container; /* Containing object */ + union acpi_obj_internal *container; /* Containing object */ + void *reserved_p2; + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_FIELD; @@ -294,10 +379,13 @@ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO - u32 value; /* Value to store into Bank_select */ + u32 value; /* Value to store into Bank_select */ - ACPI_HANDLE bank_select; /* Bank select register */ - union acpi_operand_obj *container; /* Containing object */ + ACPI_HANDLE bank_select; /* Bank select register */ + union acpi_obj_internal *container; /* Containing object */ + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_BANK_FIELD; @@ -311,10 +399,13 @@ ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO - u32 value; /* Value to store into Index register */ + u32 value; /* Value to store into Index register */ - ACPI_HANDLE index; /* Index register */ - ACPI_HANDLE data; /* Data register */ + ACPI_HANDLE index; /* Index register */ + ACPI_HANDLE data; /* Data register */ + void *reserved_p3; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_INDEX_FIELD; @@ -323,9 +414,16 @@ { ACPI_OBJECT_COMMON_HEADER - ACPI_NAMESPACE_NODE *node; /* Parent device */ - NOTIFY_HANDLER handler; - void *context; + u32 reserved1; + u32 reserved2; + u32 reserved3; + u32 reserved4; + + ACPI_NAMED_OBJECT *nte; /* Parent device */ + NOTIFY_HANDLER handler; + void *context; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_NOTIFY_HANDLER; @@ -334,20 +432,19 @@ #define ADDR_HANDLER_DEFAULT_INSTALLED 0x1 - typedef struct /* ADDRESS HANDLER */ { ACPI_OBJECT_COMMON_HEADER - u8 space_id; - u16 hflags; - ADDRESS_SPACE_HANDLER handler; - - ACPI_NAMESPACE_NODE *node; /* Parent device */ - void *context; - ADDRESS_SPACE_SETUP setup; - union acpi_operand_obj *region_list; /* regions using this handler */ - union acpi_operand_obj *next; + u16 space_id; + u16 hflags; + ADDRESS_SPACE_HANDLER handler; + + ACPI_NAMED_OBJECT *nte; /* Parent device */ + void *context; + ADDRESS_SPACE_SETUP setup; + union acpi_obj_internal *link; /* Link to next handler on device */ + union acpi_obj_internal *region_list; /* regions using this handler */ } ACPI_OBJECT_ADDR_HANDLER; @@ -361,27 +458,31 @@ { ACPI_OBJECT_COMMON_HEADER - u8 target_type; /* Used for Index_op */ - u16 op_code; - u32 offset; /* Used for Arg_op, Local_op, and Index_op */ - - void *object; /* Name_op=>HANDLE to obj, Index_op=>ACPI_OPERAND_OBJECT */ - ACPI_NAMESPACE_NODE *node; - union acpi_operand_obj **where; + u16 op_code; + u8 fill1; + u8 target_type; /* Used for Index_op */ + u32 offset; /* Used for Arg_op, Local_op, and Index_op */ + u32 reserved3; + u32 reserved4; + + void *object; /* Name_op=>HANDLE to obj, Index_op=>ACPI_OBJECT_INTERNAL */ + ACPI_NAMED_OBJECT *nte; + union acpi_obj_internal **where; + void *reserved_p4; + void *reserved_p5; } ACPI_OBJECT_REFERENCE; /****************************************************************************** * - * ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above + * ACPI_OBJECT_INTERNAL Descriptor - a giant union of all of the above * *****************************************************************************/ -typedef union acpi_operand_obj +typedef union acpi_obj_internal { ACPI_OBJECT_COMMON common; - ACPI_OBJECT_CACHE_LIST cache; ACPI_OBJECT_NUMBER number; ACPI_OBJECT_STRING string; ACPI_OBJECT_BUFFER buffer; @@ -402,6 +503,6 @@ ACPI_OBJECT_NOTIFY_HANDLER notify_handler; ACPI_OBJECT_ADDR_HANDLER addr_handler; -} ACPI_OPERAND_OBJECT; +} ACPI_OBJECT_INTERNAL; #endif /* _ACOBJECT_H */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acoutput.h linux-2.4.0-test9-lia/drivers/acpi/include/acoutput.h --- linux-2.4.0-test9/drivers/acpi/include/acoutput.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acoutput.h Wed Dec 31 16:00:00 1969 @@ -1,124 +0,0 @@ -/****************************************************************************** - * - * Name: acoutput.h -- debug output - * $Revision: 63 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACOUTPUT_H__ -#define __ACOUTPUT_H__ - -/* - * Debug levels and component IDs. These are used to control the - * granularity of the output of the DEBUG_PRINT macro -- on a per- - * component basis and a per-exception-type basis. - */ - -/* Component IDs -- used in the global "Debug_layer" */ - -#define GLOBAL 0x00000001 -#define COMMON 0x00000002 -#define PARSER 0x00000004 -#define DISPATCHER 0x00000008 -#define INTERPRETER 0x00000010 -#define NAMESPACE 0x00000020 -#define RESOURCE_MANAGER 0x00000040 -#define TABLE_MANAGER 0x00000080 -#define EVENT_HANDLING 0x00000100 -#define HARDWARE 0x00000200 -#define MISCELLANEOUS 0x00000400 -#define OS_DEPENDENT 0x00000800 - -#define BUS_MANAGER 0x00001000 - -#define PROCESSOR_CONTROL 0x00002000 -#define SYSTEM_CONTROL 0x00004000 -#define THERMAL_CONTROL 0x00008000 -#define POWER_CONTROL 0x00010000 - -#define EMBEDDED_CONTROLLER 0x00020000 -#define BATTERY 0x00040000 - -#define DEBUGGER 0x00100000 -#define ALL_COMPONENTS 0x001FFFFF - - -/* Exception level -- used in the global "Debug_level" */ - -#define ACPI_OK 0x00000001 -#define ACPI_INFO 0x00000002 -#define ACPI_WARN 0x00000004 -#define ACPI_ERROR 0x00000008 -#define ACPI_FATAL 0x00000010 -#define ACPI_DEBUG_OBJECT 0x00000020 -#define ACPI_ALL 0x0000003F - - -/* Trace level -- also used in the global "Debug_level" */ - -#define TRACE_PARSE 0x00000100 -#define TRACE_DISPATCH 0x00000200 -#define TRACE_LOAD 0x00000400 -#define TRACE_EXEC 0x00000800 -#define TRACE_NAMES 0x00001000 -#define TRACE_OPREGION 0x00002000 -#define TRACE_BFIELD 0x00004000 -#define TRACE_TRASH 0x00008000 -#define TRACE_TABLES 0x00010000 -#define TRACE_FUNCTIONS 0x00020000 -#define TRACE_VALUES 0x00040000 -#define TRACE_OBJECTS 0x00080000 -#define TRACE_ALLOCATIONS 0x00100000 -#define TRACE_RESOURCES 0x00200000 -#define TRACE_IO 0x00400000 -#define TRACE_INTERRUPTS 0x00800000 -#define TRACE_USER_REQUESTS 0x01000000 -#define TRACE_PACKAGE 0x02000000 -#define TRACE_MUTEX 0x04000000 - -#define TRACE_ALL 0x0FFFFF00 - - -/* Exceptionally verbose output -- also used in the global "Debug_level" */ - -#define VERBOSE_AML_DISASSEMBLE 0x10000000 -#define VERBOSE_INFO 0x20000000 -#define VERBOSE_TABLES 0x40000000 -#define VERBOSE_EVENTS 0x80000000 - -#define VERBOSE_ALL 0x70000000 - - -/* Defaults for Debug_level, debug and normal */ - -#define DEBUG_DEFAULT (ACPI_OK | ACPI_WARN | ACPI_ERROR | ACPI_DEBUG_OBJECT | TRACE_TABLES | TRACE_IO) -#define NORMAL_DEFAULT (ACPI_OK | ACPI_WARN | ACPI_ERROR | ACPI_DEBUG_OBJECT) -#define DEBUG_ALL (VERBOSE_AML_DISASSEMBLE | TRACE_ALL | ACPI_ALL) - -/* Misc defines */ - -#define HEX 0x01 -#define ASCII 0x02 -#define FULL_ADDRESS 0x04 -#define CHARS_PER_LINE 16 /* used in Dump_buf function */ - - -#endif /* __ACOUTPUT_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acparser.h linux-2.4.0-test9-lia/drivers/acpi/include/acparser.h --- linux-2.4.0-test9/drivers/acpi/include/acparser.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acparser.h Wed Dec 31 16:00:00 1969 @@ -1,345 +0,0 @@ -/****************************************************************************** - * - * Module Name: acparser.h - AML Parser subcomponent prototypes and defines - * $Revision: 46 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - - -#ifndef __ACPARSER_H__ -#define __ACPARSER_H__ - - -#define OP_HAS_RETURN_VALUE 1 - -/* variable # arguments */ - -#define ACPI_VAR_ARGS ACPI_UINT32_MAX - -/* maximum virtual address */ - -#define ACPI_MAX_AML ((u8 *)(~0UL)) - - -#define ACPI_PARSE_DELETE_TREE 0x0001 -#define ACPI_PARSE_NO_TREE_DELETE 0x0000 -#define ACPI_PARSE_TREE_MASK 0x0001 - -#define ACPI_PARSE_LOAD_PASS1 0x0010 -#define ACPI_PARSE_LOAD_PASS2 0x0020 -#define ACPI_PARSE_EXECUTE 0x0030 -#define ACPI_PARSE_MODE_MASK 0x0030 - -/* psapi - Parser external interfaces */ - -ACPI_STATUS -acpi_psx_load_table ( - u8 *pcode_addr, - u32 pcode_length); - -ACPI_STATUS -acpi_psx_execute ( - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_obj_desc); - - -u8 -acpi_ps_is_namespace_object_op ( - u16 opcode); -u8 -acpi_ps_is_namespace_op ( - u16 opcode); - - -/****************************************************************************** - * - * Parser interfaces - * - *****************************************************************************/ - - -/* psargs - Parse AML opcode arguments */ - -u8 * -acpi_ps_get_next_package_end ( - ACPI_PARSE_STATE *parser_state); - -u32 -acpi_ps_get_next_package_length ( - ACPI_PARSE_STATE *parser_state); - -NATIVE_CHAR * -acpi_ps_get_next_namestring ( - ACPI_PARSE_STATE *parser_state); - -void -acpi_ps_get_next_simple_arg ( - ACPI_PARSE_STATE *parser_state, - u32 arg_type, /* type of argument */ - ACPI_PARSE_OBJECT *arg); /* (OUT) argument data */ - -void -acpi_ps_get_next_namepath ( - ACPI_PARSE_STATE *parser_state, - ACPI_PARSE_OBJECT *arg, - u32 *arg_count, - u8 method_call); - -ACPI_PARSE_OBJECT * -acpi_ps_get_next_field ( - ACPI_PARSE_STATE *parser_state); - -ACPI_PARSE_OBJECT * -acpi_ps_get_next_arg ( - ACPI_PARSE_STATE *parser_state, - u32 arg_type, - u32 *arg_count); - - -/* psopcode - AML Opcode information */ - -ACPI_OPCODE_INFO * -acpi_ps_get_opcode_info ( - u16 opcode); - -NATIVE_CHAR * -acpi_ps_get_opcode_name ( - u16 opcode); - - -/* psparse - top level parsing routines */ - -ACPI_STATUS -acpi_ps_find_object ( - u16 opcode, - ACPI_PARSE_OBJECT *op, - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT **out_op); - -void -acpi_ps_delete_parse_tree ( - ACPI_PARSE_OBJECT *root); - -ACPI_STATUS -acpi_ps_parse_loop ( - ACPI_WALK_STATE *walk_state); - -ACPI_STATUS -acpi_ps_parse_aml ( - ACPI_PARSE_OBJECT *start_scope, - u8 *aml, - u32 aml_size, - u32 parse_flags, - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **caller_return_desc, - ACPI_PARSE_DOWNWARDS descending_callback, - ACPI_PARSE_UPWARDS ascending_callback); - -ACPI_STATUS -acpi_ps_parse_table ( - u8 *aml, - u32 aml_size, - ACPI_PARSE_DOWNWARDS descending_callback, - ACPI_PARSE_UPWARDS ascending_callback, - ACPI_PARSE_OBJECT **root_object); - -u16 -acpi_ps_peek_opcode ( - ACPI_PARSE_STATE *state); - - -/* psscope - Scope stack management routines */ - - -ACPI_STATUS -acpi_ps_init_scope ( - ACPI_PARSE_STATE *parser_state, - ACPI_PARSE_OBJECT *root); - -ACPI_PARSE_OBJECT * -acpi_ps_get_parent_scope ( - ACPI_PARSE_STATE *state); - -u8 -acpi_ps_has_completed_scope ( - ACPI_PARSE_STATE *parser_state); - -void -acpi_ps_pop_scope ( - ACPI_PARSE_STATE *parser_state, - ACPI_PARSE_OBJECT **op, - u32 *arg_list); - -ACPI_STATUS -acpi_ps_push_scope ( - ACPI_PARSE_STATE *parser_state, - ACPI_PARSE_OBJECT *op, - u32 remaining_args, - u32 arg_count); - -void -acpi_ps_cleanup_scope ( - ACPI_PARSE_STATE *state); - - -/* pstree - parse tree manipulation routines */ - -void -acpi_ps_append_arg( - ACPI_PARSE_OBJECT *op, - ACPI_PARSE_OBJECT *arg); - -ACPI_PARSE_OBJECT* -acpi_ps_find ( - ACPI_PARSE_OBJECT *scope, - NATIVE_CHAR *path, - u16 opcode, - u32 create); - -ACPI_PARSE_OBJECT * -acpi_ps_get_arg( - ACPI_PARSE_OBJECT *op, - u32 argn); - -ACPI_PARSE_OBJECT * -acpi_ps_get_child ( - ACPI_PARSE_OBJECT *op); - -ACPI_PARSE_OBJECT * -acpi_ps_get_depth_next ( - ACPI_PARSE_OBJECT *origin, - ACPI_PARSE_OBJECT *op); - - -/* pswalk - parse tree walk routines */ - -ACPI_STATUS -acpi_ps_walk_parsed_aml ( - ACPI_PARSE_OBJECT *start_op, - ACPI_PARSE_OBJECT *end_op, - ACPI_OPERAND_OBJECT *mth_desc, - ACPI_NAMESPACE_NODE *start_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **caller_return_desc, - ACPI_OWNER_ID owner_id, - ACPI_PARSE_DOWNWARDS descending_callback, - ACPI_PARSE_UPWARDS ascending_callback); - -ACPI_STATUS -acpi_ps_get_next_walk_op ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - ACPI_PARSE_UPWARDS ascending_callback); - - -/* psutils - parser utilities */ - - -ACPI_PARSE_STATE * -acpi_ps_create_state ( - u8 *aml, - u32 aml_size); - -void -acpi_ps_init_op ( - ACPI_PARSE_OBJECT *op, - u16 opcode); - -ACPI_PARSE_OBJECT * -acpi_ps_alloc_op ( - u16 opcode); - -void -acpi_ps_free_op ( - ACPI_PARSE_OBJECT *op); - -void -acpi_ps_delete_parse_cache ( - void); - -u8 -acpi_ps_is_leading_char ( - u32 c); - -u8 -acpi_ps_is_prefix_char ( - u32 c); - -u8 -acpi_ps_is_named_op ( - u16 opcode); - -u8 -acpi_ps_is_node_op ( - u16 opcode); - -u8 -acpi_ps_is_deferred_op ( - u16 opcode); - -u8 -acpi_ps_is_bytelist_op( - u16 opcode); - -u8 -acpi_ps_is_field_op( - u16 opcode); - -u8 -acpi_ps_is_create_field_op ( - u16 opcode); - -ACPI_PARSE2_OBJECT* -acpi_ps_to_extended_op( - ACPI_PARSE_OBJECT *op); - -u32 -acpi_ps_get_name( - ACPI_PARSE_OBJECT *op); - -void -acpi_ps_set_name( - ACPI_PARSE_OBJECT *op, - u32 name); - - -/* psdump - display parser tree */ - -u32 -acpi_ps_sprint_path ( - NATIVE_CHAR *buffer_start, - u32 buffer_size, - ACPI_PARSE_OBJECT *op); - -u32 -acpi_ps_sprint_op ( - NATIVE_CHAR *buffer_start, - u32 buffer_size, - ACPI_PARSE_OBJECT *op); - -void -acpi_ps_show ( - ACPI_PARSE_OBJECT *op); - - -#endif /* __ACPARSER_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acpi.h linux-2.4.0-test9-lia/drivers/acpi/include/acpi.h --- linux-2.4.0-test9/drivers/acpi/include/acpi.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acpi.h Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Name: acpi.h - Master include file, Publics and external data. - * $Revision: 48 $ * *****************************************************************************/ @@ -31,20 +31,20 @@ * We put them here because we don't want to duplicate them * in the rest of the source code again and again. */ -#include "acconfig.h" /* Configuration constants */ +#include "config.h" /* Configuration constants */ #include "acenv.h" /* Target environment specific items */ #include "actypes.h" /* Fundamental data types */ #include "acexcep.h" /* Local exception codes */ -#include "acmacros.h" /* C macros */ -#include "actbl.h" /* Acpi table definitions */ -#include "aclocal.h" /* Internal data types */ -#include "acoutput.h" /* Error output and Debug macros */ +#include "macros.h" /* C macros */ +#include "actables.h" /* Acpi table definitions */ +#include "internal.h" /* Internal data types */ +#include "output.h" /* Error output and Debug macros */ #include "acpiosxf.h" /* Interfaces to the Acpi-to-OS layer*/ #include "acpixf.h" /* Acpi core external interfaces */ #include "acobject.h" /* Acpi internal object */ -#include "acglobal.h" /* All global variables */ -#include "achware.h" /* Hardware defines and interfaces */ -#include "accommon.h" /* Common (global) interfaces */ +#include "globals.h" /* All global variables */ +#include "hardware.h" /* Hardware defines and interfaces */ +#include "common.h" /* Common (global) interfaces */ #endif /* __ACPI_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acpiosxf.h linux-2.4.0-test9-lia/drivers/acpi/include/acpiosxf.h --- linux-2.4.0-test9/drivers/acpi/include/acpiosxf.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acpiosxf.h Wed Jul 5 11:23:12 2000 @@ -244,7 +244,7 @@ ACPI_STATUS acpi_os_breakpoint ( - NATIVE_CHAR *message); + char *message); u8 acpi_os_readable ( @@ -264,12 +264,12 @@ s32 acpi_os_printf ( - const NATIVE_CHAR *format, + const char *format, ...); s32 acpi_os_vprintf ( - const NATIVE_CHAR *format, + const char *format, va_list args); /* @@ -278,7 +278,7 @@ u32 acpi_os_get_line ( - NATIVE_CHAR *buffer); + char *buffer); /* @@ -290,7 +290,7 @@ void *failed_assertion, void *file_name, u32 line_number, - NATIVE_CHAR *message); + char *message); #endif /* __ACPIOSD_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/acpixf.h linux-2.4.0-test9-lia/drivers/acpi/include/acpixf.h --- linux-2.4.0-test9/drivers/acpi/include/acpixf.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acpixf.h Wed Jul 5 11:23:12 2000 @@ -28,7 +28,7 @@ #define __ACXFACE_H__ #include "actypes.h" -#include "actbl.h" +#include "actables.h" /* * Global interfaces diff -urN linux-2.4.0-test9/drivers/acpi/include/acresrc.h linux-2.4.0-test9-lia/drivers/acpi/include/acresrc.h --- linux-2.4.0-test9/drivers/acpi/include/acresrc.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/acresrc.h Wed Dec 31 16:00:00 1969 @@ -1,304 +0,0 @@ -/****************************************************************************** - * - * Name: acresrc.h - Resource Manager function prototypes - * $Revision: 20 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACRESRC_H__ -#define __ACRESRC_H__ - - -/* - * Function prototypes called from Acpi* APIs - */ - -ACPI_STATUS -acpi_rs_get_prt_method_data ( - ACPI_HANDLE handle, - ACPI_BUFFER *ret_buffer); - - -ACPI_STATUS -acpi_rs_get_crs_method_data ( - ACPI_HANDLE handle, - ACPI_BUFFER *ret_buffer); - -ACPI_STATUS -acpi_rs_get_prs_method_data ( - ACPI_HANDLE handle, - ACPI_BUFFER *ret_buffer); - -ACPI_STATUS -acpi_rs_set_srs_method_data ( - ACPI_HANDLE handle, - ACPI_BUFFER *ret_buffer); - -ACPI_STATUS -acpi_rs_create_resource_list ( - ACPI_OPERAND_OBJECT *byte_stream_buffer, - u8 *output_buffer, - u32 *output_buffer_length); - -ACPI_STATUS -acpi_rs_create_byte_stream ( - RESOURCE *linked_list_buffer, - u8 *output_buffer, - u32 *output_buffer_length); - -ACPI_STATUS -acpi_rs_create_pci_routing_table ( - ACPI_OPERAND_OBJECT *method_return_object, - u8 *output_buffer, - u32 *output_buffer_length); - - -/* - *Function prototypes called from Acpi_rs_create*APIs - */ - -void -acpi_rs_dump_resource_list ( - RESOURCE *resource); - -void -acpi_rs_dump_irq_list ( - u8 *route_table); - -ACPI_STATUS -acpi_rs_get_byte_stream_start ( - u8 *byte_stream_buffer, - u8 **byte_stream_start, - u32 *size); - -ACPI_STATUS -acpi_rs_calculate_list_length ( - u8 *byte_stream_buffer, - u32 byte_stream_buffer_length, - u32 *size_needed); - -ACPI_STATUS -acpi_rs_calculate_byte_stream_length ( - RESOURCE *linked_list_buffer, - u32 *size_needed); - -ACPI_STATUS -acpi_rs_calculate_pci_routing_table_length ( - ACPI_OPERAND_OBJECT *package_object, - u32 *buffer_size_needed); - -ACPI_STATUS -acpi_rs_byte_stream_to_list ( - u8 *byte_stream_buffer, - u32 byte_stream_buffer_length, - u8 **output_buffer); - -ACPI_STATUS -acpi_rs_list_to_byte_stream ( - RESOURCE *linked_list, - u32 byte_stream_size_needed, - u8 **output_buffer); - -ACPI_STATUS -acpi_rs_io_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_fixed_io_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_io_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_fixed_io_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_irq_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_irq_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_dma_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_dma_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_address16_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_address16_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_address32_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_address32_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_start_dependent_functions_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_end_dependent_functions_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_start_dependent_functions_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_end_dependent_functions_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_memory24_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_memory24_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_memory32_range_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size -); - -ACPI_STATUS -acpi_rs_fixed_memory32_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_memory32_range_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_fixed_memory32_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_extended_irq_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_extended_irq_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_end_tag_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_end_tag_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - -ACPI_STATUS -acpi_rs_vendor_resource ( - u8 *byte_stream_buffer, - u32 *bytes_consumed, - u8 **output_buffer, - u32 *structure_size); - -ACPI_STATUS -acpi_rs_vendor_stream ( - RESOURCE *linked_list, - u8 **output_buffer, - u32 *bytes_consumed); - - -#endif /* __ACRESRC_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/actables.h linux-2.4.0-test9-lia/drivers/acpi/include/actables.h --- linux-2.4.0-test9/drivers/acpi/include/actables.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/actables.h Thu Aug 24 18:16:02 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * - * Name: actables.h - ACPI table management - * $Revision: 20 $ + * Name: actables.h - Table data structures defined in ACPI specification * *****************************************************************************/ @@ -27,139 +27,153 @@ #define __ACTABLES_H__ -/* Used in Acpi_tb_map_acpi_table for size parameter if table header is to be used */ +/* + * Values for description table header signatures + */ -#define SIZE_IN_HEADER 0 +#define RSDP_SIG "RSD PTR " /* RSDT Pointer signature */ +#define APIC_SIG "APIC" /* Multiple APIC Description Table */ +#define DSDT_SIG "DSDT" /* Differentiated System Description Table */ +#define FACP_SIG "FACP" /* Fixed ACPI Description Table */ +#define FACS_SIG "FACS" /* Firmware ACPI Control Structure */ +#define PSDT_SIG "PSDT" /* Persistent System Description Table */ +#define RSDT_SIG "RSDT" /* Root System Description Table */ +#define SSDT_SIG "SSDT" /* Secondary System Description Table */ +#define SBST_SIG "SBST" /* Smart Battery Specification Table */ +#define SPIC_SIG "SPIC" /* iosapic table */ +#define BOOT_SIG "BOOT" /* Boot table */ -ACPI_STATUS -acpi_tb_handle_to_object ( - u16 table_id, - ACPI_TABLE_DESC **table_desc); +#define GL_OWNED 0x02 /* Ownership of global lock is bit 1 */ +/* values of Mapic.Model */ -/* - * Acpi_tbfac - FACP, FACS utilities - */ +#define DUAL_PIC 0 +#define MULTIPLE_APIC 1 -ACPI_STATUS -acpi_tb_get_table_facs ( - ACPI_TABLE_HEADER *buffer_ptr, - ACPI_TABLE_DESC *table_info); +/* values of Type in APIC_HEADER */ + +#define APIC_PROC 0 +#define APIC_IO 1 /* - * Acpi_tbget - Table "get" routines + * Architecture-independent tables + * The architecture dependent tables are in separate files */ -ACPI_STATUS -acpi_tb_get_table_ptr ( - ACPI_TABLE_TYPE table_type, - u32 instance, - ACPI_TABLE_HEADER **table_ptr_loc); -ACPI_STATUS -acpi_tb_get_table ( - void *physical_address, - ACPI_TABLE_HEADER *buffer_ptr, - ACPI_TABLE_DESC *table_info); +typedef struct /* ACPI common table header */ +{ + char signature [4]; /* identifies type of table */ + u32 length; /* length of table, in bytes, + * including header */ + u8 revision; /* specification minor version # */ + u8 checksum; /* to make sum of entire table == 0 */ + char oem_id [6]; /* OEM identification */ + char oem_table_id [8]; /* OEM table identification */ + u32 oem_revision; /* OEM revision number */ + char asl_compiler_id [4]; /* ASL compiler vendor ID */ + u32 asl_compiler_revision; /* ASL compiler revision number */ +} ACPI_TABLE_HEADER; -/* - * Acpi_tbgetall - Get all firmware ACPI tables - */ -ACPI_STATUS -acpi_tb_get_all_tables ( - u32 number_of_tables, - ACPI_TABLE_HEADER *buffer_ptr); +typedef struct /* APIC Table */ +{ + ACPI_TABLE_HEADER header; /* table header */ + u32 local_apic_address; /* Physical address for accessing local APICs */ + u32 PCATcompat : 1; /* a one indicates system also has dual 8259s */ + u32 reserved1 : 31; +} APIC_TABLE; -/* - * Acpi_tbinstall - Table installation - */ -ACPI_STATUS -acpi_tb_install_table ( - ACPI_TABLE_HEADER *table_ptr, - ACPI_TABLE_DESC *table_info); +typedef struct /* APIC Header */ +{ + u8 type; /* APIC type. Either APIC_PROC or APIC_IO */ + u8 length; /* Length of APIC structure */ -ACPI_STATUS -acpi_tb_recognize_table ( - ACPI_TABLE_HEADER *table_ptr, - ACPI_TABLE_DESC *table_info); +} APIC_HEADER; -ACPI_STATUS -acpi_tb_init_table_descriptor ( - ACPI_TABLE_TYPE table_type, - ACPI_TABLE_DESC *table_info); +typedef struct /* Processor APIC */ +{ + APIC_HEADER header; + u8 processor_apic_id; /* ACPI processor id */ + u8 local_apic_id; /* processor's local APIC id */ + u32 processor_enabled: 1; /* Processor is usable if set */ + u32 reserved1 : 32; -/* - * Acpi_tbremove - Table removal and deletion - */ +} PROCESSOR_APIC; -void -acpi_tb_delete_acpi_tables ( - void); -void -acpi_tb_delete_acpi_table ( - ACPI_TABLE_TYPE type); +typedef struct /* IO APIC */ +{ + APIC_HEADER header; + u8 io_apic_id; /* I/O APIC ID */ + u8 reserved; /* reserved - must be zero */ + u32 io_apic_address; /* APIC's physical address */ + u32 vector; /* interrupt vector index where INTI + * lines start */ +} IO_APIC; -ACPI_TABLE_DESC * -acpi_tb_delete_single_table ( - ACPI_TABLE_DESC *table_desc); -void -acpi_tb_free_acpi_tables_of_type ( - ACPI_TABLE_DESC *table_info); +/* +** IA64 TODO: Add SAPIC Tables +*/ + +/* +** IA64 TODO: Modify Smart Battery Description to comply with ACPI IA64 +** extensions. +*/ +typedef struct /* Smart Battery Description Table */ +{ + ACPI_TABLE_HEADER header; + u32 warning_level; + u32 low_level; + u32 critical_level; + +} SMART_BATTERY_DESCRIPTION_TABLE; /* - * Acpi_tbrsd - RSDP, RSDT utilities + * ACPI Table information. We save the table address, length, + * and type of memory allocation (mapped or allocated) for each + * table for 1) when we exit, and 2) if a new table is installed */ -ACPI_STATUS -acpi_tb_get_table_rsdt ( - u32 *number_of_tables); +#define ACPI_MEM_NOT_ALLOCATED 0 +#define ACPI_MEM_ALLOCATED 1 +#define ACPI_MEM_MAPPED 2 + +#define ACPI_TABLE_SINGLE 0 +#define ACPI_TABLE_MULTIPLE 1 + + +/* Data about each known table type */ -u8 * -acpi_tb_scan_memory_for_rsdp ( - u8 *start_address, - u32 length); +typedef struct _acpi_table_support +{ + char *name; + char *signature; + u8 sig_length; + u8 flags; + u16 status; + void **global_ptr; -ACPI_STATUS -acpi_tb_find_rsdp ( - ACPI_TABLE_DESC *table_info); +} ACPI_TABLE_SUPPORT; /* - * Acpi_tbutils - common table utilities + * Get the architecture-specific tables */ -u8 -acpi_tb_system_table_pointer ( - void *where); - -ACPI_STATUS -acpi_tb_map_acpi_table ( - void *physical_address, - u32 *size, - void **logical_address); - -ACPI_STATUS -acpi_tb_verify_table_checksum ( - ACPI_TABLE_HEADER *table_header); - -u8 -acpi_tb_checksum ( - void *buffer, - u32 length); - -ACPI_STATUS -acpi_tb_validate_table_header ( - ACPI_TABLE_HEADER *table_header); +#ifdef _IA64 +#include "actbl64.h" +#else +#include "actbl32.h" +#endif #endif /* __ACTABLES_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/actbl.h linux-2.4.0-test9-lia/drivers/acpi/include/actbl.h --- linux-2.4.0-test9/drivers/acpi/include/actbl.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/actbl.h Wed Dec 31 16:00:00 1969 @@ -1,190 +0,0 @@ -/****************************************************************************** - * - * Name: actbl.h - Table data structures defined in ACPI specification - * $Revision: 34 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 - */ - -#ifndef __ACTBL_H__ -#define __ACTBL_H__ - - -/* - * Values for description table header signatures - */ - -#define RSDP_SIG "RSD PTR " /* RSDT Pointer signature */ -#define APIC_SIG "APIC" /* Multiple APIC Description Table */ -#define DSDT_SIG "DSDT" /* Differentiated System Description Table */ -#define FACP_SIG "FACP" /* Fixed ACPI Description Table */ -#define FACS_SIG "FACS" /* Firmware ACPI Control Structure */ -#define PSDT_SIG "PSDT" /* Persistent System Description Table */ -#define RSDT_SIG "RSDT" /* Root System Description Table */ -#define SSDT_SIG "SSDT" /* Secondary System Description Table */ -#define SBST_SIG "SBST" /* Smart Battery Specification Table */ -#define BOOT_SIG "BOOT" /* Boot table */ - - -#define GL_OWNED 0x02 /* Ownership of global lock is bit 1 */ - -/* values of Mapic.Model */ - -#define DUAL_PIC 0 -#define MULTIPLE_APIC 1 - -/* values of Type in APIC_HEADER */ - -#define APIC_PROC 0 -#define APIC_IO 1 - - -/* - * Architecture-independent tables - * The architecture dependent tables are in separate files - */ - -typedef struct /* Root System Descriptor Pointer */ -{ - NATIVE_CHAR signature [8]; /* contains "RSD PTR " */ - u8 checksum; /* to make sum of struct == 0 */ - NATIVE_CHAR oem_id [6]; /* OEM identification */ - u8 reserved; /* reserved - must be zero */ - u32 rsdt_physical_address; /* physical address of RSDT */ - -} ROOT_SYSTEM_DESCRIPTOR_POINTER; - - -typedef struct /* ACPI common table header */ -{ - NATIVE_CHAR signature [4]; /* identifies type of table */ - u32 length; /* length of table, in bytes, - * including header */ - u8 revision; /* specification minor version # */ - u8 checksum; /* to make sum of entire table == 0 */ - NATIVE_CHAR oem_id [6]; /* OEM identification */ - NATIVE_CHAR oem_table_id [8]; /* OEM table identification */ - u32 oem_revision; /* OEM revision number */ - NATIVE_CHAR asl_compiler_id [4]; /* ASL compiler vendor ID */ - u32 asl_compiler_revision; /* ASL compiler revision number */ - -} ACPI_TABLE_HEADER; - - -typedef struct /* APIC Table */ -{ - ACPI_TABLE_HEADER header; /* table header */ - u32 local_apic_address; /* Physical address for accessing local APICs */ - u32 PCATcompat : 1; /* a one indicates system also has dual 8259s */ - u32 reserved1 : 31; - -} APIC_TABLE; - - -typedef struct /* APIC Header */ -{ - u8 type; /* APIC type. Either APIC_PROC or APIC_IO */ - u8 length; /* Length of APIC structure */ - -} APIC_HEADER; - - -typedef struct /* Processor APIC */ -{ - APIC_HEADER header; - u8 processor_apic_id; /* ACPI processor id */ - u8 local_apic_id; /* processor's local APIC id */ - u32 processor_enabled: 1; /* Processor is usable if set */ - u32 reserved1 : 32; - -} PROCESSOR_APIC; - - -typedef struct /* IO APIC */ -{ - APIC_HEADER header; - u8 io_apic_id; /* I/O APIC ID */ - u8 reserved; /* reserved - must be zero */ - u32 io_apic_address; /* APIC's physical address */ - u32 vector; /* interrupt vector index where INTI - * lines start */ -} IO_APIC; - - -/* -** IA64 TODO: Add SAPIC Tables -*/ - -/* -** IA64 TODO: Modify Smart Battery Description to comply with ACPI IA64 -** extensions. -*/ -typedef struct /* Smart Battery Description Table */ -{ - ACPI_TABLE_HEADER header; - u32 warning_level; - u32 low_level; - u32 critical_level; - -} SMART_BATTERY_DESCRIPTION_TABLE; - - -/* - * ACPI Table information. We save the table address, length, - * and type of memory allocation (mapped or allocated) for each - * table for 1) when we exit, and 2) if a new table is installed - */ - -#define ACPI_MEM_NOT_ALLOCATED 0 -#define ACPI_MEM_ALLOCATED 1 -#define ACPI_MEM_MAPPED 2 - -/* Definitions for the Flags bitfield member of ACPI_TABLE_SUPPORT */ - -#define ACPI_TABLE_SINGLE 0 -#define ACPI_TABLE_MULTIPLE 1 - - -/* Data about each known table type */ - -typedef struct _acpi_table_support -{ - NATIVE_CHAR *name; - NATIVE_CHAR *signature; - u8 sig_length; - u8 flags; - u16 status; - void **global_ptr; - -} ACPI_TABLE_SUPPORT; - - -/* - * Get the architecture-specific tables - */ - -#ifdef IA64 -#include "actbl64.h" -#else -#include "actbl32.h" -#endif - - -#endif /* __ACTBL_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/actbl32.h linux-2.4.0-test9-lia/drivers/acpi/include/actbl32.h --- linux-2.4.0-test9/drivers/acpi/include/actbl32.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/actbl32.h Thu Aug 24 18:16:02 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Name: actbl32.h - ACPI tables specific to IA32 - * $Revision: 11 $ * *****************************************************************************/ @@ -27,6 +26,17 @@ #define __ACTBL32_H__ +/* IA32 Root System Descriptor Pointer */ +typedef struct +{ + char signature [8]; /* contains "RSD PTR " */ + u8 checksum; /* to make sum of struct == 0 */ + char oem_id [6]; /* OEM identification */ + u8 reserved; /* reserved - must be zero */ + u32 rsdt_physical_address; /* physical address of RSDT */ +} ROOT_SYSTEM_DESCRIPTOR_POINTER; + + /* IA32 Root System Description Table */ typedef struct @@ -41,7 +51,7 @@ typedef struct { - NATIVE_CHAR signature[4]; /* signature "FACS" */ + char signature[4]; /* signature "FACS" */ u32 length; /* length of structure, in bytes */ u32 hardware_signature; /* hardware configuration signature */ u32 firmware_waking_vector; /* ACPI OS waking vector */ diff -urN linux-2.4.0-test9/drivers/acpi/include/actbl64.h linux-2.4.0-test9-lia/drivers/acpi/include/actbl64.h --- linux-2.4.0-test9/drivers/acpi/include/actbl64.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/actbl64.h Thu Aug 24 18:16:02 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Name: actbl64.h - ACPI tables specific to IA64 - * $Revision: 12 $ * *****************************************************************************/ @@ -29,6 +29,17 @@ typedef UINT64 IO_ADDRESS; /* Only for clarity in declarations */ +/* IA64 Root System Descriptor Pointer */ + +typedef struct +{ + char signature [8]; /* contains "RSD PTR " */ + u8 checksum; /* to make sum of struct == 0 */ + char oem_id [6]; /* OEM identification */ + u8 reserved; /* reserved - must be zero */ + u32 rsdt_physical_address; /* physical address of RSDT. u64!!! */ +} ROOT_SYSTEM_DESCRIPTOR_POINTER; + /* IA64 Root System Description Table */ @@ -45,7 +56,7 @@ typedef struct { - NATIVE_CHAR signature[4]; /* signature "FACS" */ + char signature[4]; /* signature "FACS" */ u32 length; /* length of structure, in bytes */ u32 hardware_signature; /* hardware configuration signature */ u32 reserved4; /* must be 0 */ @@ -65,7 +76,7 @@ ACPI_TABLE_HEADER header; /* table header */ u32 reserved_pad; /* IA64 alignment, must be 0 */ ACPI_TBLPTR firmware_ctrl; /* Physical address of FACS */ - ACPI_TBLPTR dsdt; /* Physical address of DSDT */ + ACPI_TBLPTR dsdt; /* Physical address of DSDT */ u8 model; /* System Interrupt Model */ u8 address_space; /* Address Space Bitmask */ u16 sci_int; /* System vector of SCI interrupt */ @@ -103,7 +114,7 @@ u32 pwr_button : 1; /* Power button is handled as a generic feature */ u32 sleep_button : 1; /* Sleep button is handled as a generic feature, or not present */ u32 fixed_rTC : 1; /* RTC wakeup stat not in fixed register space */ - u32 rtcs4 : 1; /* RTC wakeup stat not possible from S4 */ + u32 RTCS4 : 1; /* RTC wakeup stat not possible from S4 */ u32 tmr_val_ext : 1; /* tmr_val is 32 bits */ u32 dock_cap : 1; /* Supports Docking */ u32 reserved6 : 22; /* reserved - must be zero */ diff -urN linux-2.4.0-test9/drivers/acpi/include/actypes.h linux-2.4.0-test9-lia/drivers/acpi/include/actypes.h --- linux-2.4.0-test9/drivers/acpi/include/actypes.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/actypes.h Thu Aug 24 18:16:02 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Name: actypes.h - Common data types for the entire ACPI subsystem - * $Revision: 131 $ * *****************************************************************************/ @@ -23,18 +23,15 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef __ACTYPES_H__ -#define __ACTYPES_H__ +#ifndef _ACTYPES_H +#define _ACTYPES_H /*! [Begin] no source code translation (keep the typedefs) */ /* * Data types - Fixed across all compilation models * - * BOOLEAN Logical Boolean. - * 1 byte value containing a 0 for FALSE or a 1 for TRUE. - * Other values are undefined. - * + * BOOLEAN Logical Boolean. 1 byte value containing a 0 for FALSE or a 1 for TRUE. Other values are undefined. * INT8 8-bit (1 byte) signed value * UINT8 8-bit (1 byte) unsigned value * INT16 16-bit (2 byte) signed value @@ -48,17 +45,14 @@ * UCHAR Character. 1 byte unsigned value. */ -#ifdef __ia64__ -#define _IA64 -#endif - #ifdef _IA64 /* * 64-bit type definitions */ +typedef signed char INT8; typedef unsigned char UINT8; -typedef unsigned char BOOLEAN; typedef unsigned char UCHAR; +typedef short INT16; typedef unsigned short UINT16; typedef int INT32; typedef unsigned int UINT32; @@ -80,9 +74,10 @@ /* * 16-bit type definitions */ +typedef signed char INT8; typedef unsigned char UINT8; -typedef unsigned char BOOLEAN; typedef unsigned char UCHAR; +typedef int INT16; typedef unsigned int UINT16; typedef long INT32; typedef unsigned long UINT32; @@ -101,9 +96,10 @@ /* * 32-bit type definitions (default) */ +typedef signed char INT8; typedef unsigned char UINT8; -typedef unsigned char BOOLEAN; typedef unsigned char UCHAR; +typedef short INT16; typedef unsigned short UINT16; typedef int INT32; typedef unsigned int UINT32; @@ -117,15 +113,19 @@ #define ALIGNED_ADDRESS_BOUNDARY 0x00000004 #define _HW_ALIGNMENT_SUPPORT + #endif + + /* * Miscellaneous common types */ +typedef UINT8 BOOLEAN; typedef UINT32 UINT32_BIT; -typedef NATIVE_UINT ACPI_PTRDIFF; -typedef char NATIVE_CHAR; +typedef NATIVE_INT ACPI_PTRDIFF; +typedef NATIVE_UINT ACPI_SIZE; /* @@ -133,6 +133,7 @@ */ #define ACPI_UCHAR_MAX (UCHAR) 0xFF +#define ACPI_INT32_MAX (INT32) 0x7FFFFFFF #define ACPI_UINT32_MAX (UINT32) 0xFFFFFFFF @@ -140,11 +141,14 @@ /* * Types used only in translated source */ +typedef INT8 s8; +typedef INT16 s16; typedef INT32 s32; typedef UINT8 u8; typedef UINT16 u16; typedef UINT32 u32; #endif + /*! [End] no source code translation !*/ @@ -172,9 +176,9 @@ */ typedef u32 ACPI_STATUS; /* All ACPI Exceptions */ -typedef u32 ACPI_NAME; /* 4-s8 ACPI name */ +typedef u32 ACPI_NAME; /* 4-char ACPI name */ typedef char* ACPI_STRING; /* Null terminated ASCII string */ -typedef void* ACPI_HANDLE; /* Actually a ptr to an Node */ +typedef void* ACPI_HANDLE; /* Actually a ptr to an NTE */ /* @@ -212,19 +216,18 @@ #define ACPI_TABLE_RSDT (ACPI_TABLE_TYPE) 6 #define ACPI_TABLE_SSDT (ACPI_TABLE_TYPE) 7 #define ACPI_TABLE_SBST (ACPI_TABLE_TYPE) 8 -#define ACPI_TABLE_BOOT (ACPI_TABLE_TYPE) 9 -#define ACPI_TABLE_MAX 9 -#define NUM_ACPI_TABLES 10 +#define ACPI_TABLE_SPIC (ACPI_TABLE_TYPE) 9 +#define ACPI_TABLE_BOOT (ACPI_TABLE_TYPE) 10 +#define ACPI_TABLE_MAX 10 +#define NUM_ACPI_TABLES 11 /* * Types associated with names. The first group of - * values correspond to the definition of the ACPI - * Object_type operator (See the ACPI Spec). Therefore, - * only add to the first group if the spec changes! + * values correspond to the definition of the ACPI Object_type operator (See the ACPI Spec). + * Therefore, only add to the first group if the spec changes! * - * Types must be kept in sync with the Acpi_ns_properties - * and Acpi_ns_type_names arrays + * Types must be kept in sync with the Acpi_ns_properties and Acpi_ns_type_names arrays */ typedef u32 ACPI_OBJECT_TYPE; @@ -236,14 +239,14 @@ #define ACPI_TYPE_BUFFER 3 /* 0x03 */ #define ACPI_TYPE_PACKAGE 4 /* 0x04 Byte_const, multiple Data_term/Constant/Super_name */ #define ACPI_TYPE_FIELD_UNIT 5 /* 0x05 */ -#define ACPI_TYPE_DEVICE 6 /* 0x06 Name, multiple Node */ +#define ACPI_TYPE_DEVICE 6 /* 0x06 Name, multiple Named_object */ #define ACPI_TYPE_EVENT 7 /* 0x07 */ #define ACPI_TYPE_METHOD 8 /* 0x08 Name, Byte_const, multiple Code */ #define ACPI_TYPE_MUTEX 9 /* 0x09 */ #define ACPI_TYPE_REGION 10 /* 0x0A */ -#define ACPI_TYPE_POWER 11 /* 0x0B Name,Byte_const,Word_const,multi Node */ +#define ACPI_TYPE_POWER 11 /* 0x0B Name,Byte_const,Word_const,multi Named_object */ #define ACPI_TYPE_PROCESSOR 12 /* 0x0C Name,Byte_const,DWord_const,Byte_const,multi Nm_o */ -#define ACPI_TYPE_THERMAL 13 /* 0x0D Name, multiple Node */ +#define ACPI_TYPE_THERMAL 13 /* 0x0D Name, multiple Named_object */ #define ACPI_TYPE_BUFFER_FIELD 14 /* 0x0E */ #define ACPI_TYPE_DDB_HANDLE 15 /* 0x0F */ #define ACPI_TYPE_DEBUG_OBJECT 16 /* 0x10 */ @@ -252,39 +255,32 @@ /* * This section contains object types that do not relate to the ACPI Object_type operator. - * They are used for various internal purposes only. If new predefined ACPI_TYPEs are - * added (via the ACPI specification), these internal types must move upwards. - * Also, values exceeding the largest official ACPI Object_type must not overlap with - * defined AML opcodes. - */ -#define INTERNAL_TYPE_BEGIN 17 - -#define INTERNAL_TYPE_DEF_FIELD 17 /* 0x11 */ -#define INTERNAL_TYPE_BANK_FIELD 18 /* 0x12 */ -#define INTERNAL_TYPE_INDEX_FIELD 19 /* 0x13 */ -#define INTERNAL_TYPE_REFERENCE 20 /* 0x14 Arg#, Local#, Name, Debug; used only in descriptors */ -#define INTERNAL_TYPE_ALIAS 21 /* 0x15 */ -#define INTERNAL_TYPE_NOTIFY 22 /* 0x16 */ -#define INTERNAL_TYPE_ADDRESS_HANDLER 23 /* 0x17 */ - -#define INTERNAL_TYPE_NODE_MAX 23 - -/* These are pseudo-types because there are never any namespace nodes with these types */ - -#define INTERNAL_TYPE_DEF_FIELD_DEFN 24 /* 0x18 Name, Byte_const, multiple Field_element */ -#define INTERNAL_TYPE_BANK_FIELD_DEFN 25 /* 0x19 2 Name,DWord_const,Byte_const,multi Field_element */ -#define INTERNAL_TYPE_INDEX_FIELD_DEFN 26 /* 0x1A 2 Name, Byte_const, multiple Field_element */ -#define INTERNAL_TYPE_IF 27 /* 0x1B Op_code, multiple Code */ -#define INTERNAL_TYPE_ELSE 28 /* 0x1C multiple Code */ -#define INTERNAL_TYPE_WHILE 29 /* 0x1D Op_code, multiple Code */ -#define INTERNAL_TYPE_SCOPE 30 /* 0x1E Name, multiple Node */ -#define INTERNAL_TYPE_DEF_ANY 31 /* 0x1F type is Any, suppress search of enclosing scopes */ -#define INTERNAL_TYPE_METHOD_ARGUMENT 32 /* 0x20 */ -#define INTERNAL_TYPE_METHOD_LOCAL_VAR 33 /* 0x21 */ + * They are used for various internal purposes only. A numerical gap is provided in + * case additional "official" Object_types are added in the future. Also, values exceeding + * the largest official ACPI Object_type must not overlap with defined AML opcodes. + */ +#define INTERNAL_TYPE_BEGIN 25 +#define INTERNAL_TYPE_DEF_FIELD 25 /* 0x19 */ +#define INTERNAL_TYPE_BANK_FIELD 26 /* 0x1A */ +#define INTERNAL_TYPE_INDEX_FIELD 27 /* 0x1B */ +#define INTERNAL_TYPE_DEF_FIELD_DEFN 28 /* 0x1C Name, Byte_const, multiple Field_element */ +#define INTERNAL_TYPE_BANK_FIELD_DEFN 29 /* 0x1D 2 Name,DWord_const,Byte_const,multi Field_element */ +#define INTERNAL_TYPE_INDEX_FIELD_DEFN 30 /* 0x1E 2 Name, Byte_const, multiple Field_element */ +#define INTERNAL_TYPE_IF 31 /* 0x1F Op_code, multiple Code */ +#define INTERNAL_TYPE_ELSE 32 /* 0x20 multiple Code */ +#define INTERNAL_TYPE_WHILE 33 /* 0x21 Op_code, multiple Code */ +#define INTERNAL_TYPE_SCOPE 34 /* 0x22 Name, multiple Named_object */ +#define INTERNAL_TYPE_DEF_ANY 35 /* 0x23 type is Any, suppress search of enclosing scopes */ +#define INTERNAL_TYPE_REFERENCE 36 /* 0x24 Arg#, Local#, Name, Debug; used only in descriptors */ +#define INTERNAL_TYPE_ALIAS 37 /* 0x25 */ +#define INTERNAL_TYPE_NOTIFY 38 /* 0x26 */ +#define INTERNAL_TYPE_ADDRESS_HANDLER 39 /* 0x27 */ +#define INTERNAL_TYPE_METHOD_ARGUMENT 40 /* 0x28 */ +#define INTERNAL_TYPE_METHOD_LOCAL_VAR 41 /* 0x29 */ -#define INTERNAL_TYPE_MAX 33 +#define INTERNAL_TYPE_MAX 41 -#define INTERNAL_TYPE_INVALID 34 +#define INTERNAL_TYPE_INVALID 42 #define ACPI_TYPE_NOT_FOUND 0xFF /* @@ -380,7 +376,7 @@ { ACPI_OBJECT_TYPE type; u32 length; /* # of bytes in string, excluding trailing null */ - NATIVE_CHAR *pointer; /* points to the string value */ + char *pointer; /* points to the string value */ } string; struct @@ -556,8 +552,7 @@ u32 address, u32 bit_width, u32 *value, - void *handler_context, - void *region_context); + void *context); #define ACPI_DEFAULT_HANDLER ((ADDRESS_SPACE_HANDLER) NULL) @@ -567,7 +562,7 @@ ACPI_HANDLE region_handle, u32 function, void *handler_context, - void **region_context); + void **return_context); #define ACPI_REGION_ACTIVATE 0 #define ACPI_REGION_DEACTIVATE 1 @@ -595,11 +590,13 @@ #define ACPI_COMMON_OBJ_INFO \ - ACPI_OBJECT_TYPE type; /* ACPI object type */ \ - ACPI_NAME name; /* ACPI object Name */ \ - /* TBD: [Restructure] Do we want or need these next two??*/ \ - ACPI_HANDLE parent; /* Parent object */ \ - ACPI_HANDLE children; /* Linked list of children */ \ + ACPI_OBJECT_TYPE type; /* ACPI object type */\ + ACPI_NAME name; /* ACPI object Name */\ + /*\ + * TBD: [Restructure] Do we want or need these next two??\ + */\ + ACPI_HANDLE parent; /* Parent object */\ + ACPI_HANDLE children; /* Linked list of children */\ u32 valid /* ????? */ typedef struct @@ -615,8 +612,8 @@ /* * TBD: [Restructure]: a HID or a _UID can return either a number or a string */ - NATIVE_CHAR hardware_id [9]; /* _HID value if any */ - NATIVE_CHAR unique_id[9]; /* _UID value if any */ + char hardware_id [9]; /* _HID value if any */ + char unique_id[9]; /* _UID value if any */ u32 address; /* _ADR value if any */ u32 current_status; /* _STA value */ } ACPI_DEVICE_INFO; @@ -626,6 +623,7 @@ typedef struct { + void *handler_context; u32 seg; u32 bus; u32 dev_func; @@ -634,9 +632,11 @@ typedef struct { - u8 *mapped_physical_address; - u8 *mapped_logical_address; + void *handler_context; + char *mapped_physical_address; + char *mapped_logical_address; u32 mapped_length; + } MEM_HANDLER_CONTEXT; @@ -859,7 +859,7 @@ u32 address_length; u32 resource_source_index; u32 resource_source_string_length; - NATIVE_CHAR resource_source[1]; + u8 resource_source[1]; } ADDRESS16_RESOURCE; @@ -878,7 +878,7 @@ u32 address_length; u32 resource_source_index; u32 resource_source_string_length; - NATIVE_CHAR resource_source[1]; + u8 resource_source[1]; } ADDRESS32_RESOURCE; @@ -892,7 +892,7 @@ u32 interrupts[1]; u32 resource_source_index; u32 resource_source_string_length; - NATIVE_CHAR resource_source[1]; + u8 resource_source[1]; } EXTENDED_IRQ_RESOURCE; @@ -952,7 +952,7 @@ u32 address; u32 pin; u32 source_index; - NATIVE_CHAR source[1]; + u8 source[1]; } PRT_ENTRY; @@ -968,4 +968,4 @@ * END: Definitions for PCI Routing tables */ -#endif /* __ACTYPES_H__ */ +#endif /* ACTYPES_H */ diff -urN linux-2.4.0-test9/drivers/acpi/include/amlcode.h linux-2.4.0-test9-lia/drivers/acpi/include/amlcode.h --- linux-2.4.0-test9/drivers/acpi/include/amlcode.h Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/include/amlcode.h Wed Jul 5 11:23:12 2000 @@ -1,9 +1,9 @@ + /****************************************************************************** * * Name: amlcode.h - Definitions for AML, as included in "definition blocks" * Declarations and definitions contained herein are derived * directly from the ACPI specification. - * $Revision: 39 $ * *****************************************************************************/ @@ -108,7 +108,7 @@ #define AML_IF_OP (u16) 0xa0 #define AML_ELSE_OP (u16) 0xa1 #define AML_WHILE_OP (u16) 0xa2 -#define AML_NOOP_OP (u16) 0xa3 +#define AML_NOOP_CODE (u16) 0xa3 #define AML_RETURN_OP (u16) 0xa4 #define AML_BREAK_OP (u16) 0xa5 #define AML_BREAK_POINT_OP (u16) 0xcc @@ -133,9 +133,9 @@ #define AML_WAIT_OP (u16) 0x5b25 #define AML_RESET_OP (u16) 0x5b26 #define AML_RELEASE_OP (u16) 0x5b27 -#define AML_FROM_BCD_OP (u16) 0x5b28 -#define AML_TO_BCD_OP (u16) 0x5b29 -#define AML_UNLOAD_OP (u16) 0x5b2a +#define AML_FROM_BCDOP (u16) 0x5b28 +#define AML_TO_BCDOP (u16) 0x5b29 +#define AML_UN_LOAD_OP (u16) 0x5b2a #define AML_REVISION_OP (u16) 0x5b30 #define AML_DEBUG_OP (u16) 0x5b31 #define AML_FATAL_OP (u16) 0x5b32 @@ -156,11 +156,7 @@ #define AML_LNOTEQUAL_OP (u16) 0x9293 -/* - * Internal opcodes - * Use only "Unknown" AML opcodes, don't attempt to use - * any valid ACPI ASCII values (A-Z, 0-9, '-') - */ +/* Internal opcodes */ #define AML_NAMEPATH_OP (u16) 0x002d #define AML_NAMEDFIELD_OP (u16) 0x0030 @@ -169,7 +165,29 @@ #define AML_BYTELIST_OP (u16) 0x0033 #define AML_STATICSTRING_OP (u16) 0x0034 #define AML_METHODCALL_OP (u16) 0x0035 -#define AML_RETURN_VALUE_OP (u16) 0x0036 + + +/* + * argument types + */ + +/* +#define AML_ASCIICHARLIST_ARG 'A' +#define AML_BYTEDATA_ARG 'b' +#define AML_BYTELIST_ARG 'B' +#define AML_DWORDDATA_ARG 'd' +#define AML_DATAOBJECT_ARG 'o' +#define AML_DATAOBJECTLIST_ARG 'O' +#define AML_FIELDLIST_ARG 'F' +#define AML_NAMESTRING_ARG 'n' +#define AML_OBJECTLIST_ARG 'P' +#define AML_PKGLENGTH_ARG 'p' +#define AML_SUPERNAME_ARG 's' +#define AML_TARGET_ARG 'l' +#define AML_TERMARG_ARG 't' +#define AML_TERMLIST_ARG 'T' +#define AML_WORDDATA_ARG 'w' +*/ #define ARG_NONE 0x0 @@ -211,7 +229,7 @@ #define ARGI_STRING 0x06 #define ARGI_BUFFER 0x07 #define ARGI_PACKAGE 0x08 -#define ARGI_DATAOBJECT 0x09 /* Buffer, string, package or reference to a Node - Used only by Size_of operator*/ +#define ARGI_DATAOBJECT 0x09 /* Buffer, string, package or NTE reference - Used only by Size_of operator*/ #define ARGI_COMPLEXOBJ 0x0A /* Buffer or package */ #define ARGI_MUTEX 0x0B #define ARGI_EVENT 0x0C @@ -273,9 +291,8 @@ #define OPTYPE_CONTROL 18 #define OPTYPE_RECONFIGURATION 19 #define OPTYPE_NAMED_OBJECT 20 -#define OPTYPE_RETURN 21 -#define OPTYPE_BOGUS 22 +#define OPTYPE_BOGUS 21 /* Comparison operation codes for Match_op operator */ @@ -358,11 +375,13 @@ extern u8 acpi_gbl_aml [NUM_OPCODES]; extern u16 acpi_gbl_pfx [NUM_OPCODES]; -extern NATIVE_CHAR *acpi_gbl_region_types [NUM_REGION_TYPES]; -extern NATIVE_CHAR *acpi_gbl_match_ops [NUM_MATCH_OPS]; -extern NATIVE_CHAR *acpi_gbl_access_types [NUM_ACCESS_TYPES]; -extern NATIVE_CHAR *acpi_gbl_update_rules [NUM_UPDATE_RULES]; -extern NATIVE_CHAR *acpi_gbl_FEnames [NUM_FIELD_NAMES]; +extern char *acpi_gbl_short_ops [NUM_OPCODES]; +extern char *acpi_gbl_long_ops [NUM_OPCODES]; +extern char *acpi_gbl_region_types [NUM_REGION_TYPES]; +extern char *acpi_gbl_match_ops [NUM_MATCH_OPS]; +extern char *acpi_gbl_access_types [NUM_ACCESS_TYPES]; +extern char *acpi_gbl_update_rules [NUM_UPDATE_RULES]; +extern char *acpi_gbl_FEnames [NUM_FIELD_NAMES]; /* @@ -373,7 +392,7 @@ /* Data used in keeping track of fields */ -NATIVE_CHAR *acpi_gbl_FEnames[NUM_FIELD_NAMES] = +char *acpi_gbl_FEnames[NUM_FIELD_NAMES] = { "skip", "?access?" @@ -382,7 +401,7 @@ /* Region type decoding */ -NATIVE_CHAR *acpi_gbl_region_types[NUM_REGION_TYPES] = +char *acpi_gbl_region_types[NUM_REGION_TYPES] = { "System_memory", "System_iO", @@ -392,7 +411,7 @@ }; -NATIVE_CHAR *acpi_gbl_match_ops[NUM_MATCH_OPS] = +char *acpi_gbl_match_ops[NUM_MATCH_OPS] = { "Error", "MTR", @@ -406,7 +425,7 @@ /* Access type decoding */ -NATIVE_CHAR *acpi_gbl_access_types[NUM_ACCESS_TYPES] = +char *acpi_gbl_access_types[NUM_ACCESS_TYPES] = { "Any_acc", "Byte_acc", @@ -420,7 +439,7 @@ /* Update rule decoding */ -NATIVE_CHAR *acpi_gbl_update_rules[NUM_UPDATE_RULES] = +char *acpi_gbl_update_rules[NUM_UPDATE_RULES] = { "Preserve", "Write_as_ones", diff -urN linux-2.4.0-test9/drivers/acpi/include/common.h linux-2.4.0-test9-lia/drivers/acpi/include/common.h --- linux-2.4.0-test9/drivers/acpi/include/common.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/common.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,650 @@ + +/****************************************************************************** + * + * Name: common.h -- prototypes for the common (subsystem-wide) procedures + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef _COMMON_H +#define _COMMON_H + + +#define REF_INCREMENT (u16) 0 +#define REF_DECREMENT (u16) 1 +#define REF_FORCE_DELETE (u16) 2 + +/* Acpi_cm_dump_buffer */ + +#define DB_BYTE_DISPLAY 1 +#define DB_WORD_DISPLAY 2 +#define DB_DWORD_DISPLAY 4 +#define DB_QWORD_DISPLAY 8 + + +/* Global initialization interfaces */ + +void +acpi_cm_init_globals ( + ACPI_INIT_DATA *init_data); + +void +acpi_cm_terminate ( + void); + + +/* + * Acpi_cm_init - miscellaneous initialization and shutdown + */ + +ACPI_STATUS +acpi_cm_hardware_initialize ( + void); + +ACPI_STATUS +acpi_cm_subsystem_shutdown ( + void); + +/* + * Acpi_cm_global - Global data structures and procedures + */ + +char * +acpi_cm_get_mutex_name ( + u32 mutex_id); + +char * +acpi_cm_get_type_name ( + u32 type); + +u8 +acpi_cm_valid_object_type ( + u32 type); + +ACPI_OWNER_ID +acpi_cm_allocate_owner_id ( + u32 id_type); + + +/* + * Acpi_cm_clib - Local implementations of C library functions + */ + +ACPI_SIZE +acpi_cm_strlen ( + const char *string); + +char * +acpi_cm_strcpy ( + char *dst_string, + const char *src_string); + +char * +acpi_cm_strncpy ( + char *dst_string, + const char *src_string, + ACPI_SIZE count); + +u32 +acpi_cm_strncmp ( + const char *string1, + const char *string2, + ACPI_SIZE count); + +u32 +acpi_cm_strcmp ( + const char *string1, + const char *string2); + +char * +acpi_cm_strcat ( + char *dst_string, + const char *src_string); + +char * +acpi_cm_strncat ( + char *dst_string, + const char *src_string, + ACPI_SIZE count); + +u32 +acpi_cm_strtoul ( + const char *string, + char **terminator, + s32 base); + +char * +acpi_cm_strstr ( + char *string1, + char *string2); + +char * +acpi_cm_strupr ( + char *src_string); + +void * +acpi_cm_memcpy ( + void *dest, + const void *src, + ACPI_SIZE count); + +void * +acpi_cm_memset ( + void *dest, + s32 value, + ACPI_SIZE count); + +s32 +acpi_cm_to_upper ( + s32 c); + +s32 +acpi_cm_to_lower ( + s32 c); + + +/* + * Acpi_cm_copy - Object construction and conversion interfaces + */ + +ACPI_STATUS +acpi_cm_build_simple_object( + ACPI_OBJECT_INTERNAL *obj, + ACPI_OBJECT *user_obj, + char *data_space, + u32 *buffer_space_used); + +ACPI_STATUS +acpi_cm_build_package_object ( + ACPI_OBJECT_INTERNAL *obj, + char *buffer, + u32 *space_used); + +ACPI_STATUS +acpi_cm_build_external_object ( + ACPI_OBJECT_INTERNAL *obj, + ACPI_BUFFER *ret_buffer); + +ACPI_STATUS +acpi_cm_build_internal_simple_object( + ACPI_OBJECT *user_obj, + ACPI_OBJECT_INTERNAL *obj); + +ACPI_STATUS +acpi_cm_build_internal_object ( + ACPI_OBJECT *obj, + ACPI_OBJECT_INTERNAL *internal_obj); + +ACPI_STATUS +acpi_cm_copy_internal_simple_object ( + ACPI_OBJECT_INTERNAL *source_obj, + ACPI_OBJECT_INTERNAL *dest_obj); + +ACPI_STATUS +acpi_cm_build_copy_internal_package_object ( + ACPI_OBJECT_INTERNAL *source_obj, + ACPI_OBJECT_INTERNAL *dest_obj); + + +/* + * Acpi_cm_create - Object creation + */ + +ACPI_STATUS +acpi_cm_update_object_reference ( + ACPI_OBJECT_INTERNAL *object, + u16 action); + +ACPI_OBJECT_INTERNAL * +_cm_create_internal_object ( + char *module_name, + s32 line_number, + s32 component_id, + OBJECT_TYPE_INTERNAL type); + + +/* + * Acpi_cm_debug - Debug interfaces + */ + +s32 +get_debug_level ( + void); + +void +set_debug_level ( + s32 level); + +void +function_trace ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING function_name); + +void +function_trace_ptr ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING function_name, + void *pointer); + +void +function_trace_u32 ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING function_name, + u32 integer); + +void +function_trace_str ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING function_name, + char *string); + +void +function_exit ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING function_name); + +void +function_status_exit ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING function_name, + ACPI_STATUS status); + +void +function_value_exit ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING function_name, + NATIVE_UINT value); + +void +function_ptr_exit ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING function_name, + char *ptr); + +void +debug_print_prefix ( + ACPI_STRING module_name, + s32 line_number); + +void +debug_print ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + s32 print_level, + char *format, ...); + +void +debug_print_raw ( + char *format, ...); + +void +_report_info ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING message); + +void +_report_error ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING message); + +void +_report_warning ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING message); + +void +_report_success ( + ACPI_STRING module_name, + s32 line_number, + s32 component_id, + ACPI_STRING message); + +void +acpi_cm_dump_buffer ( + char *buffer, + u32 count, + u32 display, + s32 component_id); + + +/* + * Acpi_cm_delete - Object deletion + */ + +void +acpi_cm_delete_internal_obj ( + ACPI_OBJECT_INTERNAL *object); + +void +acpi_cm_delete_internal_package_object ( + ACPI_OBJECT_INTERNAL *object); + +void +acpi_cm_delete_internal_simple_object ( + ACPI_OBJECT_INTERNAL *object); + +ACPI_STATUS +acpi_cm_delete_internal_object_list ( + ACPI_OBJECT_INTERNAL **obj_list); + + +/* + * Acpi_cm_eval - object evaluation + */ + +/* Method name strings */ + +#define METHOD_NAME__HID "_HID" +#define METHOD_NAME__UID "_UID" +#define METHOD_NAME__ADR "_ADR" +#define METHOD_NAME__STA "_STA" +#define METHOD_NAME__REG "_REG" +#define METHOD_NAME__SEG "_SEG" +#define METHOD_NAME__BBN "_BBN" + + +ACPI_STATUS +acpi_cm_evaluate_numeric_object ( + char *method_name, + ACPI_NAMED_OBJECT *acpi_device, + u32 *address); + +ACPI_STATUS +acpi_cm_execute_HID ( + ACPI_NAMED_OBJECT *acpi_device, + DEVICE_ID *hid); + +ACPI_STATUS +acpi_cm_execute_STA ( + ACPI_NAMED_OBJECT *acpi_device, + u32 *status_flags); + +ACPI_STATUS +acpi_cm_execute_UID ( + ACPI_NAMED_OBJECT *acpi_device, + DEVICE_ID *uid); + + +/* + * Acpi_cm_error - exception interfaces + */ + +char * +acpi_cm_format_exception ( + ACPI_STATUS status); + + +/* + * Acpi_cm_mutex - mutual exclusion interfaces + */ + +ACPI_STATUS +acpi_cm_mutex_initialize ( + void); + +void +acpi_cm_mutex_terminate ( + void); + +ACPI_STATUS +acpi_cm_create_mutex ( + ACPI_MUTEX_HANDLE mutex_id); + +ACPI_STATUS +acpi_cm_delete_mutex ( + ACPI_MUTEX_HANDLE mutex_id); + +ACPI_STATUS +acpi_cm_acquire_mutex ( + ACPI_MUTEX_HANDLE mutex_id); + +ACPI_STATUS +acpi_cm_release_mutex ( + ACPI_MUTEX_HANDLE mutex_id); + + +/* + * Acpi_cm_object - internal object create/delete/cache routines + */ + +#define acpi_cm_create_internal_object(t) _cm_create_internal_object(_THIS_MODULE,__LINE__,_COMPONENT,t) +#define acpi_cm_allocate_object_desc() _cm_allocate_object_desc(_THIS_MODULE,__LINE__,_COMPONENT) + +void * +_cm_allocate_object_desc ( + char *module_name, + s32 line_number, + s32 component_id); + +void +acpi_cm_delete_object_desc ( + ACPI_OBJECT_INTERNAL *object); + +u8 +acpi_cm_valid_internal_object ( + void *object); + + +/* + * Acpi_cm_ref_cnt - Object reference count management + */ + +void +acpi_cm_add_reference ( + ACPI_OBJECT_INTERNAL *object); + +void +acpi_cm_remove_reference ( + ACPI_OBJECT_INTERNAL *object); + +/* + * Acpi_cm_size - Object size routines + */ + +ACPI_STATUS +acpi_cm_get_simple_object_size ( + ACPI_OBJECT_INTERNAL *obj, + u32 *obj_length); + +ACPI_STATUS +acpi_cm_get_package_object_size ( + ACPI_OBJECT_INTERNAL *obj, + u32 *obj_length); + +ACPI_STATUS +acpi_cm_get_object_size( + ACPI_OBJECT_INTERNAL *obj, + u32 *obj_length); + + +/* + * Acpi_cm_state - Generic state creation/cache routines + */ + +void +acpi_cm_push_generic_state ( + ACPI_GENERIC_STATE **list_head, + ACPI_GENERIC_STATE *state); + +ACPI_GENERIC_STATE * +acpi_cm_pop_generic_state ( + ACPI_GENERIC_STATE **list_head); + + +ACPI_GENERIC_STATE * +acpi_cm_create_generic_state ( + void); + +ACPI_GENERIC_STATE * +acpi_cm_create_update_state ( + ACPI_OBJECT_INTERNAL *object, + u16 action); + +ACPI_STATUS +acpi_cm_create_update_state_and_push ( + ACPI_OBJECT_INTERNAL *object, + u16 action, + ACPI_GENERIC_STATE **state_list); + +ACPI_GENERIC_STATE * +acpi_cm_create_control_state ( + void); + +void +acpi_cm_delete_generic_state ( + ACPI_GENERIC_STATE *state); + +void +acpi_cm_delete_generic_state_cache ( + void); + +void +acpi_cm_delete_object_cache ( + void); + +/* + * Acpi_cmutils + */ + +u8 +acpi_cm_valid_acpi_name ( + u32 name); + +u8 +acpi_cm_valid_acpi_character ( + char character); + + +/* + * Memory allocation functions and related macros. + * Macros that expand to include filename and line number + */ + +void * +_cm_allocate ( + u32 size, + u32 component, + ACPI_STRING module, + s32 line); + +void * +_cm_callocate ( + u32 size, + u32 component, + ACPI_STRING module, + s32 line); + +void +_cm_free ( + void *address, + u32 component, + ACPI_STRING module, + s32 line); + +void +acpi_cm_init_static_object ( + ACPI_OBJECT_INTERNAL *obj_desc); + +#define acpi_cm_allocate(a) _cm_allocate(a,_COMPONENT,_THIS_MODULE,__LINE__) +#define acpi_cm_callocate(a) _cm_callocate(a, _COMPONENT,_THIS_MODULE,__LINE__) +#define acpi_cm_free(a) _cm_free(a,_COMPONENT,_THIS_MODULE,__LINE__) + +#ifndef ACPI_DEBUG + +#define acpi_cm_add_element_to_alloc_list(a,b,c,d,e,f) +#define acpi_cm_delete_element_from_alloc_list(a,b,c,d) +#define acpi_cm_dump_current_allocations(a,b) +#define acpi_cm_dump_allocation_info() + +#define DECREMENT_OBJECT_METRICS(a) +#define INCREMENT_OBJECT_METRICS(a) +#define INITIALIZE_ALLOCATION_METRICS() + +#else + +#define INITIALIZE_ALLOCATION_METRICS() \ + acpi_gbl_current_object_count = 0; \ + acpi_gbl_current_object_size = 0; \ + acpi_gbl_running_object_count = 0; \ + acpi_gbl_running_object_size = 0; \ + acpi_gbl_max_concurrent_object_count = 0; \ + acpi_gbl_max_concurrent_object_size = 0; \ + acpi_gbl_current_alloc_size = 0; \ + acpi_gbl_current_alloc_count = 0; \ + acpi_gbl_running_alloc_size = 0; \ + acpi_gbl_running_alloc_count = 0; \ + acpi_gbl_max_concurrent_alloc_size = 0; \ + acpi_gbl_max_concurrent_alloc_count = 0 + +#define DECREMENT_OBJECT_METRICS(a) \ + acpi_gbl_current_object_count--; \ + acpi_gbl_current_object_size -= a + +#define INCREMENT_OBJECT_METRICS(a) \ + acpi_gbl_current_object_count++; \ + acpi_gbl_running_object_count++; \ + if (acpi_gbl_max_concurrent_object_count < acpi_gbl_current_object_count) \ + { \ + acpi_gbl_max_concurrent_object_count = acpi_gbl_current_object_count; \ + } \ + acpi_gbl_running_object_size += a; \ + acpi_gbl_current_object_size += a; \ + if (acpi_gbl_max_concurrent_object_size < acpi_gbl_current_object_size) \ + { \ + acpi_gbl_max_concurrent_object_size = acpi_gbl_current_object_size; \ + } + + +void +acpi_cm_dump_allocation_info ( + void); + +void +acpi_cm_dump_current_allocations ( + u32 component, + ACPI_STRING module); + +#endif + + +#endif /* _COMMON_H */ diff -urN linux-2.4.0-test9/drivers/acpi/include/config.h linux-2.4.0-test9-lia/drivers/acpi/include/config.h --- linux-2.4.0-test9/drivers/acpi/include/config.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/config.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,185 @@ + +/****************************************************************************** + * + * Name: config.h - Global configuration constants + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef _CONFIG_H +#define _CONFIG_H + + +/****************************************************************************** + * + * Compile-time options + * + *****************************************************************************/ + +/* + * ACPI_DEBUG - This switch enables all the debug facilities of the ACPI + * subsystem. This includes the DEBUG_PRINT output statements + * When disabled, all DEBUG_PRINT statements are compiled out. + * + * ACPI_APPLICATION - Use this switch if the subsystem is going to be run + * at the application level. + * + */ + + +/****************************************************************************** + * + * Subsystem Constants + * + *****************************************************************************/ + + +/* Version string */ + +#define ACPI_CA_VERSION __DATE__ + +/* Name of host operating system (returned by the _OS_ namespace object) */ + +#ifdef _LINUX +#define ACPI_OS_NAME "Linux" +#else +#define ACPI_OS_NAME "Intel ACPI/CA Core Subsystem" +#endif + + +/* + * How and when control methods will be parsed + * The default action is to parse all methods at table load time to verify them, but delete the parse trees + * to conserve memory. Methods are parsed just in time before execution and the parse tree is deleted + * when execution completes. + */ +#define METHOD_PARSE_AT_INIT 0x0 /* Parse at table init, never delete the method parse tree */ +#define METHOD_PARSE_JUST_IN_TIME 0x1 /* Parse only when a method is invoked */ +#define METHOD_DELETE_AT_COMPLETION 0x2 /* Delete parse tree on method completion */ + +/* Default parsing configuration */ + +#define METHOD_PARSE_CONFIGURATION (METHOD_PARSE_JUST_IN_TIME | METHOD_DELETE_AT_COMPLETION) + + +/* Maximum objects in the various object caches */ + +#define MAX_STATE_CACHE_DEPTH 24 /* State objects for stacks */ +#define MAX_PARSE_CACHE_DEPTH 512 /* Parse tree objects */ +#define MAX_OBJECT_CACHE_DEPTH 32 /* Interpreter operand objects */ +#define MAX_WALK_CACHE_DEPTH 2 /* Objects for parse tree walks (method execution) */ + +/* + * Name_space Table size + * + * All tables are the same size to simplify the implementation. + * Tables may be extended by allocating additional tables that + * are in turn linked together to form a chain of tables. + */ + +#define NS_TABLE_SIZE 16 + +/* String size constants */ + +#define MAX_STRING_LENGTH 512 +#define PATHNAME_MAX 256 /* A full namespace pathname */ + + +/* Maximum count for a semaphore object */ + +#define MAX_SEMAPHORE_COUNT 256 + + +/* Max reference count (for debug only) */ + +#define MAX_REFERENCE_COUNT 0x200 + + +/* Size of cached memory mapping for system memory operation region */ + +#define SYSMEM_REGION_WINDOW_SIZE 4096 + + +/* + * Debugger threading model + * Use single threaded if the entire subsystem is contained in an application + * Use multiple threaded when the the subsystem is running in the kernel. + * + * By default the model is single threaded if ACPI_APPLICATION is set, + * multi-threaded if ACPI_APPLICATION is not set. + */ + +#define DEBUGGER_SINGLE_THREADED 0 +#define DEBUGGER_MULTI_THREADED 1 + +#ifdef ACPI_APPLICATION +#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED + +#else +#define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED +#endif + + +/****************************************************************************** + * + * ACPI Specification constants (Do not change unless the specification changes) + * + *****************************************************************************/ + +/* + * Method info (in WALK_STATE), containing local variables and argumetns + */ + +#define MTH_NUM_LOCALS 8 +#define MTH_MAX_LOCAL 7 + +#define MTH_NUM_ARGS 7 +#define MTH_MAX_ARG 6 + +/* + * Operand Stack (in WALK_STATE), Must be large enough to contain MTH_MAX_ARG + */ + +#define OBJ_NUM_OPERANDS 8 +#define OBJ_MAX_OPERAND 7 + +/* Names within the namespace are 4 bytes long */ + +#define ACPI_NAME_SIZE 4 +#define PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */ +#define PATH_SEPARATOR '.' + + +/* Constants used in searching for the RSDP in low memory */ + +#define LO_RSDP_WINDOW_BASE (void *) 0 +#define HI_RSDP_WINDOW_BASE (void *) 0xE0000 +#define LO_RSDP_WINDOW_SIZE 0x400 +#define HI_RSDP_WINDOW_SIZE 0x20000 +#define RSDP_SCAN_STEP 16 + + +/* Maximum nesting of package objects */ + +#define MAX_PACKAGE_DEPTH 16 + + +#endif /* _CONFIG_H */ + diff -urN linux-2.4.0-test9/drivers/acpi/include/debugger.h linux-2.4.0-test9-lia/drivers/acpi/include/debugger.h --- linux-2.4.0-test9/drivers/acpi/include/debugger.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/debugger.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,394 @@ + +/****************************************************************************** + * + * Name: debugger.h - ACPI/AML debugger + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef __DEBUGGER_H__ +#define __DEBUGGER_H__ + + +#define DB_MAX_ARGS 8 /* Must be max method args + 1 */ + +#define DB_COMMAND_PROMPT '-' +#define DB_EXECUTE_PROMPT '%' + + +extern int optind; +extern char *optarg; +extern u8 *aml_ptr; +extern u32 acpi_aml_length; + +extern u8 opt_tables; +extern u8 opt_disasm; +extern u8 opt_stats; +extern u8 opt_parse_jit; +extern u8 opt_verbose; + + +extern char *args[DB_MAX_ARGS]; +extern char line_buf[80]; +extern char scope_buf[40]; +extern char debug_filename[40]; +extern u8 output_to_file; +extern char *buffer; +extern char *filename; +extern char *INDENT_STRING; +extern u32 acpi_gbl_method_breakpoint; +extern u8 acpi_gbl_db_output_flags; +extern u32 acpi_gbl_db_debug_level; +extern u32 acpi_gbl_db_console_debug_level; + +extern u32 num_names; +extern u32 num_methods; +extern u32 num_regions; +extern u32 num_packages; +extern u32 num_aliases; +extern u32 num_devices; +extern u32 num_field_defs; +extern u32 num_thermal_zones; +extern u32 num_named_objects; +extern u32 num_grammar_elements; +extern u32 num_method_elements ; +extern u32 num_mutexes; +extern u32 num_power_resources; +extern u32 num_bank_fields ; +extern u32 num_index_fields; +extern u32 num_events; + +extern u32 size_of_parse_tree; +extern u32 size_of_method_trees; +extern u32 size_of_nTes; +extern u32 size_of_acpi_objects; + + +#define BUFFER_SIZE 4196 + +#define DB_REDIRECTABLE_OUTPUT 0x01 +#define DB_CONSOLE_OUTPUT 0x02 +#define DB_DUPLICATE_OUTPUT 0x03 + + +typedef struct command_info +{ + char *name; /* Command Name */ + char min_args; /* Minimum arguments required */ + +} COMMAND_INFO; + + +typedef struct argument_info +{ + char *name; /* Argument Name */ + +} ARGUMENT_INFO; + + +#define PARAM_LIST(pl) pl + +#define DBTEST_OUTPUT_LEVEL(lvl) if (opt_verbose) + +#define VERBOSE_PRINT(fp) DBTEST_OUTPUT_LEVEL(lvl) {\ + acpi_os_printf PARAM_LIST(fp);} + +#define EX_NO_SINGLE_STEP 1 +#define EX_SINGLE_STEP 2 + + +/* Prototypes */ + + +/* + * dbapi - external debugger interfaces + */ + +int +acpi_db_initialize ( + void); + +ACPI_STATUS +acpi_db_single_step ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op, + u8 op_type); + + +/* + * dbcmds - debug commands and output routines + */ + + +void +acpi_db_display_table_info ( + char *table_arg); + +void +acpi_db_unload_acpi_table ( + char *table_arg, + char *instance_arg); + +void +acpi_db_set_method_breakpoint ( + char *location, + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op); + +void +acpi_db_set_method_call_breakpoint ( + ACPI_GENERIC_OP *op); + +void +acpi_db_disassemble_aml ( + char *statements, + ACPI_GENERIC_OP *op); + +void +acpi_db_dump_namespace ( + char *start_arg, + char *depth_arg); + +void +acpi_db_dump_namespace_by_owner ( + char *owner_arg, + char *depth_arg); + +void +acpi_db_send_notify ( + char *name, + u32 value); + +void +acpi_db_set_method_data ( + char *type_arg, + char *index_arg, + char *value_arg); + +ACPI_STATUS +acpi_db_display_objects ( + char *obj_type_arg, + char *display_count_arg); + +ACPI_STATUS +acpi_db_find_name_in_namespace ( + char *name_arg); + +void +acpi_db_set_scope ( + char *name); + +void +acpi_db_find_references ( + char *object_arg); + + +/* + * dbdisasm - AML disassembler + */ + +void +acpi_db_display_op ( + ACPI_GENERIC_OP *origin, + u32 num_opcodes); + +void +acpi_db_display_namestring ( + char *name); + +void +acpi_db_display_path ( + ACPI_GENERIC_OP *op); + +void +acpi_db_display_opcode ( + ACPI_GENERIC_OP *op); + + +/* + * dbdisply - debug display commands + */ + + +void +acpi_db_display_method_info ( + ACPI_GENERIC_OP *op); + +void +acpi_db_decode_and_display_object ( + char *target, + char *output_type); + +void +acpi_db_display_result_object ( + ACPI_OBJECT_INTERNAL *ret_desc); + +ACPI_STATUS +acpi_db_display_all_methods ( + char *display_count_arg); + +void +acpi_db_display_internal_object ( + ACPI_OBJECT_INTERNAL *obj_desc); + +void +acpi_db_display_arguments ( + void); + +void +acpi_db_display_locals ( + void); + +void +acpi_db_display_results ( + void); + +void +acpi_db_display_calling_tree ( + void); + +void +acpi_db_display_argument_object ( + ACPI_OBJECT_INTERNAL *obj_desc); + + +/* + * dbexec - debugger control method execution + */ + +void +acpi_db_execute ( + char *name, + char **args, + u32 flags); + +void +acpi_db_create_execution_threads ( + char *num_threads_arg, + char *num_loops_arg, + char *method_name_arg); + + +/* + * dbfileio - Debugger file I/O commands + */ + +OBJECT_TYPE_INTERNAL +acpi_db_match_argument ( + char *user_argument, + ARGUMENT_INFO *arguments); + + +void +acpi_db_close_debug_file ( + void); + +void +acpi_db_open_debug_file ( + char *name); + +ACPI_STATUS +acpi_db_load_acpi_table ( + char *filename); + + +/* + * dbhistry - debugger HISTORY command + */ + +void +acpi_db_add_to_history ( + char *command_line); + +void +acpi_db_display_history (void); + +char * +acpi_db_get_from_history ( + char *command_num_arg); + + +/* + * dbinput - user front-end to the AML debugger + */ + +ACPI_STATUS +acpi_db_command_dispatch ( + char *input_buffer, + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op); + +void +acpi_db_execute_thread ( + void *context); + +ACPI_STATUS +acpi_db_user_commands ( + char prompt, + ACPI_GENERIC_OP *op); + + +/* + * dbstats - Generation and display of ACPI table statistics + */ + +void +acpi_db_generate_statistics ( + ACPI_GENERIC_OP *root, + u8 is_method); + + +ACPI_STATUS +acpi_db_display_statistics ( + char *type_arg); + + +/* + * dbutils - AML debugger utilities + */ + +void +acpi_db_set_output_destination ( + s32 where); + +void +acpi_db_dump_buffer ( + u32 address); + +void +acpi_db_dump_object ( + ACPI_OBJECT *obj_desc, + u32 level); + +void +acpi_db_prep_namestring ( + char *name); + + +ACPI_STATUS +acpi_db_second_pass_parse ( + ACPI_GENERIC_OP *root); + +ACPI_NAMED_OBJECT* +acpi_db_local_ns_lookup ( + char *name); + + +#endif /* __DEBUGGER_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/dispatch.h linux-2.4.0-test9-lia/drivers/acpi/include/dispatch.h --- linux-2.4.0-test9/drivers/acpi/include/dispatch.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/dispatch.h Thu Aug 24 18:16:02 2000 @@ -0,0 +1,383 @@ +/****************************************************************************** + * + * Module Name: dispatch.h + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + + +#ifndef _DISPATCH_H_ +#define _DISPATCH_H_ + + +#define NAMEOF_LOCAL_NTE "__L0" +#define NAMEOF_ARG_NTE "__A0" + + +/* For Acpi_ds_method_data_set_value */ + +#define MTH_TYPE_LOCAL 0 +#define MTH_TYPE_ARG 1 + + +/* Common interfaces */ + +ACPI_STATUS +acpi_ds_obj_stack_push ( + void *object, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ds_obj_stack_pop ( + u32 pop_count, + ACPI_WALK_STATE *walk_state); + +void * +acpi_ds_obj_stack_get_value ( + u32 index, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ds_obj_stack_pop_object ( + ACPI_OBJECT_INTERNAL **object, + ACPI_WALK_STATE *walk_state); + + +/* dsregion - Op region support */ + +ACPI_STATUS +acpi_ds_get_region_arguments ( + ACPI_OBJECT_INTERNAL *rgn_desc); + + +/* dsctrl - Parser/Interpreter interface, control stack routines */ + +/* +ACPI_CTRL_STATE * +Acpi_ds_create_control_state (void); + +void +Acpi_ds_push_control_state ( + ACPI_CTRL_STATE *Control_state, + ACPI_WALK_STATE *Walk_state); + +ACPI_CTRL_STATE * +Acpi_ds_pop_control_state ( + ACPI_WALK_STATE *Walk_state); +*/ + +ACPI_STATUS +acpi_ds_exec_begin_control_op ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op); + +ACPI_STATUS +acpi_ds_exec_end_control_op ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op); + + +/* dsexec - Parser/Interpreter interface, method execution callbacks */ + +ACPI_STATUS +acpi_ds_exec_begin_op ( + ACPI_WALK_STATE *state, + ACPI_GENERIC_OP *op); + +ACPI_STATUS +acpi_ds_exec_end_op ( + ACPI_WALK_STATE *state, + ACPI_GENERIC_OP *op); + + +/* dsfield - Parser/Interpreter interface for AML fields */ + + +ACPI_STATUS +acpi_ds_create_field ( + ACPI_GENERIC_OP *op, + ACPI_HANDLE region, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ds_create_bank_field ( + ACPI_GENERIC_OP *op, + ACPI_HANDLE region, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ds_create_index_field ( + ACPI_GENERIC_OP *op, + ACPI_HANDLE region, + ACPI_WALK_STATE *walk_state); + + +/* dsload - Parser/Interpreter interface, namespace load callbacks */ + +ACPI_STATUS +acpi_ds_load1_begin_op ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op); + +ACPI_STATUS +acpi_ds_load1_end_op ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op); + +ACPI_STATUS +acpi_ds_load2_begin_op ( + ACPI_WALK_STATE *state, + ACPI_GENERIC_OP *op); + +ACPI_STATUS +acpi_ds_load2_end_op ( + ACPI_WALK_STATE *state, + ACPI_GENERIC_OP *op); + + +/* dsmthdat - method data (locals/args) */ + + +ACPI_STATUS +acpi_ds_method_data_delete_all ( + ACPI_WALK_STATE *walk_state); + +u8 +acpi_ds_is_method_value ( + ACPI_OBJECT_INTERNAL *obj_desc); + +OBJECT_TYPE_INTERNAL +acpi_ds_method_data_get_type ( + u32 type, + u32 index); + +ACPI_STATUS +acpi_ds_method_data_get_value ( + u32 type, + u32 index, + ACPI_OBJECT_INTERNAL **obj_desc); + +ACPI_STATUS +acpi_ds_method_data_set_value ( + u32 type, + u32 index, + ACPI_OBJECT_INTERNAL *obj_desc); + +ACPI_STATUS +acpi_ds_method_data_delete_value ( + u32 type, + u32 index); + +ACPI_STATUS +acpi_ds_method_data_init_args ( + ACPI_OBJECT_INTERNAL **params, + u32 param_count); + +ACPI_NAMED_OBJECT* +acpi_ds_method_data_get_nte ( + u32 type, + u32 index); + +ACPI_STATUS +acpi_ds_method_data_init ( + ACPI_WALK_STATE *walk_state); + + +/* dsmethod - Parser/Interpreter interface - control method parsing */ + +ACPI_STATUS +acpi_ds_parse_method ( + ACPI_HANDLE obj_handle); + +ACPI_STATUS +acpi_ds_call_control_method ( + ACPI_WALK_LIST *walk_list, + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op); + +ACPI_STATUS +acpi_ds_restart_control_method ( + ACPI_WALK_STATE *walk_state, + ACPI_OBJECT_INTERNAL *return_desc); + +ACPI_STATUS +acpi_ds_terminate_control_method ( + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ds_begin_method_execution ( + ACPI_NAMED_OBJECT *method_entry, + ACPI_OBJECT_INTERNAL *obj_desc); + + +/* dsobj - Parser/Interpreter interface - object initialization and conversion */ + +ACPI_STATUS +acpi_ds_init_one_object ( + ACPI_HANDLE obj_handle, + u32 level, + void *context, + void **return_value); + +ACPI_STATUS +acpi_ds_initialize_objects ( + ACPI_TABLE_DESC *table_desc, + ACPI_NAMED_OBJECT *start_entry); + +ACPI_STATUS +acpi_ds_build_internal_package_obj ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op, + ACPI_OBJECT_INTERNAL **obj_desc); + +ACPI_STATUS +acpi_ds_build_internal_object ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op, + ACPI_OBJECT_INTERNAL **obj_desc_ptr); + +ACPI_STATUS +acpi_ds_init_object_from_op ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op, + u16 opcode, + ACPI_OBJECT_INTERNAL **obj_desc); + +ACPI_STATUS +acpi_ds_create_named_object ( + ACPI_WALK_STATE *walk_state, + ACPI_NAMED_OBJECT *entry, + ACPI_GENERIC_OP *op); + + +/* dsregn - Parser/Interpreter interface - Op Region parsing */ + +ACPI_STATUS +acpi_ds_eval_region_operands ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op); + +ACPI_STATUS +acpi_ds_initialize_region ( + ACPI_HANDLE obj_handle); + + +/* dsutils - Parser/Interpreter interface utility routines */ + +void +acpi_ds_delete_result_if_not_used ( + ACPI_GENERIC_OP *op, + ACPI_OBJECT_INTERNAL *result_obj, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ds_create_operand ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *arg); + +ACPI_STATUS +acpi_ds_create_operands ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *first_arg); + +ACPI_STATUS +acpi_ds_resolve_operands ( + ACPI_WALK_STATE *walk_state); + +OBJECT_TYPE_INTERNAL +acpi_ds_map_opcode_to_data_type ( + u16 opcode, + u32 *out_flags); + +OBJECT_TYPE_INTERNAL +acpi_ds_map_named_opcode_to_data_type ( + u16 opcode); + + +/* + * dswscope - Scope Stack manipulation + */ + +ACPI_STATUS +acpi_ds_scope_stack_push ( + ACPI_NAME_TABLE *new_scope, + OBJECT_TYPE_INTERNAL type, + ACPI_WALK_STATE *walk_state); + + +ACPI_STATUS +acpi_ds_scope_stack_pop ( + ACPI_WALK_STATE *walk_state); + +void +acpi_ds_scope_stack_clear ( + ACPI_WALK_STATE *walk_state); + + +/* Acpi_dswstate - parser WALK_STATE management routines */ + +ACPI_WALK_STATE * +acpi_ds_create_walk_state ( + ACPI_OWNER_ID owner_id, + ACPI_GENERIC_OP *origin, + ACPI_OBJECT_INTERNAL *mth_desc, + ACPI_WALK_LIST *walk_list); + +ACPI_STATUS +acpi_ds_obj_stack_delete_all ( + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ds_obj_stack_pop_and_delete ( + u32 pop_count, + ACPI_WALK_STATE *walk_state); + +void +acpi_ds_delete_walk_state ( + ACPI_WALK_STATE *walk_state); + +ACPI_WALK_STATE * +acpi_ds_pop_walk_state ( + ACPI_WALK_LIST *walk_list); + +ACPI_STATUS +acpi_ds_result_stack_pop ( + ACPI_OBJECT_INTERNAL **object, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ds_result_stack_push ( + void *object, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ds_result_stack_clear ( + ACPI_WALK_STATE *walk_state); + +ACPI_WALK_STATE * +acpi_ds_get_current_walk_state ( + ACPI_WALK_LIST *walk_list); + +void +acpi_ds_delete_walk_state_cache ( + void); + + +#endif /* _DISPATCH_H_ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/events.h linux-2.4.0-test9-lia/drivers/acpi/include/events.h --- linux-2.4.0-test9/drivers/acpi/include/events.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/events.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,209 @@ + +/****************************************************************************** + * + * Name: events.h - Acpi_event subcomponent prototypes and defines + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef __EVENTS_H__ +#define __EVENTS_H__ + + +/* + * Acpi_evfixed - Fixed event handling + */ + +ACPI_STATUS +acpi_ev_fixed_event_initialize ( + void); + +u32 +acpi_ev_fixed_event_detect ( + void); + +u32 +acpi_ev_fixed_event_dispatch ( + u32 acpi_event); + + +/* + * Acpi_evglock - Global Lock support + */ + +ACPI_STATUS +acpi_ev_acquire_global_lock( + void); + +void +acpi_ev_release_global_lock( + void); + +ACPI_STATUS +acpi_ev_init_global_lock_handler ( + void); + + +/* + * Acpi_evgpe - GPE handling and dispatch + */ + +ACPI_STATUS +acpi_ev_gpe_initialize ( + void); + +ACPI_STATUS +acpi_ev_init_gpe_control_methods ( + void); + +u32 +acpi_ev_gpe_dispatch ( + u32 gpe_number); + +u32 +acpi_ev_gpe_detect ( + void); + + +/* + * Acpi_evnotify - Device Notify handling and dispatch + */ + +void +acpi_ev_notify_dispatch ( + ACPI_HANDLE device, + u32 notify_value); + + +/* + * Acpi_evregion - Address Space handling + */ + +ACPI_STATUS +acpi_ev_install_default_address_space_handlers ( + void); + +ACPI_STATUS +acpi_ev_address_space_dispatch ( + ACPI_OBJECT_INTERNAL *region_obj, + u32 function, + u32 address, + u32 bit_width, + u32 *value); + + +ACPI_STATUS +acpi_ev_addr_handler_helper ( + ACPI_HANDLE obj_handle, + u32 level, + void *context, + void **return_value); + +void +acpi_ev_disassociate_region_from_handler( + ACPI_OBJECT_INTERNAL *region_obj); + + +ACPI_STATUS +acpi_ev_associate_region_and_handler( + ACPI_OBJECT_INTERNAL *handler_obj, + ACPI_OBJECT_INTERNAL *region_obj); + + +/* + * Acpi_evregini - Region initialization and setup + */ + +ACPI_STATUS +acpi_ev_system_memory_region_setup ( + ACPI_HANDLE handle, + u32 function, + void *handler_context, + void **return_context); + +ACPI_STATUS +acpi_ev_io_space_region_setup ( + ACPI_HANDLE handle, + u32 function, + void *handler_context, + void **return_context); + +ACPI_STATUS +acpi_ev_pci_config_region_setup ( + ACPI_HANDLE handle, + u32 function, + void *handler_context, + void **return_context); + +ACPI_STATUS +acpi_ev_default_region_setup ( + ACPI_HANDLE handle, + u32 function, + void *handler_context, + void **return_context); + +ACPI_STATUS +acpi_ev_initialize_region ( + ACPI_OBJECT_INTERNAL *region_obj, + u8 acpi_ns_locked); + + +/* + * Acpi_evsci - SCI (System Control Interrupt) handling/dispatch + */ + +u32 +acpi_ev_install_sci_handler ( + void); + +ACPI_STATUS +acpi_ev_remove_sci_handler ( + void); + +s32 +acpi_ev_initialize_sCI ( + s32 program_sCI); + +void +acpi_ev_restore_acpi_state ( + void); + +void +acpi_ev_terminate ( + void); + + +/* Debug support */ + +#ifdef ACPI_DEBUG + +s32 +acpi_ev_sci_count ( + u32 acpi_event); + +#define DEBUG_INCREMENT_EVENT_COUNT(a) acpi_gbl_event_count[a]++; + +#else + +#define DEBUG_INCREMENT_EVENT_COUNT(a) +#endif + + +#endif /* __EVENTS_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/globals.h linux-2.4.0-test9-lia/drivers/acpi/include/globals.h --- linux-2.4.0-test9/drivers/acpi/include/globals.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/globals.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,311 @@ + +/****************************************************************************** + * + * Name: globals.h - Declarations for global variables + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef __GLOBALS_H__ +#define __GLOBALS_H__ + + +/* + * Ensure that the globals are actually defined only once + */ +#ifdef DEFINE_ACPI_GLOBALS +#define ACPI_EXTERN +#else +#define ACPI_EXTERN extern +#endif + + +extern char *msg_acpi_error_break; + +/***************************************************************************** + * + * Debug support + * + ****************************************************************************/ + +/* Runtime configuration of debug print levels */ + +extern u32 acpi_dbg_level; +extern u32 acpi_dbg_layer; + + +/* Procedure nesting level for debug output */ + +extern u32 acpi_gbl_nesting_level; + + +/***************************************************************************** + * + * ACPI Table globals + * + ****************************************************************************/ + +/* + * Table pointers. + * Although these pointers are somewhat redundant with the global Acpi_table, + * they are convenient because they are typed pointers. + * + * These tables are single-table only; meaning that there can be at most one + * of each in the system. Each global points to the actual table. + * + */ +ACPI_EXTERN ROOT_SYSTEM_DESCRIPTOR_POINTER *acpi_gbl_RSDP; +ACPI_EXTERN ROOT_SYSTEM_DESCRIPTION_TABLE *acpi_gbl_RSDT; +ACPI_EXTERN FIRMWARE_ACPI_CONTROL_STRUCTURE *acpi_gbl_FACS; +ACPI_EXTERN FIXED_ACPI_DESCRIPTION_TABLE *acpi_gbl_FACP; +ACPI_EXTERN APIC_TABLE *acpi_gbl_APIC; +ACPI_EXTERN ACPI_TABLE_HEADER *acpi_gbl_DSDT; +ACPI_EXTERN ACPI_TABLE_HEADER *acpi_gbl_SBST; +/* + * Since there may be multiple SSDTs and PSDTS, a single pointer is not + * sufficient; Therefore, there isn't one! + */ + + +/* + * ACPI Table info arrays + */ +extern ACPI_TABLE_DESC acpi_gbl_acpi_tables[NUM_ACPI_TABLES]; +extern ACPI_TABLE_SUPPORT acpi_gbl_acpi_table_data[NUM_ACPI_TABLES]; + +/* + * Predefined mutex objects. This array contains the + * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs. + * (The table maps local handles to the real OS handles) + */ +ACPI_EXTERN ACPI_MUTEX_INFO acpi_gbl_acpi_mutex_info [NUM_MTX]; +extern ACPI_INIT_DATA acpi_gbl_acpi_init_data; + + +/***************************************************************************** + * + * Miscellaneous globals + * + ****************************************************************************/ + + +ACPI_EXTERN u8 *acpi_gbl_gpe0enable_register_save; +ACPI_EXTERN u8 *acpi_gbl_gpe1_enable_register_save; +ACPI_EXTERN ACPI_WALK_STATE *acpi_gbl_breakpoint_walk; +ACPI_EXTERN ACPI_GENERIC_STATE *acpi_gbl_generic_state_cache; +ACPI_EXTERN ACPI_GENERIC_OP *acpi_gbl_parse_cache; +ACPI_EXTERN ACPI_OBJECT_INTERNAL *acpi_gbl_object_cache; +ACPI_EXTERN ACPI_WALK_STATE *acpi_gbl_walk_state_cache; +ACPI_EXTERN ACPI_HANDLE acpi_gbl_global_lock_semaphore; + + +ACPI_EXTERN u32 acpi_gbl_global_lock_thread_count; +ACPI_EXTERN u32 acpi_gbl_restore_acpi_chipset; +ACPI_EXTERN u32 acpi_gbl_original_mode; +ACPI_EXTERN u32 acpi_gbl_edge_level_save; +ACPI_EXTERN u32 acpi_gbl_irq_enable_save; +ACPI_EXTERN u32 acpi_gbl_rsdp_original_location; + +ACPI_EXTERN u32 acpi_gbl_state_cache_requests; +ACPI_EXTERN u32 acpi_gbl_state_cache_hits; +ACPI_EXTERN u32 acpi_gbl_parse_cache_requests; +ACPI_EXTERN u32 acpi_gbl_parse_cache_hits; +ACPI_EXTERN u32 acpi_gbl_object_cache_requests; +ACPI_EXTERN u32 acpi_gbl_object_cache_hits; +ACPI_EXTERN u32 acpi_gbl_walk_state_cache_requests; +ACPI_EXTERN u32 acpi_gbl_walk_state_cache_hits; +ACPI_EXTERN u32 acpi_gbl_ns_lookup_count; +ACPI_EXTERN u32 acpi_gbl_ps_find_count; + + +ACPI_EXTERN u16 acpi_gbl_generic_state_cache_depth; +ACPI_EXTERN u16 acpi_gbl_parse_cache_depth; +ACPI_EXTERN u16 acpi_gbl_object_cache_depth; +ACPI_EXTERN u16 acpi_gbl_walk_state_cache_depth; +ACPI_EXTERN u16 acpi_gbl_pm1_enable_register_save; +ACPI_EXTERN u16 acpi_gbl_next_table_owner_id; +ACPI_EXTERN u16 acpi_gbl_next_method_owner_id; + +ACPI_EXTERN u8 acpi_gbl_debugger_configuration; +ACPI_EXTERN u8 acpi_gbl_global_lock_acquired; +ACPI_EXTERN u8 acpi_gbl_global_lock_set; /* TBD: [Restructure] OBSOLETE?? */ +ACPI_EXTERN u8 acpi_gbl_step_to_next_call; +ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present; + + +ACPI_EXTERN ACPI_OBJECT_NOTIFY_HANDLER acpi_gbl_drv_notify; +ACPI_EXTERN ACPI_OBJECT_NOTIFY_HANDLER acpi_gbl_sys_notify; + + +extern u8 acpi_gbl_shutdown; +extern u32 acpi_gbl_system_flags; +extern u32 acpi_gbl_startup_flags; + + +/***************************************************************************** + * + * Namespace globals + * + ****************************************************************************/ + +#define NUM_NS_TYPES INTERNAL_TYPE_INVALID+1 +#define NUM_PREDEFINED_NAMES 9 + + +ACPI_EXTERN ACPI_NAME_TABLE acpi_gbl_root_name_table; +ACPI_EXTERN ACPI_NAMED_OBJECT *acpi_gbl_root_object; + +extern u8 acpi_gbl_ns_properties[NUM_NS_TYPES]; +extern PREDEFINED_NAMES acpi_gbl_pre_defined_names [NUM_PREDEFINED_NAMES]; + + +/* Used to detect memory leaks (DEBUG ONLY) */ + +#ifdef ACPI_DEBUG +ACPI_EXTERN ALLOCATION_INFO *acpi_gbl_head_alloc_ptr; +ACPI_EXTERN ALLOCATION_INFO *acpi_gbl_tail_alloc_ptr; +#endif + + +/***************************************************************************** + * + * Interpreter globals + * + ****************************************************************************/ + + +ACPI_EXTERN u32 acpi_gbl_when_to_parse_methods; +ACPI_EXTERN ACPI_WALK_LIST *acpi_gbl_current_walk_list; + +/* Base of AML block, and pointer to current location in it */ + +ACPI_EXTERN u8 *acpi_gbl_Pcode_base; +ACPI_EXTERN u8 *acpi_gbl_Pcode; + +/* + * Length of AML block, and remaining length of current package. + */ +ACPI_EXTERN u32 acpi_gbl_Pcode_block_len; +ACPI_EXTERN u32 acpi_gbl_Pcode_len; + +ACPI_EXTERN u32 acpi_gbl_buf_seq; /* Counts allocated Buffer descriptors */ +ACPI_EXTERN s32 acpi_gbl_named_object_err; /* Indicate if inc_error should be called */ + +/* + * Handle to the last method found - used during pass1 of load + */ +ACPI_EXTERN ACPI_HANDLE acpi_gbl_last_method; + +/* + * Table of Address Space handlers + */ + +ACPI_EXTERN ACPI_ADDRESS_SPACE_INFO acpi_gbl_address_spaces[ACPI_NUM_ADDRESS_SPACES]; + + +/* Control method single step flag */ + +ACPI_EXTERN u8 acpi_gbl_cm_single_step; + + +/***************************************************************************** + * + * Parser globals + * + ****************************************************************************/ + +ACPI_EXTERN ACPI_GENERIC_OP *acpi_gbl_parsed_namespace_root; + +extern ACPI_OP_INFO acpi_gbl_aml_op_info[]; +extern u8 acpi_gbl_aml_op_info_index[256]; +extern char *acpi_gbl_parser_id; + + +/***************************************************************************** + * + * Hardware globals + * + ****************************************************************************/ + +extern ACPI_C_STATE_HANDLER acpi_hw_cx_handlers[MAX_CX_STATES]; +extern u32 acpi_hw_active_cx_state; + + +/***************************************************************************** + * + * Event globals + * + ****************************************************************************/ + +ACPI_EXTERN ACPI_FIXED_EVENT_INFO acpi_gbl_fixed_event_handlers[NUM_FIXED_EVENTS]; + +ACPI_EXTERN ACPI_HANDLE acpi_gbl_gpe_obj_handle; +ACPI_EXTERN u32 acpi_gbl_gpe_register_count; +ACPI_EXTERN ACPI_GPE_REGISTERS *acpi_gbl_gpe_registers; +ACPI_EXTERN ACPI_GPE_LEVEL_INFO *acpi_gbl_gpe_info; + +/* + * Gpe validation and translation table + * Indexed by the GPE number, returns GPE_INVALID if the GPE is not supported. + * Otherwise, returns a valid index into the global GPE table. + * + * This table is needed because the GPE numbers supported by block 1 do not + * have to be contiguous with the GPE numbers supported by block 0. + */ +ACPI_EXTERN u8 acpi_gbl_gpe_valid [NUM_GPE]; + +/* Acpi_event counter for debug only */ + +#ifdef ACPI_DEBUG +ACPI_EXTERN u32 acpi_gbl_event_count[NUM_FIXED_EVENTS]; +#endif + + +/***************************************************************************** + * + * Debugger globals + * + ****************************************************************************/ + +ACPI_EXTERN u8 acpi_gbl_method_executing; +ACPI_EXTERN u8 acpi_gbl_db_terminate_threads; + + +/* Memory allocation metrics - Debug Only! */ + +#ifdef ACPI_DEBUG + +ACPI_EXTERN u32 acpi_gbl_current_alloc_size; +ACPI_EXTERN u32 acpi_gbl_current_alloc_count; +ACPI_EXTERN u32 acpi_gbl_running_alloc_size; +ACPI_EXTERN u32 acpi_gbl_running_alloc_count; +ACPI_EXTERN u32 acpi_gbl_max_concurrent_alloc_size; +ACPI_EXTERN u32 acpi_gbl_max_concurrent_alloc_count; +ACPI_EXTERN u32 acpi_gbl_current_object_count; +ACPI_EXTERN u32 acpi_gbl_current_object_size; +ACPI_EXTERN u32 acpi_gbl_max_concurrent_object_count; +ACPI_EXTERN u32 acpi_gbl_max_concurrent_object_size; +ACPI_EXTERN u32 acpi_gbl_running_object_count; +ACPI_EXTERN u32 acpi_gbl_running_object_size; + +#endif + + +#endif /* __GLOBALS_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/hardware.h linux-2.4.0-test9-lia/drivers/acpi/include/hardware.h --- linux-2.4.0-test9/drivers/acpi/include/hardware.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/hardware.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,169 @@ + +/****************************************************************************** + * + * Name: hardware.h -- hardware specific interfaces + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef __HARDWARE_H__ +#define __HARDWARE_H__ + + +/* Prototypes */ + + +ACPI_STATUS +acpi_hw_initialize( + void); + +ACPI_STATUS +acpi_hw_shutdown( + void); + +ACPI_STATUS +acpi_hw_initialize_system_info( + void); + +ACPI_STATUS +acpi_hw_set_mode ( + u32 mode); + +u32 +acpi_hw_get_mode ( + void); + +u32 +acpi_hw_get_mode_capabilities ( + void); + +/* Register I/O Prototypes */ + +u32 +acpi_hw_register_access ( + NATIVE_UINT read_write, + u8 use_lock, + u32 register_id, ... /* DWORD Value */); + +void +acpi_hw_clear_acpi_status ( + void); + + +/* GPE support */ + +void +acpi_hw_enable_gpe ( + u32 gpe_index); + +void +acpi_hw_disable_gpe ( + u32 gpe_index); + +void +acpi_hw_clear_gpe ( + u32 gpe_index); + +void +acpi_hw_get_gpe_status ( + u32 gpe_number, + ACPI_EVENT_STATUS *event_status); + +/* Sleep Prototypes */ + +ACPI_STATUS +acpi_hw_obtain_sleep_type_register_data ( + u8 sleep_state, + u8 *slp_typ_a, + 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[]); + + +/* 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); + + +#endif /* __HARDWARE_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/internal.h linux-2.4.0-test9-lia/drivers/acpi/include/internal.h --- linux-2.4.0-test9/drivers/acpi/include/internal.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/internal.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,850 @@ + +/****************************************************************************** + * + * Name: internal.h - Internal data types used across the ACPI subsystem + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef _ACPI_INTERNAL_H +#define _ACPI_INTERNAL_H + +#include "config.h" + + +#define WAIT_FOREVER ((u32) -1) + +typedef void* ACPI_MUTEX; +typedef u32 ACPI_MUTEX_HANDLE; + + +/* Object descriptor types */ + +#define ACPI_DESC_TYPE_INTERNAL 0xAA +#define ACPI_DESC_TYPE_PARSER 0xBB +#define ACPI_DESC_TYPE_STATE 0xCC +#define ACPI_DESC_TYPE_WALK 0xDD +#define ACPI_DESC_TYPE_NAMED 0xEE + + +/***************************************************************************** + * + * Mutex typedefs and structs + * + ****************************************************************************/ + + +/* + * Predefined handles for the mutex objects used within the subsystem + * All mutex objects are automatically created by Acpi_cm_mutex_initialize. + * NOTE: any changes here must be reflected in the Acpi_gbl_Mutex_names table also! + */ + +#define ACPI_MTX_HARDWARE 0 +#define ACPI_MTX_MEMORY 1 +#define ACPI_MTX_CACHES 2 +#define ACPI_MTX_TABLES 3 +#define ACPI_MTX_PARSER 4 +#define ACPI_MTX_DISPATCHER 5 +#define ACPI_MTX_INTERPRETER 6 +#define ACPI_MTX_EXECUTE 7 +#define ACPI_MTX_NAMESPACE 8 +#define ACPI_MTX_EVENTS 9 +#define ACPI_MTX_OP_REGIONS 10 +#define ACPI_MTX_DEBUG_CMD_READY 11 +#define ACPI_MTX_DEBUG_CMD_COMPLETE 12 + +#define MAX_MTX 12 +#define NUM_MTX MAX_MTX+1 + + +#ifdef ACPI_DEBUG +#ifdef DEFINE_ACPI_GLOBALS + +/* Names for the mutexes used in the subsystem */ + +static char *acpi_gbl_mutex_names[] = +{ + "ACPI_MTX_Hardware", + "ACPI_MTX_Memory", + "ACPI_MTX_Caches", + "ACPI_MTX_Tables", + "ACPI_MTX_Parser", + "ACPI_MTX_Dispatcher", + "ACPI_MTX_Interpreter", + "ACPI_MTX_Execute", + "ACPI_MTX_Namespace", + "ACPI_MTX_Events", + "ACPI_MTX_Op_regions", + "ACPI_MTX_Debug_cmd_ready", + "ACPI_MTX_Debug_cmd_complete" +}; + +#endif +#endif + + +/* Table for the global mutexes */ + +typedef struct acpi_mutex_info +{ + ACPI_MUTEX mutex; + u32 use_count; + u8 locked; + +} ACPI_MUTEX_INFO; + + +/* Lock flag parameter for various interfaces */ + +#define ACPI_MTX_DO_NOT_LOCK 0 +#define ACPI_MTX_LOCK 1 + + +typedef u16 ACPI_OWNER_ID; +#define OWNER_TYPE_TABLE 0x0 +#define OWNER_TYPE_METHOD 0x1 +#define FIRST_METHOD_ID 0x0000 +#define FIRST_TABLE_ID 0x8000 + +/* TBD: [Restructure] get rid of the need for this! */ + +#define TABLE_ID_DSDT (ACPI_OWNER_ID) 0xD1D1 + +/***************************************************************************** + * + * Namespace typedefs and structs + * + ****************************************************************************/ + + +/* Operational modes of the AML interpreter/scanner */ + +typedef enum +{ + IMODE_LOAD_PASS1 = 0x01, + IMODE_LOAD_PASS2 = 0x02, + IMODE_EXECUTE = 0x0E + +} OPERATING_MODE; + + +/* + * The Acpi_named_object describes a named object that appears in the AML + * An Acpi_name_table is used to store Acpi_named_objects. + * + * Data_type is used to differentiate between internal descriptors, and MUST + * be the first byte in this structure. + */ + +typedef struct acpi_named_object +{ + u8 data_type; + u8 type; /* Type associated with this name */ + u8 this_index; /* Entry number */ + u8 flags; + u32 name; /* ACPI Name, always 4 chars per ACPI spec */ + + + void *object; /* Pointer to attached ACPI object (optional) */ + struct acpi_name_table *child_table; /* Scope owned by this name (optional) */ + ACPI_OWNER_ID owner_id; /* ID of owner - either an ACPI table or a method */ + u16 reference_count; /* Current count of references and children */ + +#ifdef _IA64 + u32 fill1; /* 64-bit alignment */ +#endif + +} ACPI_NAMED_OBJECT; + + +typedef struct acpi_name_table +{ + struct acpi_name_table *next_table; + struct acpi_name_table *parent_table; + ACPI_NAMED_OBJECT *parent_entry; + ACPI_NAMED_OBJECT entries[1]; + +} ACPI_NAME_TABLE; + + +#define ENTRY_NOT_FOUND NULL + + +/* NTE flags */ + +#define NTE_AML_ATTACHMENT 0x1 + + +/* + * ACPI Table Descriptor. One per ACPI table + */ +typedef struct acpi_table_desc +{ + struct acpi_table_desc *prev; + struct acpi_table_desc *next; + struct acpi_table_desc *installed_desc; + ACPI_TABLE_HEADER *pointer; + void *base_pointer; + u8 *aml_pointer; + u32 aml_length; + u32 length; + u32 count; + ACPI_OWNER_ID table_id; + u8 type; + u8 allocation; + u8 loaded_into_namespace; + +} ACPI_TABLE_DESC; + + +typedef struct +{ + char *search_for; + ACPI_HANDLE *list; + s32 *count; + +} FIND_CONTEXT; + + +typedef struct +{ + ACPI_NAME_TABLE *name_table; + u32 position; + u8 table_full; + +} NS_SEARCH_DATA; + + +/* + * Predefined Namespace items + */ +#define ACPI_MAX_ADDRESS_SPACE 255 +#define ACPI_NUM_ADDRESS_SPACES 256 + + +typedef struct +{ + char *name; + ACPI_OBJECT_TYPE type; + char *val; + +} PREDEFINED_NAMES; + + +/***************************************************************************** + * + * Event typedefs and structs + * + ****************************************************************************/ + + +/* Status bits. */ + +#define ACPI_STATUS_PMTIMER 0x0001 +#define ACPI_STATUS_GLOBAL 0x0020 +#define ACPI_STATUS_POWER_BUTTON 0x0100 +#define ACPI_STATUS_SLEEP_BUTTON 0x0200 +#define ACPI_STATUS_RTC_ALARM 0x0400 + +/* Enable bits. */ + +#define ACPI_ENABLE_PMTIMER 0x0001 +#define ACPI_ENABLE_GLOBAL 0x0020 +#define ACPI_ENABLE_POWER_BUTTON 0x0100 +#define ACPI_ENABLE_SLEEP_BUTTON 0x0200 +#define ACPI_ENABLE_RTC_ALARM 0x0400 + + +/* + * Entry in the Address_space (AKA Operation Region) table + */ + +typedef struct +{ + ADDRESS_SPACE_HANDLER handler; + void *context; + +} ACPI_ADDRESS_SPACE_INFO; + + +/* Values and addresses of the GPE registers (both banks) */ + +typedef struct +{ + u8 status; /* Current value of status reg */ + u8 enable; /* Current value of enable reg */ + u16 status_addr; /* Address of status reg */ + u16 enable_addr; /* Address of enable reg */ + u8 gpe_base; /* Base GPE number */ + +} ACPI_GPE_REGISTERS; + + +#define ACPI_GPE_LEVEL_TRIGGERED 1 +#define ACPI_GPE_EDGE_TRIGGERED 2 + + +/* Information about each particular GPE level */ + +typedef struct +{ + u8 type; /* Level or Edge */ + + ACPI_HANDLE method_handle; /* Method handle for direct (fast) execution */ + GPE_HANDLER handler; /* Address of handler, if any */ + void *context; /* Context to be passed to handler */ + +} ACPI_GPE_LEVEL_INFO; + + +/* Information about each particular fixed event */ + +typedef struct +{ + FIXED_EVENT_HANDLER handler; /* Address of handler. */ + void *context; /* Context to be passed to handler */ + +} ACPI_FIXED_EVENT_INFO; + + +/* Information used during field processing */ + +typedef struct +{ + u8 skip_field; + u8 field_flag; + u32 pkg_length; + +} ACPI_FIELD_INFO; + + +/***************************************************************************** + * + * Parser typedefs and structs + * + ****************************************************************************/ + + +#define OP_INFO_TYPE 0x1F +#define OP_INFO_HAS_ARGS 0x20 +#define OP_INFO_CHILD_LOCATION 0xC0 + +/* + * AML opcode, name, and argument layout + */ +typedef struct acpi_op_info +{ + u16 opcode; /* AML opcode */ + u8 flags; /* Opcode type, Has_args flag */ + u32 parse_args; /* Grammar/Parse time arguments */ + u32 runtime_args; /* Interpret time arguments */ + + DEBUG_ONLY_MEMBERS ( + char *name) /* op name (debug only) */ + +} ACPI_OP_INFO; + + +typedef union acpi_op_value +{ + u32 integer; /* integer constant */ + u32 size; /* bytelist or field size */ + char *string; /* NULL terminated string */ + u8 *buffer; /* buffer or string */ + char *name; /* NULL terminated string */ + struct acpi_generic_op *arg; /* arguments and contained ops */ + ACPI_NAMED_OBJECT *entry; /* entry in interpreter namespace tbl */ + +} ACPI_OP_VALUE; + + +#define ACPI_COMMON_OP \ + u8 data_type; /* To differentiate various internal objs */\ + u8 flags; /* Type of Op */\ + u16 opcode; /* AML opcode */\ + u32 aml_offset; /* offset of declaration in AML */\ + struct acpi_generic_op *parent; /* parent op */\ + struct acpi_generic_op *next; /* next op */\ + DEBUG_ONLY_MEMBERS (\ + char op_name[16]) /* op name (debug only) */\ + /* NON-DEBUG members below: */\ + void *acpi_named_object;/* for use by interpreter */\ + ACPI_OP_VALUE value; /* Value or args associated with the opcode */\ + + +/* + * generic operation (eg. If, While, Store) + */ +typedef struct acpi_generic_op +{ + ACPI_COMMON_OP +} ACPI_GENERIC_OP; + + +/* + * operation with a name (eg. Scope, Method, Name, Named_field, ...) + */ +typedef struct acpi_named_op +{ + ACPI_COMMON_OP + u32 name; /* 4-byte name or zero if no name */ + +} ACPI_NAMED_OP; + + +/* + * special operation for methods and regions (parsing must be deferred + * until a first pass parse is completed) + */ +typedef struct acpi_deferred_op +{ + ACPI_COMMON_OP + u32 name; /* 4-byte name or 0 if none */ + u32 body_length; /* AML body size */ + u8 *body; /* AML body */ + u16 thread_count; /* Count of threads currently executing a method */ + +} ACPI_DEFERRED_OP; + + +/* + * special operation for bytelists (Byte_list only) + */ +typedef struct acpi_bytelist_op +{ + ACPI_COMMON_OP + u8 *data; /* bytelist data */ + +} ACPI_BYTELIST_OP; + + +/* + * Parse state - one state per parser invocation and each control + * method. + */ + +typedef struct acpi_parse_state +{ + u8 *aml_start; /* first AML byte */ + u8 *aml; /* next AML byte */ + u8 *aml_end; /* (last + 1) AML byte */ + u8 *pkg_end; /* current package end */ + ACPI_GENERIC_OP *start_op; /* root of parse tree */ + struct acpi_parse_scope *scope; /* current scope */ + struct acpi_parse_scope *scope_avail; /* unused (extra) scope structs */ + struct acpi_parse_state *next; + +} ACPI_PARSE_STATE; + + +/* + * Parse scope - one per ACPI scope + */ + +typedef struct acpi_parse_scope +{ + ACPI_GENERIC_OP *op; /* current op being parsed */ + u8 *arg_end; /* current argument end */ + u8 *pkg_end; /* current package end */ + struct acpi_parse_scope *parent; /* parent scope */ + u32 arg_list; /* next argument to parse */ + u32 arg_count; /* Number of fixed arguments */ + +} ACPI_PARSE_SCOPE; + + +/***************************************************************************** + * + * Generic "state" object for stacks + * + ****************************************************************************/ + + +#define CONTROL_NORMAL 0xC0 +#define CONTROL_CONDITIONAL_EXECUTING 0xC1 +#define CONTROL_PREDICATE_EXECUTING 0xC2 +#define CONTROL_PREDICATE_FALSE 0xC3 +#define CONTROL_PREDICATE_TRUE 0xC4 + + +#define ACPI_STATE_COMMON /* Two 32-bit fields and a pointer */\ + u8 data_type; /* To differentiate various internal objs */\ + u8 flags; \ + u16 value; \ + u16 state; \ + u16 acpi_eval; \ + void *next; \ + +typedef struct acpi_common_state +{ + ACPI_STATE_COMMON +} ACPI_COMMON_STATE; + + +/* + * Update state - used to traverse complex objects such as packages + */ +typedef struct acpi_update_state +{ + ACPI_STATE_COMMON + union acpi_obj_internal *object; + +} ACPI_UPDATE_STATE; + +/* + * Control state - one per if/else and while constructs. + * Allows nesting of these constructs + */ +typedef struct acpi_control_state +{ + ACPI_STATE_COMMON + ACPI_GENERIC_OP *predicate_op; /* Start of if/while predicate */ + +} ACPI_CONTROL_STATE; + + +/* + * Scope state - current scope during namespace lookups + */ + +typedef struct acpi_scope_state +{ + ACPI_STATE_COMMON + ACPI_NAME_TABLE *name_table; + +} ACPI_SCOPE_STATE; + + +typedef union acpi_gen_state +{ + ACPI_COMMON_STATE common; + ACPI_CONTROL_STATE control; + ACPI_UPDATE_STATE update; + ACPI_SCOPE_STATE scope; + +} ACPI_GENERIC_STATE; + + +/***************************************************************************** + * + * Tree walking typedefs and structs + * + ****************************************************************************/ + + +/* + * Walk state - current state of a parse tree walk. Used for both a leisurely stroll through + * the tree (for whatever reason), and for control method execution. + */ + +#define NEXT_OP_DOWNWARD 1 +#define NEXT_OP_UPWARD 2 + +typedef struct acpi_walk_state +{ + u8 data_type; /* To differentiate various internal objs */\ + ACPI_OWNER_ID owner_id; /* Owner of objects created during the walk */ + u8 last_predicate; /* Result of last predicate */ + u8 next_op_info; /* Info about Next_op */ + u8 num_operands; /* Stack pointer for Operands[] array */ + u8 num_results; /* Stack pointer for Results[] array */ + u8 current_result; /* */ + + struct acpi_walk_state *next; /* Next Walk_state in list */ + ACPI_GENERIC_OP *origin; /* Start of walk */ + ACPI_GENERIC_OP *prev_op; /* Last op that was processed */ + ACPI_GENERIC_OP *next_op; /* next op to be processed */ + ACPI_GENERIC_STATE *control_state; /* List of control states (nested IFs) */ + ACPI_GENERIC_STATE *scope_info; /* Stack of nested scopes */ + union acpi_obj_internal *return_desc; /* Return object, if any */ + union acpi_obj_internal *method_desc; /* Method descriptor if running a method */ + ACPI_GENERIC_OP *method_call_op; /* Method_call Op if running a method */ + union acpi_obj_internal *operands[OBJ_NUM_OPERANDS]; /* Operands passed to the interpreter */ + union acpi_obj_internal *results[OBJ_NUM_OPERANDS]; /* Accumulated results */ + struct acpi_named_object arguments[MTH_NUM_ARGS]; /* Control method arguments */ + struct acpi_named_object local_variables[MTH_NUM_LOCALS]; /* Control method locals */ + + +} ACPI_WALK_STATE; + + +/* + * Walk list - head of a tree of walk states. Multiple walk states are created when there + * are nested control methods executing. + */ +typedef struct acpi_walk_list +{ + + ACPI_WALK_STATE *walk_state; + +} ACPI_WALK_LIST; + + +typedef +ACPI_STATUS (*INTERPRETER_CALLBACK) ( + ACPI_WALK_STATE *state, + ACPI_GENERIC_OP *op); + + +/* Info used by Acpi_ps_init_objects */ + +typedef struct init_walk_info +{ + u32 method_count; + u32 op_region_count; + ACPI_TABLE_DESC *table_desc; + +} INIT_WALK_INFO; + + +/* TBD: [Restructure] Merge with struct above */ + +typedef struct acpi_walk_info +{ + u32 debug_level; + u32 owner_id; + +} ACPI_WALK_INFO; + + +/***************************************************************************** + * + * Hardware and PNP + * + ****************************************************************************/ + + +/* Sleep states */ + +#define SLWA_DEBUG_LEVEL 4 +#define GTS_CALL 0 +#define GTS_WAKE 1 + +/* Cx States */ + +#define MAX_CX_STATE_LATENCY 0xFFFFFFFF +#define MAX_CX_STATES 4 + +/* + * The #define's and enum below establish an abstract way of identifying what + * register block and register is to be accessed. Do not change any of the + * values as they are used in switch statements and offset calculations. + */ + +#define REGISTER_BLOCK_MASK 0xFF00 +#define BIT_IN_REGISTER_MASK 0x00FF +#define PM1_EVT 0x0100 +#define PM1_CONTROL 0x0200 +#define PM2_CONTROL 0x0300 +#define PM_TIMER 0x0400 +#define PROCESSOR_BLOCK 0x0500 +#define GPE0_STS_BLOCK 0x0600 +#define GPE0_EN_BLOCK 0x0700 +#define GPE1_STS_BLOCK 0x0800 +#define GPE1_EN_BLOCK 0x0900 + +enum +{ + /* PM1 status register ids */ + + TMR_STS = (PM1_EVT | 0x01), + BM_STS, + GBL_STS, + PWRBTN_STS, + SLPBTN_STS, + RTC_STS, + WAK_STS, + + /* PM1 enable register ids */ + + TMR_EN, + /* need to skip 1 enable number since there's no bus master enable register */ + GBL_EN = (PM1_EVT | 0x0A), + PWRBTN_EN, + SLPBTN_EN, + RTC_EN, + + /* PM1 control register ids */ + + SCI_EN = (PM1_CONTROL | 0x01), + BM_RLD, + GBL_RLS, + SLP_TYPE_A, + SLP_TYPE_B, + SLP_EN, + + /* PM2 control register ids */ + + ARB_DIS = (PM2_CONTROL | 0x01), + + /* PM Timer register ids */ + + TMR_VAL = (PM_TIMER | 0x01), + + GPE0_STS = (GPE0_STS_BLOCK | 0x01), + GPE0_EN = (GPE0_EN_BLOCK | 0x01), + + GPE1_STS = (GPE1_STS_BLOCK | 0x01), + GPE1_EN = (GPE0_EN_BLOCK | 0x01), + + /* Last register value is one less than LAST_REG */ + + LAST_REG +}; + + +#define TMR_STS_MASK 0x0001 +#define BM_STS_MASK 0x0010 +#define GBL_STS_MASK 0x0020 +#define PWRBTN_STS_MASK 0x0100 +#define SLPBTN_STS_MASK 0x0200 +#define RTC_STS_MASK 0x0400 +#define WAK_STS_MASK 0x8000 + +#define ALL_FIXED_STS_BITS (TMR_STS_MASK | BM_STS_MASK | GBL_STS_MASK | PWRBTN_STS_MASK | \ + SLPBTN_STS_MASK | RTC_STS_MASK | WAK_STS_MASK) + +#define TMR_EN_MASK 0x0001 +#define GBL_EN_MASK 0x0020 +#define PWRBTN_EN_MASK 0x0100 +#define SLPBTN_EN_MASK 0x0200 +#define RTC_EN_MASK 0x0400 + +#define SCI_EN_MASK 0x0001 +#define BM_RLD_MASK 0x0002 +#define GBL_RLS_MASK 0x0004 +#define SLP_TYPE_X_MASK 0x1C00 +#define SLP_EN_MASK 0x2000 + +#define ARB_DIS_MASK 0x0001 + +#define GPE0_STS_MASK +#define GPE0_EN_MASK + +#define GPE1_STS_MASK +#define GPE1_EN_MASK + + +#define ACPI_READ 1 +#define ACPI_WRITE 2 + +#define LOW_BYTE 0x00FF +#define ONE_BYTE 0x08 + +#ifndef SET + #define SET 1 +#endif +#ifndef CLEAR + #define CLEAR 0 +#endif + + +/* Plug and play */ + +/* Pnp and ACPI data */ + +#define VERSION_NO 0x01 +#define LOGICAL_DEVICE_ID 0x02 +#define COMPATIBLE_DEVICE_ID 0x03 +#define IRQ_FORMAT 0x04 +#define DMA_FORMAT 0x05 +#define START_DEPENDENT_TAG 0x06 +#define END_DEPENDENT_TAG 0x07 +#define IO_PORT_DESCRIPTOR 0x08 +#define FIXED_LOCATION_IO_DESCRIPTOR 0x09 +#define RESERVED_TYPE0 0x0A +#define RESERVED_TYPE1 0x0B +#define RESERVED_TYPE2 0x0C +#define RESERVED_TYPE3 0x0D +#define SMALL_VENDOR_DEFINED 0x0E +#define END_TAG 0x0F + +/* Pnp and ACPI data */ + +#define MEMORY_RANGE_24 0x81 +#define ISA_MEMORY_RANGE 0x81 +#define LARGE_VENDOR_DEFINED 0x84 +#define EISA_MEMORY_RANGE 0x85 +#define MEMORY_RANGE_32 0x85 +#define FIXED_EISA_MEMORY_RANGE 0x86 +#define FIXED_MEMORY_RANGE_32 0x86 + +/* ACPI only data */ + +#define DWORD_ADDRESS_SPACE 0x87 +#define WORD_ADDRESS_SPACE 0x88 +#define EXTENDED_IRQ 0x89 + +/* MUST HAVES */ + + +typedef enum +{ + DWORD_DEVICE_ID, + STRING_PTR_DEVICE_ID, + STRING_DEVICE_ID + +} DEVICE_ID_TYPE; + +typedef struct +{ + DEVICE_ID_TYPE type; + union + { + u32 number; + char *string_ptr; + char buffer[9]; + } data; + +} DEVICE_ID; + + +/***************************************************************************** + * + * Debug + * + ****************************************************************************/ + + +/* Entry for a memory allocation (debug only) */ + +#ifdef ACPI_DEBUG + +#define MEM_MALLOC 0 +#define MEM_CALLOC 1 +#define MAX_MODULE_NAME 16 + +typedef struct allocation_info +{ + struct allocation_info *previous; + struct allocation_info *next; + void *address; + u32 size; + u32 component; + u32 line; + char module[MAX_MODULE_NAME]; + u8 alloc_type; + +} ALLOCATION_INFO; + +#endif + +#endif diff -urN linux-2.4.0-test9/drivers/acpi/include/interp.h linux-2.4.0-test9-lia/drivers/acpi/include/interp.h --- linux-2.4.0-test9/drivers/acpi/include/interp.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/interp.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,660 @@ + +/****************************************************************************** + * + * Name: interp.h - Interpreter subcomponent prototypes and defines + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef __INTERP_H__ +#define __INTERP_H__ + + +#include "actypes.h" +#include "acobject.h" + + +#define WALK_OPERANDS &(walk_state->operands [walk_state->num_operands -1]) + + +/* Interpreter constants */ + +#define AML_END_OF_BLOCK -1 +#define PUSH_PKG_LENGTH 1 +#define DO_NOT_PUSH_PKG_LENGTH 0 + + +#define STACK_TOP 0 +#define STACK_BOTTOM (u32) -1 + +/* Constants for global "When_to_parse_methods" */ + +#define METHOD_PARSE_AT_INIT 0x0 +#define METHOD_PARSE_JUST_IN_TIME 0x1 +#define METHOD_DELETE_AT_COMPLETION 0x2 + + +ACPI_STATUS +acpi_aml_resolve_operands ( + u16 opcode, + ACPI_OBJECT_INTERNAL **stack_ptr); + + +/* + * amxface - External interpreter interfaces + */ + +ACPI_STATUS +acpi_aml_load_table ( + ACPI_TABLE_TYPE table_id); + +ACPI_STATUS +acpi_aml_execute_method ( + ACPI_NAMED_OBJECT *method_entry, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_obj_desc); + + +/* + * amcopy - Interpreter object copy support + */ + +ACPI_STATUS +acpi_aml_build_copy_internal_package_object ( + ACPI_OBJECT_INTERNAL *source_obj, + ACPI_OBJECT_INTERNAL *dest_obj); + + +/* + * amfield - ACPI AML (p-code) execution - field manipulation + */ + + +ACPI_STATUS +acpi_aml_read_field ( + ACPI_OBJECT_INTERNAL *obj_desc, + void *buffer, + u32 buffer_length, + u32 byte_length, + u32 datum_length, + u32 bit_granularity, + u32 byte_granularity); + +ACPI_STATUS +acpi_aml_write_field ( + ACPI_OBJECT_INTERNAL *obj_desc, + void *buffer, + u32 buffer_length, + u32 byte_length, + u32 datum_length, + u32 bit_granularity, + u32 byte_granularity); + +ACPI_STATUS +acpi_aml_setup_field ( + ACPI_OBJECT_INTERNAL *obj_desc, + ACPI_OBJECT_INTERNAL *rgn_desc, + s32 field_bit_width); + +ACPI_STATUS +acpi_aml_read_field_data ( + ACPI_OBJECT_INTERNAL *obj_desc, + u32 field_byte_offset, + u32 field_bit_width, + u32 *value); + +ACPI_STATUS +acpi_aml_access_named_field ( + s32 mode, + ACPI_HANDLE named_field, + void *buffer, + u32 length); + +ACPI_STATUS +acpi_aml_set_named_field_value ( + ACPI_HANDLE named_field, + void *buffer, + u32 length); + +ACPI_STATUS +acpi_aml_get_named_field_value ( + ACPI_HANDLE named_field, + void *buffer, + u32 length); + + +/* + * ammisc - ACPI AML (p-code) execution - specific opcodes + */ + +ACPI_STATUS +acpi_aml_exec_create_field ( + u16 opcode, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_aml_exec_reconfiguration ( + u16 opcode, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_aml_exec_fatal ( + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_aml_exec_index ( + ACPI_WALK_STATE *walk_state, + ACPI_OBJECT_INTERNAL **return_desc); + +ACPI_STATUS +acpi_aml_exec_match ( + ACPI_WALK_STATE *walk_state, + ACPI_OBJECT_INTERNAL **return_desc); + +ACPI_STATUS +acpi_aml_exec_create_mutex ( + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_aml_exec_create_processor ( + ACPI_GENERIC_OP *op, + ACPI_HANDLE processor_nTE); + +ACPI_STATUS +acpi_aml_exec_create_power_resource ( + ACPI_GENERIC_OP *op, + ACPI_HANDLE processor_nTE); + +ACPI_STATUS +acpi_aml_exec_create_region ( + u8 *aml_ptr, + u32 acpi_aml_length, + u32 region_space, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_aml_exec_create_event ( + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_aml_exec_create_alias ( + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_aml_exec_create_method ( + u8 *aml_ptr, + u32 acpi_aml_length, + u32 method_flags, + ACPI_HANDLE method); + + +/* + * amprep - ACPI AML (p-code) execution - prep utilities + */ + +ACPI_STATUS +acpi_aml_prep_def_field_value ( + ACPI_NAMED_OBJECT *this_entry, + ACPI_HANDLE region, + u8 field_flags, + u8 field_attribute, + u32 field_position, + u32 field_length); + +ACPI_STATUS +acpi_aml_prep_bank_field_value ( + ACPI_NAMED_OBJECT *this_entry, + ACPI_HANDLE region, + ACPI_HANDLE bank_reg, + u32 bank_val, + u8 field_flags, + u8 field_attribute, + u32 field_position, + u32 field_length); + +ACPI_STATUS +acpi_aml_prep_index_field_value ( + ACPI_NAMED_OBJECT *this_entry, + ACPI_HANDLE index_reg, + ACPI_HANDLE data_reg, + u8 field_flags, + u8 field_attribute, + u32 field_position, + u32 field_length); + +ACPI_STATUS +acpi_aml_prep_operands ( + char *types, + ACPI_OBJECT_INTERNAL **stack_ptr); + + +/* + * iepstack - package stack utilities + */ + +/* +u32 +Acpi_aml_pkg_stack_level ( + void); + +void +Acpi_aml_clear_pkg_stack ( + void); + +ACPI_STATUS +Acpi_aml_pkg_push_length ( + u32 Length, + OPERATING_MODE Load_exec_mode); + +ACPI_STATUS +Acpi_aml_pkg_push_exec_length ( + u32 Length); + +ACPI_STATUS +Acpi_aml_pkg_push_exec ( + u8 *Code, + u32 Len); + +ACPI_STATUS +Acpi_aml_pkg_pop_length ( + s32 No_err_under, + OPERATING_MODE Load_exec_mode); + +ACPI_STATUS +Acpi_aml_pkg_pop_exec_length ( + void); + +ACPI_STATUS +Acpi_aml_pkg_pop_exec ( + void); + +*/ + +/* + * amsystem - Interface to OS services + */ + +u16 +acpi_aml_system_thread_id ( + void); + +ACPI_STATUS +acpi_aml_system_do_notify_op ( + ACPI_OBJECT_INTERNAL *value, + ACPI_OBJECT_INTERNAL *obj_desc); + +void +acpi_aml_system_do_suspend( + u32 time); + +void +acpi_aml_system_do_stall ( + u32 time); + +ACPI_STATUS +acpi_aml_system_acquire_mutex( + ACPI_OBJECT_INTERNAL *time, + ACPI_OBJECT_INTERNAL *obj_desc); + +ACPI_STATUS +acpi_aml_system_release_mutex( + ACPI_OBJECT_INTERNAL *obj_desc); + +ACPI_STATUS +acpi_aml_system_signal_event( + ACPI_OBJECT_INTERNAL *obj_desc); + +ACPI_STATUS +acpi_aml_system_wait_event( + ACPI_OBJECT_INTERNAL *time, + ACPI_OBJECT_INTERNAL *obj_desc); + +ACPI_STATUS +acpi_aml_system_reset_event( + ACPI_OBJECT_INTERNAL *obj_desc); + +ACPI_STATUS +acpi_aml_system_wait_semaphore ( + ACPI_HANDLE semaphore, + u32 timeout); + + +/* + * ammonadic - ACPI AML (p-code) execution, monadic operators + */ + +ACPI_STATUS +acpi_aml_exec_monadic1 ( + u16 opcode, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_aml_exec_monadic2 ( + u16 opcode, + ACPI_WALK_STATE *walk_state, + ACPI_OBJECT_INTERNAL **return_desc); + +ACPI_STATUS +acpi_aml_exec_monadic2_r ( + u16 opcode, + ACPI_WALK_STATE *walk_state, + ACPI_OBJECT_INTERNAL **return_desc); + + +/* + * amdyadic - ACPI AML (p-code) execution, dyadic operators + */ + +ACPI_STATUS +acpi_aml_exec_dyadic1 ( + u16 opcode, + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_aml_exec_dyadic2 ( + u16 opcode, + ACPI_WALK_STATE *walk_state, + ACPI_OBJECT_INTERNAL **return_desc); + +ACPI_STATUS +acpi_aml_exec_dyadic2_r ( + u16 opcode, + ACPI_WALK_STATE *walk_state, + ACPI_OBJECT_INTERNAL **return_desc); + +ACPI_STATUS +acpi_aml_exec_dyadic2_s ( + u16 opcode, + ACPI_WALK_STATE *walk_state, + ACPI_OBJECT_INTERNAL **return_desc); + + +/* + * amresolv - Object resolution and get value functions + */ + +ACPI_STATUS +acpi_aml_resolve_to_value ( + ACPI_OBJECT_INTERNAL **stack_ptr); + +ACPI_STATUS +acpi_aml_resolve_entry_to_value ( + ACPI_NAMED_OBJECT **stack_ptr); + +ACPI_STATUS +acpi_aml_resolve_object_to_value ( + ACPI_OBJECT_INTERNAL **stack_ptr); + +ACPI_STATUS +acpi_aml_get_field_unit_value ( + ACPI_OBJECT_INTERNAL *field_desc, + ACPI_OBJECT_INTERNAL *result_desc); + + +/* + * amcode - Scanner AML code manipulation routines + */ + +s32 +acpi_aml_avail ( + ACPI_SIZE n); + +s32 +acpi_aml_peek ( + void); + +s32 +acpi_aml_get_pcode_byte ( + u8 *pcode); + +u16 +acpi_aml_peek_op ( + void); + +u8 * +acpi_aml_consume_bytes ( + ACPI_SIZE bytes); + +ACPI_SIZE +acpi_aml_consume_stream_bytes ( + ACPI_SIZE bytes_to_get, + u8 *aml_buffer); + +void +acpi_aml_consume_package ( + OPERATING_MODE load_exec_mode); + +void +acpi_aml_set_pcode_input ( + u8 *base, + u32 length); + +ACPI_STATUS +acpi_aml_set_method ( + void *object); + +ACPI_STATUS +acpi_aml_prep_exec ( + u8 *pcode, + u32 pcode_length); + +ACPI_HANDLE +acpi_aml_get_pcode_handle ( + void); + +void +acpi_aml_get_current_location ( + ACPI_OBJECT_INTERNAL *method_desc); + +void +acpi_aml_set_current_location ( + ACPI_OBJECT_INTERNAL *method_desc); + + +/* + * amdump - Scanner debug output routines + */ + +void +acpi_aml_show_hex_value ( + s32 byte_count, + u8 *aml_ptr, + s32 lead_space); + +void +acpi_aml_dump_buffer ( + ACPI_SIZE length); + + +ACPI_STATUS +acpi_aml_dump_operand ( + ACPI_OBJECT_INTERNAL *entry_desc); + +void +acpi_aml_dump_operands ( + ACPI_OBJECT_INTERNAL **operands, + OPERATING_MODE interpreter_mode, + char *ident, + s32 num_levels, + char *note, + char *module_name, + s32 line_number); + +void +acpi_aml_dump_object_descriptor ( + ACPI_OBJECT_INTERNAL *object, + u32 flags); + + +void +acpi_aml_dump_acpi_named_object ( + ACPI_NAMED_OBJECT *entry, + u32 flags); + + +/* + * amnames - interpreter/scanner name load/execute + */ + +char * +acpi_aml_allocate_name_string ( + u32 prefix_count, + u32 num_name_segs); + +s32 +acpi_aml_good_char ( + s32 character); + +ACPI_STATUS +acpi_aml_exec_name_segment ( + u8 **in_aml_address, + char *name_string); + +ACPI_STATUS +acpi_aml_get_name_string ( + OBJECT_TYPE_INTERNAL data_type, + u8 *in_aml_address, + char **out_name_string, + u32 *out_name_length); + +u32 +acpi_aml_decode_package_length ( + u32 last_pkg_len); + + +ACPI_STATUS +acpi_aml_do_name ( + ACPI_OBJECT_TYPE data_type, + OPERATING_MODE load_exec_mode); + + +/* + * amstore - Object store support + */ + +ACPI_STATUS +acpi_aml_exec_store ( + ACPI_OBJECT_INTERNAL *op1, + ACPI_OBJECT_INTERNAL *res); + +ACPI_STATUS +acpi_aml_store_object_to_object ( + ACPI_OBJECT_INTERNAL *val_desc, + ACPI_OBJECT_INTERNAL *dest_desc); + +ACPI_STATUS +acpi_aml_store_object_to_nte ( + ACPI_OBJECT_INTERNAL *val_desc, + ACPI_NAMED_OBJECT *entry); + + +/* + * amutils - interpreter/scanner utilities + */ + +void +acpi_aml_enter_interpreter ( + void); + +void +acpi_aml_exit_interpreter ( + void); + +u8 +acpi_aml_validate_object_type ( + ACPI_OBJECT_TYPE type); + +u8 +acpi_aml_acquire_global_lock ( + u32 rule); + +ACPI_STATUS +acpi_aml_release_global_lock ( + u8 locked); + +void +acpi_aml_append_operand_diag( + char *name, + s32 line, + u16 op_code, + ACPI_OBJECT_INTERNAL **operands, + s32 Noperands); + +u32 +acpi_aml_buf_seq ( + void); + +s32 +acpi_aml_digits_needed ( + s32 value, + s32 base); + +ACPI_STATUS +acpi_aml_eisa_id_to_string ( + u32 numeric_id, + char *out_string); + + +/* + * amregion - default Op_region handlers + */ + +ACPI_STATUS +acpi_aml_system_memory_space_handler ( + u32 function, + u32 address, + u32 bit_width, + u32 *value, + void *context); + +ACPI_STATUS +acpi_aml_system_io_space_handler ( + u32 function, + u32 address, + u32 bit_width, + u32 *value, + void *context); + +ACPI_STATUS +acpi_aml_pci_config_space_handler ( + u32 function, + u32 address, + u32 bit_width, + u32 *value, + void *context); + +ACPI_STATUS +acpi_aml_embedded_controller_space_handler ( + u32 function, + u32 address, + u32 bit_width, + u32 *value, + void *context); + +ACPI_STATUS +acpi_aml_sm_bus_space_handler ( + u32 function, + u32 address, + u32 bit_width, + u32 *value, + void *context); + + +#endif /* __INTERP_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/macros.h linux-2.4.0-test9-lia/drivers/acpi/include/macros.h --- linux-2.4.0-test9/drivers/acpi/include/macros.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/macros.h Thu Aug 24 18:16:02 2000 @@ -0,0 +1,425 @@ + +/****************************************************************************** + * + * Name: macros.h - C macros for the entire subsystem. + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef __MACROS_H__ +#define __MACROS_H__ + +/* + * Data manipulation macros + */ + +#ifndef LOWORD +#define LOWORD(l) ((u16)(NATIVE_UINT)(l)) +#endif + +#ifndef HIWORD +#define HIWORD(l) ((u16)((((NATIVE_UINT)(l)) >> 16) & 0xFFFF)) +#endif + +#ifndef LOBYTE +#define LOBYTE(l) ((u8)(u16)(l)) +#endif + +#ifndef HIBYTE +#define HIBYTE(l) ((u8)((((u16)(l)) >> 8) & 0xFF)) +#endif + +#define BIT0(x) ((((x) & 0x01) > 0) ? 1 : 0) +#define BIT1(x) ((((x) & 0x02) > 0) ? 1 : 0) +#define BIT2(x) ((((x) & 0x04) > 0) ? 1 : 0) + +#define BIT3(x) ((((x) & 0x08) > 0) ? 1 : 0) +#define BIT4(x) ((((x) & 0x10) > 0) ? 1 : 0) +#define BIT5(x) ((((x) & 0x20) > 0) ? 1 : 0) +#define BIT6(x) ((((x) & 0x40) > 0) ? 1 : 0) +#define BIT7(x) ((((x) & 0x80) > 0) ? 1 : 0) + +#define LOW_BASE(w) ((u16) ((w) & 0x0000FFFF)) +#define MID_BASE(b) ((u8) (((b) & 0x00FF0000) >> 16)) +#define HI_BASE(b) ((u8) (((b) & 0xFF000000) >> 24)) +#define LOW_LIMIT(w) ((u16) ((w) & 0x0000FFFF)) +#define HI_LIMIT(b) ((u8) (((b) & 0x00FF0000) >> 16)) + + + /* + * Extract a byte of data using a pointer. Any more than a byte and we + * get into potential aligment issues -- see the STORE macros below + */ +#define GET8(addr) (*(u8*)(addr)) + + +/* + * Macros for moving data around to/from buffers that are possibly unaligned. + * If the hardware supports the transfer of unaligned data, just do the store. + * Otherwise, we have to move one byte at a time. + */ + +#ifdef _HW_ALIGNMENT_SUPPORT + +/* The hardware supports unaligned transfers, just do the move */ + +#define MOVE_UNALIGNED16_TO_16(d,s) *(u16*)(d) = *(u16*)(s) +#define MOVE_UNALIGNED32_TO_32(d,s) *(u32*)(d) = *(u32*)(s) +#define MOVE_UNALIGNED16_TO_32(d,s) *(u32*)(d) = *(u16*)(s) + +#else +/* + * The hardware does not support unaligned transfers. We must move the + * data one byte at a time. These macros work whether the source or + * the destination (or both) is/are unaligned. + */ + +#define MOVE_UNALIGNED16_TO_16(d,s) {((char *)(d))[0] = ((char *)(s))[0];\ + ((char *)(d))[1] = ((char *)(s))[1];} + +#define MOVE_UNALIGNED32_TO_32(d,s) {((char *)(d))[0] = ((char *)(s))[0];\ + ((char *)(d))[1] = ((char *)(s))[1];\ + ((char *)(d))[2] = ((char *)(s))[2];\ + ((char *)(d))[3] = ((char *)(s))[3];} + +#define MOVE_UNALIGNED16_TO_32(d,s) {(*(u32*)(d)) = 0; MOVE_UNALIGNED16_TO_16(d,s);} + +#endif + + +/* + * Fast power-of-two math macros for non-optimized compilers + */ + +#define _DIV(value,power_of2) ((value) >> (power_of2)) +#define _MUL(value,power_of2) ((value) << (power_of2)) +#define _MOD(value,divisor) ((value) & ((divisor) -1)) + +#define DIV_2(a) _DIV(a,1) +#define MUL_2(a) _MUL(a,1) +#define MOD_2(a) _MOD(a,2) + +#define DIV_4(a) _DIV(a,2) +#define MUL_4(a) _MUL(a,2) +#define MOD_4(a) _MOD(a,4) + +#define DIV_8(a) _DIV(a,3) +#define MUL_8(a) _MUL(a,3) +#define MOD_8(a) _MOD(a,8) + +#define DIV_16(a) _DIV(a,4) +#define MUL_16(a) _MUL(a,4) +#define MOD_16(a) _MOD(a,16) + + +/* + * Rounding macros (Power of two boundaries only) + */ + +#define ROUND_UP_TO_4BYTES(val) ((NATIVE_UINT)(((NATIVE_UINT)(val)+3)&~3)) + +#define ROUND_DOWN(value,boundary) ((value) & (~((boundary)-1))) +#define ROUND_UP(value,boundary) (((value) + ((boundary)-1)) & (~((boundary)-1))) + +#define ROUND_DOWN_TO_32_BITS(a) ROUND_DOWN(a,4) +#define ROUND_DOWN_TO_NATIVE_WORD(a) ROUND_DOWN(a,ALIGNED_ADDRESS_BOUNDARY) + +#define ROUND_UP_TO_32_BITS(a) ROUND_UP(a,4) +#define ROUND_UP_TO_NATIVE_WORD(a) ROUND_UP(a,ALIGNED_ADDRESS_BOUNDARY) + + +#ifdef DEBUG_ASSERT +#undef DEBUG_ASSERT +#endif + + +/* + * An ACPI_HANDLE (which is actually an ACPI_NAMED_OBJECT*) can appear in some contexts, + * such as on ap_obj_stack, where a pointer to an ACPI_OBJECT_INTERNAL can also + * appear. This macro is used to distinguish them. + * + * The Data_type field is the first field in both structures. + */ + +#define VALID_DESCRIPTOR_TYPE(d,t) (((ACPI_NAMED_OBJECT*)d)->data_type == t) + + +/* Macro to test the object type */ + +#define IS_THIS_OBJECT_TYPE(d,t) (((ACPI_OBJECT_INTERNAL *)d)->common.type == (u8)t) + + +/* + * Macro to check if a pointer is within an ACPI table. + * Parameter (a) is the pointer to check. Parameter (b) must be defined + * as a pointer to an ACPI_TABLE_HEADER. (b+1) then points past the header, + * and ((u8 *)b+b->Length) points one byte past the end of the table. + */ + +#ifndef _IA16 +#define IS_IN_ACPI_TABLE(a,b) (((u8 *)(a) >= (u8 *)(b + 1)) &&\ + ((u8 *)(a) < ((u8 *)b + b->length))) + +#else +#define IS_IN_ACPI_TABLE(a,b) (_segment)(a) == (_segment)(b) &&\ + (((u8 *)(a) >= (u8 *)(b + 1)) &&\ + ((u8 *)(a) < ((u8 *)b + b->length))) +#endif + +/* + * Macros for the master AML opcode table + */ + +#ifdef ACPI_DEBUG +#define OP_INFO_ENTRY(opcode,flags,name,Pargs,Iargs) {opcode,flags,Pargs,Iargs,name} +#else +#define OP_INFO_ENTRY(opcode,flags,name,Pargs,Iargs) {opcode,flags,Pargs,Iargs} +#endif + +#define ARG_TYPE_WIDTH 5 +#define ARG_1(x) ((u32)(x)) +#define ARG_2(x) ((u32)(x) << (1 * ARG_TYPE_WIDTH)) +#define ARG_3(x) ((u32)(x) << (2 * ARG_TYPE_WIDTH)) +#define ARG_4(x) ((u32)(x) << (3 * ARG_TYPE_WIDTH)) +#define ARG_5(x) ((u32)(x) << (4 * ARG_TYPE_WIDTH)) +#define ARG_6(x) ((u32)(x) << (5 * ARG_TYPE_WIDTH)) + +#define ARGI_LIST1(a) (ARG_1(a)) +#define ARGI_LIST2(a,b) (ARG_1(b)|ARG_2(a)) +#define ARGI_LIST3(a,b,c) (ARG_1(c)|ARG_2(b)|ARG_3(a)) +#define ARGI_LIST4(a,b,c,d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a)) +#define ARGI_LIST5(a,b,c,d,e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a)) +#define ARGI_LIST6(a,b,c,d,e,f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a)) + +#define ARGP_LIST1(a) (ARG_1(a)) +#define ARGP_LIST2(a,b) (ARG_1(a)|ARG_2(b)) +#define ARGP_LIST3(a,b,c) (ARG_1(a)|ARG_2(b)|ARG_3(c)) +#define ARGP_LIST4(a,b,c,d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)) +#define ARGP_LIST5(a,b,c,d,e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)) +#define ARGP_LIST6(a,b,c,d,e,f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f)) + +#define GET_CURRENT_ARG_TYPE(list) (list & 0x1F) +#define INCREMENT_ARG_LIST(list) (list >>= ARG_TYPE_WIDTH) + + +/* + * Reporting macros that are never compiled out + */ + +/* + * Error reporting. These versions add callers module and line#. Since + * _THIS_MODULE gets compiled out when ACPI_DEBUG isn't defined, only + * use it in debug mode. + */ + +#ifdef ACPI_DEBUG + +#define REPORT_INFO(a) _report_info(_THIS_MODULE,__LINE__,_COMPONENT,a) +#define REPORT_ERROR(a) _report_error(_THIS_MODULE,__LINE__,_COMPONENT,a) +#define REPORT_WARNING(a) _report_warning(_THIS_MODULE,__LINE__,_COMPONENT,a) +#define REPORT_SUCCESS(a) _report_success(_THIS_MODULE,__LINE__,_COMPONENT,a) + +#else + +#define REPORT_INFO(a) _report_info("",__LINE__,_COMPONENT,a) +#define REPORT_ERROR(a) _report_error("",__LINE__,_COMPONENT,a) +#define REPORT_WARNING(a) _report_warning("",__LINE__,_COMPONENT,a) +#define REPORT_SUCCESS(a) _report_success("",__LINE__,_COMPONENT,a) + +#endif + +/* Error reporting. These versions pass thru the module and line# */ + +#define _REPORT_INFO(a,b,c,d) _report_info(a,b,c,d) +#define _REPORT_ERROR(a,b,c,d) _report_error(a,b,c,d) +#define _REPORT_WARNING(a,b,c,d) _report_warning(a,b,c,d) + +/* Buffer dump macros */ + +#define DUMP_BUFFER(a,b) acpi_cm_dump_buffer((char *)a,b,DB_BYTE_DISPLAY,_COMPONENT) + +/* + * Debug macros that are conditionally compiled + */ + +#ifdef ACPI_DEBUG + +#define MODULE_NAME(name) static char *_THIS_MODULE = name + +/* + * Function entry tracing. + * The first parameter should be the procedure name as a quoted string. This is declared + * as a local string ("_Proc_name) so that it can be also used by the function exit macros below. + */ + +#define FUNCTION_TRACE(a) char * _proc_name = a;\ + function_trace(_THIS_MODULE,__LINE__,_COMPONENT,a) +#define FUNCTION_TRACE_PTR(a,b) char * _proc_name = a;\ + function_trace_ptr(_THIS_MODULE,__LINE__,_COMPONENT,a,(void *)b) +#define FUNCTION_TRACE_U32(a,b) char * _proc_name = a;\ + function_trace_u32(_THIS_MODULE,__LINE__,_COMPONENT,a,(u32)b) +#define FUNCTION_TRACE_STR(a,b) char * _proc_name = a;\ + function_trace_str(_THIS_MODULE,__LINE__,_COMPONENT,a,(char *)b) +/* + * Function exit tracing. + * WARNING: These macros include a return statement. This is usually considered + * bad form, but having a separate exit macro is very ugly and difficult to maintain. + * One of the FUNCTION_TRACE macros above must be used in conjunction with these macros + * so that "_Proc_name" is defined. + */ +#define return_VOID {function_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name);return;} +#define return_ACPI_STATUS(s) {function_status_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name,s);return(s);} +#define return_VALUE(s) {function_value_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name,(NATIVE_UINT)s);return(s);} +#define return_PTR(s) {function_ptr_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name,(char *)s);return(s);} + + +/* Conditional execution */ + +#define DEBUG_EXEC(a) a; +#define NORMAL_EXEC(a) + +#define DEBUG_DEFINE(a) a; +#define DEBUG_ONLY_MEMBERS(a) a; + + +/* Stack and buffer dumping */ + +#define DUMP_STACK_ENTRY(a) acpi_aml_dump_operand(a) +#define DUMP_OPERANDS(a,b,c,d,e) acpi_aml_dump_operands(a,b,c,d,e,_THIS_MODULE,__LINE__) + + +#define DUMP_ENTRY(a,b) acpi_ns_dump_entry (a,b) +#define DUMP_TABLES(a,b) acpi_ns_dump_tables(a,b) +#define DUMP_PATHNAME(a,b,c,d) acpi_ns_dump_pathname(a,b,c,d) +#define BREAK_MSG(a) acpi_os_breakpoint (a) + +/* + * Generate INT3 on ACPI_ERROR (Debug only!) + */ + +#define ERROR_BREAK +#ifdef ERROR_BREAK +#define BREAK_ON_ERROR(lvl) if ((lvl)&ACPI_ERROR) acpi_os_breakpoint("Fatal error encountered\n") +#else +#define BREAK_ON_ERROR(lvl) +#endif + +/* + * Master debug print macros + * Print iff: + * 1) Debug print for the current component is enabled + * 2) Debug error level or trace level for the print statement is enabled + * + */ + +#define PARAM_LIST(pl) pl + +#define TEST_DEBUG_SWITCH(lvl) if (((lvl) & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer)) + +#define DEBUG_PRINT(lvl,fp) TEST_DEBUG_SWITCH(lvl) {\ + debug_print_prefix (_THIS_MODULE,__LINE__);\ + debug_print_raw PARAM_LIST(fp);\ + BREAK_ON_ERROR(lvl);} + +#define DEBUG_PRINT_RAW(lvl,fp) TEST_DEBUG_SWITCH(lvl) {\ + debug_print_raw PARAM_LIST(fp);} + + +/* Assert macros */ + +#define ACPI_ASSERT(exp) if(!(exp)) \ + acpi_os_dbg_assert(#exp, __FILE__, __LINE__, "Failed Assertion") + +#define DEBUG_ASSERT(msg, exp) if(!(exp)) \ + acpi_os_dbg_assert(#exp, __FILE__, __LINE__, msg) + + +#else +/* + * This is the non-debug case -- make everything go away, + * leaving no executable debug code! + */ + +#define MODULE_NAME(name) +#define _THIS_MODULE "" + +#define DEBUG_EXEC(a) +#define NORMAL_EXEC(a) a; + +#define DEBUG_DEFINE(a) +#define DEBUG_ONLY_MEMBERS(a) +#define FUNCTION_TRACE(a) +#define FUNCTION_TRACE_PTR(a,b) +#define FUNCTION_TRACE_U32(a,b) +#define FUNCTION_TRACE_STR(a,b) +#define FUNCTION_EXIT +#define FUNCTION_STATUS_EXIT(s) +#define FUNCTION_VALUE_EXIT(s) +#define DUMP_STACK_ENTRY(a) +#define DUMP_OPERANDS(a,b,c,d,e) +#define DUMP_ENTRY(a,b) +#define DUMP_TABLES(a,b) +#define DUMP_PATHNAME(a,b,c,d) +#define DEBUG_PRINT(l,f) +#define DEBUG_PRINT_RAW(l,f) +#define BREAK_MSG(a) + +#define return_VOID return +#define return_ACPI_STATUS(s) return(s) +#define return_VALUE(s) return(s) +#define return_PTR(s) return(s) + +#define ACPI_ASSERT(exp) +#define DEBUG_ASSERT(msg, exp) + +#endif + + +/* + * For 16-bit code, we want to shrink some things even though + * we are using ACPI_DEBUG to get the debug output + */ +#ifdef _IA16 +#undef DEBUG_ONLY_MEMBERS +#define DEBUG_ONLY_MEMBERS(a) +#undef OP_INFO_ENTRY +#define OP_INFO_ENTRY(opcode,flags,name,Pargs,Iargs) {opcode,flags,Pargs,Iargs} +#endif + + +#ifndef ACPI_DEBUG + +#define ADD_OBJECT_NAME(a,b) + +#else + + +/* + * 1) Set name to blanks + * 2) Copy the object name + */ + +#define ADD_OBJECT_NAME(a,b) MEMSET (a->common.name, ' ', sizeof (a->common.name));\ + STRNCPY (a->common.name, acpi_gbl_ns_type_names[b], sizeof (a->common.name)) + +#endif + + +#endif /* MACROS_H */ diff -urN linux-2.4.0-test9/drivers/acpi/include/namesp.h linux-2.4.0-test9-lia/drivers/acpi/include/namesp.h --- linux-2.4.0-test9/drivers/acpi/include/namesp.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/namesp.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,424 @@ + +/****************************************************************************** + * + * Name: namesp.h - Namespace subcomponent prototypes and defines + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef __NAMESPACE_H__ +#define __NAMESPACE_H__ + +#include "actables.h" + + +/* To search the entire name space, pass this as Search_base */ + +#define NS_ALL ((ACPI_HANDLE)0) + +/* + * Elements of Acpi_ns_properties are bit significant + * and should be one-to-one with values of ACPI_OBJECT_TYPE + */ +#define NSP_NORMAL 0 +#define NSP_NEWSCOPE 1 /* a definition of this type opens a name scope */ +#define NSP_LOCAL 2 /* suppress search of enclosing scopes */ + + +/* Definitions of the predefined namespace names */ + +#define ACPI_UNKNOWN_NAME (u32) 0x3F3F3F3F /* Unknown name is "????" */ +#define ACPI_ROOT_NAME (u32) 0x2F202020 /* Root name is "/ " */ +#define ACPI_SYS_BUS_NAME (u32) 0x5F53425F /* Sys bus name is "_SB_" */ + +#define NS_ROOT_PATH "/" +#define NS_SYSTEM_BUS "_SB_" + + +/* Flags for Acpi_ns_lookup, Acpi_ns_search_and_enter */ + +#define NS_NO_UPSEARCH 0 +#define NS_SEARCH_PARENT 0x01 +#define NS_DONT_OPEN_SCOPE 0x02 +#define NS_NO_PEER_SEARCH 0x04 + +#define NS_WALK_UNLOCK TRUE +#define NS_WALK_NO_UNLOCK FALSE + + +ACPI_STATUS +acpi_ns_walk_namespace ( + OBJECT_TYPE_INTERNAL type, + ACPI_HANDLE start_object, + u32 max_depth, + u8 unlock_before_callback, + WALK_CALLBACK user_function, + void *context, + void **return_value); + + +ACPI_NAMED_OBJECT* +acpi_ns_get_next_object ( + OBJECT_TYPE_INTERNAL type, + ACPI_NAMED_OBJECT *parent, + ACPI_NAMED_OBJECT *child); + + +ACPI_STATUS +acpi_ns_delete_namespace_by_owner ( + u16 table_id); + +void +acpi_ns_free_table_entry ( + ACPI_NAMED_OBJECT *entry); + + +/* Namespace loading - nsload */ + +ACPI_STATUS +acpi_ns_parse_table ( + ACPI_TABLE_DESC *table_desc, + ACPI_NAME_TABLE *scope); + +ACPI_STATUS +acpi_ns_load_table ( + ACPI_TABLE_DESC *table_desc, + ACPI_NAMED_OBJECT *entry); + +ACPI_STATUS +acpi_ns_load_table_by_type ( + ACPI_TABLE_TYPE table_type); + + +/* + * Top-level namespace access - nsaccess + */ + + +ACPI_STATUS +acpi_ns_root_initialize ( + void); + +ACPI_STATUS +acpi_ns_lookup ( + ACPI_GENERIC_STATE *scope_info, + char *name, + OBJECT_TYPE_INTERNAL type, + OPERATING_MODE interpreter_mode, + u32 flags, + ACPI_WALK_STATE *walk_state, + ACPI_NAMED_OBJECT **ret_entry); + + +/* + * Table allocation/deallocation - nsalloc + */ + +ACPI_NAME_TABLE * +acpi_ns_allocate_name_table ( + u32 num_entries); + +ACPI_STATUS +acpi_ns_delete_namespace_subtree ( + ACPI_NAMED_OBJECT *parent_handle); + +void +acpi_ns_detach_object ( + ACPI_HANDLE object); + +void +acpi_ns_delete_name_table ( + ACPI_NAME_TABLE *name_table); + + +/* + * Namespace modification - nsmodify + */ + +ACPI_STATUS +acpi_ns_unload_namespace ( + ACPI_HANDLE handle); + +ACPI_STATUS +acpi_ns_delete_subtree ( + ACPI_HANDLE start_handle); + + +/* + * Namespace dump/print utilities - nsdump + */ + +void +acpi_ns_dump_tables ( + ACPI_HANDLE search_base, + s32 max_depth); + +void +acpi_ns_dump_entry ( + ACPI_HANDLE handle, + u32 debug_level); + +ACPI_STATUS +acpi_ns_dump_pathname ( + ACPI_HANDLE handle, + char *msg, + u32 level, + u32 component); + +void +acpi_ns_dump_root_devices ( + void); + +void +acpi_ns_dump_objects ( + OBJECT_TYPE_INTERNAL type, + u32 max_depth, + u32 ownder_id, + ACPI_HANDLE start_handle); + + +/* + * Namespace evaluation functions - nseval + */ + +ACPI_STATUS +acpi_ns_evaluate_by_handle ( + ACPI_NAMED_OBJECT *object_nte, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_object); + +ACPI_STATUS +acpi_ns_evaluate_by_name ( + char *pathname, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_object); + +ACPI_STATUS +acpi_ns_evaluate_relative ( + ACPI_NAMED_OBJECT *object_nte, + char *pathname, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_object); + +ACPI_STATUS +acpi_ns_execute_control_method ( + ACPI_NAMED_OBJECT *method_entry, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_obj_desc); + +ACPI_STATUS +acpi_ns_get_object_value ( + ACPI_NAMED_OBJECT *object_entry, + ACPI_OBJECT_INTERNAL **return_obj_desc); + + +/* + * Parent/Child/Peer utility functions - nsfamily + */ + +ACPI_NAME +acpi_ns_find_parent_name ( + ACPI_NAMED_OBJECT *entry_to_search); + +u8 +acpi_ns_exist_downstream_sibling ( + ACPI_NAMED_OBJECT *this_entry); + + +/* + * Scope manipulation - nsscope + */ + +s32 +acpi_ns_opens_scope ( + OBJECT_TYPE_INTERNAL type); + +char * +acpi_ns_name_of_scope ( + ACPI_NAME_TABLE *scope); + +char * +acpi_ns_name_of_current_scope ( + ACPI_WALK_STATE *walk_state); + +ACPI_STATUS +acpi_ns_handle_to_pathname ( + ACPI_HANDLE obj_handle, + u32 *buf_size, + char *user_buffer); + +u8 +acpi_ns_pattern_match ( + ACPI_NAMED_OBJECT *obj_entry, + char *search_for); + +ACPI_STATUS +acpi_ns_name_compare ( + ACPI_HANDLE obj_handle, + u32 level, + void *context, + void **return_value); + +void +acpi_ns_low_find_names ( + ACPI_NAMED_OBJECT *this_entry, + char *search_for, + s32 *count, + ACPI_HANDLE list[], + s32 max_depth); + +ACPI_HANDLE * +acpi_ns_find_names ( + char *search_for, + ACPI_HANDLE search_base, + s32 max_depth); + +ACPI_STATUS +acpi_ns_get_named_object ( + char *pathname, + ACPI_NAME_TABLE *in_scope, + ACPI_NAMED_OBJECT **out_nte); + +/* + * Object management for NTEs - nsobject + */ + +ACPI_STATUS +acpi_ns_attach_method ( + ACPI_HANDLE obj_handle, + u8 *pcode_addr, + u32 pcode_length); + +ACPI_STATUS +acpi_ns_attach_object ( + ACPI_HANDLE obj_handle, + ACPI_HANDLE value, + OBJECT_TYPE_INTERNAL type); + + +void * +acpi_ns_compare_value ( + ACPI_HANDLE obj_handle, + u32 level, + void *obj_desc); + +ACPI_HANDLE +acpi_ns_find_attached_object ( + ACPI_OBJECT_INTERNAL *obj_desc, + ACPI_HANDLE search_base, + s32 max_depth); + + +/* + * Namespace searching and entry - nssearch + */ + +ACPI_STATUS +acpi_ns_search_and_enter ( + u32 entry_name, + ACPI_WALK_STATE *walk_state, + ACPI_NAME_TABLE *name_table, + OPERATING_MODE interpreter_mode, + OBJECT_TYPE_INTERNAL type, + u32 flags, + ACPI_NAMED_OBJECT **ret_entry); + +void +acpi_ns_initialize_table ( + ACPI_NAME_TABLE *new_table, + ACPI_NAME_TABLE *parent_scope, + ACPI_NAMED_OBJECT *parent_entry); + +ACPI_STATUS +acpi_ns_search_one_scope ( + u32 entry_name, + ACPI_NAME_TABLE *name_table, + OBJECT_TYPE_INTERNAL type, + ACPI_NAMED_OBJECT **ret_entry, + NS_SEARCH_DATA *ret_info); + + +/* + * Utility functions - nsutils + */ + +u8 +acpi_ns_valid_root_prefix ( + char prefix); + +u8 +acpi_ns_valid_path_separator ( + char sep); + +OBJECT_TYPE_INTERNAL +acpi_ns_get_type ( + ACPI_HANDLE obj_handle); + +void * +acpi_ns_get_attached_object ( + ACPI_HANDLE obj_handle); + +s32 +acpi_ns_local ( + OBJECT_TYPE_INTERNAL type); + +ACPI_STATUS +acpi_ns_internalize_name ( + char *dotted_name, + char **converted_name); + +ACPI_STATUS +acpi_ns_externalize_name ( + u32 internal_name_length, + char *internal_name, + u32 *converted_name_length, + char **converted_name); + +s32 +is_ns_object ( + ACPI_OBJECT_INTERNAL *p_oD); + +s32 +acpi_ns_mark_nS( + void); + +ACPI_NAMED_OBJECT* +acpi_ns_convert_handle_to_entry ( + ACPI_HANDLE handle); + +ACPI_HANDLE +acpi_ns_convert_entry_to_handle( + ACPI_NAMED_OBJECT*nte); + +void +acpi_ns_terminate ( + void); + +ACPI_NAMED_OBJECT * +acpi_ns_get_parent_entry ( + ACPI_NAMED_OBJECT *this_entry); + + +ACPI_NAMED_OBJECT * +acpi_ns_get_next_valid_entry ( + ACPI_NAMED_OBJECT *this_entry); + + +#endif /* __NAMESPACE_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/output.h linux-2.4.0-test9-lia/drivers/acpi/include/output.h --- linux-2.4.0-test9/drivers/acpi/include/output.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/output.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,124 @@ + +/****************************************************************************** + * + * Name: output.h -- debug output + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef _OUTPUT_H +#define _OUTPUT_H + +/* + * Debug levels and component IDs. These are used to control the + * granularity of the output of the DEBUG_PRINT macro -- on a per- + * component basis and a per-exception-type basis. + */ + +/* Component IDs -- used in the global "Debug_layer" */ + +#define GLOBAL 0x00000001 +#define COMMON 0x00000002 +#define PARSER 0x00000004 +#define DISPATCHER 0x00000008 +#define INTERPRETER 0x00000010 +#define NAMESPACE 0x00000020 +#define RESOURCE_MANAGER 0x00000040 +#define TABLE_MANAGER 0x00000080 +#define EVENT_HANDLING 0x00000100 +#define HARDWARE 0x00000200 +#define MISCELLANEOUS 0x00000400 +#define OS_DEPENDENT 0x00000800 + +#define BUS_MANAGER 0x00001000 + +#define PROCESSOR_CONTROL 0x00002000 +#define SYSTEM_CONTROL 0x00004000 +#define THERMAL_CONTROL 0x00008000 +#define POWER_CONTROL 0x00010000 + +#define EMBEDDED_CONTROLLER 0x00020000 +#define BATTERY 0x00040000 + +#define DEBUGGER 0x00100000 +#define ALL_COMPONENTS 0x001FFFFF + + +/* Exception level -- used in the global "Debug_level" */ + +#define ACPI_OK 0x00000001 +#define ACPI_INFO 0x00000002 +#define ACPI_WARN 0x00000004 +#define ACPI_ERROR 0x00000008 +#define ACPI_FATAL 0x00000010 +#define ACPI_DEBUG_OBJECT 0x00000020 +#define ACPI_ALL 0x0000003F + + +/* Trace level -- also used in the global "Debug_level" */ + +#define TRACE_PARSE 0x00000100 +#define TRACE_DISPATCH 0x00000200 +#define TRACE_LOAD 0x00000400 +#define TRACE_EXEC 0x00000800 +#define TRACE_NAMES 0x00001000 +#define TRACE_OPREGION 0x00002000 +#define TRACE_BFIELD 0x00004000 +#define TRACE_TRASH 0x00008000 +#define TRACE_TABLES 0x00010000 +#define TRACE_FUNCTIONS 0x00020000 +#define TRACE_VALUES 0x00040000 +#define TRACE_OBJECTS 0x00080000 +#define TRACE_ALLOCATIONS 0x00100000 +#define TRACE_RESOURCES 0x00200000 +#define TRACE_IO 0x00400000 +#define TRACE_INTERRUPTS 0x00800000 +#define TRACE_USER_REQUESTS 0x01000000 +#define TRACE_PACKAGE 0x02000000 +#define TRACE_MUTEX 0x04000000 + +#define TRACE_ALL 0x0FFFFF00 + + +/* Exceptionally verbose output -- also used in the global "Debug_level" */ + +#define VERBOSE_AML_DISASSEMBLE 0x10000000 +#define VERBOSE_INFO 0x20000000 +#define VERBOSE_TABLES 0x40000000 +#define VERBOSE_EVENTS 0x80000000 + +#define VERBOSE_ALL 0x70000000 + + +/* Defaults for Debug_level, debug and normal */ + +#define DEBUG_DEFAULT (ACPI_OK | ACPI_WARN | ACPI_ERROR | ACPI_DEBUG_OBJECT | TRACE_TABLES | TRACE_IO) +#define NORMAL_DEFAULT (ACPI_OK | ACPI_WARN | ACPI_ERROR | ACPI_DEBUG_OBJECT) +#define DEBUG_ALL (VERBOSE_AML_DISASSEMBLE | TRACE_ALL | ACPI_ALL) + +/* Misc defines */ + +#define HEX 0x01 +#define ASCII 0x02 +#define FULL_ADDRESS 0x04 +#define CHARS_PER_LINE 16 /* used in Dump_buf function */ + + +#endif /* _OUTPUT_H */ diff -urN linux-2.4.0-test9/drivers/acpi/include/parser.h linux-2.4.0-test9-lia/drivers/acpi/include/parser.h --- linux-2.4.0-test9/drivers/acpi/include/parser.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/parser.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,327 @@ +/****************************************************************************** + * + * Module Name: parser.h - AML Parser subcomponent prototypes and defines + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + + +#ifndef _PARSER_H_ +#define _PARSER_H_ + + +#define OP_HAS_RETURN_VALUE 1 + +/* variable # arguments */ + +#define ACPI_VAR_ARGS ACPI_UINT32_MAX + +/* maximum virtual address */ + +#define ACPI_MAX_AML ((u8 *)(~0UL)) + + +#define PARSE_DELETE_TREE 1 + + +/* psapi - Parser external interfaces */ + +ACPI_STATUS +acpi_psx_load_table ( + u8 *pcode_addr, + s32 pcode_length); + +ACPI_STATUS +acpi_psx_execute ( + ACPI_NAMED_OBJECT *method_entry, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_obj_desc); + + +u8 +acpi_ps_is_namespace_object_op ( + u16 opcode); +u8 +acpi_ps_is_namespace_op ( + u16 opcode); + + +/****************************************************************************** + * + * Parser interfaces + * + *****************************************************************************/ + + +/* psargs - Parse AML opcode arguments */ + +u8 * +acpi_ps_get_next_package_end ( + ACPI_PARSE_STATE *parser_state); + +char * +acpi_ps_get_next_namestring ( + ACPI_PARSE_STATE *parser_state); + +void +acpi_ps_get_next_simple_arg ( + ACPI_PARSE_STATE *parser_state, + s32 arg_type, /* type of argument */ + ACPI_GENERIC_OP *arg); /* (OUT) argument data */ + +void +acpi_ps_get_next_namepath ( + ACPI_PARSE_STATE *parser_state, + ACPI_GENERIC_OP *arg, + u32 *arg_count, + u8 method_call); + +ACPI_GENERIC_OP * +acpi_ps_get_next_field ( + ACPI_PARSE_STATE *parser_state); + +ACPI_GENERIC_OP * +acpi_ps_get_next_arg ( + ACPI_PARSE_STATE *parser_state, + s32 arg_type, + u32 *arg_count); + + +/* psopcode - AML Opcode information */ + +ACPI_OP_INFO * +acpi_ps_get_opcode_info ( + u16 opcode); + +char * +acpi_ps_get_opcode_name ( + u16 opcode); + + +/* psparse - top level parsing routines */ + +void +acpi_ps_delete_parse_tree ( + ACPI_GENERIC_OP *root); + +ACPI_STATUS +acpi_ps_parse_loop ( + ACPI_PARSE_STATE *parser_state, + ACPI_WALK_STATE *walk_state, + u32 parse_flags); + + +ACPI_STATUS +acpi_ps_parse_aml ( + ACPI_GENERIC_OP *start_scope, + u8 *aml, + u32 acpi_aml_size, + u32 parse_flags); + +ACPI_STATUS +acpi_ps_parse_table ( + u8 *aml, + s32 aml_size, + INTERPRETER_CALLBACK descending_callback, + INTERPRETER_CALLBACK ascending_callback, + ACPI_GENERIC_OP **root_object); + +u16 +acpi_ps_peek_opcode ( + ACPI_PARSE_STATE *state); + + +/* psscope - Scope stack management routines */ + + +ACPI_STATUS +acpi_ps_init_scope ( + ACPI_PARSE_STATE *parser_state, + ACPI_GENERIC_OP *root); + +ACPI_GENERIC_OP * +acpi_ps_get_parent_scope ( + ACPI_PARSE_STATE *state); + +u8 +acpi_ps_has_completed_scope ( + ACPI_PARSE_STATE *parser_state); + +void +acpi_ps_pop_scope ( + ACPI_PARSE_STATE *parser_state, + ACPI_GENERIC_OP **op, + u32 *arg_list); + +ACPI_STATUS +acpi_ps_push_scope ( + ACPI_PARSE_STATE *parser_state, + ACPI_GENERIC_OP *op, + u32 remaining_args, + u32 arg_count); + +void +acpi_ps_cleanup_scope ( + ACPI_PARSE_STATE *state); + + +/* pstree - parse tree manipulation routines */ + +void +acpi_ps_append_arg( + ACPI_GENERIC_OP *op, + ACPI_GENERIC_OP *arg); + +ACPI_GENERIC_OP* +acpi_ps_find ( + ACPI_GENERIC_OP *scope, + char *path, + u16 opcode, + u32 create); + +ACPI_GENERIC_OP * +acpi_ps_get_arg( + ACPI_GENERIC_OP *op, + u32 argn); + +ACPI_GENERIC_OP * +acpi_ps_get_child ( + ACPI_GENERIC_OP *op); + +ACPI_GENERIC_OP * +acpi_ps_get_depth_next ( + ACPI_GENERIC_OP *origin, + ACPI_GENERIC_OP *op); + + +/* pswalk - parse tree walk routines */ + +ACPI_STATUS +acpi_ps_walk_parsed_aml ( + ACPI_GENERIC_OP *start_op, + ACPI_GENERIC_OP *end_op, + ACPI_OBJECT_INTERNAL *mth_desc, + ACPI_NAME_TABLE *start_scope, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **caller_return_desc, + ACPI_OWNER_ID owner_id, + INTERPRETER_CALLBACK descending_callback, + INTERPRETER_CALLBACK ascending_callback); + +ACPI_STATUS +acpi_ps_get_next_walk_op ( + ACPI_WALK_STATE *walk_state, + ACPI_GENERIC_OP *op, + INTERPRETER_CALLBACK ascending_callback); + + +/* psutils - parser utilities */ + +void +acpi_ps_init_op ( + ACPI_GENERIC_OP *op, + u16 opcode); + +ACPI_GENERIC_OP * +acpi_ps_alloc_op ( + u16 opcode); + +void +acpi_ps_free_op ( + ACPI_GENERIC_OP *op); + +void +acpi_ps_delete_parse_cache ( + void); + +u8 +acpi_ps_is_leading_char ( + s32 c); + +u8 +acpi_ps_is_prefix_char ( + s32 c); + +u8 +acpi_ps_is_named_op ( + u16 opcode); + +u8 +acpi_ps_is_named_object_op ( + u16 opcode); + +u8 +acpi_ps_is_deferred_op ( + u16 opcode); + +u8 +acpi_ps_is_bytelist_op( + u16 opcode); + +u8 +acpi_ps_is_field_op( + u16 opcode); + +u8 +acpi_ps_is_create_field_op ( + u16 opcode); + +ACPI_NAMED_OP* +acpi_ps_to_named_op( + ACPI_GENERIC_OP *op); + +ACPI_DEFERRED_OP * +acpi_ps_to_deferred_op ( + ACPI_GENERIC_OP *op); + +ACPI_BYTELIST_OP* +acpi_ps_to_bytelist_op( + ACPI_GENERIC_OP *op); + +u32 +acpi_ps_get_name( + ACPI_GENERIC_OP *op); + +void +acpi_ps_set_name( + ACPI_GENERIC_OP *op, + u32 name); + + +/* psdump - display parser tree */ + +s32 +acpi_ps_sprint_path ( + char *buffer_start, + u32 buffer_size, + ACPI_GENERIC_OP *op); + +s32 +acpi_ps_sprint_op ( + char *buffer_start, + u32 buffer_size, + ACPI_GENERIC_OP *op); + +void +acpi_ps_show ( + ACPI_GENERIC_OP *op); + + +#endif /* _PARSER_H_ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/resource.h linux-2.4.0-test9-lia/drivers/acpi/include/resource.h --- linux-2.4.0-test9/drivers/acpi/include/resource.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/resource.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,300 @@ +/****************************************************************************** + * + * Name: resource.h - Resource Manager function prototypes + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef __RESOURCE_H__ +#define __RESOURCE_H__ + +#include "actypes.h" +#include "acobject.h" + +/* + * Function prototypes called from Acpi* APIs + */ + +ACPI_STATUS +acpi_rs_get_prt_method_data ( + ACPI_HANDLE handle, + ACPI_BUFFER *ret_buffer); + + +ACPI_STATUS +acpi_rs_get_crs_method_data ( + ACPI_HANDLE handle, + ACPI_BUFFER *ret_buffer); + +ACPI_STATUS +acpi_rs_get_prs_method_data ( + ACPI_HANDLE handle, + ACPI_BUFFER *ret_buffer); + +ACPI_STATUS +acpi_rs_set_srs_method_data ( + ACPI_HANDLE handle, + ACPI_BUFFER *ret_buffer); + +ACPI_STATUS +acpi_rs_create_resource_list ( + ACPI_OBJECT_INTERNAL *byte_stream_buffer, + u8 *output_buffer, + u32 *output_buffer_length); + +ACPI_STATUS +acpi_rs_create_byte_stream ( + RESOURCE *linked_list_buffer, + u8 *output_buffer, + u32 *output_buffer_length); + +ACPI_STATUS +acpi_rs_create_pci_routing_table ( + ACPI_OBJECT_INTERNAL *method_return_object, + u8 *output_buffer, + u32 *output_buffer_length); + + +/* + *Function prototypes called from Acpi_rs_create*APIs + */ + +void +acpi_rs_dump_resource_list ( + RESOURCE *resource); + +void +acpi_rs_dump_irq_list ( + u8 *route_table); + +ACPI_STATUS +acpi_rs_get_byte_stream_start ( + u8 *byte_stream_buffer, + u8 **byte_stream_start, + u32 *size); + +ACPI_STATUS +acpi_rs_calculate_list_length ( + u8 *byte_stream_buffer, + u32 byte_stream_buffer_length, + u32 *size_needed); + +ACPI_STATUS +acpi_rs_calculate_byte_stream_length ( + RESOURCE *linked_list_buffer, + u32 *size_needed); + +ACPI_STATUS +acpi_rs_byte_stream_to_list ( + u8 *byte_stream_buffer, + u32 byte_stream_buffer_length, + u8 **output_buffer); + +ACPI_STATUS +acpi_rs_list_to_byte_stream ( + RESOURCE *linked_list, + u32 byte_stream_size_needed, + u8 **output_buffer); + +ACPI_STATUS +acpi_rs_io_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_fixed_io_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_io_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_fixed_io_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_irq_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_irq_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_dma_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_dma_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_address16_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_address16_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_address32_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_address32_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_start_dependent_functions_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_end_dependent_functions_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_start_dependent_functions_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_end_dependent_functions_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_memory24_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_memory24_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_memory32_range_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size +); + +ACPI_STATUS +acpi_rs_fixed_memory32_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_memory32_range_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_fixed_memory32_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_extended_irq_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_extended_irq_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_end_tag_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_end_tag_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + +ACPI_STATUS +acpi_rs_vendor_resource ( + u8 *byte_stream_buffer, + u32 *bytes_consumed, + u8 **output_buffer, + u32 *structure_size); + +ACPI_STATUS +acpi_rs_vendor_stream ( + RESOURCE *linked_list, + u8 **output_buffer, + u32 *bytes_consumed); + + +#endif /*__RESOURCE_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/include/tables.h linux-2.4.0-test9-lia/drivers/acpi/include/tables.h --- linux-2.4.0-test9/drivers/acpi/include/tables.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/include/tables.h Wed Jul 5 11:23:12 2000 @@ -0,0 +1,168 @@ + +/****************************************************************************** + * + * Name: tables.h - ACPI table management + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 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 + */ + +#ifndef __TABLES_H__ +#define __TABLES_H__ + +#include "actypes.h" +#include "actables.h" + + +/* Used in Acpi_tb_map_acpi_table for size parameter if table header is to be used */ + +#define SIZE_IN_HEADER 0 + + +ACPI_STATUS +acpi_tb_handle_to_object ( + u16 table_id, + ACPI_TABLE_DESC **table_desc); + + +/* + * Acpi_tbfac - FACP, FACS utilities + */ + +ACPI_STATUS +acpi_tb_get_table_facs ( + char *buffer_ptr, + ACPI_TABLE_DESC *table_info); + + +/* + * Acpi_tbget - Table "get" routines + */ + +ACPI_STATUS +acpi_tb_get_table_ptr ( + ACPI_TABLE_TYPE table_type, + u32 instance, + ACPI_TABLE_HEADER **table_ptr_loc); + +ACPI_STATUS +acpi_tb_get_table ( + void *physical_address, + char *buffer_ptr, + ACPI_TABLE_DESC *table_info); + + +/* + * Acpi_tbgetall - Get all firmware ACPI tables + */ + +ACPI_STATUS +acpi_tb_get_all_tables ( + u32 number_of_tables, + char *buffer_ptr); + + +/* + * Acpi_tbinstall - Table installation + */ + +ACPI_STATUS +acpi_tb_install_table ( + char *table_ptr, + ACPI_TABLE_DESC *table_info); + +ACPI_STATUS +acpi_tb_recognize_table ( + char *table_ptr, + ACPI_TABLE_DESC *table_info); + +ACPI_STATUS +acpi_tb_init_table_descriptor ( + ACPI_TABLE_TYPE table_type, + ACPI_TABLE_DESC *table_info); + + +/* + * Acpi_tbremove - Table removal and deletion + */ + +void +acpi_tb_delete_acpi_tables ( + void); + +void +acpi_tb_delete_acpi_table ( + ACPI_TABLE_TYPE type); + +ACPI_TABLE_DESC * +acpi_tb_delete_single_table ( + ACPI_TABLE_DESC *table_desc); + +void +acpi_tb_free_acpi_tables_of_type ( + ACPI_TABLE_DESC *table_info); + + +/* + * Acpi_tbrsd - RSDP, RSDT utilities + */ + +ACPI_STATUS +acpi_tb_get_table_rsdt ( + u32 *number_of_tables); + +char * +acpi_tb_scan_memory_for_rsdp ( + char *start_address, + u32 length); + +ACPI_STATUS +acpi_tb_find_rsdp ( + ACPI_TABLE_DESC *table_info); + + +/* + * Acpi_tbutils - common table utilities + */ + +u8 +acpi_tb_system_table_pointer ( + void *where); + +ACPI_STATUS +acpi_tb_map_acpi_table ( + void *physical_address, + u32 *size, + void **logical_address); + +ACPI_STATUS +acpi_tb_verify_table_checksum ( + ACPI_TABLE_HEADER *table_header); + +u8 +acpi_tb_checksum ( + void *buffer, + u32 length); + +ACPI_STATUS +acpi_tb_validate_table_header ( + ACPI_TABLE_HEADER *table_header); + + +#endif /* __TABLES_H__ */ diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/Makefile linux-2.4.0-test9-lia/drivers/acpi/interpreter/Makefile --- linux-2.4.0-test9/drivers/acpi/interpreter/Makefile Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/Makefile Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -SUB_DIRS := -MOD_SUB_DIRS := $(SUB_DIRS) -MOD_IN_SUB_DIRS := -ALL_SUB_DIRS := $(SUB_DIRS) - -O_TARGET := ../$(shell basename `pwd`).o -O_OBJS := -M_OBJS := - -ACPI_OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) - -EXTRA_CFLAGS += -I../include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) - -# if the interpreter is used, it overrides arch/i386/kernel/acpi.c -ifeq ($(CONFIG_ACPI_INTERPRETER),y) - O_OBJS := $(ACPI_OBJS) -endif - -include $(TOPDIR)/Rules.make - -clean: - $(RM) *.o diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amconfig.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amconfig.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amconfig.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amconfig.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: amconfig - Namespace reconfiguration (Load/Unload opcodes) - * $Revision: 23 $ * *****************************************************************************/ @@ -25,17 +25,17 @@ #include "acpi.h" -#include "acparser.h" -#include "acinterp.h" +#include "parser.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "acevents.h" -#include "actables.h" -#include "acdispat.h" +#include "namesp.h" +#include "events.h" +#include "tables.h" +#include "dispatch.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amconfig") + MODULE_NAME ("amconfig"); /***************************************************************************** @@ -53,13 +53,13 @@ ACPI_STATUS acpi_aml_exec_load_table ( - ACPI_OPERAND_OBJECT *rgn_desc, + ACPI_OBJECT_INTERNAL *rgn_desc, ACPI_HANDLE *ddb_handle) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *table_desc = NULL; - u8 *table_ptr; - u8 *table_data_ptr; + ACPI_OBJECT_INTERNAL *table_desc = NULL; + char *table_ptr; + char *table_data_ptr; ACPI_TABLE_HEADER table_header; ACPI_TABLE_DESC table_info; u32 i; @@ -73,7 +73,7 @@ table_header.length = 0; for (i = 0; i < sizeof (ACPI_TABLE_HEADER); i++) { status = acpi_ev_address_space_dispatch (rgn_desc, ADDRESS_SPACE_READ, - i, 8, (u32 *) ((u8 *) &table_header + i)); + i, 8, (u32 *) ((char *) &table_header + i)); if (ACPI_FAILURE (status)) { return (status); } @@ -184,19 +184,16 @@ ACPI_HANDLE ddb_handle) { ACPI_STATUS status = AE_NOT_IMPLEMENTED; - ACPI_OPERAND_OBJECT *table_desc = (ACPI_OPERAND_OBJECT *) ddb_handle; + ACPI_OBJECT_INTERNAL *table_desc = (ACPI_OBJECT_INTERNAL *) ddb_handle; ACPI_TABLE_DESC *table_info; /* Validate the handle */ - /* Although the handle is partially validated in Acpi_aml_exec_reconfiguration(), - * when it calls Acpi_aml_resolve_operands(), the handle is more completely - * validated here. - */ + /* TBD: [Errors] Wasn't this done earlier? */ if ((!ddb_handle) || (!VALID_DESCRIPTOR_TYPE (ddb_handle, ACPI_DESC_TYPE_INTERNAL)) || - (((ACPI_OPERAND_OBJECT *)ddb_handle)->common.type != + (((ACPI_OBJECT_INTERNAL *)ddb_handle)->common.type != INTERNAL_TYPE_REFERENCE)) { return (AE_BAD_PARAMETER); @@ -208,7 +205,7 @@ table_info = (ACPI_TABLE_DESC *) table_desc->reference.object; /* - * Delete the entire namespace under this table Node + * Delete the entire namespace under this table NTE * (Offset contains the Table_id) */ @@ -248,16 +245,16 @@ ACPI_WALK_STATE *walk_state) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *region_desc = NULL; + ACPI_OBJECT_INTERNAL *region_desc = NULL; ACPI_HANDLE *ddb_handle; /* Resolve the operands */ - status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS); /* Get the table handle, common for both opcodes */ - status |= acpi_ds_obj_stack_pop_object ((ACPI_OPERAND_OBJECT **) &ddb_handle, + status |= acpi_ds_obj_stack_pop_object ((ACPI_OBJECT_INTERNAL **) &ddb_handle, walk_state); switch (opcode) @@ -268,19 +265,22 @@ /* Get the region or field descriptor */ status |= acpi_ds_obj_stack_pop_object (®ion_desc, walk_state); - if (ACPI_FAILURE (status)) { - acpi_cm_remove_reference (region_desc); - return (status); + if (status != AE_OK) { + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, opcode, + WALK_OPERANDS, 2); + goto cleanup2; } status = acpi_aml_exec_load_table (region_desc, ddb_handle); break; - case AML_UNLOAD_OP: + case AML_UN_LOAD_OP: - if (ACPI_FAILURE (status)) { - return (status); + if (status != AE_OK) { + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, opcode, + WALK_OPERANDS, 1); + goto cleanup1; } status = acpi_aml_exec_unload_table (ddb_handle); @@ -294,6 +294,10 @@ } +cleanup2: + acpi_cm_remove_reference (region_desc); + +cleanup1: return (status); } diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amcreate.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amcreate.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amcreate.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amcreate.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: amcreate - Named object creation - * $Revision: 44 $ * *****************************************************************************/ @@ -25,19 +25,19 @@ #include "acpi.h" -#include "acparser.h" -#include "acinterp.h" +#include "parser.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "acevents.h" -#include "acdispat.h" +#include "namesp.h" +#include "events.h" +#include "dispatch.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amcreate") + MODULE_NAME ("amcreate"); -/******************************************************************************* +/***************************************************************************** * * FUNCTION: Acpi_aml_exec_create_field * @@ -64,19 +64,19 @@ * Num_bits := Term_arg=>Integer * Source_buff := Term_arg=>Buffer * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_aml_exec_create_field ( u16 opcode, ACPI_WALK_STATE *walk_state) { - ACPI_OPERAND_OBJECT *res_desc = NULL; - ACPI_OPERAND_OBJECT *cnt_desc = NULL; - ACPI_OPERAND_OBJECT *off_desc = NULL; - ACPI_OPERAND_OBJECT *src_desc = NULL; - ACPI_OPERAND_OBJECT *field_desc; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *res_desc = NULL; + ACPI_OBJECT_INTERNAL *cnt_desc = NULL; + ACPI_OBJECT_INTERNAL *off_desc = NULL; + ACPI_OBJECT_INTERNAL *src_desc = NULL; + ACPI_OBJECT_INTERNAL *field_desc; + ACPI_OBJECT_INTERNAL *obj_desc; OBJECT_TYPE_INTERNAL res_type; ACPI_STATUS status; u32 num_operands = 3; @@ -88,7 +88,7 @@ /* Resolve the operands */ - status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS); /* Get the operands */ @@ -101,9 +101,11 @@ status |= acpi_ds_obj_stack_pop_object (&off_desc, walk_state); status |= acpi_ds_obj_stack_pop_object (&src_desc, walk_state); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { /* Invalid parameters on object stack */ + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, opcode, + WALK_OPERANDS, 3); goto cleanup; } @@ -286,17 +288,16 @@ if (obj_desc) { /* * There is an existing object here; delete it and zero out the - * object field within the Node + * NTE */ acpi_cm_remove_reference (obj_desc); - acpi_ns_attach_object ((ACPI_NAMESPACE_NODE *) res_desc, NULL, - ACPI_TYPE_ANY); + acpi_ns_attach_object (res_desc, NULL, ACPI_TYPE_ANY); } /* Set the type to ANY (or the store below will fail) */ - ((ACPI_NAMESPACE_NODE *) res_desc)->type = ACPI_TYPE_ANY; + ((ACPI_NAMED_OBJECT*) res_desc)->type = ACPI_TYPE_ANY; break; @@ -309,7 +310,7 @@ /* Store constructed field descriptor in result location */ - status = acpi_aml_exec_store (field_desc, res_desc, walk_state); + status = acpi_aml_exec_store (field_desc, res_desc); /* * If the field descriptor was not physically stored (or if a failure @@ -357,41 +358,39 @@ acpi_aml_exec_create_alias ( ACPI_WALK_STATE *walk_state) { - ACPI_NAMESPACE_NODE *source_node; - ACPI_NAMESPACE_NODE *alias_node; + ACPI_NAMED_OBJECT *src_entry; + ACPI_NAMED_OBJECT *alias_entry; ACPI_STATUS status; /* Get the source/alias operands (both NTEs) */ - status = acpi_ds_obj_stack_pop_object ((ACPI_OPERAND_OBJECT **) &source_node, + status = acpi_ds_obj_stack_pop_object ((ACPI_OBJECT_INTERNAL **) &src_entry, walk_state); if (ACPI_FAILURE (status)) { return (status); } - /* - * Don't pop it, it gets removed in the calling routine - */ + /* Don't pop it, it gets popped later */ - alias_node = acpi_ds_obj_stack_get_value (0, walk_state); + alias_entry = acpi_ds_obj_stack_get_value (0, walk_state); /* Add an additional reference to the object */ - acpi_cm_add_reference (source_node->object); + acpi_cm_add_reference (src_entry->object); /* - * Attach the original source Node to the new Alias Node. + * Attach the original source NTE to the new Alias NTE. */ - status = acpi_ns_attach_object (alias_node, source_node->object, - source_node->type); + status = acpi_ns_attach_object (alias_entry, src_entry->object, + src_entry->type); /* * The new alias assumes the type of the source, but it points * to the same object. The reference count of the object has two * additional references to prevent deletion out from under either the - * source or the alias Node + * source or the alias NTE */ /* Since both operands are NTEs, we don't need to delete them */ @@ -417,7 +416,7 @@ ACPI_WALK_STATE *walk_state) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; BREAKPOINT3; @@ -439,7 +438,7 @@ goto cleanup; } - /* Attach object to the Node */ + /* Attach object to the NTE */ status = acpi_ns_attach_object (acpi_ds_obj_stack_get_value (0, walk_state), obj_desc, (u8) ACPI_TYPE_EVENT); @@ -474,8 +473,8 @@ ACPI_WALK_STATE *walk_state) { ACPI_STATUS status = AE_OK; - ACPI_OPERAND_OBJECT *sync_desc; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *sync_desc; + ACPI_OBJECT_INTERNAL *obj_desc; /* Get the operand */ @@ -547,27 +546,22 @@ ACPI_WALK_STATE *walk_state) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *obj_desc_region; - ACPI_NAMESPACE_NODE *node; + ACPI_OBJECT_INTERNAL *obj_desc_region; + ACPI_HANDLE *entry; if (region_space >= NUM_REGION_TYPES) { - /* TBD: [Future] In ACPI 2.0, valid region space - * includes types 0-6 (Adding CMOS and PCIBARTarget). - * Also, types 0x80-0xff are defined as "OEM Region - * Space handler" - * - * Should this return an error, or should we just keep - * going? How do we handle the OEM region handlers? - */ + /* TBD: [Errors] should this return an error, or should we just keep + * going? */ REPORT_WARNING ("Unable to decode the Region_space"); } - /* Get the Node from the object stack */ + /* Get the NTE from the object stack */ + + entry = acpi_ds_obj_stack_get_value (0, walk_state); - node = (ACPI_NAMESPACE_NODE *) acpi_ds_obj_stack_get_value (0, walk_state); /* Create the region descriptor */ @@ -589,9 +583,10 @@ /* Init the region from the operands */ - obj_desc_region->region.space_id = (u8) region_space; + obj_desc_region->region.space_id = (u16) region_space; obj_desc_region->region.address = 0; obj_desc_region->region.length = 0; + obj_desc_region->region.region_flags = 0; /* * Remember location in AML stream of address & length @@ -601,38 +596,19 @@ obj_desc_region->region.method->method.pcode_length = aml_length; - /* Install the new region object in the parent Node */ + /* Install the new region object in the parent NTE */ - obj_desc_region->region.node = node; + obj_desc_region->region.nte = (ACPI_NAMED_OBJECT*) entry; - status = acpi_ns_attach_object (node, obj_desc_region, + status = acpi_ns_attach_object (entry, obj_desc_region, (u8) ACPI_TYPE_REGION); - if (ACPI_FAILURE (status)) { goto cleanup; } - /* - * If we have a valid region, initialize it - * Namespace is NOT locked at this point. - */ - - status = acpi_ev_initialize_region (obj_desc_region, FALSE); - - if (ACPI_FAILURE (status)) { - /* - * If AE_NOT_EXIST is returned, it is not fatal - * because many regions get created before a handler - * is installed for said region. - */ - if (AE_NOT_EXIST == status) { - status = AE_OK; - } - } - cleanup: - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { /* Delete region object and method subobject */ if (obj_desc_region) { @@ -643,6 +619,22 @@ } } + + /* + * If we have a valid region, initialize it + */ + if (obj_desc_region) { + /* + * TBD: [Errors] Is there anything we can or could do when this + * fails? + * We need to do something useful with a failure. + */ + /* Namespace IS locked */ + + (void *) acpi_ev_initialize_region (obj_desc_region, TRUE); + + } + return (status); } @@ -653,7 +645,7 @@ * * PARAMETERS: Op - Op containing the Processor definition and * args - * Processor_nTE - Node for the containing Node + * Processor_nTE - NTE for the containing NTE * * RETURN: Status * @@ -663,12 +655,12 @@ ACPI_STATUS acpi_aml_exec_create_processor ( - ACPI_PARSE_OBJECT *op, + ACPI_GENERIC_OP *op, ACPI_HANDLE processor_nTE) { ACPI_STATUS status; - ACPI_PARSE_OBJECT *arg; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_GENERIC_OP *arg; + ACPI_OBJECT_INTERNAL *obj_desc; obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_PROCESSOR); @@ -677,7 +669,7 @@ return (status); } - /* Install the new processor object in the parent Node */ + /* Install the new processor object in the parent NTE */ status = acpi_ns_attach_object (processor_nTE, obj_desc, (u8) ACPI_TYPE_PROCESSOR); @@ -708,7 +700,7 @@ /* Second arg is the PBlock Address */ - obj_desc->processor.address = (ACPI_IO_ADDRESS) arg->value.integer; + obj_desc->processor.pblk_address = (ACPI_IO_ADDRESS) arg->value.integer; /* Move to next arg and check existence */ @@ -720,7 +712,7 @@ /* Third arg is the PBlock Length */ - obj_desc->processor.length = (u8) arg->value.integer; + obj_desc->processor.pblk_length = (u8) arg->value.integer; return (AE_OK); } @@ -732,7 +724,7 @@ * * PARAMETERS: Op - Op containing the Power_resource definition * and args - * Power_res_nTE - Node for the containing Node + * Power_res_nTE - NTE for the containing NTE * * RETURN: Status * @@ -742,12 +734,12 @@ ACPI_STATUS acpi_aml_exec_create_power_resource ( - ACPI_PARSE_OBJECT *op, + ACPI_GENERIC_OP *op, ACPI_HANDLE power_res_nTE) { ACPI_STATUS status; - ACPI_PARSE_OBJECT *arg; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_GENERIC_OP *arg; + ACPI_OBJECT_INTERNAL *obj_desc; obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_POWER); @@ -756,7 +748,7 @@ return (status); } - /* Install the new power resource object in the parent Node */ + /* Install the new power resource object in the parent NTE */ status = acpi_ns_attach_object (power_res_nTE, obj_desc, (u8) ACPI_TYPE_POWER); @@ -797,14 +789,11 @@ * * FUNCTION: Acpi_aml_exec_create_method * - * PARAMETERS: Aml_ptr - First byte of the method's AML - * Aml_length - AML byte count for this method - * Method_flags - AML method flag byte - * Method - Method Node + * PARAMETERS: Interpreter_mode - Current running mode (load1/Load2/Exec) * * RETURN: Status * - * DESCRIPTION: Create a new method object + * DESCRIPTION: Create a new mutex object * ****************************************************************************/ @@ -815,7 +804,7 @@ u32 method_flags, ACPI_HANDLE method) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status; @@ -841,8 +830,9 @@ METHOD_FLAGS_ARG_COUNT); /* - * Get the concurrency count. If required, a semaphore will be - * created for this method when it is parsed. + * Get the concurrency count + * If required, a semaphore will be created for this method when it is + * parsed. * * TBD: [Future] for APCI 2.0, there will be a Sync_level value, not * just a flag @@ -852,16 +842,27 @@ if (method_flags & METHOD_FLAGS_SERIALIZED) { obj_desc->method.concurrency = 1; } - else { obj_desc->method.concurrency = INFINITE_CONCURRENCY; } - /* Attach the new object to the method Node */ + /* Mark the Method as not parsed yet */ + + obj_desc->method.parser_op = NULL; + + /* + * Another +1 gets added when Acpi_psx_execute is called, + * no need for: Obj_desc->Method.Pcode++; + */ + + obj_desc->method.acpi_table = NULL; /* TBD: [Restructure] was (u8 *) Pcode_addr; */ + obj_desc->method.table_length = 0; /* TBD: [Restructure] needed? (u32) (Walk_state->aml_end - Pcode_addr); */ + + /* Attach the new object to the method NTE */ status = acpi_ns_attach_object (method, obj_desc, (u8) ACPI_TYPE_METHOD); if (ACPI_FAILURE (status)) { - acpi_cm_delete_object_desc (obj_desc); + acpi_cm_free (obj_desc); } return (status); diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amdump.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amdump.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amdump.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amdump.c Wed Dec 31 16:00:00 1969 @@ -1,41 +0,0 @@ -/****************************************************************************** - * - * Module Name: amdump - Interpreter debug output routines - * $Revision: 90 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 R. Byron Moore - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - - -#include "acpi.h" -#include "acinterp.h" -#include "amlcode.h" -#include "acnamesp.h" -#include "actables.h" - -#define _COMPONENT INTERPRETER - MODULE_NAME ("amdump") - - -/* - * The following routines are used for debug output only - */ - - diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amdyadic.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amdyadic.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amdyadic.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amdyadic.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: amdyadic - ACPI AML (p-code) execution for dyadic operators - * $Revision: 63 $ * *****************************************************************************/ @@ -25,16 +25,16 @@ #include "acpi.h" -#include "acparser.h" -#include "acnamesp.h" -#include "acinterp.h" -#include "acevents.h" +#include "parser.h" +#include "namesp.h" +#include "interp.h" +#include "events.h" #include "amlcode.h" -#include "acdispat.h" +#include "dispatch.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amdyadic") + MODULE_NAME ("amdyadic"); /***************************************************************************** @@ -57,15 +57,15 @@ u16 opcode, ACPI_WALK_STATE *walk_state) { - ACPI_OPERAND_OBJECT *obj_desc = NULL; - ACPI_OPERAND_OBJECT *val_desc = NULL; - ACPI_NAMESPACE_NODE *node; + ACPI_OBJECT_INTERNAL *obj_desc = NULL; + ACPI_OBJECT_INTERNAL *val_desc = NULL; + ACPI_NAMED_OBJECT *entry; ACPI_STATUS status = AE_OK; /* Resolve all operands */ - status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS); /* Get the operands */ status |= acpi_ds_obj_stack_pop_object (&val_desc, walk_state); @@ -73,6 +73,8 @@ if (ACPI_FAILURE (status)) { /* Invalid parameters on object stack */ + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, opcode, + WALK_OPERANDS, 2); goto cleanup; } @@ -86,15 +88,15 @@ case AML_NOTIFY_OP: - /* The Obj_desc is actually an Node */ + /* The Obj_desc is actually an NTE */ - node = (ACPI_NAMESPACE_NODE *) obj_desc; + entry = (ACPI_NAMED_OBJECT*) obj_desc; obj_desc = NULL; /* Object must be a device or thermal zone */ - if (node && val_desc) { - switch (node->type) + if (entry && val_desc) { + switch (entry->type) { case ACPI_TYPE_DEVICE: case ACPI_TYPE_THERMAL: @@ -106,7 +108,7 @@ /* Dispatch the notify to the appropriate handler */ - acpi_ev_notify_dispatch (node, val_desc->number.value); + acpi_ev_notify_dispatch (entry, val_desc->number.value); break; default: @@ -116,8 +118,6 @@ break; default: - - REPORT_ERROR ("Acpi_aml_exec_dyadic1: Unknown dyadic opcode"); status = AE_AML_BAD_OPCODE; } @@ -153,23 +153,23 @@ acpi_aml_exec_dyadic2_r ( u16 opcode, ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc) + ACPI_OBJECT_INTERNAL **return_desc) { - ACPI_OPERAND_OBJECT *obj_desc = NULL; - ACPI_OPERAND_OBJECT *obj_desc2 = NULL; - ACPI_OPERAND_OBJECT *res_desc = NULL; - ACPI_OPERAND_OBJECT *res_desc2 = NULL; - ACPI_OPERAND_OBJECT *ret_desc = NULL; - ACPI_OPERAND_OBJECT *ret_desc2 = NULL; + ACPI_OBJECT_INTERNAL *obj_desc = NULL; + ACPI_OBJECT_INTERNAL *obj_desc2 = NULL; + ACPI_OBJECT_INTERNAL *res_desc = NULL; + ACPI_OBJECT_INTERNAL *res_desc2 = NULL; + ACPI_OBJECT_INTERNAL *ret_desc = NULL; + ACPI_OBJECT_INTERNAL *ret_desc2 = NULL; ACPI_STATUS status = AE_OK; u32 remainder; - u32 num_operands = 3; - NATIVE_CHAR *new_buf; + s32 num_operands = 3; + char *new_buf; /* Resolve all operands */ - status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS); /* Get all operands */ if (AML_DIVIDE_OP == opcode) { @@ -180,7 +180,10 @@ status |= acpi_ds_obj_stack_pop_object (&res_desc, walk_state); status |= acpi_ds_obj_stack_pop_object (&obj_desc2, walk_state); status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, opcode, + &(walk_state->operands [walk_state->num_operands -1]), + num_operands); goto cleanup; } @@ -365,9 +368,9 @@ goto cleanup; } - STRCPY (new_buf, obj_desc->string.pointer); + STRCPY (new_buf, (char *) obj_desc->string.pointer); STRCPY (new_buf + obj_desc->string.length, - obj_desc2->string.pointer); + (char *) obj_desc2->string.pointer); /* Point the return object to the new string */ @@ -388,8 +391,16 @@ new_buf = acpi_cm_allocate (obj_desc->buffer.length + obj_desc2->buffer.length); if (!new_buf) { - REPORT_ERROR - ("Aml_exec_dyadic2_r/Concat_op: Buffer allocation failure"); + /* Only bail out if the buffer is small */ + + /* TBD: [Investigate] what is the point of this code? */ + + if (obj_desc->buffer.length + obj_desc2->buffer.length < 1024) { + REPORT_ERROR + ("Aml_exec_dyadic2_r/Concat_op: Buffer allocation failure"); + return (AE_NO_MEMORY); + } + status = AE_NO_MEMORY; goto cleanup; } @@ -412,7 +423,6 @@ default: - REPORT_ERROR ("Acpi_aml_exec_dyadic2_r: Unknown dyadic opcode"); status = AE_AML_BAD_OPCODE; goto cleanup; } @@ -424,13 +434,12 @@ * descriptor (Res_desc). */ - status = acpi_aml_exec_store (ret_desc, res_desc, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_exec_store (ret_desc, res_desc)) != AE_OK) { goto cleanup; } if (AML_DIVIDE_OP == opcode) { - status = acpi_aml_exec_store (ret_desc2, res_desc2, walk_state); + status = acpi_aml_exec_store (ret_desc2, res_desc2); /* * Since the remainder is not returned, remove a reference to @@ -490,24 +499,26 @@ acpi_aml_exec_dyadic2_s ( u16 opcode, ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc) + ACPI_OBJECT_INTERNAL **return_desc) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *time_desc; - ACPI_OPERAND_OBJECT *ret_desc = NULL; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *time_desc; + ACPI_OBJECT_INTERNAL *ret_desc = NULL; ACPI_STATUS status; /* Resolve all operands */ - status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS); /* Get all operands */ status |= acpi_ds_obj_stack_pop_object (&time_desc, walk_state); status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { /* Invalid parameters on object stack */ + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, opcode, + WALK_OPERANDS, 2); goto cleanup; } @@ -548,7 +559,6 @@ default: - REPORT_ERROR ("Acpi_aml_exec_dyadic2_s: Unknown dyadic synchronization opcode"); status = AE_AML_BAD_OPCODE; goto cleanup; } @@ -609,25 +619,27 @@ acpi_aml_exec_dyadic2 ( u16 opcode, ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc) + ACPI_OBJECT_INTERNAL **return_desc) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *obj_desc2; - ACPI_OPERAND_OBJECT *ret_desc = NULL; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc2; + ACPI_OBJECT_INTERNAL *ret_desc = NULL; ACPI_STATUS status; u8 lboolean; /* Resolve all operands */ - status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS); /* Get all operands */ status |= acpi_ds_obj_stack_pop_object (&obj_desc2, walk_state); status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { /* Invalid parameters on object stack */ + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, opcode, + WALK_OPERANDS, 2); goto cleanup; } @@ -695,7 +707,6 @@ default: - REPORT_ERROR ("Acpi_aml_exec_dyadic2: Unknown dyadic opcode"); status = AE_AML_BAD_OPCODE; goto cleanup; break; diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amfield.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amfield.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amfield.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amfield.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: amfield - ACPI AML (p-code) execution - field manipulation - * $Revision: 70 $ * *****************************************************************************/ @@ -25,16 +24,16 @@ #include "acpi.h" -#include "acdispat.h" -#include "acinterp.h" +#include "dispatch.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "achware.h" -#include "acevents.h" +#include "namesp.h" +#include "hardware.h" +#include "events.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amfield") + MODULE_NAME ("amfield"); /******************************************************************************* @@ -68,12 +67,12 @@ ACPI_STATUS acpi_aml_setup_field ( - ACPI_OPERAND_OBJECT *obj_desc, - ACPI_OPERAND_OBJECT *rgn_desc, - u32 field_bit_width) + ACPI_OBJECT_INTERNAL *obj_desc, + ACPI_OBJECT_INTERNAL *rgn_desc, + s32 field_bit_width) { ACPI_STATUS status = AE_OK; - u32 field_byte_width; + s32 field_byte_width; /* Parameter validation */ @@ -88,8 +87,6 @@ /* - * TBD: [Future] Acpi 2.0 supports Qword fields - * * Init and validate Field width * Possible values are 1, 2, 4 */ @@ -108,7 +105,7 @@ * If the address and length have not been previously evaluated, * evaluate them and save the results. */ - if (!(rgn_desc->region.flags & AOPOBJ_DATA_VALID)) { + if (!(rgn_desc->region.region_flags & REGION_AGRUMENT_DATA_VALID)) { status = acpi_ds_get_region_arguments (rgn_desc); if (ACPI_FAILURE (status)) { @@ -116,6 +113,12 @@ } } + + /* + * If (offset rounded up to next multiple of field width) + * exceeds region length, indicate an error. + */ + if (rgn_desc->region.length < (obj_desc->field.offset & ~((u32) field_byte_width - 1)) + field_byte_width) @@ -149,12 +152,12 @@ ACPI_STATUS acpi_aml_access_named_field ( - u32 mode, + s32 mode, ACPI_HANDLE named_field, void *buffer, u32 buffer_length) { - ACPI_OPERAND_OBJECT *obj_desc = NULL; + ACPI_OBJECT_INTERNAL *obj_desc = NULL; ACPI_STATUS status = AE_OK; u8 locked = FALSE; u32 bit_granularity = 0; @@ -164,11 +167,6 @@ u32 byte_field_length; - /* Basic data checking */ - if ((!named_field) || (ACPI_READ == mode && !buffer)) { - return (AE_AML_INTERNAL); - } - /* Get the attached field object */ obj_desc = acpi_ns_get_attached_object (named_field); @@ -258,6 +256,72 @@ acpi_aml_release_global_lock (locked); + return (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_aml_set_named_field_value + * + * PARAMETERS: Named_field - Handle for field to be set + * Buffer - Bytes to be stored + * Buffer_length - Number of bytes to be stored + * + * RETURN: Status + * + * DESCRIPTION: Store the given value into the field + * + ******************************************************************************/ + +ACPI_STATUS +acpi_aml_set_named_field_value ( + ACPI_HANDLE named_field, + void *buffer, + u32 buffer_length) +{ + ACPI_STATUS status; + + + if (!named_field) { + return (AE_AML_INTERNAL); + } + + status = acpi_aml_access_named_field (ACPI_WRITE, named_field, buffer, + buffer_length); + return (status); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_aml_get_named_field_value + * + * PARAMETERS: Named_field - Handle for field to be read + * *Buffer - Where to store value read from field + * Buffer_length - Max length to read + * + * RETURN: Status + * + * DESCRIPTION: Retrieve the value of the given field + * + ******************************************************************************/ + +ACPI_STATUS +acpi_aml_get_named_field_value ( + ACPI_HANDLE named_field, + void *buffer, + u32 buffer_length) +{ + ACPI_STATUS status; + + + if ((!named_field) || (!buffer)) { + return (AE_AML_INTERNAL); + } + + status = acpi_aml_access_named_field (ACPI_READ, named_field, buffer, + buffer_length); return (status); } diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amfldio.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amfldio.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amfldio.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amfldio.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: amfldio - Aml Field I/O - * $Revision: 26 $ * *****************************************************************************/ @@ -25,15 +24,15 @@ #include "acpi.h" -#include "acinterp.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "achware.h" -#include "acevents.h" +#include "namesp.h" +#include "hardware.h" +#include "events.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amfldio") + MODULE_NAME ("amfldio"); /******************************************************************************* @@ -52,16 +51,16 @@ ACPI_STATUS acpi_aml_read_field_data ( - ACPI_OPERAND_OBJECT *obj_desc, + ACPI_OBJECT_INTERNAL *obj_desc, u32 field_byte_offset, u32 field_bit_width, u32 *value) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *rgn_desc = NULL; + ACPI_OBJECT_INTERNAL *rgn_desc = NULL; u32 address; u32 local_value = 0; - u32 field_byte_width; + s32 field_byte_width; /* Obj_desc is validated by callers */ @@ -73,7 +72,7 @@ field_byte_width = DIV_8 (field_bit_width); status = acpi_aml_setup_field (obj_desc, rgn_desc, field_bit_width); - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } @@ -85,17 +84,17 @@ /* - * Set offset to next multiple of field width, - * add region base address and offset within the field + * Round offset down to next multiple of + * field width, add region base address and offset within the field */ + address = rgn_desc->region.address + - (obj_desc->field.offset * field_byte_width) + + (obj_desc->field.offset & ~((u32) field_byte_width - 1)) + field_byte_offset; - /* Invoke the appropriate Address_space/Op_region handler */ status = acpi_ev_address_space_dispatch (rgn_desc, ADDRESS_SPACE_READ, @@ -123,7 +122,7 @@ ACPI_STATUS acpi_aml_read_field ( - ACPI_OPERAND_OBJECT *obj_desc, + ACPI_OBJECT_INTERNAL *obj_desc, void *buffer, u32 buffer_length, u32 byte_length, @@ -237,7 +236,6 @@ * field datum */ - if (obj_desc->field.bit_offset != 0) { merged_datum = (previous_raw_datum >> obj_desc->field.bit_offset) | @@ -249,27 +247,10 @@ } /* - * Prepare the merged datum for storing into the caller's - * buffer. It is possible to have a 32-bit buffer - * (Byte_granularity == 4), but a Obj_desc->Field.Length - * of 8 or 16, meaning that the upper bytes of merged data - * are undesired. This section fixes that. - */ - switch (obj_desc->field.length) - { - case 8: - merged_datum &= 0x000000FF; - break; - - case 16: - merged_datum &= 0x0000FFFF; - break; - } - - /* * Now store the datum in the caller's buffer, according to * the data type */ + switch (byte_granularity) { case 1: @@ -285,6 +266,7 @@ break; } + /* * Save the most recent datum since it contains bits of * the *next* field datum @@ -320,15 +302,15 @@ ACPI_STATUS acpi_aml_write_field_data ( - ACPI_OPERAND_OBJECT *obj_desc, + ACPI_OBJECT_INTERNAL *obj_desc, u32 field_byte_offset, u32 field_bit_width, u32 value) { ACPI_STATUS status = AE_OK; - ACPI_OPERAND_OBJECT *rgn_desc = NULL; + ACPI_OBJECT_INTERNAL *rgn_desc = NULL; u32 address; - u32 field_byte_width; + s32 field_byte_width; /* Obj_desc is validated by callers */ @@ -339,21 +321,21 @@ field_byte_width = DIV_8 (field_bit_width); status = acpi_aml_setup_field (obj_desc, rgn_desc, field_bit_width); - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } /* - * Set offset to next multiple of field width, - * add region base address and offset within the field + * Round offset down to next multiple of + * field width, add region base address and offset within the field */ + address = rgn_desc->region.address + - (obj_desc->field.offset * field_byte_width) + + (obj_desc->field.offset & ~((u32) field_byte_width - 1)) + field_byte_offset; - /* Invoke the appropriate Address_space/Op_region handler */ status = acpi_ev_address_space_dispatch (rgn_desc, ADDRESS_SPACE_WRITE, @@ -381,7 +363,7 @@ ACPI_STATUS acpi_aml_write_field_data_with_update_rule ( - ACPI_OPERAND_OBJECT *obj_desc, + ACPI_OBJECT_INTERNAL *obj_desc, u32 mask, u32 field_value, u32 this_field_byte_offset, @@ -444,7 +426,7 @@ bit_granularity, merged_value); } - return (status); + return status; } @@ -464,7 +446,7 @@ ACPI_STATUS acpi_aml_write_field ( - ACPI_OPERAND_OBJECT *obj_desc, + ACPI_OBJECT_INTERNAL *obj_desc, void *buffer, u32 buffer_length, u32 byte_length, @@ -656,8 +638,7 @@ field_value = (previous_raw_datum >> (bit_granularity - obj_desc->field.bit_offset)) & mask; - status = acpi_aml_write_field_data_with_update_rule (obj_desc, mask, field_value, - this_field_byte_offset + byte_granularity, + status = acpi_aml_write_field_data_with_update_rule (obj_desc, mask, field_value, this_field_byte_offset + 1, bit_granularity); if (ACPI_FAILURE (status)) { goto cleanup; diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/ammisc.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/ammisc.c --- linux-2.4.0-test9/drivers/acpi/interpreter/ammisc.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/ammisc.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: ammisc - ACPI AML (p-code) execution - specific opcodes - * $Revision: 67 $ * *****************************************************************************/ @@ -26,14 +25,14 @@ #include "acpi.h" -#include "acparser.h" -#include "acinterp.h" +#include "parser.h" +#include "interp.h" #include "amlcode.h" -#include "acdispat.h" +#include "dispatch.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("ammisc") + MODULE_NAME ("ammisc"); /******************************************************************************* @@ -59,23 +58,25 @@ acpi_aml_exec_fatal ( ACPI_WALK_STATE *walk_state) { - ACPI_OPERAND_OBJECT *type_desc; - ACPI_OPERAND_OBJECT *code_desc; - ACPI_OPERAND_OBJECT *arg_desc; + ACPI_OBJECT_INTERNAL *type_desc; + ACPI_OBJECT_INTERNAL *code_desc; + ACPI_OBJECT_INTERNAL *arg_desc; ACPI_STATUS status; /* Resolve operands */ - status = acpi_aml_resolve_operands (AML_FATAL_OP, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (AML_FATAL_OP, WALK_OPERANDS); /* Get operands */ status |= acpi_ds_obj_stack_pop_object (&arg_desc, walk_state); status |= acpi_ds_obj_stack_pop_object (&code_desc, walk_state); status |= acpi_ds_obj_stack_pop_object (&type_desc, walk_state); - if (ACPI_FAILURE (status)) { - /* Invalid parameters on object stack */ + if (status != AE_OK) { + /* invalid parameters on object stack */ + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, + (u16) AML_FATAL_OP, WALK_OPERANDS, 3); goto cleanup; } @@ -129,28 +130,30 @@ ACPI_STATUS acpi_aml_exec_index ( ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc) + ACPI_OBJECT_INTERNAL **return_desc) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *idx_desc; - ACPI_OPERAND_OBJECT *res_desc; - ACPI_OPERAND_OBJECT *ret_desc = NULL; - ACPI_OPERAND_OBJECT *tmp_desc; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *idx_desc; + ACPI_OBJECT_INTERNAL *res_desc; + ACPI_OBJECT_INTERNAL *ret_desc = NULL; + ACPI_OBJECT_INTERNAL *tmp_desc; ACPI_STATUS status; /* Resolve operands */ /* First operand can be either a package or a buffer */ - status = acpi_aml_resolve_operands (AML_INDEX_OP, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (AML_INDEX_OP, WALK_OPERANDS); /* Get all operands */ status |= acpi_ds_obj_stack_pop_object (&res_desc, walk_state); status |= acpi_ds_obj_stack_pop_object (&idx_desc, walk_state); status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { /* Invalid parameters on object stack */ + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, + (u16) AML_INDEX_OP, WALK_OPERANDS, 3); goto cleanup; } @@ -199,7 +202,7 @@ ret_desc->reference.target_type = tmp_desc->common.type; ret_desc->reference.object = tmp_desc; - status = acpi_aml_exec_store (ret_desc, res_desc, walk_state); + status = acpi_aml_exec_store (ret_desc, res_desc); ret_desc->reference.object = NULL; } @@ -225,7 +228,7 @@ ret_desc->reference.object = obj_desc; ret_desc->reference.offset = idx_desc->number.value; - status = acpi_aml_exec_store (ret_desc, res_desc, walk_state); + status = acpi_aml_exec_store (ret_desc, res_desc); } @@ -279,15 +282,15 @@ ACPI_STATUS acpi_aml_exec_match ( ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc) + ACPI_OBJECT_INTERNAL **return_desc) { - ACPI_OPERAND_OBJECT *pkg_desc; - ACPI_OPERAND_OBJECT *op1_desc; - ACPI_OPERAND_OBJECT *V1_desc; - ACPI_OPERAND_OBJECT *op2_desc; - ACPI_OPERAND_OBJECT *V2_desc; - ACPI_OPERAND_OBJECT *start_desc; - ACPI_OPERAND_OBJECT *ret_desc = NULL; + ACPI_OBJECT_INTERNAL *pkg_desc; + ACPI_OBJECT_INTERNAL *op1_desc; + ACPI_OBJECT_INTERNAL *V1_desc; + ACPI_OBJECT_INTERNAL *op2_desc; + ACPI_OBJECT_INTERNAL *V2_desc; + ACPI_OBJECT_INTERNAL *start_desc; + ACPI_OBJECT_INTERNAL *ret_desc = NULL; ACPI_STATUS status; u32 index; u32 match_value = (u32) -1; @@ -295,7 +298,7 @@ /* Resolve all operands */ - status = acpi_aml_resolve_operands (AML_MATCH_OP, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (AML_MATCH_OP, WALK_OPERANDS); /* Get all operands */ status |= acpi_ds_obj_stack_pop_object (&start_desc, walk_state); @@ -305,9 +308,11 @@ status |= acpi_ds_obj_stack_pop_object (&op1_desc, walk_state); status |= acpi_ds_obj_stack_pop_object (&pkg_desc, walk_state); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { /* Invalid parameters on object stack */ + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, + (u16) AML_MATCH_OP, WALK_OPERANDS, 6); goto cleanup; } diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/ammonad.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/ammonad.c --- linux-2.4.0-test9/drivers/acpi/interpreter/ammonad.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/ammonad.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: ammonad - ACPI AML (p-code) execution for monadic operators - * $Revision: 79 $ * *****************************************************************************/ @@ -26,15 +25,15 @@ #include "acpi.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" +#include "parser.h" +#include "dispatch.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" +#include "namesp.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("ammonad") + MODULE_NAME ("ammonad"); /******************************************************************************* @@ -53,9 +52,8 @@ ACPI_STATUS acpi_aml_get_object_reference ( - ACPI_OPERAND_OBJECT *obj_desc, - ACPI_OPERAND_OBJECT **ret_desc, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL *obj_desc, + ACPI_OBJECT_INTERNAL **ret_desc) { ACPI_STATUS status = AE_OK; @@ -76,14 +74,14 @@ case AML_LOCAL_OP: *ret_desc = (void *) acpi_ds_method_data_get_nte (MTH_TYPE_LOCAL, - (obj_desc->reference.offset), walk_state); + (obj_desc->reference.offset)); break; case AML_ARG_OP: *ret_desc = (void *) acpi_ds_method_data_get_nte (MTH_TYPE_ARG, - (obj_desc->reference.offset), walk_state); + (obj_desc->reference.offset)); break; @@ -97,7 +95,7 @@ } else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { - /* Must be a named object; Just return the Node */ + /* Must be a named object; Just return the NTE */ *ret_desc = obj_desc; } @@ -132,17 +130,19 @@ u16 opcode, ACPI_WALK_STATE *walk_state) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status; /* Resolve all operands */ - status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS); /* Get all operands */ status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, + opcode, WALK_OPERANDS, 1); goto cleanup; } @@ -196,7 +196,6 @@ default: - REPORT_ERROR ("Acpi_aml_exec_monadic1: Unknown monadic opcode"); status = AE_AML_BAD_OPCODE; break; @@ -230,28 +229,30 @@ acpi_aml_exec_monadic2_r ( u16 opcode, ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc) + ACPI_OBJECT_INTERNAL **return_desc) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *res_desc; - ACPI_OPERAND_OBJECT *ret_desc = NULL; - ACPI_OPERAND_OBJECT *ret_desc2 = NULL; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *res_desc; + ACPI_OBJECT_INTERNAL *ret_desc = NULL; + ACPI_OBJECT_INTERNAL *ret_desc2 = NULL; u32 res_val; ACPI_STATUS status; - u32 d0; - u32 d1; - u32 d2; - u32 d3; + s32 d0; + s32 d1; + s32 d2; + s32 d3; /* Resolve all operands */ - status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state); + status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS); /* Get all operands */ status |= acpi_ds_obj_stack_pop_object (&res_desc, walk_state); status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, + opcode, WALK_OPERANDS, 2); goto cleanup; } @@ -263,8 +264,8 @@ case AML_BIT_NOT_OP: case AML_FIND_SET_LEFT_BIT_OP: case AML_FIND_SET_RIGHT_BIT_OP: - case AML_FROM_BCD_OP: - case AML_TO_BCD_OP: + case AML_FROM_BCDOP: + case AML_TO_BCDOP: case AML_COND_REF_OF_OP: ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_NUMBER); @@ -292,13 +293,7 @@ case AML_FIND_SET_LEFT_BIT_OP: ret_desc->number.value = obj_desc->number.value; - - /* - * Acpi x1.94 spec, Chapter 16 describes Integer as a 32-bit - * little endian unsigned value, so this boundry condition - * is valid. - */ - for (res_val = 0; ret_desc->number.value && res_val < 32; ++res_val) { + for (res_val = 0; ret_desc->number.value && res_val < 33; ++res_val) { ret_desc->number.value >>= 1; } @@ -311,29 +306,22 @@ case AML_FIND_SET_RIGHT_BIT_OP: ret_desc->number.value = obj_desc->number.value; - - /* - * Acpi x1.94 spec, Chapter 16 describes Integer as a 32-bit - * little endian unsigned value, so this boundry condition - * is valid. - */ - for (res_val = 0; ret_desc->number.value && res_val < 32; ++res_val) { + for (res_val = 0; ret_desc->number.value && res_val < 33; ++res_val) { ret_desc->number.value <<= 1; } - /* Since returns must be 1-based, subtract from 33 */ ret_desc->number.value = res_val == 0 ? 0 : 33 - res_val; break; /* Def_from_bDC := From_bCDOp BCDValue Result */ - case AML_FROM_BCD_OP: + case AML_FROM_BCDOP: - d0 = (u32) (obj_desc->number.value & 15); - d1 = (u32) (obj_desc->number.value >> 4 & 15); - d2 = (u32) (obj_desc->number.value >> 8 & 15); - d3 = (u32) (obj_desc->number.value >> 12 & 15); + d0 = (s32) (obj_desc->number.value & 15); + d1 = (s32) (obj_desc->number.value >> 4 & 15); + d2 = (s32) (obj_desc->number.value >> 8 & 15); + d3 = (s32) (obj_desc->number.value >> 12 & 15); if (d0 > 9 || d1 > 9 || d2 > 9 || d3 > 9) { status = AE_AML_NUMERIC_OVERFLOW; @@ -346,7 +334,7 @@ /* Def_to_bDC := To_bCDOp Operand Result */ - case AML_TO_BCD_OP: + case AML_TO_BCDOP: if (obj_desc->number.value > 9999) { @@ -373,7 +361,7 @@ * (There are really two return values) */ - if ((ACPI_NAMESPACE_NODE *) obj_desc == acpi_gbl_root_node) { + if ((ACPI_NAMED_OBJECT*) obj_desc == acpi_gbl_root_object) { /* * This means that the object does not exist in the namespace, * return FALSE @@ -392,12 +380,12 @@ /* Get the object reference and store it */ - status = acpi_aml_get_object_reference (obj_desc, &ret_desc2, walk_state); + status = acpi_aml_get_object_reference (obj_desc, &ret_desc2); if (ACPI_FAILURE (status)) { goto cleanup; } - status = acpi_aml_exec_store (ret_desc2, res_desc, walk_state); + status = acpi_aml_exec_store (ret_desc2, res_desc); /* The object exists in the namespace, return TRUE */ @@ -418,7 +406,7 @@ * since the object itself may have been stored. */ - status = acpi_aml_exec_store (obj_desc, res_desc, walk_state); + status = acpi_aml_exec_store (obj_desc, res_desc); if (ACPI_FAILURE (status)) { /* On failure, just delete the Obj_desc */ @@ -466,13 +454,12 @@ default: - REPORT_ERROR ("Acpi_aml_exec_monadic2_r: Unknown monadic opcode"); status = AE_AML_BAD_OPCODE; goto cleanup; } - status = acpi_aml_exec_store (ret_desc, res_desc, walk_state); + status = acpi_aml_exec_store (ret_desc, res_desc); cleanup: @@ -515,32 +502,25 @@ acpi_aml_exec_monadic2 ( u16 opcode, ACPI_WALK_STATE *walk_state, - ACPI_OPERAND_OBJECT **return_desc) + ACPI_OBJECT_INTERNAL **return_desc) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *tmp_desc; - ACPI_OPERAND_OBJECT *ret_desc = NULL; - ACPI_STATUS resolve_status; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *tmp_desc; + ACPI_OBJECT_INTERNAL *ret_desc = NULL; ACPI_STATUS status; u32 type; u32 value; - /* Attempt to resolve the operands */ - - resolve_status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state); - /* Always get all operands */ - - status = acpi_ds_obj_stack_pop_object (&obj_desc, walk_state); - - - /* Now we can check the status codes */ + /* Resolve all operands */ - if (ACPI_FAILURE (resolve_status)) { - goto cleanup; - } + status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS); + /* Get all operands */ - if (ACPI_FAILURE (status)) { + status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state); + if (status != AE_OK) { + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, + opcode, WALK_OPERANDS, 1); goto cleanup; } @@ -573,7 +553,7 @@ /* * Since we are expecting an Reference on the top of the stack, it - * can be either an Node or an internal object. + * can be either an NTE or an internal object. * * TBD: [Future] This may be the prototype code for all cases where * an Reference is expected!! 10/99 @@ -606,8 +586,10 @@ * (This deletes the original Ret_desc) */ - status = acpi_aml_resolve_operands (AML_LNOT_OP, &ret_desc, walk_state); - if (ACPI_FAILURE (status)) { + status = acpi_aml_resolve_operands (AML_LNOT_OP, &ret_desc); + if (status != AE_OK) { + acpi_aml_append_operand_diag (_THIS_MODULE, __LINE__, + opcode, WALK_OPERANDS, 1); goto cleanup; } @@ -622,7 +604,7 @@ /* Store the result back in the original descriptor */ - status = acpi_aml_exec_store (ret_desc, obj_desc, walk_state); + status = acpi_aml_exec_store (ret_desc, obj_desc); /* Objdesc was just deleted (because it is an Reference) */ @@ -680,20 +662,19 @@ case AML_LOCAL_OP: type = acpi_ds_method_data_get_type (MTH_TYPE_LOCAL, - (obj_desc->reference.offset), walk_state); + (obj_desc->reference.offset)); break; case AML_ARG_OP: type = acpi_ds_method_data_get_type (MTH_TYPE_ARG, - (obj_desc->reference.offset), walk_state); + (obj_desc->reference.offset)); break; default: - REPORT_ERROR ("Acpi_aml_exec_monadic2/Type_op:internal error: Unknown Reference subtype"); status = AE_AML_INTERNAL; goto cleanup; } @@ -701,7 +682,8 @@ else { /* - * It's not a Reference, so it must be a direct name pointer. + * Since we passed Acpi_aml_resolve_operands("l") and it's not a + * Reference, it must be a direct name pointer. */ type = acpi_ns_get_type ((ACPI_HANDLE) obj_desc); } @@ -782,7 +764,7 @@ case AML_REF_OF_OP: - status = acpi_aml_get_object_reference (obj_desc, &ret_desc, walk_state); + status = acpi_aml_get_object_reference (obj_desc, &ret_desc); if (ACPI_FAILURE (status)) { goto cleanup; } @@ -807,7 +789,7 @@ case AML_LOCAL_OP: acpi_ds_method_data_get_value (MTH_TYPE_LOCAL, - (obj_desc->reference.offset), walk_state, &tmp_desc); + (obj_desc->reference.offset), &tmp_desc); /* * Delete our reference to the input object and @@ -821,7 +803,7 @@ case AML_ARG_OP: acpi_ds_method_data_get_value (MTH_TYPE_ARG, - (obj_desc->reference.offset), walk_state, &tmp_desc); + (obj_desc->reference.offset), &tmp_desc); /* * Delete our reference to the input object and @@ -842,9 +824,9 @@ /* Obj_desc may have changed from the code above */ if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { - /* Get the actual object from the Node (This is the dereference) */ + /* Get the actual object from the NTE (This is the dereference) */ - ret_desc = ((ACPI_NAMESPACE_NODE *) obj_desc)->object; + ret_desc = ((ACPI_NAMED_OBJECT*) obj_desc)->object; /* Returning a pointer to the object, add another reference! */ @@ -946,7 +928,6 @@ default: - REPORT_ERROR ("Acpi_aml_exec_monadic2: Internal error, unknown monadic opcode"); status = AE_AML_BAD_OPCODE; goto cleanup; } diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amnames.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amnames.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amnames.c Wed Oct 4 16:53:11 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amnames.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: amnames - interpreter/scanner name load/execute - * $Revision: 70 $ * *****************************************************************************/ @@ -26,12 +25,12 @@ #include "acpi.h" -#include "acinterp.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" +#include "namesp.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amnames") + MODULE_NAME ("amnames"); /* AML Package Length encodings */ @@ -58,13 +57,13 @@ * ******************************************************************************/ -NATIVE_CHAR * +char * acpi_aml_allocate_name_string ( u32 prefix_count, u32 num_name_segs) { - NATIVE_CHAR *temp_ptr; - NATIVE_CHAR *name_string; + char *temp_ptr; + char *name_string; u32 size_needed; @@ -88,7 +87,7 @@ * This buffer must be deleted by the caller! */ - name_string = acpi_cm_allocate (size_needed); + name_string = acpi_cm_allocate ((ACPI_SIZE) size_needed); if (!name_string) { REPORT_ERROR ("Aml_allocate_name_string: name allocation failure"); return (NULL); @@ -134,6 +133,52 @@ return (name_string); } + +/******************************************************************************* + * + * FUNCTION: Acpi_aml_decode_package_length + * + * PARAMETERS: Last_pkg_len - latest value decoded by Do_pkg_length() for + * most recently examined package or field + * + * RETURN: Number of bytes contained in package length encoding + * + * DESCRIPTION: Decodes the Package Length. Upper 2 bits are are used to + * tell if type 1, 2, 3, or 4. + * 0x3F = Max 1 byte encoding, + * 0xFFF = Max 2 byte encoding, + * 0xFFFFF = Max 3 Byte encoding, + * 0xFFFFFFFFF = Max 4 Byte encoding. + * + ******************************************************************************/ + +u32 +acpi_aml_decode_package_length ( + u32 last_pkg_len) +{ + u32 num_bytes = 0; + + + if (last_pkg_len < ACPI_AML_PACKAGE_TYPE1) { + num_bytes = 1; + } + + else if (last_pkg_len < ACPI_AML_PACKAGE_TYPE2) { + num_bytes = 2; + } + + else if (last_pkg_len < ACPI_AML_PACKAGE_TYPE3) { + num_bytes = 3; + } + + else if (last_pkg_len < ACPI_AML_PACKAGE_TYPE4) { + num_bytes = 4; + } + + return (num_bytes); +} + + /******************************************************************************* * * FUNCTION: Acpi_aml_exec_name_segment @@ -149,12 +194,12 @@ ACPI_STATUS acpi_aml_exec_name_segment ( u8 **in_aml_address, - NATIVE_CHAR *name_string) + char *name_string) { u8 *aml_address = *in_aml_address; ACPI_STATUS status = AE_OK; - u32 index; - NATIVE_CHAR char_buf[5]; + s32 index; + char char_buf[5]; /* @@ -226,16 +271,15 @@ acpi_aml_get_name_string ( OBJECT_TYPE_INTERNAL data_type, u8 *in_aml_address, - NATIVE_CHAR **out_name_string, + char **out_name_string, u32 *out_name_length) { ACPI_STATUS status = AE_OK; u8 *aml_address = in_aml_address; - NATIVE_CHAR *name_string = NULL; - u32 num_segments; - u32 prefix_count = 0; + char *name_string = NULL; + s32 num_segments; + s32 prefix_count = 0; u8 prefix = 0; - u8 has_prefix = FALSE; if (INTERNAL_TYPE_DEF_FIELD == data_type || @@ -269,8 +313,7 @@ * Remember that we have a Root_prefix -- * see comment in Acpi_aml_allocate_name_string() */ - prefix_count = (u32) -1; - has_prefix = TRUE; + prefix_count = -1; break; @@ -284,7 +327,7 @@ ++prefix_count; } while (*aml_address == AML_PARENT_PREFIX); - has_prefix = TRUE; + break; @@ -308,8 +351,9 @@ break; } - /* Indicate that we processed a prefix */ - has_prefix = TRUE; + /* Ensure Prefix_count != 0 to remember processing a prefix */ + + prefix_count += 2; status = acpi_aml_exec_name_segment (&aml_address, name_string); if (ACPI_SUCCESS (status)) { @@ -331,8 +375,9 @@ break; } - /* Indicate that we processed a prefix */ - has_prefix = TRUE; + /* Ensure Prefix_count != 0 to remember processing a prefix */ + + prefix_count += 2; while (num_segments && (status = acpi_aml_exec_name_segment (&aml_address, name_string)) == AE_OK) @@ -377,7 +422,7 @@ } - if (AE_CTRL_PENDING == status && has_prefix) { + if (AE_CTRL_PENDING == status && prefix_count != 0) { /* Ran out of segments after processing a prefix */ REPORT_ERROR ("Ran out of segments after processing a prefix"); diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amprep.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amprep.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amprep.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amprep.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: amprep - ACPI AML (p-code) execution - field prep utilities - * $Revision: 67 $ * *****************************************************************************/ @@ -26,14 +25,14 @@ #include "acpi.h" -#include "acinterp.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "acparser.h" +#include "namesp.h" +#include "parser.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amprep") + MODULE_NAME ("amprep"); /******************************************************************************* @@ -56,25 +55,25 @@ switch (access) { case ACCESS_ANY_ACC: - return (8); + return 8; break; case ACCESS_BYTE_ACC: - return (8); + return 8; break; case ACCESS_WORD_ACC: - return (16); + return 16; break; case ACCESS_DWORD_ACC: - return (32); + return 32; break; default: /* Invalid field access type */ - return (0); + return 0; } } @@ -99,7 +98,7 @@ ACPI_STATUS acpi_aml_prep_common_field_object ( - ACPI_OPERAND_OBJECT *obj_desc, + ACPI_OBJECT_INTERNAL *obj_desc, u8 field_flags, u8 field_attribute, u32 field_position, @@ -151,7 +150,7 @@ * * FUNCTION: Acpi_aml_prep_def_field_value * - * PARAMETERS: Node - Owning Node + * PARAMETERS: This_entry - Owning NTE * Region - Region in which field is being defined * Field_flags - Access, Lock_rule, or Update_rule. * The format of a Field_flag is described @@ -161,22 +160,22 @@ * * RETURN: Status * - * DESCRIPTION: Construct an ACPI_OPERAND_OBJECT of type Def_field and - * connect it to the parent Node. + * DESCRIPTION: Construct an ACPI_OBJECT_INTERNAL of type Def_field and + * connect it to the parent NTE. * ******************************************************************************/ ACPI_STATUS acpi_aml_prep_def_field_value ( - ACPI_NAMESPACE_NODE *node, + ACPI_NAMED_OBJECT *this_entry, ACPI_HANDLE region, u8 field_flags, u8 field_attribute, u32 field_position, u32 field_length) { - ACPI_OPERAND_OBJECT *obj_desc; - u32 type; + ACPI_OBJECT_INTERNAL *obj_desc; + s32 type; ACPI_STATUS status; @@ -221,11 +220,11 @@ /* Debug info */ /* - * Store the constructed descriptor (Obj_desc) into the Named_obj whose - * handle is on TOS, preserving the current type of that Named_obj. + * Store the constructed descriptor (Obj_desc) into the nte whose + * handle is on TOS, preserving the current type of that nte. */ - status = acpi_ns_attach_object ((ACPI_HANDLE) node, obj_desc, - (u8) acpi_ns_get_type ((ACPI_HANDLE) node)); + status = acpi_ns_attach_object ((ACPI_HANDLE) this_entry, obj_desc, + (u8) acpi_ns_get_type ((ACPI_HANDLE) this_entry)); return (status); } @@ -235,7 +234,7 @@ * * FUNCTION: Acpi_aml_prep_bank_field_value * - * PARAMETERS: Node - Owning Node + * PARAMETERS: This_entry - Owning NTE * Region - Region in which field is being defined * Bank_reg - Bank selection register * Bank_val - Value to store in selection register @@ -245,14 +244,14 @@ * * RETURN: Status * - * DESCRIPTION: Construct an ACPI_OPERAND_OBJECT of type Bank_field and - * connect it to the parent Node. + * DESCRIPTION: Construct an ACPI_OBJECT_INTERNAL of type Bank_field and + * connect it to the parent NTE. * ******************************************************************************/ ACPI_STATUS acpi_aml_prep_bank_field_value ( - ACPI_NAMESPACE_NODE *node, + ACPI_NAMED_OBJECT *this_entry, ACPI_HANDLE region, ACPI_HANDLE bank_reg, u32 bank_val, @@ -261,8 +260,8 @@ u32 field_position, u32 field_length) { - ACPI_OPERAND_OBJECT *obj_desc; - u32 type; + ACPI_OBJECT_INTERNAL *obj_desc; + s32 type; ACPI_STATUS status; @@ -309,11 +308,11 @@ /* Debug info */ /* - * Store the constructed descriptor (Obj_desc) into the Named_obj whose - * handle is on TOS, preserving the current type of that Named_obj. + * Store the constructed descriptor (Obj_desc) into the nte whose + * handle is on TOS, preserving the current type of that nte. */ - status = acpi_ns_attach_object ((ACPI_HANDLE) node, obj_desc, - (u8) acpi_ns_get_type ((ACPI_HANDLE) node)); + status = acpi_ns_attach_object ((ACPI_HANDLE) this_entry, obj_desc, + (u8) acpi_ns_get_type ((ACPI_HANDLE) this_entry)); return (status); } @@ -323,7 +322,7 @@ * * FUNCTION: Acpi_aml_prep_index_field_value * - * PARAMETERS: Node - Owning Node + * PARAMETERS: This_entry - Owning NTE * Index_reg - Index register * Data_reg - Data register * Field_flags - Access, Lock_rule, or Update_rule @@ -332,14 +331,14 @@ * * RETURN: Status * - * DESCRIPTION: Construct an ACPI_OPERAND_OBJECT of type Index_field and - * connect it to the parent Node. + * DESCRIPTION: Construct an ACPI_OBJECT_INTERNAL of type Index_field and + * connect it to the parent NTE. * ******************************************************************************/ ACPI_STATUS acpi_aml_prep_index_field_value ( - ACPI_NAMESPACE_NODE *node, + ACPI_NAMED_OBJECT *this_entry, ACPI_HANDLE index_reg, ACPI_HANDLE data_reg, u8 field_flags, @@ -347,7 +346,7 @@ u32 field_position, u32 field_length) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status; @@ -382,11 +381,11 @@ /* Debug info */ /* - * Store the constructed descriptor (Obj_desc) into the Named_obj whose - * handle is on TOS, preserving the current type of that Named_obj. + * Store the constructed descriptor (Obj_desc) into the nte whose + * handle is on TOS, preserving the current type of that nte. */ - status = acpi_ns_attach_object ((ACPI_HANDLE) node, obj_desc, - (u8) acpi_ns_get_type ((ACPI_HANDLE) node)); + status = acpi_ns_attach_object ((ACPI_HANDLE) this_entry, obj_desc, + (u8) acpi_ns_get_type ((ACPI_HANDLE) this_entry)); return (status); } diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amregion.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amregion.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amregion.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amregion.c Wed Jul 5 11:23:12 2000 @@ -1,8 +1,6 @@ - /****************************************************************************** * * Module Name: amregion - ACPI default Op_region (address space) handlers - * $Revision: 35 $ * *****************************************************************************/ @@ -26,15 +24,15 @@ #include "acpi.h" -#include "acinterp.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "achware.h" -#include "acevents.h" +#include "namesp.h" +#include "hardware.h" +#include "events.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amregion") + MODULE_NAME ("amregion"); /******************************************************************************* @@ -45,9 +43,7 @@ * Address - Where in the space to read or write * Bit_width - Field width in bits (8, 16, or 32) * Value - Pointer to in or out value - * Handler_context - Pointer to Handler's context - * Region_context - Pointer to context specific to the - * accessed region + * Context - Context pointer * * RETURN: Status * @@ -61,12 +57,11 @@ u32 address, /* TBD: [Future] Should this be A POINTER for 64-bit support? */ u32 bit_width, u32 *value, - void *handler_context, - void *region_context) + void *context) { ACPI_STATUS status = AE_OK; void *logical_addr_ptr = NULL; - MEM_HANDLER_CONTEXT *mem_info = region_context; + MEM_HANDLER_CONTEXT *mem_info = context; u32 length; @@ -98,8 +93,8 @@ * 2) Address beyond the current mapping? */ - if (((u8 *) address < mem_info->mapped_physical_address) || - (((u8 *) address + length) > + if (((char *) address < mem_info->mapped_physical_address) || + (((char *) address + length) > (mem_info->mapped_physical_address + mem_info->mapped_length))) { /* @@ -124,7 +119,7 @@ return (status); } - mem_info->mapped_physical_address = (u8 *) address; + mem_info->mapped_physical_address = (char *) address; mem_info->mapped_length = SYSMEM_REGION_WINDOW_SIZE; } @@ -135,7 +130,7 @@ */ logical_addr_ptr = mem_info->mapped_logical_address + - ((u8 *) address - mem_info->mapped_physical_address); + ((char *) address - mem_info->mapped_physical_address); /* Perform the memory read or write */ @@ -199,9 +194,7 @@ * Address - Where in the space to read or write * Bit_width - Field width in bits (8, 16, or 32) * Value - Pointer to in or out value - * Handler_context - Pointer to Handler's context - * Region_context - Pointer to context specific to the - * accessed region + * Context - Context pointer * * RETURN: Status * @@ -215,8 +208,7 @@ u32 address, u32 bit_width, u32 *value, - void *handler_context, - void *region_context) + void *context) { ACPI_STATUS status = AE_OK; @@ -291,9 +283,7 @@ * Address - Where in the space to read or write * Bit_width - Field width in bits (8, 16, or 32) * Value - Pointer to in or out value - * Handler_context - Pointer to Handler's context - * Region_context - Pointer to context specific to the - * accessed region + * Context - Context pointer * * RETURN: Status * @@ -307,8 +297,7 @@ u32 address, u32 bit_width, u32 *value, - void *handler_context, - void *region_context) + void *context) { ACPI_STATUS status = AE_OK; u32 pci_bus; @@ -332,7 +321,7 @@ * */ - PCIcontext = (PCI_HANDLER_CONTEXT *) region_context; + PCIcontext = (PCI_HANDLER_CONTEXT *) context; pci_bus = LOWORD(PCIcontext->seg) << 16; pci_bus |= LOWORD(PCIcontext->bus); @@ -376,6 +365,7 @@ case ADDRESS_SPACE_WRITE: + switch (bit_width) { diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amresnte.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amresnte.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amresnte.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amresnte.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: amresnte - AML Interpreter object resolution - * $Revision: 21 $ * *****************************************************************************/ @@ -27,33 +26,32 @@ #include "acpi.h" #include "amlcode.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "actables.h" -#include "acevents.h" +#include "parser.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" +#include "tables.h" +#include "events.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amresnte") + MODULE_NAME ("amresnte"); /******************************************************************************* * - * FUNCTION: Acpi_aml_resolve_node_to_value + * FUNCTION: Acpi_aml_resolve_entry_to_value * * PARAMETERS: Stack_ptr - Pointer to a location on a stack that contains - * a pointer to an Node + * a ptr to an NTE * * RETURN: Status * - * DESCRIPTION: Resolve a ACPI_NAMESPACE_NODE (Node, - * A.K.A. a "direct name pointer") + * DESCRIPTION: Resolve a ACPI_NAMED_OBJECT(nte, A.K.A. a "direct name pointer") * - * Note: for some of the data types, the pointer attached to the Node - * can be either a pointer to an actual internal object or a pointer into the - * AML stream itself. These types are currently: + * Note: for some of the data types, the pointer attached to the NTE can be + * either a pointer to an actual internal object or a pointer into the AML + * stream itself. These types are currently: * * ACPI_TYPE_NUMBER * ACPI_TYPE_STRING @@ -64,13 +62,13 @@ ******************************************************************************/ ACPI_STATUS -acpi_aml_resolve_node_to_value ( - ACPI_NAMESPACE_NODE **stack_ptr) +acpi_aml_resolve_entry_to_value ( + ACPI_NAMED_OBJECT **stack_ptr) { ACPI_STATUS status = AE_OK; - ACPI_OPERAND_OBJECT *val_desc = NULL; - ACPI_OPERAND_OBJECT *obj_desc = NULL; - ACPI_NAMESPACE_NODE *node; + ACPI_OBJECT_INTERNAL *val_desc = NULL; + ACPI_OBJECT_INTERNAL *obj_desc = NULL; + ACPI_NAMED_OBJECT *stack_entry; u8 *aml_pointer = NULL; OBJECT_TYPE_INTERNAL entry_type; u8 locked; @@ -80,20 +78,20 @@ OBJECT_TYPE_INTERNAL object_type; - node = *stack_ptr; + stack_entry = *stack_ptr; /* * The stack pointer is a "Direct name ptr", and points to a - * a ACPI_NAMESPACE_NODE (Node). Get the pointer that is attached to - * the Node. + * a ACPI_NAMED_OBJECT(nte). Get the pointer that is attached to + * the nte. */ - val_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node); - entry_type = acpi_ns_get_type ((ACPI_HANDLE) node); + val_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) stack_entry); + entry_type = acpi_ns_get_type ((ACPI_HANDLE) stack_entry); /* - * The Val_desc attached to the Node can be either: + * The Val_desc attached to the NTE can be either: * 1) An internal ACPI object * 2) A pointer into the AML stream (into one of the ACPI system tables) */ @@ -107,25 +105,7 @@ /* - * Several Entry_types do not require further processing, so - * we will return immediately - */ - /* Devices rarely have an attached object, return the Node - * and Method locals and arguments have a pseudo-Node - */ - if (entry_type == ACPI_TYPE_DEVICE || - entry_type == INTERNAL_TYPE_METHOD_ARGUMENT || - entry_type == INTERNAL_TYPE_METHOD_LOCAL_VAR) - { - return (AE_OK); - } - - if (!val_desc) { - return (AE_AML_NO_OPERAND); - } - - /* - * Action is based on the type of the Node, which indicates the type + * Action is based on the type of the NTE, which indicates the type * of the attached object or pointer */ switch (entry_type) @@ -133,6 +113,15 @@ case ACPI_TYPE_PACKAGE: + /* + * Val_desc should point to either an ACPI_OBJECT_INTERNAL of + * type Package, or an initialization in the AML stream. + */ + if (!val_desc) { + return (AE_AML_NO_OPERAND); + } + + if (attached_aml_pointer) { /* * This means that the package initialization is not parsed @@ -143,7 +132,7 @@ /* Val_desc is an internal object in all cases by the time we get here */ - if (ACPI_TYPE_PACKAGE != val_desc->common.type) { + if (!val_desc || (ACPI_TYPE_PACKAGE != val_desc->common.type)) { return (AE_AML_OPERAND_TYPE); } @@ -156,6 +145,10 @@ case ACPI_TYPE_BUFFER: + if (!val_desc) { + return (AE_AML_NO_OPERAND); + } + if (attached_aml_pointer) { /* * This means that the buffer initialization is not parsed @@ -166,7 +159,7 @@ /* Val_desc is an internal object in all cases by the time we get here */ - if (ACPI_TYPE_BUFFER != val_desc->common.type) { + if (!val_desc || (ACPI_TYPE_BUFFER != val_desc->common.type)) { return (AE_AML_OPERAND_TYPE); } @@ -190,8 +183,8 @@ /* Init the internal object */ - obj_desc->string.pointer = (NATIVE_CHAR *) aml_pointer; - obj_desc->string.length = STRLEN (obj_desc->string.pointer); + obj_desc->string.pointer = (char *) aml_pointer; + obj_desc->string.length = STRLEN (aml_pointer); } else { @@ -210,6 +203,11 @@ case ACPI_TYPE_NUMBER: + if (!val_desc) { + return (AE_AML_NO_OPERAND); + } + + /* * An ACPI_TYPE_NUMBER can be either an object or an AML pointer */ @@ -281,7 +279,7 @@ else { /* - * The Node has an attached internal object, make sure that it's a + * The NTE has an attached internal object, make sure that it's a * number */ @@ -339,21 +337,18 @@ obj_desc->buffer.length = val_desc->field.length; - status = acpi_aml_access_named_field (ACPI_READ, - (ACPI_HANDLE) node, - obj_desc->buffer.pointer, - obj_desc->buffer.length); + status = acpi_aml_get_named_field_value ((ACPI_HANDLE) stack_entry, + obj_desc->buffer.pointer, obj_desc->buffer.length); - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } } else { - status = acpi_aml_access_named_field (ACPI_READ, - (ACPI_HANDLE) node, + status = acpi_aml_get_named_field_value ((ACPI_HANDLE) stack_entry, &temp_val, sizeof (temp_val)); - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } @@ -366,6 +361,10 @@ case INTERNAL_TYPE_BANK_FIELD: + if (!val_desc) { + return (AE_AML_NO_OPERAND); + } + if (attached_aml_pointer) { return (AE_AML_OPERAND_TYPE); } @@ -377,30 +376,30 @@ /* Get the global lock if needed */ - obj_desc = (ACPI_OPERAND_OBJECT *) *stack_ptr; + obj_desc = (ACPI_OBJECT_INTERNAL *) *stack_ptr; locked = acpi_aml_acquire_global_lock (obj_desc->field_unit.lock_rule); + { - /* Set Index value to select proper Data register */ - /* perform the update */ - - status = acpi_aml_access_named_field (ACPI_WRITE, - val_desc->bank_field.bank_select, - &val_desc->bank_field.value, - sizeof (val_desc->bank_field.value)); + /* Set Index value to select proper Data register */ + /* perform the update */ + status = acpi_aml_set_named_field_value (val_desc->bank_field.bank_select, + &val_desc->bank_field.value, + sizeof (val_desc->bank_field.value)); + } acpi_aml_release_global_lock (locked); - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } /* Read Data value */ - status = acpi_aml_access_named_field (ACPI_READ, + status = acpi_aml_get_named_field_value ( (ACPI_HANDLE) val_desc->bank_field.container, &temp_val, sizeof (temp_val)); - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } @@ -415,6 +414,10 @@ case INTERNAL_TYPE_INDEX_FIELD: + if (!val_desc) { + return (AE_AML_NO_OPERAND); + } + if (attached_aml_pointer) { return (AE_AML_OPERAND_TYPE); } @@ -427,27 +430,25 @@ /* Set Index value to select proper Data register */ /* Get the global lock if needed */ - obj_desc = (ACPI_OPERAND_OBJECT *) *stack_ptr; + obj_desc = (ACPI_OBJECT_INTERNAL *) *stack_ptr; locked = acpi_aml_acquire_global_lock (obj_desc->field_unit.lock_rule); + { + /* Perform the update */ - /* Perform the update */ - status = acpi_aml_access_named_field (ACPI_WRITE, - val_desc->index_field.index, - &val_desc->index_field.value, - sizeof (val_desc->index_field.value)); - + status = acpi_aml_set_named_field_value (val_desc->index_field.index, + &val_desc->index_field.value, + sizeof (val_desc->index_field.value)); + } acpi_aml_release_global_lock (locked); - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } /* Read Data value */ - status = acpi_aml_access_named_field (ACPI_READ, - val_desc->index_field.data, - &temp_val, sizeof (temp_val)); - if (ACPI_FAILURE (status)) { + status = acpi_aml_get_named_field_value (val_desc->index_field.data, &temp_val, sizeof (temp_val)); + if (AE_OK != status) { return (status); } @@ -462,6 +463,10 @@ case ACPI_TYPE_FIELD_UNIT: + if (!val_desc) { + return (AE_AML_NO_OPERAND); + } + if (attached_aml_pointer) { return (AE_AML_OPERAND_TYPE); } @@ -476,8 +481,7 @@ return (AE_NO_MEMORY); } - status = acpi_aml_get_field_unit_value (val_desc, obj_desc); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_get_field_unit_value (val_desc, obj_desc)) != AE_OK) { acpi_cm_remove_reference (obj_desc); return (status); } @@ -486,7 +490,7 @@ /* - * For these objects, just return the object attached to the Node + * For these objects, just return the object attached to the NTE */ case ACPI_TYPE_MUTEX: @@ -498,11 +502,32 @@ case ACPI_TYPE_REGION: + /* There must be an object attached to this NTE */ + + if (!val_desc) { + return (AE_AML_INTERNAL); + } + /* Return an additional reference to the object */ obj_desc = val_desc; acpi_cm_add_reference (obj_desc); break; + + + /* Devices rarely have an attached object, return the NTE */ + + case ACPI_TYPE_DEVICE: + + + /* Method locals and arguments have a pseudo-NTE, just return it */ + + case INTERNAL_TYPE_METHOD_ARGUMENT: + case INTERNAL_TYPE_METHOD_LOCAL_VAR: + + return (AE_OK); + break; + /* TYPE_Any is untyped, and thus there is no object associated with it */ diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amresolv.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amresolv.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amresolv.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amresolv.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: amresolv - AML Interpreter object resolution - * $Revision: 74 $ * *****************************************************************************/ @@ -27,16 +26,16 @@ #include "acpi.h" #include "amlcode.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "actables.h" -#include "acevents.h" +#include "parser.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" +#include "tables.h" +#include "events.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amresolv") + MODULE_NAME ("amresolv"); /******************************************************************************* @@ -56,8 +55,8 @@ ACPI_STATUS acpi_aml_get_field_unit_value ( - ACPI_OPERAND_OBJECT *field_desc, - ACPI_OPERAND_OBJECT *result_desc) + ACPI_OBJECT_INTERNAL *field_desc, + ACPI_OBJECT_INTERNAL *result_desc) { ACPI_STATUS status = AE_OK; u32 mask; @@ -144,7 +143,7 @@ * FUNCTION: Acpi_aml_resolve_to_value * * PARAMETERS: **Stack_ptr - Points to entry on Obj_stack, which can - * be either an (ACPI_OPERAND_OBJECT *) + * be either an (ACPI_OBJECT_INTERNAL *) * or an ACPI_HANDLE. * * RETURN: Status @@ -155,8 +154,7 @@ ACPI_STATUS acpi_aml_resolve_to_value ( - ACPI_OPERAND_OBJECT **stack_ptr, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL **stack_ptr) { ACPI_STATUS status = AE_OK; @@ -168,13 +166,13 @@ /* * The entity pointed to by the Stack_ptr can be either - * 1) A valid ACPI_OPERAND_OBJECT, or - * 2) A ACPI_NAMESPACE_NODE (Named_obj) + * 1) A valid ACPI_OBJECT_INTERNAL, or + * 2) A ACPI_NAMED_OBJECT(nte) */ if (VALID_DESCRIPTOR_TYPE (*stack_ptr, ACPI_DESC_TYPE_INTERNAL)) { - status = acpi_aml_resolve_object_to_value (stack_ptr, walk_state); + status = acpi_aml_resolve_object_to_value (stack_ptr); if (ACPI_FAILURE (status)) { return (status); } @@ -186,7 +184,7 @@ */ if (VALID_DESCRIPTOR_TYPE (*stack_ptr, ACPI_DESC_TYPE_NAMED)) { - status = acpi_aml_resolve_node_to_value ((ACPI_NAMESPACE_NODE **) stack_ptr); + status = acpi_aml_resolve_entry_to_value ((ACPI_NAMED_OBJECT**) stack_ptr); } @@ -210,20 +208,19 @@ ACPI_STATUS acpi_aml_resolve_object_to_value ( - ACPI_OPERAND_OBJECT **stack_ptr, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL **stack_ptr) { - ACPI_OPERAND_OBJECT *stack_desc; + ACPI_OBJECT_INTERNAL *stack_desc; ACPI_STATUS status = AE_OK; ACPI_HANDLE temp_handle = NULL; - ACPI_OPERAND_OBJECT *obj_desc = NULL; + ACPI_OBJECT_INTERNAL *obj_desc = NULL; u32 index = 0; u16 opcode; stack_desc = *stack_ptr; - /* This is an ACPI_OPERAND_OBJECT */ + /* This is an ACPI_OBJECT_INTERNAL */ switch (stack_desc->common.type) { @@ -239,7 +236,7 @@ /* * Convert indirect name ptr to a direct name ptr. - * Then, Acpi_aml_resolve_node_to_value can be used to get the value + * Then, Acpi_aml_resolve_entry_to_value can be used to get the value */ temp_handle = stack_desc->reference.object; @@ -259,26 +256,24 @@ index = stack_desc->reference.offset; + /* Delete the Reference Object */ + + acpi_cm_remove_reference (stack_desc); + /* * Get the local from the method's state info - * Note: this increments the local's object reference count + * Note: this increments the object reference count */ status = acpi_ds_method_data_get_value (MTH_TYPE_LOCAL, index, - walk_state, &obj_desc); + stack_ptr); if (ACPI_FAILURE (status)) { return (status); } - /* - * Now we can delete the original Reference Object and - * replace it with the resolve value - */ - - acpi_cm_remove_reference (stack_desc); - *stack_ptr = obj_desc; + stack_desc = *stack_ptr; - if (ACPI_TYPE_NUMBER == obj_desc->common.type) { + if (ACPI_TYPE_NUMBER == stack_desc->common.type) { /* Value is a Number */ } @@ -290,6 +285,9 @@ index = stack_desc->reference.offset; + /* Delete the Reference Object*/ + + acpi_cm_remove_reference (stack_desc); /* * Get the argument from the method's state info @@ -297,20 +295,14 @@ */ status = acpi_ds_method_data_get_value (MTH_TYPE_ARG, index, - walk_state, &obj_desc); + stack_ptr); if (ACPI_FAILURE (status)) { return (status); } - /* - * Now we can delete the original Reference Object and - * replace it with the resolve value - */ - - acpi_cm_remove_reference (stack_desc); - *stack_ptr = obj_desc; + stack_desc = *stack_ptr; - if (ACPI_TYPE_NUMBER == obj_desc->common.type) { + if (ACPI_TYPE_NUMBER == stack_desc->common.type) { /* Value is a Number */ } @@ -400,7 +392,7 @@ } /* switch (Opcode) */ - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amresop.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amresop.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amresop.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amresop.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: amresop - AML Interpreter operand/object resolution - * $Revision: 15 $ * *****************************************************************************/ @@ -27,16 +26,16 @@ #include "acpi.h" #include "amlcode.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "actables.h" -#include "acevents.h" +#include "parser.h" +#include "dispatch.h" +#include "interp.h" +#include "namesp.h" +#include "tables.h" +#include "events.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amresop") + MODULE_NAME ("amresop"); /******************************************************************************* @@ -61,20 +60,19 @@ ACPI_STATUS acpi_aml_resolve_operands ( u16 opcode, - ACPI_OPERAND_OBJECT **stack_ptr, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL **stack_ptr) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; ACPI_STATUS status = AE_OK; u8 object_type; ACPI_HANDLE temp_handle; u32 arg_types; - ACPI_OPCODE_INFO *op_info; + ACPI_OP_INFO *op_info; u32 this_arg_type; op_info = acpi_ps_get_opcode_info (opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (!op_info) { return (AE_AML_BAD_OPCODE); } @@ -107,9 +105,9 @@ /* Decode the descriptor type */ if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) { - /* Node */ + /* NTE */ - object_type = ((ACPI_NAMESPACE_NODE *) obj_desc)->type; + object_type = ((ACPI_NAMED_OBJECT*) obj_desc)->type; } else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_INTERNAL)) { @@ -130,7 +128,7 @@ */ op_info = acpi_ps_get_opcode_info (opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (!op_info) { return (AE_AML_BAD_OPCODE); } @@ -207,8 +205,7 @@ /* Need an operand of type ACPI_TYPE_NUMBER */ - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value (stack_ptr)) != AE_OK) { goto cleanup; } @@ -223,8 +220,7 @@ /* Need an operand of type ACPI_TYPE_STRING or ACPI_TYPE_BUFFER */ - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value (stack_ptr)) != AE_OK) { goto cleanup; } @@ -241,8 +237,7 @@ /* Need an operand of type ACPI_TYPE_BUFFER */ - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value(stack_ptr)) != AE_OK) { goto cleanup; } @@ -257,8 +252,7 @@ /* Need an operand of type ACPI_TYPE_MUTEX */ - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value(stack_ptr)) != AE_OK) { goto cleanup; } @@ -273,8 +267,7 @@ /* Need an operand of type ACPI_TYPE_EVENT */ - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value(stack_ptr)) != AE_OK) { goto cleanup; } @@ -289,8 +282,7 @@ /* Need an operand of type ACPI_TYPE_REGION */ - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value(stack_ptr)) != AE_OK) { goto cleanup; } @@ -316,8 +308,7 @@ /* Need an operand of type ACPI_TYPE_PACKAGE */ - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value (stack_ptr)) != AE_OK) { goto cleanup; } @@ -346,8 +337,7 @@ /* All others must be resolved */ - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value (stack_ptr)) != AE_OK) { goto cleanup; } @@ -362,16 +352,15 @@ * * The ACPI specification allows Size_of to return the size of * a Buffer, String or Package. However, the MS ACPI.SYS AML - * Interpreter also allows an Node reference to return without + * Interpreter also allows an NTE reference to return without * error with a size of 4. */ - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value (stack_ptr)) != AE_OK) { goto cleanup; } - /* Need a buffer, string, package or Node reference */ + /* Need a buffer, string, package or NTE reference */ if (((*stack_ptr)->common.type != ACPI_TYPE_BUFFER) && ((*stack_ptr)->common.type != ACPI_TYPE_STRING) && @@ -383,10 +372,10 @@ } /* - * If this is a reference, only allow a reference to an Node. + * If this is a reference, only allow a reference to an NTE. */ if ((*stack_ptr)->common.type == INTERNAL_TYPE_REFERENCE) { - if (!(*stack_ptr)->reference.node) { + if (!(*stack_ptr)->reference.nte) { status = AE_AML_OPERAND_TYPE; goto cleanup; } @@ -397,8 +386,7 @@ case ARGI_COMPLEXOBJ: - status = acpi_aml_resolve_to_value (stack_ptr, walk_state); - if (ACPI_FAILURE (status)) { + if ((status = acpi_aml_resolve_to_value (stack_ptr)) != AE_OK) { goto cleanup; } diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amstore.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amstore.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amstore.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amstore.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: amstore - AML Interpreter object store support - * $Revision: 116 $ * *****************************************************************************/ @@ -26,16 +25,16 @@ #include "acpi.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" +#include "parser.h" +#include "dispatch.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "actables.h" +#include "namesp.h" +#include "tables.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amstore") + MODULE_NAME ("amstore"); /******************************************************************************* @@ -44,7 +43,7 @@ * * PARAMETERS: *Val_desc - Value to be stored * *Dest_desc - Where to store it 0 Must be (ACPI_HANDLE) - * or an ACPI_OPERAND_OBJECT of type + * or an ACPI_OBJECT_INTERNAL of type * Reference; if the latter the descriptor * will be either reused or deleted. * @@ -59,14 +58,13 @@ ACPI_STATUS acpi_aml_exec_store ( - ACPI_OPERAND_OBJECT *val_desc, - ACPI_OPERAND_OBJECT *dest_desc, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL *val_desc, + ACPI_OBJECT_INTERNAL *dest_desc) { ACPI_STATUS status = AE_OK; - ACPI_OPERAND_OBJECT *delete_dest_desc = NULL; - ACPI_OPERAND_OBJECT *tmp_desc; - ACPI_NAMESPACE_NODE *node = NULL; + ACPI_OBJECT_INTERNAL *delete_dest_desc = NULL; + ACPI_OBJECT_INTERNAL *tmp_desc; + ACPI_NAMED_OBJECT *entry = NULL; u8 value = 0; u32 length; u32 i; @@ -83,7 +81,7 @@ if (VALID_DESCRIPTOR_TYPE (dest_desc, ACPI_DESC_TYPE_NAMED)) { /* Dest is an ACPI_HANDLE, create a new object */ - node = (ACPI_NAMESPACE_NODE *) dest_desc; + entry = (ACPI_NAMED_OBJECT*) dest_desc; dest_desc = acpi_cm_create_internal_object (INTERNAL_TYPE_REFERENCE); if (!dest_desc) { /* Allocation failure */ @@ -94,7 +92,7 @@ /* Build a new Reference wrapper around the handle */ dest_desc->reference.op_code = AML_NAME_OP; - dest_desc->reference.object = node; + dest_desc->reference.object = entry; } @@ -117,8 +115,7 @@ * Storing into a Name */ delete_dest_desc = dest_desc; - status = acpi_aml_store_object_to_node (val_desc, dest_desc->reference.object, - walk_state); + status = acpi_aml_store_object_to_nte (val_desc, dest_desc->reference.object); break; /* Case Name_op */ @@ -185,7 +182,7 @@ */ if (ACPI_TYPE_PACKAGE == tmp_desc->common.type) { status = acpi_aml_build_copy_internal_package_object ( - val_desc, tmp_desc, walk_state); + val_desc, tmp_desc); if (ACPI_FAILURE (status)) { acpi_cm_remove_reference (tmp_desc); tmp_desc = NULL; @@ -209,8 +206,7 @@ * convert the contents of the source (Val_desc) and copy into * the destination (Tmp_desc) */ - status = acpi_aml_store_object_to_object (val_desc, tmp_desc, - walk_state); + status = acpi_aml_store_object_to_object(val_desc, tmp_desc); if (ACPI_FAILURE (status)) { /* * An error occurrered when copying the internal object @@ -303,7 +299,7 @@ /* * If we had an error, break out of this case statement. */ - if (ACPI_FAILURE (status)) { + if(AE_OK != status) { break; } @@ -319,7 +315,7 @@ case AML_ONES_OP: /* - * Storing to a constant is a no-op -- see ACPI Specification + * Storing to a constant is a no-op -- see spec sec 15.2.3.3.1. * Delete the result descriptor. */ @@ -330,7 +326,7 @@ case AML_LOCAL_OP: status = acpi_ds_method_data_set_value (MTH_TYPE_LOCAL, - (dest_desc->reference.offset), val_desc, walk_state); + (dest_desc->reference.offset), val_desc); delete_dest_desc = dest_desc; break; @@ -338,7 +334,7 @@ case AML_ARG_OP: status = acpi_ds_method_data_set_value (MTH_TYPE_ARG, - (dest_desc->reference.offset), val_desc, walk_state); + (dest_desc->reference.offset), val_desc); delete_dest_desc = dest_desc; break; @@ -347,7 +343,7 @@ /* * Storing to the Debug object causes the value stored to be - * displayed and otherwise has no effect -- see ACPI Specification + * displayed and otherwise has no effect -- see sec. 15.2.3.3.3. */ delete_dest_desc = dest_desc; diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amstoren.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amstoren.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amstoren.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amstoren.c Wed Jul 5 11:23:12 2000 @@ -1,9 +1,7 @@ /****************************************************************************** * - * Module Name: amstoren - AML Interpreter object store support, - * Store to Node (namespace object) - * $Revision: 21 $ + * Module Name: amstoren - AML Interpreter object store support, store to NTE * *****************************************************************************/ @@ -27,24 +25,24 @@ #include "acpi.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" +#include "parser.h" +#include "dispatch.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "actables.h" +#include "namesp.h" +#include "tables.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amstoren") + MODULE_NAME ("amstoren"); /******************************************************************************* * - * FUNCTION: Acpi_aml_store_object_to_node + * FUNCTION: Acpi_aml_store_object_to_nte * * PARAMETERS: *Val_desc - Value to be stored - * *Node - Named object to recieve the value + * *Entry - Named object to recieve the value * * RETURN: Status * @@ -67,10 +65,9 @@ ******************************************************************************/ ACPI_STATUS -acpi_aml_store_object_to_node ( - ACPI_OPERAND_OBJECT *val_desc, - ACPI_NAMESPACE_NODE *node, - ACPI_WALK_STATE *walk_state) +acpi_aml_store_object_to_nte ( + ACPI_OBJECT_INTERNAL *val_desc, + ACPI_NAMED_OBJECT *entry) { ACPI_STATUS status = AE_OK; u8 *buffer = NULL; @@ -79,16 +76,16 @@ u32 new_value; u8 locked = FALSE; u8 *location=NULL; - ACPI_OPERAND_OBJECT *dest_desc; + ACPI_OBJECT_INTERNAL *dest_desc; OBJECT_TYPE_INTERNAL destination_type = ACPI_TYPE_ANY; /* * Assuming the parameters are valid!!! */ - ACPI_ASSERT((node) && (val_desc)); + ACPI_ASSERT((entry) && (val_desc)); - destination_type = acpi_ns_get_type (node); + destination_type = acpi_ns_get_type (entry); /* * First ensure we have a value that can be stored in the target @@ -123,8 +120,8 @@ /* * Initially not a number, convert */ - status = acpi_aml_resolve_to_value (&val_desc, walk_state); - if (ACPI_SUCCESS (status) && + status = acpi_aml_resolve_to_value (&val_desc); + if ((status == AE_OK) && (val_desc->common.type != ACPI_TYPE_NUMBER)) { /* @@ -154,8 +151,8 @@ /* * Initially not a valid type, convert */ - status = acpi_aml_resolve_to_value (&val_desc, walk_state); - if (ACPI_SUCCESS (status) && + status = acpi_aml_resolve_to_value (&val_desc); + if ((status == AE_OK) && (val_desc->common.type != ACPI_TYPE_NUMBER) && (val_desc->common.type != ACPI_TYPE_BUFFER) && (val_desc->common.type != ACPI_TYPE_STRING)) @@ -187,7 +184,7 @@ * Val_desc reference count is incremented by Attach_object. */ - status = acpi_ns_attach_object (node, val_desc, val_desc->common.type); + status = acpi_ns_attach_object (entry, val_desc, val_desc->common.type); goto clean_up_and_bail_out; break; @@ -195,24 +192,24 @@ /* Exit now if failure above */ - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { goto clean_up_and_bail_out; } /* - * Get descriptor for object attached to Node + * Get descriptor for object attached to NTE */ - dest_desc = acpi_ns_get_attached_object (node); + dest_desc = acpi_ns_get_attached_object (entry); if (!dest_desc) { /* - * There is no existing object attached to this Node + * There is no existing object attached to this NTE */ status = AE_AML_INTERNAL; goto clean_up_and_bail_out; } /* - * Make sure the destination Object is the same as the Node + * Make sure the destination Object is the same as the NTE */ if (dest_desc->common.type != (u8) destination_type) { status = AE_AML_INTERNAL; @@ -240,17 +237,15 @@ * Perform the update (Set Bank Select) */ - status = acpi_aml_access_named_field (ACPI_WRITE, - dest_desc->bank_field.bank_select, - &dest_desc->bank_field.value, - sizeof (dest_desc->bank_field.value)); - if (ACPI_SUCCESS (status)) { + status = acpi_aml_set_named_field_value (dest_desc->bank_field.bank_select, + &dest_desc->bank_field.value, + sizeof (dest_desc->bank_field.value)); + if (status == AE_OK) { /* Set bank select successful, set data value */ - status = acpi_aml_access_named_field (ACPI_WRITE, - dest_desc->bank_field.bank_select, - &val_desc->bank_field.value, - sizeof (val_desc->bank_field.value)); + status = acpi_aml_set_named_field_value (dest_desc->bank_field.bank_select, + &val_desc->bank_field.value, + sizeof (val_desc->bank_field.value)); } break; @@ -285,9 +280,7 @@ break; } - status = acpi_aml_access_named_field (ACPI_WRITE, - node, buffer, length); - + status = acpi_aml_set_named_field_value (entry, buffer, length); break; /* Global Lock released below */ @@ -412,18 +405,16 @@ * perform the update (Set index) */ - status = acpi_aml_access_named_field (ACPI_WRITE, - dest_desc->index_field.index, - &dest_desc->index_field.value, - sizeof (dest_desc->index_field.value)); + status = acpi_aml_set_named_field_value (dest_desc->index_field.index, + &dest_desc->index_field.value, + sizeof (dest_desc->index_field.value)); - if (ACPI_SUCCESS (status)) { + if (AE_OK == status) { /* set index successful, next set Data value */ - status = acpi_aml_access_named_field (ACPI_WRITE, - dest_desc->index_field.data, - &val_desc->number.value, - sizeof (val_desc->number.value)); + status = acpi_aml_set_named_field_value (dest_desc->index_field.data, + &val_desc->number.value, + sizeof (val_desc->number.value)); } break; diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amstorob.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amstorob.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amstorob.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amstorob.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: amstorob - AML Interpreter object store support, store to object - * $Revision: 16 $ * *****************************************************************************/ @@ -26,16 +25,16 @@ #include "acpi.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" +#include "parser.h" +#include "dispatch.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "actables.h" +#include "namesp.h" +#include "tables.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amstorob") + MODULE_NAME ("amstorob"); /******************************************************************************* @@ -66,9 +65,8 @@ ACPI_STATUS acpi_aml_store_object_to_object ( - ACPI_OPERAND_OBJECT *val_desc, - ACPI_OPERAND_OBJECT *dest_desc, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL *val_desc, + ACPI_OBJECT_INTERNAL *dest_desc) { ACPI_STATUS status = AE_OK; u8 *buffer = NULL; @@ -101,8 +99,8 @@ /* * Initially not a number, convert */ - status = acpi_aml_resolve_to_value (&val_desc, walk_state); - if (ACPI_SUCCESS (status) && + status = acpi_aml_resolve_to_value (&val_desc); + if ((status == AE_OK) && (val_desc->common.type != ACPI_TYPE_NUMBER)) { /* @@ -131,8 +129,8 @@ /* * Initially not a valid type, convert */ - status = acpi_aml_resolve_to_value (&val_desc, walk_state); - if (ACPI_SUCCESS (status) && + status = acpi_aml_resolve_to_value (&val_desc); + if ((status == AE_OK) && (val_desc->common.type != ACPI_TYPE_NUMBER) && (val_desc->common.type != ACPI_TYPE_BUFFER) && (val_desc->common.type != ACPI_TYPE_STRING)) @@ -157,7 +155,7 @@ /* Exit now if failure above */ - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { goto clean_up_and_bail_out; } diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amsystem.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amsystem.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amsystem.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amsystem.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: amsystem - Interface to OS services - * $Revision: 51 $ * *****************************************************************************/ @@ -26,13 +25,13 @@ #include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "achware.h" -#include "acevents.h" +#include "interp.h" +#include "namesp.h" +#include "hardware.h" +#include "events.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amsystem") + MODULE_NAME ("amsystem"); /******************************************************************************* @@ -182,8 +181,8 @@ ACPI_STATUS acpi_aml_system_acquire_mutex ( - ACPI_OPERAND_OBJECT *time_desc, - ACPI_OPERAND_OBJECT *obj_desc) + ACPI_OBJECT_INTERNAL *time_desc, + ACPI_OBJECT_INTERNAL *obj_desc) { ACPI_STATUS status = AE_OK; @@ -224,7 +223,7 @@ ACPI_STATUS acpi_aml_system_release_mutex ( - ACPI_OPERAND_OBJECT *obj_desc) + ACPI_OBJECT_INTERNAL *obj_desc) { ACPI_STATUS status = AE_OK; @@ -261,7 +260,7 @@ ACPI_STATUS acpi_aml_system_signal_event ( - ACPI_OPERAND_OBJECT *obj_desc) + ACPI_OBJECT_INTERNAL *obj_desc) { ACPI_STATUS status = AE_OK; @@ -291,8 +290,8 @@ ACPI_STATUS acpi_aml_system_wait_event ( - ACPI_OPERAND_OBJECT *time_desc, - ACPI_OPERAND_OBJECT *obj_desc) + ACPI_OBJECT_INTERNAL *time_desc, + ACPI_OBJECT_INTERNAL *obj_desc) { ACPI_STATUS status = AE_OK; @@ -322,7 +321,7 @@ ACPI_STATUS acpi_aml_system_reset_event ( - ACPI_OPERAND_OBJECT *obj_desc) + ACPI_OBJECT_INTERNAL *obj_desc) { ACPI_STATUS status = AE_OK; void *temp_semaphore; diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amutils.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amutils.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amutils.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amutils.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ /****************************************************************************** * * Module Name: amutils - interpreter/scanner utilities - * $Revision: 53 $ * *****************************************************************************/ @@ -26,21 +25,21 @@ #include "acpi.h" -#include "acparser.h" -#include "acinterp.h" +#include "parser.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" -#include "acevents.h" +#include "namesp.h" +#include "events.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amutils") + MODULE_NAME ("amutils"); typedef struct internal_search_st { - ACPI_OPERAND_OBJECT *dest_obj; + ACPI_OBJECT_INTERNAL *dest_obj; u32 index; - ACPI_OPERAND_OBJECT *source_obj; + ACPI_OBJECT_INTERNAL *source_obj; } INTERNAL_PKG_SEARCH_INFO; @@ -50,7 +49,7 @@ INTERNAL_PKG_SEARCH_INFO copy_level[MAX_PACKAGE_DEPTH]; -static NATIVE_CHAR hex[] = +static char hex[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; @@ -122,10 +121,41 @@ if ((type > ACPI_TYPE_MAX && type < INTERNAL_TYPE_BEGIN) || (type > INTERNAL_TYPE_MAX)) { - return (FALSE); + return FALSE; } - return (TRUE); + return TRUE; +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_aml_append_operand_diag + * + * PARAMETERS: *File_name - Name of source file + * Line_num - Line Number in file + * Op_code - Op_code being executed + * Num_operands - Number of operands Prep_stack tried to check + * + * DESCRIPTION: Print diagnostic information about operands. + * This function is intended to be called after Prep_stack + * has returned S_ERROR. + * + ******************************************************************************/ + +void +acpi_aml_append_operand_diag ( + char *file_name, + s32 line_num, + u16 op_code, + ACPI_OBJECT_INTERNAL **operands, + s32 num_operands) +{ + + /* + * This function outputs debug information only + */ + } @@ -148,7 +178,7 @@ acpi_aml_buf_seq (void) { - return (++acpi_gbl_buf_seq); + return ++acpi_gbl_buf_seq; } @@ -240,12 +270,12 @@ * ******************************************************************************/ -u32 +s32 acpi_aml_digits_needed ( - u32 val, - u32 base) + s32 val, + s32 base) { - u32 num_digits = 0; + s32 num_digits = 0; if (base < 1) { @@ -279,13 +309,13 @@ union { u32 value; - u8 bytes[4]; + char bytes[4]; } out; union { u32 value; - u8 bytes[4]; + char bytes[4]; } in; @@ -296,7 +326,7 @@ out.bytes[2] = in.bytes[1]; out.bytes[3] = in.bytes[0]; - return (out.value); + return out.value; } @@ -314,7 +344,7 @@ ACPI_STATUS acpi_aml_eisa_id_to_string ( u32 numeric_id, - NATIVE_CHAR *out_string) + char *out_string) { u32 id; @@ -331,7 +361,7 @@ out_string[6] = hex[id & 0xf]; out_string[7] = 0; - return (AE_OK); + return AE_OK; } @@ -351,17 +381,16 @@ ACPI_STATUS acpi_aml_build_copy_internal_package_object ( - ACPI_OPERAND_OBJECT *source_obj, - ACPI_OPERAND_OBJECT *dest_obj, - ACPI_WALK_STATE *walk_state) + ACPI_OBJECT_INTERNAL *source_obj, + ACPI_OBJECT_INTERNAL *dest_obj) { u32 current_depth = 0; ACPI_STATUS status = AE_OK; u32 length = 0; u32 this_index; u32 object_space = 0; - ACPI_OPERAND_OBJECT *this_dest_obj; - ACPI_OPERAND_OBJECT *this_source_obj; + ACPI_OBJECT_INTERNAL *this_dest_obj; + ACPI_OBJECT_INTERNAL *this_source_obj; INTERNAL_PKG_SEARCH_INFO *level_ptr; @@ -400,8 +429,8 @@ while (1) { this_index = level_ptr->index; - this_dest_obj = (ACPI_OPERAND_OBJECT *) level_ptr->dest_obj->package.elements[this_index]; - this_source_obj = (ACPI_OPERAND_OBJECT *) level_ptr->source_obj->package.elements[this_index]; + this_dest_obj = (ACPI_OBJECT_INTERNAL *) level_ptr->dest_obj->package.elements[this_index]; + this_source_obj = (ACPI_OBJECT_INTERNAL *) level_ptr->source_obj->package.elements[this_index]; if (IS_THIS_OBJECT_TYPE (this_source_obj, ACPI_TYPE_PACKAGE)) { /* @@ -429,7 +458,7 @@ * update the buffer length counter */ object_space = this_dest_obj->package.count * - sizeof (ACPI_OPERAND_OBJECT); + sizeof (ACPI_OBJECT_INTERNAL); length += object_space; current_depth++; level_ptr = ©_level[current_depth]; @@ -445,9 +474,9 @@ this_source_obj->common.type); level_ptr->dest_obj->package.elements[this_index] = this_dest_obj; - status = acpi_aml_store_object_to_object(this_source_obj, this_dest_obj, walk_state); + status = acpi_aml_store_object_to_object(this_source_obj, this_dest_obj); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { /* * Failure get out */ @@ -482,6 +511,12 @@ } } /* else object is NOT a package */ } /* while (1) */ + + + /* + * We'll never get here, but the compiler whines about return value + */ + return (AE_OK); } diff -urN linux-2.4.0-test9/drivers/acpi/interpreter/amxface.c linux-2.4.0-test9-lia/drivers/acpi/interpreter/amxface.c --- linux-2.4.0-test9/drivers/acpi/interpreter/amxface.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/interpreter/amxface.c Wed Jul 5 11:23:12 2000 @@ -1,8 +1,7 @@ /****************************************************************************** * - * Module Name: amxface - External interpreter interfaces - * $Revision: 22 $ + * Module Name: ixface - External interpreter interfaces * *****************************************************************************/ @@ -26,11 +25,11 @@ #include "acpi.h" -#include "acinterp.h" +#include "interp.h" #define _COMPONENT INTERPRETER - MODULE_NAME ("amxface") + MODULE_NAME ("amxface"); /* @@ -49,8 +48,8 @@ #define DEFINE_AML_GLOBALS #include "amlcode.h" -#include "acparser.h" -#include "acnamesp.h" +#include "parser.h" +#include "namesp.h" /******************************************************************************* @@ -71,9 +70,9 @@ ACPI_STATUS acpi_aml_execute_method ( - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_obj_desc) + ACPI_NAMED_OBJECT *method_entry, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_obj_desc) { ACPI_STATUS status; @@ -85,7 +84,7 @@ acpi_aml_enter_interpreter (); - status = acpi_psx_execute (method_node, params, return_obj_desc); + status = acpi_psx_execute (method_entry, params, return_obj_desc); acpi_aml_exit_interpreter (); diff -urN linux-2.4.0-test9/drivers/acpi/namespace/Makefile linux-2.4.0-test9-lia/drivers/acpi/namespace/Makefile --- linux-2.4.0-test9/drivers/acpi/namespace/Makefile Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/Makefile Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -SUB_DIRS := -MOD_SUB_DIRS := $(SUB_DIRS) -MOD_IN_SUB_DIRS := -ALL_SUB_DIRS := $(SUB_DIRS) - -O_TARGET := ../$(shell basename `pwd`).o -O_OBJS := -M_OBJS := - -ACPI_OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) - -EXTRA_CFLAGS += -I../include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) - -# if the interpreter is used, it overrides arch/i386/kernel/acpi.c -ifeq ($(CONFIG_ACPI_INTERPRETER),y) - O_OBJS := $(ACPI_OBJS) -endif - -include $(TOPDIR)/Rules.make - -clean: - $(RM) *.o diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nsaccess.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nsaccess.c --- linux-2.4.0-test9/drivers/acpi/namespace/nsaccess.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nsaccess.c Wed Jul 5 11:23:12 2000 @@ -1,9 +1,9 @@ -/******************************************************************************* + +/****************************************************************************** * * Module Name: nsaccess - Top-level functions for accessing ACPI namespace - * $Revision: 108 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -26,16 +26,59 @@ #include "acpi.h" #include "amlcode.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acdispat.h" +#include "interp.h" +#include "namesp.h" +#include "dispatch.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nsaccess") + MODULE_NAME ("nsaccess"); -/******************************************************************************* +/**************************************************************************** + * + * FUNCTION: Acpi_ns_root_create_scope + * + * PARAMETERS: Entry - NTE for which a scope will be created + * + * RETURN: Status + * + * DESCRIPTION: Create a scope table for the given name table entry + * + * MUTEX: Expects namespace to be locked + * + ***************************************************************************/ + +ACPI_STATUS +acpi_ns_root_create_scope ( + ACPI_NAMED_OBJECT *entry) +{ + + /* Allocate a scope table */ + + if (entry->child_table) { + return (AE_EXIST); + } + + entry->child_table = acpi_ns_allocate_name_table (NS_TABLE_SIZE); + if (!entry->child_table) { + /* root name table allocation failure */ + + REPORT_ERROR ("Root name table allocation failure"); + return (AE_NO_MEMORY); + } + + /* + * Init the scope first entry -- since it is the exemplar of + * the scope (Some fields are duplicated to new entries!) + */ + acpi_ns_initialize_table (entry->child_table, NULL, entry); + return (AE_OK); + +} + + +/**************************************************************************** * * FUNCTION: Acpi_ns_root_initialize * @@ -43,41 +86,40 @@ * * RETURN: Status * - * DESCRIPTION: Allocate and initialize the default root named objects + * DESCRIPTION: Allocate and initialize the root name table * * MUTEX: Locks namespace for entire execution * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_ns_root_initialize (void) { ACPI_STATUS status = AE_OK; PREDEFINED_NAMES *init_val = NULL; - ACPI_NAMESPACE_NODE *new_node; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_NAMED_OBJECT *new_entry; + ACPI_OBJECT_INTERNAL *obj_desc; acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); /* - * The global root ptr is initially NULL, so a non-NULL value indicates + * Root is initially NULL, so a non-NULL value indicates * that Acpi_ns_root_initialize() has already been called; just return. */ - if (acpi_gbl_root_node) { + if (acpi_gbl_root_object->child_table) { status = AE_OK; goto unlock_and_exit; } - /* - * Tell the rest of the subsystem that the root is initialized - * (This is OK because the namespace is locked) - */ - - acpi_gbl_root_node = &acpi_gbl_root_node_struct; + /* Create the root scope */ + status = acpi_ns_root_create_scope (acpi_gbl_root_object); + if (ACPI_FAILURE (status)) { + goto unlock_and_exit; + } /* Enter the pre-defined names in the name table */ @@ -85,25 +127,25 @@ status = acpi_ns_lookup (NULL, init_val->name, (OBJECT_TYPE_INTERNAL) init_val->type, IMODE_LOAD_PASS2, NS_NO_UPSEARCH, - NULL, &new_node); - - if (ACPI_FAILURE (status) || - (!new_node)) + NULL, &new_entry); /* - * Name entered successfully. - * If entry in Pre_defined_names[] specifies an - * initial value, create the initial value. + * if name entered successfully + * && its entry in Pre_defined_names[] specifies an + * initial value */ - if (init_val->val) { + if ((status == AE_OK) && + new_entry && init_val->val) + { /* * Entry requests an initial value, allocate a * descriptor for it. */ - obj_desc = acpi_cm_create_internal_object ( - (OBJECT_TYPE_INTERNAL) init_val->type); + obj_desc = + acpi_cm_create_internal_object ( + (OBJECT_TYPE_INTERNAL) init_val->type); if (!obj_desc) { status = AE_NO_MEMORY; @@ -122,22 +164,23 @@ case ACPI_TYPE_NUMBER: obj_desc->number.value = - (u32) STRTOUL (init_val->val, NULL, 10); + (u32) STRTOUL (init_val->val, NULL, 10); break; case ACPI_TYPE_STRING: obj_desc->string.length = - (u16) STRLEN (init_val->val); + (u16) STRLEN (init_val->val); /* * Allocate a buffer for the string. All * String.Pointers must be allocated buffers! * (makes deletion simpler) */ - obj_desc->string.pointer = acpi_cm_allocate ( - (obj_desc->string.length + 1)); + obj_desc->string.pointer = + acpi_cm_allocate ((ACPI_SIZE) + (obj_desc->string.length + 1)); if (!obj_desc->string.pointer) { REPORT_ERROR ("Initial value string" @@ -148,22 +191,24 @@ goto unlock_and_exit; } - STRCPY (obj_desc->string.pointer, init_val->val); + STRCPY ((char *) obj_desc->string.pointer, + init_val->val); break; case ACPI_TYPE_MUTEX: obj_desc->mutex.sync_level = - (u16) STRTOUL (init_val->val, NULL, 10); + (u16) STRTOUL (init_val->val, NULL, 10); if (STRCMP (init_val->name, "_GL_") == 0) { /* * Create a counting semaphore for the * global lock */ - status = acpi_os_create_semaphore (ACPI_NO_UNIT_LIMIT, - 1, &obj_desc->mutex.semaphore); + status = + acpi_os_create_semaphore (ACPI_NO_UNIT_LIMIT, + 1, &obj_desc->mutex.semaphore); if (ACPI_FAILURE (status)) { goto unlock_and_exit; @@ -173,7 +218,8 @@ * global lock, save it */ - acpi_gbl_global_lock_semaphore = obj_desc->mutex.semaphore; + acpi_gbl_global_lock_semaphore = + obj_desc->mutex.semaphore; } else { @@ -186,6 +232,11 @@ goto unlock_and_exit; } } + + /* TBD: [Restructure] These fields may be obsolete */ + + obj_desc->mutex.lock_count = 0; + obj_desc->mutex.thread_id = 0; break; @@ -196,9 +247,9 @@ continue; } - /* Store pointer to value descriptor in the Node */ + /* Store pointer to value descriptor in nte */ - acpi_ns_attach_object (new_node, obj_desc, + acpi_ns_attach_object (new_entry, obj_desc, obj_desc->common.type); } } @@ -210,19 +261,16 @@ } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_lookup * - * PARAMETERS: Prefix_node - Search scope if name is not fully qualified + * PARAMETERS: Prefix_scope - Search scope if name is not fully qualified * Pathname - Search pathname, in internal format * (as represented in the AML stream) * Type - Type associated with name * Interpreter_mode - IMODE_LOAD_PASS2 => add name if not found - * Flags - Flags describing the search restrictions - * Walk_state - Current state of the walk - * Return_node - Where the Node is placed (if found - * or created successfully) + * Ret_entry - Where the new entry (NTE) is placed * * RETURN: Status * @@ -231,55 +279,68 @@ * * MUTEX: Assumes namespace is locked. * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_ns_lookup ( ACPI_GENERIC_STATE *scope_info, - NATIVE_CHAR *pathname, + char *pathname, OBJECT_TYPE_INTERNAL type, OPERATING_MODE interpreter_mode, u32 flags, ACPI_WALK_STATE *walk_state, - ACPI_NAMESPACE_NODE **return_node) + ACPI_NAMED_OBJECT **ret_entry) { ACPI_STATUS status; - ACPI_NAMESPACE_NODE *prefix_node; - ACPI_NAMESPACE_NODE *current_node = NULL; - ACPI_NAMESPACE_NODE *scope_to_push = NULL; - ACPI_NAMESPACE_NODE *this_node = NULL; + ACPI_NAME_TABLE *prefix_scope; + ACPI_NAME_TABLE *table_to_search = NULL; + ACPI_NAME_TABLE *scope_to_push = NULL; + ACPI_NAMED_OBJECT *this_entry = NULL; u32 num_segments; ACPI_NAME simple_name; u8 null_name_path = FALSE; OBJECT_TYPE_INTERNAL type_to_check_for; OBJECT_TYPE_INTERNAL this_search_type; - if (!return_node) { + if (!ret_entry) { return (AE_BAD_PARAMETER); } acpi_gbl_ns_lookup_count++; - *return_node = ENTRY_NOT_FOUND; - + *ret_entry = ENTRY_NOT_FOUND; + if (!acpi_gbl_root_object->child_table) { + /* + * If the name space has not been initialized: + * - In Pass1 of Load mode, we need to initialize it + * before trying to define a name. + * - In Exec mode, there are no names to be found. + */ - if (!acpi_gbl_root_node) { - return (AE_NO_NAMESPACE); + if (IMODE_LOAD_PASS1 == interpreter_mode) { + if ((status = acpi_ns_root_initialize ()) != AE_OK) { + return (status); + } + } + else { + return (AE_NOT_FOUND); + } } + /* * Get the prefix scope. * A null scope means use the root scope */ if ((!scope_info) || - (!scope_info->scope.node)) + (!scope_info->scope.name_table)) { - prefix_node = acpi_gbl_root_node; + prefix_scope = acpi_gbl_root_object->child_table; } else { - prefix_node = scope_info->scope.node; + prefix_scope = scope_info->scope.name_table; } @@ -308,8 +369,6 @@ } - /* TBD: [Restructure] - Move the pathname stuff into a new procedure */ - /* Examine the name pointer */ if (!pathname) { @@ -317,7 +376,7 @@ null_name_path = TRUE; num_segments = 0; - this_node = acpi_gbl_root_node; + this_entry = acpi_gbl_root_object; } @@ -344,16 +403,14 @@ if (*pathname == AML_ROOT_PREFIX) { /* Pathname is fully qualified, look in root name table */ - current_node = acpi_gbl_root_node; - + table_to_search = acpi_gbl_root_object->child_table; /* point to segment part */ - pathname++; /* Direct reference to root, "\" */ if (!(*pathname)) { - this_node = acpi_gbl_root_node; + this_entry = acpi_gbl_root_object; goto check_for_new_scope_and_exit; } } @@ -361,7 +418,7 @@ else { /* Pathname is relative to current scope, start there */ - current_node = prefix_node; + table_to_search = prefix_scope; /* * Handle up-prefix (carat). More than one prefix @@ -369,22 +426,23 @@ */ while (*pathname == AML_PARENT_PREFIX) { + /* Point to segment part or next Parent_prefix */ pathname++; /* Backup to the parent's scope */ - this_node = acpi_ns_get_parent_object (current_node); - if (!this_node) { + table_to_search = table_to_search->parent_table; + if (!table_to_search) { /* Current scope has no parent scope */ - REPORT_ERROR ("Too many parent prefixes (^) - reached root"); + REPORT_ERROR ("Ns_lookup: Too many parent" + "prefixes or scope has no parent"); + return (AE_NOT_FOUND); } - - current_node = this_node; } } @@ -396,18 +454,14 @@ if (*pathname == AML_DUAL_NAME_PREFIX) { num_segments = 2; - /* point to first segment */ - pathname++; } else if (*pathname == AML_MULTI_NAME_PREFIX_OP) { - num_segments = (u32)* (u8 *) ++pathname; - + num_segments = (s32)* (u8 *) ++pathname; /* point to first segment */ - pathname++; } @@ -430,32 +484,32 @@ */ - while (num_segments-- && current_node) { + while (num_segments-- && table_to_search) { /* - * Search for the current name segment under the current - * named object. The Type is significant only at the last (topmost) - * level. (We don't care about the types along the path, only - * the type of the final target object.) + * Search for the current segment in the table where + * it should be. + * Type is significant only at the last (topmost) level. */ this_search_type = ACPI_TYPE_ANY; if (!num_segments) { this_search_type = type; } - /* Pluck and ACPI name from the front of the pathname */ - MOVE_UNALIGNED32_TO_32 (&simple_name, pathname); - - /* Try to find the ACPI name */ - status = acpi_ns_search_and_enter (simple_name, walk_state, - current_node, interpreter_mode, + table_to_search, interpreter_mode, this_search_type, flags, - &this_node); + &this_entry); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { if (status == AE_NOT_FOUND) { - /* Name not found in ACPI namespace */ + /* Name not in ACPI namespace */ + + if (IMODE_LOAD_PASS1 == interpreter_mode || + IMODE_LOAD_PASS2 == interpreter_mode) + { + REPORT_ERROR ("Name table overflow"); + } } @@ -464,54 +518,92 @@ /* - * If 1) This is the last segment (Num_segments == 0) + * If 1) last segment (Num_segments == 0) * 2) and looking for a specific type * (Not checking for TYPE_ANY) * 3) which is not a local type (TYPE_DEF_ANY) * 4) which is not a local type (TYPE_SCOPE) * 5) which is not a local type (TYPE_INDEX_FIELD_DEFN) - * 6) and type of object is known (not TYPE_ANY) - * 7) and object does not match request + * 6) and type of entry is known (not TYPE_ANY) + * 7) and entry does not match request * * Then we have a type mismatch. Just warn and ignore it. */ - if ((num_segments == 0) && - (type_to_check_for != ACPI_TYPE_ANY) && - (type_to_check_for != INTERNAL_TYPE_DEF_ANY) && - (type_to_check_for != INTERNAL_TYPE_SCOPE) && - (type_to_check_for != INTERNAL_TYPE_INDEX_FIELD_DEFN) && - (this_node->type != ACPI_TYPE_ANY) && - (this_node->type != type_to_check_for)) + if ((num_segments == 0) && + (type_to_check_for != ACPI_TYPE_ANY) && + (type_to_check_for != INTERNAL_TYPE_DEF_ANY) && + (type_to_check_for != INTERNAL_TYPE_SCOPE) && + (type_to_check_for != INTERNAL_TYPE_INDEX_FIELD_DEFN) && + (this_entry->type != ACPI_TYPE_ANY) && + (this_entry->type != type_to_check_for)) { - /* Complain about a type mismatch */ + /* Complain about type mismatch */ REPORT_WARNING ("Type mismatch"); } /* - * If this is the last name segment and we are not looking for a - * specific type, but the type of found object is known, use that type - * to see if it opens a scope. + * If last segment and not looking for a specific type, but type of + * found entry is known, use that type to see if it opens a scope. */ if ((0 == num_segments) && (ACPI_TYPE_ANY == type)) { - type = this_node->type; + type = this_entry->type; } if ((num_segments || acpi_ns_opens_scope (type)) && - (this_node->child == NULL)) + (this_entry->child_table == NULL)) { /* * More segments or the type implies enclosed scope, * and the next scope has not been allocated. */ - } + if ((IMODE_LOAD_PASS1 == interpreter_mode) || + (IMODE_LOAD_PASS2 == interpreter_mode)) + { + /* + * First or second pass load mode + * ==> locate the next scope + */ - current_node = this_node; + this_entry->child_table = + acpi_ns_allocate_name_table (NS_TABLE_SIZE); - /* point to next name segment */ + if (!this_entry->child_table) { + return (AE_NO_MEMORY); + } + } + /* Now complain if there is no next scope */ + + if (this_entry->child_table == NULL) { + if (IMODE_LOAD_PASS1 == interpreter_mode || + IMODE_LOAD_PASS2 == interpreter_mode) + { + REPORT_ERROR ("Name Table allocation failure"); + return (AE_NOT_FOUND); + } + + return (AE_NOT_FOUND); + } + + + /* Scope table initialization */ + + if (IMODE_LOAD_PASS1 == interpreter_mode || + IMODE_LOAD_PASS2 == interpreter_mode) + { + /* Initialize the new table */ + + acpi_ns_initialize_table (this_entry->child_table, + table_to_search, + this_entry); + } + } + + table_to_search = this_entry->child_table; + /* point to next name segment */ pathname += ACPI_NAME_SIZE; } @@ -537,7 +629,7 @@ scope_to_push = NULL; } else { - scope_to_push = this_node; + scope_to_push = this_entry->child_table; } status = acpi_ds_scope_stack_push (scope_to_push, type, @@ -549,7 +641,7 @@ } } - *return_node = this_node; + *ret_entry = this_entry; return (AE_OK); } diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nsalloc.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nsalloc.c --- linux-2.4.0-test9/drivers/acpi/namespace/nsalloc.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nsalloc.c Wed Jul 5 11:23:12 2000 @@ -1,9 +1,9 @@ -/******************************************************************************* + +/****************************************************************************** * * Module Name: nsalloc - Namespace allocation and deletion utilities - * $Revision: 41 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -25,303 +25,46 @@ #include "acpi.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "namesp.h" +#include "interp.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nsalloc") - - -/******************************************************************************* - * - * FUNCTION: Acpi_ns_create_node - * - * PARAMETERS: - * - * RETURN: None - * - * DESCRIPTION: - * - ******************************************************************************/ - -ACPI_NAMESPACE_NODE * -acpi_ns_create_node ( - u32 acpi_name) -{ - ACPI_NAMESPACE_NODE *node; - - - node = acpi_cm_callocate (sizeof (ACPI_NAMESPACE_NODE)); - if (!node) { - return (NULL); - } - - INCREMENT_NAME_TABLE_METRICS (sizeof (ACPI_NAMESPACE_NODE)); - - node->data_type = ACPI_DESC_TYPE_NAMED; - node->name = acpi_name; - node->reference_count = 1; - - return (node); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ns_delete_node - * - * PARAMETERS: - * - * RETURN: None - * - * DESCRIPTION: - * - ******************************************************************************/ - -void -acpi_ns_delete_node ( - ACPI_NAMESPACE_NODE *node) -{ - ACPI_NAMESPACE_NODE *parent_node; - ACPI_NAMESPACE_NODE *prev_node; - ACPI_NAMESPACE_NODE *next_node; - - - parent_node = acpi_ns_get_parent_object (node); - - prev_node = NULL; - next_node = parent_node->child; - - while (next_node != node) { - prev_node = next_node; - next_node = prev_node->peer; - } - - if (prev_node) { - prev_node->peer = next_node->peer; - if (next_node->flags & ANOBJ_END_OF_PEER_LIST) { - prev_node->flags |= ANOBJ_END_OF_PEER_LIST; - } - } - else { - parent_node->child = next_node->peer; - } - - - DECREMENT_NAME_TABLE_METRICS (sizeof (ACPI_NAMESPACE_NODE)); - - /* - * Detach an object if there is one - */ - - if (node->object) { - acpi_ns_detach_object (node); - } - - acpi_cm_free (node); - - - return; -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ns_install_node - * - * PARAMETERS: Walk_state - Current state of the walk - * Parent_node - The parent of the new Node - * Node - The new Node to install - * Type - ACPI object type of the new Node - * - * RETURN: None - * - * DESCRIPTION: Initialize a new entry within a namespace table. - * - ******************************************************************************/ - -void -acpi_ns_install_node ( - ACPI_WALK_STATE *walk_state, - ACPI_NAMESPACE_NODE *parent_node, /* Parent */ - ACPI_NAMESPACE_NODE *node, /* New Child*/ - OBJECT_TYPE_INTERNAL type) -{ - u16 owner_id = TABLE_ID_DSDT; - ACPI_NAMESPACE_NODE *child_node; - - - /* - * Get the owner ID from the Walk state - * The owner ID is used to track table deletion and - * deletion of objects created by methods - */ - if (walk_state) { - owner_id = walk_state->owner_id; - } - - - /* link the new entry into the parent and existing children */ - - /* TBD: Could be first, last, or alphabetic */ - - child_node = parent_node->child; - if (!child_node) { - parent_node->child = node; - } - - else { - while (!(child_node->flags & ANOBJ_END_OF_PEER_LIST)) { - child_node = child_node->peer; - } - - child_node->peer = node; - - /* Clear end-of-list flag */ - - child_node->flags &= ~ANOBJ_END_OF_PEER_LIST; - } - - /* Init the new entry */ - - node->owner_id = owner_id; - node->flags |= ANOBJ_END_OF_PEER_LIST; - node->peer = parent_node; - - - /* - * If adding a name with unknown type, or having to - * add the region in order to define fields in it, we - * have a forward reference. - */ - - if ((ACPI_TYPE_ANY == type) || - (INTERNAL_TYPE_DEF_FIELD_DEFN == type) || - (INTERNAL_TYPE_BANK_FIELD_DEFN == type)) - { - /* - * We don't want to abort here, however! - * We will fill in the actual type when the - * real definition is found later. - */ - - } - - /* - * The Def_field_defn and Bank_field_defn cases are actually - * looking up the Region in which the field will be defined - */ - - if ((INTERNAL_TYPE_DEF_FIELD_DEFN == type) || - (INTERNAL_TYPE_BANK_FIELD_DEFN == type)) - { - type = ACPI_TYPE_REGION; - } - - /* - * Scope, Def_any, and Index_field_defn are bogus "types" which do - * not actually have anything to do with the type of the name - * being looked up. Save any other value of Type as the type of - * the entry. - */ - - if ((type != INTERNAL_TYPE_SCOPE) && - (type != INTERNAL_TYPE_DEF_ANY) && - (type != INTERNAL_TYPE_INDEX_FIELD_DEFN)) - { - node->type = (u8) type; - } - - /* - * Increment the reference count(s) of all parents up to - * the root! - */ - - while ((node = acpi_ns_get_parent_object (node)) != NULL) { - node->reference_count++; - } - - return; -} + MODULE_NAME ("nsalloc"); -/******************************************************************************* +/**************************************************************************** * - * FUNCTION: Acpi_ns_delete_children + * FUNCTION: Acpi_ns_allocate_name_table * - * PARAMETERS: Parent_node - Delete this objects children + * PARAMETERS: Nte_count - Count of NTEs to allocate * - * RETURN: None. + * RETURN: The address of the first nte in the array, or NULL * - * DESCRIPTION: Delete all children of the parent object. Deletes a - * "scope". + * DESCRIPTION: Allocate an array of nte, including prepended link space + * Array is set to all zeros via Acpi_os_callcate(). * - ******************************************************************************/ + ***************************************************************************/ -void -acpi_ns_delete_children ( - ACPI_NAMESPACE_NODE *parent_node) +ACPI_NAME_TABLE * +acpi_ns_allocate_name_table ( + u32 num_entries) { - ACPI_NAMESPACE_NODE *child_node; - ACPI_NAMESPACE_NODE *next_node; - u8 flags; - - - if (!parent_node) { - return; - } - - /* If no children, all done! */ - - child_node = parent_node->child; - if (!child_node) { - return; - } - - /* - * Deallocate all children at this level - */ - do - { - /* Get the things we need */ - - next_node = child_node->peer; - flags = child_node->flags; - - /* Grandchildren should have all been deleted already */ - + ACPI_NAME_TABLE *name_table = NULL; + ACPI_SIZE alloc_size; - /* Now we can free this child object */ - DECREMENT_NAME_TABLE_METRICS (sizeof (ACPI_NAMESPACE_NODE)); + alloc_size = sizeof (ACPI_NAME_TABLE) + ((num_entries - 1) * + sizeof (ACPI_NAMED_OBJECT)); - /* - * Detach an object if there is one - */ - - if (child_node->object) { - acpi_ns_detach_object (child_node); - } - - acpi_cm_free (child_node); - - /* And move on to the next child in the list */ - - child_node = next_node; + name_table = acpi_cm_callocate (alloc_size); - } while (!(flags & ANOBJ_END_OF_PEER_LIST)); - - /* Clear the parent's child pointer */ - - parent_node->child = NULL; - - return; + return (name_table); } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_delete_namespace_subtree * @@ -329,27 +72,22 @@ * * RETURN: None. * - * DESCRIPTION: Delete a subtree of the namespace. This includes all objects - * stored within the subtree. Scope tables are deleted also + * DESCRIPTION: Delete a subtree of the namespace. This includes all objects stored + * within the subtree. Scope tables are deleted also * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_ns_delete_namespace_subtree ( - ACPI_NAMESPACE_NODE *parent_node) + ACPI_NAMED_OBJECT *parent_entry) { - ACPI_NAMESPACE_NODE *child_node; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_NAMED_OBJECT *child_entry; u32 level; + ACPI_OBJECT_INTERNAL *obj_desc; - if (!parent_node) { - return (AE_OK); - } - - - child_node = 0; - level = 1; + child_entry = 0; + level = 1; /* * Traverse the tree of objects until we bubble back up @@ -362,32 +100,53 @@ * Null returned if not found */ - child_node = acpi_ns_get_next_object (ACPI_TYPE_ANY, parent_node, - child_node); - if (child_node) { + child_entry = acpi_ns_get_next_object (ACPI_TYPE_ANY, + parent_entry, + child_entry); + + if (child_entry) { /* * Found an object - delete the object within * the Value field */ - obj_desc = acpi_ns_get_attached_object (child_node); + obj_desc = acpi_ns_get_attached_object (child_entry); if (obj_desc) { - acpi_ns_detach_object (child_node); + acpi_ns_detach_object (child_entry); acpi_cm_remove_reference (obj_desc); } + /* + * Clear the NTE in case this scope is reused + * (e.g., a control method scope) + */ + + child_entry->type = ACPI_TYPE_ANY; + child_entry->name = 0; + /* Check if this object has any children */ - if (acpi_ns_get_next_object (ACPI_TYPE_ANY, child_node, 0)) { + if (acpi_ns_get_next_object (ACPI_TYPE_ANY, child_entry, 0)) { /* * There is at least one child of this object, * visit the object */ level++; - parent_node = child_node; - child_node = 0; + parent_entry = child_entry; + child_entry = 0; + } + + else { + /* + * There may be a name table even if there are + * no children + */ + + acpi_ns_delete_name_table (child_entry->child_table); + child_entry->child_table = NULL; + } } @@ -399,18 +158,26 @@ level--; /* - * Now delete all of the children of this parent - * all at the same time. + * Delete the scope (Name Table) associated with + * the parent object */ - acpi_ns_delete_children (parent_node); + /* Don't delete the top level scope, this allows + * the dynamic deletion of objects created underneath + * control methods! + */ + + if (level != 0) { + acpi_ns_delete_name_table (parent_entry->child_table); + parent_entry->child_table = NULL; + } /* New "last child" is this parent object */ - child_node = parent_node; + child_entry = parent_entry; /* Now we can move up the tree to the grandparent */ - parent_node = acpi_ns_get_parent_object (parent_node); + parent_entry = acpi_ns_get_parent_entry (parent_entry); } } @@ -419,55 +186,70 @@ } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_remove_reference * - * PARAMETERS: Node - Named object whose reference count is to be - * decremented + * PARAMETERS: Entry - NTE whose reference count is to be decremented * * RETURN: None. * - * DESCRIPTION: Remove a Node reference. Decrements the reference count - * of all parent Nodes up to the root. Any object along - * the way that reaches zero references is freed. + * DESCRIPTION: Remove an NTE reference. Decrements the reference count of + * all parent NTEs up to the root. Any NTE along the way that + * reaches zero references is freed. * - ******************************************************************************/ + ***************************************************************************/ void acpi_ns_remove_reference ( - ACPI_NAMESPACE_NODE *node) + ACPI_NAMED_OBJECT *entry) { - ACPI_NAMESPACE_NODE *next_node; + ACPI_NAMED_OBJECT *this_entry; + + + /* There may be a name table even if there are no children */ + + acpi_ns_delete_name_table (entry->child_table); + entry->child_table = NULL; /* - * Decrement the reference count(s) of this object and all - * objects up to the root, Delete anything with zero remaining references. + * Decrement the reference count(s) of all parents up to the root, + * And delete anything with zero remaining references. */ - next_node = node; - while (next_node) { - /* Decrement the reference count on this object*/ + this_entry = entry; + while (this_entry) { + /* Decrement the reference */ - next_node->reference_count--; + this_entry->reference_count--; - /* Delete the object if no more references */ + /* Delete entry if no more references */ + + if (!this_entry->reference_count) { + /* Delete the scope if present */ + + if (this_entry->child_table) { + acpi_ns_delete_name_table (this_entry->child_table); + this_entry->child_table = NULL; + } + + /* + * Mark the entry free + * (This doesn't deallocate anything) + */ - if (!next_node->reference_count) { - /* Delete all children and delete the object */ + acpi_ns_free_table_entry (this_entry); - acpi_ns_delete_children (next_node); - acpi_ns_delete_node (next_node); } /* Move up to parent */ - next_node = acpi_ns_get_parent_object (next_node); + this_entry = acpi_ns_get_parent_entry (this_entry); } } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_delete_namespace_by_owner * @@ -479,21 +261,21 @@ * specific ID. Used to delete entire ACPI tables. All * reference counts are updated. * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_ns_delete_namespace_by_owner ( u16 owner_id) { - ACPI_NAMESPACE_NODE *child_node; + ACPI_NAMED_OBJECT *child_entry; u32 level; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_NAMESPACE_NODE *parent_node; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_NAMED_OBJECT *parent_entry; - parent_node = acpi_gbl_root_node; - child_node = 0; - level = 1; + parent_entry = acpi_gbl_root_object; + child_entry = 0; + level = 1; /* * Traverse the tree of objects until we bubble back up @@ -506,65 +288,124 @@ * Null returned if not found */ - child_node = acpi_ns_get_next_object (ACPI_TYPE_ANY, parent_node, - child_node); + child_entry = acpi_ns_get_next_object (ACPI_TYPE_ANY, + parent_entry, + child_entry); - if (child_node) { - if (child_node->owner_id == owner_id) { + if (child_entry) { + if (child_entry->owner_id == owner_id) { /* * Found an object - delete the object within * the Value field */ - obj_desc = acpi_ns_get_attached_object (child_node); + obj_desc = acpi_ns_get_attached_object (child_entry); if (obj_desc) { - acpi_ns_detach_object (child_node); + acpi_ns_detach_object (child_entry); acpi_cm_remove_reference (obj_desc); } } /* Check if this object has any children */ - if (acpi_ns_get_next_object (ACPI_TYPE_ANY, child_node, 0)) { + if (acpi_ns_get_next_object (ACPI_TYPE_ANY, child_entry, 0)) { /* * There is at least one child of this object, * visit the object */ level++; - parent_node = child_node; - child_node = 0; + parent_entry = child_entry; + child_entry = 0; } - else if (child_node->owner_id == owner_id) { - acpi_ns_remove_reference (child_node); + else if (child_entry->owner_id == owner_id) { + acpi_ns_remove_reference (child_entry); } } else { /* - * No more children in this object. Move up to grandparent. + * No more children in this object. + * We will move up to the grandparent. */ level--; + /* + * Delete the scope (Name Table) associated with + * the parent object + */ + /* Don't delete the top level scope, this allows + * the dynamic deletion of objects created underneath + * control methods! + */ + + if (level != 0) { - if (parent_node->owner_id == owner_id) { - acpi_ns_remove_reference (parent_node); + if (parent_entry->owner_id == owner_id) { + acpi_ns_remove_reference (parent_entry); } } + /* New "last child" is this parent object */ - child_node = parent_node; + child_entry = parent_entry; /* Now we can move up the tree to the grandparent */ - parent_node = acpi_ns_get_parent_object (parent_node); + parent_entry = acpi_ns_get_parent_entry (parent_entry); } } return (AE_OK); +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_delete_name_table + * + * PARAMETERS: Scope - A handle to the scope to be deleted + * + * RETURN: None. + * + * DESCRIPTION: Delete a namespace Name Table with zero or + * more appendages. The table and all appendages are deleted. + * + ***************************************************************************/ + +void +acpi_ns_delete_name_table ( + ACPI_NAME_TABLE *name_table) +{ + ACPI_NAME_TABLE *this_table; + ACPI_NAME_TABLE *next_table; + + + if (!name_table) { + return; + } + + this_table = name_table; + + + /* + * Deallocate the name table and all appendages + */ + do + { + next_table = this_table->next_table; + + /* Now we can free the table */ + + acpi_cm_free (this_table); + this_table = next_table; + + } while (this_table); + + return; } diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nsdump.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nsdump.c --- linux-2.4.0-test9/drivers/acpi/namespace/nsdump.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nsdump.c Wed Dec 31 16:00:00 1969 @@ -1,36 +0,0 @@ -/****************************************************************************** - * - * Module Name: nsdump - table dumping routines for debug - * $Revision: 78 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 R. Byron Moore - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - - -#include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "actables.h" - - -#define _COMPONENT NAMESPACE - MODULE_NAME ("nsdump") - - diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nseval.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nseval.c --- linux-2.4.0-test9/drivers/acpi/namespace/nseval.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nseval.c Thu Aug 24 18:16:02 2000 @@ -1,10 +1,10 @@ -/******************************************************************************* + +/****************************************************************************** * * Module Name: nseval - Object evaluation interfaces -- includes control * method lookup and execution. - * $Revision: 76 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -27,20 +27,20 @@ #include "acpi.h" #include "amlcode.h" -#include "acparser.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "parser.h" +#include "interp.h" +#include "namesp.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nseval") + MODULE_NAME ("nseval"); -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_evaluate_relative * - * PARAMETERS: Handle - The relative containing object + * PARAMETERS: Rel_obj_entry - NTE of the relative containing object * *Pathname - Name of method to execute, If NULL, the * handle is the object to execute * **Params - List of parameters to pass to the method, @@ -56,19 +56,19 @@ * * MUTEX: Locks Namespace * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ns_evaluate_relative ( - ACPI_NAMESPACE_NODE *handle, - NATIVE_CHAR *pathname, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_object) + ACPI_NAMED_OBJECT *handle, + char *pathname, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_object) { - ACPI_NAMESPACE_NODE *prefix_node; + ACPI_NAMED_OBJECT *rel_obj_entry; ACPI_STATUS status; - ACPI_NAMESPACE_NODE *node = NULL; - NATIVE_CHAR *internal_path = NULL; + ACPI_NAMED_OBJECT *obj_entry = NULL; + char *internal_path = NULL; ACPI_GENERIC_STATE scope_info; @@ -86,12 +86,12 @@ return (status); } - /* Get the prefix handle and Node */ + /* Get the prefix handle and NTE */ acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - prefix_node = acpi_ns_convert_handle_to_entry (handle); - if (!prefix_node) { + rel_obj_entry = acpi_ns_convert_handle_to_entry (handle); + if (!rel_obj_entry) { acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); status = AE_BAD_PARAMETER; goto cleanup; @@ -99,14 +99,15 @@ /* Lookup the name in the namespace */ - scope_info.scope.node = prefix_node->child; + scope_info.scope.name_table = rel_obj_entry->child_table; status = acpi_ns_lookup (&scope_info, internal_path, ACPI_TYPE_ANY, - IMODE_EXECUTE, NS_NO_UPSEARCH, NULL, - &node); + IMODE_EXECUTE, + NS_NO_UPSEARCH, NULL, + &obj_entry); acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { goto cleanup; } @@ -115,7 +116,7 @@ * to evaluate it. */ - status = acpi_ns_evaluate_by_handle (node, params, return_object); + status = acpi_ns_evaluate_by_handle (obj_entry, params, return_object); cleanup: @@ -127,7 +128,7 @@ } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_evaluate_by_name * @@ -145,17 +146,17 @@ * * MUTEX: Locks Namespace * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ns_evaluate_by_name ( - NATIVE_CHAR *pathname, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_object) + char *pathname, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_object) { ACPI_STATUS status; - ACPI_NAMESPACE_NODE *node = NULL; - NATIVE_CHAR *internal_path = NULL; + ACPI_NAMED_OBJECT *obj_entry = NULL; + char *internal_path = NULL; /* Build an internal name string for the method */ @@ -170,12 +171,13 @@ /* Lookup the name in the namespace */ status = acpi_ns_lookup (NULL, internal_path, ACPI_TYPE_ANY, - IMODE_EXECUTE, NS_NO_UPSEARCH, NULL, - &node); + IMODE_EXECUTE, + NS_NO_UPSEARCH, NULL, + &obj_entry); acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { goto cleanup; } @@ -184,7 +186,7 @@ * to evaluate it. */ - status = acpi_ns_evaluate_by_handle (node, params, return_object); + status = acpi_ns_evaluate_by_handle (obj_entry, params, return_object); cleanup: @@ -199,16 +201,16 @@ } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_evaluate_by_handle * - * PARAMETERS: Handle - Method Node to execute + * PARAMETERS: Obj_entry - NTE of method to execute + * *Return_object - Where to put method's return value (if + * any). If NULL, no value is returned. * **Params - List of parameters to pass to the method, * terminated by NULL. Params itself may be * NULL if no parameters are being passed. - * *Return_object - Where to put method's return value (if - * any). If NULL, no value is returned. * * RETURN: Status * @@ -216,22 +218,22 @@ * * MUTEX: Locks Namespace * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ns_evaluate_by_handle ( - ACPI_NAMESPACE_NODE *handle, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_object) + ACPI_NAMED_OBJECT *handle, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_object) { - ACPI_NAMESPACE_NODE *node; + ACPI_NAMED_OBJECT *obj_entry; ACPI_STATUS status; - ACPI_OPERAND_OBJECT *local_return_object; + ACPI_OBJECT_INTERNAL *local_return_object; /* Check if namespace has been initialized */ - if (!acpi_gbl_root_node) { + if (!acpi_gbl_root_object->child_table) { return (AE_NO_NAMESPACE); } @@ -247,12 +249,12 @@ *return_object = NULL; } - /* Get the prefix handle and Node */ + /* Get the prefix handle and NTE */ acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - node = acpi_ns_convert_handle_to_entry (handle); - if (!node) { + obj_entry = acpi_ns_convert_handle_to_entry (handle); + if (!obj_entry) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -267,11 +269,14 @@ * In both cases, the namespace is unlocked by the * Acpi_ns* procedure */ - if (acpi_ns_get_type (node) == ACPI_TYPE_METHOD) { + + if (acpi_ns_get_type (obj_entry) == ACPI_TYPE_METHOD) { /* * Case 1) We have an actual control method to execute */ - status = acpi_ns_execute_control_method (node, params, + + status = acpi_ns_execute_control_method (obj_entry, + params, &local_return_object); } @@ -280,7 +285,9 @@ * Case 2) Object is NOT a method, just return its * current value */ - status = acpi_ns_get_object_value (node, &local_return_object); + + status = acpi_ns_get_object_value (obj_entry, + &local_return_object); } @@ -288,6 +295,7 @@ * Check if there is a return value on the stack that must * be dealt with */ + if (status == AE_CTRL_RETURN_VALUE) { /* * If the Method returned a value and the caller @@ -295,11 +303,13 @@ * the returned value to the object descriptor provided * by the caller. */ + if (return_object) { /* * Valid return object, copy the pointer to * the returned object */ + *return_object = local_return_object; } @@ -315,6 +325,7 @@ * Namespace was unlocked by the handling Acpi_ns* function, * so we just return */ + return (status); @@ -325,16 +336,14 @@ } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_execute_control_method * - * PARAMETERS: Method_node - The object/method + * PARAMETERS: Method_entry - The Nte of the object/method * **Params - List of parameters to pass to the method, * terminated by NULL. Params itself may be * NULL if no parameters are being passed. - * **Return_obj_desc - List of result objects to be returned - * from the method. * * RETURN: Status * @@ -342,31 +351,36 @@ * * MUTEX: Assumes namespace is locked * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ns_execute_control_method ( - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_obj_desc) + ACPI_NAMED_OBJECT *method_entry, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_obj_desc) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; /* Verify that there is a method associated with this object */ - obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) method_node); + obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) method_entry); if (!obj_desc) { return (AE_ERROR); } + /* + * Valid method, Set the current scope to that of the Method, + * and execute it. + */ + /* * Unlock the namespace before execution. This allows namespace access * via the external Acpi* interfaces while a method is being executed. * However, any namespace deletion must acquire both the namespace and - * interpreter locks to ensure that no thread is using the portion of the + * interpter locks to ensure that no thread is using the portion of the * namespace that is being deleted. */ @@ -375,17 +389,17 @@ /* * Excecute the method via the interpreter */ - status = acpi_aml_execute_method (method_node, params, return_obj_desc); + status = acpi_aml_execute_method (method_entry, params, return_obj_desc); return (status); } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_get_object_value * - * PARAMETERS: Node - The object + * PARAMETERS: Object_entry - The Nte of the object * * RETURN: Status * @@ -393,29 +407,30 @@ * * MUTEX: Assumes namespace is locked * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_ns_get_object_value ( - ACPI_NAMESPACE_NODE *node, - ACPI_OPERAND_OBJECT **return_obj_desc) + ACPI_NAMED_OBJECT *object_entry, + ACPI_OBJECT_INTERNAL **return_obj_desc) { ACPI_STATUS status = AE_OK; - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *val_desc; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *val_desc; /* * We take the value from certain objects directly */ - if ((node->type == ACPI_TYPE_PROCESSOR) || - (node->type == ACPI_TYPE_POWER)) + if ((object_entry->type == ACPI_TYPE_PROCESSOR) || + (object_entry->type == ACPI_TYPE_POWER)) { + /* * Create a Reference object to contain the object */ - obj_desc = acpi_cm_create_internal_object (node->type); + obj_desc = acpi_cm_create_internal_object (object_entry->type); if (!obj_desc) { status = AE_NO_MEMORY; goto unlock_and_exit; @@ -425,7 +440,7 @@ * Get the attached object */ - val_desc = acpi_ns_get_attached_object (node); + val_desc = acpi_ns_get_attached_object (object_entry); if (!val_desc) { status = AE_NULL_OBJECT; goto unlock_and_exit; @@ -435,25 +450,10 @@ * Just copy from the original to the return object */ - switch (node->type) - { - case ACPI_TYPE_PROCESSOR: - obj_desc->processor.proc_id = val_desc->processor.proc_id; - obj_desc->processor.address = val_desc->processor.address; - obj_desc->processor.sys_handler = val_desc->processor.sys_handler; - obj_desc->processor.drv_handler = val_desc->processor.drv_handler; - obj_desc->processor.addr_handler = val_desc->processor.addr_handler; - - break; - - case ACPI_TYPE_POWER: - obj_desc->power_resource.system_level = val_desc->power_resource.system_level; - obj_desc->power_resource.resource_order = val_desc->power_resource.resource_order; - obj_desc->power_resource.sys_handler = val_desc->power_resource.sys_handler; - obj_desc->power_resource.drv_handler = val_desc->power_resource.drv_handler; - - break; - } + MEMCPY (&obj_desc->common.first_non_common_byte, + &val_desc->common.first_non_common_byte, + (sizeof(ACPI_OBJECT_COMMON) - + sizeof(obj_desc->common.first_non_common_byte))); } @@ -473,19 +473,15 @@ /* Construct a descriptor pointing to the name */ obj_desc->reference.op_code = (u8) AML_NAME_OP; - obj_desc->reference.object = (void *) node; + obj_desc->reference.object = (void *) object_entry; /* * Use Acpi_aml_resolve_to_value() to get the associated value. * The call to Acpi_aml_resolve_to_value causes * Obj_desc (allocated above) to always be deleted. - * - * NOTE: we can get away with passing in NULL for a walk state - * because Obj_desc is guaranteed to not be a reference to either - * a method local or a method argument */ - status = acpi_aml_resolve_to_value (&obj_desc, NULL); + status = acpi_aml_resolve_to_value (&obj_desc); } /* @@ -493,7 +489,7 @@ * placed in Obj_desc. */ - if (ACPI_SUCCESS (status)) { + if (status == AE_OK) { status = AE_CTRL_RETURN_VALUE; *return_obj_desc = obj_desc; diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nsload.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nsload.c --- linux-2.4.0-test9/drivers/acpi/namespace/nsload.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nsload.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: nsload - namespace loading/expanding/contracting procedures - * $Revision: 28 $ * *****************************************************************************/ @@ -25,16 +25,16 @@ #include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "interp.h" +#include "namesp.h" #include "amlcode.h" -#include "acparser.h" -#include "acdispat.h" -#include "acdebug.h" +#include "parser.h" +#include "dispatch.h" +#include "debugger.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nsload") + MODULE_NAME ("nsload"); /******************************************************************************* @@ -42,7 +42,7 @@ * FUNCTION: Acpi_ns_parse_table * * PARAMETERS: Table_desc - An ACPI table descriptor for table to parse - * Start_node - Where to enter the table into the namespace + * Scope - Where to enter the table into the namespace * * RETURN: Status * @@ -53,85 +53,50 @@ ACPI_STATUS acpi_ns_parse_table ( ACPI_TABLE_DESC *table_desc, - ACPI_NAMESPACE_NODE *start_node) + ACPI_NAME_TABLE *scope) { ACPI_STATUS status; - /* - * AML Parse, pass 1 - * - * In this pass, we load most of the namespace. Control methods - * are not parsed until later. A parse tree is not created. Instead, - * each Parser Op subtree is deleted when it is finished. This saves - * a great deal of memory, and allows a small cache of parse objects - * to service the entire parse. The second pass of the parse then - * performs another complete parse of the AML.. - */ - - /* Create and init a Root Node */ + /* Create the root object */ acpi_gbl_parsed_namespace_root = acpi_ps_alloc_op (AML_SCOPE_OP); if (!acpi_gbl_parsed_namespace_root) { return (AE_NO_MEMORY); } - ((ACPI_PARSE2_OBJECT *) acpi_gbl_parsed_namespace_root)->name = ACPI_ROOT_NAME; + /* Initialize the root object */ + ((ACPI_NAMED_OP *) acpi_gbl_parsed_namespace_root)->name = ACPI_ROOT_NAME; /* Pass 1: Parse everything except control method bodies */ status = acpi_ps_parse_aml (acpi_gbl_parsed_namespace_root, table_desc->aml_pointer, - table_desc->aml_length, - ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE, - NULL, NULL, NULL, - acpi_ds_load1_begin_op, - acpi_ds_load1_end_op); + table_desc->aml_length, 0); if (ACPI_FAILURE (status)) { return (status); } - acpi_ps_delete_parse_tree (acpi_gbl_parsed_namespace_root); + +#ifndef PARSER_ONLY + status = acpi_ps_walk_parsed_aml (acpi_ps_get_child (acpi_gbl_parsed_namespace_root), + acpi_gbl_parsed_namespace_root, NULL, + scope, NULL, NULL, + table_desc->table_id, + acpi_ds_load2_begin_op, + acpi_ds_load2_end_op); /* - * AML Parse, pass 2 - * - * In this pass, we resolve forward references and other things - * that could not be completed during the first pass. - * Another complete parse of the AML is performed, but the - * overhead of this is compensated for by the fact that the - * parse objects are all cached. + * Now that the internal namespace has been constructed, we can delete the + * parsed namespace, since it is no longer needed */ - /* Create and init a Root Node */ - - acpi_gbl_parsed_namespace_root = acpi_ps_alloc_op (AML_SCOPE_OP); - if (!acpi_gbl_parsed_namespace_root) { - return (AE_NO_MEMORY); - } - - ((ACPI_PARSE2_OBJECT *) acpi_gbl_parsed_namespace_root)->name = ACPI_ROOT_NAME; - - - /* Pass 2: Resolve forward references */ - - status = acpi_ps_parse_aml (acpi_gbl_parsed_namespace_root, - table_desc->aml_pointer, - table_desc->aml_length, - ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE, - NULL, NULL, NULL, - acpi_ds_load2_begin_op, - acpi_ds_load2_end_op); - - if (ACPI_FAILURE (status)) { - return (status); - } - acpi_ps_delete_parse_tree (acpi_gbl_parsed_namespace_root); acpi_gbl_parsed_namespace_root = NULL; +#endif return (status); @@ -155,7 +120,7 @@ ACPI_STATUS acpi_ns_load_table ( ACPI_TABLE_DESC *table_desc, - ACPI_NAMESPACE_NODE *node) + ACPI_NAMED_OBJECT *entry) { ACPI_STATUS status; @@ -181,7 +146,7 @@ */ acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - status = acpi_ns_parse_table (table_desc, node->child); + status = acpi_ns_parse_table (table_desc, entry->child_table); acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); if (ACPI_FAILURE (status)) { @@ -195,7 +160,7 @@ * parse trees. */ - status = acpi_ds_initialize_objects (table_desc, node); + status = acpi_ds_initialize_objects (table_desc, entry); return (status); } @@ -257,7 +222,7 @@ /* Now load the single DSDT */ - status = acpi_ns_load_table (table_desc, acpi_gbl_root_node); + status = acpi_ns_load_table (table_desc, acpi_gbl_root_object); if (ACPI_SUCCESS (status)) { table_desc->loaded_into_namespace = TRUE; } @@ -282,7 +247,7 @@ if (!table_desc->loaded_into_namespace) { status = acpi_ns_load_table (table_desc, - acpi_gbl_root_node); + acpi_gbl_root_object); if (ACPI_FAILURE (status)) { break; } @@ -311,7 +276,7 @@ if (!table_desc->loaded_into_namespace) { status = acpi_ns_load_table (table_desc, - acpi_gbl_root_node); + acpi_gbl_root_object); if (ACPI_FAILURE (status)) { break; } @@ -341,6 +306,52 @@ /****************************************************************************** * + * FUNCTION: Acpi_ns_free_table_entry + * + * PARAMETERS: Entry - The entry to be deleted + * + * RETURNS None + * + * DESCRIPTION: Free an entry in a namespace table. Delete any objects contained + * in the entry, unlink the entry, then mark it unused. + * + ******************************************************************************/ + +void +acpi_ns_free_table_entry ( + ACPI_NAMED_OBJECT *entry) +{ + + if (!entry) { + return; + } + + /* + * Need to delete + * 1) The scope, if any + * 2) An attached object, if any + */ + + if (entry->child_table) { + acpi_cm_free (entry->child_table); + entry->child_table = NULL; + } + + if (entry->object) { + acpi_ns_detach_object (entry->object); + entry->object = NULL; + } + + /* Mark the entry unallocated */ + + entry->name = 0; + + return; +} + + +/****************************************************************************** + * * FUNCTION: Acpi_ns_delete_subtree * * PARAMETERS: Start_handle - Handle in namespace where search begins @@ -383,6 +394,15 @@ child_handle, &next_child_handle); + /* + * Regardless of the success or failure of the + * previous operation, we are done with the previous + * object (if there was one), and any children it + * may have had. So we can now safely delete it (and + * its scope, if any) + */ + + acpi_ns_free_table_entry (child_handle); child_handle = next_child_handle; @@ -412,11 +432,6 @@ * the object's parent */ level--; - - /* Delete all children now */ - - acpi_ns_delete_children (child_handle); - child_handle = parent_handle; acpi_get_parent (parent_handle, &parent_handle); } @@ -424,7 +439,7 @@ /* Now delete the starting object, and we are done */ - acpi_ns_delete_node (child_handle); + acpi_ns_free_table_entry ((ACPI_NAMED_OBJECT*) child_handle); return (AE_OK); @@ -454,7 +469,7 @@ /* Parameter validation */ - if (!acpi_gbl_root_node) { + if (!acpi_gbl_root_object->child_table) { return (AE_NO_NAMESPACE); } diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nsnames.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nsnames.c --- linux-2.4.0-test9/drivers/acpi/namespace/nsnames.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nsnames.c Wed Jul 5 11:23:12 2000 @@ -1,9 +1,9 @@ -/******************************************************************************* + +/****************************************************************************** * * Module Name: nsnames - Name manipulation and search - * $Revision: 48 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -26,40 +26,42 @@ #include "acpi.h" #include "amlcode.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "interp.h" +#include "namesp.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nsnames") + MODULE_NAME ("nsnames"); -/******************************************************************************* +/**************************************************************************** * - * FUNCTION: Acpi_ns_get_table_pathname + * FUNCTION: Acpi_ns_name_of_scope * - * PARAMETERS: Node - Scope whose name is needed + * PARAMETERS: Scope - Scope whose name is needed * * RETURN: Pointer to storage containing the fully qualified name of * the scope, in Label format (all segments strung together * with no separators) * - * DESCRIPTION: Used for debug printing in Acpi_ns_search_table(). - * - ******************************************************************************/ - -NATIVE_CHAR * -acpi_ns_get_table_pathname ( - ACPI_NAMESPACE_NODE *node) + * DESCRIPTION: Used via Acpi_ns_name_of_current_scope() and Acpi_ns_last_fQN() + * for label generation in the interpreter, and for debug + * printing in Acpi_ns_search_table(). + * + ***************************************************************************/ + +char * +acpi_ns_name_of_scope ( + ACPI_NAME_TABLE *scope) { - NATIVE_CHAR *name_buffer; - u32 size; + char *name_buffer; + ACPI_SIZE size; ACPI_NAME name; - ACPI_NAMESPACE_NODE *child_node; - ACPI_NAMESPACE_NODE *parent_node; + ACPI_NAMED_OBJECT *entry_to_search; + ACPI_NAMED_OBJECT *parent_entry; - if (!acpi_gbl_root_node || !node) { + if (!acpi_gbl_root_object->child_table || !scope) { /* * If the name space has not been initialized, * this function should not have been called. @@ -67,26 +69,26 @@ return (NULL); } - child_node = node->child; + entry_to_search = scope->entries; - /* Calculate required buffer size based on depth below root */ + /* Calculate required buffer size based on depth below root NT */ size = 1; - parent_node = child_node; - while (parent_node) { - parent_node = acpi_ns_get_parent_object (parent_node); - if (parent_node) { + parent_entry = entry_to_search; + while (parent_entry) { + parent_entry = acpi_ns_get_parent_entry (parent_entry); + if (parent_entry) { size += ACPI_NAME_SIZE; } } - /* Allocate a buffer to be returned to caller */ + /* Allocate the buffer */ name_buffer = acpi_cm_callocate (size + 1); if (!name_buffer) { - REPORT_ERROR ("Ns_get_table_pathname: allocation failure"); + REPORT_ERROR ("Ns_name_of_scope: allocation failure"); return (NULL); } @@ -95,15 +97,15 @@ name_buffer[size] = '\0'; while ((size > ACPI_NAME_SIZE) && - acpi_ns_get_parent_object (child_node)) + acpi_ns_get_parent_entry (entry_to_search)) { size -= ACPI_NAME_SIZE; - name = acpi_ns_find_parent_name (child_node); + name = acpi_ns_find_parent_name (entry_to_search); /* Put the name into the buffer */ MOVE_UNALIGNED32_TO_32 ((name_buffer + size), &name); - child_node = acpi_ns_get_parent_object (child_node); + entry_to_search = acpi_ns_get_parent_entry (entry_to_search); } name_buffer[--size] = AML_ROOT_PREFIX; @@ -113,39 +115,69 @@ } -/******************************************************************************* +/**************************************************************************** + * + * FUNCTION: Acpi_ns_name_of_current_scope + * + * PARAMETERS: none + * + * RETURN: pointer to storage containing the name of the current scope + * + ***************************************************************************/ + +char * +acpi_ns_name_of_current_scope ( + ACPI_WALK_STATE *walk_state) +{ + char *scope_name; + + + if (walk_state && walk_state->scope_info) { + scope_name = + acpi_ns_name_of_scope (walk_state->scope_info->scope.name_table); + + return (scope_name); + } + + REPORT_ERROR ("Current scope pointer is invalid"); + + return (NULL); +} + + +/**************************************************************************** * * FUNCTION: Acpi_ns_handle_to_pathname * - * PARAMETERS: Target_handle - Handle of named object whose name is - * to be found + * PARAMETERS: Target_handle - Handle of nte whose name is to be found * Buf_size - Size of the buffer provided * User_buffer - Where the pathname is returned * - * RETURN: Status, Buffer is filled with pathname if status is AE_OK + * RETURN: Status, Buffer is filled with pathname if status == AE_OK * * DESCRIPTION: Build and return a full namespace pathname * * MUTEX: Locks Namespace * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_ns_handle_to_pathname ( ACPI_HANDLE target_handle, u32 *buf_size, - NATIVE_CHAR *user_buffer) + char *user_buffer) { ACPI_STATUS status = AE_OK; - ACPI_NAMESPACE_NODE *node; - ACPI_NAMESPACE_NODE *next_node; - u32 path_length; - u32 size; + ACPI_NAMED_OBJECT *entry_to_search = NULL; + ACPI_NAMED_OBJECT *temp = NULL; + ACPI_SIZE path_length = 0; + ACPI_SIZE size; u32 user_buf_size; ACPI_NAME name; + u8 namespace_was_locked; - if (!acpi_gbl_root_node || !target_handle) { + if (!acpi_gbl_root_object->child_table || !target_handle) { /* * If the name space has not been initialized, * this function should not have been called. @@ -154,8 +186,13 @@ return (AE_NO_NAMESPACE); } - node = acpi_ns_convert_handle_to_entry (target_handle); - if (!node) { + namespace_was_locked = acpi_gbl_acpi_mutex_info[ACPI_MTX_NAMESPACE].locked; + if (!namespace_was_locked) { + acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); + } + + entry_to_search = acpi_ns_convert_handle_to_entry (target_handle); + if (!entry_to_search) { return (AE_BAD_PARAMETER); } @@ -163,9 +200,9 @@ * Compute length of pathname as 5 * number of name segments. * Go back up the parent tree to the root */ - for (size = 0, next_node = node; - acpi_ns_get_parent_object (next_node); - next_node = acpi_ns_get_parent_object (next_node)) + for (size = 0, temp = entry_to_search; + acpi_ns_get_parent_entry (temp); + temp = acpi_ns_get_parent_entry (temp)) { size += PATH_SEGMENT_LENGTH; } @@ -180,7 +217,7 @@ if (path_length > user_buf_size) { status = AE_BUFFER_OVERFLOW; - goto exit; + goto unlock_and_exit; } /* Store null terminator */ @@ -191,19 +228,19 @@ /* Put the original ACPI name at the end of the path */ MOVE_UNALIGNED32_TO_32 ((user_buffer + size), - &node->name); + &entry_to_search->name); user_buffer[--size] = PATH_SEPARATOR; /* Build name backwards, putting "." between segments */ - while ((size > ACPI_NAME_SIZE) && node) { + while ((size > ACPI_NAME_SIZE) && entry_to_search) { size -= ACPI_NAME_SIZE; - name = acpi_ns_find_parent_name (node); + name = acpi_ns_find_parent_name (entry_to_search); MOVE_UNALIGNED32_TO_32 ((user_buffer + size), &name); user_buffer[--size] = PATH_SEPARATOR; - node = acpi_ns_get_parent_object (node); + entry_to_search = acpi_ns_get_parent_entry (entry_to_search); } /* @@ -213,8 +250,254 @@ user_buffer[size] = '\\'; -exit: + +unlock_and_exit: + + if (!namespace_was_locked) { + acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); + } + return (status); +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_pattern_match + * + * PARAMETERS: Obj_entry - A namespace entry + * Search_for - Wildcard pattern string + * + * DESCRIPTION: Matches a namespace name against a wildcard pattern. Only + * a very simple pattern - 4 chars, either a valid char or a "?" + * to match any. + * + ***************************************************************************/ + +u8 +acpi_ns_pattern_match ( + ACPI_NAMED_OBJECT *obj_entry, + char *search_for) +{ + s32 i; + + + for (i = 0; i < ACPI_NAME_SIZE; i++) { + if (search_for[i] != '?' && + search_for[i] != ((char *) &obj_entry->name)[i]) + { + /* No match */ + + return FALSE; + } + } + + /* name matches pattern */ + + return TRUE; +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_name_compare + * + * PARAMETERS: Obj_handle - A namespace entry + * Level - Current nesting level + * Context - A FIND_CONTEXT structure + * + * DESCRIPTION: A User_function called by Acpi_ns_walk_namespace(). It performs + * a pattern match for Acpi_ns_low_find_names(), and updates the list + * and count as required. + * + ***************************************************************************/ + +ACPI_STATUS +acpi_ns_name_compare ( + ACPI_HANDLE obj_handle, + u32 level, + void *context, + void **return_value) +{ + FIND_CONTEXT *find = context; + + + /* Match, yes or no? */ + + if (acpi_ns_pattern_match ((ACPI_NAMED_OBJECT*) obj_handle, + find->search_for)) + { + /* Name matches pattern */ + + if (find->list) { + find->list[*(find->count)] = obj_handle; + } + + ++*(find->count); + } + + /* Don't terminate the walk */ + return AE_OK; +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_low_find_names + * + * PARAMETERS: *This_entry - Table to be searched + * *Search_for - Pattern to be found. + * 4 bytes, ? matches any character. + * *Count - Output count of matches found. + * Outermost caller should preset to 0 + * List[] - Output array of handles. If + * null, only the count is obtained. + * Max_depth - Maximum depth of search. Use + * INT_MAX for an effectively + * unlimited depth. + * + * DESCRIPTION: Low-level find name. + * Traverse the name space finding names which match a search + * pattern, and return an array of handles in List[]. + * + ***************************************************************************/ + +void +acpi_ns_low_find_names ( + ACPI_NAMED_OBJECT *this_entry, + char *search_for, + s32 *count, + ACPI_HANDLE list[], + s32 max_depth) +{ + FIND_CONTEXT find; + + + if (0 == max_depth || !this_entry || !search_for || !count) { + /* + * Zero requested depth, nothing to search, + * nothing to search for, or count pointer bad + */ + + return; + } + + /* Init the context structure used by compare routine */ + + find.list = list; + find.count = count; + find.search_for = search_for; + + /* Walk the namespace and find all matches */ + + acpi_ns_walk_namespace (ACPI_TYPE_ANY, (ACPI_HANDLE) this_entry, + max_depth, NS_WALK_NO_UNLOCK, + acpi_ns_name_compare, &find, NULL); + + if (list) { + /* null-terminate the output array */ + + list[*count] = (ACPI_HANDLE) 0; + } + + return; +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_find_names + + * + * PARAMETERS: *Search_for - pattern to be found. + * 4 bytes, ? matches any character. + * If NULL, "????" will be used. + * Start_handle - Root of subtree to be searched, or + * NS_ALL to search the entire namespace + * Max_depth - Maximum depth of search. Use INT_MAX + * for an effectively unlimited depth. + * + * DESCRIPTION: Traverse the name space finding names which match a search + * pattern, and return an array of handles. The end of the + * array is marked by the value (ACPI_HANDLE)0. A return value + * of (ACPI_HANDLE *)0 indicates that no matching names were + * found or that space for the list could not be allocated. + * if Start_handle is NS_ALL (null) search from the root, + * else it is a handle whose children are to be searched. + * + ***************************************************************************/ + +ACPI_HANDLE * +acpi_ns_find_names ( + char *search_for, + ACPI_HANDLE start_handle, + s32 max_depth) +{ + ACPI_HANDLE *list = NULL; + s32 count; + + + if (!acpi_gbl_root_object->child_table) { + /* + * If the name space has not been initialized, + * there surely are no matching names. + */ + return (NULL); + } + + if (NS_ALL == start_handle) { + /* base is root */ + + start_handle = acpi_gbl_root_object; + } + + else if (((ACPI_NAMED_OBJECT *) start_handle)->child_table) { + /* base has children to search */ + + start_handle = + ((ACPI_NAMED_OBJECT *) start_handle)->child_table->entries; + } + + else { + /* + * If base is not the root and has no children, + * there is nothing to search. + */ + return (NULL); + } + + if (!search_for) { + /* Search name not specified */ + + search_for = "????"; + } + + + /* Pass 1. Get required buffer size, don't try to build list */ + + count = 0; + acpi_ns_low_find_names (start_handle, search_for, &count, + NULL, max_depth); + + if (0 == count) { + return (NULL); + } + + /* Allow for trailing null */ + count++; + + list = acpi_cm_callocate (count * sizeof(ACPI_HANDLE)); + if (!list) { + REPORT_ERROR ("Ns_find_names: allocation failure"); + return (NULL); + } + + /* Pass 2. Fill buffer */ + + count = 0; + acpi_ns_low_find_names (start_handle, search_for, &count, list, max_depth); + + return (list); } diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nsobject.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nsobject.c --- linux-2.4.0-test9/drivers/acpi/namespace/nsobject.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nsobject.c Wed Jul 5 11:23:12 2000 @@ -1,10 +1,10 @@ -/******************************************************************************* + +/****************************************************************************** * * Module Name: nsobject - Utilities for objects attached to namespace - * table entries - * $Revision: 44 $ + * table entries * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -27,20 +27,20 @@ #include "acpi.h" #include "amlcode.h" -#include "acnamesp.h" -#include "acinterp.h" -#include "actables.h" +#include "namesp.h" +#include "interp.h" +#include "tables.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nsobject") + MODULE_NAME ("nsobject"); -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_attach_object * - * PARAMETERS: Node - Parent Node + * PARAMETERS: Handle - Handle of nte * Object - Object to be attached * Type - Type of object, or ACPI_TYPE_ANY if not * known @@ -51,16 +51,17 @@ * * MUTEX: Assumes namespace is locked * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_ns_attach_object ( - ACPI_NAMESPACE_NODE *node, - ACPI_OPERAND_OBJECT *object, + ACPI_HANDLE handle, + ACPI_HANDLE object, OBJECT_TYPE_INTERNAL type) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_OPERAND_OBJECT *previous_obj_desc; + ACPI_NAMED_OBJECT *this_entry = (ACPI_NAMED_OBJECT*) handle; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *previous_obj_desc; OBJECT_TYPE_INTERNAL obj_type = ACPI_TYPE_ANY; u8 flags; u16 opcode; @@ -70,17 +71,17 @@ * Parameter validation */ - if (!acpi_gbl_root_node) { + if (!acpi_gbl_root_object->child_table) { /* Name space not initialized */ REPORT_ERROR ("Ns_attach_object: Name space not initialized"); return (AE_NO_NAMESPACE); } - if (!node) { + if (!handle) { /* Invalid handle */ - REPORT_ERROR ("Ns_attach_object: Null Named_obj handle"); + REPORT_ERROR ("Ns_attach_object: Null name handle"); return (AE_BAD_PARAMETER); } @@ -92,7 +93,7 @@ return (AE_BAD_PARAMETER); } - if (!VALID_DESCRIPTOR_TYPE (node, ACPI_DESC_TYPE_NAMED)) { + if (!VALID_DESCRIPTOR_TYPE (handle, ACPI_DESC_TYPE_NAMED)) { /* Not a name handle */ REPORT_ERROR ("Ns_attach_object: Invalid handle"); @@ -101,15 +102,15 @@ /* Check if this object is already attached */ - if (node->object == object) { + if (this_entry->object == object) { return (AE_OK); } - /* Get the current flags field of the Node */ + /* Get the current flags field of the NTE */ - flags = node->flags; - flags &= ~ANOBJ_AML_ATTACHMENT; + flags = this_entry->flags; + flags &= ~NTE_AML_ATTACHMENT; /* If null object, we will just install it */ @@ -120,27 +121,27 @@ } /* - * If the object is an Node with an attached object, + * If the object is an NTE with an attached object, * we will use that (attached) object */ else if (VALID_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_NAMED) && - ((ACPI_NAMESPACE_NODE *) object)->object) + ((ACPI_NAMED_OBJECT*) object)->object) { /* * Value passed is a name handle and that name has a * non-null value. Use that name's value and type. */ - obj_desc = ((ACPI_NAMESPACE_NODE *) object)->object; - obj_type = ((ACPI_NAMESPACE_NODE *) object)->type; + obj_desc = ((ACPI_NAMED_OBJECT*) object)->object; + obj_type = ((ACPI_NAMED_OBJECT*) object)->type; /* * Copy appropriate flags */ - if (((ACPI_NAMESPACE_NODE *) object)->flags & ANOBJ_AML_ATTACHMENT) { - flags |= ANOBJ_AML_ATTACHMENT; + if (((ACPI_NAMED_OBJECT*) object)->flags & NTE_AML_ATTACHMENT) { + flags |= NTE_AML_ATTACHMENT; } } @@ -151,7 +152,7 @@ */ else { - obj_desc = (ACPI_OPERAND_OBJECT *) object; + obj_desc = (ACPI_OBJECT_INTERNAL *) object; /* If a valid type (non-ANY) was given, just use it */ @@ -172,10 +173,10 @@ else if (acpi_tb_system_table_pointer (object)) { /* * Object points into the AML stream. - * Set a flag bit in the Node to indicate this + * Set a flag bit in the NTE to indicate this */ - flags |= ANOBJ_AML_ATTACHMENT; + flags |= NTE_AML_ATTACHMENT; /* * The next byte (perhaps the next two bytes) @@ -262,13 +263,13 @@ /* Save the existing object (if any) for deletion later */ - previous_obj_desc = node->object; + previous_obj_desc = this_entry->object; /* Install the object and set the type, flags */ - node->object = obj_desc; - node->type = (u8) obj_type; - node->flags |= flags; + this_entry->object = obj_desc; + this_entry->type = (u8) obj_type; + this_entry->flags = flags; /* @@ -276,12 +277,86 @@ */ if (previous_obj_desc) { - /* One for the attach to the Node */ - + /* One for the attach to the NTE */ acpi_cm_remove_reference (previous_obj_desc); - /* Now delete */ + acpi_cm_remove_reference (previous_obj_desc); + } + return (AE_OK); +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_attach_method + * + * PARAMETERS: Handle - Handle of nte to be set + * Offset - Value to be set + * Length - Length associated with value + * + * DESCRIPTION: Record the given offset and p-code length of the method + * whose handle is passed + * + * MUTEX: Assumes namespace is locked + * + ***************************************************************************/ + +ACPI_STATUS +acpi_ns_attach_method ( + ACPI_HANDLE handle, + u8 *pcode_addr, + u32 pcode_length) +{ + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_OBJECT_INTERNAL *previous_obj_desc; + ACPI_NAMED_OBJECT *this_entry = (ACPI_NAMED_OBJECT*) handle; + + + /* Parameter validation */ + + if (!acpi_gbl_root_object->child_table) { + /* Name space uninitialized */ + + REPORT_ERROR ("Ns_attach_method: name space uninitialized"); + return (AE_NO_NAMESPACE); + } + + if (!handle) { + /* Null name handle */ + + REPORT_ERROR ("Ns_attach_method: null name handle"); + return (AE_BAD_PARAMETER); + } + + + /* Allocate a method descriptor */ + + obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_METHOD); + if (!obj_desc) { + /* Method allocation failure */ + + REPORT_ERROR ("Ns_attach_method: allocation failure"); + return (AE_NO_MEMORY); + } + + /* Init the method info */ + + obj_desc->method.pcode = pcode_addr; + obj_desc->method.pcode_length = pcode_length; + + /* Update reference count and install */ + + acpi_cm_add_reference (obj_desc); + + previous_obj_desc = this_entry->object; + this_entry->object = obj_desc; + + + /* + * Delete an existing object. Don't try to re-use in case it is shared + */ + if (previous_obj_desc) { acpi_cm_remove_reference (previous_obj_desc); } @@ -289,11 +364,11 @@ } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_detach_object * - * PARAMETERS: Node - An object whose Value will be deleted + * PARAMETERS: Object - An object whose Value will be deleted * * RETURN: None. * @@ -301,23 +376,24 @@ * Value is an allocated object, it is freed. Otherwise, the * field is simply cleared. * - ******************************************************************************/ + ***************************************************************************/ void acpi_ns_detach_object ( - ACPI_NAMESPACE_NODE *node) + ACPI_HANDLE object) { - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_NAMED_OBJECT *entry = object; + ACPI_OBJECT_INTERNAL *obj_desc; - obj_desc = node->object; + obj_desc = entry->object; if (!obj_desc) { return; } /* Clear the entry in all cases */ - node->object = NULL; + entry->object = NULL; /* Found a valid value */ @@ -336,16 +412,16 @@ } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_get_attached_object * - * PARAMETERS: Handle - Parent Node to be examined + * PARAMETERS: Handle - Handle of nte to be examined * - * RETURN: Current value of the object field from the Node whose - * handle is passed + * RETURN: Current value of the object field from nte whose handle is + * passed * - ******************************************************************************/ + ***************************************************************************/ void * acpi_ns_get_attached_object ( @@ -359,7 +435,122 @@ return (NULL); } - return (((ACPI_NAMESPACE_NODE *) handle)->object); + return (((ACPI_NAMED_OBJECT*) handle)->object); +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_compare_object + * + * PARAMETERS: Obj_handle - A namespace entry + * Level - Current nesting level + * Obj_desc - The value to be compared + * + * DESCRIPTION: A User_function called by Acpi_ns_walk_namespace(). It performs + * a comparison for Acpi_ns_find_attached_object(). The comparison is against + * the value in the value field of the Obj_handle (an NTE). + * If a match is found, the handle is returned, which aborts + * Acpi_ns_walk_namespace. + * + ***************************************************************************/ + +ACPI_STATUS +acpi_ns_compare_object ( + ACPI_HANDLE obj_handle, + u32 level, + void *obj_desc, + void **return_value) +{ + + if (((ACPI_NAMED_OBJECT*) obj_handle)->object == obj_desc) { + if (return_value) { + *return_value = obj_handle; + } + + /* Stop the walk */ + return AE_CTRL_TERMINATE; + } + + /* Not found, continue the walk */ + return AE_OK; +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_find_attached_object + * + * PARAMETERS: *Obj_desc - Value to be found in ptr_val field. + * Start_handle - Root of subtree to be searched, or + * NS_ALL to search the entire namespace + * Max_depth - Maximum depth of search. Use INT_MAX + * for an effectively unlimited depth. + * + * DESCRIPTION: Traverse the name space until finding a name whose Value field + * matches the Obj_desc parameter, and return a handle to that + * name, or (ACPI_HANDLE)0 if none exists. + * if Start_handle is NS_ALL (null) search from the root, + * else it is a handle whose children are to be searched. + * + ***************************************************************************/ + +ACPI_HANDLE +acpi_ns_find_attached_object ( + ACPI_OBJECT_INTERNAL *obj_desc, + ACPI_HANDLE start_handle, + s32 max_depth) +{ + ACPI_HANDLE ret_object; + ACPI_STATUS status; + + + /* Parameter validation */ + + if (!obj_desc) { + return (NULL); + } + + if (0 == max_depth) { + return (NULL); + } + + if (!acpi_gbl_root_object->child_table) { + /* + * If the name space has not been initialized, + * there surely are no matching values. + */ + return (NULL); + } + + if (NS_ALL == start_handle) { + start_handle = acpi_gbl_root_object; + } + + else { + /* + * If base is not the root and has no children, + * there is nothing to search. + */ + return (NULL); + } + + + /* + * Walk namespace until a match is found. + * Either the matching object is returned, or NULL in case + * of no match. + */ + status = acpi_ns_walk_namespace (ACPI_TYPE_ANY, start_handle, + max_depth, NS_WALK_NO_UNLOCK, + acpi_ns_compare_object, + obj_desc, &ret_object); + + if (ACPI_FAILURE (status)) { + ret_object = NULL; + } + + return (ret_object); } diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nssearch.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nssearch.c --- linux-2.4.0-test9/drivers/acpi/namespace/nssearch.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nssearch.c Wed Jul 5 11:23:12 2000 @@ -1,9 +1,9 @@ -/******************************************************************************* + +/****************************************************************************** * * Module Name: nssearch - Namespace search - * $Revision: 57 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -26,132 +26,192 @@ #include "acpi.h" #include "amlcode.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "interp.h" +#include "namesp.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nssearch") + MODULE_NAME ("nssearch"); -/******************************************************************************* +/**************************************************************************** * - * FUNCTION: Acpi_ns_search_node + * FUNCTION: Acpi_ns_search_one_scope * - * PARAMETERS: *Target_name - Ascii ACPI name to search for - * *Node - Starting table where search will begin + * PARAMETERS: *Entry_name - Ascii ACPI name to search for + * *Name_table - Starting table where search will begin * Type - Object type to match - * **Return_node - Where the matched Named obj is returned + * **Ret_entry - Where the matched NTE is returned + * *Ret_info - Where info about the search is returned * - * RETURN: Status + * RETURN: Status and return information via NS_SEARCH_DATA * * DESCRIPTION: Search a single namespace table. Performs a simple search, * does not add entries or search parents. * - * - * Named object lists are built (and subsequently dumped) in the - * order in which the names are encountered during the namespace load; - * - * All namespace searching is linear in this implementation, but - * could be easily modified to support any improved search - * algorithm. However, the linear search was chosen for simplicity - * and because the trees are small and the other interpreter - * execution overhead is relatively high. - * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS -acpi_ns_search_node ( - u32 target_name, - ACPI_NAMESPACE_NODE *node, +acpi_ns_search_one_scope ( + u32 entry_name, + ACPI_NAME_TABLE *name_table, OBJECT_TYPE_INTERNAL type, - ACPI_NAMESPACE_NODE **return_node) + ACPI_NAMED_OBJECT **ret_entry, + NS_SEARCH_DATA *ret_info) { - ACPI_NAMESPACE_NODE *next_node; - + u32 position; + ACPI_NAME_TABLE *this_table; + ACPI_NAME_TABLE *previous_table = name_table; + ACPI_NAMED_OBJECT *entries; + u8 table_full = TRUE; + ACPI_NAME_TABLE *table_with_empty_slots = NULL; + u32 empty_slot_position = 0; /* - * Search for name in this table, which is to say that we must search - * for the name among the children of this object + * Name tables are built (and subsequently dumped) in the + * order in which the names are encountered during the namespace load; + * + * All namespace searching will be linear; If a table overflows an + * additional segment will be allocated and added (chained). + * + * Start linear search at top of table */ + position = 0; + this_table = name_table; + entries = this_table->entries; - next_node = node->child; - while (next_node) { - /* Check for match against the name */ - if (next_node->name == target_name) { - /* - * Found matching entry. Capture type if - * appropriate before returning the entry. - */ + /* Init return data */ - /* - * The Def_field_defn and Bank_field_defn cases - * are actually looking up the Region in which - * the field will be defined - */ + if (ret_info) { + ret_info->name_table = this_table; + } + + + /* + * Search entire name table, including all linked appendages + */ - if ((INTERNAL_TYPE_DEF_FIELD_DEFN == type) || - (INTERNAL_TYPE_BANK_FIELD_DEFN == type)) - { - type = ACPI_TYPE_REGION; + while (this_table) { + /* + * Search for name in table, starting at Position. Stop + * searching upon examining all entries in the table. + * + */ + + entries = this_table->entries; + while (position < NS_TABLE_SIZE) { + /* Check for a valid entry */ + + if (!entries[position].name) { + if (table_full) { + /* + * There is room in the table for more + * entries, if necessary + */ + + table_full = FALSE; + table_with_empty_slots = this_table; + empty_slot_position = position; + } } - /* - * Scope, Def_any, and Index_field_defn are bogus - * "types" which do not actually have anything - * to do with the type of the name being looked - * up. For any other value of Type, if the type - * stored in the entry is Any (i.e. unknown), - * save the actual type. - */ + /* Search for name in table */ + + else if (entries[position].name == entry_name) { + /* + * Found matching entry. Capture type if + * appropriate before returning the entry. + */ + + /* + * The Def_field_defn and Bank_field_defn cases + * are actually looking up the Region in which + * the field will be defined + */ + + if ((INTERNAL_TYPE_DEF_FIELD_DEFN == type) || + (INTERNAL_TYPE_BANK_FIELD_DEFN == type)) + { + type = ACPI_TYPE_REGION; + } + + /* + * Scope, Def_any, and Index_field_defn are bogus + * "types" which do not actually have anything + * to do with the type of the name being looked + * up. For any other value of Type, if the type + * stored in the entry is Any (i.e. unknown), + * save the actual type. + */ + + if (type != INTERNAL_TYPE_SCOPE && + type != INTERNAL_TYPE_DEF_ANY && + type != INTERNAL_TYPE_INDEX_FIELD_DEFN && + entries[position].type == ACPI_TYPE_ANY) + { + entries[position].type = (u8) type; + } - if (type != INTERNAL_TYPE_SCOPE && - type != INTERNAL_TYPE_DEF_ANY && - type != INTERNAL_TYPE_INDEX_FIELD_DEFN && - next_node->type == ACPI_TYPE_ANY) - { - next_node->type = (u8) type; + *ret_entry = &entries[position]; + return (AE_OK); } - *return_node = next_node; - return (AE_OK); + + /* Didn't match name, move on to the next entry */ + + position++; } /* - * The last entry in the list points back to the parent, - * so a flag is used to indicate the end-of-list + * Just examined last slot in this table, move on + * to next appendate. + * All appendages, even to the root NT, contain + * NS_TABLE_SIZE entries. */ - if (next_node->flags & ANOBJ_END_OF_PEER_LIST) { - /* Searched entire list, we are done */ - - break; - } - /* Didn't match name, move on to the next peer object */ + previous_table = this_table; + this_table = this_table->next_table; - next_node = next_node->peer; + position = 0; } /* Searched entire table, not found */ + if (ret_info) { + /* + * Save info on if/where a slot is available + * (name was not found) + */ + + ret_info->table_full = table_full; + if (table_full) { + ret_info->name_table = previous_table; + } + + else { + ret_info->position = empty_slot_position; + ret_info->name_table = table_with_empty_slots; + } + } + return (AE_NOT_FOUND); } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_search_parent_tree * - * PARAMETERS: *Target_name - Ascii ACPI name to search for - * *Node - Starting table where search will begin + * PARAMETERS: *Entry_name - Ascii ACPI name to search for + * *Name_table - Starting table where search will begin * Type - Object type to match - * **Return_node - Where the matched Named Obj is returned + * **Ret_entry - Where the matched NTE is returned * * RETURN: Status * @@ -167,79 +227,274 @@ * indicates that the name is not found" (From ACPI Specification, * section 5.3) * - ******************************************************************************/ + ***************************************************************************/ + ACPI_STATUS acpi_ns_search_parent_tree ( - u32 target_name, - ACPI_NAMESPACE_NODE *node, + u32 entry_name, + ACPI_NAME_TABLE *name_table, OBJECT_TYPE_INTERNAL type, - ACPI_NAMESPACE_NODE **return_node) + ACPI_NAMED_OBJECT **ret_entry) { ACPI_STATUS status; - ACPI_NAMESPACE_NODE *parent_node; + ACPI_NAMED_OBJECT *parent_entry; + ACPI_NAMED_OBJECT *entries; - parent_node = acpi_ns_get_parent_object (node); + entries = name_table->entries; /* - * If there is no parent (at the root) or type is "local", we won't be - * searching the parent tree. + * If no parent or type is "local", we won't be searching the + * parent tree. */ - if ((acpi_ns_local (type)) || - (!parent_node)) + + if (!acpi_ns_local (type) && + name_table->parent_entry) { + parent_entry = name_table->parent_entry; + /* + * Search parents until found or we have backed up to + * the root + */ + while (parent_entry) { + /* Search parent scope */ + /* TBD: [Investigate] Why ACPI_TYPE_ANY? */ + + status = acpi_ns_search_one_scope (entry_name, + parent_entry->child_table, + ACPI_TYPE_ANY, + ret_entry, NULL); - return (AE_NOT_FOUND); + if (status == AE_OK) { + return (status); + } + + /* + * Not found here, go up another level + * (until we reach the root) + */ + + parent_entry = acpi_ns_get_parent_entry (parent_entry); + } + + /* Not found in parent tree */ } - /* Search the parent tree */ + return (AE_NOT_FOUND); +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_create_and_link_new_table + * + * PARAMETERS: *Name_table - The table that is to be "extended" by + * the creation of an appendage table. + * + * RETURN: Status + * + * DESCRIPTION: Allocate a new namespace table, initialize it, and link it + * into the parent table. + * + * NOTE: We are in the first or second pass load mode, want to + * add a new table entry, and the current table is full. + * + ***************************************************************************/ + +ACPI_STATUS +acpi_ns_create_and_link_new_table ( + ACPI_NAME_TABLE *name_table) +{ + ACPI_NAME_TABLE *new_table; + ACPI_NAMED_OBJECT *parent_entry; + ACPI_STATUS status = AE_OK; + + + /* Sanity check on the data structure */ + + if (name_table->next_table) { + /* We should never get here (an appendage already allocated) */ + + return (AE_AML_INTERNAL); + } + /* - * Search parents until found the target or we have backed up to - * the root + * We can use the parent entries from the current table + * Since the parent information remains the same. */ + parent_entry = name_table->parent_entry; - while (parent_node) { - /* Search parent scope */ - /* TBD: [Investigate] Why ACPI_TYPE_ANY? */ - status = acpi_ns_search_node (target_name, parent_node, - ACPI_TYPE_ANY, return_node); + /* Allocate and chain an appendage to the filled table */ - if (ACPI_SUCCESS (status)) { - return (status); - } + new_table = acpi_ns_allocate_name_table (NS_TABLE_SIZE); + if (!new_table) { + REPORT_ERROR ("Name Table appendage allocation failure"); + return (AE_NO_MEMORY); + } + + /* + * Allocation successful. Init the new table. + */ + name_table->next_table = new_table; + acpi_ns_initialize_table (new_table, parent_entry->child_table, + parent_entry); + return (status); +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_initialize_table + * + * PARAMETERS: New_table - The new table to be initialized + * Parent_table - The parent (owner) scope + * Parent_entry - The NTE for the parent + * + * RETURN: None + * + * DESCRIPTION: Initialize a new namespace table. Simple, but called + * from several places -- code should be kept in one place. + * + ***************************************************************************/ + +void +acpi_ns_initialize_table ( + ACPI_NAME_TABLE *new_table, + ACPI_NAME_TABLE *parent_table, + ACPI_NAMED_OBJECT *parent_entry) +{ + u8 i; + + + new_table->parent_entry = parent_entry; + new_table->parent_table = parent_table; + + + /* Init each named object entry in the table */ + + for (i = 0; i < NS_TABLE_SIZE; i++) { + new_table->entries[i].this_index = i; + new_table->entries[i].data_type = ACPI_DESC_TYPE_NAMED; + } + +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_initialize_entry + * + * PARAMETERS: Name_table - The containing table for the new NTE + * Position - Position (index) of the new NTE in the table + * Entry_name - ACPI name of the new entry + * Type - ACPI object type of the new entry + * Previous_entry - Link back to the previous entry (can span + * multiple tables) + * + * RETURN: None + * + * DESCRIPTION: Initialize a new entry within a namespace table. + * + ***************************************************************************/ + +void +acpi_ns_initialize_entry ( + ACPI_WALK_STATE *walk_state, + ACPI_NAME_TABLE *name_table, + u32 position, + u32 entry_name, + OBJECT_TYPE_INTERNAL type) +{ + ACPI_NAMED_OBJECT *new_entry; + u16 owner_id = TABLE_ID_DSDT; + ACPI_NAMED_OBJECT *entries; + + + /* + * Get the owner ID from the Walk state + * The owner ID is used to track table deletion and + * deletion of objects created by methods + */ + if (walk_state) { + owner_id = walk_state->owner_id; + } + + /* The new entry is given by two parameters */ + + entries = name_table->entries; + new_entry = &entries[position]; + + /* Init the new entry */ + + new_entry->data_type = ACPI_DESC_TYPE_NAMED; + new_entry->name = entry_name; + new_entry->owner_id = owner_id; + new_entry->reference_count = 1; + + + /* + * If adding a name with unknown type, or having to + * add the region in order to define fields in it, we + * have a forward reference. + */ + + if ((ACPI_TYPE_ANY == type) || + (INTERNAL_TYPE_DEF_FIELD_DEFN == type) || + (INTERNAL_TYPE_BANK_FIELD_DEFN == type)) + { /* - * Not found here, go up another level - * (until we reach the root) + * We don't want to abort here, however! + * We will fill in the actual type when the + * real definition is found later. */ - parent_node = acpi_ns_get_parent_object (parent_node); } + /* + * The Def_field_defn and Bank_field_defn cases are actually + * looking up the Region in which the field will be defined + */ + + if ((INTERNAL_TYPE_DEF_FIELD_DEFN == type) || + (INTERNAL_TYPE_BANK_FIELD_DEFN == type)) + { + type = ACPI_TYPE_REGION; + } - /* Not found in parent tree */ + /* + * Scope, Def_any, and Index_field_defn are bogus "types" which do + * not actually have anything to do with the type of the name + * being looked up. Save any other value of Type as the type of + * the entry. + */ - return (AE_NOT_FOUND); + if ((type != INTERNAL_TYPE_SCOPE) && + (type != INTERNAL_TYPE_DEF_ANY) && + (type != INTERNAL_TYPE_INDEX_FIELD_DEFN)) + { + new_entry->type = (u8) type; + } + + return; } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_ns_search_and_enter * - * PARAMETERS: Target_name - Ascii ACPI name to search for (4 chars) - * Walk_state - Current state of the walk - * *Node - Starting table where search will begin - * Interpreter_mode - Add names only in MODE_Load_pass_x. - * Otherwise,search only. + * PARAMETERS: Entry_name - Ascii ACPI name to search for (4 chars) + * *Name_table - Starting table where search will begin + * Interpreter_mode - Add names only in MODE_Load_pass_x. Otherwise, + * search only. * Type - Object type to match - * Flags - Flags describing the search restrictions - * **Return_node - Where the Node is returned + * **Ret_entry - Where the matched NTE is returned * * RETURN: Status * @@ -251,48 +506,51 @@ * In IMODE_EXECUTE, search only. * In other modes, search and add if not found. * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_ns_search_and_enter ( - u32 target_name, + u32 entry_name, ACPI_WALK_STATE *walk_state, - ACPI_NAMESPACE_NODE *node, + ACPI_NAME_TABLE *name_table, OPERATING_MODE interpreter_mode, OBJECT_TYPE_INTERNAL type, u32 flags, - ACPI_NAMESPACE_NODE **return_node) + ACPI_NAMED_OBJECT **ret_entry) { + u32 position; /* position in table */ ACPI_STATUS status; - ACPI_NAMESPACE_NODE *new_node; + NS_SEARCH_DATA search_info; + ACPI_NAMED_OBJECT *entry; + ACPI_NAMED_OBJECT *entries; /* Parameter validation */ - if (!node || !target_name || !return_node) { - REPORT_ERROR ("Ns_search_and_enter: bad (null)parameter"); + if (!name_table || !entry_name || !ret_entry) { + REPORT_ERROR ("Ns_search_and_enter: bad parameter"); return (AE_BAD_PARAMETER); } /* Name must consist of printable characters */ - if (!acpi_cm_valid_acpi_name (target_name)) { - REPORT_ERROR ("Ns_search_and_enter: Bad character in ACPI Name"); + if (!acpi_cm_valid_acpi_name (entry_name)) { return (AE_BAD_CHARACTER); } /* Try to find the name in the table specified by the caller */ - *return_node = ENTRY_NOT_FOUND; - status = acpi_ns_search_node (target_name, node, - type, return_node); + *ret_entry = ENTRY_NOT_FOUND; + status = acpi_ns_search_one_scope (entry_name, name_table, + type, ret_entry, &search_info); if (status != AE_NOT_FOUND) { /* * Either found it or there was an error * -- finished either way */ + return (status); } @@ -315,9 +573,10 @@ * to ACPI specification */ - status = acpi_ns_search_parent_tree (target_name, node, - type, return_node); - if (ACPI_SUCCESS (status)) { + status = acpi_ns_search_parent_tree (entry_name, name_table, + type, ret_entry); + + if (status == AE_OK) { return (status); } } @@ -326,22 +585,61 @@ /* * In execute mode, just search, never add names. Exit now. */ + if (interpreter_mode == IMODE_EXECUTE) { return (AE_NOT_FOUND); } - /* Create the new named object */ + /* + * Extract the pertinent info from the search result struct. + * Name_table and position might now point to an appendage + */ + name_table = search_info.name_table; + position = search_info.position; - new_node = acpi_ns_create_node (target_name); - if (!new_node) { - return (AE_NO_MEMORY); + + /* + * This block handles the case where the existing table is full. + * we must allocate a new table before we can initialize a new entry + */ + + if (search_info.table_full) { + status = acpi_ns_create_and_link_new_table (name_table); + if (status != AE_OK) { + return (status); + } + + /* Point to the first slot in the new table */ + + name_table = name_table->next_table; + position = 0; } - /* Install the new object into the parent's list of children */ - acpi_ns_install_node (walk_state, node, new_node, type); - *return_node = new_node; + /* + * There is room in the table (or we have just allocated a new one.) + * Initialize the new entry + */ + + acpi_ns_initialize_entry (walk_state, name_table, position, + entry_name, type); + + + entries = name_table->entries; + *ret_entry = &entries[position]; + entry = &entries[position]; + + /* + * Increment the reference count(s) of all parents up to + * the root! + */ + + while (acpi_ns_get_parent_entry (entry)) { + entry = acpi_ns_get_parent_entry (entry); + entry->reference_count++; + } + return (AE_OK); } diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nsutils.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nsutils.c --- linux-2.4.0-test9/drivers/acpi/namespace/nsutils.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nsutils.c Wed Jul 5 11:23:12 2000 @@ -1,8 +1,8 @@ + /****************************************************************************** * * Module Name: nsutils - Utilities for accessing ACPI namespace, accessing - * parents and siblings and Scope manipulation - * $Revision: 69 $ + * parents and siblings and Scope manipulation * *****************************************************************************/ @@ -26,13 +26,13 @@ #include "acpi.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "namesp.h" +#include "interp.h" #include "amlcode.h" -#include "actables.h" +#include "tables.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nsutils") + MODULE_NAME ("nsutils"); /**************************************************************************** @@ -49,7 +49,7 @@ u8 acpi_ns_valid_root_prefix ( - NATIVE_CHAR prefix) + char prefix) { return ((u8) (prefix == '\\')); @@ -70,7 +70,7 @@ u8 acpi_ns_valid_path_separator ( - NATIVE_CHAR sep) + char sep) { return ((u8) (sep == '.')); @@ -81,9 +81,9 @@ * * FUNCTION: Acpi_ns_get_type * - * PARAMETERS: Handle - Parent Node to be examined + * PARAMETERS: Handle - Handle of nte to be examined * - * RETURN: Type field from Node whose handle is passed + * RETURN: Type field from nte whose handle is passed * ***************************************************************************/ @@ -93,11 +93,13 @@ { if (!handle) { + /* Handle invalid */ + REPORT_WARNING ("Ns_get_type: Null handle"); return (ACPI_TYPE_ANY); } - return (((ACPI_NAMESPACE_NODE *) handle)->type); + return (((ACPI_NAMED_OBJECT*) handle)->type); } @@ -112,19 +114,19 @@ * ***************************************************************************/ -u32 +s32 acpi_ns_local ( OBJECT_TYPE_INTERNAL type) { if (!acpi_cm_valid_object_type (type)) { - /* Type code out of range */ + /* type code out of range */ REPORT_WARNING ("Ns_local: Invalid Object Type"); return (NSP_NORMAL); } - return ((u32) acpi_gbl_ns_properties[type] & NSP_LOCAL); + return ((s32) acpi_gbl_ns_properties[type] & NSP_LOCAL); } @@ -145,12 +147,12 @@ ACPI_STATUS acpi_ns_internalize_name ( - NATIVE_CHAR *external_name, - NATIVE_CHAR **converted_name) + char *external_name, + char **converted_name) { - NATIVE_CHAR *result = NULL; - NATIVE_CHAR *internal_name; - u32 num_segments; + char *result = NULL; + char *internal_name; + ACPI_SIZE num_segments; u8 fully_qualified = FALSE; u32 i; @@ -233,7 +235,7 @@ } else { - /* Convert s8 to uppercase and save it */ + /* Convert char to uppercase and save it */ result[i] = (char) TOUPPER (*external_name); external_name++; @@ -271,17 +273,166 @@ /**************************************************************************** * + * FUNCTION: Acpi_ns_externalize_name + * + * PARAMETERS: *Internal_name - Internal representation of name + * **Converted_name - Where to return the resulting + * external representation of name + * + * RETURN: Status + * + * DESCRIPTION: Convert internal name (e.g. 5c 2f 02 5f 50 52 5f 43 50 55 30) + * to its external form (e.g. "\_PR_.CPU0") + * + ****************************************************************************/ + +ACPI_STATUS +acpi_ns_externalize_name ( + u32 internal_name_length, + char *internal_name, + u32 *converted_name_length, + char **converted_name) +{ + u32 prefix_length = 0; + u32 names_index = 0; + u32 names_count = 0; + u32 i = 0; + u32 j = 0; + + if (internal_name_length < 0 || + !internal_name || + !converted_name_length || + !converted_name) + { + return (AE_BAD_PARAMETER); + } + + /* + * Check for a prefix (one '\' | one or more '^'). + */ + switch (internal_name[0]) + { + case '\\': + prefix_length = 1; + break; + + case '^': + for (i = 0; i < internal_name_length; i++) { + if (internal_name[i] != '^') { + prefix_length = i + 1; + } + } + + if (i == internal_name_length) { + prefix_length = i; + } + + break; + } + + /* + * Check for object names. Note that there could be 0-255 of these + * 4-byte elements. + */ + if (prefix_length < internal_name_length) { + switch (internal_name[prefix_length]) + { + + /* 4-byte names */ + + case AML_MULTI_NAME_PREFIX_OP: + names_index = prefix_length + 2; + names_count = (u32) internal_name[prefix_length + 1]; + break; + + + /* two 4-byte names */ + + case AML_DUAL_NAME_PREFIX: + names_index = prefix_length + 1; + names_count = 2; + break; + + + /* Null_name */ + + case 0: + names_index = 0; + names_count = 0; + break; + + + /* one 4-byte name */ + + default: + names_index = prefix_length; + names_count = 1; + break; + } + } + + /* + * Calculate the length of Converted_name, which equals the length + * of the prefix, length of all object names, length of any required + * punctuation ('.') between object names, plus the NULL terminator. + */ + *converted_name_length = prefix_length + (4 * names_count) + + ((names_count > 0) ? (names_count - 1) : 0) + 1; + + /* + * Check to see if we're still in bounds. If not, there's a problem + * with Internal_name (invalid format). + */ + if (*converted_name_length > internal_name_length) { + REPORT_ERROR ("Ns_externalize_name: Invalid internal name.\n"); + return (AE_BAD_PATHNAME); + } + + /* + * Build Converted_name... + */ + + (*converted_name) = acpi_cm_callocate (*converted_name_length); + if (!(*converted_name)) { + return (AE_NO_MEMORY); + } + + j = 0; + + for (i = 0; i < prefix_length; i++) { + (*converted_name)[j++] = internal_name[i]; + } + + if (names_count > 0) { + for (i = 0; i < names_count; i++) { + if (i > 0) { + (*converted_name)[j++] = '.'; + } + + (*converted_name)[j++] = internal_name[names_index++]; + (*converted_name)[j++] = internal_name[names_index++]; + (*converted_name)[j++] = internal_name[names_index++]; + (*converted_name)[j++] = internal_name[names_index++]; + } + } + + return (AE_OK); +} + + +/**************************************************************************** + * * FUNCTION: Acpi_ns_convert_handle_to_entry * - * PARAMETERS: Handle - Handle to be converted to an Node + * PARAMETERS: Handle - Handle to be converted to an NTE * * RETURN: A Name table entry pointer * - * DESCRIPTION: Convert a namespace handle to a real Node + * DESCRIPTION: Convert a namespace handle to a real NTE * ****************************************************************************/ -ACPI_NAMESPACE_NODE * +ACPI_NAMED_OBJECT* acpi_ns_convert_handle_to_entry ( ACPI_HANDLE handle) { @@ -293,21 +444,21 @@ */ if (!handle) { - return (NULL); + return NULL; } if (handle == ACPI_ROOT_OBJECT) { - return (acpi_gbl_root_node); + return acpi_gbl_root_object; } /* We can at least attempt to verify the handle */ if (!VALID_DESCRIPTOR_TYPE (handle, ACPI_DESC_TYPE_NAMED)) { - return (NULL); + return NULL; } - return ((ACPI_NAMESPACE_NODE *) handle); + return (ACPI_NAMED_OBJECT*) handle; } @@ -315,17 +466,16 @@ * * FUNCTION: Acpi_ns_convert_entry_to_handle * - * PARAMETERS: Node - Node to be converted to a Handle + * PARAMETERS: Nte - NTE to be converted to a Handle * * RETURN: An USER ACPI_HANDLE * - * DESCRIPTION: Convert a real Node to a namespace handle + * DESCRIPTION: Convert a real NTE to a namespace handle * ****************************************************************************/ ACPI_HANDLE -acpi_ns_convert_entry_to_handle ( - ACPI_NAMESPACE_NODE *node) +acpi_ns_convert_entry_to_handle(ACPI_NAMED_OBJECT*nte) { @@ -335,21 +485,21 @@ * and keep all pointers within this subsystem! */ - return ((ACPI_HANDLE) node); + return (ACPI_HANDLE) nte; /* --------------------------------------------------- - if (!Node) { - return (NULL); + if (!Nte) { + return NULL; } - if (Node == Acpi_gbl_Root_node) { - return (ACPI_ROOT_OBJECT); + if (Nte == Acpi_gbl_Root_object) { + return ACPI_ROOT_OBJECT; } - return ((ACPI_HANDLE) Node); + return (ACPI_HANDLE) Nte; ------------------------------------------------------*/ } @@ -369,11 +519,11 @@ void acpi_ns_terminate (void) { - ACPI_OPERAND_OBJECT *obj_desc; - ACPI_NAMESPACE_NODE *this_node; + ACPI_OBJECT_INTERNAL *obj_desc; + ACPI_NAMED_OBJECT *entry; - this_node = acpi_gbl_root_node; + entry = acpi_gbl_root_object; /* * 1) Free the entire namespace -- all objects, tables, and stacks @@ -383,19 +533,22 @@ * (additional table descriptors) */ - acpi_ns_delete_namespace_subtree (this_node); + acpi_ns_delete_namespace_subtree (entry); /* Detach any object(s) attached to the root */ - obj_desc = acpi_ns_get_attached_object (this_node); + obj_desc = acpi_ns_get_attached_object (entry); if (obj_desc) { - acpi_ns_detach_object (this_node); + acpi_ns_detach_object (entry); acpi_cm_remove_reference (obj_desc); } - acpi_ns_delete_children (this_node); + acpi_ns_delete_name_table (entry->child_table); + entry->child_table = NULL; + REPORT_SUCCESS ("Entire namespace and objects deleted"); + /* * 2) Now we can delete the ACPI tables */ @@ -417,7 +570,7 @@ * ***************************************************************************/ -u32 +s32 acpi_ns_opens_scope ( OBJECT_TYPE_INTERNAL type) { @@ -429,46 +582,47 @@ return (NSP_NORMAL); } - return (((u32) acpi_gbl_ns_properties[type]) & NSP_NEWSCOPE); + return (((s32) acpi_gbl_ns_properties[type]) & NSP_NEWSCOPE); } /**************************************************************************** * - * FUNCTION: Acpi_ns_get_node + * FUNCTION: Acpi_ns_get_named_object * * PARAMETERS: *Pathname - Name to be found, in external (ASL) format. The * \ (backslash) and ^ (carat) prefixes, and the * . (period) to separate segments are supported. - * Start_node - Root of subtree to be searched, or NS_ALL for the + * In_scope - Root of subtree to be searched, or NS_ALL for the * root of the name space. If Name is fully - * qualified (first s8 is '\'), the passed value + * qualified (first char is '\'), the passed value * of Scope will not be accessed. - * Return_node - Where the Node is returned + * Out_nte - Where the Nte is returned * * DESCRIPTION: Look up a name relative to a given scope and return the - * corresponding Node. NOTE: Scope can be null. + * corresponding NTE. NOTE: Scope can be null. * * MUTEX: Locks namespace * ***************************************************************************/ ACPI_STATUS -acpi_ns_get_node ( - NATIVE_CHAR *pathname, - ACPI_NAMESPACE_NODE *start_node, - ACPI_NAMESPACE_NODE **return_node) +acpi_ns_get_named_object ( + char *pathname, + ACPI_NAME_TABLE *in_scope, + ACPI_NAMED_OBJECT **out_nte) { ACPI_GENERIC_STATE scope_info; ACPI_STATUS status; - NATIVE_CHAR *internal_path = NULL; + ACPI_NAMED_OBJECT *obj_entry = NULL; + char *internal_path = NULL; - scope_info.scope.node = start_node; + scope_info.scope.name_table = in_scope; /* Ensure that the namespace has been initialized */ - if (!acpi_gbl_root_node) { + if (!acpi_gbl_root_object->child_table) { return (AE_NO_NAMESPACE); } @@ -489,13 +643,13 @@ /* NS_ALL means start from the root */ - if (NS_ALL == scope_info.scope.node) { - scope_info.scope.node = acpi_gbl_root_node; + if (NS_ALL == scope_info.scope.name_table) { + scope_info.scope.name_table = acpi_gbl_root_object->child_table; } else { - scope_info.scope.node = start_node; - if (!scope_info.scope.node) { + scope_info.scope.name_table = in_scope; + if (!scope_info.scope.name_table) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -506,8 +660,12 @@ status = acpi_ns_lookup (&scope_info, internal_path, ACPI_TYPE_ANY, IMODE_EXECUTE, NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE, - NULL, return_node); + NULL, &obj_entry); + + /* Return what was wanted - the NTE that matches the name */ + + *out_nte = obj_entry; unlock_and_exit: @@ -526,11 +684,11 @@ * * FUNCTION: Acpi_ns_find_parent_name * - * PARAMETERS: *Child_node - Named Obj whose name is to be found + * PARAMETERS: *Child_entry - nte whose name is to be found * * RETURN: The ACPI name * - * DESCRIPTION: Search for the given obj in its parent scope and return the + * DESCRIPTION: Search for the given nte in its parent scope and return the * name segment, or "????" if the parent name can't be found * (which "should not happen"). * @@ -538,18 +696,18 @@ ACPI_NAME acpi_ns_find_parent_name ( - ACPI_NAMESPACE_NODE *child_node) + ACPI_NAMED_OBJECT *child_entry) { - ACPI_NAMESPACE_NODE *parent_node; + ACPI_NAMED_OBJECT *parent_entry; - if (child_node) { - /* Valid entry. Get the parent Node */ + if (child_entry) { + /* Valid entry. Get the parent Nte */ - parent_node = acpi_ns_get_parent_object (child_node); - if (parent_node) { - if (parent_node->name) { - return (parent_node->name); + parent_entry = acpi_ns_get_parent_entry (child_entry); + if (parent_entry) { + if (parent_entry->name) { + return (parent_entry->name); } } @@ -559,12 +717,92 @@ return (ACPI_UNKNOWN_NAME); } +/**************************************************************************** + * + * FUNCTION: Acpi_ns_exist_downstream_sibling + * + * PARAMETERS: *This_entry - pointer to first nte to examine + * + * RETURN: TRUE if sibling is found, FALSE otherwise + * + * DESCRIPTION: Searches remainder of scope being processed to determine + * whether there is a downstream sibling to the current + * object. This function is used to determine what type of + * line drawing character to use when displaying namespace + * trees. + * + ***************************************************************************/ + +u8 +acpi_ns_exist_downstream_sibling ( + ACPI_NAMED_OBJECT *this_entry) +{ + + if (!this_entry) { + return FALSE; + } + + if (this_entry->name) { + return TRUE; + } + + +/* TBD: what did this really do? + if (This_entry->Next_entry) { + return TRUE; + } +*/ + return FALSE; +} + + +/**************************************************************************** + * + * FUNCTION: Acpi_ns_get_owner_table + * + * PARAMETERS: + * + * RETURN: + * + * DESCRIPTION: + * + ***************************************************************************/ + + +ACPI_NAME_TABLE * +acpi_ns_get_owner_table ( + ACPI_NAMED_OBJECT *this_entry) +{ + + /* + * Given an entry in the Name_table->Entries field of a name table, + * we can create a pointer to the beginning of the table as follows: + * + * 1) Starting with the the pointer to the entry, + * 2) Subtract the entry index * size of each entry to get a + * pointer to Entries[0] + * 3) Subtract the size of NAME_TABLE structure to get a pointer + * to the start. + * + * This saves having to put a pointer in every entry that points + * back to the beginning of the table and/or a pointer back to + * the parent. + */ + + return (ACPI_NAME_TABLE *) ((char *) this_entry - + (this_entry->this_index * + sizeof (ACPI_NAMED_OBJECT)) - + (sizeof (ACPI_NAME_TABLE) - + sizeof (ACPI_NAMED_OBJECT))); + +} + /**************************************************************************** * - * FUNCTION: Acpi_ns_get_parent_object + * FUNCTION: Acpi_ns_get_parent_entry * - * PARAMETERS: Node - Current table entry + * PARAMETERS: This_entry - Current table entry * * RETURN: Parent entry of the given entry * @@ -573,58 +811,76 @@ ***************************************************************************/ -ACPI_NAMESPACE_NODE * -acpi_ns_get_parent_object ( - ACPI_NAMESPACE_NODE *node) +ACPI_NAMED_OBJECT * +acpi_ns_get_parent_entry ( + ACPI_NAMED_OBJECT *this_entry) { + ACPI_NAME_TABLE *name_table; + name_table = acpi_ns_get_owner_table (this_entry); + /* - * Walk to the end of this peer list. - * The last entry is marked with a flag and the peer - * pointer is really a pointer back to the parent. - * This saves putting a parent back pointer in each and - * every named object! + * Now that we have a pointer to the name table, we can just pluck + * the parent */ - while (!(node->flags & ANOBJ_END_OF_PEER_LIST)) { - node = node->peer; - } - - - return (node->peer); + return (name_table->parent_entry); } /**************************************************************************** * - * FUNCTION: Acpi_ns_get_next_valid_object + * FUNCTION: Acpi_ns_get_next_valid_entry * - * PARAMETERS: Node - Current table entry + * PARAMETERS: This_entry - Current table entry * * RETURN: Next valid object in the table. NULL if no more valid * objects * * DESCRIPTION: Find the next valid object within a name table. - * Useful for implementing NULL-end-of-list loops. * ***************************************************************************/ -ACPI_NAMESPACE_NODE * -acpi_ns_get_next_valid_object ( - ACPI_NAMESPACE_NODE *node) +ACPI_NAMED_OBJECT * +acpi_ns_get_next_valid_entry ( + ACPI_NAMED_OBJECT *this_entry) { + ACPI_NAME_TABLE *name_table; + u32 index; - /* If we are at the end of this peer list, return NULL */ - if (node->flags & ANOBJ_END_OF_PEER_LIST) { - return NULL; + index = this_entry->this_index + 1; + name_table = acpi_ns_get_owner_table (this_entry); + + + while (name_table) { + if (index >= NS_TABLE_SIZE) { + /* We are at the end of this table */ + + name_table = name_table->next_table; + index = 0; + continue; + } + + + /* Is this a valid (occupied) slot? */ + + if (name_table->entries[index].name) { + /* Found a valid entry, all done */ + + return (&name_table->entries[index]); + } + + /* Go to the next slot */ + + index++; } - /* Otherwise just return the next peer */ + /* No more valid entries in this name table */ - return (node->peer); + return NULL; } diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nswalk.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nswalk.c --- linux-2.4.0-test9/drivers/acpi/namespace/nswalk.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nswalk.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: nswalk - Functions for walking the APCI namespace - * $Revision: 17 $ * *****************************************************************************/ @@ -25,85 +25,90 @@ #include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "interp.h" +#include "namesp.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nswalk") + MODULE_NAME ("nswalk"); /**************************************************************************** * * FUNCTION: Acpi_get_next_object * - * PARAMETERS: Type - Type of object to be searched for - * Parent - Parent object whose children we are - * getting - * Last_child - Previous child that was found. - * The NEXT child will be returned - * - * RETURN: ACPI_NAMESPACE_NODE - Pointer to the NEXT child or NULL if - * none is found. - * - * DESCRIPTION: Return the next peer object within the namespace. If Handle - * is valid, Scope is ignored. Otherwise, the first object - * within Scope is returned. + * PARAMETERS: Type - Type of object to be searched for + * Parent - Parent object whose children we are getting + * Last_child - Previous child that was found. + * The NEXT child will be returned + * Ret_handle - Where handle to the next object is placed + * + * RETURN: Status + * + * DESCRIPTION: Return the next peer object within the namespace. If Handle is + * valid, Scope is ignored. Otherwise, the first object within + * Scope is returned. * - ****************************************************************************/ + ******************************************************************************/ -ACPI_NAMESPACE_NODE * +ACPI_NAMED_OBJECT* acpi_ns_get_next_object ( OBJECT_TYPE_INTERNAL type, - ACPI_NAMESPACE_NODE *parent_node, - ACPI_NAMESPACE_NODE *child_node) + ACPI_NAMED_OBJECT *parent, + ACPI_NAMED_OBJECT *child) { - ACPI_NAMESPACE_NODE *next_node = NULL; + ACPI_NAMED_OBJECT *this_entry = NULL; - if (!child_node) { + if (!child) { /* It's really the parent's _scope_ that we want */ - if (parent_node->child) { - next_node = parent_node->child; + if (parent->child_table) { + this_entry = parent->child_table->entries; } } else { /* Start search at the NEXT object */ - next_node = acpi_ns_get_next_valid_object (child_node); + this_entry = acpi_ns_get_next_valid_entry (child); } /* If any type is OK, we are done */ if (type == ACPI_TYPE_ANY) { - /* Next_node is NULL if we are at the end-of-list */ + /* Make sure this is valid entry first */ + + if ((!this_entry) || + (!this_entry->name)) + { + return NULL; + } - return (next_node); + return (this_entry); } /* Must search for the object -- but within this scope only */ - while (next_node) { + while (this_entry) { /* If type matches, we are done */ - if (next_node->type == type) { - return (next_node); + if (this_entry->type == type) { + return (this_entry); } /* Otherwise, move on to the next object */ - next_node = acpi_ns_get_next_valid_object (next_node); + this_entry = acpi_ns_get_next_valid_entry (this_entry); } /* Not found */ - return (NULL); + return NULL; } @@ -112,7 +117,7 @@ * FUNCTION: Acpi_ns_walk_namespace * * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for - * Start_node - Handle in namespace where search begins + * Start_object - Handle in namespace where search begins * Max_depth - Depth to which search is to reach * Unlock_before_callback- Whether to unlock the NS before invoking * the callback routine @@ -140,7 +145,7 @@ ACPI_STATUS acpi_ns_walk_namespace ( OBJECT_TYPE_INTERNAL type, - ACPI_HANDLE start_node, + ACPI_HANDLE start_object, u32 max_depth, u8 unlock_before_callback, WALK_CALLBACK user_function, @@ -148,25 +153,25 @@ void **return_value) { ACPI_STATUS status; - ACPI_NAMESPACE_NODE *child_node; - ACPI_NAMESPACE_NODE *parent_node; + ACPI_NAMED_OBJECT *child_entry; + ACPI_NAMED_OBJECT *parent_entry; OBJECT_TYPE_INTERNAL child_type; u32 level; - /* Special case for the namespace Root Node */ + /* Special case for the namespace root object */ - if (start_node == ACPI_ROOT_OBJECT) { - start_node = acpi_gbl_root_node; + if (start_object == ACPI_ROOT_OBJECT) { + start_object = acpi_gbl_root_object; } /* Null child means "get first object" */ - parent_node = start_node; - child_node = 0; - child_type = ACPI_TYPE_ANY; - level = 1; + parent_entry = start_object; + child_entry = 0; + child_type = ACPI_TYPE_ANY; + level = 1; /* * Traverse the tree of objects until we bubble back up to where we @@ -181,18 +186,18 @@ */ status = AE_OK; - child_node = acpi_ns_get_next_object (ACPI_TYPE_ANY, - parent_node, - child_node); + child_entry = acpi_ns_get_next_object (ACPI_TYPE_ANY, + parent_entry, + child_entry); - if (child_node) { + if (child_entry) { /* * Found an object, Get the type if we are not * searching for ANY */ if (type != ACPI_TYPE_ANY) { - child_type = child_node->type; + child_type = child_entry->type; } if (child_type == type) { @@ -205,7 +210,7 @@ acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); } - status = user_function (child_node, level, + status = user_function (child_entry, level, context, return_value); if (unlock_before_callback) { @@ -242,15 +247,15 @@ if ((level < max_depth) && (status != AE_CTRL_DEPTH)) { if (acpi_ns_get_next_object (ACPI_TYPE_ANY, - child_node, 0)) + child_entry, 0)) { /* * There is at least one child of this * object, visit the object */ level++; - parent_node = child_node; - child_node = 0; + parent_entry = child_entry; + child_entry = 0; } } } @@ -262,8 +267,8 @@ * the object's parent. */ level--; - child_node = parent_node; - parent_node = acpi_ns_get_parent_object (parent_node); + child_entry = parent_entry; + parent_entry = acpi_ns_get_parent_entry (parent_entry); } } diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nsxfname.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nsxfname.c --- linux-2.4.0-test9/drivers/acpi/namespace/nsxfname.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nsxfname.c Wed Jul 5 11:23:12 2000 @@ -2,7 +2,6 @@ * * Module Name: nsxfname - Public interfaces to the ACPI subsystem * ACPI Namespace oriented interfaces - * $Revision: 64 $ * *****************************************************************************/ @@ -26,16 +25,16 @@ #include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "interp.h" +#include "namesp.h" #include "amlcode.h" -#include "acparser.h" -#include "acdispat.h" -#include "acevents.h" +#include "parser.h" +#include "dispatch.h" +#include "events.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nsxfname") + MODULE_NAME ("nsxfname"); /****************************************************************************** @@ -65,6 +64,21 @@ } + /* Init the hardware */ + + /* + * TBD: [Restructure] Should this should be moved elsewhere, + * like Acpi_enable! ?? + */ + + /* we need to be able to call this interface repeatedly! */ + /* Does H/W require init before loading the namespace? */ + + status = acpi_cm_hardware_initialize (); + if (ACPI_FAILURE (status)) { + return (status); + } + /* * Load the namespace. The DSDT is required, * but the SSDT and PSDT tables are optional. @@ -117,24 +131,24 @@ ACPI_HANDLE *ret_handle) { ACPI_STATUS status; - ACPI_NAMESPACE_NODE *node; - ACPI_NAMESPACE_NODE *prefix_node = NULL; + ACPI_NAMED_OBJECT *this_entry; + ACPI_NAME_TABLE *scope = NULL; if (!ret_handle || !pathname) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } if (parent) { acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - node = acpi_ns_convert_handle_to_entry (parent); - if (!node) { + this_entry = acpi_ns_convert_handle_to_entry (parent); + if (!this_entry) { acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } - prefix_node = node->child; + scope = this_entry->child_table; acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); } @@ -142,20 +156,17 @@ /* TBD: [Investigate] Check for both forward and backslash?? */ if (STRCMP (pathname, NS_ROOT_PATH) == 0) { - *ret_handle = acpi_ns_convert_entry_to_handle (acpi_gbl_root_node); - return (AE_OK); + *ret_handle = acpi_ns_convert_entry_to_handle (acpi_gbl_root_object); + return AE_OK; } /* - * Find the Node and convert to the user format + * Find the Nte and convert to the user format */ - node = NULL; - status = acpi_ns_get_node (pathname, prefix_node, &node); + this_entry = NULL; + status = acpi_ns_get_named_object (pathname, scope, &this_entry); - *ret_handle = NULL; - if(ACPI_SUCCESS(status)) { - *ret_handle = acpi_ns_convert_entry_to_handle (node); - } + *ret_handle = acpi_ns_convert_entry_to_handle (this_entry); return (status); } @@ -184,13 +195,13 @@ ACPI_BUFFER *ret_path_ptr) { ACPI_STATUS status; - ACPI_NAMESPACE_NODE *node; + ACPI_NAMED_OBJECT *obj_entry; /* Buffer pointer must be valid always */ if (!ret_path_ptr || (name_type > ACPI_NAME_TYPE_MAX)) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } /* Allow length to be zero and ignore the pointer */ @@ -198,7 +209,7 @@ if ((ret_path_ptr->length) && (!ret_path_ptr->pointer)) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } if (name_type == ACPI_FULL_PATHNAME) { @@ -206,17 +217,17 @@ status = acpi_ns_handle_to_pathname (handle, &ret_path_ptr->length, ret_path_ptr->pointer); - return (status); + return status; } /* * Wants the single segment ACPI name. - * Validate handle and convert to an Node + * Validate handle and convert to an NTE */ acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - node = acpi_ns_convert_handle_to_entry (handle); - if (!node) { + obj_entry = acpi_ns_convert_handle_to_entry (handle); + if (!obj_entry) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -229,18 +240,18 @@ goto unlock_and_exit; } - /* Just copy the ACPI name from the Node and zero terminate it */ + /* Just copy the ACPI name from the NTE and zero terminate it */ - STRNCPY (ret_path_ptr->pointer, (NATIVE_CHAR *) &node->name, + STRNCPY (ret_path_ptr->pointer, (char *) &obj_entry->name, ACPI_NAME_SIZE); - ((NATIVE_CHAR *) ret_path_ptr->pointer) [ACPI_NAME_SIZE] = 0; + ((char *) ret_path_ptr->pointer) [ACPI_NAME_SIZE] = 0; status = AE_OK; unlock_and_exit: acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - return (status); + return status; } @@ -268,27 +279,27 @@ ACPI_STATUS status; u32 device_status = 0; u32 address = 0; - ACPI_NAMESPACE_NODE *device_node; + ACPI_NAMED_OBJECT *device_entry; /* Parameter validation */ if (!device || !info) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); - device_node = acpi_ns_convert_handle_to_entry (device); - if (!device_node) { + device_entry = acpi_ns_convert_handle_to_entry (device); + if (!device_entry) { acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } - info->type = device_node->type; - info->name = device_node->name; - info->parent = acpi_ns_convert_entry_to_handle ( - acpi_ns_get_parent_object (device_node)); + info->type = device_entry->type; + info->name = device_entry->name; + info->parent = + acpi_ns_convert_entry_to_handle (acpi_ns_get_parent_entry (device_entry)); acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); @@ -296,17 +307,17 @@ * If not a device, we are all done. */ if (info->type != ACPI_TYPE_DEVICE) { - return (AE_OK); + return AE_OK; } /* Get extra info for ACPI devices */ - info->valid = 0; + info->valid = 0; /* Execute the _HID method and save the result */ - status = acpi_cm_execute_HID (device_node, &hid); + status = acpi_cm_execute_HID (device_entry, &hid); if (ACPI_SUCCESS (status)) { if (hid.type == STRING_PTR_DEVICE_ID) { STRCPY (info->hardware_id, hid.data.string_ptr); @@ -320,7 +331,7 @@ /* Execute the _UID method and save the result */ - status = acpi_cm_execute_UID (device_node, &uid); + status = acpi_cm_execute_UID (device_entry, &uid); if (ACPI_SUCCESS (status)) { if (hid.type == STRING_PTR_DEVICE_ID) { STRCPY (info->unique_id, uid.data.string_ptr); @@ -337,7 +348,7 @@ * _STA is not always present */ - status = acpi_cm_execute_STA (device_node, &device_status); + status = acpi_cm_execute_STA (device_entry, &device_status); if (ACPI_SUCCESS (status)) { info->current_status = device_status; info->valid |= ACPI_VALID_STA; @@ -349,13 +360,13 @@ */ status = acpi_cm_evaluate_numeric_object (METHOD_NAME__ADR, - device_node, &address); + device_entry, &address); if (ACPI_SUCCESS (status)) { info->address = address; info->valid |= ACPI_VALID_ADR; } - return (AE_OK); + return AE_OK; } diff -urN linux-2.4.0-test9/drivers/acpi/namespace/nsxfobj.c linux-2.4.0-test9-lia/drivers/acpi/namespace/nsxfobj.c --- linux-2.4.0-test9/drivers/acpi/namespace/nsxfobj.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/namespace/nsxfobj.c Wed Jul 5 11:23:12 2000 @@ -1,10 +1,10 @@ -/******************************************************************************* + +/****************************************************************************** * * Module Name: nsxfobj - Public interfaces to the ACPI subsystem * ACPI Object oriented interfaces - * $Revision: 65 $ * - ******************************************************************************/ + *****************************************************************************/ /* * Copyright (C) 2000 R. Byron Moore @@ -26,15 +26,15 @@ #include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" +#include "interp.h" +#include "namesp.h" #define _COMPONENT NAMESPACE - MODULE_NAME ("nsxfobj") + MODULE_NAME ("nsxfobj"); -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_evaluate_object * @@ -54,7 +54,7 @@ * parameters if necessary. One of "Handle" or "Pathname" must * be valid (non-null) * - ******************************************************************************/ + ****************************************************************************/ ACPI_STATUS acpi_evaluate_object ( @@ -64,9 +64,9 @@ ACPI_BUFFER *return_buffer) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT **param_ptr = NULL; - ACPI_OPERAND_OBJECT *return_obj = NULL; - ACPI_OPERAND_OBJECT *object_ptr = NULL; + ACPI_OBJECT_INTERNAL **param_ptr = NULL; + ACPI_OBJECT_INTERNAL *return_obj = NULL; + ACPI_OBJECT_INTERNAL *object_ptr = NULL; u32 buffer_space_needed; u32 user_buffer_length; u32 count; @@ -85,11 +85,12 @@ /* * Allocate a new parameter block for the internal objects * Add 1 to count to allow for null terminated internal list + * TBD: [Restructure] merge into single allocation! */ count = param_objects->count; param_length = (count + 1) * sizeof (void *); - object_length = count * sizeof (ACPI_OPERAND_OBJECT); + object_length = count * sizeof (ACPI_OBJECT_INTERNAL); param_ptr = acpi_cm_callocate (param_length + /* Parameter List part */ object_length); /* Actual objects */ @@ -97,7 +98,7 @@ return (AE_NO_MEMORY); } - object_ptr = (ACPI_OPERAND_OBJECT *) ((u8 *) param_ptr + + object_ptr = (ACPI_OBJECT_INTERNAL *) ((u8 *) param_ptr + param_length); /* @@ -168,15 +169,18 @@ * The null pathname case means the handle is for * the actual object to be evaluated */ - status = acpi_ns_evaluate_by_handle (handle, param_ptr, &return_obj); + status = acpi_ns_evaluate_by_handle (handle, + param_ptr, + &return_obj); } else { /* * Both a Handle and a relative Pathname */ - status = acpi_ns_evaluate_relative (handle, pathname, param_ptr, - &return_obj); + status = acpi_ns_evaluate_relative (handle, pathname, + param_ptr, + &return_obj); } } @@ -191,9 +195,11 @@ return_buffer->length = 0; if (return_obj) { - if (VALID_DESCRIPTOR_TYPE (return_obj, ACPI_DESC_TYPE_NAMED)) { + if (VALID_DESCRIPTOR_TYPE (return_obj, + ACPI_DESC_TYPE_NAMED)) + { /* - * If we got an Node as a return object, + * If we got an NTE as a return object, * this means the object we are evaluating * has nothing interesting to return (such * as a mutex, etc.) We return an error @@ -204,7 +210,7 @@ * types at a later date if necessary. */ status = AE_TYPE; - return_obj = NULL; /* No need to delete an Node */ + return_obj = NULL; /* No need to delete an NTE */ } if (ACPI_SUCCESS (status)) { @@ -235,8 +241,9 @@ /* * We have enough space for the object, build it */ - status = acpi_cm_build_external_object (return_obj, - return_buffer); + status = + acpi_cm_build_external_object (return_obj, + return_buffer); return_buffer->length = buffer_space_needed; } } @@ -269,7 +276,7 @@ } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_get_next_object * @@ -295,15 +302,15 @@ ACPI_HANDLE *ret_handle) { ACPI_STATUS status = AE_OK; - ACPI_NAMESPACE_NODE *node; - ACPI_NAMESPACE_NODE *parent_node = NULL; - ACPI_NAMESPACE_NODE *child_node = NULL; + ACPI_NAMED_OBJECT *entry; + ACPI_NAMED_OBJECT *parent_entry = NULL; + ACPI_NAMED_OBJECT *child_entry = NULL; /* Parameter validation */ if (type > ACPI_TYPE_MAX) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); @@ -313,8 +320,8 @@ if (!child) { /* Start search at the beginning of the specified scope */ - parent_node = acpi_ns_convert_handle_to_entry (parent); - if (!parent_node) { + parent_entry = acpi_ns_convert_handle_to_entry (parent); + if (!parent_entry) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -325,8 +332,8 @@ else { /* Convert and validate the handle */ - child_node = acpi_ns_convert_handle_to_entry (child); - if (!child_node) { + child_entry = acpi_ns_convert_handle_to_entry (child); + if (!child_entry) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -335,26 +342,26 @@ /* Internal function does the real work */ - node = acpi_ns_get_next_object ((OBJECT_TYPE_INTERNAL) type, - parent_node, child_node); - if (!node) { + entry = acpi_ns_get_next_object ((OBJECT_TYPE_INTERNAL) type, + parent_entry, child_entry); + if (!entry) { status = AE_NOT_FOUND; goto unlock_and_exit; } if (ret_handle) { - *ret_handle = acpi_ns_convert_entry_to_handle (node); + *ret_handle = acpi_ns_convert_entry_to_handle (entry); } unlock_and_exit: acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - return (status); + return status; } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_get_type * @@ -372,43 +379,44 @@ ACPI_HANDLE handle, ACPI_OBJECT_TYPE *ret_type) { - ACPI_NAMESPACE_NODE *node; + ACPI_NAMED_OBJECT *object; /* Parameter Validation */ if (!ret_type) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } /* - * Special case for the predefined Root Node + * Special case for the predefined Root Object * (return type ANY) */ + if (handle == ACPI_ROOT_OBJECT) { *ret_type = ACPI_TYPE_ANY; - return (AE_OK); + return AE_OK; } acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE); /* Convert and validate the handle */ - node = acpi_ns_convert_handle_to_entry (handle); - if (!node) { + object = acpi_ns_convert_handle_to_entry (handle); + if (!object) { acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } - *ret_type = node->type; + *ret_type = object->type; acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - return (AE_OK); + return AE_OK; } -/******************************************************************************* +/**************************************************************************** * * FUNCTION: Acpi_get_parent * @@ -427,7 +435,7 @@ ACPI_HANDLE handle, ACPI_HANDLE *ret_handle) { - ACPI_NAMESPACE_NODE *node; + ACPI_NAMED_OBJECT *object; ACPI_STATUS status = AE_OK; @@ -435,13 +443,13 @@ if (!ret_handle) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } - /* Special case for the predefined Root Node (no parent) */ + /* Special case for the predefined Root Object (no parent) */ if (handle == ACPI_ROOT_OBJECT) { - return (AE_NULL_ENTRY); + return AE_NULL_ENTRY; } @@ -449,8 +457,8 @@ /* Convert and validate the handle */ - node = acpi_ns_convert_handle_to_entry (handle); - if (!node) { + object = acpi_ns_convert_handle_to_entry (handle); + if (!object) { status = AE_BAD_PARAMETER; goto unlock_and_exit; } @@ -459,11 +467,11 @@ /* Get the parent entry */ *ret_handle = - acpi_ns_convert_entry_to_handle (acpi_ns_get_parent_object (node)); + acpi_ns_convert_entry_to_handle (acpi_ns_get_parent_entry (object)); /* Return exeption if parent is null */ - if (!acpi_ns_get_parent_object (node)) { + if (!acpi_ns_get_parent_entry (object)) { status = AE_NULL_ENTRY; } @@ -471,11 +479,11 @@ unlock_and_exit: acpi_cm_release_mutex (ACPI_MTX_NAMESPACE); - return (status); + return AE_OK; } -/******************************************************************************* +/****************************************************************************** * * FUNCTION: Acpi_walk_namespace * diff -urN linux-2.4.0-test9/drivers/acpi/os.c linux-2.4.0-test9-lia/drivers/acpi/os.c --- linux-2.4.0-test9/drivers/acpi/os.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/os.c Thu Aug 24 18:16:02 2000 @@ -2,6 +2,7 @@ * os.c - OS-dependent functions * * Copyright (C) 2000 Andrew Henroid + * Copyright (C) 2000 J.I. Lee * * 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 @@ -18,19 +19,48 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include + #include #include #include #include #include #include -#include #include +#include #include "acpi.h" #include "driver.h" -#define _COMPONENT OS_DEPENDENT - MODULE_NAME ("os") + +#ifdef CONFIG_ACPI_KERNEL_CONFIG +#include "osconf.h" + +struct acpi_osd acpi_osd_rt = { + /* these are runtime osd entries that differ from boottime entries */ + acpi_os_allocate_rt, + acpi_os_callocate_rt, + acpi_os_free_rt, + acpi_os_queue_for_execution_rt, + acpi_os_read_pci_cfg_byte_rt, + acpi_os_read_pci_cfg_word_rt, + acpi_os_read_pci_cfg_dword_rt, + acpi_os_write_pci_cfg_byte_rt, + acpi_os_write_pci_cfg_word_rt, + acpi_os_write_pci_cfg_dword_rt +}; +#else +#define acpi_os_allocate_rt acpi_os_allocate +#define acpi_os_callocate_rt acpi_os_callocate +#define acpi_os_free_rt acpi_os_free +#define acpi_os_queue_for_execution_rt acpi_os_queue_for_execution +#define acpi_os_read_pci_cfg_byte_rt acpi_os_read_pci_cfg_byte +#define acpi_os_read_pci_cfg_word_rt acpi_os_read_pci_cfg_word +#define acpi_os_read_pci_cfg_dword_rt acpi_os_read_pci_cfg_dword +#define acpi_os_write_pci_cfg_byte_rt acpi_os_write_pci_cfg_byte +#define acpi_os_write_pci_cfg_word_rt acpi_os_write_pci_cfg_word +#define acpi_os_write_pci_cfg_dword_rt acpi_os_write_pci_cfg_dword +#endif static int acpi_irq_irq = 0; static OSD_HANDLER acpi_irq_handler = NULL; @@ -64,7 +94,7 @@ } s32 -acpi_os_printf(const NATIVE_CHAR *fmt,...) +acpi_os_printf(const char *fmt,...) { s32 size; va_list args; @@ -75,22 +105,22 @@ } s32 -acpi_os_vprintf(const NATIVE_CHAR *fmt, va_list args) +acpi_os_vprintf(const char *fmt, va_list args) { static char buffer[512]; int size = vsprintf(buffer, fmt, args); - printk("%s", buffer); + printk(KERN_DEBUG "ACPI: %s", buffer); return size; } void * -acpi_os_allocate(u32 size) +acpi_os_allocate_rt(u32 size) { return kmalloc(size, GFP_KERNEL); } void * -acpi_os_callocate(u32 size) +acpi_os_callocate_rt(u32 size) { void *ptr = acpi_os_allocate(size); if (ptr) @@ -99,7 +129,7 @@ } void -acpi_os_free(void *ptr) +acpi_os_free_rt(void *ptr) { kfree(ptr); } @@ -140,7 +170,7 @@ acpi_irq_context = context; if (request_irq(irq, acpi_irq, - SA_SHIRQ, + SA_INTERRUPT | SA_SHIRQ, "acpi", acpi_irq)) { printk(KERN_ERR "ACPI: SCI (IRQ%d) allocation failed\n", irq); @@ -212,8 +242,9 @@ outl(val, port); } + ACPI_STATUS -acpi_os_read_pci_cfg_byte( +acpi_os_read_pci_cfg_byte_rt( u32 bus, u32 func, u32 addr, @@ -227,7 +258,7 @@ } ACPI_STATUS -acpi_os_read_pci_cfg_word( +acpi_os_read_pci_cfg_word_rt( u32 bus, u32 func, u32 addr, @@ -241,7 +272,7 @@ } ACPI_STATUS -acpi_os_read_pci_cfg_dword( +acpi_os_read_pci_cfg_dword_rt( u32 bus, u32 func, u32 addr, @@ -255,7 +286,7 @@ } ACPI_STATUS -acpi_os_write_pci_cfg_byte( +acpi_os_write_pci_cfg_byte_rt( u32 bus, u32 func, u32 addr, @@ -269,7 +300,7 @@ } ACPI_STATUS -acpi_os_write_pci_cfg_word( +acpi_os_write_pci_cfg_word_rt( u32 bus, u32 func, u32 addr, @@ -283,7 +314,7 @@ } ACPI_STATUS -acpi_os_write_pci_cfg_dword( +acpi_os_write_pci_cfg_dword_rt( u32 bus, u32 func, u32 addr, @@ -301,13 +332,18 @@ */ ACPI_STATUS -acpi_os_queue_for_execution( +acpi_os_queue_for_execution_rt( u32 priority, OSD_EXECUTION_CALLBACK callback, void *context) { +#ifndef CONFIG_ACPI_KERNEL_CONFIG if (acpi_run(callback, context)) return AE_ERROR; +#else + /* run callbakc immediately until driver.c works */ + (*callback)(context); +#endif return AE_OK; } @@ -341,7 +377,7 @@ } ACPI_STATUS -acpi_os_breakpoint(NATIVE_CHAR *msg) +acpi_os_breakpoint(char *msg) { acpi_os_printf("breakpoint: %s", msg); return AE_OK; @@ -354,13 +390,13 @@ } void -acpi_os_dbg_assert(void *failure, void *file, u32 line, NATIVE_CHAR *msg) +acpi_os_dbg_assert(void *failure, void *file, u32 line, char *msg) { acpi_os_printf("assert: %s", msg); } u32 -acpi_os_get_line(NATIVE_CHAR *buffer) +acpi_os_get_line(char *buffer) { return 0; } diff -urN linux-2.4.0-test9/drivers/acpi/osconf.c linux-2.4.0-test9-lia/drivers/acpi/osconf.c --- linux-2.4.0-test9/drivers/acpi/osconf.c Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/osconf.c Thu Aug 24 18:16:02 2000 @@ -0,0 +1,334 @@ +/* + * osconf.c - ACPI OS-dependent functions for Kernel Boot/Configuration time + * + * Copyright (C) 2000 Intel Corp. + * Copyright (C) 2000 J.I. Lee + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "acpi.h" +#include "osconf.h" + + +static void * __init acpi_os_allocate_bt(u32 size); +static void * __init acpi_os_callocate_bt(u32 size); +static void __init acpi_os_free_bt(void *ptr); + +static ACPI_STATUS __init +acpi_os_queue_for_execution_bt( + u32 priority, + OSD_EXECUTION_CALLBACK callback, + void *context + ); + +static ACPI_STATUS __init +acpi_os_read_pci_cfg_byte_bt( u32 segbus, u32 func, u32 addr, u8 * val); + +static ACPI_STATUS __init +acpi_os_read_pci_cfg_word_bt( u32 segbus, u32 func, u32 addr, u16 * val); + +static ACPI_STATUS __init +acpi_os_read_pci_cfg_dword_bt( u32 segbus, u32 func, u32 addr, u32 * val); + +static ACPI_STATUS __init +acpi_os_write_pci_cfg_byte_bt( u32 segbus, u32 func, u32 addr, u8 val); + +static ACPI_STATUS __init +acpi_os_write_pci_cfg_word_bt( u32 segbus, u32 func, u32 addr, u16 val); + +static ACPI_STATUS __init +acpi_os_write_pci_cfg_dword_bt( u32 segbus, u32 func, u32 addr, u32 val); + + +static struct acpi_osd *acpi_osd; +extern struct acpi_osd acpi_osd_rt; +static struct acpi_osd acpi_osd_bt __initdata = { + /* these are boottime osd entries that differ from runtime entries */ + acpi_os_allocate_bt, + acpi_os_callocate_bt, + acpi_os_free_bt, + acpi_os_queue_for_execution_bt, + acpi_os_read_pci_cfg_byte_bt, + acpi_os_read_pci_cfg_word_bt, + acpi_os_read_pci_cfg_dword_bt, + acpi_os_write_pci_cfg_byte_bt, + acpi_os_write_pci_cfg_word_bt, + acpi_os_write_pci_cfg_dword_bt +}; + +#ifdef CONFIG_ACPI_KERNEL_CONFIG_BM_PROFILE +static void __init +acpi_cf_bm_statistics( void ); +#endif + +void __init +acpi_os_bind_osd(int acpi_phase) +{ + switch (acpi_phase) { + case ACPI_CF_PHASE_BOOTTIME: + acpi_osd = &acpi_osd_bt; + printk("Acpi cfg:bind to Boot time Acpi OSD\n"); + break; + case ACPI_CF_PHASE_RUNTIME: + default: + acpi_osd = &acpi_osd_rt; + printk("Acpi cfg:bind to Run time Acpi OSD\n"); +#ifdef CONFIG_ACPI_KERNEL_CONFIG_BM_PROFILE + acpi_cf_bm_statistics(); +#endif + break; + } +} + + +void * +acpi_os_allocate(u32 size) +{ + return acpi_osd->allocate(size); +} + +void * +acpi_os_callocate(u32 size) +{ + return acpi_osd->callocate(size); +} + +void +acpi_os_free(void *ptr) +{ + acpi_osd->free(ptr); + return; +} + + +ACPI_STATUS +acpi_os_queue_for_execution( + u32 priority, + OSD_EXECUTION_CALLBACK callback, + void *context) +{ + return acpi_osd->queue_for_exec(priority, callback, context); +} + + +ACPI_STATUS +acpi_os_read_pci_cfg_byte( u32 segbus, u32 func, u32 addr, u8 * val) +{ + return acpi_osd->read_pci_cfg_byte(segbus, func, addr, val); +} + + +ACPI_STATUS +acpi_os_read_pci_cfg_word( u32 segbus, u32 func, u32 addr, u16 * val) +{ + return acpi_osd->read_pci_cfg_word(segbus, func, addr, val); +} + + +ACPI_STATUS +acpi_os_read_pci_cfg_dword( u32 segbus, u32 func, u32 addr, u32 * val) +{ + return acpi_osd->read_pci_cfg_dword(segbus, func, addr, val); +} + + +ACPI_STATUS +acpi_os_write_pci_cfg_byte( u32 segbus, u32 func, u32 addr, u8 val) +{ + return acpi_osd->write_pci_cfg_byte(segbus, func, addr, val); +} + + +ACPI_STATUS +acpi_os_write_pci_cfg_word( u32 segbus, u32 func, u32 addr, u16 val) +{ + return acpi_osd->write_pci_cfg_word(segbus, func, addr, val); +} + + +ACPI_STATUS +acpi_os_write_pci_cfg_dword( u32 segbus, u32 func, u32 addr, u32 val) +{ + return acpi_osd->write_pci_cfg_dword(segbus, func, addr, val); +} + + + +#ifdef CONFIG_ACPI_KERNEL_CONFIG_BM_PROFILE +/* + * Let's profile bootmem usage to see how much we consume. J.I. + */ +static unsigned long bm_alloc_size __initdata = 0; +static unsigned long bm_alloc_size_max __initdata = 0; +static unsigned long bm_alloc_count_max __initdata = 0; +static unsigned long bm_free_count_max __initdata = 0; + +static void __init +acpi_cf_bm_checkin(void *ptr, u32 size) +{ + bm_alloc_count_max++; + bm_alloc_size += size; + if (bm_alloc_size > bm_alloc_size_max) + bm_alloc_size_max = bm_alloc_size; + //printk("Acpi cfg: alloc_bootmem 0x%lx, 0x%lx\n", ptr, size); +}; + +static void __init +acpi_cf_bm_checkout(void *ptr, u32 size) +{ + bm_free_count_max++; + bm_alloc_size -= size; + //printk("Acpi cfg: free_bootmem 0x%lx, 0x%lx\n", ptr, size); +}; + +static void __init +acpi_cf_bm_statistics( void ) +{ + printk("Acpi cfg:bm_alloc_size_max =%ld bytes\n", bm_alloc_size_max); + printk("Acpi cfg:bm_alloc_count_max=%ld\n", bm_alloc_count_max); + printk("Acpi cfg:bm_free_count_max =%ld\n", bm_free_count_max); +} +#endif + + +static void * __init +acpi_os_allocate_bt(u32 size) +{ + void *ptr; + + size += sizeof(unsigned long); + ptr = alloc_bootmem(size); + + if (ptr) { +#ifdef CONFIG_ACPI_KERNEL_CONFIG_BM_PROFILE + acpi_cf_bm_checkin(ptr, size); +#endif + *((unsigned long *)ptr) = (unsigned long)size; + ptr += sizeof(unsigned long); + } + + return ptr; +} + +static void * __init +acpi_os_callocate_bt(u32 size) +{ + void *ptr = acpi_os_allocate_bt(size); + + return ptr; +} + +static void __init +acpi_os_free_bt(void *ptr) +{ + unsigned long size; + + ptr -= sizeof(size); + size = *((unsigned long *)ptr); + +#ifdef CONFIG_ACPI_KERNEL_CONFIG_BM_PROFILE + acpi_cf_bm_checkout(ptr, (unsigned long)size); +#endif + if (size) + free_bootmem (__pa((unsigned long)ptr), (u32)size); +} + + +static ACPI_STATUS __init +acpi_os_queue_for_execution_bt( + u32 priority, + OSD_EXECUTION_CALLBACK callback, + void *context) +{ + /* run callback immediately until driver.c works */ + (*callback)(context); + return AE_OK; +} + + +static ACPI_STATUS __init +acpi_os_read_pci_cfg_byte_bt( u32 segbus, u32 func, u32 addr, u8 * val) +{ + unsigned int devfn; + s64 status; + u64 lval; + + devfn = PCI_DEVFN((func >> 16) & 0xffff, func & 0xffff); + status = ia64_sal_pci_config_read(PCI_CONFIG_ADDRESS((segbus & 0xffff), devfn, addr), 1, &lval); + *val = lval; + + return status; +} + + +static ACPI_STATUS __init +acpi_os_read_pci_cfg_word_bt( u32 segbus, u32 func, u32 addr, u16 * val) +{ + unsigned int devfn; + s64 status; + u64 lval; + + devfn = PCI_DEVFN((func >> 16) & 0xffff, func & 0xffff); + status = ia64_sal_pci_config_read(PCI_CONFIG_ADDRESS((segbus & 0xffff), devfn, addr), 2, &lval); + *val = lval; + + return status; +} + + +static ACPI_STATUS __init +acpi_os_read_pci_cfg_dword_bt( u32 segbus, u32 func, u32 addr, u32 * val) +{ + unsigned int devfn; + s64 status; + u64 lval; + + devfn = PCI_DEVFN((func >> 16) & 0xffff, func & 0xffff); + status = ia64_sal_pci_config_read(PCI_CONFIG_ADDRESS((segbus & 0xffff), devfn, addr), 4, &lval); + *val = lval; + + return status; +} + + +static ACPI_STATUS __init +acpi_os_write_pci_cfg_byte_bt( u32 segbus, u32 func, u32 addr, u8 val) +{ + unsigned int devfn; + + devfn = PCI_DEVFN((func >> 16) & 0xffff, func & 0xffff); + return ia64_sal_pci_config_write(PCI_CONFIG_ADDRESS((segbus & 0xffff), devfn, addr), 1, val); +} + + +static ACPI_STATUS __init +acpi_os_write_pci_cfg_word_bt( u32 segbus, u32 func, u32 addr, u16 val) +{ + unsigned int devfn; + + devfn = PCI_DEVFN((func >> 16) & 0xffff, func & 0xffff); + return ia64_sal_pci_config_write(PCI_CONFIG_ADDRESS((segbus & 0xffff), devfn, addr), 2, val); +} + + +static ACPI_STATUS __init +acpi_os_write_pci_cfg_dword_bt( u32 segbus, u32 func, u32 addr, u32 val) +{ + unsigned int devfn; + + devfn = PCI_DEVFN((func >> 16) & 0xffff, func & 0xffff); + return ia64_sal_pci_config_write(PCI_CONFIG_ADDRESS((segbus & 0xffff), devfn, addr), 4, val); +} + diff -urN linux-2.4.0-test9/drivers/acpi/osconf.h linux-2.4.0-test9-lia/drivers/acpi/osconf.h --- linux-2.4.0-test9/drivers/acpi/osconf.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/osconf.h Thu Aug 24 18:16:02 2000 @@ -0,0 +1,91 @@ +/* + * osconf.h - ACPI OS-dependent headers for Kernel Boot/Configuration time + * + * Copyright (C) 2000 Intel Corp. + * Copyright (C) 2000 J.I. Lee + */ + + +struct acpi_osd { + void * (*allocate)(u32 size); + void * (*callocate)(u32 size); + void (*free)(void *ptr); + ACPI_STATUS (*queue_for_exec)(u32 pri, OSD_EXECUTION_CALLBACK cb, void *context); + ACPI_STATUS (*read_pci_cfg_byte)(u32 bus, u32 func, u32 addr, u8 *val); + ACPI_STATUS (*read_pci_cfg_word)(u32 bus, u32 func, u32 addr, u16 *val); + ACPI_STATUS (*read_pci_cfg_dword)(u32 bus, u32 func, u32 addr, u32 *val); + ACPI_STATUS (*write_pci_cfg_byte)(u32 bus, u32 func, u32 addr, u8 val); + ACPI_STATUS (*write_pci_cfg_word)(u32 bus, u32 func, u32 addr, u16 val); + ACPI_STATUS (*write_pci_cfg_dword)(u32 bus, u32 func, u32 addr, u32 val); +}; + + +#define PCI_CONFIG_ADDRESS(bus, devfn, where) \ + (((u64) bus << 16) | ((u64) (devfn & 0xff) << 8) | (where & 0xff)) + +#define ACPI_CF_PHASE_BOOTTIME 0x00 +#define ACPI_CF_PHASE_RUNTIME 0x01 + + +/* acpi_osd functions */ +void * acpi_os_allocate(u32 size); +void * acpi_os_callocate(u32 size); +void acpi_os_free(void *ptr); + + +ACPI_STATUS +acpi_os_queue_for_execution( + u32 priority, + OSD_EXECUTION_CALLBACK callback, + void *context + ); + +ACPI_STATUS +acpi_os_read_pci_cfg_byte( u32 segbus, u32 func, u32 addr, u8 * val); + +ACPI_STATUS +acpi_os_read_pci_cfg_word( u32 segbus, u32 func, u32 addr, u16 * val); + +ACPI_STATUS +acpi_os_read_pci_cfg_dword( u32 segbus, u32 func, u32 addr, u32 * val); + +ACPI_STATUS +acpi_os_write_pci_cfg_byte( u32 segbus, u32 func, u32 addr, u8 val); + +ACPI_STATUS +acpi_os_write_pci_cfg_word( u32 segbus, u32 func, u32 addr, u16 val); + +ACPI_STATUS +acpi_os_write_pci_cfg_dword( u32 segbus, u32 func, u32 addr, u32 val); + + +/* acpi_osd_rt functions */ +extern void * acpi_os_allocate_rt(u32 size); +extern void * acpi_os_callocate_rt(u32 size); +extern void acpi_os_free_rt(void *ptr); + +extern ACPI_STATUS +acpi_os_queue_for_execution_rt( + u32 priority, + OSD_EXECUTION_CALLBACK callback, + void *context + ); + +extern ACPI_STATUS +acpi_os_read_pci_cfg_byte_rt( u32 segbus, u32 func, u32 addr, u8 * val); + +extern ACPI_STATUS +acpi_os_read_pci_cfg_word_rt( u32 segbus, u32 func, u32 addr, u16 * val); + +extern ACPI_STATUS +acpi_os_read_pci_cfg_dword_rt( u32 segbus, u32 func, u32 addr, u32 * val); + +extern ACPI_STATUS +acpi_os_write_pci_cfg_byte_rt( u32 segbus, u32 func, u32 addr, u8 val); + +extern ACPI_STATUS +acpi_os_write_pci_cfg_word_rt( u32 segbus, u32 func, u32 addr, u16 val); + +extern ACPI_STATUS +acpi_os_write_pci_cfg_dword_rt( u32 segbus, u32 func, u32 addr, u32 val); + diff -urN linux-2.4.0-test9/drivers/acpi/parser/Makefile linux-2.4.0-test9-lia/drivers/acpi/parser/Makefile --- linux-2.4.0-test9/drivers/acpi/parser/Makefile Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/Makefile Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -SUB_DIRS := -MOD_SUB_DIRS := $(SUB_DIRS) -MOD_IN_SUB_DIRS := -ALL_SUB_DIRS := $(SUB_DIRS) - -O_TARGET := ../$(shell basename `pwd`).o -O_OBJS := -M_OBJS := - -ACPI_OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) - -EXTRA_CFLAGS += -I../include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) - -# if the interpreter is used, it overrides arch/i386/kernel/acpi.c -ifeq ($(CONFIG_ACPI_INTERPRETER),y) - O_OBJS := $(ACPI_OBJS) -endif - -include $(TOPDIR)/Rules.make - -clean: - $(RM) *.o diff -urN linux-2.4.0-test9/drivers/acpi/parser/psargs.c linux-2.4.0-test9-lia/drivers/acpi/parser/psargs.c --- linux-2.4.0-test9/drivers/acpi/parser/psargs.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/psargs.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: psargs - Parse AML opcode arguments - * $Revision: 35 $ * *****************************************************************************/ @@ -25,26 +24,12 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" -#include "acnamesp.h" +#include "namesp.h" #define _COMPONENT PARSER - MODULE_NAME ("psargs") - - -u32 -acpi_ps_pkg_length_encoding_size ( - u32 first_byte) -{ - - /* - * Bits 6-7 contain the number of bytes - * in the encoded package length (-1) - */ - - return ((first_byte >> 6) + 1); -} + MODULE_NAME ("psargs"); /******************************************************************************* @@ -61,63 +46,14 @@ ******************************************************************************/ u32 -xxx_acpi_ps_get_next_package_length ( - ACPI_PARSE_STATE *parser_state) -{ - u32 encoding_length; - u32 package_length = 0; - u8 *aml_ptr = parser_state->aml; - - - encoding_length = acpi_ps_pkg_length_encoding_size ((u32) GET8 (aml_ptr)); - - - switch (encoding_length) - { - case 1: /* 1-byte encoding (bits 0-5) */ - - package_length = ((u32) GET8 (aml_ptr) & 0x3f); - break; - - - case 2: /* 2-byte encoding (next byte + bits 0-3) */ - - package_length = ((((u32) GET8 (aml_ptr + 1)) << 4) | - (((u32) GET8 (aml_ptr)) & 0x0f)); - break; - - - case 3: /* 3-byte encoding (next 2 bytes + bits 0-3) */ - - package_length = ((((u32) GET8 (aml_ptr + 2)) << 12) | - (((u32) GET8 (aml_ptr + 1)) << 4) | - (((u32) GET8 (aml_ptr)) & 0x0f)); - break; - - - case 4: /* 4-byte encoding (next 3 bytes + bits 0-3) */ - - package_length = ((((u32) GET8 (aml_ptr + 3)) << 20) | - (((u32) GET8 (aml_ptr + 2)) << 12) | - (((u32) GET8 (aml_ptr + 1)) << 4) | - (((u32) GET8 (aml_ptr)) & 0x0f)); - break; - } - - parser_state->aml += encoding_length; - - return (package_length); -} - -u32 acpi_ps_get_next_package_length ( ACPI_PARSE_STATE *parser_state) { - u32 encoded_length; - u32 length = 0; + s32 encoded_length; + s32 length = 0; - encoded_length = (u32) GET8 (parser_state->aml); + encoded_length = (s32) GET8 (parser_state->aml); parser_state->aml++; @@ -201,13 +137,13 @@ * ******************************************************************************/ -NATIVE_CHAR * +char * acpi_ps_get_next_namestring ( ACPI_PARSE_STATE *parser_state) { - u8 *start = parser_state->aml; - u8 *end = parser_state->aml; - u32 length; + char *start = (char *) parser_state->aml; + char *end = (char *) parser_state->aml; + s32 length; /* Handle multiple prefix characters */ @@ -245,7 +181,7 @@ /* multiple name segments */ - length = (u32) GET8 (end + 1) * 4; + length = (s32) GET8 (end + 1) * 4; end += 2 + length; break; @@ -261,7 +197,7 @@ parser_state->aml = (u8*) end; - return ((NATIVE_CHAR *) start); + return (start); } @@ -292,14 +228,14 @@ void acpi_ps_get_next_namepath ( ACPI_PARSE_STATE *parser_state, - ACPI_PARSE_OBJECT *arg, + ACPI_GENERIC_OP *arg, u32 *arg_count, u8 method_call) { - NATIVE_CHAR *path; - ACPI_PARSE_OBJECT *name_op; - ACPI_PARSE_OBJECT *op; - ACPI_PARSE_OBJECT *count; + char *path; + ACPI_GENERIC_OP *name; + ACPI_GENERIC_OP *op; + ACPI_GENERIC_OP *count; path = acpi_ps_get_next_namestring (parser_state); @@ -334,18 +270,18 @@ count = acpi_ps_get_arg (op, 0); if (count && count->opcode == AML_BYTE_OP) { - name_op = acpi_ps_alloc_op (AML_NAMEPATH_OP); - if (name_op) { + name = acpi_ps_alloc_op (AML_NAMEPATH_OP); + if (name) { /* Change arg into a METHOD CALL and attach the name */ acpi_ps_init_op (arg, AML_METHODCALL_OP); - name_op->value.name = path; + name->value.name = path; - /* Point METHODCALL/NAME to the METHOD Node */ + /* Point METHODCALL/NAME to the METHOD NTE */ - name_op->node = (ACPI_NAMESPACE_NODE *) op; - acpi_ps_append_arg (arg, name_op); + name->acpi_named_object = op; + acpi_ps_append_arg (arg, name); *arg_count = count->value.integer & METHOD_FLAGS_ARG_COUNT; @@ -384,15 +320,15 @@ void acpi_ps_get_next_namepath ( ACPI_PARSE_STATE *parser_state, - ACPI_PARSE_OBJECT *arg, + ACPI_GENERIC_OP *arg, u32 *arg_count, u8 method_call) { - NATIVE_CHAR *path; - ACPI_PARSE_OBJECT *name_op; + char *path; + ACPI_GENERIC_OP *name; ACPI_STATUS status; - ACPI_NAMESPACE_NODE *method_node = NULL; - ACPI_NAMESPACE_NODE *node; + ACPI_NAMED_OBJECT *method = NULL; + ACPI_NAMED_OBJECT *entry; ACPI_GENERIC_STATE scope_info; @@ -410,10 +346,10 @@ /* * Lookup the name in the internal namespace */ - scope_info.scope.node = NULL; - node = parser_state->start_node; - if (node) { - scope_info.scope.node = node; + scope_info.scope.name_table = NULL; + entry = parser_state->start_op->acpi_named_object; + if (entry) { + scope_info.scope.name_table = entry->child_table; } /* @@ -425,24 +361,24 @@ status = acpi_ns_lookup (&scope_info, path, ACPI_TYPE_ANY, IMODE_EXECUTE, NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE, NULL, - &node); + &entry); if (ACPI_SUCCESS (status)) { - if (node->type == ACPI_TYPE_METHOD) { - method_node = node; - name_op = acpi_ps_alloc_op (AML_NAMEPATH_OP); - if (name_op) { + if (entry->type == ACPI_TYPE_METHOD) { + method = entry; + name = acpi_ps_alloc_op (AML_NAMEPATH_OP); + if (name) { /* Change arg into a METHOD CALL and attach name to it */ acpi_ps_init_op (arg, AML_METHODCALL_OP); - name_op->value.name = path; + name->value.name = path; - /* Point METHODCALL/NAME to the METHOD Node */ + /* Point METHODCALL/NAME to the METHOD NTE */ - name_op->node = method_node; - acpi_ps_append_arg (arg, name_op); + name->acpi_named_object = method; + acpi_ps_append_arg (arg, name); - *arg_count = ((ACPI_OPERAND_OBJECT *) method_node->object)->method.param_count; + *arg_count = ((ACPI_OBJECT_INTERNAL *) method->object)->method.param_count; } return; @@ -488,8 +424,8 @@ void acpi_ps_get_next_simple_arg ( ACPI_PARSE_STATE *parser_state, - u32 arg_type, - ACPI_PARSE_OBJECT *arg) + s32 arg_type, + ACPI_GENERIC_OP *arg) { @@ -562,13 +498,13 @@ * ******************************************************************************/ -ACPI_PARSE_OBJECT * +ACPI_GENERIC_OP * acpi_ps_get_next_field ( ACPI_PARSE_STATE *parser_state) { ACPI_PTRDIFF aml_offset = parser_state->aml - parser_state->aml_start; - ACPI_PARSE_OBJECT *field; + ACPI_GENERIC_OP *field; u16 opcode; u32 name; @@ -662,16 +598,16 @@ * ******************************************************************************/ -ACPI_PARSE_OBJECT * +ACPI_GENERIC_OP * acpi_ps_get_next_arg ( ACPI_PARSE_STATE *parser_state, - u32 arg_type, + s32 arg_type, u32 *arg_count) { - ACPI_PARSE_OBJECT *arg = NULL; - ACPI_PARSE_OBJECT *prev = NULL; - ACPI_PARSE_OBJECT *field; - u32 subop; + ACPI_GENERIC_OP *arg = NULL; + ACPI_GENERIC_OP *prev = NULL; + ACPI_GENERIC_OP *field; + s32 subop; switch (arg_type) @@ -739,7 +675,7 @@ /* fill in bytelist data */ arg->value.size = (parser_state->pkg_end - parser_state->aml); - ((ACPI_PARSE2_OBJECT *) arg)->data = parser_state->aml; + acpi_ps_to_bytelist_op (arg)->data = parser_state->aml; } /* skip to End of byte data */ diff -urN linux-2.4.0-test9/drivers/acpi/parser/psfind.c linux-2.4.0-test9-lia/drivers/acpi/parser/psfind.c --- linux-2.4.0-test9/drivers/acpi/parser/psfind.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/psfind.c Wed Dec 31 16:00:00 1969 @@ -1,319 +0,0 @@ - -/****************************************************************************** - * - * Module Name: psfind - Parse tree search routine - * $Revision: 16 $ - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 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 "amlcode.h" - -#define _COMPONENT PARSER - MODULE_NAME ("psfind") - - -/******************************************************************************* - * - * FUNCTION: Acpi_ps_get_parent - * - * PARAMETERS: Op - Get the parent of this Op - * - * RETURN: The Parent op. - * - * DESCRIPTION: Get op's parent - * - ******************************************************************************/ - -ACPI_PARSE_OBJECT* -acpi_ps_get_parent ( - ACPI_PARSE_OBJECT *op) -{ - ACPI_PARSE_OBJECT *parent = op; - - - /* Traverse the tree upward (to root if necessary) */ - - while (parent) { - switch (parent->opcode) - { - case AML_SCOPE_OP: - case AML_PACKAGE_OP: - case AML_METHOD_OP: - case AML_DEVICE_OP: - case AML_POWER_RES_OP: - case AML_THERMAL_ZONE_OP: - - return (parent->parent); - } - - parent = parent->parent; - } - - return (parent); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ps_find_name - * - * PARAMETERS: Scope - Scope to search - * Name - ACPI name to search for - * Opcode - Opcode to search for - * - * RETURN: Op containing the name - * - * DESCRIPTION: Find name segment from a list of acpi_ops. Searches a single - * scope, no more. - * - ******************************************************************************/ - -ACPI_PARSE_OBJECT * -acpi_ps_find_name ( - ACPI_PARSE_OBJECT *scope, - u32 name, - u32 opcode) -{ - ACPI_PARSE_OBJECT *op; - ACPI_PARSE_OBJECT *field; - - - /* search scope level for matching name segment */ - - op = acpi_ps_get_child (scope); - - while (op) { - - if (acpi_ps_is_field_op (op->opcode)) { - /* Field, search named fields */ - - field = acpi_ps_get_child (op); - while (field) { - if (acpi_ps_is_named_op (field->opcode) && - acpi_ps_get_name (field) == name && - (!opcode || field->opcode == opcode)) - { - return (field); - } - - field = field->next; - } - } - - else if (acpi_ps_is_create_field_op (op->opcode)) { - if (op->opcode == AML_CREATE_FIELD_OP) { - field = acpi_ps_get_arg (op, 3); - } - - else { - /* Create_xXXField, check name */ - - field = acpi_ps_get_arg (op, 2); - } - - if ((field) && - (field->value.string) && - (!STRNCMP (field->value.string, (char *) &name, ACPI_NAME_SIZE))) - { - return (op); - } - } - - else if ((acpi_ps_is_named_op (op->opcode)) && - (acpi_ps_get_name (op) == name) && - (!opcode || op->opcode == opcode)) - { - break; - } - - op = op->next; - } - - return (op); -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ps_find - * - * PARAMETERS: Scope - Where to begin the search - * Path - ACPI Path to the named object - * Opcode - Opcode associated with the object - * Create - if TRUE, create the object if not found. - * - * RETURN: Op if found, NULL otherwise. - * - * DESCRIPTION: Find object within scope - * - ******************************************************************************/ - -ACPI_PARSE_OBJECT* -acpi_ps_find ( - ACPI_PARSE_OBJECT *scope, - NATIVE_CHAR *path, - u16 opcode, - u32 create) -{ - u32 seg_count; - u32 name; - u32 name_op; - ACPI_PARSE_OBJECT *op = NULL; - u8 unprefixed = TRUE; - - - if (!scope || !path) { - return (NULL); - } - - - acpi_gbl_ps_find_count++; - - - /* Handle all prefixes in the name path */ - - while (acpi_ps_is_prefix_char (GET8 (path))) { - switch (GET8 (path)) - { - - case '\\': - - /* Could just use a global for "root scope" here */ - - while (scope->parent) { - scope = scope->parent; - } - - /* get first object within the scope */ - /* TBD: [Investigate] OR - set next in root scope to point to the same value as arg */ - - /* Scope = Scope->Value.Arg; */ - - break; - - - case '^': - - /* Go up to the next valid scoping Op (method, scope, etc.) */ - - if (acpi_ps_get_parent (scope)) { - scope = acpi_ps_get_parent (scope); - } - - break; - } - - unprefixed = FALSE; - path++; - } - - /* get name segment count */ - - switch (GET8 (path)) - { - case '\0': - seg_count = 0; - - /* Null name case */ - - if (unprefixed) { - op = NULL; - } - else { - op = scope; - } - - - return (op); - break; - - case AML_DUAL_NAME_PREFIX: - seg_count = 2; - path++; - break; - - case AML_MULTI_NAME_PREFIX_OP: - seg_count = GET8 (path + 1); - path += 2; - break; - - default: - seg_count = 1; - break; - } - - /* match each name segment */ - - while (scope && seg_count) { - MOVE_UNALIGNED32_TO_32 (&name, path); - path += 4; - seg_count --; - - if (seg_count) { - name_op = 0; - } - else { - name_op = opcode; - } - - op = acpi_ps_find_name (scope, name, name_op); - - if (!op) { - if (create) { - /* Create a new Scope level */ - - if (seg_count) { - op = acpi_ps_alloc_op (AML_SCOPE_OP); - } - else { - op = acpi_ps_alloc_op (opcode); - } - - if (op) { - acpi_ps_set_name (op, name); - acpi_ps_append_arg (scope, op); - - } - } - - else if (unprefixed) { - /* Search higher scopes for unprefixed name */ - - while (!op && scope->parent) { - scope = scope->parent; - op = acpi_ps_find_name (scope, name, opcode); - - } - } - - } - - unprefixed = FALSE; - scope = op; - } - - return (op); -} - - diff -urN linux-2.4.0-test9/drivers/acpi/parser/psopcode.c linux-2.4.0-test9-lia/drivers/acpi/parser/psopcode.c --- linux-2.4.0-test9/drivers/acpi/parser/psopcode.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/psopcode.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: psopcode - Parser opcode information table - * $Revision: 20 $ * *****************************************************************************/ @@ -25,32 +24,12 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" #define _COMPONENT PARSER - MODULE_NAME ("psopcode") - - -u8 acpi_gbl_aml_short_op_info_index[]; -u8 acpi_gbl_aml_long_op_info_index[]; - -#define _UNK 0x6B -/* - * Reserved ASCII characters. Do not use any of these for - * internal opcodes, since they are used to differentiate - * name strings from AML opcodes - */ -#define _ASC 0x6C -#define _NAM 0x6C -#define _PFX 0x6D -#define _UNKNOWN_OPCODE 0x02 /* An example unknown opcode */ - -#define MAX_EXTENDED_OPCODE 0x87 -#define NUM_EXTENDED_OPCODE MAX_EXTENDED_OPCODE + 1 -#define MAX_INTERNAL_OPCODE -#define NUM_INTERNAL_OPCODE MAX_INTERNAL_OPCODE + 1 + MODULE_NAME ("psopcode"); /******************************************************************************* @@ -62,41 +41,27 @@ * RETURN: A pointer to the info about the opcode. NULL if the opcode was * not found in the table. * - * DESCRIPTION: Find AML opcode description based on the opcode. - * NOTE: This procedure must ALWAYS return a valid pointer! + * DESCRIPTION: Find AML opcode description based on the opcode * ******************************************************************************/ -ACPI_OPCODE_INFO * +ACPI_OP_INFO * acpi_ps_get_opcode_info ( u16 opcode) { - ACPI_OPCODE_INFO *op_info; - u8 upper_opcode; - u8 lower_opcode; - - - /* Split the 16-bit opcode into separate bytes */ - - upper_opcode = (u8) (opcode >> 8); - lower_opcode = (u8) opcode; - - /* Default is "unknown opcode" */ + ACPI_OP_INFO *op; + s32 hash; - op_info = &acpi_gbl_aml_op_info [_UNK]; + /* compute hash/index into the Acpi_aml_op_index table */ - /* - * Detect normal 8-bit opcode or extended 16-bit opcode - */ - - switch (upper_opcode) + switch (opcode >> 8) { case 0: - /* Simple (8-bit) opcode: 0-255, can't index beyond table */ + /* Simple (8-bit) opcode */ - op_info = &acpi_gbl_aml_op_info [acpi_gbl_aml_short_op_info_index [lower_opcode]]; + hash = opcode; break; @@ -104,29 +69,38 @@ /* Extended (16-bit, prefix+opcode) opcode */ - if (lower_opcode <= MAX_EXTENDED_OPCODE) { - op_info = &acpi_gbl_aml_op_info [acpi_gbl_aml_long_op_info_index [lower_opcode]]; - } + hash = (opcode + AML_EXTOP_HASH_OFFSET) & 0xff; break; case AML_LNOT_OP: /* This case is for the bogus opcodes LNOTEQUAL, LLESSEQUAL, LGREATEREQUAL */ - /* TBD: [Investigate] remove this case? */ + hash = (opcode + AML_LNOT_HASH_OFFSET) & 0xff; break; default: - break; + return NULL; } /* Get the Op info pointer for this opcode */ - return (op_info); + op = &acpi_gbl_aml_op_info [(s32) acpi_gbl_aml_op_info_index [hash]]; + + + /* If the returned opcode matches, we have a valid opcode */ + + if (op->opcode == opcode) { + return op; + } + + /* Otherwise, the opcode is an ASCII char or other non-opcode value */ + + return NULL; } @@ -143,19 +117,21 @@ * ******************************************************************************/ -NATIVE_CHAR * +char * acpi_ps_get_opcode_name ( u16 opcode) { - ACPI_OPCODE_INFO *op; + ACPI_OP_INFO *op; op = acpi_ps_get_opcode_info (opcode); - /* Always guaranteed to return a valid pointer */ + if (!op) { + return "*ERROR*"; + } DEBUG_ONLY_MEMBERS (return op->name); - return ("AE_NOT_CONFIGURED"); + return "AE_NOT_CONFIGURED"; } @@ -177,7 +153,7 @@ * 6-7 (2 bits) = Reserved */ #define AML_NO_ARGS 0 -#define AML_HAS_ARGS ACPI_OP_ARGS_MASK +#define AML_HAS_ARGS OP_INFO_HAS_ARGS /* * All AML opcodes and the parse-time arguments for each. Used by the AML parser Each list is compressed @@ -249,7 +225,7 @@ #define ARGP_IF_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST) #define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST) #define ARGP_WHILE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_TERMLIST) -#define ARGP_NOOP_OP ARG_NONE +#define ARGP_NOOP_CODE ARG_NONE #define ARGP_RETURN_OP ARGP_LIST1 (ARGP_TERMARG) #define ARGP_BREAK_OP ARG_NONE #define ARGP_BREAK_POINT_OP ARG_NONE @@ -266,9 +242,9 @@ #define ARGP_WAIT_OP ARGP_LIST2 (ARGP_SUPERNAME, ARGP_TERMARG) #define ARGP_RESET_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_RELEASE_OP ARGP_LIST1 (ARGP_SUPERNAME) -#define ARGP_FROM_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_TO_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) -#define ARGP_UNLOAD_OP ARGP_LIST1 (ARGP_SUPERNAME) +#define ARGP_FROM_BCDOP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_TO_BCDOP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET) +#define ARGP_UN_LOAD_OP ARGP_LIST1 (ARGP_SUPERNAME) #define ARGP_REVISION_OP ARG_NONE #define ARGP_DEBUG_OP ARG_NONE #define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG) @@ -364,7 +340,7 @@ #define ARGI_IF_OP ARGI_INVALID_OPCODE #define ARGI_ELSE_OP ARGI_INVALID_OPCODE #define ARGI_WHILE_OP ARGI_INVALID_OPCODE -#define ARGI_NOOP_OP ARG_NONE +#define ARGI_NOOP_CODE ARG_NONE #define ARGI_RETURN_OP ARGI_INVALID_OPCODE #define ARGI_BREAK_OP ARG_NONE #define ARGI_BREAK_POINT_OP ARG_NONE @@ -381,9 +357,9 @@ #define ARGI_WAIT_OP ARGI_LIST2 (ARGI_EVENT, ARGI_NUMBER) #define ARGI_RESET_OP ARGI_LIST1 (ARGI_EVENT) #define ARGI_RELEASE_OP ARGI_LIST1 (ARGI_MUTEX) -#define ARGI_FROM_BCD_OP ARGI_LIST2 (ARGI_NUMBER, ARGI_TARGETREF) -#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_NUMBER, ARGI_TARGETREF) -#define ARGI_UNLOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE) +#define ARGI_FROM_BCDOP ARGI_LIST2 (ARGI_NUMBER, ARGI_TARGETREF) +#define ARGI_TO_BCDOP ARGI_LIST2 (ARGI_NUMBER, ARGI_TARGETREF) +#define ARGI_UN_LOAD_OP ARGI_LIST1 (ARGI_DDBHANDLE) #define ARGI_REVISION_OP ARG_NONE #define ARGI_DEBUG_OP ARG_NONE #define ARGI_FATAL_OP ARGI_LIST3 (ARGI_NUMBER, ARGI_NUMBER, ARGI_NUMBER) @@ -412,156 +388,157 @@ */ -ACPI_OPCODE_INFO acpi_gbl_aml_op_info[] = +ACPI_OP_INFO acpi_gbl_aml_op_info[] = { -/* Index Opcode Type Class Has Arguments? Name Parser Args Interpreter Args */ +/* Opcode Opcode Type Has Arguments? Child Name Parser Args Interpreter Args */ -/* 00 */ /* AML_ZERO_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS, "Zero_op", ARGP_ZERO_OP, ARGI_ZERO_OP), -/* 01 */ /* AML_ONE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS, "One_op", ARGP_ONE_OP, ARGI_ONE_OP), -/* 02 */ /* AML_ALIAS_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP), -/* 03 */ /* AML_NAME_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Name", ARGP_NAME_OP, ARGI_NAME_OP), -/* 04 */ /* AML_BYTE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS, "Byte_const", ARGP_BYTE_OP, ARGI_BYTE_OP), -/* 05 */ /* AML_WORD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS, "Word_const", ARGP_WORD_OP, ARGI_WORD_OP), -/* 06 */ /* AML_DWORD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS, "Dword_const", ARGP_DWORD_OP, ARGI_DWORD_OP), -/* 07 */ /* AML_STRING_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS, "String", ARGP_STRING_OP, ARGI_STRING_OP), -/* 08 */ /* AML_SCOPE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP), -/* 09 */ /* AML_BUFFER_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DATA_TERM| AML_HAS_ARGS, "Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP), -/* 0A */ /* AML_PACKAGE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DATA_TERM| AML_HAS_ARGS, "Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP), -/* 0B */ /* AML_METHOD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Method", ARGP_METHOD_OP, ARGI_METHOD_OP), -/* 0C */ /* AML_LOCAL0 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS, "Local0", ARGP_LOCAL0, ARGI_LOCAL0), -/* 0D */ /* AML_LOCAL1 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS, "Local1", ARGP_LOCAL1, ARGI_LOCAL1), -/* 0E */ /* AML_LOCAL2 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS, "Local2", ARGP_LOCAL2, ARGI_LOCAL2), -/* 0F */ /* AML_LOCAL3 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS, "Local3", ARGP_LOCAL3, ARGI_LOCAL3), -/* 10 */ /* AML_LOCAL4 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS, "Local4", ARGP_LOCAL4, ARGI_LOCAL4), -/* 11 */ /* AML_LOCAL5 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS, "Local5", ARGP_LOCAL5, ARGI_LOCAL5), -/* 12 */ /* AML_LOCAL6 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS, "Local6", ARGP_LOCAL6, ARGI_LOCAL6), -/* 13 */ /* AML_LOCAL7 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS, "Local7", ARGP_LOCAL7, ARGI_LOCAL7), -/* 14 */ /* AML_ARG0 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS, "Arg0", ARGP_ARG0, ARGI_ARG0), -/* 15 */ /* AML_ARG1 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS, "Arg1", ARGP_ARG1, ARGI_ARG1), -/* 16 */ /* AML_ARG2 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS, "Arg2", ARGP_ARG2, ARGI_ARG2), -/* 17 */ /* AML_ARG3 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS, "Arg3", ARGP_ARG3, ARGI_ARG3), -/* 18 */ /* AML_ARG4 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS, "Arg4", ARGP_ARG4, ARGI_ARG4), -/* 19 */ /* AML_ARG5 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS, "Arg5", ARGP_ARG5, ARGI_ARG5), -/* 1_a */ /* AML_ARG6 */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS, "Arg6", ARGP_ARG6, ARGI_ARG6), -/* 1_b */ /* AML_STORE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS, "Store", ARGP_STORE_OP, ARGI_STORE_OP), -/* 1_c */ /* AML_REF_OF_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS, "Ref_of", ARGP_REF_OF_OP, ARGI_REF_OF_OP), -/* 1_d */ /* AML_ADD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "Add", ARGP_ADD_OP, ARGI_ADD_OP), -/* 1_e */ /* AML_CONCAT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "Concat", ARGP_CONCAT_OP, ARGI_CONCAT_OP), -/* 1_f */ /* AML_SUBTRACT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP), -/* 20 */ /* AML_INCREMENT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS, "Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP), -/* 21 */ /* AML_DECREMENT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS, "Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP), -/* 22 */ /* AML_MULTIPLY_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP), -/* 23 */ /* AML_DIVIDE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP), -/* 24 */ /* AML_SHIFT_LEFT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "Shift_left", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP), -/* 25 */ /* AML_SHIFT_RIGHT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "Shift_right", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP), -/* 26 */ /* AML_BIT_AND_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP), -/* 27 */ /* AML_BIT_NAND_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP), -/* 28 */ /* AML_BIT_OR_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP), -/* 29 */ /* AML_BIT_NOR_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP), -/* 2_a */ /* AML_BIT_XOR_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_r| AML_HAS_ARGS, "XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP), -/* 2_b */ /* AML_BIT_NOT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS, "Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP), -/* 2_c */ /* AML_FIND_SET_LEFT_BIT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS, "Find_set_left_bit", ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP), -/* 2_d */ /* AML_FIND_SET_RIGHT_BIT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS, "Find_set_right_bit", ARGP_FIND_SET_RIGHT_BIT_OP, ARGI_FIND_SET_RIGHT_BIT_OP), -/* 2_e */ /* AML_DEREF_OF_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS, "Deref_of", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP), -/* 2_f */ /* AML_NOTIFY_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC1| AML_HAS_ARGS, "Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP), -/* 30 */ /* AML_SIZE_OF_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS, "Size_of", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP), -/* 31 */ /* AML_INDEX_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_INDEX| AML_HAS_ARGS, "Index", ARGP_INDEX_OP, ARGI_INDEX_OP), -/* 32 */ /* AML_MATCH_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MATCH| AML_HAS_ARGS, "Match", ARGP_MATCH_OP, ARGI_MATCH_OP), -/* 33 */ /* AML_DWORD_FIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS, "Create_dWord_field", ARGP_DWORD_FIELD_OP, ARGI_DWORD_FIELD_OP), -/* 34 */ /* AML_WORD_FIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS, "Create_word_field", ARGP_WORD_FIELD_OP, ARGI_WORD_FIELD_OP), -/* 35 */ /* AML_BYTE_FIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS, "Create_byte_field", ARGP_BYTE_FIELD_OP, ARGI_BYTE_FIELD_OP), -/* 36 */ /* AML_BIT_FIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS, "Create_bit_field", ARGP_BIT_FIELD_OP, ARGI_BIT_FIELD_OP), -/* 37 */ /* AML_TYPE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS, "Object_type", ARGP_TYPE_OP, ARGI_TYPE_OP), -/* 38 */ /* AML_LAND_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS, "LAnd", ARGP_LAND_OP, ARGI_LAND_OP), -/* 39 */ /* AML_LOR_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS, "LOr", ARGP_LOR_OP, ARGI_LOR_OP), -/* 3_a */ /* AML_LNOT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2| AML_HAS_ARGS, "LNot", ARGP_LNOT_OP, ARGI_LNOT_OP), -/* 3_b */ /* AML_LEQUAL_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS, "LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP), -/* 3_c */ /* AML_LGREATER_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS, "LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP), -/* 3_d */ /* AML_LLESS_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2| AML_HAS_ARGS, "LLess", ARGP_LLESS_OP, ARGI_LLESS_OP), -/* 3_e */ /* AML_IF_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_HAS_ARGS, "If", ARGP_IF_OP, ARGI_IF_OP), -/* 3_f */ /* AML_ELSE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_HAS_ARGS, "Else", ARGP_ELSE_OP, ARGI_ELSE_OP), -/* 40 */ /* AML_WHILE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_HAS_ARGS, "While", ARGP_WHILE_OP, ARGI_WHILE_OP), -/* 41 */ /* AML_NOOP_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_NO_ARGS, "Noop", ARGP_NOOP_OP, ARGI_NOOP_OP), -/* 42 */ /* AML_RETURN_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_HAS_ARGS, "Return", ARGP_RETURN_OP, ARGI_RETURN_OP), -/* 43 */ /* AML_BREAK_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_NO_ARGS, "Break", ARGP_BREAK_OP, ARGI_BREAK_OP), -/* 44 */ /* AML_BREAK_POINT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONTROL| AML_NO_ARGS, "Break_point", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP), -/* 45 */ /* AML_ONES_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS, "Ones_op", ARGP_ONES_OP, ARGI_ONES_OP), +/* 00 */ OP_INFO_ENTRY (AML_ZERO_OP, OPTYPE_CONSTANT| AML_NO_ARGS| 0, "Zero_op", ARGP_ZERO_OP, ARGI_ZERO_OP), +/* 01 */ OP_INFO_ENTRY (AML_ONE_OP, OPTYPE_CONSTANT| AML_NO_ARGS| 0, "One_op", ARGP_ONE_OP, ARGI_ONE_OP), +/* 02 */ OP_INFO_ENTRY (AML_ALIAS_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP), +/* 03 */ OP_INFO_ENTRY (AML_NAME_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Name", ARGP_NAME_OP, ARGI_NAME_OP), +/* 04 */ OP_INFO_ENTRY (AML_BYTE_OP, OPTYPE_LITERAL| AML_NO_ARGS| 0, "Byte_const", ARGP_BYTE_OP, ARGI_BYTE_OP), +/* 05 */ OP_INFO_ENTRY (AML_WORD_OP, OPTYPE_LITERAL| AML_NO_ARGS| 0, "Word_const", ARGP_WORD_OP, ARGI_WORD_OP), +/* 06 */ OP_INFO_ENTRY (AML_DWORD_OP, OPTYPE_LITERAL| AML_NO_ARGS| 0, "Dword_const", ARGP_DWORD_OP, ARGI_DWORD_OP), +/* 07 */ OP_INFO_ENTRY (AML_STRING_OP, OPTYPE_LITERAL| AML_NO_ARGS| 0, "String", ARGP_STRING_OP, ARGI_STRING_OP), +/* 08 */ OP_INFO_ENTRY (AML_SCOPE_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP), +/* 09 */ OP_INFO_ENTRY (AML_BUFFER_OP, OPTYPE_DATA_TERM| AML_HAS_ARGS| 0, "Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP), +/* 0A */ OP_INFO_ENTRY (AML_PACKAGE_OP, OPTYPE_DATA_TERM| AML_HAS_ARGS| 0, "Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP), +/* 0B */ OP_INFO_ENTRY (AML_METHOD_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Method", ARGP_METHOD_OP, ARGI_METHOD_OP), +/* 0C */ OP_INFO_ENTRY (AML_LOCAL0, OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS| 0, "Local0", ARGP_LOCAL0, ARGI_LOCAL0), +/* 0D */ OP_INFO_ENTRY (AML_LOCAL1, OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS| 0, "Local1", ARGP_LOCAL1, ARGI_LOCAL1), +/* 0E */ OP_INFO_ENTRY (AML_LOCAL2, OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS| 0, "Local2", ARGP_LOCAL2, ARGI_LOCAL2), +/* 0F */ OP_INFO_ENTRY (AML_LOCAL3, OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS| 0, "Local3", ARGP_LOCAL3, ARGI_LOCAL3), +/* 10 */ OP_INFO_ENTRY (AML_LOCAL4, OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS| 0, "Local4", ARGP_LOCAL4, ARGI_LOCAL4), +/* 11 */ OP_INFO_ENTRY (AML_LOCAL5, OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS| 0, "Local5", ARGP_LOCAL5, ARGI_LOCAL5), +/* 12 */ OP_INFO_ENTRY (AML_LOCAL6, OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS| 0, "Local6", ARGP_LOCAL6, ARGI_LOCAL6), +/* 13 */ OP_INFO_ENTRY (AML_LOCAL7, OPTYPE_LOCAL_VARIABLE| AML_NO_ARGS| 0, "Local7", ARGP_LOCAL7, ARGI_LOCAL7), +/* 14 */ OP_INFO_ENTRY (AML_ARG0, OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS| 0, "Arg0", ARGP_ARG0, ARGI_ARG0), +/* 15 */ OP_INFO_ENTRY (AML_ARG1, OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS| 0, "Arg1", ARGP_ARG1, ARGI_ARG1), +/* 16 */ OP_INFO_ENTRY (AML_ARG2, OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS| 0, "Arg2", ARGP_ARG2, ARGI_ARG2), +/* 17 */ OP_INFO_ENTRY (AML_ARG3, OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS| 0, "Arg3", ARGP_ARG3, ARGI_ARG3), +/* 18 */ OP_INFO_ENTRY (AML_ARG4, OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS| 0, "Arg4", ARGP_ARG4, ARGI_ARG4), +/* 19 */ OP_INFO_ENTRY (AML_ARG5, OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS| 0, "Arg5", ARGP_ARG5, ARGI_ARG5), +/* 1_a */ OP_INFO_ENTRY (AML_ARG6, OPTYPE_METHOD_ARGUMENT| AML_NO_ARGS| 0, "Arg6", ARGP_ARG6, ARGI_ARG6), +/* 1_b */ OP_INFO_ENTRY (AML_STORE_OP, OPTYPE_MONADIC2_r| AML_HAS_ARGS| 0, "Store", ARGP_STORE_OP, ARGI_STORE_OP), +/* 1_c */ OP_INFO_ENTRY (AML_REF_OF_OP, OPTYPE_MONADIC2| AML_HAS_ARGS| 0, "Ref_of", ARGP_REF_OF_OP, ARGI_REF_OF_OP), +/* 1_d */ OP_INFO_ENTRY (AML_ADD_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "Add", ARGP_ADD_OP, ARGI_ADD_OP), +/* 1_e */ OP_INFO_ENTRY (AML_CONCAT_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "Concat", ARGP_CONCAT_OP, ARGI_CONCAT_OP), +/* 1_f */ OP_INFO_ENTRY (AML_SUBTRACT_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP), +/* 20 */ OP_INFO_ENTRY (AML_INCREMENT_OP, OPTYPE_MONADIC2| AML_HAS_ARGS| 0, "Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP), +/* 21 */ OP_INFO_ENTRY (AML_DECREMENT_OP, OPTYPE_MONADIC2| AML_HAS_ARGS| 0, "Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP), +/* 22 */ OP_INFO_ENTRY (AML_MULTIPLY_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP), +/* 23 */ OP_INFO_ENTRY (AML_DIVIDE_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP), +/* 24 */ OP_INFO_ENTRY (AML_SHIFT_LEFT_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "Shift_left", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP), +/* 25 */ OP_INFO_ENTRY (AML_SHIFT_RIGHT_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "Shift_right", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP), +/* 26 */ OP_INFO_ENTRY (AML_BIT_AND_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP), +/* 27 */ OP_INFO_ENTRY (AML_BIT_NAND_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP), +/* 28 */ OP_INFO_ENTRY (AML_BIT_OR_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP), +/* 29 */ OP_INFO_ENTRY (AML_BIT_NOR_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP), +/* 2_a */ OP_INFO_ENTRY (AML_BIT_XOR_OP, OPTYPE_DYADIC2_r| AML_HAS_ARGS| 0, "XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP), +/* 2_b */ OP_INFO_ENTRY (AML_BIT_NOT_OP, OPTYPE_MONADIC2_r| AML_HAS_ARGS| 0, "Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP), +/* 2_c */ OP_INFO_ENTRY (AML_FIND_SET_LEFT_BIT_OP, OPTYPE_MONADIC2_r| AML_HAS_ARGS| 0, "Find_set_left_bit", ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP), +/* 2_d */ OP_INFO_ENTRY (AML_FIND_SET_RIGHT_BIT_OP, OPTYPE_MONADIC2_r| AML_HAS_ARGS| 0, "Find_set_right_bit", ARGP_FIND_SET_RIGHT_BIT_OP, ARGI_FIND_SET_RIGHT_BIT_OP), +/* 2_e */ OP_INFO_ENTRY (AML_DEREF_OF_OP, OPTYPE_MONADIC2| AML_HAS_ARGS| 0, "Deref_of", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP), +/* 2_f */ OP_INFO_ENTRY (AML_NOTIFY_OP, OPTYPE_DYADIC1| AML_HAS_ARGS| 0, "Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP), +/* 30 */ OP_INFO_ENTRY (AML_SIZE_OF_OP, OPTYPE_MONADIC2| AML_HAS_ARGS| 0, "Size_of", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP), +/* 31 */ OP_INFO_ENTRY (AML_INDEX_OP, OPTYPE_INDEX| AML_HAS_ARGS| 0, "Index", ARGP_INDEX_OP, ARGI_INDEX_OP), +/* 32 */ OP_INFO_ENTRY (AML_MATCH_OP, OPTYPE_MATCH| AML_HAS_ARGS| 0, "Match", ARGP_MATCH_OP, ARGI_MATCH_OP), +/* 33 */ OP_INFO_ENTRY (AML_DWORD_FIELD_OP, OPTYPE_CREATE_FIELD| AML_HAS_ARGS| 0, "Create_dWord_field", ARGP_DWORD_FIELD_OP, ARGI_DWORD_FIELD_OP), +/* 34 */ OP_INFO_ENTRY (AML_WORD_FIELD_OP, OPTYPE_CREATE_FIELD| AML_HAS_ARGS| 0, "Create_word_field", ARGP_WORD_FIELD_OP, ARGI_WORD_FIELD_OP), +/* 35 */ OP_INFO_ENTRY (AML_BYTE_FIELD_OP, OPTYPE_CREATE_FIELD| AML_HAS_ARGS| 0, "Create_byte_field", ARGP_BYTE_FIELD_OP, ARGI_BYTE_FIELD_OP), +/* 36 */ OP_INFO_ENTRY (AML_BIT_FIELD_OP, OPTYPE_CREATE_FIELD| AML_HAS_ARGS| 0, "Create_bit_field", ARGP_BIT_FIELD_OP, ARGI_BIT_FIELD_OP), +/* 37 */ OP_INFO_ENTRY (AML_TYPE_OP, OPTYPE_MONADIC2| AML_HAS_ARGS| 0, "Object_type", ARGP_TYPE_OP, ARGI_TYPE_OP), +/* 38 */ OP_INFO_ENTRY (AML_LAND_OP, OPTYPE_DYADIC2| AML_HAS_ARGS| 0, "LAnd", ARGP_LAND_OP, ARGI_LAND_OP), +/* 39 */ OP_INFO_ENTRY (AML_LOR_OP, OPTYPE_DYADIC2| AML_HAS_ARGS| 0, "LOr", ARGP_LOR_OP, ARGI_LOR_OP), +/* 3_a */ OP_INFO_ENTRY (AML_LNOT_OP, OPTYPE_MONADIC2| AML_HAS_ARGS| 0, "LNot", ARGP_LNOT_OP, ARGI_LNOT_OP), +/* 3_b */ OP_INFO_ENTRY (AML_LEQUAL_OP, OPTYPE_DYADIC2| AML_HAS_ARGS| 0, "LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP), +/* 3_c */ OP_INFO_ENTRY (AML_LGREATER_OP, OPTYPE_DYADIC2| AML_HAS_ARGS| 0, "LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP), +/* 3_d */ OP_INFO_ENTRY (AML_LLESS_OP, OPTYPE_DYADIC2| AML_HAS_ARGS| 0, "LLess", ARGP_LLESS_OP, ARGI_LLESS_OP), +/* 3_e */ OP_INFO_ENTRY (AML_IF_OP, OPTYPE_CONTROL| AML_HAS_ARGS| 0, "If", ARGP_IF_OP, ARGI_IF_OP), +/* 3_f */ OP_INFO_ENTRY (AML_ELSE_OP, OPTYPE_CONTROL| AML_HAS_ARGS| 0, "Else", ARGP_ELSE_OP, ARGI_ELSE_OP), +/* 40 */ OP_INFO_ENTRY (AML_WHILE_OP, OPTYPE_CONTROL| AML_HAS_ARGS| 0, "While", ARGP_WHILE_OP, ARGI_WHILE_OP), +/* 41 */ OP_INFO_ENTRY (AML_NOOP_CODE, OPTYPE_CONTROL| AML_NO_ARGS| 0, "Noop", ARGP_NOOP_CODE, ARGI_NOOP_CODE), +/* 42 */ OP_INFO_ENTRY (AML_RETURN_OP, OPTYPE_CONTROL| AML_HAS_ARGS| 0, "Return", ARGP_RETURN_OP, ARGI_RETURN_OP), +/* 43 */ OP_INFO_ENTRY (AML_BREAK_OP, OPTYPE_CONTROL| AML_NO_ARGS| 0, "Break", ARGP_BREAK_OP, ARGI_BREAK_OP), +/* 44 */ OP_INFO_ENTRY (AML_BREAK_POINT_OP, OPTYPE_CONTROL| AML_NO_ARGS| 0, "Break_point", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP), +/* 45 */ OP_INFO_ENTRY (AML_ONES_OP, OPTYPE_CONSTANT| AML_NO_ARGS| 0, "Ones_op", ARGP_ONES_OP, ARGI_ONES_OP), /* Prefixed opcodes (Two-byte opcodes with a prefix op) */ -/* 46 */ /* AML_MUTEX_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP), -/* 47 */ /* AML_EVENT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_NO_ARGS, "Event", ARGP_EVENT_OP, ARGI_EVENT_OP), -/* 48 */ /* AML_COND_REF_OF_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS, "Cond_ref_of", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP), -/* 49 */ /* AML_CREATE_FIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CREATE_FIELD| AML_HAS_ARGS, "Create_field", ARGP_CREATE_FIELD_OP, ARGI_CREATE_FIELD_OP), -/* 4_a */ /* AML_LOAD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_RECONFIGURATION| AML_HAS_ARGS, "Load", ARGP_LOAD_OP, ARGI_LOAD_OP), -/* 4_b */ /* AML_STALL_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS, "Stall", ARGP_STALL_OP, ARGI_STALL_OP), -/* 4_c */ /* AML_SLEEP_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS, "Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP), -/* 4_d */ /* AML_ACQUIRE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_s| AML_HAS_ARGS, "Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP), -/* 4_e */ /* AML_SIGNAL_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS, "Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP), -/* 4_f */ /* AML_WAIT_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_DYADIC2_s| AML_HAS_ARGS, "Wait", ARGP_WAIT_OP, ARGI_WAIT_OP), -/* 50 */ /* AML_RESET_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS, "Reset", ARGP_RESET_OP, ARGI_RESET_OP), -/* 51 */ /* AML_RELEASE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC1| AML_HAS_ARGS, "Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP), -/* 52 */ /* AML_FROM_BCD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS, "From_bCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP), -/* 53 */ /* AML_TO_BCD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_MONADIC2_r| AML_HAS_ARGS, "To_bCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP), -/* 54 */ /* AML_UNLOAD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_RECONFIGURATION| AML_HAS_ARGS, "Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP), -/* 55 */ /* AML_REVISION_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS, "Revision", ARGP_REVISION_OP, ARGI_REVISION_OP), -/* 56 */ /* AML_DEBUG_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_CONSTANT| AML_NO_ARGS, "Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP), -/* 57 */ /* AML_FATAL_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_FATAL| AML_HAS_ARGS, "Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP), -/* 58 */ /* AML_REGION_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Op_region", ARGP_REGION_OP, ARGI_REGION_OP), -/* 59 */ /* AML_DEF_FIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Field", ARGP_DEF_FIELD_OP, ARGI_DEF_FIELD_OP), -/* 5_a */ /* AML_DEVICE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP), -/* 5_b */ /* AML_PROCESSOR_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP), -/* 5_c */ /* AML_POWER_RES_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Power_res", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP), -/* 5_d */ /* AML_THERMAL_ZONE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Thermal_zone", ARGP_THERMAL_ZONE_OP, ARGI_THERMAL_ZONE_OP), -/* 5_e */ /* AML_INDEX_FIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Index_field", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP), -/* 5_f */ /* AML_BANK_FIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_NAMED_OBJECT| AML_HAS_ARGS, "Bank_field", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP), +/* 46 */ OP_INFO_ENTRY (AML_MUTEX_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP), +/* 47 */ OP_INFO_ENTRY (AML_EVENT_OP, OPTYPE_NAMED_OBJECT| AML_NO_ARGS| 0, "Event", ARGP_EVENT_OP, ARGI_EVENT_OP), +/* 48 */ OP_INFO_ENTRY (AML_COND_REF_OF_OP, OPTYPE_MONADIC2_r| AML_HAS_ARGS| 0, "Cond_ref_of", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP), +/* 49 */ OP_INFO_ENTRY (AML_CREATE_FIELD_OP, OPTYPE_CREATE_FIELD| AML_HAS_ARGS| 0, "Create_field", ARGP_CREATE_FIELD_OP, ARGI_CREATE_FIELD_OP), +/* 4_a */ OP_INFO_ENTRY (AML_LOAD_OP, OPTYPE_RECONFIGURATION| AML_HAS_ARGS| 0, "Load", ARGP_LOAD_OP, ARGI_LOAD_OP), +/* 4_b */ OP_INFO_ENTRY (AML_STALL_OP, OPTYPE_MONADIC1| AML_HAS_ARGS| 0, "Stall", ARGP_STALL_OP, ARGI_STALL_OP), +/* 4_c */ OP_INFO_ENTRY (AML_SLEEP_OP, OPTYPE_MONADIC1| AML_HAS_ARGS| 0, "Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP), +/* 4_d */ OP_INFO_ENTRY (AML_ACQUIRE_OP, OPTYPE_DYADIC2_s| AML_HAS_ARGS| 0, "Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP), +/* 4_e */ OP_INFO_ENTRY (AML_SIGNAL_OP, OPTYPE_MONADIC1| AML_HAS_ARGS| 0, "Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP), +/* 4_f */ OP_INFO_ENTRY (AML_WAIT_OP, OPTYPE_DYADIC2_s| AML_HAS_ARGS| 0, "Wait", ARGP_WAIT_OP, ARGI_WAIT_OP), +/* 50 */ OP_INFO_ENTRY (AML_RESET_OP, OPTYPE_MONADIC1| AML_HAS_ARGS| 0, "Reset", ARGP_RESET_OP, ARGI_RESET_OP), +/* 51 */ OP_INFO_ENTRY (AML_RELEASE_OP, OPTYPE_MONADIC1| AML_HAS_ARGS| 0, "Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP), +/* 52 */ OP_INFO_ENTRY (AML_FROM_BCDOP, OPTYPE_MONADIC2_r| AML_HAS_ARGS| 0, "From_bCD", ARGP_FROM_BCDOP, ARGI_FROM_BCDOP), +/* 53 */ OP_INFO_ENTRY (AML_TO_BCDOP, OPTYPE_MONADIC2_r| AML_HAS_ARGS| 0, "To_bCD", ARGP_TO_BCDOP, ARGI_TO_BCDOP), +/* 54 */ OP_INFO_ENTRY (AML_UN_LOAD_OP, OPTYPE_RECONFIGURATION| AML_HAS_ARGS| 0, "Unload", ARGP_UN_LOAD_OP, ARGI_UN_LOAD_OP), +/* 55 */ OP_INFO_ENTRY (AML_REVISION_OP, OPTYPE_CONSTANT| AML_NO_ARGS| 0, "Revision", ARGP_REVISION_OP, ARGI_REVISION_OP), +/* 56 */ OP_INFO_ENTRY (AML_DEBUG_OP, OPTYPE_CONSTANT| AML_NO_ARGS| 0, "Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP), +/* 57 */ OP_INFO_ENTRY (AML_FATAL_OP, OPTYPE_FATAL| AML_HAS_ARGS| 0, "Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP), +/* 58 */ OP_INFO_ENTRY (AML_REGION_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Op_region", ARGP_REGION_OP, ARGI_REGION_OP), +/* 59 */ OP_INFO_ENTRY (AML_DEF_FIELD_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Field", ARGP_DEF_FIELD_OP, ARGI_DEF_FIELD_OP), +/* 5_a */ OP_INFO_ENTRY (AML_DEVICE_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP), +/* 5_b */ OP_INFO_ENTRY (AML_PROCESSOR_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP), +/* 5_c */ OP_INFO_ENTRY (AML_POWER_RES_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Power_res", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP), +/* 5_d */ OP_INFO_ENTRY (AML_THERMAL_ZONE_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Thermal_zone", ARGP_THERMAL_ZONE_OP, ARGI_THERMAL_ZONE_OP), +/* 5_e */ OP_INFO_ENTRY (AML_INDEX_FIELD_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Index_field", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP), +/* 5_f */ OP_INFO_ENTRY (AML_BANK_FIELD_OP, OPTYPE_NAMED_OBJECT| AML_HAS_ARGS| 0, "Bank_field", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP), /* Internal opcodes that map to invalid AML opcodes */ -/* 60 */ /* AML_LNOTEQUAL_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_HAS_ARGS, "LNot_equal", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP), -/* 61 */ /* AML_LLESSEQUAL_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_HAS_ARGS, "LLess_equal", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP), -/* 62 */ /* AML_LGREATEREQUAL_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_HAS_ARGS, "LGreater_equal", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP), -/* 63 */ /* AML_NAMEPATH_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS, "Name_path", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP), -/* 64 */ /* AML_METHODCALL_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_METHOD_CALL| AML_HAS_ARGS, "Method_call", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP), -/* 65 */ /* AML_BYTELIST_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_LITERAL| AML_NO_ARGS, "Byte_list", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP), -/* 66 */ /* AML_RESERVEDFIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_NO_ARGS, "Reserved_field", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP), -/* 67 */ /* AML_NAMEDFIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_NO_ARGS, "Named_field", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP), -/* 68 */ /* AML_ACCESSFIELD_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_NO_ARGS, "Access_field", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP), -/* 69 */ /* AML_STATICSTRING_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_BOGUS| AML_NO_ARGS, "Static_string", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP), -/* 6_a */ /* AML_RETURN_VALUE_OP */ OP_INFO_ENTRY (ACPI_OP_TYPE_OPCODE | OPTYPE_RETURN| AML_HAS_ARGS, "[Return Value]", ARG_NONE, ARG_NONE), -/* 6_b */ /* UNKNOWN OPCODES */ OP_INFO_ENTRY (ACPI_OP_TYPE_UNKNOWN | OPTYPE_BOGUS| AML_HAS_ARGS, "UNKNOWN_OP!", ARG_NONE, ARG_NONE), -/* 6_c */ /* ASCII CHARACTERS */ OP_INFO_ENTRY (ACPI_OP_TYPE_ASCII | OPTYPE_BOGUS| AML_HAS_ARGS, "ASCII_ONLY!", ARG_NONE, ARG_NONE), -/* 6_d */ /* PREFIX CHARACTERS */ OP_INFO_ENTRY (ACPI_OP_TYPE_PREFIX | OPTYPE_BOGUS| AML_HAS_ARGS, "PREFIX_ONLY!", ARG_NONE, ARG_NONE), +/* 60 */ OP_INFO_ENTRY (AML_LNOTEQUAL_OP, OPTYPE_BOGUS| AML_HAS_ARGS| 0, "LNot_equal", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP), +/* 61 */ OP_INFO_ENTRY (AML_LLESSEQUAL_OP, OPTYPE_BOGUS| AML_HAS_ARGS| 0, "LLess_equal", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP), +/* 62 */ OP_INFO_ENTRY (AML_LGREATEREQUAL_OP, OPTYPE_BOGUS| AML_HAS_ARGS| 0, "LGreater_equal", ARGP_LGREATEREQUAL_OP, ARGI_LGREATEREQUAL_OP), +/* 63 */ OP_INFO_ENTRY (AML_NAMEPATH_OP, OPTYPE_LITERAL| AML_NO_ARGS| 0, "Name_path", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP), +/* 64 */ OP_INFO_ENTRY (AML_METHODCALL_OP, OPTYPE_METHOD_CALL| AML_HAS_ARGS| 0, "Method_call", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP), +/* 65 */ OP_INFO_ENTRY (AML_BYTELIST_OP, OPTYPE_LITERAL| AML_NO_ARGS| 0, "Byte_list", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP), +/* 66 */ OP_INFO_ENTRY (AML_RESERVEDFIELD_OP, OPTYPE_BOGUS| AML_NO_ARGS| 0, "Reserved_field", ARGP_RESERVEDFIELD_OP, ARGI_RESERVEDFIELD_OP), +/* 67 */ OP_INFO_ENTRY (AML_NAMEDFIELD_OP, OPTYPE_BOGUS| AML_NO_ARGS| 0, "Named_field", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP), +/* 68 */ OP_INFO_ENTRY (AML_ACCESSFIELD_OP, OPTYPE_BOGUS| AML_NO_ARGS| 0, "Access_field", ARGP_ACCESSFIELD_OP, ARGI_ACCESSFIELD_OP), +/* 69 */ OP_INFO_ENTRY (AML_STATICSTRING_OP, OPTYPE_BOGUS| AML_NO_ARGS| 0, "Static_string", ARGP_STATICSTRING_OP, ARGI_STATICSTRING_OP), +/* 6_a */ OP_INFO_ENTRY (0, OPTYPE_BOGUS| AML_HAS_ARGS| 0, "UNKNOWN_OP!", ARG_NONE, ARG_NONE), + OP_INFO_ENTRY (0, 0| AML_HAS_ARGS| 0, NULL, ARG_NONE, ARG_NONE) }; +#define _UNK 0x6A +#define _UNKNOWN_OPCODE 0x02 /* An example unknown opcode */ + /* * This table is directly indexed by the opcodes, and returns an * index into the table above */ -u8 acpi_gbl_aml_short_op_info_index[256] = +u8 acpi_gbl_aml_op_info_index[256] = { /* 0 1 2 3 4 5 6 7 */ /* 0x00 */ 0x00, 0x01, _UNK, _UNK, _UNK, _UNK, 0x02, _UNK, /* 0x08 */ 0x03, _UNK, 0x04, 0x05, 0x06, 0x07, _UNK, _UNK, -/* 0x10 */ 0x08, 0x09, 0x0a, _UNK, 0x0b, _UNK, _UNK, _UNK, -/* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, +/* 0x10 */ 0x08, 0x09, 0x0a, _UNK, 0x0b, _UNK, _UNK, 0x46, +/* 0x18 */ 0x47, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x20 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x28 */ _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX, -/* 0x30 */ 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, _UNK, -/* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x40 */ _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, -/* 0x48 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, -/* 0x50 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, -/* 0x58 */ _ASC, _ASC, _ASC, _UNK, _PFX, _UNK, _PFX, _ASC, +/* 0x28 */ 0x48, 0x49, _UNK, _UNK, _UNK, 0x63, _UNK, _UNK, +/* 0x30 */ 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x4a, 0x4b, +/* 0x38 */ 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, +/* 0x40 */ 0x54, _UNK, _UNK, _UNK, _UNK, _UNK, 0x55, 0x56, +/* 0x48 */ 0x57, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, +/* 0x50 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, +/* 0x58 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x60 */ 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, /* 0x68 */ 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, _UNK, /* 0x70 */ 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, /* 0x78 */ 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, /* 0x80 */ 0x2b, 0x2c, 0x2d, 0x2e, _UNK, _UNK, 0x2f, 0x30, /* 0x88 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, _UNK, -/* 0x90 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, _UNK, _UNK, -/* 0x98 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, +/* 0x90 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x58, 0x59, +/* 0x98 */ 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, _UNK, _UNK, /* 0xA0 */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61, /* 0xA8 */ 0x62, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xB0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, @@ -575,32 +552,3 @@ /* 0xF0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0xF8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x45, }; - - -u8 acpi_gbl_aml_long_op_info_index[NUM_EXTENDED_OPCODE] = -{ -/* 0 1 2 3 4 5 6 7 */ -/* 0x00 */ _UNK, 0x46, 0x47, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x08 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x10 */ _UNK, _UNK, 0x48, 0x49, _UNK, _UNK, _UNK, _UNK, -/* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x20 */ 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, -/* 0x28 */ 0x52, 0x53, 0x54, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x30 */ 0x55, 0x56, 0x57, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x40 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x48 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x50 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x58 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x60 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x68 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x70 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x78 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, -/* 0x80 */ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, -}; - - -/* 0 1 2 3 4 5 6 7 */ -/* 0x00 */ - - diff -urN linux-2.4.0-test9/drivers/acpi/parser/psparse.c linux-2.4.0-test9-lia/drivers/acpi/parser/psparse.c --- linux-2.4.0-test9/drivers/acpi/parser/psparse.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/psparse.c Wed Jul 5 11:23:12 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: psparse - Parser top level AML parse routines - * $Revision: 51 $ * *****************************************************************************/ @@ -34,14 +33,14 @@ */ #include "acpi.h" -#include "acparser.h" -#include "acdispat.h" +#include "parser.h" +#include "dispatch.h" #include "amlcode.h" -#include "acnamesp.h" -#include "acdebug.h" +#include "namesp.h" +#include "debugger.h" #define _COMPONENT PARSER - MODULE_NAME ("psparse") + MODULE_NAME ("psparse"); u32 acpi_gbl_depth = 0; @@ -66,11 +65,11 @@ ACPI_STATUS acpi_ps_delete_completed_op ( ACPI_WALK_STATE *state, - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { acpi_ps_free_op (op); - return (AE_OK); + return AE_OK; } @@ -79,7 +78,7 @@ * * FUNCTION: Acpi_ps_delete_parse_tree * - * PARAMETERS: Subtree_root - Root of tree (or subtree) to delete + * PARAMETERS: Root - Root of tree (or subtree) to delete * * RETURN: None * @@ -89,54 +88,33 @@ void acpi_ps_delete_parse_tree ( - ACPI_PARSE_OBJECT *subtree_root) + ACPI_GENERIC_OP *root) { - ACPI_WALK_STATE *walk_state; - ACPI_WALK_LIST walk_list; + ACPI_GENERIC_OP *op; + ACPI_WALK_STATE walk_state; - if (!subtree_root) { - return; - } + walk_state.origin = root; + op = root; - /* Create and initialize a new walk list */ + /* TBD: [Restructure] hack for root case */ - walk_list.walk_state = NULL; - walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, NULL, NULL, &walk_list); - if (!walk_state) { - return; + if (op == acpi_gbl_parsed_namespace_root) { + op = acpi_ps_get_child (op); } - walk_state->parser_state = NULL; - walk_state->parse_flags = 0; - walk_state->descending_callback = NULL; - walk_state->ascending_callback = NULL; - + /* Save root until last, so that we know when the tree has been walked */ - walk_state->origin = subtree_root; - walk_state->next_op = subtree_root; + walk_state.next_op = op; + walk_state.next_op_info = NEXT_OP_DOWNWARD; - - /* Head downward in the tree */ - - walk_state->next_op_info = NEXT_OP_DOWNWARD; - - /* Visit all nodes in the subtree */ - - while (walk_state->next_op) { - acpi_ps_get_next_walk_op (walk_state, walk_state->next_op, + while (walk_state.next_op) { + acpi_ps_get_next_walk_op (&walk_state, walk_state.next_op, acpi_ps_delete_completed_op); } - - /* We are done with this walk */ - - acpi_ds_delete_walk_state (walk_state); - - return; } #endif - /******************************************************************************* * * FUNCTION: Acpi_ps_peek_opcode @@ -157,12 +135,12 @@ /* Extended (2-byte) opcode if > 255 */ if (opcode > 0x00FF) { - return (2); + return 2; } /* Otherwise, just a single byte opcode */ - return (1); + return 1; } @@ -216,7 +194,7 @@ /* don't convert bare name to a namepath */ - return (opcode); + return opcode; } @@ -236,7 +214,7 @@ ACPI_PARSE_STATE * acpi_ps_create_state ( u8 *aml, - u32 aml_size) + s32 aml_size) { ACPI_PARSE_STATE *parser_state; @@ -279,270 +257,88 @@ ACPI_STATUS acpi_ps_find_object ( u16 opcode, - ACPI_PARSE_OBJECT *op, + ACPI_PARSE_STATE *parser_state, ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT **out_op) + ACPI_GENERIC_OP **op) { - NATIVE_CHAR *path; + char *path; - /* We are only interested in opcodes that have an associated name */ - - if (!acpi_ps_is_named_op (opcode)) { - *out_op = op; - return (AE_OK); - } - /* Find the name in the parse tree */ - path = acpi_ps_get_next_namestring (walk_state->parser_state); + path = acpi_ps_get_next_namestring (parser_state); - *out_op = acpi_ps_find (acpi_ps_get_parent_scope (walk_state->parser_state), + *op = acpi_ps_find (acpi_ps_get_parent_scope (parser_state), path, opcode, 1); - if (!(*out_op)) { - return (AE_NOT_FOUND); + if (!(*op)) { + return AE_NOT_FOUND; } - return (AE_OK); + return AE_OK; } - -#endif - - -/******************************************************************************* - * - * FUNCTION: Acpi_ps_complete_this_op - * - * PARAMETERS: Walk_state - Current State - * Op - Op to complete - * - * RETURN: TRUE if Op and subtree was deleted - * - * DESCRIPTION: Perform any cleanup at the completion of an Op. - * - ******************************************************************************/ - -u8 -acpi_ps_complete_this_op ( - ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op) -{ -#ifndef PARSER_ONLY - ACPI_PARSE_OBJECT *prev; - ACPI_PARSE_OBJECT *next; - ACPI_OPCODE_INFO *op_info; - ACPI_OPCODE_INFO *parent_info; - u32 opcode_class; - ACPI_PARSE_OBJECT *replacement_op = NULL; - - - op_info = acpi_ps_get_opcode_info (op->opcode); - opcode_class = ACPI_GET_OP_CLASS (op_info); - - - /* Delete this op and the subtree below it if asked to */ - - if (((walk_state->parse_flags & ACPI_PARSE_TREE_MASK) == ACPI_PARSE_DELETE_TREE) && - (opcode_class != OPTYPE_CONSTANT) && - (opcode_class != OPTYPE_LITERAL) && - (opcode_class != OPTYPE_LOCAL_VARIABLE) && - (opcode_class != OPTYPE_METHOD_ARGUMENT) && - (opcode_class != OPTYPE_DATA_TERM) && - (op->opcode != AML_NAMEPATH_OP)) - { - /* Make sure that we only delete this subtree */ - - if (op->parent) { - /* - * Check if we need to replace the operator and its subtree - * with a return value op - */ - - parent_info = acpi_ps_get_opcode_info (op->parent->opcode); - - switch (ACPI_GET_OP_CLASS (parent_info)) - { - case OPTYPE_CONTROL: /* IF, ELSE, WHILE only */ - case OPTYPE_NAMED_OBJECT: /* Scope, method, etc. */ - break; - - default: - replacement_op = acpi_ps_alloc_op (AML_RETURN_VALUE_OP); - if (!replacement_op) { - return (FALSE); - } - } - - /* We must unlink this op from the parent tree */ - - prev = op->parent->value.arg; - if (prev == op) { - /* This op is the first in the list */ - - if (replacement_op) { - replacement_op->parent = op->parent; - replacement_op->value.arg = NULL; - op->parent->value.arg = replacement_op; - replacement_op->next = op->next; - } - else { - op->parent->value.arg = op->next; - } - } - - /* Search the parent list */ - - else while (prev) { - /* Traverse all siblings in the parent's argument list */ - - next = prev->next; - if (next == op) { - if (replacement_op) { - replacement_op->parent = op->parent; - replacement_op->value.arg = NULL; - prev->next = replacement_op; - replacement_op->next = op->next; - next = NULL; - } - else { - prev->next = op->next; - next = NULL; - } - } - - prev = next; - } - - } - - /* Now we can actually delete the subtree rooted at op */ - - acpi_ps_delete_parse_tree (op); - - return (TRUE); - } - - return (FALSE); - #else - return (FALSE); -#endif -} - - -/******************************************************************************* - * - * FUNCTION: Acpi_ps_next_parse_state - * - * PARAMETERS: Parser_state - Current parser state object - * - * RETURN: - * - * DESCRIPTION: - * - ******************************************************************************/ - ACPI_STATUS -acpi_ps_next_parse_state ( +acpi_ps_find_object ( + u16 opcode, + ACPI_PARSE_STATE *parser_state, ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - ACPI_STATUS callback_status) + ACPI_GENERIC_OP **out_op) { - ACPI_PARSE_STATE *parser_state = walk_state->parser_state; - ACPI_STATUS status = AE_CTRL_PENDING; - - - switch (callback_status) - { - case AE_CTRL_TERMINATE: - - /* - * A control method was terminated via a RETURN statement. - * The walk of this method is complete. - */ - - parser_state->aml = parser_state->aml_end; - status = AE_CTRL_TERMINATE; - break; - - - case AE_CTRL_PENDING: - - /* - * Predicate of a WHILE was true and the loop just completed an - * execution. Go back to the start of the loop and reevaluate the - * predicate. - */ -/* Walk_state->Control_state->Common.State = - CONTROL_PREDICATE_EXECUTING;*/ - - /* TBD: How to handle a break within a while. */ - /* This code attempts it */ - - parser_state->aml = walk_state->aml_last_while; - break; + char *path; + ACPI_GENERIC_OP *op; + OBJECT_TYPE_INTERNAL data_type; + ACPI_STATUS status; + ACPI_NAMED_OBJECT *entry = NULL; - case AE_CTRL_TRUE: - /* - * Predicate of an IF was true, and we are at the matching ELSE. - * Just close out this package - * - * Parser_state->Aml is modified by the package length procedure - */ - parser_state->aml = (parser_state->aml + - acpi_ps_get_next_package_length (parser_state)) -1; - break; + /* + * The full parse tree has already been deleted -- therefore, we are parsing + * a control method. We can lookup the name in the namespace instead of + * the parse tree! + */ - case AE_CTRL_FALSE: + path = acpi_ps_get_next_namestring (parser_state); - /* - * Either an IF/WHILE Predicate was false or we encountered a BREAK - * opcode. In both cases, we do not execute the rest of the - * package; We simply close out the parent (finishing the walk of - * this branch of the tree) and continue execution at the parent - * level. - */ + /* Map the raw opcode into an internal object type */ - parser_state->aml = parser_state->scope->parse_scope.pkg_end; + data_type = acpi_ds_map_named_opcode_to_data_type (opcode); - /* In the case of a BREAK, just force a predicate (if any) to FALSE */ + /* + * Enter the object into the namespace + * LOAD_PASS1 means Create if not found + */ - walk_state->control_state->common.value = FALSE; - status = AE_CTRL_END; - break; + status = acpi_ns_lookup (walk_state->scope_info, path, data_type, + IMODE_LOAD_PASS1, + NS_NO_UPSEARCH, walk_state, &entry); + if (ACPI_FAILURE (status)) { + return (status); + } + /* Create a new op */ - case AE_CTRL_TRANSFER: + op = acpi_ps_alloc_op (opcode); + if (!op) { + return (AE_NO_MEMORY); + } - /* - * A method call (invocation) -- transfer control - */ - status = AE_CTRL_TRANSFER; - walk_state->prev_op = op; - walk_state->method_call_op = op; - walk_state->method_call_node = (op->value.arg)->node; + /* Initialize */ - /* Will return value (if any) be used by the caller? */ + ((ACPI_NAMED_OP *)op)->name = entry->name; + op->acpi_named_object = entry; - walk_state->return_used = acpi_ds_is_result_used (op); - break; + acpi_ps_append_arg (acpi_ps_get_parent_scope (parser_state), op); - default: - status = callback_status; - if ((callback_status & AE_CODE_MASK) == AE_CODE_CONTROL) { - status = AE_OK; - } - break; - } + *out_op = op; - return (status); + return (AE_OK); } +#endif /******************************************************************************* @@ -560,27 +356,26 @@ ACPI_STATUS acpi_ps_parse_loop ( - ACPI_WALK_STATE *walk_state) + ACPI_PARSE_STATE *parser_state, + ACPI_WALK_STATE *walk_state, + u32 parse_flags) { ACPI_STATUS status = AE_OK; - ACPI_PARSE_OBJECT *op = NULL; /* current op */ - ACPI_OPCODE_INFO *op_info; - ACPI_PARSE_OBJECT *arg = NULL; - ACPI_PARSE2_OBJECT *deferred_op; + ACPI_GENERIC_OP *op = NULL; /* current op */ + ACPI_OP_INFO *op_info; + ACPI_GENERIC_OP *arg = NULL; + ACPI_DEFERRED_OP *deferred_op; u32 arg_count; /* push for fixed or var args */ u32 arg_types = 0; ACPI_PTRDIFF aml_offset; u16 opcode; - ACPI_PARSE_OBJECT pre_op; - ACPI_PARSE_STATE *parser_state; + ACPI_GENERIC_OP pre_op; - parser_state = walk_state->parser_state; +#ifndef PARSER_ONLY + OBJECT_TYPE_INTERNAL data_type; +#endif - if (walk_state->prev_op) { - op = walk_state->prev_op; - arg_types = walk_state->prev_arg_types; - } /* * Iterative parsing loop, while there is more aml to process: @@ -589,8 +384,9 @@ if (!op) { /* Get the next opcode from the AML stream */ - aml_offset = parser_state->aml - parser_state->aml_start; - opcode = acpi_ps_peek_opcode (parser_state); + aml_offset = parser_state->aml - parser_state->aml_start; + opcode = acpi_ps_peek_opcode (parser_state); + op_info = acpi_ps_get_opcode_info (opcode); /* * First cut to determine what we have found: @@ -599,19 +395,16 @@ * 3) An unknown/invalid opcode */ - op_info = acpi_ps_get_opcode_info (opcode); - switch (ACPI_GET_OP_TYPE (op_info)) - { - case ACPI_OP_TYPE_OPCODE: - + if (op_info) { /* Found opcode info, this is a normal opcode */ parser_state->aml += acpi_ps_get_opcode_size (opcode); arg_types = op_info->parse_args; - break; + } - case ACPI_OP_TYPE_ASCII: - case ACPI_OP_TYPE_PREFIX: + else if (acpi_ps_is_prefix_char (opcode) || + acpi_ps_is_leading_char (opcode)) + { /* * Starts with a valid prefix or ASCII char, this is a name * string. Convert the bare name string to a namepath. @@ -619,10 +412,9 @@ opcode = AML_NAMEPATH_OP; arg_types = ARGP_NAMESTRING; - break; - - case ACPI_OP_TYPE_UNKNOWN: + } + else { /* The opcode is unrecognized. Just skip unknown opcodes */ parser_state->aml += acpi_ps_get_opcode_size (opcode); @@ -649,24 +441,9 @@ INCREMENT_ARG_LIST (arg_types); - if (walk_state->descending_callback != NULL) { - /* - * Find the object. This will either insert the object into - * the namespace or simply look it up - */ - status = walk_state->descending_callback (opcode, NULL, walk_state, &op); - if (op == NULL) { - continue; - } - status = acpi_ps_next_parse_state (walk_state, op, status); - if (status == AE_CTRL_PENDING) { - status = AE_OK; - goto close_this_op; - } - - if (ACPI_FAILURE (status)) { - goto close_this_op; - } + status = acpi_ps_find_object (opcode, parser_state, walk_state, &op); + if (ACPI_FAILURE (status)) { + return (AE_NOT_FOUND); } acpi_ps_append_arg (op, pre_op.value.arg); @@ -674,7 +451,7 @@ if (op->opcode == AML_REGION_OP) { - deferred_op = acpi_ps_to_extended_op (op); + deferred_op = acpi_ps_to_deferred_op (op); if (deferred_op) { /* * Skip parsing of control method or opregion body, @@ -687,15 +464,13 @@ * Body_length is unknown until we parse the body */ - deferred_op->data = parser_state->aml - 6; - deferred_op->length = 0; + deferred_op->body = parser_state->aml - 6; + deferred_op->body_length = 0; } } } else { - - /* Not a named opcode, just allocate Op and append to parent */ op = acpi_ps_alloc_op (opcode); @@ -704,23 +479,6 @@ } acpi_ps_append_arg (acpi_ps_get_parent_scope (parser_state), op); - - if ((walk_state->descending_callback != NULL)) { - /* - * Find the object. This will either insert the object into - * the namespace or simply look it up - */ - status = walk_state->descending_callback (opcode, op, walk_state, &op); - status = acpi_ps_next_parse_state (walk_state, op, status); - if (status == AE_CTRL_PENDING) { - status = AE_OK; - goto close_this_op; - } - - if (ACPI_FAILURE (status)) { - goto close_this_op; - } - } } op->aml_offset = aml_offset; @@ -774,7 +532,7 @@ /* For a method, save the length and address of the body */ if (op->opcode == AML_METHOD_OP) { - deferred_op = acpi_ps_to_extended_op (op); + deferred_op = acpi_ps_to_deferred_op (op); if (deferred_op) { /* * Skip parsing of control method or opregion body, @@ -782,8 +540,8 @@ * to parse them correctly. */ - deferred_op->data = parser_state->aml; - deferred_op->length = parser_state->pkg_end - + deferred_op->body = parser_state->aml; + deferred_op->body_length = parser_state->pkg_end - parser_state->aml; /* @@ -791,8 +549,8 @@ * parsing because the opregion is not a standalone * package (We don't know where the end is). */ - parser_state->aml = parser_state->pkg_end; - arg_count = 0; + parser_state->aml = parser_state->pkg_end; + arg_count = 0; } } @@ -809,7 +567,7 @@ } if (op->opcode == AML_REGION_OP) { - deferred_op = acpi_ps_to_extended_op (op); + deferred_op = acpi_ps_to_deferred_op (op); if (deferred_op) { /* * Skip parsing of control method or opregion body, @@ -820,75 +578,46 @@ * know the length. */ - deferred_op->length = parser_state->aml - - deferred_op->data; + deferred_op->body_length = parser_state->aml - + deferred_op->body; } } - } - /* This op complete, notify the dispatcher */ +#ifndef PARSER_ONLY + data_type = acpi_ds_map_named_opcode_to_data_type (op->opcode); - if (walk_state->ascending_callback != NULL) { - status = walk_state->ascending_callback (walk_state, op); - status = acpi_ps_next_parse_state (walk_state, op, status); - if (status == AE_CTRL_PENDING) { - status = AE_OK; - goto close_this_op; + if (op->opcode == AML_NAME_OP) { + if (op->value.arg) { + data_type = acpi_ds_map_opcode_to_data_type ( + (op->value.arg)->opcode, NULL); + ((ACPI_NAMED_OBJECT*)op->acpi_named_object)->type = + (u8) data_type; + } } - } - - -close_this_op: - - parser_state->scope->parse_scope.arg_count--; - /* Close this Op (may result in parse subtree deletion) */ - - if (acpi_ps_complete_this_op (walk_state, op)) { - op = NULL; - } + /* Pop the scope stack */ + if (acpi_ns_opens_scope (data_type)) { - if (status == AE_CTRL_END) { - acpi_ps_pop_scope (parser_state, &op, &arg_types); - status = walk_state->ascending_callback (walk_state, op); - status = acpi_ps_next_parse_state (walk_state, op, status); - acpi_ps_complete_this_op (walk_state, op); - op = NULL; - status = AE_OK; + acpi_ds_scope_stack_pop (walk_state); + } +#endif } - else if (ACPI_FAILURE (status)) { - if (op == NULL) { - acpi_ps_pop_scope (parser_state, &op, &arg_types); - } - walk_state->prev_op = op; - walk_state->prev_arg_types = arg_types; - /* - * TEMP: - */ + parser_state->scope->arg_count--; - if (status == AE_CTRL_TERMINATE) { - status = AE_OK; - /* Clean up */ - do - { - if (op) { - acpi_ps_complete_this_op (walk_state, op); - } + /* Delete op if asked to */ - acpi_ps_pop_scope (parser_state, &op, &arg_types); - } while (op); - } - return (status); +#ifndef PARSER_ONLY + if (parse_flags & PARSE_DELETE_TREE) { + acpi_ps_delete_parse_tree (op); } +#endif - /* This scope complete? */ - if (acpi_ps_has_completed_scope (parser_state)) { acpi_ps_pop_scope (parser_state, &op, &arg_types); } @@ -896,7 +625,6 @@ else { op = NULL; } - } else { @@ -909,54 +637,6 @@ } /* while Parser_state->Aml */ - /* - * Complete the last Op (if not completed), and clear the scope stack. - * It is easily possible to end an AML "package" with an unbounded number - * of open scopes (such as when several AML blocks are closed with - * sequential closing braces). We want to terminate each one cleanly. - */ - - do - { - if (op) { - if (walk_state->ascending_callback != NULL) { - status = walk_state->ascending_callback (walk_state, op); - status = acpi_ps_next_parse_state (walk_state, op, status); - if (status == AE_CTRL_PENDING) { - status = AE_OK; - goto close_this_op; - } - - if (status == AE_CTRL_TERMINATE) { - status = AE_OK; - - /* Clean up */ - do - { - if (op) { - acpi_ps_complete_this_op (walk_state, op); - } - - acpi_ps_pop_scope (parser_state, &op, &arg_types); - - } while (op); - - return (status); - } - - else if (ACPI_FAILURE (status)) { - acpi_ps_complete_this_op (walk_state, op); - return (status); - } - } - - acpi_ps_complete_this_op (walk_state, op); - } - - acpi_ps_pop_scope (parser_state, &op, &arg_types); - - } while (op); - return (status); } @@ -978,28 +658,19 @@ ACPI_STATUS acpi_ps_parse_aml ( - ACPI_PARSE_OBJECT *start_scope, + ACPI_GENERIC_OP *start_scope, u8 *aml, u32 aml_size, - u32 parse_flags, - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **caller_return_desc, - ACPI_PARSE_DOWNWARDS descending_callback, - ACPI_PARSE_UPWARDS ascending_callback) + u32 parse_flags) { ACPI_STATUS status; ACPI_PARSE_STATE *parser_state; ACPI_WALK_STATE *walk_state; ACPI_WALK_LIST walk_list; - ACPI_NAMESPACE_NODE *node = NULL; - ACPI_WALK_LIST *prev_walk_list = acpi_gbl_current_walk_list; - ACPI_OPERAND_OBJECT *return_desc; - ACPI_OPERAND_OBJECT *mth_desc = NULL; - ACPI_NAMESPACE_NODE *start_node; + ACPI_NAMED_OBJECT *entry = NULL; - /* Create and initialize a new parser state */ + /* Initialize parser state and scope */ parser_state = acpi_ps_create_state (aml, aml_size); if (!parser_state) { @@ -1008,166 +679,36 @@ acpi_ps_init_scope (parser_state, start_scope); - if (method_node) { - mth_desc = acpi_ns_get_attached_object (method_node); - } - /* Create and initialize a new walk list */ + /* Initialize a new walk list */ walk_list.walk_state = NULL; - walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, parser_state->start_op, mth_desc, &walk_list); + walk_state = acpi_ds_create_walk_state (TABLE_ID_DSDT, NULL, NULL, &walk_list); if (!walk_state) { status = AE_NO_MEMORY; goto cleanup; } - walk_state->method_node = method_node; - walk_state->parser_state = parser_state; - walk_state->parse_flags = parse_flags; - walk_state->descending_callback = descending_callback; - walk_state->ascending_callback = ascending_callback; - - /* TBD: [Restructure] TEMP until we pass Walk_state to the interpreter - */ - acpi_gbl_current_walk_list = &walk_list; - - if (method_node) { - start_node = method_node; - parser_state->start_node = method_node; - walk_state->walk_type = WALK_METHOD; + /* Setup the current scope */ - if (start_node) { - /* Push start scope on scope stack and make it current */ - - status = acpi_ds_scope_stack_push (start_node, ACPI_TYPE_METHOD, walk_state); - if (ACPI_FAILURE (status)) { - return (status); - } + entry = parser_state->start_op->acpi_named_object; + if (entry) { + /* Push start scope on scope stack and make it current */ + status = acpi_ds_scope_stack_push (entry->child_table, entry->type, + walk_state); + if (ACPI_FAILURE (status)) { + goto cleanup; } - /* Init arguments if this is a control method */ - /* TBD: [Restructure] add walkstate as a param */ - acpi_ds_method_data_init_args (params, MTH_NUM_ARGS, walk_state); } - else { - /* Setup the current scope */ - node = parser_state->start_op->node; - if (node) { - /* Push start scope on scope stack and make it current */ - - status = acpi_ds_scope_stack_push (node, node->type, - walk_state); - if (ACPI_FAILURE (status)) { - goto cleanup; - } - - } - } + /* Create the parse tree */ - - status = AE_OK; - - /* - * Execute the walk loop as long as there is a valid Walk State. This - * handles nested control method invocations without recursion. - */ - - while (walk_state) { - if (ACPI_SUCCESS (status)) { - status = acpi_ps_parse_loop (walk_state); - } - - if (status == AE_CTRL_TRANSFER) { - /* - * A method call was detected. - * Transfer control to the called control method - */ - - status = acpi_ds_call_control_method (&walk_list, walk_state, NULL); - - /* - * If the transfer to the new method method call worked, a new walk - * state was created -- get it - */ - - walk_state = acpi_ds_get_current_walk_state (&walk_list); - continue; - } - - else if (status == AE_CTRL_TERMINATE) { - status = AE_OK; - } - - /* We are done with this walk, move on to the parent if any */ - - - walk_state = acpi_ds_pop_walk_state (&walk_list); - - /* Extract return value before we delete Walk_state */ - - return_desc = walk_state->return_desc; - - /* Reset the current scope to the beginning of scope stack */ - - acpi_ds_scope_stack_clear (walk_state); - - /* - * If we just returned from the execution of a control method, - * there's lots of cleanup to do - */ - - if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) { - acpi_ds_terminate_control_method (walk_state); - } - - /* Delete this walk state and all linked control states */ - - acpi_ps_cleanup_scope (walk_state->parser_state); - acpi_cm_free (walk_state->parser_state); - acpi_ds_delete_walk_state (walk_state); - - /* Check if we have restarted a preempted walk */ - - walk_state = acpi_ds_get_current_walk_state (&walk_list); - if (walk_state && - ACPI_SUCCESS (status)) - { - /* There is another walk state, restart it */ - - /* - * If the method returned value is not used by the parent, - * The object is deleted - */ - - acpi_ds_restart_control_method (walk_state, return_desc); - } - - /* - * Just completed a 1st-level method, save the final internal return - * value (if any) - */ - - else if (caller_return_desc) { - *caller_return_desc = return_desc; /* NULL if no return value */ - } - - else if (return_desc) { - /* Caller doesn't want it, must delete it */ - - acpi_cm_remove_reference (return_desc); - } - } - - - /* Normal exit */ - - acpi_gbl_current_walk_list = prev_walk_list; - return (status); + status = acpi_ps_parse_loop (parser_state, walk_state, parse_flags); cleanup: @@ -1178,7 +719,6 @@ acpi_ps_cleanup_scope (parser_state); acpi_cm_free (parser_state); - acpi_gbl_current_walk_list = prev_walk_list; return (status); } diff -urN linux-2.4.0-test9/drivers/acpi/parser/psscope.c linux-2.4.0-test9-lia/drivers/acpi/parser/psscope.c --- linux-2.4.0-test9/drivers/acpi/parser/psscope.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/psscope.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: psscope - Parser scope stack management routines - * $Revision: 18 $ * *****************************************************************************/ @@ -25,10 +24,10 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #define _COMPONENT PARSER - MODULE_NAME ("psscope") + MODULE_NAME ("psscope"); /******************************************************************************* @@ -43,11 +42,11 @@ * ******************************************************************************/ -ACPI_PARSE_OBJECT * +ACPI_GENERIC_OP * acpi_ps_get_parent_scope ( ACPI_PARSE_STATE *parser_state) { - return (parser_state->scope->parse_scope.op); + return parser_state->scope->op; } @@ -69,8 +68,8 @@ acpi_ps_has_completed_scope ( ACPI_PARSE_STATE *parser_state) { - return ((u8) ((parser_state->aml >= parser_state->scope->parse_scope.arg_end || - !parser_state->scope->parse_scope.arg_count))); + return (u8) ((parser_state->aml >= parser_state->scope->arg_end || + !parser_state->scope->arg_count)); } @@ -79,7 +78,7 @@ * FUNCTION: Acpi_ps_init_scope * * PARAMETERS: Parser_state - Current parser state object - * Root - the Root Node of this new scope + * Root - the root object of this new scope * * RETURN: Status * @@ -90,25 +89,24 @@ ACPI_STATUS acpi_ps_init_scope ( ACPI_PARSE_STATE *parser_state, - ACPI_PARSE_OBJECT *root_op) + ACPI_GENERIC_OP *root) { - ACPI_GENERIC_STATE *scope; + ACPI_PARSE_SCOPE *scope; - scope = acpi_cm_create_generic_state (); + scope = acpi_cm_callocate (sizeof (ACPI_PARSE_SCOPE)); if (!scope) { - return (AE_NO_MEMORY); + return AE_NO_MEMORY; } - scope->parse_scope.op = root_op; - scope->parse_scope.arg_count = ACPI_VAR_ARGS; - scope->parse_scope.arg_end = parser_state->aml_end; - scope->parse_scope.pkg_end = parser_state->aml_end; + scope->op = root; + scope->arg_count = ACPI_VAR_ARGS; + scope->arg_end = parser_state->aml_end; + scope->pkg_end = parser_state->aml_end; + parser_state->scope = scope; + parser_state->start_op = root; - parser_state->scope = scope; - parser_state->start_op = root_op; - - return (AE_OK); + return AE_OK; } @@ -130,39 +128,49 @@ ACPI_STATUS acpi_ps_push_scope ( ACPI_PARSE_STATE *parser_state, - ACPI_PARSE_OBJECT *op, + ACPI_GENERIC_OP *op, u32 remaining_args, u32 arg_count) { - ACPI_GENERIC_STATE *scope; + ACPI_PARSE_SCOPE *scope = parser_state->scope_avail; - scope = acpi_cm_create_generic_state (); - if (!scope) { - return (AE_NO_MEMORY); + if (scope) { + /* grabbed scope from available list */ + + parser_state->scope_avail = scope->parent; } + else { + /* allocate scope from the heap */ - scope->parse_scope.op = op; - scope->parse_scope.arg_list = remaining_args; - scope->parse_scope.arg_count = arg_count; - scope->parse_scope.pkg_end = parser_state->pkg_end; + scope = (ACPI_PARSE_SCOPE*) acpi_cm_allocate (sizeof (ACPI_PARSE_SCOPE)); + if (!scope) { + return (AE_NO_MEMORY); + } + } - /* Push onto scope stack */ + /* Always zero out the scope before init */ - acpi_cm_push_generic_state (&parser_state->scope, scope); + MEMSET (scope, 0, sizeof (*scope)); + scope->op = op; + scope->arg_list = remaining_args; + scope->arg_count = arg_count; + scope->pkg_end = parser_state->pkg_end; + scope->parent = parser_state->scope; + parser_state->scope = scope; if (arg_count == ACPI_VAR_ARGS) { /* multiple arguments */ - scope->parse_scope.arg_end = parser_state->pkg_end; + scope->arg_end = parser_state->pkg_end; } else { /* single argument */ - scope->parse_scope.arg_end = ACPI_MAX_AML; + scope->arg_end = ACPI_MAX_AML; } return (AE_OK); @@ -187,28 +195,24 @@ void acpi_ps_pop_scope ( ACPI_PARSE_STATE *parser_state, - ACPI_PARSE_OBJECT **op, + ACPI_GENERIC_OP **op, u32 *arg_list) { - ACPI_GENERIC_STATE *scope = parser_state->scope; - - - /* - * Only pop the scope if there is in fact a next scope - */ - if (scope->common.next) { - scope = acpi_cm_pop_generic_state (&parser_state->scope); + ACPI_PARSE_SCOPE *scope = parser_state->scope; + if (scope->parent) { /* return to parsing previous op */ - *op = scope->parse_scope.op; - *arg_list = scope->parse_scope.arg_list; - parser_state->pkg_end = scope->parse_scope.pkg_end; + *op = scope->op; + *arg_list = scope->arg_list; + parser_state->pkg_end = scope->pkg_end; + parser_state->scope = scope->parent; - /* All done with this scope state structure */ + /* add scope to available list */ - acpi_cm_delete_generic_state (scope); + scope->parent = parser_state->scope_avail; + parser_state->scope_avail = scope; } else { @@ -218,7 +222,6 @@ *arg_list = 0; } - return; } @@ -240,19 +243,27 @@ acpi_ps_cleanup_scope ( ACPI_PARSE_STATE *parser_state) { - ACPI_GENERIC_STATE *scope; + ACPI_PARSE_SCOPE *scope; if (!parser_state) { return; } + /* destroy available list */ + + while (parser_state->scope_avail) { + scope = parser_state->scope_avail; + parser_state->scope_avail = scope->parent; + acpi_cm_free (scope); + } - /* Delete anything on the scope stack */ + /* destroy scope stack */ while (parser_state->scope) { - scope = acpi_cm_pop_generic_state (&parser_state->scope); - acpi_cm_delete_generic_state (scope); + scope = parser_state->scope; + parser_state->scope = scope->parent; + acpi_cm_free (scope); } return; diff -urN linux-2.4.0-test9/drivers/acpi/parser/pstree.c linux-2.4.0-test9-lia/drivers/acpi/parser/pstree.c --- linux-2.4.0-test9/drivers/acpi/parser/pstree.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/pstree.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: pstree - Parser op tree manipulation/traversal/search - * $Revision: 23 $ * *****************************************************************************/ @@ -25,11 +24,11 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" #define _COMPONENT PARSER - MODULE_NAME ("pstree") + MODULE_NAME ("pstree"); /******************************************************************************* @@ -45,30 +44,30 @@ * ******************************************************************************/ -ACPI_PARSE_OBJECT * +ACPI_GENERIC_OP * acpi_ps_get_arg ( - ACPI_PARSE_OBJECT *op, + ACPI_GENERIC_OP *op, u32 argn) { - ACPI_PARSE_OBJECT *arg = NULL; - ACPI_OPCODE_INFO *op_info; + ACPI_GENERIC_OP *arg = NULL; + ACPI_OP_INFO *op_info; /* Get the info structure for this opcode */ op_info = acpi_ps_get_opcode_info (op->opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { - /* Invalid opcode or ASCII character */ + if (!op_info) { + /* Invalid opcode */ - return (NULL); + return NULL; } /* Check if this opcode requires argument sub-objects */ - if (!(ACPI_GET_OP_ARGS (op_info))) { + if (!(op_info->flags & OP_INFO_HAS_ARGS)) { /* Has no linked argument objects */ - return (NULL); + return NULL; } /* Get the requested argument object */ @@ -79,7 +78,7 @@ arg = arg->next; } - return (arg); + return arg; } @@ -98,11 +97,11 @@ void acpi_ps_append_arg ( - ACPI_PARSE_OBJECT *op, - ACPI_PARSE_OBJECT *arg) + ACPI_GENERIC_OP *op, + ACPI_GENERIC_OP *arg) { - ACPI_PARSE_OBJECT *prev_arg; - ACPI_OPCODE_INFO *op_info; + ACPI_GENERIC_OP *prev_arg; + ACPI_OP_INFO *op_info; if (!op) { @@ -112,7 +111,7 @@ /* Get the info structure for this opcode */ op_info = acpi_ps_get_opcode_info (op->opcode); - if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) { + if (!op_info) { /* Invalid opcode */ return; @@ -120,7 +119,7 @@ /* Check if this opcode requires argument sub-objects */ - if (!(ACPI_GET_OP_ARGS (op_info))) { + if (!(op_info->flags & OP_INFO_HAS_ARGS)) { /* Has no linked argument objects */ return; @@ -167,11 +166,11 @@ * ******************************************************************************/ -ACPI_PARSE_OBJECT * +ACPI_GENERIC_OP * acpi_ps_get_child ( - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { - ACPI_PARSE_OBJECT *child = NULL; + ACPI_GENERIC_OP *child = NULL; switch (op->opcode) @@ -212,7 +211,7 @@ } - return (child); + return child; } @@ -230,32 +229,32 @@ * ******************************************************************************/ -ACPI_PARSE_OBJECT * +ACPI_GENERIC_OP * acpi_ps_get_depth_next ( - ACPI_PARSE_OBJECT *origin, - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *origin, + ACPI_GENERIC_OP *op) { - ACPI_PARSE_OBJECT *next = NULL; - ACPI_PARSE_OBJECT *parent; - ACPI_PARSE_OBJECT *arg; + ACPI_GENERIC_OP *next = NULL; + ACPI_GENERIC_OP *parent; + ACPI_GENERIC_OP *arg; if (!op) { - return (NULL); + return NULL; } /* look for an argument or child */ next = acpi_ps_get_arg (op, 0); if (next) { - return (next); + return next; } /* look for a sibling */ next = op->next; if (next) { - return (next); + return next; } /* look for a sibling of parent */ @@ -271,19 +270,19 @@ if (arg == origin) { /* reached parent of origin, end search */ - return (NULL); + return NULL; } if (parent->next) { /* found sibling of parent */ - return (parent->next); + return parent->next; } op = parent; parent = parent->parent; } - return (next); + return next; } @@ -301,10 +300,10 @@ * ******************************************************************************/ -ACPI_PARSE_OBJECT * +ACPI_GENERIC_OP * acpi_ps_fetch_prefix ( - ACPI_PARSE_OBJECT *scope, - NATIVE_CHAR **path, + ACPI_GENERIC_OP *scope, + char **path, u32 io) { u32 prefix = io ? GET8 (*path):**path; @@ -339,7 +338,7 @@ scope = acpi_ps_get_child (scope); } - return (scope); + return scope; } @@ -350,7 +349,7 @@ * PARAMETERS: Path - A string containing the name segment * io - Direction flag * - * RETURN: The 4-s8 ASCII ACPI Name as a u32 + * RETURN: The 4-char ASCII ACPI Name as a u32 * * DESCRIPTION: Fetch ACPI name segment (dot-delimited) * @@ -358,13 +357,13 @@ u32 acpi_ps_fetch_name ( - NATIVE_CHAR **path, + char **path, u32 io) { u32 name = 0; - NATIVE_CHAR *nm; + char *nm; u32 i; - NATIVE_CHAR ch; + char ch; if (io) { @@ -379,7 +378,7 @@ *path += 1; } - nm = (NATIVE_CHAR *) &name; + nm = (char*) &name; for (i = 0; i < 4; i++) { ch = **path; if (ch && ch != '.') { @@ -394,7 +393,7 @@ } } - return (name); + return name; } diff -urN linux-2.4.0-test9/drivers/acpi/parser/psutils.c linux-2.4.0-test9-lia/drivers/acpi/parser/psutils.c --- linux-2.4.0-test9/drivers/acpi/parser/psutils.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/psutils.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: psutils - Parser miscellaneous utilities (Parser only) - * $Revision: 29 $ * *****************************************************************************/ @@ -25,18 +24,17 @@ #include "acpi.h" -#include "acparser.h" +#include "parser.h" #include "amlcode.h" #define _COMPONENT PARSER - MODULE_NAME ("psutils") + MODULE_NAME ("psutils"); -#define PARSEOP_GENERIC 0x01 -#define PARSEOP_NAMED 0x02 -#define PARSEOP_DEFERRED 0x03 -#define PARSEOP_BYTELIST 0x04 -#define PARSEOP_IN_CACHE 0x80 +#define PARSEOP_GENERIC 1 +#define PARSEOP_NAMED 2 +#define PARSEOP_DEFERRED 3 +#define PARSEOP_BYTELIST 4 /******************************************************************************* @@ -55,19 +53,21 @@ void acpi_ps_init_op ( - ACPI_PARSE_OBJECT *op, + ACPI_GENERIC_OP *op, u16 opcode) { - ACPI_OPCODE_INFO *aml_op; + ACPI_OP_INFO *aml_op; op->data_type = ACPI_DESC_TYPE_PARSER; op->opcode = opcode; - aml_op = acpi_ps_get_opcode_info (opcode); - DEBUG_ONLY_MEMBERS (STRNCPY (op->op_name, aml_op->name, - sizeof (op->op_name))); + aml_op = acpi_ps_get_opcode_info (opcode); + if (aml_op) { + DEBUG_ONLY_MEMBERS (STRNCPY (op->op_name, aml_op->name, + sizeof (op->op_name))); + } } @@ -85,11 +85,11 @@ * ******************************************************************************/ -ACPI_PARSE_OBJECT* +ACPI_GENERIC_OP* acpi_ps_alloc_op ( u16 opcode) { - ACPI_PARSE_OBJECT *op = NULL; + ACPI_GENERIC_OP *op = NULL; u32 size; u8 flags; @@ -97,27 +97,24 @@ /* Allocate the minimum required size object */ if (acpi_ps_is_deferred_op (opcode)) { - size = sizeof (ACPI_PARSE2_OBJECT); + size = sizeof (ACPI_DEFERRED_OP); flags = PARSEOP_DEFERRED; } else if (acpi_ps_is_named_op (opcode)) { - size = sizeof (ACPI_PARSE2_OBJECT); + size = sizeof (ACPI_NAMED_OP); flags = PARSEOP_NAMED; } else if (acpi_ps_is_bytelist_op (opcode)) { - size = sizeof (ACPI_PARSE2_OBJECT); + size = sizeof (ACPI_BYTELIST_OP); flags = PARSEOP_BYTELIST; } else { - size = sizeof (ACPI_PARSE_OBJECT); + size = sizeof (ACPI_GENERIC_OP); flags = PARSEOP_GENERIC; - } - - if (size == sizeof (ACPI_PARSE_OBJECT)) { /* * The generic op is by far the most common (16 to 1), and therefore * the op cache is implemented with this type. @@ -136,44 +133,13 @@ op = acpi_gbl_parse_cache; acpi_gbl_parse_cache = op->next; - - /* Clear the previously used Op */ - - MEMSET (op, 0, sizeof (ACPI_PARSE_OBJECT)); - - } - acpi_cm_release_mutex (ACPI_MTX_CACHES); - } - - else { - /* - * The generic op is by far the most common (16 to 1), and therefore - * the op cache is implemented with this type. - * - * Check if there is an Op already available in the cache - */ - - acpi_cm_acquire_mutex (ACPI_MTX_CACHES); - acpi_gbl_ext_parse_cache_requests++; - if (acpi_gbl_ext_parse_cache) { - /* Extract an op from the front of the cache list */ - - acpi_gbl_ext_parse_cache_depth--; - acpi_gbl_ext_parse_cache_hits++; - - op = (ACPI_PARSE_OBJECT *) acpi_gbl_ext_parse_cache; - acpi_gbl_ext_parse_cache = (ACPI_PARSE2_OBJECT *) op->next; - - /* Clear the previously used Op */ - MEMSET (op, 0, sizeof (ACPI_PARSE2_OBJECT)); - + MEMSET (op, 0, sizeof (ACPI_GENERIC_OP)); } acpi_cm_release_mutex (ACPI_MTX_CACHES); } - /* Allocate a new Op if necessary */ if (!op) { @@ -186,7 +152,7 @@ op->flags = flags; } - return (op); + return op; } @@ -205,22 +171,16 @@ void acpi_ps_free_op ( - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { - if (op->flags == PARSEOP_GENERIC) { /* Is the cache full? */ if (acpi_gbl_parse_cache_depth < MAX_PARSE_CACHE_DEPTH) { /* Put a GENERIC_OP back into the cache */ - /* Clear the previously used Op */ - - MEMSET (op, 0, sizeof (ACPI_PARSE_OBJECT)); - op->flags = PARSEOP_IN_CACHE; - acpi_cm_acquire_mutex (ACPI_MTX_CACHES); acpi_gbl_parse_cache_depth++; @@ -232,29 +192,6 @@ } } - else { - /* Is the cache full? */ - - if (acpi_gbl_ext_parse_cache_depth < MAX_EXTPARSE_CACHE_DEPTH) { - /* Put a GENERIC_OP back into the cache */ - - /* Clear the previously used Op */ - - MEMSET (op, 0, sizeof (ACPI_PARSE2_OBJECT)); - op->flags = PARSEOP_IN_CACHE; - - acpi_cm_acquire_mutex (ACPI_MTX_CACHES); - acpi_gbl_ext_parse_cache_depth++; - - op->next = (ACPI_PARSE_OBJECT *) acpi_gbl_ext_parse_cache; - acpi_gbl_ext_parse_cache = (ACPI_PARSE2_OBJECT *) op; - - acpi_cm_release_mutex (ACPI_MTX_CACHES); - return; - } - } - - /* * Not a GENERIC OP, or the cache is full, just free the Op */ @@ -279,7 +216,7 @@ acpi_ps_delete_parse_cache ( void) { - ACPI_PARSE_OBJECT *next; + ACPI_GENERIC_OP *next; /* Traverse the global cache list */ @@ -290,18 +227,6 @@ next = acpi_gbl_parse_cache->next; acpi_cm_free (acpi_gbl_parse_cache); acpi_gbl_parse_cache = next; - acpi_gbl_parse_cache_depth--; - } - - /* Traverse the global cache list */ - - while (acpi_gbl_ext_parse_cache) { - /* Delete one cached state object */ - - next = acpi_gbl_ext_parse_cache->next; - acpi_cm_free (acpi_gbl_ext_parse_cache); - acpi_gbl_ext_parse_cache = (ACPI_PARSE2_OBJECT *) next; - acpi_gbl_ext_parse_cache_depth--; } return; @@ -328,7 +253,7 @@ u8 acpi_ps_is_leading_char ( - u32 c) + s32 c) { return ((u8) (c == '_' || (c >= 'A' && c <= 'Z'))); } @@ -339,7 +264,7 @@ */ u8 acpi_ps_is_prefix_char ( - u32 c) + s32 c) { return ((u8) (c == '\\' || c == '^')); } @@ -404,7 +329,7 @@ * TBD: [Restructure] Need a better way than this brute force approach! */ u8 -acpi_ps_is_node_op ( +acpi_ps_is_named_object_op ( u16 opcode) { return ((u8) @@ -508,16 +433,38 @@ /* - * Cast an acpi_op to an acpi_extended_op if possible + * Cast an acpi_op to an acpi_deferred_op if possible + */ +ACPI_DEFERRED_OP * +acpi_ps_to_deferred_op ( + ACPI_GENERIC_OP *op) +{ + return (acpi_ps_is_deferred_op (op->opcode) + ? ( (ACPI_DEFERRED_OP *) op) : NULL); +} + + +/* + * Cast an acpi_op to an acpi_named_op if possible */ +ACPI_NAMED_OP* +acpi_ps_to_named_op ( + ACPI_GENERIC_OP *op) +{ + return (acpi_ps_is_named_op (op->opcode) + ? ( (ACPI_NAMED_OP *) op) : NULL); +} + -/* TBD: This is very inefficient, fix */ -ACPI_PARSE2_OBJECT * -acpi_ps_to_extended_op ( - ACPI_PARSE_OBJECT *op) +/* + * Cast an acpi_op to an acpi_bytelist_op if possible + */ +ACPI_BYTELIST_OP* +acpi_ps_to_bytelist_op ( + ACPI_GENERIC_OP *op) { - return ((acpi_ps_is_deferred_op (op->opcode) || acpi_ps_is_named_op (op->opcode) || acpi_ps_is_bytelist_op (op->opcode)) - ? ( (ACPI_PARSE2_OBJECT *) op) : NULL); + return (acpi_ps_is_bytelist_op (op->opcode) + ? ( (ACPI_BYTELIST_OP*) op) : NULL); } @@ -526,9 +473,9 @@ */ u32 acpi_ps_get_name ( - ACPI_PARSE_OBJECT *op) + ACPI_GENERIC_OP *op) { - ACPI_PARSE2_OBJECT *named = acpi_ps_to_extended_op (op); + ACPI_NAMED_OP *named = acpi_ps_to_named_op (op); return (named ? named->name : 0); } @@ -539,10 +486,10 @@ */ void acpi_ps_set_name ( - ACPI_PARSE_OBJECT *op, + ACPI_GENERIC_OP *op, u32 name) { - ACPI_PARSE2_OBJECT *named = acpi_ps_to_extended_op (op); + ACPI_NAMED_OP *named = acpi_ps_to_named_op (op); if (named) { named->name = name; diff -urN linux-2.4.0-test9/drivers/acpi/parser/pswalk.c linux-2.4.0-test9-lia/drivers/acpi/parser/pswalk.c --- linux-2.4.0-test9/drivers/acpi/parser/pswalk.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/pswalk.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: pswalk - Parser routines to walk parsed op tree(s) - * $Revision: 45 $ * *****************************************************************************/ @@ -26,13 +25,13 @@ #include "acpi.h" #include "amlcode.h" -#include "acparser.h" -#include "acdispat.h" -#include "acnamesp.h" -#include "acinterp.h" +#include "parser.h" +#include "dispatch.h" +#include "namesp.h" +#include "interp.h" #define _COMPONENT PARSER - MODULE_NAME ("pswalk") + MODULE_NAME ("pswalk"); /******************************************************************************* @@ -54,12 +53,12 @@ ACPI_STATUS acpi_ps_get_next_walk_op ( ACPI_WALK_STATE *walk_state, - ACPI_PARSE_OBJECT *op, - ACPI_PARSE_UPWARDS ascending_callback) + ACPI_GENERIC_OP *op, + INTERPRETER_CALLBACK ascending_callback) { - ACPI_PARSE_OBJECT *next; - ACPI_PARSE_OBJECT *parent; - ACPI_PARSE_OBJECT *grand_parent; + ACPI_GENERIC_OP *next; + ACPI_GENERIC_OP *parent; + ACPI_GENERIC_OP *grand_parent; ACPI_STATUS status; @@ -147,18 +146,6 @@ default: /* - * If we are back to the starting point, the walk is complete. - */ - if (op == walk_state->origin) { - /* Reached the point of origin, the walk is complete */ - - walk_state->prev_op = op; - walk_state->next_op = NULL; - - return (status); - } - - /* * Check for a sibling to the current op. A sibling means * we are still going "downward" in the tree. */ @@ -179,7 +166,7 @@ * No sibling, but check status. * Abort on error from callback routine */ - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { /* Next op will be the parent */ walk_state->prev_op = op; @@ -315,7 +302,7 @@ * No sibling, check for an error from closing the parent * (Also, AE_PENDING if a method call was encountered) */ - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { walk_state->prev_op = parent; walk_state->next_op = grand_parent; walk_state->next_op_info = NEXT_OP_UPWARD; @@ -360,13 +347,13 @@ ACPI_STATUS acpi_ps_walk_loop ( ACPI_WALK_LIST *walk_list, - ACPI_PARSE_OBJECT *start_op, - ACPI_PARSE_DOWNWARDS descending_callback, - ACPI_PARSE_UPWARDS ascending_callback) + ACPI_GENERIC_OP *start_op, + INTERPRETER_CALLBACK descending_callback, + INTERPRETER_CALLBACK ascending_callback) { ACPI_STATUS status = AE_OK; ACPI_WALK_STATE *walk_state; - ACPI_PARSE_OBJECT *op = start_op; + ACPI_GENERIC_OP *op = start_op; walk_state = acpi_ds_get_current_walk_state (walk_list); @@ -376,7 +363,7 @@ while (op) { if (walk_state->next_op_info != NEXT_OP_UPWARD) { - status = descending_callback (op->opcode, op, walk_state, NULL); + status = descending_callback (walk_state, op); } /* @@ -450,19 +437,19 @@ ACPI_STATUS acpi_ps_walk_parsed_aml ( - ACPI_PARSE_OBJECT *start_op, - ACPI_PARSE_OBJECT *end_op, - ACPI_OPERAND_OBJECT *mth_desc, - ACPI_NAMESPACE_NODE *start_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **caller_return_desc, + ACPI_GENERIC_OP *start_op, + ACPI_GENERIC_OP *end_op, + ACPI_OBJECT_INTERNAL *mth_desc, + ACPI_NAME_TABLE *start_scope, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **caller_return_desc, ACPI_OWNER_ID owner_id, - ACPI_PARSE_DOWNWARDS descending_callback, - ACPI_PARSE_UPWARDS ascending_callback) + INTERPRETER_CALLBACK descending_callback, + INTERPRETER_CALLBACK ascending_callback) { - ACPI_PARSE_OBJECT *op; + ACPI_GENERIC_OP *op; ACPI_WALK_STATE *walk_state; - ACPI_OPERAND_OBJECT *return_desc; + ACPI_OBJECT_INTERNAL *return_desc; ACPI_STATUS status; ACPI_WALK_LIST walk_list; ACPI_WALK_LIST *prev_walk_list; @@ -471,7 +458,7 @@ /* Parameter Validation */ if (!start_op || !end_op) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } /* Initialize a new walk list */ @@ -488,10 +475,10 @@ prev_walk_list = acpi_gbl_current_walk_list; acpi_gbl_current_walk_list = &walk_list; - if (start_node) { + if (start_scope) { /* Push start scope on scope stack and make it current */ - status = acpi_ds_scope_stack_push (start_node, ACPI_TYPE_METHOD, walk_state); + status = acpi_ds_scope_stack_push (start_scope, ACPI_TYPE_METHOD, walk_state); if (ACPI_FAILURE (status)) { return (status); } @@ -502,7 +489,7 @@ /* Init arguments if this is a control method */ /* TBD: [Restructure] add walkstate as a param */ - acpi_ds_method_data_init_args (params, MTH_NUM_ARGS, walk_state); + acpi_ds_method_data_init_args (params, MTH_NUM_ARGS); } op = start_op; @@ -515,7 +502,7 @@ */ while (walk_state) { - if (ACPI_SUCCESS (status)) { + if (status == AE_OK) { status = acpi_ps_walk_loop (&walk_list, op, descending_callback, ascending_callback); } @@ -539,7 +526,9 @@ * there's lots of cleanup to do */ - if (walk_state->method_desc) { + if (walk_state->method_desc && + walk_state->method_desc->method.parser_op) + { acpi_ds_terminate_control_method (walk_state); } @@ -551,7 +540,7 @@ walk_state = acpi_ds_get_current_walk_state (&walk_list); if (walk_state && - ACPI_SUCCESS (status)) + status == AE_OK) { /* There is another walk state, restart it */ diff -urN linux-2.4.0-test9/drivers/acpi/parser/psxface.c linux-2.4.0-test9-lia/drivers/acpi/parser/psxface.c --- linux-2.4.0-test9/drivers/acpi/parser/psxface.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/parser/psxface.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: psxface - Parser external interfaces - * $Revision: 36 $ * *****************************************************************************/ @@ -25,15 +25,18 @@ #include "acpi.h" -#include "acparser.h" -#include "acdispat.h" -#include "acinterp.h" +#include "parser.h" +#include "dispatch.h" +#include "interp.h" #include "amlcode.h" -#include "acnamesp.h" +#include "namesp.h" #define _COMPONENT PARSER - MODULE_NAME ("psxface") + MODULE_NAME ("psxface"); + + +char *acpi_gbl_parser_id = "Non-recursive AML Parser"; /***************************************************************************** @@ -54,30 +57,29 @@ ACPI_STATUS acpi_psx_execute ( - ACPI_NAMESPACE_NODE *method_node, - ACPI_OPERAND_OBJECT **params, - ACPI_OPERAND_OBJECT **return_obj_desc) + ACPI_NAMED_OBJECT *method_entry, + ACPI_OBJECT_INTERNAL **params, + ACPI_OBJECT_INTERNAL **return_obj_desc) { ACPI_STATUS status; - ACPI_OPERAND_OBJECT *obj_desc; + ACPI_OBJECT_INTERNAL *obj_desc; u32 i; - ACPI_PARSE_OBJECT *op; - /* Validate the Node and get the attached object */ + /* Validate the NTE and get the attached object */ - if (!method_node) { + if (!method_entry) { return (AE_NULL_ENTRY); } - obj_desc = acpi_ns_get_attached_object (method_node); + obj_desc = acpi_ns_get_attached_object (method_entry); if (!obj_desc) { return (AE_NULL_OBJECT); } - /* Init for new method, wait on concurrency semaphore */ + /* Parse method if necessary, wait on concurrency semaphore */ - status = acpi_ds_begin_method_execution (method_node, obj_desc); + status = acpi_ds_begin_method_execution (method_entry, obj_desc); if (ACPI_FAILURE (status)) { return (status); } @@ -94,40 +96,15 @@ } /* - * Perform the first pass parse of the method to enter any - * named objects that it creates into the namespace - */ - - /* Create and init a Root Node */ - - op = acpi_ps_alloc_op (AML_SCOPE_OP); - if (!op) { - return (AE_NO_MEMORY); - } - - status = acpi_ps_parse_aml (op, obj_desc->method.pcode, - obj_desc->method.pcode_length, - ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE, - method_node, params, return_obj_desc, - acpi_ds_load1_begin_op, acpi_ds_load1_end_op); - acpi_ps_delete_parse_tree (op); - - /* Create and init a Root Node */ - - op = acpi_ps_alloc_op (AML_SCOPE_OP); - if (!op) { - return (AE_NO_MEMORY); - } - - /* + * Method is parsed and ready to execute * The walk of the parse tree is where we actually execute the method */ - status = acpi_ps_parse_aml (op, obj_desc->method.pcode, - obj_desc->method.pcode_length, - ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE, - method_node, params, return_obj_desc, - acpi_ds_exec_begin_op, acpi_ds_exec_end_op); - acpi_ps_delete_parse_tree (op); + + status = acpi_ps_walk_parsed_aml (obj_desc->method.parser_op, + obj_desc->method.parser_op, obj_desc, + method_entry->child_table, params, return_obj_desc, + obj_desc->method.owning_id, acpi_ds_exec_begin_op, + acpi_ds_exec_end_op); if (params) { /* Take away the extra reference that we gave the parameters above */ diff -urN linux-2.4.0-test9/drivers/acpi/resources/Makefile linux-2.4.0-test9-lia/drivers/acpi/resources/Makefile --- linux-2.4.0-test9/drivers/acpi/resources/Makefile Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/Makefile Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -SUB_DIRS := -MOD_SUB_DIRS := $(SUB_DIRS) -MOD_IN_SUB_DIRS := -ALL_SUB_DIRS := $(SUB_DIRS) - -O_TARGET := ../$(shell basename `pwd`).o -O_OBJS := -M_OBJS := - -ACPI_OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) - -EXTRA_CFLAGS += -I../include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) - -# if the interpreter is used, it overrides arch/i386/kernel/acpi.c -ifeq ($(CONFIG_ACPI_INTERPRETER),y) - O_OBJS := $(ACPI_OBJS) -endif - -include $(TOPDIR)/Rules.make - -clean: - $(RM) *.o diff -urN linux-2.4.0-test9/drivers/acpi/resources/rsaddr.c linux-2.4.0-test9-lia/drivers/acpi/resources/rsaddr.c --- linux-2.4.0-test9/drivers/acpi/resources/rsaddr.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rsaddr.c Thu Aug 24 18:16:02 2000 @@ -4,7 +4,6 @@ * Acpi_rs_address16_stream * Acpi_rs_address32_resource * Acpi_rs_address32_stream - * $Revision: 9 $ * *****************************************************************************/ @@ -30,7 +29,7 @@ #include "acpi.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rsaddr") + MODULE_NAME ("rsaddr"); /*************************************************************************** @@ -64,8 +63,8 @@ { u8 *buffer = byte_stream_buffer; RESOURCE *output_struct = (RESOURCE *) * output_buffer; - u16 temp16; - u8 temp8; + u16 temp16 = 0; + u8 temp8 = 0; u32 index; u32 struct_size = sizeof(ADDRESS16_RESOURCE) + RESOURCE_LENGTH_NO_DATA; @@ -92,7 +91,7 @@ /* Values 0-2 are valid */ if (temp8 > 2) { - return (AE_AML_ERROR); + return (AE_ERROR); } output_struct->data.address16.resource_type = temp8 & 0x03; @@ -235,8 +234,7 @@ * Struct_size to the next 32-bit boundry. */ temp8 = (u8) (index + 1); - struct_size += ROUND_UP_TO_32_bITS (temp8); - output_struct->length = struct_size; + struct_size += ROUND_UP_TO_32_BITS (temp8); } else { output_struct->data.address16.resource_source_index = 0x00; @@ -245,6 +243,11 @@ } /* + * Set the Length parameter + */ + output_struct->length = struct_size; + + /* * Return the final size of the structure */ *structure_size = struct_size; @@ -278,8 +281,8 @@ { u8 *buffer = *output_buffer; u8 *length_field; - u8 temp8; - NATIVE_CHAR *temp_pointer = NULL; + u8 temp8 = 0; + u8 *temp_pointer = NULL; u32 actual_bytes; @@ -386,7 +389,7 @@ *buffer = temp8; buffer += 1; - temp_pointer = (NATIVE_CHAR *) buffer; + temp_pointer = buffer; /* * Copy the string @@ -447,21 +450,15 @@ u8 **output_buffer, u32 *structure_size) { - u8 *buffer; - RESOURCE *output_struct; - u16 temp16; - u8 temp8; - u32 struct_size; + u8 *buffer = byte_stream_buffer; + RESOURCE *output_struct = (RESOURCE *) * output_buffer; + u16 temp16 = 0; + u8 temp8 = 0; + u32 struct_size = sizeof (ADDRESS32_RESOURCE) + + RESOURCE_LENGTH_NO_DATA; u32 index; - buffer = byte_stream_buffer; - - output_struct = (RESOURCE *) *output_buffer; - - struct_size = sizeof (ADDRESS32_RESOURCE) + - RESOURCE_LENGTH_NO_DATA; - /* * Point past the Descriptor to get the number of bytes consumed */ @@ -480,7 +477,7 @@ /* Values 0-2 are valid */ if(temp8 > 2) { - return (AE_AML_ERROR); + return (AE_ERROR); } output_struct->data.address32.resource_type = temp8 & 0x03; @@ -618,7 +615,7 @@ * Struct_size to the next 32-bit boundry. */ temp8 = (u8) (index + 1); - struct_size += ROUND_UP_TO_32_bITS (temp8); + struct_size += ROUND_UP_TO_32_BITS (temp8); } else { @@ -664,13 +661,11 @@ u8 **output_buffer, u32 *bytes_consumed) { - u8 *buffer; + u8 *buffer = *output_buffer; u16 *length_field; - u8 temp8; - NATIVE_CHAR *temp_pointer; - + u8 temp8 = 0; + u8 *temp_pointer = NULL; - buffer = *output_buffer; /* * The descriptor field is static @@ -784,7 +779,7 @@ buffer += 1; - temp_pointer = (NATIVE_CHAR *) buffer; + temp_pointer = buffer; /* * Copy the string diff -urN linux-2.4.0-test9/drivers/acpi/resources/rscalc.c linux-2.4.0-test9-lia/drivers/acpi/resources/rscalc.c --- linux-2.4.0-test9/drivers/acpi/resources/rscalc.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rscalc.c Thu Aug 24 18:16:02 2000 @@ -2,7 +2,6 @@ * * Module Name: rscalc - Acpi_rs_calculate_byte_stream_length * Acpi_rs_calculate_list_length - * $Revision: 9 $ * *****************************************************************************/ @@ -28,7 +27,7 @@ #include "acpi.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rscalc") + MODULE_NAME ("rscalc"); /*************************************************************************** @@ -52,8 +51,9 @@ RESOURCE *linked_list, u32 *size_needed) { + ACPI_STATUS status = AE_OK; u32 byte_stream_size_needed = 0; - u32 segment_size; + u32 size_of_this_bit; EXTENDED_IRQ_RESOURCE *ex_irq = NULL; u8 done = FALSE; @@ -64,7 +64,7 @@ * Init the variable that will hold the size to add to the * total. */ - segment_size = 0; + size_of_this_bit = 0; switch (linked_list->id) { @@ -76,7 +76,7 @@ * For an IRQ Resource, Byte 3, although optional, will * always be created - it holds IRQ information. */ - segment_size = 4; + size_of_this_bit = 4; break; case dma: @@ -86,7 +86,7 @@ /* * For this resource the size is static */ - segment_size = 3; + size_of_this_bit = 3; break; case start_dependent_functions: @@ -97,7 +97,7 @@ * For a Start_dependent_functions Resource, Byte 1, * although optional, will always be created. */ - segment_size = 2; + size_of_this_bit = 2; break; case end_dependent_functions: @@ -107,7 +107,7 @@ /* * For this resource the size is static */ - segment_size = 1; + size_of_this_bit = 1; break; case io: @@ -117,7 +117,7 @@ /* * For this resource the size is static */ - segment_size = 8; + size_of_this_bit = 8; break; case fixed_io: @@ -127,7 +127,7 @@ /* * For this resource the size is static */ - segment_size = 4; + size_of_this_bit = 4; break; case vendor_specific: @@ -141,12 +141,12 @@ * Resource data type. */ if(linked_list->data.vendor_specific.length > 7) { - segment_size = 3; + size_of_this_bit = 3; } else { - segment_size = 1; + size_of_this_bit = 1; } - segment_size += + size_of_this_bit += linked_list->data.vendor_specific.length; break; @@ -157,7 +157,7 @@ /* * For this resource the size is static */ - segment_size = 2; + size_of_this_bit = 2; done = TRUE; break; @@ -168,7 +168,7 @@ /* * For this resource the size is static */ - segment_size = 12; + size_of_this_bit = 12; break; case memory32: @@ -178,7 +178,7 @@ /* * For this resource the size is static */ - segment_size = 20; + size_of_this_bit = 20; break; case fixed_memory32: @@ -188,7 +188,7 @@ /* * For this resource the size is static */ - segment_size = 12; + size_of_this_bit = 12; break; case address16: @@ -201,10 +201,10 @@ * the Index + the length of the null terminated * string Resource Source + 1 for the null. */ - segment_size = 16; + size_of_this_bit = 16; if(NULL != linked_list->data.address16.resource_source) { - segment_size += (1 + + size_of_this_bit += (1 + linked_list->data.address16.resource_source_string_length); } break; @@ -219,10 +219,10 @@ * length of the null terminated string Resource Source + * 1 for the null. */ - segment_size = 26; + size_of_this_bit = 26; if(NULL != linked_list->data.address16.resource_source) { - segment_size += (1 + + size_of_this_bit += (1 + linked_list->data.address16.resource_source_string_length); } break; @@ -239,14 +239,14 @@ * Index + the length of the null terminated string * Resource Source + 1 for the null. */ - segment_size = 9; + size_of_this_bit = 9; - segment_size += + size_of_this_bit += (linked_list->data.extended_irq.number_of_interrupts - 1) * 4; if(NULL != ex_irq->resource_source) { - segment_size += (1 + + size_of_this_bit += (1 + linked_list->data.extended_irq.resource_source_string_length); } break; @@ -256,7 +256,7 @@ * If we get here, everything is out of sync, * so exit with an error */ - return (AE_AML_ERROR); + return (AE_ERROR); break; } /* switch (Linked_list->Id) */ @@ -264,7 +264,7 @@ /* * Update the total */ - byte_stream_size_needed += segment_size; + byte_stream_size_needed += size_of_this_bit; /* * Point to the next object @@ -278,7 +278,7 @@ */ *size_needed = byte_stream_size_needed; - return (AE_OK); + return (status); } /* Acpi_rs_calculate_byte_stream_length */ @@ -309,16 +309,16 @@ { u32 buffer_size = 0; u32 bytes_parsed = 0; - u8 number_of_interrupts = 0; - u8 number_of_channels = 0; - u8 resource_type; - u32 structure_size; - u32 bytes_consumed; + u8 resource_type = 0; + u32 structure_size = 0; + u32 bytes_consumed = 0; u8 *buffer; + u8 number_of_interrupts = 0; u8 temp8; u16 temp16; u8 index; - u8 additional_bytes; + u8 number_of_channels = 0; + u8 additional_bytes = 0; while (bytes_parsed < byte_stream_buffer_length) { @@ -360,7 +360,7 @@ /* * Ensure a 32-bit boundary for the structure */ - temp16 = (u16) ROUND_UP_TO_32_bITS (temp16); + temp16 = (u16) ROUND_UP_TO_32_BITS (temp16); structure_size = sizeof (VENDOR_RESOURCE) + RESOURCE_LENGTH_NO_DATA + @@ -419,7 +419,7 @@ /* * Ensure a 32-bit boundary for the structure */ - temp8 = (u8) ROUND_UP_TO_32_bITS (temp8); + temp8 = (u8) ROUND_UP_TO_32_BITS (temp8); structure_size = sizeof (ADDRESS32_RESOURCE) + RESOURCE_LENGTH_NO_DATA + @@ -457,7 +457,7 @@ /* * Ensure a 32-bit boundry for the structure */ - temp8 = (u8) ROUND_UP_TO_32_bITS (temp8); + temp8 = (u8) ROUND_UP_TO_32_BITS (temp8); structure_size = sizeof (ADDRESS16_RESOURCE) + RESOURCE_LENGTH_NO_DATA + @@ -512,7 +512,7 @@ /* * Ensure a 32-bit boundry for the structure */ - temp8 = (u8) ROUND_UP_TO_32_bITS (temp8); + temp8 = (u8) ROUND_UP_TO_32_BITS (temp8); structure_size = sizeof (EXTENDED_IRQ_RESOURCE) + RESOURCE_LENGTH_NO_DATA + @@ -532,7 +532,7 @@ * If we get here, everything is out of sync, * so exit with an error */ - return (AE_AML_ERROR); + return (AE_ERROR); break; } } @@ -699,7 +699,7 @@ /* * Ensure a 32-bit boundry for the structure */ - temp8 = (u8) ROUND_UP_TO_32_bITS (temp8); + temp8 = (u8) ROUND_UP_TO_32_BITS (temp8); structure_size = sizeof (VENDOR_RESOURCE) + RESOURCE_LENGTH_NO_DATA + @@ -723,7 +723,7 @@ * If we get here, everything is out of sync, * so exit with an error */ - return (AE_AML_ERROR); + return (AE_ERROR); break; } /* switch */ @@ -752,116 +752,3 @@ } /* Acpi_rs_calculate_list_length */ -/*************************************************************************** - * FUNCTION: Acpi_rs_calculate_pci_routing_table_length - * - * PARAMETERS: - * Package_object - Pointer to the package object - * Buffer_size_needed - u32 pointer of the size buffer - * needed to properly return the - * parsed data - * - * RETURN: Status AE_OK - * - * DESCRIPTION: Given a package representing a PCI routing table, this - * calculates the size of the corresponding linked list of - * descriptions. - * - ***************************************************************************/ - -ACPI_STATUS -acpi_rs_calculate_pci_routing_table_length ( - ACPI_OPERAND_OBJECT *package_object, - u32 *buffer_size_needed) -{ - u32 number_of_elements; - u32 temp_size_needed; - ACPI_OPERAND_OBJECT **top_object_list; - u32 index; - - number_of_elements = package_object->package.count; - - /* - * Calculate the size of the return buffer. - * The base size is the number of elements * the sizes of the - * structures. Additional space for the strings is added below. - * The minus one is to subtract the size of the u8 Source[1] - * member because it is added below. - * - * NOTE: The Number_of_elements is incremented by one to add an end - * table structure that is essentially a structure of zeros. - */ - temp_size_needed = (number_of_elements + 1) * - (sizeof (PCI_ROUTING_TABLE) - 1); - - /* - * But each PRT_ENTRY structure has a pointer to a string and - * the size of that string must be found. - */ - top_object_list = package_object->package.elements; - - for (index = 0; index < number_of_elements; index++) { - ACPI_OPERAND_OBJECT *package_element; - ACPI_OPERAND_OBJECT **sub_object_list; - u8 name_found; - u32 table_index; - - /* - * Dereference the sub-package - */ - package_element = *top_object_list; - - /* - * The Sub_object_list will now point to an array of the - * four IRQ elements: Address, Pin, Source and Source_index - */ - sub_object_list = package_element->package.elements; - - /* - * Scan the Irq_table_elements for the Source Name String - */ - name_found = FALSE; - - for (table_index = 0; table_index < 4 && !name_found; table_index++) { - if (ACPI_TYPE_STRING == (*sub_object_list)->common.type) { - name_found = TRUE; - } - - else { - /* - * Look at the next element - */ - sub_object_list++; - } - } - - /* - * Was a String type found? - */ - if (TRUE == name_found) { - /* - * The length String.Length field includes the - * terminating NULL - */ - temp_size_needed += (*sub_object_list)->string.length; - temp_size_needed = ROUND_UP_TO_32_bITS (temp_size_needed); - } - - else { - /* - * If no name was found, then this is a NULL, which is - * translated as a u32 zero. - */ - temp_size_needed += sizeof(u32); - } - - /* - * Point to the next ACPI_OPERAND_OBJECT - */ - top_object_list++; - } - - *buffer_size_needed = temp_size_needed; - - return (AE_OK); -} \ No newline at end of file diff -urN linux-2.4.0-test9/drivers/acpi/resources/rscreate.c linux-2.4.0-test9-lia/drivers/acpi/resources/rscreate.c --- linux-2.4.0-test9/drivers/acpi/resources/rscreate.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rscreate.c Thu Aug 24 18:16:02 2000 @@ -3,7 +3,6 @@ * Module Name: rscreate - Acpi_rs_create_resource_list * Acpi_rs_create_pci_routing_table * Acpi_rs_create_byte_stream - * $Revision: 16 $ * *****************************************************************************/ @@ -27,14 +26,13 @@ #include "acpi.h" -#include "acresrc.h" +#include "resource.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rscreate") + MODULE_NAME ("rscreate"); -/******************************************************************************* - * +/*************************************************************************** * FUNCTION: Acpi_rs_create_resource_list * * PARAMETERS: @@ -42,40 +40,53 @@ * Output_buffer - Pointer to the user's buffer * Output_buffer_length - Pointer to the size of Output_buffer * - * RETURN: Status - AE_OK if okay, else a valid ACPI_STATUS code - * If Output_buffer is not large enough, Output_buffer_length - * indicates how large Output_buffer should be, else it - * indicates how may u8 elements of Output_buffer are valid. + * RETURN: Status AE_OK if okay, else a valid ACPI_STATUS code + * If Output_buffer is not large enough, Output_buffer_length + * indicates how large Output_buffer should be, else it + * indicates how may u8 elements of Output_buffer are + * valid. * * DESCRIPTION: Takes the byte stream returned from a _CRS, _PRS control method - * execution and parses the stream to create a linked list - * of device resources. + * execution and parses the stream to create a linked list + * of device resources. * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_rs_create_resource_list ( - ACPI_OPERAND_OBJECT *byte_stream_buffer, + ACPI_OBJECT_INTERNAL *byte_stream_buffer, u8 *output_buffer, u32 *output_buffer_length) { - ACPI_STATUS status; + ACPI_STATUS status = AE_UNKNOWN_STATUS; u8 *byte_stream_start = NULL; u32 list_size_needed = 0; u32 byte_stream_buffer_length = 0; /* - * Params already validated, so we don't re-validate here + * Validate parameters: + * + * 1. If Byte_stream_buffer is NULL after we know that + * Byte_steam_length is not zero, or + * 2. If Output_buffer is NULL and Output_buffer_length + * is not zero + * + * Return an error */ + if (!byte_stream_buffer || + (!output_buffer && 0 != *output_buffer_length)) + { + return (AE_BAD_PARAMETER); + } byte_stream_buffer_length = byte_stream_buffer->buffer.length; byte_stream_start = byte_stream_buffer->buffer.pointer; /* * Pass the Byte_stream_buffer into a module that can calculate - * the buffer size needed for the linked list + * the buffer size needed for the linked list */ status = acpi_rs_calculate_list_length (byte_stream_start, byte_stream_buffer_length, @@ -84,13 +95,13 @@ /* * Exit with the error passed back */ - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } /* * If the linked list will fit into the available buffer - * call to fill in the list + * call to fill in the list */ if (list_size_needed <= *output_buffer_length) { @@ -106,7 +117,7 @@ /* * Exit with the error passed back */ - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } @@ -123,53 +134,140 @@ } -/******************************************************************************* - * +/*************************************************************************** * FUNCTION: Acpi_rs_create_pci_routing_table * * PARAMETERS: - * Package_object - Pointer to an ACPI_OPERAND_OBJECT + * Package_object - Pointer to an ACPI_OBJECT_INTERNAL * package * Output_buffer - Pointer to the user's buffer * Output_buffer_length - Size of Output_buffer * * RETURN: Status AE_OK if okay, else a valid ACPI_STATUS code. * If the Output_buffer is too small, the error will be - * AE_BUFFER_OVERFLOW and Output_buffer_length will point - * to the size buffer needed. + * AE_BUFFER_OVERFLOW and Output_buffer_length will point + * to the size buffer needed. * - * DESCRIPTION: Takes the ACPI_OPERAND_OBJECT package and creates a - * linked list of PCI interrupt descriptions + * DESCRIPTION: Takes the ACPI_OBJECT_INTERNAL package and creates a + * linked list of PCI interrupt descriptions * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_rs_create_pci_routing_table ( - ACPI_OPERAND_OBJECT *package_object, + ACPI_OBJECT_INTERNAL *package_object, u8 *output_buffer, u32 *output_buffer_length) { u8 *buffer = output_buffer; - ACPI_OPERAND_OBJECT **top_object_list = NULL; - ACPI_OPERAND_OBJECT **sub_object_list = NULL; - ACPI_OPERAND_OBJECT *package_element = NULL; + ACPI_OBJECT_INTERNAL **top_object_list = NULL; + ACPI_OBJECT_INTERNAL **sub_object_list = NULL; + ACPI_OBJECT_INTERNAL *package_element = NULL; u32 buffer_size_needed = 0; u32 number_of_elements = 0; u32 index = 0; + u8 table_index = 0; + u8 name_found = FALSE; PCI_ROUTING_TABLE *user_prt = NULL; - ACPI_STATUS status; /* - * Params already validated, so we don't re-validate here + * Validate parameters: + * + * 1. If Method_return_object is NULL, or + * 2. If Output_buffer is NULL and Output_buffer_length is not zero + * + * Return an error */ + if (!package_object || + (!output_buffer && 0 != *output_buffer_length)) + { + return (AE_BAD_PARAMETER); + } - status = acpi_rs_calculate_pci_routing_table_length(package_object, - &buffer_size_needed); + /* + * Calculate the buffer size needed for the routing table. + */ + number_of_elements = package_object->package.count; + + /* + * Properly calculate the size of the return buffer. + * The base size is the number of elements * the sizes of the + * structures. Additional space for the strings is added below. + * The minus one is to subtract the size of the u8 Source[1] + * member because it is added below. + * NOTE: The Number_of_elements is incremented by one to add an end + * table structure that is essentially a structure of zeros. + */ + buffer_size_needed = (number_of_elements + 1) * + (sizeof (PCI_ROUTING_TABLE) - 1); + + /* + * But each PRT_ENTRY structure has a pointer to a string and + * the size of that string must be found. + */ + top_object_list = package_object->package.elements; + + for (index = 0; index < number_of_elements; index++) { + /* + * Dereference the sub-package + */ + package_element = *top_object_list; + + /* + * The Sub_object_list will now point to an array of the + * four IRQ elements: Address, Pin, Source and Source_index + */ + sub_object_list = package_element->package.elements; + + /* + * Scan the Irq_table_elements for the Source Name String + */ + name_found = FALSE; + + for (table_index = 0; table_index < 4 && !name_found; table_index++) { + if (ACPI_TYPE_STRING == (*sub_object_list)->common.type) { + name_found = TRUE; + } + + else { + /* + * Look at the next element + */ + sub_object_list++; + } + } + + /* + * Was a String type found? + */ + if (TRUE == name_found) { + /* + * The length String.Length field includes the + * terminating NULL + */ + buffer_size_needed += ((*sub_object_list)->string.length); + buffer_size_needed = ROUND_UP_TO_4BYTES(buffer_size_needed); + } + + else { + /* + * If no name was found, then this is a NULL, which is + * translated as a u32 zero. + */ + buffer_size_needed += sizeof(u32); + buffer_size_needed = ROUND_UP_TO_4BYTES(buffer_size_needed); + } + + /* + * Point to the next ACPI_OBJECT_INTERNAL + */ + top_object_list++; + } /* * If the data will fit into the available buffer - * call to fill in the list + * call to fill in the list */ if (buffer_size_needed <= *output_buffer_length) { /* @@ -179,32 +277,35 @@ /* * Loop through the ACPI_INTERNAL_OBJECTS - Each object should - * contain a u32 Address, a u8 Pin, a Name and a u8 - * Source_index. + * contain a u32 Address, a u8 Pin, a Name and a u8 + * Source_index. */ top_object_list = package_object->package.elements; number_of_elements = package_object->package.count; - user_prt = (PCI_ROUTING_TABLE *) buffer; + user_prt = (PCI_ROUTING_TABLE *)buffer; for (index = 0; index < number_of_elements; index++) { /* * Point User_prt past this current structure * * NOTE: On the first iteration, User_prt->Length will - * be zero because we cleared the return buffer earlier + * be zero because we zero'ed out the return buffer + * earlier */ buffer += user_prt->length; - user_prt = (PCI_ROUTING_TABLE *) buffer; + buffer = (u8 *) ROUND_UP_TO_4BYTES(buffer); + + user_prt = (PCI_ROUTING_TABLE *)buffer; /* * Fill in the Length field with the information we - * have at this point. - * The minus one is to subtract the size of the - * u8 Source[1] member because it is added below. + * have at this point. + * The minus one is to subtract the size of the + * u8 Source[1] member because it is added below. */ - user_prt->length = (sizeof (PCI_ROUTING_TABLE) - 1); + user_prt->length = (sizeof(PCI_ROUTING_TABLE) - 1); /* * Dereference the sub-package @@ -213,8 +314,8 @@ /* * The Sub_object_list will now point to an array of - * the four IRQ elements: Address, Pin, Source and - * Source_index + * the four IRQ elements: Address, Pin, Source and + * Source_index */ sub_object_list = package_element->package.elements; @@ -250,29 +351,29 @@ sub_object_list++; if (ACPI_TYPE_STRING == (*sub_object_list)->common.type) { - STRCPY (user_prt->data.source, + STRCPY(user_prt->data.source, (*sub_object_list)->string.pointer); /* * Add to the Length field the length of the string */ user_prt->length += (*sub_object_list)->string.length; - user_prt->length = - ROUND_UP_TO_32_bITS (user_prt->length); + user_prt->length = ROUND_UP_TO_4BYTES(user_prt->length); } else { /* * If this is a number, then the Source Name - * is NULL, since the entire buffer was zeroed - * out, we can leave this alone. + * is NULL, since the entire buffer was zeroed + * out, we can leave this alone. */ if (ACPI_TYPE_NUMBER == (*sub_object_list)->common.type) { /* * Add to the Length field the length of - * the u32 NULL + * the u32 NULL */ - user_prt->length += sizeof (u32); + user_prt->length += sizeof(u32); + user_prt->length = ROUND_UP_TO_4BYTES(user_prt->length); } else { @@ -295,7 +396,7 @@ } /* - * Point to the next ACPI_OPERAND_OBJECT + * Point to the next ACPI_OBJECT_INTERNAL */ top_object_list++; } @@ -318,8 +419,7 @@ } -/******************************************************************************* - * +/*************************************************************************** * FUNCTION: Acpi_rs_create_byte_stream * * PARAMETERS: @@ -336,7 +436,7 @@ * creates a bytestream to be used as input for the * _SRS control method. * - ******************************************************************************/ + ***************************************************************************/ ACPI_STATUS acpi_rs_create_byte_stream ( @@ -344,15 +444,27 @@ u8 *output_buffer, u32 *output_buffer_length) { - ACPI_STATUS status; + ACPI_STATUS status = AE_UNKNOWN_STATUS; u32 byte_stream_size_needed = 0; /* - * Params already validated, so we don't re-validate here + * Validate parameters: * + * 1. If Linked_list_buffer is NULL, or + * 2. If Output_buffer is NULL and Output_buffer_length is not zero + * + * Return an error + */ + if (!linked_list_buffer || + (!output_buffer && 0 != *output_buffer_length)) + { + return (AE_BAD_PARAMETER); + } + + /* * Pass the Linked_list_buffer into a module that can calculate - * the buffer size needed for the byte stream. + * the buffer size needed for the byte stream. */ status = acpi_rs_calculate_byte_stream_length (linked_list_buffer, &byte_stream_size_needed); @@ -360,13 +472,13 @@ /* * Exit with the error passed back */ - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } /* * If the linked list will fit into the available buffer - * call to fill in the list + * call to fill in the list */ if (byte_stream_size_needed <= *output_buffer_length) { @@ -382,7 +494,7 @@ /* * Exit with the error passed back */ - if (ACPI_FAILURE (status)) { + if (AE_OK != status) { return (status); } diff -urN linux-2.4.0-test9/drivers/acpi/resources/rsdump.c linux-2.4.0-test9-lia/drivers/acpi/resources/rsdump.c --- linux-2.4.0-test9/drivers/acpi/resources/rsdump.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rsdump.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: rsdump - Functions do dump out the resource structures. - * $Revision: 10 $ * *****************************************************************************/ @@ -27,7 +26,7 @@ #include "acpi.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rsdump") + MODULE_NAME ("rsdump"); /****************************************************************************** @@ -121,7 +120,7 @@ break; } - acpi_os_printf ("\t\t%sBus Master\n", + acpi_os_printf ("\t\t%s_bus Master\n", BUS_MASTER == dma_data->bus_master ? "" : "Not a "); @@ -803,7 +802,7 @@ acpi_rs_dump_resource_list ( RESOURCE *resource) { - u8 count = 0; + s8 count = 0; u8 done = FALSE; @@ -903,7 +902,7 @@ u8 *route_table) { u8 *buffer = route_table; - u8 count = 0; + s8 count = 0; u8 done = FALSE; PCI_ROUTING_TABLE *prt_element; diff -urN linux-2.4.0-test9/drivers/acpi/resources/rsio.c linux-2.4.0-test9-lia/drivers/acpi/resources/rsio.c --- linux-2.4.0-test9/drivers/acpi/resources/rsio.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rsio.c Thu Aug 24 18:16:02 2000 @@ -6,7 +6,6 @@ * Acpi_rs_fixed_io_stream * Acpi_rs_dma_resource * Acpi_rs_dma_stream - * $Revision: 7 $ * *****************************************************************************/ @@ -32,7 +31,7 @@ #include "acpi.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rsio") + MODULE_NAME ("rsio"); /*************************************************************************** @@ -256,7 +255,7 @@ */ temp16 = (u16) linked_list->data.io.min_base_address; - MOVE_UNALIGNED16_TO_16 (&temp16, buffer); + MOVE_UNALIGNED16_TO_16 (buffer, &temp16); buffer += 2; @@ -265,7 +264,7 @@ */ temp16 = (u16) linked_list->data.io.max_base_address; - MOVE_UNALIGNED16_TO_16 (&temp16, buffer); + MOVE_UNALIGNED16_TO_16 (buffer, &temp16); buffer += 2; @@ -337,7 +336,7 @@ */ temp16 = (u16) linked_list->data.fixed_io.base_address; - MOVE_UNALIGNED16_TO_16 (&temp16, buffer); + MOVE_UNALIGNED16_TO_16 (buffer, &temp16); buffer += 2; diff -urN linux-2.4.0-test9/drivers/acpi/resources/rsirq.c linux-2.4.0-test9-lia/drivers/acpi/resources/rsirq.c --- linux-2.4.0-test9/drivers/acpi/resources/rsirq.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rsirq.c Thu Aug 24 18:16:02 2000 @@ -4,7 +4,6 @@ * Acpi_rs_irq_stream * Acpi_rs_extended_irq_resource * Acpi_rs_extended_irq_stream - * $Revision: 8 $ * *****************************************************************************/ @@ -30,7 +29,7 @@ #include "acpi.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rsirq") + MODULE_NAME ("rsirq"); /*************************************************************************** @@ -227,7 +226,7 @@ temp16 |= 0x1 << temp8; } - MOVE_UNALIGNED16_TO_16 (&temp16, buffer); + MOVE_UNALIGNED16_TO_16 (buffer, &temp16); buffer += 2; @@ -427,7 +426,7 @@ * Struct_size to the next 32-bit boundry. */ temp8 = (u8) (index + 1); - temp8 = (u8) ROUND_UP_TO_32_bITS (temp8); + temp8 = (u8) ROUND_UP_TO_32_BITS (temp8); } else { @@ -477,7 +476,7 @@ u16 *length_field; u8 temp8 = 0; u8 index; - NATIVE_CHAR *temp_pointer = NULL; + u8 *temp_pointer = NULL; /* @@ -534,10 +533,11 @@ * Resource Source Index and Resource Source are optional */ if (0 != linked_list->data.extended_irq.resource_source_string_length) { - *buffer = (u8) linked_list->data.extended_irq.resource_source_index; - buffer += 1; + temp8 = (u8) linked_list->data.extended_irq.resource_source_index; - temp_pointer = (NATIVE_CHAR *) buffer; + *buffer = temp8; + buffer += 1; + temp_pointer = buffer; /* * Copy the string diff -urN linux-2.4.0-test9/drivers/acpi/resources/rslist.c linux-2.4.0-test9-lia/drivers/acpi/resources/rslist.c --- linux-2.4.0-test9/drivers/acpi/resources/rslist.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rslist.c Wed Jul 5 11:23:13 2000 @@ -2,7 +2,6 @@ * * Module Name: rslist - Acpi_rs_byte_stream_to_list * Acpi_list_to_byte_stream - * $Revision: 6 $ * *****************************************************************************/ @@ -26,10 +25,10 @@ #include "acpi.h" -#include "acresrc.h" +#include "resource.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rslist") + MODULE_NAME ("rslist"); /*************************************************************************** @@ -54,7 +53,7 @@ u32 byte_stream_buffer_length, u8 **output_buffer) { - ACPI_STATUS status; + ACPI_STATUS status = AE_UNKNOWN_STATUS; u32 bytes_parsed = 0; u8 resource_type = 0; u32 bytes_consumed = 0; @@ -168,7 +167,7 @@ * If we get here, everything is out of sync, * so exit with an error */ - return (AE_AML_ERROR); + return (AE_ERROR); break; } } @@ -276,11 +275,11 @@ * If we get here, everything is out of sync, * so exit with an error */ - return (AE_AML_ERROR); + return (AE_ERROR); break; } /* switch */ - } /* end else */ + } /* if(Resource_type & 0x80) */ /* * Update the return value and counter @@ -297,15 +296,14 @@ */ *buffer += structure_size; - } /* end while */ + } /* while (Bytes_parsed < Byte_stream_buffer_length && + FALSE == End_tag_processed) */ /* * Check the reason for exiting the while loop */ - if (!(byte_stream_buffer_length == bytes_parsed) || - (TRUE != end_tag_processed)) - { - return (AE_AML_ERROR); + if (byte_stream_buffer_length != bytes_parsed || TRUE != end_tag_processed) { + return (AE_ERROR); } return (AE_OK); @@ -340,7 +338,7 @@ u32 byte_stream_size_needed, u8 **output_buffer) { - ACPI_STATUS status; + ACPI_STATUS status = AE_UNKNOWN_STATUS; u8 *buffer = *output_buffer; u32 bytes_consumed = 0; u8 done = FALSE; diff -urN linux-2.4.0-test9/drivers/acpi/resources/rsmemory.c linux-2.4.0-test9-lia/drivers/acpi/resources/rsmemory.c --- linux-2.4.0-test9/drivers/acpi/resources/rsmemory.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rsmemory.c Thu Aug 24 18:16:02 2000 @@ -6,7 +6,6 @@ * Acpi_rs_fixed_memory32_resource * Acpi_rs_memory32_range_stream * Acpi_rs_fixed_memory32_stream - * $Revision: 7 $ * *****************************************************************************/ @@ -32,7 +31,7 @@ #include "acpi.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rsmemory") + MODULE_NAME ("rsmemory"); /*************************************************************************** diff -urN linux-2.4.0-test9/drivers/acpi/resources/rsmisc.c linux-2.4.0-test9-lia/drivers/acpi/resources/rsmisc.c --- linux-2.4.0-test9/drivers/acpi/resources/rsmisc.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rsmisc.c Thu Aug 24 18:16:02 2000 @@ -8,7 +8,6 @@ * Acpi_rs_end_dependent_functions_resource * Acpi_rs_start_dependent_functions_stream * Acpi_rs_end_dependent_functions_stream - * $Revision: 7 $ * *****************************************************************************/ @@ -34,7 +33,7 @@ #include "acpi.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rsmisc") + MODULE_NAME ("rsmisc"); /*************************************************************************** @@ -243,7 +242,7 @@ * calculate the length of the vendor string and expand the * Struct_size to the next 32-bit boundry. */ - struct_size += ROUND_UP_TO_32_bITS (temp16); + struct_size += ROUND_UP_TO_32_BITS (temp16); /* * Set the Length parameter @@ -305,7 +304,7 @@ temp16 = (u16) linked_list->data.vendor_specific.length; - MOVE_UNALIGNED16_TO_16 (&temp16, buffer); + MOVE_UNALIGNED16_TO_16 (buffer, &temp16); buffer += 2; } @@ -405,7 +404,7 @@ temp8 & 0x03; if (3 == output_struct->data.start_dependent_functions.compatibility_priority) { - return (AE_AML_ERROR); + return (AE_ERROR); } /* @@ -415,7 +414,7 @@ (temp8 >> 2) & 0x03; if (3 == output_struct->data.start_dependent_functions.performance_robustness) { - return (AE_AML_ERROR); + return (AE_ERROR); } } diff -urN linux-2.4.0-test9/drivers/acpi/resources/rsutils.c linux-2.4.0-test9-lia/drivers/acpi/resources/rsutils.c --- linux-2.4.0-test9/drivers/acpi/resources/rsutils.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rsutils.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: rsutils - Utilities for the resource manager - * $Revision: 10 $ * *****************************************************************************/ @@ -25,19 +24,19 @@ #include "acpi.h" -#include "acnamesp.h" -#include "acresrc.h" +#include "namesp.h" +#include "resource.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rsutils") + MODULE_NAME ("rsutils"); /****************************************************************************** * * FUNCTION: Acpi_rs_get_prt_method_data * - * PARAMETERS: Handle - a handle to the containing object + * PARAMETERS: Device_handle - a handle to the containing object * Ret_buffer - a pointer to a buffer structure for the * results * @@ -56,20 +55,28 @@ ACPI_HANDLE handle, ACPI_BUFFER *ret_buffer) { - ACPI_OPERAND_OBJECT *ret_obj; + ACPI_OBJECT_INTERNAL *ret_obj; ACPI_STATUS status; - u32 buffer_space_needed; - + u32 buffer_space_needed = ret_buffer->length; - /* already validated params, so we won't repeat here */ - buffer_space_needed = ret_buffer->length; + /* + * Must have a valid handle and buffer, So we have to have a handle + * a return buffer structure and if there is a non-zero buffer length + * we also need a valid pointer in the buffer + */ + if ((!handle) || + (!ret_buffer) || + ((!ret_buffer->pointer) && (ret_buffer->length))) + { + return (AE_BAD_PARAMETER); + } /* * Execute the method, no parameters */ status = acpi_ns_evaluate_relative (handle, "_PRT", NULL, &ret_obj); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { return (status); } @@ -121,7 +128,7 @@ * * FUNCTION: Acpi_rs_get_crs_method_data * - * PARAMETERS: Handle - a handle to the containing object + * PARAMETERS: Device_handle - a handle to the containing object * Ret_buffer - a pointer to a buffer structure for the * results * @@ -140,18 +147,28 @@ ACPI_HANDLE handle, ACPI_BUFFER *ret_buffer) { - ACPI_OPERAND_OBJECT *ret_obj; + ACPI_OBJECT_INTERNAL *ret_obj; ACPI_STATUS status; u32 buffer_space_needed = ret_buffer->length; - /* already validated params, so we won't repeat here */ + /* + * Must have a valid handle and buffer, So we have to have a handle + * a return buffer structure and if there is a non-zero buffer length + * we also need a valid pointer in the buffer + */ + if ((!handle) || + (!ret_buffer) || + ((!ret_buffer->pointer) && (ret_buffer->length))) + { + return (AE_BAD_PARAMETER); + } /* * Execute the method, no parameters */ status = acpi_ns_evaluate_relative (handle, "_CRS", NULL, &ret_obj); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { return (status); } @@ -181,7 +198,9 @@ ret_buffer->pointer, &buffer_space_needed); - + if (AE_OK == status) { + acpi_rs_dump_resource_list((RESOURCE *)ret_buffer->pointer); + } /* * Tell the user how much of the buffer we have used or is needed @@ -204,7 +223,7 @@ * * FUNCTION: Acpi_rs_get_prs_method_data * - * PARAMETERS: Handle - a handle to the containing object + * PARAMETERS: Device_handle - a handle to the containing object * Ret_buffer - a pointer to a buffer structure for the * results * @@ -223,18 +242,28 @@ ACPI_HANDLE handle, ACPI_BUFFER *ret_buffer) { - ACPI_OPERAND_OBJECT *ret_obj; + ACPI_OBJECT_INTERNAL *ret_obj; ACPI_STATUS status; u32 buffer_space_needed = ret_buffer->length; - /* already validated params, so we won't repeat here */ + /* + * Must have a valid handle and buffer, So we have to have a handle + * a return buffer structure and if there is a non-zero buffer length + * we also need a valid pointer in the buffer + */ + if ((!handle) || + (!ret_buffer) || + ((!ret_buffer->pointer) && (ret_buffer->length))) + { + return (AE_BAD_PARAMETER); + } /* * Execute the method, no parameters */ status = acpi_ns_evaluate_relative (handle, "_PRS", NULL, &ret_obj); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { return (status); } @@ -285,7 +314,9 @@ * * FUNCTION: Acpi_rs_set_srs_method_data * - * PARAMETERS: Handle - a handle to the containing object + * PARAMETERS: Device_handle - a handle to the containing object + * *Method_name - Name of method to execute, If NULL, the + * handle is the object to execute * In_buffer - a pointer to a buffer structure of the * parameter * @@ -304,13 +335,22 @@ ACPI_HANDLE handle, ACPI_BUFFER *in_buffer) { - ACPI_OPERAND_OBJECT *params[2]; - ACPI_OPERAND_OBJECT param_obj; + ACPI_OBJECT_INTERNAL *params[2]; + ACPI_OBJECT_INTERNAL param_obj; ACPI_STATUS status; u8 *byte_stream = NULL; u32 buffer_size_needed = 0; - /* already validated params, so we won't repeat here */ + /* + * Must have a valid handle and buffer + */ + if ((!handle) || + (!in_buffer) || + (!in_buffer->pointer) || + (!in_buffer->length)) + { + return (AE_BAD_PARAMETER); + } /* * The In_buffer parameter will point to a linked list of @@ -350,8 +390,12 @@ byte_stream, &buffer_size_needed); - if (ACPI_FAILURE (status)) { - goto cleanup; + if(AE_OK != status) { + /* + * Failed the call + */ + acpi_cm_free (byte_stream); + return (status); } /* @@ -380,9 +424,6 @@ /* * Clean up and return the status from Acpi_ns_evaluate_relative */ - -cleanup: - acpi_cm_free (byte_stream); return (status); } diff -urN linux-2.4.0-test9/drivers/acpi/resources/rsxface.c linux-2.4.0-test9-lia/drivers/acpi/resources/rsxface.c --- linux-2.4.0-test9/drivers/acpi/resources/rsxface.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/resources/rsxface.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,6 @@ /****************************************************************************** * * Module Name: rsxface - Public interfaces to the ACPI subsystem - * $Revision: 7 $ * *****************************************************************************/ @@ -25,12 +24,12 @@ #include "acpi.h" -#include "acinterp.h" -#include "acnamesp.h" -#include "acresrc.h" +#include "interp.h" +#include "namesp.h" +#include "resource.h" #define _COMPONENT RESOURCE_MANAGER - MODULE_NAME ("rsxface") + MODULE_NAME ("rsxface"); /****************************************************************************** @@ -38,18 +37,19 @@ * FUNCTION: Acpi_get_irq_routing_table * * PARAMETERS: Device_handle - a handle to the Bus device we are querying - * Ret_buffer - a pointer to a buffer to receive the + * Out_buffer - a pointer to a buffer to receive the * current resources for the device + * Buffer_length - the number of bytes available in the buffer * * RETURN: Status - the status of the call * * DESCRIPTION: This function is called to get the IRQ routing table for a * specific bus. The caller must first acquire a handle for the * desired bus. The routine table is placed in the buffer pointed - * to by the Ret_buffer variable parameter. + * to by the Out_buffer variable parameter. * * If the function fails an appropriate status will be returned - * and the value of Ret_buffer is undefined. + * and the value of Out_buffer is undefined. * * This function attempts to execute the _PRT method contained in * the object indicated by the passed Device_handle. @@ -64,19 +64,6 @@ ACPI_STATUS status; - /* - * Must have a valid handle and buffer, So we have to have a handle - * and a return buffer structure, and if there is a non-zero buffer length - * we also need a valid pointer in the buffer. If it's a zero buffer length, - * we'll be returning the needed buffer size, so keep going. - */ - if ((!device_handle) || - (!ret_buffer) || - ((!ret_buffer->pointer) && (ret_buffer->length))) - { - return (AE_BAD_PARAMETER); - } - status = acpi_rs_get_prt_method_data (device_handle, ret_buffer); return (status); @@ -89,18 +76,19 @@ * * PARAMETERS: Device_handle - a handle to the device object for the * device we are querying - * Ret_buffer - a pointer to a buffer to receive the + * Out_buffer - a pointer to a buffer to receive the * current resources for the device + * Buffer_length - the number of bytes available in the buffer * * RETURN: Status - the status of the call * * DESCRIPTION: This function is called to get the current resources for a * specific device. The caller must first acquire a handle for * the desired device. The resource data is placed in the buffer - * pointed to by the Ret_buffer variable parameter. + * pointed to by the Out_buffer variable parameter. * * If the function fails an appropriate status will be returned - * and the value of Ret_buffer is undefined. + * and the value of Out_buffer is undefined. * * This function attempts to execute the _CRS method contained in * the object indicated by the passed Device_handle. @@ -115,19 +103,6 @@ ACPI_STATUS status; - /* - * Must have a valid handle and buffer, So we have to have a handle - * and a return buffer structure, and if there is a non-zero buffer length - * we also need a valid pointer in the buffer. If it's a zero buffer length, - * we'll be returning the needed buffer size, so keep going. - */ - if ((!device_handle) || - (!ret_buffer) || - ((ret_buffer->length) && (!ret_buffer->pointer))) - { - return (AE_BAD_PARAMETER); - } - status = acpi_rs_get_crs_method_data (device_handle, ret_buffer); return (status); @@ -140,18 +115,19 @@ * * PARAMETERS: Device_handle - a handle to the device object for the * device we are querying - * Ret_buffer - a pointer to a buffer to receive the + * Out_buffer - a pointer to a buffer to receive the * resources for the device - * + * Buffer_length - the number of bytes available in the buffer + * * RETURN: Status - the status of the call * * DESCRIPTION: This function is called to get a list of the possible resources * for a specific device. The caller must first acquire a handle * for the desired device. The resource data is placed in the - * buffer pointed to by the Ret_buffer variable. + * buffer pointed to by the Out_buffer variable. * * If the function fails an appropriate status will be returned - * and the value of Ret_buffer is undefined. + * and the value of Out_buffer is undefined. * ******************************************************************************/ @@ -163,19 +139,6 @@ ACPI_STATUS status; - /* - * Must have a valid handle and buffer, So we have to have a handle - * and a return buffer structure, and if there is a non-zero buffer length - * we also need a valid pointer in the buffer. If it's a zero buffer length, - * we'll be returning the needed buffer size, so keep going. - */ - if ((!device_handle) || - (!ret_buffer) || - ((ret_buffer->length) && (!ret_buffer->pointer))) - { - return (AE_BAD_PARAMETER); - } - status = acpi_rs_get_prs_method_data (device_handle, ret_buffer); return (status); @@ -188,7 +151,7 @@ * * PARAMETERS: Device_handle - a handle to the device object for the * device we are changing the resources of - * In_buffer - a pointer to a buffer containing the + * Out_buffer - a pointer to a buffer containing the * resources to be set for the device * * RETURN: Status - the status of the call @@ -207,17 +170,6 @@ { ACPI_STATUS status; - - /* - * Must have a valid handle and buffer - */ - if ((!device_handle) || - (!in_buffer) || - (!in_buffer->pointer) || - (!in_buffer->length)) - { - return (AE_BAD_PARAMETER); - } status = acpi_rs_set_srs_method_data (device_handle, in_buffer); diff -urN linux-2.4.0-test9/drivers/acpi/sys.c linux-2.4.0-test9-lia/drivers/acpi/sys.c --- linux-2.4.0-test9/drivers/acpi/sys.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/sys.c Thu Jul 13 09:39:49 2000 @@ -24,9 +24,6 @@ #include "acpi.h" #include "driver.h" -#define _COMPONENT OS_DEPENDENT - MODULE_NAME ("sys") - #define ACPI_SLP_TYP(typa, typb) (((int)(typa) << 8) | (int)(typb)) #define ACPI_SLP_TYPA(value) \ ((((value) >> 8) << ACPI_SLP_TYP_SHIFT) & ACPI_SLP_TYP_MASK) diff -urN linux-2.4.0-test9/drivers/acpi/table.c linux-2.4.0-test9-lia/drivers/acpi/table.c --- linux-2.4.0-test9/drivers/acpi/table.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/table.c Wed Dec 31 16:00:00 1969 @@ -1,306 +0,0 @@ -/* - * tables.c - ACPI tables, chipset, and errata handling - * - * Copyright (C) 2000 Andrew Henroid - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include "acpi.h" -#include "driver.h" - -#define _COMPONENT OS_DEPENDENT - MODULE_NAME ("tables") - -struct acpi_facp acpi_facp; - -#define ACPI_DUMMY_CHECKSUM 9 -#define ACPI_DUMMY_PBLK 51 - -static u8 acpi_dummy_dsdt[] = -{ - 0x44, 0x53, 0x44, 0x54, // "DSDT" - 0x38, 0x00, 0x00, 0x00, // length - 0x01, // revision - 0x00, // checksum - 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x00, // "LINUX" - 0x44, 0x55, 0x4d, 0x4d, 0x59, 0x00, 0x00, 0x00, // "DUMMY" - 0x01, 0x00, 0x00, 0x00, // OEM rev - 0x4c, 0x4e, 0x55, 0x58, // "LNUX" - 0x01, 0x00, 0x00, 0x00, // creator rev - 0x10, // Scope - 0x13, // PkgLength - 0x5c, 0x5f, 0x50, 0x52, 0x5f, // \_PR_ - 0x5b, 0x83, // Processor - 0x0b, // PkgLength - 0x43, 0x50, 0x55, 0x30, // CPU0 - 0x00, // ID - 0x00, 0x00, 0x00, 0x00, // PBLK - 0x06 // PBLK size -}; - -/* - * Calculate and set ACPI table checksum - */ -static void -acpi_set_checksum(u8 *table, int size) -{ - int i, sum = 0; - for (i = 0; i < size; i++) - sum += (int) table[i]; - sum = (0x100 - ((sum - table[ACPI_DUMMY_CHECKSUM]) & 0xff)); - table[ACPI_DUMMY_CHECKSUM] = sum; -} - -/* - * Init PIIX4 device, create a fake FACP - */ -static int -acpi_init_piix4(struct pci_dev *dev) -{ - u32 base, pblk; - u16 cmd; - u8 pmregmisc; - - pci_read_config_word(dev, PCI_COMMAND, &cmd); - if (!(cmd & PCI_COMMAND_IO)) - return -ENODEV; - - pci_read_config_byte(dev, ACPI_PIIX4_PMREGMISC, &pmregmisc); - if (!(pmregmisc & ACPI_PIIX4_PMIOSE)) - return -ENODEV; - - base = pci_resource_start (dev, PCI_BRIDGE_RESOURCES); - if (!base) - return -ENODEV; - - printk(KERN_INFO "ACPI: found \"%s\" at 0x%04x\n", dev->name, base); - - memset(&acpi_facp, 0, sizeof(acpi_facp)); - acpi_facp.hdr.signature = ACPI_FACP_SIG; - acpi_facp.hdr.length = sizeof(acpi_facp); - acpi_facp.int_model = ACPI_PIIX4_INT_MODEL; - acpi_facp.sci_int = ACPI_PIIX4_SCI_INT; - acpi_facp.smi_cmd = ACPI_PIIX4_SMI_CMD; - acpi_facp.acpi_enable = ACPI_PIIX4_ACPI_ENABLE; - acpi_facp.acpi_disable = ACPI_PIIX4_ACPI_DISABLE; - acpi_facp.s4bios_req = ACPI_PIIX4_S4BIOS_REQ; - acpi_facp.pm1a_evt = base + ACPI_PIIX4_PM1_EVT; - acpi_facp.pm1a_cnt = base + ACPI_PIIX4_PM1_CNT; - acpi_facp.pm2_cnt = ACPI_PIIX4_PM2_CNT; - acpi_facp.pm_tmr = base + ACPI_PIIX4_PM_TMR; - acpi_facp.gpe0 = base + ACPI_PIIX4_GPE0; - acpi_facp.pm1_evt_len = ACPI_PIIX4_PM1_EVT_LEN; - acpi_facp.pm1_cnt_len = ACPI_PIIX4_PM1_CNT_LEN; - acpi_facp.pm2_cnt_len = ACPI_PIIX4_PM2_CNT_LEN; - acpi_facp.pm_tm_len = ACPI_PIIX4_PM_TM_LEN; - acpi_facp.gpe0_len = ACPI_PIIX4_GPE0_LEN; - acpi_facp.p_lvl2_lat = (__u16) ACPI_INFINITE_LAT; - acpi_facp.p_lvl3_lat = (__u16) ACPI_INFINITE_LAT; - - acpi_set_checksum((u8*) &acpi_facp, sizeof(acpi_facp)); - acpi_load_table((ACPI_TABLE_HEADER*) &acpi_facp); - - pblk = base + ACPI_PIIX4_P_BLK; - memcpy(acpi_dummy_dsdt + ACPI_DUMMY_PBLK, &pblk, sizeof(pblk)); - acpi_set_checksum(acpi_dummy_dsdt, sizeof(acpi_dummy_dsdt)); - acpi_load_table((ACPI_TABLE_HEADER*) acpi_dummy_dsdt); - - return 0; -} - -/* - * Init VIA ACPI device and create a fake FACP - */ -static int -acpi_init_via(struct pci_dev *dev) -{ - u32 base, pblk; - u8 tmp, irq; - - pci_read_config_byte(dev, 0x41, &tmp); - if (!(tmp & 0x80)) - return -ENODEV; - - base = pci_resource_start(dev, PCI_BRIDGE_RESOURCES); - if (!base) { - base = pci_resource_start(dev, PCI_BASE_ADDRESS_4); - if (!base) - return -ENODEV; - } - - pci_read_config_byte(dev, 0x42, &irq); - - printk(KERN_INFO "ACPI: found \"%s\" at 0x%04x\n", dev->name, base); - - memset(&acpi_facp, 0, sizeof(acpi_facp)); - acpi_facp.hdr.signature = ACPI_FACP_SIG; - acpi_facp.hdr.length = sizeof(acpi_facp); - acpi_facp.int_model = ACPI_VIA_INT_MODEL; - acpi_facp.sci_int = irq; - acpi_facp.smi_cmd = base + ACPI_VIA_SMI_CMD; - acpi_facp.acpi_enable = ACPI_VIA_ACPI_ENABLE; - acpi_facp.acpi_disable = ACPI_VIA_ACPI_DISABLE; - acpi_facp.pm1a_evt = base + ACPI_VIA_PM1_EVT; - acpi_facp.pm1a_cnt = base + ACPI_VIA_PM1_CNT; - acpi_facp.pm_tmr = base + ACPI_VIA_PM_TMR; - acpi_facp.gpe0 = base + ACPI_VIA_GPE0; - - acpi_facp.pm1_evt_len = ACPI_VIA_PM1_EVT_LEN; - acpi_facp.pm1_cnt_len = ACPI_VIA_PM1_CNT_LEN; - acpi_facp.pm_tm_len = ACPI_VIA_PM_TM_LEN; - acpi_facp.gpe0_len = ACPI_VIA_GPE0_LEN; - acpi_facp.p_lvl2_lat = (__u16) ACPI_INFINITE_LAT; - acpi_facp.p_lvl3_lat = (__u16) ACPI_INFINITE_LAT; - - acpi_facp.duty_offset = ACPI_VIA_DUTY_OFFSET; - acpi_facp.duty_width = ACPI_VIA_DUTY_WIDTH; - - acpi_facp.day_alarm = ACPI_VIA_DAY_ALARM; - acpi_facp.mon_alarm = ACPI_VIA_MON_ALARM; - acpi_facp.century = ACPI_VIA_CENTURY; - - acpi_set_checksum((u8*) &acpi_facp, sizeof(acpi_facp)); - acpi_load_table((ACPI_TABLE_HEADER*) &acpi_facp); - - pblk = base + ACPI_VIA_P_BLK; - memcpy(acpi_dummy_dsdt + ACPI_DUMMY_PBLK, &pblk, sizeof(pblk)); - acpi_set_checksum(acpi_dummy_dsdt, sizeof(acpi_dummy_dsdt)); - acpi_load_table((ACPI_TABLE_HEADER*) acpi_dummy_dsdt); - - return 0; -} - -typedef enum -{ - CH_UNKNOWN = 0, - CH_INTEL_PIIX4, - CH_VIA_586, - CH_VIA_686A, -} acpi_chip_t; - -/* indexed by value of each enum in acpi_chip_t */ -const static struct -{ - int (*chip_init)(struct pci_dev *dev); -} acpi_chip_info[] = -{ - {NULL,}, - {acpi_init_piix4}, - {acpi_init_via}, - {acpi_init_via}, -}; - -static struct pci_device_id acpi_pci_tbl[] = -{ - {0x8086, 0x7113, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_INTEL_PIIX4}, - {0x1106, 0x3040, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_VIA_586}, - {0x1106, 0x3057, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_VIA_686A}, - {0,} /* terminate list */ -}; - -static int -acpi_probe(struct pci_dev *dev, const struct pci_device_id *id) -{ - return acpi_chip_info[id->driver_data].chip_init(dev); -} - -static struct pci_driver acpi_driver = -{ - name: "acpi", - id_table: acpi_pci_tbl, - probe: acpi_probe, -}; -static int acpi_driver_registered = 0; - -/* - * Locate a known ACPI chipset - */ -static int -acpi_find_chipset(void) -{ - if (pci_register_driver(&acpi_driver) < 1) - return -ENODEV; - acpi_driver_registered = 1; - return 0; -} - -/* - * Fetch the FACP information - */ -static int -acpi_fetch_facp(void) -{ - ACPI_BUFFER buffer; - - memset(&acpi_facp, 0, sizeof(acpi_facp)); - buffer.pointer = &acpi_facp; - buffer.length = sizeof(acpi_facp); - if (!ACPI_SUCCESS(acpi_get_table(ACPI_TABLE_FACP, 1, &buffer))) { - printk(KERN_ERR "ACPI: missing FACP\n"); - return -ENODEV; - } - - if (acpi_facp.p_lvl2_lat - && acpi_facp.p_lvl2_lat <= ACPI_MAX_P_LVL2_LAT) { - acpi_c2_exit_latency - = ACPI_uS_TO_TMR_TICKS(acpi_facp.p_lvl2_lat); - acpi_c2_enter_latency - = ACPI_uS_TO_TMR_TICKS(ACPI_TMR_HZ / 1000); - } - if (acpi_facp.p_lvl3_lat - && acpi_facp.p_lvl3_lat <= ACPI_MAX_P_LVL3_LAT) { - acpi_c3_exit_latency - = ACPI_uS_TO_TMR_TICKS(acpi_facp.p_lvl3_lat); - acpi_c3_enter_latency - = ACPI_uS_TO_TMR_TICKS(acpi_facp.p_lvl3_lat * 5); - } - - return 0; -} - -/* - * Find and load ACPI tables - */ -int -acpi_load_tables(void) -{ - if (ACPI_SUCCESS(acpi_load_firmware_tables())) - { - printk(KERN_INFO "ACPI: support found\n"); - } - else if (acpi_find_chipset()) { - acpi_terminate(); - return -1; - } - - if (acpi_fetch_facp()) { - acpi_terminate(); - return -1; - } - - if (!ACPI_SUCCESS(acpi_load_namespace())) { - printk(KERN_ERR "ACPI: namespace load failed\n"); - acpi_terminate(); - return -1; - } - - return 0; -} diff -urN linux-2.4.0-test9/drivers/acpi/tables/Makefile linux-2.4.0-test9-lia/drivers/acpi/tables/Makefile --- linux-2.4.0-test9/drivers/acpi/tables/Makefile Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/tables/Makefile Wed Dec 31 16:00:00 1969 @@ -1,28 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -SUB_DIRS := -MOD_SUB_DIRS := $(SUB_DIRS) -MOD_IN_SUB_DIRS := -ALL_SUB_DIRS := $(SUB_DIRS) - -O_TARGET := ../$(shell basename `pwd`).o -O_OBJS := -M_OBJS := - -ACPI_OBJS := $(patsubst %.c,%.o,$(wildcard *.c)) - -EXTRA_CFLAGS += -I../include - -EXTRA_CFLAGS += $(ACPI_CFLAGS) - -# if the interpreter is used, it overrides arch/i386/kernel/acpi.c -ifeq ($(CONFIG_ACPI_INTERPRETER),y) - O_OBJS := $(ACPI_OBJS) -endif - -include $(TOPDIR)/Rules.make - -clean: - $(RM) *.o diff -urN linux-2.4.0-test9/drivers/acpi/tables/tbget.c linux-2.4.0-test9-lia/drivers/acpi/tables/tbget.c --- linux-2.4.0-test9/drivers/acpi/tables/tbget.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/tables/tbget.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: tbget - ACPI Table get* routines - * $Revision: 22 $ * *****************************************************************************/ @@ -25,12 +25,12 @@ #include "acpi.h" -#include "achware.h" -#include "actables.h" +#include "hardware.h" +#include "tables.h" #define _COMPONENT TABLE_MANAGER - MODULE_NAME ("tbget") + MODULE_NAME ("tbget"); /******************************************************************************* @@ -90,15 +90,10 @@ return (AE_NOT_EXIST); } - /* Walk the list to get the desired table - * Since the if (Instance == 1) check above checked for the - * first table, setting Table_desc equal to the .Next member - * is actually pointing to the second table. Therefore, we - * need to walk from the 2nd table until we reach the Instance - * that the user is looking for and return its table pointer. - */ + /* Walk the list to get the table */ + table_desc = acpi_gbl_acpi_tables[table_type].next; - for (i = 2; i < instance; i++) { + for (i = 1; i < acpi_gbl_acpi_tables[table_type].count; i++) { table_desc = table_desc->next; } @@ -115,8 +110,8 @@ * FUNCTION: Acpi_tb_get_table * * PARAMETERS: Physical_address - Physical address of table to retrieve - * *Buffer_ptr - If Buffer_ptr is valid, read data from - * buffer rather than searching memory + * *Buffer_ptr - If == NULL, read data from buffer + * rather than searching memory * *Table_info - Where the table info is returned * * RETURN: Status @@ -128,7 +123,7 @@ ACPI_STATUS acpi_tb_get_table ( void *physical_address, - ACPI_TABLE_HEADER *buffer_ptr, + char *buffer_ptr, ACPI_TABLE_DESC *table_info) { ACPI_TABLE_HEADER *table_header = NULL; @@ -148,7 +143,7 @@ * Getting data from a buffer, not BIOS tables */ - table_header = buffer_ptr; + table_header = (ACPI_TABLE_HEADER *) buffer_ptr; status = acpi_tb_validate_table_header (table_header); if (ACPI_FAILURE (status)) { /* Table failed verification, map all errors to BAD_DATA */ @@ -165,7 +160,7 @@ /* Copy the entire table (including header) to the local buffer */ - size = table_header->length; + size = (ACPI_SIZE) table_header->length; MEMCPY (full_table, buffer_ptr, size); /* Save allocation type */ @@ -221,7 +216,7 @@ ACPI_STATUS acpi_tb_get_all_tables ( u32 number_of_tables, - ACPI_TABLE_HEADER *table_ptr) + char *table_ptr) { ACPI_STATUS status = AE_OK; u32 index; diff -urN linux-2.4.0-test9/drivers/acpi/tables/tbinstal.c linux-2.4.0-test9-lia/drivers/acpi/tables/tbinstal.c --- linux-2.4.0-test9/drivers/acpi/tables/tbinstal.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/tables/tbinstal.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: tbinstal - ACPI table installation and removal - * $Revision: 29 $ * *****************************************************************************/ @@ -25,12 +25,12 @@ #include "acpi.h" -#include "achware.h" -#include "actables.h" +#include "hardware.h" +#include "tables.h" #define _COMPONENT TABLE_MANAGER - MODULE_NAME ("tbinstal") + MODULE_NAME ("tbinstal"); /******************************************************************************* @@ -50,9 +50,11 @@ ACPI_STATUS acpi_tb_install_table ( - ACPI_TABLE_HEADER *table_ptr, + char *table_ptr, ACPI_TABLE_DESC *table_info) { + ACPI_TABLE_TYPE table_type; + ACPI_TABLE_HEADER *table_header; ACPI_STATUS status; @@ -66,6 +68,11 @@ return (status); } + /* Table type is returned by Recognize_table */ + + table_type = table_info->type; + table_header = table_info->pointer; + /* Lock tables while installing */ acpi_cm_acquire_mutex (ACPI_MTX_TABLES); @@ -73,9 +80,12 @@ /* Install the table into the global data structure */ status = acpi_tb_init_table_descriptor (table_info->type, table_info); + if (ACPI_FAILURE (status)) { + return (status); + } acpi_cm_release_mutex (ACPI_MTX_TABLES); - return (status); + return (AE_OK); } @@ -102,7 +112,7 @@ ACPI_STATUS acpi_tb_recognize_table ( - ACPI_TABLE_HEADER *table_ptr, + char *table_ptr, ACPI_TABLE_DESC *table_info) { ACPI_TABLE_HEADER *table_header; @@ -205,10 +215,9 @@ * the table are allowed. This includes SSDT and PSDTs. */ - if (IS_SINGLE_TABLE (acpi_gbl_acpi_table_data[table_type].flags)) { + if (acpi_gbl_acpi_table_data[table_type].flags == ACPI_TABLE_SINGLE) { /* - * Only one table allowed, and a table has alread been installed - * at this location, so return an error. + * Only one table allowed, just update the list head */ if (list_head->pointer) { @@ -240,7 +249,7 @@ /* Update new entry */ table_desc->prev = list_head->prev; - table_desc->next = list_head; + table_desc->next = (ACPI_TABLE_DESC *) list_head; /* Update list head */ @@ -299,7 +308,7 @@ void acpi_tb_delete_acpi_tables (void) { - ACPI_TABLE_TYPE type; + u32 i; /* @@ -307,8 +316,8 @@ * Memory can either be mapped or allocated */ - for (type = 0; type < ACPI_TABLE_MAX; type++) { - acpi_tb_delete_acpi_table (type); + for (i = 0; i < ACPI_TABLE_MAX; i++) { + acpi_tb_delete_acpi_table (i); } } @@ -393,46 +402,6 @@ /******************************************************************************* * - * FUNCTION: Acpi_tb_free_acpi_tables_of_type - * - * PARAMETERS: Table_info - A table info struct - * - * RETURN: None. - * - * DESCRIPTION: Free the memory associated with an internal ACPI table - * Table mutex should be locked. - * - ******************************************************************************/ - -void -acpi_tb_free_acpi_tables_of_type ( - ACPI_TABLE_DESC *list_head) -{ - ACPI_TABLE_DESC *table_desc; - u32 count; - u32 i; - - - /* Get the head of the list */ - - table_desc = list_head; - count = list_head->count; - - /* - * Walk the entire list, deleting both the allocated tables - * and the table descriptors - */ - - for (i = 0; i < count; i++) { - table_desc = acpi_tb_delete_single_table (table_desc); - } - - return; -} - - -/******************************************************************************* - * * FUNCTION: Acpi_tb_delete_single_table * * PARAMETERS: Table_info - A table info struct @@ -519,6 +488,46 @@ return (next_desc); +} + + +/******************************************************************************* + * + * FUNCTION: Acpi_tb_free_acpi_tables_of_type + * + * PARAMETERS: Table_info - A table info struct + * + * RETURN: None. + * + * DESCRIPTION: Free the memory associated with an internal ACPI table + * Table mutex should be locked. + * + ******************************************************************************/ + +void +acpi_tb_free_acpi_tables_of_type ( + ACPI_TABLE_DESC *list_head) +{ + ACPI_TABLE_DESC *table_desc; + u32 count; + u32 i; + + + /* Get the head of the list */ + + table_desc = list_head; + count = list_head->count; + + /* + * Walk the entire list, deleting both the allocated tables + * and the table descriptors + */ + + for (i = 0; i < count; i++) { + table_desc = acpi_tb_delete_single_table (table_desc); + } + + return; } diff -urN linux-2.4.0-test9/drivers/acpi/tables/tbtable.c linux-2.4.0-test9-lia/drivers/acpi/tables/tbtable.c --- linux-2.4.0-test9/drivers/acpi/tables/tbtable.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/tables/tbtable.c Thu Aug 24 18:16:02 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: tbtable - ACPI tables: FACP, FACS, and RSDP utilities - * $Revision: 24 $ * *****************************************************************************/ @@ -25,12 +25,12 @@ #include "acpi.h" -#include "achware.h" -#include "actables.h" +#include "hardware.h" +#include "tables.h" #define _COMPONENT TABLE_MANAGER - MODULE_NAME ("tbtable") + MODULE_NAME ("tbtable"); /******************************************************************************* @@ -38,6 +38,7 @@ * FUNCTION: Acpi_tb_get_table_rsdt * * PARAMETERS: Number_of_tables - Where the table count is placed + * Table_ptr - Input buffer pointer, optional * * RETURN: Status * @@ -84,15 +85,15 @@ REPORT_ERROR ("Invalid signature where RSDP indicates RSDT should be located"); } - REPORT_ERROR ("Unable to locate RSDT"); - - return (status); } /* Always delete the RSDP mapping */ acpi_tb_delete_acpi_table (ACPI_TABLE_RSDP); + if (ACPI_FAILURE (status)) { + return (status); + } /* Save the table pointers and allocation info */ @@ -108,16 +109,10 @@ status = acpi_tb_verify_table_checksum ((ACPI_TABLE_HEADER *) acpi_gbl_RSDT); - /* - * Determine the number of tables pointed to by the RSDT. - * This is defined by the ACPI Specification to be the number of - * pointers contained within the RSDT. The size of the pointers - * is architecture-dependent. - */ - - *number_of_tables = ((acpi_gbl_RSDT->header.length - - sizeof (ACPI_TABLE_HEADER)) / sizeof (void *)); + /* Determine the number of tables pointed to by the RSDT */ + *number_of_tables = (s32) (acpi_gbl_RSDT->header.length - + sizeof (ACPI_TABLE_HEADER)) / sizeof(void *); return (status); } @@ -136,13 +131,13 @@ * ******************************************************************************/ -u8 * +char * acpi_tb_scan_memory_for_rsdp ( - u8 *start_address, + char *start_address, u32 length) { u32 offset; - u8 *mem_rover; + char *mem_rover; /* Search from given start addr for the requested length */ @@ -154,19 +149,19 @@ /* The signature and checksum must both be correct */ - if (STRNCMP ((NATIVE_CHAR *) mem_rover, RSDP_SIG, sizeof (RSDP_SIG)-1) == 0 && + if (STRNCMP (mem_rover, RSDP_SIG, sizeof (RSDP_SIG)-1) == 0 && acpi_tb_checksum (mem_rover, sizeof (ROOT_SYSTEM_DESCRIPTOR_POINTER)) == 0) { /* If so, we have found the RSDP */ - return (mem_rover); + return mem_rover; } } /* Searched entire block, no RSDP was found */ - return (NULL); + return NULL; } @@ -193,8 +188,8 @@ acpi_tb_find_rsdp ( ACPI_TABLE_DESC *table_info) { - u8 *table_ptr; - u8 *mem_rover; + char *table_ptr; + char *mem_rover; ACPI_STATUS status = AE_OK; if (acpi_gbl_acpi_init_data.RSDP_physical_address) { @@ -218,9 +213,9 @@ * The signature and checksum must both be correct */ - if (STRNCMP ((NATIVE_CHAR *) table_ptr, RSDP_SIG, sizeof (RSDP_SIG)-1) != 0) { + if (STRNCMP (table_ptr, RSDP_SIG, sizeof (RSDP_SIG)-1) != 0) { /* Nope, BAD Signature */ - acpi_os_unmap_memory (table_ptr, sizeof (ROOT_SYSTEM_DESCRIPTOR_POINTER)); + return (AE_BAD_SIGNATURE); } @@ -230,7 +225,7 @@ sizeof (ROOT_SYSTEM_DESCRIPTOR_POINTER)) != 0) { /* Nope, BAD Checksum */ - acpi_os_unmap_memory (table_ptr, sizeof (ROOT_SYSTEM_DESCRIPTOR_POINTER)); + return (AE_BAD_CHECKSUM); } @@ -313,12 +308,12 @@ } -/****************************************************************************** +/******************************************************************************* * * FUNCTION: Acpi_tb_get_table_facs * - * PARAMETERS: *Buffer_ptr - If Buffer_ptr is valid, read data from - * buffer rather than searching memory + * PARAMETERS: *Buffer_ptr - If == NULL, read data from buffer + * rather than searching memory * *Table_info - Where the table info is returned * * RETURN: Status @@ -328,11 +323,11 @@ * correctly initialized. The value of FACP->Firmware_ctrl * into a far pointer which is returned. * - *****************************************************************************/ + ******************************************************************************/ ACPI_STATUS acpi_tb_get_table_facs ( - ACPI_TABLE_HEADER *buffer_ptr, + char *buffer_ptr, ACPI_TABLE_DESC *table_info) { void *table_ptr = NULL; diff -urN linux-2.4.0-test9/drivers/acpi/tables/tbutils.c linux-2.4.0-test9-lia/drivers/acpi/tables/tbutils.c --- linux-2.4.0-test9/drivers/acpi/tables/tbutils.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/tables/tbutils.c Wed Jul 5 11:23:13 2000 @@ -1,7 +1,7 @@ + /****************************************************************************** * * Module Name: tbutils - Table manipulation utilities - * $Revision: 26 $ * *****************************************************************************/ @@ -25,24 +25,23 @@ #include "acpi.h" -#include "actables.h" -#include "acinterp.h" +#include "tables.h" +#include "interp.h" #define _COMPONENT TABLE_MANAGER - MODULE_NAME ("tbutils") + MODULE_NAME ("tbutils"); /******************************************************************************* * - * FUNCTION: Acpi_tb_handle_to_object + * FUNCTION: Acpi_tb_system_table_pointer * - * PARAMETERS: Table_id - Id for which the function is searching - * Table_desc - Pointer to return the matching table - * descriptor. + * PARAMETERS: *Where - Pointer to be examined * - * RETURN: Search the tables to find one with a matching Table_id and - * return a pointer to that table descriptor. + * RETURN: TRUE if Where is within the AML stream (in one of the ACPI + * system tables such as the DSDT or an SSDT.) + * FALSE otherwise * ******************************************************************************/ @@ -61,7 +60,7 @@ { if (list_head->table_id == table_id) { *table_desc = list_head; - return (AE_OK); + return AE_OK; } list_head = list_head->next; @@ -70,7 +69,7 @@ } - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } @@ -178,7 +177,7 @@ /* Verify that this is a valid address */ if (!acpi_os_readable (table_header, sizeof (ACPI_TABLE_HEADER))) { - return (AE_BAD_ADDRESS); + return AE_BAD_ADDRESS; } @@ -187,7 +186,7 @@ MOVE_UNALIGNED32_TO_32 (&signature, &table_header->signature); if (!acpi_cm_valid_acpi_name (signature)) { REPORT_WARNING ("Invalid table signature found"); - return (AE_BAD_SIGNATURE); + return AE_BAD_SIGNATURE; } @@ -195,10 +194,10 @@ if (table_header->length < sizeof (ACPI_TABLE_HEADER)) { REPORT_WARNING ("Invalid table header length found"); - return (AE_BAD_HEADER); + return AE_BAD_HEADER; } - return (AE_OK); + return AE_OK; } @@ -237,7 +236,7 @@ status = acpi_os_map_memory (physical_address, sizeof (ACPI_TABLE_HEADER), (void **) &table); if (ACPI_FAILURE (status)) { - return (status); + return status; } /* Extract the full table length before we delete the mapping */ @@ -258,7 +257,7 @@ /* Exit if header invalid */ if (ACPI_FAILURE (status)) { - return (status); + return status; } } @@ -267,13 +266,13 @@ status = acpi_os_map_memory (physical_address, table_size, (void **) &table); if (ACPI_FAILURE (status)) { - return (status); + return status; } *size = table_size; *logical_address = table; - return (status); + return status; } @@ -347,7 +346,7 @@ } } - return (sum); + return sum; } diff -urN linux-2.4.0-test9/drivers/acpi/tables/tbxface.c linux-2.4.0-test9-lia/drivers/acpi/tables/tbxface.c --- linux-2.4.0-test9/drivers/acpi/tables/tbxface.c Wed Oct 4 16:53:12 2000 +++ linux-2.4.0-test9-lia/drivers/acpi/tables/tbxface.c Wed Jul 5 11:23:13 2000 @@ -1,8 +1,8 @@ + /****************************************************************************** * * Module Name: tbxface - Public interfaces to the ACPI subsystem * ACPI table oriented interfaces - * $Revision: 24 $ * *****************************************************************************/ @@ -26,13 +26,13 @@ #include "acpi.h" -#include "acnamesp.h" -#include "acinterp.h" -#include "actables.h" +#include "namesp.h" +#include "interp.h" +#include "tables.h" #define _COMPONENT TABLE_MANAGER - MODULE_NAME ("tbxface") + MODULE_NAME ("tbxface"); /******************************************************************************* @@ -57,7 +57,7 @@ /* Get the RSDT first */ status = acpi_tb_get_table_rsdt (&number_of_tables); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { goto error_exit; } @@ -65,7 +65,7 @@ /* Now get the rest of the tables */ status = acpi_tb_get_all_tables (number_of_tables, NULL); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { goto error_exit; } @@ -105,12 +105,12 @@ if (!table_ptr) { - return (AE_BAD_PARAMETER); + return AE_BAD_PARAMETER; } /* Copy the table to a local buffer */ - status = acpi_tb_get_table (NULL, table_ptr, &table_info); + status = acpi_tb_get_table (NULL, ((char *) table_ptr), &table_info); if (ACPI_FAILURE (status)) { return (status); } @@ -157,12 +157,7 @@ list_head = &acpi_gbl_acpi_tables[table_type]; do { - /* - * Delete all namespace entries owned by this table. Note that these - * entries can appear anywhere in the namespace by virtue of the AML - * "Scope" operator. Thus, we need to track ownership by an ID, not - * simply a position within the hierarchy - */ + /* Delete the entire namespace under this table NTE */ acpi_ns_delete_namespace_by_owner (list_head->table_id); @@ -210,6 +205,8 @@ ACPI_STATUS status; + status = AE_OK; + if ((instance == 0) || (table_type == ACPI_TABLE_RSDP) || (!out_table_header)) @@ -220,7 +217,7 @@ /* Check the table type and instance */ if ((table_type > ACPI_TABLE_MAX) || - (IS_SINGLE_TABLE (acpi_gbl_acpi_table_data[table_type].flags) && + (acpi_gbl_acpi_table_data[table_type].flags == ACPI_TABLE_SINGLE && instance > 1)) { return (AE_BAD_PARAMETER); @@ -230,7 +227,7 @@ /* Get a pointer to the entire table */ status = acpi_tb_get_table_ptr (table_type, instance, &tbl_ptr); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { return (status); } @@ -288,6 +285,8 @@ u32 ret_buf_len; + status = AE_OK; + /* * Must have a buffer */ @@ -302,7 +301,7 @@ /* Check the table type and instance */ if ((table_type > ACPI_TABLE_MAX) || - (IS_SINGLE_TABLE (acpi_gbl_acpi_table_data[table_type].flags) && + (acpi_gbl_acpi_table_data[table_type].flags == ACPI_TABLE_SINGLE && instance > 1)) { return (AE_BAD_PARAMETER); @@ -312,13 +311,12 @@ /* Get a pointer to the entire table */ status = acpi_tb_get_table_ptr (table_type, instance, &tbl_ptr); - if (ACPI_FAILURE (status)) { + if (status != AE_OK) { return (status); } /* - * Acpi_tb_get_table_ptr will return a NULL pointer if the - * table is not loaded. + * The function will return a NULL pointer if the table is not loaded */ if (tbl_ptr == NULL) { return (AE_NOT_EXIST); diff -urN linux-2.4.0-test9/drivers/acpi/tables.c linux-2.4.0-test9-lia/drivers/acpi/tables.c --- linux-2.4.0-test9/drivers/acpi/tables.c Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/acpi/tables.c Thu Jul 13 09:39:49 2000 @@ -0,0 +1,303 @@ +/* + * tables.c - ACPI tables, chipset, and errata handling + * + * Copyright (C) 2000 Andrew Henroid + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#include "acpi.h" +#include "driver.h" + +struct acpi_facp acpi_facp; + +#define ACPI_DUMMY_CHECKSUM 9 +#define ACPI_DUMMY_PBLK 51 + +static u8 acpi_dummy_dsdt[] = +{ + 0x44, 0x53, 0x44, 0x54, // "DSDT" + 0x38, 0x00, 0x00, 0x00, // length + 0x01, // revision + 0x00, // checksum + 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x00, // "LINUX" + 0x44, 0x55, 0x4d, 0x4d, 0x59, 0x00, 0x00, 0x00, // "DUMMY" + 0x01, 0x00, 0x00, 0x00, // OEM rev + 0x4c, 0x4e, 0x55, 0x58, // "LNUX" + 0x01, 0x00, 0x00, 0x00, // creator rev + 0x10, // Scope + 0x13, // PkgLength + 0x5c, 0x5f, 0x50, 0x52, 0x5f, // \_PR_ + 0x5b, 0x83, // Processor + 0x0b, // PkgLength + 0x43, 0x50, 0x55, 0x30, // CPU0 + 0x00, // ID + 0x00, 0x00, 0x00, 0x00, // PBLK + 0x06 // PBLK size +}; + +/* + * Calculate and set ACPI table checksum + */ +static void +acpi_set_checksum(u8 *table, int size) +{ + int i, sum = 0; + for (i = 0; i < size; i++) + sum += (int) table[i]; + sum = (0x100 - ((sum - table[ACPI_DUMMY_CHECKSUM]) & 0xff)); + table[ACPI_DUMMY_CHECKSUM] = sum; +} + +/* + * Init PIIX4 device, create a fake FACP + */ +static int +acpi_init_piix4(struct pci_dev *dev) +{ + u32 base, pblk; + u16 cmd; + u8 pmregmisc; + + pci_read_config_word(dev, PCI_COMMAND, &cmd); + if (!(cmd & PCI_COMMAND_IO)) + return -ENODEV; + + pci_read_config_byte(dev, ACPI_PIIX4_PMREGMISC, &pmregmisc); + if (!(pmregmisc & ACPI_PIIX4_PMIOSE)) + return -ENODEV; + + base = pci_resource_start (dev, PCI_BRIDGE_RESOURCES); + if (!base) + return -ENODEV; + + printk(KERN_INFO "ACPI: found \"%s\" at 0x%04x\n", dev->name, base); + + memset(&acpi_facp, 0, sizeof(acpi_facp)); + acpi_facp.hdr.signature = ACPI_FACP_SIG; + acpi_facp.hdr.length = sizeof(acpi_facp); + acpi_facp.int_model = ACPI_PIIX4_INT_MODEL; + acpi_facp.sci_int = ACPI_PIIX4_SCI_INT; + acpi_facp.smi_cmd = ACPI_PIIX4_SMI_CMD; + acpi_facp.acpi_enable = ACPI_PIIX4_ACPI_ENABLE; + acpi_facp.acpi_disable = ACPI_PIIX4_ACPI_DISABLE; + acpi_facp.s4bios_req = ACPI_PIIX4_S4BIOS_REQ; + acpi_facp.pm1a_evt = base + ACPI_PIIX4_PM1_EVT; + acpi_facp.pm1a_cnt = base + ACPI_PIIX4_PM1_CNT; + acpi_facp.pm2_cnt = ACPI_PIIX4_PM2_CNT; + acpi_facp.pm_tmr = base + ACPI_PIIX4_PM_TMR; + acpi_facp.gpe0 = base + ACPI_PIIX4_GPE0; + acpi_facp.pm1_evt_len = ACPI_PIIX4_PM1_EVT_LEN; + acpi_facp.pm1_cnt_len = ACPI_PIIX4_PM1_CNT_LEN; + acpi_facp.pm2_cnt_len = ACPI_PIIX4_PM2_CNT_LEN; + acpi_facp.pm_tm_len = ACPI_PIIX4_PM_TM_LEN; + acpi_facp.gpe0_len = ACPI_PIIX4_GPE0_LEN; + acpi_facp.p_lvl2_lat = (__u16) ACPI_INFINITE_LAT; + acpi_facp.p_lvl3_lat = (__u16) ACPI_INFINITE_LAT; + + acpi_set_checksum((u8*) &acpi_facp, sizeof(acpi_facp)); + acpi_load_table((ACPI_TABLE_HEADER*) &acpi_facp); + + pblk = base + ACPI_PIIX4_P_BLK; + memcpy(acpi_dummy_dsdt + ACPI_DUMMY_PBLK, &pblk, sizeof(pblk)); + acpi_set_checksum(acpi_dummy_dsdt, sizeof(acpi_dummy_dsdt)); + acpi_load_table((ACPI_TABLE_HEADER*) acpi_dummy_dsdt); + + return 0; +} + +/* + * Init VIA ACPI device and create a fake FACP + */ +static int +acpi_init_via(struct pci_dev *dev) +{ + u32 base, pblk; + u8 tmp, irq; + + pci_read_config_byte(dev, 0x41, &tmp); + if (!(tmp & 0x80)) + return -ENODEV; + + base = pci_resource_start(dev, PCI_BRIDGE_RESOURCES); + if (!base) { + base = pci_resource_start(dev, PCI_BASE_ADDRESS_4); + if (!base) + return -ENODEV; + } + + pci_read_config_byte(dev, 0x42, &irq); + + printk(KERN_INFO "ACPI: found \"%s\" at 0x%04x\n", dev->name, base); + + memset(&acpi_facp, 0, sizeof(acpi_facp)); + acpi_facp.hdr.signature = ACPI_FACP_SIG; + acpi_facp.hdr.length = sizeof(acpi_facp); + acpi_facp.int_model = ACPI_VIA_INT_MODEL; + acpi_facp.sci_int = irq; + acpi_facp.smi_cmd = base + ACPI_VIA_SMI_CMD; + acpi_facp.acpi_enable = ACPI_VIA_ACPI_ENABLE; + acpi_facp.acpi_disable = ACPI_VIA_ACPI_DISABLE; + acpi_facp.pm1a_evt = base + ACPI_VIA_PM1_EVT; + acpi_facp.pm1a_cnt = base + ACPI_VIA_PM1_CNT; + acpi_facp.pm_tmr = base + ACPI_VIA_PM_TMR; + acpi_facp.gpe0 = base + ACPI_VIA_GPE0; + + acpi_facp.pm1_evt_len = ACPI_VIA_PM1_EVT_LEN; + acpi_facp.pm1_cnt_len = ACPI_VIA_PM1_CNT_LEN; + acpi_facp.pm_tm_len = ACPI_VIA_PM_TM_LEN; + acpi_facp.gpe0_len = ACPI_VIA_GPE0_LEN; + acpi_facp.p_lvl2_lat = (__u16) ACPI_INFINITE_LAT; + acpi_facp.p_lvl3_lat = (__u16) ACPI_INFINITE_LAT; + + acpi_facp.duty_offset = ACPI_VIA_DUTY_OFFSET; + acpi_facp.duty_width = ACPI_VIA_DUTY_WIDTH; + + acpi_facp.day_alarm = ACPI_VIA_DAY_ALARM; + acpi_facp.mon_alarm = ACPI_VIA_MON_ALARM; + acpi_facp.century = ACPI_VIA_CENTURY; + + acpi_set_checksum((u8*) &acpi_facp, sizeof(acpi_facp)); + acpi_load_table((ACPI_TABLE_HEADER*) &acpi_facp); + + pblk = base + ACPI_VIA_P_BLK; + memcpy(acpi_dummy_dsdt + ACPI_DUMMY_PBLK, &pblk, sizeof(pblk)); + acpi_set_checksum(acpi_dummy_dsdt, sizeof(acpi_dummy_dsdt)); + acpi_load_table((ACPI_TABLE_HEADER*) acpi_dummy_dsdt); + + return 0; +} + +typedef enum +{ + CH_UNKNOWN = 0, + CH_INTEL_PIIX4, + CH_VIA_586, + CH_VIA_686A, +} acpi_chip_t; + +/* indexed by value of each enum in acpi_chip_t */ +const static struct +{ + int (*chip_init)(struct pci_dev *dev); +} acpi_chip_info[] = +{ + {NULL,}, + {acpi_init_piix4}, + {acpi_init_via}, + {acpi_init_via}, +}; + +static struct pci_device_id acpi_pci_tbl[] = +{ + {0x8086, 0x7113, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_INTEL_PIIX4}, + {0x1106, 0x3040, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_VIA_586}, + {0x1106, 0x3057, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_VIA_686A}, + {0,} /* terminate list */ +}; + +static int +acpi_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + return acpi_chip_info[id->driver_data].chip_init(dev); +} + +static struct pci_driver acpi_driver = +{ + name: "acpi", + id_table: acpi_pci_tbl, + probe: acpi_probe, +}; +static int acpi_driver_registered = 0; + +/* + * Locate a known ACPI chipset + */ +static int +acpi_find_chipset(void) +{ + if (pci_register_driver(&acpi_driver) < 1) + return -ENODEV; + acpi_driver_registered = 1; + return 0; +} + +/* + * Fetch the FACP information + */ +static int +acpi_fetch_facp(void) +{ + ACPI_BUFFER buffer; + + memset(&acpi_facp, 0, sizeof(acpi_facp)); + buffer.pointer = &acpi_facp; + buffer.length = sizeof(acpi_facp); + if (!ACPI_SUCCESS(acpi_get_table(ACPI_TABLE_FACP, 1, &buffer))) { + printk(KERN_ERR "ACPI: missing FACP\n"); + return -ENODEV; + } + + if (acpi_facp.p_lvl2_lat + && acpi_facp.p_lvl2_lat <= ACPI_MAX_P_LVL2_LAT) { + acpi_c2_exit_latency + = ACPI_uS_TO_TMR_TICKS(acpi_facp.p_lvl2_lat); + acpi_c2_enter_latency + = ACPI_uS_TO_TMR_TICKS(ACPI_TMR_HZ / 1000); + } + if (acpi_facp.p_lvl3_lat + && acpi_facp.p_lvl3_lat <= ACPI_MAX_P_LVL3_LAT) { + acpi_c3_exit_latency + = ACPI_uS_TO_TMR_TICKS(acpi_facp.p_lvl3_lat); + acpi_c3_enter_latency + = ACPI_uS_TO_TMR_TICKS(acpi_facp.p_lvl3_lat * 5); + } + + return 0; +} + +/* + * Find and load ACPI tables + */ +int +acpi_load_tables(void) +{ + if (ACPI_SUCCESS(acpi_load_firmware_tables())) + { + printk(KERN_INFO "ACPI: support found\n"); + } + else if (acpi_find_chipset()) { + acpi_terminate(); + return -1; + } + + if (acpi_fetch_facp()) { + acpi_terminate(); + return -1; + } + + if (!ACPI_SUCCESS(acpi_load_namespace())) { + printk(KERN_ERR "ACPI: namespace load failed\n"); + acpi_terminate(); + return -1; + } + + return 0; +} diff -urN linux-2.4.0-test9/drivers/char/Makefile linux-2.4.0-test9-lia/drivers/char/Makefile --- linux-2.4.0-test9/drivers/char/Makefile Wed Oct 4 16:53:13 2000 +++ linux-2.4.0-test9-lia/drivers/char/Makefile Wed Oct 4 21:24:48 2000 @@ -112,6 +112,7 @@ obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o +obj-$(CONFIG_SIM_SERIAL) += simserial.o obj-$(CONFIG_ROCKETPORT) += rocket.o obj-$(CONFIG_MOXA_SMARTIO) += mxser.o obj-$(CONFIG_MOXA_INTELLIO) += moxa.o diff -urN linux-2.4.0-test9/drivers/char/simserial.c linux-2.4.0-test9-lia/drivers/char/simserial.c --- linux-2.4.0-test9/drivers/char/simserial.c Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/char/simserial.c Fri Aug 11 14:56:04 2000 @@ -0,0 +1,1094 @@ +/* + * Simulated Serial Driver (fake serial) + * + * This driver is mostly used for bringup purposes and will go away. + * It has a strong dependency on the system console. All outputs + * are rerouted to the same facility as the one used by printk which, in our + * case means sys_sim.c console (goes via the simulator). The code hereafter + * is completely leveraged from the serial.c driver. + * + * Copyright (C) 1999-2000 Hewlett-Packard Co + * Copyright (C) 1999 Stephane Eranian + * Copyright (C) 2000 David Mosberger-Tang + * + * 02/04/00 D. Mosberger Merged in serial.c bug fixes in rs_close(). + * 02/25/00 D. Mosberger Synced up with 2.3.99pre-5 version of serial.c. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#undef SIMSERIAL_DEBUG /* define this to get some debug information */ + +#define KEYBOARD_INTR 3 /* must match with simulator! */ +#define SIMSERIAL_IRQ 0xee + +#define NR_PORTS 1 /* only one port for now */ +#define SERIAL_INLINE 1 + +#ifdef SERIAL_INLINE +#define _INLINE_ inline +#endif + +#ifndef MIN +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#define IRQ_T(info) ((info->flags & ASYNC_SHARE_IRQ) ? SA_SHIRQ : SA_INTERRUPT) + +#define SSC_GETCHAR 21 + +extern long ia64_ssc (long, long, long, long, int); +extern void ia64_ssc_connect_irq (long intr, long irq); + +static char *serial_name = "SimSerial driver"; +static char *serial_version = "0.6"; + +/* + * This has been extracted from asm/serial.h. We need one eventually but + * I don't know exactly what we're going to put in it so just fake one + * for now. + */ +#define BASE_BAUD ( 1843200 / 16 ) + +#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) + +/* + * Most of the values here are meaningless to this particular driver. + * However some values must be preserved for the code (leveraged from serial.c + * to work correctly). + * port must not be 0 + * type must not be UNKNOWN + * So I picked arbitrary (guess from where?) values instead + */ +static struct serial_state rs_table[NR_PORTS]={ + /* UART CLK PORT IRQ FLAGS */ + { 0, BASE_BAUD, 0x3F8, SIMSERIAL_IRQ, STD_COM_FLAGS,0,PORT_16550 } /* ttyS0 */ +}; + +/* + * Just for the fun of it ! + */ +static struct serial_uart_config uart_config[] = { + { "unknown", 1, 0 }, + { "8250", 1, 0 }, + { "16450", 1, 0 }, + { "16550", 1, 0 }, + { "16550A", 16, UART_CLEAR_FIFO | UART_USE_FIFO }, + { "cirrus", 1, 0 }, + { "ST16650", 1, UART_CLEAR_FIFO | UART_STARTECH }, + { "ST16650V2", 32, UART_CLEAR_FIFO | UART_USE_FIFO | + UART_STARTECH }, + { "TI16750", 64, UART_CLEAR_FIFO | UART_USE_FIFO}, + { 0, 0} +}; + +static struct tty_driver serial_driver, callout_driver; +static int serial_refcount; + +static struct async_struct *IRQ_ports[NR_IRQS]; +static struct tty_struct *serial_table[NR_PORTS]; +static struct termios *serial_termios[NR_PORTS]; +static struct termios *serial_termios_locked[NR_PORTS]; + +static struct console *console; + +static unsigned char *tmp_buf; +static DECLARE_MUTEX(tmp_buf_sem); + +extern struct console *console_drivers; /* from kernel/printk.c */ + +/* + * ------------------------------------------------------------ + * rs_stop() and rs_start() + * + * This routines are called before setting or resetting tty->stopped. + * They enable or disable transmitter interrupts, as necessary. + * ------------------------------------------------------------ + */ +static void rs_stop(struct tty_struct *tty) +{ +#ifdef SIMSERIAL_DEBUG + printk("rs_stop: tty->stopped=%d tty->hw_stopped=%d tty->flow_stopped=%d\n", + tty->stopped, tty->hw_stopped, tty->flow_stopped); +#endif + +} + +static void rs_start(struct tty_struct *tty) +{ +#if SIMSERIAL_DEBUG + printk("rs_start: tty->stopped=%d tty->hw_stopped=%d tty->flow_stopped=%d\n", + tty->stopped, tty->hw_stopped, tty->flow_stopped); +#endif +} + +static void receive_chars(struct tty_struct *tty) +{ + unsigned char ch; + static unsigned char seen_esc = 0; + + while ( (ch = ia64_ssc(0, 0, 0, 0, SSC_GETCHAR)) ) { + if ( ch == 27 && seen_esc == 0 ) { + seen_esc = 1; + continue; + } else { + if ( seen_esc==1 && ch == 'O' ) { + seen_esc = 2; + continue; + } else if ( seen_esc == 2 ) { + if ( ch == 'P' ) show_state(); /* F1 key */ + if ( ch == 'Q' ) show_buffers(); /* F2 key */ + seen_esc = 0; + continue; + } + } + seen_esc = 0; + if (tty->flip.count >= TTY_FLIPBUF_SIZE) break; + + *tty->flip.char_buf_ptr = ch; + + *tty->flip.flag_buf_ptr = 0; + + tty->flip.flag_buf_ptr++; + tty->flip.char_buf_ptr++; + tty->flip.count++; + } + tty_flip_buffer_push(tty); +} + +/* + * This is the serial driver's interrupt routine for a single port + */ +static void rs_interrupt_single(int irq, void *dev_id, struct pt_regs * regs) +{ + struct async_struct * info; + + /* + * I don't know exactly why they don't use the dev_id opaque data + * pointer instead of this extra lookup table + */ + info = IRQ_ports[irq]; + if (!info || !info->tty) { + printk("simrs_interrupt_single: info|tty=0 info=%p problem\n", info); + return; + } + /* + * pretty simple in our case, because we only get interrupts + * on inbound traffic + */ + receive_chars(info->tty); +} + +/* + * ------------------------------------------------------------------- + * Here ends the serial interrupt routines. + * ------------------------------------------------------------------- + */ + +#if 0 +/* + * not really used in our situation so keep them commented out for now + */ +static DECLARE_TASK_QUEUE(tq_serial); /* used to be at the top of the file */ +static void do_serial_bh(void) +{ + run_task_queue(&tq_serial); + printk("do_serial_bh: called\n"); +} +#endif + +static void do_softint(void *private_) +{ + printk("simserial: do_softint called\n"); +} + +static void rs_put_char(struct tty_struct *tty, unsigned char ch) +{ + struct async_struct *info = (struct async_struct *)tty->driver_data; + unsigned long flags; + + if (!tty || !info->xmit.buf) return; + + save_flags(flags); cli(); + if (CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE) == 0) { + restore_flags(flags); + return; + } + info->xmit.buf[info->xmit.head] = ch; + info->xmit.head = (info->xmit.head + 1) & (SERIAL_XMIT_SIZE-1); + restore_flags(flags); +} + +static _INLINE_ void transmit_chars(struct async_struct *info, int *intr_done) +{ + int count; + unsigned long flags; + + save_flags(flags); cli(); + + if (info->x_char) { + char c = info->x_char; + + console->write(console, &c, 1); + + info->state->icount.tx++; + info->x_char = 0; + + goto out; + } + + if (info->xmit.head == info->xmit.tail || info->tty->stopped || info->tty->hw_stopped) { +#ifdef SIMSERIAL_DEBUG + printk("transmit_chars: head=%d, tail=%d, stopped=%d\n", + info->xmit.head, info->xmit.tail, info->tty->stopped); +#endif + goto out; + } + /* + * We removed the loop and try to do it in to chunks. We need + * 2 operations maximum because it's a ring buffer. + * + * First from current to tail if possible. + * Then from the beginning of the buffer until necessary + */ + + count = MIN(CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE), + SERIAL_XMIT_SIZE - info->xmit.tail); + console->write(console, info->xmit.buf+info->xmit.tail, count); + + info->xmit.tail = (info->xmit.tail+count) & (SERIAL_XMIT_SIZE-1); + + /* + * We have more at the beginning of the buffer + */ + count = CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); + if (count) { + console->write(console, info->xmit.buf, count); + info->xmit.tail += count; + } +out: + restore_flags(flags); +} + +static void rs_flush_chars(struct tty_struct *tty) +{ + struct async_struct *info = (struct async_struct *)tty->driver_data; + + if (info->xmit.head == info->xmit.tail || tty->stopped || tty->hw_stopped || + !info->xmit.buf) + return; + + transmit_chars(info, NULL); +} + + +static int rs_write(struct tty_struct * tty, int from_user, + const unsigned char *buf, int count) +{ + int c, ret = 0; + struct async_struct *info = (struct async_struct *)tty->driver_data; + unsigned long flags; + + if (!tty || !info->xmit.buf || !tmp_buf) return 0; + + save_flags(flags); + if (from_user) { + down(&tmp_buf_sem); + while (1) { + int c1; + c = CIRC_SPACE_TO_END(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); + if (count < c) + c = count; + if (c <= 0) + break; + + c -= copy_from_user(tmp_buf, buf, c); + if (!c) { + if (!ret) + ret = -EFAULT; + break; + } + cli(); + c1 = CIRC_SPACE_TO_END(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); + if (c1 < c) + c = c1; + memcpy(info->xmit.buf + info->xmit.head, tmp_buf, c); + info->xmit.head = ((info->xmit.head + c) & + (SERIAL_XMIT_SIZE-1)); + restore_flags(flags); + buf += c; + count -= c; + ret += c; + } + up(&tmp_buf_sem); + } else { + cli(); + while (1) { + c = CIRC_SPACE_TO_END(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); + if (count < c) + c = count; + if (c <= 0) { + break; + } + memcpy(info->xmit.buf + info->xmit.head, buf, c); + info->xmit.head = ((info->xmit.head + c) & + (SERIAL_XMIT_SIZE-1)); + buf += c; + count -= c; + ret += c; + } + restore_flags(flags); + } + /* + * Hey, we transmit directly from here in our case + */ + if (CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE) + && !tty->stopped && !tty->hw_stopped) { + transmit_chars(info, NULL); + } + return ret; +} + +static int rs_write_room(struct tty_struct *tty) +{ + struct async_struct *info = (struct async_struct *)tty->driver_data; + + return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); +} + +static int rs_chars_in_buffer(struct tty_struct *tty) +{ + struct async_struct *info = (struct async_struct *)tty->driver_data; + + return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); +} + +static void rs_flush_buffer(struct tty_struct *tty) +{ + struct async_struct *info = (struct async_struct *)tty->driver_data; + unsigned long flags; + + save_flags(flags); cli(); + info->xmit.head = info->xmit.tail = 0; + restore_flags(flags); + + wake_up_interruptible(&tty->write_wait); + + if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && + tty->ldisc.write_wakeup) + (tty->ldisc.write_wakeup)(tty); +} + +/* + * This function is used to send a high-priority XON/XOFF character to + * the device + */ +static void rs_send_xchar(struct tty_struct *tty, char ch) +{ + struct async_struct *info = (struct async_struct *)tty->driver_data; + + info->x_char = ch; + if (ch) { + /* + * I guess we could call console->write() directly but + * let's do that for now. + */ + transmit_chars(info, NULL); + } +} + +/* + * ------------------------------------------------------------ + * rs_throttle() + * + * This routine is called by the upper-layer tty layer to signal that + * incoming characters should be throttled. + * ------------------------------------------------------------ + */ +static void rs_throttle(struct tty_struct * tty) +{ + if (I_IXOFF(tty)) rs_send_xchar(tty, STOP_CHAR(tty)); + + printk("simrs_throttle called\n"); +} + +static void rs_unthrottle(struct tty_struct * tty) +{ + struct async_struct *info = (struct async_struct *)tty->driver_data; + + if (I_IXOFF(tty)) { + if (info->x_char) + info->x_char = 0; + else + rs_send_xchar(tty, START_CHAR(tty)); + } + printk("simrs_unthrottle called\n"); +} + +/* + * rs_break() --- routine which turns the break handling on or off + */ +static void rs_break(struct tty_struct *tty, int break_state) +{ +} + +static int rs_ioctl(struct tty_struct *tty, struct file * file, + unsigned int cmd, unsigned long arg) +{ + if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && + (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) && + (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) { + if (tty->flags & (1 << TTY_IO_ERROR)) + return -EIO; + } + + switch (cmd) { + case TIOCMGET: + printk("rs_ioctl: TIOCMGET called\n"); + return -EINVAL; + case TIOCMBIS: + case TIOCMBIC: + case TIOCMSET: + printk("rs_ioctl: TIOCMBIS/BIC/SET called\n"); + return -EINVAL; + case TIOCGSERIAL: + printk("simrs_ioctl TIOCGSERIAL called\n"); + return 0; + case TIOCSSERIAL: + printk("simrs_ioctl TIOCSSERIAL called\n"); + return 0; + case TIOCSERCONFIG: + printk("rs_ioctl: TIOCSERCONFIG called\n"); + return -EINVAL; + + case TIOCSERGETLSR: /* Get line status register */ + printk("rs_ioctl: TIOCSERGETLSR called\n"); + return -EINVAL; + + case TIOCSERGSTRUCT: + printk("rs_ioctl: TIOCSERGSTRUCT called\n"); +#if 0 + if (copy_to_user((struct async_struct *) arg, + info, sizeof(struct async_struct))) + return -EFAULT; +#endif + return 0; + + /* + * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change + * - mask passed in arg for lines of interest + * (use |'ed TIOCM_RNG/DSR/CD/CTS for masking) + * Caller should use TIOCGICOUNT to see which one it was + */ + case TIOCMIWAIT: + printk("rs_ioctl: TIOCMIWAIT: called\n"); + return 0; + /* + * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) + * Return: write counters to the user passed counter struct + * NB: both 1->0 and 0->1 transitions are counted except for + * RI where only 0->1 is counted. + */ + case TIOCGICOUNT: + printk("rs_ioctl: TIOCGICOUNT called\n"); + return 0; + + case TIOCSERGWILD: + case TIOCSERSWILD: + /* "setserial -W" is called in Debian boot */ + printk ("TIOCSER?WILD ioctl obsolete, ignored.\n"); + return 0; + + default: + return -ENOIOCTLCMD; + } + return 0; +} + +#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK)) + +static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios) +{ + unsigned int cflag = tty->termios->c_cflag; + + if ( (cflag == old_termios->c_cflag) + && ( RELEVANT_IFLAG(tty->termios->c_iflag) + == RELEVANT_IFLAG(old_termios->c_iflag))) + return; + + + /* Handle turning off CRTSCTS */ + if ((old_termios->c_cflag & CRTSCTS) && + !(tty->termios->c_cflag & CRTSCTS)) { + tty->hw_stopped = 0; + rs_start(tty); + } +} +/* + * This routine will shutdown a serial port; interrupts are disabled, and + * DTR is dropped if the hangup on close termio flag is on. + */ +static void shutdown(struct async_struct * info) +{ + unsigned long flags; + struct serial_state *state; + int retval; + + if (!(info->flags & ASYNC_INITIALIZED)) return; + + state = info->state; + +#ifdef SIMSERIAL_DEBUG + printk("Shutting down serial port %d (irq %d)....", info->line, + state->irq); +#endif + + save_flags(flags); cli(); /* Disable interrupts */ + + /* + * First unlink the serial port from the IRQ chain... + */ + if (info->next_port) + info->next_port->prev_port = info->prev_port; + if (info->prev_port) + info->prev_port->next_port = info->next_port; + else + IRQ_ports[state->irq] = info->next_port; + + /* + * Free the IRQ, if necessary + */ + if (state->irq && (!IRQ_ports[state->irq] || + !IRQ_ports[state->irq]->next_port)) { + if (IRQ_ports[state->irq]) { + free_irq(state->irq, NULL); + retval = request_irq(state->irq, rs_interrupt_single, + IRQ_T(info), "serial", NULL); + + if (retval) + printk("serial shutdown: request_irq: error %d" + " Couldn't reacquire IRQ.\n", retval); + } else + free_irq(state->irq, NULL); + } + + if (info->xmit.buf) { + free_page((unsigned long) info->xmit.buf); + info->xmit.buf = 0; + } + + if (info->tty) set_bit(TTY_IO_ERROR, &info->tty->flags); + + info->flags &= ~ASYNC_INITIALIZED; + restore_flags(flags); +} + +/* + * ------------------------------------------------------------ + * rs_close() + * + * This routine is called when the serial port gets closed. First, we + * wait for the last remaining data to be sent. Then, we unlink its + * async structure from the interrupt chain if necessary, and we free + * that IRQ if nothing is left in the chain. + * ------------------------------------------------------------ + */ +static void rs_close(struct tty_struct *tty, struct file * filp) +{ + struct async_struct * info = (struct async_struct *)tty->driver_data; + struct serial_state *state; + unsigned long flags; + + if (!info ) return; + + state = info->state; + + save_flags(flags); cli(); + + if (tty_hung_up_p(filp)) { +#ifdef SIMSERIAL_DEBUG + printk("rs_close: hung_up\n"); +#endif + MOD_DEC_USE_COUNT; + restore_flags(flags); + return; + } +#ifdef SIMSERIAL_DEBUG + printk("rs_close ttys%d, count = %d\n", info->line, state->count); +#endif + if ((tty->count == 1) && (state->count != 1)) { + /* + * Uh, oh. tty->count is 1, which means that the tty + * structure will be freed. state->count should always + * be one in these conditions. If it's greater than + * one, we've got real problems, since it means the + * serial port won't be shutdown. + */ + printk("rs_close: bad serial port count; tty->count is 1, " + "state->count is %d\n", state->count); + state->count = 1; + } + if (--state->count < 0) { + printk("rs_close: bad serial port count for ttys%d: %d\n", + info->line, state->count); + state->count = 0; + } + if (state->count) { + MOD_DEC_USE_COUNT; + restore_flags(flags); + return; + } + info->flags |= ASYNC_CLOSING; + restore_flags(flags); + + /* + * Now we wait for the transmit buffer to clear; and we notify + * the line discipline to only process XON/XOFF characters. + */ + shutdown(info); + if (tty->driver.flush_buffer) tty->driver.flush_buffer(tty); + if (tty->ldisc.flush_buffer) tty->ldisc.flush_buffer(tty); + info->event = 0; + info->tty = 0; + if (info->blocked_open) { + if (info->close_delay) { + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(info->close_delay); + } + wake_up_interruptible(&info->open_wait); + } + info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE|ASYNC_CLOSING); + wake_up_interruptible(&info->close_wait); + MOD_DEC_USE_COUNT; +} + +/* + * rs_wait_until_sent() --- wait until the transmitter is empty + */ +static void rs_wait_until_sent(struct tty_struct *tty, int timeout) +{ +} + + +/* + * rs_hangup() --- called by tty_hangup() when a hangup is signaled. + */ +static void rs_hangup(struct tty_struct *tty) +{ + struct async_struct * info = (struct async_struct *)tty->driver_data; + struct serial_state *state = info->state; + +#ifdef SIMSERIAL_DEBUG + printk("rs_hangup: called\n"); +#endif + + state = info->state; + + rs_flush_buffer(tty); + if (info->flags & ASYNC_CLOSING) + return; + shutdown(info); + + info->event = 0; + state->count = 0; + info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE); + info->tty = 0; + wake_up_interruptible(&info->open_wait); +} + + +static int get_async_struct(int line, struct async_struct **ret_info) +{ + struct async_struct *info; + struct serial_state *sstate; + + sstate = rs_table + line; + sstate->count++; + if (sstate->info) { + *ret_info = sstate->info; + return 0; + } + info = kmalloc(sizeof(struct async_struct), GFP_KERNEL); + if (!info) { + sstate->count--; + return -ENOMEM; + } + memset(info, 0, sizeof(struct async_struct)); + init_waitqueue_head(&info->open_wait); + init_waitqueue_head(&info->close_wait); + init_waitqueue_head(&info->delta_msr_wait); + info->magic = SERIAL_MAGIC; + info->port = sstate->port; + info->flags = sstate->flags; + info->xmit_fifo_size = sstate->xmit_fifo_size; + info->line = line; + info->tqueue.routine = do_softint; + info->tqueue.data = info; + info->state = sstate; + if (sstate->info) { + kfree(info); + *ret_info = sstate->info; + return 0; + } + *ret_info = sstate->info = info; + return 0; +} + +static int +startup(struct async_struct *info) +{ + unsigned long flags; + int retval=0; + void (*handler)(int, void *, struct pt_regs *); + struct serial_state *state= info->state; + unsigned long page; + + page = get_free_page(GFP_KERNEL); + if (!page) + return -ENOMEM; + + save_flags(flags); cli(); + + if (info->flags & ASYNC_INITIALIZED) { + free_page(page); + goto errout; + } + + if (!state->port || !state->type) { + if (info->tty) set_bit(TTY_IO_ERROR, &info->tty->flags); + free_page(page); + goto errout; + } + if (info->xmit.buf) + free_page(page); + else + info->xmit.buf = (unsigned char *) page; + +#ifdef SIMSERIAL_DEBUG + printk("startup: ttys%d (irq %d)...", info->line, state->irq); +#endif + + /* + * Allocate the IRQ if necessary + */ + if (state->irq && (!IRQ_ports[state->irq] || + !IRQ_ports[state->irq]->next_port)) { + if (IRQ_ports[state->irq]) { + retval = -EBUSY; + goto errout; + } else + handler = rs_interrupt_single; + + retval = request_irq(state->irq, handler, IRQ_T(info), + "simserial", NULL); + if (retval) { + if (capable(CAP_SYS_ADMIN)) { + if (info->tty) + set_bit(TTY_IO_ERROR, + &info->tty->flags); + retval = 0; + } + goto errout; + } + } + + /* + * Insert serial port into IRQ chain. + */ + info->prev_port = 0; + info->next_port = IRQ_ports[state->irq]; + if (info->next_port) + info->next_port->prev_port = info; + IRQ_ports[state->irq] = info; + + if (info->tty) clear_bit(TTY_IO_ERROR, &info->tty->flags); + + info->xmit.head = info->xmit.tail = 0; + +#if 0 + /* + * Set up serial timers... + */ + timer_table[RS_TIMER].expires = jiffies + 2*HZ/100; + timer_active |= 1 << RS_TIMER; +#endif + + /* + * Set up the tty->alt_speed kludge + */ + if (info->tty) { + if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) + info->tty->alt_speed = 57600; + if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) + info->tty->alt_speed = 115200; + if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI) + info->tty->alt_speed = 230400; + if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP) + info->tty->alt_speed = 460800; + } + + info->flags |= ASYNC_INITIALIZED; + restore_flags(flags); + return 0; + +errout: + restore_flags(flags); + return retval; +} + + +/* + * This routine is called whenever a serial port is opened. It + * enables interrupts for a serial port, linking in its async structure into + * the IRQ chain. It also performs the serial-specific + * initialization for the tty structure. + */ +static int rs_open(struct tty_struct *tty, struct file * filp) +{ + struct async_struct *info; + int retval, line; + unsigned long page; + + MOD_INC_USE_COUNT; + line = MINOR(tty->device) - tty->driver.minor_start; + if ((line < 0) || (line >= NR_PORTS)) { + MOD_DEC_USE_COUNT; + return -ENODEV; + } + retval = get_async_struct(line, &info); + if (retval) { + MOD_DEC_USE_COUNT; + return retval; + } + tty->driver_data = info; + info->tty = tty; + +#ifdef SIMSERIAL_DEBUG + printk("rs_open %s%d, count = %d\n", tty->driver.name, info->line, + info->state->count); +#endif + info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0; + + if (!tmp_buf) { + page = get_free_page(GFP_KERNEL); + if (!page) { + /* MOD_DEC_USE_COUNT; "info->tty" will cause this? */ + return -ENOMEM; + } + if (tmp_buf) + free_page(page); + else + tmp_buf = (unsigned char *) page; + } + + /* + * If the port is the middle of closing, bail out now + */ + if (tty_hung_up_p(filp) || + (info->flags & ASYNC_CLOSING)) { + if (info->flags & ASYNC_CLOSING) + interruptible_sleep_on(&info->close_wait); + /* MOD_DEC_USE_COUNT; "info->tty" will cause this? */ +#ifdef SERIAL_DO_RESTART + return ((info->flags & ASYNC_HUP_NOTIFY) ? + -EAGAIN : -ERESTARTSYS); +#else + return -EAGAIN; +#endif + } + + /* + * Start up serial port + */ + retval = startup(info); + if (retval) { + /* MOD_DEC_USE_COUNT; "info->tty" will cause this? */ + return retval; + } + + if ((info->state->count == 1) && + (info->flags & ASYNC_SPLIT_TERMIOS)) { + if (tty->driver.subtype == SERIAL_TYPE_NORMAL) + *tty->termios = info->state->normal_termios; + else + *tty->termios = info->state->callout_termios; + } + + /* + * figure out which console to use (should be one already) + */ + console = console_drivers; + while (console) { + if ((console->flags & CON_ENABLED) && console->write) break; + console = console->next; + } + + info->session = current->session; + info->pgrp = current->pgrp; + +#ifdef SIMSERIAL_DEBUG + printk("rs_open ttys%d successful\n", info->line); +#endif + return 0; +} + +/* + * /proc fs routines.... + */ + +static inline int line_info(char *buf, struct serial_state *state) +{ + return sprintf(buf, "%d: uart:%s port:%lX irq:%d\n", + state->line, uart_config[state->type].name, + state->port, state->irq); +} + +int rs_read_proc(char *page, char **start, off_t off, int count, + int *eof, void *data) +{ + int i, len = 0, l; + off_t begin = 0; + + len += sprintf(page, "simserinfo:1.0 driver:%s\n", serial_version); + for (i = 0; i < NR_PORTS && len < 4000; i++) { + l = line_info(page + len, &rs_table[i]); + len += l; + if (len+begin > off+count) + goto done; + if (len+begin < off) { + begin += len; + len = 0; + } + } + *eof = 1; +done: + if (off >= len+begin) + return 0; + *start = page + (begin-off); + return ((count < begin+len-off) ? count : begin+len-off); +} + +/* + * --------------------------------------------------------------------- + * rs_init() and friends + * + * rs_init() is called at boot-time to initialize the serial driver. + * --------------------------------------------------------------------- + */ + +/* + * This routine prints out the appropriate serial driver version + * number, and identifies which options were configured into this + * driver. + */ +static inline void show_serial_version(void) +{ + printk(KERN_INFO "%s version %s with", serial_name, serial_version); + printk(" no serial options enabled\n"); +} + +/* + * The serial driver boot-time initialization code! + */ +static int __init +simrs_init (void) +{ + int i; + struct serial_state *state; + + show_serial_version(); + + /* connect the platform's keyboard interrupt to SIMSERIAL_IRQ */ + ia64_ssc_connect_irq(KEYBOARD_INTR, SIMSERIAL_IRQ); + + /* Initialize the tty_driver structure */ + + memset(&serial_driver, 0, sizeof(struct tty_driver)); + serial_driver.magic = TTY_DRIVER_MAGIC; + serial_driver.driver_name = "simserial"; + serial_driver.name = "ttyS"; + serial_driver.major = TTY_MAJOR; + serial_driver.minor_start = 64; + serial_driver.num = 1; + serial_driver.type = TTY_DRIVER_TYPE_SERIAL; + serial_driver.subtype = SERIAL_TYPE_NORMAL; + serial_driver.init_termios = tty_std_termios; + serial_driver.init_termios.c_cflag = + B9600 | CS8 | CREAD | HUPCL | CLOCAL; + serial_driver.flags = TTY_DRIVER_REAL_RAW; + serial_driver.refcount = &serial_refcount; + serial_driver.table = serial_table; + serial_driver.termios = serial_termios; + serial_driver.termios_locked = serial_termios_locked; + + serial_driver.open = rs_open; + serial_driver.close = rs_close; + serial_driver.write = rs_write; + serial_driver.put_char = rs_put_char; + serial_driver.flush_chars = rs_flush_chars; + serial_driver.write_room = rs_write_room; + serial_driver.chars_in_buffer = rs_chars_in_buffer; + serial_driver.flush_buffer = rs_flush_buffer; + serial_driver.ioctl = rs_ioctl; + serial_driver.throttle = rs_throttle; + serial_driver.unthrottle = rs_unthrottle; + serial_driver.send_xchar = rs_send_xchar; + serial_driver.set_termios = rs_set_termios; + serial_driver.stop = rs_stop; + serial_driver.start = rs_start; + serial_driver.hangup = rs_hangup; + serial_driver.break_ctl = rs_break; + serial_driver.wait_until_sent = rs_wait_until_sent; + serial_driver.read_proc = rs_read_proc; + + /* + * Let's have a little bit of fun ! + */ + for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) { + + if (state->type == PORT_UNKNOWN) continue; + + printk(KERN_INFO "ttyS%02d at 0x%04lx (irq = %d) is a %s\n", + state->line, + state->port, state->irq, + uart_config[state->type].name); + } + /* + * The callout device is just like normal device except for + * major number and the subtype code. + */ + callout_driver = serial_driver; + callout_driver.name = "cua"; + callout_driver.major = TTYAUX_MAJOR; + callout_driver.subtype = SERIAL_TYPE_CALLOUT; + callout_driver.read_proc = 0; + callout_driver.proc_entry = 0; + + if (tty_register_driver(&serial_driver)) + panic("Couldn't register simserial driver\n"); + + if (tty_register_driver(&callout_driver)) + panic("Couldn't register callout driver\n"); + + return 0; +} + +#ifndef MODULE +__initcall(simrs_init); +#endif diff -urN linux-2.4.0-test9/drivers/char/vt.c linux-2.4.0-test9-lia/drivers/char/vt.c --- linux-2.4.0-test9/drivers/char/vt.c Wed Aug 2 18:54:18 2000 +++ linux-2.4.0-test9-lia/drivers/char/vt.c Wed Oct 4 21:43:13 2000 @@ -62,7 +62,7 @@ */ unsigned char keyboard_type = KB_101; -#if !defined(__alpha__) && !defined(__mips__) && !defined(__arm__) && !defined(__sh__) +#if !defined(__alpha__) && !defined(__ia64__) && !defined(__mips__) && !defined(__arm__) && !defined(__sh__) asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int on); #endif @@ -472,7 +472,7 @@ ucval = keyboard_type; goto setchar; -#if !defined(__alpha__) && !defined(__mips__) && !defined(__arm__) && !defined(__sh__) +#if !defined(__alpha__) && !defined(__ia64__) && !defined(__mips__) && !defined(__arm__) && !defined(__sh__) /* * These cannot be implemented on any machine that implements * ioperm() in user level (such as Alpha PCs). diff -urN linux-2.4.0-test9/drivers/media/radio/Makefile linux-2.4.0-test9-lia/drivers/media/radio/Makefile --- linux-2.4.0-test9/drivers/media/radio/Makefile Wed Oct 4 16:53:22 2000 +++ linux-2.4.0-test9-lia/drivers/media/radio/Makefile Wed Oct 4 21:24:49 2000 @@ -9,7 +9,7 @@ # parent makes.. # -O_OBJS := +O_OBJS := dummy.o OX_OBJS := M_OBJS := MX_OBJS := diff -urN linux-2.4.0-test9/drivers/media/radio/dummy.c linux-2.4.0-test9-lia/drivers/media/radio/dummy.c --- linux-2.4.0-test9/drivers/media/radio/dummy.c Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/media/radio/dummy.c Fri Aug 25 01:08:14 2000 @@ -0,0 +1 @@ +/* just so the linker knows what kind of object files it's deadling with... */ diff -urN linux-2.4.0-test9/drivers/media/video/Makefile linux-2.4.0-test9-lia/drivers/media/video/Makefile --- linux-2.4.0-test9/drivers/media/video/Makefile Thu Aug 24 08:17:34 2000 +++ linux-2.4.0-test9-lia/drivers/media/video/Makefile Fri Aug 25 01:08:05 2000 @@ -16,7 +16,7 @@ # Object file lists. -obj-y := +obj-y := dummy.o obj-m := obj-n := obj- := diff -urN linux-2.4.0-test9/drivers/media/video/dummy.c linux-2.4.0-test9-lia/drivers/media/video/dummy.c --- linux-2.4.0-test9/drivers/media/video/dummy.c Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/media/video/dummy.c Fri Aug 25 01:08:11 2000 @@ -0,0 +1 @@ +/* just so the linker knows what kind of object files it's deadling with... */ diff -urN linux-2.4.0-test9/drivers/net/Makefile linux-2.4.0-test9-lia/drivers/net/Makefile --- linux-2.4.0-test9/drivers/net/Makefile Wed Oct 4 16:53:23 2000 +++ linux-2.4.0-test9-lia/drivers/net/Makefile Wed Oct 4 21:24:49 2000 @@ -199,6 +199,7 @@ obj-$(CONFIG_ES3210) += es3210.o 8390.o obj-$(CONFIG_LNE390) += lne390.o 8390.o obj-$(CONFIG_NE3210) += ne3210.o 8390.o +obj-$(CONFIG_SIMETH) += simeth.o obj-$(CONFIG_PPP) += ppp_generic.o slhc.o obj-$(CONFIG_PPP_ASYNC) += ppp_async.o diff -urN linux-2.4.0-test9/drivers/net/eepro100.c linux-2.4.0-test9-lia/drivers/net/eepro100.c --- linux-2.4.0-test9/drivers/net/eepro100.c Wed Oct 4 16:53:24 2000 +++ linux-2.4.0-test9-lia/drivers/net/eepro100.c Wed Oct 4 21:24:49 2000 @@ -25,6 +25,8 @@ Disabled FC and ER, to avoid lockups when when we get FCP interrupts. 2000 Jul 17 Goutham Rao PCI DMA API fixes, adding pci_dma_sync_single calls where neccesary + 2000 Aug 31 David Mosberger + RX_ALIGN support: enables rx DMA without causing unaligned accesses. */ static const char *version = @@ -41,6 +43,14 @@ static int txdmacount = 128; static int rxdmacount = 0; +#ifdef __ia64__ + /* align rx buffers to 2 bytes so that IP header is aligned */ +# define RX_ALIGN +# define RxFD_ALIGNMENT __attribute__ ((aligned (2), packed)) +#else +# define RxFD_ALIGNMENT +#endif + /* Set the copy breakpoint for the copy-only-tiny-buffer Rx method. Lower values use more memory, but are faster. */ static int rx_copybreak = 200; @@ -429,18 +439,18 @@ /* The Speedo3 Rx and Tx frame/buffer descriptors. */ struct descriptor { /* A generic descriptor. */ - s32 cmd_status; /* All command and status fields. */ + volatile s32 cmd_status; /* All command and status fields. */ u32 link; /* struct descriptor * */ unsigned char params[0]; }; /* The Speedo3 Rx and Tx buffer descriptors. */ struct RxFD { /* Receive frame descriptor. */ - s32 status; + volatile s32 status; u32 link; /* struct RxFD * */ u32 rx_buf_addr; /* void * */ u32 count; -}; +} RxFD_ALIGNMENT; /* Selected elements of the Tx/RxFD.status word. */ enum RxFD_bits { @@ -1207,6 +1217,9 @@ for (i = 0; i < RX_RING_SIZE; i++) { struct sk_buff *skb; skb = dev_alloc_skb(PKT_BUF_SZ + sizeof(struct RxFD)); +#ifdef RX_ALIGN + skb_reserve(skb, 2); /* Align IP on 16 byte boundary */ +#endif sp->rx_skbuff[i] = skb; if (skb == NULL) break; /* OK. Just initially short of Rx bufs. */ @@ -1656,6 +1669,9 @@ struct sk_buff *skb; /* Get a fresh skbuff to replace the consumed one. */ skb = dev_alloc_skb(PKT_BUF_SZ + sizeof(struct RxFD)); +#ifdef RX_ALIGN + skb_reserve(skb, 2); /* Align IP on 16 byte boundary */ +#endif sp->rx_skbuff[entry] = skb; if (skb == NULL) { sp->rx_ringp[entry] = NULL; diff -urN linux-2.4.0-test9/drivers/net/simeth.c linux-2.4.0-test9-lia/drivers/net/simeth.c --- linux-2.4.0-test9/drivers/net/simeth.c Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/net/simeth.c Mon Jul 31 14:01:22 2000 @@ -0,0 +1,600 @@ +/* + * Simulated Ethernet Driver + * + * Copyright (C) 1999-2000 Hewlett-Packard Co + * Copyright (C) 1999-2000 Stephane Eranain + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define SIMETH_IRQ 0xed +#define SIMETH_RECV_MAX 10 + +/* + * Maximum possible received frame for Ethernet. + * We preallocate an sk_buff of that size to avoid costly + * memcpy for temporary buffer into sk_buff. We do basically + * what's done in other drivers, like eepro with a ring. + * The difference is, of course, that we don't have real DMA !!! + */ +#define SIMETH_FRAME_SIZE ETH_FRAME_LEN + + +#define SSC_NETDEV_PROBE 100 +#define SSC_NETDEV_SEND 101 +#define SSC_NETDEV_RECV 102 +#define SSC_NETDEV_ATTACH 103 +#define SSC_NETDEV_DETACH 104 + +#define NETWORK_INTR 8 + +/* + * This structure is need for the module version + * It hasn't been tested yet + */ +struct simeth_local { + struct net_device *next_module; + struct net_device_stats stats; + int simfd; /* descriptor in the simulator */ +}; + +static int simeth_probe1(void); +static int simeth_open(struct net_device *dev); +static int simeth_close(struct net_device *dev); +static int simeth_tx(struct sk_buff *skb, struct net_device *dev); +static int simeth_rx(struct net_device *dev); +static struct net_device_stats *simeth_get_stats(struct net_device *dev); +static void simeth_interrupt(int irq, void *dev_id, struct pt_regs * regs); +static void set_multicast_list(struct net_device *dev); +static int simeth_device_event(struct notifier_block *this,unsigned long event, void *ptr); + +static char *simeth_version="v0.2"; + +/* + * This variable is used to establish a mapping between the Linux/ia64 kernel + * and the host linux kernel. + * + * As of today, we support only one card, even though most of the code + * is ready for many more. The mapping is then: + * linux/ia64 -> linux/x86 + * eth0 -> eth1 + * + * In the future, we some string operations, we could easily support up + * to 10 cards (0-9). + * + * The default mapping can be changed on the kernel command line by + * specifying simeth=ethX (or whatever string you want). + */ +static char *simeth_device="eth0"; /* default host interface to use */ + + + +static volatile unsigned int card_count; /* how many cards "found" so far */ +static int simeth_debug=0; /* set to 1 to get debug information */ + +/* + * Used to catch IFF_UP & IFF_DOWN events + */ +static struct notifier_block simeth_dev_notifier = { + simeth_device_event, + 0 +}; + + +/* + * Function used when using a kernel command line option. + * + * Format: simeth=interface_name (like eth0) + */ +static int __init +simeth_setup(char *str) +{ + simeth_device = str; + return 1; +} + +__setup("simeth=", simeth_setup); + +/* + * Function used to probe for simeth devices when not installed + * as a loadable module + */ + +int __init +simeth_probe (void) +{ + return simeth_probe1(); +} + +extern long ia64_ssc (long, long, long, long, int); +extern void ia64_ssc_connect_irq (long intr, long irq); + +static inline int +netdev_probe(char *name, unsigned char *ether) +{ + return ia64_ssc(__pa(name), __pa(ether), 0,0, SSC_NETDEV_PROBE); +} + + +static inline int +netdev_connect(int irq) +{ + /* XXX Fix me + * this does not support multiple cards + * also no return value + */ + ia64_ssc_connect_irq(NETWORK_INTR, irq); + return 0; +} + +static inline int +netdev_attach(int fd, int irq, unsigned int ipaddr) +{ + /* this puts the host interface in the right mode (start interupting) */ + return ia64_ssc(fd, ipaddr, 0,0, SSC_NETDEV_ATTACH); +} + + +static inline int +netdev_detach(int fd) +{ + /* + * inactivate the host interface (don't interrupt anymore) */ + return ia64_ssc(fd, 0,0,0, SSC_NETDEV_DETACH); +} + +static inline int +netdev_send(int fd, unsigned char *buf, unsigned int len) +{ + return ia64_ssc(fd, __pa(buf), len, 0, SSC_NETDEV_SEND); +} + +static inline int +netdev_read(int fd, unsigned char *buf, unsigned int len) +{ + return ia64_ssc(fd, __pa(buf), len, 0, SSC_NETDEV_RECV); +} + +/* + * Function shared with module code, so cannot be in init section + * + * So far this function "detects" only one card (test_&_set) but could + * be extended easily. + * + * Return: + * - -ENODEV is no device found + * - -ENOMEM is no more memory + * - 0 otherwise + */ +static int +simeth_probe1(void) +{ + unsigned char mac_addr[ETH_ALEN]; + struct simeth_local *local; + struct net_device *dev; + int fd, i; + + /* + * XXX Fix me + * let's support just one card for now + */ + if (test_and_set_bit(0, &card_count)) + return -ENODEV; + + /* + * check with the simulator for the device + */ + fd = netdev_probe(simeth_device, mac_addr); + if (fd == -1) + return -ENODEV; + + dev = init_etherdev(NULL, sizeof(struct simeth_local)); + if (!dev) + return -ENOMEM; + + memcpy(dev->dev_addr, mac_addr, sizeof(mac_addr)); + /* + * XXX Fix me + * does not support more than one card ! + */ + dev->irq = SIMETH_IRQ; + + /* + * attach the interrupt in the simulator, this does enable interrupts + * until a netdev_attach() is called + */ + netdev_connect(dev->irq); + + memset(dev->priv, 0, sizeof(struct simeth_local)); + + local = dev->priv; + local->simfd = fd; /* keep track of underlying file descriptor */ + local->next_module = NULL; + + dev->open = simeth_open; + dev->stop = simeth_close; + dev->hard_start_xmit = simeth_tx; + dev->get_stats = simeth_get_stats; + dev->set_multicast_list = set_multicast_list; /* no yet used */ + + /* Fill in the fields of the device structure with ethernet-generic values. */ + ether_setup(dev); + + printk("simeth: %s alpha\n", simeth_version); + printk("%s: hosteth=%s simfd=%d, HwAddr", dev->name, simeth_device, local->simfd); + for(i = 0; i < ETH_ALEN; i++) { + printk(" %2.2x", dev->dev_addr[i]); + } + printk(", IRQ %d\n", dev->irq); + +#ifdef MODULE + local->next_module = simeth_dev; + simeth_dev = dev; +#endif + /* + * XXX Fix me + * would not work with more than one device ! + */ + register_netdevice_notifier(&simeth_dev_notifier); + + return 0; +} + +/* + * actually binds the device to an interrupt vector + */ +static int +simeth_open(struct net_device *dev) +{ + if (request_irq(dev->irq, simeth_interrupt, 0, "simeth", dev)) { + printk ("simeth: unable to get IRQ %d.\n", dev->irq); + return -EAGAIN; + } + + netif_start_queue(dev); + MOD_INC_USE_COUNT; + + return 0; +} + +/* copied from lapbether.c */ +static __inline__ int dev_is_ethdev(struct net_device *dev) +{ + return ( dev->type == ARPHRD_ETHER && strncmp(dev->name, "dummy", 5)); +} + + +/* + * Handler for IFF_UP or IFF_DOWN + * + * The reason for that is that we don't want to be interrupted when the + * interface is down. There is no way to unconnect in the simualtor. Instead + * we use this function to shutdown packet processing in the frame filter + * in the simulator. Thus no interrupts are generated + * + * + * That's also the place where we pass the IP address of this device to the + * simulator so that that we can start filtering packets for it + * + * There may be a better way of doing this, but I don't know which yet. + */ +static int +simeth_device_event(struct notifier_block *this,unsigned long event, void *ptr) +{ + struct net_device *dev = (struct net_device *)ptr; + struct simeth_local *local; + struct in_device *in_dev; + struct in_ifaddr **ifap = NULL; + struct in_ifaddr *ifa = NULL; + int r; + + + if ( ! dev ) { + printk(KERN_WARNING "simeth_device_event dev=0\n"); + return NOTIFY_DONE; + } + + if ( event != NETDEV_UP && event != NETDEV_DOWN ) return NOTIFY_DONE; + + /* + * Check whether or not it's for an ethernet device + * + * XXX Fixme: This works only as long as we support one + * type of ethernet device. + */ + if ( !dev_is_ethdev(dev) ) return NOTIFY_DONE; + + if ((in_dev=dev->ip_ptr) != NULL) { + for (ifap=&in_dev->ifa_list; (ifa=*ifap) != NULL; ifap=&ifa->ifa_next) + if (strcmp(dev->name, ifa->ifa_label) == 0) break; + } + if ( ifa == NULL ) { + printk("simeth_open: can't find device %s's ifa\n", dev->name); + return NOTIFY_DONE; + } + + printk("simeth_device_event: %s ipaddr=0x%x\n", dev->name, htonl(ifa->ifa_local)); + + /* + * XXX Fix me + * if the device was up, and we're simply reconfiguring it, not sure + * we get DOWN then UP. + */ + + local = dev->priv; + /* now do it for real */ + r = event == NETDEV_UP ? + netdev_attach(local->simfd, dev->irq, htonl(ifa->ifa_local)): + netdev_detach(local->simfd); + + printk("simeth: netdev_attach/detach: event=%s ->%d\n", event == NETDEV_UP ? "attach":"detach", r); + + return NOTIFY_DONE; +} + +static int +simeth_close(struct net_device *dev) +{ + netif_stop_queue(dev); + + free_irq(dev->irq, dev); + + MOD_DEC_USE_COUNT; + + return 0; +} + +/* + * Only used for debug + */ +static void +frame_print(unsigned char *from, unsigned char *frame, int len) +{ + int i; + + printk("%s: (%d) %02x", from, len, frame[0] & 0xff); + for(i=1; i < 6; i++ ) { + printk(":%02x", frame[i] &0xff); + } + printk(" %2x", frame[6] &0xff); + for(i=7; i < 12; i++ ) { + printk(":%02x", frame[i] &0xff); + } + printk(" [%02x%02x]\n", frame[12], frame[13]); + + for(i=14; i < len; i++ ) { + printk("%02x ", frame[i] &0xff); + if ( (i%10)==0) printk("\n"); + } + printk("\n"); +} + + +/* + * Function used to transmit of frame, very last one on the path before + * going to the simulator. + */ +static int +simeth_tx(struct sk_buff *skb, struct net_device *dev) +{ + struct simeth_local *local = (struct simeth_local *)dev->priv; + +#if 0 + /* ensure we have at least ETH_ZLEN bytes (min frame size) */ + unsigned int length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; + /* Where do the extra padding bytes comes from inthe skbuff ? */ +#else + /* the real driver in the host system is going to take care of that + * or maybe it's the NIC itself. + */ + unsigned int length = skb->len; +#endif + + local->stats.tx_bytes += skb->len; + local->stats.tx_packets++; + + + if (simeth_debug > 5) frame_print("simeth_tx", skb->data, length); + + netdev_send(local->simfd, skb->data, length); + + /* + * we are synchronous on write, so we don't simulate a + * trasnmit complete interrupt, thus we don't need to arm a tx + */ + + dev_kfree_skb(skb); + return 0; +} + +static inline struct sk_buff * +make_new_skb(struct net_device *dev) +{ + struct sk_buff *nskb; + + /* + * The +2 is used to make sure that the IP header is nicely + * aligned (on 4byte boundary I assume 14+2=16) + */ + nskb = dev_alloc_skb(SIMETH_FRAME_SIZE + 2); + if ( nskb == NULL ) { + printk(KERN_NOTICE "%s: memory squeeze. dropping packet.\n", dev->name); + return NULL; + } + nskb->dev = dev; + + skb_reserve(nskb, 2); /* Align IP on 16 byte boundaries */ + + skb_put(nskb,SIMETH_FRAME_SIZE); + + return nskb; +} + +/* + * called from interrupt handler to process a received frame + */ +static int +simeth_rx(struct net_device *dev) +{ + struct simeth_local *local; + struct sk_buff *skb; + int len; + int rcv_count = SIMETH_RECV_MAX; + + local = (struct simeth_local *)dev->priv; + /* + * the loop concept has been borrowed from other drivers + * looks to me like it's a throttling thing to avoid pushing to many + * packets at one time into the stack. Making sure we can process them + * upstream and make forward progress overall + */ + do { + if ( (skb=make_new_skb(dev)) == NULL ) { + printk(KERN_NOTICE "%s: memory squeeze. dropping packet.\n", dev->name); + local->stats.rx_dropped++; + return 0; + } + /* + * Read only one frame at a time + */ + len = netdev_read(local->simfd, skb->data, SIMETH_FRAME_SIZE); + if ( len == 0 ) { + if ( simeth_debug > 0 ) printk(KERN_WARNING "%s: count=%d netdev_read=0\n", dev->name, SIMETH_RECV_MAX-rcv_count); + break; + } +#if 0 + /* + * XXX Fix me + * Should really do a csum+copy here + */ + memcpy(skb->data, frame, len); +#endif + skb->protocol = eth_type_trans(skb, dev); + + if ( simeth_debug > 6 ) frame_print("simeth_rx", skb->data, len); + + /* + * push the packet up & trigger software interrupt + */ + netif_rx(skb); + + local->stats.rx_packets++; + local->stats.rx_bytes += len; + + } while ( --rcv_count ); + + return len; /* 0 = nothing left to read, otherwise, we can try again */ +} + +/* + * Interrupt handler (Yes, we can do it too !!!) + */ +static void +simeth_interrupt(int irq, void *dev_id, struct pt_regs * regs) +{ + struct net_device *dev = dev_id; + + if ( dev == NULL ) { + printk(KERN_WARNING "simeth: irq %d for unknown device\n", irq); + return; + } + + /* + * very simple loop because we get interrupts only when receving + */ + while (simeth_rx(dev)); +} + +static struct net_device_stats * +simeth_get_stats(struct net_device *dev) +{ + struct simeth_local *local = (struct simeth_local *) dev->priv; + + return &local->stats; +} + +/* fake multicast ability */ +static void +set_multicast_list(struct net_device *dev) +{ + printk(KERN_WARNING "%s: set_multicast_list called\n", dev->name); +} + +#ifdef CONFIG_NET_FASTROUTE +static int +simeth_accept_fastpath(struct net_device *dev, struct dst_entry *dst) +{ + printk(KERN_WARNING "%s: simeth_accept_fastpath called\n", dev->name); + return -1; +} +#endif + + +#ifdef MODULE +static int +simeth_init(void) +{ + unsigned int cards_found = 0; + + /* iterate over probe */ + + while ( simeth_probe1() == 0 ) cards_found++; + + return cards_found ? 0 : -ENODEV; +} + + +int +init_module(void) +{ + simeth_dev = NULL; + + /* the register_netdev is done "indirectly by ether_initdev() */ + + return simeth_init(); +} + +void +cleanup_module(void) +{ + struct net_device *next; + + while ( simeth_dev ) { + + next = ((struct simeth_private *)simeth_dev->priv)->next_module; + + unregister_netdev(simeth_dev); + + kfree(simeth_dev); + + simeth_dev = next; + } + /* + * XXX fix me + * not clean wihen multiple devices + */ + unregister_netdevice_notifier(&simeth_dev_notifier); +} +#else /* !MODULE */ +__initcall(simeth_probe); +#endif /* !MODULE */ diff -urN linux-2.4.0-test9/drivers/scsi/Makefile linux-2.4.0-test9-lia/drivers/scsi/Makefile --- linux-2.4.0-test9/drivers/scsi/Makefile Wed Oct 4 16:53:26 2000 +++ linux-2.4.0-test9-lia/drivers/scsi/Makefile Wed Oct 4 21:30:21 2000 @@ -51,6 +51,7 @@ obj-$(CONFIG_SUN3_SCSI) += sun3_scsi.o obj-$(CONFIG_MVME16x_SCSI) += mvme16x.o 53c7xx.o obj-$(CONFIG_BVME6000_SCSI) += bvme6000.o 53c7xx.o +obj-$(CONFIG_SCSI_SIM) += simscsi.o obj-$(CONFIG_SCSI_SIM710) += sim710.o obj-$(CONFIG_SCSI_ADVANSYS) += advansys.o obj-$(CONFIG_SCSI_PCI2000) += pci2000.o @@ -122,7 +123,7 @@ scsicam.o scsi_proc.o scsi_error.o \ scsi_obsolete.o scsi_queue.o scsi_lib.o \ scsi_merge.o scsi_dma.o scsi_scan.o \ - + sr_mod-objs := sr.o sr_ioctl.o sr_vendor.o initio-objs := ini9100u.o i91uscsi.o a100u2w-objs := inia100.o i60uscsi.o diff -urN linux-2.4.0-test9/drivers/scsi/ql12160_fw.h linux-2.4.0-test9-lia/drivers/scsi/ql12160_fw.h --- linux-2.4.0-test9/drivers/scsi/ql12160_fw.h Mon Feb 7 19:45:28 2000 +++ linux-2.4.0-test9-lia/drivers/scsi/ql12160_fw.h Fri Sep 8 16:30:48 2000 @@ -1,56 +1,93 @@ /* + ************************************************************************ + * * + * --- ISP12160 Initiator Firmware --- * + * 32 LUN Support * + * * + ************************************************************************ + * * + * Copyright (C) 1999,2000 Qlogic, Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted provided + * that the following conditions are met: + * 1. Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products + + * 2. Redistribution in binary form must reproduce the above copyright + + * notice, this list of conditions and the following disclaimer in the + + * documentation and/or other materials provided with the distribution. + + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * * + ************************************************************************ + */ + /* - * Firmware Version 10.01.19 (12:38 Oct 12, 1999) + * Firmware Version 10.04.08 (11:30 May 31, 2000) */ #ifdef UNIQUE_FW_NAME -unsigned short fw12160i_version = 10*1024+1; +unsigned short fw12160i_version = 10*1024+4; #else -unsigned short risc_code_version = 10*1024+1; +unsigned short risc_code_version = 10*1024+4; #endif #ifdef UNIQUE_FW_NAME -unsigned char fw12160i_version_str[] = {10,1,19}; +unsigned char fw12160i_version_str[] = {10,4,8}; #else -unsigned char firmware_version[] = {10,1,19}; +unsigned char firmware_version[] = {10,4,8}; #endif #ifdef UNIQUE_FW_NAME -#define fw12160i_VERSION_STRING "10.1.19" +#define fw12160i_VERSION_STRING "10.04.08" #else -#define FW_VERSION_STRING "10.1.19" +#define FW_VERSION_STRING "10.04.08" #endif #ifdef UNIQUE_FW_NAME @@ -64,1326 +101,1383 @@ #else unsigned short risc_code01[] = { #endif - 0x0804, 0x1041, 0x0000, 0x32f8, 0x0000, 0x2043, 0x4f50, 0x5952, + 0x0804, 0x1041, 0x0000, 0x34e5, 0x0000, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31, 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320, 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350, 0x3132, 0x3136, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, - 0x6572, 0x7369, 0x6f6e, 0x2031, 0x302e, 0x3031, 0x2020, 0x2043, + 0x6572, 0x7369, 0x6f6e, 0x2031, 0x302e, 0x3034, 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020, - 0x2400, 0x20c9, 0x8cff, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2001, + 0x2400, 0x20c9, 0x8eff, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1120, 0x2071, 0x0100, 0x70a0, 0x70a2, - 0x20c1, 0x0020, 0x2089, 0x1223, 0x2071, 0x0010, 0x70c3, 0x0004, + 0x20c1, 0x0020, 0x2089, 0x1221, 0x2071, 0x0010, 0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x000a, 0x2001, 0x04fd, 0x2004, 0x70d6, 0x2009, 0xfeff, 0x2130, 0x2128, - 0xa1a2, 0x4300, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, - 0xa192, 0x8d00, 0x2009, 0x0000, 0x2001, 0x0032, 0x080c, 0x1d83, - 0x2218, 0x2079, 0x4300, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, + 0xa1a2, 0x4500, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, + 0xa192, 0x8f00, 0x2009, 0x0000, 0x2001, 0x0032, 0x080c, 0x1dcf, + 0x2218, 0x2079, 0x4500, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, 0x0040, 0x42a4, 0x8109, 0x1dd8, 0x2009, 0xff00, 0x3400, 0xa102, 0x0218, 0x0110, 0x20a8, 0x42a4, 0x781b, 0x0064, 0x7814, 0xc0cd, - 0xc0d5, 0x7816, 0x2071, 0x0200, 0x00d6, 0x2069, 0x4340, 0x080c, - 0x42d8, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1130, 0x2069, 0x4380, - 0x2071, 0x0100, 0x080c, 0x42d8, 0x7814, 0xc0d4, 0x7816, 0x00de, + 0xc0d5, 0x7816, 0x2071, 0x0200, 0x00d6, 0x2069, 0x4540, 0x080c, + 0x44bd, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1130, 0x2069, 0x4580, + 0x2071, 0x0100, 0x080c, 0x44bd, 0x7814, 0xc0d4, 0x7816, 0x00de, 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800, 0xc08d, 0x7802, 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002, 0x7827, 0x0002, - 0x2009, 0x0002, 0x2069, 0x4340, 0x681b, 0x0003, 0x6823, 0x0007, - 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, 0x6837, 0x0000, - 0x683b, 0x0006, 0x6833, 0x0008, 0x683f, 0x0000, 0x8109, 0x0500, - 0x68d3, 0x000a, 0x68c3, 0x43c0, 0x2079, 0x4300, 0x68d7, 0x762d, - 0x68c7, 0x48c0, 0x68cb, 0x47c0, 0x68cf, 0x88c0, 0x68ab, 0x8b44, - 0x68af, 0x8b49, 0x68b3, 0x8b44, 0x68b7, 0x8b44, 0x68a7, 0x0001, - 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x11c8, 0x2069, 0x4380, 0x0860, - 0x68d3, 0x000a, 0x68c3, 0x45c0, 0x68d7, 0x7839, 0x68c7, 0x68c0, - 0x68cb, 0x4840, 0x68cf, 0x89d0, 0x68ab, 0x8b49, 0x68af, 0x8b4e, - 0x68b3, 0x8b49, 0x68b7, 0x8b49, 0x68a7, 0x0001, 0x00e6, 0x2069, - 0x47c0, 0x2071, 0x0200, 0x70ec, 0xd0e4, 0x2019, 0x1c09, 0x2021, - 0x0009, 0x1120, 0x2019, 0x1c0c, 0x2021, 0x000c, 0x080c, 0x1cf3, - 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1188, 0x2069, 0x4840, 0x2071, - 0x0100, 0x70ec, 0xd0e4, 0x2019, 0x1c09, 0x2021, 0x0009, 0x1120, - 0x2019, 0x1c0c, 0x2021, 0x000c, 0x080c, 0x1cf3, 0x00ee, 0x2011, - 0x0002, 0x2069, 0x48c0, 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, - 0x0000, 0x680b, 0x0040, 0x7bc8, 0xa386, 0xfeff, 0x1128, 0x6817, - 0x0100, 0x681f, 0x0064, 0x0020, 0x6817, 0x0064, 0x681f, 0x0002, - 0xade8, 0x0010, 0x1f04, 0x1137, 0x8109, 0x1d38, 0x2001, 0x01ff, - 0x2004, 0xd0fc, 0x1128, 0x8211, 0x0118, 0x2069, 0x68c0, 0x08d8, - 0x080c, 0x2254, 0x080c, 0x3e39, 0x080c, 0x1b0f, 0x080c, 0x42a0, - 0x2091, 0x2200, 0x2079, 0x4300, 0x2071, 0x0050, 0x2091, 0x2400, - 0x2079, 0x4300, 0x2071, 0x0020, 0x2091, 0x2600, 0x2079, 0x0200, - 0x2071, 0x4340, 0x2091, 0x2800, 0x2079, 0x0100, 0x2071, 0x4380, - 0x2091, 0x2000, 0x2079, 0x4300, 0x2071, 0x0010, 0x3200, 0xa085, - 0x303d, 0x2090, 0x2071, 0x0010, 0x70c3, 0x0000, 0x1004, 0x118e, - 0x70c0, 0xa086, 0x0002, 0x1110, 0x080c, 0x13a3, 0x2039, 0x0000, - 0x080c, 0x129c, 0x78ac, 0xa005, 0x1180, 0x0e04, 0x119c, 0x786c, - 0xa065, 0x0110, 0x080c, 0x1ffe, 0x080c, 0x1da4, 0x0e04, 0x11b1, - 0x786c, 0xa065, 0x0110, 0x080c, 0x1ffe, 0x0e04, 0x11b1, 0x2009, - 0x4347, 0x2011, 0x4387, 0x2104, 0x220c, 0xa105, 0x0110, 0x080c, - 0x1c21, 0x2071, 0x4340, 0x70a4, 0xa005, 0x01e8, 0x7450, 0xa485, - 0x0000, 0x01c8, 0x2079, 0x0200, 0x2091, 0x8000, 0x72d4, 0xa28c, - 0x303d, 0x2190, 0x080c, 0x260d, 0x2091, 0x8000, 0x2091, 0x303d, - 0x0e04, 0x11d3, 0x2079, 0x4300, 0x786c, 0xa065, 0x0120, 0x2071, - 0x0010, 0x080c, 0x1ffe, 0x1d04, 0x11db, 0x2079, 0x4300, 0x2071, - 0x0010, 0x080c, 0x40ed, 0x2071, 0x4380, 0x70a4, 0xa005, 0x0188, - 0x7050, 0xa025, 0x0170, 0x2079, 0x0100, 0x2091, 0x8000, 0x72d4, - 0xa28c, 0x303d, 0x2190, 0x080c, 0x260d, 0x2091, 0x8000, 0x2091, - 0x303d, 0x2079, 0x4300, 0x2071, 0x0010, 0x0e04, 0x11fc, 0x786c, - 0xa065, 0x0110, 0x080c, 0x1ffe, 0x1d04, 0x1190, 0x080c, 0x40ed, - 0x0804, 0x1190, 0x3c00, 0xa084, 0x0007, 0x0002, 0x120e, 0x120e, - 0x1210, 0x1210, 0x1215, 0x1215, 0x121a, 0x121a, 0x080c, 0x243b, - 0x2091, 0x2400, 0x080c, 0x3e9c, 0x0005, 0x2091, 0x2200, 0x080c, - 0x3e9c, 0x0005, 0x2091, 0x2200, 0x080c, 0x3e9c, 0x2091, 0x2400, - 0x080c, 0x3e9c, 0x0005, 0x1243, 0x1243, 0x1244, 0x1244, 0x124f, - 0x124f, 0x124f, 0x124f, 0x1258, 0x1258, 0x1263, 0x1263, 0x124f, - 0x124f, 0x124f, 0x124f, 0x1272, 0x1272, 0x1272, 0x1272, 0x1272, - 0x1272, 0x1272, 0x1272, 0x1272, 0x1272, 0x1272, 0x1272, 0x1272, - 0x1272, 0x1272, 0x1272, 0x0cf8, 0x0006, 0x0106, 0x0126, 0x2091, - 0x2800, 0x080c, 0x2458, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, - 0x0106, 0x0126, 0x080c, 0x1202, 0x012e, 0x010e, 0x000e, 0x000d, - 0x0006, 0x0106, 0x0126, 0x2091, 0x2600, 0x080c, 0x2458, 0x012e, - 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126, 0x2091, 0x2600, - 0x080c, 0x2458, 0x2091, 0x2800, 0x080c, 0x2458, 0x012e, 0x010e, - 0x000e, 0x000d, 0x0006, 0x0106, 0x0126, 0x00e6, 0x00f6, 0x2079, - 0x4300, 0x2071, 0x0200, 0x2069, 0x4340, 0x3d00, 0xd08c, 0x1120, - 0x2069, 0x4380, 0x2071, 0x0100, 0x080c, 0x42d8, 0x00fe, 0x00ee, - 0x012e, 0x010e, 0x000e, 0x000d, 0x7008, 0x800b, 0x1240, 0x7007, - 0x0002, 0xa08c, 0x01e0, 0x1120, 0xd09c, 0x0108, 0x0887, 0x0897, - 0x70c3, 0x4002, 0x0804, 0x13a6, 0x0e04, 0x1308, 0x2061, 0x0000, - 0x6018, 0xd084, 0x1904, 0x1308, 0x7828, 0xa005, 0x1120, 0x0004, - 0x1309, 0x0804, 0x1308, 0xd0fc, 0x0148, 0x0006, 0x080c, 0x1aa9, - 0x000e, 0x0168, 0x2001, 0x4007, 0x0804, 0x13a5, 0x0006, 0x080c, - 0x1a9b, 0x000e, 0x0120, 0x2001, 0x4007, 0x0804, 0x13a5, 0x7910, - 0xd0fc, 0x1128, 0x2061, 0x4340, 0xc19c, 0xc7fc, 0x0020, 0x2061, - 0x4380, 0xc19d, 0xc7fd, 0x6064, 0xa005, 0x15d0, 0x7912, 0x6083, - 0x0000, 0x7828, 0xc0fc, 0xa086, 0x0018, 0x1120, 0x00c6, 0x080c, - 0x18c9, 0x00ce, 0x782b, 0x0000, 0x607c, 0xa065, 0x0190, 0x00c6, - 0x609c, 0x080c, 0x1b76, 0x00ce, 0x609f, 0x0000, 0x080c, 0x19db, - 0x2009, 0x0018, 0x6087, 0x0103, 0x080c, 0x1ab7, 0x1198, 0x080c, - 0x1b02, 0x7810, 0xd09c, 0x1118, 0x2061, 0x4340, 0x0020, 0x2061, - 0x4380, 0xc09c, 0x7812, 0x607f, 0x0000, 0x60d4, 0xd0c4, 0x0130, - 0xc0c4, 0x60d6, 0x2001, 0x4005, 0x0804, 0x13a5, 0x0804, 0x13a3, - 0x0005, 0xa006, 0x70c2, 0x70c6, 0x70ca, 0x70ce, 0x70da, 0x70c0, - 0xa08a, 0x0040, 0x1a04, 0x1355, 0x0002, 0x13a3, 0x13f1, 0x13bf, - 0x1425, 0x1459, 0x1459, 0x13b7, 0x19f3, 0x1463, 0x13b1, 0x13c3, - 0x13c4, 0x13c5, 0x13c6, 0x19f7, 0x13b1, 0x1470, 0x14c5, 0x18e4, - 0x19ed, 0x13c7, 0x1795, 0x17cb, 0x17fa, 0x183d, 0x1752, 0x175f, - 0x1772, 0x1784, 0x159a, 0x13b1, 0x14f7, 0x1502, 0x1510, 0x151e, - 0x1535, 0x1543, 0x1546, 0x1554, 0x1562, 0x156c, 0x1580, 0x158c, - 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x15a7, 0x15b8, 0x15d2, 0x1606, - 0x162f, 0x1641, 0x1644, 0x1677, 0x16aa, 0x16bc, 0x1720, 0x1730, - 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x1742, 0x2100, 0xa08a, 0x0040, - 0x1a04, 0x13b1, 0x0002, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, - 0x1a19, 0x1a1f, 0x13b1, 0x13b1, 0x13b1, 0x1a23, 0x1a63, 0x13b1, - 0x13b1, 0x13b1, 0x13b1, 0x13ec, 0x1454, 0x146b, 0x14c0, 0x18df, - 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x1a67, 0x1a0b, 0x1a15, 0x13b1, - 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, - 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, - 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, - 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, 0x13b1, - 0x13b1, 0x13b1, 0x13b1, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0028, - 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0e04, 0x13a6, + 0x2009, 0x0002, 0x2069, 0x4540, 0x681b, 0x0003, 0x6823, 0x0007, + 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, 0x6837, 0x0006, + 0x6833, 0x0008, 0x683b, 0x0000, 0x8109, 0x0500, 0x68cf, 0x000a, + 0x68bf, 0x45c0, 0x2079, 0x4500, 0x68d3, 0x762d, 0x68c3, 0x4ac0, + 0x68c7, 0x49c0, 0x68cb, 0x8ac0, 0x68a7, 0x8d44, 0x68ab, 0x8d49, + 0x68af, 0x8d44, 0x68b3, 0x8d44, 0x68a3, 0x0001, 0x2001, 0x01ff, + 0x2004, 0xd0fc, 0x11c8, 0x2069, 0x4580, 0x0870, 0x68cf, 0x000a, + 0x68bf, 0x47c0, 0x68d3, 0x7839, 0x68c3, 0x6ac0, 0x68c7, 0x4a40, + 0x68cb, 0x8bd0, 0x68a7, 0x8d49, 0x68ab, 0x8d4e, 0x68af, 0x8d49, + 0x68b3, 0x8d49, 0x68a3, 0x0001, 0x00e6, 0x2069, 0x49c0, 0x2071, + 0x0200, 0x70ec, 0xd0e4, 0x2019, 0x1c09, 0x2021, 0x0009, 0x1120, + 0x2019, 0x1c0c, 0x2021, 0x000c, 0x080c, 0x1d3f, 0x2001, 0x01ff, + 0x2004, 0xd0fc, 0x1188, 0x2069, 0x4a40, 0x2071, 0x0100, 0x70ec, + 0xd0e4, 0x2019, 0x1c09, 0x2021, 0x0009, 0x1120, 0x2019, 0x1c0c, + 0x2021, 0x000c, 0x080c, 0x1d3f, 0x00ee, 0x2011, 0x0002, 0x2069, + 0x4ac0, 0x2009, 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, + 0x0040, 0x7bc8, 0xa386, 0xfeff, 0x1128, 0x6817, 0x0100, 0x681f, + 0x0064, 0x0020, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, + 0x1f04, 0x1135, 0x8109, 0x1d38, 0x2001, 0x01ff, 0x2004, 0xd0fc, + 0x1128, 0x8211, 0x0118, 0x2069, 0x6ac0, 0x08d8, 0x080c, 0x22b7, + 0x080c, 0x3fba, 0x080c, 0x1b51, 0x080c, 0x4489, 0x2091, 0x2200, + 0x2079, 0x4500, 0x2071, 0x0050, 0x2091, 0x2400, 0x2079, 0x4500, + 0x2071, 0x0020, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x4540, + 0x2091, 0x2800, 0x2079, 0x0100, 0x2071, 0x4580, 0x2091, 0x2000, + 0x2079, 0x4500, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090, + 0x2071, 0x0010, 0x70c3, 0x0000, 0x1004, 0x118c, 0x70c0, 0xa086, + 0x0002, 0x1110, 0x080c, 0x13b3, 0x2039, 0x0000, 0x080c, 0x12ab, + 0x78ac, 0xa005, 0x1180, 0x0e04, 0x119a, 0x786c, 0xa065, 0x0110, + 0x080c, 0x2061, 0x080c, 0x1df0, 0x0e04, 0x11af, 0x786c, 0xa065, + 0x0110, 0x080c, 0x2061, 0x0e04, 0x11af, 0x2009, 0x4547, 0x2011, + 0x4587, 0x2104, 0x220c, 0xa105, 0x0110, 0x080c, 0x1c63, 0x2071, + 0x4540, 0x70a0, 0xa005, 0x01e8, 0x744c, 0xa485, 0x0000, 0x01c8, + 0x2079, 0x0200, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d, 0x2190, + 0x080c, 0x26ff, 0x2091, 0x8000, 0x2091, 0x303d, 0x0e04, 0x11d1, + 0x2079, 0x4500, 0x786c, 0xa065, 0x0120, 0x2071, 0x0010, 0x080c, + 0x2061, 0x1d04, 0x11d9, 0x2079, 0x4500, 0x2071, 0x0010, 0x080c, + 0x42c7, 0x2071, 0x4580, 0x70a0, 0xa005, 0x0188, 0x704c, 0xa025, + 0x0170, 0x2079, 0x0100, 0x2091, 0x8000, 0x72d0, 0xa28c, 0x303d, + 0x2190, 0x080c, 0x26ff, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079, + 0x4500, 0x2071, 0x0010, 0x0e04, 0x11fa, 0x786c, 0xa065, 0x0110, + 0x080c, 0x2061, 0x1d04, 0x118e, 0x080c, 0x42c7, 0x0804, 0x118e, + 0x3c00, 0xa084, 0x0007, 0x0002, 0x120c, 0x120c, 0x120e, 0x120e, + 0x1213, 0x1213, 0x1218, 0x1218, 0x080c, 0x252b, 0x2091, 0x2400, + 0x080c, 0x4052, 0x0005, 0x2091, 0x2200, 0x080c, 0x4052, 0x0005, + 0x2091, 0x2200, 0x080c, 0x4052, 0x2091, 0x2400, 0x080c, 0x4052, + 0x0005, 0x1241, 0x1241, 0x1242, 0x1242, 0x124d, 0x124d, 0x124d, + 0x124d, 0x1256, 0x1256, 0x1261, 0x1261, 0x124d, 0x124d, 0x124d, + 0x124d, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, + 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, 0x1270, + 0x1270, 0x0cf8, 0x0006, 0x0106, 0x0126, 0x2091, 0x2800, 0x080c, + 0x2548, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, 0x0126, + 0x080c, 0x1200, 0x012e, 0x010e, 0x000e, 0x000d, 0x0006, 0x0106, + 0x0126, 0x2091, 0x2600, 0x080c, 0x2548, 0x012e, 0x010e, 0x000e, + 0x000d, 0x0006, 0x0106, 0x0126, 0x2091, 0x2600, 0x080c, 0x2548, + 0x2091, 0x2800, 0x080c, 0x2548, 0x012e, 0x010e, 0x000e, 0x000d, + 0x0006, 0x0106, 0x0126, 0x00d6, 0x00e6, 0x00f6, 0x2079, 0x4500, + 0x2071, 0x0200, 0x2069, 0x4540, 0x3d00, 0xd08c, 0x0130, 0x70ec, + 0xa084, 0x1c00, 0x78e2, 0x080c, 0x44bd, 0x3d00, 0xd084, 0x0150, + 0x2069, 0x4580, 0x2071, 0x0100, 0x70ec, 0xa084, 0x1c00, 0x78e6, + 0x080c, 0x44bd, 0x080c, 0x24dc, 0x00fe, 0x00ee, 0x00de, 0x012e, + 0x010e, 0x000e, 0x000d, 0x7008, 0x800b, 0x1240, 0x7007, 0x0002, + 0xa08c, 0x01e0, 0x1120, 0xd09c, 0x0108, 0x0887, 0x0897, 0x70c3, + 0x4002, 0x0804, 0x13b6, 0x0e04, 0x1317, 0x2061, 0x0000, 0x6018, + 0xd084, 0x1904, 0x1317, 0x7828, 0xa005, 0x1120, 0x0004, 0x1318, + 0x0804, 0x1317, 0xd0fc, 0x0148, 0x0006, 0x080c, 0x1aeb, 0x000e, + 0x0168, 0x2001, 0x4007, 0x0804, 0x13b5, 0x0006, 0x080c, 0x1add, + 0x000e, 0x0120, 0x2001, 0x4007, 0x0804, 0x13b5, 0x7910, 0xd0fc, + 0x1128, 0x2061, 0x4540, 0xc19c, 0xc7fc, 0x0020, 0x2061, 0x4580, + 0xc19d, 0xc7fd, 0x6060, 0xa005, 0x15d0, 0x7912, 0x607f, 0x0000, + 0x7828, 0xc0fc, 0xa086, 0x0018, 0x1120, 0x00c6, 0x080c, 0x190a, + 0x00ce, 0x782b, 0x0000, 0x6078, 0xa065, 0x0190, 0x00c6, 0x609c, + 0x080c, 0x1bb8, 0x00ce, 0x609f, 0x0000, 0x080c, 0x1a1b, 0x2009, + 0x0018, 0x6087, 0x0103, 0x080c, 0x1af9, 0x1198, 0x080c, 0x1b44, + 0x7810, 0xd09c, 0x1118, 0x2061, 0x4540, 0x0020, 0x2061, 0x4580, + 0xc09c, 0x7812, 0x607b, 0x0000, 0x60d0, 0xd0c4, 0x0130, 0xc0c4, + 0x60d2, 0x2001, 0x4005, 0x0804, 0x13b5, 0x0804, 0x13b3, 0x0005, + 0xa006, 0x70c2, 0x70c6, 0x70ca, 0x70ce, 0x70da, 0x70c0, 0xa03d, + 0xa08a, 0x0040, 0x1a04, 0x1365, 0x0002, 0x13b3, 0x1401, 0x13cf, + 0x1435, 0x1469, 0x1469, 0x13c7, 0x1a33, 0x1473, 0x13c1, 0x13d3, + 0x13d4, 0x13d5, 0x13d6, 0x1a37, 0x13c1, 0x1480, 0x14d5, 0x1925, + 0x1a2d, 0x13d7, 0x17b4, 0x17ea, 0x1819, 0x185c, 0x1771, 0x177e, + 0x1791, 0x17a3, 0x15aa, 0x13c1, 0x1507, 0x1512, 0x1520, 0x152e, + 0x1545, 0x1553, 0x1556, 0x1564, 0x1572, 0x157c, 0x1590, 0x159c, + 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x15b7, 0x15c8, 0x15e2, 0x1616, + 0x163f, 0x1651, 0x1654, 0x167f, 0x16b8, 0x16ca, 0x173f, 0x174f, + 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x1761, 0x2100, 0xa08a, 0x0040, + 0x1a04, 0x13c1, 0x0002, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, + 0x1a59, 0x1a5f, 0x13c1, 0x13c1, 0x13c1, 0x1a63, 0x1aa3, 0x13c1, + 0x13c1, 0x13c1, 0x13c1, 0x13fc, 0x1464, 0x147b, 0x14d0, 0x1920, + 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x1aa7, 0x1a4b, 0x1a55, 0x18ef, + 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, + 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, + 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, + 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, 0x13c1, + 0x13c1, 0x13c1, 0x13c1, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0028, + 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0e04, 0x13b6, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x0005, 0x70c3, 0x4001, 0x0c90, 0x70c3, 0x4006, 0x0c78, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0c20, 0x70c4, 0x70c3, 0x0004, 0x0807, 0x08f8, 0x08f0, 0x08e8, 0x08e0, 0x2091, 0x8000, 0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, - 0x2020, 0x70d3, 0x000a, 0x2001, 0x0001, 0x70d6, 0x2079, 0x0000, + 0x2020, 0x70d3, 0x000a, 0x2001, 0x0004, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051, 0x0445, 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091, 0x4080, 0x0804, 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018, 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2099, 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, - 0x721e, 0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0904, 0x13a3, + 0x721e, 0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0904, 0x13b3, 0xa182, 0x0040, 0x1210, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x7007, 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0de8, 0x7007, - 0x0002, 0xa084, 0x01e0, 0x0120, 0x70c3, 0x4002, 0x0804, 0x13a6, - 0x24a8, 0x53a5, 0x0c10, 0x0804, 0x13a3, 0x2029, 0x0000, 0x2520, + 0x0002, 0xa084, 0x01e0, 0x0120, 0x70c3, 0x4002, 0x0804, 0x13b6, + 0x24a8, 0x53a5, 0x0c10, 0x0804, 0x13b3, 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x2098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x7007, 0x0006, 0x731a, 0x721e, 0x7422, 0x7526, 0x2021, - 0x0040, 0x7007, 0x0006, 0x81ff, 0x0904, 0x13a3, 0xa182, 0x0040, + 0x0040, 0x7007, 0x0006, 0x81ff, 0x0904, 0x13b3, 0xa182, 0x0040, 0x1210, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0de8, 0xa084, 0x01e0, 0x0d48, - 0x70c3, 0x4002, 0x0804, 0x13a6, 0x75d8, 0x74dc, 0x75da, 0x74de, + 0x70c3, 0x4002, 0x0804, 0x13b6, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0878, 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x1108, 0x200a, - 0x72ca, 0x0804, 0x13a2, 0x70c7, 0x000a, 0x70cb, 0x0001, 0x70cf, - 0x0013, 0x0804, 0x13a3, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0018, + 0x72ca, 0x0804, 0x13b2, 0x70c7, 0x000a, 0x70cb, 0x0004, 0x70cf, + 0x0008, 0x0804, 0x13b3, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x05f0, 0xa40a, 0x0110, 0x1a04, - 0x13a5, 0x8001, 0x7872, 0xa084, 0xfc00, 0x0138, 0x78ac, 0xc085, - 0x78ae, 0x2001, 0x4005, 0x0804, 0x13a5, 0x7b7e, 0x7a7a, 0x7e86, + 0x13b5, 0x8001, 0x7872, 0xa084, 0xfc00, 0x0138, 0x78ac, 0xc085, + 0x78ae, 0x2001, 0x4005, 0x0804, 0x13b5, 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76, 0xa48c, 0xff00, 0x0170, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f, 0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, 0x0050, 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605, 0x0118, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, - 0xfffc, 0x78ae, 0x0018, 0x78ac, 0xc085, 0x78ae, 0x0804, 0x13a3, + 0xfffc, 0x78ae, 0x0018, 0x78ac, 0xc085, 0x78ae, 0x0804, 0x13b3, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0018, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, - 0xa005, 0x0500, 0xa40a, 0x0110, 0x1a04, 0x13a5, 0x8001, 0x7892, + 0xa005, 0x0500, 0xa40a, 0x0110, 0x1a04, 0x13b5, 0x8001, 0x7892, 0xa084, 0xfc00, 0x0138, 0x78ac, 0xc0c5, 0x78ae, 0x2001, 0x4005, - 0x0804, 0x13a5, 0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x2600, 0xa505, + 0x0804, 0x13b5, 0x7a9a, 0x7b9e, 0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0118, 0x7a10, 0xc2c5, 0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, - 0x78ae, 0x0018, 0x78ac, 0xc0c5, 0x78ae, 0x0804, 0x13a3, 0x2009, + 0x78ae, 0x0018, 0x78ac, 0xc0c5, 0x78ae, 0x0804, 0x13b3, 0x2009, 0x0000, 0x786c, 0xa065, 0x0118, 0x8108, 0x6000, 0x0cd8, 0x7ac4, - 0x0804, 0x13a1, 0x2009, 0x4348, 0x210c, 0x2001, 0x01ff, 0x2004, - 0xd0fc, 0x1904, 0x13a2, 0x2011, 0x4388, 0x2214, 0x0804, 0x13a1, - 0x2009, 0x4349, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, - 0x13a2, 0x2011, 0x4389, 0x2214, 0x0804, 0x13a1, 0x2061, 0x4340, + 0x0804, 0x13b1, 0x2009, 0x4548, 0x210c, 0x2001, 0x01ff, 0x2004, + 0xd0fc, 0x1904, 0x13b2, 0x2011, 0x4588, 0x2214, 0x0804, 0x13b1, + 0x2009, 0x4549, 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, + 0x13b2, 0x2011, 0x4589, 0x2214, 0x0804, 0x13b1, 0x2061, 0x4540, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x2001, 0x01ff, 0x2004, - 0xd0fc, 0x1148, 0x2061, 0x4380, 0x6328, 0x73da, 0x632c, 0x831c, - 0x831c, 0x831c, 0x73de, 0x0804, 0x13a1, 0x2009, 0x434c, 0x210c, - 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13a2, 0x2011, 0x438c, - 0x2214, 0x0804, 0x13a1, 0x7918, 0x0804, 0x13a2, 0x2009, 0x434d, - 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13a2, 0x2011, - 0x438d, 0x2214, 0x0804, 0x13a1, 0x2009, 0x434e, 0x210c, 0x2001, - 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13a2, 0x2011, 0x438e, 0x2214, - 0x0804, 0x13a1, 0x7920, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, - 0x13a2, 0x7a24, 0x0804, 0x13a1, 0x2011, 0x4840, 0x71c4, 0xd1fc, - 0x1110, 0x2011, 0x47c0, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, - 0x8003, 0xa268, 0x6a00, 0x6b08, 0x6c1c, 0x74da, 0x0804, 0x13a0, - 0x77c4, 0x080c, 0x1b1d, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, - 0x8001, 0x2708, 0x0804, 0x13a0, 0x2061, 0x4340, 0x6118, 0x2001, - 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13a2, 0x2061, 0x4380, 0x6218, - 0x0804, 0x13a1, 0x77c4, 0x080c, 0x1b1d, 0x2091, 0x8000, 0x6908, - 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, 0x0804, 0x13a0, 0x71c4, - 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x1a04, 0x139c, 0x080c, - 0x230e, 0xa384, 0x4000, 0x0110, 0xa295, 0x0020, 0x0804, 0x13a0, - 0x71c4, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x1a04, 0x139c, 0xd1bc, - 0x1120, 0x2011, 0x4348, 0x2204, 0x0020, 0x2011, 0x4388, 0x2204, - 0xc0bd, 0x0006, 0x2100, 0xc0bc, 0x2012, 0x080c, 0x22b4, 0x001e, - 0x0804, 0x13a2, 0x71c4, 0x2021, 0x4349, 0x2404, 0x70c6, 0x2019, - 0x0000, 0x0030, 0x71c8, 0x2021, 0x4389, 0x2404, 0x70ca, 0xc3fd, - 0x2011, 0x15fe, 0x20a9, 0x0008, 0x2204, 0xa106, 0x0138, 0x8210, - 0x1f04, 0x15e4, 0x71c4, 0x72c8, 0x0804, 0x139b, 0xa292, 0x15fe, - 0x0026, 0x2122, 0x001e, 0x080c, 0x22c6, 0x2001, 0x01ff, 0x2004, - 0xd0fc, 0x1110, 0xd3fc, 0x09f0, 0x0804, 0x13a3, 0x03e8, 0x00fa, - 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x4340, + 0xd0fc, 0x1148, 0x2061, 0x4580, 0x6328, 0x73da, 0x632c, 0x831c, + 0x831c, 0x831c, 0x73de, 0x0804, 0x13b1, 0x2009, 0x454c, 0x210c, + 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b2, 0x2011, 0x458c, + 0x2214, 0x0804, 0x13b1, 0x7918, 0x0804, 0x13b2, 0x2009, 0x0202, + 0x210c, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b2, 0x2011, + 0x0102, 0x2214, 0x0804, 0x13b1, 0x2009, 0x454d, 0x210c, 0x2001, + 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b2, 0x2011, 0x458d, 0x2214, + 0x0804, 0x13b1, 0x7920, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, + 0x13b2, 0x7a24, 0x0804, 0x13b1, 0x2011, 0x4a40, 0x71c4, 0xd1fc, + 0x1110, 0x2011, 0x49c0, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, + 0x8003, 0xa268, 0x6a00, 0x6b08, 0x6c1c, 0x74da, 0x0804, 0x13b0, + 0x77c4, 0x080c, 0x1b5f, 0x2091, 0x8000, 0x6b1c, 0x6a14, 0x2091, + 0x8001, 0x2708, 0x0804, 0x13b0, 0x2061, 0x4540, 0x6118, 0x2001, + 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13b2, 0x2061, 0x4580, 0x6218, + 0x0804, 0x13b1, 0x77c4, 0x080c, 0x1b5f, 0x2091, 0x8000, 0x6908, + 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, 0x0804, 0x13b0, 0x71c4, + 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x1a04, 0x13ac, 0x080c, + 0x2373, 0xa384, 0x4000, 0x0110, 0xa295, 0x0020, 0x0804, 0x13b0, + 0x71c4, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x1a04, 0x13ac, 0xd1bc, + 0x1120, 0x2011, 0x4548, 0x2204, 0x0020, 0x2011, 0x4588, 0x2204, + 0xc0bd, 0x0006, 0x2100, 0xc0bc, 0x2012, 0x080c, 0x2319, 0x001e, + 0x0804, 0x13b2, 0x71c4, 0x2021, 0x4549, 0x2404, 0x70c6, 0x2019, + 0x0000, 0x0030, 0x71c8, 0x2021, 0x4589, 0x2404, 0x70ca, 0xc3fd, + 0x2011, 0x160e, 0x20a9, 0x0008, 0x2204, 0xa106, 0x0138, 0x8210, + 0x1f04, 0x15f4, 0x71c4, 0x72c8, 0x0804, 0x13ab, 0xa292, 0x160e, + 0x0026, 0x2122, 0x001e, 0x080c, 0x232b, 0x2001, 0x01ff, 0x2004, + 0xd0fc, 0x1110, 0xd3fc, 0x09f0, 0x0804, 0x13b3, 0x03e8, 0x00fa, + 0x01f4, 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x4540, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003, 0x8003, 0x602e, 0x2001, 0x01ff, 0x2004, 0xd0fc, - 0x11a0, 0x0026, 0x0016, 0x2061, 0x4380, 0x6128, 0x622c, 0x8214, + 0x11a0, 0x0026, 0x0016, 0x2061, 0x4580, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70d8, 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, - 0x602e, 0x71da, 0x72de, 0x001e, 0x002e, 0x0804, 0x13a1, 0x2061, - 0x4340, 0x6130, 0x70c4, 0x6032, 0x2001, 0x01ff, 0x2004, 0xd0fc, - 0x1904, 0x13a2, 0x2061, 0x4380, 0x6230, 0x70c8, 0x6032, 0x0804, - 0x13a1, 0x7918, 0x0804, 0x13a2, 0x71c4, 0xa184, 0xffcf, 0x0148, - 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x139c, 0x72c8, 0x0804, - 0x139b, 0x2011, 0x434d, 0x2204, 0x2112, 0x0006, 0x2019, 0x0000, - 0x080c, 0x2302, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x0118, 0x001e, - 0x0804, 0x13a2, 0x71c8, 0xa184, 0xffcf, 0x0128, 0x0006, 0x2110, - 0x71c4, 0x0804, 0x139b, 0x2011, 0x438d, 0x2204, 0x2112, 0x0006, - 0xc3fd, 0x080c, 0x2302, 0x002e, 0x001e, 0x0804, 0x13a1, 0x71c4, + 0x602e, 0x71da, 0x72de, 0x001e, 0x002e, 0x0804, 0x13b1, 0x2061, + 0x4540, 0x6130, 0x70c4, 0x6032, 0x2001, 0x01ff, 0x2004, 0xd0fc, + 0x1904, 0x13b2, 0x2061, 0x4580, 0x6230, 0x70c8, 0x6032, 0x0804, + 0x13b1, 0x7918, 0x0804, 0x13b2, 0x71c4, 0xa184, 0xf0cf, 0x0148, + 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x13ac, 0x72c8, 0x0804, + 0x13ab, 0x0006, 0x2019, 0x0000, 0x080c, 0x2367, 0x2001, 0x01ff, + 0x2004, 0xd0fc, 0x0118, 0x001e, 0x0804, 0x13b2, 0x71c8, 0xa184, + 0xf0cf, 0x0128, 0x0006, 0x2110, 0x71c4, 0x0804, 0x13ab, 0x0006, + 0xc3fd, 0x080c, 0x2367, 0x002e, 0x001e, 0x0804, 0x13b1, 0x71c4, 0xa182, 0x0010, 0x0248, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, - 0x139c, 0x72c8, 0x0804, 0x139b, 0x2011, 0x434e, 0x2204, 0x0006, - 0x2112, 0x2019, 0x0000, 0x080c, 0x22ef, 0x2001, 0x01ff, 0x2004, - 0xd0fc, 0x0118, 0x001e, 0x0804, 0x13a2, 0x71c8, 0xa182, 0x0010, - 0x0228, 0x0006, 0x2110, 0x71c4, 0x0804, 0x139b, 0x2011, 0x438e, - 0x2204, 0x0006, 0x2112, 0xc3fd, 0x080c, 0x22ef, 0x002e, 0x001e, - 0x0804, 0x13a1, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x1904, 0x139b, - 0xa284, 0xfffd, 0x1904, 0x139b, 0x2100, 0x7920, 0x7822, 0x2200, - 0x7a24, 0x7826, 0x0804, 0x13a1, 0x2011, 0x4840, 0x71c4, 0xd1fc, - 0x1110, 0x2011, 0x47c0, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, - 0x8003, 0xa268, 0x72c8, 0x73cc, 0x74d8, 0x71c6, 0x6800, 0x70ca, - 0x73ce, 0x74da, 0x2091, 0x8000, 0x6a02, 0xd2ac, 0x1118, 0x2021, - 0x0000, 0x0078, 0xa484, 0x00ff, 0xa082, 0x0002, 0x16e8, 0x843f, - 0xa7bc, 0x00ff, 0x0130, 0xa786, 0x0002, 0x15b0, 0xa484, 0x00ff, - 0x0598, 0x2061, 0x0200, 0xd1fc, 0x0110, 0x2061, 0x0100, 0x2029, - 0x0009, 0x2031, 0x0062, 0x843f, 0xa7bc, 0x00ff, 0x0130, 0x8307, - 0xa084, 0x00ff, 0x1110, 0xa73d, 0x11f8, 0x2041, 0x001d, 0x8307, - 0xa084, 0x00ff, 0x0150, 0xa842, 0x02b8, 0xa3bc, 0x00ff, 0x2500, - 0xa702, 0x0290, 0x2600, 0xa702, 0x1278, 0x2039, 0x003a, 0x6804, - 0xa705, 0x6806, 0x6b0a, 0x6b0c, 0x73ce, 0x681c, 0x70da, 0x6c1e, - 0x2091, 0x8001, 0x0804, 0x13a3, 0x2091, 0x8001, 0x0804, 0x139d, - 0x77c4, 0x080c, 0x1b1d, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, - 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0804, 0x13a0, - 0x70c4, 0x2061, 0x4340, 0x6118, 0x601a, 0x2001, 0x01ff, 0x2004, - 0xd0fc, 0x1904, 0x13a2, 0x70c8, 0x2061, 0x4380, 0x6218, 0x601a, - 0x0804, 0x13a1, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x1a04, - 0x139c, 0x080c, 0x2332, 0xa384, 0x4000, 0x0110, 0xa295, 0x0020, - 0x0804, 0x13a0, 0x77c4, 0x080c, 0x1b1d, 0x2091, 0x8000, 0x6a08, - 0xc28d, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0804, 0x13a1, 0x77c4, - 0x080c, 0x1b1d, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, - 0x6804, 0xa005, 0x0110, 0x080c, 0x2233, 0x2091, 0x8001, 0x2708, - 0x0804, 0x13a1, 0x77c4, 0x080c, 0x1b1d, 0x2091, 0x8000, 0x6a08, - 0xc295, 0x6a0a, 0x6804, 0xa005, 0x0110, 0x080c, 0x2233, 0x2091, - 0x8001, 0x2708, 0x0804, 0x13a1, 0x77c4, 0x2041, 0x0001, 0x2049, - 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x080c, 0x1b35, 0x2091, - 0x8001, 0x2708, 0x6a08, 0x0804, 0x13a1, 0x77c4, 0xd7fc, 0x0128, - 0x080c, 0x1aa9, 0x0138, 0x0804, 0x13a5, 0x080c, 0x1a9b, 0x0110, - 0x0804, 0x13a5, 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x080c, - 0x1bad, 0x11e8, 0x6818, 0xa005, 0x01a0, 0x2708, 0x0076, 0x080c, - 0x2351, 0x007e, 0x1170, 0x2001, 0x0015, 0xd7fc, 0x1118, 0x2061, - 0x4340, 0x0018, 0xc0fd, 0x2061, 0x4380, 0x782a, 0x2091, 0x8001, - 0x0005, 0x2091, 0x8001, 0x2001, 0x4005, 0x0804, 0x13a5, 0x2091, - 0x8001, 0x0804, 0x13a3, 0x77c4, 0xd7fc, 0x0128, 0x080c, 0x1aa9, - 0x0138, 0x0804, 0x13a5, 0x080c, 0x1a9b, 0x0110, 0x0804, 0x13a5, - 0x77c6, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, - 0x8000, 0x080c, 0x1b35, 0x2009, 0x0016, 0xd7fc, 0x1118, 0x2061, - 0x4340, 0x0018, 0x2061, 0x4380, 0xc1fd, 0x6067, 0x0003, 0x607f, - 0x0000, 0x6776, 0x6083, 0x000f, 0x792a, 0x080c, 0x2233, 0x2091, - 0x8001, 0x0005, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xd7fc, 0x0128, - 0x080c, 0x1aa9, 0x0138, 0x0804, 0x13a5, 0x080c, 0x1a9b, 0x0110, - 0x0804, 0x13a5, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2009, 0x0017, - 0xd7fc, 0x1118, 0x2061, 0x4340, 0x0018, 0x2061, 0x4380, 0xc1fd, - 0x607f, 0x0000, 0x6067, 0x0002, 0x6776, 0x6083, 0x000f, 0x792a, - 0x080c, 0x2233, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0005, - 0x2051, 0x0010, 0x2091, 0x8000, 0x70c8, 0xa005, 0x0118, 0x60d4, - 0xc0fd, 0x60d6, 0x080c, 0x1b35, 0x70c8, 0x6836, 0x8738, 0xa784, - 0x001f, 0x1dc0, 0x2091, 0x8001, 0x0005, 0x72c8, 0xd284, 0x0128, - 0x080c, 0x1aa9, 0x0138, 0x0804, 0x13a5, 0x080c, 0x1a9b, 0x0110, - 0x0804, 0x13a5, 0x72c8, 0x72ca, 0x78ac, 0xa084, 0x0003, 0x1508, - 0x2039, 0x0000, 0xd284, 0x0108, 0xc7fd, 0x2041, 0x0021, 0x2049, - 0x0004, 0x2051, 0x0008, 0x080c, 0x1b1d, 0x2091, 0x8000, 0x6808, - 0xc0d4, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, - 0x1d90, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, - 0x1d50, 0x2091, 0x8000, 0x72c8, 0x2069, 0x0100, 0xd284, 0x1110, - 0x2069, 0x0200, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, - 0x01b0, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, 0x0110, - 0x1f04, 0x1885, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, - 0x0110, 0x1f04, 0x188e, 0x20a9, 0x00fa, 0x1f04, 0x1895, 0x2079, - 0x4300, 0x2009, 0x0018, 0x72c8, 0xd284, 0x1118, 0x2061, 0x4340, - 0x0018, 0x2061, 0x4380, 0xc1fd, 0x792a, 0x6067, 0x0001, 0x6083, - 0x000f, 0x60a7, 0x0000, 0x60a8, 0x60b2, 0x60b6, 0x60d4, 0xd0b4, - 0x0160, 0xc0b4, 0x60d6, 0x00c6, 0x60b8, 0xa065, 0x6008, 0xc0d4, - 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, 0x60d4, 0xa084, 0x7eff, - 0x60d6, 0x78ac, 0xc08d, 0x78ae, 0x681b, 0x0054, 0x2091, 0x8001, - 0x0005, 0xd7fc, 0x1118, 0x2069, 0x4340, 0x0010, 0x2069, 0x4380, - 0x71c4, 0x71c6, 0x6916, 0x81ff, 0x1110, 0x68a7, 0x0001, 0x78ac, - 0xc08c, 0x78ae, 0xd084, 0x1110, 0x080c, 0x1c00, 0x0005, 0x75d8, - 0x74dc, 0x75da, 0x74de, 0x0018, 0x2029, 0x0000, 0x2520, 0x71c4, - 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x4300, 0x7dde, - 0x7cda, 0x7bd6, 0x7ad2, 0x080c, 0x1afa, 0x0904, 0x19d7, 0x20a9, - 0x0005, 0x20a1, 0x4314, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, - 0x2009, 0x0040, 0x080c, 0x1cbf, 0x0120, 0x080c, 0x1b02, 0x0804, - 0x19d7, 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x1120, 0x0006, - 0x080c, 0x1fe3, 0x000e, 0xa084, 0xff00, 0x8007, 0x8009, 0x0904, - 0x1981, 0x00c6, 0x2c68, 0x080c, 0x1afa, 0x05a8, 0x2c00, 0x689e, - 0x8109, 0x1dc0, 0x609f, 0x0000, 0x00ce, 0x00c6, 0x7ddc, 0x7cd8, - 0x7bd4, 0x7ad0, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, - 0xa5a9, 0x0000, 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x2c68, 0x689c, - 0xa065, 0x0904, 0x1980, 0x2009, 0x0040, 0x080c, 0x1cbf, 0x1550, - 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, 0x1168, 0x6004, 0xa084, - 0x00ff, 0xa086, 0x000a, 0x1120, 0x0016, 0x080c, 0x1fe0, 0x001e, - 0x2d00, 0x6002, 0x0898, 0x00ce, 0x00c6, 0x609c, 0x080c, 0x1b76, - 0x00ce, 0x609f, 0x0000, 0x080c, 0x19db, 0x2009, 0x0018, 0x6008, - 0xc0cd, 0x600a, 0x6004, 0x6086, 0x080c, 0x1ab7, 0x080c, 0x1b02, - 0x0804, 0x19d7, 0x00ce, 0x00c6, 0x609c, 0x080c, 0x1b76, 0x00ce, - 0x609f, 0x0000, 0x080c, 0x19db, 0x2009, 0x0018, 0x6087, 0x0103, - 0x601b, 0x0003, 0x080c, 0x1ab7, 0x080c, 0x1b02, 0x0804, 0x19d7, - 0x00ce, 0x6114, 0xd1fc, 0x0120, 0x080c, 0x1aa9, 0x01b8, 0x0018, - 0x080c, 0x1a9b, 0x0198, 0x2029, 0x0000, 0x2520, 0x2009, 0x0018, - 0x73c8, 0x72cc, 0x6087, 0x0103, 0x601b, 0x0021, 0x080c, 0x1ab7, - 0x080c, 0x1b02, 0x2001, 0x4007, 0x0804, 0x13a5, 0x74c4, 0x73c8, - 0x72cc, 0x6014, 0x2091, 0x8000, 0x00e6, 0x2009, 0x0012, 0xd0fc, - 0x1118, 0x2071, 0x4340, 0x0018, 0x2071, 0x4380, 0xc1fd, 0x792a, - 0x7067, 0x0005, 0x71d4, 0xa18c, 0xfe7f, 0x71d6, 0x736a, 0x726e, - 0x7472, 0x7076, 0x707b, 0x0000, 0x2c00, 0x707e, 0xa02e, 0x2530, - 0x611c, 0xa184, 0x0060, 0x0110, 0x080c, 0x3de5, 0x00ee, 0x6596, + 0x13ac, 0x72c8, 0x0804, 0x13ab, 0x2011, 0x454d, 0x2204, 0x0006, + 0x8104, 0x1208, 0x8108, 0x2112, 0x2019, 0x0000, 0x080c, 0x2354, + 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x0118, 0x001e, 0x0804, 0x13b2, + 0x71c8, 0xa182, 0x0010, 0x0228, 0x0006, 0x2110, 0x71c4, 0x0804, + 0x13ab, 0x2011, 0x458d, 0x2204, 0x0006, 0x8104, 0x1208, 0x8108, + 0x2112, 0xc3fd, 0x080c, 0x2354, 0x002e, 0x001e, 0x0804, 0x13b1, + 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x1904, 0x13ab, 0xa284, 0xfffd, + 0x1904, 0x13ab, 0x2100, 0x7920, 0x7822, 0x2200, 0x7a24, 0x7826, + 0x0804, 0x13b1, 0x2011, 0x4a40, 0x71c4, 0xd1fc, 0x1110, 0x2011, + 0x49c0, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, + 0x72c8, 0x73cc, 0x74d8, 0x71c6, 0x6800, 0x70ca, 0x73ce, 0x74da, + 0x2091, 0x8000, 0x6a02, 0xd2ac, 0x1118, 0x2021, 0x0000, 0x0090, + 0xa484, 0x00ff, 0xa082, 0x0002, 0x1a04, 0x173b, 0x843f, 0xa7bc, + 0x00ff, 0x0140, 0xa786, 0x0002, 0x1904, 0x173b, 0xa484, 0x00ff, + 0x0904, 0x173b, 0x2061, 0x0200, 0xd1fc, 0x0110, 0x2061, 0x0100, + 0x2029, 0x0009, 0x2031, 0x0062, 0x843f, 0xa7bc, 0x00ff, 0x0130, + 0x8307, 0xa084, 0x00ff, 0x1110, 0xa73d, 0x1138, 0x2041, 0x001d, + 0xa384, 0x00ff, 0xa082, 0x001a, 0x0210, 0xa4a4, 0x00ff, 0x8307, + 0xa084, 0x00ff, 0x0188, 0xa842, 0x02f0, 0xa086, 0x0010, 0x1120, + 0xa39c, 0x00ff, 0xa39d, 0x0f00, 0xa3bc, 0x00ff, 0x2500, 0xa702, + 0x0290, 0x2600, 0xa702, 0x1278, 0x2039, 0x003a, 0x6804, 0xa705, + 0x6806, 0x6b0a, 0x6b0c, 0x73ce, 0x681c, 0x70da, 0x6c1e, 0x2091, + 0x8001, 0x0804, 0x13b3, 0x2091, 0x8001, 0x0804, 0x13ad, 0x77c4, + 0x080c, 0x1b5f, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, + 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0804, 0x13b0, 0x70c4, + 0x2061, 0x4540, 0x6118, 0x601a, 0x2001, 0x01ff, 0x2004, 0xd0fc, + 0x1904, 0x13b2, 0x70c8, 0x2061, 0x4580, 0x6218, 0x601a, 0x0804, + 0x13b1, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x1a04, 0x13ac, + 0x080c, 0x2397, 0xa384, 0x4000, 0x0110, 0xa295, 0x0020, 0x0804, + 0x13b0, 0x77c4, 0x080c, 0x1b5f, 0x2091, 0x8000, 0x6a08, 0xc28d, + 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0804, 0x13b1, 0x77c4, 0x080c, + 0x1b5f, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, + 0xa005, 0x0110, 0x080c, 0x2296, 0x2091, 0x8001, 0x2708, 0x0804, + 0x13b1, 0x77c4, 0x080c, 0x1b5f, 0x2091, 0x8000, 0x6a08, 0xc295, + 0x6a0a, 0x6804, 0xa005, 0x0110, 0x080c, 0x2296, 0x2091, 0x8001, + 0x2708, 0x0804, 0x13b1, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, + 0x2051, 0x0020, 0x2091, 0x8000, 0x080c, 0x1b77, 0x2091, 0x8001, + 0x2708, 0x6a08, 0x0804, 0x13b1, 0x77c4, 0xd7fc, 0x0128, 0x080c, + 0x1aeb, 0x0138, 0x0804, 0x13b5, 0x080c, 0x1add, 0x0110, 0x0804, + 0x13b5, 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x080c, 0x1bef, + 0x11e8, 0x6818, 0xa005, 0x01a0, 0x2708, 0x0076, 0x080c, 0x23b6, + 0x007e, 0x1170, 0x2001, 0x0015, 0xd7fc, 0x1118, 0x2061, 0x4540, + 0x0018, 0xc0fd, 0x2061, 0x4580, 0x782a, 0x2091, 0x8001, 0x0005, + 0x2091, 0x8001, 0x2001, 0x4005, 0x0804, 0x13b5, 0x2091, 0x8001, + 0x0804, 0x13b3, 0x77c4, 0xd7fc, 0x0128, 0x080c, 0x1aeb, 0x0138, + 0x0804, 0x13b5, 0x080c, 0x1add, 0x0110, 0x0804, 0x13b5, 0x77c6, + 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, + 0x080c, 0x1b77, 0x2009, 0x0016, 0xd7fc, 0x1118, 0x2061, 0x4540, + 0x0018, 0x2061, 0x4580, 0xc1fd, 0x6063, 0x0003, 0x607b, 0x0000, + 0x6772, 0x607f, 0x000f, 0x792a, 0x080c, 0x2296, 0x2091, 0x8001, + 0x0005, 0x77c8, 0x77ca, 0x77c4, 0x77c6, 0xd7fc, 0x0128, 0x080c, + 0x1aeb, 0x0138, 0x0804, 0x13b5, 0x080c, 0x1add, 0x0110, 0x0804, + 0x13b5, 0xa7bc, 0xff00, 0x2091, 0x8000, 0x2009, 0x0017, 0xd7fc, + 0x1118, 0x2061, 0x4540, 0x0018, 0x2061, 0x4580, 0xc1fd, 0x607b, + 0x0000, 0x6063, 0x0002, 0x6772, 0x607f, 0x000f, 0x792a, 0x080c, + 0x2296, 0x2091, 0x8001, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, + 0x0010, 0x2091, 0x8000, 0x70c8, 0xa005, 0x0118, 0x60d0, 0xc0fd, + 0x60d2, 0x080c, 0x1b77, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, + 0x1dc0, 0x2091, 0x8001, 0x0005, 0x2019, 0x0000, 0x72c8, 0xd284, + 0x0128, 0x080c, 0x1aeb, 0x0138, 0x0804, 0x13b5, 0x080c, 0x1add, + 0x0110, 0x0804, 0x13b5, 0x72c8, 0x72ca, 0x78ac, 0xa084, 0x0003, + 0x1508, 0x2039, 0x0000, 0xd284, 0x0108, 0xc7fd, 0x2041, 0x0021, + 0x2049, 0x0004, 0x2051, 0x0008, 0x080c, 0x1b5f, 0x2091, 0x8000, + 0x6808, 0xc0d4, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, + 0x001f, 0x1d90, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, + 0x0f00, 0x1d50, 0x2091, 0x8000, 0x72c8, 0x2069, 0x0100, 0xd284, + 0x1110, 0x2069, 0x0200, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, + 0xd0b4, 0x01b0, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, + 0x0110, 0x1f04, 0x18a6, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, + 0xd084, 0x0110, 0x1f04, 0x18af, 0x20a9, 0x00fa, 0x1f04, 0x18b6, + 0x2079, 0x4500, 0x2009, 0x0018, 0x72c8, 0xd284, 0x1118, 0x2061, + 0x4540, 0x0018, 0x2061, 0x4580, 0xc1fd, 0x607b, 0x0000, 0x792a, + 0x6063, 0x0001, 0x607f, 0x000f, 0x60a3, 0x0000, 0x60a4, 0x60ae, + 0x60b2, 0x60d0, 0xd0b4, 0x0160, 0xc0b4, 0x60d2, 0x00c6, 0x60b4, + 0xa065, 0x6008, 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, + 0x60d0, 0xa084, 0x7eff, 0x60d2, 0x78ac, 0xc08d, 0x78ae, 0x83ff, + 0x0108, 0x0005, 0x681b, 0x0054, 0x2091, 0x8001, 0x0005, 0x73cc, + 0x080c, 0x185e, 0x69ec, 0x6a48, 0xa185, 0x1800, 0x684a, 0xa185, + 0x0040, 0x68ee, 0x73cc, 0x2021, 0x0004, 0x20a9, 0x09ff, 0x1f04, + 0x18ff, 0x8421, 0x1dd0, 0x8319, 0x1db0, 0x69ee, 0x6a4a, 0x2091, + 0x8001, 0x0005, 0xd7fc, 0x1118, 0x2069, 0x4540, 0x0010, 0x2069, + 0x4580, 0x71c4, 0x71c6, 0x6916, 0x81ff, 0x1110, 0x68a3, 0x0001, + 0x78ac, 0xc08c, 0x78ae, 0xd084, 0x1110, 0x080c, 0x1c42, 0x0005, + 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0018, 0x2029, 0x0000, 0x2520, + 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x4500, + 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x080c, 0x1b3c, 0x0904, 0x1a17, + 0x20a9, 0x0005, 0x20a1, 0x4514, 0x2091, 0x8000, 0x41a1, 0x2091, + 0x8001, 0x2009, 0x0040, 0x080c, 0x1d0b, 0x0120, 0x080c, 0x1b44, + 0x0804, 0x1a17, 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x1120, + 0x0006, 0x080c, 0x2046, 0x000e, 0xa084, 0xff00, 0x8007, 0x8009, + 0x0904, 0x19c2, 0x00c6, 0x2c68, 0x080c, 0x1b3c, 0x05a8, 0x2c00, + 0x689e, 0x8109, 0x1dc0, 0x609f, 0x0000, 0x00ce, 0x00c6, 0x7ddc, + 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1, + 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x2c68, + 0x689c, 0xa065, 0x0904, 0x19c1, 0x2009, 0x0040, 0x080c, 0x1d0b, + 0x1550, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, 0x1168, 0x6004, + 0xa084, 0x00ff, 0xa086, 0x000a, 0x1120, 0x0016, 0x080c, 0x2043, + 0x001e, 0x2d00, 0x6002, 0x0898, 0x00ce, 0x00c6, 0x609c, 0x080c, + 0x1bb8, 0x00ce, 0x609f, 0x0000, 0x080c, 0x1a1b, 0x2009, 0x0018, + 0x6008, 0xc0cd, 0x600a, 0x6004, 0x6086, 0x080c, 0x1af9, 0x080c, + 0x1b44, 0x0804, 0x1a17, 0x00ce, 0x00c6, 0x609c, 0x080c, 0x1bb8, + 0x00ce, 0x609f, 0x0000, 0x080c, 0x1a1b, 0x2009, 0x0018, 0x6087, + 0x0103, 0x601b, 0x0003, 0x080c, 0x1af9, 0x080c, 0x1b44, 0x0804, + 0x1a17, 0x00ce, 0x6114, 0xd1fc, 0x0120, 0x080c, 0x1aeb, 0x01b8, + 0x0018, 0x080c, 0x1add, 0x0198, 0x2029, 0x0000, 0x2520, 0x2009, + 0x0018, 0x73c8, 0x72cc, 0x6087, 0x0103, 0x601b, 0x0021, 0x080c, + 0x1af9, 0x080c, 0x1b44, 0x2001, 0x4007, 0x0804, 0x13b5, 0x74c4, + 0x73c8, 0x72cc, 0x6014, 0x2091, 0x8000, 0x00e6, 0x2009, 0x0012, + 0xd0fc, 0x1118, 0x2071, 0x4540, 0x0018, 0x2071, 0x4580, 0xc1fd, + 0x792a, 0x7063, 0x0005, 0x71d0, 0xc1c4, 0x71d2, 0x7366, 0x726a, + 0x746e, 0x7072, 0x7077, 0x0000, 0x2c00, 0x707a, 0xa02e, 0x2530, + 0x611c, 0xa184, 0x0060, 0x0110, 0x080c, 0x3f66, 0x00ee, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, 0x0000, 0x6714, - 0x6023, 0x0000, 0x080c, 0x2233, 0x2091, 0x8001, 0x0005, 0x70c3, - 0x4005, 0x0804, 0x13a6, 0x20a9, 0x0005, 0x2099, 0x4314, 0x2091, + 0x6023, 0x0000, 0x080c, 0x2296, 0x2091, 0x8001, 0x0005, 0x70c3, + 0x4005, 0x0804, 0x13b6, 0x20a9, 0x0005, 0x2099, 0x4514, 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x0005, 0x71c4, 0x70c7, 0x0000, - 0x791e, 0x0804, 0x13a3, 0x71c4, 0x71c6, 0x2168, 0x0010, 0x2069, + 0x791e, 0x0804, 0x13b3, 0x71c4, 0x71c6, 0x2168, 0x0010, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x1dd8, 0xa285, 0x0000, 0x1118, 0x70c3, 0x4000, 0x0010, 0x70c3, 0x4003, - 0x70ca, 0x0804, 0x13a6, 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, - 0x1a04, 0x139c, 0x7966, 0x0804, 0x13a3, 0x7964, 0x71c6, 0x0804, - 0x13a3, 0x7900, 0x71c6, 0x71c4, 0x7902, 0x0804, 0x13a3, 0x7900, - 0x71c6, 0x0804, 0x13a3, 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, + 0x70ca, 0x0804, 0x13b6, 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, + 0x1a04, 0x13ac, 0x7966, 0x0804, 0x13b3, 0x7964, 0x71c6, 0x0804, + 0x13b3, 0x7900, 0x71c6, 0x71c4, 0x7902, 0x0804, 0x13b3, 0x7900, + 0x71c6, 0x0804, 0x13b3, 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0160, 0x810c, 0x0230, 0x8210, 0x810c, 0x810c, 0x0210, 0x8210, - 0x810c, 0x81ff, 0x1904, 0x139d, 0x8210, 0x7a0e, 0xd28c, 0x0538, + 0x810c, 0x81ff, 0x1904, 0x13ad, 0x8210, 0x7a0e, 0xd28c, 0x0538, 0x7910, 0xc1cd, 0x7912, 0x2009, 0x0021, 0x2019, 0x0003, 0xd284, - 0x01c0, 0x8108, 0x2019, 0x0041, 0x2011, 0x8b4e, 0x2312, 0x2019, + 0x01c0, 0x8108, 0x2019, 0x0041, 0x2011, 0x8d4e, 0x2312, 0x2019, 0x0042, 0x8210, 0x2312, 0x2019, 0x0043, 0x8210, 0x2312, 0x2019, 0x0046, 0x8210, 0x2312, 0x2019, 0x0047, 0x8210, 0x2312, 0x2019, - 0x0006, 0x2011, 0x8b53, 0x2112, 0x2011, 0x8b73, 0x2312, 0x7904, - 0x7806, 0x0804, 0x13a2, 0x7804, 0x70c6, 0x0804, 0x13a3, 0x71c4, - 0xd1fc, 0x1118, 0x2011, 0x47c0, 0x0010, 0x2011, 0x4840, 0x8107, + 0x0006, 0x2011, 0x8d53, 0x2112, 0x2011, 0x8d73, 0x2312, 0x7904, + 0x7806, 0x0804, 0x13b2, 0x7804, 0x70c6, 0x0804, 0x13b3, 0x71c4, + 0xd1fc, 0x1118, 0x2011, 0x49c0, 0x0010, 0x2011, 0x4a40, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, 0x2011, 0x0000, 0x6814, 0xd0fc, 0x0110, 0xa295, 0x0200, 0xd0b4, 0x0110, 0xa295, - 0x0001, 0x6b0c, 0x0804, 0x13a0, 0x0016, 0x7814, 0xd0f4, 0x0138, - 0x2001, 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, 0x0050, 0xd0fc, - 0x0138, 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0008, - 0xa006, 0x001e, 0x0005, 0x0016, 0x7814, 0xd0f4, 0x0138, 0x2001, - 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, 0x0008, 0xa006, 0x001e, - 0x0005, 0x0016, 0x7814, 0xd0fc, 0x0138, 0x2001, 0x4007, 0x70db, - 0x0001, 0xa18d, 0x0001, 0x0008, 0xa006, 0x001e, 0x0005, 0x7112, - 0x721a, 0x731e, 0x7810, 0xd0c4, 0x0110, 0x7422, 0x7526, 0xac80, - 0x0001, 0x8108, 0x810c, 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, - 0x0000, 0x6084, 0x20a2, 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, - 0xff00, 0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, - 0xa100, 0x0018, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, - 0xa006, 0xa211, 0x7d10, 0xd5c4, 0x0120, 0x7b84, 0xa319, 0x7c80, - 0xa421, 0x7008, 0xd0fc, 0x0de8, 0x7003, 0x0001, 0x7007, 0x0006, - 0x711a, 0x721e, 0x7d10, 0xd5c4, 0x0110, 0x7322, 0x7426, 0xa084, - 0x01e0, 0x0005, 0x7848, 0xa065, 0x0120, 0x2c04, 0x784a, 0x2063, - 0x0000, 0x0005, 0x00f6, 0x2079, 0x4300, 0x7848, 0x2062, 0x2c00, - 0xa005, 0x1110, 0x080c, 0x243b, 0x784a, 0x00fe, 0x0005, 0x2011, - 0x8d00, 0x7a4a, 0x7bc4, 0x8319, 0x0128, 0xa280, 0x0032, 0x2012, - 0x2010, 0x0cc8, 0x2013, 0x0000, 0x0005, 0x0016, 0x0026, 0xd7fc, - 0x1118, 0x2011, 0x48c0, 0x0010, 0x2011, 0x68c0, 0xa784, 0x0f00, - 0x800b, 0xa784, 0x001f, 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, - 0xa105, 0xa268, 0x002e, 0x001e, 0x0005, 0x0c39, 0x2900, 0x682a, - 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef, 0xa80d, 0x690a, 0x00e6, - 0xd7fc, 0x1128, 0x2009, 0x4353, 0x2071, 0x4340, 0x0020, 0x2009, - 0x4393, 0x2071, 0x4380, 0x210c, 0x6804, 0xa005, 0x0148, 0xa116, - 0x1138, 0x2060, 0x6000, 0x6806, 0x0016, 0x200b, 0x0000, 0x0018, - 0x2009, 0x0000, 0x0016, 0x6804, 0xa065, 0x0178, 0x6000, 0x6806, - 0x0421, 0x080c, 0x1d30, 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, - 0x6812, 0x1d88, 0x7910, 0xc1a5, 0x7912, 0x001e, 0x6902, 0x6906, - 0x2d00, 0x2060, 0x080c, 0x2580, 0x00ee, 0x0005, 0xa065, 0x0160, - 0x2008, 0x609c, 0xa005, 0x0128, 0x2062, 0x609f, 0x0000, 0xa065, - 0x0cc0, 0x7848, 0x794a, 0x2062, 0x0005, 0x6007, 0x0103, 0x608f, - 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, - 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x0005, 0x00e6, 0xd7fc, - 0x1128, 0x2071, 0x4340, 0x2031, 0x43c0, 0x0020, 0x2071, 0x4380, - 0x2031, 0x45c0, 0x7050, 0xa08c, 0x0200, 0x1128, 0xa608, 0x2d0a, - 0x8000, 0x7052, 0xa006, 0x00ee, 0x0005, 0x00f6, 0xd7fc, 0x1118, - 0x2079, 0x4340, 0x0010, 0x2079, 0x4380, 0x080c, 0x1b1d, 0x2091, - 0x8000, 0x6804, 0x780a, 0xa065, 0x0904, 0x1bfe, 0x0030, 0x2c00, - 0x780a, 0x2060, 0x6000, 0xa065, 0x05c8, 0x6010, 0xa306, 0x1db8, - 0x600c, 0xa206, 0x1da0, 0x2c28, 0x784c, 0xac06, 0x1108, 0x0458, - 0x6804, 0xac06, 0x1140, 0x6000, 0x2060, 0x6806, 0xa005, 0x1118, - 0x6803, 0x0000, 0x0048, 0x6400, 0x7808, 0x2060, 0x6402, 0xa486, - 0x0000, 0x1110, 0x2c00, 0x6802, 0x2560, 0x00fe, 0x080c, 0x1b85, - 0x00f6, 0x601b, 0x0005, 0x6023, 0x0020, 0x00fe, 0x080c, 0x1d30, - 0x00f6, 0x7908, 0x8109, 0x790a, 0x6810, 0x8001, 0x6812, 0x1118, - 0x7810, 0xc0a5, 0x7812, 0x2001, 0xffff, 0xa005, 0x00fe, 0x0005, - 0x0076, 0x2700, 0x2039, 0x0000, 0xd0fc, 0x0108, 0xc7fd, 0x2041, - 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x080c, - 0x1b35, 0x8738, 0xa784, 0x001f, 0x1dd0, 0xa7bc, 0xff00, 0x873f, - 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d90, 0x2091, 0x8001, 0x007e, - 0x0005, 0x786c, 0x2009, 0x8b74, 0x210c, 0xa10d, 0x0118, 0xa065, - 0x0804, 0x1ffe, 0x2061, 0x0000, 0x6018, 0xd084, 0x11b8, 0x7810, - 0xd08c, 0x0130, 0xc08c, 0x7812, 0xc7fc, 0x2069, 0x4340, 0x0028, - 0xc08d, 0x7812, 0x2069, 0x4380, 0xc7fd, 0x2091, 0x8000, 0x681c, - 0x681f, 0x0000, 0x2091, 0x8001, 0xa005, 0x1108, 0x0005, 0xa08c, - 0xfff0, 0x0110, 0x080c, 0x243b, 0x0002, 0x1c5d, 0x1c60, 0x1c66, - 0x1c6a, 0x1c5e, 0x1c6e, 0x1c5e, 0x1c5e, 0x1c5e, 0x1c73, 0x1c9f, - 0x1ca2, 0x1ca7, 0x1c5e, 0x1c5e, 0x1c5e, 0x0005, 0x080c, 0x243b, - 0x080c, 0x1c00, 0x2001, 0x8001, 0x0804, 0x1cb0, 0x2001, 0x8003, - 0x0804, 0x1cb0, 0x2001, 0x8004, 0x0804, 0x1cb0, 0x080c, 0x1c00, - 0x2001, 0x8006, 0x04e8, 0x2091, 0x8000, 0x0076, 0xd7fc, 0x1128, - 0x2069, 0x4340, 0x2039, 0x0009, 0x0020, 0x2069, 0x4380, 0x2039, - 0x0009, 0x6800, 0xa086, 0x0000, 0x0128, 0x000e, 0x6f1e, 0x2091, - 0x8001, 0x0005, 0x6874, 0x007e, 0xa0bc, 0xff00, 0x2041, 0x0021, - 0x2049, 0x0004, 0x2051, 0x0010, 0x080c, 0x1b35, 0x8738, 0xa784, - 0x001f, 0x1dd0, 0x2091, 0x8001, 0x2001, 0x800a, 0x0088, 0x2001, - 0x800c, 0x0070, 0x080c, 0x1c00, 0x2001, 0x800d, 0x0048, 0xd7fc, - 0x0110, 0x78ec, 0x0008, 0x78e4, 0x70c6, 0x2001, 0x800e, 0x0000, - 0x70c2, 0xd7fc, 0x1118, 0x70db, 0x0000, 0x0010, 0x70db, 0x0001, - 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x0005, 0xac80, - 0x0001, 0x81ff, 0x0518, 0x2099, 0x0030, 0x20a0, 0x700c, 0xa084, - 0x07ff, 0x0100, 0x7018, 0x0006, 0x701c, 0x0006, 0x7020, 0x0006, - 0x7024, 0x0006, 0x7112, 0x81ac, 0x721a, 0x731e, 0x7422, 0x7526, - 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, 0x800b, 0x1ee8, 0x7007, - 0x0002, 0xa08c, 0x01e0, 0x1110, 0x53a5, 0xa006, 0x7003, 0x0000, - 0x7007, 0x0004, 0x000e, 0x7026, 0x000e, 0x7022, 0x000e, 0x701e, - 0x000e, 0x701a, 0x0005, 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, - 0x6c0e, 0x681f, 0x0201, 0x6803, 0xfd20, 0x6807, 0x0038, 0x6a1a, - 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, 0x8109, 0x1d80, 0x0005, - 0x70ec, 0xd0dc, 0x1520, 0x2029, 0x0001, 0x7814, 0xd0cc, 0x1160, - 0x70ec, 0xd0e4, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1120, 0x2019, - 0x0c0c, 0x2021, 0x000c, 0x0070, 0x70ec, 0xd0e4, 0x1128, 0x2019, - 0x1c0c, 0x2021, 0x000c, 0x0030, 0x2019, 0x1c09, 0x2021, 0x0009, - 0xa5ad, 0x0200, 0x6b0a, 0x6c0e, 0x6d1e, 0x6807, 0x0038, 0x0005, - 0x6004, 0x6086, 0x2c08, 0x2063, 0x0000, 0x7868, 0xa005, 0x796a, - 0x0110, 0x2c02, 0x0008, 0x796e, 0x0005, 0x00c6, 0x2061, 0x4300, - 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, - 0x0110, 0x2d02, 0x0008, 0x616e, 0x00ce, 0x0005, 0x2091, 0x8000, - 0x2c04, 0x786e, 0xa005, 0x1108, 0x786a, 0x2091, 0x8001, 0x609c, - 0xa005, 0x0188, 0x00c6, 0x2060, 0x2008, 0x609c, 0xa005, 0x0138, - 0x2062, 0x609f, 0x0000, 0xa065, 0x609c, 0xa005, 0x1dc8, 0x7848, - 0x794a, 0x2062, 0x00ce, 0x7848, 0x2062, 0x609f, 0x0000, 0xac85, - 0x0000, 0x1110, 0x080c, 0x243b, 0x784a, 0x0005, 0x20a9, 0x0010, - 0xa006, 0x8004, 0x8086, 0x818e, 0x1208, 0xa200, 0x1f04, 0x1d7a, - 0x8086, 0x818e, 0x0005, 0x0156, 0x20a9, 0x0010, 0xa005, 0x01b8, - 0xa11a, 0x12a8, 0x8213, 0x818d, 0x0228, 0xa11a, 0x1220, 0x1f04, - 0x1d8a, 0x0028, 0xa11a, 0x2308, 0x8210, 0x1f04, 0x1d8a, 0x0006, - 0x3200, 0xa084, 0xefff, 0x2080, 0x000e, 0x015e, 0x0005, 0x0006, - 0x3200, 0xa085, 0x1000, 0x0cb8, 0x7d74, 0x70d0, 0xa506, 0x0904, - 0x1e5b, 0x7810, 0x2050, 0x7800, 0xd08c, 0x0100, 0x080c, 0x1afa, - 0x0904, 0x1e5b, 0xa046, 0x7970, 0x2500, 0x8000, 0xa112, 0x2009, - 0x0040, 0x1208, 0x0030, 0x72d0, 0xa206, 0x0118, 0x8840, 0x2009, - 0x0080, 0x00c6, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, - 0x0020, 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0110, - 0x080c, 0x1afa, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002, 0x2091, - 0x8001, 0xa08c, 0x01e0, 0x1538, 0x53a5, 0x8cff, 0x1120, 0x88ff, - 0x0904, 0x1e48, 0x0050, 0x2c00, 0x788e, 0x20a9, 0x0020, 0xac80, - 0x0001, 0x20a0, 0x53a5, 0x0804, 0x1e48, 0xa046, 0x7218, 0x731c, - 0xdac4, 0x0110, 0x7420, 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, - 0xa4a3, 0x0000, 0xa5ab, 0x0000, 0x721a, 0x731e, 0xdac4, 0x0118, - 0x7422, 0x7526, 0xa006, 0x7007, 0x0004, 0x0904, 0x1e48, 0x8cff, - 0x0110, 0x080c, 0x1b02, 0x00ce, 0x080c, 0x1b02, 0xa046, 0x7888, - 0x8000, 0x788a, 0xa086, 0x0002, 0x01c0, 0x7a7c, 0x7b78, 0xdac4, - 0x0110, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004, 0x8004, 0xa210, - 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x721a, 0x731e, - 0xdac4, 0x0588, 0x7422, 0x7526, 0x0470, 0x6014, 0xd0fc, 0x1118, - 0x2069, 0x4340, 0x0010, 0x2069, 0x4380, 0x2091, 0x8000, 0x681f, - 0x0002, 0x88ff, 0x0120, 0xa046, 0x788c, 0x2060, 0x0c70, 0x788b, - 0x0000, 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0098, - 0x00ce, 0x788b, 0x0000, 0x080c, 0x1fb9, 0x6004, 0xa084, 0x000f, - 0x0059, 0x88ff, 0x0130, 0x788c, 0x2060, 0x6004, 0xa084, 0x000f, - 0x0019, 0x0804, 0x1da4, 0x0005, 0x0002, 0x1e6d, 0x1e88, 0x1ea1, - 0x1e6d, 0x1eae, 0x1e7e, 0x1e6d, 0x1e6d, 0x1e6d, 0x1e86, 0x1e9f, - 0x1e6d, 0x1e6d, 0x1e6d, 0x1e6d, 0x1e6d, 0x2039, 0x0400, 0x78bc, - 0xa705, 0x78be, 0x6008, 0xa705, 0x600a, 0x080c, 0x1eea, 0x609c, - 0x78ba, 0x609f, 0x0000, 0x080c, 0x1fa5, 0x0005, 0x78bc, 0xd0c4, - 0x0108, 0x0c58, 0x601c, 0xc0bd, 0x601e, 0x0030, 0x080c, 0x1fe3, - 0x78bc, 0xd0c4, 0x0108, 0x0c08, 0x78bf, 0x0000, 0x6004, 0x8007, - 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0138, 0x080c, 0x1eea, 0x0120, - 0x78bc, 0xc0c5, 0x78be, 0x0010, 0x0804, 0x1f05, 0x0005, 0x080c, - 0x1fe0, 0x78bc, 0xa08c, 0x0e00, 0x1110, 0xd0c4, 0x1108, 0x0828, - 0x080c, 0x1eea, 0x1110, 0x0804, 0x1f05, 0x0005, 0x78bc, 0xd0c4, - 0x0110, 0x0804, 0x1e6d, 0x78bf, 0x0000, 0x6714, 0x2011, 0x0001, - 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0188, 0xa7bc, 0xff00, - 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0150, 0xa7bc, 0x8000, 0x2011, - 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0108, 0x00c0, 0x080c, - 0x1b1d, 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, - 0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, - 0x1f04, 0x1ed2, 0x8211, 0x0118, 0x20a9, 0x0100, 0x0c58, 0x080c, - 0x1b02, 0x0005, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6, - 0x1110, 0x78ba, 0x0038, 0x689e, 0x2d00, 0x6002, 0x78b8, 0xad06, - 0x1108, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x1130, 0x78bc, 0xc0c4, - 0x78be, 0x78b8, 0x2060, 0xa006, 0x0005, 0x00e6, 0xa02e, 0x2530, - 0x7dba, 0x7db6, 0x65ae, 0x65b2, 0x601c, 0x60a2, 0x2048, 0xa984, - 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0110, 0x080c, 0x3de5, 0x6596, - 0x65a6, 0x669a, 0x66aa, 0x6714, 0x2071, 0x4380, 0xd7fc, 0x1110, - 0x2071, 0x4340, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x0120, - 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x71c4, 0xa168, 0x2700, - 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x71c8, 0xa100, - 0x60c2, 0x2091, 0x8000, 0x6e08, 0xd684, 0x0170, 0xd9fc, 0x1160, - 0x2091, 0x8001, 0x080c, 0x1b85, 0x2091, 0x8000, 0x080c, 0x1d30, - 0x2091, 0x8001, 0x0804, 0x1fa3, 0x6024, 0xa096, 0x0001, 0x1110, - 0x8000, 0x6026, 0x6a10, 0x6814, 0xa202, 0x0268, 0x0160, 0x2091, - 0x8001, 0x2039, 0x0200, 0x609c, 0x78ba, 0x609f, 0x0000, 0x080c, - 0x1fa5, 0x0804, 0x1fa3, 0x2c08, 0xd9fc, 0x01f0, 0x6800, 0xa065, - 0x01d8, 0x6a04, 0x7000, 0xa084, 0x0002, 0x0168, 0x704c, 0xa206, - 0x1150, 0x6b04, 0x2160, 0x2304, 0x6002, 0xa005, 0x1108, 0x6902, - 0x2260, 0x6102, 0x0098, 0x2d00, 0x2060, 0x080c, 0x2580, 0x6e08, - 0x2160, 0x6202, 0x6906, 0x0050, 0x6800, 0x6902, 0xa065, 0x0110, - 0x6102, 0x0008, 0x6906, 0x2160, 0x6003, 0x0000, 0x2160, 0xd9fc, - 0x0118, 0xa6b4, 0xfffc, 0x6e0a, 0x6810, 0x7d08, 0x8528, 0x7d0a, - 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, 0x0128, 0xa6b6, 0x0040, - 0x6e0a, 0x080c, 0x1b96, 0x00ee, 0x0005, 0x6008, 0xa705, 0x600a, - 0x2091, 0x8000, 0x080c, 0x1d30, 0x2091, 0x8001, 0x78b8, 0xa065, - 0x0128, 0x609c, 0x78ba, 0x609f, 0x0000, 0x0c78, 0x78b6, 0x78ba, - 0x0005, 0x7970, 0x7874, 0x2818, 0xd384, 0x0118, 0x8000, 0xa112, - 0x0220, 0x8000, 0xa112, 0x1278, 0xc384, 0x7a7c, 0x721a, 0x7a78, - 0x721e, 0xdac4, 0x0120, 0x7a84, 0x7222, 0x7a80, 0x7226, 0xa006, - 0xd384, 0x0108, 0x8000, 0x7876, 0x70d2, 0x781c, 0xa005, 0x0138, - 0x8001, 0x781e, 0x1120, 0x0e04, 0x1fdf, 0x2091, 0x4080, 0x0005, - 0x2039, 0x1ff5, 0x0010, 0x2039, 0x1ffb, 0x2704, 0xa005, 0x0160, - 0xac00, 0x2068, 0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, - 0x6916, 0x680e, 0x8738, 0x0c88, 0x0005, 0x0003, 0x0009, 0x000f, - 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x2041, 0x0000, - 0x780c, 0x0002, 0x21a7, 0x2182, 0x2006, 0x2076, 0x2039, 0x8b74, - 0x2734, 0x7d10, 0x00c0, 0x6084, 0xa086, 0x0103, 0x1904, 0x2060, - 0x6114, 0x6018, 0xa105, 0x0120, 0x86ff, 0x11d8, 0x0804, 0x2060, - 0x8603, 0xa080, 0x8b55, 0x620c, 0x2202, 0x8000, 0x6210, 0x2202, - 0x080c, 0x1d4e, 0x8630, 0xa68e, 0x000f, 0x0904, 0x20e1, 0x786c, - 0xa065, 0x1d08, 0x7808, 0xa602, 0x1220, 0xd5ac, 0x1110, 0x263a, - 0x0005, 0xa682, 0x0003, 0x1a04, 0x20e1, 0x2091, 0x8000, 0x2069, - 0x0000, 0x6818, 0xd084, 0x11f8, 0x2011, 0x8b55, 0x2204, 0x70c6, - 0x8210, 0x2204, 0x70ca, 0xd684, 0x1130, 0x8210, 0x2204, 0x70da, - 0x8210, 0x2204, 0x70de, 0xa685, 0x8020, 0x70c2, 0x681b, 0x0001, - 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, 0x8001, - 0x203b, 0x0000, 0x0005, 0x7810, 0xc0ad, 0x7812, 0x0804, 0x20e1, - 0x263a, 0x080c, 0x21ad, 0x1904, 0x21c9, 0x786c, 0xa065, 0x1904, - 0x200b, 0x2091, 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0108, - 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0804, 0x21c9, 0x2039, 0x8b74, - 0x2734, 0x7d10, 0x00a0, 0x6084, 0xa086, 0x0103, 0x1904, 0x20cb, - 0x6114, 0x6018, 0xa105, 0x0120, 0x86ff, 0x11b8, 0x0804, 0x20cb, - 0xa680, 0x8b55, 0x620c, 0x2202, 0x080c, 0x1d4e, 0x8630, 0xa68e, - 0x001e, 0x0904, 0x20e1, 0x786c, 0xa065, 0x1d28, 0x7808, 0xa602, - 0x1220, 0xd5ac, 0x1110, 0x263a, 0x0005, 0xa682, 0x0006, 0x1a04, - 0x20e1, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x11f8, - 0x2011, 0x8b55, 0x2009, 0x8b4e, 0x26a8, 0x211c, 0x2204, 0x201a, - 0x8108, 0x8210, 0x1f04, 0x20ad, 0xa685, 0x8030, 0x70c2, 0x681b, - 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, - 0x8001, 0xa006, 0x2009, 0x8b75, 0x200a, 0x203a, 0x0005, 0x7810, - 0xc0ad, 0x7812, 0x00b0, 0x263a, 0x080c, 0x21ad, 0x1904, 0x21c9, - 0x786c, 0xa065, 0x1904, 0x207b, 0x2091, 0x8000, 0x7810, 0xa084, - 0xffcf, 0x86ff, 0x0108, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0804, - 0x21c9, 0x2091, 0x8000, 0x7007, 0x0004, 0x7994, 0x70d4, 0xa102, - 0x0228, 0x0168, 0x7b90, 0xa302, 0x1150, 0x0010, 0x8002, 0x1138, - 0x263a, 0x7810, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0005, 0xa184, - 0xff00, 0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, - 0xa100, 0x0018, 0x8107, 0x8004, 0x8004, 0x7a9c, 0xa210, 0x721a, - 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4, 0x0130, 0x7aa4, 0xa211, - 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, 0x0030, 0x7003, 0x0000, - 0x2009, 0x8b54, 0x260a, 0x8109, 0x2198, 0x2104, 0xd084, 0x0108, - 0x8633, 0xa6b0, 0x0002, 0x26a8, 0x53a6, 0x8603, 0x7012, 0x7007, - 0x0001, 0x7990, 0x7894, 0x8000, 0xa10a, 0x1208, 0xa006, 0x2028, + 0x0001, 0x6b0c, 0x6800, 0x70da, 0x0804, 0x13b0, 0x0016, 0x7814, + 0xd0f4, 0x0138, 0x2001, 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, + 0x0050, 0xd0fc, 0x0138, 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, + 0x0001, 0x0008, 0xa006, 0x001e, 0x0005, 0x0016, 0x7814, 0xd0f4, + 0x0138, 0x2001, 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, 0x0008, + 0xa006, 0x001e, 0x0005, 0x0016, 0x7814, 0xd0fc, 0x0138, 0x2001, + 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0008, 0xa006, 0x001e, + 0x0005, 0x7112, 0x721a, 0x731e, 0x7810, 0xd0c4, 0x0110, 0x7422, + 0x7526, 0xac80, 0x0001, 0x8108, 0x810c, 0x81a9, 0x8098, 0x20a1, + 0x0030, 0x7003, 0x0000, 0x6084, 0x20a2, 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, 0x8004, 0x8004, 0x797c, - 0xa108, 0x7a78, 0xa006, 0xa211, 0xd4c4, 0x0120, 0x7b84, 0xa319, - 0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0de8, 0xa084, 0x01e0, 0x01d0, - 0x7d10, 0x2031, 0x8b54, 0x2634, 0x78a8, 0x8000, 0x78aa, 0xd08c, - 0x1138, 0x7007, 0x0006, 0x7004, 0xd094, 0x1de8, 0x0804, 0x20e3, - 0x2069, 0x4347, 0x206b, 0x0003, 0x78ac, 0xa085, 0x0300, 0x78ae, - 0xa006, 0x0048, 0x2030, 0x75d6, 0x2091, 0x4080, 0x7d96, 0x7d10, - 0xa5ac, 0xffcf, 0x7d12, 0x2091, 0x8001, 0x78aa, 0x7007, 0x0006, - 0x263a, 0x7003, 0x0001, 0x711a, 0x721e, 0xd5c4, 0x0110, 0x7322, - 0x7426, 0x0005, 0x6084, 0xa086, 0x0103, 0x11d8, 0x6114, 0x6018, - 0xa105, 0x11b8, 0x2069, 0x0000, 0x6818, 0xd084, 0x1190, 0x600c, - 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, 0x2091, - 0x4080, 0x080c, 0x1d4e, 0x0e04, 0x21a0, 0x786c, 0xa065, 0x1d10, - 0x0005, 0x0059, 0x1530, 0x786c, 0xa065, 0x19e0, 0x0410, 0x0029, - 0x1500, 0x786c, 0xa065, 0x1dd8, 0x00e0, 0x6084, 0xa086, 0x0103, - 0x1168, 0x6018, 0xc0fc, 0x601a, 0xa086, 0x0004, 0x1138, 0x7804, - 0xd0a4, 0x0120, 0x080c, 0x1d4e, 0xa006, 0x0005, 0x0079, 0x1118, - 0xa085, 0x0001, 0x0005, 0x00b9, 0x1110, 0x2041, 0x0001, 0x7d10, - 0x0005, 0x88ff, 0x0110, 0x2091, 0x4080, 0x0005, 0x7b90, 0x7994, - 0x70d4, 0xa102, 0x1118, 0xa385, 0x0000, 0x0005, 0x0210, 0xa302, - 0x0005, 0x8002, 0x0005, 0xa184, 0xff00, 0x0140, 0x810f, 0x810c, - 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, 0x8004, - 0x8004, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0, 0xa210, 0xa006, 0xa319, - 0xa421, 0xa529, 0x2009, 0x0018, 0x6028, 0xa005, 0x0110, 0x2009, - 0x0040, 0x080c, 0x1ab7, 0x01d0, 0x78a8, 0x8000, 0x78aa, 0xd08c, - 0x1510, 0x6014, 0xd0fc, 0x1118, 0x2069, 0x4340, 0x0010, 0x2069, - 0x4380, 0x2091, 0x8000, 0x681f, 0x0003, 0x78ab, 0x0000, 0x78ac, - 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, 0x0068, 0x78ab, 0x0000, - 0x080c, 0x1d4e, 0x7990, 0x7894, 0x8000, 0xa10a, 0x1208, 0xa006, - 0x7896, 0x70d6, 0xa006, 0x2071, 0x0010, 0x2091, 0x8001, 0x0005, - 0x2138, 0xd7fc, 0x1118, 0x2009, 0x4359, 0x0010, 0x2009, 0x4399, - 0x2091, 0x8000, 0x200a, 0x00f6, 0x2009, 0x4380, 0x2079, 0x0100, - 0xd7fc, 0x1120, 0x2009, 0x4340, 0x2079, 0x0200, 0x2104, 0xa086, - 0x0000, 0x1180, 0xd7fc, 0x1118, 0x2009, 0x4345, 0x0010, 0x2009, - 0x4385, 0x2104, 0xa005, 0x1130, 0x7830, 0xa084, 0x00c0, 0x1110, - 0x781b, 0x0052, 0x00fe, 0x0005, 0x2009, 0x0002, 0x2069, 0x4300, - 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, 0x22a9, 0x2071, 0x4380, - 0x2079, 0x0100, 0x2021, 0x45bf, 0x784b, 0x000f, 0x2001, 0x01ff, - 0x2004, 0xd0fc, 0x0118, 0x2019, 0x3c3b, 0x0030, 0x20a1, 0x012b, - 0x2019, 0x3c3b, 0xd184, 0x0110, 0x20a1, 0x022b, 0x2304, 0xa005, - 0x0140, 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318, - 0x0ca8, 0x789b, 0x0000, 0x789b, 0x0020, 0x20a9, 0x0010, 0x78af, - 0x0000, 0x78af, 0x2020, 0x1f04, 0x2287, 0x7003, 0x0000, 0x0016, - 0xd18c, 0x2009, 0x0000, 0x0108, 0xc1bd, 0x080c, 0x23bd, 0x001e, - 0x7020, 0xa084, 0x000f, 0xa085, 0x6300, 0x7806, 0x780f, 0x9000, - 0x7843, 0x00d8, 0x7853, 0x0090, 0x780b, 0x0308, 0x7456, 0x7053, - 0x0000, 0x8109, 0x0140, 0x2071, 0x4340, 0x2079, 0x0200, 0x2021, - 0x43bf, 0x0804, 0x2264, 0x0005, 0x0016, 0x2011, 0x0101, 0xd1bc, - 0x1110, 0x2011, 0x0201, 0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, - 0xa105, 0x2012, 0x001e, 0x080c, 0x23bd, 0x0005, 0x2011, 0x0101, - 0xd3fc, 0x1110, 0x2011, 0x0201, 0x20a9, 0x0009, 0x810b, 0x1f04, - 0x22ce, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, - 0x0005, 0x2019, 0x0002, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, - 0x1f04, 0x22df, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, - 0x200a, 0x8319, 0x0118, 0x2009, 0x0201, 0x0c78, 0x0005, 0x2011, - 0x0101, 0xd3fc, 0x1110, 0x2011, 0x0201, 0x20a9, 0x000c, 0x810b, - 0x1f04, 0x22f7, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, - 0x2012, 0x0005, 0x2011, 0x0102, 0xd3fc, 0x1110, 0x2011, 0x0202, - 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, 0x0005, 0x00c6, 0x2061, - 0x0100, 0xd1bc, 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, - 0xa080, 0x0020, 0x609a, 0x62ac, 0x63ac, 0x00ce, 0x0005, 0x00c6, + 0xa108, 0x7a78, 0xa006, 0xa211, 0x7d10, 0xd5c4, 0x0120, 0x7b84, + 0xa319, 0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0de8, 0x7003, 0x0001, + 0x7007, 0x0006, 0x711a, 0x721e, 0x7d10, 0xd5c4, 0x0110, 0x7322, + 0x7426, 0xa084, 0x01e0, 0x0005, 0x7848, 0xa065, 0x0120, 0x2c04, + 0x784a, 0x2063, 0x0000, 0x0005, 0x00f6, 0x2079, 0x4500, 0x7848, + 0x2062, 0x2c00, 0xa005, 0x1110, 0x080c, 0x252b, 0x784a, 0x00fe, + 0x0005, 0x2011, 0x8f00, 0x7a4a, 0x7bc4, 0x8319, 0x0128, 0xa280, + 0x0032, 0x2012, 0x2010, 0x0cc8, 0x2013, 0x0000, 0x0005, 0x0016, + 0x0026, 0xd7fc, 0x1118, 0x2011, 0x4ac0, 0x0010, 0x2011, 0x6ac0, + 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x0120, 0x8003, 0x8003, + 0x8003, 0x8003, 0xa105, 0xa268, 0x002e, 0x001e, 0x0005, 0x0c39, + 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef, 0xa80d, + 0x690a, 0x00e6, 0xd7fc, 0x1128, 0x2009, 0x4552, 0x2071, 0x4540, + 0x0020, 0x2009, 0x4592, 0x2071, 0x4580, 0x210c, 0x6804, 0xa005, + 0x0148, 0xa116, 0x1138, 0x2060, 0x6000, 0x6806, 0x0016, 0x200b, + 0x0000, 0x0018, 0x2009, 0x0000, 0x0016, 0x6804, 0xa065, 0x0178, + 0x6000, 0x6806, 0x0421, 0x080c, 0x1d7c, 0x6810, 0x7908, 0x8109, + 0x790a, 0x8001, 0x6812, 0x1d88, 0x7910, 0xc1a5, 0x7912, 0x001e, + 0x6902, 0x6906, 0x2d00, 0x2060, 0x080c, 0x2672, 0x00ee, 0x0005, + 0xa065, 0x0160, 0x2008, 0x609c, 0xa005, 0x0128, 0x2062, 0x609f, + 0x0000, 0xa065, 0x0cc0, 0x7848, 0x794a, 0x2062, 0x0005, 0x6007, + 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, + 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x0005, + 0x00e6, 0xd7fc, 0x1128, 0x2071, 0x4540, 0x2031, 0x45c0, 0x0020, + 0x2071, 0x4580, 0x2031, 0x47c0, 0x704c, 0xa08c, 0x0200, 0x1128, + 0xa608, 0x2d0a, 0x8000, 0x704e, 0xa006, 0x00ee, 0x0005, 0x00f6, + 0xd7fc, 0x1118, 0x2079, 0x4540, 0x0010, 0x2079, 0x4580, 0x080c, + 0x1b5f, 0x2091, 0x8000, 0x6804, 0x780a, 0xa065, 0x0904, 0x1c40, + 0x0030, 0x2c00, 0x780a, 0x2060, 0x6000, 0xa065, 0x05c8, 0x6010, + 0xa306, 0x1db8, 0x600c, 0xa206, 0x1da0, 0x2c28, 0x7848, 0xac06, + 0x1108, 0x0458, 0x6804, 0xac06, 0x1140, 0x6000, 0x2060, 0x6806, + 0xa005, 0x1118, 0x6803, 0x0000, 0x0048, 0x6400, 0x7808, 0x2060, + 0x6402, 0xa486, 0x0000, 0x1110, 0x2c00, 0x6802, 0x2560, 0x00fe, + 0x080c, 0x1bc7, 0x00f6, 0x601b, 0x0005, 0x6023, 0x0020, 0x00fe, + 0x080c, 0x1d7c, 0x00f6, 0x7908, 0x8109, 0x790a, 0x6810, 0x8001, + 0x6812, 0x1118, 0x7810, 0xc0a5, 0x7812, 0x2001, 0xffff, 0xa005, + 0x00fe, 0x0005, 0x0076, 0x2700, 0x2039, 0x0000, 0xd0fc, 0x0108, + 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x2091, + 0x8000, 0x080c, 0x1b77, 0x8738, 0xa784, 0x001f, 0x1dd0, 0xa7bc, + 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x1d90, 0x2091, + 0x8001, 0x007e, 0x0005, 0x786c, 0x2009, 0x8d74, 0x210c, 0xa10d, + 0x0118, 0xa065, 0x0804, 0x2061, 0x2061, 0x0000, 0x6018, 0xd084, + 0x11b8, 0x7810, 0xd08c, 0x0130, 0xc08c, 0x7812, 0xc7fc, 0x2069, + 0x4540, 0x0028, 0xc08d, 0x7812, 0x2069, 0x4580, 0xc7fd, 0x2091, + 0x8000, 0x681c, 0x681f, 0x0000, 0x2091, 0x8001, 0xa005, 0x1108, + 0x0005, 0xa08c, 0xfff0, 0x0110, 0x080c, 0x252b, 0x0002, 0x1c9f, + 0x1ca2, 0x1ca8, 0x1cac, 0x1ca0, 0x1cb0, 0x1ca0, 0x1ca0, 0x1ca0, + 0x1cb6, 0x1ce2, 0x1ce5, 0x1cea, 0x1cf3, 0x1ca0, 0x1ca0, 0x0005, + 0x080c, 0x252b, 0x080c, 0x1c42, 0x2001, 0x8001, 0x0804, 0x1cfc, + 0x2001, 0x8003, 0x0804, 0x1cfc, 0x2001, 0x8004, 0x0804, 0x1cfc, + 0x080c, 0x1c42, 0x2001, 0x8006, 0x0804, 0x1cfc, 0x2091, 0x8000, + 0x0076, 0xd7fc, 0x1128, 0x2069, 0x4540, 0x2039, 0x0009, 0x0020, + 0x2069, 0x4580, 0x2039, 0x0009, 0x6800, 0xa086, 0x0000, 0x0128, + 0x000e, 0x6f1e, 0x2091, 0x8001, 0x0005, 0x6870, 0x007e, 0xa0bc, + 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x080c, + 0x1b77, 0x8738, 0xa784, 0x001f, 0x1dd0, 0x2091, 0x8001, 0x2001, + 0x800a, 0x00d0, 0x2001, 0x800c, 0x00b8, 0x080c, 0x1c42, 0x2001, + 0x800d, 0x0090, 0xd7fc, 0x0110, 0x78e4, 0x0008, 0x78e0, 0x70c6, + 0x2001, 0x800e, 0x0048, 0xd7fc, 0x0110, 0x78ec, 0x0008, 0x78e8, + 0x70c6, 0x2001, 0x000d, 0x0000, 0x70c2, 0xd7fc, 0x1118, 0x70db, + 0x0000, 0x0010, 0x70db, 0x0001, 0x2061, 0x0000, 0x601b, 0x0001, + 0x2091, 0x4080, 0x0005, 0xac80, 0x0001, 0x81ff, 0x0518, 0x2099, + 0x0030, 0x20a0, 0x700c, 0xa084, 0x07ff, 0x0100, 0x7018, 0x0006, + 0x701c, 0x0006, 0x7020, 0x0006, 0x7024, 0x0006, 0x7112, 0x81ac, + 0x721a, 0x731e, 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001, + 0x7008, 0x800b, 0x1ee8, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x1110, + 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004, 0x000e, 0x7026, + 0x000e, 0x7022, 0x000e, 0x701e, 0x000e, 0x701a, 0x0005, 0x2011, + 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x681f, 0x0201, 0x6803, + 0xfd20, 0x6807, 0x0038, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, + 0x0004, 0x8109, 0x1d80, 0x0005, 0x70ec, 0xd0dc, 0x1520, 0x2029, + 0x0001, 0x7814, 0xd0cc, 0x1160, 0x70ec, 0xd0e4, 0x2019, 0x0c0a, + 0x2021, 0x000a, 0x1120, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x0070, + 0x70ec, 0xd0e4, 0x1128, 0x2019, 0x1c0c, 0x2021, 0x000c, 0x0030, + 0x2019, 0x1c09, 0x2021, 0x0009, 0xa5ad, 0x0200, 0x6b0a, 0x6c0e, + 0x6d1e, 0x6807, 0x0038, 0x0005, 0x6004, 0x6086, 0x2c08, 0x2063, + 0x0000, 0x7868, 0xa005, 0x796a, 0x0110, 0x2c02, 0x0008, 0x796e, + 0x0005, 0x00c6, 0x2061, 0x4500, 0x6887, 0x0103, 0x2d08, 0x206b, + 0x0000, 0x6068, 0xa005, 0x616a, 0x0110, 0x2d02, 0x0008, 0x616e, + 0x00ce, 0x0005, 0x2091, 0x8000, 0x2c04, 0x786e, 0xa005, 0x1108, + 0x786a, 0x2091, 0x8001, 0x609c, 0xa005, 0x0188, 0x00c6, 0x2060, + 0x2008, 0x609c, 0xa005, 0x0138, 0x2062, 0x609f, 0x0000, 0xa065, + 0x609c, 0xa005, 0x1dc8, 0x7848, 0x794a, 0x2062, 0x00ce, 0x7848, + 0x2062, 0x609f, 0x0000, 0xac85, 0x0000, 0x1110, 0x080c, 0x252b, + 0x784a, 0x0005, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, + 0x1208, 0xa200, 0x1f04, 0x1dc6, 0x8086, 0x818e, 0x0005, 0x0156, + 0x20a9, 0x0010, 0xa005, 0x01b8, 0xa11a, 0x12a8, 0x8213, 0x818d, + 0x0228, 0xa11a, 0x1220, 0x1f04, 0x1dd6, 0x0028, 0xa11a, 0x2308, + 0x8210, 0x1f04, 0x1dd6, 0x0006, 0x3200, 0xa084, 0xefff, 0x2080, + 0x000e, 0x015e, 0x0005, 0x0006, 0x3200, 0xa085, 0x1000, 0x0cb8, + 0x7d74, 0x70d0, 0xa506, 0x0904, 0x1ea4, 0x7810, 0x2050, 0x080c, + 0x1b3c, 0x0904, 0x1ea4, 0xa046, 0x7970, 0x2500, 0x8000, 0xa112, + 0x2009, 0x0040, 0x1208, 0x0030, 0x72d0, 0xa206, 0x0118, 0x8840, + 0x2009, 0x0080, 0x00c6, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, + 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, + 0x0110, 0x080c, 0x1b3c, 0x7008, 0xd0fc, 0x0de8, 0x7007, 0x0002, + 0x2091, 0x8001, 0xa08c, 0x01e0, 0x1538, 0x53a5, 0x8cff, 0x1120, + 0x88ff, 0x0904, 0x1e91, 0x0050, 0x2c00, 0x788e, 0x20a9, 0x0020, + 0xac80, 0x0001, 0x20a0, 0x53a5, 0x0804, 0x1e91, 0xa046, 0x7218, + 0x731c, 0xdac4, 0x0110, 0x7420, 0x7524, 0xa292, 0x0040, 0xa39b, + 0x0000, 0xa4a3, 0x0000, 0xa5ab, 0x0000, 0x721a, 0x731e, 0xdac4, + 0x0118, 0x7422, 0x7526, 0xa006, 0x7007, 0x0004, 0x0904, 0x1e91, + 0x8cff, 0x0110, 0x080c, 0x1b44, 0x00ce, 0x080c, 0x1b44, 0xa046, + 0x7888, 0x8000, 0x788a, 0xa086, 0x0002, 0x01c0, 0x7a7c, 0x7b78, + 0xdac4, 0x0110, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004, 0x8004, + 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x721a, + 0x731e, 0xdac4, 0x0588, 0x7422, 0x7526, 0x0470, 0x6014, 0xd0fc, + 0x1118, 0x2069, 0x4540, 0x0010, 0x2069, 0x4580, 0x2091, 0x8000, + 0x681f, 0x0002, 0x88ff, 0x0120, 0xa046, 0x788c, 0x2060, 0x0c70, + 0x788b, 0x0000, 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, + 0x0098, 0x00ce, 0x788b, 0x0000, 0x080c, 0x201c, 0x6004, 0xa084, + 0x000f, 0x0059, 0x88ff, 0x0130, 0x788c, 0x2060, 0x6004, 0xa084, + 0x000f, 0x0019, 0x0804, 0x1df0, 0x0005, 0x0002, 0x1eb6, 0x1ed1, + 0x1eea, 0x1eb6, 0x1ef7, 0x1ec7, 0x1eb6, 0x1eb6, 0x1eb6, 0x1ecf, + 0x1ee8, 0x1eb6, 0x1eb6, 0x1eb6, 0x1eb6, 0x1eb6, 0x2039, 0x0400, + 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705, 0x600a, 0x080c, 0x1f33, + 0x609c, 0x78ba, 0x609f, 0x0000, 0x080c, 0x2008, 0x0005, 0x78bc, + 0xd0c4, 0x0108, 0x0c58, 0x601c, 0xc0bd, 0x601e, 0x0030, 0x080c, + 0x2046, 0x78bc, 0xd0c4, 0x0108, 0x0c08, 0x78bf, 0x0000, 0x6004, + 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0138, 0x080c, 0x1f33, + 0x0120, 0x78bc, 0xc0c5, 0x78be, 0x0010, 0x0804, 0x1f4e, 0x0005, + 0x080c, 0x2043, 0x78bc, 0xa08c, 0x0e00, 0x1110, 0xd0c4, 0x1108, + 0x0828, 0x080c, 0x1f33, 0x1110, 0x0804, 0x1f4e, 0x0005, 0x78bc, + 0xd0c4, 0x0110, 0x0804, 0x1eb6, 0x78bf, 0x0000, 0x6714, 0x2011, + 0x0001, 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0188, 0xa7bc, + 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0150, 0xa7bc, 0x8000, + 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0108, 0x00c0, + 0x080c, 0x1b5f, 0x2d00, 0x2091, 0x8000, 0x682b, 0x0000, 0x682f, + 0x0000, 0x6808, 0xa084, 0xffde, 0x680a, 0xade8, 0x0010, 0x2091, + 0x8001, 0x1f04, 0x1f1b, 0x8211, 0x0118, 0x20a9, 0x0100, 0x0c58, + 0x080c, 0x1b44, 0x0005, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, + 0x78b6, 0x1110, 0x78ba, 0x0038, 0x689e, 0x2d00, 0x6002, 0x78b8, + 0xad06, 0x1108, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x1130, 0x78bc, + 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006, 0x0005, 0x00e6, 0xa02e, + 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2, 0x601c, 0x60a2, 0x2048, + 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0110, 0x080c, 0x3f66, + 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, 0x2071, 0x4580, 0xd7fc, + 0x1110, 0x2071, 0x4540, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, + 0x0120, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x71c0, 0xa168, + 0x2700, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0x71c4, + 0xa100, 0x60c2, 0x2091, 0x8000, 0x7814, 0xd0c4, 0x0138, 0xd7fc, + 0x1118, 0xd0f4, 0x1140, 0x0010, 0xd0fc, 0x1128, 0x6e08, 0xd684, + 0x01f0, 0xd9fc, 0x11e0, 0x2091, 0x8001, 0x080c, 0x1bc7, 0x2091, + 0x8000, 0x080c, 0x1d7c, 0x2091, 0x8001, 0x7814, 0xd0c4, 0x0904, + 0x2006, 0xd7fc, 0x1120, 0xd0f4, 0x1130, 0x0804, 0x2006, 0xd0fc, + 0x1110, 0x0804, 0x2006, 0x601b, 0x0021, 0x0804, 0x2006, 0x6024, + 0xa096, 0x0001, 0x1110, 0x8000, 0x6026, 0x6a10, 0x6814, 0xa202, + 0x0268, 0x0160, 0x2091, 0x8001, 0x2039, 0x0200, 0x609c, 0x78ba, + 0x609f, 0x0000, 0x080c, 0x2008, 0x0804, 0x2006, 0x2c08, 0xd9fc, + 0x01f0, 0x6800, 0xa065, 0x01d8, 0x6a04, 0x7000, 0xa084, 0x0002, + 0x0168, 0x7048, 0xa206, 0x1150, 0x6b04, 0x2160, 0x2304, 0x6002, + 0xa005, 0x1108, 0x6902, 0x2260, 0x6102, 0x0098, 0x2d00, 0x2060, + 0x080c, 0x2672, 0x6e08, 0x2160, 0x6202, 0x6906, 0x0050, 0x6800, + 0x6902, 0xa065, 0x0110, 0x6102, 0x0008, 0x6906, 0x2160, 0x6003, + 0x0000, 0x2160, 0xd9fc, 0x0118, 0xa6b4, 0xfffc, 0x6e0a, 0x6810, + 0x7d08, 0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, + 0x0128, 0xa6b6, 0x0040, 0x6e0a, 0x080c, 0x1bd8, 0x00ee, 0x0005, + 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x080c, 0x1d7c, 0x2091, + 0x8001, 0x78b8, 0xa065, 0x0128, 0x609c, 0x78ba, 0x609f, 0x0000, + 0x0c78, 0x78b6, 0x78ba, 0x0005, 0x7970, 0x7874, 0x2818, 0xd384, + 0x0118, 0x8000, 0xa112, 0x0220, 0x8000, 0xa112, 0x1278, 0xc384, + 0x7a7c, 0x721a, 0x7a78, 0x721e, 0xdac4, 0x0120, 0x7a84, 0x7222, + 0x7a80, 0x7226, 0xa006, 0xd384, 0x0108, 0x8000, 0x7876, 0x70d2, + 0x781c, 0xa005, 0x0138, 0x8001, 0x781e, 0x1120, 0x0e04, 0x2042, + 0x2091, 0x4080, 0x0005, 0x2039, 0x2058, 0x0010, 0x2039, 0x205e, + 0x2704, 0xa005, 0x0160, 0xac00, 0x2068, 0x6908, 0x6810, 0x6912, + 0x680a, 0x690c, 0x6814, 0x6916, 0x680e, 0x8738, 0x0c88, 0x0005, + 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, + 0x0000, 0x2041, 0x0000, 0x780c, 0x0002, 0x220a, 0x21e5, 0x2069, + 0x20d9, 0x2039, 0x8d74, 0x2734, 0x7d10, 0x00c0, 0x6084, 0xa086, + 0x0103, 0x1904, 0x20c3, 0x6114, 0x6018, 0xa105, 0x0120, 0x86ff, + 0x11d8, 0x0804, 0x20c3, 0x8603, 0xa080, 0x8d55, 0x620c, 0x2202, + 0x8000, 0x6210, 0x2202, 0x080c, 0x1d9a, 0x8630, 0xa68e, 0x000f, + 0x0904, 0x2144, 0x786c, 0xa065, 0x1d08, 0x7808, 0xa602, 0x1220, + 0xd5ac, 0x1110, 0x263a, 0x0005, 0xa682, 0x0003, 0x1a04, 0x2144, + 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x11f8, 0x2011, + 0x8d55, 0x2204, 0x70c6, 0x8210, 0x2204, 0x70ca, 0xd684, 0x1130, + 0x8210, 0x2204, 0x70da, 0x8210, 0x2204, 0x70de, 0xa685, 0x8020, + 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, + 0x7812, 0x2091, 0x8001, 0x203b, 0x0000, 0x0005, 0x7810, 0xc0ad, + 0x7812, 0x0804, 0x2144, 0x263a, 0x080c, 0x2210, 0x1904, 0x222c, + 0x786c, 0xa065, 0x1904, 0x206e, 0x2091, 0x8000, 0x7810, 0xa084, + 0xffcf, 0x86ff, 0x0108, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0804, + 0x222c, 0x2039, 0x8d74, 0x2734, 0x7d10, 0x00a0, 0x6084, 0xa086, + 0x0103, 0x1904, 0x212e, 0x6114, 0x6018, 0xa105, 0x0120, 0x86ff, + 0x11b8, 0x0804, 0x212e, 0xa680, 0x8d55, 0x620c, 0x2202, 0x080c, + 0x1d9a, 0x8630, 0xa68e, 0x001e, 0x0904, 0x2144, 0x786c, 0xa065, + 0x1d28, 0x7808, 0xa602, 0x1220, 0xd5ac, 0x1110, 0x263a, 0x0005, + 0xa682, 0x0006, 0x1a04, 0x2144, 0x2091, 0x8000, 0x2069, 0x0000, + 0x6818, 0xd084, 0x11f8, 0x2011, 0x8d55, 0x2009, 0x8d4e, 0x26a8, + 0x211c, 0x2204, 0x201a, 0x8108, 0x8210, 0x1f04, 0x2110, 0xa685, + 0x8030, 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, + 0xffcf, 0x7812, 0x2091, 0x8001, 0xa006, 0x2009, 0x8d75, 0x200a, + 0x203a, 0x0005, 0x7810, 0xc0ad, 0x7812, 0x00b0, 0x263a, 0x080c, + 0x2210, 0x1904, 0x222c, 0x786c, 0xa065, 0x1904, 0x20de, 0x2091, + 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0108, 0xc0ad, 0x7812, + 0x2091, 0x8001, 0x0804, 0x222c, 0x2091, 0x8000, 0x7007, 0x0004, + 0x7994, 0x70d4, 0xa102, 0x0228, 0x0168, 0x7b90, 0xa302, 0x1150, + 0x0010, 0x8002, 0x1138, 0x263a, 0x7810, 0xc0ad, 0x7812, 0x2091, + 0x8001, 0x0005, 0xa184, 0xff00, 0x0140, 0x810f, 0x810c, 0x810c, + 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, 0x8004, 0x8004, + 0x7a9c, 0xa210, 0x721a, 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4, + 0x0130, 0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, + 0x0030, 0x7003, 0x0000, 0x2009, 0x8d54, 0x260a, 0x8109, 0x2198, + 0x2104, 0xd084, 0x0108, 0x8633, 0xa6b0, 0x0002, 0x26a8, 0x53a6, + 0x8603, 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000, 0xa10a, + 0x1208, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, 0x0140, 0x810f, + 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0018, 0x8107, + 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211, 0xd4c4, + 0x0120, 0x7b84, 0xa319, 0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0de8, + 0xa084, 0x01e0, 0x01d0, 0x7d10, 0x2031, 0x8d54, 0x2634, 0x78a8, + 0x8000, 0x78aa, 0xd08c, 0x1138, 0x7007, 0x0006, 0x7004, 0xd094, + 0x1de8, 0x0804, 0x2146, 0x2069, 0x4547, 0x206b, 0x0003, 0x78ac, + 0xa085, 0x0300, 0x78ae, 0xa006, 0x0048, 0x2030, 0x75d6, 0x2091, + 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091, 0x8001, + 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, 0x711a, 0x721e, + 0xd5c4, 0x0110, 0x7322, 0x7426, 0x0005, 0x6084, 0xa086, 0x0103, + 0x11d8, 0x6114, 0x6018, 0xa105, 0x11b8, 0x2069, 0x0000, 0x6818, + 0xd084, 0x1190, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, + 0x681b, 0x0001, 0x2091, 0x4080, 0x080c, 0x1d9a, 0x0e04, 0x2203, + 0x786c, 0xa065, 0x1d10, 0x0005, 0x0059, 0x1530, 0x786c, 0xa065, + 0x19e0, 0x0410, 0x0029, 0x1500, 0x786c, 0xa065, 0x1dd8, 0x00e0, + 0x6084, 0xa086, 0x0103, 0x1168, 0x6018, 0xc0fc, 0x601a, 0xa086, + 0x0004, 0x1138, 0x7804, 0xd0a4, 0x0120, 0x080c, 0x1d9a, 0xa006, + 0x0005, 0x0079, 0x1118, 0xa085, 0x0001, 0x0005, 0x00b9, 0x1110, + 0x2041, 0x0001, 0x7d10, 0x0005, 0x88ff, 0x0110, 0x2091, 0x4080, + 0x0005, 0x7b90, 0x7994, 0x70d4, 0xa102, 0x1118, 0xa385, 0x0000, + 0x0005, 0x0210, 0xa302, 0x0005, 0x8002, 0x0005, 0xa184, 0xff00, + 0x0140, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, + 0x0018, 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0, + 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0018, 0x6028, + 0xa005, 0x0110, 0x2009, 0x0040, 0x080c, 0x1af9, 0x01d0, 0x78a8, + 0x8000, 0x78aa, 0xd08c, 0x1510, 0x6014, 0xd0fc, 0x1118, 0x2069, + 0x4540, 0x0010, 0x2069, 0x4580, 0x2091, 0x8000, 0x681f, 0x0003, + 0x78ab, 0x0000, 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, + 0x0068, 0x78ab, 0x0000, 0x080c, 0x1d9a, 0x7990, 0x7894, 0x8000, + 0xa10a, 0x1208, 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071, 0x0010, + 0x2091, 0x8001, 0x0005, 0x2138, 0xd7fc, 0x1118, 0x2009, 0x4558, + 0x0010, 0x2009, 0x4598, 0x2091, 0x8000, 0x200a, 0x00f6, 0x2009, + 0x4580, 0x2079, 0x0100, 0xd7fc, 0x1120, 0x2009, 0x4540, 0x2079, + 0x0200, 0x2104, 0xa086, 0x0000, 0x1180, 0xd7fc, 0x1118, 0x2009, + 0x4545, 0x0010, 0x2009, 0x4585, 0x2104, 0xa005, 0x1130, 0x7830, + 0xa084, 0x00c0, 0x1110, 0x781b, 0x0052, 0x00fe, 0x0005, 0x2009, + 0x0002, 0x2069, 0x4500, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x1904, + 0x230c, 0x2071, 0x4580, 0x2079, 0x0100, 0x2021, 0x47bf, 0x784b, + 0x000f, 0x2001, 0x01ff, 0x2004, 0xd0fc, 0x0118, 0x2019, 0x3dc2, + 0x0030, 0x20a1, 0x012b, 0x2019, 0x3dc2, 0xd184, 0x0110, 0x20a1, + 0x022b, 0x2304, 0xa005, 0x0140, 0x789a, 0x8318, 0x23ac, 0x8318, + 0x2398, 0x53a6, 0x3318, 0x0ca8, 0x789b, 0x0000, 0x789b, 0x0020, + 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, 0x2020, 0x1f04, 0x22ea, + 0x7003, 0x0000, 0x0016, 0xd18c, 0x2009, 0x0000, 0x0108, 0xc1bd, + 0x080c, 0x2422, 0x001e, 0x7020, 0xa084, 0x000f, 0xa085, 0x6300, + 0x7806, 0x780f, 0x9000, 0x7843, 0x00d8, 0x7853, 0x0090, 0x780b, + 0x2f08, 0x7452, 0x704f, 0x0000, 0x8109, 0x0140, 0x2071, 0x4540, + 0x2079, 0x0200, 0x2021, 0x45bf, 0x0804, 0x22c7, 0x080c, 0x24dc, + 0x0005, 0x0016, 0x2011, 0x0101, 0xd1bc, 0x1110, 0x2011, 0x0201, + 0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x001e, + 0x080c, 0x2422, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110, 0x2011, + 0x0201, 0x20a9, 0x0009, 0x810b, 0x1f04, 0x2333, 0xa18c, 0x0e00, + 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x0005, 0x2019, 0x0002, + 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x1f04, 0x2344, 0xa294, + 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x8319, 0x0118, + 0x2009, 0x0201, 0x0c78, 0x0005, 0x2011, 0x0101, 0xd3fc, 0x1110, + 0x2011, 0x0201, 0x20a9, 0x000c, 0x810b, 0x1f04, 0x235c, 0xa18c, + 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x0005, 0x2011, + 0x0102, 0xd3fc, 0x1110, 0x2011, 0x0202, 0x2204, 0xa084, 0xf0cf, + 0xa105, 0x2012, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc, 0x1110, + 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, + 0x62ac, 0x63ac, 0x00ce, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc, + 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, + 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x00ce, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc, 0x1110, 0x2061, 0x0200, 0xc1bc, 0x8103, - 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, - 0x00ce, 0x0005, 0x00c6, 0x2061, 0x0100, 0xd1bc, 0x1110, 0x2061, - 0x0200, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, - 0xa28c, 0x0020, 0x0118, 0xc2ac, 0xa39d, 0x4000, 0xc3ec, 0xd3b4, - 0x1108, 0xc3ed, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x00ce, - 0x0005, 0x2091, 0x8000, 0x00c6, 0x00e6, 0x6818, 0xa005, 0x0904, - 0x23a1, 0xd1fc, 0x0118, 0x2061, 0x8ad0, 0x0010, 0x2061, 0x89c0, - 0x080c, 0x23a9, 0x0538, 0x20a9, 0x0101, 0xd1fc, 0x0118, 0x2061, - 0x89d0, 0x0010, 0x2061, 0x88c0, 0x00c6, 0x04d9, 0x0128, 0x00ce, - 0x8c60, 0x1f04, 0x236c, 0x0468, 0x000e, 0xd1fc, 0x0128, 0xa082, - 0x89d0, 0x2071, 0x4380, 0x0020, 0xa082, 0x88c0, 0x2071, 0x4340, - 0x707a, 0x7176, 0x2001, 0x0004, 0x7066, 0x7083, 0x000f, 0x080c, - 0x2228, 0x00a0, 0xd1fc, 0x1118, 0x2071, 0x4340, 0x0010, 0x2071, - 0x4380, 0x6020, 0xc0dd, 0x6022, 0x7176, 0x2c00, 0x707e, 0x2001, - 0x0006, 0x7066, 0x7083, 0x000f, 0x080c, 0x2228, 0x2001, 0x0000, - 0x0010, 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, 0x00ee, 0x00ce, - 0x0005, 0x2c04, 0xa005, 0x0170, 0x2060, 0x6010, 0xa306, 0x1140, - 0x600c, 0xa206, 0x1128, 0x6014, 0xa106, 0x1110, 0xa006, 0x0020, - 0x6000, 0x0c80, 0xa085, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x0016, - 0x2079, 0x4380, 0x2071, 0x0100, 0xd1bc, 0x1120, 0x2079, 0x4340, - 0x2071, 0x0200, 0x7920, 0xa18c, 0x000f, 0x70ec, 0xd0c4, 0x1110, - 0x001e, 0x0060, 0x810b, 0x810b, 0x810b, 0x810b, 0x000e, 0xa18d, - 0x0800, 0xd0bc, 0x1110, 0xa18d, 0x0f00, 0x2104, 0x00ee, 0x00fe, - 0x0005, 0x00e6, 0x2001, 0x4301, 0x2004, 0xd0ac, 0x1904, 0x2439, - 0x68e4, 0xd0ac, 0x0904, 0x2439, 0xa084, 0x0006, 0x1904, 0x2439, - 0x6014, 0xd0fc, 0x1118, 0x2071, 0x47c0, 0x0010, 0x2071, 0x4840, - 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, - 0xa084, 0x000a, 0x15b0, 0x7108, 0xa194, 0xff00, 0x0590, 0xa18c, - 0x00ff, 0x2001, 0x000a, 0xa106, 0x01a8, 0x2001, 0x000c, 0xa106, - 0x01a0, 0x2001, 0x0012, 0xa106, 0x0198, 0x2001, 0x0014, 0xa106, - 0x0190, 0x2001, 0x0019, 0xa106, 0x0188, 0x2001, 0x0032, 0xa106, - 0x0180, 0x0090, 0x2009, 0x000c, 0x0088, 0x2009, 0x0012, 0x0070, - 0x2009, 0x0014, 0x0058, 0x2009, 0x0019, 0x0040, 0x2009, 0x0020, - 0x0028, 0x2009, 0x003f, 0x0010, 0x2011, 0x0000, 0x2100, 0xa205, - 0x700a, 0x00ee, 0x0005, 0x0e04, 0x243b, 0x2091, 0x8000, 0x2071, + 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0xa28c, 0x0020, 0x0118, + 0xc2ac, 0xa39d, 0x4000, 0xc3ec, 0xd3b4, 0x1108, 0xc3ed, 0x62ae, + 0x2010, 0x60a4, 0x63ae, 0x2018, 0x00ce, 0x0005, 0x2091, 0x8000, + 0x00c6, 0x00e6, 0x6818, 0xa005, 0x0904, 0x2406, 0xd1fc, 0x0118, + 0x2061, 0x8cd0, 0x0010, 0x2061, 0x8bc0, 0x080c, 0x240e, 0x0538, + 0x20a9, 0x0101, 0xd1fc, 0x0118, 0x2061, 0x8bd0, 0x0010, 0x2061, + 0x8ac0, 0x00c6, 0x04d9, 0x0128, 0x00ce, 0x8c60, 0x1f04, 0x23d1, + 0x0468, 0x000e, 0xd1fc, 0x0128, 0xa082, 0x8bd0, 0x2071, 0x4580, + 0x0020, 0xa082, 0x8ac0, 0x2071, 0x4540, 0x7076, 0x7172, 0x2001, + 0x0004, 0x7062, 0x707f, 0x000f, 0x080c, 0x228b, 0x00a0, 0xd1fc, + 0x1118, 0x2071, 0x4540, 0x0010, 0x2071, 0x4580, 0x6020, 0xc0dd, + 0x6022, 0x7172, 0x2c00, 0x707a, 0x2001, 0x0006, 0x7062, 0x707f, + 0x000f, 0x080c, 0x228b, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001, + 0x2091, 0x8001, 0xa005, 0x00ee, 0x00ce, 0x0005, 0x2c04, 0xa005, + 0x0170, 0x2060, 0x6010, 0xa306, 0x1140, 0x600c, 0xa206, 0x1128, + 0x6014, 0xa106, 0x1110, 0xa006, 0x0020, 0x6000, 0x0c80, 0xa085, + 0x0001, 0x0005, 0x00f6, 0x00e6, 0x0016, 0x2079, 0x4580, 0x2071, + 0x0100, 0xd1bc, 0x1120, 0x2079, 0x4540, 0x2071, 0x0200, 0x7920, + 0xa18c, 0x000f, 0x70ec, 0xd0c4, 0x1110, 0x001e, 0x0060, 0x810b, + 0x810b, 0x810b, 0x810b, 0x000e, 0xa18d, 0x0800, 0xd0bc, 0x1110, + 0xa18d, 0x0f00, 0x2104, 0x00ee, 0x00fe, 0x0005, 0x2001, 0x4501, + 0x2004, 0xd0ac, 0x1138, 0x68e4, 0xd0ac, 0x0120, 0xa084, 0x0006, + 0x1108, 0x0009, 0x0005, 0x6014, 0x00e6, 0x0036, 0x2018, 0x2071, + 0x4a40, 0xd0fc, 0x1110, 0x2071, 0x49c0, 0x8007, 0xa084, 0x000f, + 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084, 0x000a, 0x1904, + 0x24d9, 0x7108, 0xa194, 0xff00, 0x0904, 0x24d9, 0xa18c, 0x00ff, + 0x701c, 0xa084, 0xff00, 0x01c0, 0x7004, 0xa085, 0x003a, 0x7006, + 0x2001, 0x0009, 0xa102, 0x16d8, 0x2001, 0x000a, 0xa102, 0x16d0, + 0x2001, 0x000c, 0xa102, 0x16c8, 0x701c, 0xa084, 0x00ff, 0x701e, + 0x7004, 0xa084, 0xffdf, 0x7006, 0x2001, 0x000a, 0xa106, 0x01a8, + 0x2001, 0x000c, 0xa106, 0x01a0, 0x2001, 0x0012, 0xa106, 0x0198, + 0x2001, 0x0014, 0xa106, 0x0190, 0x2001, 0x0019, 0xa106, 0x0188, + 0x2001, 0x0032, 0xa106, 0x0180, 0x00d8, 0x2009, 0x000c, 0x00d0, + 0x2009, 0x0012, 0x00b8, 0x2009, 0x0014, 0x00a0, 0x2009, 0x0019, + 0x0088, 0x2009, 0x0020, 0x0070, 0x2009, 0x003f, 0x0058, 0x2009, + 0x000a, 0x0040, 0x2009, 0x000c, 0x0028, 0x2009, 0x0019, 0x0010, + 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x7004, 0xa085, 0x000a, + 0x7006, 0x2071, 0x4500, 0x7004, 0xd0bc, 0x0158, 0xd3fc, 0x1120, + 0x73ea, 0x2071, 0x4540, 0x0018, 0x73ee, 0x2071, 0x4580, 0x701f, + 0x800f, 0x003e, 0x00ee, 0x0005, 0x2001, 0x01ff, 0x2004, 0xd0fc, + 0x11d0, 0x2001, 0x04fd, 0x2004, 0xa082, 0x0005, 0x12a0, 0x2071, + 0x0200, 0x71ec, 0xa18c, 0x1c00, 0x810f, 0x810c, 0x810c, 0x2079, + 0x0100, 0x78ec, 0xa084, 0x1c00, 0x8007, 0x8004, 0x8004, 0xa105, + 0xa08a, 0x0007, 0x0208, 0x0005, 0x0002, 0x252a, 0x2511, 0x252a, + 0x2511, 0x2504, 0x251e, 0x2504, 0x7008, 0xa084, 0xc3ff, 0xa085, + 0x3000, 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085, 0x3000, 0x780a, + 0x0005, 0x7008, 0xa084, 0xc3ff, 0xa085, 0x2000, 0x700a, 0x7808, + 0xa084, 0xc3ff, 0xa085, 0x2000, 0x780a, 0x0005, 0x7008, 0xa084, + 0xc3ff, 0xa085, 0x0c00, 0x700a, 0x7808, 0xa084, 0xc3ff, 0xa085, + 0x0c00, 0x780a, 0x0005, 0x0e04, 0x252b, 0x2091, 0x8000, 0x2071, 0x0000, 0x0006, 0x7018, 0xd084, 0x1de8, 0x000e, 0x2071, 0x0010, - 0x70ca, 0x000e, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x0a01, 0x70df, - 0x0013, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0cf8, - 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708e, 0x7592, 0x7496, - 0x769a, 0x779e, 0xa594, 0x003f, 0xd4f4, 0x0138, 0xd7bc, 0x1128, - 0xa784, 0x007d, 0x1904, 0x3ace, 0x0871, 0xa49c, 0x000f, 0xa382, + 0x70ca, 0x000e, 0x70c6, 0x70c3, 0x8002, 0x70db, 0x0a04, 0x70df, + 0x0008, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0cf8, + 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708a, 0x758e, 0x7492, + 0x7696, 0x779a, 0xa594, 0x003f, 0xd4f4, 0x0138, 0xd7bc, 0x1128, + 0xa784, 0x007d, 0x1904, 0x3c3a, 0x0871, 0xa49c, 0x000f, 0xa382, 0x0004, 0x0320, 0xa3a6, 0x0007, 0x1930, 0x2418, 0x8507, 0xa084, - 0x000f, 0x0002, 0x2a4f, 0x2b10, 0x2b38, 0x2d71, 0x30cc, 0x3112, - 0x31a7, 0x3220, 0x32db, 0x33a6, 0x248d, 0x248a, 0x285b, 0x295c, - 0x30a0, 0x248a, 0x080c, 0x243b, 0x0005, 0xa006, 0x0038, 0x7808, - 0xc08d, 0x780a, 0xa006, 0x7002, 0x704e, 0x7046, 0x70d2, 0x7060, - 0xa005, 0x1904, 0x25d9, 0x7064, 0xa084, 0x0007, 0x0002, 0x24a7, - 0x2513, 0x251b, 0x2524, 0x252d, 0x25bf, 0x2536, 0x2513, 0x7830, - 0xd0bc, 0x1d10, 0x71d4, 0xd1b4, 0x1904, 0x24f0, 0x70a4, 0xa086, - 0x0001, 0x09d0, 0x70b4, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, - 0x0080, 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, - 0xa05d, 0xa886, 0x0001, 0x0118, 0x69bc, 0x7daa, 0x79aa, 0x68c0, - 0xa04d, 0x6e1c, 0x2001, 0x0010, 0x0804, 0x270a, 0x7060, 0xa005, - 0x1904, 0x248c, 0x00c6, 0x00d6, 0x70b4, 0xa06d, 0x6800, 0xa065, + 0x000f, 0x0002, 0x2b40, 0x2c01, 0x2c29, 0x2e64, 0x31f1, 0x3243, + 0x32e8, 0x3361, 0x341f, 0x34f6, 0x257d, 0x257a, 0x294d, 0x2a4d, + 0x31c5, 0x257a, 0x080c, 0x252b, 0x0005, 0xa006, 0x0038, 0x7808, + 0xc08d, 0x780a, 0xa006, 0x7002, 0x704a, 0x7042, 0x70ce, 0x705c, + 0xa005, 0x1904, 0x26cb, 0x7060, 0xa084, 0x0007, 0x0002, 0x2597, + 0x2605, 0x260d, 0x2616, 0x261f, 0x26b1, 0x2628, 0x2605, 0x7830, + 0xd0bc, 0x1d10, 0x71d0, 0xd1bc, 0x19f8, 0xd1b4, 0x1904, 0x25e2, + 0x70a0, 0xa086, 0x0001, 0x09c0, 0x70b0, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0080, 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0118, 0x69bc, 0x7daa, - 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0804, 0x270a, - 0x080c, 0x3a8d, 0x1904, 0x248c, 0x781b, 0x0068, 0x70bc, 0xa06d, + 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0010, 0x0804, 0x27fc, + 0x705c, 0xa005, 0x1904, 0x257c, 0x00c6, 0x00d6, 0x70b0, 0xa06d, + 0x6800, 0xa065, 0xa055, 0x789b, 0x0080, 0x6b0c, 0x7baa, 0x6808, + 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0118, + 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0020, + 0x0804, 0x27fc, 0x080c, 0x3bf9, 0x1904, 0x257c, 0x781b, 0x0068, + 0x70b8, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, + 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, 0x68bc, 0x703e, 0xc1b4, + 0x71d2, 0x70b4, 0xa065, 0x68c0, 0x7056, 0x7003, 0x0002, 0x2d00, + 0x704a, 0xad80, 0x0009, 0x7042, 0x0005, 0x080c, 0x3bf9, 0x1120, + 0x781b, 0x0054, 0x7003, 0x0004, 0x0005, 0x080c, 0x3bf9, 0x1128, + 0x2011, 0x000c, 0x0419, 0x7003, 0x0004, 0x0005, 0x080c, 0x3bf9, + 0x1128, 0x2011, 0x0006, 0x00d1, 0x7003, 0x0004, 0x0005, 0x080c, + 0x3bf9, 0x1128, 0x2011, 0x000d, 0x0089, 0x7003, 0x0004, 0x0005, + 0x080c, 0x3bf9, 0x1150, 0x2011, 0x0006, 0x0041, 0x7078, 0x707b, + 0x0000, 0x2068, 0x704a, 0x7003, 0x0001, 0x0005, 0x7170, 0xc1fc, + 0x8107, 0x7882, 0x789b, 0x0080, 0xa286, 0x000c, 0x1120, 0x7aaa, + 0x2001, 0x0001, 0x0098, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, + 0xa286, 0x000d, 0x0120, 0x7aaa, 0x2001, 0x0002, 0x0038, 0x78ab, + 0x0020, 0x7174, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b, 0x0060, + 0x78aa, 0x785b, 0x0004, 0x781b, 0x0113, 0x080c, 0x3c0c, 0x707f, + 0x000f, 0x70d0, 0xd0b4, 0x0168, 0xc0b4, 0x70d2, 0x00c6, 0x70b4, + 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, + 0x00ce, 0x0005, 0x7014, 0xa005, 0x1138, 0x70d0, 0xd0b4, 0x0128, + 0x70b4, 0xac06, 0x1110, 0x0c29, 0x0005, 0x0016, 0x71a0, 0xa186, + 0x0001, 0x0528, 0x00d6, 0x0026, 0x2100, 0x2011, 0x0001, 0xa212, + 0x70b0, 0x2068, 0x6800, 0xac06, 0x0120, 0x8211, 0x01b0, 0x00c9, + 0x0cc8, 0x00c6, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b0, 0x2068, + 0x6800, 0x2060, 0x6008, 0xa084, 0xfbef, 0x600a, 0x8211, 0x0110, + 0x0041, 0x0cb0, 0x70a3, 0x0001, 0x00ce, 0x002e, 0x00de, 0x001e, + 0x0005, 0xade8, 0x0005, 0x70a8, 0xad06, 0x1110, 0x70a4, 0x2068, + 0x0005, 0x080c, 0x3bf9, 0x1904, 0x257c, 0x7078, 0x2068, 0x7770, + 0x080c, 0x3b35, 0x2c50, 0x080c, 0x3c94, 0x789b, 0x0080, 0x6814, + 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, + 0x0004, 0x0804, 0x2801, 0x080c, 0x3bf9, 0x1904, 0x257c, 0x789b, + 0x0080, 0x705c, 0x2068, 0x6f14, 0x70d0, 0xd0b4, 0x0168, 0xc0b4, + 0x70d2, 0x00c6, 0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, + 0x6018, 0x8001, 0x601a, 0x00ce, 0x080c, 0x3b35, 0x2c50, 0x080c, + 0x3c94, 0x6824, 0xa005, 0x0130, 0xa082, 0x0006, 0x0208, 0x0010, + 0x6827, 0x0005, 0x6814, 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x2031, + 0x0020, 0x2041, 0x0001, 0x2001, 0x0003, 0x0804, 0x2801, 0xc28d, + 0x72d2, 0x72bc, 0xa200, 0xa015, 0x7150, 0x8108, 0xa12a, 0x0208, + 0x71bc, 0x2164, 0x6504, 0x85ff, 0x1170, 0x7152, 0x8421, 0x1da8, + 0x70d0, 0xd08c, 0x0128, 0x70cc, 0xa005, 0x1110, 0x70cf, 0x000a, + 0x0005, 0x2200, 0x0c90, 0x70d0, 0xc08c, 0x70d2, 0x70cf, 0x0000, + 0x6034, 0xa005, 0x1db0, 0x6708, 0xa784, 0x073f, 0x01d0, 0xd7d4, + 0x1d80, 0xa784, 0x0021, 0x1d68, 0xa784, 0x0002, 0x0130, 0xa784, + 0x0004, 0x0d38, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218, 0x1d08, + 0xa784, 0x0100, 0x0130, 0x6018, 0xa005, 0x19d8, 0xa7bc, 0xfeff, + 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6318, + 0x0128, 0x601c, 0xa302, 0x0220, 0x0118, 0x0858, 0x83ff, 0x1948, + 0x2d58, 0x2c50, 0x7152, 0xd7bc, 0x1110, 0x7028, 0x6022, 0xc7bc, + 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, 0x0001, + 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0110, 0xd684, + 0x0110, 0xa39c, 0xffbf, 0xd6a4, 0x0110, 0xa39d, 0x0020, 0xa684, + 0x000e, 0x1904, 0x27b3, 0xc7a5, 0x670a, 0x2c00, 0x68c6, 0x77a0, + 0xa786, 0x0001, 0x1178, 0x70d0, 0xd0b4, 0x1160, 0x7000, 0xa082, + 0x0002, 0x1240, 0x7830, 0xd0bc, 0x1128, 0x789b, 0x0080, 0x7baa, + 0x0804, 0x27fa, 0x8739, 0x77a2, 0x2750, 0x77ac, 0xa7b0, 0x0005, + 0x70a8, 0xa606, 0x1108, 0x76a4, 0x76ae, 0x2c3a, 0x8738, 0x2d3a, + 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc, + 0x0150, 0x2091, 0x8000, 0x2091, 0x303d, 0x70d0, 0xa084, 0x303d, + 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000, 0x0120, 0x8421, 0x2200, + 0x1904, 0x2704, 0x0005, 0xd1dc, 0x0904, 0x3796, 0x2029, 0x0020, + 0xd69c, 0x1120, 0x8528, 0xd68c, 0x1108, 0x8528, 0x8840, 0x6f14, + 0x610c, 0x8108, 0xa18c, 0x00ff, 0x70c8, 0xa160, 0x2c64, 0x8cff, + 0x0188, 0x6014, 0xa706, 0x1dd0, 0x60b8, 0x8001, 0x60ba, 0x1d88, + 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x1904, + 0x2704, 0x0005, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840, + 0x6008, 0xc0d5, 0x600a, 0x77a0, 0xa786, 0x0001, 0x1904, 0x278a, + 0x70d0, 0xd0b4, 0x1904, 0x278a, 0x7000, 0xa082, 0x0002, 0x1a04, + 0x278a, 0x7830, 0xd0bc, 0x1904, 0x278a, 0x789b, 0x0080, 0x7baa, + 0x7daa, 0x79aa, 0x2001, 0x0002, 0x0006, 0x6018, 0x8000, 0x601a, + 0x0008, 0x0006, 0x2960, 0x6104, 0x2a60, 0x080c, 0x3ca7, 0x1590, + 0xa184, 0x0018, 0x0180, 0xa184, 0x0010, 0x0118, 0x080c, 0x393d, + 0x1548, 0xa184, 0x0008, 0x0138, 0x69a0, 0xa184, 0x0600, 0x1118, + 0x080c, 0x385d, 0x00f8, 0x69a0, 0xa184, 0x1e00, 0x0528, 0xa184, + 0x0800, 0x0178, 0x00c6, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, + 0x6104, 0xa18d, 0x0010, 0x6106, 0x00ce, 0x080c, 0x393d, 0x1150, + 0x69a0, 0xa184, 0x0200, 0x0118, 0x080c, 0x38a0, 0x0018, 0xa184, + 0x0400, 0x19f0, 0x69a0, 0xa184, 0x1000, 0x0130, 0x6914, 0xa18c, + 0xff00, 0x810f, 0x080c, 0x2384, 0x002e, 0xa68c, 0x00e0, 0xa684, + 0x0060, 0x0128, 0xa086, 0x0060, 0x1110, 0xa18d, 0x4000, 0xa18d, + 0x0104, 0x69b6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, + 0x681a, 0xd6bc, 0x0168, 0xc0fc, 0x7083, 0x0000, 0xa08a, 0x000d, + 0x0328, 0xa08a, 0x000c, 0x7182, 0x2001, 0x000c, 0x800c, 0x7186, + 0x78aa, 0x3518, 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, + 0x20a0, 0x789b, 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, + 0x2898, 0x25a0, 0xa286, 0x0020, 0x1508, 0x70d0, 0xc0b5, 0x70d2, + 0x2c00, 0x70b6, 0x2d00, 0x70ba, 0x6814, 0xc0fc, 0x8007, 0x7882, + 0xa286, 0x0002, 0x0904, 0x28d2, 0x70a0, 0x8000, 0x70a2, 0x74b0, + 0xa498, 0x0005, 0x70a8, 0xa306, 0x1108, 0x73a4, 0x73b2, 0xa286, + 0x0010, 0x0904, 0x257c, 0x00de, 0x00ce, 0x0005, 0x7000, 0xa005, + 0x19e0, 0xa286, 0x0002, 0x1904, 0x28e9, 0x080c, 0x3bf9, 0x19a8, + 0x6814, 0xc0fc, 0x8007, 0x7882, 0x2091, 0x8000, 0x781b, 0x0068, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, - 0x7808, 0xc08d, 0x780a, 0x68bc, 0x7042, 0xc1b4, 0x71d6, 0x70b8, - 0xa065, 0x68c0, 0x705a, 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, - 0x0009, 0x7046, 0x0005, 0x080c, 0x3a8d, 0x1120, 0x781b, 0x0054, - 0x7003, 0x0004, 0x0005, 0x080c, 0x3a8d, 0x1128, 0x2011, 0x000c, - 0x0419, 0x7003, 0x0004, 0x0005, 0x080c, 0x3a8d, 0x1128, 0x2011, - 0x0006, 0x00d1, 0x7003, 0x0004, 0x0005, 0x080c, 0x3a8d, 0x1128, - 0x2011, 0x000d, 0x0089, 0x7003, 0x0004, 0x0005, 0x080c, 0x3a8d, - 0x1150, 0x2011, 0x0006, 0x0041, 0x707c, 0x707f, 0x0000, 0x2068, - 0x704e, 0x7003, 0x0001, 0x0005, 0x7174, 0xc1fc, 0x8107, 0x7882, - 0x789b, 0x0080, 0xa286, 0x000c, 0x1120, 0x7aaa, 0x2001, 0x0001, - 0x0098, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286, 0x000d, - 0x0120, 0x7aaa, 0x2001, 0x0002, 0x0038, 0x78ab, 0x0020, 0x7178, - 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b, 0x0060, 0x78aa, 0x785b, - 0x0004, 0x781b, 0x0113, 0x080c, 0x3aa0, 0x7083, 0x000f, 0x70d4, - 0xd0b4, 0x0168, 0xc0b4, 0x70d6, 0x00c6, 0x70b8, 0xa065, 0x6008, - 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, 0x0005, - 0x7014, 0xa005, 0x1138, 0x70d4, 0xd0b4, 0x0128, 0x70b8, 0xac06, - 0x1110, 0x0c29, 0x0005, 0x0016, 0x71a4, 0xa186, 0x0001, 0x0528, - 0x00d6, 0x0026, 0x2100, 0x2011, 0x0001, 0xa212, 0x70b4, 0x2068, - 0x6800, 0xac06, 0x0120, 0x8211, 0x01b0, 0x00c9, 0x0cc8, 0x00c6, - 0x2100, 0x2011, 0x0001, 0xa212, 0x70b4, 0x2068, 0x6800, 0x2060, - 0x6008, 0xa084, 0xfbef, 0x600a, 0x8211, 0x0110, 0x0041, 0x0cb0, - 0x70a7, 0x0001, 0x00ce, 0x002e, 0x00de, 0x001e, 0x0005, 0xade8, - 0x0005, 0x70ac, 0xad06, 0x1110, 0x70a8, 0x2068, 0x0005, 0x080c, - 0x3a8d, 0x1904, 0x248c, 0x707c, 0x2068, 0x7774, 0x080c, 0x396d, - 0x2c50, 0x080c, 0x3b28, 0x789b, 0x0080, 0x6814, 0xa084, 0x001f, - 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, 0x0004, 0x0804, - 0x270f, 0x080c, 0x3a8d, 0x1904, 0x248c, 0x789b, 0x0080, 0x7060, - 0x2068, 0x6f14, 0x70d4, 0xd0b4, 0x0168, 0xc0b4, 0x70d6, 0x00c6, - 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, - 0x601a, 0x00ce, 0x080c, 0x396d, 0x2c50, 0x080c, 0x3b28, 0x6824, - 0xa005, 0x0130, 0xa082, 0x0006, 0x0208, 0x0010, 0x6827, 0x0005, - 0x6814, 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x2031, 0x0020, 0x2041, - 0x0001, 0x2001, 0x0003, 0x0804, 0x270f, 0xc28d, 0x72d6, 0x72c0, - 0xa200, 0xa015, 0x7154, 0x8108, 0xa12a, 0x0208, 0x71c0, 0x2164, - 0x6504, 0x85ff, 0x1170, 0x7156, 0x8421, 0x1da8, 0x70d4, 0xd08c, - 0x0128, 0x70d0, 0xa005, 0x1110, 0x70d3, 0x000a, 0x0005, 0x2200, - 0x0c90, 0x70d4, 0xc08c, 0x70d6, 0x70d3, 0x0000, 0x6034, 0xa005, - 0x1db0, 0x6708, 0xa784, 0x073f, 0x01d0, 0xd7d4, 0x1d80, 0xa784, - 0x0021, 0x1d68, 0xa784, 0x0002, 0x0130, 0xa784, 0x0004, 0x0d38, - 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218, 0x1d08, 0xa784, 0x0100, - 0x0130, 0x6018, 0xa005, 0x19d8, 0xa7bc, 0xfeff, 0x670a, 0x2568, - 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6318, 0x0128, 0x601c, - 0xa302, 0x0220, 0x0118, 0x0858, 0x83ff, 0x1948, 0x2d58, 0x2c50, - 0x7156, 0xd7bc, 0x1110, 0x7028, 0x6022, 0xc7bc, 0x670a, 0x68c0, - 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, 0x0001, 0x6b14, 0xa39c, - 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0110, 0xd684, 0x0110, 0xa39c, - 0xffbf, 0xd6a4, 0x0110, 0xa39d, 0x0020, 0xa684, 0x000e, 0x1904, - 0x26c1, 0xc7a5, 0x670a, 0x2c00, 0x68c6, 0x77a4, 0xa786, 0x0001, - 0x1178, 0x70d4, 0xd0b4, 0x1160, 0x7000, 0xa082, 0x0002, 0x1240, - 0x7830, 0xd0bc, 0x1128, 0x789b, 0x0080, 0x7baa, 0x0804, 0x2708, - 0x8739, 0x77a6, 0x2750, 0x77b0, 0xa7b0, 0x0005, 0x70ac, 0xa606, - 0x1108, 0x76a8, 0x76b2, 0x2c3a, 0x8738, 0x2d3a, 0x8738, 0x283a, - 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, 0xd0bc, 0x0150, 0x2091, - 0x8000, 0x2091, 0x303d, 0x70d4, 0xa084, 0x303d, 0x2091, 0x8000, - 0x2090, 0xaad5, 0x0000, 0x0120, 0x8421, 0x2200, 0x1904, 0x2612, - 0x0005, 0xd1dc, 0x0904, 0x35d5, 0x2029, 0x0020, 0xd69c, 0x1120, - 0x8528, 0xd68c, 0x1108, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, - 0xa18c, 0x00ff, 0x70cc, 0xa160, 0x2c64, 0x8cff, 0x0188, 0x6014, - 0xa706, 0x1dd0, 0x60b8, 0x8001, 0x60ba, 0x1d88, 0x2a60, 0x6008, - 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x1904, 0x2612, 0x0005, - 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840, 0x6008, 0xc0d5, - 0x600a, 0x77a4, 0xa786, 0x0001, 0x1904, 0x2698, 0x70d4, 0xd0b4, - 0x1904, 0x2698, 0x7000, 0xa082, 0x0002, 0x1a04, 0x2698, 0x7830, - 0xd0bc, 0x1904, 0x2698, 0x789b, 0x0080, 0x7baa, 0x7daa, 0x79aa, - 0x2001, 0x0002, 0x0006, 0x6018, 0x8000, 0x601a, 0x0008, 0x0006, - 0x2960, 0x6104, 0x2a60, 0x080c, 0x3b3b, 0x1590, 0xa184, 0x0018, - 0x0180, 0xa184, 0x0010, 0x0118, 0x080c, 0x3776, 0x1548, 0xa184, - 0x0008, 0x0138, 0x69a0, 0xa184, 0x0600, 0x1118, 0x080c, 0x3696, - 0x00f8, 0x69a0, 0xa184, 0x1e00, 0x0528, 0xa184, 0x0800, 0x0178, - 0x00c6, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, - 0x0010, 0x6106, 0x00ce, 0x080c, 0x3776, 0x1150, 0x69a0, 0xa184, - 0x0200, 0x0118, 0x080c, 0x36d9, 0x0018, 0xa184, 0x0400, 0x19f0, - 0x69a0, 0xa184, 0x1000, 0x0130, 0x6914, 0xa18c, 0xff00, 0x810f, - 0x080c, 0x231f, 0x002e, 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0128, - 0xa086, 0x0060, 0x1110, 0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, - 0x789b, 0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, - 0x0168, 0xc0fc, 0x7087, 0x0000, 0xa08a, 0x000d, 0x0328, 0xa08a, - 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, 0x78aa, 0x3518, - 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, 0x20a0, 0x789b, - 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898, 0x25a0, - 0xa286, 0x0020, 0x1508, 0x70d4, 0xc0b5, 0x70d6, 0x2c00, 0x70ba, - 0x2d00, 0x70be, 0x6814, 0xc0fc, 0x8007, 0x7882, 0xa286, 0x0002, - 0x0904, 0x27e0, 0x70a4, 0x8000, 0x70a6, 0x74b4, 0xa498, 0x0005, - 0x70ac, 0xa306, 0x1108, 0x73a8, 0x73b6, 0xa286, 0x0010, 0x0904, - 0x248c, 0x00de, 0x00ce, 0x0005, 0x7000, 0xa005, 0x19e0, 0xa286, - 0x0002, 0x1904, 0x27f7, 0x080c, 0x3a8d, 0x19a8, 0x6814, 0xc0fc, - 0x8007, 0x7882, 0x2091, 0x8000, 0x781b, 0x0068, 0x68b4, 0x785a, - 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x2091, 0x8001, - 0x7808, 0xc08d, 0x780a, 0x0126, 0x00d6, 0x00c6, 0x70d4, 0xa084, - 0x2e00, 0x2090, 0x00ce, 0x00de, 0x012e, 0x2900, 0x705a, 0x68bc, - 0x7042, 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, - 0x7830, 0xd0bc, 0x0140, 0x2091, 0x303d, 0x70d4, 0xa084, 0x303d, - 0x2091, 0x8000, 0x2090, 0x70a4, 0xa005, 0x1108, 0x0005, 0x8421, - 0x0de8, 0x7250, 0x70c0, 0xa200, 0xa015, 0x0804, 0x2612, 0xa286, - 0x0010, 0x1560, 0x080c, 0x3a8d, 0x1904, 0x278b, 0x6814, 0xc0fc, - 0x8007, 0x7882, 0x781b, 0x0068, 0x68b4, 0x785a, 0x6894, 0x78d6, - 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, 0x70a4, - 0x8000, 0x70a6, 0x74b4, 0xa490, 0x0005, 0x70ac, 0xa206, 0x1108, - 0x72a8, 0x72b6, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003, 0x0002, - 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x0005, 0x6bb4, 0xa39d, - 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x6b94, 0x7bd6, - 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x0068, 0x2900, 0x705a, - 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605, 0x0170, 0x70d4, - 0xa084, 0x2e00, 0xa086, 0x2600, 0x1118, 0x2009, 0x0000, 0x0010, - 0x2009, 0x0001, 0xa284, 0x000f, 0x0023, 0xad80, 0x0009, 0x7046, - 0x0005, 0x2859, 0x3fb8, 0x3fb8, 0x3fa6, 0x3fb8, 0x2859, 0x2859, - 0x2859, 0x080c, 0x243b, 0x7808, 0xa084, 0xfffd, 0x780a, 0x00f6, - 0x2079, 0x4300, 0x78ac, 0x00fe, 0xd084, 0x01c0, 0x7064, 0xa086, - 0x0001, 0x1118, 0x7066, 0x0804, 0x293a, 0x7064, 0xa086, 0x0005, - 0x1158, 0x707c, 0x2068, 0x681b, 0x0004, 0x6817, 0x0000, 0x6820, - 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7067, 0x0000, 0x70a7, 0x0000, - 0x70a8, 0x70b2, 0x70b6, 0x080c, 0x256f, 0x0156, 0x2011, 0x0004, - 0x7164, 0xa186, 0x0001, 0x0170, 0xa186, 0x0007, 0x1118, 0x701f, - 0x0005, 0x0040, 0x701f, 0x0001, 0x7067, 0x0000, 0x70d4, 0xc0c5, - 0x70d6, 0x0010, 0x7067, 0x0000, 0x2001, 0x430a, 0x2004, 0xa084, - 0x00ff, 0xa086, 0x0018, 0x0130, 0x7018, 0x7016, 0xa005, 0x1110, - 0x70a7, 0x0001, 0x0066, 0x080c, 0x3d52, 0x20a9, 0x0010, 0x2039, - 0x0000, 0x080c, 0x3861, 0xa7b8, 0x0100, 0x1f04, 0x28b1, 0x006e, - 0x7000, 0x0002, 0x28ee, 0x28cc, 0x28cc, 0x28c4, 0x28ee, 0x28ee, - 0x28ee, 0x28c2, 0x080c, 0x243b, 0x7060, 0xa005, 0x0538, 0xad06, - 0x1118, 0x6800, 0x7062, 0x0080, 0x6820, 0xd084, 0x1148, 0x6f14, - 0x080c, 0x396d, 0x6008, 0xc0d4, 0x600a, 0x080c, 0x35ab, 0x0020, - 0x705c, 0x2060, 0x6800, 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, - 0xd0fc, 0x0108, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x6820, - 0xa084, 0x00ff, 0xc09d, 0x6822, 0x080c, 0x1d3d, 0xb284, 0x0800, - 0x0118, 0x2021, 0x8ad0, 0x0010, 0x2021, 0x89c0, 0x080c, 0x293f, - 0xb284, 0x0800, 0x0118, 0x2021, 0x4398, 0x0010, 0x2021, 0x4358, - 0x04f1, 0x20a9, 0x0101, 0xb284, 0x0800, 0x0118, 0x2021, 0x89d0, - 0x0010, 0x2021, 0x88c0, 0x0499, 0x8420, 0x1f04, 0x290b, 0xb284, - 0x0600, 0x0118, 0x2061, 0x48c0, 0x0010, 0x2061, 0x68c0, 0x2021, - 0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0198, 0x6018, 0x0016, - 0x0006, 0x2011, 0x4302, 0x220c, 0xa102, 0x2012, 0x000e, 0x001e, - 0xa102, 0x0338, 0x6012, 0x1128, 0x2011, 0x4304, 0x2204, 0xc0a5, - 0x2012, 0x601b, 0x0000, 0xace0, 0x0010, 0x1f04, 0x291b, 0x8421, - 0x1d00, 0x015e, 0x7003, 0x0000, 0x704f, 0x0000, 0x0005, 0x0046, - 0x2404, 0xa005, 0x01a8, 0x2068, 0x6800, 0x0006, 0x6a1a, 0x6817, + 0x2091, 0x8001, 0x7808, 0xc08d, 0x780a, 0x0126, 0x00d6, 0x00c6, + 0x70d0, 0xa084, 0x2e00, 0x2090, 0x00ce, 0x00de, 0x012e, 0x2900, + 0x7056, 0x68bc, 0x703e, 0x7003, 0x0002, 0x2d00, 0x704a, 0xad80, + 0x0009, 0x7042, 0x7830, 0xd0bc, 0x0140, 0x2091, 0x303d, 0x70d0, + 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0x70a0, 0xa005, 0x1108, + 0x0005, 0x8421, 0x0de8, 0x724c, 0x70bc, 0xa200, 0xa015, 0x0804, + 0x2704, 0xa286, 0x0010, 0x1560, 0x080c, 0x3bf9, 0x1904, 0x287d, + 0x6814, 0xc0fc, 0x8007, 0x7882, 0x781b, 0x0068, 0x68b4, 0x785a, + 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, + 0x780a, 0x70a0, 0x8000, 0x70a2, 0x74b0, 0xa490, 0x0005, 0x70a8, + 0xa206, 0x1108, 0x72a4, 0x72b2, 0x2900, 0x7056, 0x68bc, 0x703e, + 0x7003, 0x0002, 0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x0005, + 0x6bb4, 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, + 0x6b94, 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x0068, + 0x2900, 0x7056, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605, + 0x0170, 0x70d0, 0xa084, 0x2e00, 0xa086, 0x2600, 0x1118, 0x2009, + 0x0000, 0x0010, 0x2009, 0x0001, 0xa284, 0x000f, 0x0023, 0xad80, + 0x0009, 0x7042, 0x0005, 0x294b, 0x4180, 0x4180, 0x416e, 0x4180, + 0x294b, 0x294b, 0x294b, 0x080c, 0x252b, 0x7808, 0xa084, 0xfffd, + 0x780a, 0x00f6, 0x2079, 0x4500, 0x78ac, 0x00fe, 0xd084, 0x01b0, + 0x7060, 0xa086, 0x0001, 0x0904, 0x2a29, 0x7060, 0xa086, 0x0005, + 0x1158, 0x7078, 0x2068, 0x681b, 0x0004, 0x6817, 0x0000, 0x6820, + 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7063, 0x0000, 0x70a3, 0x0000, + 0x70a4, 0x70ae, 0x70b2, 0x080c, 0x2661, 0x0156, 0x2011, 0x0004, + 0x7160, 0xa186, 0x0001, 0x0160, 0xa186, 0x0007, 0x1118, 0x701f, + 0x0005, 0x0030, 0x701f, 0x0001, 0x70d0, 0xc0c5, 0x70d2, 0x0000, + 0x2001, 0x450a, 0x2004, 0xa084, 0x00ff, 0xa086, 0x0018, 0x0130, + 0x7018, 0x7016, 0xa005, 0x1110, 0x70a3, 0x0001, 0x0066, 0x080c, + 0x3ed9, 0x20a9, 0x0010, 0x2039, 0x0000, 0x080c, 0x3a29, 0xa7b8, + 0x0100, 0x1f04, 0x299d, 0x006e, 0x7000, 0x0002, 0x29da, 0x29b8, + 0x29b8, 0x29b0, 0x29da, 0x29da, 0x29da, 0x29ae, 0x080c, 0x252b, + 0x705c, 0xa005, 0x0538, 0xad06, 0x1118, 0x6800, 0x705e, 0x0080, + 0x6820, 0xd084, 0x1148, 0x6f14, 0x080c, 0x3b35, 0x6008, 0xc0d4, + 0x600a, 0x080c, 0x376c, 0x0020, 0x7058, 0x2060, 0x6800, 0x6002, + 0xa684, 0x5f00, 0x681e, 0x6818, 0xd0fc, 0x0108, 0x6a1a, 0x6817, + 0x0000, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, + 0x080c, 0x1d89, 0x2011, 0x0004, 0xb284, 0x0800, 0x0118, 0x2021, + 0x8cd0, 0x0010, 0x2021, 0x8bc0, 0x080c, 0x2a30, 0xb284, 0x0800, + 0x0118, 0x2021, 0x4597, 0x0010, 0x2021, 0x4557, 0x080c, 0x2a30, + 0x20a9, 0x0101, 0xb284, 0x0800, 0x0118, 0x2021, 0x8bd0, 0x0010, + 0x2021, 0x8ac0, 0x04a9, 0x8420, 0x1f04, 0x29fa, 0xb284, 0x0600, + 0x0118, 0x2061, 0x4ac0, 0x0010, 0x2061, 0x6ac0, 0x2021, 0x0002, + 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0198, 0x6018, 0x0016, 0x0006, + 0x2011, 0x4502, 0x220c, 0xa102, 0x2012, 0x000e, 0x001e, 0xa102, + 0x0338, 0x6012, 0x1128, 0x2011, 0x4504, 0x2204, 0xc0a5, 0x2012, + 0x601b, 0x0000, 0xace0, 0x0010, 0x1f04, 0x2a0a, 0x8421, 0x1d00, + 0x015e, 0x7063, 0x0000, 0x7003, 0x0000, 0x704b, 0x0000, 0x0005, + 0x0046, 0x2404, 0xa005, 0x01a8, 0x2068, 0x6800, 0x0006, 0x6a1a, + 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, + 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x080c, 0x1d89, 0x000e, + 0x0c48, 0x004e, 0x2023, 0x0000, 0x0005, 0xa282, 0x0003, 0x0310, + 0x080c, 0x252b, 0x2300, 0x0002, 0x2a57, 0x2ad4, 0x2aee, 0xa282, + 0x0002, 0x0110, 0x080c, 0x252b, 0x7060, 0x7063, 0x0000, 0x707f, + 0x0000, 0x0022, 0x77d0, 0xc7c5, 0x77d2, 0x0002, 0x2a6e, 0x2a6e, + 0x2a70, 0x2aa8, 0x37a0, 0x2a6e, 0x2aa8, 0x2a6e, 0x080c, 0x252b, + 0x7770, 0x080c, 0x3a29, 0x7770, 0xa7bc, 0x8f00, 0x080c, 0x3b35, + 0x6018, 0xa005, 0x0528, 0xd7fc, 0x1118, 0x2021, 0x8bc0, 0x0010, + 0x2021, 0x8cd0, 0x2009, 0x0005, 0x2011, 0x0010, 0x080c, 0x2b08, + 0x01b8, 0x0156, 0x20a9, 0x0101, 0xd7fc, 0x1118, 0x2021, 0x8ac0, + 0x0010, 0x2021, 0x8bd0, 0x0046, 0x2009, 0x0005, 0x2011, 0x0010, + 0x080c, 0x2b08, 0x004e, 0x0118, 0x8420, 0x1f04, 0x2a93, 0x015e, + 0x8738, 0xa784, 0x001f, 0x1990, 0x0804, 0x257f, 0x0804, 0x257f, + 0x7770, 0x080c, 0x3b35, 0x6018, 0xa005, 0x0520, 0xd7fc, 0x1118, + 0x2021, 0x8bc0, 0x0010, 0x2021, 0x8cd0, 0x2009, 0x0005, 0x2011, + 0x0020, 0x080c, 0x2b08, 0x01b0, 0x0156, 0x20a9, 0x0101, 0xd7fc, + 0x1118, 0x2021, 0x8ac0, 0x0010, 0x2021, 0x8bd0, 0x0046, 0x2009, + 0x0005, 0x2011, 0x0020, 0x04e1, 0x004e, 0x0118, 0x8420, 0x1f04, + 0x2ac6, 0x015e, 0x0804, 0x257f, 0x2200, 0x0002, 0x2ad9, 0x2adb, + 0x2adb, 0x080c, 0x252b, 0x2009, 0x0012, 0x7060, 0xa086, 0x0002, + 0x0110, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0108, 0x691a, 0x7063, + 0x0000, 0x70d0, 0xc0c5, 0x70d2, 0x0804, 0x3bab, 0x2200, 0x0002, + 0x2af5, 0x2adb, 0x2af3, 0x080c, 0x252b, 0x080c, 0x3ed9, 0x7000, + 0xa086, 0x0002, 0x1904, 0x3725, 0x080c, 0x3786, 0x6008, 0xa084, + 0xfbef, 0x600a, 0x080c, 0x3717, 0x0904, 0x3725, 0x0804, 0x257f, + 0x2404, 0xa005, 0x0590, 0x2068, 0x2d04, 0x0006, 0x6814, 0xa706, + 0x0118, 0x2d20, 0x000e, 0x0ca8, 0x000e, 0x2022, 0x691a, 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, - 0xa084, 0x00ff, 0xc09d, 0x6822, 0x080c, 0x1d3d, 0x000e, 0x0c48, - 0x004e, 0x2023, 0x0000, 0x0005, 0xa282, 0x0003, 0x0310, 0x080c, - 0x243b, 0x2300, 0x0002, 0x2966, 0x29e3, 0x29fd, 0xa282, 0x0002, - 0x0110, 0x080c, 0x243b, 0x7064, 0x7067, 0x0000, 0x7083, 0x0000, - 0x0022, 0x77d4, 0xc7c5, 0x77d6, 0x0002, 0x297d, 0x297d, 0x297f, - 0x29b7, 0x35df, 0x297d, 0x29b7, 0x297d, 0x080c, 0x243b, 0x7774, - 0x080c, 0x3861, 0x7774, 0xa7bc, 0x8f00, 0x080c, 0x396d, 0x6018, - 0xa005, 0x0528, 0xd7fc, 0x1118, 0x2021, 0x89c0, 0x0010, 0x2021, - 0x8ad0, 0x2009, 0x0005, 0x2011, 0x0010, 0x080c, 0x2a17, 0x01b8, - 0x0156, 0x20a9, 0x0101, 0xd7fc, 0x1118, 0x2021, 0x88c0, 0x0010, - 0x2021, 0x89d0, 0x0046, 0x2009, 0x0005, 0x2011, 0x0010, 0x080c, - 0x2a17, 0x004e, 0x0118, 0x8420, 0x1f04, 0x29a2, 0x015e, 0x8738, - 0xa784, 0x001f, 0x1990, 0x0804, 0x248f, 0x0804, 0x248f, 0x7774, - 0x080c, 0x396d, 0x6018, 0xa005, 0x0520, 0xd7fc, 0x1118, 0x2021, - 0x89c0, 0x0010, 0x2021, 0x8ad0, 0x2009, 0x0005, 0x2011, 0x0020, - 0x080c, 0x2a17, 0x01b0, 0x0156, 0x20a9, 0x0101, 0xd7fc, 0x1118, - 0x2021, 0x88c0, 0x0010, 0x2021, 0x89d0, 0x0046, 0x2009, 0x0005, - 0x2011, 0x0020, 0x04e1, 0x004e, 0x0118, 0x8420, 0x1f04, 0x29d5, - 0x015e, 0x0804, 0x248f, 0x2200, 0x0002, 0x29e8, 0x29ea, 0x29ea, - 0x080c, 0x243b, 0x2009, 0x0012, 0x7064, 0xa086, 0x0002, 0x0110, - 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0108, 0x691a, 0x7067, 0x0000, - 0x70d4, 0xc0c5, 0x70d6, 0x0804, 0x3a3f, 0x2200, 0x0002, 0x2a04, - 0x29ea, 0x2a02, 0x080c, 0x243b, 0x080c, 0x3d52, 0x7000, 0xa086, - 0x0002, 0x1904, 0x356d, 0x080c, 0x35c5, 0x6008, 0xa084, 0xfbef, - 0x600a, 0x080c, 0x355f, 0x0904, 0x356d, 0x0804, 0x248f, 0x2404, - 0xa005, 0x0590, 0x2068, 0x2d04, 0x0006, 0x6814, 0xa706, 0x0118, - 0x2d20, 0x000e, 0x0ca8, 0x000e, 0x2022, 0x691a, 0x6817, 0x0000, - 0x682b, 0x0000, 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, - 0x00ff, 0xa205, 0x6822, 0x080c, 0x1d3d, 0x2021, 0x4302, 0x241c, - 0x8319, 0x2322, 0x6010, 0x8001, 0x6012, 0x1128, 0x2021, 0x4304, - 0x2404, 0xc0a5, 0x2022, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x080c, - 0x258b, 0x080c, 0x35c5, 0x0005, 0xa085, 0x0001, 0x0ce0, 0x2300, - 0x0002, 0x2a56, 0x2a54, 0x2abc, 0x080c, 0x243b, 0x78e4, 0xa005, - 0x1708, 0x3208, 0xa18c, 0x0800, 0x0118, 0x0104, 0x248c, 0x0010, - 0x0304, 0x248c, 0x2008, 0xa084, 0x0030, 0x1110, 0x0804, 0x30a0, - 0x78ec, 0xa084, 0x0003, 0x0dd0, 0x2100, 0xa084, 0x0007, 0x0002, - 0x2a9f, 0x2aa8, 0x2a95, 0x2a78, 0x3a83, 0x3a83, 0x2a78, 0x2ab2, - 0x080c, 0x243b, 0x7000, 0xa086, 0x0004, 0x1190, 0x7064, 0xa086, - 0x0002, 0x1130, 0x2011, 0x0002, 0x2019, 0x0000, 0x0804, 0x295c, - 0x7064, 0xa086, 0x0006, 0x0db0, 0x7064, 0xa086, 0x0004, 0x0d90, - 0x79e4, 0x2001, 0x0003, 0x0804, 0x2daa, 0x6818, 0xd0fc, 0x0110, - 0x681b, 0x001d, 0x080c, 0x3837, 0x781b, 0x006e, 0x0005, 0x6818, - 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3837, 0x0804, 0x3a61, - 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x3837, 0x781b, - 0x00fa, 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, - 0x3837, 0x781b, 0x00cb, 0x0005, 0xa584, 0x000f, 0x11c0, 0x7000, - 0x0002, 0x248f, 0x2ac9, 0x2acb, 0x356d, 0x356d, 0x356d, 0x2ac9, - 0x2ac9, 0x080c, 0x243b, 0x080c, 0x35c5, 0x6008, 0xa084, 0xfbef, - 0x600a, 0x080c, 0x355f, 0x0904, 0x356d, 0x0804, 0x248f, 0x78e4, - 0xa005, 0x1b04, 0x2a7a, 0x3208, 0xa18c, 0x0800, 0x0118, 0x0104, - 0x2a7a, 0x0010, 0x0304, 0x2a7a, 0x2008, 0xa084, 0x0030, 0x1118, - 0x781b, 0x0068, 0x0005, 0x78ec, 0xa084, 0x0003, 0x0dc8, 0x2100, - 0xa184, 0x0007, 0x0002, 0x2b02, 0x2b06, 0x2afd, 0x2afb, 0x3a83, - 0x3a83, 0x2afb, 0x3a7d, 0x080c, 0x243b, 0x080c, 0x383d, 0x781b, - 0x006e, 0x0005, 0x080c, 0x383d, 0x0804, 0x3a61, 0x080c, 0x383d, - 0x781b, 0x00fa, 0x0005, 0x080c, 0x383d, 0x781b, 0x00cb, 0x0005, - 0x2300, 0x0002, 0x2b17, 0x2b15, 0x2b19, 0x080c, 0x243b, 0x0804, - 0x3220, 0x681b, 0x0016, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, - 0x0904, 0x3220, 0x78ec, 0xa084, 0x0003, 0x0904, 0x3220, 0xa184, - 0x0100, 0x0d98, 0xa184, 0x0007, 0x0002, 0x2b35, 0x2b06, 0x2a95, - 0x3a3f, 0x3a83, 0x3a83, 0x3a3f, 0x3a7d, 0x080c, 0x3a4b, 0x0005, - 0xa282, 0x0005, 0x0310, 0x080c, 0x243b, 0x7898, 0x2040, 0x2300, - 0x0002, 0x2b44, 0x2d41, 0x2d4b, 0x2200, 0x0002, 0x2b60, 0x2b4d, - 0x2b60, 0x2b4b, 0x2d25, 0x080c, 0x243b, 0x789b, 0x0018, 0x78a8, - 0x2010, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0a04, 0x3809, 0xa08a, - 0x0004, 0x1a04, 0x3809, 0x0002, 0x3809, 0x3809, 0x3809, 0x37bf, - 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0148, 0x0804, 0x3809, - 0x7000, 0xa005, 0x1dd8, 0x2011, 0x0004, 0x0804, 0x33b2, 0xa184, - 0x00ff, 0xa08a, 0x0010, 0x1a04, 0x3809, 0x0002, 0x2b88, 0x2b86, - 0x2b9a, 0x2b9e, 0x2c3c, 0x3809, 0x3809, 0x2c3e, 0x3809, 0x3809, - 0x2d21, 0x2d21, 0x3809, 0x3809, 0x3809, 0x2d23, 0x080c, 0x243b, - 0xd6e4, 0x0140, 0x2001, 0x0300, 0x8000, 0x8000, 0x783a, 0x781b, - 0x00c6, 0x0005, 0x6818, 0xd0fc, 0x0118, 0x681b, 0x001d, 0x0c90, - 0x0804, 0x3a3f, 0x681b, 0x001d, 0x0804, 0x3831, 0x6920, 0x6922, - 0xa684, 0x1800, 0x15e0, 0x6820, 0xd084, 0x1904, 0x2be7, 0x6818, - 0xa086, 0x0008, 0x1110, 0x681b, 0x0000, 0xd6d4, 0x0568, 0xd6bc, - 0x0558, 0x7087, 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, - 0x0718, 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, - 0x789b, 0x0061, 0x78aa, 0x0156, 0x0136, 0x0146, 0x0016, 0x3208, - 0xa18c, 0x0600, 0x0118, 0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, - 0x001e, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, - 0x53a6, 0x014e, 0x013e, 0x015e, 0x781b, 0x0071, 0x0005, 0xd6e4, - 0x0130, 0x781b, 0x0083, 0x0005, 0x781b, 0x0083, 0x0005, 0xa684, - 0x0060, 0x0dd0, 0xd6dc, 0x0dc0, 0xd6fc, 0x01a0, 0xc6fc, 0x7e5a, - 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x8007, 0xa084, 0x007f, 0xa108, - 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, - 0xa303, 0x68ae, 0xd6f4, 0x0118, 0xc6f4, 0x7e5a, 0x6eb6, 0x7000, - 0xa086, 0x0003, 0x1148, 0x0006, 0x080c, 0x3d52, 0x080c, 0x3fb8, - 0x000e, 0x781b, 0x0080, 0x0005, 0xa006, 0x080c, 0x4083, 0x6ab0, - 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0120, 0x2200, 0xa422, - 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, 0x7bde, - 0x2300, 0xa405, 0x1130, 0xc6f5, 0x7e5a, 0x6eb6, 0x781b, 0x0080, - 0x0005, 0x781b, 0x0080, 0x2200, 0xa115, 0x1118, 0x080c, 0x3fb8, - 0x0005, 0x080c, 0x3fe5, 0x0005, 0x080c, 0x243b, 0x0804, 0x2cbd, - 0x00c6, 0x7058, 0x2060, 0x7aa8, 0xa294, 0x00ff, 0xa286, 0x0004, - 0x11d8, 0x6920, 0xd1e4, 0x1170, 0x2039, 0x0000, 0x2041, 0x0000, - 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x36f6, 0x080c, 0x379a, - 0x0804, 0x2cb1, 0xa18c, 0xecff, 0x6922, 0x6104, 0xa18c, 0xffdd, - 0x6106, 0x6000, 0xc0ac, 0x6002, 0xa286, 0x0003, 0x01d0, 0x6104, - 0xa18c, 0x0010, 0x0548, 0x080c, 0x3969, 0x080c, 0x3776, 0x88ff, - 0x0518, 0x00ce, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, - 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b, 0x0082, - 0x0005, 0x6920, 0xd1cc, 0x0130, 0xa18c, 0xfdff, 0x6922, 0x6000, - 0xc0ec, 0x6002, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, 0x0000, - 0xa006, 0x2010, 0x080c, 0x379a, 0xa286, 0x0001, 0x0158, 0x6104, - 0xa18c, 0x0008, 0x01b0, 0x080c, 0x3969, 0x080c, 0x3696, 0x88ff, - 0x1980, 0x0078, 0x6920, 0xd1c4, 0x0130, 0xa18c, 0xfeff, 0x6922, - 0x6000, 0xc0e4, 0x6002, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, - 0x36f6, 0x00ce, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, - 0x781b, 0x0083, 0x0005, 0x0804, 0x382d, 0x2808, 0x789b, 0x0080, - 0x2019, 0x0080, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x1188, - 0x7ca8, 0xa4a4, 0x00ff, 0xa480, 0x0002, 0xa300, 0x2018, 0xa102, - 0x0a04, 0x2c40, 0x0904, 0x2c40, 0x24a8, 0x7aa8, 0x1f04, 0x2cd5, - 0x0c48, 0xa284, 0x00f0, 0xa082, 0x0020, 0x06b8, 0x2200, 0xa082, - 0x0021, 0x1698, 0x7aa8, 0x8318, 0x8318, 0x2100, 0xa302, 0x0ad0, - 0xa286, 0x0023, 0x0980, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, - 0xa684, 0xfff1, 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, - 0x78a0, 0x8001, 0x0904, 0x2cb1, 0x20a8, 0x7998, 0x789b, 0x0060, - 0x78aa, 0x2011, 0x0080, 0x799a, 0x78a8, 0x7998, 0x7a9a, 0x78aa, - 0x7a98, 0x1f04, 0x2d03, 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b, - 0x006e, 0x0005, 0x781b, 0x0082, 0x0005, 0x8318, 0x2100, 0xa302, - 0x0a04, 0x2cc2, 0xa284, 0x0080, 0x1904, 0x3831, 0x78a0, 0xa005, - 0x08c8, 0x0804, 0x3831, 0x0804, 0x3809, 0x7058, 0xa04d, 0x789b, - 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0110, 0x080c, - 0x243b, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, - 0x0005, 0x1a04, 0x3809, 0x0002, 0x3809, 0x3615, 0x3809, 0x3726, - 0x3b83, 0xa282, 0x0000, 0x1110, 0x080c, 0x243b, 0x080c, 0x3837, - 0x781b, 0x0082, 0x0005, 0xa282, 0x0003, 0x1110, 0x080c, 0x243b, - 0xd4fc, 0x11d0, 0x7064, 0xa005, 0x0110, 0x080c, 0x243b, 0x6f14, - 0x7776, 0xa7bc, 0x8f00, 0x080c, 0x396d, 0x6008, 0xa085, 0x0021, - 0x600a, 0x8738, 0xa784, 0x001f, 0x1db0, 0x080c, 0x383a, 0x7067, - 0x0002, 0x701f, 0x0009, 0x0010, 0x080c, 0x3846, 0x781b, 0x0082, - 0x0005, 0xa282, 0x0004, 0x0310, 0x080c, 0x243b, 0x2300, 0x0002, - 0x2d7b, 0x2eff, 0x2f3b, 0xa286, 0x0003, 0x0560, 0x7200, 0x7cd8, - 0x7ddc, 0x7fd0, 0x71d4, 0xd1b4, 0x00f0, 0x7868, 0xa084, 0x00ff, - 0x11d0, 0xa282, 0x0002, 0x12b8, 0x00d6, 0x783b, 0x8300, 0x781b, - 0x0059, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, - 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x00de, - 0x2001, 0x0000, 0x0058, 0x783b, 0x1300, 0x781b, 0x0057, 0x2001, - 0x0000, 0x0020, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x704a, 0x68a0, - 0xd0ec, 0x0118, 0x6008, 0xc08d, 0x600a, 0xa284, 0x000f, 0x0002, - 0x2ee0, 0x2dc5, 0x2dc2, 0x3012, 0x3085, 0x248f, 0x2dc0, 0x2dc0, - 0x080c, 0x243b, 0x6008, 0xc0d4, 0x600a, 0xd6e4, 0x0120, 0x7048, - 0xa086, 0x0014, 0x11e8, 0x080c, 0x3d52, 0x2009, 0x0000, 0x6818, - 0xd0fc, 0x0108, 0x7048, 0xa086, 0x0014, 0x0168, 0x6818, 0xa086, - 0x0008, 0x1904, 0x2ea2, 0x7858, 0xd09c, 0x0904, 0x2ea2, 0x6820, - 0xd0ac, 0x0904, 0x2ea2, 0x681b, 0x0014, 0x2009, 0x0002, 0x04a8, - 0x7868, 0xa08c, 0x00ff, 0x0588, 0xa186, 0x0008, 0x1158, 0x6008, - 0xc0a4, 0x600a, 0x080c, 0x355f, 0x0540, 0x080c, 0x35c5, 0x080c, - 0x3d52, 0x0060, 0xa186, 0x0028, 0x1500, 0x6018, 0xa005, 0x0d78, - 0x8001, 0x0d68, 0x8001, 0x0d58, 0x601e, 0x0c48, 0x6820, 0xd084, - 0x0904, 0x248f, 0xc084, 0x6822, 0x080c, 0x2580, 0x705c, 0x00c6, - 0x2060, 0x6800, 0x6002, 0x00ce, 0x6004, 0x6802, 0xa005, 0x2d00, - 0x1108, 0x6002, 0x6006, 0x0804, 0x248f, 0x0016, 0x81ff, 0x15e0, - 0x7000, 0xa086, 0x0030, 0x05c0, 0x71d4, 0xd1b4, 0x11e8, 0x7060, - 0xa005, 0x1590, 0x70a4, 0xa086, 0x0001, 0x0570, 0x7003, 0x0000, - 0x0046, 0x0056, 0x0076, 0x0066, 0x00c6, 0x00d6, 0x080c, 0x24b2, - 0x00de, 0x00ce, 0x006e, 0x007e, 0x005e, 0x004e, 0x71d4, 0xd1b4, - 0x11d8, 0x7003, 0x0040, 0x00c0, 0x080c, 0x3a8d, 0x11a8, 0x781b, - 0x0068, 0x00d6, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, - 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, - 0x7808, 0xc08d, 0x780a, 0x00de, 0x080c, 0x2f63, 0x001e, 0x81ff, - 0x0904, 0x2ea2, 0xa684, 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, - 0xa186, 0x0002, 0x15c0, 0x6818, 0xa086, 0x0014, 0x1130, 0x2008, - 0xd6e4, 0x0118, 0x7868, 0xa08c, 0x00ff, 0x080c, 0x3850, 0x080c, - 0x258b, 0x6820, 0xd0dc, 0x1538, 0x8717, 0xa294, 0x000f, 0x8213, - 0x8213, 0x8213, 0xb284, 0x0600, 0x0118, 0xa290, 0x47c0, 0x0010, - 0xa290, 0x4840, 0xa290, 0x0000, 0x221c, 0xd3c4, 0x0130, 0x8210, - 0x2204, 0xa085, 0x0038, 0x2012, 0x8211, 0xd3d4, 0x0138, 0x68a0, - 0xd0c4, 0x1120, 0x080c, 0x2fcb, 0x0804, 0x248f, 0x6008, 0xc08d, - 0x600a, 0x0008, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0110, 0x7048, - 0x681a, 0xa68c, 0xdf00, 0x691e, 0x6410, 0x84ff, 0x0168, 0x2009, - 0x4302, 0x2104, 0x8001, 0x200a, 0x8421, 0x6412, 0x1128, 0x2021, - 0x4304, 0x2404, 0xc0a5, 0x2022, 0x6018, 0xa005, 0x0118, 0x8001, - 0x601a, 0x1118, 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x1130, - 0x6800, 0xa005, 0x1108, 0x6002, 0x6006, 0x0020, 0x705c, 0x2060, - 0x6800, 0x6002, 0x2061, 0x4300, 0x6887, 0x0103, 0x2d08, 0x206b, - 0x0000, 0x6068, 0xa005, 0x616a, 0x0110, 0x2d02, 0x0008, 0x616e, - 0x7200, 0xa286, 0x0030, 0x0158, 0xa286, 0x0040, 0x1904, 0x248f, - 0x7003, 0x0002, 0x704c, 0x2068, 0x68c4, 0x2060, 0x0005, 0x7003, - 0x0002, 0x70bc, 0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, 0x68c0, - 0x705a, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x0005, 0xa282, - 0x0004, 0x0210, 0x080c, 0x243b, 0x2200, 0x0002, 0x2f0a, 0x2f19, - 0x2f25, 0x2f19, 0xa586, 0x1300, 0x0160, 0xa586, 0x8300, 0x1d90, - 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, - 0x600a, 0x7000, 0xa086, 0x0005, 0x0128, 0x080c, 0x3837, 0x781b, - 0x0082, 0x0005, 0x781b, 0x0083, 0x0005, 0x7890, 0x8007, 0x8001, - 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, - 0xa186, 0x0003, 0x0128, 0xa186, 0x0000, 0x0110, 0x0804, 0x3809, - 0x781b, 0x0083, 0x0005, 0x6820, 0xc095, 0x6822, 0x82ff, 0x1118, - 0x080c, 0x3837, 0x0030, 0x8211, 0x0110, 0x080c, 0x243b, 0x080c, - 0x3846, 0x781b, 0x0082, 0x0005, 0x080c, 0x3aa0, 0x7830, 0xa084, - 0x00c0, 0x1170, 0x0016, 0x3208, 0xa18c, 0x0800, 0x001e, 0x0118, - 0x0104, 0x2f60, 0x0010, 0x0304, 0x2f60, 0x791a, 0xa006, 0x0005, - 0xa085, 0x0001, 0x0005, 0xa684, 0x0060, 0x1130, 0x682f, 0x0000, - 0x6833, 0x0000, 0x0804, 0x2fca, 0xd6dc, 0x1198, 0x68b4, 0xd0dc, - 0x1180, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7048, 0xa005, 0x1130, - 0x2200, 0xa105, 0x0904, 0x3d52, 0x704b, 0x0015, 0x0804, 0x3d52, - 0x0005, 0xd6ac, 0x01f0, 0xd6f4, 0x0130, 0x682f, 0x0000, 0x6833, - 0x0000, 0x0804, 0x3d52, 0x68b4, 0xa084, 0x4000, 0xa635, 0xd6f4, - 0x1da0, 0x7048, 0xa005, 0x1110, 0x704b, 0x0015, 0xd6dc, 0x1128, - 0x68b4, 0xd0dc, 0x0110, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32, 0x0804, - 0x3d52, 0xd6f4, 0x0130, 0x682f, 0x0000, 0x6833, 0x0000, 0x0804, - 0x3d52, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, 0x1da0, 0x7048, - 0xa005, 0x1110, 0x704b, 0x0015, 0x2408, 0x2510, 0x2700, 0x8007, - 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, - 0xa205, 0x1110, 0x0804, 0x3d52, 0x7000, 0xa086, 0x0006, 0x0110, - 0x0804, 0x3d52, 0x0005, 0x6946, 0x6008, 0xc0cd, 0xd3cc, 0x0108, - 0xc08d, 0x600a, 0x6818, 0x683a, 0x681b, 0x0006, 0x688f, 0x0000, - 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, - 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, - 0x7000, 0x0002, 0x248f, 0x2ffa, 0x2ff4, 0x2ff2, 0x2ff2, 0x2ff2, - 0x2ff2, 0x2ff2, 0x080c, 0x243b, 0x6820, 0xd084, 0x1118, 0x080c, - 0x35ab, 0x0030, 0x705c, 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, - 0x3208, 0xa18c, 0x0600, 0x0118, 0x2021, 0x4358, 0x0010, 0x2021, - 0x4398, 0x2404, 0xa005, 0x0110, 0x2020, 0x0cd8, 0x2d22, 0x206b, - 0x0000, 0x0005, 0x080c, 0x35b1, 0x080c, 0x35c5, 0x6008, 0xc0cc, - 0x600a, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x6938, 0x691a, - 0x6944, 0x6916, 0x3208, 0xa18c, 0x0600, 0x0118, 0x2009, 0x0000, - 0x0010, 0x2009, 0x0001, 0x080c, 0x40b1, 0xd6dc, 0x0118, 0x691c, - 0xc1ed, 0x691e, 0x6818, 0xd0fc, 0x0148, 0x7868, 0xa08c, 0x00ff, - 0x0118, 0x681b, 0x001e, 0x0010, 0x681b, 0x0000, 0xb284, 0x0600, - 0x1118, 0x2021, 0x4398, 0x0010, 0x2021, 0x4358, 0x6800, 0x2022, - 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060, 0x6000, 0xd0a4, - 0x0580, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x00d6, - 0x00f6, 0x0156, 0x0146, 0x2079, 0x4300, 0x080c, 0x1b35, 0x014e, - 0x015e, 0x00fe, 0x70cc, 0x2010, 0x2009, 0x0101, 0x0026, 0x2204, - 0xa06d, 0x0140, 0x6814, 0xa706, 0x0110, 0x6800, 0x0cc8, 0x6820, - 0xc0d5, 0x6822, 0x002e, 0x8210, 0x8109, 0x1d80, 0x00de, 0x7067, - 0x0003, 0x707f, 0x0000, 0x7776, 0x7083, 0x000f, 0x71d4, 0xc1c4, - 0x71d6, 0x080c, 0x1d3d, 0x0804, 0x248f, 0x7cd8, 0x7ddc, 0x7fd0, - 0x080c, 0x2f63, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x080c, - 0x3aa4, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xd0fc, 0x0110, 0x7048, - 0x681a, 0xa68c, 0xdf00, 0x691e, 0x7067, 0x0000, 0x0804, 0x248f, - 0x7000, 0xa005, 0x1110, 0x0804, 0x248f, 0xa006, 0x080c, 0x3d52, - 0x6920, 0xd1ac, 0x1110, 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, - 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, 0x6822, 0x7000, 0x0002, - 0x248f, 0x30c2, 0x30c2, 0x30c5, 0x30c5, 0x30c5, 0x30c0, 0x30c0, - 0x080c, 0x243b, 0x6818, 0x0804, 0x2daa, 0x6008, 0xc0a4, 0x600a, - 0x6817, 0x0000, 0x0804, 0x357a, 0x2300, 0x0002, 0x30d1, 0x30d3, - 0x3110, 0x080c, 0x243b, 0xd6fc, 0x1904, 0x2bee, 0x7000, 0xa00d, - 0x0002, 0x248f, 0x30e3, 0x30e3, 0x3104, 0x30e3, 0x310d, 0x30e1, - 0x30e1, 0x080c, 0x243b, 0xa684, 0x0060, 0xa086, 0x0060, 0x11d0, - 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x681c, 0xc0ac, 0x681e, 0xa186, - 0x0002, 0x0110, 0x080c, 0x3d52, 0x080c, 0x3fb8, 0x781b, 0x0083, - 0x71d4, 0xd1b4, 0x1904, 0x248c, 0x70a4, 0xa086, 0x0001, 0x1904, - 0x24ce, 0x0005, 0xd6ec, 0x0d30, 0x6818, 0xd0fc, 0x0130, 0x681b, - 0x0015, 0xd6f4, 0x0110, 0x681b, 0x0007, 0x080c, 0x3a4b, 0x0005, - 0x080c, 0x243b, 0x2300, 0x0002, 0x3119, 0x3134, 0x3182, 0x080c, - 0x243b, 0x7000, 0x0002, 0x3123, 0x3125, 0x3125, 0x3123, 0x3123, - 0x3123, 0x3123, 0x3123, 0x080c, 0x243b, 0x080c, 0x3fb8, 0x681c, - 0xc0b4, 0x681e, 0x70d4, 0xd0b4, 0x1904, 0x248c, 0x70a4, 0xa086, - 0x0001, 0x1904, 0x24ce, 0x0005, 0xd6fc, 0x15e0, 0x7000, 0xa00d, - 0x0002, 0x248f, 0x3149, 0x3143, 0x316a, 0x3149, 0x316f, 0x3141, - 0x3141, 0x080c, 0x243b, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, - 0x78da, 0xa684, 0x0060, 0xa086, 0x0060, 0x11d0, 0xa6b4, 0xbfbf, - 0xc6ed, 0x7e5a, 0xa186, 0x0002, 0x0110, 0x080c, 0x3d52, 0x080c, - 0x3fb8, 0x781b, 0x0083, 0x681c, 0xc0b4, 0x681e, 0x71d4, 0xd1b4, - 0x1904, 0x248c, 0x70a4, 0xa086, 0x0001, 0x1904, 0x24ce, 0x0005, - 0xd6ec, 0x0d30, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x0007, 0x781b, - 0x00fb, 0x0005, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100, - 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b, - 0x0083, 0x0005, 0xd6dc, 0x0130, 0x782b, 0x3009, 0x781b, 0x0083, - 0x0804, 0x248c, 0x7884, 0xc0ac, 0x7886, 0x78e4, 0xa084, 0x0008, - 0x1150, 0xa484, 0x0200, 0x0108, 0xc6f5, 0xc6dd, 0x7e5a, 0x781b, - 0x0083, 0x0804, 0x248c, 0x6820, 0xc095, 0x6822, 0x080c, 0x39ca, - 0xc6dd, 0x080c, 0x3837, 0x781b, 0x0082, 0x0804, 0x248c, 0x2300, - 0x0002, 0x31ac, 0x31ae, 0x31b0, 0x080c, 0x243b, 0x0804, 0x3831, - 0x7d98, 0xd6d4, 0x11f8, 0x79e4, 0xd1ac, 0x0130, 0x78ec, 0xa084, - 0x0003, 0x0110, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, - 0xa684, 0xfffb, 0x785a, 0x7d9a, 0x79e4, 0xd1ac, 0x0120, 0x78ec, - 0xa084, 0x0003, 0x1120, 0x2001, 0x0014, 0x0804, 0x2daa, 0xa184, - 0x0007, 0x04c2, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, - 0x81ff, 0x0568, 0x789b, 0x0080, 0x7ba8, 0xa384, 0x0001, 0x11d0, - 0x7ba8, 0x7ba8, 0xa386, 0x0004, 0x1118, 0x2009, 0xffdf, 0x0058, - 0xa386, 0x0001, 0x1118, 0x2009, 0xfff7, 0x0028, 0xa386, 0x0003, - 0x1148, 0x2009, 0xffef, 0x00c6, 0x7058, 0x2060, 0x6004, 0xa104, - 0x6006, 0x00ce, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, - 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xecff, 0x6922, 0x7d9a, - 0x0804, 0x3a3f, 0x2a9f, 0x2aa8, 0x3214, 0x321a, 0x3212, 0x3212, - 0x3a3f, 0x3a3f, 0x080c, 0x243b, 0x6920, 0xa18c, 0xfcff, 0x6922, - 0x0804, 0x3a45, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0804, 0x3a3f, - 0x79e4, 0xa184, 0x0030, 0x0120, 0x78ec, 0xa084, 0x0003, 0x1558, - 0x7000, 0xa086, 0x0004, 0x1190, 0x7064, 0xa086, 0x0002, 0x1130, - 0x2011, 0x0002, 0x2019, 0x0000, 0x0804, 0x295c, 0x7064, 0xa086, - 0x0006, 0x0db0, 0x7064, 0xa086, 0x0004, 0x0d90, 0x7000, 0xa086, - 0x0000, 0x0904, 0x248c, 0x6920, 0xa184, 0x0420, 0x0128, 0xc1d4, - 0x6922, 0x6818, 0x0804, 0x2daa, 0x6818, 0xc0fd, 0x681a, 0x2001, - 0x0014, 0x0804, 0x2daa, 0xa184, 0x0007, 0x0002, 0x3a3f, 0x3a3f, - 0x325e, 0x3a3f, 0x3a83, 0x3a83, 0x3a3f, 0x3a3f, 0xd6bc, 0x0570, - 0x7184, 0x81ff, 0x0558, 0xa182, 0x000d, 0x1318, 0x7087, 0x0000, - 0x0028, 0xa182, 0x000c, 0x7086, 0x2009, 0x000c, 0x789b, 0x0061, - 0x79aa, 0x0156, 0x0136, 0x0146, 0x7088, 0x8114, 0xa210, 0x728a, - 0xa080, 0x000b, 0xad00, 0x2098, 0xb284, 0x0600, 0x0118, 0x20a1, - 0x022b, 0x0010, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, - 0x53a6, 0x014e, 0x013e, 0x015e, 0x0804, 0x3a45, 0xd6d4, 0x1904, - 0x32d1, 0x6820, 0xd084, 0x0904, 0x3a45, 0xa68c, 0x0060, 0xa684, - 0x0060, 0x0120, 0xa086, 0x0060, 0x1108, 0xc1f5, 0xc194, 0x795a, - 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, - 0xc0fd, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0904, 0x35da, 0xa18c, - 0x00f8, 0x1904, 0x35da, 0x0156, 0x0136, 0x0146, 0x0016, 0x20a1, - 0x012b, 0x3208, 0xa18c, 0x0600, 0x0110, 0x20a1, 0x022b, 0x001e, - 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, - 0x014e, 0x013e, 0x015e, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0804, - 0x3a45, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x0008, 0x080c, 0x3837, - 0x781b, 0x00ed, 0x0005, 0x2300, 0x0002, 0x32e2, 0x3398, 0x32e0, - 0x080c, 0x243b, 0x7cd8, 0x7ddc, 0x7fd0, 0x82ff, 0x11f0, 0x7200, - 0xa286, 0x0003, 0x0904, 0x2d7f, 0x71d4, 0xd1b4, 0x00c0, 0x00d6, - 0x783b, 0x8800, 0x781b, 0x0059, 0x70bc, 0xa06d, 0x68b4, 0xc0a5, - 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, - 0x71d6, 0x7003, 0x0030, 0x00de, 0x0030, 0x7200, 0x0020, 0x783b, - 0x1800, 0x781b, 0x0057, 0xa284, 0x000f, 0x0002, 0x3383, 0x3344, - 0x3318, 0x2da7, 0x3316, 0x3383, 0x3316, 0x3316, 0x080c, 0x243b, - 0x681c, 0xd0ec, 0x0118, 0x6008, 0xc08d, 0x600a, 0x6920, 0xc185, - 0x6922, 0x6800, 0x6006, 0xa005, 0x1108, 0x6002, 0x6008, 0xc0d4, - 0x600a, 0x681c, 0xa084, 0x000e, 0x1148, 0xb284, 0x0600, 0x0118, - 0x2009, 0x89c0, 0x0040, 0x2009, 0x8ad0, 0x0028, 0x7030, 0x68ba, - 0x7140, 0x70cc, 0xa108, 0x2104, 0x6802, 0x2d0a, 0x715e, 0xd6dc, - 0x1118, 0xc6fc, 0x6eb6, 0x04f8, 0x6eb6, 0xa684, 0x0060, 0x05d8, + 0xa084, 0x00ff, 0xa205, 0x6822, 0x080c, 0x1d89, 0x2021, 0x4502, + 0x241c, 0x8319, 0x2322, 0x6010, 0x8001, 0x6012, 0x1128, 0x2021, + 0x4504, 0x2404, 0xc0a5, 0x2022, 0x6008, 0xa084, 0xf9ef, 0x600a, + 0x080c, 0x267d, 0x080c, 0x3786, 0x0005, 0xa085, 0x0001, 0x0ce0, + 0x2300, 0x0002, 0x2b47, 0x2b45, 0x2bad, 0x080c, 0x252b, 0x78e4, + 0xa005, 0x1708, 0x3208, 0xa18c, 0x0800, 0x0118, 0x0104, 0x257c, + 0x0010, 0x0304, 0x257c, 0x2008, 0xa084, 0x0030, 0x1110, 0x0804, + 0x31c5, 0x78ec, 0xa084, 0x0003, 0x0dd0, 0x2100, 0xa084, 0x0007, + 0x0002, 0x2b90, 0x2b99, 0x2b86, 0x2b69, 0x3bef, 0x3bef, 0x2b69, + 0x2ba3, 0x080c, 0x252b, 0x7000, 0xa086, 0x0004, 0x1190, 0x7060, + 0xa086, 0x0002, 0x1130, 0x2011, 0x0002, 0x2019, 0x0000, 0x0804, + 0x2a4d, 0x7060, 0xa086, 0x0006, 0x0db0, 0x7060, 0xa086, 0x0004, + 0x0d90, 0x79e4, 0x2001, 0x0003, 0x0804, 0x2ea4, 0x6818, 0xd0fc, + 0x0110, 0x681b, 0x001d, 0x080c, 0x39ff, 0x781b, 0x006e, 0x0005, + 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x39ff, 0x0804, + 0x3bcd, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, 0x080c, 0x39ff, + 0x781b, 0x00fa, 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, + 0x080c, 0x39ff, 0x781b, 0x00cb, 0x0005, 0xa584, 0x000f, 0x11c0, + 0x7000, 0x0002, 0x257f, 0x2bba, 0x2bbc, 0x3725, 0x3725, 0x3725, + 0x2bba, 0x2bba, 0x080c, 0x252b, 0x080c, 0x3786, 0x6008, 0xa084, + 0xfbef, 0x600a, 0x080c, 0x3717, 0x0904, 0x3725, 0x0804, 0x257f, + 0x78e4, 0xa005, 0x1b04, 0x2b6b, 0x3208, 0xa18c, 0x0800, 0x0118, + 0x0104, 0x2b6b, 0x0010, 0x0304, 0x2b6b, 0x2008, 0xa084, 0x0030, + 0x1118, 0x781b, 0x0068, 0x0005, 0x78ec, 0xa084, 0x0003, 0x0dc8, + 0x2100, 0xa184, 0x0007, 0x0002, 0x2bf3, 0x2bf7, 0x2bee, 0x2bec, + 0x3bef, 0x3bef, 0x2bec, 0x3be9, 0x080c, 0x252b, 0x080c, 0x3a05, + 0x781b, 0x006e, 0x0005, 0x080c, 0x3a05, 0x0804, 0x3bcd, 0x080c, + 0x3a05, 0x781b, 0x00fa, 0x0005, 0x080c, 0x3a05, 0x781b, 0x00cb, + 0x0005, 0x2300, 0x0002, 0x2c08, 0x2c06, 0x2c0a, 0x080c, 0x252b, + 0x0804, 0x3361, 0x681b, 0x0016, 0x78a3, 0x0000, 0x79e4, 0xa184, + 0x0030, 0x0904, 0x3361, 0x78ec, 0xa084, 0x0003, 0x0904, 0x3361, + 0xa184, 0x0100, 0x0d98, 0xa184, 0x0007, 0x0002, 0x2c26, 0x2bf7, + 0x2b86, 0x3bab, 0x3bef, 0x3bef, 0x3bab, 0x3be9, 0x080c, 0x3bb7, + 0x0005, 0xa282, 0x0005, 0x0310, 0x080c, 0x252b, 0x7898, 0x2040, + 0x2300, 0x0002, 0x2c35, 0x2e34, 0x2e3e, 0x2200, 0x0002, 0x2c51, + 0x2c3e, 0x2c51, 0x2c3c, 0x2e16, 0x080c, 0x252b, 0x789b, 0x0018, + 0x78a8, 0x2010, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0a04, 0x39d0, + 0xa08a, 0x0004, 0x1a04, 0x39d0, 0x0002, 0x39d0, 0x39d0, 0x39d0, + 0x3986, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0148, 0x0804, + 0x39d0, 0x7000, 0xa005, 0x1dd8, 0x2011, 0x0004, 0x0804, 0x3502, + 0xa184, 0x00ff, 0xa08a, 0x0010, 0x1a04, 0x39d0, 0x0002, 0x2c79, + 0x2c77, 0x2c8b, 0x2c8f, 0x2d2d, 0x39d0, 0x39d0, 0x2d2f, 0x39d0, + 0x39d0, 0x2e12, 0x2e12, 0x39d0, 0x39d0, 0x39d0, 0x2e14, 0x080c, + 0x252b, 0xd6e4, 0x0140, 0x2001, 0x0300, 0x8000, 0x8000, 0x783a, + 0x781b, 0x00c7, 0x0005, 0x6818, 0xd0fc, 0x0118, 0x681b, 0x001d, + 0x0c90, 0x0804, 0x3bab, 0x681b, 0x001d, 0x0804, 0x39f9, 0x6920, + 0x6922, 0xa684, 0x1800, 0x15e0, 0x6820, 0xd084, 0x1904, 0x2cd8, + 0x6818, 0xa086, 0x0008, 0x1110, 0x681b, 0x0000, 0xd6d4, 0x0568, + 0xd6bc, 0x0558, 0x7083, 0x0000, 0x6818, 0xa084, 0x003f, 0xa08a, + 0x000d, 0x0718, 0xa08a, 0x000c, 0x7182, 0x2001, 0x000c, 0x800c, + 0x7186, 0x789b, 0x0061, 0x78aa, 0x0156, 0x0136, 0x0146, 0x0016, + 0x3208, 0xa18c, 0x0600, 0x0118, 0x20a1, 0x022b, 0x0010, 0x20a1, + 0x012b, 0x001e, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, + 0x2098, 0x53a6, 0x014e, 0x013e, 0x015e, 0x781b, 0x0071, 0x0005, + 0xd6e4, 0x0130, 0x781b, 0x0083, 0x0005, 0x781b, 0x0083, 0x0005, + 0xa684, 0x0060, 0x0dd0, 0xd6dc, 0x0dc0, 0xd6fc, 0x01a0, 0xc6fc, + 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, 0x78d0, 0x8007, 0xa084, 0x007f, + 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, + 0x2200, 0xa303, 0x68ae, 0xd6f4, 0x0118, 0xc6f4, 0x7e5a, 0x6eb6, + 0x7000, 0xa086, 0x0003, 0x1148, 0x0006, 0x080c, 0x3ed9, 0x080c, + 0x4180, 0x000e, 0x781b, 0x0080, 0x0005, 0xa006, 0x080c, 0x425d, + 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0120, 0x2200, + 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, 0x6ba6, 0x7bd6, + 0x7bde, 0x2300, 0xa405, 0x1130, 0xc6f5, 0x7e5a, 0x6eb6, 0x781b, + 0x0080, 0x0005, 0x781b, 0x0080, 0x2200, 0xa115, 0x1118, 0x080c, + 0x4180, 0x0005, 0x080c, 0x41ad, 0x0005, 0x080c, 0x252b, 0x0804, + 0x2dae, 0x00c6, 0x7054, 0x2060, 0x7aa8, 0xa294, 0x00ff, 0xa286, + 0x0004, 0x11d8, 0x6920, 0xd1e4, 0x1170, 0x2039, 0x0000, 0x2041, + 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x38bd, 0x080c, + 0x3961, 0x0804, 0x2da2, 0xa18c, 0xecff, 0x6922, 0x6104, 0xa18c, + 0xffdd, 0x6106, 0x6000, 0xc0ac, 0x6002, 0xa286, 0x0003, 0x01d0, + 0x6104, 0xa184, 0x0010, 0x0548, 0x080c, 0x3b31, 0x080c, 0x393d, + 0x88ff, 0x0518, 0x00ce, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, + 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, 0x781b, + 0x0082, 0x0005, 0x6920, 0xd1cc, 0x0130, 0xa18c, 0xfdff, 0x6922, + 0x6000, 0xc0ec, 0x6002, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, + 0x0000, 0xa006, 0x2010, 0x080c, 0x3961, 0xa286, 0x0001, 0x0158, + 0x6104, 0xa184, 0x0008, 0x01b0, 0x080c, 0x3b31, 0x080c, 0x385d, + 0x88ff, 0x1980, 0x0078, 0x6920, 0xd1c4, 0x0130, 0xa18c, 0xfeff, + 0x6922, 0x6000, 0xc0e4, 0x6002, 0x2031, 0x0000, 0xa006, 0x2010, + 0x080c, 0x38bd, 0x00ce, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, + 0x0005, 0x781b, 0x0083, 0x0005, 0x0804, 0x39f5, 0x2808, 0x789b, + 0x0080, 0x2019, 0x0080, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, + 0x1188, 0x7ca8, 0xa4a4, 0x00ff, 0xa480, 0x0002, 0xa300, 0x2018, + 0xa102, 0x0a04, 0x2d31, 0x0904, 0x2d31, 0x24a8, 0x7aa8, 0x1f04, + 0x2dc6, 0x0c48, 0xa284, 0x00f0, 0xa082, 0x0020, 0x06b8, 0x2200, + 0xa082, 0x0021, 0x1698, 0x7aa8, 0x8318, 0x8318, 0x2100, 0xa302, + 0x0ad0, 0xa286, 0x0023, 0x0980, 0x681c, 0xa084, 0xfff1, 0x681e, + 0x7e58, 0xa684, 0xfff1, 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, + 0x600a, 0x78a0, 0x8001, 0x0904, 0x2da2, 0x20a8, 0x7998, 0x789b, + 0x0060, 0x78aa, 0x2011, 0x0080, 0x799a, 0x78a8, 0x7998, 0x7a9a, + 0x78aa, 0x7a98, 0x1f04, 0x2df4, 0xc695, 0x7e5a, 0xd6d4, 0x1118, + 0x781b, 0x006e, 0x0005, 0x781b, 0x0082, 0x0005, 0x8318, 0x2100, + 0xa302, 0x0a04, 0x2db3, 0xa284, 0x0080, 0x1904, 0x39f9, 0x78a0, + 0xa005, 0x08c8, 0x0804, 0x39f9, 0x0804, 0x39d0, 0x7054, 0xa04d, + 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0110, + 0x080c, 0x252b, 0x7aa8, 0xa294, 0x00ff, 0x784b, 0x0008, 0x78a8, + 0xa084, 0x00ff, 0xa08a, 0x0005, 0x1a04, 0x39d0, 0x0002, 0x39d0, + 0x37d4, 0x39d0, 0x38ed, 0x3cef, 0xa282, 0x0000, 0x1110, 0x080c, + 0x252b, 0x080c, 0x39ff, 0x781b, 0x0082, 0x0005, 0xa282, 0x0003, + 0x1110, 0x080c, 0x252b, 0xd4fc, 0x11d0, 0x7060, 0xa005, 0x0110, + 0x080c, 0x252b, 0x6f14, 0x7772, 0xa7bc, 0x8f00, 0x080c, 0x3b35, + 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x001f, 0x1db0, + 0x080c, 0x3a02, 0x7063, 0x0002, 0x701f, 0x0009, 0x0010, 0x080c, + 0x3a0e, 0x781b, 0x0082, 0x0005, 0xa282, 0x0004, 0x0310, 0x080c, + 0x252b, 0x2300, 0x0002, 0x2e6e, 0x3004, 0x3040, 0xa286, 0x0003, + 0x0598, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x71d0, 0xd1bc, 0x1528, + 0xd1b4, 0x0518, 0x2001, 0x4501, 0x2004, 0xd0c4, 0x11f0, 0x7868, + 0xa084, 0x00ff, 0x11d0, 0xa282, 0x0002, 0x12b8, 0x00d6, 0x783b, + 0x8300, 0x781b, 0x0059, 0x70b8, 0xa06d, 0x68b4, 0x785a, 0x6894, + 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d2, 0x7003, + 0x0030, 0x00de, 0x2001, 0x0000, 0x0058, 0x783b, 0x1300, 0x781b, + 0x0057, 0x2001, 0x0000, 0x0020, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, + 0x7046, 0x68a0, 0xd0ec, 0x0118, 0x6008, 0xc08d, 0x600a, 0xa284, + 0x000f, 0x0002, 0x2fe5, 0x2ebf, 0x2ebc, 0x3117, 0x31aa, 0x257f, + 0x2eba, 0x2eba, 0x080c, 0x252b, 0x6008, 0xc0d4, 0x600a, 0xd6e4, + 0x0120, 0x7044, 0xa086, 0x0014, 0x11e8, 0x080c, 0x3ed9, 0x2009, + 0x0000, 0x6818, 0xd0fc, 0x0108, 0x7044, 0xa086, 0x0014, 0x0168, + 0x6818, 0xa086, 0x0008, 0x1904, 0x2fa7, 0x7858, 0xd09c, 0x0904, + 0x2fa7, 0x6820, 0xd0ac, 0x0904, 0x2fa7, 0x681b, 0x0014, 0x2009, + 0x0002, 0x04a8, 0x7868, 0xa08c, 0x00ff, 0x0588, 0xa186, 0x0008, + 0x1158, 0x6008, 0xc0a4, 0x600a, 0x080c, 0x3717, 0x0540, 0x080c, + 0x3786, 0x080c, 0x3ed9, 0x0060, 0xa186, 0x0028, 0x1500, 0x6018, + 0xa005, 0x0d78, 0x8001, 0x0d68, 0x8001, 0x0d58, 0x601e, 0x0c48, + 0x6820, 0xd084, 0x0904, 0x257f, 0xc084, 0x6822, 0x080c, 0x2672, + 0x7058, 0x00c6, 0x2060, 0x6800, 0x6002, 0x00ce, 0x6004, 0x6802, + 0xa005, 0x2d00, 0x1108, 0x6002, 0x6006, 0x0804, 0x257f, 0x0016, + 0x81ff, 0x15f0, 0x7000, 0xa086, 0x0030, 0x05d0, 0x71d0, 0xd1bc, + 0x15b8, 0xd1b4, 0x11e8, 0x705c, 0xa005, 0x1590, 0x70a0, 0xa086, + 0x0001, 0x0570, 0x7003, 0x0000, 0x0046, 0x0056, 0x0076, 0x0066, + 0x00c6, 0x00d6, 0x080c, 0x25a4, 0x00de, 0x00ce, 0x006e, 0x007e, + 0x005e, 0x004e, 0x71d0, 0xd1b4, 0x11d8, 0x7003, 0x0040, 0x00c0, + 0x080c, 0x3bf9, 0x11a8, 0x781b, 0x0068, 0x00d6, 0x70b8, 0xa06d, + 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, + 0xc1b4, 0x71d2, 0x7003, 0x0030, 0x7808, 0xc08d, 0x780a, 0x00de, + 0x080c, 0x3068, 0x001e, 0x81ff, 0x0904, 0x2fa7, 0xa684, 0xdf00, + 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186, 0x0002, 0x1904, 0x2fa8, + 0x6818, 0xa086, 0x0014, 0x1130, 0x2008, 0xd6e4, 0x0118, 0x7868, + 0xa08c, 0x00ff, 0x080c, 0x3a18, 0x080c, 0x267d, 0x6820, 0xd0dc, + 0x1578, 0x8717, 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xb284, + 0x0600, 0x0118, 0xa290, 0x49c0, 0x0010, 0xa290, 0x4a40, 0xa290, + 0x0000, 0x221c, 0xd3c4, 0x0170, 0x6820, 0xd0e4, 0x0128, 0xa084, + 0xefff, 0x6822, 0xc3ac, 0x2312, 0x8210, 0x2204, 0xa085, 0x0038, + 0x2012, 0x8211, 0xd3d4, 0x0138, 0x68a0, 0xd0c4, 0x1120, 0x080c, + 0x30d0, 0x0804, 0x257f, 0x6008, 0xc08d, 0x600a, 0x0008, 0x692a, + 0x6916, 0x6818, 0xd0fc, 0x0110, 0x7044, 0x681a, 0xa68c, 0xdf00, + 0x691e, 0x6410, 0x84ff, 0x0168, 0x2009, 0x4502, 0x2104, 0x8001, + 0x200a, 0x8421, 0x6412, 0x1128, 0x2021, 0x4504, 0x2404, 0xc0a5, + 0x2022, 0x6018, 0xa005, 0x0118, 0x8001, 0x601a, 0x1118, 0x6008, + 0xc0a4, 0x600a, 0x6820, 0xd084, 0x1130, 0x6800, 0xa005, 0x1108, + 0x6002, 0x6006, 0x0020, 0x7058, 0x2060, 0x6800, 0x6002, 0x2061, + 0x4500, 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, + 0x616a, 0x0110, 0x2d02, 0x0008, 0x616e, 0x7200, 0xa286, 0x0030, + 0x0158, 0xa286, 0x0040, 0x1904, 0x257f, 0x7003, 0x0002, 0x7048, + 0x2068, 0x68c4, 0x2060, 0x0005, 0x7003, 0x0002, 0x70b8, 0xa06d, + 0x68bc, 0x703e, 0x70b4, 0xa065, 0x68c0, 0x7056, 0x2d00, 0x704a, + 0xad80, 0x0009, 0x7042, 0x0005, 0xa282, 0x0004, 0x0210, 0x080c, + 0x252b, 0x2200, 0x0002, 0x300f, 0x301e, 0x302a, 0x301e, 0xa586, + 0x1300, 0x0160, 0xa586, 0x8300, 0x1d90, 0x7003, 0x0000, 0x6018, + 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, 0x600a, 0x7000, 0xa086, + 0x0005, 0x0128, 0x080c, 0x39ff, 0x781b, 0x0082, 0x0005, 0x781b, + 0x0083, 0x0005, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080, + 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0128, + 0xa186, 0x0000, 0x0110, 0x0804, 0x39d0, 0x781b, 0x0083, 0x0005, + 0x6820, 0xc095, 0x6822, 0x82ff, 0x1118, 0x080c, 0x39ff, 0x0030, + 0x8211, 0x0110, 0x080c, 0x252b, 0x080c, 0x3a0e, 0x781b, 0x0082, + 0x0005, 0x080c, 0x3c0c, 0x7830, 0xa084, 0x00c0, 0x1170, 0x0016, + 0x3208, 0xa18c, 0x0800, 0x001e, 0x0118, 0x0104, 0x3065, 0x0010, + 0x0304, 0x3065, 0x791a, 0xa006, 0x0005, 0xa085, 0x0001, 0x0005, + 0xa684, 0x0060, 0x1130, 0x682f, 0x0000, 0x6833, 0x0000, 0x0804, + 0x30cf, 0xd6dc, 0x1198, 0x68b4, 0xd0dc, 0x1180, 0x6998, 0x6a94, + 0x692e, 0x6a32, 0x7044, 0xa005, 0x1130, 0x2200, 0xa105, 0x0904, + 0x3ed9, 0x7047, 0x0015, 0x0804, 0x3ed9, 0x0005, 0xd6ac, 0x01f0, + 0xd6f4, 0x0130, 0x682f, 0x0000, 0x6833, 0x0000, 0x0804, 0x3ed9, + 0x68b4, 0xa084, 0x4000, 0xa635, 0xd6f4, 0x1da0, 0x7044, 0xa005, + 0x1110, 0x7047, 0x0015, 0xd6dc, 0x1128, 0x68b4, 0xd0dc, 0x0110, + 0x6ca8, 0x6da4, 0x6c2e, 0x6d32, 0x0804, 0x3ed9, 0xd6f4, 0x0130, + 0x682f, 0x0000, 0x6833, 0x0000, 0x0804, 0x3ed9, 0x68b4, 0xa084, + 0x4800, 0xa635, 0xd6f4, 0x1da0, 0x7044, 0xa005, 0x1110, 0x7047, + 0x0015, 0x2408, 0x2510, 0x2700, 0x8007, 0xa084, 0x007f, 0xa108, + 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x1110, 0x0804, + 0x3ed9, 0x7000, 0xa086, 0x0006, 0x0110, 0x0804, 0x3ed9, 0x0005, + 0x6946, 0x6008, 0xc0cd, 0xd3cc, 0x0108, 0xc08d, 0x600a, 0x6818, + 0x683a, 0x681b, 0x0006, 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, + 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, + 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, 0x7000, 0x0002, 0x257f, + 0x30ff, 0x30f9, 0x30f7, 0x30f7, 0x30f7, 0x30f7, 0x30f7, 0x080c, + 0x252b, 0x6820, 0xd084, 0x1118, 0x080c, 0x376c, 0x0030, 0x7058, + 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, 0x3208, 0xa18c, 0x0600, + 0x0118, 0x2021, 0x4557, 0x0010, 0x2021, 0x4597, 0x2404, 0xa005, + 0x0110, 0x2020, 0x0cd8, 0x2d22, 0x206b, 0x0000, 0x0005, 0x080c, + 0x3772, 0x080c, 0x3786, 0x6008, 0xc0cc, 0x600a, 0x682b, 0x0000, + 0x789b, 0x000e, 0x6f14, 0x6938, 0x691a, 0x6944, 0x6916, 0x3208, + 0xa18c, 0x0600, 0x0118, 0x2009, 0x0000, 0x0010, 0x2009, 0x0001, + 0x080c, 0x428b, 0xd6dc, 0x01c8, 0x691c, 0xc1ed, 0x691e, 0x6828, + 0xa082, 0x000e, 0x0290, 0x6848, 0xa084, 0x000f, 0xa086, 0x000b, + 0x1160, 0x685c, 0xa086, 0x0047, 0x1140, 0x2001, 0x4501, 0x2004, + 0xd0ac, 0x1118, 0x2700, 0x080c, 0x2454, 0x6818, 0xd0fc, 0x0140, + 0x681b, 0x0000, 0x7868, 0xa08c, 0x00ff, 0x0110, 0x681b, 0x001e, + 0xb284, 0x0600, 0x1118, 0x2021, 0x4597, 0x0010, 0x2021, 0x4557, + 0x6800, 0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060, + 0x6000, 0xd0a4, 0x0580, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, + 0x0020, 0x00d6, 0x00f6, 0x0156, 0x0146, 0x2079, 0x4500, 0x080c, + 0x1b77, 0x014e, 0x015e, 0x00fe, 0x70c8, 0x2010, 0x2009, 0x0101, + 0x0026, 0x2204, 0xa06d, 0x0140, 0x6814, 0xa706, 0x0110, 0x6800, + 0x0cc8, 0x6820, 0xc0d5, 0x6822, 0x002e, 0x8210, 0x8109, 0x1d80, + 0x00de, 0x7063, 0x0003, 0x707b, 0x0000, 0x7772, 0x707f, 0x000f, + 0x71d0, 0xc1c4, 0x71d2, 0x6818, 0xa086, 0x0002, 0x1138, 0x6817, + 0x0000, 0x682b, 0x0000, 0x681c, 0xc0ec, 0x681e, 0x080c, 0x1d89, + 0x0804, 0x257f, 0x7cd8, 0x7ddc, 0x7fd0, 0x080c, 0x3068, 0x682b, + 0x0000, 0x789b, 0x000e, 0x6f14, 0x080c, 0x3c10, 0xa08c, 0x00ff, + 0x6916, 0x6818, 0xd0fc, 0x0110, 0x7044, 0x681a, 0xa68c, 0xdf00, + 0x691e, 0x7063, 0x0000, 0x0804, 0x257f, 0x7000, 0xa005, 0x1110, + 0x0804, 0x257f, 0xa006, 0x080c, 0x3ed9, 0x6920, 0xd1ac, 0x1110, + 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, + 0xa084, 0x00ff, 0x6822, 0x7000, 0x0002, 0x257f, 0x31e7, 0x31e7, + 0x31ea, 0x31ea, 0x31ea, 0x31e5, 0x31e5, 0x080c, 0x252b, 0x6818, + 0x0804, 0x2ea4, 0x6008, 0xc0a4, 0x600a, 0x6817, 0x0000, 0x0804, + 0x373a, 0x2300, 0x0002, 0x31f6, 0x31f8, 0x3241, 0x080c, 0x252b, + 0xd6fc, 0x1904, 0x2cdf, 0x7000, 0xa00d, 0x0002, 0x257f, 0x3208, + 0x3208, 0x3231, 0x3208, 0x323e, 0x3206, 0x3206, 0x080c, 0x252b, + 0xa684, 0x0060, 0x0530, 0xa086, 0x0060, 0x1508, 0xc6ac, 0xc6f4, + 0xc6ed, 0x7e5a, 0x681c, 0xc0ac, 0x681e, 0xa186, 0x0002, 0x0148, + 0x080c, 0x3ed9, 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x41ad, + 0x0010, 0x080c, 0x4180, 0x781b, 0x0083, 0x71d0, 0xd1b4, 0x1904, + 0x257c, 0x70a0, 0xa086, 0x0001, 0x1904, 0x25c0, 0x0005, 0xd6ec, + 0x09f8, 0x6818, 0xd0fc, 0x0150, 0xd6f4, 0x1130, 0x681b, 0x0015, + 0x781b, 0x0083, 0x0804, 0x257c, 0x681b, 0x0007, 0x080c, 0x3bb7, + 0x0005, 0x080c, 0x252b, 0x2300, 0x0002, 0x324a, 0x326c, 0x32c3, + 0x080c, 0x252b, 0x7000, 0x0002, 0x3254, 0x3256, 0x325d, 0x3254, + 0x3254, 0x3254, 0x3254, 0x3254, 0x080c, 0x252b, 0x69ac, 0x68b0, + 0xa115, 0x0118, 0x080c, 0x41ad, 0x0010, 0x080c, 0x4180, 0x681c, + 0xc0b4, 0x681e, 0x70d0, 0xd0b4, 0x1904, 0x257c, 0x70a0, 0xa086, + 0x0001, 0x1904, 0x25c0, 0x0005, 0xd6fc, 0x1904, 0x32b3, 0x7000, + 0xa00d, 0x0002, 0x257f, 0x3282, 0x327c, 0x32ab, 0x3282, 0x32b0, + 0x327a, 0x327a, 0x080c, 0x252b, 0x6894, 0x78d6, 0x78de, 0x6898, + 0x78d2, 0x78da, 0xa684, 0x0060, 0x0530, 0xa086, 0x0060, 0x1508, + 0xa6b4, 0xbfbf, 0xc6ed, 0x7e5a, 0xa186, 0x0002, 0x0148, 0x080c, + 0x3ed9, 0x69ac, 0x68b0, 0xa115, 0x0118, 0x080c, 0x41ad, 0x0010, + 0x080c, 0x4180, 0x781b, 0x0083, 0x681c, 0xc0b4, 0x681e, 0x71d0, + 0xd1b4, 0x1904, 0x257c, 0x70a0, 0xa086, 0x0001, 0x1904, 0x25c0, + 0x0005, 0xd6ec, 0x09f8, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x0007, + 0x781b, 0x00fb, 0x0005, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x6b98, + 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2, + 0x781b, 0x0083, 0x0005, 0xd6dc, 0x0130, 0x782b, 0x3009, 0x781b, + 0x0083, 0x0804, 0x257c, 0x7884, 0xc0ac, 0x7886, 0x78e4, 0xa084, + 0x0008, 0x1150, 0xa484, 0x0200, 0x0108, 0xc6f5, 0xc6dd, 0x7e5a, + 0x781b, 0x0083, 0x0804, 0x257c, 0x6820, 0xc095, 0x6822, 0x080c, + 0x3ba2, 0xc6dd, 0x080c, 0x39ff, 0x781b, 0x0082, 0x0804, 0x257c, + 0x2300, 0x0002, 0x32ed, 0x32ef, 0x32f1, 0x080c, 0x252b, 0x0804, + 0x39f9, 0x7d98, 0xd6d4, 0x11f8, 0x79e4, 0xd1ac, 0x0130, 0x78ec, + 0xa084, 0x0003, 0x0110, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, + 0x0000, 0xa684, 0xfffb, 0x785a, 0x7d9a, 0x79e4, 0xd1ac, 0x0120, + 0x78ec, 0xa084, 0x0003, 0x1120, 0x2001, 0x0014, 0x0804, 0x2ea4, + 0xa184, 0x0007, 0x04c2, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, + 0x79a8, 0x81ff, 0x0568, 0x789b, 0x0080, 0x7ba8, 0xa384, 0x0001, + 0x11d0, 0x7ba8, 0x7ba8, 0xa386, 0x0004, 0x1118, 0x2009, 0xffdf, + 0x0058, 0xa386, 0x0001, 0x1118, 0x2009, 0xfff7, 0x0028, 0xa386, + 0x0003, 0x1148, 0x2009, 0xffef, 0x00c6, 0x7054, 0x2060, 0x6004, + 0xa104, 0x6006, 0x00ce, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, + 0xfffb, 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xecff, 0x6922, + 0x7d9a, 0x0804, 0x3bab, 0x2b90, 0x2b99, 0x3355, 0x335b, 0x3353, + 0x3353, 0x3bab, 0x3bab, 0x080c, 0x252b, 0x6920, 0xa18c, 0xfcff, + 0x6922, 0x0804, 0x3bb1, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0804, + 0x3bab, 0x79e4, 0xa184, 0x0030, 0x0120, 0x78ec, 0xa084, 0x0003, + 0x1570, 0x7000, 0xa086, 0x0004, 0x1190, 0x7060, 0xa086, 0x0002, + 0x1130, 0x2011, 0x0002, 0x2019, 0x0000, 0x0804, 0x2a4d, 0x7060, + 0xa086, 0x0006, 0x0db0, 0x7060, 0xa086, 0x0004, 0x0d90, 0x7000, + 0xa086, 0x0000, 0x0904, 0x257c, 0x6920, 0xa184, 0x0420, 0x0128, + 0xc1d4, 0x6922, 0x6818, 0x0804, 0x2ea4, 0x6818, 0xa08e, 0x0002, + 0x0120, 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0804, 0x2ea4, 0xa184, + 0x0007, 0x0002, 0x3bab, 0x3bab, 0x33a2, 0x3bab, 0x3bef, 0x3bef, + 0x3bab, 0x3bab, 0xd6bc, 0x0570, 0x7180, 0x81ff, 0x0558, 0xa182, + 0x000d, 0x1318, 0x7083, 0x0000, 0x0028, 0xa182, 0x000c, 0x7082, + 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa, 0x0156, 0x0136, 0x0146, + 0x7084, 0x8114, 0xa210, 0x7286, 0xa080, 0x000b, 0xad00, 0x2098, + 0xb284, 0x0600, 0x0118, 0x20a1, 0x022b, 0x0010, 0x20a1, 0x012b, + 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x014e, 0x013e, 0x015e, + 0x0804, 0x3bb1, 0xd6d4, 0x1904, 0x3415, 0x6820, 0xd084, 0x0904, + 0x3bb1, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0120, 0xa086, 0x0060, + 0x1108, 0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, + 0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a, 0x78aa, 0x8008, + 0x810c, 0x0904, 0x379b, 0xa18c, 0x00f8, 0x1904, 0x379b, 0x0156, + 0x0136, 0x0146, 0x0016, 0x20a1, 0x012b, 0x3208, 0xa18c, 0x0600, + 0x0110, 0x20a1, 0x022b, 0x001e, 0x789b, 0x0000, 0x8000, 0x80ac, + 0xad80, 0x000b, 0x2098, 0x53a6, 0x014e, 0x013e, 0x015e, 0x6814, + 0xc0fc, 0x8007, 0x7882, 0x0804, 0x3bb1, 0x6818, 0xd0fc, 0x0110, + 0x681b, 0x0008, 0x080c, 0x39ff, 0x781b, 0x00ed, 0x0005, 0x2300, + 0x0002, 0x3426, 0x34e8, 0x3424, 0x080c, 0x252b, 0x7cd8, 0x7ddc, + 0x7fd0, 0x82ff, 0x1528, 0x7200, 0xa286, 0x0003, 0x0904, 0x2e72, + 0x71d0, 0xd1bc, 0x11f8, 0xd1b4, 0x01e8, 0x2001, 0x4501, 0x2004, + 0xd0c4, 0x11c0, 0x00d6, 0x783b, 0x8800, 0x781b, 0x0059, 0x70b8, + 0xa06d, 0x68b4, 0xc0a5, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, + 0x78d2, 0x78da, 0xc1b4, 0x71d2, 0x7003, 0x0030, 0x00de, 0x0030, + 0x7200, 0x0020, 0x783b, 0x1800, 0x781b, 0x0057, 0xa284, 0x000f, + 0x0002, 0x34d3, 0x3490, 0x3463, 0x2ea1, 0x3461, 0x34d3, 0x3461, + 0x3461, 0x080c, 0x252b, 0x681c, 0xd0ec, 0x0118, 0x6008, 0xc08d, + 0x600a, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, 0xa005, 0x1108, + 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084, 0x000e, 0x1148, + 0xb284, 0x0600, 0x0118, 0x2009, 0x8bc0, 0x0040, 0x2009, 0x8cd0, + 0x0028, 0x7030, 0x68ba, 0x713c, 0x70c8, 0xa108, 0x2104, 0x6802, + 0x2d0a, 0x715a, 0xd6dc, 0x1120, 0xc6fc, 0x6eb6, 0x0804, 0x34d3, + 0x6eb6, 0xa684, 0x0060, 0x1120, 0xa684, 0x7fff, 0x68b6, 0x04d8, 0xd6dc, 0x1150, 0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898, - 0x68aa, 0x080c, 0x3d52, 0x0478, 0xd6ac, 0x0140, 0xa006, 0x080c, - 0x3d52, 0x2408, 0x2510, 0x69aa, 0x6aa6, 0x0068, 0x2408, 0x2510, + 0x68aa, 0x080c, 0x3ed9, 0x0478, 0xd6ac, 0x0140, 0xa006, 0x080c, + 0x3ed9, 0x2408, 0x2510, 0x69aa, 0x6aa6, 0x0068, 0x2408, 0x2510, 0x2700, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x69aa, - 0x6aa6, 0x080c, 0x3d52, 0xd6fc, 0x01b0, 0xa684, 0x7fff, 0x68b6, + 0x6aa6, 0x080c, 0x3ed9, 0xd6fc, 0x01b0, 0xa684, 0x7fff, 0x68b6, 0x2510, 0x2408, 0xd6ac, 0x1138, 0x2700, 0x8007, 0xa084, 0x007f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, - 0x2200, 0xa303, 0x68ae, 0x7000, 0xa086, 0x0030, 0x1904, 0x248f, - 0x7003, 0x0002, 0x70bc, 0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, - 0x68c0, 0x705a, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x0005, + 0x2200, 0xa303, 0x68ae, 0x7000, 0xa086, 0x0030, 0x1904, 0x257f, + 0x7003, 0x0002, 0x70b8, 0xa06d, 0x68bc, 0x703e, 0x70b4, 0xa065, + 0x68c0, 0x7056, 0x2d00, 0x704a, 0xad80, 0x0009, 0x7042, 0x0005, 0xa586, 0x8800, 0x1148, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, - 0x6008, 0xa084, 0xfbef, 0x600a, 0x0804, 0x3831, 0x7047, 0x0000, - 0xa282, 0x0006, 0x0310, 0x080c, 0x243b, 0x2300, 0x0002, 0x33b2, - 0x33e4, 0x340f, 0x2200, 0x0002, 0x33ba, 0x3831, 0x33bc, 0x33ba, - 0x343f, 0x349d, 0x080c, 0x243b, 0x7003, 0x0005, 0xb284, 0x0600, - 0x0118, 0x2001, 0x8ae0, 0x0010, 0x2001, 0x8b12, 0x2068, 0x704e, - 0x0156, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x1f04, 0x33cb, + 0x6008, 0xa084, 0xfbef, 0x600a, 0x0804, 0x39f9, 0x7043, 0x0000, + 0xa282, 0x0006, 0x0310, 0x080c, 0x252b, 0x2300, 0x0002, 0x3502, + 0x3534, 0x355f, 0x2200, 0x0002, 0x350a, 0x39f9, 0x350c, 0x350a, + 0x358f, 0x35f9, 0x080c, 0x252b, 0x7003, 0x0005, 0xb284, 0x0600, + 0x0118, 0x2001, 0x8ce0, 0x0010, 0x2001, 0x8d12, 0x2068, 0x704a, + 0x0156, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x1f04, 0x351b, 0x015e, 0xb284, 0x0600, 0x0118, 0x6817, 0x0000, 0x0010, 0x6817, - 0x8000, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823, 0x0800, - 0x6827, 0x0003, 0x0804, 0x3809, 0x7000, 0xa086, 0x0002, 0x1150, - 0x080c, 0x35c5, 0x0010, 0x080c, 0x3d52, 0x6008, 0xa084, 0xfbef, + 0x8000, 0xad80, 0x0009, 0x7042, 0x68b7, 0x0700, 0x6823, 0x0800, + 0x6827, 0x0003, 0x0804, 0x39d0, 0x7000, 0xa086, 0x0002, 0x1150, + 0x080c, 0x3786, 0x0010, 0x080c, 0x3ed9, 0x6008, 0xa084, 0xfbef, 0x600a, 0x0020, 0x7000, 0xa086, 0x0003, 0x0da8, 0x7003, 0x0005, - 0xb284, 0x0600, 0x0118, 0x2001, 0x8ae0, 0x0010, 0x2001, 0x8b12, - 0x2068, 0x704e, 0xad80, 0x0009, 0x7046, 0x2200, 0x0002, 0x3831, - 0x340d, 0x340d, 0x343f, 0x340d, 0x3831, 0x080c, 0x243b, 0x7000, - 0xa086, 0x0002, 0x1150, 0x080c, 0x35c5, 0x0010, 0x080c, 0x3d52, + 0xb284, 0x0600, 0x0118, 0x2001, 0x8ce0, 0x0010, 0x2001, 0x8d12, + 0x2068, 0x704a, 0xad80, 0x0009, 0x7042, 0x2200, 0x0002, 0x39f9, + 0x355d, 0x355d, 0x358f, 0x355d, 0x39f9, 0x080c, 0x252b, 0x7000, + 0xa086, 0x0002, 0x1150, 0x080c, 0x3786, 0x0010, 0x080c, 0x3ed9, 0x6008, 0xa084, 0xfbef, 0x600a, 0x0020, 0x7000, 0xa086, 0x0003, - 0x0da8, 0x7003, 0x0005, 0xb284, 0x0600, 0x0118, 0x2001, 0x8ae0, - 0x0010, 0x2001, 0x8b12, 0x2068, 0x704e, 0xad80, 0x0009, 0x7046, - 0x2200, 0x0002, 0x343a, 0x3438, 0x3438, 0x343a, 0x3438, 0x343a, - 0x080c, 0x243b, 0x080c, 0x3846, 0x781b, 0x0082, 0x0005, 0x7000, - 0xa086, 0x0002, 0x1158, 0x70d4, 0xc0b5, 0x70d6, 0x2c00, 0x70ba, - 0x2d00, 0x70be, 0x0038, 0x080c, 0x3d52, 0x0020, 0x7000, 0xa086, + 0x0da8, 0x7003, 0x0005, 0xb284, 0x0600, 0x0118, 0x2001, 0x8ce0, + 0x0010, 0x2001, 0x8d12, 0x2068, 0x704a, 0xad80, 0x0009, 0x7042, + 0x2200, 0x0002, 0x358a, 0x3588, 0x3588, 0x358a, 0x3588, 0x358a, + 0x080c, 0x252b, 0x080c, 0x3a0e, 0x781b, 0x0082, 0x0005, 0x7000, + 0xa086, 0x0002, 0x1158, 0x70d0, 0xc0b5, 0x70d2, 0x2c00, 0x70b6, + 0x2d00, 0x70ba, 0x0038, 0x080c, 0x3ed9, 0x0020, 0x7000, 0xa086, 0x0003, 0x0dc8, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, - 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x89c0, 0xb284, - 0x0600, 0x1118, 0xc2fd, 0x2069, 0x8ad0, 0x2d04, 0x2d08, 0x715e, + 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x8bc0, 0xb284, + 0x0600, 0x1118, 0xc2fd, 0x2069, 0x8cd0, 0x2d04, 0x2d08, 0x715a, 0xa06d, 0x0128, 0x6814, 0xa206, 0x0500, 0x6800, 0x0cb8, 0x7003, - 0x0005, 0xd2fc, 0x1118, 0x2001, 0x8ae0, 0x0010, 0x2001, 0x8b12, - 0x2068, 0x704e, 0x0156, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, - 0x1f04, 0x347d, 0x015e, 0xad80, 0x0009, 0x7046, 0x6a16, 0x68b7, + 0x0005, 0xd2fc, 0x1118, 0x2001, 0x8ce0, 0x0010, 0x2001, 0x8d12, + 0x2068, 0x704a, 0x0156, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, + 0x1f04, 0x35cd, 0x015e, 0xad80, 0x0009, 0x7042, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6920, - 0xa184, 0x0c00, 0x0904, 0x3507, 0x681b, 0x0005, 0xc1ad, 0xc1d4, - 0x6922, 0x080c, 0x383d, 0x0804, 0x3507, 0x7200, 0xa286, 0x0002, - 0x1158, 0x70d4, 0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, - 0x0030, 0x080c, 0x3d52, 0x0018, 0xa286, 0x0003, 0x0dd0, 0x7003, - 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, - 0x001f, 0xa215, 0xb284, 0x0600, 0x1108, 0xc2fd, 0x79a8, 0x79a8, - 0xa18c, 0x00ff, 0x70cc, 0xa168, 0x2d04, 0x2d08, 0x715e, 0xa06d, - 0x0128, 0x6814, 0xa206, 0x0538, 0x6800, 0x0cb8, 0x7003, 0x0005, - 0xb284, 0x0600, 0x0118, 0x2001, 0x8ae0, 0x0010, 0x2001, 0x8b12, - 0x2068, 0x704e, 0x0156, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, - 0x1f04, 0x34dd, 0x015e, 0xb284, 0x0600, 0x0110, 0xc2fc, 0x0008, - 0xc2fd, 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, 0x6823, - 0x0800, 0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, 0x0c00, 0x0178, - 0xd0dc, 0x0118, 0x080c, 0x3843, 0x0050, 0x681b, 0x0005, 0xc1ad, - 0xc1d4, 0x6922, 0x080c, 0x383d, 0x707f, 0x0000, 0x0000, 0xa6ac, - 0x0060, 0x05c8, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x11c0, - 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, 0xb7ff, 0xa586, 0x0060, - 0x0550, 0xc6ed, 0x7e5a, 0x2009, 0x0083, 0xd69c, 0x0128, 0x2009, - 0x0082, 0x2019, 0x0000, 0x2320, 0x791a, 0x080c, 0x3fb8, 0x0418, - 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x01a0, 0x7bd2, - 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xc6f4, 0x7e5a, 0x2011, 0x0083, - 0xd69c, 0x0128, 0x2011, 0x0082, 0x2019, 0x0000, 0x2320, 0x7a1a, - 0x080c, 0x3fe5, 0x0040, 0x7e5a, 0x2009, 0x0083, 0xd69c, 0x0110, - 0x2009, 0x0082, 0x791a, 0x68c0, 0x705a, 0x2d00, 0x704e, 0x68c4, - 0x2060, 0x71d4, 0xd1b4, 0x1904, 0x248c, 0x2300, 0xa405, 0x0904, - 0x248c, 0x70a4, 0xa086, 0x0001, 0x1904, 0x24ce, 0x0005, 0x6020, + 0xa184, 0x0c00, 0x0904, 0x3670, 0x7060, 0xa086, 0x0006, 0x1128, + 0x7070, 0xa206, 0x1110, 0x7062, 0x707a, 0x681b, 0x0005, 0xc1ad, + 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x080c, 0x3a05, 0x0804, + 0x3670, 0x7200, 0xa286, 0x0002, 0x1158, 0x70d0, 0xc0b5, 0x70d2, + 0x2c00, 0x70b6, 0x2d00, 0x70ba, 0x0030, 0x080c, 0x3ed9, 0x0018, + 0xa286, 0x0003, 0x0dd0, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, + 0x789b, 0x0018, 0x7ca8, 0xa484, 0x001f, 0xa215, 0xb284, 0x0600, + 0x1108, 0xc2fd, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0x2118, 0x70c8, + 0xa168, 0x2d04, 0x2d08, 0x715a, 0xa06d, 0x0128, 0x6814, 0xa206, + 0x0538, 0x6800, 0x0cb8, 0x7003, 0x0005, 0xb284, 0x0600, 0x0118, + 0x2001, 0x8ce0, 0x0010, 0x2001, 0x8d12, 0x2068, 0x704a, 0x0156, + 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x1f04, 0x363a, 0x015e, + 0xb284, 0x0600, 0x0110, 0xc2fc, 0x0008, 0xc2fd, 0x6a16, 0xad80, + 0x0009, 0x7042, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, + 0x6eb4, 0x6920, 0xa184, 0x0c00, 0x01d8, 0xd0dc, 0x0178, 0x7060, + 0xa086, 0x0004, 0x1140, 0x7070, 0xa206, 0x1128, 0x7074, 0xa306, + 0x1110, 0x7062, 0x707a, 0x080c, 0x3a0b, 0x0050, 0x681b, 0x0005, + 0xc1ad, 0xc1d4, 0x6922, 0x080c, 0x3a05, 0x707b, 0x0000, 0x0000, + 0xc6ec, 0xa6ac, 0x0060, 0x0904, 0x36b7, 0x6b98, 0x6c94, 0x69ac, + 0x68b0, 0xa105, 0x11e0, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa586, + 0x0060, 0x05c8, 0xd6f4, 0x1108, 0xc6ed, 0xa6b4, 0xb7ff, 0x7e5a, + 0x2009, 0x0083, 0xd69c, 0x0128, 0x2009, 0x0082, 0x2019, 0x0000, + 0x2320, 0x791a, 0xd6ec, 0x0588, 0x080c, 0x4180, 0x0470, 0x68b0, + 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x01f8, 0x7bd2, 0x7bda, + 0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x1108, 0xc6ed, 0xc6f4, 0x7e5a, + 0x2011, 0x0083, 0xd69c, 0x0128, 0x2011, 0x0082, 0x2019, 0x0000, + 0x2320, 0x7a1a, 0xd6ec, 0x0188, 0x080c, 0x41ad, 0x0070, 0x2019, + 0x0000, 0x2320, 0x0010, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, 0x0083, + 0xd69c, 0x0110, 0x2009, 0x0082, 0x791a, 0x68c0, 0x7056, 0x2d00, + 0x704a, 0x68c4, 0x2060, 0x71d0, 0x2001, 0x4501, 0x2004, 0xd0c4, + 0x15c8, 0x70d4, 0xa02d, 0x01b8, 0xd1bc, 0x0548, 0x7a80, 0xa294, + 0x0f00, 0x70d8, 0xa206, 0x0118, 0x78e0, 0xa504, 0x1558, 0x70d6, + 0xc1bc, 0x71d2, 0x0438, 0x2031, 0x0001, 0x852c, 0x0218, 0x8633, + 0x8210, 0x0cd8, 0x0005, 0x7de0, 0xa594, 0xff00, 0x0130, 0x2011, + 0x0008, 0x852f, 0x0c81, 0x8637, 0x0008, 0x0c69, 0x8217, 0x7880, + 0xa084, 0x0f00, 0xa206, 0x0170, 0x72da, 0x76d6, 0x0058, 0x7a80, + 0xa294, 0x0f00, 0x70d8, 0xa236, 0x0dc0, 0x78e0, 0xa534, 0x0da8, + 0xc1bd, 0x71d2, 0xd1b4, 0x1904, 0x257c, 0x2300, 0xa405, 0x0904, + 0x257c, 0x70a0, 0xa086, 0x0001, 0x1904, 0x25c0, 0x0005, 0x6020, 0xa005, 0x0150, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a, - 0x700f, 0x0100, 0x702c, 0x6026, 0x0005, 0xa006, 0x080c, 0x3d52, + 0x700f, 0x0100, 0x702c, 0x6026, 0x0005, 0xa006, 0x080c, 0x3ed9, + 0x7000, 0xa086, 0x0002, 0x0120, 0x7060, 0xa086, 0x0005, 0x1150, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, - 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, 0x0002, 0x248f, 0x358b, - 0x3588, 0x35a7, 0x3594, 0x248f, 0x3586, 0x3586, 0x080c, 0x243b, - 0x0441, 0x0409, 0x0028, 0x0429, 0x705c, 0x2060, 0x6800, 0x6002, - 0x080c, 0x1d3d, 0x0804, 0x248f, 0x7064, 0x7067, 0x0000, 0x7083, - 0x0000, 0x0002, 0x35a3, 0x35a3, 0x35a2, 0x35a2, 0x35a2, 0x35a3, - 0x35a2, 0x35a3, 0x2971, 0x7067, 0x0000, 0x0804, 0x248f, 0x681b, - 0x0000, 0x0804, 0x3012, 0x6800, 0xa005, 0x1108, 0x6002, 0x6006, - 0x0005, 0x6410, 0x84ff, 0x0168, 0x2009, 0x4302, 0x2104, 0x8001, - 0x200a, 0x8421, 0x6412, 0x1128, 0x2021, 0x4304, 0x2404, 0xc0a5, - 0x2022, 0x6008, 0xc0a4, 0x600a, 0x0005, 0x6018, 0xa005, 0x0110, - 0x8001, 0x601a, 0x0005, 0x080c, 0x3aa0, 0x681b, 0x0018, 0x04a0, - 0x080c, 0x3aa0, 0x681b, 0x0019, 0x0478, 0x080c, 0x3aa0, 0x681b, - 0x001a, 0x0450, 0x080c, 0x3aa0, 0x681b, 0x0003, 0x0428, 0x7774, - 0x080c, 0x396d, 0x7178, 0xa18c, 0x00ff, 0x3210, 0xa294, 0x0600, - 0x0118, 0xa1e8, 0x88c0, 0x0010, 0xa1e8, 0x89d0, 0x2d04, 0x2d08, - 0x2068, 0xa005, 0x1118, 0x707e, 0x0804, 0x248f, 0x6814, 0xc0fc, - 0x7274, 0xc2fc, 0xa206, 0x0110, 0x6800, 0x0c88, 0x6800, 0x200a, - 0x681b, 0x0005, 0x707f, 0x0000, 0x080c, 0x35b1, 0x6820, 0xd084, - 0x1110, 0x080c, 0x35ab, 0x080c, 0x35c5, 0x681f, 0x0000, 0x6823, - 0x0020, 0x080c, 0x1d3d, 0x0804, 0x248f, 0xa282, 0x0003, 0x1904, - 0x380d, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, - 0xc1bd, 0x6922, 0xd1c4, 0x0590, 0xc1c4, 0x6922, 0xa6b4, 0x00ff, - 0x0510, 0xa682, 0x001c, 0x0218, 0x0110, 0x2031, 0x001c, 0x852b, - 0x852b, 0x2041, 0x0000, 0x080c, 0x38c6, 0x0118, 0x080c, 0x36f6, - 0x00a0, 0x080c, 0x3892, 0x080c, 0x36f3, 0x6920, 0xc1c5, 0x6922, + 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, 0x0002, 0x257f, 0x374b, + 0x3748, 0x3768, 0x3754, 0x257f, 0x3746, 0x3746, 0x080c, 0x252b, + 0x0449, 0x0411, 0x0028, 0x0431, 0x7058, 0x2060, 0x6800, 0x6002, + 0x080c, 0x1d89, 0x0804, 0x257f, 0x7060, 0x7063, 0x0000, 0x707f, + 0x0000, 0x0002, 0x3764, 0x3764, 0x3762, 0x3762, 0x3762, 0x3764, + 0x3762, 0x3764, 0x0804, 0x2a62, 0x7063, 0x0000, 0x0804, 0x257f, + 0x681b, 0x0000, 0x0804, 0x3117, 0x6800, 0xa005, 0x1108, 0x6002, + 0x6006, 0x0005, 0x6410, 0x84ff, 0x0168, 0x2009, 0x4502, 0x2104, + 0x8001, 0x200a, 0x8421, 0x6412, 0x1128, 0x2021, 0x4504, 0x2404, + 0xc0a5, 0x2022, 0x6008, 0xc0a4, 0x600a, 0x0005, 0x6018, 0xa005, + 0x0110, 0x8001, 0x601a, 0x0005, 0x080c, 0x3c0c, 0x681b, 0x0018, + 0x0490, 0x080c, 0x3c0c, 0x681b, 0x0019, 0x0468, 0x080c, 0x3c0c, + 0x681b, 0x001a, 0x0440, 0x080c, 0x3c0c, 0x681b, 0x0003, 0x0418, + 0x7770, 0x080c, 0x3b35, 0x7174, 0xa18c, 0x00ff, 0x3210, 0xa294, + 0x0600, 0x0118, 0xa1e8, 0x8ac0, 0x0010, 0xa1e8, 0x8bd0, 0x2d04, + 0x2d08, 0x2068, 0xa005, 0x1118, 0x707a, 0x0804, 0x257f, 0x6814, + 0x7270, 0xa206, 0x0110, 0x6800, 0x0c98, 0x6800, 0x200a, 0x681b, + 0x0005, 0x707b, 0x0000, 0x080c, 0x3772, 0x6820, 0xd084, 0x1110, + 0x080c, 0x376c, 0x080c, 0x3786, 0x681f, 0x0000, 0x6823, 0x0020, + 0x080c, 0x1d89, 0x0804, 0x257f, 0xa282, 0x0003, 0x1904, 0x39d5, + 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, 0xc1bd, + 0x6922, 0xd1c4, 0x05b0, 0xc1c4, 0x6922, 0xa6b4, 0x00ff, 0x0530, + 0xa682, 0x001c, 0x0218, 0x0110, 0x2031, 0x001c, 0xa686, 0x0010, + 0x1108, 0x8630, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3a8e, + 0x0118, 0x080c, 0x38bd, 0x00a0, 0x080c, 0x3a5a, 0x080c, 0x38ba, + 0x6920, 0xc1c5, 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1118, + 0x781b, 0x006e, 0x0005, 0x781b, 0x0082, 0x0005, 0x080c, 0x38ba, + 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, + 0x0005, 0x00c6, 0x7054, 0x2060, 0x6100, 0xd1e4, 0x0598, 0x6208, + 0x8217, 0xa294, 0x00ff, 0xa282, 0x001c, 0x0218, 0x0110, 0x2011, + 0x001c, 0x2600, 0xa202, 0x1208, 0x2230, 0xa686, 0x0010, 0x1108, + 0x8630, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4, 0x0130, 0xa282, + 0x000a, 0x1240, 0x2011, 0x000a, 0x0028, 0xa282, 0x000c, 0x1210, + 0x2011, 0x000c, 0x2200, 0xa502, 0x1208, 0x2228, 0x080c, 0x3a5e, + 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x3a8e, 0x0118, 0x080c, + 0x38bd, 0x0020, 0x080c, 0x3a5a, 0x080c, 0x38ba, 0x7858, 0xc095, + 0x785a, 0x00ce, 0x781b, 0x0082, 0x0005, 0x00c6, 0x2960, 0x6000, + 0xd0e4, 0x1178, 0x6010, 0xa084, 0x000f, 0x1130, 0x6104, 0xa18c, + 0xfff5, 0x6106, 0x00ce, 0x0005, 0x2011, 0x0032, 0x2019, 0x0000, + 0x00f0, 0x68a0, 0xd0cc, 0x1dc0, 0x6208, 0xa294, 0x00ff, 0x78ec, + 0xd0e4, 0x0130, 0xa282, 0x000b, 0x1218, 0x2011, 0x000a, 0x0028, + 0xa282, 0x000c, 0x1210, 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, + 0x00ff, 0xa382, 0x001c, 0x0218, 0x0110, 0x2019, 0x001c, 0x78ab, + 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, + 0x0005, 0x6820, 0xc0c5, 0x6822, 0x080c, 0x3a18, 0x00ce, 0x0005, + 0x00c6, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, 0x0032, + 0x2019, 0x0000, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, + 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, + 0x00ce, 0x0005, 0xa006, 0x2030, 0x2010, 0x00c6, 0x7154, 0x2160, + 0x2018, 0x2008, 0xa084, 0xffe0, 0xa635, 0x7e86, 0x6018, 0x789a, + 0x7eae, 0x6612, 0x78a4, 0xa084, 0x7770, 0xa18c, 0x000f, 0xa105, + 0x2029, 0x4505, 0x252c, 0xd5cc, 0x0140, 0xd3a4, 0x0110, 0xa085, + 0x0800, 0xd3fc, 0x0110, 0xa085, 0x8080, 0x78a6, 0x6016, 0x788a, + 0xa6b4, 0x001f, 0x8637, 0x8204, 0x8004, 0xa605, 0x600e, 0x6004, + 0xa084, 0xffd5, 0x6006, 0x00ce, 0x0005, 0xa282, 0x0002, 0x1904, + 0x39de, 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc, 0x0568, 0xc1cc, + 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x1a04, 0x39d0, 0x080c, + 0x3963, 0x080c, 0x38ba, 0xa980, 0x0001, 0x200c, 0x080c, 0x3b31, + 0x080c, 0x385d, 0x88ff, 0x0178, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, 0x0005, - 0x781b, 0x0082, 0x0005, 0x080c, 0x36f3, 0x7e58, 0xd6d4, 0x1118, - 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, 0x0005, 0x00c6, 0x7058, - 0x2060, 0x6100, 0xd1e4, 0x0578, 0x6208, 0x8217, 0xa294, 0x00ff, - 0xa282, 0x001c, 0x0218, 0x0110, 0x2011, 0x001c, 0x2600, 0xa202, - 0x1208, 0x2230, 0x6208, 0xa294, 0x00ff, 0x78ec, 0xd0e4, 0x0130, - 0xa282, 0x000a, 0x1240, 0x2011, 0x000a, 0x0028, 0xa282, 0x000c, - 0x1210, 0x2011, 0x000c, 0x2200, 0xa502, 0x1208, 0x2228, 0x080c, - 0x3896, 0x852b, 0x852b, 0x2041, 0x0000, 0x080c, 0x38c6, 0x0118, - 0x080c, 0x36f6, 0x0020, 0x080c, 0x3892, 0x080c, 0x36f3, 0x7858, - 0xc095, 0x785a, 0x00ce, 0x781b, 0x0082, 0x0005, 0x00c6, 0x2960, - 0x6000, 0xd0e4, 0x1178, 0x6010, 0xa084, 0x000f, 0x1130, 0x6104, - 0xa18c, 0xfff5, 0x6106, 0x00ce, 0x0005, 0x2011, 0x0032, 0x2019, - 0x0000, 0x00f0, 0x68a0, 0xd0cc, 0x1dc0, 0x6208, 0xa294, 0x00ff, - 0x78ec, 0xd0e4, 0x0130, 0xa282, 0x000b, 0x1218, 0x2011, 0x000a, - 0x0028, 0xa282, 0x000c, 0x1210, 0x2011, 0x000c, 0x6308, 0x831f, - 0xa39c, 0x00ff, 0xa382, 0x001c, 0x0218, 0x0110, 0x2019, 0x001c, - 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, - 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, 0x080c, 0x3850, 0x00ce, - 0x0005, 0x00c6, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x2011, - 0x0032, 0x2019, 0x0000, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0003, - 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, - 0x6822, 0x00ce, 0x0005, 0xa006, 0x2030, 0x2010, 0x00c6, 0x7158, - 0x2160, 0x2018, 0x2008, 0xa084, 0xffe0, 0xa635, 0x7e86, 0x6018, - 0x789a, 0x7eae, 0x6612, 0x78a4, 0xa084, 0x7770, 0xa18c, 0x000f, - 0xa105, 0x2029, 0x4305, 0x252c, 0xd5cc, 0x0140, 0xd3a4, 0x0110, - 0xa085, 0x0800, 0xd3fc, 0x0110, 0xa085, 0x8080, 0x78a6, 0x6016, - 0x788a, 0xa6b4, 0x001f, 0x8637, 0x8204, 0x8004, 0xa605, 0x600e, - 0x6004, 0xa084, 0xffd5, 0x6006, 0x00ce, 0x0005, 0xa282, 0x0002, - 0x1904, 0x3816, 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc, 0x0568, - 0xc1cc, 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x1a04, 0x3809, - 0x080c, 0x379c, 0x080c, 0x36f3, 0xa980, 0x0001, 0x200c, 0x080c, - 0x3969, 0x080c, 0x3696, 0x88ff, 0x0178, 0x789b, 0x0060, 0x2800, - 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x1118, 0x781b, 0x006e, - 0x0005, 0x781b, 0x0082, 0x0005, 0x7e58, 0xd6d4, 0x1118, 0x781b, - 0x0071, 0x0005, 0x781b, 0x0083, 0x0005, 0xa282, 0x0002, 0x1218, - 0xa284, 0x0001, 0x0140, 0x7158, 0xa188, 0x0000, 0x210c, 0xd1ec, - 0x1110, 0x2011, 0x0000, 0x080c, 0x3883, 0x0471, 0x080c, 0x36f3, - 0x7858, 0xc095, 0x785a, 0x781b, 0x0082, 0x0005, 0x00c6, 0x0026, - 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x1150, 0x6014, 0xa084, - 0x0040, 0x1120, 0xc1a4, 0x6106, 0xa006, 0x0088, 0x2011, 0x0000, - 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, - 0x0004, 0x080c, 0x3850, 0x6820, 0xa085, 0x0200, 0x6822, 0x002e, - 0x00ce, 0x0005, 0x8807, 0xa715, 0x00c6, 0x2009, 0x0000, 0x7058, - 0x2060, 0x82ff, 0x0110, 0x2009, 0x0040, 0x6018, 0xa080, 0x0002, - 0x789a, 0x78a4, 0xa084, 0xff9f, 0xa105, 0xc0ec, 0xd0b4, 0x1108, - 0xc0ed, 0x6100, 0xd1f4, 0x0110, 0xa085, 0x0020, 0x78a6, 0x6016, - 0x788a, 0x6004, 0xa084, 0xffef, 0x6006, 0x00ce, 0x0005, 0x0006, - 0x7000, 0xa086, 0x0003, 0x0110, 0x000e, 0x0010, 0x000e, 0x0488, - 0xd6ac, 0x0578, 0x7888, 0xa084, 0x0040, 0x0558, 0x7bb8, 0x8307, - 0xa084, 0x007f, 0x1508, 0x8207, 0xa084, 0x00ff, 0xa09e, 0x0001, - 0x1904, 0x382d, 0xd6f4, 0x11d0, 0x79d8, 0x7adc, 0xa108, 0xa291, - 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x080c, 0x4083, 0x781b, - 0x0080, 0xb284, 0x0600, 0x0118, 0x2001, 0x0000, 0x0010, 0x2001, - 0x0001, 0x080c, 0x3f50, 0x0005, 0x080c, 0x243b, 0x781b, 0x0080, - 0x0005, 0x781b, 0x0083, 0x0005, 0x2039, 0x0000, 0x2041, 0x0000, - 0x2031, 0x0000, 0xa006, 0x2010, 0x080c, 0x36f6, 0x080c, 0x379a, - 0x7e58, 0x04f9, 0x781b, 0x0082, 0x0005, 0x0cd9, 0x6820, 0xc0c4, - 0x6822, 0x00c6, 0x7058, 0x2060, 0x0804, 0x3720, 0x0c91, 0x6820, - 0xc0cc, 0x6822, 0x00c6, 0x7058, 0x2060, 0x0804, 0x37b9, 0x0c49, - 0x6820, 0xa084, 0xecff, 0x6822, 0x00c6, 0x7058, 0x2060, 0x6004, + 0x781b, 0x0082, 0x0005, 0x7e58, 0xd6d4, 0x1118, 0x781b, 0x0071, + 0x0005, 0x781b, 0x0083, 0x0005, 0xa282, 0x0002, 0x1218, 0xa284, + 0x0001, 0x0140, 0x7154, 0xa188, 0x0000, 0x210c, 0xd1ec, 0x1110, + 0x2011, 0x0000, 0x080c, 0x3a4b, 0x0471, 0x080c, 0x38ba, 0x7858, + 0xc095, 0x785a, 0x781b, 0x0082, 0x0005, 0x00c6, 0x0026, 0x2960, + 0x6000, 0x2011, 0x0001, 0xd0ec, 0x1150, 0x6014, 0xa084, 0x0040, + 0x1120, 0xc1a4, 0x6106, 0xa006, 0x0088, 0x2011, 0x0000, 0x78ab, + 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, + 0x080c, 0x3a18, 0x6820, 0xa085, 0x0200, 0x6822, 0x002e, 0x00ce, + 0x0005, 0x8807, 0xa715, 0x00c6, 0x2009, 0x0000, 0x7054, 0x2060, + 0x82ff, 0x0110, 0x2009, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, + 0x78a4, 0xa084, 0xff9f, 0xa105, 0xc0ec, 0xd0b4, 0x1108, 0xc0ed, + 0x6100, 0xd1f4, 0x0110, 0xa085, 0x0020, 0x78a6, 0x6016, 0x788a, + 0x6004, 0xa084, 0xffef, 0x6006, 0x00ce, 0x0005, 0x0006, 0x7000, + 0xa086, 0x0003, 0x0110, 0x000e, 0x0010, 0x000e, 0x0488, 0xd6ac, + 0x0578, 0x7888, 0xa084, 0x0040, 0x0558, 0x7bb8, 0x8307, 0xa084, + 0x007f, 0x1508, 0x8207, 0xa084, 0x00ff, 0xa09e, 0x0001, 0x1904, + 0x39f5, 0xd6f4, 0x11d0, 0x79d8, 0x7adc, 0xa108, 0xa291, 0x0000, + 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x080c, 0x425d, 0x781b, 0x0080, + 0xb284, 0x0600, 0x0118, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001, + 0x080c, 0x4118, 0x0005, 0x080c, 0x252b, 0x781b, 0x0080, 0x0005, + 0x781b, 0x0083, 0x0005, 0x2039, 0x0000, 0x2041, 0x0000, 0x2031, + 0x0000, 0xa006, 0x2010, 0x080c, 0x38bd, 0x080c, 0x3961, 0x7e58, + 0x080c, 0x3a11, 0x781b, 0x0082, 0x0005, 0x0cd1, 0x6820, 0xc0c4, + 0x6822, 0x00c6, 0x7054, 0x2060, 0x0804, 0x38e7, 0x0c89, 0x6820, + 0xc0cc, 0x6822, 0x00c6, 0x7054, 0x2060, 0x0804, 0x3980, 0x0c41, + 0x6820, 0xa084, 0xecff, 0x6822, 0x00c6, 0x7054, 0x2060, 0x6004, 0xa084, 0xffc5, 0x6006, 0x00ce, 0x0005, 0x0049, 0x781b, 0x0082, 0x0005, 0x6827, 0x0002, 0x0049, 0x781b, 0x0082, 0x0005, 0x2001, 0x0005, 0x0088, 0x2001, 0x000c, 0x0070, 0x6820, 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0040, 0x2001, 0x000d, 0x0028, 0x2001, 0x0009, 0x0010, 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa, 0xc69d, 0x7e5a, - 0x70d4, 0xd0b4, 0x0168, 0xc0b4, 0x70d6, 0x00c6, 0x70b8, 0xa065, + 0x70d0, 0xd0b4, 0x0168, 0xc0b4, 0x70d2, 0x00c6, 0x70b4, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x00ce, 0x0005, 0x0076, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, - 0xb28c, 0x0600, 0x0118, 0xa0e0, 0x47c0, 0x0010, 0xa0e0, 0x4840, + 0xb28c, 0x0600, 0x0118, 0xa0e0, 0x49c0, 0x0010, 0xa0e0, 0x4a40, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184, 0x7fe0, 0x78ae, 0x6012, 0x79a4, 0xa184, 0x773f, 0x78a6, 0x6016, 0x6004, 0xa085, 0x0038, 0x6006, 0x007e, 0x0005, 0x789b, 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, 0x78ab, 0x0004, - 0x0804, 0x3850, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, 0x0080, + 0x0804, 0x3a18, 0x2031, 0x0000, 0x2029, 0x0032, 0x789b, 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7daa, 0x7eaa, - 0x789b, 0x0060, 0x78ab, 0x0005, 0x0804, 0x3850, 0x0156, 0x8007, + 0x789b, 0x0060, 0x78ab, 0x0005, 0x0804, 0x3a18, 0x0156, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, 0x789a, 0x79a4, - 0xa18c, 0xffe0, 0x2021, 0x3952, 0x2019, 0x0011, 0x20a9, 0x000e, + 0xa18c, 0xffe0, 0x2021, 0x3b1a, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x2404, 0xa084, 0xffe0, 0xa106, 0x0128, 0x8420, - 0x2300, 0xa210, 0x1f04, 0x38ba, 0x015e, 0x0005, 0x0156, 0x0804, - 0x3908, 0x2021, 0x3960, 0x20a9, 0x0009, 0x2011, 0x0029, 0xa582, + 0x2300, 0xa210, 0x1f04, 0x3a82, 0x015e, 0x0005, 0x0156, 0x0804, + 0x3ad0, 0x2021, 0x3b28, 0x20a9, 0x0009, 0x2011, 0x0029, 0xa582, 0x0028, 0x0550, 0x8420, 0x95a9, 0x2011, 0x0033, 0xa582, 0x0033, 0x0618, 0x8420, 0x95a9, 0x2019, 0x000a, 0x2011, 0x0065, 0x2200, - 0xa502, 0x02d0, 0x8420, 0x2300, 0xa210, 0x1f04, 0x38df, 0x015e, - 0x0088, 0x2021, 0x3952, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, + 0xa502, 0x02d0, 0x8420, 0x2300, 0xa210, 0x1f04, 0x3aa7, 0x015e, + 0x0088, 0x2021, 0x3b1a, 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0033, 0x2200, 0xa502, 0x0240, 0x8420, 0x2300, 0xa210, 0x1f04, - 0x38f1, 0x015e, 0xa006, 0x0005, 0x8211, 0x015e, 0xa582, 0x0064, + 0x3ab9, 0x015e, 0xa006, 0x0005, 0x8211, 0x015e, 0xa582, 0x0064, 0x1220, 0x7808, 0xa085, 0x0070, 0x780a, 0x2404, 0xa005, 0x0005, - 0xa886, 0x0002, 0x01e8, 0x2021, 0x393e, 0x20a9, 0x000d, 0x2011, + 0xa886, 0x0002, 0x01e8, 0x2021, 0x3b06, 0x20a9, 0x000d, 0x2011, 0x0028, 0xa582, 0x0028, 0x0d48, 0x8420, 0x2019, 0x0019, 0x2011, 0x0033, 0x2200, 0xa502, 0x0e00, 0x8420, 0x2300, 0xa210, 0x1f04, - 0x3919, 0x015e, 0x2011, 0x0184, 0xa582, 0x0185, 0x0ab0, 0x0890, - 0x2021, 0x394d, 0x20a9, 0x0003, 0x2011, 0x0024, 0xa586, 0x0024, + 0x3ae1, 0x015e, 0x2011, 0x0184, 0xa582, 0x0185, 0x0ab0, 0x0890, + 0x2021, 0x3b15, 0x20a9, 0x0003, 0x2011, 0x0024, 0xa586, 0x0024, 0x0960, 0x8420, 0x2011, 0x0028, 0xa586, 0x0028, 0x0930, 0x8420, - 0x2019, 0x0019, 0x2011, 0x0033, 0x0804, 0x38f1, 0x1021, 0x2202, + 0x2019, 0x0019, 0x2011, 0x0033, 0x0804, 0x3ab9, 0x1021, 0x2202, 0x3403, 0x4604, 0x5805, 0x6a06, 0x7c07, 0x4610, 0x4612, 0x5812, 0x5a12, 0x6a14, 0x6c14, 0x6e14, 0x7e17, 0x9021, 0xb002, 0xe204, 0xe210, 0xe210, 0x1209, 0x3002, 0x3202, 0x4203, 0x4403, 0x5404, @@ -1391,314 +1485,319 @@ 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06, 0x7c07, 0x7e07, 0x0e00, 0x789b, 0x0080, 0xa046, 0x0005, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xd7fc, - 0x0118, 0xa0e0, 0x68c0, 0x0010, 0xa0e0, 0x48c0, 0x0005, 0x00e6, - 0x00f6, 0xd084, 0x0138, 0x2079, 0x0100, 0x2009, 0x4380, 0x2071, - 0x4380, 0x0030, 0x2009, 0x4340, 0x2079, 0x0200, 0x2071, 0x4340, - 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0002, 0x39c5, 0x39a0, - 0x39a0, 0x39a0, 0x39a0, 0x39a0, 0x399e, 0x399e, 0x080c, 0x243b, - 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x1de0, 0x784b, 0x0008, - 0x7848, 0xa084, 0x0008, 0x1de0, 0x68b4, 0xc0f5, 0x68b6, 0x7858, - 0xc0f5, 0x785a, 0x7830, 0xd0bc, 0x1180, 0xb284, 0x0800, 0x0118, - 0x0104, 0x39c5, 0x0010, 0x0304, 0x39c5, 0x681c, 0xd0ac, 0x1118, - 0x080c, 0x3a4b, 0x0010, 0x781b, 0x00fb, 0x2091, 0x8001, 0x00fe, - 0x00ee, 0x0005, 0x00c6, 0x2001, 0x4301, 0x2004, 0xd0ac, 0x1904, - 0x3a3d, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, - 0xb28c, 0x0600, 0x0118, 0xa0e0, 0x47c0, 0x0010, 0xa0e0, 0x4840, - 0x6004, 0xa084, 0x000a, 0x1904, 0x3a3d, 0x6108, 0xa194, 0xff00, - 0x0904, 0x3a3d, 0xa18c, 0x00ff, 0x601c, 0xa084, 0xff00, 0x0180, - 0x2001, 0x0009, 0xa102, 0x16b8, 0x2001, 0x000a, 0xa102, 0x16b0, - 0x2001, 0x000c, 0xa102, 0x16a8, 0x601c, 0xa084, 0x00ff, 0x601e, - 0x2001, 0x000a, 0xa106, 0x01a8, 0x2001, 0x000c, 0xa106, 0x01a0, - 0x2001, 0x0012, 0xa106, 0x0198, 0x2001, 0x0014, 0xa106, 0x0190, - 0x2001, 0x0019, 0xa106, 0x0188, 0x2001, 0x0032, 0xa106, 0x0180, - 0x00d8, 0x2009, 0x000c, 0x00d0, 0x2009, 0x0012, 0x00b8, 0x2009, - 0x0014, 0x00a0, 0x2009, 0x0019, 0x0088, 0x2009, 0x0020, 0x0070, - 0x2009, 0x003f, 0x0058, 0x2009, 0x000a, 0x0040, 0x2009, 0x000c, - 0x0028, 0x2009, 0x0019, 0x0010, 0x2011, 0x0000, 0x2100, 0xa205, - 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x00ce, 0x0005, 0x781b, - 0x0083, 0x0005, 0x781b, 0x0082, 0x0005, 0x781b, 0x0071, 0x0005, - 0x781b, 0x006e, 0x0005, 0x2009, 0x4319, 0x210c, 0xa186, 0x0000, - 0x0150, 0xa186, 0x0001, 0x0150, 0x701f, 0x000b, 0x7067, 0x0001, - 0x781b, 0x0054, 0x0005, 0x781b, 0x00f3, 0x0005, 0x701f, 0x000a, - 0x0005, 0x2009, 0x4319, 0x210c, 0xa186, 0x0000, 0x0168, 0xa186, - 0x0001, 0x0138, 0x701f, 0x000b, 0x7067, 0x0001, 0x781b, 0x0054, - 0x0005, 0x701f, 0x000a, 0x0005, 0x781b, 0x00f2, 0x0005, 0x781b, - 0x00fb, 0x0005, 0x781b, 0x00fa, 0x0005, 0x781b, 0x00cc, 0x0005, - 0x781b, 0x00cb, 0x0005, 0x6818, 0xd0fc, 0x0110, 0x681b, 0x001d, - 0x7067, 0x0001, 0x781b, 0x0054, 0x0005, 0x7830, 0xa084, 0x00c0, - 0x1170, 0x7808, 0xc08c, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000, - 0x78ec, 0xa084, 0x0021, 0x0118, 0x7808, 0xc08d, 0x780a, 0x0005, - 0x7808, 0xc08d, 0x780a, 0x0005, 0x7830, 0xa084, 0x0040, 0x1de0, - 0xb284, 0x0800, 0x0118, 0x1104, 0x3ab2, 0x0010, 0x1304, 0x3ab2, - 0x78ac, 0x0005, 0x7808, 0xa084, 0xfffd, 0x780a, 0xe000, 0xe000, - 0xe000, 0xe000, 0x78ec, 0xa084, 0x0021, 0x0140, 0xb284, 0x0800, - 0x0118, 0x1104, 0x3ac1, 0x0010, 0x1304, 0x3ac4, 0x78ac, 0x0006, - 0x7808, 0xa085, 0x0002, 0x780a, 0x000e, 0x0005, 0xa784, 0x0001, - 0x1904, 0x30a0, 0xa784, 0x0070, 0x0140, 0x00c6, 0x2d60, 0x2f68, - 0x080c, 0x23e1, 0x2d78, 0x2c68, 0x00ce, 0xa784, 0x0008, 0x0148, - 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0904, 0x248f, 0x0804, - 0x3a3f, 0xa784, 0x0004, 0x01c8, 0x78b8, 0xa084, 0x8000, 0x01a8, - 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0904, 0x248f, 0x78e4, - 0xa084, 0x0007, 0xa086, 0x0001, 0x1140, 0x78c0, 0xa685, 0x4800, - 0x2030, 0x7e5a, 0x781b, 0x00fb, 0x0005, 0xa784, 0x0080, 0x0140, - 0x7884, 0xd0fc, 0x0128, 0x080c, 0x382d, 0x681b, 0x0022, 0x0005, - 0x681b, 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, - 0x6833, 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0904, - 0x2a7a, 0xb284, 0x0800, 0x0110, 0x0104, 0x248c, 0x0304, 0x248c, - 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xd3fc, - 0x0118, 0xa080, 0x4840, 0x0010, 0xa080, 0x47c0, 0x2060, 0x2048, - 0x705a, 0x2a60, 0x0005, 0x00c6, 0x2960, 0x6000, 0xd0ac, 0x0904, - 0x3b81, 0xd1ac, 0x05e0, 0x6108, 0x8117, 0xa18c, 0x00ff, 0x631c, - 0x832f, 0x68a0, 0xd0cc, 0x11c8, 0xa584, 0x00ff, 0x0138, 0x78ec, - 0xd0e4, 0x0110, 0x8213, 0x00b8, 0x2029, 0x0000, 0xa182, 0x000c, - 0x1290, 0x78ec, 0xd0e4, 0x1118, 0x2009, 0x000c, 0x0060, 0xa182, - 0x000b, 0x1248, 0x2009, 0x000a, 0x0030, 0x2009, 0x0032, 0x2011, - 0x0000, 0x2029, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, - 0x0004, 0x79aa, 0x78ab, 0x0000, 0x7aaa, 0x7baa, 0x7daa, 0xa8c0, - 0x0008, 0x6820, 0xa085, 0x1000, 0x6822, 0x080c, 0x3850, 0xa085, - 0x0001, 0x00ce, 0x0005, 0xa282, 0x0006, 0x1904, 0x381f, 0x7da8, - 0x7eac, 0x8637, 0xa5ac, 0x00ff, 0xa6b4, 0x00ff, 0x7fac, 0x8747, - 0xa7bc, 0x00ff, 0xa8c4, 0x00ff, 0x6920, 0xc1bd, 0x6922, 0xd1e4, - 0x05c8, 0xa18c, 0xecff, 0x6922, 0xa782, 0x0002, 0x1a04, 0x37fc, - 0xa6b4, 0x00ff, 0x0560, 0xa682, 0x0039, 0x1a04, 0x37fc, 0xa582, - 0x0009, 0x0a04, 0x37fc, 0xa882, 0x0003, 0x1a04, 0x37fc, 0xa886, - 0x0002, 0x0128, 0xa886, 0x0000, 0x0138, 0x0804, 0x37fc, 0xa786, - 0x0000, 0x0904, 0x37fc, 0x8634, 0x852b, 0x852b, 0x080c, 0x38c6, - 0x0904, 0x37fc, 0x080c, 0x36f6, 0x080c, 0x379a, 0x7e58, 0xd6d4, - 0x1118, 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, 0x0005, 0x080c, - 0x36f3, 0x0c90, 0xa886, 0x0002, 0x1108, 0x8634, 0x7158, 0xa188, - 0x0000, 0x210c, 0xd1ac, 0x0904, 0x37fc, 0xd1ec, 0x1120, 0x2039, - 0x0000, 0x2041, 0x0000, 0xd1e4, 0x1120, 0x2031, 0x0000, 0x2041, - 0x0000, 0xa782, 0x0002, 0x12c8, 0x621c, 0xa284, 0x00ff, 0xa706, - 0x0110, 0x2039, 0x0000, 0xa605, 0x0190, 0x6108, 0x811f, 0xa39c, - 0x00ff, 0x0168, 0xa302, 0x1208, 0x2330, 0x8807, 0xa705, 0xa086, - 0x0201, 0x0160, 0xa886, 0x0000, 0x0168, 0x2039, 0x0000, 0x2041, - 0x0000, 0x2031, 0x0000, 0xa006, 0x2010, 0x0070, 0xa284, 0xff00, - 0x1108, 0x2040, 0xa184, 0x00ff, 0xa502, 0x0108, 0x2128, 0x852b, - 0x852b, 0x080c, 0x38c6, 0x0d58, 0x080c, 0x36f6, 0x080c, 0x379a, - 0x789b, 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, - 0x78ab, 0x0000, 0x7daa, 0x7eaa, 0x7faa, 0x2800, 0x78aa, 0x789b, - 0x0060, 0x78ab, 0x0005, 0x080c, 0x3850, 0x7858, 0xc095, 0x785a, - 0x781b, 0x0082, 0x0005, 0x0020, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, 0x0009, 0x0014, - 0x0014, 0x9855, 0x984d, 0x0014, 0x9911, 0x98ff, 0x0014, 0x0014, - 0x0090, 0x00e7, 0x0100, 0x0402, 0x2008, 0xf880, 0x0018, 0x0017, - 0x840f, 0xd8c1, 0x0014, 0x0016, 0xa20a, 0x0014, 0x300b, 0xa20c, - 0x0014, 0x2500, 0x0013, 0x2500, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0118, 0xa0e0, 0x6ac0, 0x0010, 0xa0e0, 0x4ac0, 0x0005, 0x00e6, + 0x00f6, 0xd084, 0x0138, 0x2079, 0x0100, 0x2009, 0x4580, 0x2071, + 0x4580, 0x0030, 0x2009, 0x4540, 0x2079, 0x0200, 0x2071, 0x4540, + 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0002, 0x3b68, 0x3b68, + 0x3b68, 0x3b68, 0x3b68, 0x3b68, 0x3b66, 0x3b66, 0x080c, 0x252b, + 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0580, 0x7858, + 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, 0xa086, 0x1814, + 0x1530, 0x784b, 0x0004, 0x7848, 0xa084, 0x0004, 0x1de0, 0x784b, + 0x0008, 0x7848, 0xa084, 0x0008, 0x1de0, 0x7830, 0xd0bc, 0x11b8, + 0xb284, 0x0800, 0x0118, 0x0104, 0x3b9f, 0x0010, 0x0304, 0x3b9f, + 0x79e4, 0xa184, 0x0030, 0x0158, 0x78ec, 0xa084, 0x0003, 0x0138, + 0x681c, 0xd0ac, 0x1110, 0x00d9, 0x0010, 0x781b, 0x00fb, 0x00fe, + 0x00ee, 0x0005, 0x2001, 0x4501, 0x2004, 0xd0ac, 0x1118, 0x6814, + 0x080c, 0x2454, 0x0005, 0x781b, 0x0083, 0x0005, 0x781b, 0x0082, + 0x0005, 0x781b, 0x0071, 0x0005, 0x781b, 0x006e, 0x0005, 0x2009, + 0x4519, 0x210c, 0xa186, 0x0000, 0x0150, 0xa186, 0x0001, 0x0150, + 0x701f, 0x000b, 0x7063, 0x0001, 0x781b, 0x0054, 0x0005, 0x781b, + 0x00f3, 0x0005, 0x701f, 0x000a, 0x0005, 0x2009, 0x4519, 0x210c, + 0xa186, 0x0000, 0x0168, 0xa186, 0x0001, 0x0138, 0x701f, 0x000b, + 0x7063, 0x0001, 0x781b, 0x0054, 0x0005, 0x701f, 0x000a, 0x0005, + 0x781b, 0x00f2, 0x0005, 0x781b, 0x00fb, 0x0005, 0x781b, 0x00fa, + 0x0005, 0x781b, 0x00cc, 0x0005, 0x781b, 0x00cb, 0x0005, 0x6818, + 0xd0fc, 0x0110, 0x681b, 0x001d, 0x7063, 0x0001, 0x781b, 0x0054, + 0x0005, 0x7830, 0xa084, 0x00c0, 0x1170, 0x7808, 0xc08c, 0x780a, + 0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084, 0x0021, 0x0118, + 0x7808, 0xc08d, 0x780a, 0x0005, 0x7808, 0xc08d, 0x780a, 0x0005, + 0x7830, 0xa084, 0x0040, 0x1de0, 0xb284, 0x0800, 0x0118, 0x1104, + 0x3c1e, 0x0010, 0x1304, 0x3c1e, 0x78ac, 0x0005, 0x7808, 0xa084, + 0xfffd, 0x780a, 0xe000, 0xe000, 0xe000, 0xe000, 0x78ec, 0xa084, + 0x0021, 0x0140, 0xb284, 0x0800, 0x0118, 0x1104, 0x3c2d, 0x0010, + 0x1304, 0x3c30, 0x78ac, 0x0006, 0x7808, 0xa085, 0x0002, 0x780a, + 0x000e, 0x0005, 0xa784, 0x0001, 0x1904, 0x31c5, 0xa784, 0x0070, + 0x0140, 0x00c6, 0x2d60, 0x2f68, 0x080c, 0x2446, 0x2d78, 0x2c68, + 0x00ce, 0xa784, 0x0008, 0x0148, 0x784b, 0x0008, 0x78ec, 0xa084, + 0x0003, 0x0904, 0x31c5, 0x0804, 0x3bab, 0xa784, 0x0004, 0x01c8, + 0x78b8, 0xa084, 0x8000, 0x01a8, 0x784b, 0x0008, 0x78ec, 0xa084, + 0x0003, 0x0904, 0x31c5, 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, + 0x1140, 0x78c0, 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00fb, + 0x0005, 0xa784, 0x0080, 0x0140, 0x7884, 0xd0fc, 0x0128, 0x080c, + 0x39f5, 0x681b, 0x0022, 0x0005, 0x681b, 0x0003, 0x7858, 0xa084, + 0x5f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, 0x784b, 0x0008, + 0x78ec, 0xa084, 0x0003, 0x0904, 0x2b6b, 0xb284, 0x0800, 0x0110, + 0x0104, 0x257c, 0x0304, 0x257c, 0x6b14, 0x8307, 0xa084, 0x000f, + 0x8003, 0x8003, 0x8003, 0xd3fc, 0x0118, 0xa080, 0x4a40, 0x0010, + 0xa080, 0x49c0, 0x2060, 0x2048, 0x7056, 0x2a60, 0x0005, 0x00c6, + 0x2960, 0x6000, 0xd0ac, 0x0904, 0x3ced, 0xd1ac, 0x05e0, 0x6108, + 0x8117, 0xa18c, 0x00ff, 0x631c, 0x832f, 0x68a0, 0xd0cc, 0x11c8, + 0xa584, 0x00ff, 0x0138, 0x78ec, 0xd0e4, 0x0110, 0x8213, 0x00b8, + 0x2029, 0x0000, 0xa182, 0x000c, 0x1290, 0x78ec, 0xd0e4, 0x1118, + 0x2009, 0x000c, 0x0060, 0xa182, 0x000b, 0x1248, 0x2009, 0x000a, + 0x0030, 0x2009, 0x0032, 0x2011, 0x0000, 0x2029, 0x0000, 0x78ab, + 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x79aa, 0x78ab, 0x0000, + 0x7aaa, 0x7baa, 0x7daa, 0xa8c0, 0x0008, 0x6820, 0xa085, 0x1000, + 0x6822, 0x080c, 0x3a18, 0xa085, 0x0001, 0x00ce, 0x0005, 0xa282, + 0x0006, 0x1904, 0x39e7, 0x7da8, 0x7eac, 0x8637, 0xa5ac, 0x00ff, + 0xa6b4, 0x00ff, 0x7fac, 0x8747, 0xa7bc, 0x00ff, 0xa8c4, 0x00ff, + 0x6920, 0xc1bd, 0x6922, 0xd1e4, 0x0904, 0x3d59, 0xa18c, 0xecff, + 0x6922, 0xa782, 0x0002, 0x1a04, 0x39c3, 0xa6b4, 0x00ff, 0x0904, + 0x3d56, 0xa682, 0x0039, 0x1a04, 0x39c3, 0xa582, 0x0009, 0x0a04, + 0x39c3, 0xa882, 0x0003, 0x1a04, 0x39c3, 0xa886, 0x0002, 0x01d0, + 0xa886, 0x0000, 0x1904, 0x39c3, 0x2001, 0x000c, 0x79ec, 0xd1e4, + 0x0110, 0x2001, 0x000a, 0xa502, 0x1290, 0x080c, 0x39c3, 0x00c6, + 0x2960, 0x6004, 0xa085, 0x001a, 0x6006, 0x6000, 0xc0ac, 0x6002, + 0x00ce, 0x0005, 0xa786, 0x0000, 0x0904, 0x39c3, 0x8634, 0xa686, + 0x0010, 0x1108, 0x8630, 0x852b, 0x852b, 0x080c, 0x3a8e, 0x0904, + 0x39c3, 0x080c, 0x38bd, 0x080c, 0x3961, 0x7e58, 0xd6d4, 0x1118, + 0x781b, 0x0071, 0x0005, 0x781b, 0x0083, 0x0005, 0x080c, 0x38ba, + 0x0c90, 0xa886, 0x0002, 0x1108, 0x8634, 0x7154, 0xa188, 0x0000, + 0x210c, 0xd1ac, 0x0904, 0x39c3, 0xd1ec, 0x1120, 0x2039, 0x0000, + 0x2041, 0x0000, 0xd1e4, 0x1120, 0x2031, 0x0000, 0x2041, 0x0000, + 0xa782, 0x0002, 0x12c8, 0x621c, 0xa284, 0x00ff, 0xa706, 0x0110, + 0x2039, 0x0000, 0xa605, 0x0190, 0x6108, 0x811f, 0xa39c, 0x00ff, + 0x0168, 0xa302, 0x1208, 0x2330, 0x8807, 0xa705, 0xa086, 0x0201, + 0x0160, 0xa886, 0x0000, 0x0168, 0x2039, 0x0000, 0x2041, 0x0000, + 0x2031, 0x0000, 0xa006, 0x2010, 0x0070, 0xa284, 0xff00, 0x1108, + 0x2040, 0xa184, 0x00ff, 0xa502, 0x0108, 0x2128, 0x852b, 0x852b, + 0x080c, 0x3a8e, 0x0d58, 0x080c, 0x38bd, 0x080c, 0x3961, 0x789b, + 0x0080, 0x78ab, 0x0001, 0x78ab, 0x0006, 0x78ab, 0x0004, 0x78ab, + 0x0000, 0x7daa, 0x7eaa, 0x7faa, 0x2800, 0x78aa, 0x789b, 0x0060, + 0x78ab, 0x0005, 0x080c, 0x3a18, 0x7858, 0xc095, 0x785a, 0x781b, + 0x0082, 0x0005, 0x0020, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, + 0x9855, 0x984d, 0x0014, 0x9911, 0x98ff, 0x0014, 0x0014, 0x0090, + 0x00e7, 0x0100, 0x0402, 0x2008, 0xf880, 0x0018, 0x0017, 0x840f, + 0xd8c1, 0x0014, 0x0016, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, + 0x2500, 0x0013, 0x2500, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0xa200, 0x3806, 0x8839, 0x20c4, 0x0864, 0xa84f, - 0x3008, 0x28c1, 0x9d18, 0xa201, 0x300c, 0x2847, 0x8161, 0x846a, - 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2, 0x9cce, 0xa8f3, - 0x0864, 0xa83d, 0x300c, 0xa801, 0x3008, 0x28e1, 0x9cce, 0x2021, - 0xa818, 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0, 0x6fc0, 0x67a4, - 0x6c80, 0x0212, 0xa205, 0x883d, 0x882b, 0x1814, 0x883b, 0x7027, - 0x85f2, 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa814, 0x883e, - 0xa812, 0x280a, 0xa204, 0x64c0, 0x6de0, 0x67a0, 0x6fc0, 0x1814, - 0x883b, 0x7027, 0x8576, 0x8677, 0xa806, 0x796d, 0xa8da, 0x796b, - 0xa8f1, 0x7861, 0x883e, 0x206b, 0x28c1, 0x9d18, 0x2044, 0x2103, - 0x20b4, 0x2095, 0xa8ca, 0xa207, 0x2901, 0xa80a, 0x0014, 0xa203, + 0x0010, 0xa200, 0x3806, 0x8839, 0x20c4, 0x0864, 0xa850, 0x3008, + 0x28c1, 0x9d18, 0xa201, 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, + 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2, 0x9cce, 0xa8f3, 0x0864, + 0xa83e, 0x300c, 0xa801, 0x3008, 0x28e1, 0x9cce, 0x28a1, 0x7162, + 0x2021, 0xa818, 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0, 0x6fc0, + 0x67a4, 0x6c80, 0x0212, 0xa205, 0x883d, 0x882b, 0x1814, 0x883b, + 0x7027, 0x85f2, 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa812, + 0x883e, 0xa810, 0x2881, 0x7161, 0x280a, 0xa204, 0x64c0, 0x6de0, + 0x67a0, 0x6fc0, 0x1814, 0x883b, 0x7023, 0x8576, 0x8677, 0xa802, + 0x7861, 0x883e, 0x206c, 0x28c1, 0x9d18, 0x2044, 0x2103, 0x20a2, + 0x2081, 0xa8ca, 0x2902, 0xa20e, 0xa80b, 0xa207, 0x0014, 0xa203, 0x8000, 0x85a4, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, - 0x856e, 0x866f, 0x7121, 0x0014, 0x0704, 0x3008, 0x9cce, 0x0014, - 0xa202, 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf844, 0x856e, - 0x883f, 0x08e6, 0xa8f5, 0xf861, 0xa8ea, 0xf801, 0x0014, 0xf881, - 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014, 0x8532, - 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014, 0x3008, - 0x8000, 0x2849, 0x1011, 0xa8fc, 0x3008, 0x8000, 0xa000, 0x2081, - 0x2802, 0x1011, 0xa8fc, 0xa889, 0x3008, 0x20a1, 0x283c, 0x1011, - 0xa8fc, 0xa209, 0x0017, 0x300c, 0x8000, 0x85a4, 0x1de2, 0xdac1, - 0x0014, 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfaa3, 0x19f2, - 0x26e0, 0x18f2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x3806, 0x0210, - 0x9d22, 0x0704, 0xa206, 0x6865, 0x817e, 0x842a, 0x1dc1, 0x8823, - 0x0016, 0x6042, 0x8008, 0xa8fa, 0x8160, 0x842a, 0x8180, 0xf021, - 0x3008, 0x84a8, 0x11d7, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, - 0x0016, 0x0000, 0x0126, 0x70d4, 0xa084, 0x4c00, 0x8004, 0x2090, - 0x7204, 0x7008, 0xc09c, 0xa205, 0x1178, 0x720c, 0x82ff, 0x0128, - 0x8aff, 0x1150, 0x7200, 0xd284, 0x1138, 0x7007, 0x0004, 0x7003, - 0x0008, 0x012e, 0x2000, 0x0005, 0x7000, 0xa084, 0x0003, 0x7002, - 0xc69c, 0xd084, 0x05b8, 0x2001, 0x4301, 0x2004, 0xd0b4, 0x0904, - 0x3dcf, 0x7108, 0xe000, 0x7008, 0xa106, 0x1dd8, 0xa184, 0x0003, - 0x0904, 0x3dcf, 0xa184, 0x01e0, 0x1904, 0x3dcf, 0xd1f4, 0x1d88, - 0xa184, 0x3000, 0xa086, 0x1000, 0x0d60, 0x2011, 0x0180, 0x710c, - 0x8211, 0x0130, 0x7008, 0xd0f4, 0x1d20, 0x700c, 0xa106, 0x0dc0, - 0x7007, 0x0012, 0x7108, 0xe000, 0x7008, 0xa106, 0x1dd8, 0xa184, - 0x0003, 0x0568, 0xd194, 0x0db0, 0xd1f4, 0x0548, 0x7007, 0x0002, - 0x0880, 0x0428, 0x7108, 0xd1fc, 0x0130, 0x080c, 0x3e9e, 0x8aff, - 0x0904, 0x3d58, 0x0cb8, 0x700c, 0xa08c, 0x07ff, 0x01e8, 0x7004, - 0xd084, 0x0178, 0x7014, 0xa005, 0x1148, 0x7010, 0x7310, 0xa306, - 0x1de0, 0x2300, 0xa005, 0x0128, 0xa102, 0x1e20, 0x7007, 0x0010, - 0x0030, 0x8aff, 0x0148, 0x080c, 0x4046, 0x1de8, 0x09d8, 0x080c, - 0x3e58, 0x012e, 0x2000, 0x0005, 0x7204, 0x7108, 0xc19c, 0x8103, - 0x1218, 0x080c, 0x3e9e, 0x0cc0, 0xa205, 0x1d88, 0x7007, 0x0004, - 0x7003, 0x0008, 0x012e, 0x2000, 0x0005, 0x6428, 0x84ff, 0x0508, - 0x2c70, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3e19, 0x273c, 0x87fb, - 0x1148, 0x0210, 0x080c, 0x243b, 0x609c, 0xa075, 0x0190, 0x0c88, - 0x2039, 0x3e0e, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529, - 0x8421, 0x0138, 0x8738, 0x2704, 0xa005, 0x1da8, 0x709c, 0xa075, - 0x1d00, 0x0005, 0x0000, 0x0005, 0x0009, 0x000d, 0x0011, 0x0015, - 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, 0x000f, 0x0015, 0x001b, - 0x0000, 0x0000, 0x3e0e, 0x3e0b, 0x0000, 0x0000, 0x8000, 0x0000, - 0x3e0e, 0x0000, 0x3e16, 0x3e13, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3e16, 0x0000, 0x3e11, 0x3e11, 0x0000, 0x0000, 0x8000, 0x0000, - 0x3e11, 0x0000, 0x3e17, 0x3e17, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3e17, 0x2079, 0x4300, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007, - 0x0002, 0x7003, 0x0001, 0x2009, 0x0002, 0x2071, 0x0050, 0x7007, - 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2001, 0x01ff, 0x2004, - 0xd0fc, 0x1128, 0x8109, 0x0118, 0x2071, 0x0020, 0x0c80, 0x0005, - 0x7004, 0x8004, 0x1690, 0x7007, 0x0012, 0x2019, 0x0000, 0x7108, - 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0110, 0x080c, 0x243b, - 0xa19c, 0x300c, 0xa386, 0x2004, 0x0130, 0xa386, 0x0008, 0x0160, - 0xa386, 0x200c, 0x1d60, 0x7200, 0x8204, 0x0230, 0x730c, 0xa384, - 0x07ff, 0x0110, 0x080c, 0x243b, 0x7007, 0x0012, 0x7000, 0xd084, - 0x1160, 0x7008, 0xa084, 0x01e0, 0x1140, 0x7310, 0x7014, 0xa305, - 0x0120, 0x710c, 0xa184, 0x07ff, 0x1958, 0x7007, 0x0012, 0x7007, - 0x0008, 0x7004, 0xd09c, 0x1de8, 0x7007, 0x0012, 0x7108, 0x8103, - 0x0ed8, 0x7003, 0x0008, 0x0005, 0x7108, 0x0000, 0xa184, 0x01e0, - 0x1550, 0x7108, 0xa184, 0x01e0, 0x1530, 0xa184, 0x0007, 0x0002, - 0x3eb2, 0x3ec0, 0x3eb0, 0x3ec0, 0x3eb0, 0x3f06, 0x3eb0, 0x3f05, - 0x080c, 0x243b, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, - 0x1118, 0x2049, 0x0000, 0x0005, 0x080c, 0x4046, 0x1de8, 0x0005, - 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, 0x0118, 0x080c, - 0x4046, 0x1de8, 0x0005, 0x7007, 0x0012, 0x7108, 0x1d04, 0x3ece, - 0x2091, 0x6000, 0x1d04, 0x3ed2, 0x2091, 0x6000, 0x7007, 0x0012, + 0x856e, 0x7121, 0x0014, 0x0704, 0x3008, 0x9cce, 0x0014, 0xa202, + 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf844, 0x856e, 0x883f, + 0x08e6, 0xa8f5, 0xf861, 0xa8eb, 0xf801, 0x0014, 0xf881, 0x0016, + 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, + 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014, 0x3008, 0x8000, + 0x2849, 0x1011, 0xa8fc, 0x3008, 0x8000, 0xa000, 0x2081, 0x2802, + 0x1011, 0xa8fc, 0xa889, 0x3008, 0x20a1, 0x283c, 0x1011, 0xa8fc, + 0xa209, 0x0017, 0x300c, 0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, + 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0, + 0x18f2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d22, + 0x0704, 0xa206, 0x6865, 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, + 0x6042, 0x8008, 0xa8fa, 0x8160, 0x842a, 0x8180, 0xf021, 0x3008, + 0x84a8, 0x11d7, 0x7042, 0x20dd, 0x0011, 0x20d5, 0x8822, 0x0016, + 0x0000, 0x0126, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x7204, + 0x7008, 0xc09c, 0xa205, 0x1178, 0x720c, 0x82ff, 0x0128, 0x8aff, + 0x1150, 0x7200, 0xd284, 0x1138, 0x7007, 0x0004, 0x7003, 0x0008, + 0x012e, 0x2000, 0x0005, 0x7000, 0xa084, 0x0003, 0x7002, 0xc69c, + 0xd084, 0x0588, 0x7108, 0xe000, 0x7008, 0xa106, 0x1dd8, 0xa184, + 0x0003, 0x0904, 0x3f50, 0xa184, 0x01e0, 0x1904, 0x3f50, 0xd1f4, + 0x1d88, 0xa184, 0x3000, 0xa086, 0x1000, 0x0d60, 0x2011, 0x0180, + 0x710c, 0x8211, 0x0130, 0x7008, 0xd0f4, 0x1d20, 0x700c, 0xa106, + 0x0dc0, 0x7007, 0x0012, 0x7108, 0xe000, 0x7008, 0xa106, 0x1dd8, + 0xa184, 0x0003, 0x0568, 0xd194, 0x0db0, 0xd1f4, 0x0548, 0x7007, + 0x0002, 0x0880, 0x0428, 0x7108, 0xd1fc, 0x0130, 0x080c, 0x4053, + 0x8aff, 0x0904, 0x3edf, 0x0cb8, 0x700c, 0xa08c, 0x07ff, 0x01e8, + 0x7004, 0xd084, 0x0178, 0x7014, 0xa005, 0x1148, 0x7010, 0x7310, + 0xa306, 0x1de0, 0x2300, 0xa005, 0x0128, 0xa102, 0x1e20, 0x7007, + 0x0010, 0x0030, 0x8aff, 0x0148, 0x080c, 0x4212, 0x1de8, 0x09d8, + 0x080c, 0x3fd9, 0x012e, 0x2000, 0x0005, 0x7204, 0x7108, 0xc19c, + 0x8103, 0x1218, 0x7007, 0x0002, 0x0cc0, 0xa205, 0x1d88, 0x7007, + 0x0004, 0x7003, 0x0008, 0x012e, 0x2000, 0x0005, 0x6428, 0x84ff, + 0x0508, 0x2c70, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3f9a, 0x273c, + 0x87fb, 0x1148, 0x0210, 0x080c, 0x252b, 0x609c, 0xa075, 0x0190, + 0x0c88, 0x2039, 0x3f8f, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, + 0xa529, 0x8421, 0x0138, 0x8738, 0x2704, 0xa005, 0x1da8, 0x709c, + 0xa075, 0x1d00, 0x0005, 0x0000, 0x0005, 0x0009, 0x000d, 0x0011, + 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, 0x000f, 0x0015, + 0x001b, 0x0000, 0x0000, 0x3f8f, 0x3f8c, 0x0000, 0x0000, 0x8000, + 0x0000, 0x3f8f, 0x0000, 0x3f97, 0x3f94, 0x0000, 0x0000, 0x0000, + 0x0000, 0x3f97, 0x0000, 0x3f92, 0x3f92, 0x0000, 0x0000, 0x8000, + 0x0000, 0x3f92, 0x0000, 0x3f98, 0x3f98, 0x0000, 0x0000, 0x0000, + 0x0000, 0x3f98, 0x2079, 0x4500, 0x2071, 0x0010, 0x7007, 0x000a, + 0x7007, 0x0002, 0x7003, 0x0001, 0x2009, 0x0002, 0x2071, 0x0050, + 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0000, 0x2001, 0x01ff, + 0x2004, 0xd0fc, 0x1128, 0x8109, 0x0118, 0x2071, 0x0020, 0x0c80, + 0x0005, 0x7004, 0x8004, 0x1a04, 0x402f, 0x7108, 0x7008, 0xa106, + 0x1de0, 0xa184, 0x01e0, 0x0120, 0x080c, 0x408b, 0x0804, 0x404f, + 0x7007, 0x0012, 0x2019, 0x0000, 0x7108, 0x7008, 0xa106, 0x1de0, + 0xa184, 0x01e0, 0x0120, 0x080c, 0x408b, 0x0804, 0x404f, 0xa19c, + 0x300c, 0xa386, 0x2004, 0x0190, 0xa386, 0x0008, 0x01c0, 0x7004, + 0xd084, 0x1148, 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x0003, + 0x0110, 0x0804, 0x408b, 0xa386, 0x200c, 0x19f0, 0x7200, 0x8204, + 0x0230, 0x730c, 0xa384, 0x07ff, 0x0110, 0x080c, 0x252b, 0x7108, + 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0118, 0x080c, 0x408b, + 0x0470, 0x7007, 0x0012, 0x7000, 0xd084, 0x1148, 0x7310, 0x7014, + 0xa305, 0x0128, 0x710c, 0xa184, 0x07ff, 0x1904, 0x3fd9, 0x7108, + 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0118, 0x080c, 0x408b, + 0x00b0, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8, + 0x7108, 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0118, 0x080c, + 0x408b, 0x0028, 0x7007, 0x0012, 0x7108, 0x8103, 0x0e88, 0x7003, + 0x0008, 0x0005, 0x7108, 0xa184, 0x01e0, 0x15a8, 0x7108, 0xa184, + 0x01e0, 0x1588, 0xa184, 0x0007, 0x0002, 0x4067, 0x4075, 0x4065, + 0x4075, 0x4065, 0x40c5, 0x4065, 0x40c3, 0x080c, 0x252b, 0x7004, + 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, 0x1118, 0x2049, 0x0000, + 0x0005, 0x080c, 0x4212, 0x1de8, 0x0005, 0x7004, 0xa084, 0x0010, + 0xc08d, 0x7006, 0x7004, 0xd084, 0x1140, 0x7108, 0x7008, 0xa106, + 0x1de0, 0xa184, 0x0003, 0x0108, 0x0030, 0x8aff, 0x0118, 0x080c, + 0x4212, 0x1de8, 0x0005, 0x7007, 0x0012, 0x7108, 0x1d04, 0x408e, + 0x2091, 0x6000, 0x1d04, 0x4092, 0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x1de8, 0x7007, 0x0012, 0x7108, 0xd1fc, 0x1dd8, 0x7003, 0x0000, 0x7000, 0xa005, 0x1130, 0x7004, 0xa005, 0x1118, 0x700c, 0xa005, 0x0108, 0x0c40, 0x2049, 0x0000, 0xb284, 0x0200, 0x0118, 0x2001, 0x0000, 0x0010, 0x2001, 0x0001, - 0x080c, 0x397f, 0x6818, 0xa084, 0x8000, 0x0110, 0x681b, 0x0002, - 0x0005, 0x080c, 0x243b, 0x080c, 0x243b, 0x04b9, 0x7210, 0x7114, - 0x700c, 0xa09c, 0x07ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, - 0x0461, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, - 0x2100, 0xa31b, 0x2400, 0xa305, 0x0140, 0x1238, 0x8412, 0x8210, - 0x830a, 0xa189, 0x0000, 0x2b60, 0x0c58, 0x2b60, 0x8a07, 0x0006, - 0x6004, 0xa084, 0x0008, 0x0118, 0xa7ba, 0x3e13, 0x0010, 0xa7ba, - 0x3e0b, 0x000e, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, - 0x7007, 0x0012, 0x080c, 0x3e58, 0x0005, 0x8a50, 0x8739, 0x2704, + 0x080c, 0x3b47, 0x681b, 0x0002, 0x2051, 0x0000, 0x0005, 0x080c, + 0x252b, 0x080c, 0x252b, 0x080c, 0x4105, 0x7210, 0x7114, 0x700c, + 0xa09c, 0x07ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x04a9, + 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, 0x2100, + 0xa31b, 0x2400, 0xa305, 0x0140, 0x1238, 0x8412, 0x8210, 0x830a, + 0xa189, 0x0000, 0x2b60, 0x0c58, 0x2b60, 0x8a07, 0x0006, 0x6004, + 0xa084, 0x0008, 0x0118, 0xa7ba, 0x3f94, 0x0010, 0xa7ba, 0x3f8c, + 0x000e, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7108, + 0x7008, 0xa106, 0x1de0, 0xa184, 0x01e0, 0x0110, 0x080c, 0x408b, + 0x7007, 0x0012, 0x080c, 0x3fd9, 0x0005, 0x8a50, 0x8739, 0x2704, 0xa004, 0x1168, 0x6000, 0xa064, 0x1108, 0x2d60, 0x6004, 0xa084, - 0x000f, 0xa080, 0x3e29, 0x203c, 0x87fb, 0x090c, 0x243b, 0x0005, - 0x0126, 0x00d6, 0x70d4, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, + 0x000f, 0xa080, 0x3faa, 0x203c, 0x87fb, 0x090c, 0x252b, 0x0005, + 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x0006, 0x6804, 0xa084, 0x0008, 0x000e, 0x0118, - 0xa0b8, 0x3e13, 0x0010, 0xa0b8, 0x3e0b, 0xb284, 0x0200, 0x0110, + 0xa0b8, 0x3f94, 0x0010, 0xa0b8, 0x3f8c, 0xb284, 0x0200, 0x0110, 0x7e20, 0x0008, 0x7e24, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0108, 0xc685, 0x2400, 0xa305, 0x0520, 0x2c58, 0x2704, 0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, 0x0008, 0x0140, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, 0xa203, - 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x080c, 0x4067, 0x0010, - 0x080c, 0x4046, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x00d6, - 0x70d4, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x7007, 0x0004, + 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x080c, 0x423a, 0x0010, + 0x080c, 0x4212, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x00d6, + 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x7007, 0x0004, 0x7004, 0xd094, 0x1de8, 0x7003, 0x0008, 0x012e, 0x2000, 0x0005, - 0x0126, 0x00d6, 0x70d4, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, + 0x0126, 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x7e20, 0xb284, 0x0200, 0x1108, 0x7e24, 0xa6b5, 0x000c, 0x681c, 0xd0ac, 0x1118, 0xc685, 0x7003, 0x0000, 0x6828, 0x2050, 0x2d60, - 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x3e19, 0x273c, 0x87fb, 0x1138, - 0x0210, 0x080c, 0x243b, 0x689c, 0xa065, 0x0120, 0x0c88, 0x080c, - 0x4046, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x0006, 0x0016, - 0x00d6, 0x70d4, 0xa084, 0x4c00, 0x8004, 0x2090, 0x7e20, 0xb284, + 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x3f9a, 0x273c, 0x87fb, 0x1138, + 0x0210, 0x080c, 0x252b, 0x689c, 0xa065, 0x0120, 0x0c88, 0x080c, + 0x4212, 0x1de8, 0x012e, 0x2000, 0x0005, 0x0126, 0x0006, 0x0016, + 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x7e20, 0xb284, 0x0200, 0x1108, 0x7e24, 0x00de, 0x003e, 0x004e, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0128, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004, - 0x2049, 0x3fe5, 0x6828, 0xa055, 0x05f0, 0x2d70, 0x2e60, 0x7004, - 0xa0bc, 0x000f, 0xa7b8, 0x3e19, 0x273c, 0x87fb, 0x1140, 0x0210, - 0x080c, 0x243b, 0x709c, 0xa075, 0x2060, 0x0568, 0x0c80, 0x2704, - 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0268, 0x8a51, 0x1110, - 0x080c, 0x243b, 0x8738, 0x2704, 0xa005, 0x1d90, 0x709c, 0xa075, - 0x2060, 0x01c8, 0x08e0, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, - 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x1210, 0x080c, - 0x243b, 0xb284, 0x0200, 0x0118, 0x2071, 0x0050, 0x0010, 0x2071, - 0x0020, 0x0804, 0x3f79, 0x012e, 0x2000, 0x0005, 0x7008, 0xa084, - 0x0003, 0xa086, 0x0003, 0x1108, 0x0005, 0x2704, 0xac78, 0x7800, - 0x701a, 0x7804, 0x701e, 0x7808, 0x7012, 0x780c, 0x7016, 0x6004, - 0xa084, 0x0008, 0x0120, 0x7810, 0x7022, 0x7814, 0x7026, 0x7602, - 0x7004, 0xa084, 0x0010, 0xc085, 0x7006, 0x2079, 0x4300, 0x8a51, - 0x01b0, 0x8738, 0x2704, 0xa005, 0x1168, 0x609c, 0xa005, 0x0180, - 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, 0x3e19, 0x203c, 0x87fb, - 0x090c, 0x243b, 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, 0x0005, - 0x2051, 0x0000, 0x0005, 0x0126, 0x0006, 0x00d6, 0x70d4, 0xa084, - 0x4c00, 0x8004, 0x2090, 0x00de, 0x008e, 0x7108, 0xa184, 0x0003, - 0x1128, 0x6828, 0xa005, 0x0178, 0x0804, 0x3d6c, 0x7108, 0xd1fc, - 0x0118, 0x080c, 0x3e9e, 0x0c88, 0x7007, 0x0010, 0x7108, 0xd1fc, - 0x0de8, 0x080c, 0x3e9e, 0x7008, 0xa086, 0x0008, 0x1d30, 0x7000, - 0xa005, 0x1d18, 0x7003, 0x0000, 0x2049, 0x0000, 0x012e, 0x2000, - 0x0005, 0x0126, 0x0146, 0x0136, 0x0156, 0x00c6, 0x00d6, 0x70d4, - 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x2049, 0x40b1, 0xad80, - 0x0011, 0x20a0, 0xb284, 0x0200, 0x0118, 0x2099, 0x0032, 0x0010, - 0x2099, 0x0031, 0x700c, 0xa084, 0x07ff, 0x682a, 0x7007, 0x0008, - 0x7007, 0x0002, 0x7003, 0x0001, 0x0118, 0x8000, 0x80ac, 0x53a5, - 0x700c, 0xa084, 0x07ff, 0x0130, 0x7007, 0x0004, 0x7004, 0xa084, - 0x0004, 0x1de0, 0x00ce, 0x2049, 0x0000, 0x7003, 0x0000, 0x015e, - 0x013e, 0x014e, 0x012e, 0x2000, 0x0005, 0x2091, 0x8000, 0x2091, - 0x6000, 0x78ac, 0xa005, 0x1168, 0x7974, 0x70d0, 0xa106, 0x1148, - 0x781c, 0xa005, 0x0130, 0x781f, 0x0000, 0x0e04, 0x4101, 0x2091, - 0x4080, 0x7830, 0x8001, 0x7832, 0x1904, 0x416b, 0x7834, 0x7832, - 0x2061, 0x68c0, 0x2069, 0x4380, 0xc7fd, 0x68d0, 0xa005, 0x0128, - 0x8001, 0x68d2, 0x1110, 0x080c, 0x42c4, 0x6800, 0xa084, 0x000f, - 0x0168, 0xa086, 0x0001, 0x0150, 0x6844, 0xa00d, 0x0138, 0x2104, - 0xa005, 0x0120, 0x8001, 0x200a, 0x0904, 0x425f, 0x6814, 0xa005, - 0x01a8, 0x8001, 0x6816, 0x1190, 0x68a7, 0x0001, 0x00f6, 0xd7fc, - 0x1118, 0x2079, 0x0200, 0x0010, 0x2079, 0x0100, 0x080c, 0x3aa0, - 0x00fe, 0x6864, 0xa005, 0x0110, 0x080c, 0x2233, 0x6880, 0xa005, - 0x0140, 0x8001, 0x6882, 0x1128, 0x6867, 0x0000, 0x68d4, 0xc0c5, - 0x68d6, 0x68d4, 0xd0fc, 0x01b0, 0xc0fc, 0x68d6, 0x20a9, 0x0200, - 0x6034, 0xa005, 0x0158, 0x8001, 0x6036, 0x68d4, 0xc0fd, 0x68d6, - 0x1128, 0x6010, 0xa005, 0x0110, 0x080c, 0x2233, 0xace0, 0x0010, - 0x1f04, 0x4150, 0xd7fc, 0x0138, 0x2061, 0x48c0, 0x2069, 0x4340, - 0xc7fc, 0x0804, 0x410d, 0x0459, 0x7838, 0x8001, 0x783a, 0x11a0, - 0x783c, 0x783a, 0x2061, 0x48c0, 0x2069, 0x4340, 0xc7fc, 0x680c, - 0xa005, 0x0110, 0x080c, 0x41c9, 0xd7fc, 0x1130, 0x2061, 0x68c0, - 0x2069, 0x4380, 0xc7fd, 0x0c98, 0x7810, 0xd0cc, 0x0168, 0xd0ac, - 0x1120, 0xd0a4, 0x0148, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0e04, - 0x4193, 0x080c, 0x1ffe, 0x0005, 0x2091, 0x8001, 0x0005, 0x7840, - 0x8001, 0x7842, 0x1568, 0x7844, 0x7842, 0x2091, 0x8000, 0x2061, - 0x48c0, 0x2069, 0x4340, 0xc7fc, 0x6810, 0xa005, 0x1110, 0x2001, - 0x0101, 0x8001, 0x6812, 0xd7fc, 0x0118, 0xa080, 0x89d0, 0x0010, - 0xa080, 0x88c0, 0x2040, 0x2004, 0xa065, 0x0150, 0x6024, 0xa005, - 0x0120, 0x8001, 0x6026, 0x0904, 0x4207, 0x6000, 0x2c40, 0x0ca0, - 0xd7fc, 0x1130, 0x2061, 0x68c0, 0x2069, 0x4380, 0xc7fd, 0x08e0, - 0x0005, 0x2009, 0x0000, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0540, - 0x6024, 0xa005, 0x0118, 0x8001, 0x6026, 0x0400, 0x6008, 0xc09c, - 0xd084, 0x1110, 0xd0ac, 0x01a8, 0x600a, 0x6004, 0xa06d, 0x01c0, - 0x00c6, 0x0016, 0x6010, 0x8001, 0x6012, 0x080c, 0x35ab, 0x2d00, - 0x2c68, 0x2060, 0x080c, 0x1b85, 0x080c, 0x1d30, 0x001e, 0x00ce, - 0x0038, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0010, 0xa18d, 0x0100, - 0xace0, 0x0010, 0x1f04, 0x41cd, 0xa184, 0x0001, 0x0130, 0xa18c, - 0xfffe, 0x690e, 0x080c, 0x2233, 0x0008, 0x690e, 0x0005, 0x6800, - 0xa005, 0x0120, 0x684c, 0xac06, 0x0904, 0x425f, 0x6864, 0xa005, - 0x0120, 0x6027, 0x0001, 0x0804, 0x425c, 0x2c00, 0x687e, 0x6714, - 0x6f76, 0x6017, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x60b4, - 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, - 0x6022, 0x6000, 0x2042, 0x080c, 0x1b1d, 0x6818, 0xa005, 0x0110, - 0x8001, 0x681a, 0x6808, 0xc0a4, 0x680a, 0x6810, 0x7908, 0x8109, - 0x790a, 0x8001, 0x1310, 0x080c, 0x243b, 0x6812, 0x1118, 0x7910, - 0xc1a5, 0x7912, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x080c, - 0x1d3d, 0xd7fc, 0x1118, 0x2069, 0x4340, 0x0010, 0x2069, 0x4380, - 0x6910, 0xa184, 0x0100, 0x2001, 0x0006, 0x1118, 0x697a, 0x2001, - 0x0004, 0x2708, 0x080c, 0x2228, 0x2091, 0x8001, 0x0005, 0x00d6, - 0x694c, 0x2160, 0xd7fc, 0x1118, 0x2069, 0x0200, 0x0010, 0x2069, - 0x0100, 0x080c, 0x23e1, 0x601b, 0x0006, 0x6858, 0xa084, 0x3f00, - 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, - 0x0000, 0x6033, 0x0000, 0x6830, 0xd0b4, 0x01b0, 0x684b, 0x0004, - 0x20a9, 0x0014, 0x6848, 0xd094, 0x0110, 0x1f04, 0x4282, 0x684b, - 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0110, 0x1f04, 0x428b, - 0x20a9, 0x00fa, 0x1f04, 0x4292, 0x6808, 0xa084, 0xfffd, 0x680a, - 0x681b, 0x0054, 0x00de, 0x6867, 0x0007, 0x2091, 0x8001, 0x0005, - 0x2079, 0x4300, 0x00e1, 0x0089, 0x00a9, 0x2009, 0x0002, 0x2069, - 0x4380, 0x680f, 0x0000, 0x6813, 0x0000, 0x6817, 0x0000, 0x8109, - 0x0118, 0x2069, 0x4340, 0x0ca8, 0x0005, 0x2019, 0x00a3, 0x7b3a, - 0x7b3e, 0x0005, 0x2019, 0x0033, 0x7b42, 0x7b46, 0x0005, 0x2019, - 0x32dd, 0x7b32, 0x7b36, 0x0005, 0x6950, 0xa185, 0x0000, 0x0178, - 0x00c6, 0x6ac0, 0x2264, 0x602b, 0x0000, 0x602f, 0x0000, 0x6008, - 0xc0b5, 0x600a, 0x8210, 0x8109, 0x1da8, 0x6952, 0x00ce, 0x0005, - 0x70ec, 0xd0dc, 0x1118, 0xd0d4, 0x0180, 0x0088, 0xae8e, 0x0100, - 0x0130, 0x7814, 0xc0f5, 0x7816, 0xd0d4, 0x1170, 0x0050, 0x7814, - 0xc0fd, 0x7816, 0xd0d4, 0x1140, 0x0020, 0xd0e4, 0x0138, 0x70a0, - 0x70a2, 0x7804, 0xd08c, 0x0110, 0x681f, 0x000c, 0x0005, 0xaf67 + 0x2049, 0x41ad, 0x6828, 0xa055, 0x00d6, 0x0904, 0x420e, 0x2d70, + 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3f9a, 0x273c, 0x87fb, + 0x1140, 0x0210, 0x080c, 0x252b, 0x709c, 0xa075, 0x2060, 0x0570, + 0x0c80, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0268, + 0x8a51, 0x1110, 0x080c, 0x252b, 0x8738, 0x2704, 0xa005, 0x1d90, + 0x709c, 0xa075, 0x2060, 0x01d0, 0x08e0, 0x8422, 0x8420, 0x831a, + 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, + 0x1210, 0x080c, 0x252b, 0xb284, 0x0200, 0x0118, 0x2071, 0x0050, + 0x0010, 0x2071, 0x0020, 0x00de, 0x0804, 0x4141, 0x00de, 0x012e, + 0x2000, 0x0005, 0x7008, 0x0006, 0xa084, 0x01e0, 0x000e, 0x0110, + 0xa006, 0x0005, 0xa084, 0x0003, 0xa086, 0x0003, 0x1108, 0x0005, + 0x2704, 0xac78, 0x7800, 0x701a, 0x7804, 0x701e, 0x7808, 0x7012, + 0x780c, 0x7016, 0x6004, 0xa084, 0x0008, 0x0120, 0x7810, 0x7022, + 0x7814, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, 0xc085, 0x7006, + 0x2079, 0x4500, 0x8a51, 0x01e8, 0x8738, 0x2704, 0xa005, 0x1168, + 0x609c, 0xa005, 0x01b8, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, + 0x3f9a, 0x203c, 0x87fb, 0x090c, 0x252b, 0x7008, 0x0006, 0xa084, + 0x01e0, 0x000e, 0x0110, 0xa006, 0x0028, 0xa084, 0x0003, 0xa086, + 0x0003, 0x0005, 0x2051, 0x0000, 0x0005, 0x0126, 0x0006, 0x00d6, + 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x008e, 0x7108, + 0xa184, 0x0003, 0x1128, 0x6828, 0xa005, 0x0178, 0x0804, 0x3ef3, + 0x7108, 0xd1fc, 0x0118, 0x080c, 0x4053, 0x0c88, 0x7007, 0x0010, + 0x7108, 0xd1fc, 0x0de8, 0x080c, 0x4053, 0x7008, 0xa086, 0x0008, + 0x1d30, 0x7000, 0xa005, 0x1d18, 0x7003, 0x0000, 0x2049, 0x0000, + 0x012e, 0x2000, 0x0005, 0x0126, 0x0146, 0x0136, 0x0156, 0x00c6, + 0x00d6, 0x70d0, 0xa084, 0x4c00, 0x8004, 0x2090, 0x00de, 0x2049, + 0x428b, 0xad80, 0x0011, 0x20a0, 0xb284, 0x0200, 0x0118, 0x2099, + 0x0032, 0x0010, 0x2099, 0x0031, 0x700c, 0xa084, 0x07ff, 0x682a, + 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0118, 0x8000, + 0x80ac, 0x53a5, 0x700c, 0xa084, 0x07ff, 0x0130, 0x7007, 0x0004, + 0x7004, 0xa084, 0x0004, 0x1de0, 0x00ce, 0x2049, 0x0000, 0x7003, + 0x0000, 0x015e, 0x013e, 0x014e, 0x012e, 0x2000, 0x0005, 0x2091, + 0x8000, 0x2091, 0x6000, 0x78ac, 0xa005, 0x1168, 0x7974, 0x70d0, + 0xa106, 0x1148, 0x781c, 0xa005, 0x0130, 0x781f, 0x0000, 0x0e04, + 0x42db, 0x2091, 0x4080, 0x7830, 0x8001, 0x7832, 0x1904, 0x4345, + 0x7834, 0x7832, 0x2061, 0x6ac0, 0x2069, 0x4580, 0xc7fd, 0x68cc, + 0xa005, 0x0128, 0x8001, 0x68ce, 0x1110, 0x080c, 0x44ad, 0x6800, + 0xa084, 0x000f, 0x0168, 0xa086, 0x0001, 0x0150, 0x6840, 0xa00d, + 0x0138, 0x2104, 0xa005, 0x0120, 0x8001, 0x200a, 0x0904, 0x444a, + 0x6814, 0xa005, 0x01a8, 0x8001, 0x6816, 0x1190, 0x68a3, 0x0001, + 0x00f6, 0xd7fc, 0x1118, 0x2079, 0x0200, 0x0010, 0x2079, 0x0100, + 0x080c, 0x3c0c, 0x00fe, 0x6860, 0xa005, 0x0110, 0x080c, 0x2296, + 0x687c, 0xa005, 0x0140, 0x8001, 0x687e, 0x1128, 0x6863, 0x0000, + 0x68d0, 0xc0c5, 0x68d2, 0x68d0, 0xd0fc, 0x01b0, 0xc0fc, 0x68d2, + 0x20a9, 0x0200, 0x6034, 0xa005, 0x0158, 0x8001, 0x6036, 0x68d0, + 0xc0fd, 0x68d2, 0x1128, 0x6010, 0xa005, 0x0110, 0x080c, 0x2296, + 0xace0, 0x0010, 0x1f04, 0x432a, 0xd7fc, 0x0138, 0x2061, 0x4ac0, + 0x2069, 0x4540, 0xc7fc, 0x0804, 0x42e7, 0x0459, 0x7838, 0x8001, + 0x783a, 0x11a0, 0x783c, 0x783a, 0x2061, 0x4ac0, 0x2069, 0x4540, + 0xc7fc, 0x680c, 0xa005, 0x0110, 0x080c, 0x43c1, 0xd7fc, 0x1130, + 0x2061, 0x6ac0, 0x2069, 0x4580, 0xc7fd, 0x0c98, 0x7810, 0xd0cc, + 0x0168, 0xd0ac, 0x1120, 0xd0a4, 0x0148, 0xc0ad, 0x7812, 0x2091, + 0x8001, 0x0e04, 0x436d, 0x080c, 0x2061, 0x0005, 0x2091, 0x8001, + 0x0005, 0x7840, 0x8001, 0x7842, 0x1904, 0x43c0, 0x7844, 0x7842, + 0x2069, 0x4540, 0xc7fc, 0x2079, 0x0200, 0x68d4, 0xa005, 0x0138, + 0x7de0, 0xa504, 0x1120, 0x68d6, 0x68d0, 0xc0bc, 0x68d2, 0x2079, + 0x4500, 0x6810, 0xa005, 0x1110, 0x2001, 0x0101, 0x8001, 0x6812, + 0xd7fc, 0x0118, 0xa080, 0x8bd0, 0x0010, 0xa080, 0x8ac0, 0x2040, + 0x2004, 0xa065, 0x01e0, 0x6024, 0xa005, 0x01b0, 0x8001, 0x6026, + 0x1198, 0x6800, 0xa005, 0x0130, 0x6848, 0xac06, 0x1118, 0x080c, + 0x444a, 0x0068, 0x6860, 0xa005, 0x0118, 0x6027, 0x0001, 0x0020, + 0x080c, 0x4402, 0x2804, 0x0c28, 0x6000, 0x2c40, 0x0c10, 0xd7fc, + 0x1138, 0x2069, 0x4580, 0xc7fd, 0x2079, 0x0100, 0x0804, 0x437d, + 0x0005, 0x2009, 0x0000, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0558, + 0x6024, 0xa005, 0x0118, 0x8001, 0x6026, 0x0418, 0x6008, 0xc09c, + 0xd084, 0x1110, 0xd0ac, 0x01c0, 0x600a, 0x6004, 0xa005, 0x01d8, + 0x00d6, 0x00c6, 0x0016, 0x2068, 0x6010, 0x8001, 0x6012, 0x080c, + 0x376c, 0x2d00, 0x2c68, 0x2060, 0x080c, 0x1bc7, 0x080c, 0x1d7c, + 0x001e, 0x00ce, 0x00de, 0x0038, 0xc0bd, 0x600a, 0xa18d, 0x0001, + 0x0010, 0xa18d, 0x0100, 0xace0, 0x0010, 0x1f04, 0x43c5, 0xa184, + 0x0001, 0x0130, 0xa18c, 0xfffe, 0x690e, 0x080c, 0x2296, 0x0008, + 0x690e, 0x0005, 0x2c00, 0x687a, 0x6714, 0x6f72, 0x6017, 0x0000, + 0x602b, 0x0000, 0x601b, 0x0006, 0x60b4, 0xa084, 0x5f00, 0x601e, + 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, + 0x080c, 0x1b5f, 0x6818, 0xa005, 0x0110, 0x8001, 0x681a, 0x6808, + 0xc0a4, 0x680a, 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x1310, + 0x080c, 0x252b, 0x6812, 0x1118, 0x7910, 0xc1a5, 0x7912, 0x602f, + 0x0000, 0x6033, 0x0000, 0x2c68, 0x080c, 0x1d89, 0xd7fc, 0x1118, + 0x2069, 0x4540, 0x0010, 0x2069, 0x4580, 0x6910, 0xa184, 0x0100, + 0x2001, 0x0006, 0x1118, 0x6976, 0x2001, 0x0004, 0x2708, 0x080c, + 0x228b, 0x0005, 0x00d6, 0x6948, 0x2160, 0xd7fc, 0x1118, 0x2069, + 0x0200, 0x0010, 0x2069, 0x0100, 0x080c, 0x2446, 0x601b, 0x0006, + 0x6858, 0xa084, 0x5f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, + 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, 0x6808, 0xa084, + 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x01b0, 0x684b, 0x0004, 0x20a9, + 0x0014, 0x6848, 0xd094, 0x0110, 0x1f04, 0x4471, 0x684b, 0x0009, + 0x20a9, 0x0014, 0x6848, 0xd084, 0x0110, 0x1f04, 0x447a, 0x20a9, + 0x00fa, 0x1f04, 0x4481, 0x681b, 0x0054, 0x00de, 0x6863, 0x0007, + 0x0005, 0x2079, 0x4500, 0x00e1, 0x0089, 0x00a9, 0x2009, 0x0002, + 0x2069, 0x4580, 0x680f, 0x0000, 0x6813, 0x0000, 0x6817, 0x0000, + 0x8109, 0x0118, 0x2069, 0x4540, 0x0ca8, 0x0005, 0x2019, 0x00a3, + 0x7b3a, 0x7b3e, 0x0005, 0x2019, 0x0033, 0x7b42, 0x7b46, 0x0005, + 0x2019, 0x32dd, 0x7b32, 0x7b36, 0x0005, 0x694c, 0xa185, 0x0000, + 0x0158, 0x00c6, 0x6abc, 0x2264, 0x6008, 0xc0b5, 0x600a, 0x8210, + 0x8109, 0x1dc8, 0x694e, 0x00ce, 0x0005, 0x70ec, 0xd0dc, 0x1118, + 0xd0d4, 0x0190, 0x0098, 0xae8e, 0x0100, 0x0138, 0x7814, 0xc0f5, + 0xc0c5, 0x7816, 0xd0d4, 0x11a8, 0x0088, 0x7814, 0xc0fd, 0xc0c5, + 0x7816, 0xd0d4, 0x1170, 0x0050, 0xd0e4, 0x0168, 0x70e4, 0xa084, + 0x01ff, 0xa086, 0x01ff, 0x0d38, 0x70a0, 0x70a2, 0x7804, 0xd08c, + 0x0110, 0x681f, 0x000c, 0x0005, 0x69ca }; #ifdef UNIQUE_FW_NAME -unsigned short fw12160i_length01 = 0x32f8; +unsigned short fw12160i_length01 = 0x34e5; #else -unsigned short risc_code_length01 = 0x32f8; +unsigned short risc_code_length01 = 0x34e5; #endif diff -urN linux-2.4.0-test9/drivers/scsi/ql1280_fw.h linux-2.4.0-test9-lia/drivers/scsi/ql1280_fw.h --- linux-2.4.0-test9/drivers/scsi/ql1280_fw.h Mon Feb 7 19:45:28 2000 +++ linux-2.4.0-test9-lia/drivers/scsi/ql1280_fw.h Fri Sep 8 16:30:57 2000 @@ -1,59 +1,117 @@ /************************************************************************ + * * + * --- ISP1240/1080/1280 Initiator Firmware --- * + * 32 LUN Support * + * * + ************************************************************************ - * Copyright (C) 1999,2000 Qlogic, Corporation. + + * * + + * Copyright (C) 1999,2000 Qlogic, Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted provided + * that the following conditions are met: + * 1. Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products + + * 2. Redistribution in binary form must reproduce the above copyright + + * notice, this list of conditions and the following disclaimer in the + + * documentation and/or other materials provided with the distribution. + + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * * + ************************************************************************ + */ /* - * Firmware Version 8.09.00 (18:29 Apr 16, 1999) + * Firmware Version 8.13.08 (10:53 Jan 14, 2000) */ -unsigned short fw1280ei_version = 8*1024+9; +#ifdef UNIQUE_FW_NAME +unsigned short fw1280ei_version = 8*1024+13; +#else +unsigned short risc_code_version = 8*1024+13; +#endif + +#ifdef UNIQUE_FW_NAME +unsigned char fw1280ei_version_str[] = {8,13,8}; +#else +unsigned char firmware_version[] = {8,13,8}; +#endif -unsigned char fw1280ei_version_str[] = {8,9,0}; +#ifdef UNIQUE_FW_NAME +#define fw1280ei_VERSION_STRING "8.13.8" +#else +#define FW_VERSION_STRING "8.13.8" +#endif +#ifdef UNIQUE_FW_NAME unsigned short fw1280ei_addr01 = 0x1000 ; +#else +unsigned short risc_code_addr01 = 0x1000 ; +#endif +#ifdef UNIQUE_FW_NAME unsigned short fw1280ei_code01[] = { - 0x0078, 0x1041, 0x0000, 0x39e3, 0x0000, 0x2043, 0x4f50, 0x5952, +#else +unsigned short risc_code01[] = { +#endif + 0x0078, 0x1041, 0x0000, 0x3c71, 0x0000, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2031, 0x3939, 0x312c, 0x3139, 0x3932, 0x2c31, 0x3939, 0x332c, 0x3139, 0x3934, 0x2051, 0x4c4f, 0x4749, 0x4320, 0x434f, 0x5250, 0x4f52, 0x4154, 0x494f, 0x4e00, 0x2049, 0x5350, 0x3132, 0x3430, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, - 0x6572, 0x7369, 0x6f6e, 0x2030, 0x382e, 0x3039, 0x2020, 0x2043, + 0x6572, 0x7369, 0x6f6e, 0x2030, 0x382e, 0x3133, 0x2020, 0x2043, 0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050, 0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020, - 0x2400, 0x20c9, 0x93ff, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1080, + 0x2400, 0x20c9, 0x96ff, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x1054, 0x2071, 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, - 0x2089, 0x136a, 0x0078, 0x106d, 0x2001, 0x04fc, 0x2004, 0xa086, + 0x2089, 0x1374, 0x0078, 0x106d, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1280, 0x00c0, 0x1069, 0x2071, 0x0200, 0x70a0, 0x70a2, 0x2071, - 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13ea, 0x0078, - 0x106d, 0x20c1, 0x0020, 0x2089, 0x1312, 0x2071, 0x0010, 0x70c3, + 0x0100, 0x70a0, 0x70a2, 0x20c1, 0x0010, 0x2089, 0x13f8, 0x0078, + 0x106d, 0x20c1, 0x0020, 0x2089, 0x131c, 0x2071, 0x0010, 0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, 0x0008, 0x2001, 0x04fe, 0x70d6, 0x20c1, 0x0021, 0x2019, 0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff, 0x2d64, @@ -61,1838 +119,1924 @@ 0xa286, 0xa5a5, 0x0040, 0x10a4, 0xa386, 0x000f, 0x0040, 0x10a0, 0x2c6a, 0x2a5a, 0x20c1, 0x0020, 0x2019, 0x000f, 0x0078, 0x1080, 0x2c6a, 0x2a5a, 0x0078, 0x10a2, 0x2c6a, 0x2a5a, 0x2130, 0x2128, - 0xa1a2, 0x4a00, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, - 0xa192, 0x9400, 0x2009, 0x0000, 0x2001, 0x0032, 0x1078, 0x2078, - 0x2218, 0x2079, 0x4a00, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, - 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10bf, 0x2001, 0x04fc, 0x2004, - 0xa086, 0x1080, 0x00c0, 0x10db, 0x2071, 0x0100, 0x0d7e, 0x2069, - 0x4a40, 0x1078, 0x49ae, 0x0d7f, 0x7810, 0xc0ed, 0x7812, 0x781b, - 0x0064, 0x0078, 0x1100, 0x2001, 0x04fc, 0x2004, 0xa086, 0x1280, - 0x00c0, 0x10fb, 0x7814, 0xc0ed, 0xc0d5, 0x7816, 0x781b, 0x0064, - 0x2071, 0x0200, 0x0d7e, 0x2069, 0x4a40, 0x1078, 0x49ae, 0x2069, - 0x4a80, 0x2071, 0x0100, 0x1078, 0x49ae, 0x7814, 0xc0d4, 0x7816, - 0x0d7f, 0x0078, 0x1100, 0x7814, 0xc0e5, 0x7816, 0x781b, 0x003c, - 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800, 0xc08d, 0x7802, - 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002, 0x7827, 0x0002, - 0x2009, 0x0002, 0x2069, 0x4a40, 0x681b, 0x0003, 0x6823, 0x0007, - 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, 0x6837, 0x0000, - 0x683b, 0x0006, 0x6833, 0x0008, 0x683f, 0x0000, 0x8109, 0x0040, - 0x1154, 0x68d3, 0x000a, 0x68c3, 0x4ac0, 0x2079, 0x4a00, 0x7814, - 0xd0e4, 0x00c0, 0x113a, 0xd0ec, 0x00c0, 0x113e, 0x68d7, 0x7329, - 0x0078, 0x1140, 0x68d7, 0x730d, 0x0078, 0x1140, 0x68d7, 0x7329, - 0x68c7, 0x4fc0, 0x68cb, 0x4ec0, 0x68cf, 0x8fc0, 0x68ab, 0x9244, - 0x68af, 0x9249, 0x68b3, 0x9244, 0x68b7, 0x9244, 0x68a7, 0x0001, - 0x2069, 0x4a80, 0x0078, 0x1114, 0x68d3, 0x000a, 0x68c3, 0x4cc0, - 0x7814, 0xd0e4, 0x00c0, 0x1160, 0x68d7, 0x7439, 0x0078, 0x1162, - 0x68d7, 0x7419, 0x68c7, 0x6fc0, 0x68cb, 0x4f40, 0x68cf, 0x90d0, - 0x68ab, 0x9249, 0x68af, 0x924e, 0x68b3, 0x9249, 0x68b7, 0x9249, - 0x68a7, 0x0001, 0x7810, 0xd0ec, 0x00c0, 0x11b8, 0x7814, 0xd0e4, - 0x00c0, 0x11aa, 0x0e7e, 0x2069, 0x4ec0, 0x2071, 0x0200, 0x70ec, - 0xd0e4, 0x00c0, 0x118b, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078, - 0x2007, 0x0078, 0x1191, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1078, - 0x2007, 0x2069, 0x4f40, 0x2071, 0x0100, 0x70ec, 0xd0e4, 0x00c0, - 0x11a1, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078, 0x2007, 0x0078, - 0x11a7, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1078, 0x2007, 0x0e7f, - 0x0078, 0x11d1, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x2069, 0x4ec0, - 0x1078, 0x2007, 0x2069, 0x4f40, 0x1078, 0x2007, 0x0078, 0x11d1, - 0x2069, 0x4ec0, 0x0e7e, 0x2071, 0x0100, 0x70ec, 0xd0e4, 0x00c0, - 0x11ca, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078, 0x2007, 0x0e7f, - 0x0078, 0x11d1, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1078, 0x2007, - 0x0e7f, 0x2011, 0x0002, 0x2069, 0x4fc0, 0x2009, 0x0002, 0x20a9, - 0x0100, 0x683f, 0x0000, 0x680b, 0x0040, 0x7bc8, 0xa386, 0xfeff, - 0x00c0, 0x11e8, 0x6817, 0x0100, 0x681f, 0x0064, 0x0078, 0x11ec, - 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, 0x00f0, 0x11d9, - 0x8109, 0x00c0, 0x11d7, 0x8211, 0x0040, 0x11fa, 0x2069, 0x6fc0, - 0x0078, 0x11d5, 0x1078, 0x2611, 0x1078, 0x441d, 0x1078, 0x1df2, - 0x1078, 0x4957, 0x2091, 0x2100, 0x2079, 0x4a00, 0x7810, 0xd0ec, - 0x0040, 0x120e, 0x2071, 0x0020, 0x0078, 0x1210, 0x2071, 0x0050, - 0x2091, 0x2200, 0x2079, 0x4a00, 0x2071, 0x0020, 0x2091, 0x2300, - 0x2079, 0x4a00, 0x7810, 0xd0ec, 0x0040, 0x1222, 0x2079, 0x0100, - 0x0078, 0x1224, 0x2079, 0x0200, 0x2071, 0x4a40, 0x2091, 0x2400, - 0x2079, 0x0100, 0x2071, 0x4a80, 0x2091, 0x2000, 0x2079, 0x4a00, - 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090, 0x2071, 0x0010, - 0x70c3, 0x0000, 0x0090, 0x1243, 0x70c0, 0xa086, 0x0002, 0x00c0, - 0x1243, 0x1078, 0x159d, 0x2039, 0x0000, 0x7810, 0xd0ec, 0x00c0, - 0x12c5, 0x1078, 0x1472, 0x78ac, 0xa005, 0x00c0, 0x1261, 0x0068, - 0x1257, 0x786c, 0xa065, 0x0040, 0x1257, 0x1078, 0x2368, 0x1078, - 0x209f, 0x0068, 0x126e, 0x786c, 0xa065, 0x0040, 0x1261, 0x1078, - 0x2368, 0x0068, 0x126e, 0x2009, 0x4a47, 0x2011, 0x4a87, 0x2104, - 0x220c, 0xa105, 0x0040, 0x126e, 0x1078, 0x1f1e, 0x2071, 0x4a40, - 0x70a4, 0xa005, 0x0040, 0x1293, 0x7450, 0xa485, 0x0000, 0x0040, - 0x1293, 0x2079, 0x0200, 0x2091, 0x8000, 0x72d4, 0xa28c, 0x303d, - 0x2190, 0x1078, 0x2a9c, 0x2091, 0x8000, 0x2091, 0x303d, 0x0068, - 0x1293, 0x2079, 0x4a00, 0x786c, 0xa065, 0x0040, 0x1293, 0x2071, - 0x0010, 0x1078, 0x2368, 0x00e0, 0x129b, 0x2079, 0x4a00, 0x2071, - 0x0010, 0x1078, 0x4765, 0x2071, 0x4a80, 0x70a4, 0xa005, 0x0040, - 0x12b3, 0x7050, 0xa025, 0x0040, 0x12b3, 0x2079, 0x0100, 0x2091, - 0x8000, 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, 0x2a9c, 0x2091, - 0x8000, 0x2091, 0x303d, 0x2079, 0x4a00, 0x2071, 0x0010, 0x0068, - 0x12bf, 0x786c, 0xa065, 0x0040, 0x12bf, 0x1078, 0x2368, 0x00e0, - 0x1249, 0x1078, 0x4765, 0x0078, 0x1249, 0x1078, 0x1472, 0x78ac, - 0xa005, 0x00c0, 0x12dd, 0x0068, 0x12d3, 0x786c, 0xa065, 0x0040, - 0x12d3, 0x1078, 0x2368, 0x1078, 0x209f, 0x0068, 0x12e7, 0x786c, - 0xa065, 0x0040, 0x12dd, 0x1078, 0x2368, 0x0068, 0x12e7, 0x2009, - 0x4a47, 0x2104, 0xa005, 0x0040, 0x12e7, 0x1078, 0x1f1e, 0x2071, - 0x4a40, 0x70a4, 0xa005, 0x0040, 0x1302, 0x7450, 0xa485, 0x0000, - 0x0040, 0x1302, 0x2079, 0x0100, 0x2091, 0x8000, 0x72d4, 0xa28c, - 0x303d, 0x2190, 0x1078, 0x2a9c, 0x2091, 0x8000, 0x2091, 0x303d, - 0x2079, 0x4a00, 0x2071, 0x0010, 0x0068, 0x130c, 0x786c, 0xa065, - 0x0040, 0x130c, 0x1078, 0x2368, 0x00e0, 0x12c5, 0x1078, 0x4765, - 0x0078, 0x12c5, 0x1332, 0x1332, 0x1334, 0x1334, 0x1341, 0x1341, - 0x1341, 0x1341, 0x134c, 0x134c, 0x1359, 0x1359, 0x1341, 0x1341, - 0x1341, 0x1341, 0x1332, 0x1332, 0x1334, 0x1334, 0x1341, 0x1341, - 0x1341, 0x1341, 0x134c, 0x134c, 0x1359, 0x1359, 0x1341, 0x1341, - 0x1341, 0x1341, 0x0078, 0x1332, 0x007e, 0x107e, 0x127e, 0x2091, - 0x2400, 0x1078, 0x290b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, - 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13ba, 0x127f, 0x107f, - 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, - 0x2300, 0x1078, 0x290b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, - 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x290b, - 0x2091, 0x2400, 0x1078, 0x290b, 0x127f, 0x107f, 0x007f, 0x2091, - 0x8001, 0x007c, 0x138a, 0x138a, 0x138c, 0x138c, 0x1399, 0x1399, - 0x1399, 0x1399, 0x13a4, 0x13a4, 0x138c, 0x138c, 0x1399, 0x1399, - 0x1399, 0x1399, 0x13a5, 0x13a5, 0x13a5, 0x13a5, 0x13a5, 0x13a5, - 0x13a5, 0x13a5, 0x13a5, 0x13a5, 0x13a5, 0x13a5, 0x13a5, 0x13a5, - 0x13a5, 0x13a5, 0x0078, 0x138a, 0x007e, 0x107e, 0x127e, 0x2091, - 0x2300, 0x1078, 0x290b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, - 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c7, 0x127f, 0x107f, - 0x007f, 0x2091, 0x8001, 0x007c, 0x007c, 0x107e, 0x127e, 0x0d7e, - 0x0e7e, 0x0f7e, 0x007e, 0x2071, 0x0100, 0x2069, 0x4a40, 0x2079, - 0x4a00, 0x1078, 0x49ae, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, - 0x107f, 0x007c, 0x3c00, 0xa084, 0x0007, 0x0079, 0x13bf, 0x13d0, - 0x13d0, 0x13d2, 0x13d2, 0x13d7, 0x13d7, 0x13dc, 0x13dc, 0x3c00, - 0xa084, 0x0003, 0x0079, 0x13cc, 0x13d0, 0x13d0, 0x13e5, 0x13e5, - 0x1078, 0x28ec, 0x2091, 0x2200, 0x1078, 0x44b7, 0x007c, 0x2091, - 0x2100, 0x1078, 0x44b7, 0x007c, 0x2091, 0x2100, 0x1078, 0x44b7, - 0x2091, 0x2200, 0x1078, 0x44b7, 0x007c, 0x2091, 0x2100, 0x1078, - 0x44b7, 0x007c, 0x140a, 0x140a, 0x140c, 0x140c, 0x1419, 0x1419, - 0x1419, 0x1419, 0x1424, 0x1424, 0x1431, 0x1431, 0x1419, 0x1419, - 0x1419, 0x1419, 0x1442, 0x1442, 0x1442, 0x1442, 0x1442, 0x1442, - 0x1442, 0x1442, 0x1442, 0x1442, 0x1442, 0x1442, 0x1442, 0x1442, - 0x1442, 0x1442, 0x0078, 0x140a, 0x007e, 0x107e, 0x127e, 0x2091, - 0x2400, 0x1078, 0x290b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, - 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13ba, 0x127f, 0x107f, - 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, - 0x2300, 0x1078, 0x290b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, - 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x290b, - 0x2091, 0x2400, 0x1078, 0x290b, 0x127f, 0x107f, 0x007f, 0x2091, - 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, - 0x2079, 0x4a00, 0x2071, 0x0200, 0x2069, 0x4a40, 0x3d00, 0xd08c, - 0x00c0, 0x1456, 0x2069, 0x4a80, 0x2071, 0x0100, 0x1078, 0x49ae, - 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007f, 0x007c, 0x7008, - 0x800b, 0x00c8, 0x146d, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, - 0x146e, 0xd09c, 0x0040, 0x146d, 0x087a, 0x097a, 0x70c3, 0x4002, - 0x0078, 0x15a0, 0x0068, 0x14f7, 0x2061, 0x0000, 0x6018, 0xd084, - 0x00c0, 0x14f7, 0x7828, 0xa005, 0x00c0, 0x1482, 0x0010, 0x14f8, - 0x0078, 0x14f7, 0x7910, 0xd1f4, 0x0040, 0x148a, 0x2001, 0x4007, - 0x0078, 0x159f, 0x7914, 0xd1ec, 0x0040, 0x14a5, 0xd0fc, 0x0040, - 0x149b, 0x007e, 0x1078, 0x1d82, 0x007f, 0x0040, 0x14a5, 0x2001, - 0x4007, 0x0078, 0x159f, 0x007e, 0x1078, 0x1d72, 0x007f, 0x0040, - 0x14a5, 0x2001, 0x4007, 0x0078, 0x159f, 0x7910, 0xd0fc, 0x00c0, - 0x14af, 0x2061, 0x4a40, 0xc19c, 0xc7fc, 0x0078, 0x14b3, 0x2061, - 0x4a80, 0xc19d, 0xc7fd, 0x6064, 0xa005, 0x00c0, 0x14f7, 0x7912, - 0x6083, 0x0000, 0x7828, 0xc0fc, 0xa086, 0x0018, 0x00c0, 0x14c4, - 0x0c7e, 0x1078, 0x1b13, 0x0c7f, 0x782b, 0x0000, 0x607c, 0xa065, - 0x0040, 0x14dd, 0x0c7e, 0x609c, 0x1078, 0x1e5d, 0x0c7f, 0x609f, - 0x0000, 0x1078, 0x1c3f, 0x2009, 0x0018, 0x6087, 0x0103, 0x1078, - 0x1d92, 0x00c0, 0x14f1, 0x1078, 0x1de4, 0x7810, 0xd09c, 0x00c0, - 0x14e5, 0x2061, 0x4a40, 0x0078, 0x14e9, 0x2061, 0x4a80, 0xc09c, - 0x7812, 0x607f, 0x0000, 0x60d4, 0xd0dc, 0x0040, 0x14f5, 0xc0dc, - 0x60d6, 0x2001, 0x4005, 0x0078, 0x159f, 0x0078, 0x159d, 0x007c, - 0x7810, 0xd0f4, 0x0040, 0x1500, 0x2001, 0x4007, 0x0078, 0x159f, - 0xa006, 0x70c2, 0x70c6, 0x70ca, 0x70ce, 0x70da, 0x70c0, 0xa08a, - 0x0040, 0x00c8, 0x150d, 0x0079, 0x1514, 0x2100, 0xa08a, 0x0040, - 0x00c8, 0x15ab, 0x0079, 0x1554, 0x159d, 0x15f3, 0x15bc, 0x162b, - 0x1663, 0x1663, 0x15b3, 0x1c57, 0x166e, 0x15ab, 0x15c0, 0x15c2, - 0x15c4, 0x15c6, 0x1c5c, 0x15ab, 0x167c, 0x16d4, 0x1b35, 0x1c51, - 0x15c8, 0x19a7, 0x19e9, 0x1a1f, 0x1a6b, 0x1962, 0x196f, 0x1983, - 0x1996, 0x17a4, 0x1cdc, 0x1706, 0x1713, 0x171f, 0x172b, 0x1741, - 0x174d, 0x1750, 0x175c, 0x1768, 0x1770, 0x178c, 0x1798, 0x15ab, - 0x15ab, 0x15ab, 0x15ab, 0x17b1, 0x17c3, 0x17df, 0x1815, 0x183d, - 0x184d, 0x1850, 0x1881, 0x18b2, 0x18c4, 0x1931, 0x1941, 0x1d32, - 0x15ab, 0x15ab, 0x15ab, 0x1951, 0x15ab, 0x15ab, 0x15ab, 0x15ab, - 0x15ab, 0x1c81, 0x1c87, 0x15ab, 0x15ab, 0x15ab, 0x1c8b, 0x1cd8, - 0x15ab, 0x15ab, 0x1ce8, 0x1cf7, 0x15ed, 0x165d, 0x1676, 0x16ce, - 0x1b2f, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x1d39, 0x1c73, 0x1c7d, - 0x15ab, 0x15ab, 0x1d02, 0x1d1b, 0x15ab, 0x15ab, 0x15ab, 0x15ab, - 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, - 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, - 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x15ab, - 0x15ab, 0x15ab, 0x15ab, 0x15ab, 0x72ca, 0x71c6, 0x2001, 0x4006, - 0x0078, 0x159f, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, - 0x0068, 0x15a0, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, - 0x2091, 0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, 0x15a0, 0x70c3, - 0x4006, 0x0078, 0x15a0, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, - 0x0005, 0x53a3, 0x0078, 0x159d, 0x70c4, 0x70c3, 0x0004, 0x007a, - 0x0078, 0x159d, 0x0078, 0x159d, 0x0078, 0x159d, 0x0078, 0x159d, - 0x2091, 0x8000, 0x70c3, 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, - 0x70cf, 0x2020, 0x70d3, 0x0008, 0x2001, 0x0009, 0x70d6, 0x2079, - 0x0000, 0x781b, 0x0001, 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, - 0x041a, 0x2051, 0x0445, 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, - 0x5000, 0x2091, 0x4080, 0x0078, 0x0418, 0x75d8, 0x74dc, 0x75da, - 0x74de, 0x0078, 0x15f6, 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, - 0x73cc, 0x70c4, 0x20a0, 0x2099, 0x0030, 0x7003, 0x0001, 0x7007, - 0x0006, 0x731a, 0x721e, 0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, - 0x0040, 0x159d, 0xa182, 0x0040, 0x00c8, 0x1610, 0x2120, 0xa006, - 0x2008, 0x8403, 0x7012, 0x7007, 0x0004, 0x7007, 0x0001, 0x7008, - 0xd0fc, 0x0040, 0x1617, 0x7007, 0x0002, 0xa084, 0x01e0, 0x0040, - 0x1625, 0x70c3, 0x4002, 0x0078, 0x15a0, 0x24a8, 0x53a5, 0x0078, - 0x1607, 0x0078, 0x159d, 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, - 0x73cc, 0x70c4, 0x2098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x7007, - 0x0006, 0x731a, 0x721e, 0x7422, 0x7526, 0x2021, 0x0040, 0x7007, - 0x0006, 0x81ff, 0x0040, 0x159d, 0xa182, 0x0040, 0x00c8, 0x164a, - 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007, - 0x0001, 0x7008, 0xd0fc, 0x0040, 0x1651, 0xa084, 0x01e0, 0x0040, - 0x163f, 0x70c3, 0x4002, 0x0078, 0x15a0, 0x75d8, 0x74dc, 0x75da, - 0x74de, 0x0078, 0x162e, 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, - 0x00c0, 0x166b, 0x200a, 0x72ca, 0x0078, 0x159c, 0x70c7, 0x0008, - 0x70cb, 0x0009, 0x70cf, 0x0000, 0x0078, 0x159d, 0x75d8, 0x76dc, - 0x75da, 0x76de, 0x0078, 0x167f, 0x2029, 0x0000, 0x2530, 0x70c4, - 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, - 0x0040, 0x16c9, 0x8001, 0x7872, 0xa084, 0xfc00, 0x0040, 0x1697, - 0x78ac, 0xc085, 0x78ae, 0x2001, 0x4005, 0x0078, 0x159f, 0x7b7e, - 0x7a7a, 0x7e86, 0x7d82, 0x7c76, 0xa48c, 0xff00, 0x0040, 0x16af, - 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f, 0xa118, 0xa291, - 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, 0x0078, 0x16b9, 0x8407, - 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, - 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605, 0x0040, 0x16c3, - 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc, 0x78ae, 0x0078, - 0x16cc, 0x78ac, 0xc085, 0x78ae, 0x0078, 0x159d, 0x75d8, 0x76dc, - 0x75da, 0x76de, 0x0078, 0x16d7, 0x2029, 0x0000, 0x2530, 0x70c4, - 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, 0x74d6, 0xa005, - 0x0040, 0x1701, 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040, 0x16ef, - 0x78ac, 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0078, 0x159f, 0x7a9a, - 0x7b9e, 0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0040, 0x16fa, 0x7a10, - 0xc2c5, 0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0078, - 0x1704, 0x78ac, 0xc0c5, 0x78ae, 0x0078, 0x159d, 0x2009, 0x0000, - 0x786c, 0xa065, 0x0040, 0x1710, 0x8108, 0x6000, 0x0078, 0x1709, - 0x7ac4, 0x0078, 0x159b, 0x2009, 0x4a48, 0x210c, 0x7810, 0xd0ec, - 0x00c0, 0x159c, 0x2011, 0x4a88, 0x2214, 0x0078, 0x159b, 0x2009, - 0x4a49, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x159c, 0x2011, 0x4a89, - 0x2214, 0x0078, 0x159b, 0x2061, 0x4a40, 0x6128, 0x622c, 0x8214, - 0x8214, 0x8214, 0x7810, 0xd0ec, 0x00c0, 0x173f, 0x2061, 0x4a80, - 0x6328, 0x73da, 0x632c, 0x831c, 0x831c, 0x831c, 0x73de, 0x0078, - 0x159b, 0x2009, 0x4a4c, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x159c, - 0x2011, 0x4a8c, 0x2214, 0x0078, 0x159b, 0x7918, 0x0078, 0x159c, - 0x2009, 0x4a4d, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x159c, 0x2011, - 0x4a8d, 0x2214, 0x0078, 0x159b, 0x2009, 0x4a4e, 0x210c, 0x7810, - 0xd0ec, 0x00c0, 0x159c, 0x2011, 0x4a8e, 0x2214, 0x0078, 0x159b, - 0x7920, 0x7810, 0xd0ec, 0x00c0, 0x159c, 0x7a24, 0x0078, 0x159b, - 0x71c4, 0xd1fc, 0x00c0, 0x1778, 0x2011, 0x4ec0, 0x0078, 0x177a, - 0x2011, 0x4f40, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, - 0xa268, 0x6a00, 0x6804, 0xd09c, 0x0040, 0x1789, 0x6b08, 0x0078, - 0x178a, 0x6b0c, 0x0078, 0x159a, 0x77c4, 0x1078, 0x1e02, 0x2091, - 0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x159a, - 0x2061, 0x4a40, 0x6118, 0x7810, 0xd0ec, 0x00c0, 0x159c, 0x2061, - 0x4a80, 0x6218, 0x0078, 0x159b, 0x77c4, 0x1078, 0x1e02, 0x2091, - 0x8000, 0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, 0x0078, - 0x159a, 0x71c4, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x00c8, - 0x1595, 0x1078, 0x2729, 0xa384, 0x4000, 0x0040, 0x17c1, 0xa295, - 0x0020, 0x0078, 0x159a, 0x71c4, 0x2100, 0xc0bc, 0xa082, 0x0010, - 0x00c8, 0x1595, 0xd1bc, 0x00c0, 0x17d2, 0x2011, 0x4a48, 0x2204, - 0x0078, 0x17d6, 0x2011, 0x4a88, 0x2204, 0xc0bd, 0x007e, 0x2100, - 0xc0bc, 0x2012, 0x1078, 0x2686, 0x017f, 0x0078, 0x159c, 0x71c4, - 0x2021, 0x4a49, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0078, 0x17ee, - 0x71c8, 0x2021, 0x4a89, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x180d, - 0x20a9, 0x0008, 0x2204, 0xa106, 0x0040, 0x17fd, 0x8210, 0x00f0, - 0x17f2, 0x71c4, 0x72c8, 0x0078, 0x1594, 0xa292, 0x180d, 0x027e, - 0x2122, 0x017f, 0x1078, 0x26a7, 0x7810, 0xd0ec, 0x00c0, 0x180b, - 0xd3fc, 0x0040, 0x17e8, 0x0078, 0x159d, 0x03e8, 0x00fa, 0x01f4, - 0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x4a40, 0x6128, - 0x622c, 0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, - 0x8003, 0x8003, 0x602e, 0x7810, 0xd0ec, 0x00c0, 0x183b, 0x027e, - 0x017e, 0x2061, 0x4a80, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, - 0x70d8, 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da, - 0x72de, 0x017f, 0x027f, 0x0078, 0x159b, 0x2061, 0x4a40, 0x6130, - 0x70c4, 0x6032, 0x7810, 0xd0ec, 0x00c0, 0x159c, 0x2061, 0x4a80, - 0x6230, 0x70c8, 0x6032, 0x0078, 0x159b, 0x7918, 0x0078, 0x159c, - 0x71c4, 0xa184, 0xffcf, 0x0040, 0x185c, 0x7810, 0xd0ec, 0x00c0, - 0x1595, 0x72c8, 0x0078, 0x1594, 0x2011, 0x4a4d, 0x2204, 0x2112, - 0x007e, 0x2019, 0x0000, 0x1078, 0x270e, 0x7810, 0xd0ec, 0x0040, - 0x186c, 0x017f, 0x0078, 0x159c, 0x71c8, 0xa184, 0xffcf, 0x0040, - 0x1875, 0x2110, 0x71c4, 0x0078, 0x1594, 0x2011, 0x4a8d, 0x2204, - 0x2112, 0x007e, 0xc3fd, 0x1078, 0x270e, 0x027f, 0x017f, 0x0078, - 0x159b, 0x71c4, 0xa182, 0x0010, 0x0048, 0x188d, 0x7810, 0xd0ec, - 0x00c0, 0x1595, 0x72c8, 0x0078, 0x1594, 0x2011, 0x4a4e, 0x2204, - 0x007e, 0x2112, 0x2019, 0x0000, 0x1078, 0x26ec, 0x7810, 0xd0ec, - 0x0040, 0x189d, 0x017f, 0x0078, 0x159c, 0x71c8, 0xa182, 0x0010, - 0x0048, 0x18a6, 0x2110, 0x71c4, 0x0078, 0x1594, 0x2011, 0x4a8e, - 0x2204, 0x007e, 0x2112, 0xc3fd, 0x1078, 0x26ec, 0x027f, 0x017f, - 0x0078, 0x159b, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x1594, - 0xa284, 0xfffd, 0x00c0, 0x1594, 0x2100, 0x7920, 0x7822, 0x2200, - 0x7a24, 0x7826, 0x0078, 0x159b, 0x71c4, 0xd1fc, 0x00c0, 0x18cc, - 0x2011, 0x4ec0, 0x0078, 0x18ce, 0x2011, 0x4f40, 0x8107, 0xa084, - 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, 0x2019, 0x0000, 0x72c8, - 0xa284, 0x0080, 0x0040, 0x18e2, 0x6c14, 0x84ff, 0x00c0, 0x18e2, - 0x6817, 0x0040, 0xa284, 0x0040, 0x0040, 0x18ec, 0x6c10, 0x84ff, - 0x00c0, 0x18ec, 0x6813, 0x0001, 0x6800, 0x007e, 0xa226, 0x0040, - 0x1909, 0x6a02, 0xd4ec, 0x0040, 0x18f6, 0xc3a5, 0xd4e4, 0x0040, - 0x18fa, 0xc39d, 0xd4f4, 0x0040, 0x1909, 0x810f, 0xd2f4, 0x0040, - 0x1905, 0x1078, 0x276b, 0x0078, 0x1909, 0x1078, 0x2749, 0x0078, - 0x1909, 0x72cc, 0x6808, 0xa206, 0x0040, 0x1929, 0xa2a4, 0x00ff, - 0x7814, 0xd0e4, 0x00c0, 0x191c, 0xa482, 0x0028, 0x0048, 0x1926, - 0x0040, 0x1926, 0x0078, 0x1920, 0xa482, 0x0043, 0x0048, 0x1926, - 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x0078, 0x1596, 0x6a0a, 0xa39d, - 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, 0x6b0c, 0x71c4, 0x0078, - 0x159a, 0x77c4, 0x1078, 0x1e02, 0x2091, 0x8000, 0x6a14, 0x6b1c, - 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, - 0x159a, 0x70c4, 0x2061, 0x4a40, 0x6118, 0x601a, 0x7810, 0xd0ec, - 0x00c0, 0x159c, 0x70c8, 0x2061, 0x4a80, 0x6218, 0x601a, 0x0078, - 0x159b, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x1595, - 0x1078, 0x278d, 0xa384, 0x4000, 0x0040, 0x1960, 0xa295, 0x0020, - 0x0078, 0x159a, 0x77c4, 0x1078, 0x1e02, 0x2091, 0x8000, 0x6a08, - 0xc28d, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078, 0x159b, 0x77c4, - 0x1078, 0x1e02, 0x2091, 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, - 0x6804, 0xa005, 0x0040, 0x197e, 0x1078, 0x25de, 0x2091, 0x8001, - 0x2708, 0x0078, 0x159b, 0x77c4, 0x1078, 0x1e02, 0x2091, 0x8000, - 0x6a08, 0xc295, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1991, 0x1078, - 0x25de, 0x2091, 0x8001, 0x2708, 0x0078, 0x159b, 0x77c4, 0x2041, - 0x0001, 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, - 0x1e1d, 0x2091, 0x8001, 0x2708, 0x6a08, 0x0078, 0x159b, 0x77c4, - 0x7814, 0xd0e4, 0x00c0, 0x19bb, 0xd7fc, 0x0040, 0x19b5, 0x1078, - 0x1d82, 0x0040, 0x19bb, 0x0078, 0x159f, 0x1078, 0x1d72, 0x0040, - 0x19bb, 0x0078, 0x159f, 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce, - 0x1078, 0x1e9a, 0x00c0, 0x19e5, 0x6818, 0xa005, 0x0040, 0x19df, - 0x2708, 0x077e, 0x1078, 0x27bd, 0x077f, 0x00c0, 0x19df, 0x2001, - 0x0015, 0xd7fc, 0x00c0, 0x19d8, 0x2061, 0x4a40, 0x0078, 0x19db, - 0xc0fd, 0x2061, 0x4a80, 0x782a, 0x2091, 0x8001, 0x007c, 0x2091, - 0x8001, 0x2001, 0x4005, 0x0078, 0x159f, 0x2091, 0x8001, 0x0078, - 0x159d, 0x77c4, 0x7814, 0xd0e4, 0x00c0, 0x19fd, 0xd7fc, 0x0040, - 0x19f7, 0x1078, 0x1d82, 0x0040, 0x19fd, 0x0078, 0x159f, 0x1078, - 0x1d72, 0x0040, 0x19fd, 0x0078, 0x159f, 0x77c6, 0x2041, 0x0021, - 0x2049, 0x0005, 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x1e1d, - 0x2009, 0x0016, 0xd7fc, 0x00c0, 0x1a11, 0x2061, 0x4a40, 0x0078, - 0x1a14, 0x2061, 0x4a80, 0xc1fd, 0x6067, 0x0003, 0x6776, 0x6083, - 0x000f, 0x792a, 0x1078, 0x25de, 0x2091, 0x8001, 0x007c, 0x77c8, - 0x77ca, 0x77c4, 0x77c6, 0x7814, 0xd0e4, 0x00c0, 0x1a36, 0xd7fc, - 0x0040, 0x1a30, 0x1078, 0x1d82, 0x0040, 0x1a36, 0x0078, 0x159f, - 0x1078, 0x1d72, 0x0040, 0x1a36, 0x0078, 0x159f, 0xa7bc, 0xff00, - 0x2091, 0x8000, 0x2009, 0x0017, 0xd7fc, 0x00c0, 0x1a43, 0x2061, - 0x4a40, 0x0078, 0x1a46, 0x2061, 0x4a80, 0xc1fd, 0x6067, 0x0002, - 0x6776, 0x6083, 0x000f, 0x792a, 0x1078, 0x25de, 0x2091, 0x8001, - 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0010, 0x2091, 0x8000, - 0x70c8, 0xa005, 0x0040, 0x1a5f, 0x60d4, 0xc0fd, 0x60d6, 0x1078, - 0x1e1d, 0x70c8, 0x683e, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1a5f, - 0x2091, 0x8001, 0x007c, 0x7814, 0xd0e4, 0x00c0, 0x1a7f, 0x72c8, - 0xd284, 0x0040, 0x1a79, 0x1078, 0x1d82, 0x0040, 0x1a7f, 0x0078, - 0x159f, 0x1078, 0x1d72, 0x0040, 0x1a7f, 0x0078, 0x159f, 0x72c8, - 0x72ca, 0x78ac, 0xa084, 0x0003, 0x00c0, 0x1aaa, 0x2039, 0x0000, - 0xd284, 0x0040, 0x1a8c, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, - 0x2051, 0x0008, 0x1078, 0x1e02, 0x2091, 0x8000, 0x6808, 0xc0d4, - 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, 0x00c0, - 0x1a92, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, - 0x00c0, 0x1a92, 0x2091, 0x8000, 0x72c8, 0xd284, 0x00c0, 0x1abc, - 0x7810, 0xd0ec, 0x0040, 0x1ab8, 0x2069, 0x0100, 0x0078, 0x1abe, - 0x2069, 0x0200, 0x0078, 0x1abe, 0x2069, 0x0100, 0x6830, 0xd0b4, - 0x0040, 0x1ada, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, - 0x0040, 0x1acc, 0x00f0, 0x1ac6, 0x684b, 0x0009, 0x20a9, 0x0014, - 0x6848, 0xd084, 0x0040, 0x1ad6, 0x00f0, 0x1ad0, 0x20a9, 0x00fa, - 0x00f0, 0x1ad8, 0x2079, 0x4a00, 0x2009, 0x0018, 0x72c8, 0xd284, - 0x00c0, 0x1ae6, 0x2061, 0x4a40, 0x0078, 0x1ae9, 0x2061, 0x4a80, - 0xc1fd, 0x792a, 0x6067, 0x0001, 0x6083, 0x000f, 0x60a7, 0x0000, - 0x60a8, 0x60b2, 0x60b6, 0x60d4, 0xd0b4, 0x0040, 0x1b03, 0xc0b4, - 0x60d6, 0x0c7e, 0x60b8, 0xa065, 0x6008, 0xc0d4, 0x600a, 0x6018, - 0x8001, 0x601a, 0x0c7f, 0x60d4, 0xa084, 0x77ff, 0x60d6, 0x78ac, - 0xc08d, 0x78ae, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, 0x0047, - 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x1b1a, 0x2069, 0x4a40, - 0x0078, 0x1b1c, 0x2069, 0x4a80, 0x78ac, 0xc08c, 0x78ae, 0xd084, - 0x00c0, 0x1b26, 0x0d7e, 0x1078, 0x1efa, 0x0d7f, 0x71c4, 0x71c6, - 0x6916, 0x81ff, 0x00c0, 0x1b2e, 0x68a7, 0x0001, 0x007c, 0x75d8, - 0x74dc, 0x75da, 0x74de, 0x0078, 0x1b38, 0x2029, 0x0000, 0x2520, - 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x4a00, - 0x7dde, 0x7cda, 0x7bd6, 0x7ad2, 0x1078, 0x1ddb, 0x0040, 0x1c3b, - 0x20a9, 0x0005, 0x20a1, 0x4a14, 0x2091, 0x8000, 0x41a1, 0x2091, - 0x8001, 0x2009, 0x0040, 0x1078, 0x1fcf, 0x0040, 0x1b5b, 0x1078, - 0x1de4, 0x0078, 0x1c3b, 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, - 0x00c0, 0x1b66, 0x007e, 0x1078, 0x234b, 0x007f, 0xa084, 0xff00, - 0x8007, 0x8009, 0x0040, 0x1bda, 0x0c7e, 0x2c68, 0x1078, 0x1ddb, - 0x0040, 0x1bac, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x1b6d, 0x609f, - 0x0000, 0x0c7f, 0x0c7e, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, - 0x0040, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, - 0x7cda, 0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0040, 0x1bd9, - 0x2009, 0x0040, 0x1078, 0x1fcf, 0x00c0, 0x1bc3, 0x6004, 0xa084, - 0x00ff, 0xa086, 0x0002, 0x00c0, 0x1bac, 0x6004, 0xa084, 0x00ff, - 0xa086, 0x000a, 0x00c0, 0x1ba8, 0x017e, 0x1078, 0x2347, 0x017f, - 0x2d00, 0x6002, 0x0078, 0x1b7b, 0x0c7f, 0x0c7e, 0x609c, 0x1078, - 0x1e5d, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c3f, 0x2009, 0x0018, - 0x6008, 0xc0cd, 0x600a, 0x6004, 0x6086, 0x1078, 0x1d92, 0x1078, - 0x1de4, 0x0078, 0x1c3b, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e5d, - 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c3f, 0x2009, 0x0018, 0x6087, - 0x0103, 0x601b, 0x0003, 0x1078, 0x1d92, 0x1078, 0x1de4, 0x0078, - 0x1c3b, 0x0c7f, 0x7814, 0xd0e4, 0x00c0, 0x1bff, 0x6114, 0xd1fc, - 0x0040, 0x1be8, 0x1078, 0x1d82, 0x0040, 0x1bff, 0x0078, 0x1bec, - 0x1078, 0x1d72, 0x0040, 0x1bff, 0x2029, 0x0000, 0x2520, 0x2009, - 0x0018, 0x73c8, 0x72cc, 0x6087, 0x0103, 0x601b, 0x0021, 0x1078, - 0x1d92, 0x1078, 0x1de4, 0x2001, 0x4007, 0x0078, 0x159f, 0x74c4, - 0x73c8, 0x72cc, 0x6014, 0x2091, 0x8000, 0x0e7e, 0x2009, 0x0012, - 0xd0fc, 0x00c0, 0x1c0f, 0x2071, 0x4a40, 0x0078, 0x1c12, 0x2071, - 0x4a80, 0xc1fd, 0x792a, 0x7067, 0x0005, 0x71d4, 0xa18c, 0xf77f, - 0x71d6, 0x736a, 0x726e, 0x7472, 0x7076, 0x707b, 0x0000, 0x2c00, - 0x707e, 0xa02e, 0x2530, 0x611c, 0xa184, 0x0060, 0x0040, 0x1c2a, - 0x1078, 0x43c1, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, - 0x0000, 0x60b3, 0x0000, 0x6714, 0x6023, 0x0000, 0x1078, 0x25de, - 0x2091, 0x8001, 0x007c, 0x70c3, 0x4005, 0x0078, 0x15a0, 0x20a9, - 0x0005, 0x2099, 0x4a14, 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, - 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, - 0x007c, 0x71c4, 0x70c7, 0x0000, 0x791e, 0x0078, 0x159d, 0x71c4, - 0x71c6, 0x2168, 0x0078, 0x1c5e, 0x2069, 0x1000, 0x690c, 0xa016, - 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x1c60, 0xa285, 0x0000, - 0x00c0, 0x1c6e, 0x70c3, 0x4000, 0x0078, 0x1c70, 0x70c3, 0x4003, - 0x70ca, 0x0078, 0x15a0, 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, - 0x00c8, 0x1595, 0x7966, 0x0078, 0x159d, 0x7964, 0x71c6, 0x0078, - 0x159d, 0x7900, 0x71c6, 0x71c4, 0x7902, 0x0078, 0x159d, 0x7900, - 0x71c6, 0x0078, 0x159d, 0x70c4, 0xd08c, 0x0040, 0x1c94, 0x7a10, - 0xd2ec, 0x00c0, 0x1c94, 0xc08c, 0x2011, 0x0000, 0xa08c, 0x000d, - 0x0040, 0x1ca8, 0x810c, 0x0048, 0x1ca4, 0x8210, 0x810c, 0x810c, - 0x0048, 0x1ca4, 0x8210, 0x810c, 0x81ff, 0x00c0, 0x1596, 0x8210, - 0x7a0e, 0xd28c, 0x0040, 0x1cd4, 0x7910, 0xc1cd, 0x7912, 0x2009, - 0x0021, 0x2019, 0x0003, 0xd284, 0x0040, 0x1cce, 0x8108, 0x2019, - 0x0041, 0x2011, 0x924e, 0x2312, 0x2019, 0x0042, 0x8210, 0x2312, - 0x2019, 0x0043, 0x8210, 0x2312, 0x2019, 0x0046, 0x8210, 0x2312, - 0x2019, 0x0047, 0x8210, 0x2312, 0x2019, 0x0006, 0x2011, 0x9253, - 0x2112, 0x2011, 0x9273, 0x2312, 0x7904, 0x7806, 0x0078, 0x159c, - 0x7804, 0x70c6, 0x0078, 0x159d, 0x2091, 0x8000, 0x2019, 0x0000, - 0x2011, 0x0000, 0x2009, 0x0000, 0x2091, 0x8001, 0x0078, 0x159a, - 0x77c4, 0x1078, 0x1e02, 0x2091, 0x8000, 0x6830, 0xa084, 0xff00, - 0x8007, 0x2010, 0x2091, 0x8001, 0x2708, 0x0078, 0x159b, 0x77c4, - 0x1078, 0x1e02, 0x2091, 0x8000, 0x6a34, 0x2091, 0x8001, 0x2708, - 0x0078, 0x159b, 0x77c4, 0x077e, 0xa7bc, 0xff00, 0x20a9, 0x0008, - 0x72c8, 0x8217, 0x1078, 0x1e02, 0x2091, 0x8000, 0x6c30, 0x6a32, - 0x2091, 0x8001, 0x8738, 0x00f0, 0x1d0a, 0x077f, 0x2708, 0x8427, - 0x2410, 0x0078, 0x159b, 0x77c4, 0x077e, 0xa7bc, 0xff00, 0x20a9, - 0x0008, 0x72c8, 0x1078, 0x1e02, 0x2091, 0x8000, 0x6c34, 0x6a36, - 0x2091, 0x8001, 0x8738, 0x00f0, 0x1d22, 0x077f, 0x2708, 0x2410, - 0x0078, 0x159b, 0x2011, 0x4a3c, 0x220c, 0x70c4, 0x2012, 0x0078, - 0x159c, 0x71c4, 0xd1fc, 0x00c0, 0x1d41, 0x2011, 0x4ec0, 0x0078, - 0x1d43, 0x2011, 0x4f40, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, - 0x8003, 0xa268, 0x6a14, 0xd2b4, 0x0040, 0x1d52, 0x2011, 0x0001, - 0x0078, 0x1d54, 0x2011, 0x0000, 0x6b0c, 0x0078, 0x159a, 0x017e, - 0x7814, 0xd0f4, 0x0040, 0x1d64, 0x2001, 0x4007, 0x70db, 0x0000, - 0xa18d, 0x0001, 0x0078, 0x1d70, 0xd0fc, 0x0040, 0x1d6f, 0x2001, - 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078, 0x1d70, 0xa006, - 0x017f, 0x007c, 0x017e, 0x7814, 0xd0f4, 0x0040, 0x1d7f, 0x2001, - 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, 0x0078, 0x1d80, 0xa006, - 0x017f, 0x007c, 0x017e, 0x7814, 0xd0fc, 0x0040, 0x1d8f, 0x2001, - 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078, 0x1d90, 0xa006, - 0x017f, 0x007c, 0x7112, 0x721a, 0x731e, 0x7810, 0xd0c4, 0x0040, - 0x1d9b, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c, 0x81a9, - 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084, 0x20a2, 0x53a6, - 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0040, 0x1db8, 0x810f, - 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, 0x1dbb, - 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, 0xa211, - 0x7d10, 0xd5c4, 0x0040, 0x1dc8, 0x7b84, 0xa319, 0x7c80, 0xa421, - 0x7008, 0xd0fc, 0x0040, 0x1dc8, 0x7003, 0x0001, 0x7007, 0x0006, - 0x711a, 0x721e, 0x7d10, 0xd5c4, 0x0040, 0x1dd8, 0x7322, 0x7426, - 0xa084, 0x01e0, 0x007c, 0x7848, 0xa065, 0x0040, 0x1de3, 0x2c04, - 0x784a, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x4a00, 0x7848, - 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1def, 0x1078, 0x28ec, 0x784a, - 0x0f7f, 0x007c, 0x2011, 0x9400, 0x7a4a, 0x7bc4, 0x8319, 0x0040, - 0x1dff, 0xa280, 0x0032, 0x2012, 0x2010, 0x0078, 0x1df6, 0x2013, - 0x0000, 0x007c, 0x017e, 0x027e, 0xd7fc, 0x00c0, 0x1e0b, 0x2011, - 0x4fc0, 0x0078, 0x1e0d, 0x2011, 0x6fc0, 0xa784, 0x0f00, 0x800b, - 0xa784, 0x001f, 0x0040, 0x1e18, 0x8003, 0x8003, 0x8003, 0x8003, - 0xa105, 0xa268, 0x027f, 0x017f, 0x007c, 0x1078, 0x1e02, 0x2900, - 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef, 0xa80d, 0x690a, - 0xd7fc, 0x00c0, 0x1e2f, 0x2009, 0x4a53, 0x0078, 0x1e31, 0x2009, - 0x4a93, 0x210c, 0x6804, 0xa005, 0x0040, 0x1e41, 0xa116, 0x00c0, - 0x1e41, 0x2060, 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, - 0x1e44, 0x2009, 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1e59, - 0x6000, 0x6806, 0x1078, 0x1e6f, 0x1078, 0x201b, 0x6810, 0x7908, - 0x8109, 0x790a, 0x8001, 0x6812, 0x00c0, 0x1e44, 0x7910, 0xc1a5, - 0x7912, 0x017f, 0x6902, 0x6906, 0x007c, 0xa065, 0x0040, 0x1e6e, - 0x2008, 0x609c, 0xa005, 0x0040, 0x1e6b, 0x2062, 0x609f, 0x0000, - 0xa065, 0x0078, 0x1e61, 0x7848, 0x794a, 0x2062, 0x007c, 0x6007, - 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, 0xac80, 0x0005, 0x20a0, - 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c, 0x6022, 0x007c, - 0x0e7e, 0xd7fc, 0x00c0, 0x1e8a, 0x2071, 0x4a40, 0x2031, 0x4ac0, - 0x0078, 0x1e8e, 0x2071, 0x4a80, 0x2031, 0x4cc0, 0x7050, 0xa08c, - 0x0200, 0x00c0, 0x1e98, 0xa608, 0x2d0a, 0x8000, 0x7052, 0xa006, - 0x0e7f, 0x007c, 0x0f7e, 0xd7fc, 0x00c0, 0x1ea2, 0x2079, 0x4a40, - 0x0078, 0x1ea4, 0x2079, 0x4a80, 0x1078, 0x1e02, 0x2091, 0x8000, - 0x6804, 0x780a, 0xa065, 0x0040, 0x1ef8, 0x0078, 0x1eb6, 0x2c00, - 0x780a, 0x2060, 0x6000, 0xa065, 0x0040, 0x1ef8, 0x6010, 0xa306, - 0x00c0, 0x1eaf, 0x600c, 0xa206, 0x00c0, 0x1eaf, 0x2c28, 0x784c, - 0xac06, 0x00c0, 0x1ec5, 0x0078, 0x1ef5, 0x6804, 0xac06, 0x00c0, - 0x1ed3, 0x6000, 0x2060, 0x6806, 0xa005, 0x00c0, 0x1ed3, 0x6803, - 0x0000, 0x0078, 0x1edd, 0x6400, 0x7808, 0x2060, 0x6402, 0xa486, - 0x0000, 0x00c0, 0x1edd, 0x2c00, 0x6802, 0x2560, 0x0f7f, 0x1078, - 0x1e6f, 0x0f7e, 0x601b, 0x0005, 0x6023, 0x0020, 0x0f7f, 0x1078, - 0x201b, 0x0f7e, 0x7908, 0x8109, 0x790a, 0x6810, 0x8001, 0x6812, - 0x00c0, 0x1ef5, 0x7810, 0xc0a5, 0x7812, 0x2001, 0xffff, 0xa005, - 0x0f7f, 0x007c, 0x077e, 0x2700, 0x2039, 0x0000, 0xd0fc, 0x0040, - 0x1f02, 0xc7fd, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, - 0x2091, 0x8000, 0x1078, 0x1e1d, 0x8738, 0xa784, 0x001f, 0x00c0, - 0x1f0a, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, - 0x00c0, 0x1f0a, 0x2091, 0x8001, 0x077f, 0x007c, 0x2061, 0x0000, - 0x6018, 0xd084, 0x00c0, 0x1f3e, 0x7810, 0xd08c, 0x0040, 0x1f2f, - 0xc08c, 0x7812, 0xc7fc, 0x2069, 0x4a40, 0x0078, 0x1f34, 0xc08d, - 0x7812, 0x2069, 0x4a80, 0xc7fd, 0x2091, 0x8000, 0x681c, 0x681f, - 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x1f3f, 0x007c, 0xa08c, - 0xfff0, 0x0040, 0x1f45, 0x1078, 0x28ec, 0x0079, 0x1f47, 0x1f57, - 0x1f5a, 0x1f60, 0x1f64, 0x1f58, 0x1f68, 0x1f58, 0x1f58, 0x1f58, - 0x1f6e, 0x1f9f, 0x1fa3, 0x1fa9, 0x1f58, 0x1f58, 0x1f58, 0x007c, - 0x1078, 0x28ec, 0x1078, 0x1efa, 0x2001, 0x8001, 0x0078, 0x1fbe, - 0x2001, 0x8003, 0x0078, 0x1fbe, 0x2001, 0x8004, 0x0078, 0x1fbe, - 0x1078, 0x1efa, 0x2001, 0x8006, 0x0078, 0x1fbe, 0x2091, 0x8000, - 0x077e, 0xd7fc, 0x00c0, 0x1f7a, 0x2069, 0x4a40, 0x2039, 0x0009, - 0x0078, 0x1f7e, 0x2069, 0x4a80, 0x2039, 0x0009, 0x6800, 0xa086, - 0x0000, 0x0040, 0x1f88, 0x007f, 0x6f1e, 0x2091, 0x8001, 0x007c, - 0x6874, 0x077f, 0xa0bc, 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, - 0x2051, 0x0010, 0x1078, 0x1e1d, 0x8738, 0xa784, 0x001f, 0x00c0, - 0x1f92, 0x2091, 0x8001, 0x2001, 0x800a, 0x0078, 0x1fbe, 0x2001, - 0x800c, 0x0078, 0x1fbe, 0x1078, 0x1efa, 0x2001, 0x800d, 0x0078, - 0x1fbe, 0x7814, 0xd0e4, 0x00c0, 0x1fbc, 0xd0ec, 0x0040, 0x1fb6, - 0xd7fc, 0x0040, 0x1fb6, 0x78ec, 0x0078, 0x1fb7, 0x78e4, 0x70c6, - 0x2001, 0x800e, 0x0078, 0x1fbe, 0x0078, 0x1f58, 0x70c2, 0xd7fc, - 0x00c0, 0x1fc6, 0x70db, 0x0000, 0x0078, 0x1fc8, 0x70db, 0x0001, - 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, 0xac80, - 0x0001, 0x81ff, 0x0040, 0x1ffa, 0x2099, 0x0030, 0x20a0, 0x700c, - 0xa084, 0x03ff, 0x0040, 0x1fdc, 0x7018, 0x007e, 0x701c, 0x007e, - 0x7020, 0x007e, 0x7024, 0x007e, 0x7112, 0x81ac, 0x721a, 0x731e, - 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, 0x800b, - 0x00c8, 0x1fee, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x1ffa, - 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004, 0x007f, 0x7026, - 0x007f, 0x7022, 0x007f, 0x701e, 0x007f, 0x701a, 0x007c, 0x2011, - 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x6803, 0xfd00, 0x6807, - 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, 0x8109, - 0x00c0, 0x200b, 0x007c, 0x6004, 0x6086, 0x2c08, 0x2063, 0x0000, - 0x7868, 0xa005, 0x796a, 0x0040, 0x2028, 0x2c02, 0x0078, 0x2029, - 0x796e, 0x007c, 0x0c7e, 0x2061, 0x4a00, 0x6887, 0x0103, 0x2d08, - 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x203a, 0x2d02, - 0x0078, 0x203b, 0x616e, 0x0c7f, 0x007c, 0x2091, 0x8000, 0x2c04, - 0x786e, 0xa005, 0x00c0, 0x2045, 0x786a, 0x2091, 0x8001, 0x609c, - 0xa005, 0x0040, 0x205e, 0x0c7e, 0x2060, 0x2008, 0x609c, 0xa005, - 0x0040, 0x205a, 0x2062, 0x609f, 0x0000, 0xa065, 0x609c, 0xa005, - 0x00c0, 0x2052, 0x7848, 0x794a, 0x2062, 0x0c7f, 0x7848, 0x2062, - 0x609f, 0x0000, 0xac85, 0x0000, 0x00c0, 0x2068, 0x1078, 0x28ec, - 0x784a, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, - 0x00c8, 0x2073, 0xa200, 0x00f0, 0x206e, 0x8086, 0x818e, 0x007c, - 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x2099, 0xa11a, 0x00c8, - 0x2099, 0x8213, 0x818d, 0x0048, 0x208c, 0xa11a, 0x00c8, 0x208d, - 0x00f0, 0x2081, 0x0078, 0x2091, 0xa11a, 0x2308, 0x8210, 0x00f0, - 0x2081, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f, - 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x2095, 0x7d74, - 0x70d0, 0xa506, 0x0040, 0x2185, 0x7810, 0x2050, 0x7800, 0xd08c, - 0x0040, 0x20c1, 0xdaec, 0x0040, 0x20c1, 0x0e7e, 0x2091, 0x8000, - 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x20be, 0x7008, 0x0e7f, - 0xa086, 0x0008, 0x0040, 0x20c1, 0x0078, 0x2185, 0x0e7f, 0x0078, - 0x2185, 0x1078, 0x1ddb, 0x0040, 0x2185, 0xa046, 0x7970, 0x2500, - 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, 0x20d0, 0x0078, 0x20d7, - 0x72d0, 0xa206, 0x0040, 0x20d7, 0x8840, 0x2009, 0x0080, 0x0c7e, - 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, 0xac80, - 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0040, 0x20e9, 0x1078, - 0x1ddb, 0x7008, 0xd0fc, 0x0040, 0x20e9, 0x7007, 0x0002, 0x2091, - 0x8001, 0xa08c, 0x01e0, 0x00c0, 0x2120, 0x53a5, 0x8cff, 0x00c0, - 0x20fe, 0x88ff, 0x0040, 0x216f, 0x0078, 0x2108, 0x2c00, 0x788e, - 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5, 0x0078, 0x216f, - 0xa046, 0x7218, 0x731c, 0xdac4, 0x0040, 0x2110, 0x7420, 0x7524, - 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3, 0x0000, 0xa5ab, 0x0000, - 0x721a, 0x731e, 0xdac4, 0x0040, 0x2120, 0x7422, 0x7526, 0xa006, - 0x7007, 0x0004, 0x0040, 0x216f, 0x8cff, 0x0040, 0x2129, 0x1078, - 0x1de4, 0x0c7f, 0x1078, 0x1de4, 0xa046, 0x7888, 0x8000, 0x788a, - 0xa086, 0x0002, 0x0040, 0x214f, 0x7a7c, 0x7b78, 0xdac4, 0x0040, - 0x213b, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004, 0x8004, 0xa210, - 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x721a, 0x731e, - 0xdac4, 0x0040, 0x2185, 0x7422, 0x7526, 0x0078, 0x2185, 0x6014, - 0xd0fc, 0x00c0, 0x2157, 0x2069, 0x4a40, 0x0078, 0x2159, 0x2069, - 0x4a80, 0x2091, 0x8000, 0x681f, 0x0002, 0x88ff, 0x0040, 0x2165, - 0xa046, 0x788c, 0x2060, 0x0078, 0x214f, 0x788b, 0x0000, 0x78ac, - 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0078, 0x2185, 0x0c7f, - 0x788b, 0x0000, 0x1078, 0x2319, 0x6004, 0xa084, 0x000f, 0x1078, - 0x2186, 0x88ff, 0x0040, 0x2183, 0x788c, 0x2060, 0x6004, 0xa084, - 0x000f, 0x1078, 0x2186, 0x0078, 0x209f, 0x007c, 0x0079, 0x2188, - 0x2198, 0x21b6, 0x21d4, 0x2198, 0x21e5, 0x21a9, 0x2198, 0x2198, - 0x2198, 0x21b4, 0x21d2, 0x2198, 0x2198, 0x2198, 0x2198, 0x2198, - 0x2039, 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705, 0x600a, - 0x1078, 0x2228, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078, 0x2303, - 0x007c, 0x78bc, 0xd0c4, 0x0040, 0x21af, 0x0078, 0x2198, 0x601c, - 0xc0bd, 0x601e, 0x0078, 0x21bc, 0x1078, 0x234b, 0x78bc, 0xd0c4, - 0x0040, 0x21bc, 0x0078, 0x2198, 0x78bf, 0x0000, 0x6004, 0x8007, - 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0040, 0x21cf, 0x1078, 0x2228, - 0x0040, 0x21cf, 0x78bc, 0xc0c5, 0x78be, 0x0078, 0x21d1, 0x0078, - 0x2247, 0x007c, 0x1078, 0x2347, 0x78bc, 0xa08c, 0x0e00, 0x00c0, - 0x21dc, 0xd0c4, 0x00c0, 0x21de, 0x0078, 0x2198, 0x1078, 0x2228, - 0x00c0, 0x21e4, 0x0078, 0x2247, 0x007c, 0x78bc, 0xd0c4, 0x0040, - 0x21eb, 0x0078, 0x2198, 0x78bf, 0x0000, 0x6714, 0x2011, 0x0001, - 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x220b, 0xa7bc, - 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040, 0x220b, 0xa7bc, - 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, 0x0040, - 0x220b, 0x0078, 0x2225, 0x1078, 0x1e02, 0x2d00, 0x2091, 0x8000, - 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde, 0x680a, - 0xade8, 0x0010, 0x2091, 0x8001, 0x00f0, 0x220e, 0x8211, 0x0040, - 0x2225, 0x20a9, 0x0100, 0x0078, 0x220e, 0x1078, 0x1de4, 0x007c, - 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6, 0x00c0, 0x2233, - 0x78ba, 0x0078, 0x223b, 0x689e, 0x2d00, 0x6002, 0x78b8, 0xad06, - 0x00c0, 0x223b, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x00c0, 0x2246, - 0x78bc, 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006, 0x007c, 0x0e7e, - 0xa02e, 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2, 0x601c, 0x60a2, - 0x2048, 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0040, 0x225a, - 0x1078, 0x43c1, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, 0x2071, - 0x4a80, 0xd7fc, 0x00c0, 0x2266, 0x2071, 0x4a40, 0xa784, 0x0f00, - 0x800b, 0xa784, 0x001f, 0x0040, 0x2271, 0x8003, 0x8003, 0x8003, - 0x8003, 0xa105, 0x71c4, 0xa168, 0x2700, 0x8007, 0xa084, 0x000f, - 0x8003, 0x8003, 0x8003, 0x71c8, 0xa100, 0x60c2, 0x2091, 0x8000, - 0x7810, 0xd0f4, 0x00c0, 0x228b, 0x6e08, 0xd684, 0x0040, 0x22a1, - 0xd9fc, 0x00c0, 0x22a1, 0x2091, 0x8001, 0x1078, 0x1e6f, 0x2091, - 0x8000, 0x1078, 0x201b, 0x2091, 0x8001, 0x7814, 0xd0e4, 0x00c0, - 0x2301, 0x7810, 0xd0f4, 0x0040, 0x2301, 0x601b, 0x0021, 0x0078, - 0x2301, 0x6024, 0xa096, 0x0001, 0x00c0, 0x22a8, 0x8000, 0x6026, - 0x6a10, 0x6814, 0xa202, 0x0048, 0x22bb, 0x0040, 0x22bb, 0x2091, - 0x8001, 0x2039, 0x0200, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078, - 0x2303, 0x0078, 0x2301, 0x2c08, 0xd9fc, 0x0040, 0x22de, 0x6800, - 0xa065, 0x0040, 0x22de, 0x6a04, 0x7000, 0xa084, 0x0002, 0x0040, - 0x22d9, 0x704c, 0xa206, 0x00c0, 0x22d9, 0x6b04, 0x2160, 0x2304, - 0x6002, 0xa005, 0x00c0, 0x22d5, 0x6902, 0x2260, 0x6102, 0x0078, - 0x22ea, 0x2160, 0x6202, 0x6906, 0x0078, 0x22ea, 0x6800, 0x6902, - 0xa065, 0x0040, 0x22e6, 0x6102, 0x0078, 0x22e7, 0x6906, 0x2160, - 0x6003, 0x0000, 0x2160, 0xd9fc, 0x0040, 0x22f1, 0xa6b4, 0xfffc, - 0x6e0a, 0x6810, 0x7d08, 0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, - 0x8001, 0xd6b4, 0x0040, 0x2301, 0xa6b6, 0x0040, 0x6e0a, 0x1078, - 0x1e80, 0x0e7f, 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, - 0x1078, 0x201b, 0x2091, 0x8001, 0x78b8, 0xa065, 0x0040, 0x2316, - 0x609c, 0x78ba, 0x609f, 0x0000, 0x0078, 0x2303, 0x78b6, 0x78ba, - 0x007c, 0x7970, 0x7874, 0x2818, 0xd384, 0x0040, 0x2323, 0x8000, - 0xa112, 0x0048, 0x2328, 0x8000, 0xa112, 0x00c8, 0x2338, 0xc384, - 0x7a7c, 0x721a, 0x7a78, 0x721e, 0xdac4, 0x0040, 0x2333, 0x7a84, - 0x7222, 0x7a80, 0x7226, 0xa006, 0xd384, 0x0040, 0x2338, 0x8000, - 0x7876, 0x70d2, 0x781c, 0xa005, 0x0040, 0x2346, 0x8001, 0x781e, - 0x00c0, 0x2346, 0x0068, 0x2346, 0x2091, 0x4080, 0x007c, 0x2039, - 0x235f, 0x0078, 0x234d, 0x2039, 0x2365, 0x2704, 0xa005, 0x0040, - 0x235e, 0xac00, 0x2068, 0x6908, 0x6810, 0x6912, 0x680a, 0x690c, - 0x6814, 0x6916, 0x680e, 0x8738, 0x0078, 0x234d, 0x007c, 0x0003, - 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, - 0x2041, 0x0000, 0x780c, 0x0079, 0x236d, 0x2535, 0x2508, 0x2371, - 0x23e5, 0x2039, 0x9274, 0x2734, 0x7d10, 0x0078, 0x238c, 0x6084, - 0xa086, 0x0103, 0x00c0, 0x23ce, 0x6114, 0x6018, 0xa105, 0x00c0, - 0x23ce, 0x8603, 0xa080, 0x9255, 0x620c, 0x2202, 0x8000, 0x6210, - 0x2202, 0x1078, 0x203d, 0x8630, 0xa68e, 0x000f, 0x0040, 0x2454, - 0x786c, 0xa065, 0x00c0, 0x2377, 0x7808, 0xa602, 0x00c8, 0x239d, - 0xd5ac, 0x00c0, 0x239d, 0x263a, 0x007c, 0xa682, 0x0003, 0x00c8, - 0x2454, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, - 0x23c9, 0x2011, 0x9255, 0x2204, 0x70c6, 0x8210, 0x2204, 0x70ca, - 0xd684, 0x00c0, 0x23b9, 0x8210, 0x2204, 0x70da, 0x8210, 0x2204, - 0x70de, 0xa685, 0x8020, 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, - 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, 0x8001, 0x203b, 0x0000, - 0x007c, 0x7810, 0xc0ad, 0x7812, 0x0078, 0x2454, 0x263a, 0x1078, - 0x253f, 0x00c0, 0x254e, 0x786c, 0xa065, 0x00c0, 0x2377, 0x2091, - 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0040, 0x23e0, 0xc0ad, - 0x7812, 0x2091, 0x8001, 0x0078, 0x254e, 0x2039, 0x9274, 0x2734, - 0x7d10, 0x0078, 0x23fc, 0x6084, 0xa086, 0x0103, 0x00c0, 0x243d, - 0x6114, 0x6018, 0xa105, 0x00c0, 0x243d, 0xa680, 0x9255, 0x620c, - 0x2202, 0x1078, 0x203d, 0x8630, 0xa68e, 0x001e, 0x0040, 0x2454, - 0x786c, 0xa065, 0x00c0, 0x23eb, 0x7808, 0xa602, 0x00c8, 0x240d, - 0xd5ac, 0x00c0, 0x240d, 0x263a, 0x007c, 0xa682, 0x0006, 0x00c8, - 0x2454, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, - 0x2438, 0x2011, 0x9255, 0x2009, 0x924e, 0x26a8, 0x211c, 0x2204, - 0x201a, 0x8108, 0x8210, 0x00f0, 0x241e, 0xa685, 0x8030, 0x70c2, + 0xa1a2, 0x4d00, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424, + 0xa192, 0x9700, 0x2009, 0x0000, 0x2001, 0x0032, 0x1078, 0x2061, + 0x2218, 0x2079, 0x4d00, 0x2fa0, 0x2408, 0x2011, 0x0000, 0x20a9, + 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10bf, 0x2009, 0xff00, 0x3400, + 0xa102, 0x0048, 0x10cf, 0x0040, 0x10cf, 0x20a8, 0x42a4, 0x2001, + 0x04fc, 0x2004, 0xa086, 0x1080, 0x00c0, 0x10e5, 0x2071, 0x0100, + 0x0d7e, 0x2069, 0x4d40, 0x1078, 0x4c38, 0x0d7f, 0x7810, 0xc0ed, + 0x7812, 0x781b, 0x0064, 0x0078, 0x110a, 0x2001, 0x04fc, 0x2004, + 0xa086, 0x1280, 0x00c0, 0x1105, 0x7814, 0xc0ed, 0xc0d5, 0x7816, + 0x781b, 0x0064, 0x2071, 0x0200, 0x0d7e, 0x2069, 0x4d40, 0x1078, + 0x4c38, 0x2069, 0x4d80, 0x2071, 0x0100, 0x1078, 0x4c38, 0x7814, + 0xc0d4, 0x7816, 0x0d7f, 0x0078, 0x110a, 0x7814, 0xc0e5, 0x7816, + 0x781b, 0x003c, 0x7eca, 0x7cc2, 0x7bc6, 0x7867, 0x0000, 0x7800, + 0xc08d, 0x7802, 0x2031, 0x0030, 0x78af, 0x0101, 0x7823, 0x0002, + 0x7827, 0x0002, 0x2009, 0x0002, 0x2069, 0x4d40, 0x681b, 0x0003, + 0x6823, 0x0007, 0x6827, 0x00fa, 0x682b, 0x0008, 0x682f, 0x0028, + 0x6837, 0x0000, 0x683b, 0x0006, 0x6833, 0x0008, 0x683f, 0x0000, + 0x8109, 0x0040, 0x115e, 0x68d3, 0x000a, 0x68c3, 0x4dc0, 0x2079, + 0x4d00, 0x7814, 0xd0e4, 0x00c0, 0x1144, 0xd0ec, 0x00c0, 0x1148, + 0x68d7, 0x7329, 0x0078, 0x114a, 0x68d7, 0x730d, 0x0078, 0x114a, + 0x68d7, 0x732d, 0x68c7, 0x52c0, 0x68cb, 0x51c0, 0x68cf, 0x92c0, + 0x68ab, 0x9544, 0x68af, 0x9549, 0x68b3, 0x9544, 0x68b7, 0x9544, + 0x68a7, 0x0001, 0x2069, 0x4d80, 0x0078, 0x111e, 0x68d3, 0x000a, + 0x68c3, 0x4fc0, 0x7814, 0xd0e4, 0x00c0, 0x116a, 0x68d7, 0x7439, + 0x0078, 0x116c, 0x68d7, 0x7419, 0x68c7, 0x72c0, 0x68cb, 0x5240, + 0x68cf, 0x93d0, 0x68ab, 0x9549, 0x68af, 0x954e, 0x68b3, 0x9549, + 0x68b7, 0x9549, 0x68a7, 0x0001, 0x7810, 0xd0ec, 0x00c0, 0x11c2, + 0x7814, 0xd0e4, 0x00c0, 0x11b4, 0x0e7e, 0x2069, 0x51c0, 0x2071, + 0x0200, 0x70ec, 0xd0e4, 0x00c0, 0x1195, 0x2019, 0x0c0c, 0x2021, + 0x000c, 0x1078, 0x1ff0, 0x0078, 0x119b, 0x2019, 0x0c0a, 0x2021, + 0x000a, 0x1078, 0x1ff0, 0x2069, 0x5240, 0x2071, 0x0100, 0x70ec, + 0xd0e4, 0x00c0, 0x11ab, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078, + 0x1ff0, 0x0078, 0x11b1, 0x2019, 0x0c0a, 0x2021, 0x000a, 0x1078, + 0x1ff0, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0c, 0x2021, 0x000c, + 0x2069, 0x51c0, 0x1078, 0x1ff0, 0x2069, 0x5240, 0x1078, 0x1ff0, + 0x0078, 0x11db, 0x2069, 0x51c0, 0x0e7e, 0x2071, 0x0100, 0x70ec, + 0xd0e4, 0x00c0, 0x11d4, 0x2019, 0x0c0c, 0x2021, 0x000c, 0x1078, + 0x1ff0, 0x0e7f, 0x0078, 0x11db, 0x2019, 0x0c0a, 0x2021, 0x000a, + 0x1078, 0x1ff0, 0x0e7f, 0x2011, 0x0002, 0x2069, 0x52c0, 0x2009, + 0x0002, 0x20a9, 0x0100, 0x6837, 0x0000, 0x680b, 0x0040, 0x7bc8, + 0xa386, 0xfeff, 0x00c0, 0x11f2, 0x6817, 0x0100, 0x681f, 0x0064, + 0x0078, 0x11f6, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010, + 0x00f0, 0x11e3, 0x8109, 0x00c0, 0x11e1, 0x8211, 0x0040, 0x1204, + 0x2069, 0x72c0, 0x0078, 0x11df, 0x1078, 0x261d, 0x1078, 0x4603, + 0x1078, 0x1dbb, 0x1078, 0x4be1, 0x2091, 0x2100, 0x2079, 0x4d00, + 0x7810, 0xd0ec, 0x0040, 0x1218, 0x2071, 0x0020, 0x0078, 0x121a, + 0x2071, 0x0050, 0x2091, 0x2200, 0x2079, 0x4d00, 0x2071, 0x0020, + 0x2091, 0x2300, 0x2079, 0x4d00, 0x7810, 0xd0ec, 0x0040, 0x122c, + 0x2079, 0x0100, 0x0078, 0x122e, 0x2079, 0x0200, 0x2071, 0x4d40, + 0x2091, 0x2400, 0x2079, 0x0100, 0x2071, 0x4d80, 0x2091, 0x2000, + 0x2079, 0x4d00, 0x2071, 0x0010, 0x3200, 0xa085, 0x303d, 0x2090, + 0x2071, 0x0010, 0x70c3, 0x0000, 0x0090, 0x124d, 0x70c0, 0xa086, + 0x0002, 0x00c0, 0x124d, 0x1078, 0x15ba, 0x2039, 0x0000, 0x7810, + 0xd0ec, 0x00c0, 0x12cf, 0x1078, 0x148e, 0x78ac, 0xa005, 0x00c0, + 0x126b, 0x0068, 0x1261, 0x786c, 0xa065, 0x0040, 0x1261, 0x1078, + 0x2356, 0x1078, 0x2088, 0x0068, 0x1278, 0x786c, 0xa065, 0x0040, + 0x126b, 0x1078, 0x2356, 0x0068, 0x1278, 0x2009, 0x4d47, 0x2011, + 0x4d87, 0x2104, 0x220c, 0xa105, 0x0040, 0x1278, 0x1078, 0x1ef1, + 0x2071, 0x4d40, 0x70a4, 0xa005, 0x0040, 0x129d, 0x7450, 0xa485, + 0x0000, 0x0040, 0x129d, 0x2079, 0x0200, 0x2091, 0x8000, 0x72d4, + 0xa28c, 0x303d, 0x2190, 0x1078, 0x2b0b, 0x2091, 0x8000, 0x2091, + 0x303d, 0x0068, 0x129d, 0x2079, 0x4d00, 0x786c, 0xa065, 0x0040, + 0x129d, 0x2071, 0x0010, 0x1078, 0x2356, 0x00e0, 0x12a5, 0x2079, + 0x4d00, 0x2071, 0x0010, 0x1078, 0x49ba, 0x2071, 0x4d80, 0x70a4, + 0xa005, 0x0040, 0x12bd, 0x7050, 0xa025, 0x0040, 0x12bd, 0x2079, + 0x0100, 0x2091, 0x8000, 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, + 0x2b0b, 0x2091, 0x8000, 0x2091, 0x303d, 0x2079, 0x4d00, 0x2071, + 0x0010, 0x0068, 0x12c9, 0x786c, 0xa065, 0x0040, 0x12c9, 0x1078, + 0x2356, 0x00e0, 0x1253, 0x1078, 0x49ba, 0x0078, 0x1253, 0x1078, + 0x148e, 0x78ac, 0xa005, 0x00c0, 0x12e7, 0x0068, 0x12dd, 0x786c, + 0xa065, 0x0040, 0x12dd, 0x1078, 0x2356, 0x1078, 0x2088, 0x0068, + 0x12f1, 0x786c, 0xa065, 0x0040, 0x12e7, 0x1078, 0x2356, 0x0068, + 0x12f1, 0x2009, 0x4d47, 0x2104, 0xa005, 0x0040, 0x12f1, 0x1078, + 0x1ef1, 0x2071, 0x4d40, 0x70a4, 0xa005, 0x0040, 0x130c, 0x7450, + 0xa485, 0x0000, 0x0040, 0x130c, 0x2079, 0x0100, 0x2091, 0x8000, + 0x72d4, 0xa28c, 0x303d, 0x2190, 0x1078, 0x2b0b, 0x2091, 0x8000, + 0x2091, 0x303d, 0x2079, 0x4d00, 0x2071, 0x0010, 0x0068, 0x1316, + 0x786c, 0xa065, 0x0040, 0x1316, 0x1078, 0x2356, 0x00e0, 0x12cf, + 0x1078, 0x49ba, 0x0078, 0x12cf, 0x133c, 0x133c, 0x133e, 0x133e, + 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363, + 0x134b, 0x134b, 0x134b, 0x134b, 0x133c, 0x133c, 0x133e, 0x133e, + 0x134b, 0x134b, 0x134b, 0x134b, 0x1356, 0x1356, 0x1363, 0x1363, + 0x134b, 0x134b, 0x134b, 0x134b, 0x0078, 0x133c, 0x007e, 0x107e, + 0x127e, 0x2091, 0x2400, 0x1078, 0x292b, 0x127f, 0x107f, 0x007f, + 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13c8, + 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, + 0x127e, 0x2091, 0x2300, 0x1078, 0x292b, 0x127f, 0x107f, 0x007f, + 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, + 0x1078, 0x292b, 0x2091, 0x2400, 0x1078, 0x292b, 0x127f, 0x107f, + 0x007f, 0x2091, 0x8001, 0x007c, 0x1394, 0x1394, 0x1396, 0x1396, + 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13ae, 0x13ae, 0x1396, 0x1396, + 0x13a3, 0x13a3, 0x13a3, 0x13a3, 0x13af, 0x13af, 0x13af, 0x13af, + 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, 0x13af, + 0x13af, 0x13af, 0x13af, 0x13af, 0x0078, 0x1394, 0x007e, 0x107e, + 0x127e, 0x2091, 0x2300, 0x1078, 0x292b, 0x127f, 0x107f, 0x007f, + 0x2091, 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x1078, 0x13d5, + 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007c, 0x107e, + 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x007e, 0x2071, 0x0100, 0x2069, + 0x4d40, 0x2079, 0x4d00, 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078, + 0x4c38, 0x007f, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, 0x107f, 0x007c, + 0x3c00, 0xa084, 0x0007, 0x0079, 0x13cd, 0x13de, 0x13de, 0x13e0, + 0x13e0, 0x13e5, 0x13e5, 0x13ea, 0x13ea, 0x3c00, 0xa084, 0x0003, + 0x0079, 0x13da, 0x13de, 0x13de, 0x13f3, 0x13f3, 0x1078, 0x290c, + 0x2091, 0x2200, 0x1078, 0x46dd, 0x007c, 0x2091, 0x2100, 0x1078, + 0x46dd, 0x007c, 0x2091, 0x2100, 0x1078, 0x46dd, 0x2091, 0x2200, + 0x1078, 0x46dd, 0x007c, 0x2091, 0x2100, 0x1078, 0x46dd, 0x007c, + 0x1418, 0x1418, 0x141a, 0x141a, 0x1427, 0x1427, 0x1427, 0x1427, + 0x1432, 0x1432, 0x143f, 0x143f, 0x1427, 0x1427, 0x1427, 0x1427, + 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, + 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, 0x1450, + 0x0078, 0x1418, 0x007e, 0x107e, 0x127e, 0x2091, 0x2400, 0x1078, + 0x292b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, + 0x107e, 0x127e, 0x1078, 0x13c8, 0x127f, 0x107f, 0x007f, 0x2091, + 0x8001, 0x007c, 0x007e, 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, + 0x292b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, 0x007e, + 0x107e, 0x127e, 0x2091, 0x2300, 0x1078, 0x292b, 0x2091, 0x2400, + 0x1078, 0x292b, 0x127f, 0x107f, 0x007f, 0x2091, 0x8001, 0x007c, + 0x007e, 0x107e, 0x127e, 0x0d7e, 0x0e7e, 0x0f7e, 0x2079, 0x4d00, + 0x2071, 0x0200, 0x2069, 0x4d40, 0x3d00, 0xd08c, 0x0040, 0x1466, + 0x70ec, 0xa084, 0x1c00, 0x78e2, 0x1078, 0x4c38, 0x3d00, 0xd084, + 0x0040, 0x1474, 0x2069, 0x4d80, 0x2071, 0x0100, 0x70ec, 0xa084, + 0x1c00, 0x78e6, 0x1078, 0x4c38, 0x0f7f, 0x0e7f, 0x0d7f, 0x127f, + 0x107f, 0x007f, 0x007c, 0x7008, 0x800b, 0x00c8, 0x1489, 0x7007, + 0x0002, 0xa08c, 0x01e0, 0x00c0, 0x148a, 0xd09c, 0x0040, 0x1489, + 0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x15bd, 0x0068, 0x1513, + 0x2061, 0x0000, 0x6018, 0xd084, 0x00c0, 0x1513, 0x7828, 0xa005, + 0x00c0, 0x149e, 0x0010, 0x1514, 0x0078, 0x1513, 0x7910, 0xd1f4, + 0x0040, 0x14a6, 0x2001, 0x4007, 0x0078, 0x15bc, 0x7914, 0xd1ec, + 0x0040, 0x14c1, 0xd0fc, 0x0040, 0x14b7, 0x007e, 0x1078, 0x1d4b, + 0x007f, 0x0040, 0x14c1, 0x2001, 0x4007, 0x0078, 0x15bc, 0x007e, + 0x1078, 0x1d3b, 0x007f, 0x0040, 0x14c1, 0x2001, 0x4007, 0x0078, + 0x15bc, 0x7910, 0xd0fc, 0x00c0, 0x14cb, 0x2061, 0x4d40, 0xc19c, + 0xc7fc, 0x0078, 0x14cf, 0x2061, 0x4d80, 0xc19d, 0xc7fd, 0x6064, + 0xa005, 0x00c0, 0x1513, 0x7912, 0x6083, 0x0000, 0x7828, 0xc0fc, + 0xa086, 0x0018, 0x00c0, 0x14e0, 0x0c7e, 0x1078, 0x1b44, 0x0c7f, + 0x782b, 0x0000, 0x607c, 0xa065, 0x0040, 0x14f9, 0x0c7e, 0x609c, + 0x1078, 0x1e30, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c6d, 0x2009, + 0x0018, 0x6087, 0x0103, 0x1078, 0x1d5b, 0x00c0, 0x150d, 0x1078, + 0x1dad, 0x7810, 0xd09c, 0x00c0, 0x1501, 0x2061, 0x4d40, 0x0078, + 0x1505, 0x2061, 0x4d80, 0xc09c, 0x7812, 0x607f, 0x0000, 0x60d4, + 0xd0dc, 0x0040, 0x1511, 0xc0dc, 0x60d6, 0x2001, 0x4005, 0x0078, + 0x15bc, 0x0078, 0x15ba, 0x007c, 0x7810, 0xd0f4, 0x0040, 0x151c, + 0x2001, 0x4007, 0x0078, 0x15bc, 0xa006, 0x70c2, 0x70c6, 0x70ca, + 0x70ce, 0x70da, 0x70c0, 0xa03d, 0xa08a, 0x0040, 0x00c8, 0x152a, + 0x0079, 0x1531, 0x2100, 0xa08a, 0x0040, 0x00c8, 0x15c8, 0x0079, + 0x1571, 0x15ba, 0x1610, 0x15d9, 0x1648, 0x1680, 0x1680, 0x15d0, + 0x1c85, 0x168b, 0x15c8, 0x15dd, 0x15df, 0x15e1, 0x15e3, 0x1c8a, + 0x15c8, 0x1699, 0x16f6, 0x1b64, 0x1c7f, 0x15e5, 0x19d4, 0x1a16, + 0x1a4e, 0x1a9c, 0x198f, 0x199c, 0x19b0, 0x19c3, 0x17cb, 0x15c8, + 0x172d, 0x173a, 0x1746, 0x1752, 0x1768, 0x1774, 0x1777, 0x1783, + 0x178f, 0x1797, 0x17b3, 0x17bf, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x17d8, 0x17ea, 0x1806, 0x183c, 0x1864, 0x1874, 0x1877, 0x18a8, + 0x18d9, 0x18eb, 0x195e, 0x196e, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x197e, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x1caf, 0x1cb5, + 0x15c8, 0x15c8, 0x15c8, 0x1cb9, 0x1cfe, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x160a, 0x167a, 0x1693, 0x16f0, 0x1b5e, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x1d02, 0x1ca1, 0x1cab, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, 0x15c8, + 0x15c8, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, 0x15bc, 0x73ce, + 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, 0x15bd, 0x2061, + 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x007c, + 0x70c3, 0x4001, 0x0078, 0x15bd, 0x70c3, 0x4006, 0x0078, 0x15bd, + 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078, + 0x15ba, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x15ba, 0x0078, + 0x15ba, 0x0078, 0x15ba, 0x0078, 0x15ba, 0x2091, 0x8000, 0x70c3, + 0x0004, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3, + 0x0008, 0x2001, 0x000d, 0x70d6, 0x2079, 0x0000, 0x781b, 0x0001, + 0x2031, 0x0030, 0x2059, 0x1000, 0x2029, 0x041a, 0x2051, 0x0445, + 0x2061, 0x0447, 0x20c1, 0x0020, 0x2091, 0x5000, 0x2091, 0x4080, + 0x0078, 0x0418, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x1613, + 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, + 0x2099, 0x0030, 0x7003, 0x0001, 0x7007, 0x0006, 0x731a, 0x721e, + 0x7422, 0x7526, 0x2021, 0x0040, 0x81ff, 0x0040, 0x15ba, 0xa182, + 0x0040, 0x00c8, 0x162d, 0x2120, 0xa006, 0x2008, 0x8403, 0x7012, + 0x7007, 0x0004, 0x7007, 0x0001, 0x7008, 0xd0fc, 0x0040, 0x1634, + 0x7007, 0x0002, 0xa084, 0x01e0, 0x0040, 0x1642, 0x70c3, 0x4002, + 0x0078, 0x15bd, 0x24a8, 0x53a5, 0x0078, 0x1624, 0x0078, 0x15ba, + 0x2029, 0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x2098, + 0x20a1, 0x0030, 0x7003, 0x0000, 0x7007, 0x0006, 0x731a, 0x721e, + 0x7422, 0x7526, 0x2021, 0x0040, 0x7007, 0x0006, 0x81ff, 0x0040, + 0x15ba, 0xa182, 0x0040, 0x00c8, 0x1667, 0x2120, 0xa006, 0x2008, + 0x8403, 0x7012, 0x24a8, 0x53a6, 0x7007, 0x0001, 0x7008, 0xd0fc, + 0x0040, 0x166e, 0xa084, 0x01e0, 0x0040, 0x165c, 0x70c3, 0x4002, + 0x0078, 0x15bd, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x164b, + 0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1688, 0x200a, + 0x72ca, 0x0078, 0x15b9, 0x70c7, 0x0008, 0x70cb, 0x000d, 0x70cf, + 0x0008, 0x0078, 0x15ba, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, + 0x169c, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d0, + 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040, 0x16eb, 0xa40a, + 0x0040, 0x16ac, 0x00c8, 0x15bc, 0x8001, 0x7872, 0xa084, 0xfc00, + 0x0040, 0x16b9, 0x78ac, 0xc085, 0x78ae, 0x2001, 0x4005, 0x0078, + 0x15bc, 0x7b7e, 0x7a7a, 0x7e86, 0x7d82, 0x7c76, 0xa48c, 0xff00, + 0x0040, 0x16d1, 0x8407, 0x8004, 0x8004, 0x810c, 0x810c, 0x810f, + 0xa118, 0xa291, 0x0000, 0xa6b1, 0x0000, 0xa581, 0x0000, 0x0078, + 0x16db, 0x8407, 0x8004, 0x8004, 0xa318, 0xa291, 0x0000, 0xa6b1, + 0x0000, 0xa581, 0x0000, 0x731a, 0x721e, 0x7622, 0x7026, 0xa605, + 0x0040, 0x16e5, 0x7a10, 0xc2c5, 0x7a12, 0x78ac, 0xa084, 0xfffc, + 0x78ae, 0x0078, 0x16ee, 0x78ac, 0xc085, 0x78ae, 0x0078, 0x15ba, + 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x16f9, 0x2029, 0x0000, + 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce, + 0x74d6, 0xa005, 0x0040, 0x1728, 0xa40a, 0x0040, 0x1709, 0x00c8, + 0x15bc, 0x8001, 0x7892, 0xa084, 0xfc00, 0x0040, 0x1716, 0x78ac, + 0xc0c5, 0x78ae, 0x2001, 0x4005, 0x0078, 0x15bc, 0x7a9a, 0x7b9e, + 0x7da2, 0x7ea6, 0x2600, 0xa505, 0x0040, 0x1721, 0x7a10, 0xc2c5, + 0x7a12, 0x7c96, 0x78ac, 0xa084, 0xfcff, 0x78ae, 0x0078, 0x172b, + 0x78ac, 0xc0c5, 0x78ae, 0x0078, 0x15ba, 0x2009, 0x0000, 0x786c, + 0xa065, 0x0040, 0x1737, 0x8108, 0x6000, 0x0078, 0x1730, 0x7ac4, + 0x0078, 0x15b8, 0x2009, 0x4d48, 0x210c, 0x7810, 0xd0ec, 0x00c0, + 0x15b9, 0x2011, 0x4d88, 0x2214, 0x0078, 0x15b8, 0x2009, 0x4d49, + 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, 0x4d89, 0x2214, + 0x0078, 0x15b8, 0x2061, 0x4d40, 0x6128, 0x622c, 0x8214, 0x8214, + 0x8214, 0x7810, 0xd0ec, 0x00c0, 0x1766, 0x2061, 0x4d80, 0x6328, + 0x73da, 0x632c, 0x831c, 0x831c, 0x831c, 0x73de, 0x0078, 0x15b8, + 0x2009, 0x4d4c, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, + 0x4d8c, 0x2214, 0x0078, 0x15b8, 0x7918, 0x0078, 0x15b9, 0x2009, + 0x4d4d, 0x210c, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2011, 0x4d8d, + 0x2214, 0x0078, 0x15b8, 0x2009, 0x4d4e, 0x210c, 0x7810, 0xd0ec, + 0x00c0, 0x15b9, 0x2011, 0x4d8e, 0x2214, 0x0078, 0x15b8, 0x7920, + 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x7a24, 0x0078, 0x15b8, 0x71c4, + 0xd1fc, 0x00c0, 0x179f, 0x2011, 0x51c0, 0x0078, 0x17a1, 0x2011, + 0x5240, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa268, + 0x6a00, 0x6804, 0xd09c, 0x0040, 0x17b0, 0x6b08, 0x0078, 0x17b1, + 0x6b0c, 0x0078, 0x15b7, 0x77c4, 0x1078, 0x1dcb, 0x2091, 0x8000, + 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b7, 0x2061, + 0x4d40, 0x6118, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2061, 0x4d80, + 0x6218, 0x0078, 0x15b8, 0x77c4, 0x1078, 0x1dcb, 0x2091, 0x8000, + 0x6908, 0x6a18, 0x6b10, 0x77da, 0x2091, 0x8001, 0x0078, 0x15b7, + 0x71c4, 0x2110, 0xa294, 0x000f, 0xa282, 0x0010, 0x00c8, 0x15b2, + 0x1078, 0x2735, 0xa384, 0x4000, 0x0040, 0x17e8, 0xa295, 0x0020, + 0x0078, 0x15b7, 0x71c4, 0x2100, 0xc0bc, 0xa082, 0x0010, 0x00c8, + 0x15b2, 0xd1bc, 0x00c0, 0x17f9, 0x2011, 0x4d48, 0x2204, 0x0078, + 0x17fd, 0x2011, 0x4d88, 0x2204, 0xc0bd, 0x007e, 0x2100, 0xc0bc, + 0x2012, 0x1078, 0x2692, 0x017f, 0x0078, 0x15b9, 0x71c4, 0x2021, + 0x4d49, 0x2404, 0x70c6, 0x2019, 0x0000, 0x0078, 0x1815, 0x71c8, + 0x2021, 0x4d89, 0x2404, 0x70ca, 0xc3fd, 0x2011, 0x1834, 0x20a9, + 0x0008, 0x2204, 0xa106, 0x0040, 0x1824, 0x8210, 0x00f0, 0x1819, + 0x71c4, 0x72c8, 0x0078, 0x15b1, 0xa292, 0x1834, 0x027e, 0x2122, + 0x017f, 0x1078, 0x26b3, 0x7810, 0xd0ec, 0x00c0, 0x1832, 0xd3fc, + 0x0040, 0x180f, 0x0078, 0x15ba, 0x03e8, 0x00fa, 0x01f4, 0x02ee, + 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x4d40, 0x6128, 0x622c, + 0x8214, 0x8214, 0x8214, 0x70c4, 0x602a, 0x70c8, 0x8003, 0x8003, + 0x8003, 0x602e, 0x7810, 0xd0ec, 0x00c0, 0x1862, 0x027e, 0x017e, + 0x2061, 0x4d80, 0x6128, 0x622c, 0x8214, 0x8214, 0x8214, 0x70d8, + 0x602a, 0x70dc, 0x8003, 0x8003, 0x8003, 0x602e, 0x71da, 0x72de, + 0x017f, 0x027f, 0x0078, 0x15b8, 0x2061, 0x4d40, 0x6130, 0x70c4, + 0x6032, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x2061, 0x4d80, 0x6230, + 0x70c8, 0x6032, 0x0078, 0x15b8, 0x7918, 0x0078, 0x15b9, 0x71c4, + 0xa184, 0xffcf, 0x0040, 0x1883, 0x7810, 0xd0ec, 0x00c0, 0x15b2, + 0x72c8, 0x0078, 0x15b1, 0x2011, 0x4d4d, 0x2204, 0x2112, 0x007e, + 0x2019, 0x0000, 0x1078, 0x271a, 0x7810, 0xd0ec, 0x0040, 0x1893, + 0x017f, 0x0078, 0x15b9, 0x71c8, 0xa184, 0xffcf, 0x0040, 0x189c, + 0x2110, 0x71c4, 0x0078, 0x15b1, 0x2011, 0x4d8d, 0x2204, 0x2112, + 0x007e, 0xc3fd, 0x1078, 0x271a, 0x027f, 0x017f, 0x0078, 0x15b8, + 0x71c4, 0xa182, 0x0010, 0x0048, 0x18b4, 0x7810, 0xd0ec, 0x00c0, + 0x15b2, 0x72c8, 0x0078, 0x15b1, 0x2011, 0x4d4e, 0x2204, 0x007e, + 0x2112, 0x2019, 0x0000, 0x1078, 0x26f8, 0x7810, 0xd0ec, 0x0040, + 0x18c4, 0x017f, 0x0078, 0x15b9, 0x71c8, 0xa182, 0x0010, 0x0048, + 0x18cd, 0x2110, 0x71c4, 0x0078, 0x15b1, 0x2011, 0x4d8e, 0x2204, + 0x007e, 0x2112, 0xc3fd, 0x1078, 0x26f8, 0x027f, 0x017f, 0x0078, + 0x15b8, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x15b1, 0xa284, + 0xfffd, 0x00c0, 0x15b1, 0x2100, 0x7920, 0x7822, 0x2200, 0x7a24, + 0x7826, 0x0078, 0x15b8, 0x71c4, 0xd1fc, 0x00c0, 0x18f3, 0x2011, + 0x51c0, 0x0078, 0x18f5, 0x2011, 0x5240, 0x8107, 0xa084, 0x000f, + 0x8003, 0x8003, 0x8003, 0xa268, 0x2019, 0x0000, 0x72c8, 0x2091, + 0x8000, 0xa284, 0x0080, 0x0040, 0x190b, 0x6c14, 0x84ff, 0x00c0, + 0x190b, 0x6817, 0x0040, 0xa284, 0x0040, 0x0040, 0x1915, 0x6c10, + 0x84ff, 0x00c0, 0x1915, 0x6813, 0x0001, 0x6800, 0x007e, 0xa226, + 0x0040, 0x1932, 0x6a02, 0xd4ec, 0x0040, 0x191f, 0xc3a5, 0xd4e4, + 0x0040, 0x1923, 0xc39d, 0xd4f4, 0x0040, 0x1932, 0x810f, 0xd2f4, + 0x0040, 0x192e, 0x1078, 0x2777, 0x0078, 0x1932, 0x1078, 0x2755, + 0x0078, 0x1932, 0x72cc, 0x6808, 0xa206, 0x0040, 0x1954, 0xa2a4, + 0x00ff, 0x7814, 0xd0e4, 0x00c0, 0x1945, 0xa482, 0x0028, 0x0048, + 0x1951, 0x0040, 0x1951, 0x0078, 0x1949, 0xa482, 0x0043, 0x0048, + 0x1951, 0x71c4, 0x71c6, 0x027f, 0x72ca, 0x2091, 0x8001, 0x0078, + 0x15b3, 0x6a0a, 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f, + 0x6b0c, 0x71c4, 0x2091, 0x8001, 0x0078, 0x15b7, 0x77c4, 0x1078, + 0x1dcb, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, + 0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, 0x15b7, 0x70c4, 0x2061, + 0x4d40, 0x6118, 0x601a, 0x7810, 0xd0ec, 0x00c0, 0x15b9, 0x70c8, + 0x2061, 0x4d80, 0x6218, 0x601a, 0x0078, 0x15b8, 0x71c4, 0x72c8, + 0x73cc, 0xa182, 0x0010, 0x00c8, 0x15b2, 0x1078, 0x2799, 0xa384, + 0x4000, 0x0040, 0x198d, 0xa295, 0x0020, 0x0078, 0x15b7, 0x77c4, + 0x1078, 0x1dcb, 0x2091, 0x8000, 0x6a08, 0xc28d, 0x6a0a, 0x2091, + 0x8001, 0x2708, 0x0078, 0x15b8, 0x77c4, 0x1078, 0x1dcb, 0x2091, + 0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, + 0x19ab, 0x1078, 0x25ea, 0x2091, 0x8001, 0x2708, 0x0078, 0x15b8, + 0x77c4, 0x1078, 0x1dcb, 0x2091, 0x8000, 0x6a08, 0xc295, 0x6a0a, + 0x6804, 0xa005, 0x0040, 0x19be, 0x1078, 0x25ea, 0x2091, 0x8001, + 0x2708, 0x0078, 0x15b8, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, + 0x2051, 0x0020, 0x2091, 0x8000, 0x1078, 0x1de6, 0x2091, 0x8001, + 0x2708, 0x6a08, 0x0078, 0x15b8, 0x77c4, 0x7814, 0xd0e4, 0x00c0, + 0x19e8, 0xd7fc, 0x0040, 0x19e2, 0x1078, 0x1d4b, 0x0040, 0x19e8, + 0x0078, 0x15bc, 0x1078, 0x1d3b, 0x0040, 0x19e8, 0x0078, 0x15bc, + 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x1078, 0x1e6d, 0x00c0, + 0x1a12, 0x6818, 0xa005, 0x0040, 0x1a0c, 0x2708, 0x077e, 0x1078, + 0x27c9, 0x077f, 0x00c0, 0x1a0c, 0x2001, 0x0015, 0xd7fc, 0x00c0, + 0x1a05, 0x2061, 0x4d40, 0x0078, 0x1a08, 0xc0fd, 0x2061, 0x4d80, + 0x782a, 0x2091, 0x8001, 0x007c, 0x2091, 0x8001, 0x2001, 0x4005, + 0x0078, 0x15bc, 0x2091, 0x8001, 0x0078, 0x15ba, 0x77c4, 0x7814, + 0xd0e4, 0x00c0, 0x1a2a, 0xd7fc, 0x0040, 0x1a24, 0x1078, 0x1d4b, + 0x0040, 0x1a2a, 0x0078, 0x15bc, 0x1078, 0x1d3b, 0x0040, 0x1a2a, + 0x0078, 0x15bc, 0x77c6, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, + 0x0020, 0x2091, 0x8000, 0x1078, 0x1de6, 0x2009, 0x0016, 0xd7fc, + 0x00c0, 0x1a3e, 0x2061, 0x4d40, 0x0078, 0x1a41, 0x2061, 0x4d80, + 0xc1fd, 0x6067, 0x0003, 0x607f, 0x0000, 0x6776, 0x6083, 0x000f, + 0x792a, 0x1078, 0x25ea, 0x2091, 0x8001, 0x007c, 0x77c8, 0x77ca, + 0x77c4, 0x77c6, 0x7814, 0xd0e4, 0x00c0, 0x1a65, 0xd7fc, 0x0040, + 0x1a5f, 0x1078, 0x1d4b, 0x0040, 0x1a65, 0x0078, 0x15bc, 0x1078, + 0x1d3b, 0x0040, 0x1a65, 0x0078, 0x15bc, 0xa7bc, 0xff00, 0x2091, + 0x8000, 0x2009, 0x0017, 0xd7fc, 0x00c0, 0x1a72, 0x2061, 0x4d40, + 0x0078, 0x1a75, 0x2061, 0x4d80, 0xc1fd, 0x607f, 0x0000, 0x6067, + 0x0002, 0x6776, 0x6083, 0x000f, 0x792a, 0x1078, 0x25ea, 0x2091, + 0x8001, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0010, 0x2091, + 0x8000, 0x70c8, 0xa005, 0x0040, 0x1a90, 0x60d4, 0xc0fd, 0x60d6, + 0x1078, 0x1de6, 0x70c8, 0x6836, 0x8738, 0xa784, 0x001f, 0x00c0, + 0x1a90, 0x2091, 0x8001, 0x007c, 0x7814, 0xd0e4, 0x00c0, 0x1ab0, + 0x72c8, 0xd284, 0x0040, 0x1aaa, 0x1078, 0x1d4b, 0x0040, 0x1ab0, + 0x0078, 0x15bc, 0x1078, 0x1d3b, 0x0040, 0x1ab0, 0x0078, 0x15bc, + 0x72c8, 0x72ca, 0x78ac, 0xa084, 0x0003, 0x00c0, 0x1adb, 0x2039, + 0x0000, 0xd284, 0x0040, 0x1abd, 0xc7fd, 0x2041, 0x0021, 0x2049, + 0x0004, 0x2051, 0x0008, 0x1078, 0x1dcb, 0x2091, 0x8000, 0x6808, + 0xc0d4, 0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x001f, + 0x00c0, 0x1ac3, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, + 0x0f00, 0x00c0, 0x1ac3, 0x2091, 0x8000, 0x72c8, 0xd284, 0x00c0, + 0x1aed, 0x7810, 0xd0ec, 0x0040, 0x1ae9, 0x2069, 0x0100, 0x0078, + 0x1aef, 0x2069, 0x0200, 0x0078, 0x1aef, 0x2069, 0x0100, 0x6808, + 0xa084, 0xfffd, 0x680a, 0x6830, 0xd0b4, 0x0040, 0x1b0f, 0x684b, + 0x0004, 0x20a9, 0x0014, 0x6848, 0xd094, 0x0040, 0x1b01, 0x00f0, + 0x1afb, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xd084, 0x0040, + 0x1b0b, 0x00f0, 0x1b05, 0x20a9, 0x00fa, 0x00f0, 0x1b0d, 0x2079, + 0x4d00, 0x2009, 0x0018, 0x72c8, 0xd284, 0x00c0, 0x1b1b, 0x2061, + 0x4d40, 0x0078, 0x1b1e, 0x2061, 0x4d80, 0xc1fd, 0x792a, 0x6067, + 0x0001, 0x6083, 0x000f, 0x60a7, 0x0000, 0x60a8, 0x60b2, 0x60b6, + 0x60d4, 0xd0b4, 0x0040, 0x1b38, 0xc0b4, 0x60d6, 0x0c7e, 0x60b8, + 0xa065, 0x6008, 0xc0d4, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, + 0x60d4, 0xa084, 0x77ff, 0x60d6, 0x78ac, 0xc08d, 0x78ae, 0x681b, + 0x0047, 0x2091, 0x8001, 0x007c, 0xd7fc, 0x00c0, 0x1b4b, 0x2069, + 0x4d40, 0x0078, 0x1b4d, 0x2069, 0x4d80, 0x71c4, 0x71c6, 0x6916, + 0x81ff, 0x00c0, 0x1b55, 0x68a7, 0x0001, 0x78ac, 0xc08c, 0x78ae, + 0xd084, 0x00c0, 0x1b5d, 0x1078, 0x1ecd, 0x007c, 0x75d8, 0x74dc, + 0x75da, 0x74de, 0x0078, 0x1b67, 0x2029, 0x0000, 0x2520, 0x71c4, + 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079, 0x4d00, 0x7dde, + 0x7cda, 0x7bd6, 0x7ad2, 0x1078, 0x1da4, 0x0040, 0x1c69, 0x20a9, + 0x0005, 0x20a1, 0x4d14, 0x2091, 0x8000, 0x41a1, 0x2091, 0x8001, + 0x2009, 0x0040, 0x1078, 0x1fb8, 0x0040, 0x1b8a, 0x1078, 0x1dad, + 0x0078, 0x1c69, 0x6004, 0xa08c, 0x00ff, 0xa18e, 0x0009, 0x00c0, + 0x1b95, 0x007e, 0x1078, 0x2339, 0x007f, 0xa084, 0xff00, 0x8007, + 0x8009, 0x0040, 0x1c09, 0x0c7e, 0x2c68, 0x1078, 0x1da4, 0x0040, + 0x1bdb, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x1b9c, 0x609f, 0x0000, + 0x0c7f, 0x0c7e, 0x7ddc, 0x7cd8, 0x7bd4, 0x7ad0, 0xa290, 0x0040, + 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x7dde, 0x7cda, + 0x7bd6, 0x7ad2, 0x2c68, 0x689c, 0xa065, 0x0040, 0x1c08, 0x2009, + 0x0040, 0x1078, 0x1fb8, 0x00c0, 0x1bf2, 0x6004, 0xa084, 0x00ff, + 0xa086, 0x0002, 0x00c0, 0x1bdb, 0x6004, 0xa084, 0x00ff, 0xa086, + 0x000a, 0x00c0, 0x1bd7, 0x017e, 0x1078, 0x2335, 0x017f, 0x2d00, + 0x6002, 0x0078, 0x1baa, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e30, + 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1c6d, 0x2009, 0x0018, 0x6008, + 0xc0cd, 0x600a, 0x6004, 0x6086, 0x1078, 0x1d5b, 0x1078, 0x1dad, + 0x0078, 0x1c69, 0x0c7f, 0x0c7e, 0x609c, 0x1078, 0x1e30, 0x0c7f, + 0x609f, 0x0000, 0x1078, 0x1c6d, 0x2009, 0x0018, 0x6087, 0x0103, + 0x601b, 0x0003, 0x1078, 0x1d5b, 0x1078, 0x1dad, 0x0078, 0x1c69, + 0x0c7f, 0x7814, 0xd0e4, 0x00c0, 0x1c2e, 0x6114, 0xd1fc, 0x0040, + 0x1c17, 0x1078, 0x1d4b, 0x0040, 0x1c2e, 0x0078, 0x1c1b, 0x1078, + 0x1d3b, 0x0040, 0x1c2e, 0x2029, 0x0000, 0x2520, 0x2009, 0x0018, + 0x73c8, 0x72cc, 0x6087, 0x0103, 0x601b, 0x0021, 0x1078, 0x1d5b, + 0x1078, 0x1dad, 0x2001, 0x4007, 0x0078, 0x15bc, 0x74c4, 0x73c8, + 0x72cc, 0x6014, 0x2091, 0x8000, 0x0e7e, 0x2009, 0x0012, 0xd0fc, + 0x00c0, 0x1c3e, 0x2071, 0x4d40, 0x0078, 0x1c41, 0x2071, 0x4d80, + 0xc1fd, 0x792a, 0x7067, 0x0005, 0x71d4, 0xc1dc, 0x71d6, 0x736a, + 0x726e, 0x7472, 0x7076, 0x707b, 0x0000, 0x2c00, 0x707e, 0xa02e, + 0x2530, 0x611c, 0xa184, 0x0060, 0x0040, 0x1c58, 0x1078, 0x45a7, + 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x60af, 0x0000, 0x60b3, + 0x0000, 0x6714, 0x6023, 0x0000, 0x1078, 0x25ea, 0x2091, 0x8001, + 0x007c, 0x70c3, 0x4005, 0x0078, 0x15bd, 0x20a9, 0x0005, 0x2099, + 0x4d14, 0x2091, 0x8000, 0x530a, 0x2091, 0x8001, 0x2100, 0xa210, + 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4, + 0x70c7, 0x0000, 0x791e, 0x0078, 0x15ba, 0x71c4, 0x71c6, 0x2168, + 0x0078, 0x1c8c, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210, + 0x8d68, 0x8109, 0x00c0, 0x1c8e, 0xa285, 0x0000, 0x00c0, 0x1c9c, + 0x70c3, 0x4000, 0x0078, 0x1c9e, 0x70c3, 0x4003, 0x70ca, 0x0078, + 0x15bd, 0x7964, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x15b2, + 0x7966, 0x0078, 0x15ba, 0x7964, 0x71c6, 0x0078, 0x15ba, 0x7900, + 0x71c6, 0x71c4, 0x7902, 0x0078, 0x15ba, 0x7900, 0x71c6, 0x0078, + 0x15ba, 0x70c4, 0x2011, 0x0000, 0xa08c, 0x000d, 0x0040, 0x1cce, + 0x810c, 0x0048, 0x1cca, 0x8210, 0x810c, 0x810c, 0x0048, 0x1cca, + 0x8210, 0x810c, 0x81ff, 0x00c0, 0x15b3, 0x8210, 0x7a0e, 0xd28c, + 0x0040, 0x1cfa, 0x7910, 0xc1cd, 0x7912, 0x2009, 0x0021, 0x2019, + 0x0003, 0xd284, 0x0040, 0x1cf4, 0x8108, 0x2019, 0x0041, 0x2011, + 0x954e, 0x2312, 0x2019, 0x0042, 0x8210, 0x2312, 0x2019, 0x0043, + 0x8210, 0x2312, 0x2019, 0x0046, 0x8210, 0x2312, 0x2019, 0x0047, + 0x8210, 0x2312, 0x2019, 0x0006, 0x2011, 0x9553, 0x2112, 0x2011, + 0x9573, 0x2312, 0x7904, 0x7806, 0x0078, 0x15b9, 0x7804, 0x70c6, + 0x0078, 0x15ba, 0x71c4, 0xd1fc, 0x00c0, 0x1d0a, 0x2011, 0x51c0, + 0x0078, 0x1d0c, 0x2011, 0x5240, 0x8107, 0xa084, 0x000f, 0x8003, + 0x8003, 0x8003, 0xa268, 0x6a14, 0xd2b4, 0x0040, 0x1d1b, 0x2011, + 0x0001, 0x0078, 0x1d1d, 0x2011, 0x0000, 0x6b0c, 0x0078, 0x15b7, + 0x017e, 0x7814, 0xd0f4, 0x0040, 0x1d2d, 0x2001, 0x4007, 0x70db, + 0x0000, 0xa18d, 0x0001, 0x0078, 0x1d39, 0xd0fc, 0x0040, 0x1d38, + 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078, 0x1d39, + 0xa006, 0x017f, 0x007c, 0x017e, 0x7814, 0xd0f4, 0x0040, 0x1d48, + 0x2001, 0x4007, 0x70db, 0x0000, 0xa18d, 0x0001, 0x0078, 0x1d49, + 0xa006, 0x017f, 0x007c, 0x017e, 0x7814, 0xd0fc, 0x0040, 0x1d58, + 0x2001, 0x4007, 0x70db, 0x0001, 0xa18d, 0x0001, 0x0078, 0x1d59, + 0xa006, 0x017f, 0x007c, 0x7112, 0x721a, 0x731e, 0x7810, 0xd0c4, + 0x0040, 0x1d64, 0x7422, 0x7526, 0xac80, 0x0001, 0x8108, 0x810c, + 0x81a9, 0x8098, 0x20a1, 0x0030, 0x7003, 0x0000, 0x6084, 0x20a2, + 0x53a6, 0x7007, 0x0001, 0x7974, 0xa184, 0xff00, 0x0040, 0x1d81, + 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, + 0x1d84, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, 0x7a78, 0xa006, + 0xa211, 0x7d10, 0xd5c4, 0x0040, 0x1d91, 0x7b84, 0xa319, 0x7c80, + 0xa421, 0x7008, 0xd0fc, 0x0040, 0x1d91, 0x7003, 0x0001, 0x7007, + 0x0006, 0x711a, 0x721e, 0x7d10, 0xd5c4, 0x0040, 0x1da1, 0x7322, + 0x7426, 0xa084, 0x01e0, 0x007c, 0x7848, 0xa065, 0x0040, 0x1dac, + 0x2c04, 0x784a, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x4d00, + 0x7848, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1db8, 0x1078, 0x290c, + 0x784a, 0x0f7f, 0x007c, 0x2011, 0x9700, 0x7a4a, 0x7bc4, 0x8319, + 0x0040, 0x1dc8, 0xa280, 0x0032, 0x2012, 0x2010, 0x0078, 0x1dbf, + 0x2013, 0x0000, 0x007c, 0x017e, 0x027e, 0xd7fc, 0x00c0, 0x1dd4, + 0x2011, 0x52c0, 0x0078, 0x1dd6, 0x2011, 0x72c0, 0xa784, 0x0f00, + 0x800b, 0xa784, 0x001f, 0x0040, 0x1de1, 0x8003, 0x8003, 0x8003, + 0x8003, 0xa105, 0xa268, 0x027f, 0x017f, 0x007c, 0x1078, 0x1dcb, + 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808, 0xa084, 0xf9ef, 0xa80d, + 0x690a, 0x0e7e, 0xd7fc, 0x00c0, 0x1dfb, 0x2009, 0x4d53, 0x2071, + 0x4d40, 0x0078, 0x1dff, 0x2009, 0x4d93, 0x2071, 0x4d80, 0x210c, + 0x6804, 0xa005, 0x0040, 0x1e0f, 0xa116, 0x00c0, 0x1e0f, 0x2060, + 0x6000, 0x6806, 0x017e, 0x200b, 0x0000, 0x0078, 0x1e12, 0x2009, + 0x0000, 0x017e, 0x6804, 0xa065, 0x0040, 0x1e27, 0x6000, 0x6806, + 0x1078, 0x1e42, 0x1078, 0x2004, 0x6810, 0x7908, 0x8109, 0x790a, + 0x8001, 0x6812, 0x00c0, 0x1e12, 0x7910, 0xc1a5, 0x7912, 0x017f, + 0x6902, 0x6906, 0x2d00, 0x2060, 0x1078, 0x2a6d, 0x0e7f, 0x007c, + 0xa065, 0x0040, 0x1e41, 0x2008, 0x609c, 0xa005, 0x0040, 0x1e3e, + 0x2062, 0x609f, 0x0000, 0xa065, 0x0078, 0x1e34, 0x7848, 0x794a, + 0x2062, 0x007c, 0x6007, 0x0103, 0x608f, 0x0000, 0x20a9, 0x001c, + 0xac80, 0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, + 0x682c, 0x6022, 0x007c, 0x0e7e, 0xd7fc, 0x00c0, 0x1e5d, 0x2071, + 0x4d40, 0x2031, 0x4dc0, 0x0078, 0x1e61, 0x2071, 0x4d80, 0x2031, + 0x4fc0, 0x7050, 0xa08c, 0x0200, 0x00c0, 0x1e6b, 0xa608, 0x2d0a, + 0x8000, 0x7052, 0xa006, 0x0e7f, 0x007c, 0x0f7e, 0xd7fc, 0x00c0, + 0x1e75, 0x2079, 0x4d40, 0x0078, 0x1e77, 0x2079, 0x4d80, 0x1078, + 0x1dcb, 0x2091, 0x8000, 0x6804, 0x780a, 0xa065, 0x0040, 0x1ecb, + 0x0078, 0x1e89, 0x2c00, 0x780a, 0x2060, 0x6000, 0xa065, 0x0040, + 0x1ecb, 0x6010, 0xa306, 0x00c0, 0x1e82, 0x600c, 0xa206, 0x00c0, + 0x1e82, 0x2c28, 0x784c, 0xac06, 0x00c0, 0x1e98, 0x0078, 0x1ec8, + 0x6804, 0xac06, 0x00c0, 0x1ea6, 0x6000, 0x2060, 0x6806, 0xa005, + 0x00c0, 0x1ea6, 0x6803, 0x0000, 0x0078, 0x1eb0, 0x6400, 0x7808, + 0x2060, 0x6402, 0xa486, 0x0000, 0x00c0, 0x1eb0, 0x2c00, 0x6802, + 0x2560, 0x0f7f, 0x1078, 0x1e42, 0x0f7e, 0x601b, 0x0005, 0x6023, + 0x0020, 0x0f7f, 0x1078, 0x2004, 0x0f7e, 0x7908, 0x8109, 0x790a, + 0x6810, 0x8001, 0x6812, 0x00c0, 0x1ec8, 0x7810, 0xc0a5, 0x7812, + 0x2001, 0xffff, 0xa005, 0x0f7f, 0x007c, 0x077e, 0x2700, 0x2039, + 0x0000, 0xd0fc, 0x0040, 0x1ed5, 0xc7fd, 0x2041, 0x0021, 0x2049, + 0x0004, 0x2051, 0x0008, 0x2091, 0x8000, 0x1078, 0x1de6, 0x8738, + 0xa784, 0x001f, 0x00c0, 0x1edd, 0xa7bc, 0xff00, 0x873f, 0x8738, + 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1edd, 0x2091, 0x8001, 0x077f, + 0x007c, 0x786c, 0x2009, 0x9574, 0x210c, 0xa10d, 0x0040, 0x1efb, + 0xa065, 0x0078, 0x2356, 0x2061, 0x0000, 0x6018, 0xd084, 0x00c0, + 0x1f1b, 0x7810, 0xd08c, 0x0040, 0x1f0c, 0xc08c, 0x7812, 0xc7fc, + 0x2069, 0x4d40, 0x0078, 0x1f11, 0xc08d, 0x7812, 0x2069, 0x4d80, + 0xc7fd, 0x2091, 0x8000, 0x681c, 0x681f, 0x0000, 0x2091, 0x8001, + 0xa005, 0x00c0, 0x1f1c, 0x007c, 0xa08c, 0xfff0, 0x0040, 0x1f22, + 0x1078, 0x290c, 0x0079, 0x1f24, 0x1f34, 0x1f37, 0x1f3d, 0x1f41, + 0x1f35, 0x1f45, 0x1f35, 0x1f35, 0x1f35, 0x1f4b, 0x1f7c, 0x1f80, + 0x1f86, 0x1f9b, 0x1f35, 0x1f35, 0x007c, 0x1078, 0x290c, 0x1078, + 0x1ecd, 0x2001, 0x8001, 0x0078, 0x1fa7, 0x2001, 0x8003, 0x0078, + 0x1fa7, 0x2001, 0x8004, 0x0078, 0x1fa7, 0x1078, 0x1ecd, 0x2001, + 0x8006, 0x0078, 0x1fa7, 0x2091, 0x8000, 0x077e, 0xd7fc, 0x00c0, + 0x1f57, 0x2069, 0x4d40, 0x2039, 0x0009, 0x0078, 0x1f5b, 0x2069, + 0x4d80, 0x2039, 0x0009, 0x6800, 0xa086, 0x0000, 0x0040, 0x1f65, + 0x007f, 0x6f1e, 0x2091, 0x8001, 0x007c, 0x6874, 0x077f, 0xa0bc, + 0xff00, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, + 0x1de6, 0x8738, 0xa784, 0x001f, 0x00c0, 0x1f6f, 0x2091, 0x8001, + 0x2001, 0x800a, 0x0078, 0x1fa7, 0x2001, 0x800c, 0x0078, 0x1fa7, + 0x1078, 0x1ecd, 0x2001, 0x800d, 0x0078, 0x1fa7, 0x7814, 0xd0e4, + 0x00c0, 0x1f99, 0xd0ec, 0x0040, 0x1f93, 0xd7fc, 0x0040, 0x1f93, + 0x78e4, 0x0078, 0x1f94, 0x78e0, 0x70c6, 0x2001, 0x800e, 0x0078, + 0x1fa7, 0x0078, 0x1f35, 0xd7fc, 0x0040, 0x1fa1, 0x78ec, 0x0078, + 0x1fa2, 0x78e8, 0x70c6, 0x2001, 0x000d, 0x0078, 0x1fa7, 0x70c2, + 0xd7fc, 0x00c0, 0x1faf, 0x70db, 0x0000, 0x0078, 0x1fb1, 0x70db, + 0x0001, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x4080, 0x007c, + 0xac80, 0x0001, 0x81ff, 0x0040, 0x1fe3, 0x2099, 0x0030, 0x20a0, + 0x700c, 0xa084, 0x03ff, 0x0040, 0x1fc5, 0x7018, 0x007e, 0x701c, + 0x007e, 0x7020, 0x007e, 0x7024, 0x007e, 0x7112, 0x81ac, 0x721a, + 0x731e, 0x7422, 0x7526, 0x7003, 0x0001, 0x7007, 0x0001, 0x7008, + 0x800b, 0x00c8, 0x1fd7, 0x7007, 0x0002, 0xa08c, 0x01e0, 0x00c0, + 0x1fe3, 0x53a5, 0xa006, 0x7003, 0x0000, 0x7007, 0x0004, 0x007f, + 0x7026, 0x007f, 0x7022, 0x007f, 0x701e, 0x007f, 0x701a, 0x007c, + 0x2011, 0x0020, 0x2009, 0x0010, 0x6b0a, 0x6c0e, 0x6803, 0xfd00, + 0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, + 0x8109, 0x00c0, 0x1ff4, 0x007c, 0x6004, 0x6086, 0x2c08, 0x2063, + 0x0000, 0x7868, 0xa005, 0x796a, 0x0040, 0x2011, 0x2c02, 0x0078, + 0x2012, 0x796e, 0x007c, 0x0c7e, 0x2061, 0x4d00, 0x6887, 0x0103, + 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x2023, + 0x2d02, 0x0078, 0x2024, 0x616e, 0x0c7f, 0x007c, 0x2091, 0x8000, + 0x2c04, 0x786e, 0xa005, 0x00c0, 0x202e, 0x786a, 0x2091, 0x8001, + 0x609c, 0xa005, 0x0040, 0x2047, 0x0c7e, 0x2060, 0x2008, 0x609c, + 0xa005, 0x0040, 0x2043, 0x2062, 0x609f, 0x0000, 0xa065, 0x609c, + 0xa005, 0x00c0, 0x203b, 0x7848, 0x794a, 0x2062, 0x0c7f, 0x7848, + 0x2062, 0x609f, 0x0000, 0xac85, 0x0000, 0x00c0, 0x2051, 0x1078, + 0x290c, 0x784a, 0x007c, 0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, + 0x818e, 0x00c8, 0x205c, 0xa200, 0x00f0, 0x2057, 0x8086, 0x818e, + 0x007c, 0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x2082, 0xa11a, + 0x00c8, 0x2082, 0x8213, 0x818d, 0x0048, 0x2075, 0xa11a, 0x00c8, + 0x2076, 0x00f0, 0x206a, 0x0078, 0x207a, 0xa11a, 0x2308, 0x8210, + 0x00f0, 0x206a, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, + 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x207e, + 0x7d74, 0x70d0, 0xa506, 0x0040, 0x216e, 0x7810, 0x2050, 0x7800, + 0xd08c, 0x0040, 0x20aa, 0xdaec, 0x0040, 0x20aa, 0x0e7e, 0x2091, + 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x20a7, 0x7008, + 0x0e7f, 0xa086, 0x0008, 0x0040, 0x20aa, 0x0078, 0x216e, 0x0e7f, + 0x0078, 0x216e, 0x1078, 0x1da4, 0x0040, 0x216e, 0xa046, 0x7970, + 0x2500, 0x8000, 0xa112, 0x2009, 0x0040, 0x00c8, 0x20b9, 0x0078, + 0x20c0, 0x72d0, 0xa206, 0x0040, 0x20c0, 0x8840, 0x2009, 0x0080, + 0x0c7e, 0x7112, 0x7007, 0x0001, 0x2099, 0x0030, 0x20a9, 0x0020, + 0xac80, 0x0001, 0x20a0, 0x2061, 0x0000, 0x88ff, 0x0040, 0x20d2, + 0x1078, 0x1da4, 0x7008, 0xd0fc, 0x0040, 0x20d2, 0x7007, 0x0002, + 0x2091, 0x8001, 0xa08c, 0x01e0, 0x00c0, 0x2109, 0x53a5, 0x8cff, + 0x00c0, 0x20e7, 0x88ff, 0x0040, 0x2158, 0x0078, 0x20f1, 0x2c00, + 0x788e, 0x20a9, 0x0020, 0xac80, 0x0001, 0x20a0, 0x53a5, 0x0078, + 0x2158, 0xa046, 0x7218, 0x731c, 0xdac4, 0x0040, 0x20f9, 0x7420, + 0x7524, 0xa292, 0x0040, 0xa39b, 0x0000, 0xa4a3, 0x0000, 0xa5ab, + 0x0000, 0x721a, 0x731e, 0xdac4, 0x0040, 0x2109, 0x7422, 0x7526, + 0xa006, 0x7007, 0x0004, 0x0040, 0x2158, 0x8cff, 0x0040, 0x2112, + 0x1078, 0x1dad, 0x0c7f, 0x1078, 0x1dad, 0xa046, 0x7888, 0x8000, + 0x788a, 0xa086, 0x0002, 0x0040, 0x2138, 0x7a7c, 0x7b78, 0xdac4, + 0x0040, 0x2124, 0x7c84, 0x7d80, 0x7974, 0x8107, 0x8004, 0x8004, + 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x721a, + 0x731e, 0xdac4, 0x0040, 0x216e, 0x7422, 0x7526, 0x0078, 0x216e, + 0x6014, 0xd0fc, 0x00c0, 0x2140, 0x2069, 0x4d40, 0x0078, 0x2142, + 0x2069, 0x4d80, 0x2091, 0x8000, 0x681f, 0x0002, 0x88ff, 0x0040, + 0x214e, 0xa046, 0x788c, 0x2060, 0x0078, 0x2138, 0x788b, 0x0000, + 0x78ac, 0xa085, 0x0003, 0x78ae, 0x2091, 0x8001, 0x0078, 0x216e, + 0x0c7f, 0x788b, 0x0000, 0x1078, 0x2307, 0x6004, 0xa084, 0x000f, + 0x1078, 0x216f, 0x88ff, 0x0040, 0x216c, 0x788c, 0x2060, 0x6004, + 0xa084, 0x000f, 0x1078, 0x216f, 0x0078, 0x2088, 0x007c, 0x0079, + 0x2171, 0x2181, 0x219f, 0x21bd, 0x2181, 0x21ce, 0x2192, 0x2181, + 0x2181, 0x2181, 0x219d, 0x21bb, 0x2181, 0x2181, 0x2181, 0x2181, + 0x2181, 0x2039, 0x0400, 0x78bc, 0xa705, 0x78be, 0x6008, 0xa705, + 0x600a, 0x1078, 0x2211, 0x609c, 0x78ba, 0x609f, 0x0000, 0x1078, + 0x22f1, 0x007c, 0x78bc, 0xd0c4, 0x0040, 0x2198, 0x0078, 0x2181, + 0x601c, 0xc0bd, 0x601e, 0x0078, 0x21a5, 0x1078, 0x2339, 0x78bc, + 0xd0c4, 0x0040, 0x21a5, 0x0078, 0x2181, 0x78bf, 0x0000, 0x6004, + 0x8007, 0xa084, 0x00ff, 0x78b2, 0x8001, 0x0040, 0x21b8, 0x1078, + 0x2211, 0x0040, 0x21b8, 0x78bc, 0xc0c5, 0x78be, 0x0078, 0x21ba, + 0x0078, 0x2230, 0x007c, 0x1078, 0x2335, 0x78bc, 0xa08c, 0x0e00, + 0x00c0, 0x21c5, 0xd0c4, 0x00c0, 0x21c7, 0x0078, 0x2181, 0x1078, + 0x2211, 0x00c0, 0x21cd, 0x0078, 0x2230, 0x007c, 0x78bc, 0xd0c4, + 0x0040, 0x21d4, 0x0078, 0x2181, 0x78bf, 0x0000, 0x6714, 0x2011, + 0x0001, 0x22a8, 0x6018, 0xa084, 0x00ff, 0xa005, 0x0040, 0x21f4, + 0xa7bc, 0xff00, 0x20a9, 0x0020, 0xa08e, 0x0001, 0x0040, 0x21f4, + 0xa7bc, 0x8000, 0x2011, 0x0002, 0x20a9, 0x0100, 0xa08e, 0x0002, + 0x0040, 0x21f4, 0x0078, 0x220e, 0x1078, 0x1dcb, 0x2d00, 0x2091, + 0x8000, 0x682b, 0x0000, 0x682f, 0x0000, 0x6808, 0xa084, 0xffde, + 0x680a, 0xade8, 0x0010, 0x2091, 0x8001, 0x00f0, 0x21f7, 0x8211, + 0x0040, 0x220e, 0x20a9, 0x0100, 0x0078, 0x21f7, 0x1078, 0x1dad, + 0x007c, 0x609f, 0x0000, 0x78b4, 0xa06d, 0x2c00, 0x78b6, 0x00c0, + 0x221c, 0x78ba, 0x0078, 0x2224, 0x689e, 0x2d00, 0x6002, 0x78b8, + 0xad06, 0x00c0, 0x2224, 0x6002, 0x78b0, 0x8001, 0x78b2, 0x00c0, + 0x222f, 0x78bc, 0xc0c4, 0x78be, 0x78b8, 0x2060, 0xa006, 0x007c, + 0x0e7e, 0xa02e, 0x2530, 0x7dba, 0x7db6, 0x65ae, 0x65b2, 0x601c, + 0x60a2, 0x2048, 0xa984, 0xe1ff, 0x601e, 0xa984, 0x0060, 0x0040, + 0x2243, 0x1078, 0x45a7, 0x6596, 0x65a6, 0x669a, 0x66aa, 0x6714, + 0x2071, 0x4d80, 0xd7fc, 0x00c0, 0x224f, 0x2071, 0x4d40, 0xa784, + 0x0f00, 0x800b, 0xa784, 0x001f, 0x0040, 0x225a, 0x8003, 0x8003, + 0x8003, 0x8003, 0xa105, 0x71c4, 0xa168, 0x2700, 0x8007, 0xa084, + 0x000f, 0x8003, 0x8003, 0x8003, 0x71c8, 0xa100, 0x60c2, 0x2091, + 0x8000, 0x7810, 0xd0f4, 0x00c0, 0x2274, 0x6e08, 0xd684, 0x0040, + 0x228a, 0xd9fc, 0x00c0, 0x228a, 0x2091, 0x8001, 0x1078, 0x1e42, + 0x2091, 0x8000, 0x1078, 0x2004, 0x2091, 0x8001, 0x7814, 0xd0e4, + 0x00c0, 0x22ef, 0x7810, 0xd0f4, 0x0040, 0x22ef, 0x601b, 0x0021, + 0x0078, 0x22ef, 0x6024, 0xa096, 0x0001, 0x00c0, 0x2291, 0x8000, + 0x6026, 0x6a10, 0x6814, 0xa202, 0x0048, 0x22a4, 0x0040, 0x22a4, + 0x2091, 0x8001, 0x2039, 0x0200, 0x609c, 0x78ba, 0x609f, 0x0000, + 0x1078, 0x22f1, 0x0078, 0x22ef, 0x2c08, 0xd9fc, 0x0040, 0x22cc, + 0x6800, 0xa065, 0x0040, 0x22cc, 0x6a04, 0x7000, 0xa084, 0x0002, + 0x0040, 0x22c2, 0x704c, 0xa206, 0x00c0, 0x22c2, 0x6b04, 0x2160, + 0x2304, 0x6002, 0xa005, 0x00c0, 0x22be, 0x6902, 0x2260, 0x6102, + 0x0078, 0x22d8, 0x2d00, 0x2060, 0x1078, 0x2a6d, 0x6e08, 0x2160, + 0x6202, 0x6906, 0x0078, 0x22d8, 0x6800, 0x6902, 0xa065, 0x0040, + 0x22d4, 0x6102, 0x0078, 0x22d5, 0x6906, 0x2160, 0x6003, 0x0000, + 0x2160, 0xd9fc, 0x0040, 0x22df, 0xa6b4, 0xfffc, 0x6e0a, 0x6810, + 0x7d08, 0x8528, 0x7d0a, 0x8000, 0x6812, 0x2091, 0x8001, 0xd6b4, + 0x0040, 0x22ef, 0xa6b6, 0x0040, 0x6e0a, 0x1078, 0x1e53, 0x0e7f, + 0x007c, 0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x2004, + 0x2091, 0x8001, 0x78b8, 0xa065, 0x0040, 0x2304, 0x609c, 0x78ba, + 0x609f, 0x0000, 0x0078, 0x22f1, 0x78b6, 0x78ba, 0x007c, 0x7970, + 0x7874, 0x2818, 0xd384, 0x0040, 0x2311, 0x8000, 0xa112, 0x0048, + 0x2316, 0x8000, 0xa112, 0x00c8, 0x2326, 0xc384, 0x7a7c, 0x721a, + 0x7a78, 0x721e, 0xdac4, 0x0040, 0x2321, 0x7a84, 0x7222, 0x7a80, + 0x7226, 0xa006, 0xd384, 0x0040, 0x2326, 0x8000, 0x7876, 0x70d2, + 0x781c, 0xa005, 0x0040, 0x2334, 0x8001, 0x781e, 0x00c0, 0x2334, + 0x0068, 0x2334, 0x2091, 0x4080, 0x007c, 0x2039, 0x234d, 0x0078, + 0x233b, 0x2039, 0x2353, 0x2704, 0xa005, 0x0040, 0x234c, 0xac00, + 0x2068, 0x6908, 0x6810, 0x6912, 0x680a, 0x690c, 0x6814, 0x6916, + 0x680e, 0x8738, 0x0078, 0x233b, 0x007c, 0x0003, 0x0009, 0x000f, + 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x2041, 0x0000, + 0x780c, 0x0079, 0x235b, 0x252d, 0x2500, 0x235f, 0x23d8, 0x2039, + 0x9574, 0x2734, 0x7d10, 0x0078, 0x237f, 0x6084, 0xa086, 0x0103, + 0x00c0, 0x23c1, 0x6114, 0x6018, 0xa105, 0x0040, 0x2374, 0x86ff, + 0x00c0, 0x2390, 0x0078, 0x23c1, 0x8603, 0xa080, 0x9555, 0x620c, + 0x2202, 0x8000, 0x6210, 0x2202, 0x1078, 0x2026, 0x8630, 0xa68e, + 0x000f, 0x0040, 0x244c, 0x786c, 0xa065, 0x00c0, 0x2365, 0x7808, + 0xa602, 0x00c8, 0x2390, 0xd5ac, 0x00c0, 0x2390, 0x263a, 0x007c, + 0xa682, 0x0003, 0x00c8, 0x244c, 0x2091, 0x8000, 0x2069, 0x0000, + 0x6818, 0xd084, 0x00c0, 0x23bc, 0x2011, 0x9555, 0x2204, 0x70c6, + 0x8210, 0x2204, 0x70ca, 0xd684, 0x00c0, 0x23ac, 0x8210, 0x2204, + 0x70da, 0x8210, 0x2204, 0x70de, 0xa685, 0x8020, 0x70c2, 0x681b, + 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, 0x2091, + 0x8001, 0x203b, 0x0000, 0x007c, 0x7810, 0xc0ad, 0x7812, 0x0078, + 0x244c, 0x263a, 0x1078, 0x2537, 0x00c0, 0x255a, 0x786c, 0xa065, + 0x00c0, 0x2365, 0x2091, 0x8000, 0x7810, 0xa084, 0xffcf, 0x86ff, + 0x0040, 0x23d3, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0078, 0x255a, + 0x2039, 0x9574, 0x2734, 0x7d10, 0x0078, 0x23f4, 0x6084, 0xa086, + 0x0103, 0x00c0, 0x2435, 0x6114, 0x6018, 0xa105, 0x0040, 0x23ed, + 0x86ff, 0x00c0, 0x2405, 0x0078, 0x2435, 0xa680, 0x9555, 0x620c, + 0x2202, 0x1078, 0x2026, 0x8630, 0xa68e, 0x001e, 0x0040, 0x244c, + 0x786c, 0xa065, 0x00c0, 0x23de, 0x7808, 0xa602, 0x00c8, 0x2405, + 0xd5ac, 0x00c0, 0x2405, 0x263a, 0x007c, 0xa682, 0x0006, 0x00c8, + 0x244c, 0x2091, 0x8000, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, + 0x2430, 0x2011, 0x9555, 0x2009, 0x954e, 0x26a8, 0x211c, 0x2204, + 0x201a, 0x8108, 0x8210, 0x00f0, 0x2416, 0xa685, 0x8030, 0x70c2, 0x681b, 0x0001, 0x2091, 0x4080, 0x7810, 0xa084, 0xffcf, 0x7812, - 0x2091, 0x8001, 0xa006, 0x2009, 0x9275, 0x200a, 0x203a, 0x007c, - 0x7810, 0xc0ad, 0x7812, 0x0078, 0x2454, 0x263a, 0x1078, 0x253f, - 0x00c0, 0x254e, 0x786c, 0xa065, 0x00c0, 0x23eb, 0x2091, 0x8000, - 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0040, 0x244f, 0xc0ad, 0x7812, - 0x2091, 0x8001, 0x0078, 0x254e, 0x2091, 0x8000, 0x7007, 0x0004, - 0x7994, 0x70d4, 0xa102, 0x0048, 0x2465, 0x0040, 0x246f, 0x7b90, - 0xa302, 0x00c0, 0x246f, 0x0078, 0x2468, 0x8002, 0x00c0, 0x246f, + 0x2091, 0x8001, 0xa006, 0x2009, 0x9575, 0x200a, 0x203a, 0x007c, + 0x7810, 0xc0ad, 0x7812, 0x0078, 0x244c, 0x263a, 0x1078, 0x2537, + 0x00c0, 0x255a, 0x786c, 0xa065, 0x00c0, 0x23de, 0x2091, 0x8000, + 0x7810, 0xa084, 0xffcf, 0x86ff, 0x0040, 0x2447, 0xc0ad, 0x7812, + 0x2091, 0x8001, 0x0078, 0x255a, 0x2091, 0x8000, 0x7007, 0x0004, + 0x7994, 0x70d4, 0xa102, 0x0048, 0x245d, 0x0040, 0x2467, 0x7b90, + 0xa302, 0x00c0, 0x2467, 0x0078, 0x2460, 0x8002, 0x00c0, 0x2467, 0x263a, 0x7810, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x007c, 0xa184, - 0xff00, 0x0040, 0x247c, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, - 0x8007, 0xa100, 0x0078, 0x247f, 0x8107, 0x8004, 0x8004, 0x7a9c, + 0xff00, 0x0040, 0x2474, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, + 0x8007, 0xa100, 0x0078, 0x2477, 0x8107, 0x8004, 0x8004, 0x7a9c, 0xa210, 0x721a, 0x7a98, 0xa006, 0xa211, 0x721e, 0xd4c4, 0x0040, - 0x248f, 0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, - 0x0030, 0x7003, 0x0000, 0x2009, 0x9254, 0x260a, 0x8109, 0x2198, - 0x2104, 0xd084, 0x0040, 0x249d, 0x8633, 0xa6b0, 0x0002, 0x26a8, + 0x2487, 0x7aa4, 0xa211, 0x7222, 0x7aa0, 0xa211, 0x7226, 0x20a1, + 0x0030, 0x7003, 0x0000, 0x2009, 0x9554, 0x260a, 0x8109, 0x2198, + 0x2104, 0xd084, 0x0040, 0x2495, 0x8633, 0xa6b0, 0x0002, 0x26a8, 0x53a6, 0x8603, 0x7012, 0x7007, 0x0001, 0x7990, 0x7894, 0x8000, - 0xa10a, 0x00c8, 0x24ac, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, - 0x0040, 0x24bb, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, - 0xa100, 0x0078, 0x24be, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, - 0x7a78, 0xa006, 0xa211, 0xd4c4, 0x0040, 0x24ca, 0x7b84, 0xa319, - 0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0040, 0x24ca, 0xa084, 0x01e0, - 0x0040, 0x24ef, 0x7d10, 0x2031, 0x9254, 0x2634, 0x78a8, 0x8000, - 0x78aa, 0xd08c, 0x00c0, 0x24e4, 0x7007, 0x0006, 0x7004, 0xd094, - 0x00c0, 0x24de, 0x0078, 0x2456, 0x2069, 0x4a47, 0x206b, 0x0003, - 0x78ac, 0xa085, 0x0300, 0x78ae, 0xa006, 0x0078, 0x24f8, 0x2030, + 0xa10a, 0x00c8, 0x24a4, 0xa006, 0x2028, 0x7974, 0xa184, 0xff00, + 0x0040, 0x24b3, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, + 0xa100, 0x0078, 0x24b6, 0x8107, 0x8004, 0x8004, 0x797c, 0xa108, + 0x7a78, 0xa006, 0xa211, 0xd4c4, 0x0040, 0x24c2, 0x7b84, 0xa319, + 0x7c80, 0xa421, 0x7008, 0xd0fc, 0x0040, 0x24c2, 0xa084, 0x01e0, + 0x0040, 0x24e7, 0x7d10, 0x2031, 0x9554, 0x2634, 0x78a8, 0x8000, + 0x78aa, 0xd08c, 0x00c0, 0x24dc, 0x7007, 0x0006, 0x7004, 0xd094, + 0x00c0, 0x24d6, 0x0078, 0x244e, 0x2069, 0x4d47, 0x206b, 0x0003, + 0x78ac, 0xa085, 0x0300, 0x78ae, 0xa006, 0x0078, 0x24f0, 0x2030, 0x75d6, 0x2091, 0x4080, 0x7d96, 0x7d10, 0xa5ac, 0xffcf, 0x7d12, 0x2091, 0x8001, 0x78aa, 0x7007, 0x0006, 0x263a, 0x7003, 0x0001, - 0x711a, 0x721e, 0xd5c4, 0x0040, 0x2507, 0x7322, 0x7426, 0x007c, - 0x6084, 0xa086, 0x0103, 0x00c0, 0x252b, 0x6114, 0x6018, 0xa105, - 0x00c0, 0x252b, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x252b, + 0x711a, 0x721e, 0xd5c4, 0x0040, 0x24ff, 0x7322, 0x7426, 0x007c, + 0x6084, 0xa086, 0x0103, 0x00c0, 0x2523, 0x6114, 0x6018, 0xa105, + 0x00c0, 0x2523, 0x2069, 0x0000, 0x6818, 0xd084, 0x00c0, 0x2523, 0x600c, 0x70c6, 0x6010, 0x70ca, 0x70c3, 0x8020, 0x681b, 0x0001, - 0x2091, 0x4080, 0x1078, 0x203d, 0x0068, 0x252a, 0x786c, 0xa065, - 0x00c0, 0x2508, 0x007c, 0x1078, 0x253f, 0x00c0, 0x254e, 0x786c, - 0xa065, 0x00c0, 0x2508, 0x0078, 0x254e, 0x1078, 0x253f, 0x00c0, - 0x254e, 0x786c, 0xa065, 0x00c0, 0x2535, 0x0078, 0x254e, 0x1078, - 0x2554, 0x00c0, 0x2546, 0xa085, 0x0001, 0x007c, 0x1078, 0x2563, - 0x00c0, 0x254c, 0x2041, 0x0001, 0x7d10, 0x007c, 0x88ff, 0x0040, - 0x2553, 0x2091, 0x4080, 0x007c, 0x7b90, 0x7994, 0x70d4, 0xa102, - 0x00c0, 0x255d, 0xa385, 0x0000, 0x007c, 0x0048, 0x2561, 0xa302, - 0x007c, 0x8002, 0x007c, 0x7810, 0xd0ec, 0x0040, 0x257b, 0x0e7e, - 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x2578, - 0x7008, 0x0e7f, 0xa086, 0x0008, 0x0040, 0x257b, 0x0078, 0x25cc, - 0x0e7f, 0x0078, 0x25cc, 0xa184, 0xff00, 0x0040, 0x2588, 0x810f, - 0x810c, 0x810c, 0x8004, 0x8004, 0x8007, 0xa100, 0x0078, 0x258b, - 0x8107, 0x8004, 0x8004, 0x7a9c, 0x7b98, 0x7ca4, 0x7da0, 0xa210, - 0xa006, 0xa319, 0xa421, 0xa529, 0x2009, 0x0018, 0x6028, 0xa005, - 0x0040, 0x259c, 0x2009, 0x0040, 0x1078, 0x1d92, 0x0040, 0x25be, - 0x78a8, 0x8000, 0x78aa, 0xd08c, 0x00c0, 0x25cc, 0x6014, 0xd0fc, - 0x00c0, 0x25ae, 0x2069, 0x4a40, 0x0078, 0x25b0, 0x2069, 0x4a80, - 0x2091, 0x8000, 0x681f, 0x0003, 0x78ab, 0x0000, 0x78ac, 0xa085, - 0x0300, 0x78ae, 0x2091, 0x8001, 0x0078, 0x25cc, 0x78ab, 0x0000, - 0x1078, 0x203d, 0x7990, 0x7894, 0x8000, 0xa10a, 0x00c8, 0x25c9, - 0xa006, 0x7896, 0x70d6, 0xa006, 0x2071, 0x0010, 0x2091, 0x8001, - 0x007c, 0x2138, 0xd7fc, 0x00c0, 0x25d9, 0x2009, 0x4a59, 0x0078, - 0x25db, 0x2009, 0x4a99, 0x2091, 0x8000, 0x200a, 0x0f7e, 0xd7fc, - 0x00c0, 0x25f2, 0x2009, 0x4a40, 0x2001, 0x4a04, 0x2004, 0xd0ec, - 0x0040, 0x25ee, 0x2079, 0x0100, 0x0078, 0x25f6, 0x2079, 0x0200, - 0x0078, 0x25f6, 0x2009, 0x4a80, 0x2079, 0x0100, 0x2104, 0xa086, - 0x0000, 0x00c0, 0x260f, 0xd7fc, 0x00c0, 0x2602, 0x2009, 0x4a45, - 0x0078, 0x2604, 0x2009, 0x4a85, 0x2104, 0xa005, 0x00c0, 0x260f, - 0x7830, 0xa084, 0x00c0, 0x00c0, 0x260f, 0x781b, 0x0045, 0x0f7f, - 0x007c, 0x2009, 0x0002, 0x2069, 0x4a00, 0x6810, 0xd0ec, 0x00c0, - 0x2672, 0x2071, 0x4a80, 0x2079, 0x0100, 0x2021, 0x4cbf, 0x784b, - 0x000f, 0x2019, 0x4205, 0xd184, 0x0040, 0x2632, 0x6810, 0xd0ec, - 0x0040, 0x262e, 0x20a1, 0x012b, 0x0078, 0x2634, 0x20a1, 0x022b, - 0x0078, 0x2634, 0x20a1, 0x012b, 0x2304, 0xa005, 0x0040, 0x2641, - 0x789a, 0x8318, 0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318, 0x0078, - 0x2634, 0x789b, 0x0020, 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, - 0x8020, 0x00f0, 0x2645, 0x7003, 0x0000, 0x017e, 0xd18c, 0x2009, - 0x0000, 0x0040, 0x2654, 0xc1bd, 0x1078, 0x283d, 0x017f, 0x7020, - 0xa084, 0x000f, 0x007e, 0x6814, 0xd0e4, 0x007f, 0x00c0, 0x2664, - 0xa085, 0x6340, 0x0078, 0x2666, 0xa085, 0x62c0, 0x7806, 0x780f, - 0x9200, 0x7843, 0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7456, - 0x7053, 0x0000, 0x8109, 0x0040, 0x2685, 0x2071, 0x4a40, 0x6810, - 0xd0ec, 0x0040, 0x267f, 0x2079, 0x0100, 0x0078, 0x2681, 0x2079, - 0x0200, 0x2021, 0x4abf, 0x0078, 0x261f, 0x007c, 0x017e, 0xd1bc, - 0x00c0, 0x269a, 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, - 0x0040, 0x2696, 0x2011, 0x0101, 0x0078, 0x269c, 0x2011, 0x0201, - 0x0078, 0x269c, 0x2011, 0x0101, 0xa18c, 0x000f, 0x2204, 0xa084, - 0xfff0, 0xa105, 0x2012, 0x017f, 0x1078, 0x283d, 0x007c, 0xd3fc, - 0x00c0, 0x26ba, 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, - 0x0040, 0x26b6, 0x2011, 0x0101, 0x0078, 0x26bc, 0x2011, 0x0201, - 0x0078, 0x26bc, 0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x00f0, - 0x26be, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, - 0x007c, 0x2019, 0x0002, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x0040, - 0x26d6, 0x8319, 0x2009, 0x0101, 0x0078, 0x26d8, 0x2009, 0x0101, - 0x20a9, 0x0005, 0x8213, 0x00f0, 0x26da, 0xa294, 0x00e0, 0x2104, - 0xa084, 0xff1f, 0xa205, 0x200a, 0x8319, 0x0040, 0x26eb, 0x2009, - 0x0201, 0x0078, 0x26d8, 0x007c, 0xd3fc, 0x00c0, 0x26ff, 0x007e, - 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x26fb, 0x2011, - 0x0101, 0x0078, 0x2701, 0x2011, 0x0201, 0x0078, 0x2701, 0x2011, - 0x0101, 0x20a9, 0x000c, 0x810b, 0x00f0, 0x2703, 0xa18c, 0xf000, - 0x2204, 0xa084, 0x0fff, 0xa105, 0x2012, 0x007c, 0xd3fc, 0x00c0, - 0x2721, 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, 0x0040, - 0x271d, 0x2011, 0x0102, 0x0078, 0x2723, 0x2011, 0x0202, 0x0078, - 0x2723, 0x2011, 0x0102, 0x2204, 0xa084, 0xffcf, 0xa105, 0x2012, - 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x273d, 0x007e, 0x2001, 0x4a04, - 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2739, 0x2061, 0x0100, 0x0078, - 0x273f, 0x2061, 0x0200, 0x0078, 0x273f, 0x2061, 0x0100, 0xc1bc, - 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x62ac, 0x63ac, 0x0c7f, - 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x275d, 0x007e, 0x2001, 0x4a04, - 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2759, 0x2061, 0x0100, 0x0078, - 0x275f, 0x2061, 0x0200, 0x0078, 0x275f, 0x2061, 0x0100, 0xc1bc, - 0x8103, 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4, 0xa084, 0xffdf, - 0x60ae, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x277f, 0x007e, - 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x277b, 0x2061, - 0x0100, 0x0078, 0x2781, 0x2061, 0x0200, 0x0078, 0x2781, 0x2061, - 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, 0x609a, 0x60a4, - 0xa085, 0x0020, 0x60ae, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, - 0x27a1, 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, 0x0040, - 0x279d, 0x2061, 0x0100, 0x0078, 0x27a3, 0x2061, 0x0200, 0x0078, - 0x27a3, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, - 0x609a, 0x60a4, 0xa28c, 0x0020, 0x0040, 0x27b1, 0xc2ac, 0xa39d, - 0x4000, 0xc3fc, 0xd3b4, 0x00c0, 0x27b6, 0xc3fd, 0x62ae, 0x2010, - 0x60a4, 0x63ae, 0x2018, 0x0c7f, 0x007c, 0x2091, 0x8000, 0x0c7e, - 0x0e7e, 0x6818, 0xa005, 0x0040, 0x281b, 0xd1fc, 0x0040, 0x27cc, - 0x2061, 0x91d0, 0x0078, 0x27ce, 0x2061, 0x90c0, 0x1078, 0x2823, - 0x0040, 0x2801, 0x20a9, 0x0101, 0xd1fc, 0x0040, 0x27db, 0x2061, - 0x90d0, 0x0078, 0x27dd, 0x2061, 0x8fc0, 0x0c7e, 0x1078, 0x2823, - 0x0040, 0x27e8, 0x0c7f, 0x8c60, 0x00f0, 0x27dd, 0x0078, 0x281b, - 0x007f, 0xd1fc, 0x0040, 0x27f2, 0xa082, 0x90d0, 0x2071, 0x4a80, - 0x0078, 0x27f6, 0xa082, 0x8fc0, 0x2071, 0x4a40, 0x707a, 0x7176, - 0x2001, 0x0004, 0x7066, 0x7083, 0x000f, 0x1078, 0x25d1, 0x0078, - 0x2817, 0xd1fc, 0x00c0, 0x2808, 0x2071, 0x4a40, 0x0078, 0x280a, - 0x2071, 0x4a80, 0x6020, 0xc0dd, 0x6022, 0x7176, 0x2c00, 0x707e, - 0x2001, 0x0006, 0x7066, 0x7083, 0x000f, 0x1078, 0x25d1, 0x2001, - 0x0000, 0x0078, 0x281d, 0x2001, 0x0001, 0x2091, 0x8001, 0xa005, - 0x0e7f, 0x0c7f, 0x007c, 0x2c04, 0xa005, 0x0040, 0x283a, 0x2060, - 0x6010, 0xa306, 0x00c0, 0x2837, 0x600c, 0xa206, 0x00c0, 0x2837, - 0x6014, 0xa106, 0x00c0, 0x2837, 0xa006, 0x0078, 0x283c, 0x6000, - 0x0078, 0x2824, 0xa085, 0x0001, 0x007c, 0x0f7e, 0x0e7e, 0x017e, - 0xd1bc, 0x00c0, 0x2855, 0x2079, 0x4a40, 0x007e, 0x2001, 0x4a04, - 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2851, 0x2071, 0x0100, 0x0078, - 0x2859, 0x2071, 0x0200, 0x0078, 0x2859, 0x2079, 0x4a80, 0x2071, - 0x0100, 0x7920, 0xa18c, 0x000f, 0x70ec, 0xd0c4, 0x00c0, 0x2863, - 0x017f, 0x0078, 0x287e, 0x810b, 0x810b, 0x810b, 0x810b, 0x007f, - 0xd0bc, 0x00c0, 0x287b, 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, - 0x007f, 0x0040, 0x2877, 0xa18d, 0x0f00, 0x0078, 0x287d, 0xa18d, - 0x0f00, 0x0078, 0x287d, 0xa18d, 0x0800, 0x2104, 0x0e7f, 0x0f7f, - 0x007c, 0x0e7e, 0x2001, 0x4a01, 0x2004, 0xd0ac, 0x00c0, 0x28ea, - 0x68e4, 0xd0ac, 0x0040, 0x28ea, 0xa084, 0x0006, 0x00c0, 0x28ea, - 0x6014, 0xd0fc, 0x00c0, 0x2898, 0x2071, 0x4ec0, 0x0078, 0x289a, - 0x2071, 0x4f40, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, - 0xae70, 0x7004, 0xa084, 0x000a, 0x00c0, 0x28ea, 0x7108, 0xa194, - 0xff00, 0x0040, 0x28ea, 0xa18c, 0x00ff, 0x2001, 0x000a, 0xa106, - 0x0040, 0x28cd, 0x2001, 0x000c, 0xa106, 0x0040, 0x28d1, 0x2001, - 0x0012, 0xa106, 0x0040, 0x28d5, 0x2001, 0x0014, 0xa106, 0x0040, - 0x28d9, 0x2001, 0x0019, 0xa106, 0x0040, 0x28dd, 0x2001, 0x0032, - 0xa106, 0x0040, 0x28e1, 0x0078, 0x28e5, 0x2009, 0x000c, 0x0078, - 0x28e7, 0x2009, 0x0012, 0x0078, 0x28e7, 0x2009, 0x0014, 0x0078, - 0x28e7, 0x2009, 0x0019, 0x0078, 0x28e7, 0x2009, 0x0020, 0x0078, - 0x28e7, 0x2009, 0x003f, 0x0078, 0x28e7, 0x2011, 0x0000, 0x2100, - 0xa205, 0x700a, 0x0e7f, 0x007c, 0x0068, 0x28ec, 0x2091, 0x8000, - 0x2071, 0x0000, 0x007e, 0x7018, 0xd084, 0x00c0, 0x28f3, 0x007f, + 0x2091, 0x4080, 0x1078, 0x2026, 0x0068, 0x2522, 0x786c, 0xa065, + 0x00c0, 0x2500, 0x007c, 0x1078, 0x2537, 0x00c0, 0x255a, 0x786c, + 0xa065, 0x00c0, 0x2500, 0x0078, 0x255a, 0x1078, 0x2537, 0x00c0, + 0x255a, 0x786c, 0xa065, 0x00c0, 0x252d, 0x0078, 0x255a, 0x6084, + 0xa086, 0x0103, 0x00c0, 0x254b, 0x6018, 0xc0fc, 0x601a, 0xa086, + 0x0004, 0x00c0, 0x254b, 0x7804, 0xd0a4, 0x0040, 0x254b, 0x1078, + 0x2026, 0xa006, 0x007c, 0x1078, 0x2560, 0x00c0, 0x2552, 0xa085, + 0x0001, 0x007c, 0x1078, 0x256f, 0x00c0, 0x2558, 0x2041, 0x0001, + 0x7d10, 0x007c, 0x88ff, 0x0040, 0x255f, 0x2091, 0x4080, 0x007c, + 0x7b90, 0x7994, 0x70d4, 0xa102, 0x00c0, 0x2569, 0xa385, 0x0000, + 0x007c, 0x0048, 0x256d, 0xa302, 0x007c, 0x8002, 0x007c, 0x7810, + 0xd0ec, 0x0040, 0x2587, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x0020, + 0x7004, 0xa005, 0x00c0, 0x2584, 0x7008, 0x0e7f, 0xa086, 0x0008, + 0x0040, 0x2587, 0x0078, 0x25d8, 0x0e7f, 0x0078, 0x25d8, 0xa184, + 0xff00, 0x0040, 0x2594, 0x810f, 0x810c, 0x810c, 0x8004, 0x8004, + 0x8007, 0xa100, 0x0078, 0x2597, 0x8107, 0x8004, 0x8004, 0x7a9c, + 0x7b98, 0x7ca4, 0x7da0, 0xa210, 0xa006, 0xa319, 0xa421, 0xa529, + 0x2009, 0x0018, 0x6028, 0xa005, 0x0040, 0x25a8, 0x2009, 0x0040, + 0x1078, 0x1d5b, 0x0040, 0x25ca, 0x78a8, 0x8000, 0x78aa, 0xd08c, + 0x00c0, 0x25d8, 0x6014, 0xd0fc, 0x00c0, 0x25ba, 0x2069, 0x4d40, + 0x0078, 0x25bc, 0x2069, 0x4d80, 0x2091, 0x8000, 0x681f, 0x0003, + 0x78ab, 0x0000, 0x78ac, 0xa085, 0x0300, 0x78ae, 0x2091, 0x8001, + 0x0078, 0x25d8, 0x78ab, 0x0000, 0x1078, 0x2026, 0x7990, 0x7894, + 0x8000, 0xa10a, 0x00c8, 0x25d5, 0xa006, 0x7896, 0x70d6, 0xa006, + 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x2138, 0xd7fc, 0x00c0, + 0x25e5, 0x2009, 0x4d59, 0x0078, 0x25e7, 0x2009, 0x4d99, 0x2091, + 0x8000, 0x200a, 0x0f7e, 0xd7fc, 0x00c0, 0x25fe, 0x2009, 0x4d40, + 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x0040, 0x25fa, 0x2079, 0x0100, + 0x0078, 0x2602, 0x2079, 0x0200, 0x0078, 0x2602, 0x2009, 0x4d80, + 0x2079, 0x0100, 0x2104, 0xa086, 0x0000, 0x00c0, 0x261b, 0xd7fc, + 0x00c0, 0x260e, 0x2009, 0x4d45, 0x0078, 0x2610, 0x2009, 0x4d85, + 0x2104, 0xa005, 0x00c0, 0x261b, 0x7830, 0xa084, 0x00c0, 0x00c0, + 0x261b, 0x781b, 0x0045, 0x0f7f, 0x007c, 0x2009, 0x0002, 0x2069, + 0x4d00, 0x6810, 0xd0ec, 0x00c0, 0x267e, 0x2071, 0x4d80, 0x2079, + 0x0100, 0x2021, 0x4fbf, 0x784b, 0x000f, 0x2019, 0x43d2, 0xd184, + 0x0040, 0x263e, 0x6810, 0xd0ec, 0x0040, 0x263a, 0x20a1, 0x012b, + 0x0078, 0x2640, 0x20a1, 0x022b, 0x0078, 0x2640, 0x20a1, 0x012b, + 0x2304, 0xa005, 0x0040, 0x264d, 0x789a, 0x8318, 0x23ac, 0x8318, + 0x2398, 0x53a6, 0x3318, 0x0078, 0x2640, 0x789b, 0x0020, 0x20a9, + 0x0010, 0x78af, 0x0000, 0x78af, 0x8020, 0x00f0, 0x2651, 0x7003, + 0x0000, 0x017e, 0xd18c, 0x2009, 0x0000, 0x0040, 0x2660, 0xc1bd, + 0x1078, 0x2849, 0x017f, 0x7020, 0xa084, 0x000f, 0x007e, 0x6814, + 0xd0e4, 0x007f, 0x00c0, 0x2670, 0xa085, 0x6340, 0x0078, 0x2672, + 0xa085, 0x62c0, 0x7806, 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853, + 0x0080, 0x780b, 0x0008, 0x7456, 0x7053, 0x0000, 0x8109, 0x0040, + 0x2691, 0x2071, 0x4d40, 0x6810, 0xd0ec, 0x0040, 0x268b, 0x2079, + 0x0100, 0x0078, 0x268d, 0x2079, 0x0200, 0x2021, 0x4dbf, 0x0078, + 0x262b, 0x007c, 0x017e, 0xd1bc, 0x00c0, 0x26a6, 0x007e, 0x2001, + 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x26a2, 0x2011, 0x0101, + 0x0078, 0x26a8, 0x2011, 0x0201, 0x0078, 0x26a8, 0x2011, 0x0101, + 0xa18c, 0x000f, 0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x017f, + 0x1078, 0x2849, 0x007c, 0xd3fc, 0x00c0, 0x26c6, 0x007e, 0x2001, + 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x26c2, 0x2011, 0x0101, + 0x0078, 0x26c8, 0x2011, 0x0201, 0x0078, 0x26c8, 0x2011, 0x0101, + 0x20a9, 0x0009, 0x810b, 0x00f0, 0x26ca, 0xa18c, 0x0e00, 0x2204, + 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2019, 0x0002, 0x2001, + 0x4d04, 0x2004, 0xd0ec, 0x0040, 0x26e2, 0x8319, 0x2009, 0x0101, + 0x0078, 0x26e4, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x00f0, + 0x26e6, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, + 0x8319, 0x0040, 0x26f7, 0x2009, 0x0201, 0x0078, 0x26e4, 0x007c, + 0xd3fc, 0x00c0, 0x270b, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x2707, 0x2011, 0x0101, 0x0078, 0x270d, 0x2011, + 0x0201, 0x0078, 0x270d, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, + 0x00f0, 0x270f, 0xa18c, 0xf000, 0x2204, 0xa084, 0x0fff, 0xa105, + 0x2012, 0x007c, 0xd3fc, 0x00c0, 0x272d, 0x007e, 0x2001, 0x4d04, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2729, 0x2011, 0x0102, 0x0078, + 0x272f, 0x2011, 0x0202, 0x0078, 0x272f, 0x2011, 0x0102, 0x2204, + 0xa084, 0xffcf, 0xa105, 0x2012, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, + 0x2749, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x2745, 0x2061, 0x0100, 0x0078, 0x274b, 0x2061, 0x0200, 0x0078, + 0x274b, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0020, + 0x609a, 0x62ac, 0x63ac, 0x0c7f, 0x007c, 0x0c7e, 0xd1bc, 0x00c0, + 0x2769, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x2765, 0x2061, 0x0100, 0x0078, 0x276b, 0x2061, 0x0200, 0x0078, + 0x276b, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, 0xa080, 0x0022, + 0x609a, 0x60a4, 0xa084, 0xffdf, 0x60ae, 0x0c7f, 0x007c, 0x0c7e, + 0xd1bc, 0x00c0, 0x278b, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x2787, 0x2061, 0x0100, 0x0078, 0x278d, 0x2061, + 0x0200, 0x0078, 0x278d, 0x2061, 0x0100, 0xc1bc, 0x8103, 0x8003, + 0xa080, 0x0022, 0x609a, 0x60a4, 0xa085, 0x0020, 0x60ae, 0x0c7f, + 0x007c, 0x0c7e, 0xd1bc, 0x00c0, 0x27ad, 0x007e, 0x2001, 0x4d04, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x27a9, 0x2061, 0x0100, 0x0078, + 0x27af, 0x2061, 0x0200, 0x0078, 0x27af, 0x2061, 0x0100, 0xc1bc, + 0x8103, 0x8003, 0xa080, 0x0020, 0x609a, 0x60a4, 0xa28c, 0x0020, + 0x0040, 0x27bd, 0xc2ac, 0xa39d, 0x4000, 0xc3fc, 0xd3b4, 0x00c0, + 0x27c2, 0xc3fd, 0x62ae, 0x2010, 0x60a4, 0x63ae, 0x2018, 0x0c7f, + 0x007c, 0x2091, 0x8000, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, + 0x2827, 0xd1fc, 0x0040, 0x27d8, 0x2061, 0x94d0, 0x0078, 0x27da, + 0x2061, 0x93c0, 0x1078, 0x282f, 0x0040, 0x280d, 0x20a9, 0x0101, + 0xd1fc, 0x0040, 0x27e7, 0x2061, 0x93d0, 0x0078, 0x27e9, 0x2061, + 0x92c0, 0x0c7e, 0x1078, 0x282f, 0x0040, 0x27f4, 0x0c7f, 0x8c60, + 0x00f0, 0x27e9, 0x0078, 0x2827, 0x007f, 0xd1fc, 0x0040, 0x27fe, + 0xa082, 0x93d0, 0x2071, 0x4d80, 0x0078, 0x2802, 0xa082, 0x92c0, + 0x2071, 0x4d40, 0x707a, 0x7176, 0x2001, 0x0004, 0x7066, 0x7083, + 0x000f, 0x1078, 0x25dd, 0x0078, 0x2823, 0xd1fc, 0x00c0, 0x2814, + 0x2071, 0x4d40, 0x0078, 0x2816, 0x2071, 0x4d80, 0x6020, 0xc0dd, + 0x6022, 0x7176, 0x2c00, 0x707e, 0x2001, 0x0006, 0x7066, 0x7083, + 0x000f, 0x1078, 0x25dd, 0x2001, 0x0000, 0x0078, 0x2829, 0x2001, + 0x0001, 0x2091, 0x8001, 0xa005, 0x0e7f, 0x0c7f, 0x007c, 0x2c04, + 0xa005, 0x0040, 0x2846, 0x2060, 0x6010, 0xa306, 0x00c0, 0x2843, + 0x600c, 0xa206, 0x00c0, 0x2843, 0x6014, 0xa106, 0x00c0, 0x2843, + 0xa006, 0x0078, 0x2848, 0x6000, 0x0078, 0x2830, 0xa085, 0x0001, + 0x007c, 0x0f7e, 0x0e7e, 0x017e, 0xd1bc, 0x00c0, 0x2861, 0x2079, + 0x4d40, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, + 0x285d, 0x2071, 0x0100, 0x0078, 0x2865, 0x2071, 0x0200, 0x0078, + 0x2865, 0x2079, 0x4d80, 0x2071, 0x0100, 0x7920, 0xa18c, 0x000f, + 0x70ec, 0xd0c4, 0x00c0, 0x286f, 0x017f, 0x0078, 0x288a, 0x810b, + 0x810b, 0x810b, 0x810b, 0x007f, 0xd0bc, 0x00c0, 0x2887, 0x007e, + 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2883, 0xa18d, + 0x0f00, 0x0078, 0x2889, 0xa18d, 0x0f00, 0x0078, 0x2889, 0xa18d, + 0x0800, 0x2104, 0x0e7f, 0x0f7f, 0x007c, 0x0e7e, 0x2001, 0x4d01, + 0x2004, 0xd0ac, 0x00c0, 0x290a, 0x68e4, 0xd0ac, 0x0040, 0x290a, + 0xa084, 0x0006, 0x00c0, 0x290a, 0x6014, 0xd0fc, 0x00c0, 0x28a4, + 0x2071, 0x51c0, 0x0078, 0x28a6, 0x2071, 0x5240, 0x8007, 0xa084, + 0x000f, 0x8003, 0x8003, 0x8003, 0xae70, 0x7004, 0xa084, 0x000a, + 0x00c0, 0x290a, 0x7108, 0xa194, 0xff00, 0x0040, 0x290a, 0xa18c, + 0x00ff, 0x2001, 0x000a, 0xa106, 0x0040, 0x28d9, 0x2001, 0x000c, + 0xa106, 0x0040, 0x28dd, 0x2001, 0x0012, 0xa106, 0x0040, 0x28e1, + 0x2001, 0x0014, 0xa106, 0x0040, 0x28e5, 0x2001, 0x0019, 0xa106, + 0x0040, 0x28e9, 0x2001, 0x0032, 0xa106, 0x0040, 0x28ed, 0x0078, + 0x28f1, 0x2009, 0x000c, 0x0078, 0x28f3, 0x2009, 0x0012, 0x0078, + 0x28f3, 0x2009, 0x0014, 0x0078, 0x28f3, 0x2009, 0x0019, 0x0078, + 0x28f3, 0x2009, 0x0020, 0x0078, 0x28f3, 0x2009, 0x003f, 0x0078, + 0x28f3, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a, 0x2071, 0x4d00, + 0x7004, 0xd0bc, 0x0040, 0x290a, 0x6014, 0xd0fc, 0x00c0, 0x2905, + 0x70ea, 0x2071, 0x4d40, 0x0078, 0x2908, 0x70ee, 0x2071, 0x4d80, + 0x701f, 0x800f, 0x0e7f, 0x007c, 0x0068, 0x290c, 0x2091, 0x8000, + 0x2071, 0x0000, 0x007e, 0x7018, 0xd084, 0x00c0, 0x2913, 0x007f, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3, 0x8002, 0x70db, - 0x0809, 0x70df, 0x0000, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, - 0x4080, 0x0078, 0x2909, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, + 0x080d, 0x70df, 0x0008, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, + 0x4080, 0x0078, 0x2929, 0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x78a0, 0x708e, 0x7592, 0x7496, 0x769a, 0x779e, 0xa594, 0x003f, 0xd4f4, - 0x0040, 0x2920, 0xa784, 0x007d, 0x00c0, 0x417b, 0x1078, 0x28ec, - 0xa49c, 0x000f, 0xa382, 0x0004, 0x0050, 0x292b, 0xa3a6, 0x0007, - 0x00c0, 0x28ec, 0x2418, 0x8507, 0xa084, 0x000f, 0x0079, 0x2930, - 0x2f45, 0x3035, 0x3060, 0x32c1, 0x363b, 0x36a1, 0x3741, 0x37bd, - 0x38a1, 0x398a, 0x2943, 0x2940, 0x2d2a, 0x2e43, 0x360e, 0x2940, - 0x1078, 0x28ec, 0x007c, 0xa006, 0x0078, 0x294d, 0x7808, 0xc08d, + 0x0040, 0x2940, 0xa784, 0x007d, 0x00c0, 0x4348, 0x1078, 0x290c, + 0xa49c, 0x000f, 0xa382, 0x0004, 0x0050, 0x294b, 0xa3a6, 0x0007, + 0x00c0, 0x290c, 0x2418, 0x8507, 0xa084, 0x000f, 0x0079, 0x2950, + 0x2fc6, 0x30b5, 0x30e0, 0x3341, 0x372a, 0x379f, 0x3853, 0x38cf, + 0x39bd, 0x3aac, 0x2963, 0x2960, 0x2d99, 0x2eba, 0x36fb, 0x2960, + 0x1078, 0x290c, 0x007c, 0xa006, 0x0078, 0x296d, 0x7808, 0xc08d, 0x780a, 0xa006, 0x7002, 0x704e, 0x7046, 0x70d2, 0x7060, 0xa005, - 0x00c0, 0x2a64, 0x7064, 0xa084, 0x0007, 0x0079, 0x2957, 0x295f, - 0x29cf, 0x29d8, 0x29e3, 0x29ee, 0x2a4a, 0x29f9, 0x29cf, 0x7830, - 0xd0bc, 0x00c0, 0x2942, 0x71d4, 0xd1b4, 0x00c0, 0x29ac, 0x70a4, - 0xa086, 0x0001, 0x0040, 0x2942, 0x70b4, 0xa06d, 0x6800, 0xa065, - 0xa055, 0x789b, 0x0010, 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, - 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0040, 0x2982, 0x69bc, - 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0010, 0x0078, - 0x2bbd, 0x7060, 0xa005, 0x00c0, 0x2942, 0x0c7e, 0x0d7e, 0x70b4, + 0x00c0, 0x2ad3, 0x7064, 0xa084, 0x0007, 0x0079, 0x2977, 0x297f, + 0x29f2, 0x29fb, 0x2a06, 0x2a11, 0x2ab9, 0x2a1c, 0x29f2, 0x7830, + 0xd0bc, 0x00c0, 0x2962, 0x71d4, 0xd1bc, 0x00c0, 0x2962, 0xd1b4, + 0x00c0, 0x29cf, 0x70a4, 0xa086, 0x0001, 0x0040, 0x2962, 0x70b4, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, 0x0010, 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, 0xa05d, 0xa886, 0x0001, 0x0040, 0x29a5, 0x69bc, 0x7daa, 0x79aa, 0x68c0, 0xa04d, 0x6e1c, - 0x2001, 0x0020, 0x0078, 0x2bbd, 0x1078, 0x411c, 0x00c0, 0x2942, - 0x781b, 0x005b, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, - 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, 0x68bc, - 0x7042, 0xc1b4, 0x71d6, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x7003, - 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0x1078, - 0x411c, 0x00c0, 0x29d7, 0x781b, 0x0047, 0x7003, 0x0004, 0x007c, - 0x1078, 0x411c, 0x00c0, 0x29e2, 0x2011, 0x000c, 0x1078, 0x2a09, - 0x7003, 0x0004, 0x007c, 0x1078, 0x411c, 0x00c0, 0x29ed, 0x2011, - 0x0006, 0x1078, 0x2a09, 0x7003, 0x0004, 0x007c, 0x1078, 0x411c, - 0x00c0, 0x29f8, 0x2011, 0x000d, 0x1078, 0x2a09, 0x7003, 0x0004, - 0x007c, 0x1078, 0x411c, 0x00c0, 0x2a08, 0x2011, 0x0006, 0x1078, - 0x2a09, 0x707c, 0x707f, 0x0000, 0x2068, 0x704e, 0x7003, 0x0001, - 0x007c, 0x7174, 0xc1fc, 0x8107, 0x7882, 0x789b, 0x0010, 0xa286, - 0x000c, 0x00c0, 0x2a18, 0x7aaa, 0x2001, 0x0001, 0x0078, 0x2a2d, - 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, 0xa286, 0x000d, 0x0040, - 0x2a26, 0x7aaa, 0x2001, 0x0002, 0x0078, 0x2a2d, 0x78ab, 0x0020, - 0x7178, 0x79aa, 0x7aaa, 0x2001, 0x0004, 0x789b, 0x0060, 0x78aa, - 0x785b, 0x0004, 0x781b, 0x0108, 0x1078, 0x4131, 0x7083, 0x000f, - 0x70d4, 0xd0b4, 0x0040, 0x2a49, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, - 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, - 0x0c7f, 0x007c, 0x1078, 0x411c, 0x00c0, 0x2942, 0x707c, 0x2068, - 0x7774, 0x1078, 0x3fe1, 0x2c50, 0x1078, 0x41f0, 0x789b, 0x0010, - 0x6814, 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, - 0x2001, 0x0004, 0x0078, 0x2bc3, 0x1078, 0x411c, 0x00c0, 0x2942, - 0x789b, 0x0010, 0x7060, 0x2068, 0x6f14, 0x70d4, 0xd0b4, 0x0040, - 0x2a7e, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, - 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x1078, 0x3fe1, - 0x2c50, 0x1078, 0x41f0, 0x6824, 0xa005, 0x0040, 0x2a8f, 0xa082, - 0x0006, 0x0048, 0x2a8d, 0x0078, 0x2a8f, 0x6827, 0x0005, 0x6814, - 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, - 0x2001, 0x0003, 0x0078, 0x2bc3, 0xc28d, 0x72d6, 0x72c0, 0xa200, - 0xa015, 0x7154, 0x8108, 0xa12a, 0x0048, 0x2aa7, 0x71c0, 0x2164, - 0x6504, 0x85ff, 0x00c0, 0x2abe, 0x7156, 0x8421, 0x00c0, 0x2aa2, - 0x70d4, 0xd08c, 0x0040, 0x2aba, 0x70d0, 0xa005, 0x00c0, 0x2aba, - 0x70d3, 0x000a, 0x007c, 0x2200, 0x0078, 0x2aac, 0x70d4, 0xc08c, - 0x70d6, 0x70d3, 0x0000, 0x603c, 0xa005, 0x00c0, 0x2abb, 0x6708, - 0xa784, 0x073f, 0x0040, 0x2aed, 0xd7d4, 0x00c0, 0x2abb, 0xa784, - 0x0021, 0x00c0, 0x2abb, 0xa784, 0x0002, 0x0040, 0x2ade, 0xa784, - 0x0004, 0x0040, 0x2abb, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218, - 0x00c0, 0x2abb, 0xa784, 0x0100, 0x0040, 0x2aed, 0x6018, 0xa005, - 0x00c0, 0x2abb, 0xa7bc, 0xfeff, 0x670a, 0x2568, 0x6823, 0x0000, - 0x6e1c, 0xa684, 0x000e, 0x6318, 0x0040, 0x2afe, 0x601c, 0xa302, - 0x0048, 0x2b01, 0x0040, 0x2b01, 0x0078, 0x2abb, 0x83ff, 0x00c0, - 0x2abb, 0x2d58, 0x2c50, 0x7156, 0xd7bc, 0x00c0, 0x2b09, 0x7028, - 0x6022, 0xc7bc, 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, - 0x2041, 0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, - 0x0040, 0x2b1d, 0xd684, 0x0040, 0x2b1f, 0xa39c, 0xffbf, 0xd6a4, - 0x0040, 0x2b24, 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2b6f, - 0xc7a5, 0x670a, 0x2c00, 0x68c6, 0x77a4, 0xa786, 0x0001, 0x00c0, - 0x2b43, 0x70d4, 0xd0b4, 0x00c0, 0x2b43, 0x7000, 0xa082, 0x0002, - 0x00c8, 0x2b43, 0x7830, 0xd0bc, 0x00c0, 0x2b43, 0x789b, 0x0010, - 0x7baa, 0x0078, 0x2bbb, 0x8739, 0x77a6, 0x2750, 0x77b0, 0xa7b0, - 0x0005, 0x70ac, 0xa606, 0x00c0, 0x2b4e, 0x76a8, 0x76b2, 0x2c3a, - 0x8738, 0x2d3a, 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, - 0x7830, 0xd0bc, 0x0040, 0x2b66, 0x2091, 0x8000, 0x2091, 0x303d, - 0x70d4, 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000, - 0x0040, 0x2b6e, 0x8421, 0x2200, 0x00c0, 0x2aa1, 0x007c, 0xd1dc, - 0x0040, 0x3be5, 0x2029, 0x0020, 0xd69c, 0x00c0, 0x2b7c, 0x8528, - 0xd68c, 0x00c0, 0x2b7c, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, - 0xa18c, 0x00ff, 0x70cc, 0xa160, 0x2c64, 0x8cff, 0x0040, 0x2b9b, - 0x6014, 0xa706, 0x00c0, 0x2b84, 0x60b8, 0x8001, 0x60ba, 0x00c0, - 0x2b7f, 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, - 0x00c0, 0x2aa1, 0x007c, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, - 0x8840, 0x6008, 0xc0d5, 0x600a, 0x77a4, 0xa786, 0x0001, 0x00c0, - 0x2b43, 0x70d4, 0xd0b4, 0x00c0, 0x2b43, 0x7000, 0xa082, 0x0002, - 0x00c8, 0x2b43, 0x7830, 0xd0bc, 0x00c0, 0x2b43, 0x789b, 0x0010, - 0x7baa, 0x7daa, 0x79aa, 0x2001, 0x0002, 0x007e, 0x6018, 0x8000, - 0x601a, 0x0078, 0x2bc4, 0x007e, 0x2960, 0x6104, 0x2a60, 0xa184, - 0x0018, 0x0040, 0x2be0, 0xa184, 0x0010, 0x0040, 0x2bd3, 0x1078, - 0x3df6, 0x00c0, 0x2c05, 0xa184, 0x0008, 0x0040, 0x2be0, 0x69a0, - 0xa184, 0x0600, 0x00c0, 0x2be0, 0x1078, 0x3cda, 0x0078, 0x2c05, - 0x69a0, 0xa184, 0x1e00, 0x0040, 0x2c10, 0xa184, 0x0800, 0x0040, - 0x2bf9, 0x0c7e, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, - 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x1078, 0x3df6, 0x00c0, 0x2c05, - 0x69a0, 0xa184, 0x0200, 0x0040, 0x2c01, 0x1078, 0x3d3a, 0x0078, - 0x2c05, 0xa184, 0x0400, 0x00c0, 0x2bdc, 0x69a0, 0xa184, 0x1000, - 0x0040, 0x2c10, 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x2749, - 0x027f, 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x2c1d, 0xa086, - 0x0060, 0x00c0, 0x2c1d, 0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, - 0x789b, 0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, - 0x0040, 0x2c38, 0xc0fc, 0x7087, 0x0000, 0xa08a, 0x000d, 0x0050, - 0x2c36, 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, - 0x78aa, 0x3518, 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, - 0x20a0, 0x789b, 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, - 0x2898, 0x25a0, 0xa286, 0x0020, 0x00c0, 0x2c70, 0x70d4, 0xc0b5, - 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x6814, 0xc0fc, 0x8007, - 0x7882, 0xa286, 0x0002, 0x0040, 0x2ca6, 0x70a4, 0x8000, 0x70a6, - 0x74b4, 0xa498, 0x0005, 0x70ac, 0xa306, 0x00c0, 0x2c68, 0x73a8, - 0x73b6, 0xa286, 0x0010, 0x0040, 0x2942, 0x0d7f, 0x0c7f, 0x007c, - 0x7000, 0xa005, 0x00c0, 0x2c4e, 0xa286, 0x0002, 0x00c0, 0x2cc0, - 0x1078, 0x411c, 0x00c0, 0x2c4e, 0x6814, 0xc0fc, 0x8007, 0x7882, - 0x2091, 0x8000, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, 0x78d6, - 0x78de, 0x6898, 0x78d2, 0x78da, 0x2091, 0x8001, 0x7808, 0xc08d, - 0x780a, 0x127e, 0x0d7e, 0x0c7e, 0x70d4, 0xa084, 0x2700, 0x2090, - 0x0c7f, 0x0d7f, 0x127f, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003, - 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x7830, 0xd0bc, - 0x0040, 0x2cb2, 0x2091, 0x303d, 0x70d4, 0xa084, 0x303d, 0x2091, - 0x8000, 0x2090, 0x70a4, 0xa005, 0x00c0, 0x2cb7, 0x007c, 0x8421, - 0x0040, 0x2cb6, 0x7250, 0x70c0, 0xa200, 0xa015, 0x0078, 0x2aa1, - 0xa286, 0x0010, 0x00c0, 0x2cf1, 0x1078, 0x411c, 0x00c0, 0x2c4e, - 0x6814, 0xc0fc, 0x8007, 0x7882, 0x781b, 0x005b, 0x68b4, 0x785a, - 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, - 0x780a, 0x70a4, 0x8000, 0x70a6, 0x74b4, 0xa490, 0x0005, 0x70ac, - 0xa206, 0x00c0, 0x2ce4, 0x72a8, 0x72b6, 0x2900, 0x705a, 0x68bc, - 0x7042, 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, - 0x007c, 0x6bb4, 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, - 0x7882, 0x6b94, 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, - 0x005b, 0x2900, 0x705a, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, - 0xa605, 0x0040, 0x2d1c, 0x70d4, 0xa084, 0x2700, 0xa086, 0x2300, - 0x00c0, 0x2d16, 0x2009, 0x0000, 0x0078, 0x2d18, 0x2009, 0x0001, - 0xa284, 0x000f, 0x1079, 0x2d20, 0xad80, 0x0009, 0x7046, 0x007c, - 0x2d28, 0x45f7, 0x45f7, 0x45e4, 0x45f7, 0x2d28, 0x2d28, 0x2d28, - 0x1078, 0x28ec, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, 0x2079, - 0x4a00, 0x78ac, 0x0f7f, 0xd084, 0x0040, 0x2d4e, 0x7064, 0xa086, - 0x0001, 0x00c0, 0x2d3e, 0x7066, 0x0078, 0x2e27, 0x7064, 0xa086, - 0x0005, 0x00c0, 0x2d4c, 0x707c, 0x2068, 0x681b, 0x0004, 0x6817, - 0x0000, 0x6820, 0xc09d, 0x6822, 0x7067, 0x0000, 0x70a7, 0x0000, - 0x70a8, 0x70b2, 0x70b6, 0x70d4, 0xd0b4, 0x0040, 0x2d64, 0xc0b4, + 0x2001, 0x0010, 0x0078, 0x2c2c, 0x7060, 0xa005, 0x00c0, 0x2962, + 0x0c7e, 0x0d7e, 0x70b4, 0xa06d, 0x6800, 0xa065, 0xa055, 0x789b, + 0x0010, 0x6b0c, 0x7baa, 0x6808, 0xa045, 0x6d10, 0x6804, 0xa06d, + 0xa05d, 0xa886, 0x0001, 0x0040, 0x29c8, 0x69bc, 0x7daa, 0x79aa, + 0x68c0, 0xa04d, 0x6e1c, 0x2001, 0x0020, 0x0078, 0x2c2c, 0x1078, + 0x42e9, 0x00c0, 0x2962, 0x781b, 0x005b, 0x70bc, 0xa06d, 0x68b4, + 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, + 0xc08d, 0x780a, 0x68bc, 0x7042, 0xc1b4, 0x71d6, 0x70b8, 0xa065, + 0x68c0, 0x705a, 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, + 0x7046, 0x007c, 0x1078, 0x42e9, 0x00c0, 0x29fa, 0x781b, 0x0047, + 0x7003, 0x0004, 0x007c, 0x1078, 0x42e9, 0x00c0, 0x2a05, 0x2011, + 0x000c, 0x1078, 0x2a2c, 0x7003, 0x0004, 0x007c, 0x1078, 0x42e9, + 0x00c0, 0x2a10, 0x2011, 0x0006, 0x1078, 0x2a2c, 0x7003, 0x0004, + 0x007c, 0x1078, 0x42e9, 0x00c0, 0x2a1b, 0x2011, 0x000d, 0x1078, + 0x2a2c, 0x7003, 0x0004, 0x007c, 0x1078, 0x42e9, 0x00c0, 0x2a2b, + 0x2011, 0x0006, 0x1078, 0x2a2c, 0x707c, 0x707f, 0x0000, 0x2068, + 0x704e, 0x7003, 0x0001, 0x007c, 0x7174, 0xc1fc, 0x8107, 0x7882, + 0x789b, 0x0010, 0xa286, 0x000c, 0x00c0, 0x2a3b, 0x7aaa, 0x2001, + 0x0001, 0x0078, 0x2a50, 0xa18c, 0x001f, 0xa18d, 0x00c0, 0x79aa, + 0xa286, 0x000d, 0x0040, 0x2a49, 0x7aaa, 0x2001, 0x0002, 0x0078, + 0x2a50, 0x78ab, 0x0020, 0x7178, 0x79aa, 0x7aaa, 0x2001, 0x0004, + 0x789b, 0x0060, 0x78aa, 0x785b, 0x0004, 0x781b, 0x0110, 0x1078, + 0x42fe, 0x7083, 0x000f, 0x70d4, 0xd0b4, 0x0040, 0x2a6c, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, - 0x6018, 0x8001, 0x601a, 0x0c7f, 0x157e, 0x2011, 0x0004, 0x7164, - 0xa186, 0x0001, 0x0040, 0x2d7d, 0xa186, 0x0007, 0x00c0, 0x2d74, - 0x701f, 0x0005, 0x0078, 0x2d7d, 0x701f, 0x0001, 0x7067, 0x0000, - 0x70d4, 0xc0dd, 0x70d6, 0x0078, 0x2d7f, 0x7067, 0x0000, 0x2001, - 0x4a0a, 0x2004, 0xa084, 0x00ff, 0xa086, 0x0018, 0x0040, 0x2d8f, - 0x7018, 0x7016, 0xa005, 0x00c0, 0x2d8f, 0x70a7, 0x0001, 0x1078, - 0x4326, 0x20a9, 0x0010, 0x2039, 0x0000, 0x1078, 0x3edb, 0xa7b8, - 0x0100, 0x00f0, 0x2d95, 0x7000, 0x0079, 0x2d9e, 0x2dcd, 0x2db3, - 0x2db3, 0x2da8, 0x2dcd, 0x2dcd, 0x2dcd, 0x2da6, 0x1078, 0x28ec, - 0x7060, 0xa005, 0x0040, 0x2dcd, 0xad06, 0x00c0, 0x2db3, 0x6800, - 0x7062, 0x0078, 0x2dc5, 0x6820, 0xd084, 0x00c0, 0x2dc1, 0x6f14, - 0x1078, 0x3fe1, 0x6008, 0xc0d4, 0x600a, 0x1078, 0x3bb5, 0x0078, - 0x2dc5, 0x705c, 0x2060, 0x6800, 0x6002, 0x6a1a, 0x6817, 0x0000, - 0x6820, 0xc09d, 0x6822, 0x1078, 0x202a, 0xb284, 0x0400, 0x0040, - 0x2dd5, 0x2021, 0x91d0, 0x0078, 0x2dd7, 0x2021, 0x90c0, 0x1078, - 0x2e2c, 0xb284, 0x0400, 0x0040, 0x2de1, 0x2021, 0x4a98, 0x0078, - 0x2de3, 0x2021, 0x4a58, 0x1078, 0x2e2c, 0x20a9, 0x0101, 0xb284, - 0x0400, 0x0040, 0x2def, 0x2021, 0x90d0, 0x0078, 0x2df1, 0x2021, - 0x8fc0, 0x1078, 0x2e2c, 0x8420, 0x00f0, 0x2df1, 0xb284, 0x0300, - 0x0040, 0x2dfe, 0x2061, 0x4fc0, 0x0078, 0x2e00, 0x2061, 0x6fc0, - 0x2021, 0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0040, 0x2e1d, - 0x6018, 0x017e, 0x007e, 0x2011, 0x4a02, 0x220c, 0xa102, 0x2012, - 0x007f, 0x017f, 0xa102, 0x0050, 0x2e1d, 0x6012, 0x00c0, 0x2e1d, - 0x2011, 0x4a04, 0x2204, 0xc0a5, 0x2012, 0x601b, 0x0000, 0xace0, - 0x0010, 0x00f0, 0x2e04, 0x8421, 0x00c0, 0x2e02, 0x157f, 0x7003, - 0x0000, 0x704f, 0x0000, 0x007c, 0x047e, 0x2404, 0xa005, 0x0040, - 0x2e3f, 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817, 0x0000, 0x6820, - 0xc09d, 0x6822, 0x1078, 0x202a, 0x007f, 0x0078, 0x2e2e, 0x047f, - 0x2023, 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x2e49, 0x1078, - 0x28ec, 0x2300, 0x0079, 0x2e4c, 0x2e4f, 0x2eda, 0x2ef7, 0xa282, - 0x0002, 0x0040, 0x2e55, 0x1078, 0x28ec, 0x7064, 0x7067, 0x0000, - 0x7083, 0x0000, 0x0079, 0x2e5c, 0x2e64, 0x2e64, 0x2e66, 0x2ea6, - 0x3bf1, 0x2e64, 0x2ea6, 0x2e64, 0x1078, 0x28ec, 0x7774, 0x1078, - 0x3edb, 0x7774, 0xa7bc, 0x8f00, 0x1078, 0x3fe1, 0x6018, 0xa005, - 0x0040, 0x2e9d, 0xd7fc, 0x00c0, 0x2e79, 0x2021, 0x90c0, 0x0078, - 0x2e7b, 0x2021, 0x91d0, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078, - 0x2f12, 0x0040, 0x2e9d, 0x157e, 0x20a9, 0x0101, 0xd7fc, 0x00c0, - 0x2e8d, 0x2021, 0x8fc0, 0x0078, 0x2e8f, 0x2021, 0x90d0, 0x047e, - 0x2009, 0x0005, 0x2011, 0x0010, 0x1078, 0x2f12, 0x047f, 0x0040, - 0x2e9c, 0x8420, 0x00f0, 0x2e8f, 0x157f, 0x8738, 0xa784, 0x001f, - 0x00c0, 0x2e6c, 0x0078, 0x2946, 0x0078, 0x2946, 0x7774, 0x1078, - 0x3fe1, 0x6018, 0xa005, 0x0040, 0x2ed8, 0xd7fc, 0x00c0, 0x2eb4, - 0x2021, 0x90c0, 0x0078, 0x2eb6, 0x2021, 0x91d0, 0x2009, 0x0005, - 0x2011, 0x0020, 0x1078, 0x2f12, 0x0040, 0x2ed8, 0x157e, 0x20a9, - 0x0101, 0xd7fc, 0x00c0, 0x2ec8, 0x2021, 0x8fc0, 0x0078, 0x2eca, - 0x2021, 0x90d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, - 0x2f12, 0x047f, 0x0040, 0x2ed7, 0x8420, 0x00f0, 0x2eca, 0x157f, - 0x0078, 0x2946, 0x2200, 0x0079, 0x2edd, 0x2ee0, 0x2ee2, 0x2ee2, - 0x1078, 0x28ec, 0x2009, 0x0012, 0x7064, 0xa086, 0x0002, 0x0040, - 0x2eeb, 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0040, 0x2ef0, 0x691a, - 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078, 0x40c9, 0x2200, - 0x0079, 0x2efa, 0x2eff, 0x2ee2, 0x2efd, 0x1078, 0x28ec, 0x1078, - 0x4326, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3b7a, 0x1078, 0x3bd2, - 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3b6b, 0x0040, 0x3b7a, - 0x0078, 0x2946, 0x2404, 0xa005, 0x0040, 0x2f41, 0x2068, 0x2d04, - 0x007e, 0x6814, 0xa706, 0x0040, 0x2f21, 0x2d20, 0x007f, 0x0078, - 0x2f13, 0x007f, 0x2022, 0x691a, 0x6817, 0x0000, 0x6820, 0xa205, - 0x6822, 0x1078, 0x202a, 0x2021, 0x4a02, 0x241c, 0x8319, 0x2322, - 0x6010, 0x8001, 0x6012, 0x00c0, 0x2f3a, 0x2021, 0x4a04, 0x2404, - 0xc0a5, 0x2022, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x1078, 0x3bd2, - 0x007c, 0xa085, 0x0001, 0x0078, 0x2f40, 0x2300, 0x0079, 0x2f48, - 0x2f4d, 0x2f4b, 0x2fce, 0x1078, 0x28ec, 0x78e4, 0xa005, 0x00d0, - 0x2f84, 0x3208, 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, - 0x0040, 0x2f5e, 0xa18c, 0x0300, 0x0078, 0x2f60, 0xa18c, 0x0400, - 0x0040, 0x2f66, 0x0018, 0x2942, 0x0078, 0x2f68, 0x0028, 0x2942, - 0x2008, 0xa084, 0x0030, 0x00c0, 0x2f70, 0x781b, 0x005b, 0x007c, - 0x78ec, 0xa084, 0x0003, 0x0040, 0x2f6d, 0x2100, 0xa084, 0x0007, - 0x0079, 0x2f7a, 0x2fae, 0x2fb8, 0x2fa3, 0x2f82, 0x4111, 0x4111, - 0x2f82, 0x2fc3, 0x1078, 0x28ec, 0x7000, 0xa086, 0x0004, 0x00c0, - 0x2f9e, 0x7064, 0xa086, 0x0002, 0x00c0, 0x2f94, 0x2011, 0x0002, - 0x2019, 0x0000, 0x0078, 0x2e43, 0x7064, 0xa086, 0x0006, 0x0040, - 0x2f8e, 0x7064, 0xa086, 0x0004, 0x0040, 0x2f8e, 0x79e4, 0x2001, - 0x0003, 0x0078, 0x3304, 0x6818, 0xd0fc, 0x0040, 0x2fa9, 0x681b, - 0x001d, 0x1078, 0x3eae, 0x781b, 0x0061, 0x007c, 0x6818, 0xd0fc, - 0x0040, 0x2fb4, 0x681b, 0x001d, 0x1078, 0x3eae, 0x0078, 0x40ed, - 0x6818, 0xd0fc, 0x0040, 0x2fbe, 0x681b, 0x001d, 0x1078, 0x3eae, - 0x781b, 0x00ef, 0x007c, 0x6818, 0xd0fc, 0x0040, 0x2fc9, 0x681b, - 0x001d, 0x1078, 0x3eae, 0x781b, 0x00bf, 0x007c, 0xa584, 0x000f, - 0x00c0, 0x2feb, 0x7000, 0x0079, 0x2fd5, 0x2946, 0x2fdd, 0x2fdf, - 0x3b7a, 0x3b7a, 0x3b7a, 0x2fdd, 0x2fdd, 0x1078, 0x28ec, 0x1078, - 0x3bd2, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3b6b, 0x0040, - 0x3b7a, 0x0078, 0x2946, 0x78e4, 0xa005, 0x00d0, 0x2f84, 0x3208, - 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x2ffc, - 0xa18c, 0x0300, 0x0078, 0x2ffe, 0xa18c, 0x0400, 0x0040, 0x3004, - 0x0018, 0x2f84, 0x0078, 0x3006, 0x0028, 0x2f84, 0x2008, 0xa084, - 0x0030, 0x00c0, 0x300e, 0x781b, 0x005b, 0x007c, 0x78ec, 0xa084, - 0x0003, 0x0040, 0x300b, 0x2100, 0xa184, 0x0007, 0x0079, 0x3018, - 0x3027, 0x302b, 0x3022, 0x3020, 0x4111, 0x4111, 0x3020, 0x410b, - 0x1078, 0x28ec, 0x1078, 0x3eb6, 0x781b, 0x0061, 0x007c, 0x1078, - 0x3eb6, 0x0078, 0x40ed, 0x1078, 0x3eb6, 0x781b, 0x00ef, 0x007c, - 0x1078, 0x3eb6, 0x781b, 0x00bf, 0x007c, 0x2300, 0x0079, 0x3038, - 0x303d, 0x303b, 0x303f, 0x1078, 0x28ec, 0x0078, 0x37bd, 0x681b, - 0x0016, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x37bd, - 0x78ec, 0xa084, 0x0003, 0x0040, 0x37bd, 0xa184, 0x0100, 0x0040, - 0x3043, 0xa184, 0x0007, 0x0079, 0x3055, 0x305d, 0x302b, 0x2fa3, - 0x40c9, 0x4111, 0x4111, 0x40c9, 0x410b, 0x1078, 0x40d5, 0x007c, - 0xa282, 0x0005, 0x0050, 0x3066, 0x1078, 0x28ec, 0x2300, 0x0079, - 0x3069, 0x306c, 0x328b, 0x3296, 0x2200, 0x0079, 0x306f, 0x3089, - 0x3076, 0x3089, 0x3074, 0x326e, 0x1078, 0x28ec, 0x789b, 0x0018, - 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0048, 0x3e9d, 0xa08a, - 0x0004, 0x00c8, 0x3e9d, 0x0079, 0x3085, 0x3e9d, 0x3e9d, 0x3e9d, - 0x3e47, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x309a, - 0x0078, 0x3e9d, 0x7000, 0xa005, 0x00c0, 0x3090, 0x2011, 0x0004, - 0x0078, 0x3998, 0xa184, 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x3e9d, - 0x0079, 0x30a2, 0x30b4, 0x30b2, 0x30c9, 0x30cd, 0x318f, 0x3e9d, - 0x3e9d, 0x3191, 0x3e9d, 0x3e9d, 0x326a, 0x326a, 0x3e9d, 0x3e9d, - 0x3e9d, 0x326c, 0x1078, 0x28ec, 0xd6e4, 0x0040, 0x30bf, 0x2001, - 0x0300, 0x8000, 0x8000, 0x783a, 0x781b, 0x00ba, 0x007c, 0x6818, - 0xd0fc, 0x0040, 0x30c7, 0x681b, 0x001d, 0x0078, 0x30b7, 0x0078, - 0x40c9, 0x681b, 0x001d, 0x0078, 0x3ea7, 0x6920, 0x6922, 0xa684, - 0x1800, 0x00c0, 0x3121, 0x6820, 0xd084, 0x00c0, 0x3127, 0x6818, - 0xa086, 0x0008, 0x00c0, 0x30de, 0x681b, 0x0000, 0xd6d4, 0x0040, - 0x318c, 0xd6bc, 0x0040, 0x311e, 0x7087, 0x0000, 0x6818, 0xa084, - 0x003f, 0xa08a, 0x000d, 0x0050, 0x311e, 0xa08a, 0x000c, 0x7186, + 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x7014, 0xa005, 0x00c0, + 0x2a7b, 0x70d4, 0xd0b4, 0x0040, 0x2a7c, 0x70b8, 0xac06, 0x00c0, + 0x2a7c, 0x1078, 0x2a5b, 0x007c, 0x017e, 0x71a4, 0xa186, 0x0001, + 0x0040, 0x2aae, 0x0d7e, 0x027e, 0x2100, 0x2011, 0x0001, 0xa212, + 0x70b4, 0x2068, 0x6800, 0xac06, 0x0040, 0x2a95, 0x8211, 0x0040, + 0x2aac, 0x1078, 0x2ab0, 0x0078, 0x2a8a, 0x0c7e, 0x2100, 0x2011, + 0x0001, 0xa212, 0x70b4, 0x2068, 0x6800, 0x2060, 0x6008, 0xa084, + 0xfbef, 0x600a, 0x8211, 0x0040, 0x2aa9, 0x1078, 0x2ab0, 0x0078, + 0x2a9c, 0x70a7, 0x0001, 0x0c7f, 0x027f, 0x0d7f, 0x017f, 0x007c, + 0xade8, 0x0005, 0x70ac, 0xad06, 0x00c0, 0x2ab8, 0x70a8, 0x2068, + 0x007c, 0x1078, 0x42e9, 0x00c0, 0x2962, 0x707c, 0x2068, 0x7774, + 0x1078, 0x4187, 0x2c50, 0x1078, 0x43bd, 0x789b, 0x0010, 0x6814, + 0xa084, 0x001f, 0xc0bd, 0x78aa, 0x6e1c, 0x2041, 0x0001, 0x2001, + 0x0004, 0x0078, 0x2c32, 0x1078, 0x42e9, 0x00c0, 0x2962, 0x789b, + 0x0010, 0x7060, 0x2068, 0x6f14, 0x70d4, 0xd0b4, 0x0040, 0x2aed, + 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, + 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x1078, 0x4187, 0x2c50, + 0x1078, 0x43bd, 0x6824, 0xa005, 0x0040, 0x2afe, 0xa082, 0x0006, + 0x0048, 0x2afc, 0x0078, 0x2afe, 0x6827, 0x0005, 0x6814, 0xa084, + 0x001f, 0xc0bd, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001, + 0x0003, 0x0078, 0x2c32, 0xc28d, 0x72d6, 0x72c0, 0xa200, 0xa015, + 0x7154, 0x8108, 0xa12a, 0x0048, 0x2b16, 0x71c0, 0x2164, 0x6504, + 0x85ff, 0x00c0, 0x2b2d, 0x7156, 0x8421, 0x00c0, 0x2b11, 0x70d4, + 0xd08c, 0x0040, 0x2b29, 0x70d0, 0xa005, 0x00c0, 0x2b29, 0x70d3, + 0x000a, 0x007c, 0x2200, 0x0078, 0x2b1b, 0x70d4, 0xc08c, 0x70d6, + 0x70d3, 0x0000, 0x6034, 0xa005, 0x00c0, 0x2b2a, 0x6708, 0xa784, + 0x073f, 0x0040, 0x2b5c, 0xd7d4, 0x00c0, 0x2b2a, 0xa784, 0x0021, + 0x00c0, 0x2b2a, 0xa784, 0x0002, 0x0040, 0x2b4d, 0xa784, 0x0004, + 0x0040, 0x2b2a, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0218, 0x00c0, + 0x2b2a, 0xa784, 0x0100, 0x0040, 0x2b5c, 0x6018, 0xa005, 0x00c0, + 0x2b2a, 0xa7bc, 0xfeff, 0x670a, 0x2568, 0x6823, 0x0000, 0x6e1c, + 0xa684, 0x000e, 0x6318, 0x0040, 0x2b6d, 0x601c, 0xa302, 0x0048, + 0x2b70, 0x0040, 0x2b70, 0x0078, 0x2b2a, 0x83ff, 0x00c0, 0x2b2a, + 0x2d58, 0x2c50, 0x7156, 0xd7bc, 0x00c0, 0x2b78, 0x7028, 0x6022, + 0xc7bc, 0x670a, 0x68c0, 0xa065, 0xa04d, 0x6100, 0x2a60, 0x2041, + 0x0001, 0x6b14, 0xa39c, 0x001f, 0xa39d, 0x00c0, 0xd1fc, 0x0040, + 0x2b8c, 0xd684, 0x0040, 0x2b8e, 0xa39c, 0xffbf, 0xd6a4, 0x0040, + 0x2b93, 0xa39d, 0x0020, 0xa684, 0x000e, 0x00c0, 0x2bde, 0xc7a5, + 0x670a, 0x2c00, 0x68c6, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2bb2, + 0x70d4, 0xd0b4, 0x00c0, 0x2bb2, 0x7000, 0xa082, 0x0002, 0x00c8, + 0x2bb2, 0x7830, 0xd0bc, 0x00c0, 0x2bb2, 0x789b, 0x0010, 0x7baa, + 0x0078, 0x2c2a, 0x8739, 0x77a6, 0x2750, 0x77b0, 0xa7b0, 0x0005, + 0x70ac, 0xa606, 0x00c0, 0x2bbd, 0x76a8, 0x76b2, 0x2c3a, 0x8738, + 0x2d3a, 0x8738, 0x283a, 0x8738, 0x233a, 0x8738, 0x253a, 0x7830, + 0xd0bc, 0x0040, 0x2bd5, 0x2091, 0x8000, 0x2091, 0x303d, 0x70d4, + 0xa084, 0x303d, 0x2091, 0x8000, 0x2090, 0xaad5, 0x0000, 0x0040, + 0x2bdd, 0x8421, 0x2200, 0x00c0, 0x2b10, 0x007c, 0xd1dc, 0x0040, + 0x3d86, 0x2029, 0x0020, 0xd69c, 0x00c0, 0x2beb, 0x8528, 0xd68c, + 0x00c0, 0x2beb, 0x8528, 0x8840, 0x6f14, 0x610c, 0x8108, 0xa18c, + 0x00ff, 0x70cc, 0xa160, 0x2c64, 0x8cff, 0x0040, 0x2c0a, 0x6014, + 0xa706, 0x00c0, 0x2bf3, 0x60b8, 0x8001, 0x60ba, 0x00c0, 0x2bee, + 0x2a60, 0x6008, 0xa085, 0x0100, 0x600a, 0x2200, 0x8421, 0x00c0, + 0x2b10, 0x007c, 0x2a60, 0x610e, 0x69be, 0x2c00, 0x68c6, 0x8840, + 0x6008, 0xc0d5, 0x600a, 0x77a4, 0xa786, 0x0001, 0x00c0, 0x2bb2, + 0x70d4, 0xd0b4, 0x00c0, 0x2bb2, 0x7000, 0xa082, 0x0002, 0x00c8, + 0x2bb2, 0x7830, 0xd0bc, 0x00c0, 0x2bb2, 0x789b, 0x0010, 0x7baa, + 0x7daa, 0x79aa, 0x2001, 0x0002, 0x007e, 0x6018, 0x8000, 0x601a, + 0x0078, 0x2c33, 0x007e, 0x2960, 0x6104, 0x2a60, 0xa184, 0x0018, + 0x0040, 0x2c4f, 0xa184, 0x0010, 0x0040, 0x2c42, 0x1078, 0x3f99, + 0x00c0, 0x2c74, 0xa184, 0x0008, 0x0040, 0x2c4f, 0x69a0, 0xa184, + 0x0600, 0x00c0, 0x2c4f, 0x1078, 0x3e7c, 0x0078, 0x2c74, 0x69a0, + 0xa184, 0x1e00, 0x0040, 0x2c7f, 0xa184, 0x0800, 0x0040, 0x2c68, + 0x0c7e, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d, + 0x0010, 0x6106, 0x0c7f, 0x1078, 0x3f99, 0x00c0, 0x2c74, 0x69a0, + 0xa184, 0x0200, 0x0040, 0x2c70, 0x1078, 0x3edc, 0x0078, 0x2c74, + 0xa184, 0x0400, 0x00c0, 0x2c4b, 0x69a0, 0xa184, 0x1000, 0x0040, + 0x2c7f, 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x2755, 0x027f, + 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x2c8c, 0xa086, 0x0060, + 0x00c0, 0x2c8c, 0xa18d, 0x4000, 0xa18d, 0x0104, 0x69b6, 0x789b, + 0x0060, 0x2800, 0x78aa, 0x6818, 0xc0fd, 0x681a, 0xd6bc, 0x0040, + 0x2ca7, 0xc0fc, 0x7087, 0x0000, 0xa08a, 0x000d, 0x0050, 0x2ca5, + 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, 0x78aa, + 0x3518, 0x3340, 0x3428, 0x8000, 0x80ac, 0xaf80, 0x002b, 0x20a0, + 0x789b, 0x0000, 0xad80, 0x000b, 0x2098, 0x53a6, 0x23a8, 0x2898, + 0x25a0, 0xa286, 0x0020, 0x00c0, 0x2cdf, 0x70d4, 0xc0b5, 0x70d6, + 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x6814, 0xc0fc, 0x8007, 0x7882, + 0xa286, 0x0002, 0x0040, 0x2d15, 0x70a4, 0x8000, 0x70a6, 0x74b4, + 0xa498, 0x0005, 0x70ac, 0xa306, 0x00c0, 0x2cd7, 0x73a8, 0x73b6, + 0xa286, 0x0010, 0x0040, 0x2962, 0x0d7f, 0x0c7f, 0x007c, 0x7000, + 0xa005, 0x00c0, 0x2cbd, 0xa286, 0x0002, 0x00c0, 0x2d2f, 0x1078, + 0x42e9, 0x00c0, 0x2cbd, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x2091, + 0x8000, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, + 0x6898, 0x78d2, 0x78da, 0x2091, 0x8001, 0x7808, 0xc08d, 0x780a, + 0x127e, 0x0d7e, 0x0c7e, 0x70d4, 0xa084, 0x2700, 0x2090, 0x0c7f, + 0x0d7f, 0x127f, 0x2900, 0x705a, 0x68bc, 0x7042, 0x7003, 0x0002, + 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x7830, 0xd0bc, 0x0040, + 0x2d21, 0x2091, 0x303d, 0x70d4, 0xa084, 0x303d, 0x2091, 0x8000, + 0x2090, 0x70a4, 0xa005, 0x00c0, 0x2d26, 0x007c, 0x8421, 0x0040, + 0x2d25, 0x7250, 0x70c0, 0xa200, 0xa015, 0x0078, 0x2b10, 0xa286, + 0x0010, 0x00c0, 0x2d60, 0x1078, 0x42e9, 0x00c0, 0x2cbd, 0x6814, + 0xc0fc, 0x8007, 0x7882, 0x781b, 0x005b, 0x68b4, 0x785a, 0x6894, + 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0x7808, 0xc08d, 0x780a, + 0x70a4, 0x8000, 0x70a6, 0x74b4, 0xa490, 0x0005, 0x70ac, 0xa206, + 0x00c0, 0x2d53, 0x72a8, 0x72b6, 0x2900, 0x705a, 0x68bc, 0x7042, + 0x7003, 0x0002, 0x2d00, 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, + 0x6bb4, 0xa39d, 0x2000, 0x7b5a, 0x6814, 0xc0fc, 0x8007, 0x7882, + 0x6b94, 0x7bd6, 0x7bde, 0x6e98, 0x7ed2, 0x7eda, 0x781b, 0x005b, + 0x2900, 0x705a, 0x7202, 0x7808, 0xc08d, 0x780a, 0x2300, 0xa605, + 0x0040, 0x2d8b, 0x70d4, 0xa084, 0x2700, 0xa086, 0x2300, 0x00c0, + 0x2d85, 0x2009, 0x0000, 0x0078, 0x2d87, 0x2009, 0x0001, 0xa284, + 0x000f, 0x1079, 0x2d8f, 0xad80, 0x0009, 0x7046, 0x007c, 0x2d97, + 0x4834, 0x4834, 0x4821, 0x4834, 0x2d97, 0x2d97, 0x2d97, 0x1078, + 0x290c, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, 0x2079, 0x4d00, + 0x78ac, 0x0f7f, 0xd084, 0x0040, 0x2dbf, 0x7064, 0xa086, 0x0001, + 0x00c0, 0x2dad, 0x7066, 0x0078, 0x2e96, 0x7064, 0xa086, 0x0005, + 0x00c0, 0x2dbd, 0x707c, 0x2068, 0x681b, 0x0004, 0x6817, 0x0000, + 0x6820, 0xa084, 0x00ff, 0xc09d, 0x6822, 0x7067, 0x0000, 0x70a7, + 0x0000, 0x70a8, 0x70b2, 0x70b6, 0x1078, 0x2a5b, 0x157e, 0x2011, + 0x0004, 0x7164, 0xa186, 0x0001, 0x0040, 0x2ddf, 0xa186, 0x0007, + 0x00c0, 0x2dd6, 0x701f, 0x0005, 0x0078, 0x2ddf, 0x701f, 0x0001, + 0x7067, 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078, 0x2de1, 0x7067, + 0x0000, 0x2001, 0x4d0a, 0x2004, 0xa084, 0x00ff, 0xa086, 0x0018, + 0x0040, 0x2df1, 0x7018, 0x7016, 0xa005, 0x00c0, 0x2df1, 0x70a7, + 0x0001, 0x067e, 0x1078, 0x44fb, 0x20a9, 0x0010, 0x2039, 0x0000, + 0x1078, 0x4081, 0xa7b8, 0x0100, 0x00f0, 0x2df8, 0x067f, 0x7000, + 0x0079, 0x2e02, 0x2e3c, 0x2e17, 0x2e17, 0x2e0c, 0x2e3c, 0x2e3c, + 0x2e3c, 0x2e0a, 0x1078, 0x290c, 0x7060, 0xa005, 0x0040, 0x2e3c, + 0xad06, 0x00c0, 0x2e17, 0x6800, 0x7062, 0x0078, 0x2e29, 0x6820, + 0xd084, 0x00c0, 0x2e25, 0x6f14, 0x1078, 0x4187, 0x6008, 0xc0d4, + 0x600a, 0x1078, 0x3d56, 0x0078, 0x2e29, 0x705c, 0x2060, 0x6800, + 0x6002, 0xa684, 0x5f00, 0x681e, 0x6818, 0xd0fc, 0x0040, 0x2e31, + 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, 0x6820, 0xa084, 0x00ff, + 0xc09d, 0x6822, 0x1078, 0x2013, 0xb284, 0x0400, 0x0040, 0x2e44, + 0x2021, 0x94d0, 0x0078, 0x2e46, 0x2021, 0x93c0, 0x1078, 0x2e9b, + 0xb284, 0x0400, 0x0040, 0x2e50, 0x2021, 0x4d98, 0x0078, 0x2e52, + 0x2021, 0x4d58, 0x1078, 0x2e9b, 0x20a9, 0x0101, 0xb284, 0x0400, + 0x0040, 0x2e5e, 0x2021, 0x93d0, 0x0078, 0x2e60, 0x2021, 0x92c0, + 0x1078, 0x2e9b, 0x8420, 0x00f0, 0x2e60, 0xb284, 0x0300, 0x0040, + 0x2e6d, 0x2061, 0x52c0, 0x0078, 0x2e6f, 0x2061, 0x72c0, 0x2021, + 0x0002, 0x20a9, 0x0100, 0x6110, 0x81ff, 0x0040, 0x2e8c, 0x6018, + 0x017e, 0x007e, 0x2011, 0x4d02, 0x220c, 0xa102, 0x2012, 0x007f, + 0x017f, 0xa102, 0x0050, 0x2e8c, 0x6012, 0x00c0, 0x2e8c, 0x2011, + 0x4d04, 0x2204, 0xc0a5, 0x2012, 0x601b, 0x0000, 0xace0, 0x0010, + 0x00f0, 0x2e73, 0x8421, 0x00c0, 0x2e71, 0x157f, 0x7003, 0x0000, + 0x704f, 0x0000, 0x007c, 0x047e, 0x2404, 0xa005, 0x0040, 0x2eb6, + 0x2068, 0x6800, 0x007e, 0x6a1a, 0x6817, 0x0000, 0x682b, 0x0000, + 0x68b4, 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff, 0xc09d, + 0x6822, 0x1078, 0x2013, 0x007f, 0x0078, 0x2e9d, 0x047f, 0x2023, + 0x0000, 0x007c, 0xa282, 0x0003, 0x0050, 0x2ec0, 0x1078, 0x290c, + 0x2300, 0x0079, 0x2ec3, 0x2ec6, 0x2f51, 0x2f6e, 0xa282, 0x0002, + 0x0040, 0x2ecc, 0x1078, 0x290c, 0x7064, 0x7067, 0x0000, 0x7083, + 0x0000, 0x0079, 0x2ed3, 0x2edb, 0x2edb, 0x2edd, 0x2f1d, 0x3d92, + 0x2edb, 0x2f1d, 0x2edb, 0x1078, 0x290c, 0x7774, 0x1078, 0x4081, + 0x7774, 0xa7bc, 0x8f00, 0x1078, 0x4187, 0x6018, 0xa005, 0x0040, + 0x2f14, 0xd7fc, 0x00c0, 0x2ef0, 0x2021, 0x93c0, 0x0078, 0x2ef2, + 0x2021, 0x94d0, 0x2009, 0x0005, 0x2011, 0x0010, 0x1078, 0x2f89, + 0x0040, 0x2f14, 0x157e, 0x20a9, 0x0101, 0xd7fc, 0x00c0, 0x2f04, + 0x2021, 0x92c0, 0x0078, 0x2f06, 0x2021, 0x93d0, 0x047e, 0x2009, + 0x0005, 0x2011, 0x0010, 0x1078, 0x2f89, 0x047f, 0x0040, 0x2f13, + 0x8420, 0x00f0, 0x2f06, 0x157f, 0x8738, 0xa784, 0x001f, 0x00c0, + 0x2ee3, 0x0078, 0x2966, 0x0078, 0x2966, 0x7774, 0x1078, 0x4187, + 0x6018, 0xa005, 0x0040, 0x2f4f, 0xd7fc, 0x00c0, 0x2f2b, 0x2021, + 0x93c0, 0x0078, 0x2f2d, 0x2021, 0x94d0, 0x2009, 0x0005, 0x2011, + 0x0020, 0x1078, 0x2f89, 0x0040, 0x2f4f, 0x157e, 0x20a9, 0x0101, + 0xd7fc, 0x00c0, 0x2f3f, 0x2021, 0x92c0, 0x0078, 0x2f41, 0x2021, + 0x93d0, 0x047e, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x2f89, + 0x047f, 0x0040, 0x2f4e, 0x8420, 0x00f0, 0x2f41, 0x157f, 0x0078, + 0x2966, 0x2200, 0x0079, 0x2f54, 0x2f57, 0x2f59, 0x2f59, 0x1078, + 0x290c, 0x2009, 0x0012, 0x7064, 0xa086, 0x0002, 0x0040, 0x2f62, + 0x2009, 0x000e, 0x6818, 0xd0fc, 0x0040, 0x2f67, 0x691a, 0x7067, + 0x0000, 0x70d4, 0xc0dd, 0x70d6, 0x0078, 0x4296, 0x2200, 0x0079, + 0x2f71, 0x2f76, 0x2f59, 0x2f74, 0x1078, 0x290c, 0x1078, 0x44fb, + 0x7000, 0xa086, 0x0002, 0x00c0, 0x3d04, 0x1078, 0x3d73, 0x6008, + 0xa084, 0xfbef, 0x600a, 0x1078, 0x3cf5, 0x0040, 0x3d04, 0x0078, + 0x2966, 0x2404, 0xa005, 0x0040, 0x2fc2, 0x2068, 0x2d04, 0x007e, + 0x6814, 0xa706, 0x0040, 0x2f98, 0x2d20, 0x007f, 0x0078, 0x2f8a, + 0x007f, 0x2022, 0x691a, 0x6817, 0x0000, 0x682b, 0x0000, 0x68b4, + 0xa084, 0x5f00, 0x681e, 0x6820, 0xa084, 0x00ff, 0xa205, 0x6822, + 0x1078, 0x2013, 0x2021, 0x4d02, 0x241c, 0x8319, 0x2322, 0x6010, + 0x8001, 0x6012, 0x00c0, 0x2fb9, 0x2021, 0x4d04, 0x2404, 0xc0a5, + 0x2022, 0x6008, 0xa084, 0xf9ef, 0x600a, 0x1078, 0x2a7c, 0x1078, + 0x3d73, 0x007c, 0xa085, 0x0001, 0x0078, 0x2fc1, 0x2300, 0x0079, + 0x2fc9, 0x2fce, 0x2fcc, 0x304e, 0x1078, 0x290c, 0x78e4, 0xa005, + 0x00d0, 0x3004, 0x3208, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x2fdf, 0xa18c, 0x0300, 0x0078, 0x2fe1, 0xa18c, + 0x0400, 0x0040, 0x2fe7, 0x0018, 0x2962, 0x0078, 0x2fe9, 0x0028, + 0x2962, 0x2008, 0xa084, 0x0030, 0x00c0, 0x2ff0, 0x0078, 0x36fb, + 0x78ec, 0xa084, 0x0003, 0x0040, 0x2fee, 0x2100, 0xa084, 0x0007, + 0x0079, 0x2ffa, 0x302e, 0x3038, 0x3023, 0x3002, 0x42de, 0x42de, + 0x3002, 0x3043, 0x1078, 0x290c, 0x7000, 0xa086, 0x0004, 0x00c0, + 0x301e, 0x7064, 0xa086, 0x0002, 0x00c0, 0x3014, 0x2011, 0x0002, + 0x2019, 0x0000, 0x0078, 0x2eba, 0x7064, 0xa086, 0x0006, 0x0040, + 0x300e, 0x7064, 0xa086, 0x0004, 0x0040, 0x300e, 0x79e4, 0x2001, + 0x0003, 0x0078, 0x3385, 0x6818, 0xd0fc, 0x0040, 0x3029, 0x681b, + 0x001d, 0x1078, 0x4051, 0x781b, 0x0061, 0x007c, 0x6818, 0xd0fc, + 0x0040, 0x3034, 0x681b, 0x001d, 0x1078, 0x4051, 0x0078, 0x42ba, + 0x6818, 0xd0fc, 0x0040, 0x303e, 0x681b, 0x001d, 0x1078, 0x4051, + 0x781b, 0x00f5, 0x007c, 0x6818, 0xd0fc, 0x0040, 0x3049, 0x681b, + 0x001d, 0x1078, 0x4051, 0x781b, 0x00c5, 0x007c, 0xa584, 0x000f, + 0x00c0, 0x306b, 0x7000, 0x0079, 0x3055, 0x2966, 0x305d, 0x305f, + 0x3d04, 0x3d04, 0x3d04, 0x305d, 0x305d, 0x1078, 0x290c, 0x1078, + 0x3d73, 0x6008, 0xa084, 0xfbef, 0x600a, 0x1078, 0x3cf5, 0x0040, + 0x3d04, 0x0078, 0x2966, 0x78e4, 0xa005, 0x00d0, 0x3004, 0x3208, + 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x307c, + 0xa18c, 0x0300, 0x0078, 0x307e, 0xa18c, 0x0400, 0x0040, 0x3084, + 0x0018, 0x3004, 0x0078, 0x3086, 0x0028, 0x3004, 0x2008, 0xa084, + 0x0030, 0x00c0, 0x308e, 0x781b, 0x005b, 0x007c, 0x78ec, 0xa084, + 0x0003, 0x0040, 0x308b, 0x2100, 0xa184, 0x0007, 0x0079, 0x3098, + 0x30a7, 0x30ab, 0x30a2, 0x30a0, 0x42de, 0x42de, 0x30a0, 0x42d8, + 0x1078, 0x290c, 0x1078, 0x4059, 0x781b, 0x0061, 0x007c, 0x1078, + 0x4059, 0x0078, 0x42ba, 0x1078, 0x4059, 0x781b, 0x00f5, 0x007c, + 0x1078, 0x4059, 0x781b, 0x00c5, 0x007c, 0x2300, 0x0079, 0x30b8, + 0x30bd, 0x30bb, 0x30bf, 0x1078, 0x290c, 0x0078, 0x38cf, 0x681b, + 0x0016, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x38cf, + 0x78ec, 0xa084, 0x0003, 0x0040, 0x38cf, 0xa184, 0x0100, 0x0040, + 0x30c3, 0xa184, 0x0007, 0x0079, 0x30d5, 0x30dd, 0x30ab, 0x3023, + 0x4296, 0x42de, 0x42de, 0x4296, 0x42d8, 0x1078, 0x42a2, 0x007c, + 0xa282, 0x0005, 0x0050, 0x30e6, 0x1078, 0x290c, 0x2300, 0x0079, + 0x30e9, 0x30ec, 0x330b, 0x3316, 0x2200, 0x0079, 0x30ef, 0x3109, + 0x30f6, 0x3109, 0x30f4, 0x32ee, 0x1078, 0x290c, 0x789b, 0x0018, + 0x78a8, 0xa084, 0x00ff, 0xa082, 0x0020, 0x0048, 0x4040, 0xa08a, + 0x0004, 0x00c8, 0x4040, 0x0079, 0x3105, 0x4040, 0x4040, 0x4040, + 0x3fea, 0x789b, 0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x311a, + 0x0078, 0x4040, 0x7000, 0xa005, 0x00c0, 0x3110, 0x2011, 0x0004, + 0x0078, 0x3aba, 0xa184, 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x4040, + 0x0079, 0x3122, 0x3134, 0x3132, 0x3149, 0x314d, 0x320f, 0x4040, + 0x4040, 0x3211, 0x4040, 0x4040, 0x32ea, 0x32ea, 0x4040, 0x4040, + 0x4040, 0x32ec, 0x1078, 0x290c, 0xd6e4, 0x0040, 0x313f, 0x2001, + 0x0300, 0x8000, 0x8000, 0x783a, 0x781b, 0x00c0, 0x007c, 0x6818, + 0xd0fc, 0x0040, 0x3147, 0x681b, 0x001d, 0x0078, 0x3137, 0x0078, + 0x4296, 0x681b, 0x001d, 0x0078, 0x404a, 0x6920, 0x6922, 0xa684, + 0x1800, 0x00c0, 0x31a1, 0x6820, 0xd084, 0x00c0, 0x31a7, 0x6818, + 0xa086, 0x0008, 0x00c0, 0x315e, 0x681b, 0x0000, 0xd6d4, 0x0040, + 0x320c, 0xd6bc, 0x0040, 0x319e, 0x7087, 0x0000, 0x6818, 0xa084, + 0x003f, 0xa08a, 0x000d, 0x0050, 0x319e, 0xa08a, 0x000c, 0x7186, 0x2001, 0x000c, 0x800c, 0x718a, 0x789b, 0x0061, 0x78aa, 0x157e, - 0x137e, 0x147e, 0x017e, 0x3208, 0xa18c, 0x0300, 0x0040, 0x3110, - 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x310c, - 0x20a1, 0x012b, 0x0078, 0x3112, 0x20a1, 0x022b, 0x0078, 0x3112, + 0x137e, 0x147e, 0x017e, 0x3208, 0xa18c, 0x0300, 0x0040, 0x3190, + 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x318c, + 0x20a1, 0x012b, 0x0078, 0x3192, 0x20a1, 0x022b, 0x0078, 0x3192, 0x20a1, 0x012b, 0x017f, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x781b, 0x0064, - 0x007c, 0xd6e4, 0x0040, 0x3127, 0x781b, 0x0076, 0x007c, 0xa684, - 0x0060, 0x0040, 0x3189, 0xd6dc, 0x0040, 0x3189, 0xd6fc, 0x00c0, - 0x3133, 0x0078, 0x314a, 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, - 0x78d0, 0x801b, 0x00c8, 0x313d, 0x8000, 0xa084, 0x003f, 0xa108, + 0x007c, 0xd6e4, 0x0040, 0x31a7, 0x781b, 0x0076, 0x007c, 0xa684, + 0x0060, 0x0040, 0x3209, 0xd6dc, 0x0040, 0x3209, 0xd6fc, 0x00c0, + 0x31b3, 0x0078, 0x31ca, 0xc6fc, 0x7e5a, 0x6eb6, 0x7adc, 0x79d8, + 0x78d0, 0x801b, 0x00c8, 0x31bd, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, - 0xa303, 0x68ae, 0xd6f4, 0x0040, 0x3150, 0xc6f4, 0x7e5a, 0x6eb6, - 0x7000, 0xa086, 0x0003, 0x00c0, 0x315e, 0x007e, 0x1078, 0x4326, - 0x1078, 0x45f7, 0x007f, 0x781b, 0x0073, 0x007c, 0xa006, 0x1078, - 0x46e5, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, - 0x316d, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, - 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0, 0x317d, 0xc6f5, + 0xa303, 0x68ae, 0xd6f4, 0x0040, 0x31d0, 0xc6f4, 0x7e5a, 0x6eb6, + 0x7000, 0xa086, 0x0003, 0x00c0, 0x31de, 0x007e, 0x1078, 0x44fb, + 0x1078, 0x4834, 0x007f, 0x781b, 0x0073, 0x007c, 0xa006, 0x1078, + 0x493a, 0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, + 0x31ed, 0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x7cda, + 0x6ba6, 0x7bd6, 0x7bde, 0x2300, 0xa405, 0x00c0, 0x31fd, 0xc6f5, 0x7e5a, 0x6eb6, 0x781b, 0x0073, 0x007c, 0x781b, 0x0073, 0x2200, - 0xa115, 0x00c0, 0x3186, 0x1078, 0x45f7, 0x007c, 0x1078, 0x462d, + 0xa115, 0x00c0, 0x3206, 0x1078, 0x4834, 0x007c, 0x1078, 0x486c, 0x007c, 0x781b, 0x0076, 0x007c, 0x781b, 0x0064, 0x007c, 0x1078, - 0x28ec, 0x0078, 0x31dd, 0x6920, 0xd1c4, 0x0040, 0x31a6, 0xc1c4, + 0x290c, 0x0078, 0x325d, 0x6920, 0xd1c4, 0x0040, 0x3226, 0xc1c4, 0x6922, 0x0c7e, 0x7058, 0x2060, 0x6000, 0xc0e4, 0x6002, 0x6004, - 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x31d1, 0xd1cc, 0x0040, - 0x31d1, 0xc1cc, 0x6922, 0x0c7e, 0x7058, 0x2060, 0x6000, 0xc0ec, + 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x3251, 0xd1cc, 0x0040, + 0x3251, 0xc1cc, 0x6922, 0x0c7e, 0x7058, 0x2060, 0x6000, 0xc0ec, 0x6002, 0x6004, 0xc0a4, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xd19c, - 0x0040, 0x31d1, 0x1078, 0x3fdd, 0x1078, 0x3cda, 0x88ff, 0x0040, - 0x31d1, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, - 0xd6d4, 0x00c0, 0x31ce, 0x781b, 0x0061, 0x007c, 0x781b, 0x0075, - 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x31d8, 0x781b, 0x0064, 0x007c, - 0x781b, 0x0076, 0x007c, 0x0078, 0x3ea2, 0x2019, 0x0000, 0x7990, - 0xa18c, 0x0007, 0x00c0, 0x31eb, 0x6820, 0xa084, 0x0100, 0x0040, - 0x31db, 0x2009, 0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, - 0xa286, 0x0001, 0x00c0, 0x3207, 0x2300, 0x7ca8, 0xa400, 0x2018, - 0xa102, 0x0040, 0x31ff, 0x0048, 0x31ff, 0x0078, 0x3201, 0x0078, - 0x3193, 0x24a8, 0x7aa8, 0x00f0, 0x3201, 0x0078, 0x31ed, 0xa284, - 0x00f0, 0xa086, 0x0020, 0x00c0, 0x325b, 0x8318, 0x8318, 0x2300, - 0xa102, 0x0040, 0x3217, 0x0048, 0x3217, 0x0078, 0x3258, 0xa286, - 0x0023, 0x0040, 0x31db, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, + 0x0040, 0x3251, 0x1078, 0x4183, 0x1078, 0x3e7c, 0x88ff, 0x0040, + 0x3251, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, + 0xd6d4, 0x00c0, 0x324e, 0x781b, 0x0061, 0x007c, 0x781b, 0x0075, + 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x3258, 0x781b, 0x0064, 0x007c, + 0x781b, 0x0076, 0x007c, 0x0078, 0x4045, 0x2019, 0x0000, 0x7990, + 0xa18c, 0x0007, 0x00c0, 0x326b, 0x6820, 0xa084, 0x0100, 0x0040, + 0x325b, 0x2009, 0x0008, 0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, + 0xa286, 0x0001, 0x00c0, 0x3287, 0x2300, 0x7ca8, 0xa400, 0x2018, + 0xa102, 0x0040, 0x327f, 0x0048, 0x327f, 0x0078, 0x3281, 0x0078, + 0x3213, 0x24a8, 0x7aa8, 0x00f0, 0x3281, 0x0078, 0x326d, 0xa284, + 0x00f0, 0xa086, 0x0020, 0x00c0, 0x32db, 0x8318, 0x8318, 0x2300, + 0xa102, 0x0040, 0x3297, 0x0048, 0x3297, 0x0078, 0x32d8, 0xa286, + 0x0023, 0x0040, 0x325b, 0x681c, 0xa084, 0xfff1, 0x681e, 0x7e58, 0xa684, 0xfff1, 0xc0a5, 0x2030, 0x7e5a, 0x6008, 0xc0a5, 0x600a, 0x0c7e, 0x7058, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd1a4, - 0x0040, 0x3238, 0x1078, 0x3fdd, 0x1078, 0x3df6, 0x0078, 0x3246, + 0x0040, 0x32b8, 0x1078, 0x4183, 0x1078, 0x3f99, 0x0078, 0x32c6, 0x0c7e, 0x7058, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xd19c, - 0x0040, 0x31d1, 0x1078, 0x3fdd, 0x1078, 0x3cda, 0x88ff, 0x0040, - 0x31d1, 0x789b, 0x0060, 0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, - 0x00c0, 0x3255, 0x781b, 0x0061, 0x007c, 0x781b, 0x0075, 0x007c, - 0x7aa8, 0x0078, 0x31ed, 0x8318, 0x2300, 0xa102, 0x0040, 0x3264, - 0x0048, 0x3264, 0x0078, 0x31ed, 0xa284, 0x0080, 0x00c0, 0x3ea7, - 0x0078, 0x3ea2, 0x0078, 0x3ea7, 0x0078, 0x3e9d, 0x7058, 0xa04d, + 0x0040, 0x3251, 0x1078, 0x4183, 0x1078, 0x3e7c, 0x88ff, 0x0040, + 0x3251, 0x789b, 0x0060, 0x2800, 0x78aa, 0xc695, 0x7e5a, 0xd6d4, + 0x00c0, 0x32d5, 0x781b, 0x0061, 0x007c, 0x781b, 0x0075, 0x007c, + 0x7aa8, 0x0078, 0x326d, 0x8318, 0x2300, 0xa102, 0x0040, 0x32e4, + 0x0048, 0x32e4, 0x0078, 0x326d, 0xa284, 0x0080, 0x00c0, 0x404a, + 0x0078, 0x4045, 0x0078, 0x404a, 0x0078, 0x4040, 0x7058, 0xa04d, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001, 0x0040, - 0x327b, 0x1078, 0x28ec, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, - 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x3e9d, 0x0079, 0x3287, 0x3e9d, - 0x3c2c, 0x3e9d, 0x3d9e, 0xa282, 0x0000, 0x00c0, 0x3291, 0x1078, - 0x28ec, 0x1078, 0x3eae, 0x781b, 0x0075, 0x007c, 0xa282, 0x0003, - 0x00c0, 0x329c, 0x1078, 0x28ec, 0xd4fc, 0x00c0, 0x32bc, 0x7064, - 0xa005, 0x0040, 0x32a5, 0x1078, 0x28ec, 0x6f14, 0x7776, 0xa7bc, - 0x8f00, 0x1078, 0x3fe1, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, - 0xa784, 0x001f, 0x00c0, 0x32a9, 0x1078, 0x3eb2, 0x7067, 0x0002, - 0x701f, 0x0009, 0x0078, 0x32be, 0x1078, 0x3ebe, 0x781b, 0x0075, - 0x007c, 0xa282, 0x0004, 0x0050, 0x32c7, 0x1078, 0x28ec, 0x2300, - 0x0079, 0x32ca, 0x32cd, 0x346b, 0x34ae, 0xa286, 0x0003, 0x0040, - 0x3304, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x71d4, 0xd1b4, 0x0078, - 0x32fc, 0x0040, 0x32fc, 0x7868, 0xa084, 0x00ff, 0x00c0, 0x32fc, - 0xa282, 0x0002, 0x00c8, 0x32fc, 0x0d7e, 0x783b, 0x8300, 0x781b, - 0x004c, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, - 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x0d7f, - 0x2001, 0x0000, 0x0078, 0x3308, 0x783b, 0x1300, 0x781b, 0x004a, - 0x2001, 0x0000, 0x0078, 0x3308, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, - 0x704a, 0x68a0, 0xd0ec, 0x0040, 0x3310, 0x6008, 0xc08d, 0x600a, - 0xa284, 0x000f, 0x0079, 0x3314, 0x344b, 0x3321, 0x331e, 0x35ae, - 0x35f2, 0x2946, 0x331c, 0x331c, 0x1078, 0x28ec, 0x6008, 0xc0d4, - 0x600a, 0xd6e4, 0x00c0, 0x3328, 0x1078, 0x4326, 0x0040, 0x3404, - 0x7868, 0xa08c, 0x00ff, 0x0040, 0x3369, 0xa186, 0x0008, 0x00c0, - 0x333e, 0x1078, 0x3bd2, 0x6008, 0xc0a4, 0x600a, 0x1078, 0x3b6b, - 0x0040, 0x3369, 0x1078, 0x4326, 0x0078, 0x3353, 0xa186, 0x0028, - 0x00c0, 0x3369, 0x1078, 0x4326, 0x6008, 0xc0a4, 0x600a, 0x6018, - 0xa005, 0x0040, 0x3353, 0x8001, 0x601a, 0x0040, 0x3353, 0x8001, - 0x0040, 0x3353, 0x601e, 0x6820, 0xd084, 0x0040, 0x2946, 0xc084, - 0x6822, 0x705c, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, - 0x6802, 0xa005, 0x2d00, 0x00c0, 0x3366, 0x6002, 0x6006, 0x0078, - 0x2946, 0x017e, 0x81ff, 0x00c0, 0x33b0, 0x7000, 0xa086, 0x0030, - 0x0040, 0x33b0, 0x71d4, 0xd1b4, 0x00c0, 0x3397, 0x7060, 0xa005, - 0x00c0, 0x33b0, 0x70a4, 0xa086, 0x0001, 0x0040, 0x33b0, 0x7003, - 0x0000, 0x047e, 0x057e, 0x077e, 0x067e, 0x0c7e, 0x0d7e, 0x1078, - 0x296c, 0x0d7f, 0x0c7f, 0x067f, 0x077f, 0x057f, 0x047f, 0x71d4, - 0xd1b4, 0x00c0, 0x33b0, 0x7003, 0x0040, 0x0078, 0x33b0, 0x1078, - 0x411c, 0x00c0, 0x33b0, 0x781b, 0x005b, 0x0d7e, 0x70bc, 0xa06d, - 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, - 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x7808, 0xc08d, 0x780a, 0x0d7f, - 0x1078, 0x34e8, 0x017f, 0x81ff, 0x0040, 0x3403, 0xa684, 0xdf00, - 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186, 0x0002, 0x00c0, 0x3404, - 0x70d4, 0xd0b4, 0x0040, 0x33d1, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, - 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, - 0x0c7f, 0x6820, 0xd0dc, 0x00c0, 0x3404, 0x8717, 0xa294, 0x000f, - 0x8213, 0x8213, 0x8213, 0xb284, 0x0300, 0x0040, 0x33e3, 0xa290, - 0x4ec0, 0x0078, 0x33e5, 0xa290, 0x4f40, 0xa290, 0x0000, 0x221c, - 0xd3c4, 0x00c0, 0x33ed, 0x0078, 0x33f3, 0x8210, 0x2204, 0xa085, - 0x0018, 0x2012, 0x8211, 0xd3d4, 0x0040, 0x33fe, 0x68a0, 0xd0c4, - 0x00c0, 0x33fe, 0x1078, 0x3562, 0x0078, 0x2946, 0x6008, 0xc08d, - 0x600a, 0x0078, 0x3404, 0x692a, 0x6916, 0x6818, 0xd0fc, 0x0040, - 0x340b, 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x6410, 0x84ff, - 0x0040, 0x3420, 0x2009, 0x4a02, 0x2104, 0x8001, 0x200a, 0x8421, - 0x6412, 0x00c0, 0x3420, 0x2021, 0x4a04, 0x2404, 0xc0a5, 0x2022, - 0x6018, 0xa005, 0x0040, 0x3428, 0x8001, 0x601a, 0x00c0, 0x342b, - 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x00c0, 0x3437, 0x6800, - 0xa005, 0x00c0, 0x3434, 0x6002, 0x6006, 0x0078, 0x343b, 0x705c, - 0x2060, 0x6800, 0x6002, 0x2061, 0x4a00, 0x6887, 0x0103, 0x2d08, - 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, 0x344a, 0x2d02, - 0x0078, 0x344b, 0x616e, 0x7200, 0xa286, 0x0030, 0x0040, 0x345b, - 0xa286, 0x0040, 0x00c0, 0x2946, 0x7003, 0x0002, 0x704c, 0x2068, - 0x68c4, 0x2060, 0x007c, 0x7003, 0x0002, 0x70bc, 0xa06d, 0x68bc, - 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00, 0x704e, 0xad80, - 0x0009, 0x7046, 0x007c, 0xa282, 0x0004, 0x0048, 0x3471, 0x1078, - 0x28ec, 0x2200, 0x0079, 0x3474, 0x3478, 0x3489, 0x3496, 0x3489, - 0xa586, 0x1300, 0x0040, 0x3489, 0xa586, 0x8300, 0x00c0, 0x346f, - 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, - 0x600a, 0x7000, 0xa086, 0x0005, 0x0040, 0x3493, 0x1078, 0x3eae, - 0x781b, 0x0075, 0x007c, 0x781b, 0x0076, 0x007c, 0x7890, 0x8007, - 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, - 0x00ff, 0xa186, 0x0003, 0x0040, 0x34ab, 0xa186, 0x0000, 0x0040, - 0x34ab, 0x0078, 0x3e9d, 0x781b, 0x0076, 0x007c, 0x6820, 0xc095, - 0x6822, 0x82ff, 0x00c0, 0x34b8, 0x1078, 0x3eae, 0x0078, 0x34bf, - 0x8211, 0x0040, 0x34bd, 0x1078, 0x28ec, 0x1078, 0x3ebe, 0x781b, - 0x0075, 0x007c, 0x1078, 0x4131, 0x7830, 0xa084, 0x00c0, 0x00c0, - 0x34e5, 0x017e, 0x3208, 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, - 0x007f, 0x0040, 0x34d7, 0xa18c, 0x0300, 0x0078, 0x34d9, 0xa18c, - 0x0400, 0x017f, 0x0040, 0x34e0, 0x0018, 0x34e5, 0x0078, 0x34e2, - 0x0028, 0x34e5, 0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, - 0xa684, 0x0060, 0x00c0, 0x34f2, 0x682f, 0x0000, 0x6833, 0x0000, - 0x0078, 0x3561, 0xd6dc, 0x00c0, 0x350a, 0x68b4, 0xd0dc, 0x00c0, - 0x350a, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7048, 0xa005, 0x00c0, - 0x3507, 0x2200, 0xa105, 0x0040, 0x4326, 0x704b, 0x0015, 0x0078, - 0x4326, 0x007c, 0xd6ac, 0x0040, 0x3530, 0xd6f4, 0x0040, 0x3516, - 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x4326, 0x68b4, 0xa084, - 0x4000, 0xa635, 0xd6f4, 0x00c0, 0x3510, 0x7048, 0xa005, 0x00c0, - 0x3523, 0x704b, 0x0015, 0xd6dc, 0x00c0, 0x352c, 0x68b4, 0xd0dc, - 0x0040, 0x352c, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32, 0x0078, 0x4326, - 0xd6f4, 0x0040, 0x3539, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, - 0x4326, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, 0x00c0, 0x3533, - 0x7048, 0xa005, 0x00c0, 0x3546, 0x704b, 0x0015, 0x2408, 0x2510, - 0x2700, 0x80fb, 0x00c8, 0x354d, 0x8000, 0xa084, 0x003f, 0xa108, - 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, 0x00c0, 0x355a, - 0x0078, 0x4326, 0x7000, 0xa086, 0x0006, 0x0040, 0x3561, 0x0078, - 0x4326, 0x007c, 0x6008, 0xc0cd, 0xd3cc, 0x0040, 0x3568, 0xc08d, - 0x600a, 0x681b, 0x0006, 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, - 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, - 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, 0x7000, 0x0079, 0x3580, - 0x2946, 0x3592, 0x358a, 0x3588, 0x3588, 0x3588, 0x3588, 0x3588, - 0x1078, 0x28ec, 0x6820, 0xd084, 0x00c0, 0x3592, 0x1078, 0x3bb5, - 0x0078, 0x3598, 0x705c, 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, - 0x3208, 0xa18c, 0x0300, 0x0040, 0x35a1, 0x2021, 0x4a58, 0x0078, - 0x35a3, 0x2021, 0x4a98, 0x2404, 0xa005, 0x0040, 0x35aa, 0x2020, - 0x0078, 0x35a3, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078, 0x3bbc, - 0x1078, 0x3bd2, 0x6008, 0xc0cc, 0x600a, 0x682b, 0x0000, 0x789b, - 0x000e, 0x6f14, 0x6817, 0x0002, 0x3208, 0xa18c, 0x0300, 0x0040, - 0x35c5, 0x2009, 0x0000, 0x0078, 0x35c7, 0x2009, 0x0001, 0x1078, - 0x471a, 0xd6dc, 0x0040, 0x35cf, 0x691c, 0xc1ed, 0x691e, 0x6818, - 0xd0fc, 0x0040, 0x35de, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x35dc, - 0x681b, 0x001e, 0x0078, 0x35de, 0x681b, 0x0000, 0xb284, 0x0300, - 0x00c0, 0x35e6, 0x2021, 0x4a98, 0x0078, 0x35e8, 0x2021, 0x4a58, - 0x6800, 0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078, 0x202a, - 0x0078, 0x2946, 0x7cd8, 0x7ddc, 0x7fd0, 0x1078, 0x34e8, 0x682b, - 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078, 0x4135, 0xa08c, 0x00ff, - 0x6916, 0x6818, 0xd0fc, 0x0040, 0x3607, 0x7048, 0x681a, 0xa68c, - 0xdf00, 0x691e, 0x7067, 0x0000, 0x0078, 0x2946, 0x7000, 0xa005, - 0x00c0, 0x3614, 0x0078, 0x2946, 0xa006, 0x1078, 0x4326, 0x6817, - 0x0000, 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, - 0x6820, 0xa084, 0x00ff, 0x6822, 0x7000, 0x0079, 0x3627, 0x2946, - 0x3634, 0x3631, 0x3636, 0x3636, 0x3636, 0x362f, 0x362f, 0x1078, - 0x28ec, 0x6008, 0xc0d4, 0x600a, 0x1078, 0x3bd2, 0x6008, 0xc0a4, - 0x600a, 0x0078, 0x3b85, 0x2300, 0x0079, 0x363e, 0x3641, 0x3643, - 0x369f, 0x1078, 0x28ec, 0xd6fc, 0x00c0, 0x3686, 0x7000, 0xa00d, - 0x0079, 0x364a, 0x2946, 0x3654, 0x3654, 0x3678, 0x3654, 0x3683, - 0x3652, 0x3652, 0x1078, 0x28ec, 0xa684, 0x0060, 0xa086, 0x0060, - 0x00c0, 0x3675, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x681c, 0xc0ac, - 0x681e, 0xa186, 0x0002, 0x0040, 0x3667, 0x1078, 0x4326, 0x1078, - 0x45f7, 0x781b, 0x0076, 0x71d4, 0xd1b4, 0x00c0, 0x2942, 0x70a4, - 0xa086, 0x0001, 0x00c0, 0x2989, 0x007c, 0xd6ec, 0x0040, 0x365c, - 0x6818, 0xd0fc, 0x0040, 0x3683, 0x681b, 0x0015, 0xd6f4, 0x0040, - 0x3683, 0x681b, 0x0007, 0x1078, 0x40d5, 0x007c, 0xc6fc, 0x7e5a, - 0x7adc, 0x79d8, 0x78d0, 0x801b, 0x00c8, 0x368f, 0x8000, 0xa084, - 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, - 0x6b94, 0x2200, 0xa303, 0x68ae, 0x781b, 0x0076, 0x007c, 0x1078, - 0x28ec, 0x2300, 0x0079, 0x36a4, 0x36a9, 0x36c5, 0x3719, 0x1078, - 0x28ec, 0x7000, 0x0079, 0x36ac, 0x36b4, 0x36b6, 0x36b6, 0x36b4, - 0x36b4, 0x36b4, 0x36b4, 0x36b4, 0x1078, 0x28ec, 0x1078, 0x45f7, - 0x681c, 0xc0b4, 0x681e, 0x70d4, 0xd0b4, 0x00c0, 0x2942, 0x70a4, - 0xa086, 0x0001, 0x00c0, 0x2989, 0x007c, 0xd6fc, 0x00c0, 0x3709, - 0x7000, 0xa00d, 0x0079, 0x36cc, 0x2946, 0x36dc, 0x36d6, 0x3700, - 0x36dc, 0x3706, 0x36d4, 0x36d4, 0x1078, 0x28ec, 0x6894, 0x78d6, - 0x78de, 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060, 0xa086, 0x0060, - 0x00c0, 0x36fd, 0xa6b4, 0xbfbf, 0xc6ed, 0x7e5a, 0xa186, 0x0002, - 0x0040, 0x36ec, 0x1078, 0x4326, 0x1078, 0x45f7, 0x781b, 0x0076, - 0x681c, 0xc0b4, 0x681e, 0x71d4, 0xd1b4, 0x00c0, 0x2942, 0x70a4, - 0xa086, 0x0001, 0x00c0, 0x2989, 0x007c, 0xd6ec, 0x0040, 0x36e4, - 0x6818, 0xd0fc, 0x0040, 0x3706, 0x681b, 0x0007, 0x781b, 0x00f0, - 0x007c, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x6b98, 0x2100, 0xa302, - 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2, 0x781b, 0x0076, - 0x007c, 0xd6dc, 0x0040, 0x3722, 0x782b, 0x3009, 0x781b, 0x0076, - 0x0078, 0x2942, 0x7884, 0xc0ac, 0x7886, 0x78e4, 0xa084, 0x0008, - 0x00c0, 0x3735, 0xa484, 0x0200, 0x0040, 0x372f, 0xc6f5, 0xc6dd, - 0x7e5a, 0x781b, 0x0076, 0x0078, 0x2942, 0x6820, 0xc095, 0x6822, - 0x1078, 0x4062, 0xc6dd, 0x1078, 0x3eae, 0x781b, 0x0075, 0x0078, - 0x2942, 0x2300, 0x0079, 0x3744, 0x3747, 0x3749, 0x374b, 0x1078, - 0x28ec, 0x0078, 0x3ea7, 0xd6d4, 0x00c0, 0x3771, 0x79e4, 0xd1ac, - 0x0040, 0x3759, 0x78ec, 0xa084, 0x0003, 0x0040, 0x3759, 0x782b, - 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, - 0x79e4, 0xd1ac, 0x0040, 0x3769, 0x78ec, 0xa084, 0x0003, 0x00c0, - 0x376d, 0x2001, 0x0014, 0x0078, 0x3304, 0xa184, 0x0007, 0x0079, - 0x37a7, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, - 0x0040, 0x37a5, 0x789b, 0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0, - 0x3798, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, 0x378b, 0x2009, - 0xfff7, 0x0078, 0x3791, 0xa386, 0x0003, 0x00c0, 0x3798, 0x2009, - 0xffef, 0x0c7e, 0x7058, 0x2060, 0x6004, 0xa104, 0x6006, 0x0c7f, - 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x782b, - 0x3009, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, 0x40c9, 0x2fae, - 0x2fb8, 0x37b1, 0x37b7, 0x37af, 0x37af, 0x40c9, 0x40c9, 0x1078, - 0x28ec, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, 0x40cf, 0x6920, - 0xa18c, 0xfcff, 0x6922, 0x0078, 0x40c9, 0x79e4, 0xa184, 0x0030, - 0x0040, 0x37c7, 0x78ec, 0xa084, 0x0003, 0x00c0, 0x37f1, 0x7000, - 0xa086, 0x0004, 0x00c0, 0x37e1, 0x7064, 0xa086, 0x0002, 0x00c0, - 0x37d7, 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, 0x2e43, 0x7064, - 0xa086, 0x0006, 0x0040, 0x37d1, 0x7064, 0xa086, 0x0004, 0x0040, - 0x37d1, 0x7000, 0xa086, 0x0000, 0x0040, 0x2942, 0x6820, 0xd0ac, - 0x00c0, 0x37ed, 0x6818, 0xc0fd, 0x681a, 0x2001, 0x0014, 0x0078, - 0x3304, 0xa184, 0x0007, 0x0079, 0x37f5, 0x40c9, 0x40c9, 0x37fd, - 0x40c9, 0x4111, 0x4111, 0x40c9, 0x40c9, 0xd6bc, 0x0040, 0x383f, - 0x7184, 0x81ff, 0x0040, 0x383f, 0xa182, 0x000d, 0x00d0, 0x380c, - 0x7087, 0x0000, 0x0078, 0x3811, 0xa182, 0x000c, 0x7086, 0x2009, - 0x000c, 0x789b, 0x0061, 0x79aa, 0x157e, 0x137e, 0x147e, 0x7088, - 0x8114, 0xa210, 0x728a, 0xa080, 0x000b, 0xad00, 0x2098, 0xb284, - 0x0300, 0x0040, 0x3833, 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, - 0x007f, 0x0040, 0x382f, 0x20a1, 0x012b, 0x0078, 0x3835, 0x20a1, - 0x022b, 0x0078, 0x3835, 0x20a1, 0x012b, 0x789b, 0x0000, 0x8108, - 0x81ac, 0x53a6, 0x147f, 0x137f, 0x157f, 0x0078, 0x40cf, 0xd6d4, - 0x00c0, 0x3893, 0x6820, 0xd084, 0x0040, 0x40cf, 0xa68c, 0x0060, - 0xa684, 0x0060, 0x0040, 0x3851, 0xa086, 0x0060, 0x00c0, 0x3851, - 0xc1f5, 0xc194, 0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, - 0x789b, 0x0061, 0x6818, 0xc0fd, 0x681a, 0x78aa, 0x8008, 0x810c, - 0x0040, 0x3beb, 0xa18c, 0x00f8, 0x00c0, 0x3beb, 0x157e, 0x137e, - 0x147e, 0x017e, 0x3208, 0xa18c, 0x0300, 0x0040, 0x387f, 0x007e, - 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x387b, 0x20a1, - 0x012b, 0x0078, 0x3881, 0x20a1, 0x022b, 0x0078, 0x3881, 0x20a1, - 0x012b, 0x017f, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, - 0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0xc0fc, 0x8007, - 0x7882, 0x0078, 0x40cf, 0x6818, 0xd0fc, 0x0040, 0x3899, 0x681b, - 0x0008, 0x6820, 0xc0ad, 0x6822, 0x1078, 0x3eb6, 0x781b, 0x00e1, - 0x007c, 0x2300, 0x0079, 0x38a4, 0x38a9, 0x397b, 0x38a7, 0x1078, - 0x28ec, 0x7cd8, 0x7ddc, 0x7fd0, 0x82ff, 0x00c0, 0x38d1, 0x7200, - 0xa286, 0x0003, 0x0040, 0x32d2, 0x71d4, 0xd1b4, 0x0078, 0x38d4, - 0x0040, 0x38d4, 0x0d7e, 0x783b, 0x8800, 0x781b, 0x004c, 0x70bc, - 0xa06d, 0x68b4, 0xc0a5, 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, - 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x0078, - 0x38d8, 0x7200, 0x0078, 0x38d8, 0x783b, 0x1800, 0x781b, 0x004a, - 0xa284, 0x000f, 0x0079, 0x38dc, 0x3966, 0x391a, 0x38e6, 0x3300, - 0x38e4, 0x3966, 0x38e4, 0x38e4, 0x1078, 0x28ec, 0x681c, 0xd0ec, - 0x0040, 0x38ed, 0x6008, 0xc08d, 0x600a, 0x6920, 0xc185, 0x6922, - 0x6800, 0x6006, 0xa005, 0x00c0, 0x38f6, 0x6002, 0x6008, 0xc0d4, - 0x600a, 0x681c, 0xa084, 0x000e, 0x00c0, 0x390a, 0xb284, 0x0300, - 0x0040, 0x3906, 0x2009, 0x90c0, 0x0078, 0x390f, 0x2009, 0x91d0, - 0x0078, 0x390f, 0x7030, 0x68ba, 0x7140, 0x70cc, 0xa108, 0x2104, - 0x6802, 0x2d0a, 0x715e, 0xd6dc, 0x00c0, 0x391a, 0xc6fc, 0x6eb6, - 0x0078, 0x3966, 0x6eb6, 0xa684, 0x0060, 0x0040, 0x3966, 0xd6dc, - 0x00c0, 0x392d, 0xa684, 0x7fff, 0x68b6, 0x6894, 0x68a6, 0x6898, - 0x68aa, 0x1078, 0x4326, 0x0078, 0x3966, 0xd6ac, 0x0040, 0x3939, - 0xa006, 0x1078, 0x4326, 0x2408, 0x2510, 0x69aa, 0x6aa6, 0x0078, - 0x3949, 0x2408, 0x2510, 0x2700, 0x801b, 0x00c8, 0x3940, 0x8000, - 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x69aa, 0x6aa6, 0x1078, - 0x4326, 0xd6fc, 0x0040, 0x3966, 0xa684, 0x7fff, 0x68b6, 0x2510, - 0x2408, 0xd6ac, 0x00c0, 0x395e, 0x2700, 0x801b, 0x00c8, 0x3959, - 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, - 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x7000, 0xa086, - 0x0030, 0x00c0, 0x2946, 0x7003, 0x0002, 0x70bc, 0xa06d, 0x68bc, - 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00, 0x704e, 0xad80, - 0x0009, 0x7046, 0x007c, 0xa586, 0x8800, 0x00c0, 0x3988, 0x7003, - 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, 0xfbef, 0x600a, - 0x0078, 0x3ea7, 0x7047, 0x0000, 0xa282, 0x0006, 0x0050, 0x3992, - 0x1078, 0x28ec, 0x2300, 0x0079, 0x3995, 0x3998, 0x39cf, 0x3a01, - 0x2200, 0x0079, 0x399b, 0x39a1, 0x3ea7, 0x39a3, 0x39a1, 0x3a38, - 0x3a9b, 0x1078, 0x28ec, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, - 0x39ad, 0x2001, 0x91e0, 0x0078, 0x39af, 0x2001, 0x9212, 0x2068, + 0x32fb, 0x1078, 0x290c, 0x7aa8, 0xa294, 0x00ff, 0x78a8, 0xa084, + 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x4040, 0x0079, 0x3307, 0x4040, + 0x3dce, 0x4040, 0x3f41, 0xa282, 0x0000, 0x00c0, 0x3311, 0x1078, + 0x290c, 0x1078, 0x4051, 0x781b, 0x0075, 0x007c, 0xa282, 0x0003, + 0x00c0, 0x331c, 0x1078, 0x290c, 0xd4fc, 0x00c0, 0x333c, 0x7064, + 0xa005, 0x0040, 0x3325, 0x1078, 0x290c, 0x6f14, 0x7776, 0xa7bc, + 0x8f00, 0x1078, 0x4187, 0x6008, 0xa085, 0x0021, 0x600a, 0x8738, + 0xa784, 0x001f, 0x00c0, 0x3329, 0x1078, 0x4055, 0x7067, 0x0002, + 0x701f, 0x0009, 0x0078, 0x333e, 0x1078, 0x4064, 0x781b, 0x0075, + 0x007c, 0xa282, 0x0004, 0x0050, 0x3347, 0x1078, 0x290c, 0x2300, + 0x0079, 0x334a, 0x334d, 0x350d, 0x3550, 0xa286, 0x0003, 0x0040, + 0x3385, 0x7200, 0x7cd8, 0x7ddc, 0x7fd0, 0x71d4, 0xd1bc, 0x00c0, + 0x337d, 0xd1b4, 0x0040, 0x337d, 0x7868, 0xa084, 0x00ff, 0x00c0, + 0x337d, 0xa282, 0x0002, 0x00c8, 0x337d, 0x0d7e, 0x783b, 0x8300, + 0x781b, 0x004c, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, + 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, + 0x0d7f, 0x2001, 0x0000, 0x0078, 0x3389, 0x783b, 0x1300, 0x781b, + 0x004a, 0x2001, 0x0000, 0x0078, 0x3389, 0x7200, 0x7cd8, 0x7ddc, + 0x7fd0, 0x704a, 0x68a0, 0xd0ec, 0x0040, 0x3391, 0x6008, 0xc08d, + 0x600a, 0xa284, 0x000f, 0x0079, 0x3395, 0x34ed, 0x33a2, 0x339f, + 0x3653, 0x36df, 0x2966, 0x339d, 0x339d, 0x1078, 0x290c, 0x6008, + 0xc0d4, 0x600a, 0xd6e4, 0x0040, 0x33aa, 0x7048, 0xa086, 0x0014, + 0x00c0, 0x33ca, 0x1078, 0x44fb, 0x2009, 0x0000, 0x6818, 0xd0fc, + 0x0040, 0x33b3, 0x7048, 0xa086, 0x0014, 0x0040, 0x33c4, 0x6818, + 0xa086, 0x0008, 0x00c0, 0x34a5, 0x7858, 0xd09c, 0x0040, 0x34a5, + 0x6820, 0xd0ac, 0x0040, 0x34a5, 0x681b, 0x0014, 0x2009, 0x0002, + 0x0078, 0x3409, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x3409, 0xa186, + 0x0008, 0x00c0, 0x33e0, 0x6008, 0xc0a4, 0x600a, 0x1078, 0x3cf5, + 0x0040, 0x3409, 0x1078, 0x3d73, 0x1078, 0x44fb, 0x0078, 0x33f1, + 0xa186, 0x0028, 0x00c0, 0x3409, 0x6018, 0xa005, 0x0040, 0x33d3, + 0x8001, 0x0040, 0x33d3, 0x8001, 0x0040, 0x33d3, 0x601e, 0x0078, + 0x33d3, 0x6820, 0xd084, 0x0040, 0x2966, 0xc084, 0x6822, 0x1078, + 0x2a6d, 0x705c, 0x0c7e, 0x2060, 0x6800, 0x6002, 0x0c7f, 0x6004, + 0x6802, 0xa005, 0x2d00, 0x00c0, 0x3406, 0x6002, 0x6006, 0x0078, + 0x2966, 0x017e, 0x81ff, 0x00c0, 0x3453, 0x7000, 0xa086, 0x0030, + 0x0040, 0x3453, 0x71d4, 0xd1bc, 0x00c0, 0x3453, 0xd1b4, 0x00c0, + 0x343a, 0x7060, 0xa005, 0x00c0, 0x3453, 0x70a4, 0xa086, 0x0001, + 0x0040, 0x3453, 0x7003, 0x0000, 0x047e, 0x057e, 0x077e, 0x067e, + 0x0c7e, 0x0d7e, 0x1078, 0x298f, 0x0d7f, 0x0c7f, 0x067f, 0x077f, + 0x057f, 0x047f, 0x71d4, 0xd1b4, 0x00c0, 0x3453, 0x7003, 0x0040, + 0x0078, 0x3453, 0x1078, 0x42e9, 0x00c0, 0x3453, 0x781b, 0x005b, + 0x0d7e, 0x70bc, 0xa06d, 0x68b4, 0x785a, 0x6894, 0x78d6, 0x78de, + 0x6898, 0x78d2, 0x78da, 0xc1b4, 0x71d6, 0x7003, 0x0030, 0x7808, + 0xc08d, 0x780a, 0x0d7f, 0x1078, 0x358a, 0x017f, 0x81ff, 0x0040, + 0x34a5, 0xa684, 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, 0xa186, + 0x0002, 0x00c0, 0x34a6, 0x6818, 0xa086, 0x0014, 0x00c0, 0x346f, + 0x2008, 0xd6e4, 0x0040, 0x346f, 0x7868, 0xa08c, 0x00ff, 0x1078, + 0x2a5b, 0x1078, 0x2a7c, 0x6820, 0xd0dc, 0x00c0, 0x34a6, 0x8717, + 0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xb284, 0x0300, 0x0040, + 0x3485, 0xa290, 0x51c0, 0x0078, 0x3487, 0xa290, 0x5240, 0xa290, + 0x0000, 0x221c, 0xd3c4, 0x00c0, 0x348f, 0x0078, 0x3495, 0x8210, + 0x2204, 0xa085, 0x0018, 0x2012, 0x8211, 0xd3d4, 0x0040, 0x34a0, + 0x68a0, 0xd0c4, 0x00c0, 0x34a0, 0x1078, 0x3604, 0x0078, 0x2966, + 0x6008, 0xc08d, 0x600a, 0x0078, 0x34a6, 0x692a, 0x6916, 0x6818, + 0xd0fc, 0x0040, 0x34ad, 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, + 0x6410, 0x84ff, 0x0040, 0x34c2, 0x2009, 0x4d02, 0x2104, 0x8001, + 0x200a, 0x8421, 0x6412, 0x00c0, 0x34c2, 0x2021, 0x4d04, 0x2404, + 0xc0a5, 0x2022, 0x6018, 0xa005, 0x0040, 0x34ca, 0x8001, 0x601a, + 0x00c0, 0x34cd, 0x6008, 0xc0a4, 0x600a, 0x6820, 0xd084, 0x00c0, + 0x34d9, 0x6800, 0xa005, 0x00c0, 0x34d6, 0x6002, 0x6006, 0x0078, + 0x34dd, 0x705c, 0x2060, 0x6800, 0x6002, 0x2061, 0x4d00, 0x6887, + 0x0103, 0x2d08, 0x206b, 0x0000, 0x6068, 0xa005, 0x616a, 0x0040, + 0x34ec, 0x2d02, 0x0078, 0x34ed, 0x616e, 0x7200, 0xa286, 0x0030, + 0x0040, 0x34fd, 0xa286, 0x0040, 0x00c0, 0x2966, 0x7003, 0x0002, + 0x704c, 0x2068, 0x68c4, 0x2060, 0x007c, 0x7003, 0x0002, 0x70bc, + 0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00, + 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0xa282, 0x0004, 0x0048, + 0x3513, 0x1078, 0x290c, 0x2200, 0x0079, 0x3516, 0x351a, 0x352b, + 0x3538, 0x352b, 0xa586, 0x1300, 0x0040, 0x352b, 0xa586, 0x8300, + 0x00c0, 0x3511, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, + 0xa084, 0xfbef, 0x600a, 0x7000, 0xa086, 0x0005, 0x0040, 0x3535, + 0x1078, 0x4051, 0x781b, 0x0075, 0x007c, 0x781b, 0x0076, 0x007c, + 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080, 0x0018, 0x789a, + 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0040, 0x354d, 0xa186, + 0x0000, 0x0040, 0x354d, 0x0078, 0x4040, 0x781b, 0x0076, 0x007c, + 0x6820, 0xc095, 0x6822, 0x82ff, 0x00c0, 0x355a, 0x1078, 0x4051, + 0x0078, 0x3561, 0x8211, 0x0040, 0x355f, 0x1078, 0x290c, 0x1078, + 0x4064, 0x781b, 0x0075, 0x007c, 0x1078, 0x42fe, 0x7830, 0xa084, + 0x00c0, 0x00c0, 0x3587, 0x017e, 0x3208, 0x007e, 0x2001, 0x4d04, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x3579, 0xa18c, 0x0300, 0x0078, + 0x357b, 0xa18c, 0x0400, 0x017f, 0x0040, 0x3582, 0x0018, 0x3587, + 0x0078, 0x3584, 0x0028, 0x3587, 0x791a, 0xa006, 0x007c, 0xa085, + 0x0001, 0x007c, 0xa684, 0x0060, 0x00c0, 0x3594, 0x682f, 0x0000, + 0x6833, 0x0000, 0x0078, 0x3603, 0xd6dc, 0x00c0, 0x35ac, 0x68b4, + 0xd0dc, 0x00c0, 0x35ac, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7048, + 0xa005, 0x00c0, 0x35a9, 0x2200, 0xa105, 0x0040, 0x44fb, 0x704b, + 0x0015, 0x0078, 0x44fb, 0x007c, 0xd6ac, 0x0040, 0x35d2, 0xd6f4, + 0x0040, 0x35b8, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x44fb, + 0x68b4, 0xa084, 0x4000, 0xa635, 0xd6f4, 0x00c0, 0x35b2, 0x7048, + 0xa005, 0x00c0, 0x35c5, 0x704b, 0x0015, 0xd6dc, 0x00c0, 0x35ce, + 0x68b4, 0xd0dc, 0x0040, 0x35ce, 0x6ca8, 0x6da4, 0x6c2e, 0x6d32, + 0x0078, 0x44fb, 0xd6f4, 0x0040, 0x35db, 0x682f, 0x0000, 0x6833, + 0x0000, 0x0078, 0x44fb, 0x68b4, 0xa084, 0x4800, 0xa635, 0xd6f4, + 0x00c0, 0x35d5, 0x7048, 0xa005, 0x00c0, 0x35e8, 0x704b, 0x0015, + 0x2408, 0x2510, 0x2700, 0x80fb, 0x00c8, 0x35ef, 0x8000, 0xa084, + 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205, + 0x00c0, 0x35fc, 0x0078, 0x44fb, 0x7000, 0xa086, 0x0006, 0x0040, + 0x3603, 0x0078, 0x44fb, 0x007c, 0x6946, 0x6008, 0xc0cd, 0xd3cc, + 0x0040, 0x360b, 0xc08d, 0x600a, 0x6818, 0x683a, 0x681b, 0x0006, + 0x688f, 0x0000, 0x6893, 0x0000, 0x6a30, 0x692c, 0x6a3e, 0x6942, + 0x682f, 0x0003, 0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, + 0x689b, 0x0020, 0x7000, 0x0079, 0x3625, 0x2966, 0x3637, 0x362f, + 0x362d, 0x362d, 0x362d, 0x362d, 0x362d, 0x1078, 0x290c, 0x6820, + 0xd084, 0x00c0, 0x3637, 0x1078, 0x3d56, 0x0078, 0x363d, 0x705c, + 0x2c50, 0x2060, 0x6800, 0x6002, 0x2a60, 0x3208, 0xa18c, 0x0300, + 0x0040, 0x3646, 0x2021, 0x4d58, 0x0078, 0x3648, 0x2021, 0x4d98, + 0x2404, 0xa005, 0x0040, 0x364f, 0x2020, 0x0078, 0x3648, 0x2d22, + 0x206b, 0x0000, 0x007c, 0x1078, 0x3d5d, 0x1078, 0x3d73, 0x6008, + 0xc0cc, 0x600a, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x6938, + 0x691a, 0x6944, 0x6916, 0x3208, 0xa18c, 0x0300, 0x0040, 0x366c, + 0x2009, 0x0000, 0x0078, 0x366e, 0x2009, 0x0001, 0x1078, 0x496f, + 0xd6dc, 0x0040, 0x3676, 0x691c, 0xc1ed, 0x691e, 0x6818, 0xd0fc, + 0x0040, 0x3685, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x3683, 0x681b, + 0x001e, 0x0078, 0x3685, 0x681b, 0x0000, 0xb284, 0x0300, 0x00c0, + 0x368d, 0x2021, 0x4d98, 0x0078, 0x368f, 0x2021, 0x4d58, 0x6800, + 0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x68c0, 0x2060, 0x6000, + 0xd0a4, 0x0040, 0x36cf, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, + 0x0020, 0x0d7e, 0x0f7e, 0x157e, 0x147e, 0x2079, 0x4d00, 0x1078, + 0x1de6, 0x147f, 0x157f, 0x0f7f, 0x70cc, 0x2010, 0x2009, 0x0101, + 0x027e, 0x2204, 0xa06d, 0x0040, 0x36bf, 0x6814, 0xa706, 0x0040, + 0x36bc, 0x6800, 0x0078, 0x36b2, 0x6820, 0xc0d5, 0x6822, 0x027f, + 0x8210, 0x8109, 0x00c0, 0x36b0, 0x0d7f, 0x7067, 0x0003, 0x707f, + 0x0000, 0x7776, 0x7083, 0x000f, 0x71d4, 0xc1dc, 0x71d6, 0x6818, + 0xa086, 0x0002, 0x00c0, 0x36db, 0x6817, 0x0000, 0x682b, 0x0000, + 0x681c, 0xc0ec, 0x681e, 0x1078, 0x2013, 0x0078, 0x2966, 0x7cd8, + 0x7ddc, 0x7fd0, 0x1078, 0x358a, 0x682b, 0x0000, 0x789b, 0x000e, + 0x6f14, 0x1078, 0x4302, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xd0fc, + 0x0040, 0x36f4, 0x7048, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x7067, + 0x0000, 0x0078, 0x2966, 0x7000, 0xa005, 0x00c0, 0x3701, 0x0078, + 0x2966, 0xa006, 0x1078, 0x44fb, 0x6920, 0xd1ac, 0x00c0, 0x370a, + 0x681b, 0x0014, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x6820, + 0xa084, 0x00ff, 0x6822, 0x7000, 0x0079, 0x3716, 0x2966, 0x3720, + 0x3720, 0x3723, 0x3723, 0x3723, 0x371e, 0x371e, 0x1078, 0x290c, + 0x6818, 0x0078, 0x3385, 0x6008, 0xc0a4, 0x600a, 0x6817, 0x0000, + 0x0078, 0x3d1b, 0x2300, 0x0079, 0x372d, 0x3730, 0x3732, 0x379d, + 0x1078, 0x290c, 0xd6fc, 0x00c0, 0x3784, 0x7000, 0xa00d, 0x0079, + 0x3739, 0x2966, 0x3743, 0x3743, 0x3772, 0x3743, 0x3781, 0x3741, + 0x3741, 0x1078, 0x290c, 0xa684, 0x0060, 0x0040, 0x3772, 0xa086, + 0x0060, 0x00c0, 0x376f, 0xc6ac, 0xc6f4, 0xc6ed, 0x7e5a, 0x681c, + 0xc0ac, 0x681e, 0xa186, 0x0002, 0x0040, 0x3761, 0x1078, 0x44fb, + 0x69ac, 0x68b0, 0xa115, 0x0040, 0x3761, 0x1078, 0x486c, 0x0078, + 0x3763, 0x1078, 0x4834, 0x781b, 0x0076, 0x71d4, 0xd1b4, 0x00c0, + 0x2962, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x29ac, 0x007c, 0xd6ec, + 0x0040, 0x374d, 0x6818, 0xd0fc, 0x0040, 0x3781, 0xd6f4, 0x00c0, + 0x377f, 0x681b, 0x0015, 0x781b, 0x0076, 0x0078, 0x2962, 0x681b, + 0x0007, 0x1078, 0x42a2, 0x007c, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, + 0x78d0, 0x801b, 0x00c8, 0x378d, 0x8000, 0xa084, 0x003f, 0xa108, + 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, + 0xa303, 0x68ae, 0x781b, 0x0076, 0x007c, 0x1078, 0x290c, 0x2300, + 0x0079, 0x37a2, 0x37a7, 0x37cc, 0x382b, 0x1078, 0x290c, 0x7000, + 0x0079, 0x37aa, 0x37b2, 0x37b4, 0x37bd, 0x37b2, 0x37b2, 0x37b2, + 0x37b2, 0x37b2, 0x1078, 0x290c, 0x69ac, 0x68b0, 0xa115, 0x0040, + 0x37bd, 0x1078, 0x486c, 0x0078, 0x37bf, 0x1078, 0x4834, 0x681c, + 0xc0b4, 0x681e, 0x70d4, 0xd0b4, 0x00c0, 0x2962, 0x70a4, 0xa086, + 0x0001, 0x00c0, 0x29ac, 0x007c, 0xd6fc, 0x00c0, 0x381b, 0x7000, + 0xa00d, 0x0079, 0x37d3, 0x2966, 0x37e3, 0x37dd, 0x3812, 0x37e3, + 0x3818, 0x37db, 0x37db, 0x1078, 0x290c, 0x6894, 0x78d6, 0x78de, + 0x6898, 0x78d2, 0x78da, 0xa684, 0x0060, 0x0040, 0x3812, 0xa086, + 0x0060, 0x00c0, 0x380f, 0xa6b4, 0xbfbf, 0xc6ed, 0x7e5a, 0xa186, + 0x0002, 0x0040, 0x37fe, 0x1078, 0x44fb, 0x69ac, 0x68b0, 0xa115, + 0x0040, 0x37fe, 0x1078, 0x486c, 0x0078, 0x3800, 0x1078, 0x4834, + 0x781b, 0x0076, 0x681c, 0xc0b4, 0x681e, 0x71d4, 0xd1b4, 0x00c0, + 0x2962, 0x70a4, 0xa086, 0x0001, 0x00c0, 0x29ac, 0x007c, 0xd6ec, + 0x0040, 0x37ed, 0x6818, 0xd0fc, 0x0040, 0x3818, 0x681b, 0x0007, + 0x781b, 0x00f6, 0x007c, 0xc6fc, 0x7e5a, 0x7adc, 0x79d8, 0x6b98, + 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x79d2, + 0x781b, 0x0076, 0x007c, 0xd6dc, 0x0040, 0x3834, 0x782b, 0x3009, + 0x781b, 0x0076, 0x0078, 0x2962, 0x7884, 0xc0ac, 0x7886, 0x78e4, + 0xa084, 0x0008, 0x00c0, 0x3847, 0xa484, 0x0200, 0x0040, 0x3841, + 0xc6f5, 0xc6dd, 0x7e5a, 0x781b, 0x0076, 0x0078, 0x2962, 0x6820, + 0xc095, 0x6822, 0x1078, 0x421b, 0xc6dd, 0x1078, 0x4051, 0x781b, + 0x0075, 0x0078, 0x2962, 0x2300, 0x0079, 0x3856, 0x3859, 0x385b, + 0x385d, 0x1078, 0x290c, 0x0078, 0x404a, 0xd6d4, 0x00c0, 0x3883, + 0x79e4, 0xd1ac, 0x0040, 0x386b, 0x78ec, 0xa084, 0x0003, 0x0040, + 0x386b, 0x782b, 0x3009, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, + 0xfffb, 0x785a, 0x79e4, 0xd1ac, 0x0040, 0x387b, 0x78ec, 0xa084, + 0x0003, 0x00c0, 0x387f, 0x2001, 0x0014, 0x0078, 0x3385, 0xa184, + 0x0007, 0x0079, 0x38b9, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060, + 0x79a8, 0x81ff, 0x0040, 0x38b7, 0x789b, 0x0010, 0x7ba8, 0xa384, + 0x0001, 0x00c0, 0x38aa, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0, + 0x389d, 0x2009, 0xfff7, 0x0078, 0x38a3, 0xa386, 0x0003, 0x00c0, + 0x38aa, 0x2009, 0xffef, 0x0c7e, 0x7058, 0x2060, 0x6004, 0xa104, + 0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, + 0x785a, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, + 0x4296, 0x302e, 0x3038, 0x38c3, 0x38c9, 0x38c1, 0x38c1, 0x4296, + 0x4296, 0x1078, 0x290c, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, + 0x429c, 0x6920, 0xa18c, 0xfcff, 0x6922, 0x0078, 0x4296, 0x79e4, + 0xa184, 0x0030, 0x0040, 0x38d9, 0x78ec, 0xa084, 0x0003, 0x00c0, + 0x390d, 0x7000, 0xa086, 0x0004, 0x00c0, 0x38f3, 0x7064, 0xa086, + 0x0002, 0x00c0, 0x38e9, 0x2011, 0x0002, 0x2019, 0x0000, 0x0078, + 0x2eba, 0x7064, 0xa086, 0x0006, 0x0040, 0x38e3, 0x7064, 0xa086, + 0x0004, 0x0040, 0x38e3, 0x7000, 0xa086, 0x0000, 0x0040, 0x2962, + 0x6920, 0xa184, 0x0420, 0x0040, 0x3902, 0xc1d4, 0x6922, 0x6818, + 0x0078, 0x3385, 0x6818, 0xa08e, 0x0002, 0x0040, 0x390b, 0xc0fd, + 0x681a, 0x2001, 0x0014, 0x0078, 0x3385, 0xa184, 0x0007, 0x0079, + 0x3911, 0x4296, 0x4296, 0x3919, 0x4296, 0x42de, 0x42de, 0x4296, + 0x4296, 0xd6bc, 0x0040, 0x395b, 0x7184, 0x81ff, 0x0040, 0x395b, + 0xa182, 0x000d, 0x00d0, 0x3928, 0x7087, 0x0000, 0x0078, 0x392d, + 0xa182, 0x000c, 0x7086, 0x2009, 0x000c, 0x789b, 0x0061, 0x79aa, + 0x157e, 0x137e, 0x147e, 0x7088, 0x8114, 0xa210, 0x728a, 0xa080, + 0x000b, 0xad00, 0x2098, 0xb284, 0x0300, 0x0040, 0x394f, 0x007e, + 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x394b, 0x20a1, + 0x012b, 0x0078, 0x3951, 0x20a1, 0x022b, 0x0078, 0x3951, 0x20a1, + 0x012b, 0x789b, 0x0000, 0x8108, 0x81ac, 0x53a6, 0x147f, 0x137f, + 0x157f, 0x0078, 0x429c, 0xd6d4, 0x00c0, 0x39af, 0x6820, 0xd084, + 0x0040, 0x429c, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x396d, + 0xa086, 0x0060, 0x00c0, 0x396d, 0xc1f5, 0xc194, 0x795a, 0x69b6, + 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818, 0xc0fd, + 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x3d8c, 0xa18c, 0x00f8, + 0x00c0, 0x3d8c, 0x157e, 0x137e, 0x147e, 0x017e, 0x3208, 0xa18c, + 0x0300, 0x0040, 0x399b, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x007f, 0x0040, 0x3997, 0x20a1, 0x012b, 0x0078, 0x399d, 0x20a1, + 0x022b, 0x0078, 0x399d, 0x20a1, 0x012b, 0x017f, 0x789b, 0x0000, + 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098, 0x53a6, 0x147f, 0x137f, + 0x157f, 0x6814, 0xc0fc, 0x8007, 0x7882, 0x0078, 0x429c, 0x6818, + 0xd0fc, 0x0040, 0x39b5, 0x681b, 0x0008, 0x6820, 0xc0ad, 0x6822, + 0x1078, 0x4059, 0x781b, 0x00e7, 0x007c, 0x2300, 0x0079, 0x39c0, + 0x39c5, 0x3a9d, 0x39c3, 0x1078, 0x290c, 0x7cd8, 0x7ddc, 0x7fd0, + 0x82ff, 0x00c0, 0x39ee, 0x7200, 0xa286, 0x0003, 0x0040, 0x3352, + 0x71d4, 0xd1bc, 0x00c0, 0x39f1, 0xd1b4, 0x0040, 0x39f1, 0x0d7e, + 0x783b, 0x8800, 0x781b, 0x004c, 0x70bc, 0xa06d, 0x68b4, 0xc0a5, + 0x785a, 0x6894, 0x78d6, 0x78de, 0x6898, 0x78d2, 0x78da, 0xc1b4, + 0x71d6, 0x7003, 0x0030, 0x0d7f, 0x0078, 0x39f5, 0x7200, 0x0078, + 0x39f5, 0x783b, 0x1800, 0x781b, 0x004a, 0xa284, 0x000f, 0x0079, + 0x39f9, 0x3a88, 0x3a37, 0x3a03, 0x3381, 0x3a01, 0x3a88, 0x3a01, + 0x3a01, 0x1078, 0x290c, 0x681c, 0xd0ec, 0x0040, 0x3a0a, 0x6008, + 0xc08d, 0x600a, 0x6920, 0xc185, 0x6922, 0x6800, 0x6006, 0xa005, + 0x00c0, 0x3a13, 0x6002, 0x6008, 0xc0d4, 0x600a, 0x681c, 0xa084, + 0x000e, 0x00c0, 0x3a27, 0xb284, 0x0300, 0x0040, 0x3a23, 0x2009, + 0x93c0, 0x0078, 0x3a2c, 0x2009, 0x94d0, 0x0078, 0x3a2c, 0x7030, + 0x68ba, 0x7140, 0x70cc, 0xa108, 0x2104, 0x6802, 0x2d0a, 0x715e, + 0xd6dc, 0x00c0, 0x3a37, 0xc6fc, 0x6eb6, 0x0078, 0x3a88, 0x6eb6, + 0xa684, 0x0060, 0x00c0, 0x3a41, 0xa684, 0x7fff, 0x68b6, 0x0078, + 0x3a88, 0xd6dc, 0x00c0, 0x3a4f, 0xa684, 0x7fff, 0x68b6, 0x6894, + 0x68a6, 0x6898, 0x68aa, 0x1078, 0x44fb, 0x0078, 0x3a88, 0xd6ac, + 0x0040, 0x3a5b, 0xa006, 0x1078, 0x44fb, 0x2408, 0x2510, 0x69aa, + 0x6aa6, 0x0078, 0x3a6b, 0x2408, 0x2510, 0x2700, 0x801b, 0x00c8, + 0x3a62, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x69aa, + 0x6aa6, 0x1078, 0x44fb, 0xd6fc, 0x0040, 0x3a88, 0xa684, 0x7fff, + 0x68b6, 0x2510, 0x2408, 0xd6ac, 0x00c0, 0x3a80, 0x2700, 0x801b, + 0x00c8, 0x3a7b, 0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, + 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, + 0x7000, 0xa086, 0x0030, 0x00c0, 0x2966, 0x7003, 0x0002, 0x70bc, + 0xa06d, 0x68bc, 0x7042, 0x70b8, 0xa065, 0x68c0, 0x705a, 0x2d00, + 0x704e, 0xad80, 0x0009, 0x7046, 0x007c, 0xa586, 0x8800, 0x00c0, + 0x3aaa, 0x7003, 0x0000, 0x6018, 0x8001, 0x601a, 0x6008, 0xa084, + 0xfbef, 0x600a, 0x0078, 0x404a, 0x7047, 0x0000, 0xa282, 0x0006, + 0x0050, 0x3ab4, 0x1078, 0x290c, 0x2300, 0x0079, 0x3ab7, 0x3aba, + 0x3af1, 0x3b23, 0x2200, 0x0079, 0x3abd, 0x3ac3, 0x404a, 0x3ac5, + 0x3ac3, 0x3b5a, 0x3bc2, 0x1078, 0x290c, 0x7003, 0x0005, 0xb284, + 0x0300, 0x0040, 0x3acf, 0x2001, 0x94e0, 0x0078, 0x3ad1, 0x2001, + 0x9512, 0x2068, 0x704e, 0x157e, 0x20a9, 0x0032, 0x2003, 0x0000, + 0x8000, 0x00f0, 0x3ad6, 0x157f, 0xb284, 0x0300, 0x0040, 0x3ae4, + 0x6817, 0x0000, 0x0078, 0x3ae6, 0x6817, 0x8000, 0xad80, 0x0009, + 0x7046, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x0078, + 0x4040, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3b02, 0x1078, 0x3d73, + 0x0078, 0x3afc, 0x1078, 0x44fb, 0x6008, 0xa084, 0xfbef, 0x600a, + 0x0078, 0x3b07, 0x7000, 0xa086, 0x0003, 0x0040, 0x3afa, 0x7003, + 0x0005, 0xb284, 0x0300, 0x0040, 0x3b11, 0x2001, 0x94e0, 0x0078, + 0x3b13, 0x2001, 0x9512, 0x2068, 0x704e, 0xad80, 0x0009, 0x7046, + 0x2200, 0x0079, 0x3b1b, 0x404a, 0x3b21, 0x3b21, 0x3b5a, 0x3b21, + 0x404a, 0x1078, 0x290c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3b34, + 0x1078, 0x3d73, 0x0078, 0x3b2e, 0x1078, 0x44fb, 0x6008, 0xa084, + 0xfbef, 0x600a, 0x0078, 0x3b39, 0x7000, 0xa086, 0x0003, 0x0040, + 0x3b2c, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, 0x3b43, 0x2001, + 0x94e0, 0x0078, 0x3b45, 0x2001, 0x9512, 0x2068, 0x704e, 0xad80, + 0x0009, 0x7046, 0x2200, 0x0079, 0x3b4d, 0x3b55, 0x3b53, 0x3b53, + 0x3b55, 0x3b53, 0x3b55, 0x1078, 0x290c, 0x1078, 0x4064, 0x781b, + 0x0075, 0x007c, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3b6c, 0x70d4, + 0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, 0x3b71, + 0x1078, 0x44fb, 0x0078, 0x3b71, 0x7000, 0xa086, 0x0003, 0x0040, + 0x3b68, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, + 0x7ca8, 0xa484, 0x001f, 0xa215, 0x2069, 0x93c0, 0xb284, 0x0300, + 0x00c0, 0x3b85, 0xc2fd, 0x2069, 0x94d0, 0x2d04, 0x2d08, 0x715e, + 0xa06d, 0x0040, 0x3b92, 0x6814, 0xa206, 0x0040, 0x3bb2, 0x6800, + 0x0078, 0x3b86, 0x7003, 0x0005, 0xd2fc, 0x00c0, 0x3b9b, 0x2001, + 0x94e0, 0x0078, 0x3b9d, 0x2001, 0x9512, 0x2068, 0x704e, 0x157e, + 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, 0x3ba2, 0x157f, + 0xad80, 0x0009, 0x7046, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, + 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6920, 0xa184, 0x0c00, 0x0040, + 0x3c3c, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x4059, + 0x0078, 0x3c3c, 0x7200, 0xa286, 0x0002, 0x00c0, 0x3bd4, 0x70d4, + 0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, 0x3bd8, + 0x1078, 0x44fb, 0x0078, 0x3bd8, 0xa286, 0x0003, 0x0040, 0x3bd0, + 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, + 0xa484, 0x001f, 0xa215, 0xb284, 0x0300, 0x00c0, 0x3be8, 0xc2fd, + 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0x70cc, 0xa168, 0x2d04, 0x2d08, + 0x715e, 0xa06d, 0x0040, 0x3bfb, 0x6814, 0xa206, 0x0040, 0x3c24, + 0x6800, 0x0078, 0x3bef, 0x7003, 0x0005, 0xb284, 0x0300, 0x0040, + 0x3c05, 0x2001, 0x94e0, 0x0078, 0x3c07, 0x2001, 0x9512, 0x2068, 0x704e, 0x157e, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, 0x00f0, - 0x39b4, 0x157f, 0xb284, 0x0300, 0x0040, 0x39c2, 0x6817, 0x0000, - 0x0078, 0x39c4, 0x6817, 0x8000, 0xad80, 0x0009, 0x7046, 0x68b7, - 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x0078, 0x3e9d, 0x7000, - 0xa086, 0x0002, 0x00c0, 0x39e0, 0x1078, 0x3bd2, 0x0078, 0x39da, - 0x1078, 0x4326, 0x6008, 0xa084, 0xfbef, 0x600a, 0x0078, 0x39e5, - 0x7000, 0xa086, 0x0003, 0x0040, 0x39d8, 0x7003, 0x0005, 0xb284, - 0x0300, 0x0040, 0x39ef, 0x2001, 0x91e0, 0x0078, 0x39f1, 0x2001, - 0x9212, 0x2068, 0x704e, 0xad80, 0x0009, 0x7046, 0x2200, 0x0079, - 0x39f9, 0x3ea7, 0x39ff, 0x39ff, 0x3a38, 0x39ff, 0x3ea7, 0x1078, - 0x28ec, 0x7000, 0xa086, 0x0002, 0x00c0, 0x3a12, 0x1078, 0x3bd2, - 0x0078, 0x3a0c, 0x1078, 0x4326, 0x6008, 0xa084, 0xfbef, 0x600a, - 0x0078, 0x3a17, 0x7000, 0xa086, 0x0003, 0x0040, 0x3a0a, 0x7003, - 0x0005, 0xb284, 0x0300, 0x0040, 0x3a21, 0x2001, 0x91e0, 0x0078, - 0x3a23, 0x2001, 0x9212, 0x2068, 0x704e, 0xad80, 0x0009, 0x7046, - 0x2200, 0x0079, 0x3a2b, 0x3a33, 0x3a31, 0x3a31, 0x3a33, 0x3a31, - 0x3a33, 0x1078, 0x28ec, 0x1078, 0x3ebe, 0x781b, 0x0075, 0x007c, - 0x7000, 0xa086, 0x0002, 0x00c0, 0x3a4a, 0x70d4, 0xc0b5, 0x70d6, - 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, 0x3a4f, 0x1078, 0x4326, - 0x0078, 0x3a4f, 0x7000, 0xa086, 0x0003, 0x0040, 0x3a46, 0x7003, - 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, - 0x001f, 0xa215, 0x2069, 0x90c0, 0xb284, 0x0300, 0x00c0, 0x3a63, - 0xc2fd, 0x2069, 0x91d0, 0x2d04, 0x2d08, 0x715e, 0xa06d, 0x0040, - 0x3a70, 0x6814, 0xa206, 0x0040, 0x3a90, 0x6800, 0x0078, 0x3a64, - 0x7003, 0x0005, 0xd2fc, 0x00c0, 0x3a79, 0x2001, 0x91e0, 0x0078, - 0x3a7b, 0x2001, 0x9212, 0x2068, 0x704e, 0x157e, 0x20a9, 0x0032, - 0x2003, 0x0000, 0x8000, 0x00f0, 0x3a80, 0x157f, 0xad80, 0x0009, - 0x7046, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, - 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x3b10, 0x1078, - 0x3eb6, 0x0078, 0x3b10, 0x7200, 0xa286, 0x0002, 0x00c0, 0x3aad, - 0x70d4, 0xc0b5, 0x70d6, 0x2c00, 0x70ba, 0x2d00, 0x70be, 0x0078, - 0x3ab1, 0x1078, 0x4326, 0x0078, 0x3ab1, 0xa286, 0x0003, 0x0040, - 0x3aa9, 0x7003, 0x0001, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, - 0x7ca8, 0xa484, 0x001f, 0xa215, 0xb284, 0x0300, 0x00c0, 0x3ac1, - 0xc2fd, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0x70cc, 0xa168, 0x2d04, - 0x2d08, 0x715e, 0xa06d, 0x0040, 0x3ad4, 0x6814, 0xa206, 0x0040, - 0x3afd, 0x6800, 0x0078, 0x3ac8, 0x7003, 0x0005, 0xb284, 0x0300, - 0x0040, 0x3ade, 0x2001, 0x91e0, 0x0078, 0x3ae0, 0x2001, 0x9212, - 0x2068, 0x704e, 0x157e, 0x20a9, 0x0032, 0x2003, 0x0000, 0x8000, - 0x00f0, 0x3ae5, 0x157f, 0xb284, 0x0300, 0x0040, 0x3af2, 0xc2fc, - 0x0078, 0x3af3, 0xc2fd, 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, - 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x6820, 0xa084, - 0x0c00, 0x0040, 0x3b10, 0xd0dc, 0x0040, 0x3b0a, 0x1078, 0x3eba, - 0x0078, 0x3b10, 0x1078, 0x3eb6, 0x707f, 0x0000, 0x0078, 0x3b10, - 0xa6ac, 0x0060, 0x0040, 0x3b4e, 0x6b98, 0x6c94, 0x69ac, 0x68b0, - 0xa105, 0x00c0, 0x3b33, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa6b4, - 0xb7ff, 0xa586, 0x0060, 0x0040, 0x3b4e, 0xc6ed, 0x7e5a, 0x2009, - 0x0076, 0xd69c, 0x0040, 0x3b2e, 0x2009, 0x0075, 0x791a, 0x1078, - 0x45f7, 0x0078, 0x3b57, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, - 0xa305, 0x0040, 0x3b4e, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, - 0xc6f4, 0x7e5a, 0x2011, 0x0076, 0xd69c, 0x0040, 0x3b49, 0x2011, - 0x0075, 0x7a1a, 0x1078, 0x462d, 0x0078, 0x3b57, 0x7e5a, 0x2009, - 0x0076, 0xd69c, 0x0040, 0x3b56, 0x2009, 0x0075, 0x791a, 0x68c0, - 0x705a, 0x2d00, 0x704e, 0x68c4, 0x2060, 0x71d4, 0xd1b4, 0x00c0, - 0x2942, 0x2300, 0xa405, 0x0040, 0x2942, 0x70a4, 0xa086, 0x0001, - 0x00c0, 0x2989, 0x007c, 0x6020, 0xa005, 0x0040, 0x3b79, 0x8001, - 0x6022, 0x6008, 0xa085, 0x0008, 0x600a, 0x700f, 0x0100, 0x702c, - 0x6026, 0x007c, 0xa006, 0x1078, 0x4326, 0x6817, 0x0000, 0x681b, - 0x0001, 0x6823, 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, - 0x0079, 0x3b8a, 0x2946, 0x3b94, 0x3b94, 0x3bb1, 0x3b9c, 0x2946, - 0x3b92, 0x3b92, 0x1078, 0x28ec, 0x1078, 0x3bbc, 0x1078, 0x3bb5, - 0x1078, 0x202a, 0x0078, 0x2946, 0x7064, 0x7067, 0x0000, 0x7083, - 0x0000, 0x0079, 0x3ba3, 0x3bad, 0x3bad, 0x3bab, 0x3bab, 0x3bab, - 0x3bad, 0x3bab, 0x3bad, 0x0079, 0x2e5c, 0x7067, 0x0000, 0x0078, - 0x2946, 0x681b, 0x0000, 0x0078, 0x35ae, 0x6800, 0xa005, 0x00c0, - 0x3bba, 0x6002, 0x6006, 0x007c, 0x6410, 0x84ff, 0x0040, 0x3bce, - 0x2009, 0x4a02, 0x2104, 0x8001, 0x200a, 0x8421, 0x6412, 0x00c0, - 0x3bce, 0x2021, 0x4a04, 0x2404, 0xc0a5, 0x2022, 0x6008, 0xc0a4, - 0x600a, 0x007c, 0x6018, 0xa005, 0x0040, 0x3bd8, 0x8001, 0x601a, - 0x007c, 0x1078, 0x4131, 0x681b, 0x0018, 0x0078, 0x3c1a, 0x1078, - 0x4131, 0x681b, 0x0019, 0x0078, 0x3c1a, 0x1078, 0x4131, 0x681b, - 0x001a, 0x0078, 0x3c1a, 0x1078, 0x4131, 0x681b, 0x0003, 0x0078, - 0x3c1a, 0x7774, 0x1078, 0x3fe1, 0x7178, 0xa18c, 0x00ff, 0x3210, - 0xa294, 0x0300, 0x0040, 0x3c00, 0xa1e8, 0x8fc0, 0x0078, 0x3c02, - 0xa1e8, 0x90d0, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x3c0a, - 0x0078, 0x2946, 0x6814, 0xc0fc, 0x7274, 0xc2fc, 0xa206, 0x0040, - 0x3c14, 0x6800, 0x0078, 0x3c03, 0x6800, 0x200a, 0x681b, 0x0005, - 0x707f, 0x0000, 0x1078, 0x3bbc, 0x6820, 0xd084, 0x00c0, 0x3c22, - 0x1078, 0x3bb5, 0x1078, 0x3bd2, 0x681f, 0x0000, 0x6823, 0x0020, - 0x1078, 0x202a, 0x0078, 0x2946, 0xa282, 0x0003, 0x00c0, 0x3e9d, - 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, 0xc1bd, - 0x6922, 0xd1c4, 0x0040, 0x3c86, 0xc1c4, 0x6922, 0xa6b4, 0x00ff, - 0x0040, 0x3c73, 0xa682, 0x000c, 0x0048, 0x3c4a, 0x0040, 0x3c4a, - 0x2031, 0x000c, 0x2500, 0xa086, 0x000a, 0x0040, 0x3c51, 0x852b, - 0x852b, 0x1078, 0x3f73, 0x0040, 0x3c59, 0x1078, 0x3d55, 0x0078, - 0x3c7c, 0x1078, 0x3f2e, 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, - 0x6006, 0x1078, 0x3d8a, 0x0c7f, 0x6920, 0xc1c5, 0x6922, 0x7e58, - 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3c70, 0x781b, 0x0061, 0x007c, - 0x781b, 0x0075, 0x007c, 0x0c7e, 0x2960, 0x6004, 0xa084, 0xfff5, - 0x6006, 0x1078, 0x3d8a, 0x0c7f, 0x7e58, 0xd6d4, 0x00c0, 0x3c83, - 0x781b, 0x0064, 0x007c, 0x781b, 0x0076, 0x007c, 0x0c7e, 0x7058, - 0x2060, 0x6100, 0xd1e4, 0x0040, 0x3ccf, 0x6208, 0x8217, 0xa294, - 0x00ff, 0xa282, 0x000c, 0x0048, 0x3c99, 0x0040, 0x3c99, 0x2011, - 0x000c, 0x2600, 0xa202, 0x00c8, 0x3c9e, 0x2230, 0x6208, 0xa294, - 0x00ff, 0x2001, 0x4a05, 0x2004, 0xd0e4, 0x00c0, 0x3cb3, 0x78ec, - 0xd0e4, 0x0040, 0x3cb3, 0xa282, 0x000a, 0x00c8, 0x3cb9, 0x2011, - 0x000a, 0x0078, 0x3cb9, 0xa282, 0x000c, 0x00c8, 0x3cb9, 0x2011, - 0x000c, 0x2200, 0xa502, 0x00c8, 0x3cbe, 0x2228, 0x1078, 0x3f32, - 0x2500, 0xa086, 0x000a, 0x0040, 0x3cc7, 0x852b, 0x852b, 0x1078, - 0x3f73, 0x0040, 0x3ccf, 0x1078, 0x3d55, 0x0078, 0x3cd3, 0x1078, - 0x3f2e, 0x1078, 0x3d8a, 0x7858, 0xc095, 0x785a, 0x0c7f, 0x781b, - 0x0075, 0x007c, 0x0c7e, 0x2960, 0x6000, 0xd0e4, 0x00c0, 0x3cf1, - 0x6010, 0xa084, 0x000f, 0x00c0, 0x3ceb, 0x6104, 0xa18c, 0xfff5, - 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, - 0x3d1c, 0x68a0, 0xd0cc, 0x00c0, 0x3ceb, 0x6208, 0xa294, 0x00ff, - 0x2001, 0x4a05, 0x2004, 0xd0e4, 0x00c0, 0x3d0a, 0x78ec, 0xd0e4, - 0x0040, 0x3d0a, 0xa282, 0x000a, 0x00c0, 0x3d0a, 0x2011, 0x000a, - 0x0078, 0x3d10, 0xa282, 0x000c, 0x00c8, 0x3d10, 0x2011, 0x000c, - 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c, 0x0048, 0x3d1c, - 0x0040, 0x3d1c, 0x2019, 0x000c, 0x78ab, 0x0001, 0x78ab, 0x0003, - 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, 0x6820, 0xc0c5, - 0x6822, 0x70d4, 0xd0b4, 0x0040, 0x3d38, 0xc0b4, 0x70d6, 0x70b8, - 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, - 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0x6104, 0xa18c, 0xfff5, 0x6106, - 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x3d46, 0x78ab, 0x0001, + 0x3c0c, 0x157f, 0xb284, 0x0300, 0x0040, 0x3c19, 0xc2fc, 0x0078, + 0x3c1a, 0xc2fd, 0x6a16, 0xad80, 0x0009, 0x7046, 0x68b7, 0x0700, + 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x6920, 0xa184, 0x0c00, + 0x0040, 0x3c3c, 0xd0dc, 0x0040, 0x3c31, 0x1078, 0x4060, 0x0078, + 0x3c3c, 0x681b, 0x0005, 0xc1ad, 0xc1d4, 0x6922, 0x1078, 0x4059, + 0x707f, 0x0000, 0x0078, 0x3c3c, 0xc6ec, 0xa6ac, 0x0060, 0x0040, + 0x3c90, 0x6b98, 0x6c94, 0x69ac, 0x68b0, 0xa105, 0x00c0, 0x3c69, + 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0xa586, 0x0060, 0x0040, 0x3c8e, + 0xd6f4, 0x00c0, 0x3c54, 0xc6ed, 0xa6b4, 0xb7ff, 0x7e5a, 0x2009, + 0x0076, 0xd69c, 0x0040, 0x3c61, 0x2009, 0x0075, 0x2019, 0x0000, + 0x2320, 0x791a, 0xd6ec, 0x0040, 0x3c99, 0x1078, 0x4834, 0x0078, + 0x3c99, 0x68b0, 0xa31a, 0x2100, 0xa423, 0x2400, 0xa305, 0x0040, + 0x3c90, 0x7bd2, 0x7bda, 0x7cd6, 0x7cde, 0x68b0, 0xd6f4, 0x00c0, + 0x3c7a, 0xc6ed, 0xc6f4, 0x7e5a, 0x2011, 0x0076, 0xd69c, 0x0040, + 0x3c86, 0x2011, 0x0075, 0x2019, 0x0000, 0x2320, 0x7a1a, 0xd6ec, + 0x0040, 0x3c99, 0x1078, 0x486c, 0x0078, 0x3c99, 0xa6b4, 0xb7ff, + 0x7e5a, 0x2009, 0x0076, 0xd69c, 0x0040, 0x3c98, 0x2009, 0x0075, + 0x791a, 0x68c0, 0x705a, 0x2d00, 0x704e, 0x68c4, 0x2060, 0x71d4, + 0x70d8, 0xa02d, 0x0040, 0x3cc1, 0xd1bc, 0x0040, 0x3cdb, 0x7a80, + 0xa294, 0x0f00, 0x70dc, 0xa206, 0x0040, 0x3cb2, 0x78e0, 0xa504, + 0x00c0, 0x3ce8, 0x70da, 0xc1bc, 0x71d6, 0x0078, 0x3ce8, 0x2031, + 0x0001, 0x852c, 0x0048, 0x3cc0, 0x8633, 0x8210, 0x0078, 0x3cb9, + 0x007c, 0x7de0, 0xa594, 0xff00, 0x0040, 0x3cce, 0x2011, 0x0008, + 0x852f, 0x1078, 0x3cb7, 0x8637, 0x0078, 0x3cd0, 0x1078, 0x3cb7, + 0x8217, 0x7880, 0xa084, 0x0f00, 0xa206, 0x0040, 0x3ce8, 0x72de, + 0x76da, 0x0078, 0x3ce8, 0x7a80, 0xa294, 0x0f00, 0x70dc, 0xa236, + 0x0040, 0x3cd8, 0x78e0, 0xa534, 0x0040, 0x3cd8, 0xc1bd, 0x71d6, + 0xd1b4, 0x00c0, 0x2962, 0x2300, 0xa405, 0x0040, 0x2962, 0x70a4, + 0xa086, 0x0001, 0x00c0, 0x29ac, 0x007c, 0x6020, 0xa005, 0x0040, + 0x3d03, 0x8001, 0x6022, 0x6008, 0xa085, 0x0008, 0x600a, 0x700f, + 0x0100, 0x702c, 0x6026, 0x007c, 0xa006, 0x1078, 0x44fb, 0x7000, + 0xa086, 0x0002, 0x0040, 0x3d11, 0x7064, 0xa086, 0x0005, 0x00c0, + 0x3d1b, 0x682b, 0x0000, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, + 0x0040, 0x681f, 0x0100, 0x7000, 0xa084, 0x000f, 0x0079, 0x3d20, + 0x2966, 0x3d30, 0x3d2a, 0x3d52, 0x3d3a, 0x2966, 0x3d28, 0x3d28, + 0x1078, 0x290c, 0x1078, 0x3d5d, 0x1078, 0x3d56, 0x0078, 0x3d36, + 0x1078, 0x3d5d, 0x705c, 0x2060, 0x6800, 0x6002, 0x1078, 0x2013, + 0x0078, 0x2966, 0x7064, 0x7067, 0x0000, 0x7083, 0x0000, 0x0079, + 0x3d41, 0x3d4e, 0x3d4e, 0x3d49, 0x3d49, 0x3d49, 0x3d4e, 0x3d49, + 0x3d4e, 0x77d4, 0xc7dd, 0x77d6, 0x0079, 0x2ed3, 0x7067, 0x0000, + 0x0078, 0x2966, 0x681b, 0x0000, 0x0078, 0x3653, 0x6800, 0xa005, + 0x00c0, 0x3d5b, 0x6002, 0x6006, 0x007c, 0x6410, 0x84ff, 0x0040, + 0x3d6f, 0x2009, 0x4d02, 0x2104, 0x8001, 0x200a, 0x8421, 0x6412, + 0x00c0, 0x3d6f, 0x2021, 0x4d04, 0x2404, 0xc0a5, 0x2022, 0x6008, + 0xc0a4, 0x600a, 0x007c, 0x6018, 0xa005, 0x0040, 0x3d79, 0x8001, + 0x601a, 0x007c, 0x1078, 0x42fe, 0x681b, 0x0018, 0x0078, 0x3dbc, + 0x1078, 0x42fe, 0x681b, 0x0019, 0x0078, 0x3dbc, 0x1078, 0x42fe, + 0x681b, 0x001a, 0x0078, 0x3dbc, 0x1078, 0x42fe, 0x681b, 0x0003, + 0x0078, 0x3dbc, 0x7774, 0x1078, 0x4187, 0x7178, 0xa18c, 0x00ff, + 0x3210, 0xa294, 0x0300, 0x0040, 0x3da1, 0xa1e8, 0x92c0, 0x0078, + 0x3da3, 0xa1e8, 0x93d0, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, + 0x3dac, 0x707e, 0x0078, 0x2966, 0x6814, 0xc0fc, 0x7274, 0xc2fc, + 0xa206, 0x0040, 0x3db6, 0x6800, 0x0078, 0x3da4, 0x6800, 0x200a, + 0x681b, 0x0005, 0x707f, 0x0000, 0x1078, 0x3d5d, 0x6820, 0xd084, + 0x00c0, 0x3dc4, 0x1078, 0x3d56, 0x1078, 0x3d73, 0x681f, 0x0000, + 0x6823, 0x0020, 0x1078, 0x2013, 0x0078, 0x2966, 0xa282, 0x0003, + 0x00c0, 0x4040, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4, 0x00ff, + 0x6920, 0xc1bd, 0x6922, 0xd1c4, 0x0040, 0x3e28, 0xc1c4, 0x6922, + 0xa6b4, 0x00ff, 0x0040, 0x3e15, 0xa682, 0x000c, 0x0048, 0x3dec, + 0x0040, 0x3dec, 0x2031, 0x000c, 0x2500, 0xa086, 0x000a, 0x0040, + 0x3df3, 0x852b, 0x852b, 0x1078, 0x4119, 0x0040, 0x3dfb, 0x1078, + 0x3ef7, 0x0078, 0x3e1e, 0x1078, 0x40d4, 0x0c7e, 0x2960, 0x6004, + 0xa084, 0xfff5, 0x6006, 0x1078, 0x3f2d, 0x0c7f, 0x6920, 0xc1c5, + 0x6922, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, 0x3e12, 0x781b, + 0x0061, 0x007c, 0x781b, 0x0075, 0x007c, 0x0c7e, 0x2960, 0x6004, + 0xa084, 0xfff5, 0x6006, 0x1078, 0x3f2d, 0x0c7f, 0x7e58, 0xd6d4, + 0x00c0, 0x3e25, 0x781b, 0x0064, 0x007c, 0x781b, 0x0076, 0x007c, + 0x0c7e, 0x7058, 0x2060, 0x6100, 0xd1e4, 0x0040, 0x3e71, 0x6208, + 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c, 0x0048, 0x3e3b, 0x0040, + 0x3e3b, 0x2011, 0x000c, 0x2600, 0xa202, 0x00c8, 0x3e40, 0x2230, + 0x6208, 0xa294, 0x00ff, 0x2001, 0x4d05, 0x2004, 0xd0e4, 0x00c0, + 0x3e55, 0x78ec, 0xd0e4, 0x0040, 0x3e55, 0xa282, 0x000a, 0x00c8, + 0x3e5b, 0x2011, 0x000a, 0x0078, 0x3e5b, 0xa282, 0x000c, 0x00c8, + 0x3e5b, 0x2011, 0x000c, 0x2200, 0xa502, 0x00c8, 0x3e60, 0x2228, + 0x1078, 0x40d8, 0x2500, 0xa086, 0x000a, 0x0040, 0x3e69, 0x852b, + 0x852b, 0x1078, 0x4119, 0x0040, 0x3e71, 0x1078, 0x3ef7, 0x0078, + 0x3e75, 0x1078, 0x40d4, 0x1078, 0x3f2d, 0x7858, 0xc095, 0x785a, + 0x0c7f, 0x781b, 0x0075, 0x007c, 0x0c7e, 0x2960, 0x6000, 0xd0e4, + 0x00c0, 0x3e93, 0x6010, 0xa084, 0x000f, 0x00c0, 0x3e8d, 0x6104, + 0xa18c, 0xfff5, 0x6106, 0x0c7f, 0x007c, 0x2011, 0x0032, 0x2019, + 0x0000, 0x0078, 0x3ebe, 0x68a0, 0xd0cc, 0x00c0, 0x3e8d, 0x6208, + 0xa294, 0x00ff, 0x2001, 0x4d05, 0x2004, 0xd0e4, 0x00c0, 0x3eac, + 0x78ec, 0xd0e4, 0x0040, 0x3eac, 0xa282, 0x000b, 0x00c8, 0x3eac, + 0x2011, 0x000a, 0x0078, 0x3eb2, 0xa282, 0x000c, 0x00c8, 0x3eb2, + 0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c, + 0x0048, 0x3ebe, 0x0040, 0x3ebe, 0x2019, 0x000c, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, 0xa8c0, 0x0005, - 0x6820, 0xc0c5, 0x6822, 0x0c7f, 0x007c, 0x0c7e, 0x7158, 0x2160, - 0x2018, 0xa08c, 0x0020, 0x0040, 0x3d5e, 0xc0ac, 0x2008, 0xa084, - 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, 0x6612, 0x78a4, - 0xa084, 0xfff0, 0xa18c, 0x000f, 0xa105, 0xa39c, 0x0020, 0x0040, - 0x3d73, 0xa085, 0x4000, 0xc0fc, 0xd0b4, 0x00c0, 0x3d78, 0xc0fd, - 0x78a6, 0x6016, 0x788a, 0xa6b4, 0x000f, 0x8637, 0x8204, 0x8004, - 0xa084, 0x00ff, 0xa605, 0x600e, 0x6004, 0xa084, 0xfff5, 0x6006, - 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x6018, 0x789a, 0x78a4, - 0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884, 0xa084, 0xfff0, 0x7886, - 0x600c, 0xa084, 0x00ff, 0x600e, 0x0c7f, 0x007c, 0xa282, 0x0002, - 0x00c0, 0x3e9d, 0x7aa8, 0x6920, 0xc1bd, 0x6922, 0xd1cc, 0x0040, - 0x3dd9, 0xc1cc, 0x6922, 0xa294, 0x00ff, 0xa282, 0x0002, 0x00c8, - 0x3e9d, 0x1078, 0x3e2a, 0x1078, 0x3d8a, 0xa980, 0x0001, 0x200c, - 0x1078, 0x3fdd, 0x1078, 0x3cda, 0x88ff, 0x0040, 0x3dcf, 0x789b, - 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, 0x7e5a, 0xd6d4, 0x00c0, - 0x3dcc, 0x781b, 0x0061, 0x007c, 0x781b, 0x0075, 0x007c, 0x7e58, - 0xd6d4, 0x00c0, 0x3dd6, 0x781b, 0x0064, 0x007c, 0x781b, 0x0076, - 0x007c, 0xa282, 0x0002, 0x00c8, 0x3de1, 0xa284, 0x0001, 0x0040, - 0x3dea, 0x7158, 0xa188, 0x0000, 0x210c, 0xd1ec, 0x00c0, 0x3dea, - 0x2011, 0x0000, 0x1078, 0x3f0f, 0x1078, 0x3e2a, 0x1078, 0x3d8a, - 0x7858, 0xc095, 0x785a, 0x781b, 0x0075, 0x007c, 0x0c7e, 0x027e, - 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, 0x00c0, 0x3e0b, 0x6014, - 0xa084, 0x0040, 0x00c0, 0x3e09, 0xc1a4, 0x6106, 0xa006, 0x0078, - 0x3e27, 0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, - 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x70d4, 0xd0b4, 0x0040, 0x3e23, - 0xc0b4, 0x70d6, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, - 0x6018, 0x8001, 0x601a, 0x6820, 0xa085, 0x0200, 0x6822, 0x027f, - 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, 0x82ff, 0x0040, 0x3e32, - 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084, - 0xffbf, 0xa205, 0xc0fc, 0xd0b4, 0x00c0, 0x3e3f, 0xc0fd, 0x78a6, - 0x6016, 0x788a, 0x6004, 0xc0a4, 0x6006, 0x0c7f, 0x007c, 0x007e, - 0x7000, 0xa086, 0x0003, 0x0040, 0x3e50, 0x007f, 0x0078, 0x3e53, - 0x007f, 0x0078, 0x3e9a, 0xd6ac, 0x0040, 0x3e9a, 0x7888, 0xa084, - 0x0040, 0x0040, 0x3e9a, 0x7bb8, 0xa384, 0x003f, 0x831b, 0x00c8, - 0x3e62, 0x8000, 0xa005, 0x0040, 0x3e77, 0x831b, 0x00c8, 0x3e6b, - 0x8001, 0x0040, 0x3e97, 0xd6f4, 0x0040, 0x3e77, 0x78b8, 0x801b, - 0x00c8, 0x3e73, 0x8000, 0xa084, 0x003f, 0x00c0, 0x3e97, 0xc6f4, - 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, 0xa108, 0x00c8, 0x3e82, - 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, 0x7ade, 0x1078, 0x46e5, - 0x781b, 0x0073, 0xb284, 0x0300, 0x0040, 0x3e92, 0x2001, 0x0000, - 0x0078, 0x3e94, 0x2001, 0x0001, 0x1078, 0x4585, 0x007c, 0x781b, - 0x0073, 0x007c, 0x781b, 0x0076, 0x007c, 0x1078, 0x3ec2, 0x781b, - 0x0075, 0x007c, 0x1078, 0x3eae, 0x781b, 0x0075, 0x007c, 0x6827, - 0x0002, 0x1078, 0x3eb6, 0x781b, 0x0075, 0x007c, 0x2001, 0x0005, - 0x0078, 0x3ec4, 0x2001, 0x000c, 0x0078, 0x3ec4, 0x2001, 0x0006, - 0x0078, 0x3ec4, 0x2001, 0x000d, 0x0078, 0x3ec4, 0x2001, 0x0009, - 0x0078, 0x3ec4, 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa, 0xc69d, - 0x7e5a, 0x70d4, 0xd0b4, 0x0040, 0x3eda, 0xc0b4, 0x70d6, 0x0c7e, - 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, - 0x601a, 0x0c7f, 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, - 0x873b, 0x8703, 0x017e, 0xb28c, 0x0300, 0x0040, 0x3eeb, 0xa0e0, - 0x4ec0, 0x0078, 0x3eed, 0xa0e0, 0x4f40, 0x017f, 0xa7b8, 0x0020, - 0x7f9a, 0x79a4, 0xa184, 0x000f, 0x0040, 0x3efd, 0xa184, 0xfff0, - 0x78a6, 0x6012, 0x6004, 0xc09d, 0x6006, 0x8738, 0x8738, 0x7f9a, - 0x79a4, 0xa184, 0x0040, 0x0040, 0x3f0d, 0xa184, 0xffbf, 0xc0fd, - 0x78a6, 0x6016, 0x6004, 0xc0a5, 0x6006, 0x077f, 0x007c, 0x789b, - 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, - 0x789b, 0x0060, 0x78ab, 0x0004, 0x70d4, 0xd0b4, 0x0040, 0x3f2d, - 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, - 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, 0x2031, 0x0000, - 0x2029, 0x0032, 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, - 0x78ab, 0x0001, 0x7daa, 0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, - 0x70d4, 0xd0b4, 0x0040, 0x3f51, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, - 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, - 0x0c7f, 0x007c, 0x157e, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, - 0xa080, 0x0020, 0x789a, 0x79a4, 0xa18c, 0xfff0, 0x2021, 0x3fc6, - 0x2019, 0x0011, 0x20a9, 0x000e, 0x2011, 0x0032, 0x2404, 0xa084, - 0xfff0, 0xa106, 0x0040, 0x3f71, 0x8420, 0x2300, 0xa210, 0x00f0, - 0x3f66, 0x157f, 0x007c, 0x157e, 0x2001, 0x4a05, 0x2004, 0xd0e4, - 0x00c0, 0x3fa4, 0x2021, 0x3fd4, 0x20a9, 0x0009, 0x2011, 0x0028, - 0xa582, 0x0019, 0x0040, 0x3fba, 0x0048, 0x3fba, 0x8420, 0x95a9, - 0x2011, 0x0032, 0xa582, 0x0032, 0x0040, 0x3fba, 0x0048, 0x3fba, - 0x8420, 0x95a9, 0x2019, 0x000a, 0x2011, 0x0064, 0x2200, 0xa502, - 0x0040, 0x3fba, 0x0048, 0x3fba, 0x8420, 0x2300, 0xa210, 0x00f0, - 0x3f96, 0x157f, 0x0078, 0x3fb8, 0x2021, 0x3fc6, 0x2019, 0x0011, - 0x20a9, 0x000e, 0x2011, 0x0032, 0x2200, 0xa502, 0x0040, 0x3fba, - 0x0048, 0x3fba, 0x8420, 0x2300, 0xa210, 0x00f0, 0x3fac, 0x157f, - 0xa006, 0x007c, 0x157f, 0xa582, 0x0064, 0x00c8, 0x3fc3, 0x7808, - 0xa085, 0x0070, 0x780a, 0x2404, 0xa005, 0x007c, 0x1209, 0x3002, - 0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, - 0x7a06, 0x0c07, 0x0c07, 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, - 0x6a06, 0x6c06, 0x7c07, 0x7e07, 0x0e00, 0x789b, 0x0010, 0xa046, - 0x007c, 0xa784, 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, - 0x8003, 0x8003, 0xa105, 0xd7fc, 0x0040, 0x3ff2, 0xa0e0, 0x6fc0, - 0x0078, 0x3ff4, 0xa0e0, 0x4fc0, 0x007c, 0x0e7e, 0x0f7e, 0xd084, - 0x0040, 0x4002, 0x2079, 0x0100, 0x2009, 0x4a80, 0x2071, 0x4a80, - 0x0078, 0x4014, 0x2009, 0x4a40, 0x007e, 0x2001, 0x4a04, 0x2004, - 0xd0ec, 0x007f, 0x0040, 0x4010, 0x2079, 0x0100, 0x0078, 0x4014, - 0x2079, 0x0200, 0x2071, 0x4a40, 0x2091, 0x8000, 0x2104, 0xa084, - 0x000f, 0x0079, 0x401b, 0x405d, 0x4025, 0x4025, 0x4025, 0x4025, - 0x4025, 0x4023, 0x4023, 0x1078, 0x28ec, 0x784b, 0x0004, 0x7848, - 0xa084, 0x0004, 0x00c0, 0x4027, 0x784b, 0x0008, 0x7848, 0xa084, - 0x0008, 0x00c0, 0x402e, 0x68b4, 0xc0f5, 0x68b6, 0x7858, 0xc0f5, - 0x785a, 0x7830, 0xd0bc, 0x00c0, 0x405d, 0x007e, 0x2001, 0x4a04, - 0x2004, 0xd0ec, 0x007f, 0x0040, 0x4049, 0xb284, 0x0300, 0x0078, - 0x404b, 0xb284, 0x0400, 0x0040, 0x4051, 0x0018, 0x405d, 0x0078, - 0x4053, 0x0028, 0x405d, 0x681c, 0xd0ac, 0x00c0, 0x405b, 0x1078, - 0x40d5, 0x0078, 0x405d, 0x781b, 0x00f0, 0x2091, 0x8001, 0x0f7f, - 0x0e7f, 0x007c, 0x0c7e, 0x2001, 0x4a01, 0x2004, 0xd0ac, 0x00c0, - 0x40c7, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, - 0xb28c, 0x0300, 0x0040, 0x4078, 0xa0e0, 0x4ec0, 0x0078, 0x407a, - 0xa0e0, 0x4f40, 0x6004, 0xa084, 0x000a, 0x00c0, 0x40c7, 0x6108, - 0xa194, 0xff00, 0x0040, 0x40c7, 0xa18c, 0x00ff, 0x2001, 0x000a, - 0xa106, 0x0040, 0x40a6, 0x2001, 0x000c, 0xa106, 0x0040, 0x40aa, - 0x2001, 0x0012, 0xa106, 0x0040, 0x40ae, 0x2001, 0x0014, 0xa106, - 0x0040, 0x40b2, 0x2001, 0x0019, 0xa106, 0x0040, 0x40b6, 0x2001, - 0x0032, 0xa106, 0x0040, 0x40ba, 0x0078, 0x40be, 0x2009, 0x000c, - 0x0078, 0x40c0, 0x2009, 0x0012, 0x0078, 0x40c0, 0x2009, 0x0014, - 0x0078, 0x40c0, 0x2009, 0x0019, 0x0078, 0x40c0, 0x2009, 0x0020, - 0x0078, 0x40c0, 0x2009, 0x003f, 0x0078, 0x40c0, 0x2011, 0x0000, - 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, 0x0c7f, - 0x007c, 0x781b, 0x0076, 0x007c, 0x781b, 0x0075, 0x007c, 0x781b, - 0x0064, 0x007c, 0x781b, 0x0061, 0x007c, 0x2009, 0x4a19, 0x210c, - 0xa186, 0x0000, 0x0040, 0x40e7, 0xa186, 0x0001, 0x0040, 0x40ea, - 0x701f, 0x000b, 0x7067, 0x0001, 0x781b, 0x0047, 0x007c, 0x781b, - 0x00e7, 0x007c, 0x701f, 0x000a, 0x007c, 0x2009, 0x4a19, 0x210c, - 0xa186, 0x0000, 0x0040, 0x4102, 0xa186, 0x0001, 0x0040, 0x40ff, - 0x701f, 0x000b, 0x7067, 0x0001, 0x781b, 0x0047, 0x007c, 0x701f, - 0x000a, 0x007c, 0x781b, 0x00e6, 0x007c, 0x781b, 0x00f0, 0x007c, - 0x781b, 0x00ef, 0x007c, 0x781b, 0x00c0, 0x007c, 0x781b, 0x00bf, - 0x007c, 0x6818, 0xd0fc, 0x0040, 0x4117, 0x681b, 0x001d, 0x7067, - 0x0001, 0x781b, 0x0047, 0x007c, 0x7830, 0xa084, 0x00c0, 0x00c0, - 0x4130, 0x7808, 0xc08c, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, - 0x78ec, 0xa084, 0x0021, 0x0040, 0x4130, 0x7808, 0xc08d, 0x780a, - 0x007c, 0x7808, 0xc08d, 0x780a, 0x007c, 0x7830, 0xa084, 0x0040, - 0x00c0, 0x4135, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x0040, 0x4144, - 0xb284, 0x0300, 0x0078, 0x4146, 0xb284, 0x0400, 0x0040, 0x414c, - 0x0098, 0x4150, 0x0078, 0x414e, 0x00a8, 0x4150, 0x78ac, 0x007c, - 0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, - 0x78ec, 0xa084, 0x0021, 0x0040, 0x4173, 0x007e, 0x2001, 0x4a04, - 0x2004, 0xd0ec, 0x007f, 0x0040, 0x4169, 0xb284, 0x0300, 0x0078, - 0x416b, 0xb284, 0x0400, 0x0040, 0x4171, 0x0098, 0x416d, 0x0078, - 0x4173, 0x00a8, 0x4171, 0x78ac, 0x007e, 0x7808, 0xa085, 0x0002, - 0x780a, 0x007f, 0x007c, 0xa784, 0x0001, 0x00c0, 0x360e, 0xa784, - 0x0070, 0x0040, 0x418b, 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x2881, - 0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040, 0x4198, 0x784b, - 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2946, 0x0078, 0x40c9, - 0xa784, 0x0004, 0x0040, 0x41c7, 0x78b8, 0xa084, 0x4001, 0x0040, - 0x41c7, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2946, - 0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0, 0x41c7, 0x78c0, - 0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00f0, 0x007c, 0x784b, - 0x0008, 0x6818, 0xd0fc, 0x0040, 0x41c4, 0x681b, 0x0015, 0xd6f4, - 0x0040, 0x41c4, 0x681b, 0x0007, 0x1078, 0x40d5, 0x007c, 0x681b, - 0x0003, 0x7858, 0xa084, 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833, - 0x0000, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x2f84, - 0x007e, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x41e4, - 0xb284, 0x0300, 0x0078, 0x41e6, 0xb284, 0x0400, 0x0040, 0x41ec, - 0x0018, 0x2942, 0x0078, 0x41ee, 0x0028, 0x2942, 0x0078, 0x3ea2, - 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xd3fc, - 0x0040, 0x41fe, 0xa080, 0x4f40, 0x0078, 0x4200, 0xa080, 0x4ec0, - 0x2060, 0x2048, 0x705a, 0x2a60, 0x007c, 0x0020, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, - 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, - 0x0009, 0x0014, 0x0014, 0x9848, 0x0014, 0x0014, 0x9906, 0x98f4, - 0x0014, 0x0014, 0x0080, 0x00f1, 0x0100, 0x0402, 0x2008, 0xf880, - 0x0018, 0xa20a, 0x0014, 0x300b, 0xa20c, 0x0014, 0x2500, 0x0013, - 0x2500, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0xa200, - 0x3806, 0x8839, 0x20c4, 0x0864, 0xa850, 0x3008, 0x28c1, 0x9d0d, - 0xa201, 0x300c, 0x2847, 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, - 0x883a, 0xa808, 0x28e2, 0x9cc2, 0xa8f3, 0x0864, 0xa83e, 0x300c, - 0xa801, 0x3008, 0x28e1, 0x9cc2, 0x2021, 0xa81b, 0xa205, 0x870c, - 0xd8de, 0x64a0, 0x6de0, 0x6fc0, 0x63a4, 0x6c80, 0x0212, 0xa205, - 0x883d, 0x9d25, 0x882b, 0x1814, 0x883b, 0x9d2b, 0x883b, 0x7027, - 0x85f2, 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa812, 0x883e, - 0xa810, 0x280c, 0xa204, 0x64c0, 0x6de0, 0x67a0, 0x6fc0, 0x9d25, - 0x1814, 0x9d2b, 0x883b, 0x7023, 0x8576, 0x8677, 0xa802, 0x7861, - 0x883e, 0x206b, 0x28c1, 0x9d0d, 0x2044, 0x2103, 0x20a2, 0x2081, - 0xa8c9, 0xa207, 0x2901, 0xa80a, 0x0014, 0xa203, 0x8000, 0x85a4, - 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601, 0xa208, 0x856e, 0x866f, - 0x7161, 0x0014, 0x0704, 0x3008, 0x9cc2, 0x0014, 0xa202, 0x8000, - 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf844, 0x856e, 0x883f, 0x08e6, - 0xa8f5, 0xf861, 0xa8ea, 0xf801, 0x0014, 0xf881, 0x0016, 0x85b2, - 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014, 0x8532, 0xf221, 0x0014, - 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014, 0x3008, 0x8000, 0x284a, - 0x1011, 0xa8fc, 0x3008, 0x9d25, 0x8000, 0xa000, 0x2802, 0x1011, - 0xa8fd, 0x9d2b, 0xa887, 0x3008, 0x9d25, 0x283b, 0x1011, 0xa8fd, - 0xa209, 0x0017, 0x300c, 0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, - 0x0210, 0xa801, 0x0014, 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0, - 0x18f2, 0x0014, 0xa20b, 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d17, - 0x0704, 0xa206, 0x6865, 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, - 0x6042, 0x8008, 0xa8fa, 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021, - 0x3008, 0x84a8, 0x11d6, 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822, - 0x0016, 0x7944, 0x8421, 0xa020, 0xa532, 0x84a1, 0x0016, 0x7944, - 0x8421, 0xa0df, 0x9532, 0x84a1, 0x0016, 0x0000, 0x127e, 0x70d4, - 0xa084, 0x4600, 0x8004, 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205, - 0x00c0, 0x4342, 0x720c, 0x82ff, 0x0040, 0x433d, 0x8aff, 0x00c0, - 0x4342, 0x7200, 0xd284, 0x00c0, 0x4342, 0x7003, 0x0008, 0x127f, - 0x2000, 0x007c, 0x7000, 0xa084, 0x0003, 0x7002, 0xc69c, 0xd084, - 0x0040, 0x4374, 0x2001, 0x4a05, 0x2004, 0xd0ec, 0x00c0, 0x43a5, - 0xd0e4, 0x00c0, 0x435a, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0003, - 0x0040, 0x43a5, 0x0e7e, 0x2071, 0x0010, 0x2009, 0x0007, 0x7008, - 0xa084, 0x3000, 0x00c0, 0x435d, 0x8109, 0x00c0, 0x435f, 0x0e7f, - 0x2009, 0x0007, 0x7008, 0xa084, 0x3000, 0x00c0, 0x435a, 0x8109, - 0x00c0, 0x436a, 0x0078, 0x43a5, 0x7108, 0xd1fc, 0x0040, 0x437f, - 0x1078, 0x44ba, 0x8aff, 0x0040, 0x432c, 0x0078, 0x4374, 0x700c, - 0xa08c, 0x03ff, 0x0040, 0x43aa, 0x7004, 0xd084, 0x0040, 0x439c, - 0x7014, 0xa005, 0x00c0, 0x4398, 0x7010, 0x7310, 0xa306, 0x00c0, - 0x438c, 0x2300, 0xa005, 0x0040, 0x439c, 0xa102, 0x00c8, 0x4374, - 0x7007, 0x0010, 0x0078, 0x43a5, 0x8aff, 0x0040, 0x43aa, 0x1078, - 0x46a3, 0x00c0, 0x439f, 0x0040, 0x4374, 0x1078, 0x4443, 0x127f, - 0x2000, 0x007c, 0x7204, 0x7108, 0xc19c, 0x8103, 0x00c8, 0x43b9, - 0x1078, 0x44ba, 0x0078, 0x43aa, 0x7003, 0x0008, 0x127f, 0x2000, - 0x007c, 0xa205, 0x00c0, 0x43a5, 0x7003, 0x0008, 0x127f, 0x2000, - 0x007c, 0x6428, 0x84ff, 0x0040, 0x43ed, 0x2c70, 0x7004, 0xa0bc, - 0x000f, 0xa7b8, 0x43fd, 0x273c, 0x87fb, 0x00c0, 0x43db, 0x0048, - 0x43d3, 0x1078, 0x28ec, 0x609c, 0xa075, 0x0040, 0x43ed, 0x0078, - 0x43c6, 0x2039, 0x43f2, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, - 0xa529, 0x8421, 0x0040, 0x43ed, 0x8738, 0x2704, 0xa005, 0x00c0, - 0x43dc, 0x709c, 0xa075, 0x00c0, 0x43c6, 0x007c, 0x0000, 0x0005, - 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, - 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x43f2, 0x43ef, - 0x0000, 0x0000, 0x8000, 0x0000, 0x43f2, 0x0000, 0x43fa, 0x43f7, - 0x0000, 0x0000, 0x0000, 0x0000, 0x43fa, 0x0000, 0x43f5, 0x43f5, - 0x0000, 0x0000, 0x8000, 0x0000, 0x43f5, 0x0000, 0x43fb, 0x43fb, - 0x0000, 0x0000, 0x0000, 0x0000, 0x43fb, 0x2079, 0x4a00, 0x2071, - 0x0010, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, 0x0001, 0x7810, - 0xd0ec, 0x0040, 0x4431, 0x2009, 0x0001, 0x2071, 0x0020, 0x0078, - 0x4435, 0x2009, 0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, - 0x0002, 0x7003, 0x0000, 0x8109, 0x0040, 0x4442, 0x2071, 0x0020, - 0x0078, 0x4435, 0x007c, 0x7004, 0x8004, 0x00c8, 0x44a6, 0x7007, - 0x0012, 0x2019, 0x0000, 0x7108, 0x7008, 0xa106, 0x00c0, 0x444b, - 0xa184, 0x01e0, 0x0040, 0x4456, 0x1078, 0x28ec, 0x7810, 0xd0ec, - 0x0040, 0x4470, 0x2001, 0x04fd, 0x2004, 0xa086, 0x0003, 0x00c0, - 0x4474, 0xa184, 0x4000, 0x0040, 0x4478, 0xa382, 0x0003, 0x00c8, - 0x4478, 0xa184, 0x0004, 0x0040, 0x444b, 0x8318, 0x0078, 0x444b, - 0x7814, 0xd0ec, 0x00c0, 0x4478, 0xa184, 0x4000, 0x00c0, 0x444b, - 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040, 0x4486, 0xa386, 0x0008, - 0x0040, 0x4491, 0xa386, 0x200c, 0x00c0, 0x444b, 0x7200, 0x8204, - 0x0048, 0x4491, 0x730c, 0xa384, 0x03ff, 0x0040, 0x4491, 0x1078, - 0x28ec, 0x7007, 0x0012, 0x7000, 0xd084, 0x00c0, 0x44a6, 0x7008, - 0xa084, 0x01e0, 0x00c0, 0x44a6, 0x7310, 0x7014, 0xa305, 0x0040, - 0x44a6, 0x710c, 0xa184, 0x03ff, 0x00c0, 0x4443, 0x7007, 0x0012, - 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x44aa, 0x7007, 0x0012, - 0x7108, 0x8103, 0x0048, 0x44ae, 0x7003, 0x0008, 0x007c, 0x7108, - 0x0078, 0x44ba, 0xa184, 0x01e0, 0x00c0, 0x44ee, 0x7108, 0xa184, - 0x01e0, 0x00c0, 0x44ee, 0xa184, 0x0007, 0x0079, 0x44c7, 0x44d1, - 0x44e1, 0x44cf, 0x44e1, 0x44cf, 0x4533, 0x44cf, 0x4531, 0x1078, - 0x28ec, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, 0x00c0, - 0x44dc, 0x2049, 0x0000, 0x007c, 0x1078, 0x46a3, 0x00c0, 0x44dc, - 0x007c, 0x7004, 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, 0x0040, - 0x44ed, 0x1078, 0x46a3, 0x00c0, 0x44e9, 0x007c, 0x7007, 0x0012, - 0x7108, 0x00e0, 0x44f1, 0x2091, 0x6000, 0x00e0, 0x44f5, 0x2091, - 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, - 0x44fd, 0x7007, 0x0012, 0x7108, 0xd1fc, 0x00c0, 0x4501, 0x7003, - 0x0000, 0x7000, 0xa005, 0x00c0, 0x4515, 0x7004, 0xa005, 0x00c0, - 0x4515, 0x700c, 0xa005, 0x0040, 0x4517, 0x0078, 0x44f9, 0x2049, - 0x0000, 0xb284, 0x0100, 0x0040, 0x4521, 0x2001, 0x0000, 0x0078, - 0x4523, 0x2001, 0x0001, 0x1078, 0x3ff5, 0x6818, 0xa084, 0x8000, - 0x0040, 0x452c, 0x681b, 0x0002, 0x007c, 0x1078, 0x28ec, 0x1078, - 0x28ec, 0x1078, 0x4570, 0x7210, 0x7114, 0x700c, 0xa09c, 0x03ff, - 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x1078, 0x4570, 0x2704, - 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, 0x2100, 0xa31b, - 0x2400, 0xa305, 0x0040, 0x4556, 0x00c8, 0x4556, 0x8412, 0x8210, - 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x453d, 0x2b60, 0x8a07, - 0x007e, 0x6004, 0xa084, 0x0008, 0x0040, 0x4562, 0xa7ba, 0x43f7, - 0x0078, 0x4564, 0xa7ba, 0x43ef, 0x007f, 0xa73d, 0x2c00, 0x6886, - 0x6f8a, 0x6c92, 0x6b8e, 0x7007, 0x0012, 0x1078, 0x4443, 0x007c, - 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x4584, 0x6000, 0xa064, - 0x00c0, 0x457b, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080, 0x440d, - 0x203c, 0x87fb, 0x1040, 0x28ec, 0x007c, 0x127e, 0x0d7e, 0x70d4, - 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x6884, 0x2060, 0x6888, - 0x6b8c, 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, - 0x6804, 0xa084, 0x0008, 0x007f, 0x0040, 0x45a2, 0xa0b8, 0x43f7, - 0x0078, 0x45a4, 0xa0b8, 0x43ef, 0xb284, 0x0100, 0x0040, 0x45ab, - 0x7e20, 0x0078, 0x45ac, 0x7e24, 0xa6b5, 0x000c, 0x681c, 0xd0b4, - 0x0040, 0x45b3, 0xc685, 0x2400, 0xa305, 0x0040, 0x45dd, 0x2c58, - 0x2704, 0x6104, 0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, - 0x701e, 0xa184, 0x0008, 0x0040, 0x45cd, 0x6010, 0xa081, 0x0000, - 0x7022, 0x6014, 0xa081, 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, - 0x7012, 0x620c, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, - 0x2b60, 0x1078, 0x46c6, 0x0078, 0x45df, 0x1078, 0x46a3, 0x00c0, - 0x45dd, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, - 0x4600, 0x8004, 0x2090, 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094, - 0x00c0, 0x45ee, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, - 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x7e20, - 0xb284, 0x0100, 0x00c0, 0x4605, 0x7e24, 0xa6b5, 0x000c, 0x681c, - 0xd0ac, 0x00c0, 0x4610, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004, - 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x43fd, - 0x273c, 0x87fb, 0x00c0, 0x4626, 0x0048, 0x4620, 0x1078, 0x28ec, - 0x689c, 0xa065, 0x0040, 0x462a, 0x0078, 0x4613, 0x1078, 0x46a3, - 0x00c0, 0x4626, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e, - 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x2090, 0x7e20, 0xb284, - 0x0100, 0x00c0, 0x463c, 0x7e24, 0x0d7f, 0x037f, 0x047f, 0xa6b5, - 0x000c, 0x681c, 0xd0b4, 0x0040, 0x464a, 0xc685, 0x7003, 0x0000, - 0x7007, 0x0004, 0x2049, 0x462d, 0x6828, 0xa055, 0x0040, 0x46a0, - 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x43fd, 0x273c, - 0x87fb, 0x00c0, 0x4666, 0x0048, 0x465f, 0x1078, 0x28ec, 0x709c, - 0xa075, 0x2060, 0x0040, 0x46a0, 0x0078, 0x4652, 0x2704, 0xae68, - 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048, 0x467f, 0x8a51, 0x00c0, - 0x4673, 0x1078, 0x28ec, 0x8738, 0x2704, 0xa005, 0x00c0, 0x4667, - 0x709c, 0xa075, 0x2060, 0x0040, 0x46a0, 0x0078, 0x4652, 0x8422, - 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, 0x2400, 0xa122, 0x690c, - 0x2300, 0xa11b, 0x00c8, 0x468e, 0x1078, 0x28ec, 0xb284, 0x0100, - 0x0040, 0x469c, 0x2001, 0x4a04, 0x2004, 0xd0ec, 0x00c0, 0x469c, - 0x2071, 0x0050, 0x0078, 0x469e, 0x2071, 0x0020, 0x0078, 0x45b3, - 0x127f, 0x2000, 0x007c, 0x7008, 0xa084, 0x0003, 0xa086, 0x0003, - 0x00c0, 0x46ab, 0x007c, 0x2704, 0xac78, 0x7800, 0x701a, 0x7804, - 0x701e, 0x7808, 0x7012, 0x780c, 0x7016, 0x6004, 0xa084, 0x0008, - 0x0040, 0x46be, 0x7810, 0x7022, 0x7814, 0x7026, 0x7602, 0x7004, - 0xa084, 0x0010, 0xc085, 0x7006, 0x2079, 0x4a00, 0x8a51, 0x0040, - 0x46e1, 0x8738, 0x2704, 0xa005, 0x00c0, 0x46dc, 0x609c, 0xa005, - 0x0040, 0x46e2, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080, 0x43fd, - 0x203c, 0x87fb, 0x1040, 0x28ec, 0x7008, 0xa084, 0x0003, 0xa086, - 0x0003, 0x007c, 0x2051, 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, - 0x70d4, 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, - 0xa184, 0x0003, 0x00c0, 0x46fa, 0x6828, 0xa005, 0x0040, 0x470a, - 0x0078, 0x4342, 0x7108, 0xd1fc, 0x0040, 0x4702, 0x1078, 0x44ba, - 0x0078, 0x46ef, 0x7007, 0x0010, 0x7108, 0xd1fc, 0x0040, 0x4704, - 0x1078, 0x44ba, 0x7008, 0xa086, 0x0008, 0x00c0, 0x46ef, 0x7000, - 0xa005, 0x00c0, 0x46ef, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, - 0x2000, 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, - 0x70d4, 0xa084, 0x4600, 0x8004, 0x2090, 0x0d7f, 0x2049, 0x471a, - 0xad80, 0x0011, 0x20a0, 0xb284, 0x0100, 0x0040, 0x473d, 0x2001, - 0x4a04, 0x2004, 0xd0ec, 0x0040, 0x4739, 0x2099, 0x0031, 0x0078, - 0x473f, 0x2099, 0x0032, 0x0078, 0x473f, 0x2099, 0x0031, 0x700c, - 0xa084, 0x03ff, 0x682a, 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, - 0x0001, 0x0040, 0x474e, 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, - 0x03ff, 0x0040, 0x475a, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, - 0x00c0, 0x4755, 0x0c7f, 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, - 0x137f, 0x147f, 0x127f, 0x2000, 0x007c, 0x2091, 0x8000, 0x2091, - 0x6000, 0x78ac, 0xa005, 0x00c0, 0x477c, 0x7974, 0x70d0, 0xa106, - 0x00c0, 0x477c, 0x781c, 0xa005, 0x0040, 0x477c, 0x781f, 0x0000, - 0x0068, 0x477c, 0x2091, 0x4080, 0x7830, 0x8001, 0x7832, 0x00c0, - 0x4804, 0x7834, 0x7832, 0x7810, 0xd0ec, 0x00c0, 0x47fd, 0x2061, - 0x6fc0, 0x2069, 0x4a80, 0xc7fd, 0x68d0, 0xa005, 0x0040, 0x4796, - 0x8001, 0x68d2, 0x00c0, 0x4796, 0x1078, 0x4998, 0x6800, 0xa084, - 0x000f, 0x0040, 0x47ab, 0xa086, 0x0001, 0x0040, 0x47ab, 0x6844, - 0xa00d, 0x0040, 0x47ab, 0x2104, 0xa005, 0x0040, 0x47ab, 0x8001, - 0x200a, 0x0040, 0x4909, 0x6814, 0xa005, 0x0040, 0x47d0, 0x8001, - 0x6816, 0x00c0, 0x47d0, 0x68a7, 0x0001, 0x0f7e, 0xd7fc, 0x00c0, - 0x47c5, 0x7810, 0xd0ec, 0x0040, 0x47c1, 0x2079, 0x0100, 0x0078, - 0x47c7, 0x2079, 0x0200, 0x0078, 0x47c7, 0x2079, 0x0100, 0x1078, - 0x4131, 0x0f7f, 0x6864, 0xa005, 0x0040, 0x47d0, 0x1078, 0x25de, - 0x6880, 0xa005, 0x0040, 0x47dd, 0x8001, 0x6882, 0x00c0, 0x47dd, - 0x6867, 0x0000, 0x68d4, 0xc0dd, 0x68d6, 0x68d4, 0xd0fc, 0x0040, - 0x47fa, 0xc0fc, 0x68d6, 0x20a9, 0x0200, 0x603c, 0xa005, 0x0040, - 0x47f6, 0x8001, 0x603e, 0x68d4, 0xc0fd, 0x68d6, 0x00c0, 0x47f6, - 0x6010, 0xa005, 0x0040, 0x47f6, 0x1078, 0x25de, 0xace0, 0x0010, - 0x00f0, 0x47e5, 0xd7fc, 0x0040, 0x4804, 0x2061, 0x4fc0, 0x2069, - 0x4a40, 0xc7fc, 0x0078, 0x478c, 0x1078, 0x4840, 0x7838, 0x8001, - 0x783a, 0x00c0, 0x4826, 0x783c, 0x783a, 0x2061, 0x4fc0, 0x2069, - 0x4a40, 0xc7fc, 0x680c, 0xa005, 0x0040, 0x4818, 0x1078, 0x487f, - 0xd7fc, 0x00c0, 0x4826, 0x7810, 0xd0ec, 0x00c0, 0x4826, 0x2061, - 0x6fc0, 0x2069, 0x4a80, 0xc7fd, 0x0078, 0x4812, 0x7814, 0xd0e4, - 0x00c0, 0x482a, 0x7810, 0xd0cc, 0x0040, 0x483d, 0xd0ac, 0x00c0, - 0x4836, 0xd0a4, 0x0040, 0x483d, 0xc0ad, 0x7812, 0x2091, 0x8001, - 0x0068, 0x483c, 0x1078, 0x2368, 0x007c, 0x2091, 0x8001, 0x007c, - 0x7840, 0x8001, 0x7842, 0x00c0, 0x487e, 0x7844, 0x7842, 0x2091, - 0x8000, 0x2061, 0x4fc0, 0x2069, 0x4a40, 0xc7fc, 0x6810, 0xa005, - 0x00c0, 0x4854, 0x2001, 0x0101, 0x8001, 0x6812, 0xd7fc, 0x0040, - 0x485d, 0xa080, 0x90d0, 0x0078, 0x485f, 0xa080, 0x8fc0, 0x2040, - 0x2004, 0xa065, 0x0040, 0x4870, 0x6024, 0xa005, 0x0040, 0x486c, - 0x8001, 0x6026, 0x0040, 0x48ad, 0x6000, 0x2c40, 0x0078, 0x4861, - 0xd7fc, 0x00c0, 0x487e, 0x7810, 0xd0ec, 0x00c0, 0x487e, 0x2061, - 0x6fc0, 0x2069, 0x4a80, 0xc7fd, 0x0078, 0x484e, 0x007c, 0x2009, - 0x0000, 0x20a9, 0x0200, 0x6008, 0xd09c, 0x0040, 0x4899, 0x6024, - 0xa005, 0x0040, 0x488f, 0x8001, 0x6026, 0x0078, 0x4897, 0x6008, - 0xc09c, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0078, 0x4899, 0xa18d, - 0x0100, 0xace0, 0x0010, 0x00f0, 0x4883, 0xa184, 0x0001, 0x0040, - 0x48a8, 0xa18c, 0xfffe, 0x690e, 0x1078, 0x25de, 0x0078, 0x48a9, - 0x690e, 0x007c, 0x00c0, 0x48a9, 0x786c, 0x6800, 0xa005, 0x0040, - 0x48b5, 0x684c, 0xac06, 0x0040, 0x4909, 0x6864, 0xa005, 0x0040, - 0x48bd, 0x6027, 0x0001, 0x0078, 0x4906, 0x2c00, 0x687e, 0x601b, + 0x6820, 0xc0c5, 0x6822, 0x70d4, 0xd0b4, 0x0040, 0x3eda, 0xc0b4, + 0x70d6, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, + 0x8001, 0x601a, 0x0c7f, 0x007c, 0x0c7e, 0x2960, 0x6104, 0xa18c, + 0xfff5, 0x6106, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x3ee8, + 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, 0x7aaa, 0x7baa, + 0xa8c0, 0x0005, 0x6820, 0xc0c5, 0x6822, 0x0c7f, 0x007c, 0x0c7e, + 0x7158, 0x2160, 0x2018, 0xa08c, 0x0020, 0x0040, 0x3f00, 0xc0ac, + 0x2008, 0xa084, 0xfff0, 0xa635, 0x7e86, 0x6018, 0x789a, 0x7eae, + 0x6612, 0x78a4, 0xa084, 0xfff0, 0xa18c, 0x000f, 0xa105, 0xc0f4, + 0xa39c, 0x0020, 0x0040, 0x3f16, 0xa085, 0x4000, 0xc0fc, 0xd0b4, + 0x00c0, 0x3f1b, 0xc0fd, 0x78a6, 0x6016, 0x788a, 0xa6b4, 0x000f, + 0x8637, 0x8204, 0x8004, 0xa084, 0x00ff, 0xa605, 0x600e, 0x6004, + 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, + 0x6018, 0x789a, 0x78a4, 0xa084, 0xfff0, 0x78a6, 0x6012, 0x7884, + 0xa084, 0xfff0, 0x7886, 0x600c, 0xa084, 0x00ff, 0x600e, 0x0c7f, + 0x007c, 0xa282, 0x0002, 0x00c0, 0x4040, 0x7aa8, 0x6920, 0xc1bd, + 0x6922, 0xd1cc, 0x0040, 0x3f7c, 0xc1cc, 0x6922, 0xa294, 0x00ff, + 0xa282, 0x0002, 0x00c8, 0x4040, 0x1078, 0x3fcd, 0x1078, 0x3f2d, + 0xa980, 0x0001, 0x200c, 0x1078, 0x4183, 0x1078, 0x3e7c, 0x88ff, + 0x0040, 0x3f72, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xc695, + 0x7e5a, 0xd6d4, 0x00c0, 0x3f6f, 0x781b, 0x0061, 0x007c, 0x781b, + 0x0075, 0x007c, 0x7e58, 0xd6d4, 0x00c0, 0x3f79, 0x781b, 0x0064, + 0x007c, 0x781b, 0x0076, 0x007c, 0xa282, 0x0002, 0x00c8, 0x3f84, + 0xa284, 0x0001, 0x0040, 0x3f8d, 0x7158, 0xa188, 0x0000, 0x210c, + 0xd1ec, 0x00c0, 0x3f8d, 0x2011, 0x0000, 0x1078, 0x40b5, 0x1078, + 0x3fcd, 0x1078, 0x3f2d, 0x7858, 0xc095, 0x785a, 0x781b, 0x0075, + 0x007c, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011, 0x0001, 0xd0ec, + 0x00c0, 0x3fae, 0x6014, 0xa084, 0x0040, 0x00c0, 0x3fac, 0xc1a4, + 0x6106, 0xa006, 0x0078, 0x3fca, 0x2011, 0x0000, 0x78ab, 0x0001, + 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0xa8c0, 0x0004, 0x70d4, + 0xd0b4, 0x0040, 0x3fc6, 0xc0b4, 0x70d6, 0x70b8, 0xa065, 0x6008, + 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x6820, 0xa085, + 0x0200, 0x6822, 0x027f, 0x0c7f, 0x007c, 0x0c7e, 0x7058, 0x2060, + 0x82ff, 0x0040, 0x3fd5, 0x2011, 0x0040, 0x6018, 0xa080, 0x0002, + 0x789a, 0x78a4, 0xa084, 0xffbf, 0xa205, 0xc0fc, 0xd0b4, 0x00c0, + 0x3fe2, 0xc0fd, 0x78a6, 0x6016, 0x788a, 0x6004, 0xc0a4, 0x6006, + 0x0c7f, 0x007c, 0x007e, 0x7000, 0xa086, 0x0003, 0x0040, 0x3ff3, + 0x007f, 0x0078, 0x3ff6, 0x007f, 0x0078, 0x403d, 0xd6ac, 0x0040, + 0x403d, 0x7888, 0xa084, 0x0040, 0x0040, 0x403d, 0x7bb8, 0xa384, + 0x003f, 0x831b, 0x00c8, 0x4005, 0x8000, 0xa005, 0x0040, 0x401a, + 0x831b, 0x00c8, 0x400e, 0x8001, 0x0040, 0x403a, 0xd6f4, 0x0040, + 0x401a, 0x78b8, 0x801b, 0x00c8, 0x4016, 0x8000, 0xa084, 0x003f, + 0x00c0, 0x403a, 0xc6f4, 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001, + 0xa108, 0x00c8, 0x4025, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6, + 0x7ade, 0x1078, 0x493a, 0x781b, 0x0073, 0xb284, 0x0300, 0x0040, + 0x4035, 0x2001, 0x0000, 0x0078, 0x4037, 0x2001, 0x0001, 0x1078, + 0x47c2, 0x007c, 0x781b, 0x0073, 0x007c, 0x781b, 0x0076, 0x007c, + 0x1078, 0x4068, 0x781b, 0x0075, 0x007c, 0x1078, 0x4051, 0x781b, + 0x0075, 0x007c, 0x6827, 0x0002, 0x1078, 0x4059, 0x781b, 0x0075, + 0x007c, 0x2001, 0x0005, 0x0078, 0x406a, 0x2001, 0x000c, 0x0078, + 0x406a, 0x6820, 0xc0d5, 0x6822, 0x2001, 0x0006, 0x0078, 0x406a, + 0x2001, 0x000d, 0x0078, 0x406a, 0x2001, 0x0009, 0x0078, 0x406a, + 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa, 0xc69d, 0x7e5a, 0x70d4, + 0xd0b4, 0x0040, 0x4080, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, + 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, + 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b, 0x8703, + 0x017e, 0xb28c, 0x0300, 0x0040, 0x4091, 0xa0e0, 0x51c0, 0x0078, + 0x4093, 0xa0e0, 0x5240, 0x017f, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, + 0xa184, 0x000f, 0x0040, 0x40a3, 0xa184, 0xfff0, 0x78a6, 0x6012, + 0x6004, 0xc09d, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184, + 0x0040, 0x0040, 0x40b3, 0xa184, 0xffbf, 0xc0fd, 0x78a6, 0x6016, + 0x6004, 0xc0a5, 0x6006, 0x077f, 0x007c, 0x789b, 0x0010, 0x78ab, + 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003, 0x7aaa, 0x789b, 0x0060, + 0x78ab, 0x0004, 0x70d4, 0xd0b4, 0x0040, 0x40d3, 0xc0b4, 0x70d6, + 0x0c7e, 0x70b8, 0xa065, 0x6008, 0xa084, 0xfbef, 0x600a, 0x6018, + 0x8001, 0x601a, 0x0c7f, 0x007c, 0x2031, 0x0000, 0x2029, 0x0032, + 0x789b, 0x0010, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001, + 0x7daa, 0x7eaa, 0x789b, 0x0060, 0x78ab, 0x0005, 0x70d4, 0xd0b4, + 0x0040, 0x40f7, 0xc0b4, 0x70d6, 0x0c7e, 0x70b8, 0xa065, 0x6008, + 0xa084, 0xfbef, 0x600a, 0x6018, 0x8001, 0x601a, 0x0c7f, 0x007c, + 0x157e, 0x8007, 0xa084, 0x00ff, 0x8003, 0x8003, 0xa080, 0x0020, + 0x789a, 0x79a4, 0xa18c, 0xfff0, 0x2021, 0x416c, 0x2019, 0x0011, + 0x20a9, 0x000e, 0x2011, 0x0032, 0x2404, 0xa084, 0xfff0, 0xa106, + 0x0040, 0x4117, 0x8420, 0x2300, 0xa210, 0x00f0, 0x410c, 0x157f, + 0x007c, 0x157e, 0x2001, 0x4d05, 0x2004, 0xd0e4, 0x00c0, 0x414a, + 0x2021, 0x417a, 0x20a9, 0x0009, 0x2011, 0x0028, 0xa582, 0x0019, + 0x0040, 0x4160, 0x0048, 0x4160, 0x8420, 0x95a9, 0x2011, 0x0032, + 0xa582, 0x0032, 0x0040, 0x4160, 0x0048, 0x4160, 0x8420, 0x95a9, + 0x2019, 0x000a, 0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x4160, + 0x0048, 0x4160, 0x8420, 0x2300, 0xa210, 0x00f0, 0x413c, 0x157f, + 0x0078, 0x415e, 0x2021, 0x416c, 0x2019, 0x0011, 0x20a9, 0x000e, + 0x2011, 0x0032, 0x2200, 0xa502, 0x0040, 0x4160, 0x0048, 0x4160, + 0x8420, 0x2300, 0xa210, 0x00f0, 0x4152, 0x157f, 0xa006, 0x007c, + 0x157f, 0xa582, 0x0064, 0x00c8, 0x4169, 0x7808, 0xa085, 0x0070, + 0x780a, 0x2404, 0xa005, 0x007c, 0x1209, 0x3002, 0x3202, 0x4203, + 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806, 0x7a06, 0x0c07, + 0x0c07, 0x0e07, 0x10e1, 0x330a, 0x5805, 0x5a05, 0x6a06, 0x6c06, + 0x7c07, 0x7e07, 0x0e00, 0x789b, 0x0010, 0xa046, 0x007c, 0xa784, + 0x0f00, 0x800b, 0xa784, 0x001f, 0x8003, 0x8003, 0x8003, 0x8003, + 0xa105, 0xd7fc, 0x0040, 0x4198, 0xa0e0, 0x72c0, 0x0078, 0x419a, + 0xa0e0, 0x52c0, 0x007c, 0x0e7e, 0x0f7e, 0xd084, 0x0040, 0x41a8, + 0x2079, 0x0100, 0x2009, 0x4d80, 0x2071, 0x4d80, 0x0078, 0x41b8, + 0x2009, 0x4d40, 0x2071, 0x4d40, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x0040, 0x41b6, 0x2079, 0x0100, 0x0078, 0x41b8, 0x2079, 0x0200, + 0x2091, 0x8000, 0x2104, 0xa084, 0x000f, 0x0079, 0x41bf, 0x41c9, + 0x41c9, 0x41c9, 0x41c9, 0x41c9, 0x41c9, 0x41c7, 0x41c7, 0x1078, + 0x290c, 0x69b4, 0xc1f5, 0xa18c, 0xff9f, 0x69b6, 0xa005, 0x0040, + 0x4218, 0x7858, 0xa084, 0xff9f, 0xa085, 0x6000, 0x785a, 0x7828, + 0xa086, 0x1814, 0x00c0, 0x4218, 0x784b, 0x0004, 0x7848, 0xa084, + 0x0004, 0x00c0, 0x41de, 0x784b, 0x0008, 0x7848, 0xa084, 0x0008, + 0x00c0, 0x41e5, 0x7830, 0xd0bc, 0x00c0, 0x4218, 0x007e, 0x2001, + 0x4d04, 0x2004, 0xd0ec, 0x007f, 0x0040, 0x41fa, 0xb284, 0x0300, + 0x0078, 0x41fc, 0xb284, 0x0400, 0x0040, 0x4202, 0x0018, 0x4218, + 0x0078, 0x4204, 0x0028, 0x4218, 0x79e4, 0xa184, 0x0030, 0x0040, + 0x4218, 0x78ec, 0xa084, 0x0003, 0x0040, 0x4218, 0x681c, 0xd0ac, + 0x00c0, 0x4216, 0x1078, 0x42a2, 0x0078, 0x4218, 0x781b, 0x00f6, + 0x0f7f, 0x0e7f, 0x007c, 0x0c7e, 0x2001, 0x4d01, 0x2004, 0xd0ac, + 0x00c0, 0x4294, 0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, + 0x8003, 0xb28c, 0x0300, 0x0040, 0x4231, 0xa0e0, 0x51c0, 0x0078, + 0x4233, 0xa0e0, 0x5240, 0x6004, 0xa084, 0x000a, 0x00c0, 0x4294, + 0x6108, 0xa194, 0xff00, 0x0040, 0x4294, 0xa18c, 0x00ff, 0x2001, + 0x000a, 0xa106, 0x0040, 0x425f, 0x2001, 0x000c, 0xa106, 0x0040, + 0x4263, 0x2001, 0x0012, 0xa106, 0x0040, 0x4267, 0x2001, 0x0014, + 0xa106, 0x0040, 0x426b, 0x2001, 0x0019, 0xa106, 0x0040, 0x426f, + 0x2001, 0x0032, 0xa106, 0x0040, 0x4273, 0x0078, 0x4277, 0x2009, + 0x000c, 0x0078, 0x4279, 0x2009, 0x0012, 0x0078, 0x4279, 0x2009, + 0x0014, 0x0078, 0x4279, 0x2009, 0x0019, 0x0078, 0x4279, 0x2009, + 0x0020, 0x0078, 0x4279, 0x2009, 0x003f, 0x0078, 0x4279, 0x2011, + 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0xa085, 0x0002, 0x6006, + 0x2061, 0x4d00, 0x6004, 0xd0bc, 0x0040, 0x4294, 0x6814, 0xd0fc, + 0x00c0, 0x428f, 0x60ea, 0x2061, 0x4d40, 0x0078, 0x4292, 0x60ee, + 0x2061, 0x4d80, 0x601f, 0x800f, 0x0c7f, 0x007c, 0x781b, 0x0076, + 0x007c, 0x781b, 0x0075, 0x007c, 0x781b, 0x0064, 0x007c, 0x781b, + 0x0061, 0x007c, 0x2009, 0x4d19, 0x210c, 0xa186, 0x0000, 0x0040, + 0x42b4, 0xa186, 0x0001, 0x0040, 0x42b7, 0x701f, 0x000b, 0x7067, + 0x0001, 0x781b, 0x0047, 0x007c, 0x781b, 0x00ed, 0x007c, 0x701f, + 0x000a, 0x007c, 0x2009, 0x4d19, 0x210c, 0xa186, 0x0000, 0x0040, + 0x42cf, 0xa186, 0x0001, 0x0040, 0x42cc, 0x701f, 0x000b, 0x7067, + 0x0001, 0x781b, 0x0047, 0x007c, 0x701f, 0x000a, 0x007c, 0x781b, + 0x00ec, 0x007c, 0x781b, 0x00f6, 0x007c, 0x781b, 0x00f5, 0x007c, + 0x781b, 0x00c6, 0x007c, 0x781b, 0x00c5, 0x007c, 0x6818, 0xd0fc, + 0x0040, 0x42e4, 0x681b, 0x001d, 0x7067, 0x0001, 0x781b, 0x0047, + 0x007c, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x42fd, 0x7808, 0xc08c, + 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, + 0x0040, 0x42fd, 0x7808, 0xc08d, 0x780a, 0x007c, 0x7808, 0xc08d, + 0x780a, 0x007c, 0x7830, 0xa084, 0x0040, 0x00c0, 0x4302, 0x2001, + 0x4d04, 0x2004, 0xd0ec, 0x0040, 0x4311, 0xb284, 0x0300, 0x0078, + 0x4313, 0xb284, 0x0400, 0x0040, 0x4319, 0x0098, 0x431d, 0x0078, + 0x431b, 0x00a8, 0x431d, 0x78ac, 0x007c, 0x7808, 0xa084, 0xfffd, + 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec, 0xa084, 0x0021, + 0x0040, 0x4340, 0x007e, 0x2001, 0x4d04, 0x2004, 0xd0ec, 0x007f, + 0x0040, 0x4336, 0xb284, 0x0300, 0x0078, 0x4338, 0xb284, 0x0400, + 0x0040, 0x433e, 0x0098, 0x433a, 0x0078, 0x4340, 0x00a8, 0x433e, + 0x78ac, 0x007e, 0x7808, 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, + 0xa784, 0x0001, 0x00c0, 0x36fb, 0xa784, 0x0070, 0x0040, 0x4358, + 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x288d, 0x2d78, 0x2c68, 0x0c7f, + 0xa784, 0x0008, 0x0040, 0x4365, 0x784b, 0x0008, 0x78ec, 0xa084, + 0x0003, 0x0040, 0x2966, 0x0078, 0x4296, 0xa784, 0x0004, 0x0040, + 0x4394, 0x78b8, 0xa084, 0x4001, 0x0040, 0x4394, 0x784b, 0x0008, + 0x78ec, 0xa084, 0x0003, 0x0040, 0x2966, 0x78e4, 0xa084, 0x0007, + 0xa086, 0x0001, 0x00c0, 0x4394, 0x78c0, 0xa685, 0x4800, 0x2030, + 0x7e5a, 0x781b, 0x00f6, 0x007c, 0x784b, 0x0008, 0x6818, 0xd0fc, + 0x0040, 0x4391, 0x681b, 0x0015, 0xd6f4, 0x0040, 0x4391, 0x681b, + 0x0007, 0x1078, 0x42a2, 0x007c, 0x681b, 0x0003, 0x7858, 0xa084, + 0x3f00, 0x681e, 0x682f, 0x0000, 0x6833, 0x0000, 0x784b, 0x0008, + 0x78ec, 0xa084, 0x0003, 0x0040, 0x3004, 0x007e, 0x2001, 0x4d04, + 0x2004, 0xd0ec, 0x007f, 0x0040, 0x43b1, 0xb284, 0x0300, 0x0078, + 0x43b3, 0xb284, 0x0400, 0x0040, 0x43b9, 0x0018, 0x2962, 0x0078, + 0x43bb, 0x0028, 0x2962, 0x0078, 0x4045, 0x6b14, 0x8307, 0xa084, + 0x000f, 0x8003, 0x8003, 0x8003, 0xd3fc, 0x0040, 0x43cb, 0xa080, + 0x5240, 0x0078, 0x43cd, 0xa080, 0x51c0, 0x2060, 0x2048, 0x705a, + 0x2a60, 0x007c, 0x0020, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, 0x0000, 0x0020, + 0x0000, 0x0020, 0x0000, 0x0020, 0x0062, 0x0009, 0x0014, 0x0014, + 0x9848, 0x0014, 0x0014, 0x990e, 0x98fa, 0x0014, 0x0014, 0x0080, + 0x00f9, 0x0100, 0x0402, 0x2008, 0xf880, 0x0018, 0xa20a, 0x0014, + 0x300b, 0xa20c, 0x0014, 0x2500, 0x0013, 0x2500, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0xa200, 0x3806, 0x8839, 0x20c4, + 0x0864, 0xa856, 0x3008, 0x28c1, 0x9d15, 0xa201, 0x300c, 0x2847, + 0x8161, 0x846a, 0x8000, 0x84a4, 0x1856, 0x883a, 0xa808, 0x28e2, + 0x9cc8, 0xa8f3, 0x0864, 0xa844, 0x300c, 0xa801, 0x3008, 0x28e1, + 0x9cc8, 0x2021, 0xa81d, 0xa205, 0x870c, 0xd8de, 0x64a0, 0x6de0, + 0x6fc0, 0x63a4, 0x6c80, 0x0212, 0xa205, 0x883d, 0x7942, 0x8020, + 0xa4a1, 0x882b, 0x1814, 0x883b, 0x80df, 0x94a1, 0x7027, 0x85f2, + 0xa737, 0xa532, 0xf003, 0x8576, 0x8677, 0xa816, 0x883e, 0xa814, + 0x2001, 0xa812, 0xa204, 0x64c0, 0x6de0, 0x67a0, 0x6fc0, 0x7942, + 0x8020, 0xa4a1, 0x1814, 0x80df, 0x94a1, 0x883b, 0x7023, 0x8576, + 0x8677, 0xa802, 0x7861, 0x883e, 0x206b, 0x28c1, 0x9d15, 0x2044, + 0x2103, 0x20a2, 0x2081, 0xa8c3, 0xa207, 0x2901, 0xa80a, 0x0014, + 0xa203, 0x8000, 0x85a4, 0x1872, 0x879a, 0x883c, 0x1fe2, 0xf601, + 0xa208, 0x856e, 0x866f, 0x7161, 0x0014, 0x0704, 0x3008, 0x9cc8, + 0x0014, 0xa202, 0x8000, 0x85a4, 0x3009, 0x84a8, 0x19e2, 0xf844, + 0x856e, 0x883f, 0x08e6, 0xa8f5, 0xf861, 0xa8ea, 0xf801, 0x0014, + 0xf881, 0x0016, 0x85b2, 0x80f0, 0x9532, 0xfaa2, 0x1de2, 0x0014, + 0x8532, 0xf221, 0x0014, 0x1de2, 0x84a8, 0xd6e0, 0x1fe6, 0x0014, + 0x3008, 0x8000, 0x284a, 0x1011, 0xa8fc, 0x3008, 0x9d2d, 0x8000, + 0xa000, 0x2802, 0x1011, 0xa8fd, 0x9d33, 0xa8bd, 0x3008, 0x9d2d, + 0x283b, 0x1011, 0xa8fd, 0xa209, 0x0017, 0x300c, 0xa209, 0x8000, + 0x85a4, 0x1de2, 0xa209, 0xdac1, 0x0014, 0x0210, 0xa801, 0x0014, + 0x26e0, 0x873a, 0xfaa3, 0x19f2, 0x26e0, 0x18f2, 0x0014, 0xa20b, + 0x0014, 0xa20d, 0x3806, 0x0210, 0x9d1f, 0x0704, 0xa206, 0x6865, + 0x817e, 0x842a, 0x1dc1, 0x8823, 0x0016, 0x6042, 0x8008, 0xa8fa, + 0x8000, 0x84a4, 0x8160, 0x842a, 0xf021, 0x3008, 0x84a8, 0x11d6, + 0x7042, 0x20dd, 0x0011, 0x20d4, 0x8822, 0x0016, 0x7944, 0x8421, + 0xa020, 0xa532, 0x84a1, 0x0016, 0x7944, 0x8421, 0xa0df, 0x9532, + 0x84a1, 0x0016, 0x0000, 0x127e, 0x70d4, 0xa084, 0x4600, 0x8004, + 0x2090, 0x7204, 0x7008, 0xc09c, 0xa205, 0x00c0, 0x4517, 0x720c, + 0x82ff, 0x0040, 0x4512, 0x8aff, 0x00c0, 0x4517, 0x7200, 0xd284, + 0x00c0, 0x4517, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x7000, + 0xa084, 0x0003, 0x7002, 0xc69c, 0xd084, 0x0040, 0x455a, 0x7108, + 0x0005, 0x7008, 0xa106, 0x00c0, 0x451f, 0xa184, 0x0003, 0x0040, + 0x458b, 0xa184, 0x01e0, 0x00c0, 0x458b, 0xd1f4, 0x00c0, 0x451f, + 0xa184, 0x3000, 0xa086, 0x1000, 0x0040, 0x451f, 0x2011, 0x0180, + 0x710c, 0x8211, 0x0040, 0x4544, 0x7008, 0xd0f4, 0x00c0, 0x451f, + 0x700c, 0xa106, 0x0040, 0x4539, 0x7007, 0x0012, 0x7108, 0x0005, + 0x7008, 0xa106, 0x00c0, 0x4546, 0xa184, 0x0003, 0x0040, 0x458b, + 0xd194, 0x0040, 0x4546, 0xd1f4, 0x0040, 0x458b, 0x7007, 0x0002, + 0x0078, 0x451f, 0x7108, 0xd1fc, 0x0040, 0x4565, 0x1078, 0x46e0, + 0x8aff, 0x0040, 0x4501, 0x0078, 0x455a, 0x700c, 0xa08c, 0x03ff, + 0x0040, 0x4590, 0x7004, 0xd084, 0x0040, 0x4582, 0x7014, 0xa005, + 0x00c0, 0x457e, 0x7010, 0x7310, 0xa306, 0x00c0, 0x4572, 0x2300, + 0xa005, 0x0040, 0x4582, 0xa102, 0x00c8, 0x455a, 0x7007, 0x0010, + 0x0078, 0x458b, 0x8aff, 0x0040, 0x4590, 0x1078, 0x48e7, 0x00c0, + 0x4585, 0x0040, 0x455a, 0x1078, 0x4629, 0x127f, 0x2000, 0x007c, + 0x7204, 0x7108, 0xc19c, 0x8103, 0x00c8, 0x459f, 0x1078, 0x46e0, + 0x0078, 0x4590, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0xa205, + 0x00c0, 0x458b, 0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x6428, + 0x84ff, 0x0040, 0x45d3, 0x2c70, 0x7004, 0xa0bc, 0x000f, 0xa7b8, + 0x45e3, 0x273c, 0x87fb, 0x00c0, 0x45c1, 0x0048, 0x45b9, 0x1078, + 0x290c, 0x609c, 0xa075, 0x0040, 0x45d3, 0x0078, 0x45ac, 0x2039, + 0x45d8, 0x2704, 0xae68, 0x6808, 0xa630, 0x680c, 0xa529, 0x8421, + 0x0040, 0x45d3, 0x8738, 0x2704, 0xa005, 0x00c0, 0x45c2, 0x709c, + 0xa075, 0x00c0, 0x45ac, 0x007c, 0x0000, 0x0005, 0x0009, 0x000d, + 0x0011, 0x0015, 0x0019, 0x001d, 0x0000, 0x0003, 0x0009, 0x000f, + 0x0015, 0x001b, 0x0000, 0x0000, 0x45d8, 0x45d5, 0x0000, 0x0000, + 0x8000, 0x0000, 0x45d8, 0x0000, 0x45e0, 0x45dd, 0x0000, 0x0000, + 0x0000, 0x0000, 0x45e0, 0x0000, 0x45db, 0x45db, 0x0000, 0x0000, + 0x8000, 0x0000, 0x45db, 0x0000, 0x45e1, 0x45e1, 0x0000, 0x0000, + 0x0000, 0x0000, 0x45e1, 0x2079, 0x4d00, 0x2071, 0x0010, 0x7007, + 0x000a, 0x7007, 0x0002, 0x7003, 0x0001, 0x7810, 0xd0ec, 0x0040, + 0x4617, 0x2009, 0x0001, 0x2071, 0x0020, 0x0078, 0x461b, 0x2009, + 0x0002, 0x2071, 0x0050, 0x7007, 0x000a, 0x7007, 0x0002, 0x7003, + 0x0000, 0x8109, 0x0040, 0x4628, 0x2071, 0x0020, 0x0078, 0x461b, + 0x007c, 0x7004, 0x8004, 0x00c8, 0x46b2, 0x7108, 0x7008, 0xa106, + 0x00c0, 0x462d, 0xa184, 0x01e0, 0x0040, 0x463a, 0x1078, 0x4723, + 0x0078, 0x46da, 0x7007, 0x0012, 0x2019, 0x0000, 0x7108, 0x7008, + 0xa106, 0x00c0, 0x463e, 0xa184, 0x01e0, 0x0040, 0x464b, 0x1078, + 0x4723, 0x0078, 0x46da, 0x7810, 0xd0ec, 0x0040, 0x4665, 0x2001, + 0x04fd, 0x2004, 0xa086, 0x0003, 0x00c0, 0x4669, 0xa184, 0x4000, + 0x0040, 0x466d, 0xa382, 0x0003, 0x00c8, 0x466d, 0xa184, 0x0004, + 0x0040, 0x463e, 0x8318, 0x0078, 0x463e, 0x7814, 0xd0ec, 0x00c0, + 0x466d, 0xa184, 0x4000, 0x00c0, 0x463e, 0xa19c, 0x300c, 0xa386, + 0x2004, 0x0040, 0x468a, 0xa386, 0x0008, 0x0040, 0x4695, 0x7004, + 0xd084, 0x00c0, 0x4686, 0x7108, 0x7008, 0xa106, 0x00c0, 0x467b, + 0xa184, 0x0003, 0x0040, 0x4686, 0x0078, 0x4723, 0xa386, 0x200c, + 0x00c0, 0x463e, 0x7200, 0x8204, 0x0048, 0x4695, 0x730c, 0xa384, + 0x03ff, 0x0040, 0x4695, 0x1078, 0x290c, 0x7108, 0x7008, 0xa106, + 0x00c0, 0x4695, 0xa184, 0x01e0, 0x0040, 0x46a2, 0x1078, 0x4723, + 0x0078, 0x46da, 0x7007, 0x0012, 0x7000, 0xd084, 0x00c0, 0x46b2, + 0x7310, 0x7014, 0xa305, 0x0040, 0x46b2, 0x710c, 0xa184, 0x03ff, + 0x00c0, 0x4629, 0x7108, 0x7008, 0xa106, 0x00c0, 0x46b2, 0xa184, + 0x01e0, 0x0040, 0x46bf, 0x1078, 0x4723, 0x0078, 0x46da, 0x7007, + 0x0012, 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x46c3, 0x7108, + 0x7008, 0xa106, 0x00c0, 0x46c7, 0xa184, 0x01e0, 0x0040, 0x46d4, + 0x1078, 0x4723, 0x0078, 0x46da, 0x7007, 0x0012, 0x7108, 0x8103, + 0x0048, 0x46c7, 0x7003, 0x0008, 0x007c, 0x7108, 0x0078, 0x46e0, + 0xa184, 0x01e0, 0x00c0, 0x4723, 0x7108, 0xa184, 0x01e0, 0x00c0, + 0x4723, 0xa184, 0x0007, 0x0079, 0x46ed, 0x46f7, 0x4707, 0x46f5, + 0x4707, 0x46f5, 0x4765, 0x46f5, 0x4763, 0x1078, 0x290c, 0x7004, + 0xa084, 0x0010, 0xc08d, 0x7006, 0x8aff, 0x00c0, 0x4702, 0x2049, + 0x0000, 0x007c, 0x1078, 0x48e7, 0x00c0, 0x4702, 0x007c, 0x7004, + 0xa084, 0x0010, 0xc08d, 0x7006, 0x7004, 0xd084, 0x00c0, 0x471b, + 0x7108, 0x7008, 0xa106, 0x00c0, 0x4710, 0xa184, 0x0003, 0x0040, + 0x471b, 0x0078, 0x4723, 0x8aff, 0x0040, 0x4722, 0x1078, 0x48e7, + 0x00c0, 0x471e, 0x007c, 0x7007, 0x0012, 0x7108, 0x00e0, 0x4726, + 0x2091, 0x6000, 0x00e0, 0x472a, 0x2091, 0x6000, 0x7007, 0x0012, + 0x7007, 0x0008, 0x7004, 0xd09c, 0x00c0, 0x4732, 0x7007, 0x0012, + 0x7108, 0xd1fc, 0x00c0, 0x4736, 0x7003, 0x0000, 0x7000, 0xa005, + 0x00c0, 0x474a, 0x7004, 0xa005, 0x00c0, 0x474a, 0x700c, 0xa005, + 0x0040, 0x474c, 0x0078, 0x472e, 0x2049, 0x0000, 0xb284, 0x0100, + 0x0040, 0x4756, 0x2001, 0x0000, 0x0078, 0x4758, 0x2001, 0x0001, + 0x1078, 0x419b, 0x681b, 0x0002, 0x2051, 0x0000, 0x007c, 0x1078, + 0x290c, 0x1078, 0x290c, 0x1078, 0x47ad, 0x7210, 0x7114, 0x700c, + 0xa09c, 0x03ff, 0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x1078, + 0x47ad, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, + 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x4788, 0x00c8, 0x4788, + 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x476f, + 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008, 0x0040, 0x4794, + 0xa7ba, 0x45dd, 0x0078, 0x4796, 0xa7ba, 0x45d5, 0x007f, 0xa73d, + 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x7108, 0x7008, 0xa106, + 0x00c0, 0x479d, 0xa184, 0x01e0, 0x0040, 0x47a8, 0x1078, 0x4723, + 0x7007, 0x0012, 0x1078, 0x4629, 0x007c, 0x8a50, 0x8739, 0x2704, + 0xa004, 0x00c0, 0x47c1, 0x6000, 0xa064, 0x00c0, 0x47b8, 0x2d60, + 0x6004, 0xa084, 0x000f, 0xa080, 0x45f3, 0x203c, 0x87fb, 0x1040, + 0x290c, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, + 0x2090, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057, + 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084, 0x0008, + 0x007f, 0x0040, 0x47df, 0xa0b8, 0x45dd, 0x0078, 0x47e1, 0xa0b8, + 0x45d5, 0xb284, 0x0100, 0x0040, 0x47e8, 0x7e20, 0x0078, 0x47e9, + 0x7e24, 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040, 0x47f0, 0xc685, + 0x2400, 0xa305, 0x0040, 0x481a, 0x2c58, 0x2704, 0x6104, 0xac60, + 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184, 0x0008, + 0x0040, 0x480a, 0x6010, 0xa081, 0x0000, 0x7022, 0x6014, 0xa081, + 0x0000, 0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, + 0xa203, 0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x4912, + 0x0078, 0x481c, 0x1078, 0x48e7, 0x00c0, 0x481a, 0x127f, 0x2000, + 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, 0x4600, 0x8004, 0x2090, + 0x0d7f, 0x7007, 0x0004, 0x7004, 0xd094, 0x00c0, 0x482b, 0x7003, + 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x70d4, 0xa084, + 0x4600, 0x8004, 0x007e, 0x2090, 0x007f, 0x0d7f, 0x7e20, 0xb284, + 0x0100, 0x00c0, 0x4844, 0x7e24, 0xa6b5, 0x000c, 0x681c, 0xd0ac, + 0x00c0, 0x484f, 0xc685, 0x7003, 0x0000, 0x7007, 0x0004, 0x6828, + 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x45e3, 0x273c, + 0x87fb, 0x00c0, 0x4865, 0x0048, 0x485f, 0x1078, 0x290c, 0x689c, + 0xa065, 0x0040, 0x4869, 0x0078, 0x4852, 0x1078, 0x48e7, 0x00c0, + 0x4865, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e, 0x017e, 0x0d7e, + 0x70d4, 0xa084, 0x4600, 0x8004, 0x007e, 0x2090, 0x007f, 0x7e20, + 0xb284, 0x0100, 0x00c0, 0x487d, 0x7e24, 0x0d7f, 0x037f, 0x047f, + 0xa6b5, 0x000c, 0x681c, 0xd0b4, 0x0040, 0x488b, 0xc685, 0x7003, + 0x0000, 0x7007, 0x0004, 0x2049, 0x486c, 0x6828, 0xa055, 0x0d7e, + 0x0040, 0x48e3, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, + 0x45e3, 0x273c, 0x87fb, 0x00c0, 0x48a8, 0x0048, 0x48a1, 0x1078, + 0x290c, 0x709c, 0xa075, 0x2060, 0x0040, 0x48e3, 0x0078, 0x4894, + 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048, 0x48c1, + 0x8a51, 0x00c0, 0x48b5, 0x1078, 0x290c, 0x8738, 0x2704, 0xa005, + 0x00c0, 0x48a9, 0x709c, 0xa075, 0x2060, 0x0040, 0x48e3, 0x0078, + 0x4894, 0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, 0x2400, + 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8, 0x48d0, 0x1078, 0x290c, + 0xb284, 0x0100, 0x0040, 0x48de, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x00c0, 0x48de, 0x2071, 0x0050, 0x0078, 0x48e0, 0x2071, 0x0020, + 0x0d7f, 0x0078, 0x47f0, 0x0d7f, 0x127f, 0x2000, 0x007c, 0x7008, + 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x48f0, 0xa006, 0x007c, + 0xa084, 0x0003, 0xa086, 0x0003, 0x00c0, 0x48f7, 0x007c, 0x2704, + 0xac78, 0x7800, 0x701a, 0x7804, 0x701e, 0x7808, 0x7012, 0x780c, + 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x490a, 0x7810, 0x7022, + 0x7814, 0x7026, 0x7602, 0x7004, 0xa084, 0x0010, 0xc085, 0x7006, + 0x2079, 0x4d00, 0x8a51, 0x0040, 0x4936, 0x8738, 0x2704, 0xa005, + 0x00c0, 0x4928, 0x609c, 0xa005, 0x0040, 0x4937, 0x2060, 0x6004, + 0xa084, 0x000f, 0xa080, 0x45e3, 0x203c, 0x87fb, 0x1040, 0x290c, + 0x7008, 0x007e, 0xa084, 0x01e0, 0x007f, 0x0040, 0x4932, 0xa006, + 0x0078, 0x4937, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c, 0x2051, + 0x0000, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x70d4, 0xa084, 0x4600, + 0x8004, 0x2090, 0x0d7f, 0x087f, 0x7108, 0xa184, 0x0003, 0x00c0, + 0x494f, 0x6828, 0xa005, 0x0040, 0x495f, 0x0078, 0x4517, 0x7108, + 0xd1fc, 0x0040, 0x4957, 0x1078, 0x46e0, 0x0078, 0x4944, 0x7007, + 0x0010, 0x7108, 0xd1fc, 0x0040, 0x4959, 0x1078, 0x46e0, 0x7008, + 0xa086, 0x0008, 0x00c0, 0x4944, 0x7000, 0xa005, 0x00c0, 0x4944, + 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x127e, + 0x147e, 0x137e, 0x157e, 0x0c7e, 0x0d7e, 0x70d4, 0xa084, 0x4600, + 0x8004, 0x2090, 0x0d7f, 0x2049, 0x496f, 0xad80, 0x0011, 0x20a0, + 0xb284, 0x0100, 0x0040, 0x4992, 0x2001, 0x4d04, 0x2004, 0xd0ec, + 0x0040, 0x498e, 0x2099, 0x0031, 0x0078, 0x4994, 0x2099, 0x0032, + 0x0078, 0x4994, 0x2099, 0x0031, 0x700c, 0xa084, 0x03ff, 0x682a, + 0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040, 0x49a3, + 0x8000, 0x80ac, 0x53a5, 0x700c, 0xa084, 0x03ff, 0x0040, 0x49af, + 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x49aa, 0x0c7f, + 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f, + 0x2000, 0x007c, 0x2091, 0x8000, 0x2091, 0x6000, 0x78ac, 0xa005, + 0x00c0, 0x49d1, 0x7974, 0x70d0, 0xa106, 0x00c0, 0x49d1, 0x781c, + 0xa005, 0x0040, 0x49d1, 0x781f, 0x0000, 0x0068, 0x49d1, 0x2091, + 0x4080, 0x7830, 0x8001, 0x7832, 0x00c0, 0x4a59, 0x7834, 0x7832, + 0x7810, 0xd0ec, 0x00c0, 0x4a52, 0x2061, 0x72c0, 0x2069, 0x4d80, + 0xc7fd, 0x68d0, 0xa005, 0x0040, 0x49eb, 0x8001, 0x68d2, 0x00c0, + 0x49eb, 0x1078, 0x4c22, 0x6800, 0xa084, 0x000f, 0x0040, 0x4a00, + 0xa086, 0x0001, 0x0040, 0x4a00, 0x6844, 0xa00d, 0x0040, 0x4a00, + 0x2104, 0xa005, 0x0040, 0x4a00, 0x8001, 0x200a, 0x0040, 0x4b95, + 0x6814, 0xa005, 0x0040, 0x4a25, 0x8001, 0x6816, 0x00c0, 0x4a25, + 0x68a7, 0x0001, 0x0f7e, 0xd7fc, 0x00c0, 0x4a1a, 0x7810, 0xd0ec, + 0x0040, 0x4a16, 0x2079, 0x0100, 0x0078, 0x4a1c, 0x2079, 0x0200, + 0x0078, 0x4a1c, 0x2079, 0x0100, 0x1078, 0x42fe, 0x0f7f, 0x6864, + 0xa005, 0x0040, 0x4a25, 0x1078, 0x25ea, 0x6880, 0xa005, 0x0040, + 0x4a32, 0x8001, 0x6882, 0x00c0, 0x4a32, 0x6867, 0x0000, 0x68d4, + 0xc0dd, 0x68d6, 0x68d4, 0xd0fc, 0x0040, 0x4a4f, 0xc0fc, 0x68d6, + 0x20a9, 0x0200, 0x6034, 0xa005, 0x0040, 0x4a4b, 0x8001, 0x6036, + 0x68d4, 0xc0fd, 0x68d6, 0x00c0, 0x4a4b, 0x6010, 0xa005, 0x0040, + 0x4a4b, 0x1078, 0x25ea, 0xace0, 0x0010, 0x00f0, 0x4a3a, 0xd7fc, + 0x0040, 0x4a59, 0x2061, 0x52c0, 0x2069, 0x4d40, 0xc7fc, 0x0078, + 0x49e1, 0x1078, 0x4a95, 0x7838, 0x8001, 0x783a, 0x00c0, 0x4a7b, + 0x783c, 0x783a, 0x2061, 0x52c0, 0x2069, 0x4d40, 0xc7fc, 0x680c, + 0xa005, 0x0040, 0x4a6d, 0x1078, 0x4aec, 0xd7fc, 0x00c0, 0x4a7b, + 0x7810, 0xd0ec, 0x00c0, 0x4a7b, 0x2061, 0x72c0, 0x2069, 0x4d80, + 0xc7fd, 0x0078, 0x4a67, 0x7814, 0xd0e4, 0x00c0, 0x4a7f, 0x7810, + 0xd0cc, 0x0040, 0x4a92, 0xd0ac, 0x00c0, 0x4a8b, 0xd0a4, 0x0040, + 0x4a92, 0xc0ad, 0x7812, 0x2091, 0x8001, 0x0068, 0x4a91, 0x1078, + 0x2356, 0x007c, 0x2091, 0x8001, 0x007c, 0x7840, 0x8001, 0x7842, + 0x00c0, 0x4aeb, 0x7844, 0x7842, 0x2091, 0x8000, 0x2061, 0x52c0, + 0x2069, 0x4d40, 0xc7fc, 0x7810, 0x2079, 0x0200, 0xd0ec, 0x0040, + 0x4aab, 0x2079, 0x0100, 0x68d8, 0xa005, 0x0040, 0x4ab7, 0x7de0, + 0xa504, 0x00c0, 0x4ab7, 0x68da, 0x68d4, 0xc0bc, 0x68d6, 0x2079, + 0x4d00, 0x6810, 0xa005, 0x00c0, 0x4abf, 0x2001, 0x0101, 0x8001, + 0x6812, 0xd7fc, 0x0040, 0x4ac8, 0xa080, 0x93d0, 0x0078, 0x4aca, + 0xa080, 0x92c0, 0x2040, 0x2004, 0xa065, 0x0040, 0x4adb, 0x6024, + 0xa005, 0x0040, 0x4ad7, 0x8001, 0x6026, 0x0040, 0x4b37, 0x6000, + 0x2c40, 0x0078, 0x4acc, 0xd7fc, 0x00c0, 0x4aeb, 0x7810, 0xd0ec, + 0x00c0, 0x4aeb, 0x2061, 0x72c0, 0x2069, 0x4d80, 0xc7fd, 0x2079, + 0x0200, 0x0078, 0x4aab, 0x007c, 0x2009, 0x0000, 0x20a9, 0x0200, + 0x6008, 0xd09c, 0x0040, 0x4b23, 0x6024, 0xa005, 0x0040, 0x4afc, + 0x8001, 0x6026, 0x0078, 0x4b21, 0x6008, 0xc09c, 0xd084, 0x00c0, + 0x4b04, 0xd0ac, 0x0040, 0x4b1b, 0x600a, 0x6004, 0xa06d, 0x0040, + 0x4b23, 0x0c7e, 0x017e, 0x6010, 0x8001, 0x6012, 0x1078, 0x3d56, + 0x2d00, 0x2c68, 0x2060, 0x1078, 0x1e42, 0x1078, 0x2004, 0x017f, + 0x0c7f, 0x0078, 0x4b23, 0xc0bd, 0x600a, 0xa18d, 0x0001, 0x0078, + 0x4b23, 0xa18d, 0x0100, 0xace0, 0x0010, 0x00f0, 0x4af0, 0xa184, + 0x0001, 0x0040, 0x4b32, 0xa18c, 0xfffe, 0x690e, 0x1078, 0x25ea, + 0x0078, 0x4b33, 0x690e, 0x007c, 0x00c0, 0x4b33, 0x786c, 0x6800, + 0xa005, 0x0040, 0x4b3f, 0x684c, 0xac06, 0x0040, 0x4b95, 0x6864, + 0xa005, 0x0040, 0x4b47, 0x6027, 0x0001, 0x0078, 0x4b94, 0x2c00, + 0x687e, 0x6714, 0x6f76, 0x6017, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006, 0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, - 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x6714, 0x6f76, 0x1078, - 0x1e02, 0x6818, 0xa005, 0x0040, 0x48d7, 0x8001, 0x681a, 0x6808, - 0xc0a4, 0x680a, 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x00d0, - 0x48e3, 0x1078, 0x28ec, 0x6812, 0x00c0, 0x48e9, 0x7910, 0xc1a5, - 0x7912, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x202a, - 0xd7fc, 0x00c0, 0x48f7, 0x2069, 0x4a40, 0x0078, 0x48f9, 0x2069, - 0x4a80, 0x6910, 0xa184, 0x0100, 0x2001, 0x0006, 0x00c0, 0x4903, - 0x697a, 0x2001, 0x0004, 0x2708, 0x1078, 0x25d1, 0x2091, 0x8001, - 0x007c, 0x0d7e, 0x694c, 0x2160, 0xd7fc, 0x00c0, 0x491b, 0x7810, - 0xd0ec, 0x0040, 0x4917, 0x2069, 0x0100, 0x0078, 0x491d, 0x2069, - 0x0200, 0x0078, 0x491d, 0x2069, 0x0100, 0x1078, 0x2881, 0x601b, - 0x0006, 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, - 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000, 0x6830, - 0xd0b4, 0x0040, 0x494b, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, - 0xd094, 0x0040, 0x493d, 0x00f0, 0x4937, 0x684b, 0x0009, 0x20a9, - 0x0014, 0x6848, 0xd084, 0x0040, 0x4947, 0x00f0, 0x4941, 0x20a9, - 0x00fa, 0x00f0, 0x4949, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, - 0x0047, 0x0d7f, 0x6867, 0x0007, 0x2091, 0x8001, 0x007c, 0x2079, - 0x4a00, 0x1078, 0x498b, 0x1078, 0x4971, 0x1078, 0x497e, 0x2009, - 0x0002, 0x2069, 0x4a80, 0x680f, 0x0000, 0x6813, 0x0000, 0x6817, - 0x0000, 0x8109, 0x0040, 0x4970, 0x2069, 0x4a40, 0x0078, 0x4963, - 0x007c, 0x7810, 0xd0ec, 0x0040, 0x4979, 0x2019, 0x00cc, 0x0078, - 0x497b, 0x2019, 0x007b, 0x7b3a, 0x7b3e, 0x007c, 0x7814, 0xd0e4, - 0x00c0, 0x4986, 0x2019, 0x0040, 0x0078, 0x4988, 0x2019, 0x0026, - 0x7b42, 0x7b46, 0x007c, 0x7814, 0xd0e4, 0x00c0, 0x4993, 0x2019, - 0x3f94, 0x0078, 0x4995, 0x2019, 0x2624, 0x7b32, 0x7b36, 0x007c, - 0x6950, 0xa185, 0x0000, 0x0040, 0x49ad, 0x0c7e, 0x6ac0, 0x2264, - 0x602b, 0x0000, 0x602f, 0x0000, 0x6008, 0xc0b5, 0x600a, 0x8210, - 0x8109, 0x00c0, 0x499f, 0x6952, 0x0c7f, 0x007c, 0x70ec, 0xd0dc, - 0x00c0, 0x49b7, 0xd0d4, 0x0040, 0x49d6, 0x0078, 0x49d9, 0x7810, - 0xd0ec, 0x0040, 0x49c2, 0xc0f5, 0x7812, 0xd0ec, 0x0040, 0x49dd, - 0x0078, 0x49d9, 0xae8e, 0x0100, 0x0040, 0x49ce, 0x7814, 0xc0f5, - 0x7816, 0xd0d4, 0x00c0, 0x49dd, 0x0078, 0x49d9, 0x7814, 0xc0fd, - 0x7816, 0xd0d4, 0x00c0, 0x49dd, 0x0078, 0x49d9, 0xd0e4, 0x0040, - 0x49df, 0x7804, 0xd08c, 0x0040, 0x49df, 0x681f, 0x000c, 0x70a0, - 0x70a2, 0x007c, 0x699a + 0xa085, 0x0060, 0x6022, 0x6000, 0x2042, 0x1078, 0x1dcb, 0x6818, + 0xa005, 0x0040, 0x4b65, 0x8001, 0x681a, 0x6808, 0xc0a4, 0x680a, + 0x6810, 0x7908, 0x8109, 0x790a, 0x8001, 0x00d0, 0x4b71, 0x1078, + 0x290c, 0x6812, 0x00c0, 0x4b77, 0x7910, 0xc1a5, 0x7912, 0x602f, + 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x2013, 0xd7fc, 0x00c0, + 0x4b85, 0x2069, 0x4d40, 0x0078, 0x4b87, 0x2069, 0x4d80, 0x6910, + 0xa184, 0x0100, 0x2001, 0x0006, 0x00c0, 0x4b91, 0x697a, 0x2001, + 0x0004, 0x2708, 0x1078, 0x25dd, 0x007c, 0x0d7e, 0x694c, 0x2160, + 0xd7fc, 0x00c0, 0x4ba7, 0x7810, 0xd0ec, 0x0040, 0x4ba3, 0x2069, + 0x0100, 0x0078, 0x4ba9, 0x2069, 0x0200, 0x0078, 0x4ba9, 0x2069, + 0x0100, 0x1078, 0x288d, 0x601b, 0x0006, 0x6858, 0xa084, 0x3f00, + 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, + 0x0000, 0x6033, 0x0000, 0x6808, 0xa084, 0xfffd, 0x680a, 0x6830, + 0xd0b4, 0x0040, 0x4bdb, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848, + 0xd094, 0x0040, 0x4bcd, 0x00f0, 0x4bc7, 0x684b, 0x0009, 0x20a9, + 0x0014, 0x6848, 0xd084, 0x0040, 0x4bd7, 0x00f0, 0x4bd1, 0x20a9, + 0x00fa, 0x00f0, 0x4bd9, 0x681b, 0x0047, 0x0d7f, 0x6867, 0x0007, + 0x007c, 0x2079, 0x4d00, 0x1078, 0x4c15, 0x1078, 0x4bfb, 0x1078, + 0x4c08, 0x2009, 0x0002, 0x2069, 0x4d80, 0x680f, 0x0000, 0x6813, + 0x0000, 0x6817, 0x0000, 0x8109, 0x0040, 0x4bfa, 0x2069, 0x4d40, + 0x0078, 0x4bed, 0x007c, 0x7810, 0xd0ec, 0x0040, 0x4c03, 0x2019, + 0x00cc, 0x0078, 0x4c05, 0x2019, 0x007b, 0x7b3a, 0x7b3e, 0x007c, + 0x7814, 0xd0e4, 0x00c0, 0x4c10, 0x2019, 0x0040, 0x0078, 0x4c12, + 0x2019, 0x0026, 0x7b42, 0x7b46, 0x007c, 0x7814, 0xd0e4, 0x00c0, + 0x4c1d, 0x2019, 0x3f94, 0x0078, 0x4c1f, 0x2019, 0x2624, 0x7b32, + 0x7b36, 0x007c, 0x6950, 0xa185, 0x0000, 0x0040, 0x4c37, 0x0c7e, + 0x6ac0, 0x2264, 0x602b, 0x0000, 0x602f, 0x0000, 0x6008, 0xc0b5, + 0x600a, 0x8210, 0x8109, 0x00c0, 0x4c29, 0x6952, 0x0c7f, 0x007c, + 0x70ec, 0xd0dc, 0x00c0, 0x4c41, 0xd0d4, 0x0040, 0x4c64, 0x0078, + 0x4c67, 0x2008, 0x7810, 0xd0ec, 0x0040, 0x4c50, 0xd1c4, 0x00c0, + 0x4c6f, 0xc0f5, 0x7812, 0xd0ec, 0x0040, 0x4c6b, 0x0078, 0x4c67, + 0xae8e, 0x0100, 0x0040, 0x4c5c, 0x7814, 0xc0f5, 0x7816, 0xd0d4, + 0x00c0, 0x4c6b, 0x0078, 0x4c67, 0x7814, 0xc0fd, 0x7816, 0xd0d4, + 0x00c0, 0x4c6b, 0x0078, 0x4c67, 0xd0e4, 0x0040, 0x4c6d, 0x7804, + 0xd08c, 0x0040, 0x4c6d, 0x681f, 0x000c, 0x70a0, 0x70a2, 0x007c, + 0x3782 }; -unsigned short fw1280ei_length01 = 0x39e3; +#ifdef UNIQUE_FW_NAME +unsigned short fw1280ei_length01 = 0x3c71; +#else +unsigned short risc_code_length01 = 0x3c71; +#endif diff -urN linux-2.4.0-test9/drivers/scsi/qla1280.c linux-2.4.0-test9-lia/drivers/scsi/qla1280.c --- linux-2.4.0-test9/drivers/scsi/qla1280.c Wed Oct 4 16:53:29 2000 +++ linux-2.4.0-test9-lia/drivers/scsi/qla1280.c Wed Oct 4 21:43:30 2000 @@ -1,162 +1,76 @@ /******************************************************************************** - * QLOGIC LINUX SOFTWARE - * - * QLogic ISP1x80/1x160 device driver for Linux 2.3.x (redhat 6.X). - * - * COPYRIGHT (C) 1999-2000 QLOGIC CORPORATION - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the Qlogic's Linux Software License. See below. - * - * This program is WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistribution's or source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - ********************************************************************************/ - -/***************************************************************************************** - QLOGIC CORPORATION SOFTWARE - "GNU" GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION - AND MODIFICATION - -This GNU General Public License ("License") applies solely to QLogic Linux -Software ("Software") and may be distributed under the terms of this License. - -1. You may copy and distribute verbatim copies of the Software's source code as -you receive it, in any medium, provided that you conspicuously and appropriately -publish on each copy an appropriate copyright notice and disclaimer of warranty; -keep intact all the notices that refer to this License and to the absence of any -warranty; and give any other recipients of the Software a copy of this License along -with the Software. - -You may charge a fee for the physical act of transferring a copy, and you may at your -option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Software or any portion of it, thus forming -a work based on the Software, and copy and distribute such modifications or work under -the terms of Section 1 above, provided that you also meet all of these conditions: - -* a) You must cause the modified files to carry prominent notices stating that you -changed the files and the date of any change. - -* b) You must cause any work that you distribute or publish that in whole or in part -contains or is derived from the Software or any part thereof, to be licensed as a -whole at no charge to all third parties under the terms of this License. - -* c) If the modified Software normally reads commands interactively when run, you -must cause it, when started running for such interactive use in the most ordinary way, -to print or display an announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide a warranty) and that -users may redistribute the Software under these conditions, and telling the user how to -view a copy of this License. (Exception:if the Software itself is interactive but does -not normally print such an announcement, your work based on the Software is not required -to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable sections of -that work are not derived from the Software, and can be reasonably considered independent -and separate works in themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you distribute the same -sections as part of a whole which is a work based on the Software, the distribution of the -whole must be on the terms of this License, whose permissions for other licensees extend -to the entire whole, and thus to each and every part regardless of who wrote it. - -3. You may copy and distribute the Software (or a work based on it, under Section 2) in -object code or executable form under the terms of Sections 1 and 2 above provided that -you also do one of the following: - -* a) Accompany it with the complete corresponding machine-readable source code, which must -be distributed under the terms of Sections 1 and 2 above on a medium customarily used for -software interchange; or, - -* b) Accompany it with a written offer, valid for at least three years, to give any third -party, for a charge no more than your cost of physically performing source distribution, -a complete machine-readable copy of the corresponding source code, to be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software interchange; -or, - -* c) Accompany it with the information you received as to the offer to distribute -corresponding source code. (This alternative is allowed only for noncommercial distribution -and only if you received the Software in object code or executable form with such an offer, -in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making modifications -to it. For an executable work, complete source code means all the source code for all -modules it contains, plus any associated interface definition files, plus the scripts used -to control compilation and installation of the executable. - -If distribution of executable or object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from the same -place counts as distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Software except as expressly -provided under this License. Any attempt otherwise to copy, modify, sublicense or -distribute the Software is void, and will automatically terminate your rights under this -License. However, parties who have received copies, or rights, from you under this License -will not have their licenses terminated so long as such parties remain in full compliance. - -5. This license grants you world wide, royalty free non-exclusive rights to modify or -distribute the Software or its derivative works. These actions are prohibited by law -if you do not accept this License. Therefore, by modifying or distributing the Software -(or any work based on the Software), you indicate your acceptance of this License to do -so, and all its terms and conditions for copying, distributing or modifying the Software -or works based on it. - -6. Each time you redistribute the Software (or any work based on the Software), the -recipient automatically receives a license from the original licensor to copy, distribute -or modify the Software subject to these terms and conditions. You may not impose any -further restrictions on the recipients' exercise of the rights granted herein. You are -not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for -any other reason (not limited to patent issues), conditions are imposed on you -(whether by court order, agreement or otherwise) that contradict the conditions of this -License, they do not excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this License -and any other pertinent obligations, then as a consequence you may not distribute the -Software at all. - -If any portion of this section is held invalid or unenforceable under any particular -circumstance, the balance of the section is intended to apply and the section as a whole -is intended to apply in other circumstances. -NO WARRANTY - -11. THE SOFTWARE IS PROVIDED WITHOUT A WARRANTY OF ANY KIND. THERE IS NO -WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, -EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE -ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. -SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL -NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE SOFTWARE AS PERMITTED ABOVE, BE LIABLE TO YOU FOR -DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL -DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING -BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR -LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO -OPERATE WITH ANY OTHER SOFTWARES), EVEN IF SUCH HOLDER OR OTHER PARTY HAS -BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -END OF TERMS AND CONDITIONS - -*******************************************************************************************/ +* QLOGIC LINUX SOFTWARE +* +* QLogic QLA1280 (Ultra2) and QLA12160 (Ultra3) SCSI driver +* Copyright (C) 2000 Qlogic Corporation +* (www.qlogic.com) +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2, 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. +** +******************************************************************************/ /**************************************************************************** Revision History: - Rev. 3.00 Jan 17, 1999 DG Qlogic + Rev 3.17 Beta September 18, 2000 BN Qlogic + - Removed warnings for 32 bit 2.4.x compiles + - Corrected declared size for request and response + DMA addresses that are kept in each ha + Rev. 3.16 Beta August 25, 2000 BN Qlogic + - Corrected 64 bit addressing issue on IA-64 + where the upper 32 bits were not properly + passed to the RISC engine. + Rev. 3.15 Beta August 22, 2000 BN Qlogic + - Modified qla1280_setup_chip to properly load + ISP firmware for greater that 4 Gig memory on IA-64 + Rev. 3.14 Beta August 16, 2000 BN Qlogic + - Added setting of dma_mask to full 64 bit + if flags.enable_64bit_addressing is set in NVRAM + Rev. 3.13 Beta August 16, 2000 BN Qlogic + - Use new PCI DMA mapping APIs for 2.4.x kernel + Rev. 3.12 July 18, 2000 Redhat & BN Qlogic + - Added check of pci_enable_device to detect() for 2.3.x + - Use pci_resource_start() instead of + pdev->resource[0].start in detect() for 2.3.x + - Updated driver version + Rev. 3.11 July 14, 2000 BN Qlogic + - Updated SCSI Firmware to following versions: + qla1x80: 8.13.08 + qla1x160: 10.04.08 + - Updated driver version to 3.11 + Rev. 3.10 June 23, 2000 BN Qlogic + - Added filtering of AMI SubSys Vendor ID devices + Rev. 3.9 + - DEBUG_QLA1280 undefined and new version BN Qlogic + Rev. 3.08b May 9, 2000 MD Dell + - Added logic to check against AMI subsystem vendor ID + Rev. 3.08 May 4, 2000 DG Qlogic + - Added logic to check for PCI subsystem ID. + Rev. 3.07 Apr 24, 2000 DG & BN Qlogic + - Updated SCSI Firmware to following versions: + qla12160: 10.01.19 + qla1280: 8.09.00 + Rev. 3.06 Apr 12, 2000 DG & BN Qlogic + - Internal revision; not released + Rev. 3.05 Mar 28, 2000 DG & BN Qlogic + - Edit correction for virt_to_bus and PROC. + Rev. 3.04 Mar 28, 2000 DG & BN Qlogic + - Merge changes from ia64 port. + Rev. 3.03 Mar 28, 2000 BN Qlogic + - Increase version to reflect new code drop with compile fix + of issue with inclusion of linux/spinlock for 2.3 kernels + Rev. 3.02 Mar 15, 2000 BN Qlogic + - Merge qla1280_proc_info from 2.10 code base + Rev. 3.01 Feb 10, 2000 BN Qlogic + - Corrected code to compile on a 2.2.x kernel. + Rev. 3.00 Jan 17, 2000 DG Qlogic - Added 64-bit support. Rev. 2.07 Nov 9, 1999 DG Qlogic - Added new routine to set target parameters for ISP12160. @@ -183,11 +97,12 @@ *****************************************************************************/ +#include #ifdef MODULE #include #endif -#define QLA1280_VERSION " 3.00-Beta" +#define QLA1280_VERSION "3.17 Beta" #include #include @@ -207,8 +122,16 @@ #include #include #include -/* MRS #include */ +#ifndef KERNEL_VERSION +# define KERNEL_VERSION(x,y,z) (((x)<<16)+((y)<<8)+(z)) +#endif + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,18) +#include +#endif + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,95) +#include # include #endif #include "sd.h" @@ -216,23 +139,16 @@ #include "hosts.h" #define UNIQUE_FW_NAME #include "qla1280.h" -#include "ql12160_fw.h" /* ISP RISC code */ +#include "ql12160_fw.h" /* ISP RISC codes */ #include "ql1280_fw.h" #include -#include /* for kmalloc() */ - - -#ifndef KERNEL_VERSION -# define KERNEL_VERSION(x,y,z) (((x)<<16)+((y)<<8)+(z)) -#endif - +#include /* * Compile time Options: * 0 - Disable and 1 - Enable */ -#define QLA1280_64BIT_SUPPORT 1 /* 64-bit Support */ #define QL1280_TARGET_MODE_SUPPORT 0 /* Target mode support */ #define WATCHDOGTIMER 0 #define MEMORY_MAPPED_IO 0 @@ -244,15 +160,16 @@ #define AUTO_ESCALATE_ABORT 0 /* Automatically escalate aborts */ #define STOP_ON_ERROR 0 /* Stop on aborts and resets */ #define STOP_ON_RESET 0 -#define STOP_ON_ABORT 0 -#undef DYNAMIC_MEM_ALLOC - -#define DEBUG_QLA1280 0 /* Debugging */ -/* #define CHECKSRBSIZE */ +#define STOP_ON_ABORT 0 + +#define DEBUG_QLA1280 0 -/* - * These macros to assist programming - */ +/*************** 64 BIT PCI DMA ******************************************/ +#define FORCE_64BIT_PCI_DMA 0 /* set to one for testing only */ +/* Applicable to 64 version of the Linux 2.4.x and above only */ +/* NVRAM bit nv->cntr_flags_1.enable_64bit_addressing should be used for */ +/* administrator control of PCI DMA width size per system configuration */ +/*************************************************************************/ #define BZERO(ptr, amt) memset(ptr, 0, amt) #define BCOPY(src, dst, amt) memcpy(dst, src, amt) @@ -260,19 +177,28 @@ #define KMFREE(ip,siz) kfree((ip)) #define SYS_DELAY(x) udelay(x);barrier() #define QLA1280_DELAY(sec) mdelay(sec * 1000) -#define VIRT_TO_BUS(a) virt_to_bus((a)) -#if QLA1280_64BIT_SUPPORT + +/* 3.16 */ +#if BITS_PER_LONG > 32 +#define pci_dma_lo32(a) (a & 0xffffffff) +#define pci_dma_hi32(a) ((a >> 32) & 0xffffffff) +#else +#define pci_dma_lo32(a) (a & 0xffffffff) +#define pci_dma_hi32(a) 0 +#endif + +#define VIRT_TO_BUS(a) virt_to_bus(((void *)a)) + #if BITS_PER_LONG <= 32 -#define VIRT_TO_BUS_LOW(a) (uint32_t)virt_to_bus((a)) +#define VIRT_TO_BUS_LOW(a) (uint32_t)virt_to_bus(((void *)a)) #define VIRT_TO_BUS_HIGH(a) (uint32_t)(0x0) #else -#define VIRT_TO_BUS_LOW(a) (uint32_t)(0xffffffff & virt_to_bus((a))) -#define VIRT_TO_BUS_HIGH(a) (uint32_t)(0xffffffff & (virt_to_bus((a))>>32)) +#define VIRT_TO_BUS_LOW(a) (uint32_t)(0xffffffff & virt_to_bus((void *)(a))) +#define VIRT_TO_BUS_HIGH(a) (uint32_t)(0xffffffff & (virt_to_bus((void *)(a))>>32)) #endif -#endif /* QLA1280_64BIT_SUPPORT */ -#define STATIC +#define STATIC #define NVRAM_DELAY() udelay(500) /* 2 microsecond delay */ void qla1280_device_queue_depth(scsi_qla_host_t *, Scsi_Device *); @@ -285,11 +211,11 @@ #define LSB(x) (uint8_t)(x) #if BITS_PER_LONG <= 32 -#define LS_64BITS(x) (uint32_t)(x) -#define MS_64BITS(x) (uint32_t)(0x0) +#define LS_64BITS(x) (uint32_t)((unsigned long) x) +#define MS_64BITS(x) (uint32_t)((unsigned long) 0x0) #else -#define LS_64BITS(x) (uint32_t)(0xffffffff & (x)) -#define MS_64BITS(x) (uint32_t)(0xffffffff & ((x)>>32) ) +#define LS_64BITS(x) (uint32_t)(0xffffffff & ((unsigned long)x)) +#define MS_64BITS(x) (uint32_t)(0xffffffff & (((unsigned long)x)>>32) ) #endif /* @@ -300,9 +226,6 @@ STATIC void qla1280_putq_t(scsi_lu_t *, srb_t *); STATIC void qla1280_done_q_put(srb_t *, srb_t **, srb_t **); STATIC void qla1280_select_queue_depth(struct Scsi_Host *, Scsi_Device *); -#ifdef QLA1280_UNUSED -static void qla1280_dump_regs(struct Scsi_Host *host); -#endif #if STOP_ON_ERROR static void qla1280_panic(char *, struct Scsi_Host *host); #endif @@ -313,9 +236,6 @@ STATIC void qla1280_removeq(scsi_lu_t *q, srb_t *sp); STATIC void qla1280_mem_free(scsi_qla_host_t *ha); void qla1280_do_dpc(void *p); -#ifdef QLA1280_UNUSED -static void qla1280_set_flags(char * s); -#endif static char *qla1280_get_token(char *, char *); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) STATIC inline void mdelay(int); @@ -339,9 +259,7 @@ STATIC uint8_t qla1280_device_reset(scsi_qla_host_t *, uint8_t, uint32_t); STATIC uint8_t qla1280_abort_device(scsi_qla_host_t *, uint8_t, uint32_t, uint32_t); STATIC uint8_t qla1280_abort_command(scsi_qla_host_t *, srb_t *), -#if QLA1280_64BIT_SUPPORT qla1280_64bit_start_scsi(scsi_qla_host_t *, srb_t *), -#endif qla1280_32bit_start_scsi(scsi_qla_host_t *, srb_t *), qla1280_abort_isp(scsi_qla_host_t *); STATIC void qla1280_nv_write(scsi_qla_host_t *, uint16_t), @@ -374,12 +292,12 @@ qla1280_notify_ack(scsi_qla_host_t *, notify_entry_t *), qla1280_immed_notify(scsi_qla_host_t *, notify_entry_t *), qla1280_accept_io(scsi_qla_host_t *, ctio_ret_entry_t *), -#if QLA1280_64BIT_SUPPORT - qla1280_64bit_continue_io(scsi_qla_host_t *, atio_entry_t *, uint32_t, - paddr32_t *), -#endif - qla1280_32bit_continue_io(scsi_qla_host_t *, atio_entry_t *, uint32_t, - paddr32_t *), + qla1280_64bit_continue_io(scsi_qla_host_t *, + atio_entry_t *, uint32_t, + paddr32_t *), + qla1280_32bit_continue_io(scsi_qla_host_t *, + atio_entry_t *, uint32_t, + paddr32_t *), qla1280_atio_entry(scsi_qla_host_t *, atio_entry_t *), qla1280_notify_entry(scsi_qla_host_t *, notify_entry_t *); #endif /* QLA1280_TARGET_MODE_SUPPORT */ @@ -400,7 +318,7 @@ qla1280_dump_buffer(caddr_t, uint32_t); char debug_buff[80]; -#if DEBUG_QLA1280 +#if DEBUG_QLA1280 STATIC uint8_t ql_debug_print = 1; #else STATIC uint8_t ql_debug_print = 0; @@ -426,6 +344,22 @@ #endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) +/* + * Our directory Entry in /proc/scsi for the user to + * access the driver. + */ +/* Need to add in proc_fs.h PROC_SCSI_QL1280 */ +#define PROC_SCSI_QL1280 PROC_SCSI_QLOGICISP + +struct proc_dir_entry proc_scsi_qla1280 = { + PROC_SCSI_QL1280, 7, "qla1280", + S_IFDIR | S_IRUGO | S_IXUGO, 2, + 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; +#endif + /* We use the Scsi_Pointer structure that's included with each command * SCSI_Cmnd as a scratchpad for our SRB. * @@ -471,7 +405,7 @@ unsigned char *fwver; /* Ptr to F/W version array */ } qla_boards_t; -struct _qlaboards QLBoardTbl[NUM_OF_ISP_DEVICES] = +struct _qlaboards QL1280BoardTbl[NUM_OF_ISP_DEVICES] = { /* Name , Board PCI Device ID, Number of ports */ {"QLA1080 ", QLA1080_DEVICE_ID, 1, @@ -567,152 +501,149 @@ * * Returns: *************************************************************************/ -#ifdef QLA1280_PROFILE -#define PROC_BUF (&qla1280_buffer[size]) -#define LUN_ID (targ_lun>>(MAX_T_BITS+MAX_L_BITS)),((targ_lun>>MAX_L_BITS)&0xf), targ_lun&0x7 -#endif +#define PROC_BUF (&qla1280_buffer[len]) int -qla1280_proc_info ( char *buffer, char **start, off_t offset, int length, - int hostno, int inout) -{ -#ifdef QLA1280_PROFILE +qla1280_proc_info( char *buffer, char **start, off_t offset, int length, + int hostno, int inout) { +#if QLA1280_PROFILE struct Scsi_Host *host; scsi_qla_host_t *ha; int size = 0; - int targ_lun; scsi_lu_t *up; - int no_devices; + int len = 0; + qla_boards_t *bdp; + uint32_t b, t, l; - printk("Entering proc_info 0x%p,0x%lx,0x%x,0x%x\n",buffer,offset,length,hostno); host = NULL; - /* find the host they want to look at */ - for(ha=qla1280_hostlist; (ha != NULL) && ha->host->host_no != hostno; ha=ha->next) + + /* Find the host that was specified */ + for( ha=qla1280_hostlist; (ha != NULL) && ha->host->host_no != hostno; ha=ha->next ) ; - if (!ha) - { - size += sprintf(buffer, "Can't find adapter for host number %d\n", hostno); - if (size > length) - { + /* if host wasn't found then exit */ + if( !ha ) { + size = sprintf(buffer, "Can't find adapter for host number %d\n", hostno); + if( size > length ) { return (size); - } - else - { - return (length); + } else { + return (0); } } host = ha->host; - if (inout == TRUE) /* Has data been written to the file? */ - { - return (qla1280_set_info(buffer, length, host)); - } - /* compute number of active devices */ - no_devices = 0; - for (targ_lun = 0; targ_lun < MAX_EQ; targ_lun++) + if( inout == TRUE ) /* Has data been written to the file? */ { - if( (up = ha->dev[targ_lun]) == NULL ) - continue; - no_devices++; + printk("qla1280_proc: has data been written to the file. \n"); + return (qla1280_set_info(buffer, length, host)); } - /* size = 112 * no_devices; */ - size = 4096; - /* round up to the next page */ /* * if our old buffer is the right size use it otherwise * allocate a new one. */ - if (qla1280_buffer_size != size) - { + size = 4096; /* get a page */ + if( qla1280_buffer_size != size ) { /* deallocate this buffer and get a new one */ - if (qla1280_buffer != NULL) - { + if( qla1280_buffer != NULL ) { kfree(qla1280_buffer); qla1280_buffer_size = 0; } qla1280_buffer = kmalloc(size, GFP_KERNEL); } - if (qla1280_buffer == NULL) - { + if( qla1280_buffer == NULL ) { size = sprintf(buffer, "qla1280 - kmalloc error at line %d\n", __LINE__); return size; } + /* save the size of our buffer */ qla1280_buffer_size = size; - size = 0; - size += sprintf(PROC_BUF, "Qlogic 1280/1080 SCSI driver version: "); /* 43 bytes */ - size += sprintf(PROC_BUF, "%5s, ", QLA1280_VERSION); /* 5 */ - size += sprintf(PROC_BUF, "Qlogic Firmware version: "); /* 25 */ - size += sprintf(PROC_BUF, "%2d.%2d.%2d",_firmware_version[0], /* 8 */ - ql12_firmware_version[1], - ql12_firmware_version[2]); - size += sprintf(PROC_BUF, "\n"); /* 1 */ - - size += sprintf(PROC_BUF, "SCSI Host Adapter Information: %s\n", QLBoardTbl[ha->devnum].bdName); - size += sprintf(PROC_BUF, "Request Queue = 0x%lx, Response Queue = 0x%lx\n", + /* start building the print buffer */ + bdp = &QL1280BoardTbl[ha->devnum]; + size = sprintf(PROC_BUF, + "QLogic PCI to SCSI Adapter for ISP 1280/12160:\n" + " Firmware version: %2d.%02d.%02d, Driver version %s\n", bdp->fwver[0], bdp->fwver[1], bdp->fwver[2], QLA1280_VERSION); + + len += size; + + size = sprintf(PROC_BUF, "SCSI Host Adapter Information: %s\n", bdp->bdName); + len += size; + size = sprintf(PROC_BUF, "Request Queue = 0x%lx, Response Queue = 0x%lx\n", ha->request_dma, ha->response_dma); - size += sprintf(PROC_BUF, "Request Queue count= 0x%x, Response Queue count= 0x%x\n", + len += size; + size = sprintf(PROC_BUF, "Request Queue count= 0x%lx, Response Queue count= 0x%lx\n", REQUEST_ENTRY_CNT, RESPONSE_ENTRY_CNT); - size += sprintf(PROC_BUF,"Number of pending commands = 0x%lx\n", ha->actthreads); - size += sprintf(PROC_BUF,"Number of queued commands = 0x%lx\n", ha->qthreads); - size += sprintf(PROC_BUF,"Number of free request entries = %d\n",ha->req_q_cnt); - size += sprintf(PROC_BUF, "\n"); /* 1 */ + len += size; + size = sprintf(PROC_BUF, "Number of pending commands = 0x%lx\n", ha->actthreads); + len += size; + size = sprintf(PROC_BUF, "Number of queued commands = 0x%lx\n", ha->qthreads); + len += size; + size = sprintf(PROC_BUF, "Number of free request entries = %d\n",ha->req_q_cnt); + len += size; + size = sprintf(PROC_BUF, "\n"); /* 1 */ + len += size; - size += sprintf(PROC_BUF, "Attached devices:\n"); + size = sprintf(PROC_BUF, "SCSI device Information:\n"); + len += size; /* scan for all equipment stats */ - for (targ_lun = 0; targ_lun < MAX_EQ; targ_lun++) - { - if( (up = ha->dev[targ_lun]) == NULL ) + for (b = 0; b < MAX_BUSES; b++) + for (t = 0; t < MAX_TARGETS; t++) { + for( l = 0; l < MAX_LUNS; l++ ) { + up = (scsi_lu_t *) LU_Q(ha, b, t, l); + if( up == NULL ) continue; - if( up->io_cnt == 0 ) - { - size += sprintf(PROC_BUF,"(%2d:%2d:%2d) No stats\n",LUN_ID); + /* unused device/lun */ + if( up->io_cnt == 0 || up->io_cnt < 2 ) continue; - } /* total reads since boot */ /* total writes since boot */ /* total requests since boot */ - size += sprintf(PROC_BUF, "Total requests %ld,",up->io_cnt); + size = sprintf(PROC_BUF, "(%2d:%2d:%2d): Total reqs %ld,",b,t,l,up->io_cnt); + len += size; /* current number of pending requests */ - size += sprintf(PROC_BUF, "(%2d:%2d:%2d) pending requests %d,",LUN_ID,up->q_outcnt); + size = sprintf(PROC_BUF, " Pend reqs %d,",up->q_outcnt); + len += size; +#if 0 /* avg response time */ - size += sprintf(PROC_BUF, "Avg response time %ld%%,",(up->resp_time/up->io_cnt)*100); + size = sprintf(PROC_BUF, " Avg resp time %ld%%,",(up->resp_time/up->io_cnt)*100); + len += size; /* avg active time */ - size += sprintf(PROC_BUF, "Avg active time %ld%%\n",(up->act_time/up->io_cnt)*100); + size = sprintf(PROC_BUF, " Avg active time %ld%%\n",(up->act_time/up->io_cnt)*100); +#else + size = sprintf(PROC_BUF, "\n"); +#endif + len += size; + } + if( len >= qla1280_buffer_size ) + break; } - if (size >= qla1280_buffer_size) - { + if( len >= qla1280_buffer_size ) { printk(KERN_WARNING "qla1280: Overflow buffer in qla1280_proc.c\n"); } - if (offset > size - 1) - { + if( offset > len - 1 ) { kfree(qla1280_buffer); qla1280_buffer = NULL; qla1280_buffer_size = length = 0; *start = NULL; - } - else - { + } else { *start = &qla1280_buffer[offset]; /* Start of wanted data */ - if (size - offset < length) - { - length = size - offset; + if( len - offset < length ) { + length = len - offset; } } + return (length); +#else + return (0); #endif - return (length); } - /************************************************************************** * qla1280_detect * This routine will probe for Qlogic 1280 SCSI host adapters. @@ -735,6 +666,9 @@ scsi_qla_host_t *ha, *cur_ha; struct _qlaboards *bdp; int i, j; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) + unsigned short subsys; +#endif #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,1,95) unsigned int piobase; unsigned char pci_bus, pci_devfn, pci_irq; @@ -747,13 +681,19 @@ #else int index; #endif +#ifndef PCI_VENDOR_ID_AMI +#define PCI_VENDOR_ID_AMI 0x101e +#endif ENTER("qla1280_detect"); + if (sizeof(srb_t) > sizeof(Scsi_Pointer) ) + printk("qla1280_detect: [WARNING] srb_t Must Be Redefined"); + #ifdef CHECKSRBSIZE if (sizeof(srb_t) > sizeof(Scsi_Pointer) ) { - printk("Redefine SRB - its too big"); + printk("qla1280_detect: srb_t Must Be Redefined - its too big"); return 0; } #endif @@ -784,40 +724,77 @@ "qla1280: insmod or else it might trash certain memory areas.\n"); #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) if ((int) !pcibios_present()) +#else + if (!pci_present()) +#endif { - printk("scsi: PCI not present\n"); - return 0; - } /* end of IF */ - bdp = &QLBoardTbl[0]; + printk("scsi: PCI not present\n"); + return 0; + } + + bdp = &QL1280BoardTbl[0]; qla1280_hostlist = NULL; -#if 0 +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) template->proc_dir = &proc_scsi_qla1280; #else - template->proc_name = "qla1280"; + template->proc_name = "qla1x80"; #endif - /* Try and find each different type of adapter we support */ for( i=0; bdp->device_id != 0 && i < NUM_OF_ISP_DEVICES; i++, bdp++ ) { #if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,95) +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,18) + /* PCI_SUBSYSTEM_IDS supported */ + while ((pdev = pci_find_subsys(QLA1280_VENDOR_ID, + bdp->device_id, PCI_ANY_ID, PCI_ANY_ID, pdev) )) { + if (pci_enable_device(pdev)) continue; +#else while ((pdev = pci_find_device(QLA1280_VENDOR_ID, bdp->device_id, pdev ) )) { - if (pci_enable_device(pdev)) continue; -#else +#endif /* 2,3,18 */ +#else /* less than 2,1,95 */ while (!(pcibios_find_device(QLA1280_VENDOR_ID, bdp->device_id, index++, &pci_bus, &pci_devfn)) ) { -#endif +#endif /* 2,1,95 */ /* found a adapter */ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,18) + printk("qla1280: detect() found an HBA\n"); + printk("qla1280: VID=%x DID=%x SSVID=%x SSDID=%x\n", + pdev->vendor, pdev->device, + pdev->subsystem_vendor, pdev->subsystem_device); + /* If it's an AMI SubSys Vendor ID adapter, skip it. */ + if (pdev->subsystem_vendor == PCI_VENDOR_ID_AMI) + { + printk("qla1280: Skip AMI SubSys Vendor ID Chip\n"); + continue; + } +#else +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,95) + pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, + &subsys); + /* Bypass all AMI SUBSYS VENDOR IDs */ + if (subsys == PCI_VENDOR_ID_AMI) + { + printk("qla1280: Skip AMI SubSys Vendor ID Chip\n"); + continue; + } +#endif /* 2,1,95 */ +#endif /* 2,3,18 */ host = scsi_register(template, sizeof(scsi_qla_host_t)); ha = (scsi_qla_host_t *) host->hostdata; /* Clear our data area */ for( j =0, cp = (char *)ha; j < sizeof(scsi_qla_host_t); j++) - *cp = 0; + *cp++ = 0; /* Sanitize the information from PCI BIOS. */ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,95) host->irq = pdev->irq; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) + host->io_port = (unsigned int) pdev->base_address[0]; +#else host->io_port = pci_resource_start(pdev, 0); +#endif ha->pci_bus = pdev->bus->number; ha->pci_device_fn = pdev->devfn; ha->pdev = pdev; @@ -834,35 +811,35 @@ ha->devnum = i; if( qla1280_mem_alloc(ha) ) { - printk(KERN_INFO "qla1280: Failed to allocate memory for adapter\n"); + printk(KERN_INFO "qla1280: Failed to get memory\n"); } ha->ports = bdp->numPorts; + /* following needed for all cases of OS versions */ + host->io_port &= PCI_BASE_ADDRESS_IO_MASK; ha->iobase = (device_reg_t *) host->io_port; ha->host = host; ha->host_no = host->host_no; /* load the F/W, read paramaters, and init the H/W */ + ha->instance = num_hosts; if (qla1280_initialize_adapter(ha)) { - - printk(KERN_INFO "qla1280: Failed to initialized adapter\n"); - qla1280_mem_free(ha); - scsi_unregister(host); - continue; + printk(KERN_INFO "qla1280: Failed to initialize adapter\n"); + qla1280_mem_free(ha); + scsi_unregister(host); + continue; } host->max_channel = bdp->numPorts-1; - ha->instance = num_hosts; /* Register our resources with Linux */ if( qla1280_register_with_Linux(ha, bdp->numPorts-1) ) { - printk(KERN_INFO "qla1280: Failed to register our resources\n"); - qla1280_mem_free(ha); - scsi_unregister(host); - continue; + printk(KERN_INFO "qla1280: Failed to register resources\n"); + qla1280_mem_free(ha); + scsi_unregister(host); + continue; } - reg = ha->iobase; /* Disable ISP interrupts. */ qla1280_disable_intrs(ha); @@ -919,8 +896,11 @@ host->can_queue = 0xfffff; /* unlimited */ host->cmd_per_lun = 1; host->select_queue_depths = qla1280_select_queue_depth; - host->n_io_port = 0xFF; - host->base = (unsigned long) ha->mmpbase; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) + host->base = (unsigned char *) ha->mmpbase; +#else + host->base = (u_long) ha->mmpbase; +#endif host->max_channel = maxchannels; host->max_lun = MAX_LUNS-1; host->unique_id = ha->instance; @@ -1011,10 +991,10 @@ bp = &qla1280_buffer[0]; ha = (scsi_qla_host_t *)host->hostdata; - bdp = &QLBoardTbl[ha->devnum]; + bdp = &QL1280BoardTbl[ha->devnum]; memset(bp, 0, sizeof(qla1280_buffer)); sprintf(bp, - "QLogic %sPCI to SCSI Host Adapter: bus %d device %d irq %d\n" + "QLogic %s PCI to SCSI Host Adapter: bus %d device %d irq %d\n" " Firmware version: %2d.%02d.%02d, Driver version %s", (char *)&bdp->bdName[0], ha->pci_bus, (ha->pci_device_fn & 0xf8) >> 3, host->irq, bdp->fwver[0],bdp->fwver[1],bdp->fwver[2], @@ -1046,8 +1026,8 @@ scsi_lu_t *q; u_long handle; - ENTER("qla1280_queuecommand"); - COMTRACE('C') + /*ENTER("qla1280_queuecommand"); + COMTRACE('C')*/ host = cmd->host; ha = (scsi_qla_host_t *) host->hostdata; @@ -1074,7 +1054,7 @@ { LU_Q(ha, b, t, l) = q; BZERO(q,sizeof(struct scsi_lu)); - DEBUG(sprintf(debug_buff,"Allocate new device queue 0x%x\n",q)); + DEBUG(sprintf(debug_buff,"Allocate new device queue 0x%x\n\r",q)); DEBUG(qla1280_print(debug_buff)); DRIVER_UNLOCK } @@ -1093,15 +1073,13 @@ handle = INVALID_HANDLE; CMD_HANDLE(cmd) = (unsigned char *)handle; - /* Bookkeeping information */ - sp->r_start = jiffies; /* time the request was recieved */ - sp->u_start = 0; - /* add the command to our queue */ ha->qthreads++; qla1280_putq_t(q,sp); - DEBUG(sprintf(debug_buff,"qla1280_queuecmd: queue pid=%d, hndl=0x%x\n\r",cmd->pid,handle)); + DEBUG(sprintf(debug_buff, + "qla1280_QC: t=%x CDB=%x I/OSize=0x%x haQueueCount=0x%x\n\r", + t,cmd->cmnd[0],CMD_XFRLEN(cmd),ha->qthreads)); DEBUG(qla1280_print(debug_buff)); /* send command to adapter */ @@ -1111,7 +1089,7 @@ DRIVER_UNLOCK - LEAVE("qla1280_queuecommand"); + /*LEAVE("qla1280_queuecommand");*/ return (0); } @@ -1722,6 +1700,7 @@ scsi_lu_t *q; uint32_t b, t, l; Scsi_Cmnd *cmd; + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,95) unsigned long cpu_flags = 0; #endif @@ -1738,7 +1717,8 @@ *done_q_last = NULL; else (*done_q_first)->s_prev = NULL; - cmd = sp->cmd; + + cmd = sp->cmd; b = SCSI_BUS_32(cmd); t = SCSI_TCN_32(cmd); l = SCSI_LUN_32(cmd); @@ -1752,8 +1732,6 @@ q->q_flag &= ~QLA1280_QBUSY; } - q->resp_time += jiffies - sp->r_start; /* Lun bookkeeping information */ - q->act_time += jiffies - sp->u_start; q->io_cnt++; if( sp->dir & BIT_5 ) q->r_cnt++; @@ -1776,7 +1754,28 @@ default: break; } - + /* 3.13 64 and 32 bit */ + /* Release memory used for this I/O */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) + if (cmd->use_sg) { + DEBUG(sprintf(debug_buff, + "S/G unmap_sg cmd=%x\n\r",cmd);) + DEBUG(qla1280_print(debug_buff)); + pci_unmap_sg(ha->pdev, cmd->request_buffer, + cmd->use_sg, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); + } + else if (cmd->request_bufflen) { + DEBUG(sprintf(debug_buff, + "No S/G unmap_single cmd=%x saved_dma_handle=%lx\n\r", + cmd,sp->saved_dma_handle);) + DEBUG(qla1280_print(debug_buff);) + + pci_unmap_single(ha->pdev,sp->saved_dma_handle, + cmd->request_bufflen, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); + } +#endif /* Call the mid-level driver interrupt handler */ CMD_HANDLE(sp->cmd) = (unsigned char *) 0; ha->actthreads--; @@ -1790,8 +1789,6 @@ qla1280_next(ha, q, b); } DRIVER_UNLOCK - - COMTRACE('d') LEAVE("qla1280_done"); } @@ -1963,7 +1960,7 @@ if (q->q_outcnt >= ha->bus_settings[b].hiwat) q->q_flag |= QLA1280_QBUSY; -#if QLA1280_64BIT_SUPPORT +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) if (ha->flags.enable_64bit_addressing) status = qla1280_64bit_start_scsi(ha, sp); else @@ -1980,7 +1977,7 @@ /* Wait for 30 sec for command to be accepted. */ for (cnt = 6000000; cnt; cnt--) { -#if QLA1280_64BIT_SUPPORT +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) if (ha->flags.enable_64bit_addressing) status = qla1280_64bit_start_scsi(ha, sp); else @@ -2071,7 +2068,7 @@ ENTER("qla1280_putq_t"); #endif DRIVER_LOCK - DEBUG(sprintf(debug_buff,"Adding to device 0x%p<-(0x%p)\n\r",q,sp)); + DEBUG(sprintf(debug_buff,"Adding to device q=0x%p<-(0x%p)sp\n\r",q,sp)); DEBUG(qla1280_print(debug_buff)); sp->s_next = NULL; if (!q->q_first) /* If queue empty */ @@ -2156,28 +2153,33 @@ { uint8_t status = 1; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,18) + dma_addr_t dma_handle; +#endif #ifdef QL_DEBUG_LEVEL_3 ENTER("qla1280_mem_alloc"); #endif -#ifdef DYNAMIC_MEM_ALLOC - ha->request_ring = qla1280_alloc_phys(REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT, - &ha->request_dma); - if(ha->request_ring) { - ha->response_ring = qla1280_alloc_phys(RESPONSE_ENTRY_SIZE * RESPONSE_ENTRY_CNT, - &ha->response_dma); - if(ha->response_ring) { - status = 0; - } - } -#else + /* 3.13 */ + /* get consistent memory allocated for request and response rings */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) ha->request_ring = &ha->req[0]; ha->request_dma = VIRT_TO_BUS(&ha->req[0]); ha->response_ring = &ha->res[0]; ha->response_dma = VIRT_TO_BUS(&ha->res[0]); status = 0; -#endif +#else + ha->request_ring = pci_alloc_consistent(ha->pdev, + ((REQUEST_ENTRY_CNT+1)*(sizeof(request_t))), + &dma_handle); + ha->request_dma = dma_handle; + ha->response_ring = pci_alloc_consistent(ha->pdev, + ((RESPONSE_ENTRY_CNT+1)*(sizeof(response_t))), + &dma_handle); + ha->response_dma = dma_handle; + status = 0; +#endif if(status) { #if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3) @@ -2221,6 +2223,16 @@ ha->dev[b] = (scsi_lu_t *)NULL; } + /* 3.13 */ + /* free consistent memory allocated for request and response rings */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) + pci_free_consistent(ha->pdev, ((REQUEST_ENTRY_CNT+1)*(sizeof(request_t))), + ha->request_ring, ha->request_dma); + + pci_free_consistent(ha->pdev,((RESPONSE_ENTRY_CNT+1)*(sizeof(response_t))), + ha->response_ring, ha->response_dma); +#endif + LEAVE("qlc1280_mem_free"); } @@ -2481,7 +2493,7 @@ /* Verify checksum of loaded RISC code. */ mb[0] = MBC_VERIFY_CHECKSUM; /* mb[1] = ql12_risc_code_addr01; */ - mb[1] = *QLBoardTbl[ha->devnum].fwstart; + mb[1] = *QL1280BoardTbl[ha->devnum].fwstart; if (!(status = qla1280_mailbox_command(ha, BIT_1|BIT_0, &mb[0]))) { @@ -2491,7 +2503,7 @@ #endif mb[0] = MBC_EXECUTE_FIRMWARE; /* mb[1] = ql12_risc_code_addr01; */ - mb[1] = *QLBoardTbl[ha->devnum].fwstart; + mb[1] = *QL1280BoardTbl[ha->devnum].fwstart; qla1280_mailbox_command(ha, BIT_1|BIT_0, &mb[0]); } else @@ -2526,18 +2538,69 @@ qla1280_pci_config(scsi_qla_host_t *ha) { uint8_t status = 1; - uint32_t command; #if MEMORY_MAPPED_IO uint32_t page_offset, base; uint32_t mmapbase; #endif - config_reg_t *creg = 0; uint16_t buf_wd; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) + uint32_t command; + config_reg_t *creg = 0; +#endif + ENTER("qla1280_pci_config"); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) + /* + * Set Bus Master Enable, Memory Address Space Enable and + * reset any error bits, in the command register. + */ + pci_read_config_word(ha->pdev, PCI_COMMAND, &buf_wd); + buf_wd &= ~0x7; +#if MEMORY_MAPPED_IO + DEBUG(printk("qla1280: MEMORY MAPPED IO is enabled.\n")); + buf_wd |= BIT_2 + BIT_1 + BIT_0; +#else + buf_wd |= BIT_2 + BIT_0; +#endif + pci_write_config_word(ha->pdev, PCI_COMMAND, buf_wd); + /* + * Reset expansion ROM address decode enable. + */ + pci_read_config_word(ha->pdev, PCI_ROM_ADDRESS, &buf_wd); + buf_wd &= ~PCI_ROM_ADDRESS_ENABLE; + pci_write_config_word(ha->pdev, PCI_ROM_ADDRESS, buf_wd); +#if MEMORY_MAPPED_IO + /* + * Get memory mapped I/O address. + */ + pci_read_config_word(ha->pdev, PCI_BASE_ADDRESS_1, &mmapbase); + mmapbase &= PCI_BASE_ADDRESS_MEM_MASK; + + /* + * Find proper memory chunk for memory map I/O reg. + */ + base = mmapbase & PAGE_MASK; + page_offset = mmapbase - base; + /* + * Get virtual address for I/O registers. + */ + ha->mmpbase = ioremap_nocache(base, page_offset + 256); + if( ha->mmpbase ) + { + ha->mmpbase += page_offset; + /* ha->iobase = ha->mmpbase; */ + status = 0; + } +#else /* MEMORY_MAPPED_IO */ + status = 0; +#endif /* MEMORY_MAPPED_IO */ + +#else /*LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) */ + /* Get command register. */ - if (pci_read_config_word(ha->pdev,OFFSET(creg->command), &buf_wd) == PCIBIOS_SUCCESSFUL) + if (pcibios_read_config_word(ha->pci_bus,ha->pci_device_fn, OFFSET(creg->command), &buf_wd) == PCIBIOS_SUCCESSFUL) { command = buf_wd; /* @@ -2551,20 +2614,20 @@ #else buf_wd |= BIT_2 + BIT_0; #endif - if( pci_write_config_word(ha->pdev,OFFSET(creg->command), buf_wd) ) + if( pcibios_write_config_word(ha->pci_bus,ha->pci_device_fn, OFFSET(creg->command), buf_wd) ) { printk(KERN_WARNING "qla1280: Could not write config word.\n"); } /* Get expansion ROM address. */ - if (pci_read_config_word(ha->pdev,OFFSET(creg->expansion_rom), &buf_wd) == PCIBIOS_SUCCESSFUL) + if (pcibios_read_config_word(ha->pci_bus,ha->pci_device_fn, OFFSET(creg->expansion_rom), &buf_wd) == PCIBIOS_SUCCESSFUL) { /* Reset expansion ROM address decode enable. */ buf_wd &= ~BIT_0; - if (pci_write_config_word(ha->pdev,OFFSET(creg->expansion_rom), buf_wd) == PCIBIOS_SUCCESSFUL) + if (pcibios_write_config_word(ha->pci_bus,ha->pci_device_fn, OFFSET(creg->expansion_rom), buf_wd) == PCIBIOS_SUCCESSFUL) { #if MEMORY_MAPPED_IO /* Get memory mapped I/O address. */ - pci_read_config_dword(ha->pdev,OFFSET(cfgp->mem_base_addr), &mmapbase); + pcibios_read_config_dword(ha->pci_bus, ha->pci_device_fn,OFFSET(cfgp->mem_base_addr), &mmapbase); mmapbase &= PCI_BASE_ADDRESS_MEM_MASK; /* Find proper memory chunk for memory map I/O reg. */ @@ -2588,6 +2651,7 @@ } } } +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) */ LEAVE("qla1280_pci_config"); return(status); @@ -2718,6 +2782,7 @@ * Returns: * 0 = success. */ +#define DUMP_IT_BACK 0 /* for debug of RISC loading */ STATIC uint8_t qla1280_setup_chip(scsi_qla_host_t *ha) { @@ -2726,37 +2791,52 @@ uint16_t *risc_code_address; long risc_code_size; uint16_t mb[MAILBOX_REGISTER_COUNT]; -#ifdef QLA1280_UNUSED - uint8_t *sp; - int i; -#endif uint16_t cnt; int num; +#if DUMP_IT_BACK + int i; + uint8_t *sp; uint8_t *tbuf; - u_long p_tbuf; +#if BITS_PER_LONG > 32 + dma_addr_t p_tbuf; +#else + uint32_t p_tbuf; +#endif +#endif #ifdef QL_DEBUG_LEVEL_3 ENTER("qla1280_setup_chip"); #endif - if( (tbuf = (uint8_t *)KMALLOC(8000) ) == NULL ) - { - printk("setup_chip: couldn't alloacte memory\n"); - return(1); - } - p_tbuf = VIRT_TO_BUS(tbuf); + /* 3.13 */ +#if DUMP_IT_BACK +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) + if( (tbuf = (uint8_t *)KMALLOC(8000) ) == NULL ) + { + printk("setup_chip: couldn't alloacte memory\n"); + return(1); + } + p_tbuf = VIRT_TO_BUS(tbuf); +#else + /* get consistent memory allocated for setup_chip */ + tbuf = pci_alloc_consistent(ha->pdev, 8000, &p_tbuf); +#endif +#endif + /* Load RISC code. */ /* risc_address = ql12_risc_code_addr01; risc_code_address = &ql12_risc_code01[0]; risc_code_size = ql12_risc_code_length01; */ - risc_address = *QLBoardTbl[ha->devnum].fwstart; - risc_code_address = QLBoardTbl[ha->devnum].fwcode; - risc_code_size = (long)(*QLBoardTbl[ha->devnum].fwlen & 0xffff); - - DEBUG(printk("qla1280: DMAing RISC code (%d) words.\n",(int)risc_code_size)); - DEBUG(sprintf(debug_buff,"qla1280_setup_chip: Loading RISC code size =(%ld).\n\r",risc_code_size);) + risc_address = *QL1280BoardTbl[ha->devnum].fwstart; + risc_code_address = QL1280BoardTbl[ha->devnum].fwcode; + risc_code_size = (long)(*QL1280BoardTbl[ha->devnum].fwlen & 0xffff); + + DEBUG(printk("qla1280_setup_chip: DMA RISC code (%d) words\n", + (int)risc_code_size)); + DEBUG(sprintf(debug_buff, + "qla1280_setup_chip: DMA RISC code (%d) words\n\r",risc_code_size);) DEBUG(qla1280_print(debug_buff)); num =0; while (risc_code_size > 0 && !status) @@ -2766,29 +2846,31 @@ if ( cnt > risc_code_size ) cnt = risc_code_size; - DEBUG(sprintf(debug_buff,"qla1280_setup_chip: loading risc @ =(0x%p),%d,%d(0x%x).\n\r",risc_code_address,cnt,num,risc_address);) + DEBUG(sprintf(debug_buff, + "qla1280_setup_chip: loading risc @ =(0x%p),%d,%d(0x%x).\n\r", + risc_code_address,cnt,num,risc_address);) DEBUG(qla1280_print(debug_buff)); - DEBUG(printk("qla1280_setup_chip: loading risc @ =code=(0x%p),cnt=%d,seg=%d,addr=0x%x\n\r",risc_code_address,cnt,num,risc_address)); - BCOPY((caddr_t) risc_code_address,(caddr_t) ha->request_ring, (cnt <<1)); + BCOPY((caddr_t) risc_code_address,(caddr_t) ha->request_ring, + (cnt <<1)); + + flush_cache_all(); + mb[0] = MBC_LOAD_RAM; - /* mb[0] = MBC_LOAD_RAM_A64; */ mb[1] = risc_address; mb[4] = cnt; mb[3] = (uint16_t) ha->request_dma & 0xffff; mb[2] = (uint16_t) (ha->request_dma >> 16) & 0xffff; mb[7] = (uint16_t) (MS_64BITS(ha->request_dma) & 0xffff); mb[6] = (uint16_t) (MS_64BITS(ha->request_dma) >> 16) & 0xffff; - DEBUG(printk("qla1280_setup_chip: op=%d 0x%lx = 0x%4x,0x%4x,0x%4x,0x%4x\n",mb[0],ha->request_dma,mb[6],mb[7],mb[2],mb[3])); + DEBUG(printk("qla1280_setup_chip: op=%d 0x%p = 0x%4x,0x%4x,0x%4x,0x%4x\n",mb[0],ha->request_dma,mb[6],mb[7],mb[2],mb[3])); if( (status = qla1280_mailbox_command(ha, BIT_4|BIT_3|BIT_2|BIT_1|BIT_0, &mb[0])) ) { printk("Failed to load partial segment of f/w\n"); break; } - /* dump it back */ - -#if 0 - mb[0] = MBC_DUMP_RAM_A64; +#if DUMP_IT_BACK + mb[0] = MBC_READ_RAM_WORD; mb[1] = risc_address; mb[4] = cnt; mb[3] = (uint16_t) p_tbuf & 0xffff; @@ -2796,10 +2878,13 @@ mb[7] = (uint16_t) (p_tbuf >> 32) & 0xffff; mb[6] = (uint16_t) (p_tbuf >> 48) & 0xffff; - if( (status = qla1280_mailbox_command(ha, BIT_4|BIT_3|BIT_2|BIT_1|BIT_0, - &mb[0])) ) + if( (status = qla1280_mailbox_command(ha, + BIT_4|BIT_3|BIT_2|BIT_1|BIT_0,&mb[0])) ) { printk("Failed to dump partial segment of f/w\n"); + DEBUG(sprintf(debug_buff, + "setup_chip: Failed to dump partial segment of f/w\n\r");) + DEBUG(qla1280_print(debug_buff)); break; } sp = (uint8_t *)ha->request_ring; @@ -2807,51 +2892,20 @@ { if( tbuf[i] != sp[i] ) { - printk("qla1280 : firmware compare error @ byte (0x%x)\n",i); - break; + printk("qla1280_setup_chip: FW compare error @ byte(0x%x) loop#=%x\n",i,num); + printk("setup_chip: FWbyte=%x FWfromChip=%x\n",sp[i],tbuf[i]); + DEBUG(sprintf(debug_buff, + "qla1280_setup_chip: FW compare error @ byte(0x%x) loop#=%x\n\r",i);) + DEBUG(qla1280_print(debug_buff);) + /*break;*/ } } - #endif risc_address += cnt; risc_code_size = risc_code_size - cnt; risc_code_address = risc_code_address + cnt; num++; } -#ifdef QLA1280_UNUSED - DEBUG(ql_debug_print = 0;) - { - for (i = 0; i < ql12_risc_code_length01; i++) - { - mb[0] = 0x4; - mb[1] = ql12_risc_code_addr01 + i; - mb[2] = ql12_risc_code01[i]; - - status = qla1280_mailbox_command(ha, BIT_2|BIT_1|BIT_0, - &mb[0]); - if (status) - { - printk("qla1280 : firmware load failure\n"); - break; - } - - mb[0] = 0x5; - mb[1] = ql12_risc_code_addr01 + i; - mb[2] = 0; - - status = qla1280_mailbox_command(ha, BIT_2|BIT_1|BIT_0, - &mb[0]); - if (status) - { - printk("qla1280 : firmware dump failure\n"); - break; - } - if( mb[2] != ql12_risc_code01[i] ) - printk("qla1280 : firmware compare error @ (0x%x)\n",ql12_risc_code_addr01+i); - } - } - DEBUG(ql_debug_print = 1;) -#endif /* Verify checksum of loaded RISC code. */ if (!status) @@ -2859,22 +2913,29 @@ DEBUG(printk("qla1280_setup_chip: Verifying checksum of loaded RISC code.\n");) mb[0] = MBC_VERIFY_CHECKSUM; /* mb[1] = ql12_risc_code_addr01; */ - mb[1] = *QLBoardTbl[ha->devnum].fwstart; + mb[1] = *QL1280BoardTbl[ha->devnum].fwstart; if (!(status = qla1280_mailbox_command(ha, BIT_1|BIT_0, &mb[0]))) { /* Start firmware execution. */ DEBUG(qla1280_print("qla1280_setup_chip: start firmware running.\n\r");) mb[0] = MBC_EXECUTE_FIRMWARE; - /* mb[1] = ql12_risc_code_addr01; */ - mb[1] = *QLBoardTbl[ha->devnum].fwstart; + mb[1] = *QL1280BoardTbl[ha->devnum].fwstart; qla1280_mailbox_command(ha, BIT_1|BIT_0, &mb[0]); } else printk("qla1280_setup_chip: Failed checksum.\n"); } - KMFREE(tbuf,8000); + /* 3.13 */ +#if DUMP_IT_BACK +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) + KMFREE(tbuf,8000); +#else + /* free consistent memory allocated for setup_chip */ + pci_free_consistent(ha->pdev, 8000, tbuf, p_tbuf); +#endif +#endif #if defined(QL_DEBUG_LEVEL_2) || defined(QL_DEBUG_LEVEL_3) if (status) @@ -3151,10 +3212,28 @@ /* Disable RISC load of firmware. */ ha->flags.disable_risc_code_load = nv->cntr_flags_1.disable_loading_risc_code; + /* Enable 64bit addressing. */ ha->flags.enable_64bit_addressing = nv->cntr_flags_1.enable_64bit_addressing; +#if FORCE_64BIT_PCI_DMA + ha->flags.enable_64bit_addressing = 1; +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) + if (ha->flags.enable_64bit_addressing) { + printk("[[[ qla1x160: 64 Bit PCI Addressing Enabled ]]]\n"); + +#if BITS_PER_LONG > 32 + /* Update our PCI device dma_mask for full 64 bit mask */ + //ha->pdev->dma_mask = (pci_dma_t) 0xffffffffffffffffull; + ha->pdev->dma_mask = 0xffffffffffffffff; + +#endif + } +#endif + /* Set ISP hardware DMA burst */ mb[0] = nv->isp_config.c; WRT_REG_WORD(®->cfg_1, mb[0]); @@ -3837,7 +3916,7 @@ #endif } -#if QLA1280_64BIT_SUPPORT +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,18) /* * qla1280_64bit_start_scsi * The start SCSI is responsible for building request packets on @@ -3862,10 +3941,13 @@ uint16_t seg_cnt; struct scatterlist *sg = (struct scatterlist *) NULL; uint32_t *dword_ptr; + dma_addr_t dma_handle; -#ifdef QL_DEBUG_LEVEL_3 ENTER("qla1280_64bit_start_scsi:"); -#endif + + DEBUG(sprintf(debug_buff, + "64bit_start: cmd=%x sp=%x CDB=%x\n\r",cmd,sp,cmd->cmnd[0]);) + DEBUG(qla1280_print(debug_buff)); if( qla1280_check_for_dead_scsi_bus(ha, sp) ) { @@ -3876,9 +3958,10 @@ seg_cnt = 0; req_cnt = 1; if (cmd->use_sg) - { - seg_cnt = cmd->use_sg; + { /* 3.13 64 bit */ sg = (struct scatterlist *) cmd->request_buffer; + seg_cnt = pci_map_sg(ha->pdev,sg,cmd->use_sg, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); if (seg_cnt > 2) { @@ -3889,7 +3972,7 @@ } else if (cmd->request_bufflen) /* If data transfer. */ { - DEBUG(printk("Single data transfer (0x%x)\n",cmd->request_bufflen)); + DEBUG(printk("Single data transfer len=0x%x\n",cmd->request_bufflen)); seg_cnt = 1; } @@ -3950,7 +4033,7 @@ /* Load SCSI command packet. */ pkt->cdb_len = (uint16_t)CMD_CDBLEN(cmd); BCOPY(&(CMD_CDBP(cmd)), pkt->scsi_cdb, pkt->cdb_len); - DEBUG(printk("Build packet for command[0]=0x%x\n",pkt->scsi_cdb[0])); + //DEBUG(printk("Build packet for command[0]=0x%x\n",pkt->scsi_cdb[0])); /* * Load data segments. @@ -3976,12 +4059,17 @@ /* Load command entry data segments. */ for (cnt = 0; cnt < 2 && seg_cnt; cnt++, seg_cnt--) { - DEBUG(sprintf(debug_buff,"SG Segment ap=0x%p, len=0x%x\n\r",sg->address,sg->length)); - DEBUG(qla1280_print(debug_buff)); - *dword_ptr++ = cpu_to_le32(VIRT_TO_BUS_LOW(sg->address)); - *dword_ptr++ = cpu_to_le32(VIRT_TO_BUS_HIGH(sg->address)); - *dword_ptr++ = sg->length; + /* 3.13 64 bit */ + *dword_ptr++ = cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))); + *dword_ptr++ = cpu_to_le32(pci_dma_hi32(sg_dma_address(sg))); + *dword_ptr++ = cpu_to_le32(sg_dma_len(sg)); sg++; + DEBUG(sprintf(debug_buff, + "S/G Segment phys_addr=%x %x, len=0x%x\n\r", + cpu_to_le32(pci_dma_hi32(sg_dma_address(sg))), + cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))), + cpu_to_le32(sg_dma_len(sg)));) + DEBUG(qla1280_print(debug_buff)); } #ifdef QL_DEBUG_LEVEL_5 qla1280_print( @@ -3998,6 +4086,10 @@ /* * Build continuation packets. */ + DEBUG(sprintf(debug_buff, + "S/G Building Continuation...seg_cnt=0x%x remains\n\r", + seg_cnt);) + DEBUG(qla1280_print(debug_buff)); while (seg_cnt > 0) { /* Adjust ring index. */ @@ -4031,10 +4123,17 @@ /* Load continuation entry data segments. */ for (cnt = 0; cnt < 5 && seg_cnt; cnt++, seg_cnt--) { - *dword_ptr++ = cpu_to_le32(VIRT_TO_BUS_LOW(sg->address)); - *dword_ptr++ = cpu_to_le32(VIRT_TO_BUS_HIGH(sg->address)); - *dword_ptr++ = sg->length; - sg++; + /* 3.13 64 bit */ + *dword_ptr++ = cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))); + *dword_ptr++ = cpu_to_le32(pci_dma_hi32(sg_dma_address(sg))); + *dword_ptr++ = cpu_to_le32(sg_dma_len(sg)); + DEBUG(sprintf(debug_buff, + "S/G Segment Cont. phys_addr=%x %x, len=0x%x\n\r", + cpu_to_le32(pci_dma_hi32(sg_dma_address(sg))), + cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))), + cpu_to_le32(sg_dma_len(sg)));) + DEBUG(qla1280_print(debug_buff)); + sg++; } #ifdef QL_DEBUG_LEVEL_5 qla1280_print( @@ -4051,11 +4150,21 @@ #endif } } - else /* No scatter gather data transfer */ - { - *dword_ptr++ = cpu_to_le32(VIRT_TO_BUS_LOW(cmd->request_buffer)); - *dword_ptr++ = cpu_to_le32(VIRT_TO_BUS_HIGH(cmd->request_buffer)); - *dword_ptr = (uint32_t) cmd->request_bufflen; + else /* No scatter gather data transfer */ + { /* 3.13 64 bit */ + dma_handle = pci_map_single(ha->pdev, + cmd->request_buffer, + cmd->request_bufflen, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); + /* save dma_handle for pci_unmap_single */ + sp->saved_dma_handle = dma_handle; + + *dword_ptr++ = cpu_to_le32(pci_dma_lo32(dma_handle)); + *dword_ptr++ = cpu_to_le32(pci_dma_hi32(dma_handle)); + *dword_ptr = (uint32_t) cmd->request_bufflen; + DEBUG(sprintf(debug_buff, + "No S/G map_single saved_dma_handle=%lx\n\r",dma_handle)); + DEBUG(qla1280_print(debug_buff)); #ifdef QL_DEBUG_LEVEL_5 qla1280_print( "qla1280_64bit_start_scsi: No scatter/gather command packet data - c"); @@ -4070,12 +4179,12 @@ #endif } } -#ifdef QL_DEBUG_LEVEL_5 - else /* No data transfer */ + else /* No data transfer */ { *dword_ptr++ = (uint32_t) 0; *dword_ptr++ = (uint32_t) 0; *dword_ptr = (uint32_t) 0; +#ifdef QL_DEBUG_LEVEL_5 qla1280_print( "qla1280_64bit_start_scsi: No data, command packet data - c"); qla1280_print(" b "); @@ -4086,8 +4195,8 @@ qla1280_output_number((uint32_t)SCSI_LUN_32(cmd), 10); qla1280_print("\n\r"); qla1280_dump_buffer((caddr_t)pkt, REQUEST_ENTRY_SIZE); - } #endif + } /* Adjust ring index. */ ha->req_ring_index++; if (ha->req_ring_index == REQUEST_ENTRY_CNT) @@ -4139,7 +4248,7 @@ #endif return(status); } -#endif /* QLA1280_64BIT_SUPPORT */ +#endif /* * qla1280_32bit_start_scsi @@ -4174,8 +4283,15 @@ uint8_t *data_ptr; uint32_t *dword_ptr; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) + dma_addr_t dma_handle; +#endif + ENTER("qla1280_32bit_start_scsi"); + DEBUG(sprintf(debug_buff, + "32bit_start: cmd=%x sp=%x CDB=%x\n\r",cmd,sp,cmd->cmnd[0]);) + DEBUG(qla1280_print(debug_buff)); if( qla1280_check_for_dead_scsi_bus(ha, sp) ) { @@ -4192,8 +4308,15 @@ * differences and the kernel SG list uses virtual addresses where * we need physical addresses. */ - seg_cnt = cmd->use_sg; sg = (struct scatterlist *) cmd->request_buffer; + /* 3.13 32 bit */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) + seg_cnt = cmd->use_sg; +#else + seg_cnt = pci_map_sg(ha->pdev,sg,cmd->use_sg, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); +#endif + /* * if greater than four sg entries then we need to allocate * continuation entries @@ -4204,17 +4327,22 @@ if ((uint16_t)(seg_cnt - 4) % 7) req_cnt++; } - DEBUG(sprintf(debug_buff,"S/G for data transfer -num segs(%d), req blk cnt(%d)\n\r",seg_cnt,req_cnt)); + DEBUG(sprintf(debug_buff, + "S/G Transfer cmd=%x seg_cnt=0x%x, req_cnt=%x\n\r", + cmd,seg_cnt,req_cnt)); DEBUG(qla1280_print(debug_buff)); } else if (cmd->request_bufflen) /* If data transfer. */ { - DEBUG(printk("Single data transfer (0x%x)\n",cmd->request_bufflen)); + DEBUG(sprintf(debug_buff, + "No S/G transfer t=%x cmd=%x len=%x CDB=%x\n\r", + SCSI_TCN_32(cmd),cmd,cmd->request_bufflen,cmd->cmnd[0])); + DEBUG(qla1280_print(debug_buff)); seg_cnt = 1; } else { - DEBUG(printk("No data transfer \n")); + //DEBUG(printk("No data transfer \n")); seg_cnt = 0; } @@ -4231,7 +4359,8 @@ ha->req_q_cnt = REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt); } - DEBUG(sprintf(debug_buff,"Number of free entries = (%d)\n\r",ha->req_q_cnt)); + DEBUG(sprintf(debug_buff,"Number of free entries=(%d) seg_cnt=0x%x\n\r", + ha->req_q_cnt,seg_cnt)); DEBUG(qla1280_print(debug_buff)); /* If room for request in request ring. */ if ((uint16_t)(req_cnt + 2) < ha->req_q_cnt) @@ -4279,20 +4408,15 @@ data_ptr = (uint8_t *) &(CMD_CDBP(cmd)); for (cnt = 0; cnt < pkt->cdb_len; cnt++) pkt->scsi_cdb[cnt] = *data_ptr++; - DEBUG(printk("Build packet for command[0]=0x%x\n",pkt->scsi_cdb[0])); + //DEBUG(printk("Build packet for command[0]=0x%x\n",pkt->scsi_cdb[0])); /* * Load data segments. */ if (seg_cnt) { - DEBUG(printk("loading data segments..\n")); /* Set transfer direction (READ and WRITE) */ /* Linux doesn't tell us */ - /* - * 3/10 dg - Normally, we should need this check with our F/W - * but because of a small issue with it we do. - * * For block devices, cmd->request.cmd has the operation * For character devices, this isn't always set properly, so * we need to check data_cmnd[0]. This catches the conditions @@ -4318,15 +4442,32 @@ /* Load command entry data segments. */ for (cnt = 0; cnt < 4 && seg_cnt; cnt++, seg_cnt--) { + /* 3.13 32 bit */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) *dword_ptr++ = (uint32_t) cpu_to_le32(VIRT_TO_BUS(sg->address)); *dword_ptr++ = sg->length; - DEBUG(sprintf(debug_buff,"SG Segment ap=0x%p, len=0x%x\n\r",sg->address,sg->length)); + DEBUG(sprintf(debug_buff, + "S/G Segment phys_addr=0x%x, len=0x%x\n\r", + cpu_to_le32(VIRT_TO_BUS(sg->address)),sg->length)); + DEBUG(qla1280_print(debug_buff)); +#else + *dword_ptr++ = cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))); + *dword_ptr++ = cpu_to_le32(sg_dma_len(sg)); + DEBUG(sprintf(debug_buff, + "S/G Segment phys_addr=0x%x, len=0x%x\n\r", + cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))), + cpu_to_le32(sg_dma_len(sg)));) DEBUG(qla1280_print(debug_buff)); +#endif sg++; } /* * Build continuation packets. */ + DEBUG(sprintf(debug_buff, + "S/G Building Continuation...seg_cnt=0x%x remains\n\r", + seg_cnt);) + DEBUG(qla1280_print(debug_buff)); while (seg_cnt > 0) { /* Adjust ring index. */ @@ -4361,9 +4502,25 @@ /* Load continuation entry data segments. */ for (cnt = 0; cnt < 7 && seg_cnt; cnt++, seg_cnt--) { - *dword_ptr++ = (u_int) cpu_to_le32(VIRT_TO_BUS(sg->address)); - *dword_ptr++ = sg->length; - sg++; + /* 3.13 32 bit */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) + *dword_ptr++ = (u_int) cpu_to_le32(VIRT_TO_BUS(sg->address)); + *dword_ptr++ = sg->length; + DEBUG(sprintf(debug_buff, + "S/G Segment Cont. phys_addr=0x%x, len=0x%x\n\r", + cpu_to_le32(pci_dma_lo32(VIRT_TO_BUS(sg->address))), + sg->length);) + DEBUG(qla1280_print(debug_buff)); +#else + *dword_ptr++ = cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))); + *dword_ptr++ = cpu_to_le32(sg_dma_len(sg)); + DEBUG(sprintf(debug_buff, + "S/G Segment Cont. phys_addr=0x%x, len=0x%x\n\r", + cpu_to_le32(pci_dma_lo32(sg_dma_address(sg))), + cpu_to_le32(sg_dma_len(sg)));) + DEBUG(qla1280_print(debug_buff)); +#endif + sg++; } #ifdef QL_DEBUG_LEVEL_5 qla1280_print( @@ -4378,14 +4535,28 @@ #endif } } - else /* No scatter gather data transfer */ + else /* No S/G data transfer */ { + /* 3.13 32 bit */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) *dword_ptr++ = (uint32_t) cpu_to_le32(VIRT_TO_BUS(cmd->request_buffer)); *dword_ptr = (uint32_t) cmd->request_bufflen; - DEBUG(printk("Single Segment ap=0x%p, len=0x%x\n",cmd->request_buffer,cmd->request_bufflen)); +#else + dma_handle = pci_map_single(ha->pdev, + cmd->request_buffer, + cmd->request_bufflen, + scsi_to_pci_dma_dir(cmd->sc_data_direction)); + sp->saved_dma_handle = dma_handle; + + *dword_ptr++ = cpu_to_le32(pci_dma_lo32(dma_handle)); + *dword_ptr = (uint32_t) cmd->request_bufflen; + DEBUG(sprintf(debug_buff, + "No S/G map_single saved_dma_handle=%lx\n\r",dma_handle)); + DEBUG(qla1280_print(debug_buff)); +#endif } } - else /* No data transfer */ + else /* No data transfer at all */ { *dword_ptr++ = (uint32_t) 0; *dword_ptr = (uint32_t) 0; @@ -4413,7 +4584,6 @@ /* Set chip new ring index. */ DEBUG(qla1280_print("qla1280_32bit_start_scsi: Wakeup RISC for pending command\n\r")); ha->qthreads--; - sp->u_start = jiffies; sp->flags |= SRB_SENT; ha->actthreads++; /* qla1280_output_number((uint32_t)ha->actthreads++, 16); */ @@ -4424,7 +4594,7 @@ status = 1; #ifdef QL_DEBUG_LEVEL_2 qla1280_print( - "qla1280_32bit_start_scsi: NO ROOM IN OUTSTANDING ARRAY\n\r"); + "qla1280_32bit_start_scsi: NO ROOM IN OUTSTANDING ARRAY\n\r"); qla1280_print(" req_q_cnt="); qla1280_output_number((uint32_t)ha->req_q_cnt, 16); qla1280_print("\n\r"); @@ -4458,6 +4628,7 @@ return(status); } + /* * qla1280_req_pkt * Function is responsible for locking ring and @@ -4888,7 +5059,7 @@ { device_reg_t *reg = ha->iobase; response_t *pkt; - srb_t *sp; + srb_t *sp = 0; uint16_t mailbox[MAILBOX_REGISTER_COUNT]; uint16_t *wptr; uint32_t index; @@ -4902,9 +5073,11 @@ /* Check for mailbox interrupt. */ mailbox[0] = RD_REG_WORD(®->semaphore); + if (mailbox[0] & BIT_0) { /* Get mailbox data. */ + //DEBUG(qla1280_print("qla1280_isr: In Get mailbox data \n\r");) wptr = &mailbox[0]; *wptr++ = RD_REG_WORD(®->mailbox0); @@ -4937,7 +5110,7 @@ { case MBA_SCSI_COMPLETION: /* Response completion */ #ifdef QL_DEBUG_LEVEL_5 - qla1280_print("qla1280_isr: mailbox response completion\n\r"); + qla1280_print("qla1280_isr: mailbox SCSI response completion\n\r"); #endif if (ha->flags.online) { @@ -4966,9 +5139,11 @@ else (*done_q_last)->s_next = sp; *done_q_last = sp; + } else { + #ifdef QL_DEBUG_LEVEL_2 qla1280_print("qla1280_isr: ISP invalid handle\n\r"); #endif @@ -5040,6 +5215,7 @@ #endif break; default: + //DEBUG(qla1280_print("qla1280_isr: default case of switch MB \n\r");) if (mailbox[0] < MBA_ASYNC_EVENT) { wptr = &mailbox[0]; @@ -5056,9 +5232,9 @@ break; } } - else + else { WRT_REG_WORD(®->host_cmd, HC_CLR_RISC_INT); - + } /* * Response ring */ @@ -5122,6 +5298,7 @@ qla1280_error_entry(ha, pkt, done_q_first, done_q_last); + /* Adjust ring index. */ ha->rsp_ring_index++; if (ha->rsp_ring_index == RESPONSE_ENTRY_CNT) @@ -5305,9 +5482,12 @@ } pkt->scsi_status = S_CKCON; pkt->option_flags |= (uint32_t)OF_SSTS | (uint32_t)OF_NO_DATA; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) if (ha->flags.enable_64bit_addressing) qla1280_64bit_continue_io(ha, pkt, 0, 0); else +#endif qla1280_32bit_continue_io(ha, pkt, 0, 0); break; case 0x16: /* Requested Capability Not Available */ @@ -5666,10 +5846,12 @@ (uint32_t)OF_NO_DATA; break; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) if (ha->flags.enable_64bit_addressing) - qla1280_64bit_continue_io(ha, pkt, len, (paddr32_t *)&phy_addr); + qla1280_64bit_continue_io(ha, pkt, len, (paddr32_t *)&phy_addr); else - qla1280_32bit_continue_io(ha, pkt, len, (paddr32_t *)&phy_addr); +#endif + qla1280_32bit_continue_io(ha, pkt, len, (paddr32_t *)&phy_addr); break; default: break; @@ -5743,11 +5925,13 @@ ha->outstanding_cmds[pkt->handle] = 0; cp = sp->cmd; + /* Generate LU queue on cntrl, target, LUN */ b = SCSI_BUS_32(cp); t = SCSI_TCN_32(cp); l = SCSI_LUN_32(cp); q = LU_Q(ha, b, t, l); + if( pkt->comp_status || pkt->scsi_status ) { DEBUG(qla1280_print( "scsi: comp_status = ");) @@ -5878,7 +6062,7 @@ /* Place command on done queue. */ qla1280_done_q_put(sp, done_q_first, done_q_last); } -#if QLA1280_64BIT_SUPPORT +#if BITS_PER_LONG > 32 else if (pkt->entry_type == COMMAND_A64_TYPE) { #ifdef QL_DEBUG_LEVEL_2 @@ -5955,7 +6139,6 @@ sp->timeout += 2; */ /* Place request back on top of device queue. */ - /* sp->flags &= ~(SRB_SENT | SRB_TIMEOUT); */ sp->flags = 0; qla1280_putq_t(q, sp); } @@ -6073,7 +6256,7 @@ } } #ifdef QL_DEBUG_LEVEL_3 - qla1280_print("qla1280_restart_queues: exiting normally\n"); + qla1280_print("qla1280_restart_queues: exiting normally\n\r"); #endif } @@ -6276,13 +6459,13 @@ #if MEMORY_MAPPED_IO ret = *port; #else - ret = inb((int)port); + ret = inb((long)port); #endif if (ql_debug_print) { qla1280_print("qla1280_getbyte: address = "); - qla1280_output_number((uint32_t)port, 16); + qla1280_output_number((unsigned long)port, 16); qla1280_print(" data = 0x"); qla1280_output_number((uint32_t)ret, 16); qla1280_print("\n\r"); @@ -6302,13 +6485,13 @@ #if MEMORY_MAPPED_IO ret = *port; #else - ret = inw((int)port); + ret = inw((unsigned long)port); #endif if (ql_debug_print) { qla1280_print("qla1280_getword: address = "); - qla1280_output_number((uint32_t)port, 16); + qla1280_output_number((unsigned long)port, 16); qla1280_print(" data = 0x"); qla1280_output_number((uint32_t)ret, 16); qla1280_print("\n\r"); @@ -6328,13 +6511,13 @@ #if MEMORY_MAPPED_IO ret = *port; #else - ret = inl((int)port); + ret = inl((unsigned long)port); #endif if (ql_debug_print) { qla1280_print("qla1280_getdword: address = "); - qla1280_output_number((uint32_t)port, 16); + qla1280_output_number((unsigned long)port, 16); qla1280_print(" data = 0x"); qla1280_output_number((uint32_t)ret, 16); qla1280_print("\n\r"); @@ -6352,13 +6535,13 @@ #if MEMORY_MAPPED_IO *port = data; #else - outb(data, (int)port); + outb(data, (unsigned long)port); #endif if (ql_debug_print) { qla1280_print("qla1280_putbyte: address = "); - qla1280_output_number((uint32_t)port, 16); + qla1280_output_number((unsigned long)port, 16); qla1280_print(" data = 0x"); qla1280_output_number((uint32_t)data, 16); qla1280_print("\n\r"); @@ -6377,14 +6560,14 @@ #ifdef _LINUX_IOPORTS outw(data, (int)port); #else - outw((int)port, data); + outw((unsigned long)port, data); #endif #endif if (ql_debug_print) { qla1280_print("qla1280_putword: address = "); - qla1280_output_number((uint32_t)port, 16); + qla1280_output_number((unsigned long)port, 16); qla1280_print(" data = 0x"); qla1280_output_number((uint32_t)data, 16); qla1280_print("\n\r"); @@ -6403,14 +6586,14 @@ #ifdef _LINUX_IOPORTS outl(data,(int)port); #else - outl((int)port, data); + outl((unsigned long)port, data); #endif #endif if (ql_debug_print) { qla1280_print("qla1280_putdword: address = "); - qla1280_output_number((uint32_t)port, 16); + qla1280_output_number((unsigned long)port, 16); qla1280_print(" data = 0x"); qla1280_output_number((uint32_t)data, 16); qla1280_print("\n\r"); @@ -6434,8 +6617,7 @@ /* * Out character to COM2 port. - * PORT must be at standard address for COM2 = 0x2F8, - * or COM1 = 0x3F8 + * PORT must be at standard address for COM1 = 0x3f8 */ #define OUTB(addr,data) outb((data),(addr)) @@ -6445,7 +6627,7 @@ #ifdef QL_DEBUG_CONSOLE printk("%c", c); #else - int com_addr = 0x2f8; + int com_addr = 0x3f8; int hardware_flow_control = 1; int software_flow_control = 0; uint8_t data; @@ -6457,7 +6639,7 @@ }while (!(data & BIT_6)); /* - * Set BAUD rate for COM2 to 19200 (0x6) + * Set BAUD rate for COM2 to 9600 (0x6) */ /* Select rate divisor. */ @@ -6653,8 +6835,6 @@ qla1280_print(debug_buff); sprintf(debug_buff," Pid=%d, SP=0x%p\n\r", (int)cmd->pid, CMD_SP(cmd)); qla1280_print(debug_buff); - sprintf(debug_buff," r_start=0x%lx, u_start=0x%lx\n\r",sp->r_start,sp->u_start); - qla1280_print(debug_buff); sprintf(debug_buff," underflow size = 0x%x, direction=0x%x, req.cmd=0x%x \n\r", cmd->underflow, sp->dir,cmd->request.cmd); qla1280_print(debug_buff); } @@ -6682,23 +6862,6 @@ } #endif -#ifdef QLA1280_UNUSED -/************************************************************************** - * ql1280_dump_regs - * - **************************************************************************/ -static void qla1280_dump_regs(struct Scsi_Host *host) -{ - printk("Mailbox registers:\n"); - printk("qla1280 : mbox 0 0x%04x \n", inw(host->io_port + 0x70)); - printk("qla1280 : mbox 1 0x%04x \n", inw(host->io_port + 0x72)); - printk("qla1280 : mbox 2 0x%04x \n", inw(host->io_port + 0x74)); - printk("qla1280 : mbox 3 0x%04x \n", inw(host->io_port + 0x76)); - printk("qla1280 : mbox 4 0x%04x \n", inw(host->io_port + 0x78)); - printk("qla1280 : mbox 5 0x%04x \n", inw(host->io_port + 0x7a)); -} -#endif - #if STOP_ON_ERROR @@ -6725,9 +6888,6 @@ printk("HA flags =0x%lx\n", *fp); DEBUG2(ql_debug_print = 1;) /* DEBUG2(ql1280_dump_device((scsi_qla_host_t *) host->hostdata)); */ -#ifdef QLA1280_UNUSED - qla1280_dump_regs(host); -#endif sti(); panic("Ooops"); /* cli(); @@ -6740,11 +6900,6 @@ } #endif -#ifdef QLA1280_UNUSED -static void qla1280_set_flags(char * s) -{ -} -#endif /************************************************************************** * qla1280_setup @@ -6758,24 +6913,6 @@ { char *end, *str, *cp; -#ifdef QLA1280_UNUSED - static struct - { - const char *name; - int siz; - void (*func)(); - int arg; - } options[] = - { - { "dump_regs", 9, &qla1280_dump_regs, 0 - }, - { "verbose", 7, &qla1280_set_flags, 0x1 - }, - { "", 0, NULL, 0 - } - }; -#endif - printk("scsi: Processing Option str = %s\n", s); end = strchr(s, '\0'); /* locate command */ @@ -6824,4 +6961,3 @@ * tab-width: 8 * End: */ - diff -urN linux-2.4.0-test9/drivers/scsi/qla1280.h linux-2.4.0-test9-lia/drivers/scsi/qla1280.h --- linux-2.4.0-test9/drivers/scsi/qla1280.h Fri Jul 14 17:24:15 2000 +++ linux-2.4.0-test9-lia/drivers/scsi/qla1280.h Wed Oct 4 21:43:38 2000 @@ -1,169 +1,35 @@ -/************************************************************************* - * QLOGIC LINUX SOFTWARE - * - * QLogic ISP1x80/1x160 device driver for Linux 2.3.x (redhat 6.x). - * - * COPYRIGHT (C) 1996-2000 QLOGIC CORPORATION - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the Qlogic's Linux Software License. - * - * This program is WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistribution's or source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - *****************************************************************************/ - -/************************************************************************************* - QLOGIC CORPORATION SOFTWARE - "GNU" GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION - AND MODIFICATION - -This GNU General Public License ("License") applies solely to QLogic Linux -Software ("Software") and may be distributed under the terms of this License. - -1. You may copy and distribute verbatim copies of the Software's source code as -you receive it, in any medium, provided that you conspicuously and appropriately -publish on each copy an appropriate copyright notice and disclaimer of warranty; -keep intact all the notices that refer to this License and to the absence of any -warranty; and give any other recipients of the Software a copy of this License along -with the Software. - -You may charge a fee for the physical act of transferring a copy, and you may at your -option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Software or any portion of it, thus forming -a work based on the Software, and copy and distribute such modifications or work under -the terms of Section 1 above, provided that you also meet all of these conditions: - -* a) You must cause the modified files to carry prominent notices stating that you -changed the files and the date of any change. - -* b) You must cause any work that you distribute or publish that in whole or in part -contains or is derived from the Software or any part thereof, to be licensed as a -whole at no charge to all third parties under the terms of this License. - -* c) If the modified Software normally reads commands interactively when run, you -must cause it, when started running for such interactive use in the most ordinary way, -to print or display an announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide a warranty) and that -users may redistribute the Software under these conditions, and telling the user how to -view a copy of this License. (Exception:if the Software itself is interactive but does -not normally print such an announcement, your work based on the Software is not required -to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable sections of -that work are not derived from the Software, and can be reasonably considered independent -and separate works in themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you distribute the same -sections as part of a whole which is a work based on the Software, the distribution of the -whole must be on the terms of this License, whose permissions for other licensees extend -to the entire whole, and thus to each and every part regardless of who wrote it. - -3. You may copy and distribute the Software (or a work based on it, under Section 2) in -object code or executable form under the terms of Sections 1 and 2 above provided that -you also do one of the following: - -* a) Accompany it with the complete corresponding machine-readable source code, which must -be distributed under the terms of Sections 1 and 2 above on a medium customarily used for -software interchange; or, - -* b) Accompany it with a written offer, valid for at least three years, to give any third -party, for a charge no more than your cost of physically performing source distribution, -a complete machine-readable copy of the corresponding source code, to be distributed under -the terms of Sections 1 and 2 above on a medium customarily used for software interchange; -or, - -* c) Accompany it with the information you received as to the offer to distribute -corresponding source code. (This alternative is allowed only for noncommercial distribution -and only if you received the Software in object code or executable form with such an offer, -in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making modifications -to it. For an executable work, complete source code means all the source code for all -modules it contains, plus any associated interface definition files, plus the scripts used -to control compilation and installation of the executable. - -If distribution of executable or object code is made by offering access to copy from a -designated place, then offering equivalent access to copy the source code from the same -place counts as distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Software except as expressly -provided under this License. Any attempt otherwise to copy, modify, sublicense or -distribute the Software is void, and will automatically terminate your rights under this -License. However, parties who have received copies, or rights, from you under this License -will not have their licenses terminated so long as such parties remain in full compliance. - -5. This license grants you world wide, royalty free non-exclusive rights to modify or -distribute the Software or its derivative works. These actions are prohibited by law -if you do not accept this License. Therefore, by modifying or distributing the Software -(or any work based on the Software), you indicate your acceptance of this License to do -so, and all its terms and conditions for copying, distributing or modifying the Software -or works based on it. - -6. Each time you redistribute the Software (or any work based on the Software), the -recipient automatically receives a license from the original licensor to copy, distribute -or modify the Software subject to these terms and conditions. You may not impose any -further restrictions on the recipients' exercise of the rights granted herein. You are -not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for -any other reason (not limited to patent issues), conditions are imposed on you -(whether by court order, agreement or otherwise) that contradict the conditions of this -License, they do not excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this License -and any other pertinent obligations, then as a consequence you may not distribute the -Software at all. - -If any portion of this section is held invalid or unenforceable under any particular -circumstance, the balance of the section is intended to apply and the section as a whole -is intended to apply in other circumstances. -NO WARRANTY - -11. THE SOFTWARE IS PROVIDED WITHOUT A WARRANTY OF ANY KIND. THERE IS NO -WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, -EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE -ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. -SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL -NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE SOFTWARE AS PERMITTED ABOVE, BE LIABLE TO YOU FOR -DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL -DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING -BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR -LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO -OPERATE WITH ANY OTHER SOFTWARES), EVEN IF SUCH HOLDER OR OTHER PARTY HAS -BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -END OF TERMS AND CONDITIONS +/******************************************************************************** +* QLOGIC LINUX SOFTWARE +* +* QLogic ISP1280 (Ultra2) /12160 (Ultra3) SCSI driver +* Copyright (C) 2000 Qlogic Corporation +* (www.qlogic.com) +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2, 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. +** +******************************************************************************/ -*************************************************************************************/ - - #ifndef _IO_HBA_QLA1280_H /* wrapper symbol for kernel use */ #define _IO_HBA_QLA1280_H /* subject to change without notice */ + +#ifndef LINUX_VERSION_CODE +#include +#endif /* LINUX_VERSION_CODE not defined */ + #if defined(__cplusplus) extern "C" { #endif -#include - +#ifndef HOSTS_C /* included in hosts.c */ /* * Enable define statement to ignore Data Underrun Errors, * remove define statement to enable detection. @@ -173,15 +39,18 @@ /* * Driver debug definitions. */ -/* #define QL_DEBUG_LEVEL_1 */ /* Output register accesses to COM2. */ -/* #define QL_DEBUG_LEVEL_2 */ /* Output error msgs to COM2. */ -/* #define QL_DEBUG_LEVEL_3 */ /* Output function trace msgs to COM2. */ -/* #define QL_DEBUG_LEVEL_4 */ /* Output NVRAM trace msgs to COM2. */ -/* #define QL_DEBUG_LEVEL_5 */ /* Output ring trace msgs to COM2. */ -/* #define QL_DEBUG_LEVEL_6 */ /* Output WATCHDOG timer trace to COM2. */ -/* #define QL_DEBUG_LEVEL_7 */ /* Output RISC load trace msgs to COM2. */ +/* #define QL_DEBUG_LEVEL_1 */ /* Output register accesses to COM1 */ +/* #define QL_DEBUG_LEVEL_2 */ /* Output error msgs to COM1 */ +/* #define QL_DEBUG_LEVEL_3 */ /* Output function trace msgs to COM1 */ +/* #define QL_DEBUG_LEVEL_4 */ /* Output NVRAM trace msgs to COM1 */ +/* #define QL_DEBUG_LEVEL_5 */ /* Output ring trace msgs to COM1 */ +/* #define QL_DEBUG_LEVEL_6 */ /* Output WATCHDOG timer trace to COM1 */ +/* #define QL_DEBUG_LEVEL_7 */ /* Output RISC load trace msgs to COM1 */ + + #define QL_DEBUG_CONSOLE /* Output to console instead of COM1 */ + /* comment this #define to get output of qla1280_print to COM1 */ + /* if COM1 is not connected to a host system, the driver hangs system! */ -#define QL_DEBUG_CONSOLE /* Output to console instead of COM2. */ #ifndef TRUE # define TRUE 1 @@ -206,7 +75,11 @@ * Locking */ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,0) -# include +# if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,18) +# include +# else +# include +# endif # include # define cpuid smp_processor_id() # if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,95) @@ -314,12 +187,12 @@ #define WRT_REG_DWORD(addr, data) qla1280_putdword((uint32_t *)addr, data) #else /* QL_DEBUG_LEVEL_1 */ #ifdef MEMORY_MAPPED_IO - #define RD_REG_BYTE(addr) readb((unsigned long) (addr) - #define RD_REG_WORD(addr) readw((unsigned long) (addr) - #define RD_REG_DWORD(addr) readl((unsigned long) (addr) - #define WRT_REG_BYTE(addr, data) writeb((data), (unsigned long) (addr)) - #define WRT_REG_WORD(addr, data) writew((data), (unsigned long) (addr)) - #define WRT_REG_DWORD(addr, data) writel((data), (unsigned long) (addr)) + #define RD_REG_BYTE(addr) (*((volatile uint8_t *)addr)) + #define RD_REG_WORD(addr) (*((volatile uint16_t *)addr)) + #define RD_REG_DWORD(addr) (*((volatile uint32_t *)addr)) + #define WRT_REG_BYTE(addr, data) (*((volatile uint8_t *)addr) = data) + #define WRT_REG_WORD(addr, data) (*((volatile uint16_t *)addr) = data) + #define WRT_REG_DWORD(addr, data) (*((volatile uint32_t *)addr) = data) #else /* MEMORY_MAPPED_IO */ #define RD_REG_BYTE(addr) (inb((unsigned long)addr)) #define RD_REG_WORD(addr) (inw((unsigned long)addr)) @@ -374,7 +247,8 @@ typedef struct timer_list timer_t; /* timer */ /* - * SCSI Request Block structure + * SCSI Request Block structure (sp) that is placed + * on cmd->SCp location of every I/O */ typedef struct srb { @@ -383,10 +257,11 @@ struct srb *s_prev; /* (4) Previous block on LU queue */ uint8_t flags; /* (1) Status flags. */ uint8_t dir; /* direction of transfer */ - uint8_t unused[2]; - u_long r_start; /* jiffies at start of request */ - u_long u_start; /* jiffies when sent to F/W */ -}srb_t; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,18) + dma_addr_t saved_dma_handle; /* for unmap of single transfers */ +#endif + +} srb_t; /* * SRB flag definitions @@ -1564,22 +1439,35 @@ request_t req[REQUEST_ENTRY_CNT+1]; response_t res[RESPONSE_ENTRY_CNT+1]; - unsigned long request_dma; /* Physical address. */ +#if BITS_PER_LONG > 32 + dma_addr_t request_dma; /* Physical Address */ +#else + uint32_t request_dma; /* Physical address. */ +#endif request_t *request_ring; /* Base virtual address */ request_t *request_ring_ptr; /* Current address. */ uint16_t req_ring_index; /* Current index. */ uint16_t req_q_cnt; /* Number of available entries. */ - unsigned long response_dma; /* Physical address. */ +#if BITS_PER_LONG > 32 + dma_addr_t response_dma; /* Physical address. */ +#else + uint32_t response_dma; /* Physical address. */ +#endif response_t *response_ring; /* Base virtual address */ response_t *response_ring_ptr; /* Current address. */ uint16_t rsp_ring_index; /* Current index. */ #if QL1280_TARGET_MODE_SUPPORT /* Target buffer and sense data. */ +#if BITS_PER_LONG > 32 + dma_addr_t tbuf_dma; /* Physical address. */ + dma_addr_t tsense_dma; /* Physical address. */ +#else uint32_t tbuf_dma; /* Physical address. */ - tgt_t *tbuf; uint32_t tsense_dma; /* Physical address. */ +#endif + tgt_t *tbuf; uint8_t *tsense; #endif @@ -1616,8 +1504,13 @@ uint32_t dpc :1; /* 15 */ uint32_t dpc_sched :1; /* 16 */ uint32_t interrupts_on :1; /* 17 */ + uint32_t bios_enabled :1; /* 18 */ }flags; + /* needed holders for PCI ordered list of hosts */ + unsigned long io_port; + uint32_t irq; + }scsi_qla_host_t; /* @@ -1646,6 +1539,8 @@ #define QLA1280_RING_LOCK(ha) #define QLA1280_RING_UNLOCK(ha) +#endif /* HOSTS_C */ + #if defined(__cplusplus) } #endif @@ -1663,49 +1558,20 @@ int qla1280_biosparam(Disk *, kdev_t, int[]); void qla1280_intr_handler(int, void *, struct pt_regs *); void qla1280_setup(char *s, int *dummy); -#if defined(__386__) + # define QLA1280_BIOSPARAM qla1280_biosparam -#else -# define QLA1280_BIOSPARAM NULL -#endif /* * Scsi_Host_template (see hosts.h) * Device driver Interfaces to mid-level SCSI driver. */ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,95) -/* This interface is now obsolete !!! */ -#define QLA1280_LINUX_TEMPLATE { \ - next: NULL, \ - usage_count: NULL, \ - proc_dir: NULL, \ - proc_info: NULL, \ - name: "Qlogic ISP 1280", \ - detect: qla1280_detect, \ - release: qla1280_release, \ - info: qla1280_info, \ - command: NULL, \ - queuecommand: qla1280_queuecommand, \ - abort: qla1280_abort, \ - reset: qla1280_reset, \ - slave_attach: NULL, \ - bios_param: QLA1280_BIOSPARAM, \ - can_queue: 255, /* MAX_OUTSTANDING_COMMANDS */ \ - this_id: -1, /* scsi id of host adapter */ \ - sg_tablesize: SG_ALL, \ - cmd_per_lun: 3, /* max commands per lun */ \ - present: 0, /* number of 1280s present */ \ - unchecked_isa_dma: 0, /* no memeory DMA restrictions */ \ - use_clustering: ENABLE_CLUSTERING \ -} -#else -#define QLA1280_LINUX_TEMPLATE { \ +#define QLA1280_LINUX_TEMPLATE { \ next: NULL, \ module: NULL, \ proc_dir: NULL, \ proc_info: qla1280_proc_info, \ - name: "Qlogic ISP 1280\1080", \ + name: "Qlogic ISP 1280\12160", \ detect: qla1280_detect, \ release: qla1280_release, \ info: qla1280_info, \ @@ -1725,13 +1591,14 @@ this_id: -1, /* scsi id of host adapter */\ sg_tablesize: SG_ALL, /* max scatter-gather cmds */\ cmd_per_lun: 3, /* cmds per lun (linked cmds) */\ - present: 0, /* number of 7xxx's present */\ + present: 0, /* number of 1280's present */\ unchecked_isa_dma: 0, /* no memory DMA restrictions */\ use_clustering: ENABLE_CLUSTERING, \ use_new_eh_code: 0, \ emulated: 0 \ } -#endif + #endif /* _IO_HBA_QLA1280_H */ + diff -urN linux-2.4.0-test9/drivers/scsi/simscsi.c linux-2.4.0-test9-lia/drivers/scsi/simscsi.c --- linux-2.4.0-test9/drivers/scsi/simscsi.c Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/scsi/simscsi.c Wed Oct 4 21:43:52 2000 @@ -0,0 +1,364 @@ +/* + * Simulated SCSI driver. + * + * Copyright (C) 1999 Hewlett-Packard Co + * Copyright (C) 1999 David Mosberger-Tang + * Copyright (C) 1999 Stephane Eranian + * + * 99/12/18 David Mosberger Added support for READ10/WRITE10 needed by linux v2.3.33 + */ +#include +#include +#include +#include +#include + +#include + +#include + +#include "scsi.h" +#include "sd.h" +#include "hosts.h" +#include "simscsi.h" + +#define DEBUG_SIMSCSI 0 + +/* Simulator system calls: */ + +#define SSC_OPEN 50 +#define SSC_CLOSE 51 +#define SSC_READ 52 +#define SSC_WRITE 53 +#define SSC_GET_COMPLETION 54 +#define SSC_WAIT_COMPLETION 55 + +#define SSC_WRITE_ACCESS 2 +#define SSC_READ_ACCESS 1 + +struct timer_list disk_timer; + +struct disk_req { + unsigned long addr; + unsigned len; +}; + +struct disk_stat { + int fd; + unsigned count; +}; + +extern long ia64_ssc (long arg0, long arg1, long arg2, long arg3, int nr); + +static int desc[8] = { -1, -1, -1, -1, -1, -1, -1, -1 }; + +static struct queue_entry { + Scsi_Cmnd *sc; +} queue[SIMSCSI_REQ_QUEUE_LEN]; + +static int rd, wr; +static atomic_t num_reqs = ATOMIC_INIT(0); + +/* base name for default disks */ +static char *simscsi_root = DEFAULT_SIMSCSI_ROOT; + +#define MAX_ROOT_LEN 128 + +/* + * used to setup a new base for disk images + * to use /foo/bar/disk[a-z] as disk images + * you have to specify simscsi=/foo/bar/disk on the command line + */ +static int __init +simscsi_setup (char *s) +{ + /* XXX Fix me we may need to strcpy() ? */ + if (strlen(s) > MAX_ROOT_LEN) { + printk("simscsi_setup: prefix too long---using default %s\n", simscsi_root); + } + simscsi_root = s; + return 1; +} + +__setup("simscsi=", simscsi_setup); + +static void +simscsi_interrupt (unsigned long val) +{ + unsigned long flags; + Scsi_Cmnd *sc; + + spin_lock_irqsave(&io_request_lock, flags); + { + while ((sc = queue[rd].sc) != 0) { + atomic_dec(&num_reqs); + queue[rd].sc = 0; +#if DEBUG_SIMSCSI + printk("simscsi_interrupt: done with %ld\n", sc->serial_number); +#endif + (*sc->scsi_done)(sc); + rd = (rd + 1) % SIMSCSI_REQ_QUEUE_LEN; + } + } + spin_unlock_irqrestore(&io_request_lock, flags); +} + +int +simscsi_detect (Scsi_Host_Template *templ) +{ + templ->proc_name = "simscsi"; + init_timer(&disk_timer); + disk_timer.function = simscsi_interrupt; + return 1; /* fake one SCSI host adapter */ +} + +int +simscsi_release (struct Scsi_Host *host) +{ + return 0; /* this is easy... */ +} + +const char * +simscsi_info (struct Scsi_Host *host) +{ + return "simulated SCSI host adapter"; +} + +int +simscsi_abort (Scsi_Cmnd *cmd) +{ + printk ("simscsi_abort: unimplemented\n"); + return SCSI_ABORT_SUCCESS; +} + +int +simscsi_reset (Scsi_Cmnd *cmd, unsigned int reset_flags) +{ + printk ("simscsi_reset: unimplemented\n"); + return SCSI_RESET_SUCCESS; +} + +int +simscsi_biosparam (Disk *disk, kdev_t n, int ip[]) +{ + int size = disk->capacity; + + ip[0] = 64; + ip[1] = 32; + ip[2] = size >> 11; + return 0; +} + +static void +simscsi_readwrite (Scsi_Cmnd *sc, int mode, unsigned long offset, unsigned long len) +{ + struct disk_stat stat; + struct disk_req req; + + req.addr = __pa(sc->request_buffer); + req.len = len; /* # of bytes to transfer */ + + if (sc->request_bufflen < req.len) + return; + + stat.fd = desc[sc->target]; +#if DEBUG_SIMSCSI + printk("simscsi_%s @ %lx (off %lx)\n", + mode == SSC_READ ? "read":"write", req.addr, offset); +#endif + ia64_ssc(stat.fd, 1, __pa(&req), offset, mode); + ia64_ssc(__pa(&stat), 0, 0, 0, SSC_WAIT_COMPLETION); + + if (stat.count == req.len) { + sc->result = GOOD; + } else { + sc->result = DID_ERROR << 16; + } +} + +static void +simscsi_sg_readwrite (Scsi_Cmnd *sc, int mode, unsigned long offset) +{ + int list_len = sc->use_sg; + struct scatterlist *sl = (struct scatterlist *)sc->buffer; + struct disk_stat stat; + struct disk_req req; + + stat.fd = desc[sc->target]; + + while (list_len) { + req.addr = __pa(sl->address); + req.len = sl->length; +#if DEBUG_SIMSCSI + printk("simscsi_sg_%s @ %lx (off %lx) use_sg=%d len=%d\n", + mode == SSC_READ ? "read":"write", req.addr, offset, list_len, sl->length); +#endif + ia64_ssc(stat.fd, 1, __pa(&req), offset, mode); + ia64_ssc(__pa(&stat), 0, 0, 0, SSC_WAIT_COMPLETION); + + /* should not happen in our case */ + if (stat.count != req.len) { + sc->result = DID_ERROR << 16; + return; + } + offset += sl->length; + sl++; + list_len--; + } + sc->result = GOOD; +} + +/* + * function handling both READ_6/WRITE_6 (non-scatter/gather mode) + * commands. + * Added 02/26/99 S.Eranian + */ +static void +simscsi_readwrite6 (Scsi_Cmnd *sc, int mode) +{ + unsigned long offset; + + offset = (((sc->cmnd[1] & 0x1f) << 16) | (sc->cmnd[2] << 8) | sc->cmnd[3])*512; + if (sc->use_sg > 0) + simscsi_sg_readwrite(sc, mode, offset); + else + simscsi_readwrite(sc, mode, offset, sc->cmnd[4]*512); +} + + +static void +simscsi_readwrite10 (Scsi_Cmnd *sc, int mode) +{ + unsigned long offset; + + offset = ( (sc->cmnd[2] << 24) | (sc->cmnd[3] << 16) + | (sc->cmnd[4] << 8) | (sc->cmnd[5] << 0))*512; + if (sc->use_sg > 0) + simscsi_sg_readwrite(sc, mode, offset); + else + simscsi_readwrite(sc, mode, offset, ((sc->cmnd[7] << 8) | sc->cmnd[8])*512); +} + +int +simscsi_queuecommand (Scsi_Cmnd *sc, void (*done)(Scsi_Cmnd *)) +{ + char fname[MAX_ROOT_LEN+16]; + char *buf; + +#if DEBUG_SIMSCSI + register long sp asm ("sp"); + printk("simscsi_queuecommand: target=%d,cmnd=%u,sc=%lu,sp=%lx,done=%p\n", + sc->target, sc->cmnd[0], sc->serial_number, sp, done); +#endif + + sc->result = DID_BAD_TARGET << 16; + sc->scsi_done = done; + if (sc->target <= 7 && sc->lun == 0) { + switch (sc->cmnd[0]) { + case INQUIRY: + if (sc->request_bufflen < 35) { + break; + } + sprintf (fname, "%s%c", simscsi_root, 'a' + sc->target); + desc[sc->target] = ia64_ssc (__pa(fname), SSC_READ_ACCESS|SSC_WRITE_ACCESS, + 0, 0, SSC_OPEN); + if (desc[sc->target] < 0) { + /* disk doesn't exist... */ + break; + } + buf = sc->request_buffer; + buf[0] = 0; /* magnetic disk */ + buf[1] = 0; /* not a removable medium */ + buf[2] = 2; /* SCSI-2 compliant device */ + buf[3] = 2; /* SCSI-2 response data format */ + buf[4] = 31; /* additional length (bytes) */ + buf[5] = 0; /* reserved */ + buf[6] = 0; /* reserved */ + buf[7] = 0; /* various flags */ + memcpy(buf + 8, "HP SIMULATED DISK 0.00", 28); + sc->result = GOOD; + break; + + case TEST_UNIT_READY: + sc->result = GOOD; + break; + + case READ_6: + if (desc[sc->target] < 0 ) + break; + simscsi_readwrite6(sc, SSC_READ); + break; + + case READ_10: + if (desc[sc->target] < 0 ) + break; + simscsi_readwrite10(sc, SSC_READ); + break; + + case WRITE_6: + if (desc[sc->target] < 0) + break; + simscsi_readwrite6(sc, SSC_WRITE); + break; + + case WRITE_10: + if (desc[sc->target] < 0) + break; + simscsi_readwrite10(sc, SSC_WRITE); + break; + + + case READ_CAPACITY: + if (desc[sc->target] < 0 || sc->request_bufflen < 8) { + break; + } + buf = sc->request_buffer; + + /* pretend to be a 1GB disk (partition table contains real stuff): */ + buf[0] = 0x00; + buf[1] = 0x1f; + buf[2] = 0xff; + buf[3] = 0xff; + /* set block size of 512 bytes: */ + buf[4] = 0; + buf[5] = 0; + buf[6] = 2; + buf[7] = 0; + sc->result = GOOD; + break; + + case MODE_SENSE: + printk("MODE_SENSE\n"); + break; + + case START_STOP: + printk("START_STOP\n"); + break; + + default: + panic("simscsi: unknown SCSI command %u\n", sc->cmnd[0]); + } + } + if (sc->result == DID_BAD_TARGET) { + sc->result |= DRIVER_SENSE << 24; + sc->sense_buffer[0] = 0x70; + sc->sense_buffer[2] = 0x00; + } + if (atomic_read(&num_reqs) >= SIMSCSI_REQ_QUEUE_LEN) { + panic("Attempt to queue command while command is pending!!"); + } + atomic_inc(&num_reqs); + queue[wr].sc = sc; + wr = (wr + 1) % SIMSCSI_REQ_QUEUE_LEN; + + if (!timer_pending(&disk_timer)) { + disk_timer.expires = jiffies + HZ/20; + add_timer(&disk_timer); + } + return 0; +} + + +static Scsi_Host_Template driver_template = SIMSCSI; + +#include "scsi_module.c" diff -urN linux-2.4.0-test9/drivers/scsi/simscsi.h linux-2.4.0-test9-lia/drivers/scsi/simscsi.h --- linux-2.4.0-test9/drivers/scsi/simscsi.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/drivers/scsi/simscsi.h Mon Jul 31 14:01:22 2000 @@ -0,0 +1,39 @@ +/* + * Simulated SCSI driver. + * + * Copyright (C) 1999 Hewlett-Packard Co + * Copyright (C) 1999 David Mosberger-Tang + */ +#ifndef SIMSCSI_H +#define SIMSCSI_H + +#define SIMSCSI_REQ_QUEUE_LEN 64 + +#define DEFAULT_SIMSCSI_ROOT "/var/ski-disks/sd" + +extern int simscsi_detect (Scsi_Host_Template *); +extern int simscsi_release (struct Scsi_Host *); +extern const char *simscsi_info (struct Scsi_Host *); +extern int simscsi_queuecommand (Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); +extern int simscsi_abort (Scsi_Cmnd *); +extern int simscsi_reset (Scsi_Cmnd *, unsigned int); +extern int simscsi_biosparam (Disk *, kdev_t, int[]); + +#define SIMSCSI { \ + detect: simscsi_detect, \ + release: simscsi_release, \ + info: simscsi_info, \ + queuecommand: simscsi_queuecommand, \ + abort: simscsi_abort, \ + reset: simscsi_reset, \ + bios_param: simscsi_biosparam, \ + can_queue: SIMSCSI_REQ_QUEUE_LEN, \ + this_id: -1, \ + sg_tablesize: 32, \ + cmd_per_lun: SIMSCSI_REQ_QUEUE_LEN, \ + present: 0, \ + unchecked_isa_dma: 0, \ + use_clustering: DISABLE_CLUSTERING \ +} + +#endif /* SIMSCSI_H */ diff -urN linux-2.4.0-test9/drivers/usb/uhci.c linux-2.4.0-test9-lia/drivers/usb/uhci.c --- linux-2.4.0-test9/drivers/usb/uhci.c Wed Oct 4 16:53:38 2000 +++ linux-2.4.0-test9-lia/drivers/usb/uhci.c Wed Oct 4 21:24:51 2000 @@ -34,7 +34,7 @@ #include #include #include -#define DEBUG +#undef DEBUG #include #include @@ -69,6 +69,46 @@ /* If a transfer is still active after this much time, turn off FSBR */ #define IDLE_TIMEOUT (HZ / 20) /* 50 ms */ +#ifdef CONFIG_ITANIUM_A1_SPECIFIC + +static struct uhci *guhci; + +void +disable_usb (void) +{ + unsigned short cmd; + unsigned int io_addr; + + if (guhci == NULL) + return; + + io_addr = guhci->io_addr; + + cmd = inw (io_addr + USBCMD); + + outw(cmd & ~ USBCMD_RS, io_addr+USBCMD); + + while ((inw (io_addr + USBSTS) & USBSTS_HCH) == 0); +} + +void +reenable_usb (void) +{ + unsigned int io_addr; + unsigned short cmd; + + if (guhci == NULL) + return; + + io_addr = guhci->io_addr; + + cmd = inw (io_addr + USBCMD); + + outw(cmd | USBCMD_RS, io_addr+USBCMD); +} + +#endif /* CONFIG_ITANIUM_A1_SPECIFIC */ + /* * Only the USB core should call uhci_alloc_dev and uhci_free_dev */ @@ -2361,6 +2401,11 @@ if (!uhci_start_root_hub(uhci)) { struct pm_dev *pmdev; +#ifdef CONFIG_ITANIUM_A1_SPECIFIC + guhci = uhci; + printk("%s: enabling Lion USB workaround io_addr=%x\n", + __FILE__, guhci->io_addr); +#endif pmdev = pm_register(PM_PCI_DEV, PM_PCI_ID(dev), handle_pm_event); diff -urN linux-2.4.0-test9/fs/binfmt_elf.c linux-2.4.0-test9-lia/fs/binfmt_elf.c --- linux-2.4.0-test9/fs/binfmt_elf.c Fri Sep 8 14:34:58 2000 +++ linux-2.4.0-test9-lia/fs/binfmt_elf.c Fri Sep 8 14:35:59 2000 @@ -482,6 +482,20 @@ if (strcmp(elf_interpreter,"/usr/lib/libc.so.1") == 0 || strcmp(elf_interpreter,"/usr/lib/ld.so.1") == 0) ibcs2_interpreter = 1; +#if defined(__ia64__) && !defined(CONFIG_BINFMT_ELF32) + /* + * XXX temporary gross hack until all IA-64 Linux binaries + * use /lib/ld-linux-ia64.so.1 as the linker name. + */ +#define INTRP64 "/lib/ld-linux-ia64.so.1" + if (strcmp(elf_interpreter,"/lib/ld-linux.so.2") == 0) { + kfree(elf_interpreter); + elf_interpreter=(char *)kmalloc(sizeof(INTRP64), GFP_KERNEL); + if (!elf_interpreter) + goto out_free_file; + strcpy(elf_interpreter, INTRP64); + } +#endif /* defined(__ia64__) && !defined(CONFIG_BINFMT_ELF32) */ #if 0 printk("Using ELF interpreter %s\n", elf_interpreter); #endif diff -urN linux-2.4.0-test9/fs/nfsd/nfsfh.c linux-2.4.0-test9-lia/fs/nfsd/nfsfh.c --- linux-2.4.0-test9/fs/nfsd/nfsfh.c Wed Oct 4 16:53:39 2000 +++ linux-2.4.0-test9-lia/fs/nfsd/nfsfh.c Wed Oct 4 21:24:52 2000 @@ -379,7 +379,7 @@ /* It's a directory, or we are required to confirm the file's * location in the tree. */ - dprintk("nfs_fh: need to look harder for %d/%ld\n",sb->s_dev,ino); + dprintk("nfs_fh: need to look harder for %d/%ld\n",sb->s_dev,(long) ino); down(&sb->s_nfsd_free_path_sem); /* claiming the semaphore might have allowed things to get fixed up */ diff -urN linux-2.4.0-test9/fs/proc/generic.c linux-2.4.0-test9-lia/fs/proc/generic.c --- linux-2.4.0-test9/fs/proc/generic.c Wed Oct 4 16:53:39 2000 +++ linux-2.4.0-test9-lia/fs/proc/generic.c Wed Oct 4 21:24:52 2000 @@ -43,7 +43,7 @@ #define MIN(a,b) (((a) < (b)) ? (a) : (b)) #endif -/* 4K page size but our output routines use some slack for overruns */ +/* buffer size is one page but our output routines use some slack for overruns */ #define PROC_BLOCK_SIZE (PAGE_SIZE - 1024) static ssize_t diff -urN linux-2.4.0-test9/fs/readdir.c linux-2.4.0-test9-lia/fs/readdir.c --- linux-2.4.0-test9/fs/readdir.c Thu Aug 24 08:17:46 2000 +++ linux-2.4.0-test9-lia/fs/readdir.c Fri Aug 25 01:11:02 2000 @@ -325,4 +325,3 @@ out: return error; } - diff -urN linux-2.4.0-test9/include/asm-alpha/module.h linux-2.4.0-test9-lia/include/asm-alpha/module.h --- linux-2.4.0-test9/include/asm-alpha/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-alpha/module.h Wed Sep 13 13:48:34 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_ALPHA_MODULE_H +#define _ASM_ALPHA_MODULE_H +/* + * This file contains the alpha architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_ALPHA_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-alpha/pgtable.h linux-2.4.0-test9-lia/include/asm-alpha/pgtable.h --- linux-2.4.0-test9/include/asm-alpha/pgtable.h Thu Aug 10 19:56:31 2000 +++ linux-2.4.0-test9-lia/include/asm-alpha/pgtable.h Wed Sep 13 13:48:41 2000 @@ -300,9 +300,6 @@ #define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define swp_entry_to_pte(x) ((pte_t) { (x).val }) -#define module_map vmalloc -#define module_unmap vfree - /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define PageSkip(page) (0) #define kern_addr_valid(addr) (1) diff -urN linux-2.4.0-test9/include/asm-arm/module.h linux-2.4.0-test9-lia/include/asm-arm/module.h --- linux-2.4.0-test9/include/asm-arm/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-arm/module.h Wed Sep 13 13:48:52 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_ARM_MODULE_H +#define _ASM_ARM_MODULE_H +/* + * This file contains the arm architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_ARM_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-i386/module.h linux-2.4.0-test9-lia/include/asm-i386/module.h --- linux-2.4.0-test9/include/asm-i386/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-i386/module.h Wed Sep 13 13:49:00 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_I386_MODULE_H +#define _ASM_I386_MODULE_H +/* + * This file contains the i386 architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_I386_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-i386/pgtable.h linux-2.4.0-test9-lia/include/asm-i386/pgtable.h --- linux-2.4.0-test9/include/asm-i386/pgtable.h Thu Aug 10 19:56:31 2000 +++ linux-2.4.0-test9-lia/include/asm-i386/pgtable.h Wed Sep 13 13:49:03 2000 @@ -327,9 +327,6 @@ #define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define swp_entry_to_pte(x) ((pte_t) { (x).val }) -#define module_map vmalloc -#define module_unmap vfree - #endif /* !__ASSEMBLY__ */ /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ diff -urN linux-2.4.0-test9/include/asm-ia64/acpi-ext.h linux-2.4.0-test9-lia/include/asm-ia64/acpi-ext.h --- linux-2.4.0-test9/include/asm-ia64/acpi-ext.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/acpi-ext.h Fri Aug 25 01:16:49 2000 @@ -60,7 +60,7 @@ #define LSAPIC_PERFORMANCE_RESTRICTED (1<<1) #define LSAPIC_PRESENT (1<<2) -typedef struct { +typedef struct acpi_entry_lsapic { u8 type; u8 length; u16 acpi_processor_id; diff -urN linux-2.4.0-test9/include/asm-ia64/acpikcfg.h linux-2.4.0-test9-lia/include/asm-ia64/acpikcfg.h --- linux-2.4.0-test9/include/asm-ia64/acpikcfg.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-ia64/acpikcfg.h Wed Oct 4 21:46:27 2000 @@ -0,0 +1,27 @@ +#ifdef CONFIG_ACPI_KERNEL_CONFIG +/* + * acpikcfg.h - ACPI based Kernel Configuration Manager External Interfaces + * + * Copyright (C) 2000 Intel Corp. + * Copyright (C) 2000 J.I. Lee + */ + + +u32 __init acpi_cf_init (void * rsdp); +u32 __init acpi_cf_terminate (void ); + +u32 __init +acpi_cf_get_pci_vectors ( + struct pci_vector_struct **vectors, + int *num_pci_vectors + ); + + +#ifdef CONFIG_ACPI_KERNEL_CONFIG_DEBUG +void __init +acpi_cf_print_pci_vectors ( + struct pci_vector_struct *vectors, + int num_pci_vectors + ); +#endif +#endif /* CONFIG_ACPI_KERNEL_CONFIG */ diff -urN linux-2.4.0-test9/include/asm-ia64/atomic.h linux-2.4.0-test9-lia/include/asm-ia64/atomic.h --- linux-2.4.0-test9/include/asm-ia64/atomic.h Fri Apr 21 15:21:24 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/atomic.h Thu Oct 5 01:38:51 2000 @@ -17,13 +17,6 @@ #include /* - * Make sure gcc doesn't try to be clever and move things around - * on us. We need to use _exactly_ the address the user gave us, - * not some alias that contains the same information. - */ -#define __atomic_fool_gcc(x) (*(volatile struct { int a[100]; } *)x) - -/* * On IA-64, counter must always be volatile to ensure that that the * memory accesses are ordered. */ diff -urN linux-2.4.0-test9/include/asm-ia64/bitops.h linux-2.4.0-test9-lia/include/asm-ia64/bitops.h --- linux-2.4.0-test9/include/asm-ia64/bitops.h Wed Jul 5 22:15:26 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/bitops.h Thu Oct 5 01:38:51 2000 @@ -20,7 +20,7 @@ * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). */ -extern __inline__ void +static __inline__ void set_bit (int nr, volatile void *addr) { __u32 bit, old, new; @@ -36,7 +36,12 @@ } while (cmpxchg_acq(m, old, new) != old); } -extern __inline__ void +/* + * clear_bit() doesn't provide any barrier for the compiler. + */ +#define smp_mb__before_clear_bit() smp_mb() +#define smp_mb__after_clear_bit() smp_mb() +static __inline__ void clear_bit (int nr, volatile void *addr) { __u32 mask, old, new; @@ -52,7 +57,7 @@ } while (cmpxchg_acq(m, old, new) != old); } -extern __inline__ void +static __inline__ void change_bit (int nr, volatile void *addr) { __u32 bit, old, new; @@ -68,7 +73,7 @@ } while (cmpxchg_acq(m, old, new) != old); } -extern __inline__ int +static __inline__ int test_and_set_bit (int nr, volatile void *addr) { __u32 bit, old, new; @@ -85,7 +90,7 @@ return (old & bit) != 0; } -extern __inline__ int +static __inline__ int test_and_clear_bit (int nr, volatile void *addr) { __u32 mask, old, new; @@ -102,7 +107,7 @@ return (old & ~mask) != 0; } -extern __inline__ int +static __inline__ int test_and_change_bit (int nr, volatile void *addr) { __u32 bit, old, new; @@ -119,7 +124,7 @@ return (old & bit) != 0; } -extern __inline__ int +static __inline__ int test_bit (int nr, volatile void *addr) { return 1 & (((const volatile __u32 *) addr)[nr >> 5] >> (nr & 31)); @@ -129,7 +134,7 @@ * ffz = Find First Zero in word. Undefined if no zero exists, * so code should check against ~0UL first.. */ -extern inline unsigned long +static inline unsigned long ffz (unsigned long x) { unsigned long result; @@ -164,7 +169,7 @@ * hweightN: returns the hamming weight (i.e. the number * of bits set) of a N-bit word */ -extern __inline__ unsigned long +static __inline__ unsigned long hweight64 (unsigned long x) { unsigned long result; @@ -181,7 +186,7 @@ /* * Find next zero bit in a bitmap reasonably efficiently.. */ -extern inline int +static inline int find_next_zero_bit (void *addr, unsigned long size, unsigned long offset) { unsigned long *p = ((unsigned long *) addr) + (offset >> 6); diff -urN linux-2.4.0-test9/include/asm-ia64/delay.h linux-2.4.0-test9-lia/include/asm-ia64/delay.h --- linux-2.4.0-test9/include/asm-ia64/delay.h Sun Feb 6 18:42:40 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/delay.h Thu Oct 5 01:38:55 2000 @@ -18,13 +18,13 @@ #include -extern __inline__ void +static __inline__ void ia64_set_itm (unsigned long val) { __asm__ __volatile__("mov cr.itm=%0;; srlz.d;;" :: "r"(val) : "memory"); } -extern __inline__ unsigned long +static __inline__ unsigned long ia64_get_itm (void) { unsigned long result; @@ -33,7 +33,7 @@ return result; } -extern __inline__ void +static __inline__ void ia64_set_itv (unsigned char vector, unsigned char masked) { if (masked > 1) @@ -43,13 +43,13 @@ :: "r"((masked << 16) | vector) : "memory"); } -extern __inline__ void +static __inline__ void ia64_set_itc (unsigned long val) { __asm__ __volatile__("mov ar.itc=%0;; srlz.d;;" :: "r"(val) : "memory"); } -extern __inline__ unsigned long +static __inline__ unsigned long ia64_get_itc (void) { unsigned long result; @@ -58,7 +58,7 @@ return result; } -extern __inline__ void +static __inline__ void __delay (unsigned long loops) { unsigned long saved_ar_lc; @@ -72,7 +72,7 @@ __asm__ __volatile__("mov ar.lc=%0" :: "r"(saved_ar_lc)); } -extern __inline__ void +static __inline__ void udelay (unsigned long usecs) { #ifdef CONFIG_IA64_SOFTSDV_HACKS diff -urN linux-2.4.0-test9/include/asm-ia64/efi.h linux-2.4.0-test9-lia/include/asm-ia64/efi.h --- linux-2.4.0-test9/include/asm-ia64/efi.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/efi.h Thu Oct 5 01:38:52 2000 @@ -219,7 +219,7 @@ efi_reset_system_t *reset_system; } efi; -extern inline int +static inline int efi_guidcmp (efi_guid_t left, efi_guid_t right) { return memcmp(&left, &right, sizeof (efi_guid_t)); diff -urN linux-2.4.0-test9/include/asm-ia64/fcntl.h linux-2.4.0-test9-lia/include/asm-ia64/fcntl.h --- linux-2.4.0-test9/include/asm-ia64/fcntl.h Wed Oct 4 16:53:42 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/fcntl.h Wed Oct 4 21:24:53 2000 @@ -3,8 +3,8 @@ /* * This is mostly compatible with Linux/x86. * - * Copyright (C) 1998, 1999 Hewlett-Packard Co - * Copyright (C) 1998, 1999 David Mosberger-Tang + * Copyright (C) 1998-2000 Hewlett-Packard Co + * Copyright (C) 1998-2000 David Mosberger-Tang */ /* @@ -77,6 +77,10 @@ off_t l_len; pid_t l_pid; }; + +#ifdef __KERNEL__ +# define flock64 flock +#endif #define F_LINUX_SPECIFIC_BASE 1024 #endif /* _ASM_IA64_FCNTL_H */ diff -urN linux-2.4.0-test9/include/asm-ia64/hardirq.h linux-2.4.0-test9-lia/include/asm-ia64/hardirq.h --- linux-2.4.0-test9/include/asm-ia64/hardirq.h Thu Aug 10 19:56:31 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/hardirq.h Thu Oct 5 01:38:51 2000 @@ -39,8 +39,8 @@ # define hardirq_trylock(cpu) (local_irq_count(cpu) == 0) # define hardirq_endlock(cpu) do { } while (0) -# define irq_enter(cpu, irq) (++local_irq_count(cpu)) -# define irq_exit(cpu, irq) (--local_irq_count(cpu)) +# define irq_enter(cpu, irq) (local_irq_count(cpu)++) +# define irq_exit(cpu, irq) (local_irq_count(cpu)--) # define synchronize_irq() barrier() #else @@ -72,7 +72,7 @@ static inline void irq_enter(int cpu, int irq) { - ++local_irq_count(cpu); + local_irq_count(cpu)++; while (test_bit(0,&global_irq_lock)) { /* nothing */; @@ -81,7 +81,7 @@ static inline void irq_exit(int cpu, int irq) { - --local_irq_count(cpu); + local_irq_count(cpu)--; } static inline int hardirq_trylock(int cpu) diff -urN linux-2.4.0-test9/include/asm-ia64/hw_irq.h linux-2.4.0-test9-lia/include/asm-ia64/hw_irq.h --- linux-2.4.0-test9/include/asm-ia64/hw_irq.h Fri Apr 21 15:21:24 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/hw_irq.h Thu Oct 5 01:38:51 2000 @@ -67,17 +67,7 @@ static inline void hw_resend_irq (struct hw_interrupt_type *h, unsigned int vector) { - int my_cpu_id; - -#ifdef CONFIG_SMP - my_cpu_id = smp_processor_id(); -#else - __u64 lid; - - __asm__ ("mov %0=cr.lid" : "=r"(lid)); - my_cpu_id = (lid >> 24) & 0xff; /* extract id (ignore eid) */ -#endif - ipi_send(my_cpu_id, vector, IA64_IPI_DM_INT, 0); + ipi_send(smp_processor_id(), vector, IA64_IPI_DM_INT, 0); } #endif /* _ASM_IA64_HW_IRQ_H */ diff -urN linux-2.4.0-test9/include/asm-ia64/ia32.h linux-2.4.0-test9-lia/include/asm-ia64/ia32.h --- linux-2.4.0-test9/include/asm-ia64/ia32.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/ia32.h Thu Oct 5 01:41:33 2000 @@ -351,6 +351,8 @@ (granularity << IA32_SEG_G) | \ (((base >> 24) & 0xFF) << IA32_SEG_HIGH_BASE)) +#define IA32_IOBASE 0x2000000000000000 /* Virtual addres for I/O space */ + #define IA32_CR0 0x80000001 /* Enable PG and PE bits */ #define IA32_CR4 0 /* No architectural extensions */ diff -urN linux-2.4.0-test9/include/asm-ia64/io.h linux-2.4.0-test9-lia/include/asm-ia64/io.h --- linux-2.4.0-test9/include/asm-ia64/io.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/io.h Thu Oct 5 01:38:51 2000 @@ -63,16 +63,15 @@ */ #define __ia64_mf_a() __asm__ __volatile__ ("mf.a" ::: "memory") -extern inline const unsigned long +static inline const unsigned long __ia64_get_io_port_base (void) { - unsigned long addr; + extern unsigned long ia64_iobase; - __asm__ ("mov %0=ar.k0;;" : "=r"(addr)); - return __IA64_UNCACHED_OFFSET | addr; + return ia64_iobase; } -extern inline void* +static inline void* __ia64_mk_io_addr (unsigned long port) { const unsigned long io_base = __ia64_get_io_port_base(); @@ -100,7 +99,7 @@ * order. --davidm 99/12/07 */ -extern inline unsigned int +static inline unsigned int __inb (unsigned long port) { volatile unsigned char *addr = __ia64_mk_io_addr(port); @@ -111,7 +110,7 @@ return ret; } -extern inline unsigned int +static inline unsigned int __inw (unsigned long port) { volatile unsigned short *addr = __ia64_mk_io_addr(port); @@ -122,7 +121,7 @@ return ret; } -extern inline unsigned int +static inline unsigned int __inl (unsigned long port) { volatile unsigned int *addr = __ia64_mk_io_addr(port); @@ -133,7 +132,7 @@ return ret; } -extern inline void +static inline void __insb (unsigned long port, void *dst, unsigned long count) { volatile unsigned char *addr = __ia64_mk_io_addr(port); @@ -147,7 +146,7 @@ return; } -extern inline void +static inline void __insw (unsigned long port, void *dst, unsigned long count) { volatile unsigned short *addr = __ia64_mk_io_addr(port); @@ -161,7 +160,7 @@ return; } -extern inline void +static inline void __insl (unsigned long port, void *dst, unsigned long count) { volatile unsigned int *addr = __ia64_mk_io_addr(port); @@ -175,7 +174,7 @@ return; } -extern inline void +static inline void __outb (unsigned char val, unsigned long port) { volatile unsigned char *addr = __ia64_mk_io_addr(port); @@ -184,7 +183,7 @@ __ia64_mf_a(); } -extern inline void +static inline void __outw (unsigned short val, unsigned long port) { volatile unsigned short *addr = __ia64_mk_io_addr(port); @@ -193,7 +192,7 @@ __ia64_mf_a(); } -extern inline void +static inline void __outl (unsigned int val, unsigned long port) { volatile unsigned int *addr = __ia64_mk_io_addr(port); @@ -202,7 +201,7 @@ __ia64_mf_a(); } -extern inline void +static inline void __outsb (unsigned long port, const void *src, unsigned long count) { volatile unsigned char *addr = __ia64_mk_io_addr(port); @@ -215,7 +214,7 @@ return; } -extern inline void +static inline void __outsw (unsigned long port, const void *src, unsigned long count) { volatile unsigned short *addr = __ia64_mk_io_addr(port); @@ -228,7 +227,7 @@ return; } -extern inline void +static inline void __outsl (unsigned long port, void *src, unsigned long count) { volatile unsigned int *addr = __ia64_mk_io_addr(port); @@ -257,49 +256,49 @@ /* * The address passed to these functions are ioremap()ped already. */ -extern inline unsigned char +static inline unsigned char __readb (void *addr) { return *(volatile unsigned char *)addr; } -extern inline unsigned short +static inline unsigned short __readw (void *addr) { return *(volatile unsigned short *)addr; } -extern inline unsigned int +static inline unsigned int __readl (void *addr) { return *(volatile unsigned int *) addr; } -extern inline unsigned long +static inline unsigned long __readq (void *addr) { return *(volatile unsigned long *) addr; } -extern inline void +static inline void __writeb (unsigned char val, void *addr) { *(volatile unsigned char *) addr = val; } -extern inline void +static inline void __writew (unsigned short val, void *addr) { *(volatile unsigned short *) addr = val; } -extern inline void +static inline void __writel (unsigned int val, void *addr) { *(volatile unsigned int *) addr = val; } -extern inline void +static inline void __writeq (unsigned long val, void *addr) { *(volatile unsigned long *) addr = val; diff -urN linux-2.4.0-test9/include/asm-ia64/mmu_context.h linux-2.4.0-test9-lia/include/asm-ia64/mmu_context.h --- linux-2.4.0-test9/include/asm-ia64/mmu_context.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/mmu_context.h Thu Oct 5 01:38:51 2000 @@ -57,7 +57,7 @@ { } -extern inline unsigned long +static inline unsigned long ia64_rid (unsigned long context, unsigned long region_addr) { # ifdef CONFIG_IA64_TLB_CHECKS_REGION_NUMBER @@ -67,7 +67,7 @@ # endif } -extern inline void +static inline void get_new_mmu_context (struct mm_struct *mm) { spin_lock(&ia64_ctx.lock); @@ -80,7 +80,7 @@ } -extern inline void +static inline void get_mmu_context (struct mm_struct *mm) { /* check if our ASN is of an older generation and thus invalid: */ @@ -88,20 +88,20 @@ get_new_mmu_context(mm); } -extern inline int +static inline int init_new_context (struct task_struct *p, struct mm_struct *mm) { mm->context = 0; return 0; } -extern inline void +static inline void destroy_context (struct mm_struct *mm) { /* Nothing to do. */ } -extern inline void +static inline void reload_context (struct mm_struct *mm) { unsigned long rid; diff -urN linux-2.4.0-test9/include/asm-ia64/module.h linux-2.4.0-test9-lia/include/asm-ia64/module.h --- linux-2.4.0-test9/include/asm-ia64/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-ia64/module.h Wed Oct 4 21:48:16 2000 @@ -0,0 +1,108 @@ +#ifndef _ASM_IA64_MODULE_H +#define _ASM_IA64_MODULE_H +/* + * This file contains the ia64 architecture specific module code. + * + * Copyright (C) 2000 Intel Corporation. + * Copyright (C) 2000 Mike Stephens + */ + +#include +#include +#include +#include + +#define module_map(x) vmalloc(x) +#define module_unmap(x) ia64_module_unmap(x) +#define module_arch_init(x) ia64_module_init(x) + +/* + * This must match in size and layout the data created by + * modutils/obj/obj-ia64.c + */ +struct archdata { + const char *unw_table; + const char *segment_base; + const char *unw_start; + const char *unw_end; + const char *gp; +}; + +/* + * functions to add/remove a modules unwind info when + * it is loaded or unloaded. + */ +static inline int +ia64_module_init(struct module *mod) +{ +#ifdef CONFIG_IA64_NEW_UNWIND + struct archdata *archdata; + + if (!mod_member_present(mod, archdata_start) || !mod->archdata_start) + return 0; + archdata = (struct archdata *)(mod->archdata_start); + + /* + * Make sure the unwind pointers are sane. + */ + + if (archdata->unw_table) + { + printk(KERN_ERR "arch_init_module: archdata->unw_table must be zero.\n"); + return 1; + } + if (!mod_bound(archdata->gp, 0, mod)) + { + printk(KERN_ERR "arch_init_module: archdata->gp out of bounds.\n"); + return 1; + } + if (!mod_bound(archdata->unw_start, 0, mod)) + { + printk(KERN_ERR "arch_init_module: archdata->unw_start out of bounds.\n"); + return 1; + } + if (!mod_bound(archdata->unw_end, 0, mod)) + { + printk(KERN_ERR "arch_init_module: archdata->unw_end out of bounds.\n"); + return 1; + } + if (!mod_bound(archdata->segment_base, 0, mod)) + { + printk(KERN_ERR "arch_init_module: archdata->unw_table out of bounds.\n"); + return 1; + } + + /* + * Pointers are reasonable, add the module unwind table + */ + archdata->unw_table = unw_add_unwind_table(mod->name, archdata->segment_base, + (unsigned long) archdata->gp, + (unsigned long) archdata->unw_start, + (unsigned long) archdata->unw_end); +#endif /* CONFIG_IA64_NEW_UNWIND */ + return 0; +} + +static inline void +ia64_module_unmap(void * addr) +{ +#ifdef CONFIG_IA64_NEW_UNWIND + struct module *mod = (struct module *) addr; + struct archdata *archdata; + + /* + * Before freeing the module memory remove the unwind table entry + */ + if (mod_member_present(mod, archdata_start) && mod->archdata_start) + { + archdata = (struct archdata *)(mod->archdata_start); + + if (archdata->unw_table != NULL) + unw_remove_unwind_table(archdata->unw_table); + } +#endif /* CONFIG_IA64_NEW_UNWIND */ + + vfree(addr); +} + +#endif /* _ASM_IA64_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-ia64/offsets.h linux-2.4.0-test9-lia/include/asm-ia64/offsets.h --- linux-2.4.0-test9/include/asm-ia64/offsets.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/offsets.h Wed Oct 4 21:48:29 2000 @@ -11,7 +11,7 @@ #define PT_PTRACED_BIT 0 #define PT_TRACESYS_BIT 1 -#define IA64_TASK_SIZE 2864 /* 0xb30 */ +#define IA64_TASK_SIZE 3328 /* 0xd00 */ #define IA64_PT_REGS_SIZE 400 /* 0x190 */ #define IA64_SWITCH_STACK_SIZE 560 /* 0x230 */ #define IA64_SIGINFO_SIZE 128 /* 0x80 */ @@ -21,9 +21,9 @@ #define IA64_TASK_SIGPENDING_OFFSET 16 /* 0x10 */ #define IA64_TASK_NEED_RESCHED_OFFSET 40 /* 0x28 */ #define IA64_TASK_PROCESSOR_OFFSET 100 /* 0x64 */ -#define IA64_TASK_THREAD_OFFSET 896 /* 0x380 */ -#define IA64_TASK_THREAD_KSP_OFFSET 896 /* 0x380 */ -#define IA64_TASK_THREAD_SIGMASK_OFFSET 2744 /* 0xab8 */ +#define IA64_TASK_THREAD_OFFSET 1424 /* 0x590 */ +#define IA64_TASK_THREAD_KSP_OFFSET 1424 /* 0x590 */ +#define IA64_TASK_THREAD_SIGMASK_OFFSET 3184 /* 0xc70 */ #define IA64_TASK_PID_OFFSET 188 /* 0xbc */ #define IA64_TASK_MM_OFFSET 88 /* 0x58 */ #define IA64_PT_REGS_CR_IPSR_OFFSET 0 /* 0x0 */ diff -urN linux-2.4.0-test9/include/asm-ia64/page.h linux-2.4.0-test9-lia/include/asm-ia64/page.h --- linux-2.4.0-test9/include/asm-ia64/page.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/page.h Thu Oct 5 01:38:51 2000 @@ -102,15 +102,13 @@ #ifdef CONFIG_IA64_GENERIC # include # define virt_to_page(kaddr) (mem_map + platform_map_nr(kaddr)) -#elif defined (CONFIG_IA64_SN_SN1_SIM) +#elif defined (CONFIG_IA64_SN_SN1) # define virt_to_page(kaddr) (mem_map + MAP_NR_SN1(kaddr)) #else # define virt_to_page(kaddr) (mem_map + MAP_NR_DENSE(kaddr)) #endif #define VALID_PAGE(page) ((page - mem_map) < max_mapnr) -# endif /* __KERNEL__ */ - typedef union ia64_va { struct { unsigned long off : 61; /* intra-region offset */ @@ -138,7 +136,7 @@ #define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); *(int *)0=0; } while (0) #define PAGE_BUG(page) do { BUG(); } while (0) -extern __inline__ int +static __inline__ int get_order (unsigned long size) { double d = size - 1; @@ -151,6 +149,7 @@ return order; } +# endif /* __KERNEL__ */ #endif /* !ASSEMBLY */ #define PAGE_OFFSET 0xe000000000000000 diff -urN linux-2.4.0-test9/include/asm-ia64/pal.h linux-2.4.0-test9-lia/include/asm-ia64/pal.h --- linux-2.4.0-test9/include/asm-ia64/pal.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/pal.h Wed Oct 4 21:48:58 2000 @@ -66,6 +66,7 @@ #define PAL_CACHE_PROT_INFO 38 /* get i/d cache protection info */ #define PAL_REGISTER_INFO 39 /* return AR and CR register information*/ #define PAL_SHUTDOWN 40 /* enter processor shutdown state */ +#define PAL_PREFETCH_VISIBILITY 41 #define PAL_COPY_PAL 256 /* relocate PAL procedures and PAL PMI */ #define PAL_HALT_INFO 257 /* return the low power capabilities of processor */ @@ -644,15 +645,16 @@ * (generally 0) MUST be passed. Reserved parameters are not optional * parameters. */ -extern struct ia64_pal_retval ia64_pal_call_static (u64, u64, u64, u64); -extern struct ia64_pal_retval ia64_pal_call_stacked (u64, u64, u64, u64); -extern struct ia64_pal_retval ia64_pal_call_phys_static (u64, u64, u64, u64); -extern struct ia64_pal_retval ia64_pal_call_phys_stacked (u64, u64, u64, u64); - -#define PAL_CALL(iprv,a0,a1,a2,a3) iprv = ia64_pal_call_static(a0, a1, a2, a3) -#define PAL_CALL_STK(iprv,a0,a1,a2,a3) iprv = ia64_pal_call_stacked(a0, a1, a2, a3) -#define PAL_CALL_PHYS(iprv,a0,a1,a2,a3) iprv = ia64_pal_call_phys_static(a0, a1, a2, a3) -#define PAL_CALL_PHYS_STK(iprv,a0,a1,a2,a3) iprv = ia64_pal_call_phys_stacked(a0, a1, a2, a3) +extern struct ia64_pal_retval ia64_pal_call_static (u64, u64, u64, u64, u64); +extern struct ia64_pal_retval ia64_pal_call_stacked (u64, u64, u64, u64); +extern struct ia64_pal_retval ia64_pal_call_phys_static (u64, u64, u64, u64); +extern struct ia64_pal_retval ia64_pal_call_phys_stacked (u64, u64, u64, u64); + +#define PAL_CALL(iprv,a0,a1,a2,a3) iprv = ia64_pal_call_static(a0, a1, a2, a3, 0) +#define PAL_CALL_IC_OFF(iprv,a0,a1,a2,a3) iprv = ia64_pal_call_static(a0, a1, a2, a3, 1) +#define PAL_CALL_STK(iprv,a0,a1,a2,a3) iprv = ia64_pal_call_stacked(a0, a1, a2, a3) +#define PAL_CALL_PHYS(iprv,a0,a1,a2,a3) iprv = ia64_pal_call_phys_static(a0, a1, a2, a3) +#define PAL_CALL_PHYS_STK(iprv,a0,a1,a2,a3) iprv = ia64_pal_call_phys_stacked(a0, a1, a2, a3) typedef int (*ia64_pal_handler) (u64, ...); extern ia64_pal_handler ia64_pal; @@ -706,7 +708,7 @@ extern void pal_bus_features_print (u64); /* Provide information about configurable processor bus features */ -extern inline s64 +static inline s64 ia64_pal_bus_get_features (pal_bus_features_u_t *features_avail, pal_bus_features_u_t *features_status, pal_bus_features_u_t *features_control) @@ -723,7 +725,7 @@ } /* Enables/disables specific processor bus features */ -extern inline s64 +static inline s64 ia64_pal_bus_set_features (pal_bus_features_u_t feature_select) { struct ia64_pal_retval iprv; @@ -732,7 +734,7 @@ } /* Get detailed cache information */ -extern inline s64 +static inline s64 ia64_pal_cache_config_info (u64 cache_level, u64 cache_type, pal_cache_config_info_t *conf) { struct ia64_pal_retval iprv; @@ -750,7 +752,7 @@ } /* Get detailed cche protection information */ -extern inline s64 +static inline s64 ia64_pal_cache_prot_info (u64 cache_level, u64 cache_type, pal_cache_protection_info_t *prot) { struct ia64_pal_retval iprv; @@ -773,18 +775,18 @@ * Flush the processor instruction or data caches. *PROGRESS must be * initialized to zero before calling this for the first time.. */ -extern inline s64 +static inline s64 ia64_pal_cache_flush (u64 cache_type, u64 invalidate, u64 *progress) { struct ia64_pal_retval iprv; - PAL_CALL(iprv, PAL_CACHE_FLUSH, cache_type, invalidate, *progress); + PAL_CALL_IC_OFF(iprv, PAL_CACHE_FLUSH, cache_type, invalidate, *progress); *progress = iprv.v1; return iprv.status; } /* Initialize the processor controlled caches */ -extern inline s64 +static inline s64 ia64_pal_cache_init (u64 level, u64 cache_type, u64 restrict) { struct ia64_pal_retval iprv; @@ -796,7 +798,7 @@ * processor controlled cache to known values without the availability * of backing memory. */ -extern inline s64 +static inline s64 ia64_pal_cache_line_init (u64 physical_addr, u64 data_value) { struct ia64_pal_retval iprv; @@ -806,7 +808,7 @@ /* Read the data and tag of a processor controlled cache line for diags */ -extern inline s64 +static inline s64 ia64_pal_cache_read (pal_cache_line_id_u_t line_id, u64 physical_addr) { struct ia64_pal_retval iprv; @@ -815,7 +817,7 @@ } /* Return summary information about the heirarchy of caches controlled by the processor */ -extern inline s64 +static inline s64 ia64_pal_cache_summary (u64 *cache_levels, u64 *unique_caches) { struct ia64_pal_retval iprv; @@ -828,7 +830,7 @@ } /* Write the data and tag of a processor-controlled cache line for diags */ -extern inline s64 +static inline s64 ia64_pal_cache_write (pal_cache_line_id_u_t line_id, u64 physical_addr, u64 data) { struct ia64_pal_retval iprv; @@ -838,7 +840,7 @@ /* Return the parameters needed to copy relocatable PAL procedures from ROM to memory */ -extern inline s64 +static inline s64 ia64_pal_copy_info (u64 copy_type, u64 num_procs, u64 num_iopics, u64 *buffer_size, u64 *buffer_align) { @@ -852,7 +854,7 @@ } /* Copy relocatable PAL procedures from ROM to memory */ -extern inline s64 +static inline s64 ia64_pal_copy_pal (u64 target_addr, u64 alloc_size, u64 processor, u64 *pal_proc_offset) { struct ia64_pal_retval iprv; @@ -863,7 +865,7 @@ } /* Return the number of instruction and data debug register pairs */ -extern inline s64 +static inline s64 ia64_pal_debug_info (u64 *inst_regs, u64 *data_regs) { struct ia64_pal_retval iprv; @@ -878,7 +880,7 @@ #ifdef TBD /* Switch from IA64-system environment to IA-32 system environment */ -extern inline s64 +static inline s64 ia64_pal_enter_ia32_env (ia32_env1, ia32_env2, ia32_env3) { struct ia64_pal_retval iprv; @@ -888,7 +890,7 @@ #endif /* Get unique geographical address of this processor on its bus */ -extern inline s64 +static inline s64 ia64_pal_fixed_addr (u64 *global_unique_addr) { struct ia64_pal_retval iprv; @@ -899,7 +901,7 @@ } /* Get base frequency of the platform if generated by the processor */ -extern inline s64 +static inline s64 ia64_pal_freq_base (u64 *platform_base_freq) { struct ia64_pal_retval iprv; @@ -913,7 +915,7 @@ * Get the ratios for processor frequency, bus frequency and interval timer to * to base frequency of the platform */ -extern inline s64 +static inline s64 ia64_pal_freq_ratios (struct pal_freq_ratio *proc_ratio, struct pal_freq_ratio *bus_ratio, struct pal_freq_ratio *itc_ratio) { @@ -932,7 +934,7 @@ * power states where prefetching and execution are suspended and cache and * TLB coherency is not maintained. */ -extern inline s64 +static inline s64 ia64_pal_halt (u64 halt_state) { struct ia64_pal_retval iprv; @@ -952,7 +954,7 @@ } pal_power_mgmt_info_u_t; /* Return information about processor's optional power management capabilities. */ -extern inline s64 +static inline s64 ia64_pal_halt_info (pal_power_mgmt_info_u_t *power_buf) { struct ia64_pal_retval iprv; @@ -963,7 +965,7 @@ /* Cause the processor to enter LIGHT HALT state, where prefetching and execution are * suspended, but cache and TLB coherency is maintained. */ -extern inline s64 +static inline s64 ia64_pal_halt_light (void) { struct ia64_pal_retval iprv; @@ -975,7 +977,7 @@ * the error logging registers to be written. This procedure also checks the pending * machine check bit and pending INIT bit and reports their states. */ -extern inline s64 +static inline s64 ia64_pal_mc_clear_log (u64 *pending_vector) { struct ia64_pal_retval iprv; @@ -988,7 +990,7 @@ /* Ensure that all outstanding transactions in a processor are completed or that any * MCA due to thes outstanding transaction is taken. */ -extern inline s64 +static inline s64 ia64_pal_mc_drain (void) { struct ia64_pal_retval iprv; @@ -997,7 +999,7 @@ } /* Return the machine check dynamic processor state */ -extern inline s64 +static inline s64 ia64_pal_mc_dynamic_state (u64 offset, u64 *size, u64 *pds) { struct ia64_pal_retval iprv; @@ -1010,7 +1012,7 @@ } /* Return processor machine check information */ -extern inline s64 +static inline s64 ia64_pal_mc_error_info (u64 info_index, u64 type_index, u64 *size, u64 *error_info) { struct ia64_pal_retval iprv; @@ -1025,7 +1027,7 @@ /* Inform PALE_CHECK whether a machine check is expected so that PALE_CHECK willnot * attempt to correct any expected machine checks. */ -extern inline s64 +static inline s64 ia64_pal_mc_expected (u64 expected, u64 *previous) { struct ia64_pal_retval iprv; @@ -1039,7 +1041,7 @@ * minimal processor state in the event of a machine check or initialization * event. */ -extern inline s64 +static inline s64 ia64_pal_mc_register_mem (u64 physical_addr) { struct ia64_pal_retval iprv; @@ -1050,7 +1052,7 @@ /* Restore minimal architectural processor state, set CMC interrupt if necessary * and resume execution */ -extern inline s64 +static inline s64 ia64_pal_mc_resume (u64 set_cmci, u64 save_ptr) { struct ia64_pal_retval iprv; @@ -1059,7 +1061,7 @@ } /* Return the memory attributes implemented by the processor */ -extern inline s64 +static inline s64 ia64_pal_mem_attrib (u64 *mem_attrib) { struct ia64_pal_retval iprv; @@ -1072,7 +1074,7 @@ /* Return the amount of memory needed for second phase of processor * self-test and the required alignment of memory. */ -extern inline s64 +static inline s64 ia64_pal_mem_for_test (u64 *bytes_needed, u64 *alignment) { struct ia64_pal_retval iprv; @@ -1098,7 +1100,7 @@ /* Return the performance monitor information about what can be counted * and how to configure the monitors to count the desired events. */ -extern inline s64 +static inline s64 ia64_pal_perf_mon_info (u64 *pm_buffer, pal_perf_mon_info_u_t *pm_info) { struct ia64_pal_retval iprv; @@ -1111,7 +1113,7 @@ /* Specifies the physical address of the processor interrupt block * and I/O port space. */ -extern inline s64 +static inline s64 ia64_pal_platform_addr (u64 type, u64 physical_addr) { struct ia64_pal_retval iprv; @@ -1120,7 +1122,7 @@ } /* Set the SAL PMI entrypoint in memory */ -extern inline s64 +static inline s64 ia64_pal_pmi_entrypoint (u64 sal_pmi_entry_addr) { struct ia64_pal_retval iprv; @@ -1130,7 +1132,7 @@ struct pal_features_s; /* Provide information about configurable processor features */ -extern inline s64 +static inline s64 ia64_pal_proc_get_features (u64 *features_avail, u64 *features_status, u64 *features_control) @@ -1146,7 +1148,7 @@ } /* Enable/disable processor dependent features */ -extern inline s64 +static inline s64 ia64_pal_proc_set_features (u64 feature_select) { struct ia64_pal_retval iprv; @@ -1167,7 +1169,7 @@ /* Return the information required for the architected loop used to purge * (initialize) the entire TC */ -extern inline s64 +static inline s64 ia64_get_ptce (ia64_ptce_info_t *ptce) { struct ia64_pal_retval iprv; @@ -1187,7 +1189,7 @@ } /* Return info about implemented application and control registers. */ -extern inline s64 +static inline s64 ia64_pal_register_info (u64 info_request, u64 *reg_info_1, u64 *reg_info_2) { struct ia64_pal_retval iprv; @@ -1211,7 +1213,7 @@ /* Return information about the register stack and RSE for this processor * implementation. */ -extern inline s64 +static inline s64 ia64_pal_rse_info (u64 *num_phys_stacked, pal_hints_u_t *hints) { struct ia64_pal_retval iprv; @@ -1227,7 +1229,7 @@ * suspended, but cause cache and TLB coherency to be maintained. * This is usually called in IA-32 mode. */ -extern inline s64 +static inline s64 ia64_pal_shutdown (void) { struct ia64_pal_retval iprv; @@ -1236,7 +1238,7 @@ } /* Perform the second phase of processor self-test. */ -extern inline s64 +static inline s64 ia64_pal_test_proc (u64 test_addr, u64 test_size, u64 attributes, u64 *self_test_state) { struct ia64_pal_retval iprv; @@ -1261,7 +1263,7 @@ /* Return PAL version information */ -extern inline s64 +static inline s64 ia64_pal_version (pal_version_u_t *pal_min_version, pal_version_u_t *pal_cur_version) { struct ia64_pal_retval iprv; @@ -1299,7 +1301,7 @@ /* Return information about the virtual memory characteristics of the processor * implementation. */ -extern inline s64 +static inline s64 ia64_pal_vm_info (u64 tc_level, u64 tc_type, pal_tc_info_u_t *tc_info, u64 *tc_pages) { struct ia64_pal_retval iprv; @@ -1314,7 +1316,7 @@ /* Get page size information about the virtual memory characteristics of the processor * implementation. */ -extern inline s64 +static inline s64 ia64_pal_vm_page_size (u64 *tr_pages, u64 *vw_pages) { struct ia64_pal_retval iprv; @@ -1353,7 +1355,7 @@ /* Get summary information about the virtual memory characteristics of the processor * implementation. */ -extern inline s64 +static inline s64 ia64_pal_vm_summary (pal_vm_info_1_u_t *vm_info_1, pal_vm_info_2_u_t *vm_info_2) { struct ia64_pal_retval iprv; @@ -1377,7 +1379,7 @@ } pal_tr_valid_u_t; /* Read a translation register */ -extern inline s64 +static inline s64 ia64_pal_tr_read (u64 reg_num, u64 tr_type, u64 *tr_buffer, pal_tr_valid_u_t *tr_valid) { struct ia64_pal_retval iprv; @@ -1385,6 +1387,14 @@ if (tr_valid) tr_valid->piv_val = iprv.v0; return iprv.status; +} + +static inline s64 +ia64_pal_prefetch_visibility (void) +{ + struct ia64_pal_retval iprv; + PAL_CALL(iprv, PAL_PREFETCH_VISIBILITY, 0, 0, 0); + return iprv.status; } #endif /* __ASSEMBLY__ */ diff -urN linux-2.4.0-test9/include/asm-ia64/param.h linux-2.4.0-test9-lia/include/asm-ia64/param.h --- linux-2.4.0-test9/include/asm-ia64/param.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/param.h Thu Oct 5 01:38:51 2000 @@ -15,7 +15,7 @@ * Yeah, simulating stuff is slow, so let us catch some breath between * timer interrupts... */ -# define HZ 20 +# define HZ 32 #else # define HZ 1024 #endif diff -urN linux-2.4.0-test9/include/asm-ia64/parport.h linux-2.4.0-test9-lia/include/asm-ia64/parport.h --- linux-2.4.0-test9/include/asm-ia64/parport.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-ia64/parport.h Wed Oct 4 21:49:17 2000 @@ -0,0 +1,20 @@ +/* + * parport.h: platform-specific PC-style parport initialisation + * + * Copyright (C) 1999, 2000 Tim Waugh + * + * This file should only be included by drivers/parport/parport_pc.c. + */ + +#ifndef _ASM_IA64_PARPORT_H +#define _ASM_IA64_PARPORT_H 1 + +static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma); + +static int __devinit +parport_pc_find_nonpci_ports (int autoirq, int autodma) +{ + return parport_pc_find_isa_ports(autoirq, autodma); +} + +#endif /* _ASM_IA64_PARPORT_H */ diff -urN linux-2.4.0-test9/include/asm-ia64/pci.h linux-2.4.0-test9-lia/include/asm-ia64/pci.h --- linux-2.4.0-test9/include/asm-ia64/pci.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/pci.h Thu Oct 5 01:38:51 2000 @@ -1,6 +1,7 @@ #ifndef _ASM_IA64_PCI_H #define _ASM_IA64_PCI_H +#include #include #include #include @@ -21,12 +22,12 @@ struct pci_dev; -extern inline void pcibios_set_master(struct pci_dev *dev) +static inline void pcibios_set_master(struct pci_dev *dev) { /* No special bus mastering setup handling */ } -extern inline void pcibios_penalize_isa_irq(int irq) +static inline void pcibios_penalize_isa_irq(int irq) { /* We don't do dynamic PCI IRQ allocation */ } @@ -127,7 +128,7 @@ * only drive the low 24-bits during PCI bus mastering, then * you would pass 0x00ffffff as the mask to this function. */ -extern inline int +static inline int pci_dma_supported(struct pci_dev *hwdev, dma_addr_t mask) { return 1; diff -urN linux-2.4.0-test9/include/asm-ia64/pgalloc.h linux-2.4.0-test9-lia/include/asm-ia64/pgalloc.h --- linux-2.4.0-test9/include/asm-ia64/pgalloc.h Fri Apr 21 15:21:24 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/pgalloc.h Thu Oct 5 01:38:55 2000 @@ -32,7 +32,7 @@ #define pte_quicklist (my_cpu_data.pte_quick) #define pgtable_cache_size (my_cpu_data.pgtable_cache_sz) -extern __inline__ pgd_t* +static __inline__ pgd_t* get_pgd_slow (void) { pgd_t *ret = (pgd_t *)__get_free_page(GFP_KERNEL); @@ -41,7 +41,7 @@ return ret; } -extern __inline__ pgd_t* +static __inline__ pgd_t* get_pgd_fast (void) { unsigned long *ret = pgd_quicklist; @@ -54,7 +54,7 @@ return (pgd_t *)ret; } -extern __inline__ pgd_t* +static __inline__ pgd_t* pgd_alloc (void) { pgd_t *pgd; @@ -65,7 +65,7 @@ return pgd; } -extern __inline__ void +static __inline__ void free_pgd_fast (pgd_t *pgd) { *(unsigned long *)pgd = (unsigned long) pgd_quicklist; @@ -73,7 +73,7 @@ ++pgtable_cache_size; } -extern __inline__ pmd_t * +static __inline__ pmd_t * get_pmd_slow (void) { pmd_t *pmd = (pmd_t *) __get_free_page(GFP_KERNEL); @@ -83,7 +83,7 @@ return pmd; } -extern __inline__ pmd_t * +static __inline__ pmd_t * get_pmd_fast (void) { unsigned long *ret = (unsigned long *)pmd_quicklist; @@ -96,7 +96,7 @@ return (pmd_t *)ret; } -extern __inline__ void +static __inline__ void free_pmd_fast (pmd_t *pmd) { *(unsigned long *)pmd = (unsigned long) pmd_quicklist; @@ -104,7 +104,7 @@ ++pgtable_cache_size; } -extern __inline__ void +static __inline__ void free_pmd_slow (pmd_t *pmd) { free_page((unsigned long)pmd); @@ -112,7 +112,7 @@ extern pte_t *get_pte_slow (pmd_t *pmd, unsigned long address_preadjusted); -extern __inline__ pte_t * +static __inline__ pte_t * get_pte_fast (void) { unsigned long *ret = (unsigned long *)pte_quicklist; @@ -125,7 +125,7 @@ return (pte_t *)ret; } -extern __inline__ void +static __inline__ void free_pte_fast (pte_t *pte) { *(unsigned long *)pte = (unsigned long) pte_quicklist; @@ -142,7 +142,7 @@ extern void __handle_bad_pgd (pgd_t *pgd); extern void __handle_bad_pmd (pmd_t *pmd); -extern __inline__ pte_t* +static __inline__ pte_t* pte_alloc (pmd_t *pmd, unsigned long vmaddr) { unsigned long offset; @@ -163,7 +163,7 @@ return (pte_t *) pmd_page(*pmd) + offset; } -extern __inline__ pmd_t* +static __inline__ pmd_t* pmd_alloc (pgd_t *pgd, unsigned long vmaddr) { unsigned long offset; @@ -228,7 +228,7 @@ /* * Flush a specified user mapping */ -extern __inline__ void +static __inline__ void flush_tlb_mm (struct mm_struct *mm) { if (mm) { diff -urN linux-2.4.0-test9/include/asm-ia64/pgtable.h linux-2.4.0-test9-lia/include/asm-ia64/pgtable.h --- linux-2.4.0-test9/include/asm-ia64/pgtable.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/pgtable.h Thu Oct 5 01:38:51 2000 @@ -3,9 +3,9 @@ /* * This file contains the functions and defines necessary to modify and use - * the ia-64 page table tree. + * the IA-64 page table tree. * - * This hopefully works with any (fixed) ia-64 page-size, as defined + * This hopefully works with any (fixed) IA-64 page-size, as defined * in (currently 8192). * * Copyright (C) 1998-2000 Hewlett-Packard Co @@ -19,12 +19,6 @@ #define IA64_MAX_PHYS_BITS 50 /* max. number of physical address bits (architected) */ -/* Is ADDR a valid kernel address? */ -#define kern_addr_valid(addr) ((addr) >= TASK_SIZE) - -/* Is ADDR a valid physical address? */ -#define phys_addr_valid(addr) (((addr) & my_cpu_data.unimpl_pa_mask) == 0) - /* * First, define the various bits in a PTE. Note that the PTE format * matches the VHPT short format, the firt doubleword of the VHPD long @@ -111,6 +105,7 @@ #include #include +#include #include /* @@ -166,7 +161,7 @@ * Given a pointer to an mem_map[] entry, return the kernel virtual * address corresponding to that page. */ -#define page_address(page) ((void *) (PAGE_OFFSET + (((page) - mem_map) << PAGE_SHIFT))) +#define page_address(page) ((page)->virtual) /* * Now for some cache flushing routines. This is the kind of stuff @@ -190,6 +185,28 @@ ia64_flush_icache_page((unsigned long) page_address(pg)); \ } while (0) +/* Quick test to see if ADDR is a (potentially) valid physical address. */ +static __inline__ long +ia64_phys_addr_valid (unsigned long addr) +{ + return (addr & (my_cpu_data.unimpl_pa_mask)) == 0; +} + +/* + * kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel + * memory. For the return value to be meaningful, ADDR must be >= + * PAGE_OFFSET. This operation can be relatively expensive (e.g., + * require a hash-, or multi-level tree-lookup or something of that + * sort) but it guarantees to return TRUE only if accessing the page + * at that address does not cause an error. Note that there may be + * addresses for which kern_addr_valid() returns FALSE even though an + * access would not cause an error (e.g., this is typically true for + * memory mapped I/O regions. + * + * XXX Need to implement this for IA-64. + */ +#define kern_addr_valid(addr) (1) + /* * Now come the defines and routines to manage and access the three-level * page table. @@ -248,14 +265,14 @@ #define pmd_set(pmdp, ptep) (pmd_val(*(pmdp)) = __pa(ptep)) #define pmd_none(pmd) (!pmd_val(pmd)) -#define pmd_bad(pmd) (!phys_addr_valid(pmd_val(pmd))) +#define pmd_bad(pmd) (!ia64_phys_addr_valid(pmd_val(pmd))) #define pmd_present(pmd) (pmd_val(pmd) != 0UL) #define pmd_clear(pmdp) (pmd_val(*(pmdp)) = 0UL) #define pmd_page(pmd) ((unsigned long) __va(pmd_val(pmd) & _PFN_MASK)) #define pgd_set(pgdp, pmdp) (pgd_val(*(pgdp)) = __pa(pmdp)) #define pgd_none(pgd) (!pgd_val(pgd)) -#define pgd_bad(pgd) (!phys_addr_valid(pgd_val(pgd))) +#define pgd_bad(pgd) (!ia64_phys_addr_valid(pgd_val(pgd))) #define pgd_present(pgd) (pgd_val(pgd) != 0UL) #define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL) #define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & _PFN_MASK)) @@ -301,7 +318,7 @@ /* * Return the region index for virtual address ADDRESS. */ -extern __inline__ unsigned long +static __inline__ unsigned long rgn_index (unsigned long address) { ia64_va a; @@ -313,7 +330,7 @@ /* * Return the region offset for virtual address ADDRESS. */ -extern __inline__ unsigned long +static __inline__ unsigned long rgn_offset (unsigned long address) { ia64_va a; @@ -325,7 +342,7 @@ #define RGN_SIZE (1UL << 61) #define RGN_KERNEL 7 -extern __inline__ unsigned long +static __inline__ unsigned long pgd_index (unsigned long address) { unsigned long region = address >> 61; @@ -336,7 +353,7 @@ /* The offset in the 1-level directory is given by the 3 region bits (61..63) and the seven level-1 bits (33-39). */ -extern __inline__ pgd_t* +static __inline__ pgd_t* pgd_offset (struct mm_struct *mm, unsigned long address) { return mm->pgd + pgd_index(address); @@ -409,9 +426,6 @@ #define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define swp_entry_to_pte(x) ((pte_t) { (x).val }) -#define module_map vmalloc -#define module_unmap vfree - /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define PageSkip(page) (0) @@ -421,7 +435,7 @@ * ZERO_PAGE is a global shared page that is always zero: used * for zero-mapped memory areas etc.. */ -extern unsigned long empty_zero_page[1024]; +extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)]; #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) # endif /* !__ASSEMBLY__ */ diff -urN linux-2.4.0-test9/include/asm-ia64/processor.h linux-2.4.0-test9-lia/include/asm-ia64/processor.h --- linux-2.4.0-test9/include/asm-ia64/processor.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/processor.h Thu Oct 5 01:38:51 2000 @@ -253,9 +253,9 @@ #define my_cpu_data cpu_data[smp_processor_id()] #ifdef CONFIG_SMP -# define loops_per_sec() my_cpu_data.loops_per_sec +# define ia64_loops_per_sec() my_cpu_data.loops_per_sec #else -# define loops_per_sec() loops_per_sec +# define ia64_loops_per_sec() loops_per_sec #endif extern struct cpuinfo_ia64 cpu_data[NR_CPUS]; @@ -305,10 +305,11 @@ __u64 csd; /* IA32 code selector descriptor */ __u64 ssd; /* IA32 stack selector descriptor */ __u64 tssd; /* IA32 TSS descriptor */ + __u64 old_iob; /* old IOBase value */ union { __u64 sigmask; /* aligned mask for sigsuspend scall */ } un; -# define INIT_THREAD_IA32 , 0, 0, 0x17800000037fULL, 0, 0, 0, 0, 0, {0} +# define INIT_THREAD_IA32 , 0, 0, 0x17800000037fULL, 0, 0, 0, 0, 0, 0, {0} #else # define INIT_THREAD_IA32 #endif /* CONFIG_IA32_SUPPORT */ @@ -334,6 +335,8 @@ #define start_thread(regs,new_ip,new_sp) do { \ set_fs(USER_DS); \ + ia64_psr(regs)->dfh = 1; /* disable fph */ \ + ia64_psr(regs)->mfh = 0; /* clear mfh */ \ ia64_psr(regs)->cpl = 3; /* set user mode */ \ ia64_psr(regs)->ri = 0; /* clear return slot number */ \ ia64_psr(regs)->is = 0; /* IA-64 instruction set */ \ @@ -390,6 +393,8 @@ /* Return stack pointer of blocked task TSK. */ #define KSTK_ESP(tsk) ((tsk)->thread.ksp) +#ifndef CONFIG_SMP + static inline struct task_struct * ia64_get_fpu_owner (void) { @@ -404,6 +409,8 @@ __asm__ __volatile__ ("mov ar.k5=%0" :: "r"(t)); } +#endif /* !CONFIG_SMP */ + extern void __ia64_init_fpu (void); extern void __ia64_save_fpu (struct ia64_fpreg *fph); extern void __ia64_load_fpu (struct ia64_fpreg *fph); @@ -447,31 +454,31 @@ ia64_fph_disable(); } -extern inline void +static inline void ia64_fc (void *addr) { __asm__ __volatile__ ("fc %0" :: "r"(addr) : "memory"); } -extern inline void +static inline void ia64_sync_i (void) { __asm__ __volatile__ (";; sync.i" ::: "memory"); } -extern inline void +static inline void ia64_srlz_i (void) { __asm__ __volatile__ (";; srlz.i ;;" ::: "memory"); } -extern inline void +static inline void ia64_srlz_d (void) { __asm__ __volatile__ (";; srlz.d" ::: "memory"); } -extern inline __u64 +static inline __u64 ia64_get_rr (__u64 reg_bits) { __u64 r; @@ -479,13 +486,13 @@ return r; } -extern inline void +static inline void ia64_set_rr (__u64 reg_bits, __u64 rr_val) { __asm__ __volatile__ ("mov rr[%0]=%1" :: "r"(reg_bits), "r"(rr_val) : "memory"); } -extern inline __u64 +static inline __u64 ia64_get_dcr (void) { __u64 r; @@ -493,14 +500,14 @@ return r; } -extern inline void +static inline void ia64_set_dcr (__u64 val) { __asm__ __volatile__ ("mov cr.dcr=%0;;" :: "r"(val) : "memory"); ia64_srlz_d(); } -extern inline __u64 +static inline __u64 ia64_get_lid (void) { __u64 r; @@ -508,7 +515,7 @@ return r; } -extern inline void +static inline void ia64_invala (void) { __asm__ __volatile__ ("invala" ::: "memory"); @@ -526,7 +533,7 @@ * Insert a translation into an instruction and/or data translation * register. */ -extern inline void +static inline void ia64_itr (__u64 target_mask, __u64 tr_num, __u64 vmaddr, __u64 pte, __u64 log_page_size) @@ -545,7 +552,7 @@ * Insert a translation into the instruction and/or data translation * cache. */ -extern inline void +static inline void ia64_itc (__u64 target_mask, __u64 vmaddr, __u64 pte, __u64 log_page_size) { @@ -562,7 +569,7 @@ * Purge a range of addresses from instruction and/or data translation * register(s). */ -extern inline void +static inline void ia64_ptr (__u64 target_mask, __u64 vmaddr, __u64 log_size) { if (target_mask & 0x1) @@ -572,21 +579,21 @@ } /* Set the interrupt vector address. The address must be suitably aligned (32KB). */ -extern inline void +static inline void ia64_set_iva (void *ivt_addr) { __asm__ __volatile__ ("mov cr.iva=%0;; srlz.i;;" :: "r"(ivt_addr) : "memory"); } /* Set the page table address and control bits. */ -extern inline void +static inline void ia64_set_pta (__u64 pta) { /* Note: srlz.i implies srlz.d */ __asm__ __volatile__ ("mov cr.pta=%0;; srlz.i;;" :: "r"(pta) : "memory"); } -extern inline __u64 +static inline __u64 ia64_get_cpuid (__u64 regnum) { __u64 r; @@ -595,13 +602,13 @@ return r; } -extern inline void +static inline void ia64_eoi (void) { __asm__ ("mov cr.eoi=r0;; srlz.d;;" ::: "memory"); } -extern __inline__ void +static inline void ia64_set_lrr0 (__u8 vector, __u8 masked) { if (masked > 1) @@ -612,7 +619,7 @@ } -extern __inline__ void +static inline void ia64_set_lrr1 (__u8 vector, __u8 masked) { if (masked > 1) @@ -622,13 +629,13 @@ :: "r"((masked << 16) | vector) : "memory"); } -extern __inline__ void +static inline void ia64_set_pmv (__u64 val) { __asm__ __volatile__ ("mov cr.pmv=%0" :: "r"(val) : "memory"); } -extern __inline__ __u64 +static inline __u64 ia64_get_pmc (__u64 regnum) { __u64 retval; @@ -637,13 +644,13 @@ return retval; } -extern __inline__ void +static inline void ia64_set_pmc (__u64 regnum, __u64 value) { __asm__ __volatile__ ("mov pmc[%0]=%1" :: "r"(regnum), "r"(value)); } -extern __inline__ __u64 +static inline __u64 ia64_get_pmd (__u64 regnum) { __u64 retval; @@ -652,7 +659,7 @@ return retval; } -extern __inline__ void +static inline void ia64_set_pmd (__u64 regnum, __u64 value) { __asm__ __volatile__ ("mov pmd[%0]=%1" :: "r"(regnum), "r"(value)); @@ -662,7 +669,7 @@ * Given the address to which a spill occurred, return the unat bit * number that corresponds to this address. */ -extern inline __u64 +static inline __u64 ia64_unat_pos (void *spill_addr) { return ((__u64) spill_addr >> 3) & 0x3f; @@ -672,7 +679,7 @@ * Set the NaT bit of an integer register which was spilled at address * SPILL_ADDR. UNAT is the mask to be updated. */ -extern inline void +static inline void ia64_set_unat (__u64 *unat, void *spill_addr, unsigned long nat) { __u64 bit = ia64_unat_pos(spill_addr); @@ -685,7 +692,7 @@ * Return saved PC of a blocked thread. * Note that the only way T can block is through a call to schedule() -> switch_to(). */ -extern inline unsigned long +static inline unsigned long thread_saved_pc (struct thread_struct *t) { struct unw_frame_info info; @@ -720,7 +727,7 @@ /* * Set the correctable machine check vector register */ -extern __inline__ void +static inline void ia64_set_cmcv (__u64 val) { __asm__ __volatile__ ("mov cr.cmcv=%0" :: "r"(val) : "memory"); @@ -729,7 +736,7 @@ /* * Read the correctable machine check vector register */ -extern __inline__ __u64 +static inline __u64 ia64_get_cmcv (void) { __u64 val; @@ -738,7 +745,7 @@ return val; } -extern inline __u64 +static inline __u64 ia64_get_ivr (void) { __u64 r; @@ -746,13 +753,13 @@ return r; } -extern inline void +static inline void ia64_set_tpr (__u64 val) { __asm__ __volatile__ ("mov cr.tpr=%0" :: "r"(val)); } -extern inline __u64 +static inline __u64 ia64_get_tpr (void) { __u64 r; @@ -760,71 +767,75 @@ return r; } -extern __inline__ void +static inline void ia64_set_irr0 (__u64 val) { __asm__ __volatile__("mov cr.irr0=%0;;" :: "r"(val) : "memory"); ia64_srlz_d(); } -extern __inline__ __u64 +static inline __u64 ia64_get_irr0 (void) { __u64 val; - __asm__ ("mov %0=cr.irr0" : "=r"(val)); + /* this is volatile because irr may change unbeknownst to gcc... */ + __asm__ __volatile__("mov %0=cr.irr0" : "=r"(val)); return val; } -extern __inline__ void +static inline void ia64_set_irr1 (__u64 val) { __asm__ __volatile__("mov cr.irr1=%0;;" :: "r"(val) : "memory"); ia64_srlz_d(); } -extern __inline__ __u64 +static inline __u64 ia64_get_irr1 (void) { __u64 val; - __asm__ ("mov %0=cr.irr1" : "=r"(val)); + /* this is volatile because irr may change unbeknownst to gcc... */ + __asm__ __volatile__("mov %0=cr.irr1" : "=r"(val)); return val; } -extern __inline__ void +static inline void ia64_set_irr2 (__u64 val) { __asm__ __volatile__("mov cr.irr2=%0;;" :: "r"(val) : "memory"); ia64_srlz_d(); } -extern __inline__ __u64 +static inline __u64 ia64_get_irr2 (void) { __u64 val; - __asm__ ("mov %0=cr.irr2" : "=r"(val)); + /* this is volatile because irr may change unbeknownst to gcc... */ + __asm__ __volatile__("mov %0=cr.irr2" : "=r"(val)); return val; } -extern __inline__ void +static inline void ia64_set_irr3 (__u64 val) { __asm__ __volatile__("mov cr.irr3=%0;;" :: "r"(val) : "memory"); ia64_srlz_d(); } -extern __inline__ __u64 +static inline __u64 ia64_get_irr3 (void) { __u64 val; - __asm__ ("mov %0=cr.irr3" : "=r"(val)); + /* this is volatile because irr may change unbeknownst to gcc... */ + __asm__ __volatile__("mov %0=cr.irr3" : "=r"(val)); return val; } -extern __inline__ __u64 +static inline __u64 ia64_get_gp(void) { __u64 val; @@ -852,7 +863,7 @@ #define ia64_rotl(w,n) ia64_rotr((w),(64)-(n)) -extern __inline__ __u64 +static inline __u64 ia64_thash (__u64 addr) { __u64 result; diff -urN linux-2.4.0-test9/include/asm-ia64/ptrace.h linux-2.4.0-test9-lia/include/asm-ia64/ptrace.h --- linux-2.4.0-test9/include/asm-ia64/ptrace.h Thu Jun 22 07:09:45 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/ptrace.h Thu Oct 5 01:38:47 2000 @@ -219,6 +219,7 @@ extern void show_regs (struct pt_regs *); extern long ia64_peek (struct pt_regs *, struct task_struct *, unsigned long addr, long *val); extern long ia64_poke (struct pt_regs *, struct task_struct *, unsigned long addr, long val); + extern void ia64_flush_fph (struct task_struct *t); extern void ia64_sync_fph (struct task_struct *t); #ifdef CONFIG_IA64_NEW_UNWIND diff -urN linux-2.4.0-test9/include/asm-ia64/ptrace_offsets.h linux-2.4.0-test9-lia/include/asm-ia64/ptrace_offsets.h --- linux-2.4.0-test9/include/asm-ia64/ptrace_offsets.h Thu Jun 22 07:09:45 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/ptrace_offsets.h Wed Oct 4 23:05:46 2000 @@ -17,6 +17,8 @@ * unsigned long dbr[8]; * unsigned long rsvd2[504]; * unsigned long ibr[8]; + * unsigned long rsvd3[504]; + * unsigned long pmd[4]; * } */ @@ -157,6 +159,7 @@ #define PT_B4 0x07f0 #define PT_B5 0x07f8 +#define PT_AR_EC 0x0800 #define PT_AR_LC 0x0808 /* pt_regs */ @@ -209,5 +212,6 @@ #define PT_DBR 0x2000 /* data breakpoint registers */ #define PT_IBR 0x3000 /* instruction breakpoint registers */ +#define PT_PMD 0x4000 /* performance monitoring counters */ #endif /* _ASM_IA64_PTRACE_OFFSETS_H */ diff -urN linux-2.4.0-test9/include/asm-ia64/sal.h linux-2.4.0-test9-lia/include/asm-ia64/sal.h --- linux-2.4.0-test9/include/asm-ia64/sal.h Thu Jun 22 07:09:45 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/sal.h Thu Oct 5 01:39:01 2000 @@ -17,6 +17,7 @@ */ #include +#include #include #include @@ -158,12 +159,22 @@ char reserved2[8]; }; -struct ia64_sal_desc_ptc { +typedef struct ia64_sal_desc_ptc { char type; char reserved1[3]; unsigned int num_domains; /* # of coherence domains */ - long domain_info; /* physical address of domain info table */ -}; + s64 domain_info; /* physical address of domain info table */ +} ia64_sal_desc_ptc_t; + +typedef struct ia64_sal_ptc_domain_info { + unsigned long proc_count; /* number of processors in domain */ + long proc_list; /* physical address of LID array */ +} ia64_sal_ptc_domain_info_t; + +typedef struct ia64_sal_ptc_domain_proc_entry { + unsigned char id; /* id of processor */ + unsigned char eid; /* eid of processor */ +} ia64_sal_ptc_domain_proc_entry_t; #define IA64_SAL_AP_EXTERNAL_INT 0 @@ -175,6 +186,7 @@ }; extern ia64_sal_handler ia64_sal; +extern struct ia64_sal_desc_ptc *ia64_ptc_domain_info; extern const char *ia64_sal_strerror (long status); extern void ia64_sal_init (struct ia64_sal_systab *sal_systab); @@ -387,7 +399,7 @@ * Now define a couple of inline functions for improved type checking * and convenience. */ -extern inline long +static inline long ia64_sal_freq_base (unsigned long which, unsigned long *ticks_per_second, unsigned long *drift_info) { @@ -400,7 +412,7 @@ } /* Flush all the processor and platform level instruction and/or data caches */ -extern inline s64 +static inline s64 ia64_sal_cache_flush (u64 cache_type) { struct ia64_sal_retval isrv; @@ -411,7 +423,7 @@ /* Initialize all the processor and platform level instruction and data caches */ -extern inline s64 +static inline s64 ia64_sal_cache_init (void) { struct ia64_sal_retval isrv; @@ -422,7 +434,7 @@ /* Clear the processor and platform information logged by SAL with respect to the * machine state at the time of MCA's, INITs or CMCs */ -extern inline s64 +static inline s64 ia64_sal_clear_state_info (u64 sal_info_type, u64 sal_info_sub_type) { struct ia64_sal_retval isrv; @@ -434,7 +446,7 @@ /* Get the processor and platform information logged by SAL with respect to the machine * state at the time of the MCAs, INITs or CMCs. */ -extern inline u64 +static inline u64 ia64_sal_get_state_info (u64 sal_info_type, u64 sal_info_sub_type, u64 *sal_info) { struct ia64_sal_retval isrv; @@ -446,7 +458,7 @@ /* Get the maximum size of the information logged by SAL with respect to the machine * state at the time of MCAs, INITs or CMCs */ -extern inline u64 +static inline u64 ia64_sal_get_state_info_size (u64 sal_info_type, u64 sal_info_sub_type) { struct ia64_sal_retval isrv; @@ -459,7 +471,7 @@ /* Causes the processor to go into a spin loop within SAL where SAL awaits a wakeup * from the monarch processor. */ -extern inline s64 +static inline s64 ia64_sal_mc_rendez (void) { struct ia64_sal_retval isrv; @@ -471,7 +483,7 @@ * the machine check rendezvous sequence as well as the mechanism to wake up the * non-monarch processor at the end of machine check processing. */ -extern inline s64 +static inline s64 ia64_sal_mc_set_params (u64 param_type, u64 i_or_m, u64 i_or_m_val, u64 timeout) { struct ia64_sal_retval isrv; @@ -480,7 +492,7 @@ } /* Read from PCI configuration space */ -extern inline s64 +static inline s64 ia64_sal_pci_config_read (u64 pci_config_addr, u64 size, u64 *value) { struct ia64_sal_retval isrv; @@ -503,7 +515,7 @@ } /* Write to PCI configuration space */ -extern inline s64 +static inline s64 ia64_sal_pci_config_write (u64 pci_config_addr, u64 size, u64 value) { struct ia64_sal_retval isrv; @@ -527,7 +539,7 @@ * Register physical addresses of locations needed by SAL when SAL * procedures are invoked in virtual mode. */ -extern inline s64 +static inline s64 ia64_sal_register_physical_addr (u64 phys_entry, u64 phys_addr) { struct ia64_sal_retval isrv; @@ -539,7 +551,7 @@ * or entry points where SAL will pass control for the specified event. These event * handlers are for the bott rendezvous, MCAs and INIT scenarios. */ -extern inline s64 +static inline s64 ia64_sal_set_vectors (u64 vector_type, u64 handler_addr1, u64 gp1, u64 handler_len1, u64 handler_addr2, u64 gp2, u64 handler_len2) @@ -552,7 +564,7 @@ return isrv.status; } /* Update the contents of PAL block in the non-volatile storage device */ -extern inline s64 +static inline s64 ia64_sal_update_pal (u64 param_buf, u64 scratch_buf, u64 scratch_buf_size, u64 *error_code, u64 *scratch_buf_size_needed) { diff -urN linux-2.4.0-test9/include/asm-ia64/semaphore.h linux-2.4.0-test9-lia/include/asm-ia64/semaphore.h --- linux-2.4.0-test9/include/asm-ia64/semaphore.h Fri Apr 21 15:21:24 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/semaphore.h Thu Oct 5 01:38:51 2000 @@ -39,7 +39,7 @@ #define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name, 1) #define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name, 0) -extern inline void +static inline void sema_init (struct semaphore *sem, int val) { *sem = (struct semaphore) __SEMAPHORE_INITIALIZER(*sem, val); @@ -68,7 +68,7 @@ * Atomically decrement the semaphore's count. If it goes negative, * block the calling thread in the TASK_UNINTERRUPTIBLE state. */ -extern inline void +static inline void down (struct semaphore *sem) { #if WAITQUEUE_DEBUG @@ -82,7 +82,7 @@ * Atomically decrement the semaphore's count. If it goes negative, * block the calling thread in the TASK_INTERRUPTIBLE state. */ -extern inline int +static inline int down_interruptible (struct semaphore * sem) { int ret = 0; @@ -95,7 +95,7 @@ return ret; } -extern inline int +static inline int down_trylock (struct semaphore *sem) { int ret = 0; @@ -108,7 +108,7 @@ return ret; } -extern inline void +static inline void up (struct semaphore * sem) { #if WAITQUEUE_DEBUG @@ -181,7 +181,7 @@ extern void __down_write_failed (struct rw_semaphore *sem, long count); extern void __rwsem_wake (struct rw_semaphore *sem, long count); -extern inline void +static inline void init_rwsem (struct rw_semaphore *sem) { sem->count = RW_LOCK_BIAS; @@ -196,7 +196,7 @@ #endif } -extern inline void +static inline void down_read (struct rw_semaphore *sem) { long count; @@ -218,7 +218,7 @@ #endif } -extern inline void +static inline void down_write (struct rw_semaphore *sem) { long old_count, new_count; @@ -252,7 +252,7 @@ * case is when there was a writer waiting, and we've * bumped the count to 0: we must wake the writer up. */ -extern inline void +static inline void __up_read (struct rw_semaphore *sem) { long count; @@ -271,7 +271,7 @@ * Releasing the writer is easy -- just release it and * wake up any sleepers. */ -extern inline void +static inline void __up_write (struct rw_semaphore *sem) { long old_count, new_count; @@ -290,7 +290,7 @@ __rwsem_wake(sem, new_count); } -extern inline void +static inline void up_read (struct rw_semaphore *sem) { #if WAITQUEUE_DEBUG @@ -303,7 +303,7 @@ __up_read(sem); } -extern inline void +static inline void up_write (struct rw_semaphore *sem) { #if WAITQUEUE_DEBUG diff -urN linux-2.4.0-test9/include/asm-ia64/siginfo.h linux-2.4.0-test9-lia/include/asm-ia64/siginfo.h --- linux-2.4.0-test9/include/asm-ia64/siginfo.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/siginfo.h Wed Oct 4 21:50:51 2000 @@ -235,7 +235,8 @@ #ifdef __KERNEL__ #include -extern inline void copy_siginfo(siginfo_t *to, siginfo_t *from) +static inline void +copy_siginfo (siginfo_t *to, siginfo_t *from) { if (from->si_code < 0) memcpy(to, from, sizeof(siginfo_t)); diff -urN linux-2.4.0-test9/include/asm-ia64/smp.h linux-2.4.0-test9-lia/include/asm-ia64/smp.h --- linux-2.4.0-test9/include/asm-ia64/smp.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/smp.h Thu Oct 5 01:38:51 2000 @@ -25,54 +25,71 @@ #define smp_processor_id() (current->processor) -struct smp_boot_data { +extern struct smp_boot_data { int cpu_count; - int cpu_map[NR_CPUS]; -}; + int cpu_phys_id[NR_CPUS]; +} smp_boot_data __initdata; extern unsigned long cpu_present_map; extern unsigned long cpu_online_map; extern unsigned long ipi_base_addr; extern int bootstrap_processor; -extern volatile int __cpu_number_map[NR_CPUS]; -extern volatile int __cpu_logical_map[NR_CPUS]; +extern volatile int __cpu_physical_id[NR_CPUS]; extern unsigned char smp_int_redirect; extern char no_int_routing; - -#define cpu_number_map(i) __cpu_number_map[i] -#define cpu_logical_map(i) __cpu_logical_map[i] +extern int smp_num_cpus; + +#define cpu_physical_id(i) __cpu_physical_id[i] +#define cpu_number_map(i) (i) +#define cpu_logical_map(i) (i) extern unsigned long ap_wakeup_vector; /* + * Function to map hard smp processor id to logical id. Slow, so + * don't use this in performance-critical code. + */ +static inline int +cpu_logical_id (int cpuid) +{ + int i; + + for (i=0; i NR_CPUS) - printk("WARNING: SMP ID %d > NR_CPUS\n", (lid.id << 8) | lid.eid); - return lid.id; -#endif + return lid.id << 8 | lid.eid; } #define NO_PROC_ID (-1) diff -urN linux-2.4.0-test9/include/asm-ia64/spinlock.h linux-2.4.0-test9-lia/include/asm-ia64/spinlock.h --- linux-2.4.0-test9/include/asm-ia64/spinlock.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/spinlock.h Thu Oct 5 01:38:51 2000 @@ -29,48 +29,42 @@ * Streamlined test_and_set_bit(0, (x)). We use test-and-test-and-set * rather than a simple xchg to avoid writing the cache-line when * there is contention. - * - * XXX Fix me: instead of preserving ar.pfs, we should just mark it - * XXX as "clobbered". Unfortunately, the Mar 2000 release of the compiler - * XXX doesn't let us do that. The August release fixes that. */ -#define spin_lock(x) \ -{ \ +#define spin_lock(x) \ +{ \ + register char *addr __asm__ ("r31") = (char *) &(x)->lock; \ + \ + __asm__ __volatile__ ( \ + "mov r30=1\n" \ + "mov ar.ccv=r0\n" \ + ";;\n" \ + IA64_SEMFIX"cmpxchg1.acq r30=[%0],r30,ar.ccv\n" \ + ";;\n" \ + "cmp.ne p15,p0=r30,r0\n" \ + "(p15) br.call.spnt.few b7=ia64_spinlock_contention\n" \ + ";;\n" \ + "1:\n" /* force a new bundle */ \ + :: "r"(addr) \ + : "ar.ccv", "ar.pfs", "b7", "p15", "r28", "r29", "r30", "memory"); \ +} + +#define spin_trylock(x) \ +({ \ register char *addr __asm__ ("r31") = (char *) &(x)->lock; \ - long saved_pfs; \ + register long result; \ \ __asm__ __volatile__ ( \ "mov r30=1\n" \ "mov ar.ccv=r0\n" \ ";;\n" \ - IA64_SEMFIX"cmpxchg1.acq r30=[%1],r30,ar.ccv\n" \ - ";;\n" \ - "cmp.ne p15,p0=r30,r0\n" \ - "mov %0=ar.pfs\n" \ - "(p15) br.call.spnt.few b7=ia64_spinlock_contention\n" \ - ";;\n" \ - "1: (p15) mov ar.pfs=%0;;\n" /* force a new bundle */ \ - : "=&r"(saved_pfs) : "r"(addr) \ - : "p15", "r28", "r29", "r30", "memory"); \ -} - -#define spin_trylock(x) \ -({ \ - register char *addr __asm__ ("r31") = (char *) &(x)->lock; \ - register long result; \ - \ - __asm__ __volatile__ ( \ - "mov r30=1\n" \ - "mov ar.ccv=r0\n" \ - ";;\n" \ - IA64_SEMFIX"cmpxchg1.acq %0=[%1],r30,ar.ccv\n" \ - : "=r"(result) : "r"(addr) : "r30", "memory"); \ - (result == 0); \ + IA64_SEMFIX"cmpxchg1.acq %0=[%1],r30,ar.ccv\n" \ + : "=r"(result) : "r"(addr) : "ar.ccv", "r30", "memory"); \ + (result == 0); \ }) #define spin_is_locked(x) ((x)->lock != 0) -#define spin_unlock(x) ({((spinlock_t *) x)->lock = 0;}) -#define spin_unlock_wait(x) ({ while ((x)->lock); }) +#define spin_unlock(x) do {((spinlock_t *) x)->lock = 0;} while (0) +#define spin_unlock_wait(x) do {} while ((x)->lock) #else /* !NEW_LOCK */ @@ -91,21 +85,21 @@ "mov r29 = 1\n" \ ";;\n" \ "1:\n" \ - "ld4 r2 = %0\n" \ + "ld4 r2 = [%0]\n" \ ";;\n" \ "cmp4.eq p0,p7 = r0,r2\n" \ "(p7) br.cond.spnt.few 1b \n" \ - IA64_SEMFIX"cmpxchg4.acq r2 = %0, r29, ar.ccv\n" \ + IA64_SEMFIX"cmpxchg4.acq r2 = [%0], r29, ar.ccv\n" \ ";;\n" \ "cmp4.eq p0,p7 = r0, r2\n" \ "(p7) br.cond.spnt.few 1b\n" \ ";;\n" \ - :: "m" __atomic_fool_gcc((x)) : "r2", "r29", "memory") + :: "r"(&(x)->lock) : "r2", "r29", "memory") #define spin_is_locked(x) ((x)->lock != 0) -#define spin_unlock(x) ({((spinlock_t *) x)->lock = 0; barrier();}) +#define spin_unlock(x) do {((spinlock_t *) x)->lock = 0; barrier(); } while (0) #define spin_trylock(x) (cmpxchg_acq(&(x)->lock, 0, 1) == 0) -#define spin_unlock_wait(x) ({ do { barrier(); } while ((x)->lock); }) +#define spin_unlock_wait(x) do { barrier(); } while ((x)->lock) #endif /* !NEW_LOCK */ @@ -115,44 +109,54 @@ } rwlock_t; #define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0 } -#define read_lock(rw) \ -do { \ - int tmp = 0; \ - __asm__ __volatile__ ("1:\t"IA64_SEMFIX"fetchadd4.acq %0 = %1, 1\n" \ - ";;\n" \ - "tbit.nz p6,p0 = %0, 31\n" \ - "(p6) br.cond.sptk.few 2f\n" \ - ".section .text.lock,\"ax\"\n" \ - "2:\t"IA64_SEMFIX"fetchadd4.rel %0 = %1, -1\n" \ - ";;\n" \ - "3:\tld4.acq %0 = %1\n" \ - ";;\n" \ - "tbit.nz p6,p0 = %0, 31\n" \ - "(p6) br.cond.sptk.few 3b\n" \ - "br.cond.sptk.few 1b\n" \ - ";;\n" \ - ".previous\n" \ - : "=r" (tmp), "=m" (__atomic_fool_gcc(rw)) \ - :: "memory"); \ +#define read_lock(rw) \ +do { \ + int tmp = 0; \ + __asm__ __volatile__ ("1:\t"IA64_SEMFIX"fetchadd4.acq %0 = [%1], 1\n" \ + ";;\n" \ + "tbit.nz p6,p0 = %0, 31\n" \ + "(p6) br.cond.sptk.few 2f\n" \ + ".section .text.lock,\"ax\"\n" \ + "2:\t"IA64_SEMFIX"fetchadd4.rel %0 = [%1], -1\n" \ + ";;\n" \ + "3:\tld4.acq %0 = [%1]\n" \ + ";;\n" \ + "tbit.nz p6,p0 = %0, 31\n" \ + "(p6) br.cond.sptk.few 3b\n" \ + "br.cond.sptk.few 1b\n" \ + ";;\n" \ + ".previous\n" \ + : "=&r" (tmp) \ + : "r" (rw): "memory"); \ } while(0) -#define read_unlock(rw) \ -do { \ - int tmp = 0; \ - __asm__ __volatile__ (IA64_SEMFIX"fetchadd4.rel %0 = %1, -1\n" \ - : "=r" (tmp) \ - : "m" (__atomic_fool_gcc(rw)) \ - : "memory"); \ +#define read_unlock(rw) \ +do { \ + int tmp = 0; \ + __asm__ __volatile__ (IA64_SEMFIX"fetchadd4.rel %0 = [%1], -1\n" \ + : "=r" (tmp) \ + : "r" (rw) \ + : "memory"); \ } while(0) -#define write_lock(rw) \ -do { \ - do { \ - while ((rw)->write_lock); \ - } while (test_and_set_bit(31, (rw))); \ - while ((rw)->read_counter); \ - barrier(); \ -} while (0) +#define write_lock(rw) \ +do { \ + __asm__ __volatile__ ( \ + "mov ar.ccv = r0\n" \ + "movl r29 = 0x80000000\n" \ + ";;\n" \ + "1:\n" \ + "ld4 r2 = [%0]\n" \ + ";;\n" \ + "cmp4.eq p0,p7 = r0,r2\n" \ + "(p7) br.cond.spnt.few 1b \n" \ + IA64_SEMFIX"cmpxchg4.acq r2 = [%0], r29, ar.ccv\n" \ + ";;\n" \ + "cmp4.eq p0,p7 = r0, r2\n" \ + "(p7) br.cond.spnt.few 1b\n" \ + ";;\n" \ + :: "r"(rw) : "r2", "r29", "memory"); \ +} while(0) /* * clear_bit() has "acq" semantics; we're really need "rel" semantics, diff -urN linux-2.4.0-test9/include/asm-ia64/string.h linux-2.4.0-test9-lia/include/asm-ia64/string.h --- linux-2.4.0-test9/include/asm-ia64/string.h Wed Aug 2 18:54:53 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/string.h Fri Aug 25 02:06:53 2000 @@ -9,6 +9,9 @@ * Copyright (C) 1998-2000 David Mosberger-Tang */ +#include /* remove this once we remove the A-step workaround... */ +#ifndef CONFIG_ITANIUM_ASTEP_SPECIFIC + #define __HAVE_ARCH_STRLEN 1 /* see arch/ia64/lib/strlen.S */ #define __HAVE_ARCH_MEMSET 1 /* see arch/ia64/lib/memset.S */ #define __HAVE_ARCH_MEMCPY 1 /* see arch/ia64/lib/memcpy.S */ @@ -17,5 +20,7 @@ extern __kernel_size_t strlen (const char *); extern void *memset (void *, int, __kernel_size_t); extern void *memcpy (void *, const void *, __kernel_size_t); + +#endif /* CONFIG_ITANIUM_ASTEP_SPECIFIC */ #endif /* _ASM_IA64_STRING_H */ diff -urN linux-2.4.0-test9/include/asm-ia64/system.h linux-2.4.0-test9-lia/include/asm-ia64/system.h --- linux-2.4.0-test9/include/asm-ia64/system.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/system.h Thu Oct 5 01:38:51 2000 @@ -38,6 +38,7 @@ #ifndef __ASSEMBLY__ +#include #include struct pci_vector_struct { @@ -67,7 +68,7 @@ __u64 initrd_size; } ia64_boot_param; -extern inline void +static inline void ia64_insn_group_barrier (void) { __asm__ __volatile__ (";;" ::: "memory"); @@ -99,6 +100,16 @@ #define rmb() mb() #define wmb() mb() +#ifdef CONFIG_SMP +# define smp_mb() mb() +# define smp_rmb() rmb() +# define smp_wmb() wmb() +#else +# define smp_mb() barrier() +# define smp_rmb() barrier() +# define smp_wmb() barrier() +#endif + /* * XXX check on these---I suspect what Linus really wants here is * acquire vs release semantics but we can't discuss this stuff with @@ -240,15 +251,13 @@ ({ \ switch (sz) { \ case 4: \ - __asm__ __volatile__ (IA64_SEMFIX"fetchadd4.rel %0=%1,%3" \ - : "=r"(tmp), "=m"(__atomic_fool_gcc(v)) \ - : "m" (__atomic_fool_gcc(v)), "i"(n)); \ + __asm__ __volatile__ (IA64_SEMFIX"fetchadd4.rel %0=[%1],%2" \ + : "=r"(tmp) : "r"(v), "i"(n) : "memory"); \ break; \ \ case 8: \ - __asm__ __volatile__ (IA64_SEMFIX"fetchadd8.rel %0=%1,%3" \ - : "=r"(tmp), "=m"(__atomic_fool_gcc(v)) \ - : "m" (__atomic_fool_gcc(v)), "i"(n)); \ + __asm__ __volatile__ (IA64_SEMFIX"fetchadd8.rel %0=[%1],%2" \ + : "=r"(tmp) : "r"(v), "i"(n) : "memory"); \ break; \ \ default: \ @@ -289,23 +298,23 @@ switch (size) { case 1: - __asm__ __volatile (IA64_SEMFIX"xchg1 %0=%1,%2" : "=r" (result) - : "m" (*(char *) ptr), "r" (x) : "memory"); + __asm__ __volatile (IA64_SEMFIX"xchg1 %0=[%1],%2" : "=r" (result) + : "r" (ptr), "r" (x) : "memory"); return result; case 2: - __asm__ __volatile (IA64_SEMFIX"xchg2 %0=%1,%2" : "=r" (result) - : "m" (*(short *) ptr), "r" (x) : "memory"); + __asm__ __volatile (IA64_SEMFIX"xchg2 %0=[%1],%2" : "=r" (result) + : "r" (ptr), "r" (x) : "memory"); return result; case 4: - __asm__ __volatile (IA64_SEMFIX"xchg4 %0=%1,%2" : "=r" (result) - : "m" (*(int *) ptr), "r" (x) : "memory"); + __asm__ __volatile (IA64_SEMFIX"xchg4 %0=[%1],%2" : "=r" (result) + : "r" (ptr), "r" (x) : "memory"); return result; case 8: - __asm__ __volatile (IA64_SEMFIX"xchg8 %0=%1,%2" : "=r" (result) - : "m" (*(long *) ptr), "r" (x) : "memory"); + __asm__ __volatile (IA64_SEMFIX"xchg8 %0=[%1],%2" : "=r" (result) + : "r" (ptr), "r" (x) : "memory"); return result; } __xchg_called_with_bad_pointer(); @@ -329,9 +338,6 @@ */ extern long __cmpxchg_called_with_bad_pointer(void); -struct __xchg_dummy { unsigned long a[100]; }; -#define __xg(x) (*(struct __xchg_dummy *)(x)) - #define ia64_cmpxchg(sem,ptr,old,new,size) \ ({ \ __typeof__(ptr) _p_ = (ptr); \ @@ -348,27 +354,23 @@ __asm__ __volatile__ ("mov ar.ccv=%0;;" :: "rO"(_o_)); \ switch (size) { \ case 1: \ - __asm__ __volatile__ (IA64_SEMFIX"cmpxchg1."sem" %0=%2,%3,ar.ccv" \ - : "=r"(_r_), "=m"(__xg(_p_)) \ - : "m"(__xg(_p_)), "r"(_n_)); \ + __asm__ __volatile__ (IA64_SEMFIX"cmpxchg1."sem" %0=[%1],%2,ar.ccv" \ + : "=r"(_r_) : "r"(_p_), "r"(_n_) : "memory"); \ break; \ \ case 2: \ - __asm__ __volatile__ (IA64_SEMFIX"cmpxchg2."sem" %0=%2,%3,ar.ccv" \ - : "=r"(_r_), "=m"(__xg(_p_)) \ - : "m"(__xg(_p_)), "r"(_n_)); \ + __asm__ __volatile__ (IA64_SEMFIX"cmpxchg2."sem" %0=[%1],%2,ar.ccv" \ + : "=r"(_r_) : "r"(_p_), "r"(_n_) : "memory"); \ break; \ \ case 4: \ - __asm__ __volatile__ (IA64_SEMFIX"cmpxchg4."sem" %0=%2,%3,ar.ccv" \ - : "=r"(_r_), "=m"(__xg(_p_)) \ - : "m"(__xg(_p_)), "r"(_n_)); \ + __asm__ __volatile__ (IA64_SEMFIX"cmpxchg4."sem" %0=[%1],%2,ar.ccv" \ + : "=r"(_r_) : "r"(_p_), "r"(_n_) : "memory"); \ break; \ \ case 8: \ - __asm__ __volatile__ (IA64_SEMFIX"cmpxchg8."sem" %0=%2,%3,ar.ccv" \ - : "=r"(_r_), "=m"(__xg(_p_)) \ - : "m"(__xg(_p_)), "r"(_n_)); \ + __asm__ __volatile__ (IA64_SEMFIX"cmpxchg8."sem" %0=[%1],%2,ar.ccv" \ + : "=r"(_r_) : "r"(_p_), "r"(_n_) : "memory"); \ break; \ \ default: \ @@ -433,33 +435,31 @@ if (((next)->thread.flags & (IA64_THREAD_DBG_VALID|IA64_THREAD_PM_VALID)) \ || IS_IA32_PROCESS(ia64_task_regs(next))) \ ia64_load_extra(next); \ - ia64_psr(ia64_task_regs(next))->dfh = (ia64_get_fpu_owner() != (next)); \ (last) = ia64_switch_to((next)); \ } while (0) #ifdef CONFIG_SMP /* * In the SMP case, we save the fph state when context-switching - * away from a thread that owned and modified fph. This way, when - * the thread gets scheduled on another CPU, the CPU can pick up the - * state frm task->thread.fph, avoiding the complication of having - * to fetch the latest fph state from another CPU. If the thread - * happens to be rescheduled on the same CPU later on and nobody - * else has touched the FPU in the meantime, the thread will fault - * upon the first access to fph but since the state in fph is still - * valid, no other overheads are incurred. In other words, CPU - * affinity is a Good Thing. + * away from a thread that modified fph. This way, when the thread + * gets scheduled on another CPU, the CPU can pick up the state from + * task->thread.fph, avoiding the complication of having to fetch + * the latest fph state from another CPU. */ -# define switch_to(prev,next,last) do { \ - if (ia64_get_fpu_owner() == (prev) && ia64_psr(ia64_task_regs(prev))->mfh) { \ - ia64_psr(ia64_task_regs(prev))->mfh = 0; \ - (prev)->thread.flags |= IA64_THREAD_FPH_VALID; \ - __ia64_save_fpu((prev)->thread.fph); \ - } \ - __switch_to(prev,next,last); \ +# define switch_to(prev,next,last) do { \ + if (ia64_psr(ia64_task_regs(prev))->mfh) { \ + ia64_psr(ia64_task_regs(prev))->mfh = 0; \ + (prev)->thread.flags |= IA64_THREAD_FPH_VALID; \ + __ia64_save_fpu((prev)->thread.fph); \ + } \ + ia64_psr(ia64_task_regs(prev))->dfh = 1; \ + __switch_to(prev,next,last); \ } while (0) #else -# define switch_to(prev,next,last) __switch_to(prev,next,last) +# define switch_to(prev,next,last) do { \ + ia64_psr(ia64_task_regs(next))->dfh = (ia64_get_fpu_owner() != (next)); \ + __switch_to(prev,next,last); \ +} while (0) #endif #endif /* __KERNEL__ */ diff -urN linux-2.4.0-test9/include/asm-ia64/uaccess.h linux-2.4.0-test9-lia/include/asm-ia64/uaccess.h --- linux-2.4.0-test9/include/asm-ia64/uaccess.h Fri Sep 8 14:34:59 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/uaccess.h Thu Oct 5 01:38:51 2000 @@ -61,7 +61,7 @@ #define __access_ok(addr,size,segment) (((unsigned long) (addr)) <= (segment).seg) #define access_ok(type,addr,size) __access_ok((addr),(size),get_fs()) -extern inline int +static inline int verify_area (int type, const void *addr, unsigned long size) { return access_ok(type,addr,size) ? 0 : -EFAULT; @@ -126,7 +126,7 @@ #define __m(x) (*(struct __large_struct *)(x)) #define __get_user_64(addr) \ - __asm__ ("\n1:\tld8 %0=%2\t// %0 and %1 get overwritten by exception handler\n" \ + __asm__ ("\n1:\tld8 %0=%2%P2\t// %0 and %1 get overwritten by exception handler\n" \ "2:\n" \ "\t.section __ex_table,\"a\"\n" \ "\t\tdata4 @gprel(1b)\n" \ @@ -136,7 +136,7 @@ : "m"(__m(addr)), "1"(__gu_err)); #define __get_user_32(addr) \ - __asm__ ("\n1:\tld4 %0=%2\t// %0 and %1 get overwritten by exception handler\n" \ + __asm__ ("\n1:\tld4 %0=%2%P2\t// %0 and %1 get overwritten by exception handler\n" \ "2:\n" \ "\t.section __ex_table,\"a\"\n" \ "\t\tdata4 @gprel(1b)\n" \ @@ -146,7 +146,7 @@ : "m"(__m(addr)), "1"(__gu_err)); #define __get_user_16(addr) \ - __asm__ ("\n1:\tld2 %0=%2\t// %0 and %1 get overwritten by exception handler\n" \ + __asm__ ("\n1:\tld2 %0=%2%P2\t// %0 and %1 get overwritten by exception handler\n" \ "2:\n" \ "\t.section __ex_table,\"a\"\n" \ "\t\tdata4 @gprel(1b)\n" \ @@ -156,7 +156,7 @@ : "m"(__m(addr)), "1"(__gu_err)); #define __get_user_8(addr) \ - __asm__ ("\n1:\tld1 %0=%2\t// %0 and %1 get overwritten by exception handler\n" \ + __asm__ ("\n1:\tld1 %0=%2%P2\t// %0 and %1 get overwritten by exception handler\n" \ "2:\n" \ "\t.section __ex_table,\"a\"\n" \ "\t\tdata4 @gprel(1b)\n" \ @@ -205,7 +205,7 @@ */ #define __put_user_64(x,addr) \ __asm__ __volatile__ ( \ - "\n1:\tst8 %1=%r2\t// %0 gets overwritten by exception handler\n" \ + "\n1:\tst8 %1=%r2%P1\t// %0 gets overwritten by exception handler\n" \ "2:\n" \ "\t.section __ex_table,\"a\"\n" \ "\t\tdata4 @gprel(1b)\n" \ @@ -216,7 +216,7 @@ #define __put_user_32(x,addr) \ __asm__ __volatile__ ( \ - "\n1:\tst4 %1=%r2\t// %0 gets overwritten by exception handler\n" \ + "\n1:\tst4 %1=%r2%P1\t// %0 gets overwritten by exception handler\n" \ "2:\n" \ "\t.section __ex_table,\"a\"\n" \ "\t\tdata4 @gprel(1b)\n" \ @@ -227,7 +227,7 @@ #define __put_user_16(x,addr) \ __asm__ __volatile__ ( \ - "\n1:\tst2 %1=%r2\t// %0 gets overwritten by exception handler\n" \ + "\n1:\tst2 %1=%r2%P1\t// %0 gets overwritten by exception handler\n" \ "2:\n" \ "\t.section __ex_table,\"a\"\n" \ "\t\tdata4 @gprel(1b)\n" \ @@ -238,7 +238,7 @@ #define __put_user_8(x,addr) \ __asm__ __volatile__ ( \ - "\n1:\tst1 %1=%r2\t// %0 gets overwritten by exception handler\n" \ + "\n1:\tst1 %1=%r2%P1\t// %0 gets overwritten by exception handler\n" \ "2:\n" \ "\t.section __ex_table,\"a\"\n" \ "\t\tdata4 @gprel(1b)\n" \ diff -urN linux-2.4.0-test9/include/asm-ia64/unaligned.h linux-2.4.0-test9-lia/include/asm-ia64/unaligned.h --- linux-2.4.0-test9/include/asm-ia64/unaligned.h Sun Feb 6 18:42:40 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/unaligned.h Wed Oct 4 21:52:08 2000 @@ -22,42 +22,42 @@ struct __una_u32 { __u32 x __attribute__((packed)); }; struct __una_u16 { __u16 x __attribute__((packed)); }; -extern inline unsigned long +static inline unsigned long __uldq (const unsigned long * r11) { const struct __una_u64 *ptr = (const struct __una_u64 *) r11; return ptr->x; } -extern inline unsigned long +static inline unsigned long __uldl (const unsigned int * r11) { const struct __una_u32 *ptr = (const struct __una_u32 *) r11; return ptr->x; } -extern inline unsigned long +static inline unsigned long __uldw (const unsigned short * r11) { const struct __una_u16 *ptr = (const struct __una_u16 *) r11; return ptr->x; } -extern inline void +static inline void __ustq (unsigned long r5, unsigned long * r11) { struct __una_u64 *ptr = (struct __una_u64 *) r11; ptr->x = r5; } -extern inline void +static inline void __ustl (unsigned long r5, unsigned int * r11) { struct __una_u32 *ptr = (struct __una_u32 *) r11; ptr->x = r5; } -extern inline void +static inline void __ustw (unsigned long r5, unsigned short * r11) { struct __una_u16 *ptr = (struct __una_u16 *) r11; diff -urN linux-2.4.0-test9/include/asm-ia64/unistd.h linux-2.4.0-test9-lia/include/asm-ia64/unistd.h --- linux-2.4.0-test9/include/asm-ia64/unistd.h Wed Sep 13 18:25:40 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/unistd.h Wed Oct 4 21:52:16 2000 @@ -93,7 +93,7 @@ #define __NR_setpriority 1102 #define __NR_statfs 1103 #define __NR_fstatfs 1104 -#define __NR_ioperm 1105 +/* unused; used to be __NR_ioperm */ #define __NR_semget 1106 #define __NR_semop 1107 #define __NR_semctl 1108 diff -urN linux-2.4.0-test9/include/asm-ia64/unistd.h~ linux-2.4.0-test9-lia/include/asm-ia64/unistd.h~ --- linux-2.4.0-test9/include/asm-ia64/unistd.h~ Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/unistd.h~ Wed Dec 31 16:00:00 1969 @@ -1,312 +0,0 @@ -#ifndef _ASM_IA64_UNISTD_H -#define _ASM_IA64_UNISTD_H - -/* - * IA-64 Linux syscall numbers and inline-functions. - * - * Copyright (C) 1998-2000 Hewlett-Packard Co - * Copyright (C) 1998-2000 David Mosberger-Tang - */ - -#include - -#define __BREAK_SYSCALL __IA64_BREAK_SYSCALL - -#define __NR_ni_syscall 1024 -#define __NR_exit 1025 -#define __NR_read 1026 -#define __NR_write 1027 -#define __NR_open 1028 -#define __NR_close 1029 -#define __NR_creat 1030 -#define __NR_link 1031 -#define __NR_unlink 1032 -#define __NR_execve 1033 -#define __NR_chdir 1034 -#define __NR_fchdir 1035 -#define __NR_utimes 1036 -#define __NR_mknod 1037 -#define __NR_chmod 1038 -#define __NR_chown 1039 -#define __NR_lseek 1040 -#define __NR_getpid 1041 -#define __NR_getppid 1042 -#define __NR_mount 1043 -#define __NR_umount 1044 -#define __NR_setuid 1045 -#define __NR_getuid 1046 -#define __NR_geteuid 1047 -#define __NR_ptrace 1048 -#define __NR_access 1049 -#define __NR_sync 1050 -#define __NR_fsync 1051 -#define __NR_fdatasync 1052 -#define __NR_kill 1053 -#define __NR_rename 1054 -#define __NR_mkdir 1055 -#define __NR_rmdir 1056 -#define __NR_dup 1057 -#define __NR_pipe 1058 -#define __NR_times 1059 -#define __NR_brk 1060 -#define __NR_setgid 1061 -#define __NR_getgid 1062 -#define __NR_getegid 1063 -#define __NR_acct 1064 -#define __NR_ioctl 1065 -#define __NR_fcntl 1066 -#define __NR_umask 1067 -#define __NR_chroot 1068 -#define __NR_ustat 1069 -#define __NR_dup2 1070 -#define __NR_setreuid 1071 -#define __NR_setregid 1072 -#define __NR_getresuid 1073 -#define __NR_setresuid 1074 -#define __NR_getresgid 1075 -#define __NR_setresgid 1076 -#define __NR_getgroups 1077 -#define __NR_setgroups 1078 -#define __NR_getpgid 1079 -#define __NR_setpgid 1080 -#define __NR_setsid 1081 -#define __NR_getsid 1082 -#define __NR_sethostname 1083 -#define __NR_setrlimit 1084 -#define __NR_getrlimit 1085 -#define __NR_getrusage 1086 -#define __NR_gettimeofday 1087 -#define __NR_settimeofday 1088 -#define __NR_select 1089 -#define __NR_poll 1090 -#define __NR_symlink 1091 -#define __NR_readlink 1092 -#define __NR_uselib 1093 -#define __NR_swapon 1094 -#define __NR_swapoff 1095 -#define __NR_reboot 1096 -#define __NR_truncate 1097 -#define __NR_ftruncate 1098 -#define __NR_fchmod 1099 -#define __NR_fchown 1100 -#define __NR_getpriority 1101 -#define __NR_setpriority 1102 -#define __NR_statfs 1103 -#define __NR_fstatfs 1104 -#define __NR_ioperm 1105 -#define __NR_semget 1106 -#define __NR_semop 1107 -#define __NR_semctl 1108 -#define __NR_msgget 1109 -#define __NR_msgsnd 1110 -#define __NR_msgrcv 1111 -#define __NR_msgctl 1112 -#define __NR_shmget 1113 -#define __NR_shmat 1114 -#define __NR_shmdt 1115 -#define __NR_shmctl 1116 -/* also known as klogctl() in GNU libc: */ -#define __NR_syslog 1117 -#define __NR_setitimer 1118 -#define __NR_getitimer 1119 -#define __NR_old_stat 1120 -#define __NR_old_lstat 1121 -#define __NR_old_fstat 1122 -#define __NR_vhangup 1123 -#define __NR_lchown 1124 -#define __NR_vm86 1125 -#define __NR_wait4 1126 -#define __NR_sysinfo 1127 -#define __NR_clone 1128 -#define __NR_setdomainname 1129 -#define __NR_uname 1130 -#define __NR_adjtimex 1131 -#define __NR_create_module 1132 -#define __NR_init_module 1133 -#define __NR_delete_module 1134 -#define __NR_get_kernel_syms 1135 -#define __NR_query_module 1136 -#define __NR_quotactl 1137 -#define __NR_bdflush 1138 -#define __NR_sysfs 1139 -#define __NR_personality 1140 -#define __NR_afs_syscall 1141 -#define __NR_setfsuid 1142 -#define __NR_setfsgid 1143 -#define __NR_getdents 1144 -#define __NR_flock 1145 -#define __NR_readv 1146 -#define __NR_writev 1147 -#define __NR_pread 1148 -#define __NR_pwrite 1149 -#define __NR__sysctl 1150 -#define __NR_mmap 1151 -#define __NR_munmap 1152 -#define __NR_mlock 1153 -#define __NR_mlockall 1154 -#define __NR_mprotect 1155 -#define __NR_mremap 1156 -#define __NR_msync 1157 -#define __NR_munlock 1158 -#define __NR_munlockall 1159 -#define __NR_sched_getparam 1160 -#define __NR_sched_setparam 1161 -#define __NR_sched_getscheduler 1162 -#define __NR_sched_setscheduler 1163 -#define __NR_sched_yield 1164 -#define __NR_sched_get_priority_max 1165 -#define __NR_sched_get_priority_min 1166 -#define __NR_sched_rr_get_interval 1167 -#define __NR_nanosleep 1168 -#define __NR_nfsservctl 1169 -#define __NR_prctl 1170 -#define __NR_getpagesize 1171 -#define __NR_mmap2 1172 -#define __NR_pciconfig_read 1173 -#define __NR_pciconfig_write 1174 -#define __NR_perfmonctl 1175 -#define __NR_sigaltstack 1176 -#define __NR_rt_sigaction 1177 -#define __NR_rt_sigpending 1178 -#define __NR_rt_sigprocmask 1179 -#define __NR_rt_sigqueueinfo 1180 -#define __NR_rt_sigreturn 1181 -#define __NR_rt_sigsuspend 1182 -#define __NR_rt_sigtimedwait 1183 -#define __NR_getcwd 1184 -#define __NR_capget 1185 -#define __NR_capset 1186 -#define __NR_sendfile 1187 -#define __NR_getpmsg 1188 -#define __NR_putpmsg 1189 -#define __NR_socket 1190 -#define __NR_bind 1191 -#define __NR_connect 1192 -#define __NR_listen 1193 -#define __NR_accept 1194 -#define __NR_getsockname 1195 -#define __NR_getpeername 1196 -#define __NR_socketpair 1197 -#define __NR_send 1198 -#define __NR_sendto 1199 -#define __NR_recv 1200 -#define __NR_recvfrom 1201 -#define __NR_shutdown 1202 -#define __NR_setsockopt 1203 -#define __NR_getsockopt 1204 -#define __NR_sendmsg 1205 -#define __NR_recvmsg 1206 -#define __NR_sys_pivot_root 1207 -#define __NR_mincore 1208 -#define __NR_madvise 1209 -#define __NR_stat 1210 -#define __NR_lstat 1211 -#define __NR_fstat 1212 -#define __NR_clone2 1213 -#define __NR_getdents64 1214 - -#if !defined(__ASSEMBLY__) && !defined(ASSEMBLER) - -extern long __ia64_syscall (long a0, long a1, long a2, long a3, long a4, long nr); - -#define _syscall0(type,name) \ -type \ -name (void) \ -{ \ - register long dummy1 __asm__ ("out0"); \ - register long dummy2 __asm__ ("out1"); \ - register long dummy3 __asm__ ("out2"); \ - register long dummy4 __asm__ ("out3"); \ - register long dummy5 __asm__ ("out4"); \ - \ - return __ia64_syscall(dummy1, dummy2, dummy3, dummy4, dummy5, \ - __NR_##name); \ -} - -#define _syscall1(type,name,type1,arg1) \ -type \ -name (type1 arg1) \ -{ \ - register long dummy2 __asm__ ("out1"); \ - register long dummy3 __asm__ ("out2"); \ - register long dummy4 __asm__ ("out3"); \ - register long dummy5 __asm__ ("out4"); \ - \ - return __ia64_syscall((long) arg1, dummy2, dummy3, dummy4, \ - dummy5, __NR_##name); \ -} - -#define _syscall2(type,name,type1,arg1,type2,arg2) \ -type \ -name (type1 arg1, type2 arg2) \ -{ \ - register long dummy3 __asm__ ("out2"); \ - register long dummy4 __asm__ ("out3"); \ - register long dummy5 __asm__ ("out4"); \ - \ - return __ia64_syscall((long) arg1, (long) arg2, dummy3, dummy4, \ - dummy5, __NR_##name); \ -} - -#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ -type \ -name (type1 arg1, type2 arg2, type3 arg3) \ -{ \ - register long dummy4 __asm__ ("out3"); \ - register long dummy5 __asm__ ("out4"); \ - \ - return __ia64_syscall((long) arg1, (long) arg2, (long) arg3, \ - dummy4, dummy5, __NR_##name); \ -} - -#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ -type \ -name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ -{ \ - register long dummy5 __asm__ ("out4"); \ - \ - return __ia64_syscall((long) arg1, (long) arg2, (long) arg3, \ - (long) arg4, dummy5, __NR_##name); \ -} - -#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ -type \ -name (type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ -{ \ - return __ia64_syscall((long) arg1, (long) arg2, (long) arg3, \ - (long) arg4, (long) arg5, __NR_##name); \ -} - -#ifdef __KERNEL_SYSCALLS__ - -static inline _syscall0(int,sync) -static inline _syscall0(pid_t,setsid) -static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count) -static inline _syscall3(int,read,int,fd,char *,buf,off_t,count) -static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count) -static inline _syscall1(int,dup,int,fd) -static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp) -static inline _syscall3(int,open,const char *,file,int,flag,int,mode) -static inline _syscall1(int,close,int,fd) -static inline _syscall4(pid_t,wait4,pid_t,pid,int *,wait_stat,int,options,struct rusage*, rusage) -static inline _syscall1(int,delete_module,const char *,name) -static inline _syscall2(pid_t,clone,unsigned long,flags,void*,sp); - -#define __NR__exit __NR_exit -static inline _syscall1(int,_exit,int,exitcode) - -static inline pid_t -waitpid (int pid, int *wait_stat, int flags) -{ - return wait4(pid, wait_stat, flags, NULL); -} - -static inline pid_t -wait (int * wait_stat) -{ - return wait4(-1, wait_stat, 0, 0); -} - -#endif /* __KERNEL_SYSCALLS__ */ -#endif /* !__ASSEMBLY__ */ -#endif /* _ASM_IA64_UNISTD_H */ diff -urN linux-2.4.0-test9/include/asm-ia64/unwind.h linux-2.4.0-test9-lia/include/asm-ia64/unwind.h --- linux-2.4.0-test9/include/asm-ia64/unwind.h Thu Jun 22 07:09:45 2000 +++ linux-2.4.0-test9-lia/include/asm-ia64/unwind.h Wed Oct 4 21:52:27 2000 @@ -52,36 +52,38 @@ unsigned int flags; short hint; short prev_script; - unsigned long bsp; - unsigned long sp; /* stack pointer */ - unsigned long psp; /* previous sp */ - unsigned long ip; /* instruction pointer */ - unsigned long pr_val; /* current predicates */ - unsigned long *cfm; + + /* current frame info: */ + unsigned long bsp; /* backing store pointer value */ + unsigned long sp; /* stack pointer value */ + unsigned long psp; /* previous sp value */ + unsigned long ip; /* instruction pointer value */ + unsigned long pr; /* current predicate values */ + unsigned long *cfm_loc; /* cfm save location (or NULL) */ struct task_struct *task; struct switch_stack *sw; /* preserved state: */ - unsigned long *pbsp; /* previous bsp */ - unsigned long *bspstore; - unsigned long *pfs; - unsigned long *rnat; - unsigned long *rp; - unsigned long *pri_unat; - unsigned long *unat; - unsigned long *pr; - unsigned long *lc; - unsigned long *fpsr; + unsigned long *bsp_loc; /* previous bsp save location */ + unsigned long *bspstore_loc; + unsigned long *pfs_loc; + unsigned long *rnat_loc; + unsigned long *rp_loc; + unsigned long *pri_unat_loc; + unsigned long *unat_loc; + unsigned long *pr_loc; + unsigned long *lc_loc; + unsigned long *fpsr_loc; struct unw_ireg { unsigned long *loc; struct unw_ireg_nat { - int type : 3; /* enum unw_nat_type */ - signed int off; /* NaT word is at loc+nat.off */ + long type : 3; /* enum unw_nat_type */ + signed long off : 61; /* NaT word is at loc+nat.off */ } nat; } r4, r5, r6, r7; - unsigned long *b1, *b2, *b3, *b4, *b5; - struct ia64_fpreg *f2, *f3, *f4, *f5, *fr[16]; + unsigned long *b1_loc, *b2_loc, *b3_loc, *b4_loc, *b5_loc; + struct ia64_fpreg *f2_loc, *f3_loc, *f4_loc, *f5_loc, *fr_loc[16]; }; /* @@ -140,19 +142,56 @@ */ extern int unw_unwind_to_user (struct unw_frame_info *info); -#define unw_get_ip(info,vp) ({*(vp) = (info)->ip; 0;}) -#define unw_get_sp(info,vp) ({*(vp) = (unsigned long) (info)->sp; 0;}) -#define unw_get_psp(info,vp) ({*(vp) = (unsigned long) (info)->psp; 0;}) -#define unw_get_bsp(info,vp) ({*(vp) = (unsigned long) (info)->bsp; 0;}) -#define unw_get_cfm(info,vp) ({*(vp) = *(info)->cfm; 0;}) -#define unw_set_cfm(info,val) ({*(info)->cfm = (val); 0;}) +#define unw_is_intr_frame(info) (((info)->flags & UNW_FLAG_INTERRUPT_FRAME) != 0) + +static inline unsigned long +unw_get_ip (struct unw_frame_info *info, unsigned long *valp) +{ + *valp = (info)->ip; + return 0; +} + +static inline unsigned long +unw_get_sp (struct unw_frame_info *info, unsigned long *valp) +{ + *valp = (info)->sp; + return 0; +} + +static inline unsigned long +unw_get_psp (struct unw_frame_info *info, unsigned long *valp) +{ + *valp = (info)->psp; + return 0; +} + +static inline unsigned long +unw_get_bsp (struct unw_frame_info *info, unsigned long *valp) +{ + *valp = (info)->bsp; + return 0; +} + +static inline unsigned long +unw_get_cfm (struct unw_frame_info *info, unsigned long *valp) +{ + *valp = *(info)->cfm_loc; + return 0; +} + +static inline unsigned long +unw_set_cfm (struct unw_frame_info *info, unsigned long val) +{ + *(info)->cfm_loc = val; + return 0; +} static inline int unw_get_rp (struct unw_frame_info *info, unsigned long *val) { - if (!info->rp) + if (!info->rp_loc) return -1; - *val = *info->rp; + *val = *info->rp_loc; return 0; } diff -urN linux-2.4.0-test9/include/asm-m68k/module.h linux-2.4.0-test9-lia/include/asm-m68k/module.h --- linux-2.4.0-test9/include/asm-m68k/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-m68k/module.h Wed Sep 13 13:50:35 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_M68K_MODULE_H +#define _ASM_M68K_MODULE_H +/* + * This file contains the m68k architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_M68K_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-m68k/pgtable.h linux-2.4.0-test9-lia/include/asm-m68k/pgtable.h --- linux-2.4.0-test9/include/asm-m68k/pgtable.h Thu Aug 10 19:56:31 2000 +++ linux-2.4.0-test9-lia/include/asm-m68k/pgtable.h Wed Sep 13 13:50:37 2000 @@ -390,9 +390,6 @@ #endif /* __ASSEMBLY__ */ -#define module_map vmalloc -#define module_unmap vfree - /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define PageSkip(page) (0) #define kern_addr_valid(addr) (1) diff -urN linux-2.4.0-test9/include/asm-mips/module.h linux-2.4.0-test9-lia/include/asm-mips/module.h --- linux-2.4.0-test9/include/asm-mips/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-mips/module.h Wed Sep 13 13:50:47 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_MIPS_MODULE_H +#define _ASM_MIPS_MODULE_H +/* + * This file contains the mips architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_MIPS_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-mips/pgtable.h linux-2.4.0-test9-lia/include/asm-mips/pgtable.h --- linux-2.4.0-test9/include/asm-mips/pgtable.h Thu Aug 10 19:56:31 2000 +++ linux-2.4.0-test9-lia/include/asm-mips/pgtable.h Wed Sep 13 13:50:44 2000 @@ -451,10 +451,6 @@ #define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define swp_entry_to_pte(x) ((pte_t) { (x).val }) - -#define module_map vmalloc -#define module_unmap vfree - /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define PageSkip(page) (0) #define kern_addr_valid(addr) (1) diff -urN linux-2.4.0-test9/include/asm-mips64/module.h linux-2.4.0-test9-lia/include/asm-mips64/module.h --- linux-2.4.0-test9/include/asm-mips64/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-mips64/module.h Wed Sep 13 13:50:57 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_MIPS64_MODULE_H +#define _ASM_MIPS64_MODULE_H +/* + * This file contains the mips64 architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_MIPS64_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-mips64/pgtable.h linux-2.4.0-test9-lia/include/asm-mips64/pgtable.h --- linux-2.4.0-test9/include/asm-mips64/pgtable.h Thu Aug 10 19:56:31 2000 +++ linux-2.4.0-test9-lia/include/asm-mips64/pgtable.h Wed Sep 13 13:50:59 2000 @@ -525,9 +525,6 @@ #define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define swp_entry_to_pte(x) ((pte_t) { (x).val }) -#define module_map vmalloc -#define module_unmap vfree - /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define PageSkip(page) test_bit(PG_skip, &(page)->flags) #ifndef CONFIG_DISCONTIGMEM diff -urN linux-2.4.0-test9/include/asm-ppc/module.h linux-2.4.0-test9-lia/include/asm-ppc/module.h --- linux-2.4.0-test9/include/asm-ppc/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-ppc/module.h Wed Sep 13 13:51:10 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_PPC_MODULE_H +#define _ASM_PPC_MODULE_H +/* + * This file contains the PPC architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_PPC_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-ppc/pgtable.h linux-2.4.0-test9-lia/include/asm-ppc/pgtable.h --- linux-2.4.0-test9/include/asm-ppc/pgtable.h Wed Oct 4 16:53:42 2000 +++ linux-2.4.0-test9-lia/include/asm-ppc/pgtable.h Wed Oct 4 21:24:53 2000 @@ -451,9 +451,6 @@ #define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define swp_entry_to_pte(x) ((pte_t) { (x).val }) -#define module_map vmalloc -#define module_unmap vfree - /* CONFIG_APUS */ /* For virtual address to physical address conversion */ extern void cache_clear(__u32 addr, int length); diff -urN linux-2.4.0-test9/include/asm-s390/module.h linux-2.4.0-test9-lia/include/asm-s390/module.h --- linux-2.4.0-test9/include/asm-s390/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-s390/module.h Wed Sep 13 13:51:20 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_S390_MODULE_H +#define _ASM_S390_MODULE_H +/* + * This file contains the s390 architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_S390_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-s390/pgtable.h linux-2.4.0-test9-lia/include/asm-s390/pgtable.h --- linux-2.4.0-test9/include/asm-s390/pgtable.h Thu Aug 10 19:56:32 2000 +++ linux-2.4.0-test9-lia/include/asm-s390/pgtable.h Wed Sep 13 13:51:22 2000 @@ -405,9 +405,6 @@ #define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define swp_entry_to_pte(x) ((pte_t) { (x).val }) -#define module_map vmalloc -#define module_unmap vfree - #endif /* !__ASSEMBLY__ */ /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ diff -urN linux-2.4.0-test9/include/asm-sh/module.h linux-2.4.0-test9-lia/include/asm-sh/module.h --- linux-2.4.0-test9/include/asm-sh/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-sh/module.h Wed Sep 13 13:51:30 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_SH_MODULE_H +#define _ASM_SH_MODULE_H +/* + * This file contains the SH architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_SH_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-sh/pgtable.h linux-2.4.0-test9-lia/include/asm-sh/pgtable.h --- linux-2.4.0-test9/include/asm-sh/pgtable.h Wed Oct 4 16:53:42 2000 +++ linux-2.4.0-test9-lia/include/asm-sh/pgtable.h Wed Oct 4 21:24:54 2000 @@ -254,9 +254,6 @@ #define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define swp_entry_to_pte(x) ((pte_t) { (x).val }) -#define module_map vmalloc -#define module_unmap vfree - #endif /* !__ASSEMBLY__ */ /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ diff -urN linux-2.4.0-test9/include/asm-sparc/module.h linux-2.4.0-test9-lia/include/asm-sparc/module.h --- linux-2.4.0-test9/include/asm-sparc/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-sparc/module.h Wed Sep 13 13:51:41 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_SPARC_MODULE_H +#define _ASM_SPARC_MODULE_H +/* + * This file contains the sparc architecture specific module code. + */ + +#define module_map(x) vmalloc(x) +#define module_unmap(x) vfree(x) +#define module_arch_init(x) (0) + +#endif /* _ASM_SPARC_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-sparc/pgtable.h linux-2.4.0-test9-lia/include/asm-sparc/pgtable.h --- linux-2.4.0-test9/include/asm-sparc/pgtable.h Thu Aug 24 08:17:47 2000 +++ linux-2.4.0-test9-lia/include/asm-sparc/pgtable.h Wed Sep 13 13:51:44 2000 @@ -444,8 +444,6 @@ } } -#define module_map vmalloc -#define module_unmap vfree extern unsigned long *sparc_valid_addr_bitmap; /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ diff -urN linux-2.4.0-test9/include/asm-sparc64/module.h linux-2.4.0-test9-lia/include/asm-sparc64/module.h --- linux-2.4.0-test9/include/asm-sparc64/module.h Wed Dec 31 16:00:00 1969 +++ linux-2.4.0-test9-lia/include/asm-sparc64/module.h Wed Sep 13 13:51:55 2000 @@ -0,0 +1,11 @@ +#ifndef _ASM_SPARC64_MODULE_H +#define _ASM_SPARC64_MODULE_H +/* + * This file contains the sparc64 architecture specific module code. + */ + +extern void * module_map (unsigned long size); +extern void module_unmap (void *addr); +#define module_arch_init (x) (0) + +#endif /* _ASM_SPARC64_MODULE_H */ diff -urN linux-2.4.0-test9/include/asm-sparc64/pgtable.h linux-2.4.0-test9-lia/include/asm-sparc64/pgtable.h --- linux-2.4.0-test9/include/asm-sparc64/pgtable.h Thu Aug 24 08:17:48 2000 +++ linux-2.4.0-test9-lia/include/asm-sparc64/pgtable.h Wed Sep 13 13:51:53 2000 @@ -284,8 +284,6 @@ return ((sun4u_get_pte (addr) & 0xf0000000) >> 28); } -extern void * module_map (unsigned long size); -extern void module_unmap (void *addr); extern unsigned long *sparc64_valid_addr_bitmap; /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ diff -urN linux-2.4.0-test9/include/linux/irq.h linux-2.4.0-test9-lia/include/linux/irq.h --- linux-2.4.0-test9/include/linux/irq.h Fri Jul 14 17:19:28 2000 +++ linux-2.4.0-test9-lia/include/linux/irq.h Thu Oct 5 01:38:51 2000 @@ -56,6 +56,7 @@ #include /* the arch dependent stuff */ +extern unsigned int do_IRQ (unsigned long irq, struct pt_regs *regs); extern int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); extern int setup_irq(unsigned int , struct irqaction * ); diff -urN linux-2.4.0-test9/include/linux/module.h linux-2.4.0-test9-lia/include/linux/module.h --- linux-2.4.0-test9/include/linux/module.h Wed Oct 4 16:53:43 2000 +++ linux-2.4.0-test9-lia/include/linux/module.h Thu Oct 5 01:38:51 2000 @@ -83,6 +83,12 @@ const struct module_persist *persist_start; const struct module_persist *persist_end; int (*can_unload)(void); + int runsize; /* In modutils, not currently used */ + const char *kallsyms_start; /* All symbols for kernel debugging */ + const char *kallsyms_end; + const char *archdata_start; /* arch specific data for module */ + const char *archdata_end; + const char *kernel_data; /* Reserved for kernel internal use */ }; struct module_info @@ -122,6 +128,10 @@ #define mod_member_present(mod,member) \ ((unsigned long)(&((struct module *)0L)->member + 1) \ <= (mod)->size_of_struct) + +/* Check if an address p with number of entries n is within the body of module m */ +#define mod_bound(p, n, m) ((unsigned long)(p) >= ((unsigned long)(m) + ((m)->size_of_struct)) && \ + (unsigned long)((p)+(n)) <= (unsigned long)(m) + (m)->size) /* Backwards compatibility definition. */ diff -urN linux-2.4.0-test9/include/linux/skbuff.h linux-2.4.0-test9-lia/include/linux/skbuff.h --- linux-2.4.0-test9/include/linux/skbuff.h Thu Aug 24 08:17:48 2000 +++ linux-2.4.0-test9-lia/include/linux/skbuff.h Thu Oct 5 01:40:01 2000 @@ -896,7 +896,11 @@ { struct sk_buff *skb; +#ifdef CONFIG_SKB_BELOW_4GB + skb = alloc_skb(length+16, GFP_ATOMIC | GFP_DMA); +#else skb = alloc_skb(length+16, GFP_ATOMIC); +#endif if (skb) skb_reserve(skb,16); return skb; diff -urN linux-2.4.0-test9/init/main.c linux-2.4.0-test9-lia/init/main.c --- linux-2.4.0-test9/init/main.c Wed Oct 4 16:53:44 2000 +++ linux-2.4.0-test9-lia/init/main.c Wed Oct 4 21:25:09 2000 @@ -111,6 +111,9 @@ #if defined(CONFIG_QUOTA) extern void dquot_init_hash(void); #endif +#ifdef CONFIG_PERFMON +extern void perfmon_init(void); +#endif /* * Boot command-line arguments @@ -552,6 +555,9 @@ #endif mem_init(); kmem_cache_sizes_init(); +#ifdef CONFIG_PERFMON + perfmon_init(); +#endif #ifdef CONFIG_3215_CONSOLE con3215_activate(); #endif diff -urN linux-2.4.0-test9/kernel/Makefile linux-2.4.0-test9-lia/kernel/Makefile --- linux-2.4.0-test9/kernel/Makefile Thu Aug 10 19:56:32 2000 +++ linux-2.4.0-test9-lia/kernel/Makefile Wed Oct 4 21:53:44 2000 @@ -30,6 +30,13 @@ OX_OBJS += pm.o endif +ifneq ($(CONFIG_IA64),y) +# According to Alan Modra , the -fno-omit-frame-pointer is +# needed for x86 only. Why this used to be enabled for all architectures is beyond +# me. I suspect most platforms don't need this, but until we know that for sure +# I turn this off for IA-64 only. Andreas Schwab says it's also needed on m68k +# to get a correct value for the wait-channel (WCHAN in ps). --davidm CFLAGS_sched.o := $(PROFILING) -fno-omit-frame-pointer +endif include $(TOPDIR)/Rules.make diff -urN linux-2.4.0-test9/kernel/fork.c linux-2.4.0-test9-lia/kernel/fork.c --- linux-2.4.0-test9/kernel/fork.c Fri Sep 8 14:35:08 2000 +++ linux-2.4.0-test9-lia/kernel/fork.c Fri Sep 8 16:52:21 2000 @@ -539,7 +539,7 @@ * arch/ia64/kernel/process.c. */ int do_fork(unsigned long clone_flags, unsigned long stack_start, - struct pt_regs *regs, unsigned long stack_top) + struct pt_regs *regs, unsigned long stack_size) { int retval = -ENOMEM; struct task_struct *p; @@ -634,7 +634,7 @@ goto bad_fork_cleanup_fs; if (copy_mm(clone_flags, p)) goto bad_fork_cleanup_sighand; - retval = copy_thread(0, clone_flags, stack_start, stack_top, p, regs); + retval = copy_thread(0, clone_flags, stack_start, stack_size, p, regs); if (retval) goto bad_fork_cleanup_sighand; p->semundo = NULL; diff -urN linux-2.4.0-test9/kernel/module.c linux-2.4.0-test9-lia/kernel/module.c --- linux-2.4.0-test9/kernel/module.c Mon Jun 26 12:11:10 2000 +++ linux-2.4.0-test9-lia/kernel/module.c Wed Sep 13 13:53:24 2000 @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -195,7 +196,7 @@ of righteousness. */ mod_tmp = *mod; - error = copy_from_user(mod, mod_user, sizeof(struct module)); + error = copy_from_user(mod, mod_user, mod_user_size); if (error) { error = -EFAULT; goto err2; @@ -212,32 +213,29 @@ /* Make sure all interesting pointers are sane. */ -#define bound(p, n, m) ((unsigned long)(p) >= (unsigned long)(m+1) && \ - (unsigned long)((p)+(n)) <= (unsigned long)(m) + (m)->size) - - if (!bound(mod->name, namelen, mod)) { + if (!mod_bound(mod->name, namelen, mod)) { printk(KERN_ERR "init_module: mod->name out of bounds.\n"); goto err2; } - if (mod->nsyms && !bound(mod->syms, mod->nsyms, mod)) { + if (mod->nsyms && !mod_bound(mod->syms, mod->nsyms, mod)) { printk(KERN_ERR "init_module: mod->syms out of bounds.\n"); goto err2; } - if (mod->ndeps && !bound(mod->deps, mod->ndeps, mod)) { + if (mod->ndeps && !mod_bound(mod->deps, mod->ndeps, mod)) { printk(KERN_ERR "init_module: mod->deps out of bounds.\n"); goto err2; } - if (mod->init && !bound(mod->init, 0, mod)) { + if (mod->init && !mod_bound(mod->init, 0, mod)) { printk(KERN_ERR "init_module: mod->init out of bounds.\n"); goto err2; } - if (mod->cleanup && !bound(mod->cleanup, 0, mod)) { + if (mod->cleanup && !mod_bound(mod->cleanup, 0, mod)) { printk(KERN_ERR "init_module: mod->cleanup out of bounds.\n"); goto err2; } if (mod->ex_table_start > mod->ex_table_end || (mod->ex_table_start && - !((unsigned long)mod->ex_table_start >= (unsigned long)(mod+1) + !((unsigned long)mod->ex_table_start >= ((unsigned long)mod + mod->size_of_struct) && ((unsigned long)mod->ex_table_end < (unsigned long)mod + mod->size))) || (((unsigned long)mod->ex_table_start @@ -251,24 +249,51 @@ goto err2; } #ifdef __alpha__ - if (!bound(mod->gp - 0x8000, 0, mod)) { + if (!mod_bound(mod->gp - 0x8000, 0, mod)) { printk(KERN_ERR "init_module: mod->gp out of bounds.\n"); goto err2; } #endif if (mod_member_present(mod, can_unload) - && mod->can_unload && !bound(mod->can_unload, 0, mod)) { + && mod->can_unload && !mod_bound(mod->can_unload, 0, mod)) { printk(KERN_ERR "init_module: mod->can_unload out of bounds.\n"); goto err2; } - -#undef bound + if (mod_member_present(mod, kallsyms_end)) { + if (mod->kallsyms_end && + (!mod_bound(mod->kallsyms_start, 0, mod) || + !mod_bound(mod->kallsyms_end, 0, mod))) { + printk(KERN_ERR "init_module: mod->kallsyms out of bounds.\n"); + goto err2; + } + if (mod->kallsyms_start > mod->kallsyms_end) { + printk(KERN_ERR "init_module: mod->kallsyms invalid.\n"); + goto err2; + } + } + if (mod_member_present(mod, archdata_end)) { + if (mod->archdata_end && + (!mod_bound(mod->archdata_start, 0, mod) || + !mod_bound(mod->archdata_end, 0, mod))) { + printk(KERN_ERR "init_module: mod->archdata out of bounds.\n"); + goto err2; + } + if (mod->archdata_start > mod->archdata_end) { + printk(KERN_ERR "init_module: mod->archdata invalid.\n"); + goto err2; + } + } + if (mod_member_present(mod, kernel_data) && mod->kernel_data) { + printk(KERN_ERR "init_module: mod->kernel_data must be zero.\n"); + goto err2; + } /* Check that the user isn't doing something silly with the name. */ if ((n_namelen = get_mod_name(mod->name - (unsigned long)mod + (unsigned long)mod_user, &n_name)) < 0) { + printk(KERN_ERR "init_module: get_mod_name failure.\n"); error = n_namelen; goto err2; } @@ -285,6 +310,9 @@ error = -EFAULT; goto err3; } + + if (module_arch_init(mod)) + goto err3; /* On some machines it is necessary to do something here to make the I and D caches consistent. */ diff -urN linux-2.4.0-test9/kernel/printk.c linux-2.4.0-test9-lia/kernel/printk.c --- linux-2.4.0-test9/kernel/printk.c Wed Jul 5 11:00:21 2000 +++ linux-2.4.0-test9-lia/kernel/printk.c Fri Aug 11 19:10:10 2000 @@ -14,6 +14,8 @@ * manfreds@colorfullife.com */ +#include + #include #include #include @@ -296,6 +298,12 @@ break; } } +#ifdef CONFIG_IA64_EARLY_PRINTK + if (!console_drivers) { + static void early_printk (const char *str); + early_printk(msg); + } else +#endif if (msg_level < console_loglevel && console_drivers) { struct console *c = console_drivers; while(c) { @@ -412,6 +420,10 @@ } if ((console->flags & CON_PRINTBUFFER) == 0) goto done; +#ifdef CONFIG_IA64_EARLY_PRINTK + goto done; +#endif + /* * Print out buffered log messages. */ @@ -495,3 +507,47 @@ tty->driver.write(tty, 0, msg, strlen(msg)); return; } + +#ifdef CONFIG_IA64_EARLY_PRINTK + +#include + +#define VGABASE ((char *)0x00000000000b8000) + +static int current_ypos = 50, current_xpos = 0; + +void +early_printk (const char *str) +{ + char c; + int i, k, j; + + while ((c = *str++) != '\0') { + if (current_ypos >= 50) { + /* scroll 1 line up */ + for (k = 1, j = 0; k < 50; k++, j++) { + for (i = 0; i < 80; i++) { + writew(readw(VGABASE + 2*(80*k + i)), + VGABASE + 2*(80*j + i)); + } + } + for (i = 0; i < 80; i++) { + writew(0x720, VGABASE + 2*(80*j + i)); + } + current_ypos = 49; + } + if (c == '\n') { + current_xpos = 0; + current_ypos++; + } else if (c != '\r') { + writew(((0x7 << 8) | (unsigned short) c), + VGABASE + 2*(80*current_ypos + current_xpos++)); + if (current_xpos >= 80) { + current_xpos = 0; + current_ypos++; + } + } + } +} + +#endif /* CONFIG_IA64_EARLY_PRINTK */ diff -urN linux-2.4.0-test9/kernel/timer.c linux-2.4.0-test9-lia/kernel/timer.c --- linux-2.4.0-test9/kernel/timer.c Wed Oct 4 16:53:44 2000 +++ linux-2.4.0-test9-lia/kernel/timer.c Wed Oct 4 21:25:10 2000 @@ -674,7 +674,7 @@ void do_timer(struct pt_regs *regs) { - (*(unsigned long *)&jiffies)++; + (*(volatile unsigned long *)&jiffies)++; #ifndef CONFIG_SMP /* SMP process accounting uses the local APIC timer */