diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1999-01-04 16:03:48 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1999-01-04 16:03:48 +0000 |
commit | 78c388aed2b7184182c08428db1de6c872d815f5 (patch) | |
tree | 4b2003b1b4ceb241a17faa995da8dd1004bb8e45 /include | |
parent | eb7a5bf93aaa4be1d7c6181100ab7639e74d67f7 (diff) |
Merge with Linux 2.1.131 and more MIPS goodies.
(Did I mention that CVS is buggy ...)
Diffstat (limited to 'include')
298 files changed, 9950 insertions, 5388 deletions
diff --git a/include/asm-alpha/asm_offsets.h b/include/asm-alpha/asm_offsets.h index b4c55a0bb..29b359d01 100644 --- a/include/asm-alpha/asm_offsets.h +++ b/include/asm-alpha/asm_offsets.h @@ -6,7 +6,7 @@ #define TASK_ADDR_LIMIT 24 #define TASK_EXEC_DOMAIN 32 #define TASK_NEED_RESCHED 40 -#define TASK_SIZE 1120 +#define TASK_SIZE 1096 #define STACK_SIZE 16384 #define HAE_CACHE 0 #define HAE_REG 8 diff --git a/include/asm-alpha/console.h b/include/asm-alpha/console.h index 6ea274830..89f39911f 100644 --- a/include/asm-alpha/console.h +++ b/include/asm-alpha/console.h @@ -41,4 +41,15 @@ #define ENV_LANGUAGE 0x0E #define ENV_TTY_DEV 0x0F -#endif +#ifdef __KERNEL__ +extern long srm_dispatch(long code, ...); +extern void srm_puts(const char *); +extern long srm_printk(const char *, ...) + __attribute__ ((format (printf, 1, 2))); + +struct crb_struct; +struct hwrpb_struct; +extern long srm_fixup(struct crb_struct *, struct hwrpb_struct *); +#endif /* __KERNEL__ */ + +#endif /* __AXP_CONSOLE_H */ diff --git a/include/asm-alpha/dma.h b/include/asm-alpha/dma.h index 2f14838dd..f16bdc6de 100644 --- a/include/asm-alpha/dma.h +++ b/include/asm-alpha/dma.h @@ -20,6 +20,7 @@ #include <linux/config.h> #include <asm/io.h> +#include <asm/spinlock.h> #define dma_outb outb #define dma_inb inb @@ -172,6 +173,20 @@ #define DMA_MODE_WRITE 0x48 /* memory to I/O, no autoinit, increment, single mode */ #define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */ +extern spinlock_t dma_spin_lock; + +static __inline__ unsigned long claim_dma_lock(void) +{ + unsigned long flags; + spin_lock_irqsave(&dma_spin_lock, flags); + return flags; +} + +static __inline__ void release_dma_lock(unsigned long flags) +{ + spin_unlock_irqrestore(&dma_spin_lock, flags); +} + /* enable/disable a specific DMA channel */ static __inline__ void enable_dma(unsigned int dmanr) { diff --git a/include/asm-alpha/fcntl.h b/include/asm-alpha/fcntl.h index 7df92de11..9ba84dbf2 100644 --- a/include/asm-alpha/fcntl.h +++ b/include/asm-alpha/fcntl.h @@ -18,6 +18,8 @@ #define O_SYNC 040000 #define FASYNC 020000 /* fcntl, for BSD compatibility */ #define O_DIRECT 040000 /* direct disk access - should check with OSF/1 */ +#define O_DIRECTORY 0100000 /* must be a directory */ +#define O_NOFOLLOW 0200000 /* don't follow links */ #define F_DUPFD 0 /* dup */ #define F_GETFD 1 /* get f_flags */ diff --git a/include/asm-alpha/hardirq.h b/include/asm-alpha/hardirq.h index 1b0c1a051..1468b28e3 100644 --- a/include/asm-alpha/hardirq.h +++ b/include/asm-alpha/hardirq.h @@ -6,6 +6,7 @@ #include <linux/tasks.h> extern unsigned int local_irq_count[NR_CPUS]; +extern unsigned long hardirq_no[NR_CPUS]; /* * Are we in an interrupt context? Either doing bottom half @@ -32,6 +33,7 @@ extern unsigned int local_irq_count[NR_CPUS]; #include <asm/atomic.h> #include <asm/spinlock.h> +#include <asm/smp.h> extern int global_irq_holder; extern spinlock_t global_irq_lock; @@ -50,10 +52,12 @@ static inline void hardirq_enter(int cpu, int irq) { ++local_irq_count[cpu]; atomic_inc(&global_irq_count); + hardirq_no[cpu] |= 1L << irq; /* debugging only */ } static inline void hardirq_exit(int cpu, int irq) { + hardirq_no[cpu] &= ~(1L << irq); /* debugging only */ atomic_dec(&global_irq_count); --local_irq_count[cpu]; } diff --git a/include/asm-alpha/hwrpb.h b/include/asm-alpha/hwrpb.h index 6ab7225e3..69823af35 100644 --- a/include/asm-alpha/hwrpb.h +++ b/include/asm-alpha/hwrpb.h @@ -185,6 +185,19 @@ struct hwrpb_struct { unsigned long dsr_offset; /* "Dynamic System Recognition Data Block Table" */ }; +#ifdef __KERNEL__ + extern struct hwrpb_struct *hwrpb; +static inline void +hwrpb_update_checksum(struct hwrpb_struct *h) +{ + unsigned long sum = 0, *l; + for (l = (unsigned long *) h; l < (unsigned long *) &h->chksum; ++l) + sum += *l; + h->chksum = sum; +} + +#endif /* __KERNEL__ */ + #endif /* __ALPHA_HWRPB_H */ diff --git a/include/asm-alpha/io.h b/include/asm-alpha/io.h index 516fff5e1..51d2af596 100644 --- a/include/asm-alpha/io.h +++ b/include/asm-alpha/io.h @@ -323,23 +323,14 @@ out: #ifdef CONFIG_ALPHA_GENERIC # define RTC_PORT(x) ((x) + alpha_mv.rtc_port) -# define RTC_ADDR(x) ((x) | alpha_mv.rtc_addr) -# define RTC_ALWAYS_BCD (alpha_mv.rtc_bcd) #else # ifdef CONFIG_ALPHA_JENSEN # define RTC_PORT(x) (0x170+(x)) -# define RTC_ADDR(x) (x) # else # define RTC_PORT(x) (0x70 + (x)) -# define RTC_ADDR(x) (0x80 | (x)) -# endif -# ifdef CONFIG_ALPHA_RUFFIAN -# define RTC_ALWAYS_BCD 1 -# else -# define RTC_ALWAYS_BCD 0 # endif #endif - +#define RTC_ALWAYS_BCD 0 #endif /* __KERNEL__ */ diff --git a/include/asm-alpha/keyboard.h b/include/asm-alpha/keyboard.h index acdd45d83..0c6f04d6b 100644 --- a/include/asm-alpha/keyboard.h +++ b/include/asm-alpha/keyboard.h @@ -3,7 +3,7 @@ * * Created 3 Nov 1996 by Geert Uytterhoeven * - * $Id: keyboard.h,v 1.5 1998/05/04 01:16:31 ralf Exp $ + * $Id: keyboard.h,v 1.6 1998/10/28 12:39:58 ralf Exp $ */ /* @@ -59,8 +59,11 @@ extern unsigned char pckbd_sysrq_xlate[128]; /* Some stoneage hardware needs delays after some operations. */ #define kbd_pause() do { } while(0) -#define keyboard_setup() \ - request_region(0x60, 16, "keyboard") +/* Get the keyboard controller registers (incomplete decode) */ +#define kbd_request_region() request_region(0x60, 16, "keyboard") + +#define kbd_request_irq() request_irq(KEYBOARD_IRQ, keyboard_interrupt, 0, \ + "keyboard", NULL); /* * Machine specific bits for the PS/2 driver @@ -72,10 +75,9 @@ extern unsigned char pckbd_sysrq_xlate[128]; #define AUX_IRQ 9 /* Jensen is odd indeed */ #endif -#define ps2_request_irq() \ - request_irq(AUX_IRQ, aux_interrupt, 0, "PS/2 Mouse", NULL) - -#define ps2_free_irq(inode) free_irq(AUX_IRQ, NULL) +#define aux_request_irq(handler, dev_id) request_irq(AUX_IRQ, handler, 0, \ + "PS/2 Mouse", NULL) +#define aux_free_irq(dev_id) free_irq(AUX_IRQ, NULL) #endif /* __KERNEL__ */ #endif /* __ASM_ALPHA_KEYBOARD_H */ diff --git a/include/asm-alpha/linux_logo.h b/include/asm-alpha/linux_logo.h index c7918fb97..f8db4f478 100644 --- a/include/asm-alpha/linux_logo.h +++ b/include/asm-alpha/linux_logo.h @@ -1,4 +1,4 @@ -/* $Id: linux_logo.h,v 1.3 1998/06/29 19:36:17 geert Exp $ +/* $Id: linux_logo.h,v 1.6 1998/07/30 16:30:20 jj Exp $ * include/asm-alpha/linux_logo.h: This is a linux logo * to be displayed on boot. * @@ -23,10 +23,11 @@ #define linux_logo_banner "Linux/AXP version " UTS_RELEASE -#define LINUX_LOGO_COLORS 221 +#define LINUX_LOGO_COLORS 214 #ifdef INCLUDE_LINUX_LOGO_DATA +#define INCLUDE_LINUX_LOGOBW #define INCLUDE_LINUX_LOGO16 #include <linux/linux_logo.h> diff --git a/include/asm-alpha/machvec.h b/include/asm-alpha/machvec.h index eb39cffc1..17d50c777 100644 --- a/include/asm-alpha/machvec.h +++ b/include/asm-alpha/machvec.h @@ -22,11 +22,9 @@ struct alpha_machine_vector unsigned long hae_cache; unsigned long *hae_register; - unsigned int nr_irqs : 16; - unsigned int rtc_port : 16; - unsigned int rtc_addr : 15; - unsigned int rtc_bcd : 1; - unsigned int max_asn : 16; + int nr_irqs; + int rtc_port; + int max_asn; unsigned long max_dma_address; unsigned long mmu_context_mask; unsigned long irq_probe_mask; diff --git a/include/asm-alpha/namei.h b/include/asm-alpha/namei.h index 22e14bdce..644ec0990 100644 --- a/include/asm-alpha/namei.h +++ b/include/asm-alpha/namei.h @@ -1,4 +1,4 @@ -/* $Id: namei.h,v 1.1 1996/12/13 14:48:23 jj Exp $ +/* $Id: namei.h,v 1.1 1996/12/13 14:48:21 jj Exp $ * linux/include/asm-alpha/namei.h * * Included from linux/fs/namei.c @@ -12,7 +12,7 @@ * Look at asm-sparc/namei.h for details. */ -#define __prefix_namei(retrieve_mode, name, base, buf, res_dir, res_inode, \ - last_name, last_entry, last_error) 1 +#define __prefix_lookup_dentry(name, lookup_flags) \ + do {} while (0) #endif /* __ALPHA_NAMEI_H */ diff --git a/include/asm-alpha/pci.h b/include/asm-alpha/pci.h index 2dd28c3cc..2ed4cacc2 100644 --- a/include/asm-alpha/pci.h +++ b/include/asm-alpha/pci.h @@ -32,7 +32,7 @@ extern struct linux_hose_info *bus2hose[256]; #if defined(CONFIG_ALPHA_GENERIC) \ || defined(CONFIG_ALPHA_MCPCIA) \ - /* || defined(CONFIG_ALPHA_TSUNAMI) */ + || defined(CONFIG_ALPHA_TSUNAMI) #define PCI_HANDLE(bus) ((bus2hose[bus]->pci_hose_index & 3UL) << 32) #define DEV_IS_ON_PRIMARY(dev) \ diff --git a/include/asm-alpha/processor.h b/include/asm-alpha/processor.h index dff34c973..141075ef6 100644 --- a/include/asm-alpha/processor.h +++ b/include/asm-alpha/processor.h @@ -59,7 +59,9 @@ struct thread_struct { mm_segment_t fs; /* Breakpoint handling for ptrace. */ - long debugreg[8]; + unsigned long bpt_addr[2]; + unsigned int bpt_insn[2]; + int bpt_nsaved; }; #define INIT_MMAP { &init_mm, PAGE_OFFSET, PAGE_OFFSET+0x10000000, \ diff --git a/include/asm-alpha/spinlock.h b/include/asm-alpha/spinlock.h index 5fae6e924..63837b195 100644 --- a/include/asm-alpha/spinlock.h +++ b/include/asm-alpha/spinlock.h @@ -5,9 +5,18 @@ #ifndef __SMP__ -/* gcc 2.7.2 can crash initializing an empty structure. */ -typedef struct { int dummy; } spinlock_t; -#define SPIN_LOCK_UNLOCKED { 0 } +/* + * Your basic spinlocks, allowing only a single CPU anywhere + * + * Gcc-2.7.x has a nasty bug with empty initializers. + */ +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) + typedef struct { } spinlock_t; + #define SPIN_LOCK_UNLOCKED (spinlock_t) { } +#else + typedef struct { int gcc_is_buggy; } spinlock_t; + #define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 } +#endif #define spin_lock_init(lock) ((void) 0) #define spin_lock(lock) ((void) 0) @@ -29,9 +38,16 @@ typedef struct { int dummy; } spinlock_t; * can "mix" irq-safe locks - any writer needs to get a * irq-safe write-lock, but readers can get non-irqsafe * read-locks. + * + * Gcc-2.7.x has a nasty bug with empty initializers. */ -typedef struct { int dummy; } rwlock_t; -#define RW_LOCK_UNLOCKED { 0 } +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) + typedef struct { } rwlock_t; + #define RW_LOCK_UNLOCKED (rwlock_t) { } +#else + typedef struct { int gcc_is_buggy; } rwlock_t; + #define RW_LOCK_UNLOCKED (rwlock_t) { 0 } +#endif #define read_lock(lock) ((void) 0) #define read_unlock(lock) ((void) 0) @@ -63,15 +79,24 @@ typedef struct { int dummy; } rwlock_t; */ typedef struct { - volatile unsigned long lock; + volatile unsigned int lock; +#if DEBUG_SPINLOCK + char debug_state, target_ipl, saved_ipl, on_cpu; void *previous; struct task_struct * task; +#endif } spinlock_t; -#define SPIN_LOCK_UNLOCKED { 0, 0, 0 } +#if DEBUG_SPINLOCK +#define SPIN_LOCK_UNLOCKED {0, 1, 0, 0, 0, 0} +#define spin_lock_init(x) \ + ((x)->lock = 0, (x)->target_ipl = 0, (x)->debug_state = 1, \ + (x)->previous = 0, (x)->task = 0) +#else +#define SPIN_LOCK_UNLOCKED { 0 } +#define spin_lock_init(x) ((x)->lock = 0) +#endif -#define spin_lock_init(x) \ - ((x)->lock = 0, (x)->previous = 0, (x)->task = 0) #define spin_unlock_wait(x) \ ({ do { barrier(); } while(((volatile spinlock_t *)x)->lock); }) @@ -79,8 +104,25 @@ typedef struct { unsigned long a[100]; } __dummy_lock_t; #define __dummy_lock(lock) (*(__dummy_lock_t *)(lock)) #if DEBUG_SPINLOCK +extern void spin_unlock(spinlock_t * lock); extern void spin_lock(spinlock_t * lock); +extern int spin_trylock(spinlock_t * lock); + +#define spin_lock_own(LOCK, LOCATION) \ +do { \ + if (!((LOCK)->lock && (LOCK)->on_cpu == smp_processor_id())) \ + printk("%s: called on %d from %p but lock %s on %d\n", \ + LOCATION, smp_processor_id(), \ + __builtin_return_address(0), \ + (LOCK)->lock ? "taken" : "freed", (LOCK)->on_cpu); \ +} while (0) #else +static inline void spin_unlock(spinlock_t * lock) +{ + mb(); + lock->lock = 0; +} + static inline void spin_lock(spinlock_t * lock) { long tmp; @@ -89,29 +131,24 @@ static inline void spin_lock(spinlock_t * lock) of this object file's text section so as to perfect branch prediction. */ __asm__ __volatile__( - "1: ldq_l %0,%1\n" + "1: ldl_l %0,%1\n" " blbs %0,2f\n" " or %0,1,%0\n" - " stq_c %0,%1\n" + " stl_c %0,%1\n" " beq %0,2f\n" " mb\n" ".section .text2,\"ax\"\n" - "2: ldq %0,%1\n" + "2: ldl %0,%1\n" " blbs %0,2b\n" " br 1b\n" ".previous" : "=r" (tmp), "=m" (__dummy_lock(lock)) : "m"(__dummy_lock(lock))); } -#endif /* DEBUG_SPINLOCK */ - -static inline void spin_unlock(spinlock_t * lock) -{ - mb(); - lock->lock = 0; -} #define spin_trylock(lock) (!test_and_set_bit(0,(lock))) +#define spin_lock_own(LOCK, LOCATION) ((void)0) +#endif /* DEBUG_SPINLOCK */ #define spin_lock_irq(lock) \ (__cli(), spin_lock(lock)) diff --git a/include/asm-alpha/system.h b/include/asm-alpha/system.h index 4ed5d5481..798207747 100644 --- a/include/asm-alpha/system.h +++ b/include/asm-alpha/system.h @@ -95,8 +95,7 @@ extern void wrmces (unsigned long); extern unsigned long whami(void); extern void wripir(unsigned long); -#define halt() \ -__asm__ __volatile__ ("call_pal %0 #halt" : : "i" (PAL_halt) : "memory") +extern void halt(void) __attribute__((noreturn)); #define switch_to(prev,next) do { \ current = next; \ diff --git a/include/asm-alpha/termios.h b/include/asm-alpha/termios.h index 07b9489d9..a16407c8e 100644 --- a/include/asm-alpha/termios.h +++ b/include/asm-alpha/termios.h @@ -72,8 +72,11 @@ struct termio { #define N_MOUSE 2 #define N_PPP 3 #define N_AX25 5 -#define N_X25 6 +#define N_X25 6 /* X.25 async */ #define N_6PACK 7 +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ +#define N_R3964 9 /* Reserved for Simatic R3964 module */ +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ #ifdef __KERNEL__ /* eof=^D eol=\0 eol2=\0 erase=del diff --git a/include/asm-arm/fcntl.h b/include/asm-arm/fcntl.h index a9e469a49..9a3678193 100644 --- a/include/asm-arm/fcntl.h +++ b/include/asm-arm/fcntl.h @@ -16,6 +16,8 @@ #define O_NDELAY O_NONBLOCK #define O_SYNC 010000 #define FASYNC 020000 /* fcntl, for BSD compatibility */ +#define O_DIRECTORY 040000 /* must be a directory */ +#define O_NOFOLLOW 0100000 /* don't follow links */ #define F_DUPFD 0 /* dup */ #define F_GETFD 1 /* get f_flags */ diff --git a/include/asm-arm/namei.h b/include/asm-arm/namei.h index 8fcd2f5cd..858f400b6 100644 --- a/include/asm-arm/namei.h +++ b/include/asm-arm/namei.h @@ -1,5 +1,5 @@ -/* - * linux/include/asm-i386/namei.h +/* + * linux/include/asm-arm/namei.h * * Included from linux/fs/namei.c */ @@ -12,7 +12,7 @@ * Look at asm-sparc/namei.h for details. */ -#define __prefix_namei(retrieve_mode, name, base, buf, res_dir, res_inode, \ - last_name, last_entry, last_error) 1 +#define __prefix_lookup_dentry(name, lookup_flags) \ + do {} while (0) #endif /* __ASMARM_NAMEI_H */ diff --git a/include/asm-arm/termios.h b/include/asm-arm/termios.h index 4a74e20cb..2510a5b0e 100644 --- a/include/asm-arm/termios.h +++ b/include/asm-arm/termios.h @@ -55,6 +55,9 @@ struct termio { #define N_AX25 5 #define N_X25 6 /* X.25 async */ #define N_6PACK 7 +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ +#define N_R3964 9 /* Reserved for Simatic R3964 module */ +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ #ifdef __KERNEL__ diff --git a/include/asm-i386/bugs.h b/include/asm-i386/bugs.h index ba3a969ae..5cd7e94d6 100644 --- a/include/asm-i386/bugs.h +++ b/include/asm-i386/bugs.h @@ -29,9 +29,7 @@ __initfunc(static void no_halt(char *s, int *ints)) __initfunc(static void no_387(char *s, int *ints)) { boot_cpu_data.hard_math = 0; - __asm__("movl %%cr0,%%eax\n\t" - "orl $0xE,%%eax\n\t" - "movl %%eax,%%cr0\n\t" : : : "ax"); + write_cr0(0xE | read_cr0()); } static char __initdata fpu_error = 0; diff --git a/include/asm-i386/checksum.h b/include/asm-i386/checksum.h index cad2910fe..8ec5f9c8d 100644 --- a/include/asm-i386/checksum.h +++ b/include/asm-i386/checksum.h @@ -27,22 +27,25 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum) unsigned int csum_partial_copy_generic( const char *src, char *dst, int len, int sum, int *src_err_ptr, int *dst_err_ptr); +/* + * Note: when you get a NULL pointer exception here this means someone + * passed in an incorrect kernel address to one of these functions. + * + * If you use these functions directly please don't forget the + * verify_area(). + */ extern __inline__ unsigned int csum_partial_copy_nocheck ( const char *src, char *dst, int len, int sum) { - int *src_err_ptr=NULL, *dst_err_ptr=NULL; - - return csum_partial_copy_generic ( src, dst, len, sum, src_err_ptr, dst_err_ptr); + return csum_partial_copy_generic ( src, dst, len, sum, NULL, NULL); } extern __inline__ unsigned int csum_partial_copy_from_user ( const char *src, char *dst, int len, int sum, int *err_ptr) { - int *dst_err_ptr=NULL; - - return csum_partial_copy_generic ( src, dst, len, sum, err_ptr, dst_err_ptr); + return csum_partial_copy_generic ( src, dst, len, sum, err_ptr, NULL); } #if 0 @@ -59,9 +62,7 @@ extern __inline__ unsigned int csum_partial_copy_to_user ( const char *src, char *dst, int len, int sum, int *err_ptr) { - int *src_err_ptr=NULL; - - return csum_partial_copy_generic ( src, dst, len, sum, src_err_ptr, err_ptr); + return csum_partial_copy_generic ( src, dst, len, sum, NULL, err_ptr); } #endif @@ -202,15 +203,13 @@ static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, static __inline__ unsigned int csum_and_copy_to_user (const char *src, char *dst, int len, int sum, int *err_ptr) { - int *src_err_ptr=NULL; - - if (verify_area(VERIFY_WRITE, dst, len) == 0) - return csum_partial_copy_generic(src, dst, len, sum, src_err_ptr, err_ptr); + if (access_ok(VERIFY_WRITE, dst, len)) + return csum_partial_copy_generic(src, dst, len, sum, NULL, err_ptr); if (len) *err_ptr = -EFAULT; - return sum; + return -1; /* invalid checksum */ } #endif diff --git a/include/asm-i386/desc.h b/include/asm-i386/desc.h new file mode 100644 index 000000000..e91580e04 --- /dev/null +++ b/include/asm-i386/desc.h @@ -0,0 +1,61 @@ +#ifndef __ARCH_DESC_H +#define __ARCH_DESC_H + +struct desc_struct { + unsigned long a,b; +}; + +extern struct desc_struct gdt_table[]; +extern struct desc_struct *idt, *gdt; + +struct Xgt_desc_struct { + unsigned short size; + unsigned long address __attribute__((packed)); +}; + +#define idt_descr (*(struct Xgt_desc_struct *)((char *)&idt - 2)) +#define gdt_descr (*(struct Xgt_desc_struct *)((char *)&gdt - 2)) + +/* + * Entry into gdt where to find first TSS. GDT layout: + * 0 - null + * 1 - not used + * 2 - kernel code segment + * 3 - kernel data segment + * 4 - user code segment + * 5 - user data segment + * 6 - not used + * 7 - not used + * 8 - APM BIOS support + * 9 - APM BIOS support + * 10 - APM BIOS support + * 11 - APM BIOS support + * 12 - TSS #0 + * 13 - LDT #0 + * 14 - TSS #1 + * 15 - LDT #1 + */ +#define FIRST_TSS_ENTRY 12 +#define FIRST_LDT_ENTRY (FIRST_TSS_ENTRY+1) +#define _TSS(n) ((((unsigned long) n)<<4)+(FIRST_TSS_ENTRY<<3)) +#define _LDT(n) ((((unsigned long) n)<<4)+(FIRST_LDT_ENTRY<<3)) +#define load_TR(n) __asm__ __volatile__("ltr %%ax": /* no output */ :"a" (_TSS(n))) +#define load_ldt(n) __asm__ __volatile__("lldt %%ax": /* no output */ :"a" (_LDT(n))) +#define store_TR(n) \ +__asm__("str %%ax\n\t" \ + "subl %2,%%eax\n\t" \ + "shrl $4,%%eax" \ + :"=a" (n) \ + :"0" (0),"i" (FIRST_TSS_ENTRY<<3)) + +extern void set_intr_gate(unsigned int irq, void * addr); +extern void set_ldt_desc(unsigned int n, void *addr, unsigned int size); +extern void set_tss_desc(unsigned int n, void *addr); + +/* + * This is the ldt that every process will get unless we need + * something other than this. + */ +extern struct desc_struct default_ldt; + +#endif diff --git a/include/asm-i386/dma.h b/include/asm-i386/dma.h index 0d45967da..58f7bfc05 100644 --- a/include/asm-i386/dma.h +++ b/include/asm-i386/dma.h @@ -9,6 +9,8 @@ #define _ASM_DMA_H #include <asm/io.h> /* need byte IO */ +#include <asm/spinlock.h> /* And spinlocks */ +#include <linux/delay.h> #ifdef HAVE_REALLY_SLOW_DMA_CONTROLLER @@ -129,6 +131,21 @@ #define DMA_MODE_WRITE 0x48 /* memory to I/O, no autoinit, increment, single mode */ #define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */ + +extern spinlock_t dma_spin_lock; + +static __inline__ unsigned long claim_dma_lock(void) +{ + unsigned long flags; + spin_lock_irqsave(&dma_spin_lock, flags); + return flags; +} + +static __inline__ void release_dma_lock(unsigned long flags) +{ + spin_unlock_irqrestore(&dma_spin_lock, flags); +} + /* enable/disable a specific DMA channel */ static __inline__ void enable_dma(unsigned int dmanr) { @@ -151,7 +168,7 @@ static __inline__ void disable_dma(unsigned int dmanr) * Use this once to initialize the FF to a known state. * After that, keep track of it. :-) * --- In order to do that, the DMA routines below should --- - * --- only be used while interrupts are disabled! --- + * --- only be used while holding the DMA lock ! --- */ static __inline__ void clear_dma_ff(unsigned int dmanr) { diff --git a/include/asm-i386/fcntl.h b/include/asm-i386/fcntl.h index f0ddc3e61..eff29ac8f 100644 --- a/include/asm-i386/fcntl.h +++ b/include/asm-i386/fcntl.h @@ -18,6 +18,8 @@ #define FASYNC 020000 /* fcntl, for BSD compatibility */ #define O_DIRECT 040000 /* direct disk access hint - currently ignored */ #define O_LARGEFILE 0100000 +#define O_DIRECTORY 0200000 /* must be a directory */ +#define O_NOFOLLOW 0400000 /* don't follow links */ #define F_DUPFD 0 /* dup */ #define F_GETFD 1 /* get f_flags */ diff --git a/include/asm-i386/fixmap.h b/include/asm-i386/fixmap.h index dc9d624d7..ae6f062dd 100644 --- a/include/asm-i386/fixmap.h +++ b/include/asm-i386/fixmap.h @@ -40,7 +40,7 @@ * fix-mapped? */ enum fixed_addresses { -#if __SMP__ +#ifdef __SMP__ FIX_APIC_BASE, FIX_IO_APIC_BASE, #endif diff --git a/include/asm-i386/keyboard.h b/include/asm-i386/keyboard.h index 462095732..a30e49946 100644 --- a/include/asm-i386/keyboard.h +++ b/include/asm-i386/keyboard.h @@ -3,7 +3,7 @@ * * Created 3 Nov 1996 by Geert Uytterhoeven * - * $Id: keyboard.h,v 1.5 1997/08/05 09:44:29 ralf Exp $ + * $Id: keyboard.h,v 1.6 1998/10/28 12:40:06 ralf Exp $ */ /* @@ -52,8 +52,11 @@ extern unsigned char pckbd_sysrq_xlate[128]; /* Some stoneage hardware needs delays after some operations. */ #define kbd_pause() do { SLOW_DOWN_IO; } while(0) -#define keyboard_setup() \ - request_region(0x60, 16, "keyboard") +/* Get the keyboard controller registers (incomplete decode) */ +#define kbd_request_region() request_region(0x60, 16, "keyboard") + +#define kbd_request_irq() request_irq(KEYBOARD_IRQ, keyboard_interrupt, 0, \ + "keyboard", NULL); /* * Machine specific bits for the PS/2 driver @@ -63,21 +66,16 @@ extern unsigned char pckbd_sysrq_xlate[128]; #ifdef CONFIG_MCA -#define ps2_request_irq() \ - request_irq(AUX_IRQ, aux_interrupt, MCA_bus ? SA_SHIRQ : 0, \ - "PS/2 Mouse", inode) +#define aux_request_irq(handler, dev_id) request_irq(AUX_IRQ, handler, \ + MCA_bus ? SA_SHIRQ : 0, "PS/2 Mouse", dev_id) +#define aux_free_irq(dev_id) free_irq(AUX_IRQ, dev_id) #else /* !defined(CONFIG_MCA) */ -#define ps2_request_irq() \ - request_irq(AUX_IRQ, aux_interrupt, 0, "PS/2 Mouse", NULL) - -#endif /* !defined(CONFIG_MCA) */ +#define aux_request_irq(handler, dev_id) request_irq(AUX_IRQ, handler, 0, \ + "PS/2 Mouse", NULL) +#define aux_free_irq(dev_id) free_irq(AUX_IRQ, NULL) -#ifdef CONFIG_MCA -#define ps2_free_irq(inode) free_irq(AUX_IRQ, inode) -#else -#define ps2_free_irq(inode) free_irq(AUX_IRQ, NULL) #endif #endif /* __KERNEL__ */ diff --git a/include/asm-i386/linux_logo.h b/include/asm-i386/linux_logo.h index 6773bef77..452bee7da 100644 --- a/include/asm-i386/linux_logo.h +++ b/include/asm-i386/linux_logo.h @@ -1,4 +1,4 @@ -/* $Id: linux_logo.h,v 1.6 1998/07/07 13:34:56 jj Exp $ +/* $Id: linux_logo.h,v 1.8 1998/07/30 16:30:24 jj Exp $ * include/asm-i386/linux_logo.h: This is a linux logo * to be displayed on boot. * @@ -23,10 +23,11 @@ #define linux_logo_banner "Linux/ia32 version " UTS_RELEASE -#define LINUX_LOGO_COLORS 221 +#define LINUX_LOGO_COLORS 214 #ifdef INCLUDE_LINUX_LOGO_DATA +#define INCLUDE_LINUX_LOGOBW #define INCLUDE_LINUX_LOGO16 #include <linux/linux_logo.h> diff --git a/include/asm-i386/mtrr.h b/include/asm-i386/mtrr.h index 7e387cfc6..5b1e8470c 100644 --- a/include/asm-i386/mtrr.h +++ b/include/asm-i386/mtrr.h @@ -85,7 +85,8 @@ static __inline__ int mtrr_add (unsigned long base, unsigned long size, { return -ENODEV; } -static __inline__ mtrr_del (int reg, unsigned long base, unsigned long size) +static __inline__ int mtrr_del (int reg, unsigned long base, + unsigned long size) { return -ENODEV; } diff --git a/include/asm-i386/namei.h b/include/asm-i386/namei.h index 981627be7..5708ffd8d 100644 --- a/include/asm-i386/namei.h +++ b/include/asm-i386/namei.h @@ -12,7 +12,7 @@ * Look at asm-sparc/namei.h for details. */ -#define __prefix_namei(retrieve_mode, name, base, buf, res_dir, res_inode, \ - last_name, last_entry, last_error) 1 +#define __prefix_lookup_dentry(name, lookup_flags) \ + do {} while (0) #endif /* __I386_NAMEI_H */ diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h index 3a9968c69..1b1e97d73 100644 --- a/include/asm-i386/processor.h +++ b/include/asm-i386/processor.h @@ -275,12 +275,34 @@ struct mm_struct; /* Free all resources held by a thread. */ extern void release_thread(struct task_struct *); +extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); /* Copy and release all segment info associated with a VM */ extern void copy_segments(int nr, struct task_struct *p, struct mm_struct * mm); extern void release_segments(struct mm_struct * mm); /* + * FPU lazy state save handling.. + */ +#define save_fpu(tsk) do { \ + asm volatile("fnsave %0\n\tfwait":"=m" (tsk->tss.i387)); \ + tsk->flags &= ~PF_USEDFPU; \ + stts(); \ +} while (0) + +#define unlazy_fpu(tsk) do { \ + if (tsk->flags & PF_USEDFPU) \ + save_fpu(tsk); \ +} while (0) + +#define clear_fpu(tsk) do { \ + if (tsk->flags & PF_USEDFPU) { \ + tsk->flags &= ~PF_USEDFPU; \ + stts(); \ + } \ +} while (0) + +/* * Return saved PC of a blocked thread. */ extern inline unsigned long thread_saved_pc(struct thread_struct *t) diff --git a/include/asm-i386/resource.h b/include/asm-i386/resource.h index 3143b5bb2..e7e2d1159 100644 --- a/include/asm-i386/resource.h +++ b/include/asm-i386/resource.h @@ -25,7 +25,7 @@ { LONG_MAX, LONG_MAX }, \ { LONG_MAX, LONG_MAX }, \ { LONG_MAX, LONG_MAX }, \ - { _STK_LIM, _STK_LIM }, \ + { _STK_LIM, LONG_MAX }, \ { 0, LONG_MAX }, \ { LONG_MAX, LONG_MAX }, \ { MAX_TASKS_PER_USER, MAX_TASKS_PER_USER }, \ diff --git a/include/asm-i386/semaphore.h b/include/asm-i386/semaphore.h index a68b23fc6..2cb1b891c 100644 --- a/include/asm-i386/semaphore.h +++ b/include/asm-i386/semaphore.h @@ -36,8 +36,9 @@ asmlinkage void __down_failed(void /* special register calling convention */); asmlinkage int __down_failed_interruptible(void /* params in registers */); asmlinkage void __up_wakeup(void /* special register calling convention */); -extern void __down(struct semaphore * sem); -extern void __up(struct semaphore * sem); +asmlinkage void __down(struct semaphore * sem); +asmlinkage int __down_interruptible(struct semaphore * sem); +asmlinkage void __up(struct semaphore * sem); extern spinlock_t semaphore_wake_lock; diff --git a/include/asm-i386/shmparam.h b/include/asm-i386/shmparam.h index 522718965..64472231f 100644 --- a/include/asm-i386/shmparam.h +++ b/include/asm-i386/shmparam.h @@ -33,7 +33,9 @@ * SHMMAX <= (PAGE_SIZE << _SHM_IDX_BITS). */ -#define SHMMAX 0x1000000 /* max shared seg size (bytes) */ +#define SHMMAX 0x2000000 /* max shared seg size (bytes) */ +/* Try not to change the default shipped SHMMAX - people rely on it */ + #define SHMMIN 1 /* really PAGE_SIZE */ /* min shared seg size (bytes) */ #define SHMMNI (1<<_SHM_ID_BITS) /* max num of segs system wide */ #define SHMALL /* max shm system wide (pages) */ \ diff --git a/include/asm-i386/spinlock.h b/include/asm-i386/spinlock.h index e6fdf42f1..00e238407 100644 --- a/include/asm-i386/spinlock.h +++ b/include/asm-i386/spinlock.h @@ -14,10 +14,10 @@ */ #if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) typedef struct { } spinlock_t; - #define SPIN_LOCK_UNLOCKED { } + #define SPIN_LOCK_UNLOCKED (spinlock_t) { } #else typedef struct { int gcc_is_buggy; } spinlock_t; - #define SPIN_LOCK_UNLOCKED { 0 } + #define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 } #endif #define spin_lock_init(lock) do { } while(0) @@ -38,7 +38,7 @@ typedef struct { volatile unsigned int lock; } spinlock_t; -#define SPIN_LOCK_UNLOCKED { 0 } +#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 } #define spin_lock_init(x) do { (x)->lock = 0; } while (0) #define spin_trylock(lock) (!test_and_set_bit(0,(lock))) @@ -61,7 +61,7 @@ typedef struct { volatile unsigned int babble; const char *module; } spinlock_t; -#define SPIN_LOCK_UNLOCKED { 0, 25, __BASE_FILE__ } +#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0, 25, __BASE_FILE__ } #include <linux/kernel.h> @@ -88,9 +88,16 @@ typedef struct { * can "mix" irq-safe locks - any writer needs to get a * irq-safe write-lock, but readers can get non-irqsafe * read-locks. + * + * Gcc-2.7.x has a nasty bug with empty initializers. */ -typedef struct { } rwlock_t; -#define RW_LOCK_UNLOCKED { } +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) + typedef struct { } rwlock_t; + #define RW_LOCK_UNLOCKED (rwlock_t) { } +#else + typedef struct { int gcc_is_buggy; } rwlock_t; + #define RW_LOCK_UNLOCKED (rwlock_t) { 0 } +#endif #define read_lock(lock) do { } while(0) #define read_unlock(lock) do { } while(0) @@ -120,7 +127,7 @@ typedef struct { volatile unsigned int lock; } spinlock_t; -#define SPIN_LOCK_UNLOCKED { 0 } +#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 } #define spin_lock_init(x) do { (x)->lock = 0; } while(0) /* @@ -188,7 +195,7 @@ typedef struct { unsigned long previous; } rwlock_t; -#define RW_LOCK_UNLOCKED { 0, 0 } +#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0 } /* * On x86, we implement read-write locks as a 32-bit counter diff --git a/include/asm-i386/system.h b/include/asm-i386/system.h index cb04cefe4..65012f648 100644 --- a/include/asm-i386/system.h +++ b/include/asm-i386/system.h @@ -88,7 +88,7 @@ static inline unsigned long _get_base(char * addr) "1:\t" \ "movl %0,%%" #seg "\n" \ "2:\n" \ - ".section fixup,\"ax\"\n" \ + ".section .fixup,\"ax\"\n" \ "3:\t" \ "pushl $0\n\t" \ "popl %%" #seg "\n\t" \ @@ -104,14 +104,16 @@ static inline unsigned long _get_base(char * addr) * Clear and set 'TS' bit respectively */ #define clts() __asm__ __volatile__ ("clts") -#define stts() \ -__asm__ __volatile__ ( \ - "movl %%cr0,%%eax\n\t" \ - "orl $8,%%eax\n\t" \ - "movl %%eax,%%cr0" \ - : /* no outputs */ \ - : /* no inputs */ \ - :"ax") +#define read_cr0() ({ \ + unsigned int __dummy; \ + __asm__( \ + "movl %%cr0,%0\n\t" \ + :"=r" (__dummy)); \ + __dummy; \ +}) +#define write_cr0(x) \ + __asm__("movl %0,%%cr0": :"r" (x)); +#define stts() write_cr0(8 | read_cr0()) #endif /* __KERNEL__ */ diff --git a/include/asm-i386/termios.h b/include/asm-i386/termios.h index b2b77853f..cf6b5cd67 100644 --- a/include/asm-i386/termios.h +++ b/include/asm-i386/termios.h @@ -47,7 +47,9 @@ struct termio { #define N_AX25 5 #define N_X25 6 /* X.25 async */ #define N_6PACK 7 -#define N_MASC 8 /* Reserved fo Mobitex module <kaz@cafe.net> */ +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ +#define N_R3964 9 /* Reserved for Simatic R3964 module */ +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ #ifdef __KERNEL__ diff --git a/include/asm-i386/unistd.h b/include/asm-i386/unistd.h index b354c47aa..76c7241bf 100644 --- a/include/asm-i386/unistd.h +++ b/include/asm-i386/unistd.h @@ -192,8 +192,8 @@ #define __NR_capset 185 #define __NR_sigaltstack 186 #define __NR_sendfile 187 -#define __NR_streams1 188 /* some people actually want it */ -#define __NR_streams2 189 /* some people actually want it */ +#define __NR_getpmsg 188 /* some people actually want streams */ +#define __NR_putpmsg 189 /* some people actually want streams */ /* user-visible error numbers are in the range -1 - -122: see <asm-i386/errno.h> */ @@ -306,36 +306,6 @@ static inline pid_t wait(int * wait_stat) return waitpid(-1,wait_stat,0); } -/* - * This is the mechanism for creating a new kernel thread. - * - * NOTE! Only a kernel-only process(ie the swapper or direct descendants - * who haven't done an "execve()") should use this: it will work within - * a system call from a "real" process, but the process memory space will - * not be free'd until both the parent and the child have exited. - */ -static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) -{ - long retval; - - __asm__ __volatile__( - "movl %%esp,%%esi\n\t" - "int $0x80\n\t" /* Linux/i386 system call */ - "cmpl %%esp,%%esi\n\t" /* child or parent? */ - "je 1f\n\t" /* parent - jump */ - "pushl %3\n\t" /* push argument */ - "call *%4\n\t" /* call fn */ - "movl %2,%0\n\t" /* exit */ - "int $0x80\n" - "1:\t" - :"=a" (retval) - :"0" (__NR_clone), "i" (__NR_exit), - "r" (arg), "r" (fn), - "b" (flags | CLONE_VM) - :"si"); - return retval; -} - #endif #endif /* _ASM_I386_UNISTD_H_ */ diff --git a/include/asm-m68k/atomic.h b/include/asm-m68k/atomic.h index 39236e060..4f92a2f57 100644 --- a/include/asm-m68k/atomic.h +++ b/include/asm-m68k/atomic.h @@ -18,35 +18,35 @@ typedef struct { int counter; } atomic_t; static __inline__ void atomic_add(int i, atomic_t *v) { - __asm__ __volatile__("addl %1,%0" : : "m" (*v), "id" (i)); + __asm__ __volatile__("addl %1,%0" : "=m" (*v) : "id" (i), "0" (*v)); } static __inline__ void atomic_sub(int i, atomic_t *v) { - __asm__ __volatile__("subl %1,%0" : : "m" (*v), "id" (i)); + __asm__ __volatile__("subl %1,%0" : "=m" (*v) : "id" (i), "0" (*v)); } static __inline__ void atomic_inc(volatile atomic_t *v) { - __asm__ __volatile__("addql #1,%0" : : "m" (*v)); + __asm__ __volatile__("addql #1,%0" : "=m" (*v): "0" (*v)); } static __inline__ void atomic_dec(volatile atomic_t *v) { - __asm__ __volatile__("subql #1,%0" : : "m" (*v)); + __asm__ __volatile__("subql #1,%0" : "=m" (*v): "0" (*v)); } static __inline__ int atomic_dec_and_test(volatile atomic_t *v) { char c; - __asm__ __volatile__("subql #1,%1; seq %0" : "=d" (c) : "m" (*v)); + __asm__ __volatile__("subql #1,%1; seq %0" : "=d" (c), "=m" (*v): "1" (*v)); return c != 0; } #define atomic_clear_mask(mask, v) \ - __asm__ __volatile__("andl %1,%0" : : "m" (*v), "id" (~(mask))) + __asm__ __volatile__("andl %1,%0" : "=m" (*v) : "id" (~(mask)),"0"(*v)) #define atomic_set_mask(mask, v) \ - __asm__ __volatile__("orl %1,%0" : : "m" (*v), "id" (mask)); + __asm__ __volatile__("orl %1,%0" : "=m" (*v) : "id" (mask),"0"(*v)) #endif /* __ARCH_M68K_ATOMIC __ */ diff --git a/include/asm-m68k/fcntl.h b/include/asm-m68k/fcntl.h index 500d495bf..2235bd5bb 100644 --- a/include/asm-m68k/fcntl.h +++ b/include/asm-m68k/fcntl.h @@ -16,6 +16,8 @@ #define O_NDELAY O_NONBLOCK #define O_SYNC 010000 #define FASYNC 020000 /* fcntl, for BSD compatibility */ +#define O_DIRECTORY 040000 /* must be a directory */ +#define O_NOFOLLOW 0100000 /* don't follow links */ #define F_DUPFD 0 /* dup */ #define F_GETFD 1 /* get f_flags */ diff --git a/include/asm-m68k/ide.h b/include/asm-m68k/ide.h index abcd0da25..6fa31e040 100644 --- a/include/asm-m68k/ide.h +++ b/include/asm-m68k/ide.h @@ -146,34 +146,36 @@ static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent if (_nr & 15) { \ _tmp = (_nr & 15) - 1; \ asm volatile ( \ - "1: movew %2@,%3@+; dbra %4,1b" \ + "1: movew %2@,%0@+; dbra %1,1b" \ + : "=a" (_buf), "=d" (_tmp) \ + : "a" (_port), "0" (_buf), \ + "1" (_tmp)); \ + } \ + if (_nr >> 4) { \ + _tmp = (_nr >> 4) - 1; \ + asm volatile ( \ + "1: " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "movew %2@,%0@+; " \ + "dbra %1,1b" \ : "=a" (_buf), "=d" (_tmp) \ : "a" (_port), "0" (_buf), \ "1" (_tmp)); \ } \ - _tmp = (_nr >> 4) - 1; \ - asm volatile ( \ - "1: " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "movew %2@,%3@+; " \ - "dbra %4,1b" \ - : "=a" (_buf), "=d" (_tmp) \ - : "a" (_port), "0" (_buf), \ - "1" (_tmp)); \ }) #define outsw(port, buf, nr) ({ \ @@ -185,34 +187,36 @@ static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent if (_nr & 15) { \ _tmp = (_nr & 15) - 1; \ asm volatile ( \ - "1: movew %3@,%2@+; dbra %4,1b" \ + "1: movew %0@+,%2@; dbra %1,1b" \ + : "=a" (_buf), "=d" (_tmp) \ + : "a" (_port), "0" (_buf), \ + "1" (_tmp)); \ + } \ + if (_nr >> 4) { \ + _tmp = (_nr >> 4) - 1; \ + asm volatile ( \ + "1: " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "movew %0@+,%2@; " \ + "dbra %1,1b" \ : "=a" (_buf), "=d" (_tmp) \ : "a" (_port), "0" (_buf), \ "1" (_tmp)); \ } \ - _tmp = (_nr >> 4) - 1; \ - asm volatile ( \ - "1: " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "movew %3@+,%2@; " \ - "dbra %4,1b" \ - : "=a" (_buf), "=d" (_tmp) \ - : "a" (_port), "0" (_buf), \ - "1" (_tmp)); \ }) #ifdef CONFIG_ATARI diff --git a/include/asm-m68k/linux_logo.h b/include/asm-m68k/linux_logo.h index 85f7d03f1..3d85769e1 100644 --- a/include/asm-m68k/linux_logo.h +++ b/include/asm-m68k/linux_logo.h @@ -18,1430 +18,879 @@ * but should contain %s to display the version */ +#include <linux/config.h> #include <linux/init.h> #include <linux/version.h> #define linux_logo_banner "Linux/m68k version " UTS_RELEASE -#define LINUX_LOGO_COLORS 221 +#ifdef CONFIG_MAC + +#define LINUX_LOGO_COLORS 95 #ifdef INCLUDE_LINUX_LOGO_DATA + unsigned char linux_logo_red[] __initdata = { - 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3, - 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xE5, - 0xF1, 0xED, 0xEE, 0xE6, 0xC6, 0xDA, 0xDD, 0xE5, - 0xD9, 0xC6, 0xE3, 0xD0, 0xC6, 0xBA, 0xB0, 0xB6, - 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xB0, 0xAD, - 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x9D, - 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99, - 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D, - 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x0D, 0x03, - 0x66, 0x44, 0x24, 0x08, 0xD6, 0xE6, 0xE9, 0xE6, - 0xE7, 0xCA, 0xDC, 0xDB, 0xD5, 0xD0, 0xC9, 0xE2, - 0xD5, 0xC6, 0xC4, 0xB3, 0xB2, 0xB9, 0xA9, 0x9A, - 0xB2, 0x9D, 0xE8, 0xEC, 0xF5, 0xF5, 0xF4, 0xF4, - 0xEC, 0xEE, 0xF0, 0xF5, 0xE0, 0xD6, 0xC5, 0xC2, - 0xD9, 0xD5, 0xD8, 0xD6, 0xF6, 0xF4, 0xED, 0xEC, - 0xEB, 0xF1, 0xF6, 0xF5, 0xF5, 0xEE, 0xEF, 0xEC, - 0xE7, 0xE3, 0xE6, 0xD6, 0xDD, 0xC3, 0xD6, 0xD7, - 0xCD, 0xCA, 0xC3, 0xAC, 0x95, 0x99, 0xB7, 0xA3, - 0x8B, 0x88, 0x95, 0x8A, 0x94, 0xD2, 0xCC, 0xC4, - 0xA8, 0x8E, 0x8F, 0xAE, 0xB8, 0xAC, 0xB6, 0xB4, - 0xAD, 0xA5, 0xA0, 0x9B, 0x8B, 0xA3, 0x94, 0x87, - 0x85, 0x89, 0x53, 0x80, 0x7D, 0x7C, 0x7A, 0x78, - 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62, - 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46, - 0x42, 0x0F, 0x75, 0x78, 0x7D, 0x72, 0x5F, 0x6E, - 0x7A, 0x75, 0x6A, 0x58, 0x48, 0x4F, 0x00, 0x2B, - 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x3B, 0x11, - 0x1D, 0x14, 0x06, 0x02, 0x00 + 0x02, 0x82, 0xEA, 0x42, 0xC2, 0x82, 0xE2, 0xA2, + 0xDA, 0xC2, 0x22, 0x62, 0xB2, 0x92, 0xD2, 0x8A, + 0xB2, 0xFA, 0xDA, 0x32, 0x72, 0x12, 0xF2, 0x52, + 0xF2, 0xEA, 0xFA, 0xAA, 0xCA, 0x9A, 0xE2, 0xAA, + 0x8A, 0xEA, 0xD2, 0x92, 0xEA, 0xDA, 0x2A, 0x6A, + 0xDA, 0xBA, 0xD2, 0x52, 0x7A, 0x2A, 0x5A, 0x0A, + 0x6A, 0xEA, 0xE2, 0xC6, 0x96, 0xF2, 0x3A, 0x1A, + 0xB2, 0xBA, 0xF2, 0xDA, 0x0A, 0x86, 0x4A, 0xCA, + 0x8A, 0xE2, 0xA6, 0xDA, 0x66, 0xBA, 0x92, 0xDA, + 0xA2, 0xB6, 0x76, 0x12, 0xF2, 0xFA, 0xEA, 0xAE, + 0xCE, 0x9E, 0xB2, 0x8E, 0xF2, 0xD2, 0xA2, 0x6E, + 0xBE, 0xD6, 0x7E, 0x5E, 0xC2, 0xFA, 0x3A }; unsigned char linux_logo_green[] __initdata = { - 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3, - 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xD3, - 0xDA, 0xD4, 0xD7, 0xCC, 0xC1, 0xCC, 0xCB, 0xC9, - 0xC5, 0xBC, 0xBC, 0xBB, 0xB7, 0xA5, 0xB0, 0xB6, - 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xAD, 0xAD, - 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x95, - 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99, - 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D, - 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x08, 0x02, - 0x53, 0x2E, 0x19, 0x06, 0xC6, 0xC8, 0xCF, 0xBD, - 0xB3, 0xB6, 0xB4, 0xAB, 0xA5, 0xA3, 0x9B, 0xB6, - 0xA7, 0x99, 0x92, 0xA4, 0x9E, 0x9D, 0x98, 0x8C, - 0x8A, 0x86, 0xCD, 0xCC, 0xC9, 0xD7, 0xCA, 0xC4, - 0xCA, 0xC3, 0xC7, 0xC3, 0xC8, 0xB4, 0x91, 0x8E, - 0x8A, 0x82, 0x87, 0x85, 0xBD, 0xBF, 0xB6, 0xBC, - 0xAE, 0xB7, 0xBC, 0xB8, 0xBF, 0xB6, 0xBC, 0xB5, - 0xAB, 0xA6, 0xAD, 0xB2, 0xA5, 0x87, 0x9C, 0x96, - 0x95, 0x8E, 0x87, 0x8F, 0x86, 0x86, 0x8E, 0x80, - 0x7A, 0x70, 0x7B, 0x78, 0x78, 0x7F, 0x77, 0x6F, - 0x70, 0x76, 0x59, 0x77, 0x68, 0x64, 0x7B, 0x7C, - 0x75, 0x6D, 0x77, 0x69, 0x65, 0x5F, 0x5B, 0x54, - 0x4F, 0x5B, 0x39, 0x80, 0x7D, 0x7C, 0x7A, 0x78, - 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62, - 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46, - 0x42, 0x0B, 0x69, 0x66, 0x64, 0x57, 0x4A, 0x4E, - 0x55, 0x4B, 0x46, 0x3B, 0x30, 0x33, 0x00, 0x2B, - 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x29, 0x0D, - 0x1D, 0x14, 0x06, 0x02, 0x00 + 0x02, 0x82, 0xC2, 0x42, 0x8A, 0x56, 0xE2, 0xA2, + 0xAA, 0xC2, 0x22, 0x62, 0x86, 0x92, 0x9E, 0x6E, + 0xB2, 0xB2, 0xD2, 0x32, 0x72, 0x12, 0xD2, 0x52, + 0xF2, 0xB2, 0xC2, 0xAA, 0xCA, 0x9A, 0xA2, 0x7E, + 0x8A, 0xCA, 0x92, 0x66, 0xEA, 0xB2, 0x2A, 0x6A, + 0xA2, 0xBA, 0xD2, 0x36, 0x7A, 0x1A, 0x5A, 0x0A, + 0x4A, 0xE6, 0xAE, 0xC6, 0x96, 0xBA, 0x3A, 0x1A, + 0xAA, 0x7A, 0xCA, 0xDA, 0x02, 0x86, 0x4A, 0x8A, + 0x5E, 0xE2, 0xA6, 0xAE, 0x66, 0x82, 0x92, 0x9A, + 0x72, 0xB6, 0x76, 0x12, 0xD2, 0xFA, 0xB2, 0xAE, + 0xCE, 0x9E, 0x7A, 0x8E, 0xCA, 0x92, 0x6A, 0x6E, + 0xBE, 0xD6, 0x7E, 0x5E, 0xC6, 0xBA, 0x3E }; unsigned char linux_logo_blue[] __initdata = { - 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xEE, 0xE5, 0xDE, - 0xD7, 0xD3, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xB5, - 0xB0, 0xA6, 0xAC, 0x9B, 0xB5, 0xB5, 0xAE, 0x84, - 0x90, 0xA9, 0x81, 0x8D, 0x96, 0x86, 0xB0, 0xB6, - 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xA7, 0xAD, - 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA5, 0x87, - 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x9A, 0x9A, 0x99, - 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D, - 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0xC8, 0xD7, - 0x9B, 0x8E, 0x8C, 0xB2, 0x77, 0x77, 0x4E, 0x77, - 0x69, 0x71, 0x78, 0x6B, 0x65, 0x66, 0x64, 0x59, - 0x5C, 0x5A, 0x48, 0x72, 0x7B, 0x6B, 0x67, 0x6E, - 0x42, 0x5B, 0x29, 0x36, 0x25, 0x10, 0x17, 0x14, - 0x19, 0x16, 0x13, 0x0E, 0x08, 0x2E, 0x2E, 0x3D, - 0x24, 0x24, 0x24, 0x24, 0x13, 0x12, 0x14, 0x14, - 0x0E, 0x08, 0x0D, 0x0F, 0x08, 0x0D, 0x0E, 0x08, - 0x08, 0x0C, 0x06, 0x06, 0x07, 0x16, 0x07, 0x0E, - 0x08, 0x0A, 0x07, 0x0D, 0x2D, 0x3E, 0x09, 0x4E, - 0x68, 0x52, 0x56, 0x58, 0x4B, 0x22, 0x20, 0x20, - 0x27, 0x39, 0x28, 0x19, 0x1E, 0x1E, 0x08, 0x06, - 0x07, 0x09, 0x08, 0x08, 0x05, 0x1D, 0x1F, 0x17, - 0x18, 0x06, 0x79, 0x80, 0x7D, 0x7C, 0x7A, 0x78, - 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x68, 0x65, 0x62, - 0x4B, 0x5B, 0x5F, 0x55, 0x56, 0x52, 0x4F, 0x46, - 0x42, 0x5A, 0x14, 0x23, 0x3D, 0x2B, 0x21, 0x14, - 0x06, 0x04, 0x03, 0x07, 0x09, 0x13, 0x2A, 0x3A, - 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x07, 0x09, - 0x1D, 0x14, 0x06, 0x02, 0x00 + 0x04, 0x84, 0x04, 0x44, 0x04, 0x04, 0xDC, 0xA4, + 0x0C, 0xC4, 0x1C, 0x64, 0x04, 0x8C, 0x04, 0x34, + 0xB4, 0x0C, 0xAC, 0x34, 0x74, 0x04, 0x0C, 0x4C, + 0xF4, 0x0C, 0x0C, 0xAC, 0xCC, 0x9C, 0x0C, 0x04, + 0x8C, 0x0C, 0x04, 0x04, 0xEC, 0x2C, 0x2C, 0x6C, + 0x04, 0xBC, 0xD4, 0x04, 0x7C, 0x04, 0x5C, 0x0C, + 0x04, 0xEC, 0x04, 0xC4, 0x94, 0x14, 0x3C, 0x1C, + 0xA4, 0x04, 0x24, 0xDC, 0x04, 0x84, 0x4C, 0x0C, + 0x04, 0xE4, 0xA4, 0x04, 0x64, 0x04, 0x94, 0x14, + 0x0C, 0xB4, 0x74, 0x14, 0x24, 0xFC, 0x14, 0xAC, + 0xCC, 0x9C, 0x0C, 0x8C, 0x14, 0x14, 0x04, 0x6C, + 0xBC, 0xD4, 0x7C, 0x5C, 0xD4, 0x14, 0x3C }; unsigned char linux_logo[] __initdata = { - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57, - 0x58, 0x58, 0x59, 0x5C, 0x5D, 0x5F, 0x60, 0x61, - 0x62, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5E, 0x5E, - 0x5E, 0x5D, 0x5D, 0x5C, 0x5D, 0x5B, 0x58, 0x58, - 0x58, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57, - 0x54, 0x56, 0x57, 0x67, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x67, 0x4C, - 0x4A, 0x49, 0x4A, 0x49, 0x4A, 0x49, 0x49, 0x4A, - 0x4A, 0x4B, 0x4B, 0x4B, 0x4C, 0x50, 0x51, 0x52, - 0x54, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57, 0x58, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x58, 0x56, 0x56, 0x53, - 0x52, 0x53, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB, - 0x4B, 0x4B, 0x4B, 0x4A, 0x49, 0x4A, 0x4A, 0x49, - 0x49, 0x49, 0x48, 0x49, 0x49, 0x4A, 0x4A, 0x4B, - 0x4C, 0x4D, 0x52, 0x54, 0x56, 0x55, 0x57, 0x58, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, - 0x50, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF0, 0xF4, 0xFB, - 0xFC, 0x67, 0x53, 0x50, 0x4D, 0x4C, 0x4C, 0x4C, - 0x4B, 0x4A, 0x4A, 0x48, 0x49, 0x48, 0x48, 0x49, - 0x49, 0x49, 0x4B, 0x4C, 0x50, 0x52, 0x53, 0x56, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x55, 0x54, 0x53, 0x51, 0x51, 0x50, 0x4C, 0x4D, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xD2, 0xD7, 0xF5, - 0xFC, 0xFC, 0x5D, 0x5D, 0x5C, 0x5C, 0x59, 0x58, - 0x58, 0x56, 0x52, 0x4C, 0x4B, 0x4A, 0x4A, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x49, 0x4B, 0x4D, 0x51, - 0x54, 0x56, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x55, 0x54, - 0x53, 0x52, 0x51, 0x4D, 0x4D, 0x4D, 0x50, 0x50, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0x64, 0xD9, 0xF5, - 0xF9, 0xFC, 0xFC, 0x64, 0x63, 0x62, 0x61, 0x61, - 0x61, 0x60, 0x5E, 0x5B, 0x5A, 0x54, 0x52, 0x4C, - 0x4B, 0x49, 0x49, 0x47, 0x47, 0x48, 0x49, 0x4B, - 0x4C, 0x51, 0x53, 0x56, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x55, 0x53, 0x53, - 0x51, 0x50, 0x50, 0x50, 0x50, 0x50, 0x53, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xF5, 0xF9, 0xFC, - 0xFC, 0xFC, 0xFC, 0x64, 0x64, 0x64, 0x64, 0x64, - 0x64, 0x64, 0x64, 0x63, 0x61, 0x61, 0x5E, 0x59, - 0x55, 0x52, 0x4C, 0x4A, 0x49, 0x47, 0x48, 0x48, - 0x49, 0x4B, 0x4D, 0x51, 0x54, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x55, 0x54, 0x54, 0x52, 0x51, - 0x51, 0x51, 0x51, 0x51, 0x53, 0x54, 0x59, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF7, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0x60, 0x60, 0x60, 0x61, - 0x62, 0x63, 0x64, 0x64, 0x65, 0x65, 0x64, 0x63, - 0x61, 0x5E, 0x59, 0x56, 0x4D, 0x4B, 0x48, 0x48, - 0x48, 0x48, 0x49, 0x4B, 0x50, 0x53, 0x56, 0x56, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x56, 0x54, 0x53, 0x52, 0x51, 0x51, - 0x51, 0x52, 0x53, 0x55, 0x59, 0x5D, 0x5E, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0x4C, 0x4E, 0x51, 0x52, - 0x57, 0x5A, 0x5E, 0x60, 0x61, 0x63, 0x65, 0xCB, - 0x64, 0x64, 0x63, 0x60, 0x5C, 0x57, 0x50, 0x4B, - 0x48, 0x47, 0x47, 0x47, 0x4A, 0x4C, 0x52, 0x53, - 0x54, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x55, 0x54, 0x53, 0x53, 0x51, 0x52, 0x52, 0x53, - 0x53, 0x57, 0x5A, 0x5D, 0x5E, 0x5E, 0x60, 0xFC, - 0xFC, 0xFC, 0xFB, 0xF9, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFA, 0xF9, 0xF5, 0xFB, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x45, 0x3F, 0x3F, - 0x45, 0x48, 0x4B, 0x4D, 0x54, 0x5A, 0x5E, 0x61, - 0x63, 0xCB, 0xCB, 0x65, 0x64, 0x62, 0x5E, 0x57, - 0x50, 0x4B, 0x48, 0x47, 0x47, 0x48, 0x4B, 0x4D, - 0x51, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, - 0x54, 0x54, 0x53, 0x53, 0x52, 0x53, 0x54, 0x57, - 0x59, 0x5C, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0xFC, - 0xFC, 0xFA, 0xFC, 0xFA, 0xE0, 0xFC, 0xFC, 0xFC, - 0xFB, 0xFB, 0xFB, 0xDF, 0xD8, 0xF9, 0xE0, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x4C, 0x4A, 0x48, - 0x48, 0x3E, 0x44, 0x43, 0x3F, 0x47, 0x4B, 0x52, - 0x5A, 0x5E, 0x62, 0x64, 0xCB, 0xCB, 0x64, 0x61, - 0x5E, 0x57, 0x4D, 0x49, 0x47, 0x47, 0x48, 0x4A, - 0x4C, 0x52, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, - 0x54, 0x53, 0x53, 0x54, 0x54, 0x55, 0x58, 0x5B, - 0x5C, 0x5D, 0x5E, 0x5D, 0x5D, 0x5B, 0x58, 0xFC, - 0xFC, 0xD8, 0x4C, 0x60, 0xFC, 0xF5, 0xFC, 0xFC, - 0xFC, 0xF7, 0x5F, 0x48, 0x48, 0x2C, 0xF8, 0xF9, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x4A, 0x49, - 0x49, 0x49, 0x49, 0x47, 0x3E, 0x44, 0x42, 0x3F, - 0x3E, 0x4B, 0x54, 0x5C, 0x61, 0x64, 0xCB, 0xCB, - 0x64, 0x61, 0x5D, 0x53, 0x4B, 0x49, 0x47, 0x47, - 0x49, 0x4B, 0x50, 0x53, 0x56, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x55, 0x54, - 0x53, 0x53, 0x54, 0x56, 0x58, 0x5A, 0x5B, 0x5D, - 0x5D, 0x5D, 0x5C, 0x5A, 0x54, 0x52, 0x4C, 0xFC, - 0xF7, 0x4E, 0x2D, 0x29, 0x4E, 0xFC, 0xFC, 0xFC, - 0xFB, 0x5F, 0x26, 0x24, 0x20, 0x2E, 0x65, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x45, 0x3F, 0x45, - 0x3E, 0x47, 0x47, 0x47, 0x47, 0x47, 0x3E, 0x44, - 0x43, 0x40, 0x44, 0x49, 0x51, 0x5C, 0x62, 0x64, - 0xCB, 0xCB, 0x63, 0x60, 0x58, 0x50, 0x49, 0x48, - 0x48, 0x48, 0x4A, 0x4D, 0x53, 0x54, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x55, 0x57, 0x59, 0x5B, 0x5C, 0x5D, - 0x5C, 0x5A, 0x54, 0x51, 0x4C, 0x4C, 0x54, 0xFC, - 0xF9, 0x23, 0xDB, 0x2D, 0x23, 0xFA, 0xFB, 0xFA, - 0xF5, 0x27, 0x21, 0xD9, 0xF8, 0x20, 0x21, 0xFB, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x5D, 0x58, 0x55, - 0x50, 0x48, 0x45, 0x43, 0x44, 0x44, 0x45, 0x45, - 0x3E, 0x3F, 0x43, 0x41, 0x3F, 0x48, 0x52, 0x5D, - 0x63, 0x65, 0xCB, 0x65, 0x61, 0x5D, 0x52, 0x4B, - 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54, - 0x54, 0x58, 0x5A, 0x59, 0x5B, 0x5B, 0x5B, 0x5A, - 0x55, 0x52, 0x4D, 0x4D, 0x55, 0x5B, 0x5D, 0xFC, - 0xF1, 0xF9, 0xFC, 0xD4, 0x21, 0xCC, 0xF7, 0xF8, - 0xF2, 0x21, 0xD9, 0xFC, 0xF2, 0xFB, 0x21, 0x45, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xD1, 0xD0, 0xCD, - 0xCC, 0x63, 0x5E, 0x58, 0x50, 0x47, 0x43, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x40, 0x41, 0x3F, 0x4A, - 0x56, 0x5E, 0x64, 0xCB, 0x65, 0x63, 0x5E, 0x56, - 0x4C, 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54, - 0x58, 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, - 0x57, 0x5A, 0x5A, 0x5C, 0x5B, 0x5A, 0x58, 0x54, - 0x51, 0x4C, 0x55, 0x5D, 0x5D, 0x5B, 0x54, 0xFC, - 0xF0, 0xF9, 0xFC, 0x65, 0x45, 0xCD, 0xFB, 0xFB, - 0xF8, 0x26, 0xFB, 0xFC, 0xFC, 0xFC, 0x21, 0x27, - 0xFB, 0xFC, 0xFC, 0xFC, 0xFB, 0xD7, 0x35, 0x34, - 0x2F, 0x35, 0x36, 0x2F, 0x2F, 0x36, 0x2F, 0x2F, - 0x36, 0x36, 0x35, 0x35, 0x43, 0x42, 0x41, 0x2E, - 0x45, 0x4C, 0x5B, 0x62, 0x65, 0xCC, 0x64, 0x60, - 0x58, 0x4D, 0x49, 0x47, 0x47, 0x49, 0x4C, 0x51, - 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x57, - 0x58, 0x5A, 0x5A, 0x5B, 0x5A, 0x55, 0x54, 0x51, - 0x53, 0x5C, 0x5D, 0x5D, 0x54, 0x4B, 0x4D, 0xFC, - 0xFC, 0x44, 0xFC, 0xFB, 0x7B, 0xAB, 0xA8, 0xAE, - 0xAB, 0x7F, 0xFC, 0xFC, 0xFB, 0xFB, 0x22, 0x2A, - 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x2F, 0x30, 0x30, - 0x32, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x2F, 0x2F, 0x40, 0x41, - 0x2E, 0x40, 0x48, 0x56, 0x5F, 0x64, 0xCC, 0x65, - 0x61, 0x59, 0x50, 0x49, 0x47, 0x47, 0x49, 0x4C, - 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, - 0x5A, 0x5A, 0x5A, 0x58, 0x55, 0x52, 0x51, 0x5A, - 0x5D, 0x5D, 0x57, 0x4C, 0x51, 0x54, 0x5D, 0xFC, - 0xFC, 0x2A, 0xFC, 0xC9, 0xAA, 0x8B, 0x8A, 0x8C, - 0xAB, 0x8C, 0x8C, 0xFB, 0xFB, 0x23, 0x20, 0xF1, - 0xFC, 0xFC, 0xFC, 0x3B, 0x33, 0x33, 0x32, 0x32, - 0x31, 0x32, 0x30, 0x32, 0x32, 0x32, 0x32, 0x30, - 0x31, 0x31, 0x31, 0x32, 0x33, 0x33, 0x3C, 0x41, - 0x41, 0x2E, 0x2D, 0x45, 0x4D, 0x5D, 0x63, 0xCC, - 0x65, 0x62, 0x5D, 0x51, 0x49, 0x47, 0x47, 0x4A, - 0x59, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58, - 0x5A, 0x5A, 0x58, 0x55, 0x53, 0x53, 0x5C, 0x5E, - 0x59, 0x51, 0x4E, 0x54, 0x59, 0x5E, 0x62, 0xFC, - 0xFC, 0xDB, 0xAA, 0xA1, 0x95, 0x9C, 0x8C, 0x88, - 0x82, 0x83, 0x83, 0x8C, 0x88, 0xAE, 0xB9, 0xFB, - 0xFC, 0xFC, 0xFC, 0x3C, 0x3B, 0x72, 0x38, 0x33, - 0x33, 0x33, 0x31, 0x33, 0x31, 0x31, 0x31, 0x31, - 0x33, 0x33, 0x38, 0x33, 0x72, 0x3B, 0x44, 0x2E, - 0x41, 0x2E, 0x2E, 0x2D, 0x43, 0x4B, 0x5B, 0x63, - 0xCB, 0xCC, 0x63, 0x5D, 0x51, 0x49, 0x47, 0x49, - 0x5C, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, - 0x58, 0x58, 0x57, 0x53, 0x58, 0x5D, 0x5E, 0x55, - 0x51, 0x53, 0x58, 0x5E, 0x60, 0x63, 0x64, 0xFC, - 0xFC, 0xC0, 0xA6, 0x9D, 0x8B, 0x9C, 0x8C, 0x8C, - 0x6E, 0x83, 0x88, 0x8C, 0x8C, 0x8C, 0x83, 0xE8, - 0xFB, 0xFC, 0xFC, 0xFC, 0x33, 0x70, 0x70, 0x6F, - 0x6F, 0x6F, 0x6F, 0x3A, 0x6F, 0x6D, 0x6F, 0x6F, - 0x70, 0x6F, 0x6F, 0x70, 0x6F, 0x32, 0x5A, 0x48, - 0x41, 0x2D, 0x2D, 0x2D, 0x2C, 0x41, 0x49, 0x5A, - 0x62, 0xCB, 0xCB, 0x63, 0x5D, 0x50, 0x49, 0x4A, - 0x5C, 0x58, 0x58, 0x57, 0x55, 0x57, 0x57, 0x57, - 0x57, 0x55, 0x56, 0x59, 0x5E, 0x5C, 0x52, 0x53, - 0x55, 0x5B, 0x5E, 0x61, 0x63, 0x64, 0x63, 0xFC, - 0xE8, 0xBF, 0xA4, 0x99, 0x9C, 0x8C, 0x88, 0x88, - 0x6E, 0x88, 0x8C, 0x8C, 0x8C, 0xC2, 0xA6, 0xC4, - 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x3A, 0x6F, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x37, 0x32, 0xCD, 0x5E, - 0x4C, 0x43, 0x2C, 0x2D, 0x2D, 0x2C, 0x2E, 0x47, - 0x57, 0x61, 0x65, 0xCC, 0x63, 0x5C, 0x50, 0x4D, - 0x5C, 0x5A, 0x57, 0x55, 0x55, 0x55, 0x58, 0x58, - 0x55, 0x54, 0x5B, 0x5E, 0x5D, 0x53, 0x53, 0x55, - 0x5D, 0x5E, 0x61, 0x61, 0x61, 0x61, 0x5E, 0xFC, - 0xEA, 0xBE, 0xA4, 0x9B, 0x8B, 0x85, 0x8C, 0x6E, - 0x8C, 0x8C, 0x8C, 0xA3, 0xAA, 0xA4, 0xA4, 0xE9, - 0xFB, 0xFC, 0xFC, 0xFC, 0x36, 0x6D, 0x70, 0x73, - 0x70, 0x70, 0x70, 0x73, 0x73, 0x73, 0x73, 0x70, - 0x70, 0x70, 0x73, 0x70, 0x37, 0x38, 0xD1, 0xCF, - 0x61, 0x4D, 0x44, 0x2C, 0x2D, 0x2E, 0x2C, 0x2E, - 0x3E, 0x56, 0x61, 0xCB, 0xCC, 0x62, 0x5B, 0x57, - 0x59, 0x58, 0x55, 0x54, 0x54, 0x55, 0x58, 0x58, - 0x58, 0x5B, 0x5E, 0x5B, 0x53, 0x55, 0x55, 0x5C, - 0x5E, 0x61, 0x61, 0x60, 0x5D, 0x5A, 0x4E, 0xFC, - 0xFC, 0xEA, 0xAA, 0x9C, 0x8A, 0x85, 0x82, 0x8C, - 0x8C, 0xA8, 0xEB, 0xA8, 0xA4, 0xA4, 0xAA, 0xFC, - 0xFC, 0xFC, 0x64, 0xFB, 0x39, 0x31, 0x72, 0x78, - 0x73, 0x78, 0x73, 0x74, 0x74, 0x74, 0x74, 0x73, - 0x78, 0x70, 0x73, 0x73, 0x33, 0xCC, 0xD2, 0xD1, - 0xCE, 0x62, 0x53, 0x3F, 0x2D, 0x2D, 0x41, 0x2C, - 0x2E, 0x3E, 0x56, 0x62, 0xCB, 0xCB, 0x61, 0x5D, - 0x54, 0x54, 0x54, 0x54, 0x56, 0x58, 0x58, 0x58, - 0x5C, 0x5E, 0x5A, 0x55, 0x58, 0x58, 0x5B, 0x5E, - 0x61, 0x5E, 0x5D, 0x5A, 0x52, 0x55, 0xCD, 0xFC, - 0xFC, 0x34, 0xC9, 0xE8, 0xA8, 0xAE, 0xC2, 0xE8, - 0xC3, 0xA6, 0xA7, 0xA6, 0xAA, 0x78, 0x2E, 0x42, - 0xFC, 0xFC, 0xD2, 0x64, 0xF8, 0x31, 0x72, 0x73, - 0x73, 0x73, 0x73, 0x74, 0x75, 0x75, 0x74, 0x73, - 0x73, 0x73, 0x73, 0x72, 0x33, 0x5C, 0x64, 0xD2, - 0xD1, 0xCF, 0x63, 0x54, 0x3F, 0x2C, 0x41, 0x41, - 0x2C, 0x2E, 0x47, 0x58, 0x63, 0xCB, 0xCB, 0x62, - 0x52, 0x53, 0x53, 0x56, 0x58, 0x58, 0x5A, 0x5B, - 0x5E, 0x5A, 0x57, 0x58, 0x58, 0x58, 0x60, 0x60, - 0x5D, 0x5A, 0x55, 0x4E, 0x64, 0xD2, 0xD1, 0xFC, - 0xFC, 0x41, 0x3E, 0xC1, 0xC0, 0xA3, 0xA6, 0xA7, - 0xA7, 0xA9, 0xAA, 0xB8, 0x2E, 0x3F, 0x2C, 0x41, - 0xFC, 0xFC, 0xF7, 0xCE, 0xCD, 0x36, 0x72, 0x73, - 0x74, 0x75, 0x78, 0x75, 0x75, 0x75, 0x74, 0x74, - 0x74, 0x74, 0x78, 0x72, 0x6D, 0x49, 0x59, 0xCB, - 0xD1, 0xD1, 0xD2, 0xCB, 0x56, 0x3F, 0x2C, 0x41, - 0x40, 0x2D, 0x2E, 0x49, 0x5B, 0x64, 0xCC, 0x64, - 0x51, 0x53, 0x53, 0x55, 0x58, 0x59, 0x5B, 0x5E, - 0x59, 0x58, 0x58, 0x58, 0x55, 0x60, 0x60, 0x5C, - 0x5A, 0x53, 0x5B, 0xD0, 0xD3, 0xD3, 0xD3, 0xFB, - 0xFC, 0x40, 0x41, 0x45, 0xC4, 0xC0, 0xBE, 0xBE, - 0xC1, 0xC0, 0x3C, 0x47, 0x2E, 0x21, 0x22, 0x20, - 0x65, 0xFC, 0xFC, 0xFC, 0xFC, 0x6D, 0x72, 0x75, - 0x78, 0x76, 0x75, 0x79, 0x76, 0x76, 0x76, 0x76, - 0x75, 0x75, 0x75, 0x72, 0x6D, 0x2E, 0x48, 0x5D, - 0xCE, 0xD1, 0xD4, 0xD3, 0xCB, 0x56, 0x43, 0x2C, - 0x42, 0x43, 0x2E, 0x2E, 0x4A, 0x5D, 0x64, 0x64, - 0x50, 0x52, 0x56, 0x58, 0x5C, 0x5D, 0x5E, 0x5D, - 0x5A, 0x58, 0x58, 0x55, 0x61, 0x60, 0x58, 0x58, - 0x4E, 0x61, 0xD1, 0xD4, 0xD4, 0xD1, 0xEE, 0xFC, - 0xFC, 0x2B, 0x29, 0x2E, 0x3F, 0xB0, 0xAD, 0x81, - 0x46, 0x2D, 0x46, 0x2C, 0x24, 0x22, 0x22, 0x23, - 0x25, 0xFC, 0xFC, 0xFC, 0xFC, 0x6E, 0x73, 0x76, - 0x76, 0x79, 0x79, 0x79, 0x76, 0x76, 0x79, 0x76, - 0x79, 0x79, 0x79, 0x74, 0x3F, 0x41, 0x2C, 0x48, - 0x5F, 0xCF, 0xD5, 0xD7, 0xD6, 0xCD, 0x57, 0x40, - 0x2E, 0x3F, 0x44, 0x2E, 0x41, 0x4C, 0x60, 0x61, - 0x51, 0x53, 0x58, 0x5C, 0x5D, 0x5E, 0x5D, 0x5C, - 0x58, 0x57, 0x54, 0x5F, 0x5E, 0x55, 0x55, 0x52, - 0x64, 0xD4, 0xD5, 0xD4, 0xD1, 0x5D, 0xFA, 0xFB, - 0xF4, 0x21, 0x24, 0x41, 0x40, 0x44, 0x2E, 0x2E, - 0x42, 0x41, 0x2A, 0x24, 0x22, 0x22, 0x22, 0x22, - 0x23, 0xD9, 0xFC, 0xFC, 0xFC, 0xFC, 0xE5, 0xB8, - 0x8F, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F, - 0x8F, 0x8F, 0xB8, 0xE5, 0x3F, 0x3E, 0x43, 0x2C, - 0x48, 0x61, 0xD1, 0xD7, 0xD9, 0xD7, 0xD0, 0x57, - 0x41, 0x2E, 0x3E, 0x44, 0x2D, 0x40, 0x52, 0x5D, - 0x53, 0x55, 0x59, 0x5D, 0x5E, 0x5E, 0x5D, 0x5A, - 0x57, 0x53, 0x5E, 0x5E, 0x54, 0x53, 0x54, 0x65, - 0xD5, 0xD6, 0xD4, 0xCE, 0x53, 0xFB, 0xF9, 0xFC, - 0x24, 0x22, 0x23, 0x23, 0x41, 0x42, 0x2E, 0x40, - 0x2B, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x23, 0x23, 0xFC, 0xFC, 0xFC, 0xFC, 0xE7, 0xBD, - 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0xB5, 0xC6, 0xEB, 0x2D, 0x47, 0x4A, 0x47, - 0x2C, 0x3E, 0x61, 0xD4, 0xDC, 0xDC, 0xDA, 0xCF, - 0x54, 0x41, 0x41, 0x3E, 0x45, 0x2C, 0x3F, 0x4A, - 0x58, 0x5A, 0x5C, 0x5F, 0x60, 0x5E, 0x5D, 0x57, - 0x51, 0x5D, 0x5D, 0x51, 0x53, 0x53, 0xCB, 0xD5, - 0xD6, 0xD5, 0x63, 0x55, 0xFC, 0xFC, 0xFC, 0x2C, - 0x23, 0x22, 0x23, 0x22, 0x20, 0x2D, 0x2C, 0x26, - 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x21, 0xF0, 0xFC, 0xFC, 0xFC, 0xE2, 0xC6, - 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0xC7, 0xE3, 0x3E, 0x2E, 0x49, 0x52, - 0x4C, 0x41, 0x44, 0x62, 0xD6, 0xDE, 0xDE, 0xD9, - 0xD0, 0x51, 0x2E, 0x40, 0x47, 0x44, 0x2C, 0x42, - 0x5D, 0x5D, 0x5F, 0x60, 0x60, 0x5D, 0x57, 0x51, - 0x58, 0x5D, 0x4E, 0x52, 0x55, 0x64, 0xD5, 0xD6, - 0xD4, 0x61, 0x59, 0x6B, 0xFC, 0xFC, 0xFC, 0x21, - 0x23, 0x22, 0x23, 0x22, 0x23, 0x21, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x21, 0x24, 0xFC, 0xFC, 0xFC, 0xE2, 0xC7, - 0xB5, 0x90, 0x93, 0x93, 0x93, 0x90, 0x93, 0x93, - 0x90, 0xB5, 0xC8, 0xE4, 0x5F, 0x45, 0x2E, 0x4D, - 0x57, 0x57, 0x44, 0x43, 0x63, 0xDA, 0xDF, 0xDF, - 0xD9, 0xCE, 0x4C, 0x2C, 0x3F, 0x3E, 0x40, 0x40, - 0x60, 0x5E, 0x61, 0x61, 0x5E, 0x5B, 0x53, 0x52, - 0x5C, 0x52, 0x52, 0x55, 0x61, 0xD4, 0xD5, 0xD1, - 0x5E, 0x5B, 0x5C, 0xFB, 0xFC, 0xFC, 0x2A, 0x21, - 0x23, 0x22, 0x23, 0x22, 0x22, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x22, 0xFB, 0xFC, 0xFC, 0xB3, 0xC8, - 0xB5, 0x90, 0x92, 0xB5, 0x93, 0x93, 0xB5, 0x93, - 0x92, 0xB5, 0xC8, 0xB9, 0xD0, 0x5E, 0x44, 0x40, - 0x52, 0x58, 0x57, 0x48, 0x40, 0x63, 0xD9, 0xE0, - 0xE0, 0xD9, 0xCB, 0x49, 0x2D, 0x3F, 0x45, 0x3F, - 0x63, 0x61, 0x62, 0x60, 0x5E, 0x55, 0x4D, 0x59, - 0x53, 0x4E, 0x54, 0x5D, 0xD2, 0xD4, 0xD2, 0x5E, - 0x5C, 0x5D, 0xFC, 0xFC, 0xFC, 0xF8, 0x29, 0x23, - 0x23, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x23, 0x22, 0x22, 0x23, 0x23, 0x23, 0x22, 0x22, - 0x22, 0x22, 0x22, 0xF0, 0xFC, 0xFC, 0xB3, 0xC7, - 0xB5, 0x93, 0xB5, 0x93, 0x93, 0x91, 0x93, 0x93, - 0x91, 0xB5, 0xC7, 0xAD, 0xD6, 0xD2, 0x5E, 0x3F, - 0x3F, 0x57, 0x57, 0x58, 0x4A, 0x41, 0x64, 0xDC, - 0xF1, 0xDF, 0xDA, 0x61, 0x45, 0x2E, 0x43, 0x47, - 0xCB, 0x63, 0x62, 0x5F, 0x58, 0x51, 0x53, 0x54, - 0x4C, 0x52, 0x5C, 0xCD, 0xD3, 0xD2, 0x60, 0x5D, - 0x5D, 0xFB, 0xFC, 0xFC, 0xFC, 0xDB, 0x49, 0x24, - 0x21, 0x23, 0x23, 0x22, 0x26, 0x26, 0x2A, 0x24, - 0x22, 0x23, 0x22, 0x21, 0x24, 0x26, 0x26, 0x2A, - 0x29, 0x2B, 0x24, 0x25, 0xFC, 0xFC, 0xB3, 0xC5, - 0x91, 0x91, 0x92, 0x91, 0x92, 0x92, 0x93, 0x93, - 0x91, 0x93, 0xC6, 0xAD, 0xDC, 0xD9, 0xD4, 0x60, - 0x43, 0x45, 0x58, 0x58, 0x57, 0x4B, 0x43, 0xCC, - 0xDD, 0xF1, 0xD8, 0xD5, 0x5D, 0x43, 0x41, 0x47, - 0xCD, 0x63, 0x62, 0x5D, 0x54, 0x4C, 0x55, 0x4B, - 0x51, 0x58, 0x62, 0xD0, 0xD0, 0x62, 0x5D, 0x5D, - 0x67, 0xFC, 0xFC, 0xFC, 0xFC, 0x58, 0x4E, 0x28, - 0x2A, 0x20, 0x23, 0x22, 0x23, 0x2A, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x23, 0x25, 0x2A, 0x2E, 0x2D, - 0x2E, 0x2E, 0x2E, 0x23, 0xFA, 0xFC, 0xB2, 0xBD, - 0xB5, 0x90, 0x91, 0x93, 0x92, 0x90, 0x91, 0x93, - 0x92, 0x91, 0xBD, 0xAD, 0xDE, 0xE0, 0xD8, 0xD7, - 0x61, 0x40, 0x48, 0x58, 0x58, 0x58, 0x48, 0x44, - 0xCF, 0xDE, 0xE0, 0xDD, 0xD0, 0x52, 0x41, 0x45, - 0xCD, 0x63, 0x61, 0x58, 0x4D, 0x51, 0x4C, 0x4B, - 0x54, 0x5D, 0xCC, 0xCE, 0x63, 0x61, 0x5D, 0x5D, - 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x27, 0x21, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x24, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x20, - 0x27, 0x2B, 0x41, 0x2B, 0x23, 0xFC, 0xB2, 0xB6, - 0x93, 0x90, 0x92, 0xB5, 0x92, 0x90, 0xB5, 0x90, - 0x92, 0x93, 0xBC, 0xAD, 0xDC, 0xF1, 0xF3, 0xF0, - 0xD9, 0x61, 0x41, 0x4A, 0x58, 0x57, 0x57, 0x44, - 0x49, 0xD2, 0xDD, 0xD8, 0xDA, 0x63, 0x4A, 0x45, - 0xCC, 0x63, 0x5E, 0x52, 0x4B, 0x4C, 0x49, 0x51, - 0x5C, 0x61, 0xCD, 0x65, 0x63, 0x5E, 0x4E, 0xCF, - 0xFB, 0xFB, 0xF0, 0xFC, 0xD2, 0x2A, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x26, 0x41, 0x27, 0xF9, 0x81, 0xB7, - 0xB5, 0x91, 0x92, 0xB5, 0x91, 0xB5, 0x93, 0xB5, - 0x93, 0xB6, 0xB7, 0xB9, 0xCB, 0xD8, 0xF3, 0xF2, - 0xF2, 0xDB, 0x61, 0x2D, 0x51, 0x58, 0x57, 0x58, - 0x41, 0x51, 0xD4, 0xDB, 0xDC, 0xD1, 0x5B, 0x4C, - 0xCB, 0x62, 0x59, 0x4C, 0x4A, 0x49, 0x4B, 0x55, - 0x60, 0x64, 0xCC, 0x64, 0x5E, 0x55, 0x60, 0xE1, - 0xFB, 0xF8, 0xFC, 0xFC, 0x21, 0x22, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x21, 0x24, 0x2D, 0x21, 0xB4, 0xBB, - 0xB6, 0xB5, 0xB6, 0xB7, 0xB7, 0xB7, 0xB7, 0xB6, - 0xB6, 0xB6, 0xBB, 0xB9, 0x45, 0xCB, 0xDF, 0xF3, - 0xF3, 0xF3, 0xDB, 0x5E, 0x2C, 0x51, 0x58, 0x58, - 0x52, 0x2D, 0x5C, 0xD4, 0xD9, 0xD5, 0x63, 0x58, - 0x64, 0x60, 0x53, 0x49, 0x4A, 0x49, 0x52, 0x5C, - 0x63, 0xCD, 0xCD, 0x63, 0x5C, 0x4E, 0x65, 0xFC, - 0xFC, 0xF5, 0xFC, 0xD2, 0x23, 0x22, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x21, 0x22, 0x25, 0x29, 0xB3, 0xC7, - 0xB5, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, - 0xB6, 0xB5, 0xC7, 0xAD, 0x57, 0x3F, 0xCB, 0xF0, - 0xF3, 0xF3, 0xF2, 0xD9, 0x58, 0x41, 0x4C, 0x58, - 0x57, 0x47, 0x42, 0x62, 0xD4, 0xD4, 0xCC, 0x60, - 0x63, 0x5D, 0x50, 0x47, 0x48, 0x4B, 0x58, 0x60, - 0xCC, 0xCE, 0xCD, 0x60, 0x53, 0x5C, 0x62, 0xFB, - 0xF9, 0xFC, 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x23, 0x23, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0x81, 0xC7, - 0xB7, 0xB7, 0xBC, 0xB7, 0xBC, 0xBC, 0xBC, 0xB7, - 0xB7, 0xB7, 0xC8, 0x80, 0x58, 0x57, 0x40, 0xCE, - 0xF3, 0xF2, 0xF2, 0xF0, 0xD5, 0x4C, 0x3F, 0x4B, - 0x52, 0x50, 0x2D, 0x4B, 0x64, 0xD2, 0xCC, 0x61, - 0x60, 0x58, 0x4A, 0x47, 0x47, 0x4C, 0x59, 0x64, - 0xD0, 0xD0, 0x64, 0x59, 0x49, 0x5D, 0xFB, 0xFC, - 0xD9, 0xFC, 0xD6, 0x23, 0x22, 0x22, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x23, 0x21, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0xB4, 0xC8, - 0xBD, 0xB7, 0xBD, 0xBC, 0xBD, 0xC5, 0xBC, 0xC5, - 0xBC, 0xBD, 0xC7, 0xAC, 0x58, 0x57, 0x58, 0x2C, - 0xD1, 0xF0, 0xF3, 0xF3, 0xE0, 0xCD, 0x45, 0x3E, - 0x48, 0x4B, 0x3F, 0x41, 0x56, 0x64, 0x65, 0x62, - 0x5D, 0x52, 0x47, 0x48, 0x48, 0x53, 0x60, 0xCC, - 0xD2, 0xD0, 0x63, 0x52, 0x4E, 0x53, 0xFB, 0xFB, - 0xFC, 0xFC, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x23, 0x20, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, 0xB4, 0xC7, - 0xC5, 0xBC, 0xC5, 0xBD, 0xC5, 0xC5, 0xBD, 0xC5, - 0xBC, 0xC6, 0xC7, 0xB9, 0x58, 0x57, 0x58, 0x57, - 0x2D, 0xD4, 0xF1, 0xF2, 0xF0, 0xD9, 0x5D, 0x47, - 0x48, 0x3F, 0x42, 0x2C, 0x48, 0x5C, 0x5F, 0x60, - 0x58, 0x50, 0x47, 0x4A, 0x49, 0x55, 0x63, 0xD0, - 0xD2, 0xCD, 0x5D, 0x49, 0x4E, 0xE1, 0xFC, 0xF0, - 0xFC, 0xF8, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x20, 0x21, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22, - 0x23, 0x22, 0x23, 0x23, 0x23, 0x22, 0xC4, 0xC8, - 0xBD, 0xBD, 0xC6, 0xBD, 0xC6, 0xC6, 0xC5, 0xC6, - 0xBD, 0xC6, 0xC7, 0xE4, 0x54, 0x57, 0x58, 0x57, - 0x57, 0x43, 0xD7, 0xE0, 0xF1, 0xD8, 0xCD, 0x4B, - 0x4A, 0x47, 0x42, 0x2C, 0x3F, 0x4D, 0x58, 0x5C, - 0x52, 0x4B, 0x48, 0x4B, 0x4A, 0x58, 0xCB, 0xD3, - 0xD2, 0xCD, 0x58, 0x47, 0x4A, 0xFC, 0xFC, 0xFB, - 0xFC, 0x2B, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x26, 0x21, 0x21, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0xE5, 0xC8, - 0xBA, 0xC5, 0xC6, 0xC6, 0xC6, 0xC7, 0xC6, 0xC7, - 0xC5, 0xC6, 0xC8, 0xE5, 0x2E, 0x54, 0x58, 0x57, - 0x57, 0x4C, 0x4D, 0xDA, 0xD8, 0xD8, 0xD4, 0x5C, - 0x4B, 0x4B, 0x3F, 0x42, 0x44, 0x4A, 0x51, 0x58, - 0x4B, 0x48, 0x4B, 0x51, 0x4D, 0x5F, 0xD0, 0xD1, - 0xD0, 0x64, 0x51, 0x44, 0x6B, 0xFC, 0xFB, 0xFC, - 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x26, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0xE5, 0xED, - 0xE7, 0xBA, 0xC8, 0xC6, 0xC6, 0xC6, 0xC6, 0xC7, - 0xC7, 0xE5, 0xED, 0xE6, 0x61, 0x41, 0x52, 0x58, - 0x58, 0x57, 0x45, 0x5E, 0xD7, 0xDD, 0xD5, 0x60, - 0x4B, 0x4C, 0x48, 0x4D, 0x4D, 0x50, 0x4D, 0x56, - 0x4A, 0x3E, 0x53, 0x53, 0x52, 0x63, 0xD3, 0xD0, - 0xCE, 0x60, 0x4A, 0x45, 0xFC, 0xFC, 0xF7, 0xFC, - 0xFC, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x21, 0x2A, 0x20, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x21, 0x23, 0xEB, 0xF6, - 0xF6, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, - 0xF6, 0xF6, 0xF6, 0xE6, 0xDB, 0x58, 0x45, 0x4B, - 0x58, 0x57, 0x4D, 0x4B, 0x64, 0xD4, 0xD0, 0x5C, - 0x48, 0x51, 0x4C, 0x5D, 0x5E, 0x5C, 0x56, 0x59, - 0x3E, 0x4A, 0x58, 0x54, 0x52, 0x65, 0xD3, 0xD0, - 0xCF, 0x5D, 0x48, 0xFC, 0xFC, 0xFC, 0xFA, 0xFC, - 0xFC, 0x21, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x21, 0x2A, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x21, 0x4F, 0xE6, 0xC6, - 0xC6, 0xBD, 0xC6, 0xBD, 0xBD, 0xBD, 0xBD, 0xC6, - 0xC5, 0xBA, 0xC7, 0xE6, 0xF2, 0xD4, 0x49, 0x4B, - 0x3E, 0x4D, 0x52, 0x3E, 0x52, 0x63, 0x64, 0x56, - 0x48, 0x54, 0x4D, 0x61, 0xCC, 0xCC, 0x60, 0x60, - 0x47, 0x4D, 0x5C, 0x53, 0x58, 0xCF, 0xD1, 0xCF, - 0xD0, 0x59, 0x45, 0xFC, 0xFC, 0xFC, 0xEF, 0xF9, - 0xFC, 0x21, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x23, 0x4F, 0xE4, 0xB9, - 0xAF, 0x80, 0x80, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, - 0x80, 0xB4, 0xB9, 0xE4, 0x7F, 0xDE, 0x61, 0x52, - 0x54, 0x48, 0x3F, 0x43, 0x4D, 0x56, 0x59, 0x4B, - 0x3E, 0x58, 0x53, 0x61, 0xD3, 0xD4, 0xCF, 0xCD, - 0x4C, 0x58, 0x5F, 0x53, 0x5E, 0xD3, 0xD0, 0xCE, - 0xCE, 0x52, 0x3F, 0xFC, 0xFC, 0xFC, 0xF7, 0x65, - 0xFA, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x21, 0x2A, 0x23, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x21, 0xB1, 0xE4, 0xE6, - 0x7C, 0xB1, 0x7C, 0xB1, 0xB2, 0xB2, 0xB3, 0x3D, - 0xB3, 0x3C, 0xE5, 0xB3, 0xB0, 0xF1, 0xD0, 0x58, - 0x5D, 0x4D, 0x40, 0x41, 0x48, 0x51, 0x4C, 0x3F, - 0x3F, 0x4D, 0x5A, 0x5A, 0xD5, 0xD9, 0xD7, 0xD4, - 0x57, 0x5E, 0x61, 0x4C, 0x63, 0xD4, 0xCF, 0xCE, - 0xCB, 0x4D, 0x4A, 0xFC, 0xFC, 0xFC, 0xFC, 0xF0, - 0xFB, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x22, 0x23, 0x22, 0x23, 0x23, 0xB1, 0x81, 0x7D, - 0x39, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x7C, 0xB2, 0xB0, 0xDF, 0xD2, 0x57, - 0x60, 0x59, 0x5B, 0x59, 0x52, 0x4C, 0x4A, 0x40, - 0x42, 0x4A, 0x53, 0x4D, 0xD2, 0xDE, 0xDE, 0xD9, - 0x5E, 0x5E, 0x60, 0x4A, 0xCD, 0xD1, 0xCF, 0xCE, - 0x63, 0x49, 0x5C, 0xFB, 0xE8, 0x89, 0x9F, 0xFC, - 0xD6, 0x21, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x21, 0x2A, 0x22, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x7F, 0xB9, - 0x71, 0x6C, 0x38, 0x38, 0x33, 0x33, 0x33, 0x38, - 0x38, 0x71, 0xAD, 0xE4, 0xD3, 0xDA, 0xCC, 0x52, - 0x63, 0x60, 0xCE, 0xD4, 0xCF, 0x60, 0x4C, 0x40, - 0x3F, 0x45, 0x4B, 0x5A, 0xCB, 0xD8, 0xDE, 0xDC, - 0x5E, 0x5E, 0x5F, 0x4C, 0xD2, 0xD2, 0xCF, 0xCF, - 0x61, 0x45, 0x5E, 0xA7, 0x9D, 0x95, 0x8B, 0x99, - 0xFC, 0x41, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x23, 0x2A, 0x23, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x77, 0x77, 0xF6, - 0xFC, 0x7D, 0x7D, 0x7E, 0x7E, 0x7E, 0x7E, 0x7D, - 0x7D, 0xFC, 0x47, 0x64, 0xD0, 0xD0, 0x5D, 0x4B, - 0x62, 0xCC, 0xD1, 0xDE, 0xDE, 0xD4, 0x5E, 0x43, - 0x3F, 0x3E, 0x48, 0x53, 0x58, 0xDB, 0xD8, 0xDC, - 0x5E, 0x5E, 0x5E, 0x53, 0xD4, 0xD2, 0xD0, 0xD0, - 0x5E, 0x49, 0xA7, 0xA6, 0x89, 0x95, 0x8B, 0x9C, - 0x9C, 0xFB, 0xD4, 0x22, 0x22, 0x22, 0x22, 0x23, - 0x22, 0x23, 0x23, 0x2A, 0x22, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x23, 0x22, 0x23, 0x23, 0x98, 0x8C, 0x8C, 0x88, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, - 0xE9, 0x9C, 0x48, 0x5C, 0xD0, 0xCB, 0x48, 0x49, - 0x5B, 0xCB, 0xCD, 0xE0, 0xF1, 0xDD, 0xD0, 0x4A, - 0x41, 0x47, 0x45, 0x4C, 0x48, 0xD7, 0xDE, 0xDC, - 0x5E, 0x5E, 0x5A, 0x58, 0xD1, 0xD0, 0xD0, 0xD2, - 0x5C, 0x55, 0xA7, 0xA6, 0x87, 0x86, 0x89, 0x94, - 0x9C, 0xA9, 0xFC, 0xF4, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x22, 0x2A, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x22, 0x23, 0xA4, 0x89, 0x8C, 0xAA, - 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF7, - 0x85, 0x88, 0x8D, 0x59, 0x64, 0x63, 0x47, 0x3E, - 0x4C, 0x60, 0x61, 0xE0, 0xF0, 0xDF, 0xD9, 0x5D, - 0x2E, 0x3E, 0x3E, 0x47, 0x4D, 0xCD, 0xDE, 0xDC, - 0x5D, 0x5C, 0x51, 0x5D, 0xD1, 0xD2, 0xD2, 0xD4, - 0x5A, 0xBE, 0xA7, 0x98, 0x8A, 0x8A, 0xA0, 0x8B, - 0x86, 0x86, 0xF7, 0xFC, 0xF7, 0x26, 0x23, 0x23, - 0x22, 0x22, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x21, 0x21, 0x21, 0xA1, 0x98, 0x9F, 0xBF, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xA7, - 0x8C, 0x86, 0x8D, 0x59, 0x5E, 0x5D, 0x3F, 0x3E, - 0x47, 0x53, 0x63, 0xD9, 0xF0, 0xF1, 0xDE, 0xD0, - 0x43, 0x3E, 0x47, 0x45, 0x4A, 0x5B, 0xDC, 0xDA, - 0x5D, 0x59, 0x49, 0x5F, 0xD1, 0xD2, 0xD3, 0xB9, - 0xA5, 0xA7, 0x98, 0x9B, 0x96, 0x9D, 0x89, 0x89, - 0x8B, 0x9C, 0x9D, 0xFC, 0xFC, 0xFC, 0x26, 0x22, - 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x29, 0x2D, 0x99, 0x99, 0xA2, 0xAA, - 0xC4, 0xFB, 0xFC, 0xFC, 0xFC, 0xF6, 0xBF, 0xA2, - 0x9C, 0x9C, 0x8E, 0xDC, 0xCD, 0x51, 0x41, 0x3E, - 0x45, 0x49, 0x58, 0xCD, 0xE0, 0xE0, 0xD8, 0xDA, - 0x4C, 0x4A, 0x45, 0x45, 0x48, 0x47, 0xDA, 0xDA, - 0x5C, 0x58, 0x44, 0x69, 0xA9, 0x98, 0xA4, 0xA6, - 0xA1, 0xA4, 0x99, 0x9E, 0x9D, 0x8B, 0x8A, 0x97, - 0x87, 0x9A, 0x8A, 0xC2, 0xFC, 0xFC, 0xFC, 0x4D, - 0x21, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22, - 0x21, 0x22, 0x2D, 0x34, 0xA4, 0xA2, 0xA2, 0xA9, - 0xBF, 0xC0, 0xC3, 0xC1, 0xC0, 0xBE, 0xA6, 0x9D, - 0x99, 0x87, 0xA2, 0xF1, 0xDC, 0x64, 0x42, 0x45, - 0x47, 0x3E, 0x49, 0x4C, 0xDD, 0xDF, 0xD8, 0xDB, - 0x5E, 0x4C, 0x48, 0x45, 0x45, 0x41, 0xD1, 0xD6, - 0x5A, 0x55, 0x3F, 0xA7, 0xA1, 0x98, 0x9F, 0x99, - 0x9F, 0x9D, 0x9A, 0x95, 0x8B, 0x97, 0x89, 0x8A, - 0x88, 0x94, 0x9C, 0x8C, 0xFC, 0xFC, 0xFC, 0xFC, - 0xF4, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x23, 0x23, 0x2C, 0x2C, 0xA8, 0xA2, 0xA4, 0xA4, - 0xA9, 0xAA, 0xAA, 0xAA, 0xA9, 0xA6, 0x98, 0x9C, - 0x8B, 0x88, 0x98, 0x8D, 0xD8, 0xD6, 0x4E, 0x47, - 0x47, 0x49, 0x47, 0x3F, 0xDA, 0xDD, 0xDE, 0xDD, - 0xCC, 0x4A, 0x4B, 0x3E, 0x45, 0x43, 0x61, 0xD4, - 0x56, 0x51, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0x9A, - 0xA0, 0xA2, 0x98, 0x98, 0x8B, 0x8B, 0x98, 0x98, - 0x84, 0x8B, 0x94, 0x8A, 0xA4, 0xFC, 0xFC, 0xFC, - 0xFC, 0xF2, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x23, - 0x23, 0x22, 0x2C, 0x2D, 0xC0, 0xA4, 0xA2, 0xA4, - 0xA4, 0xA6, 0xA6, 0xA6, 0xA4, 0xA2, 0x9F, 0x89, - 0x8B, 0x9C, 0x9C, 0x8B, 0x68, 0xDB, 0x5F, 0x4B, - 0x3E, 0x49, 0x4B, 0x3E, 0xCC, 0xDA, 0xDC, 0xDD, - 0xD3, 0x49, 0x52, 0x48, 0x45, 0x45, 0x53, 0xD0, - 0x51, 0x4A, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0xA0, - 0x9B, 0x86, 0x89, 0x98, 0x89, 0x8A, 0x96, 0x8A, - 0x9C, 0x89, 0x89, 0x9C, 0x8C, 0xF6, 0xFC, 0xFC, - 0xFC, 0xFC, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23, - 0x22, 0x21, 0x2B, 0x34, 0xC0, 0xA8, 0xA4, 0xA2, - 0xA2, 0x98, 0xA1, 0xA0, 0x98, 0x9F, 0x95, 0x8A, - 0x94, 0xA1, 0x8A, 0x84, 0x9B, 0x68, 0xCC, 0x49, - 0x4A, 0x47, 0x4C, 0x4B, 0x51, 0xD3, 0xDA, 0xDC, - 0xD5, 0x56, 0x56, 0x4A, 0x3E, 0x45, 0x48, 0x63, - 0x4A, 0x47, 0x3E, 0xA7, 0x98, 0x9D, 0x9E, 0x8B, - 0x95, 0x9B, 0x89, 0x86, 0x9B, 0x8B, 0x89, 0x84, - 0x9A, 0xA1, 0x95, 0x9A, 0x8C, 0xA4, 0xFC, 0xFC, - 0xFC, 0xFA, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23, - 0x21, 0x23, 0x2C, 0xF6, 0xBF, 0xA9, 0xA2, 0x99, - 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9B, 0x87, 0x8B, - 0x9C, 0x86, 0x9C, 0x8A, 0x87, 0x87, 0x89, 0x51, - 0x54, 0x47, 0x4B, 0x50, 0x4B, 0xCF, 0xD6, 0xDC, - 0xD5, 0x60, 0x54, 0x52, 0x48, 0x45, 0x40, 0x5A, - 0x45, 0x43, 0x47, 0xA7, 0x98, 0x9B, 0x95, 0x95, - 0x9A, 0x87, 0x98, 0x98, 0x8A, 0x86, 0x87, 0x9E, - 0x9B, 0x95, 0x9D, 0x9D, 0x99, 0x85, 0xA6, 0xFA, - 0xF2, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x22, - 0x21, 0x24, 0xFB, 0xF7, 0xBF, 0xA6, 0xA2, 0x99, - 0x97, 0x89, 0x86, 0x89, 0x9C, 0x96, 0x9E, 0x94, - 0x89, 0x99, 0x98, 0x89, 0x9E, 0x9B, 0x89, 0x8B, - 0x58, 0x4B, 0x4A, 0x52, 0x48, 0xCC, 0xD3, 0xDA, - 0xD3, 0x65, 0x4C, 0x58, 0x49, 0x3E, 0x2E, 0x4D, - 0x40, 0x41, 0x45, 0xA9, 0xA1, 0x9B, 0x9E, 0x9C, - 0x95, 0x8A, 0x94, 0x89, 0x96, 0x87, 0x9C, 0x9A, - 0x84, 0x9D, 0x9C, 0x9E, 0x9A, 0x9C, 0x9D, 0xBB, - 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x23, 0x23, - 0x24, 0xFC, 0xFC, 0xF6, 0xBF, 0xA6, 0x9F, 0x99, - 0x89, 0x95, 0x87, 0x94, 0x9D, 0x9E, 0x97, 0x9E, - 0x95, 0x9B, 0x89, 0x95, 0x95, 0x9B, 0x89, 0x87, - 0x5D, 0x56, 0x3E, 0x51, 0x3E, 0x60, 0xCF, 0xD3, - 0xD2, 0xCD, 0x5C, 0x49, 0x4B, 0x3E, 0x2C, 0x48, - 0x3E, 0x43, 0x3E, 0xA9, 0xA1, 0x9B, 0x97, 0x94, - 0x95, 0x9A, 0x9C, 0x87, 0x87, 0x9B, 0x9C, 0x95, - 0x9D, 0x89, 0x9A, 0x89, 0x9E, 0x9E, 0x8C, 0xA6, - 0x20, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x21, 0x21, 0x20, 0x40, - 0xFC, 0xFC, 0xFC, 0xEC, 0xBE, 0xA4, 0x9F, 0x99, - 0x95, 0x9F, 0xA0, 0x88, 0x9D, 0x8B, 0x97, 0x95, - 0x87, 0x95, 0x96, 0x95, 0x97, 0x94, 0x94, 0x98, - 0xD3, 0x4C, 0x47, 0x4D, 0x42, 0x4C, 0x60, 0xCC, - 0xCE, 0xD0, 0x65, 0x4B, 0x47, 0x44, 0x2B, 0x45, - 0x4B, 0x47, 0x49, 0xA7, 0xA1, 0x9A, 0x97, 0x89, - 0x95, 0x97, 0x97, 0x9E, 0x89, 0x95, 0x89, 0x9C, - 0x87, 0x95, 0x97, 0x99, 0x95, 0x99, 0x9F, 0xA4, - 0xC4, 0x21, 0x21, 0x23, 0x21, 0x23, 0x23, 0x23, - 0x23, 0x23, 0x23, 0x23, 0x21, 0x20, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xEA, 0xAA, 0xA6, 0xA2, 0x99, - 0x8B, 0x9A, 0x95, 0x9E, 0x9E, 0x9A, 0x94, 0x87, - 0x94, 0x94, 0x89, 0x94, 0x9B, 0x9B, 0xA7, 0xDC, - 0xDB, 0x65, 0x2E, 0x3E, 0x43, 0x44, 0x49, 0x58, - 0x63, 0xD3, 0xD3, 0x5E, 0x42, 0x42, 0x2D, 0x40, - 0x54, 0x4C, 0x4A, 0xA7, 0xA0, 0x99, 0x9B, 0x94, - 0xA0, 0x8A, 0x9B, 0x9D, 0x87, 0x95, 0x94, 0x8B, - 0x8A, 0x98, 0x9C, 0x8A, 0x9B, 0x99, 0xA2, 0xA6, - 0xBF, 0xEC, 0x2A, 0x20, 0x21, 0x23, 0x21, 0x20, - 0x20, 0x20, 0x20, 0x4C, 0xF9, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xEB, 0xAA, 0xA4, 0x9F, 0x9C, - 0x8B, 0x9B, 0x88, 0x84, 0x9E, 0x9D, 0x96, 0x94, - 0x94, 0x9A, 0x9B, 0x9B, 0xA4, 0xD5, 0xCD, 0xDE, - 0xF1, 0xDA, 0x4C, 0x2D, 0x41, 0x2B, 0x42, 0x4C, - 0x5E, 0xD4, 0xD7, 0xCD, 0x49, 0x2E, 0x2E, 0x41, - 0x5E, 0x57, 0xA7, 0xA6, 0xA7, 0xA4, 0xA2, 0x98, - 0x9D, 0x9C, 0xA1, 0x99, 0x9D, 0x88, 0x8B, 0x9C, - 0x8A, 0x9C, 0x9C, 0x94, 0x9C, 0x89, 0xA0, 0xA6, - 0xAA, 0xEB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFB, 0xE9, 0xAA, 0xA6, 0xA2, 0x8B, - 0x8B, 0x8A, 0x86, 0x9B, 0x9C, 0x98, 0xA0, 0x9B, - 0x9B, 0x84, 0xA7, 0xB4, 0x61, 0xD1, 0xD2, 0xE0, - 0xF1, 0xDC, 0x61, 0x2D, 0x2E, 0x3F, 0x56, 0x62, - 0x5D, 0xD4, 0xD9, 0xD3, 0x54, 0x41, 0x41, 0x44, - 0xCB, 0x60, 0x52, 0xA9, 0xA9, 0xA9, 0xA7, 0xA6, - 0xA6, 0xA4, 0xA4, 0xA2, 0xA2, 0x9D, 0x95, 0x89, - 0x9C, 0x8A, 0x9E, 0x9C, 0x8A, 0x9E, 0xA0, 0xA8, - 0xC0, 0xE9, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xE9, 0xAA, 0xA6, 0xA0, 0x99, - 0x9C, 0x8B, 0x9A, 0x84, 0x9B, 0x9B, 0x98, 0x98, - 0xA9, 0xB9, 0x49, 0x57, 0xCB, 0xD4, 0xD3, 0xF1, - 0xD8, 0xDA, 0xCE, 0x3F, 0x41, 0x4B, 0x5D, 0xCB, - 0x5E, 0xD6, 0xDB, 0xD6, 0x5D, 0x43, 0x3F, 0x49, - 0xD1, 0xCC, 0x4F, 0xDD, 0xC3, 0xBB, 0xBF, 0xAA, - 0xAA, 0xA9, 0xAA, 0xA8, 0xA8, 0xA6, 0xA6, 0xA2, - 0x9C, 0x9F, 0x9B, 0x9A, 0x9D, 0xA2, 0xA8, 0xAA, - 0xC1, 0xEA, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xEA, 0xC0, 0xAA, 0xA6, 0xA2, - 0xA2, 0x99, 0xA0, 0xA0, 0xA4, 0xA7, 0xA9, 0xC0, - 0x67, 0x49, 0x54, 0x60, 0xD0, 0xD4, 0xCC, 0xDF, - 0xD9, 0xD5, 0xD2, 0x3E, 0x47, 0x56, 0x60, 0xCD, - 0x5D, 0xD9, 0xD9, 0xD6, 0x61, 0x3F, 0x47, 0x52, - 0xD6, 0xD3, 0x62, 0x4D, 0x40, 0x4A, 0x57, 0xCA, - 0xC3, 0xC1, 0xC1, 0xC0, 0xBF, 0xBF, 0xAA, 0xAA, - 0xA6, 0xA4, 0xA4, 0xA4, 0xA6, 0xA8, 0xBE, 0xC1, - 0xC9, 0xEB, 0xFB, 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xEB, 0xC3, 0xC0, 0xAA, 0xA8, - 0xA6, 0xA6, 0xA6, 0xA9, 0xAA, 0xC0, 0xE8, 0xD0, - 0xD2, 0x4C, 0x5E, 0x64, 0xD0, 0xD1, 0x5F, 0xD9, - 0xD5, 0xD1, 0xD0, 0x48, 0x52, 0x5C, 0x64, 0xCD, - 0x5C, 0xDC, 0xD7, 0xD5, 0x62, 0x3F, 0x4C, 0x53, - 0xDA, 0xD7, 0xCE, 0x56, 0x40, 0x4B, 0x52, 0x56, - 0xCE, 0xDF, 0x6A, 0xEB, 0xE9, 0xC9, 0xC3, 0xC0, - 0xC0, 0xBF, 0xBE, 0xAA, 0xBF, 0xC0, 0xC3, 0xC9, - 0xEA, 0xF6, 0xEE, 0x58, 0x57, 0x5E, 0xD6, 0xD0, - 0xD2, 0x61, 0xCB, 0xD6, 0xD6, 0xD4, 0xDF, 0xF3, - 0xF2, 0xDD, 0xD7, 0xEB, 0xC9, 0xC1, 0xC0, 0xBF, - 0xAA, 0xAA, 0xAA, 0xBE, 0xC3, 0xF0, 0xD2, 0xD2, - 0xD2, 0x51, 0x62, 0xCC, 0xD0, 0xCC, 0x61, 0xD3, - 0xCF, 0xCE, 0xD2, 0x48, 0x5A, 0x61, 0xCC, 0xCE, - 0x5F, 0xD9, 0xD5, 0xD1, 0x63, 0x44, 0x56, 0x56, - 0xDC, 0xD9, 0xD4, 0x5E, 0x42, 0x4A, 0x4C, 0x57, - 0x5D, 0xD8, 0xE0, 0xD8, 0xDC, 0xCB, 0x66, 0xEC, - 0xE8, 0xC3, 0xC3, 0xC3, 0xC3, 0xC9, 0xE8, 0xEA, - 0xF6, 0x50, 0x3E, 0x58, 0x57, 0x5A, 0xD6, 0xD4, - 0xCC, 0x4B, 0x53, 0x5C, 0x64, 0xD1, 0xDF, 0xF3, - 0xF1, 0xDE, 0xD9, 0xF6, 0xEB, 0xC9, 0xC1, 0xC1, - 0xC0, 0xC0, 0xC1, 0xC9, 0xF0, 0xD6, 0xCD, 0xD6, - 0xD3, 0x53, 0xCB, 0xCF, 0xCD, 0x5F, 0x5F, 0xCE, - 0xCF, 0xCD, 0xD0, 0x47, 0x5F, 0xCB, 0xCE, 0xCD, - 0x63, 0xD6, 0xD3, 0xD1, 0x63, 0x3F, 0x58, 0x58, - 0xDB, 0xDC, 0xDA, 0x65, 0x3E, 0x49, 0x49, 0x4D, - 0x49, 0xDC, 0xDF, 0xE0, 0xDE, 0xD5, 0x47, 0x47, - 0x46, 0x6B, 0xEB, 0xEA, 0xE9, 0xEA, 0xEB, 0xF6, - 0xD0, 0x57, 0x57, 0x47, 0x47, 0x5B, 0xD4, 0xD4, - 0xCD, 0x44, 0x3E, 0x4B, 0x50, 0x4B, 0x51, 0xD5, - 0xDB, 0xD8, 0xDE, 0x4B, 0xF6, 0xF6, 0xEA, 0xE9, - 0xE8, 0xEA, 0xEB, 0x67, 0x5E, 0xCC, 0xD6, 0xDC, - 0xD5, 0x58, 0xCE, 0xCE, 0x62, 0x50, 0xCC, 0xD3, - 0xD2, 0xCD, 0xCD, 0x4B, 0x64, 0xCE, 0xCE, 0x64, - 0xCC, 0xD3, 0xD2, 0xD2, 0x61, 0x47, 0x5D, 0x5C, - 0xDD, 0xDD, 0xD9, 0xD1, 0x4C, 0x47, 0x49, 0x4A, - 0x4B, 0xD1, 0xD8, 0xE0, 0xDF, 0xDD, 0x5D, 0x4A, - 0x48, 0x52, 0x51, 0x3F, 0xF6, 0xEC, 0xE0, 0xE0, - 0xD3, 0x5E, 0x5F, 0x50, 0x4B, 0x50, 0xCB, 0xCE, - 0x64, 0x45, 0x4C, 0x57, 0x57, 0x58, 0x52, 0xD6, - 0xD3, 0xDE, 0xDF, 0xD1, 0x3E, 0x4B, 0xF6, 0xF6, - 0xEC, 0x66, 0x53, 0x43, 0x56, 0xD1, 0xD9, 0xDE, - 0xD4, 0x5E, 0xCE, 0xCC, 0x5B, 0x2C, 0xD4, 0xD5, - 0xD2, 0xD0, 0x63, 0x5D, 0xCD, 0xD0, 0xCD, 0x5E, - 0xD0, 0xCF, 0xCE, 0xD2, 0x5E, 0x50, 0x60, 0x5D, - 0xDE, 0xDD, 0xDC, 0xD7, 0x5D, 0x45, 0x47, 0x3E, - 0x4B, 0x5E, 0xDE, 0xDF, 0xE0, 0xD8, 0xCF, 0x3E, - 0x45, 0x51, 0x58, 0x42, 0xCB, 0xDA, 0xDE, 0xD8, - 0xD2, 0x61, 0xCC, 0xCF, 0xD6, 0xDA, 0xDA, 0xD5, - 0xD0, 0x50, 0x44, 0x57, 0x57, 0x58, 0x45, 0xD1, - 0xD1, 0xD7, 0xDF, 0xDF, 0xD7, 0xCF, 0x64, 0x60, - 0xCE, 0xCE, 0xCE, 0x63, 0xCF, 0xDA, 0xDE, 0xD9, - 0xCF, 0x63, 0xCD, 0x63, 0x4D, 0x4B, 0xD6, 0xD5, - 0xCE, 0xD3, 0x60, 0xCB, 0xD0, 0xD0, 0x65, 0x47, - 0xD0, 0xCC, 0xCC, 0xD1, 0x59, 0x5D, 0x63, 0x5E, - 0xDD, 0xDD, 0xDE, 0xDC, 0xCB, 0x40, 0x48, 0x45, - 0x3E, 0x3E, 0xD9, 0xDF, 0xE0, 0xDF, 0xDA, 0x51, - 0x4C, 0x48, 0x56, 0x4C, 0x5B, 0xD2, 0xDA, 0xDB, - 0xCB, 0x5F, 0xD0, 0xCC, 0xDC, 0xF0, 0xF3, 0xE0, - 0xDD, 0xCC, 0x41, 0x50, 0x57, 0x57, 0x4B, 0x5D, - 0xD3, 0xD1, 0xDE, 0xDF, 0xDE, 0xD7, 0xD0, 0xD0, - 0xD5, 0xD6, 0xD6, 0xCE, 0xD7, 0xDC, 0xDA, 0xD5, - 0x60, 0x63, 0x64, 0x5E, 0x47, 0x61, 0xD5, 0xD2, - 0xCF, 0xD0, 0x59, 0xCD, 0xD1, 0xCF, 0x61, 0x4D, - 0xCC, 0xCE, 0xCD, 0xD0, 0x52, 0x61, 0x64, 0x60, - 0xDA, 0xDE, 0xDE, 0xDD, 0xD1, 0x4B, 0x4A, 0x45, - 0x3E, 0x41, 0xCD, 0xDE, 0xE0, 0xF1, 0xDE, 0x63, - 0x4A, 0x4A, 0x4A, 0x4B, 0x50, 0xCB, 0xD4, 0xD7, - 0x5E, 0x54, 0x62, 0xD3, 0xD4, 0xF0, 0xF3, 0xF3, - 0xF2, 0xDE, 0x61, 0x40, 0x49, 0x56, 0x4D, 0x3E, - 0x4B, 0xCE, 0xD9, 0xD8, 0xD9, 0xD5, 0xCF, 0xD2, - 0xD6, 0xD6, 0xD1, 0xD1, 0xD7, 0xD5, 0xCF, 0xD0, - 0x54, 0x64, 0x63, 0x56, 0x2C, 0xCB, 0xD1, 0xCC, - 0xD3, 0xCD, 0x54, 0xCF, 0xD1, 0xCE, 0x5E, 0x5C, - 0xCE, 0xCE, 0xCE, 0xCB, 0x4B, 0x63, 0xCC, 0x61, - 0xD4, 0xDC, 0xDE, 0xDE, 0xDA, 0x5D, 0x45, 0x45, - 0x48, 0x3F, 0x52, 0xD9, 0xD8, 0xDF, 0xDF, 0xD2, - 0x52, 0x4B, 0x3E, 0x2E, 0x47, 0x60, 0xCF, 0xD3, - 0x59, 0x48, 0x50, 0x5E, 0xCC, 0xDE, 0xF2, 0xF2, - 0xF3, 0xF3, 0xDD, 0x5D, 0x3E, 0x48, 0x47, 0x47, - 0x58, 0xD1, 0xDA, 0xDA, 0xD5, 0xD1, 0xCD, 0xD2, - 0xD3, 0xCF, 0xD3, 0xD1, 0xCD, 0xD3, 0xD2, 0x5E, - 0x52, 0x64, 0x60, 0x4B, 0x45, 0x61, 0xCD, 0xD3, - 0xD3, 0x64, 0x61, 0xD0, 0xD0, 0x64, 0x45, 0x63, - 0xD0, 0xCE, 0xD0, 0x60, 0x56, 0xCB, 0xCC, 0x62, - 0xCE, 0xDA, 0xDE, 0xD8, 0xDD, 0xCC, 0x45, 0x49, - 0x3E, 0x47, 0x42, 0xD1, 0xDC, 0xD8, 0xD8, 0xD3, - 0x5D, 0x4C, 0x49, 0x3F, 0x47, 0x59, 0xCD, 0xCF, - 0x59, 0x2E, 0x48, 0x47, 0x52, 0x63, 0xF0, 0xF2, - 0xF3, 0xF3, 0xF2, 0xDA, 0x52, 0x4B, 0x52, 0x58, - 0x5E, 0x63, 0xD0, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, - 0xCF, 0x65, 0x61, 0xD6, 0xD6, 0xD6, 0xCB, 0x4B, - 0x61, 0x62, 0x5D, 0x43, 0x4B, 0x61, 0xD0, 0xD4, - 0xD1, 0x61, 0xCE, 0xD2, 0xCD, 0x5E, 0x4A, 0xCE, - 0xD0, 0xCC, 0xD0, 0x59, 0x61, 0xCC, 0xCC, 0x62, - 0xD1, 0xD5, 0xDE, 0xD8, 0xDD, 0xCF, 0x4B, 0x4A, - 0x45, 0x3E, 0x2D, 0xCB, 0xDC, 0xDE, 0xD8, 0xD5, - 0x60, 0x54, 0x51, 0x4C, 0x4D, 0x5C, 0xCC, 0xCE, - 0x5A, 0x2C, 0x50, 0x53, 0x3E, 0x59, 0xD8, 0xF3, - 0xF2, 0xF3, 0xF3, 0xE0, 0x5E, 0x4A, 0x4C, 0x53, - 0x5E, 0x63, 0xCC, 0xCC, 0xCC, 0xCD, 0xCF, 0xD3, - 0x62, 0x53, 0xD6, 0xD6, 0xD6, 0xD6, 0x5B, 0x48, - 0x64, 0x63, 0x59, 0x44, 0x57, 0x63, 0xD2, 0xD3, - 0xD0, 0x5E, 0xD0, 0xD1, 0xCB, 0x58, 0x4C, 0xCF, - 0xCF, 0xCE, 0xCE, 0x57, 0x63, 0xCC, 0xCD, 0x57, + 0x53, 0x3D, 0x40, 0x73, 0x71, 0x3B, 0x3B, 0x71, + 0x3D, 0x54, 0x73, 0x40, 0x73, 0x3D, 0x27, 0x71, + 0x40, 0x6A, 0x7A, 0x3D, 0x3B, 0x30, 0x30, 0x62, + 0x40, 0x6A, 0x21, 0x62, 0x78, 0x29, 0x49, 0x30, + 0x6F, 0x27, 0x54, 0x3D, 0x62, 0x27, 0x54, 0x66, + 0x71, 0x6F, 0x6F, 0x6F, 0x78, 0x53, 0x29, 0x29, + 0x53, 0x70, 0x53, 0x3D, 0x40, 0x73, 0x71, 0x3B, + 0x3B, 0x71, 0x3D, 0x54, 0x73, 0x40, 0x73, 0x3D, + 0x27, 0x71, 0x40, 0x6A, 0x7A, 0x3D, 0x3B, 0x30, + 0x30, 0x62, 0x40, 0x6A, 0x21, 0x62, 0x78, 0x29, + 0x71, 0x4C, 0x6A, 0x40, 0x71, 0x62, 0x27, 0x71, + 0x54, 0x66, 0x73, 0x40, 0x73, 0x3D, 0x3D, 0x40, + 0x6A, 0x77, 0x7A, 0x71, 0x30, 0x69, 0x6F, 0x71, + 0x54, 0x73, 0x3D, 0x30, 0x49, 0x30, 0x3B, 0x62, + 0x27, 0x3D, 0x54, 0x3D, 0x71, 0x71, 0x27, 0x62, + 0x62, 0x3B, 0x62, 0x27, 0x3B, 0x69, 0x69, 0x69, + 0x69, 0x30, 0x71, 0x4C, 0x6A, 0x40, 0x71, 0x62, + 0x27, 0x71, 0x54, 0x66, 0x73, 0x40, 0x73, 0x3D, + 0x3D, 0x40, 0x6A, 0x77, 0x7A, 0x71, 0x30, 0x69, + 0x6F, 0x71, 0x54, 0x73, 0x3D, 0x30, 0x49, 0x30, + 0x40, 0x34, 0x34, 0x40, 0x27, 0x6F, 0x62, 0x3D, + 0x54, 0x66, 0x40, 0x73, 0x66, 0x66, 0x2D, 0x5D, + 0x7A, 0x5D, 0x3D, 0x6F, 0x69, 0x69, 0x30, 0x27, + 0x27, 0x27, 0x62, 0x6F, 0x30, 0x3B, 0x62, 0x27, + 0x3D, 0x54, 0x2D, 0x54, 0x27, 0x71, 0x3D, 0x27, + 0x62, 0x62, 0x62, 0x62, 0x3B, 0x30, 0x6F, 0x6F, + 0x6F, 0x71, 0x40, 0x34, 0x34, 0x40, 0x27, 0x6F, + 0x62, 0x3D, 0x54, 0x66, 0x40, 0x73, 0x66, 0x66, + 0x2D, 0x5D, 0x7A, 0x5D, 0x3D, 0x6F, 0x69, 0x69, + 0x30, 0x27, 0x27, 0x27, 0x62, 0x6F, 0x30, 0x6F, + 0x4C, 0x77, 0x6A, 0x2D, 0x3B, 0x6F, 0x3B, 0x71, + 0x54, 0x66, 0x2D, 0x73, 0x66, 0x54, 0x73, 0x73, + 0x73, 0x3D, 0x62, 0x6F, 0x69, 0x30, 0x6F, 0x27, + 0x3D, 0x3D, 0x27, 0x62, 0x62, 0x62, 0x27, 0x71, + 0x54, 0x73, 0x73, 0x54, 0x3D, 0x3D, 0x20, 0x20, + 0x20, 0x20, 0x3B, 0x62, 0x3B, 0x62, 0x71, 0x71, + 0x3D, 0x2D, 0x4C, 0x77, 0x6A, 0x66, 0x3B, 0x6F, + 0x3B, 0x71, 0x54, 0x66, 0x2D, 0x73, 0x66, 0x54, + 0x73, 0x73, 0x73, 0x3D, 0x62, 0x6F, 0x69, 0x30, + 0x6F, 0x27, 0x3D, 0x3D, 0x27, 0x62, 0x62, 0x27, + 0x4C, 0x4C, 0x5D, 0x71, 0x30, 0x30, 0x3B, 0x27, + 0x54, 0x66, 0x73, 0x66, 0x66, 0x54, 0x54, 0x3D, + 0x27, 0x62, 0x6F, 0x30, 0x30, 0x6F, 0x27, 0x3D, + 0x54, 0x54, 0x3D, 0x71, 0x3D, 0x71, 0x3D, 0x3D, + 0x66, 0x73, 0x66, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, 0x3D, + 0x66, 0x40, 0x4C, 0x4C, 0x5D, 0x71, 0x30, 0x30, + 0x3B, 0x27, 0x54, 0x66, 0x73, 0x66, 0x66, 0x54, + 0x54, 0x3D, 0x27, 0x62, 0x6F, 0x30, 0x30, 0x6F, + 0x27, 0x3D, 0x54, 0x54, 0x3D, 0x71, 0x71, 0x71, + 0x5D, 0x5D, 0x54, 0x62, 0x69, 0x69, 0x3B, 0x3D, + 0x66, 0x40, 0x73, 0x66, 0x54, 0x54, 0x71, 0x62, + 0x3B, 0x6F, 0x6F, 0x6F, 0x3B, 0x27, 0x3D, 0x2D, + 0x66, 0x54, 0x71, 0x71, 0x27, 0x71, 0x71, 0x3D, + 0x3D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, + 0x73, 0x40, 0x5D, 0x5D, 0x54, 0x62, 0x69, 0x69, + 0x3B, 0x3D, 0x66, 0x40, 0x73, 0x66, 0x54, 0x54, + 0x71, 0x62, 0x3B, 0x6F, 0x6F, 0x6F, 0x3B, 0x27, + 0x3D, 0x66, 0x66, 0x54, 0x71, 0x71, 0x27, 0x71, + 0x66, 0x73, 0x3D, 0x27, 0x6F, 0x6F, 0x62, 0x54, + 0x40, 0x21, 0x5D, 0x73, 0x3D, 0x27, 0x62, 0x6F, + 0x6F, 0x3B, 0x3B, 0x62, 0x27, 0x71, 0x3D, 0x3D, + 0x3D, 0x71, 0x62, 0x62, 0x62, 0x27, 0x27, 0x71, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x4F, 0x46, 0x2A, 0x20, 0x20, + 0x20, 0x73, 0x66, 0x73, 0x3D, 0x27, 0x6F, 0x6F, + 0x62, 0x54, 0x40, 0x21, 0x5D, 0x73, 0x3D, 0x27, + 0x62, 0x6F, 0x6F, 0x3B, 0x3B, 0x62, 0x27, 0x71, + 0x3D, 0x3D, 0x3D, 0x71, 0x62, 0x27, 0x62, 0x27, + 0x3D, 0x40, 0x66, 0x27, 0x3B, 0x3B, 0x71, 0x66, + 0x7A, 0x21, 0x40, 0x54, 0x27, 0x3B, 0x6F, 0x3B, + 0x62, 0x62, 0x27, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, + 0x6D, 0x6D, 0x38, 0x6D, 0x38, 0x6D, 0x38, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x38, + 0x38, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, + 0x6F, 0x3B, 0x62, 0x62, 0x27, 0x27, 0x27, 0x27, + 0x71, 0x3D, 0x71, 0x71, 0x71, 0x71, 0x3D, 0x3D, + 0x27, 0x40, 0x54, 0x62, 0x30, 0x30, 0x27, 0x40, + 0x7A, 0x5D, 0x54, 0x3D, 0x62, 0x30, 0x30, 0x3B, + 0x71, 0x3D, 0x71, 0x38, 0x6D, 0x6D, 0x6D, 0x6D, + 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, + 0x6D, 0x6D, 0x38, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, + 0x30, 0x3B, 0x71, 0x3D, 0x71, 0x27, 0x71, 0x71, + 0x3D, 0x66, 0x73, 0x40, 0x73, 0x66, 0x2D, 0x66, + 0x30, 0x66, 0x71, 0x6F, 0x69, 0x6F, 0x54, 0x21, + 0x7A, 0x66, 0x3D, 0x3B, 0x6F, 0x6F, 0x3B, 0x71, + 0x54, 0x66, 0x3D, 0x4C, 0x44, 0x51, 0x44, 0x44, + 0x44, 0x38, 0x44, 0x38, 0x44, 0x38, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, + 0x38, 0x6D, 0x6D, 0x38, 0x6D, 0x38, 0x38, 0x51, + 0x3B, 0x71, 0x54, 0x66, 0x3D, 0x3D, 0x3D, 0x2D, + 0x40, 0x40, 0x5D, 0x40, 0x73, 0x66, 0x66, 0x3D, + 0x69, 0x27, 0x3B, 0x30, 0x69, 0x3B, 0x73, 0x7A, + 0x21, 0x3D, 0x62, 0x3B, 0x6F, 0x3B, 0x27, 0x66, + 0x73, 0x73, 0x54, 0x4E, 0x44, 0x26, 0x26, 0x5B, + 0x26, 0x44, 0x44, 0x44, 0x44, 0x44, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x38, 0x38, 0x38, 0x38, 0x38, + 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x6D, 0x26, + 0x27, 0x66, 0x73, 0x73, 0x66, 0x2D, 0x66, 0x2D, + 0x66, 0x54, 0x54, 0x71, 0x27, 0x27, 0x27, 0x62, + 0x69, 0x3B, 0x6F, 0x6F, 0x62, 0x54, 0x40, 0x21, + 0x73, 0x27, 0x3B, 0x3B, 0x71, 0x54, 0x66, 0x66, + 0x73, 0x73, 0x2D, 0x37, 0x44, 0x51, 0x38, 0x38, + 0x44, 0x6D, 0x38, 0x6D, 0x38, 0x38, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x38, 0x6D, 0x38, 0x6D, + 0x38, 0x6D, 0x6D, 0x6D, 0x38, 0x38, 0x6D, 0x70, + 0x2D, 0x66, 0x73, 0x66, 0x66, 0x54, 0x54, 0x54, + 0x27, 0x62, 0x6F, 0x6F, 0x6F, 0x6F, 0x3B, 0x62, + 0x3B, 0x27, 0x27, 0x27, 0x3D, 0x40, 0x21, 0x40, + 0x54, 0x62, 0x3B, 0x71, 0x73, 0x5D, 0x40, 0x73, + 0x66, 0x66, 0x2D, 0x33, 0x6D, 0x26, 0x44, 0x4F, + 0x5E, 0x5E, 0x37, 0x5E, 0x37, 0x46, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x44, 0x26, 0x26, 0x44, + 0x70, 0x38, 0x26, 0x38, 0x38, 0x44, 0x6D, 0x53, + 0x40, 0x73, 0x66, 0x2D, 0x66, 0x73, 0x66, 0x54, + 0x27, 0x6F, 0x30, 0x69, 0x30, 0x6F, 0x62, 0x62, + 0x62, 0x71, 0x3D, 0x54, 0x73, 0x5D, 0x5D, 0x66, + 0x27, 0x62, 0x71, 0x54, 0x5D, 0x5D, 0x66, 0x3D, + 0x3D, 0x73, 0x40, 0x37, 0x44, 0x44, 0x51, 0x20, + 0x6F, 0x6F, 0x62, 0x27, 0x27, 0x20, 0x20, 0x20, + 0x4F, 0x20, 0x2A, 0x2A, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x71, 0x3D, 0x73, 0x5D, + 0x40, 0x54, 0x27, 0x3B, 0x2D, 0x6D, 0x38, 0x3C, + 0x66, 0x3D, 0x54, 0x66, 0x40, 0x40, 0x73, 0x54, + 0x62, 0x6F, 0x30, 0x6F, 0x62, 0x71, 0x71, 0x71, + 0x62, 0x3D, 0x66, 0x73, 0x40, 0x5D, 0x73, 0x71, + 0x62, 0x27, 0x54, 0x73, 0x5D, 0x73, 0x27, 0x62, + 0x71, 0x40, 0x21, 0x37, 0x26, 0x51, 0x44, 0x4E, + 0x3B, 0x71, 0x2D, 0x73, 0x2D, 0x20, 0x20, 0x20, + 0x35, 0x73, 0x77, 0x4F, 0x6B, 0x20, 0x20, 0x4F, + 0x20, 0x73, 0x73, 0x73, 0x58, 0x20, 0x77, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2D, 0x40, 0x40, 0x5D, + 0x73, 0x71, 0x62, 0x27, 0x71, 0x38, 0x44, 0x49, + 0x27, 0x62, 0x3D, 0x40, 0x21, 0x40, 0x54, 0x27, + 0x3B, 0x6F, 0x3B, 0x71, 0x54, 0x66, 0x66, 0x3D, + 0x62, 0x54, 0x40, 0x21, 0x7A, 0x40, 0x3D, 0x62, + 0x62, 0x71, 0x66, 0x40, 0x66, 0x71, 0x62, 0x3B, + 0x54, 0x5D, 0x73, 0x23, 0x51, 0x26, 0x26, 0x30, + 0x3B, 0x3D, 0x66, 0x73, 0x66, 0x20, 0x20, 0x4F, + 0x58, 0x7C, 0x62, 0x34, 0x57, 0x20, 0x20, 0x20, + 0x73, 0x58, 0x49, 0x7C, 0x79, 0x73, 0x20, 0x4F, + 0x20, 0x20, 0x20, 0x20, 0x40, 0x21, 0x7A, 0x40, + 0x3D, 0x27, 0x62, 0x71, 0x49, 0x44, 0x6D, 0x78, + 0x62, 0x3B, 0x3D, 0x5D, 0x40, 0x3D, 0x3B, 0x69, + 0x49, 0x49, 0x3B, 0x71, 0x66, 0x73, 0x66, 0x54, + 0x27, 0x66, 0x5D, 0x7A, 0x21, 0x73, 0x71, 0x62, + 0x27, 0x54, 0x73, 0x66, 0x3D, 0x27, 0x62, 0x62, + 0x54, 0x73, 0x71, 0x37, 0x26, 0x5B, 0x44, 0x5B, + 0x27, 0x54, 0x40, 0x2D, 0x54, 0x20, 0x20, 0x77, + 0x78, 0x6D, 0x6D, 0x6D, 0x20, 0x20, 0x20, 0x20, + 0x79, 0x38, 0x38, 0x6D, 0x6D, 0x69, 0x2D, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7A, 0x7A, 0x40, + 0x71, 0x62, 0x27, 0x54, 0x79, 0x26, 0x38, 0x49, + 0x3B, 0x27, 0x54, 0x2D, 0x71, 0x6F, 0x49, 0x53, + 0x78, 0x30, 0x27, 0x54, 0x40, 0x73, 0x54, 0x3D, + 0x71, 0x66, 0x5D, 0x7A, 0x21, 0x66, 0x27, 0x3B, + 0x27, 0x66, 0x73, 0x54, 0x27, 0x27, 0x27, 0x3D, + 0x3D, 0x71, 0x6F, 0x5E, 0x26, 0x79, 0x26, 0x78, + 0x5D, 0x4C, 0x4C, 0x21, 0x73, 0x20, 0x20, 0x2D, + 0x35, 0x5C, 0x46, 0x38, 0x77, 0x20, 0x4F, 0x20, + 0x51, 0x6D, 0x20, 0x2D, 0x20, 0x6D, 0x6D, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7A, 0x21, 0x54, + 0x62, 0x3B, 0x27, 0x2D, 0x29, 0x26, 0x44, 0x70, + 0x27, 0x3D, 0x3D, 0x71, 0x6F, 0x78, 0x53, 0x29, + 0x69, 0x3D, 0x21, 0x4C, 0x4C, 0x5D, 0x66, 0x54, + 0x54, 0x73, 0x21, 0x6A, 0x21, 0x3D, 0x3B, 0x3B, + 0x71, 0x66, 0x66, 0x3D, 0x27, 0x27, 0x71, 0x3D, + 0x27, 0x6F, 0x49, 0x7E, 0x61, 0x5B, 0x44, 0x26, + 0x34, 0x34, 0x6A, 0x21, 0x73, 0x66, 0x20, 0x32, + 0x20, 0x20, 0x2D, 0x6D, 0x77, 0x2A, 0x37, 0x20, + 0x6D, 0x20, 0x20, 0x20, 0x7E, 0x38, 0x38, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x4C, 0x21, 0x3D, + 0x3B, 0x3B, 0x71, 0x73, 0x69, 0x44, 0x38, 0x71, + 0x27, 0x3D, 0x71, 0x3B, 0x49, 0x29, 0x29, 0x6F, + 0x54, 0x7A, 0x34, 0x77, 0x6A, 0x21, 0x66, 0x66, + 0x4C, 0x7A, 0x21, 0x4C, 0x21, 0x71, 0x3B, 0x3B, + 0x54, 0x73, 0x3D, 0x62, 0x3B, 0x62, 0x62, 0x62, + 0x62, 0x69, 0x29, 0x2B, 0x79, 0x79, 0x26, 0x38, + 0x47, 0x6A, 0x5D, 0x54, 0x27, 0x3D, 0x20, 0x29, + 0x57, 0x20, 0x2D, 0x61, 0x37, 0x5C, 0x20, 0x20, + 0x29, 0x20, 0x20, 0x20, 0x20, 0x29, 0x6D, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x6A, 0x21, 0x3D, + 0x3B, 0x3B, 0x54, 0x66, 0x78, 0x26, 0x26, 0x30, + 0x62, 0x62, 0x3B, 0x69, 0x78, 0x78, 0x6F, 0x66, + 0x6A, 0x64, 0x47, 0x4C, 0x5D, 0x54, 0x71, 0x71, + 0x4C, 0x5D, 0x5D, 0x21, 0x5D, 0x71, 0x3B, 0x62, + 0x54, 0x66, 0x27, 0x3B, 0x6F, 0x6F, 0x3B, 0x3B, + 0x6F, 0x49, 0x78, 0x23, 0x4A, 0x79, 0x4A, 0x6D, + 0x34, 0x21, 0x66, 0x3D, 0x62, 0x27, 0x20, 0x20, + 0x38, 0x20, 0x20, 0x52, 0x3A, 0x52, 0x63, 0x36, + 0x48, 0x4D, 0x20, 0x20, 0x20, 0x6D, 0x38, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x5D, 0x3D, + 0x3B, 0x62, 0x2D, 0x66, 0x79, 0x26, 0x51, 0x54, + 0x3B, 0x62, 0x6F, 0x49, 0x78, 0x30, 0x66, 0x34, + 0x2B, 0x2B, 0x34, 0x21, 0x66, 0x71, 0x62, 0x62, + 0x3D, 0x3D, 0x54, 0x5D, 0x40, 0x71, 0x3B, 0x3B, + 0x54, 0x54, 0x3B, 0x69, 0x30, 0x6F, 0x3B, 0x27, + 0x6F, 0x78, 0x78, 0x46, 0x26, 0x5B, 0x4A, 0x51, + 0x5D, 0x54, 0x71, 0x62, 0x3B, 0x3B, 0x20, 0x20, + 0x6D, 0x20, 0x72, 0x55, 0x3A, 0x74, 0x41, 0x39, + 0x45, 0x5A, 0x24, 0x2F, 0x6D, 0x38, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0x40, 0x27, + 0x3B, 0x62, 0x3D, 0x54, 0x30, 0x5B, 0x26, 0x27, + 0x3B, 0x62, 0x6F, 0x78, 0x78, 0x3B, 0x21, 0x64, + 0x7B, 0x77, 0x5D, 0x54, 0x71, 0x62, 0x62, 0x3B, + 0x53, 0x62, 0x71, 0x73, 0x73, 0x27, 0x6F, 0x3B, + 0x3D, 0x3D, 0x3B, 0x49, 0x30, 0x62, 0x27, 0x27, + 0x6F, 0x78, 0x49, 0x46, 0x79, 0x53, 0x4A, 0x38, + 0x2D, 0x71, 0x62, 0x6F, 0x6F, 0x6F, 0x20, 0x20, + 0x20, 0x24, 0x52, 0x3A, 0x22, 0x41, 0x5A, 0x45, + 0x45, 0x63, 0x41, 0x22, 0x36, 0x28, 0x4D, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x73, 0x27, + 0x6F, 0x3B, 0x3D, 0x3D, 0x49, 0x51, 0x61, 0x69, + 0x27, 0x27, 0x30, 0x78, 0x69, 0x71, 0x4C, 0x64, + 0x34, 0x5D, 0x66, 0x71, 0x62, 0x6F, 0x6F, 0x6F, + 0x79, 0x27, 0x66, 0x73, 0x66, 0x62, 0x6F, 0x6F, + 0x3D, 0x3D, 0x3B, 0x30, 0x30, 0x62, 0x3D, 0x71, + 0x6F, 0x69, 0x6F, 0x23, 0x5B, 0x4A, 0x4A, 0x38, + 0x66, 0x3D, 0x3B, 0x6F, 0x6F, 0x3B, 0x20, 0x4D, + 0x43, 0x48, 0x39, 0x55, 0x22, 0x22, 0x41, 0x45, + 0x45, 0x45, 0x45, 0x41, 0x22, 0x45, 0x5A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x2D, 0x62, + 0x30, 0x3B, 0x3D, 0x3D, 0x27, 0x26, 0x61, 0x27, + 0x3D, 0x27, 0x6F, 0x69, 0x6F, 0x54, 0x4C, 0x34, + 0x7A, 0x40, 0x66, 0x54, 0x62, 0x30, 0x6F, 0x3B, + 0x53, 0x7A, 0x7A, 0x73, 0x54, 0x62, 0x30, 0x3B, + 0x3D, 0x3D, 0x62, 0x30, 0x30, 0x3B, 0x71, 0x62, + 0x30, 0x30, 0x27, 0x7E, 0x70, 0x70, 0x3C, 0x6D, + 0x21, 0x66, 0x3B, 0x69, 0x3B, 0x71, 0x20, 0x72, + 0x24, 0x67, 0x22, 0x22, 0x36, 0x36, 0x45, 0x45, + 0x45, 0x22, 0x41, 0x41, 0x3F, 0x42, 0x52, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x54, 0x62, + 0x30, 0x3B, 0x3D, 0x54, 0x62, 0x26, 0x79, 0x3B, + 0x71, 0x27, 0x30, 0x30, 0x27, 0x5D, 0x4C, 0x6A, + 0x7A, 0x7A, 0x5D, 0x54, 0x3B, 0x30, 0x6F, 0x71, + 0x27, 0x64, 0x77, 0x40, 0x71, 0x62, 0x3B, 0x62, + 0x3D, 0x54, 0x27, 0x3B, 0x6F, 0x3B, 0x27, 0x27, + 0x62, 0x3B, 0x3D, 0x23, 0x26, 0x5B, 0x3C, 0x38, + 0x5D, 0x71, 0x69, 0x69, 0x62, 0x54, 0x20, 0x50, + 0x5F, 0x48, 0x3A, 0x55, 0x41, 0x63, 0x70, 0x22, + 0x22, 0x45, 0x3F, 0x42, 0x48, 0x48, 0x45, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, 0x62, + 0x3B, 0x62, 0x3D, 0x54, 0x30, 0x26, 0x61, 0x71, + 0x27, 0x27, 0x62, 0x62, 0x54, 0x5D, 0x7A, 0x4C, + 0x4C, 0x4C, 0x5D, 0x71, 0x30, 0x69, 0x62, 0x54, + 0x7A, 0x64, 0x34, 0x73, 0x71, 0x27, 0x62, 0x62, + 0x71, 0x54, 0x71, 0x3B, 0x6F, 0x3B, 0x71, 0x3D, + 0x3D, 0x71, 0x2D, 0x7E, 0x79, 0x53, 0x3C, 0x38, + 0x3D, 0x6F, 0x78, 0x49, 0x71, 0x73, 0x20, 0x20, + 0x25, 0x3F, 0x3A, 0x41, 0x5A, 0x45, 0x41, 0x45, + 0x3F, 0x50, 0x24, 0x28, 0x28, 0x3F, 0x4D, 0x20, + 0x20, 0x77, 0x77, 0x20, 0x20, 0x20, 0x71, 0x27, + 0x62, 0x62, 0x71, 0x54, 0x78, 0x79, 0x38, 0x71, + 0x71, 0x3D, 0x71, 0x71, 0x66, 0x5D, 0x5D, 0x21, + 0x21, 0x21, 0x54, 0x30, 0x78, 0x69, 0x27, 0x66, + 0x7A, 0x4C, 0x40, 0x3D, 0x27, 0x62, 0x62, 0x3B, + 0x62, 0x71, 0x62, 0x30, 0x69, 0x6F, 0x71, 0x54, + 0x3D, 0x3D, 0x54, 0x23, 0x4A, 0x3C, 0x3C, 0x38, + 0x6F, 0x29, 0x53, 0x30, 0x54, 0x66, 0x20, 0x57, + 0x7C, 0x25, 0x4B, 0x3F, 0x43, 0x4B, 0x4B, 0x2C, + 0x2E, 0x2E, 0x2E, 0x24, 0x58, 0x58, 0x78, 0x20, + 0x20, 0x20, 0x34, 0x77, 0x20, 0x20, 0x20, 0x62, + 0x62, 0x3B, 0x62, 0x71, 0x29, 0x79, 0x61, 0x27, + 0x27, 0x54, 0x54, 0x71, 0x54, 0x54, 0x66, 0x54, + 0x66, 0x71, 0x6F, 0x78, 0x53, 0x69, 0x54, 0x73, + 0x73, 0x73, 0x3D, 0x27, 0x27, 0x27, 0x62, 0x3B, + 0x62, 0x71, 0x71, 0x3B, 0x6F, 0x3B, 0x27, 0x54, + 0x66, 0x3D, 0x3D, 0x37, 0x53, 0x78, 0x49, 0x38, + 0x78, 0x29, 0x78, 0x3B, 0x66, 0x73, 0x20, 0x20, + 0x7C, 0x69, 0x68, 0x68, 0x52, 0x2E, 0x42, 0x67, + 0x5F, 0x45, 0x2C, 0x69, 0x78, 0x32, 0x78, 0x78, + 0x20, 0x20, 0x34, 0x77, 0x35, 0x20, 0x20, 0x27, + 0x62, 0x3B, 0x62, 0x71, 0x30, 0x26, 0x61, 0x73, + 0x27, 0x3D, 0x66, 0x3D, 0x3D, 0x27, 0x27, 0x62, + 0x62, 0x6F, 0x78, 0x53, 0x78, 0x62, 0x54, 0x66, + 0x27, 0x71, 0x3D, 0x71, 0x62, 0x62, 0x27, 0x3B, + 0x62, 0x71, 0x71, 0x27, 0x27, 0x27, 0x27, 0x3D, + 0x54, 0x3D, 0x27, 0x7E, 0x29, 0x29, 0x29, 0x6D, + 0x49, 0x49, 0x6F, 0x54, 0x73, 0x54, 0x20, 0x20, + 0x29, 0x7C, 0x69, 0x43, 0x76, 0x72, 0x2C, 0x76, + 0x68, 0x62, 0x78, 0x29, 0x6D, 0x38, 0x6D, 0x32, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, + 0x27, 0x3B, 0x62, 0x71, 0x78, 0x61, 0x6D, 0x3C, + 0x27, 0x3D, 0x54, 0x3D, 0x27, 0x62, 0x3B, 0x6F, + 0x6F, 0x69, 0x49, 0x49, 0x6F, 0x3D, 0x73, 0x66, + 0x3D, 0x3D, 0x3D, 0x3D, 0x71, 0x27, 0x71, 0x62, + 0x62, 0x71, 0x3D, 0x71, 0x71, 0x71, 0x27, 0x71, + 0x54, 0x3D, 0x27, 0x46, 0x49, 0x78, 0x49, 0x6D, + 0x6F, 0x27, 0x54, 0x73, 0x40, 0x20, 0x20, 0x20, + 0x44, 0x32, 0x29, 0x49, 0x77, 0x2F, 0x73, 0x62, + 0x29, 0x32, 0x29, 0x51, 0x6D, 0x38, 0x6D, 0x38, + 0x56, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x71, 0x62, 0x62, 0x71, 0x6F, 0x70, 0x38, 0x71, + 0x27, 0x71, 0x54, 0x3D, 0x62, 0x3B, 0x3B, 0x6F, + 0x6F, 0x6F, 0x3B, 0x27, 0x54, 0x40, 0x73, 0x66, + 0x40, 0x40, 0x66, 0x3D, 0x71, 0x3D, 0x71, 0x71, + 0x27, 0x27, 0x3D, 0x54, 0x3D, 0x3D, 0x71, 0x54, + 0x73, 0x73, 0x3D, 0x46, 0x78, 0x49, 0x78, 0x44, + 0x66, 0x73, 0x5D, 0x5D, 0x35, 0x20, 0x20, 0x78, + 0x6D, 0x51, 0x78, 0x49, 0x58, 0x29, 0x29, 0x49, + 0x29, 0x79, 0x38, 0x38, 0x6D, 0x6D, 0x38, 0x6D, + 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x6B, 0x71, 0x27, 0x27, 0x29, 0x3C, 0x44, 0x40, + 0x3D, 0x54, 0x73, 0x73, 0x54, 0x71, 0x71, 0x3D, + 0x3D, 0x3D, 0x66, 0x40, 0x5D, 0x5D, 0x5D, 0x40, + 0x21, 0x5D, 0x73, 0x66, 0x3D, 0x3D, 0x71, 0x71, + 0x27, 0x27, 0x3D, 0x54, 0x54, 0x66, 0x54, 0x73, + 0x5D, 0x21, 0x40, 0x33, 0x69, 0x49, 0x30, 0x38, + 0x7A, 0x7A, 0x7A, 0x21, 0x6B, 0x20, 0x20, 0x6D, + 0x38, 0x6D, 0x38, 0x7C, 0x49, 0x29, 0x69, 0x78, + 0x38, 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, + 0x6D, 0x37, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x71, 0x27, 0x71, 0x78, 0x3C, 0x26, 0x30, + 0x66, 0x66, 0x5D, 0x21, 0x5D, 0x73, 0x73, 0x40, + 0x5D, 0x21, 0x7A, 0x4C, 0x21, 0x5D, 0x21, 0x21, + 0x5D, 0x54, 0x54, 0x54, 0x3D, 0x71, 0x3D, 0x71, + 0x27, 0x27, 0x71, 0x54, 0x66, 0x54, 0x66, 0x66, + 0x5D, 0x21, 0x5D, 0x7E, 0x29, 0x69, 0x49, 0x6D, + 0x4C, 0x7A, 0x5D, 0x20, 0x20, 0x20, 0x51, 0x38, + 0x6D, 0x6D, 0x6D, 0x44, 0x69, 0x78, 0x5B, 0x6D, + 0x6D, 0x6D, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, + 0x38, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x62, 0x27, 0x3C, 0x69, 0x38, 0x71, + 0x54, 0x73, 0x5D, 0x21, 0x40, 0x73, 0x66, 0x73, + 0x21, 0x4C, 0x4C, 0x7A, 0x5D, 0x5D, 0x5D, 0x4C, + 0x66, 0x62, 0x62, 0x27, 0x71, 0x71, 0x71, 0x27, + 0x27, 0x27, 0x71, 0x3D, 0x54, 0x54, 0x54, 0x54, + 0x73, 0x73, 0x3D, 0x57, 0x29, 0x69, 0x30, 0x38, + 0x73, 0x73, 0x20, 0x20, 0x20, 0x2D, 0x6D, 0x6D, + 0x38, 0x6D, 0x6D, 0x6D, 0x38, 0x38, 0x6D, 0x6D, + 0x6D, 0x38, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, + 0x6D, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x27, 0x5B, 0x53, 0x6D, 0x73, + 0x54, 0x54, 0x73, 0x73, 0x3D, 0x27, 0x27, 0x71, + 0x66, 0x40, 0x73, 0x40, 0x66, 0x73, 0x40, 0x21, + 0x62, 0x30, 0x6F, 0x62, 0x27, 0x71, 0x3D, 0x71, + 0x27, 0x71, 0x71, 0x71, 0x3D, 0x3D, 0x3D, 0x3D, + 0x3D, 0x27, 0x58, 0x46, 0x69, 0x30, 0x6F, 0x6D, + 0x3D, 0x71, 0x20, 0x20, 0x20, 0x44, 0x6D, 0x6D, + 0x6D, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x38, 0x6D, + 0x38, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, 0x38, 0x6D, + 0x6D, 0x6D, 0x2F, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x70, 0x53, 0x38, 0x27, + 0x3D, 0x3D, 0x3D, 0x71, 0x3B, 0x30, 0x62, 0x3D, + 0x66, 0x54, 0x3D, 0x71, 0x3D, 0x3D, 0x66, 0x66, + 0x3B, 0x69, 0x69, 0x6F, 0x62, 0x27, 0x3D, 0x71, + 0x27, 0x27, 0x27, 0x27, 0x71, 0x3D, 0x3D, 0x3D, + 0x3D, 0x27, 0x3B, 0x46, 0x62, 0x3B, 0x49, 0x38, + 0x3D, 0x20, 0x20, 0x20, 0x34, 0x44, 0x6D, 0x6D, + 0x38, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x38, 0x6D, + 0x6D, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x38, 0x6D, + 0x38, 0x6D, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x21, 0x49, 0x79, 0x51, 0x5D, + 0x3D, 0x3D, 0x71, 0x27, 0x62, 0x62, 0x3D, 0x73, + 0x40, 0x66, 0x3D, 0x3D, 0x54, 0x3D, 0x3D, 0x71, + 0x78, 0x49, 0x69, 0x30, 0x3B, 0x62, 0x27, 0x27, + 0x27, 0x27, 0x27, 0x71, 0x71, 0x71, 0x3D, 0x3D, + 0x3D, 0x27, 0x3D, 0x33, 0x49, 0x69, 0x62, 0x44, + 0x20, 0x20, 0x20, 0x20, 0x2D, 0x32, 0x6D, 0x38, + 0x6D, 0x6D, 0x6D, 0x6D, 0x38, 0x38, 0x6D, 0x6D, + 0x6D, 0x6D, 0x38, 0x6D, 0x38, 0x6D, 0x38, 0x51, + 0x26, 0x61, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x6A, 0x70, 0x6F, 0x6D, 0x21, + 0x71, 0x3D, 0x3D, 0x71, 0x3D, 0x66, 0x40, 0x5D, + 0x40, 0x73, 0x66, 0x73, 0x66, 0x54, 0x3D, 0x71, + 0x70, 0x78, 0x49, 0x30, 0x6F, 0x6F, 0x62, 0x62, + 0x62, 0x27, 0x71, 0x3D, 0x54, 0x54, 0x54, 0x3D, + 0x3D, 0x71, 0x3D, 0x2A, 0x30, 0x2D, 0x3B, 0x26, + 0x38, 0x20, 0x20, 0x20, 0x2D, 0x62, 0x32, 0x26, + 0x38, 0x6D, 0x6D, 0x38, 0x5B, 0x38, 0x6D, 0x38, + 0x6D, 0x6D, 0x6D, 0x26, 0x32, 0x29, 0x29, 0x29, + 0x53, 0x29, 0x61, 0x6D, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x44, 0x3D, 0x3C, 0x62, 0x79, 0x7A, + 0x54, 0x54, 0x71, 0x27, 0x3D, 0x66, 0x73, 0x40, + 0x73, 0x66, 0x66, 0x73, 0x2D, 0x54, 0x71, 0x71, + 0x4A, 0x3B, 0x62, 0x3B, 0x3B, 0x3B, 0x3B, 0x27, + 0x27, 0x27, 0x71, 0x3D, 0x2D, 0x73, 0x73, 0x54, + 0x3D, 0x71, 0x71, 0x33, 0x30, 0x71, 0x5D, 0x38, + 0x6D, 0x6D, 0x38, 0x38, 0x38, 0x6D, 0x6D, 0x6D, + 0x6D, 0x6D, 0x44, 0x38, 0x6F, 0x7A, 0x64, 0x64, + 0x23, 0x23, 0x56, 0x23, 0x23, 0x7B, 0x47, 0x64, + 0x54, 0x29, 0x44, 0x38, 0x38, 0x6D, 0x38, 0x38, + 0x6D, 0x38, 0x38, 0x6D, 0x53, 0x49, 0x6D, 0x34, + 0x73, 0x54, 0x3D, 0x71, 0x71, 0x3D, 0x54, 0x3D, + 0x3D, 0x54, 0x66, 0x66, 0x66, 0x54, 0x54, 0x3D, + 0x49, 0x3D, 0x54, 0x54, 0x3D, 0x71, 0x27, 0x27, + 0x71, 0x71, 0x71, 0x3D, 0x54, 0x54, 0x54, 0x3D, + 0x3D, 0x71, 0x71, 0x33, 0x29, 0x3D, 0x3D, 0x6D, + 0x38, 0x6D, 0x6D, 0x38, 0x6D, 0x38, 0x38, 0x6D, + 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, 0x6D, + 0x38, 0x6D, 0x38, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, + 0x38, 0x6D, 0x6D, 0x6D, 0x38, 0x38, 0x6D, 0x44, + 0x6D, 0x38, 0x38, 0x6D, 0x69, 0x78, 0x61, 0x73, + 0x54, 0x3D, 0x3D, 0x71, 0x71, 0x3D, 0x3D, 0x3D, + 0x71, 0x3D, 0x3D, 0x3D, 0x3D, 0x54, 0x3D, 0x71, + 0x3B, 0x66, 0x73, 0x73, 0x2D, 0x2D, 0x54, 0x3D, + 0x71, 0x71, 0x3D, 0x71, 0x71, 0x71, 0x27, 0x27, + 0x27, 0x71, 0x71, 0x33, 0x3B, 0x62, 0x27, 0x3D, + 0x27, 0x3B, 0x3B, 0x27, 0x62, 0x3B, 0x3D, 0x3D, + 0x30, 0x27, 0x62, 0x62, 0x62, 0x71, 0x30, 0x27, + 0x3B, 0x6F, 0x30, 0x30, 0x3B, 0x30, 0x3B, 0x62, + 0x3B, 0x69, 0x49, 0x30, 0x29, 0x29, 0x29, 0x29, + 0x49, 0x29, 0x30, 0x29, 0x29, 0x29, 0x51, 0x21, + 0x27, 0x27, 0x71, 0x71, 0x71, 0x3D, 0x3D, 0x71, + 0x71, 0x71, 0x71, 0x3D, 0x71, 0x71, 0x71, 0x62, + 0x3B, 0x54, 0x66, 0x66, 0x66, 0x54, 0x3D, 0x54, + 0x66, 0x54, 0x3D, 0x27, 0x62, 0x62, 0x3B, 0x3B, + 0x3B, 0x62, 0x27, 0x33, 0x30, 0x6F, 0x71, 0x3B, + 0x62, 0x3B, 0x62, 0x27, 0x27, 0x30, 0x62, 0x27, + 0x62, 0x27, 0x3B, 0x49, 0x3B, 0x30, 0x29, 0x3B, + 0x3B, 0x30, 0x30, 0x69, 0x30, 0x6F, 0x30, 0x49, + 0x3B, 0x6F, 0x49, 0x29, 0x49, 0x49, 0x3C, 0x29, + 0x49, 0x49, 0x69, 0x70, 0x70, 0x29, 0x51, 0x27, + 0x3B, 0x3B, 0x3B, 0x62, 0x27, 0x27, 0x27, 0x27, + 0x27, 0x3D, 0x3D, 0x3D, 0x71, 0x27, 0x27, 0x27, + 0x69, 0x71, 0x3D, 0x54, 0x71, 0x62, 0x27, 0x71, + 0x54, 0x2D, 0x3D, 0x27, 0x62, 0x3B, 0x3B, 0x3B, + 0x3B, 0x62, 0x62, 0x33, 0x27, 0x27, 0x3B, 0x71, + 0x27, 0x71, 0x27, 0x62, 0x71, 0x6F, 0x27, 0x71, + 0x3B, 0x62, 0x62, 0x6F, 0x62, 0x6F, 0x6F, 0x6F, + 0x6F, 0x69, 0x62, 0x49, 0x69, 0x49, 0x6F, 0x62, + 0x62, 0x49, 0x69, 0x71, 0x6F, 0x6F, 0x6F, 0x69, + 0x69, 0x69, 0x30, 0x29, 0x30, 0x69, 0x44, 0x7B, + 0x3B, 0x3B, 0x3B, 0x62, 0x62, 0x62, 0x62, 0x62, + 0x27, 0x3D, 0x3D, 0x54, 0x71, 0x3D, 0x3D, 0x54, + 0x69, 0x71, 0x3D, 0x71, 0x62, 0x3B, 0x3B, 0x27, + 0x54, 0x54, 0x3D, 0x71, 0x71, 0x71, 0x27, 0x62, + 0x62, 0x62, 0x27, 0x2A, 0x3D, 0x71, 0x3D, 0x71, + 0x3D, 0x62, 0x27, 0x30, 0x30, 0x62, 0x3B, 0x71, + 0x3B, 0x30, 0x30, 0x49, 0x29, 0x30, 0x30, 0x30, + 0x27, 0x49, 0x62, 0x30, 0x6F, 0x30, 0x3B, 0x3B, + 0x6F, 0x3B, 0x49, 0x30, 0x30, 0x3C, 0x3B, 0x49, + 0x30, 0x69, 0x6F, 0x78, 0x30, 0x62, 0x44, 0x7B, + 0x27, 0x62, 0x62, 0x62, 0x71, 0x71, 0x3D, 0x54, + 0x3D, 0x73, 0x66, 0x73, 0x66, 0x73, 0x73, 0x66, + 0x62, 0x66, 0x66, 0x3D, 0x27, 0x3B, 0x3B, 0x71, + 0x3D, 0x3D, 0x3D, 0x54, 0x54, 0x71, 0x3D, 0x3D, + 0x54, 0x73, 0x5D, 0x33, 0x62, 0x27, 0x54, 0x27, + 0x71, 0x3B, 0x71, 0x71, 0x62, 0x3B, 0x54, 0x3B, + 0x71, 0x6F, 0x62, 0x62, 0x62, 0x62, 0x69, 0x71, + 0x71, 0x6F, 0x3B, 0x71, 0x30, 0x62, 0x71, 0x6F, + 0x3B, 0x62, 0x6F, 0x62, 0x6F, 0x69, 0x6F, 0x69, + 0x6F, 0x30, 0x49, 0x3C, 0x69, 0x3B, 0x79, 0x21, + 0x20, 0x3D, 0x54, 0x73, 0x5D, 0x5D, 0x5D, 0x40, + 0x40, 0x73, 0x73, 0x73, 0x2D, 0x66, 0x66, 0x3D, + 0x3D, 0x54, 0x54, 0x3D, 0x71, 0x27, 0x62, 0x27, + 0x71, 0x71, 0x3D, 0x54, 0x54, 0x3D, 0x3D, 0x54, + 0x5D, 0x6A, 0x77, 0x46, 0x71, 0x2D, 0x54, 0x27, + 0x54, 0x3B, 0x3B, 0x3B, 0x6F, 0x3B, 0x71, 0x27, + 0x3B, 0x27, 0x3B, 0x3B, 0x27, 0x27, 0x3B, 0x3B, + 0x3B, 0x62, 0x3D, 0x62, 0x3D, 0x27, 0x3B, 0x54, + 0x3B, 0x2D, 0x49, 0x3B, 0x3B, 0x29, 0x49, 0x3C, + 0x53, 0x69, 0x53, 0x3C, 0x78, 0x3D, 0x78, 0x5D, + 0x20, 0x66, 0x5D, 0x6A, 0x47, 0x77, 0x4C, 0x5D, + 0x66, 0x3D, 0x3D, 0x66, 0x73, 0x66, 0x3D, 0x62, + 0x62, 0x62, 0x71, 0x3D, 0x71, 0x27, 0x27, 0x27, + 0x71, 0x71, 0x71, 0x3D, 0x3D, 0x71, 0x71, 0x73, + 0x7A, 0x77, 0x47, 0x46, 0x27, 0x73, 0x27, 0x54, + 0x3D, 0x71, 0x62, 0x6F, 0x27, 0x71, 0x27, 0x71, + 0x71, 0x71, 0x62, 0x62, 0x71, 0x71, 0x71, 0x62, + 0x62, 0x3B, 0x69, 0x49, 0x62, 0x6F, 0x62, 0x3D, + 0x6F, 0x6F, 0x62, 0x78, 0x2A, 0x20, 0x6B, 0x20, + 0x2A, 0x20, 0x20, 0x2A, 0x3B, 0x6F, 0x3C, 0x4C, + 0x20, 0x20, 0x7A, 0x77, 0x47, 0x6A, 0x5D, 0x54, + 0x27, 0x6F, 0x3B, 0x54, 0x40, 0x2D, 0x71, 0x6F, + 0x49, 0x6F, 0x27, 0x3D, 0x71, 0x62, 0x62, 0x3B, + 0x62, 0x27, 0x71, 0x3D, 0x3D, 0x71, 0x71, 0x66, + 0x7A, 0x34, 0x6A, 0x46, 0x27, 0x5D, 0x3D, 0x54, + 0x3D, 0x3D, 0x3D, 0x62, 0x27, 0x71, 0x27, 0x3D, + 0x3B, 0x3D, 0x30, 0x27, 0x27, 0x3B, 0x27, 0x3D, + 0x20, 0x20, 0x2A, 0x46, 0x46, 0x2A, 0x35, 0x2A, + 0x46, 0x46, 0x23, 0x2A, 0x7A, 0x4F, 0x4F, 0x6B, + 0x6B, 0x4F, 0x4F, 0x62, 0x3B, 0x62, 0x78, 0x20, + 0x20, 0x20, 0x7A, 0x34, 0x34, 0x40, 0x54, 0x71, + 0x3B, 0x69, 0x6F, 0x40, 0x7A, 0x66, 0x62, 0x69, + 0x3C, 0x3B, 0x71, 0x3D, 0x27, 0x3B, 0x6F, 0x27, + 0x71, 0x3D, 0x3D, 0x66, 0x2D, 0x3D, 0x62, 0x27, + 0x2D, 0x4C, 0x7A, 0x33, 0x27, 0x3D, 0x54, 0x2D, + 0x54, 0x62, 0x54, 0x27, 0x54, 0x27, 0x54, 0x71, + 0x62, 0x71, 0x71, 0x62, 0x62, 0x54, 0x71, 0x62, + 0x7A, 0x6B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x35, 0x57, + 0x6B, 0x20, 0x20, 0x30, 0x6F, 0x27, 0x29, 0x20, + 0x20, 0x20, 0x66, 0x4C, 0x7A, 0x54, 0x62, 0x3B, + 0x6F, 0x30, 0x71, 0x7A, 0x4C, 0x3D, 0x69, 0x78, + 0x53, 0x3D, 0x73, 0x2D, 0x71, 0x62, 0x3B, 0x71, + 0x3D, 0x2D, 0x2D, 0x40, 0x73, 0x3D, 0x27, 0x71, + 0x40, 0x6A, 0x20, 0x20, 0x71, 0x2D, 0x62, 0x2D, + 0x3D, 0x3B, 0x71, 0x27, 0x54, 0x27, 0x3D, 0x3D, + 0x27, 0x2D, 0x27, 0x3D, 0x3B, 0x2D, 0x3D, 0x3B, + 0x34, 0x2D, 0x77, 0x6A, 0x77, 0x2D, 0x6A, 0x7A, + 0x5D, 0x6A, 0x5D, 0x54, 0x71, 0x44, 0x6D, 0x6D, + 0x6D, 0x38, 0x26, 0x30, 0x54, 0x62, 0x20, 0x20, + 0x20, 0x20, 0x40, 0x6A, 0x4C, 0x54, 0x6F, 0x69, + 0x30, 0x62, 0x40, 0x6A, 0x21, 0x62, 0x49, 0x29, + 0x71, 0x4C, 0x34, 0x5D, 0x71, 0x3B, 0x27, 0x71, + 0x54, 0x54, 0x40, 0x40, 0x73, 0x3D, 0x3D, 0x40, + 0x6A, 0x20, 0x20, 0x33, 0x2D, 0x73, 0x40, 0x4E, + 0x77, 0x7A, 0x3D, 0x54, 0x2D, 0x54, 0x71, 0x54, + 0x62, 0x71, 0x71, 0x62, 0x71, 0x71, 0x71, 0x71, + 0x2D, 0x3B, 0x27, 0x3B, 0x49, 0x6F, 0x3B, 0x3B, + 0x27, 0x3B, 0x3B, 0x30, 0x49, 0x53, 0x6F, 0x6F, + 0x69, 0x3B, 0x6F, 0x53, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x6A, 0x77, 0x21, 0x27, 0x30, 0x30, + 0x6F, 0x71, 0x66, 0x73, 0x3D, 0x30, 0x49, 0x30, + 0x5D, 0x34, 0x34, 0x40, 0x27, 0x6F, 0x62, 0x3D, + 0x54, 0x66, 0x40, 0x73, 0x2D, 0x66, 0x2D, 0x5D, + 0x7A, 0x20, 0x20, 0x56, 0x20, 0x54, 0x5D, 0x5E, + 0x33, 0x71, 0x3D, 0x62, 0x27, 0x3B, 0x27, 0x30, + 0x3B, 0x3D, 0x27, 0x3D, 0x3D, 0x3D, 0x3B, 0x73, + 0x54, 0x62, 0x62, 0x62, 0x30, 0x6F, 0x71, 0x6F, + 0x6F, 0x6F, 0x6F, 0x71, 0x62, 0x3B, 0x3B, 0x49, + 0x3B, 0x3B, 0x3B, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x7A, 0x21, 0x54, 0x3B, 0x69, 0x69, + 0x30, 0x62, 0x27, 0x71, 0x62, 0x30, 0x30, 0x6F, + 0x4C, 0x77, 0x6A, 0x66, 0x62, 0x6F, 0x62, 0x71, + 0x54, 0x66, 0x2D, 0x73, 0x66, 0x54, 0x73, 0x73, + 0x73, 0x20, 0x20, 0x7E, 0x20, 0x3D, 0x27, 0x6B, + 0x35, 0x21, 0x54, 0x3D, 0x71, 0x71, 0x54, 0x62, + 0x62, 0x71, 0x71, 0x69, 0x71, 0x54, 0x54, 0x30, + 0x27, 0x3B, 0x3B, 0x3B, 0x6F, 0x30, 0x3B, 0x30, + 0x3B, 0x30, 0x30, 0x27, 0x30, 0x6F, 0x62, 0x69, + 0x6F, 0x6F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x73, 0x3D, 0x62, 0x6F, 0x69, 0x69, + 0x6F, 0x71, 0x3D, 0x71, 0x27, 0x62, 0x62, 0x27, + 0x4C, 0x4C, 0x5D, 0x71, 0x30, 0x69, 0x3B, 0x71, + 0x54, 0x66, 0x73, 0x66, 0x66, 0x66, 0x54, 0x3D, + 0x71, 0x20, 0x20, 0x7E, 0x20, 0x20, 0x21, 0x62, + 0x69, 0x27, 0x5D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3B, + 0x3D, 0x3D, 0x27, 0x3B, 0x27, 0x3D, 0x71, 0x6F, + 0x54, 0x62, 0x6F, 0x30, 0x6F, 0x6F, 0x62, 0x6F, + 0x62, 0x62, 0x62, 0x62, 0x3B, 0x3B, 0x27, 0x3B, + 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x27, 0x3B, 0x6F, 0x30, 0x6F, 0x6F, + 0x62, 0x3D, 0x66, 0x54, 0x54, 0x71, 0x71, 0x71, + 0x5D, 0x5D, 0x54, 0x3B, 0x69, 0x69, 0x3B, 0x71, + 0x54, 0x40, 0x73, 0x66, 0x54, 0x3D, 0x71, 0x62, + 0x6F, 0x20, 0x20, 0x39, 0x20, 0x20, 0x20, 0x2D, + 0x2D, 0x73, 0x40, 0x54, 0x54, 0x54, 0x71, 0x73, + 0x54, 0x73, 0x71, 0x54, 0x54, 0x54, 0x27, 0x3B, + 0x3D, 0x3B, 0x27, 0x62, 0x3B, 0x3B, 0x3B, 0x27, + 0x27, 0x3B, 0x3B, 0x27, 0x62, 0x62, 0x71, 0x62, + 0x71, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3B, 0x6F, 0x30, 0x6F, 0x3B, 0x27, + 0x3D, 0x66, 0x66, 0x54, 0x71, 0x71, 0x27, 0x71, + 0x66, 0x73, 0x54, 0x27, 0x6F, 0x6F, 0x27, 0x54, + 0x40, 0x21, 0x5D, 0x73, 0x3D, 0x27, 0x62, 0x3B, + 0x3B, 0x42, 0x74, 0x52, 0x52, 0x6E, 0x20, 0x20, + 0x40, 0x54, 0x3D, 0x3D, 0x3D, 0x40, 0x27, 0x3B, + 0x30, 0x40, 0x27, 0x27, 0x27, 0x71, 0x54, 0x6F, + 0x5D, 0x6F, 0x3B, 0x71, 0x71, 0x6F, 0x73, 0x6F, + 0x54, 0x6F, 0x54, 0x27, 0x39, 0x6E, 0x6E, 0x3B, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3B, 0x3B, 0x3B, 0x62, 0x27, 0x71, + 0x3D, 0x3D, 0x3D, 0x27, 0x62, 0x27, 0x62, 0x27, + 0x3D, 0x40, 0x54, 0x27, 0x3B, 0x3B, 0x27, 0x73, + 0x7A, 0x21, 0x40, 0x54, 0x71, 0x62, 0x6F, 0x6F, + 0x3B, 0x67, 0x3A, 0x3A, 0x5A, 0x48, 0x3A, 0x20, + 0x20, 0x53, 0x6D, 0x38, 0x38, 0x6D, 0x38, 0x38, + 0x6D, 0x38, 0x79, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, + 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, + 0x6D, 0x6D, 0x6D, 0x67, 0x52, 0x41, 0x22, 0x2F, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4F, 0x6B, + 0x43, 0x3A, 0x3B, 0x27, 0x27, 0x62, 0x27, 0x71, + 0x71, 0x71, 0x71, 0x3D, 0x71, 0x71, 0x3D, 0x3D, + 0x27, 0x40, 0x54, 0x27, 0x30, 0x30, 0x27, 0x40, + 0x7A, 0x5D, 0x54, 0x71, 0x3B, 0x30, 0x30, 0x3B, + 0x42, 0x67, 0x67, 0x3E, 0x3A, 0x48, 0x22, 0x5A, + 0x4F, 0x20, 0x2D, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, + 0x6D, 0x6D, 0x26, 0x6D, 0x38, 0x6D, 0x38, 0x6D, + 0x6D, 0x6D, 0x38, 0x6D, 0x38, 0x38, 0x6D, 0x38, + 0x6D, 0x38, 0x38, 0x3E, 0x55, 0x6C, 0x22, 0x73, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4D, + 0x5A, 0x45, 0x36, 0x3D, 0x71, 0x27, 0x27, 0x71, + 0x54, 0x66, 0x73, 0x40, 0x73, 0x66, 0x2D, 0x66, + 0x30, 0x66, 0x71, 0x30, 0x69, 0x6F, 0x3D, 0x21, + 0x7A, 0x66, 0x3D, 0x62, 0x3B, 0x6F, 0x3B, 0x28, + 0x67, 0x52, 0x5A, 0x74, 0x41, 0x3A, 0x74, 0x3A, + 0x52, 0x20, 0x20, 0x7E, 0x38, 0x6D, 0x6D, 0x6D, + 0x6D, 0x38, 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, + 0x38, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x38, 0x6D, + 0x6D, 0x6D, 0x6D, 0x2F, 0x52, 0x22, 0x28, 0x50, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, + 0x41, 0x5A, 0x5A, 0x66, 0x54, 0x3D, 0x54, 0x66, + 0x73, 0x40, 0x40, 0x40, 0x73, 0x66, 0x66, 0x3D, + 0x69, 0x27, 0x3B, 0x30, 0x30, 0x62, 0x73, 0x7A, + 0x21, 0x3D, 0x3B, 0x6F, 0x6F, 0x62, 0x2F, 0x75, + 0x28, 0x55, 0x22, 0x3A, 0x31, 0x3A, 0x41, 0x3A, + 0x5A, 0x2E, 0x20, 0x4F, 0x20, 0x6D, 0x6D, 0x6D, + 0x6D, 0x6D, 0x38, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, + 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, + 0x6D, 0x6D, 0x78, 0x2F, 0x31, 0x55, 0x2E, 0x3F, + 0x50, 0x20, 0x20, 0x20, 0x20, 0x4D, 0x24, 0x52, + 0x22, 0x22, 0x31, 0x2D, 0x66, 0x54, 0x66, 0x66, + 0x66, 0x66, 0x54, 0x71, 0x27, 0x27, 0x27, 0x62, + 0x30, 0x3B, 0x3B, 0x6F, 0x3B, 0x3D, 0x40, 0x21, + 0x73, 0x71, 0x5F, 0x6E, 0x2E, 0x2E, 0x67, 0x52, + 0x52, 0x31, 0x7D, 0x48, 0x3A, 0x3A, 0x74, 0x74, + 0x55, 0x39, 0x20, 0x20, 0x20, 0x20, 0x38, 0x6D, + 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, + 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, + 0x6D, 0x29, 0x29, 0x2F, 0x55, 0x52, 0x2E, 0x24, + 0x72, 0x68, 0x25, 0x76, 0x68, 0x3F, 0x2E, 0x39, + 0x52, 0x74, 0x3A, 0x73, 0x66, 0x66, 0x54, 0x54, + 0x27, 0x3B, 0x6F, 0x6F, 0x6F, 0x6F, 0x3B, 0x62, + 0x3B, 0x62, 0x27, 0x71, 0x54, 0x40, 0x21, 0x40, + 0x3D, 0x2E, 0x48, 0x6E, 0x55, 0x55, 0x6E, 0x55, + 0x3A, 0x74, 0x3E, 0x55, 0x74, 0x5A, 0x22, 0x3A, + 0x3A, 0x36, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x38, + 0x6D, 0x6D, 0x38, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, + 0x38, 0x6D, 0x38, 0x38, 0x6D, 0x38, 0x6D, 0x38, + 0x6D, 0x32, 0x78, 0x62, 0x3E, 0x52, 0x28, 0x42, + 0x65, 0x24, 0x5F, 0x24, 0x5F, 0x2E, 0x55, 0x22, + 0x3A, 0x41, 0x74, 0x31, 0x54, 0x73, 0x66, 0x54, + 0x27, 0x6F, 0x30, 0x69, 0x30, 0x6F, 0x62, 0x62, + 0x62, 0x71, 0x3D, 0x54, 0x73, 0x5D, 0x5D, 0x66, + 0x71, 0x2E, 0x22, 0x31, 0x55, 0x3A, 0x31, 0x5A, + 0x3A, 0x3A, 0x74, 0x5A, 0x74, 0x3E, 0x31, 0x3A, + 0x55, 0x22, 0x22, 0x35, 0x20, 0x20, 0x20, 0x20, + 0x34, 0x38, 0x6D, 0x6D, 0x6D, 0x38, 0x38, 0x6D, + 0x6D, 0x38, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, + 0x38, 0x79, 0x29, 0x2F, 0x42, 0x52, 0x28, 0x48, + 0x48, 0x2E, 0x2E, 0x48, 0x3E, 0x52, 0x3A, 0x74, + 0x7D, 0x3A, 0x3A, 0x3E, 0x40, 0x40, 0x40, 0x54, + 0x27, 0x6F, 0x30, 0x6F, 0x62, 0x71, 0x71, 0x71, + 0x62, 0x3D, 0x66, 0x73, 0x40, 0x5D, 0x73, 0x71, + 0x62, 0x28, 0x55, 0x5A, 0x5A, 0x55, 0x3A, 0x41, + 0x55, 0x3A, 0x3A, 0x31, 0x55, 0x55, 0x5A, 0x74, + 0x3A, 0x31, 0x22, 0x48, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, + 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, + 0x6D, 0x6D, 0x29, 0x2F, 0x24, 0x28, 0x28, 0x52, + 0x52, 0x48, 0x48, 0x28, 0x39, 0x52, 0x74, 0x48, + 0x74, 0x55, 0x22, 0x41, 0x5A, 0x40, 0x54, 0x27, + 0x3B, 0x6F, 0x3B, 0x71, 0x54, 0x66, 0x66, 0x3D, + 0x62, 0x54, 0x40, 0x21, 0x7A, 0x40, 0x3D, 0x62, + 0x62, 0x48, 0x52, 0x55, 0x6C, 0x5A, 0x31, 0x31, + 0x5A, 0x41, 0x31, 0x3A, 0x3A, 0x7D, 0x31, 0x3A, + 0x41, 0x41, 0x22, 0x36, 0x42, 0x20, 0x20, 0x20, + 0x20, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, + 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, + 0x6D, 0x6D, 0x29, 0x25, 0x59, 0x2E, 0x39, 0x39, + 0x55, 0x39, 0x39, 0x39, 0x31, 0x22, 0x3A, 0x74, + 0x5A, 0x3E, 0x6C, 0x3E, 0x31, 0x3E, 0x3A, 0x69, + 0x49, 0x49, 0x3B, 0x71, 0x66, 0x73, 0x66, 0x54, + 0x27, 0x66, 0x5D, 0x7A, 0x21, 0x73, 0x71, 0x62, + 0x27, 0x75, 0x39, 0x41, 0x3A, 0x36, 0x7D, 0x74, + 0x74, 0x41, 0x55, 0x55, 0x3A, 0x3A, 0x3A, 0x3A, + 0x31, 0x31, 0x5A, 0x22, 0x52, 0x20, 0x20, 0x20, + 0x26, 0x38, 0x6D, 0x38, 0x6D, 0x38, 0x6D, 0x38, + 0x6D, 0x38, 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, + 0x38, 0x6D, 0x20, 0x60, 0x24, 0x48, 0x39, 0x3A, + 0x55, 0x55, 0x31, 0x55, 0x41, 0x74, 0x41, 0x22, + 0x7D, 0x3A, 0x22, 0x3E, 0x41, 0x5A, 0x3A, 0x74, + 0x78, 0x30, 0x27, 0x54, 0x40, 0x73, 0x54, 0x3D, + 0x71, 0x54, 0x5D, 0x7A, 0x21, 0x66, 0x62, 0x3B, + 0x71, 0x5F, 0x52, 0x3E, 0x41, 0x5A, 0x5A, 0x22, + 0x3E, 0x3A, 0x74, 0x3E, 0x55, 0x55, 0x3A, 0x31, + 0x41, 0x3A, 0x48, 0x55, 0x41, 0x42, 0x6D, 0x38, + 0x38, 0x6D, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, + 0x38, 0x6D, 0x6D, 0x38, 0x6D, 0x38, 0x6D, 0x6D, + 0x6D, 0x20, 0x20, 0x25, 0x24, 0x28, 0x52, 0x3A, + 0x5A, 0x5A, 0x5A, 0x5A, 0x74, 0x74, 0x7D, 0x74, + 0x3A, 0x74, 0x3A, 0x41, 0x7D, 0x41, 0x3A, 0x3A, + 0x69, 0x3D, 0x21, 0x4C, 0x4C, 0x5D, 0x66, 0x54, + 0x66, 0x73, 0x21, 0x6A, 0x21, 0x3D, 0x3B, 0x6F, + 0x71, 0x75, 0x48, 0x31, 0x5A, 0x3A, 0x3E, 0x48, + 0x74, 0x7D, 0x3A, 0x7D, 0x3A, 0x3A, 0x55, 0x74, + 0x5A, 0x3A, 0x41, 0x55, 0x22, 0x22, 0x3F, 0x6D, + 0x6D, 0x38, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, + 0x6D, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, 0x6D, 0x38, + 0x20, 0x20, 0x20, 0x60, 0x42, 0x28, 0x39, 0x3A, + 0x3A, 0x31, 0x41, 0x3A, 0x22, 0x55, 0x74, 0x55, + 0x74, 0x74, 0x74, 0x3A, 0x3A, 0x74, 0x3A, 0x67, + 0x54, 0x7A, 0x34, 0x77, 0x6A, 0x21, 0x66, 0x66, + 0x7A, 0x21, 0x21, 0x4C, 0x21, 0x3D, 0x3B, 0x62, + 0x66, 0x67, 0x28, 0x55, 0x41, 0x31, 0x55, 0x3A, + 0x74, 0x41, 0x31, 0x3A, 0x3A, 0x41, 0x3A, 0x36, + 0x5A, 0x5A, 0x31, 0x31, 0x39, 0x22, 0x24, 0x43, + 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x38, 0x6D, 0x6D, + 0x6D, 0x38, 0x6D, 0x6D, 0x6D, 0x38, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x60, 0x24, 0x63, 0x39, 0x55, + 0x31, 0x5A, 0x3A, 0x74, 0x3A, 0x31, 0x3A, 0x31, + 0x5A, 0x48, 0x3A, 0x7D, 0x48, 0x41, 0x31, 0x3E, + 0x6A, 0x64, 0x47, 0x4C, 0x5D, 0x54, 0x71, 0x71, + 0x6A, 0x5D, 0x5D, 0x21, 0x5D, 0x3D, 0x3B, 0x62, + 0x66, 0x42, 0x39, 0x3A, 0x41, 0x3A, 0x31, 0x3A, + 0x7D, 0x3A, 0x74, 0x41, 0x31, 0x31, 0x3E, 0x41, + 0x5A, 0x41, 0x3A, 0x31, 0x39, 0x52, 0x48, 0x25, + 0x62, 0x6D, 0x38, 0x38, 0x6D, 0x38, 0x6D, 0x6D, + 0x6D, 0x6D, 0x6D, 0x6D, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x4D, 0x43, 0x5F, 0x28, 0x52, 0x3E, + 0x22, 0x31, 0x3A, 0x3A, 0x55, 0x3A, 0x3E, 0x31, + 0x74, 0x67, 0x3E, 0x3A, 0x3E, 0x67, 0x54, 0x34, + 0x2B, 0x2B, 0x34, 0x21, 0x66, 0x71, 0x62, 0x62, + 0x3D, 0x3D, 0x54, 0x5D, 0x40, 0x27, 0x6F, 0x3B, + 0x67, 0x48, 0x48, 0x39, 0x52, 0x7D, 0x7D, 0x22, + 0x74, 0x3A, 0x5A, 0x5A, 0x3A, 0x55, 0x31, 0x3A, + 0x41, 0x7D, 0x3A, 0x22, 0x55, 0x48, 0x42, 0x76, + 0x4B, 0x20, 0x37, 0x6D, 0x6D, 0x6D, 0x38, 0x78, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x4D, 0x76, 0x42, 0x48, 0x55, 0x74, + 0x41, 0x6C, 0x48, 0x31, 0x31, 0x3A, 0x5A, 0x74, + 0x31, 0x6C, 0x22, 0x3E, 0x67, 0x62, 0x7A, 0x64, + 0x7B, 0x77, 0x5D, 0x54, 0x71, 0x62, 0x62, 0x3B, + 0x53, 0x62, 0x71, 0x73, 0x73, 0x27, 0x6F, 0x3B, + 0x67, 0x2E, 0x5F, 0x48, 0x48, 0x52, 0x52, 0x52, + 0x52, 0x52, 0x31, 0x41, 0x74, 0x41, 0x74, 0x31, + 0x74, 0x3A, 0x74, 0x74, 0x48, 0x48, 0x42, 0x72, + 0x4B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x4B, 0x68, 0x42, 0x28, 0x55, 0x74, + 0x5A, 0x3A, 0x48, 0x55, 0x5A, 0x31, 0x55, 0x55, + 0x39, 0x67, 0x2F, 0x49, 0x69, 0x27, 0x4C, 0x64, + 0x34, 0x5D, 0x66, 0x71, 0x62, 0x6F, 0x6F, 0x6F, + 0x79, 0x27, 0x66, 0x73, 0x66, 0x27, 0x6F, 0x3B, + 0x54, 0x24, 0x5F, 0x59, 0x24, 0x24, 0x42, 0x2E, + 0x48, 0x67, 0x28, 0x39, 0x52, 0x39, 0x31, 0x3E, + 0x55, 0x3A, 0x3A, 0x31, 0x39, 0x48, 0x24, 0x76, + 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x4B, 0x76, 0x24, 0x42, 0x52, 0x55, + 0x41, 0x31, 0x31, 0x39, 0x52, 0x52, 0x48, 0x67, + 0x72, 0x71, 0x6F, 0x69, 0x58, 0x2D, 0x4C, 0x34, + 0x7A, 0x40, 0x66, 0x54, 0x62, 0x30, 0x6F, 0x3B, + 0x53, 0x7A, 0x7A, 0x73, 0x3D, 0x62, 0x30, 0x6F, + 0x3D, 0x3D, 0x3B, 0x60, 0x2F, 0x76, 0x59, 0x59, + 0x59, 0x24, 0x24, 0x5F, 0x42, 0x2E, 0x28, 0x55, + 0x3A, 0x39, 0x39, 0x48, 0x48, 0x65, 0x68, 0x25, + 0x4B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x4B, 0x25, 0x72, 0x65, 0x2E, 0x28, + 0x52, 0x28, 0x48, 0x48, 0x2E, 0x24, 0x3F, 0x4B, + 0x71, 0x27, 0x30, 0x30, 0x27, 0x5D, 0x4C, 0x6A, + 0x7A, 0x7A, 0x5D, 0x54, 0x3B, 0x30, 0x6F, 0x71, + 0x27, 0x64, 0x34, 0x40, 0x3D, 0x62, 0x3B, 0x27, + 0x3D, 0x54, 0x71, 0x3B, 0x3B, 0x62, 0x71, 0x4B, + 0x43, 0x43, 0x76, 0x76, 0x72, 0x59, 0x24, 0x24, + 0x42, 0x2E, 0x42, 0x24, 0x2C, 0x76, 0x60, 0x50, + 0x4D, 0x20, 0x20, 0x20, 0x20, 0x62, 0x27, 0x3D, + 0x3D, 0x27, 0x62, 0x62, 0x27, 0x27, 0x62, 0x30, + 0x20, 0x20, 0x4B, 0x25, 0x76, 0x59, 0x24, 0x24, + 0x42, 0x42, 0x42, 0x65, 0x3F, 0x60, 0x6F, 0x62, + 0x27, 0x27, 0x62, 0x3B, 0x3D, 0x5D, 0x7A, 0x4C, + 0x4C, 0x4C, 0x5D, 0x71, 0x30, 0x69, 0x62, 0x54, + 0x7A, 0x2B, 0x34, 0x2D, 0x71, 0x27, 0x58, 0x62, + 0x71, 0x3D, 0x71, 0x6F, 0x30, 0x6F, 0x27, 0x54, + 0x3D, 0x71, 0x66, 0x4B, 0x25, 0x60, 0x76, 0x76, + 0x72, 0x72, 0x3F, 0x76, 0x76, 0x60, 0x50, 0x4B, + 0x20, 0x73, 0x3D, 0x62, 0x3B, 0x27, 0x71, 0x3D, + 0x3D, 0x71, 0x27, 0x62, 0x62, 0x27, 0x62, 0x3B, + 0x30, 0x27, 0x4D, 0x4B, 0x25, 0x76, 0x72, 0x2C, + 0x59, 0x2C, 0x3F, 0x76, 0x25, 0x62, 0x30, 0x3B, + 0x71, 0x3D, 0x71, 0x71, 0x66, 0x5D, 0x5D, 0x21, + 0x21, 0x21, 0x54, 0x30, 0x78, 0x69, 0x27, 0x66, + 0x7A, 0x4C, 0x5D, 0x3D, 0x27, 0x62, 0x62, 0x3B, + 0x62, 0x3D, 0x27, 0x6F, 0x30, 0x3B, 0x71, 0x54, + 0x3D, 0x3D, 0x54, 0x66, 0x66, 0x66, 0x4B, 0x25, + 0x25, 0x25, 0x25, 0x60, 0x25, 0x50, 0x4B, 0x71, + 0x54, 0x54, 0x71, 0x27, 0x3D, 0x54, 0x54, 0x3D, + 0x3D, 0x71, 0x3B, 0x3B, 0x62, 0x3B, 0x62, 0x3B, + 0x27, 0x54, 0x4C, 0x4D, 0x4B, 0x25, 0x76, 0x76, + 0x68, 0x43, 0x25, 0x50, 0x27, 0x30, 0x30, 0x58, + 0x27, 0x54, 0x54, 0x3D, 0x54, 0x54, 0x66, 0x54, + 0x66, 0x71, 0x6F, 0x78, 0x53, 0x69, 0x54, 0x73, + 0x66, 0x66, 0x54, 0x27, 0x27, 0x27, 0x62, 0x3B, + 0x3B, 0x27, 0x27, 0x3B, 0x6F, 0x62, 0x27, 0x54, + 0x66, 0x3D, 0x3D, 0x27, 0x27, 0x27, 0x62, 0x6F, + 0x78, 0x53, 0x78, 0x62, 0x66, 0x73, 0x3D, 0x3D, + 0x66, 0x2D, 0x54, 0x54, 0x73, 0x73, 0x54, 0x71, + 0x71, 0x27, 0x3B, 0x6F, 0x3B, 0x3B, 0x62, 0x3B, + 0x3B, 0x71, 0x73, 0x73, 0x54, 0x71, 0x62, 0x27, + 0x27, 0x58, 0x62, 0x71, 0x71, 0x6F, 0x6F, 0x62, + 0x27, 0x54, 0x66, 0x3D, 0x3D, 0x27, 0x27, 0x62, + 0x62, 0x6F, 0x78, 0x53, 0x78, 0x62, 0x54, 0x66, + 0x71, 0x3D, 0x71, 0x71, 0x62, 0x27, 0x27, 0x62, + 0x62, 0x71, 0x3D, 0x27, 0x27, 0x62, 0x27, 0x3D, + 0x54, 0x3D, 0x27, 0x62, 0x3B, 0x6F, 0x6F, 0x69, + 0x78, 0x78, 0x6F, 0x54, 0x73, 0x66, 0x54, 0x54, + 0x40, 0x5D, 0x40, 0x40, 0x40, 0x66, 0x3D, 0x71, + 0x27, 0x27, 0x3B, 0x30, 0x6F, 0x3B, 0x3B, 0x62, + 0x3B, 0x3B, 0x27, 0x71, 0x71, 0x27, 0x62, 0x62, + 0x62, 0x62, 0x62, 0x71, 0x71, 0x71, 0x62, 0x62, + 0x27, 0x71, 0x54, 0x3D, 0x27, 0x62, 0x3B, 0x6F, + 0x6F, 0x69, 0x49, 0x49, 0x6F, 0x3D, 0x73, 0x66 }; -unsigned char linux_logo_bw[] __initdata = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, - 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFE, 0x3F, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xC7, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC3, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, - 0xFB, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFD, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, - 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF9, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF9, 0xCF, 0xC3, 0xF8, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x87, 0x81, 0xF9, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xA7, - 0x99, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF9, 0xF3, 0xBC, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF9, 0xE3, 0xBC, 0xF9, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, 0x3C, 0xF9, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, - 0x19, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF9, 0xC0, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, - 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF9, 0xC0, 0x21, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF9, 0xB1, 0x80, 0xEC, 0xC0, 0x1F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x90, 0x00, 0xE4, - 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C, - 0xC0, 0x7C, 0x04, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE3, 0x80, 0x00, 0x7C, 0x40, 0x11, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE3, 0x80, 0x00, 0x7F, 0xD2, 0x29, - 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x00, 0x3F, - 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0x00, - 0x00, 0x3F, 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, - 0x1E, 0x00, 0x00, 0x1F, 0x80, 0x19, 0xFF, 0xFF, - 0xFF, 0xFE, 0x1C, 0x00, 0x00, 0x1E, 0x80, 0x19, - 0xFF, 0xFF, 0xFF, 0xFE, 0x3C, 0x00, 0x00, 0x1E, - 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C, 0x00, - 0x00, 0x0F, 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC, - 0xF8, 0x00, 0x00, 0x0E, 0x80, 0x11, 0xFF, 0xFF, - 0xFF, 0xFC, 0xF8, 0x00, 0x00, 0x06, 0x00, 0x11, - 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x00, 0x06, - 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF9, 0xF0, 0x00, - 0x00, 0x02, 0x00, 0x09, 0xFF, 0xFF, 0xFF, 0xF1, - 0xF0, 0x00, 0x00, 0x02, 0x80, 0x10, 0xFF, 0xFF, - 0xFF, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0x97, 0x10, - 0xFF, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x00, 0x00, - 0xDF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0x00, - 0x00, 0x00, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC7, - 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF, - 0xFF, 0xC7, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, - 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0x01, - 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00, - 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F, - 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF, - 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x01, 0x80, 0x18, - 0xFF, 0xFF, 0xFF, 0x9E, 0x80, 0x00, 0x00, 0x03, - 0xA8, 0x11, 0xFF, 0xFF, 0xFF, 0x9F, 0x80, 0x00, - 0x00, 0x02, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x99, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x09, 0xFF, 0xFF, - 0xFF, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x01, - 0xFF, 0xFF, 0xFE, 0x20, 0x60, 0x00, 0x00, 0x00, - 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0x00, 0x30, 0x00, - 0x00, 0x00, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x40, - 0x38, 0x00, 0x00, 0x00, 0xFE, 0x47, 0xFF, 0xFF, - 0x81, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x23, - 0xFF, 0xFF, 0x90, 0x00, 0x1E, 0x00, 0x00, 0x00, - 0x78, 0x11, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, - 0x07, 0xC0, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xFF, - 0xC0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x04, - 0x7F, 0xFF, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x10, - 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x01, 0x80, - 0x00, 0x30, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x70, 0x00, 0x01, 0x4F, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, - 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x80, 0x03, 0xF0, - 0x00, 0x00, 0x8F, 0xFF, 0x80, 0x00, 0x00, 0x40, - 0x0F, 0xF0, 0x00, 0x04, 0x1F, 0xFF, 0x80, 0x00, - 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x10, 0x1F, 0xFF, - 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x40, - 0xFF, 0xFF, 0x98, 0x00, 0x00, 0xFF, 0xFF, 0xF0, - 0x00, 0x83, 0xFF, 0xFF, 0x81, 0xE0, 0x01, 0xFF, - 0xFF, 0xF8, 0x02, 0x07, 0xFF, 0xFF, 0x80, 0x3F, - 0x07, 0xE0, 0x00, 0x1C, 0x0C, 0x1F, 0xFF, 0xFF, - 0xF8, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0x78, 0x1F, - 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0x00, 0x07, 0x0F, - 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0C, 0x07, - 0xFF, 0x83, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 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 -unsigned char linux_logo16_red[] __initdata = { - 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x35, 0x83, 0xa5, - 0x65, 0x8f, 0x98, 0xc9, 0xdb, 0xe1, 0xe7, 0xf8 -}; +#else -unsigned char linux_logo16_green[] __initdata = { - 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x2e, 0x83, 0xa5, - 0x65, 0x6e, 0x98, 0x89, 0xbf, 0xac, 0xda, 0xf8 -}; +#define LINUX_LOGO_COLORS 214 -unsigned char linux_logo16_blue[] __initdata = { - 0x00, 0x90, 0xaf, 0x9c, 0xf7, 0x2b, 0x82, 0xa5, - 0x65, 0x41, 0x97, 0x1e, 0x60, 0x29, 0xa5, 0xf8 -}; +#endif -unsigned char linux_logo16[] __initdata = { - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa1, 0x11, 0x11, - 0x61, 0x16, 0x66, 0x66, 0x11, 0x11, 0x11, 0x11, - 0x11, 0x11, 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0xa8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x87, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x73, 0x33, 0x33, 0x3a, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x27, 0x77, 0x77, 0x77, 0x33, 0x3a, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xa3, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x55, 0x50, 0x08, 0x33, 0x77, 0x77, - 0x77, 0x72, 0x72, 0x27, 0x77, 0x77, 0x33, 0x33, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xa3, 0x33, 0x33, 0x77, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x58, 0x85, 0x00, 0x11, 0x11, 0xaa, - 0xa3, 0x37, 0x77, 0x72, 0x22, 0x22, 0x77, 0x73, - 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, - 0x33, 0x37, 0x77, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x56, 0x85, 0x00, 0x06, 0x66, 0x11, - 0x11, 0x1a, 0xa3, 0x37, 0x77, 0x72, 0x22, 0x77, - 0x73, 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, - 0x33, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x55, 0x00, 0x00, 0x06, 0x66, 0x66, - 0x66, 0x66, 0x11, 0x1a, 0xa3, 0x77, 0x72, 0x22, - 0x77, 0x73, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, - 0x33, 0x33, 0x33, 0xa0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, - 0x66, 0x66, 0x66, 0x66, 0x11, 0xa3, 0x77, 0x22, - 0x22, 0x77, 0x33, 0x33, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33, - 0x33, 0x3a, 0xa1, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x33, - 0xaa, 0x11, 0x16, 0x66, 0x66, 0x61, 0x1a, 0x37, - 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x33, - 0x3a, 0xa1, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x22, - 0x22, 0x77, 0x3a, 0x11, 0x66, 0x66, 0x66, 0x1a, - 0x37, 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33, 0x3a, - 0xa1, 0x11, 0x11, 0x10, 0x00, 0x00, 0x50, 0x00, - 0x00, 0x05, 0x80, 0x50, 0x00, 0x00, 0x07, 0x72, - 0x22, 0x22, 0x22, 0x73, 0xa1, 0x66, 0x66, 0x61, - 0x1a, 0x77, 0x22, 0x27, 0x73, 0x33, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x3a, 0xaa, - 0x11, 0x11, 0x1a, 0xa0, 0x08, 0x71, 0x05, 0x00, - 0x00, 0x12, 0x22, 0x50, 0x00, 0x00, 0x07, 0x77, - 0x77, 0x72, 0x22, 0x22, 0x27, 0x31, 0x16, 0x66, - 0x61, 0x13, 0x77, 0x22, 0x77, 0x33, 0x3a, 0xaa, - 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xa1, - 0x11, 0x1a, 0x33, 0x70, 0x07, 0x2e, 0x70, 0x00, - 0x01, 0x44, 0x42, 0x60, 0x00, 0x00, 0x02, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x27, 0x31, 0x66, - 0x66, 0x61, 0xa3, 0x72, 0x22, 0x77, 0x33, 0xaa, - 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xaa, 0x11, - 0x1a, 0x33, 0x77, 0x30, 0x04, 0x82, 0x40, 0x00, - 0x54, 0x48, 0x54, 0x40, 0x00, 0x00, 0x01, 0xaa, - 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x31, - 0x66, 0x66, 0x11, 0x37, 0x22, 0x27, 0x73, 0x3a, - 0xaa, 0xaa, 0xa3, 0x33, 0x3a, 0xaa, 0xaa, 0xaa, - 0xa3, 0x77, 0xaa, 0x10, 0x50, 0x08, 0x46, 0x05, - 0x54, 0x80, 0x50, 0x42, 0x00, 0x00, 0x08, 0x66, - 0x66, 0x1a, 0x32, 0x22, 0x22, 0x22, 0x22, 0x27, - 0x31, 0x66, 0x66, 0x13, 0x72, 0x22, 0x77, 0x33, - 0xaa, 0xaa, 0xaa, 0x33, 0xaa, 0xa1, 0xaa, 0xa3, - 0x37, 0xa1, 0x1a, 0x30, 0x50, 0x06, 0x26, 0x00, - 0x54, 0x00, 0x00, 0x44, 0x00, 0x00, 0x08, 0xe2, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22, 0x22, - 0x27, 0xa6, 0x66, 0x61, 0xa7, 0x72, 0x27, 0x73, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, - 0x31, 0x11, 0x37, 0x70, 0x02, 0x00, 0xab, 0xbb, - 0xb6, 0x00, 0x00, 0xf4, 0x00, 0x00, 0xee, 0xee, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22, - 0x22, 0x23, 0x16, 0x66, 0x1a, 0x37, 0x22, 0x77, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x3a, - 0x11, 0xa7, 0x33, 0x10, 0x04, 0x09, 0xbd, 0xdd, - 0xbd, 0xd0, 0x04, 0x45, 0x00, 0x0e, 0xee, 0xee, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22, - 0x22, 0x22, 0x71, 0x66, 0x66, 0x13, 0x72, 0x27, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x11, - 0xa3, 0x73, 0xa1, 0x60, 0x08, 0xbd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdb, 0x90, 0x00, 0x02, 0xec, 0xee, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xce, 0x22, - 0x22, 0x22, 0x27, 0xa6, 0x66, 0x61, 0x37, 0x27, - 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x1a, - 0x33, 0xa1, 0x16, 0x60, 0x0b, 0xbd, 0xdd, 0xdd, - 0xcd, 0xdd, 0xdd, 0xd9, 0x00, 0x00, 0xec, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0xa2, - 0x22, 0x22, 0x22, 0x7a, 0x66, 0x66, 0x13, 0x77, - 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0x3a, 0x11, 0x33, - 0xaa, 0x11, 0x66, 0x60, 0x9b, 0xdd, 0xdd, 0xdd, - 0xcd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0xec, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x61, - 0x72, 0x22, 0x22, 0x22, 0xa1, 0x66, 0x61, 0x37, - 0x1a, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x13, 0x3a, - 0x11, 0x11, 0x11, 0x10, 0x5b, 0xdd, 0xdd, 0xdc, - 0xdd, 0xdd, 0xbd, 0xd9, 0x00, 0x00, 0xec, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x86, - 0x17, 0x22, 0x22, 0x22, 0x23, 0x16, 0x66, 0xaa, - 0xaa, 0xa3, 0x3a, 0xaa, 0xaa, 0x1a, 0x3a, 0xa1, - 0x11, 0x11, 0x1a, 0x70, 0x05, 0xbd, 0xdd, 0xdd, - 0xdb, 0x5b, 0xdd, 0xb0, 0x00, 0x60, 0x2e, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe6, 0x88, - 0x66, 0x32, 0x22, 0x22, 0x22, 0x36, 0x66, 0x11, - 0x33, 0x33, 0x3a, 0xaa, 0x11, 0xaa, 0xaa, 0xa1, - 0x11, 0x1a, 0x3a, 0x60, 0x02, 0x99, 0xbb, 0xb9, - 0x9b, 0xbb, 0xbc, 0x22, 0x00, 0x86, 0x5e, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe1, 0x68, - 0x86, 0x63, 0x22, 0x22, 0x22, 0x2a, 0x66, 0x66, - 0x33, 0x33, 0xaa, 0xaa, 0x1a, 0xaa, 0xaa, 0x11, - 0x1a, 0xa7, 0x68, 0x80, 0x02, 0x2b, 0xbd, 0xbb, - 0xbb, 0xb9, 0x22, 0x22, 0x00, 0x06, 0x6e, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc7, 0xa6, - 0x88, 0x86, 0x32, 0x22, 0x22, 0x27, 0xa6, 0x66, - 0x33, 0x3a, 0xaa, 0xa1, 0xaa, 0xaa, 0xa1, 0x11, - 0xa3, 0xa6, 0x88, 0x80, 0x02, 0x22, 0x9b, 0xbb, - 0xbb, 0x22, 0x24, 0xf4, 0x60, 0x00, 0x0c, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc2, 0x21, - 0x68, 0x88, 0x63, 0x22, 0x22, 0x22, 0x71, 0x66, - 0x33, 0x3a, 0x11, 0x11, 0xaa, 0xaa, 0x11, 0xaa, - 0x71, 0x88, 0x88, 0x00, 0x02, 0xe2, 0x26, 0x99, - 0x22, 0x22, 0x4f, 0xf4, 0x40, 0x00, 0x0c, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x22, 0x22, - 0x16, 0x88, 0x86, 0xa2, 0x22, 0x22, 0x27, 0x11, - 0x33, 0xa1, 0x11, 0x11, 0xaa, 0x31, 0x1a, 0xa3, - 0x68, 0x88, 0x81, 0x00, 0x54, 0x42, 0x22, 0x22, - 0x22, 0x44, 0xff, 0xff, 0x48, 0x00, 0x00, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x22, - 0x21, 0x88, 0x88, 0x6a, 0x22, 0x22, 0x22, 0x31, - 0x3a, 0xa1, 0x11, 0x1a, 0xa3, 0x11, 0x33, 0x36, - 0x88, 0x86, 0x30, 0x00, 0x4f, 0x44, 0x22, 0x22, - 0x24, 0xff, 0xff, 0xff, 0x44, 0x00, 0x00, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x95, 0x22, 0x72, - 0x22, 0x18, 0x88, 0x86, 0x32, 0x22, 0x22, 0x27, - 0xaa, 0x11, 0x11, 0x1a, 0x31, 0x13, 0x33, 0x68, - 0x88, 0x6a, 0x00, 0x02, 0x4f, 0x4f, 0x42, 0x24, - 0x4f, 0xff, 0xff, 0xff, 0xf4, 0x50, 0x00, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x73, - 0x72, 0x26, 0x88, 0x88, 0x63, 0x22, 0x22, 0x22, - 0x11, 0x11, 0x11, 0xa3, 0xa1, 0x73, 0xa6, 0x88, - 0x81, 0xa5, 0x00, 0x04, 0x4f, 0x4f, 0x44, 0x4f, - 0xff, 0xff, 0xff, 0xff, 0xf4, 0x40, 0x00, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x12, 0x27, - 0xaa, 0x22, 0x68, 0x55, 0x86, 0x72, 0x22, 0x22, - 0x11, 0x11, 0x1a, 0x33, 0x13, 0x3a, 0x18, 0x88, - 0x1a, 0x10, 0x00, 0x44, 0x4f, 0x4f, 0xff, 0x4f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x61, 0x22, - 0x3a, 0xa2, 0x26, 0x85, 0x58, 0x67, 0x22, 0x22, - 0x61, 0x61, 0x1a, 0x7a, 0x37, 0x31, 0x88, 0x81, - 0x11, 0x00, 0x05, 0xe4, 0x44, 0xff, 0xff, 0xff, - 0x4f, 0xf4, 0x44, 0xff, 0xff, 0xf5, 0x00, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x12, - 0x2a, 0xaa, 0x72, 0x68, 0x55, 0x81, 0x22, 0x22, - 0x66, 0x61, 0xa3, 0x33, 0x73, 0x16, 0x88, 0x11, - 0x10, 0x00, 0x08, 0x74, 0x44, 0x4f, 0x44, 0x44, - 0xf4, 0xf4, 0x44, 0x44, 0xe2, 0x44, 0x00, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x81, - 0x22, 0xaa, 0xa7, 0x26, 0x85, 0x88, 0x12, 0x22, - 0x66, 0x61, 0x37, 0xa7, 0x3a, 0x66, 0x66, 0x11, - 0x80, 0x00, 0x0a, 0x72, 0x44, 0x4f, 0x44, 0x4f, - 0xff, 0x44, 0x44, 0x22, 0x22, 0x24, 0x00, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x85, 0x88, - 0x12, 0x2a, 0xaa, 0x22, 0x68, 0x58, 0x63, 0x22, - 0x66, 0x1a, 0x73, 0x77, 0x31, 0x66, 0x61, 0x11, - 0x00, 0x00, 0x07, 0x44, 0xff, 0x4f, 0xf4, 0x4f, - 0xff, 0x4f, 0x44, 0xf4, 0x42, 0x22, 0x40, 0x9b, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x85, 0x55, - 0x81, 0x27, 0xaa, 0xa2, 0x78, 0x88, 0x86, 0x72, - 0x66, 0x13, 0x77, 0x73, 0x11, 0x66, 0x61, 0x76, - 0x00, 0x50, 0x84, 0xf4, 0xff, 0x4f, 0xf4, 0xff, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x42, 0x40, 0x9b, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x68, 0x55, - 0x58, 0x12, 0x3a, 0xaa, 0x23, 0x88, 0x88, 0xa7, - 0x66, 0xa7, 0x77, 0x7a, 0x16, 0x66, 0x1a, 0x15, - 0x05, 0x00, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0x24, 0x9b, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x26, 0x55, - 0x55, 0x81, 0x23, 0xaa, 0x32, 0x18, 0x88, 0x6a, - 0x61, 0x37, 0x77, 0x31, 0x66, 0x66, 0x17, 0x60, - 0x05, 0x08, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4e, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0xa2, 0x65, - 0x55, 0x58, 0xa2, 0x7a, 0xa2, 0x26, 0x88, 0x61, - 0x61, 0x32, 0x27, 0xa1, 0x66, 0x61, 0x31, 0x60, - 0x00, 0x04, 0x4f, 0xf4, 0xff, 0x44, 0x44, 0xff, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99, - 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x9b, 0xaa, 0x26, - 0x55, 0x55, 0x87, 0x27, 0x33, 0x27, 0x68, 0x61, - 0x1a, 0x72, 0x27, 0xa6, 0x66, 0x6a, 0x71, 0x00, - 0x80, 0x84, 0xff, 0xf4, 0xff, 0x44, 0x44, 0xff, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99, - 0x9b, 0x9b, 0x99, 0xb9, 0xb9, 0x99, 0xaa, 0xa2, - 0x85, 0x55, 0x56, 0x22, 0x27, 0x22, 0x36, 0x66, - 0x13, 0x22, 0x23, 0x16, 0x86, 0x63, 0x73, 0x00, - 0x00, 0x44, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4f, 0x99, - 0x9b, 0x99, 0x99, 0x99, 0xb9, 0x99, 0xaa, 0xaa, - 0x28, 0x55, 0x58, 0x12, 0x22, 0x22, 0x21, 0x11, - 0xa3, 0x27, 0x7a, 0x66, 0x86, 0x17, 0x75, 0x05, - 0x05, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff, - 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x44, 0x4f, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x3a, 0xaa, - 0xa2, 0x85, 0x58, 0x67, 0x72, 0x22, 0x27, 0xa1, - 0x37, 0x27, 0x7a, 0x68, 0x86, 0xa2, 0x70, 0x00, - 0x02, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f, - 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xf4, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x23, 0xaa, - 0xa7, 0x78, 0x88, 0x81, 0x77, 0x22, 0x27, 0x3a, - 0x72, 0x73, 0x71, 0x68, 0x66, 0x32, 0x50, 0x00, - 0x04, 0x4f, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f, - 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x95, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x55, 0x12, 0x3a, - 0xaa, 0x21, 0x88, 0x81, 0x77, 0x27, 0x73, 0x73, - 0x72, 0x33, 0x36, 0x86, 0x61, 0x72, 0x00, 0x00, - 0x04, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x8a, 0x27, - 0xaa, 0x77, 0x68, 0x61, 0x23, 0x71, 0x11, 0x3a, - 0x27, 0xa3, 0x36, 0x86, 0x61, 0x20, 0x00, 0x00, - 0x04, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x59, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x95, 0x58, 0x77, - 0x27, 0x32, 0x36, 0x63, 0x23, 0x71, 0x66, 0x11, - 0x27, 0x13, 0xa6, 0x86, 0x6a, 0x20, 0x00, 0x50, - 0x04, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x99, - 0x9b, 0xbb, 0xbb, 0xbb, 0xb9, 0x99, 0x68, 0x13, - 0x32, 0x22, 0x73, 0xa7, 0x2a, 0x31, 0x88, 0x66, - 0x7a, 0x13, 0x18, 0x66, 0x63, 0x20, 0x00, 0x06, - 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f, - 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x49, 0x95, - 0xa9, 0xa9, 0x99, 0x97, 0x92, 0x99, 0x65, 0x6a, - 0x17, 0x22, 0x23, 0x72, 0x27, 0xaa, 0x88, 0x88, - 0xa1, 0x17, 0x68, 0x66, 0x67, 0x70, 0x00, 0x05, - 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f, - 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x49, 0x9c, - 0x2e, 0xee, 0xee, 0xee, 0xee, 0xa9, 0x65, 0x8a, - 0x1a, 0xaa, 0x37, 0x72, 0x27, 0x37, 0x88, 0x88, - 0x11, 0x17, 0x68, 0x66, 0x67, 0x10, 0x9d, 0xd0, - 0x84, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0xf4, 0x4f, - 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x4f, 0x69, - 0xcc, 0xee, 0xee, 0xee, 0xec, 0x99, 0x88, 0x63, - 0x61, 0x68, 0x61, 0x72, 0x22, 0x7a, 0x68, 0x88, - 0x11, 0x17, 0x88, 0x66, 0x12, 0x1b, 0xdd, 0xdd, - 0x02, 0x44, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f, - 0xff, 0x4f, 0x44, 0xff, 0xff, 0x4f, 0x4c, 0xc5, - 0x0c, 0xc1, 0x11, 0x1c, 0xc0, 0x26, 0x66, 0x17, - 0x66, 0x88, 0x88, 0x12, 0x22, 0x23, 0xa8, 0x88, - 0x11, 0x13, 0x88, 0x66, 0x17, 0xbb, 0xdd, 0xdd, - 0xd0, 0x8f, 0xff, 0xf4, 0xf4, 0x44, 0xf4, 0x4f, - 0xff, 0x4f, 0x44, 0xf4, 0x4f, 0x44, 0xdd, 0xdd, - 0x00, 0x00, 0x00, 0x05, 0x9d, 0x21, 0x66, 0x27, - 0xa6, 0x65, 0x58, 0x67, 0x22, 0x27, 0x28, 0x88, - 0x11, 0xaa, 0x86, 0x68, 0x1a, 0xbb, 0xdd, 0xdd, - 0xdb, 0x05, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x4f, - 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xdd, 0xdb, - 0x00, 0x00, 0x00, 0x00, 0xdd, 0xda, 0x66, 0x22, - 0x71, 0x15, 0x55, 0x81, 0x22, 0x22, 0x76, 0x88, - 0x11, 0x31, 0x88, 0x88, 0xab, 0xbd, 0xdd, 0xdd, - 0xdd, 0x00, 0x04, 0x44, 0xff, 0xff, 0x4f, 0x4f, - 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0x44, 0xdd, 0xdb, - 0x00, 0x00, 0x00, 0x0b, 0xdd, 0xda, 0x11, 0x22, - 0x23, 0x68, 0x55, 0x86, 0x22, 0x22, 0x7a, 0x88, - 0x1a, 0x71, 0x88, 0x89, 0xbb, 0xdd, 0xdd, 0xdd, - 0xdd, 0xd0, 0x00, 0x4f, 0x44, 0xff, 0x4f, 0x4f, - 0xff, 0x4f, 0x44, 0xf4, 0xff, 0xe2, 0xdd, 0xdb, - 0x90, 0x00, 0x05, 0xbd, 0xdd, 0xb8, 0x63, 0x22, - 0x27, 0xa6, 0x55, 0x88, 0x77, 0x22, 0x22, 0x88, - 0x1a, 0x28, 0xbd, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdb, 0x00, 0x07, 0x44, 0x4f, 0x4f, 0x4f, - 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x22, 0xdd, 0xdb, - 0xbb, 0x9b, 0xbb, 0xbd, 0xdd, 0xd5, 0x86, 0x22, - 0x22, 0x77, 0x85, 0x88, 0x17, 0x22, 0x22, 0x88, - 0xaa, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0x00, 0x00, 0x54, 0x4f, 0x4f, 0x4f, - 0xff, 0x4f, 0x44, 0xf4, 0x44, 0x22, 0xbd, 0xdd, - 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0x88, 0x72, - 0x27, 0x22, 0x88, 0x88, 0x67, 0x72, 0x22, 0x18, - 0x33, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xd0, 0x00, 0x05, 0x4f, 0x4f, 0x4f, - 0xff, 0x4f, 0x44, 0x44, 0x4f, 0x22, 0xbd, 0xdd, - 0xdb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd, 0x88, 0x17, - 0x27, 0x72, 0x68, 0x88, 0x87, 0x32, 0x22, 0x36, - 0x37, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xd5, 0x00, 0x00, 0x4f, 0x4f, 0x4f, - 0xff, 0xf4, 0xf4, 0xf4, 0xf4, 0x22, 0xbb, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x67, - 0x72, 0x77, 0x38, 0x88, 0x83, 0x37, 0x22, 0x26, - 0x72, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0x00, 0x00, 0x4f, 0x4f, 0x4f, - 0xff, 0xf4, 0xf4, 0xf4, 0x44, 0x25, 0xbb, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd3, - 0x32, 0x73, 0x76, 0x88, 0x81, 0x33, 0x22, 0x2a, - 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xb0, 0x54, 0x4f, 0x4f, 0x4f, - 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x00, 0xbb, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xa7, 0x73, 0x26, 0x88, 0x86, 0x7a, 0x72, 0x27, - 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0xff, 0x4f, 0x4f, - 0xff, 0xf4, 0xf4, 0x44, 0x40, 0x05, 0xbb, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0x13, 0x23, 0x21, 0x68, 0x86, 0x17, 0x72, 0x22, - 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0x4f, 0x4f, 0x4f, - 0xff, 0xff, 0x44, 0x42, 0x00, 0x05, 0xbd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0x87, 0x27, 0x27, 0x16, 0x66, 0x67, 0x22, 0x22, - 0x72, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0x94, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x00, 0x00, 0x05, 0xbb, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb8, - 0x86, 0x22, 0x22, 0x7a, 0x68, 0x81, 0x22, 0x22, - 0x37, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x44, 0x44, 0x44, - 0x44, 0x47, 0x00, 0x00, 0x00, 0x05, 0xbd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x68, - 0x58, 0x72, 0x22, 0x27, 0x18, 0x86, 0x72, 0x22, - 0x1a, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x18, 0x85, - 0x58, 0x12, 0x22, 0x36, 0x18, 0x88, 0x32, 0x22, - 0x61, 0x3b, 0xbb, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x7a, 0x68, 0x85, - 0x88, 0x62, 0x27, 0x16, 0x18, 0x88, 0x12, 0x27, - 0x86, 0x18, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, - 0xdd, 0xdd, 0xdd, 0xbb, 0xb5, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xbb, 0xbd, - 0xdd, 0xdd, 0xdb, 0xbb, 0x87, 0x31, 0x68, 0x65, - 0x88, 0x82, 0x23, 0x16, 0x18, 0x88, 0x12, 0x23, - 0x88, 0x67, 0x27, 0xa8, 0x9b, 0xbb, 0xbb, 0xbb, - 0xbd, 0xdd, 0xbb, 0xbb, 0x95, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x9b, 0xbb, - 0xbb, 0xbb, 0xbb, 0x96, 0x87, 0x16, 0x68, 0x18, - 0x88, 0x62, 0x31, 0x66, 0x18, 0x88, 0x62, 0x73, - 0x88, 0x63, 0x27, 0x33, 0x65, 0x55, 0x99, 0x9b, - 0xbb, 0xbb, 0xbb, 0x99, 0x55, 0x0a, 0xa1, 0x86, - 0x81, 0x68, 0x88, 0x55, 0x58, 0x85, 0x9b, 0xbb, - 0xbb, 0xbb, 0x95, 0x88, 0x83, 0x66, 0x66, 0x18, - 0x66, 0x82, 0xa1, 0x66, 0x18, 0x88, 0x62, 0x33, - 0x88, 0x81, 0x27, 0x7a, 0x18, 0x58, 0x86, 0x85, - 0x99, 0x99, 0x99, 0x95, 0x53, 0x2a, 0xaa, 0x88, - 0x67, 0x31, 0x68, 0x55, 0x58, 0x85, 0x59, 0xbb, - 0xbb, 0xb9, 0x58, 0x68, 0x83, 0x66, 0x61, 0x16, - 0x66, 0x62, 0x16, 0x66, 0x68, 0x88, 0x62, 0xaa, - 0x88, 0x86, 0x27, 0x77, 0x78, 0x55, 0x88, 0x22, - 0x25, 0x55, 0x95, 0x55, 0x6a, 0xa2, 0x2a, 0x88, - 0x62, 0x27, 0x37, 0x38, 0x88, 0x87, 0x55, 0x59, - 0x95, 0x58, 0x16, 0x88, 0x8a, 0x66, 0x63, 0x68, - 0x86, 0x67, 0x66, 0x66, 0x68, 0x88, 0x12, 0x11, - 0x88, 0x88, 0x72, 0x77, 0x78, 0x85, 0x58, 0x17, - 0x23, 0x32, 0x55, 0x55, 0x81, 0x13, 0x73, 0x66, - 0x62, 0x7a, 0xaa, 0x38, 0x88, 0x58, 0x27, 0x55, - 0x58, 0x32, 0x38, 0x88, 0x81, 0x66, 0xa2, 0x88, - 0x86, 0x61, 0x66, 0x61, 0x66, 0x68, 0x13, 0x11, - 0x88, 0x88, 0x12, 0x22, 0x71, 0x85, 0x58, 0x62, - 0x23, 0xa2, 0x68, 0x88, 0x81, 0x66, 0x88, 0x88, - 0x63, 0x2a, 0xaa, 0x28, 0x88, 0x55, 0x86, 0x61, - 0x66, 0x66, 0x68, 0x88, 0x66, 0x66, 0x77, 0x88, - 0x68, 0x16, 0x66, 0x62, 0x66, 0x68, 0xa1, 0x61, - 0x88, 0x88, 0x62, 0x22, 0x22, 0x85, 0x55, 0x83, - 0x72, 0x37, 0xa8, 0x88, 0x61, 0x66, 0x85, 0x55, - 0x86, 0x23, 0xaa, 0x71, 0x88, 0x85, 0x88, 0x66, - 0x88, 0x86, 0x88, 0x88, 0x16, 0x61, 0x21, 0x88, - 0x66, 0xa6, 0x86, 0x17, 0x66, 0x66, 0x31, 0x61, - 0x88, 0x88, 0x87, 0x72, 0x22, 0x68, 0x55, 0x86, - 0x77, 0x77, 0x36, 0x88, 0x13, 0x68, 0x85, 0x55, - 0x58, 0x12, 0x73, 0x72, 0x76, 0x88, 0x88, 0x68, - 0x88, 0x88, 0x88, 0x66, 0x36, 0x63, 0x26, 0x86, - 0x86, 0x36, 0x86, 0x11, 0x66, 0x66, 0x76, 0x61, - 0x88, 0x88, 0x81, 0x22, 0x22, 0x38, 0x85, 0x58, - 0x37, 0x22, 0x21, 0x68, 0xa2, 0x31, 0x68, 0x55, - 0x55, 0x81, 0x22, 0x22, 0xa8, 0x88, 0x88, 0x68, - 0x86, 0x88, 0x68, 0x81, 0x36, 0x17, 0x21, 0x68, - 0x86, 0x16, 0x66, 0x26, 0x66, 0x61, 0x36, 0x66, - 0x68, 0x88, 0x86, 0x27, 0x22, 0x28, 0x88, 0x88, - 0x17, 0x72, 0x2a, 0x66, 0xa2, 0x22, 0x36, 0x55, - 0x55, 0x58, 0x37, 0x3a, 0x16, 0x66, 0x66, 0x66, - 0x66, 0x18, 0x88, 0x67, 0x16, 0x12, 0x71, 0x68, - 0x81, 0x68, 0x61, 0x76, 0x66, 0x6a, 0x16, 0x66, - 0x88, 0x88, 0x86, 0x77, 0x22, 0x26, 0x88, 0x88, - 0x13, 0x37, 0x71, 0x66, 0xa2, 0x33, 0x2a, 0x85, - 0x55, 0x55, 0x17, 0x73, 0x16, 0x66, 0x66, 0x68, - 0x63, 0x88, 0x88, 0xa2, 0x66, 0xa2, 0xa6, 0x88, - 0x61, 0x68, 0x6a, 0x76, 0x66, 0x6a, 0x66, 0x6a -}; +#ifdef INCLUDE_LINUX_LOGO_DATA + +#define INCLUDE_LINUX_LOGOBW +#define INCLUDE_LINUX_LOGO16 +#include <linux/linux_logo.h> #else diff --git a/include/asm-m68k/mac_psc.h b/include/asm-m68k/mac_psc.h new file mode 100644 index 000000000..de22bbefe --- /dev/null +++ b/include/asm-m68k/mac_psc.h @@ -0,0 +1,73 @@ +/* + * Apple Peripheral System Controller (PSC) + * + * The PSC is used on the AV Macs to control IO functions not handled + * by the VIAs (Ethernet, DSP, SCC). + */ + +#define PSCBASE 0x50F31000 + +/* + * The IER/IFR registers work like the VIA, except that it has 4 + * of them each on different interrupt levels. + */ + +#define pIFR3 0x130 +#define pIFR4 0x140 +#define pIFR5 0x150 +#define pIFR6 0x160 + +#define pIER3 0x134 +#define pIER4 0x144 +#define pIER5 0x154 +#define pIER6 0x164 + +/* + * Ethernet Control Registers + */ + +#define PSC_ENETRD_CTL 0xc10 +#define PSC_ENETWR_CTL 0xc20 + +/* + * Receive DMA channel (add +0x10 for 2nd channel) + */ + +#define PSC_ENETRD_ADDR 0x1020 +#define PSC_ENETRD_LEN 0x1024 +#define PSC_ENETRD_CMD 0x1028 + +/* + * Transmit DMA channel (add +0x10 for 2nd channel) + */ + +#define PSC_ENETWR_ADDR 0x1040 +#define PSC_ENETWR_LEN 0x1044 +#define PSC_ENETWR_CMD 0x1048 + +/* + * Access functions + */ + +extern volatile unsigned char *psc; + +extern inline void psc_write_word(int offset, u16 data) +{ + *((volatile u16 *)(psc+offset)) = data; +} + +extern inline void psc_write_long(int offset, u32 data) +{ + *((volatile u32 *)(psc+offset)) = data; +} + +extern inline u16 psc_read_word(int offset) +{ + return *((volatile u16 *)(psc+offset)); +} + +extern inline u32 psc_read_long(int offset) +{ + return *((volatile u32 *)(psc+offset)); +} + diff --git a/include/asm-m68k/machdep.h b/include/asm-m68k/machdep.h index 5e2b138e9..2d8959093 100644 --- a/include/asm-m68k/machdep.h +++ b/include/asm-m68k/machdep.h @@ -37,6 +37,7 @@ extern long mach_max_dma_address; extern void (*mach_floppy_setup)(char *, int *); extern void (*mach_floppy_eject)(void); extern void (*mach_heartbeat) (int); +extern void (*mach_l2_flush) (int); extern int mach_sysrq_key; extern int mach_sysrq_shift_state; extern int mach_sysrq_shift_mask; diff --git a/include/asm-m68k/macintosh.h b/include/asm-m68k/macintosh.h index a084447f5..28dad71ca 100644 --- a/include/asm-m68k/macintosh.h +++ b/include/asm-m68k/macintosh.h @@ -80,6 +80,7 @@ struct mac_model #define MAC_ETHER_NONE 0 #define MAC_ETHER_SONIC 1 +#define MAC_ETHER_MACE 2 #define MAC_NO_NUBUS 0 #define MAC_NUBUS 1 @@ -99,48 +100,48 @@ struct mac_model #define MAC_MODEL_Q900 20 #define MAC_MODEL_PB170 21 #define MAC_MODEL_Q700 22 -#define MAC_MODEL_CLII 23 +#define MAC_MODEL_CLII 23 /* aka: P200 */ #define MAC_MODEL_PB140 25 -#define MAC_MODEL_Q950 26 +#define MAC_MODEL_Q950 26 /* aka: WGS95 */ #define MAC_MODEL_LCIII 27 /* aka: P450 */ #define MAC_MODEL_PB210 29 #define MAC_MODEL_C650 30 #define MAC_MODEL_PB230 32 #define MAC_MODEL_PB180 33 #define MAC_MODEL_PB160 34 -#define MAC_MODEL_Q800 35 +#define MAC_MODEL_Q800 35 /* aka: WGS80 */ #define MAC_MODEL_Q650 36 #define MAC_MODEL_LCII 37 /* aka: P400/405/410/430 */ #define MAC_MODEL_PB250 38 #define MAC_MODEL_IIVI 44 -#define MAC_MODEL_P600 45 +#define MAC_MODEL_P600 45 /* aka: P600CD */ #define MAC_MODEL_IIVX 48 -#define MAC_MODEL_CCL 49 +#define MAC_MODEL_CCL 49 /* aka: P250 */ #define MAC_MODEL_PB165C 50 -#define MAC_MODEL_C610 52 +#define MAC_MODEL_C610 52 /* aka: WGS60 */ #define MAC_MODEL_Q610 53 -#define MAC_MODEL_PB145 54 +#define MAC_MODEL_PB145 54 /* aka: PB145B */ #define MAC_MODEL_P520 56 /* aka: LC520 */ #define MAC_MODEL_C660 60 -#define MAC_MODEL_P460 62 /* aka: LCIII+, P466/7 */ +#define MAC_MODEL_P460 62 /* aka: LCIII+, P466/P467 */ #define MAC_MODEL_PB180C 71 -#define MAC_MODEL_PB520 72 +#define MAC_MODEL_PB520 72 /* aka: PB520C, PB540, PB540C, PB550C */ #define MAC_MODEL_PB270C 77 #define MAC_MODEL_Q840 78 -#define MAC_MODEL_P550 80 -#define MAC_MODEL_CCLII 83 +#define MAC_MODEL_P550 80 /* aka: LC550, P560 */ +#define MAC_MODEL_CCLII 83 /* aka: P275 */ #define MAC_MODEL_PB165 84 -#define MAC_MODEL_PB190 85 #define MAC_MODEL_TV 88 #define MAC_MODEL_P475 89 /* aka: LC475, P476 */ #define MAC_MODEL_P475F 90 /* aka: P475 w/ FPU (no LC040) */ -#define MAC_MODEL_P575 92 /* aka: LC575/580, P577/578/508 */ +#define MAC_MODEL_P575 92 /* aka: LC575, P577/P578 */ #define MAC_MODEL_Q605 94 -#define MAC_MODEL_Q630 98 /* aka: LC630, P630/631/636/640 */ -#define MAC_MODEL_P588 99 /* aka: ?? */ +#define MAC_MODEL_Q630 98 /* aka: LC630, P630/631/635/636/637/638/640 */ +#define MAC_MODEL_P588 99 /* aka: LC580, P580 */ #define MAC_MODEL_PB280 102 #define MAC_MODEL_PB280C 103 #define MAC_MODEL_PB150 115 +#define MAC_MODEL_PB190 122 /* aka: PB190CS */ extern struct mac_model *macintosh_config; diff --git a/include/asm-m68k/namei.h b/include/asm-m68k/namei.h index d01ddf852..7b4f02680 100644 --- a/include/asm-m68k/namei.h +++ b/include/asm-m68k/namei.h @@ -12,7 +12,7 @@ * Look at asm-sparc/namei.h for details. */ -#define __prefix_lookup_dentry(name, follow_link) \ +#define __prefix_lookup_dentry(name, lookup_flags) \ do {} while (0) #endif diff --git a/include/asm-m68k/serial.h b/include/asm-m68k/serial.h index 191c5d551..a5f0abeb3 100644 --- a/include/asm-m68k/serial.h +++ b/include/asm-m68k/serial.h @@ -336,9 +336,21 @@ static __inline__ void rs_receive_char( struct m68k_async_struct *info, if (tty->flip.count >= TTY_FLIPBUF_SIZE) return; tty->flip.count++; - if (err == TTY_BREAK) { + switch(err) { + case TTY_BREAK: + info->icount.brk++; if (info->flags & ASYNC_SAK) do_SAK(tty); + break; + case TTY_PARITY: + info->icount.parity++; + break; + case TTY_OVERRUN: + info->icount.overrun++; + break; + case TTY_FRAME: + info->icount.frame++; + break; } *tty->flip.flag_buf_ptr++ = err; *tty->flip.char_buf_ptr++ = ch; diff --git a/include/asm-m68k/stat.h b/include/asm-m68k/stat.h index 2e35a9e82..919520ff1 100644 --- a/include/asm-m68k/stat.h +++ b/include/asm-m68k/stat.h @@ -38,42 +38,4 @@ struct stat { unsigned long __unused5; }; -#if 0 -typedef struct { - unsigned int major; - unsigned int minor; -} __new_dev_t; - -struct stat64 { - __new_dev_t st_dev; - __u64 st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - __new_dev_t st_rdev; - __s64 st_size; - __u64 st_blocks; - unsigned long st_atime; - unsigned long __unused1; - unsigned long st_mtime; - unsigned long __unused2; - unsigned long st_ctime; - unsigned long __unused3; - unsigned long st_blksize; - unsigned long __unused4; -}; -#endif - -#define __XSTAT_VER_1 1 -#define __XSTAT_VER_2 2 -#define __XSTAT_VER_MASK 0xff - -#define __XSTAT_VER_XSTAT 0x000 -#define __XSTAT_VER_LXSTAT 0x100 -#define __XSTAT_VER_FXSTAT 0x200 -#define __XSTAT_VER_TYPEMASK 0xff00 - -#define __XMKNOD_VER_1 1 - #endif /* _M68K_STAT_H */ diff --git a/include/asm-m68k/termios.h b/include/asm-m68k/termios.h index 24408872e..b17fed223 100644 --- a/include/asm-m68k/termios.h +++ b/include/asm-m68k/termios.h @@ -55,7 +55,9 @@ struct termio { #define N_AX25 5 #define N_X25 6 /* X.25 async */ #define N_6PACK 7 -#define N_MASC 8 /* Reserved fo Mobitex module <kaz@cafe.net> */ +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ +#define N_R3964 9 /* Reserved for Simatic R3964 module */ +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ #ifdef __KERNEL__ diff --git a/include/asm-m68k/unistd.h b/include/asm-m68k/unistd.h index 2bfda1a3c..2ad5c196c 100644 --- a/include/asm-m68k/unistd.h +++ b/include/asm-m68k/unistd.h @@ -5,7 +5,6 @@ * This file contains the system call numbers. */ -#define __NR_setup 0 /* used only by init, to get system going */ #define __NR_exit 1 #define __NR_fork 2 #define __NR_read 3 @@ -192,8 +191,8 @@ #define __NR_capset 185 #define __NR_sigaltstack 186 #define __NR_sendfile 187 -#define __NR_streams1 188 /* some people actually want it */ -#define __NR_streams2 189 /* some people actually want it */ +#define __NR_getpmsg 188 /* some people actually want streams */ +#define __NR_putpmsg 189 /* some people actually want streams */ /* user-visible error numbers are in the range -1 - -122: see <asm-m68k/errno.h> */ @@ -311,7 +310,6 @@ __syscall_return(type,__res); \ #define __NR__exit __NR_exit static inline _syscall0(int,idle) static inline _syscall0(int,pause) -static inline _syscall1(int,setup,int,magic) static inline _syscall0(int,sync) static inline _syscall0(pid_t,setsid) static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count) diff --git a/include/asm-m68k/xstat.h b/include/asm-m68k/xstat.h deleted file mode 100644 index a0374fcfd..000000000 --- a/include/asm-m68k/xstat.h +++ /dev/null @@ -1,35 +0,0 @@ -/* $Id: xstat.h,v 1.1 1998/02/06 12:51:30 jj Exp $ - * xstat.h: sys_xstat/xmknod architecture dependent stuff. - * - * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) - */ - -extern __inline__ int cp_xstat(struct inode *inode, struct stat64 *s, unsigned long blocks, int blksize) -{ - struct stat64 tmp; - - memset (&tmp, 0, sizeof(tmp)); - tmp.st_dev.major = MAJOR(inode->i_dev); - tmp.st_dev.minor = MINOR(inode->i_dev); - tmp.st_ino = inode->i_ino; - tmp.st_mode = inode->i_mode; - tmp.st_nlink = inode->i_nlink; - tmp.st_uid = inode->i_uid; - tmp.st_gid = inode->i_gid; - tmp.st_rdev.major = MAJOR(inode->i_rdev); - tmp.st_rdev.minor = MINOR(inode->i_rdev); - tmp.st_size = inode->i_size; - tmp.st_blksize = blksize; - tmp.st_blocks = blocks; - tmp.st_atime = inode->i_atime; - tmp.st_mtime = inode->i_mtime; - tmp.st_ctime = inode->i_ctime; - return copy_to_user(s,&tmp,sizeof(tmp)); -} - -extern __inline__ int get_user_new_dev_t(kdev_t *kdev, __new_dev_t *udev) { - __new_dev_t ndev; - if (copy_from_user (&ndev, udev, sizeof(__new_dev_t))) return -EFAULT; - *kdev = MKDEV(ndev.major, ndev.minor); - return 0; -} diff --git a/include/asm-mips/bootinfo.h b/include/asm-mips/bootinfo.h index dc2b1c2fa..cd812982a 100644 --- a/include/asm-mips/bootinfo.h +++ b/include/asm-mips/bootinfo.h @@ -1,4 +1,4 @@ -/* $Id: bootinfo.h,v 1.4 1998/08/25 09:21:55 ralf Exp $ +/* $Id: bootinfo.h,v 1.5 1998/10/18 13:23:45 tsbogend Exp $ * * bootinfo.h -- Definition of the Linux/MIPS boot information structure * @@ -157,8 +157,8 @@ typedef struct mips_arc_DisplayInfo { /* video adapter information */ #define DEFAULT_SCREEN_INFO {0, 0, 0, 0, 0, 160, 0, 0, 0, 64, 0, 16} #define DEFAULT_DRIVE_INFO { {0,}} #else -/* default values for screen_info variable */ -#define DEFAULT_SCREEN_INFO {0, 0, 0, 52, 3, 80, 4626, 3, 9, 50} +/* default values for screen_info variable (Colour VGA) */ +#define DEFAULT_SCREEN_INFO {0, 0, 0, 52, 3, 80, 4626, 3, 9, 50, 0x22, 16} #endif /* default values for drive info */ diff --git a/include/asm-mips/byteorder.h b/include/asm-mips/byteorder.h index 28f6376db..b9604cf20 100644 --- a/include/asm-mips/byteorder.h +++ b/include/asm-mips/byteorder.h @@ -1,8 +1,25 @@ +/* $Id: byteorder.h,v 1.8 1998/11/02 09:29:32 ralf Exp $ + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) by Ralf Baechle + */ #ifndef _MIPS_BYTEORDER_H #define _MIPS_BYTEORDER_H #include <asm/types.h> +#ifdef __GNUC__ + +#if !defined(__STRICT_ANSI__) || defined(__KERNEL__) +# define __BYTEORDER_HAS_U64__ +# define __SWAB_64_THRU_32__ +#endif + +#endif /* __GNUC__ */ + #if defined (__MIPSEB__) # include <linux/byteorder/big_endian.h> #elif defined (__MIPSEL__) diff --git a/include/asm-mips/delay.h b/include/asm-mips/delay.h index ec2ad70f3..0f5660a83 100644 --- a/include/asm-mips/delay.h +++ b/include/asm-mips/delay.h @@ -1,3 +1,12 @@ +/* $Id: delay.h,v 1.3 1998/10/27 21:46:33 ralf Exp $ + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 1994 by Waldorf Electronics + * Copyright (C) 1995 - 1998 by Ralf Baechle + */ #ifndef __ASM_MIPS_DELAY_H #define __ASM_MIPS_DELAY_H @@ -25,7 +34,7 @@ extern __inline__ void __delay(int loops) extern __inline__ void __udelay(unsigned long usecs, unsigned long lps) { usecs *= 0x000010c6; /* 2**32 / 1000000 */ - __asm__("multu\t%0,%1\n\t" + __asm__("multu\t%0,%2\n\t" "mfhi\t%0" :"=r" (usecs) :"0" (usecs),"r" (lps)); @@ -40,13 +49,4 @@ extern __inline__ void __udelay(unsigned long usecs, unsigned long lps) #define udelay(usecs) __udelay((usecs),__udelay_val) -/* - * The different variants for 32/64 bit are pure paranoia. The typical - * range of numbers that appears for MIPS machines avoids overflows. - */ -extern __inline__ unsigned long muldiv(unsigned long a, unsigned long b, unsigned long c) -{ - return (a*b)/c; -} - #endif /* __ASM_MIPS_DELAY_H */ diff --git a/include/asm-mips/dma.h b/include/asm-mips/dma.h index 320022c76..1432efa8e 100644 --- a/include/asm-mips/dma.h +++ b/include/asm-mips/dma.h @@ -1,4 +1,4 @@ -/* $Id: dma.h,v 1.7 1992/12/14 00:29:34 root Exp root $ +/* $Id: dma.h,v 1.4 1998/11/15 03:25:44 ralf Exp $ * linux/include/asm/dma.h: Defines for using and allocating dma channels. * Written by Hennus Bergman, 1992. * High DMA channel support & info by Hannu Savolainen @@ -14,6 +14,9 @@ #include <linux/config.h> #include <asm/io.h> /* need byte IO */ +#include <asm/spinlock.h> /* And spinlocks */ +#include <linux/delay.h> +#include <asm/system.h> #ifdef HAVE_REALLY_SLOW_DMA_CONTROLLER @@ -143,6 +146,21 @@ #define DMA_MODE_WRITE 0x48 /* memory to I/O, no autoinit, increment, single mode */ #define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */ + +extern spinlock_t dma_spin_lock; + +static __inline__ unsigned long claim_dma_lock(void) +{ + unsigned long flags; + spin_lock_irqsave(&dma_spin_lock, flags); + return flags; +} + +static __inline__ void release_dma_lock(unsigned long flags) +{ + spin_unlock_irqrestore(&dma_spin_lock, flags); +} + /* enable/disable a specific DMA channel */ static __inline__ void enable_dma(unsigned int dmanr) { @@ -165,7 +183,7 @@ static __inline__ void disable_dma(unsigned int dmanr) * Use this once to initialize the FF to a known state. * After that, keep track of it. :-) * --- In order to do that, the DMA routines below should --- - * --- only be used while interrupts are disabled! --- + * --- only be used while holding the DMA lock ! --- */ static __inline__ void clear_dma_ff(unsigned int dmanr) { diff --git a/include/asm-mips/fcntl.h b/include/asm-mips/fcntl.h index f67501e17..02b0c7dae 100644 --- a/include/asm-mips/fcntl.h +++ b/include/asm-mips/fcntl.h @@ -1,4 +1,4 @@ -/* $Id: fcntl.h,v 1.3 1998/08/29 20:41:02 ralf Exp $ +/* $Id: fcntl.h,v 1.4 1998/09/19 19:19:36 ralf Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive @@ -25,6 +25,8 @@ #define FASYNC 0x1000 /* fcntl, for BSD compatibility */ #define O_LARGEFILE 0x2000 /* allow large file opens - currently ignored */ #define O_DIRECT 0x8000 /* direct disk access hint - currently ignored */ +#define O_DIRECTORY 0x10000 /* must be a directory */ +#define O_NOFOLLOW 0x20000 /* don't follow links */ #define O_NDELAY O_NONBLOCK diff --git a/include/asm-mips/floppy.h b/include/asm-mips/floppy.h index 39a68b582..a1343749d 100644 --- a/include/asm-mips/floppy.h +++ b/include/asm-mips/floppy.h @@ -1,4 +1,4 @@ -/* $Id: floppy.h,v 1.4 1997/12/01 18:00:37 ralf Exp $ +/* $Id: floppy.h,v 1.5 1998/06/30 00:23:09 ralf Exp $ * * Architecture specific parts of the Floppy driver * @@ -11,7 +11,6 @@ #ifndef __ASM_MIPS_FLOPPY_H #define __ASM_MIPS_FLOPPY_H -#include <linux/config.h> #include <asm/bootinfo.h> #include <asm/jazz.h> #include <asm/jazzdma.h> diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index 2319c27c9..bc9390c2a 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h @@ -140,18 +140,21 @@ extern inline void iounmap(void *addr) /* * XXX We need system specific versions of these to handle EISA address bits * 24-31 on SNI. + * XXX more SNI hacks. */ -#define readb(addr) (*(volatile unsigned char *) (isa_slot_offset + (unsigned long)(addr))) -#define readw(addr) (*(volatile unsigned short *) (isa_slot_offset + (unsigned long)(addr))) -#define readl(addr) (*(volatile unsigned int *) (isa_slot_offset + (unsigned long)(addr))) +#define readb(addr) (*(volatile unsigned char *) (0xa0000000 + (unsigned long)(addr))) +#define readw(addr) (*(volatile unsigned short *) (0xa0000000 + (unsigned long)(addr))) +#define readl(addr) (*(volatile unsigned int *) (0xa0000000 + (unsigned long)(addr))) -#define writeb(b,addr) (*(volatile unsigned char *) (isa_slot_offset + (unsigned long)(addr)) = (b)) -#define writew(b,addr) (*(volatile unsigned short *) (isa_slot_offset + (unsigned long)(addr)) = (b)) -#define writel(b,addr) (*(volatile unsigned int *) (isa_slot_offset + (unsigned long)(addr)) = (b)) +#define writeb(b,addr) (*(volatile unsigned char *) (0xa0000000 + (unsigned long)(addr)) = (b)) +#define writew(b,addr) (*(volatile unsigned short *) (0xa0000000 + (unsigned long)(addr)) = (b)) +#define writel(b,addr) (*(volatile unsigned int *) (0xa0000000 + (unsigned long)(addr)) = (b)) -#define memset_io(a,b,c) memset((void *)(isa_slot_offset + (unsigned long)a),(b),(c)) -#define memcpy_fromio(a,b,c) memcpy((a),(void *)(isa_slot_offset + (unsigned long)(b)),(c)) -#define memcpy_toio(a,b,c) memcpy((void *)(isa_slot_offset + (unsigned long)(a)),(b),(c)) +#define memset_io(a,b,c) memset((void *)(0xa0000000 + (unsigned long)a),(b),(c)) +#define memcpy_fromio(a,b,c) memcpy((a),(void *)(0xa0000000 + (unsigned long)(b)),(c)) +#define memcpy_toio(a,b,c) memcpy((void *)(0xa0000000 + (unsigned long)(a)),(b),(c)) + +/* END SNI HACKS ... */ /* * We don't have csum_partial_copy_fromio() yet, so we cheat here and diff --git a/include/asm-mips/irq.h b/include/asm-mips/irq.h index ce3f5fdbe..2d783fd5a 100644 --- a/include/asm-mips/irq.h +++ b/include/asm-mips/irq.h @@ -1,4 +1,4 @@ -/* $Id: irq.h,v 1.4 1998/05/28 03:18:13 ralf Exp $ +/* $Id: irq.h,v 1.4 1998/06/30 00:23:10 ralf Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive @@ -10,9 +10,6 @@ #ifndef __ASM_MIPS_IRQ_H #define __ASM_MIPS_IRQ_H -/* - * Actually this is a lie but we hide the local device's interrupts ... - */ #define NR_IRQS 64 #define TIMER_IRQ 0 @@ -20,19 +17,10 @@ extern int (*irq_cannonicalize)(int irq); struct irqaction; -extern int setup_x86_irq(int irq, struct irqaction * new); +extern int i8259_setup_irq(int irq, struct irqaction * new); extern void disable_irq(unsigned int); extern void enable_irq(unsigned int); -extern unsigned int local_irq_count[]; - -#ifdef __SMP__ -#error Send superfluous SMP boxes to ralf@uni-koblenz.de -#else -#define irq_enter(cpu, irq) (++local_irq_count[cpu]) -#define irq_exit(cpu, irq) (--local_irq_count[cpu]) -#endif - /* Machine specific interrupt initialization */ extern void (*irq_setup)(void); diff --git a/include/asm-mips/keyboard.h b/include/asm-mips/keyboard.h index d6cc1fbfc..2b1901a9e 100644 --- a/include/asm-mips/keyboard.h +++ b/include/asm-mips/keyboard.h @@ -5,7 +5,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * $Id: keyboard.h,v 1.10 1998/08/26 22:12:32 tsbogend Exp $ + * $Id: keyboard.h,v 1.11 1998/09/19 19:19:37 ralf Exp $ */ #ifndef __ASM_MIPS_KEYBOARD_H #define __ASM_MIPS_KEYBOARD_H @@ -17,6 +17,8 @@ #include <linux/ioport.h> #include <asm/bootinfo.h> +#define DISABLE_KBD_DURING_INTERRUPTS 0 + extern int pckbd_setkeycode(unsigned int scancode, unsigned int keycode); extern int pckbd_getkeycode(unsigned int scancode); extern int pckbd_pretranslate(unsigned char scancode, char raw_mode); @@ -41,60 +43,36 @@ extern unsigned char pckbd_sysrq_xlate[128]; /* Some stoneage hardware needs delays after some operations. */ #define kbd_pause() do { } while(0) -/* Pointers to keyboard hardware access and init functions. */ -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); - -void (*keyboard_setup)(void); - -#ifdef CONFIG_MIPS_JAZZ - -extern int jazz_ps2_request_irq(void); -extern void jazz_ps2_free_irq(void); - -#define ps2_request_irq() jazz_ps2_request_irq() -#define ps2_free_irq(inode) jazz_ps2_free_irq() - -#endif /* CONFIG_MIPS_JAZZ */ - -#ifdef CONFIG_SGI - -#define DISABLE_KBD_DURING_INTERRUPTS 1 - -/* - * Machine specific bits for the PS/2 driver. - * Aux device and keyboard share the interrupt on the Indy. - */ -#define ps2_request_irq() 0 -#define ps2_free_irq(void) do { } while(0); +struct kbd_ops { + /* Keyboard driver resource allocation */ + void (*kbd_request_region)(void); + int (*kbd_request_irq)(void (*handler)(int, void *, struct pt_regs *)); -#endif /* CONFIG_SGI */ + /* PSaux driver resource managment */ + int (*aux_request_irq)(void (*handler)(int, void *, struct pt_regs *)); + void (*aux_free_irq)(void); -#if defined(CONFIG_ACER_PICA_61) || defined(CONFIG_SNI_RM200_PCI) -#define CONF_KEYBOARD_USES_IO_PORTS -#endif + /* 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); +}; -#ifdef CONF_KEYBOARD_USES_IO_PORTS -/* - * Most other MIPS machines access the keyboard controller via - * memory mapped I/O ports. - */ -#include <asm/io.h> +extern struct kbd_ops *kbd_ops; -/* - * Machine specific bits for the PS/2 driver - */ - -#define AUX_IRQ 12 +/* 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 ps2_request_irq() \ - request_irq(AUX_IRQ, aux_interrupt, 0, "PS/2 Mouse", NULL) +#define aux_request_irq(hand, dev_id) kbd_ops->aux_request_irq(hand) +#define aux_free_irq(dev_id) kbd_ops->aux_free_irq() -#define ps2_free_irq(inode) free_irq(AUX_IRQ, NULL) - -#endif /* CONF_KEYBOARD_USES_IO_PORTS */ +#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() #endif /* __KERNEL */ + #endif /* __ASM_MIPS_KEYBOARD_H */ diff --git a/include/asm-mips/linux_logo.h b/include/asm-mips/linux_logo.h index cf54ec3cf..31450dbeb 100644 --- a/include/asm-mips/linux_logo.h +++ b/include/asm-mips/linux_logo.h @@ -1,10 +1,10 @@ -/* $Id: linux_logo.h,v 1.2 1998/08/28 23:23:12 tsbogend Exp $ +/* $Id: linux_logo.h,v 1.3 1998/09/19 19:19:38 ralf Exp $ * * include/asm-mips/linux_logo.h: This is a linux logo - * to be displayed on boot. + * 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) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) * * You can put anything here, but: * LINUX_LOGO_COLORS has to be less than 224 @@ -24,32 +24,906 @@ #define linux_logo_banner "Linux/MIPS version " UTS_RELEASE -#define LINUX_LOGO_COLORS 221 +#define LINUX_LOGO_COLORS 212 #ifdef INCLUDE_LINUX_LOGO_DATA -#define INCLUDE_LINUX_LOGO16 -#include <linux/linux_logo.h> +unsigned char linux_logo_red[] __initdata = { + 0x03, 0x82, 0xE9, 0xBF, 0x42, 0xC9, 0x7E, 0xC0, + 0xE9, 0xE3, 0xC2, 0x24, 0xA4, 0x65, 0xEC, 0xC4, + 0x82, 0x9F, 0xF3, 0x12, 0x5F, 0xA0, 0xC2, 0xED, + 0x3E, 0xD5, 0xDB, 0xA0, 0x1C, 0xF4, 0xEB, 0xA4, + 0xCD, 0x0A, 0x9A, 0x51, 0xCC, 0xBE, 0xC0, 0xBA, + 0x74, 0xDC, 0xAA, 0xF6, 0xD3, 0xC5, 0xE6, 0x26, + 0xC2, 0x83, 0x38, 0xEA, 0x49, 0xB0, 0xED, 0xE5, + 0xF4, 0x96, 0x96, 0x1B, 0xFA, 0xCC, 0xF2, 0x0F, + 0xCD, 0xE5, 0xF4, 0xD3, 0x50, 0x7A, 0xB5, 0xDE, + 0xD5, 0xB6, 0x60, 0x0A, 0x6A, 0xEA, 0xD4, 0xEB, + 0xC1, 0xCA, 0xEA, 0xEC, 0x2A, 0x96, 0x95, 0xDC, + 0xE4, 0xCE, 0xEC, 0x1E, 0xDC, 0x8A, 0xD1, 0xF6, + 0x3C, 0x5E, 0xC6, 0xB4, 0xB2, 0xAC, 0xBA, 0x9E, + 0x0F, 0x59, 0xBA, 0xFA, 0xCC, 0xBF, 0x82, 0xCE, + 0xE6, 0x4F, 0xAA, 0x4C, 0xCA, 0x8E, 0x8E, 0xDF, + 0x2C, 0xB6, 0x3B, 0xDE, 0xCE, 0xEE, 0x46, 0x4A, + 0x6F, 0x7A, 0x82, 0xE4, 0xAA, 0x88, 0xE2, 0xCE, + 0xAE, 0xB6, 0x70, 0xC2, 0x9A, 0xDA, 0x35, 0x9E, + 0x95, 0xC0, 0x7E, 0x8C, 0xC2, 0xB6, 0xCE, 0xB9, + 0xD5, 0xAA, 0xC1, 0xF4, 0xC7, 0xB6, 0xB6, 0xA3, + 0xF2, 0x68, 0xDB, 0x76, 0xDC, 0x57, 0xD3, 0xA8, + 0xC0, 0xEF, 0x46, 0xF4, 0x2F, 0xD7, 0x53, 0x36, + 0xE6, 0xA7, 0xCA, 0xCB, 0x7E, 0xE4, 0x86, 0x9A, + 0xCE, 0x94, 0xB4, 0x1D, 0xDA, 0xCE, 0x6C, 0xE6, + 0x9E, 0xC6, 0xDA, 0x16, 0xFA, 0xAA, 0x56, 0xB6, + 0xFE, 0x6E, 0xEA, 0xCE, 0xE5, 0xCC, 0xDB, 0xD3, + 0xED, 0xDC, 0xF4, 0x72 +}; -/* Painted by Johnny Stenback <jst@uwasa.fi> */ +unsigned char linux_logo_green[] __initdata = { + 0x03, 0x82, 0xC4, 0x83, 0x42, 0xA2, 0x4A, 0xA4, + 0xE5, 0xA6, 0xC2, 0x24, 0xA4, 0x65, 0xB4, 0x94, + 0x66, 0x87, 0xB6, 0x12, 0x44, 0x6C, 0x96, 0xD4, + 0x36, 0x95, 0xB2, 0x92, 0x0E, 0xF4, 0xBC, 0x77, + 0xA5, 0x0A, 0x92, 0x52, 0xB4, 0x9A, 0x8C, 0xB2, + 0x74, 0xC2, 0x8E, 0xBD, 0xA2, 0xCA, 0xD2, 0x12, + 0xB6, 0x61, 0x24, 0xDA, 0x33, 0x79, 0xCB, 0xAC, + 0xDA, 0x84, 0x7A, 0x1B, 0xFA, 0x8D, 0xBE, 0x06, + 0x93, 0xBB, 0xBC, 0xAB, 0x44, 0x62, 0x83, 0xDA, + 0x9B, 0xA2, 0x4C, 0x04, 0x6A, 0xB6, 0xC8, 0xBD, + 0x8D, 0xB6, 0xAD, 0xEC, 0x2A, 0x68, 0x62, 0x9D, + 0xC4, 0xC4, 0xB4, 0x13, 0xA3, 0x8A, 0xD2, 0xD6, + 0x3C, 0x5D, 0x8C, 0x7E, 0x82, 0xAC, 0x96, 0x7E, + 0x0D, 0x5A, 0xBA, 0xBB, 0xCC, 0xBE, 0x76, 0xB6, + 0xDE, 0x4E, 0x9A, 0x3C, 0xBE, 0x8E, 0x6E, 0xCB, + 0x1C, 0xAA, 0x2E, 0xBE, 0xAA, 0xDE, 0x3E, 0x4B, + 0x4D, 0x7A, 0x54, 0xE4, 0x8E, 0x6E, 0xCA, 0x9B, + 0x70, 0x9E, 0x5A, 0xAA, 0x9A, 0xBE, 0x34, 0x9E, + 0x71, 0x9E, 0x7E, 0x5F, 0xAA, 0x8A, 0xBE, 0x91, + 0xCE, 0x88, 0x92, 0xDB, 0xC6, 0xAB, 0x8A, 0x72, + 0xE2, 0x44, 0xC3, 0x54, 0xAA, 0x45, 0xBB, 0x92, + 0xBA, 0xC4, 0x46, 0xCA, 0x2D, 0xD6, 0x3B, 0x1A, + 0xC2, 0x7E, 0xA6, 0xCB, 0x7A, 0xDC, 0x86, 0x72, + 0xB6, 0x94, 0xB4, 0x1C, 0xBC, 0xAE, 0x4C, 0xD6, + 0x62, 0x86, 0xD3, 0x16, 0xF6, 0x7A, 0x55, 0x79, + 0xFE, 0x6E, 0xC6, 0xC6, 0xAA, 0x93, 0xDC, 0x9D, + 0xAE, 0xA4, 0xD4, 0x56 +}; -unsigned char *linux_serial_image __initdata = "\n" -" .u$e.\n" -" .$$$$$:S\n" -" $\"*$/\"*$$\n" -" $.`$ . ^F\n" -" 4k+#+T.$F\n" -" 4P+++\"$\"$\n" -" :R\"+ t$$B\n" -" ___# $$$\n" -" | | R$$k\n" -" dd. | Linux $!$\n" -" ddd | MIPS $9$F\n" -" '!!!!!$ !!#!`\n" -" !!!!!* .!!!!!`\n" -"'!!!!!!!W..e$$!!!!!!` %s\n" -" \"~^^~ ^~~^\n" -"\n"; +unsigned char linux_logo_blue[] __initdata = { + 0x04, 0x84, 0x10, 0x0C, 0x41, 0x14, 0x04, 0x78, + 0xC7, 0x0E, 0xC4, 0x24, 0xA4, 0x64, 0x0C, 0x0D, + 0x17, 0x24, 0x0D, 0x13, 0x11, 0x07, 0x40, 0x22, + 0x0C, 0x0C, 0x11, 0x78, 0x06, 0xF4, 0x0B, 0x0A, + 0x47, 0x0B, 0x7C, 0x54, 0x6C, 0x0C, 0x0D, 0x9C, + 0x73, 0x54, 0x14, 0x0C, 0x0F, 0xC7, 0x94, 0x04, + 0x94, 0x17, 0x0A, 0x6C, 0x08, 0x0F, 0x14, 0x0B, + 0x12, 0x68, 0x28, 0x11, 0xFA, 0x0A, 0x34, 0x09, + 0x0A, 0x2F, 0x15, 0x19, 0x14, 0x3C, 0x06, 0xC4, + 0x0B, 0x84, 0x24, 0x08, 0x69, 0x38, 0xBC, 0x15, + 0x1F, 0xA0, 0x0A, 0xEC, 0x2A, 0x0C, 0x0C, 0x0C, + 0x2C, 0xA0, 0x15, 0x07, 0x0B, 0x8C, 0xD3, 0x10, + 0x3B, 0x5C, 0x0C, 0x04, 0x3C, 0xAC, 0x54, 0x1C, + 0x0B, 0x5B, 0xBB, 0x0A, 0xC1, 0xBB, 0x5C, 0x3C, + 0xBC, 0x4D, 0x74, 0x10, 0x8C, 0x8C, 0x14, 0x91, + 0x0C, 0x74, 0x17, 0x0C, 0x48, 0x9C, 0x3C, 0x4C, + 0x09, 0x7C, 0x05, 0xE4, 0x34, 0x38, 0x6C, 0x11, + 0x08, 0x7C, 0x18, 0x2C, 0x9C, 0x4C, 0x34, 0x9C, + 0x29, 0x54, 0x7C, 0x0C, 0x78, 0x18, 0x9C, 0x14, + 0xBA, 0x30, 0x27, 0x31, 0xC2, 0x97, 0x24, 0x09, + 0xB4, 0x04, 0x87, 0x0C, 0x14, 0x1F, 0x7C, 0x64, + 0xB0, 0x0F, 0x45, 0x10, 0x2C, 0xD4, 0x0A, 0x04, + 0x44, 0x1F, 0x2C, 0xCC, 0x7C, 0xD8, 0x84, 0x0C, + 0x8C, 0x94, 0xB4, 0x1D, 0x20, 0x5C, 0x18, 0xB4, + 0x04, 0x09, 0xBC, 0x14, 0xF4, 0x08, 0x54, 0x07, + 0xFC, 0x6C, 0x24, 0xB4, 0x15, 0x18, 0xDB, 0x17, + 0x17, 0x18, 0x21, 0x24 +}; + +unsigned char linux_logo[] __initdata = { + 0xBC, 0xAC, 0x7D, 0x95, 0xAF, 0x85, 0x2C, 0x2C, + 0xAC, 0xD9, 0x95, 0x7D, 0x95, 0xAC, 0x2C, 0xAF, + 0x7D, 0x48, 0xB2, 0xAC, 0x85, 0xDA, 0xDA, 0x2C, + 0x7D, 0x48, 0x21, 0x2C, 0x8D, 0x2A, 0x8A, 0xDA, + 0x85, 0x2C, 0xD9, 0xAC, 0x2C, 0x2C, 0xD9, 0xD9, + 0xAF, 0x85, 0x85, 0x85, 0x8D, 0xBC, 0x2A, 0x2A, + 0xBC, 0x8C, 0xBC, 0xAC, 0x7D, 0x95, 0xAF, 0x85, + 0x2C, 0x2C, 0xAC, 0xD9, 0x95, 0x7D, 0x95, 0xAC, + 0x2C, 0xAF, 0x7D, 0x48, 0xB2, 0xAC, 0x85, 0xDA, + 0xDA, 0x2C, 0x7D, 0x48, 0x21, 0x2C, 0x8D, 0x2A, + 0xAF, 0xA1, 0x48, 0x7D, 0xAF, 0x2C, 0x2C, 0xAC, + 0xD9, 0xD9, 0x95, 0x7D, 0x95, 0xAC, 0xD9, 0x7D, + 0x48, 0xE9, 0x21, 0xAF, 0xDA, 0xDA, 0x85, 0x2C, + 0xD9, 0xD9, 0xAC, 0xDA, 0x8A, 0xDA, 0x85, 0x2C, + 0x2C, 0xAC, 0xD9, 0xAC, 0xAF, 0xAF, 0x2C, 0x2C, + 0x2C, 0x85, 0x2C, 0x2C, 0x85, 0xDA, 0xDA, 0xDA, + 0xDA, 0xDA, 0xAF, 0xA1, 0x48, 0x7D, 0xAF, 0x2C, + 0x2C, 0xAC, 0xD9, 0xD9, 0x95, 0x7D, 0x95, 0xAC, + 0xD9, 0x7D, 0x48, 0xE9, 0x21, 0xAF, 0xDA, 0xDA, + 0x85, 0x2C, 0xD9, 0xD9, 0xAC, 0xDA, 0x8A, 0xDA, + 0x7D, 0x48, 0x48, 0x7D, 0x2C, 0x85, 0x2C, 0xAF, + 0xD9, 0xD9, 0x7D, 0x95, 0xD9, 0xD9, 0xD9, 0x7D, + 0xB2, 0x21, 0xD9, 0x85, 0xDA, 0xDA, 0x85, 0x2C, + 0xAF, 0x2C, 0x2C, 0xDA, 0x85, 0x85, 0x2C, 0x2C, + 0xAC, 0xD9, 0xD9, 0xAF, 0xDA, 0x85, 0x2C, 0x2C, + 0x85, 0xDA, 0xDA, 0x85, 0x85, 0xDA, 0x85, 0x85, + 0x85, 0xAF, 0x7D, 0x48, 0x48, 0x7D, 0x2C, 0x85, + 0x2C, 0xAF, 0xD9, 0xD9, 0x7D, 0x95, 0xD9, 0xD9, + 0xD9, 0x7D, 0xB2, 0x21, 0xD9, 0x85, 0xDA, 0xDA, + 0x85, 0x2C, 0xAF, 0x2C, 0x2C, 0xDA, 0xDA, 0x85, + 0xA1, 0xE9, 0x48, 0x95, 0x85, 0xDA, 0x85, 0xAF, + 0xD9, 0xD9, 0x95, 0x95, 0xD9, 0xD9, 0x95, 0x95, + 0xD9, 0xAC, 0x85, 0x85, 0xDA, 0xDA, 0x85, 0x2C, + 0xAC, 0xAC, 0x2C, 0x2C, 0x85, 0x2C, 0x2C, 0xAC, + 0xD9, 0xD9, 0x2C, 0x91, 0x41, 0x20, 0x6B, 0x20, + 0x6B, 0x20, 0x6B, 0xAE, 0x2C, 0x85, 0x2C, 0x2C, + 0xAC, 0xD9, 0xA1, 0xE9, 0x48, 0x95, 0x85, 0xDA, + 0x85, 0xAF, 0xD9, 0xD9, 0x95, 0x95, 0xD9, 0xD9, + 0x95, 0x95, 0xD9, 0xAC, 0x85, 0x85, 0xDA, 0xDA, + 0x85, 0x2C, 0xAC, 0xAC, 0x2C, 0x2C, 0x2C, 0x2C, + 0xA1, 0xA1, 0xD6, 0xAF, 0xDA, 0xDA, 0x85, 0x2C, + 0xD9, 0xD9, 0x95, 0x95, 0xD9, 0xD9, 0xD9, 0xD9, + 0x2C, 0x2C, 0xDA, 0xDA, 0xDA, 0x85, 0x2C, 0xD9, + 0xD9, 0xD9, 0xD9, 0xAC, 0xAC, 0xAC, 0xAF, 0xAC, + 0x2C, 0xB2, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x6B, 0x80, 0x85, 0x2C, + 0xD9, 0xD6, 0xA1, 0xA1, 0xD6, 0xAF, 0xDA, 0xDA, + 0x85, 0x2C, 0xD9, 0xD9, 0x95, 0x95, 0xD9, 0xD9, + 0xD9, 0xD9, 0x2C, 0x2C, 0xDA, 0xDA, 0xDA, 0x85, + 0x2C, 0xD9, 0xD9, 0xD9, 0xD9, 0xAF, 0xAF, 0xAF, + 0xD6, 0xD6, 0xD9, 0x2C, 0xDA, 0xDA, 0x2C, 0xAC, + 0xD9, 0x7D, 0x95, 0xD9, 0xD9, 0xD9, 0xAF, 0x2C, + 0x85, 0x85, 0x85, 0x85, 0x2C, 0x2C, 0xAC, 0xD9, + 0xD9, 0xD9, 0xAF, 0xAF, 0x2C, 0x2C, 0xAF, 0xDA, + 0xAE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x41, 0xE3, 0x20, 0x6B, 0x48, + 0xAC, 0x95, 0xD6, 0xD6, 0xD9, 0x2C, 0xDA, 0xDA, + 0x2C, 0xAC, 0xD9, 0x7D, 0x95, 0xD9, 0xD9, 0xD9, + 0xAF, 0x2C, 0x85, 0x85, 0x85, 0x85, 0x2C, 0x2C, + 0xAC, 0xD9, 0xD9, 0xD9, 0xAF, 0xAF, 0xAF, 0xAF, + 0xD9, 0xD9, 0xD9, 0x2C, 0x85, 0x85, 0x2C, 0xD9, + 0x7D, 0x21, 0xD6, 0xD9, 0xAF, 0x2C, 0x85, 0x85, + 0x85, 0x85, 0x85, 0x85, 0x2C, 0xAF, 0xAF, 0xAC, + 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x89, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x74, 0x43, 0x80, 0x41, 0x20, + 0x9F, 0x2C, 0xD9, 0xD9, 0xD9, 0x2C, 0x85, 0x85, + 0x2C, 0xD9, 0x7D, 0x21, 0xD6, 0xD9, 0xAF, 0x2C, + 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x2C, 0xAF, + 0xAF, 0xAC, 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, + 0xD9, 0x7D, 0xD9, 0xAF, 0x85, 0x85, 0x2C, 0xD9, + 0xB2, 0x21, 0x7D, 0xD9, 0xAF, 0x2C, 0x85, 0x85, + 0x85, 0x2C, 0x2C, 0x2C, 0x2C, 0xAF, 0xAF, 0xAC, + 0xAF, 0xAC, 0xAF, 0xAF, 0xAC, 0xAC, 0x85, 0x41, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xAE, 0x48, 0x89, 0x74, 0x41, + 0x6B, 0xD6, 0xD9, 0x7D, 0xD9, 0xAF, 0x85, 0x85, + 0x2C, 0xD9, 0xB2, 0x21, 0x7D, 0xD9, 0xAF, 0x2C, + 0x85, 0x85, 0x85, 0x2C, 0x2C, 0x2C, 0x2C, 0xAF, + 0xAF, 0xAC, 0xAF, 0xAC, 0xAC, 0x2C, 0xAF, 0xAC, + 0x2C, 0x7D, 0xD9, 0x2C, 0xDA, 0x85, 0x2C, 0x7D, + 0xB2, 0xD6, 0xD9, 0xAF, 0x85, 0x85, 0x85, 0x85, + 0xAF, 0xAC, 0xAC, 0xAF, 0xAF, 0xAC, 0xAC, 0xD9, + 0x95, 0x7D, 0x95, 0x95, 0xD9, 0xD9, 0x48, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x6B, 0xAE, 0xE6, 0x80, 0x2B, 0x88, + 0x20, 0x33, 0xDA, 0x95, 0xD9, 0x2C, 0xDA, 0x85, + 0x2C, 0x7D, 0xB2, 0xD6, 0xD9, 0xAF, 0x85, 0x85, + 0x85, 0x85, 0xAF, 0xAC, 0xAC, 0xAF, 0xAF, 0xAC, + 0xAC, 0xD9, 0x95, 0x95, 0x7D, 0x95, 0x95, 0xD9, + 0x85, 0xD9, 0x2C, 0x85, 0xDA, 0xDA, 0xD9, 0x21, + 0xA1, 0xD9, 0xAF, 0x2C, 0x85, 0xDA, 0x85, 0xAF, + 0xD9, 0xD9, 0xAC, 0xAC, 0xAC, 0xD9, 0x7D, 0xD6, + 0xD6, 0x7D, 0x95, 0xD9, 0xD9, 0x85, 0xDB, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xDB, 0xE3, 0x6B, 0x20, 0x20, + 0x20, 0x20, 0xE9, 0xD9, 0x2C, 0x85, 0xDA, 0xDA, + 0xD9, 0x21, 0xA1, 0xD9, 0xAF, 0x2C, 0x85, 0xDA, + 0x85, 0xAF, 0xD9, 0xD9, 0xAC, 0xAC, 0xAC, 0xD9, + 0x7D, 0xD6, 0xD6, 0x7D, 0x95, 0xD9, 0xD9, 0xD9, + 0xDA, 0x2C, 0x85, 0xDA, 0xDA, 0x85, 0x95, 0x21, + 0x21, 0xD9, 0x85, 0x85, 0x85, 0x2C, 0x2C, 0xD9, + 0x95, 0x95, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, + 0xAC, 0xAC, 0x2C, 0xAF, 0x2C, 0x85, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x88, 0xDA, 0x85, 0xDA, 0xDA, 0x85, + 0x95, 0x21, 0x21, 0xD9, 0x85, 0x85, 0x85, 0x2C, + 0x2C, 0xD9, 0x95, 0x95, 0xD9, 0xD9, 0xD9, 0xD9, + 0xD9, 0xD9, 0xD9, 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, + 0xDA, 0x2C, 0x85, 0x85, 0x2C, 0xD9, 0xD6, 0xB2, + 0x95, 0x2C, 0x85, 0x85, 0xAF, 0xAC, 0x95, 0x95, + 0x7D, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0x2C, 0x85, + 0x85, 0x85, 0x85, 0x85, 0x85, 0xAC, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xAC, 0x85, 0x85, 0x2C, 0xD9, + 0xD6, 0xB2, 0x95, 0x2C, 0x85, 0x85, 0xAF, 0xAC, + 0x95, 0x95, 0x7D, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, + 0x2C, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, + 0x85, 0x2C, 0x2C, 0x2C, 0xAC, 0x95, 0xD6, 0x7D, + 0xD9, 0x2C, 0x2C, 0xAF, 0x95, 0x7D, 0x7D, 0x95, + 0x95, 0xD9, 0xD9, 0x95, 0xD9, 0xD9, 0x2C, 0x85, + 0xDA, 0xDA, 0xDA, 0x85, 0x85, 0x21, 0x20, 0x20, + 0x6B, 0x41, 0xDB, 0x6B, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x41, 0xDB, 0xDB, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xE6, 0x2C, 0x2C, 0xAC, 0x95, + 0xD6, 0x7D, 0xD9, 0x2C, 0x2C, 0xAF, 0x95, 0x7D, + 0x7D, 0x95, 0x95, 0xD9, 0xD9, 0x95, 0xD9, 0xD9, + 0x2C, 0x85, 0xDA, 0xDA, 0xDA, 0x85, 0x2C, 0x2C, + 0x2C, 0xAF, 0xAC, 0xD9, 0x95, 0xD6, 0xD6, 0xD9, + 0x2C, 0x2C, 0x2C, 0xD9, 0xD6, 0xD6, 0xD9, 0xAF, + 0xAC, 0x95, 0xD6, 0x7D, 0x7D, 0xD9, 0x2C, 0x85, + 0xDA, 0xDA, 0x2C, 0xAF, 0xAF, 0x21, 0x20, 0x20, + 0x88, 0x2B, 0x88, 0x74, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xAE, 0x2D, 0x2D, 0x74, 0x74, 0x88, 0x20, + 0x20, 0x20, 0x20, 0x80, 0xAC, 0xD9, 0x95, 0xD6, + 0xD6, 0xD9, 0x2C, 0x2C, 0x2C, 0xD9, 0xD6, 0xD6, + 0xD9, 0xAF, 0xAC, 0x95, 0xD6, 0x7D, 0x7D, 0xD9, + 0x2C, 0xDA, 0xDA, 0x85, 0x2C, 0xAF, 0xAF, 0xAF, + 0x2C, 0xAF, 0xD9, 0x95, 0xD6, 0xD6, 0x95, 0xAF, + 0x2C, 0x2C, 0xD9, 0x95, 0xD6, 0x95, 0xAF, 0x2C, + 0xAC, 0x7D, 0x21, 0x95, 0xD9, 0x2C, 0x85, 0x85, + 0x85, 0xAF, 0xD9, 0x95, 0xD9, 0x7D, 0x20, 0x33, + 0x7D, 0x8A, 0x7D, 0x5B, 0x6B, 0x20, 0x20, 0x6B, + 0xE6, 0xD9, 0x85, 0x2A, 0xDA, 0x2B, 0x41, 0x20, + 0x20, 0x20, 0x6B, 0x74, 0xD9, 0x95, 0xD6, 0xD6, + 0x95, 0xAF, 0x2C, 0x2C, 0xD9, 0x95, 0xD6, 0x95, + 0xAF, 0x2C, 0xAC, 0x7D, 0x21, 0x95, 0xD9, 0x2C, + 0x85, 0x85, 0x85, 0x2C, 0xD9, 0xD9, 0xD9, 0xD9, + 0x85, 0xD9, 0x7D, 0x21, 0x21, 0x7D, 0xAC, 0x2C, + 0x2C, 0xAC, 0xD9, 0x7D, 0xD9, 0xAF, 0x2C, 0x85, + 0xAC, 0x7D, 0x7D, 0xAC, 0x85, 0xDA, 0x8A, 0xDA, + 0x85, 0xAF, 0xD9, 0x7D, 0xD9, 0x95, 0x20, 0x91, + 0xBC, 0x73, 0xEE, 0x7D, 0x20, 0x20, 0x20, 0x80, + 0x4D, 0x3D, 0x73, 0x73, 0xA3, 0xD6, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x2B, 0x7D, 0x21, 0x21, 0x7D, + 0xAC, 0x2C, 0x2C, 0xAC, 0xD9, 0x7D, 0xD9, 0xAF, + 0x2C, 0x85, 0xAC, 0x7D, 0x7D, 0xAC, 0x85, 0xDA, + 0x8A, 0x8A, 0x85, 0xAC, 0xD9, 0x7D, 0xD9, 0xAC, + 0x2C, 0xD9, 0xD6, 0xB2, 0xB2, 0x7D, 0xAF, 0x85, + 0x2C, 0xD9, 0x95, 0x95, 0xAF, 0x2C, 0x2C, 0x2C, + 0xD9, 0xD9, 0xAC, 0x85, 0x8D, 0x2A, 0x2A, 0xDA, + 0xAF, 0xD9, 0x95, 0x95, 0xD9, 0xAC, 0x20, 0xAF, + 0x2C, 0xE6, 0x8D, 0x73, 0xE3, 0x20, 0x20, 0x48, + 0x5C, 0xDA, 0x5B, 0x43, 0xBC, 0x73, 0x2B, 0x20, + 0x20, 0x20, 0x20, 0x41, 0xD6, 0xB2, 0xB2, 0x7D, + 0xAF, 0x85, 0x2C, 0xD9, 0x95, 0x95, 0xAF, 0x2C, + 0x2C, 0x2C, 0xD9, 0xD9, 0xAC, 0x85, 0x8A, 0x2A, + 0x8D, 0xDA, 0xAF, 0xD9, 0x95, 0x95, 0xD9, 0xAF, + 0xAC, 0xD9, 0xD6, 0xB2, 0x21, 0xD9, 0x2C, 0x85, + 0x2C, 0xD9, 0x95, 0xD9, 0xAF, 0x2C, 0x2C, 0xAC, + 0xAC, 0xAF, 0x85, 0x8D, 0xBC, 0xBC, 0xDA, 0xD9, + 0xD6, 0xA1, 0xA1, 0x21, 0xD9, 0xAC, 0x20, 0x2A, + 0xCC, 0xAE, 0x9F, 0xE4, 0xAE, 0x5B, 0x74, 0xA1, + 0xE4, 0xAE, 0x20, 0x9F, 0x89, 0xE8, 0xE6, 0x20, + 0x20, 0x20, 0x20, 0x41, 0xD6, 0xB2, 0x21, 0xD9, + 0x2C, 0x85, 0x2C, 0xD9, 0x95, 0xD9, 0xAF, 0x2C, + 0x2C, 0xAC, 0xAC, 0xAF, 0x85, 0x8D, 0xBC, 0x2A, + 0xDA, 0xD9, 0xD6, 0xA1, 0xA1, 0x21, 0xD9, 0xD9, + 0xD9, 0x95, 0x21, 0xA1, 0x21, 0xAC, 0x85, 0x85, + 0xAC, 0xD9, 0xD9, 0xAF, 0x2C, 0x2C, 0xAF, 0xAC, + 0xAF, 0x85, 0x8A, 0x2A, 0x2A, 0xDA, 0xD9, 0xA1, + 0x48, 0xE9, 0x48, 0x21, 0x95, 0xAC, 0x20, 0x2A, + 0xDB, 0x41, 0x74, 0xBC, 0x2B, 0x7B, 0x7B, 0x80, + 0x73, 0x41, 0x20, 0x6B, 0x2B, 0xE8, 0x2D, 0x20, + 0x20, 0x20, 0x20, 0x33, 0x21, 0xA1, 0x21, 0xAC, + 0x85, 0x85, 0xAC, 0xD9, 0xD9, 0xAF, 0x2C, 0x2C, + 0xAF, 0xAC, 0xAF, 0x85, 0x8A, 0xBC, 0x2A, 0xDA, + 0xD9, 0xA1, 0x48, 0xE9, 0x48, 0x21, 0xD9, 0xD9, + 0xA1, 0xB2, 0xB2, 0x48, 0xD6, 0xAC, 0x2C, 0x2C, + 0xD9, 0x95, 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, + 0x85, 0x8A, 0x8D, 0x8D, 0x85, 0x95, 0xA1, 0x6C, + 0x6C, 0x48, 0xD6, 0xD9, 0x2C, 0x85, 0x20, 0x2C, + 0x89, 0x20, 0x3C, 0xB9, 0xA7, 0x63, 0xD2, 0xB9, + 0xC6, 0x9A, 0x20, 0x20, 0x43, 0x5C, 0xE6, 0x20, + 0x20, 0x20, 0x20, 0x33, 0xB2, 0x48, 0xD6, 0xAC, + 0x2C, 0x2C, 0xD9, 0x95, 0xAF, 0x2C, 0x2C, 0x2C, + 0x2C, 0x2C, 0x85, 0x8A, 0x8D, 0x8D, 0x85, 0x95, + 0xA1, 0x6C, 0x6C, 0x48, 0xD6, 0xD9, 0xAF, 0xAC, + 0xA1, 0xD6, 0x7D, 0xB2, 0xD6, 0xAF, 0x85, 0x85, + 0xD9, 0x95, 0x2C, 0x85, 0xDA, 0x85, 0x85, 0x2C, + 0x85, 0x8A, 0x8D, 0xDA, 0xD9, 0x48, 0x81, 0x2D, + 0x48, 0xD6, 0xD9, 0xAC, 0x2C, 0x85, 0x20, 0x2D, + 0xEE, 0x93, 0xD1, 0xA7, 0x3E, 0x3E, 0x3A, 0x25, + 0x56, 0xAB, 0xAA, 0xC5, 0xEE, 0xEE, 0x33, 0x20, + 0x20, 0x20, 0x20, 0x41, 0xD9, 0xB2, 0xD6, 0xAF, + 0x85, 0x85, 0xD9, 0x95, 0x2C, 0x85, 0xDA, 0x85, + 0x85, 0x2C, 0x85, 0x8A, 0x8D, 0xDA, 0xD9, 0x48, + 0x81, 0x2D, 0x48, 0xD6, 0xD9, 0xAF, 0x2C, 0x2C, + 0xAC, 0xAF, 0xD9, 0x7D, 0xD6, 0x2C, 0x85, 0x2C, + 0xD9, 0xD9, 0x2C, 0xDA, 0xDA, 0xDA, 0x2C, 0x2C, + 0x85, 0x8D, 0x8D, 0x2C, 0x21, 0x2D, 0x2D, 0xE9, + 0xD6, 0xD9, 0xAF, 0x2C, 0x85, 0xDA, 0x20, 0xE3, + 0xB4, 0xBE, 0xF1, 0x3E, 0x9B, 0x22, 0x56, 0xF2, + 0xBB, 0x7F, 0x56, 0xDC, 0x8F, 0x5A, 0x5F, 0x20, + 0x20, 0x20, 0x20, 0x6B, 0x2C, 0x7D, 0xD6, 0x2C, + 0x85, 0x2C, 0xD9, 0xD9, 0x2C, 0xDA, 0xDA, 0xDA, + 0x2C, 0x2C, 0x85, 0x8D, 0x8A, 0x85, 0x21, 0x2D, + 0x2D, 0xE9, 0xD6, 0xD9, 0xAF, 0x2C, 0x85, 0x85, + 0x2A, 0x85, 0xAC, 0x95, 0x95, 0x2C, 0x85, 0x85, + 0xAC, 0xAF, 0x85, 0xDA, 0xDA, 0x85, 0x2C, 0x2C, + 0xDA, 0x8A, 0x8A, 0xAF, 0xA1, 0x2D, 0xE9, 0xD6, + 0xD9, 0xAC, 0x85, 0x85, 0x85, 0xDA, 0x20, 0x52, + 0x55, 0xED, 0x57, 0x3E, 0x22, 0x56, 0x37, 0xBB, + 0xBB, 0x58, 0x7F, 0x7F, 0x56, 0x5E, 0xC5, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2C, 0x95, 0x95, 0x2C, + 0x85, 0x85, 0xAC, 0xAF, 0x85, 0xDA, 0xDA, 0x85, + 0x2C, 0x2C, 0xDA, 0x8D, 0xDA, 0xAF, 0xA1, 0x2D, + 0xE9, 0xD6, 0xD9, 0xAF, 0x2C, 0x85, 0x85, 0x85, + 0xCD, 0xAF, 0xD9, 0x95, 0xD9, 0x2C, 0xDA, 0x85, + 0xAF, 0xD9, 0x85, 0xDA, 0x85, 0x2C, 0xAC, 0xAF, + 0x85, 0x8A, 0x85, 0xD9, 0x48, 0x48, 0xB2, 0x95, + 0x95, 0xAC, 0x2C, 0x85, 0xDA, 0xDA, 0x6B, 0xB3, + 0x46, 0x7C, 0x2E, 0x9B, 0x22, 0x56, 0xBB, 0x37, + 0x58, 0x58, 0xF2, 0x3A, 0x46, 0x63, 0x64, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2D, 0x95, 0xD9, 0x2C, + 0xDA, 0x85, 0xAF, 0xD9, 0x85, 0xDA, 0x85, 0x2C, + 0xAC, 0xAF, 0x85, 0xDA, 0x85, 0xD9, 0x48, 0x48, + 0xB2, 0x95, 0x95, 0xD9, 0x85, 0xDA, 0x85, 0x85, + 0xBC, 0xB2, 0xB2, 0x7D, 0xD9, 0x2C, 0xDA, 0x85, + 0xAF, 0xD9, 0x85, 0xDA, 0x85, 0x85, 0xAF, 0x2C, + 0x85, 0xDA, 0x2C, 0x7D, 0xA1, 0x48, 0xB2, 0x21, + 0xD6, 0xD9, 0x85, 0xDA, 0x85, 0xDA, 0x41, 0x51, + 0xB7, 0xEC, 0x2E, 0x22, 0x56, 0x37, 0xBB, 0xF2, + 0x37, 0xEA, 0x2F, 0x2F, 0x77, 0xA7, 0x38, 0x20, + 0x20, 0x6B, 0x20, 0x20, 0x5B, 0x2C, 0xD9, 0x2C, + 0xDA, 0x85, 0xAF, 0xD9, 0x85, 0xDA, 0x85, 0x85, + 0xAF, 0x2C, 0xDA, 0xDA, 0x2C, 0x7D, 0xA1, 0x48, + 0xB2, 0x21, 0xD6, 0xD9, 0x2C, 0xDA, 0x85, 0xAF, + 0x2C, 0x2D, 0x48, 0x7D, 0xAF, 0x2C, 0x85, 0x2C, + 0xD9, 0xAC, 0xAF, 0x85, 0x85, 0x2C, 0x2C, 0x2C, + 0x85, 0x2C, 0xD9, 0xD6, 0xA1, 0xA1, 0x48, 0xA1, + 0x21, 0x2C, 0xDA, 0xDA, 0x2C, 0x85, 0x41, 0x98, + 0xA2, 0xA7, 0x6F, 0xC9, 0x37, 0xF2, 0xF2, 0x9B, + 0xB7, 0x66, 0x60, 0x4C, 0xED, 0x84, 0x3C, 0x20, + 0x5B, 0x2D, 0x2B, 0x6B, 0x20, 0xAF, 0xAF, 0x2C, + 0x85, 0x2C, 0xD9, 0xAC, 0xAF, 0x85, 0x85, 0x2C, + 0x2C, 0x2C, 0x2C, 0x85, 0xD9, 0xD6, 0xA1, 0xA1, + 0x48, 0xA1, 0xD6, 0xAF, 0xDA, 0x8A, 0x2C, 0xD9, + 0xB2, 0x2D, 0x48, 0x95, 0x2C, 0x2C, 0x2C, 0x85, + 0xAC, 0xAC, 0xAF, 0x85, 0xDA, 0x85, 0xAF, 0xAC, + 0xAF, 0x2C, 0xD9, 0xD6, 0xD6, 0xD6, 0x21, 0xD6, + 0xD9, 0xDA, 0x8D, 0xDA, 0xAF, 0x2C, 0x20, 0x88, + 0x42, 0x51, 0x3F, 0x2F, 0x45, 0xB7, 0x66, 0x55, + 0x46, 0x60, 0x5D, 0x36, 0xD8, 0x71, 0x43, 0x20, + 0x20, 0x2D, 0xB2, 0x80, 0x20, 0x2D, 0x2C, 0x2C, + 0x2C, 0x85, 0xAC, 0xAC, 0xAF, 0x85, 0xDA, 0x85, + 0xAF, 0xAC, 0xAC, 0xAF, 0xD9, 0xD6, 0xD6, 0xD6, + 0x21, 0xD6, 0xD9, 0xDA, 0x8D, 0x8A, 0x2C, 0xD9, + 0xB2, 0x48, 0xD6, 0xAC, 0xAF, 0x2C, 0x2C, 0x85, + 0x2C, 0xAC, 0x2C, 0xDA, 0xDA, 0x85, 0xAF, 0xD9, + 0xD9, 0xAC, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xAC, + 0x85, 0x8D, 0xBC, 0xDA, 0xD9, 0xDA, 0x20, 0xE3, + 0xDA, 0x69, 0x96, 0xB5, 0xF1, 0x68, 0x5D, 0x82, + 0xE1, 0xBE, 0x27, 0x8D, 0x4D, 0xD3, 0x7D, 0x20, + 0x20, 0xDB, 0xA1, 0xCA, 0x20, 0x88, 0x85, 0x2C, + 0x2C, 0x85, 0x2C, 0xAC, 0x2C, 0xDA, 0xDA, 0x85, + 0xAF, 0xD9, 0xAC, 0xAF, 0xD9, 0xD9, 0xD9, 0xD9, + 0xD9, 0xAC, 0xDA, 0x8D, 0xBC, 0xDA, 0xD9, 0x95, + 0xD9, 0x95, 0xAC, 0x2C, 0x2C, 0x2C, 0x2C, 0x85, + 0x85, 0xAF, 0xAF, 0x85, 0x85, 0x2C, 0x2C, 0xAC, + 0xD9, 0xAC, 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, 0x85, + 0x8D, 0x2A, 0x2A, 0x85, 0xD9, 0x95, 0x20, 0xDB, + 0x8D, 0x8D, 0x99, 0xB0, 0x35, 0xE5, 0x3F, 0x35, + 0xB9, 0x50, 0x8A, 0x4D, 0x73, 0xE8, 0xA3, 0xCC, + 0x20, 0x20, 0x33, 0x6B, 0x20, 0x20, 0xCC, 0x85, + 0x2C, 0x85, 0x85, 0xAF, 0xAF, 0x85, 0x85, 0x85, + 0x2C, 0xD9, 0xD9, 0xAC, 0xAF, 0x2C, 0x2C, 0x2C, + 0x2C, 0x85, 0x8A, 0x2A, 0x8D, 0x2C, 0xD9, 0xD9, + 0xAF, 0xAF, 0xAC, 0xAF, 0x2C, 0x2C, 0x2C, 0x85, + 0x2C, 0xAF, 0xAF, 0xAF, 0x2C, 0x2C, 0x2C, 0xAC, + 0xD9, 0xAC, 0xAF, 0x2C, 0x85, 0x85, 0xDA, 0xDA, + 0x8A, 0x8A, 0x85, 0xD9, 0x2C, 0x2B, 0x20, 0xAE, + 0xA3, 0xBC, 0x8D, 0xC8, 0xA9, 0xC7, 0x92, 0x47, + 0x8D, 0x8D, 0x7E, 0xE4, 0xE8, 0xE8, 0x5C, 0x2C, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6B, 0xAF, + 0x2C, 0x85, 0x2C, 0xAF, 0xAF, 0xAF, 0x2C, 0x2C, + 0x2C, 0xAF, 0xD9, 0xAC, 0x2C, 0x2C, 0x85, 0x85, + 0x85, 0xDA, 0x8D, 0x8A, 0x85, 0xAC, 0x95, 0xD9, + 0xAC, 0xAC, 0xAC, 0xAC, 0x2C, 0xAF, 0xAF, 0x2C, + 0x2C, 0xAF, 0xAF, 0xAC, 0x2C, 0xAF, 0x2C, 0xAF, + 0xD9, 0xAC, 0x2C, 0x2C, 0x85, 0x85, 0x85, 0x85, + 0x85, 0x2C, 0xD9, 0xD9, 0x2D, 0x6B, 0x41, 0x2A, + 0xE8, 0xA3, 0xC8, 0x8D, 0x8A, 0x8A, 0x8A, 0x8D, + 0x4D, 0xA3, 0x3D, 0xE8, 0xE8, 0xE8, 0xE8, 0x5C, + 0xAE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDB, + 0xDA, 0x2C, 0x2C, 0xAF, 0xAF, 0xAC, 0xAC, 0xAF, + 0x2C, 0xAC, 0xD9, 0xAC, 0x2C, 0x2C, 0x85, 0x85, + 0x85, 0x85, 0x85, 0x2C, 0xD9, 0x95, 0x7D, 0xD9, + 0x7D, 0x7D, 0xD9, 0xAC, 0xAC, 0xAF, 0xAF, 0xAF, + 0x2C, 0x2C, 0xAC, 0xAC, 0xD9, 0xAC, 0xAC, 0xD9, + 0x95, 0xD9, 0xAC, 0xAF, 0xAF, 0xAC, 0xAF, 0xAC, + 0xD9, 0x7D, 0x7D, 0x7D, 0x33, 0x41, 0x2D, 0xE8, + 0xE8, 0x5C, 0xD3, 0x8D, 0x8D, 0x8D, 0x8D, 0x7E, + 0x3D, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x81, 0x2C, 0x2C, 0x2C, 0xAC, 0xAC, 0xAC, 0xAC, + 0xAC, 0xD9, 0x95, 0x95, 0xAC, 0xAF, 0xAF, 0xAF, + 0xAF, 0xAC, 0xD9, 0x95, 0x7D, 0xD6, 0xD6, 0x7D, + 0x21, 0xD6, 0x95, 0xD9, 0xD9, 0xAC, 0xAF, 0xAF, + 0x2C, 0xAF, 0xAC, 0xAC, 0xD9, 0xD9, 0xD9, 0xD9, + 0x21, 0x21, 0x7D, 0x95, 0x95, 0x7D, 0xD6, 0x21, + 0xB2, 0xA1, 0x2C, 0x88, 0x20, 0xE3, 0xA3, 0xE8, + 0xE8, 0xE8, 0xE4, 0xEE, 0xD3, 0x7E, 0x73, 0x5C, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0x5C, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2C, 0xAF, 0xAF, 0xAC, 0xD9, 0xD9, 0xD9, + 0xD9, 0xD9, 0xD6, 0x21, 0x7D, 0x95, 0x95, 0x7D, + 0xD6, 0xB2, 0xA1, 0xA1, 0xB2, 0xD6, 0x21, 0x21, + 0x21, 0xD9, 0xD9, 0xD9, 0xAC, 0xAF, 0xAC, 0xAF, + 0x2C, 0x2C, 0xAC, 0xD9, 0xD9, 0xD9, 0xD9, 0x95, + 0x7D, 0xB2, 0xD6, 0x95, 0xD9, 0x95, 0xD6, 0xA1, + 0xA1, 0xAF, 0x5B, 0x20, 0x20, 0xD6, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0x5C, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xE3, 0x8A, 0x2C, 0xAC, 0xAC, 0xD9, 0xD9, + 0xD9, 0x95, 0xD6, 0xB2, 0xD6, 0x95, 0xD9, 0x95, + 0x21, 0xB2, 0xA1, 0xB2, 0xD6, 0xD6, 0xD6, 0xA1, + 0xD9, 0x2C, 0x2C, 0x2C, 0xAF, 0xAF, 0xAC, 0xAF, + 0x2C, 0x2C, 0xAF, 0xAC, 0xD9, 0xAC, 0xD9, 0xD9, + 0xD9, 0x95, 0xAC, 0x2C, 0x2C, 0xAC, 0x95, 0x7D, + 0xD9, 0x91, 0x20, 0x20, 0xE3, 0xA3, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2B, 0x8A, 0xAF, 0xAC, 0xD9, 0xAC, + 0xD9, 0xD9, 0xD9, 0x95, 0xAC, 0x2C, 0x2C, 0xAC, + 0x95, 0x7D, 0x95, 0x95, 0xD9, 0x95, 0x7D, 0x21, + 0x2C, 0xDA, 0xDA, 0x85, 0x2C, 0xAF, 0xAF, 0xAF, + 0xAF, 0xAF, 0x2C, 0xAF, 0xAF, 0xAC, 0xAC, 0xAC, + 0xD9, 0xAF, 0x85, 0x85, 0x2C, 0xAF, 0xD9, 0xAF, + 0x48, 0x20, 0x20, 0x20, 0xE6, 0xA3, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x5C, + 0xE4, 0x73, 0x41, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x2B, 0xDA, 0xAF, 0xAF, 0xAC, + 0xAC, 0xAF, 0xD9, 0x2C, 0x85, 0x85, 0x2C, 0xAF, + 0xD9, 0xD9, 0xAC, 0xAF, 0xAC, 0xD9, 0xD9, 0xD9, + 0x85, 0xDA, 0xDA, 0x85, 0x2C, 0x2C, 0xAC, 0xAF, + 0xAF, 0xAF, 0xAF, 0x2C, 0xAF, 0xAF, 0xAC, 0xAC, + 0xAF, 0x2C, 0x2C, 0x2C, 0xAC, 0x95, 0x95, 0xA1, + 0x20, 0x20, 0x20, 0x20, 0xE9, 0x8C, 0x5C, 0xE8, + 0xE8, 0xE8, 0xE8, 0x3D, 0x73, 0x73, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE4, 0x73, 0x73, 0x73, 0xCD, + 0x7E, 0xA3, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x24, 0x85, 0xAF, 0xAF, + 0xAC, 0xAC, 0xAC, 0xAF, 0x85, 0x2C, 0xAC, 0x95, + 0x95, 0xD9, 0xAC, 0xAC, 0xAC, 0xD9, 0xAC, 0xAF, + 0x8A, 0x8A, 0xDA, 0xDA, 0x85, 0x2C, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0xAF, 0xAF, 0xAC, 0xAF, 0xAC, + 0xAC, 0xAF, 0xAF, 0xD9, 0xD6, 0xD6, 0x2C, 0x88, + 0x20, 0x20, 0x20, 0x88, 0xB2, 0xDA, 0x7E, 0x73, + 0xE8, 0xE8, 0xE8, 0x3D, 0x73, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xA3, 0xCD, 0xD3, 0x2A, 0x2A, + 0x2A, 0x8C, 0x8D, 0x88, 0x20, 0xE3, 0x6B, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x41, 0x85, 0xAF, 0xAC, + 0xAC, 0xAC, 0xAC, 0xAF, 0xAC, 0xD9, 0x7D, 0xD6, + 0x7D, 0x7D, 0xD9, 0x95, 0xD9, 0xAC, 0xAC, 0xAF, + 0xD3, 0x8D, 0xDA, 0xDA, 0x85, 0x85, 0x2C, 0x2C, + 0x2C, 0xAF, 0xAF, 0xAC, 0xD9, 0xD9, 0xD9, 0xD9, + 0xAF, 0xAF, 0xAC, 0xD9, 0x95, 0x7D, 0xAC, 0x20, + 0x20, 0x20, 0x20, 0xDB, 0x2C, 0xA3, 0x5C, 0xE8, + 0xE8, 0xE8, 0xE8, 0x5C, 0x3D, 0x3D, 0xE8, 0xE8, + 0xE8, 0xE4, 0xE8, 0xE8, 0xE8, 0xE4, 0x73, 0xEE, + 0xD3, 0x2A, 0xEE, 0xAC, 0x20, 0x33, 0x2B, 0xE3, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x9F, 0xAF, 0xD9, + 0xD9, 0xAC, 0xAF, 0xAF, 0xAC, 0xD9, 0x95, 0x7D, + 0xD9, 0x95, 0x95, 0x95, 0x95, 0xD9, 0xAF, 0xAF, + 0x7E, 0x85, 0x85, 0x2C, 0x85, 0x85, 0x85, 0x2C, + 0x2C, 0x2C, 0xAF, 0xD9, 0xD9, 0x95, 0xD9, 0xAC, + 0xAC, 0xAF, 0xAF, 0xAC, 0xAC, 0xAC, 0x91, 0x20, + 0x33, 0xE3, 0x41, 0x48, 0x73, 0x5C, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xA3, 0xD6, 0x6C, 0x85, 0xE8, + 0xDA, 0xAE, 0xB2, 0xA3, 0x5C, 0xE8, 0xE8, 0xE8, + 0x3D, 0xEE, 0x4D, 0xA3, 0x24, 0x20, 0x6B, 0xDB, + 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x85, 0x95, + 0xD9, 0xD9, 0xAC, 0xAF, 0xAF, 0xAC, 0xD9, 0xAC, + 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xAC, 0xD9, 0xAC, + 0x8A, 0xD9, 0xAC, 0xD9, 0xAC, 0xAC, 0x2C, 0x2C, + 0xAF, 0xAF, 0xAF, 0xAC, 0xD9, 0xD9, 0xD9, 0xD9, + 0xAF, 0xAF, 0xAF, 0xAC, 0xAC, 0x85, 0x33, 0x20, + 0xCC, 0x20, 0xE3, 0xA3, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xA3, 0xD9, 0x81, 0xAC, 0xDA, 0x2D, 0x5C, + 0x48, 0x41, 0x88, 0x74, 0x21, 0xA3, 0xE8, 0xE8, + 0xE8, 0xE8, 0x73, 0x8C, 0x8A, 0x20, 0x20, 0x20, + 0xDB, 0x33, 0x20, 0x20, 0x20, 0x20, 0xE6, 0xD9, + 0xD9, 0xAC, 0xAC, 0xAF, 0xAC, 0xAF, 0xAC, 0xAF, + 0xAF, 0xAC, 0xD9, 0xAF, 0xD9, 0xAC, 0xAC, 0xAF, + 0x85, 0xD9, 0x95, 0xD9, 0x95, 0xD9, 0xD9, 0xAC, + 0xAF, 0xAC, 0xAF, 0xAF, 0x2C, 0xAF, 0x2C, 0x2C, + 0xAF, 0xAF, 0xAF, 0xAC, 0xAC, 0x2C, 0x20, 0x5B, + 0x33, 0x20, 0xD6, 0xE8, 0xE8, 0xE8, 0xE8, 0x73, + 0xAF, 0x2D, 0xD9, 0xDA, 0xB2, 0x81, 0x81, 0xE4, + 0xA1, 0x91, 0x2B, 0x88, 0x33, 0x80, 0xAF, 0x73, + 0xE8, 0xE8, 0xE8, 0x5C, 0xA3, 0x80, 0x41, 0xCC, + 0x2B, 0xCC, 0x20, 0x20, 0x20, 0x20, 0x88, 0xDA, + 0x2C, 0x2C, 0x2C, 0xAF, 0xAF, 0xAC, 0xAC, 0xAF, + 0xAF, 0xAF, 0xAF, 0xAC, 0xAF, 0xAF, 0xAF, 0x2C, + 0x85, 0xD9, 0xD9, 0xD9, 0xD9, 0xAC, 0xAC, 0xD9, + 0xD9, 0xD9, 0xAC, 0x2C, 0x2C, 0x2C, 0x85, 0x85, + 0x85, 0x2C, 0x2C, 0xAF, 0x2C, 0x91, 0x20, 0xAE, + 0x20, 0xDB, 0x3D, 0xE8, 0xE8, 0x5C, 0xB2, 0x80, + 0xB2, 0xAF, 0x48, 0xB2, 0x48, 0x89, 0x89, 0x3D, + 0x21, 0x48, 0x6C, 0x2D, 0x2B, 0x41, 0xE3, 0xAE, + 0xD9, 0x5C, 0xE8, 0xE8, 0xE8, 0x95, 0x33, 0x80, + 0xAE, 0x33, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x95, + 0x85, 0x2C, 0x85, 0x2C, 0x2C, 0xAF, 0x2C, 0x2C, + 0x2C, 0xAF, 0xAC, 0xAF, 0xAF, 0x2C, 0x2C, 0x2C, + 0xDA, 0xAF, 0xD9, 0xD9, 0xAF, 0x2C, 0x2C, 0x2C, + 0xAC, 0xD9, 0xAC, 0xAF, 0x2C, 0x85, 0x2C, 0x85, + 0x85, 0x2C, 0x2C, 0x2C, 0x8A, 0x41, 0xDB, 0x33, + 0x20, 0x95, 0xE8, 0xE8, 0xE8, 0xA3, 0xDB, 0x88, + 0xDB, 0x80, 0xD6, 0x7E, 0x85, 0x2D, 0xE6, 0x5C, + 0x21, 0x48, 0xD9, 0x7E, 0xD6, 0x2B, 0xCC, 0xAC, + 0x85, 0xBC, 0xE8, 0xE8, 0xE8, 0xCD, 0x88, 0x5B, + 0x41, 0x20, 0xAE, 0x20, 0x20, 0x20, 0x20, 0x74, + 0xDA, 0x85, 0x85, 0x85, 0x2C, 0x2C, 0x2C, 0x2C, + 0xAF, 0xAC, 0xD9, 0xD9, 0xAC, 0xAC, 0xAC, 0xD9, + 0x8A, 0xAF, 0xAC, 0xAC, 0x2C, 0x85, 0x2C, 0xAF, + 0xD9, 0xD9, 0xAF, 0xAF, 0xAF, 0x2C, 0xAF, 0x2C, + 0x2C, 0x2C, 0x2C, 0xAF, 0x95, 0x20, 0x74, 0x20, + 0x33, 0xA3, 0xE8, 0xE8, 0xE8, 0xE4, 0x7D, 0xCC, + 0x6B, 0x33, 0xAE, 0x2C, 0x85, 0x2D, 0x9F, 0x73, + 0xA1, 0x2D, 0x2C, 0xDA, 0x89, 0x48, 0xD3, 0xD9, + 0x21, 0xA3, 0xE8, 0xE8, 0xE8, 0xE8, 0xE3, 0x20, + 0x20, 0x20, 0xDB, 0x41, 0x20, 0x20, 0x20, 0x20, + 0xDA, 0x2C, 0x2C, 0x2C, 0x2C, 0xAF, 0xAC, 0xAC, + 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0x95, 0x95, 0xD9, + 0x2C, 0xD9, 0xD9, 0xAC, 0x2C, 0x2C, 0x85, 0xAF, + 0xAF, 0xAF, 0xAC, 0xAC, 0xD9, 0xAC, 0xAF, 0xAC, + 0xAC, 0x95, 0xD6, 0x7D, 0xAE, 0x88, 0x2B, 0x20, + 0x6C, 0xE8, 0xE8, 0xE8, 0x73, 0xEE, 0x73, 0x2C, + 0x89, 0x2B, 0x41, 0x33, 0xCC, 0xCC, 0x80, 0x3D, + 0x2D, 0x74, 0x80, 0x48, 0x8D, 0x95, 0x48, 0x95, + 0xEE, 0x5C, 0x5C, 0xE8, 0xE8, 0xE8, 0x24, 0x20, + 0x20, 0x20, 0x5B, 0xDB, 0x20, 0x20, 0x20, 0x20, + 0xAF, 0xAC, 0xD9, 0x95, 0xD6, 0xD6, 0xD6, 0x7D, + 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0xD9, 0xAC, + 0xAC, 0xD9, 0xD9, 0xAC, 0x2C, 0x2C, 0x2C, 0xAF, + 0xAC, 0xAC, 0xAC, 0xAC, 0xD9, 0xAC, 0xAC, 0xD9, + 0xD6, 0x48, 0xE9, 0x95, 0x20, 0x2B, 0x41, 0x6B, + 0x8D, 0xE8, 0xE8, 0xCD, 0x2B, 0x2B, 0x2C, 0x73, + 0xCD, 0x48, 0xCA, 0x5B, 0x41, 0x5B, 0x74, 0xDA, + 0x80, 0xE6, 0xC8, 0x85, 0xA1, 0x7D, 0x8D, 0x3D, + 0x7E, 0xE9, 0x7D, 0xEE, 0xE8, 0xE8, 0x81, 0x20, + 0x20, 0x20, 0xE3, 0xE3, 0x20, 0x20, 0x20, 0x20, + 0x2D, 0xD9, 0xD6, 0x48, 0x6C, 0xE9, 0xA1, 0xD6, + 0xD9, 0xD9, 0xAC, 0xD9, 0xD9, 0x95, 0xAC, 0x2C, + 0x2C, 0x2C, 0x2C, 0xD9, 0xAC, 0x2C, 0x2C, 0x2C, + 0xAF, 0x2C, 0xAF, 0xD9, 0xAC, 0xAF, 0xAF, 0x95, + 0xB2, 0xE9, 0x21, 0x2B, 0x41, 0x2B, 0x20, 0x5B, + 0x3D, 0xE8, 0xE8, 0x8D, 0x2B, 0x88, 0x5B, 0xE6, + 0xBC, 0x73, 0x85, 0x89, 0x80, 0x5B, 0xE3, 0xAE, + 0x2C, 0x8A, 0xD6, 0xB2, 0x2C, 0xA3, 0xA3, 0xD9, + 0xA1, 0x2C, 0x85, 0x8D, 0xE8, 0xE8, 0x48, 0x20, + 0x20, 0x20, 0xE3, 0x88, 0x20, 0x20, 0x20, 0x20, + 0xAE, 0xD9, 0xB2, 0xE9, 0x6C, 0x48, 0xD6, 0xD9, + 0x2C, 0x85, 0x2C, 0xD9, 0x7D, 0xD9, 0x2C, 0x85, + 0x8D, 0x85, 0x2C, 0xAC, 0xAF, 0x2C, 0x2C, 0x85, + 0x2C, 0x2C, 0xAF, 0xAC, 0xAC, 0xAF, 0xAF, 0xD9, + 0xB2, 0x48, 0xB2, 0x20, 0x20, 0xCC, 0x20, 0x9F, + 0xE8, 0xE8, 0xE8, 0xCD, 0x48, 0x89, 0xDB, 0x88, + 0x2B, 0xE9, 0xCD, 0x2A, 0x48, 0x80, 0xAE, 0xAE, + 0x7D, 0x48, 0x21, 0xEE, 0x3D, 0x2C, 0x48, 0x85, + 0x2C, 0x95, 0x7D, 0x8C, 0xE8, 0xE8, 0xB2, 0x20, + 0x20, 0x20, 0xDB, 0x20, 0x20, 0x20, 0x20, 0x20, + 0xDB, 0x2C, 0xB2, 0x48, 0x48, 0x7D, 0xD9, 0xAF, + 0x85, 0x8A, 0x85, 0x7D, 0xB2, 0x95, 0x85, 0xDA, + 0xD3, 0x85, 0xAF, 0xAC, 0x2C, 0x85, 0x85, 0x2C, + 0xAC, 0xAC, 0xAC, 0xD9, 0xD9, 0xAC, 0x2C, 0x2C, + 0xD9, 0xAC, 0x5B, 0x20, 0x20, 0xAE, 0x20, 0x2D, + 0xE8, 0xE8, 0xE8, 0x7E, 0xD6, 0x48, 0xE9, 0xAE, + 0x88, 0x5B, 0x80, 0x6C, 0xAE, 0xCA, 0x91, 0xE9, + 0x43, 0x9F, 0xE6, 0x2C, 0x48, 0x21, 0xBC, 0x95, + 0x95, 0xD6, 0x21, 0x7E, 0xE8, 0xE8, 0x7D, 0x20, + 0x20, 0x20, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x6B, 0xDA, 0xD9, 0x48, 0xB2, 0xD9, 0x2C, 0x85, + 0xDA, 0xDA, 0x2C, 0xA1, 0x48, 0xAC, 0xDA, 0x8D, + 0x2A, 0xAC, 0x7D, 0x95, 0xAF, 0x85, 0x2C, 0x2C, + 0xAC, 0xD9, 0x95, 0x7D, 0x95, 0xAC, 0x2C, 0xAF, + 0x7D, 0xD6, 0x20, 0x20, 0x88, 0x9F, 0x20, 0xA1, + 0xE8, 0xE8, 0xE8, 0xA3, 0xD6, 0x6C, 0xB2, 0x2C, + 0x89, 0xE3, 0x88, 0xDB, 0xCC, 0x24, 0x7D, 0xEE, + 0xB2, 0xCC, 0xAE, 0x2D, 0xDA, 0x2C, 0xD6, 0x2C, + 0xB2, 0x2D, 0xD6, 0xEE, 0xE8, 0xE8, 0x95, 0x20, + 0x20, 0x20, 0xDB, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x6B, 0xDA, 0x95, 0xA1, 0xB2, 0xAC, 0x85, 0x85, + 0xDA, 0x2C, 0x95, 0xA1, 0x21, 0x2C, 0x8A, 0x2A, + 0xAF, 0xA1, 0x48, 0xD6, 0xAF, 0x2C, 0x2C, 0xAC, + 0xD9, 0xD9, 0x95, 0x7D, 0x95, 0xAC, 0xD9, 0x7D, + 0x48, 0xE6, 0x20, 0x20, 0x33, 0x89, 0x6B, 0x95, + 0xE8, 0xE8, 0xE8, 0xA3, 0x21, 0x48, 0xAF, 0xAF, + 0x9F, 0xE9, 0x43, 0x33, 0x33, 0x2D, 0xDA, 0xCD, + 0xD6, 0xAE, 0x85, 0x2C, 0x7D, 0xD6, 0x91, 0xB8, + 0xD4, 0x48, 0x7D, 0xA3, 0xE8, 0xE8, 0x95, 0x20, + 0x20, 0x33, 0xE3, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2C, 0x48, 0x6C, 0xB2, 0xAF, 0xDA, 0xDA, + 0x85, 0xAF, 0xD9, 0x95, 0xAC, 0xDA, 0x8A, 0xDA, + 0x7D, 0x48, 0x48, 0x7D, 0x2C, 0x85, 0x2C, 0xAF, + 0xD9, 0xD9, 0x7D, 0x95, 0xD9, 0xD9, 0x95, 0xD6, + 0x21, 0x24, 0x20, 0x20, 0x20, 0x5B, 0xDB, 0xAC, + 0xE8, 0xE8, 0xE8, 0x3D, 0x7D, 0x48, 0xE6, 0x2D, + 0x85, 0x81, 0x81, 0x48, 0xAE, 0xCA, 0x89, 0xCC, + 0xAE, 0xDB, 0x2D, 0x95, 0x21, 0xCC, 0xDB, 0xAE, + 0x91, 0xE9, 0x7D, 0x73, 0xE8, 0xE8, 0x48, 0x20, + 0x6B, 0x74, 0x41, 0x88, 0x6B, 0x20, 0x20, 0x20, + 0x6B, 0x95, 0xB2, 0xD6, 0xD9, 0x85, 0xDA, 0xDA, + 0xDA, 0x2C, 0xAF, 0xAF, 0x2C, 0xDA, 0xDA, 0x85, + 0xA1, 0xE9, 0x48, 0x95, 0x85, 0xDA, 0x85, 0xAC, + 0xD9, 0xD9, 0x95, 0x95, 0xD9, 0xD9, 0xD9, 0x95, + 0x95, 0x6C, 0x41, 0x93, 0x93, 0x41, 0xDB, 0x95, + 0xE8, 0xE8, 0xE8, 0x3D, 0x95, 0xD4, 0x6C, 0x21, + 0x2D, 0x95, 0xCD, 0x2C, 0xD6, 0xD9, 0x6C, 0x91, + 0x89, 0x7D, 0xAC, 0x2A, 0x8D, 0xE6, 0xCC, 0x88, + 0x74, 0x48, 0xD9, 0xE4, 0xE8, 0xE8, 0xE6, 0x88, + 0x2B, 0x88, 0x20, 0x33, 0xDB, 0x2B, 0xDB, 0x20, + 0x91, 0x7D, 0xD9, 0xD9, 0x85, 0x85, 0xDA, 0xDA, + 0x85, 0xAF, 0xAC, 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, + 0xA1, 0xA1, 0xD6, 0xAF, 0x85, 0xDA, 0x85, 0x2C, + 0xD9, 0xD9, 0x95, 0x95, 0xD9, 0xD9, 0xD9, 0xAC, + 0x2C, 0x47, 0x87, 0x3E, 0x3E, 0xA4, 0x7B, 0x80, + 0xA3, 0xE8, 0xE8, 0x5C, 0x7D, 0x48, 0xE6, 0xD9, + 0xBC, 0xEE, 0x7D, 0x43, 0xD6, 0x21, 0x43, 0x6C, + 0x43, 0x7D, 0x7D, 0xB2, 0x8A, 0xEE, 0x2C, 0xCA, + 0xAE, 0x48, 0x2C, 0xE4, 0xE8, 0x5C, 0xCC, 0x88, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x41, 0x91, 0xE3, + 0x21, 0xD9, 0x2C, 0x2C, 0xDA, 0xDA, 0xDA, 0x85, + 0x2C, 0xAC, 0xD9, 0xD9, 0xAC, 0xAF, 0xAF, 0xAF, + 0xD6, 0x7D, 0xD9, 0x2C, 0xDA, 0xDA, 0x85, 0xAC, + 0xD9, 0x7D, 0x7D, 0xD9, 0xD9, 0xD9, 0x2C, 0x2C, + 0xB8, 0x9C, 0xEC, 0x62, 0x6F, 0x62, 0x70, 0x3C, + 0xAE, 0xCD, 0xE8, 0xE8, 0x8C, 0x7D, 0xC8, 0x3D, + 0x8A, 0xE9, 0x2D, 0x9E, 0xA1, 0xD6, 0x48, 0x73, + 0x81, 0xD6, 0xD6, 0xAE, 0x5B, 0x2D, 0xA3, 0xA3, + 0x21, 0x21, 0xCD, 0xE8, 0xC0, 0x56, 0x31, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x33, 0xCC, 0xDB, + 0x42, 0x85, 0x85, 0x85, 0x85, 0x85, 0x2C, 0x2C, + 0xAC, 0xD9, 0xD9, 0xD9, 0xAC, 0xAF, 0xAF, 0xAF, + 0xD9, 0x95, 0xAC, 0x2C, 0x85, 0x85, 0x2C, 0xD9, + 0x7D, 0xD6, 0xD6, 0xD9, 0xAC, 0xAF, 0x8A, 0xBC, + 0xC2, 0x68, 0x2E, 0x4B, 0xC9, 0x8B, 0x62, 0x87, + 0x3C, 0x74, 0xBC, 0xE8, 0xE8, 0xE4, 0xEE, 0xA1, + 0xE9, 0x21, 0xE6, 0x89, 0x48, 0x7D, 0xB2, 0x5C, + 0x6C, 0x7D, 0x21, 0x80, 0xE3, 0x33, 0xCC, 0x2C, + 0x3D, 0x3D, 0xE8, 0xE8, 0xEC, 0xCB, 0x5A, 0x6B, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x88, 0x41, 0x51, + 0x49, 0x28, 0x85, 0x85, 0x85, 0x85, 0x2C, 0xAF, + 0xAC, 0xAC, 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, + 0xD9, 0x95, 0xD9, 0x2C, 0x85, 0x85, 0x2C, 0xD9, + 0xB2, 0xB2, 0x2C, 0x2A, 0x79, 0x79, 0x97, 0x44, + 0xED, 0x29, 0x32, 0x62, 0x4B, 0x62, 0x6F, 0x22, + 0xF3, 0x6B, 0x33, 0x85, 0x73, 0xE4, 0x2D, 0x2B, + 0xCC, 0x9F, 0xDA, 0xBC, 0x48, 0xD6, 0xA1, 0xE4, + 0xE9, 0xD6, 0xD9, 0x2A, 0xB2, 0x2B, 0x2B, 0xA1, + 0xB8, 0xE8, 0xE8, 0xE8, 0xEC, 0x3E, 0x30, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x6B, 0x54, 0xDC, + 0xC9, 0x53, 0xBC, 0x2C, 0x2C, 0x2C, 0xAF, 0xAF, + 0xAF, 0xAC, 0xAF, 0xAC, 0xAC, 0x2C, 0xAF, 0xAC, + 0x2C, 0x7D, 0xD9, 0x2C, 0x85, 0xDA, 0xAF, 0x7D, + 0xB2, 0xAC, 0xC6, 0xBA, 0x4C, 0xEF, 0xA7, 0xEF, + 0xEC, 0x7A, 0x62, 0x4B, 0x62, 0x4B, 0x8B, 0x4B, + 0x3A, 0x52, 0x20, 0x6B, 0x21, 0x73, 0xAC, 0x2B, + 0x41, 0x33, 0x48, 0x67, 0xA1, 0xD6, 0xD6, 0x5C, + 0xE9, 0xD6, 0x2C, 0xEE, 0xB2, 0x9F, 0x8A, 0x95, + 0x4D, 0xE8, 0xE8, 0x3D, 0x7A, 0x57, 0xD1, 0x7B, + 0x20, 0x20, 0x20, 0x20, 0x6B, 0xCF, 0xBA, 0x3E, + 0x3E, 0xD0, 0xBC, 0xAC, 0xAC, 0x2C, 0x2C, 0xAC, + 0xD9, 0xD9, 0x95, 0x95, 0x7D, 0x95, 0x95, 0xD9, + 0x85, 0xD9, 0xAF, 0xDA, 0xDA, 0x85, 0xAC, 0x21, + 0xB2, 0x2A, 0xBA, 0x57, 0x2E, 0x2E, 0x2E, 0x7A, + 0x32, 0x62, 0x8B, 0x4B, 0x8B, 0x4B, 0x4B, 0x4B, + 0xC9, 0x4A, 0x5F, 0x20, 0x20, 0x2D, 0xA3, 0xD9, + 0xCA, 0x88, 0xDB, 0x24, 0x48, 0x7D, 0xB2, 0xE4, + 0x2D, 0x7D, 0x7D, 0x81, 0xA1, 0xDA, 0x21, 0xDA, + 0xE4, 0xE8, 0xEE, 0xF1, 0x2E, 0x57, 0x82, 0x76, + 0x52, 0x4F, 0x4F, 0x98, 0xDE, 0xB5, 0xEC, 0x2E, + 0x3E, 0x6D, 0x85, 0x2C, 0xAC, 0xAC, 0xD9, 0xD9, + 0x95, 0xD6, 0x7D, 0x7D, 0x95, 0xD9, 0xD9, 0xD9, + 0xDA, 0x2C, 0x85, 0xDA, 0xDA, 0x2C, 0x95, 0xB2, + 0x21, 0xB8, 0xED, 0x2E, 0x3E, 0x4B, 0xC9, 0x4B, + 0x8B, 0x62, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x22, 0x6F, 0xCE, 0x20, 0x20, 0x20, 0x80, 0xCD, + 0xDA, 0x2D, 0x2B, 0xDB, 0xE9, 0xD6, 0x95, 0x5C, + 0x2D, 0x7D, 0x7D, 0xAF, 0xAF, 0xAC, 0xEE, 0x5C, + 0xE8, 0xE8, 0xEB, 0x25, 0x7A, 0x57, 0x39, 0xE1, + 0x83, 0xA8, 0x55, 0x83, 0x82, 0x57, 0x32, 0x8B, + 0x62, 0x6D, 0xEB, 0x95, 0xD9, 0xD9, 0xD9, 0xD9, + 0xD9, 0xD9, 0xD9, 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, + 0xDA, 0x2C, 0x85, 0x85, 0x85, 0xAC, 0xD6, 0x21, + 0x95, 0x6E, 0xED, 0x57, 0x62, 0x4B, 0x8B, 0x4B, + 0x4B, 0x62, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x62, + 0x62, 0x62, 0x25, 0x3C, 0x20, 0x20, 0x20, 0xE3, + 0x2A, 0xBC, 0x7D, 0xCA, 0x6C, 0xD6, 0x95, 0x3D, + 0x81, 0x7D, 0xD6, 0xD6, 0xDA, 0x73, 0xE8, 0xE8, + 0xE8, 0x4D, 0x94, 0xED, 0x72, 0x3A, 0xF1, 0xA7, + 0x39, 0xED, 0x39, 0xEF, 0x57, 0x32, 0x8B, 0x4B, + 0x62, 0x62, 0xA6, 0x2A, 0xD9, 0xD9, 0xD9, 0xD9, + 0x2C, 0x2C, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, + 0x85, 0x2C, 0x2C, 0xAF, 0xAC, 0x95, 0x21, 0x7D, + 0xAC, 0x8C, 0x46, 0xC4, 0x62, 0x8B, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x4B, 0x62, 0xC9, 0x30, 0x7B, 0x20, 0x20, 0x20, + 0x41, 0x4D, 0x3D, 0x85, 0x48, 0x21, 0xDA, 0x3D, + 0xE9, 0xD6, 0xD9, 0xCD, 0x5C, 0xE8, 0xE8, 0xE8, + 0xE8, 0x4D, 0x71, 0x46, 0xEC, 0x2E, 0x72, 0xEC, + 0x29, 0x29, 0x7C, 0x29, 0x2E, 0x4B, 0x4B, 0x62, + 0x62, 0x4B, 0x3A, 0xAD, 0xE2, 0xAF, 0xD9, 0xD9, + 0x2C, 0xDA, 0xDA, 0xDA, 0xDA, 0x85, 0x2C, 0x2C, + 0x2C, 0xAF, 0xAC, 0xD9, 0x95, 0xD6, 0xD6, 0xD9, + 0x2C, 0x8C, 0xBA, 0x7C, 0x2E, 0x4B, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x4B, 0x62, 0xC9, 0xDC, 0x34, 0x20, 0x20, 0x20, + 0x20, 0xAC, 0xE8, 0x5C, 0x8C, 0xBC, 0xE4, 0xE8, + 0xEE, 0x2A, 0xA3, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE4, 0x7E, 0x65, 0x46, 0x29, 0x62, 0x62, 0x2E, + 0x2E, 0x72, 0x2E, 0x2E, 0x32, 0x4B, 0x4B, 0x62, + 0x4B, 0x4B, 0x4B, 0x32, 0x61, 0x9D, 0x2C, 0xD9, + 0x2C, 0x85, 0xDA, 0x85, 0x2C, 0xAF, 0xAF, 0xAF, + 0x2C, 0xAC, 0xD9, 0x95, 0xD6, 0x7D, 0x95, 0xAC, + 0x2C, 0xDA, 0x40, 0x7C, 0x2E, 0x4B, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x4B, 0x62, 0x62, 0x22, 0xB7, 0xCE, 0x20, 0x20, + 0x20, 0x95, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x5C, + 0x3D, 0xE9, 0x9A, 0x46, 0x7C, 0x32, 0x8B, 0x62, + 0x4B, 0x8B, 0x8B, 0x4B, 0x4B, 0x4B, 0x4B, 0x62, + 0x4B, 0x4B, 0x4B, 0x4B, 0x62, 0x61, 0x4E, 0xDA, + 0x85, 0x85, 0x85, 0x2C, 0xD9, 0xD9, 0xD9, 0xD9, + 0x85, 0xD9, 0x7D, 0x21, 0x21, 0xD6, 0xAC, 0x2C, + 0x2C, 0xDA, 0xDD, 0x77, 0x8B, 0x62, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x3E, 0x8B, 0x32, 0xC9, 0x22, 0x68, 0x88, 0x33, + 0xA1, 0x73, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0x5C, 0x5C, 0x5C, 0x5C, 0x3D, + 0x89, 0x20, 0x54, 0x23, 0x29, 0x2E, 0x4B, 0x62, + 0x4B, 0x3E, 0x4B, 0x62, 0x4B, 0x4B, 0x4B, 0x8B, + 0x8B, 0xC9, 0x6F, 0x4B, 0x8B, 0x4B, 0x78, 0xE2, + 0x8A, 0x8A, 0x85, 0xAC, 0xD9, 0x7D, 0xD9, 0xAC, + 0x2C, 0xD9, 0xD6, 0xB2, 0x21, 0x7D, 0xAF, 0x85, + 0x2C, 0xDA, 0x40, 0xEF, 0x62, 0x62, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x4B, 0x4B, 0x8B, 0x4B, 0xC9, 0x63, 0xB4, 0x5C, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0xE8, 0xE8, 0xE8, 0xE8, 0x5C, 0x5C, 0xCD, 0xAE, + 0x20, 0x20, 0xCE, 0xE1, 0x57, 0x32, 0x4B, 0x4B, + 0x8B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x8B, 0x4B, 0x62, 0x4B, 0x62, 0x2E, 0x61, 0x28, + 0x8D, 0xDA, 0xAF, 0xD9, 0x95, 0x95, 0xD9, 0xAF, + 0xAF, 0xD9, 0xD6, 0xB2, 0x21, 0xD9, 0x2C, 0x85, + 0xAF, 0xEB, 0xE1, 0x57, 0x2E, 0x62, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x3E, 0x9B, 0x31, 0x6E, + 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, + 0x5C, 0xE8, 0xE8, 0xE8, 0x3D, 0x7D, 0x33, 0x6B, + 0x20, 0x20, 0x34, 0x23, 0x29, 0x3E, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x4B, 0x3E, 0x62, 0x62, 0x2E, 0xC4, 0x49, 0xD5, + 0xDA, 0xD9, 0xD6, 0xA1, 0xA1, 0x21, 0xD9, 0xD9, + 0xD9, 0x95, 0x21, 0x48, 0xD6, 0xAC, 0x85, 0x85, + 0xAF, 0xB6, 0x5D, 0x2E, 0x32, 0x4B, 0x4B, 0x4B, + 0x4B, 0x4B, 0x62, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x62, 0x2E, 0x45, 0xDE, + 0xDA, 0x5C, 0xE8, 0x5C, 0xE8, 0xE8, 0x5C, 0xE8, + 0x5C, 0x5C, 0xA3, 0xAC, 0x2B, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x34, 0x23, 0x29, 0x62, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x62, 0x4B, 0x4B, 0x4B, + 0x4B, 0x3E, 0x3E, 0x63, 0x40, 0x97, 0x28, 0xDA, + 0xD9, 0xA1, 0x48, 0xE9, 0x48, 0x21, 0xD9, 0xD9, + 0xA1, 0xB2, 0xB2, 0xA1, 0x21, 0xAC, 0x85, 0x2C, + 0xDA, 0x36, 0x77, 0x72, 0x62, 0x8B, 0x62, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x3E, 0xEC, 0x2F, 0x51, + 0xE3, 0xAE, 0x48, 0x2C, 0xDA, 0xDA, 0x85, 0xAC, + 0x48, 0x9E, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x41, 0xA0, 0x23, 0x72, 0x2E, 0x4B, 0x4B, + 0x4B, 0x62, 0x62, 0x4B, 0x4B, 0x4B, 0x2E, 0x8B, + 0xF0, 0x4C, 0x40, 0xC2, 0x90, 0x8D, 0x85, 0xD9, + 0xA1, 0x6C, 0x6C, 0x48, 0xD6, 0xD9, 0xAF, 0xAC, + 0xA1, 0xD6, 0xD6, 0xB2, 0xD6, 0xAC, 0x85, 0x85, + 0x4D, 0xBE, 0x39, 0x4C, 0x57, 0x2E, 0x2E, 0x2E, + 0x3E, 0x3E, 0x62, 0x3E, 0x4B, 0x4B, 0x4B, 0x4B, + 0x4B, 0x4B, 0x4B, 0x8B, 0x8B, 0x57, 0x60, 0x76, + 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3C, 0xA0, 0x23, 0x7C, 0x2E, 0x4B, 0x4B, + 0x8B, 0x62, 0x4B, 0x4B, 0x3E, 0x7A, 0xF0, 0x29, + 0x36, 0x97, 0xBC, 0x8A, 0x8D, 0xDA, 0xD9, 0x48, + 0x81, 0x2D, 0x48, 0xD6, 0xD9, 0xAF, 0x2C, 0x2C, + 0xAC, 0xAF, 0xD9, 0x7D, 0x7D, 0x2C, 0x85, 0x85, + 0x85, 0xB4, 0x66, 0x23, 0x46, 0x2F, 0x60, 0x68, + 0x77, 0x29, 0x29, 0xF0, 0x2E, 0x2E, 0x62, 0x4B, + 0x4B, 0x4B, 0x4B, 0x4B, 0x32, 0x7C, 0x83, 0xB3, + 0x54, 0x6B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x6B, 0x7B, 0xC3, 0xE7, 0x39, 0x72, 0x62, 0x62, + 0x62, 0x62, 0x62, 0x2E, 0x29, 0x77, 0xA7, 0x36, + 0xB8, 0x85, 0x85, 0x8D, 0x8D, 0x85, 0xB2, 0x2D, + 0x2D, 0xE9, 0xD6, 0xD9, 0xAF, 0x2C, 0x85, 0x85, + 0x2A, 0x85, 0xAC, 0x95, 0x95, 0xAF, 0x85, 0x85, + 0xAF, 0x8C, 0xDF, 0xC6, 0xB1, 0xD1, 0xE5, 0xE7, + 0x83, 0x23, 0x5D, 0x60, 0x39, 0x77, 0xEC, 0x2E, + 0x2E, 0x32, 0x32, 0x2E, 0x7C, 0x5D, 0x35, 0xA2, + 0x54, 0x6B, 0x6B, 0x20, 0x6B, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x6B, 0x88, 0xC1, 0x35, 0xE1, 0x77, 0x57, 0x2E, + 0x2E, 0x72, 0x29, 0x77, 0x60, 0xB5, 0x44, 0xE2, + 0x2C, 0x2C, 0xDA, 0x8A, 0xDA, 0xAF, 0xA1, 0x2D, + 0xE9, 0xD6, 0xD9, 0xAF, 0x2C, 0x85, 0x85, 0x85, + 0xEE, 0xAF, 0xD9, 0x7D, 0xD9, 0x2C, 0xDA, 0x85, + 0xAC, 0xAF, 0x85, 0xDA, 0x8A, 0x2A, 0xE2, 0x50, + 0x86, 0xD7, 0x75, 0x35, 0xA8, 0xE7, 0xE1, 0x5D, + 0x68, 0x7C, 0xF1, 0x68, 0xE1, 0xBF, 0xA2, 0xC1, + 0x52, 0x2B, 0x7D, 0xAC, 0xAF, 0x2C, 0x2C, 0x2C, + 0x2C, 0x85, 0x85, 0x85, 0x2C, 0x2C, 0x2C, 0x95, + 0xE9, 0x74, 0xCE, 0xE0, 0xE7, 0x60, 0x77, 0x77, + 0x7C, 0xEF, 0x5D, 0x23, 0x3F, 0xB6, 0x8A, 0x2C, + 0xAC, 0xAF, 0x85, 0x8A, 0x85, 0xD9, 0x48, 0x48, + 0xB2, 0x95, 0x95, 0xD9, 0x85, 0xDA, 0x85, 0x85, + 0xD3, 0xB2, 0x21, 0x7D, 0xAC, 0x2C, 0xDA, 0x85, + 0xAC, 0xAC, 0x85, 0x85, 0x85, 0x2C, 0xAF, 0x2C, + 0xDA, 0x8C, 0x79, 0xC7, 0xB0, 0x51, 0xB3, 0x35, + 0xBF, 0xE5, 0xE7, 0xA8, 0xE0, 0xA2, 0xC1, 0x34, + 0x7D, 0x85, 0xAC, 0xD9, 0xAC, 0xAF, 0xAC, 0xAC, + 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, 0xAF, 0xAF, 0x85, + 0xC8, 0xCD, 0x6A, 0x26, 0x35, 0x3F, 0x83, 0x23, + 0x23, 0xE7, 0xBF, 0x96, 0xEB, 0xDA, 0xDA, 0x2C, + 0x2C, 0x2C, 0x85, 0xDA, 0x2C, 0x7D, 0xA1, 0x48, + 0xB2, 0x21, 0xD6, 0xD9, 0x2C, 0xDA, 0x85, 0xAF, + 0xAF, 0x2D, 0xE9, 0x7D, 0xAC, 0x2C, 0x85, 0x2C, + 0xD9, 0xD9, 0xAF, 0x85, 0x85, 0x85, 0x2C, 0x2C, + 0x2C, 0x85, 0xD9, 0x21, 0xAC, 0x2C, 0xBD, 0xA5, + 0xC3, 0xA2, 0xA2, 0xA2, 0x26, 0xC1, 0xCE, 0x2A, + 0xAF, 0x95, 0xD9, 0x2C, 0x2C, 0x85, 0x2C, 0xAF, + 0xAC, 0x2C, 0x85, 0x2C, 0xAF, 0x2C, 0x85, 0xDA, + 0x8D, 0x2A, 0x85, 0x34, 0xC1, 0xB3, 0x76, 0x35, + 0xE0, 0x30, 0xA5, 0xB6, 0x2C, 0x85, 0x85, 0x85, + 0xAF, 0x2C, 0x85, 0x85, 0xD9, 0xD6, 0xA1, 0xA1, + 0x48, 0xA1, 0xD6, 0xAF, 0xDA, 0x8A, 0x2C, 0xD9, + 0xB2, 0x2D, 0x48, 0xD9, 0xAF, 0x2C, 0x2C, 0x85, + 0xAF, 0xAC, 0x2C, 0x85, 0x85, 0x85, 0xAF, 0xAC, + 0xAC, 0x2C, 0xD9, 0xD6, 0xD6, 0x21, 0xB2, 0x2C, + 0xC8, 0x3B, 0x65, 0xC5, 0xCE, 0x8E, 0xC8, 0x2C, + 0xD9, 0x95, 0xAC, 0x2C, 0x2C, 0x2C, 0xAF, 0xAC, + 0xAC, 0xAF, 0x2C, 0x85, 0x2C, 0x2C, 0x2C, 0x85, + 0xDA, 0x2C, 0xD6, 0xAF, 0x59, 0x65, 0xDE, 0xF3, + 0xF3, 0x59, 0xBC, 0xAC, 0xAF, 0x85, 0x85, 0x85, + 0xAF, 0xD9, 0xAF, 0x2C, 0xD9, 0xD6, 0xD6, 0xD6, + 0x21, 0xD6, 0xD9, 0xDA, 0x8D, 0x8A, 0x2C, 0xD9, + 0xB2, 0xA1, 0xD6, 0xAC, 0x2C, 0x2C, 0x2C, 0x85, + 0x2C, 0xAC, 0x2C, 0xDA, 0xDA, 0x85, 0xAF, 0xD9, + 0xD9, 0xAC, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xAC, + 0x85, 0x2A, 0x4D, 0xBC, 0x85, 0xAC, 0xAF, 0xAF, + 0xAC, 0xD9, 0xAF, 0x2C, 0xAF, 0xD9, 0xD9, 0xAC, + 0xAC, 0xAF, 0x85, 0x2C, 0x85, 0x2C, 0x2C, 0x2C, + 0x2C, 0xD9, 0xB2, 0xD4, 0xD6, 0x2C, 0x8A, 0xDA, + 0xC8, 0x85, 0x2C, 0xAC, 0x2C, 0xDA, 0xDA, 0x85, + 0xAF, 0xAC, 0xD9, 0xAC, 0xD9, 0xD9, 0xD9, 0xD9, + 0xD9, 0xAC, 0xDA, 0x8D, 0xBC, 0xDA, 0xD9, 0x95, + 0x95, 0xD9, 0xD9, 0xAF, 0x2C, 0x2C, 0x2C, 0x85, + 0x2C, 0xAF, 0xAF, 0x85, 0x85, 0x85, 0x2C, 0xAC, + 0xD9, 0xAF, 0xAF, 0xAF, 0x2C, 0x2C, 0x2C, 0x85, + 0x8A, 0x2A, 0x8D, 0x2C, 0xD9, 0x95, 0xAC, 0xAC, + 0xD9, 0xD9, 0xD9, 0xD9, 0x95, 0x95, 0xD9, 0xAF, + 0xAF, 0x2C, 0x85, 0x85, 0x85, 0x85, 0x85, 0x2C, + 0x85, 0x2C, 0xD9, 0xD9, 0xD9, 0x2C, 0x2C, 0x2C, + 0x2C, 0x85, 0x85, 0xAF, 0xAF, 0x85, 0x85, 0x85, + 0xAF, 0xD9, 0xD9, 0xAC, 0xAF, 0x2C, 0x2C, 0x2C, + 0x2C, 0x85, 0x8A, 0x2A, 0x8D, 0x2C, 0xD9, 0xD9, + 0x2C, 0xAC, 0xAF, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, + 0x85, 0xAF, 0xAC, 0x2C, 0x2C, 0x2C, 0x2C, 0xAC, + 0xD9, 0xD9, 0xAF, 0x85, 0x85, 0x85, 0xDA, 0xDA, + 0x8A, 0x8A, 0x85, 0xAC, 0xD9, 0xD9, 0xAC, 0xD9, + 0xD6, 0xD6, 0x7D, 0x95, 0x7D, 0xD9, 0xAF, 0xAF, + 0xAF, 0x2C, 0x85, 0x85, 0xDA, 0x85, 0x2C, 0x85, + 0x85, 0x2C, 0xAF, 0xAC, 0xAF, 0xAF, 0x2C, 0x2C, + 0x2C, 0x2C, 0x2C, 0xAF, 0xAC, 0x2C, 0x2C, 0x2C, + 0x2C, 0xAF, 0xD9, 0xAC, 0xAF, 0x2C, 0x85, 0x85, + 0x85, 0xDA, 0x8D, 0x8A, 0x85, 0xAC, 0x95, 0xD9 +}; + +#define INCLUDE_LINUX_LOGOBW +#define INCLUDE_LINUX_LOGO16 +#include <linux/linux_logo.h> #else @@ -63,8 +937,5 @@ extern unsigned char linux_logo16_red[]; extern unsigned char linux_logo16_green[]; extern unsigned char linux_logo16_blue[]; extern unsigned char linux_logo16[]; -extern unsigned char *linux_serial_image; - -extern int (*console_show_logo)(void); #endif diff --git a/include/asm-mips/mmu_context.h b/include/asm-mips/mmu_context.h index 9e237fade..b7c4c90cd 100644 --- a/include/asm-mips/mmu_context.h +++ b/include/asm-mips/mmu_context.h @@ -1,4 +1,4 @@ -/* $Id: mmu_context.h,v 1.2 1998/05/05 10:22:01 ralf Exp $ +/* $Id: mmu_context.h,v 1.2 1998/05/07 03:02:50 ralf Exp $ * * Switch a MMU context. * @@ -11,29 +11,61 @@ #ifndef __ASM_MIPS_MMU_CONTEXT_H #define __ASM_MIPS_MMU_CONTEXT_H -#define MAX_ASID 255 - +/* Fuck. The f-word is here so you can grep for it :-) */ extern unsigned long asid_cache; -#define ASID_VERSION_SHIFT 16 -#define ASID_VERSION_MASK ((~0UL) << ASID_VERSION_SHIFT) -#define ASID_FIRST_VERSION (1UL << ASID_VERSION_SHIFT) +/* I patch, therefore I am ... */ +#define ASID_INC(asid) \ + ({ unsigned long __asid = asid; \ + __asm__("1:\taddiu\t%0,0\t\t\t\t# patched\n\t" \ + ".section\t__asid_inc,\"a\"\n\t" \ + ".word\t1b\n\t" \ + ".previous" \ + :"=r" (__asid) \ + :"0" (__asid)); \ + __asid; }) +#define ASID_MASK(asid) \ + ({ unsigned long __asid = asid; \ + __asm__("1:\tandi\t%0,%1,0\t\t\t# patched\n\t" \ + ".section\t__asid_mask,\"a\"\n\t" \ + ".word\t1b\n\t" \ + ".previous" \ + :"=r" (__asid) \ + :"r" (__asid)); \ + __asid; }) +#define ASID_VERSION_MASK \ + ({ unsigned long __asid; \ + __asm__("1:\tli\t%0,0\t\t\t\t# patched\n\t" \ + ".section\t__asid_version_mask,\"a\"\n\t" \ + ".word\t1b\n\t" \ + ".previous" \ + :"=r" (__asid)); \ + __asid; }) +#define ASID_FIRST_VERSION \ + ({ unsigned long __asid = asid; \ + __asm__("1:\tli\t%0,0\t\t\t\t# patched\n\t" \ + ".section\t__asid_first_version,\"a\"\n\t" \ + ".word\t1b\n\t" \ + ".previous" \ + :"=r" (__asid)); \ + __asid; }) + +#define ASID_FIRST_VERSION_R3000 0x1000 +#define ASID_FIRST_VERSION_R4000 0x100 -extern inline void get_new_mmu_context(struct mm_struct *mm, unsigned long asid) +extern inline void +get_new_mmu_context(struct mm_struct *mm, unsigned long asid) { - /* check if it's legal.. */ - if ((asid & ~ASID_VERSION_MASK) > MAX_ASID) { - /* start a new version, invalidate all old asid's */ - flush_tlb_all(); - asid = (asid & ASID_VERSION_MASK) + ASID_FIRST_VERSION; - if (!asid) + if (!ASID_MASK((asid = ASID_INC(asid)))) { + flush_tlb_all(); /* start new asid cycle */ + if (!asid) /* fix version if needed */ asid = ASID_FIRST_VERSION; } - asid_cache = asid + 1; - mm->context = asid; /* full version + asid */ + mm->context = asid_cache = asid; } -extern inline void get_mmu_context(struct task_struct *p) +extern inline void +get_mmu_context(struct task_struct *p) { struct mm_struct *mm = p->mm; @@ -73,4 +105,30 @@ extern inline void activate_context(struct task_struct *tsk) set_entryhi(tsk->mm->context); } +extern void __asid_setup(unsigned int inc, unsigned int mask, + unsigned int version_mask, unsigned int first_version); + +extern inline void r3000_asid_setup(void) +{ + __asid_setup(0x40, 0xfc0, 0xf000, ASID_FIRST_VERSION_R3000); +} + +extern inline void r6000_asid_setup(void) +{ + panic("r6000_asid_setup: implement me"); /* No idea ... */ +} + +extern inline void tfp_asid_setup(void) +{ + panic("tfp_asid_setup: implement me"); /* No idea ... */ +} + +extern inline void r4xx0_asid_setup(void) +{ + __asid_setup(1, 0xff, 0xff00, ASID_FIRST_VERSION_R4000); +} + +/* R10000 has the same ASID mechanism as the R4000. */ +#define andes_asid_setup r4xx0_asid_setup + #endif /* __ASM_MIPS_MMU_CONTEXT_H */ diff --git a/include/asm-mips/namei.h b/include/asm-mips/namei.h index eb895b003..d61b3cd82 100644 --- a/include/asm-mips/namei.h +++ b/include/asm-mips/namei.h @@ -3,7 +3,7 @@ * * Included from linux/fs/namei.c * - * $Id: namei.h,v 1.6 1997/09/18 07:59:31 root Exp $ + * $Id: namei.h,v 1.5 1997/12/01 18:00:40 ralf Exp $ */ #ifndef __ASM_MIPS_NAMEI_H #define __ASM_MIPS_NAMEI_H @@ -14,7 +14,7 @@ #define IRIX32_EMUL "usr/gnemul/irix/" static inline struct dentry * -__mips_lookup_dentry(const char *name, int follow_link) +__mips_lookup_dentry(const char *name, int lookup_flags) { struct dentry *base; @@ -22,11 +22,12 @@ __mips_lookup_dentry(const char *name, int follow_link) return ERR_PTR(-ENOENT); base = lookup_dentry (IRIX32_EMUL, - dget (current->fs->root), 1); + dget (current->fs->root), + (LOOKUP_FOLLOW | LOOKUP_DIRECTORY | LOOKUP_SLASHOK)); if (IS_ERR (base)) return base; - base = lookup_dentry (name, base, follow_link); + base = lookup_dentry (name, base, lookup_flags); if (IS_ERR (base)) return base; @@ -40,13 +41,13 @@ __mips_lookup_dentry(const char *name, int follow_link) #ifdef CONFIG_BINFMT_IRIX -#define __prefix_lookup_dentry(name, follow_link) \ - dentry = __mips_lookup_dentry (name, follow_link); \ +#define __prefix_lookup_dentry(name, lookup_flags) \ + dentry = __mips_lookup_dentry (name, lookup_flags); \ if (!IS_ERR (dentry)) return dentry; #else /* !defined(CONFIG_BINFMT_IRIX) */ -#define __prefix_lookup_dentry(name, follow_link) \ +#define __prefix_lookup_dentry(name, lookup_flags) \ do {} while (0) #endif /* !defined(CONFIG_BINFMT_IRIX) */ diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h index 3629f496d..397e9b008 100644 --- a/include/asm-mips/page.h +++ b/include/asm-mips/page.h @@ -1,4 +1,4 @@ -/* $Id: page.h,v 1.4 1998/08/25 09:21:59 ralf Exp $ +/* $Id: page.h,v 1.5 1998/08/28 23:24:03 tsbogend Exp $ * * Definitions for page handling * @@ -22,58 +22,6 @@ #ifndef _LANGUAGE_ASSEMBLY -#ifdef __SMP__ -#define ULOCK_DECLARE extern spinlock_t user_page_lock; -#else -#define ULOCK_DECLARE -#endif -struct upcache { - struct page *list; - unsigned long count; -}; -extern struct upcache user_page_cache[8]; -#define USER_PAGE_WATER 16 - -extern unsigned long get_user_page_slow(int which); -extern unsigned long user_page_colours, user_page_order; - -#define get_user_page(__vaddr) \ -({ \ - ULOCK_DECLARE \ - int which = ((__vaddr) >> PAGE_SHIFT) & user_page_colours; \ - struct upcache *up = &user_page_cache[which]; \ - struct page *p; \ - unsigned long ret; \ - spin_lock(&user_page_lock); \ - if((p = up->list) != NULL) { \ - up->list = p->next; \ - up->count--; \ - } \ - spin_unlock(&user_page_lock); \ - if(p != NULL) \ - ret = PAGE_OFFSET+PAGE_SIZE*p->map_nr; \ - else \ - ret = get_user_page_slow(which); \ - ret; \ -}) - -#define free_user_page(__page, __addr) \ -do { \ - ULOCK_DECLARE \ - int which = ((__addr) >> PAGE_SHIFT) & user_page_colours; \ - struct upcache *up = &user_page_cache[which]; \ - if(atomic_read(&(__page)->count) == 1 && \ - up->count < USER_PAGE_WATER) { \ - spin_lock(&user_page_lock); \ - (__page)->age = PAGE_INITIAL_AGE; \ - (__page)->next = up->list; \ - up->list = (__page); \ - up->count++; \ - spin_unlock(&user_page_lock); \ - } else \ - free_page(__addr); \ -} while(0) - extern void (*clear_page)(unsigned long page); extern void (*copy_page)(unsigned long to, unsigned long from); diff --git a/include/asm-mips/pci.h b/include/asm-mips/pci.h index 40781ed92..a8b7318fd 100644 --- a/include/asm-mips/pci.h +++ b/include/asm-mips/pci.h @@ -1,4 +1,4 @@ -/* $Id: pci.h,v 1.3 1998/05/07 14:18:11 ralf Exp $ +/* $Id: pci.h,v 1.4 1998/08/25 09:21:59 ralf Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive @@ -10,7 +10,7 @@ #define __ASM_MIPS_PCI_H struct pci_ops { - unsigned long (*pcibios_fixup) (void); + void (*pcibios_fixup) (void); int (*pcibios_read_config_byte) (unsigned char bus, unsigned char dev_fn, unsigned char where, diff --git a/include/asm-mips/processor.h b/include/asm-mips/processor.h index 5c4061437..a1e8aa831 100644 --- a/include/asm-mips/processor.h +++ b/include/asm-mips/processor.h @@ -1,4 +1,4 @@ -/* $Id: processor.h,v 1.12 1998/08/25 09:22:00 ralf Exp $ +/* $Id: processor.h,v 1.13 1998/10/14 23:40:47 ralf Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive @@ -174,6 +174,7 @@ struct thread_struct { /* Free all resources held by a thread. */ extern void release_thread(struct task_struct *); +extern pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); /* Copy and release all segment info associated with a VM */ #define copy_segments(nr, p, mm) do { } while(0) diff --git a/include/asm-mips/ptrace.h b/include/asm-mips/ptrace.h index 7fccd703e..4a52e9440 100644 --- a/include/asm-mips/ptrace.h +++ b/include/asm-mips/ptrace.h @@ -1,4 +1,4 @@ -/* $Id: ptrace.h,v 1.3 1998/07/09 21:45:21 ralf Exp $ +/* $Id: ptrace.h,v 1.3 1998/07/10 01:14:55 ralf Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive @@ -15,13 +15,14 @@ #include <linux/types.h> /* 0 - 31 are integer registers, 32 - 63 are fp registers. */ +#define FPR_BASE 32 #define PC 64 #define CAUSE 65 -#define MMLO 66 +#define BADVADDR 66 #define MMHI 67 -#define FPC_CSR 68 /* XXX */ -#define FPC_EIR 69 /* XXX */ -#define FPR_BASE 70 /* XXX */ +#define MMLO 68 +#define FPC_CSR 69 +#define FPC_EIR 70 #ifndef __ASSEMBLY__ /* diff --git a/include/asm-mips/resource.h b/include/asm-mips/resource.h index 16c83544d..42eb9e66e 100644 --- a/include/asm-mips/resource.h +++ b/include/asm-mips/resource.h @@ -1,11 +1,10 @@ -/* - * Process resource limits +/* $Id: resource.h,v 1.2 1998/12/08 20:51:59 ralf Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 1995, 1996 by Ralf Baechle + * Copyright (C) 1995, 1996, 1998 by Ralf Baechle */ #ifndef __ASM_MIPS_RESOURCE_H #define __ASM_MIPS_RESOURCE_H @@ -30,15 +29,15 @@ #define INIT_RLIMITS \ { \ - {LONG_MAX, LONG_MAX}, \ - {LONG_MAX, LONG_MAX}, \ - {LONG_MAX, LONG_MAX}, \ - {_STK_LIM, _STK_LIM}, \ - { 0, LONG_MAX}, \ - {NR_OPEN, NR_OPEN}, \ - {LONG_MAX, LONG_MAX}, \ - {LONG_MAX, LONG_MAX}, \ - {MAX_TASKS_PER_USER, MAX_TASKS_PER_USER}, \ + { LONG_MAX, LONG_MAX }, \ + { LONG_MAX, LONG_MAX }, \ + { LONG_MAX, LONG_MAX }, \ + { _STK_LIM, LONG_MAX }, \ + { 0, LONG_MAX }, \ + { NR_OPEN, NR_OPEN }, \ + { LONG_MAX, LONG_MAX }, \ + { LONG_MAX, LONG_MAX }, \ + { MAX_TASKS_PER_USER, MAX_TASKS_PER_USER }, \ { LONG_MAX, LONG_MAX }, \ } diff --git a/include/asm-mips/semaphore.h b/include/asm-mips/semaphore.h index 71ffec761..aff081776 100644 --- a/include/asm-mips/semaphore.h +++ b/include/asm-mips/semaphore.h @@ -23,9 +23,9 @@ struct semaphore { #define MUTEX ((struct semaphore) { ATOMIC_INIT(1), ATOMIC_INIT(0), NULL }) #define MUTEX_LOCKED ((struct semaphore) { ATOMIC_INIT(0), ATOMIC_INIT(0), NULL }) -extern void __down(struct semaphore * sem); -extern int __down_interruptible(struct semaphore * sem); -extern void __up(struct semaphore * sem); +asmlinkage void __down(struct semaphore * sem); +asmlinkage int __down_interruptible(struct semaphore * sem); +asmlinkage void __up(struct semaphore * sem); extern spinlock_t semaphore_wake_lock; diff --git a/include/asm-mips/shmparam.h b/include/asm-mips/shmparam.h index b2441c81a..b4ed1faaf 100644 --- a/include/asm-mips/shmparam.h +++ b/include/asm-mips/shmparam.h @@ -33,7 +33,9 @@ * SHMMAX <= (PAGE_SIZE << _SHM_IDX_BITS). */ -#define SHMMAX 0x1000000 /* max shared seg size (bytes) */ +#define SHMMAX 0x2000000 /* max shared seg size (bytes) */ +/* Try not to change the default shipped SHMMAX - people rely on it */ + #define SHMMIN 1 /* really PAGE_SIZE */ /* min shared seg size (bytes) */ #define SHMMNI (1<<_SHM_ID_BITS) /* max num of segs system wide */ #define SHMALL /* max shm system wide (pages) */ \ diff --git a/include/asm-mips/sni.h b/include/asm-mips/sni.h index 16a4ace09..1e2391ddb 100644 --- a/include/asm-mips/sni.h +++ b/include/asm-mips/sni.h @@ -1,4 +1,4 @@ -/* $Id: sni.h,v 1.2 1998/09/16 22:52:43 ralf Exp $ +/* $Id: sni.h,v 1.2 1998/09/19 19:19:39 ralf Exp $ * * SNI specific definitions * @@ -69,10 +69,10 @@ #define PCIMT_PWDN 0xbfdf0000 /* - * Interrupt 0-16 are reserved for PCI and EISA interrupts. The - * interrupts from 16 are assigned to the other interrupts generated - * by the PCI chipset. + * Interrupt 0-16 are EISA interrupts. Interrupts from 16 on are assigned + * to the other interrupts generated by ASIC PCI. */ +#define PCIMT_KEYBOARD_IRQ 1 #define PCIMT_IRQ_ETHERNET 16 #define PCIMT_IRQ_TEMPERATURE 17 #define PCIMT_IRQ_EISA_NMI 18 @@ -89,9 +89,7 @@ */ #define PCIMT_EISA_BASE 0xb0000000 -/* - * The keyboard interrupt is an ISA interrupt - */ -#define SNI_KEYBOARD_IRQ 1 +/* PCI EISA Interrupt acknowledge */ +#define PCIMT_INT_ACKNOWLEDGE 0xba000000 #endif /* __ASM_MIPS_SNI_H */ diff --git a/include/asm-mips/termios.h b/include/asm-mips/termios.h index ae1e770aa..4a6553c17 100644 --- a/include/asm-mips/termios.h +++ b/include/asm-mips/termios.h @@ -94,6 +94,8 @@ struct termio { #define N_X25 6 /* X.25 async */ #define N_6PACK 7 #define N_MASC 8 /* Reserved fo Mobitex module <kaz@cafe.net> */ +#define N_R3964 9 /* Reserved for Simatic R3964 module */ +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ #ifdef __KERNEL__ diff --git a/include/asm-mips/uaccess.h b/include/asm-mips/uaccess.h index 8b139fe23..e6750b4e5 100644 --- a/include/asm-mips/uaccess.h +++ b/include/asm-mips/uaccess.h @@ -7,7 +7,7 @@ * * Copyright (C) 1996, 1997, 1998 by Ralf Baechle * - * $Id: uaccess.h,v 1.15 1998/05/03 11:13:54 ralf Exp $ + * $Id: uaccess.h,v 1.7 1998/05/04 09:13:02 ralf Exp $ */ #ifndef __ASM_MIPS_UACCESS_H #define __ASM_MIPS_UACCESS_H @@ -265,6 +265,21 @@ __asm__ __volatile__( \ extern void __put_user_unknown(void); +/* + * We're generating jump to subroutines which will be outside the range of + * jump instructions + */ +#ifdef MODULE +#define __MODULE_JAL(destination) \ + ".set\tnoat\n\t" \ + "la\t$1, " #destination "\n\t" \ + "jalr\t$1\n\t" \ + ".set\tat\n\t" +#else +#define __MODULE_JAL(destination) \ + "jal\t" #destination "\n\t" +#endif + #define copy_to_user_ret(to,from,n,retval) ({ \ if (copy_to_user(to,from,n)) \ return retval; \ @@ -289,7 +304,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n); "move\t$4, %1\n\t" \ "move\t$5, %2\n\t" \ "move\t$6, %3\n\t" \ - "jal\t__copy_user\n\t" \ + __MODULE_JAL(__copy_user) \ "move\t%0, $6" \ : "=r" (__cu_len) \ : "r" (__cu_to), "r" (__cu_from), "r" (__cu_len) \ @@ -313,7 +328,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n); ".set\tnoat\n\t" \ "addu\t$1, %2, %3\n\t" \ ".set\tat\n\t" \ - "jal\t__copy_user\n\t" \ + __MODULE_JAL(__copy_user) \ "move\t%0, $6" \ : "=r" (__cu_len) \ : "r" (__cu_to), "r" (__cu_from), "r" (__cu_len) \ @@ -335,7 +350,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n); "move\t$4, %1\n\t" \ "move\t$5, %2\n\t" \ "move\t$6, %3\n\t" \ - "jal\t__copy_user\n\t" \ + __MODULE_JAL(__copy_user) \ "move\t%0, $6" \ : "=r" (__cu_len) \ : "r" (__cu_to), "r" (__cu_from), "r" (__cu_len) \ @@ -360,7 +375,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n); ".set\tnoat\n\t" \ "addu\t$1, %2, %3\n\t" \ ".set\tat\n\t" \ - "jal\t__copy_user\n\t" \ + __MODULE_JAL(__copy_user) \ "move\t%0, $6" \ : "=r" (__cu_len) \ : "r" (__cu_to), "r" (__cu_from), "r" (__cu_len) \ @@ -378,7 +393,7 @@ __clear_user(void *addr, __kernel_size_t size) "move\t$4, %1\n\t" "move\t$5, $0\n\t" "move\t$6, %2\n\t" - "jal\t__bzero\n\t" + __MODULE_JAL(__bzero) "move\t%0, $6" : "=r" (res) : "r" (addr), "r" (size) @@ -407,7 +422,7 @@ __strncpy_from_user(char *__to, const char *__from, long __len) "move\t$4, %1\n\t" "move\t$5, %2\n\t" "move\t$6, %3\n\t" - "jal\t__strncpy_from_user_nocheck_asm\n\t" + __MODULE_JAL(__strncpy_from_user_nocheck_asm) "move\t%0, $2" : "=r" (res) : "r" (__to), "r" (__from), "r" (__len) @@ -425,7 +440,7 @@ strncpy_from_user(char *__to, const char *__from, long __len) "move\t$4, %1\n\t" "move\t$5, %2\n\t" "move\t$6, %3\n\t" - "jal\t__strncpy_from_user_asm\n\t" + __MODULE_JAL(__strncpy_from_user_asm) "move\t%0, $2" : "=r" (res) : "r" (__to), "r" (__from), "r" (__len) @@ -442,7 +457,7 @@ extern inline long __strlen_user(const char *s) __asm__ __volatile__( "move\t$4, %1\n\t" - "jal\t__strlen_user_nocheck_asm\n\t" + __MODULE_JAL(__strlen_user_nocheck_asm) "move\t%0, $2" : "=r" (res) : "r" (s) @@ -457,7 +472,7 @@ extern inline long strlen_user(const char *s) __asm__ __volatile__( "move\t$4, %1\n\t" - "jal\t__strlen_user_asm\n\t" + __MODULE_JAL(__strlen_user_asm) "move\t%0, $2" : "=r" (res) : "r" (s) diff --git a/include/asm-mips/unistd.h b/include/asm-mips/unistd.h index 1907a49ac..4c68fe0ee 100644 --- a/include/asm-mips/unistd.h +++ b/include/asm-mips/unistd.h @@ -1,4 +1,4 @@ -/* $Id: unistd.h,v 1.11 1998/08/25 09:22:03 ralf Exp $ +/* $Id: unistd.h,v 1.12 1998/09/19 19:19:40 ralf Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive @@ -1194,8 +1194,8 @@ #define __NR_capset (__NR_Linux + 205) #define __NR_sigaltstack (__NR_Linux + 206) #define __NR_sendfile (__NR_Linux + 207) -#define __NR_streams1 (__NR_Linux + 208) -#define __NR_streams2 (__NR_Linux + 209) +#define __NR_getpmsg (__NR_Linux + 208) +#define __NR_putpmsg (__NR_Linux + 209) /* * Offset of the last Linux flavoured syscall @@ -1300,7 +1300,7 @@ __asm__ volatile ("move\t$4,%3\n\t" \ "r" ((long)(b)), \ "r" ((long)(c)), \ "r" ((long)(d)) \ - : "$4","$5","$6""$8","$9","$10","$11","$12","$13","$14", \ + : "$4","$5","$6","$8","$9","$10","$11","$12","$13","$14", \ "$15","$24"); \ if (__err == 0) \ return (type) __res; \ @@ -1437,48 +1437,6 @@ static inline pid_t wait(int * wait_stat) return waitpid(-1,wait_stat,0); } -/* - * This is the mechanism for creating a new kernel thread. - * - * NOTE! Only a kernel-only process(ie the swapper or direct descendants - * who haven't done an "execve()") should use this: it will work within - * a system call from a "real" process, but the process memory space will - * not be free'd until both the parent and the child have exited. - */ -static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) -{ - long retval; - - __asm__ __volatile__( - ".set\tnoreorder\n\t" - "move\t$6,$sp\n\t" - "move\t$4,%5\n\t" - "li\t$2,%1\n\t" - "syscall\n\t" - "beq\t$6,$sp,1f\n\t" - "subu\t$sp,32\n\t" /* delay slot */ - "jalr\t%4\n\t" - "move\t$4,%3\n\t" /* delay slot */ - "move\t$4,$2\n\t" - "li\t$2,%2\n\t" - "syscall\n" - "1:\taddiu\t$sp,32\n\t" - "move\t%0,$2\n\t" - ".set\treorder" - :"=r" (retval) - :"i" (__NR_clone), "i" (__NR_exit), - "r" (arg), "r" (fn), - "r" (flags | CLONE_VM) - /* - * The called subroutine might have destroyed any of the - * at, result, argument or temporary registers ... - */ - :"$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", - "$9","$10","$11","$12","$13","$14","$15","$24","$25"); - - return retval; -} - #endif /* !defined (__KERNEL_SYSCALLS__) */ #endif /* !defined (_LANGUAGE_ASSEMBLY) */ diff --git a/include/asm-mips/vga.h b/include/asm-mips/vga.h index 5fc680563..a74df2d2d 100644 --- a/include/asm-mips/vga.h +++ b/include/asm-mips/vga.h @@ -7,29 +7,14 @@ #ifndef _LINUX_ASM_VGA_H_ #define _LINUX_ASM_VGA_H_ -#include <asm/io.h> - -#define VT_BUF_HAVE_RW - -extern inline void scr_writew(u16 val, u16 *addr) -{ - if ((long) addr < 0) - *addr = val; - else - writew(val, (unsigned long) addr); -} - -extern inline u16 scr_readw(u16 *addr) -{ - if ((long) addr < 0) - return *addr; - else - return readw((unsigned long) addr); -} +/* + * On the PC, we can just recalculate addresses and then + * access the videoram directly without any black magic. + */ -#define vga_readb readb -#define vga_writeb writeb +#define VGA_MAP_MEM(x) ((unsigned long)0xb0000000 + (unsigned long)(x)) -#define VGA_MAP_MEM(x) (x) +#define vga_readb(x) (*(x)) +#define vga_writeb(x,y) (*(y) = (x)) #endif diff --git a/include/asm-ppc/8xx_immap.h b/include/asm-ppc/8xx_immap.h index 7793c2019..0223fe275 100644 --- a/include/asm-ppc/8xx_immap.h +++ b/include/asm-ppc/8xx_immap.h @@ -312,6 +312,43 @@ typedef struct smc { /* Serial management channels */ char res4[5]; } smc_t; +/* MPC860T Fast Ethernet Controller. It isn't part of the CPM, but + * it fits within the address space. + */ +typedef struct fec { + uint fec_addr_low; /* LS 32 bits of station address */ + ushort fec_addr_high; /* MS 16 bits of address */ + ushort res1; + uint fec_hash_table_high; + uint fec_hash_table_low; + uint fec_r_des_start; + uint fec_x_des_start; + uint fec_r_buff_size; + uint res2[9]; + uint fec_ecntrl; + uint fec_ievent; + uint fec_imask; + uint fec_ivec; + uint fec_r_des_active; + uint fec_x_des_active; + uint res3[10]; + uint fec_mii_data; + uint fec_mii_speed; + uint res4[17]; + uint fec_r_bound; + uint fec_r_fstart; + uint res5[6]; + uint fec_x_fstart; + uint res6[17]; + uint fec_fun_code; + uint res7[3]; + uint fec_r_cntrl; + uint fec_r_hash; + uint res8[14]; + uint fec_x_cntrl; + uint res9[0x1e]; +} fec_t; + typedef struct comm_proc { /* General control and status registers. */ @@ -380,7 +417,11 @@ typedef struct comm_proc { uint cp_sirp; char res16[0x10c]; u_char cp_siram[0x200]; - char res17[0x200]; + + /* The fast ethernet controller is not really part of the CPM, + * but it resides in the address space. + */ + fec_t cp_fec; char res18[0x1000]; /* Dual Ported RAM follows. diff --git a/include/asm-ppc/adb.h b/include/asm-ppc/adb.h index 5035139fe..58fcb8abe 100644 --- a/include/asm-ppc/adb.h +++ b/include/asm-ppc/adb.h @@ -46,7 +46,8 @@ extern enum adb_hw { } adb_hardware; extern int (*adb_send_request)(struct adb_request *req, int sync); -extern int (*adb_autopoll)(int on); +extern int (*adb_autopoll)(int devs); +extern int (*adb_reset_bus)(void); /* Values for adb_request flags */ #define ADBREQ_REPLY 1 /* expect reply */ diff --git a/include/asm-ppc/amigappc.h b/include/asm-ppc/amigappc.h index e3abe6809..5546cb1fb 100644 --- a/include/asm-ppc/amigappc.h +++ b/include/asm-ppc/amigappc.h @@ -14,17 +14,33 @@ #ifndef _M68K_AMIGAPPC_H #define _M68K_AMIGAPPC_H +#ifndef __ASSEMBLY__ + +#ifndef iobarrier /* Don't include io.h - avoid circular dependency */ +#define iobarrier() eieio() +#endif + +#define APUS_WRITE(_a_, _v_) \ +do { \ + (*((volatile unsigned char *)(_a_)) = (_v_)); \ + iobarrier (); \ +} while (0) + +#define APUS_READ(_a_, _v_) \ +do { \ + (_v_) = (*((volatile unsigned char *)(_a_))); \ + iobarrier (); \ +} while (0) +#endif /* ndef __ASSEMBLY__ */ + /* Maybe add a [#ifdef WANT_ZTWOBASE] condition to amigahw.h? */ #define zTwoBase (0x80000000) -/* At CYBERBASEp we'll find the following sum: +/* At CYBERBASEp we find the following sum: * -KERNELBASE+CyberStormMemoryBase */ #define CYBERBASEp (0xfff00000) -#define APUS_WRITE(a,v) (*((volatile unsigned char *)a) = v) -#define APUS_READ(a) (*((volatile unsigned char *)a)) - #define APUS_IPL_BASE (zTwoBase + 0x00f60000) #define APUS_REG_RESET (APUS_IPL_BASE + 0x00) #define APUS_REG_WAITSTATE (APUS_IPL_BASE + 0x10) @@ -32,6 +48,7 @@ #define APUS_REG_LOCK (APUS_IPL_BASE + 0x20) #define APUS_REG_INT (APUS_IPL_BASE + 0x28) #define APUS_IPL_EMU (APUS_IPL_BASE + 0x30) +#define APUS_INT_LVL (APUS_IPL_BASE + 0x38) #define REGSHADOW_SETRESET (0x80) #define REGSHADOW_SELFRESET (0x40) @@ -66,4 +83,7 @@ #define IPLEMU_PPCIPL0 (0x01) #define IPLEMU_IPLMASK (IPLEMU_PPCIPL2|IPLEMU_PPCIPL1|IPLEMU_PPCIPL0) +#define INTLVL_SETRESET (0x80) +#define INTLVL_MASK (0x7f) + #endif /* _M68k_AMIGAPPC_H */ diff --git a/include/asm-ppc/amigayle.h b/include/asm-ppc/amigayle.h new file mode 100644 index 000000000..d604cc668 --- /dev/null +++ b/include/asm-ppc/amigayle.h @@ -0,0 +1 @@ +#include "../asm-m68k/amigayle.h" diff --git a/include/asm-ppc/amipcmcia.h b/include/asm-ppc/amipcmcia.h new file mode 100644 index 000000000..3be263bd0 --- /dev/null +++ b/include/asm-ppc/amipcmcia.h @@ -0,0 +1 @@ +#include "../asm-m68k/amipcmcia.h" diff --git a/include/asm-ppc/bitops.h b/include/asm-ppc/bitops.h index 17fb6383b..9e0614ae2 100644 --- a/include/asm-ppc/bitops.h +++ b/include/asm-ppc/bitops.h @@ -1,10 +1,10 @@ /* - * $Id: bitops.h,v 1.9 1998/07/26 03:05:28 davem Exp $ + * $Id: bitops.h,v 1.10 1998/08/16 21:56:53 geert Exp $ * bitops.h: Bit string operations on the ppc */ -#ifndef _ASM_PPC_BITOPS_H_ -#define _ASM_PPC_BITOPS_H_ +#ifndef _PPC_BITOPS_H +#define _PPC_BITOPS_H #include <asm/system.h> #include <asm/byteorder.h> @@ -267,4 +267,4 @@ found_middle: #define minix_test_bit(nr,addr) ext2_test_bit(nr,addr) #define minix_find_first_zero_bit(addr,size) ext2_find_first_zero_bit(addr,size) -#endif /* _ASM_PPC_BITOPS_H */ +#endif /* _PPC_BITOPS_H */ diff --git a/include/asm-ppc/bootx.h b/include/asm-ppc/bootx.h new file mode 100644 index 000000000..85bea1469 --- /dev/null +++ b/include/asm-ppc/bootx.h @@ -0,0 +1,71 @@ +/* + * This file describes the structure passed from the BootX application + * (for MacOS) when it is used to boot Linux. + * + * Written by Benjamin Herrenschmidt. + */ + + +#ifndef __ASM_BOOTX_H__ +#define __ASM_BOOTX_H__ + +#ifdef macintosh +#include <Types.h> +#endif + +#ifdef macintosh +/* All this requires PowerPC alignment */ +#pragma options align=power +#endif + +#define BOOT_INFO_VERSION 1 +#define BOOT_INFO_COMPATIBLE_VERSION 1 + +/* Here are the boot informations that are passed to the bootstrap + * Note that the kernel arguments and the device tree are appended + * at the end of this structure. */ +typedef struct boot_infos +{ + /* Version of this structure */ + unsigned long version; + /* backward compatible down to version: */ + unsigned long compatible_version; + + /* Set to 0 by current BootX */ + unsigned long unused[3]; + + /* The device tree (internal addresses relative to the beginning of the tree, + * device tree offset relative to the beginning of this structure). */ + unsigned long deviceTreeOffset; /* Device tree offset */ + unsigned long deviceTreeSize; /* Size of the device tree */ + + /* Some infos about the current MacOS display */ + unsigned long dispDeviceRect[4]; /* left,top,right,bottom */ + unsigned long dispDeviceDepth; /* (8, 16 or 32) */ + unsigned char* dispDeviceBase; /* base address (physical) */ + unsigned long dispDeviceRowBytes; /* rowbytes (in bytes) */ + unsigned long dispDeviceColorsOffset; /* Colormap (8 bits only) or 0 (*) */ + /* Optional offset in the registry to the current + * MacOS display. (Can be 0 when not detected) */ + unsigned long dispDeviceRegEntryOffset; + + /* Optional pointer to boot ramdisk (offset from this structure) */ + unsigned long ramDisk; + unsigned long ramDiskSize; /* size of ramdisk image */ + + /* Kernel command line arguments (offset from this structure) */ + unsigned long kernelParamsOffset; + +} boot_infos_t; + +/* (*) The format of the colormap is 256 * 3 * 2 bytes. Each color index is represented + * by 3 short words containing a 16 bits (unsigned) color component. + * Later versions may contain the gamma table for direct-color devices here. + */ +#define BOOTX_COLORTABLE_SIZE (256UL*3UL*2UL); + +#ifdef macintosh +#pragma options align=reset +#endif + +#endif diff --git a/include/asm-ppc/byteorder.h b/include/asm-ppc/byteorder.h index ec033ec47..453c846d2 100644 --- a/include/asm-ppc/byteorder.h +++ b/include/asm-ppc/byteorder.h @@ -2,7 +2,7 @@ #define _PPC_BYTEORDER_H /* - * $Id: byteorder.h,v 1.13 1998/08/03 19:05:11 geert Exp $ + * $Id: byteorder.h,v 1.14 1998/08/12 05:07:12 paulus Exp $ */ #include <asm/types.h> @@ -13,7 +13,7 @@ extern __inline__ unsigned ld_le16(volatile unsigned short *addr) { unsigned val; - __asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (addr)); + __asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (addr), "m" (*addr)); return val; } @@ -26,7 +26,7 @@ extern __inline__ unsigned ld_le32(volatile unsigned *addr) { unsigned val; - __asm__ __volatile__ ("lwbrx %0,0,%1" : "=r" (val) : "r" (addr)); + __asm__ __volatile__ ("lwbrx %0,0,%1" : "=r" (val) : "r" (addr), "m" (*addr)); return val; } diff --git a/include/asm-ppc/cache.h b/include/asm-ppc/cache.h index 05017c7eb..431dc7a49 100644 --- a/include/asm-ppc/cache.h +++ b/include/asm-ppc/cache.h @@ -13,7 +13,7 @@ #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) #define L1_CACHE_PAGES 8 -#ifndef __ASSEMBLY__ +#if defined(__KERNEL__) && !defined(__ASSEMBLY__) static inline unsigned long unlock_dcache(void) { #ifndef CONFIG_8xx diff --git a/include/asm-ppc/dma.h b/include/asm-ppc/dma.h index bd55a65da..8560c7d88 100644 --- a/include/asm-ppc/dma.h +++ b/include/asm-ppc/dma.h @@ -8,6 +8,8 @@ #include <linux/config.h> #include <asm/io.h> +#include <asm/spinlock.h> +#include <asm/system.h> /* * Note: Adapted for PowerPC by Gary Thomas @@ -203,6 +205,20 @@ extern long ppc_cs4232_dma, ppc_cs4232_dma2; #define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */ +extern spinlock_t dma_spin_lock; + +static __inline__ unsigned long claim_dma_lock(void) +{ + unsigned long flags; + spin_lock_irqsave(&dma_spin_lock, flags); + return flags; +} + +static __inline__ void release_dma_lock(unsigned long flags) +{ + spin_unlock_irqrestore(&dma_spin_lock, flags); +} + /* enable/disable a specific DMA channel */ static __inline__ void enable_dma(unsigned int dmanr) { diff --git a/include/asm-ppc/elf.h b/include/asm-ppc/elf.h index 0073612dd..002736abf 100644 --- a/include/asm-ppc/elf.h +++ b/include/asm-ppc/elf.h @@ -29,7 +29,7 @@ the loader. We need to make sure that it is out of the way of the program that it will "exec", and that there is sufficient room for the brk. */ -#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3) +#define ELF_ET_DYN_BASE (0x08000000) typedef unsigned long elf_greg_t; typedef elf_greg_t elf_gregset_t[ELF_NGREG]; diff --git a/include/asm-ppc/fads.h b/include/asm-ppc/fads.h new file mode 100644 index 000000000..a23fe8b4e --- /dev/null +++ b/include/asm-ppc/fads.h @@ -0,0 +1,39 @@ + +/* + * A collection of structures, addresses, and values associated with + * the Motorola 860T FADS board. Copied from the MBX stuff. + * + * Copyright (c) 1998 Dan Malek (dmalek@jlc.net) + */ +#ifndef __MACH_FADS_DEFS +#define __MACH_FADS_DEFS + +/* A Board Information structure that is given to a program when + * prom starts it up. + */ +typedef struct bd_info { + unsigned int bi_memstart; /* Memory start address */ + unsigned int bi_memsize; /* Memory (end) size in bytes */ + unsigned int bi_intfreq; /* Internal Freq, in Hz */ + unsigned int bi_busfreq; /* Bus Freq, in Hz */ +} bd_t; + +extern bd_t m8xx_board_info; + +/* Memory map is configured by the PROM startup. + * I tried to follow the FADS manual, although the startup PROM + * dictates this. + */ +#define BCSR_ADDR ((uint)0x02100000) +#define BCSR_SIZE ((uint)(64 * 1024)) +#define BCSR0 ((uint)0x02100000) +#define BCSR1 ((uint)0x02100004) +#define BCSR2 ((uint)0x02100008) +#define BCSR3 ((uint)0x0210000c) +#define BCSR4 ((uint)0x02100010) +#define IMAP_ADDR ((uint)0x02200000) +#define IMAP_SIZE ((uint)(64 * 1024)) +#define PCMCIA_MEM_ADDR ((uint)0x04000000) +#define PCMCIA_MEM_SIZE ((uint)(64 * 1024)) + +#endif diff --git a/include/asm-ppc/fcntl.h b/include/asm-ppc/fcntl.h index 773e6a252..a1f3aa7f7 100644 --- a/include/asm-ppc/fcntl.h +++ b/include/asm-ppc/fcntl.h @@ -16,6 +16,8 @@ #define O_NDELAY O_NONBLOCK #define O_SYNC 010000 #define FASYNC 020000 /* fcntl, for BSD compatibility */ +#define O_DIRECTORY 040000 /* must be a directory */ +#define O_NOFOLLOW 0100000 /* don't follow links */ #define F_DUPFD 0 /* dup */ #define F_GETFD 1 /* get f_flags */ diff --git a/include/asm-ppc/feature.h b/include/asm-ppc/feature.h new file mode 100644 index 000000000..4264690f8 --- /dev/null +++ b/include/asm-ppc/feature.h @@ -0,0 +1,65 @@ +/* + * Definitions for accessing the Feature Control Register (FCR) + * on Power Macintoshes and similar machines. The FCR lets us + * enable/disable, reset, and power up/down various peripherals. + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 1998 Paul Mackerras. + */ +#ifndef __ASM_PPC_FEATURE_H +#define __ASM_PPC_FEATURE_H + +/* + * The FCR bits for particular features vary somewhat between + * different machines. So we abstract a list of features here + * and let the feature_* routines map them to the actual bits. + */ +enum system_feature { + FEATURE_null, + FEATURE_Serial_reset, + FEATURE_Serial_enable, + FEATURE_Serial_IO_A, + FEATURE_Serial_IO_B, + FEATURE_SWIM3_enable, + FEATURE_MESH_enable, + FEATURE_IDE_enable, + FEATURE_VIA_enable, + FEATURE_CD_power, + FEATURE_Mediabay_reset, + FEATURE_Mediabay_enable, + FEATURE_Mediabay_PCI_enable, + FEATURE_Mediabay_IDE_enable, + FEATURE_Mediabay_floppy_enable, + FEATURE_BMac_reset, + FEATURE_BMac_IO_enable, + FEATURE_Modem_PowerOn, + FEATURE_Modem_Reset, + FEATURE_last, +}; + +/* Note about the device parameter: Each device gives it's own entry. If NULL, + the feature function will just do nothing and return -EINVAL. + The feature management will walk up the device tree until in reaches a recognized + chip for which features can be changed and it will then apply the necessary + features to that chip. If it's not found, -ENODEV is returned. + Note also that feature_test/set/clear are interrupt-safe provided that they are + called _after_ feature_init() is completed. + */ + +/* Test whether a particular feature is enabled. May return -ENODEV*/ +extern int feature_test(struct device_node* device, enum system_feature f); + +/* Set a particular feature. Returns 0 or -ENODEV */ +extern int feature_set(struct device_node* device, enum system_feature f); + +/* Clear a particular feature */ +extern int feature_clear(struct device_node* device, enum system_feature f); + +/* Initialize feature stuff */ +extern void feature_init(void); + + +#endif /* __ASM_PPC_FEATURE_H */ diff --git a/include/asm-ppc/hardirq.h b/include/asm-ppc/hardirq.h index 454934f39..cc0db7259 100644 --- a/include/asm-ppc/hardirq.h +++ b/include/asm-ppc/hardirq.h @@ -2,7 +2,13 @@ #define __ASM_HARDIRQ_H extern unsigned int local_irq_count[NR_CPUS]; -#define in_interrupt() (local_irq_count[smp_processor_id()] != 0) + +/* + * Are we in an interrupt context? Either doing bottom half + * or hardware interrupt processing? + */ +#define in_interrupt() ({ int __cpu = smp_processor_id(); \ + (local_irq_count[__cpu] + local_bh_count[__cpu] != 0); }) #ifndef __SMP__ @@ -16,44 +22,42 @@ extern unsigned int local_irq_count[NR_CPUS]; #else /* __SMP__ */ +#include <asm/atomic.h> + extern unsigned char global_irq_holder; -extern spinlock_t global_irq_lock; +extern unsigned volatile int global_irq_lock; extern atomic_t global_irq_count; -#define release_irqlock(cpu) \ -do { \ - if(global_irq_holder == (unsigned char) cpu) { \ - global_irq_holder = NO_PROC_ID; \ - spin_unlock(&global_irq_lock); \ - } \ -} while(0) - -/* Ordering of the counter bumps is _deadly_ important. */ -#define hardirq_enter(cpu) \ - do { ++local_irq_count[cpu]; atomic_inc(&global_irq_count); } while(0) - -#define hardirq_exit(cpu) \ - do { atomic_dec(&global_irq_count); --local_irq_count[cpu]; } while(0) - -#define hardirq_trylock(cpu) \ -({ unsigned long flags; int ret = 1; \ - __save_flags(flags); \ - __cli(); \ - if(atomic_add_return(1, &global_irq_count) != 1 || \ - *(((unsigned char *)(&global_irq_lock)))) { \ - atomic_dec(&global_irq_count); \ - __restore_flags(flags); \ - ret = 0; \ - } else { \ - ++local_irq_count[cpu]; \ - __sti(); \ - } \ - ret; \ -}) - -#define hardirq_endlock(cpu) do { __cli(); hardirq_exit(cpu); __sti(); } while(0) +static inline void release_irqlock(int cpu) +{ + /* if we didn't own the irq lock, just ignore.. */ + if (global_irq_holder == (unsigned char) cpu) { + global_irq_holder = NO_PROC_ID; + clear_bit(0,&global_irq_lock); + } +} + +static inline void hardirq_enter(int cpu) +{ + ++local_irq_count[cpu]; + atomic_inc(&global_irq_count); +} + +static inline void hardirq_exit(int cpu) +{ + atomic_dec(&global_irq_count); + --local_irq_count[cpu]; +} + +static inline int hardirq_trylock(int cpu) +{ + return !atomic_read(&global_irq_count) && !test_bit(0,&global_irq_lock); +} + +#define hardirq_endlock(cpu) do { } while (0) extern void synchronize_irq(void); + #endif /* __SMP__ */ #endif /* __ASM_HARDIRQ_H */ diff --git a/include/asm-ppc/ide.h b/include/asm-ppc/ide.h index 52576cf15..75f77641c 100644 --- a/include/asm-ppc/ide.h +++ b/include/asm-ppc/ide.h @@ -14,11 +14,15 @@ #include <linux/config.h> #ifdef CONFIG_APUS #include <linux/hdreg.h> + +#define ide_init_hwif_ports m68k_ide_init_hwif_ports #include <asm-m68k/ide.h> +#undef ide_init_hwif_ports +#undef insw + void ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq); void ide_insw(ide_ioreg_t port, void *buf, int ns); void ide_outsw(ide_ioreg_t port, void *buf, int ns); -#undef insw #define insw(port, buf, ns) do { \ if ( _machine != _MACH_Pmac && _machine != _MACH_apus ) \ /* this must be the same as insw in io.h!! */ \ @@ -38,6 +42,7 @@ void ide_outsw(ide_ioreg_t port, void *buf, int ns); #ifdef __KERNEL__ +#include <linux/hdreg.h> #include <linux/ioport.h> #include <asm/io.h> /* so we can redefine insw/outsw */ @@ -94,9 +99,11 @@ static __inline__ int ide_default_irq(ide_ioreg_t base) static __inline__ ide_ioreg_t ide_default_io_base(int index) { +#if defined(CONFIG_BLK_DEV_IDE_PMAC) if (_machine == _MACH_Pmac) { return pmac_ide_regbase[index]; } +#endif if (_machine == _MACH_mbx) return index; if ( _machine == _MACH_chrp ) { if (chrp_ide_ports_known == 0) @@ -134,13 +141,76 @@ static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent release_region(from, extent); } -#define ide_fix_driveid(id) do { \ - int nh; \ - unsigned short *p = (unsigned short *) id; \ - if (( _machine == _MACH_Pmac ) || (_machine == _MACH_chrp)|| (_machine == _MACH_mbx) ) \ - for (nh = SECTOR_WORDS * 2; nh != 0; --nh, ++p) \ - *p = (*p << 8) + (*p >> 8); \ -} while (0) +/* Convert the shorts/longs in hd_driveid from little to big endian; + chars are endian independant, of course, but strings need to be flipped. + (Despite what it says in drivers/block/ide.h, they come up as little endian...) + Changes to linux/hdreg.h may require changes here. */ +static __inline__ void ide_fix_driveid (struct hd_driveid *id) { + if (( _machine == _MACH_Pmac ) || (_machine == _MACH_chrp)|| (_machine == _MACH_mbx) ) { + int i; + unsigned short *stringcast; + id->config = __le16_to_cpu(id->config); + id->cyls = __le16_to_cpu(id->cyls); + id->reserved2 = __le16_to_cpu(id->reserved2); + id->heads = __le16_to_cpu(id->heads); + id->track_bytes = __le16_to_cpu(id->track_bytes); + id->sector_bytes = __le16_to_cpu(id->sector_bytes); + id->sectors = __le16_to_cpu(id->sectors); + id->vendor0 = __le16_to_cpu(id->vendor0); + id->vendor1 = __le16_to_cpu(id->vendor1); + id->vendor2 = __le16_to_cpu(id->vendor2); + stringcast = (unsigned short *)&id->serial_no[0]; + for (i=0; i<(20/2); i++) + stringcast[i] = __le16_to_cpu(stringcast[i]); + id->buf_type = __le16_to_cpu(id->buf_type); + id->buf_size = __le16_to_cpu(id->buf_size); + id->ecc_bytes = __le16_to_cpu(id->ecc_bytes); + stringcast = (unsigned short *)&id->fw_rev[0]; + for (i=0; i<(8/2); i++) + stringcast[i] = __le16_to_cpu(stringcast[i]); + stringcast = (unsigned short *)&id->model[0]; + for (i=0; i<(40/2); i++) + stringcast[i] = __le16_to_cpu(stringcast[i]); + id->dword_io = __le16_to_cpu(id->dword_io); + id->reserved50 = __le16_to_cpu(id->reserved50); + id->field_valid = __le16_to_cpu(id->field_valid); + id->cur_cyls = __le16_to_cpu(id->cur_cyls); + id->cur_heads = __le16_to_cpu(id->cur_heads); + id->cur_sectors = __le16_to_cpu(id->cur_sectors); + id->cur_capacity0 = __le16_to_cpu(id->cur_capacity0); + id->cur_capacity1 = __le16_to_cpu(id->cur_capacity1); + id->lba_capacity = __le32_to_cpu(id->lba_capacity); + id->dma_1word = __le16_to_cpu(id->dma_1word); + id->dma_mword = __le16_to_cpu(id->dma_mword); + id->eide_pio_modes = __le16_to_cpu(id->eide_pio_modes); + id->eide_dma_min = __le16_to_cpu(id->eide_dma_min); + id->eide_dma_time = __le16_to_cpu(id->eide_dma_time); + id->eide_pio = __le16_to_cpu(id->eide_pio); + id->eide_pio_iordy = __le16_to_cpu(id->eide_pio_iordy); + id->word69 = __le16_to_cpu(id->word69); + id->word70 = __le16_to_cpu(id->word70); + id->word71 = __le16_to_cpu(id->word71); + id->word72 = __le16_to_cpu(id->word72); + id->word73 = __le16_to_cpu(id->word73); + id->word74 = __le16_to_cpu(id->word74); + id->word75 = __le16_to_cpu(id->word75); + id->word76 = __le16_to_cpu(id->word76); + id->word77 = __le16_to_cpu(id->word77); + id->word78 = __le16_to_cpu(id->word78); + id->word79 = __le16_to_cpu(id->word79); + id->word80 = __le16_to_cpu(id->word80); + id->word81 = __le16_to_cpu(id->word81); + id->word82 = __le16_to_cpu(id->word82); + id->word83 = __le16_to_cpu(id->word83); + id->word84 = __le16_to_cpu(id->word84); + id->word85 = __le16_to_cpu(id->word85); + id->word86 = __le16_to_cpu(id->word86); + id->word87 = __le16_to_cpu(id->word87); + id->dma_ultra = __le16_to_cpu(id->dma_ultra); + for (i=0; i<167; i++) + id->reserved[i] = __le16_to_cpu(id->reserved[i]); + } +} #undef insw diff --git a/include/asm-ppc/io.h b/include/asm-ppc/io.h index 8f26f192c..da5219e39 100644 --- a/include/asm-ppc/io.h +++ b/include/asm-ppc/io.h @@ -22,9 +22,6 @@ #define PMAC_ISA_MEM_BASE 0 #define PMAC_PCI_DRAM_OFFSET 0 -#define APUS_ISA_IO_BASE 0 -#define APUS_ISA_MEM_BASE 0 -#define APUS_PCI_DRAM_OFFSET 0 #define CHRP_ISA_IO_BASE 0xf8000000 #define CHRP_ISA_MEM_BASE 0xf7000000 #define CHRP_PCI_DRAM_OFFSET 0 @@ -38,26 +35,32 @@ #define _ISA_MEM_BASE 0 #define PCI_DRAM_OFFSET 0x80000000 #else /* CONFIG_MBX8xx */ +#ifdef CONFIG_APUS +#define _IO_BASE 0 +#define _ISA_MEM_BASE 0 +#define PCI_DRAM_OFFSET 0 +#else extern unsigned long isa_io_base; extern unsigned long isa_mem_base; extern unsigned long pci_dram_offset; #define _IO_BASE isa_io_base #define _ISA_MEM_BASE isa_mem_base #define PCI_DRAM_OFFSET pci_dram_offset +#endif /* CONFIG_APUS */ #endif /* CONFIG_MBX8xx */ -#define readb(addr) (*(volatile unsigned char *) (addr)) -#define writeb(b,addr) ((*(volatile unsigned char *) (addr)) = (b)) +#define readb(addr) in_8((volatile unsigned char *)(addr)) +#define writeb(b,addr) out_8((volatile unsigned char *)(addr), (b)) #if defined(CONFIG_APUS) #define readw(addr) (*(volatile unsigned short *) (addr)) #define readl(addr) (*(volatile unsigned int *) (addr)) #define writew(b,addr) ((*(volatile unsigned short *) (addr)) = (b)) #define writel(b,addr) ((*(volatile unsigned int *) (addr)) = (b)) #else -#define readw(addr) ld_le16((volatile unsigned short *)(addr)) -#define readl(addr) ld_le32((volatile unsigned *)addr) -#define writew(b,addr) st_le16((volatile unsigned short *)(addr),(b)) -#define writel(b,addr) st_le32((volatile unsigned *)(addr),(b)) +#define readw(addr) in_le16((volatile unsigned short *)(addr)) +#define readl(addr) in_le32((volatile unsigned *)addr) +#define writew(b,addr) out_le16((volatile unsigned short *)(addr),(b)) +#define writel(b,addr) out_le32((volatile unsigned *)(addr),(b)) #endif #define insb(port, buf, ns) _insb((unsigned char *)((port)+_IO_BASE), (buf), (ns)) @@ -120,6 +123,7 @@ extern void _outsl_ns(volatile unsigned long *port, const void *buf, int nl); extern void *__ioremap(unsigned long address, unsigned long size, unsigned long flags); extern void *ioremap(unsigned long address, unsigned long size); +#define ioremap_nocache(addr, size) ioremap((addr), (size)) extern void iounmap(void *addr); extern unsigned long iopa(unsigned long addr); #ifdef CONFIG_APUS @@ -177,22 +181,6 @@ extern inline void * phys_to_virt(unsigned long address) #endif } -static inline int check_signature(unsigned long io_addr, - const unsigned char *signature, int length) -{ - int retval = 0; - do { - if (readb(io_addr) != *signature) - goto out; - io_addr++; - signature++; - length--; - } while (length); - retval = 1; -out: - return retval; -} - #endif /* __KERNEL__ */ /* @@ -202,8 +190,9 @@ out: */ extern inline void eieio(void) { - __asm__ __volatile__ ("eieio" : : : "memory" ); + __asm__ __volatile__ ("eieio" : : : "memory"); } +#define iobarrier() eieio() /* * 8, 16 and 32 bit, big and little endian I/O operations, with barrier. @@ -212,26 +201,21 @@ extern inline int in_8(volatile unsigned char *addr) { int ret; - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - ret = *addr; - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("lbz%U1%X1 %0,%1; eieio" : "=r" (ret) : "m" (*addr)); return ret; } extern inline void out_8(volatile unsigned char *addr, int val) { - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - *addr = val; - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val)); } extern inline int in_le16(volatile unsigned short *addr) { int ret; - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - ret = ld_le16(addr); - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("lhbrx %0,0,%1; eieio" : "=r" (ret) : + "r" (addr), "m" (*addr)); return ret; } @@ -239,58 +223,65 @@ extern inline int in_be16(volatile unsigned short *addr) { int ret; - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - ret = *addr; - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("lhz%U1%X1 %0,%1; eieio" : "=r" (ret) : "m" (*addr)); return ret; } extern inline void out_le16(volatile unsigned short *addr, int val) { - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - st_le16(addr, val); - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("sthbrx %1,0,%2; eieio" : "=m" (*addr) : + "r" (val), "r" (addr)); } extern inline void out_be16(volatile unsigned short *addr, int val) { - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - *addr = val; - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("sth%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val)); } extern inline unsigned in_le32(volatile unsigned *addr) { unsigned ret; - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - ret = ld_le32(addr); - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("lwbrx %0,0,%1; eieio" : "=r" (ret) : + "r" (addr), "m" (*addr)); return ret; } -extern inline int in_be32(volatile unsigned *addr) +extern inline unsigned in_be32(volatile unsigned *addr) { - int ret; + unsigned ret; - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - ret = *addr; - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("lwz%U1%X1 %0,%1; eieio" : "=r" (ret) : "m" (*addr)); return ret; } extern inline void out_le32(volatile unsigned *addr, int val) { - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - st_le32(addr, val); - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("stwbrx %1,0,%2; eieio" : "=m" (*addr) : + "r" (val), "r" (addr)); } extern inline void out_be32(volatile unsigned *addr, int val) { - __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) ); - *addr = val; - __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) ); + __asm__ __volatile__("stw%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val)); } +#ifdef __KERNEL__ +static inline int check_signature(unsigned long io_addr, + const unsigned char *signature, int length) +{ + int retval = 0; + do { + if (readb(io_addr) != *signature) + goto out; + io_addr++; + signature++; + length--; + } while (length); + retval = 1; +out: + return retval; +} +#endif /* __KERNEL__ */ + #endif diff --git a/include/asm-ppc/irq.h b/include/asm-ppc/irq.h index be13bd34a..661b2c007 100644 --- a/include/asm-ppc/irq.h +++ b/include/asm-ppc/irq.h @@ -8,7 +8,11 @@ #ifndef CONFIG_8xx #ifdef CONFIG_APUS +#define enable_irq m68k_enable_irq +#define disable_irq m68k_disable_irq #include <asm-m68k/irq.h> +#undef enable_irq +#undef disable_irq #else /* CONFIG_APUS */ /* @@ -16,7 +20,8 @@ * so it is the max of them all - which happens to be powermac * at present (G3 powermacs have 64). */ -#define NR_IRQS 64 +#define NR_IRQS 128 + #endif /* CONFIG_APUS */ #define NUM_8259_INTERRUPTS 16 @@ -76,9 +81,10 @@ static __inline__ int irq_cannonicalize(int irq) * My personal preference is CPM at level 2, which puts it above the * MBX PCI/ISA/IDE interrupts. */ -#define PIT_INTERRUPT SIU_LEVEL0 -#define CPM_INTERRUPT SIU_LEVEL2 -#define DEC_INTERRUPT SIU_LEVEL7 +#define PIT_INTERRUPT SIU_LEVEL0 +#define CPM_INTERRUPT SIU_LEVEL2 +#define PCMCIA_INTERRUPT SIU_LEVEL6 +#define DEC_INTERRUPT SIU_LEVEL7 /* Some internal interrupt registers use an 8-bit mask for the interrupt * level instead of a number. @@ -95,6 +101,10 @@ static __inline__ int irq_cannonicalize(int irq) #define STOP_ABRT_INT SIU_IRQ7 /* Stop/Abort header pin */ #endif /* CONFIG_MBX */ +#ifdef CONFIG_FADS +#define FEC_INTERRUPT SIU_LEVEL1 /* FEC interrupt */ +#endif + /* always the same on MBX -- Cort */ static __inline__ int irq_cannonicalize(int irq) { diff --git a/include/asm-ppc/linux_logo.h b/include/asm-ppc/linux_logo.h index 33ad40f64..09bf34089 100644 --- a/include/asm-ppc/linux_logo.h +++ b/include/asm-ppc/linux_logo.h @@ -11,6 +11,15 @@ * (i.e. linux_logo_{red,green,blue}[0] is color 0x20) */ +#include <linux/config.h> +#ifdef CONFIG_APUS +#include <asm-m68k/linux_logo.h> + +#undef linux_logo_banner +#define linux_logo_banner "Linux/PPC version " UTS_RELEASE + +#else + #include <linux/init.h> #define linux_logo_banner "Linux/PPC version " UTS_RELEASE @@ -39,3 +48,4 @@ extern unsigned char linux_logo16_blue[]; extern unsigned char linux_logo16[]; #endif +#endif /* CONFIG_APUS */ diff --git a/include/asm-ppc/mbx.h b/include/asm-ppc/mbx.h index f81c64b8c..1d8d91039 100644 --- a/include/asm-ppc/mbx.h +++ b/include/asm-ppc/mbx.h @@ -55,8 +55,8 @@ typedef struct bd_info { #define NVRAM_SIZE ((uint)(1 * 1024 * 1024)) #define MBX_CSR_ADDR ((uint)0xfa100000) #define MBX_CSR_SIZE ((uint)(1 * 1024 * 1024)) -#define MBX_IMAP_ADDR ((uint)0xfa200000) -#define MBX_IMAP_SIZE ((uint)(64 * 1024)) +#define IMAP_ADDR ((uint)0xfa200000) +#define IMAP_SIZE ((uint)(64 * 1024)) #define PCI_CSR_ADDR ((uint)0xfa210000) #define PCI_CSR_SIZE ((uint)(64 * 1024)) #endif diff --git a/include/asm-ppc/mediabay.h b/include/asm-ppc/mediabay.h index 85146e69a..04792d15e 100644 --- a/include/asm-ppc/mediabay.h +++ b/include/asm-ppc/mediabay.h @@ -14,20 +14,15 @@ #ifdef __KERNEL__ void media_bay_init(void); -int check_media_bay(int what); -int media_bay_task(void *); +int check_media_bay(struct device_node *which_bay, int what); +int check_media_bay_by_base(unsigned long base, int what); -extern int media_bay_present; /* 1 if this machine has a media bay */ +/* Number of bays in the machine or 0 */ +extern int media_bay_count; -/* - * The following give information about the IDE interface - * of the media bay: the base virtual address and IRQ number, - * and the index that the IDE driver has assigned to it - * (or -1 if it is not currently registered with the driver). - */ -extern unsigned long mb_cd_base; -extern int mb_cd_irq; -extern int mb_cd_index; +/* called by pmac-ide.c to register IDE controller for media bay */ +extern int media_bay_set_ide_infos(struct device_node* which_bay, + unsigned long base, int irq, int index); #endif /* __KERNEL__ */ #endif /* _PPC_MEDIABAY_H */ diff --git a/include/asm-ppc/mmu_context.h b/include/asm-ppc/mmu_context.h index 0f06f16fe..5b2bdc932 100644 --- a/include/asm-ppc/mmu_context.h +++ b/include/asm-ppc/mmu_context.h @@ -68,7 +68,7 @@ do { \ /* * We're finished using the context for an address space. */ -#define destroy_context(mm) ((mm)->context = NO_CONTEXT) +#define destroy_context(mm) do { } while (0) /* * After we have set current->mm to a new value, this activates diff --git a/include/asm-ppc/namei.h b/include/asm-ppc/namei.h index 3f87dc9ea..a4b277b40 100644 --- a/include/asm-ppc/namei.h +++ b/include/asm-ppc/namei.h @@ -1,4 +1,4 @@ -/* $Id: namei.h,v 1.3 1997/09/06 09:27:42 ralf Exp $ +/* $Id: namei.h,v 1.4 1998/12/08 20:52:03 ralf Exp $ * linux/include/asm-ppc/namei.h * Adapted from linux/include/asm-alpha/namei.h * @@ -13,7 +13,7 @@ * Look at asm-sparc/namei.h for details. */ -#define __prefix_lookup_dentry(name, follow_link) \ +#define __prefix_lookup_dentry(name, lookup_flags) \ do {} while (0) #endif /* __PPC_NAMEI_H */ diff --git a/include/asm-ppc/pgtable.h b/include/asm-ppc/pgtable.h index 96ccf6544..d0c0673b3 100644 --- a/include/asm-ppc/pgtable.h +++ b/include/asm-ppc/pgtable.h @@ -618,8 +618,6 @@ extern void cache_push(__u32 addr, int length); extern int mm_end_of_chunk (unsigned long addr, int len); extern unsigned long iopa(unsigned long addr); extern unsigned long mm_ptov(unsigned long addr) __attribute__ ((const)); -#define VTOP(addr) (iopa((unsigned long)(addr))) -#define PTOV(addr) (mm_ptov((unsigned long)(addr))) /* Values for nocacheflag and cmode */ /* These are not used by the APUS kernel_map, but prevents @@ -635,6 +633,11 @@ extern unsigned long mm_ptov(unsigned long addr) __attribute__ ((const)); extern unsigned long kernel_map(unsigned long paddr, unsigned long size, int nocacheflag, unsigned long *memavailp ); +/* + * Set cache mode of (kernel space) address range. + */ +extern void kernel_set_cachemode (unsigned long address, unsigned long size, + unsigned int cmode); /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define PageSkip(page) (0) diff --git a/include/asm-ppc/pmu.h b/include/asm-ppc/pmu.h index 672aeed2e..ee04ae2a8 100644 --- a/include/asm-ppc/pmu.h +++ b/include/asm-ppc/pmu.h @@ -54,6 +54,9 @@ void pmu_poll(void); void pmu_enable_backlight(int on); +void pmu_restart(void); +void pmu_shutdown(void); + /* * Stuff for putting the powerbook to sleep and waking it again. */ diff --git a/include/asm-ppc/processor.h b/include/asm-ppc/processor.h index cfa71b568..a3e06e566 100644 --- a/include/asm-ppc/processor.h +++ b/include/asm-ppc/processor.h @@ -25,9 +25,9 @@ #define MSR_LE (1<<0) /* Little-Endian enable */ #ifdef CONFIG_APUS -#define MSR_ MSR_ME|MSR_FE0|MSR_FE1|MSR_IP|MSR_RI +#define MSR_ MSR_ME|MSR_IP|MSR_RI #else -#define MSR_ MSR_ME|MSR_FE0|MSR_FE1|MSR_RI +#define MSR_ MSR_ME|MSR_RI #endif #define MSR_KERNEL MSR_|MSR_IR|MSR_DR #define MSR_USER MSR_KERNEL|MSR_PR|MSR_EE @@ -64,6 +64,7 @@ #define _MACH_chrp 4 /* chrp machine */ #define _MACH_mbx 8 /* Motorola MBX board */ #define _MACH_apus 16 /* amiga with phase5 powerup */ +#define _MACH_fads 32 /* Motorola FADS board */ /* see residual.h for these */ #define _PREP_Motorola 0x01 /* motorola prep */ @@ -193,6 +194,13 @@ n: #define have_of (0) #endif /* CONFIG_MBX */ +#ifdef CONFIG_FADS +#define _machine (_MACH_fads) +#define is_prep (0) +#define is_chrp (0) +#define have_of (0) +#endif /* CONFIG_FADS */ + #ifdef CONFIG_APUS #define _machine (_MACH_apus) #define is_prep (0) diff --git a/include/asm-ppc/prom.h b/include/asm-ppc/prom.h index 9dd860981..018da94fd 100644 --- a/include/asm-ppc/prom.h +++ b/include/asm-ppc/prom.h @@ -8,10 +8,7 @@ typedef void *phandle; typedef void *ihandle; -#ifndef FB_MAX -#define FB_MAX 8 /* I don't want to include the whole console stuff */ -#endif -extern char *prom_display_paths[FB_MAX]; +extern char *prom_display_paths[]; extern unsigned int prom_num_displays; struct address_range { @@ -65,17 +62,19 @@ struct prom_args; typedef void (*prom_entry)(struct prom_args *); /* Prototypes */ -void abort(void); -void prom_init(int, int, prom_entry); -void finish_device_tree(void); -struct device_node *find_devices(const char *name); -struct device_node *find_type_devices(const char *type); -struct device_node *find_path_device(const char *path); -struct device_node *find_compatible_devices(const char *type, - const char *compat); -struct device_node *find_phandle(phandle); -unsigned char *get_property(struct device_node *node, const char *name, - int *lenp); -void print_properties(struct device_node *node); -int call_rtas(const char *service, int nargs, int nret, - unsigned long *outputs, ...); +extern void abort(void); +extern void prom_init(int, int, prom_entry); +extern void prom_print(const char *msg); +extern void finish_device_tree(void); +extern struct device_node *find_devices(const char *name); +extern struct device_node *find_type_devices(const char *type); +extern struct device_node *find_path_device(const char *path); +extern struct device_node *find_compatible_devices(const char *type, + const char *compat); +extern struct device_node *find_phandle(phandle); +extern int device_is_compatible(struct device_node *device, const char* compat); +extern unsigned char *get_property(struct device_node *node, const char *name, + int *lenp); +extern void print_properties(struct device_node *node); +extern int call_rtas(const char *service, int nargs, int nret, + unsigned long *outputs, ...); diff --git a/include/asm-ppc/smp.h b/include/asm-ppc/smp.h index fcbaa0076..4fb817a8e 100644 --- a/include/asm-ppc/smp.h +++ b/include/asm-ppc/smp.h @@ -13,7 +13,22 @@ #ifndef __ASSEMBLY__ -extern unsigned long cpu_present_map; +extern int first_cpu_booted; +extern unsigned long smp_proc_in_lock[NR_CPUS]; + +extern void smp_message_pass(int target, int msg, unsigned long data, int wait); +extern void smp_store_cpu_info(int id); + +#define NO_PROC_ID 0xFF /* No processor magic marker */ +#define PROC_CHANGE_PENALTY 2000 + +/* 1 to 1 mapping on PPC -- Cort */ +#define cpu_logical_map(cpu) (cpu) +extern int cpu_number_map[NR_CPUS]; +extern volatile unsigned long cpu_callin_map[NR_CPUS]; + +#define hard_smp_processor_id() (0) +#define smp_processor_id() (current->processor) /* per processor PPC parameters we need. */ struct cpuinfo_PPC { @@ -32,45 +47,13 @@ struct klock_info_struct { }; extern struct klock_info_struct klock_info; - #define KLOCK_HELD 0xffffffff #define KLOCK_CLEAR 0x0 -#define PROC_CHANGE_PENALTY 20 - -extern __volatile__ int cpu_number_map[NR_CPUS]; -extern __volatile__ int __cpu_logical_map[NR_CPUS]; -extern unsigned long smp_proc_in_lock[NR_CPUS]; - -extern __inline__ int cpu_logical_map(int cpu) -{ - return __cpu_logical_map[cpu]; -} - -extern __inline__ int hard_smp_processor_id(void) -{ - int cpuid = 0; - /* assume cpu # 0 for now */ - return cpuid; -} - -#define smp_processor_id() (current->processor) - -extern void smp_message_pass(int target, int msg, unsigned long data, int wait); - #endif /* __ASSEMBLY__ */ #else /* !(__SMP__) */ -#ifndef __ASSEMBLY__ -extern __inline__ int cpu_logical_map(int cpu) -{ - return cpu; -} -#endif -#endif /* !(__SMP__) */ - -#define NO_PROC_ID 0xFF /* No processor magic marker */ -extern void smp_store_cpu_info(int id); +#endif /* !(__SMP__) */ #endif /* !(_PPC_SMP_H) */ diff --git a/include/asm-ppc/softirq.h b/include/asm-ppc/softirq.h index 712616bd1..739b22580 100644 --- a/include/asm-ppc/softirq.h +++ b/include/asm-ppc/softirq.h @@ -1,26 +1,12 @@ -/* - * Software interrupts.. - */ - #ifndef __ASM_SOFTIRQ_H #define __ASM_SOFTIRQ_H #include <asm/atomic.h> #include <asm/hardirq.h> -/* - * The locking mechanism for base handlers, to prevent re-entrancy, - * is entirely private to an implementation, it should not be - * referenced at all outside of this file. - */ -#define get_active_bhs() (bh_mask & bh_active) - -#ifndef __SMP__ - -extern int __ppc_bh_counter; - -#define synchronize_bh() do { } while (0) +extern unsigned int local_bh_count[NR_CPUS]; +#define get_active_bhs() (bh_mask & bh_active) #define clear_active_bhs(x) atomic_clear_mask((x),&bh_active) extern inline void init_bh(int nr, void (*routine)(void)) @@ -41,115 +27,83 @@ extern inline void mark_bh(int nr) set_bit(nr, &bh_active); } +#ifdef __SMP__ /* - * These use a mask count to correctly handle - * nested disable/enable calls + * The locking mechanism for base handlers, to prevent re-entrancy, + * is entirely private to an implementation, it should not be + * referenced at all outside of this file. */ -extern inline void disable_bh(int nr) +extern atomic_t global_bh_lock; +extern atomic_t global_bh_count; + +extern void synchronize_bh(void); + +static inline void start_bh_atomic(void) { - bh_mask &= ~(1 << nr); - bh_mask_count[nr]++; + atomic_inc(&global_bh_lock); + synchronize_bh(); } -extern inline void enable_bh(int nr) +static inline void end_bh_atomic(void) { - if (!--bh_mask_count[nr]) - bh_mask |= 1 << nr; + atomic_dec(&global_bh_lock); } +/* These are for the IRQs testing the lock */ +static inline int softirq_trylock(int cpu) +{ + if (!test_and_set_bit(0,&global_bh_count)) { + if (atomic_read(&global_bh_lock) == 0) { + ++local_bh_count[cpu]; + return 1; + } + clear_bit(0,&global_bh_count); + } + return 0; +} + +static inline void softirq_endlock(int cpu) +{ + local_bh_count[cpu]--; + clear_bit(0,&global_bh_count); +} + +#else /* __SMP__ */ extern inline void start_bh_atomic(void) { - __ppc_bh_counter++; + local_bh_count[smp_processor_id()]++; barrier(); } extern inline void end_bh_atomic(void) { barrier(); - __ppc_bh_counter--; + local_bh_count[smp_processor_id()]--; } /* These are for the irq's testing the lock */ -#define softirq_trylock(cpu) (__ppc_bh_counter? 0: ((__ppc_bh_counter=1),1)) -#define softirq_endlock(cpu) (__ppc_bh_counter = 0) +#define softirq_trylock(cpu) (local_bh_count[cpu] ? 0 : (local_bh_count[cpu]=1)) +#define softirq_endlock(cpu) (local_bh_count[cpu] = 0) +#define synchronize_bh() do { } while (0) -#else /* __SMP__ */ +#endif /* __SMP__ */ -extern atomic_t __ppc_bh_counter; - -#define start_bh_atomic() \ - do { atomic_inc(&__ppc_bh_counter); synchronize_irq(); } while(0) - -#define end_bh_atomic() atomic_dec(&__ppc_bh_counter) - -#define synchronize_bh() do { } while (0) /* XXX implement SMP version --Cort */ - -#include <asm/spinlock.h> - -extern spinlock_t global_bh_lock; - -#define init_bh(nr, routine) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_base[ent] = routine; \ - bh_mask_count[ent] = 0; \ - bh_mask |= 1 << ent; \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define remove_bh(nr) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_base[ent] = NULL; \ - bh_mask &= ~(1 << ent); \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define mark_bh(nr) \ -do { unsigned long flags; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_active |= (1 << nr); \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define disable_bh(nr) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_mask &= ~(1 << ent); \ - bh_mask_count[ent]++; \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define enable_bh(nr) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - if (!--bh_mask_count[ent]) \ - bh_mask |= 1 << ent; \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define softirq_trylock(cpu) \ -({ \ - int ret = 1; \ - if(atomic_add_return(1, &__ppc_bh_counter) != 1) { \ - atomic_dec(&__ppc_bh_counter); \ - ret = 0; \ - } \ - ret; \ -}) -#define softirq_endlock(cpu) atomic_dec(&__ppc_bh_counter) -#define clear_active_bhs(mask) \ -do { unsigned long flags; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_active &= ~(mask); \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) +/* + * These use a mask count to correctly handle + * nested disable/enable calls + */ +extern inline void disable_bh(int nr) +{ + bh_mask &= ~(1 << nr); + bh_mask_count[nr]++; + synchronize_bh(); +} -#endif /* __SMP__ */ +extern inline void enable_bh(int nr) +{ + if (!--bh_mask_count[nr]) + bh_mask |= 1 << nr; +} #endif diff --git a/include/asm-ppc/system.h b/include/asm-ppc/system.h index 978fb2ab8..32d01e7f2 100644 --- a/include/asm-ppc/system.h +++ b/include/asm-ppc/system.h @@ -53,14 +53,15 @@ extern void hard_reset_now(void); extern void poweroff_now(void); extern int _get_PVR(void); extern long _get_L2CR(void); +extern void _set_L2CR(unsigned long); extern void via_cuda_init(void); extern void pmac_nvram_init(void); extern void read_rtc_time(void); extern void pmac_find_display(void); extern void giveup_fpu(void); extern void smp_giveup_fpu(struct task_struct *); -extern void cvt_fd(float *from, double *to); -extern void cvt_df(double *from, float *to); +extern void cvt_fd(float *from, double *to, unsigned long *fpscr); +extern void cvt_df(double *from, float *to, unsigned long *fpscr); struct device_node; extern void note_scsi_host(struct device_node *, void *); diff --git a/include/asm-ppc/termios.h b/include/asm-ppc/termios.h index b5e8c78df..c6385d4a7 100644 --- a/include/asm-ppc/termios.h +++ b/include/asm-ppc/termios.h @@ -175,6 +175,13 @@ struct termio { #define N_SLIP 1 #define N_MOUSE 2 #define N_PPP 3 +#define N_STRIP 4 +#define N_AX25 5 +#define N_X25 6 /* X.25 async */ +#define N_6PACK 7 +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ +#define N_R3964 9 /* Reserved for Simatic R3964 module */ +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ #ifdef __KERNEL__ diff --git a/include/asm-ppc/types.h b/include/asm-ppc/types.h index 1c9e605da..6f95c17e6 100644 --- a/include/asm-ppc/types.h +++ b/include/asm-ppc/types.h @@ -1,8 +1,6 @@ #ifndef _PPC_TYPES_H #define _PPC_TYPES_H -typedef unsigned short umode_t; - /* * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the * header files exported to user space @@ -27,6 +25,8 @@ typedef unsigned long long __u64; */ #ifdef __KERNEL__ +typedef unsigned short umode_t; + typedef signed char s8; typedef unsigned char u8; diff --git a/include/asm-ppc/uaccess.h b/include/asm-ppc/uaccess.h index 65ca165b7..b22b81511 100644 --- a/include/asm-ppc/uaccess.h +++ b/include/asm-ppc/uaccess.h @@ -211,12 +211,9 @@ extern int __copy_tofrom_user(void *to, const void *from, unsigned long size); extern inline unsigned long copy_from_user(void *to, const void *from, unsigned long n) { - unsigned long res = n; - if (access_ok(VERIFY_READ, from, n)) { - res = __copy_tofrom_user(to, from, n); - if (res) memset((char *)to + n - res, 0, res); - } - return res; + if (access_ok(VERIFY_READ, from, n)) + return __copy_tofrom_user(to, from, n); + return n; } extern inline unsigned long diff --git a/include/asm-ppc/unistd.h b/include/asm-ppc/unistd.h index 2a0f9f16b..5e8c3910e 100644 --- a/include/asm-ppc/unistd.h +++ b/include/asm-ppc/unistd.h @@ -5,7 +5,6 @@ * This file contains the system call numbers. */ -#define __NR_setup 0 /* used only by init, to get system going */ #define __NR_exit 1 #define __NR_fork 2 #define __NR_read 3 @@ -57,7 +56,7 @@ #define __NR_geteuid 49 #define __NR_getegid 50 #define __NR_acct 51 -#define __NR_phys 52 +#define __NR_umount2 52 #define __NR_lock 53 #define __NR_ioctl 54 #define __NR_fcntl 55 @@ -181,13 +180,19 @@ #define __NR_rt_sigaction 173 #define __NR_rt_sigprocmask 174 #define __NR_rt_sigpending 175 -#define __NR_rt_sigtimedwait 176 -#define __NR_rt_sigqueueinfo 177 -#define __NR_rt_sigsuspend 178 -#define __NR_pread 179 -#define __NR_pwrite 180 -#define __NR_chown 181 -#define __NR_getcwd 182 +#define __NR_rt_sigtimedwait 176 +#define __NR_rt_sigqueueinfo 177 +#define __NR_rt_sigsuspend 178 +#define __NR_pread 179 +#define __NR_pwrite 180 +#define __NR_chown 181 +#define __NR_getcwd 182 +#define __NR_capget 183 +#define __NR_capset 184 +#define __NR_sigaltstack 185 +#define __NR_sendfile 186 +#define __NR_getpmsg 187 /* some people actually want streams */ +#define __NR_putpmsg 188 /* some people actually want streams */ #define __NR(n) #n @@ -387,7 +392,6 @@ static inline long kernel_thread(int (*fn)(void *), void * arg, unsigned long fl #define __NR__exit __NR_exit static inline _syscall0(int,idle) static inline _syscall0(int,pause) -static inline _syscall1(int,setup,int,magic) static inline _syscall0(int,sync) static inline _syscall0(pid_t,setsid) static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count) diff --git a/include/asm-ppc/vga.h b/include/asm-ppc/vga.h index d82388831..1ab739772 100644 --- a/include/asm-ppc/vga.h +++ b/include/asm-ppc/vga.h @@ -21,8 +21,11 @@ extern inline u16 scr_readw(u16 *addr) return ld_le16(addr); } -#define VGA_MAP_MEM(x) (x + _ISA_MEM_BASE) +#define VT_BUF_HAVE_MEMCPYF +#define scr_memcpyw_from memcpy +#define scr_memcpyw_to memcpy +#define VGA_MAP_MEM(x) (x + _ISA_MEM_BASE) #define vga_readb(x) (*(x)) #define vga_writeb(x,y) (*(y) = (x)) diff --git a/include/asm-sparc/asm_offsets.h b/include/asm-sparc/asm_offsets.h index d2f9a582b..655987dd5 100644 --- a/include/asm-sparc/asm_offsets.h +++ b/include/asm-sparc/asm_offsets.h @@ -74,78 +74,78 @@ #define ASIZ_task_tarray_ptr 0x00000004 #define AOFF_task_wait_chldexit 0x0000008c #define ASIZ_task_wait_chldexit 0x00000004 -#define AOFF_task_timeout 0x00000090 -#define ASIZ_task_timeout 0x00000004 -#define AOFF_task_policy 0x00000094 +#define AOFF_task_policy 0x00000090 #define ASIZ_task_policy 0x00000004 -#define AOFF_task_rt_priority 0x00000098 +#define AOFF_task_rt_priority 0x00000094 #define ASIZ_task_rt_priority 0x00000004 -#define AOFF_task_it_real_value 0x0000009c +#define AOFF_task_it_real_value 0x00000098 #define ASIZ_task_it_real_value 0x00000004 -#define AOFF_task_it_prof_value 0x000000a0 +#define AOFF_task_it_prof_value 0x0000009c #define ASIZ_task_it_prof_value 0x00000004 -#define AOFF_task_it_virt_value 0x000000a4 +#define AOFF_task_it_virt_value 0x000000a0 #define ASIZ_task_it_virt_value 0x00000004 -#define AOFF_task_it_real_incr 0x000000a8 +#define AOFF_task_it_real_incr 0x000000a4 #define ASIZ_task_it_real_incr 0x00000004 -#define AOFF_task_it_prof_incr 0x000000ac +#define AOFF_task_it_prof_incr 0x000000a8 #define ASIZ_task_it_prof_incr 0x00000004 -#define AOFF_task_it_virt_incr 0x000000b0 +#define AOFF_task_it_virt_incr 0x000000ac #define ASIZ_task_it_virt_incr 0x00000004 -#define AOFF_task_real_timer 0x000000b4 +#define AOFF_task_real_timer 0x000000b0 #define ASIZ_task_real_timer 0x00000014 -#define AOFF_task_times 0x000000c8 +#define AOFF_task_times 0x000000c4 #define ASIZ_task_times 0x00000010 -#define AOFF_task_start_time 0x000000d8 +#define AOFF_task_start_time 0x000000d4 #define ASIZ_task_start_time 0x00000004 -#define AOFF_task_per_cpu_utime 0x000000dc +#define AOFF_task_per_cpu_utime 0x000000d8 #define ASIZ_task_per_cpu_utime 0x00000004 -#define AOFF_task_min_flt 0x000000e4 +#define AOFF_task_min_flt 0x000000e0 #define ASIZ_task_min_flt 0x00000004 -#define AOFF_task_maj_flt 0x000000e8 +#define AOFF_task_maj_flt 0x000000e4 #define ASIZ_task_maj_flt 0x00000004 -#define AOFF_task_nswap 0x000000ec +#define AOFF_task_nswap 0x000000e8 #define ASIZ_task_nswap 0x00000004 -#define AOFF_task_cmin_flt 0x000000f0 +#define AOFF_task_cmin_flt 0x000000ec #define ASIZ_task_cmin_flt 0x00000004 -#define AOFF_task_cmaj_flt 0x000000f4 +#define AOFF_task_cmaj_flt 0x000000f0 #define ASIZ_task_cmaj_flt 0x00000004 -#define AOFF_task_cnswap 0x000000f8 +#define AOFF_task_cnswap 0x000000f4 #define ASIZ_task_cnswap 0x00000004 -#define AOFF_task_swap_address 0x00000100 +#define AOFF_task_swap_address 0x000000fc #define ASIZ_task_swap_address 0x00000004 -#define AOFF_task_old_maj_flt 0x00000104 +#define AOFF_task_old_maj_flt 0x00000100 #define ASIZ_task_old_maj_flt 0x00000004 -#define AOFF_task_dec_flt 0x00000108 +#define AOFF_task_dec_flt 0x00000104 #define ASIZ_task_dec_flt 0x00000004 -#define AOFF_task_swap_cnt 0x0000010c +#define AOFF_task_swap_cnt 0x00000108 #define ASIZ_task_swap_cnt 0x00000004 -#define AOFF_task_uid 0x00000110 +#define AOFF_task_uid 0x0000010c #define ASIZ_task_uid 0x00000002 -#define AOFF_task_euid 0x00000112 +#define AOFF_task_euid 0x0000010e #define ASIZ_task_euid 0x00000002 -#define AOFF_task_suid 0x00000114 +#define AOFF_task_suid 0x00000110 #define ASIZ_task_suid 0x00000002 -#define AOFF_task_fsuid 0x00000116 +#define AOFF_task_fsuid 0x00000112 #define ASIZ_task_fsuid 0x00000002 -#define AOFF_task_gid 0x00000118 +#define AOFF_task_gid 0x00000114 #define ASIZ_task_gid 0x00000002 -#define AOFF_task_egid 0x0000011a +#define AOFF_task_egid 0x00000116 #define ASIZ_task_egid 0x00000002 -#define AOFF_task_sgid 0x0000011c +#define AOFF_task_sgid 0x00000118 #define ASIZ_task_sgid 0x00000002 -#define AOFF_task_fsgid 0x0000011e +#define AOFF_task_fsgid 0x0000011a #define ASIZ_task_fsgid 0x00000002 -#define AOFF_task_ngroups 0x00000120 +#define AOFF_task_ngroups 0x0000011c #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x00000124 +#define AOFF_task_groups 0x00000120 #define ASIZ_task_groups 0x00000040 -#define AOFF_task_cap_effective 0x00000164 +#define AOFF_task_cap_effective 0x00000160 #define ASIZ_task_cap_effective 0x00000004 -#define AOFF_task_cap_inheritable 0x00000168 +#define AOFF_task_cap_inheritable 0x00000164 #define ASIZ_task_cap_inheritable 0x00000004 -#define AOFF_task_cap_permitted 0x0000016c +#define AOFF_task_cap_permitted 0x00000168 #define ASIZ_task_cap_permitted 0x00000004 +#define AOFF_task_user 0x0000016c +#define ASIZ_task_user 0x00000004 #define AOFF_task_rlim 0x00000170 #define ASIZ_task_rlim 0x00000050 #define AOFF_task_used_math 0x000001c0 @@ -169,20 +169,20 @@ #define AOFF_task_mm 0x00000578 #define ASIZ_task_mm 0x00000004 #define AOFF_task_sigmask_lock 0x0000057c -#define ASIZ_task_sigmask_lock 0x00000000 -#define AOFF_task_sig 0x0000057c +#define ASIZ_task_sigmask_lock 0x00000001 +#define AOFF_task_sig 0x00000580 #define ASIZ_task_sig 0x00000004 -#define AOFF_task_signal 0x00000580 +#define AOFF_task_signal 0x00000584 #define ASIZ_task_signal 0x00000008 -#define AOFF_task_blocked 0x00000588 +#define AOFF_task_blocked 0x0000058c #define ASIZ_task_blocked 0x00000008 -#define AOFF_task_sigqueue 0x00000590 +#define AOFF_task_sigqueue 0x00000594 #define ASIZ_task_sigqueue 0x00000004 -#define AOFF_task_sigqueue_tail 0x00000594 +#define AOFF_task_sigqueue_tail 0x00000598 #define ASIZ_task_sigqueue_tail 0x00000004 -#define AOFF_task_sas_ss_sp 0x00000598 +#define AOFF_task_sas_ss_sp 0x0000059c #define ASIZ_task_sas_ss_sp 0x00000004 -#define AOFF_task_sas_ss_size 0x0000059c +#define AOFF_task_sas_ss_size 0x000005a0 #define ASIZ_task_sas_ss_size 0x00000004 #define AOFF_mm_mmap 0x00000000 #define ASIZ_mm_mmap 0x00000004 @@ -347,78 +347,78 @@ #define ASIZ_task_tarray_ptr 0x00000004 #define AOFF_task_wait_chldexit 0x0000008c #define ASIZ_task_wait_chldexit 0x00000004 -#define AOFF_task_timeout 0x00000090 -#define ASIZ_task_timeout 0x00000004 -#define AOFF_task_policy 0x00000094 +#define AOFF_task_policy 0x00000090 #define ASIZ_task_policy 0x00000004 -#define AOFF_task_rt_priority 0x00000098 +#define AOFF_task_rt_priority 0x00000094 #define ASIZ_task_rt_priority 0x00000004 -#define AOFF_task_it_real_value 0x0000009c +#define AOFF_task_it_real_value 0x00000098 #define ASIZ_task_it_real_value 0x00000004 -#define AOFF_task_it_prof_value 0x000000a0 +#define AOFF_task_it_prof_value 0x0000009c #define ASIZ_task_it_prof_value 0x00000004 -#define AOFF_task_it_virt_value 0x000000a4 +#define AOFF_task_it_virt_value 0x000000a0 #define ASIZ_task_it_virt_value 0x00000004 -#define AOFF_task_it_real_incr 0x000000a8 +#define AOFF_task_it_real_incr 0x000000a4 #define ASIZ_task_it_real_incr 0x00000004 -#define AOFF_task_it_prof_incr 0x000000ac +#define AOFF_task_it_prof_incr 0x000000a8 #define ASIZ_task_it_prof_incr 0x00000004 -#define AOFF_task_it_virt_incr 0x000000b0 +#define AOFF_task_it_virt_incr 0x000000ac #define ASIZ_task_it_virt_incr 0x00000004 -#define AOFF_task_real_timer 0x000000b4 +#define AOFF_task_real_timer 0x000000b0 #define ASIZ_task_real_timer 0x00000014 -#define AOFF_task_times 0x000000c8 +#define AOFF_task_times 0x000000c4 #define ASIZ_task_times 0x00000010 -#define AOFF_task_start_time 0x000000d8 +#define AOFF_task_start_time 0x000000d4 #define ASIZ_task_start_time 0x00000004 -#define AOFF_task_per_cpu_utime 0x000000dc +#define AOFF_task_per_cpu_utime 0x000000d8 #define ASIZ_task_per_cpu_utime 0x00000080 -#define AOFF_task_min_flt 0x000001dc +#define AOFF_task_min_flt 0x000001d8 #define ASIZ_task_min_flt 0x00000004 -#define AOFF_task_maj_flt 0x000001e0 +#define AOFF_task_maj_flt 0x000001dc #define ASIZ_task_maj_flt 0x00000004 -#define AOFF_task_nswap 0x000001e4 +#define AOFF_task_nswap 0x000001e0 #define ASIZ_task_nswap 0x00000004 -#define AOFF_task_cmin_flt 0x000001e8 +#define AOFF_task_cmin_flt 0x000001e4 #define ASIZ_task_cmin_flt 0x00000004 -#define AOFF_task_cmaj_flt 0x000001ec +#define AOFF_task_cmaj_flt 0x000001e8 #define ASIZ_task_cmaj_flt 0x00000004 -#define AOFF_task_cnswap 0x000001f0 +#define AOFF_task_cnswap 0x000001ec #define ASIZ_task_cnswap 0x00000004 -#define AOFF_task_swap_address 0x000001f8 +#define AOFF_task_swap_address 0x000001f4 #define ASIZ_task_swap_address 0x00000004 -#define AOFF_task_old_maj_flt 0x000001fc +#define AOFF_task_old_maj_flt 0x000001f8 #define ASIZ_task_old_maj_flt 0x00000004 -#define AOFF_task_dec_flt 0x00000200 +#define AOFF_task_dec_flt 0x000001fc #define ASIZ_task_dec_flt 0x00000004 -#define AOFF_task_swap_cnt 0x00000204 +#define AOFF_task_swap_cnt 0x00000200 #define ASIZ_task_swap_cnt 0x00000004 -#define AOFF_task_uid 0x00000208 +#define AOFF_task_uid 0x00000204 #define ASIZ_task_uid 0x00000002 -#define AOFF_task_euid 0x0000020a +#define AOFF_task_euid 0x00000206 #define ASIZ_task_euid 0x00000002 -#define AOFF_task_suid 0x0000020c +#define AOFF_task_suid 0x00000208 #define ASIZ_task_suid 0x00000002 -#define AOFF_task_fsuid 0x0000020e +#define AOFF_task_fsuid 0x0000020a #define ASIZ_task_fsuid 0x00000002 -#define AOFF_task_gid 0x00000210 +#define AOFF_task_gid 0x0000020c #define ASIZ_task_gid 0x00000002 -#define AOFF_task_egid 0x00000212 +#define AOFF_task_egid 0x0000020e #define ASIZ_task_egid 0x00000002 -#define AOFF_task_sgid 0x00000214 +#define AOFF_task_sgid 0x00000210 #define ASIZ_task_sgid 0x00000002 -#define AOFF_task_fsgid 0x00000216 +#define AOFF_task_fsgid 0x00000212 #define ASIZ_task_fsgid 0x00000002 -#define AOFF_task_ngroups 0x00000218 +#define AOFF_task_ngroups 0x00000214 #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x0000021c +#define AOFF_task_groups 0x00000218 #define ASIZ_task_groups 0x00000040 -#define AOFF_task_cap_effective 0x0000025c +#define AOFF_task_cap_effective 0x00000258 #define ASIZ_task_cap_effective 0x00000004 -#define AOFF_task_cap_inheritable 0x00000260 +#define AOFF_task_cap_inheritable 0x0000025c #define ASIZ_task_cap_inheritable 0x00000004 -#define AOFF_task_cap_permitted 0x00000264 +#define AOFF_task_cap_permitted 0x00000260 #define ASIZ_task_cap_permitted 0x00000004 +#define AOFF_task_user 0x00000264 +#define ASIZ_task_user 0x00000004 #define AOFF_task_rlim 0x00000268 #define ASIZ_task_rlim 0x00000050 #define AOFF_task_used_math 0x000002b8 @@ -442,20 +442,20 @@ #define AOFF_task_mm 0x00000670 #define ASIZ_task_mm 0x00000004 #define AOFF_task_sigmask_lock 0x00000674 -#define ASIZ_task_sigmask_lock 0x00000001 -#define AOFF_task_sig 0x00000678 +#define ASIZ_task_sigmask_lock 0x00000008 +#define AOFF_task_sig 0x0000067c #define ASIZ_task_sig 0x00000004 -#define AOFF_task_signal 0x0000067c +#define AOFF_task_signal 0x00000680 #define ASIZ_task_signal 0x00000008 -#define AOFF_task_blocked 0x00000684 +#define AOFF_task_blocked 0x00000688 #define ASIZ_task_blocked 0x00000008 -#define AOFF_task_sigqueue 0x0000068c +#define AOFF_task_sigqueue 0x00000690 #define ASIZ_task_sigqueue 0x00000004 -#define AOFF_task_sigqueue_tail 0x00000690 +#define AOFF_task_sigqueue_tail 0x00000694 #define ASIZ_task_sigqueue_tail 0x00000004 -#define AOFF_task_sas_ss_sp 0x00000694 +#define AOFF_task_sas_ss_sp 0x00000698 #define ASIZ_task_sas_ss_sp 0x00000004 -#define AOFF_task_sas_ss_size 0x00000698 +#define AOFF_task_sas_ss_size 0x0000069c #define ASIZ_task_sas_ss_size 0x00000004 #define AOFF_mm_mmap 0x00000000 #define ASIZ_mm_mmap 0x00000004 diff --git a/include/asm-sparc/audioio.h b/include/asm-sparc/audioio.h index 93e8c33dd..ca5e06538 100644 --- a/include/asm-sparc/audioio.h +++ b/include/asm-sparc/audioio.h @@ -88,6 +88,7 @@ typedef struct audio_info { #define AUDIO_ENCODING_ULAW (1) /* u-law encoding */ #define AUDIO_ENCODING_ALAW (2) /* A-law encoding */ #define AUDIO_ENCODING_LINEAR (3) /* Linear PCM encoding */ +#define AUDIO_ENCODING_FLOAT (4) /* IEEE float (-1. <-> +1.) */ #define AUDIO_ENCODING_DVI (104) /* DVI ADPCM */ #define AUDIO_ENCODING_LINEAR8 (105) /* 8 bit UNSIGNED */ #define AUDIO_ENCODING_LINEARLE (106) /* Linear PCM LE encoding */ @@ -139,8 +140,7 @@ typedef struct audio_info { #define AUDIO_LINE_IN 0x02 /* input from line in */ #define AUDIO_CD 0x04 /* input from on-board CD inputs */ #define AUDIO_INTERNAL_CD_IN AUDIO_CD /* input from internal CDROM */ -/* Supposedly an undocumented feature of the 4231 */ -#define AUDIO_ANALOG_LOOPBACK 0x40 +#define AUDIO_ANALOG_LOOPBACK 0x40 /* input from output */ /* @@ -227,22 +227,10 @@ typedef struct audio_device { * if the hardware supports this. The argument is TRUE to set loopback, * FALSE to reset to normal operation. If the hardware does not support * internal loopback, the ioctl should fail with EINVAL. + * Causes ADC data to be digitally mixed in and sent to the DAC. */ #define AUDIO_DIAG_LOOPBACK _IOW('A', 101, int) -#ifdef notneeded -/* - * Structure sent up as a M_PROTO message on trace streams - */ -typedef struct audtrace_hdr audtrace_hdr_t; -struct audtrace_hdr { - unsigned int seq; /* Sequence number (per-aud_stream) */ - int type; /* device-dependent */ - struct timeval timestamp; - char _f[8]; /* filler */ -}; -#endif - /* * Linux kernel internal implementation. */ @@ -257,48 +245,72 @@ struct audtrace_hdr { #define SDF_OPEN_WRITE 0x00000001 #define SDF_OPEN_READ 0x00000002 +struct sparcaudio_ringbuffer +{ + __u8 *rb_start, *rb_end; /* start, end of this memory buffer */ + __u8 *rb_in, *rb_out; /* input, output pointers */ + + int rb_fragsize; /* size of an audio frag */ + int rb_numfrags; /* number of frags */ + + int rb_count, rb_hiwat, rb_lowat; /* bytes in use, hi/lo wat points */ + + int rb_bufsize; /* total size of buffer */ +}; + struct sparcaudio_driver { const char * name; struct sparcaudio_operations *ops; void *private; unsigned long flags; + struct strevent *sd_siglist; + /* duplex: 0=simplex, 1=duplex, 2=loop */ + int sd_sigflags, duplex; + + /* Which audio device are we? */ + int index; /* This device */ struct linux_sbus_device *dev; - + /* Processes blocked on open() sit here. */ struct wait_queue *open_wait; /* Task queue for this driver's bottom half. */ struct tq_struct tqueue; + /* Start of ring buffer support */ + __u8 *input_buffer, *output_buffer; + /* Support for a circular queue of output buffers. */ __u8 **output_buffers; - size_t *output_sizes, output_size; - int num_output_buffers, output_front, output_rear; - int output_count, output_active, playing_count; + size_t *output_sizes, output_size, output_buffer_size; + int num_output_buffers, output_front, output_rear, output_offset; + int output_count, output_active, playing_count, output_eof; struct wait_queue *output_write_wait, *output_drain_wait; + char *output_notify; /* Support for a circular queue of input buffers. */ __u8 **input_buffers; - int input_offset; - int num_input_buffers, input_front, input_rear; + size_t *input_sizes, input_size, input_buffer_size; + int num_input_buffers, input_front, input_rear, input_offset; int input_count, input_active, recording_count; struct wait_queue *input_read_wait; + + /* Hack to make it look like we support variable size buffers. */ + int buffer_size; }; struct sparcaudio_operations { int (*open)(struct inode *, struct file *, struct sparcaudio_driver *); - void (*release)(struct inode *, struct file *, struct - sparcaudio_driver *); - int (*ioctl)(struct inode *, struct file *, unsigned int, - unsigned long, struct sparcaudio_driver *); + void (*release)(struct inode *, struct file *, struct sparcaudio_driver *); + int (*ioctl)(struct inode *, struct file *, unsigned int, unsigned long, + struct sparcaudio_driver *); /* Ask driver to begin playing a buffer. */ - void (*start_output)(struct sparcaudio_driver *, __u8 *, - unsigned long); + void (*start_output)(struct sparcaudio_driver *, __u8 *, unsigned long); /* Ask driver to stop playing a buffer. */ void (*stop_output)(struct sparcaudio_driver *); @@ -382,35 +394,125 @@ struct sparcaudio_operations /* Get and set output mute */ int (*set_output_muted)(struct sparcaudio_driver *, int); int (*get_output_muted)(struct sparcaudio_driver *); + + /* Get and set output pause */ + int (*set_output_pause)(struct sparcaudio_driver *, int); + int (*get_output_pause)(struct sparcaudio_driver *); + + /* Get and set input pause */ + int (*set_input_pause)(struct sparcaudio_driver *, int); + int (*get_input_pause)(struct sparcaudio_driver *); + + /* Get and set output samples */ + int (*set_output_samples)(struct sparcaudio_driver *, int); + int (*get_output_samples)(struct sparcaudio_driver *); + + /* Get and set input samples */ + int (*set_input_samples)(struct sparcaudio_driver *, int); + int (*get_input_samples)(struct sparcaudio_driver *); + + /* Get and set output error */ + int (*set_output_error)(struct sparcaudio_driver *, int); + int (*get_output_error)(struct sparcaudio_driver *); + + /* Get and set input error */ + int (*set_input_error)(struct sparcaudio_driver *, int); + int (*get_input_error)(struct sparcaudio_driver *); + + /* Get supported encodings */ + int (*get_formats)(struct sparcaudio_driver *); }; -extern int register_sparcaudio_driver(struct sparcaudio_driver *); -extern int unregister_sparcaudio_driver(struct sparcaudio_driver *); +extern int register_sparcaudio_driver(struct sparcaudio_driver *, int); +extern int unregister_sparcaudio_driver(struct sparcaudio_driver *, int); extern void sparcaudio_output_done(struct sparcaudio_driver *, int); -extern void sparcaudio_input_done(struct sparcaudio_driver *); +extern void sparcaudio_input_done(struct sparcaudio_driver *, int); extern int sparcaudio_init(void); extern int amd7930_init(void); extern int cs4231_init(void); #endif +/* Mixer helper ioctls */ +#define right(a) (((a >> 8) & 0xff) % 101) +#define left(a) ((a & 0xff) % 101) + /* Macros to convert between mixer stereo volumes and gain (mono) */ -#define s_to_m(a) (((((a) >> 8) & 0x7f) + ((a) & 0x7f)) / 2) -#define m_to_s(a) (((a) << 8) + (a)) +#define s_to_m(a) ((((left(a) + right(a)) * 255) / 200) % 256) +#define m_to_s(a) ((a * 100 / 255) + ((a * 100 / 255) << 8)) /* convert mixer stereo volume to balance */ -#define s_to_b(a) (AUDIO_RIGHT_BALANCE * ((((a) >> 8) & 0xff) / (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2))) +#define s_to_b(a) (s_to_g(a) == 0) ? 32 : ((left(a) * AUDIO_RIGHT_BALANCE / (left(a) + right(a)))) /* convert mixer stereo volume to audio gain */ -#define s_to_g(a) (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2) +#define s_to_g(a) ((((right(a) + left(a)) * 255) / 200) % 256) /* convert gain a and balance b to mixer volume */ -#define b_to_s(a,b) ((a * (b / AUDIO_RIGHT_BALANCE) << 8) + (a * (1 - (b / AUDIO_RIGHT_BALANCE)))) +#define b_to_s(a,b) (((((b * a * 200) / (AUDIO_RIGHT_BALANCE * 255)) % 100) << 8) + ((((AUDIO_RIGHT_BALANCE - b) * a * 200) / (AUDIO_RIGHT_BALANCE * 255)) % 100)) + +/* Device minor numbers */ #define SPARCAUDIO_MIXER_MINOR 0 -#define SPARCAUDIO_DSP16_MINOR 1 +/* No sequencer (1) */ +/* No midi (2) */ #define SPARCAUDIO_DSP_MINOR 3 #define SPARCAUDIO_AUDIO_MINOR 4 -#define SPARCAUDIO_AUDIOCTL_MINOR 5 +#define SPARCAUDIO_DSP16_MINOR 5 #define SPARCAUDIO_STATUS_MINOR 6 +#define SPARCAUDIO_AUDIOCTL_MINOR 7 +/* No sequencer l2 (8) */ +/* No sound processor (9) */ + +/* allocate 2^SPARCAUDIO_DEVICE_SHIFT minors per audio device */ +#define SPARCAUDIO_DEVICE_SHIFT 4 + +/* With the coming of dummy devices this should perhaps be as high as 5? */ +#define SPARCAUDIO_MAX_DEVICES 3 + +/* Streams crap for realaudio */ + +typedef +struct strevent { + struct strevent *se_next; /* next event for this stream or NULL*/ + struct strevent *se_prev; /* previous event for this stream or last + * event if this is the first one*/ + pid_t se_pid; /* process to be signaled */ + short se_evs; /* events wanted */ +} strevent_t; + +typedef +struct stdata +{ + struct stdata *sd_next ; /* all stdatas are linked together */ + struct stdata *sd_prev ; + struct strevent *sd_siglist; /* processes to be sent SIGPOLL */ + int sd_sigflags; /* logical OR of all siglist events */ +} stdata_t; + +#define I_NREAD _IOR('S',01, int) +#define I_NREAD_SOLARIS (('S'<<8)|1) + +#define I_FLUSH _IO('S',05) +#define I_FLUSH_SOLARIS (('S'<<8)|5) +#define FLUSHR 1 /* flush read queue */ +#define FLUSHW 2 /* flush write queue */ +#define FLUSHRW 3 /* flush both queues */ + +#define I_SETSIG _IO('S',011) +#define I_SETSIG_SOLARIS (('S'<<8)|11) +#define S_INPUT 0x01 +#define S_HIPRI 0x02 +#define S_OUTPUT 0x04 +#define S_MSG 0x08 +#define S_ERROR 0x0010 +#define S_HANGUP 0x0020 +#define S_RDNORM 0x0040 +#define S_WRNORM S_OUTPUT +#define S_RDBAND 0x0080 +#define S_WRBAND 0x0100 +#define S_BANDURG 0x0200 +#define S_ALL 0x03FF + +#define I_GETSIG _IOR('S',012,int) +#define I_GETSIG_SOLARIS (('S'<<8)|12) #endif diff --git a/include/asm-sparc/bitops.h b/include/asm-sparc/bitops.h index 7c3e4d0da..fbaa0f005 100644 --- a/include/asm-sparc/bitops.h +++ b/include/asm-sparc/bitops.h @@ -1,4 +1,4 @@ -/* $Id: bitops.h,v 1.51 1998/07/26 03:05:37 davem Exp $ +/* $Id: bitops.h,v 1.54 1998/09/21 05:07:34 jj Exp $ * bitops.h: Bit string operations on the Sparc. * * Copyright 1995 David S. Miller (davem@caip.rutgers.edu) @@ -108,7 +108,7 @@ extern __inline__ unsigned long test_and_set_bit(unsigned long nr, __SMPVOL void : "0" (mask), "r" (ADDR) : "g3", "g4", "g5", "g7", "cc"); - return mask; + return mask != 0; } extern __inline__ void set_bit(unsigned long nr, __SMPVOL void *addr) @@ -131,7 +131,7 @@ extern __inline__ unsigned long test_and_clear_bit(unsigned long nr, __SMPVOL vo : "0" (mask), "r" (ADDR) : "g3", "g4", "g5", "g7", "cc"); - return mask; + return mask != 0; } extern __inline__ void clear_bit(unsigned long nr, __SMPVOL void *addr) @@ -154,7 +154,7 @@ extern __inline__ unsigned long test_and_change_bit(unsigned long nr, __SMPVOL v : "0" (mask), "r" (ADDR) : "g3", "g4", "g5", "g7", "cc"); - return mask; + return mask != 0; } extern __inline__ void change_bit(unsigned long nr, __SMPVOL void *addr) diff --git a/include/asm-sparc/dma.h b/include/asm-sparc/dma.h index cb45374d6..7c502a17a 100644 --- a/include/asm-sparc/dma.h +++ b/include/asm-sparc/dma.h @@ -1,4 +1,4 @@ -/* $Id: dma.h,v 1.26 1998/04/13 07:27:05 davem Exp $ +/* $Id: dma.h,v 1.28 1998/10/26 20:03:09 davem Exp $ * include/asm-sparc/dma.h * * Copyright 1995 (C) David S. Miller (davem@caip.rutgers.edu) @@ -15,6 +15,22 @@ #include <asm/sbus.h> #include <asm/delay.h> #include <asm/oplib.h> +#include <asm/system.h> +#include <asm/spinlock.h> + +extern spinlock_t dma_spin_lock; + +static __inline__ unsigned long claim_dma_lock(void) +{ + unsigned long flags; + spin_lock_irqsave(&dma_spin_lock, flags); + return flags; +} + +static __inline__ void release_dma_lock(unsigned long flags) +{ + spin_unlock_irqrestore(&dma_spin_lock, flags); +} /* These are irrelevant for Sparc DMA, but we leave it in so that * things can compile. diff --git a/include/asm-sparc/ebus.h b/include/asm-sparc/ebus.h new file mode 100644 index 000000000..2c8aa9fc6 --- /dev/null +++ b/include/asm-sparc/ebus.h @@ -0,0 +1,101 @@ +/* $Id: ebus.h,v 1.1 1998/09/22 05:54:41 jj Exp $ + * ebus.h: PCI to Ebus pseudo driver software state. + * + * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be) + * + * Adopted for sparc by V. Roganov and G. Raiko. + */ + +#ifndef __SPARC_EBUS_H +#define __SPARC_EBUS_H + +#include <asm/oplib.h> + +struct linux_ebus_child { + struct linux_ebus_child *next; + struct linux_ebus_device *parent; + struct linux_ebus *bus; + int prom_node; + char prom_name[64]; + unsigned long base_address[PROMREG_MAX]; + int num_addrs; + unsigned int irqs[PROMINTR_MAX]; + int num_irqs; +}; + +struct linux_ebus_device { + struct linux_ebus_device *next; + struct linux_ebus_child *children; + struct linux_ebus *bus; + int prom_node; + char prom_name[64]; + unsigned long base_address[PROMREG_MAX]; + int num_addrs; + unsigned int irqs[PROMINTR_MAX]; + int num_irqs; +}; + +struct linux_ebus { + struct linux_ebus *next; + struct linux_ebus_device *devices; + struct linux_pbm_info *parent; + struct pci_dev *self; + int prom_node; + char prom_name[64]; + struct linux_prom_ebus_ranges ebus_ranges[PROMREG_MAX]; + int num_ebus_ranges; +}; + +struct linux_ebus_dma { + unsigned int dcsr; + unsigned int dacr; + unsigned int dbcr; +}; + +#define EBUS_DCSR_INT_PEND 0x00000001 +#define EBUS_DCSR_ERR_PEND 0x00000002 +#define EBUS_DCSR_DRAIN 0x00000004 +#define EBUS_DCSR_INT_EN 0x00000010 +#define EBUS_DCSR_RESET 0x00000080 +#define EBUS_DCSR_WRITE 0x00000100 +#define EBUS_DCSR_EN_DMA 0x00000200 +#define EBUS_DCSR_CYC_PEND 0x00000400 +#define EBUS_DCSR_DIAG_RD_DONE 0x00000800 +#define EBUS_DCSR_DIAG_WR_DONE 0x00001000 +#define EBUS_DCSR_EN_CNT 0x00002000 +#define EBUS_DCSR_TC 0x00004000 +#define EBUS_DCSR_DIS_CSR_DRN 0x00010000 +#define EBUS_DCSR_BURST_SZ_MASK 0x000c0000 +#define EBUS_DCSR_BURST_SZ_1 0x00080000 +#define EBUS_DCSR_BURST_SZ_4 0x00000000 +#define EBUS_DCSR_BURST_SZ_8 0x00040000 +#define EBUS_DCSR_BURST_SZ_16 0x000c0000 +#define EBUS_DCSR_DIAG_EN 0x00100000 +#define EBUS_DCSR_DIS_ERR_PEND 0x00400000 +#define EBUS_DCSR_TCI_DIS 0x00800000 +#define EBUS_DCSR_EN_NEXT 0x01000000 +#define EBUS_DCSR_DMA_ON 0x02000000 +#define EBUS_DCSR_A_LOADED 0x04000000 +#define EBUS_DCSR_NA_LOADED 0x08000000 +#define EBUS_DCSR_DEV_ID_MASK 0xf0000000 + +extern struct linux_ebus *ebus_chain; + +extern void ebus_init(void); + +#define for_each_ebus(bus) \ + for((bus) = ebus_chain; (bus); (bus) = (bus)->next) + +#define for_each_ebusdev(dev, bus) \ + for((dev) = (bus)->devices; (dev); (dev) = (dev)->next) + +#define for_each_edevchild(dev, child) \ + for((child) = (dev)->children; (child); (child) = (child)->next) + +/* P3: Actually unused in sparc */ +#define for_all_ebusdev(dev, bus) \ + for ((bus) = ebus_chain, ((dev) = (bus) ? (bus)->devices : 0); \ + (bus); ((dev) = (dev)->next ? (dev)->next : \ + ((bus) = (bus)->next, (bus) ? (bus)->devices : 0))) + +#endif /* !(__SPARC_EBUS_H) */ diff --git a/include/asm-sparc/elf.h b/include/asm-sparc/elf.h index fb680d30f..acc8f418e 100644 --- a/include/asm-sparc/elf.h +++ b/include/asm-sparc/elf.h @@ -1,4 +1,4 @@ -/* $Id: elf.h,v 1.17 1998/05/11 08:40:10 davem Exp $ */ +/* $Id: elf.h,v 1.20 1998/09/14 09:11:10 davem Exp $ */ #ifndef __ASMSPARC_ELF_H #define __ASMSPARC_ELF_H @@ -10,12 +10,51 @@ #include <asm/ptrace.h> #include <asm/mbus.h> +/* For the most part we present code dumps in the format + * Solaris does. + */ typedef unsigned long elf_greg_t; - -#define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) +#define ELF_NGREG 38 typedef elf_greg_t elf_gregset_t[ELF_NGREG]; -typedef unsigned long elf_fpregset_t; +/* Format is: + * G0 --> G7 + * O0 --> O7 + * L0 --> L7 + * I0 --> I7 + * PSR, PC, nPC, Y, WIM, TBR + */ +#define ELF_CORE_COPY_REGS(__elf_regs, __pt_regs) \ +do { unsigned long *dest = &(__elf_regs[0]); \ + struct pt_regs *src = (__pt_regs); \ + unsigned long *sp; \ + memcpy(&dest[0], &src->u_regs[0], \ + sizeof(unsigned long) * 16); \ + /* Don't try this at home kids... */ \ + set_fs(USER_DS); \ + sp = (unsigned long *) src->u_regs[14]; \ + copy_from_user(&dest[16], sp, \ + sizeof(unsigned long) * 16); \ + set_fs(KERNEL_DS); \ + dest[32] = src->psr; \ + dest[33] = src->pc; \ + dest[34] = src->npc; \ + dest[35] = src->y; \ + dest[36] = dest[37] = 0; /* XXX */ \ +} while(0); + +typedef struct { + union { + unsigned long pr_regs[32]; + double pr_dregs[16]; + } pr_fr; + unsigned long __unused; + unsigned long pr_fsr; + unsigned char pr_qcnt; + unsigned char pr_q_entrysize; + unsigned char pr_en; + unsigned int pr_q[64]; +} elf_fpregset_t; /* * This is used to ensure we don't load something for the wrong architecture. @@ -42,7 +81,7 @@ typedef unsigned long elf_fpregset_t; the loader. We need to make sure that it is out of the way of the program that it will "exec", and that there is sufficient room for the brk. */ -#define ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x1000000) +#define ELF_ET_DYN_BASE (0x08000000) /* This yields a mask that user programs can use to figure out what instruction set this cpu supports. This can NOT be done in userspace diff --git a/include/asm-sparc/fbio.h b/include/asm-sparc/fbio.h index 443e3b184..41329f311 100644 --- a/include/asm-sparc/fbio.h +++ b/include/asm-sparc/fbio.h @@ -35,6 +35,7 @@ /* Does not seem to be listed in the Sun file either */ #define FBTYPE_CREATOR 22 +#define FBTYPE_PCI_IGA1682 23 /* fbio ioctls */ /* Returned by FBIOGTYPE */ diff --git a/include/asm-sparc/fcntl.h b/include/asm-sparc/fcntl.h index 775a800d4..84367de40 100644 --- a/include/asm-sparc/fcntl.h +++ b/include/asm-sparc/fcntl.h @@ -1,4 +1,4 @@ -/* $Id: fcntl.h,v 1.9 1997/02/04 07:29:20 davem Exp $ */ +/* $Id: fcntl.h,v 1.11 1998/10/26 20:03:10 davem Exp $ */ #ifndef _SPARC_FCNTL_H #define _SPARC_FCNTL_H @@ -17,6 +17,8 @@ #define O_NONBLOCK 0x4000 #define O_NDELAY (0x0004 | O_NONBLOCK) #define O_NOCTTY 0x8000 /* not fcntl */ +#define O_DIRECTORY 0x10000 /* must be a directory */ +#define O_NOFOLLOW 0x20000 /* don't follow links */ #define F_DUPFD 0 /* dup */ #define F_GETFD 1 /* get f_flags */ diff --git a/include/asm-sparc/floppy.h b/include/asm-sparc/floppy.h index 2c57f09d3..a653498c9 100644 --- a/include/asm-sparc/floppy.h +++ b/include/asm-sparc/floppy.h @@ -75,10 +75,6 @@ static struct sun_floppy_ops sun_fdops; #define FLOPPY_MOTOR_MASK 0x10 -/* It's all the same... */ -#define virt_to_bus(x) (x) -#define bus_to_virt(x) (x) - /* XXX This isn't really correct. XXX */ #define get_dma_residue(x) (0) @@ -322,6 +318,8 @@ static int sun_floppy_init(void) "floppy", fd_regs[0].which_io, 0x0); + release_region((long)sun_fdc & PAGE_MASK, + (((long)sun_fdc & ~PAGE_MASK) + fd_regs[0].reg_size + PAGE_SIZE - 1) & PAGE_MASK); /* Last minute sanity check... */ if(sun_fdc->status_82072 == 0xff) { sun_fdc = NULL; diff --git a/include/asm-sparc/hardirq.h b/include/asm-sparc/hardirq.h index 8b0f4f9e2..359ad6e4d 100644 --- a/include/asm-sparc/hardirq.h +++ b/include/asm-sparc/hardirq.h @@ -1,6 +1,7 @@ /* hardirq.h: 32-bit Sparc hard IRQ support. * * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) + * Copyright (C) 1998 Anton Blanchard (anton@progsoc.uts.edu.au) */ #ifndef __SPARC_HARDIRQ_H @@ -9,19 +10,25 @@ #include <linux/tasks.h> extern unsigned int local_irq_count[NR_CPUS]; -#define in_interrupt() (local_irq_count[smp_processor_id()] != 0) + +/* + * Are we in an interrupt context? Either doing bottom half + * or hardware interrupt processing? + */ +#define in_interrupt() ({ int __cpu = smp_processor_id(); \ + (local_irq_count[__cpu] + local_bh_count[__cpu] != 0); }) #ifndef __SMP__ #define hardirq_trylock(cpu) (local_irq_count[cpu] == 0) -#define hardirq_endlock(cpu) do { } while(0) +#define hardirq_endlock(cpu) do { } while (0) #define hardirq_enter(cpu) (local_irq_count[cpu]++) #define hardirq_exit(cpu) (local_irq_count[cpu]--) -#define synchronize_irq() do { } while(0) +#define synchronize_irq() barrier() -#else /* __SMP__ */ +#else #include <asm/atomic.h> #include <asm/spinlock.h> @@ -32,37 +39,33 @@ extern unsigned char global_irq_holder; extern spinlock_t global_irq_lock; extern atomic_t global_irq_count; -#define release_irqlock(cpu) \ -do { if(global_irq_holder == (unsigned char) cpu) { \ - global_irq_holder = NO_PROC_ID; \ - spin_unlock(&global_irq_lock); \ - } \ -} while(0) - -/* Ordering of the counter bumps is _deadly_ important. */ -#define hardirq_enter(cpu) \ - do { ++local_irq_count[cpu]; atomic_inc(&global_irq_count); } while(0) - -#define hardirq_exit(cpu) \ - do { atomic_dec(&global_irq_count); --local_irq_count[cpu]; } while(0) - -#define hardirq_trylock(cpu) \ -({ unsigned long flags; int ret = 1; \ - __save_flags(flags); \ - __cli(); \ - if(atomic_add_return(1, &global_irq_count) != 1 || \ - *(((unsigned char *)(&global_irq_lock)))) { \ - atomic_dec(&global_irq_count); \ - __restore_flags(flags); \ - ret = 0; \ - } else { \ - ++local_irq_count[cpu]; \ - __sti(); \ - } \ - ret; \ -}) - -#define hardirq_endlock(cpu) do { __cli(); hardirq_exit(cpu); __sti(); } while(0) +static inline void release_irqlock(int cpu) +{ + /* if we didn't own the irq lock, just ignore.. */ + if (global_irq_holder == (unsigned char) cpu) { + global_irq_holder = NO_PROC_ID; + spin_unlock(&global_irq_lock); + } +} + +static inline void hardirq_enter(int cpu) +{ + ++local_irq_count[cpu]; + atomic_inc(&global_irq_count); +} + +static inline void hardirq_exit(int cpu) +{ + atomic_dec(&global_irq_count); + --local_irq_count[cpu]; +} + +static inline int hardirq_trylock(int cpu) +{ + return !atomic_read(&global_irq_count) && !*(((volatile unsigned char *)(&global_irq_lock))); +} + +#define hardirq_endlock(cpu) do { } while (0) extern void synchronize_irq(void); diff --git a/include/asm-sparc/io-unit.h b/include/asm-sparc/io-unit.h index d76219df4..aac5f374c 100644 --- a/include/asm-sparc/io-unit.h +++ b/include/asm-sparc/io-unit.h @@ -7,6 +7,7 @@ #include <asm/page.h> #include <asm/spinlock.h> +#include <asm/pgtable.h> /* The io-unit handles all virtual to physical address translations * that occur between the SBUS and physical memory. Access by @@ -50,4 +51,8 @@ struct iounit_struct { #define IOUNIT_BMAPM_START IOUNIT_BMAP2_END #define IOUNIT_BMAPM_END ((IOUNIT_DMA_SIZE - IOUNIT_DVMA_SIZE) >> PAGE_SHIFT) +extern __u32 iounit_map_dma_init(struct linux_sbus *, int); +#define iounit_map_dma_finish(sbus, addr, len) mmu_release_scsi_one(addr, len, sbus) +extern __u32 iounit_map_dma_page(__u32, void *, struct linux_sbus *); + #endif /* !(_SPARC_IO_UNIT_H) */ diff --git a/include/asm-sparc/io.h b/include/asm-sparc/io.h index 93e5fde77..a26453b2f 100644 --- a/include/asm-sparc/io.h +++ b/include/asm-sparc/io.h @@ -1,4 +1,4 @@ -/* $Id: io.h,v 1.15 1998/01/30 10:59:51 jj Exp $ */ +/* $Id: io.h,v 1.18 1998/09/21 05:07:17 jj Exp $ */ #ifndef __SPARC_IO_H #define __SPARC_IO_H @@ -15,77 +15,84 @@ * space only works on sun4's */ -extern __inline__ unsigned long inb_local(unsigned long addr) +#define virt_to_bus virt_to_phys + +extern __inline__ unsigned flip_dword (unsigned d) { + return ((d&0xff)<<24) | (((d>>8)&0xff)<<16) | (((d>>16)&0xff)<<8)| ((d>>24)&0xff); +} + +extern __inline__ unsigned short flip_word (unsigned short d) { + return ((d&0xff) << 8) | ((d>>8)&0xff); +} + +extern __inline__ unsigned long readb(unsigned long addr) { - return 0; + return *(volatile unsigned char*)addr; } -extern __inline__ void outb_local(unsigned char b, unsigned long addr) +extern __inline__ unsigned long readw(unsigned long addr) { - return; + return flip_word(*(volatile unsigned short*)addr); } -extern __inline__ unsigned long inb(unsigned long addr) +extern __inline__ unsigned long readl(unsigned long addr) { - return 0; + return flip_dword(*(volatile unsigned long*)addr); } -extern __inline__ unsigned long inw(unsigned long addr) +extern __inline__ void writeb(unsigned short b, unsigned long addr) { - return 0; + *(volatile unsigned char*)addr = b; } -extern __inline__ unsigned long inl(unsigned long addr) +extern __inline__ void writew(unsigned short b, unsigned long addr) { - return 0; + *(volatile unsigned short*)addr = flip_word(b); } -extern __inline__ void outb(unsigned char b, unsigned long addr) +extern __inline__ void writel(unsigned int b, unsigned long addr) { - return; + *(volatile unsigned long*)addr = flip_dword(b); } -extern __inline__ void outw(unsigned short b, unsigned long addr) +extern __inline__ unsigned long inb_local(unsigned long addr) { - return; + return readb(addr); } -extern __inline__ void outl(unsigned int b, unsigned long addr) +extern __inline__ void outb_local(unsigned char b, unsigned long addr) { - return; + return writeb(b,addr); } -/* - * Memory functions - */ -extern __inline__ unsigned long readb(unsigned long addr) +extern __inline__ unsigned long inb(unsigned long addr) { - return 0; + return readb(addr); } -extern __inline__ unsigned long readw(unsigned long addr) +extern __inline__ unsigned long inw(unsigned long addr) { - return 0; + return readw(addr); } -extern __inline__ unsigned long readl(unsigned long addr) +extern __inline__ unsigned long inl(unsigned long addr) { - return 0; + return readl(addr); } -extern __inline__ void writeb(unsigned short b, unsigned long addr) +extern __inline__ void outb(unsigned char b, unsigned long addr) { - return; + return writeb(b,addr); } -extern __inline__ void writew(unsigned short b, unsigned long addr) +extern __inline__ void outw(unsigned short b, unsigned long addr) { - return; + return writew(b,addr); } -extern __inline__ void writel(unsigned int b, unsigned long addr) +extern __inline__ void outl(unsigned int b, unsigned long addr) { - return; + return writel(b,addr); } #define inb_p inb diff --git a/include/asm-sparc/ioctls.h b/include/asm-sparc/ioctls.h index 5cd982c28..080be851c 100644 --- a/include/asm-sparc/ioctls.h +++ b/include/asm-sparc/ioctls.h @@ -108,6 +108,8 @@ #define TIOCSERGETLSR 0x5459 /* Get line status register */ #define TIOCSERGETMULTI 0x545A /* Get multiport config */ #define TIOCSERSETMULTI 0x545B /* Set multiport config */ +#define TIOCMIWAIT 0x545C /* Wait input */ +#define TIOCGICOUNT 0x545D /* Read serial port inline interrupt counts */ /* Kernel definitions */ #ifdef __KERNEL__ diff --git a/include/asm-sparc/keyboard.h b/include/asm-sparc/keyboard.h new file mode 100644 index 000000000..9dd63c3cb --- /dev/null +++ b/include/asm-sparc/keyboard.h @@ -0,0 +1,52 @@ +/* $Id: keyboard.h,v 1.1 1998/09/22 05:54:42 jj Exp $ + * linux/include/asm-sparc/keyboard.h + * + * sparc64 Created Aug 29 1997 by Eddie C. Dost (ecd@skynet.be) + */ + +/* + * This file contains the Ultra/PCI architecture specific keyboard definitions + */ + +#ifndef _SPARC_KEYBOARD_H +#define _SPARC_KEYBOARD_H 1 + +#ifdef __KERNEL__ + +#define KEYBOARD_IRQ 13 +#define DISABLE_KBD_DURING_INTERRUPTS 0 + +extern int pcikbd_setkeycode(unsigned int scancode, unsigned int keycode); +extern int pcikbd_getkeycode(unsigned int scancode); +extern int pcikbd_pretranslate(unsigned char scancode, char raw_mode); +extern int pcikbd_translate(unsigned char scancode, unsigned char *keycode, + char raw_mode); +extern char pcikbd_unexpected_up(unsigned char keycode); +extern void pcikbd_leds(unsigned char leds); +extern void pcikbd_init_hw(void); +extern unsigned char pcikbd_sysrq_xlate[128]; + +#define kbd_setkeycode pcikbd_setkeycode +#define kbd_getkeycode pcikbd_getkeycode +#define kbd_pretranslate pcikbd_pretranslate +#define kbd_translate pcikbd_translate +#define kbd_unexpected_up pcikbd_unexpected_up +#define kbd_leds pcikbd_leds +#define kbd_init_hw pcikbd_init_hw +#define kbd_sysrq_xlate pcikbd_sysrq_xlate +#define kbd_init pcikbd_init + +#define compute_shiftstate pci_compute_shiftstate +#define keyboard_wait_for_keypress pci_wait_for_keypress +#define getkeycode pci_getkeycode +#define setkeycode pci_setkeycode +#define getledstate pci_getledstate +#define setledstate pci_setledstate +#define register_leds pci_register_leds + +/* #define SYSRQ_KEY 0x54 */ /* sparc64 */ +#define SYSRQ_KEY 0x63 /* sparc */ + +#endif /* __KERNEL__ */ + +#endif /* !(_SPARC_KEYBOARD_H) */ diff --git a/include/asm-sparc/linux_logo.h b/include/asm-sparc/linux_logo.h index 2d400d9fd..456c97350 100644 --- a/include/asm-sparc/linux_logo.h +++ b/include/asm-sparc/linux_logo.h @@ -1,4 +1,4 @@ -/* $Id: linux_logo.h,v 1.5 1998/07/30 16:30:40 jj Exp $ +/* $Id: linux_logo.h,v 1.6 1998/08/20 04:44:39 ecd Exp $ * include/asm-sparc/linux_logo.h: This is a linux logo * to be displayed on boot. * @@ -1026,10 +1026,10 @@ unsigned char linux_logo_bw[] __initdata = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; -unsigned char linux_logo16_red[0]; -unsigned char linux_logo16_green[0]; -unsigned char linux_logo16_blue[0]; -unsigned char linux_logo16[0]; +unsigned char linux_logo16_red[1]; +unsigned char linux_logo16_green[1]; +unsigned char linux_logo16_blue[1]; +unsigned char linux_logo16[1]; #else diff --git a/include/asm-sparc/mostek.h b/include/asm-sparc/mostek.h index 407869348..e83d44d3c 100644 --- a/include/asm-sparc/mostek.h +++ b/include/asm-sparc/mostek.h @@ -1,4 +1,4 @@ -/* $Id: mostek.h,v 1.9 1998/07/28 16:53:25 jj Exp $ +/* $Id: mostek.h,v 1.10 1998/08/18 15:03:11 davem Exp $ * mostek.h: Describes the various Mostek time of day clock registers. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) diff --git a/include/asm-sparc/namei.h b/include/asm-sparc/namei.h index 401e80820..29f672eb5 100644 --- a/include/asm-sparc/namei.h +++ b/include/asm-sparc/namei.h @@ -1,4 +1,4 @@ -/* $Id: namei.h,v 1.11 1998/01/15 12:58:24 jj Exp $ +/* $Id: namei.h,v 1.12 1998/10/28 08:13:42 jj Exp $ * linux/include/asm-sparc/namei.h * * Routines to handle famous /usr/gnemul/s*. @@ -12,7 +12,7 @@ #define SPARC_SOL_EMUL "usr/gnemul/solaris/" static inline struct dentry * -__sparc_lookup_dentry(const char *name, int follow_link) +__sparc_lookup_dentry(const char *name, int lookup_flags) { struct dentry *base; char *emul; @@ -29,18 +29,20 @@ __sparc_lookup_dentry(const char *name, int follow_link) return NULL; } - base = lookup_dentry (emul, dget (current->fs->root), 1); + base = lookup_dentry (emul, + dget (current->fs->root), + (LOOKUP_FOLLOW | LOOKUP_DIRECTORY | LOOKUP_SLASHOK)); if (IS_ERR (base)) return NULL; - base = lookup_dentry (name, base, follow_link); + base = lookup_dentry (name, base, lookup_flags); if (IS_ERR (base)) return NULL; if (!base->d_inode) { struct dentry *fromroot; - fromroot = lookup_dentry (name, dget (current->fs->root), follow_link); + fromroot = lookup_dentry (name, dget (current->fs->root), lookup_flags); if (IS_ERR (fromroot)) return base; @@ -55,9 +57,9 @@ __sparc_lookup_dentry(const char *name, int follow_link) return base; } -#define __prefix_lookup_dentry(name, follow_link) \ +#define __prefix_lookup_dentry(name, lookup_flags) \ if (current->personality) { \ - dentry = __sparc_lookup_dentry (name, follow_link); \ + dentry = __sparc_lookup_dentry (name, lookup_flags); \ if (dentry) return dentry; \ } diff --git a/include/asm-sparc/openprom.h b/include/asm-sparc/openprom.h index 91f5ffb68..c88dc02a1 100644 --- a/include/asm-sparc/openprom.h +++ b/include/asm-sparc/openprom.h @@ -1,4 +1,4 @@ -/* $Id: openprom.h,v 1.20 1997/04/10 06:41:06 davem Exp $ */ +/* $Id: openprom.h,v 1.23 1998/09/21 05:07:26 jj Exp $ */ #ifndef __SPARC_OPENPROM_H #define __SPARC_OPENPROM_H @@ -205,6 +205,55 @@ struct linux_prom_ranges { unsigned int or_size; }; +/* Ranges and reg properties are a bit different for PCI. */ +struct linux_prom_pci_registers { + /* + * We don't know what information this field contain. + * We guess, PCI device function is in bits 15:8 + * So, ... + */ + unsigned int which_io; /* Let it be which_io */ + + unsigned int phys_hi; + unsigned int phys_lo; + + unsigned int size_hi; + unsigned int size_lo; +}; + +struct linux_prom_pci_ranges { + unsigned int child_phys_hi; /* Only certain bits are encoded here. */ + unsigned int child_phys_mid; + unsigned int child_phys_lo; + + unsigned int parent_phys_hi; + unsigned int parent_phys_lo; + + unsigned int size_hi; + unsigned int size_lo; +}; + +struct linux_prom_pci_assigned_addresses { + unsigned int which_io; + + unsigned int phys_hi; + unsigned int phys_lo; + + unsigned int size_hi; + unsigned int size_lo; +}; + +struct linux_prom_ebus_ranges { + unsigned int child_phys_hi; + unsigned int child_phys_lo; + + unsigned int parent_phys_hi; + unsigned int parent_phys_mid; + unsigned int parent_phys_lo; + + unsigned int size; +}; + #endif /* !(__ASSEMBLY__) */ #endif /* !(__SPARC_OPENPROM_H) */ diff --git a/include/asm-sparc/oplib.h b/include/asm-sparc/oplib.h index 2d1094b07..396f9ef07 100644 --- a/include/asm-sparc/oplib.h +++ b/include/asm-sparc/oplib.h @@ -1,4 +1,4 @@ -/* $Id: oplib.h,v 1.19 1998/01/30 10:59:53 jj Exp $ +/* $Id: oplib.h,v 1.20 1998/09/17 11:05:25 jj Exp $ * oplib.h: Describes the interface and available routines in the * Linux Prom library. * @@ -280,6 +280,9 @@ extern char *prom_firstprop(int node, char *buffer); */ extern char *prom_nextprop(int node, char *prev_property, char *buffer); +/* Returns phandle of the path specified */ +extern int prom_finddevice(char *name); + /* Returns 1 if the specified node has given property. */ extern int prom_node_has_property(int node, char *property); diff --git a/include/asm-sparc/pbm.h b/include/asm-sparc/pbm.h new file mode 100644 index 000000000..a8ef7cc72 --- /dev/null +++ b/include/asm-sparc/pbm.h @@ -0,0 +1,56 @@ +/* $Id: pbm.h,v 1.1 1998/09/22 05:54:44 jj Exp $ + * pbm.h: PCI bus module pseudo driver software state + * Adopted from sparc64 by V. Roganov and G. Raiko + * + * Original header: + * pbm.h: U2P PCI bus module pseudo driver software state. + * + * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) + */ + +#ifndef __SPARC_PBM_H +#define __SPARC_PBM_H + +#include <linux/pci.h> +#include <asm/oplib.h> + +struct linux_pbm_info; + +/* This is what we use to determine what the PROM has assigned so + * far, so that we can perform assignments for addresses which + * were not taken care of by OBP. See psycho.c for details. + * Per-PBM these are ordered by start address. + */ +struct pci_vma { + struct pci_vma *next; + struct linux_pbm_info *pbm; + unsigned int start; + unsigned int end; + unsigned int offset; + unsigned int _pad; +}; + +struct linux_pbm_info { + struct pci_vma *IO_assignments; + struct pci_vma *MEM_assignments; + int prom_node; + char prom_name[64]; + struct linux_prom_pci_ranges pbm_ranges[PROMREG_MAX]; + int num_pbm_ranges; + + /* Now things for the actual PCI bus probes. */ + unsigned int pci_first_busno; + unsigned int pci_last_busno; + struct pci_bus pci_bus; +}; + +/* PCI devices which are not bridges have this placed in their pci_dev + * sysdata member. This makes OBP aware PCI device drivers easier to + * code. + */ +struct pcidev_cookie { + struct linux_pbm_info *pbm; + int prom_node; +}; + +#endif /* !(__SPARC_PBM_H) */ diff --git a/include/asm-sparc/pcic.h b/include/asm-sparc/pcic.h new file mode 100644 index 000000000..c0d4dbbf8 --- /dev/null +++ b/include/asm-sparc/pcic.h @@ -0,0 +1,106 @@ +/* $Id: pcic.h,v 1.1 1998/09/22 05:54:39 jj Exp $ + * pcic.h: JavaEngine 1 specific PCI definitions. + * + * Copyright (C) 1998 V. Roganov and G. Raiko + */ + +#ifndef __SPARC_PCIC_H +#define __SPARC_PCIC_H + +#include <linux/types.h> +#include <linux/smp.h> +#include <linux/smp_lock.h> +#include <linux/pci.h> +#include <asm/pbm.h> + +struct linux_pcic { + unsigned long pcic_regs; + unsigned long pcic_io; + unsigned long pcic_io_phys; + unsigned long pcic_mapped_io; + unsigned long pcic_config_space_addr; + unsigned long pcic_config_space_data; + struct linux_pbm_info pbm; +}; + +extern unsigned long pcic_alloc_io(unsigned long* addr); +extern void pcic_probe(void); +extern void sun4m_pci_init_IRQ(void); + +/* Size of PCI Space */ +#define PCI_SPACE_SIZE 0x1000000 /* 16 MB */ + +/* PCIC Register Set. */ +#define PCI_DIAGNOSTIC_0 0x40 /* 32 bits */ +#define PCI_SIZE_0 0x44 /* 32 bits */ +#define PCI_SIZE_1 0x48 /* 32 bits */ +#define PCI_SIZE_2 0x4c /* 32 bits */ +#define PCI_SIZE_3 0x50 /* 32 bits */ +#define PCI_SIZE_4 0x54 /* 32 bits */ +#define PCI_SIZE_5 0x58 /* 32 bits */ +#define PCI_PIO_CONTROL 0x60 /* 8 bits */ +#define PCI_DVMA_CONTROL 0x62 /* 8 bits */ +#define PCI_DVMA_CONTROL_INACTIVITY_REQ (1<<0) +#define PCI_DVMA_CONTROL_IOTLB_ENABLE (1<<0) +#define PCI_DVMA_CONTROL_IOTLB_DISABLE 0 +#define PCI_DVMA_CONTROL_INACTIVITY_ACK (1<<4) +#define PCI_INTERRUPT_CONTROL 0x63 /* 8 bits */ +#define PCI_CPU_INTERRUPT_PENDING 0x64 /* 32 bits */ +#define PCI_DIAGNOSTIC_1 0x68 /* 16 bits */ +#define PCI_SOFTWARE_INT_CLEAR 0x6a /* 16 bits */ +#define PCI_SOFTWARE_INT_SET 0x6e /* 16 bits */ +#define PCI_SYS_INT_PENDING 0x70 /* 32 bits */ +#define PCI_SYS_INT_TARGET_MASK 0x74 /* 32 bits */ +#define PCI_SYS_INT_TARGET_MASK_CLEAR 0x78 /* 32 bits */ +#define PCI_SYS_INT_TARGET_MASK_SET 0x7c /* 32 bits */ +#define PCI_SYS_INT_PENDING_CLEAR 0x83 /* 8 bits */ +#define PCI_IOTLB_CONTROL 0x84 /* 8 bits */ +#define PCI_INT_SELECT_LO 0x88 /* 16 bits */ +#define PCI_ARBITRATION_SELECT 0x8a /* 16 bits */ +#define PCI_INT_SELECT_HI 0x8c /* 16 bits */ +#define PCI_HW_INT_OUTPUT 0x8e /* 16 bits */ +#define PCI_IOTLB_RAM_INPUT 0x90 /* 32 bits */ +#define PCI_IOTLB_CAM_INPUT 0x94 /* 32 bits */ +#define PCI_IOTLB_RAM_OUTPUT 0x98 /* 32 bits */ +#define PCI_IOTLB_CAM_OUTPUT 0x9c /* 32 bits */ +#define PCI_SMBAR0 0xa0 /* 8 bits */ +#define PCI_MSIZE0 0xa1 /* 8 bits */ +#define PCI_PMBAR0 0xa2 /* 8 bits */ +#define PCI_SMBAR1 0xa4 /* 8 bits */ +#define PCI_MSIZE1 0xa5 /* 8 bits */ +#define PCI_PMBAR1 0xa6 /* 8 bits */ +#define PCI_SIBAR 0xa8 /* 8 bits */ +#define PCI_SIBAR_ADDRESS_MASK 0xf +#define PCI_ISIZE 0xa9 /* 8 bits */ +#define PCI_ISIZE_16M 0xf +#define PCI_ISIZE_32M 0xe +#define PCI_ISIZE_64M 0xc +#define PCI_ISIZE_128M 0x8 +#define PCI_ISIZE_256M 0x0 +#define PCI_PIBAR 0xaa /* 8 bits */ +#define PCI_CPU_COUNTER_LIMIT_HI 0xac /* 32 bits */ +#define PCI_CPU_COUNTER_LIMIT_LO 0xb0 /* 32 bits */ +#define PCI_CPU_COUNTER_LIMIT 0xb4 /* 32 bits */ +#define PCI_SYS_LIMIT 0xb8 /* 32 bits */ +#define PCI_SYS_COUNTER 0xbc /* 32 bits */ +#define PCI_SYS_COUNTER_OVERFLOW (1<<31) /* Limit reached */ +#define PCI_SYS_LIMIT_PSEUDO 0xc0 /* 32 bits */ +#define PCI_USER_TIMER_CONTROL 0xc4 /* 8 bits */ +#define PCI_USER_TIMER_CONFIG 0xc5 /* 8 bits */ +#define PCI_COUNTER_IRQ 0xc6 /* 8 bits */ +#define PCI_COUNTER_IRQ_SET(sys_irq, cpu_irq) ((((sys_irq) & 0xf) << 4) | \ + ((cpu_irq) & 0xf)) +#define PCI_COUNTER_IRQ_SYS(v) (((v) >> 4) & 0xf) +#define PCI_COUNTER_IRQ_CPU(v) ((v) & 0xf) +#define PCI_PIO_ERROR_COMMAND 0xc7 /* 8 bits */ +#define PCI_PIO_ERROR_ADDRESS 0xc8 /* 32 bits */ +#define PCI_IOTLB_ERROR_ADDRESS 0xcc /* 32 bits */ +#define PCI_SYS_STATUS 0xd0 /* 8 bits */ +#define PCI_SYS_STATUS_RESET_ENABLE (1<<0) +#define PCI_SYS_STATUS_RESET (1<<1) +#define PCI_SYS_STATUS_WATCHDOG_RESET (1<<4) +#define PCI_SYS_STATUS_PCI_RESET (1<<5) +#define PCI_SYS_STATUS_PCI_RESET_ENABLE (1<<6) +#define PCI_SYS_STATUS_PCI_SATTELITE_MODE (1<<7) + +#endif /* !(__SPARC_PCIC_H) */ diff --git a/include/asm-sparc/perfctr.h b/include/asm-sparc/perfctr.h new file mode 100644 index 000000000..67756e808 --- /dev/null +++ b/include/asm-sparc/perfctr.h @@ -0,0 +1,101 @@ +/*---------------------------------------- + PERFORMANCE INSTRUMENTATION + Guillaume Thouvenin 08/10/98 + David S. Miller 10/06/98 + ---------------------------------------*/ +#ifndef PERF_COUNTER_API +#define PERF_COUNTER_API + +/* sys_perfctr() interface. First arg is operation code + * from enumeration below. The meaning of further arguments + * are determined by the operation code. + * + * int sys_perfctr(int opcode, unsigned long arg0, + * unsigned long arg1, unsigned long arg2) + * + * Pointers which are passed by the user are pointers to 64-bit + * integers. + * + * Once enabled, performance counter state is retained until the + * process either exits or performs an exec. That is, performance + * counters remain enabled for fork/clone children. + */ +enum perfctr_opcode { + /* Enable UltraSparc performance counters, ARG0 is pointer + * to 64-bit accumulator for D0 counter in PIC, ARG1 is pointer + * to 64-bit accumulator for D1 counter. ARG2 is a pointer to + * the initial PCR register value to use. + */ + PERFCTR_ON, + + /* Disable UltraSparc performance counters. The PCR is written + * with zero and the user counter accumulator pointers and + * working PCR register value are forgotten. + */ + PERFCTR_OFF, + + /* Add current D0 and D1 PIC values into user pointers given + * in PERFCTR_ON operation. The PIC is cleared before returning. + */ + PERFCTR_READ, + + /* Clear the PIC register. */ + PERFCTR_CLRPIC, + + /* Begin using a new PCR value, the pointer to which is passed + * in ARG0. The PIC is also cleared after the new PCR value is + * written. + */ + PERFCTR_SETPCR, + + /* Store in pointer given in ARG0 the current PCR register value + * being used. + */ + PERFCTR_GETPCR +}; + +/* I don't want the kernel's namespace to be polluted with this + * stuff when this file is included. --DaveM + */ +#ifndef __KERNEL__ + +#define PRIV 0x00000001 +#define USR 0x00000002 +#define SYS 0x00000004 + +/* Pic.S0 Selection Bit Field Encoding */ +#define CYCLE_CNT 0x00000000 +#define INSTR_CNT 0x00000010 +#define DISPATCH0_IC_MISS 0x00000020 +#define DISPATCH0_STOREBUF 0x00000030 +#define IC_REF 0x00000080 +#define DC_RD 0x00000090 +#define DC_WR 0x000000A0 +#define LOAD_USE 0x000000B0 +#define EC_REF 0x000000C0 +#define EC_WRITE_HIT_RDO 0x000000D0 +#define EC_SNOOP_INV 0x000000E0 +#define EC_RD_HIT 0x000000F0 + +/* Pic.S1 Selection Bit Field Encoding */ +#define CYCLE_CNT_D1 0x00000000 +#define INSTR_CNT_D1 0x00000800 +#define DISPATCH0_IC_MISPRED 0x00001000 +#define DISPATCH0_FP_USE 0x00001800 +#define IC_HIT 0x00004000 +#define DC_RD_HIT 0x00004800 +#define DC_WR_HIT 0x00005000 +#define LOAD_USE_RAW 0x00005800 +#define EC_HIT 0x00006000 +#define EC_WB 0x00006800 +#define EC_SNOOP_CB 0x00007000 +#define EC_IT_HIT 0x00007800 + +struct vcounter_struct { + unsigned long long vcnt0; + unsigned long long vcnt1; +}; + +#endif /* !(__KERNEL__) */ + +#endif /* !(PERF_COUNTER_API) */ diff --git a/include/asm-sparc/shmparam.h b/include/asm-sparc/shmparam.h index 54420d89d..174984e11 100644 --- a/include/asm-sparc/shmparam.h +++ b/include/asm-sparc/shmparam.h @@ -1,4 +1,4 @@ -/* $Id: shmparam.h,v 1.3 1995/11/25 02:32:42 davem Exp $ */ +/* $Id: shmparam.h,v 1.4 1998/09/28 07:15:01 jj Exp $ */ #ifndef _ASMSPARC_SHMPARAM_H #define _ASMSPARC_SHMPARAM_H @@ -34,7 +34,7 @@ * SHMMAX <= (PAGE_SIZE << _SHM_IDX_BITS). */ -#define SHMMAX (1024 * 1024) /* max shared seg size (bytes) */ +#define SHMMAX 0x1000000 /* max shared seg size (bytes) */ #define SHMMIN 1 /* really PAGE_SIZE */ /* min shared seg size (bytes) */ #define SHMMNI (1<<_SHM_ID_BITS) /* max num of segs system wide */ #define SHMALL /* max shm system wide (pages) */ \ diff --git a/include/asm-sparc/sigcontext.h b/include/asm-sparc/sigcontext.h index ec6107408..3c85783f1 100644 --- a/include/asm-sparc/sigcontext.h +++ b/include/asm-sparc/sigcontext.h @@ -1,4 +1,4 @@ -/* $Id: sigcontext.h,v 1.12 1997/03/03 16:51:52 jj Exp $ */ +/* $Id: sigcontext.h,v 1.13 1998/10/06 09:28:35 jj Exp $ */ #ifndef __SPARC_SIGCONTEXT_H #define __SPARC_SIGCONTEXT_H @@ -52,6 +52,16 @@ typedef struct { } si_fpqueue [16]; } __siginfo_fpu_t; +/* This magic should be in g_upper[0] for all upper parts + to be valid. + This is generated by sparc64 only, but for 32bit processes, + so we define it here as well. */ +#define SIGINFO_EXTRA_V8PLUS_MAGIC 0x130e269 +typedef struct { + unsigned int g_upper[8]; + unsigned int o_upper[8]; +} siginfo_extra_v8plus_t; + #endif /* !(__ASSEMBLY__) */ #endif /* !(__SPARC_SIGCONTEXT_H) */ diff --git a/include/asm-sparc/siginfo.h b/include/asm-sparc/siginfo.h index 0a666b4e2..f20a5a81c 100644 --- a/include/asm-sparc/siginfo.h +++ b/include/asm-sparc/siginfo.h @@ -1,4 +1,4 @@ -/* $Id: siginfo.h,v 1.2 1998/07/30 11:31:49 davem Exp $ +/* $Id: siginfo.h,v 1.3 1998/08/26 10:33:29 davem Exp $ * siginfo.c: */ diff --git a/include/asm-sparc/smp.h b/include/asm-sparc/smp.h index 3cbb49c86..91afa0840 100644 --- a/include/asm-sparc/smp.h +++ b/include/asm-sparc/smp.h @@ -65,6 +65,9 @@ void smp_callin(void); void smp_boot_cpus(void); void smp_store_cpu_info(int); +int smp_bogo_info(char *buf); +int smp_info(char *buf); + BTFIXUPDEF_CALL(void, smp_cross_call, smpfunc_t, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) BTFIXUPDEF_CALL(void, smp_message_pass, int, int, unsigned long, int) BTFIXUPDEF_CALL(int, __smp_processor_id, void) @@ -74,12 +77,6 @@ BTFIXUPDEF_BLACKBOX(load_current) #define smp_cross_call(func,arg1,arg2,arg3,arg4,arg5) BTFIXUP_CALL(smp_cross_call)(func,arg1,arg2,arg3,arg4,arg5) #define smp_message_pass(target,msg,data,wait) BTFIXUP_CALL(smp_message_pass)(target,msg,data,wait) -BTFIXUPDEF_CALL(int, smp_bogo_info, char *) -BTFIXUPDEF_CALL(int, smp_info, char *) - -#define smp_bogo_info(buf) BTFIXUP_CALL(smp_bogo_info)(buf) -#define smp_info(buf) BTFIXUP_CALL(smp_info)(buf) - extern __inline__ void xc0(smpfunc_t func) { smp_cross_call(func, 0, 0, 0, 0, 0); } extern __inline__ void xc1(smpfunc_t func, unsigned long arg1) { smp_cross_call(func, arg1, 0, 0, 0, 0); } @@ -153,11 +150,12 @@ extern __inline__ int hard_smp_processor_id(void) #else extern __inline__ int hard_smp_processor_id(void) { - int cpuid __asm__ ("g2"); + int cpuid; __asm__ __volatile__("mov %%o7, %%g1\n\t" "call ___f___smp_processor_id\n\t" - " nop\n\t" : "=r"(cpuid) : : "g1"); + " nop\n\t" + "mov %%g2, %0\n\t" : "=r"(cpuid) : : "g1", "g2"); return cpuid; } #endif @@ -184,8 +182,7 @@ extern __inline__ int hard_smp_processor_id(void) #define SMP_FROM_INT 1 #define SMP_FROM_SYSCALL 2 - -#else /* !(__SMP__) */ +#endif /* !(__SMP__) */ #define NO_PROC_ID 0xFF diff --git a/include/asm-sparc/softirq.h b/include/asm-sparc/softirq.h index 50fbc20e7..80c5d2e3e 100644 --- a/include/asm-sparc/softirq.h +++ b/include/asm-sparc/softirq.h @@ -1,133 +1,173 @@ /* softirq.h: 32-bit Sparc soft IRQ support. * * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) + * Copyright (C) 1998 Anton Blanchard (anton@progsoc.uts.edu.au) */ #ifndef __SPARC_SOFTIRQ_H #define __SPARC_SOFTIRQ_H #include <asm/atomic.h> +#include <asm/smp.h> #include <asm/hardirq.h> -/* The locking mechanism for base handlers, to prevent re-entrancy, - * is entirely private to an implementation, it should not be - * referenced at all outside of this file. - */ +extern unsigned int local_bh_count[NR_CPUS]; + #define get_active_bhs() (bh_mask & bh_active) #ifdef __SMP__ -extern atomic_t __sparc_bh_counter; - -#define start_bh_atomic() \ - do { atomic_inc(&__sparc_bh_counter); synchronize_irq(); } while(0) - -#define end_bh_atomic() atomic_dec(&__sparc_bh_counter) - -#include <asm/spinlock.h> - -extern spinlock_t global_bh_lock; - -#define init_bh(nr, routine) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_base[ent] = routine; \ - bh_mask_count[ent] = 0; \ - bh_mask |= 1 << ent; \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define remove_bh(nr) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_base[ent] = NULL; \ - bh_mask &= ~(1 << ent); \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define mark_bh(nr) \ -do { unsigned long flags; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_active |= (1 << nr); \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define disable_bh(nr) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_mask &= ~(1 << ent); \ - bh_mask_count[ent]++; \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define enable_bh(nr) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - if (!--bh_mask_count[ent]) \ - bh_mask |= 1 << ent; \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define softirq_trylock(cpu) \ -({ \ - int ret = 1; \ - if(atomic_add_return(1, &__sparc_bh_counter) != 1) { \ - atomic_dec(&__sparc_bh_counter); \ - ret = 0; \ - } \ - ret; \ -}) -#define softirq_endlock(cpu) atomic_dec(&__sparc_bh_counter) -#define clear_active_bhs(mask) \ -do { unsigned long flags; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_active &= ~(mask); \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#else /* !(__SMP__) */ - -extern int __sparc_bh_counter; - -#define start_bh_atomic() do { __sparc_bh_counter++; barrier(); } while(0) -#define end_bh_atomic() do { barrier(); __sparc_bh_counter--; } while(0) - -#define softirq_trylock(cpu) (__sparc_bh_counter ? 0 : (__sparc_bh_counter=1)) -#define softirq_endlock(cpu) (__sparc_bh_counter = 0) -#define clear_active_bhs(x) (bh_active &= ~(x)) -#define synchronize_bh() do { } while (0) /* XXX implement SMP version -DaveM */ - -#define init_bh(nr, routine) \ -do { int ent = nr; \ - bh_base[ent] = routine; \ - bh_mask_count[ent] = 0; \ - bh_mask |= 1 << ent; \ -} while(0) - -#define remove_bh(nr) \ -do { int ent = nr; \ - bh_base[ent] = NULL; \ - bh_mask &= ~(1 << ent); \ -} while(0) +/* + * The locking mechanism for base handlers, to prevent re-entrancy, + * is entirely private to an implementation, it should not be + * referenced at all outside of this file. + */ +extern atomic_t global_bh_lock; +extern atomic_t global_bh_count; +extern spinlock_t sparc_bh_lock; + +extern void synchronize_bh(void); + +static inline void clear_active_bhs(unsigned int mask) +{ + unsigned long flags; + spin_lock_irqsave(&sparc_bh_lock, flags); + bh_active &= ~(mask); + spin_unlock_irqrestore(&sparc_bh_lock, flags); +} + +extern inline void init_bh(int nr, void (*routine)(void)) +{ + unsigned long flags; + spin_lock_irqsave(&sparc_bh_lock, flags); + bh_base[nr] = routine; + bh_mask_count[nr] = 0; + bh_mask |= 1 << nr; + spin_unlock_irqrestore(&sparc_bh_lock, flags); +} + +extern inline void remove_bh(int nr) +{ + unsigned long flags; + spin_lock_irqsave(&sparc_bh_lock, flags); + bh_base[nr] = NULL; + bh_mask &= ~(1 << nr); + spin_unlock_irqrestore(&sparc_bh_lock, flags); +} + +extern inline void mark_bh(int nr) +{ + unsigned long flags; + spin_lock_irqsave(&sparc_bh_lock, flags); + bh_active |= (1 << nr); + spin_unlock_irqrestore(&sparc_bh_lock, flags); +} + +/* + * These use a mask count to correctly handle + * nested disable/enable calls + */ +extern inline void disable_bh(int nr) +{ + unsigned long flags; + spin_lock_irqsave(&sparc_bh_lock, flags); + bh_mask &= ~(1 << nr); + bh_mask_count[nr]++; + spin_unlock_irqrestore(&sparc_bh_lock, flags); + synchronize_bh(); +} + +extern inline void enable_bh(int nr) +{ + unsigned long flags; + spin_lock_irqsave(&sparc_bh_lock, flags); + if (!--bh_mask_count[nr]) + bh_mask |= 1 << nr; + spin_unlock_irqrestore(&sparc_bh_lock, flags); +} + +static inline void start_bh_atomic(void) +{ + atomic_inc(&global_bh_lock); + synchronize_bh(); +} + +static inline void end_bh_atomic(void) +{ + atomic_dec(&global_bh_lock); +} + +/* These are for the IRQs testing the lock */ +static inline int softirq_trylock(int cpu) +{ + if (atomic_add_return(1, &global_bh_count) == 1) { + if (atomic_read(&global_bh_lock) == 0) { + ++local_bh_count[cpu]; + return 1; + } + } + atomic_dec(&global_bh_count); + return 0; +} + +static inline void softirq_endlock(int cpu) +{ + local_bh_count[cpu]--; + atomic_dec(&global_bh_count); +} + +#else +#define clear_active_bhs(x) (bh_active &= ~(x)) #define mark_bh(nr) (bh_active |= (1 << (nr))) -#define disable_bh(nr) \ -do { int ent = nr; \ - bh_mask &= ~(1 << ent); \ - bh_mask_count[ent]++; \ -} while(0) +/* These are for the irq's testing the lock */ +#define softirq_trylock(cpu) (local_bh_count[cpu] ? 0 : (local_bh_count[cpu]=1)) +#define softirq_endlock(cpu) (local_bh_count[cpu] = 0) +#define synchronize_bh() barrier() -#define enable_bh(nr) \ -do { int ent = nr; \ - if (!--bh_mask_count[ent]) \ - bh_mask |= 1 << ent; \ -} while(0) - -#endif /* __SMP__ */ - -#endif /* __SPARC_SOFTIRQ_H */ +/* + * These use a mask count to correctly handle + * nested disable/enable calls + */ +extern inline void disable_bh(int nr) +{ + bh_mask &= ~(1 << nr); + bh_mask_count[nr]++; + synchronize_bh(); +} + +extern inline void enable_bh(int nr) +{ + if (!--bh_mask_count[nr]) + bh_mask |= 1 << nr; +} + +extern inline void init_bh(int nr, void (*routine)(void)) +{ + bh_base[nr] = routine; + bh_mask_count[nr] = 0; + bh_mask |= 1 << nr; +} + +extern inline void remove_bh(int nr) +{ + bh_base[nr] = NULL; + bh_mask &= ~(1 << nr); +} + +extern inline void start_bh_atomic(void) +{ + local_bh_count[0]++; + barrier(); +} + +extern inline void end_bh_atomic(void) +{ + barrier(); + local_bh_count[0]--; +} + +#endif /* SMP */ + +#endif /* __SPARC_SOFTIRQ_H */ diff --git a/include/asm-sparc/spinlock.h b/include/asm-sparc/spinlock.h index 1683df48e..e58ffe605 100644 --- a/include/asm-sparc/spinlock.h +++ b/include/asm-sparc/spinlock.h @@ -10,13 +10,8 @@ #ifndef __SMP__ -#if (__GNUC__ > 2) || (__GNUC_MINOR__ >= 8) - typedef struct { } spinlock_t; - #define SPIN_LOCK_UNLOCKED { } -#else - typedef unsigned char spinlock_t; - #define SPIN_LOCK_UNLOCKED 0 -#endif +typedef unsigned char spinlock_t; +#define SPIN_LOCK_UNLOCKED 0 #define spin_lock_init(lock) do { } while(0) #define spin_lock(lock) do { } while(0) @@ -39,8 +34,8 @@ * irq-safe write-lock, but readers can get non-irqsafe * read-locks. */ -typedef struct { } rwlock_t; -#define RW_LOCK_UNLOCKED { } +typedef struct { volatile unsigned int lock; } rwlock_t; +#define RW_LOCK_UNLOCKED (rwlock_t) { 0 } #define read_lock(lock) do { } while(0) #define read_unlock(lock) do { } while(0) @@ -61,7 +56,7 @@ typedef struct { } rwlock_t; #include <asm/psr.h> /* Define this to use the verbose/debugging versions in arch/sparc/lib/debuglocks.c */ -/* #define SPIN_LOCK_DEBUG */ +#define SPIN_LOCK_DEBUG #ifdef SPIN_LOCK_DEBUG struct _spinlock_debug { @@ -70,71 +65,73 @@ struct _spinlock_debug { }; typedef struct _spinlock_debug spinlock_t; -#define SPIN_LOCK_UNLOCKED { 0, 0 } +#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0, 0 } #define spin_lock_init(lp) do { (lp)->owner_pc = 0; (lp)->lock = 0; } while(0) -#define spin_unlock_wait(lp) \ -do { barrier(); \ -} while(*(volatile unsigned char *)(&(lp)->lock)) +#define spin_unlock_wait(lp) do { barrier(); } while(*(volatile unsigned char *)(&(lp)->lock)) -extern void _spin_lock(spinlock_t *lock); +extern void _do_spin_lock(spinlock_t *lock, char *str); extern int _spin_trylock(spinlock_t *lock); -extern void _spin_unlock(spinlock_t *lock); -extern void _spin_lock_irq(spinlock_t *lock); -extern void _spin_unlock_irq(spinlock_t *lock); -extern void _spin_lock_irqsave(spinlock_t *lock); -extern void _spin_unlock_irqrestore(spinlock_t *lock); - -#define spin_lock(lp) _spin_lock(lp) -#define spin_trylock(lp) _spin_trylock(lp) -#define spin_unlock(lp) _spin_unlock(lp) -#define spin_lock_irq(lp) _spin_lock_irq(lp) -#define spin_unlock_irq(lp) _spin_unlock_irq(lp) -#define spin_lock_irqsave(lp, flags) do { __save_and_cli(flags); \ - _spin_lock_irqsave(lp); } while (0) -#define spin_unlock_irqrestore(lp, flags) do { _spin_unlock_irqrestore(lp); \ - __restore_flags(flags); } while(0) +extern void _do_spin_unlock(spinlock_t *lock); + +#define spin_trylock(lp) _spin_trylock(lp) + +#define spin_lock(lock) _do_spin_lock(lock, "spin_lock") +#define spin_lock_irq(lock) do { __cli(); _do_spin_lock(lock, "spin_lock_irq"); } while(0) +#define spin_lock_irqsave(lock, flags) do { __save_and_cli(flags); _do_spin_lock(lock, "spin_lock_irqsave"); } while(0) + +#define spin_unlock(lock) _do_spin_unlock(lock) +#define spin_unlock_irq(lock) do { _do_spin_unlock(lock); __sti(); } while(0) +#define spin_unlock_irqrestore(lock, flags) do { _do_spin_unlock(lock); __restore_flags(flags); } while(0) struct _rwlock_debug { volatile unsigned int lock; unsigned long owner_pc; + unsigned long reader_pc[NCPUS]; }; typedef struct _rwlock_debug rwlock_t; -#define RW_LOCK_UNLOCKED { 0, 0 } - -extern void _read_lock(rwlock_t *rw); -extern void _read_unlock(rwlock_t *rw); -extern void _write_lock(rwlock_t *rw); -extern void _write_unlock(rwlock_t *rw); -extern void _read_lock_irq(rwlock_t *rw); -extern void _read_unlock_irq(rwlock_t *rw); -extern void _write_lock_irq(rwlock_t *rw); -extern void _write_unlock_irq(rwlock_t *rw); -extern void _read_lock_irqsave(rwlock_t *rw); -extern void _read_unlock_irqrestore(rwlock_t *rw); -extern void _write_lock_irqsave(rwlock_t *rw); -extern void _write_unlock_irqrestore(rwlock_t *rw); - -#define read_lock(rw) _read_lock(rw) -#define read_unlock(rw) _read_unlock(rw) -#define write_lock(rw) _write_lock(rw) -#define write_unlock(rw) _write_unlock(rw) -#define read_lock_irq(rw) _read_lock_irq(rw) -#define read_unlock_irq(rw) _read_unlock_irq(rw) -#define write_lock_irq(rw) _write_lock_irq(rw) -#define write_unlock_irq(rw) _write_unlock_irq(rw) - -#define read_lock_irqsave(rw, flags) \ -do { __save_and_cli(flags); _read_lock_irqsave(rw); } while (0) - -#define read_unlock_irqrestore(rw, flags) do { _read_unlock_irqrestore(rw); \ - __restore_flags(flags); } while(0) - -#define write_lock_irqsave(rw, flags) \ -do { __save_and_cli(flags); _write_lock_irqsave(rw); } while(0) - -#define write_unlock_irqrestore(rw, flags) do { _write_unlock_irqrestore(rw); \ - __restore_flags(flags); } while(0) +#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, {0} } + +extern void _do_read_lock(rwlock_t *rw, char *str); +extern void _do_read_unlock(rwlock_t *rw, char *str); +extern void _do_write_lock(rwlock_t *rw, char *str); +extern void _do_write_unlock(rwlock_t *rw); + +#define read_lock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _do_read_lock(lock, "read_lock"); \ + __restore_flags(flags); \ +} while(0) +#define read_lock_irq(lock) do { __cli(); _do_read_lock(lock, "read_lock_irq"); } while(0) +#define read_lock_irqsave(lock, flags) do { __save_and_cli(flags); _do_read_lock(lock, "read_lock_irqsave"); } while(0) + +#define read_unlock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _do_read_unlock(lock, "read_unlock"); \ + __restore_flags(flags); \ +} while(0) +#define read_unlock_irq(lock) do { _do_read_unlock(lock, "read_unlock_irq"); __sti() } while(0) +#define read_unlock_irqrestore(lock, flags) do { _do_read_unlock(lock, "read_unlock_irqrestore"); __restore_flags(flags); } while(0) + +#define write_lock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _do_write_lock(lock, "write_lock"); \ + __restore_flags(flags); \ +} while(0) +#define write_lock_irq(lock) do { __cli(); _do_write_lock(lock, "write_lock_irq"); } while(0) +#define write_lock_irqsave(lock, flags) do { __save_and_cli(flags); _do_write_lock(lock, "write_lock_irqsave"); } while(0) + +#define write_unlock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _do_write_unlock(lock); \ + __restore_flags(flags); \ +} while(0) +#define write_unlock_irq(lock) do { _do_write_unlock(lock); __sti(); } while(0) +#define write_unlock_irqrestore(lock, flags) do { _do_write_unlock(lock); __restore_flags(flags); } while(0) #else /* !SPIN_LOCK_DEBUG */ @@ -263,23 +260,21 @@ extern __inline__ void spin_unlock_irqrestore(spinlock_t *lock, unsigned long fl */ typedef struct { volatile unsigned int lock; } rwlock_t; -#define RW_LOCK_UNLOCKED { 0 } +#define RW_LOCK_UNLOCKED (rwlock_t) { 0 } /* Sort of like atomic_t's on Sparc, but even more clever. * * ------------------------------------ - * | 16-bit counter | clock | wlock | rwlock_t + * | 24-bit counter | wlock | rwlock_t * ------------------------------------ - * 31 16 15 8 7 0 + * 31 8 7 0 * - * wlock signifies the one writer is in, the clock protects - * counter bumping, however a reader must acquire wlock - * before he can bump the counter on a read_lock(). - * Similarly a writer, once he has the wlock, must await - * for the top 24 bits to all clear before he can finish - * going in (this includes the clock of course). + * wlock signifies the one writer is in or somebody is updating + * counter. For a writer, if he successfully acquires the wlock, + * but counter is non-zero, he has to release the lock and wait, + * till both counter and wlock are zero. * - * Unfortunately this scheme limits us to ~65,000 cpus. + * Unfortunately this scheme limits us to ~16,000,000 cpus. */ extern __inline__ void _read_lock(rwlock_t *rw) { @@ -308,7 +303,7 @@ extern __inline__ void _read_unlock(rwlock_t *rw) __asm__ __volatile__(" mov %%o7, %%g4 call ___rw_read_exit - ldstub [%%g1 + 2], %%g2 + ldstub [%%g1 + 3], %%g2 " : /* no outputs */ : "r" (lp) : "g2", "g4", "g7", "memory", "cc"); diff --git a/include/asm-sparc/system.h b/include/asm-sparc/system.h index 01ed7659e..6dc074c78 100644 --- a/include/asm-sparc/system.h +++ b/include/asm-sparc/system.h @@ -1,4 +1,4 @@ -/* $Id: system.h,v 1.69 1998/04/24 12:30:19 davem Exp $ */ +/* $Id: system.h,v 1.71 1998/10/13 03:51:06 jj Exp $ */ #include <linux/config.h> #ifndef __SPARC_SYSTEM_H @@ -151,7 +151,7 @@ extern __inline__ void __cli(void) __asm__ __volatile__(" rd %%psr, %0 - nop; nop; nop; + nop; nop; nop; /* Sun4m + Cypress + SMP bug */ or %0, %1, %0 wr %0, 0x0, %%psr nop; nop; nop @@ -166,7 +166,7 @@ extern __inline__ void __sti(void) __asm__ __volatile__(" rd %%psr, %0 - nop; nop; nop; + nop; nop; nop; /* Sun4m + Cypress + SMP bug */ andn %0, %1, %0 wr %0, 0x0, %%psr nop; nop; nop @@ -189,7 +189,7 @@ extern __inline__ unsigned long swap_pil(unsigned long __new_psr) __asm__ __volatile__(" rd %%psr, %0 - nop; nop; nop; + nop; nop; nop; /* Sun4m + Cypress + SMP bug */ and %0, %2, %%g1 and %1, %2, %%g2 xorcc %%g1, %%g2, %%g0 @@ -211,7 +211,7 @@ extern __inline__ unsigned long read_psr_and_cli(void) __asm__ __volatile__(" rd %%psr, %0 - nop; nop; nop; + nop; nop; nop; /* Sun4m + Cypress + SMP bug */ or %0, %1, %%g1 wr %%g1, 0x0, %%psr nop; nop; nop @@ -235,18 +235,16 @@ extern __inline__ unsigned long read_psr_and_cli(void) extern unsigned char global_irq_holder; -#define save_flags(x) \ -do { ((x) = ((global_irq_holder == (unsigned char) smp_processor_id()) ? 1 : \ - ((getipl() & PSR_PIL) ? 2 : 0))); } while(0) - #define save_and_cli(flags) do { save_flags(flags); cli(); } while(0) #ifdef DEBUG_IRQLOCK extern void __global_cli(void); extern void __global_sti(void); +extern unsigned long __global_save_flags(void); extern void __global_restore_flags(unsigned long flags); #define cli() __global_cli() #define sti() __global_sti() +#define save_flags(flags) ((flags)=__global_save_flags()) #define restore_flags(flags) __global_restore_flags(flags) #else diff --git a/include/asm-sparc/termios.h b/include/asm-sparc/termios.h index 3c681a7b1..aeefe28e4 100644 --- a/include/asm-sparc/termios.h +++ b/include/asm-sparc/termios.h @@ -1,4 +1,4 @@ -/* $Id: termios.h,v 1.26 1998/04/12 06:27:19 davem Exp $ */ +/* $Id: termios.h,v 1.27 1998/10/04 06:50:13 davem Exp $ */ #ifndef _SPARC_TERMIOS_H #define _SPARC_TERMIOS_H @@ -63,6 +63,9 @@ struct winsize { #define N_AX25 5 #define N_X25 6 #define N_6PACK 7 +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ +#define N_R3964 9 /* Reserved for Simatic R3964 module */ +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ #ifdef __KERNEL__ diff --git a/include/asm-sparc/timer.h b/include/asm-sparc/timer.h index f1b41f7e4..843ff4b7c 100644 --- a/include/asm-sparc/timer.h +++ b/include/asm-sparc/timer.h @@ -1,4 +1,4 @@ -/* $Id: timer.h,v 1.17 1998/04/24 12:30:19 davem Exp $ +/* $Id: timer.h,v 1.20 1998/09/21 05:07:37 jj Exp $ * timer.h: Definitions for the timer chips on the Sparc. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -11,6 +11,7 @@ #include <asm/system.h> /* For NCPUS */ #include <asm/sun4paddr.h> +#include <asm/btfixup.h> /* Timer structures. The interrupt timer has two properties which * are the counter (which is handled in do_timer in sched.c) and the limit. @@ -102,4 +103,8 @@ extern struct sun4d_timer_regs *sun4d_timers; extern __volatile__ unsigned int *master_l10_counter; extern __volatile__ unsigned int *master_l10_limit; +/* FIXME: Make do_[gs]ettimeofday btfixup calls */ +BTFIXUPDEF_CALL(void, bus_do_settimeofday, struct timeval *tv) +#define bus_do_settimeofday(tv) BTFIXUP_CALL(bus_do_settimeofday)(tv) + #endif /* !(_SPARC_TIMER_H) */ diff --git a/include/asm-sparc/turbosparc.h b/include/asm-sparc/turbosparc.h index b3cdc7d78..094573025 100644 --- a/include/asm-sparc/turbosparc.h +++ b/include/asm-sparc/turbosparc.h @@ -1,4 +1,4 @@ -/* $Id: turbosparc.h,v 1.1 1997/07/18 06:29:12 ralf Exp $ +/* $Id: turbosparc.h,v 1.2 1998/10/19 19:40:01 ralf Exp $ * turbosparc.h: Defines specific to the TurboSparc module. * This is SRMMU stuff. * @@ -74,8 +74,10 @@ extern __inline__ void turbosparc_inv_data_tag(unsigned long addr) extern __inline__ void turbosparc_flush_icache(void) { - __asm__ __volatile__("sta %%g0, [%%g0] %0\n\t" : : - "i" (ASI_M_IC_FLCLEAR)); + unsigned long addr; + + for(addr = 0; addr < 0x4000; addr += 0x20) + turbosparc_inv_insn_tag(addr); } extern __inline__ void turbosparc_flush_dcache(void) @@ -88,7 +90,12 @@ extern __inline__ void turbosparc_flush_dcache(void) extern __inline__ void turbosparc_idflash_clear(void) { - turbosparc_flush_icache(); turbosparc_flush_dcache(); + unsigned long addr; + + for(addr = 0; addr < 0x4000; addr += 0x20) { + turbosparc_inv_insn_tag(addr); + turbosparc_inv_data_tag(addr); + } } extern __inline__ void turbosparc_set_ccreg(unsigned long regval) diff --git a/include/asm-sparc/uaccess.h b/include/asm-sparc/uaccess.h index 3f4a58601..a2affc181 100644 --- a/include/asm-sparc/uaccess.h +++ b/include/asm-sparc/uaccess.h @@ -1,4 +1,4 @@ -/* $Id: uaccess.h,v 1.15 1998/02/05 14:19:54 jj Exp $ +/* $Id: uaccess.h,v 1.17 1998/09/16 12:25:29 jj Exp $ * uaccess.h: User space memore access functions. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -324,8 +324,6 @@ __kernel_size_t __copy_size = (__kernel_size_t) (n); \ __kernel_size_t __copy_res; \ if(__copy_size && __access_ok((unsigned long)__copy_from, __copy_size)) { \ __copy_res = __copy_user(__copy_to, __copy_from, __copy_size); \ -if(__copy_res) \ -memset((char *)__copy_to + __copy_size - __copy_res, 0, __copy_res); \ } else __copy_res = __copy_size; \ __copy_res; }) diff --git a/include/asm-sparc/unistd.h b/include/asm-sparc/unistd.h index dae8e0ac3..501197be4 100644 --- a/include/asm-sparc/unistd.h +++ b/include/asm-sparc/unistd.h @@ -1,4 +1,4 @@ -/* $Id: unistd.h,v 1.42 1998/07/28 13:08:35 jj Exp $ */ +/* $Id: unistd.h,v 1.48 1998/10/07 01:27:50 davem Exp $ */ #ifndef _SPARC_UNISTD_H #define _SPARC_UNISTD_H @@ -16,7 +16,6 @@ * Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu) */ -#define __NR_setup 0 /* Used only by init, to get system going. */ #define __NR_exit 1 /* Common */ #define __NR_fork 2 /* Common */ #define __NR_read 3 /* Common */ @@ -29,12 +28,12 @@ #define __NR_unlink 10 /* Common */ #define __NR_execv 11 /* SunOS Specific */ #define __NR_chdir 12 /* Common */ -/* #define __NR_ni_syscall 13 ENOSYS under SunOS */ +#define __NR_chown 13 /* Common */ #define __NR_mknod 14 /* Common */ #define __NR_chmod 15 /* Common */ -#define __NR_chown 16 /* Common */ +#define __NR_lchown 16 /* Common */ #define __NR_brk 17 /* Common */ -/* #define __NR_ni_syscall 18 ENOSYS under SunOS */ +/* #define __NR_ni_syscall 18 RESERVED for sparc64 perf-counter syscall */ #define __NR_lseek 19 /* Common */ #define __NR_getpid 20 /* Common */ #define __NR_capget 21 /* Linux Specific */ @@ -164,8 +163,8 @@ #define __NR_setrlimit 145 /* Common */ #define __NR_killpg 146 /* SunOS Specific */ #define __NR_prctl 147 /* ENOSYS under SunOS */ -/* #define __NR_ni_syscall 148 ENOSYS under SunOS */ -/* #define __NR_ni_syscall 149 ENOSYS under SunOS */ +#define __NR_pciconfig_read 148 /* ENOSYS under SunOS */ +#define __NR_pciconfig_write 149 /* ENOSYS under SunOS */ #define __NR_getsockname 150 /* Common */ #define __NR_getmsg 151 /* SunOS Specific */ #define __NR_putmsg 152 /* SunOS Specific */ @@ -426,7 +425,6 @@ return -1; \ #define __NR__exit __NR_exit static __inline__ _syscall0(int,idle) static __inline__ _syscall0(int,pause) -static __inline__ _syscall1(int,setup,int,magic) static __inline__ _syscall0(int,sync) static __inline__ _syscall0(pid_t,setsid) static __inline__ _syscall3(int,write,int,fd,__const__ char *,buf,off_t,count) diff --git a/include/asm-sparc64/asm_offsets.h b/include/asm-sparc64/asm_offsets.h index bc1bdb8dc..52f6a9ee0 100644 --- a/include/asm-sparc64/asm_offsets.h +++ b/include/asm-sparc64/asm_offsets.h @@ -74,78 +74,78 @@ #define ASIZ_task_tarray_ptr 0x00000008 #define AOFF_task_wait_chldexit 0x000000e8 #define ASIZ_task_wait_chldexit 0x00000008 -#define AOFF_task_timeout 0x000000f0 -#define ASIZ_task_timeout 0x00000008 -#define AOFF_task_policy 0x000000f8 +#define AOFF_task_policy 0x000000f0 #define ASIZ_task_policy 0x00000008 -#define AOFF_task_rt_priority 0x00000100 +#define AOFF_task_rt_priority 0x000000f8 #define ASIZ_task_rt_priority 0x00000008 -#define AOFF_task_it_real_value 0x00000108 +#define AOFF_task_it_real_value 0x00000100 #define ASIZ_task_it_real_value 0x00000008 -#define AOFF_task_it_prof_value 0x00000110 +#define AOFF_task_it_prof_value 0x00000108 #define ASIZ_task_it_prof_value 0x00000008 -#define AOFF_task_it_virt_value 0x00000118 +#define AOFF_task_it_virt_value 0x00000110 #define ASIZ_task_it_virt_value 0x00000008 -#define AOFF_task_it_real_incr 0x00000120 +#define AOFF_task_it_real_incr 0x00000118 #define ASIZ_task_it_real_incr 0x00000008 -#define AOFF_task_it_prof_incr 0x00000128 +#define AOFF_task_it_prof_incr 0x00000120 #define ASIZ_task_it_prof_incr 0x00000008 -#define AOFF_task_it_virt_incr 0x00000130 +#define AOFF_task_it_virt_incr 0x00000128 #define ASIZ_task_it_virt_incr 0x00000008 -#define AOFF_task_real_timer 0x00000138 +#define AOFF_task_real_timer 0x00000130 #define ASIZ_task_real_timer 0x00000028 -#define AOFF_task_times 0x00000160 +#define AOFF_task_times 0x00000158 #define ASIZ_task_times 0x00000020 -#define AOFF_task_start_time 0x00000180 +#define AOFF_task_start_time 0x00000178 #define ASIZ_task_start_time 0x00000008 -#define AOFF_task_per_cpu_utime 0x00000188 +#define AOFF_task_per_cpu_utime 0x00000180 #define ASIZ_task_per_cpu_utime 0x00000008 -#define AOFF_task_min_flt 0x00000198 +#define AOFF_task_min_flt 0x00000190 #define ASIZ_task_min_flt 0x00000008 -#define AOFF_task_maj_flt 0x000001a0 +#define AOFF_task_maj_flt 0x00000198 #define ASIZ_task_maj_flt 0x00000008 -#define AOFF_task_nswap 0x000001a8 +#define AOFF_task_nswap 0x000001a0 #define ASIZ_task_nswap 0x00000008 -#define AOFF_task_cmin_flt 0x000001b0 +#define AOFF_task_cmin_flt 0x000001a8 #define ASIZ_task_cmin_flt 0x00000008 -#define AOFF_task_cmaj_flt 0x000001b8 +#define AOFF_task_cmaj_flt 0x000001b0 #define ASIZ_task_cmaj_flt 0x00000008 -#define AOFF_task_cnswap 0x000001c0 +#define AOFF_task_cnswap 0x000001b8 #define ASIZ_task_cnswap 0x00000008 -#define AOFF_task_swap_address 0x000001d0 +#define AOFF_task_swap_address 0x000001c8 #define ASIZ_task_swap_address 0x00000008 -#define AOFF_task_old_maj_flt 0x000001d8 +#define AOFF_task_old_maj_flt 0x000001d0 #define ASIZ_task_old_maj_flt 0x00000008 -#define AOFF_task_dec_flt 0x000001e0 +#define AOFF_task_dec_flt 0x000001d8 #define ASIZ_task_dec_flt 0x00000008 -#define AOFF_task_swap_cnt 0x000001e8 +#define AOFF_task_swap_cnt 0x000001e0 #define ASIZ_task_swap_cnt 0x00000008 -#define AOFF_task_uid 0x000001f0 +#define AOFF_task_uid 0x000001e8 #define ASIZ_task_uid 0x00000004 -#define AOFF_task_euid 0x000001f4 +#define AOFF_task_euid 0x000001ec #define ASIZ_task_euid 0x00000004 -#define AOFF_task_suid 0x000001f8 +#define AOFF_task_suid 0x000001f0 #define ASIZ_task_suid 0x00000004 -#define AOFF_task_fsuid 0x000001fc +#define AOFF_task_fsuid 0x000001f4 #define ASIZ_task_fsuid 0x00000004 -#define AOFF_task_gid 0x00000200 +#define AOFF_task_gid 0x000001f8 #define ASIZ_task_gid 0x00000004 -#define AOFF_task_egid 0x00000204 +#define AOFF_task_egid 0x000001fc #define ASIZ_task_egid 0x00000004 -#define AOFF_task_sgid 0x00000208 +#define AOFF_task_sgid 0x00000200 #define ASIZ_task_sgid 0x00000004 -#define AOFF_task_fsgid 0x0000020c +#define AOFF_task_fsgid 0x00000204 #define ASIZ_task_fsgid 0x00000004 -#define AOFF_task_ngroups 0x00000210 +#define AOFF_task_ngroups 0x00000208 #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x00000214 +#define AOFF_task_groups 0x0000020c #define ASIZ_task_groups 0x00000080 -#define AOFF_task_cap_effective 0x00000294 +#define AOFF_task_cap_effective 0x0000028c #define ASIZ_task_cap_effective 0x00000004 -#define AOFF_task_cap_inheritable 0x00000298 +#define AOFF_task_cap_inheritable 0x00000290 #define ASIZ_task_cap_inheritable 0x00000004 -#define AOFF_task_cap_permitted 0x0000029c +#define AOFF_task_cap_permitted 0x00000294 #define ASIZ_task_cap_permitted 0x00000004 +#define AOFF_task_user 0x00000298 +#define ASIZ_task_user 0x00000008 #define AOFF_task_rlim 0x000002a0 #define ASIZ_task_rlim 0x000000a0 #define AOFF_task_used_math 0x00000340 @@ -161,29 +161,30 @@ #define AOFF_task_semsleeping 0x00000368 #define ASIZ_task_semsleeping 0x00000008 #define AOFF_task_tss 0x00000370 -#define ASIZ_task_tss 0x00000440 -#define AOFF_task_fs 0x000007b0 +#define ASIZ_task_tss 0x00000470 +#define AOFF_task_fs 0x000007e0 #define ASIZ_task_fs 0x00000008 -#define AOFF_task_files 0x000007b8 +#define AOFF_task_files 0x000007e8 #define ASIZ_task_files 0x00000008 -#define AOFF_task_mm 0x000007c0 +#define AOFF_task_mm 0x000007f0 #define ASIZ_task_mm 0x00000008 -#define AOFF_task_sigmask_lock 0x000007c8 -#define ASIZ_task_sigmask_lock 0x00000000 -#define AOFF_task_sig 0x000007c8 +#define AOFF_task_sigmask_lock 0x000007f8 +#define ASIZ_task_sigmask_lock 0x00000001 +#define AOFF_task_sig 0x00000800 #define ASIZ_task_sig 0x00000008 -#define AOFF_task_signal 0x000007d0 +#define AOFF_task_signal 0x00000808 #define ASIZ_task_signal 0x00000008 -#define AOFF_task_blocked 0x000007d8 +#define AOFF_task_blocked 0x00000810 #define ASIZ_task_blocked 0x00000008 -#define AOFF_task_sigqueue 0x000007e0 +#define AOFF_task_sigqueue 0x00000818 #define ASIZ_task_sigqueue 0x00000008 -#define AOFF_task_sigqueue_tail 0x000007e8 +#define AOFF_task_sigqueue_tail 0x00000820 #define ASIZ_task_sigqueue_tail 0x00000008 -#define AOFF_task_sas_ss_sp 0x000007f0 +#define AOFF_task_sas_ss_sp 0x00000828 #define ASIZ_task_sas_ss_sp 0x00000008 -#define AOFF_task_sas_ss_size 0x000007f8 +#define AOFF_task_sas_ss_size 0x00000830 #define ASIZ_task_sas_ss_size 0x00000008 +#define ASIZ_task 0x00000840 #define AOFF_mm_mmap 0x00000000 #define ASIZ_mm_mmap 0x00000008 #define AOFF_mm_mmap_cache 0x00000008 @@ -232,6 +233,7 @@ #define ASIZ_mm_cpu_vm_mask 0x00000008 #define AOFF_mm_segments 0x000000b8 #define ASIZ_mm_segments 0x00000008 +#define ASIZ_mm 0x000000c0 #define AOFF_thread_ksp 0x00000000 #define ASIZ_thread_ksp 0x00000008 #define AOFF_thread_wstate 0x00000008 @@ -262,17 +264,30 @@ #define ASIZ_thread_sig_address 0x00000008 #define AOFF_thread_sig_desc 0x000003f0 #define ASIZ_thread_sig_desc 0x00000008 -#define AOFF_thread_fpdepth 0x000003f8 +#define AOFF_thread_user_cntd0 0x000003f8 +#define ASIZ_thread_user_cntd0 0x00000008 +#define AOFF_thread_user_cntd1 0x00000400 +#define ASIZ_thread_user_cntd1 0x00000008 +#define AOFF_thread_kernel_cntd0 0x00000408 +#define ASIZ_thread_kernel_cntd0 0x00000008 +#define AOFF_thread_kernel_cntd1 0x00000410 +#define ASIZ_thread_kernel_cntd1 0x00000008 +#define AOFF_thread_pcr_reg 0x00000418 +#define ASIZ_thread_pcr_reg 0x00000008 +#define AOFF_thread_fpdepth 0x00000420 #define ASIZ_thread_fpdepth 0x00000001 -#define AOFF_thread_fpsaved 0x000003f9 +#define AOFF_thread_fpsaved 0x00000421 #define ASIZ_thread_fpsaved 0x00000007 -#define AOFF_thread_gsr 0x00000400 +#define AOFF_thread_gsr 0x00000428 #define ASIZ_thread_gsr 0x00000007 -#define AOFF_thread_xfsr 0x00000408 +#define AOFF_thread_xfsr 0x00000430 #define ASIZ_thread_xfsr 0x00000038 +#define ASIZ_thread 0x00000470 #else /* __SMP__ */ +#ifndef SPIN_LOCK_DEBUG + #define AOFF_task_state 0x00000000 #define ASIZ_task_state 0x00000008 #define AOFF_task_flags 0x00000008 @@ -343,78 +358,78 @@ #define ASIZ_task_tarray_ptr 0x00000008 #define AOFF_task_wait_chldexit 0x000000e8 #define ASIZ_task_wait_chldexit 0x00000008 -#define AOFF_task_timeout 0x000000f0 -#define ASIZ_task_timeout 0x00000008 -#define AOFF_task_policy 0x000000f8 +#define AOFF_task_policy 0x000000f0 #define ASIZ_task_policy 0x00000008 -#define AOFF_task_rt_priority 0x00000100 +#define AOFF_task_rt_priority 0x000000f8 #define ASIZ_task_rt_priority 0x00000008 -#define AOFF_task_it_real_value 0x00000108 +#define AOFF_task_it_real_value 0x00000100 #define ASIZ_task_it_real_value 0x00000008 -#define AOFF_task_it_prof_value 0x00000110 +#define AOFF_task_it_prof_value 0x00000108 #define ASIZ_task_it_prof_value 0x00000008 -#define AOFF_task_it_virt_value 0x00000118 +#define AOFF_task_it_virt_value 0x00000110 #define ASIZ_task_it_virt_value 0x00000008 -#define AOFF_task_it_real_incr 0x00000120 +#define AOFF_task_it_real_incr 0x00000118 #define ASIZ_task_it_real_incr 0x00000008 -#define AOFF_task_it_prof_incr 0x00000128 +#define AOFF_task_it_prof_incr 0x00000120 #define ASIZ_task_it_prof_incr 0x00000008 -#define AOFF_task_it_virt_incr 0x00000130 +#define AOFF_task_it_virt_incr 0x00000128 #define ASIZ_task_it_virt_incr 0x00000008 -#define AOFF_task_real_timer 0x00000138 +#define AOFF_task_real_timer 0x00000130 #define ASIZ_task_real_timer 0x00000028 -#define AOFF_task_times 0x00000160 +#define AOFF_task_times 0x00000158 #define ASIZ_task_times 0x00000020 -#define AOFF_task_start_time 0x00000180 +#define AOFF_task_start_time 0x00000178 #define ASIZ_task_start_time 0x00000008 -#define AOFF_task_per_cpu_utime 0x00000188 +#define AOFF_task_per_cpu_utime 0x00000180 #define ASIZ_task_per_cpu_utime 0x00000100 -#define AOFF_task_min_flt 0x00000388 +#define AOFF_task_min_flt 0x00000380 #define ASIZ_task_min_flt 0x00000008 -#define AOFF_task_maj_flt 0x00000390 +#define AOFF_task_maj_flt 0x00000388 #define ASIZ_task_maj_flt 0x00000008 -#define AOFF_task_nswap 0x00000398 +#define AOFF_task_nswap 0x00000390 #define ASIZ_task_nswap 0x00000008 -#define AOFF_task_cmin_flt 0x000003a0 +#define AOFF_task_cmin_flt 0x00000398 #define ASIZ_task_cmin_flt 0x00000008 -#define AOFF_task_cmaj_flt 0x000003a8 +#define AOFF_task_cmaj_flt 0x000003a0 #define ASIZ_task_cmaj_flt 0x00000008 -#define AOFF_task_cnswap 0x000003b0 +#define AOFF_task_cnswap 0x000003a8 #define ASIZ_task_cnswap 0x00000008 -#define AOFF_task_swap_address 0x000003c0 +#define AOFF_task_swap_address 0x000003b8 #define ASIZ_task_swap_address 0x00000008 -#define AOFF_task_old_maj_flt 0x000003c8 +#define AOFF_task_old_maj_flt 0x000003c0 #define ASIZ_task_old_maj_flt 0x00000008 -#define AOFF_task_dec_flt 0x000003d0 +#define AOFF_task_dec_flt 0x000003c8 #define ASIZ_task_dec_flt 0x00000008 -#define AOFF_task_swap_cnt 0x000003d8 +#define AOFF_task_swap_cnt 0x000003d0 #define ASIZ_task_swap_cnt 0x00000008 -#define AOFF_task_uid 0x000003e0 +#define AOFF_task_uid 0x000003d8 #define ASIZ_task_uid 0x00000004 -#define AOFF_task_euid 0x000003e4 +#define AOFF_task_euid 0x000003dc #define ASIZ_task_euid 0x00000004 -#define AOFF_task_suid 0x000003e8 +#define AOFF_task_suid 0x000003e0 #define ASIZ_task_suid 0x00000004 -#define AOFF_task_fsuid 0x000003ec +#define AOFF_task_fsuid 0x000003e4 #define ASIZ_task_fsuid 0x00000004 -#define AOFF_task_gid 0x000003f0 +#define AOFF_task_gid 0x000003e8 #define ASIZ_task_gid 0x00000004 -#define AOFF_task_egid 0x000003f4 +#define AOFF_task_egid 0x000003ec #define ASIZ_task_egid 0x00000004 -#define AOFF_task_sgid 0x000003f8 +#define AOFF_task_sgid 0x000003f0 #define ASIZ_task_sgid 0x00000004 -#define AOFF_task_fsgid 0x000003fc +#define AOFF_task_fsgid 0x000003f4 #define ASIZ_task_fsgid 0x00000004 -#define AOFF_task_ngroups 0x00000400 +#define AOFF_task_ngroups 0x000003f8 #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x00000404 +#define AOFF_task_groups 0x000003fc #define ASIZ_task_groups 0x00000080 -#define AOFF_task_cap_effective 0x00000484 +#define AOFF_task_cap_effective 0x0000047c #define ASIZ_task_cap_effective 0x00000004 -#define AOFF_task_cap_inheritable 0x00000488 +#define AOFF_task_cap_inheritable 0x00000480 #define ASIZ_task_cap_inheritable 0x00000004 -#define AOFF_task_cap_permitted 0x0000048c +#define AOFF_task_cap_permitted 0x00000484 #define ASIZ_task_cap_permitted 0x00000004 +#define AOFF_task_user 0x00000488 +#define ASIZ_task_user 0x00000008 #define AOFF_task_rlim 0x00000490 #define ASIZ_task_rlim 0x000000a0 #define AOFF_task_used_math 0x00000530 @@ -430,29 +445,312 @@ #define AOFF_task_semsleeping 0x00000558 #define ASIZ_task_semsleeping 0x00000008 #define AOFF_task_tss 0x00000560 -#define ASIZ_task_tss 0x00000440 -#define AOFF_task_fs 0x000009a0 +#define ASIZ_task_tss 0x00000470 +#define AOFF_task_fs 0x000009d0 #define ASIZ_task_fs 0x00000008 -#define AOFF_task_files 0x000009a8 +#define AOFF_task_files 0x000009d8 #define ASIZ_task_files 0x00000008 -#define AOFF_task_mm 0x000009b0 +#define AOFF_task_mm 0x000009e0 #define ASIZ_task_mm 0x00000008 -#define AOFF_task_sigmask_lock 0x000009b8 +#define AOFF_task_sigmask_lock 0x000009e8 #define ASIZ_task_sigmask_lock 0x00000001 -#define AOFF_task_sig 0x000009c0 +#define AOFF_task_sig 0x000009f0 +#define ASIZ_task_sig 0x00000008 +#define AOFF_task_signal 0x000009f8 +#define ASIZ_task_signal 0x00000008 +#define AOFF_task_blocked 0x00000a00 +#define ASIZ_task_blocked 0x00000008 +#define AOFF_task_sigqueue 0x00000a08 +#define ASIZ_task_sigqueue 0x00000008 +#define AOFF_task_sigqueue_tail 0x00000a10 +#define ASIZ_task_sigqueue_tail 0x00000008 +#define AOFF_task_sas_ss_sp 0x00000a18 +#define ASIZ_task_sas_ss_sp 0x00000008 +#define AOFF_task_sas_ss_size 0x00000a20 +#define ASIZ_task_sas_ss_size 0x00000008 +#define ASIZ_task 0x00000a30 +#define AOFF_mm_mmap 0x00000000 +#define ASIZ_mm_mmap 0x00000008 +#define AOFF_mm_mmap_cache 0x00000008 +#define ASIZ_mm_mmap_cache 0x00000008 +#define AOFF_mm_pgd 0x00000010 +#define ASIZ_mm_pgd 0x00000008 +#define AOFF_mm_count 0x00000018 +#define ASIZ_mm_count 0x00000004 +#define AOFF_mm_map_count 0x0000001c +#define ASIZ_mm_map_count 0x00000004 +#define AOFF_mm_mmap_sem 0x00000020 +#define ASIZ_mm_mmap_sem 0x00000010 +#define AOFF_mm_context 0x00000030 +#define ASIZ_mm_context 0x00000008 +#define AOFF_mm_start_code 0x00000038 +#define ASIZ_mm_start_code 0x00000008 +#define AOFF_mm_end_code 0x00000040 +#define ASIZ_mm_end_code 0x00000008 +#define AOFF_mm_start_data 0x00000048 +#define ASIZ_mm_start_data 0x00000008 +#define AOFF_mm_end_data 0x00000050 +#define ASIZ_mm_end_data 0x00000008 +#define AOFF_mm_start_brk 0x00000058 +#define ASIZ_mm_start_brk 0x00000008 +#define AOFF_mm_brk 0x00000060 +#define ASIZ_mm_brk 0x00000008 +#define AOFF_mm_start_stack 0x00000068 +#define ASIZ_mm_start_stack 0x00000008 +#define AOFF_mm_arg_start 0x00000070 +#define ASIZ_mm_arg_start 0x00000008 +#define AOFF_mm_arg_end 0x00000078 +#define ASIZ_mm_arg_end 0x00000008 +#define AOFF_mm_env_start 0x00000080 +#define ASIZ_mm_env_start 0x00000008 +#define AOFF_mm_env_end 0x00000088 +#define ASIZ_mm_env_end 0x00000008 +#define AOFF_mm_rss 0x00000090 +#define ASIZ_mm_rss 0x00000008 +#define AOFF_mm_total_vm 0x00000098 +#define ASIZ_mm_total_vm 0x00000008 +#define AOFF_mm_locked_vm 0x000000a0 +#define ASIZ_mm_locked_vm 0x00000008 +#define AOFF_mm_def_flags 0x000000a8 +#define ASIZ_mm_def_flags 0x00000008 +#define AOFF_mm_cpu_vm_mask 0x000000b0 +#define ASIZ_mm_cpu_vm_mask 0x00000008 +#define AOFF_mm_segments 0x000000b8 +#define ASIZ_mm_segments 0x00000008 +#define ASIZ_mm 0x000000c0 +#define AOFF_thread_ksp 0x00000000 +#define ASIZ_thread_ksp 0x00000008 +#define AOFF_thread_wstate 0x00000008 +#define ASIZ_thread_wstate 0x00000002 +#define AOFF_thread_cwp 0x0000000a +#define ASIZ_thread_cwp 0x00000002 +#define AOFF_thread_flags 0x0000000c +#define ASIZ_thread_flags 0x00000002 +#define AOFF_thread_ctx 0x0000000e +#define ASIZ_thread_ctx 0x00000002 +#define AOFF_thread_w_saved 0x00000010 +#define ASIZ_thread_w_saved 0x00000002 +#define AOFF_thread_new_signal 0x00000012 +#define ASIZ_thread_new_signal 0x00000002 +#define AOFF_thread____pad 0x00000014 +#define ASIZ_thread____pad 0x00000004 +#define AOFF_thread_current_ds 0x00000018 +#define ASIZ_thread_current_ds 0x00000008 +#define AOFF_thread_kregs 0x00000020 +#define ASIZ_thread_kregs 0x00000008 +#define AOFF_thread_utraps 0x00000028 +#define ASIZ_thread_utraps 0x00000008 +#define AOFF_thread_reg_window 0x00000030 +#define ASIZ_thread_reg_window 0x00000380 +#define AOFF_thread_rwbuf_stkptrs 0x000003b0 +#define ASIZ_thread_rwbuf_stkptrs 0x00000038 +#define AOFF_thread_sig_address 0x000003e8 +#define ASIZ_thread_sig_address 0x00000008 +#define AOFF_thread_sig_desc 0x000003f0 +#define ASIZ_thread_sig_desc 0x00000008 +#define AOFF_thread_user_cntd0 0x000003f8 +#define ASIZ_thread_user_cntd0 0x00000008 +#define AOFF_thread_user_cntd1 0x00000400 +#define ASIZ_thread_user_cntd1 0x00000008 +#define AOFF_thread_kernel_cntd0 0x00000408 +#define ASIZ_thread_kernel_cntd0 0x00000008 +#define AOFF_thread_kernel_cntd1 0x00000410 +#define ASIZ_thread_kernel_cntd1 0x00000008 +#define AOFF_thread_pcr_reg 0x00000418 +#define ASIZ_thread_pcr_reg 0x00000008 +#define AOFF_thread_fpdepth 0x00000420 +#define ASIZ_thread_fpdepth 0x00000001 +#define AOFF_thread_fpsaved 0x00000421 +#define ASIZ_thread_fpsaved 0x00000007 +#define AOFF_thread_gsr 0x00000428 +#define ASIZ_thread_gsr 0x00000007 +#define AOFF_thread_xfsr 0x00000430 +#define ASIZ_thread_xfsr 0x00000038 +#define ASIZ_thread 0x00000470 + +#else /* SPIN_LOCK_DEBUG */ + +#define AOFF_task_state 0x00000000 +#define ASIZ_task_state 0x00000008 +#define AOFF_task_flags 0x00000008 +#define ASIZ_task_flags 0x00000008 +#define AOFF_task_sigpending 0x00000010 +#define ASIZ_task_sigpending 0x00000004 +#define AOFF_task_addr_limit 0x00000018 +#define ASIZ_task_addr_limit 0x00000008 +#define AOFF_task_exec_domain 0x00000020 +#define ASIZ_task_exec_domain 0x00000008 +#define AOFF_task_need_resched 0x00000028 +#define ASIZ_task_need_resched 0x00000008 +#define AOFF_task_counter 0x00000030 +#define ASIZ_task_counter 0x00000008 +#define AOFF_task_priority 0x00000038 +#define ASIZ_task_priority 0x00000008 +#define AOFF_task_has_cpu 0x00000040 +#define ASIZ_task_has_cpu 0x00000004 +#define AOFF_task_processor 0x00000044 +#define ASIZ_task_processor 0x00000004 +#define AOFF_task_last_processor 0x00000048 +#define ASIZ_task_last_processor 0x00000004 +#define AOFF_task_lock_depth 0x0000004c +#define ASIZ_task_lock_depth 0x00000004 +#define AOFF_task_next_task 0x00000050 +#define ASIZ_task_next_task 0x00000008 +#define AOFF_task_prev_task 0x00000058 +#define ASIZ_task_prev_task 0x00000008 +#define AOFF_task_next_run 0x00000060 +#define ASIZ_task_next_run 0x00000008 +#define AOFF_task_prev_run 0x00000068 +#define ASIZ_task_prev_run 0x00000008 +#define AOFF_task_binfmt 0x00000070 +#define ASIZ_task_binfmt 0x00000008 +#define AOFF_task_exit_code 0x00000078 +#define ASIZ_task_exit_code 0x00000004 +#define AOFF_task_exit_signal 0x0000007c +#define ASIZ_task_exit_signal 0x00000004 +#define AOFF_task_pdeath_signal 0x00000080 +#define ASIZ_task_pdeath_signal 0x00000004 +#define AOFF_task_personality 0x00000088 +#define ASIZ_task_personality 0x00000008 +#define AOFF_task_pid 0x00000094 +#define ASIZ_task_pid 0x00000004 +#define AOFF_task_pgrp 0x00000098 +#define ASIZ_task_pgrp 0x00000004 +#define AOFF_task_tty_old_pgrp 0x0000009c +#define ASIZ_task_tty_old_pgrp 0x00000004 +#define AOFF_task_session 0x000000a0 +#define ASIZ_task_session 0x00000004 +#define AOFF_task_leader 0x000000a4 +#define ASIZ_task_leader 0x00000004 +#define AOFF_task_p_opptr 0x000000a8 +#define ASIZ_task_p_opptr 0x00000008 +#define AOFF_task_p_pptr 0x000000b0 +#define ASIZ_task_p_pptr 0x00000008 +#define AOFF_task_p_cptr 0x000000b8 +#define ASIZ_task_p_cptr 0x00000008 +#define AOFF_task_p_ysptr 0x000000c0 +#define ASIZ_task_p_ysptr 0x00000008 +#define AOFF_task_p_osptr 0x000000c8 +#define ASIZ_task_p_osptr 0x00000008 +#define AOFF_task_pidhash_next 0x000000d0 +#define ASIZ_task_pidhash_next 0x00000008 +#define AOFF_task_pidhash_pprev 0x000000d8 +#define ASIZ_task_pidhash_pprev 0x00000008 +#define AOFF_task_tarray_ptr 0x000000e0 +#define ASIZ_task_tarray_ptr 0x00000008 +#define AOFF_task_wait_chldexit 0x000000e8 +#define ASIZ_task_wait_chldexit 0x00000008 +#define AOFF_task_policy 0x000000f0 +#define ASIZ_task_policy 0x00000008 +#define AOFF_task_rt_priority 0x000000f8 +#define ASIZ_task_rt_priority 0x00000008 +#define AOFF_task_it_real_value 0x00000100 +#define ASIZ_task_it_real_value 0x00000008 +#define AOFF_task_it_prof_value 0x00000108 +#define ASIZ_task_it_prof_value 0x00000008 +#define AOFF_task_it_virt_value 0x00000110 +#define ASIZ_task_it_virt_value 0x00000008 +#define AOFF_task_it_real_incr 0x00000118 +#define ASIZ_task_it_real_incr 0x00000008 +#define AOFF_task_it_prof_incr 0x00000120 +#define ASIZ_task_it_prof_incr 0x00000008 +#define AOFF_task_it_virt_incr 0x00000128 +#define ASIZ_task_it_virt_incr 0x00000008 +#define AOFF_task_real_timer 0x00000130 +#define ASIZ_task_real_timer 0x00000028 +#define AOFF_task_times 0x00000158 +#define ASIZ_task_times 0x00000020 +#define AOFF_task_start_time 0x00000178 +#define ASIZ_task_start_time 0x00000008 +#define AOFF_task_per_cpu_utime 0x00000180 +#define ASIZ_task_per_cpu_utime 0x00000100 +#define AOFF_task_min_flt 0x00000380 +#define ASIZ_task_min_flt 0x00000008 +#define AOFF_task_maj_flt 0x00000388 +#define ASIZ_task_maj_flt 0x00000008 +#define AOFF_task_nswap 0x00000390 +#define ASIZ_task_nswap 0x00000008 +#define AOFF_task_cmin_flt 0x00000398 +#define ASIZ_task_cmin_flt 0x00000008 +#define AOFF_task_cmaj_flt 0x000003a0 +#define ASIZ_task_cmaj_flt 0x00000008 +#define AOFF_task_cnswap 0x000003a8 +#define ASIZ_task_cnswap 0x00000008 +#define AOFF_task_swap_address 0x000003b8 +#define ASIZ_task_swap_address 0x00000008 +#define AOFF_task_old_maj_flt 0x000003c0 +#define ASIZ_task_old_maj_flt 0x00000008 +#define AOFF_task_dec_flt 0x000003c8 +#define ASIZ_task_dec_flt 0x00000008 +#define AOFF_task_swap_cnt 0x000003d0 +#define ASIZ_task_swap_cnt 0x00000008 +#define AOFF_task_uid 0x000003d8 +#define ASIZ_task_uid 0x00000004 +#define AOFF_task_euid 0x000003dc +#define ASIZ_task_euid 0x00000004 +#define AOFF_task_suid 0x000003e0 +#define ASIZ_task_suid 0x00000004 +#define AOFF_task_fsuid 0x000003e4 +#define ASIZ_task_fsuid 0x00000004 +#define AOFF_task_gid 0x000003e8 +#define ASIZ_task_gid 0x00000004 +#define AOFF_task_egid 0x000003ec +#define ASIZ_task_egid 0x00000004 +#define AOFF_task_sgid 0x000003f0 +#define ASIZ_task_sgid 0x00000004 +#define AOFF_task_fsgid 0x000003f4 +#define ASIZ_task_fsgid 0x00000004 +#define AOFF_task_ngroups 0x000003f8 +#define ASIZ_task_ngroups 0x00000004 +#define AOFF_task_groups 0x000003fc +#define ASIZ_task_groups 0x00000080 +#define AOFF_task_cap_effective 0x0000047c +#define ASIZ_task_cap_effective 0x00000004 +#define AOFF_task_cap_inheritable 0x00000480 +#define ASIZ_task_cap_inheritable 0x00000004 +#define AOFF_task_cap_permitted 0x00000484 +#define ASIZ_task_cap_permitted 0x00000004 +#define AOFF_task_user 0x00000488 +#define ASIZ_task_user 0x00000008 +#define AOFF_task_rlim 0x00000490 +#define ASIZ_task_rlim 0x000000a0 +#define AOFF_task_used_math 0x00000530 +#define ASIZ_task_used_math 0x00000002 +#define AOFF_task_comm 0x00000532 +#define ASIZ_task_comm 0x00000010 +#define AOFF_task_link_count 0x00000544 +#define ASIZ_task_link_count 0x00000004 +#define AOFF_task_tty 0x00000548 +#define ASIZ_task_tty 0x00000008 +#define AOFF_task_semundo 0x00000550 +#define ASIZ_task_semundo 0x00000008 +#define AOFF_task_semsleeping 0x00000558 +#define ASIZ_task_semsleeping 0x00000008 +#define AOFF_task_tss 0x00000560 +#define ASIZ_task_tss 0x00000470 +#define AOFF_task_fs 0x000009d0 +#define ASIZ_task_fs 0x00000008 +#define AOFF_task_files 0x000009d8 +#define ASIZ_task_files 0x00000008 +#define AOFF_task_mm 0x000009e0 +#define ASIZ_task_mm 0x00000008 +#define AOFF_task_sigmask_lock 0x000009e8 +#define ASIZ_task_sigmask_lock 0x0000000c +#define AOFF_task_sig 0x000009f8 #define ASIZ_task_sig 0x00000008 -#define AOFF_task_signal 0x000009c8 +#define AOFF_task_signal 0x00000a00 #define ASIZ_task_signal 0x00000008 -#define AOFF_task_blocked 0x000009d0 +#define AOFF_task_blocked 0x00000a08 #define ASIZ_task_blocked 0x00000008 -#define AOFF_task_sigqueue 0x000009d8 +#define AOFF_task_sigqueue 0x00000a10 #define ASIZ_task_sigqueue 0x00000008 -#define AOFF_task_sigqueue_tail 0x000009e0 +#define AOFF_task_sigqueue_tail 0x00000a18 #define ASIZ_task_sigqueue_tail 0x00000008 -#define AOFF_task_sas_ss_sp 0x000009e8 +#define AOFF_task_sas_ss_sp 0x00000a20 #define ASIZ_task_sas_ss_sp 0x00000008 -#define AOFF_task_sas_ss_size 0x000009f0 +#define AOFF_task_sas_ss_size 0x00000a28 #define ASIZ_task_sas_ss_size 0x00000008 +#define ASIZ_task 0x00000a30 #define AOFF_mm_mmap 0x00000000 #define ASIZ_mm_mmap 0x00000008 #define AOFF_mm_mmap_cache 0x00000008 @@ -501,6 +799,7 @@ #define ASIZ_mm_cpu_vm_mask 0x00000008 #define AOFF_mm_segments 0x000000b8 #define ASIZ_mm_segments 0x00000008 +#define ASIZ_mm 0x000000c0 #define AOFF_thread_ksp 0x00000000 #define ASIZ_thread_ksp 0x00000008 #define AOFF_thread_wstate 0x00000008 @@ -531,14 +830,26 @@ #define ASIZ_thread_sig_address 0x00000008 #define AOFF_thread_sig_desc 0x000003f0 #define ASIZ_thread_sig_desc 0x00000008 -#define AOFF_thread_fpdepth 0x000003f8 +#define AOFF_thread_user_cntd0 0x000003f8 +#define ASIZ_thread_user_cntd0 0x00000008 +#define AOFF_thread_user_cntd1 0x00000400 +#define ASIZ_thread_user_cntd1 0x00000008 +#define AOFF_thread_kernel_cntd0 0x00000408 +#define ASIZ_thread_kernel_cntd0 0x00000008 +#define AOFF_thread_kernel_cntd1 0x00000410 +#define ASIZ_thread_kernel_cntd1 0x00000008 +#define AOFF_thread_pcr_reg 0x00000418 +#define ASIZ_thread_pcr_reg 0x00000008 +#define AOFF_thread_fpdepth 0x00000420 #define ASIZ_thread_fpdepth 0x00000001 -#define AOFF_thread_fpsaved 0x000003f9 +#define AOFF_thread_fpsaved 0x00000421 #define ASIZ_thread_fpsaved 0x00000007 -#define AOFF_thread_gsr 0x00000400 +#define AOFF_thread_gsr 0x00000428 #define ASIZ_thread_gsr 0x00000007 -#define AOFF_thread_xfsr 0x00000408 +#define AOFF_thread_xfsr 0x00000430 #define ASIZ_thread_xfsr 0x00000038 +#define ASIZ_thread 0x00000470 +#endif /* SPIN_LOCK_DEBUG */ #endif /* __SMP__ */ diff --git a/include/asm-sparc64/audioio.h b/include/asm-sparc64/audioio.h index 8d3000ea9..ca5e06538 100644 --- a/include/asm-sparc64/audioio.h +++ b/include/asm-sparc64/audioio.h @@ -88,6 +88,7 @@ typedef struct audio_info { #define AUDIO_ENCODING_ULAW (1) /* u-law encoding */ #define AUDIO_ENCODING_ALAW (2) /* A-law encoding */ #define AUDIO_ENCODING_LINEAR (3) /* Linear PCM encoding */ +#define AUDIO_ENCODING_FLOAT (4) /* IEEE float (-1. <-> +1.) */ #define AUDIO_ENCODING_DVI (104) /* DVI ADPCM */ #define AUDIO_ENCODING_LINEAR8 (105) /* 8 bit UNSIGNED */ #define AUDIO_ENCODING_LINEARLE (106) /* Linear PCM LE encoding */ @@ -139,8 +140,7 @@ typedef struct audio_info { #define AUDIO_LINE_IN 0x02 /* input from line in */ #define AUDIO_CD 0x04 /* input from on-board CD inputs */ #define AUDIO_INTERNAL_CD_IN AUDIO_CD /* input from internal CDROM */ -/* Supposedly an undocumented feature of the 4231 */ -#define AUDIO_ANALOG_LOOPBACK 0x40 +#define AUDIO_ANALOG_LOOPBACK 0x40 /* input from output */ /* @@ -227,22 +227,10 @@ typedef struct audio_device { * if the hardware supports this. The argument is TRUE to set loopback, * FALSE to reset to normal operation. If the hardware does not support * internal loopback, the ioctl should fail with EINVAL. + * Causes ADC data to be digitally mixed in and sent to the DAC. */ #define AUDIO_DIAG_LOOPBACK _IOW('A', 101, int) -#ifdef notneeded -/* - * Structure sent up as a M_PROTO message on trace streams - */ -typedef struct audtrace_hdr audtrace_hdr_t; -struct audtrace_hdr { - unsigned int seq; /* Sequence number (per-aud_stream) */ - int type; /* device-dependent */ - struct timeval timestamp; - char _f[8]; /* filler */ -}; -#endif - /* * Linux kernel internal implementation. */ @@ -257,15 +245,34 @@ struct audtrace_hdr { #define SDF_OPEN_WRITE 0x00000001 #define SDF_OPEN_READ 0x00000002 +struct sparcaudio_ringbuffer +{ + __u8 *rb_start, *rb_end; /* start, end of this memory buffer */ + __u8 *rb_in, *rb_out; /* input, output pointers */ + + int rb_fragsize; /* size of an audio frag */ + int rb_numfrags; /* number of frags */ + + int rb_count, rb_hiwat, rb_lowat; /* bytes in use, hi/lo wat points */ + + int rb_bufsize; /* total size of buffer */ +}; + struct sparcaudio_driver { const char * name; struct sparcaudio_operations *ops; void *private; unsigned long flags; + struct strevent *sd_siglist; + /* duplex: 0=simplex, 1=duplex, 2=loop */ + int sd_sigflags, duplex; + + /* Which audio device are we? */ + int index; - /* This device */ - struct linux_sbus_device *dev; + /* This device */ + struct linux_sbus_device *dev; /* Processes blocked on open() sit here. */ struct wait_queue *open_wait; @@ -273,32 +280,37 @@ struct sparcaudio_driver /* Task queue for this driver's bottom half. */ struct tq_struct tqueue; + /* Start of ring buffer support */ + __u8 *input_buffer, *output_buffer; + /* Support for a circular queue of output buffers. */ __u8 **output_buffers; - size_t *output_sizes, output_size; - int num_output_buffers, output_front, output_rear; - int output_count, output_active, playing_count; + size_t *output_sizes, output_size, output_buffer_size; + int num_output_buffers, output_front, output_rear, output_offset; + int output_count, output_active, playing_count, output_eof; struct wait_queue *output_write_wait, *output_drain_wait; + char *output_notify; /* Support for a circular queue of input buffers. */ __u8 **input_buffers; - int input_offset; - int num_input_buffers, input_front, input_rear; + size_t *input_sizes, input_size, input_buffer_size; + int num_input_buffers, input_front, input_rear, input_offset; int input_count, input_active, recording_count; struct wait_queue *input_read_wait; + + /* Hack to make it look like we support variable size buffers. */ + int buffer_size; }; struct sparcaudio_operations { int (*open)(struct inode *, struct file *, struct sparcaudio_driver *); - void (*release)(struct inode *, struct file *, - struct sparcaudio_driver *); - int (*ioctl)(struct inode *, struct file *, unsigned int, - unsigned long, struct sparcaudio_driver *); + void (*release)(struct inode *, struct file *, struct sparcaudio_driver *); + int (*ioctl)(struct inode *, struct file *, unsigned int, unsigned long, + struct sparcaudio_driver *); /* Ask driver to begin playing a buffer. */ - void (*start_output)(struct sparcaudio_driver *, __u8 *, - unsigned long); + void (*start_output)(struct sparcaudio_driver *, __u8 *, unsigned long); /* Ask driver to stop playing a buffer. */ void (*stop_output)(struct sparcaudio_driver *); @@ -382,35 +394,125 @@ struct sparcaudio_operations /* Get and set output mute */ int (*set_output_muted)(struct sparcaudio_driver *, int); int (*get_output_muted)(struct sparcaudio_driver *); + + /* Get and set output pause */ + int (*set_output_pause)(struct sparcaudio_driver *, int); + int (*get_output_pause)(struct sparcaudio_driver *); + + /* Get and set input pause */ + int (*set_input_pause)(struct sparcaudio_driver *, int); + int (*get_input_pause)(struct sparcaudio_driver *); + + /* Get and set output samples */ + int (*set_output_samples)(struct sparcaudio_driver *, int); + int (*get_output_samples)(struct sparcaudio_driver *); + + /* Get and set input samples */ + int (*set_input_samples)(struct sparcaudio_driver *, int); + int (*get_input_samples)(struct sparcaudio_driver *); + + /* Get and set output error */ + int (*set_output_error)(struct sparcaudio_driver *, int); + int (*get_output_error)(struct sparcaudio_driver *); + + /* Get and set input error */ + int (*set_input_error)(struct sparcaudio_driver *, int); + int (*get_input_error)(struct sparcaudio_driver *); + + /* Get supported encodings */ + int (*get_formats)(struct sparcaudio_driver *); }; -extern int register_sparcaudio_driver(struct sparcaudio_driver *); -extern int unregister_sparcaudio_driver(struct sparcaudio_driver *); +extern int register_sparcaudio_driver(struct sparcaudio_driver *, int); +extern int unregister_sparcaudio_driver(struct sparcaudio_driver *, int); extern void sparcaudio_output_done(struct sparcaudio_driver *, int); -extern void sparcaudio_input_done(struct sparcaudio_driver *); +extern void sparcaudio_input_done(struct sparcaudio_driver *, int); extern int sparcaudio_init(void); extern int amd7930_init(void); extern int cs4231_init(void); #endif +/* Mixer helper ioctls */ +#define right(a) (((a >> 8) & 0xff) % 101) +#define left(a) ((a & 0xff) % 101) + /* Macros to convert between mixer stereo volumes and gain (mono) */ -#define s_to_m(a) (((((a) >> 8) & 0x7f) + ((a) & 0x7f)) / 2) -#define m_to_s(a) (((a) << 8) + (a)) +#define s_to_m(a) ((((left(a) + right(a)) * 255) / 200) % 256) +#define m_to_s(a) ((a * 100 / 255) + ((a * 100 / 255) << 8)) /* convert mixer stereo volume to balance */ -#define s_to_b(a) (AUDIO_RIGHT_BALANCE * ((((a) >> 8) & 0xff) / (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2))) +#define s_to_b(a) (s_to_g(a) == 0) ? 32 : ((left(a) * AUDIO_RIGHT_BALANCE / (left(a) + right(a)))) /* convert mixer stereo volume to audio gain */ -#define s_to_g(a) (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2) +#define s_to_g(a) ((((right(a) + left(a)) * 255) / 200) % 256) /* convert gain a and balance b to mixer volume */ -#define b_to_s(a,b) ((a * (b / AUDIO_RIGHT_BALANCE) << 8) + (a * (1 - (b / AUDIO_RIGHT_BALANCE)))) +#define b_to_s(a,b) (((((b * a * 200) / (AUDIO_RIGHT_BALANCE * 255)) % 100) << 8) + ((((AUDIO_RIGHT_BALANCE - b) * a * 200) / (AUDIO_RIGHT_BALANCE * 255)) % 100)) + +/* Device minor numbers */ #define SPARCAUDIO_MIXER_MINOR 0 -#define SPARCAUDIO_DSP16_MINOR 1 +/* No sequencer (1) */ +/* No midi (2) */ #define SPARCAUDIO_DSP_MINOR 3 #define SPARCAUDIO_AUDIO_MINOR 4 -#define SPARCAUDIO_AUDIOCTL_MINOR 5 +#define SPARCAUDIO_DSP16_MINOR 5 #define SPARCAUDIO_STATUS_MINOR 6 +#define SPARCAUDIO_AUDIOCTL_MINOR 7 +/* No sequencer l2 (8) */ +/* No sound processor (9) */ + +/* allocate 2^SPARCAUDIO_DEVICE_SHIFT minors per audio device */ +#define SPARCAUDIO_DEVICE_SHIFT 4 + +/* With the coming of dummy devices this should perhaps be as high as 5? */ +#define SPARCAUDIO_MAX_DEVICES 3 + +/* Streams crap for realaudio */ + +typedef +struct strevent { + struct strevent *se_next; /* next event for this stream or NULL*/ + struct strevent *se_prev; /* previous event for this stream or last + * event if this is the first one*/ + pid_t se_pid; /* process to be signaled */ + short se_evs; /* events wanted */ +} strevent_t; + +typedef +struct stdata +{ + struct stdata *sd_next ; /* all stdatas are linked together */ + struct stdata *sd_prev ; + struct strevent *sd_siglist; /* processes to be sent SIGPOLL */ + int sd_sigflags; /* logical OR of all siglist events */ +} stdata_t; + +#define I_NREAD _IOR('S',01, int) +#define I_NREAD_SOLARIS (('S'<<8)|1) + +#define I_FLUSH _IO('S',05) +#define I_FLUSH_SOLARIS (('S'<<8)|5) +#define FLUSHR 1 /* flush read queue */ +#define FLUSHW 2 /* flush write queue */ +#define FLUSHRW 3 /* flush both queues */ + +#define I_SETSIG _IO('S',011) +#define I_SETSIG_SOLARIS (('S'<<8)|11) +#define S_INPUT 0x01 +#define S_HIPRI 0x02 +#define S_OUTPUT 0x04 +#define S_MSG 0x08 +#define S_ERROR 0x0010 +#define S_HANGUP 0x0020 +#define S_RDNORM 0x0040 +#define S_WRNORM S_OUTPUT +#define S_RDBAND 0x0080 +#define S_WRBAND 0x0100 +#define S_BANDURG 0x0200 +#define S_ALL 0x03FF + +#define I_GETSIG _IOR('S',012,int) +#define I_GETSIG_SOLARIS (('S'<<8)|12) #endif diff --git a/include/asm-sparc64/dma.h b/include/asm-sparc64/dma.h index aedfa7ddd..e6175ab4f 100644 --- a/include/asm-sparc64/dma.h +++ b/include/asm-sparc64/dma.h @@ -1,4 +1,4 @@ -/* $Id: dma.h,v 1.8 1998/04/13 07:27:06 davem Exp $ +/* $Id: dma.h,v 1.10 1998/10/27 23:28:50 davem Exp $ * include/asm-sparc64/dma.h * * Copyright 1996 (C) David S. Miller (davem@caip.rutgers.edu) @@ -13,6 +13,18 @@ #include <asm/sbus.h> #include <asm/delay.h> #include <asm/oplib.h> +#include <asm/spinlock.h> + +extern spinlock_t dma_spin_lock; + +#define claim_dma_lock() \ +({ unsigned long flags; \ + spin_lock_irqsave(&dma_spin_lock, flags); \ + flags; \ +}) + +#define release_dma_lock(__flags) \ + spin_unlock_irqrestore(&dma_spin_lock, __flags); /* These are irrelevant for Sparc DMA, but we leave it in so that * things can compile. diff --git a/include/asm-sparc64/elf.h b/include/asm-sparc64/elf.h index 509d5c254..521bfb72a 100644 --- a/include/asm-sparc64/elf.h +++ b/include/asm-sparc64/elf.h @@ -1,4 +1,4 @@ -/* $Id: elf.h,v 1.17 1998/03/23 10:07:06 jj Exp $ */ +/* $Id: elf.h,v 1.18 1998/09/09 05:36:08 davem Exp $ */ #ifndef __ASM_SPARC64_ELF_H #define __ASM_SPARC64_ELF_H @@ -9,13 +9,6 @@ #include <asm/ptrace.h> #include <asm/processor.h> -typedef unsigned long elf_greg_t; - -#define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -typedef unsigned long elf_fpregset_t; - /* * These are used to set parameters in the core dumps. */ @@ -23,6 +16,18 @@ typedef unsigned long elf_fpregset_t; #define ELF_ARCH EM_SPARCV9 #define ELF_CLASS ELFCLASS64 #define ELF_DATA ELFDATA2MSB + +typedef unsigned long elf_greg_t; + +#define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) +typedef elf_greg_t elf_gregset_t[ELF_NGREG]; + +typedef struct { + unsigned long pr_regs[32]; + unsigned long pr_fsr; + unsigned long pr_gsr; + unsigned long pr_fprs; +} elf_fpregset_t; #endif /* diff --git a/include/asm-sparc64/fcntl.h b/include/asm-sparc64/fcntl.h index 1db734bed..e0352b8d9 100644 --- a/include/asm-sparc64/fcntl.h +++ b/include/asm-sparc64/fcntl.h @@ -1,4 +1,4 @@ -/* $Id: fcntl.h,v 1.3 1997/04/14 17:05:20 jj Exp $ */ +/* $Id: fcntl.h,v 1.5 1998/10/26 20:03:15 davem Exp $ */ #ifndef _SPARC64_FCNTL_H #define _SPARC64_FCNTL_H @@ -17,6 +17,8 @@ #define O_SYNC 0x2000 #define O_NONBLOCK 0x4000 #define O_NOCTTY 0x8000 /* not fcntl */ +#define O_DIRECTORY 0x10000 /* must be a directory */ +#define O_NOFOLLOW 0x20000 /* don't follow links */ #define F_DUPFD 0 /* dup */ #define F_GETFD 1 /* get f_flags */ diff --git a/include/asm-sparc64/floppy.h b/include/asm-sparc64/floppy.h index e90a7aca1..33550d4e1 100644 --- a/include/asm-sparc64/floppy.h +++ b/include/asm-sparc64/floppy.h @@ -1,4 +1,4 @@ -/* $Id: floppy.h,v 1.11 1998/05/22 14:33:39 jj Exp $ +/* $Id: floppy.h,v 1.16 1998/10/06 20:32:15 ecd Exp $ * asm-sparc64/floppy.h: Sparc specific parts of the Floppy driver. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -22,6 +22,14 @@ #include <asm/sbus.h> #include <asm/irq.h> + +/* + * Define this to enable exchanging drive 0 and 1 if only drive 1 is + * probed on PCI machines. + */ +#undef PCI_FDC_SWAP_DRIVES + + /* References: * 1) Netbsd Sun floppy driver. * 2) NCR 82077 controller manual @@ -31,7 +39,7 @@ struct sun_flpy_controller { volatile unsigned char status1_82077; /* Auxiliary Status reg. 1 */ volatile unsigned char status2_82077; /* Auxiliary Status reg. 2 */ volatile unsigned char dor_82077; /* Digital Output reg. */ - volatile unsigned char tapectl_82077; /* What the? Tape control reg? */ + volatile unsigned char tapectl_82077; /* Tape Control reg */ volatile unsigned char status_82077; /* Main Status Register. */ #define drs_82077 status_82077 /* Digital Rate Select reg. */ volatile unsigned char data_82077; /* Data fifo. */ @@ -41,7 +49,7 @@ struct sun_flpy_controller { }; /* You'll only ever find one controller on an Ultra anyways. */ -static struct sun_flpy_controller *sun_fdc = NULL; +static struct sun_flpy_controller *sun_fdc = (struct sun_flpy_controller *)-1; volatile unsigned char *fdc_status; static struct linux_sbus_device *floppy_sdev = NULL; @@ -96,19 +104,20 @@ static struct sun_floppy_ops sun_fdops; /* XXX This isn't really correct. XXX */ #define get_dma_residue(x) (0) -#define FLOPPY0_TYPE 4 -#define FLOPPY1_TYPE 0 - /* Super paranoid... */ #undef HAVE_DISABLE_HLT +static int sun_floppy_types[2] = { 0, 0 }; + /* Here is where we catch the floppy driver trying to initialize, * therefore this is where we call the PROM device tree probing * routine etc. on the Sparc. */ -#define FDC1 sun_floppy_init() +#define FLOPPY0_TYPE sun_floppy_init() +#define FLOPPY1_TYPE sun_floppy_types[1] -static int FDC2 = -1; +#define FDC1 ((unsigned long)sun_fdc) +static int FDC2 = -1; #define N_FDC 1 #define N_DRIVE 8 @@ -269,8 +278,10 @@ static int sun_fd_eject(int drive) #ifdef CONFIG_PCI #include <asm/ebus.h> +#include <asm/ns87303.h> -static struct linux_ebus_dma *sun_fd_ebus_dma; +static struct linux_ebus_dma *sun_pci_fd_ebus_dma; +static int sun_pci_broken_drive = -1; extern void floppy_interrupt(int irq, void *dev_id, struct pt_regs *regs); @@ -284,44 +295,81 @@ static void sun_pci_fd_outb(unsigned char val, unsigned long port) outb(val, port); } +static void sun_pci_fd_broken_outb(unsigned char val, unsigned long port) +{ + /* + * XXX: Due to SUN's broken floppy connector on AX and AXi + * we need to turn on MOTOR_0 also, if the floppy is + * jumpered to DS1 (like most PC floppies are). I hope + * this does not hurt correct hardware like the AXmp. + * (Eddie, Sep 12 1998). + */ + if (port == ((unsigned long)sun_fdc) + 2) { + if (((val & 0x03) == sun_pci_broken_drive) && (val & 0x20)) { + val |= 0x10; + } + } + outb(val, port); +} + +#ifdef PCI_FDC_SWAP_DRIVES +static void sun_pci_fd_lde_broken_outb(unsigned char val, unsigned long port) +{ + /* + * XXX: Due to SUN's broken floppy connector on AX and AXi + * we need to turn on MOTOR_0 also, if the floppy is + * jumpered to DS1 (like most PC floppies are). I hope + * this does not hurt correct hardware like the AXmp. + * (Eddie, Sep 12 1998). + */ + if (port == ((unsigned long)sun_fdc) + 2) { + if (((val & 0x03) == sun_pci_broken_drive) && (val & 0x10)) { + val &= ~(0x03); + val |= 0x21; + } + } + outb(val, port); +} +#endif /* PCI_FDC_SWAP_DRIVES */ + static void sun_pci_fd_reset_dma(void) { unsigned int dcsr; - writel(EBUS_DCSR_RESET, &sun_fd_ebus_dma->dcsr); + writel(EBUS_DCSR_RESET, &sun_pci_fd_ebus_dma->dcsr); dcsr = EBUS_DCSR_BURST_SZ_16 | EBUS_DCSR_TCI_DIS | EBUS_DCSR_EN_CNT | EBUS_DCSR_INT_EN; - writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr); + writel(dcsr, (unsigned long)&sun_pci_fd_ebus_dma->dcsr); } static void sun_pci_fd_enable_dma(void) { unsigned int dcsr; - dcsr = readl(&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_pci_fd_ebus_dma->dcsr); dcsr |= EBUS_DCSR_EN_DMA; - writel(dcsr, &sun_fd_ebus_dma->dcsr); + writel(dcsr, &sun_pci_fd_ebus_dma->dcsr); } static void sun_pci_fd_disable_dma(void) { unsigned int dcsr; - dcsr = readl(&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_pci_fd_ebus_dma->dcsr); while (dcsr & EBUS_DCSR_DRAIN) - dcsr = readl(&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_pci_fd_ebus_dma->dcsr); dcsr &= ~(EBUS_DCSR_EN_DMA); if (dcsr & EBUS_DCSR_ERR_PEND) sun_pci_fd_reset_dma(); - writel(dcsr, &sun_fd_ebus_dma->dcsr); + writel(dcsr, &sun_pci_fd_ebus_dma->dcsr); } static void sun_pci_fd_set_dma_mode(int mode) { unsigned int dcsr; - dcsr = readl(&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_pci_fd_ebus_dma->dcsr); dcsr |= EBUS_DCSR_EN_CNT | EBUS_DCSR_TC; /* * For EBus WRITE means to system memory, which is @@ -331,41 +379,41 @@ static void sun_pci_fd_set_dma_mode(int mode) dcsr &= ~(EBUS_DCSR_WRITE); else dcsr |= EBUS_DCSR_WRITE; - writel(dcsr, &sun_fd_ebus_dma->dcsr); + writel(dcsr, &sun_pci_fd_ebus_dma->dcsr); } static void sun_pci_fd_set_dma_count(int length) { - writel(length, &sun_fd_ebus_dma->dbcr); + writel(length, &sun_pci_fd_ebus_dma->dbcr); } static void sun_pci_fd_set_dma_addr(char *buffer) { unsigned int addr = virt_to_bus(buffer); - writel(addr, &sun_fd_ebus_dma->dacr); + writel(addr, &sun_pci_fd_ebus_dma->dacr); } static unsigned int sun_pci_get_dma_residue(void) { - return readl(&sun_fd_ebus_dma->dbcr); + return readl(&sun_pci_fd_ebus_dma->dbcr); } static void sun_pci_fd_enable_irq(void) { unsigned int dcsr; - dcsr = readl(&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_pci_fd_ebus_dma->dcsr); dcsr |= EBUS_DCSR_INT_EN; - writel(dcsr, &sun_fd_ebus_dma->dcsr); + writel(dcsr, &sun_pci_fd_ebus_dma->dcsr); } static void sun_pci_fd_disable_irq(void) { unsigned int dcsr; - dcsr = readl(&sun_fd_ebus_dma->dcsr); + dcsr = readl(&sun_pci_fd_ebus_dma->dcsr); dcsr &= ~(EBUS_DCSR_INT_EN); - writel(dcsr, &sun_fd_ebus_dma->dcsr); + writel(dcsr, &sun_pci_fd_ebus_dma->dcsr); } static int sun_pci_fd_request_irq(void) @@ -390,7 +438,101 @@ static int sun_pci_fd_eject(int drive) { return -EINVAL; } -#endif + + +/* + * Floppy probing, we'd like to use /dev/fd0 for a single Floppy on PCI, + * even if this is configured using DS1, thus looks like /dev/fd1 with + * the cabling used in Ultras. + */ +#define DOR (port + 2) +#define MSR (port + 4) +#define FIFO (port + 5) + +static void sun_pci_fd_out_byte(unsigned long port, unsigned char val, + unsigned long reg) +{ + unsigned char status; + int timeout = 1000; + + while (!((status = inb(MSR)) & 0x80) && --timeout) + udelay(100); + outb(val, reg); +} + +static unsigned char sun_pci_fd_sensei(unsigned long port) +{ + unsigned char result[2] = { 0x70, 0x00 }; + unsigned char status; + int i = 0; + + sun_pci_fd_out_byte(port, 0x08, FIFO); + do { + int timeout = 1000; + + while (!((status = inb(MSR)) & 0x80) && --timeout) + udelay(100); + + if (!timeout) + break; + + if ((status & 0xf0) == 0xd0) + result[i++] = inb(FIFO); + else + break; + } while (i < 2); + + return result[0]; +} + +static void sun_pci_fd_reset(unsigned long port) +{ + unsigned char mask = 0x00; + unsigned char status; + int timeout = 10000; + + outb(0x80, MSR); + do { + status = sun_pci_fd_sensei(port); + if ((status & 0xc0) == 0xc0) + mask |= 1 << (status & 0x03); + else + udelay(100); + } while ((mask != 0x0f) && --timeout); +} + +static int sun_pci_fd_test_drive(unsigned long port, int drive) +{ + unsigned char status, data; + int timeout = 1000; + int ready; + + sun_pci_fd_reset(port); + + data = (0x10 << drive) | 0x0c | drive; + sun_pci_fd_out_byte(port, data, DOR); + + sun_pci_fd_out_byte(port, 0x07, FIFO); + sun_pci_fd_out_byte(port, drive & 0x03, FIFO); + + do { + udelay(100); + status = sun_pci_fd_sensei(port); + } while (((status & 0xc0) == 0x80) && --timeout); + + if (!timeout) + ready = 0; + else + ready = (status & 0x10) ? 0 : 1; + + sun_pci_fd_reset(port); + return ready; +} +#undef FIFO +#undef MSR +#undef DOR + +#endif /* CONFIG_PCI */ static struct linux_prom_registers fd_regs[2]; @@ -400,6 +542,11 @@ __initfunc(static unsigned long sun_floppy_init(void)) int fd_node, num_regs; struct linux_sbus *bus; struct linux_sbus_device *sdev = NULL; + static int initialized = 0; + + if (initialized) + return sun_floppy_types[0]; + initialized = 1; for_all_sbusdev (sdev, bus) { if (!strcmp(sdev->prom_name, "SUNW,fdtwo")) @@ -421,23 +568,27 @@ __initfunc(static unsigned long sun_floppy_init(void)) } ebus_done: if (!edev) - return -1; + return 0; - prom_getproperty(edev->prom_node, "status", state, sizeof(state)); + prom_getproperty(edev->prom_node, "status", + state, sizeof(state)); if(!strncmp(state, "disabled", 8)) - return -1; + return 0; - if (check_region(edev->base_address[1], sizeof(struct linux_ebus_dma))) { - printk("sun_floppy_init: can't get region %016lx (%d)\n", - edev->base_address[1], (int)sizeof(struct linux_ebus_dma)); - return -1; + if (check_region(edev->base_address[1], + sizeof(struct linux_ebus_dma))) { + printk("sun_floppy_init: can't get region at %016lx\n", + edev->base_address[1]); + return 0; } - request_region(edev->base_address[1], sizeof(struct linux_ebus_dma), "floppy DMA"); + request_region(edev->base_address[1], + sizeof(struct linux_ebus_dma), "floppy DMA"); sun_fdc = (struct sun_flpy_controller *)edev->base_address[0]; FLOPPY_IRQ = edev->irqs[0]; - sun_fd_ebus_dma = (struct linux_ebus_dma *)edev->base_address[1]; + sun_pci_fd_ebus_dma = (struct linux_ebus_dma *) + edev->base_address[1]; sun_pci_fd_reset_dma(); sun_fdops.fd_inb = sun_pci_fd_inb; @@ -461,27 +612,104 @@ __initfunc(static unsigned long sun_floppy_init(void)) fdc_status = &sun_fdc->status_82077; FLOPPY_MOTOR_MASK = 0xf0; - return (unsigned long)sun_fdc; + /* + * XXX: Find out on which machines this is really needed. + */ + if (1) { + sun_pci_broken_drive = 1; + sun_fdops.fd_outb = sun_pci_fd_broken_outb; + } + + allowed_drive_mask = 0; + if (sun_pci_fd_test_drive((unsigned long)sun_fdc, 0)) + sun_floppy_types[0] = 4; + if (sun_pci_fd_test_drive((unsigned long)sun_fdc, 1)) + sun_floppy_types[1] = 4; + +#ifdef PCI_FDC_SWAP_DRIVES + /* + * If only Floppy 1 is present, swap drives. + */ + if (!sun_floppy_types[0] && sun_floppy_types[1]) { + unsigned long config = 0; + unsigned char tmp; + + for_each_ebus(ebus) { + for_each_ebusdev(edev, ebus) { + if (!strcmp(edev->prom_name, "ecpp")) { + config = edev->base_address[1]; + goto config_done; + } + } + } + config_done: + + /* + * Sanity check, is this really the NS87303? + */ + switch (config & 0x3ff) { + case 0x02e: + case 0x15c: + case 0x26e: + case 0x398: + break; + default: + config = 0; + } + + if (!config) + return sun_floppy_types[0]; + + /* + * Set the drive exchange bit in FCR on NS87303, + * make shure other bits are sane before doing so. + */ + tmp = ns87303_readb(config, FER); + tmp &= ~(FER_EDM); + ns87303_writeb(config, FER, tmp); + tmp = ns87303_readb(config, ASC); + tmp &= ~(ASC_DRV2_SEL); + ns87303_writeb(config, ASC, tmp); + tmp = ns87303_readb(config, FCR); + tmp |= FCR_LDE; + ns87303_writeb(config, FCR, tmp); + + tmp = sun_floppy_types[0]; + sun_floppy_types[0] = sun_floppy_types[1]; + sun_floppy_types[1] = tmp; + + if (sun_pci_broken_drive != -1) { + sun_pci_broken_drive = 1 - sun_pci_broken_drive; + sun_fdops.fd_outb = sun_pci_fd_lde_broken_outb; + } + } +#endif /* PCI_FDC_SWAP_DRIVES */ + + return sun_floppy_types[0]; #else - return -1; + return 0; #endif } fd_node = sdev->prom_node; prom_getproperty(fd_node, "status", state, sizeof(state)); if(!strncmp(state, "disabled", 8)) - return -1; - num_regs = prom_getproperty(fd_node, "reg", (char *) fd_regs, sizeof(fd_regs)); + return 0; + num_regs = prom_getproperty(fd_node, "reg", (char *) fd_regs, + sizeof(fd_regs)); num_regs = (num_regs / sizeof(fd_regs[0])); prom_apply_sbus_ranges(sdev->my_bus, fd_regs, num_regs, sdev); - /* We cannot do sparc_alloc_io here: it does request_region, which is the generic - floppy driver trying to do once again */ - sun_fdc = (struct sun_flpy_controller *) (PAGE_OFFSET + fd_regs[0].phys_addr + - (((unsigned long)fd_regs[0].which_io) << 32)); + /* + * We cannot do sparc_alloc_io here: it does request_region, + * which the generic floppy driver tries to do once again. + */ + sun_fdc = (struct sun_flpy_controller *) + (PAGE_OFFSET + fd_regs[0].phys_addr + + (((unsigned long)fd_regs[0].which_io) << 32)); /* Last minute sanity check... */ if(sun_fdc->status1_82077 == 0xff) { - sun_fdc = NULL; - return -1; + sun_fdc = (struct sun_flpy_controller *)-1; + return 0; } sun_fdops.fd_inb = sun_82077_fd_inb; @@ -503,10 +731,13 @@ __initfunc(static unsigned long sun_floppy_init(void)) sun_fdops.fd_eject = sun_fd_eject; fdc_status = &sun_fdc->status_82077; - /* printk("DOR @0x%p\n", &sun_fdc->dor_82077); */ /* P3 */ /* Success... */ - return (unsigned long)sun_fdc; + allowed_drive_mask = 0x01; + sun_floppy_types[0] = 4; + sun_floppy_types[1] = 0; + + return sun_floppy_types[0]; } #endif /* !(__ASM_SPARC64_FLOPPY_H) */ diff --git a/include/asm-sparc64/hardirq.h b/include/asm-sparc64/hardirq.h index 5ca51ac77..6ab9ef7ec 100644 --- a/include/asm-sparc64/hardirq.h +++ b/include/asm-sparc64/hardirq.h @@ -1,6 +1,6 @@ /* hardirq.h: 64-bit Sparc hard IRQ support. * - * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) + * Copyright (C) 1997, 1998 David S. Miller (davem@caip.rutgers.edu) */ #ifndef __SPARC64_HARDIRQ_H @@ -13,7 +13,12 @@ extern unsigned int local_irq_count; #else #define local_irq_count (cpu_data[smp_processor_id()].irq_count) #endif -#define in_interrupt() (local_irq_count != 0) + +/* + * Are we in an interrupt context? Either doing bottom half + * or hardware interrupt processing? + */ +#define in_interrupt() ((local_irq_count + local_bh_count) != 0) #ifndef __SMP__ @@ -23,7 +28,7 @@ extern unsigned int local_irq_count; #define hardirq_enter(cpu) (local_irq_count++) #define hardirq_exit(cpu) (local_irq_count--) -#define synchronize_irq() do { } while(0) +#define synchronize_irq() barrier() #else /* (__SMP__) */ @@ -47,7 +52,7 @@ static inline void release_irqlock(int cpu) static inline void hardirq_enter(int cpu) { - ++cpu_data[cpu].irq_count; + ++(cpu_data[cpu].irq_count); atomic_inc(&global_irq_count); membar("#StoreLoad | #StoreStore"); } @@ -56,31 +61,16 @@ static inline void hardirq_exit(int cpu) { membar("#StoreStore | #LoadStore"); atomic_dec(&global_irq_count); - --cpu_data[cpu].irq_count; + --(cpu_data[cpu].irq_count); } static inline int hardirq_trylock(int cpu) { - unsigned long flags; - - __save_and_cli(flags); - atomic_inc(&global_irq_count); - if(atomic_read(&global_irq_count) != 1 || - (*(((unsigned char *)(&global_irq_lock)))) != 0) { - atomic_dec(&global_irq_count); - __restore_flags(flags); - return 0; - } - ++cpu_data[cpu].irq_count; - return 1; + return (! atomic_read(&global_irq_count) && + ! spin_is_locked (&global_irq_lock)); } -static inline void hardirq_endlock(int cpu) -{ - __cli(); - hardirq_exit(cpu); - __sti(); -} +#define hardirq_endlock(cpu) do { } while (0) extern void synchronize_irq(void); diff --git a/include/asm-sparc64/ide.h b/include/asm-sparc64/ide.h index 8ac583281..503acdb27 100644 --- a/include/asm-sparc64/ide.h +++ b/include/asm-sparc64/ide.h @@ -1,4 +1,4 @@ -/* $Id: ide.h,v 1.9 1998/05/08 21:05:28 davem Exp $ +/* $Id: ide.h,v 1.11 1998/08/12 22:19:37 ecd Exp $ * ide.h: Ultra/PCI specific IDE glue. * * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) @@ -10,6 +10,8 @@ #ifdef __KERNEL__ +#include <asm/pgtable.h> + typedef unsigned long ide_ioreg_t; #undef MAX_HWIFS @@ -116,24 +118,19 @@ static __inline__ int ide_ack_intr(ide_ioreg_t status_port, ide_ioreg_t irq_port #define insw(port, buf, nr) ide_insw((port), (buf), (nr)) #define outsw(port, buf, nr) ide_outsw((port), (buf), (nr)) -/* We need to use L1 cache bypassing to prevent dcache alias - * inconsistencies with user space. -DaveM - */ static __inline__ void ide_insw(unsigned long port, void *dst, unsigned long count) { volatile unsigned short *data_port; - u16 *ps = (u16 *)__pa(dst); + unsigned long end = (unsigned long)dst + count; + u16 *ps = dst; u32 *pi; data_port = (volatile unsigned short *)port; if(((u64)ps) & 0x2) { - __asm__ __volatile__("stha %0, [%1] %2" - : /* no outputs */ - : "r" (*data_port), "r" (ps++), - "i" (ASI_PHYS_USE_EC)); + *ps++ = *data_port; count--; } pi = (u32 *)ps; @@ -142,18 +139,14 @@ static __inline__ void ide_insw(unsigned long port, w = (*data_port) << 16; w |= (*data_port); - __asm__ __volatile__("stwa %0, [%1] %2" - : /* no outputs */ - : "r" (w), "r" (pi++), - "i" (ASI_PHYS_USE_EC)); + *pi++ = w; count -= 2; } ps = (u16 *)pi; if(count) - __asm__ __volatile__("stha %0, [%1] %2" - : /* no outputs */ - : "r" (*data_port), "r" (ps), - "i" (ASI_PHYS_USE_EC)); + *ps++ = *data_port; + + __flush_dcache_range((unsigned long)dst, end); } static __inline__ void ide_outsw(unsigned long port, @@ -161,37 +154,30 @@ static __inline__ void ide_outsw(unsigned long port, unsigned long count) { volatile unsigned short *data_port; - const u16 *ps = (const u16 *)__pa(src); + unsigned long end = (unsigned long)src + count; + const u16 *ps = src; const u32 *pi; data_port = (volatile unsigned short *)port; if(((u64)src) & 0x2) { - u16 w; - __asm__ __volatile__("lduha [%1] %2, %0" - : "=r" (w) - : "r" (ps++), "i" (ASI_PHYS_USE_EC)); - *data_port = w; + *data_port = *ps++; count--; } pi = (const u32 *)ps; while(count >= 2) { u32 w; - __asm__ __volatile__("lduwa [%1] %2, %0" - : "=r" (w) - : "r" (pi++), "i" (ASI_PHYS_USE_EC)); + + w = *pi++; *data_port = (w >> 16); *data_port = w; count -= 2; } ps = (const u16 *)pi; - if(count) { - u16 w; - __asm__ __volatile__("lduha [%1] %2, %0" - : "=r" (w) - : "r" (ps++), "i" (ASI_PHYS_USE_EC)); - *data_port = w; - } + if(count) + *data_port = *ps; + + __flush_dcache_range((unsigned long)src, end); } #define T_CHAR (0x0000) /* char: don't touch */ diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h index a6bdff9a3..c9e3c8460 100644 --- a/include/asm-sparc64/io.h +++ b/include/asm-sparc64/io.h @@ -1,4 +1,4 @@ -/* $Id: io.h,v 1.18 1998/07/12 12:07:43 ecd Exp $ */ +/* $Id: io.h,v 1.19 1998/08/23 05:41:46 ecd Exp $ */ #ifndef __SPARC64_IO_H #define __SPARC64_IO_H @@ -127,7 +127,10 @@ extern void insl(unsigned long addr, void *dst, unsigned long count); #define writew(w, addr) outw((w), (unsigned long)(addr)) #define writel(l, addr) outl((l), (unsigned long)(addr)) -/* Memcpy to/from I/O space is just a regular memory operation on Ultra as well. */ +/* + * Memcpy to/from I/O space is just a regular memory operation on + * Ultra as well. + */ /* * FIXME: Write faster routines using ASL_*L for this. @@ -170,7 +173,7 @@ memcpy_toio(void *dst, const void *src, __kernel_size_t n) #if 0 /* XXX Not exactly, we need to use ASI_*L from/to the I/O end, * XXX so these are disabled until we code that stuff. */ -#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),((char *)(b)),(c),(d)) +#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),((char *)(b)),(c),(d)) #endif static inline int check_signature(unsigned long io_addr, @@ -187,22 +190,39 @@ out: return retval; } -extern void sparc_ultra_mapioaddr (unsigned long physaddr, unsigned long virt_addr, - int bus, int rdonly); -extern void sparc_ultra_unmapioaddr (unsigned long virt_addr); +/* + * On the sparc we have the whole physical IO address space mapped at all + * times, so ioremap() and iounmap() do not need to do anything. + */ +extern __inline__ void *ioremap(unsigned long offset, unsigned long size) +{ + return __va(offset); +} + +extern __inline__ void iounmap(void *addr) +{ +} + + +extern void sparc_ultra_mapioaddr(unsigned long physaddr, + unsigned long virt_addr, + int bus, int rdonly); +extern void sparc_ultra_unmapioaddr(unsigned long virt_addr); -extern __inline__ void mapioaddr (unsigned long physaddr, unsigned long virt_addr, - int bus, int rdonly) +extern __inline__ void mapioaddr(unsigned long physaddr, + unsigned long virt_addr, + int bus, int rdonly) { - sparc_ultra_mapioaddr (physaddr, virt_addr, bus, rdonly); + sparc_ultra_mapioaddr(physaddr, virt_addr, bus, rdonly); } extern __inline__ void unmapioaddr(unsigned long virt_addr) { - sparc_ultra_unmapioaddr (virt_addr); + sparc_ultra_unmapioaddr(virt_addr); } -extern void *sparc_alloc_io (u32 pa, void *va, int sz, char *name, u32 io, int rdonly); +extern void *sparc_alloc_io(u32 pa, void *va, int sz, char *name, + u32 io, int rdonly); extern void sparc_free_io (void *va, int sz); extern void *sparc_dvma_malloc (int sz, char *name, __u32 *dvma_addr); diff --git a/include/asm-sparc64/ioctl.h b/include/asm-sparc64/ioctl.h index 8e61043a8..2bf31343d 100644 --- a/include/asm-sparc64/ioctl.h +++ b/include/asm-sparc64/ioctl.h @@ -1,4 +1,4 @@ -/* $Id: ioctl.h,v 1.1 1996/12/02 00:05:36 davem Exp $ */ +/* $Id: ioctl.h,v 1.2 1998/10/15 05:40:38 jj Exp $ */ #ifndef _SPARC64_IOCTL_H #define _SPARC64_IOCTL_H @@ -40,4 +40,12 @@ #define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK) #define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK) +/* ...and for the PCMCIA... */ + +#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT) +#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT) +#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT) +#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT) +#define IOCSIZE_SHIFT (_IOC_SIZESHIFT) + #endif /* !(_SPARC64_IOCTL_H) */ diff --git a/include/asm-sparc64/mmu_context.h b/include/asm-sparc64/mmu_context.h index 1d8a9f7ee..7fa368638 100644 --- a/include/asm-sparc64/mmu_context.h +++ b/include/asm-sparc64/mmu_context.h @@ -1,4 +1,4 @@ -/* $Id: mmu_context.h,v 1.26 1998/07/31 10:42:38 jj Exp $ */ +/* $Id: mmu_context.h,v 1.32 1998/10/13 14:03:52 davem Exp $ */ #ifndef __SPARC64_MMU_CONTEXT_H #define __SPARC64_MMU_CONTEXT_H @@ -25,25 +25,47 @@ extern void get_new_mmu_context(struct mm_struct *mm); /* Initialize/destroy the context related info for a new mm_struct * instance. */ -#define init_new_context(mm) ((mm)->context = NO_CONTEXT) -#define destroy_context(mm) do { \ - if ((mm)->context != NO_CONTEXT) { \ +#define init_new_context(__mm) ((__mm)->context = NO_CONTEXT) + +/* Kernel threads like rpciod and nfsd drop their mm, and then use + * init_mm, when this happens we must make sure the tsk->tss.ctx is + * updated as well. Otherwise we have disasters relating to + * set_fs/get_fs usage later on. + * + * Also we can only clear the mmu_context_bmap bit when this is + * the final reference to the address space. + */ +#define destroy_context(__mm) do { \ + if ((__mm)->context != NO_CONTEXT && \ + atomic_read(&(__mm)->count) == 1) { \ spin_lock(&scheduler_lock); \ - if (!(((mm)->context ^ tlb_context_cache) & CTX_VERSION_MASK)) \ - clear_bit((mm)->context & ~(CTX_VERSION_MASK), \ + if (!(((__mm)->context ^ tlb_context_cache) & CTX_VERSION_MASK))\ + clear_bit((__mm)->context & ~(CTX_VERSION_MASK), \ mmu_context_bmap); \ spin_unlock(&scheduler_lock); \ - (mm)->context = NO_CONTEXT; \ + (__mm)->context = NO_CONTEXT; \ + if(current->mm == (__mm)) { \ + current->tss.ctx = 0; \ + spitfire_set_secondary_context(0); \ + __asm__ __volatile__("flush %g6"); \ + } \ } \ } while (0) -extern __inline__ void get_mmu_context(struct task_struct *tsk) +/* This routine must called with interrupts off, + * this is necessary to guarentee that the current->tss.ctx + * to CPU secontary context register relationship is maintained + * when traps can happen. + * + * Also the caller must flush the current set of user windows + * to the stack (if necessary) before we get here. + */ +extern __inline__ void __get_mmu_context(struct task_struct *tsk) { register unsigned long paddr asm("o5"); register unsigned long pgd_cache asm("o4"); struct mm_struct *mm = tsk->mm; - flushw_user(); if(!(tsk->tss.flags & SPARC_FLAG_KTHREAD) && !(tsk->flags & PF_EXITING)) { unsigned long ctx = tlb_context_cache; @@ -65,28 +87,42 @@ extern __inline__ void get_mmu_context(struct task_struct *tsk) spitfire_set_secondary_context(tsk->tss.ctx); __asm__ __volatile__("flush %g6"); paddr = __pa(mm->pgd); - if(tsk->tss.flags & SPARC_FLAG_32BIT) + if((tsk->tss.flags & (SPARC_FLAG_32BIT|SPARC_FLAG_KTHREAD)) == + (SPARC_FLAG_32BIT)) pgd_cache = (unsigned long) mm->pgd[0]; else pgd_cache = 0; __asm__ __volatile__(" - rdpr %%pstate, %%o3 - wrpr %%o3, %2, %%pstate + rdpr %%pstate, %%o2 + andn %%o2, %2, %%o3 + wrpr %%o3, %5, %%pstate mov %4, %%g4 mov %0, %%g7 stxa %1, [%%g4] %3 - wrpr %%o3, 0x0, %%pstate + wrpr %%o2, 0x0, %%pstate " : /* no outputs */ - : "r" (paddr), "r" (pgd_cache), "i" (PSTATE_MG|PSTATE_IE), - "i" (ASI_DMMU), "i" (TSB_REG) - : "o3"); + : "r" (paddr), "r" (pgd_cache), "i" (PSTATE_IE), + "i" (ASI_DMMU), "i" (TSB_REG), "i" (PSTATE_MG) + : "o2", "o3"); } +/* Now we define this as a do nothing macro, because the only + * generic user right now is the scheduler, and we handle all + * the atomicity issues by having switch_to() call the above + * function itself. + */ +#define get_mmu_context(x) do { } while(0) + /* * After we have set current->mm to a new value, this activates * the context for the new mm so we see the new mappings. */ -#define activate_context(tsk) get_mmu_context(tsk) +#define activate_context(__tsk) \ +do { flushw_user(); \ + spin_lock(&scheduler_lock); \ + __get_mmu_context(__tsk); \ + spin_unlock(&scheduler_lock); \ +} while(0) #endif /* !(__ASSEMBLY__) */ diff --git a/include/asm-sparc64/namei.h b/include/asm-sparc64/namei.h index 2c9c88ce2..1e2124797 100644 --- a/include/asm-sparc64/namei.h +++ b/include/asm-sparc64/namei.h @@ -1,4 +1,4 @@ -/* $Id: namei.h,v 1.12 1998/03/13 17:38:13 jj Exp $ +/* $Id: namei.h,v 1.13 1998/10/28 08:13:49 jj Exp $ * linux/include/asm-sparc64/namei.h * * Routines to handle famous /usr/gnemul/s*. @@ -12,7 +12,7 @@ #define SPARC_SOL_EMUL "usr/gnemul/solaris/" static inline struct dentry * -__sparc64_lookup_dentry(const char *name, int follow_link) +__sparc64_lookup_dentry(const char *name, int lookup_flags) { struct dentry *base; char *emul; @@ -29,18 +29,20 @@ __sparc64_lookup_dentry(const char *name, int follow_link) return NULL; } - base = lookup_dentry (emul, dget (current->fs->root), 1); + base = lookup_dentry (emul, + dget (current->fs->root), + (LOOKUP_FOLLOW | LOOKUP_DIRECTORY | LOOKUP_SLASHOK)); if (IS_ERR (base)) return NULL; - base = lookup_dentry (name, base, follow_link); + base = lookup_dentry (name, base, lookup_flags); if (IS_ERR (base)) return NULL; if (!base->d_inode) { struct dentry *fromroot; - fromroot = lookup_dentry (name, dget (current->fs->root), follow_link); + fromroot = lookup_dentry (name, dget (current->fs->root), lookup_flags); if (IS_ERR (fromroot)) return base; @@ -55,9 +57,9 @@ __sparc64_lookup_dentry(const char *name, int follow_link) return base; } -#define __prefix_lookup_dentry(name, follow_link) \ +#define __prefix_lookup_dentry(name, lookup_flags) \ if (current->personality) { \ - dentry = __sparc64_lookup_dentry (name, follow_link); \ + dentry = __sparc64_lookup_dentry (name, lookup_flags); \ if (dentry) return dentry; \ } diff --git a/include/asm-sparc64/ns87303.h b/include/asm-sparc64/ns87303.h index 92b3d689c..cfd159a5a 100644 --- a/include/asm-sparc64/ns87303.h +++ b/include/asm-sparc64/ns87303.h @@ -1,4 +1,4 @@ -/* $Id: ns87303.h,v 1.1 1997/10/14 13:30:37 ecd Exp $ +/* $Id: ns87303.h,v 1.2 1998/09/13 15:38:50 ecd Exp $ * ns87303.h: Configuration Register Description for the * National Semiconductor PC87303 (SuperIO). * @@ -26,6 +26,9 @@ #define CS1CF0 0x0c #define CS1CF1 0x0d +/* Function Enable Register (FER) bits */ +#define FER_EDM 0x10 /* Encoded Drive and Motor pin information */ + /* Function Address Register (FAR) bits */ #define FAR_LPT_MASK 0x03 #define FAR_LPTB 0x00 @@ -39,6 +42,7 @@ /* of the parallel port */ /* Function Control Register (FCR) bits */ +#define FCR_LDE 0x10 /* Logical Drive Exchange */ #define FCR_ZWS_ENA 0x20 /* Enable short host read/write in ECP/EPP */ /* Printer Controll Register (PCR) bits */ @@ -55,6 +59,7 @@ /* Advanced SuperIO Config Register (ASC) bits */ #define ASC_LPT_IRQ7 0x01 /* Allways use IRQ7 for LPT */ +#define ASC_DRV2_SEL 0x02 /* Logical Drive Exchange controlled by TDR */ #ifdef __KERNEL__ diff --git a/include/asm-sparc64/oplib.h b/include/asm-sparc64/oplib.h index 6b2852c29..a878a3ea6 100644 --- a/include/asm-sparc64/oplib.h +++ b/include/asm-sparc64/oplib.h @@ -1,4 +1,4 @@ -/* $Id: oplib.h,v 1.8 1997/07/24 12:15:15 davem Exp $ +/* $Id: oplib.h,v 1.9 1998/10/06 20:56:05 ecd Exp $ * oplib.h: Describes the interface and available routines in the * Linux Prom library. * @@ -117,8 +117,8 @@ extern void prom_halt(void) __attribute__ ((noreturn)); * kernel is still active, the prom will call this routine. * */ -typedef void (*sync_func_t)(long *cmd); -extern void prom_setsync(sync_func_t func_ptr); +typedef int (*callback_func_t)(long *cmd); +extern void prom_setcallback(callback_func_t func_ptr); /* Acquire the IDPROM of the root node in the prom device tree. This * gets passed a buffer where you would like it stuffed. The return value diff --git a/include/asm-sparc64/page.h b/include/asm-sparc64/page.h index fe33651cf..0894bb90d 100644 --- a/include/asm-sparc64/page.h +++ b/include/asm-sparc64/page.h @@ -1,4 +1,4 @@ -/* $Id: page.h,v 1.23 1998/06/12 14:54:33 jj Exp $ */ +/* $Id: page.h,v 1.24 1998/10/20 03:09:16 jj Exp $ */ #ifndef _SPARC64_PAGE_H #define _SPARC64_PAGE_H @@ -18,7 +18,7 @@ #ifndef __ASSEMBLY__ -#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) +extern void clear_page(unsigned long page); extern void copy_page(unsigned long to, unsigned long from); /* GROSS, defining this makes gcc pass these types as aggregates, diff --git a/include/asm-sparc64/perfctr.h b/include/asm-sparc64/perfctr.h new file mode 100644 index 000000000..67756e808 --- /dev/null +++ b/include/asm-sparc64/perfctr.h @@ -0,0 +1,101 @@ +/*---------------------------------------- + PERFORMANCE INSTRUMENTATION + Guillaume Thouvenin 08/10/98 + David S. Miller 10/06/98 + ---------------------------------------*/ +#ifndef PERF_COUNTER_API +#define PERF_COUNTER_API + +/* sys_perfctr() interface. First arg is operation code + * from enumeration below. The meaning of further arguments + * are determined by the operation code. + * + * int sys_perfctr(int opcode, unsigned long arg0, + * unsigned long arg1, unsigned long arg2) + * + * Pointers which are passed by the user are pointers to 64-bit + * integers. + * + * Once enabled, performance counter state is retained until the + * process either exits or performs an exec. That is, performance + * counters remain enabled for fork/clone children. + */ +enum perfctr_opcode { + /* Enable UltraSparc performance counters, ARG0 is pointer + * to 64-bit accumulator for D0 counter in PIC, ARG1 is pointer + * to 64-bit accumulator for D1 counter. ARG2 is a pointer to + * the initial PCR register value to use. + */ + PERFCTR_ON, + + /* Disable UltraSparc performance counters. The PCR is written + * with zero and the user counter accumulator pointers and + * working PCR register value are forgotten. + */ + PERFCTR_OFF, + + /* Add current D0 and D1 PIC values into user pointers given + * in PERFCTR_ON operation. The PIC is cleared before returning. + */ + PERFCTR_READ, + + /* Clear the PIC register. */ + PERFCTR_CLRPIC, + + /* Begin using a new PCR value, the pointer to which is passed + * in ARG0. The PIC is also cleared after the new PCR value is + * written. + */ + PERFCTR_SETPCR, + + /* Store in pointer given in ARG0 the current PCR register value + * being used. + */ + PERFCTR_GETPCR +}; + +/* I don't want the kernel's namespace to be polluted with this + * stuff when this file is included. --DaveM + */ +#ifndef __KERNEL__ + +#define PRIV 0x00000001 +#define USR 0x00000002 +#define SYS 0x00000004 + +/* Pic.S0 Selection Bit Field Encoding */ +#define CYCLE_CNT 0x00000000 +#define INSTR_CNT 0x00000010 +#define DISPATCH0_IC_MISS 0x00000020 +#define DISPATCH0_STOREBUF 0x00000030 +#define IC_REF 0x00000080 +#define DC_RD 0x00000090 +#define DC_WR 0x000000A0 +#define LOAD_USE 0x000000B0 +#define EC_REF 0x000000C0 +#define EC_WRITE_HIT_RDO 0x000000D0 +#define EC_SNOOP_INV 0x000000E0 +#define EC_RD_HIT 0x000000F0 + +/* Pic.S1 Selection Bit Field Encoding */ +#define CYCLE_CNT_D1 0x00000000 +#define INSTR_CNT_D1 0x00000800 +#define DISPATCH0_IC_MISPRED 0x00001000 +#define DISPATCH0_FP_USE 0x00001800 +#define IC_HIT 0x00004000 +#define DC_RD_HIT 0x00004800 +#define DC_WR_HIT 0x00005000 +#define LOAD_USE_RAW 0x00005800 +#define EC_HIT 0x00006000 +#define EC_WB 0x00006800 +#define EC_SNOOP_CB 0x00007000 +#define EC_IT_HIT 0x00007800 + +struct vcounter_struct { + unsigned long long vcnt0; + unsigned long long vcnt1; +}; + +#endif /* !(__KERNEL__) */ + +#endif /* !(PERF_COUNTER_API) */ diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h index 2bc6695b7..d1d319bab 100644 --- a/include/asm-sparc64/pgtable.h +++ b/include/asm-sparc64/pgtable.h @@ -1,4 +1,4 @@ -/* $Id: pgtable.h,v 1.85 1998/08/04 20:51:33 davem Exp $ +/* $Id: pgtable.h,v 1.96 1998/10/27 23:28:42 davem Exp $ * pgtable.h: SpitFire page table operations. * * Copyright 1996,1997 David S. Miller (davem@caip.rutgers.edu) @@ -169,9 +169,11 @@ extern void *sparc_init_alloc(unsigned long *kbrk, unsigned long size); #define flush_cache_range(mm, start, end) flushw_user() #define flush_cache_page(vma, page) flushw_user() -/* This operation in unnecessary on the SpitFire since D-CACHE is write-through. */ -#define flush_page_to_ram(page) do { } while (0) +/* These operations are unnecessary on the SpitFire since D-CACHE is write-through. */ #define flush_icache_range(start, end) do { } while (0) +#define flush_page_to_ram(page) do { } while (0) + +extern void __flush_dcache_range(unsigned long start, unsigned long end); extern void __flush_cache_all(void); @@ -376,7 +378,7 @@ extern __inline__ pgd_t *get_pgd_fast(void) if(ret) { struct page *page = mem_map + MAP_NR(ret); - clear_page(ret); + memset(ret, 0, PAGE_SIZE); (unsigned long)page->pprev_hash = 2; (unsigned long *)page->next_hash = pgd_quicklist; pgd_quicklist = (unsigned long *)page; @@ -406,7 +408,7 @@ extern __inline__ pgd_t *get_pgd_fast(void) } else { ret = (unsigned long *) __get_free_page(GFP_KERNEL); if(ret) - clear_page(ret); + memset(ret, 0, PAGE_SIZE); } return (pgd_t *)ret; } @@ -517,18 +519,22 @@ extern pgd_t swapper_pg_dir[1]; extern inline void SET_PAGE_DIR(struct task_struct *tsk, pgd_t *pgdir) { - if(pgdir != swapper_pg_dir && tsk == current) { + if(pgdir != swapper_pg_dir && tsk->mm == current->mm) { register unsigned long paddr asm("o5"); paddr = __pa(pgdir); __asm__ __volatile__ (" rdpr %%pstate, %%o4 wrpr %%o4, %1, %%pstate + mov %3, %%g4 mov %0, %%g7 + stxa %%g0, [%%g4] %2 wrpr %%o4, 0x0, %%pstate " : /* No outputs */ - : "r" (paddr), "i" (PSTATE_MG|PSTATE_IE) + : "r" (paddr), "i" (PSTATE_MG|PSTATE_IE), + "i" (ASI_DMMU), "i" (TSB_REG) : "o4"); + flush_tlb_mm(current->mm); } } @@ -555,33 +561,53 @@ extern void mmu_release_scsi_sgl(struct mmu_sglist *sg, int sz, struct linux_sbu #define mmu_lockarea(vaddr, len) (vaddr) #define mmu_unlockarea(vaddr, len) do { } while(0) +/* There used to be some funny code here which tried to guess which + * TLB wanted the mapping, that wasn't accurate enough to justify it's + * existance. The real way to do that is to have each TLB miss handler + * pass in a distinct code to do_sparc64_fault() and do it more accurately + * there. + * + * What we do need to handle here is prevent I-cache corruption. The + * deal is that the I-cache snoops stores from other CPUs and all DMA + * activity, however stores from the local processor are not snooped. + * The dynamic linker and our signal handler mechanism take care of + * the cases where they write into instruction space, but when a page + * is copied in the kernel and then executed in user-space is not handled + * right. This leads to corruptions if things are "just right", consider + * the following scenerio: + * 1) Process 1 frees up a page that was used for the PLT of libc in + * it's address space. + * 2) Process 2 writes into a page in the PLT of libc for the first + * time. do_wp_page() copies the page locally, the local I-cache of + * the processor does not notice the writes during the page copy. + * The new page used just so happens to be the one just freed in #1. + * 3) After the PLT write, later the cpu calls into an unresolved PLT + * entry, the CPU executes old instructions from process 1's PLT + * table. + * 4) Splat. + */ +extern void flush_icache_page(unsigned long phys_page); #define update_mmu_cache(__vma, __address, _pte) \ -__asm__ __volatile__( \ - "rdpr %%pstate, %%g1\n\t" \ - "wrpr %%g1, %0, %%pstate\n\t" \ - "brz,pt %1, 1f\n\t" \ - " mov %2, %%g2\n\t" \ - "stxa %3, [%%g2] %5\n\t" \ - "ba,pt %%xcc, 2f\n\t" \ - " stxa %4, [%%g0] %6\n\t" \ -"1: stxa %3, [%%g2] %7\n\t" \ -" stxa %4, [%%g0] %8\n\t" \ -"2: wrpr %%g1, 0x0, %%pstate\n" \ - : /* no outputs */ \ - : "i" (PSTATE_IE), \ - "r" (((__vma)->vm_flags&(VM_READ|VM_WRITE|VM_EXEC))==(VM_READ|VM_EXEC)), \ - "i" (TLB_TAG_ACCESS), \ - "r" ((__address) | ((__vma)->vm_mm->context & 0x3ff)), \ - "r" (pte_val(_pte)), "i" (ASI_IMMU), "i" (ASI_ITLB_DATA_IN), \ - "i" (ASI_DMMU), "i" (ASI_DTLB_DATA_IN) \ - : "g1", "g2") +do { \ + unsigned short __flags = ((__vma)->vm_flags); \ + if ((__flags & VM_EXEC) != 0 && \ + ((pte_val(_pte) & (_PAGE_PRESENT | _PAGE_WRITE | _PAGE_MODIFIED)) == \ + (_PAGE_PRESENT | _PAGE_WRITE | _PAGE_MODIFIED))) { \ + flush_icache_page(pte_page(_pte) - page_offset); \ + } \ +} while(0) /* Make a non-present pseudo-TTE. */ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset) { pte_t pte; pte_val(pte) = (type<<PAGE_SHIFT)|(offset<<(PAGE_SHIFT+8)); return pte; } extern inline pte_t mk_pte_io(unsigned long page, pgprot_t prot, int space) -{ pte_t pte; pte_val(pte) = ((page) | pgprot_val(prot) | _PAGE_E) & ~(unsigned long)_PAGE_CACHE; return pte; } +{ + pte_t pte; + pte_val(pte) = ((page) | pgprot_val(prot) | _PAGE_E) & ~(unsigned long)_PAGE_CACHE; + pte_val(pte) |= (((unsigned long)space) << 32); + return pte; +} #define SWP_TYPE(entry) (((entry>>PAGE_SHIFT) & 0xff)) #define SWP_OFFSET(entry) ((entry) >> (PAGE_SHIFT+8)) @@ -620,6 +646,9 @@ extern void module_unmap (void *addr); /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ #define PageSkip(page) (test_bit(PG_skip, &(page)->flags)) +extern int io_remap_page_range(unsigned long from, unsigned long offset, + unsigned long size, pgprot_t prot, int space); + #endif /* !(__ASSEMBLY__) */ #endif /* !(_SPARC64_PGTABLE_H) */ diff --git a/include/asm-sparc64/posix_types.h b/include/asm-sparc64/posix_types.h index 98b4125a6..2acf3e421 100644 --- a/include/asm-sparc64/posix_types.h +++ b/include/asm-sparc64/posix_types.h @@ -7,7 +7,7 @@ * assume GCC is being used. */ -#if __GNUC_MINOR__ > 7 +#if (__GNUC__ > 2) || (__GNUC_MINOR__ >= 8) typedef unsigned long int __kernel_size_t; #else typedef unsigned long long __kernel_size_t; diff --git a/include/asm-sparc64/processor.h b/include/asm-sparc64/processor.h index ab4348216..a2574758a 100644 --- a/include/asm-sparc64/processor.h +++ b/include/asm-sparc64/processor.h @@ -1,4 +1,4 @@ -/* $Id: processor.h,v 1.49 1998/07/31 10:42:40 jj Exp $ +/* $Id: processor.h,v 1.51 1998/10/21 03:21:19 davem Exp $ * include/asm-sparc64/processor.h * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -61,6 +61,11 @@ struct thread_struct { unsigned long sig_address __attribute__ ((aligned (8))); unsigned long sig_desc; + /* Performance counter state */ + u64 *user_cntd0, *user_cntd1; + u64 kernel_cntd0, kernel_cntd1; + u64 pcr_reg; + unsigned char fpdepth; unsigned char fpsaved[7]; unsigned char gsr[7]; @@ -74,6 +79,7 @@ struct thread_struct { #define SPARC_FLAG_NEWSIGNALS 0x040 /* task wants new-style signals */ #define SPARC_FLAG_32BIT 0x080 /* task is older 32-bit binary */ #define SPARC_FLAG_NEWCHILD 0x100 /* task is just-spawned child process */ +#define SPARC_FLAG_PERFCTR 0x200 /* task has performance counters active */ #define INIT_MMAP { &init_mm, 0xfffff80000000000, 0xfffff80001000000, \ PAGE_SHARED , VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap } @@ -91,6 +97,8 @@ struct thread_struct { { 0, 0, 0, 0, 0, 0, 0, }, \ /* sig_address, sig_desc */ \ 0, 0, \ +/* user_cntd0, user_cndd1, kernel_cntd0, kernel_cntd0, pcr_reg */ \ + 0, 0, 0, 0, 0, \ /* fpdepth, fpsaved, gsr, xfsr */ \ 0, { 0 }, { 0 }, { 0 }, \ } diff --git a/include/asm-sparc64/psrcompat.h b/include/asm-sparc64/psrcompat.h index 22e9da3d6..12fa4871a 100644 --- a/include/asm-sparc64/psrcompat.h +++ b/include/asm-sparc64/psrcompat.h @@ -1,4 +1,4 @@ -/* $Id: psrcompat.h,v 1.4 1997/06/20 11:54:39 davem Exp $ */ +/* $Id: psrcompat.h,v 1.5 1998/10/06 09:28:39 jj Exp $ */ #ifndef _SPARC64_PSRCOMPAT_H #define _SPARC64_PSRCOMPAT_H @@ -21,21 +21,24 @@ #define PSR_VERS 0x0f000000 /* cpu-version field */ #define PSR_IMPL 0xf0000000 /* cpu-implementation field */ +#define PSR_V8PLUS 0xff000000 /* fake impl/ver, meaning a 64bit CPU is present */ +#define PSR_XCC 0x000f0000 /* if PSR_V8PLUS, this is %xcc */ + extern inline unsigned int tstate_to_psr(unsigned long tstate) { - unsigned long vers; - - __asm__ __volatile__("rdpr %%ver, %0" : "=r" (vers)); return ((tstate & TSTATE_CWP) | PSR_S | ((tstate & TSTATE_ICC) >> 12) | - (((vers << 8) >> 32) & PSR_IMPL) | - (((vers << 24) >> 36) & PSR_VERS)); + ((tstate & TSTATE_XCC) >> 20) | + PSR_V8PLUS); } extern inline unsigned long psr_to_tstate_icc(unsigned int psr) { - return ((unsigned long)(psr & PSR_ICC)) << 12; + unsigned long tstate = ((unsigned long)(psr & PSR_ICC)) << 12; + if ((psr & (PSR_VERS|PSR_IMPL)) == PSR_V8PLUS) + tstate |= ((unsigned long)(psr & PSR_XCC)) << 20; + return tstate; } #endif /* !(_SPARC64_PSRCOMPAT_H) */ diff --git a/include/asm-sparc64/sab82532.h b/include/asm-sparc64/sab82532.h index 09146f39e..169e88d02 100644 --- a/include/asm-sparc64/sab82532.h +++ b/include/asm-sparc64/sab82532.h @@ -1,4 +1,4 @@ -/* $Id: sab82532.h,v 1.3 1997/09/03 11:55:04 ecd Exp $ +/* $Id: sab82532.h,v 1.4 1998/10/25 23:04:29 ecd Exp $ * sab82532.h: Register Definitions for the Siemens SAB82532 DUSCC * * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be) @@ -143,7 +143,7 @@ struct sab82532 { int xmit_fifo_size; int recv_fifo_size; int custom_divisor; - int quot; + int baud; int x_char; int close_delay; unsigned short closing_wait; diff --git a/include/asm-sparc64/semaphore.h b/include/asm-sparc64/semaphore.h index 4a5912bb9..b0eb13911 100644 --- a/include/asm-sparc64/semaphore.h +++ b/include/asm-sparc64/semaphore.h @@ -24,17 +24,24 @@ extern void __up(struct semaphore * sem); #define wake_one_more(sem) atomic_inc(&sem->waking); -#define waking_non_zero(sem) \ -({ unsigned long flags; \ - int ret = 0; \ - save_and_cli(flags); \ - if (atomic_read(&sem->waking) > 0) { \ - atomic_dec(&sem->waking); \ - ret = 1; \ - } \ - restore_flags(flags); \ - ret; \ -}) +static __inline__ int waking_non_zero(struct semaphore *sem) +{ + int ret; + + __asm__ __volatile__(" +1: ldsw [%1], %%g5 + brlez,pt %%g5, 2f + mov 0, %0 + sub %%g5, 1, %%g7 + cas [%1], %%g5, %%g7 + cmp %%g5, %%g7 + bne,pn %%icc, 1b + mov 1, %0 +2:" : "=r" (ret) + : "r" (&((sem)->waking)) + : "g5", "g7", "cc", "memory"); + return ret; +} extern __inline__ void down(struct semaphore * sem) { diff --git a/include/asm-sparc64/shmparam.h b/include/asm-sparc64/shmparam.h index 3b90c34b1..1179fd258 100644 --- a/include/asm-sparc64/shmparam.h +++ b/include/asm-sparc64/shmparam.h @@ -1,4 +1,4 @@ -/* $Id: shmparam.h,v 1.2 1997/08/04 16:16:55 davem Exp $ */ +/* $Id: shmparam.h,v 1.3 1998/09/28 07:15:03 jj Exp $ */ #ifndef _ASMSPARC64_SHMPARAM_H #define _ASMSPARC64_SHMPARAM_H @@ -36,7 +36,7 @@ * SHMMAX <= (PAGE_SIZE << _SHM_IDX_BITS). */ -#define SHMMAX (1024 * 1024) /* max shared seg size (bytes) */ +#define SHMMAX 0x1000000 /* max shared seg size (bytes) */ #define SHMMIN 1 /* really PAGE_SIZE */ /* min shared seg size (bytes) */ #define SHMMNI (1<<_SHM_ID_BITS) /* max num of segs system wide */ #define SHMALL /* max shm system wide (pages) */ \ diff --git a/include/asm-sparc64/sigcontext.h b/include/asm-sparc64/sigcontext.h index 102e73385..4ce040a78 100644 --- a/include/asm-sparc64/sigcontext.h +++ b/include/asm-sparc64/sigcontext.h @@ -1,4 +1,4 @@ -/* $Id: sigcontext.h,v 1.10 1997/12/11 15:16:11 jj Exp $ */ +/* $Id: sigcontext.h,v 1.11 1998/10/06 09:28:37 jj Exp $ */ #ifndef __SPARC64_SIGCONTEXT_H #define __SPARC64_SIGCONTEXT_H @@ -77,6 +77,14 @@ typedef struct { unsigned long si_fprs; } __siginfo_fpu_t; +/* This magic should be in g_upper[0] for all upper parts + to be valid. */ +#define SIGINFO_EXTRA_V8PLUS_MAGIC 0x130e269 +typedef struct { + unsigned int g_upper[8]; + unsigned int o_upper[8]; +} siginfo_extra_v8plus_t; + #endif /* !(__ASSEMBLY__) */ #endif /* !(__SPARC64_SIGCONTEXT_H) */ diff --git a/include/asm-sparc64/smp.h b/include/asm-sparc64/smp.h index 1a07cd850..f15e6e769 100644 --- a/include/asm-sparc64/smp.h +++ b/include/asm-sparc64/smp.h @@ -34,16 +34,16 @@ extern struct prom_cpuinfo linux_cpus[NR_CPUS]; struct cpuinfo_sparc { /* Dcache line 1 */ unsigned long irq_count; + unsigned long bh_count; unsigned int multiplier; unsigned int counter; - unsigned long pgcache_size; - unsigned long pgdcache_size; + unsigned long udelay_val; /* Dcache line 2 */ - unsigned long *pgd_cache; + unsigned long pgcache_size; unsigned long *pte_cache; - unsigned long udelay_val; - unsigned long dummy; + unsigned long pgdcache_size; + unsigned long *pgd_cache; }; extern struct cpuinfo_sparc cpu_data[NR_CPUS]; @@ -93,7 +93,7 @@ extern void smp_message_pass(int target, int msg, unsigned long data, int wait); #define PROC_CHANGE_PENALTY 20 -#else /* !(__SMP__) */ +#endif /* !(__SMP__) */ #define NO_PROC_ID 0xFF diff --git a/include/asm-sparc64/smplock.h b/include/asm-sparc64/smplock.h index e62326a10..88a9e8bd1 100644 --- a/include/asm-sparc64/smplock.h +++ b/include/asm-sparc64/smplock.h @@ -3,6 +3,7 @@ * * Default SMP lock implementation */ +#include <linux/sched.h> #include <linux/interrupt.h> #include <asm/spinlock.h> @@ -36,14 +37,14 @@ do { \ * so we only need to worry about other * CPU's. */ -extern __inline__ void lock_kernel(void) -{ - if (!++current->lock_depth) - spin_lock(&kernel_flag); -} +#define lock_kernel() \ +do { \ + if (!++current->lock_depth) \ + spin_lock(&kernel_flag); \ +} while(0) -extern __inline__ void unlock_kernel(void) -{ - if (--current->lock_depth < 0) - spin_unlock(&kernel_flag); -} +#define unlock_kernel() \ +do { \ + if (--current->lock_depth < 0) \ + spin_unlock(&kernel_flag); \ +} while(0) diff --git a/include/asm-sparc64/softirq.h b/include/asm-sparc64/softirq.h index 0e1a6b589..a8de6fb1d 100644 --- a/include/asm-sparc64/softirq.h +++ b/include/asm-sparc64/softirq.h @@ -1,6 +1,6 @@ /* softirq.h: 64-bit Sparc soft IRQ support. * - * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) + * Copyright (C) 1997, 1998 David S. Miller (davem@caip.rutgers.edu) */ #ifndef __SPARC64_SOFTIRQ_H @@ -9,129 +9,121 @@ #include <asm/atomic.h> #include <asm/hardirq.h> +#ifndef __SMP__ +extern unsigned int local_bh_count; +#else +#define local_bh_count (cpu_data[smp_processor_id()].bh_count) +#endif + /* The locking mechanism for base handlers, to prevent re-entrancy, * is entirely private to an implementation, it should not be * referenced at all outside of this file. */ #define get_active_bhs() (bh_mask & bh_active) +#define clear_active_bhs(mask) \ + __asm__ __volatile__( \ +"1: ldx [%1], %%g7\n" \ +" andn %%g7, %0, %%g5\n" \ +" casx [%1], %%g7, %%g5\n" \ +" cmp %%g7, %%g5\n" \ +" bne,pn %%xcc, 1b\n" \ +" nop" \ + : /* no outputs */ \ + : "HIr" (mask), "r" (&bh_active) \ + : "g5", "g7", "cc", "memory") + +extern inline void init_bh(int nr, void (*routine)(void)) +{ + bh_base[nr] = routine; + bh_mask_count[nr] = 0; + bh_mask |= 1 << nr; +} + +extern inline void remove_bh(int nr) +{ + bh_base[nr] = NULL; + bh_mask &= ~(1 << nr); +} + +extern inline void mark_bh(int nr) +{ + set_bit(nr, &bh_active); +} #ifndef __SMP__ -extern int __sparc64_bh_counter; - -#define softirq_trylock(cpu) (__sparc64_bh_counter ? 0 : (__sparc64_bh_counter=1)) -#define softirq_endlock(cpu) (__sparc64_bh_counter = 0) -#define clear_active_bhs(x) (bh_active &= ~(x)) -#define synchronize_bh() do { } while (0) /* XXX implement SMP version -DaveM */ - -#define init_bh(nr, routine) \ -do { int ent = nr; \ - bh_base[ent] = routine; \ - bh_mask_count[ent] = 0; \ - bh_mask |= 1 << ent; \ -} while(0) - -#define remove_bh(nr) \ -do { int ent = nr; \ - bh_base[ent] = NULL; \ - bh_mask &= ~(1 << ent); \ -} while(0) +extern inline void start_bh_atomic(void) +{ + local_bh_count++; + barrier(); +} -#define mark_bh(nr) (bh_active |= (1 << (nr))) +extern inline void end_bh_atomic(void) +{ + barrier(); + local_bh_count--; +} -#define disable_bh(nr) \ -do { int ent = nr; \ - bh_mask &= ~(1 << ent); \ - bh_mask_count[ent]++; \ - barrier(); \ -} while(0) - -#define enable_bh(nr) \ -do { int ent = nr; \ - barrier(); \ - if (!--bh_mask_count[ent]) \ - bh_mask |= 1 << ent; \ -} while(0) - -#define start_bh_atomic() do { __sparc64_bh_counter++; barrier(); } while(0) - -#define end_bh_atomic() do { barrier(); __sparc64_bh_counter--; } while(0) +/* These are for the irq's testing the lock */ +#define softirq_trylock(cpu) (local_bh_count ? 0 : (local_bh_count=1)) +#define softirq_endlock(cpu) (local_bh_count = 0) +#define synchronize_bh() barrier() #else /* (__SMP__) */ -extern atomic_t __sparc64_bh_counter; - -#define start_bh_atomic() \ - do { atomic_inc(&__sparc64_bh_counter); synchronize_irq(); } while(0) - -#define end_bh_atomic() atomic_dec(&__sparc64_bh_counter) - -#include <asm/spinlock.h> - -extern spinlock_t global_bh_lock; - -#define init_bh(nr, routine) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_base[ent] = routine; \ - bh_mask_count[ent] = 0; \ - bh_mask |= 1 << ent; \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define remove_bh(nr) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_base[ent] = NULL; \ - bh_mask &= ~(1 << ent); \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define mark_bh(nr) \ -do { unsigned long flags; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_active |= (1 << nr); \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define disable_bh(nr) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_mask &= ~(1 << ent); \ - bh_mask_count[ent]++; \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define enable_bh(nr) \ -do { unsigned long flags; \ - int ent = nr; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - if (!--bh_mask_count[ent]) \ - bh_mask |= 1 << ent; \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) - -#define softirq_trylock(cpu) \ -({ \ - int ret = 1; \ - if(atomic_add_return(1, &__sparc64_bh_counter) != 1) { \ - atomic_dec(&__sparc64_bh_counter); \ - ret = 0; \ - } \ - ret; \ -}) -#define softirq_endlock(cpu) atomic_dec(&__sparc64_bh_counter) -#define clear_active_bhs(mask) \ -do { unsigned long flags; \ - spin_lock_irqsave(&global_bh_lock, flags); \ - bh_active &= ~(mask); \ - spin_unlock_irqrestore(&global_bh_lock, flags); \ -} while(0) +extern atomic_t global_bh_lock; +extern spinlock_t global_bh_count; + +extern void synchronize_bh(void); + +static inline void start_bh_atomic(void) +{ + atomic_inc(&global_bh_lock); + synchronize_bh(); +} + +static inline void end_bh_atomic(void) +{ + atomic_dec(&global_bh_lock); +} + +/* These are for the IRQs testing the lock */ +static inline int softirq_trylock(int cpu) +{ + if (spin_trylock(&global_bh_count)) { + if (atomic_read(&global_bh_lock) == 0) { + ++(cpu_data[cpu].bh_count); + return 1; + } + spin_unlock(&global_bh_count); + } + return 0; +} + +static inline void softirq_endlock(int cpu) +{ + (cpu_data[cpu].bh_count)--; + spin_unlock(&global_bh_count); +} #endif /* (__SMP__) */ +/* + * These use a mask count to correctly handle + * nested disable/enable calls + */ +extern inline void disable_bh(int nr) +{ + bh_mask &= ~(1 << nr); + bh_mask_count[nr]++; + synchronize_bh(); +} + +extern inline void enable_bh(int nr) +{ + if (!--bh_mask_count[nr]) + bh_mask |= 1 << nr; +} + #endif /* !(__SPARC64_SOFTIRQ_H) */ diff --git a/include/asm-sparc64/spinlock.h b/include/asm-sparc64/spinlock.h index 4e2dd6b8c..5f65fc78f 100644 --- a/include/asm-sparc64/spinlock.h +++ b/include/asm-sparc64/spinlock.h @@ -10,13 +10,8 @@ #ifndef __SMP__ -#if (__GNUC__ > 2) || (__GNUC_MINOR__ >= 8) - typedef struct { } spinlock_t; - #define SPIN_LOCK_UNLOCKED { } -#else - typedef unsigned char spinlock_t; - #define SPIN_LOCK_UNLOCKED 0 -#endif +typedef unsigned char spinlock_t; +#define SPIN_LOCK_UNLOCKED 0 #define spin_lock_init(lock) do { } while(0) #define spin_lock(lock) do { } while(0) @@ -39,8 +34,8 @@ * irq-safe write-lock, but readers can get non-irqsafe * read-locks. */ -typedef struct { } rwlock_t; -#define RW_LOCK_UNLOCKED { } +typedef unsigned long rwlock_t; +#define RW_LOCK_UNLOCKED (rwlock_t) { 0 } #define read_lock(lock) do { } while(0) #define read_unlock(lock) do { } while(0) @@ -58,6 +53,11 @@ typedef struct { } rwlock_t; #else /* !(__SMP__) */ +/* To get debugging spinlocks which detect and catch + * deadlock situations, set DEBUG_SPINLOCKS in the sparc64 + * specific makefile and rebuild your kernel. + */ + /* All of these locking primitives are expected to work properly * even in an RMO memory model, which currently is what the kernel * runs in. @@ -71,10 +71,13 @@ typedef struct { } rwlock_t; * must be pre-V9 branches. */ +#ifndef SPIN_LOCK_DEBUG + typedef unsigned char spinlock_t; #define SPIN_LOCK_UNLOCKED 0 #define spin_lock_init(lock) (*((unsigned char *)(lock)) = 0) +#define spin_is_locked(lock) (*((volatile unsigned char *)(lock)) != 0) #define spin_unlock_wait(lock) \ do { membar("#LoadLoad"); \ @@ -177,8 +180,42 @@ extern __inline__ void spin_unlock_irqrestore(spinlock_t *lock, unsigned long fl : "memory"); } +#else /* !(SPIN_LOCK_DEBUG) */ + +typedef struct { + unsigned char lock; + unsigned int owner_pc, owner_cpu; +} spinlock_t; +#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0, 0, NO_PROC_ID } +#define spin_lock_init(__lock) \ +do { (__lock)->lock = 0; \ + (__lock)->owner_pc = 0; \ + (__lock)->owner_cpu = NO_PROC_ID; \ +} while(0) +#define spin_is_locked(__lock) (*((volatile unsigned char *)(&((__lock)->lock))) != 0) +#define spin_unlock_wait(__lock) \ +do { \ + membar("#LoadLoad"); \ +} while(*((volatile unsigned char *)(&((__lock)->lock)))) + +extern void _do_spin_lock (spinlock_t *lock, char *str); +extern void _do_spin_unlock (spinlock_t *lock); +extern int _spin_trylock (spinlock_t *lock); + +#define spin_trylock(lp) _spin_trylock(lp) +#define spin_lock(lock) _do_spin_lock(lock, "spin_lock") +#define spin_lock_irq(lock) do { __cli(); _do_spin_lock(lock, "spin_lock_irq"); } while(0) +#define spin_lock_irqsave(lock, flags) do { __save_and_cli(flags); _do_spin_lock(lock, "spin_lock_irqsave"); } while(0) +#define spin_unlock(lock) _do_spin_unlock(lock) +#define spin_unlock_irq(lock) do { _do_spin_unlock(lock); __sti(); } while(0) +#define spin_unlock_irqrestore(lock, flags) do { _do_spin_unlock(lock); __restore_flags(flags); } while(0) + +#endif /* SPIN_LOCK_DEBUG */ + /* Multi-reader locks, these are much saner than the 32-bit Sparc ones... */ +#ifndef SPIN_LOCK_DEBUG + typedef unsigned long rwlock_t; #define RW_LOCK_UNLOCKED 0 @@ -278,6 +315,58 @@ extern __inline__ void write_unlock(rwlock_t *rw) #define write_unlock_irqrestore(lock, flags) \ do { write_unlock(lock); __restore_flags(flags); } while (0) +#else /* !(SPIN_LOCK_DEBUG) */ + +typedef struct { + unsigned long lock; + unsigned int writer_pc, writer_cpu; + unsigned int reader_pc[4]; +} rwlock_t; +#define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, NO_PROC_ID, { 0, 0, 0, 0 } } + +extern void _do_read_lock(rwlock_t *rw, char *str); +extern void _do_read_unlock(rwlock_t *rw, char *str); +extern void _do_write_lock(rwlock_t *rw, char *str); +extern void _do_write_unlock(rwlock_t *rw); + +#define read_lock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _do_read_lock(lock, "read_lock"); \ + __restore_flags(flags); \ +} while(0) +#define read_lock_irq(lock) do { __cli(); _do_read_lock(lock, "read_lock_irq"); } while(0) +#define read_lock_irqsave(lock, flags) do { __save_and_cli(flags); _do_read_lock(lock, "read_lock_irqsave"); } while(0) + +#define read_unlock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _do_read_unlock(lock, "read_unlock"); \ + __restore_flags(flags); \ +} while(0) +#define read_unlock_irq(lock) do { _do_read_unlock(lock, "read_unlock_irq"); __sti() } while(0) +#define read_unlock_irqrestore(lock, flags) do { _do_read_unlock(lock, "read_unlock_irqrestore"); __restore_flags(flags); } while(0) + +#define write_lock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _do_write_lock(lock, "write_lock"); \ + __restore_flags(flags); \ +} while(0) +#define write_lock_irq(lock) do { __cli(); _do_write_lock(lock, "write_lock_irq"); } while(0) +#define write_lock_irqsave(lock, flags) do { __save_and_cli(flags); _do_write_lock(lock, "write_lock_irqsave"); } while(0) + +#define write_unlock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _do_write_unlock(lock); \ + __restore_flags(flags); \ +} while(0) +#define write_unlock_irq(lock) do { _do_write_unlock(lock); __sti(); } while(0) +#define write_unlock_irqrestore(lock, flags) do { _do_write_unlock(lock); __restore_flags(flags); } while(0) + +#endif /* SPIN_LOCK_DEBUG */ + #endif /* __SMP__ */ #endif /* !(__ASSEMBLY__) */ diff --git a/include/asm-sparc64/string.h b/include/asm-sparc64/string.h index b5293acd9..c1a67071f 100644 --- a/include/asm-sparc64/string.h +++ b/include/asm-sparc64/string.h @@ -1,4 +1,4 @@ -/* $Id: string.h,v 1.11 1998/06/12 14:54:35 jj Exp $ +/* $Id: string.h,v 1.14 1998/10/20 03:09:18 jj Exp $ * string.h: External definitions for optimized assembly string * routines for the Linux Kernel. * @@ -65,23 +65,7 @@ extern inline void *__nonconstant_memcpy(void *to, const void *from, __kernel_si #define __HAVE_ARCH_MEMSET -extern inline void *__constant_c_and_count_memset(void *s, char c, __kernel_size_t count) -{ - extern __kernel_size_t __bzero(void *, __kernel_size_t); - extern void *__bzero_1page(void *); - - if(!c) { - if (count == 8192) - __bzero_1page(s); - else - __bzero(s, count); - } else { - __memset(s, c, count); - } - return s; -} - -extern inline void *__constant_c_memset(void *s, char c, __kernel_size_t count) +extern inline void *__constant_memset(void *s, char c, __kernel_size_t count) { extern __kernel_size_t __bzero(void *, __kernel_size_t); @@ -100,10 +84,9 @@ extern inline void *__nonconstant_memset(void *s, char c, __kernel_size_t count) #undef memset #define memset(s, c, count) \ -(__builtin_constant_p(c) ? (__builtin_constant_p(count) ? \ - __constant_c_and_count_memset((s), (c), (count)) : \ - __constant_c_memset((s), (c), (count))) \ - : __nonconstant_memset((s), (c), (count))) +(__builtin_constant_p(c) ? \ + __constant_memset((s), (c), (count)) : \ + __nonconstant_memset((s), (c), (count))) #define __HAVE_ARCH_MEMSCAN @@ -128,6 +111,20 @@ extern inline void *__nonconstant_memset(void *s, char c, __kernel_size_t count) /* Now the str*() stuff... */ #define __HAVE_ARCH_STRLEN +extern __kernel_size_t __strlen(const char *); + +#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +extern __kernel_size_t strlen(const char *); +#else /* !EGCS */ +/* Ugly but it works around a bug in our original sparc64-linux-gcc. */ +#undef strlen +#define strlen(__arg0) \ +({ int __strlen_res = __strlen(__arg0) + 1; \ + __strlen_res -= 1; \ + __strlen_res; \ +}) +#endif /* !EGCS */ + #define __HAVE_ARCH_STRNCMP extern int __strncmp(const char *, const char *, __kernel_size_t); diff --git a/include/asm-sparc64/system.h b/include/asm-sparc64/system.h index 55072c93b..6212bd223 100644 --- a/include/asm-sparc64/system.h +++ b/include/asm-sparc64/system.h @@ -1,4 +1,4 @@ -/* $Id: system.h,v 1.42 1998/07/29 01:32:51 davem Exp $ */ +/* $Id: system.h,v 1.47 1998/10/21 03:21:20 davem Exp $ */ #ifndef __SPARC64_SYSTEM_H #define __SPARC64_SYSTEM_H @@ -76,24 +76,17 @@ extern unsigned long empty_zero_page; #else #ifndef __ASSEMBLY__ -extern unsigned char global_irq_holder; -#endif - -#define save_flags(x) \ -do { ((x) = ((global_irq_holder == (unsigned char) smp_processor_id()) ? 1 : \ - ((getipl() != 0) ? 2 : 0))); } while(0) - -#define save_and_cli(flags) do { save_flags(flags); cli(); } while(0) - -#ifndef __ASSEMBLY__ extern void __global_cli(void); extern void __global_sti(void); +extern unsigned long __global_save_flags(void); extern void __global_restore_flags(unsigned long flags); #endif #define cli() __global_cli() #define sti() __global_sti() +#define save_flags(x) ((x) = __global_save_flags()) #define restore_flags(flags) __global_restore_flags(flags) +#define save_and_cli(flags) do { save_flags(flags); cli(); } while(0) #endif @@ -107,6 +100,12 @@ extern void __global_restore_flags(unsigned long flags); #define flushw_all() __asm__ __volatile__("flushw") +/* Performance counter register access. */ +#define read_pcr(__p) __asm__ __volatile__("rd %%pcr, %0" : "=r" (__p)) +#define write_pcr(__p) __asm__ __volatile__("wr %0, 0x0, %%pcr" : : "r" (__p)); +#define read_pic(__p) __asm__ __volatile__("rd %%pic, %0" : "=r" (__p)) +#define reset_pic() __asm__ __volatile__("wr %g0, 0x0, %pic"); + #ifndef __ASSEMBLY__ extern void synchronize_user_stack(void); @@ -141,12 +140,22 @@ extern __inline__ void flushw_user(void) * not reference %g6. */ #define switch_to(prev, next) \ -do { save_and_clear_fpu(); \ - (next)->mm->cpu_vm_mask |= (1UL << smp_processor_id()); \ +do { if (current->tss.flags & SPARC_FLAG_PERFCTR) { \ + unsigned long __tmp; \ + read_pcr(__tmp); \ + current->tss.pcr_reg = __tmp; \ + read_pic(__tmp); \ + current->tss.kernel_cntd0 += (unsigned int)(__tmp); \ + current->tss.kernel_cntd1 += ((__tmp) >> 32); \ + } \ + save_and_clear_fpu(); \ __asm__ __volatile__( \ - "rdpr %%pstate, %%g2\n\t" \ - "wrpr %%g2, 0x3, %%pstate\n\t" \ "flushw\n\t" \ + "wrpr %g0, 0x94, %pstate\n\t"); \ + __get_mmu_context(next); \ + (next)->mm->cpu_vm_mask |= (1UL << smp_processor_id()); \ + __asm__ __volatile__( \ + "wrpr %%g0, 0x95, %%pstate\n\t" \ "stx %%l0, [%%sp + 2047 + 0x60]\n\t" \ "stx %%l1, [%%sp + 2047 + 0x68]\n\t" \ "stx %%i6, [%%sp + 2047 + 0x70]\n\t" \ @@ -168,10 +177,12 @@ do { save_and_clear_fpu(); \ "ldx [%%sp + 2047 + 0x68], %%l1\n\t" \ "ldx [%%sp + 2047 + 0x70], %%i6\n\t" \ "ldx [%%sp + 2047 + 0x78], %%i7\n\t" \ + "wrpr %%g0, 0x94, %%pstate\n\t" \ + "mov %%l2, %%g6\n\t" \ "wrpr %%g0, 0x96, %%pstate\n\t" \ "andcc %%o7, 0x100, %%g0\n\t" \ "bne,pn %%icc, ret_from_syscall\n\t" \ - " mov %%l2, %%g6\n\t" \ + " nop\n\t" \ : \ : "r" (next), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.wstate)), \ @@ -182,6 +193,11 @@ do { save_and_clear_fpu(); \ "l2", "l3", "l4", "l5", "l6", "l7", \ "i0", "i1", "i2", "i3", "i4", "i5", \ "o0", "o1", "o2", "o3", "o4", "o5", "o7"); \ + /* If you fuck with this, update ret_from_syscall code too. */ \ + if (current->tss.flags & SPARC_FLAG_PERFCTR) { \ + write_pcr(current->tss.pcr_reg); \ + reset_pic(); \ + } \ } while(0) extern __inline__ unsigned long xchg32(__volatile__ unsigned int *m, unsigned int val) diff --git a/include/asm-sparc64/termios.h b/include/asm-sparc64/termios.h index 8a972984b..767722d4c 100644 --- a/include/asm-sparc64/termios.h +++ b/include/asm-sparc64/termios.h @@ -1,4 +1,4 @@ -/* $Id: termios.h,v 1.5 1998/04/12 06:27:22 davem Exp $ */ +/* $Id: termios.h,v 1.6 1998/10/04 06:50:15 davem Exp $ */ #ifndef _SPARC64_TERMIOS_H #define _SPARC64_TERMIOS_H @@ -63,6 +63,9 @@ struct winsize { #define N_AX25 5 #define N_X25 6 #define N_6PACK 7 +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ +#define N_R3964 9 /* Reserved for Simatic R3964 module */ +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ #ifdef __KERNEL__ diff --git a/include/asm-sparc64/ttable.h b/include/asm-sparc64/ttable.h index 9d2434618..2cd04004a 100644 --- a/include/asm-sparc64/ttable.h +++ b/include/asm-sparc64/ttable.h @@ -1,4 +1,4 @@ -/* $Id: ttable.h,v 1.8 1998/06/12 14:54:32 jj Exp $ */ +/* $Id: ttable.h,v 1.10 1998/09/25 01:09:45 davem Exp $ */ #ifndef _SPARC64_TTABLE_H #define _SPARC64_TTABLE_H @@ -72,26 +72,6 @@ sethi %hi(systbl), %l7; \ nop; nop; nop; -#define ACCESS_EXCEPTION_TRAP(routine) \ - rdpr %pstate, %g1; \ - wrpr %g1, PSTATE_MG|PSTATE_AG, %pstate; \ - ba,pt %xcc, etrap; \ - rd %pc, %g7; \ - call routine; \ - add %sp, STACK_BIAS + REGWIN_SZ, %o0; \ - ba,pt %xcc, rtrap; \ - clr %l6; - -#define ACCESS_EXCEPTION_TRAPTL1(routine) \ - rdpr %pstate, %g1; \ - wrpr %g1, PSTATE_MG|PSTATE_AG, %pstate; \ - ba,pt %xcc, etraptl1; \ - rd %pc, %g7; \ - call routine; \ - add %sp, STACK_BIAS + REGWIN_SZ, %o0; \ - ba,pt %xcc, rtrap; \ - clr %l6; - #define INDIRECT_SOLARIS_SYSCALL(num) \ sethi %hi(109f), %g7; \ ba,pt %xcc, etrap; \ @@ -205,7 +185,8 @@ stxa %i6, [%sp + STACK_BIAS + 0x70] %asi; \ stxa %i7, [%sp + STACK_BIAS + 0x78] %asi; \ saved; retry; nop; nop; nop; nop; nop; nop; \ - nop; nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + b,a,pt %xcc, spill_fixup_dax; \ b,a,pt %xcc, spill_fixup_mna; \ b,a,pt %xcc, spill_fixup; @@ -230,7 +211,8 @@ stwa %i6, [%sp + 0x38] %asi; \ stwa %i7, [%sp + 0x3c] %asi; \ saved; retry; nop; nop; nop; nop; \ - nop; nop; nop; nop; nop; nop; \ + nop; nop; nop; nop; nop; \ + b,a,pt %xcc, spill_fixup_dax; \ b,a,pt %xcc, spill_fixup_mna; \ b,a,pt %xcc, spill_fixup; @@ -292,7 +274,8 @@ ldxa [%sp + STACK_BIAS + 0x70] %asi, %i6; \ ldxa [%sp + STACK_BIAS + 0x78] %asi, %i7; \ restored; retry; nop; nop; nop; nop; nop; nop; \ - nop; nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + b,a,pt %xcc, fill_fixup_dax; \ b,a,pt %xcc, fill_fixup_mna; \ b,a,pt %xcc, fill_fixup; @@ -317,7 +300,8 @@ lduwa [%sp + 0x38] %asi, %i6; \ lduwa [%sp + 0x3c] %asi, %i7; \ restored; retry; nop; nop; nop; nop; \ - nop; nop; nop; nop; nop; nop; \ + nop; nop; nop; nop; nop; \ + b,a,pt %xcc, fill_fixup_dax; \ b,a,pt %xcc, fill_fixup_mna; \ b,a,pt %xcc, fill_fixup; diff --git a/include/asm-sparc64/uaccess.h b/include/asm-sparc64/uaccess.h index ec80bb5dc..93c14ae3f 100644 --- a/include/asm-sparc64/uaccess.h +++ b/include/asm-sparc64/uaccess.h @@ -1,4 +1,4 @@ -/* $Id: uaccess.h,v 1.25 1998/04/28 08:23:34 davem Exp $ */ +/* $Id: uaccess.h,v 1.28 1998/10/11 06:58:34 davem Exp $ */ #ifndef _ASM_UACCESS_H #define _ASM_UACCESS_H diff --git a/include/asm-sparc64/unistd.h b/include/asm-sparc64/unistd.h index 960d3a01b..2db3c1547 100644 --- a/include/asm-sparc64/unistd.h +++ b/include/asm-sparc64/unistd.h @@ -1,4 +1,4 @@ -/* $Id: unistd.h,v 1.20 1998/07/28 13:08:40 jj Exp $ */ +/* $Id: unistd.h,v 1.23 1998/10/07 01:28:02 davem Exp $ */ #ifndef _SPARC64_UNISTD_H #define _SPARC64_UNISTD_H @@ -16,7 +16,6 @@ * Copyright (C) 1995 Adrian M. Rodriguez (adrian@remus.rutgers.edu) */ -#define __NR_setup 0 /* Used only by init, to get system going. */ #define __NR_exit 1 /* Common */ #define __NR_fork 2 /* Common */ #define __NR_read 3 /* Common */ @@ -29,12 +28,12 @@ #define __NR_unlink 10 /* Common */ #define __NR_execv 11 /* SunOS Specific */ #define __NR_chdir 12 /* Common */ -/* #define __NR_ni_syscall 13 ENOSYS under SunOS */ +#define __NR_chown 13 /* Common */ #define __NR_mknod 14 /* Common */ #define __NR_chmod 15 /* Common */ -#define __NR_chown 16 /* Common */ +#define __NR_lchown 16 /* Common */ #define __NR_brk 17 /* Common */ -/* #define __NR_ni_syscall 18 ENOSYS under SunOS */ +#define __NR_perfctr 18 /* Performance counter operations */ #define __NR_lseek 19 /* Common */ #define __NR_getpid 20 /* Common */ #define __NR_capget 21 /* Linux Specific */ @@ -414,7 +413,6 @@ return -1; \ #define __NR__exit __NR_exit static __inline__ _syscall0(int,idle) static __inline__ _syscall0(int,pause) -static __inline__ _syscall1(int,setup,int,magic) static __inline__ _syscall0(int,sync) static __inline__ _syscall0(pid_t,setsid) static __inline__ _syscall3(int,write,int,fd,__const__ char *,buf,off_t,count) diff --git a/include/asm-sparc64/visasm.h b/include/asm-sparc64/visasm.h index e1de6a384..2cf9e320c 100644 --- a/include/asm-sparc64/visasm.h +++ b/include/asm-sparc64/visasm.h @@ -1,4 +1,4 @@ -/* $Id: visasm.h,v 1.2 1998/06/19 12:14:47 jj Exp $ */ +/* $Id: visasm.h,v 1.3 1998/09/04 01:59:48 ecd Exp $ */ #ifndef _SPARC64_VISASM_H #define _SPARC64_VISASM_H @@ -10,7 +10,7 @@ #include <asm/pstate.h> #include <asm/ptrace.h> -#define AOFF_task_fpregs ((AOFF_task_sigmask_lock + 285)&~255) +#define AOFF_task_fpregs (((ASIZ_task) + 255) & ~255) /* Clobbers %o5, %g1, %g2, %g3, %g7, %icc, %xcc */ diff --git a/include/linux/acct.h b/include/linux/acct.h index e1c96a4c1..e20b18399 100644 --- a/include/linux/acct.h +++ b/include/linux/acct.h @@ -76,8 +76,10 @@ struct acct #include <linux/config.h> #ifdef CONFIG_BSD_PROCESS_ACCT +extern void acct_auto_close(kdev_t dev); extern int acct_process(long exitcode); #else +#define acct_auto_close(x) do { } while (0) #define acct_process(x) do { } while (0) #endif diff --git a/include/linux/apm_bios.h b/include/linux/apm_bios.h index f0b7a5793..a478c0c66 100644 --- a/include/linux/apm_bios.h +++ b/include/linux/apm_bios.h @@ -3,7 +3,7 @@ /* * Include file for the interface to an APM BIOS - * Copyright 1994, 1995 Stephen Rothwell (Stephen.Rothwell@pd.necisa.oz.au) + * Copyright 1994-1998 Stephen Rothwell (Stephen.Rothwell@canb.auug.org.au) * * 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 @@ -14,8 +14,6 @@ * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. - * - * $Id: apm_bios.h,v 0.9 1995/03/09 13:50:05 sfr Exp $ */ typedef unsigned short apm_event_t; @@ -79,11 +77,12 @@ struct apm_bios_struct { extern struct apm_bios_info apm_bios_info; extern void apm_bios_init(void); +extern void apm_setup(char *, int *); extern int apm_register_callback(int (*callback)(apm_event_t)); extern void apm_unregister_callback(int (*callback)(apm_event_t)); -extern int apm_set_power_state(ushort state); +extern void apm_power_off(void); extern int apm_display_blank(void); extern int apm_display_unblank(void); diff --git a/include/linux/auto_fs.h b/include/linux/auto_fs.h index 2b25d2902..9a0ddd6c4 100644 --- a/include/linux/auto_fs.h +++ b/include/linux/auto_fs.h @@ -22,6 +22,27 @@ #define AUTOFS_PROTO_VERSION 3 +/* + * Architectures where both 32- and 64-bit binaries can be executed + * on 64-bit kernels need this. This keeps the structure format + * uniform, and makes sure the wait_queue_token isn't too big to be + * passed back down to the kernel. + * + * This assumes that on these architectures: + * mode 32 bit 64 bit + * ------------------------- + * int 32 bit 32 bit + * long 32 bit 64 bit + * + * If so, 32-bit user-space code should be backwards compatible. + */ + +#if defined(__sparc__) || defined(__mips__) +typedef unsigned int autofs_wqt_t; +#else +typedef unsigned long autofs_wqt_t; +#endif + enum autofs_packet_type { autofs_ptype_missing, /* Missing entry (mount request) */ autofs_ptype_expire, /* Expire entry (umount request) */ @@ -34,7 +55,7 @@ struct autofs_packet_hdr { struct autofs_packet_missing { struct autofs_packet_hdr hdr; - unsigned long wait_queue_token; + autofs_wqt_t wait_queue_token; int len; char name[NAME_MAX+1]; }; diff --git a/include/linux/blk.h b/include/linux/blk.h index e069791f2..e0d904fc1 100644 --- a/include/linux/blk.h +++ b/include/linux/blk.h @@ -147,13 +147,13 @@ static void floppy_off(unsigned int nr); #define DEVICE_ON(device) #define DEVICE_OFF(device) -#elif (MAJOR_NR == SCSI_DISK_MAJOR) +#elif (SCSI_DISK_MAJOR(MAJOR_NR)) #define DEVICE_NAME "scsidisk" #define DEVICE_INTR do_sd #define TIMEOUT_VALUE (2*HZ) #define DEVICE_REQUEST do_sd_request -#define DEVICE_NR(device) (MINOR(device) >> 4) +#define DEVICE_NR(device) (((MAJOR(device) & SD_MAJOR_MASK) << (8 - 4)) + (MINOR(device) >> 4)) #define DEVICE_ON(device) #define DEVICE_OFF(device) diff --git a/include/linux/capability.h b/include/linux/capability.h index 3f5260c02..07248ac5d 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h @@ -38,9 +38,19 @@ typedef struct __user_cap_data_struct { #ifdef __KERNEL__ +/* #define STRICT_CAP_T_TYPECHECKS */ + +#ifdef STRICT_CAP_T_TYPECHECKS + typedef struct kernel_cap_struct { __u32 cap; } kernel_cap_t; + +#else + +typedef __u32 kernel_cap_t; + +#endif #define _USER_CAP_HEADER_SIZE (2*sizeof(__u32)) #define _KERNEL_CAP_T_SIZE (sizeof(kernel_cap_t)) @@ -259,51 +269,63 @@ typedef struct kernel_cap_struct { /* * Internal kernel functions only */ + +#ifdef STRICT_CAP_T_TYPECHECKS + +#define to_cap_t(x) { x } +#define cap_t(x) (x).cap + +#else + +#define to_cap_t(x) (x) +#define cap_t(x) (x) + +#endif -#define CAP_EMPTY_SET { 0 } -#define CAP_FULL_SET { ~0 } -#define CAP_INIT_EFF_SET { ~0 & ~CAP_TO_MASK(CAP_SETPCAP) } -#define CAP_INIT_INH_SET { ~0 & ~CAP_TO_MASK(CAP_SETPCAP) } +#define CAP_EMPTY_SET to_cap_t(0) +#define CAP_FULL_SET to_cap_t(~0) +#define CAP_INIT_EFF_SET to_cap_t(~0 & ~CAP_TO_MASK(CAP_SETPCAP)) +#define CAP_INIT_INH_SET to_cap_t(~0 & ~CAP_TO_MASK(CAP_SETPCAP)) #define CAP_TO_MASK(x) (1 << (x)) -#define cap_raise(c, flag) ((c).cap |= CAP_TO_MASK(flag)) -#define cap_lower(c, flag) ((c).cap &= ~CAP_TO_MASK(flag)) -#define cap_raised(c, flag) ((c).cap & CAP_TO_MASK(flag)) +#define cap_raise(c, flag) (cap_t(c) |= CAP_TO_MASK(flag)) +#define cap_lower(c, flag) (cap_t(c) &= ~CAP_TO_MASK(flag)) +#define cap_raised(c, flag) (cap_t(c) & CAP_TO_MASK(flag)) static inline kernel_cap_t cap_combine(kernel_cap_t a, kernel_cap_t b) { kernel_cap_t dest; - dest.cap = a.cap | b.cap; + cap_t(dest) = cap_t(a) | cap_t(b); return dest; } static inline kernel_cap_t cap_intersect(kernel_cap_t a, kernel_cap_t b) { kernel_cap_t dest; - dest.cap = a.cap & b.cap; + cap_t(dest) = cap_t(a) & cap_t(b); return dest; } static inline kernel_cap_t cap_drop(kernel_cap_t a, kernel_cap_t drop) { kernel_cap_t dest; - dest.cap = a.cap & ~drop.cap; + cap_t(dest) = cap_t(a) & ~cap_t(drop); return dest; } static inline kernel_cap_t cap_invert(kernel_cap_t c) { kernel_cap_t dest; - dest.cap = ~c.cap; + cap_t(dest) = ~cap_t(c); return dest; } -#define cap_isclear(c) (!(c).cap) -#define cap_issubset(a,set) (!((a).cap & ~(set).cap)) +#define cap_isclear(c) (!cap_t(c)) +#define cap_issubset(a,set) (!(cap_t(a) & ~cap_t(set))) -#define cap_clear(c) do { (c).cap = 0; } while(0) -#define cap_set_full(c) do { (c).cap = ~0; } while(0) -#define cap_mask(c,mask) do { (c).cap &= (mask).cap; } while(0) +#define cap_clear(c) do { cap_t(c) = 0; } while(0) +#define cap_set_full(c) do { cap_t(c) = ~0; } while(0) +#define cap_mask(c,mask) do { cap_t(c) &= cap_t(mask); } while(0) #define cap_is_fs_cap(c) (CAP_TO_MASK(c) & CAP_FS_MASK) diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index 8448fc6ca..9b8a9c3c6 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h @@ -5,6 +5,8 @@ * 1994, 1995 Eberhard Moenkeberg, emoenke@gwdg.de * 1996 David van Leeuwen, david@tm.tno.nl * 1997, 1998 Erik Andersen, andersee@debian.org + * 1998 Jens Axboe, axboe@image.dk and + * Chris Zwilling, chris@cloudnet.com */ #ifndef _LINUX_CDROM_H @@ -415,6 +417,14 @@ extern struct file_operations cdrom_fops; extern int register_cdrom(struct cdrom_device_info *cdi); extern int unregister_cdrom(struct cdrom_device_info *cdi); +typedef struct { + int data; + int audio; + int cdi; + int xa; + long error; +} tracktype; +extern void cdrom_count_tracks(struct cdrom_device_info *cdi,tracktype* tracks); #endif /* End of kernel only stuff */ #endif /* _LINUX_CDROM_H */ diff --git a/include/linux/console.h b/include/linux/console.h index 0fdb484d6..35bc9984b 100644 --- a/include/linux/console.h +++ b/include/linux/console.h @@ -54,15 +54,11 @@ extern struct consw compat_con; /* console wrapper */ extern struct consw prom_con; /* SPARC PROM console */ void take_over_console(struct consw *sw, int first, int last, int deflt); - -/* flag bits */ -#define CON_INITED (1) +void give_up_console(struct consw *sw); /* scroll */ #define SM_UP (1) #define SM_DOWN (2) -#define SM_LEFT (3) -#define SM_RIGHT (4) /* cursor */ #define CM_DRAW (1) diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h index dafd1c299..0f664086a 100644 --- a/include/linux/console_struct.h +++ b/include/linux/console_struct.h @@ -19,7 +19,6 @@ struct vc_data { struct consw *vc_sw; unsigned short *vc_screenbuf; /* In-memory character/attribute buffer */ unsigned int vc_screenbuf_size; - unsigned short vc_video_erase_char; /* Background erase character */ unsigned char vc_attr; /* Current attributes */ unsigned char vc_def_color; /* Default colors */ unsigned char vc_color; /* Foreground & background */ @@ -28,6 +27,8 @@ struct vc_data { unsigned char vc_halfcolor; /* Color for half intensity mode */ unsigned short vc_complement_mask; /* [#] Xor mask for mouse pointer */ unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */ + unsigned short vc_video_erase_char; /* Background erase character */ + unsigned short vc_s_complement_mask; /* Saved mouse pointer mask */ unsigned int vc_x, vc_y; /* Cursor position */ unsigned int vc_top, vc_bottom; /* Scrolling region */ unsigned int vc_state; /* Escape sequence parser state */ @@ -104,3 +105,5 @@ extern struct vc vc_cons [MAX_NR_CONSOLES]; #define CUR_SWMASK 0xfff0 #define CUR_DEFAULT CUR_UNDERLINE + +#define CON_IS_VISIBLE(conp) (*conp->vc_display_fg == conp) diff --git a/include/linux/cyclades.h b/include/linux/cyclades.h index e7c8a38f0..41d57b959 100644 --- a/include/linux/cyclades.h +++ b/include/linux/cyclades.h @@ -757,9 +757,9 @@ struct cyclades_port { /* Custom Registers */ #define CyPLX_VER (0x3400) -#define PLX_9050 0x11 -#define PLX_9060 0x12 -#define PLX_9080 0x13 +#define PLX_9050 0x0b +#define PLX_9060 0x0c +#define PLX_9080 0x0d /***************************************************************************/ diff --git a/include/linux/dcache.h b/include/linux/dcache.h index b546fb5af..93b863695 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h @@ -27,7 +27,7 @@ struct qstr { #define init_name_hash() 0 /* partial hash update function. Assume roughly 4 bits per character */ -static __inline__ unsigned long partial_name_hash(unsigned char c, unsigned long prevhash) +static __inline__ unsigned long partial_name_hash(unsigned long c, unsigned long prevhash) { prevhash = (prevhash << 4) | (prevhash >> (8*sizeof(unsigned long)-4)); return prevhash ^ c; diff --git a/include/linux/errqueue.h b/include/linux/errqueue.h new file mode 100644 index 000000000..4a16756d9 --- /dev/null +++ b/include/linux/errqueue.h @@ -0,0 +1,42 @@ +#ifndef _LINUX_ERRQUEUE_H +#define _LINUX_ERRQUEUE_H 1 + +#include <linux/config.h> + +struct sock_extended_err +{ + __u32 ee_errno; + __u8 ee_origin; + __u8 ee_type; + __u8 ee_code; + __u8 ee_pad; + __u32 ee_info; + __u32 ee_data; +}; + +#define SO_EE_ORIGIN_NONE 0 +#define SO_EE_ORIGIN_LOCAL 1 +#define SO_EE_ORIGIN_ICMP 2 +#define SO_EE_ORIGIN_ICMP6 3 + +#define SO_EE_OFFENDER(ee) ((struct sockaddr*)((ee)+1)) + +#ifdef __KERNEL__ +#define SKB_EXT_ERR(skb) ((struct sock_exterr_skb *) ((skb)->cb)) + +struct sock_exterr_skb +{ + union { + struct inet_skb_parm h4; +#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) + struct inet6_skb_parm h6; +#endif + } header; + struct sock_extended_err ee; + u16 addr_offset; + u16 port; +}; + +#endif + +#endif diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h index 6d4205c97..96b1d1955 100644 --- a/include/linux/ext2_fs.h +++ b/include/linux/ext2_fs.h @@ -520,6 +520,7 @@ struct ext2_dir_entry_2 { extern int ext2_permission (struct inode *, int); /* balloc.c */ +extern int ext2_group_sparse(int group); extern int ext2_new_block (const struct inode *, unsigned long, __u32 *, __u32 *, int *); extern void ext2_free_blocks (const struct inode *, unsigned long, diff --git a/include/linux/fb.h b/include/linux/fb.h index 7c631b44a..cb5618a56 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -57,6 +57,14 @@ #define FB_ACCEL_SUN_CREATOR 11 /* Sun Creator/Creator3D */ #define FB_ACCEL_SUN_CGSIX 12 /* Sun cg6 */ #define FB_ACCEL_SUN_LEO 13 /* Sun leo/zx */ +#define FB_ACCEL_IMS_TWINTURBO 14 /* IMS Twin Turbo */ +#define FB_ACCEL_3DLABS_PERMEDIA2 15 /* 3Dlabs Permedia 2 */ +#define FB_ACCEL_MATROX_MGA2064W 16 /* Matrox MGA2064W (Millenium) */ +#define FB_ACCEL_MATROX_MGA1064SG 17 /* Matrox MGA1064SG (Mystique) */ +#define FB_ACCEL_MATROX_MGA2164W 18 /* Matrox MGA2164W (Millenium II) */ +#define FB_ACCEL_MATROX_MGA2164W_AGP 19 /* Matrox MGA2164W (Millenium II) */ +#define FB_ACCEL_MATROX_MGAG100 20 /* Matrox G100 (Productiva G100) */ +#define FB_ACCEL_MATROX_MGAG200 21 /* Matrox G200 (Myst, Mill, ...) */ struct fb_fix_screeninfo { char id[16]; /* identification string eg "TT Builtin" */ @@ -99,6 +107,7 @@ struct fb_bitfield { /* values */ #define FB_ACTIVATE_VBL 16 /* activate values on next vbl */ #define FB_CHANGE_CMAP_VBL 32 /* change colormap on vbl */ +#define FB_ACTIVATE_ALL 64 /* change all VCs on this fb */ #define FB_ACCELF_TEXT 1 /* text mode acceleration */ @@ -230,56 +239,59 @@ struct fb_ops { */ struct display { - /* Filled in by the frame buffer device */ + /* Filled in by the frame buffer device */ - struct fb_var_screeninfo var; /* variable infos. yoffset and vmode */ - /* are updated by fbcon.c */ - struct fb_cmap cmap; /* colormap */ - char *screen_base; /* pointer to top of virtual screen */ + struct fb_var_screeninfo var; /* variable infos. yoffset and vmode */ + /* are updated by fbcon.c */ + struct fb_cmap cmap; /* colormap */ + char *screen_base; /* pointer to top of virtual screen */ /* (virtual address) */ - int visual; - int type; /* see FB_TYPE_* */ - int type_aux; /* Interleave for interleaved Planes */ - u_short ypanstep; /* zero if no hardware ypan */ - u_short ywrapstep; /* zero if no hardware ywrap */ - u_long line_length; /* length of a line in bytes */ - u_short can_soft_blank; /* zero if no hardware blanking */ - u_short inverse; /* != 0 text black on white as default */ + int visual; + int type; /* see FB_TYPE_* */ + int type_aux; /* Interleave for interleaved Planes */ + u_short ypanstep; /* zero if no hardware ypan */ + u_short ywrapstep; /* zero if no hardware ywrap */ + u_long line_length; /* length of a line in bytes */ + u_short can_soft_blank; /* zero if no hardware blanking */ + u_short inverse; /* != 0 text black on white as default */ + struct display_switch *dispsw; /* low level operations */ + void *dispsw_data; /* optional dispsw helper data */ #if 0 - struct fb_fix_cursorinfo fcrsr; - struct fb_var_cursorinfo *vcrsr; - struct fb_cursorstate crsrstate; + struct fb_fix_cursorinfo fcrsr; + struct fb_var_cursorinfo *vcrsr; + struct fb_cursorstate crsrstate; #endif - /* Filled in by the low-level console driver */ - - struct vc_data *conp; /* pointer to console data */ - struct fb_info *fb_info; /* frame buffer for this console */ - int vrows; /* number of virtual rows */ - unsigned short cursor_x; /* current cursor position */ - unsigned short cursor_y; - int fgcol; /* text colors */ - int bgcol; - u_long next_line; /* offset to one line below */ - u_long next_plane; /* offset to next plane */ - u_char *fontdata; /* Font associated to this display */ - unsigned short fontheightlog; - unsigned short fontwidthlog; - unsigned short fontheight; - unsigned short fontwidth; - int userfont; /* != 0 if fontdata kmalloc()ed */ - struct display_switch *dispsw; /* low level operations */ - u_short scrollmode; /* Scroll Method */ - short yscroll; /* Hardware scrolling */ - unsigned char fgshift, bgshift; - unsigned short charmask; /* 0xff or 0x1ff */ + /* Filled in by the low-level console driver */ + + struct vc_data *conp; /* pointer to console data */ + struct fb_info *fb_info; /* frame buffer for this console */ + int vrows; /* number of virtual rows */ + unsigned short cursor_x; /* current cursor position */ + unsigned short cursor_y; + int fgcol; /* text colors */ + int bgcol; + u_long next_line; /* offset to one line below */ + u_long next_plane; /* offset to next plane */ + u_char *fontdata; /* Font associated to this display */ + unsigned short _fontheightlog; + unsigned short _fontwidthlog; + unsigned short _fontheight; + unsigned short _fontwidth; + int userfont; /* != 0 if fontdata kmalloc()ed */ + u_short scrollmode; /* Scroll Method */ + short yscroll; /* Hardware scrolling */ + unsigned char fgshift, bgshift; + unsigned short charmask; /* 0xff or 0x1ff */ }; struct fb_info { char modename[40]; /* default video mode */ int node; + int flags; +#define FBINFO_FLAG_MODULE 1 /* Low-level driver is a module */ struct fb_ops *fbops; struct fb_monspecs monspecs; struct display *disp; /* initial display variable */ @@ -297,6 +309,11 @@ struct fb_info { /* From here on everything is device dependent */ }; +#ifdef MODULE +#define FBINFO_FLAG_DEFAULT FBINFO_FLAG_MODULE +#else +#define FBINFO_FLAG_DEFAULT 0 +#endif /* * This structure abstracts from the underlying hardware. It is not @@ -321,8 +338,8 @@ struct fbgen_hwswitch { int (*pan_display)(const struct fb_var_screeninfo *var, struct fb_info_gen *info); int (*blank)(int blank_mode, struct fb_info_gen *info); - struct display_switch *(*get_dispsw)(const void *par, - struct fb_info_gen *info); + void (*set_dispsw)(const void *par, struct display *disp, + struct fb_info_gen *info); }; struct fb_info_gen { @@ -394,14 +411,13 @@ extern struct display fb_display[MAX_NR_CONSOLES]; extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp); extern void fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to, int fsfromto); -extern int fb_get_cmap(struct fb_cmap *cmap, struct fb_var_screeninfo *var, - int kspc, int (*getcolreg)(u_int, u_int *, u_int *, - u_int *, u_int *, - struct fb_info *), +extern int fb_get_cmap(struct fb_cmap *cmap, int kspc, + int (*getcolreg)(u_int, u_int *, u_int *, u_int *, + u_int *, struct fb_info *), struct fb_info *fb_info); -extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_var_screeninfo *var, - int kspc, int (*setcolreg)(u_int, u_int, u_int, u_int, - u_int, struct fb_info *), +extern int fb_set_cmap(struct fb_cmap *cmap, int kspc, + int (*setcolreg)(u_int, u_int, u_int, u_int, u_int, + struct fb_info *), struct fb_info *fb_info); extern struct fb_cmap *fb_default_cmap(int len); extern void fb_invert_cmaps(void); @@ -462,31 +478,6 @@ struct fb_cursorstate { #define FB_CURSOR_ON 1 #define FB_CURSOR_FLASH 2 -#define FBCMD_DRAWLINE 0x4621 -#define FBCMD_MOVE 0x4622 - -#define FB_LINE_XOR 1 -#define FB_LINE_BOX 2 -#define FB_LINE_FILLED 4 - -struct fb_line { - __s32 start_x; - __s32 start_y; - __s32 end_x; - __s32 end_y; - __u32 color; - __u32 option; -}; - -struct fb_move { - __s32 src_x; - __s32 src_y; - __s32 dest_x; - __s32 dest_y; - __u32 height; - __u32 width; -}; - #endif /* Preliminary */ #endif /* _LINUX_FB_H */ diff --git a/include/linux/fs.h b/include/linux/fs.h index 8a2b4478f..3a38d6f86 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -114,19 +114,27 @@ extern int max_super_blocks, nr_super_blocks; * ioctl() that is not currently implemented. * * Exception: MS_RDONLY is always applied to the entire file system. + * + * Unfortunately, it is possible to change a filesystems flags with it mounted + * with files in use. This means that all of the inodes will not have their + * i_flags updated. Hence, i_flags no longer inherit the superblock mount + * flags, so these have to be checked separately. -- rmk@arm.uk.linux.org */ +#define __IS_FLG(inode,flg) (((inode)->i_sb && (inode)->i_sb->s_flags & (flg)) \ + || (inode)->i_flags & (flg)) + #define IS_RDONLY(inode) (((inode)->i_sb) && ((inode)->i_sb->s_flags & MS_RDONLY)) -#define IS_NOSUID(inode) ((inode)->i_flags & MS_NOSUID) -#define IS_NODEV(inode) ((inode)->i_flags & MS_NODEV) -#define IS_NOEXEC(inode) ((inode)->i_flags & MS_NOEXEC) -#define IS_SYNC(inode) ((inode)->i_flags & MS_SYNCHRONOUS) -#define IS_MANDLOCK(inode) ((inode)->i_flags & MS_MANDLOCK) - -#define IS_QUOTAINIT(inode) ((inode)->i_flags & S_QUOTA) -#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND) -#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE) -#define IS_NOATIME(inode) ((inode)->i_flags & MS_NOATIME) -#define IS_NODIRATIME(inode) ((inode)->i_flags & MS_NODIRATIME) +#define IS_NOSUID(inode) __IS_FLG(inode, MS_NOSUID) +#define IS_NODEV(inode) __IS_FLG(inode, MS_NODEV) +#define IS_NOEXEC(inode) __IS_FLG(inode, MS_NOEXEC) +#define IS_SYNC(inode) __IS_FLG(inode, MS_SYNCHRONOUS) +#define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK) + +#define IS_QUOTAINIT(inode) ((inode)->i_flags & S_QUOTA) +#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND) +#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE) +#define IS_NOATIME(inode) __IS_FLG(inode, MS_NOATIME) +#define IS_NODIRATIME(inode) __IS_FLG(inode, MS_NODIRATIME) /* the read-only stuff doesn't really belong here, but any other place is probably as bad and I don't want to create yet another include file. */ @@ -349,6 +357,7 @@ struct inode { unsigned long i_version; unsigned long i_nrpages; struct semaphore i_sem; + struct semaphore i_atomic_write; struct inode_operations *i_op; struct super_block *i_sb; struct wait_queue *i_wait; @@ -480,39 +489,6 @@ extern void posix_unblock_lock(struct file_lock *); #include <linux/stat.h> -#define FLOCK_VERIFY_READ 1 -#define FLOCK_VERIFY_WRITE 2 - -extern int locks_mandatory_locked(struct inode *inode); -extern int locks_mandatory_area(int read_write, struct inode *inode, - struct file *filp, loff_t offset, - size_t count); - -extern inline int locks_verify_locked(struct inode *inode) -{ - /* Candidates for mandatory locking have the setgid bit set - * but no group execute bit - an otherwise meaningless combination. - */ - if (IS_MANDLOCK(inode) && - (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) - return (locks_mandatory_locked(inode)); - return (0); -} - -extern inline int locks_verify_area(int read_write, struct inode *inode, - struct file *filp, loff_t offset, - size_t count) -{ - /* Candidates for mandatory locking have the setgid bit set - * but no group execute bit - an otherwise meaningless combination. - */ - if (IS_MANDLOCK(inode) && - (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) - return (locks_mandatory_area(read_write, inode, filp, offset, - count)); - return (0); -} - struct fasync_struct { int magic; int fa_fd; @@ -626,15 +602,14 @@ struct inode_operations { int (*rename) (struct inode *, struct dentry *, struct inode *, struct dentry *); int (*readlink) (struct dentry *, char *,int); - struct dentry * (*follow_link) (struct dentry *, struct dentry *); + struct dentry * (*follow_link) (struct dentry *, struct dentry *, unsigned int); int (*readpage) (struct file *, struct page *); int (*writepage) (struct file *, struct page *); int (*bmap) (struct inode *,int); void (*truncate) (struct inode *); int (*permission) (struct inode *, int); int (*smap) (struct inode *,int); - int (*updatepage) (struct file *, struct page *, const char *, - unsigned long, unsigned int, int); + int (*updatepage) (struct file *, struct page *, unsigned long, unsigned int, int); int (*revalidate) (struct dentry *); }; @@ -672,6 +647,41 @@ struct file_system_type { extern int register_filesystem(struct file_system_type *); extern int unregister_filesystem(struct file_system_type *); + +#define FLOCK_VERIFY_READ 1 +#define FLOCK_VERIFY_WRITE 2 + +extern int locks_mandatory_locked(struct inode *inode); +extern int locks_mandatory_area(int read_write, struct inode *inode, + struct file *filp, loff_t offset, + size_t count); + +extern inline int locks_verify_locked(struct inode *inode) +{ + /* Candidates for mandatory locking have the setgid bit set + * but no group execute bit - an otherwise meaningless combination. + */ + if (IS_MANDLOCK(inode) && + (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) + return (locks_mandatory_locked(inode)); + return (0); +} + +extern inline int locks_verify_area(int read_write, struct inode *inode, + struct file *filp, loff_t offset, + size_t count) +{ + /* Candidates for mandatory locking have the setgid bit set + * but no group execute bit - an otherwise meaningless combination. + */ + if (IS_MANDLOCK(inode) && + (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) + return (locks_mandatory_area(read_write, inode, filp, offset, + count)); + return (0); +} + + /* fs/open.c */ asmlinkage int sys_open(const char *, int, int); @@ -680,6 +690,7 @@ extern int do_truncate(struct dentry *, unsigned long); extern int get_unused_fd(void); extern void put_unused_fd(unsigned int); extern int close_fp(struct file *, fl_owner_t id); +extern struct file *filp_open(const char *, int, int); extern char * getname(const char * filename); extern void putname(char * name); @@ -787,8 +798,8 @@ extern ino_t find_inode_number(struct dentry *, struct qstr *); #define PTR_ERR(ptr) ((long)(ptr)) #define IS_ERR(ptr) ((unsigned long)(ptr) > (unsigned long)(-1000)) -extern struct dentry * lookup_dentry(const char *, struct dentry *, int); -extern struct dentry * __namei(const char *, int); +extern struct dentry * lookup_dentry(const char *, struct dentry *, unsigned int); +extern struct dentry * __namei(const char *, unsigned int); #define namei(pathname) __namei(pathname, 1) #define lnamei(pathname) __namei(pathname, 0) diff --git a/include/linux/hdreg.h b/include/linux/hdreg.h index bb343ac2e..79d657a0d 100644 --- a/include/linux/hdreg.h +++ b/include/linux/hdreg.h @@ -42,6 +42,7 @@ #define WIN_RESTORE 0x10 #define WIN_READ 0x20 #define WIN_WRITE 0x30 +#define WIN_WRITE_VERIFY 0x3C #define WIN_VERIFY 0x40 #define WIN_FORMAT 0x50 #define WIN_INIT 0x60 @@ -62,6 +63,9 @@ #define WIN_READDMA 0xc8 /* read sectors using DMA transfers */ #define WIN_WRITEDMA 0xca /* write sectors using DMA transfers */ +#define WIN_READ_BUFFER 0xE4 /* force read only 1 sector */ +#define WIN_WRITE_BUFFER 0xE8 /* force write only 1 sector */ + #define WIN_SMART 0xb0 /* self-monitoring and reporting */ /* Additional drive command codes used by ATAPI devices. */ @@ -85,6 +89,7 @@ #define MARK_ERR 0x01 /* Bad address mark */ #define TRK0_ERR 0x02 /* couldn't find track 0 */ #define ABRT_ERR 0x04 /* Command aborted */ +#define MCR_ERR 0x08 /* media change request */ #define ID_ERR 0x10 /* ID field not found */ #define ECC_ERR 0x40 /* Uncorrectable ECC error */ #define BBD_ERR 0x80 /* pre-EIDE meaning: block marked bad */ diff --git a/include/linux/hfs_fs.h b/include/linux/hfs_fs.h index 9b43579c0..eaae0ecc5 100644 --- a/include/linux/hfs_fs.h +++ b/include/linux/hfs_fs.h @@ -104,10 +104,10 @@ */ #define hfs_h_to_mtime(ARG) htonl((hfs_s32)ntohl(ARG)+3029529600U) #define hfs_m_to_htime(ARG) ((hfs_s32)htonl(ntohl(ARG)-3029529600U)) -#define hfs_h_to_utime(ARG) ((hfs_s32)ntohl(ARG)+946684800U) -#define hfs_u_to_htime(ARG) ((hfs_s32)htonl((ARG)-946684800U)) -#define hfs_u_to_mtime(ARG) htonl((ARG)+2082844800U) -#define hfs_m_to_utime(ARG) (ntohl(ARG)-2082844800U) +#define hfs_h_to_utime(ARG) ((hfs_s32)hfs_to_utc(ntohl(ARG)+946684800U)) +#define hfs_u_to_htime(ARG) ((hfs_s32)htonl(hfs_from_utc(ARG)-946684800U)) +#define hfs_u_to_mtime(ARG) htonl(hfs_from_utc(ARG)+2082844800U) +#define hfs_m_to_utime(ARG) (hfs_to_utc(ntohl(ARG)-2082844800U)) /*======== Data structures kept in memory ========*/ diff --git a/include/linux/hfs_sysdep.h b/include/linux/hfs_sysdep.h index 22e2ac66b..00cc64008 100644 --- a/include/linux/hfs_sysdep.h +++ b/include/linux/hfs_sysdep.h @@ -25,6 +25,7 @@ #include <asm/byteorder.h> #include <asm/unaligned.h> +extern struct timezone sys_tz; #undef offsetof #define offsetof(TYPE, MEMB) ((size_t) &((TYPE *)0)->MEMB) @@ -68,8 +69,24 @@ extern inline void hfs_free(void *ptr, unsigned int size) { } +/* handle conversion between times. + * + * NOTE: hfs+ doesn't need this. also, we don't use tz_dsttime as that's + * not a good thing to do. instead, we depend upon tz_minuteswest + * having the correct daylight savings correction. + */ +extern inline hfs_u32 hfs_from_utc(hfs_s32 time) +{ + return time - sys_tz.tz_minuteswest*60; +} + +extern inline hfs_s32 hfs_to_utc(hfs_u32 time) +{ + return time + sys_tz.tz_minuteswest*60; +} + extern inline hfs_u32 hfs_time(void) { - return htonl(CURRENT_TIME+2082844800U); + return htonl(hfs_from_utc(CURRENT_TIME)+2082844800U); } diff --git a/include/linux/hippidevice.h b/include/linux/hippidevice.h index 467798a19..f3b3310e3 100644 --- a/include/linux/hippidevice.h +++ b/include/linux/hippidevice.h @@ -49,6 +49,7 @@ extern void hippi_header_cache_update(struct hh_cache *hh, extern int hippi_header_parse(struct sk_buff *skb, unsigned char *haddr); extern void hippi_net_init(void); +void hippi_setup(struct device *dev); extern struct device *init_hippi_dev(struct device *, int); #endif diff --git a/include/linux/if.h b/include/linux/if.h index a5fdf3aed..cd5f31391 100644 --- a/include/linux/if.h +++ b/include/linux/if.h @@ -43,7 +43,9 @@ #define IFF_PORTSEL 0x2000 /* can set media type */ #define IFF_AUTOMEDIA 0x4000 /* auto media select active */ -#define IFF_NODYNARP 0x8000 /* use static ARP only (HIPPI) */ +#define IFF_DYNAMIC 0x8000 /* dialup device with changing addresses*/ + +#ifdef __KERNEL__ /* * The ifaddr structure contains information about one address * of an interface. They are maintained by the different address @@ -66,6 +68,8 @@ struct ifaddr #define ifa_broadaddr ifa_ifu.ifu_broadaddr /* broadcast address */ #define ifa_dstaddr ifa_ifu.ifu_dstaddr /* other end of link */ +#endif /* __KERNEL__ */ + /* * Device mapping structure. I'd just gone off and designed a * beautiful scheme using only loadable modules with arguments @@ -115,7 +119,7 @@ struct ifreq struct ifmap ifru_map; char ifru_slave[IFNAMSIZ]; /* Just fits the size */ char ifru_newname[IFNAMSIZ]; - __kernel_caddr_t ifru_data; + char * ifru_data; } ifr_ifru; }; @@ -148,7 +152,7 @@ struct ifconf int ifc_len; /* size of buffer */ union { - __kernel_caddr_t ifcu_buf; + char * ifcu_buf; struct ifreq *ifcu_req; } ifc_ifcu; }; diff --git a/include/linux/if_pppvar.h b/include/linux/if_pppvar.h index cf70fe655..a85b33cd1 100644 --- a/include/linux/if_pppvar.h +++ b/include/linux/if_pppvar.h @@ -42,7 +42,7 @@ */ /* - * ==FILEVERSION 980704== + * ==FILEVERSION 981004== * * NOTE TO MAINTAINERS: * If you modify this file at all, please set the above date. @@ -80,6 +80,7 @@ struct ppp { struct slcompress *slcomp; /* for TCP header compression */ struct sk_buff_head xmt_q; /* frames to send from pppd */ struct sk_buff_head rcv_q; /* frames for pppd to read */ + unsigned long xmit_busy; /* bit 0 set when xmitter busy */ /* Information specific to using ppp on async serial lines. */ struct tty_struct *tty; /* ptr to TTY structure */ diff --git a/include/linux/in.h b/include/linux/in.h index 2cc007a43..0dc2231a4 100644 --- a/include/linux/in.h +++ b/include/linux/in.h @@ -57,17 +57,18 @@ struct in_addr { #define IP_RETOPTS 7 #define IP_PKTINFO 8 #define IP_PKTOPTIONS 9 -#define IP_PMTUDISC 10 +#define IP_MTU_DISCOVER 10 #define IP_RECVERR 11 #define IP_RECVTTL 12 #define IP_RECVTOS 13 +#define IP_MTU 14 /* BSD compatibility */ #define IP_RECVRETOPTS IP_RETOPTS -/* IP_PMTUDISC values */ -#define IP_PMTUDISC_WANT 0 /* Use per route hints */ -#define IP_PMTUDISC_DONT 1 /* Never send DF frames */ +/* IP_MTU_DISCOVER values */ +#define IP_PMTUDISC_DONT 0 /* Never send DF frames */ +#define IP_PMTUDISC_WANT 1 /* Use per route hints */ #define IP_PMTUDISC_DO 2 /* Always DF */ #define IP_MULTICAST_IF 32 diff --git a/include/linux/in6.h b/include/linux/in6.h index b63918419..50f9d2d72 100644 --- a/include/linux/in6.h +++ b/include/linux/in6.h @@ -149,5 +149,13 @@ struct ipv6_mreq { #define IPV6_ADD_MEMBERSHIP 20 #define IPV6_DROP_MEMBERSHIP 21 #define IPV6_ROUTER_ALERT 22 +#define IPV6_MTU_DISCOVER 23 +#define IPV6_MTU 24 +#define IPV6_RECVERR 25 + +/* IPV6_MTU_DISCOVER values */ +#define IPV6_PMTUDISC_DONT 0 +#define IPV6_PMTUDISC_WANT 1 +#define IPV6_PMTUDISC_DO 2 #endif diff --git a/include/linux/ip.h b/include/linux/ip.h index f09175b4e..6675cee95 100644 --- a/include/linux/ip.h +++ b/include/linux/ip.h @@ -67,29 +67,13 @@ #define MAXTTL 255 #define IPDEFTTL 64 -struct timestamp { - __u8 len; - __u8 ptr; -#if defined(__LITTLE_ENDIAN_BITFIELD) - __u8 flags:4, - overflow:4; -#elif defined(__BIG_ENDIAN_BITFIELD) - __u8 overflow:4, - flags:4; -#else -#error "Please fix <asm/byteorder.h>" -#endif - __u32 data[9]; -}; +/* struct timestamp, struct route and MAX_ROUTES are removed. - -#define MAX_ROUTE 16 - -struct route { - char route_size; - char pointer; - unsigned long route[MAX_ROUTE]; -}; + REASONS: it is clear that nobody used them because: + - MAX_ROUTES value was wrong. + - "struct route" was wrong. + - "struct timestamp" had fatally misaligned bitfields and was completely unusable. + */ #define IPOPT_OPTVAL 0 #define IPOPT_OLEN 1 @@ -102,7 +86,7 @@ struct route { #define IPOPT_TS_TSONLY 0 /* timestamps only */ #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ -#define IPOPT_TS_PRESPEC 2 /* specified modules only */ +#define IPOPT_TS_PRESPEC 3 /* specified modules only */ struct ip_options { __u32 faddr; /* Saved first hop address */ diff --git a/include/linux/ip_fw.h b/include/linux/ip_fw.h index eeaa1eb5f..f36ec7e6f 100644 --- a/include/linux/ip_fw.h +++ b/include/linux/ip_fw.h @@ -22,11 +22,13 @@ #ifndef _IP_FWCHAINS_H #define _IP_FWCHAINS_H +#ifdef __KERNEL__ #include <linux/icmp.h> #include <linux/in.h> #include <linux/ip.h> #include <linux/tcp.h> #include <linux/udp.h> +#endif /* __KERNEL__ */ #define IP_FW_MAX_LABEL_LENGTH 8 typedef char ip_chainlabel[IP_FW_MAX_LABEL_LENGTH+1]; @@ -91,11 +93,9 @@ struct ip_fwuser #define IP_FW_CREATECHAIN (IP_FW_BASE_CTL+9) /* Takes ip_chainlabel */ #define IP_FW_DELETECHAIN (IP_FW_BASE_CTL+10) /* Takes ip_chainlabel */ #define IP_FW_POLICY (IP_FW_BASE_CTL+11) /* Takes ip_fwpolicy */ -/* Masquerade controls */ -#define IP_FW_MASQ_INSERT (IP_FW_BASE_CTL+12) -#define IP_FW_MASQ_ADD (IP_FW_BASE_CTL+13) -#define IP_FW_MASQ_DEL (IP_FW_BASE_CTL+14) -#define IP_FW_MASQ_FLUSH (IP_FW_BASE_CTL+15) +/* Masquerade control, only 1 optname */ + +#define IP_FW_MASQ_CTL (IP_FW_BASE_CTL+12) /* General ip_masq ctl */ /* Builtin chain labels */ #define IP_FW_LABEL_FORWARD "forward" @@ -167,23 +167,7 @@ struct ip_fwpolicy * timeouts for ip masquerading */ -struct ip_fw_masq; - -/* Masquerading stuff */ -#define IP_FW_MASQCTL_MAX 256 -#define IP_MASQ_MOD_NMAX 32 - -struct ip_fw_masqctl -{ - int mctl_action; - union { - struct { - char name[IP_MASQ_MOD_NMAX]; - char data[1]; - } mod; - } u; -}; - +extern int ip_fw_masq_timeouts(void *, int); /* @@ -202,7 +186,7 @@ extern void ip_fw_init(void); #endif /* 2.1.x */ extern int ip_fw_ctl(int, void *, int); #ifdef CONFIG_IP_MASQUERADE -extern int ip_masq_ctl(int, void *, int); +extern int ip_masq_uctl(int, char *, int); #endif #endif /* KERNEL */ diff --git a/include/linux/ip_masq.h b/include/linux/ip_masq.h new file mode 100644 index 000000000..ac7ca606e --- /dev/null +++ b/include/linux/ip_masq.h @@ -0,0 +1,137 @@ +/* + * IP_MASQ user space control interface + * $Id: ip_masq.h,v 1.1 1998/08/29 23:50:56 davem Exp $ + */ + +#ifndef _LINUX_IP_MASQ_H +#define _LINUX_IP_MASQ_H + +#ifdef __KERNEL__ +#include <linux/types.h> +#include <linux/stddef.h> +#else +#include <sys/types.h> +#include <stddef.h> +#endif + +struct ip_masq_user { + int protocol; + u_int16_t sport, dport, mport; + u_int32_t saddr, daddr, maddr; + u_int32_t rt_daddr; /* dst address to use for rt query */ + u_int32_t rt_saddr; + u_int32_t ip_tos; /* TOS */ + unsigned timeout; /* in ticks (HZ per sec) */ + unsigned flags; + int fd; /* NOT IMPL: attach tunnel to this fd */ + int state; /* NOT IMPL: return conn state */ +}; + +#define IP_MASQ_USER_F_LISTEN 0x01 /* put entry to LISTEN state */ +#define IP_MASQ_USER_F_DEAD 0x02 /* mark as DEAD */ +#define IP_MASQ_USER_F_FORCE 0x04 /* force operation */ + +struct ip_masq_timeout { + int protocol; + union { + struct { + unsigned established; + unsigned syn_sent; + unsigned syn_recv; + unsigned fin_wait; + unsigned time_wait; + unsigned close; + unsigned close_wait; + unsigned last_ack; + unsigned listen; + } tcp; + unsigned udp; + unsigned icmp; + } u; +}; + +/* + * AUTOFW stuff + */ +#define IP_FWD_RANGE 1 +#define IP_FWD_PORT 2 +#define IP_FWD_DIRECT 3 + +#define IP_AUTOFW_ACTIVE 1 +#define IP_AUTOFW_USETIME 2 +#define IP_AUTOFW_SECURE 4 + + +/* WARNING: bitwise equal to ip_autofw in net/ip_autofw.h */ +struct ip_autofw_user { + void * next; + u_int16_t type; + u_int16_t low; + u_int16_t hidden; + u_int16_t high; + u_int16_t visible; + u_int16_t protocol; + u_int32_t lastcontact; + u_int32_t where; + u_int16_t ctlproto; + u_int16_t ctlport; + u_int16_t flags; + /* struct timer_list timer; */ +}; + +/* + * PORTFW stuff + */ +struct ip_portfw_user { + u_int16_t protocol; /* Which protocol are we talking? */ + u_int32_t laddr, raddr; /* Remote address */ + u_int16_t lport, rport; /* Local and remote port */ + int pref; /* Preference value */ +}; + +/* + * MARKFW stuff + */ +struct ip_markfw_user { + u_int32_t fwmark; /* Firewalling mark */ + u_int32_t raddr; /* remote port */ + u_int16_t rport; /* remote port */ + u_int16_t dummy; /* Make up to multiple of 4 */ + int pref; /* Preference value */ +}; + +#define IP_FW_MASQCTL_MAX 256 +#define IP_MASQ_TNAME_MAX 32 + +struct ip_masq_ctl { + int m_target; + int m_cmd; + char m_tname[IP_MASQ_TNAME_MAX]; + union { + struct ip_portfw_user portfw_user; + struct ip_autofw_user autofw_user; + struct ip_markfw_user markfw_user; + struct ip_masq_user user; + unsigned char m_raw[IP_FW_MASQCTL_MAX]; + } u; +}; + +#define IP_MASQ_CTL_BSIZE (offsetof (struct ip_masq_ctl,u)) + +#define IP_MASQ_TARGET_CORE 1 +#define IP_MASQ_TARGET_MOD 2 /* masq_mod is selected by "name" */ +#define IP_MASQ_TARGET_USER 3 +#define IP_MASQ_TARGET_LAST 4 + +#define IP_MASQ_CMD_NONE 0 +#define IP_MASQ_CMD_INSERT 1 +#define IP_MASQ_CMD_ADD 2 +#define IP_MASQ_CMD_SET 3 +#define IP_MASQ_CMD_DEL 4 +#define IP_MASQ_CMD_GET 5 +#define IP_MASQ_CMD_FLUSH 6 +#define IP_MASQ_CMD_LIST 7 +#define IP_MASQ_CMD_ENABLE 8 +#define IP_MASQ_CMD_DISABLE 9 + +#endif /* _LINUX_IP_MASQ_H */ diff --git a/include/linux/joystick.h b/include/linux/joystick.h index 513801cbe..c1794ca29 100644 --- a/include/linux/joystick.h +++ b/include/linux/joystick.h @@ -2,18 +2,54 @@ #define _LINUX_JOYSTICK_H /* - * /usr/include/linux/joystick.h Version 1.0.9 + * /usr/include/linux/joystick.h Version 1.2 * * Copyright (C) 1996-1998 Vojtech Pavlik */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Should you need to contact me, the author, you can do so either by + * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail: + * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic + */ + #include <asm/types.h> +#include <linux/module.h> /* * Version */ -#define JS_VERSION 0x00010008L +#define JS_VERSION 0x01020d + +/* + * Types and constants for reading from /dev/js + */ + +#define JS_EVENT_BUTTON 0x01 /* button pressed/released */ +#define JS_EVENT_AXIS 0x02 /* joystick moved */ +#define JS_EVENT_INIT 0x80 /* initial state of device */ + +struct js_event { + __u32 time; /* event timestamp in miliseconds */ + __s16 value; /* value */ + __u8 type; /* event type */ + __u8 number; /* axis/button number */ +}; /* * IOCTL commands for joystick driver @@ -23,9 +59,10 @@ #define JSIOCGAXES _IOR('j', 0x11, __u8) /* get number of axes */ #define JSIOCGBUTTONS _IOR('j', 0x12, __u8) /* get number of buttons */ +#define JSIOCGNAME(len) _IOC(_IOC_READ, 'j', 0x13, len) /* get identifier string */ -#define JSIOCSCORR _IOW('j', 0x21, struct js_corr[4]) /* set correction values */ -#define JSIOCGCORR _IOR('j', 0x22, struct js_corr[4]) /* get correction values */ +#define JSIOCSCORR _IOW('j', 0x21, struct js_corr) /* set correction values */ +#define JSIOCGCORR _IOR('j', 0x22, struct js_corr) /* get correction values */ /* * Types and constants for get/set correction @@ -36,45 +73,227 @@ struct js_corr { __s32 coef[8]; - __u16 prec; + __s16 prec; __u16 type; }; /* - * Types and constants for reading from /dev/js + * v0.x compatibility definitions */ -#define JS_EVENT_BUTTON 0x01 /* button pressed/released */ -#define JS_EVENT_AXIS 0x02 /* joystick moved */ -#define JS_EVENT_INIT 0x80 /* initial state of device at open time */ +#define JS_RETURN sizeof(struct JS_DATA_TYPE) +#define JS_TRUE 1 +#define JS_FALSE 0 +#define JS_X_0 0x01 +#define JS_Y_0 0x02 +#define JS_X_1 0x04 +#define JS_Y_1 0x08 +#define JS_MAX 2 -struct js_event { - __u32 time; /* event timestamp in miliseconds since open */ - __s16 value; /* value */ - __u8 type; /* type of event, see above */ - __u8 number; /* axis/button number */ +#define JS_DEF_TIMEOUT 0x1300 +#define JS_DEF_CORR 0 +#define JS_DEF_TIMELIMIT 10L + +#define JS_SET_CAL 1 +#define JS_GET_CAL 2 +#define JS_SET_TIMEOUT 3 +#define JS_GET_TIMEOUT 4 +#define JS_SET_TIMELIMIT 5 +#define JS_GET_TIMELIMIT 6 +#define JS_GET_ALL 7 +#define JS_SET_ALL 8 + +struct JS_DATA_TYPE { + int buttons; + int x; + int y; +}; + +struct JS_DATA_SAVE_TYPE { + int JS_TIMEOUT; + int BUSY; + long JS_EXPIRETIME; + long JS_TIMELIMIT; + struct JS_DATA_TYPE JS_SAVE; + struct JS_DATA_TYPE JS_CORR; }; /* - * Backward (version 0.x) compatibility definitions + * Internal definitions */ -#define JS_RETURN sizeof(struct JS_DATA_TYPE) -#define JS_TRUE 1 -#define JS_FALSE 0 -#define JS_X_0 0x01 /* bit mask for x-axis js0 */ -#define JS_Y_0 0x02 /* bit mask for y-axis js0 */ -#define JS_X_1 0x04 /* bit mask for x-axis js1 */ -#define JS_Y_1 0x08 /* bit mask for y-axis js1 */ -#define JS_MAX 2 /* max number of joysticks */ +#ifdef __KERNEL__ -struct JS_DATA_TYPE { - int buttons; /* immediate button state */ - int x; /* immediate x axis value */ - int y; /* immediate y axis value */ +#define JS_BUFF_SIZE 64 /* output buffer size */ + +#include <linux/version.h> + +#ifndef KERNEL_VERSION +#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) +#endif + +#ifndef LINUX_VERSION_CODE +#error "You need to use at least 2.0 Linux kernel." +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,0,0) +#error "You need to use at least 2.0 Linux kernel." +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) +#define JS_HAS_RDTSC (current_cpu_data.x86_capability & 0x10) +#include <linux/init.h> +#else +#ifdef MODULE +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,35) +#define JS_HAS_RDTSC (x86_capability & 0x10) +#else +#define JS_HAS_RDTSC 0 +#endif +#else +#define JS_HAS_RDTSC (x86_capability & 0x10) +#endif +#define __initdata +#define __init +#define __cli cli +#define __save_flags(flags) save_flags(flags) +#define __restore_flags(flags) restore_flags(flags) +#define spin_lock_irqsave(x, flags) do { save_flags(flags); cli(); } while (0) +#define spin_unlock_irqrestore(x, flags) restore_flags(flags) +#define spin_lock_init(x) do { } while (0) +typedef struct { int something; } spinlock_t; +#define SPIN_LOCK_UNLOCKED { 0 } +#define MODULE_AUTHOR(x) +#define MODULE_PARM(x,y) +#define MODULE_SUPPORTED_DEVICE(x) +#define signal_pending(x) (((x)->signal) & ~((x)->blocked)) +#endif + +/* + * Parport stuff + */ + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) +#define USE_PARPORT +#endif + +#ifdef USE_PARPORT +#include <linux/parport.h> +#define JS_PAR_DATA_IN(y) parport_read_data(y->port) +#define JS_PAR_DATA_OUT(x,y) parport_write_data(y->port, x) +#define JS_PAR_STATUS(y) parport_read_status(y->port) +#define JS_PAR_CTRL_IN(y) parport_read_control(y->port) +#define JS_PAR_CTRL_OUT(x,y) parport_write_control(y->port, x) +#define JS_PAR_ECTRL_OUT(x,y) parport_write_econtrol(y->port, x) +#else +#define JS_PAR_DATA_IN(y) inb(y) +#define JS_PAR_DATA_OUT(x,y) outb(x,y) +#define JS_PAR_STATUS(y) inb(y+1) +#define JS_PAR_CTRL_IN(y) inb(y+2) +#define JS_PAR_CTRL_OUT(x,y) outb(x,y+2) +#define JS_PAR_ECTRL_OUT(x,y) outb(x,y+0x402) +#endif + +#define JS_PAR_STATUS_INVERT (0x80) +#define JS_PAR_CTRL_INVERT (0x04) + +/* + * Internal types + */ + +struct js_dev; + +typedef int (*js_read_func)(void *info, int **axes, int **buttons); +typedef unsigned int (*js_time_func)(void); +typedef int (*js_delta_func)(unsigned int x, unsigned int y); +typedef int (*js_ops_func)(struct js_dev *dev); + +struct js_data { + int *axes; + int *buttons; }; +struct js_dev { + struct js_dev *next; + struct js_list *list; + struct js_port *port; + struct wait_queue *wait; + struct js_data cur; + struct js_data new; + struct js_corr *corr; + struct js_event buff[JS_BUFF_SIZE]; + js_ops_func open; + js_ops_func close; + int ahead; + int bhead; + int tail; + int num_axes; + int num_buttons; + char *name; +}; + +struct js_list { + struct js_list *next; + struct js_dev *dev; + int tail; + int startup; +}; + +struct js_port { + struct js_port *next; + struct js_port *prev; + js_read_func read; + struct js_dev **devs; + int **axes; + int **buttons; + struct js_corr **corr; + void *info; + int ndevs; +}; + +/* + * Sub-module interface + */ + +extern unsigned int js_time_speed; +extern js_time_func js_get_time; +extern js_delta_func js_delta; + +extern unsigned int js_time_speed_a; +extern js_time_func js_get_time_a; +extern js_delta_func js_delta_a; + +extern struct js_port *js_register_port(struct js_port *port, void *info, + int devs, int infos, js_read_func read); +extern struct js_port *js_unregister_port(struct js_port *port); + +extern int js_register_device(struct js_port *port, int number, int axes, + int buttons, char *name, js_ops_func open, js_ops_func close); +extern void js_unregister_device(struct js_dev *dev); + +/* + * Kernel interface + */ extern int js_init(void); +extern int js_am_init(void); +extern int js_an_init(void); +extern int js_as_init(void); +extern int js_console_init(void); +extern int js_db9_init(void); +extern int js_gr_init(void); +extern int js_l4_init(void); +extern int js_lt_init(void); +extern int js_sw_init(void); +extern int js_tm_init(void); + +extern void js_am_setup(char *str, int *ints); +extern void js_an_setup(char *str, int *ints); +extern void js_as_setup(char *str, int *ints); +extern void js_console_setup(char *str, int *ints); +extern void js_db9_setup(char *str, int *ints); +extern void js_l4_setup(char *str, int *ints); + +#endif /* __KERNEL__ */ #endif /* _LINUX_JOYSTICK_H */ diff --git a/include/linux/kbd_ll.h b/include/linux/kbd_ll.h index 26a30c12a..d83f9ea8a 100644 --- a/include/linux/kbd_ll.h +++ b/include/linux/kbd_ll.h @@ -9,9 +9,4 @@ extern struct pt_regs *kbd_pt_regs; void handle_scancode(unsigned char scancode); -/* - * Interface for to the host specific interupt setup code - */ -void keyboard_interrupt(int irq, void *dev_id, struct pt_regs *regs); - #endif /* _KBD_LL_H */ diff --git a/include/linux/kbdcntrlr.h b/include/linux/kbdcntrlr.h deleted file mode 100644 index 520e73892..000000000 --- a/include/linux/kbdcntrlr.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Keyboard controller definitions. - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file "COPYING" in the main directory of this archive - * for more details. - */ -#ifndef __LINUX_KBDCTRLR_H -#define __LINUX_KBDCTRLR_H - -/* - * keyboard controller registers - */ -#define KBD_STATUS_REG (unsigned int) 0x64 -#define KBD_CNTL_REG (unsigned int) 0x64 -#define KBD_DATA_REG (unsigned int) 0x60 -/* - * controller commands - */ -#define KBD_READ_MODE (unsigned int) 0x20 -#define KBD_WRITE_MODE (unsigned int) 0x60 -#define KBD_SELF_TEST (unsigned int) 0xAA -#define KBD_SELF_TEST2 (unsigned int) 0xAB -#define KBD_CNTL_ENABLE (unsigned int) 0xAE -/* - * keyboard commands - */ -#define KBD_ENABLE (unsigned int) 0xF4 -#define KBD_DISABLE (unsigned int) 0xF5 -#define KBD_RESET (unsigned int) 0xFF -/* - * keyboard replies - */ -#define KBD_ACK (unsigned int) 0xFA -#define KBD_POR (unsigned int) 0xAA -/* - * status register bits - */ -#define KBD_OBF (unsigned int) 0x01 -#define KBD_IBF (unsigned int) 0x02 -#define KBD_GTO (unsigned int) 0x40 -#define KBD_PERR (unsigned int) 0x80 -/* - * keyboard controller mode register bits - */ -#define KBD_EKI (unsigned int) 0x01 -#define KBD_SYS (unsigned int) 0x04 -#define KBD_DMS (unsigned int) 0x20 -#define KBD_KCC (unsigned int) 0x40 - -/* - * Had to increase this value - the speed ratio host cpu/keyboard - * processor on some MIPS machines make the controller initialization - * fail otherwise. -- Ralf - */ -#define TIMEOUT_CONST 1000000 - -/* - * These will be the new keyboard controller access macros. I don't use - * them yet since I want to talk about some details with Linus first. - */ -#define kbd_read_control() kbd_inb_p(0x64) -#define kbd_read_status() kbd_inb_p(0x64) -#define kbd_read_data() kbd_inb_p(0x60) -#define kbd_write_data() kbd_inb_p(0x60) - -#endif /* __LINUX_KBDCTRLR_H */ diff --git a/include/linux/kernel.h b/include/linux/kernel.h index e1358f13e..1111b19b4 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -11,7 +11,8 @@ #include <linux/linkage.h> /* Optimization barrier */ -#define barrier() __asm__("": : :"memory") +/* The "volatile" is due to gcc bugs */ +#define barrier() __asm__ __volatile__("": : :"memory") #define INT_MAX ((int)(~0U>>1)) #define UINT_MAX (~0U) @@ -46,6 +47,7 @@ NORET_TYPE void panic(const char * fmt, ...) NORET_TYPE void do_exit(long error_code) ATTRIB_NORET; extern unsigned long simple_strtoul(const char *,char **,unsigned int); +extern long simple_strtol(const char *,char **,unsigned int); extern int sprintf(char * buf, const char * fmt, ...); extern int vsprintf(char *buf, const char *, va_list); diff --git a/include/linux/linkage.h b/include/linux/linkage.h index cd5cdb349..190202f05 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h @@ -2,9 +2,15 @@ #define _LINUX_LINKAGE_H #ifdef __cplusplus -#define asmlinkage extern "C" +#define CPP_ASMLINKAGE extern "C" #else -#define asmlinkage +#define CPP_ASMLINKAGE +#endif + +#if defined __i386__ && (__GNUC__ > 2 || __GNUC_MINOR__ > 7) +#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0))) +#else +#define asmlinkage CPP_ASMLINKAGE #endif #define SYMBOL_NAME_STR(X) #X @@ -36,7 +42,7 @@ #ifdef __ASSEMBLY__ #define ALIGN __ALIGN -#define ALIGN_STRING __ALIGN_STRING +#define ALIGN_STR __ALIGN_STR #define ENTRY(name) \ .globl SYMBOL_NAME(name); \ diff --git a/include/linux/linux_logo.h b/include/linux/linux_logo.h index 07cde4f87..9aa712eb4 100644 --- a/include/linux/linux_logo.h +++ b/include/linux/linux_logo.h @@ -1,9 +1,9 @@ -/* $Id: linux_logo.h,v 1.3 1998/07/06 15:51:16 jj Exp $ +/* $Id: linux_logo.h,v 1.5 1998/07/30 16:30:58 jj Exp $ * 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 @@ -18,904 +18,905 @@ * but should contain %s to display the version */ -#if LINUX_LOGO_COLORS == 221 +#if LINUX_LOGO_COLORS == 214 unsigned char linux_logo_red[] __initdata = { - 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3, - 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xE5, - 0xF1, 0xED, 0xEE, 0xE6, 0xC6, 0xDA, 0xDD, 0xE5, - 0xD9, 0xC6, 0xE3, 0xD0, 0xC6, 0xBA, 0xB0, 0xB6, - 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xB0, 0xAD, - 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x9D, - 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99, - 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D, - 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x0D, 0x03, - 0x66, 0x44, 0x24, 0x08, 0xD6, 0xE6, 0xE9, 0xE6, - 0xE7, 0xCA, 0xDC, 0xDB, 0xD5, 0xD0, 0xC9, 0xE2, - 0xD5, 0xC6, 0xC4, 0xB3, 0xB2, 0xB9, 0xA9, 0x9A, - 0xB2, 0x9D, 0xE8, 0xEC, 0xF5, 0xF5, 0xF4, 0xF4, - 0xEC, 0xEE, 0xF0, 0xF5, 0xE0, 0xD6, 0xC5, 0xC2, - 0xD9, 0xD5, 0xD8, 0xD6, 0xF6, 0xF4, 0xED, 0xEC, - 0xEB, 0xF1, 0xF6, 0xF5, 0xF5, 0xEE, 0xEF, 0xEC, - 0xE7, 0xE3, 0xE6, 0xD6, 0xDD, 0xC3, 0xD6, 0xD7, - 0xCD, 0xCA, 0xC3, 0xAC, 0x95, 0x99, 0xB7, 0xA3, - 0x8B, 0x88, 0x95, 0x8A, 0x94, 0xD2, 0xCC, 0xC4, - 0xA8, 0x8E, 0x8F, 0xAE, 0xB8, 0xAC, 0xB6, 0xB4, - 0xAD, 0xA5, 0xA0, 0x9B, 0x8B, 0xA3, 0x94, 0x87, - 0x85, 0x89, 0x53, 0x80, 0x7D, 0x7C, 0x7A, 0x78, - 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62, - 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46, - 0x42, 0x0F, 0x75, 0x78, 0x7D, 0x72, 0x5F, 0x6E, - 0x7A, 0x75, 0x6A, 0x58, 0x48, 0x4F, 0x00, 0x2B, - 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x3B, 0x11, - 0x1D, 0x14, 0x06, 0x02, 0x00 + 0x02, 0x9E, 0xE9, 0xC4, 0x50, 0xC9, 0xC4, 0xE9, + 0x65, 0xE3, 0xC2, 0x25, 0xA4, 0xEC, 0x90, 0xA6, + 0xC4, 0x6A, 0xD1, 0xF3, 0x12, 0xED, 0xA0, 0xC2, + 0xB8, 0xD5, 0xDB, 0xD2, 0x3E, 0x16, 0xEB, 0x54, + 0xA9, 0xCD, 0xF5, 0x0A, 0xBA, 0xB3, 0xDC, 0x74, + 0xCE, 0xF6, 0xD3, 0xC5, 0xEA, 0xB8, 0xED, 0x5E, + 0xE5, 0x26, 0xF4, 0xA9, 0x82, 0x94, 0xE6, 0x38, + 0xF2, 0x0F, 0x7F, 0x49, 0xE5, 0xF4, 0xD3, 0xC3, + 0xC2, 0x1E, 0xD5, 0xC6, 0xA4, 0xFA, 0x0A, 0xBA, + 0xD4, 0xEB, 0xEA, 0xEC, 0xA8, 0xBC, 0xB4, 0xDC, + 0x84, 0xE4, 0xCE, 0xEC, 0x92, 0xCD, 0xDC, 0x8B, + 0xCC, 0x1E, 0xF6, 0xB2, 0x60, 0x2A, 0x96, 0x52, + 0x0F, 0xBD, 0xFA, 0xCC, 0xB8, 0x7A, 0x4C, 0xD2, + 0x06, 0xEF, 0x44, 0x64, 0xF4, 0xBA, 0xCE, 0xE6, + 0x8A, 0x6F, 0x3C, 0x70, 0x7C, 0x9C, 0xBA, 0xDF, + 0x2C, 0x4D, 0x3B, 0xCA, 0xDE, 0xCE, 0xEE, 0x46, + 0x6A, 0xAC, 0x96, 0xE5, 0x96, 0x7A, 0xBA, 0xB6, + 0xE2, 0x7E, 0xAA, 0xC5, 0x96, 0x9E, 0xC2, 0xAA, + 0xDA, 0x35, 0xB6, 0x82, 0x88, 0xBE, 0xC2, 0x9E, + 0xB4, 0xD5, 0xDA, 0x9C, 0xA0, 0xD0, 0xA8, 0xC7, + 0x72, 0xF2, 0xDB, 0x76, 0xDC, 0xBE, 0xAA, 0xF4, + 0x87, 0x2F, 0x53, 0x8E, 0x36, 0xCE, 0xE6, 0xCA, + 0xCB, 0xE4, 0xD6, 0xAA, 0x42, 0x5D, 0xB4, 0x59, + 0x1C, 0xC8, 0x96, 0x6C, 0xDA, 0xCE, 0xE6, 0xCB, + 0x96, 0x16, 0xFA, 0xBE, 0xAE, 0xFE, 0x6E, 0xD6, + 0xCE, 0xB6, 0xE5, 0xED, 0xDB, 0xDC, 0xF4, 0x72, + 0x1F, 0xAE, 0xE6, 0xC2, 0xCA, 0xC4 }; unsigned char linux_logo_green[] __initdata = { - 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3, - 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xD3, - 0xDA, 0xD4, 0xD7, 0xCC, 0xC1, 0xCC, 0xCB, 0xC9, - 0xC5, 0xBC, 0xBC, 0xBB, 0xB7, 0xA5, 0xB0, 0xB6, - 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xAD, 0xAD, - 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x95, - 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99, - 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D, - 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x08, 0x02, - 0x53, 0x2E, 0x19, 0x06, 0xC6, 0xC8, 0xCF, 0xBD, - 0xB3, 0xB6, 0xB4, 0xAB, 0xA5, 0xA3, 0x9B, 0xB6, - 0xA7, 0x99, 0x92, 0xA4, 0x9E, 0x9D, 0x98, 0x8C, - 0x8A, 0x86, 0xCD, 0xCC, 0xC9, 0xD7, 0xCA, 0xC4, - 0xCA, 0xC3, 0xC7, 0xC3, 0xC8, 0xB4, 0x91, 0x8E, - 0x8A, 0x82, 0x87, 0x85, 0xBD, 0xBF, 0xB6, 0xBC, - 0xAE, 0xB7, 0xBC, 0xB8, 0xBF, 0xB6, 0xBC, 0xB5, - 0xAB, 0xA6, 0xAD, 0xB2, 0xA5, 0x87, 0x9C, 0x96, - 0x95, 0x8E, 0x87, 0x8F, 0x86, 0x86, 0x8E, 0x80, - 0x7A, 0x70, 0x7B, 0x78, 0x78, 0x7F, 0x77, 0x6F, - 0x70, 0x76, 0x59, 0x77, 0x68, 0x64, 0x7B, 0x7C, - 0x75, 0x6D, 0x77, 0x69, 0x65, 0x5F, 0x5B, 0x54, - 0x4F, 0x5B, 0x39, 0x80, 0x7D, 0x7C, 0x7A, 0x78, - 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62, - 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46, - 0x42, 0x0B, 0x69, 0x66, 0x64, 0x57, 0x4A, 0x4E, - 0x55, 0x4B, 0x46, 0x3B, 0x30, 0x33, 0x00, 0x2B, - 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x29, 0x0D, - 0x1D, 0x14, 0x06, 0x02, 0x00 + 0x02, 0x88, 0xC4, 0x85, 0x44, 0xA2, 0xA8, 0xE5, + 0x65, 0xA6, 0xC2, 0x24, 0xA4, 0xB4, 0x62, 0x86, + 0x94, 0x44, 0xD2, 0xB6, 0x12, 0xD4, 0x73, 0x96, + 0x92, 0x95, 0xB2, 0xC2, 0x36, 0x0E, 0xBC, 0x54, + 0x75, 0xA5, 0xF5, 0x0A, 0xB2, 0x83, 0xC2, 0x74, + 0x9B, 0xBD, 0xA2, 0xCA, 0xDA, 0x8C, 0xCB, 0x42, + 0xAC, 0x12, 0xDA, 0x7B, 0x54, 0x94, 0xD2, 0x24, + 0xBE, 0x06, 0x65, 0x33, 0xBB, 0xBC, 0xAB, 0x8C, + 0x92, 0x1E, 0x9B, 0xB6, 0x6E, 0xFB, 0x04, 0xA2, + 0xC8, 0xBD, 0xAD, 0xEC, 0x92, 0xBC, 0x7B, 0x9D, + 0x84, 0xC4, 0xC4, 0xB4, 0x6C, 0x93, 0xA3, 0x5E, + 0x8D, 0x13, 0xD6, 0x82, 0x4C, 0x2A, 0x7A, 0x5A, + 0x0D, 0x82, 0xBB, 0xCC, 0x8B, 0x6A, 0x3C, 0xBE, + 0x06, 0xC4, 0x44, 0x45, 0xDB, 0x96, 0xB6, 0xDE, + 0x8A, 0x4D, 0x3C, 0x5A, 0x7C, 0x9C, 0xAA, 0xCB, + 0x1C, 0x4D, 0x2E, 0xB2, 0xBE, 0xAA, 0xDE, 0x3E, + 0x6A, 0xAC, 0x82, 0xE5, 0x72, 0x62, 0x92, 0x9E, + 0xCA, 0x4A, 0x8E, 0xBE, 0x86, 0x6B, 0xAA, 0x9A, + 0xBE, 0x34, 0xAB, 0x76, 0x6E, 0x9A, 0x9E, 0x62, + 0x76, 0xCE, 0xD3, 0x92, 0x7C, 0xB8, 0x7E, 0xC6, + 0x5E, 0xE2, 0xC3, 0x54, 0xAA, 0x9E, 0x8A, 0xCA, + 0x63, 0x2D, 0x3B, 0x8E, 0x1A, 0x9E, 0xC2, 0xA6, + 0xCB, 0xDC, 0xD6, 0x8E, 0x26, 0x5C, 0xB4, 0x45, + 0x1C, 0xB8, 0x6E, 0x4C, 0xBC, 0xAE, 0xD6, 0x92, + 0x63, 0x16, 0xF6, 0x8C, 0x7A, 0xFE, 0x6E, 0xBA, + 0xC6, 0x86, 0xAA, 0xAE, 0xDB, 0xA4, 0xD4, 0x56, + 0x0E, 0x6E, 0xB6, 0xB2, 0xBE, 0xBE }; unsigned char linux_logo_blue[] __initdata = { - 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xEE, 0xE5, 0xDE, - 0xD7, 0xD3, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xB5, - 0xB0, 0xA6, 0xAC, 0x9B, 0xB5, 0xB5, 0xAE, 0x84, - 0x90, 0xA9, 0x81, 0x8D, 0x96, 0x86, 0xB0, 0xB6, - 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xA7, 0xAD, - 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA5, 0x87, - 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x9A, 0x9A, 0x99, - 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D, - 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0xC8, 0xD7, - 0x9B, 0x8E, 0x8C, 0xB2, 0x77, 0x77, 0x4E, 0x77, - 0x69, 0x71, 0x78, 0x6B, 0x65, 0x66, 0x64, 0x59, - 0x5C, 0x5A, 0x48, 0x72, 0x7B, 0x6B, 0x67, 0x6E, - 0x42, 0x5B, 0x29, 0x36, 0x25, 0x10, 0x17, 0x14, - 0x19, 0x16, 0x13, 0x0E, 0x08, 0x2E, 0x2E, 0x3D, - 0x24, 0x24, 0x24, 0x24, 0x13, 0x12, 0x14, 0x14, - 0x0E, 0x08, 0x0D, 0x0F, 0x08, 0x0D, 0x0E, 0x08, - 0x08, 0x0C, 0x06, 0x06, 0x07, 0x16, 0x07, 0x0E, - 0x08, 0x0A, 0x07, 0x0D, 0x2D, 0x3E, 0x09, 0x4E, - 0x68, 0x52, 0x56, 0x58, 0x4B, 0x22, 0x20, 0x20, - 0x27, 0x39, 0x28, 0x19, 0x1E, 0x1E, 0x08, 0x06, - 0x07, 0x09, 0x08, 0x08, 0x05, 0x1D, 0x1F, 0x17, - 0x18, 0x06, 0x79, 0x80, 0x7D, 0x7C, 0x7A, 0x78, - 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x68, 0x65, 0x62, - 0x4B, 0x5B, 0x5F, 0x55, 0x56, 0x52, 0x4F, 0x46, - 0x42, 0x5A, 0x14, 0x23, 0x3D, 0x2B, 0x21, 0x14, - 0x06, 0x04, 0x03, 0x07, 0x09, 0x13, 0x2A, 0x3A, - 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x07, 0x09, - 0x1D, 0x14, 0x06, 0x02, 0x00 + 0x04, 0x28, 0x10, 0x0B, 0x14, 0x14, 0x74, 0xC7, + 0x64, 0x0E, 0xC3, 0x24, 0xA4, 0x0C, 0x10, 0x20, + 0x0D, 0x04, 0xD1, 0x0D, 0x13, 0x22, 0x0A, 0x40, + 0x14, 0x0C, 0x11, 0x94, 0x0C, 0x08, 0x0B, 0x56, + 0x09, 0x47, 0xF4, 0x0B, 0x9C, 0x07, 0x54, 0x74, + 0x0F, 0x0C, 0x0F, 0xC7, 0x6C, 0x14, 0x14, 0x11, + 0x0B, 0x04, 0x12, 0x0C, 0x05, 0x94, 0x94, 0x0A, + 0x34, 0x09, 0x14, 0x08, 0x2F, 0x15, 0x19, 0x11, + 0x28, 0x0C, 0x0B, 0x94, 0x08, 0xFA, 0x08, 0x7C, + 0xBC, 0x15, 0x0A, 0xEC, 0x64, 0xBB, 0x0A, 0x0C, + 0x84, 0x2C, 0xA0, 0x15, 0x10, 0x0D, 0x0B, 0x0E, + 0x0A, 0x07, 0x10, 0x3C, 0x24, 0x2C, 0x28, 0x5C, + 0x0A, 0x0D, 0x0A, 0xC1, 0x22, 0x4C, 0x10, 0x94, + 0x04, 0x0F, 0x45, 0x08, 0x31, 0x54, 0x3C, 0xBC, + 0x8C, 0x09, 0x3C, 0x18, 0x7C, 0x9C, 0x7C, 0x91, + 0x0C, 0x4D, 0x17, 0x74, 0x0C, 0x48, 0x9C, 0x3C, + 0x6A, 0xAC, 0x5C, 0xE3, 0x29, 0x3C, 0x2C, 0x7C, + 0x6C, 0x04, 0x14, 0xA9, 0x74, 0x07, 0x2C, 0x74, + 0x4C, 0x34, 0x97, 0x5C, 0x38, 0x0C, 0x5C, 0x04, + 0x0C, 0xBA, 0xBC, 0x78, 0x18, 0x88, 0x24, 0xC2, + 0x3C, 0xB4, 0x87, 0x0C, 0x14, 0x4C, 0x3C, 0x10, + 0x17, 0x2C, 0x0A, 0x8C, 0x04, 0x1C, 0x44, 0x2C, + 0xCD, 0xD8, 0xD4, 0x34, 0x0C, 0x5B, 0xB4, 0x1E, + 0x1D, 0xAC, 0x24, 0x18, 0x20, 0x5C, 0xB4, 0x1C, + 0x09, 0x14, 0xFC, 0x0C, 0x10, 0xFC, 0x6C, 0x7C, + 0xB4, 0x1C, 0x15, 0x17, 0xDB, 0x18, 0x21, 0x24, + 0x04, 0x04, 0x44, 0x8C, 0x8C, 0xB7 }; unsigned char linux_logo[] __initdata = { - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57, - 0x58, 0x58, 0x59, 0x5C, 0x5D, 0x5F, 0x60, 0x61, - 0x62, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5E, 0x5E, - 0x5E, 0x5D, 0x5D, 0x5C, 0x5D, 0x5B, 0x58, 0x58, - 0x58, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57, - 0x54, 0x56, 0x57, 0x67, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x67, 0x4C, - 0x4A, 0x49, 0x4A, 0x49, 0x4A, 0x49, 0x49, 0x4A, - 0x4A, 0x4B, 0x4B, 0x4B, 0x4C, 0x50, 0x51, 0x52, - 0x54, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57, 0x58, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x58, 0x56, 0x56, 0x53, - 0x52, 0x53, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB, - 0x4B, 0x4B, 0x4B, 0x4A, 0x49, 0x4A, 0x4A, 0x49, - 0x49, 0x49, 0x48, 0x49, 0x49, 0x4A, 0x4A, 0x4B, - 0x4C, 0x4D, 0x52, 0x54, 0x56, 0x55, 0x57, 0x58, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, - 0x50, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF0, 0xF4, 0xFB, - 0xFC, 0x67, 0x53, 0x50, 0x4D, 0x4C, 0x4C, 0x4C, - 0x4B, 0x4A, 0x4A, 0x48, 0x49, 0x48, 0x48, 0x49, - 0x49, 0x49, 0x4B, 0x4C, 0x50, 0x52, 0x53, 0x56, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x55, 0x54, 0x53, 0x51, 0x51, 0x50, 0x4C, 0x4D, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xD2, 0xD7, 0xF5, - 0xFC, 0xFC, 0x5D, 0x5D, 0x5C, 0x5C, 0x59, 0x58, - 0x58, 0x56, 0x52, 0x4C, 0x4B, 0x4A, 0x4A, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x49, 0x4B, 0x4D, 0x51, - 0x54, 0x56, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x55, 0x54, - 0x53, 0x52, 0x51, 0x4D, 0x4D, 0x4D, 0x50, 0x50, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0x64, 0xD9, 0xF5, - 0xF9, 0xFC, 0xFC, 0x64, 0x63, 0x62, 0x61, 0x61, - 0x61, 0x60, 0x5E, 0x5B, 0x5A, 0x54, 0x52, 0x4C, - 0x4B, 0x49, 0x49, 0x47, 0x47, 0x48, 0x49, 0x4B, - 0x4C, 0x51, 0x53, 0x56, 0x57, 0x58, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x57, 0x57, 0x55, 0x53, 0x53, - 0x51, 0x50, 0x50, 0x50, 0x50, 0x50, 0x53, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xF5, 0xF9, 0xFC, - 0xFC, 0xFC, 0xFC, 0x64, 0x64, 0x64, 0x64, 0x64, - 0x64, 0x64, 0x64, 0x63, 0x61, 0x61, 0x5E, 0x59, - 0x55, 0x52, 0x4C, 0x4A, 0x49, 0x47, 0x48, 0x48, - 0x49, 0x4B, 0x4D, 0x51, 0x54, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x58, 0x55, 0x54, 0x54, 0x52, 0x51, - 0x51, 0x51, 0x51, 0x51, 0x53, 0x54, 0x59, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xF7, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0x60, 0x60, 0x60, 0x61, - 0x62, 0x63, 0x64, 0x64, 0x65, 0x65, 0x64, 0x63, - 0x61, 0x5E, 0x59, 0x56, 0x4D, 0x4B, 0x48, 0x48, - 0x48, 0x48, 0x49, 0x4B, 0x50, 0x53, 0x56, 0x56, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x56, 0x54, 0x53, 0x52, 0x51, 0x51, - 0x51, 0x52, 0x53, 0x55, 0x59, 0x5D, 0x5E, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0x4C, 0x4E, 0x51, 0x52, - 0x57, 0x5A, 0x5E, 0x60, 0x61, 0x63, 0x65, 0xCB, - 0x64, 0x64, 0x63, 0x60, 0x5C, 0x57, 0x50, 0x4B, - 0x48, 0x47, 0x47, 0x47, 0x4A, 0x4C, 0x52, 0x53, - 0x54, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x55, 0x54, 0x53, 0x53, 0x51, 0x52, 0x52, 0x53, - 0x53, 0x57, 0x5A, 0x5D, 0x5E, 0x5E, 0x60, 0xFC, - 0xFC, 0xFC, 0xFB, 0xF9, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFA, 0xF9, 0xF5, 0xFB, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x45, 0x3F, 0x3F, - 0x45, 0x48, 0x4B, 0x4D, 0x54, 0x5A, 0x5E, 0x61, - 0x63, 0xCB, 0xCB, 0x65, 0x64, 0x62, 0x5E, 0x57, - 0x50, 0x4B, 0x48, 0x47, 0x47, 0x48, 0x4B, 0x4D, - 0x51, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, - 0x54, 0x54, 0x53, 0x53, 0x52, 0x53, 0x54, 0x57, - 0x59, 0x5C, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0xFC, - 0xFC, 0xFA, 0xFC, 0xFA, 0xE0, 0xFC, 0xFC, 0xFC, - 0xFB, 0xFB, 0xFB, 0xDF, 0xD8, 0xF9, 0xE0, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x4C, 0x4A, 0x48, - 0x48, 0x3E, 0x44, 0x43, 0x3F, 0x47, 0x4B, 0x52, - 0x5A, 0x5E, 0x62, 0x64, 0xCB, 0xCB, 0x64, 0x61, - 0x5E, 0x57, 0x4D, 0x49, 0x47, 0x47, 0x48, 0x4A, - 0x4C, 0x52, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, - 0x54, 0x53, 0x53, 0x54, 0x54, 0x55, 0x58, 0x5B, - 0x5C, 0x5D, 0x5E, 0x5D, 0x5D, 0x5B, 0x58, 0xFC, - 0xFC, 0xD8, 0x4C, 0x60, 0xFC, 0xF5, 0xFC, 0xFC, - 0xFC, 0xF7, 0x5F, 0x48, 0x48, 0x2C, 0xF8, 0xF9, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x4A, 0x49, - 0x49, 0x49, 0x49, 0x47, 0x3E, 0x44, 0x42, 0x3F, - 0x3E, 0x4B, 0x54, 0x5C, 0x61, 0x64, 0xCB, 0xCB, - 0x64, 0x61, 0x5D, 0x53, 0x4B, 0x49, 0x47, 0x47, - 0x49, 0x4B, 0x50, 0x53, 0x56, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x55, 0x54, - 0x53, 0x53, 0x54, 0x56, 0x58, 0x5A, 0x5B, 0x5D, - 0x5D, 0x5D, 0x5C, 0x5A, 0x54, 0x52, 0x4C, 0xFC, - 0xF7, 0x4E, 0x2D, 0x29, 0x4E, 0xFC, 0xFC, 0xFC, - 0xFB, 0x5F, 0x26, 0x24, 0x20, 0x2E, 0x65, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x45, 0x3F, 0x45, - 0x3E, 0x47, 0x47, 0x47, 0x47, 0x47, 0x3E, 0x44, - 0x43, 0x40, 0x44, 0x49, 0x51, 0x5C, 0x62, 0x64, - 0xCB, 0xCB, 0x63, 0x60, 0x58, 0x50, 0x49, 0x48, - 0x48, 0x48, 0x4A, 0x4D, 0x53, 0x54, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x55, 0x57, 0x59, 0x5B, 0x5C, 0x5D, - 0x5C, 0x5A, 0x54, 0x51, 0x4C, 0x4C, 0x54, 0xFC, - 0xF9, 0x23, 0xDB, 0x2D, 0x23, 0xFA, 0xFB, 0xFA, - 0xF5, 0x27, 0x21, 0xD9, 0xF8, 0x20, 0x21, 0xFB, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x5D, 0x58, 0x55, - 0x50, 0x48, 0x45, 0x43, 0x44, 0x44, 0x45, 0x45, - 0x3E, 0x3F, 0x43, 0x41, 0x3F, 0x48, 0x52, 0x5D, - 0x63, 0x65, 0xCB, 0x65, 0x61, 0x5D, 0x52, 0x4B, - 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54, - 0x54, 0x58, 0x5A, 0x59, 0x5B, 0x5B, 0x5B, 0x5A, - 0x55, 0x52, 0x4D, 0x4D, 0x55, 0x5B, 0x5D, 0xFC, - 0xF1, 0xF9, 0xFC, 0xD4, 0x21, 0xCC, 0xF7, 0xF8, - 0xF2, 0x21, 0xD9, 0xFC, 0xF2, 0xFB, 0x21, 0x45, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xD1, 0xD0, 0xCD, - 0xCC, 0x63, 0x5E, 0x58, 0x50, 0x47, 0x43, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x40, 0x41, 0x3F, 0x4A, - 0x56, 0x5E, 0x64, 0xCB, 0x65, 0x63, 0x5E, 0x56, - 0x4C, 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54, - 0x58, 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, - 0x57, 0x5A, 0x5A, 0x5C, 0x5B, 0x5A, 0x58, 0x54, - 0x51, 0x4C, 0x55, 0x5D, 0x5D, 0x5B, 0x54, 0xFC, - 0xF0, 0xF9, 0xFC, 0x65, 0x45, 0xCD, 0xFB, 0xFB, - 0xF8, 0x26, 0xFB, 0xFC, 0xFC, 0xFC, 0x21, 0x27, - 0xFB, 0xFC, 0xFC, 0xFC, 0xFB, 0xD7, 0x35, 0x34, - 0x2F, 0x35, 0x36, 0x2F, 0x2F, 0x36, 0x2F, 0x2F, - 0x36, 0x36, 0x35, 0x35, 0x43, 0x42, 0x41, 0x2E, - 0x45, 0x4C, 0x5B, 0x62, 0x65, 0xCC, 0x64, 0x60, - 0x58, 0x4D, 0x49, 0x47, 0x47, 0x49, 0x4C, 0x51, - 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x57, - 0x58, 0x5A, 0x5A, 0x5B, 0x5A, 0x55, 0x54, 0x51, - 0x53, 0x5C, 0x5D, 0x5D, 0x54, 0x4B, 0x4D, 0xFC, - 0xFC, 0x44, 0xFC, 0xFB, 0x7B, 0xAB, 0xA8, 0xAE, - 0xAB, 0x7F, 0xFC, 0xFC, 0xFB, 0xFB, 0x22, 0x2A, - 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x2F, 0x30, 0x30, - 0x32, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x2F, 0x2F, 0x40, 0x41, - 0x2E, 0x40, 0x48, 0x56, 0x5F, 0x64, 0xCC, 0x65, - 0x61, 0x59, 0x50, 0x49, 0x47, 0x47, 0x49, 0x4C, - 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, - 0x5A, 0x5A, 0x5A, 0x58, 0x55, 0x52, 0x51, 0x5A, - 0x5D, 0x5D, 0x57, 0x4C, 0x51, 0x54, 0x5D, 0xFC, - 0xFC, 0x2A, 0xFC, 0xC9, 0xAA, 0x8B, 0x8A, 0x8C, - 0xAB, 0x8C, 0x8C, 0xFB, 0xFB, 0x23, 0x20, 0xF1, - 0xFC, 0xFC, 0xFC, 0x3B, 0x33, 0x33, 0x32, 0x32, - 0x31, 0x32, 0x30, 0x32, 0x32, 0x32, 0x32, 0x30, - 0x31, 0x31, 0x31, 0x32, 0x33, 0x33, 0x3C, 0x41, - 0x41, 0x2E, 0x2D, 0x45, 0x4D, 0x5D, 0x63, 0xCC, - 0x65, 0x62, 0x5D, 0x51, 0x49, 0x47, 0x47, 0x4A, - 0x59, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58, - 0x5A, 0x5A, 0x58, 0x55, 0x53, 0x53, 0x5C, 0x5E, - 0x59, 0x51, 0x4E, 0x54, 0x59, 0x5E, 0x62, 0xFC, - 0xFC, 0xDB, 0xAA, 0xA1, 0x95, 0x9C, 0x8C, 0x88, - 0x82, 0x83, 0x83, 0x8C, 0x88, 0xAE, 0xB9, 0xFB, - 0xFC, 0xFC, 0xFC, 0x3C, 0x3B, 0x72, 0x38, 0x33, - 0x33, 0x33, 0x31, 0x33, 0x31, 0x31, 0x31, 0x31, - 0x33, 0x33, 0x38, 0x33, 0x72, 0x3B, 0x44, 0x2E, - 0x41, 0x2E, 0x2E, 0x2D, 0x43, 0x4B, 0x5B, 0x63, - 0xCB, 0xCC, 0x63, 0x5D, 0x51, 0x49, 0x47, 0x49, - 0x5C, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, - 0x58, 0x58, 0x57, 0x53, 0x58, 0x5D, 0x5E, 0x55, - 0x51, 0x53, 0x58, 0x5E, 0x60, 0x63, 0x64, 0xFC, - 0xFC, 0xC0, 0xA6, 0x9D, 0x8B, 0x9C, 0x8C, 0x8C, - 0x6E, 0x83, 0x88, 0x8C, 0x8C, 0x8C, 0x83, 0xE8, - 0xFB, 0xFC, 0xFC, 0xFC, 0x33, 0x70, 0x70, 0x6F, - 0x6F, 0x6F, 0x6F, 0x3A, 0x6F, 0x6D, 0x6F, 0x6F, - 0x70, 0x6F, 0x6F, 0x70, 0x6F, 0x32, 0x5A, 0x48, - 0x41, 0x2D, 0x2D, 0x2D, 0x2C, 0x41, 0x49, 0x5A, - 0x62, 0xCB, 0xCB, 0x63, 0x5D, 0x50, 0x49, 0x4A, - 0x5C, 0x58, 0x58, 0x57, 0x55, 0x57, 0x57, 0x57, - 0x57, 0x55, 0x56, 0x59, 0x5E, 0x5C, 0x52, 0x53, - 0x55, 0x5B, 0x5E, 0x61, 0x63, 0x64, 0x63, 0xFC, - 0xE8, 0xBF, 0xA4, 0x99, 0x9C, 0x8C, 0x88, 0x88, - 0x6E, 0x88, 0x8C, 0x8C, 0x8C, 0xC2, 0xA6, 0xC4, - 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x3A, 0x6F, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x37, 0x32, 0xCD, 0x5E, - 0x4C, 0x43, 0x2C, 0x2D, 0x2D, 0x2C, 0x2E, 0x47, - 0x57, 0x61, 0x65, 0xCC, 0x63, 0x5C, 0x50, 0x4D, - 0x5C, 0x5A, 0x57, 0x55, 0x55, 0x55, 0x58, 0x58, - 0x55, 0x54, 0x5B, 0x5E, 0x5D, 0x53, 0x53, 0x55, - 0x5D, 0x5E, 0x61, 0x61, 0x61, 0x61, 0x5E, 0xFC, - 0xEA, 0xBE, 0xA4, 0x9B, 0x8B, 0x85, 0x8C, 0x6E, - 0x8C, 0x8C, 0x8C, 0xA3, 0xAA, 0xA4, 0xA4, 0xE9, - 0xFB, 0xFC, 0xFC, 0xFC, 0x36, 0x6D, 0x70, 0x73, - 0x70, 0x70, 0x70, 0x73, 0x73, 0x73, 0x73, 0x70, - 0x70, 0x70, 0x73, 0x70, 0x37, 0x38, 0xD1, 0xCF, - 0x61, 0x4D, 0x44, 0x2C, 0x2D, 0x2E, 0x2C, 0x2E, - 0x3E, 0x56, 0x61, 0xCB, 0xCC, 0x62, 0x5B, 0x57, - 0x59, 0x58, 0x55, 0x54, 0x54, 0x55, 0x58, 0x58, - 0x58, 0x5B, 0x5E, 0x5B, 0x53, 0x55, 0x55, 0x5C, - 0x5E, 0x61, 0x61, 0x60, 0x5D, 0x5A, 0x4E, 0xFC, - 0xFC, 0xEA, 0xAA, 0x9C, 0x8A, 0x85, 0x82, 0x8C, - 0x8C, 0xA8, 0xEB, 0xA8, 0xA4, 0xA4, 0xAA, 0xFC, - 0xFC, 0xFC, 0x64, 0xFB, 0x39, 0x31, 0x72, 0x78, - 0x73, 0x78, 0x73, 0x74, 0x74, 0x74, 0x74, 0x73, - 0x78, 0x70, 0x73, 0x73, 0x33, 0xCC, 0xD2, 0xD1, - 0xCE, 0x62, 0x53, 0x3F, 0x2D, 0x2D, 0x41, 0x2C, - 0x2E, 0x3E, 0x56, 0x62, 0xCB, 0xCB, 0x61, 0x5D, - 0x54, 0x54, 0x54, 0x54, 0x56, 0x58, 0x58, 0x58, - 0x5C, 0x5E, 0x5A, 0x55, 0x58, 0x58, 0x5B, 0x5E, - 0x61, 0x5E, 0x5D, 0x5A, 0x52, 0x55, 0xCD, 0xFC, - 0xFC, 0x34, 0xC9, 0xE8, 0xA8, 0xAE, 0xC2, 0xE8, - 0xC3, 0xA6, 0xA7, 0xA6, 0xAA, 0x78, 0x2E, 0x42, - 0xFC, 0xFC, 0xD2, 0x64, 0xF8, 0x31, 0x72, 0x73, - 0x73, 0x73, 0x73, 0x74, 0x75, 0x75, 0x74, 0x73, - 0x73, 0x73, 0x73, 0x72, 0x33, 0x5C, 0x64, 0xD2, - 0xD1, 0xCF, 0x63, 0x54, 0x3F, 0x2C, 0x41, 0x41, - 0x2C, 0x2E, 0x47, 0x58, 0x63, 0xCB, 0xCB, 0x62, - 0x52, 0x53, 0x53, 0x56, 0x58, 0x58, 0x5A, 0x5B, - 0x5E, 0x5A, 0x57, 0x58, 0x58, 0x58, 0x60, 0x60, - 0x5D, 0x5A, 0x55, 0x4E, 0x64, 0xD2, 0xD1, 0xFC, - 0xFC, 0x41, 0x3E, 0xC1, 0xC0, 0xA3, 0xA6, 0xA7, - 0xA7, 0xA9, 0xAA, 0xB8, 0x2E, 0x3F, 0x2C, 0x41, - 0xFC, 0xFC, 0xF7, 0xCE, 0xCD, 0x36, 0x72, 0x73, - 0x74, 0x75, 0x78, 0x75, 0x75, 0x75, 0x74, 0x74, - 0x74, 0x74, 0x78, 0x72, 0x6D, 0x49, 0x59, 0xCB, - 0xD1, 0xD1, 0xD2, 0xCB, 0x56, 0x3F, 0x2C, 0x41, - 0x40, 0x2D, 0x2E, 0x49, 0x5B, 0x64, 0xCC, 0x64, - 0x51, 0x53, 0x53, 0x55, 0x58, 0x59, 0x5B, 0x5E, - 0x59, 0x58, 0x58, 0x58, 0x55, 0x60, 0x60, 0x5C, - 0x5A, 0x53, 0x5B, 0xD0, 0xD3, 0xD3, 0xD3, 0xFB, - 0xFC, 0x40, 0x41, 0x45, 0xC4, 0xC0, 0xBE, 0xBE, - 0xC1, 0xC0, 0x3C, 0x47, 0x2E, 0x21, 0x22, 0x20, - 0x65, 0xFC, 0xFC, 0xFC, 0xFC, 0x6D, 0x72, 0x75, - 0x78, 0x76, 0x75, 0x79, 0x76, 0x76, 0x76, 0x76, - 0x75, 0x75, 0x75, 0x72, 0x6D, 0x2E, 0x48, 0x5D, - 0xCE, 0xD1, 0xD4, 0xD3, 0xCB, 0x56, 0x43, 0x2C, - 0x42, 0x43, 0x2E, 0x2E, 0x4A, 0x5D, 0x64, 0x64, - 0x50, 0x52, 0x56, 0x58, 0x5C, 0x5D, 0x5E, 0x5D, - 0x5A, 0x58, 0x58, 0x55, 0x61, 0x60, 0x58, 0x58, - 0x4E, 0x61, 0xD1, 0xD4, 0xD4, 0xD1, 0xEE, 0xFC, - 0xFC, 0x2B, 0x29, 0x2E, 0x3F, 0xB0, 0xAD, 0x81, - 0x46, 0x2D, 0x46, 0x2C, 0x24, 0x22, 0x22, 0x23, - 0x25, 0xFC, 0xFC, 0xFC, 0xFC, 0x6E, 0x73, 0x76, - 0x76, 0x79, 0x79, 0x79, 0x76, 0x76, 0x79, 0x76, - 0x79, 0x79, 0x79, 0x74, 0x3F, 0x41, 0x2C, 0x48, - 0x5F, 0xCF, 0xD5, 0xD7, 0xD6, 0xCD, 0x57, 0x40, - 0x2E, 0x3F, 0x44, 0x2E, 0x41, 0x4C, 0x60, 0x61, - 0x51, 0x53, 0x58, 0x5C, 0x5D, 0x5E, 0x5D, 0x5C, - 0x58, 0x57, 0x54, 0x5F, 0x5E, 0x55, 0x55, 0x52, - 0x64, 0xD4, 0xD5, 0xD4, 0xD1, 0x5D, 0xFA, 0xFB, - 0xF4, 0x21, 0x24, 0x41, 0x40, 0x44, 0x2E, 0x2E, - 0x42, 0x41, 0x2A, 0x24, 0x22, 0x22, 0x22, 0x22, - 0x23, 0xD9, 0xFC, 0xFC, 0xFC, 0xFC, 0xE5, 0xB8, - 0x8F, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F, - 0x8F, 0x8F, 0xB8, 0xE5, 0x3F, 0x3E, 0x43, 0x2C, - 0x48, 0x61, 0xD1, 0xD7, 0xD9, 0xD7, 0xD0, 0x57, - 0x41, 0x2E, 0x3E, 0x44, 0x2D, 0x40, 0x52, 0x5D, - 0x53, 0x55, 0x59, 0x5D, 0x5E, 0x5E, 0x5D, 0x5A, - 0x57, 0x53, 0x5E, 0x5E, 0x54, 0x53, 0x54, 0x65, - 0xD5, 0xD6, 0xD4, 0xCE, 0x53, 0xFB, 0xF9, 0xFC, - 0x24, 0x22, 0x23, 0x23, 0x41, 0x42, 0x2E, 0x40, - 0x2B, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x23, 0x23, 0xFC, 0xFC, 0xFC, 0xFC, 0xE7, 0xBD, - 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0xB5, 0xC6, 0xEB, 0x2D, 0x47, 0x4A, 0x47, - 0x2C, 0x3E, 0x61, 0xD4, 0xDC, 0xDC, 0xDA, 0xCF, - 0x54, 0x41, 0x41, 0x3E, 0x45, 0x2C, 0x3F, 0x4A, - 0x58, 0x5A, 0x5C, 0x5F, 0x60, 0x5E, 0x5D, 0x57, - 0x51, 0x5D, 0x5D, 0x51, 0x53, 0x53, 0xCB, 0xD5, - 0xD6, 0xD5, 0x63, 0x55, 0xFC, 0xFC, 0xFC, 0x2C, - 0x23, 0x22, 0x23, 0x22, 0x20, 0x2D, 0x2C, 0x26, - 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x21, 0xF0, 0xFC, 0xFC, 0xFC, 0xE2, 0xC6, - 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0xC7, 0xE3, 0x3E, 0x2E, 0x49, 0x52, - 0x4C, 0x41, 0x44, 0x62, 0xD6, 0xDE, 0xDE, 0xD9, - 0xD0, 0x51, 0x2E, 0x40, 0x47, 0x44, 0x2C, 0x42, - 0x5D, 0x5D, 0x5F, 0x60, 0x60, 0x5D, 0x57, 0x51, - 0x58, 0x5D, 0x4E, 0x52, 0x55, 0x64, 0xD5, 0xD6, - 0xD4, 0x61, 0x59, 0x6B, 0xFC, 0xFC, 0xFC, 0x21, - 0x23, 0x22, 0x23, 0x22, 0x23, 0x21, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x21, 0x24, 0xFC, 0xFC, 0xFC, 0xE2, 0xC7, - 0xB5, 0x90, 0x93, 0x93, 0x93, 0x90, 0x93, 0x93, - 0x90, 0xB5, 0xC8, 0xE4, 0x5F, 0x45, 0x2E, 0x4D, - 0x57, 0x57, 0x44, 0x43, 0x63, 0xDA, 0xDF, 0xDF, - 0xD9, 0xCE, 0x4C, 0x2C, 0x3F, 0x3E, 0x40, 0x40, - 0x60, 0x5E, 0x61, 0x61, 0x5E, 0x5B, 0x53, 0x52, - 0x5C, 0x52, 0x52, 0x55, 0x61, 0xD4, 0xD5, 0xD1, - 0x5E, 0x5B, 0x5C, 0xFB, 0xFC, 0xFC, 0x2A, 0x21, - 0x23, 0x22, 0x23, 0x22, 0x22, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x22, 0xFB, 0xFC, 0xFC, 0xB3, 0xC8, - 0xB5, 0x90, 0x92, 0xB5, 0x93, 0x93, 0xB5, 0x93, - 0x92, 0xB5, 0xC8, 0xB9, 0xD0, 0x5E, 0x44, 0x40, - 0x52, 0x58, 0x57, 0x48, 0x40, 0x63, 0xD9, 0xE0, - 0xE0, 0xD9, 0xCB, 0x49, 0x2D, 0x3F, 0x45, 0x3F, - 0x63, 0x61, 0x62, 0x60, 0x5E, 0x55, 0x4D, 0x59, - 0x53, 0x4E, 0x54, 0x5D, 0xD2, 0xD4, 0xD2, 0x5E, - 0x5C, 0x5D, 0xFC, 0xFC, 0xFC, 0xF8, 0x29, 0x23, - 0x23, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x23, 0x22, 0x22, 0x23, 0x23, 0x23, 0x22, 0x22, - 0x22, 0x22, 0x22, 0xF0, 0xFC, 0xFC, 0xB3, 0xC7, - 0xB5, 0x93, 0xB5, 0x93, 0x93, 0x91, 0x93, 0x93, - 0x91, 0xB5, 0xC7, 0xAD, 0xD6, 0xD2, 0x5E, 0x3F, - 0x3F, 0x57, 0x57, 0x58, 0x4A, 0x41, 0x64, 0xDC, - 0xF1, 0xDF, 0xDA, 0x61, 0x45, 0x2E, 0x43, 0x47, - 0xCB, 0x63, 0x62, 0x5F, 0x58, 0x51, 0x53, 0x54, - 0x4C, 0x52, 0x5C, 0xCD, 0xD3, 0xD2, 0x60, 0x5D, - 0x5D, 0xFB, 0xFC, 0xFC, 0xFC, 0xDB, 0x49, 0x24, - 0x21, 0x23, 0x23, 0x22, 0x26, 0x26, 0x2A, 0x24, - 0x22, 0x23, 0x22, 0x21, 0x24, 0x26, 0x26, 0x2A, - 0x29, 0x2B, 0x24, 0x25, 0xFC, 0xFC, 0xB3, 0xC5, - 0x91, 0x91, 0x92, 0x91, 0x92, 0x92, 0x93, 0x93, - 0x91, 0x93, 0xC6, 0xAD, 0xDC, 0xD9, 0xD4, 0x60, - 0x43, 0x45, 0x58, 0x58, 0x57, 0x4B, 0x43, 0xCC, - 0xDD, 0xF1, 0xD8, 0xD5, 0x5D, 0x43, 0x41, 0x47, - 0xCD, 0x63, 0x62, 0x5D, 0x54, 0x4C, 0x55, 0x4B, - 0x51, 0x58, 0x62, 0xD0, 0xD0, 0x62, 0x5D, 0x5D, - 0x67, 0xFC, 0xFC, 0xFC, 0xFC, 0x58, 0x4E, 0x28, - 0x2A, 0x20, 0x23, 0x22, 0x23, 0x2A, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x23, 0x25, 0x2A, 0x2E, 0x2D, - 0x2E, 0x2E, 0x2E, 0x23, 0xFA, 0xFC, 0xB2, 0xBD, - 0xB5, 0x90, 0x91, 0x93, 0x92, 0x90, 0x91, 0x93, - 0x92, 0x91, 0xBD, 0xAD, 0xDE, 0xE0, 0xD8, 0xD7, - 0x61, 0x40, 0x48, 0x58, 0x58, 0x58, 0x48, 0x44, - 0xCF, 0xDE, 0xE0, 0xDD, 0xD0, 0x52, 0x41, 0x45, - 0xCD, 0x63, 0x61, 0x58, 0x4D, 0x51, 0x4C, 0x4B, - 0x54, 0x5D, 0xCC, 0xCE, 0x63, 0x61, 0x5D, 0x5D, - 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x27, 0x21, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x24, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x20, - 0x27, 0x2B, 0x41, 0x2B, 0x23, 0xFC, 0xB2, 0xB6, - 0x93, 0x90, 0x92, 0xB5, 0x92, 0x90, 0xB5, 0x90, - 0x92, 0x93, 0xBC, 0xAD, 0xDC, 0xF1, 0xF3, 0xF0, - 0xD9, 0x61, 0x41, 0x4A, 0x58, 0x57, 0x57, 0x44, - 0x49, 0xD2, 0xDD, 0xD8, 0xDA, 0x63, 0x4A, 0x45, - 0xCC, 0x63, 0x5E, 0x52, 0x4B, 0x4C, 0x49, 0x51, - 0x5C, 0x61, 0xCD, 0x65, 0x63, 0x5E, 0x4E, 0xCF, - 0xFB, 0xFB, 0xF0, 0xFC, 0xD2, 0x2A, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x26, 0x41, 0x27, 0xF9, 0x81, 0xB7, - 0xB5, 0x91, 0x92, 0xB5, 0x91, 0xB5, 0x93, 0xB5, - 0x93, 0xB6, 0xB7, 0xB9, 0xCB, 0xD8, 0xF3, 0xF2, - 0xF2, 0xDB, 0x61, 0x2D, 0x51, 0x58, 0x57, 0x58, - 0x41, 0x51, 0xD4, 0xDB, 0xDC, 0xD1, 0x5B, 0x4C, - 0xCB, 0x62, 0x59, 0x4C, 0x4A, 0x49, 0x4B, 0x55, - 0x60, 0x64, 0xCC, 0x64, 0x5E, 0x55, 0x60, 0xE1, - 0xFB, 0xF8, 0xFC, 0xFC, 0x21, 0x22, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x21, 0x24, 0x2D, 0x21, 0xB4, 0xBB, - 0xB6, 0xB5, 0xB6, 0xB7, 0xB7, 0xB7, 0xB7, 0xB6, - 0xB6, 0xB6, 0xBB, 0xB9, 0x45, 0xCB, 0xDF, 0xF3, - 0xF3, 0xF3, 0xDB, 0x5E, 0x2C, 0x51, 0x58, 0x58, - 0x52, 0x2D, 0x5C, 0xD4, 0xD9, 0xD5, 0x63, 0x58, - 0x64, 0x60, 0x53, 0x49, 0x4A, 0x49, 0x52, 0x5C, - 0x63, 0xCD, 0xCD, 0x63, 0x5C, 0x4E, 0x65, 0xFC, - 0xFC, 0xF5, 0xFC, 0xD2, 0x23, 0x22, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x21, 0x22, 0x25, 0x29, 0xB3, 0xC7, - 0xB5, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, - 0xB6, 0xB5, 0xC7, 0xAD, 0x57, 0x3F, 0xCB, 0xF0, - 0xF3, 0xF3, 0xF2, 0xD9, 0x58, 0x41, 0x4C, 0x58, - 0x57, 0x47, 0x42, 0x62, 0xD4, 0xD4, 0xCC, 0x60, - 0x63, 0x5D, 0x50, 0x47, 0x48, 0x4B, 0x58, 0x60, - 0xCC, 0xCE, 0xCD, 0x60, 0x53, 0x5C, 0x62, 0xFB, - 0xF9, 0xFC, 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x23, 0x23, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0x81, 0xC7, - 0xB7, 0xB7, 0xBC, 0xB7, 0xBC, 0xBC, 0xBC, 0xB7, - 0xB7, 0xB7, 0xC8, 0x80, 0x58, 0x57, 0x40, 0xCE, - 0xF3, 0xF2, 0xF2, 0xF0, 0xD5, 0x4C, 0x3F, 0x4B, - 0x52, 0x50, 0x2D, 0x4B, 0x64, 0xD2, 0xCC, 0x61, - 0x60, 0x58, 0x4A, 0x47, 0x47, 0x4C, 0x59, 0x64, - 0xD0, 0xD0, 0x64, 0x59, 0x49, 0x5D, 0xFB, 0xFC, - 0xD9, 0xFC, 0xD6, 0x23, 0x22, 0x22, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x23, 0x21, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0xB4, 0xC8, - 0xBD, 0xB7, 0xBD, 0xBC, 0xBD, 0xC5, 0xBC, 0xC5, - 0xBC, 0xBD, 0xC7, 0xAC, 0x58, 0x57, 0x58, 0x2C, - 0xD1, 0xF0, 0xF3, 0xF3, 0xE0, 0xCD, 0x45, 0x3E, - 0x48, 0x4B, 0x3F, 0x41, 0x56, 0x64, 0x65, 0x62, - 0x5D, 0x52, 0x47, 0x48, 0x48, 0x53, 0x60, 0xCC, - 0xD2, 0xD0, 0x63, 0x52, 0x4E, 0x53, 0xFB, 0xFB, - 0xFC, 0xFC, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x23, 0x20, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, 0xB4, 0xC7, - 0xC5, 0xBC, 0xC5, 0xBD, 0xC5, 0xC5, 0xBD, 0xC5, - 0xBC, 0xC6, 0xC7, 0xB9, 0x58, 0x57, 0x58, 0x57, - 0x2D, 0xD4, 0xF1, 0xF2, 0xF0, 0xD9, 0x5D, 0x47, - 0x48, 0x3F, 0x42, 0x2C, 0x48, 0x5C, 0x5F, 0x60, - 0x58, 0x50, 0x47, 0x4A, 0x49, 0x55, 0x63, 0xD0, - 0xD2, 0xCD, 0x5D, 0x49, 0x4E, 0xE1, 0xFC, 0xF0, - 0xFC, 0xF8, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x20, 0x21, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22, - 0x23, 0x22, 0x23, 0x23, 0x23, 0x22, 0xC4, 0xC8, - 0xBD, 0xBD, 0xC6, 0xBD, 0xC6, 0xC6, 0xC5, 0xC6, - 0xBD, 0xC6, 0xC7, 0xE4, 0x54, 0x57, 0x58, 0x57, - 0x57, 0x43, 0xD7, 0xE0, 0xF1, 0xD8, 0xCD, 0x4B, - 0x4A, 0x47, 0x42, 0x2C, 0x3F, 0x4D, 0x58, 0x5C, - 0x52, 0x4B, 0x48, 0x4B, 0x4A, 0x58, 0xCB, 0xD3, - 0xD2, 0xCD, 0x58, 0x47, 0x4A, 0xFC, 0xFC, 0xFB, - 0xFC, 0x2B, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x26, 0x21, 0x21, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0xE5, 0xC8, - 0xBA, 0xC5, 0xC6, 0xC6, 0xC6, 0xC7, 0xC6, 0xC7, - 0xC5, 0xC6, 0xC8, 0xE5, 0x2E, 0x54, 0x58, 0x57, - 0x57, 0x4C, 0x4D, 0xDA, 0xD8, 0xD8, 0xD4, 0x5C, - 0x4B, 0x4B, 0x3F, 0x42, 0x44, 0x4A, 0x51, 0x58, - 0x4B, 0x48, 0x4B, 0x51, 0x4D, 0x5F, 0xD0, 0xD1, - 0xD0, 0x64, 0x51, 0x44, 0x6B, 0xFC, 0xFB, 0xFC, - 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x23, 0x26, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0xE5, 0xED, - 0xE7, 0xBA, 0xC8, 0xC6, 0xC6, 0xC6, 0xC6, 0xC7, - 0xC7, 0xE5, 0xED, 0xE6, 0x61, 0x41, 0x52, 0x58, - 0x58, 0x57, 0x45, 0x5E, 0xD7, 0xDD, 0xD5, 0x60, - 0x4B, 0x4C, 0x48, 0x4D, 0x4D, 0x50, 0x4D, 0x56, - 0x4A, 0x3E, 0x53, 0x53, 0x52, 0x63, 0xD3, 0xD0, - 0xCE, 0x60, 0x4A, 0x45, 0xFC, 0xFC, 0xF7, 0xFC, - 0xFC, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x21, 0x2A, 0x20, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x21, 0x23, 0xEB, 0xF6, - 0xF6, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, - 0xF6, 0xF6, 0xF6, 0xE6, 0xDB, 0x58, 0x45, 0x4B, - 0x58, 0x57, 0x4D, 0x4B, 0x64, 0xD4, 0xD0, 0x5C, - 0x48, 0x51, 0x4C, 0x5D, 0x5E, 0x5C, 0x56, 0x59, - 0x3E, 0x4A, 0x58, 0x54, 0x52, 0x65, 0xD3, 0xD0, - 0xCF, 0x5D, 0x48, 0xFC, 0xFC, 0xFC, 0xFA, 0xFC, - 0xFC, 0x21, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x21, 0x2A, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x21, 0x4F, 0xE6, 0xC6, - 0xC6, 0xBD, 0xC6, 0xBD, 0xBD, 0xBD, 0xBD, 0xC6, - 0xC5, 0xBA, 0xC7, 0xE6, 0xF2, 0xD4, 0x49, 0x4B, - 0x3E, 0x4D, 0x52, 0x3E, 0x52, 0x63, 0x64, 0x56, - 0x48, 0x54, 0x4D, 0x61, 0xCC, 0xCC, 0x60, 0x60, - 0x47, 0x4D, 0x5C, 0x53, 0x58, 0xCF, 0xD1, 0xCF, - 0xD0, 0x59, 0x45, 0xFC, 0xFC, 0xFC, 0xEF, 0xF9, - 0xFC, 0x21, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x23, 0x4F, 0xE4, 0xB9, - 0xAF, 0x80, 0x80, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, - 0x80, 0xB4, 0xB9, 0xE4, 0x7F, 0xDE, 0x61, 0x52, - 0x54, 0x48, 0x3F, 0x43, 0x4D, 0x56, 0x59, 0x4B, - 0x3E, 0x58, 0x53, 0x61, 0xD3, 0xD4, 0xCF, 0xCD, - 0x4C, 0x58, 0x5F, 0x53, 0x5E, 0xD3, 0xD0, 0xCE, - 0xCE, 0x52, 0x3F, 0xFC, 0xFC, 0xFC, 0xF7, 0x65, - 0xFA, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x21, 0x2A, 0x23, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x23, 0x22, 0x23, 0x22, 0x21, 0xB1, 0xE4, 0xE6, - 0x7C, 0xB1, 0x7C, 0xB1, 0xB2, 0xB2, 0xB3, 0x3D, - 0xB3, 0x3C, 0xE5, 0xB3, 0xB0, 0xF1, 0xD0, 0x58, - 0x5D, 0x4D, 0x40, 0x41, 0x48, 0x51, 0x4C, 0x3F, - 0x3F, 0x4D, 0x5A, 0x5A, 0xD5, 0xD9, 0xD7, 0xD4, - 0x57, 0x5E, 0x61, 0x4C, 0x63, 0xD4, 0xCF, 0xCE, - 0xCB, 0x4D, 0x4A, 0xFC, 0xFC, 0xFC, 0xFC, 0xF0, - 0xFB, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x22, 0x23, 0x22, 0x23, 0x23, 0xB1, 0x81, 0x7D, - 0x39, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x7C, 0xB2, 0xB0, 0xDF, 0xD2, 0x57, - 0x60, 0x59, 0x5B, 0x59, 0x52, 0x4C, 0x4A, 0x40, - 0x42, 0x4A, 0x53, 0x4D, 0xD2, 0xDE, 0xDE, 0xD9, - 0x5E, 0x5E, 0x60, 0x4A, 0xCD, 0xD1, 0xCF, 0xCE, - 0x63, 0x49, 0x5C, 0xFB, 0xE8, 0x89, 0x9F, 0xFC, - 0xD6, 0x21, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x21, 0x2A, 0x22, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x7F, 0xB9, - 0x71, 0x6C, 0x38, 0x38, 0x33, 0x33, 0x33, 0x38, - 0x38, 0x71, 0xAD, 0xE4, 0xD3, 0xDA, 0xCC, 0x52, - 0x63, 0x60, 0xCE, 0xD4, 0xCF, 0x60, 0x4C, 0x40, - 0x3F, 0x45, 0x4B, 0x5A, 0xCB, 0xD8, 0xDE, 0xDC, - 0x5E, 0x5E, 0x5F, 0x4C, 0xD2, 0xD2, 0xCF, 0xCF, - 0x61, 0x45, 0x5E, 0xA7, 0x9D, 0x95, 0x8B, 0x99, - 0xFC, 0x41, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22, - 0x23, 0x22, 0x23, 0x2A, 0x23, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x77, 0x77, 0xF6, - 0xFC, 0x7D, 0x7D, 0x7E, 0x7E, 0x7E, 0x7E, 0x7D, - 0x7D, 0xFC, 0x47, 0x64, 0xD0, 0xD0, 0x5D, 0x4B, - 0x62, 0xCC, 0xD1, 0xDE, 0xDE, 0xD4, 0x5E, 0x43, - 0x3F, 0x3E, 0x48, 0x53, 0x58, 0xDB, 0xD8, 0xDC, - 0x5E, 0x5E, 0x5E, 0x53, 0xD4, 0xD2, 0xD0, 0xD0, - 0x5E, 0x49, 0xA7, 0xA6, 0x89, 0x95, 0x8B, 0x9C, - 0x9C, 0xFB, 0xD4, 0x22, 0x22, 0x22, 0x22, 0x23, - 0x22, 0x23, 0x23, 0x2A, 0x22, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x23, 0x22, 0x23, 0x23, 0x98, 0x8C, 0x8C, 0x88, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, - 0xE9, 0x9C, 0x48, 0x5C, 0xD0, 0xCB, 0x48, 0x49, - 0x5B, 0xCB, 0xCD, 0xE0, 0xF1, 0xDD, 0xD0, 0x4A, - 0x41, 0x47, 0x45, 0x4C, 0x48, 0xD7, 0xDE, 0xDC, - 0x5E, 0x5E, 0x5A, 0x58, 0xD1, 0xD0, 0xD0, 0xD2, - 0x5C, 0x55, 0xA7, 0xA6, 0x87, 0x86, 0x89, 0x94, - 0x9C, 0xA9, 0xFC, 0xF4, 0x22, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x22, 0x2A, 0x21, 0x23, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x23, 0x22, 0x23, 0xA4, 0x89, 0x8C, 0xAA, - 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF7, - 0x85, 0x88, 0x8D, 0x59, 0x64, 0x63, 0x47, 0x3E, - 0x4C, 0x60, 0x61, 0xE0, 0xF0, 0xDF, 0xD9, 0x5D, - 0x2E, 0x3E, 0x3E, 0x47, 0x4D, 0xCD, 0xDE, 0xDC, - 0x5D, 0x5C, 0x51, 0x5D, 0xD1, 0xD2, 0xD2, 0xD4, - 0x5A, 0xBE, 0xA7, 0x98, 0x8A, 0x8A, 0xA0, 0x8B, - 0x86, 0x86, 0xF7, 0xFC, 0xF7, 0x26, 0x23, 0x23, - 0x22, 0x22, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x21, 0x21, 0x21, 0xA1, 0x98, 0x9F, 0xBF, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xA7, - 0x8C, 0x86, 0x8D, 0x59, 0x5E, 0x5D, 0x3F, 0x3E, - 0x47, 0x53, 0x63, 0xD9, 0xF0, 0xF1, 0xDE, 0xD0, - 0x43, 0x3E, 0x47, 0x45, 0x4A, 0x5B, 0xDC, 0xDA, - 0x5D, 0x59, 0x49, 0x5F, 0xD1, 0xD2, 0xD3, 0xB9, - 0xA5, 0xA7, 0x98, 0x9B, 0x96, 0x9D, 0x89, 0x89, - 0x8B, 0x9C, 0x9D, 0xFC, 0xFC, 0xFC, 0x26, 0x22, - 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x22, 0x22, 0x29, 0x2D, 0x99, 0x99, 0xA2, 0xAA, - 0xC4, 0xFB, 0xFC, 0xFC, 0xFC, 0xF6, 0xBF, 0xA2, - 0x9C, 0x9C, 0x8E, 0xDC, 0xCD, 0x51, 0x41, 0x3E, - 0x45, 0x49, 0x58, 0xCD, 0xE0, 0xE0, 0xD8, 0xDA, - 0x4C, 0x4A, 0x45, 0x45, 0x48, 0x47, 0xDA, 0xDA, - 0x5C, 0x58, 0x44, 0x69, 0xA9, 0x98, 0xA4, 0xA6, - 0xA1, 0xA4, 0x99, 0x9E, 0x9D, 0x8B, 0x8A, 0x97, - 0x87, 0x9A, 0x8A, 0xC2, 0xFC, 0xFC, 0xFC, 0x4D, - 0x21, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22, - 0x21, 0x22, 0x2D, 0x34, 0xA4, 0xA2, 0xA2, 0xA9, - 0xBF, 0xC0, 0xC3, 0xC1, 0xC0, 0xBE, 0xA6, 0x9D, - 0x99, 0x87, 0xA2, 0xF1, 0xDC, 0x64, 0x42, 0x45, - 0x47, 0x3E, 0x49, 0x4C, 0xDD, 0xDF, 0xD8, 0xDB, - 0x5E, 0x4C, 0x48, 0x45, 0x45, 0x41, 0xD1, 0xD6, - 0x5A, 0x55, 0x3F, 0xA7, 0xA1, 0x98, 0x9F, 0x99, - 0x9F, 0x9D, 0x9A, 0x95, 0x8B, 0x97, 0x89, 0x8A, - 0x88, 0x94, 0x9C, 0x8C, 0xFC, 0xFC, 0xFC, 0xFC, - 0xF4, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, - 0x23, 0x23, 0x2C, 0x2C, 0xA8, 0xA2, 0xA4, 0xA4, - 0xA9, 0xAA, 0xAA, 0xAA, 0xA9, 0xA6, 0x98, 0x9C, - 0x8B, 0x88, 0x98, 0x8D, 0xD8, 0xD6, 0x4E, 0x47, - 0x47, 0x49, 0x47, 0x3F, 0xDA, 0xDD, 0xDE, 0xDD, - 0xCC, 0x4A, 0x4B, 0x3E, 0x45, 0x43, 0x61, 0xD4, - 0x56, 0x51, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0x9A, - 0xA0, 0xA2, 0x98, 0x98, 0x8B, 0x8B, 0x98, 0x98, - 0x84, 0x8B, 0x94, 0x8A, 0xA4, 0xFC, 0xFC, 0xFC, - 0xFC, 0xF2, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x23, - 0x23, 0x22, 0x2C, 0x2D, 0xC0, 0xA4, 0xA2, 0xA4, - 0xA4, 0xA6, 0xA6, 0xA6, 0xA4, 0xA2, 0x9F, 0x89, - 0x8B, 0x9C, 0x9C, 0x8B, 0x68, 0xDB, 0x5F, 0x4B, - 0x3E, 0x49, 0x4B, 0x3E, 0xCC, 0xDA, 0xDC, 0xDD, - 0xD3, 0x49, 0x52, 0x48, 0x45, 0x45, 0x53, 0xD0, - 0x51, 0x4A, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0xA0, - 0x9B, 0x86, 0x89, 0x98, 0x89, 0x8A, 0x96, 0x8A, - 0x9C, 0x89, 0x89, 0x9C, 0x8C, 0xF6, 0xFC, 0xFC, - 0xFC, 0xFC, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23, - 0x22, 0x21, 0x2B, 0x34, 0xC0, 0xA8, 0xA4, 0xA2, - 0xA2, 0x98, 0xA1, 0xA0, 0x98, 0x9F, 0x95, 0x8A, - 0x94, 0xA1, 0x8A, 0x84, 0x9B, 0x68, 0xCC, 0x49, - 0x4A, 0x47, 0x4C, 0x4B, 0x51, 0xD3, 0xDA, 0xDC, - 0xD5, 0x56, 0x56, 0x4A, 0x3E, 0x45, 0x48, 0x63, - 0x4A, 0x47, 0x3E, 0xA7, 0x98, 0x9D, 0x9E, 0x8B, - 0x95, 0x9B, 0x89, 0x86, 0x9B, 0x8B, 0x89, 0x84, - 0x9A, 0xA1, 0x95, 0x9A, 0x8C, 0xA4, 0xFC, 0xFC, - 0xFC, 0xFA, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23, - 0x21, 0x23, 0x2C, 0xF6, 0xBF, 0xA9, 0xA2, 0x99, - 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9B, 0x87, 0x8B, - 0x9C, 0x86, 0x9C, 0x8A, 0x87, 0x87, 0x89, 0x51, - 0x54, 0x47, 0x4B, 0x50, 0x4B, 0xCF, 0xD6, 0xDC, - 0xD5, 0x60, 0x54, 0x52, 0x48, 0x45, 0x40, 0x5A, - 0x45, 0x43, 0x47, 0xA7, 0x98, 0x9B, 0x95, 0x95, - 0x9A, 0x87, 0x98, 0x98, 0x8A, 0x86, 0x87, 0x9E, - 0x9B, 0x95, 0x9D, 0x9D, 0x99, 0x85, 0xA6, 0xFA, - 0xF2, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x22, - 0x21, 0x24, 0xFB, 0xF7, 0xBF, 0xA6, 0xA2, 0x99, - 0x97, 0x89, 0x86, 0x89, 0x9C, 0x96, 0x9E, 0x94, - 0x89, 0x99, 0x98, 0x89, 0x9E, 0x9B, 0x89, 0x8B, - 0x58, 0x4B, 0x4A, 0x52, 0x48, 0xCC, 0xD3, 0xDA, - 0xD3, 0x65, 0x4C, 0x58, 0x49, 0x3E, 0x2E, 0x4D, - 0x40, 0x41, 0x45, 0xA9, 0xA1, 0x9B, 0x9E, 0x9C, - 0x95, 0x8A, 0x94, 0x89, 0x96, 0x87, 0x9C, 0x9A, - 0x84, 0x9D, 0x9C, 0x9E, 0x9A, 0x9C, 0x9D, 0xBB, - 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x23, 0x23, - 0x24, 0xFC, 0xFC, 0xF6, 0xBF, 0xA6, 0x9F, 0x99, - 0x89, 0x95, 0x87, 0x94, 0x9D, 0x9E, 0x97, 0x9E, - 0x95, 0x9B, 0x89, 0x95, 0x95, 0x9B, 0x89, 0x87, - 0x5D, 0x56, 0x3E, 0x51, 0x3E, 0x60, 0xCF, 0xD3, - 0xD2, 0xCD, 0x5C, 0x49, 0x4B, 0x3E, 0x2C, 0x48, - 0x3E, 0x43, 0x3E, 0xA9, 0xA1, 0x9B, 0x97, 0x94, - 0x95, 0x9A, 0x9C, 0x87, 0x87, 0x9B, 0x9C, 0x95, - 0x9D, 0x89, 0x9A, 0x89, 0x9E, 0x9E, 0x8C, 0xA6, - 0x20, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x21, 0x21, 0x20, 0x40, - 0xFC, 0xFC, 0xFC, 0xEC, 0xBE, 0xA4, 0x9F, 0x99, - 0x95, 0x9F, 0xA0, 0x88, 0x9D, 0x8B, 0x97, 0x95, - 0x87, 0x95, 0x96, 0x95, 0x97, 0x94, 0x94, 0x98, - 0xD3, 0x4C, 0x47, 0x4D, 0x42, 0x4C, 0x60, 0xCC, - 0xCE, 0xD0, 0x65, 0x4B, 0x47, 0x44, 0x2B, 0x45, - 0x4B, 0x47, 0x49, 0xA7, 0xA1, 0x9A, 0x97, 0x89, - 0x95, 0x97, 0x97, 0x9E, 0x89, 0x95, 0x89, 0x9C, - 0x87, 0x95, 0x97, 0x99, 0x95, 0x99, 0x9F, 0xA4, - 0xC4, 0x21, 0x21, 0x23, 0x21, 0x23, 0x23, 0x23, - 0x23, 0x23, 0x23, 0x23, 0x21, 0x20, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xEA, 0xAA, 0xA6, 0xA2, 0x99, - 0x8B, 0x9A, 0x95, 0x9E, 0x9E, 0x9A, 0x94, 0x87, - 0x94, 0x94, 0x89, 0x94, 0x9B, 0x9B, 0xA7, 0xDC, - 0xDB, 0x65, 0x2E, 0x3E, 0x43, 0x44, 0x49, 0x58, - 0x63, 0xD3, 0xD3, 0x5E, 0x42, 0x42, 0x2D, 0x40, - 0x54, 0x4C, 0x4A, 0xA7, 0xA0, 0x99, 0x9B, 0x94, - 0xA0, 0x8A, 0x9B, 0x9D, 0x87, 0x95, 0x94, 0x8B, - 0x8A, 0x98, 0x9C, 0x8A, 0x9B, 0x99, 0xA2, 0xA6, - 0xBF, 0xEC, 0x2A, 0x20, 0x21, 0x23, 0x21, 0x20, - 0x20, 0x20, 0x20, 0x4C, 0xF9, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xEB, 0xAA, 0xA4, 0x9F, 0x9C, - 0x8B, 0x9B, 0x88, 0x84, 0x9E, 0x9D, 0x96, 0x94, - 0x94, 0x9A, 0x9B, 0x9B, 0xA4, 0xD5, 0xCD, 0xDE, - 0xF1, 0xDA, 0x4C, 0x2D, 0x41, 0x2B, 0x42, 0x4C, - 0x5E, 0xD4, 0xD7, 0xCD, 0x49, 0x2E, 0x2E, 0x41, - 0x5E, 0x57, 0xA7, 0xA6, 0xA7, 0xA4, 0xA2, 0x98, - 0x9D, 0x9C, 0xA1, 0x99, 0x9D, 0x88, 0x8B, 0x9C, - 0x8A, 0x9C, 0x9C, 0x94, 0x9C, 0x89, 0xA0, 0xA6, - 0xAA, 0xEB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFB, 0xE9, 0xAA, 0xA6, 0xA2, 0x8B, - 0x8B, 0x8A, 0x86, 0x9B, 0x9C, 0x98, 0xA0, 0x9B, - 0x9B, 0x84, 0xA7, 0xB4, 0x61, 0xD1, 0xD2, 0xE0, - 0xF1, 0xDC, 0x61, 0x2D, 0x2E, 0x3F, 0x56, 0x62, - 0x5D, 0xD4, 0xD9, 0xD3, 0x54, 0x41, 0x41, 0x44, - 0xCB, 0x60, 0x52, 0xA9, 0xA9, 0xA9, 0xA7, 0xA6, - 0xA6, 0xA4, 0xA4, 0xA2, 0xA2, 0x9D, 0x95, 0x89, - 0x9C, 0x8A, 0x9E, 0x9C, 0x8A, 0x9E, 0xA0, 0xA8, - 0xC0, 0xE9, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xE9, 0xAA, 0xA6, 0xA0, 0x99, - 0x9C, 0x8B, 0x9A, 0x84, 0x9B, 0x9B, 0x98, 0x98, - 0xA9, 0xB9, 0x49, 0x57, 0xCB, 0xD4, 0xD3, 0xF1, - 0xD8, 0xDA, 0xCE, 0x3F, 0x41, 0x4B, 0x5D, 0xCB, - 0x5E, 0xD6, 0xDB, 0xD6, 0x5D, 0x43, 0x3F, 0x49, - 0xD1, 0xCC, 0x4F, 0xDD, 0xC3, 0xBB, 0xBF, 0xAA, - 0xAA, 0xA9, 0xAA, 0xA8, 0xA8, 0xA6, 0xA6, 0xA2, - 0x9C, 0x9F, 0x9B, 0x9A, 0x9D, 0xA2, 0xA8, 0xAA, - 0xC1, 0xEA, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xEA, 0xC0, 0xAA, 0xA6, 0xA2, - 0xA2, 0x99, 0xA0, 0xA0, 0xA4, 0xA7, 0xA9, 0xC0, - 0x67, 0x49, 0x54, 0x60, 0xD0, 0xD4, 0xCC, 0xDF, - 0xD9, 0xD5, 0xD2, 0x3E, 0x47, 0x56, 0x60, 0xCD, - 0x5D, 0xD9, 0xD9, 0xD6, 0x61, 0x3F, 0x47, 0x52, - 0xD6, 0xD3, 0x62, 0x4D, 0x40, 0x4A, 0x57, 0xCA, - 0xC3, 0xC1, 0xC1, 0xC0, 0xBF, 0xBF, 0xAA, 0xAA, - 0xA6, 0xA4, 0xA4, 0xA4, 0xA6, 0xA8, 0xBE, 0xC1, - 0xC9, 0xEB, 0xFB, 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, - 0xFC, 0xFC, 0xFC, 0xEB, 0xC3, 0xC0, 0xAA, 0xA8, - 0xA6, 0xA6, 0xA6, 0xA9, 0xAA, 0xC0, 0xE8, 0xD0, - 0xD2, 0x4C, 0x5E, 0x64, 0xD0, 0xD1, 0x5F, 0xD9, - 0xD5, 0xD1, 0xD0, 0x48, 0x52, 0x5C, 0x64, 0xCD, - 0x5C, 0xDC, 0xD7, 0xD5, 0x62, 0x3F, 0x4C, 0x53, - 0xDA, 0xD7, 0xCE, 0x56, 0x40, 0x4B, 0x52, 0x56, - 0xCE, 0xDF, 0x6A, 0xEB, 0xE9, 0xC9, 0xC3, 0xC0, - 0xC0, 0xBF, 0xBE, 0xAA, 0xBF, 0xC0, 0xC3, 0xC9, - 0xEA, 0xF6, 0xEE, 0x58, 0x57, 0x5E, 0xD6, 0xD0, - 0xD2, 0x61, 0xCB, 0xD6, 0xD6, 0xD4, 0xDF, 0xF3, - 0xF2, 0xDD, 0xD7, 0xEB, 0xC9, 0xC1, 0xC0, 0xBF, - 0xAA, 0xAA, 0xAA, 0xBE, 0xC3, 0xF0, 0xD2, 0xD2, - 0xD2, 0x51, 0x62, 0xCC, 0xD0, 0xCC, 0x61, 0xD3, - 0xCF, 0xCE, 0xD2, 0x48, 0x5A, 0x61, 0xCC, 0xCE, - 0x5F, 0xD9, 0xD5, 0xD1, 0x63, 0x44, 0x56, 0x56, - 0xDC, 0xD9, 0xD4, 0x5E, 0x42, 0x4A, 0x4C, 0x57, - 0x5D, 0xD8, 0xE0, 0xD8, 0xDC, 0xCB, 0x66, 0xEC, - 0xE8, 0xC3, 0xC3, 0xC3, 0xC3, 0xC9, 0xE8, 0xEA, - 0xF6, 0x50, 0x3E, 0x58, 0x57, 0x5A, 0xD6, 0xD4, - 0xCC, 0x4B, 0x53, 0x5C, 0x64, 0xD1, 0xDF, 0xF3, - 0xF1, 0xDE, 0xD9, 0xF6, 0xEB, 0xC9, 0xC1, 0xC1, - 0xC0, 0xC0, 0xC1, 0xC9, 0xF0, 0xD6, 0xCD, 0xD6, - 0xD3, 0x53, 0xCB, 0xCF, 0xCD, 0x5F, 0x5F, 0xCE, - 0xCF, 0xCD, 0xD0, 0x47, 0x5F, 0xCB, 0xCE, 0xCD, - 0x63, 0xD6, 0xD3, 0xD1, 0x63, 0x3F, 0x58, 0x58, - 0xDB, 0xDC, 0xDA, 0x65, 0x3E, 0x49, 0x49, 0x4D, - 0x49, 0xDC, 0xDF, 0xE0, 0xDE, 0xD5, 0x47, 0x47, - 0x46, 0x6B, 0xEB, 0xEA, 0xE9, 0xEA, 0xEB, 0xF6, - 0xD0, 0x57, 0x57, 0x47, 0x47, 0x5B, 0xD4, 0xD4, - 0xCD, 0x44, 0x3E, 0x4B, 0x50, 0x4B, 0x51, 0xD5, - 0xDB, 0xD8, 0xDE, 0x4B, 0xF6, 0xF6, 0xEA, 0xE9, - 0xE8, 0xEA, 0xEB, 0x67, 0x5E, 0xCC, 0xD6, 0xDC, - 0xD5, 0x58, 0xCE, 0xCE, 0x62, 0x50, 0xCC, 0xD3, - 0xD2, 0xCD, 0xCD, 0x4B, 0x64, 0xCE, 0xCE, 0x64, - 0xCC, 0xD3, 0xD2, 0xD2, 0x61, 0x47, 0x5D, 0x5C, - 0xDD, 0xDD, 0xD9, 0xD1, 0x4C, 0x47, 0x49, 0x4A, - 0x4B, 0xD1, 0xD8, 0xE0, 0xDF, 0xDD, 0x5D, 0x4A, - 0x48, 0x52, 0x51, 0x3F, 0xF6, 0xEC, 0xE0, 0xE0, - 0xD3, 0x5E, 0x5F, 0x50, 0x4B, 0x50, 0xCB, 0xCE, - 0x64, 0x45, 0x4C, 0x57, 0x57, 0x58, 0x52, 0xD6, - 0xD3, 0xDE, 0xDF, 0xD1, 0x3E, 0x4B, 0xF6, 0xF6, - 0xEC, 0x66, 0x53, 0x43, 0x56, 0xD1, 0xD9, 0xDE, - 0xD4, 0x5E, 0xCE, 0xCC, 0x5B, 0x2C, 0xD4, 0xD5, - 0xD2, 0xD0, 0x63, 0x5D, 0xCD, 0xD0, 0xCD, 0x5E, - 0xD0, 0xCF, 0xCE, 0xD2, 0x5E, 0x50, 0x60, 0x5D, - 0xDE, 0xDD, 0xDC, 0xD7, 0x5D, 0x45, 0x47, 0x3E, - 0x4B, 0x5E, 0xDE, 0xDF, 0xE0, 0xD8, 0xCF, 0x3E, - 0x45, 0x51, 0x58, 0x42, 0xCB, 0xDA, 0xDE, 0xD8, - 0xD2, 0x61, 0xCC, 0xCF, 0xD6, 0xDA, 0xDA, 0xD5, - 0xD0, 0x50, 0x44, 0x57, 0x57, 0x58, 0x45, 0xD1, - 0xD1, 0xD7, 0xDF, 0xDF, 0xD7, 0xCF, 0x64, 0x60, - 0xCE, 0xCE, 0xCE, 0x63, 0xCF, 0xDA, 0xDE, 0xD9, - 0xCF, 0x63, 0xCD, 0x63, 0x4D, 0x4B, 0xD6, 0xD5, - 0xCE, 0xD3, 0x60, 0xCB, 0xD0, 0xD0, 0x65, 0x47, - 0xD0, 0xCC, 0xCC, 0xD1, 0x59, 0x5D, 0x63, 0x5E, - 0xDD, 0xDD, 0xDE, 0xDC, 0xCB, 0x40, 0x48, 0x45, - 0x3E, 0x3E, 0xD9, 0xDF, 0xE0, 0xDF, 0xDA, 0x51, - 0x4C, 0x48, 0x56, 0x4C, 0x5B, 0xD2, 0xDA, 0xDB, - 0xCB, 0x5F, 0xD0, 0xCC, 0xDC, 0xF0, 0xF3, 0xE0, - 0xDD, 0xCC, 0x41, 0x50, 0x57, 0x57, 0x4B, 0x5D, - 0xD3, 0xD1, 0xDE, 0xDF, 0xDE, 0xD7, 0xD0, 0xD0, - 0xD5, 0xD6, 0xD6, 0xCE, 0xD7, 0xDC, 0xDA, 0xD5, - 0x60, 0x63, 0x64, 0x5E, 0x47, 0x61, 0xD5, 0xD2, - 0xCF, 0xD0, 0x59, 0xCD, 0xD1, 0xCF, 0x61, 0x4D, - 0xCC, 0xCE, 0xCD, 0xD0, 0x52, 0x61, 0x64, 0x60, - 0xDA, 0xDE, 0xDE, 0xDD, 0xD1, 0x4B, 0x4A, 0x45, - 0x3E, 0x41, 0xCD, 0xDE, 0xE0, 0xF1, 0xDE, 0x63, - 0x4A, 0x4A, 0x4A, 0x4B, 0x50, 0xCB, 0xD4, 0xD7, - 0x5E, 0x54, 0x62, 0xD3, 0xD4, 0xF0, 0xF3, 0xF3, - 0xF2, 0xDE, 0x61, 0x40, 0x49, 0x56, 0x4D, 0x3E, - 0x4B, 0xCE, 0xD9, 0xD8, 0xD9, 0xD5, 0xCF, 0xD2, - 0xD6, 0xD6, 0xD1, 0xD1, 0xD7, 0xD5, 0xCF, 0xD0, - 0x54, 0x64, 0x63, 0x56, 0x2C, 0xCB, 0xD1, 0xCC, - 0xD3, 0xCD, 0x54, 0xCF, 0xD1, 0xCE, 0x5E, 0x5C, - 0xCE, 0xCE, 0xCE, 0xCB, 0x4B, 0x63, 0xCC, 0x61, - 0xD4, 0xDC, 0xDE, 0xDE, 0xDA, 0x5D, 0x45, 0x45, - 0x48, 0x3F, 0x52, 0xD9, 0xD8, 0xDF, 0xDF, 0xD2, - 0x52, 0x4B, 0x3E, 0x2E, 0x47, 0x60, 0xCF, 0xD3, - 0x59, 0x48, 0x50, 0x5E, 0xCC, 0xDE, 0xF2, 0xF2, - 0xF3, 0xF3, 0xDD, 0x5D, 0x3E, 0x48, 0x47, 0x47, - 0x58, 0xD1, 0xDA, 0xDA, 0xD5, 0xD1, 0xCD, 0xD2, - 0xD3, 0xCF, 0xD3, 0xD1, 0xCD, 0xD3, 0xD2, 0x5E, - 0x52, 0x64, 0x60, 0x4B, 0x45, 0x61, 0xCD, 0xD3, - 0xD3, 0x64, 0x61, 0xD0, 0xD0, 0x64, 0x45, 0x63, - 0xD0, 0xCE, 0xD0, 0x60, 0x56, 0xCB, 0xCC, 0x62, - 0xCE, 0xDA, 0xDE, 0xD8, 0xDD, 0xCC, 0x45, 0x49, - 0x3E, 0x47, 0x42, 0xD1, 0xDC, 0xD8, 0xD8, 0xD3, - 0x5D, 0x4C, 0x49, 0x3F, 0x47, 0x59, 0xCD, 0xCF, - 0x59, 0x2E, 0x48, 0x47, 0x52, 0x63, 0xF0, 0xF2, - 0xF3, 0xF3, 0xF2, 0xDA, 0x52, 0x4B, 0x52, 0x58, - 0x5E, 0x63, 0xD0, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, - 0xCF, 0x65, 0x61, 0xD6, 0xD6, 0xD6, 0xCB, 0x4B, - 0x61, 0x62, 0x5D, 0x43, 0x4B, 0x61, 0xD0, 0xD4, - 0xD1, 0x61, 0xCE, 0xD2, 0xCD, 0x5E, 0x4A, 0xCE, - 0xD0, 0xCC, 0xD0, 0x59, 0x61, 0xCC, 0xCC, 0x62, - 0xD1, 0xD5, 0xDE, 0xD8, 0xDD, 0xCF, 0x4B, 0x4A, - 0x45, 0x3E, 0x2D, 0xCB, 0xDC, 0xDE, 0xD8, 0xD5, - 0x60, 0x54, 0x51, 0x4C, 0x4D, 0x5C, 0xCC, 0xCE, - 0x5A, 0x2C, 0x50, 0x53, 0x3E, 0x59, 0xD8, 0xF3, - 0xF2, 0xF3, 0xF3, 0xE0, 0x5E, 0x4A, 0x4C, 0x53, - 0x5E, 0x63, 0xCC, 0xCC, 0xCC, 0xCD, 0xCF, 0xD3, - 0x62, 0x53, 0xD6, 0xD6, 0xD6, 0xD6, 0x5B, 0x48, - 0x64, 0x63, 0x59, 0x44, 0x57, 0x63, 0xD2, 0xD3, - 0xD0, 0x5E, 0xD0, 0xD1, 0xCB, 0x58, 0x4C, 0xCF, - 0xCF, 0xCE, 0xCE, 0x57, 0x63, 0xCC, 0xCD, 0x57, + 0xBF, 0x95, 0x90, 0xCB, 0x95, 0xA1, 0x2C, 0x2C, + 0x95, 0x55, 0xCB, 0x90, 0xCB, 0x95, 0x2C, 0x95, + 0xCB, 0x47, 0x94, 0x95, 0xA1, 0xD6, 0xD6, 0x2C, + 0x90, 0x47, 0x70, 0x2C, 0x6D, 0x2A, 0x6D, 0xD6, + 0xA1, 0x2C, 0x55, 0x95, 0x2C, 0x2C, 0x55, 0x55, + 0x95, 0xA1, 0xA1, 0xA1, 0x6D, 0xBF, 0x2A, 0x2A, + 0xBF, 0x83, 0xBF, 0x95, 0x90, 0xCB, 0x95, 0xA1, + 0x2C, 0x2C, 0x95, 0x55, 0xCB, 0x90, 0xCB, 0x95, + 0x2C, 0x95, 0xCB, 0x47, 0x94, 0x95, 0xA1, 0xD6, + 0xD6, 0x2C, 0x90, 0x47, 0x70, 0x2C, 0x6D, 0x2A, + 0x95, 0x47, 0x47, 0x90, 0x2C, 0x2C, 0x2C, 0x95, + 0x55, 0x55, 0xCB, 0x90, 0xCB, 0x55, 0x55, 0xCB, + 0x47, 0xE6, 0x70, 0x95, 0xD6, 0xD6, 0xA1, 0x2C, + 0x55, 0x55, 0x95, 0xD6, 0x6D, 0xD6, 0xA1, 0x2C, + 0x2C, 0x95, 0x55, 0x95, 0x95, 0x95, 0x2C, 0x2C, + 0xA1, 0xA1, 0x2C, 0x2C, 0xA1, 0xD6, 0xD6, 0xD6, + 0xD6, 0xD6, 0x95, 0x47, 0x47, 0x90, 0x2C, 0x2C, + 0x2C, 0x95, 0x55, 0x55, 0xCB, 0x90, 0xCB, 0x55, + 0x55, 0xCB, 0x47, 0xE6, 0x70, 0x95, 0xD6, 0xD6, + 0xA1, 0x2C, 0x55, 0x55, 0x95, 0xD6, 0x6D, 0xD6, + 0x90, 0x47, 0x47, 0x70, 0x2C, 0xA1, 0x2C, 0x95, + 0x55, 0x55, 0x90, 0xCB, 0x55, 0x55, 0x55, 0x70, + 0x94, 0x70, 0x95, 0xA1, 0xD6, 0xD6, 0xA1, 0x2C, + 0x95, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C, + 0x95, 0x55, 0xCB, 0x95, 0xD6, 0xA1, 0x2C, 0x95, + 0xA1, 0xD6, 0xD6, 0xA1, 0xA1, 0xD6, 0xA1, 0xA1, + 0xA1, 0x2C, 0x90, 0x47, 0x47, 0x70, 0x2C, 0xA1, + 0x2C, 0x95, 0x55, 0x55, 0x90, 0xCB, 0x55, 0x55, + 0x55, 0x70, 0x94, 0x70, 0x95, 0xA1, 0xD6, 0xD6, + 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0xD6, 0xD6, 0xA1, + 0x94, 0xA0, 0x47, 0x55, 0x2C, 0xD6, 0xA1, 0x95, + 0x55, 0x55, 0xCB, 0xCB, 0x55, 0x55, 0xCB, 0xCB, + 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6, 0xA1, 0x2C, + 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x95, + 0x55, 0x55, 0x2C, 0x3F, 0x80, 0x20, 0x88, 0x88, + 0x88, 0x20, 0x88, 0xB1, 0x2C, 0xA1, 0x2C, 0x2C, + 0x95, 0xCB, 0x94, 0xA0, 0x47, 0x55, 0x2C, 0xD6, + 0xA1, 0x95, 0x55, 0x55, 0xCB, 0xCB, 0x55, 0x55, + 0xCB, 0xCB, 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6, + 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, + 0x94, 0x94, 0x70, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, + 0x55, 0x55, 0xCB, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x95, 0x2C, 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x95, + 0x55, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, + 0x2C, 0x94, 0x80, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x88, 0x92, 0xA1, 0x95, + 0x55, 0x90, 0x94, 0x94, 0x70, 0x2C, 0xA1, 0xD6, + 0xA1, 0x2C, 0x55, 0x55, 0xCB, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x95, 0x2C, 0xD6, 0xD6, 0xD6, 0xA1, + 0x2C, 0x95, 0x55, 0x55, 0x55, 0x95, 0x95, 0x95, + 0x70, 0x70, 0x55, 0x2C, 0xD6, 0xD6, 0xA1, 0x95, + 0x55, 0x90, 0xCB, 0xCB, 0x55, 0x55, 0x2C, 0x2C, + 0xA1, 0xD6, 0xA1, 0xA1, 0x2C, 0x2C, 0x95, 0x55, + 0x55, 0x55, 0x95, 0x95, 0x2C, 0x95, 0x95, 0xD6, + 0xB1, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x80, 0x34, 0x88, 0x43, 0x47, + 0x95, 0xCB, 0x70, 0x70, 0x55, 0x2C, 0xD6, 0xD6, + 0xA1, 0x95, 0x55, 0x90, 0xCB, 0xCB, 0x55, 0x55, + 0x2C, 0x2C, 0xA1, 0xD6, 0xA1, 0xA1, 0xA1, 0x2C, + 0x55, 0x55, 0x55, 0x55, 0x2C, 0x95, 0x2C, 0x2C, + 0x55, 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x55, + 0x90, 0x70, 0x90, 0x55, 0x95, 0x95, 0xA1, 0xA1, + 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x95, 0x95, 0x95, + 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xD5, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x88, 0x7D, 0x3F, 0xB1, 0x80, 0x20, + 0x99, 0x2C, 0x55, 0x55, 0x95, 0x2C, 0xA1, 0xA1, + 0x2C, 0x55, 0x90, 0x70, 0x90, 0x55, 0x95, 0x95, + 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, 0x2C, + 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, + 0x95, 0x90, 0x55, 0x2C, 0xA1, 0xA1, 0x95, 0xCB, + 0x70, 0x94, 0x90, 0x55, 0x95, 0xA1, 0xA1, 0xA1, + 0x2C, 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x95, + 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0xA1, 0x88, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0xB1, 0x47, 0xD5, 0x7D, 0x43, + 0x20, 0x70, 0x95, 0x90, 0x55, 0x2C, 0xA1, 0xA1, + 0x95, 0xCB, 0x70, 0x94, 0x90, 0x55, 0x95, 0xA1, + 0xA1, 0xA1, 0x2C, 0x95, 0x2C, 0x2C, 0x95, 0x95, + 0x95, 0x95, 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95, + 0x95, 0x90, 0x55, 0x2C, 0xD6, 0xD6, 0x2C, 0x90, + 0x94, 0x70, 0x55, 0x95, 0x2C, 0xD6, 0xD6, 0xA1, + 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x95, 0x55, 0x55, + 0xCB, 0xCB, 0xCB, 0x55, 0xCB, 0x55, 0x47, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x88, 0xB1, 0x3F, 0x92, 0x2B, 0x80, + 0x20, 0x80, 0xD6, 0x70, 0x55, 0x2C, 0xD6, 0xD6, + 0x2C, 0x90, 0x94, 0x70, 0x55, 0x95, 0x2C, 0xD6, + 0xD6, 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x95, + 0x95, 0x55, 0x90, 0xCB, 0xCB, 0xCB, 0xCB, 0x55, + 0xD6, 0x55, 0x95, 0xA1, 0xD6, 0xA1, 0x55, 0x70, + 0x94, 0x55, 0x95, 0xA1, 0xA1, 0xA1, 0xA1, 0x95, + 0x55, 0x55, 0x55, 0x95, 0x55, 0x55, 0xCB, 0x90, + 0x70, 0x90, 0xCB, 0x55, 0x55, 0xA1, 0xD8, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x88, 0xD8, 0xE1, 0x88, 0x20, 0x20, + 0x88, 0x88, 0xE6, 0x55, 0x2C, 0xA1, 0xD6, 0xA1, + 0x55, 0x70, 0x94, 0x55, 0x95, 0xA1, 0xA1, 0xA1, + 0xA1, 0x95, 0x55, 0x55, 0x95, 0x95, 0x55, 0x55, + 0x90, 0x90, 0x90, 0x90, 0xCB, 0x55, 0x55, 0x55, + 0xD6, 0x2C, 0xA1, 0xD6, 0xD6, 0xA1, 0xCB, 0x70, + 0x70, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0x55, + 0xCB, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x95, 0x2C, 0x95, 0x2C, 0xD6, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x80, 0xD6, 0xA1, 0xD6, 0xD6, 0xA1, + 0xCB, 0x70, 0x70, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, + 0x2C, 0x55, 0xCB, 0xCB, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, + 0xD6, 0xA1, 0xA1, 0xA1, 0xA1, 0x55, 0x70, 0x94, + 0xCB, 0x95, 0xA1, 0xA1, 0x2C, 0x95, 0xCB, 0x55, + 0x90, 0xCB, 0x55, 0x55, 0x55, 0x55, 0x95, 0xA1, + 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x95, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x88, 0x95, 0xA1, 0xA1, 0xA1, 0x55, + 0x70, 0x94, 0xCB, 0x95, 0xA1, 0xA1, 0x2C, 0x95, + 0xCB, 0xCB, 0x90, 0xCB, 0x55, 0x55, 0x55, 0x55, + 0x95, 0x2C, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, + 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0xCB, 0x70, 0x70, + 0x95, 0x2C, 0x2C, 0x95, 0xCB, 0x70, 0x90, 0xCB, + 0xCB, 0x55, 0x55, 0xCB, 0x55, 0x55, 0x2C, 0xD6, + 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x70, 0x20, 0x20, + 0x88, 0x43, 0xD8, 0x43, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x88, 0x88, 0x43, 0x2B, 0xD8, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3F, 0x2C, 0x95, 0x95, 0xCB, + 0x70, 0x70, 0x95, 0x2C, 0x2C, 0x95, 0xCB, 0x90, + 0x90, 0xCB, 0x55, 0xCB, 0x55, 0xCB, 0x55, 0x95, + 0x2C, 0xD6, 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x2C, + 0xA1, 0x95, 0x95, 0x55, 0xCB, 0x70, 0x90, 0x55, + 0x2C, 0x2C, 0x2C, 0x55, 0x70, 0x70, 0x55, 0x95, + 0x95, 0xCB, 0x90, 0x90, 0x90, 0x95, 0x2C, 0xA1, + 0xD6, 0xD6, 0x2C, 0x2C, 0x95, 0x70, 0x20, 0x20, + 0x80, 0x2B, 0x34, 0x2B, 0x88, 0x20, 0x20, 0x20, + 0x88, 0xB1, 0x28, 0x28, 0x2B, 0x7D, 0x80, 0x20, + 0x20, 0x20, 0x20, 0x92, 0x95, 0x55, 0xCB, 0x70, + 0x90, 0x55, 0x2C, 0x2C, 0x2C, 0x55, 0x70, 0x70, + 0x55, 0x95, 0x55, 0x55, 0x90, 0x90, 0x90, 0x55, + 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, 0x95, + 0xA1, 0x95, 0x55, 0xCB, 0x90, 0x70, 0xCB, 0x95, + 0xA1, 0x95, 0x95, 0xCB, 0x90, 0xCB, 0x95, 0x2C, + 0x95, 0x70, 0x70, 0x90, 0x55, 0x2C, 0xA1, 0xA1, + 0x2C, 0x2C, 0x55, 0xCB, 0x55, 0x90, 0x20, 0x34, + 0x90, 0x6D, 0x70, 0xD8, 0x43, 0x20, 0x20, 0x88, + 0x3F, 0x55, 0xA1, 0x2A, 0xD6, 0x7D, 0x43, 0x20, + 0x20, 0x20, 0x88, 0x7D, 0x55, 0xCB, 0x90, 0x70, + 0xCB, 0x95, 0xA1, 0x95, 0x95, 0xCB, 0x70, 0xCB, + 0x95, 0xA1, 0x95, 0x70, 0x70, 0xCB, 0x55, 0x2C, + 0xA1, 0xA1, 0xA1, 0x95, 0x55, 0x55, 0x55, 0x95, + 0x2C, 0x55, 0x90, 0x70, 0x94, 0x90, 0x95, 0x2C, + 0x2C, 0x95, 0xCB, 0x90, 0x55, 0x95, 0xA1, 0xA1, + 0x95, 0x90, 0x90, 0x95, 0xA1, 0xD6, 0xD6, 0x6D, + 0xA1, 0x95, 0x55, 0xCB, 0x55, 0xCB, 0x20, 0x99, + 0xBF, 0xA3, 0xA3, 0x90, 0x20, 0x20, 0x20, 0x92, + 0x83, 0x6B, 0x6B, 0x6B, 0xA3, 0x70, 0x88, 0x20, + 0x20, 0x20, 0x20, 0x2B, 0x90, 0x70, 0x94, 0x90, + 0x95, 0x2C, 0x2C, 0x95, 0xCB, 0x90, 0x55, 0x95, + 0xA1, 0x2C, 0x55, 0x90, 0x90, 0x95, 0xA1, 0xD6, + 0xD6, 0x6D, 0xA1, 0x95, 0x55, 0xCB, 0x55, 0x55, + 0x2C, 0x55, 0x70, 0x70, 0x94, 0x90, 0x95, 0x2C, + 0x2C, 0x55, 0xCB, 0xCB, 0x95, 0x2C, 0x2C, 0x2C, + 0x55, 0x55, 0x95, 0xA1, 0x6D, 0xBF, 0x6D, 0xD6, + 0x95, 0x55, 0x90, 0xCB, 0x55, 0x95, 0x88, 0x95, + 0x2C, 0x3F, 0x6D, 0x6B, 0x34, 0x20, 0x20, 0x47, + 0x65, 0xD6, 0xE1, 0x3F, 0x2A, 0x6B, 0x2B, 0x20, + 0x20, 0x20, 0x20, 0x43, 0x70, 0x70, 0x94, 0x90, + 0x95, 0x2C, 0x2C, 0x55, 0x55, 0x55, 0x95, 0x2C, + 0xA1, 0x2C, 0x55, 0xCB, 0x95, 0xA1, 0x6D, 0xBF, + 0x6D, 0xD6, 0x2C, 0x55, 0x90, 0xCB, 0x95, 0x95, + 0x95, 0x55, 0x70, 0x94, 0x70, 0x55, 0x2C, 0xA1, + 0x2C, 0x55, 0xCB, 0x55, 0x2C, 0x95, 0x2C, 0x95, + 0x95, 0x95, 0xA1, 0x6D, 0xBF, 0x2A, 0xD6, 0x95, + 0x70, 0x94, 0x94, 0x70, 0x55, 0x55, 0x20, 0xBF, + 0xC9, 0xB1, 0x99, 0x42, 0xB1, 0x61, 0x7D, 0x94, + 0x65, 0xB1, 0x88, 0x99, 0xD5, 0xE5, 0x7F, 0x20, + 0x20, 0x20, 0x20, 0x43, 0x70, 0x94, 0x70, 0x55, + 0x2C, 0xA1, 0x2C, 0x55, 0x90, 0x55, 0x2C, 0x95, + 0x2C, 0x95, 0x95, 0x2C, 0xA1, 0x6D, 0xBF, 0xBF, + 0xD6, 0x55, 0x70, 0x94, 0x94, 0x70, 0xCB, 0x55, + 0x55, 0xCB, 0x70, 0x94, 0x70, 0x95, 0xA1, 0xA1, + 0x95, 0x55, 0x55, 0x95, 0x2C, 0x95, 0x95, 0x95, + 0x95, 0xA1, 0x6D, 0x2A, 0x2A, 0xD6, 0x55, 0x94, + 0xE6, 0xE6, 0x47, 0x70, 0x55, 0x95, 0x20, 0x2A, + 0xD8, 0x43, 0xC9, 0x83, 0x98, 0x79, 0x34, 0x9F, + 0x6B, 0x43, 0x20, 0x88, 0x2B, 0x65, 0xA0, 0x20, + 0x20, 0x20, 0x20, 0xE1, 0x70, 0x94, 0x70, 0x95, + 0xA1, 0xA1, 0x95, 0x55, 0x55, 0x95, 0x2C, 0x95, + 0x95, 0x95, 0x95, 0xA1, 0x6D, 0xBF, 0x2A, 0xD6, + 0x55, 0x94, 0xE6, 0xE6, 0x47, 0x70, 0x55, 0x55, + 0x94, 0x70, 0x94, 0x47, 0x70, 0x95, 0x2C, 0x2C, + 0x95, 0xCB, 0x95, 0x2C, 0x2C, 0xA1, 0x2C, 0x2C, + 0xA1, 0xD6, 0x6D, 0x6D, 0xA1, 0xCB, 0x47, 0x28, + 0xE6, 0x47, 0x70, 0x55, 0x95, 0xA1, 0x20, 0x2C, + 0x7F, 0x88, 0xF0, 0xC6, 0x25, 0x5E, 0xCF, 0x2F, + 0xE7, 0x9A, 0x20, 0x88, 0x99, 0x65, 0x3F, 0x20, + 0x20, 0x20, 0x20, 0x34, 0x94, 0x47, 0x70, 0x95, + 0xA1, 0x2C, 0x55, 0xCB, 0x95, 0x2C, 0x2C, 0xA1, + 0x2C, 0x2C, 0xA1, 0xD6, 0x6D, 0x6D, 0xA1, 0xCB, + 0x94, 0x28, 0xA0, 0x47, 0x70, 0x55, 0x95, 0x95, + 0x47, 0x70, 0x90, 0x94, 0x70, 0x95, 0xA1, 0x2C, + 0x55, 0x55, 0x2C, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, + 0xA1, 0x6D, 0x2A, 0xD6, 0x55, 0x47, 0x28, 0x28, + 0x47, 0x70, 0x55, 0x95, 0x2C, 0xA1, 0x20, 0x28, + 0xEC, 0x86, 0xBE, 0x48, 0x3E, 0x3E, 0x3A, 0x25, + 0x4E, 0xAE, 0x93, 0xD7, 0xEC, 0xD1, 0x34, 0x20, + 0x20, 0x20, 0x20, 0x43, 0x55, 0x94, 0x70, 0x95, + 0xA1, 0xA1, 0x55, 0xCB, 0x2C, 0xA1, 0xA1, 0xA1, + 0xA1, 0x2C, 0xA1, 0x6D, 0x6D, 0xD6, 0x55, 0x47, + 0x28, 0x28, 0x47, 0x70, 0x55, 0x95, 0x2C, 0x2C, + 0x95, 0x95, 0x55, 0x90, 0xCB, 0x2C, 0xA1, 0xA1, + 0x55, 0x55, 0x2C, 0xD6, 0xD6, 0xA1, 0xA1, 0x2C, + 0xD6, 0x6D, 0x6D, 0xA1, 0x70, 0x28, 0xD5, 0xE6, + 0x70, 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0x20, 0xE1, + 0x26, 0x84, 0x76, 0x73, 0x9C, 0x22, 0x4E, 0x35, + 0x8C, 0x7A, 0x4E, 0xDC, 0x8E, 0x7E, 0x3D, 0x88, + 0x20, 0x20, 0x20, 0x88, 0x2C, 0x90, 0x90, 0x95, + 0xA1, 0x2C, 0x55, 0x55, 0x2C, 0xD6, 0xD6, 0xD6, + 0x2C, 0x2C, 0xD6, 0x2A, 0x6D, 0x2C, 0x70, 0x28, + 0xD5, 0xE6, 0x70, 0x55, 0x95, 0xA1, 0x2C, 0xA1, + 0xBF, 0xA1, 0x95, 0xCB, 0xCB, 0x2C, 0xA1, 0xA1, + 0x95, 0x95, 0xA1, 0xD6, 0xD6, 0xA1, 0x2C, 0x95, + 0xD6, 0x6D, 0xD6, 0x95, 0x94, 0x28, 0xE6, 0x70, + 0x55, 0x95, 0xA1, 0xA1, 0xA1, 0xD6, 0x20, 0x57, + 0xE4, 0xDF, 0x50, 0x3E, 0x22, 0x4E, 0x35, 0x8C, + 0x8C, 0x52, 0x52, 0x7A, 0x4E, 0x58, 0xD7, 0x20, + 0x20, 0x20, 0x20, 0x88, 0x2C, 0xCB, 0x55, 0x2C, + 0xA1, 0xA1, 0x95, 0x95, 0xA1, 0xD6, 0xD6, 0xA1, + 0x2C, 0x95, 0xA1, 0x6D, 0x6D, 0x95, 0x47, 0xA0, + 0xE6, 0x70, 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0xA1, + 0xD2, 0x95, 0x55, 0x90, 0x55, 0x2C, 0xD6, 0xA1, + 0x95, 0x95, 0xA1, 0xD6, 0xD6, 0x2C, 0x95, 0x2C, + 0xA1, 0x6D, 0xA1, 0x55, 0x94, 0x47, 0x94, 0xCB, + 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6, 0x59, 0xC8, + 0xE3, 0x76, 0x2D, 0x3E, 0x22, 0x4E, 0x8C, 0x35, + 0x52, 0x52, 0xEE, 0x3A, 0x4D, 0xED, 0x24, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x28, 0xCB, 0x55, 0x2C, + 0xD6, 0xA1, 0x95, 0x95, 0xA1, 0xD6, 0xA1, 0x2C, + 0x95, 0x2C, 0xD6, 0x6D, 0xA1, 0x55, 0x94, 0xE6, + 0x70, 0xCB, 0x55, 0x95, 0xA1, 0xD6, 0xD6, 0xA1, + 0xD0, 0x94, 0x94, 0x90, 0x55, 0x2C, 0xA1, 0xA1, + 0x55, 0x95, 0xA1, 0xA1, 0xA1, 0x2C, 0x95, 0x2C, + 0xA1, 0xD6, 0x2C, 0x70, 0x94, 0x94, 0x94, 0x94, + 0x70, 0x55, 0xA1, 0xD6, 0xA1, 0xD6, 0x88, 0x77, + 0x38, 0xC4, 0x3E, 0x69, 0x4E, 0x35, 0x8C, 0xEE, + 0x35, 0x89, 0x30, 0x30, 0x4A, 0x48, 0x3C, 0x20, + 0x20, 0x88, 0x20, 0x20, 0xD8, 0x2C, 0x55, 0x2C, + 0xD6, 0xA1, 0x95, 0x95, 0x2C, 0xD6, 0xA1, 0x2C, + 0x95, 0x2C, 0xA1, 0xD6, 0x2C, 0x90, 0x94, 0x47, + 0x94, 0x94, 0x70, 0x55, 0x2C, 0xD6, 0xA1, 0x95, + 0x95, 0x28, 0x47, 0x90, 0x95, 0x2C, 0xA1, 0x2C, + 0x95, 0x55, 0x95, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C, + 0xA1, 0xA1, 0x55, 0x70, 0x94, 0x47, 0x94, 0x94, + 0x70, 0x2C, 0xD6, 0xD6, 0x2C, 0xA1, 0x43, 0x98, + 0x54, 0x48, 0x3E, 0x22, 0x35, 0xEE, 0xEE, 0x9C, + 0x4D, 0x45, 0x75, 0x4A, 0xDF, 0x7B, 0x3D, 0x20, + 0xD8, 0x28, 0x2B, 0x88, 0x20, 0x95, 0x95, 0x2C, + 0xA1, 0x2C, 0x55, 0x55, 0x2C, 0xA1, 0xD6, 0xA1, + 0x2C, 0x95, 0xA1, 0x2C, 0x55, 0x70, 0x94, 0x94, + 0x94, 0x94, 0x70, 0x95, 0xD6, 0xD6, 0x2C, 0x95, + 0x70, 0x28, 0x47, 0x55, 0x95, 0x2C, 0x2C, 0x2C, + 0x95, 0x95, 0x95, 0xA1, 0xA1, 0xA1, 0x95, 0x55, + 0x95, 0x95, 0x55, 0x70, 0x70, 0x70, 0x94, 0x70, + 0x55, 0xD6, 0x6D, 0xD6, 0x95, 0x2C, 0x20, 0x43, + 0xBB, 0xC8, 0x36, 0x30, 0x30, 0x38, 0x45, 0x6E, + 0xE3, 0x75, 0x78, 0x37, 0xBD, 0xD9, 0x3F, 0x20, + 0x88, 0xD5, 0x70, 0xB1, 0x88, 0xA0, 0x95, 0x2C, + 0x2C, 0xA1, 0x95, 0x55, 0x95, 0xA1, 0xA1, 0xA1, + 0x2C, 0x55, 0x95, 0x2C, 0x55, 0x70, 0x70, 0x70, + 0x94, 0x70, 0x55, 0xD6, 0x6D, 0x6D, 0x95, 0x55, + 0x94, 0x47, 0x70, 0x95, 0x2C, 0x2C, 0x2C, 0xA1, + 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x55, + 0x55, 0x95, 0x95, 0x55, 0x55, 0x55, 0x55, 0x95, + 0xA1, 0x6D, 0x4B, 0xD6, 0x55, 0xD6, 0x20, 0xD8, + 0xD6, 0x67, 0xDA, 0x4D, 0xED, 0x62, 0x78, 0x78, + 0x23, 0x84, 0x67, 0xF5, 0x4B, 0xBF, 0x90, 0x88, + 0x88, 0x2B, 0x47, 0x99, 0x20, 0x43, 0xD6, 0x2C, + 0x2C, 0xA1, 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, + 0x95, 0x95, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x95, 0xD6, 0x6D, 0xBF, 0xD6, 0x55, 0xCB, + 0x55, 0x55, 0x55, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1, + 0x2C, 0x2C, 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0x95, + 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1, + 0x6D, 0x2A, 0x2A, 0xA1, 0x55, 0x55, 0x20, 0xD8, + 0x6D, 0xAB, 0x96, 0x7E, 0x64, 0x53, 0x36, 0x36, + 0xC6, 0x63, 0x6D, 0xD0, 0x6B, 0xE5, 0xA3, 0x7D, + 0x20, 0x88, 0x80, 0x88, 0x20, 0x20, 0xC9, 0xA1, + 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0xA1, 0xA1, 0xA1, + 0x95, 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, + 0x2C, 0xA1, 0x6D, 0xBF, 0x6D, 0xA1, 0x55, 0x55, + 0x95, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0xA1, + 0xA1, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x95, + 0x55, 0x55, 0x2C, 0x2C, 0xA1, 0xA1, 0xD6, 0xD6, + 0x6D, 0x6D, 0xA1, 0x55, 0x2C, 0xD8, 0x20, 0xB1, + 0xA3, 0x4B, 0x6D, 0xD9, 0xA7, 0x6C, 0xAF, 0xB2, + 0x6D, 0x2A, 0x83, 0x42, 0xE5, 0xE5, 0x65, 0x2C, + 0x20, 0x20, 0x88, 0x20, 0x20, 0x20, 0x88, 0x95, + 0x2C, 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x2C, + 0x2C, 0x95, 0x55, 0x55, 0x2C, 0x2C, 0xA1, 0xA1, + 0xD6, 0xD6, 0x6D, 0x6D, 0xA1, 0x55, 0xCB, 0x55, + 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x95, 0x2C, + 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x95, + 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0xA1, 0xD6, 0xA1, + 0xA1, 0x2C, 0x55, 0x55, 0x28, 0x88, 0x43, 0x2A, + 0xE5, 0xA3, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, + 0xBF, 0xA3, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, 0x65, + 0xB1, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xD8, + 0xD6, 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x2C, + 0x95, 0x95, 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0xA1, + 0xA1, 0xA1, 0xA1, 0x2C, 0x95, 0x90, 0x90, 0x55, + 0x90, 0xCB, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95, + 0x2C, 0x2C, 0x95, 0x55, 0x95, 0x95, 0x95, 0x55, + 0x55, 0xCB, 0x55, 0x2C, 0x95, 0x95, 0x95, 0x95, + 0x55, 0x90, 0x90, 0x90, 0xE1, 0x43, 0x28, 0xE5, + 0xE5, 0x65, 0xD0, 0x6D, 0x6D, 0x6D, 0x2A, 0xD2, + 0x42, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xD6, 0x20, 0x20, 0x20, 0x20, 0x20, 0x88, 0x88, + 0xD5, 0x2C, 0x2C, 0x2C, 0x95, 0x55, 0x95, 0x95, + 0x95, 0x55, 0x55, 0xCB, 0x55, 0x95, 0x2C, 0x95, + 0x95, 0x95, 0x55, 0x90, 0x70, 0x70, 0x70, 0x90, + 0x70, 0x70, 0xCB, 0x55, 0x55, 0x95, 0x95, 0x95, + 0x2C, 0x95, 0x95, 0x55, 0x55, 0x55, 0x55, 0xCB, + 0x70, 0x70, 0x70, 0xCB, 0x90, 0x90, 0x70, 0x94, + 0x94, 0x94, 0x2C, 0x80, 0x20, 0xE1, 0xA3, 0xE5, + 0xE5, 0xE5, 0x42, 0xEC, 0xD0, 0x83, 0xA3, 0x65, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0x65, 0x7D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x88, 0x2C, 0x95, 0x95, 0x95, 0x55, 0x55, 0x55, + 0x55, 0xCB, 0x70, 0x70, 0x90, 0x90, 0x90, 0x90, + 0x70, 0x94, 0x94, 0x94, 0x70, 0x70, 0x70, 0x70, + 0x70, 0x55, 0x55, 0x55, 0x95, 0x95, 0x95, 0x95, + 0x2C, 0x2C, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x90, 0x70, 0x90, 0x55, 0x55, 0xCB, 0x70, 0x94, + 0x94, 0x95, 0xD8, 0x20, 0x88, 0x70, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0x47, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0xE1, 0x6D, 0x2C, 0x95, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x90, 0x70, 0x70, 0x55, 0x55, 0xCB, + 0x70, 0x94, 0x94, 0x94, 0x70, 0x90, 0x70, 0x94, + 0x55, 0x2C, 0x2C, 0x2C, 0x95, 0x2C, 0x95, 0x95, + 0x2C, 0x2C, 0x2C, 0x55, 0x55, 0x55, 0x55, 0x55, + 0xCB, 0xCB, 0x95, 0x2C, 0x2C, 0x95, 0x55, 0x90, + 0x55, 0x99, 0x20, 0x20, 0xE1, 0xA3, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xD6, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2B, 0x6D, 0x95, 0x95, 0x55, 0x55, + 0x55, 0x55, 0xCB, 0x55, 0x95, 0x2C, 0x2C, 0x95, + 0x55, 0x90, 0xCB, 0xCB, 0xCB, 0xCB, 0x90, 0x70, + 0x2C, 0xD6, 0xD6, 0x2C, 0x2C, 0x95, 0x95, 0x95, + 0x95, 0x95, 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95, + 0x95, 0x95, 0x2C, 0xA1, 0x2C, 0x95, 0x55, 0x95, + 0xE6, 0x88, 0x20, 0x20, 0x3F, 0xA3, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0x42, 0xA3, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x88, 0x2B, 0xD6, 0x95, 0x95, 0x95, + 0x95, 0x95, 0x95, 0x95, 0x2C, 0xA1, 0x2C, 0x95, + 0x55, 0x55, 0x95, 0x95, 0x95, 0x55, 0x55, 0x55, + 0xA1, 0xD6, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, 0x2C, + 0x2C, 0x2C, 0x95, 0x2C, 0x95, 0x95, 0x55, 0x95, + 0x95, 0x2C, 0x2C, 0x2C, 0x95, 0xCB, 0xCB, 0x94, + 0x20, 0x20, 0x20, 0x20, 0xE6, 0x83, 0x65, 0xE5, + 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0x6B, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0x6B, 0xA3, 0xD2, + 0xD2, 0x6B, 0xC9, 0x20, 0x20, 0x88, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x88, 0x8A, 0xA1, 0x95, 0x95, + 0x95, 0x55, 0x95, 0x2C, 0xA1, 0x2C, 0x95, 0xCB, + 0xCB, 0x55, 0x95, 0x95, 0x95, 0x55, 0x55, 0x95, + 0x6D, 0x6D, 0x6D, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, + 0x2C, 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, + 0x95, 0x95, 0x95, 0x55, 0x70, 0x70, 0x2C, 0x80, + 0x88, 0x20, 0x20, 0x80, 0x94, 0xD6, 0x32, 0x6B, + 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xA3, 0xD2, 0xD0, 0xBF, 0x2A, + 0x2A, 0xD0, 0x6D, 0x34, 0x20, 0xE1, 0x88, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x88, 0xA1, 0x95, 0x95, + 0x95, 0x95, 0x95, 0x95, 0x95, 0x55, 0x70, 0x70, + 0x70, 0x90, 0xCB, 0xCB, 0xCB, 0x95, 0x95, 0x2C, + 0xD0, 0x6D, 0xD6, 0xD6, 0xA1, 0xA1, 0xA1, 0x2C, + 0x2C, 0x2C, 0x2C, 0x95, 0x55, 0x55, 0x55, 0x95, + 0x95, 0x2C, 0x95, 0x55, 0xCB, 0xCB, 0x95, 0x88, + 0x20, 0x20, 0x88, 0xD8, 0x2C, 0xD1, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0x65, 0x65, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x42, 0x6B, 0xEC, + 0xBF, 0x2A, 0xEC, 0x95, 0x20, 0x34, 0x2B, 0xE1, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x99, 0x95, 0x55, + 0x55, 0x55, 0x95, 0x95, 0x95, 0x55, 0xCB, 0xCB, + 0x55, 0x55, 0xCB, 0xCB, 0xCB, 0x55, 0x95, 0x95, + 0x32, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, + 0xA1, 0x95, 0x95, 0x95, 0x55, 0xCB, 0xCB, 0x55, + 0x95, 0x95, 0x95, 0x95, 0x95, 0x55, 0x99, 0x20, + 0xE1, 0xE1, 0x43, 0x47, 0x6B, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0x42, 0xEC, 0xBF, 0xA3, 0x8A, 0x20, 0x88, 0xD8, + 0x2B, 0x20, 0x20, 0x20, 0x88, 0x88, 0x2C, 0xCB, + 0xCB, 0x95, 0x95, 0x2C, 0x95, 0x95, 0x55, 0x95, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x95, 0x55, 0x95, + 0x6D, 0x55, 0x55, 0x55, 0x95, 0x95, 0x2C, 0x95, + 0x2C, 0x95, 0x95, 0x55, 0x55, 0x55, 0x55, 0x95, + 0x95, 0x95, 0x95, 0x95, 0x95, 0xA1, 0x34, 0x20, + 0xC9, 0x20, 0xE1, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xA3, 0x83, 0x6D, 0x20, 0x88, 0x88, + 0x2B, 0x34, 0x20, 0x20, 0x20, 0x88, 0xD5, 0x55, + 0x55, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, + 0x95, 0x95, 0x95, 0x95, 0x55, 0x55, 0x95, 0x95, + 0x2C, 0x55, 0xCB, 0x55, 0xCB, 0x55, 0x55, 0x95, + 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, + 0x2C, 0x95, 0x95, 0x55, 0x95, 0x2C, 0x20, 0xD8, + 0xE1, 0x20, 0x70, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0x65, 0xA3, 0x92, 0x43, 0x7D, + 0xD8, 0xC9, 0x88, 0x20, 0x20, 0x20, 0x43, 0xD6, + 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x55, 0x95, 0x2C, + 0x95, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x95, 0x2C, + 0xA1, 0x55, 0x55, 0x55, 0x55, 0x95, 0x95, 0x55, + 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0xA1, 0x2C, + 0xA1, 0x2C, 0x2C, 0x95, 0x2C, 0x99, 0x88, 0xB1, + 0x20, 0xD8, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x34, 0x8A, + 0xC9, 0x34, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x90, + 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, 0x95, 0x95, 0x2C, + 0x2C, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, + 0xD6, 0x2C, 0x55, 0x55, 0x95, 0x2C, 0x2C, 0x2C, + 0x55, 0xCB, 0x55, 0x2C, 0x2C, 0xA1, 0x2C, 0xA1, + 0xA1, 0xA1, 0x2C, 0x2C, 0x6D, 0x43, 0xD8, 0x80, + 0x88, 0xCB, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x32, 0x80, 0xE1, + 0x80, 0x20, 0xB1, 0x20, 0x20, 0x20, 0x20, 0xC9, + 0xD6, 0xA1, 0xA1, 0xA1, 0x2C, 0xA1, 0x2C, 0x2C, + 0x2C, 0x55, 0x55, 0x55, 0x95, 0x95, 0x95, 0x55, + 0xD6, 0x95, 0x95, 0x95, 0x2C, 0xA1, 0x2C, 0x2C, + 0x95, 0x95, 0x95, 0x95, 0x95, 0x2C, 0x95, 0x2C, + 0x2C, 0x2C, 0x2C, 0x95, 0xCB, 0x20, 0xC9, 0x20, + 0xE1, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xD8, 0x20, + 0x20, 0x20, 0x2B, 0x43, 0x20, 0x20, 0x20, 0x88, + 0xD6, 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x55, + 0x95, 0x55, 0x55, 0xCB, 0x55, 0xCB, 0xCB, 0x55, + 0x2C, 0x55, 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0x95, + 0x55, 0x95, 0x55, 0x95, 0x95, 0x95, 0x95, 0x95, + 0x55, 0xCB, 0x70, 0xCB, 0xC9, 0x80, 0x2B, 0x20, + 0xA0, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x92, 0x20, + 0x20, 0x20, 0xE1, 0xD8, 0x20, 0x20, 0x20, 0x20, + 0x95, 0x95, 0x55, 0xCB, 0x90, 0x90, 0x70, 0x90, + 0x90, 0x90, 0xCB, 0xCB, 0xCB, 0xCB, 0x55, 0x95, + 0x95, 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, + 0x95, 0x95, 0x55, 0x55, 0x55, 0x95, 0x95, 0x55, + 0x90, 0x47, 0xA0, 0x55, 0x20, 0x2B, 0x43, 0x88, + 0x6D, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x28, 0x20, + 0x20, 0x20, 0xE1, 0xE1, 0x20, 0x20, 0x20, 0x20, + 0x28, 0x55, 0x90, 0x47, 0xA0, 0x47, 0x94, 0x70, + 0x55, 0x95, 0x95, 0x55, 0xCB, 0x55, 0x55, 0x2C, + 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, + 0x95, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, 0x55, + 0x94, 0xE6, 0x70, 0x2B, 0x88, 0x2B, 0x88, 0xE1, + 0x65, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x47, 0x20, + 0x20, 0x20, 0xE1, 0x34, 0x20, 0x20, 0x20, 0x20, + 0xB1, 0x95, 0x94, 0xE6, 0xA0, 0x47, 0x70, 0x55, + 0x2C, 0xA1, 0x2C, 0x55, 0x90, 0xCB, 0x2C, 0xD6, + 0x6D, 0xA1, 0x2C, 0x95, 0x95, 0xA1, 0x2C, 0xA1, + 0x2C, 0x2C, 0x95, 0x95, 0x95, 0x95, 0x95, 0x55, + 0x70, 0xE6, 0x70, 0x20, 0x20, 0x7D, 0x20, 0x8A, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0x65, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x94, 0x20, + 0x20, 0x20, 0xD8, 0x88, 0x20, 0x20, 0x20, 0x20, + 0xD8, 0x2C, 0x94, 0x47, 0x47, 0x90, 0x95, 0x95, + 0xA1, 0x6D, 0xA1, 0x90, 0x94, 0x55, 0x2C, 0xD6, + 0xD0, 0xA1, 0x95, 0x95, 0x2C, 0x2C, 0xA1, 0x2C, + 0x95, 0x95, 0x55, 0x55, 0x55, 0x95, 0x2C, 0x2C, + 0xCB, 0x95, 0xD8, 0x20, 0x20, 0xB1, 0x88, 0x28, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE2, 0xA3, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x20, + 0x20, 0x20, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x88, 0xD6, 0x55, 0x47, 0x94, 0x55, 0x2C, 0xA1, + 0xA1, 0xD6, 0x95, 0x94, 0x94, 0x55, 0xD6, 0x6D, + 0xBF, 0x95, 0x90, 0xCB, 0x2C, 0x2C, 0x2C, 0x2C, + 0x55, 0x95, 0xCB, 0x90, 0x90, 0x95, 0x2C, 0x95, + 0x90, 0x70, 0x20, 0x20, 0x34, 0x8A, 0x20, 0x94, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0x65, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x20, + 0x20, 0x88, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x88, 0xD6, 0xCB, 0x47, 0x94, 0x55, 0xA1, 0xD6, + 0xD6, 0x2C, 0xCB, 0x47, 0x70, 0xA1, 0x6D, 0x2A, + 0x95, 0x47, 0x47, 0x70, 0x95, 0xA1, 0x2C, 0x95, + 0x55, 0x55, 0x90, 0x90, 0x55, 0x55, 0x55, 0x90, + 0x47, 0xD5, 0x20, 0x20, 0x80, 0xD5, 0x43, 0xCB, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0x42, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xCB, 0x20, + 0x20, 0x80, 0x34, 0x20, 0x20, 0x20, 0x88, 0x20, + 0x20, 0x2C, 0x47, 0xE6, 0x70, 0x2C, 0xD6, 0xD6, + 0xA1, 0x2C, 0x55, 0xCB, 0x95, 0xA1, 0x6D, 0xD6, + 0x90, 0x47, 0x47, 0x90, 0x2C, 0xA1, 0x2C, 0x95, + 0x55, 0x55, 0x90, 0x90, 0x55, 0x55, 0x55, 0x70, + 0x94, 0x8A, 0x20, 0x88, 0x88, 0xE1, 0xD8, 0x95, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE2, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x47, 0x20, + 0x43, 0x7D, 0x43, 0x80, 0x88, 0x20, 0x20, 0x20, + 0x88, 0xCB, 0x94, 0x70, 0x55, 0xA1, 0xD6, 0xD6, + 0xA1, 0x2C, 0x2C, 0x95, 0xA1, 0xA1, 0xD6, 0xA1, + 0x94, 0xE6, 0x47, 0x55, 0x2C, 0xD6, 0xA1, 0x95, + 0x55, 0x55, 0xCB, 0xCB, 0x55, 0x55, 0xCB, 0xCB, + 0x55, 0xA0, 0x43, 0x86, 0x86, 0x43, 0xD8, 0xCB, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0x65, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x3F, 0x80, + 0xD8, 0x80, 0x88, 0x34, 0xD8, 0x2B, 0xD8, 0x20, + 0x99, 0x90, 0x55, 0x95, 0x2C, 0xA1, 0xD6, 0xD6, + 0xA1, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, + 0x94, 0x94, 0x70, 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, + 0x55, 0x55, 0xCB, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x95, 0x44, 0xBC, 0x3E, 0x5D, 0xD3, 0x79, 0x92, + 0xA3, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0x65, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0x9A, 0x34, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x99, 0xE1, + 0x70, 0x55, 0x95, 0xA1, 0xD6, 0xD6, 0xD6, 0xA1, + 0x2C, 0x95, 0x55, 0x55, 0x95, 0x95, 0x95, 0x95, + 0x70, 0x70, 0x55, 0x2C, 0xD6, 0xD6, 0xA1, 0x95, + 0x55, 0x90, 0xCB, 0xCB, 0x55, 0x55, 0x2C, 0x2C, + 0x32, 0x9D, 0xEB, 0x5D, 0x69, 0x49, 0x84, 0xF0, + 0xB1, 0xEC, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0x42, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xC1, 0x4E, 0x21, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0xC9, 0xD8, + 0xBB, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, + 0x95, 0x55, 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, + 0x55, 0xCB, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x55, + 0x90, 0x70, 0x90, 0x55, 0x95, 0x95, 0x6D, 0xD0, + 0xC2, 0x48, 0x6A, 0x49, 0x69, 0x82, 0x5D, 0x2F, + 0x59, 0x7D, 0xBF, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0x65, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xEA, 0xC7, 0x7E, 0x66, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x43, 0x5A, + 0x46, 0x27, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x95, + 0x95, 0x55, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, + 0x95, 0x90, 0x55, 0x2C, 0xA1, 0xA1, 0x95, 0x55, + 0x94, 0x94, 0x2C, 0x2A, 0x72, 0x3B, 0x56, 0xDD, + 0xDF, 0x29, 0x5D, 0x49, 0x89, 0x5D, 0x3E, 0x69, + 0x93, 0x66, 0x34, 0xA1, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0x65, 0x42, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xEA, 0x3E, 0x5A, 0x66, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x5B, 0x73, + 0x89, 0x4C, 0xBF, 0x2C, 0x95, 0x2C, 0x2C, 0x95, + 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, + 0x2C, 0x70, 0x55, 0x2C, 0xD6, 0xD6, 0x2C, 0xCB, + 0x70, 0x55, 0xE7, 0x60, 0x4A, 0x48, 0xCD, 0x4A, + 0x29, 0x73, 0x5D, 0x82, 0x49, 0x49, 0x49, 0x49, + 0x3A, 0x57, 0x88, 0x88, 0x70, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0x42, 0x73, 0x50, 0xBE, 0x79, + 0x20, 0x20, 0x20, 0x20, 0x66, 0xCC, 0x37, 0x9C, + 0x3E, 0xCE, 0xBF, 0x95, 0x95, 0x95, 0x2C, 0x95, + 0x95, 0x55, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0x55, + 0xA1, 0x55, 0x95, 0xA1, 0xD6, 0xA1, 0x55, 0x94, + 0x94, 0xE8, 0x60, 0xC4, 0x3E, 0x2D, 0x2D, 0x2D, + 0x33, 0x5D, 0x82, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x89, 0xAA, 0x59, 0x20, 0x20, 0x28, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xEC, 0x4A, 0x2D, 0x50, 0x78, 0x2E, + 0x57, 0x51, 0xF0, 0x57, 0x31, 0x4D, 0x50, 0x2D, + 0x5D, 0xF2, 0xA1, 0x2C, 0x95, 0x95, 0x55, 0x55, + 0x90, 0x90, 0x70, 0x90, 0xCB, 0x55, 0x55, 0x55, + 0x6D, 0x2C, 0xA1, 0xD6, 0xD6, 0xA1, 0x55, 0x94, + 0x70, 0xB9, 0x75, 0x50, 0x3E, 0x49, 0x49, 0x49, + 0x5D, 0x82, 0x49, 0x49, 0x82, 0x49, 0x49, 0x49, + 0x89, 0x69, 0x4F, 0x20, 0x20, 0x20, 0x8A, 0x42, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0x83, 0x4A, 0x3A, 0x50, 0x62, 0x23, + 0x81, 0xB8, 0xB8, 0xE9, 0x5F, 0x29, 0x33, 0x5D, + 0x5D, 0x73, 0xE8, 0xCB, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, + 0xD6, 0xA1, 0xA1, 0xA1, 0xA1, 0x55, 0x70, 0x70, + 0xCB, 0x68, 0x75, 0x50, 0x82, 0x49, 0x49, 0x49, + 0x5D, 0x49, 0x49, 0x5D, 0x49, 0x49, 0x5D, 0x82, + 0x69, 0x5D, 0x25, 0xF0, 0x20, 0x20, 0x20, 0xE1, + 0x2A, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0x4B, 0xF4, 0xDF, 0x50, 0x73, 0x76, 0x48, + 0x75, 0xDF, 0x75, 0x62, 0xC4, 0x33, 0x82, 0x49, + 0x5D, 0x5D, 0xA8, 0xF5, 0x55, 0x55, 0x55, 0x55, + 0x2C, 0x2C, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, + 0x2C, 0x2C, 0x2C, 0x95, 0x95, 0xCB, 0x70, 0x70, + 0x95, 0x83, 0x5F, 0xEA, 0x2D, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x5D, 0x49, 0x22, 0x5A, 0x79, 0x20, 0x20, 0x20, + 0x80, 0xD2, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0x65, 0xD0, 0x63, 0x5F, 0x29, 0x2D, 0x2D, 0xEA, + 0x29, 0x29, 0x76, 0x50, 0x2D, 0x82, 0x49, 0x49, + 0x3E, 0x49, 0x5C, 0xB0, 0xBA, 0x95, 0x55, 0x55, + 0x2C, 0xA1, 0xD6, 0xD6, 0xD6, 0xA1, 0x2C, 0x2C, + 0xA1, 0x95, 0x95, 0x55, 0xCB, 0x70, 0x70, 0x55, + 0x2C, 0x83, 0x60, 0x76, 0x5D, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x5D, 0x89, 0xDC, 0x8B, 0x20, 0x20, 0x20, + 0x20, 0x95, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE2, 0x32, 0x85, 0xE3, 0x29, 0x2D, 0x33, 0x2D, + 0x2D, 0x2D, 0x6A, 0x2D, 0x33, 0x5D, 0x49, 0x82, + 0x49, 0x49, 0x82, 0x73, 0x5C, 0x9E, 0x2C, 0x55, + 0x2C, 0xA1, 0xD6, 0xA1, 0x2C, 0x2C, 0x95, 0x95, + 0x2C, 0x95, 0x55, 0xCB, 0x90, 0x90, 0xCB, 0x95, + 0x2C, 0x6D, 0x41, 0x6F, 0x3E, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x82, 0x3E, 0x4E, 0x38, 0xCA, 0x20, 0x20, + 0x20, 0x55, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0x65, + 0x42, 0xA0, 0xD4, 0xE3, 0x29, 0x2D, 0x82, 0x5D, + 0x5D, 0x82, 0x82, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x3E, 0x49, 0x49, 0x49, 0x5C, 0x56, 0xD6, + 0xA1, 0xA1, 0xA1, 0x95, 0x55, 0x55, 0x55, 0x95, + 0xA1, 0x55, 0x90, 0x70, 0x94, 0x70, 0x95, 0x2C, + 0x2C, 0xD6, 0xDD, 0x6F, 0x33, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x5D, 0x5D, 0x82, 0x69, 0x22, 0x62, 0x80, 0x34, + 0x94, 0x6B, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0xE5, 0x65, 0x6B, + 0xD5, 0x88, 0x5B, 0xE3, 0x29, 0x5D, 0x5D, 0x5D, + 0x5D, 0x5D, 0x5D, 0x5D, 0x49, 0x49, 0x49, 0x82, + 0x49, 0x49, 0x89, 0x49, 0x82, 0x49, 0x71, 0xBA, + 0x6D, 0x6D, 0xA1, 0x95, 0x55, 0xCB, 0x55, 0x55, + 0x2C, 0x55, 0x70, 0x70, 0x70, 0x90, 0x95, 0xA1, + 0x2C, 0xA1, 0x41, 0x76, 0x5D, 0x5D, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x5D, 0x82, 0x5D, 0x89, 0x5E, 0x96, 0x65, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0xE5, 0xE5, 0xE5, 0xE5, 0x65, 0x65, 0xEC, 0xB1, + 0x20, 0x20, 0xCA, 0x23, 0x29, 0x33, 0x49, 0x5D, + 0x49, 0x82, 0x49, 0x49, 0x49, 0x49, 0x49, 0x82, + 0x49, 0x82, 0x5D, 0x5D, 0x5D, 0x2D, 0x5C, 0x8F, + 0x6D, 0xD6, 0x2C, 0x55, 0x90, 0xCB, 0x95, 0x95, + 0x95, 0x55, 0x70, 0x94, 0x70, 0x55, 0x2C, 0xA1, + 0x95, 0xE8, 0x5F, 0x76, 0x33, 0x5D, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x3E, 0x9C, 0x2F, 0x68, + 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, + 0x65, 0xE5, 0x65, 0xE5, 0x6B, 0x90, 0x80, 0x20, + 0x20, 0x20, 0x4F, 0x81, 0x50, 0x3E, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x69, 0x69, 0x49, 0x5D, 0x2D, 0xC4, 0x46, 0xA3, + 0xD6, 0x55, 0x70, 0x94, 0x94, 0x70, 0xCB, 0x55, + 0x55, 0xCB, 0x70, 0x47, 0x70, 0x95, 0xA1, 0xA1, + 0x95, 0xBD, 0x75, 0x2D, 0x33, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x5D, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x5D, 0x2D, 0xB5, 0xDB, + 0xD6, 0x65, 0xE5, 0x65, 0xE5, 0xE5, 0x65, 0xE5, + 0x65, 0x65, 0x6B, 0x95, 0x2B, 0x88, 0x20, 0x20, + 0x20, 0x20, 0x8B, 0x81, 0x29, 0x33, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x3E, 0x3E, 0x5E, 0x41, 0x97, 0x27, 0xD6, + 0x55, 0x94, 0xE6, 0xE6, 0x47, 0x70, 0x55, 0x55, + 0x94, 0x70, 0x94, 0x94, 0x70, 0x55, 0xA1, 0x2C, + 0x6D, 0xC5, 0x39, 0x6A, 0x5D, 0x5D, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x3E, 0xEA, 0x30, 0x77, + 0xE1, 0xC9, 0x94, 0x2C, 0xD6, 0xD6, 0xA1, 0x55, + 0x47, 0x9F, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x80, 0x91, 0x81, 0x6A, 0x2D, 0x49, 0x49, + 0x49, 0x5D, 0x5D, 0x49, 0x49, 0x5D, 0x5D, 0x82, + 0xEB, 0x4A, 0x41, 0xC2, 0x8F, 0xF5, 0xA1, 0x55, + 0x94, 0x28, 0xA0, 0x47, 0x70, 0x55, 0x95, 0x95, + 0x47, 0x70, 0x70, 0x94, 0x90, 0x95, 0xA1, 0x2C, + 0xE8, 0xA6, 0x39, 0x76, 0x50, 0x50, 0x2D, 0x2D, + 0x3E, 0x3E, 0x5D, 0x3E, 0x5D, 0x5D, 0x49, 0x82, + 0x49, 0x49, 0x49, 0x82, 0x82, 0x50, 0x75, 0xE0, + 0x57, 0x20, 0x88, 0x88, 0x20, 0x20, 0x88, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x79, 0x91, 0x81, 0x76, 0x33, 0x49, 0x49, + 0x5D, 0x82, 0x49, 0x49, 0x3E, 0x6A, 0xEA, 0x29, + 0xDF, 0x97, 0xBF, 0x6D, 0x6D, 0xD6, 0x55, 0x47, + 0x28, 0x28, 0x47, 0x70, 0x55, 0x95, 0x2C, 0x2C, + 0x95, 0x95, 0x55, 0x90, 0x90, 0x95, 0xA1, 0xA1, + 0xD6, 0x26, 0x45, 0x81, 0x5F, 0x30, 0x48, 0x6F, + 0x6F, 0x29, 0x29, 0x6A, 0x2D, 0x2D, 0x5D, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x2D, 0x76, 0x6E, 0x77, + 0x5B, 0x66, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x79, 0xA9, 0xB8, 0x39, 0x50, 0x5D, 0x5D, + 0x5D, 0x5D, 0x3E, 0x2D, 0x29, 0x76, 0xCD, 0x37, + 0xB9, 0xA1, 0xA1, 0x6D, 0x6D, 0x2C, 0x94, 0x28, + 0xD5, 0xE6, 0x70, 0x55, 0x95, 0xA1, 0x2C, 0xA1, + 0xBF, 0xA1, 0x95, 0xCB, 0x55, 0x95, 0xA1, 0x2C, + 0x95, 0x83, 0xDE, 0x87, 0xB6, 0xBE, 0x40, 0x6E, + 0x81, 0x81, 0x78, 0x78, 0x39, 0x6F, 0xEA, 0x2D, + 0x2D, 0x33, 0x33, 0x33, 0x76, 0x30, 0x64, 0x54, + 0x5B, 0x66, 0x20, 0x20, 0x66, 0x20, 0x88, 0x20, + 0x20, 0x20, 0x88, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x88, 0x34, 0x8B, 0xF1, 0x23, 0x6F, 0x50, 0x2D, + 0x2D, 0x6A, 0x29, 0x6F, 0x78, 0x84, 0x9B, 0xD2, + 0x2C, 0x2C, 0xD6, 0x6D, 0x6D, 0x2C, 0x47, 0xA0, + 0xE6, 0x70, 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0xA1, + 0xD2, 0x95, 0x55, 0xCB, 0x55, 0x2C, 0xD6, 0xA1, + 0x95, 0x95, 0xA1, 0xD6, 0x6D, 0x6D, 0xBA, 0xF3, + 0x8D, 0x36, 0x74, 0x36, 0xF1, 0xB8, 0x23, 0x78, + 0x62, 0x4A, 0x29, 0x62, 0x23, 0xF1, 0x54, 0x31, + 0x57, 0x2B, 0x90, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, + 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, 0x2C, 0xCB, + 0xE6, 0x7D, 0xCA, 0xB7, 0xB8, 0x75, 0x6F, 0x6F, + 0x76, 0x6F, 0x78, 0x81, 0x53, 0xBD, 0x6D, 0x2C, + 0x95, 0x95, 0xA1, 0x6D, 0xA1, 0x55, 0x94, 0xE6, + 0x70, 0xCB, 0x55, 0x95, 0xA1, 0xD6, 0xD6, 0xA1, + 0xD0, 0x94, 0x94, 0x90, 0x95, 0x2C, 0xD6, 0xA1, + 0x95, 0x55, 0x2C, 0xA1, 0xD6, 0xA1, 0x95, 0x2C, + 0xD6, 0x68, 0xAB, 0x6C, 0xA4, 0x77, 0x77, 0xAD, + 0x40, 0x53, 0x6E, 0x40, 0xB7, 0x54, 0x31, 0xD7, + 0xAC, 0xD6, 0x55, 0x55, 0x95, 0x95, 0x95, 0x55, + 0x95, 0x2C, 0x2C, 0xA1, 0x95, 0x95, 0x2C, 0xA1, + 0x6D, 0xD2, 0x7C, 0x54, 0xAD, 0x40, 0x6E, 0x81, + 0x81, 0x6E, 0x36, 0xDA, 0xE8, 0xD6, 0xD6, 0x2C, + 0x2C, 0x2C, 0xA1, 0xD6, 0x95, 0x90, 0x94, 0x47, + 0x94, 0x94, 0x70, 0x55, 0x2C, 0xD6, 0xA1, 0x95, + 0x95, 0x28, 0x47, 0x90, 0x95, 0x2C, 0xA1, 0x2C, + 0x55, 0x95, 0x2C, 0xA1, 0xA1, 0x2C, 0x2C, 0x2C, + 0x2C, 0xA1, 0x55, 0x70, 0x95, 0x2C, 0xB2, 0xB4, + 0xC3, 0xC3, 0x54, 0x54, 0xA9, 0x31, 0xCA, 0x2A, + 0x95, 0x90, 0x55, 0x95, 0x2C, 0xA1, 0x2C, 0x95, + 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xD6, + 0x6D, 0x2A, 0xB2, 0x4F, 0x31, 0x2E, 0xE0, 0xAD, + 0xB7, 0xC8, 0xB4, 0xF5, 0x2C, 0xA1, 0xA1, 0xA1, + 0x95, 0x2C, 0xA1, 0x2C, 0x95, 0x70, 0x94, 0x94, + 0x94, 0x94, 0x70, 0x95, 0xD6, 0xD6, 0x2C, 0x95, + 0x94, 0x28, 0x47, 0xCB, 0x95, 0x2C, 0xA1, 0xA1, + 0x95, 0x55, 0x2C, 0xA1, 0xD6, 0xA1, 0x95, 0x95, + 0x95, 0x2C, 0x55, 0x70, 0x70, 0x70, 0x94, 0x2C, + 0x63, 0xBB, 0xA5, 0xD7, 0xCA, 0xB3, 0x6D, 0x2C, + 0x55, 0x55, 0x95, 0x2C, 0x2C, 0x2C, 0x95, 0x95, + 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1, + 0xD6, 0x2C, 0x70, 0x95, 0xAC, 0xC0, 0xDB, 0xEF, + 0xEF, 0xA2, 0xE8, 0x95, 0x95, 0xA1, 0xD6, 0xA1, + 0x95, 0x55, 0x2C, 0x95, 0x55, 0x70, 0x70, 0x70, + 0x94, 0x70, 0x55, 0xD6, 0x6D, 0x6D, 0x95, 0x55, + 0x70, 0x47, 0x70, 0x95, 0x2C, 0x2C, 0x2C, 0xA1, + 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, 0x95, 0x55, + 0x55, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x95, + 0xA1, 0xF5, 0xBF, 0xBF, 0xA1, 0x95, 0x95, 0x95, + 0x95, 0x55, 0x2C, 0x2C, 0x95, 0x55, 0x55, 0x95, + 0x95, 0x95, 0xA1, 0xA1, 0xA1, 0xA1, 0x2C, 0xA1, + 0x2C, 0x55, 0x70, 0x94, 0x90, 0x2C, 0x6D, 0x6D, + 0x6D, 0xA1, 0x2C, 0x95, 0x2C, 0xA1, 0xD6, 0xA1, + 0x2C, 0x55, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x95, 0xD6, 0x6D, 0xBF, 0xD6, 0x55, 0xCB, + 0x55, 0x55, 0x55, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1, + 0xA1, 0x95, 0x2C, 0xA1, 0xA1, 0xA1, 0x2C, 0x95, + 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, 0xA1, + 0x6D, 0xBF, 0x6D, 0x2C, 0x55, 0x55, 0x95, 0x95, + 0xCB, 0xCB, 0x55, 0x55, 0xCB, 0x55, 0x55, 0x95, + 0x95, 0x2C, 0x2C, 0xA1, 0xA1, 0xA1, 0x2C, 0x2C, + 0xA1, 0x95, 0xCB, 0xCB, 0x95, 0x95, 0x2C, 0x2C, + 0x2C, 0xA1, 0x2C, 0x2C, 0x2C, 0xA1, 0xA1, 0x2C, + 0x2C, 0x95, 0x55, 0x95, 0x95, 0x2C, 0x2C, 0x2C, + 0x2C, 0xA1, 0x6D, 0xBF, 0x6D, 0xA1, 0x55, 0x55, + 0x95, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x2C, + 0x2C, 0x95, 0x95, 0x95, 0x2C, 0x2C, 0x2C, 0x95, + 0x55, 0x95, 0x2C, 0x2C, 0xA1, 0xA1, 0xD6, 0xD6, + 0x6D, 0x6D, 0xA1, 0x95, 0xCB, 0x55, 0x95, 0x55, + 0x90, 0x70, 0xCB, 0xCB, 0x90, 0xCB, 0x95, 0x95, + 0x2C, 0x2C, 0xA1, 0xD6, 0xA1, 0xA1, 0xA1, 0xA1, + 0xA1, 0xA1, 0x2C, 0x95, 0x95, 0x2C, 0x2C, 0x2C, + 0x2C, 0xA1, 0x2C, 0x95, 0x95, 0x95, 0x2C, 0x2C, + 0x2C, 0x95, 0x55, 0x55, 0x2C, 0x2C, 0xA1, 0xA1, + 0xD6, 0xD6, 0x6D, 0x6D, 0xA1, 0x55, 0xCB, 0x55 }; +#endif + +#ifdef INCLUDE_LINUX_LOGOBW + unsigned char linux_logo_bw[] __initdata = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, diff --git a/include/linux/loop.h b/include/linux/loop.h index 75f6cc704..d276911c0 100644 --- a/include/linux/loop.h +++ b/include/linux/loop.h @@ -1,6 +1,8 @@ #ifndef _LINUX_LOOP_H #define _LINUX_LOOP_H +#include <linux/kdev_t.h> + /* * include/linux/loop.h * @@ -25,22 +27,25 @@ struct loop_device { int lo_encrypt_key_size; int lo_flags; int (*transfer)(struct loop_device *, int cmd, - char *raw_buf, char *loop_buf, int size); + char *raw_buf, char *loop_buf, int size, + int real_block); char lo_name[LO_NAME_SIZE]; char lo_encrypt_key[LO_KEY_SIZE]; -#ifdef DES_AVAILABLE - des_key_schedule lo_des_key; - unsigned long lo_des_init[2]; -#endif -#ifdef IDEA_AVAILABLE - idea_key lo_idea_en_key; - idea_key lo_idea_de_key; -#endif + __u32 lo_init[2]; + uid_t lo_key_owner; /* Who set the key */ + int (*ioctl)(struct loop_device *, int cmd, + unsigned long arg); + struct file * lo_backing_file; + void *key_data; + char key_reserved[48]; /* for use by the filter modules */ }; typedef int (* transfer_proc_t)(struct loop_device *, int cmd, - char *raw_buf, char *loop_buf, int size); + char *raw_buf, char *loop_buf, int size, + int real_block); + +#endif /* __KERNEL__ */ /* * Loop flags @@ -48,7 +53,20 @@ typedef int (* transfer_proc_t)(struct loop_device *, int cmd, #define LO_FLAGS_DO_BMAP 0x00000001 #define LO_FLAGS_READ_ONLY 0x00000002 -#endif /* __KERNEL__ */ +/* + * Note that this structure gets the wrong offsets when directly used + * from a glibc program, because glibc has a 32bit dev_t. + * Prevent people from shooting in their own foot. + */ +#if __GLIBC__ >= 2 && !defined(dev_t) +#error "Wrong dev_t in loop.h" +#endif + +/* + * This uses kdev_t because glibc currently has no appropiate + * conversion version for the loop ioctls. + * The situation is very unpleasant + */ struct loop_info { int lo_number; /* ioctl r/o */ @@ -66,15 +84,40 @@ struct loop_info { }; /* - * Loop encryption types --- LO_CRYPT_IDEA isn't supported yet + * Loop filter types */ -#define LO_CRYPT_NONE 0 -#define LO_CRYPT_XOR 1 -#define LO_CRYPT_DES 2 -#define LO_CRYPT_IDEA 3 -#define MAX_LO_CRYPT 4 +#define LO_CRYPT_NONE 0 +#define LO_CRYPT_XOR 1 +#define LO_CRYPT_DES 2 +#define LO_CRYPT_FISH2 3 /* Brand new Twofish encryption */ +#define LO_CRYPT_BLOW 4 +#define LO_CRYPT_CAST128 5 +#define LO_CRYPT_IDEA 6 +#define LO_CRYPT_DUMMY 9 +#define LO_CRYPT_SKIPJACK 10 +#define MAX_LO_CRYPT 20 +#ifdef __KERNEL__ +/* Support for loadable transfer modules */ +struct loop_func_table { + int number; /* filter type */ + int (*transfer)(struct loop_device *lo, int cmd, + char *raw_buf, char *loop_buf, int size, + int real_block); + int (*init)(struct loop_device *, struct loop_info *); + /* release is called from loop_unregister_transfer or clr_fd */ + int (*release)(struct loop_device *); + int (*ioctl)(struct loop_device *, int cmd, unsigned long arg); + /* lock and unlock manage the module use counts */ + void (*lock)(struct loop_device *); + void (*unlock)(struct loop_device *); +}; + +int loop_register_transfer(struct loop_func_table *funcs); +int loop_unregister_transfer(int number); + +#endif /* * IOCTL commands --- we will commandeer 0x4C ('L') */ diff --git a/include/linux/lp.h b/include/linux/lp.h index 937df9386..a60d29860 100644 --- a/include/linux/lp.h +++ b/include/linux/lp.h @@ -25,10 +25,9 @@ #define LP_NOPA 0x0010 #define LP_ERR 0x0020 #define LP_ABORT 0x0040 -#ifdef LP_NEED_CAREFUL -#define LP_CAREFUL 0x0080 -#endif +#define LP_CAREFUL 0x0080 /* obsoleted -arca */ #define LP_ABORTOPEN 0x0100 +#define LP_TRUST_IRQ 0x0200 /* timeout for each character. This is relative to bus cycles -- it * is the count in a busy loop. THIS IS THE VALUE TO CHANGE if you @@ -41,13 +40,10 @@ #define LP_INIT_CHAR 1000 /* The parallel port specs apparently say that there needs to be - * a .5usec wait before and after the strobe. Since there are wildly - * different computers running linux, I can't come up with a perfect - * value, but since it worked well on most printers before without, - * I'll initialize it to 0. + * a .5usec wait before and after the strobe. */ -#define LP_INIT_WAIT 0 +#define LP_INIT_WAIT 1 /* This is the amount of time that the driver waits for the printer to * catch up when the printer's buffer appears to be filled. If you @@ -70,11 +66,10 @@ or 0 for polling (no IRQ) */ #define LPGETIRQ 0x0606 /* get the current IRQ number */ #define LPWAIT 0x0608 /* corresponds to LP_INIT_WAIT */ -#ifdef LP_NEED_CAREFUL +/* NOTE: LPCAREFUL is obsoleted and it' s always the default right now -arca */ #define LPCAREFUL 0x0609 /* call with TRUE arg to require out-of-paper, off- line, and error indicators good on all writes, FALSE to ignore them. Default is ignore. */ -#endif #define LPABORTOPEN 0x060a /* call with TRUE arg to abort open() on error, FALSE to ignore error. Default is ignore. */ #define LPGETSTATUS 0x060b /* return LP_S(minor) */ @@ -83,6 +78,7 @@ #define LPGETSTATS 0x060d /* get statistics (struct lp_stats) */ #endif #define LPGETFLAGS 0x060e /* get status flags */ +#define LPTRUSTIRQ 0x060f /* set/unset the LP_TRUST_IRQ flag */ /* timeout for printk'ing a timeout, in jiffies (100ths of a second). This is also used for re-checking error conditions if LP_ABORT is @@ -96,7 +92,7 @@ #define LP_TIME(minor) lp_table[(minor)].time /* wait time */ #define LP_WAIT(minor) lp_table[(minor)].wait /* strobe wait */ #define LP_IRQ(minor) lp_table[(minor)].dev->port->irq /* interrupt # */ - /* 0 means polled */ + /* PARPORT_IRQ_NONE means polled */ #ifdef LP_STATS #define LP_STAT(minor) lp_table[(minor)].stats /* statistics area */ #endif @@ -117,7 +113,7 @@ struct lp_stats { struct lp_struct { struct pardevice *dev; - int flags; + unsigned long flags; unsigned int chars; unsigned int time; unsigned int wait; diff --git a/include/linux/lp_m68k.h b/include/linux/lp_m68k.h index f87bf4eff..cddecc98d 100644 --- a/include/linux/lp_m68k.h +++ b/include/linux/lp_m68k.h @@ -128,7 +128,7 @@ extern struct lp_struct *lp_table[MAX_LP]; extern unsigned int lp_irq; void lp_interrupt(int dev); -int lp_init(void); +int lp_m68k_init(void); int register_parallel(struct lp_struct *, int); void unregister_parallel(int); diff --git a/include/linux/major.h b/include/linux/major.h index 83c3a7f21..cdff8ea74 100644 --- a/include/linux/major.h +++ b/include/linux/major.h @@ -28,7 +28,7 @@ #define LP_MAJOR 6 #define VCS_MAJOR 7 #define LOOP_MAJOR 7 -#define SCSI_DISK_MAJOR 8 +#define SCSI_DISK0_MAJOR 8 #define SCSI_TAPE_MAJOR 9 #define MD_MAJOR 9 #define MISC_MAJOR 10 @@ -83,6 +83,14 @@ #define IDE4_MAJOR 56 #define IDE5_MAJOR 57 +#define SCSI_DISK1_MAJOR 65 +#define SCSI_DISK2_MAJOR 66 +#define SCSI_DISK3_MAJOR 67 +#define SCSI_DISK4_MAJOR 68 +#define SCSI_DISK5_MAJOR 69 +#define SCSI_DISK6_MAJOR 70 +#define SCSI_DISK7_MAJOR 71 + #define SPECIALIX_NORMAL_MAJOR 75 #define SPECIALIX_CALLOUT_MAJOR 76 @@ -94,8 +102,11 @@ * Tests for SCSI devices. */ +#define SCSI_DISK_MAJOR(M) ((M) == SCSI_DISK0_MAJOR || \ + ((M) >= SCSI_DISK1_MAJOR && (M) <= SCSI_DISK7_MAJOR)) + #define SCSI_BLK_MAJOR(M) \ - ((M) == SCSI_DISK_MAJOR \ + (SCSI_DISK_MAJOR(M) \ || (M) == SCSI_CDROM_MAJOR) static __inline__ int scsi_blk_major(int m) { diff --git a/include/linux/mca.h b/include/linux/mca.h index a8df76379..9dc61d00b 100644 --- a/include/linux/mca.h +++ b/include/linux/mca.h @@ -27,7 +27,7 @@ they all have sufficient number of POS registers to cover 8. */ See Documentation/mca.txt or one of the existing drivers for more information. */ -#define MCA_NOTFOUND -1 +#define MCA_NOTFOUND (-1) #define MCA_INTEGSCSI (MCA_MAX_SLOT_NR) #define MCA_INTEGVIDEO (MCA_MAX_SLOT_NR+1) @@ -40,11 +40,16 @@ specify a starting slot beyond zero, to deal with detecting multiple devices. Returns MCA_NOTFOUND if id not found. Also checks the integrated adapters. */ extern int mca_find_adapter( int id, int start ); +extern int mca_find_unused_adapter( int id, int start ); /* adapter state info - returns 0 if no */ extern int mca_isadapter( int slot ); extern int mca_isenabled( int slot ); +extern int mca_is_adapter_used( int slot ); +extern int mca_mark_as_used( int slot ); +extern void mca_mark_as_unused( int slot ); + /* gets a byte out of POS register (stored in memory) */ extern unsigned char mca_read_stored_pos( int slot, int reg ); @@ -88,4 +93,8 @@ extern unsigned char mca_read_pos( int slot, int reg ); /* write a byte to the specified POS register. */ extern void mca_write_pos( int slot, int reg, unsigned char byte ); +/* Should only be called by the NMI interrupt handler, this will do some +fancy stuff to figure out what might have generated a NMI. */ +extern void mca_handle_nmi( void ); + #endif /* _LINUX_MCA_H */ diff --git a/include/linux/minix_fs.h b/include/linux/minix_fs.h index 6b9b6d649..3a0635946 100644 --- a/include/linux/minix_fs.h +++ b/include/linux/minix_fs.h @@ -113,14 +113,7 @@ extern struct buffer_head * minix_getblk(struct inode *, int, int); extern struct buffer_head * minix_bread(struct inode *, int, int); extern void minix_truncate(struct inode *); -extern void minix_put_super(struct super_block *); -extern struct super_block *minix_read_super(struct super_block *,void *,int); extern int init_minix_fs(void); -extern void minix_write_super(struct super_block *); -extern int minix_remount (struct super_block * sb, int * flags, char * data); -extern void minix_read_inode(struct inode *); -extern void minix_write_inode(struct inode *); -extern int minix_statfs(struct super_block *, struct statfs *, int); extern int minix_sync_inode(struct inode *); extern int minix_sync_file(struct file *, struct dentry *); diff --git a/include/linux/mm.h b/include/linux/mm.h index 60c0ab8f9..b413095d3 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3,7 +3,6 @@ #include <linux/sched.h> #include <linux/errno.h> -#include <linux/kernel.h> #ifdef __KERNEL__ @@ -118,7 +117,7 @@ typedef struct page { unsigned long offset; struct page *next_hash; atomic_t count; - unsigned int age; + unsigned int unused; unsigned long flags; /* atomic flags, some possibly updated asynchronously */ struct wait_queue *wait; struct page **pprev_hash; @@ -227,8 +226,6 @@ typedef struct page { * For choosing which pages to swap out, inode pages carry a * page->referenced bit, which is set any time the system accesses * that page through the (inode,offset) hash table. - * There is also the page->age counter, which implements a linear - * decay (why not an exponential decay?), see swapctl.h. */ extern mem_map_t * mem_map; @@ -254,12 +251,6 @@ extern inline unsigned long get_free_page(int gfp_mask) /* memory.c & swap.c*/ -/* - * Decide if we should try to do some swapout.. - */ -extern int free_memory_available(void); -extern struct wait_queue * kswapd_wait; - #define free_page(addr) free_pages((addr),0) extern void FASTCALL(free_pages(unsigned long addr, unsigned long order)); extern void FASTCALL(__free_page(struct page *)); @@ -278,7 +269,7 @@ extern int remap_page_range(unsigned long from, unsigned long to, unsigned long extern int zeromap_page_range(unsigned long from, unsigned long size, pgprot_t prot); extern int vmap_page_range (unsigned long from, unsigned long size, unsigned long vaddr); extern void vmtruncate(struct inode * inode, unsigned long offset); -extern void handle_mm_fault(struct task_struct *tsk,struct vm_area_struct *vma, unsigned long address, int write_access); +extern int handle_mm_fault(struct task_struct *tsk,struct vm_area_struct *vma, unsigned long address, int write_access); extern void make_pages_present(unsigned long addr, unsigned long end); extern int pgt_cache_water[2]; @@ -341,6 +332,11 @@ extern void put_cached_page(unsigned long); #define GFP_LEVEL_MASK 0xf +/* + * Decide if we should try to do some swapout.. + */ +extern int free_memory_available(void); + /* vma is the first one with address < vma->vm_end, * and even address < vma->vm_start. Have to extend vma. */ static inline int expand_stack(struct vm_area_struct * vma, unsigned long address) @@ -391,6 +387,31 @@ static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * m return vma; } +#define buffer_under_min() ((buffermem >> PAGE_SHIFT) * 100 < \ + buffer_mem.min_percent * num_physpages) +#define buffer_under_borrow() ((buffermem >> PAGE_SHIFT) * 100 < \ + buffer_mem.borrow_percent * num_physpages) +#define buffer_under_max() ((buffermem >> PAGE_SHIFT) * 100 < \ + buffer_mem.max_percent * num_physpages) +#define buffer_over_min() ((buffermem >> PAGE_SHIFT) * 100 > \ + buffer_mem.min_percent * num_physpages) +#define buffer_over_borrow() ((buffermem >> PAGE_SHIFT) * 100 > \ + buffer_mem.borrow_percent * num_physpages) +#define buffer_over_max() ((buffermem >> PAGE_SHIFT) * 100 > \ + buffer_mem.max_percent * num_physpages) +#define pgcache_under_min() (page_cache_size * 100 < \ + page_cache.min_percent * num_physpages) +#define pgcache_under_borrow() (page_cache_size * 100 < \ + page_cache.borrow_percent * num_physpages) +#define pgcache_under_max() (page_cache_size * 100 < \ + page_cache.max_percent * num_physpages) +#define pgcache_over_min() (page_cache_size * 100 > \ + page_cache.min_percent * num_physpages) +#define pgcache_over_borrow() (page_cache_size * 100 > \ + page_cache.borrow_percent * num_physpages) +#define pgcache_over_max() (page_cache_size * 100 > \ + page_cache.max_percent * num_physpages) + #endif /* __KERNEL__ */ #endif diff --git a/include/linux/msg.h b/include/linux/msg.h index d63a388ca..2be627198 100644 --- a/include/linux/msg.h +++ b/include/linux/msg.h @@ -3,6 +3,10 @@ #include <linux/ipc.h> +/* ipcs ctl commands */ +#define MSG_STAT 11 +#define MSG_INFO 12 + /* msgrcv options */ #define MSG_NOERROR 010000 /* no error if message is too big */ #define MSG_EXCEPT 020000 /* recv any msg except of specified type.*/ @@ -54,10 +58,6 @@ struct msginfo { #define __MSGSEG ((MSGPOOL*1024)/ MSGSSZ) /* max no. of segments */ #define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff) -/* ipcs ctl commands */ -#define MSG_STAT 11 -#define MSG_INFO 12 - #ifdef __KERNEL__ /* one msg structure for each message */ diff --git a/include/linux/nbd.h b/include/linux/nbd.h index 0b3114431..45b060291 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h @@ -35,7 +35,6 @@ nbd_end_request(struct request *req) } #define MAX_NBD 128 -#endif struct nbd_device { int refcnt; @@ -51,6 +50,7 @@ struct nbd_device { struct request *tail; struct semaphore queue_lock; }; +#endif /* This now IS in some kind of include file... */ diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index b72ad4ed1..9a9297cac 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h @@ -101,31 +101,29 @@ struct nfs_wreq { struct dentry * wb_dentry; /* dentry referenced */ struct inode * wb_inode; /* inode referenced */ struct page * wb_page; /* page to be written */ + struct wait_queue * wb_wait; /* wait for completion */ unsigned int wb_offset; /* offset within page */ unsigned int wb_bytes; /* dirty range */ + unsigned int wb_count; /* user count */ + int wb_status; pid_t wb_pid; /* owner process */ unsigned short wb_flags; /* status flags */ struct nfs_writeargs wb_args; /* NFS RPC stuff */ struct nfs_fattr wb_fattr; /* file attributes */ }; -#define wb_status wb_task.tk_status #define WB_NEXT(req) ((struct nfs_wreq *) ((req)->wb_list.next)) /* * Various flags for wb_flags */ -#define NFS_WRITE_WANTLOCK 0x0001 /* needs to lock page */ -#define NFS_WRITE_LOCKED 0x0002 /* holds lock on page */ #define NFS_WRITE_CANCELLED 0x0004 /* has been cancelled */ #define NFS_WRITE_UNCOMMITTED 0x0008 /* written but uncommitted (NFSv3) */ #define NFS_WRITE_INVALIDATE 0x0010 /* invalidate after write */ #define NFS_WRITE_INPROGRESS 0x0100 /* RPC call in progress */ #define NFS_WRITE_COMPLETE 0x0200 /* RPC call completed */ -#define WB_WANTLOCK(req) ((req)->wb_flags & NFS_WRITE_WANTLOCK) -#define WB_HAVELOCK(req) ((req)->wb_flags & NFS_WRITE_LOCKED) #define WB_CANCELLED(req) ((req)->wb_flags & NFS_WRITE_CANCELLED) #define WB_UNCOMMITTED(req) ((req)->wb_flags & NFS_WRITE_UNCOMMITTED) #define WB_INVALIDATE(req) ((req)->wb_flags & NFS_WRITE_INVALIDATE) @@ -214,14 +212,24 @@ extern int nfs_lock(struct file *, int, struct file_lock *); * linux/fs/nfs/write.c */ extern int nfs_writepage(struct file *, struct page *); -extern int nfs_find_dentry_request(struct inode *, struct dentry *); extern int nfs_check_failed_request(struct inode *); extern int nfs_check_error(struct inode *); -extern int nfs_flush_dirty_pages(struct inode *, pid_t, off_t, off_t); + +/* + * Try to write back everything synchronously (but check the + * return value!) + */ +extern int nfs_wb_all(struct inode *); +extern int nfs_wb_page(struct inode *, struct page *); +extern int nfs_wb_pid(struct inode *, pid_t); + +/* + * Invalidate write-backs, possibly trying to write them + * back first.. + */ +extern void nfs_inval(struct inode *); extern int nfs_truncate_dirty_pages(struct inode *, unsigned long); -extern void nfs_invalidate_pages(struct inode *); -extern int nfs_updatepage(struct file *, struct page *, const char *, - unsigned long, unsigned int, int); +extern int nfs_updatepage(struct file *, struct page *, unsigned long, unsigned int, int); /* * linux/fs/nfs/read.c @@ -246,13 +254,10 @@ nfs_revalidate_inode(struct nfs_server *server, struct dentry *dentry) return _nfs_revalidate_inode(server, dentry); } -extern struct nfs_wreq * nfs_failed_requests; static inline int nfs_write_error(struct inode *inode) { - if (nfs_failed_requests == NULL) - return 0; - return nfs_check_error(inode); + return NFS_WRITEBACK(inode) && nfs_check_error(inode); } /* NFS root */ diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index 69144d1d8..3370208ae 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h @@ -86,7 +86,7 @@ struct svc_client * exp_getclient(struct sockaddr_in *sin); void exp_putclient(struct svc_client *clp); struct svc_export * exp_get(struct svc_client *clp, kdev_t dev, ino_t ino); int exp_rootfh(struct svc_client *, kdev_t, ino_t, - struct knfs_fh *); + char *path, struct knfs_fh *); int nfserrno(int errno); void exp_nlmdetach(void); diff --git a/include/linux/nfsd/syscall.h b/include/linux/nfsd/syscall.h index 896ead46b..019d33f76 100644 --- a/include/linux/nfsd/syscall.h +++ b/include/linux/nfsd/syscall.h @@ -32,8 +32,8 @@ #define NFSCTL_EXPORT 3 /* export a file system. */ #define NFSCTL_UNEXPORT 4 /* unexport a file system. */ #define NFSCTL_UGIDUPDATE 5 /* update a client's uid/gid map. */ -#define NFSCTL_GETFH 6 /* get an fh (used by mountd) */ - +#define NFSCTL_GETFH 6 /* get an fh by ino (used by mountd) */ +#define NFSCTL_GETFD 7 /* get an fh by path (used by mountd) */ /* SVC */ struct nfsctl_svc { @@ -81,6 +81,13 @@ struct nfsctl_fhparm { int gf_version; }; +/* GETFD */ +struct nfsctl_fdparm { + struct sockaddr gd_addr; + char gd_path[NFS_MAXPATHLEN+1]; + int gd_version; +}; + /* * This is the argument union. */ @@ -92,6 +99,7 @@ struct nfsctl_arg { struct nfsctl_export u_export; struct nfsctl_uidmap u_umap; struct nfsctl_fhparm u_getfh; + struct nfsctl_fdparm u_getfd; unsigned int u_debug; } u; #define ca_svc u.u_svc @@ -99,6 +107,7 @@ struct nfsctl_arg { #define ca_export u.u_export #define ca_umap u.u_umap #define ca_getfh u.u_getfh +#define ca_getfd u.u_getfd #define ca_authd u.u_authd #define ca_debug u.u_debug }; diff --git a/include/linux/openpic.h b/include/linux/openpic.h index 1b6102a2f..ea3123483 100644 --- a/include/linux/openpic.h +++ b/include/linux/openpic.h @@ -327,7 +327,7 @@ extern u_char *OpenPIC_InitSenses; */ /* Global Operations */ -extern void openpic_init(void); +extern void openpic_init(int); extern void openpic_reset(void); extern void openpic_enable_8259_pass_through(void); extern void openpic_disable_8259_pass_through(void); diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 9af62e4a2..667f214e1 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -83,8 +83,6 @@ static inline void remove_page_from_hash_queue(struct page * page) static inline void __add_page_to_hash_queue(struct page * page, struct page **p) { page_cache_size++; - set_bit(PG_referenced, &page->flags); - page->age = PAGE_AGE_VALUE; if((page->next_hash = *p) != NULL) (*p)->pprev_hash = &page->next_hash; *p = page; diff --git a/include/linux/parport.h b/include/linux/parport.h index 269fb574c..3adbc5ab3 100644 --- a/include/linux/parport.h +++ b/include/linux/parport.h @@ -123,7 +123,7 @@ struct parport_operations { void (*enable_irq)(struct parport *); void (*disable_irq)(struct parport *); - int (*examine_irq)(struct parport *); + void (*interrupt)(int, void *, struct pt_regs *); void (*inc_use_count)(void); void (*dec_use_count)(void); @@ -206,7 +206,9 @@ struct parport { void *private_data; /* for lowlevel driver */ int number; /* port index - the `n' in `parportn' */ - spinlock_t lock; + spinlock_t pardevice_lock; + spinlock_t waitlist_lock; + rwlock_t cad_lock; }; /* parport_register_port registers a new parallel port at the given address (if @@ -234,10 +236,9 @@ struct parport *parport_enumerate(void); /* parport_register_device declares that a device is connected to a port, and * tells the kernel all it needs to know. - * pf is the preemption function (may be NULL for a transient driver) - * kf is the wake-up function (may be NULL for a transient driver) + * pf is the preemption function (may be NULL for no callback) + * kf is the wake-up function (may be NULL for no callback) * irq_func is the interrupt handler (may be NULL for no interrupts) - * Only one lurking driver can be used on a given port. * handle is a user pointer that gets handed to callback functions. */ struct pardevice *parport_register_device(struct parport *port, @@ -273,7 +274,7 @@ extern void parport_release(struct pardevice *dev); /* parport_yield relinquishes the port if it would be helpful to other * drivers. The return value is the same as for parport_claim. */ -extern __inline__ unsigned int parport_yield(struct pardevice *dev) +extern __inline__ int parport_yield(struct pardevice *dev) { unsigned long int timeslip = (jiffies - dev->time); if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice)) @@ -285,7 +286,7 @@ extern __inline__ unsigned int parport_yield(struct pardevice *dev) /* parport_yield_blocking is the same but uses parport_claim_or_block * instead of parport_claim. */ -extern __inline__ unsigned int parport_yield_blocking(struct pardevice *dev) +extern __inline__ int parport_yield_blocking(struct pardevice *dev) { unsigned long int timeslip = (jiffies - dev->time); if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice)) @@ -294,11 +295,31 @@ extern __inline__ unsigned int parport_yield_blocking(struct pardevice *dev) return parport_claim_or_block(dev); } +/* + * Lowlevel drivers _can_ call this support function to handle irqs. + */ +extern __inline__ void parport_generic_irq(int irq, struct parport *port, + struct pt_regs *regs) +{ + read_lock(&port->cad_lock); + if (!port->cad) + goto out_unlock; + if (port->cad->irq_func) + port->cad->irq_func(irq, port->cad->private, regs); + else + printk(KERN_ERR "%s: irq%d happened with irq_func NULL " + "with %s as cad!\n", port->name, irq, port->cad->name); + out_unlock: + read_unlock(&port->cad_lock); +} + /* Flags used to identify what a device does. */ -#define PARPORT_DEV_TRAN 0x0000 /* We're transient. */ -#define PARPORT_DEV_LURK 0x0001 /* We lurk. */ +#define PARPORT_DEV_TRAN 0 /* WARNING !! DEPRECATED !! */ +#define PARPORT_DEV_LURK (1<<0) /* WARNING !! DEPRECATED !! */ +#define PARPORT_DEV_EXCL (1<<1) /* Need exclusive access. */ -#define PARPORT_FLAG_COMA 1 +#define PARPORT_FLAG_COMA (1<<0) +#define PARPORT_FLAG_EXCL (1<<1) /* EXCL driver registered. */ extern void parport_parse_irqs(int, const char *[], int irqval[]); extern int parport_ieee1284_nibble_mode_ok(struct parport *, unsigned char); diff --git a/include/linux/parport_pc.h b/include/linux/parport_pc.h index b61a970a7..65d8209e5 100644 --- a/include/linux/parport_pc.h +++ b/include/linux/parport_pc.h @@ -132,8 +132,6 @@ extern int parport_pc_ecp_read_block(struct parport *p, void *buf, size_t length extern int parport_pc_ecp_write_block(struct parport *p, void *buf, size_t length, void (*fn)(struct parport *, void *, size_t), void *handle); -extern int parport_pc_examine_irq(struct parport *p); - extern void parport_pc_inc_use_count(void); extern void parport_pc_dec_use_count(void); diff --git a/include/linux/pc_keyb.h b/include/linux/pc_keyb.h new file mode 100644 index 000000000..651bf4b19 --- /dev/null +++ b/include/linux/pc_keyb.h @@ -0,0 +1,124 @@ +/* + * include/linux/pc_keyb.h + * + * PC Keyboard And Keyboard Controller + * + * (c) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz> + */ + +/* + * Configuration Switches + */ + +#undef KBD_REPORT_ERR /* Report keyboard errors */ +#define KBD_REPORT_UNKN /* Report unknown scan codes */ +#define KBD_REPORT_TIMEOUTS /* Report keyboard timeouts */ +#undef KBD_IS_FOCUS_9000 /* We have the brain-damaged FOCUS-9000 keyboard */ +#undef INITIALIZE_MOUSE /* Define if your PS/2 mouse needs initialization. */ + + + +#define KBD_INIT_TIMEOUT 1000 /* Timeout in ms for initializing the keyboard */ +#define KBC_TIMEOUT 250 /* Timeout in ms for sending to keyboard controller */ +#define KBD_TIMEOUT 1000 /* Timeout in ms for keyboard command acknowledge */ + +/* + * Internal variables of the driver + */ + +extern unsigned char pckbd_read_mask; +extern unsigned char aux_device_present; + +/* + * Keyboard Controller Registers on normal PCs. + */ + +#define KBD_STATUS_REG 0x64 /* Status register (R) */ +#define KBD_CNTL_REG 0x64 /* Controller command register (W) */ +#define KBD_DATA_REG 0x60 /* Keyboard data register (R/W) */ + +/* + * Keyboard Controller Commands + */ + +#define KBD_CCMD_READ_MODE 0x20 /* Read mode bits */ +#define KBD_CCMD_WRITE_MODE 0x60 /* Write mode bits */ +#define KBD_CCMD_GET_VERSION 0xA1 /* Get controller version */ +#define KBD_CCMD_MOUSE_DISABLE 0xA7 /* Disable mouse interface */ +#define KBD_CCMD_MOUSE_ENABLE 0xA8 /* Enable mouse interface */ +#define KBD_CCMD_TEST_MOUSE 0xA9 /* Mouse interface test */ +#define KBD_CCMD_SELF_TEST 0xAA /* Controller self test */ +#define KBD_CCMD_KBD_TEST 0xAB /* Keyboard interface test */ +#define KBD_CCMD_KBD_DISABLE 0xAD /* Keyboard interface disable */ +#define KBD_CCMD_KBD_ENABLE 0xAE /* Keyboard interface enable */ +#define KBD_CCMD_WRITE_MOUSE 0xD4 /* Write the following byte to the mouse */ + +/* + * Keyboard Commands + */ + +#define KBD_CMD_SET_LEDS 0xED /* Set keyboard leds */ +#define KBD_CMD_SET_RATE 0xF3 /* Set typematic rate */ +#define KBD_CMD_ENABLE 0xF4 /* Enable scanning */ +#define KBD_CMD_DISABLE 0xF5 /* Disable scanning */ +#define KBD_CMD_RESET 0xFF /* Reset */ + +/* + * Keyboard Replies + */ + +#define KBD_REPLY_POR 0xAA /* Power on reset */ +#define KBD_REPLY_ACK 0xFA /* Command ACK */ +#define KBD_REPLY_RESEND 0xFE /* Command NACK, send the cmd again */ + +/* + * Status Register Bits + */ + +#define KBD_STAT_OBF 0x01 /* Keyboard output buffer full */ +#define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */ +#define KBD_STAT_SELFTEST 0x04 /* Self test successful */ +#define KBD_STAT_CMD 0x08 /* Last write was a command write (0=data) */ +#define KBD_STAT_UNLOCKED 0x10 /* Zero if keyboard locked */ +#define KBD_STAT_MOUSE_OBF 0x20 /* Mouse output buffer full */ +#define KBD_STAT_GTO 0x40 /* General receive/xmit timeout */ +#define KBD_STAT_PERR 0x80 /* Parity error */ + +#define AUX_STAT_OBF (KBD_STAT_OBF | KBD_STAT_MOUSE_OBF) + +/* + * Controller Mode Register Bits + */ + +#define KBD_MODE_KBD_INT 0x01 /* Keyboard data generate IRQ1 */ +#define KBD_MODE_MOUSE_INT 0x02 /* Mouse data generate IRQ12 */ +#define KBD_MODE_SYS 0x04 /* The system flag (?) */ +#define KBD_MODE_NO_KEYLOCK 0x08 /* The keylock doesn't affect the keyboard if set */ +#define KBD_MODE_DISABLE_KBD 0x10 /* Disable keyboard interface */ +#define KBD_MODE_DISABLE_MOUSE 0x20 /* Disable mouse interface */ +#define KBD_MODE_KCC 0x40 /* Scan code conversion to PC format */ +#define KBD_MODE_RFU 0x80 + +/* + * Mouse Commands + */ + +#define AUX_SET_RES 0xE8 /* Set resolution */ +#define AUX_SET_SCALE11 0xE6 /* Set 1:1 scaling */ +#define AUX_SET_SCALE21 0xE7 /* Set 2:1 scaling */ +#define AUX_GET_SCALE 0xE9 /* Get scaling factor */ +#define AUX_SET_STREAM 0xEA /* Set stream mode */ +#define AUX_SET_SAMPLE 0xF3 /* Set sample rate */ +#define AUX_ENABLE_DEV 0xF4 /* Enable aux device */ +#define AUX_DISABLE_DEV 0xF5 /* Disable aux device */ +#define AUX_RESET 0xFF /* Reset aux device */ + +#define AUX_BUF_SIZE 2048 + +struct aux_queue { + unsigned long head; + unsigned long tail; + struct wait_queue *proc_list; + struct fasync_struct *fasync; + unsigned char buf[AUX_BUF_SIZE]; +}; diff --git a/include/linux/pci.h b/include/linux/pci.h index f2231c90a..539586e40 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1,5 +1,5 @@ /* - * $Id: pci.h,v 1.84 1998/08/17 23:06:43 cort Exp $ + * $Id: pci.h,v 1.87 1998/10/11 15:13:12 mj Exp $ * * PCI defines and function prototypes * Copyright 1994, Drew Eckhardt @@ -467,6 +467,7 @@ #define PCI_DEVICE_ID_OPTI_82C701 0xc701 #define PCI_DEVICE_ID_OPTI_82C814 0xc814 #define PCI_DEVICE_ID_OPTI_82C822 0xc822 +#define PCI_DEVICE_ID_OPTI_82C861 0xc861 #define PCI_DEVICE_ID_OPTI_82C825 0xd568 #define PCI_VENDOR_ID_SGS 0x104a @@ -482,8 +483,10 @@ #define PCI_DEVICE_ID_TI_TVP4010 0x3d04 #define PCI_DEVICE_ID_TI_TVP4020 0x3d07 #define PCI_DEVICE_ID_TI_PCI1130 0xac12 +#define PCI_DEVICE_ID_TI_PCI1031 0xac13 #define PCI_DEVICE_ID_TI_PCI1131 0xac15 #define PCI_DEVICE_ID_TI_PCI1250 0xac16 +#define PCI_DEVICE_ID_TI_PCI1220 0xac17 #define PCI_VENDOR_ID_OAK 0x104e #define PCI_DEVICE_ID_OAK_OTI107 0x0107 @@ -601,6 +604,7 @@ #define PCI_DEVICE_ID_DATABOOK_87144 0xb106 #define PCI_VENDOR_ID_PLX 0x10b5 +#define PCI_DEVICE_ID_PLX_9050 0x9050 #define PCI_DEVICE_ID_PLX_9060 0x9060 #define PCI_DEVICE_ID_PLX_9060ES 0x906E #define PCI_DEVICE_ID_PLX_9060SD 0x906D @@ -611,6 +615,7 @@ #define PCI_DEVICE_ID_MADGE_C155S 0x1001 #define PCI_VENDOR_ID_3COM 0x10b7 +#define PCI_DEVICE_ID_3COM_3C985 0x0001 #define PCI_DEVICE_ID_3COM_3C339 0x3390 #define PCI_DEVICE_ID_3COM_3C590 0x5900 #define PCI_DEVICE_ID_3COM_3C595TX 0x5950 @@ -703,6 +708,9 @@ #define PCI_DEVICE_ID_INIT_320P 0x9100 #define PCI_DEVICE_ID_INIT_360P 0x9500 +#define PCI_VENDOR_ID_TTI 0x1103 +#define PCI_DEVICE_ID_TTI_HPT343 0x0003 + #define PCI_VENDOR_ID_VIA 0x1106 #define PCI_DEVICE_ID_VIA_82C505 0x0505 #define PCI_DEVICE_ID_VIA_82C561 0x0561 @@ -809,9 +817,13 @@ #define PCI_DEVICE_ID_TOSHIBA_TOPIC97 0x060f #define PCI_VENDOR_ID_RICOH 0x1180 +#define PCI_DEVICE_ID_RICOH_RL5C465 0x0465 #define PCI_DEVICE_ID_RICOH_RL5C466 0x0466 +#define PCI_DEVICE_ID_RICOH_RL5C475 0x0475 +#define PCI_DEVICE_ID_RICOH_RL5C478 0x0478 #define PCI_VENDOR_ID_ARTOP 0x1191 +#define PCI_DEVICE_ID_ARTOP_ATP8400 0x0004 #define PCI_DEVICE_ID_ARTOP_ATP850UF 0x0005 #define PCI_VENDOR_ID_ZEITNET 0x1193 @@ -834,6 +846,7 @@ #define PCI_DEVICE_ID_ATT_L56XMF 0x0440 #define PCI_VENDOR_ID_SPECIALIX 0x11cb +#define PCI_DEVICE_ID_SPECIALIX_IO8 0x2000 #define PCI_DEVICE_ID_SPECIALIX_XIO 0x4000 #define PCI_DEVICE_ID_SPECIALIX_RIO 0x8000 @@ -876,7 +889,10 @@ #define PCI_DEVICE_ID_ESSENTIAL_ROADRUNNER 0x0001 #define PCI_VENDOR_ID_O2 0x1217 +#define PCI_DEVICE_ID_O2_6729 0x6729 +#define PCI_DEVICE_ID_O2_6730 0x673a #define PCI_DEVICE_ID_O2_6832 0x6832 +#define PCI_DEVICE_ID_O2_6836 0x6836 #define PCI_VENDOR_ID_3DFX 0x121a #define PCI_DEVICE_ID_3DFX_VOODOO 0x0001 @@ -966,6 +982,9 @@ #define PCI_DEVICE_ID_S3_ViRGE_MXPMV 0x8c03 #define PCI_DEVICE_ID_S3_SONICVIBES 0xca00 +#define PCI_VENDOR_ID_GENROCO 0x5555 +#define PCI_DEVICE_ID_GENROCO_HFP832 0x0003 + #define PCI_VENDOR_ID_INTEL 0x8086 #define PCI_DEVICE_ID_INTEL_82375 0x0482 #define PCI_DEVICE_ID_INTEL_82424 0x0483 @@ -1011,6 +1030,7 @@ #define PCI_DEVICE_ID_ADAPTEC_7850 0x5078 #define PCI_DEVICE_ID_ADAPTEC_7855 0x5578 #define PCI_DEVICE_ID_ADAPTEC_5800 0x5800 +#define PCI_DEVICE_ID_ADAPTEC_1480A 0x6075 #define PCI_DEVICE_ID_ADAPTEC_7860 0x6078 #define PCI_DEVICE_ID_ADAPTEC_7861 0x6178 #define PCI_DEVICE_ID_ADAPTEC_7870 0x7078 @@ -1026,6 +1046,12 @@ #define PCI_DEVICE_ID_ADAPTEC_7884 0x8478 #define PCI_DEVICE_ID_ADAPTEC_1030 0x8b78 +#define PCI_VENDOR_ID_ADAPTEC2 0x9005 +#define PCI_DEVICE_ID_ADAPTEC2_2940U2 0x0010 +#define PCI_DEVICE_ID_ADAPTEC2_7890 0x001f +#define PCI_DEVICE_ID_ADAPTEC2_3940U2 0x0050 +#define PCI_DEVICE_ID_ADAPTEC2_7896 0x005f + #define PCI_VENDOR_ID_ATRONICS 0x907f #define PCI_DEVICE_ID_ATRONICS_2015 0x2015 diff --git a/include/linux/poll.h b/include/linux/poll.h index c4065bc12..7cafbfbad 100644 --- a/include/linux/poll.h +++ b/include/linux/poll.h @@ -103,7 +103,7 @@ void zero_fd_set(unsigned long nr, unsigned long *fdset) memset(fdset, 0, nr); } -extern int do_select(int n, fd_set_buffer *fds, unsigned long timeout); +extern int do_select(int n, fd_set_buffer *fds, long *timeout); #endif /* KERNEL */ diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index 7d4badcd0..d12e05650 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h @@ -2,7 +2,6 @@ #define _LINUX_PROC_FS_H #include <linux/config.h> -#include <linux/fs.h> #include <linux/malloc.h> /* @@ -23,6 +22,7 @@ enum root_directory_inos { PROC_CPUINFO, PROC_PCI, PROC_MCA, + PROC_NUBUS, PROC_SELF, /* will change inode # */ PROC_NET, PROC_SCSI, @@ -142,6 +142,7 @@ enum net_directory_inos { PROC_NET_NETSTAT, PROC_NET_IPFW_CHAINS, PROC_NET_IPFW_CHAIN_NAMES, + PROC_NET_AT_AARP, PROC_NET_LAST }; @@ -173,6 +174,7 @@ enum scsi_directory_inos { PROC_SCSI_ULTRASTOR, PROC_SCSI_7000FASST, PROC_SCSI_IBMMCA, + PROC_SCSI_FD_MCS, PROC_SCSI_EATA2X, PROC_SCSI_DC390T, PROC_SCSI_AM53C974, @@ -332,7 +334,7 @@ static inline int proc_scsi_unregister(struct proc_dir_entry *driver, int x) { extern void scsi_init_free(char *ptr, unsigned int size); - if(x <= PROC_SCSI_FILE) + if(x < PROC_SCSI_FILE) return(proc_unregister(proc_scsi, x)); else { struct proc_dir_entry **p = &driver->subdir, *dp; @@ -349,6 +351,7 @@ static inline int proc_scsi_unregister(struct proc_dir_entry *driver, int x) } } +extern struct dentry_operations proc_dentry_operations; extern struct super_block *proc_read_super(struct super_block *,void *,int); extern int init_proc_fs(void); extern struct inode * proc_get_inode(struct super_block *, int, struct proc_dir_entry *); diff --git a/include/linux/quota.h b/include/linux/quota.h index 014685f4f..c0945f60b 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h @@ -165,19 +165,23 @@ struct dqstats { #define DQ_FAKE 0x40 /* no limits only usage */ struct dquot { + struct dquot *dq_next; /* Pointer to next dquot */ + struct dquot **dq_pprev; + struct list_head dq_free; /* free list element */ + struct dquot *dq_hash_next; /* Pointer to next in dquot_hash */ + struct dquot **dq_hash_pprev; /* Pointer to previous in dquot_hash */ + struct wait_queue *dq_wait; /* Pointer to waitqueue */ + int dq_count; /* Reference count */ + + /* fields after this point are cleared when invalidating */ + struct vfsmount *dq_mnt; /* VFS_mount_point this applies to */ unsigned int dq_id; /* ID this applies to (uid, gid) */ - short dq_type; /* Type of quota */ kdev_t dq_dev; /* Device this applies to */ + short dq_type; /* Type of quota */ short dq_flags; /* See DQ_* */ - short dq_count; /* Reference count */ - unsigned long dq_referenced; /* Number of times this dquot was referenced during its lifetime */ - struct vfsmount *dq_mnt; /* VFS_mount_point this applies to */ + unsigned long dq_referenced; /* Number of times this dquot was + referenced during its lifetime */ struct dqblk dq_dqb; /* Diskquota usage */ - struct wait_queue *dq_wait; /* Pointer to waitqueue */ - struct dquot *dq_next; /* Pointer to next dquot */ - struct dquot *dq_hash_next; /* Pointer to next in dquot_hash */ - struct dquot **dq_hash_pprev; /* Pointer to previous in dquot_hash */ - struct dquot **dq_pprev; }; #define NODQUOT (struct dquot *)NULL diff --git a/include/linux/rose.h b/include/linux/rose.h index 69d592f67..c7b4b184c 100644 --- a/include/linux/rose.h +++ b/include/linux/rose.h @@ -9,6 +9,8 @@ #define ROSE_MTU 251 +#define ROSE_MAX_DIGIS 6 + #define ROSE_DEFER 1 #define ROSE_T1 2 #define ROSE_T2 3 @@ -24,6 +26,7 @@ #define SIOCRSACCEPT (SIOCPROTOPRIVATE+3) #define SIOCRSCLRRT (SIOCPROTOPRIVATE+4) #define SIOCRSGL2CALL (SIOCPROTOPRIVATE+5) +#define SIOCRSGFACILITIES (SIOCPROTOPRIVATE+6) #define ROSE_DTE_ORIGINATED 0x00 #define ROSE_NUMBER_BUSY 0x01 @@ -48,6 +51,14 @@ struct sockaddr_rose { ax25_address srose_digi; }; +struct full_sockaddr_rose { + sa_family_t srose_family; + rose_address srose_addr; + ax25_address srose_call; + unsigned int srose_ndigis; + ax25_address srose_digis[ROSE_MAX_DIGIS]; +}; + struct rose_route_struct { rose_address address; unsigned short mask; @@ -62,4 +73,15 @@ struct rose_cause_struct { unsigned char diagnostic; }; +struct rose_facilities_struct { + rose_address source_addr, dest_addr; + ax25_address source_call, dest_call; + unsigned char source_ndigis, dest_ndigis; + ax25_address source_digis[ROSE_MAX_DIGIS]; + ax25_address dest_digis[ROSE_MAX_DIGIS]; + unsigned int rand; + rose_address fail_addr; + ax25_address fail_call; +}; + #endif diff --git a/include/linux/sched.h b/include/linux/sched.h index e46e22263..da5be1f10 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -20,7 +20,6 @@ extern unsigned long event; #include <linux/tty.h> #include <linux/sem.h> #include <linux/signal.h> -#include <linux/capability.h> #include <linux/securebits.h> /* @@ -65,11 +64,9 @@ extern int nr_running, nr_tasks; extern int last_pid; #include <linux/fs.h> -#include <linux/signal.h> #include <linux/time.h> #include <linux/param.h> #include <linux/resource.h> -#include <linux/ptrace.h> #include <linux/timer.h> #include <asm/processor.h> @@ -119,9 +116,10 @@ extern void sched_init(void); extern void show_state(void); extern void trap_init(void); +#define MAX_SCHEDULE_TIMEOUT LONG_MAX +extern signed long FASTCALL(schedule_timeout(signed long timeout)); asmlinkage void schedule(void); - /* * Open file table structure */ @@ -258,7 +256,7 @@ struct task_struct { struct task_struct **tarray_ptr; struct wait_queue *wait_chldexit; /* for wait4() */ - unsigned long timeout, policy, rt_priority; + unsigned long policy, rt_priority; unsigned long it_real_value, it_prof_value, it_virt_value; unsigned long it_real_incr, it_prof_incr, it_virt_incr; struct timer_list real_timer; @@ -322,7 +320,7 @@ struct task_struct { #define PF_MEMALLOC 0x00000800 /* Allocating memory */ #define PF_USEDFPU 0x00100000 /* task used FPU this quantum (SMP) */ -#define PF_DTRACE 0x00200000 /* delayed trace (used on m68k) */ +#define PF_DTRACE 0x00200000 /* delayed trace (used on m68k, i386) */ /* * Limit the stack by to some sane default: root can always @@ -348,7 +346,7 @@ struct task_struct { /* pidhash */ NULL, NULL, \ /* tarray */ &task[0], \ /* chld wait */ NULL, \ -/* timeout */ 0,SCHED_OTHER,0,0,0,0,0,0,0, \ +/* timeout */ SCHED_OTHER,0,0,0,0,0,0,0, \ /* timer */ { NULL, NULL, 0, 0, it_real_fn }, \ /* utime */ {0,0,0,0},0, \ /* per CPU times */ {0, }, {0, }, \ @@ -458,6 +456,8 @@ extern unsigned long prof_shift; extern void FASTCALL(__wake_up(struct wait_queue ** p, unsigned int mode)); extern void FASTCALL(sleep_on(struct wait_queue ** p)); extern void FASTCALL(interruptible_sleep_on(struct wait_queue ** p)); +extern long FASTCALL(interruptible_sleep_on_timeout(struct wait_queue ** p, + signed long timeout)); extern void FASTCALL(wake_up_process(struct task_struct * tsk)); #define wake_up(x) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE) diff --git a/include/linux/sdladrv.h b/include/linux/sdladrv.h index af18e4b9f..23ae8a1e2 100644 --- a/include/linux/sdladrv.h +++ b/include/linux/sdladrv.h @@ -33,7 +33,7 @@ typedef struct sdlahw unsigned fwid; /* firmware ID */ unsigned port; /* adapter I/O port base */ int irq; /* interrupt request level */ - unsigned long dpmbase; /* dual-port memory base */ + void * dpmbase; /* dual-port memory base */ unsigned dpmsize; /* dual-port memory size */ unsigned pclk; /* CPU clock rate, kHz */ unsigned long memory; /* memory size */ diff --git a/include/linux/selection.h b/include/linux/selection.h index 45a14a4b3..45e4712b4 100644 --- a/include/linux/selection.h +++ b/include/linux/selection.h @@ -21,7 +21,6 @@ extern void mouse_report(struct tty_struct * tty, int butt, int mrx, int mry); #define video_num_columns (vc_cons[currcons].d->vc_cols) #define video_num_lines (vc_cons[currcons].d->vc_rows) #define video_size_row (vc_cons[currcons].d->vc_size_row) -#define video_screen_size (vc_cons[currcons].d->vc_screenbuf_size) #define can_do_color (vc_cons[currcons].d->vc_can_do_color) extern int console_blanked; @@ -31,7 +30,6 @@ extern int default_red[]; extern int default_grn[]; extern int default_blu[]; -extern void do_unblank_screen(void); extern unsigned short *screen_pos(int currcons, int w_offset, int viewed); extern u16 screen_glyph(int currcons, int offset); extern void complement_pos(int currcons, int offset); diff --git a/include/linux/serial.h b/include/linux/serial.h index 91cd5eca3..766222e7a 100644 --- a/include/linux/serial.h +++ b/include/linux/serial.h @@ -42,11 +42,11 @@ struct serial_struct { #define PORT_16450 2 #define PORT_16550 3 #define PORT_16550A 4 -#define PORT_CIRRUS 5 +#define PORT_CIRRUS 5 /* usurped by cyclades.c */ #define PORT_16650 6 #define PORT_16650V2 7 #define PORT_16750 8 -#define PORT_STARTECH 9 +#define PORT_STARTECH 9 /* usurped by cyclades.c */ #define PORT_MAX 9 struct serial_uart_config { @@ -87,7 +87,7 @@ struct serial_uart_config { #define ASYNC_LOW_LATENCY 0x2000 /* Request low latency behaviour */ -#define ASYNC_FLAGS 0x2FFF /* Possible legal async flags */ +#define ASYNC_FLAGS 0x3FFF /* Possible legal async flags */ #define ASYNC_USR_MASK 0x3430 /* Legal flags that non-privileged * users can set or reset */ diff --git a/include/linux/serial167.h b/include/linux/serial167.h new file mode 100644 index 000000000..9f01f3618 --- /dev/null +++ b/include/linux/serial167.h @@ -0,0 +1,175 @@ +/* + * serial167.h + * + * Richard Hirst [richard@sleepie.demon.co.uk] + * + * Based on cyclades.h + */ + +struct cyclades_monitor { + unsigned long int_count; + unsigned long char_count; + unsigned long char_max; + unsigned long char_last; +}; + +/* + * This is our internal structure for each serial port's state. + * + * Many fields are paralleled by the structure used by the serial_struct + * structure. + * + * For definitions of the flags field, see tty.h + */ + +struct cyclades_port { + int magic; + int type; + int card; + int line; + int flags; /* defined in tty.h */ + struct tty_struct *tty; + int read_status_mask; + int timeout; + int xmit_fifo_size; + int cor1,cor2,cor3,cor4,cor5,cor6,cor7; + int tbpr,tco,rbpr,rco; + int ignore_status_mask; + int close_delay; + int IER; /* Interrupt Enable Register */ + int event; + unsigned long last_active; + int count; /* # of fd on device */ + int x_char; /* to be pushed out ASAP */ + int x_break; + int blocked_open; /* # of blocked opens */ + long session; /* Session of opening process */ + long pgrp; /* pgrp of opening process */ + unsigned char *xmit_buf; + int xmit_head; + int xmit_tail; + int xmit_cnt; + int default_threshold; + int default_timeout; + struct tq_struct tqueue; + struct termios normal_termios; + struct termios callout_termios; + struct wait_queue *open_wait; + struct wait_queue *close_wait; + struct cyclades_monitor mon; +}; + +#define CYCLADES_MAGIC 0x4359 + +#define CYGETMON 0x435901 +#define CYGETTHRESH 0x435902 +#define CYSETTHRESH 0x435903 +#define CYGETDEFTHRESH 0x435904 +#define CYSETDEFTHRESH 0x435905 +#define CYGETTIMEOUT 0x435906 +#define CYSETTIMEOUT 0x435907 +#define CYGETDEFTIMEOUT 0x435908 +#define CYSETDEFTIMEOUT 0x435909 + +/* + * Events are used to schedule things to happen at timer-interrupt + * time, instead of at cy interrupt time. + */ +#define Cy_EVENT_READ_PROCESS 0 +#define Cy_EVENT_WRITE_WAKEUP 1 +#define Cy_EVENT_HANGUP 2 +#define Cy_EVENT_BREAK 3 +#define Cy_EVENT_OPEN_WAKEUP 4 + + + +#define CyMaxChipsPerCard 1 + +/**** cd2401 registers ****/ + +#define CyGFRCR (0x81) +#define CyCCR (0x13) +#define CyCLR_CHAN (0x40) +#define CyINIT_CHAN (0x20) +#define CyCHIP_RESET (0x10) +#define CyENB_XMTR (0x08) +#define CyDIS_XMTR (0x04) +#define CyENB_RCVR (0x02) +#define CyDIS_RCVR (0x01) +#define CyCAR (0xee) +#define CyIER (0x11) +#define CyMdmCh (0x80) +#define CyRxExc (0x20) +#define CyRxData (0x08) +#define CyTxMpty (0x02) +#define CyTxRdy (0x01) +#define CyLICR (0x26) +#define CyRISR (0x89) +#define CyTIMEOUT (0x80) +#define CySPECHAR (0x70) +#define CyOVERRUN (0x08) +#define CyPARITY (0x04) +#define CyFRAME (0x02) +#define CyBREAK (0x01) +#define CyREOIR (0x84) +#define CyTEOIR (0x85) +#define CyMEOIR (0x86) +#define CyNOTRANS (0x08) +#define CyRFOC (0x30) +#define CyRDR (0xf8) +#define CyTDR (0xf8) +#define CyMISR (0x8b) +#define CyRISR (0x89) +#define CyTISR (0x8a) +#define CyMSVR1 (0xde) +#define CyMSVR2 (0xdf) +#define CyDSR (0x80) +#define CyDCD (0x40) +#define CyCTS (0x20) +#define CyDTR (0x02) +#define CyRTS (0x01) +#define CyRTPRL (0x25) +#define CyRTPRH (0x24) +#define CyCOR1 (0x10) +#define CyPARITY_NONE (0x00) +#define CyPARITY_E (0x40) +#define CyPARITY_O (0xC0) +#define Cy_5_BITS (0x04) +#define Cy_6_BITS (0x05) +#define Cy_7_BITS (0x06) +#define Cy_8_BITS (0x07) +#define CyCOR2 (0x17) +#define CyETC (0x20) +#define CyCtsAE (0x02) +#define CyCOR3 (0x16) +#define Cy_1_STOP (0x02) +#define Cy_2_STOP (0x04) +#define CyCOR4 (0x15) +#define CyREC_FIFO (0x0F) /* Receive FIFO threshold */ +#define CyCOR5 (0x14) +#define CyCOR6 (0x18) +#define CyCOR7 (0x07) +#define CyRBPR (0xcb) +#define CyRCOR (0xc8) +#define CyTBPR (0xc3) +#define CyTCOR (0xc0) +#define CySCHR1 (0x1f) +#define CySCHR2 (0x1e) +#define CyTPR (0xda) +#define CyPILR1 (0xe3) +#define CyPILR2 (0xe0) +#define CyPILR3 (0xe1) +#define CyCMR (0x1b) +#define CyASYNC (0x02) +#define CyLICR (0x26) +#define CyLIVR (0x09) +#define CySCRL (0x23) +#define CySCRH (0x22) +#define CyTFTC (0x80) + + +/* max number of chars in the FIFO */ + +#define CyMAX_CHAR_FIFO 12 + +/***************************************************************************/ diff --git a/include/linux/shm.h b/include/linux/shm.h index 50a7b772c..819e346a4 100644 --- a/include/linux/shm.h +++ b/include/linux/shm.h @@ -14,8 +14,13 @@ struct shmid_ds { __kernel_ipc_pid_t shm_cpid; /* pid of creator */ __kernel_ipc_pid_t shm_lpid; /* pid of last operator */ unsigned short shm_nattch; /* no. of current attaches */ +}; + +struct shmid_kernel +{ + struct shmid_ds u; /* the following are private */ - unsigned short shm_npages; /* size of segment (pages) */ + unsigned long shm_npages; /* size of segment (pages) */ unsigned long *shm_pages; /* array of ptrs to frames -> SHMMAX */ struct vm_area_struct *attaches; /* descriptors for attaches */ }; diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index c242c0907..2089a9710 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -106,6 +106,12 @@ struct sk_buff { __u32 shapestamp; /* Stamp for shaper */ __u16 shapepend; /* Pending */ #endif + +#if defined(CONFIG_HIPPI) + union{ + __u32 ifield; + } private; +#endif }; /* These are just the default values. This is run time configurable. diff --git a/include/linux/socket.h b/include/linux/socket.h index 511e92426..f1e8dcfaf 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h @@ -238,6 +238,7 @@ struct ucred { /* TCP options - this way around because someone left a set in the c library includes */ #define TCP_NODELAY 1 #define TCP_MAXSEG 2 +#define TCP_CORK 3 /* Linux specific (for use with sendfile) */ #ifdef __KERNEL__ extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); @@ -250,6 +251,7 @@ extern int csum_partial_copy_fromiovecend(unsigned char *kdata, extern int verify_iovec(struct msghdr *m, struct iovec *iov, char *address, int mode); extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); +extern void memcpy_tokerneliovec(struct iovec *iov, unsigned char *kdata, int len); extern int move_addr_to_user(void *kaddr, int klen, void *uaddr, int *ulen); extern int move_addr_to_kernel(void *uaddr, int ulen, void *kaddr); extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); diff --git a/include/linux/soundcard.h b/include/linux/soundcard.h index deb73e6fd..52ff06b5f 100644 --- a/include/linux/soundcard.h +++ b/include/linux/soundcard.h @@ -771,6 +771,8 @@ typedef struct copr_msg { #define SOUND_MIXER_CAPS 0xfc # define SOUND_CAP_EXCL_INPUT 0x00000001 /* Only one recording source at a time */ #define SOUND_MIXER_STEREODEVS 0xfb /* Mixer channels supporting stereo */ +#define SOUND_MIXER_OUTSRC 0xfa /* Arg contains a bit for each input source to output */ +#define SOUND_MIXER_OUTMASK 0xf9 /* Arg contains a bit for each supported input source to output */ /* Device mask bits */ diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 3bea6651d..f374af3f4 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h @@ -14,6 +14,8 @@ #include <linux/config.h> #include <linux/sunrpc/sched.h> +/* size of the nodename buffer */ +#define UNX_MAXNODENAME 32 /* * Client user credentials diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 98a250051..d0be5f044 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -52,6 +52,9 @@ struct rpc_clnt { struct rpc_portmap cl_pmap; /* port mapping */ struct rpc_wait_queue cl_bindwait; /* waiting on getport() */ + + int cl_nodelen; /* nodename length */ + char cl_nodename[UNX_MAXNODENAME]; }; #define cl_timeout cl_xprt->timeout #define cl_prog cl_pmap.pm_prog diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h index e076098c4..8563307a8 100644 --- a/include/linux/sunrpc/svcsock.h +++ b/include/linux/sunrpc/svcsock.h @@ -51,7 +51,7 @@ struct svc_sock { */ int svc_makesock(struct svc_serv *, int, unsigned short); void svc_delete_socket(struct svc_sock *); -int svc_recv(struct svc_serv *, struct svc_rqst *); +int svc_recv(struct svc_serv *, struct svc_rqst *, long); int svc_send(struct svc_rqst *); void svc_drop(struct svc_rqst *); diff --git a/include/linux/swap.h b/include/linux/swap.h index 0bcb6f6ed..d4fcf03b8 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -79,7 +79,7 @@ extern void swap_after_unlock_page (unsigned long entry); /* linux/mm/page_alloc.c */ extern void swap_in(struct task_struct *, struct vm_area_struct *, - unsigned long, pte_t *, unsigned long, int); + pte_t *, unsigned long, int); /* linux/mm/swap_state.c */ @@ -87,8 +87,9 @@ extern void show_swap_cache_info(void); extern int add_to_swap_cache(struct page *, unsigned long); extern int swap_duplicate(unsigned long); extern int swap_check_entry(unsigned long); -extern struct page * read_swap_cache_async(unsigned long, unsigned long, int); -#define read_swap_cache(entry, addr) read_swap_cache_async(entry, addr, 1); +extern struct page * read_swap_cache_async(unsigned long, int); +#define read_swap_cache(entry) read_swap_cache_async(entry, 1); +extern int FASTCALL(swap_count(unsigned long)); /* * Make these inline later once they are working properly. */ @@ -106,8 +107,8 @@ struct swap_list_t { int next; /* swapfile to be used next */ }; extern struct swap_list_t swap_list; -int sys_swapoff(const char *); -int sys_swapon(const char *, int); +asmlinkage int sys_swapoff(const char *); +asmlinkage int sys_swapon(const char *, int); /* * vm_ops not present page codes for shared memory. @@ -146,14 +147,20 @@ extern inline unsigned long in_swap_cache(struct page *page) */ static inline int is_page_shared(struct page *page) { - int count = atomic_read(&page->count); + unsigned int count; if (PageReserved(page)) return 1; - if (page->inode == &swapper_inode) - count--; + count = atomic_read(&page->count); + if (PageSwapCache(page)) + { + /* PARANOID */ + if (page->inode != &swapper_inode) + panic("swap cache page has wrong inode\n"); + count += swap_count(page->offset) - 2; + } if (PageFreeAfter(page)) count--; - return (count > 1); + return count > 1; } #endif /* __KERNEL__*/ diff --git a/include/linux/swapctl.h b/include/linux/swapctl.h index fcc5615f8..54fb59381 100644 --- a/include/linux/swapctl.h +++ b/include/linux/swapctl.h @@ -94,32 +94,6 @@ static inline int AGE_CLUSTER_SIZE(int resources) return n; } -static inline void touch_page(struct page *page) -{ - if (page->age < (MAX_PAGE_AGE - PAGE_ADVANCE)) - page->age += PAGE_ADVANCE; - else - page->age = MAX_PAGE_AGE; -} - -static inline void age_page(struct page *page) -{ - if (page->age > PAGE_DECLINE) - page->age -= PAGE_DECLINE; - else - page->age = 0; -} - -static inline int age_of(unsigned long addr) -{ - return mem_map[MAP_NR(addr)].age; -} - -static inline void set_page_new(unsigned long addr) -{ - mem_map[MAP_NR(addr)].age = PAGE_INITIAL_AGE; -} - #endif /* __KERNEL */ #endif /* _LINUX_SWAPCTL_H */ diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index c310573ee..20e3b9abf 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h @@ -44,99 +44,103 @@ struct __sysctl_args { /* For internal pattern-matching use only: */ #ifdef __KERNEL__ -#define CTL_ANY -1 /* Matches any name */ +#define CTL_ANY -1 /* Matches any name */ #define CTL_NONE 0 #endif enum { -/*1*/ CTL_KERN=1, /* General kernel info and control */ - CTL_VM, /* VM management */ - CTL_NET, /* Networking */ - CTL_PROC, /* Process info */ - CTL_FS, /* Filesystems */ - CTL_DEBUG, /* Debugging */ -/*7*/ CTL_DEV, /* Devices */ + CTL_KERN=1, /* General kernel info and control */ + CTL_VM=2, /* VM management */ + CTL_NET=3, /* Networking */ + CTL_PROC=4, /* Process info */ + CTL_FS=5, /* Filesystems */ + CTL_DEBUG=6, /* Debugging */ + CTL_DEV=7, /* Devices */ }; /* CTL_KERN names: */ enum { -/*1*/ KERN_OSTYPE=1, /* string: system version */ - KERN_OSRELEASE, /* string: system release */ - KERN_OSREV, /* int: system revision */ - KERN_VERSION, /* string: compile time info */ - KERN_SECUREMASK, /* struct: maximum rights mask */ - KERN_PROF, /* table: profiling information */ - KERN_NODENAME, -/*8*/ KERN_DOMAINNAME, -/*14*/ KERN_SECURELVL=14, /* int: system security level */ - KERN_PANIC, /* int: panic timeout */ -/*16*/ KERN_REALROOTDEV, /* real root device to mount after initrd */ -/*19*/ KERN_JAVA_INTERPRETER=19,/* path to Java(tm) interpreter */ -/*20*/ KERN_JAVA_APPLETVIEWER, /* path to Java(tm) appletviewer */ - KERN_SPARC_REBOOT, /* reboot command on Sparc */ - KERN_CTLALTDEL, /* int: allow ctl-alt-del to reboot */ - KERN_PRINTK, /* sturct: control printk logging parameters */ - KERN_NAMETRANS, /* Name translation */ - KERN_PPC_HTABRECLAIM, /* turn htab reclaimation on/off on PPC */ - KERN_PPC_ZEROPAGED, /* turn idle page zeroing on/off on PPC */ - KERN_PPC_POWERSAVE_NAP, /* use nap mode for power saving */ - KERN_MODPROBE, -/*29*/ KERN_SG_BIG_BUFF + KERN_OSTYPE=1, /* string: system version */ + KERN_OSRELEASE=2, /* string: system release */ + KERN_OSREV=3, /* int: system revision */ + KERN_VERSION=4, /* string: compile time info */ + KERN_SECUREMASK=5, /* struct: maximum rights mask */ + KERN_PROF=6, /* table: profiling information */ + KERN_NODENAME=7, + KERN_DOMAINNAME=8, + + KERN_SECURELVL=14, /* int: system security level */ + KERN_PANIC=15, /* int: panic timeout */ + KERN_REALROOTDEV=16, /* real root device to mount after initrd */ + + KERN_JAVA_INTERPRETER=19, /* path to Java(tm) interpreter */ + KERN_JAVA_APPLETVIEWER=20, /* path to Java(tm) appletviewer */ + KERN_SPARC_REBOOT=21, /* reboot command on Sparc */ + KERN_CTLALTDEL=22, /* int: allow ctl-alt-del to reboot */ + KERN_PRINTK=23, /* struct: control printk logging parameters */ + KERN_NAMETRANS=24, /* Name translation */ + KERN_PPC_HTABRECLAIM=25, /* turn htab reclaimation on/off on PPC */ + KERN_PPC_ZEROPAGED=26, /* turn idle page zeroing on/off on PPC */ + KERN_PPC_POWERSAVE_NAP=27, /* use nap mode for power saving */ + KERN_MODPROBE=28, + KERN_SG_BIG_BUFF=29, + KERN_ACCT=30, /* BSD process accounting parameters */ + KERN_PPC_L2CR=31, /* l2cr register on PPC */ }; /* CTL_VM names: */ enum { -/*1*/ VM_SWAPCTL=1, /* struct: Set vm swapping control */ - VM_SWAPOUT, /* int: Background pageout interval */ - VM_FREEPG, /* struct: Set free page thresholds */ - VM_BDFLUSH, /* struct: Control buffer cache flushing */ - VM_OVERCOMMIT_MEMORY, /* Turn off the virtual memory safety limit */ - VM_BUFFERMEM, /* struct: Set buffer memory thresholds */ - VM_PAGECACHE, /* struct: Set cache memory thresholds */ - VM_PAGERDAEMON, /* struct: Control kswapd behaviour */ -/*9*/ VM_PGT_CACHE /* struct: Set page table cache parameters */ + VM_SWAPCTL=1, /* struct: Set vm swapping control */ + VM_SWAPOUT=2, /* int: Background pageout interval */ + VM_FREEPG=3, /* struct: Set free page thresholds */ + VM_BDFLUSH=4, /* struct: Control buffer cache flushing */ + VM_OVERCOMMIT_MEMORY=5, /* Turn off the virtual memory safety limit */ + VM_BUFFERMEM=6, /* struct: Set buffer memory thresholds */ + VM_PAGECACHE=7, /* struct: Set cache memory thresholds */ + VM_PAGERDAEMON=8, /* struct: Control kswapd behaviour */ + VM_PGT_CACHE=9 /* struct: Set page table cache parameters */ }; /* CTL_NET names: */ enum { -/*1*/ NET_CORE=1, - NET_ETHER, - NET_802, - NET_UNIX, - NET_IPV4, - NET_IPX, - NET_ATALK, - NET_NETROM, - NET_AX25, -/*10*/ NET_BRIDGE, - NET_ROSE, - NET_IPV6, - NET_X25, - NET_TR, -/*15*/ NET_DECNET + NET_CORE=1, + NET_ETHER=2, + NET_802=3, + NET_UNIX=4, + NET_IPV4=5, + NET_IPX=6, + NET_ATALK=7, + NET_NETROM=8, + NET_AX25=9, + NET_BRIDGE=10, + NET_ROSE=11, + NET_IPV6=12, + NET_X25=13, + NET_TR=14, + NET_DECNET=15 }; /* /proc/sys/net/core */ enum { -/*1*/ NET_CORE_WMEM_MAX=1, - NET_CORE_RMEM_MAX, - NET_CORE_WMEM_DEFAULT, - NET_CORE_RMEM_DEFAULT, - NET_CORE_DESTROY_DELAY, - NET_CORE_MAX_BACKLOG, - NET_CORE_FASTROUTE, - NET_CORE_MSG_COST, - NET_CORE_MSG_BURST, -/*10*/ NET_CORE_OPTMEM_MAX, + NET_CORE_WMEM_MAX=1, + NET_CORE_RMEM_MAX=2, + NET_CORE_WMEM_DEFAULT=3, + NET_CORE_RMEM_DEFAULT=4, +/* was NET_CORE_DESTROY_DELAY */ + NET_CORE_MAX_BACKLOG=6, + NET_CORE_FASTROUTE=7, + NET_CORE_MSG_COST=8, + NET_CORE_MSG_BURST=9, + NET_CORE_OPTMEM_MAX=10, }; /* /proc/sys/net/ethernet */ @@ -147,144 +151,143 @@ enum enum { -/*1*/ NET_UNIX_DESTROY_DELAY=1, -/*2*/ NET_UNIX_DELETE_DELAY, + NET_UNIX_DESTROY_DELAY=1, + NET_UNIX_DELETE_DELAY=2, }; /* /proc/sys/net/ipv4 */ enum { /* v2.0 compatibile variables */ -/*8*/ NET_IPV4_FORWARD = 8, - NET_IPV4_DYNADDR = 9, - -/*16*/ NET_IPV4_CONF = 16, - NET_IPV4_NEIGH = 17, - NET_IPV4_ROUTE = 18, - NET_IPV4_FIB_HASH = 19, - -/*32*/ NET_IPV4_TCP_HOE_RETRANSMITS=32, - NET_IPV4_TCP_TIMESTAMPS, - NET_IPV4_TCP_WINDOW_SCALING, - NET_IPV4_TCP_SACK, - NET_IPV4_TCP_RETRANS_COLLAPSE, - NET_IPV4_DEFAULT_TTL, - NET_IPV4_AUTOCONFIG, - NET_IPV4_NO_PMTU_DISC, -/*40*/ NET_IPV4_TCP_SYN_RETRIES, - NET_IPV4_IPFRAG_HIGH_THRESH, - NET_IPV4_IPFRAG_LOW_THRESH, - NET_IPV4_IPFRAG_TIME, - NET_IPV4_TCP_MAX_KA_PROBES, - NET_IPV4_TCP_KEEPALIVE_TIME, - NET_IPV4_TCP_KEEPALIVE_PROBES, - NET_IPV4_TCP_RETRIES1, - NET_IPV4_TCP_RETRIES2, - NET_IPV4_TCP_FIN_TIMEOUT, -/*50*/ NET_IPV4_IP_MASQ_DEBUG, - NET_TCP_SYNCOOKIES, - NET_TCP_STDURG, - NET_TCP_RFC1337, - NET_TCP_SYN_TAILDROP, - NET_TCP_MAX_SYN_BACKLOG, - NET_IPV4_LOCAL_PORT_RANGE, - NET_IPV4_ICMP_ECHO_IGNORE_ALL, - NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS, - NET_IPV4_ICMP_SOURCEQUENCH_RATE, -/*60*/ NET_IPV4_ICMP_DESTUNREACH_RATE, - NET_IPV4_ICMP_TIMEEXCEED_RATE, - NET_IPV4_ICMP_PARAMPROB_RATE, -/*63*/ NET_IPV4_ICMP_ECHOREPLY_RATE, + NET_IPV4_FORWARD=8, + NET_IPV4_DYNADDR=9, + + NET_IPV4_CONF=16, + NET_IPV4_NEIGH=17, + NET_IPV4_ROUTE=18, + NET_IPV4_FIB_HASH=19, + + NET_IPV4_TCP_TIMESTAMPS=33, + NET_IPV4_TCP_WINDOW_SCALING=34, + NET_IPV4_TCP_SACK=35, + NET_IPV4_TCP_RETRANS_COLLAPSE=36, + NET_IPV4_DEFAULT_TTL=37, + NET_IPV4_AUTOCONFIG=38, + NET_IPV4_NO_PMTU_DISC=39, + NET_IPV4_TCP_SYN_RETRIES=40, + NET_IPV4_IPFRAG_HIGH_THRESH=41, + NET_IPV4_IPFRAG_LOW_THRESH=42, + NET_IPV4_IPFRAG_TIME=43, + NET_IPV4_TCP_MAX_KA_PROBES=44, + NET_IPV4_TCP_KEEPALIVE_TIME=45, + NET_IPV4_TCP_KEEPALIVE_PROBES=46, + NET_IPV4_TCP_RETRIES1=47, + NET_IPV4_TCP_RETRIES2=48, + NET_IPV4_TCP_FIN_TIMEOUT=49, + NET_IPV4_IP_MASQ_DEBUG=50, + NET_TCP_SYNCOOKIES=51, + NET_TCP_STDURG=52, + NET_TCP_RFC1337=53, + NET_TCP_SYN_TAILDROP=54, + NET_TCP_MAX_SYN_BACKLOG=55, + NET_IPV4_LOCAL_PORT_RANGE=56, + NET_IPV4_ICMP_ECHO_IGNORE_ALL=57, + NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS=58, + NET_IPV4_ICMP_SOURCEQUENCH_RATE=59, + NET_IPV4_ICMP_DESTUNREACH_RATE=60, + NET_IPV4_ICMP_TIMEEXCEED_RATE=61, + NET_IPV4_ICMP_PARAMPROB_RATE=62, + NET_IPV4_ICMP_ECHOREPLY_RATE=63, }; enum { -/*1*/ NET_IPV4_ROUTE_FLUSH = 1, - NET_IPV4_ROUTE_MIN_DELAY, - NET_IPV4_ROUTE_MAX_DELAY, - NET_IPV4_ROUTE_GC_THRESH, - NET_IPV4_ROUTE_MAX_SIZE, - NET_IPV4_ROUTE_GC_MIN_INTERVAL, - NET_IPV4_ROUTE_GC_TIMEOUT, - NET_IPV4_ROUTE_GC_INTERVAL, - NET_IPV4_ROUTE_REDIRECT_LOAD, -/*10*/ NET_IPV4_ROUTE_REDIRECT_NUMBER, - NET_IPV4_ROUTE_REDIRECT_SILENCE, - NET_IPV4_ROUTE_ERROR_COST, - NET_IPV4_ROUTE_ERROR_BURST, -/*14*/ NET_IPV4_ROUTE_GC_ELASTICITY, + NET_IPV4_ROUTE_FLUSH=1, + NET_IPV4_ROUTE_MIN_DELAY=2, + NET_IPV4_ROUTE_MAX_DELAY=3, + NET_IPV4_ROUTE_GC_THRESH=4, + NET_IPV4_ROUTE_MAX_SIZE=5, + NET_IPV4_ROUTE_GC_MIN_INTERVAL=6, + NET_IPV4_ROUTE_GC_TIMEOUT=7, + NET_IPV4_ROUTE_GC_INTERVAL=8, + NET_IPV4_ROUTE_REDIRECT_LOAD=9, + NET_IPV4_ROUTE_REDIRECT_NUMBER=10, + NET_IPV4_ROUTE_REDIRECT_SILENCE=11, + NET_IPV4_ROUTE_ERROR_COST=12, + NET_IPV4_ROUTE_ERROR_BURST=13, + NET_IPV4_ROUTE_GC_ELASTICITY=14, }; enum { -/*-2*/ NET_PROTO_CONF_ALL = -2, -/*-3*/ NET_PROTO_CONF_DEFAULT = -3, + NET_PROTO_CONF_ALL=-2, + NET_PROTO_CONF_DEFAULT=-3, /* And device ifindices ... */ }; enum { -/*1*/ NET_IPV4_CONF_FORWARDING = 1, - NET_IPV4_CONF_MC_FORWARDING, - NET_IPV4_CONF_PROXY_ARP, - NET_IPV4_CONF_ACCEPT_REDIRECTS, - NET_IPV4_CONF_SECURE_REDIRECTS, - NET_IPV4_CONF_SEND_REDIRECTS, - NET_IPV4_CONF_SHARED_MEDIA, - NET_IPV4_CONF_RP_FILTER, - NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE, -/*10*/ NET_IPV4_CONF_BOOTP_RELAY, -/*11*/ NET_IPV4_CONF_LOG_MARTIANS, + NET_IPV4_CONF_FORWARDING=1, + NET_IPV4_CONF_MC_FORWARDING=2, + NET_IPV4_CONF_PROXY_ARP=3, + NET_IPV4_CONF_ACCEPT_REDIRECTS=4, + NET_IPV4_CONF_SECURE_REDIRECTS=5, + NET_IPV4_CONF_SEND_REDIRECTS=6, + NET_IPV4_CONF_SHARED_MEDIA=7, + NET_IPV4_CONF_RP_FILTER=8, + NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE=9, + NET_IPV4_CONF_BOOTP_RELAY=10, + NET_IPV4_CONF_LOG_MARTIANS=11, }; /* /proc/sys/net/ipv6 */ enum { -/*16*/ NET_IPV6_CONF = 16, - NET_IPV6_NEIGH = 17, -/*18*/ NET_IPV6_ROUTE = 18, + NET_IPV6_CONF=16, + NET_IPV6_NEIGH=17, + NET_IPV6_ROUTE=18, }; enum { -/*1*/ NET_IPV6_ROUTE_FLUSH = 1, - NET_IPV6_ROUTE_GC_THRESH, - NET_IPV6_ROUTE_MAX_SIZE, - NET_IPV6_ROUTE_GC_MIN_INTERVAL, - NET_IPV6_ROUTE_GC_TIMEOUT, - NET_IPV6_ROUTE_GC_INTERVAL, -/*7*/ NET_IPV6_ROUTE_GC_ELASTICITY, + NET_IPV6_ROUTE_FLUSH=1, + NET_IPV6_ROUTE_GC_THRESH=2, + NET_IPV6_ROUTE_MAX_SIZE=3, + NET_IPV6_ROUTE_GC_MIN_INTERVAL=4, + NET_IPV6_ROUTE_GC_TIMEOUT=5, + NET_IPV6_ROUTE_GC_INTERVAL=6, + NET_IPV6_ROUTE_GC_ELASTICITY=7, }; enum { -/*1*/ NET_IPV6_FORWARDING = 1, - NET_IPV6_HOP_LIMIT, - NET_IPV6_MTU, - NET_IPV6_ACCEPT_RA, - NET_IPV6_ACCEPT_REDIRECTS, - NET_IPV6_AUTOCONF, - NET_IPV6_DAD_TRANSMITS, - NET_IPV6_RTR_SOLICITS, - NET_IPV6_RTR_SOLICIT_INTERVAL, -/*10*/ NET_IPV6_RTR_SOLICIT_DELAY, + NET_IPV6_FORWARDING=1, + NET_IPV6_HOP_LIMIT=2, + NET_IPV6_MTU=3, + NET_IPV6_ACCEPT_RA=4, + NET_IPV6_ACCEPT_REDIRECTS=5, + NET_IPV6_AUTOCONF=6, + NET_IPV6_DAD_TRANSMITS=7, + NET_IPV6_RTR_SOLICITS=8, + NET_IPV6_RTR_SOLICIT_INTERVAL=9, + NET_IPV6_RTR_SOLICIT_DELAY=10, }; /* /proc/sys/net/<protocol>/neigh/<dev> */ enum { -/*1*/ NET_NEIGH_MCAST_SOLICIT=1, - NET_NEIGH_UCAST_SOLICIT, - NET_NEIGH_APP_SOLICIT, - NET_NEIGH_RETRANS_TIME, - NET_NEIGH_REACHABLE_TIME, - NET_NEIGH_DELAY_PROBE_TIME, - NET_NEIGH_GC_STALE_TIME, - NET_NEIGH_UNRES_QLEN, - NET_NEIGH_PROXY_QLEN, -/*10*/ NET_NEIGH_ANYCAST_DELAY, - NET_NEIGH_PROXY_DELAY, - NET_NEIGH_LOCKTIME, - NET_NEIGH_GC_INTERVAL, - NET_NEIGH_GC_THRESH1, - NET_NEIGH_GC_THRESH2, -/*16*/ NET_NEIGH_GC_THRESH3 + NET_NEIGH_MCAST_SOLICIT=1, + NET_NEIGH_UCAST_SOLICIT=2, + NET_NEIGH_APP_SOLICIT=3, + NET_NEIGH_RETRANS_TIME=4, + NET_NEIGH_REACHABLE_TIME=5, + NET_NEIGH_DELAY_PROBE_TIME=6, + NET_NEIGH_GC_STALE_TIME=7, + NET_NEIGH_UNRES_QLEN=8, + NET_NEIGH_PROXY_QLEN=9, + NET_NEIGH_ANYCAST_DELAY=10, + NET_NEIGH_PROXY_DELAY=11, + NET_NEIGH_LOCKTIME=12, + NET_NEIGH_GC_INTERVAL=13, + NET_NEIGH_GC_THRESH1=14, + NET_NEIGH_GC_THRESH2=15, + NET_NEIGH_GC_THRESH3=16 }; /* /proc/sys/net/ipx */ @@ -292,83 +295,83 @@ enum { /* /proc/sys/net/appletalk */ enum { -/*1*/ NET_ATALK_AARP_EXPIRY_TIME = 1, - NET_ATALK_AARP_TICK_TIME, - NET_ATALK_AARP_RETRANSMIT_LIMIT, -/*4*/ NET_ATALK_AARP_RESOLVE_TIME, + NET_ATALK_AARP_EXPIRY_TIME=1, + NET_ATALK_AARP_TICK_TIME=2, + NET_ATALK_AARP_RETRANSMIT_LIMIT=3, + NET_ATALK_AARP_RESOLVE_TIME=4, }; /* /proc/sys/net/netrom */ enum { -/*1*/ NET_NETROM_DEFAULT_PATH_QUALITY = 1, - NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER, - NET_NETROM_NETWORK_TTL_INITIALISER, - NET_NETROM_TRANSPORT_TIMEOUT, - NET_NETROM_TRANSPORT_MAXIMUM_TRIES, - NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY, - NET_NETROM_TRANSPORT_BUSY_DELAY, - NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE, - NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT, -/*10*/ NET_NETROM_ROUTING_CONTROL, -/*11*/ NET_NETROM_LINK_FAILS_COUNT + NET_NETROM_DEFAULT_PATH_QUALITY=1, + NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER=2, + NET_NETROM_NETWORK_TTL_INITIALISER=3, + NET_NETROM_TRANSPORT_TIMEOUT=4, + NET_NETROM_TRANSPORT_MAXIMUM_TRIES=5, + NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY=6, + NET_NETROM_TRANSPORT_BUSY_DELAY=7, + NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE=8, + NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT=9, + NET_NETROM_ROUTING_CONTROL=10, + NET_NETROM_LINK_FAILS_COUNT=11 }; /* /proc/sys/net/ax25 */ enum { -/*1*/ NET_AX25_IP_DEFAULT_MODE = 1, - NET_AX25_DEFAULT_MODE, - NET_AX25_BACKOFF_TYPE, - NET_AX25_CONNECT_MODE, - NET_AX25_STANDARD_WINDOW, - NET_AX25_EXTENDED_WINDOW, - NET_AX25_T1_TIMEOUT, - NET_AX25_T2_TIMEOUT, - NET_AX25_T3_TIMEOUT, -/*10*/ NET_AX25_IDLE_TIMEOUT, - NET_AX25_N2, - NET_AX25_PACLEN, - NET_AX25_PROTOCOL, -/*14*/ NET_AX25_DAMA_SLAVE_TIMEOUT + NET_AX25_IP_DEFAULT_MODE=1, + NET_AX25_DEFAULT_MODE=2, + NET_AX25_BACKOFF_TYPE=3, + NET_AX25_CONNECT_MODE=4, + NET_AX25_STANDARD_WINDOW=5, + NET_AX25_EXTENDED_WINDOW=6, + NET_AX25_T1_TIMEOUT=7, + NET_AX25_T2_TIMEOUT=8, + NET_AX25_T3_TIMEOUT=9, + NET_AX25_IDLE_TIMEOUT=10, + NET_AX25_N2=11, + NET_AX25_PACLEN=12, + NET_AX25_PROTOCOL=13, + NET_AX25_DAMA_SLAVE_TIMEOUT=14 }; /* /proc/sys/net/rose */ enum { -/*1*/ NET_ROSE_RESTART_REQUEST_TIMEOUT = 1, - NET_ROSE_CALL_REQUEST_TIMEOUT, - NET_ROSE_RESET_REQUEST_TIMEOUT, - NET_ROSE_CLEAR_REQUEST_TIMEOUT, - NET_ROSE_ACK_HOLD_BACK_TIMEOUT, - NET_ROSE_ROUTING_CONTROL, - NET_ROSE_LINK_FAIL_TIMEOUT, - NET_ROSE_MAX_VCS, - NET_ROSE_WINDOW_SIZE, -/*10*/ NET_ROSE_NO_ACTIVITY_TIMEOUT, + NET_ROSE_RESTART_REQUEST_TIMEOUT=1, + NET_ROSE_CALL_REQUEST_TIMEOUT=2, + NET_ROSE_RESET_REQUEST_TIMEOUT=3, + NET_ROSE_CLEAR_REQUEST_TIMEOUT=4, + NET_ROSE_ACK_HOLD_BACK_TIMEOUT=5, + NET_ROSE_ROUTING_CONTROL=6, + NET_ROSE_LINK_FAIL_TIMEOUT=7, + NET_ROSE_MAX_VCS=8, + NET_ROSE_WINDOW_SIZE=9, + NET_ROSE_NO_ACTIVITY_TIMEOUT=10, }; /* /proc/sys/net/x25 */ enum { -/*1*/ NET_X25_RESTART_REQUEST_TIMEOUT = 1, - NET_X25_CALL_REQUEST_TIMEOUT, - NET_X25_RESET_REQUEST_TIMEOUT, - NET_X25_CLEAR_REQUEST_TIMEOUT, -/*5*/ NET_X25_ACK_HOLD_BACK_TIMEOUT + NET_X25_RESTART_REQUEST_TIMEOUT=1, + NET_X25_CALL_REQUEST_TIMEOUT=2, + NET_X25_RESET_REQUEST_TIMEOUT=3, + NET_X25_CLEAR_REQUEST_TIMEOUT=4, + NET_X25_ACK_HOLD_BACK_TIMEOUT=5 }; /* /proc/sys/net/token-ring */ enum { -/*1*/ NET_TR_RIF_TIMEOUT=1 + NET_TR_RIF_TIMEOUT=1 }; /* /proc/sys/net/decnet */ enum { -/*1*/ NET_DECNET_DEF_T3_BROADCAST = 1, - NET_DECNET_DEF_T3_POINTTOPOINT, - NET_DECNET_DEF_T1, - NET_DECNET_DEF_BCT1, - NET_DECNET_CACHETIMEOUT, -/*6*/ NET_DECNET_DEBUG_LEVEL + NET_DECNET_DEF_T3_BROADCAST=1, + NET_DECNET_DEF_T3_POINTTOPOINT=2, + NET_DECNET_DEF_T1=3, + NET_DECNET_DEF_BCT1=4, + NET_DECNET_CACHETIMEOUT=5, + NET_DECNET_DEBUG_LEVEL=6 }; /* CTL_PROC names: */ @@ -376,29 +379,29 @@ enum { /* CTL_FS names: */ enum { -/*1*/ FS_NRINODE=1, /* int: current number of allocated inodes */ - FS_STATINODE, - FS_MAXINODE, /* int: maximum number of inodes that can be allocated */ - FS_NRDQUOT, /* int: current number of allocated dquots */ - FS_MAXDQUOT, /* int: maximum number of dquots that can be allocated */ - FS_NRFILE, /* int: current number of allocated filedescriptors */ - FS_MAXFILE, /* int: maximum number of filedescriptors that can be allocated */ - FS_DENTRY, - FS_NRSUPER, /* int: current number of allocated super_blocks */ -/*10*/ FS_MAXSUPER, /* int: maximum number of super_blocks that can be allocated */ + FS_NRINODE=1, /* int:current number of allocated inodes */ + FS_STATINODE=2, + FS_MAXINODE=3, /* int:maximum number of inodes that can be allocated */ + FS_NRDQUOT=4, /* int:current number of allocated dquots */ + FS_MAXDQUOT=5, /* int:maximum number of dquots that can be allocated */ + FS_NRFILE=6, /* int:current number of allocated filedescriptors */ + FS_MAXFILE=7, /* int:maximum number of filedescriptors that can be allocated */ + FS_DENTRY=8, + FS_NRSUPER=9, /* int:current number of allocated super_blocks */ + FS_MAXSUPER=10, /* int:maximum number of super_blocks that can be allocated */ }; /* CTL_DEBUG names: */ /* CTL_DEV names: */ enum { -/*1*/ DEV_CDROM = 1, -/*2*/ DEV_HWMON, + DEV_CDROM=1, + DEV_HWMON=2, }; /* /proc/sys/dev/cdrom */ enum { -/*1*/ DEV_CDROM_INFO = 1, + DEV_CDROM_INFO=1, }; #ifdef __KERNEL__ diff --git a/include/linux/sysv_fs.h b/include/linux/sysv_fs.h index 00d40adca..76dab1072 100644 --- a/include/linux/sysv_fs.h +++ b/include/linux/sysv_fs.h @@ -37,28 +37,28 @@ as { byte2, byte3, byte0, byte1 }. We need conversions. */ -typedef unsigned long coh_ulong; +typedef u32 coh_ulong; -static inline coh_ulong to_coh_ulong (unsigned long x) +static inline coh_ulong to_coh_ulong (u32 x) { return ((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16); } -static inline unsigned long from_coh_ulong (coh_ulong x) +static inline u32 from_coh_ulong (coh_ulong x) { return ((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16); } /* inode numbers are 16 bit */ -typedef unsigned short sysv_ino_t; +typedef u16 sysv_ino_t; /* Block numbers are 24 bit, sometimes stored in 32 bit. On Coherent FS, they are always stored in PDP-11 manner: the least significant 16 bits come last. */ -typedef unsigned long sysv_zone_t; +typedef u32 sysv_zone_t; /* Among the blocks ... */ /* Xenix FS, Coherent FS: block 0 is the boot block, block 1 the super-block. @@ -75,36 +75,36 @@ typedef unsigned long sysv_zone_t; #define XENIX_NICINOD 100 /* number of inode cache entries */ #define XENIX_NICFREE 100 /* number of free block list chunk entries */ struct xenix_super_block { - unsigned short s_isize; /* index of first data zone */ - unsigned long s_fsize __packed2__; /* total number of zones of this fs */ + u16 s_isize; /* index of first data zone */ + u32 s_fsize __packed2__; /* total number of zones of this fs */ /* the start of the free block list: */ - unsigned short s_nfree; /* number of free blocks in s_free, <= XENIX_NICFREE */ - unsigned long s_free[XENIX_NICFREE]; /* first free block list chunk */ + u16 s_nfree; /* number of free blocks in s_free, <= XENIX_NICFREE */ + u32 s_free[XENIX_NICFREE]; /* first free block list chunk */ /* the cache of free inodes: */ - unsigned short s_ninode; /* number of free inodes in s_inode, <= XENIX_NICINOD */ - sysv_ino_t s_inode[XENIX_NICINOD]; /* some free inodes */ + u16 s_ninode; /* number of free inodes in s_inode, <= XENIX_NICINOD */ + sysv_ino_t s_inode[XENIX_NICINOD]; /* some free inodes */ /* locks, not used by Linux: */ - char s_flock; /* lock during free block list manipulation */ - char s_ilock; /* lock during inode cache manipulation */ - char s_fmod; /* super-block modified flag */ - char s_ronly; /* flag whether fs is mounted read-only */ - unsigned long s_time __packed2__; /* time of last super block update */ - unsigned long s_tfree __packed2__; /* total number of free zones */ - unsigned short s_tinode; /* total number of free inodes */ - short s_dinfo[4]; /* device information ?? */ - char s_fname[6]; /* file system volume name */ - char s_fpack[6]; /* file system pack name */ - char s_clean; /* set to 0x46 when filesystem is properly unmounted */ - char s_fill[371]; - long s_magic; /* version of file system */ - long s_type; /* type of file system: 1 for 512 byte blocks + char s_flock; /* lock during free block list manipulation */ + char s_ilock; /* lock during inode cache manipulation */ + char s_fmod; /* super-block modified flag */ + char s_ronly; /* flag whether fs is mounted read-only */ + u32 s_time __packed2__; /* time of last super block update */ + u32 s_tfree __packed2__; /* total number of free zones */ + u16 s_tinode; /* total number of free inodes */ + s16 s_dinfo[4]; /* device information ?? */ + char s_fname[6]; /* file system volume name */ + char s_fpack[6]; /* file system pack name */ + char s_clean; /* set to 0x46 when filesystem is properly unmounted */ + char s_fill[371]; + s32 s_magic; /* version of file system */ + s32 s_type; /* type of file system: 1 for 512 byte blocks 2 for 1024 byte blocks */ }; /* Xenix free list block on disk */ struct xenix_freelist_chunk { - unsigned short fl_nfree; /* number of free blocks in fl_free, <= XENIX_NICFREE] */ - unsigned long fl_free[XENIX_NICFREE] __packed2__; + u16 fl_nfree; /* number of free blocks in fl_free, <= XENIX_NICFREE] */ + u32 fl_free[XENIX_NICFREE] __packed2__; }; /* SystemV FS comes in two variants: @@ -116,116 +116,120 @@ struct xenix_freelist_chunk { /* SystemV4 super-block data on disk */ struct sysv4_super_block { - unsigned short s_isize; /* index of first data zone */ - unsigned long s_fsize; /* total number of zones of this fs */ + u16 s_isize; /* index of first data zone */ + u16 s_pad0; + u32 s_fsize; /* total number of zones of this fs */ /* the start of the free block list: */ - unsigned short s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */ - unsigned long s_free[SYSV_NICFREE]; /* first free block list chunk */ + u16 s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */ + u16 s_pad1; + u32 s_free[SYSV_NICFREE]; /* first free block list chunk */ /* the cache of free inodes: */ - unsigned short s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */ + u16 s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */ + u16 s_pad2; sysv_ino_t s_inode[SYSV_NICINOD]; /* some free inodes */ /* locks, not used by Linux: */ - char s_flock; /* lock during free block list manipulation */ - char s_ilock; /* lock during inode cache manipulation */ - char s_fmod; /* super-block modified flag */ - char s_ronly; /* flag whether fs is mounted read-only */ - unsigned long s_time; /* time of last super block update */ - short s_dinfo[4]; /* device information ?? */ - unsigned long s_tfree; /* total number of free zones */ - unsigned short s_tinode; /* total number of free inodes */ - char s_fname[6]; /* file system volume name */ - char s_fpack[6]; /* file system pack name */ - long s_fill[12]; - long s_state; /* file system state: 0x7c269d38-s_time means clean */ - long s_magic; /* version of file system */ - long s_type; /* type of file system: 1 for 512 byte blocks + char s_flock; /* lock during free block list manipulation */ + char s_ilock; /* lock during inode cache manipulation */ + char s_fmod; /* super-block modified flag */ + char s_ronly; /* flag whether fs is mounted read-only */ + u32 s_time; /* time of last super block update */ + s16 s_dinfo[4]; /* device information ?? */ + u32 s_tfree; /* total number of free zones */ + u16 s_tinode; /* total number of free inodes */ + u16 s_pad3; + char s_fname[6]; /* file system volume name */ + char s_fpack[6]; /* file system pack name */ + s32 s_fill[12]; + s32 s_state; /* file system state: 0x7c269d38-s_time means clean */ + s32 s_magic; /* version of file system */ + s32 s_type; /* type of file system: 1 for 512 byte blocks 2 for 1024 byte blocks */ }; /* SystemV4 free list block on disk */ struct sysv4_freelist_chunk { - unsigned short fl_nfree; /* number of free blocks in fl_free, <= SYSV_NICFREE] */ - unsigned long fl_free[SYSV_NICFREE]; + u16 fl_nfree; /* number of free blocks in fl_free, <= SYSV_NICFREE] */ + u32 fl_free[SYSV_NICFREE]; }; /* SystemV2 super-block data on disk */ struct sysv2_super_block { - unsigned short s_isize; /* index of first data zone */ - unsigned long s_fsize __packed2__; /* total number of zones of this fs */ + u16 s_isize; /* index of first data zone */ + u32 s_fsize __packed2__; /* total number of zones of this fs */ /* the start of the free block list: */ - unsigned short s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */ - unsigned long s_free[SYSV_NICFREE]; /* first free block list chunk */ + u16 s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */ + u32 s_free[SYSV_NICFREE]; /* first free block list chunk */ /* the cache of free inodes: */ - unsigned short s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */ + u16 s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */ sysv_ino_t s_inode[SYSV_NICINOD]; /* some free inodes */ /* locks, not used by Linux: */ - char s_flock; /* lock during free block list manipulation */ - char s_ilock; /* lock during inode cache manipulation */ - char s_fmod; /* super-block modified flag */ - char s_ronly; /* flag whether fs is mounted read-only */ - unsigned long s_time __packed2__; /* time of last super block update */ - short s_dinfo[4]; /* device information ?? */ - unsigned long s_tfree __packed2__; /* total number of free zones */ - unsigned short s_tinode; /* total number of free inodes */ - char s_fname[6]; /* file system volume name */ - char s_fpack[6]; /* file system pack name */ - long s_fill[14]; - long s_state; /* file system state: 0xcb096f43 means clean */ - long s_magic; /* version of file system */ - long s_type; /* type of file system: 1 for 512 byte blocks + char s_flock; /* lock during free block list manipulation */ + char s_ilock; /* lock during inode cache manipulation */ + char s_fmod; /* super-block modified flag */ + char s_ronly; /* flag whether fs is mounted read-only */ + u32 s_time __packed2__; /* time of last super block update */ + s16 s_dinfo[4]; /* device information ?? */ + u32 s_tfree __packed2__; /* total number of free zones */ + u16 s_tinode; /* total number of free inodes */ + char s_fname[6]; /* file system volume name */ + char s_fpack[6]; /* file system pack name */ + s32 s_fill[14]; + s32 s_state; /* file system state: 0xcb096f43 means clean */ + s32 s_magic; /* version of file system */ + s32 s_type; /* type of file system: 1 for 512 byte blocks 2 for 1024 byte blocks */ }; /* SystemV2 free list block on disk */ struct sysv2_freelist_chunk { - unsigned short fl_nfree; /* number of free blocks in fl_free, <= SYSV_NICFREE] */ - unsigned long fl_free[SYSV_NICFREE] __packed2__; + u16 fl_nfree; /* number of free blocks in fl_free, <= SYSV_NICFREE] */ + u32 fl_free[SYSV_NICFREE] __packed2__; }; /* Coherent super-block data on disk */ #define COH_NICINOD 100 /* number of inode cache entries */ #define COH_NICFREE 64 /* number of free block list chunk entries */ struct coh_super_block { - unsigned short s_isize; /* index of first data zone */ - coh_ulong s_fsize __packed2__; /* total number of zones of this fs */ + u16 s_isize; /* index of first data zone */ + coh_ulong s_fsize __packed2__; /* total number of zones of this fs */ /* the start of the free block list: */ - unsigned short s_nfree; /* number of free blocks in s_free, <= COH_NICFREE */ - coh_ulong s_free[COH_NICFREE] __packed2__; /* first free block list chunk */ + u16 s_nfree; /* number of free blocks in s_free, <= COH_NICFREE */ + coh_ulong s_free[COH_NICFREE] __packed2__; /* first free block list chunk */ /* the cache of free inodes: */ - unsigned short s_ninode; /* number of free inodes in s_inode, <= COH_NICINOD */ - sysv_ino_t s_inode[COH_NICINOD]; /* some free inodes */ + u16 s_ninode; /* number of free inodes in s_inode, <= COH_NICINOD */ + sysv_ino_t s_inode[COH_NICINOD]; /* some free inodes */ /* locks, not used by Linux: */ - char s_flock; /* lock during free block list manipulation */ - char s_ilock; /* lock during inode cache manipulation */ - char s_fmod; /* super-block modified flag */ - char s_ronly; /* flag whether fs is mounted read-only */ - coh_ulong s_time __packed2__; /* time of last super block update */ - coh_ulong s_tfree __packed2__; /* total number of free zones */ - unsigned short s_tinode; /* total number of free inodes */ - unsigned short s_interleave_m; /* interleave factor */ - unsigned short s_interleave_n; - char s_fname[6]; /* file system volume name */ - char s_fpack[6]; /* file system pack name */ - unsigned long s_unique; /* zero, not used */ + char s_flock; /* lock during free block list manipulation */ + char s_ilock; /* lock during inode cache manipulation */ + char s_fmod; /* super-block modified flag */ + char s_ronly; /* flag whether fs is mounted read-only */ + coh_ulong s_time __packed2__; /* time of last super block update */ + coh_ulong s_tfree __packed2__; /* total number of free zones */ + u16 s_tinode; /* total number of free inodes */ + u16 s_interleave_m; /* interleave factor */ + u16 s_interleave_n; + char s_fname[6]; /* file system volume name */ + char s_fpack[6]; /* file system pack name */ + u32 s_unique; /* zero, not used */ }; /* Coherent free list block on disk */ struct coh_freelist_chunk { - unsigned short fl_nfree; /* number of free blocks in fl_free, <= COH_NICFREE] */ - unsigned long fl_free[COH_NICFREE] __packed2__; + u16 fl_nfree; /* number of free blocks in fl_free, <= COH_NICFREE] */ + u32 fl_free[COH_NICFREE] __packed2__; }; /* SystemV/Coherent inode data on disk */ struct sysv_inode { - unsigned short i_mode; - unsigned short i_nlink; - unsigned short i_uid; - unsigned short i_gid; - unsigned long i_size; + u16 i_mode; + u16 i_nlink; + u16 i_uid; + u16 i_gid; + u32 i_size; union { /* directories, regular files, ... */ - char i_addb[3*(10+1+1+1)+1]; /* zone numbers: max. 10 data blocks, + unsigned char i_addb[3*(10+1+1+1)+1]; /* zone numbers: max. 10 data blocks, * then 1 indirection block, * then 1 double indirection block, * then 1 triple indirection block. @@ -236,14 +240,14 @@ struct sysv_inode { /* named pipes on Coherent */ struct { char p_addp[30]; - short p_pnc; - short p_prx; - short p_pwx; + s16 p_pnc; + s16 p_prx; + s16 p_pwx; } i_p; } i_a; - unsigned long i_atime; /* time of last access */ - unsigned long i_mtime; /* time of last modification */ - unsigned long i_ctime; /* time of creation */ + u32 i_atime; /* time of last access */ + u32 i_mtime; /* time of last modification */ + u32 i_ctime; /* time of creation */ }; /* The admissible values for i_mode are listed in <linux/stat.h> : @@ -301,7 +305,7 @@ extern inline unsigned short to_coh_imode(mode_t mode) /* The number of inodes per block is sb->sv_inodes_per_block = block_size / sizeof(struct sysv_inode) */ /* The number of indirect pointers per block is - sb->sv_ind_per_block = block_size / sizeof(unsigned long) */ + sb->sv_ind_per_block = block_size / sizeof(u32) */ /* SystemV/Coherent directory entry on disk */ diff --git a/include/linux/sysv_fs_i.h b/include/linux/sysv_fs_i.h index 56a63f1ef..990b3543f 100644 --- a/include/linux/sysv_fs_i.h +++ b/include/linux/sysv_fs_i.h @@ -5,11 +5,11 @@ * SystemV/Coherent FS inode data in memory */ struct sysv_inode_info { - unsigned long i_data[10+1+1+1]; /* zone numbers: max. 10 data blocks, - * then 1 indirection block, - * then 1 double indirection block, - * then 1 triple indirection block. - */ + u32 i_data[10+1+1+1]; /* zone numbers: max. 10 data blocks, + * then 1 indirection block, + * then 1 double indirection block, + * then 1 triple indirection block. + */ }; #endif diff --git a/include/linux/sysv_fs_sb.h b/include/linux/sysv_fs_sb.h index 99a7c125d..df886f651 100644 --- a/include/linux/sysv_fs_sb.h +++ b/include/linux/sysv_fs_sb.h @@ -50,21 +50,21 @@ struct sysv_sb_info { different superblock layout. */ char * s_sbd1; /* entire superblock data, for part 1 */ char * s_sbd2; /* entire superblock data, for part 2 */ - unsigned short *s_sb_fic_count; /* pointer to s_sbd->s_ninode */ - unsigned short *s_sb_fic_inodes; /* pointer to s_sbd->s_inode */ - unsigned short *s_sb_total_free_inodes; /* pointer to s_sbd->s_tinode */ - unsigned short *s_sb_flc_count; /* pointer to s_sbd->s_nfree */ - unsigned long *s_sb_flc_blocks; /* pointer to s_sbd->s_free */ - unsigned long *s_sb_total_free_blocks;/* pointer to s_sbd->s_tfree */ - unsigned long *s_sb_time; /* pointer to s_sbd->s_time */ - unsigned long *s_sb_state; /* pointer to s_sbd->s_state, only FSTYPE_SYSV */ + u16 *s_sb_fic_count; /* pointer to s_sbd->s_ninode */ + u16 *s_sb_fic_inodes; /* pointer to s_sbd->s_inode */ + u16 *s_sb_total_free_inodes; /* pointer to s_sbd->s_tinode */ + u16 *s_sb_flc_count; /* pointer to s_sbd->s_nfree */ + u32 *s_sb_flc_blocks; /* pointer to s_sbd->s_free */ + u32 *s_sb_total_free_blocks;/* pointer to s_sbd->s_tfree */ + u32 *s_sb_time; /* pointer to s_sbd->s_time */ + u32 *s_sb_state; /* pointer to s_sbd->s_state, only FSTYPE_SYSV */ /* We keep those superblock entities that don't change here; this saves us an indirection and perhaps a conversion. */ - unsigned long s_firstinodezone; /* index of first inode zone */ - unsigned long s_firstdatazone; /* same as s_sbd->s_isize */ - unsigned long s_ninodes; /* total number of inodes */ - unsigned long s_ndatazones; /* total number of data zones */ - unsigned long s_nzones; /* same as s_sbd->s_fsize */ + u32 s_firstinodezone; /* index of first inode zone */ + u32 s_firstdatazone; /* same as s_sbd->s_isize */ + u32 s_ninodes; /* total number of inodes */ + u32 s_ndatazones; /* total number of data zones */ + u32 s_nzones; /* same as s_sbd->s_fsize */ }; /* The fields s_ind_per_block_2_1, s_toobig_block are currently unused. */ diff --git a/include/linux/tcp.h b/include/linux/tcp.h index eae70d918..9ee718102 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -71,7 +71,7 @@ enum { }; #define TCP_STATE_MASK 0xF -#define TCP_ACTION_FIN 1 << 7 +#define TCP_ACTION_FIN (1 << 7) enum { TCPF_ESTABLISHED = (1 << 1), diff --git a/include/linux/time.h b/include/linux/time.h index d60d8c776..d14feaaad 100644 --- a/include/linux/time.h +++ b/include/linux/time.h @@ -13,17 +13,27 @@ struct timespec { #endif /* _STRUCT_TIMESPEC */ /* - * change timeval to jiffies, trying to avoid the + * Change timeval to jiffies, trying to avoid the * most obvious overflows.. + * + * And some not so obvious. + * + * Note that we don't want to return MAX_LONG, because + * for various timeout reasons we often end up having + * to wait "jiffies+1" in order to guarantee that we wait + * at _least_ "jiffies" - so "jiffies+1" had better still + * be positive. */ +#define MAX_JIFFY_OFFSET ((~0UL >> 1)-1) + static __inline__ unsigned long timespec_to_jiffies(struct timespec *value) { unsigned long sec = value->tv_sec; long nsec = value->tv_nsec; - if (sec > ((long)(~0UL >> 1) / HZ)) - return ~0UL >> 1; + if (sec >= (MAX_JIFFY_OFFSET / HZ)) + return MAX_JIFFY_OFFSET; nsec += 1000000000L / HZ - 1; nsec /= 1000000000L / HZ; return HZ * sec + nsec; diff --git a/include/linux/timer.h b/include/linux/timer.h index 64c461b2e..56f39893e 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h @@ -71,22 +71,26 @@ extern inline void init_timer(struct timer_list * timer) timer->prev = NULL; } +extern inline int timer_pending(struct timer_list * timer) +{ + return timer->prev != NULL; +} + /* * These inlines deal with timer wrapping correctly. You are * strongly encouraged to use them * 1. Because people otherwise forget * 2. Because if the timer wrap changes in future you wont have to * alter your driver code. + * + * Do this with "<0" and ">=0" to only test the sign of the result. A + * good compiler would generate better code (and a really good compiler + * wouldn't care). Gcc is currently neither. */ +#define time_after(a,b) ((long)(b) - (long)(a) < 0) +#define time_before(a,b) time_after(b,a) -extern inline int time_before(unsigned long a, unsigned long b) -{ - return((long)((a) - (b)) < 0L); -} - -extern inline int time_after(unsigned long a, unsigned long b) -{ - return((long)((a) - (b)) > 0L); -} +#define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0) +#define time_before_eq(a,b) time_after_eq(b,a) #endif diff --git a/include/linux/tqueue.h b/include/linux/tqueue.h index a2e1cb369..4d59ee872 100644 --- a/include/linux/tqueue.h +++ b/include/linux/tqueue.h @@ -97,19 +97,27 @@ extern __inline__ void queue_task(struct tq_struct *bh_pointer, */ extern __inline__ void run_task_queue(task_queue *list) { - struct tq_struct *p; + if (*list) { + unsigned long flags; + struct tq_struct *p; - p = xchg(list,NULL); - while (p) { - void *arg; - void (*f) (void *); - struct tq_struct *save_p; - arg = p -> data; - f = p -> routine; - save_p = p; - p = p -> next; - save_p -> sync = 0; - (*f)(arg); + spin_lock_irqsave(&tqueue_lock, flags); + p = *list; + *list = NULL; + spin_unlock_irqrestore(&tqueue_lock, flags); + + while (p) { + void *arg; + void (*f) (void *); + struct tq_struct *save_p; + arg = p -> data; + f = p -> routine; + save_p = p; + p = p -> next; + mb(); + save_p -> sync = 0; + (*f)(arg); + } } } diff --git a/include/linux/tty.h b/include/linux/tty.h index 755d0441c..f0e8e0656 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -9,7 +9,7 @@ * These constants are also useful for user-level apps (e.g., VC * resizing). */ -#define MIN_NR_CONSOLES 1 /* must be at least 1 */ +#define MIN_NR_CONSOLES 1 /* must be at least 1 */ #define MAX_NR_CONSOLES 63 /* serial lines start at 64 */ #define MAX_NR_USER_CONSOLES 63 /* must be root to allocate above this */ /* Note: the ioctl VT_GETSTATE does not work for @@ -87,7 +87,10 @@ struct screen_info { unsigned char blue_pos; /* 0x2b */ unsigned char rsvd_size; /* 0x2c */ unsigned char rsvd_pos; /* 0x2d */ - /* 0x2e -- 0x3f reserved for future expansion */ + unsigned short vesapm_seg; /* 0x2e */ + unsigned short vesapm_off; /* 0x30 */ + unsigned short pages; /* 0x32 */ + /* 0x34 -- 0x3f reserved for future expansion */ }; extern struct screen_info screen_info; @@ -353,11 +356,12 @@ extern int stli_init(void); extern int riscom8_init(void); extern int specialix_init(void); extern int espserial_init(void); +extern int macserial_init(void); extern int tty_paranoia_check(struct tty_struct *tty, kdev_t device, const char *routine); extern char *tty_name(struct tty_struct *tty, char *buf); -extern void tty_wait_until_sent(struct tty_struct * tty, int timeout); +extern void tty_wait_until_sent(struct tty_struct * tty, long timeout); extern int tty_check_change(struct tty_struct * tty); extern void stop_tty(struct tty_struct * tty); extern void start_tty(struct tty_struct * tty); @@ -395,10 +399,6 @@ extern long serial_console_init(long kmem_start, long kmem_end); extern int pcxe_open(struct tty_struct *tty, struct file *filp); -/* console.c */ - -extern void update_screen(int new_console); - /* printk.c */ extern void console_print(const char *); diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h index 1b8d98b22..0f5975b6e 100644 --- a/include/linux/ufs_fs.h +++ b/include/linux/ufs_fs.h @@ -16,6 +16,8 @@ * * NeXTstep support added on February 5th 1998 by * Niels Kristian Bech Jensen <nkbj@image.dk>. + * + * Write support by Daniel Pirkl <daniel.pirkl@email.cz> */ #ifndef __LINUX_UFS_FS_H @@ -67,7 +69,7 @@ /* From here to next blank line, s_flags for ufs_sb_info */ /* endianness */ -#define UFS_BYTESEX 0x00000001 /* mask; leave room to 0xF */ +#define UFS_BYTESEX 0x00000001 /* mask; leave room to 0xF */ #if defined(__LITTLE_ENDIAN) || defined(__BIG_ENDIAN) /* these are for sane architectures */ #define UFS_NATIVE_ENDIAN 0x00000000 @@ -91,20 +93,34 @@ #define UFS_ST_OLD 0x00000000 #define UFS_ST_44BSD 0x00000100 #define UFS_ST_SUN 0x00000200 -#define UFS_ST_NEXT 0x00000400 -/* filesystem flavors (combo of features) */ -#define UFS_FEATURES 0x00FFFFF0 /* room for extension */ -#define UFS_VANILLA 0x00000000 -#define UFS_OLD 0x00000000 /* 4.2BSD */ -#define UFS_44BSD 0x00000130 -#define UFS_HURD 0x00000130 -#define UFS_SUN 0x00000200 -#define UFS_NEXT 0x00000400 +/*cylinder group encoding */ +#define UFS_CG_MASK 0x00003000 /* mask for the following */ +#define UFS_CG_OLD 0x00000000 +#define UFS_CG_44BSD 0x00002000 +#define UFS_CG_SUN 0x00001000 /* fs_inodefmt options */ #define UFS_42INODEFMT -1 #define UFS_44INODEFMT 2 +/* mount options */ +#define UFS_MOUNT_ONERROR 0x0000000F +#define UFS_MOUNT_ONERROR_PANIC 0x00000001 +#define UFS_MOUNT_ONERROR_LOCK 0x00000002 +#define UFS_MOUNT_ONERROR_UMOUNT 0x00000004 +#define UFS_MOUNT_ONERROR_REPAIR 0x00000008 + +#define UFS_MOUNT_UFSTYPE 0x000000F0 +#define UFS_MOUNT_UFSTYPE_OLD 0x00000010 +#define UFS_MOUNT_UFSTYPE_44BSD 0x00000020 +#define UFS_MOUNT_UFSTYPE_SUN 0x00000040 +#define UFS_MOUNT_UFSTYPE_NEXT 0x00000080 + + +#define ufs_clear_opt(o,opt) o &= ~UFS_MOUNT_##opt +#define ufs_set_opt(o,opt) o |= UFS_MOUNT_##opt +#define ufs_test_opt(o,opt) ((o) & UFS_MOUNT_##opt) + /* * MINFREE gives the minimum acceptable percentage of file system * blocks which may be free. If the freelist drops below this level @@ -202,6 +218,19 @@ struct ufs_timeval { __s32 tv_usec; }; +/* + * File types + */ +#define DT_UNKNOWN 0 +#define DT_FIFO 1 +#define DT_CHR 2 +#define DT_DIR 4 +#define DT_BLK 6 +#define DT_REG 8 +#define DT_LNK 10 +#define DT_SOCK 12 +#define DT_WHT 14 + struct ufs_dir_entry { __u32 d_ino; /* inode number of this entry */ __u16 d_reclen; /* length of this entry */ @@ -377,7 +406,15 @@ struct ufs_cylinder_group { __u32 cg_iusedoff; /* (char) used inode map */ __u32 cg_freeoff; /* (u_char) free block map */ __u32 cg_nextfreeoff; /* (u_char) next available space */ - __u32 cg_sparecon[16]; /* reserved for future use */ + union { + struct { + __u32 cg_clustersumoff; /* (u_int32) counts of avail clusters */ + __u32 cg_clusteroff; /* (u_int8) free cluster map */ + __u32 cg_nclusterblks; /* number of clusters this cg */ + __u32 cg_sparecon[13]; /* reserved for future use */ + } cg_44; + __u32 cg_sparecon[16]; /* reserved for future use */ + } cg_u; __u8 cg_space[1]; /* space for cylinder group maps */ /* actually longer */ }; @@ -393,7 +430,7 @@ struct ufs_inode { __u16 ui_suid; /* 0x4 */ __u16 ui_sgid; /* 0x6 */ } oldids; - __u32 ui_inumber; /* 0x4 lsf: inode number */ + __u32 ui_inumber; /* 0x4 lsf: inode number */ __u32 ui_author; /* 0x4 GNU HURD: author */ } ui_u1; __u64 ui_size; /* 0x8 */ @@ -412,22 +449,22 @@ struct ufs_inode { __u32 ui_gen; /* 0x6c like ext2 i_version, for NFS support */ union { struct { - __u32 ui_shadow;/* 0x70 shadow inode with security data */ - __u32 ui_uid; /* 0x74 long EFT version of uid */ - __u32 ui_gid; /* 0x78 long EFT version of gid */ - __u32 ui_oeftflag;/* 0x7c reserved */ + __u32 ui_shadow; /* 0x70 shadow inode with security data */ + __u32 ui_uid; /* 0x74 long EFT version of uid */ + __u32 ui_gid; /* 0x78 long EFT version of gid */ + __u32 ui_oeftflag; /* 0x7c reserved */ } ui_sun; struct { - __u32 ui_uid; /* 0x70 File owner */ - __u32 ui_gid; /* 0x74 File group */ - __s32 ui_spare[2];/* 0x78 reserved */ + __u32 ui_uid; /* 0x70 File owner */ + __u32 ui_gid; /* 0x74 File group */ + __s32 ui_spare[2]; /* 0x78 reserved */ } ui_44; struct { - __u32 ui_uid; /* 0x70 */ - __u32 ui_gid; /* 0x74 */ - __u16 ui_modeh;/* 0x78 mode high bits */ - __u16 ui_spare;/* 0x7A unused */ - __u32 ui_trans;/* 0x7c filesystem translator */ + __u32 ui_uid; /* 0x70 */ + __u32 ui_gid; /* 0x74 */ + __u16 ui_modeh; /* 0x78 mode high bits */ + __u16 ui_spare; /* 0x7A unused */ + __u32 ui_trans; /* 0x7c filesystem translator */ } ui_hurd; } ui_u3; }; @@ -480,7 +517,6 @@ extern void ufs_read_inode (struct inode *); extern void ufs_put_inode (struct inode *); extern void ufs_write_inode (struct inode *); extern int ufs_sync_inode (struct inode *); -extern void ufs_print_inode (struct inode *); extern void ufs_write_inode (struct inode *); extern void ufs_delete_inode (struct inode *); extern struct buffer_head * ufs_getfrag (struct inode *, unsigned, int, int *); @@ -503,10 +539,8 @@ extern struct file_system_type ufs_fs_type; extern void ufs_warning (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); extern void ufs_error (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); extern void ufs_panic (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); - extern int init_ufs_fs(void); extern void ufs_write_super (struct super_block *); -extern void ufs_print_cylinder_stuff(struct ufs_cylinder_group *, __u32); /* symlink.c */ extern struct inode_operations ufs_symlink_inode_operations; diff --git a/include/linux/ufs_fs_i.h b/include/linux/ufs_fs_i.h index e270b71aa..df4c75755 100644 --- a/include/linux/ufs_fs_i.h +++ b/include/linux/ufs_fs_i.h @@ -8,8 +8,6 @@ * * NeXTstep support added on February 5th 1998 by * Niels Kristian Bech Jensen <nkbj@image.dk>. - * - * write support by Daniel Pirkl <daniel.pirkl@email.cz> */ #ifndef _LINUX_UFS_FS_I_H diff --git a/include/linux/ufs_fs_sb.h b/include/linux/ufs_fs_sb.h index 3f89d4079..6ad0e0d96 100644 --- a/include/linux/ufs_fs_sb.h +++ b/include/linux/ufs_fs_sb.h @@ -8,8 +8,7 @@ * * $Id: ufs_fs_sb.h,v 1.8 1998/05/06 12:04:40 jj Exp $ * - * Write support by Daniel Pirkl (daniel.pirkl@email.cz) - * Charles University (Prague), Faculty of Mathematics and Physics + * Write support by Daniel Pirkl <daniel.pirkl@email.cz> */ #ifndef __LINUX_UFS_FS_SB_H @@ -41,8 +40,10 @@ struct ufs_cg_private_info { __u32 c_iusedoff; /* (char) used inode map */ __u32 c_freeoff; /* (u_char) free block map */ __u32 c_nextfreeoff; /* (u_char) next available space */ + __u32 c_clustersumoff;/* (u_int32) counts of avail clusters */ + __u32 c_clusteroff; /* (u_int8) free cluster map */ + __u32 c_nclusterblks; /* number of clusters this cg */ }; - struct ufs_sb_private_info { struct ufs_buffer_head s_ubh; /* buffer containing super block */ @@ -83,6 +84,7 @@ struct ufs_sb_private_info { __u32 s_ipg; /* inodes per group */ __u32 s_fpg; /* fragments per group */ __u32 s_cpc; /* cyl per cycle in postbl */ + __s32 s_contigsumsize;/* size of cluster summary array, 44bsd */ __s64 s_qbmask; /* ~usb_bmask */ __s64 s_qfmask; /* ~usb_fmask */ __s32 s_postblformat; /* format of positional layout tables */ @@ -102,11 +104,14 @@ struct ufs_sb_private_info { __u32 s_nspb; /* number of sector per block */ __u32 s_inopf; /* inodes per fragment */ __u32 s_sbbase; /* offset of NeXTstep superblock */ + __u32 s_bpf; /* bits per fragment */ + __u32 s_bpfshift; /* bits per fragment shift*/ + __u32 s_bpfmask; /* bits per fragment mask */ }; -#define UFS_MAX_GROUP_LOADED 1 -#define UFS_CGNO_EMPTY uspi->s_ncg +#define UFS_MAX_GROUP_LOADED 8 +#define UFS_CGNO_EMPTY ((unsigned)-1) struct ufs_sb_info { struct ufs_sb_private_info * s_uspi; @@ -119,6 +124,7 @@ struct ufs_sb_info { struct ufs_cg_private_info * s_ucpi[UFS_MAX_GROUP_LOADED]; unsigned s_cgno[UFS_MAX_GROUP_LOADED]; unsigned short s_cg_loaded; + unsigned s_mount_opt; }; /* diff --git a/include/linux/umsdos_fs.h b/include/linux/umsdos_fs.h index 7a170c115..14bdb829d 100644 --- a/include/linux/umsdos_fs.h +++ b/include/linux/umsdos_fs.h @@ -1,7 +1,9 @@ #ifndef LINUX_UMSDOS_FS_H #define LINUX_UMSDOS_FS_H -/* #define UMSDOS_DEBUG 1 */ + +#define UMS_DEBUG 1 /* define for check_* functions */ +/*#define UMSDOS_DEBUG 1*/ #define UMSDOS_PARANOIA 1 #define UMSDOS_VERSION 0 diff --git a/include/linux/umsdos_fs.p b/include/linux/umsdos_fs.p index 44a6eec2b..1bf76e560 100644 --- a/include/linux/umsdos_fs.p +++ b/include/linux/umsdos_fs.p @@ -2,32 +2,16 @@ void check_page_tables (void); /* dir.c 22/06/95 00.22.12 */ -int compat_msdos_create(struct inode *dir, - const char *name, - int len, - int mode, - struct inode **inode); int dummy_dir_read ( struct file *filp, char *buf, size_t size, loff_t *count); -void umsdos_lookup_patch_new(struct dentry *, struct umsdos_dirent *, off_t); -void umsdos_lookup_patch (struct inode *dir, - struct inode *inode, - struct umsdos_dirent *entry, - off_t emd_pos); -int umsdos_dentry_to_entry (struct dentry *, struct umsdos_dirent *); -int umsdos_inode2entry (struct inode *dir, - struct inode *inode, - struct umsdos_dirent *entry); -int umsdos_locate_path (struct inode *inode, char *path); +char * umsdos_d_path(struct dentry *, char *, int); +void umsdos_lookup_patch_new(struct dentry *, struct umsdos_info *); int umsdos_is_pseudodos (struct inode *dir, struct dentry *dentry); -int umsdos_lookup_x ( - struct inode *dir, - struct dentry *dentry, - int nopseudo); +int umsdos_lookup_x ( struct inode *dir, struct dentry *dentry, int nopseudo); int UMSDOS_lookup(struct inode *, struct dentry *); -struct dentry *umsdos_lookup_dentry(struct dentry *, char *, int); +struct dentry *umsdos_lookup_dentry(struct dentry *, char *, int, int); struct dentry *umsdos_solve_hlink (struct dentry *hlink); @@ -51,7 +35,6 @@ ssize_t umsdos_emd_dir_read (struct file *filp, struct dentry *umsdos_get_emd_dentry(struct dentry *); int umsdos_have_emd(struct dentry *); int umsdos_make_emd(struct dentry *); -struct inode *umsdos_emd_dir_lookup (struct inode *dir, int creat); int umsdos_emd_dir_readentry (struct file *, struct umsdos_dirent *); int umsdos_newentry (struct dentry *, struct umsdos_info *); int umsdos_newhidden (struct dentry *, struct umsdos_info *); @@ -62,36 +45,19 @@ int umsdos_isempty (struct dentry *); /* file.c 25/01/95 02.25.38 */ /* inode.c 12/06/95 09.49.40 */ -inline struct dentry *geti_dentry (struct inode *inode); -void checkd_inode (struct inode *inode); -void check_inode (struct inode *inode); -void check_dentry (struct dentry *dentry); -void check_dentry_path (struct dentry *dentry, const char *desc); void fill_new_filp (struct file *filp, struct dentry *dentry); -struct dentry *creat_dentry (const char *name, - const int len, - struct inode *inode, - struct dentry *parent); void UMSDOS_read_inode (struct inode *); void UMSDOS_write_inode (struct inode *); int UMSDOS_notify_change (struct dentry *, struct iattr *attr); +int umsdos_notify_change_locked(struct dentry *, struct iattr *attr); void UMSDOS_put_inode (struct inode *); int UMSDOS_statfs (struct super_block *, struct statfs *, int); struct super_block *UMSDOS_read_super (struct super_block *, void *, int); void UMSDOS_put_super (struct super_block *); -struct dentry *compat_umsdos_real_lookup (struct dentry *d_dir, - const char *name, - int len); -int umsdos_real_lookup(struct inode *, struct dentry *); void umsdos_setup_dir(struct dentry *); -void umsdos_setup_dir_inode (struct inode *inode); -void umsdos_set_dirinfo (struct inode *inode, - struct inode *dir, - off_t f_pos); -int umsdos_isinit (struct inode *inode); +void umsdos_set_dirinfo_new(struct dentry *, off_t); void umsdos_patch_dentry_inode (struct dentry *, off_t); -void umsdos_patch_inode (struct inode *, struct inode *, off_t); int umsdos_get_dirowner (struct inode *inode, struct inode **result); /* ioctl.c 22/06/95 00.22.08 */ @@ -99,6 +65,7 @@ int UMSDOS_ioctl_dir (struct inode *dir, struct file *filp, unsigned int cmd, unsigned long data); + /* mangle.c 25/01/95 02.25.38 */ void umsdos_manglename (struct umsdos_info *info); int umsdos_evalrecsize (int len); @@ -138,9 +105,13 @@ int UMSDOS_rename (struct inode *old_dir, struct dentry *new_dentry); /* rdir.c 22/03/95 03.31.42 */ -int umsdos_rlookup_x (struct inode *dir, - struct dentry *dentry, - int nopseudo); -int UMSDOS_rlookup (struct inode *dir, - struct dentry *dentry); +int umsdos_rlookup_x (struct inode *dir, struct dentry *dentry, int nopseudo); +int UMSDOS_rlookup (struct inode *dir, struct dentry *dentry); + /* symlink.c 23/01/95 03.38.30 */ + +/* check.c */ +void checkd_inode (struct inode *inode); +void check_inode (struct inode *inode); +void check_dentry (struct dentry *dentry); +void check_dentry_path (struct dentry *dentry, const char *desc); diff --git a/include/linux/umsdos_fs_i.h b/include/linux/umsdos_fs_i.h index dea618561..111fd9137 100644 --- a/include/linux/umsdos_fs_i.h +++ b/include/linux/umsdos_fs_i.h @@ -62,12 +62,14 @@ struct umsdos_inode_info { struct msdos_inode_info msdos_info; struct pipe_inode_info pipe_info; struct dir_locking_info dir_info; - } u; /* Simply a filler, never referenced by fs/umsdos/... */ - unsigned long i_dir_owner; /* Inode of the dir which hold this entry */ - unsigned long i_emd_owner; /* Inode of the EMD file of i_dir_owner */ + } u; + int i_patched; /* Inode has been patched */ + int i_is_hlink; /* Resolved hardlink inode? */ + unsigned long i_emd_owner; /* Is this the EMD file inode? */ off_t pos; /* Entry offset in the emd_owner file */ - /* The rest is used only if this inode describe a directory */ - unsigned long i_emd_dir; /* Inode of the EMD file of this inode */ + /* The rest is used only if this inode describes a directory */ + struct dentry *i_emd_dentry; /* EMD dentry for this directory */ + unsigned long i_emd_dir; /* Inode of the EMD file */ }; #endif diff --git a/include/linux/videodev.h b/include/linux/videodev.h index e089d607e..7fe9f2d84 100644 --- a/include/linux/videodev.h +++ b/include/linux/videodev.h @@ -48,6 +48,7 @@ extern void video_unregister_device(struct video_device *); #define VID_TYPE_SCALES 128 /* Scalable */ #define VID_TYPE_MONOCHROME 256 /* Monochrome only */ #define VID_TYPE_SUBCAPTURE 512 /* Can capture subareas of the image */ +#define VID_TYPE_OUTPUT 1024 /* Can output video data */ struct video_capability { @@ -158,6 +159,9 @@ struct video_window struct video_clip *clips; /* Set only */ int clipcount; #define VIDEO_WINDOW_INTERLACE 1 +#define VIDEO_CLIP_BITMAP -1 +/* bitmap is 1024x625, a '1' bit represents a clipped pixel */ +#define VIDEO_CLIPMAP_SIZE (128 * 625) }; struct video_capture @@ -256,6 +260,7 @@ struct video_unit #define VID_HARDWARE_RTRACK2 13 #define VID_HARDWARE_PERMEDIA2 14 /* Reserved for Permedia2 */ #define VID_HARDWARE_RIVA128 15 /* Reserved for RIVA 128 */ +#define VID_HARDWARE_PLANB 16 /* PowerMac motherboard video-in */ /* * Initialiser list diff --git a/include/linux/vt_buffer.h b/include/linux/vt_buffer.h index a26c8090d..df0ee6ef1 100644 --- a/include/linux/vt_buffer.h +++ b/include/linux/vt_buffer.h @@ -16,9 +16,6 @@ #include <linux/config.h> #ifdef CONFIG_VGA_CONSOLE -#if !defined(CONFIG_FB) && !defined(CONFIG_FB_MODULE) -#define VT_BUF_VRAM_ONLY -#endif #include <asm/vga.h> #endif diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h index e4f48e908..e1b727680 100644 --- a/include/linux/vt_kern.h +++ b/include/linux/vt_kern.h @@ -35,27 +35,29 @@ void (*kd_mksound)(unsigned int hz, unsigned int ticks); /* console.c */ struct console_font_op; +struct consw; -int vc_allocate(unsigned int console, int init); +int vc_allocate(unsigned int console); int vc_cons_allocated(unsigned int console); int vc_resize(unsigned int lines, unsigned int cols, unsigned int first, unsigned int last); #define vc_resize_all(l, c) vc_resize(l, c, 0, MAX_NR_CONSOLES-1) #define vc_resize_con(l, c, x) vc_resize(l, c, x, x) void vc_disallocate(unsigned int console); -void poke_blanked_console(void); -void set_vesa_blanking(unsigned long arg); -void vesa_blank(void); -void vesa_powerdown(void); void reset_palette(int currcons); -void set_palette(void); -void do_blank_screen(int nopowersave); +void set_palette(int currcons); +void do_blank_screen(int gfx_mode); +void unblank_screen(void); +void poke_blanked_console(void); int con_font_op(int currcons, struct console_font_op *op); int con_set_cmap(unsigned char *cmap); int con_get_cmap(unsigned char *cmap); void scrollback(int); void scrollfront(int); void update_region(int currcons, unsigned long start, int count); +void redraw_screen(int new_console, int is_switch); +#define update_screen(x) redraw_screen(x, 0) +#define switch_screen(x) redraw_screen(x, 1) struct tty_struct; int tioclinux(struct tty_struct *tty, unsigned long arg); @@ -75,6 +77,7 @@ int con_get_unimap(int currcons, ushort ct, ushort *uct, struct unipair *list); int con_set_default_unimap(int currcons); void con_free_unimap(int currcons); void con_protect_unimap(int currcons, int rdonly); +int con_copy_unimap(int dstcons, int srccons); /* vt.c */ diff --git a/include/linux/wanrouter.h b/include/linux/wanrouter.h index ed38830ce..fd63868f9 100644 --- a/include/linux/wanrouter.h +++ b/include/linux/wanrouter.h @@ -319,7 +319,7 @@ typedef struct wan_device void* private; /* -> driver private data */ /****** hardware configuration ******/ unsigned ioport; /* adapter I/O port base #1 */ - unsigned long maddr; /* dual-port memory address */ + void * maddr; /* dual-port memory address */ unsigned msize; /* dual-port memory size */ int irq; /* interrupt request level */ int dma; /* DMA request level */ diff --git a/include/linux/wavefront.h b/include/linux/wavefront.h index 736fc2747..f5f4052d6 100644 --- a/include/linux/wavefront.h +++ b/include/linux/wavefront.h @@ -150,10 +150,6 @@ typedef unsigned char UCHAR8; #define WF_MIDI_VIRTUAL_IS_EXTERNAL 0x2 #define WF_MIDI_IN_TO_SYNTH_DISABLED 0x4 -/* See wavefront.c for details */ - -#define WAVEFRONT_MAX_DEVICES 1 /* How many WaveFront cards we can handle */ - /* slot indexes for struct address_info: makes code a little more mnemonic */ #define WF_SYNTH_SLOT 0 @@ -502,11 +498,11 @@ typedef union wf_any { wavefront_drum d; } wavefront_any; -/* Hannu Savolainen hoped that his "patch_info" struct in soundcard.h - might work for other wavetable-based patch-loading situations. - Alas, his fears were correct. The WaveFront doesn't even come with - just "patches", but several different kinds of structures that - control the process of generating sound. +/* Hannu Solvainen hoped that his "patch_info" struct in soundcard.h + might work for other wave-table based patch loading situations. + Alas, his fears were correct. The WaveFront doesn't even come with + just "patches", but several different kind of structures that + control the sound generation process. */ typedef struct wf_patch_info { @@ -662,7 +658,7 @@ typedef struct wf_fx_info { /* Allow direct user-space control over FX memory/coefficient data. In theory this could be used to download the FX microprogram, - but it would be a little slower, and involve some weird code. + but it would be a little slower, and involve some wierd code. */ #define WFFX_MEMSET 69 diff --git a/include/linux/x25.h b/include/linux/x25.h index 0435e9701..6f3f300b0 100644 --- a/include/linux/x25.h +++ b/include/linux/x25.h @@ -5,8 +5,6 @@ #ifndef X25_KERNEL_H #define X25_KERNEL_H -#define PF_X25 AF_X25 - #define SIOCX25GSUBSCRIP (SIOCPROTOPRIVATE + 0) #define SIOCX25SSUBSCRIP (SIOCPROTOPRIVATE + 1) #define SIOCX25GFACILITIES (SIOCPROTOPRIVATE + 2) diff --git a/include/linux/zorro.h b/include/linux/zorro.h index e156b5bac..d2b68111f 100644 --- a/include/linux/zorro.h +++ b/include/linux/zorro.h @@ -399,6 +399,7 @@ typedef __u32 zorro_id; #define ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_REG ZORRO_ID(VILLAGE_TRONIC, 0x17, 0) #define ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z3 ZORRO_ID(VILLAGE_TRONIC, 0x18, 0) #define ZORRO_PROD_VILLAGE_TRONIC_ARIADNE ZORRO_ID(VILLAGE_TRONIC, 0xC9, 0) +#define ZORRO_PROD_VILLAGE_TRONIC_ARIADNE2 ZORRO_ID(VILLAGE_TRONIC, 0xCA, 0) #define ZORRO_MANUF_UTILITIES_UNLIMITED 0x087B #define ZORRO_PROD_UTILITIES_UNLIMITED_EMPLANT_DELUXE ZORRO_ID(UTILITIES_UNLIMITED, 0x15, 0) @@ -427,8 +428,8 @@ typedef __u32 zorro_id; #define ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE ZORRO_ID(M_TECH_GERMANY, 0x24, 0) #define ZORRO_MANUF_GREAT_VALLEY_PRODUCTS_4 0x0891 -#define ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_REG ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x01, 0) -#define ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_RAM ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x02, 0) +#define ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_RAM ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x01, 0) +#define ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_REG ZORRO_ID(GREAT_VALLEY_PRODUCTS_4, 0x02, 0) #define ZORRO_MANUF_APOLLO_1 0x0892 #define ZORRO_PROD_APOLLO_A1200 ZORRO_ID(APOLLO_1, 0x01, 0) diff --git a/include/net/ip.h b/include/net/ip.h index 63ef8b0a2..52686031e 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -166,7 +166,7 @@ extern __inline__ void ip_send(struct sk_buff *skb) ip_finish_output(skb); } -static __inline__ +extern __inline__ int ip_decrease_ttl(struct iphdr *iph) { u16 check = iph->check; @@ -177,6 +177,14 @@ int ip_decrease_ttl(struct iphdr *iph) return --iph->ttl; } +extern __inline__ +int ip_dont_fragment(struct sock *sk, struct dst_entry *dst) +{ + return (sk->ip_pmtudisc == IP_PMTUDISC_DO || + (sk->ip_pmtudisc == IP_PMTUDISC_WANT && + !(dst->mxlock&(1<<RTAX_MTU)))); +} + /* * Map a multicast IP onto multicast MAC for type ethernet. */ @@ -233,7 +241,10 @@ extern int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, extern int ip_getsockopt(struct sock *sk, int level, int optname, char *optval, int *optlen); extern int ip_ra_control(struct sock *sk, unsigned char on, void (*destructor)(struct sock *)); -extern int ipv4_backlog_rcv(struct sock *sk, struct sk_buff *skb); - +extern int ip_recv_error(struct sock *sk, struct msghdr *msg, int len); +extern void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err, + u16 port, u32 info, u8 *payload); +extern void ip_local_error(struct sock *sk, int err, u32 daddr, u16 dport, + u32 info); #endif /* _IP_H */ diff --git a/include/net/ip_autofw.h b/include/net/ip_autofw.h deleted file mode 100644 index feeec7bb1..000000000 --- a/include/net/ip_autofw.h +++ /dev/null @@ -1,33 +0,0 @@ -#include <linux/types.h> -#include <linux/kernel.h> - -#ifndef _IP_AUTOFW_H -#define _IP_AUTOFW_H - -#define IP_AUTOFW_EXPIRE 15*HZ - -#define IP_FWD_RANGE 1 -#define IP_FWD_PORT 2 -#define IP_FWD_DIRECT 3 - -#define IP_AUTOFW_ACTIVE 1 -#define IP_AUTOFW_USETIME 2 -#define IP_AUTOFW_SECURE 4 - -struct ip_autofw { - struct ip_autofw * next; - __u16 type; - __u16 low; - __u16 hidden; - __u16 high; - __u16 visible; - __u16 protocol; - __u32 lastcontact; - __u32 where; - __u16 ctlproto; - __u16 ctlport; - __u16 flags; - struct timer_list timer; -}; -int ip_autofw_init(void); -#endif /* _IP_AUTOFW_H */ diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index b79e4d0fb..5c8d6bf8e 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h @@ -27,17 +27,10 @@ struct kern_rta void *rta_gw; u32 *rta_priority; void *rta_prefsrc; -#ifdef CONFIG_RTNL_OLD_IFINFO - unsigned *rta_window; - unsigned *rta_rtt; - unsigned *rta_mtu; - unsigned char *rta_ifname; -#else struct rtattr *rta_mx; struct rtattr *rta_mp; unsigned char *rta_protoinfo; unsigned char *rta_flow; -#endif struct rta_cacheinfo *rta_ci; }; @@ -69,17 +62,12 @@ struct fib_info unsigned fib_flags; int fib_protocol; u32 fib_prefsrc; -#ifdef CONFIG_RTNL_OLD_IFINFO - unsigned fib_mtu; - unsigned fib_rtt; - unsigned fib_window; -#else + u32 fib_priority; #define FIB_MAX_METRICS RTAX_RTT unsigned fib_metrics[FIB_MAX_METRICS]; #define fib_mtu fib_metrics[RTAX_MTU-1] #define fib_window fib_metrics[RTAX_WINDOW-1] #define fib_rtt fib_metrics[RTAX_RTT-1] -#endif int fib_nhs; #ifdef CONFIG_IP_ROUTE_MULTIPATH int fib_power; diff --git a/include/net/ip_masq.h b/include/net/ip_masq.h index 716eea2ef..03c65fddc 100644 --- a/include/net/ip_masq.h +++ b/include/net/ip_masq.h @@ -2,7 +2,7 @@ * IP masquerading functionality definitions */ -#include <linux/config.h> /* for CONFIG_IP_MASQ_NDEBUG */ +#include <linux/config.h> /* for CONFIG_IP_MASQ_DEBUG */ #ifndef _IP_MASQ_H #define _IP_MASQ_H @@ -36,18 +36,27 @@ */ #define MASQUERADE_EXPIRE_ICMP 125*HZ -#define IP_MASQ_F_OUT_SEQ 0x01 /* must do output seq adjust */ -#define IP_MASQ_F_IN_SEQ 0x02 /* must do input seq adjust */ -#define IP_MASQ_F_NO_DPORT 0x04 /* no dport set yet */ -#define IP_MASQ_F_NO_DADDR 0x08 /* no daddr yet */ -#define IP_MASQ_F_HASHED 0x10 /* hashed entry */ - -#define IP_MASQ_F_NO_SPORT 0x200 /* no sport set yet */ -#define IP_MASQ_F_NO_REPLY 0x800 /* no reply yet from outside */ -#define IP_MASQ_F_MPORT 0x1000 /* own mport specified */ +#define IP_MASQ_MOD_CTL 0x00 +#define IP_MASQ_USER_CTL 0x01 #ifdef __KERNEL__ +#define IP_MASQ_TAB_SIZE 256 + +#define IP_MASQ_F_NO_DADDR 0x0001 /* no daddr yet */ +#define IP_MASQ_F_NO_DPORT 0x0002 /* no dport set yet */ +#define IP_MASQ_F_NO_SADDR 0x0004 /* no sport set yet */ +#define IP_MASQ_F_NO_SPORT 0x0008 /* no sport set yet */ + +#define IP_MASQ_F_NO_REPLY 0x0010 /* no reply yet from outside */ + +#define IP_MASQ_F_HASHED 0x0100 /* hashed entry */ +#define IP_MASQ_F_OUT_SEQ 0x0200 /* must do output seq adjust */ +#define IP_MASQ_F_IN_SEQ 0x0400 /* must do input seq adjust */ + +#define IP_MASQ_F_MPORT 0x1000 /* own mport specified */ +#define IP_MASQ_F_USER 0x2000 /* from uspace */ + /* * Delta seq. info structure * Each MASQ struct has 2 (output AND input seq. changes). @@ -81,7 +90,8 @@ struct ip_masq { }; /* - * timeout values + * Timeout values + * ipchains holds a copy of this definition */ struct ip_fw_masq { @@ -90,8 +100,13 @@ struct ip_fw_masq { int udp_timeout; }; -extern struct ip_fw_masq *ip_masq_expire; - +union ip_masq_tphdr { + unsigned char *raw; + struct udphdr *uh; + struct tcphdr *th; + struct icmphdr *icmph; + __u16 *portp; +}; /* * [0]: UDP free_ports * [1]: TCP free_ports @@ -121,7 +136,18 @@ extern void ip_masq_control_add(struct ip_masq *ms, struct ip_masq* ctl_ms); extern void ip_masq_control_del(struct ip_masq *ms); extern struct ip_masq * ip_masq_control_get(struct ip_masq *ms); +struct ip_masq_ctl; + +struct ip_masq_hook { + int (*ctl)(int, struct ip_masq_ctl *, int); + int (*info)(char *, char **, off_t, int, int); +}; +extern struct ip_masq *ip_masq_m_tab[IP_MASQ_TAB_SIZE]; +extern struct ip_masq *ip_masq_s_tab[IP_MASQ_TAB_SIZE]; +extern const char * ip_masq_state_name(int state); +extern struct ip_masq_hook *ip_masq_user_hook; +extern u32 ip_masq_select_addr(struct device *dev, u32 dst, int scope); /* * * IP_MASQ_APP: IP application masquerading definitions @@ -201,55 +227,26 @@ static __inline__ struct ip_masq * ip_masq_out_get_iph(const struct iphdr *iph) extern void ip_masq_put(struct ip_masq *ms); -/* - * Locking stuff - */ - - -static __inline__ void ip_masq_lock(atomic_t *lock, int rw) -{ -#if 0 - if (rw) -#endif - start_bh_atomic(); - atomic_inc(lock); -} - -static __inline__ void ip_masq_unlock(atomic_t *lock, int rw) -{ - atomic_dec(lock); -#if 0 - if (rw) -#endif - end_bh_atomic(); -} - +extern rwlock_t __ip_masq_lock; + +#ifdef __SMP__ +#define read_lock_bh(lock) do { start_bh_atomic(); read_lock(lock); \ + } while (0) +#define read_unlock_bh(lock) do { read_unlock(lock); end_bh_atomic(); \ + } while (0) +#define write_lock_bh(lock) do { start_bh_atomic(); write_lock(lock); \ + } while (0) +#define write_unlock_bh(lock) do { write_unlock(lock); end_bh_atomic(); \ + } while (0) +#else +#define read_lock_bh(lock) start_bh_atomic() +#define read_unlock_bh(lock) end_bh_atomic() +#define write_lock_bh(lock) start_bh_atomic() +#define write_unlock_bh(lock) end_bh_atomic() +#endif /* - * Sleep-able lockzzz... - */ -static __inline__ void ip_masq_lockz(atomic_t *lock, struct wait_queue ** waitq, int rw) -{ - if (rw) - while(atomic_read(lock)) sleep_on(waitq); - ip_masq_lock(lock, rw); -} - -static __inline__ void ip_masq_unlockz(atomic_t *lock, struct wait_queue ** waitq, int rw) -{ - ip_masq_unlock(lock, rw); - if (rw) - wake_up(waitq); -} - -/* - * Perfect for winning races ... ;) + * */ -static __inline__ int ip_masq_nlocks(atomic_t *lock) -{ - return atomic_read(lock); -} - -extern atomic_t __ip_masq_lock; /* * Debugging stuff @@ -257,7 +254,7 @@ extern atomic_t __ip_masq_lock; extern int ip_masq_get_debug_level(void); -#ifndef CONFIG_IP_MASQ_NDEBUG +#ifdef CONFIG_IP_MASQ_DEBUG #define IP_MASQ_DEBUG(level, msg...) do { \ if (level <= ip_masq_get_debug_level()) \ printk(KERN_DEBUG "IP_MASQ:" ## msg); \ @@ -279,6 +276,8 @@ extern int ip_masq_get_debug_level(void); /* * /proc/net entry */ +extern int ip_masq_proc_register(struct proc_dir_entry *); +extern void ip_masq_proc_unregister(struct proc_dir_entry *); extern int ip_masq_app_getinfo(char *buffer, char **start, off_t offset, int length, int dummy); /* diff --git a/include/net/ip_masq_mod.h b/include/net/ip_masq_mod.h index 427421d9b..7cd9a7f32 100644 --- a/include/net/ip_masq_mod.h +++ b/include/net/ip_masq_mod.h @@ -14,11 +14,9 @@ #include <linux/proc_fs.h> #include <net/ip_masq.h> -enum { - IP_MASQ_MOD_NOP, - IP_MASQ_MOD_ACCEPT, - IP_MASQ_MOD_REJECT -}; +#define IP_MASQ_MOD_NOP 0 +#define IP_MASQ_MOD_ACCEPT 1 +#define IP_MASQ_MOD_REJECT -1 struct ip_masq_mod { struct ip_masq_mod *next; /* next mod for addrs. lookups */ @@ -27,29 +25,32 @@ struct ip_masq_mod { atomic_t refcnt; atomic_t mmod_nent; /* number of entries */ struct proc_dir_entry *mmod_proc_ent; - int (*mmod_ctl) (int optname, struct ip_fw_masqctl *, int optlen); + int (*mmod_ctl) (int optname, struct ip_masq_ctl *, int optlen); int (*mmod_init) (void); int (*mmod_done) (void); - int (*mmod_in_rule) (struct iphdr *, __u16 *); - int (*mmod_in_update) (struct iphdr *, struct ip_masq *); - struct ip_masq * (*mmod_in_create) (struct iphdr *, __u16 *, __u32); - int (*mmod_out_rule) (struct iphdr *, __u16 *); - int (*mmod_out_update) (struct iphdr *, __u16 *, struct ip_masq *); - struct ip_masq * (*mmod_out_create) (struct iphdr *, __u16 *, __u32); + int (*mmod_in_rule) (const struct sk_buff *, const struct iphdr *); + int (*mmod_in_update) (const struct sk_buff *, const struct iphdr *, + struct ip_masq *); + struct ip_masq * (*mmod_in_create) (const struct sk_buff *, const struct iphdr *, __u32); + int (*mmod_out_rule) (const struct sk_buff *, const struct iphdr *); + int (*mmod_out_update) (const struct sk_buff *, const struct iphdr *, + struct ip_masq *); + struct ip_masq * (*mmod_out_create) (const struct sk_buff *, const struct iphdr *, __u32); }; /* * Service routines (called from ip_masq.c) */ -int ip_masq_mod_out_rule(struct iphdr *iph, __u16 *portp); -int ip_masq_mod_out_update(struct iphdr *iph, __u16 *portp, struct ip_masq *ms); -struct ip_masq * ip_masq_mod_out_create(struct iphdr *iph, __u16 *portp, __u32 maddr); -int ip_masq_mod_in_rule(struct iphdr *iph, __u16 *portp); -int ip_masq_mod_in_update(struct iphdr *iph, __u16 *portp, struct ip_masq *ms); -struct ip_masq * ip_masq_mod_in_create(struct iphdr *iph, __u16 *portp, __u32 maddr); +int ip_masq_mod_out_rule(const struct sk_buff *, const struct iphdr *); +int ip_masq_mod_out_update(const struct sk_buff *, const struct iphdr *, struct ip_masq *ms); +struct ip_masq * ip_masq_mod_out_create(const struct sk_buff *, const struct iphdr *iph, __u32 maddr); + +int ip_masq_mod_in_rule(const struct sk_buff *, const struct iphdr *iph); +int ip_masq_mod_in_update(const struct sk_buff *, const struct iphdr *iph, struct ip_masq *ms); +struct ip_masq * ip_masq_mod_in_create(const struct sk_buff *, const struct iphdr *iph, __u32 maddr); -extern int ip_masq_mod_ctl(int optname, struct ip_fw_masqctl *, int len); +extern int ip_masq_mod_ctl(int optname, struct ip_masq_ctl *, int len); /* * ip_masq_mod registration functions @@ -60,6 +61,13 @@ extern int ip_masq_mod_lkp_unlink(struct ip_masq_mod *mmod); extern int ip_masq_mod_lkp_link(struct ip_masq_mod *mmod); /* + * init functions protos + */ +extern int ip_portfw_init(void); +extern int ip_markfw_init(void); +extern int ip_autofw_init(void); + +/* * Utility ... */ static __inline__ void ip_masq_mod_dec_nent(struct ip_masq_mod *mmod) diff --git a/include/net/ip_portfw.h b/include/net/ip_portfw.h deleted file mode 100644 index f2b51ea1c..000000000 --- a/include/net/ip_portfw.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef _IP_PORTFW_H -#define _IP_PORTFW_H - -#include <linux/types.h> - -#define IP_PORTFW_PORT_MIN 1 -#define IP_PORTFW_PORT_MAX 60999 - -#ifdef __KERNEL__ -struct ip_portfw { - struct list_head list; - __u32 laddr, raddr; - __u16 lport, rport; - atomic_t pref_cnt; /* pref "counter" down to 0 */ - int pref; /* user set pref */ -}; -extern int ip_portfw_init(void); - -#endif /* __KERNEL__ */ - -struct ip_portfw_edits { - __u16 protocol; /* Which protocol are we talking? */ - __u32 laddr, raddr; /* Remote address */ - __u16 lport, rport; /* Local and remote port */ - __u16 dummy; /* Make up to multiple of 4 */ - int pref; /* Preference value */ -}; - -#endif diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 03f30b644..118eec2e9 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -4,7 +4,7 @@ * Authors: * Pedro Roque <roque@di.fc.ul.pt> * - * $Id: ipv6.h,v 1.13 1998/08/26 12:02:11 davem Exp $ + * $Id: ipv6.h,v 1.14 1998/10/03 09:36:45 davem Exp $ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -284,6 +284,11 @@ extern void ipv6_packet_cleanup(void); extern void ipv6_netdev_notif_cleanup(void); +extern int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len); +extern void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err, u16 port, + u32 info, u8 *payload); +extern void ipv6_local_error(struct sock *sk, int err, struct flowi *fl, u32 info); + #endif /* __KERNEL__ */ #endif /* _NET_IPV6_H */ diff --git a/include/net/rose.h b/include/net/rose.h index 366168287..1c8684d2d 100644 --- a/include/net/rose.h +++ b/include/net/rose.h @@ -56,7 +56,7 @@ enum { #define ROSE_DEFAULT_ROUTING 1 /* Default routing flag */ #define ROSE_DEFAULT_FAIL_TIMEOUT (120 * HZ) /* Time until link considered usable */ #define ROSE_DEFAULT_MAXVC 50 /* Maximum number of VCs per neighbour */ -#define ROSE_DEFAULT_WINDOW_SIZE 3 /* Default window size */ +#define ROSE_DEFAULT_WINDOW_SIZE 7 /* Default window size */ #define ROSE_MODULUS 8 #define ROSE_MAX_PACKET_SIZE 251 /* Maximum packet size */ @@ -72,6 +72,9 @@ enum { #define FAC_NATIONAL_FLAGS 0x3F #define FAC_NATIONAL_DEST_DIGI 0xE9 #define FAC_NATIONAL_SRC_DIGI 0xEB +#define FAC_NATIONAL_FAIL_CALL 0xED +#define FAC_NATIONAL_FAIL_ADD 0xEE +#define FAC_NATIONAL_DIGIS 0xEF #define FAC_CCITT_DEST_NSAP 0xC9 #define FAC_CCITT_SRC_NSAP 0xCB @@ -111,19 +114,12 @@ struct rose_route { unsigned int rand; }; -struct rose_facilities { - rose_address source_addr, dest_addr; - ax25_address source_call, dest_call; - unsigned char source_ndigis, dest_ndigis; - ax25_address source_digi, dest_digi; - unsigned int rand; -}; - typedef struct { rose_address source_addr, dest_addr; ax25_address source_call, dest_call; unsigned char source_ndigis, dest_ndigis; - ax25_address source_digi, dest_digi; + ax25_address source_digis[ROSE_MAX_DIGIS]; + ax25_address dest_digis[ROSE_MAX_DIGIS]; struct rose_neigh *neighbour; struct device *device; unsigned int lci, rand; @@ -131,7 +127,12 @@ typedef struct { unsigned char cause, diagnostic; unsigned short vs, vr, va, vl; unsigned long t1, t2, t3, hb, idle; +#ifdef M_BIT + unsigned short fraglen; + struct sk_buff_head frag_queue; +#endif struct sk_buff_head ack_queue; + struct rose_facilities_struct facilities; struct timer_list timer; struct timer_list idletimer; struct sock *sk; /* Backlink to socket */ @@ -218,7 +219,7 @@ extern void rose_requeue_frames(struct sock *); extern int rose_validate_nr(struct sock *, unsigned short); extern void rose_write_internal(struct sock *, int); extern int rose_decode(struct sk_buff *, int *, int *, int *, int *, int *); -extern int rose_parse_facilities(struct sk_buff *, struct rose_facilities *); +extern int rose_parse_facilities(unsigned char *, struct rose_facilities_struct *); extern int rose_create_facilities(unsigned char *, rose_cb *); extern void rose_disconnect(struct sock *, int, int, int); diff --git a/include/net/scm.h b/include/net/scm.h index 0c6a01542..98c2dc916 100644 --- a/include/net/scm.h +++ b/include/net/scm.h @@ -17,8 +17,6 @@ struct scm_cookie struct ucred creds; /* Skb credentials */ struct scm_fp_list *fp; /* Passed files */ unsigned long seq; /* Connection seqno */ - struct file *file; /* file for socket */ - struct socket *sock; /* Passed socket */ }; extern void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm); @@ -39,7 +37,6 @@ static __inline__ int scm_send(struct socket *sock, struct msghdr *msg, scm->creds.uid = current->uid; scm->creds.gid = current->gid; scm->creds.pid = current->pid; - scm->sock = sock; if (msg->msg_controllen <= 0) return 0; return __scm_send(sock, msg, scm); diff --git a/include/net/snmp.h b/include/net/snmp.h index e38826d0b..cc8354b6c 100644 --- a/include/net/snmp.h +++ b/include/net/snmp.h @@ -176,6 +176,8 @@ struct linux_mib unsigned long PruneCalled; unsigned long RcvPruned; unsigned long OfoPruned; + unsigned long OutOfWindowIcmps; + unsigned long LockDroppedIcmps; }; #endif diff --git a/include/net/sock.h b/include/net/sock.h index ad27511c2..a9cc39260 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -139,6 +139,7 @@ struct ipv6_pinfo { struct in6_addr *daddr_cache; __u32 flow_lbl; + __u32 frag_size; int hop_limit; int mcast_hops; int mcast_oif; @@ -159,7 +160,9 @@ struct ipv6_pinfo { } rxopt; /* sockopt flags */ - __u8 mc_loop:1; + __u8 mc_loop:1, + recverr:1, + pmtudisc:2; struct ipv6_mc_socklist *ipv6_mc_list; __u32 dst_cookie; @@ -238,6 +241,7 @@ struct tcp_opt { * Slow start and congestion control (see also Nagle, and Karn & Partridge) */ __u32 snd_ssthresh; /* Slow start size threshold */ + __u16 snd_cwnd_cnt; /* Linear increase counter */ __u8 dup_acks; /* Consequetive duplicate acks seen from other end */ __u8 delayed_acks; __u16 user_mss; /* mss requested by user in ioctl */ @@ -531,7 +535,7 @@ struct proto { struct sock *sklist_prev; void (*close)(struct sock *sk, - unsigned long timeout); + long timeout); int (*connect)(struct sock *sk, struct sockaddr *uaddr, int addr_len); @@ -841,20 +845,6 @@ extern __inline__ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) return 0; } -extern __inline__ int __sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) -{ - /* Cast skb->rcvbuf to unsigned... It's pointless, but reduces - number of warnings when compiling with -W --ANK - */ - if (atomic_read(&sk->rmem_alloc) + skb->truesize >= (unsigned)sk->rcvbuf) - return -ENOMEM; - skb_set_owner_r(skb, sk); - __skb_queue_tail(&sk->receive_queue,skb); - if (!sk->dead) - sk->data_ready(sk,skb->len); - return 0; -} - extern __inline__ int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) { /* Cast skb->rcvbuf to unsigned... It's pointless, but reduces @@ -863,7 +853,7 @@ extern __inline__ int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) if (atomic_read(&sk->rmem_alloc) + skb->truesize >= (unsigned)sk->rcvbuf) return -ENOMEM; skb_set_owner_r(skb, sk); - __skb_queue_tail(&sk->error_queue,skb); + skb_queue_tail(&sk->error_queue,skb); if (!sk->dead) sk->data_ready(sk,skb->len); return 0; diff --git a/include/net/tcp.h b/include/net/tcp.h index 3f305aa7e..2ebee4e0d 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -192,7 +192,7 @@ extern kmem_cache_t *tcp_timewait_cachep; (((__u32)(__dport)<<16) | (__u32)(__sport)) #endif -#if defined(__alpha__) || defined(__sparc_v9__) +#if (BITS_PER_LONG == 64) #ifdef __BIG_ENDIAN #define TCP_V4_ADDR_COOKIE(__name, __saddr, __daddr) \ __u64 __name = (((__u64)(__saddr))<<32)|((__u64)(__daddr)); @@ -511,7 +511,7 @@ extern int tcp_timewait_state_process(struct tcp_tw_bucket *tw, unsigned len); extern void tcp_close(struct sock *sk, - unsigned long timeout); + long timeout); extern struct sock * tcp_accept(struct sock *sk, int flags); extern unsigned int tcp_poll(struct file * file, struct socket *sock, struct poll_table_struct *wait); extern void tcp_write_space(struct sock *sk); @@ -675,7 +675,7 @@ static __inline__ u32 tcp_receive_window(struct tcp_opt *tp) * scaling applied to the result. The caller does these things * if necessary. This is a "raw" window selection. */ -extern u32 __tcp_select_window(struct sock *sk, u32 cur_win); +extern u32 __tcp_select_window(struct sock *sk); /* Chose a new window to advertise, update state in tcp_opt for the * socket, and return result with RFC1323 scaling applied. The return @@ -686,13 +686,20 @@ extern __inline__ u16 tcp_select_window(struct sock *sk) { struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp); u32 cur_win = tcp_receive_window(tp); - u32 new_win = __tcp_select_window(sk, cur_win); + u32 new_win = __tcp_select_window(sk); /* Never shrink the offered window */ - if(new_win < cur_win) + if(new_win < cur_win) { + /* Danger Will Robinson! + * Don't update rcv_wup/rcv_wnd here or else + * we will not be able to advertise a zero + * window in time. --DaveM + */ new_win = cur_win; - tp->rcv_wnd = new_win; - tp->rcv_wup = tp->rcv_nxt; + } else { + tp->rcv_wnd = new_win; + tp->rcv_wup = tp->rcv_nxt; + } /* RFC1323 scaling applied */ return new_win >> tp->rcv_wscale; @@ -706,7 +713,7 @@ extern __inline__ int tcp_raise_window(struct sock *sk) { struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp); u32 cur_win = tcp_receive_window(tp); - u32 new_win = __tcp_select_window(sk, cur_win); + u32 new_win = __tcp_select_window(sk); return (new_win && (new_win > (cur_win << 1))); } @@ -750,12 +757,6 @@ struct tcp_skb_cb { #define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0])) -/* We store the congestion window as a packet count, shifted by - * a factor so that implementing the 1/2 MSS ssthresh rules - * is easy. - */ -#define TCP_CWND_SHIFT 1 - /* This determines how many packets are "in the network" to the best * of our knowledge. In many cases it is conservative, but where * detailed information is available from the receiver (via SACK @@ -796,12 +797,15 @@ static __inline__ int tcp_snd_test(struct sock *sk, struct sk_buff *skb) * * Don't use the nagle rule for urgent data. */ - if (!sk->nonagle && skb->len < (tp->mss_cache >> 1) && tp->packets_out && - !(TCP_SKB_CB(skb)->flags & TCPCB_FLAG_URG)) + if ((sk->nonagle == 2 && (skb->len < tp->mss_cache)) || + (!sk->nonagle && + skb->len < (tp->mss_cache >> 1) && + tp->packets_out && + !(TCP_SKB_CB(skb)->flags & TCPCB_FLAG_URG))) nagle_check = 0; return (nagle_check && - (tcp_packets_in_flight(tp) < (tp->snd_cwnd>>TCP_CWND_SHIFT)) && + (tcp_packets_in_flight(tp) < tp->snd_cwnd) && !after(TCP_SKB_CB(skb)->end_seq, tp->snd_una + tp->snd_wnd) && tp->retransmits == 0); } diff --git a/include/video/fbcon-afb.h b/include/video/fbcon-afb.h new file mode 100644 index 000000000..cbbcf0019 --- /dev/null +++ b/include/video/fbcon-afb.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for Amiga bitplanes (afb) + */ + +#ifndef _VIDEO_FBCON_AFB_H +#define _VIDEO_FBCON_AFB_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_AFB) || defined(CONFIG_FBCON_AFB_MODULE) +#define FBCON_HAS_AFB +#endif +#else +#if defined(CONFIG_FBCON_AFB) +#define FBCON_HAS_AFB +#endif +#endif + +extern struct display_switch fbcon_afb; +extern void fbcon_afb_setup(struct display *p); +extern void fbcon_afb_bmove(struct display *p, int sy, int sx, int dy, int dx, + int height, int width); +extern void fbcon_afb_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_afb_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_afb_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_afb_revc(struct display *p, int xx, int yy); + +#endif diff --git a/include/video/fbcon-cfb16.h b/include/video/fbcon-cfb16.h new file mode 100644 index 000000000..3ccc7d7cd --- /dev/null +++ b/include/video/fbcon-cfb16.h @@ -0,0 +1,34 @@ +/* + * FBcon low-level driver for 16 bpp packed pixel (cfb16) + */ + +#ifndef _VIDEO_FBCON_CFB16_H +#define _VIDEO_FBCON_CFB16_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB16_MODULE) +#define FBCON_HAS_CFB16 +#endif +#else +#if defined(CONFIG_FBCON_CFB16) +#define FBCON_HAS_CFB16 +#endif +#endif + +extern struct display_switch fbcon_cfb16; +extern void fbcon_cfb16_setup(struct display *p); +extern void fbcon_cfb16_bmove(struct display *p, int sy, int sx, int dy, + int dx, int height, int width); +extern void fbcon_cfb16_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_cfb16_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_cfb16_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_cfb16_revc(struct display *p, int xx, int yy); +extern void fbcon_cfb16_clear_margins(struct vc_data *conp, struct display *p, + int bottom_only); + +#endif /* _VIDEO_FBCON_CFB16_H */ diff --git a/include/video/fbcon-cfb2.h b/include/video/fbcon-cfb2.h new file mode 100644 index 000000000..5ba68a5f0 --- /dev/null +++ b/include/video/fbcon-cfb2.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for 2 bpp packed pixel (cfb2) + */ + +#ifndef _VIDEO_FBCON_CFB2_H +#define _VIDEO_FBCON_CFB2_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB2) || defined(CONFIG_FBCON_CFB2_MODULE) +#define FBCON_HAS_CFB2 +#endif +#else +#if defined(CONFIG_FBCON_CFB2) +#define FBCON_HAS_CFB2 +#endif +#endif + +extern struct display_switch fbcon_cfb2; +extern void fbcon_cfb2_setup(struct display *p); +extern void fbcon_cfb2_bmove(struct display *p, int sy, int sx, int dy, int dx, + int height, int width); +extern void fbcon_cfb2_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_cfb2_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_cfb2_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_cfb2_revc(struct display *p, int xx, int yy); + +#endif /* _VIDEO_FBCON_CFB2_H */ diff --git a/include/video/fbcon-cfb24.h b/include/video/fbcon-cfb24.h new file mode 100644 index 000000000..77442e22d --- /dev/null +++ b/include/video/fbcon-cfb24.h @@ -0,0 +1,34 @@ +/* + * FBcon low-level driver for 24 bpp packed pixel (cfb24) + */ + +#ifndef _VIDEO_FBCON_CFB24_H +#define _VIDEO_FBCON_CFB24_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB24) || defined(CONFIG_FBCON_CFB24_MODULE) +#define FBCON_HAS_CFB24 +#endif +#else +#if defined(CONFIG_FBCON_CFB24) +#define FBCON_HAS_CFB24 +#endif +#endif + +extern struct display_switch fbcon_cfb24; +extern void fbcon_cfb24_setup(struct display *p); +extern void fbcon_cfb24_bmove(struct display *p, int sy, int sx, int dy, + int dx, int height, int width); +extern void fbcon_cfb24_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_cfb24_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_cfb24_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_cfb24_revc(struct display *p, int xx, int yy); +extern void fbcon_cfb24_clear_margins(struct vc_data *conp, struct display *p, + int bottom_only); + +#endif /* _VIDEO_FBCON_CFB24_H */ diff --git a/include/video/fbcon-cfb32.h b/include/video/fbcon-cfb32.h new file mode 100644 index 000000000..abac3baa2 --- /dev/null +++ b/include/video/fbcon-cfb32.h @@ -0,0 +1,34 @@ +/* + * FBcon low-level driver for 32 bpp packed pixel (cfb32) + */ + +#ifndef _VIDEO_FBCON_CFB32_H +#define _VIDEO_FBCON_CFB32_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB32) || defined(CONFIG_FBCON_CFB32_MODULE) +#define FBCON_HAS_CFB32 +#endif +#else +#if defined(CONFIG_FBCON_CFB32) +#define FBCON_HAS_CFB32 +#endif +#endif + +extern struct display_switch fbcon_cfb32; +extern void fbcon_cfb32_setup(struct display *p); +extern void fbcon_cfb32_bmove(struct display *p, int sy, int sx, int dy, + int dx, int height, int width); +extern void fbcon_cfb32_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_cfb32_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_cfb32_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_cfb32_revc(struct display *p, int xx, int yy); +extern void fbcon_cfb32_clear_margins(struct vc_data *conp, struct display *p, + int bottom_only); + +#endif /* _VIDEO_FBCON_CFB32_H */ diff --git a/include/video/fbcon-cfb4.h b/include/video/fbcon-cfb4.h new file mode 100644 index 000000000..963befe5c --- /dev/null +++ b/include/video/fbcon-cfb4.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for 4 bpp packed pixel (cfb4) + */ + +#ifndef _VIDEO_FBCON_CFB4_H +#define _VIDEO_FBCON_CFB4_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB4) || defined(CONFIG_FBCON_CFB4_MODULE) +#define FBCON_HAS_CFB4 +#endif +#else +#if defined(CONFIG_FBCON_CFB4) +#define FBCON_HAS_CFB4 +#endif +#endif + +extern struct display_switch fbcon_cfb4; +extern void fbcon_cfb4_setup(struct display *p); +extern void fbcon_cfb4_bmove(struct display *p, int sy, int sx, int dy, int dx, + int height, int width); +extern void fbcon_cfb4_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_cfb4_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_cfb4_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_cfb4_revc(struct display *p, int xx, int yy); + +#endif /* _VIDEO_FBCON_CFB4_H */ diff --git a/include/video/fbcon-cfb8.h b/include/video/fbcon-cfb8.h new file mode 100644 index 000000000..96189d0ac --- /dev/null +++ b/include/video/fbcon-cfb8.h @@ -0,0 +1,34 @@ +/* + * FBcon low-level driver for 8 bpp packed pixel (cfb8) + */ + +#ifndef _VIDEO_FBCON_CFB8_H +#define _VIDEO_FBCON_CFB8_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB8) || defined(CONFIG_FBCON_CFB8_MODULE) +#define FBCON_HAS_CFB8 +#endif +#else +#if defined(CONFIG_FBCON_CFB8) +#define FBCON_HAS_CFB8 +#endif +#endif + +extern struct display_switch fbcon_cfb8; +extern void fbcon_cfb8_setup(struct display *p); +extern void fbcon_cfb8_bmove(struct display *p, int sy, int sx, int dy, int dx, + int height, int width); +extern void fbcon_cfb8_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_cfb8_revc(struct display *p, int xx, int yy); +extern void fbcon_cfb8_clear_margins(struct vc_data *conp, struct display *p, + int bottom_only); + +#endif /* _VIDEO_FBCON_CFB8_H */ diff --git a/include/video/fbcon-ilbm.h b/include/video/fbcon-ilbm.h new file mode 100644 index 000000000..80f9707f6 --- /dev/null +++ b/include/video/fbcon-ilbm.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for Amiga interleaved bitplanes (ilbm) + */ + +#ifndef _VIDEO_FBCON_ILBM_H +#define _VIDEO_FBCON_ILBM_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_ILBM) || defined(CONFIG_FBCON_ILBM_MODULE) +#define FBCON_HAS_ILBM +#endif +#else +#if defined(CONFIG_FBCON_ILBM) +#define FBCON_HAS_ILBM +#endif +#endif + +extern struct display_switch fbcon_ilbm; +extern void fbcon_ilbm_setup(struct display *p); +extern void fbcon_ilbm_bmove(struct display *p, int sy, int sx, int dy, int dx, + int height, int width); +extern void fbcon_ilbm_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_ilbm_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_ilbm_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_ilbm_revc(struct display *p, int xx, int yy); + +#endif /* _VIDEO_FBCON_ILBM_H */ diff --git a/include/video/fbcon-iplan2p2.h b/include/video/fbcon-iplan2p2.h new file mode 100644 index 000000000..b72868035 --- /dev/null +++ b/include/video/fbcon-iplan2p2.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for Atari interleaved bitplanes (2 planes) (iplan2p2) + */ + +#ifndef _VIDEO_FBCON_IPLAN2P2_H +#define _VIDEO_FBCON_IPLAN2P2_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_IPLAN2P2) || defined(CONFIG_FBCON_IPLAN2P2_MODULE) +#define FBCON_HAS_IPLAN2P2 +#endif +#else +#if defined(CONFIG_FBCON_IPLAN2P2) +#define FBCON_HAS_IPLAN2P2 +#endif +#endif + +extern struct display_switch fbcon_iplan2p2; +extern void fbcon_iplan2p2_setup(struct display *p); +extern void fbcon_iplan2p2_bmove(struct display *p, int sy, int sx, int dy, + int dx, int height, int width); +extern void fbcon_iplan2p2_clear(struct vc_data *conp, struct display *p, + int sy, int sx, int height, int width); +extern void fbcon_iplan2p2_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_iplan2p2_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_iplan2p2_revc(struct display *p, int xx, int yy); + +#endif /* _VIDEO_FBCON_IPLAN2P2_H */ diff --git a/include/video/fbcon-iplan2p4.h b/include/video/fbcon-iplan2p4.h new file mode 100644 index 000000000..a70120204 --- /dev/null +++ b/include/video/fbcon-iplan2p4.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for Atari interleaved bitplanes (4 planes) (iplan2p4) + */ + +#ifndef _VIDEO_FBCON_IPLAN2P4_H +#define _VIDEO_FBCON_IPLAN2P4_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_IPLAN2P4) || defined(CONFIG_FBCON_IPLAN2P4_MODULE) +#define FBCON_HAS_IPLAN2P4 +#endif +#else +#if defined(CONFIG_FBCON_IPLAN2P4) +#define FBCON_HAS_IPLAN2P4 +#endif +#endif + +extern struct display_switch fbcon_iplan2p4; +extern void fbcon_iplan2p4_setup(struct display *p); +extern void fbcon_iplan2p4_bmove(struct display *p, int sy, int sx, int dy, + int dx, int height, int width); +extern void fbcon_iplan2p4_clear(struct vc_data *conp, struct display *p, + int sy, int sx, int height, int width); +extern void fbcon_iplan2p4_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_iplan2p4_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_iplan2p4_revc(struct display *p, int xx, int yy); + +#endif /* _VIDEO_FBCON_IPLAN2P4_H */ diff --git a/include/video/fbcon-iplan2p8.h b/include/video/fbcon-iplan2p8.h new file mode 100644 index 000000000..6691e18d6 --- /dev/null +++ b/include/video/fbcon-iplan2p8.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for Atari interleaved bitplanes (8 planes) (iplan2p8) + */ + +#ifndef _VIDEO_FBCON_IPLAN2P8_H +#define _VIDEO_FBCON_IPLAN2P8_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_IPLAN2P8) || defined(CONFIG_FBCON_IPLAN2P8_MODULE) +#define FBCON_HAS_IPLAN2P8 +#endif +#else +#if defined(CONFIG_FBCON_IPLAN2P8) +#define FBCON_HAS_IPLAN2P8 +#endif +#endif + +extern struct display_switch fbcon_iplan2p8; +extern void fbcon_iplan2p8_setup(struct display *p); +extern void fbcon_iplan2p8_bmove(struct display *p, int sy, int sx, int dy, + int dx, int height, int width); +extern void fbcon_iplan2p8_clear(struct vc_data *conp, struct display *p, + int sy, int sx, int height, int width); +extern void fbcon_iplan2p8_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_iplan2p8_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_iplan2p8_revc(struct display *p, int xx, int yy); + +#endif /* _VIDEO_FBCON_IPLAN2P8_H */ diff --git a/include/video/fbcon-mac.h b/include/video/fbcon-mac.h new file mode 100644 index 000000000..b275ff91b --- /dev/null +++ b/include/video/fbcon-mac.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for Mac variable bpp packed pixels (mac) + */ + +#ifndef _VIDEO_FBCON_MAC_H +#define _VIDEO_FBCON_MAC_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_MAC) || defined(CONFIG_FBCON_MAC_MODULE) +#define FBCON_HAS_MAC +#endif +#else +#if defined(CONFIG_FBCON_MAC) +#define FBCON_HAS_MAC +#endif +#endif + +extern struct display_switch fbcon_mac; +extern void fbcon_mac_setup(struct display *p); +extern void fbcon_mac_bmove(struct display *p, int sy, int sx, int dy, int dx, + int height, int width); +extern void fbcon_mac_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_mac_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_mac_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_mac_revc(struct display *p, int xx, int yy); + +#endif /* _VIDEO_FBCON_MAC_H */ diff --git a/include/video/fbcon-mfb.h b/include/video/fbcon-mfb.h new file mode 100644 index 000000000..f74e63da2 --- /dev/null +++ b/include/video/fbcon-mfb.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for Monochrome (mfb) + */ + +#ifndef _VIDEO_FBCON_MFB_H +#define _VIDEO_FBCON_MFB_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_MFB) || defined(CONFIG_FBCON_MFB_MODULE) +#define FBCON_HAS_MFB +#endif +#else +#if defined(CONFIG_FBCON_MFB) +#define FBCON_HAS_MFB +#endif +#endif + +extern struct display_switch fbcon_mfb; +extern void fbcon_mfb_setup(struct display *p); +extern void fbcon_mfb_bmove(struct display *p, int sy, int sx, int dy, int dx, + int height, int width); +extern void fbcon_mfb_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_mfb_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_mfb_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_mfb_revc(struct display *p, int xx, int yy); + +#endif /* _VIDEO_FBCON_MFB_H */ diff --git a/include/video/fbcon-vga.h b/include/video/fbcon-vga.h new file mode 100644 index 000000000..e7c7b2db0 --- /dev/null +++ b/include/video/fbcon-vga.h @@ -0,0 +1,32 @@ +/* + * FBcon low-level driver for VGA characters/attributes + */ + +#ifndef _VIDEO_FBCON_VGA_H +#define _VIDEO_FBCON_VGA_H + +#include <linux/config.h> + +#ifdef MODULE +#if defined(CONFIG_FBCON_VGA) || defined(CONFIG_FBCON_VGA_MODULE) +#define FBCON_HAS_VGA +#endif +#else +#if defined(CONFIG_FBCON_VGA) +#define FBCON_HAS_VGA +#endif +#endif + +extern struct display_switch fbcon_vga; +extern void fbcon_vga_setup(struct display *p); +extern void fbcon_vga_bmove(struct display *p, int sy, int sx, int dy, int dx, + int height, int width); +extern void fbcon_vga_clear(struct vc_data *conp, struct display *p, int sy, + int sx, int height, int width); +extern void fbcon_vga_putc(struct vc_data *conp, struct display *p, int c, + int yy, int xx); +extern void fbcon_vga_putcs(struct vc_data *conp, struct display *p, + const unsigned short *s, int count, int yy, int xx); +extern void fbcon_vga_revc(struct display *p, int xx, int yy); + +#endif /* _VIDEO_FBCON_VGA_H */ diff --git a/include/video/fbcon.h b/include/video/fbcon.h new file mode 100644 index 000000000..4145f56e3 --- /dev/null +++ b/include/video/fbcon.h @@ -0,0 +1,501 @@ +/* + * linux/drivers/video/fbcon.h -- Low level frame buffer based console driver + * + * Copyright (C) 1997 Geert Uytterhoeven + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive + * for more details. + */ + +#ifndef _VIDEO_FBCON_H +#define _VIDEO_FBCON_H + +#include <linux/config.h> +#include <linux/console_struct.h> + + + /* + * `switch' for the Low Level Operations + */ + +struct display_switch { + void (*setup)(struct display *p); + void (*bmove)(struct display *p, int sy, int sx, int dy, int dx, + int height, int width); + /* for clear, conp may be NULL, which means use a blanking (black) color */ + void (*clear)(struct vc_data *conp, struct display *p, int sy, int sx, + int height, int width); + void (*putc)(struct vc_data *conp, struct display *p, int c, int yy, + int xx); + void (*putcs)(struct vc_data *conp, struct display *p, const unsigned short *s, + int count, int yy, int xx); + void (*revc)(struct display *p, int xx, int yy); + void (*cursor)(struct display *p, int mode, int xx, int yy); + int (*set_font)(struct display *p, int width, int height); + void (*clear_margins)(struct vc_data *conp, struct display *p, + int bottom_only); + unsigned int fontwidthmask; /* 1 at (1 << (width - 1)) if width is supported */ +}; + +extern struct display_switch fbcon_dummy; + +#define fontheight(p) ((p)->_fontheight) +#define fontheightlog(p) ((p)->_fontheightlog) + +#ifdef CONFIG_FBCON_FONTWIDTH8_ONLY + +/* fontwidth w is supported by dispsw */ +#define FONTWIDTH(w) (1 << ((8) - 1)) +/* fontwidths w1-w2 inclusive are supported by dispsw */ +#define FONTWIDTHRANGE(w1,w2) FONTWIDTH(8) + +#define fontwidth(p) (8) +#define fontwidthlog(p) (0) + +#else + +/* fontwidth w is supported by dispsw */ +#define FONTWIDTH(w) (1 << ((w) - 1)) +/* fontwidths w1-w2 inclusive are supported by dispsw */ +#define FONTWIDTHRANGE(w1,w2) (FONTWIDTH(w2+1) - FONTWIDTH(w1)) + +#define fontwidth(p) ((p)->_fontwidth) +#define fontwidthlog(p) ((p)->_fontwidthlog) + +#endif + + /* + * Attribute Decoding + */ + +/* Color */ +#define attr_fgcol(p,s) \ + (((s) >> ((p)->fgshift)) & 0x0f) +#define attr_bgcol(p,s) \ + (((s) >> ((p)->bgshift)) & 0x0f) +#define attr_bgcol_ec(p,conp) \ + ((conp) ? (((conp)->vc_video_erase_char >> ((p)->bgshift)) & 0x0f) : 0) + +/* Monochrome */ +#define attr_bold(p,s) \ + ((s) & 0x200) +#define attr_reverse(p,s) \ + (((s) & 0x800) ^ ((p)->inverse ? 0x800 : 0)) +#define attr_underline(p,s) \ + ((s) & 0x400) +#define attr_blink(p,s) \ + ((s) & 0x8000) + + /* + * Scroll Method + */ + +/* Internal flags */ +#define __SCROLL_YPAN 0x001 +#define __SCROLL_YWRAP 0x002 +#define __SCROLL_YMOVE 0x003 +#define __SCROLL_YREDRAW 0x004 +#define __SCROLL_YMASK 0x00f +#define __SCROLL_YFIXED 0x010 +#define __SCROLL_YNOMOVE 0x020 +#define __SCROLL_YPANREDRAW 0x040 + +/* Only these should be used by the drivers */ +/* Which one should you use? If you have a fast card and slow bus, + then probably just 0 to indicate fbcon should choose between + YWRAP/YPAN+MOVE/YMOVE. On the other side, if you have a fast bus + and even better if your card can do fonting (1->8/32bit painting), + you should consider either SCROLL_YREDRAW (if your card is + able to do neither YPAN/YWRAP), or SCROLL_YNOMOVE. + The best is to test it with some real life scrolling (usually, not + all lines on the screen are filled completely with non-space characters, + and REDRAW performs much better on such lines, so don't cat a file + with every line covering all screen columns, it would not be the right + benchmark). + */ +#define SCROLL_YREDRAW (__SCROLL_YFIXED|__SCROLL_YREDRAW) +#define SCROLL_YNOMOVE (__SCROLL_YNOMOVE|__SCROLL_YPANREDRAW) + +extern void fbcon_redraw_bmove(struct display *, int, int, int, int, int, int); + + +/* ================================================================= */ +/* Utility Assembler Functions */ +/* ================================================================= */ + + +#if defined(__mc68000__) + +/* ====================================================================== */ + +/* Those of a delicate disposition might like to skip the next couple of + * pages. + * + * These functions are drop in replacements for memmove and + * memset(_, 0, _). However their five instances add at least a kilobyte + * to the object file. You have been warned. + * + * Not a great fan of assembler for the sake of it, but I think + * that these routines are at least 10 times faster than their C + * equivalents for large blits, and that's important to the lowest level of + * a graphics driver. Question is whether some scheme with the blitter + * would be faster. I suspect not for simple text system - not much + * asynchrony. + * + * Code is very simple, just gruesome expansion. Basic strategy is to + * increase data moved/cleared at each step to 16 bytes to reduce + * instruction per data move overhead. movem might be faster still + * For more than 15 bytes, we try to align the write direction on a + * longword boundary to get maximum speed. This is even more gruesome. + * Unaligned read/write used requires 68020+ - think this is a problem? + * + * Sorry! + */ + + +/* ++roman: I've optimized Robert's original versions in some minor + * aspects, e.g. moveq instead of movel, let gcc choose the registers, + * use movem in some places... + * For other modes than 1 plane, lots of more such assembler functions + * were needed (e.g. the ones using movep or expanding color values). + */ + +/* ++andreas: more optimizations: + subl #65536,d0 replaced by clrw d0; subql #1,d0 for dbcc + addal is faster than addaw + movep is rather expensive compared to ordinary move's + some functions rewritten in C for clarity, no speed loss */ + +static __inline__ void *mymemclear_small(void *s, size_t count) +{ + if (!count) + return(0); + + __asm__ __volatile__( + "lsrl #1,%1 ; jcc 1f ; moveb %2,%0@-\n\t" + "1: lsrl #1,%1 ; jcc 1f ; movew %2,%0@-\n\t" + "1: lsrl #1,%1 ; jcc 1f ; movel %2,%0@-\n\t" + "1: lsrl #1,%1 ; jcc 1f ; movel %2,%0@- ; movel %2,%0@-\n\t" + "1: subql #1,%1 ; jcs 3f\n\t" + "2: moveml %2/%3/%4/%5,%0@-\n\t" + "dbra %1,2b\n\t" + "3:" + : "=a" (s), "=d" (count) + : "d" (0), "d" (0), "d" (0), "d" (0), + "0" ((char *)s+count), "1" (count) + ); + + return(0); +} + + +static __inline__ void *mymemclear(void *s, size_t count) +{ + if (!count) + return(0); + + if (count < 16) { + __asm__ __volatile__( + "lsrl #1,%1 ; jcc 1f ; clrb %0@+\n\t" + "1: lsrl #1,%1 ; jcc 1f ; clrw %0@+\n\t" + "1: lsrl #1,%1 ; jcc 1f ; clrl %0@+\n\t" + "1: lsrl #1,%1 ; jcc 1f ; clrl %0@+ ; clrl %0@+\n\t" + "1:" + : "=a" (s), "=d" (count) + : "0" (s), "1" (count) + ); + } else { + long tmp; + __asm__ __volatile__( + "movel %1,%2\n\t" + "lsrl #1,%2 ; jcc 1f ; clrb %0@+ ; subqw #1,%1\n\t" + "lsrl #1,%2 ; jcs 2f\n\t" /* %0 increased=>bit 2 switched*/ + "clrw %0@+ ; subqw #2,%1 ; jra 2f\n\t" + "1: lsrl #1,%2 ; jcc 2f\n\t" + "clrw %0@+ ; subqw #2,%1\n\t" + "2: movew %1,%2; lsrl #2,%1 ; jeq 6f\n\t" + "lsrl #1,%1 ; jcc 3f ; clrl %0@+\n\t" + "3: lsrl #1,%1 ; jcc 4f ; clrl %0@+ ; clrl %0@+\n\t" + "4: subql #1,%1 ; jcs 6f\n\t" + "5: clrl %0@+; clrl %0@+ ; clrl %0@+ ; clrl %0@+\n\t" + "dbra %1,5b ; clrw %1; subql #1,%1; jcc 5b\n\t" + "6: movew %2,%1; btst #1,%1 ; jeq 7f ; clrw %0@+\n\t" + "7: ; btst #0,%1 ; jeq 8f ; clrb %0@+\n\t" + "8:" + : "=a" (s), "=d" (count), "=d" (tmp) + : "0" (s), "1" (count) + ); + } + + return(0); +} + + +static __inline__ void *mymemset(void *s, size_t count) +{ + if (!count) + return(0); + + __asm__ __volatile__( + "lsrl #1,%1 ; jcc 1f ; moveb %2,%0@-\n\t" + "1: lsrl #1,%1 ; jcc 1f ; movew %2,%0@-\n\t" + "1: lsrl #1,%1 ; jcc 1f ; movel %2,%0@-\n\t" + "1: lsrl #1,%1 ; jcc 1f ; movel %2,%0@- ; movel %2,%0@-\n\t" + "1: subql #1,%1 ; jcs 3f\n\t" + "2: moveml %2/%3/%4/%5,%0@-\n\t" + "dbra %1,2b\n\t" + "3:" + : "=a" (s), "=d" (count) + : "d" (-1), "d" (-1), "d" (-1), "d" (-1), + "0" ((char *) s + count), "1" (count) + ); + + return(0); +} + + +static __inline__ void *mymemmove(void *d, const void *s, size_t count) +{ + if (d < s) { + if (count < 16) { + __asm__ __volatile__( + "lsrl #1,%2 ; jcc 1f ; moveb %1@+,%0@+\n\t" + "1: lsrl #1,%2 ; jcc 1f ; movew %1@+,%0@+\n\t" + "1: lsrl #1,%2 ; jcc 1f ; movel %1@+,%0@+\n\t" + "1: lsrl #1,%2 ; jcc 1f ; movel %1@+,%0@+ ; movel %1@+,%0@+\n\t" + "1:" + : "=a" (d), "=a" (s), "=d" (count) + : "0" (d), "1" (s), "2" (count) + ); + } else { + long tmp; + __asm__ __volatile__( + "movel %0,%3\n\t" + "lsrl #1,%3 ; jcc 1f ; moveb %1@+,%0@+ ; subqw #1,%2\n\t" + "lsrl #1,%3 ; jcs 2f\n\t" /* %0 increased=>bit 2 switched*/ + "movew %1@+,%0@+ ; subqw #2,%2 ; jra 2f\n\t" + "1: lsrl #1,%3 ; jcc 2f\n\t" + "movew %1@+,%0@+ ; subqw #2,%2\n\t" + "2: movew %2,%-; lsrl #2,%2 ; jeq 6f\n\t" + "lsrl #1,%2 ; jcc 3f ; movel %1@+,%0@+\n\t" + "3: lsrl #1,%2 ; jcc 4f ; movel %1@+,%0@+ ; movel %1@+,%0@+\n\t" + "4: subql #1,%2 ; jcs 6f\n\t" + "5: movel %1@+,%0@+;movel %1@+,%0@+\n\t" + "movel %1@+,%0@+;movel %1@+,%0@+\n\t" + "dbra %2,5b ; clrw %2; subql #1,%2; jcc 5b\n\t" + "6: movew %+,%2; btst #1,%2 ; jeq 7f ; movew %1@+,%0@+\n\t" + "7: ; btst #0,%2 ; jeq 8f ; moveb %1@+,%0@+\n\t" + "8:" + : "=a" (d), "=a" (s), "=d" (count), "=d" (tmp) + : "0" (d), "1" (s), "2" (count) + ); + } + } else { + if (count < 16) { + __asm__ __volatile__( + "lsrl #1,%2 ; jcc 1f ; moveb %1@-,%0@-\n\t" + "1: lsrl #1,%2 ; jcc 1f ; movew %1@-,%0@-\n\t" + "1: lsrl #1,%2 ; jcc 1f ; movel %1@-,%0@-\n\t" + "1: lsrl #1,%2 ; jcc 1f ; movel %1@-,%0@- ; movel %1@-,%0@-\n\t" + "1:" + : "=a" (d), "=a" (s), "=d" (count) + : "0" ((char *) d + count), "1" ((char *) s + count), "2" (count) + ); + } else { + long tmp; + __asm__ __volatile__( + "movel %0,%3\n\t" + "lsrl #1,%3 ; jcc 1f ; moveb %1@-,%0@- ; subqw #1,%2\n\t" + "lsrl #1,%3 ; jcs 2f\n\t" /* %0 increased=>bit 2 switched*/ + "movew %1@-,%0@- ; subqw #2,%2 ; jra 2f\n\t" + "1: lsrl #1,%3 ; jcc 2f\n\t" + "movew %1@-,%0@- ; subqw #2,%2\n\t" + "2: movew %2,%-; lsrl #2,%2 ; jeq 6f\n\t" + "lsrl #1,%2 ; jcc 3f ; movel %1@-,%0@-\n\t" + "3: lsrl #1,%2 ; jcc 4f ; movel %1@-,%0@- ; movel %1@-,%0@-\n\t" + "4: subql #1,%2 ; jcs 6f\n\t" + "5: movel %1@-,%0@-;movel %1@-,%0@-\n\t" + "movel %1@-,%0@-;movel %1@-,%0@-\n\t" + "dbra %2,5b ; clrw %2; subql #1,%2; jcc 5b\n\t" + "6: movew %+,%2; btst #1,%2 ; jeq 7f ; movew %1@-,%0@-\n\t" + "7: ; btst #0,%2 ; jeq 8f ; moveb %1@-,%0@-\n\t" + "8:" + : "=a" (d), "=a" (s), "=d" (count), "=d" (tmp) + : "0" ((char *) d + count), "1" ((char *) s + count), "2" (count) + ); + } + } + + return(0); +} + + +/* ++andreas: Simple and fast version of memmove, assumes size is + divisible by 16, suitable for moving the whole screen bitplane */ +static __inline__ void fast_memmove(char *dst, const char *src, size_t size) +{ + if (!size) + return; + if (dst < src) + __asm__ __volatile__ + ("1:" + " moveml %0@+,%/d0/%/d1/%/a0/%/a1\n" + " moveml %/d0/%/d1/%/a0/%/a1,%1@\n" + " addql #8,%1; addql #8,%1\n" + " dbra %2,1b\n" + " clrw %2; subql #1,%2\n" + " jcc 1b" + : "=a" (src), "=a" (dst), "=d" (size) + : "0" (src), "1" (dst), "2" (size / 16 - 1) + : "d0", "d1", "a0", "a1", "memory"); + else + __asm__ __volatile__ + ("1:" + " subql #8,%0; subql #8,%0\n" + " moveml %0@,%/d0/%/d1/%/a0/%/a1\n" + " moveml %/d0/%/d1/%/a0/%/a1,%1@-\n" + " dbra %2,1b\n" + " clrw %2; subql #1,%2\n" + " jcc 1b" + : "=a" (src), "=a" (dst), "=d" (size) + : "0" (src + size), "1" (dst + size), "2" (size / 16 - 1) + : "d0", "d1", "a0", "a1", "memory"); +} + +#elif defined(CONFIG_SUN4) + +/* You may think that I'm crazy and that I should use generic + routines. No, I'm not: sun4's framebuffer crashes if we std + into it, so we cannot use memset. */ + +static __inline__ void *sun4_memset(void *s, char val, size_t count) +{ + int i; + for(i=0; i<count;i++) + ((char *) s) [i] = val; + return s; +} + +static __inline__ void *mymemset(void *s, size_t count) +{ + return sun4_memset(s, 255, count); +} + +static __inline__ void *mymemclear(void *s, size_t count) +{ + return sun4_memset(s, 0, count); +} + +static __inline__ void *mymemclear_small(void *s, size_t count) +{ + return sun4_memset(s, 0, count); +} + +/* To be honest, this is slow_memmove :). But sun4 is crappy, so what we can do. */ +static __inline__ void fast_memmove(void *d, const void *s, size_t count) +{ + int i; + if (d<s) { + for (i=0; i<count; i++) + ((char *) d)[i] = ((char *) s)[i]; + } else + for (i=0; i<count; i++) + ((char *) d)[count-i-1] = ((char *) s)[count-i-1]; +} + +static __inline__ void *mymemmove(char *dst, const char *src, size_t size) +{ + fast_memmove(dst, src, size); + return dst; +} + +#else + +static __inline__ void *mymemclear_small(void *s, size_t count) +{ + return(memset(s, 0, count)); +} + +static __inline__ void *mymemclear(void *s, size_t count) +{ + return(memset(s, 0, count)); +} + +static __inline__ void *mymemset(void *s, size_t count) +{ + return(memset(s, 255, count)); +} + +#if defined(__i386__) + +static __inline__ void fast_memmove(void *d, const void *s, size_t count) +{ + if (d < s) { +__asm__ __volatile__ ( + "cld\n\t" + "shrl $1,%%ecx\n\t" + "jnc 1f\n\t" + "movsb\n" + "1:\tshrl $1,%%ecx\n\t" + "jnc 2f\n\t" + "movsw\n" + "2:\trep\n\t" + "movsl" + : /* no output */ + :"c"(count),"D"((long)d),"S"((long)s) + :"cx","di","si","memory"); + } else { +__asm__ __volatile__ ( + "std\n\t" + "shrl $1,%%ecx\n\t" + "jnc 1f\n\t" + "movb 3(%%esi),%%al\n\t" + "movb %%al,3(%%edi)\n\t" + "decl %%esi\n\t" + "decl %%edi\n" + "1:\tshrl $1,%%ecx\n\t" + "jnc 2f\n\t" + "movw 2(%%esi),%%ax\n\t" + "movw %%ax,2(%%edi)\n\t" + "decl %%esi\n\t" + "decl %%edi\n\t" + "decl %%esi\n\t" + "decl %%edi\n" + "2:\trep\n\t" + "movsl\n\t" + "cld" + : /* no output */ + :"c"(count),"D"(count-4+(long)d),"S"(count-4+(long)s) + :"ax","cx","di","si","memory"); + } +} + +static __inline__ void *mymemmove(char *dst, const char *src, size_t size) +{ + fast_memmove(dst, src, size); + return dst; +} + +#else /* !i386 */ + + /* + * Anyone who'd like to write asm functions for other CPUs? + * (Why are these functions better than those from include/asm/string.h?) + */ + +static __inline__ void *mymemmove(void *d, const void *s, size_t count) +{ + return(memmove(d, s, count)); +} + +static __inline__ void fast_memmove(char *dst, const char *src, size_t size) +{ + memmove(dst, src, size); +} + +#endif /* !i386 */ + +#endif + +#endif /* _VIDEO_FBCON_H */ diff --git a/include/video/font.h b/include/video/font.h new file mode 100644 index 000000000..bdb7fc4bf --- /dev/null +++ b/include/video/font.h @@ -0,0 +1,66 @@ +/* + * font.h -- `Soft' font definitions + * + * Created 1995 by Geert Uytterhoeven + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive + * for more details. + */ + +#ifndef _VIDEO_FONT_H +#define _VIDEO_FONT_H + +#ifdef __ASSEMBLY__ + +#ifdef __mc68000__ +#define FBCON_FONT_DESC_idx 0 +#define FBCON_FONT_DESC_name (FBCON_FONT_DESC_idx +4) +#define FBCON_FONT_DESC_width (FBCON_FONT_DESC_name +4) +#define FBCON_FONT_DESC_height (FBCON_FONT_DESC_width +4) +#define FBCON_FONT_DESC_data (FBCON_FONT_DESC_height+4) +#define FBCON_FONT_DESC_pref (FBCON_FONT_DESC_data +4) +#endif + +#else /* __ASSEMBLY__ */ + +#include <linux/types.h> + +struct fbcon_font_desc { + int idx; + char *name; + int width, height; + void *data; + int pref; +}; + +#define VGA8x8_IDX 0 +#define VGA8x16_IDX 1 +#define PEARL8x8_IDX 2 +#define VGA6x11_IDX 3 +#define SUN8x16_IDX 4 +#define SUN12x22_IDX 5 +#define ACORN8x8_IDX 6 + +extern struct fbcon_font_desc font_vga_8x8, + font_vga_8x16, + font_pearl_8x8, + font_vga_6x11, + font_sun_8x16, + font_sun_12x22, + font_acorn_8x8; + +/* Find a font with a specific name */ + +extern struct fbcon_font_desc *fbcon_find_font(char *name); + +/* Get the default font for a specific screen size */ + +extern struct fbcon_font_desc *fbcon_get_default_font(int xres, int yres); + +/* Max. length for the name of a predefined font */ +#define MAX_FONT_NAME 32 + +#endif /* __ASSEMBLY__ */ + +#endif /* _VIDEO_FONT_H */ diff --git a/include/video/macmodes.h b/include/video/macmodes.h new file mode 100644 index 000000000..c459987e3 --- /dev/null +++ b/include/video/macmodes.h @@ -0,0 +1,64 @@ +/* + * linux/drivers/video/macmodes.h -- Standard MacOS video modes + * + * Copyright (C) 1998 Geert Uytterhoeven + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive for + * more details. + */ + +#ifndef _VIDEO_MACMODES_H +#define _VIDEO_MACMODES_H + + /* + * Video mode values. + * These are supposed to be the same as the values that Apple uses in + * MacOS. + */ + +#define VMODE_NVRAM 0 +#define VMODE_512_384_60I 1 /* 512x384, 60Hz interlaced (NTSC) */ +#define VMODE_512_384_60 2 /* 512x384, 60Hz */ +#define VMODE_640_480_50I 3 /* 640x480, 50Hz interlaced (PAL) */ +#define VMODE_640_480_60I 4 /* 640x480, 60Hz interlaced (NTSC) */ +#define VMODE_640_480_60 5 /* 640x480, 60Hz (VGA) */ +#define VMODE_640_480_67 6 /* 640x480, 67Hz */ +#define VMODE_640_870_75P 7 /* 640x870, 75Hz (portrait) */ +#define VMODE_768_576_50I 8 /* 768x576, 50Hz (PAL full frame) */ +#define VMODE_800_600_56 9 /* 800x600, 56Hz */ +#define VMODE_800_600_60 10 /* 800x600, 60Hz */ +#define VMODE_800_600_72 11 /* 800x600, 72Hz */ +#define VMODE_800_600_75 12 /* 800x600, 75Hz */ +#define VMODE_832_624_75 13 /* 832x624, 75Hz */ +#define VMODE_1024_768_60 14 /* 1024x768, 60Hz */ +#define VMODE_1024_768_70 15 /* 1024x768, 70Hz (or 72Hz?) */ +#define VMODE_1024_768_75V 16 /* 1024x768, 75Hz (VESA) */ +#define VMODE_1024_768_75 17 /* 1024x768, 75Hz */ +#define VMODE_1152_870_75 18 /* 1152x870, 75Hz */ +#define VMODE_1280_960_75 19 /* 1280x960, 75Hz */ +#define VMODE_1280_1024_75 20 /* 1280x1024, 75Hz */ +#define VMODE_MAX 20 +#define VMODE_CHOOSE 99 + +#define CMODE_NVRAM -1 +#define CMODE_8 0 /* 8 bits/pixel */ +#define CMODE_16 1 /* 16 (actually 15) bits/pixel */ +#define CMODE_32 2 /* 32 (actually 24) bits/pixel */ + + +extern int mac_vmode_to_var(int vmode, int cmode, + struct fb_var_screeninfo *var); +extern int mac_var_to_vmode(const struct fb_var_screeninfo *var, int *vmode, + int *cmode); +extern int mac_map_monitor_sense(int sense); + + + /* + * Addresses in NVRAM where video mode and pixel size are stored. + */ + +#define NV_VMODE 0x140f +#define NV_CMODE 0x1410 + +#endif /* _VIDEO_MACMODES_H */ diff --git a/include/video/s3blit.h b/include/video/s3blit.h new file mode 100644 index 000000000..b1db63187 --- /dev/null +++ b/include/video/s3blit.h @@ -0,0 +1,79 @@ +#ifndef _VIDEO_S3BLIT_H +#define _VIDEO_S3BLIT_H + +/* s3 commands */ +#define S3_BITBLT 0xc011 +#define S3_TWOPOINTLINE 0x2811 +#define S3_FILLEDRECT 0x40b1 + +#define S3_FIFO_EMPTY 0x0400 +#define S3_HDW_BUSY 0x0200 + +/* Enhanced register mapping (MMIO mode) */ + +#define S3_READ_SEL 0xbee8 /* offset f */ +#define S3_MULT_MISC 0xbee8 /* offset e */ +#define S3_ERR_TERM 0x92e8 +#define S3_FRGD_COLOR 0xa6e8 +#define S3_BKGD_COLOR 0xa2e8 +#define S3_PIXEL_CNTL 0xbee8 /* offset a */ +#define S3_FRGD_MIX 0xbae8 +#define S3_BKGD_MIX 0xb6e8 +#define S3_CUR_Y 0x82e8 +#define S3_CUR_X 0x86e8 +#define S3_DESTY_AXSTP 0x8ae8 +#define S3_DESTX_DIASTP 0x8ee8 +#define S3_MIN_AXIS_PCNT 0xbee8 /* offset 0 */ +#define S3_MAJ_AXIS_PCNT 0x96e8 +#define S3_CMD 0x9ae8 +#define S3_GP_STAT 0x9ae8 +#define S3_ADVFUNC_CNTL 0x4ae8 +#define S3_WRT_MASK 0xaae8 +#define S3_RD_MASK 0xaee8 + +/* Enhanced register mapping (Packed MMIO mode, write only) */ +#define S3_ALT_CURXY 0x8100 +#define S3_ALT_CURXY2 0x8104 +#define S3_ALT_STEP 0x8108 +#define S3_ALT_STEP2 0x810c +#define S3_ALT_ERR 0x8110 +#define S3_ALT_CMD 0x8118 +#define S3_ALT_MIX 0x8134 +#define S3_ALT_PCNT 0x8148 +#define S3_ALT_PAT 0x8168 + +/* Drawing modes */ +#define S3_NOTCUR 0x0000 +#define S3_LOGICALZERO 0x0001 +#define S3_LOGICALONE 0x0002 +#define S3_LEAVEASIS 0x0003 +#define S3_NOTNEW 0x0004 +#define S3_CURXORNEW 0x0005 +#define S3_NOT_CURXORNEW 0x0006 +#define S3_NEW 0x0007 +#define S3_NOTCURORNOTNEW 0x0008 +#define S3_CURORNOTNEW 0x0009 +#define S3_NOTCURORNEW 0x000a +#define S3_CURORNEW 0x000b +#define S3_CURANDNEW 0x000c +#define S3_NOTCURANDNEW 0x000d +#define S3_CURANDNOTNEW 0x000e +#define S3_NOTCURANDNOTNEW 0x000f + +#define S3_CRTC_ADR 0x03d4 +#define S3_CRTC_DATA 0x03d5 + +#define S3_REG_LOCK2 0x39 +#define S3_HGC_MODE 0x45 + +#define S3_HWGC_ORGX_H 0x46 +#define S3_HWGC_ORGX_L 0x47 +#define S3_HWGC_ORGY_H 0x48 +#define S3_HWGC_ORGY_L 0x49 +#define S3_HWGC_DX 0x4e +#define S3_HWGC_DY 0x4f + + +#define S3_LAW_CTL 0x58 + +#endif /* _VIDEO_S3BLIT_H */ diff --git a/include/video/sbusfb.h b/include/video/sbusfb.h new file mode 100644 index 000000000..2a6d91215 --- /dev/null +++ b/include/video/sbusfb.h @@ -0,0 +1,138 @@ +#include <linux/timer.h> +#include <asm/sbus.h> +#include <asm/oplib.h> +#include <asm/fbio.h> + +#include <video/fbcon.h> + +struct bt_regs { + volatile unsigned int addr; /* address register */ + volatile unsigned int color_map; /* color map */ + volatile unsigned int control; /* control register */ + volatile unsigned int cursor; /* cursor map register */ +}; + +struct fb_info_creator { + struct ffb_fbc *fbc; + struct ffb_dac *dac; + int dac_rev; + int xy_margin; +}; +struct fb_info_cgsix { + struct bt_regs *bt; + struct cg6_fbc *fbc; + struct cg6_thc *thc; + struct cg6_tec *tec; + volatile u32 *fhc; +}; +struct fb_info_bwtwo { + struct bw2_regs *regs; +}; +struct fb_info_cgthree { + struct cg3_regs *regs; +}; +struct fb_info_tcx { + struct bt_regs *bt; + struct tcx_thc *thc; + struct tcx_tec *tec; + u32 *cplane; +}; +struct fb_info_leo { + struct leo_lx_krn *lx_krn; + struct leo_lc_ss0_usr *lc_ss0_usr; + struct leo_ld_ss0 *ld_ss0; + struct leo_ld_ss1 *ld_ss1; + struct leo_cursor *cursor; + unsigned int extent; +}; +struct fb_info_cgfourteen { + struct cg14_regs *regs; + struct cg14_cursor *cursor; + struct cg14_clut *clut; + int ramsize; + int mode; +}; + +struct cg_cursor { + char enable; /* cursor is enabled */ + char mode; /* cursor mode */ + struct fbcurpos cpos; /* position */ + struct fbcurpos chot; /* hot-spot */ + struct fbcurpos size; /* size of mask & image fields */ + struct fbcurpos hwsize; /* hw max size */ + int bits[2][128]; /* space for mask & image bits */ + char color [6]; /* cursor colors */ + struct timer_list timer; /* cursor timer */ + int blink_rate; /* cursor blink rate */ +}; + +struct sbus_mmap_map { + unsigned long voff; + unsigned long poff; + unsigned long size; +}; + +#define SBUS_MMAP_FBSIZE(n) (-n) +#define SBUS_MMAP_EMPTY 0x80000000 + +struct fb_info_sbusfb { + struct fb_info info; + struct fb_fix_screeninfo fix; + struct fb_var_screeninfo var; + struct display disp; + struct display_switch dispsw; + struct fbtype type; + struct linux_sbus_device *sbdp; + int prom_node, prom_parent; + union { + struct fb_info_creator ffb; + struct fb_info_cgsix cg6; + struct fb_info_bwtwo bw2; + struct fb_info_cgthree cg3; + struct fb_info_tcx tcx; + struct fb_info_leo leo; + struct fb_info_cgfourteen cg14; + } s; + unsigned char *color_map; + struct cg_cursor cursor; + unsigned char open; + unsigned char mmaped; + unsigned char blanked; + int x_margin; + int y_margin; + int vtconsole; + int consolecnt; + int graphmode; + int emulations[4]; + struct sbus_mmap_map *mmap_map; + unsigned long physbase; + int iospace; + /* Methods */ + void (*setup)(struct display *); + void (*setcursor)(struct fb_info_sbusfb *); + void (*setcurshape)(struct fb_info_sbusfb *); + void (*setcursormap)(struct fb_info_sbusfb *, unsigned char *, unsigned char *, unsigned char *); + void (*loadcmap)(struct fb_info_sbusfb *, struct display *, int, int); + void (*blank)(struct fb_info_sbusfb *); + void (*unblank)(struct fb_info_sbusfb *); + void (*margins)(struct fb_info_sbusfb *, struct display *, int, int); + void (*reset)(struct fb_info_sbusfb *); + void (*fill)(struct fb_info_sbusfb *, struct display *, int, int, unsigned short *); + void (*switch_from_graph)(struct fb_info_sbusfb *); + void (*restore_palette)(struct fb_info_sbusfb *); + int (*ioctl)(struct fb_info_sbusfb *, unsigned int, unsigned long); +}; + +extern char *creatorfb_init(struct fb_info_sbusfb *); +extern char *cgsixfb_init(struct fb_info_sbusfb *); +extern char *cgthreefb_init(struct fb_info_sbusfb *); +extern char *tcxfb_init(struct fb_info_sbusfb *); +extern char *leofb_init(struct fb_info_sbusfb *); +extern char *bwtwofb_init(struct fb_info_sbusfb *); +extern char *cgfourteenfb_init(struct fb_info_sbusfb *); + +#define sbusfbinfod(disp) ((struct fb_info_sbusfb *)(disp->fb_info)) +#define sbusfbinfo(info) ((struct fb_info_sbusfb *)(info)) +#define CM(i, j) [3*(i)+(j)] + +#define SBUSFBINIT_SIZECHANGE ((char *)-1) |