diff options
| author | James Simmons <jsimmons@maxwell.earthlink.net> | 2003-01-13 23:27:55 -0800 |
|---|---|---|
| committer | James Simmons <jsimmons@maxwell.earthlink.net> | 2003-01-13 23:27:55 -0800 |
| commit | 95cf11e7bc3dcf77fdeea27f99c80fd6f94a64f3 (patch) | |
| tree | aeedd327ca5caa63fbf426144a11736d794408b6 /include | |
| parent | cfe1d063052b6304316afbbd5af11f7ed392fad0 (diff) | |
| parent | 9552d6bcc66126252565555d137ff5e5e45cb959 (diff) | |
Merge maxwell.earthlink.net:/usr/src/linus-2.5
into maxwell.earthlink.net:/usr/src/fbdev-2.5
Diffstat (limited to 'include')
89 files changed, 3795 insertions, 514 deletions
diff --git a/include/asm-alpha/bug.h b/include/asm-alpha/bug.h new file mode 100644 index 000000000000..0ff718cfdf53 --- /dev/null +++ b/include/asm-alpha/bug.h @@ -0,0 +1,14 @@ +#ifndef _ALPHA_BUG_H +#define _ALPHA_BUG_H + +#include <asm/pal.h> + +/* ??? Would be nice to use .gprel32 here, but we can't be sure that the + function loaded the GP, so this could fail in modules. */ +#define BUG() \ + __asm__ __volatile__("call_pal %0 # bugchk\n\t"".long %1\n\t.8byte %2" \ + : : "i" (PAL_bugchk), "i"(__LINE__), "i"(__FILE__)) + +#define PAGE_BUG(page) BUG() + +#endif diff --git a/include/asm-alpha/page.h b/include/asm-alpha/page.h index 43e414a33d95..2602b3685fe5 100644 --- a/include/asm-alpha/page.h +++ b/include/asm-alpha/page.h @@ -59,14 +59,6 @@ typedef unsigned long pgprot_t; #endif /* STRICT_MM_TYPECHECKS */ -/* ??? Would be nice to use .gprel32 here, but we can't be sure that the - function loaded the GP, so this could fail in modules. */ -#define BUG() \ - __asm__ __volatile__("call_pal %0 # bugchk\n\t"".long %1\n\t.8byte %2" \ - : : "i" (PAL_bugchk), "i"(__LINE__), "i"(__FILE__)) - -#define PAGE_BUG(page) BUG() - /* Pure 2^n version of get_order */ extern __inline__ int get_order(unsigned long size) { diff --git a/include/asm-arm/bug.h b/include/asm-arm/bug.h new file mode 100644 index 000000000000..c9b6e7f6b317 --- /dev/null +++ b/include/asm-arm/bug.h @@ -0,0 +1,20 @@ +#ifndef _ASMARM_BUG_H +#define _ASMARM_BUG_H + +#include <linux/config.h> + +#ifdef CONFIG_DEBUG_BUGVERBOSE +extern volatile void __bug(const char *file, int line, void *data); + +/* give file/line information */ +#define BUG() __bug(__FILE__, __LINE__, NULL) +#define PAGE_BUG(page) __bug(__FILE__, __LINE__, page) + +#else + +/* these just cause an oops */ +#define BUG() (*(int *)0 = 0) +#define PAGE_BUG(page) (*(int *)0 = 0) + +#endif + diff --git a/include/asm-arm/dma-mapping.h b/include/asm-arm/dma-mapping.h index e3d1dbb7bebf..757155b13afc 100644 --- a/include/asm-arm/dma-mapping.h +++ b/include/asm-arm/dma-mapping.h @@ -82,10 +82,8 @@ static inline int dma_is_consistent(dma_addr_t handle) * device-viewed address. */ static inline void * -dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle) +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, int gfp) { - int gfp = GFP_ATOMIC; - if (dev == NULL || dmadev_is_sa1111(dev) || *dev->dma_mask != 0xffffffff) gfp |= GFP_DMA; diff --git a/include/asm-arm/page.h b/include/asm-arm/page.h index 0b1a26ed991d..ca379e1f9184 100644 --- a/include/asm-arm/page.h +++ b/include/asm-arm/page.h @@ -160,21 +160,6 @@ typedef unsigned long pgprot_t; #ifdef __KERNEL__ #ifndef __ASSEMBLY__ -#ifdef CONFIG_DEBUG_BUGVERBOSE -extern void __bug(const char *file, int line, void *data); - -/* give file/line information */ -#define BUG() __bug(__FILE__, __LINE__, NULL) -#define PAGE_BUG(page) __bug(__FILE__, __LINE__, page) - -#else - -/* these just cause an oops */ -#define BUG() (*(int *)0 = 0) -#define PAGE_BUG(page) (*(int *)0 = 0) - -#endif - /* Pure 2^n version of get_order */ static inline int get_order(unsigned long size) { diff --git a/include/asm-cris/bug.h b/include/asm-cris/bug.h new file mode 100644 index 000000000000..64e1d8b01f25 --- /dev/null +++ b/include/asm-cris/bug.h @@ -0,0 +1,12 @@ +#ifndef _CRIS_BUG_H +#define _CRIS_BUG_H + +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ +} while (0) + +#define PAGE_BUG(page) do { \ + BUG(); \ +} while (0) + +#endif diff --git a/include/asm-cris/page.h b/include/asm-cris/page.h index 01166c2bfd7c..47c83465c2af 100644 --- a/include/asm-cris/page.h +++ b/include/asm-cris/page.h @@ -70,18 +70,6 @@ typedef unsigned long pgprot_t; #define PAGE_OFFSET KSEG_C /* kseg_c is mapped to physical ram */ #endif -#ifndef __ASSEMBLY__ - -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ -} while (0) - -#define PAGE_BUG(page) do { \ - BUG(); \ -} while (0) - -#endif /* __ASSEMBLY__ */ - /* macros to convert between really physical and virtual addresses * by stripping a selected bit, we can convert between KSEG_x and 0x40000000 where * the DRAM really resides diff --git a/include/asm-generic/dma-mapping.h b/include/asm-generic/dma-mapping.h index ac107ddd3e30..498c977e5412 100644 --- a/include/asm-generic/dma-mapping.h +++ b/include/asm-generic/dma-mapping.h @@ -30,7 +30,8 @@ dma_set_mask(struct device *dev, u64 dma_mask) } static inline void * -dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle) +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, + int flag) { BUG_ON(dev->bus != &pci_bus_type); @@ -121,7 +122,7 @@ dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems, /* Now for the API extensions over the pci_ one */ -#define dma_alloc_noncoherent(d, s, h) dma_alloc_coherent(d, s, h) +#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) #define dma_is_consistent(d) (1) diff --git a/include/asm-generic/pci-dma-compat.h b/include/asm-generic/pci-dma-compat.h index ef858eecbffd..c47853e170b9 100644 --- a/include/asm-generic/pci-dma-compat.h +++ b/include/asm-generic/pci-dma-compat.h @@ -19,7 +19,7 @@ static inline void * pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t *dma_handle) { - return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle); + return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC); } static inline void diff --git a/include/asm-i386/bug.h b/include/asm-i386/bug.h new file mode 100644 index 000000000000..7a30b490e828 --- /dev/null +++ b/include/asm-i386/bug.h @@ -0,0 +1,27 @@ +#ifndef _I386_BUG_H +#define _I386_BUG_H + +#include <linux/config.h> + +/* + * Tell the user there is some problem. Beep too, so we can + * see^H^H^Hhear bugs in early bootup as well! + * The offending file and line are encoded after the "officially + * undefined" opcode for parsing in the trap handler. + */ + +#if 1 /* Set to zero for a slightly smaller kernel */ +#define BUG() \ + __asm__ __volatile__( "ud2\n" \ + "\t.word %c0\n" \ + "\t.long %c1\n" \ + : : "i" (__LINE__), "i" (__FILE__)) +#else +#define BUG() __asm__ __volatile__("ud2\n") +#endif + +#define PAGE_BUG(page) do { \ + BUG(); \ +} while (0) + +#endif diff --git a/include/asm-i386/dma-mapping.h b/include/asm-i386/dma-mapping.h index 8599f2ced8ff..19519e0fb9bf 100644 --- a/include/asm-i386/dma-mapping.h +++ b/include/asm-i386/dma-mapping.h @@ -3,11 +3,11 @@ #include <asm/cache.h> -#define dma_alloc_noncoherent(d, s, h) dma_alloc_coherent(d, s, h) +#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) void *dma_alloc_coherent(struct device *dev, size_t size, - dma_addr_t *dma_handle); + dma_addr_t *dma_handle, int flag); void dma_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle); diff --git a/include/asm-i386/hw_irq.h b/include/asm-i386/hw_irq.h index a537cc4d233e..a20ce4941864 100644 --- a/include/asm-i386/hw_irq.h +++ b/include/asm-i386/hw_irq.h @@ -76,7 +76,6 @@ static inline void x86_do_profile(struct pt_regs * regs) { unsigned long eip; extern unsigned long prof_cpu_mask; - extern char _stext; #ifdef CONFIG_PROFILING extern void x86_profile_hook(struct pt_regs *); diff --git a/include/asm-i386/mach-bigsmp/mach_apic.h b/include/asm-i386/mach-bigsmp/mach_apic.h new file mode 100644 index 000000000000..bee177a4f195 --- /dev/null +++ b/include/asm-i386/mach-bigsmp/mach_apic.h @@ -0,0 +1,106 @@ +#ifndef __ASM_MACH_APIC_H +#define __ASM_MACH_APIC_H + +#define SEQUENTIAL_APICID +#ifdef SEQUENTIAL_APICID +#define xapic_phys_to_log_apicid(phys_apic) ( (1ul << ((phys_apic) & 0x3)) |\ + ((phys_apic<<2) & (~0xf)) ) +#elif CLUSTERED_APICID +#define xapic_phys_to_log_apicid(phys_apic) ( (1ul << ((phys_apic) & 0x3)) |\ + ((phys_apic) & (~0xf)) ) +#endif + +#define no_balance_irq (1) +#define esr_disable (1) + +static inline int apic_id_registered(void) +{ + return (1); +} + +#define APIC_DFR_VALUE (APIC_DFR_CLUSTER) +#define TARGET_CPUS ((cpu_online_map < 0xf)?cpu_online_map:0xf) + +#define APIC_BROADCAST_ID (0x0f) +#define check_apicid_used(bitmap, apicid) (0) + +static inline unsigned long calculate_ldr(unsigned long old) +{ + unsigned long id; + id = xapic_phys_to_log_apicid(hard_smp_processor_id()); + return ((old & ~APIC_LDR_MASK) | SET_APIC_LOGICAL_ID(id)); +} + +/* + * Set up the logical destination ID. + * + * Intel recommends to set DFR, LDR and TPR before enabling + * an APIC. See e.g. "AP-388 82489DX User's Manual" (Intel + * document number 292116). So here it goes... + */ +static inline void init_apic_ldr(void) +{ + unsigned long val; + + apic_write_around(APIC_DFR, APIC_DFR_VALUE); + val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; + val = calculate_ldr(val); + apic_write_around(APIC_LDR, val); +} + +static inline void clustered_apic_check(void) +{ + printk("Enabling APIC mode: %s. Using %d I/O APICs\n", + "Cluster", nr_ioapics); +} + +static inline int multi_timer_check(int apic, int irq) +{ + return 0; +} + +static inline int apicid_to_node(int logical_apicid) +{ + return 0; +} + +extern u8 raw_phys_apicid[]; + +static inline int cpu_present_to_apicid(int mps_cpu) +{ + return (int) raw_phys_apicid[mps_cpu]; +} + +static inline unsigned long apicid_to_cpu_present(int phys_apicid) +{ + return (1ul << phys_apicid); +} + +static inline int mpc_apic_id(struct mpc_config_processor *m, int quad) +{ + printk("Processor #%d %ld:%ld APIC version %d\n", + m->mpc_apicid, + (m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8, + (m->mpc_cpufeature & CPU_MODEL_MASK) >> 4, + m->mpc_apicver); + return (m->mpc_apicid); +} + +static inline ulong ioapic_phys_id_map(ulong phys_map) +{ + /* For clustered we don't have a good way to do this yet - hack */ + return (0x0F); +} + +#define WAKE_SECONDARY_VIA_INIT + +static inline void setup_portio_remap(void) +{ +} + +static inline int check_phys_apicid_present(int boot_cpu_physical_apicid) +{ + return (1); +} + +#endif /* __ASM_MACH_APIC_H */ diff --git a/include/asm-i386/mach-bigsmp/mach_ipi.h b/include/asm-i386/mach-bigsmp/mach_ipi.h new file mode 100644 index 000000000000..e0866134e624 --- /dev/null +++ b/include/asm-i386/mach-bigsmp/mach_ipi.h @@ -0,0 +1,24 @@ +#ifndef __ASM_MACH_IPI_H +#define __ASM_MACH_IPI_H + +static inline void send_IPI_mask_sequence(int mask, int vector); + +static inline void send_IPI_mask(int mask, int vector) +{ + send_IPI_mask_sequence(mask, vector); +} + +static inline void send_IPI_allbutself(int vector) +{ + unsigned long mask = cpu_online_map & ~(1 << smp_processor_id()); + + if (mask) + send_IPI_mask(mask, vector); +} + +static inline void send_IPI_all(int vector) +{ + send_IPI_mask(cpu_online_map, vector); +} + +#endif /* __ASM_MACH_IPI_H */ diff --git a/include/asm-i386/page.h b/include/asm-i386/page.h index 3c73ce930a0a..ebc1bf892bd3 100644 --- a/include/asm-i386/page.h +++ b/include/asm-i386/page.h @@ -99,27 +99,6 @@ typedef struct { unsigned long pgprot; } pgprot_t; #ifndef __ASSEMBLY__ -/* - * Tell the user there is some problem. Beep too, so we can - * see^H^H^Hhear bugs in early bootup as well! - * The offending file and line are encoded after the "officially - * undefined" opcode for parsing in the trap handler. - */ - -#if 1 /* Set to zero for a slightly smaller kernel */ -#define BUG() \ - __asm__ __volatile__( "ud2\n" \ - "\t.word %c0\n" \ - "\t.long %c1\n" \ - : : "i" (__LINE__), "i" (__FILE__)) -#else -#define BUG() __asm__ __volatile__("ud2\n") -#endif - -#define PAGE_BUG(page) do { \ - BUG(); \ -} while (0) - /* Pure 2^n version of get_order */ static __inline__ int get_order(unsigned long size) { diff --git a/include/asm-i386/timer.h b/include/asm-i386/timer.h index 2ee94da5d6e7..749ee25b8999 100644 --- a/include/asm-i386/timer.h +++ b/include/asm-i386/timer.h @@ -14,6 +14,7 @@ struct timer_opts{ int (*init)(void); void (*mark_offset)(void); unsigned long (*get_offset)(void); + void (*delay)(unsigned long); }; #define TICK_SIZE (tick_nsec / 1000) diff --git a/include/asm-ia64/bug.h b/include/asm-ia64/bug.h new file mode 100644 index 000000000000..085cdb70c85e --- /dev/null +++ b/include/asm-ia64/bug.h @@ -0,0 +1,12 @@ +#ifndef _ASM_IA64_BUG_H +#define _ASM_IA64_BUG_H + +#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define ia64_abort() __builtin_trap() +#else +# define ia64_abort() (*(volatile int *) 0 = 0) +#endif +#define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); ia64_abort(); } while (0) +#define PAGE_BUG(page) do { BUG(); } while (0) + +#endif diff --git a/include/asm-ia64/page.h b/include/asm-ia64/page.h index 4f956057d17f..2c78c70ee477 100644 --- a/include/asm-ia64/page.h +++ b/include/asm-ia64/page.h @@ -125,14 +125,6 @@ typedef union ia64_va { # define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) #endif -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -# define ia64_abort() __builtin_trap() -#else -# define ia64_abort() (*(volatile int *) 0 = 0) -#endif -#define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); ia64_abort(); } while (0) -#define PAGE_BUG(page) do { BUG(); } while (0) - static __inline__ int get_order (unsigned long size) { diff --git a/include/asm-m68k/bug.h b/include/asm-m68k/bug.h new file mode 100644 index 000000000000..92c5cc5c3c09 --- /dev/null +++ b/include/asm-m68k/bug.h @@ -0,0 +1,28 @@ +#ifndef _M68K_BUG_H +#define _M68K_BUG_H + +#include <linux/config.h> + +#ifdef CONFIG_DEBUG_BUGVERBOSE +#ifndef CONFIG_SUN3 +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ + asm volatile("illegal"); \ +} while (0) +#else +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ + panic("BUG!"); \ +} while (0) +#endif +#else +#define BUG() do { \ + asm volatile("illegal"); \ +} while (0) +#endif + +#define PAGE_BUG(page) do { \ + BUG(); \ +} while (0) + +#endif diff --git a/include/asm-m68k/page.h b/include/asm-m68k/page.h index 7ca3578dfa8f..6c09c4f01e07 100644 --- a/include/asm-m68k/page.h +++ b/include/asm-m68k/page.h @@ -178,28 +178,6 @@ static inline void *__va(unsigned long x) #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && (void *)(kaddr) < high_memory) #define pfn_valid(pfn) virt_addr_valid(pfn_to_virt(pfn)) -#ifdef CONFIG_DEBUG_BUGVERBOSE -#ifndef CONFIG_SUN3 -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ - asm volatile("illegal"); \ -} while (0) -#else -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ - panic("BUG!"); \ -} while (0) -#endif -#else -#define BUG() do { \ - asm volatile("illegal"); \ -} while (0) -#endif - -#define PAGE_BUG(page) do { \ - BUG(); \ -} while (0) - #endif /* __ASSEMBLY__ */ #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ diff --git a/include/asm-m68knommu/system.h b/include/asm-m68knommu/system.h index 7a420e949379..e12f9eb46e84 100644 --- a/include/asm-m68knommu/system.h +++ b/include/asm-m68knommu/system.h @@ -102,10 +102,12 @@ asmlinkage void resume(void); #define smp_mb() mb() #define smp_rmb() rmb() #define smp_wmb() wmb() +#define smp_read_barrier_depends() read_barrier_depends() #else #define smp_mb() barrier() #define smp_rmb() barrier() #define smp_wmb() barrier() +#define smp_read_barrier_depends() do { } while(0) #endif #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) diff --git a/include/asm-mips/bug.h b/include/asm-mips/bug.h new file mode 100644 index 000000000000..a66c6f97c391 --- /dev/null +++ b/include/asm-mips/bug.h @@ -0,0 +1,8 @@ +/* $Id$ */ +#ifndef __ASM_BUG_H +#define __ASM_BUG_H + +#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) + +#endif diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h index d3fb0a1e2fde..5cd2c52cb14f 100644 --- a/include/asm-mips/page.h +++ b/include/asm-mips/page.h @@ -20,9 +20,6 @@ #ifndef _LANGUAGE_ASSEMBLY -#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 void (*_clear_page)(void * page); extern void (*_copy_page)(void * to, void * from); diff --git a/include/asm-mips64/bug.h b/include/asm-mips64/bug.h new file mode 100644 index 000000000000..3bf0774fc204 --- /dev/null +++ b/include/asm-mips64/bug.h @@ -0,0 +1,7 @@ +#ifndef _ASM_BUG_H +#define _ASM_BUG_H + +#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) + +#endif diff --git a/include/asm-mips64/page.h b/include/asm-mips64/page.h index 9046c3474d43..872855cea66b 100644 --- a/include/asm-mips64/page.h +++ b/include/asm-mips64/page.h @@ -20,9 +20,6 @@ #ifndef _LANGUAGE_ASSEMBLY -#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 void (*_clear_page)(void * page); extern void (*_copy_page)(void * to, void * from); diff --git a/include/asm-parisc/assembly.h b/include/asm-parisc/assembly.h index c4239daca714..681a1fb4c928 100644 --- a/include/asm-parisc/assembly.h +++ b/include/asm-parisc/assembly.h @@ -102,13 +102,19 @@ .endm #ifdef __LP64__ -#define LDREG ldd -#define STREG std +#define LDREG ldd +#define STREG std +#define LDREGM ldd,mb +#define STREGM std,ma #define RP_OFFSET 16 +#define FRAME_SIZE 128 #else -#define LDREG ldw -#define STREG stw +#define LDREG ldw +#define STREG stw +#define LDREGM ldwm +#define STREGM stwm #define RP_OFFSET 20 +#define FRAME_SIZE 64 #endif .macro loadgp diff --git a/include/asm-parisc/bug.h b/include/asm-parisc/bug.h new file mode 100644 index 000000000000..d810287bb4f6 --- /dev/null +++ b/include/asm-parisc/bug.h @@ -0,0 +1,18 @@ +#ifndef _PARISC_BUG_H +#define _PARISC_BUG_H + +/* + * Tell the user there is some problem. Beep too, so we can + * see^H^H^Hhear bugs in early bootup as well! + * + * We don't beep yet. prumpf + */ +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ +} while (0) + +#define PAGE_BUG(page) do { \ + BUG(); \ +} while (0) + +#endif diff --git a/include/asm-parisc/cache.h b/include/asm-parisc/cache.h index f6a01f1dcad5..a6288967daff 100644 --- a/include/asm-parisc/cache.h +++ b/include/asm-parisc/cache.h @@ -18,8 +18,10 @@ */ #ifdef CONFIG_PA20 #define L1_CACHE_BYTES 64 +#define L1_CACHE_SHIFT 6 #else #define L1_CACHE_BYTES 32 +#define L1_CACHE_SHIFT 5 #endif #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) diff --git a/include/asm-parisc/checksum.h b/include/asm-parisc/checksum.h index 001090f740f7..255ee89c02da 100644 --- a/include/asm-parisc/checksum.h +++ b/include/asm-parisc/checksum.h @@ -32,7 +32,8 @@ extern unsigned int csum_partial_copy_from_user(const char *src, char *dst, int /* * Optimized for IP headers, which always checksum on 4 octet boundaries. * - * Written by Randolph Chung <tausq@debian.org> + * Written by Randolph Chung <tausq@debian.org>, and then mucked with by + * LaMont Jones <lamont@debian.org> */ static inline unsigned short ip_fast_csum(unsigned char * iph, unsigned int ihl) { @@ -41,27 +42,23 @@ static inline unsigned short ip_fast_csum(unsigned char * iph, __asm__ __volatile__ ( " ldws,ma 4(%1), %0\n" -" addi -4, %2, %2\n" -" comib,>= 0, %2, 2f\n" +" addib,<= -4, %2, 2f\n" "\n" -" ldws,ma 4(%1), %%r19\n" -" add %0, %%r19, %0\n" -" ldws,ma 4(%1), %%r19\n" -" addc %0, %%r19, %0\n" -" ldws,ma 4(%1), %%r19\n" +" ldws 4(%1), %%r20\n" +" ldws 8(%1), %%r21\n" +" add %0, %%r20, %0\n" +" ldws,ma 12(%1), %%r19\n" +" addc %0, %%r21, %0\n" " addc %0, %%r19, %0\n" "1: ldws,ma 4(%1), %%r19\n" -" addib,<> -1, %2, 1b\n" +" addib,< 0, %2, 1b\n" " addc %0, %%r19, %0\n" -" addc %0, %%r0, %0\n" "\n" -" zdepi -1, 31, 16, %%r19\n" -" and %0, %%r19, %%r20\n" +" extru %0, 31, 16, %%r20\n" " extru %0, 15, 16, %%r21\n" -" add %%r20, %%r21, %0\n" -" and %0, %%r19, %%r20\n" +" addc %%r20, %%r21, %0\n" " extru %0, 15, 16, %%r21\n" -" add %%r20, %%r21, %0\n" +" add %0, %%r21, %0\n" " subi -1, %0, %0\n" "2:\n" : "=r" (sum), "=r" (iph), "=r" (ihl) diff --git a/include/asm-parisc/compat.h b/include/asm-parisc/compat.h new file mode 100644 index 000000000000..6b146922ea10 --- /dev/null +++ b/include/asm-parisc/compat.h @@ -0,0 +1,75 @@ +#ifndef _ASM_PARISC_COMPAT_H +#define _ASM_PARISC_COMPAT_H +/* + * Architecture specific compatibility types + */ +#include <linux/types.h> + +#define COMPAT_USER_HZ 100 + +typedef u32 compat_size_t; +typedef s32 compat_ssize_t; +typedef s32 compat_time_t; +typedef s32 compat_clock_t; +typedef s32 compat_pid_t; +typedef u32 compat_uid_t; +typedef u32 compat_gid_t; +typedef u16 compat_mode_t; +typedef u32 compat_ino_t; +typedef u32 compat_dev_t; +typedef s32 compat_off_t; +typedef u16 compat_nlink_t; +typedef u16 compat_ipc_pid_t; +typedef s32 compat_daddr_t; +typedef u32 compat_caddr_t; + +struct compat_timespec { + compat_time_t tv_sec; + s32 tv_nsec; +}; + +struct compat_timeval { + compat_time_t tv_sec; + s32 tv_usec; +}; + +struct compat_stat { + compat_dev_t st_dev; /* dev_t is 32 bits on parisc */ + compat_ino_t st_ino; /* 32 bits */ + compat_mode_t st_mode; /* 16 bits */ + compat_nlink_t st_nlink; /* 16 bits */ + u16 st_reserved1; /* old st_uid */ + u16 st_reserved2; /* old st_gid */ + compat_dev_t st_rdev; + compat_off_t st_size; + compat_time_t st_atime; + u32 st_atime_nsec; + compat_time_t st_mtime; + u32 st_mtime_nsec; + compat_time_t st_ctime; + u32 st_ctime_nsec; + s32 st_blksize; + s32 st_blocks; + u32 __unused1; /* ACL stuff */ + compat_dev_t __unused2; /* network */ + compat_ino_t __unused3; /* network */ + u32 __unused4; /* cnodes */ + u16 __unused5; /* netsite */ + short st_fstype; + compat_dev_t st_realdev; + u16 st_basemode; + u16 st_spareshort; + compat_uid_t st_uid; + compat_gid_t st_gid; + u32 st_spare4[3]; +}; + +struct compat_flock { + short l_type; + short l_whence; + compat_off_t l_start; + compat_off_t l_len; + compat_pid_t l_pid; +}; + +#endif /* _ASM_PARISC_COMPAT_H */ diff --git a/include/asm-parisc/current.h b/include/asm-parisc/current.h index c129ee82cac2..0fb9338e3bf2 100644 --- a/include/asm-parisc/current.h +++ b/include/asm-parisc/current.h @@ -1,7 +1,7 @@ #ifndef _PARISC_CURRENT_H #define _PARISC_CURRENT_H -#include <asm/thread_info.h> +#include <linux/thread_info.h> struct task_struct; diff --git a/include/asm-parisc/dma-mapping.h b/include/asm-parisc/dma-mapping.h new file mode 100644 index 000000000000..2428762027b3 --- /dev/null +++ b/include/asm-parisc/dma-mapping.h @@ -0,0 +1,228 @@ +#ifndef _PARISC_DMA_MAPPING_H +#define _PARISC_DMA_MAPPING_H + +#include <linux/mm.h> +#include <asm/cacheflush.h> + +/* +** See Documentation/DMA-mapping.txt +*/ +struct hppa_dma_ops { + int (*dma_supported)(struct device *dev, u64 mask); + void *(*alloc_consistent)(struct device *dev, size_t size, dma_addr_t *iova, int flag); + void *(*alloc_noncoherent)(struct device *dev, size_t size, dma_addr_t *iova, int flag); + void (*free_consistent)(struct device *dev, size_t size, void *vaddr, dma_addr_t iova); + dma_addr_t (*map_single)(struct device *dev, void *addr, size_t size, enum dma_data_direction direction); + void (*unmap_single)(struct device *dev, dma_addr_t iova, size_t size, enum dma_data_direction direction); + int (*map_sg)(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction); + void (*unmap_sg)(struct device *dev, struct scatterlist *sg, int nhwents, enum dma_data_direction direction); + void (*dma_sync_single)(struct device *dev, dma_addr_t iova, unsigned long offset, size_t size, enum dma_data_direction direction); + void (*dma_sync_sg)(struct device *dev, struct scatterlist *sg, int nelems, enum dma_data_direction direction); +}; + +/* +** We could live without the hppa_dma_ops indirection if we didn't want +** to support 4 different coherent dma models with one binary (they will +** someday be loadable modules): +** I/O MMU consistent method dma_sync behavior +** ============= ====================== ======================= +** a) PA-7x00LC uncachable host memory flush/purge +** b) U2/Uturn cachable host memory NOP +** c) Ike/Astro cachable host memory NOP +** d) EPIC/SAGA memory on EPIC/SAGA flush/reset DMA channel +** +** PA-7[13]00LC processors have a GSC bus interface and no I/O MMU. +** +** Systems (eg PCX-T workstations) that don't fall into the above +** categories will need to modify the needed drivers to perform +** flush/purge and allocate "regular" cacheable pages for everything. +*/ + +#ifdef CONFIG_PA11 +extern struct hppa_dma_ops pcxl_dma_ops; +extern struct hppa_dma_ops pcx_dma_ops; +#endif + +extern struct hppa_dma_ops *hppa_dma_ops; + +static inline void * +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, + int flag) +{ + return hppa_dma_ops->alloc_consistent(dev, size, dma_handle, flag); +} + +static inline void * +dma_alloc_noncoherent(struct device *dev, size_t size, dma_addr_t *dma_handle, + int flag) +{ + return hppa_dma_ops->alloc_noncoherent(dev, size, dma_handle, flag); +} + +static inline void +dma_free_coherent(struct device *dev, size_t size, + void *vaddr, dma_addr_t dma_handle) +{ + hppa_dma_ops->free_consistent(dev, size, vaddr, dma_handle); +} + +static inline void +dma_free_noncoherent(struct device *dev, size_t size, + void *vaddr, dma_addr_t dma_handle) +{ + hppa_dma_ops->free_consistent(dev, size, vaddr, dma_handle); +} + +static inline dma_addr_t +dma_map_single(struct device *dev, void *ptr, size_t size, + enum dma_data_direction direction) +{ + return hppa_dma_ops->map_single(dev, ptr, size, direction); +} + +static inline void +dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, + enum dma_data_direction direction) +{ + hppa_dma_ops->unmap_single(dev, dma_addr, size, direction); +} + +static inline int +dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, + enum dma_data_direction direction) +{ + return hppa_dma_ops->map_sg(dev, sg, nents, direction); +} + +static inline void +dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, + enum dma_data_direction direction) +{ + hppa_dma_ops->unmap_sg(dev, sg, nhwentries, direction); +} + +static inline dma_addr_t +dma_map_page(struct device *dev, struct page *page, unsigned long offset, + size_t size, enum dma_data_direction direction) +{ + return dma_map_single(dev, (page_address(page) + (offset)), size, direction); +} + +static inline void +dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, + enum dma_data_direction direction) +{ + dma_unmap_single(dev, dma_address, size, direction); +} + + +static inline void +dma_sync_single(struct device *dev, dma_addr_t dma_handle, size_t size, + enum dma_data_direction direction) +{ + if(hppa_dma_ops->dma_sync_single) + hppa_dma_ops->dma_sync_single(dev, dma_handle, 0, size, direction); +} + +static inline void +dma_sync_single_range(struct device *dev, dma_addr_t dma_handle, + unsigned long offset, size_t size, + enum dma_data_direction direction) +{ + if(hppa_dma_ops->dma_sync_single) + hppa_dma_ops->dma_sync_single(dev, dma_handle, offset, size, direction); +} + +static inline void +dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems, + enum dma_data_direction direction) +{ + if(hppa_dma_ops->dma_sync_sg) + hppa_dma_ops->dma_sync_sg(dev, sg, nelems, direction); +} + +static inline int +dma_supported(struct device *dev, u64 mask) +{ + return hppa_dma_ops->dma_supported(dev, mask); +} + +static inline int +dma_set_mask(struct device *dev, u64 mask) +{ + if(!dev->dma_mask || !dma_supported(dev, mask)) + return -EIO; + + *dev->dma_mask = mask; + + return 0; +} + +static inline int +dma_get_cache_alignment(void) +{ + return dcache_stride; +} + +static inline int +dma_is_consistent(dma_addr_t dma_addr) +{ + return (hppa_dma_ops->dma_sync_single == NULL); +} + +static inline void +dma_cache_sync(void *vaddr, size_t size, + enum dma_data_direction direction) +{ + if(hppa_dma_ops->dma_sync_single) + flush_kernel_dcache_range((unsigned long)vaddr, size); +} + +static inline void * +parisc_walk_tree(struct device *dev) +{ + struct device *otherdev; + if(likely(dev->platform_data != NULL)) + return dev->platform_data; + /* OK, just traverse the bus to find it */ + for(otherdev = dev->parent; otherdev; + otherdev = otherdev->parent) { + if(otherdev->platform_data) { + dev->platform_data = otherdev->platform_data; + break; + } + } + BUG_ON(!dev->platform_data); + return dev->platform_data; +} + +#define GET_IOC(dev) (HBA_DATA(parisc_walk_tree(dev))->iommu); + + +#ifdef CONFIG_IOMMU_CCIO +struct parisc_device; +struct ioc; +void * ccio_get_iommu(const struct parisc_device *dev); +struct pci_dev * ccio_get_fake(const struct parisc_device *dev); +int ccio_request_resource(const struct parisc_device *dev, + struct resource *res); +int ccio_allocate_resource(const struct parisc_device *dev, + struct resource *res, unsigned long size, + unsigned long min, unsigned long max, unsigned long align, + void (*alignf)(void *, struct resource *, unsigned long, unsigned long), + void *alignf_data); +#else /* !CONFIG_IOMMU_CCIO */ +#define ccio_get_iommu(dev) NULL +#define ccio_get_fake(dev) NULL +#define ccio_request_resource(dev, res) request_resource(&iomem_resource, res) +#define ccio_allocate_resource(dev, res, size, min, max, align, alignf, data) \ + allocate_resource(&iomem_resource, res, size, min, max, \ + align, alignf, data) +#endif /* !CONFIG_IOMMU_CCIO */ + +#ifdef CONFIG_IOMMU_SBA +struct parisc_device; +void * sba_get_iommu(struct parisc_device *dev); +#endif + +#endif diff --git a/include/asm-parisc/dma.h b/include/asm-parisc/dma.h index b087f5596ec2..9b0ee7576c0e 100644 --- a/include/asm-parisc/dma.h +++ b/include/asm-parisc/dma.h @@ -30,7 +30,6 @@ */ #define MAX_DMA_ADDRESS (~0UL) - /* ** We don't have DMA channels... well V-class does but the ** Dynamic DMA Mapping interface will support them... right? :^) @@ -130,6 +129,9 @@ static __inline__ void disable_dma(unsigned int dmanr) #endif } +/* reserve a DMA channel */ +#define request_dma(dmanr, device_id) (0) + /* Clear the 'DMA Pointer Flip Flop'. * Write 0 for LSB/MSB, 1 for MSB/LSB access. * Use this once to initialize the FF to a known state. diff --git a/include/asm-parisc/hardware.h b/include/asm-parisc/hardware.h index 458034d4f40c..3f54dfa50771 100644 --- a/include/asm-parisc/hardware.h +++ b/include/asm-parisc/hardware.h @@ -23,31 +23,7 @@ struct hp_hardware { const char name[80]; /* The hardware description */ }; -struct parisc_device { - unsigned long hpa; /* Hard Physical Address */ - struct parisc_device_id id; - struct parisc_device *parent; - struct parisc_device *sibling; - struct parisc_device *child; - struct parisc_driver *driver; /* Driver for this device */ - void *sysdata; /* Driver instance private data */ - char name[80]; /* The hardware description */ - int irq; - - char hw_path; /* The module number on this bus */ - unsigned int num_addrs; /* some devices have additional address ranges. */ - unsigned long *addr; /* which will be stored here */ - -#ifdef __LP64__ - /* parms for pdc_pat_cell_module() call */ - unsigned long pcell_loc; /* Physical Cell location */ - unsigned long mod_index; /* PAT specific - Misc Module info */ - - /* generic info returned from pdc_pat_cell_module() */ - unsigned long mod_info; /* PAT specific - Misc Module info */ - unsigned long pmod_loc; /* physical Module location */ -#endif -}; +struct parisc_device; enum cpu_type { pcx = 0, /* pa7000 pa 1.0 */ @@ -65,12 +41,7 @@ enum cpu_type { extern char *cpu_name_version[][2]; /* mapping from enum cpu_type to strings */ -struct parisc_driver { - struct parisc_driver *next; - char *name; - const struct parisc_device_id *id_table; - int (*probe) (struct parisc_device *dev); /* New device discovered */ -}; +struct parisc_driver; struct io_module { volatile uint32_t nothing; /* reg 0 */ diff --git a/include/asm-parisc/ide.h b/include/asm-parisc/ide.h index bf0a7bc90572..d7d96c18480a 100644 --- a/include/asm-parisc/ide.h +++ b/include/asm-parisc/ide.h @@ -84,13 +84,6 @@ static __inline__ void ide_init_default_hwifs(void) #define ide_request_region(from,extent,name) request_region((from), (extent), (name)) #define ide_release_region(from,extent) release_region((from), (extent)) -/* - * The following are not needed for the non-m68k ports - */ -#define ide_ack_intr(hwif) (1) -#define ide_release_lock(lock) do {} while (0) -#define ide_get_lock(lock, hdlr, data) do {} while (0) - #endif /* __KERNEL__ */ #endif /* __ASM_PARISC_IDE_H */ diff --git a/include/asm-parisc/io.h b/include/asm-parisc/io.h index ea211e3b77b6..69933ab23159 100644 --- a/include/asm-parisc/io.h +++ b/include/asm-parisc/io.h @@ -37,7 +37,7 @@ extern inline void * ioremap(unsigned long offset, unsigned long size) * it's useful if some control registers are in such an area and write combining * or read caching is not desirable: */ -extern inline void * ioremap_nocache (unsigned long offset, unsigned long size) +extern inline void * ioremap_nocache(unsigned long offset, unsigned long size) { return __ioremap(offset, size, _PAGE_NO_CACHE /* _PAGE_PCD */); } @@ -49,7 +49,8 @@ extern void iounmap(void *addr); * too lazy to ioremap first'. kind of like isa_, except that there's * no additional base address to add on. */ -extern __inline__ unsigned char __raw_readb(unsigned long addr) +#define __raw_readb(a) ___raw_readb((unsigned long)(a)) +extern __inline__ unsigned char ___raw_readb(unsigned long addr) { long flags; unsigned char ret; @@ -63,7 +64,8 @@ extern __inline__ unsigned char __raw_readb(unsigned long addr) return ret; } -extern __inline__ unsigned short __raw_readw(unsigned long addr) +#define __raw_readw(a) ___raw_readw((unsigned long)(a)) +extern __inline__ unsigned short ___raw_readw(unsigned long addr) { long flags; unsigned short ret; @@ -77,7 +79,8 @@ extern __inline__ unsigned short __raw_readw(unsigned long addr) return ret; } -extern __inline__ unsigned int __raw_readl(unsigned long addr) +#define __raw_readl(a) ___raw_readl((unsigned long)(a)) +extern __inline__ unsigned int ___raw_readl(unsigned long addr) { u32 ret; @@ -88,7 +91,8 @@ extern __inline__ unsigned int __raw_readl(unsigned long addr) return ret; } -extern __inline__ unsigned long long __raw_readq(unsigned long addr) +#define __raw_readq(a) ___raw_readq((unsigned long)(a)) +extern __inline__ unsigned long long ___raw_readq(unsigned long addr) { unsigned long long ret; #ifdef __LP64__ @@ -103,7 +107,8 @@ extern __inline__ unsigned long long __raw_readq(unsigned long addr) return ret; } -extern __inline__ void __raw_writeb(unsigned char val, unsigned long addr) +#define __raw_writeb(a,b) ___raw_writeb(a, (unsigned long)(b)) +extern __inline__ void ___raw_writeb(unsigned char val, unsigned long addr) { long flags; __asm__ __volatile__( @@ -113,7 +118,8 @@ extern __inline__ void __raw_writeb(unsigned char val, unsigned long addr) : "=&r" (flags) : "r" (val), "r" (addr) ); } -extern __inline__ void __raw_writew(unsigned short val, unsigned long addr) +#define __raw_writew(a,b) ___raw_writew(a, (unsigned long)(b)) +extern __inline__ void ___raw_writew(unsigned short val, unsigned long addr) { long flags; __asm__ __volatile__( @@ -123,14 +129,16 @@ extern __inline__ void __raw_writew(unsigned short val, unsigned long addr) : "=&r" (flags) : "r" (val), "r" (addr) ); } -extern __inline__ void __raw_writel(unsigned int val, unsigned long addr) +#define __raw_writel(a,b) ___raw_writel(a, (unsigned long)(b)) +extern __inline__ void ___raw_writel(unsigned int val, unsigned long addr) { __asm__ __volatile__( " stwas %0,0(%1)\n" : : "r" (val), "r" (addr) ); } -extern __inline__ void __raw_writeq(unsigned long long val, unsigned long addr) +#define __raw_writeq(a,b) ___raw_writeq(a, (unsigned long)(b)) +extern __inline__ void ___raw_writeq(unsigned long long val, unsigned long addr) { #ifdef __LP64__ __asm__ __volatile__( @@ -153,19 +161,23 @@ extern __inline__ void __raw_writeq(unsigned long long val, unsigned long addr) #define writel(b,addr) (*(volatile unsigned int *) (addr) = (b)) #define writeq(b,addr) (*(volatile u64 *) (addr) = (b)) #else /* !USE_HPPA_IOREMAP */ -#define readb(addr) __raw_readb((unsigned long)(addr)) -#define readw(addr) le16_to_cpu(__raw_readw((unsigned long)(addr))) -#define readl(addr) le32_to_cpu(__raw_readl((unsigned long)(addr))) -#define readq(addr) le64_to_cpu(__raw_readq((unsigned long)(addr))) -#define writeb(b,addr) __raw_writeb(b,(unsigned long)(addr)) -#define writew(b,addr) __raw_writew(cpu_to_le16(b),(unsigned long)(addr)) -#define writel(b,addr) __raw_writel(cpu_to_le32(b),(unsigned long)(addr)) -#define writeq(b,addr) __raw_writeq(cpu_to_le64(b),(unsigned long)(addr)) +#define readb(addr) __raw_readb(addr) +#define readw(addr) le16_to_cpu(__raw_readw(addr)) +#define readl(addr) le32_to_cpu(__raw_readl(addr)) +#define readq(addr) le64_to_cpu(__raw_readq(addr)) +#define writeb(b,addr) __raw_writeb(b,addr) +#define writew(b,addr) __raw_writew(cpu_to_le16(b),addr) +#define writel(b,addr) __raw_writel(cpu_to_le32(b),addr) +#define writeq(b,addr) __raw_writeq(cpu_to_le64(b),addr) #endif /* !USE_HPPA_IOREMAP */ -extern void memcpy_fromio(void *dest, unsigned long src, int count); -extern void memcpy_toio(unsigned long dest, const void *src, int count); -extern void memset_io(unsigned long dest, char fill, int count); +extern void __memcpy_fromio(unsigned long dest, unsigned long src, int count); +extern void __memcpy_toio(unsigned long dest, unsigned long src, int count); +extern void __memset_io(unsigned long dest, char fill, int count); + +#define memcpy_fromio(a,b,c) __memcpy_fromio((unsigned long)(a), (unsigned long)(b), (c)) +#define memcpy_toio(a,b,c) __memcpy_toio((unsigned long)(a), (unsigned long)(b), (c)) +#define memset_io(a,b,c) __memset_io((unsigned long)(a), (b), (c)) /* Support old drivers which don't ioremap. * NB this interface is scheduled to disappear in 2.5 @@ -186,12 +198,12 @@ extern void memset_io(unsigned long dest, char fill, int count); * These functions support PA-RISC drivers which don't yet call ioremap(). * They will disappear once the last of these drivers is gone. */ -#define gsc_readb(x) __raw_readb((unsigned long)x) -#define gsc_readw(x) __raw_readw((unsigned long)x) -#define gsc_readl(x) __raw_readl((unsigned long)x) -#define gsc_writeb(x, y) __raw_writeb(x, (unsigned long)y) -#define gsc_writew(x, y) __raw_writew(x, (unsigned long)y) -#define gsc_writel(x, y) __raw_writel(x, (unsigned long)y) +#define gsc_readb(x) __raw_readb(x) +#define gsc_readw(x) __raw_readw(x) +#define gsc_readl(x) __raw_readl(x) +#define gsc_writeb(x, y) __raw_writeb(x, y) +#define gsc_writew(x, y) __raw_writew(x, y) +#define gsc_writel(x, y) __raw_writel(x, y) /* @@ -275,7 +287,7 @@ extern void outsl (unsigned long port, const void *src, unsigned long count); #define IO_SPACE_LIMIT 0x00ffffff -#define dma_cache_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while(0) +#define dma_cache_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0) #define dma_cache_wback(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0) #define dma_cache_wback_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0) diff --git a/include/asm-parisc/irq.h b/include/asm-parisc/irq.h index e360dc5ae82f..90be00a83732 100644 --- a/include/asm-parisc/irq.h +++ b/include/asm-parisc/irq.h @@ -13,6 +13,7 @@ #include <asm/ptrace.h> #include <asm/types.h> +#include <asm/errno.h> #include <linux/string.h> #include <linux/interrupt.h> @@ -94,4 +95,21 @@ extern unsigned long txn_alloc_addr(int); /* soft power switch support (power.c) */ extern struct tasklet_struct power_tasklet; +struct notifier_block; + +#ifdef CONFIG_PROFILING +int register_profile_notifier(struct notifier_block *nb); +int unregister_profile_notifier(struct notifier_block *nb); +#else +static inline int register_profile_notifier(struct notifier_block *nb) +{ + return -ENOSYS; +} + +static inline int unregister_profile_notifier(struct notifier_block *nb) +{ + return -ENOSYS; +} +#endif + #endif /* _ASM_PARISC_IRQ_H */ diff --git a/include/asm-parisc/keyboard.h b/include/asm-parisc/keyboard.h index 2dcb7df289aa..a5f701806107 100644 --- a/include/asm-parisc/keyboard.h +++ b/include/asm-parisc/keyboard.h @@ -28,7 +28,6 @@ #include <linux/config.h> #ifdef __KERNEL__ -#ifdef CONFIG_VT #include <linux/kernel.h> #include <linux/kd.h> @@ -56,18 +55,11 @@ extern struct kbd_ops { void (*init_hw)(void); /* Keyboard driver resource allocation */ - void (*kbd_request_region)(void); int (*kbd_request_irq)(void (*handler)(int, void *, struct pt_regs *)); - /* Methods to access the keyboard processor's I/O registers */ - unsigned char (*kbd_read_input)(void); - void (*kbd_write_output)(unsigned char val); - void (*kbd_write_command)(unsigned char val); - unsigned char (*kbd_read_status)(void); - unsigned char sysrq_key; unsigned char *sysrq_xlate; -} *kbd_ops; +} kbd_ops; #define kbd_setkeycode (*kbd_ops->setkeycode) #define kbd_getkeycode (*kbd_ops->getkeycode) @@ -80,20 +72,13 @@ extern struct kbd_ops { #define kbd_sysrq_xlate (kbd_ops->sysrq_xlate) /* Do the actual calls via kbd_ops vector */ -#define kbd_request_region() kbd_ops->kbd_request_region() #define kbd_request_irq(handler) kbd_ops->kbd_request_irq(handler) -#define kbd_read_input() kbd_ops->kbd_read_input() -#define kbd_write_output(val) kbd_ops->kbd_write_output(val) -#define kbd_write_command(val) kbd_ops->kbd_write_command(val) -#define kbd_read_status() kbd_ops->kbd_read_status() extern unsigned char hp_ps2kbd_sysrq_xlate[128]; /* from drivers/char/hp_keyb.c */ extern void unregister_kbd_ops(void); extern void register_kbd_ops(struct kbd_ops *ops); -#endif /* CONFIG_VT */ - #endif /* __KERNEL__ */ #endif /* __ASMPARISC_KEYBOARD_H */ diff --git a/include/asm-parisc/linux_logo.h b/include/asm-parisc/linux_logo.h index 7b529cede5bd..b5232d40b2ea 100644 --- a/include/asm-parisc/linux_logo.h +++ b/include/asm-parisc/linux_logo.h @@ -1,27 +1,1438 @@ -/* $Id: linux_logo.h,v 1.1.1.1 1999/03/15 19:41:01 pjlahaie Exp $ - * include/asm-parisc/linux_logo.h: This is a linux logo - * to be displayed on boot. +/* linux_logo.h created with fblogo, 2002/12/21 04:44:04 + * include/linux/linux_logo.h: This is a linux logo + * to be displayed on boot. * * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu) - * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz) + * Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) + * + * You can put anything here, but: + * LINUX_LOGO_COLORS has to be less than 224 + * Generated by fblogo version 0.5.0 + * + * + * Remember to modify drivers/video/fbcon.c: + * Change "#define LOGO_H 80" to "#define LOGO_H 80" + * Change "#define LOGO_W 80" to "#define LOGO_W 80" * * You can put anything here, but: * LINUX_LOGO_COLORS has to be less than 224 * image size has to be 80x80 * values have to start from 0x20 * (i.e. RGB(linux_logo_red[0], - * linux_logo_green[0], - * linux_logo_blue[0]) is color 0x20) + * linux_logo_green[0], + * linux_logo_blue[0]) is color 0x20) * BW image has to be 80x80 as well, with MS bit * on the left * Serial_console ascii image can be any size, * but should contain %s to display the version */ - -#include <linux/init.h> -#include <linux/version.h> -#define linux_logo_banner "Linux/PA-RISC version " UTS_RELEASE +#ifndef __HAVE_ARCH_LINUX_LOGO +#define LINUX_LOGO_COLORS 223 +#endif +#ifdef INCLUDE_LINUX_LOGO_DATA +#ifndef __HAVE_ARCH_LINUX_LOGO +unsigned char linux_logo_red[] __initdata = { + 0x02, 0xFD, 0xF1, 0x02, 0xA2, 0x02, 0x76, 0xFE, + 0xB8, 0x32, 0x52, 0xCA, 0x66, 0x8E, 0x46, 0xFD, + 0x66, 0xB2, 0xB6, 0x3E, 0xA4, 0xFE, 0x21, 0xDB, + 0xEE, 0x2A, 0xCC, 0x9A, 0x1A, 0xFE, 0xFE, 0xA6, + 0xC2, 0xFE, 0x94, 0x12, 0xBA, 0xED, 0x8E, 0xFE, + 0xAE, 0xBC, 0xC2, 0xCE, 0xE2, 0x4A, 0x0E, 0x6F, + 0xBE, 0xA2, 0x02, 0x57, 0x78, 0xFE, 0xDA, 0xDA, + 0xFE, 0xEE, 0x8A, 0xF5, 0xB3, 0x0A, 0xCA, 0x77, + 0x52, 0xFE, 0x5A, 0x64, 0xFA, 0x96, 0xC2, 0x96, + 0xC2, 0x92, 0x4E, 0x52, 0xBE, 0xFE, 0x66, 0x8C, + 0xDA, 0xFE, 0xAA, 0x6E, 0xB6, 0x7A, 0xE2, 0x3F, + 0xA3, 0x06, 0xE6, 0xD6, 0xE6, 0x56, 0xF2, 0xB6, + 0x7E, 0xDD, 0xD6, 0xF9, 0x37, 0x26, 0xE7, 0xEC, + 0xBE, 0xDE, 0xA3, 0xFE, 0x92, 0xDE, 0x36, 0xC2, + 0x82, 0xEA, 0x26, 0xA7, 0x2D, 0xF2, 0xA6, 0x6A, + 0xDA, 0x2E, 0xE2, 0xFE, 0x69, 0xFE, 0x46, 0x9E, + 0x5E, 0xFE, 0x82, 0xFE, 0xFC, 0xAA, 0xB8, 0xFE, + 0xCE, 0xC6, 0x1D, 0x76, 0xF8, 0x92, 0xE2, 0xD6, + 0xFE, 0x9C, 0xCC, 0xB6, 0xE4, 0x0C, 0xE2, 0xC6, + 0xD2, 0x16, 0xD3, 0x9C, 0x59, 0x3A, 0xFE, 0x70, + 0xBB, 0xA6, 0xF6, 0xFA, 0x76, 0xB6, 0xAE, 0xB7, + 0xEE, 0x3E, 0x82, 0xCA, 0xBA, 0x17, 0xAB, 0xAF, + 0xCF, 0x86, 0x32, 0xB4, 0x2A, 0xFE, 0xEE, 0xE2, + 0x5A, 0xFE, 0x02, 0xFE, 0xEA, 0xFE, 0x77, 0x64, + 0xFE, 0xFD, 0xD5, 0xBF, 0x4E, 0xBB, 0xF8, 0x9B, + 0x78, 0x6E, 0xFA, 0xC6, 0xFE, 0xB2, 0x12, 0xF2, + 0xBE, 0x06, 0xAE, 0xC4, 0xEA, 0xAE, 0xFE, 0xD5, + 0x42, 0xBC, 0x86, 0xFE, 0x7A, 0xF0, 0xF1 +}; + +unsigned char linux_logo_green[] __initdata = { + 0x02, 0xCF, 0xB7, 0x9A, 0x7A, 0x66, 0x4C, 0xCF, + 0xBA, 0x9A, 0x3A, 0x98, 0xCE, 0x66, 0x2E, 0xE0, + 0x9A, 0xB6, 0xB6, 0x27, 0x7C, 0xE2, 0x22, 0x9B, + 0xE6, 0x1E, 0x9A, 0xCE, 0x1A, 0xE6, 0xEA, 0x6E, + 0x86, 0xCE, 0x59, 0x12, 0x96, 0xEE, 0x5A, 0xD4, + 0x7E, 0x9A, 0xBA, 0xCE, 0xBE, 0x4A, 0x0E, 0x43, + 0xA7, 0x8A, 0x66, 0x3D, 0x4E, 0xEA, 0xDA, 0xAD, + 0xE6, 0xCA, 0x62, 0xF6, 0xA4, 0x0A, 0x82, 0x77, + 0x52, 0xE9, 0x34, 0x64, 0xC2, 0x7E, 0xB2, 0x96, + 0xC2, 0x62, 0x3A, 0x33, 0x91, 0xEC, 0x9A, 0x8C, + 0xB6, 0xE2, 0x70, 0x56, 0x76, 0x6A, 0xBE, 0x3E, + 0xA2, 0x06, 0xE6, 0xD6, 0xEA, 0x56, 0xC6, 0x9E, + 0x7E, 0x9A, 0xAA, 0xFA, 0x22, 0x26, 0xA6, 0xAE, + 0xC6, 0xB6, 0x8F, 0xDE, 0x7A, 0xDE, 0x36, 0x83, + 0x82, 0xBE, 0x16, 0x9B, 0x1A, 0xBE, 0xA6, 0x5C, + 0x9F, 0x2E, 0xAE, 0xD8, 0x6B, 0xBA, 0x46, 0x9E, + 0x5E, 0xC6, 0x72, 0xBE, 0xDA, 0x8E, 0xB0, 0xC2, + 0x89, 0x92, 0x1E, 0x6A, 0xB7, 0x92, 0xA2, 0xA2, + 0xFE, 0x65, 0xD0, 0xAA, 0xB0, 0x0E, 0xE2, 0xC6, + 0xD2, 0x16, 0x91, 0x6E, 0x3B, 0x3A, 0xCA, 0x70, + 0xBB, 0xAE, 0xBE, 0xD6, 0x5A, 0x8A, 0x86, 0xBA, + 0xC6, 0x42, 0x58, 0xCA, 0x7C, 0x0E, 0xAA, 0x7F, + 0x8F, 0x86, 0x32, 0x72, 0x2A, 0xC2, 0xA7, 0xA0, + 0x5A, 0xC6, 0x02, 0xFE, 0xEA, 0xEA, 0x7A, 0x3F, + 0xC6, 0xCA, 0xA3, 0xBF, 0x4E, 0x91, 0xB8, 0x99, + 0x70, 0x5E, 0xBE, 0x7E, 0xFE, 0xB1, 0x06, 0xB1, + 0xC2, 0x0A, 0xA2, 0x9D, 0xAA, 0x77, 0xC2, 0x96, + 0x42, 0xBE, 0x52, 0xE8, 0x7E, 0xAE, 0xF2 +}; + +unsigned char linux_logo_blue[] __initdata = { + 0x02, 0x03, 0x07, 0x9A, 0x02, 0x66, 0x02, 0x0E, + 0xC3, 0x9A, 0x02, 0x02, 0xCE, 0x02, 0x02, 0x1C, + 0x9A, 0xBE, 0xB6, 0x02, 0x38, 0x2E, 0x23, 0x14, + 0x36, 0x02, 0x32, 0xCE, 0x1C, 0x46, 0x42, 0x0A, + 0x0A, 0x12, 0x03, 0x12, 0x4A, 0xEF, 0x05, 0x16, + 0x26, 0x52, 0xAE, 0xCE, 0x02, 0x4A, 0x0F, 0x03, + 0x6C, 0x56, 0x9A, 0x0D, 0x0C, 0xA2, 0xDB, 0x02, + 0x9A, 0x02, 0x12, 0xF8, 0x85, 0x0B, 0x02, 0x76, + 0x52, 0x07, 0x02, 0x66, 0x0D, 0x46, 0x92, 0x97, + 0xC3, 0x16, 0x1A, 0x07, 0x02, 0x0E, 0xCE, 0x8D, + 0x4E, 0x04, 0x04, 0x2A, 0x03, 0x52, 0x4E, 0x3F, + 0xA1, 0x07, 0xE7, 0xD7, 0xEB, 0x56, 0x02, 0x72, + 0x7F, 0x06, 0x1A, 0xFB, 0x03, 0x27, 0x07, 0x08, + 0xD6, 0x42, 0x6D, 0x07, 0x4E, 0xDF, 0x37, 0x06, + 0x84, 0x02, 0x02, 0x86, 0x02, 0x3A, 0xA7, 0x44, + 0x03, 0x2F, 0x38, 0x0E, 0x70, 0x07, 0x47, 0x9E, + 0x5F, 0x06, 0x56, 0x0B, 0x06, 0x32, 0x9E, 0x02, + 0x03, 0x36, 0x1F, 0x56, 0x03, 0x92, 0x10, 0x03, + 0xF2, 0x03, 0xDB, 0x92, 0x1C, 0x1A, 0xE2, 0xC8, + 0xD2, 0x17, 0x03, 0x02, 0x03, 0x3B, 0x0D, 0x70, + 0xBA, 0xBA, 0x0D, 0x03, 0x06, 0x16, 0x26, 0xBE, + 0x0E, 0x50, 0x02, 0xCA, 0x04, 0x02, 0xA7, 0x03, + 0x0C, 0x86, 0x33, 0x04, 0x2B, 0x09, 0x05, 0x06, + 0x5A, 0x0D, 0x0A, 0xFA, 0xEB, 0x2A, 0x82, 0x04, + 0x02, 0x02, 0x32, 0xBE, 0x4F, 0x35, 0x0C, 0x98, + 0x6C, 0x46, 0x0B, 0x02, 0xFE, 0xB1, 0x02, 0x07, + 0xD2, 0x18, 0x96, 0x48, 0x06, 0x04, 0x0E, 0x07, + 0x43, 0xC6, 0x02, 0x3A, 0x8C, 0x16, 0xF4 +}; + +unsigned char linux_logo[] __initdata = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x79, + 0x79, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x79, 0xB9, 0x99, 0xBD, 0x9E, 0x60, + 0x60, 0xF8, 0x8E, 0x85, 0xB9, 0x79, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x79, 0xAA, 0x9E, 0xDE, 0x96, 0xE3, 0xB7, 0x4B, + 0x4B, 0x68, 0x32, 0x9F, 0x5F, 0x9E, 0xAA, 0x5D, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, + 0x8E, 0x80, 0xE3, 0xB6, 0xCB, 0x90, 0x80, 0x63, + 0x63, 0xDE, 0x78, 0xCB, 0xB6, 0xE3, 0xD1, 0x4D, + 0x3C, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x4D, + 0x9F, 0x8D, 0x32, 0x77, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x77, 0x96, 0x7A, 0xE3, + 0x5F, 0x99, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0xF8, 0x96, + 0x8D, 0xBF, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x99, 0x68, + 0x7B, 0x6F, 0x8E, 0x5D, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x85, 0x6F, 0xB6, + 0xD8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x5D, 0x36, 0xB9, 0x20, 0x79, + 0x6F, 0x8D, 0x6F, 0xD4, 0x79, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x4E, 0x7D, 0xCB, 0xAD, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3C, 0x63, 0xBF, 0xD4, 0x20, + 0x20, 0x78, 0xB8, 0x9C, 0xB9, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x36, 0xAD, 0xB6, 0x36, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xAA, 0x5F, 0x90, 0x9E, 0x3C, + 0x20, 0x5D, 0x4B, 0xED, 0x77, 0x79, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x79, 0x9E, 0xE3, 0x78, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xAA, 0xE4, 0x77, 0xAA, 0x43, + 0x20, 0x20, 0x7D, 0x8D, 0x5F, 0xB9, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4E, 0x63, 0x56, 0x9E, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x5D, 0x4E, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x79, 0xB7, 0xCE, 0x8E, 0x79, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xB9, 0x80, 0x7A, 0xB9, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xBF, 0x4B, 0x7D, 0x5D, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xAA, 0xAD, 0xB8, 0x79, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x85, 0xB6, 0x5F, 0x43, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x20, + 0x20, 0x20, 0xB9, 0x3C, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x79, 0x8E, 0x79, 0x20, + 0x20, 0x20, 0x20, 0x43, 0xB6, 0x6F, 0x3C, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x20, + 0x5D, 0xE4, 0x8E, 0x4E, 0x43, 0x20, 0x20, 0x20, + 0x20, 0x8E, 0x90, 0xCE, 0x90, 0x4E, 0xAA, 0x20, + 0x20, 0x20, 0x20, 0x20, 0xB7, 0xE7, 0x36, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x20, + 0xD1, 0x8D, 0x7B, 0xD8, 0x20, 0x20, 0x20, 0x20, + 0x9E, 0x32, 0x56, 0x45, 0xFE, 0x6F, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0xCB, 0x96, 0xD4, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x85, + 0xDC, 0xEC, 0xEC, 0xEC, 0xAA, 0x20, 0x20, 0xDA, + 0x56, 0xEC, 0xEC, 0xB8, 0xEC, 0x83, 0x8E, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6F, 0xED, 0x8E, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x9C, + 0x45, 0xAA, 0x9C, 0xEC, 0xDE, 0x20, 0x20, 0xAA, + 0xEC, 0x83, 0x79, 0xBD, 0xBF, 0xEC, 0x96, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6F, 0x32, 0x8E, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xAA, 0xAD, 0xB7, 0x20, 0x80, + 0x80, 0x20, 0xE4, 0x31, 0x67, 0xDA, 0x3C, 0xD4, + 0xEC, 0xDE, 0x20, 0xDA, 0x8E, 0xB6, 0x7A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6F, 0x32, 0x8E, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3C, 0xD1, 0xDC, 0xB9, 0x5F, + 0x90, 0x20, 0xF1, 0xFC, 0x7D, 0x39, 0x94, 0xCD, + 0x28, 0x63, 0x20, 0x20, 0x20, 0xB8, 0xDC, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6F, 0xC0, 0xBD, 0x79, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x43, 0x5F, 0x7A, 0xB9, 0x9E, + 0x8D, 0x20, 0x20, 0x5A, 0x87, 0xE0, 0xC2, 0x2B, + 0x82, 0x51, 0x20, 0x20, 0xB5, 0xEC, 0xC7, 0x20, + 0x20, 0x20, 0x20, 0x20, 0xAD, 0x68, 0x9E, 0x79, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x43, 0xBF, 0xB6, 0xB9, 0x79, + 0x83, 0x93, 0xCC, 0xF4, 0xE0, 0xE1, 0x21, 0xC8, + 0x47, 0x9B, 0x57, 0xC4, 0xB8, 0xEC, 0x77, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x60, 0x4B, 0x60, 0x5D, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x43, 0xBF, 0xB6, 0xB9, 0x20, + 0x75, 0xD0, 0xF4, 0xA7, 0xE0, 0x21, 0xA4, 0xDD, + 0x3E, 0xDD, 0x61, 0x71, 0x21, 0xB4, 0x2E, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x60, 0x7B, 0xA0, 0x5D, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x43, 0xBF, 0xB6, 0x85, 0xCD, + 0xCC, 0x81, 0xAC, 0xE0, 0xE1, 0xC3, 0x8B, 0x3D, + 0x3E, 0x61, 0x61, 0x6D, 0x71, 0x47, 0xAF, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x8E, 0xB6, 0x5F, 0xB9, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x5D, 0xA0, 0x7B, 0x7D, 0xDF, + 0xA8, 0xD6, 0xA3, 0xE0, 0x21, 0xA4, 0x35, 0xFB, + 0x61, 0x61, 0x61, 0x4C, 0x2B, 0x86, 0xCF, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x5D, 0x8D, 0x78, 0x99, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x5D, 0x60, 0xB8, 0x7D, 0x39, + 0xF5, 0xAC, 0xA7, 0xE1, 0x21, 0x8B, 0x35, 0x71, + 0x8B, 0x59, 0x6C, 0xD0, 0xD7, 0xD6, 0x5A, 0x20, + 0x20, 0xB9, 0x20, 0x20, 0x20, 0x90, 0xCB, 0x60, + 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x5D, 0x60, 0xB8, 0x7D, 0x20, + 0xBC, 0xBB, 0x22, 0x21, 0x2F, 0x8B, 0xC3, 0x57, + 0xCF, 0x3F, 0xBA, 0xD7, 0x81, 0x3A, 0x77, 0x20, + 0x20, 0xA0, 0x63, 0x36, 0x20, 0xD2, 0x7A, 0x6F, + 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4E, 0xA0, 0x7B, 0x7D, 0x20, + 0xDE, 0x51, 0x46, 0xF5, 0x6C, 0xCF, 0x72, 0xCC, + 0x5E, 0xA8, 0x5E, 0xE5, 0x4A, 0xB2, 0xED, 0x20, + 0x20, 0x43, 0x6F, 0x90, 0x4E, 0x20, 0xED, 0xB7, + 0x7D, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x36, 0xD1, 0x7A, 0x8E, 0x20, + 0xAD, 0xCB, 0x34, 0xB1, 0xF7, 0xBA, 0xA8, 0xEB, + 0xD3, 0x74, 0x7F, 0xF9, 0xB2, 0x7A, 0x7B, 0x36, + 0x20, 0x20, 0xE4, 0xA0, 0x79, 0x20, 0xAA, 0xB6, + 0x67, 0xD4, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x4E, 0x60, 0x68, 0xC0, 0x79, 0x20, + 0x6F, 0xB2, 0x68, 0x8A, 0x42, 0x42, 0x42, 0x42, + 0x34, 0xA6, 0x28, 0xB2, 0xEC, 0xEC, 0xEC, 0x9F, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, + 0x4B, 0x63, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x79, 0x8E, 0x9F, 0xB6, 0xD2, 0x20, 0x20, + 0xDC, 0x7C, 0xB7, 0xF0, 0x28, 0xF2, 0xF2, 0xED, + 0xC7, 0xF9, 0xB2, 0x5B, 0xEC, 0xEC, 0xEC, 0xEC, + 0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xAA, + 0x56, 0xCE, 0xBD, 0x79, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x79, 0x85, 0xD1, 0x8D, 0xE8, 0x20, 0x20, 0x67, + 0xEC, 0xEC, 0xB8, 0xF9, 0xF9, 0x28, 0xC7, 0xC7, + 0x68, 0x8D, 0x83, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0x68, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x8D, 0xDE, 0xAA, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3C, 0xBF, 0x4B, 0xCE, 0x79, 0x20, 0x99, 0xEC, + 0xEC, 0xEC, 0xFE, 0xF9, 0xC0, 0xC7, 0xC7, 0x4B, + 0xFE, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0x99, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x79, 0x68, 0x68, 0xD8, 0x43, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, + 0x7D, 0xE3, 0x4B, 0x3C, 0x20, 0x20, 0x4B, 0xEC, + 0xEC, 0xEC, 0xEC, 0x5B, 0x56, 0x56, 0xDC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xCE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x99, 0xB6, 0xED, 0x4D, 0x4E, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x9E, + 0xCE, 0xB6, 0x99, 0x20, 0x20, 0x4D, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0x83, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x77, 0xDC, 0x78, 0xF8, 0x4E, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x8E, 0xE7, + 0x7A, 0x60, 0x20, 0x20, 0x20, 0x68, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0x3C, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xBF, 0x7A, 0xE7, 0xBD, 0x79, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0xAA, 0x80, 0x8D, + 0xBF, 0x20, 0x20, 0x20, 0x4E, 0x56, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0x83, 0x83, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xDB, 0xEC, 0xD8, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0xBF, 0x8D, 0xD1, 0x85, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x5D, 0x4D, 0xE3, 0x32, + 0x79, 0x20, 0x20, 0x20, 0x99, 0x32, 0xDC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xDC, 0x8D, 0x8D, 0x45, 0x83, + 0x83, 0x83, 0x83, 0x7A, 0x8D, 0x56, 0x7B, 0xB8, + 0xB8, 0x8D, 0x78, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x79, 0x78, 0xCB, 0xD8, + 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0xAA, 0xD1, 0x7A, 0xD2, + 0x20, 0x20, 0x20, 0x20, 0xE4, 0xED, 0x7B, 0xFE, + 0xEC, 0xEC, 0xEC, 0xDB, 0xB6, 0x5B, 0xEC, 0xEC, + 0xEC, 0xEC, 0xDB, 0xFE, 0x8D, 0x4B, 0xB7, 0x68, + 0x68, 0xB7, 0xDC, 0x5F, 0x20, 0x20, 0xAA, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x8D, 0x67, + 0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x79, 0xBD, 0xED, 0xCE, 0x20, + 0x20, 0x20, 0x20, 0x79, 0x67, 0xDC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xDB, 0x45, 0xEC, 0xDB, 0xDB, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x45, + 0x8D, 0x4B, 0xB8, 0x83, 0x99, 0x20, 0x20, 0x85, + 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0xB7, + 0x60, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x5D, 0x7D, 0xB8, 0xBF, 0x20, + 0x20, 0x43, 0x20, 0xBF, 0xFE, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xDB, 0xDB, 0xDB, 0xDB, + 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xDC, 0xB6, 0x7B, 0x20, 0x20, 0x20, + 0xD4, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x99, 0x7A, + 0xD1, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3C, 0x80, 0x7A, 0xD2, 0x20, + 0x36, 0x20, 0x4E, 0x68, 0xEC, 0xEC, 0x5B, 0xEC, + 0xEC, 0x7C, 0x4B, 0x4B, 0x4B, 0x4B, 0x3B, 0x3B, + 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x30, 0x30, 0xC1, + 0xB6, 0xEC, 0x5B, 0x5B, 0x5B, 0x9E, 0x20, 0x20, + 0x20, 0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0xED, + 0xED, 0xBD, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xD2, 0x96, 0xB8, 0x79, 0x79, + 0x4E, 0x20, 0xD1, 0x45, 0x83, 0xEC, 0xEC, 0xEC, + 0xEC, 0x30, 0x25, 0x52, 0x25, 0x25, 0x25, 0x25, + 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x29, + 0xDC, 0xEC, 0xEC, 0xEC, 0x83, 0xB7, 0x20, 0x43, + 0xD2, 0xB9, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x9C, + 0x7B, 0x63, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x5D, 0x7D, 0x4B, 0x80, 0x20, 0x85, + 0x20, 0x79, 0x7A, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0x30, 0x25, 0x25, 0x23, 0x29, 0x2C, 0x3B, + 0x4B, 0x7C, 0x4B, 0x3B, 0x30, 0x52, 0x25, 0x29, + 0x5B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x4E, 0xAA, + 0xD2, 0x5D, 0xD4, 0x20, 0x20, 0x20, 0x20, 0x5D, + 0xB6, 0x67, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0xAA, 0xD1, 0x7A, 0x99, 0x20, 0xB9, + 0x20, 0xE4, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0x29, 0x29, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x3B, 0x52, 0x23, + 0xFE, 0xEC, 0x83, 0xEC, 0xEC, 0xEC, 0x4D, 0x20, + 0x20, 0x20, 0x5D, 0x85, 0x20, 0x20, 0x20, 0x20, + 0x96, 0xE3, 0xF8, 0x79, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x79, 0xF8, 0x32, 0x32, 0x20, 0xAA, 0x20, + 0x20, 0xCB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, + 0x30, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x29, 0x25, + 0x4B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x6F, 0x20, + 0x20, 0x20, 0x20, 0x99, 0x20, 0x20, 0x20, 0x20, + 0xD8, 0x7B, 0x63, 0x4E, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3C, 0xDE, 0x8D, 0xE4, 0x20, 0x36, 0x20, + 0x36, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, + 0x4B, 0xEC, 0xEC, 0xEC, 0x7C, 0x3B, 0x30, 0x29, + 0x29, 0x29, 0x29, 0x3B, 0x7C, 0xEC, 0x29, 0x25, + 0x3B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE3, 0x20, + 0x20, 0x20, 0x20, 0xD2, 0x20, 0x20, 0x20, 0x20, + 0x3C, 0x7A, 0x80, 0xB9, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x5D, 0x4D, 0xC0, 0x68, 0x79, 0x20, 0x5D, 0x20, + 0x90, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x3B, 0x7C, + 0xEC, 0xEC, 0x3B, 0x29, 0x52, 0x52, 0x29, 0x29, + 0x29, 0x29, 0x25, 0x25, 0x29, 0x4B, 0x29, 0x25, + 0x2C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xB6, 0x20, + 0x20, 0x20, 0x20, 0xD4, 0x20, 0x20, 0x20, 0x20, + 0x79, 0x7B, 0x67, 0x36, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x85, 0x6F, 0x7A, 0x77, 0x20, 0xB9, 0x20, 0x20, + 0xB8, 0xEC, 0xEC, 0xEC, 0xEC, 0x4B, 0xEC, 0xEC, + 0x3B, 0x29, 0x29, 0x6E, 0x4B, 0x7C, 0xEC, 0xEC, + 0xEC, 0x7C, 0x4B, 0x30, 0x25, 0x52, 0x52, 0x25, + 0x30, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x5B, 0x20, + 0x20, 0x20, 0x20, 0x36, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x68, 0xCE, 0x99, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, + 0xD8, 0xCB, 0x67, 0x20, 0x20, 0xAA, 0x20, 0x20, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, + 0x29, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0x6E, 0x25, 0x52, 0x25, + 0x29, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20, + 0x20, 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xAA, + 0x6F, 0x8D, 0x3C, 0x20, 0x20, 0x36, 0x20, 0xB5, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, 0x3B, + 0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0x7C, 0x7C, + 0x7C, 0xEC, 0xEC, 0xEC, 0x7C, 0x52, 0x52, 0x25, + 0x29, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20, + 0x20, 0x20, 0x79, 0x43, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x99, + 0xCE, 0x68, 0x20, 0x20, 0x20, 0xBD, 0xF1, 0x36, + 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x6E, 0x7C, 0xEC, + 0xEC, 0xEC, 0x3B, 0x6E, 0x29, 0x29, 0x52, 0x52, + 0x23, 0x29, 0x3B, 0xEC, 0x7C, 0x23, 0x52, 0x52, + 0x23, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20, + 0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xBD, + 0xC0, 0xD1, 0x20, 0x20, 0x20, 0x36, 0x3C, 0x8E, + 0xEC, 0xEC, 0xEC, 0xEC, 0x4B, 0xEC, 0xEC, 0xEC, + 0x3B, 0x29, 0x52, 0x29, 0x29, 0x30, 0x30, 0x30, + 0x29, 0x25, 0x25, 0x29, 0x3B, 0x52, 0x52, 0x52, + 0x52, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20, + 0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0xBD, + 0xC0, 0xD1, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x8E, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x3B, 0x30, + 0x30, 0x3B, 0x4B, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0x4B, 0x29, 0x25, 0x52, 0x52, 0x52, 0x52, + 0x52, 0x3B, 0xEC, 0xEC, 0xEC, 0xEC, 0x45, 0x20, + 0x20, 0x3C, 0x4E, 0x4E, 0xB5, 0x20, 0x20, 0x20, + 0x20, 0x78, 0x32, 0x8E, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x8E, + 0x32, 0x68, 0xEE, 0xCA, 0x24, 0x84, 0x20, 0xC9, + 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, 0x30, 0x7C, + 0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0x29, 0x25, 0x25, 0x25, 0x25, + 0x25, 0x2C, 0xEC, 0xEC, 0xEC, 0xEC, 0xF9, 0x20, + 0x79, 0x20, 0x20, 0x20, 0xDA, 0xAA, 0xF8, 0xB9, + 0x20, 0xCB, 0x78, 0xD4, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x79, 0x5D, 0x5D, 0x43, 0x4D, + 0x68, 0x8D, 0xAE, 0x47, 0x21, 0xE1, 0x53, 0x20, + 0x90, 0xEC, 0xEC, 0x7C, 0x30, 0x4B, 0xEC, 0xEC, + 0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0x4B, 0x30, 0x30, 0x30, 0x29, + 0x29, 0x30, 0xEC, 0xB0, 0x58, 0x55, 0x65, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x85, 0xC9, + 0x5D, 0xFE, 0x9F, 0xD4, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x5D, 0xAA, 0x77, 0x7D, 0xA0, 0x63, 0x9F, + 0x7A, 0x44, 0xAC, 0xBE, 0x21, 0x21, 0xE0, 0xBC, + 0x20, 0x9C, 0xEC, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0x7C, 0x7C, 0xEC, 0x95, 0x21, 0x71, 0xC3, 0xCD, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x36, 0x4E, + 0xA5, 0x56, 0x68, 0xE4, 0x5D, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x5D, 0xBD, 0xD1, 0xC0, 0xB8, 0x7B, 0x56, 0xDC, + 0xA6, 0x98, 0x9D, 0xBE, 0x21, 0xE1, 0xE1, 0xC2, + 0x92, 0x20, 0xC9, 0x5B, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0x7A, 0xFE, 0xEC, 0xEC, 0xDB, 0xDB, + 0xDB, 0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xB4, 0x9D, 0x21, 0x91, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDA, 0x53, + 0x6D, 0x38, 0x7A, 0x90, 0x3C, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xD4, 0xAD, 0xB6, 0xA6, 0x7F, 0xF3, 0x44, 0xE5, + 0xF7, 0x87, 0xF6, 0xBE, 0xBE, 0xE1, 0xE0, 0xE0, + 0xAF, 0x20, 0x20, 0xB5, 0x7B, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB, + 0xDB, 0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0x9A, 0x9D, 0xA7, 0x98, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x22, + 0x8B, 0x8B, 0x68, 0xE7, 0x36, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, + 0x7D, 0x4B, 0x5C, 0xF4, 0x9D, 0xE6, 0xEF, 0x87, + 0xE6, 0xA3, 0xD9, 0xD9, 0xD9, 0xA1, 0xA1, 0xE0, + 0x21, 0x2D, 0x20, 0x20, 0x20, 0x96, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB, + 0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xFE, 0xB2, 0xE2, 0xAC, 0x9D, 0x81, 0xDF, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xCF, 0xBE, + 0x47, 0x47, 0x68, 0x96, 0xD4, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, + 0x5F, 0x7A, 0xE2, 0x9D, 0xBE, 0xBE, 0xD9, 0xF6, + 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xA1, 0xD5, + 0xE0, 0x7E, 0x92, 0x20, 0x20, 0x20, 0x63, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB, + 0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xB2, 0xF0, 0xE2, 0xEF, 0xEF, 0xD7, 0xCC, + 0x26, 0x84, 0x94, 0x84, 0x26, 0x40, 0xEF, 0xD9, + 0x41, 0x41, 0xE3, 0xB7, 0x7D, 0x43, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, + 0xDE, 0x7A, 0x37, 0xA3, 0xBE, 0x41, 0xBE, 0xBE, + 0xD9, 0xD9, 0xF6, 0x64, 0x64, 0xD5, 0xD5, 0xA1, + 0xA1, 0x21, 0x6C, 0x20, 0x20, 0x20, 0x20, 0xD2, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB, + 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xB2, 0x88, 0x3A, 0xF4, 0xAC, 0xF4, 0xBA, + 0xA8, 0x8F, 0x8F, 0x40, 0xBA, 0xF4, 0xD9, 0x41, + 0x41, 0x41, 0x89, 0x8D, 0x96, 0x9E, 0x4E, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, + 0x9C, 0x8D, 0xF3, 0xAC, 0xD9, 0x41, 0xBE, 0xD9, + 0xF6, 0x64, 0x64, 0x64, 0x64, 0x64, 0xD5, 0xD5, + 0xA1, 0xA1, 0x21, 0x2A, 0x20, 0x20, 0x20, 0x20, + 0x7D, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0x7B, 0x88, 0xE5, 0xD7, 0x22, 0x22, 0x86, + 0x98, 0x81, 0x81, 0x98, 0x87, 0xEA, 0xBE, 0xBE, + 0x41, 0xBE, 0xBE, 0x50, 0x7A, 0x78, 0x4D, 0xB9, + 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, + 0xD8, 0x7B, 0x49, 0xFD, 0xF6, 0xBE, 0xD9, 0xD9, + 0x64, 0x64, 0xC2, 0xC2, 0xC2, 0xEA, 0x64, 0xD5, + 0xD9, 0xA1, 0xE1, 0x57, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x83, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0x7C, 0x88, 0xC6, 0x81, 0xAC, 0xEA, 0x22, + 0x87, 0x87, 0xF4, 0x87, 0x22, 0xF6, 0xD9, 0xD9, + 0xBE, 0xBE, 0xBE, 0xD9, 0x50, 0xDC, 0x32, 0xBF, + 0xD2, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, + 0x4D, 0xCB, 0x5C, 0x86, 0xA3, 0xBE, 0xD9, 0xF6, + 0x64, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0x64, 0x64, + 0xD5, 0xD9, 0xA1, 0x21, 0xBB, 0x20, 0x20, 0x20, + 0x20, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xFE, 0x9C, 0x46, 0x81, 0x22, 0xD5, 0xA3, + 0x9D, 0x22, 0x22, 0xE6, 0xEA, 0xF6, 0xD9, 0xD9, + 0xD9, 0xBE, 0xBE, 0x41, 0x41, 0x70, 0x7B, 0x7B, + 0x6F, 0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, + 0xF8, 0x68, 0xF2, 0xAE, 0xEA, 0xD9, 0xD9, 0x64, + 0x64, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xEA, 0x64, + 0xD5, 0xD5, 0xA1, 0xE1, 0xE1, 0x33, 0x20, 0xF1, + 0x31, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xFC, 0x20, 0x46, 0x98, 0xAC, 0xD5, 0xD9, + 0xD9, 0xD5, 0x64, 0x64, 0x64, 0x64, 0xF6, 0xD9, + 0xD9, 0xBE, 0xBE, 0x41, 0x47, 0x9B, 0x41, 0x66, + 0xB7, 0x4D, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, + 0xE4, 0xCB, 0x5C, 0xAE, 0xEA, 0xD9, 0xD9, 0x64, + 0x64, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0x64, + 0x64, 0xD5, 0xA1, 0xD5, 0x21, 0xAF, 0xCE, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0x63, 0x20, 0x20, 0xB1, 0xD7, 0xE6, 0xD5, 0xD9, + 0xD5, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0xF6, + 0xD9, 0xBE, 0xBE, 0x41, 0x47, 0x9B, 0x9B, 0x76, + 0x7B, 0xD8, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, + 0xBF, 0x8D, 0x44, 0xAE, 0xF6, 0xD9, 0xD9, 0xF6, + 0x64, 0xEA, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0x64, + 0x64, 0xD5, 0xD5, 0xD5, 0xE0, 0x7E, 0xC5, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFE, 0x99, + 0x20, 0x20, 0x20, 0xB1, 0xD7, 0x9D, 0xD5, 0xD9, + 0xD5, 0x64, 0x64, 0x64, 0x64, 0x64, 0xF6, 0xD9, + 0xD9, 0xBE, 0x41, 0x41, 0x47, 0x41, 0xD9, 0x66, + 0x4B, 0x60, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xD4, + 0x9F, 0xB6, 0xBA, 0x87, 0xD9, 0xBE, 0xD9, 0xD9, + 0xF6, 0x64, 0x64, 0x64, 0x64, 0xEA, 0x64, 0x64, + 0x64, 0xD5, 0xD5, 0xD5, 0xD5, 0x7E, 0xAF, 0x8C, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x90, 0x20, 0x20, + 0x20, 0x20, 0xEE, 0xB1, 0x86, 0xEA, 0xD9, 0xD9, + 0xD5, 0x64, 0x64, 0x64, 0x64, 0xF6, 0xD9, 0xD9, + 0xBE, 0xBE, 0x41, 0x41, 0xBE, 0xE6, 0x9A, 0x8D, + 0x9F, 0xD2, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x9E, + 0xB7, 0xB3, 0xD7, 0xD5, 0x41, 0xBE, 0xBE, 0xD9, + 0xD9, 0xD9, 0xF6, 0x64, 0x64, 0x64, 0x64, 0x64, + 0x64, 0xD5, 0xD9, 0xA1, 0xA1, 0x22, 0x86, 0x46, + 0x77, 0x7B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, + 0xEC, 0xEC, 0x7A, 0xD1, 0x79, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x92, 0x3F, 0x86, 0xEA, 0xD9, 0xD9, + 0xD9, 0xF6, 0xF6, 0xF6, 0xD9, 0xD9, 0xD9, 0xBE, + 0xBE, 0xBE, 0xF6, 0xE6, 0xFD, 0x5C, 0xDC, 0xED, + 0x60, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0xD8, + 0x7B, 0xF3, 0x86, 0xA3, 0xBE, 0xBE, 0xBE, 0xD9, + 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, + 0xD9, 0xD5, 0xD9, 0xD9, 0xA1, 0x9D, 0x86, 0x72, + 0x94, 0x20, 0xB5, 0xE4, 0x5F, 0x80, 0xBF, 0xA0, + 0x8E, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x84, 0x72, 0x86, 0xA3, 0xBE, 0xBE, + 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xF6, 0xD9, + 0xF6, 0xFD, 0x37, 0x5C, 0x7B, 0xB8, 0x67, 0x4D, + 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0xD8, + 0xB8, 0xF3, 0x81, 0xF4, 0xAC, 0xE6, 0xEA, 0xEA, + 0xA3, 0xF6, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, + 0xD9, 0xD9, 0xBE, 0xBE, 0xBE, 0xEA, 0xD7, 0x72, + 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x6B, 0x74, 0xAE, 0xEA, 0xBE, 0xBE, + 0xBE, 0xBE, 0xD9, 0xD9, 0xD9, 0xEA, 0xE6, 0x87, + 0xF7, 0x93, 0xB6, 0xB8, 0x78, 0x63, 0x99, 0x5D, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0xF8, + 0xC0, 0xCB, 0xA9, 0x8F, 0xA8, 0xD0, 0xF7, 0x81, + 0xAE, 0x86, 0x87, 0x22, 0xE6, 0xEA, 0xD9, 0xD9, + 0xBE, 0xBE, 0xBE, 0xBE, 0xD9, 0xEF, 0xD0, 0xB1, + 0xDF, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x6B, 0x72, 0xF7, 0xEF, 0xD9, 0xD9, + 0xBE, 0xD9, 0xD9, 0xF6, 0x22, 0x86, 0x81, 0xE5, + 0x4B, 0x56, 0x78, 0x63, 0x99, 0x43, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, + 0x9C, 0xC0, 0xB6, 0xB6, 0x32, 0x8A, 0x48, 0xD3, + 0xCC, 0xCC, 0x8F, 0x40, 0xD0, 0x81, 0xF4, 0x22, + 0xA3, 0xF6, 0xD9, 0xF6, 0xAC, 0x81, 0x74, 0x46, + 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2E, 0xB1, 0x40, 0xAE, 0xAC, 0xF6, + 0xF6, 0xF6, 0xAC, 0xF4, 0x81, 0xCC, 0x8A, 0xDC, + 0xC0, 0x5F, 0x8E, 0x4E, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, + 0x3C, 0x4D, 0xBF, 0x67, 0x32, 0xB8, 0x7A, 0xCB, + 0xCE, 0x8C, 0x69, 0x46, 0xB1, 0x3F, 0xCC, 0xA8, + 0xBA, 0x98, 0x86, 0xAE, 0xBA, 0x74, 0x42, 0x4F, + 0x84, 0xD2, 0x32, 0x32, 0xCB, 0x45, 0xDC, 0xDC, + 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0x56, 0x32, + 0xED, 0x80, 0x6A, 0xCA, 0x74, 0xA8, 0x81, 0x86, + 0x86, 0xAE, 0xBA, 0x40, 0x3F, 0xF2, 0xB6, 0x78, + 0xE4, 0x3C, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x79, 0x43, 0x36, 0xBD, 0xD8, 0x90, 0x78, + 0x68, 0x56, 0xDC, 0xCB, 0x93, 0xA2, 0x26, 0x46, + 0xB1, 0x3F, 0x72, 0x72, 0xB1, 0xFA, 0x4F, 0xBC, + 0xAD, 0x56, 0x4B, 0xCE, 0xE7, 0x6F, 0x90, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0xD1, 0x67, 0x96, + 0xE3, 0xDC, 0x90, 0xDF, 0xB1, 0x74, 0xCC, 0x8F, + 0x8F, 0xCC, 0x72, 0x46, 0xCE, 0x56, 0xAD, 0x77, + 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x79, 0x5D, 0x3C, 0xD4, + 0xF8, 0x63, 0xD1, 0x96, 0x68, 0x8D, 0x7A, 0xE7, + 0x73, 0x4F, 0x4F, 0x26, 0x4F, 0xDF, 0x6B, 0x32, + 0x56, 0x9F, 0xA0, 0xD2, 0x36, 0x3C, 0xB9, 0xB9, + 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x3C, 0x36, 0xD4, + 0xE4, 0x96, 0xB6, 0xE8, 0xBC, 0xFA, 0x42, 0xB1, + 0xB1, 0x46, 0x54, 0xCE, 0x56, 0xD1, 0xD2, 0x5D, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x79, 0x4E, 0x3C, 0x99, 0x9E, 0xBF, 0xE7, 0xB7, + 0x7A, 0xCB, 0x6F, 0xE9, 0xE9, 0xE7, 0x56, 0xCB, + 0x80, 0xD2, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x4E, 0x4D, 0x78, 0x8D, 0xE3, 0x5F, 0x97, 0xE9, + 0xAB, 0x67, 0xB6, 0xCB, 0x90, 0x99, 0x79, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x79, 0x43, 0xD4, 0xE4, + 0x80, 0xCE, 0xB7, 0x7B, 0x7B, 0x68, 0xE7, 0x63, + 0x36, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x4E, 0xBD, 0x80, 0xED, 0x4B, 0x7B, 0x7B, + 0xB8, 0x68, 0x67, 0xD8, 0x85, 0x79, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, + 0x3C, 0x99, 0x4D, 0xD8, 0xD8, 0x9E, 0x85, 0x4E, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x79, 0x3C, 0x8E, 0x60, 0xD8, 0xA0, + 0x7D, 0xF8, 0x85, 0x4E, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 +}; + +#endif /* !__HAVE_ARCH_LINUX_LOGO */ + +#ifndef __HAVE_ARCH_LINUX_LOGOBW + +unsigned char linux_logo_bw[] __initdata = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xf3, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf3, 0xdf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x9f, 0x87, 0xfb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x0f, 0x03, 0xfb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x67, 0x33, 0xfb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xe7, 0x79, 0xfb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xf7, 0x79, 0xfb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf9, 0xf7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x60, 0x3b, 0xf7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x89, 0x07, 0xfb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x00, 0x03, 0xfb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x00, 0x0d, 0xfb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x80, 0x33, 0xfd, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xc0, 0xc3, 0xfd, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xff, 0x0d, 0xdd, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x40, 0x31, 0xee, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf7, 0x20, 0xc1, 0xee, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf7, 0x1f, 0x00, 0xff, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xef, 0x00, 0x00, 0x7f, 0xbf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xee, 0x00, 0x00, 0x7f, 0xbf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xde, 0x00, 0x00, 0x7f, 0xdf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xbc, 0x00, 0x00, 0x3f, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x3f, 0xf7, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x1f, 0xf7, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0x1c, 0x07, 0xdf, 0xfb, 0xff, 0xff, + 0xff, 0xff, 0xfd, 0xfc, 0x08, 0x0f, 0xef, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xfd, 0xf8, 0x00, 0x01, 0xef, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xfb, 0xf0, 0x00, 0x00, 0x7f, 0xfe, 0xff, 0xff, + 0xff, 0xff, 0xfb, 0xe0, 0x00, 0x00, 0x1f, 0xfe, 0xff, 0xff, + 0xff, 0xff, 0xf7, 0xe0, 0x00, 0x00, 0x07, 0xbf, 0x7f, 0xff, + 0xff, 0xff, 0xf7, 0xc0, 0x00, 0x00, 0x03, 0xbf, 0x7f, 0xff, + 0xff, 0xff, 0xef, 0xc0, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff, + 0xff, 0xff, 0xef, 0x80, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff, + 0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff, + 0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x01, 0xef, 0xdf, 0xff, + 0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x01, 0xef, 0xdf, 0xff, + 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, + 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, + 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, + 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, + 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x03, 0x03, 0xdf, 0xff, + 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x02, 0xfd, 0xdf, 0xff, + 0xff, 0xff, 0xa3, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xdf, 0xff, + 0xff, 0xff, 0xc1, 0xc0, 0x00, 0x00, 0x11, 0xff, 0x3f, 0xff, + 0xff, 0xff, 0x80, 0xe0, 0x00, 0x00, 0x21, 0xfe, 0x3f, 0xff, + 0xff, 0xff, 0x00, 0x70, 0x00, 0x00, 0x21, 0xfc, 0x3f, 0xff, + 0xff, 0xfe, 0x00, 0x3c, 0x00, 0x00, 0x20, 0xf8, 0x3f, 0xff, + 0xff, 0xf0, 0x00, 0x3e, 0x00, 0x00, 0x20, 0x00, 0x3f, 0xff, + 0xff, 0xc0, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x3f, 0xff, + 0xff, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x20, 0x00, 0x1f, 0xff, + 0xff, 0xc0, 0x00, 0x0f, 0x80, 0x00, 0x20, 0x00, 0x07, 0xff, + 0xff, 0xc0, 0x00, 0x07, 0x80, 0x00, 0x20, 0x00, 0x03, 0xff, + 0xff, 0xc0, 0x00, 0x07, 0x80, 0x00, 0x60, 0x00, 0x01, 0xff, + 0xff, 0xc0, 0x00, 0x02, 0x00, 0x00, 0xe0, 0x00, 0x01, 0xff, + 0xff, 0xc0, 0x00, 0x01, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xff, + 0xff, 0xc0, 0x00, 0x00, 0x80, 0x07, 0xe0, 0x00, 0x03, 0xff, + 0xff, 0xc0, 0x00, 0x00, 0x80, 0x3f, 0xe0, 0x00, 0x0f, 0xff, + 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x1f, 0xff, + 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x7f, 0xff, + 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0xff, 0xff, + 0xff, 0xfc, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x03, 0xff, 0xff, + 0xff, 0xff, 0xc0, 0x00, 0x70, 0x00, 0xc0, 0x07, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x00, 0x8f, 0xff, 0x20, 0x0f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + +#endif /* !__HAVE_ARCH_LINUX_LOGOBW */ + +#ifndef __HAVE_ARCH_LINUX_LOGO16 + +unsigned char linux_logo16[] __initdata = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x88, 0x80, 0x00, 0x00, 0x08, 0x88, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x80, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x08, 0x70, 0x00, 0x00, 0x00, 0x77, 0x70, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x87, 0x77, 0x00, 0x00, 0x07, 0xff, 0xf7, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x77, 0xff, 0x00, 0x00, 0x7f, 0x77, 0xf7, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x70, 0x0f, 0x80, 0x00, 0xf7, 0x08, 0x7f, 0x70, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x80, 0x07, 0x80, 0x00, 0xf8, 0x00, 0x8f, 0x70, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x70, 0x07, 0x88, 0x88, 0xf8, 0x00, 0x8f, 0x70, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0xf0, 0x06, 0xe6, 0xe6, 0xe6, 0x00, 0x8f, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x77, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x77, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x06, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x60, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, + 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, 0x66, 0x80, + 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, + 0x86, 0xe6, 0xe6, 0xe6, 0x66, 0x66, 0x66, 0x80, + 0x08, 0x78, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, + 0x86, 0x66, 0x66, 0x66, 0x66, 0x66, 0x77, 0x70, + 0x00, 0x77, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x87, 0x66, 0x66, 0x66, 0x66, 0x77, 0x77, 0x78, + 0x00, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x87, 0x76, 0x66, 0x66, 0x77, 0x77, 0xff, 0xf7, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, + 0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, + 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, + 0x70, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8f, + 0xff, 0xf7, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x87, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x87, 0x77, + 0xff, 0xf7, 0x77, 0xff, 0xff, 0xff, 0x77, 0x77, + 0x77, 0x78, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x77, 0x7f, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x77, + 0x77, 0x78, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf7, 0x77, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x08, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x77, 0x80, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x80, 0x07, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x78, 0x00, 0x08, 0x80, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x08, 0x00, 0x8f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf7, 0x08, 0x80, 0x80, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x08, 0x08, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf7, 0x08, 0x80, 0x80, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x08, 0x07, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x00, 0x08, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x80, 0x0f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x80, 0x8f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x08, 0x00, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x08, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x08, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x08, 0x08, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x88, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x88, 0x88, 0x80, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x06, 0xe6, 0x00, 0x8f, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x80, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x6e, 0x6e, 0x60, 0x08, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x88, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0xe6, 0xe6, 0xe6, 0x00, 0x8f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0x6e, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x08, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x06, + 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x8f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0x6e, 0x60, 0x00, 0x00, 0x00, 0x0e, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x08, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x76, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0xe6, + 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x8f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf7, 0x7e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x00, 0x08, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf7, 0x76, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x00, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf7, 0x7e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x00, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf7, 0x76, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, + 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf7, 0x8e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x88, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x78, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xef, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, + 0x80, 0x06, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, + 0x00, 0x06, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x80, + 0x00, 0x06, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, + 0x67, 0xff, 0xff, 0xff, 0xff, 0x78, 0x80, 0x00, + 0x00, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x86, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, + 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x6e, 0x6e, 0x6e, + 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, + 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x86, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, 0x66, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, + 0x66, 0x66, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, + 0x60, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, + 0x00, 0x06, 0x66, 0xe6, 0xe6, 0xe6, 0x66, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x66, 0x66, 0x66, 0x66, 0xe6, 0xe6, 0x66, + 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x88, 0x86, 0x66, 0x6e, 0x6e, 0x66, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x66, 0x66, 0x66, 0x66, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x66, 0x66, 0x60, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +#endif /* !__HAVE_ARCH_LINUX_LOGO16 */ + +#else /* !INCLUDE_LINUX_LOGO_DATA */ + +/* prototypes only */ +extern unsigned char linux_logo_red[]; +extern unsigned char linux_logo_green[]; +extern unsigned char linux_logo_blue[]; +extern unsigned char linux_logo[]; +extern unsigned char linux_logo_bw[]; +extern unsigned char linux_logo16[]; -#include <linux/linux_logo.h> +#endif /* !INCLUDE_LINUX_LOGO_DATA */ diff --git a/include/asm-parisc/module.h b/include/asm-parisc/module.h index 6fc273fb5e79..f6c2466621f4 100644 --- a/include/asm-parisc/module.h +++ b/include/asm-parisc/module.h @@ -3,10 +3,23 @@ /* * This file contains the parisc architecture specific module code. */ +#ifdef __LP64__ +#define Elf_Shdr Elf64_Shdr +#define Elf_Sym Elf64_Sym +#define Elf_Ehdr Elf64_Ehdr +#else +#define Elf_Shdr Elf32_Shdr +#define Elf_Sym Elf32_Sym +#define Elf_Ehdr Elf32_Ehdr +#endif #define module_map(x) vmalloc(x) #define module_unmap(x) vfree(x) #define module_arch_init(x) (0) #define arch_init_modules(x) do { } while (0) +struct mod_arch_specific +{ +}; + #endif /* _ASM_PARISC_MODULE_H */ diff --git a/include/asm-parisc/page.h b/include/asm-parisc/page.h index f754c241f7dd..b5db7b3da584 100644 --- a/include/asm-parisc/page.h +++ b/include/asm-parisc/page.h @@ -86,20 +86,6 @@ extern int npmem_ranges; /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) -/* - * Tell the user there is some problem. Beep too, so we can - * see^H^H^Hhear bugs in early bootup as well! - * - * We don't beep yet. prumpf - */ -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ -} while (0) - -#define PAGE_BUG(page) do { \ - BUG(); \ -} while (0) - #define LINUX_GATEWAY_SPACE 0 #define __PAGE_OFFSET (0x10000000) diff --git a/include/asm-parisc/parisc-device.h b/include/asm-parisc/parisc-device.h new file mode 100644 index 000000000000..bd12a223bf3f --- /dev/null +++ b/include/asm-parisc/parisc-device.h @@ -0,0 +1,43 @@ +#include <linux/device.h> + +struct parisc_device { + unsigned long hpa; /* Hard Physical Address */ + struct parisc_device_id id; + struct parisc_device *parent; + struct parisc_device *sibling; + struct parisc_device *child; + struct parisc_driver *driver; /* Driver for this device */ + void *sysdata; /* Driver instance private data */ + char name[80]; /* The hardware description */ + int irq; + + char hw_path; /* The module number on this bus */ + unsigned int num_addrs; /* some devices have additional address ranges. */ + unsigned long *addr; /* which will be stored here */ + +#ifdef __LP64__ + /* parms for pdc_pat_cell_module() call */ + unsigned long pcell_loc; /* Physical Cell location */ + unsigned long mod_index; /* PAT specific - Misc Module info */ + + /* generic info returned from pdc_pat_cell_module() */ + unsigned long mod_info; /* PAT specific - Misc Module info */ + unsigned long pmod_loc; /* physical Module location */ +#endif + u64 dma_mask; /* DMA mask for I/O */ + struct device dev; +}; + +struct parisc_driver { + struct parisc_driver *next; + char *name; + const struct parisc_device_id *id_table; + int (*probe) (struct parisc_device *dev); /* New device discovered */ + struct device_driver drv; +}; + + +#define to_parisc_device(d) container_of(d, struct parisc_device, dev) +#define to_parisc_driver(d) container_of(d, struct parisc_driver, drv) + +extern struct bus_type parisc_bus_type; diff --git a/include/asm-parisc/pci.h b/include/asm-parisc/pci.h index ef9c324d7ce8..2dbd703983e7 100644 --- a/include/asm-parisc/pci.h +++ b/include/asm-parisc/pci.h @@ -131,74 +131,6 @@ struct pci_bios_ops { void (*fixup_bus)(struct pci_bus *bus); }; -/* -** See Documentation/DMA-mapping.txt -*/ -struct pci_dma_ops { - int (*dma_supported)(struct pci_dev *dev, u64 mask); - void *(*alloc_consistent)(struct pci_dev *dev, size_t size, dma_addr_t *iova); - void (*free_consistent)(struct pci_dev *dev, size_t size, void *vaddr, dma_addr_t iova); - dma_addr_t (*map_single)(struct pci_dev *dev, void *addr, size_t size, int direction); - void (*unmap_single)(struct pci_dev *dev, dma_addr_t iova, size_t size, int direction); - int (*map_sg)(struct pci_dev *dev, struct scatterlist *sg, int nents, int direction); - void (*unmap_sg)(struct pci_dev *dev, struct scatterlist *sg, int nhwents, int direction); - void (*dma_sync_single)(struct pci_dev *dev, dma_addr_t iova, size_t size, int direction); - void (*dma_sync_sg)(struct pci_dev *dev, struct scatterlist *sg, int nelems, int direction); -}; - - -/* -** We could live without the hppa_dma_ops indirection if we didn't want -** to support 4 different coherent dma models with one binary (they will -** someday be loadable modules): -** I/O MMU consistent method dma_sync behavior -** ============= ====================== ======================= -** a) PA-7x00LC uncachable host memory flush/purge -** b) U2/Uturn cachable host memory NOP -** c) Ike/Astro cachable host memory NOP -** d) EPIC/SAGA memory on EPIC/SAGA flush/reset DMA channel -** -** PA-7[13]00LC processors have a GSC bus interface and no I/O MMU. -** -** Systems (eg PCX-T workstations) that don't fall into the above -** categories will need to modify the needed drivers to perform -** flush/purge and allocate "regular" cacheable pages for everything. -*/ - -extern struct pci_dma_ops *hppa_dma_ops; - -#ifdef CONFIG_PA11 -extern struct pci_dma_ops pcxl_dma_ops; -extern struct pci_dma_ops pcx_dma_ops; -#endif - -/* -** Oops hard if we haven't setup hppa_dma_ops by the time the first driver -** attempts to initialize. -** Since panic() is a (void)(), pci_dma_panic() is needed to satisfy -** the (int)() required by pci_dma_supported() interface. -*/ -static inline int pci_dma_panic(char *msg) -{ - extern void panic(const char *, ...); /* linux/kernel.h */ - panic(msg); - /* NOTREACHED */ - return -1; -} - -#define pci_dma_supported(p, m) ( \ - (NULL == hppa_dma_ops) \ - ? pci_dma_panic("Dynamic DMA support missing...OOPS!\n(Hint: was Astro/Ike/U2/Uturn not claimed?)\n") \ - : hppa_dma_ops->dma_supported(p,m) \ -) - -#define pci_alloc_consistent(p, s, a) hppa_dma_ops->alloc_consistent(p,s,a) -#define pci_free_consistent(p, s, v, a) hppa_dma_ops->free_consistent(p,s,v,a) -#define pci_map_single(p, v, s, d) hppa_dma_ops->map_single(p, v, s, d) -#define pci_unmap_single(p, a, s, d) hppa_dma_ops->unmap_single(p, a, s, d) -#define pci_map_sg(p, sg, n, d) hppa_dma_ops->map_sg(p, sg, n, d) -#define pci_unmap_sg(p, sg, n, d) hppa_dma_ops->unmap_sg(p, sg, n, d) - /* pci_unmap_{single,page} is not a nop, thus... */ #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ dma_addr_t ADDR_NAME; @@ -213,24 +145,6 @@ static inline int pci_dma_panic(char *msg) #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ (((PTR)->LEN_NAME) = (VAL)) -/* For U2/Astro/Ike based platforms (which are fully I/O coherent) -** dma_sync is a NOP. Let's keep the performance path short here. -*/ -#define pci_dma_sync_single(p, a, s, d) { if (hppa_dma_ops->dma_sync_single) \ - hppa_dma_ops->dma_sync_single(p, a, s, d); \ - } -#define pci_dma_sync_sg(p, sg, n, d) { if (hppa_dma_ops->dma_sync_sg) \ - hppa_dma_ops->dma_sync_sg(p, sg, n, d); \ - } - -/* No highmem on parisc, plus we have an IOMMU, so mapping pages is easy. */ -#define pci_map_page(dev, page, off, size, dir) \ - pci_map_single(dev, (page_address(page) + (off)), size, dir) -#define pci_unmap_page(dev,addr,sz,dir) pci_unmap_single(dev,addr,sz,dir) - -/* Don't support DAC yet. */ -#define pci_dac_dma_supported(pci_dev, mask) (0) - /* ** Stuff declared in arch/parisc/kernel/pci.c */ @@ -243,7 +157,6 @@ extern struct pci_hba_data *parisc_pci_hba[]; #ifdef CONFIG_PCI extern void pcibios_register_hba(struct pci_hba_data *); extern void pcibios_set_master(struct pci_dev *); -extern void pcibios_assign_unassigned_resources(struct pci_bus *); #else extern inline void pcibios_register_hba(struct pci_hba_data *x) { @@ -264,35 +177,13 @@ extern inline void pcibios_register_hba(struct pci_hba_data *x) #define PCIBIOS_MIN_IO 0x10 #define PCIBIOS_MIN_MEM 0x1000 /* NBPG - but pci/setup-res.c dies */ -/* Return the index of the PCI controller for device PDEV. */ -#define pci_controller_num(PDEV) (0) - -#define GET_IOC(dev) ((struct ioc *)(HBA_DATA(dev->sysdata)->iommu)) +/* Don't support DAC yet. */ +#define pci_dac_dma_supported(pci_dev, mask) (0) -#ifdef CONFIG_IOMMU_CCIO -struct parisc_device; -struct ioc; -void * ccio_get_iommu(const struct parisc_device *dev); -struct pci_dev * ccio_get_fake(const struct parisc_device *dev); -int ccio_request_resource(const struct parisc_device *dev, - struct resource *res); -int ccio_allocate_resource(const struct parisc_device *dev, - struct resource *res, unsigned long size, - unsigned long min, unsigned long max, unsigned long align, - void (*alignf)(void *, struct resource *, unsigned long, unsigned long), - void *alignf_data); -#else /* !CONFIG_IOMMU_CCIO */ -#define ccio_get_iommu(dev) NULL -#define ccio_get_fake(dev) NULL -#define ccio_request_resource(dev, res) request_resource(&iomem_resource, res) -#define ccio_allocate_resource(dev, res, size, min, max, align, alignf, data) \ - allocate_resource(&iomem_resource, res, size, min, max, \ - align, alignf, data) -#endif /* !CONFIG_IOMMU_CCIO */ +/* Return the index of the PCI controller for device PDEV. */ +#define pci_controller_num(PDEV) (0) -#ifdef CONFIG_IOMMU_SBA -struct parisc_device; -void * sba_get_iommu(struct parisc_device *dev); -#endif +/* export the pci_ DMA API in terms of the dma_ one */ +#include <asm-generic/pci-dma-compat.h> #endif /* __ASM_PARISC_PCI_H */ diff --git a/include/asm-parisc/posix_types.h b/include/asm-parisc/posix_types.h index 7c6891647493..6ec66e81eb85 100644 --- a/include/asm-parisc/posix_types.h +++ b/include/asm-parisc/posix_types.h @@ -55,27 +55,6 @@ typedef struct { typedef __kernel_uid_t __kernel_old_uid_t; typedef __kernel_gid_t __kernel_old_gid_t; -#if defined(__KERNEL__) && defined(__LP64__) -/* Now 32bit compatibility types */ -typedef unsigned int __kernel_dev_t32; -typedef unsigned int __kernel_ino_t32; -typedef unsigned short __kernel_mode_t32; -typedef unsigned short __kernel_nlink_t32; -typedef int __kernel_off_t32; -typedef int __kernel_pid_t32; -typedef unsigned short __kernel_ipc_pid_t32; -typedef unsigned int __kernel_uid_t32; -typedef unsigned int __kernel_gid_t32; -typedef unsigned int __kernel_size_t32; -typedef int __kernel_ssize_t32; -typedef int __kernel_ptrdiff_t32; -typedef int __kernel_time_t32; -typedef int __kernel_suseconds_t32; -typedef int __kernel_clock_t32; -typedef int __kernel_daddr_t32; -typedef unsigned int __kernel_caddr_t32; -#endif - #if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) #undef __FD_SET diff --git a/include/asm-parisc/processor.h b/include/asm-parisc/processor.h index 20395b7c8eb5..2feb19370ed8 100644 --- a/include/asm-parisc/processor.h +++ b/include/asm-parisc/processor.h @@ -140,10 +140,7 @@ struct thread_struct { * Return saved PC of a blocked thread. This is used by ps mostly. */ -static inline unsigned long thread_saved_pc(struct task_struct *t) -{ - return 0xabcdef; -} +unsigned long thread_saved_pc(struct task_struct *t); /* * Start user thread in another space. diff --git a/include/asm-parisc/stat.h b/include/asm-parisc/stat.h index 1b9192413515..bfb286a02f3c 100644 --- a/include/asm-parisc/stat.h +++ b/include/asm-parisc/stat.h @@ -89,11 +89,11 @@ struct stat64 { signed long long st_blocks; signed int st_atime; - unsigned int __unused1; + unsigned int st_atime_nsec; signed int st_mtime; - unsigned int __unused2; + unsigned int st_mtime_nsec; signed int st_ctime; - unsigned int __unused3; + unsigned int st_ctime_nsec; unsigned long long st_ino; }; diff --git a/include/asm-parisc/system.h b/include/asm-parisc/system.h index 0012cfe76409..318a3deaabc2 100644 --- a/include/asm-parisc/system.h +++ b/include/asm-parisc/system.h @@ -129,6 +129,7 @@ static inline void set_eiem(unsigned long val) #define rmb() mb() #define wmb() mb() #define smp_mb() mb() +#define smp_rmb() mb() #define smp_wmb() mb() #define smp_read_barrier_depends() do { } while(0) #define read_barrier_depends() do { } while(0) diff --git a/include/asm-parisc/thread_info.h b/include/asm-parisc/thread_info.h index bfc106fd291b..57fb3ae6b022 100644 --- a/include/asm-parisc/thread_info.h +++ b/include/asm-parisc/thread_info.h @@ -12,6 +12,7 @@ struct thread_info { __u32 flags; /* thread_info flags (see TIF_*) */ __u32 cpu; /* current CPU */ mm_segment_t addr_limit; /* user-level address space limit */ + struct restart_block restart_block; __s32 preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */ }; @@ -60,9 +61,6 @@ struct thread_info { #define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling TIF_NEED_RESCHED */ #define TIF_32BIT 5 /* 32 bit binary */ -#define TIF_WORK_MASK 0x7 /* like TIF_ALLWORK_BITS but sans TIF_SYSCALL_TRACE */ -#define TIF_ALLWORK_MASK 0xf /* bits 0..3 are "work to do on user-return" bits */ - #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) diff --git a/include/asm-parisc/uaccess.h b/include/asm-parisc/uaccess.h index c15d0789aa60..8bd1067c4a50 100644 --- a/include/asm-parisc/uaccess.h +++ b/include/asm-parisc/uaccess.h @@ -37,8 +37,8 @@ #if BITS_PER_LONG == 32 #define LDD_KERNEL(ptr) BUG() #define LDD_USER(ptr) BUG() -#define STD_KERNEL(x, ptr) __put_kernel_asm64(x,ptr) -#define STD_USER(x, ptr) __put_user_asm64(x,ptr) +#define STD_KERNEL(x, ptr) __put_kernel_asm64((u32)x,ptr) +#define STD_USER(x, ptr) __put_user_asm64((u32)x,ptr) #else #define LDD_KERNEL(ptr) __get_kernel_asm("ldd",ptr) #define LDD_USER(ptr) __get_user_asm("ldd",ptr) @@ -61,9 +61,6 @@ struct exception_table_entry { long skip; /* pcoq skip | r9 clear flag | r8 -EFAULT flag */ }; -extern const struct exception_table_entry - *search_exception_table(unsigned long addr); - #define __get_user(x,ptr) \ ({ \ register long __gu_err __asm__ ("r8") = 0; \ diff --git a/include/asm-parisc/unistd.h b/include/asm-parisc/unistd.h index 246c3f7e7bcf..dc8979b6eb2b 100644 --- a/include/asm-parisc/unistd.h +++ b/include/asm-parisc/unistd.h @@ -701,8 +701,28 @@ #define __NR_gettid (__NR_Linux + 206) #define __NR_readahead (__NR_Linux + 207) #define __NR_tkill (__NR_Linux + 208) - -#define __NR_Linux_syscalls 208 +#define __NR_sendfile64 (__NR_Linux + 209) +#define __NR_futex (__NR_Linux + 210) +#define __NR_sched_setaffinity (__NR_Linux + 211) +#define __NR_sched_getaffinity (__NR_Linux + 212) +#define __NR_set_thread_area (__NR_Linux + 213) +#define __NR_get_thread_area (__NR_Linux + 214) +#define __NR_io_setup (__NR_Linux + 215) +#define __NR_io_destroy (__NR_Linux + 216) +#define __NR_io_getevents (__NR_Linux + 217) +#define __NR_io_submit (__NR_Linux + 218) +#define __NR_io_cancel (__NR_Linux + 219) +#define __NR_alloc_hugepages (__NR_Linux + 220) +#define __NR_free_hugepages (__NR_Linux + 221) +#define __NR_exit_group (__NR_Linux + 222) +#define __NR_lookup_dcookie (__NR_Linux + 223) +#define __NR_epoll_create (__NR_Linux + 224) +#define __NR_epoll_ctl (__NR_Linux + 225) +#define __NR_epoll_wait (__NR_Linux + 226) +#define __NR_remap_file_pages (__NR_Linux + 227) + + +#define __NR_Linux_syscalls 228 #define HPUX_GATEWAY_ADDR 0xC0000004 #define LINUX_GATEWAY_ADDR 0x100 diff --git a/include/asm-ppc/bug.h b/include/asm-ppc/bug.h new file mode 100644 index 000000000000..848c69a703b5 --- /dev/null +++ b/include/asm-ppc/bug.h @@ -0,0 +1,21 @@ +#ifndef _PPC_BUG_H +#define _PPC_BUG_H + +#include <linux/config.h> +#include <asm/system.h> /* for xmon definition */ + +#ifdef CONFIG_XMON +extern void xmon(struct pt_regs *); +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ + xmon(0); \ +} while (0) +#else +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ + __asm__ __volatile__(".long 0x0"); \ +} while (0) +#endif +#define PAGE_BUG(page) do { BUG(); } while (0) + +#endif diff --git a/include/asm-ppc/page.h b/include/asm-ppc/page.h index e0429c2b5bc7..ff0f8f9acf62 100644 --- a/include/asm-ppc/page.h +++ b/include/asm-ppc/page.h @@ -14,9 +14,6 @@ #define KERNELBASE PAGE_OFFSET #ifndef __ASSEMBLY__ -#include <asm/processor.h> /* for BUG definition */ - -#define PAGE_BUG(page) do { BUG(); } while (0) #define STRICT_MM_TYPECHECKS diff --git a/include/asm-ppc/processor.h b/include/asm-ppc/processor.h index 6c7193953195..b958da9e3c13 100644 --- a/include/asm-ppc/processor.h +++ b/include/asm-ppc/processor.h @@ -718,19 +718,6 @@ extern inline void prefetchw(const void *x) #define spin_lock_prefetch(x) prefetchw(x) -#ifdef CONFIG_XMON -extern void xmon(struct pt_regs *); -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ - xmon(0); \ -} while (0) -#else -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ - __asm__ __volatile__(".long 0x0"); \ -} while (0) -#endif - #endif /* !__ASSEMBLY__ */ #endif /* __ASM_PPC_PROCESSOR_H */ diff --git a/include/asm-s390/bug.h b/include/asm-s390/bug.h new file mode 100644 index 000000000000..38f2940e72df --- /dev/null +++ b/include/asm-s390/bug.h @@ -0,0 +1,13 @@ +#ifndef _S390_BUG_H +#define _S390_BUG_H + +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ + __asm__ __volatile__(".long 0"); \ +} while (0) + +#define PAGE_BUG(page) do { \ + BUG(); \ +} while (0) + +#endif diff --git a/include/asm-s390/page.h b/include/asm-s390/page.h index 273b1a528af1..75ce536327d9 100644 --- a/include/asm-s390/page.h +++ b/include/asm-s390/page.h @@ -62,15 +62,6 @@ static inline void copy_page(void *to, void *from) #define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ - __asm__ __volatile__(".long 0"); \ -} while (0) - -#define PAGE_BUG(page) do { \ - BUG(); \ -} while (0) - /* Pure 2^n version of get_order */ extern __inline__ int get_order(unsigned long size) { diff --git a/include/asm-s390x/bug.h b/include/asm-s390x/bug.h new file mode 100644 index 000000000000..38f2940e72df --- /dev/null +++ b/include/asm-s390x/bug.h @@ -0,0 +1,13 @@ +#ifndef _S390_BUG_H +#define _S390_BUG_H + +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ + __asm__ __volatile__(".long 0"); \ +} while (0) + +#define PAGE_BUG(page) do { \ + BUG(); \ +} while (0) + +#endif diff --git a/include/asm-s390x/page.h b/include/asm-s390x/page.h index ddbed4167af4..e075af90adb2 100644 --- a/include/asm-s390x/page.h +++ b/include/asm-s390x/page.h @@ -60,15 +60,6 @@ static inline void copy_page(void *to, void *from) #define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ - __asm__ __volatile__(".long 0"); \ -} while (0) - -#define PAGE_BUG(page) do { \ - BUG(); \ -} while (0) - /* Pure 2^n version of get_order */ extern __inline__ int get_order(unsigned long size) { diff --git a/include/asm-sh/bug.h b/include/asm-sh/bug.h new file mode 100644 index 000000000000..a8624ef03788 --- /dev/null +++ b/include/asm-sh/bug.h @@ -0,0 +1,16 @@ +#ifndef __ASM_SH_BUG_H +#define __ASM_SH_BUG_H + +/* + * Tell the user there is some problem. + */ +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ + asm volatile("nop"); \ +} while (0) + +#define PAGE_BUG(page) do { \ + BUG(); \ +} while (0) + +#endif diff --git a/include/asm-sh/page.h b/include/asm-sh/page.h index b124b63e23ce..742f66dac325 100644 --- a/include/asm-sh/page.h +++ b/include/asm-sh/page.h @@ -90,18 +90,6 @@ typedef struct { unsigned long pgprot; } pgprot_t; #ifndef __ASSEMBLY__ -/* - * Tell the user there is some problem. - */ -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ - asm volatile("nop"); \ -} while (0) - -#define PAGE_BUG(page) do { \ - BUG(); \ -} while (0) - /* Pure 2^n version of get_order */ static __inline__ int get_order(unsigned long size) { diff --git a/include/asm-sparc/bug.h b/include/asm-sparc/bug.h new file mode 100644 index 000000000000..2100cc50f97c --- /dev/null +++ b/include/asm-sparc/bug.h @@ -0,0 +1,25 @@ +/* $Id$ */ +#ifndef _SPARC_BUG_H +#define _SPARC_BUG_H + +/* + * XXX I am hitting compiler bugs with __builtin_trap. This has + * hit me before and rusty was blaming his netfilter bugs on + * this so lets disable it. - Anton + */ +#if 0 +/* We need the mb()'s so we don't trigger a compiler bug - Anton */ +#define BUG() do { \ + mb(); \ + __builtin_trap(); \ + mb(); \ +} while(0) +#else +#define BUG() do { \ + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); *(int *)0=0; \ +} while (0) +#endif + +#define PAGE_BUG(page) BUG() + +#endif diff --git a/include/asm-sparc/page.h b/include/asm-sparc/page.h index 7e521e0c31f4..253f216f1e1e 100644 --- a/include/asm-sparc/page.h +++ b/include/asm-sparc/page.h @@ -29,26 +29,6 @@ #ifndef __ASSEMBLY__ -/* - * XXX I am hitting compiler bugs with __builtin_trap. This has - * hit me before and rusty was blaming his netfilter bugs on - * this so lets disable it. - Anton - */ -#if 0 -/* We need the mb()'s so we don't trigger a compiler bug - Anton */ -#define BUG() do { \ - mb(); \ - __builtin_trap(); \ - mb(); \ -} while(0) -#else -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); *(int *)0=0; \ -} while (0) -#endif - -#define PAGE_BUG(page) BUG() - #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) #define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE) #define clear_user_page(addr, vaddr, page) clear_page(addr) diff --git a/include/asm-sparc64/bug.h b/include/asm-sparc64/bug.h new file mode 100644 index 000000000000..7acd49b93509 --- /dev/null +++ b/include/asm-sparc64/bug.h @@ -0,0 +1,17 @@ +/* $Id$ */ + +#ifndef _SPARC64_BUG_H +#define _SPARC64_BUG_H + +#ifdef CONFIG_DEBUG_BUGVERBOSE +extern void do_BUG(const char *file, int line); +#define BUG() do { \ + do_BUG(__FILE__, __LINE__); \ + __builtin_trap(); \ +} while (0) +#else +#define BUG() __builtin_trap() +#endif + + +#endif diff --git a/include/asm-sparc64/page.h b/include/asm-sparc64/page.h index 208650062ebf..2fc25cfb7be8 100644 --- a/include/asm-sparc64/page.h +++ b/include/asm-sparc64/page.h @@ -20,18 +20,6 @@ #ifndef __ASSEMBLY__ -#ifdef CONFIG_DEBUG_BUGVERBOSE -extern void do_BUG(const char *file, int line); -#define BUG() do { \ - do_BUG(__FILE__, __LINE__); \ - __builtin_trap(); \ -} while (0) -#else -#define BUG() __builtin_trap() -#endif - -#define PAGE_BUG(page) BUG() - /* Sparc64 is slow at multiplication, we prefer to use some extra space. */ #define WANT_PAGE_VIRTUAL 1 diff --git a/include/asm-v850/system.h b/include/asm-v850/system.h index d1e44e59085f..5ae2e951e33b 100644 --- a/include/asm-v850/system.h +++ b/include/asm-v850/system.h @@ -76,10 +76,12 @@ static inline int irqs_disabled (void) #define smp_mb() mb () #define smp_rmb() rmb () #define smp_wmb() wmb () +#define smp_read_barrier_depends() read_barrier_depends() #else #define smp_mb() barrier () #define smp_rmb() barrier () #define smp_wmb() barrier () +#define smp_read_barrier_depends() ((void)0) #endif #define xchg(ptr, with) \ diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 0e008ba3618c..9226268ef4ef 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -17,6 +17,7 @@ #include <linux/config.h> #include <linux/notifier.h> #include <linux/threads.h> +#include <linux/device.h> /********************************************************************* @@ -57,6 +58,7 @@ struct cpufreq_policy { unsigned int max; /* in kHz */ unsigned int policy; /* see above */ struct cpufreq_cpuinfo cpuinfo; /* see above */ + struct intf_data intf; /* interface data */ }; #define CPUFREQ_ADJUST (0) @@ -107,19 +109,29 @@ static inline unsigned long cpufreq_scale(unsigned long old, u_int div, u_int mu * CPUFREQ DRIVER INTERFACE * *********************************************************************/ +#define CPUFREQ_NAME_LEN 16 + struct cpufreq_driver { /* needed by all drivers */ int (*verify) (struct cpufreq_policy *policy); int (*setpolicy) (struct cpufreq_policy *policy); struct cpufreq_policy *policy; + char name[CPUFREQ_NAME_LEN]; + /* optional, for the moment */ + int (*init) (struct cpufreq_policy *policy); + int (*exit) (struct cpufreq_policy *policy); /* 2.4. compatible API */ #ifdef CONFIG_CPU_FREQ_24_API unsigned int cpu_cur_freq[NR_CPUS]; #endif }; -int cpufreq_register(struct cpufreq_driver *driver_data); -int cpufreq_unregister(void); +int cpufreq_register_driver(struct cpufreq_driver *driver_data); +int cpufreq_unregister_driver(struct cpufreq_driver *driver_data); +/* deprecated */ +#define cpufreq_register(x) cpufreq_register_driver(x) +#define cpufreq_unregister(x) cpufreq_unregister_driver(NULL) + void cpufreq_notify_transition(struct cpufreq_freqs *freqs, unsigned int state); diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 535ca54d1d37..53d2a111c485 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h @@ -7,7 +7,7 @@ #include <linux/list.h> #include <linux/spinlock.h> #include <linux/cache.h> -#include <asm/page.h> /* for BUG() */ +#include <asm/bug.h> struct vfsmount; diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 62092e8ed2ad..8a9c22d3b16b 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h @@ -13,6 +13,7 @@ typedef struct request *(elevator_next_req_fn) (request_queue_t *); typedef void (elevator_add_req_fn) (request_queue_t *, struct request *, struct list_head *); typedef int (elevator_queue_empty_fn) (request_queue_t *); typedef void (elevator_remove_req_fn) (request_queue_t *, struct request *); +typedef struct request *(elevator_request_list_fn) (request_queue_t *, struct request *); typedef struct list_head *(elevator_get_sort_head_fn) (request_queue_t *, struct request *); typedef int (elevator_init_fn) (request_queue_t *, elevator_t *); @@ -29,12 +30,17 @@ struct elevator_s elevator_remove_req_fn *elevator_remove_req_fn; elevator_queue_empty_fn *elevator_queue_empty_fn; - elevator_get_sort_head_fn *elevator_get_sort_head_fn; + + elevator_request_list_fn *elevator_former_req_fn; + elevator_request_list_fn *elevator_latter_req_fn; elevator_init_fn *elevator_init_fn; elevator_exit_fn *elevator_exit_fn; void *elevator_data; + + struct kobject kobj; + struct kobj_type *elevator_ktype; }; /* @@ -48,7 +54,10 @@ extern void elv_merge_requests(request_queue_t *, struct request *, extern void elv_merged_request(request_queue_t *, struct request *); extern void elv_remove_request(request_queue_t *, struct request *); extern int elv_queue_empty(request_queue_t *); -extern inline struct list_head *elv_get_sort_head(request_queue_t *, struct request *); +extern struct request *elv_former_request(request_queue_t *, struct request *); +extern struct request *elv_latter_request(request_queue_t *, struct request *); +extern int elv_register_queue(struct gendisk *); +extern void elv_unregister_queue(struct gendisk *); #define __elv_add_request_pos(q, rq, pos) \ (q)->elevator.elevator_add_req_fn((q), (rq), (pos)) @@ -64,18 +73,6 @@ extern elevator_t elevator_noop; */ extern elevator_t iosched_deadline; -/* - * use the /proc/iosched interface, all the below is history -> - */ -typedef struct blkelv_ioctl_arg_s { - int queue_ID; - int read_latency; - int write_latency; - int max_bomb_segments; -} blkelv_ioctl_arg_t; -#define BLKELVGET _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t)) -#define BLKELVSET _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t)) - extern int elevator_init(request_queue_t *, elevator_t *); extern void elevator_exit(request_queue_t *); extern inline int bio_rq_in_between(struct bio *, struct request *, struct list_head *); diff --git a/include/linux/ipmi.h b/include/linux/ipmi.h new file mode 100644 index 000000000000..e14d3f10872e --- /dev/null +++ b/include/linux/ipmi.h @@ -0,0 +1,516 @@ +/* + * ipmi.h + * + * MontaVista IPMI interface + * + * Author: MontaVista Software, Inc. + * Corey Minyard <minyard@mvista.com> + * source@mvista.com + * + * Copyright 2002 MontaVista Software Inc. + * + * 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 SOFTWARE IS PROVIDED ``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. + * + * 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., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __LINUX_IPMI_H +#define __LINUX_IPMI_H + +#include <linux/ipmi_msgdefs.h> + +/* + * This file describes an interface to an IPMI driver. You have to + * have a fairly good understanding of IPMI to use this, so go read + * the specs first before actually trying to do anything. + * + * With that said, this driver provides a multi-user interface to the + * IPMI driver, and it allows multiple IPMI physical interfaces below + * the driver. The physical interfaces bind as a lower layer on the + * driver. They appear as interfaces to the application using this + * interface. + * + * Multi-user means that multiple applications may use the driver, + * send commands, receive responses, etc. The driver keeps track of + * commands the user sends and tracks the responses. The responses + * will go back to the application that send the command. If the + * response doesn't come back in time, the driver will return a + * timeout error response to the application. Asynchronous events + * from the BMC event queue will go to all users bound to the driver. + * The incoming event queue in the BMC will automatically be flushed + * if it becomes full and it is queried once a second to see if + * anything is in it. Incoming commands to the driver will get + * delivered as commands. + * + * This driver provides two main interfaces: one for in-kernel + * applications and another for userland applications. The + * capabilities are basically the same for both interface, although + * the interfaces are somewhat different. The stuff in the + * #ifdef KERNEL below is the in-kernel interface. The userland + * interface is defined later in the file. */ + + + +/* + * This is an overlay for all the address types, so it's easy to + * determine the actual address type. This is kind of like addresses + * work for sockets. + */ +#define IPMI_MAX_ADDR_SIZE 32 +struct ipmi_addr +{ + /* Try to take these from the "Channel Medium Type" table + in section 6.5 of the IPMI 1.5 manual. */ + int addr_type; + short channel; + char data[IPMI_MAX_ADDR_SIZE]; +}; + +/* + * When the address is not used, the type will be set to this value. + * The channel is the BMC's channel number for the channel (usually + * 0), or IPMC_BMC_CHANNEL if communicating directly with the BMC. + */ +#define IPMI_SYSTEM_INTERFACE_ADDR_TYPE 0x0c +struct ipmi_system_interface_addr +{ + int addr_type; + short channel; + unsigned char lun; +}; + +/* An IPMB Address. */ +#define IPMI_IPMB_ADDR_TYPE 0x01 +/* Used for broadcast get device id as described in section 17.9 of the + IPMI 1.5 manual. */ +#define IPMI_IPMB_BROADCAST_ADDR_TYPE 0x41 +struct ipmi_ipmb_addr +{ + int addr_type; + short channel; + unsigned char slave_addr; + unsigned char lun; +}; + + +/* + * Channel for talking directly with the BMC. When using this + * channel, This is for the system interface address type only. FIXME + * - is this right, or should we use -1? + */ +#define IPMI_BMC_CHANNEL 0xf +#define IPMI_NUM_CHANNELS 0x10 + + +/* + * A raw IPMI message without any addressing. This covers both + * commands and responses. The completion code is always the first + * byte of data in the response (as the spec shows the messages laid + * out). + */ +struct ipmi_msg +{ + unsigned char netfn; + unsigned char cmd; + unsigned short data_len; + unsigned char *data; +}; + +/* + * Various defines that are useful for IPMI applications. + */ +#define IPMI_INVALID_CMD_COMPLETION_CODE 0xC1 +#define IPMI_TIMEOUT_COMPLETION_CODE 0xC3 +#define IPMI_UNKNOWN_ERR_COMPLETION_CODE 0xff + + +/* + * Receive types for messages coming from the receive interface. This + * is used for the receive in-kernel interface and in the receive + * IOCTL. + */ +#define IPMI_RESPONSE_RECV_TYPE 1 /* A response to a command */ +#define IPMI_ASYNC_EVENT_RECV_TYPE 2 /* Something from the event queue */ +#define IPMI_CMD_RECV_TYPE 3 /* A command from somewhere else */ +/* Note that async events and received commands do not have a completion + code as the first byte of the incoming data, unlike a response. */ + + + +#ifdef __KERNEL__ + +/* + * The in-kernel interface. + */ +#include <linux/list.h> + +/* Opaque type for a IPMI message user. One of these is needed to + send and receive messages. */ +typedef struct ipmi_user *ipmi_user_t; + +/* + * Stuff coming from the recieve interface comes as one of these. + * They are allocated, the receiver must free them with + * ipmi_free_recv_msg() when done with the message. The link is not + * used after the message is delivered, so the upper layer may use the + * link to build a linked list, if it likes. + */ +struct ipmi_recv_msg +{ + struct list_head link; + + /* The type of message as defined in the "Receive Types" + defines above. */ + int recv_type; + + ipmi_user_t user; + struct ipmi_addr addr; + long msgid; + struct ipmi_msg msg; + + /* Call this when done with the message. It will presumably free + the message and do any other necessary cleanup. */ + void (*done)(struct ipmi_recv_msg *msg); + + /* Place-holder for the data, don't make any assumptions about + the size or existance of this, since it may change. */ + unsigned char msg_data[IPMI_MAX_MSG_LENGTH]; +}; + +/* Allocate and free the receive message. */ +static inline void ipmi_free_recv_msg(struct ipmi_recv_msg *msg) +{ + msg->done(msg); +} +struct ipmi_recv_msg *ipmi_alloc_recv_msg(void); + +struct ipmi_user_hndl +{ + /* Routine type to call when a message needs to be routed to + the upper layer. This will be called with some locks held, + the only IPMI routines that can be called are ipmi_request + and the alloc/free operations. */ + void (*ipmi_recv_hndl)(struct ipmi_recv_msg *msg, + void *handler_data); + + /* Called when the interface detects a watchdog pre-timeout. If + this is NULL, it will be ignored for the user. */ + void (*ipmi_watchdog_pretimeout)(void *handler_data); +}; + +/* Create a new user of the IPMI layer on the given interface number. */ +int ipmi_create_user(unsigned int if_num, + struct ipmi_user_hndl *handler, + void *handler_data, + ipmi_user_t *user); + +/* Destroy the given user of the IPMI layer. */ +int ipmi_destroy_user(ipmi_user_t user); + +/* Get the IPMI version of the BMC we are talking to. */ +void ipmi_get_version(ipmi_user_t user, + unsigned char *major, + unsigned char *minor); + +/* Set and get the slave address and LUN that we will use for our + source messages. Note that this affects the interface, not just + this user, so it will affect all users of this interface. This is + so some initialization code can come in and do the OEM-specific + things it takes to determine your address (if not the BMC) and set + it for everyone else. */ +void ipmi_set_my_address(ipmi_user_t user, + unsigned char address); +unsigned char ipmi_get_my_address(ipmi_user_t user); +void ipmi_set_my_LUN(ipmi_user_t user, + unsigned char LUN); +unsigned char ipmi_get_my_LUN(ipmi_user_t user); + +/* + * Send a command request from the given user. The address is the + * proper address for the channel type. If this is a command, then + * the message response comes back, the receive handler for this user + * will be called with the given msgid value in the recv msg. If this + * is a response to a command, then the msgid will be used as the + * sequence number for the response (truncated if necessary), so when + * sending a response you should use the sequence number you received + * in the msgid field of the received command. If the priority is > + * 0, the message will go into a high-priority queue and be sent + * first. Otherwise, it goes into a normal-priority queue. + */ +int ipmi_request(ipmi_user_t user, + struct ipmi_addr *addr, + long msgid, + struct ipmi_msg *msg, + int priority); + +/* + * Like ipmi_request, but lets you specify the slave return address. + */ +int ipmi_request_with_source(ipmi_user_t user, + struct ipmi_addr *addr, + long msgid, + struct ipmi_msg *msg, + int priority, + unsigned char source_address, + unsigned char source_lun); + +/* + * Like ipmi_request, but with messages supplied. This will not + * allocate any memory, and the messages may be statically allocated + * (just make sure to do the "done" handling on them). Note that this + * is primarily for the watchdog timer, since it should be able to + * send messages even if no memory is available. This is subject to + * change as the system changes, so don't use it unless you REALLY + * have to. + */ +int ipmi_request_supply_msgs(ipmi_user_t user, + struct ipmi_addr *addr, + long msgid, + struct ipmi_msg *msg, + void *supplied_smi, + struct ipmi_recv_msg *supplied_recv, + int priority); + +/* + * When commands come in to the SMS, the user can register to receive + * them. Only one user can be listening on a specific netfn/cmd pair + * at a time, you will get an EBUSY error if the command is already + * registered. If a command is received that does not have a user + * registered, the driver will automatically return the proper + * error. + */ +int ipmi_register_for_cmd(ipmi_user_t user, + unsigned char netfn, + unsigned char cmd); +int ipmi_unregister_for_cmd(ipmi_user_t user, + unsigned char netfn, + unsigned char cmd); + +/* + * When the user is created, it will not receive IPMI events by + * default. The user must set this to TRUE to get incoming events. + * The first user that sets this to TRUE will receive all events that + * have been queued while no one was waiting for events. + */ +int ipmi_set_gets_events(ipmi_user_t user, int val); + +/* + * Register the given user to handle all received IPMI commands. This + * will fail if anyone is registered as a command receiver or if + * another is already registered to receive all commands. NOTE THAT + * THIS IS FOR EMULATION USERS ONLY, DO NOT USER THIS FOR NORMAL + * STUFF. + */ +int ipmi_register_all_cmd_rcvr(ipmi_user_t user); +int ipmi_unregister_all_cmd_rcvr(ipmi_user_t user); + + +/* + * Called when a new SMI is registered. This will also be called on + * every existing interface when a new watcher is registered with + * ipmi_smi_watcher_register(). + */ +struct ipmi_smi_watcher +{ + struct list_head link; + + /* These two are called with read locks held for the interface + the watcher list. So you can add and remove users from the + IPMI interface, send messages, etc., but you cannot add + or remove SMI watchers or SMI interfaces. */ + void (*new_smi)(int if_num); + void (*smi_gone)(int if_num); +}; + +int ipmi_smi_watcher_register(struct ipmi_smi_watcher *watcher); +int ipmi_smi_watcher_unregister(struct ipmi_smi_watcher *watcher); + +/* The following are various helper functions for dealing with IPMI + addresses. */ + +/* Return the maximum length of an IPMI address given it's type. */ +unsigned int ipmi_addr_length(int addr_type); + +/* Validate that the given IPMI address is valid. */ +int ipmi_validate_addr(struct ipmi_addr *addr, int len); + +/* Return 1 if the given addresses are equal, 0 if not. */ +int ipmi_addr_equal(struct ipmi_addr *addr1, struct ipmi_addr *addr2); + +#endif /* __KERNEL__ */ + + +/* + * The userland interface + */ + +/* + * The userland interface for the IPMI driver is a standard character + * device, with each instance of an interface registered as a minor + * number under the major character device. + * + * The read and write calls do not work, to get messages in and out + * requires ioctl calls because of the complexity of the data. select + * and poll do work, so you can wait for input using the file + * descriptor, you just can use read to get it. + * + * In general, you send a command down to the interface and receive + * responses back. You can use the msgid value to correlate commands + * and responses, the driver will take care of figuring out which + * incoming messages are for which command and find the proper msgid + * value to report. You will only receive reponses for commands you + * send. Asynchronous events, however, go to all open users, so you + * must be ready to handle these (or ignore them if you don't care). + * + * The address type depends upon the channel type. When talking + * directly to the BMC (IPMC_BMC_CHANNEL), the address is ignored + * (IPMI_UNUSED_ADDR_TYPE). When talking to an IPMB channel, you must + * supply a valid IPMB address with the addr_type set properly. + * + * When talking to normal channels, the driver takes care of the + * details of formatting and sending messages on that channel. You do + * not, for instance, have to format a send command, you just send + * whatever command you want to the channel, the driver will create + * the send command, automatically issue receive command and get even + * commands, and pass those up to the proper user. + */ + + +/* The magic IOCTL value for this interface. */ +#define IPMI_IOC_MAGIC 'i' + + +/* Messages sent to the interface are this format. */ +struct ipmi_req +{ + unsigned char *addr; /* Address to send the message to. */ + unsigned int addr_len; + + long msgid; /* The sequence number for the message. This + exact value will be reported back in the + response to this request if it is a command. + If it is a response, this will be used as + the sequence value for the response. */ + + struct ipmi_msg msg; +}; +/* + * Send a message to the interfaces. error values are: + * - EFAULT - an address supplied was invalid. + * - EINVAL - The address supplied was not valid, or the command + * was not allowed. + * - EMSGSIZE - The message to was too large. + * - ENOMEM - Buffers could not be allocated for the command. + */ +#define IPMICTL_SEND_COMMAND _IOR(IPMI_IOC_MAGIC, 13, \ + struct ipmi_req) + +/* Messages received from the interface are this format. */ +struct ipmi_recv +{ + int recv_type; /* Is this a command, response or an + asyncronous event. */ + + unsigned char *addr; /* Address the message was from is put + here. The caller must supply the + memory. */ + unsigned int addr_len; /* The size of the address buffer. + The caller supplies the full buffer + length, this value is updated to + the actual message length when the + message is received. */ + + long msgid; /* The sequence number specified in the request + if this is a response. If this is a command, + this will be the sequence number from the + command. */ + + struct ipmi_msg msg; /* The data field must point to a buffer. + The data_size field must be set to the + size of the message buffer. The + caller supplies the full buffer + length, this value is updated to the + actual message length when the message + is received. */ +}; + +/* + * Receive a message. error values: + * - EAGAIN - no messages in the queue. + * - EFAULT - an address supplied was invalid. + * - EINVAL - The address supplied was not valid. + * - EMSGSIZE - The message to was too large to fit into the message buffer, + * the message will be left in the buffer. */ +#define IPMICTL_RECEIVE_MSG _IOWR(IPMI_IOC_MAGIC, 12, \ + struct ipmi_recv) + +/* + * Like RECEIVE_MSG, but if the message won't fit in the buffer, it + * will truncate the contents instead of leaving the data in the + * buffer. + */ +#define IPMICTL_RECEIVE_MSG_TRUNC _IOWR(IPMI_IOC_MAGIC, 11, \ + struct ipmi_recv) + +/* Register to get commands from other entities on this interface. */ +struct ipmi_cmdspec +{ + unsigned char netfn; + unsigned char cmd; +}; + +/* + * Register to receive a specific command. error values: + * - EFAULT - an address supplied was invalid. + * - EBUSY - The netfn/cmd supplied was already in use. + * - ENOMEM - could not allocate memory for the entry. + */ +#define IPMICTL_REGISTER_FOR_CMD _IOR(IPMI_IOC_MAGIC, 14, \ + struct ipmi_cmdspec) +/* + * Unregister a regsitered command. error values: + * - EFAULT - an address supplied was invalid. + * - ENOENT - The netfn/cmd was not found registered for this user. + */ +#define IPMICTL_UNREGISTER_FOR_CMD _IOR(IPMI_IOC_MAGIC, 15, \ + struct ipmi_cmdspec) + +/* + * Set whether this interface receives events. Note that the first + * user registered for events will get all pending events for the + * interface. error values: + * - EFAULT - an address supplied was invalid. + */ +#define IPMICTL_SET_GETS_EVENTS_CMD _IOR(IPMI_IOC_MAGIC, 16, int) + +/* + * Set and get the slave address and LUN that we will use for our + * source messages. Note that this affects the interface, not just + * this user, so it will affect all users of this interface. This is + * so some initialization code can come in and do the OEM-specific + * things it takes to determine your address (if not the BMC) and set + * it for everyone else. You should probably leave the LUN alone. + */ +#define IPMICTL_SET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 17, unsigned int) +#define IPMICTL_GET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 18, unsigned int) +#define IPMICTL_SET_MY_LUN_CMD _IOR(IPMI_IOC_MAGIC, 19, unsigned int) +#define IPMICTL_GET_MY_LUN_CMD _IOR(IPMI_IOC_MAGIC, 20, unsigned int) + +#endif /* __LINUX_IPMI_H */ diff --git a/include/linux/ipmi_msgdefs.h b/include/linux/ipmi_msgdefs.h new file mode 100644 index 000000000000..12588de3c45e --- /dev/null +++ b/include/linux/ipmi_msgdefs.h @@ -0,0 +1,58 @@ +/* + * ipmi_smi.h + * + * MontaVista IPMI system management interface + * + * Author: MontaVista Software, Inc. + * Corey Minyard <minyard@mvista.com> + * source@mvista.com + * + * Copyright 2002 MontaVista Software Inc. + * + * 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 SOFTWARE IS PROVIDED ``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. + * + * 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., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __LINUX_IPMI_MSGDEFS_H +#define __LINUX_IPMI_MSGDEFS_H + +/* Various definitions for IPMI messages used by almost everything in + the IPMI stack. */ + +#define IPMI_NETFN_APP_REQUEST 0x06 +#define IPMI_NETFN_APP_RESPONSE 0x07 + +#define IPMI_BMC_SLAVE_ADDR 0x20 + +#define IPMI_GET_DEVICE_ID_CMD 0x01 + +#define IPMI_CLEAR_MSG_FLAGS_CMD 0x30 +#define IPMI_GET_MSG_FLAGS_CMD 0x31 +#define IPMI_SEND_MSG_CMD 0x34 +#define IPMI_GET_MSG_CMD 0x33 + +#define IPMI_SET_BMC_GLOBAL_ENABLES_CMD 0x2e +#define IPMI_GET_BMC_GLOBAL_ENABLES_CMD 0x2f +#define IPMI_READ_EVENT_MSG_BUFFER_CMD 0x35 + +#define IPMI_MAX_MSG_LENGTH 80 + +#endif /* __LINUX_IPMI_MSGDEFS_H */ diff --git a/include/linux/ipmi_smi.h b/include/linux/ipmi_smi.h new file mode 100644 index 000000000000..5916dea748e3 --- /dev/null +++ b/include/linux/ipmi_smi.h @@ -0,0 +1,144 @@ +/* + * ipmi_smi.h + * + * MontaVista IPMI system management interface + * + * Author: MontaVista Software, Inc. + * Corey Minyard <minyard@mvista.com> + * source@mvista.com + * + * Copyright 2002 MontaVista Software Inc. + * + * 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 SOFTWARE IS PROVIDED ``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. + * + * 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., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __LINUX_IPMI_SMI_H +#define __LINUX_IPMI_SMI_H + +#include <linux/ipmi_msgdefs.h> + +/* This files describes the interface for IPMI system management interface + drivers to bind into the IPMI message handler. */ + +/* Structure for the low-level drivers. */ +typedef struct ipmi_smi *ipmi_smi_t; + +/* + * Messages to/from the lower layer. The smi interface will take one + * of these to send. After the send has occurred and a response has + * been received, it will report this same data structure back up to + * the upper layer. If an error occurs, it should fill in the + * response with an error code in the completion code location. When + * asyncronous data is received, one of these is allocated, the + * data_size is set to zero and the response holds the data from the + * get message or get event command that the interface initiated. + * Note that it is the interfaces responsibility to detect + * asynchronous data and messages and request them from the + * interface. + */ +struct ipmi_smi_msg +{ + struct list_head link; + + long msgid; + void *user_data; + + /* If 0, add to the end of the queue. If 1, add to the beginning. */ + int prio; + + int data_size; + unsigned char data[IPMI_MAX_MSG_LENGTH]; + + int rsp_size; + unsigned char rsp[IPMI_MAX_MSG_LENGTH]; + + /* Will be called when the system is done with the message + (presumably to free it). */ + void (*done)(struct ipmi_smi_msg *msg); +}; + +struct ipmi_smi_handlers +{ + /* Called to enqueue an SMI message to be sent. This + operation is not allowed to fail. If an error occurs, it + should report back the error in a received message. It may + do this in the current call context, since no write locks + are held when this is run. If the priority is > 0, the + message will go into a high-priority queue and be sent + first. Otherwise, it goes into a normal-priority queue. */ + void (*sender)(void *send_info, + struct ipmi_smi_msg *msg, + int priority); + + /* Called by the upper layer to request that we try to get + events from the BMC we are attached to. */ + void (*request_events)(void *send_info); + + /* Called when someone is using the interface, so the module can + adjust it's use count. Return zero if successful, or an + errno if not. */ + int (*new_user)(void *send_info); + + /* Called when someone is no longer using the interface, so the + module can adjust it's use count. */ + void (*user_left)(void *send_info); + + /* Called when the interface should go into "run to + completion" mode. If this call sets the value to true, the + interface should make sure that all messages are flushed + out and that none are pending, and any new requests are run + to completion immediately. */ + void (*set_run_to_completion)(void *send_info, int run_to_completion); +}; + +/* Add a low-level interface to the IPMI driver. */ +int ipmi_register_smi(struct ipmi_smi_handlers *handlers, + void *send_info, + unsigned char version_major, + unsigned char version_minor, + ipmi_smi_t *intf); + +/* + * Remove a low-level interface from the IPMI driver. This will + * return an error if the interface is still in use by a user. + */ +int ipmi_unregister_smi(ipmi_smi_t intf); + +/* + * The lower layer reports received messages through this interface. + * The data_size should be zero if this is an asyncronous message. If + * the lower layer gets an error sending a message, it should format + * an error response in the message response. + */ +void ipmi_smi_msg_received(ipmi_smi_t intf, + struct ipmi_smi_msg *msg); + +/* The lower layer received a watchdog pre-timeout on interface. */ +void ipmi_smi_watchdog_pretimeout(ipmi_smi_t intf); + +struct ipmi_smi_msg *ipmi_alloc_smi_msg(void); +static inline void ipmi_free_smi_msg(struct ipmi_smi_msg *msg) +{ + msg->done(msg); +} + +#endif /* __LINUX_IPMI_SMI_H */ diff --git a/include/linux/jbd.h b/include/linux/jbd.h index 5b1657fca68a..f3e44482a298 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h @@ -194,6 +194,7 @@ typedef struct journal_superblock_s #include <linux/fs.h> #include <linux/sched.h> +#include <asm/bug.h> #define JBD_ASSERTIONS #ifdef JBD_ASSERTIONS @@ -779,14 +780,6 @@ static inline void journal_abort_handle(handle_t *handle) handle->h_aborted = 1; } -/* Not all architectures define BUG() */ -#ifndef BUG - #define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ - * ((char *) 0) = 0; \ - } while (0) -#endif /* BUG */ - #endif /* __KERNEL__ */ /* Comparison functions for transaction IDs: perform comparisons using diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 7eedbb751856..5cd1d8dc77f7 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -13,6 +13,7 @@ #include <linux/types.h> #include <linux/compiler.h> #include <asm/byteorder.h> +#include <asm/bug.h> /* Optimization barrier */ /* The "volatile" is due to gcc bugs */ diff --git a/include/linux/nfs_mount.h b/include/linux/nfs_mount.h index 223ed3462064..c2268ca1ccd3 100644 --- a/include/linux/nfs_mount.h +++ b/include/linux/nfs_mount.h @@ -40,6 +40,7 @@ struct nfs_mount_data { int namlen; /* 2 */ unsigned int bsize; /* 3 */ struct nfs3_fh root; /* 4 */ + int pseudoflavor; /* 4 */ }; /* bits in the flags field */ @@ -55,10 +56,8 @@ struct nfs_mount_data { #define NFS_MOUNT_KERBEROS 0x0100 /* 3 */ #define NFS_MOUNT_NONLM 0x0200 /* 3 */ #define NFS_MOUNT_BROKEN_SUID 0x0400 /* 4 */ -#if 0 #define NFS_MOUNT_STRICTLOCK 0x1000 /* reserved for NFSv4 */ #define NFS_MOUNT_SECFLAVOUR 0x2000 /* reserved */ -#endif #define NFS_MOUNT_FLAGMASK 0xFFFF #endif diff --git a/include/linux/smp.h b/include/linux/smp.h index 06ac1c4f1530..ce016a544cd4 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h @@ -14,6 +14,7 @@ #include <linux/compiler.h> #include <linux/threads.h> #include <asm/smp.h> +#include <asm/bug.h> /* * main cross-CPU interfaces, handles INIT, TLB flush, STOP, etc. @@ -86,7 +87,6 @@ int cpu_up(unsigned int cpu); void smp_prepare_boot_cpu(void); #else /* !SMP */ -#include <asm/page.h> /* For BUG() */ /* * These macros fold the SMP functionality into a single CPU system diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 5e481026fc7e..a1ed52af2895 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h @@ -13,12 +13,25 @@ #include <linux/config.h> #include <linux/sunrpc/sched.h> +#include <linux/sunrpc/msg_prot.h> +#include <linux/sunrpc/xdr.h> #include <asm/atomic.h> /* size of the nodename buffer */ #define UNX_MAXNODENAME 32 +/* Maximum size (in bytes) of an rpc credential or verifier */ +#define RPC_MAX_AUTH_SIZE (400) + +/* Work around the lack of a VFS credential */ +struct auth_cred { + uid_t uid; + gid_t gid; + int ngroups; + gid_t *groups; +}; + /* * Client user credentials */ @@ -56,6 +69,10 @@ struct rpc_auth { unsigned int au_rslack; /* reply verf size guess */ unsigned int au_flags; /* various flags */ struct rpc_authops * au_ops; /* operations */ + rpc_authflavor_t au_flavor; /* pseudoflavor (note may + * differ from the flavor in + * au_ops->au_flavor in gss + * case) */ /* per-flavor data */ }; @@ -71,16 +88,16 @@ struct rpc_authops { #ifdef RPC_DEBUG char * au_name; #endif - struct rpc_auth * (*create)(struct rpc_clnt *); + struct rpc_auth * (*create)(struct rpc_clnt *, rpc_authflavor_t); void (*destroy)(struct rpc_auth *); - struct rpc_cred * (*crcreate)(int); + struct rpc_cred * (*crcreate)(struct rpc_auth*, struct auth_cred *, int); }; struct rpc_credops { void (*crdestroy)(struct rpc_cred *); - int (*crmatch)(struct rpc_cred *, int); + int (*crmatch)(struct auth_cred *, struct rpc_cred *, int); u32 * (*crmarshal)(struct rpc_task *, u32 *, int); int (*crrefresh)(struct rpc_task *); u32 * (*crvalidate)(struct rpc_task *, u32 *); @@ -92,10 +109,13 @@ extern struct rpc_authops authnull_ops; extern struct rpc_authops authdes_ops; #endif +u32 pseudoflavor_to_flavor(rpc_authflavor_t); + int rpcauth_register(struct rpc_authops *); int rpcauth_unregister(struct rpc_authops *); struct rpc_auth * rpcauth_create(rpc_authflavor_t, struct rpc_clnt *); void rpcauth_destroy(struct rpc_auth *); +struct rpc_cred * rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred *, int); struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int); struct rpc_cred * rpcauth_bindcred(struct rpc_task *); void rpcauth_holdcred(struct rpc_task *); diff --git a/include/linux/sunrpc/auth_gss.h b/include/linux/sunrpc/auth_gss.h new file mode 100644 index 000000000000..1006c4fd6a99 --- /dev/null +++ b/include/linux/sunrpc/auth_gss.h @@ -0,0 +1,98 @@ +/* + * linux/include/linux/auth_gss.h + * + * Declarations for RPCSEC_GSS + * + * Dug Song <dugsong@monkey.org> + * Andy Adamson <andros@umich.edu> + * Bruce Fields <bfields@umich.edu> + * Copyright (c) 2000 The Regents of the University of Michigan + * + * $Id$ + */ + +#ifndef _LINUX_SUNRPC_AUTH_GSS_H +#define _LINUX_SUNRPC_AUTH_GSS_H + +#ifdef __KERNEL__ +#ifdef __linux__ +#include <linux/sunrpc/auth.h> +#include <linux/sunrpc/svc.h> +#include <linux/sunrpc/gss_api.h> +#endif + +#define RPC_GSS_VERSION 1 + +#define MAXSEQ 0x80000000 /* maximum legal sequence number, from rfc 2203 */ + +enum rpc_gss_proc { + RPC_GSS_PROC_DATA = 0, + RPC_GSS_PROC_INIT = 1, + RPC_GSS_PROC_CONTINUE_INIT = 2, + RPC_GSS_PROC_DESTROY = 3 +}; + +enum rpc_gss_svc { + RPC_GSS_SVC_NONE = 1, + RPC_GSS_SVC_INTEGRITY = 2, + RPC_GSS_SVC_PRIVACY = 3 +}; + +/* on-the-wire gss cred: */ +struct rpc_gss_wire_cred { + u32 gc_v; /* version */ + u32 gc_proc; /* control procedure */ + u32 gc_seq; /* sequence number */ + u32 gc_svc; /* service */ + struct xdr_netobj gc_ctx; /* context handle */ +}; + +/* on-the-wire gss verifier: */ +struct rpc_gss_wire_verf { + u32 gv_flavor; + struct xdr_netobj gv_verf; +}; + +/* return from gss NULL PROC init sec context */ +struct rpc_gss_init_res { + struct xdr_netobj gr_ctx; /* context handle */ + u32 gr_major; /* major status */ + u32 gr_minor; /* minor status */ + u32 gr_win; /* sequence window */ + struct xdr_netobj gr_token; /* token */ +}; + +#define GSS_SEQ_WIN 5 + +/* The gss_cl_ctx struct holds all the information the rpcsec_gss client + * code needs to know about a single security context. In particular, + * gc_gss_ctx is the context handle that is used to do gss-api calls, while + * gc_wire_ctx is the context handle that is used to identify the context on + * the wire when communicating with a server. */ + +struct gss_cl_ctx { + atomic_t count; + u32 gc_proc; + u32 gc_seq; + spinlock_t gc_seq_lock; + struct gss_ctx *gc_gss_ctx; + struct xdr_netobj gc_wire_ctx; + u32 gc_win; +}; + +struct gss_cred { + struct rpc_cred gc_base; + u32 gc_flavor; + struct gss_cl_ctx *gc_ctx; +}; + +#define gc_uid gc_base.cr_uid +#define gc_count gc_base.cr_count +#define gc_flags gc_base.cr_flags +#define gc_expire gc_base.cr_expire + +void print_hexl(u32 *p, u_int length, u_int offset); + +#endif /* __KERNEL__ */ +#endif /* _LINUX_SUNRPC_AUTH_GSS_H */ + diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 4267b59764fc..26a73231ad16 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -28,6 +28,8 @@ struct rpc_portmap { __u16 pm_port; }; +struct rpc_inode; + /* * The high-level client handle */ @@ -58,6 +60,8 @@ struct rpc_clnt { int cl_nodelen; /* nodename length */ char cl_nodename[UNX_MAXNODENAME]; + char cl_pathname[30];/* Path in rpc_pipe_fs */ + struct dentry * cl_dentry; /* inode */ }; #define cl_timeout cl_xprt->timeout #define cl_prog cl_pmap.pm_prog diff --git a/include/linux/sunrpc/gss_api.h b/include/linux/sunrpc/gss_api.h new file mode 100644 index 000000000000..a41ef0ab5da8 --- /dev/null +++ b/include/linux/sunrpc/gss_api.h @@ -0,0 +1,132 @@ +/* + * linux/include/linux/gss_api.h + * + * Somewhat simplified version of the gss api. + * + * Dug Song <dugsong@monkey.org> + * Andy Adamson <andros@umich.edu> + * Bruce Fields <bfields@umich.edu> + * Copyright (c) 2000 The Regents of the University of Michigan + * + * $Id$ + */ + +#ifndef _LINUX_SUNRPC_GSS_API_H +#define _LINUX_SUNRPC_GSS_API_H + +#ifdef __KERNEL__ +#include <linux/sunrpc/xdr.h> + +/* The mechanism-independent gss-api context: */ +struct gss_ctx { + struct gss_api_mech *mech_type; + void *internal_ctx_id; +}; + +#define GSS_C_NO_BUFFER ((struct xdr_netobj) 0) +#define GSS_C_NO_CONTEXT ((struct gss_ctx *) 0) +#define GSS_C_NULL_OID ((struct xdr_netobj) 0) + +/*XXX arbitrary length - is this set somewhere? */ +#define GSS_OID_MAX_LEN 32 + +/* gss-api prototypes; note that these are somewhat simplified versions of + * the prototypes specified in RFC 2744. */ +u32 gss_import_sec_context( + struct xdr_netobj *input_token, + struct gss_api_mech *mech, + struct gss_ctx **ctx_id); +u32 gss_get_mic( + struct gss_ctx *ctx_id, + u32 qop, + struct xdr_netobj *message_buffer, + struct xdr_netobj *message_token); +u32 gss_verify_mic( + struct gss_ctx *ctx_id, + struct xdr_netobj *signbuf, + struct xdr_netobj *checksum, + u32 *qstate); +u32 gss_delete_sec_context( + struct gss_ctx **ctx_id); + +/* We maintain a list of the pseudoflavors (equivalently, mechanism-qop-service + * triples) that we currently support: */ + +struct sup_sec_triple { + struct list_head triples; + u32 pseudoflavor; + struct gss_api_mech *mech; + u32 qop; + u32 service; +}; + +int gss_register_triple(u32 pseudoflavor, struct gss_api_mech *mech, u32 qop, + u32 service); +int gss_unregister_triple(u32 pseudoflavor); +int gss_pseudoflavor_supported(u32 pseudoflavor); +u32 gss_cmp_triples(u32 oid_len, char *oid_data, u32 qop, u32 service); +u32 gss_get_pseudoflavor(struct gss_ctx *ctx_id, u32 qop, u32 service); +u32 gss_pseudoflavor_to_service(u32 pseudoflavor); +/* Both return NULL on failure: */ +struct gss_api_mech * gss_pseudoflavor_to_mech(u32 pseudoflavor); +int gss_pseudoflavor_to_mechOID(u32 pseudoflavor, struct xdr_netobj *mech); + +/* Different mechanisms (e.g., krb5 or spkm3) may implement gss-api, and + * mechanisms may be dynamically registered or unregistered by modules. + * Our only built-in mechanism is a trivial debugging mechanism that provides + * no actual security; the following function registers that mechanism: */ + +void gss_mech_register_debug(void); + +/* Each mechanism is described by the following struct: */ +struct gss_api_mech { + struct xdr_netobj gm_oid; + struct list_head gm_list; + atomic_t gm_count; + struct gss_api_ops *gm_ops; +}; + +/* and must provide the following operations: */ +struct gss_api_ops { + char *name; + u32 (*gss_import_sec_context)( + struct xdr_netobj *input_token, + struct gss_ctx *ctx_id); + u32 (*gss_get_mic)( + struct gss_ctx *ctx_id, + u32 qop, + struct xdr_netobj *message_buffer, + struct xdr_netobj *message_token); + u32 (*gss_verify_mic)( + struct gss_ctx *ctx_id, + struct xdr_netobj *signbuf, + struct xdr_netobj *checksum, + u32 *qstate); + void (*gss_delete_sec_context)( + void *internal_ctx_id); +}; + +/* Returns nonzero on failure. */ +int gss_mech_register(struct xdr_netobj *, struct gss_api_ops *); + +/* Returns nonzero iff someone still has a reference to this mech. */ +int gss_mech_unregister(struct gss_api_mech *); + +/* Returns nonzer iff someone still has a reference to some mech. */ +int gss_mech_unregister_all(void); + +/* returns a mechanism descriptor given an OID, an increments the mechanism's + * reference count. */ +struct gss_api_mech * gss_mech_get_by_OID(struct xdr_netobj *); + +/* Just increments the mechanism's reference count and returns its input: */ +struct gss_api_mech * gss_mech_get(struct gss_api_mech *); + +/* Returns nonzero iff you've released the last reference to this mech. + * Note that for every succesful gss_get_mech call there must be exactly + * one corresponding call to gss_mech_put.*/ +int gss_mech_put(struct gss_api_mech *); + +#endif /* __KERNEL__ */ +#endif /* _LINUX_SUNRPC_GSS_API_H */ + diff --git a/include/linux/sunrpc/gss_asn1.h b/include/linux/sunrpc/gss_asn1.h new file mode 100644 index 000000000000..bb5f84adcb5b --- /dev/null +++ b/include/linux/sunrpc/gss_asn1.h @@ -0,0 +1,85 @@ +/* + * linux/include/linux/sunrpc/gss_asn1.h + * + * minimal asn1 for generic encoding/decoding of gss tokens + * + * Adapted from MIT Kerberos 5-1.2.1 lib/include/krb5.h, + * lib/gssapi/krb5/gssapiP_krb5.h, and others + * + * Copyright (c) 2000 The Regents of the University of Michigan. + * All rights reserved. + * + * Andy Adamson <andros@umich.edu> + */ + +/* + * Copyright 1995 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + */ + + +#include <linux/sunrpc/gss_api.h> + +#define SIZEOF_INT 4 + +/* from gssapi_err_generic.h */ +#define G_BAD_SERVICE_NAME (-2045022976L) +#define G_BAD_STRING_UID (-2045022975L) +#define G_NOUSER (-2045022974L) +#define G_VALIDATE_FAILED (-2045022973L) +#define G_BUFFER_ALLOC (-2045022972L) +#define G_BAD_MSG_CTX (-2045022971L) +#define G_WRONG_SIZE (-2045022970L) +#define G_BAD_USAGE (-2045022969L) +#define G_UNKNOWN_QOP (-2045022968L) +#define G_NO_HOSTNAME (-2045022967L) +#define G_BAD_HOSTNAME (-2045022966L) +#define G_WRONG_MECH (-2045022965L) +#define G_BAD_TOK_HEADER (-2045022964L) +#define G_BAD_DIRECTION (-2045022963L) +#define G_TOK_TRUNC (-2045022962L) +#define G_REFLECT (-2045022961L) +#define G_WRONG_TOKID (-2045022960L) + +#define g_OID_equal(o1,o2) \ + (((o1)->len == (o2)->len) && \ + (memcmp((o1)->data,(o2)->data,(int) (o1)->len) == 0)) + +u32 g_verify_token_header( + struct xdr_netobj *mech, + int *body_size, + unsigned char **buf_in, + int tok_type, + int toksize); + +u32 g_get_mech_oid(struct xdr_netobj *mech, struct xdr_netobj * in_buf); + +int g_token_size( + struct xdr_netobj *mech, + unsigned int body_size); + +void g_make_token_header( + struct xdr_netobj *mech, + int body_size, + unsigned char **buf, + int tok_type); diff --git a/include/linux/sunrpc/gss_err.h b/include/linux/sunrpc/gss_err.h new file mode 100644 index 000000000000..92608a2e574c --- /dev/null +++ b/include/linux/sunrpc/gss_err.h @@ -0,0 +1,177 @@ +/* + * linux/include/sunrpc/gss_err.h + * + * Adapted from MIT Kerberos 5-1.2.1 include/gssapi/gssapi.h + * + * Copyright (c) 2002 The Regents of the University of Michigan. + * All rights reserved. + * + * Andy Adamson <andros@umich.edu> + */ + +/* + * Copyright 1993 by OpenVision Technologies, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appears in all copies and + * that both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of OpenVision not be used + * in advertising or publicity pertaining to distribution of the software + * without specific, written prior permission. OpenVision makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _LINUX_SUNRPC_GSS_ERR_H +#define _LINUX_SUNRPC_GSS_ERR_H + +#ifdef __KERNEL__ + +typedef unsigned int OM_uint32; + +/* + * Flag bits for context-level services. + */ +#define GSS_C_DELEG_FLAG 1 +#define GSS_C_MUTUAL_FLAG 2 +#define GSS_C_REPLAY_FLAG 4 +#define GSS_C_SEQUENCE_FLAG 8 +#define GSS_C_CONF_FLAG 16 +#define GSS_C_INTEG_FLAG 32 +#define GSS_C_ANON_FLAG 64 +#define GSS_C_PROT_READY_FLAG 128 +#define GSS_C_TRANS_FLAG 256 + +/* + * Credential usage options + */ +#define GSS_C_BOTH 0 +#define GSS_C_INITIATE 1 +#define GSS_C_ACCEPT 2 + +/* + * Status code types for gss_display_status + */ +#define GSS_C_GSS_CODE 1 +#define GSS_C_MECH_CODE 2 + + +/* + * Define the default Quality of Protection for per-message services. Note + * that an implementation that offers multiple levels of QOP may either reserve + * a value (for example zero, as assumed here) to mean "default protection", or + * alternatively may simply equate GSS_C_QOP_DEFAULT to a specific explicit + * QOP value. However a value of 0 should always be interpreted by a GSSAPI + * implementation as a request for the default protection level. + */ +#define GSS_C_QOP_DEFAULT 0 + +/* + * Expiration time of 2^32-1 seconds means infinite lifetime for a + * credential or security context + */ +#define GSS_C_INDEFINITE ((OM_uint32) 0xfffffffful) + + +/* Major status codes */ + +#define GSS_S_COMPLETE 0 + +/* + * Some "helper" definitions to make the status code macros obvious. + */ +#define GSS_C_CALLING_ERROR_OFFSET 24 +#define GSS_C_ROUTINE_ERROR_OFFSET 16 +#define GSS_C_SUPPLEMENTARY_OFFSET 0 +#define GSS_C_CALLING_ERROR_MASK ((OM_uint32) 0377ul) +#define GSS_C_ROUTINE_ERROR_MASK ((OM_uint32) 0377ul) +#define GSS_C_SUPPLEMENTARY_MASK ((OM_uint32) 0177777ul) + +/* + * The macros that test status codes for error conditions. Note that the + * GSS_ERROR() macro has changed slightly from the V1 GSSAPI so that it now + * evaluates its argument only once. + */ +#define GSS_CALLING_ERROR(x) \ + ((x) & (GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET)) +#define GSS_ROUTINE_ERROR(x) \ + ((x) & (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET)) +#define GSS_SUPPLEMENTARY_INFO(x) \ + ((x) & (GSS_C_SUPPLEMENTARY_MASK << GSS_C_SUPPLEMENTARY_OFFSET)) +#define GSS_ERROR(x) \ + ((x) & ((GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET) | \ + (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET))) + +/* + * Now the actual status code definitions + */ + +/* + * Calling errors: + */ +#define GSS_S_CALL_INACCESSIBLE_READ \ + (((OM_uint32) 1ul) << GSS_C_CALLING_ERROR_OFFSET) +#define GSS_S_CALL_INACCESSIBLE_WRITE \ + (((OM_uint32) 2ul) << GSS_C_CALLING_ERROR_OFFSET) +#define GSS_S_CALL_BAD_STRUCTURE \ + (((OM_uint32) 3ul) << GSS_C_CALLING_ERROR_OFFSET) + +/* + * Routine errors: + */ +#define GSS_S_BAD_MECH (((OM_uint32) 1ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_BAD_NAME (((OM_uint32) 2ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_BAD_NAMETYPE (((OM_uint32) 3ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_BAD_BINDINGS (((OM_uint32) 4ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_BAD_STATUS (((OM_uint32) 5ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_BAD_SIG (((OM_uint32) 6ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_NO_CRED (((OM_uint32) 7ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_NO_CONTEXT (((OM_uint32) 8ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_DEFECTIVE_TOKEN (((OM_uint32) 9ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_DEFECTIVE_CREDENTIAL \ + (((OM_uint32) 10ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_CREDENTIALS_EXPIRED \ + (((OM_uint32) 11ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_CONTEXT_EXPIRED \ + (((OM_uint32) 12ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_FAILURE (((OM_uint32) 13ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_BAD_QOP (((OM_uint32) 14ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_UNAUTHORIZED (((OM_uint32) 15ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_UNAVAILABLE (((OM_uint32) 16ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_DUPLICATE_ELEMENT \ + (((OM_uint32) 17ul) << GSS_C_ROUTINE_ERROR_OFFSET) +#define GSS_S_NAME_NOT_MN \ + (((OM_uint32) 18ul) << GSS_C_ROUTINE_ERROR_OFFSET) + +/* + * Supplementary info bits: + */ +#define GSS_S_CONTINUE_NEEDED (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 0)) +#define GSS_S_DUPLICATE_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 1)) +#define GSS_S_OLD_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 2)) +#define GSS_S_UNSEQ_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 3)) +#define GSS_S_GAP_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 4)) + +/* XXXX these are not part of the GSSAPI C bindings! (but should be) */ + +#define GSS_CALLING_ERROR_FIELD(x) \ + (((x) >> GSS_C_CALLING_ERROR_OFFSET) & GSS_C_CALLING_ERROR_MASK) +#define GSS_ROUTINE_ERROR_FIELD(x) \ + (((x) >> GSS_C_ROUTINE_ERROR_OFFSET) & GSS_C_ROUTINE_ERROR_MASK) +#define GSS_SUPPLEMENTARY_INFO_FIELD(x) \ + (((x) >> GSS_C_SUPPLEMENTARY_OFFSET) & GSS_C_SUPPLEMENTARY_MASK) + +/* XXXX This is a necessary evil until the spec is fixed */ +#define GSS_S_CRED_UNAVAIL GSS_S_FAILURE + +#endif /* __KERNEL__ */ +#endif /* __LINUX_SUNRPC_GSS_ERR_H */ diff --git a/include/linux/sunrpc/gss_krb5.h b/include/linux/sunrpc/gss_krb5.h new file mode 100644 index 000000000000..8db6d1e13a69 --- /dev/null +++ b/include/linux/sunrpc/gss_krb5.h @@ -0,0 +1,160 @@ +/* + * linux/include/linux/sunrpc/gss_krb5_types.h + * + * Adapted from MIT Kerberos 5-1.2.1 lib/include/krb5.h, + * lib/gssapi/krb5/gssapiP_krb5.h, and others + * + * Copyright (c) 2000 The Regents of the University of Michigan. + * All rights reserved. + * + * Andy Adamson <andros@umich.edu> + * Bruce Fields <bfields@umich.edu> + */ + +/* + * Copyright 1995 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + */ + +#include <linux/sunrpc/auth_gss.h> +#include <linux/sunrpc/gss_err.h> +#include <linux/sunrpc/gss_asn1.h> + +struct krb5_ctx { + int initiate; /* 1 = initiating, 0 = accepting */ + int seed_init; + unsigned char seed[16]; + int signalg; + int sealalg; + struct crypto_tfm *enc; + struct crypto_tfm *seq; + s32 endtime; + u32 seq_send; + u32 seq_recv; + struct xdr_netobj mech_used; +}; + +#define KG_TOK_MIC_MSG 0x0101 +#define KG_TOK_WRAP_MSG 0x0201 + +enum sgn_alg { + SGN_ALG_DES_MAC_MD5 = 0x0000, + SGN_ALG_MD2_5 = 0x0001, + SGN_ALG_DES_MAC = 0x0002, + SGN_ALG_3 = 0x0003, /* not published */ + SGN_ALG_HMAC_MD5 = 0x0011, /* microsoft w2k; no support */ + SGN_ALG_HMAC_SHA1_DES3_KD = 0x0004 +}; +enum seal_alg { + SEAL_ALG_NONE = 0xffff, + SEAL_ALG_DES = 0x0000, + SEAL_ALG_1 = 0x0001, /* not published */ + SEAL_ALG_MICROSOFT_RC4 = 0x0010,/* microsoft w2k; no support */ + SEAL_ALG_DES3KD = 0x0002 +}; + +#define RSA_MD5_CKSUM_LENGTH 16 + +#define CKSUMTYPE_CRC32 0x0001 +#define CKSUMTYPE_RSA_MD4 0x0002 +#define CKSUMTYPE_RSA_MD4_DES 0x0003 +#define CKSUMTYPE_DESCBC 0x0004 +#define CKSUMTYPE_RSA_MD5 0x0007 +#define CKSUMTYPE_RSA_MD5_DES 0x0008 +#define CKSUMTYPE_NIST_SHA 0x0009 +#define CKSUMTYPE_HMAC_SHA1_DES3 0x000c + +/* from gssapi_err_krb5.h */ +#define KG_CCACHE_NOMATCH (39756032L) +#define KG_KEYTAB_NOMATCH (39756033L) +#define KG_TGT_MISSING (39756034L) +#define KG_NO_SUBKEY (39756035L) +#define KG_CONTEXT_ESTABLISHED (39756036L) +#define KG_BAD_SIGN_TYPE (39756037L) +#define KG_BAD_LENGTH (39756038L) +#define KG_CTX_INCOMPLETE (39756039L) +#define KG_CONTEXT (39756040L) +#define KG_CRED (39756041L) +#define KG_ENC_DESC (39756042L) +#define KG_BAD_SEQ (39756043L) +#define KG_EMPTY_CCACHE (39756044L) +#define KG_NO_CTYPES (39756045L) + +#define KV5M_PRINCIPAL (-1760647423L) +#define KV5M_KEYBLOCK (-1760647421L) +#define KV5M_CHECKSUM (-1760647420L) +#define KV5M_ADDRESS (-1760647390L) +#define KV5M_AUTHENTICATOR (-1760647410L) +#define KV5M_AUTH_CONTEXT (-1760647383L) +#define KV5M_AUTHDATA (-1760647414L) +#define KV5M_GSS_OID (-1760647372L) +#define KV5M_GSS_QUEUE (-1760647371L) + +/* per Kerberos v5 protocol spec crypto types from the wire. + * these get mapped to linux kernel crypto routines. + */ +#define ENCTYPE_NULL 0x0000 +#define ENCTYPE_DES_CBC_CRC 0x0001 /* DES cbc mode with CRC-32 */ +#define ENCTYPE_DES_CBC_MD4 0x0002 /* DES cbc mode with RSA-MD4 */ +#define ENCTYPE_DES_CBC_MD5 0x0003 /* DES cbc mode with RSA-MD5 */ +#define ENCTYPE_DES_CBC_RAW 0x0004 /* DES cbc mode raw */ +/* XXX deprecated? */ +#define ENCTYPE_DES3_CBC_SHA 0x0005 /* DES-3 cbc mode with NIST-SHA */ +#define ENCTYPE_DES3_CBC_RAW 0x0006 /* DES-3 cbc mode raw */ +#define ENCTYPE_DES_HMAC_SHA1 0x0008 +#define ENCTYPE_DES3_CBC_SHA1 0x0010 +#define ENCTYPE_UNKNOWN 0x01ff + +s32 +krb5_make_checksum(s32 cksumtype, + struct xdr_netobj *input, + struct xdr_netobj *cksum); + +u32 +krb5_make_token(struct krb5_ctx *context_handle, int qop_req, + struct xdr_netobj * input_message_buffer, + struct xdr_netobj * output_message_buffer, int toktype); + +u32 +krb5_read_token(struct krb5_ctx *context_handle, + struct xdr_netobj *input_token_buffer, + struct xdr_netobj *message_buffer, + int *qop_state, int toktype); + +u32 +krb5_encrypt(struct crypto_tfm * key, + void *iv, void *in, void *out, int length); + +u32 +krb5_decrypt(struct crypto_tfm * key, + void *iv, void *in, void *out, int length); + +s32 +krb5_make_seq_num(struct crypto_tfm * key, + int direction, + s32 seqnum, unsigned char *cksum, unsigned char *buf); + +s32 +krb5_get_seq_num(struct crypto_tfm * key, + unsigned char *cksum, + unsigned char *buf, int *direction, s32 * seqnum); diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h index 7ec27ed3767b..15f115332389 100644 --- a/include/linux/sunrpc/msg_prot.h +++ b/include/linux/sunrpc/msg_prot.h @@ -20,7 +20,18 @@ enum rpc_auth_flavors { RPC_AUTH_SHORT = 2, RPC_AUTH_DES = 3, RPC_AUTH_KRB = 4, + RPC_AUTH_GSS = 6, RPC_AUTH_MAXFLAVOR = 8, + /* pseudoflavors: */ + RPC_AUTH_GSS_KRB5 = 390003, + RPC_AUTH_GSS_KRB5I = 390004, + RPC_AUTH_GSS_KRB5P = 390005, + RPC_AUTH_GSS_LKEY = 390006, + RPC_AUTH_GSS_LKEYI = 390007, + RPC_AUTH_GSS_LKEYP = 390008, + RPC_AUTH_GSS_SPKM = 390009, + RPC_AUTH_GSS_SPKMI = 390010, + RPC_AUTH_GSS_SPKMP = 390011, }; enum rpc_msg_type { @@ -53,7 +64,10 @@ enum rpc_auth_stat { RPC_AUTH_REJECTEDCRED = 2, RPC_AUTH_BADVERF = 3, RPC_AUTH_REJECTEDVERF = 4, - RPC_AUTH_TOOWEAK = 5 + RPC_AUTH_TOOWEAK = 5, + /* RPCSEC_GSS errors */ + RPCSEC_GSS_CREDPROBLEM = 13, + RPCSEC_GSS_CTXPROBLEM = 14 }; #define RPC_PMAP_PROGRAM 100000 diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h new file mode 100644 index 000000000000..b6c2c0fabc4d --- /dev/null +++ b/include/linux/sunrpc/rpc_pipe_fs.h @@ -0,0 +1,47 @@ +#ifndef _LINUX_SUNRPC_RPC_PIPE_FS_H +#define _LINUX_SUNRPC_RPC_PIPE_FS_H + +#ifdef __KERNEL__ + +struct rpc_pipe_msg { + struct list_head list; + void *data; + size_t len; + size_t copied; + int errno; +}; + +struct rpc_pipe_ops { + ssize_t (*upcall)(struct file *, struct rpc_pipe_msg *, char *, size_t); + ssize_t (*downcall)(struct file *, const char *, size_t); + void (*destroy_msg)(struct rpc_pipe_msg *); +}; + +struct rpc_inode { + struct inode vfs_inode; + void *private; + struct list_head pipe; + int pipelen; + int nreaders; + wait_queue_head_t waitq; + struct rpc_pipe_ops *ops; +}; + +static inline struct rpc_inode * +RPC_I(struct inode *inode) +{ + return container_of(inode, struct rpc_inode, vfs_inode); +} + +extern void rpc_inode_setowner(struct inode *, void *); +extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); + +extern struct dentry *rpc_mkdir(char *, struct rpc_clnt *); +extern int rpc_rmdir(char *); +extern struct dentry *rpc_mkpipe(char *, void *, struct rpc_pipe_ops *); +extern int rpc_unlink(char *); + +void __rpc_purge_current_upcall(struct file *); + +#endif +#endif diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index dc77707c649d..89fc9268b339 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h @@ -12,6 +12,7 @@ #include <linux/timer.h> #include <linux/sunrpc/types.h> #include <linux/wait.h> +#include <linux/sunrpc/xdr.h> /* * This is the actual RPC procedure call info. @@ -47,6 +48,8 @@ struct rpc_task { __u8 tk_garb_retry, tk_cred_retry, tk_suid_retry; + u32 tk_gss_seqno; /* rpcsec_gss sequence number + used on this request */ /* * timeout_fn to be executed by timer bottom half diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index fd871e87f7f4..92934030ce92 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h @@ -80,7 +80,9 @@ struct xdr_buf { #define rpc_autherr_badverf __constant_htonl(RPC_AUTH_BADVERF) #define rpc_autherr_rejectedverf __constant_htonl(RPC_AUTH_REJECTEDVERF) #define rpc_autherr_tooweak __constant_htonl(RPC_AUTH_TOOWEAK) - +#define rpcsec_gsserr_credproblem __constant_htonl(RPCSEC_GSS_CREDPROBLEM) +#define rpcsec_gsserr_ctxproblem __constant_htonl(RPCSEC_GSS_CTXPROBLEM) +#define rpc_autherr_oldseqnum __constant_htonl(101) /* * Miscellaneous XDR helper functions diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 034aa2ac05e9..5e01355e19f6 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h @@ -187,6 +187,7 @@ void xprt_set_timeout(struct rpc_timeout *, unsigned int, unsigned long); void xprt_reserve(struct rpc_task *); +int xprt_prepare_transmit(struct rpc_task *); void xprt_transmit(struct rpc_task *); void xprt_receive(struct rpc_task *); int xprt_adjust_timeout(struct rpc_timeout *); diff --git a/include/net/irda/irias_object.h b/include/net/irda/irias_object.h index 36ad1d897867..0a210380e549 100644 --- a/include/net/irda/irias_object.h +++ b/include/net/irda/irias_object.h @@ -78,8 +78,6 @@ struct ias_attrib { struct ias_value *value; /* Attribute value */ }; -char *strndup(char *str, int max); - struct ias_object *irias_new_object(char *name, int id); void irias_insert_object(struct ias_object *obj); int irias_delete_object(struct ias_object *obj); @@ -104,6 +102,6 @@ struct ias_value *irias_new_missing_value(void); void irias_delete_value(struct ias_value *value); extern struct ias_value missing; -extern hashbin_t *objects; +extern hashbin_t *irias_objects; #endif diff --git a/include/net/irda/qos.h b/include/net/irda/qos.h index fd6e2de02a7a..41ee53f94c52 100644 --- a/include/net/irda/qos.h +++ b/include/net/irda/qos.h @@ -83,19 +83,12 @@ struct qos_info { extern int sysctl_max_baud_rate; extern int sysctl_max_inactive_time; -extern __u32 baud_rates[]; -extern __u32 data_sizes[]; -extern __u32 min_turn_times[]; -extern __u32 add_bofs[]; -extern __u32 compressions[]; - void irda_init_max_qos_capabilies(struct qos_info *qos); void irda_qos_compute_intersection(struct qos_info *, struct qos_info *); __u32 irlap_max_line_capacity(__u32 speed, __u32 max_turn_time); __u32 irlap_requested_line_capacity(struct qos_info *qos); -int msb_index(__u16 byte); void irda_qos_bits_to_value(struct qos_info *qos); /* So simple, how could we not inline those two ? diff --git a/include/sound/initval.h b/include/sound/initval.h index 2cced5c7eb06..4cc972dd71ee 100644 --- a/include/sound/initval.h +++ b/include/sound/initval.h @@ -97,18 +97,6 @@ static int snd_legacy_auto_probe(unsigned long *ports, int (*probe)(unsigned lon } #endif -#ifdef SNDRV_LEGACY_FIND_FREE_IOPORT -static long snd_legacy_find_free_ioport(long *port_table, long size) -{ - while (*port_table != -1) { - if (!check_region(*port_table, size)) - return *port_table; - port_table++; - } - return -1; -} -#endif - #ifdef SNDRV_LEGACY_FIND_FREE_IRQ #include <linux/interrupt.h> |
