diff options
Diffstat (limited to 'include')
135 files changed, 3070 insertions, 4611 deletions
diff --git a/include/asm-alpha/atomic.h b/include/asm-alpha/atomic.h index 2485cd781..16366d055 100644 --- a/include/asm-alpha/atomic.h +++ b/include/asm-alpha/atomic.h @@ -41,9 +41,9 @@ extern __inline__ void atomic_add(int i, atomic_t * v) " addl %0,%2,%0\n" " stl_c %0,%1\n" " beq %0,2f\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "2: br 1b\n" - ".text" + ".previous" :"=&r" (temp), "=m" (__atomic_fool_gcc(v)) :"Ir" (i), "m" (__atomic_fool_gcc(v))); } @@ -56,9 +56,9 @@ extern __inline__ void atomic_sub(int i, atomic_t * v) " subl %0,%2,%0\n" " stl_c %0,%1\n" " beq %0,2f\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "2: br 1b\n" - ".text" + ".previous" :"=&r" (temp), "=m" (__atomic_fool_gcc(v)) :"Ir" (i), "m" (__atomic_fool_gcc(v))); } @@ -75,9 +75,9 @@ extern __inline__ long atomic_add_return(int i, atomic_t * v) " mov %0,%2\n" " stl_c %0,%1\n" " beq %0,2f\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "2: br 1b\n" - ".text" + ".previous" :"=&r" (temp), "=m" (__atomic_fool_gcc(v)), "=&r" (result) :"Ir" (i), "m" (__atomic_fool_gcc(v))); return result; @@ -92,9 +92,9 @@ extern __inline__ long atomic_sub_return(int i, atomic_t * v) " mov %0,%2\n" " stl_c %0,%1\n" " beq %0,2f\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "2: br 1b\n" - ".text" + ".previous" :"=&r" (temp), "=m" (__atomic_fool_gcc(v)), "=&r" (result) :"Ir" (i), "m" (__atomic_fool_gcc(v))); return result; diff --git a/include/asm-alpha/bitops.h b/include/asm-alpha/bitops.h index 2a6f33a64..bec44fe54 100644 --- a/include/asm-alpha/bitops.h +++ b/include/asm-alpha/bitops.h @@ -17,7 +17,7 @@ * bit 0 is the LSB of addr; bit 64 is the LSB of (addr+1). */ -extern __inline__ unsigned long set_bit(unsigned long nr, void * addr) +extern __inline__ void set_bit(unsigned long nr, void * addr) { unsigned long oldbit; unsigned long temp; @@ -31,16 +31,75 @@ extern __inline__ unsigned long set_bit(unsigned long nr, void * addr) " stl_c %0,%1\n" " beq %0,3f\n" "2:\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "3: br 1b\n" - ".text" + ".previous" + :"=&r" (temp), "=m" (*m), "=&r" (oldbit) + :"Ir" (1UL << (nr & 31)), "m" (*m)); +} + +extern __inline__ void clear_bit(unsigned long nr, void * addr) +{ + unsigned long oldbit; + unsigned long temp; + unsigned int * m = ((unsigned int *) addr) + (nr >> 5); + + __asm__ __volatile__( + "1: ldl_l %0,%1\n" + " and %0,%3,%2\n\t" + " beq %2,2f\n\t" + " xor %0,%3,%0\n\t" + " stl_c %0,%1\n\t" + " beq %0,3f\n" + "2:\n" + ".section .text2,\"ax\"\n" + "3: br 1b\n" + ".previous" + :"=&r" (temp), "=m" (*m), "=&r" (oldbit) + :"Ir" (1UL << (nr & 31)), "m" (*m)); +} + +extern __inline__ void change_bit(unsigned long nr, void * addr) +{ + unsigned long temp; + unsigned int * m = ((unsigned int *) addr) + (nr >> 5); + + __asm__ __volatile__( + "1: ldl_l %0,%1\n" + " xor %0,%2,%0\n\t" + " stl_c %0,%1\n\t" + " beq %0,3f\n" + ".section .text2,\"ax\"\n" + "3: br 1b\n" + ".previous" + :"=&r" (temp), "=m" (*m) + :"Ir" (1UL << (nr & 31)), "m" (*m)); +} + +extern __inline__ unsigned long test_and_set_bit(unsigned long nr, void * addr) +{ + unsigned long oldbit; + unsigned long temp; + unsigned int * m = ((unsigned int *) addr) + (nr >> 5); + + __asm__ __volatile__( + "1: ldl_l %0,%1\n" + " and %0,%3,%2\n" + " bne %2,2f\n" + " xor %0,%3,%0\n" + " stl_c %0,%1\n" + " beq %0,3f\n" + "2:\n" + ".section .text2,\"ax\"\n" + "3: br 1b\n" + ".previous" :"=&r" (temp), "=m" (*m), "=&r" (oldbit) :"Ir" (1UL << (nr & 31)), "m" (*m)); return oldbit != 0; } -extern __inline__ unsigned long clear_bit(unsigned long nr, void * addr) +extern __inline__ unsigned long test_and_clear_bit(unsigned long nr, void * addr) { unsigned long oldbit; unsigned long temp; @@ -54,16 +113,16 @@ extern __inline__ unsigned long clear_bit(unsigned long nr, void * addr) " stl_c %0,%1\n\t" " beq %0,3f\n" "2:\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "3: br 1b\n" - ".text" + ".previous" :"=&r" (temp), "=m" (*m), "=&r" (oldbit) :"Ir" (1UL << (nr & 31)), "m" (*m)); return oldbit != 0; } -extern __inline__ unsigned long change_bit(unsigned long nr, void * addr) +extern __inline__ unsigned long test_and_change_bit(unsigned long nr, void * addr) { unsigned long oldbit; unsigned long temp; @@ -75,9 +134,9 @@ extern __inline__ unsigned long change_bit(unsigned long nr, void * addr) " xor %0,%3,%0\n\t" " stl_c %0,%1\n\t" " beq %0,3f\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "3: br 1b\n" - ".text" + ".previous" :"=&r" (temp), "=m" (*m), "=&r" (oldbit) :"Ir" (1UL << (nr & 31)), "m" (*m)); @@ -166,15 +225,15 @@ found_middle: #ifdef __KERNEL__ -#define ext2_set_bit set_bit -#define ext2_clear_bit clear_bit +#define ext2_set_bit test_and_set_bit +#define ext2_clear_bit test_and_clear_bit #define ext2_test_bit test_bit #define ext2_find_first_zero_bit find_first_zero_bit #define ext2_find_next_zero_bit find_next_zero_bit /* Bitmap functions for the minix filesystem. */ -#define minix_set_bit(nr,addr) set_bit(nr,addr) -#define minix_clear_bit(nr,addr) clear_bit(nr,addr) +#define minix_set_bit(nr,addr) test_and_set_bit(nr,addr) +#define minix_clear_bit(nr,addr) test_and_clear_bit(nr,addr) #define minix_test_bit(nr,addr) test_bit(nr,addr) #define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size) diff --git a/include/asm-alpha/current.h b/include/asm-alpha/current.h index 56d12724b..8db6dd06e 100644 --- a/include/asm-alpha/current.h +++ b/include/asm-alpha/current.h @@ -1,12 +1,6 @@ #ifndef _ALPHA_CURRENT_H #define _ALPHA_CURRENT_H -/* Some architectures may want to do something "clever" here since - * this is the most frequently accessed piece of data in the entire - * kernel. - */ -extern struct task_struct *current_set[NR_CPUS]; - register struct task_struct *current __asm__("$8"); #endif /* !(_ALPHA_CURRENT_H) */ diff --git a/include/asm-alpha/io.h b/include/asm-alpha/io.h index 3084c9f26..a81f5289e 100644 --- a/include/asm-alpha/io.h +++ b/include/asm-alpha/io.h @@ -39,7 +39,7 @@ extern struct hae { extern inline void set_hae(unsigned long new_hae) { unsigned long ipl; - swpipl(ipl,7); + ipl = swpipl(7); hae.cache = new_hae; *hae.reg = new_hae; mb(); diff --git a/include/asm-alpha/keyboard.h b/include/asm-alpha/keyboard.h index bd3eda91d..1edaa52bb 100644 --- a/include/asm-alpha/keyboard.h +++ b/include/asm-alpha/keyboard.h @@ -1,177 +1,63 @@ /* - * CPU specific parts of the keyboard driver + * linux/include/asm-alpha/keyboard.h * - * 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. + * Created 3 Nov 1996 by Geert Uytterhoeven */ -#ifndef __ASM_ALPHA_KEYBOARD_H -#define __ASM_ALPHA_KEYBOARD_H +/* + * This file contains the alpha architecture specific keyboard definitions + */ + +#ifndef _ALPHA_KEYBOARD_H +#define _ALPHA_KEYBOARD_H + +#ifdef __KERNEL__ + +#include <linux/ioport.h> #include <asm/io.h> -#define KEYBOARD_IRQ 1 +#define KEYBOARD_IRQ 1 +#define DISABLE_KBD_DURING_INTERRUPTS 0 #define KBD_REPORT_ERR +#define KBD_REPORT_UNKN +/* #define KBD_IS_FOCUS_9000 */ + +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); +extern int pckbd_translate(unsigned char scancode, unsigned char *keycode, + char raw_mode); +extern char pckbd_unexpected_up(unsigned char keycode); +extern void pckbd_leds(unsigned char leds); +extern void pckbd_init_hw(void); + +#define kbd_setkeycode pckbd_setkeycode +#define kbd_getkeycode pckbd_getkeycode +#define kbd_pretranslate pckbd_pretranslate +#define kbd_translate pckbd_translate +#define kbd_unexpected_up pckbd_unexpected_up +#define kbd_leds pckbd_leds +#define kbd_init_hw pckbd_init_hw + +#define INIT_KBD -__initfunc(static int initialize_kbd(void)); +/* + * keyboard controller registers + */ +#define KBD_STATUS_REG (unsigned int) 0x64 +#define KBD_CNTL_REG (unsigned int) 0x64 +#define KBD_DATA_REG (unsigned int) 0x60 #define kbd_inb_p(port) inb_p(port) #define kbd_inb(port) inb(port) #define kbd_outb_p(data,port) outb_p(data,port) #define kbd_outb(data,port) outb(data,port) -static int -kbd_wait_for_input(void) -{ - int n; - int status, data; - - n = TIMEOUT_CONST; - do { - status = kbd_inb(KBD_STATUS_REG); - /* - * Wait for input data to become available. This bit will - * then be cleared by the following read of the DATA - * register. - */ - - if (!(status & KBD_OBF)) - continue; - - data = kbd_inb(KBD_DATA_REG); - - /* - * Check to see if a timeout error has occurred. This means - * that transmission was started but did not complete in the - * normal time cycle. PERR is set when a parity error occurred - * in the last transmission. - */ - if (status & (KBD_GTO | KBD_PERR)) { - continue; - } - return (data & 0xff); - } while (--n); - return (-1); /* timed-out if fell through to here... */ -} - -static void -kbd_write(int address, int data) -{ - int status; - - do { - status = kbd_inb(KBD_STATUS_REG); /* spin until input buffer empty*/ - } while (status & KBD_IBF); - kbd_outb(data, address); /* write out the data*/ -} - -__initfunc(static int initialize_kbd(void)) -{ - unsigned long flags; - - save_flags(flags); cli(); - - /* Flush any pending input. */ - while (kbd_wait_for_input() != -1) - continue; - - /* - * Test the keyboard interface. - * This seems to be the only way to get it going. - * If the test is successful a x55 is placed in the input buffer. - */ - kbd_write(KBD_CNTL_REG, KBD_SELF_TEST); - if (kbd_wait_for_input() != 0x55) { - printk(KERN_WARNING "initialize_kbd: " - "keyboard failed self test.\n"); - restore_flags(flags); - return(-1); - } - - /* - * Perform a keyboard interface test. This causes the controller - * to test the keyboard clock and data lines. The results of the - * test are placed in the input buffer. - */ - kbd_write(KBD_CNTL_REG, KBD_SELF_TEST2); - if (kbd_wait_for_input() != 0x00) { - printk(KERN_WARNING "initialize_kbd: " - "keyboard failed self test 2.\n"); - restore_flags(flags); - return(-1); - } - - /* Enable the keyboard by allowing the keyboard clock to run. */ - kbd_write(KBD_CNTL_REG, KBD_CNTL_ENABLE); - - /* - * Reset keyboard. If the read times out - * then the assumption is that no keyboard is - * plugged into the machine. - * This defaults the keyboard to scan-code set 2. - */ - kbd_write(KBD_DATA_REG, KBD_RESET); - if (kbd_wait_for_input() != KBD_ACK) { - printk(KERN_WARNING "initialize_kbd: " - "reset kbd failed, no ACK.\n"); - restore_flags(flags); - return(-1); - } - - /* - * Give the keyboard some time to breathe ... - * ... or it fucks up the floppy controller, too. Wiered. - */ - udelay(20); - - if (kbd_wait_for_input() != KBD_POR) { - printk(KERN_WARNING "initialize_kbd: " - "reset kbd failed, not POR.\n"); - restore_flags(flags); - return(-1); - } - - /* - * now do a DEFAULTS_DISABLE always - */ - kbd_write(KBD_DATA_REG, KBD_DISABLE); - if (kbd_wait_for_input() != KBD_ACK) { - printk(KERN_WARNING "initialize_kbd: " - "disable kbd failed, no ACK.\n"); - restore_flags(flags); - return(-1); - } - - /* - * Enable keyboard interrupt, operate in "sys" mode, - * enable keyboard (by clearing the disable keyboard bit), - * disable mouse, do conversion of keycodes. - */ - kbd_write(KBD_CNTL_REG, KBD_WRITE_MODE); - kbd_write(KBD_DATA_REG, KBD_EKI|KBD_SYS|KBD_DMS|KBD_KCC); - - /* - * now ENABLE the keyboard to set it scanning... - */ - kbd_write(KBD_DATA_REG, KBD_ENABLE); - if (kbd_wait_for_input() != KBD_ACK) { - printk(KERN_WARNING "initialize_kbd: " - "keyboard enable failed.\n"); - restore_flags(flags); - return(-1); - } - - restore_flags(flags); - - return (1); -} - -extern __inline__ void -keyboard_setup() +extern __inline__ void keyboard_setup() { request_region(0x60,16,"keyboard"); - initialize_kbd(); } +#endif /* __KERNEL__ */ #endif /* __ASM_ALPHA_KEYBOARD_H */ diff --git a/include/asm-alpha/processor.h b/include/asm-alpha/processor.h index fe0cc681c..93bc9e31a 100644 --- a/include/asm-alpha/processor.h +++ b/include/asm-alpha/processor.h @@ -49,7 +49,7 @@ struct thread_struct { }; #define INIT_MMAP { &init_mm, 0xfffffc0000000000, 0xfffffc0010000000, \ - PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC } + PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap } #define INIT_TSS { \ 0, 0, 0, \ @@ -85,11 +85,13 @@ extern void start_thread(struct pt_regs *, unsigned long, unsigned long); /* Free all resources held by a thread. */ extern void release_thread(struct task_struct *); -/* Allocation and freeing of basic task resources. */ -#define alloc_task_struct() kmalloc(sizeof(struct task_struct), GFP_KERNEL) -#define alloc_kernel_stack(p) __get_free_page(GFP_KERNEL) -#define free_task_struct(p) kfree(p) -#define free_kernel_stack(page) free_page((page)) +/* NOTE: The task struct and the stack go together! */ +#define alloc_task_struct() \ + ((struct task_struct *) __get_free_pages(GFP_KERNEL,1,0)) +#define free_task_struct(p) free_pages((unsigned long)(p),1) + +#define init_task (init_task_union.task) +#define init_stack (init_task_union.stack) /* * Return_address is a replacement for __builtin_return_address(count) diff --git a/include/asm-alpha/semaphore.h b/include/asm-alpha/semaphore.h index b94573f13..29cbb4a33 100644 --- a/include/asm-alpha/semaphore.h +++ b/include/asm-alpha/semaphore.h @@ -47,9 +47,9 @@ static inline int waking_non_zero(struct semaphore *sem) " stl_c %0,%2\n" " beq %0,3f\n" "2:\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "3: br 1b\n" - ".text" + ".previous" : "=r"(ret), "=r"(tmp), "=m"(__atomic_fool_gcc(&sem->waking)) : "0"(0)); diff --git a/include/asm-alpha/softirq.h b/include/asm-alpha/softirq.h index fa8124c38..f267f6ceb 100644 --- a/include/asm-alpha/softirq.h +++ b/include/asm-alpha/softirq.h @@ -17,9 +17,9 @@ static inline void clear_active_bhs(unsigned long x) " and %0,%2,%0\n" " stq_c %0,%1\n" " beq %0,2f\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "2: br 1b\n" - ".text" + ".previous" :"=&r" (temp), "=m" (bh_active) :"Ir" (x), "m" (bh_active)); } diff --git a/include/asm-alpha/spinlock.h b/include/asm-alpha/spinlock.h index 9e58e0e4d..a38477426 100644 --- a/include/asm-alpha/spinlock.h +++ b/include/asm-alpha/spinlock.h @@ -3,8 +3,9 @@ #ifndef __SMP__ -typedef struct { } spinlock_t; -#define SPIN_LOCK_UNLOCKED { } +/* gcc 2.7.2 can crash initializing an empty structure. */ +typedef struct { int dummy; } spinlock_t; +#define SPIN_LOCK_UNLOCKED { 0 } #define spin_lock_init(lock) do { } while(0) #define spin_lock(lock) do { } while(0) @@ -14,7 +15,7 @@ typedef struct { } spinlock_t; #define spin_lock_irq(lock) setipl(7) #define spin_unlock_irq(lock) setipl(0) -#define spin_lock_irqsave(lock, flags) swpipl(flags,7) +#define spin_lock_irqsave(lock, flags) do { (flags) = swpipl(7); } while (0) #define spin_unlock_irqrestore(lock, flags) setipl(flags) /* @@ -27,8 +28,8 @@ typedef struct { } spinlock_t; * irq-safe write-lock, but readers can get non-irqsafe * read-locks. */ -typedef struct { } rwlock_t; -#define RW_LOCK_UNLOCKED { } +typedef struct { int dummy; } rwlock_t; +#define RW_LOCK_UNLOCKED { 0 } #define read_lock(lock) do { } while(0) #define read_unlock(lock) do { } while(0) @@ -39,10 +40,10 @@ typedef struct { } rwlock_t; #define write_lock_irq(lock) cli() #define write_unlock_irq(lock) sti() -#define read_lock_irqsave(lock, flags) save_and_cli(flags) -#define read_unlock_irqrestore(lock, flags) restore_flags(flags) -#define write_lock_irqsave(lock, flags) save_and_cli(flags) -#define write_unlock_irqrestore(lock, flags) restore_flags(flags) +#define read_lock_irqsave(lock, flags) do { (flags) = swpipl(7); } while (0) +#define read_unlock_irqrestore(lock, flags) setipl(flags) +#define write_lock_irqsave(lock, flags) do { (flags) = swpipl(7); } while (0) +#define write_unlock_irqrestore(lock, flags) setipl(flags) #else @@ -89,13 +90,13 @@ l1: " stq_c %0,%1\n" " beq %0,3f\n" "4: mb\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "2: ldq %0,%1\n" " subq %2,1,%2\n" "3: blt %2,4b\n" " blbs %0,2b\n" " br 1b\n" - ".text" + ".previous" : "=r" (tmp), "=m" (__dummy_lock(lock)), "=r" (stuck) @@ -107,7 +108,7 @@ l1: lock->previous = (unsigned long) &&l1; } -#define spin_trylock(lock) (!set_bit(0,(lock))) +#define spin_trylock(lock) (!test_and_set_bit(0,(lock))) #define spin_lock_irq(lock) \ do { __cli(); spin_lock(lock); } while (0) @@ -116,7 +117,7 @@ l1: do { spin_unlock(lock); __sti(); } while (0) #define spin_lock_irqsave(lock, flags) \ - do { swpipl(flags,7); spin_lock(lock); } while (0) + do { flags = swpipl(7); spin_lock(lock); } while (0) #define spin_unlock_irqrestore(lock, flags) \ do { spin_unlock(lock); setipl(flags); } while (0) diff --git a/include/asm-alpha/system.h b/include/asm-alpha/system.h index 782120686..cde066b66 100644 --- a/include/asm-alpha/system.h +++ b/include/asm-alpha/system.h @@ -56,63 +56,95 @@ extern void wrmces (unsigned long); #define halt() __asm__ __volatile__ ("call_pal %0" : : "i" (PAL_halt) : "memory") #define switch_to(prev,next) do { \ - current_set[0] = current = next; \ + current = next; \ alpha_switch_to((unsigned long) ¤t->tss - 0xfffffc0000000000); \ } while (0) extern void alpha_switch_to(unsigned long pctxp); -extern void imb(void); - #define mb() \ __asm__ __volatile__("mb": : :"memory") +#define imb() \ +__asm__ __volatile__ ("call_pal %0" : : "i" (PAL_imb) : "memory") + #define draina() \ __asm__ __volatile__ ("call_pal %0" : : "i" (PAL_draina) : "memory") -#define getipl(__old_ipl) \ -__asm__ __volatile__( \ - "call_pal 54\n\t" \ - "bis $0,$0,%0" \ - : "=r" (__old_ipl) \ - : : "$0", "$1", "$16", "$22", "$23", "$24", "$25") - -#define setipl(__new_ipl) \ -__asm__ __volatile__( \ - "bis %0,%0,$16\n\t" \ - "call_pal 53" \ - : : "r" (__new_ipl) \ - : "$0", "$1", "$16", "$22", "$23", "$24", "$25", "memory") - -#define swpipl(__old_ipl,__new_ipl) \ -__asm__ __volatile__( \ - "bis %1,%1,$16\n\t" \ - "call_pal 53\n\t" \ - "bis $0,$0,%0" \ - : "=r" (__old_ipl) \ - : "r" (__new_ipl) \ - : "$0", "$1", "$16", "$22", "$23", "$24", "$25", "memory") +#define call_pal1(palno,arg) \ +({ \ + register unsigned long __r0 __asm__("$0"); \ + register unsigned long __r16 __asm__("$16"); __r16 = arg; \ + __asm__ __volatile__( \ + "call_pal %3" \ + :"=r" (__r0),"=r" (__r16) \ + :"1" (__r16),"i" (palno) \ + :"$1", "$22", "$23", "$24", "$25", "memory"); \ + __r0; \ +}) + +#define getipl() \ +({ \ + register unsigned long r0 __asm__("$0"); \ + __asm__ __volatile__( \ + "call_pal %1" \ + :"=r" (r0) \ + :"i" (PAL_rdps) \ + :"$1", "$16", "$22", "$23", "$24", "$25", "memory"); \ + r0; \ +}) + +#define setipl(ipl) \ +do { \ + register unsigned long __r16 __asm__("$16") = (ipl); \ + __asm__ __volatile__( \ + "call_pal %2" \ + :"=r" (__r16) \ + :"0" (__r16),"i" (PAL_swpipl) \ + :"$0", "$1", "$22", "$23", "$24", "$25", "memory"); \ +} while (0) + +#define swpipl(ipl) \ +({ \ + register unsigned long __r0 __asm__("$0"); \ + register unsigned long __r16 __asm__("$16") = (ipl); \ + __asm__ __volatile__( \ + "call_pal %3" \ + :"=r" (__r0),"=r" (__r16) \ + :"1" (__r16),"i" (PAL_swpipl) \ + :"$1", "$22", "$23", "$24", "$25", "memory"); \ + __r0; \ +}) #define __cli() setipl(7) #define __sti() setipl(0) -#define __save_flags(flags) getipl(flags) +#define __save_flags(flags) do { (flags) = getipl(); } while (0) #define __restore_flags(flags) setipl(flags) #define cli() setipl(7) #define sti() setipl(0) -#define save_flags(flags) getipl(flags) +#define save_flags(flags) do { (flags) = getipl(); } while (0) #define restore_flags(flags) setipl(flags) /* * TB routines.. */ -extern void tbi(long type, ...); +#define __tbi(nr,arg,arg1...) do { \ + register unsigned long __r16 __asm__("$16") = (nr); \ + register unsigned long __r17 __asm__("$17"); arg; \ + __asm__ __volatile__( \ + "call_pal %3" \ + :"=r" (__r16),"=r" (__r17) \ + :"0" (__r16),"i" (PAL_tbi) ,##arg1 \ + :"$0", "$1", "$22", "$23", "$24", "$25"); \ +} while (0) -#define tbisi(x) tbi(1,(x)) -#define tbisd(x) tbi(2,(x)) -#define tbis(x) tbi(3,(x)) -#define tbiap() tbi(-1) -#define tbia() tbi(-2) +#define tbi(x,y) __tbi(x,__r17=(y),"1" (__r17)) +#define tbisi(x) __tbi(1,__r17=(x),"1" (__r17)) +#define tbisd(x) __tbi(2,__r17=(x),"1" (__r17)) +#define tbis(x) __tbi(3,__r17=(x),"1" (__r17)) +#define tbiap() __tbi(-1, /* no second argument */) +#define tbia() __tbi(-2, /* no second argument */) /* * Give prototypes to shut up gcc. @@ -129,9 +161,9 @@ extern __inline__ unsigned long xchg_u32(volatile int * m, unsigned long val) " bis %3,%3,%1\n" " stl_c %1,%2\n" " beq %1,2f\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "2: br 1b\n" - ".text" + ".previous" : "=&r" (val), "=&r" (dummy), "=m" (*m) : "r" (val), "m" (*m)); @@ -147,9 +179,9 @@ extern __inline__ unsigned long xchg_u64(volatile long * m, unsigned long val) " bis %3,%3,%1\n" " stq_c %1,%2\n" " beq %1,2f\n" - ".text 2\n" + ".section .text2,\"ax\"\n" "2: br 1b\n" - ".text" + ".previous" : "=&r" (val), "=&r" (dummy), "=m" (*m) : "r" (val), "m" (*m)); diff --git a/include/asm-i386/bitops.h b/include/asm-i386/bitops.h index 8e6d484e4..ee24aa79f 100644 --- a/include/asm-i386/bitops.h +++ b/include/asm-i386/bitops.h @@ -26,7 +26,31 @@ struct __dummy { unsigned long a[100]; }; #define ADDR (*(struct __dummy *) addr) #define CONST_ADDR (*(const struct __dummy *) addr) -extern __inline__ int set_bit(int nr, volatile void * addr) +extern __inline__ void set_bit(int nr, volatile void * addr) +{ + __asm__ __volatile__( LOCK_PREFIX + "btsl %1,%0" + :"=m" (ADDR) + :"ir" (nr)); +} + +extern __inline__ void clear_bit(int nr, volatile void * addr) +{ + __asm__ __volatile__( LOCK_PREFIX + "btrl %1,%0" + :"=m" (ADDR) + :"ir" (nr)); +} + +extern __inline__ void change_bit(int nr, volatile void * addr) +{ + __asm__ __volatile__( LOCK_PREFIX + "btcl %1,%0" + :"=m" (ADDR) + :"ir" (nr)); +} + +extern __inline__ int test_and_set_bit(int nr, volatile void * addr) { int oldbit; @@ -37,7 +61,7 @@ extern __inline__ int set_bit(int nr, volatile void * addr) return oldbit; } -extern __inline__ int clear_bit(int nr, volatile void * addr) +extern __inline__ int test_and_clear_bit(int nr, volatile void * addr) { int oldbit; @@ -48,7 +72,7 @@ extern __inline__ int clear_bit(int nr, volatile void * addr) return oldbit; } -extern __inline__ int change_bit(int nr, volatile void * addr) +extern __inline__ int test_and_change_bit(int nr, volatile void * addr) { int oldbit; @@ -150,15 +174,15 @@ extern __inline__ unsigned long ffz(unsigned long word) #ifdef __KERNEL__ -#define ext2_set_bit set_bit -#define ext2_clear_bit clear_bit +#define ext2_set_bit test_and_set_bit +#define ext2_clear_bit test_and_clear_bit #define ext2_test_bit test_bit #define ext2_find_first_zero_bit find_first_zero_bit #define ext2_find_next_zero_bit find_next_zero_bit /* Bitmap functions for the minix filesystem. */ -#define minix_set_bit(nr,addr) set_bit(nr,addr) -#define minix_clear_bit(nr,addr) clear_bit(nr,addr) +#define minix_set_bit(nr,addr) test_and_set_bit(nr,addr) +#define minix_clear_bit(nr,addr) test_and_clear_bit(nr,addr) #define minix_test_bit(nr,addr) test_bit(nr,addr) #define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size) diff --git a/include/asm-i386/current.h b/include/asm-i386/current.h index 01ba3e9a0..976320d75 100644 --- a/include/asm-i386/current.h +++ b/include/asm-i386/current.h @@ -1,12 +1,14 @@ #ifndef _I386_CURRENT_H #define _I386_CURRENT_H -/* Some architectures may want to do something "clever" here since - * this is the most frequently accessed piece of data in the entire - * kernel. For an example, see the Sparc implementation where an - * entire register is hard locked to contain the value of current. - */ -extern struct task_struct *current_set[NR_CPUS]; -#define current (current_set[smp_processor_id()]) /* Current on this processor */ +static inline unsigned long get_esp(void) +{ + unsigned long esp; + __asm__("movl %%esp,%0":"=r" (esp)); + return esp; +} + +#define current ((struct task_struct *)(get_esp() & ~8191UL)) + #endif /* !(_I386_CURRENT_H) */ diff --git a/include/asm-i386/delay.h b/include/asm-i386/delay.h index e22e8d6b2..3435e4d1b 100644 --- a/include/asm-i386/delay.h +++ b/include/asm-i386/delay.h @@ -30,21 +30,26 @@ extern __inline__ void __delay(int loops) * first constant multiplications gets optimized away if the delay is * a constant) */ -extern __inline__ void udelay(unsigned long usecs) +extern __inline__ void __udelay(unsigned long usecs, unsigned long lps) { usecs *= 0x000010c6; /* 2**32 / 1000000 */ __asm__("mull %0" :"=d" (usecs) -#ifdef __SMP__ - :"a" (usecs),"0" (cpu_data[smp_processor_id()].udelay_val) -#else - :"a" (usecs),"0" (loops_per_sec) -#endif + :"a" (usecs),"0" (lps) :"ax"); __delay(usecs); } +#ifdef __SMP__ +#define __udelay_val cpu_data[smp_processor_id()].udelay_val +#else +#define __udelay_val loops_per_sec +#endif + +#define udelay(usecs) __udelay((usecs),__udelay_val) + + extern __inline__ unsigned long muldiv(unsigned long a, unsigned long b, unsigned long c) { __asm__("mull %1 ; divl %2" diff --git a/include/asm-i386/hardirq.h b/include/asm-i386/hardirq.h index bdaad9b35..0ceef9108 100644 --- a/include/asm-i386/hardirq.h +++ b/include/asm-i386/hardirq.h @@ -58,7 +58,6 @@ static inline int hardirq_trylock(int cpu) return 0; } ++local_irq_count[cpu]; - __sti(); return 1; } diff --git a/include/asm-i386/keyboard.h b/include/asm-i386/keyboard.h index ed6c7d472..180d747e5 100644 --- a/include/asm-i386/keyboard.h +++ b/include/asm-i386/keyboard.h @@ -1,18 +1,43 @@ /* - * CPU specific parts of the keyboard driver + * linux/include/asm-i386/keyboard.h * - * 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. + * Created 3 Nov 1996 by Geert Uytterhoeven */ -#ifndef __ASM_i386_KEYBOARD_H -#define __ASM_i386_KEYBOARD_H + +/* + * This file contains the i386 architecture specific keyboard definitions + */ + +#ifndef _I386_KEYBOARD_H +#define _I386_KEYBOARD_H + +#ifdef __KERNEL__ #include <asm/io.h> -#define KEYBOARD_IRQ 1 +#define KEYBOARD_IRQ 1 +#define DISABLE_KBD_DURING_INTERRUPTS 0 #define KBD_REPORT_ERR +#define KBD_REPORT_UNKN +/* #define KBD_IS_FOCUS_9000 */ + +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); +extern int pckbd_translate(unsigned char scancode, unsigned char *keycode, + char raw_mode); +extern char pckbd_unexpected_up(unsigned char keycode); +extern void pckbd_leds(unsigned char leds); +extern void pckbd_init_hw(void); + +#define kbd_setkeycode pckbd_setkeycode +#define kbd_getkeycode pckbd_getkeycode +#define kbd_pretranslate pckbd_pretranslate +#define kbd_translate pckbd_translate +#define kbd_unexpected_up pckbd_unexpected_up +#define kbd_leds pckbd_leds +#define kbd_init_hw pckbd_init_hw #define kbd_inb_p(port) inb_p(port) #define kbd_inb(port) inb(port) @@ -25,4 +50,5 @@ keyboard_setup() request_region(0x60,16,"keyboard"); } +#endif /* __KERNEL__ */ #endif /* __ASM_i386_KEYBOARD_H */ diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h index 9c6830f68..b4f26c73c 100644 --- a/include/asm-i386/processor.h +++ b/include/asm-i386/processor.h @@ -119,14 +119,15 @@ struct thread_struct { /* virtual 86 mode info */ struct vm86_struct * vm86_info; unsigned long screen_bitmap; - unsigned long v86flags, v86mask, v86mode; + unsigned long v86flags, v86mask, v86mode, saved_esp0; }; -#define INIT_MMAP { &init_mm, 0xC0000000, 0xFFFFF000, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC } +#define INIT_MMAP \ +{ &init_mm, 0, 0, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap } #define INIT_TSS { \ 0,0, \ - sizeof(init_kernel_stack) + (long) &init_kernel_stack, \ + sizeof(init_stack) + (long) &init_stack, \ KERNEL_DS, 0, \ 0,0,0,0,0,0, \ (long) &swapper_pg_dir - PAGE_OFFSET, \ @@ -137,7 +138,7 @@ struct thread_struct { {~0, }, /* ioperm */ \ _TSS(0), 0, 0, 0, KERNEL_DS, \ { { 0, }, }, /* 387 state */ \ - NULL, 0, 0, 0, 0 /* vm86_info */, \ + NULL, 0, 0, 0, 0, 0 /* vm86_info */, \ } #define start_thread(regs, new_eip, new_esp) do {\ @@ -164,10 +165,15 @@ extern inline unsigned long thread_saved_pc(struct thread_struct *t) } /* Allocation and freeing of basic task resources. */ -#define alloc_task_struct() kmalloc(sizeof(struct task_struct), GFP_KERNEL) -#define alloc_kernel_stack(p) __get_free_page(GFP_KERNEL) -#define free_task_struct(p) kfree(p) -#define free_kernel_stack(page) free_page((page)) +/* + * NOTE! The task struct and the stack go together + */ +#define alloc_task_struct() \ + ((struct task_struct *) __get_free_pages(GFP_KERNEL,1,0)) +#define free_task_struct(p) free_pages((unsigned long)(p),1) + +#define init_task (init_task_union.task) +#define init_stack (init_task_union.stack) /* * Return_address is a replacement for __builtin_return_address(count) diff --git a/include/asm-i386/semaphore.h b/include/asm-i386/semaphore.h index 4395dfce0..3ba3f8af5 100644 --- a/include/asm-i386/semaphore.h +++ b/include/asm-i386/semaphore.h @@ -85,44 +85,45 @@ extern inline void down(struct semaphore * sem) { __asm__ __volatile__( "# atomic down operation\n\t" - "movl $1f,%%eax\n\t" #ifdef __SMP__ "lock ; " #endif "decl 0(%0)\n\t" - "js " SYMBOL_NAME_STR(__down_failed) - "\n1:" + "js 2f\n" + "1:\n" + ".section .text.lock,\"ax\"\n" + "2:\tpushl $1b\n\t" + "jmp __down_failed\n" + ".previous" :/* no outputs */ :"c" (sem) - :"ax","memory"); + :"memory"); } -/* - * This version waits in interruptible state so that the waiting - * process can be killed. The down_failed_interruptible routine - * returns negative for signalled and zero for semaphore acquired. - */ extern inline int down_interruptible(struct semaphore * sem) { - int ret; + int result; __asm__ __volatile__( "# atomic interruptible down operation\n\t" - "movl $1f,%0\n\t" #ifdef __SMP__ "lock ; " #endif "decl 0(%1)\n\t" - "js " SYMBOL_NAME_STR(__down_failed_interruptible) "\n\t" - "xorl %0,%0" - "\n1:" - :"=a" (ret) + "js 2f\n\t" + "xorl %0,%0\n" + "1:\n" + ".section .text.lock,\"ax\"\n" + "2:\tpushl $1b\n\t" + "jmp __down_failed_interruptible\n" + ".previous" + :"=a" (result) :"c" (sem) :"memory"); - - return ret; + return result; } + /* * Note! This is subtle. We jump to wake people up only if * the semaphore was negative (== somebody was waiting on it). @@ -133,16 +134,19 @@ extern inline void up(struct semaphore * sem) { __asm__ __volatile__( "# atomic up operation\n\t" - "movl $1f,%%eax\n\t" #ifdef __SMP__ "lock ; " #endif "incl 0(%0)\n\t" - "jle " SYMBOL_NAME_STR(__up_wakeup) - "\n1:" + "jle 2f\n" + "1:\n" + ".section .text.lock,\"ax\"\n" + "2:\tpushl $1b\n\t" + "jmp __up_wakeup\n" + ".previous" :/* no outputs */ :"c" (sem) - :"ax", "memory"); + :"memory"); } #endif diff --git a/include/asm-i386/smp.h b/include/asm-i386/smp.h index f1d977f22..0f7ae1224 100644 --- a/include/asm-i386/smp.h +++ b/include/asm-i386/smp.h @@ -178,7 +178,6 @@ extern int smp_found_config; extern int smp_scan_config(unsigned long, unsigned long); extern unsigned long smp_alloc_memory(unsigned long mem_base); extern unsigned char *apic_reg; -extern unsigned char *kernel_stacks[NR_CPUS]; extern unsigned char boot_cpu_id; extern unsigned long cpu_present_map; extern volatile int cpu_number_map[NR_CPUS]; @@ -192,6 +191,9 @@ extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs); extern void smp_reschedule_irq(int cpl, struct pt_regs *regs); extern unsigned long ipi_count; extern void smp_invalidate_rcv(void); /* Process an NMI */ +extern void smp_local_timer_interrupt(struct pt_regs * regs); +extern void setup_APIC_clock (void); + /* * General functions that each host system must provide. @@ -228,7 +230,9 @@ extern __inline unsigned long apic_read(unsigned long reg) * the apic we get the right answer). Hopefully other processors are more sensible 8) */ -extern __inline int smp_processor_id(void) +#define smp_processor_id() (current->processor) + +extern __inline int hard_smp_processor_id(void) { /* we don't want to mark this access volatile - bad code generation */ return GET_APIC_ID(*(unsigned long *)(apic_reg+APIC_ID)); diff --git a/include/asm-i386/smp_lock.h b/include/asm-i386/smp_lock.h index 160e3562d..4f78f97fb 100644 --- a/include/asm-i386/smp_lock.h +++ b/include/asm-i386/smp_lock.h @@ -31,14 +31,11 @@ do { \ #define reacquire_kernel_lock(task, cpu, depth) \ do { if (depth) __asm__ __volatile__( \ "cli\n\t" \ - "movl $0f,%%eax\n\t" \ - "jmp __lock_kernel\n" \ - "0:\t" \ + "call __lock_kernel\n\t" \ "movl %2,%0\n\t" \ "sti" \ : "=m" (task->lock_depth) \ - : "d" (cpu), "c" (depth) \ - : "ax"); \ + : "d" (cpu), "c" (depth)); \ } while (0) @@ -62,14 +59,12 @@ l2: printk("Ugh at %p\n", &&l2); cli cmpl $0, %0 jne 0f - movl $0f, %%eax - jmp __lock_kernel -0: - incl %0 + call __lock_kernel +0: incl %0 popfl " : - : "m" (current_set[cpu]->lock_depth), "d" (cpu) - : "ax", "memory"); + : "m" (current->lock_depth), "d" (cpu) + : "memory"); } extern __inline__ void unlock_kernel(void) diff --git a/include/asm-i386/spinlock.h b/include/asm-i386/spinlock.h index 27630b21d..af6cf8c9c 100644 --- a/include/asm-i386/spinlock.h +++ b/include/asm-i386/spinlock.h @@ -77,13 +77,15 @@ typedef struct { unsigned long a[100]; } __dummy_lock_t; #define spin_lock(lock) \ __asm__ __volatile__( \ - "jmp 2f\n" \ - "1:\t" \ - "testb $1,%0\n\t" \ - "jne 1b\n" \ - "2:\t" \ + "\n1:\t" \ "lock ; btsl $0,%0\n\t" \ - "jc 1b" \ + "jc 2f\n" \ + ".section .text.lock,\"ax\"\n" \ + "2:\t" \ + "testb $1,%0\n\t" \ + "jne 2b\n\t" \ + "jmp 1b\n" \ + ".previous" \ :"=m" (__dummy_lock(lock))) #define spin_unlock(lock) \ @@ -91,33 +93,7 @@ __asm__ __volatile__( \ "lock ; btrl $0,%0" \ :"=m" (__dummy_lock(lock))) -#undef spin_lock -static inline void spin_lock(spinlock_t * lock) -{ - __label__ l1; - int stuck = 10000000; -l1: - __asm__ __volatile__( - "jmp 2f\n" - "1:\t" - "decl %1\n\t" - "je 3f\n\t" - "testb $1,%0\n\t" - "jne 1b\n" - "2:\t" - "lock ; btsl $0,%0\n\t" - "jc 1b\n" - "3:" - :"=m" (__dummy_lock(lock)), - "=r" (stuck) - :"1" (stuck)); - if (!stuck) { - printk("spinlock stuck at %p (%lx)\n",&&l1,lock->previous); - } else - lock->previous = (unsigned long) &&l1; -} - -#define spin_trylock(lock) (!set_bit(0,(lock))) +#define spin_trylock(lock) (!test_and_set_bit(0,(lock))) #define spin_lock_irq(lock) \ do { __cli(); spin_lock(lock); } while (0) @@ -158,12 +134,12 @@ typedef struct { asm volatile("\n1:\t" \ "lock ; incl %0\n\t" \ "js 2f\n" \ - ".text 2\n" \ + ".section .text.lock,\"ax\"\n" \ "2:\tlock ; decl %0\n" \ "3:\tcmpl $0,%0\n\t" \ "js 3b\n\t" \ "jmp 1b\n" \ - ".text" \ + ".previous" \ :"=m" (__dummy_lock(&(rw)->lock))) #define read_unlock(rw) \ @@ -173,19 +149,15 @@ typedef struct { #define write_lock(rw) \ asm volatile("\n1:\t" \ "lock ; btsl $31,%0\n\t" \ - "jc 3f\n\t" \ - "testl $0x7fffffff,%0\n\t" \ - "jne 4f\n" \ - "2:\n" \ - ".text 2\n" \ - "3:\ttestl $-1,%0\n\t" \ - "js 3b\n\t" \ - "lock ; btsl $31,%0\n\t" \ - "jc 3b\n" \ - "4:\ttestl $0x7fffffff,%0\n\t" \ + "jc 4f\n" \ + "2:\ttestl $0x7fffffff,%0\n\t" \ + "jne 3f\n" \ + ".section .text.lock,\"ax\"\n" \ + "3:\tlock ; btrl $31,%0\n" \ + "4:\tcmp $0,%0\n\t" \ "jne 4b\n\t" \ - "jmp 2b\n" \ - ".text" \ + "jmp 1b\n" \ + ".previous" \ :"=m" (__dummy_lock(&(rw)->lock))) #define write_unlock(rw) \ diff --git a/include/asm-i386/system.h b/include/asm-i386/system.h index a3daf450d..94e01ec2a 100644 --- a/include/asm-i386/system.h +++ b/include/asm-i386/system.h @@ -73,7 +73,6 @@ __asm__("str %%ax\n\t" \ __asm__ __volatile__("fwait"); \ prev->flags&=~PF_USEDFPU; \ } \ - current_set[this_cpu] = next; \ __asm__("ljmp %0\n\t" \ : /* no output */ \ :"m" (*(((char *)&next->tss.tr)-4)), \ @@ -91,8 +90,7 @@ __asm__("ljmp %0\n\t" \ #else #define switch_to(prev,next) do { \ -__asm__("movl %2,"SYMBOL_NAME_STR(current_set)"\n\t" \ - "ljmp %0\n\t" \ +__asm__("ljmp %0\n\t" \ "cmpl %1,"SYMBOL_NAME_STR(last_task_used_math)"\n\t" \ "jne 1f\n\t" \ "clts\n" \ diff --git a/include/asm-m68k/atomic.h b/include/asm-m68k/atomic.h index b57cc9cb0..39236e060 100644 --- a/include/asm-m68k/atomic.h +++ b/include/asm-m68k/atomic.h @@ -11,7 +11,7 @@ */ typedef struct { int counter; } atomic_t; -#define ATOMIC_INIT { 0 } +#define ATOMIC_INIT(i) { (i) } #define atomic_read(v) ((v)->counter) #define atomic_set(v, i) (((v)->counter) = i) diff --git a/include/asm-m68k/bitops.h b/include/asm-m68k/bitops.h index b63496040..00e23b352 100644 --- a/include/asm-m68k/bitops.h +++ b/include/asm-m68k/bitops.h @@ -14,7 +14,7 @@ * They use the standard big-endian m680x0 bit ordering. */ -extern __inline__ int set_bit(int nr,void * vaddr) +extern __inline__ int test_and_set_bit(int nr,void * vaddr) { char retval; @@ -24,7 +24,13 @@ extern __inline__ int set_bit(int nr,void * vaddr) return retval; } -extern __inline__ int clear_bit(int nr, void * vaddr) +extern __inline__ void set_bit(int nr, void * vaddr) +{ + __asm__ __volatile__ ("bfset %1@{%0:#1}" + : : "d" (nr^31), "a" (vaddr)); +} + +extern __inline__ int test_and_clear_bit(int nr, void * vaddr) { char retval; @@ -34,7 +40,13 @@ extern __inline__ int clear_bit(int nr, void * vaddr) return retval; } -extern __inline__ int change_bit(int nr, void * vaddr) +extern __inline__ void clear_bit(int nr, void * vaddr) +{ + __asm__ __volatile__ ("bfclr %1@{%0:#1}" + : : "d" (nr^31), "a" (vaddr)); +} + +extern __inline__ int test_and_change_bit(int nr, void * vaddr) { char retval; @@ -44,6 +56,12 @@ extern __inline__ int change_bit(int nr, void * vaddr) return retval; } +extern __inline__ void change_bit(int nr, void * vaddr) +{ + __asm__ __volatile__ ("bfchg %1@{%0:#1}" + : : "d" (nr^31), "a" (vaddr)); +} + extern __inline__ int test_bit(int nr, const void * vaddr) { return ((1UL << (nr & 31)) & (((const unsigned int *) vaddr)[nr >> 5])) != 0; diff --git a/include/asm-m68k/current.h b/include/asm-m68k/current.h index 9d542c79d..8de8f8ced 100644 --- a/include/asm-m68k/current.h +++ b/include/asm-m68k/current.h @@ -1,12 +1,6 @@ #ifndef _M68K_CURRENT_H #define _M68K_CURRENT_H -/* Some architectures may want to do something "clever" here since - * this is the most frequently accessed piece of data in the entire - * kernel. For an example, see the Sparc implementation where an - * entire register is hard locked to contain the value of current. - */ -extern struct task_struct *current_set[NR_CPUS]; -#define current (current_set[smp_processor_id()]) /* Current on this processor */ +register struct task_struct *current __asm__("%a2"); #endif /* !(_M68K_CURRENT_H) */ diff --git a/include/asm-m68k/dsp56k.h b/include/asm-m68k/dsp56k.h index e035055bc..ab3dd33e2 100644 --- a/include/asm-m68k/dsp56k.h +++ b/include/asm-m68k/dsp56k.h @@ -33,38 +33,3 @@ struct dsp56k_host_flags { #define DSP56K_SET_RX_WSIZE 3 /* Host receive word size (1-4) */ #define DSP56K_HOST_FLAGS 4 /* Host flag registers */ #define DSP56K_HOST_CMD 5 /* Trig Host Command (0-31) */ -/* - * linux/include/asm-m68k/dsp56k.h - defines and declarations for - * DSP56k device driver - * - * Copyright (C) 1996,1997 Fredrik Noring, lars brinkhoff & Tomas Berndtsson - * - * 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. - */ - - -/* Used for uploading DSP binary code */ -struct dsp56k_upload { - int len; - char *bin; -}; - -/* For the DSP host flags */ -struct dsp56k_host_flags { - int dir; /* Bit field. 1 = write output bit, 0 = do nothing. - * 0x0000 means reading only, 0x0011 means - * writing the bits stored in `out' on HF0 and HF1. - * Note that HF2 and HF3 can only be read. - */ - int out; /* Bit field like above. */ - int status; /* Host register's current state is returned */ -}; - -/* ioctl command codes */ -#define DSP56K_UPLOAD 1 /* Upload DSP binary program */ -#define DSP56K_SET_TX_WSIZE 2 /* Host transmit word size (1-4) */ -#define DSP56K_SET_RX_WSIZE 3 /* Host receive word size (1-4) */ -#define DSP56K_HOST_FLAGS 4 /* Host flag registers */ -#define DSP56K_HOST_CMD 5 /* Trig Host Command (0-31) */ diff --git a/include/asm-m68k/elf.h b/include/asm-m68k/elf.h index 8ccf73858..570521687 100644 --- a/include/asm-m68k/elf.h +++ b/include/asm-m68k/elf.h @@ -44,6 +44,7 @@ typedef struct user_m68kfp_struct elf_fpregset_t; pr_reg[4] = regs->d5; \ pr_reg[7] = regs->a0; \ pr_reg[8] = regs->a1; \ + pr_reg[9] = regs->a2; \ pr_reg[14] = regs->d0; \ pr_reg[15] = rdusp(); \ pr_reg[16] = regs->orig_d0; \ @@ -54,7 +55,6 @@ typedef struct user_m68kfp_struct elf_fpregset_t; struct switch_stack *sw = ((struct switch_stack *)regs) - 1; \ pr_reg[5] = sw->d6; \ pr_reg[6] = sw->d7; \ - pr_reg[9] = sw->a2; \ pr_reg[10] = sw->a3; \ pr_reg[11] = sw->a4; \ pr_reg[12] = sw->a5; \ diff --git a/include/asm-m68k/fpu.h b/include/asm-m68k/fpu.h index fc47dac02..717ecfa7f 100644 --- a/include/asm-m68k/fpu.h +++ b/include/asm-m68k/fpu.h @@ -18,23 +18,3 @@ #endif #endif /* __M68K_FPU_H */ -#ifndef __M68K_FPU_H -#define __M68K_FPU_H - -#include <linux/config.h> - -/* - * MAX floating point unit state size (FSAVE/FRESTORE) - */ - -#if defined(CONFIG_M68020) || defined(CONFIG_M68030) -#define FPSTATESIZE (216/sizeof(unsigned char)) -#elif defined(CONFIG_M68040) -#define FPSTATESIZE (96/sizeof(unsigned char)) -#elif defined(CONFIG_M68060) -#define FPSTATESIZE (12/sizeof(unsigned char)) -#else -#define FPSTATESIZE error no_cpu_type_configured -#endif - -#endif /* __M68K_FPU_H */ diff --git a/include/asm-m68k/hardirq.h b/include/asm-m68k/hardirq.h index e9d0136c3..512e0b054 100644 --- a/include/asm-m68k/hardirq.h +++ b/include/asm-m68k/hardirq.h @@ -1,24 +1,13 @@ #ifndef __M68K_HARDIRQ_H #define __M68K_HARDIRQ_H -extern unsigned int local_irq_count[NR_CPUS]; -#define in_interrupt() (local_irq_count[smp_processor_id()] != 0) - -#define hardirq_trylock(cpu) ((cpu)==0) /* always true */ -#define hardirq_endlock(cpu) do { } while (0) - -#define hardirq_enter(cpu) (local_irq_count[cpu]++) -#define hardirq_exit(cpu) (local_irq_count[cpu]--) - -#endif -#ifndef __M68K_HARDIRQ_H -#define __M68K_HARDIRQ_H +#include <linux/tasks.h> extern unsigned int local_irq_count[NR_CPUS]; #define in_interrupt() (local_irq_count[smp_processor_id()] != 0) -#define hardirq_trylock(cpu) ((cpu)==0) /* always true */ -#define hardirq_endlock(cpu) do { } while (0) +#define hardirq_trylock(cpu) (++local_irq_count[cpu], (cpu) == 0) +#define hardirq_endlock(cpu) (--local_irq_count[cpu]) #define hardirq_enter(cpu) (local_irq_count[cpu]++) #define hardirq_exit(cpu) (local_irq_count[cpu]--) diff --git a/include/asm-m68k/init.h b/include/asm-m68k/init.h index 42938ae89..93a323fd6 100644 --- a/include/asm-m68k/init.h +++ b/include/asm-m68k/init.h @@ -1,14 +1,14 @@ #ifndef _M68K_INIT_H #define _M68K_INIT_H -/* Throwing the initialization code and data out is not supported yet... */ - -#define __init -#define __initdata -#define __initfunc(__arginit) __arginit +#define __init __attribute__ ((__section__ (".text.init"))) +#define __initdata __attribute__ ((__section__ (".data.init"))) +#define __initfunc(__arginit) \ + __arginit __init; \ + __arginit /* For assembly routines */ -#define __INIT -#define __FINIT -#define __INITDATA +#define __INIT .section ".text.init",#alloc,#execinstr +#define __FINIT .previous +#define __INITDATA .section ".data.init",#alloc,#write #endif diff --git a/include/asm-m68k/keyboard.h b/include/asm-m68k/keyboard.h index 6c8c0abff..e4c602263 100644 --- a/include/asm-m68k/keyboard.h +++ b/include/asm-m68k/keyboard.h @@ -13,10 +13,44 @@ #ifdef __KERNEL__ -#define TRANSLATE_SCANCODES 0 -#define USE_MACHDEP_ABSTRACTION 1 #include <asm/machdep.h> +static __inline__ int kbd_setkeycode(unsigned int scancode, + unsigned int keycode) +{ + return -EOPNOTSUPP; +} + +static __inline__ int kbd_getkeycode(unsigned int scancode) +{ + return -EOPNOTSUPP; +} + +static __inline__ int kbd_pretranslate(unsigned char scancode, char raw_mode) +{ + return 1; +} + +static __inline__ int kbd_translate(unsigned char scancode, + unsigned char *keycode, char raw_mode) +{ + *keycode = scancode; + return 1; +} + +static __inline__ char kbd_unexpected_up(unsigned char keycode) +{ + return 0200; +} + +static __inline__ void kbd_leds(unsigned char leds) +{ + if (mach_kbd_leds) + mach_kbd_leds(leds); +} + +#define kbd_init_hw mach_keyb_init + #endif /* __KERNEL__ */ #endif /* __ASMm68k_KEYBOARD_H */ diff --git a/include/asm-m68k/namei.h b/include/asm-m68k/namei.h index 516066f1a..13502e13e 100644 --- a/include/asm-m68k/namei.h +++ b/include/asm-m68k/namei.h @@ -19,24 +19,3 @@ do { } while (0) #endif -/* - * linux/include/asm-m68k/namei.h - * - * Included from linux/fs/namei.c - */ - -#ifndef __M68K_NAMEI_H -#define __M68K_NAMEI_H - -/* These dummy routines maybe changed to something useful - * for /usr/gnemul/ emulation stuff. - * Look at asm-sparc/namei.h for details. - */ - -#define translate_namei(pathname, base, follow_links, res_inode) \ - do { } while (0) - -#define translate_open_namei(pathname, flag, mode, res_inode, base) \ - do { } while (0) - -#endif diff --git a/include/asm-m68k/pgtable.h b/include/asm-m68k/pgtable.h index cd5cef191..9463700a3 100644 --- a/include/asm-m68k/pgtable.h +++ b/include/asm-m68k/pgtable.h @@ -175,7 +175,7 @@ extern inline void flush_pages_to_ram (unsigned long address, int n) } /* - * flush all atc entries (user-space entries only for the 680[46]0). + * flush all user-space atc entries. */ static inline void __flush_tlb(void) { @@ -184,7 +184,7 @@ static inline void __flush_tlb(void) "pflushan\n\t" ".chip 68k"); else - __asm__ __volatile__("pflusha"); + __asm__ __volatile__("pflush #0,#4"); } static inline void __flush_tlb_one(unsigned long addr) diff --git a/include/asm-m68k/poll.h b/include/asm-m68k/poll.h index 9b52915d0..f66153a74 100644 --- a/include/asm-m68k/poll.h +++ b/include/asm-m68k/poll.h @@ -19,24 +19,3 @@ struct pollfd { }; #endif -#ifndef __m68k_POLL_H -#define __m68k_POLL_H - -#define POLLIN 1 -#define POLLPRI 2 -#define POLLOUT 4 -#define POLLERR 8 -#define POLLHUP 16 -#define POLLNVAL 32 -#define POLLRDNORM 64 -#define POLLWRNORM POLLOUT -#define POLLRDBAND 128 -#define POLLWRBAND 256 - -struct pollfd { - int fd; - short events; - short revents; -}; - -#endif diff --git a/include/asm-m68k/processor.h b/include/asm-m68k/processor.h index 7b6622e89..9ec6df6e8 100644 --- a/include/asm-m68k/processor.h +++ b/include/asm-m68k/processor.h @@ -44,10 +44,10 @@ struct thread_struct { unsigned char fpstate[FPSTATESIZE]; /* floating point state */ }; -#define INIT_MMAP { &init_mm, 0, 0x40000000, __pgprot(_PAGE_PRESENT|_PAGE_ACCESSED), VM_READ | VM_WRITE | VM_EXEC } +#define INIT_MMAP { &init_mm, 0, 0x40000000, __pgprot(_PAGE_PRESENT|_PAGE_ACCESSED), VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap } #define INIT_TSS { \ - sizeof(init_kernel_stack) + (long) init_kernel_stack, 0, \ + sizeof(init_stack) + (unsigned long) init_stack, 0, \ PS_S, KERNEL_DS, \ {0, 0}, 0, {0,}, {0, 0, 0}, {0,}, \ } @@ -93,10 +93,12 @@ extern inline unsigned long thread_saved_pc(struct thread_struct *t) } /* Allocation and freeing of basic task resources. */ -#define alloc_task_struct() kmalloc(sizeof(struct task_struct), GFP_KERNEL) -#define alloc_kernel_stack(p) __get_free_page(GFP_KERNEL) -#define free_task_struct(p) kfree(p) -#define free_kernel_stack(page) free_page((page)) +#define alloc_task_struct() \ + ((struct task_struct *) __get_free_pages(GFP_KERNEL,1,0)) +#define free_task_struct(p) free_pages((unsigned long)(p),1) + +#define init_task (init_task_union.task) +#define init_stack (init_task_union.stack) /* * Return_address is a replacement for __builtin_return_address(count) diff --git a/include/asm-m68k/ptrace.h b/include/asm-m68k/ptrace.h index 449b7bd8e..e0c9d0ac2 100644 --- a/include/asm-m68k/ptrace.h +++ b/include/asm-m68k/ptrace.h @@ -34,6 +34,7 @@ struct pt_regs { long d5; long a0; long a1; + long a2; long d0; long orig_d0; long stkadj; @@ -50,7 +51,6 @@ struct pt_regs { struct switch_stack { unsigned long d6; unsigned long d7; - unsigned long a2; unsigned long a3; unsigned long a4; unsigned long a5; diff --git a/include/asm-m68k/semaphore.h b/include/asm-m68k/semaphore.h index c4e3068fa..7890c4f19 100644 --- a/include/asm-m68k/semaphore.h +++ b/include/asm-m68k/semaphore.h @@ -1,6 +1,7 @@ #ifndef _M68K_SEMAPHORE_H #define _M68K_SEMAPHORE_H +#include <linux/config.h> #include <linux/linkage.h> #include <asm/system.h> #include <asm/atomic.h> @@ -38,6 +39,7 @@ static inline void wake_one_more(struct semaphore * sem) static inline int waking_non_zero(struct semaphore *sem) { +#ifndef CONFIG_RMW_INSNS unsigned long flags; int ret = 0; @@ -48,6 +50,21 @@ static inline int waking_non_zero(struct semaphore *sem) ret = 1; } restore_flags(flags); +#else + int ret, tmp; + + __asm__ __volatile__ + ("1: movel %2,%0\n" + " jeq 3f\n" + "2: movel %0,%1\n" + " subql #1,%1\n" + " casl %0,%1,%2\n" + " jeq 3f\n" + " tstl %0\n" + " jne 2b\n" + "3:" + : "=d" (ret), "=d" (tmp), "=m" (sem->waking)); +#endif return ret; } @@ -56,41 +73,26 @@ static inline int waking_non_zero(struct semaphore *sem) * "down_failed" is a special asm handler that calls the C * routine that actually waits. See arch/m68k/lib/semaphore.S */ -extern inline void down(struct semaphore * sem) +extern inline void do_down(struct semaphore * sem, void (*failed)(void)) { register struct semaphore *sem1 __asm__ ("%a1") = sem; __asm__ __volatile__( "| atomic down operation\n\t" - "lea %%pc@(1f),%%a0\n\t" "subql #1,%0@\n\t" - "jmi " SYMBOL_NAME_STR(__down_failed) "\n" - "1:" + "jmi 2f\n" + "1:\n" + ".section .text.lock,\"ax\"\n" + ".even\n" + "2:\tpea 1b\n\t" + "jbra %1\n" + ".previous" : /* no outputs */ - : "a" (sem1) - : "%a0", "memory"); + : "a" (sem1), "m" (*(unsigned char *)failed) + : "memory"); } -/* - * This version waits in interruptible state so that the waiting - * process can be killed. The down_failed_interruptible routine - * returns negative for signalled and zero for semaphore acquired. - */ -extern inline int down_interruptible(struct semaphore * sem) -{ - register int ret __asm__ ("%d0"); - register struct semaphore *sem1 __asm__ ("%a1") = sem; - __asm__ __volatile__( - "| atomic interruptible down operation\n\t" - "lea %%pc@(1f),%%a0\n\t" - "subql #1,%1@\n\t" - "jmi " SYMBOL_NAME_STR(__down_failed_interruptible) "\n\t" - "clrl %0\n" - "1:" - : "=d" (ret) - : "a" (sem1) - : "%d0", "%a0", "memory"); - return ret; -} +#define down(sem) do_down((sem),__down_failed) +#define down_interruptible(sem) do_down((sem),__down_failed_interruptible) /* * Note! This is subtle. We jump to wake people up only if @@ -103,13 +105,17 @@ extern inline void up(struct semaphore * sem) register struct semaphore *sem1 __asm__ ("%a1") = sem; __asm__ __volatile__( "| atomic up operation\n\t" - "lea %%pc@(1f),%%a0\n\t" - "addql #1,%0\n\t" - "jle " SYMBOL_NAME_STR(__up_wakeup) "\n" - "1:" + "addql #1,%0@\n\t" + "jle 2f\n" + "1:\n" + ".section .text.lock,\"ax\"\n" + ".even\n" + "2:\tpea 1b\n\t" + "jbra %1\n" + ".previous" : /* no outputs */ - : "m" (sem->count), "a" (sem1) - : "%a0", "memory"); + : "a" (sem1), "m" (*(unsigned char *)__up_wakeup) + : "memory"); } #endif diff --git a/include/asm-m68k/sigcontext.h b/include/asm-m68k/sigcontext.h index 9c13b0951..a2d28c218 100644 --- a/include/asm-m68k/sigcontext.h +++ b/include/asm-m68k/sigcontext.h @@ -1,8 +1,6 @@ #ifndef _ASM_M68k_SIGCONTEXT_H #define _ASM_M68k_SIGCONTEXT_H -#include<asm/fpu.h> - struct sigcontext { unsigned long sc_mask; /* old sigmask */ unsigned long sc_usp; /* old user stack pointer */ @@ -15,7 +13,7 @@ struct sigcontext { unsigned short sc_formatvec; unsigned long sc_fpregs[2*3]; /* room for two fp registers */ unsigned long sc_fpcntl[3]; - unsigned char sc_fpstate[FPSTATESIZE]; + unsigned char sc_fpstate[216]; }; #endif diff --git a/include/asm-m68k/smp_lock.h b/include/asm-m68k/smp_lock.h index 158de0988..6bc9a781b 100644 --- a/include/asm-m68k/smp_lock.h +++ b/include/asm-m68k/smp_lock.h @@ -12,17 +12,3 @@ #define reacquire_kernel_lock(task, cpu, depth) do { } while(0) #endif -#ifndef __M68K_SMPLOCK_H -#define __M68K_SMPLOCK_H - -/* - * We don't do SMP so this is again one of these silly dummy files - * to keep the kernel source looking nice ;-(. - */ - -#define lock_kernel() do { } while(0) -#define unlock_kernel() do { } while(0) -#define release_kernel_lock(task, cpu, depth) ((depth) = 1) -#define reaquire_kernel_lock(task, cpu, depth) do { } while(0) - -#endif diff --git a/include/asm-m68k/softirq.h b/include/asm-m68k/softirq.h index 32f12c0d5..1cc0cbb81 100644 --- a/include/asm-m68k/softirq.h +++ b/include/asm-m68k/softirq.h @@ -4,6 +4,9 @@ /* * Software interrupts.. no SMP here either. */ + +#include <asm/atomic.h> + #define get_active_bhs() (bh_mask & bh_active) #define clear_active_bhs(x) atomic_clear_mask((x),&bh_active) @@ -14,12 +17,6 @@ extern inline void init_bh(int nr, void (*routine)(void)) 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); @@ -41,60 +38,10 @@ extern inline void enable_bh(int nr) bh_mask |= 1 << nr; } -extern int __m68k_bh_counter; - -extern inline void start_bh_atomic(void) -{ - __m68k_bh_counter++; - barrier(); -} - -extern inline void end_bh_atomic(void) -{ - barrier(); - __m68k_bh_counter--; -} - -/* These are for the irq's testing the lock */ -#define softirq_trylock() (__m68k_bh_counter ? 0 : (__m68k_bh_counter=1)) -#define softirq_endlock() (__m68k_bh_counter = 0) - -#endif -#ifndef __M68K_SOFTIRQ_H -#define __M68K_SOFTIRQ_H - -/* - * Software interrupts.. no SMP here either. - */ -#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)) -{ - bh_base[nr] = routine; - bh_mask_count[nr] = 0; - bh_mask |= 1 << nr; -} - -extern inline void mark_bh(int nr) -{ - set_bit(nr, &bh_active); -} - -/* - * These use a mask count to correctly handle - * nested disable/enable calls - */ -extern inline void disable_bh(int nr) +extern inline void remove_bh(int nr) { + bh_base[nr] = NULL; bh_mask &= ~(1 << nr); - bh_mask_count[nr]++; -} - -extern inline void enable_bh(int nr) -{ - if (!--bh_mask_count[nr]) - bh_mask |= 1 << nr; } extern int __m68k_bh_counter; diff --git a/include/asm-m68k/spinlock.h b/include/asm-m68k/spinlock.h index cbae3d62d..83a04ac7f 100644 --- a/include/asm-m68k/spinlock.h +++ b/include/asm-m68k/spinlock.h @@ -5,8 +5,8 @@ * We don't do SMP on the m68k .... at least not yet. */ -typedef struct { } spinlock_t; -#define SPIN_LOCK_UNLOCKED { } +typedef struct { int dummy; } spinlock_t; +#define SPIN_LOCK_UNLOCKED { 0 } #define spin_lock_init(lock) do { } while(0) #define spin_lock(lock) do { } while(0) @@ -31,8 +31,8 @@ typedef struct { } spinlock_t; * irq-safe write-lock, but readers can get non-irqsafe * read-locks. */ -typedef struct { } rwlock_t; -#define RW_LOCK_UNLOCKED { } +typedef struct { int dummy; } rwlock_t; +#define RW_LOCK_UNLOCKED { 0 } #define read_lock(lock) do { } while(0) #define read_unlock(lock) do { } while(0) @@ -49,26 +49,3 @@ typedef struct { } rwlock_t; #define write_unlock_irqrestore(lock, flags) restore_flags(flags) #endif -#ifndef __M68K_SPINLOCK_H -#define __M68K_SPINLOCK_H - -/* - * We don't do SMP on the m68k .... at least not yet. - */ - -typedef struct { } spinlock_t; -#define SPIN_LOCK_UNLOCKED { } - -#define spin_lock_init(lock) do { } while(0) -#define spin_lock(lock) do { } while(0) -#define spin_trylock(lock) do { } while(0) -#define spin_unlock(lock) do { } while(0) -#define spin_lock_irq(lock) cli() -#define spin_unlock_irq(lock) sti() - -#define spin_lock_irqsave(lock, flags) \ - do { save_flags(flags); cli(); } while (0) -#define spin_unlock_irqrestore(lock, flags) \ - restore_flags(flags) - -#endif diff --git a/include/asm-m68k/system.h b/include/asm-m68k/system.h index dc9024b73..fd2eb8991 100644 --- a/include/asm-m68k/system.h +++ b/include/asm-m68k/system.h @@ -83,6 +83,7 @@ __asm__ __volatile__("movew %0,%/sr": /* no outputs */ :"d" (x) : "memory") #define sti() __sti() #define save_flags(x) __save_flags(x) #define restore_flags(x) __restore_flags(x) +#define save_and_cli(flags) do { save_flags(flags); cli(); } while(0) #ifndef CONFIG_RMW_INSNS static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size) diff --git a/include/asm-m68k/unistd.h b/include/asm-m68k/unistd.h index c526da9ef..9ebe62ff4 100644 --- a/include/asm-m68k/unistd.h +++ b/include/asm-m68k/unistd.h @@ -322,9 +322,11 @@ static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long f set_fs (KERNEL_DS); __asm__ __volatile__ - ("trap #0\n\t" /* Linux/m68k system call */ + ("clrl %%d2\n\t" + "trap #0\n\t" /* Linux/m68k system call */ "tstl %0\n\t" /* child or parent */ "jne 1f\n\t" /* parent - jump */ + "lea %%sp@(-8192),%6\n\t" /* reload current */ "movel %3,%%sp@-\n\t" /* push argument */ "jsr %4@\n\t" /* call fn */ "movel %0,%%d1\n\t" /* pass exit value */ @@ -333,8 +335,8 @@ static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long f "1:" : "=d" (retval) : "0" (__NR_clone), "i" (__NR_exit), - "r" (arg), "a" (fn), "d" (clone_arg) - : "d0"); + "r" (arg), "a" (fn), "d" (clone_arg), "r" (current) + : "d0", "d2"); set_fs (fs); return retval; diff --git a/include/asm-mips/bitops.h b/include/asm-mips/bitops.h index d28a881a4..59a6ccbba 100644 --- a/include/asm-mips/bitops.h +++ b/include/asm-mips/bitops.h @@ -19,15 +19,15 @@ * Only disable interrupt for kernel mode stuff to keep usermode stuff * that dares to use kernel include files alive. */ -#define __flags unsigned long flags -#define __cli() cli() -#define __save_flags(x) save_flags(x) -#define __restore_flags(x) restore_flags(x) +#define __bi_flags unsigned long flags +#define __bi_cli() __cli() +#define __bi_save_flags(x) __save_flags(x) +#define __bi_restore_flags(x) __restore_flags(x) #else -#define __flags -#define __cli() -#define __save_flags(x) -#define __restore_flags(x) +#define __bi_flags +#define __bi_cli() +#define __bi_save_flags(x) +#define __bi_restore_flags(x) #endif /* __KERNEL__ */ /* @@ -35,9 +35,13 @@ * elements. With respect to a future 64 bit implementation it is * wrong to use long *. Use u32 * or int *. */ -extern __inline__ int set_bit(int nr, void *addr); -extern __inline__ int clear_bit(int nr, void *addr); -extern __inline__ int change_bit(int nr, void *addr); +extern __inline__ void set_bit(int nr, void *addr); +extern __inline__ void clear_bit(int nr, void *addr); +extern __inline__ void change_bit(int nr, void *addr); +extern __inline__ int test_and_set_bit(int nr, void *addr); +extern __inline__ int test_and_clear_bit(int nr, void *addr); +extern __inline__ int test_and_change_bit(int nr, void *addr); + extern __inline__ int test_bit(int nr, const void *addr); #ifndef __MIPSEB__ extern __inline__ int find_first_zero_bit (void *addr, unsigned size); @@ -57,7 +61,42 @@ extern __inline__ unsigned long ffz(unsigned long word); /* * The following functions will only work for the R4000! */ -extern __inline__ int set_bit(int nr, void *addr) + +extern __inline__ void set_bit(int nr, void *addr) +{ + int mask, mw; + + addr += ((nr >> 3) & ~3); + mask = 1 << (nr & 0x1f); + do { + mw = load_linked(addr); + } while (!store_conditional(addr, mw|mask)); +} + +extern __inline__ void clear_bit(int nr, void *addr) +{ + int mask, mw; + + addr += ((nr >> 3) & ~3); + mask = 1 << (nr & 0x1f); + do { + mw = load_linked(addr); + } + while (!store_conditional(addr, mw & ~mask)); +} + +extern __inline__ void change_bit(int nr, void *addr) +{ + int mask, mw; + + addr += ((nr >> 3) & ~3); + mask = 1 << (nr & 0x1f); + do { + mw = load_linked(addr); + } while (!store_conditional(addr, mw ^ mask)); +} + +extern __inline__ int test_and_set_bit(int nr, void *addr) { int mask, retval, mw; @@ -71,7 +110,7 @@ extern __inline__ int set_bit(int nr, void *addr) return retval; } -extern __inline__ int clear_bit(int nr, void *addr) +extern __inline__ int test_and_clear_bit(int nr, void *addr) { int mask, retval, mw; @@ -86,7 +125,7 @@ extern __inline__ int clear_bit(int nr, void *addr) return retval; } -extern __inline__ int change_bit(int nr, void *addr) +extern __inline__ int test_and_change_bit(int nr, void *addr) { int mask, retval, mw; @@ -102,61 +141,103 @@ extern __inline__ int change_bit(int nr, void *addr) #else /* MIPS I */ -extern __inline__ int set_bit(int nr, void * addr) +extern __inline__ void set_bit(int nr, void * addr) +{ + int mask; + int *a = addr; + __bi_flags; + + a += nr >> 5; + mask = 1 << (nr & 0x1f); + __bi_save_flags(flags); + __bi_cli(); + *a |= mask; + __bi_restore_flags(flags); +} + +extern __inline__ void clear_bit(int nr, void * addr) +{ + int mask; + int *a = addr; + __bi_flags; + + a += nr >> 5; + mask = 1 << (nr & 0x1f); + __bi_save_flags(flags); + __bi_cli(); + *a &= ~mask; + __bi_restore_flags(flags); +} + +extern __inline__ void change_bit(int nr, void * addr) +{ + int mask; + int *a = addr; + __bi_flags; + + a += nr >> 5; + mask = 1 << (nr & 0x1f); + __bi_save_flags(flags); + __bi_cli(); + *a ^= mask; + __bi_restore_flags(flags); +} + +extern __inline__ int test_and_set_bit(int nr, void * addr) { int mask, retval; int *a = addr; - __flags; + __bi_flags; a += nr >> 5; mask = 1 << (nr & 0x1f); - __save_flags(flags); - __cli(); + __bi_save_flags(flags); + __bi_cli(); retval = (mask & *a) != 0; *a |= mask; - __restore_flags(flags); + __bi_restore_flags(flags); return retval; } -extern __inline__ int clear_bit(int nr, void * addr) +extern __inline__ int test_and_clear_bit(int nr, void * addr) { int mask, retval; int *a = addr; - __flags; + __bi_flags; a += nr >> 5; mask = 1 << (nr & 0x1f); - __save_flags(flags); - __cli(); + __bi_save_flags(flags); + __bi_cli(); retval = (mask & *a) != 0; *a &= ~mask; - __restore_flags(flags); + __bi_restore_flags(flags); return retval; } -extern __inline__ int change_bit(int nr, void * addr) +extern __inline__ int test_and_change_bit(int nr, void * addr) { int mask, retval; int *a = addr; - __flags; + __bi_flags; a += nr >> 5; mask = 1 << (nr & 0x1f); - __save_flags(flags); - __cli(); + __bi_save_flags(flags); + __bi_cli(); retval = (mask & *a) != 0; *a ^= mask; - __restore_flags(flags); + __bi_restore_flags(flags); return retval; } -#undef __flags -#undef __cli() -#undef __save_flags(x) -#undef __restore_flags(x) +#undef __bi_flags +#undef __bi_cli() +#undef __bi_save_flags(x) +#undef __bi_restore_flags(x) #endif /* MIPS I */ @@ -443,8 +524,8 @@ found_middle: #else /* !(__MIPSEB__) */ /* Native ext2 byte ordering, just collapse using defines. */ -#define ext2_set_bit(nr, addr) set_bit((nr), (addr)) -#define ext2_clear_bit(nr, addr) clear_bit((nr), (addr)) +#define ext2_set_bit(nr, addr) test_and_set_bit((nr), (addr)) +#define ext2_clear_bit(nr, addr) test_and_clear_bit((nr), (addr)) #define ext2_test_bit(nr, addr) test_bit((nr), (addr)) #define ext2_find_first_zero_bit(addr, size) find_first_zero_bit((addr), (size)) #define ext2_find_next_zero_bit(addr, size, offset) \ @@ -454,8 +535,8 @@ found_middle: * Bitmap functions for the minix filesystem. * FIXME: These assume that Minix uses the native byte/bitorder. */ -#define minix_set_bit(nr,addr) set_bit(nr,addr) -#define minix_clear_bit(nr,addr) clear_bit(nr,addr) +#define minix_set_bit(nr,addr) test_and_set_bit(nr,addr) +#define minix_clear_bit(nr,addr) test_and_clear_bit(nr,addr) #define minix_test_bit(nr,addr) test_bit(nr,addr) #define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size) #endif /* __KERNEL__ */ diff --git a/include/asm-mips/bootinfo.h b/include/asm-mips/bootinfo.h index 2816e599f..e723cae21 100644 --- a/include/asm-mips/bootinfo.h +++ b/include/asm-mips/bootinfo.h @@ -5,7 +5,7 @@ * Stoned Elipot and Paul M. Antoine. * * This file is subject to the terms and conditions of the GNU General Public - * License. See the file README.legal in the main directory of this archive + * License. See the file COPYING in the main directory of this archive * for more details. */ #ifndef __ASM_MIPS_BOOTINFO_H diff --git a/include/asm-mips/current.h b/include/asm-mips/current.h index 7955aad50..743f91902 100644 --- a/include/asm-mips/current.h +++ b/include/asm-mips/current.h @@ -1,13 +1,34 @@ #ifndef __ASM_MIPS_CURRENT_H #define __ASM_MIPS_CURRENT_H +#ifdef __LANGUAGE_C__ + +static inline struct task_struct *__get_current(void) +{ + struct task_struct *__current; + + __asm__("ori\t%0,$29,%1\n\t" + "xori\t%0,%1" + :"=r" (__current) + :"ir" (8191UL)); + + return __current; +} + +#define current __get_current() + +#endif /* __LANGUAGE_C__ */ +#ifdef __LANGUAGE_ASSEMBLY__ + /* - * Some architectures may want to do something "clever" here since - * this is the most frequently accessed piece of data in the entire - * kernel. For an example, see the Sparc implementation where an - * entire register is hard locked to contain the value of current. + * Get current task pointer */ -extern struct task_struct *current_set[NR_CPUS]; -#define current (current_set[smp_processor_id()]) /* Current on this processor */ +#define GET_CURRENT(reg) \ + lui reg, %hi(kernelsp); \ + lw reg, %lo(kernelsp)(reg); \ + ori reg, 8191; \ + xori reg, 8191 + +#endif #endif /* __ASM_MIPS_CURRENT_H */ diff --git a/include/asm-mips/delay.h b/include/asm-mips/delay.h index d7d6e269d..ec2ad70f3 100644 --- a/include/asm-mips/delay.h +++ b/include/asm-mips/delay.h @@ -22,16 +22,24 @@ extern __inline__ void __delay(int loops) * first constant multiplications gets optimized away if the delay is * a constant) */ -extern __inline__ void udelay(unsigned long usecs) +extern __inline__ void __udelay(unsigned long usecs, unsigned long lps) { usecs *= 0x000010c6; /* 2**32 / 1000000 */ __asm__("multu\t%0,%1\n\t" "mfhi\t%0" :"=r" (usecs) - :"0" (usecs),"r" (loops_per_sec)); + :"0" (usecs),"r" (lps)); __delay(usecs); } +#ifdef __SMP__ +#define __udelay_val cpu_data[smp_processor_id()].udelay_val +#else +#define __udelay_val loops_per_sec +#endif + +#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. diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index 28ec2f73f..be0d068a4 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h @@ -1,6 +1,11 @@ #ifndef __ASM_MIPS_IO_H #define __ASM_MIPS_IO_H +/* + * Slowdown I/O port space accesses for antique hardware. + */ +#undef CONF_SLOWDOWN_IO + #include <asm/mipsconfig.h> #include <asm/addrspace.h> @@ -35,6 +40,7 @@ * I feel a bit unsafe about using 0x80 (should be safe, though) * * Linus + * */ #define __SLOW_DOWN_IO \ @@ -42,11 +48,15 @@ "sb\t$0,0x80(%0)" \ : : "r" (PORT_BASE)); +#ifdef CONF_SLOWDOWN_IO #ifdef REALLY_SLOW_IO #define SLOW_DOWN_IO { __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; } #else #define SLOW_DOWN_IO __SLOW_DOWN_IO #endif +#else +#define SLOW_DOWN_IO +#endif /* * Change virtual addresses to physical addresses and vv. @@ -54,12 +64,12 @@ */ extern inline unsigned long virt_to_phys(volatile void * address) { - return (unsigned long) address - KSEG0; + return PHYSADDR(address); } extern inline void * phys_to_virt(unsigned long address) { - return (void *) address + KSEG0; + return (void *)KSEG0ADDR(address); } extern void * ioremap(unsigned long phys_addr, unsigned long size); @@ -67,10 +77,16 @@ extern void iounmap(void *addr); /* * IO bus memory addresses are also 1:1 with the physical address - * FIXME: This assumption is wrong for the Deskstation Tyne */ -#define virt_to_bus virt_to_phys -#define bus_to_virt phys_to_virt +extern inline unsigned long virt_to_bus(volatile void * address) +{ + return PHYSADDR(address); +} + +extern inline void * bus_to_virt(unsigned long address) +{ + return (void *)KSEG0ADDR(address); +} /* * isa_slot_offset is the address where E(ISA) busaddress 0 is is mapped @@ -111,6 +127,10 @@ extern inline void iounmap(void *addr) { } +/* + * XXX We need system specific versions of these to handle EISA address bits + * 24-31 on SNI. + */ #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))) diff --git a/include/asm-mips/jazz.h b/include/asm-mips/jazz.h index 2f6e4b225..41ab89634 100644 --- a/include/asm-mips/jazz.h +++ b/include/asm-mips/jazz.h @@ -311,4 +311,6 @@ extern inline unsigned int r4030_write_reg32(unsigned addr, unsigned val) #define JAZZ_RTC_BASE 0xe0004000 #define JAZZ_PORT_BASE 0xe2000000 +#define JAZZ_EISA_BASE 0xe3000000 + #endif /* __ASM_MIPS_JAZZ_H */ diff --git a/include/asm-mips/keyboard.h b/include/asm-mips/keyboard.h index 04dada787..2c4396f04 100644 --- a/include/asm-mips/keyboard.h +++ b/include/asm-mips/keyboard.h @@ -4,12 +4,34 @@ * 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. + * + * This file is a mess. Put on your peril sensitive glasses. */ #ifndef __ASM_MIPS_KEYBOARD_H #define __ASM_MIPS_KEYBOARD_H +#ifdef __KERNEL__ + #include <linux/config.h> #include <linux/delay.h> +#include <linux/ioport.h> + +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); +extern int pckbd_translate(unsigned char scancode, unsigned char *keycode, + char raw_mode); +extern char pckbd_unexpected_up(unsigned char keycode); +extern void pckbd_leds(unsigned char leds); +extern void pckbd_init_hw(void); + +#define kbd_setkeycode pckbd_setkeycode +#define kbd_getkeycode pckbd_getkeycode +#define kbd_pretranslate pckbd_pretranslate +#define kbd_translate pckbd_translate +#define kbd_unexpected_up pckbd_unexpected_up +#define kbd_leds pckbd_leds +#define kbd_init_hw pckbd_init_hw /* * The default IO slowdown is doing 'inb()'s from 0x61, which should be @@ -21,6 +43,13 @@ #define SLOW_IO_BY_JUMPING #include <asm/io.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 + #ifdef CONFIG_SGI #include <asm/segment.h> #include <asm/sgihpc.h> @@ -44,8 +73,8 @@ #ifndef CONFIG_SGI #define KBD_REPORT_ERR #endif - -__initfunc(int initialize_kbd(void)); +#define KBD_REPORT_UNKN +/* #define KBD_IS_FOCUS_9000 */ int (*kbd_inb_p)(unsigned short port); int (*kbd_inb)(unsigned short port); @@ -60,14 +89,16 @@ void (*kbd_outb)(unsigned char data, unsigned short port); /* XXX Define both and ... */ #ifdef CONFIG_MIPS_JAZZ #define INIT_KBD /* full initialization for the keyboard controller. */ -static volatile keyboard_hardware *kh = (void *) JAZZ_KEYBOARD_ADDRESS; +#define __khtype keyboard_hardware #endif #ifdef CONFIG_SGI #define INIT_KBD /* full initialization for the keyboard controller. */ -volatile struct hpc_keyb *kh = (struct hpc_keyb *) (KSEG1 + 0x1fbd9800 + 64); +#define __khtype struct hpc_keyb #endif +static volatile __khtype *kh; + static int jazz_kbd_inb_p(unsigned short port) { @@ -147,158 +178,14 @@ port_kbd_outb(unsigned char data, unsigned short port) return outb(data, port); } -#ifdef INIT_KBD -static int -kbd_wait_for_input(void) -{ - int n; - int status, data; - - n = TIMEOUT_CONST; - do { - status = kbd_inb(KBD_STATUS_REG); - /* - * Wait for input data to become available. This bit will - * then be cleared by the following read of the DATA - * register. - */ - - if (!(status & KBD_OBF)) - continue; - - data = kbd_inb(KBD_DATA_REG); - - /* - * Check to see if a timeout error has occurred. This means - * that transmission was started but did not complete in the - * normal time cycle. PERR is set when a parity error occurred - * in the last transmission. - */ - if (status & (KBD_GTO | KBD_PERR)) { - continue; - } - return (data & 0xff); - } while (--n); - return (-1); /* timed-out if fell through to here... */ -} - -static void kbd_write(int address, int data) -{ - int status; - - do { - status = kbd_inb(KBD_STATUS_REG); /* spin until input buffer empty*/ - } while (status & KBD_IBF); - kbd_outb(data, address); /* write out the data*/ -} - -__initfunc(int initialize_kbd(void)) -{ - unsigned long flags; - - save_flags(flags); cli(); - - /* Flush any pending input. */ - while (kbd_wait_for_input() != -1) - continue; +static inline void kb_wait(void); +static int send_data(unsigned char data); - /* - * Test the keyboard interface. - * This seems to be the only way to get it going. - * If the test is successful a x55 is placed in the input buffer. - */ - kbd_write(KBD_CNTL_REG, KBD_SELF_TEST); - if (kbd_wait_for_input() != 0x55) { - printk(KERN_WARNING "initialize_kbd: " - "keyboard failed self test.\n"); - restore_flags(flags); - return(-1); - } - - /* - * Perform a keyboard interface test. This causes the controller - * to test the keyboard clock and data lines. The results of the - * test are placed in the input buffer. - */ - kbd_write(KBD_CNTL_REG, KBD_SELF_TEST2); - if (kbd_wait_for_input() != 0x00) { - printk(KERN_WARNING "initialize_kbd: " - "keyboard failed self test 2.\n"); - restore_flags(flags); - return(-1); - } - - /* Enable the keyboard by allowing the keyboard clock to run. */ - kbd_write(KBD_CNTL_REG, KBD_CNTL_ENABLE); - - /* - * Reset keyboard. If the read times out - * then the assumption is that no keyboard is - * plugged into the machine. - * This defaults the keyboard to scan-code set 2. - */ - kbd_write(KBD_DATA_REG, KBD_RESET); - if (kbd_wait_for_input() != KBD_ACK) { - printk(KERN_WARNING "initialize_kbd: " - "reset kbd failed, no ACK.\n"); - restore_flags(flags); - return(-1); - } - - /* - * Give the keyboard some time to breathe ... - * ... or it fucks up the floppy controller, too. Wiered. - */ - udelay(20); - - if (kbd_wait_for_input() != KBD_POR) { - printk(KERN_WARNING "initialize_kbd: " - "reset kbd failed, not POR.\n"); - restore_flags(flags); - return(-1); - } - - /* - * now do a DEFAULTS_DISABLE always - */ - kbd_write(KBD_DATA_REG, KBD_DISABLE); - if (kbd_wait_for_input() != KBD_ACK) { - printk(KERN_WARNING "initialize_kbd: " - "disable kbd failed, no ACK.\n"); - restore_flags(flags); - return(-1); - } - - /* - * Enable keyboard interrupt, operate in "sys" mode, - * enable keyboard (by clearing the disable keyboard bit), - * disable mouse, do conversion of keycodes. - */ - kbd_write(KBD_CNTL_REG, KBD_WRITE_MODE); - kbd_write(KBD_DATA_REG, KBD_EKI|KBD_SYS|KBD_DMS|KBD_KCC); - - /* - * now ENABLE the keyboard to set it scanning... - */ - kbd_write(KBD_DATA_REG, KBD_ENABLE); - if (kbd_wait_for_input() != KBD_ACK) { - printk(KERN_WARNING "initialize_kbd: " - "keyboard enable failed.\n"); - restore_flags(flags); - return(-1); - } - - restore_flags(flags); - - return (1); -} -#endif - -extern __inline__ void -keyboard_setup(void) +extern __inline__ void keyboard_setup(void) { #ifdef CONFIG_MIPS_JAZZ if (mips_machgroup == MACH_GROUP_JAZZ) { + kh = (void *) JAZZ_KEYBOARD_ADDRESS; kbd_inb_p = jazz_kbd_inb_p; kbd_inb = jazz_kbd_inb; kbd_outb_p = jazz_kbd_outb_p; @@ -308,7 +195,6 @@ keyboard_setup(void) */ *((volatile u16 *)JAZZ_IO_IRQ_ENABLE) |= JAZZ_IE_KEYBOARD; set_cp0_status(IE_IRQ1, IE_IRQ1); - initialize_kbd(); } else #endif if (mips_machgroup == MACH_GROUP_ARC || /* this is for Deskstation */ @@ -334,6 +220,12 @@ keyboard_setup(void) if (!send_data(0xf0) || !send_data(0x02)) printk("Scanmode 2 change failed\n"); } +#ifdef CONFIG_SGI + if (mips_machgroup == MACH_SGI_INDY) { + kh = (struct hpc_keyb *) (KSEG1 + 0x1fbd9800 + 64); + } +#endif } +#endif /* __KERNEL */ #endif /* __ASM_MIPS_KEYBOARD_H */ diff --git a/include/asm-mips/mipsprom.h b/include/asm-mips/mipsprom.h new file mode 100644 index 000000000..ce7cff7f1 --- /dev/null +++ b/include/asm-mips/mipsprom.h @@ -0,0 +1,74 @@ +#ifndef __ASM_MIPS_PROM_H +#define __ASM_MIPS_PROM_H + +#define PROM_RESET 0 +#define PROM_EXEC 1 +#define PROM_RESTART 2 +#define PROM_REINIT 3 +#define PROM_REBOOT 4 +#define PROM_AUTOBOOT 5 +#define PROM_OPEN 6 +#define PROM_READ 7 +#define PROM_WRITE 8 +#define PROM_IOCTL 9 +#define PROM_CLOSE 10 +#define PROM_GETCHAR 11 +#define PROM_PUTCHAR 12 +#define PROM_SHOWCHAR 13 /* XXX */ +#define PROM_GETS 14 /* XXX */ +#define PROM_PUTS 15 /* XXX */ +#define PROM_PRINTF 16 /* XXX */ + +/* What are these for? */ +#define PROM_INITPROTO 17 /* XXX */ +#define PROM_PROTOENABLE 18 /* XXX */ +#define PROM_PROTODISABLE 19 /* XXX */ +#define PROM_GETPKT 20 /* XXX */ +#define PROM_PUTPKT 21 /* XXX */ + +/* More PROM shit. Probably has to do with VME RMW cycles??? */ +#define PROM_ORW_RMW 22 /* XXX */ +#define PROM_ORH_RMW 23 /* XXX */ +#define PROM_ORB_RMW 24 /* XXX */ +#define PROM_ANDW_RMW 25 /* XXX */ +#define PROM_ANDH_RMW 26 /* XXX */ +#define PROM_ANDB_RMW 27 /* XXX */ + +/* Cache handling stuff */ +#define PROM_FLUSHCACHE 28 /* XXX */ +#define PROM_CLEARCACHE 29 /* XXX */ + +/* Libc alike stuff */ +#define PROM_SETJMP 30 /* XXX */ +#define PROM_LONGJMP 31 /* XXX */ +#define PROM_BEVUTLB 32 /* XXX */ +#define PROM_GETENV 33 /* XXX */ +#define PROM_SETENV 34 /* XXX */ +#define PROM_ATOB 35 /* XXX */ +#define PROM_STRCMP 36 /* XXX */ +#define PROM_STRLEN 37 /* XXX */ +#define PROM_STRCPY 38 /* XXX */ +#define PROM_STRCAT 39 /* XXX */ + +/* Misc stuff */ +#define PROM_PARSER 40 /* XXX */ +#define PROM_RANGE 41 /* XXX */ +#define PROM_ARGVIZE 42 /* XXX */ +#define PROM_HELP 43 /* XXX */ + +/* Entry points for some PROM commands */ +#define PROM_DUMPCMD 44 /* XXX */ +#define PROM_SETENVCMD 45 /* XXX */ +#define PROM_UNSETENVCMD 46 /* XXX */ +#define PROM_PRINTENVCMD 47 /* XXX */ +#define PROM_BEVEXCEPT 48 /* XXX */ +#define PROM_ENABLECMD 49 /* XXX */ +#define PROM_DISABLECMD 50 /* XXX */ + +#define PROM_CLEARNOFAULT 51 /* XXX */ +#define PROM_NOTIMPLEMENT 52 /* XXX */ + +#define PROM_NV_GET 53 /* XXX */ +#define PROM_NV_SET 54 /* XXX */ + +#endif /* __ASM_MIPS_PROM_H */ diff --git a/include/asm-mips/offset.h b/include/asm-mips/offset.h index c5e6f37fa..0f6e63a25 100644 --- a/include/asm-mips/offset.h +++ b/include/asm-mips/offset.h @@ -48,12 +48,11 @@ /* MIPS task_struct offsets. */ #define TASK_STATE 0 +#define TASK_COUNTER 4 #define TASK_PRIORITY 8 #define TASK_SIGNAL 12 #define TASK_BLOCKED 16 #define TASK_FLAGS 20 -#define TASK_SAVED_KSTACK 84 -#define TASK_KSTACK_PG 88 #define TASK_MM 912 /* MIPS specific thread_struct offsets. */ @@ -82,8 +81,8 @@ #define THREAD_OLDCTX 896 /* Linux mm_struct offsets. */ -#define MM_COUNT 0 -#define MM_PGD 4 -#define MM_CONTEXT 8 +#define MM_COUNT 12 +#define MM_PGD 8 +#define MM_CONTEXT 28 #endif /* !(_MIPS_OFFSET_H) */ diff --git a/include/asm-mips/poll.h b/include/asm-mips/poll.h index a1d2a47d3..12c1a5ec3 100644 --- a/include/asm-mips/poll.h +++ b/include/asm-mips/poll.h @@ -11,7 +11,7 @@ #define POLLRDNORM 0x0040 #define POLLRDBAND 0x0080 -#define POLLWRNORM POLLOUT /* XXX */ +#define POLLWRNORM POLLOUT #define POLLWRBAND 0x0100 /* XXX This one seems to be more-or-less nonstandard. */ diff --git a/include/asm-mips/processor.h b/include/asm-mips/processor.h index b202ac4ca..0c47c2580 100644 --- a/include/asm-mips/processor.h +++ b/include/asm-mips/processor.h @@ -109,7 +109,7 @@ struct thread_struct { #endif /* !defined (__LANGUAGE_ASSEMBLY__) */ #define INIT_MMAP { &init_mm, KSEG0, KSEG1, PAGE_SHARED, \ - VM_READ | VM_WRITE | VM_EXEC } + VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap } #define INIT_TSS { \ /* \ @@ -128,7 +128,7 @@ struct thread_struct { /* \ * Other stuff associated with the process \ */ \ - 0, 0, 0, sizeof(init_kernel_stack) + (unsigned long)init_kernel_stack - 8, \ + 0, 0, 0, (unsigned long)&init_task_union + KERNEL_STACK_SIZE - 8, \ (unsigned long) swapper_pg_dir, \ /* \ * For now the default is to fix address errors \ @@ -167,9 +167,8 @@ extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long #define alloc_task_struct() kmalloc(sizeof(struct task_struct), GFP_KERNEL) #define free_task_struct(p) kfree(p) -/* Kernel stack allocation/freeing. */ -extern unsigned long alloc_kernel_stack(struct task_struct *tsk); -extern void free_kernel_stack(unsigned long stack); +#define init_task (init_task_union.task) +#define init_stack (init_task_union.stack) #endif /* !defined (__LANGUAGE_ASSEMBLY__) */ #endif /* __KERNEL__ */ diff --git a/include/asm-mips/sgidefs.h b/include/asm-mips/sgidefs.h index 23dc0447f..72d25346a 100644 --- a/include/asm-mips/sgidefs.h +++ b/include/asm-mips/sgidefs.h @@ -1,6 +1,4 @@ /* - * Makefile for MIPS Linux main source directory - * * 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. @@ -18,12 +16,32 @@ * problem. The kernel sources are aware of this problem, so we don't warn * when compiling the kernel. */ +#if !defined(_MIPS_ISA) && !defined(__KERNEL__) +#warning "Macro _MIPS_ISA has not been defined by specs file" +#endif + +#if !defined(_MIPS_SIM) && !defined(__KERNEL__) +#warning "Macro _MIPS_SIM has not been defined by specs file" +#endif + +#if !defined(_MIPS_SZINT) && !defined(__KERNEL__) +#warning "Macro _MIPS_SZINT has not been defined by specs file" +#endif + +#if !defined(_MIPS_SZLONG) && !defined(__KERNEL__) +#warning "Macro _MIPS_SZLONG has not been defined by specs file" +#endif + +#if !defined(_MIPS_SZPTR) && !defined(__KERNEL__) +#warning "Macro _MIPS_SZPTR has not been defined by specs file" +#endif + #if (!defined(_MIPS_ISA) || \ !defined(_MIPS_SIM) || \ !defined(_MIPS_SZINT) || \ !defined(_MIPS_SZLONG) || \ !defined(_MIPS_SZPTR)) && !defined(__KERNEL__) -#warning "Please update your GCC to GCC 2.7.2-3 or newer" +#warning "Please update your GCC to GCC 2.7.2-4 or newer" #endif /* diff --git a/include/asm-mips/sni.h b/include/asm-mips/sni.h index 6a43b65f4..9ed5919d2 100644 --- a/include/asm-mips/sni.h +++ b/include/asm-mips/sni.h @@ -83,4 +83,9 @@ #define PCIMT_IRQ_INTD 24 #define PCIMT_IRQ_SCSI 25 +/* + * Base address for the mapped 16mb EISA bus segment. + */ +#define PCIMT_EISA_BASE 0xb0000000 + #endif /* __ASM_MIPS_SNI_H */ diff --git a/include/asm-mips/spinlock.h b/include/asm-mips/spinlock.h index d1f67424f..85376edfd 100644 --- a/include/asm-mips/spinlock.h +++ b/include/asm-mips/spinlock.h @@ -3,6 +3,8 @@ #ifndef __SMP__ +/* gcc 2.7.2 can crash initializing an empty structure. For now we + try to do though ... */ typedef struct { } spinlock_t; #define SPIN_LOCK_UNLOCKED { } diff --git a/include/asm-mips/system.h b/include/asm-mips/system.h index 2d4d27871..daf477459 100644 --- a/include/asm-mips/system.h +++ b/include/asm-mips/system.h @@ -15,7 +15,7 @@ #include <linux/kernel.h> extern __inline__ void -sti(void) +__sti(void) { __asm__ __volatile__( ".set\tnoreorder\n\t" @@ -39,7 +39,7 @@ sti(void) * no nops at all. */ extern __inline__ void -cli(void) +__cli(void) { __asm__ __volatile__( ".set\tnoreorder\n\t" @@ -58,7 +58,7 @@ cli(void) : "$1", "memory"); } -#define save_flags(x) \ +#define __save_flags(x) \ __asm__ __volatile__( \ ".set\tnoreorder\n\t" \ "mfc0\t%0,$12\n\t" \ @@ -67,7 +67,7 @@ __asm__ __volatile__( \ : /* no inputs */ \ : "memory") -#define save_and_cli(x) \ +#define __save_and_cli(x) \ __asm__ __volatile__( \ ".set\tnoreorder\n\t" \ ".set\tnoat\n\t" \ @@ -85,7 +85,7 @@ __asm__ __volatile__( \ : "$1", "memory") extern void __inline__ -restore_flags(int flags) +__restore_flags(int flags) { __asm__ __volatile__( ".set\tnoreorder\n\t" @@ -99,6 +99,15 @@ restore_flags(int flags) : "memory"); } +/* + * Non-SMP versions ... + */ +#define sti() __sti() +#define cli() __cli() +#define save_flags(x) __save_flags(x) +#define save_and_cli(x) __save_and_cli(x) +#define restore_flags(x) __restore_flags(x) + #define sync_mem() \ __asm__ __volatile__( \ ".set\tnoreorder\n\t" \ diff --git a/include/asm-ppc/keyboard.h b/include/asm-ppc/keyboard.h new file mode 100644 index 000000000..6cd1391de --- /dev/null +++ b/include/asm-ppc/keyboard.h @@ -0,0 +1,49 @@ +/* + * linux/include/asm-ppc/keyboard.h + * + * Created 3 Nov 1996 by Geert Uytterhoeven + */ + +/* + * This file contains the ppc architecture specific keyboard definitions + */ + +#ifndef __ASMPPC_KEYBOARD_H +#define __ASMPPC_KEYBOARD_H + +#ifdef __KERNEL__ + +#define KEYBOARD_IRQ 1 +#define DISABLE_KBD_DURING_INTERRUPTS 0 + +#define KBD_REPORT_ERR +#define KBD_REPORT_UNKN +/* #define KBD_IS_FOCUS_9000 */ + +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); +extern int pckbd_translate(unsigned char scancode, unsigned char *keycode, + char raw_mode); +extern char pckbd_unexpected_up(unsigned char keycode); +extern void pckbd_leds(unsigned char leds); +extern void pckbd_init_hw(void); + +#define kbd_setkeycode pckbd_setkeycode +#define kbd_getkeycode pckbd_getkeycode +#define kbd_pretranslate pckbd_pretranslate +#define kbd_translate pckbd_translate +#define kbd_unexpected_up pckbd_unexpected_up +#define kbd_leds pckbd_leds +#define kbd_init_hw pckbd_init_hw + +#define INIT_KBD + +extern __inline__ void keyboard_setup() +{ + request_region(0x60,16,"keyboard"); +} + +#endif /* __KERNEL__ */ + +#endif /* __ASMPPC_KEYBOARD_H */ diff --git a/include/asm-ppc/processor.h b/include/asm-ppc/processor.h index ef797b4a7..e3c715c0d 100644 --- a/include/asm-ppc/processor.h +++ b/include/asm-ppc/processor.h @@ -116,7 +116,7 @@ struct thread_struct } #define INIT_MMAP { &init_mm, 0, 0x40000000, \ - PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC } + PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap } /* Free all resources held by a thread. */ extern void release_thread(struct task_struct *); diff --git a/include/asm-sparc/asm_offsets.h b/include/asm-sparc/asm_offsets.h index 3b0abf580..b90462a69 100644 --- a/include/asm-sparc/asm_offsets.h +++ b/include/asm-sparc/asm_offsets.h @@ -30,123 +30,125 @@ #define ASIZ_task_next_run 0x00000004 #define AOFF_task_prev_run 0x00000050 #define ASIZ_task_prev_run 0x00000004 -#define AOFF_task_saved_kernel_stack 0x00000054 -#define ASIZ_task_saved_kernel_stack 0x00000004 -#define AOFF_task_kernel_stack_page 0x00000058 -#define ASIZ_task_kernel_stack_page 0x00000004 -#define AOFF_task_exit_code 0x0000005c +#define AOFF_task_exit_code 0x00000054 #define ASIZ_task_exit_code 0x00000004 -#define AOFF_task_exit_signal 0x00000060 +#define AOFF_task_exit_signal 0x00000058 #define ASIZ_task_exit_signal 0x00000004 -#define AOFF_task_personality 0x00000064 +#define AOFF_task_personality 0x0000005c #define ASIZ_task_personality 0x00000004 -#define AOFF_task_pid 0x0000006c +#define AOFF_task_pid 0x00000064 #define ASIZ_task_pid 0x00000004 -#define AOFF_task_pgrp 0x00000070 +#define AOFF_task_pgrp 0x00000068 #define ASIZ_task_pgrp 0x00000004 -#define AOFF_task_tty_old_pgrp 0x00000074 +#define AOFF_task_tty_old_pgrp 0x0000006c #define ASIZ_task_tty_old_pgrp 0x00000004 -#define AOFF_task_session 0x00000078 +#define AOFF_task_session 0x00000070 #define ASIZ_task_session 0x00000004 -#define AOFF_task_leader 0x0000007c +#define AOFF_task_leader 0x00000074 #define ASIZ_task_leader 0x00000004 -#define AOFF_task_ngroups 0x00000080 +#define AOFF_task_ngroups 0x00000078 #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x00000084 +#define AOFF_task_groups 0x0000007c #define ASIZ_task_groups 0x00000040 -#define AOFF_task_p_opptr 0x000000c4 +#define AOFF_task_p_opptr 0x000000bc #define ASIZ_task_p_opptr 0x00000004 -#define AOFF_task_p_pptr 0x000000c8 +#define AOFF_task_p_pptr 0x000000c0 #define ASIZ_task_p_pptr 0x00000004 -#define AOFF_task_p_cptr 0x000000cc +#define AOFF_task_p_cptr 0x000000c4 #define ASIZ_task_p_cptr 0x00000004 -#define AOFF_task_p_ysptr 0x000000d0 +#define AOFF_task_p_ysptr 0x000000c8 #define ASIZ_task_p_ysptr 0x00000004 -#define AOFF_task_p_osptr 0x000000d4 +#define AOFF_task_p_osptr 0x000000cc #define ASIZ_task_p_osptr 0x00000004 -#define AOFF_task_wait_chldexit 0x000000d8 +#define AOFF_task_pidhash_next 0x000000d0 +#define ASIZ_task_pidhash_next 0x00000004 +#define AOFF_task_pidhash_pprev 0x000000d4 +#define ASIZ_task_pidhash_pprev 0x00000004 +#define AOFF_task_tarray_ptr 0x000000d8 +#define ASIZ_task_tarray_ptr 0x00000004 +#define AOFF_task_wait_chldexit 0x000000dc #define ASIZ_task_wait_chldexit 0x00000004 -#define AOFF_task_uid 0x000000dc +#define AOFF_task_uid 0x000000e0 #define ASIZ_task_uid 0x00000002 -#define AOFF_task_euid 0x000000de +#define AOFF_task_euid 0x000000e2 #define ASIZ_task_euid 0x00000002 -#define AOFF_task_suid 0x000000e0 +#define AOFF_task_suid 0x000000e4 #define ASIZ_task_suid 0x00000002 -#define AOFF_task_fsuid 0x000000e2 +#define AOFF_task_fsuid 0x000000e6 #define ASIZ_task_fsuid 0x00000002 -#define AOFF_task_gid 0x000000e4 +#define AOFF_task_gid 0x000000e8 #define ASIZ_task_gid 0x00000002 -#define AOFF_task_egid 0x000000e6 +#define AOFF_task_egid 0x000000ea #define ASIZ_task_egid 0x00000002 -#define AOFF_task_sgid 0x000000e8 +#define AOFF_task_sgid 0x000000ec #define ASIZ_task_sgid 0x00000002 -#define AOFF_task_fsgid 0x000000ea +#define AOFF_task_fsgid 0x000000ee #define ASIZ_task_fsgid 0x00000002 -#define AOFF_task_timeout 0x000000ec +#define AOFF_task_timeout 0x000000f0 #define ASIZ_task_timeout 0x00000004 -#define AOFF_task_policy 0x000000f0 +#define AOFF_task_policy 0x000000f4 #define ASIZ_task_policy 0x00000004 -#define AOFF_task_rt_priority 0x000000f4 +#define AOFF_task_rt_priority 0x000000f8 #define ASIZ_task_rt_priority 0x00000004 -#define AOFF_task_it_real_value 0x000000f8 +#define AOFF_task_it_real_value 0x000000fc #define ASIZ_task_it_real_value 0x00000004 -#define AOFF_task_it_prof_value 0x000000fc +#define AOFF_task_it_prof_value 0x00000100 #define ASIZ_task_it_prof_value 0x00000004 -#define AOFF_task_it_virt_value 0x00000100 +#define AOFF_task_it_virt_value 0x00000104 #define ASIZ_task_it_virt_value 0x00000004 -#define AOFF_task_it_real_incr 0x00000104 +#define AOFF_task_it_real_incr 0x00000108 #define ASIZ_task_it_real_incr 0x00000004 -#define AOFF_task_it_prof_incr 0x00000108 +#define AOFF_task_it_prof_incr 0x0000010c #define ASIZ_task_it_prof_incr 0x00000004 -#define AOFF_task_it_virt_incr 0x0000010c +#define AOFF_task_it_virt_incr 0x00000110 #define ASIZ_task_it_virt_incr 0x00000004 -#define AOFF_task_real_timer 0x00000110 +#define AOFF_task_real_timer 0x00000114 #define ASIZ_task_real_timer 0x00000014 -#define AOFF_task_utime 0x00000124 +#define AOFF_task_utime 0x00000128 #define ASIZ_task_utime 0x00000004 -#define AOFF_task_stime 0x00000128 +#define AOFF_task_stime 0x0000012c #define ASIZ_task_stime 0x00000004 -#define AOFF_task_cutime 0x0000012c +#define AOFF_task_cutime 0x00000130 #define ASIZ_task_cutime 0x00000004 -#define AOFF_task_cstime 0x00000130 +#define AOFF_task_cstime 0x00000134 #define ASIZ_task_cstime 0x00000004 -#define AOFF_task_start_time 0x00000134 +#define AOFF_task_start_time 0x00000138 #define ASIZ_task_start_time 0x00000004 -#define AOFF_task_min_flt 0x00000138 +#define AOFF_task_min_flt 0x0000013c #define ASIZ_task_min_flt 0x00000004 -#define AOFF_task_maj_flt 0x0000013c +#define AOFF_task_maj_flt 0x00000140 #define ASIZ_task_maj_flt 0x00000004 -#define AOFF_task_nswap 0x00000140 +#define AOFF_task_nswap 0x00000144 #define ASIZ_task_nswap 0x00000004 -#define AOFF_task_cmin_flt 0x00000144 +#define AOFF_task_cmin_flt 0x00000148 #define ASIZ_task_cmin_flt 0x00000004 -#define AOFF_task_cmaj_flt 0x00000148 +#define AOFF_task_cmaj_flt 0x0000014c #define ASIZ_task_cmaj_flt 0x00000004 -#define AOFF_task_cnswap 0x0000014c +#define AOFF_task_cnswap 0x00000150 #define ASIZ_task_cnswap 0x00000004 -#define AOFF_task_swap_address 0x00000154 +#define AOFF_task_swap_address 0x00000158 #define ASIZ_task_swap_address 0x00000004 -#define AOFF_task_old_maj_flt 0x00000158 +#define AOFF_task_old_maj_flt 0x0000015c #define ASIZ_task_old_maj_flt 0x00000004 -#define AOFF_task_dec_flt 0x0000015c +#define AOFF_task_dec_flt 0x00000160 #define ASIZ_task_dec_flt 0x00000004 -#define AOFF_task_swap_cnt 0x00000160 +#define AOFF_task_swap_cnt 0x00000164 #define ASIZ_task_swap_cnt 0x00000004 -#define AOFF_task_rlim 0x00000164 +#define AOFF_task_rlim 0x00000168 #define ASIZ_task_rlim 0x00000050 -#define AOFF_task_used_math 0x000001b4 +#define AOFF_task_used_math 0x000001b8 #define ASIZ_task_used_math 0x00000002 -#define AOFF_task_comm 0x000001b6 +#define AOFF_task_comm 0x000001ba #define ASIZ_task_comm 0x00000010 -#define AOFF_task_link_count 0x000001c8 +#define AOFF_task_link_count 0x000001cc #define ASIZ_task_link_count 0x00000004 -#define AOFF_task_tty 0x000001cc +#define AOFF_task_tty 0x000001d0 #define ASIZ_task_tty 0x00000004 -#define AOFF_task_semundo 0x000001d0 +#define AOFF_task_semundo 0x000001d4 #define ASIZ_task_semundo 0x00000004 -#define AOFF_task_semsleeping 0x000001d4 +#define AOFF_task_semsleeping 0x000001d8 #define ASIZ_task_semsleeping 0x00000004 -#define AOFF_task_ldt 0x000001d8 +#define AOFF_task_ldt 0x000001dc #define ASIZ_task_ldt 0x00000004 #define AOFF_task_tss 0x000001e0 #define ASIZ_task_tss 0x00000390 @@ -158,56 +160,60 @@ #define ASIZ_task_mm 0x00000004 #define AOFF_task_sig 0x0000057c #define ASIZ_task_sig 0x00000004 -#define AOFF_task_processor 0x00000580 +#define AOFF_task_has_cpu 0x00000580 +#define ASIZ_task_has_cpu 0x00000004 +#define AOFF_task_processor 0x00000584 #define ASIZ_task_processor 0x00000004 -#define AOFF_task_last_processor 0x00000584 +#define AOFF_task_last_processor 0x00000588 #define ASIZ_task_last_processor 0x00000004 -#define AOFF_task_lock_depth 0x00000588 +#define AOFF_task_lock_depth 0x0000058c #define ASIZ_task_lock_depth 0x00000004 -#define AOFF_mm_count 0x00000000 -#define ASIZ_mm_count 0x00000004 -#define AOFF_mm_pgd 0x00000004 +#define AOFF_task_sigmask_lock 0x00000590 +#define ASIZ_task_sigmask_lock 0x00000000 +#define AOFF_mm_mmap 0x00000000 +#define ASIZ_mm_mmap 0x00000004 +#define AOFF_mm_mmap_cache 0x00000004 +#define ASIZ_mm_mmap_cache 0x00000004 +#define AOFF_mm_pgd 0x00000008 #define ASIZ_mm_pgd 0x00000004 -#define AOFF_mm_context 0x00000008 +#define AOFF_mm_count 0x0000000c +#define ASIZ_mm_count 0x00000004 +#define AOFF_mm_mmap_sem 0x00000010 +#define ASIZ_mm_mmap_sem 0x0000000c +#define AOFF_mm_context 0x0000001c #define ASIZ_mm_context 0x00000004 -#define AOFF_mm_start_code 0x0000000c +#define AOFF_mm_start_code 0x00000020 #define ASIZ_mm_start_code 0x00000004 -#define AOFF_mm_end_code 0x00000010 +#define AOFF_mm_end_code 0x00000024 #define ASIZ_mm_end_code 0x00000004 -#define AOFF_mm_start_data 0x00000014 +#define AOFF_mm_start_data 0x00000028 #define ASIZ_mm_start_data 0x00000004 -#define AOFF_mm_end_data 0x00000018 +#define AOFF_mm_end_data 0x0000002c #define ASIZ_mm_end_data 0x00000004 -#define AOFF_mm_start_brk 0x0000001c +#define AOFF_mm_start_brk 0x00000030 #define ASIZ_mm_start_brk 0x00000004 -#define AOFF_mm_brk 0x00000020 +#define AOFF_mm_brk 0x00000034 #define ASIZ_mm_brk 0x00000004 -#define AOFF_mm_start_stack 0x00000024 +#define AOFF_mm_start_stack 0x00000038 #define ASIZ_mm_start_stack 0x00000004 -#define AOFF_mm_start_mmap 0x00000028 +#define AOFF_mm_start_mmap 0x0000003c #define ASIZ_mm_start_mmap 0x00000004 -#define AOFF_mm_arg_start 0x0000002c +#define AOFF_mm_arg_start 0x00000040 #define ASIZ_mm_arg_start 0x00000004 -#define AOFF_mm_arg_end 0x00000030 +#define AOFF_mm_arg_end 0x00000044 #define ASIZ_mm_arg_end 0x00000004 -#define AOFF_mm_env_start 0x00000034 +#define AOFF_mm_env_start 0x00000048 #define ASIZ_mm_env_start 0x00000004 -#define AOFF_mm_env_end 0x00000038 +#define AOFF_mm_env_end 0x0000004c #define ASIZ_mm_env_end 0x00000004 -#define AOFF_mm_rss 0x0000003c +#define AOFF_mm_rss 0x00000050 #define ASIZ_mm_rss 0x00000004 -#define AOFF_mm_total_vm 0x00000040 +#define AOFF_mm_total_vm 0x00000054 #define ASIZ_mm_total_vm 0x00000004 -#define AOFF_mm_locked_vm 0x00000044 +#define AOFF_mm_locked_vm 0x00000058 #define ASIZ_mm_locked_vm 0x00000004 -#define AOFF_mm_def_flags 0x00000048 +#define AOFF_mm_def_flags 0x0000005c #define ASIZ_mm_def_flags 0x00000004 -#define AOFF_mm_mmap 0x0000004c -#define ASIZ_mm_mmap 0x00000004 -#define AOFF_mm_mmap_avl 0x00000050 -#define ASIZ_mm_mmap_avl 0x00000004 -#define AOFF_mm_mmap_sem 0x00000054 -#define ASIZ_mm_mmap_sem 0x0000000c #define AOFF_thread_uwinmask 0x00000000 #define ASIZ_thread_uwinmask 0x00000004 #define AOFF_thread_kregs 0x00000004 diff --git a/include/asm-sparc/asmmacro.h b/include/asm-sparc/asmmacro.h index 25211c93f..40c71b0d6 100644 --- a/include/asm-sparc/asmmacro.h +++ b/include/asm-sparc/asmmacro.h @@ -6,22 +6,22 @@ #ifndef _SPARC_ASMMACRO_H #define _SPARC_ASMMACRO_H -/* #define SMP_DEBUG */ - #define GET_PROCESSOR_ID(reg) \ rd %tbr, %reg; \ srl %reg, 12, %reg; \ and %reg, 3, %reg; #define GET_PROCESSOR_MID(reg, tmp) \ - GET_PROCESSOR_ID(reg) \ - set C_LABEL(mid_xlate), %tmp; \ + rd %tbr, %reg; \ + sethi C_LABEL(mid_xlate), %tmp; \ + srl %reg, 12, %reg; \ + or %tmp, %lo(C_LABEL(mid_xlate)), %tmp; \ + and %reg, 3, %reg; \ ldub [%tmp + %reg], %reg; #define GET_PROCESSOR_OFFSET(reg) \ - rd %tbr, %reg; \ - srl %reg, 10, %reg; \ - and %reg, 0xc, %reg; + GET_PROCESSOR_ID(reg) \ + sll %reg, 2, %reg; #define PROCESSOR_OFFSET_TO_ID(reg) \ srl %reg, 2, %reg; diff --git a/include/asm-sparc/auxio.h b/include/asm-sparc/auxio.h index f5b9d5591..f70a447bf 100644 --- a/include/asm-sparc/auxio.h +++ b/include/asm-sparc/auxio.h @@ -1,4 +1,4 @@ -/* $Id: auxio.h,v 1.16 1997/01/31 23:26:05 tdyas Exp $ +/* $Id: auxio.h,v 1.17 1997/05/01 01:42:02 davem Exp $ * auxio.h: Definitions and code for the Auxiliary I/O register. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -43,30 +43,27 @@ extern unsigned char *auxio_register; #define FLPY_TCNTOFF if (AUXREG) *AUXREG = ((*AUXREG | AUXIO_ORMEIN) & (~AUXIO_FLPY_TCNT)) #ifndef __ASSEMBLY__ -extern __inline__ void set_auxio(unsigned char bits_on, unsigned char bits_off) -{ - unsigned char regval; - unsigned long flags; - - save_flags(flags); cli(); - - switch(sparc_cpu_model) { - case sun4c: - regval = *AUXREG; - *AUXREG = ((regval | bits_on) & ~bits_off) | AUXIO_ORMEIN; - break; - case sun4m: - if(!AUXREG) - break; /* VME chassic sun4m, no auxio. */ - regval = *AUXREG; - *AUXREG = ((regval | bits_on) & ~bits_off) | AUXIO_ORMEIN4M; - break; - default: - panic("Can't set AUXIO register on this machine."); - }; - - restore_flags(flags); -} +#define set_auxio(bits_on, bits_off) \ +do { \ + unsigned char regval; \ + unsigned long flags; \ + save_flags(flags); cli(); \ + switch(sparc_cpu_model) { \ + case sun4c: \ + regval = *AUXREG; \ + *AUXREG = ((regval | bits_on) & ~bits_off) | AUXIO_ORMEIN; \ + break; \ + case sun4m: \ + if(!AUXREG) \ + break; /* VME chassic sun4m, no auxio. */ \ + regval = *AUXREG; \ + *AUXREG = ((regval | bits_on) & ~bits_off) | AUXIO_ORMEIN4M; \ + break; \ + default: \ + panic("Can't set AUXIO register on this machine."); \ + }; \ + restore_flags(flags); \ +} while(0) #endif /* !(__ASSEMBLY__) */ diff --git a/include/asm-sparc/bitops.h b/include/asm-sparc/bitops.h index f78b3b22a..cd4a8ef8c 100644 --- a/include/asm-sparc/bitops.h +++ b/include/asm-sparc/bitops.h @@ -1,4 +1,4 @@ -/* $Id: bitops.h,v 1.46 1997/04/13 06:38:24 davem Exp $ +/* $Id: bitops.h,v 1.47 1997/05/14 20:47:56 davem Exp $ * bitops.h: Bit string operations on the Sparc. * * Copyright 1995 David S. Miller (davem@caip.rutgers.edu) @@ -95,7 +95,7 @@ extern __inline__ unsigned long change_bit(unsigned long nr, void *addr) * all bit-ops return 0 if bit was previously clear and != 0 otherwise. */ -extern __inline__ unsigned long set_bit(unsigned long nr, __SMPVOL void *addr) +extern __inline__ unsigned long test_and_set_bit(unsigned long nr, __SMPVOL void *addr) { register unsigned long mask asm("g2"); register unsigned long *ADDR asm("g1"); @@ -112,7 +112,12 @@ extern __inline__ unsigned long set_bit(unsigned long nr, __SMPVOL void *addr) return mask; } -extern __inline__ unsigned long clear_bit(unsigned long nr, __SMPVOL void *addr) +extern __inline__ void set_bit(unsigned long nr, __SMPVOL void *addr) +{ + (void) test_and_set_bit(nr, addr); +} + +extern __inline__ unsigned long test_and_clear_bit(unsigned long nr, __SMPVOL void *addr) { register unsigned long mask asm("g2"); register unsigned long *ADDR asm("g1"); @@ -130,7 +135,12 @@ extern __inline__ unsigned long clear_bit(unsigned long nr, __SMPVOL void *addr) return mask; } -extern __inline__ unsigned long change_bit(unsigned long nr, __SMPVOL void *addr) +extern __inline__ unsigned long clear_bit(unsigned long nr, __SMPVOL void *addr) +{ + (void) test_and_clear_bit(nr, addr); +} + +extern __inline__ unsigned long test_and_change_bit(unsigned long nr, __SMPVOL void *addr) { register unsigned long mask asm("g2"); register unsigned long *ADDR asm("g1"); @@ -148,6 +158,11 @@ extern __inline__ unsigned long change_bit(unsigned long nr, __SMPVOL void *addr return mask; } +extern __inline__ unsigned long change_bit(unsigned long nr, __SMPVOL void *addr) +{ + (void) test_and_change_bit(nr, addr); +} + #endif /* __KERNEL__ */ /* The following routine need not be atomic. */ @@ -369,8 +384,8 @@ found_middle: #define ext2_find_next_zero_bit find_next_zero_le_bit /* Bitmap functions for the minix filesystem. */ -#define minix_set_bit(nr,addr) set_bit(nr,addr) -#define minix_clear_bit(nr,addr) clear_bit(nr,addr) +#define minix_set_bit(nr,addr) test_and_set_bit(nr,addr) +#define minix_clear_bit(nr,addr) test_and_clear_bit(nr,addr) #define minix_test_bit(nr,addr) test_bit(nr,addr) #define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size) diff --git a/include/asm-sparc/cache.h b/include/asm-sparc/cache.h index f1e694ea6..55475a5a1 100644 --- a/include/asm-sparc/cache.h +++ b/include/asm-sparc/cache.h @@ -1,4 +1,4 @@ -/* $Id: cache.h,v 1.6 1996/12/28 19:55:12 davem Exp $ +/* $Id: cache.h,v 1.7 1997/05/06 09:31:46 davem Exp $ * cache.h: Cache specific code for the Sparc. These include flushing * and direct tag/data line access. * @@ -11,6 +11,7 @@ #include <asm/asi.h> #define L1_CACHE_BYTES 32 +#define L1_CACHE_ALIGN(x) ((((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))) /* Direct access to the instruction cache is provided through and * alternate address space. The IDC bit must be off in the ICCR on diff --git a/include/asm-sparc/current.h b/include/asm-sparc/current.h index 254ce5618..66cf661e4 100644 --- a/include/asm-sparc/current.h +++ b/include/asm-sparc/current.h @@ -1,12 +1,6 @@ #ifndef _SPARC_CURRENT_H #define _SPARC_CURRENT_H -/* Some architectures may want to do something "clever" here since - * this is the most frequently accessed piece of data in the entire - * kernel. - */ -extern struct task_struct *current_set[NR_CPUS]; - /* Sparc rules... */ register struct task_struct *current asm("g6"); diff --git a/include/asm-sparc/hardirq.h b/include/asm-sparc/hardirq.h index 2d3f70bc6..8b0f4f9e2 100644 --- a/include/asm-sparc/hardirq.h +++ b/include/asm-sparc/hardirq.h @@ -51,7 +51,7 @@ do { if(global_irq_holder == (unsigned char) cpu) { \ __save_flags(flags); \ __cli(); \ if(atomic_add_return(1, &global_irq_count) != 1 || \ - global_irq_lock) { \ + *(((unsigned char *)(&global_irq_lock)))) { \ atomic_dec(&global_irq_count); \ __restore_flags(flags); \ ret = 0; \ diff --git a/include/asm-sparc/irq.h b/include/asm-sparc/irq.h index 16c2ca5a1..daac48d56 100644 --- a/include/asm-sparc/irq.h +++ b/include/asm-sparc/irq.h @@ -1,4 +1,4 @@ -/* $Id: irq.h,v 1.17 1997/04/18 05:44:52 davem Exp $ +/* $Id: irq.h,v 1.19 1997/05/08 20:57:39 davem Exp $ * irq.h: IRQ registers on the Sparc. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -13,8 +13,17 @@ #define NR_IRQS 15 +/* Get rid of this when lockups have gone away. -DaveM */ +#ifndef DEBUG_IRQLOCK +#define DEBUG_IRQLOCK +#endif + /* IRQ handler dispatch entry and exit. */ #ifdef __SMP__ +#ifdef DEBUG_IRQLOCK +extern void irq_enter(int cpu, int irq, void *regs); +extern void irq_exit(int cpu, int irq); +#else extern __inline__ void irq_enter(int cpu, int irq) { register int proc asm("g1"); @@ -40,6 +49,7 @@ extern __inline__ void irq_exit(int cpu, int irq) : "0" (proc) : "g1", "g2", "g3", "g4", "g5", "memory", "cc"); } +#endif /* DEBUG_IRQLOCK */ #else #define irq_enter(cpu, irq) (local_irq_count[cpu]++) #define irq_exit(cpu, irq) (local_irq_count[cpu]--) diff --git a/include/asm-sparc/linux_logo.h b/include/asm-sparc/linux_logo.h index 4c323b49e..a8b8ff1b4 100644 --- a/include/asm-sparc/linux_logo.h +++ b/include/asm-sparc/linux_logo.h @@ -1043,1048 +1043,3 @@ unsigned char *linux_serial_image __initdata = "\n" "'!!!!!!!W..e$$!!!!!!` %s\n" " \"~^^~ ^~~^\n" "\n"; -/* $Id: linux_logo.h,v 1.1 1997/04/16 17:51:24 jj Exp $ - * include/asm-sparc/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) - * - * You can put anything here, but: - * LINUX_LOGO_COLORS has to be less than 224 - * image size has to be 80x80 - * values have to start from 0x20 - * (i.e. RGB(linux_logo_red[0], - * linux_logo_green[0], - * linux_logo_blue[0]) is color 0x20) - * BW image has to be 80x80 as well, with MS bit - * on the left - * Serial_console ascii image can be any size, - * but should contain %s to display the version - */ - -#include <linux/init.h> -#include <linux/version.h> - -#define linux_logo_banner "Linux/SPARC version " UTS_RELEASE - -#define LINUX_LOGO_COLORS 221 - -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 -}; - -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 -}; - -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 -}; - -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, -}; - -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, -}; - -/* Painted by Johnny Stenback <jst@uwasa.fi> */ - -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 | Sparc $9$F\n" -" '!!!!!$ !!#!`\n" -" !!!!!* .!!!!!`\n" -"'!!!!!!!W..e$$!!!!!!` %s\n" -" \"~^^~ ^~~^\n" -"\n"; diff --git a/include/asm-sparc/processor.h b/include/asm-sparc/processor.h index a6efa8c2c..6ee971dc2 100644 --- a/include/asm-sparc/processor.h +++ b/include/asm-sparc/processor.h @@ -1,4 +1,4 @@ -/* $Id: processor.h,v 1.57 1997/03/04 16:27:22 jj Exp $ +/* $Id: processor.h,v 1.59 1997/05/01 01:42:03 davem Exp $ * include/asm-sparc/processor.h * * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu) @@ -83,7 +83,7 @@ struct thread_struct { #define SPARC_FLAG_UNALIGNED 0x2 /* is allowed to do unaligned accesses */ #define INIT_MMAP { &init_mm, (0), (0), \ - __pgprot(0x0) , VM_READ | VM_WRITE | VM_EXEC } + __pgprot(0x0) , VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap } #define INIT_TSS { \ /* uwinmask, kregs, sig_address, sig_desc, ksp, kpc, kpsr, kwim */ \ @@ -144,11 +144,14 @@ extern __inline__ void start_thread(struct pt_regs * regs, unsigned long pc, #define release_thread(tsk) do { } while(0) #ifdef __KERNEL__ + /* Allocation and freeing of basic task resources. */ -extern unsigned long (*alloc_kernel_stack)(struct task_struct *tsk); -extern void (*free_kernel_stack)(unsigned long stack); extern struct task_struct *(*alloc_task_struct)(void); extern void (*free_task_struct)(struct task_struct *tsk); + +#define init_task (init_task_union.task) +#define init_stack (init_task_union.stack) + #endif /* diff --git a/include/asm-sparc/semaphore.h b/include/asm-sparc/semaphore.h index 48da860e4..eac2160e7 100644 --- a/include/asm-sparc/semaphore.h +++ b/include/asm-sparc/semaphore.h @@ -28,20 +28,18 @@ extern void __up(struct semaphore * sem); * XXX spinlock can allow this to be done without grabbing the IRQ * XXX global lock. */ -static inline int waking_non_zero(struct semaphore *sem) -{ - unsigned long flags; - int ret = 0; - - save_flags(flags); - cli(); - if (atomic_read(&sem->waking) > 0) { - atomic_dec(&sem->waking); - ret = 1; - } - restore_flags(flags); - return ret; -} +#define waking_non_zero(sem) \ +({ unsigned long flags; \ + int ret = 0; \ + save_flags(flags); \ + cli(); \ + if (atomic_read(&sem->waking) > 0) { \ + atomic_dec(&sem->waking); \ + ret = 1; \ + } \ + restore_flags(flags); \ + ret; \ +}) /* This isn't quite as clever as the x86 side, I'll be fixing this * soon enough. diff --git a/include/asm-sparc/smp.h b/include/asm-sparc/smp.h index 7d4106b03..106fa4e1b 100644 --- a/include/asm-sparc/smp.h +++ b/include/asm-sparc/smp.h @@ -85,7 +85,7 @@ 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 smp_processor_id(void) +extern __inline__ int hard_smp_processor_id(void) { int cpuid; @@ -96,6 +96,8 @@ extern __inline__ int smp_processor_id(void) return cpuid; } +#define smp_processor_id() hard_smp_processor_id() + #endif /* !(__ASSEMBLY__) */ /* Sparc specific messages. */ diff --git a/include/asm-sparc/spinlock.h b/include/asm-sparc/spinlock.h index 877b7416a..eb612dca4 100644 --- a/include/asm-sparc/spinlock.h +++ b/include/asm-sparc/spinlock.h @@ -55,6 +55,82 @@ 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 + +#ifdef SPIN_LOCK_DEBUG +struct _spinlock_debug { + unsigned char lock; + unsigned long owner_pc; +}; +typedef struct _spinlock_debug spinlock_t; + +#define SPIN_LOCK_UNLOCKED { 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((lp)->lock) + +extern void _spin_lock(spinlock_t *lock); +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) + +struct _rwlock_debug { + volatile unsigned int lock; + unsigned long owner_pc; +}; +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) + +#else /* !SPIN_LOCK_DEBUG */ + typedef unsigned char spinlock_t; #define SPIN_LOCK_UNLOCKED 0 @@ -151,7 +227,7 @@ do { \ "b,a 1b\n\t" \ ".previous\n" \ : "=r" (flags) \ - : "i" (PSR_PIL), "r" (lock) \ + : "i" (PSR_PIL), "r" (lp) \ : "g2", "memory", "cc"); \ } while(0) @@ -198,7 +274,7 @@ typedef struct { volatile unsigned int lock; } rwlock_t; * * Unfortunately this scheme limits us to ~65,000 cpus. */ -extern __inline__ void read_lock(rwlock_t *rw) +extern __inline__ void _read_lock(rwlock_t *rw) { register rwlock_t *lp asm("g1"); lp = rw; @@ -211,7 +287,14 @@ extern __inline__ void read_lock(rwlock_t *rw) : "g2", "g4", "g7", "memory", "cc"); } -extern __inline__ void read_unlock(rwlock_t *rw) +#define read_lock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _read_lock(lock); \ + __restore_flags(flags); \ +} while(0) + +extern __inline__ void _read_unlock(rwlock_t *rw) { register rwlock_t *lp asm("g1"); lp = rw; @@ -224,6 +307,13 @@ extern __inline__ void read_unlock(rwlock_t *rw) : "g2", "g4", "g7", "memory", "cc"); } +#define read_unlock(lock) \ +do { unsigned long flags; \ + __save_and_cli(flags); \ + _read_unlock(lock); \ + __restore_flags(flags); \ +} while(0) + extern __inline__ void write_lock(rwlock_t *rw) { register rwlock_t *lp asm("g1"); @@ -238,20 +328,22 @@ extern __inline__ void write_lock(rwlock_t *rw) } #define write_unlock(rw) do { (rw)->lock = 0; } while(0) -#define read_lock_irq(lock) do { __cli(); read_lock(lock); } while (0) -#define read_unlock_irq(lock) do { read_unlock(lock); __sti(); } while (0) +#define read_lock_irq(lock) do { __cli(); _read_lock(lock); } while (0) +#define read_unlock_irq(lock) do { _read_unlock(lock); __sti(); } while (0) #define write_lock_irq(lock) do { __cli(); write_lock(lock); } while (0) #define write_unlock_irq(lock) do { write_unlock(lock); __sti(); } while (0) #define read_lock_irqsave(lock, flags) \ - do { __save_and_cli(flags); read_lock(lock); } while (0) + do { __save_and_cli(flags); _read_lock(lock); } while (0) #define read_unlock_irqrestore(lock, flags) \ - do { read_unlock(lock); __restore_flags(flags); } while (0) + do { _read_unlock(lock); __restore_flags(flags); } while (0) #define write_lock_irqsave(lock, flags) \ do { __save_and_cli(flags); write_lock(lock); } while (0) #define write_unlock_irqrestore(lock, flags) \ do { write_unlock(lock); __restore_flags(flags); } while (0) +#endif /* SPIN_LOCK_DEBUG */ + #endif /* __SMP__ */ #endif /* !(__ASSEMBLY__) */ diff --git a/include/asm-sparc/string.h b/include/asm-sparc/string.h index ca5dc4003..d4ed14b26 100644 --- a/include/asm-sparc/string.h +++ b/include/asm-sparc/string.h @@ -1,4 +1,4 @@ -/* $Id: string.h,v 1.30 1997/03/03 17:11:12 jj Exp $ +/* $Id: string.h,v 1.31 1997/05/03 02:02:12 davem Exp $ * string.h: External definitions for optimized assembly string * routines for the Linux Kernel. * @@ -34,7 +34,7 @@ extern __kernel_size_t __memset(void *,int,__kernel_size_t); extern inline void *__constant_memcpy(void *to, const void *from, __kernel_size_t n) { - extern void __copy_1page(void *, const void *); + extern void (*__copy_1page)(void *, const void *); if(n <= 32) { __builtin_memcpy(to, from, n); @@ -67,7 +67,7 @@ extern inline void *__nonconstant_memcpy(void *to, const void *from, __kernel_si extern inline void *__constant_c_and_count_memset(void *s, char c, __kernel_size_t count) { - extern void *bzero_1page(void *); + extern void (*bzero_1page)(void *); extern __kernel_size_t __bzero(void *, __kernel_size_t); if(!c) { diff --git a/include/asm-sparc/system.h b/include/asm-sparc/system.h index e1d33e436..69d7cfe16 100644 --- a/include/asm-sparc/system.h +++ b/include/asm-sparc/system.h @@ -1,4 +1,4 @@ -/* $Id: system.h,v 1.58 1997/04/18 05:44:54 davem Exp $ */ +/* $Id: system.h,v 1.65 1997/05/14 20:47:59 davem Exp $ */ #ifndef __SPARC_SYSTEM_H #define __SPARC_SYSTEM_H @@ -75,6 +75,7 @@ extern void fpsave(unsigned long *fpregs, unsigned long *fsr, #define switch_to(prev, next) do { \ __label__ here; \ register unsigned long task_pc asm("o7"); \ + extern struct task_struct *current_set[NR_CPUS]; \ SWITCH_ENTER \ SWITCH_DO_LAZY_FPU \ __asm__ __volatile__( \ @@ -86,6 +87,7 @@ extern void fpsave(unsigned long *fpregs, unsigned long *fsr, if(!(next->tss.flags & SPARC_FLAG_KTHREAD) && \ !(next->flags & PF_EXITING)) \ switch_to_context(next); \ + next->mm->cpu_vm_mask |= (1 << smp_processor_id()); \ task_pc = ((unsigned long) &&here) - 0x8; \ __asm__ __volatile__( \ "rd %%psr, %%g4\n\t" \ @@ -108,7 +110,7 @@ extern void fpsave(unsigned long *fpregs, unsigned long *fsr, "nop\n\t" \ "nop\n\t" \ "jmpl %%o7 + 0x8, %%g0\n\t" \ - " nop\n\t" : : "r" (&(current_set[smp_processor_id()])), "r" (next), \ + " nop\n\t" : : "r" (&(current_set[hard_smp_processor_id()])), "r" (next), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.kpsr)), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.ksp)), \ "r" (task_pc) \ @@ -136,6 +138,7 @@ extern __inline__ void __cli(void) __asm__ __volatile__(" rd %%psr, %0 + nop; nop; nop; or %0, %1, %0 wr %0, 0x0, %%psr nop; nop; nop @@ -149,7 +152,8 @@ extern __inline__ void __sti(void) unsigned long tmp; __asm__ __volatile__(" - rd %%psr, %0 + rd %%psr, %0 + nop; nop; nop; andn %0, %1, %0 wr %0, 0x0, %%psr nop; nop; nop @@ -168,23 +172,22 @@ extern __inline__ unsigned long getipl(void) extern __inline__ unsigned long swap_pil(unsigned long __new_psr) { - unsigned long retval, tmp1, tmp2; + unsigned long retval; __asm__ __volatile__(" rd %%psr, %0 - and %0, %4, %1 - and %3, %4, %2 - xorcc %1, %2, %%g0 + nop; nop; nop; + and %0, %2, %%g1 + and %1, %2, %%g2 + xorcc %%g1, %%g2, %%g0 be 1f nop - wr %0, %4, %%psr - nop - nop - nop + wr %0, %2, %%psr + nop; nop; nop; 1: -" : "=r" (retval), "=r" (tmp1), "=r" (tmp2) +" : "=r" (retval) : "r" (__new_psr), "i" (PSR_PIL) - : "memory", "cc"); + : "g1", "g2", "memory", "cc"); return retval; } @@ -195,6 +198,7 @@ extern __inline__ unsigned long read_psr_and_cli(void) __asm__ __volatile__(" rd %%psr, %0 + nop; nop; nop; or %0, %1, %%g1 wr %%g1, 0x0, %%psr nop; nop; nop @@ -211,6 +215,28 @@ extern __inline__ unsigned long read_psr_and_cli(void) #ifdef __SMP__ +/* This goes away after lockups have been found... */ +#ifndef DEBUG_IRQLOCK +#define DEBUG_IRQLOCK +#endif + +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 void __global_restore_flags(unsigned long flags); +#define cli() __global_cli() +#define sti() __global_sti() +#define restore_flags(flags) __global_restore_flags(flags) +#else + /* Visit arch/sparc/lib/irqlock.S for all the fun details... */ #define cli() __asm__ __volatile__("mov %%o7, %%g4\n\t" \ "call ___global_cli\n\t" \ @@ -230,16 +256,6 @@ do { register unsigned long bits asm("g7"); \ "memory", "cc"); \ } while(0) -extern unsigned char global_irq_holder; - -#define save_flags(x) \ -do { int cpuid; \ - __asm__ __volatile__("rd %%tbr, %0; srl %0, 12, %0; and %0, 3, %0" \ - : "=r" (cpuid)); \ - ((x) = ((global_irq_holder == (unsigned char) cpuid) ? 1 : \ - ((getipl() & PSR_PIL) ? 2 : 0))); \ -} while(0) - #define restore_flags(flags) \ do { register unsigned long bits asm("g7"); \ bits = flags; \ @@ -252,7 +268,7 @@ do { register unsigned long bits asm("g7"); \ "memory", "cc"); \ } while(0) -#define save_and_cli(flags) do { save_flags(flags); cli(); } while(0) +#endif /* DEBUG_IRQLOCK */ #else @@ -271,6 +287,12 @@ do { register unsigned long bits asm("g7"); \ extern __inline__ unsigned long xchg_u32(__volatile__ unsigned long *m, unsigned long val) { +#ifdef __SMP__ + __asm__ __volatile__("swap [%2], %0" + : "=&r" (val) + : "0" (val), "r" (m)); + return val; +#else register unsigned long *ptr asm("g1"); register unsigned long ret asm("g2"); @@ -286,6 +308,7 @@ extern __inline__ unsigned long xchg_u32(__volatile__ unsigned long *m, unsigned : "g3", "g4", "g7", "memory", "cc"); return ret; +#endif } #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) diff --git a/include/asm-sparc/termbits.h b/include/asm-sparc/termbits.h index 7a6958340..1e4ed5e50 100644 --- a/include/asm-sparc/termbits.h +++ b/include/asm-sparc/termbits.h @@ -146,7 +146,13 @@ struct termios { #define HUPCL 0x00000400 #define CLOCAL 0x00000800 #define CBAUDEX 0x00001000 -#define B76800 0x00001001 +/* We'll never see these speeds with the Zilogs, but for completeness... */ +#define B57600 0x00001001 +#define B115200 0x00001002 +#define B230400 0x00001003 +#define B460800 0x00001004 +/* This is what we can do with the Zilogs. */ +#define B76800 0x00001005 #define CIBAUD 0x100f0000 /* input baud rate (not used) */ #define CMSPAR 0x40000000 /* mark or space (stick) parity */ #define CRTSCTS 0x80000000 /* flow control */ diff --git a/include/asm-sparc/winmacro.h b/include/asm-sparc/winmacro.h index 8ba88ec61..cb2f4e73b 100644 --- a/include/asm-sparc/winmacro.h +++ b/include/asm-sparc/winmacro.h @@ -1,4 +1,4 @@ -/* $Id: winmacro.h,v 1.18 1997/03/04 16:27:27 jj Exp $ +/* $Id: winmacro.h,v 1.19 1997/05/01 01:42:05 davem Exp $ * winmacro.h: Window loading-unloading macros. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -114,12 +114,11 @@ #ifdef __SMP__ #define LOAD_CURRENT(dest_reg, idreg) \ rd %tbr, %idreg; \ - srl %idreg, 10, %idreg; \ - and %idreg, 0xc, %idreg; \ sethi %hi(C_LABEL(current_set)), %dest_reg; \ + srl %idreg, 10, %idreg; \ or %dest_reg, %lo(C_LABEL(current_set)), %dest_reg; \ - add %dest_reg, %idreg, %idreg; \ - ld [%idreg], %dest_reg; + and %idreg, 0xc, %idreg; \ + ld [%idreg + %dest_reg], %dest_reg; #else #define LOAD_CURRENT(dest_reg, idreg) \ sethi %hi(C_LABEL(current_set)), %idreg; \ diff --git a/include/asm-sparc64/a.out.h b/include/asm-sparc64/a.out.h index 9b17dc36d..1a16d0a74 100644 --- a/include/asm-sparc64/a.out.h +++ b/include/asm-sparc64/a.out.h @@ -1,4 +1,4 @@ -/* $Id: a.out.h,v 1.3 1997/04/07 18:57:14 jj Exp $ */ +/* $Id: a.out.h,v 1.4 1997/05/04 07:21:19 davem Exp $ */ #ifndef __SPARC64_A_OUT_H__ #define __SPARC64_A_OUT_H__ @@ -95,7 +95,7 @@ struct relocation_info /* used when header.a_machtype == M_SPARC */ #ifdef __KERNEL__ -#define STACK_TOP TASK_SIZE +#define STACK_TOP (current->tss.flags & SPARC_FLAG_32BIT ? 0xf0000000 : TASK_SIZE) #endif diff --git a/include/asm-sparc64/asm_offsets.h b/include/asm-sparc64/asm_offsets.h index a232d9e80..ac7449777 100644 --- a/include/asm-sparc64/asm_offsets.h +++ b/include/asm-sparc64/asm_offsets.h @@ -30,123 +30,125 @@ #define ASIZ_task_next_run 0x00000008 #define AOFF_task_prev_run 0x000000a0 #define ASIZ_task_prev_run 0x00000008 -#define AOFF_task_saved_kernel_stack 0x000000a8 -#define ASIZ_task_saved_kernel_stack 0x00000008 -#define AOFF_task_kernel_stack_page 0x000000b0 -#define ASIZ_task_kernel_stack_page 0x00000008 -#define AOFF_task_exit_code 0x000000b8 +#define AOFF_task_exit_code 0x000000a8 #define ASIZ_task_exit_code 0x00000004 -#define AOFF_task_exit_signal 0x000000bc +#define AOFF_task_exit_signal 0x000000ac #define ASIZ_task_exit_signal 0x00000004 -#define AOFF_task_personality 0x000000c0 +#define AOFF_task_personality 0x000000b0 #define ASIZ_task_personality 0x00000008 -#define AOFF_task_pid 0x000000cc +#define AOFF_task_pid 0x000000bc #define ASIZ_task_pid 0x00000004 -#define AOFF_task_pgrp 0x000000d0 +#define AOFF_task_pgrp 0x000000c0 #define ASIZ_task_pgrp 0x00000004 -#define AOFF_task_tty_old_pgrp 0x000000d4 +#define AOFF_task_tty_old_pgrp 0x000000c4 #define ASIZ_task_tty_old_pgrp 0x00000004 -#define AOFF_task_session 0x000000d8 +#define AOFF_task_session 0x000000c8 #define ASIZ_task_session 0x00000004 -#define AOFF_task_leader 0x000000dc +#define AOFF_task_leader 0x000000cc #define ASIZ_task_leader 0x00000004 -#define AOFF_task_ngroups 0x000000e0 +#define AOFF_task_ngroups 0x000000d0 #define ASIZ_task_ngroups 0x00000004 -#define AOFF_task_groups 0x000000e4 +#define AOFF_task_groups 0x000000d4 #define ASIZ_task_groups 0x00000080 -#define AOFF_task_p_opptr 0x00000168 +#define AOFF_task_p_opptr 0x00000158 #define ASIZ_task_p_opptr 0x00000008 -#define AOFF_task_p_pptr 0x00000170 +#define AOFF_task_p_pptr 0x00000160 #define ASIZ_task_p_pptr 0x00000008 -#define AOFF_task_p_cptr 0x00000178 +#define AOFF_task_p_cptr 0x00000168 #define ASIZ_task_p_cptr 0x00000008 -#define AOFF_task_p_ysptr 0x00000180 +#define AOFF_task_p_ysptr 0x00000170 #define ASIZ_task_p_ysptr 0x00000008 -#define AOFF_task_p_osptr 0x00000188 +#define AOFF_task_p_osptr 0x00000178 #define ASIZ_task_p_osptr 0x00000008 -#define AOFF_task_wait_chldexit 0x00000190 +#define AOFF_task_pidhash_next 0x00000180 +#define ASIZ_task_pidhash_next 0x00000008 +#define AOFF_task_pidhash_pprev 0x00000188 +#define ASIZ_task_pidhash_pprev 0x00000008 +#define AOFF_task_tarray_ptr 0x00000190 +#define ASIZ_task_tarray_ptr 0x00000008 +#define AOFF_task_wait_chldexit 0x00000198 #define ASIZ_task_wait_chldexit 0x00000008 -#define AOFF_task_uid 0x00000198 +#define AOFF_task_uid 0x000001a0 #define ASIZ_task_uid 0x00000002 -#define AOFF_task_euid 0x0000019a +#define AOFF_task_euid 0x000001a2 #define ASIZ_task_euid 0x00000002 -#define AOFF_task_suid 0x0000019c +#define AOFF_task_suid 0x000001a4 #define ASIZ_task_suid 0x00000002 -#define AOFF_task_fsuid 0x0000019e +#define AOFF_task_fsuid 0x000001a6 #define ASIZ_task_fsuid 0x00000002 -#define AOFF_task_gid 0x000001a0 +#define AOFF_task_gid 0x000001a8 #define ASIZ_task_gid 0x00000002 -#define AOFF_task_egid 0x000001a2 +#define AOFF_task_egid 0x000001aa #define ASIZ_task_egid 0x00000002 -#define AOFF_task_sgid 0x000001a4 +#define AOFF_task_sgid 0x000001ac #define ASIZ_task_sgid 0x00000002 -#define AOFF_task_fsgid 0x000001a6 +#define AOFF_task_fsgid 0x000001ae #define ASIZ_task_fsgid 0x00000002 -#define AOFF_task_timeout 0x000001a8 +#define AOFF_task_timeout 0x000001b0 #define ASIZ_task_timeout 0x00000008 -#define AOFF_task_policy 0x000001b0 +#define AOFF_task_policy 0x000001b8 #define ASIZ_task_policy 0x00000008 -#define AOFF_task_rt_priority 0x000001b8 +#define AOFF_task_rt_priority 0x000001c0 #define ASIZ_task_rt_priority 0x00000008 -#define AOFF_task_it_real_value 0x000001c0 +#define AOFF_task_it_real_value 0x000001c8 #define ASIZ_task_it_real_value 0x00000008 -#define AOFF_task_it_prof_value 0x000001c8 +#define AOFF_task_it_prof_value 0x000001d0 #define ASIZ_task_it_prof_value 0x00000008 -#define AOFF_task_it_virt_value 0x000001d0 +#define AOFF_task_it_virt_value 0x000001d8 #define ASIZ_task_it_virt_value 0x00000008 -#define AOFF_task_it_real_incr 0x000001d8 +#define AOFF_task_it_real_incr 0x000001e0 #define ASIZ_task_it_real_incr 0x00000008 -#define AOFF_task_it_prof_incr 0x000001e0 +#define AOFF_task_it_prof_incr 0x000001e8 #define ASIZ_task_it_prof_incr 0x00000008 -#define AOFF_task_it_virt_incr 0x000001e8 +#define AOFF_task_it_virt_incr 0x000001f0 #define ASIZ_task_it_virt_incr 0x00000008 -#define AOFF_task_real_timer 0x000001f0 +#define AOFF_task_real_timer 0x000001f8 #define ASIZ_task_real_timer 0x00000028 -#define AOFF_task_utime 0x00000218 +#define AOFF_task_utime 0x00000220 #define ASIZ_task_utime 0x00000008 -#define AOFF_task_stime 0x00000220 +#define AOFF_task_stime 0x00000228 #define ASIZ_task_stime 0x00000008 -#define AOFF_task_cutime 0x00000228 +#define AOFF_task_cutime 0x00000230 #define ASIZ_task_cutime 0x00000008 -#define AOFF_task_cstime 0x00000230 +#define AOFF_task_cstime 0x00000238 #define ASIZ_task_cstime 0x00000008 -#define AOFF_task_start_time 0x00000238 +#define AOFF_task_start_time 0x00000240 #define ASIZ_task_start_time 0x00000008 -#define AOFF_task_min_flt 0x00000240 +#define AOFF_task_min_flt 0x00000248 #define ASIZ_task_min_flt 0x00000008 -#define AOFF_task_maj_flt 0x00000248 +#define AOFF_task_maj_flt 0x00000250 #define ASIZ_task_maj_flt 0x00000008 -#define AOFF_task_nswap 0x00000250 +#define AOFF_task_nswap 0x00000258 #define ASIZ_task_nswap 0x00000008 -#define AOFF_task_cmin_flt 0x00000258 +#define AOFF_task_cmin_flt 0x00000260 #define ASIZ_task_cmin_flt 0x00000008 -#define AOFF_task_cmaj_flt 0x00000260 +#define AOFF_task_cmaj_flt 0x00000268 #define ASIZ_task_cmaj_flt 0x00000008 -#define AOFF_task_cnswap 0x00000268 +#define AOFF_task_cnswap 0x00000270 #define ASIZ_task_cnswap 0x00000008 -#define AOFF_task_swap_address 0x00000278 +#define AOFF_task_swap_address 0x00000280 #define ASIZ_task_swap_address 0x00000008 -#define AOFF_task_old_maj_flt 0x00000280 +#define AOFF_task_old_maj_flt 0x00000288 #define ASIZ_task_old_maj_flt 0x00000008 -#define AOFF_task_dec_flt 0x00000288 +#define AOFF_task_dec_flt 0x00000290 #define ASIZ_task_dec_flt 0x00000008 -#define AOFF_task_swap_cnt 0x00000290 +#define AOFF_task_swap_cnt 0x00000298 #define ASIZ_task_swap_cnt 0x00000008 -#define AOFF_task_rlim 0x00000298 +#define AOFF_task_rlim 0x000002a0 #define ASIZ_task_rlim 0x000000a0 -#define AOFF_task_used_math 0x00000338 +#define AOFF_task_used_math 0x00000340 #define ASIZ_task_used_math 0x00000002 -#define AOFF_task_comm 0x0000033a +#define AOFF_task_comm 0x00000342 #define ASIZ_task_comm 0x00000010 -#define AOFF_task_link_count 0x0000034c +#define AOFF_task_link_count 0x00000354 #define ASIZ_task_link_count 0x00000004 -#define AOFF_task_tty 0x00000350 +#define AOFF_task_tty 0x00000358 #define ASIZ_task_tty 0x00000008 -#define AOFF_task_semundo 0x00000358 +#define AOFF_task_semundo 0x00000360 #define ASIZ_task_semundo 0x00000008 -#define AOFF_task_semsleeping 0x00000360 +#define AOFF_task_semsleeping 0x00000368 #define ASIZ_task_semsleeping 0x00000008 -#define AOFF_task_ldt 0x00000368 +#define AOFF_task_ldt 0x00000370 #define ASIZ_task_ldt 0x00000008 #define AOFF_task_tss 0x00000380 #define ASIZ_task_tss 0x00000600 @@ -158,56 +160,62 @@ #define ASIZ_task_mm 0x00000008 #define AOFF_task_sig 0x00000998 #define ASIZ_task_sig 0x00000008 -#define AOFF_task_processor 0x000009a0 +#define AOFF_task_has_cpu 0x000009a0 +#define ASIZ_task_has_cpu 0x00000004 +#define AOFF_task_processor 0x000009a4 #define ASIZ_task_processor 0x00000004 -#define AOFF_task_last_processor 0x000009a4 +#define AOFF_task_last_processor 0x000009a8 #define ASIZ_task_last_processor 0x00000004 -#define AOFF_task_lock_depth 0x000009a8 +#define AOFF_task_lock_depth 0x000009ac #define ASIZ_task_lock_depth 0x00000004 -#define AOFF_mm_count 0x00000000 -#define ASIZ_mm_count 0x00000004 -#define AOFF_mm_pgd 0x00000008 +#define AOFF_task_sigmask_lock 0x000009b0 +#define ASIZ_task_sigmask_lock 0x00000000 +#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_context 0x00000010 +#define AOFF_mm_count 0x00000018 +#define ASIZ_mm_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 0x00000018 +#define AOFF_mm_start_code 0x00000038 #define ASIZ_mm_start_code 0x00000008 -#define AOFF_mm_end_code 0x00000020 +#define AOFF_mm_end_code 0x00000040 #define ASIZ_mm_end_code 0x00000008 -#define AOFF_mm_start_data 0x00000028 +#define AOFF_mm_start_data 0x00000048 #define ASIZ_mm_start_data 0x00000008 -#define AOFF_mm_end_data 0x00000030 +#define AOFF_mm_end_data 0x00000050 #define ASIZ_mm_end_data 0x00000008 -#define AOFF_mm_start_brk 0x00000038 +#define AOFF_mm_start_brk 0x00000058 #define ASIZ_mm_start_brk 0x00000008 -#define AOFF_mm_brk 0x00000040 +#define AOFF_mm_brk 0x00000060 #define ASIZ_mm_brk 0x00000008 -#define AOFF_mm_start_stack 0x00000048 +#define AOFF_mm_start_stack 0x00000068 #define ASIZ_mm_start_stack 0x00000008 -#define AOFF_mm_start_mmap 0x00000050 +#define AOFF_mm_start_mmap 0x00000070 #define ASIZ_mm_start_mmap 0x00000008 -#define AOFF_mm_arg_start 0x00000058 +#define AOFF_mm_arg_start 0x00000078 #define ASIZ_mm_arg_start 0x00000008 -#define AOFF_mm_arg_end 0x00000060 +#define AOFF_mm_arg_end 0x00000080 #define ASIZ_mm_arg_end 0x00000008 -#define AOFF_mm_env_start 0x00000068 +#define AOFF_mm_env_start 0x00000088 #define ASIZ_mm_env_start 0x00000008 -#define AOFF_mm_env_end 0x00000070 +#define AOFF_mm_env_end 0x00000090 #define ASIZ_mm_env_end 0x00000008 -#define AOFF_mm_rss 0x00000078 +#define AOFF_mm_rss 0x00000098 #define ASIZ_mm_rss 0x00000008 -#define AOFF_mm_total_vm 0x00000080 +#define AOFF_mm_total_vm 0x000000a0 #define ASIZ_mm_total_vm 0x00000008 -#define AOFF_mm_locked_vm 0x00000088 +#define AOFF_mm_locked_vm 0x000000a8 #define ASIZ_mm_locked_vm 0x00000008 -#define AOFF_mm_def_flags 0x00000090 +#define AOFF_mm_def_flags 0x000000b0 #define ASIZ_mm_def_flags 0x00000008 -#define AOFF_mm_mmap 0x00000098 -#define ASIZ_mm_mmap 0x00000008 -#define AOFF_mm_mmap_avl 0x000000a0 -#define ASIZ_mm_mmap_avl 0x00000008 -#define AOFF_mm_mmap_sem 0x000000a8 -#define ASIZ_mm_mmap_sem 0x00000010 +#define AOFF_mm_cpu_vm_mask 0x000000b8 +#define ASIZ_mm_cpu_vm_mask 0x00000008 #define AOFF_thread_float_regs 0x00000000 #define ASIZ_thread_float_regs 0x00000100 #define AOFF_thread_fsr 0x00000100 diff --git a/include/asm-sparc64/bitops.h b/include/asm-sparc64/bitops.h index 39a16948d..8e7a9a472 100644 --- a/include/asm-sparc64/bitops.h +++ b/include/asm-sparc64/bitops.h @@ -1,4 +1,4 @@ -/* $Id: bitops.h,v 1.11 1997/04/10 23:32:42 davem Exp $ +/* $Id: bitops.h,v 1.12 1997/05/14 20:48:04 davem Exp $ * bitops.h: Bit string operations on the V9. * * Copyright 1996 David S. Miller (davem@caip.rutgers.edu) @@ -19,7 +19,7 @@ * all bit-ops return 0 if bit was previously clear and != 0 otherwise. */ -extern __inline__ unsigned long set_bit(unsigned long nr, void *addr) +extern __inline__ unsigned long test_and_set_bit(unsigned long nr, void *addr) { unsigned long oldbit; unsigned long temp0, temp1; @@ -42,7 +42,12 @@ extern __inline__ unsigned long set_bit(unsigned long nr, void *addr) return oldbit != 0; } -extern __inline__ unsigned long clear_bit(unsigned long nr, void *addr) +extern __inline__ void set_bit(unsigned long nr, void *addr) +{ + (void) test_and_set_bit(nr, addr); +} + +extern __inline__ unsigned long test_and_clear_bit(unsigned long nr, void *addr) { unsigned long oldbit; unsigned long temp0, temp1; @@ -65,7 +70,12 @@ extern __inline__ unsigned long clear_bit(unsigned long nr, void *addr) return oldbit != 0; } -extern __inline__ unsigned long change_bit(unsigned long nr, void *addr) +extern __inline__ void clear_bit(unsigned long nr, void *addr) +{ + (void) test_and_clear_bit(nr, addr); +} + +extern __inline__ unsigned long test_and_change_bit(unsigned long nr, void *addr) { unsigned long oldbit; unsigned long temp0, temp1; @@ -86,6 +96,11 @@ extern __inline__ unsigned long change_bit(unsigned long nr, void *addr) return oldbit != 0; } +extern __inline__ void change_bit(unsigned long nr, void *addr) +{ + (void) test_and_change_bit(nr, addr); +} + extern __inline__ unsigned long test_bit(int nr, __const__ void *addr) { return 1UL & (((__const__ int *) addr)[nr >> 5] >> (nr & 31)); @@ -266,8 +281,8 @@ found_middle: #define ext2_find_next_zero_bit find_next_zero_le_bit /* Bitmap functions for the minix filesystem. */ -#define minix_set_bit(nr,addr) set_bit(nr,addr) -#define minix_clear_bit(nr,addr) clear_bit(nr,addr) +#define minix_set_bit(nr,addr) test_and_set_bit(nr,addr) +#define minix_clear_bit(nr,addr) test_and_clear_bit(nr,addr) #define minix_test_bit(nr,addr) test_bit(nr,addr) #define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size) diff --git a/include/asm-sparc64/checksum.h b/include/asm-sparc64/checksum.h index 543e5a627..63dbfec3d 100644 --- a/include/asm-sparc64/checksum.h +++ b/include/asm-sparc64/checksum.h @@ -1,4 +1,4 @@ -/* $Id: checksum.h,v 1.6 1997/04/10 23:32:43 davem Exp $ */ +/* $Id: checksum.h,v 1.7 1997/05/14 07:02:44 davem Exp $ */ #ifndef __SPARC64_CHECKSUM_H #define __SPARC64_CHECKSUM_H @@ -54,6 +54,7 @@ csum_partial_copy_nocheck (const char *src, char *dst, int len, __asm__ __volatile__ (" call __csum_partial_copy_sparc_generic mov %4, %%g7 + srl %%o0, 0, %%o0 " : "=r" (ret) : "0" (ret), "r" (d), "r" (l), "r" (sum) : "o1", "o2", "o3", "o4", "o5", "o7", "g1", "g2", "g3", "g5", "g7"); return (unsigned int)ret; @@ -81,6 +82,7 @@ csum_partial_copy_from_user(const char *src, char *dst, int len, 1: call __csum_partial_copy_sparc_generic stx %5, [%%sp + 0x7ff + 128] + srl %%o0, 0, %%o0 " : "=r" (ret) : "0" (ret), "r" (d), "r" (l), "r" (s), "r" (err) : "o1", "o2", "o3", "o4", "o5", "o7", "g1", "g2", "g3", "g5", "g7"); return (unsigned int)ret; @@ -108,6 +110,7 @@ csum_partial_copy_to_user(const char *src, char *dst, int len, 1: call __csum_partial_copy_sparc_generic stx %5, [%%sp + 0x7ff + 128] + srl %%o0, 0, %%o0 " : "=r" (ret) : "0" (ret), "r" (d), "r" (l), "r" (s), "r" (err) : "o1", "o2", "o3", "o4", "o5", "o7", "g1", "g2", "g3", "g5", "g7"); return (unsigned int)ret; @@ -151,6 +154,7 @@ extern __inline__ unsigned short ip_fast_csum(__const__ unsigned char *iph, srl %%g2, 16, %0 addc %0, %%g0, %0 xnor %%g0, %0, %0 + srl %0, 0, %0 " : "=r" (sum), "=&r" (iph) : "r" (ihl), "1" (iph) : "g2", "g3", "g7", "cc"); @@ -179,11 +183,11 @@ extern __inline__ unsigned short csum_tcpudp_magic(unsigned long saddr, " : "=r" (sum), "=r" (saddr) : "r" (daddr), "r" ((proto<<16)+len), "0" (sum), "1" (saddr) : "cc"); - return sum; + return (sum & 0xffff); } /* Fold a partial checksum without adding pseudo headers. */ -extern __inline__ unsigned int csum_fold(unsigned int sum) +extern __inline__ unsigned short csum_fold(unsigned int sum) { unsigned int tmp; @@ -195,7 +199,7 @@ extern __inline__ unsigned int csum_fold(unsigned int sum) " : "=&r" (sum), "=r" (tmp) : "0" (sum), "1" (sum<<16) : "cc"); - return sum; + return (sum & 0xffff); } #define _HAVE_ARCH_IPV6_CSUM diff --git a/include/asm-sparc64/current.h b/include/asm-sparc64/current.h index 8cdfc6109..80652fb35 100644 --- a/include/asm-sparc64/current.h +++ b/include/asm-sparc64/current.h @@ -1,12 +1,6 @@ #ifndef _SPARC64_CURRENT_H #define _SPARC64_CURRENT_H -/* Some architectures may want to do something "clever" here since - * this is the most frequently accessed piece of data in the entire - * kernel. - */ -extern struct task_struct *current_set[NR_CPUS]; - /* Sparc rules... */ register struct task_struct *current asm("g6"); diff --git a/include/asm-sparc64/elf.h b/include/asm-sparc64/elf.h index d5e29751c..9a43b6c3f 100644 --- a/include/asm-sparc64/elf.h +++ b/include/asm-sparc64/elf.h @@ -1,4 +1,4 @@ -/* $Id: elf.h,v 1.3 1997/04/04 00:50:12 davem Exp $ */ +/* $Id: elf.h,v 1.6 1997/05/17 11:51:27 davem Exp $ */ #ifndef __ASM_SPARC64_ELF_H #define __ASM_SPARC64_ELF_H @@ -7,6 +7,7 @@ */ #include <asm/ptrace.h> +#include <asm/processor.h> typedef unsigned long elf_greg_t; @@ -16,21 +17,24 @@ typedef elf_greg_t elf_gregset_t[ELF_NGREG]; typedef unsigned long elf_fpregset_t; /* - * This is used to ensure we don't load something for the wrong architecture. - */ -#define elf_check_arch(x) ((x) == EM_SPARC) - -/* * These are used to set parameters in the core dumps. */ #ifndef ELF_ARCH -#define ELF_ARCH EM_SPARC64 -#define ELF_CLASS ELFCLASS64 -#define ELF_DATA ELFDATA2MSB; +#define ELF_ARCH EM_SPARC64 +#define ELF_CLASS ELFCLASS64 +#define ELF_DATA ELFDATA2MSB; #endif -#define USE_ELF_CORE_DUMP -#define ELF_EXEC_PAGESIZE 4096 +#ifndef ELF_FLAGS_INIT +#define ELF_FLAGS_INIT current->tss.flags &= ~SPARC_FLAG_32BIT +#endif +/* + * This is used to ensure we don't load something for the wrong architecture. + */ +#define elf_check_arch(x) ((x) == ELF_ARCH) /* Might be EM_SPARC64 or EM_SPARC */ + +#define USE_ELF_CORE_DUMP +#define ELF_EXEC_PAGESIZE 8192 #endif /* !(__ASM_SPARC64_ELF_H) */ diff --git a/include/asm-sparc64/fs_mount.h b/include/asm-sparc64/fs_mount.h new file mode 100644 index 000000000..3ad7ad698 --- /dev/null +++ b/include/asm-sparc64/fs_mount.h @@ -0,0 +1,44 @@ +/* $Id: fs_mount.h,v 1.2 1997/04/18 14:34:46 jj Exp $ + * fs_mount.h: Definitions for mount structure conversions. + * + * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) + */ + +#ifndef __ASM_FS_MOUNT_H +#define __ASM_FS_MOUNT_H + +#if defined(CONFIG_SPARC32_COMPAT) || defined(CONFIG_SPARC32_COMPAT_MODULE) + +#include <linux/sched.h> + +/* We need this to convert 32bit mount structures to 64bit */ + +extern void *do_ncp_super_data_conv(void *raw_data); +extern void *do_smb_super_data_conv(void *raw_data); + +extern __inline__ void *ncp_super_data_conv(void *raw_data) +{ + if (current->tss.flags & SPARC_FLAG_32BIT) + return do_ncp_super_data_conv(raw_data); + else + return raw_data; +} + +extern __inline__ void *smb_super_data_conv(void *raw_data) +{ + if (current->tss.flags & SPARC_FLAG_32BIT) + return do_smb_super_data_conv(raw_data); + else + return raw_data; +} + +#else /* CONFIG_SPARC32_COMPAT* */ + +#define ncp_super_data_conv(__x) __x +#define smb_super_data_conv(__x) __x + +#endif /* CONFIG_SPARC32_COMPAT* */ + +#define nfs_super_data_conv(__x) __x + +#endif /* __ASM_FS_MOUNT_H */ diff --git a/include/asm-sparc64/head.h b/include/asm-sparc64/head.h index 60ed4ca66..e3d03bf0f 100644 --- a/include/asm-sparc64/head.h +++ b/include/asm-sparc64/head.h @@ -1,4 +1,4 @@ -/* $Id: head.h,v 1.16 1997/04/08 11:03:13 davem Exp $ */ +/* $Id: head.h,v 1.19 1997/05/18 08:42:18 davem Exp $ */ #ifndef _SPARC64_HEAD_H #define _SPARC64_HEAD_H @@ -113,7 +113,7 @@ #define INDIRECT_SOLARIS_SYSCALL(tlvl) TRAP_ARG(indirect_syscall, tlvl) #define TRAP_IRQ(routine, level) \ - rdpr %pil, %g4; \ + rdpr %pil, %g2; \ wrpr %g0, 15, %pil; \ ba,pt %xcc, etrap_irq; \ rd %pc, %g7; \ @@ -147,6 +147,9 @@ flushw; \ done; nop; nop; nop; nop; nop; nop; +/* Before touching these macros, you owe it to yourself to go and + * see how arch/sparc64/kernel/winfixup.S works... -DaveM + */ /* Normal kernel spill */ #define SPILL_0_NORMAL \ @@ -189,23 +192,25 @@ 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; nop; nop; nop; nop; \ + b,a,pt %xcc, spill_fixup; /* Normal 32bit spill */ #define SPILL_2_GENERIC(xxx) \ wr %g0, xxx, %asi; \ srl %sp, 0, %sp; \ stda %l0, [%sp + 0x00] %asi; \ - stda %l2, [%sp + 0x10] %asi; \ - stda %l4, [%sp + 0x20] %asi; \ - stda %l6, [%sp + 0x30] %asi; \ - stda %i0, [%sp + 0x40] %asi; \ - stda %i2, [%sp + 0x50] %asi; \ - stda %i4, [%sp + 0x60] %asi; \ - stda %i6, [%sp + 0x70] %asi; \ + stda %l2, [%sp + 0x08] %asi; \ + stda %l4, [%sp + 0x10] %asi; \ + stda %l6, [%sp + 0x18] %asi; \ + stda %i0, [%sp + 0x20] %asi; \ + stda %i2, [%sp + 0x28] %asi; \ + stda %i4, [%sp + 0x30] %asi; \ + stda %i6, [%sp + 0x38] %asi; \ saved; retry; nop; nop; nop; nop; \ nop; nop; nop; nop; nop; nop; nop; nop; \ - nop; nop; nop; nop; nop; nop; nop; nop; + nop; nop; nop; nop; nop; nop; nop; \ + b,a,pt %xcc, spill_fixup; #define SPILL_1_NORMAL SPILL_1_GENERIC(ASI_AIUP) #define SPILL_2_NORMAL SPILL_2_GENERIC(ASI_AIUP) @@ -265,23 +270,25 @@ 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; nop; nop; nop; nop; \ + b,a,pt %xcc, fill_fixup; /* Normal 32bit fill */ #define FILL_2_GENERIC(xxx) \ wr %g0, xxx, %asi; \ srl %sp, 0, %sp; \ ldda [%sp + 0x00] %asi, %l0; \ - ldda [%sp + 0x10] %asi, %l2; \ - ldda [%sp + 0x20] %asi, %l4; \ - ldda [%sp + 0x30] %asi, %l6; \ - ldda [%sp + 0x40] %asi, %i0; \ - ldda [%sp + 0x50] %asi, %i2; \ - ldda [%sp + 0x60] %asi, %i4; \ - ldda [%sp + 0x70] %asi, %i6; \ + ldda [%sp + 0x08] %asi, %l2; \ + ldda [%sp + 0x10] %asi, %l4; \ + ldda [%sp + 0x18] %asi, %l6; \ + ldda [%sp + 0x20] %asi, %i0; \ + ldda [%sp + 0x28] %asi, %i2; \ + ldda [%sp + 0x30] %asi, %i4; \ + ldda [%sp + 0x38] %asi, %i6; \ restored; retry; nop; nop; nop; nop; \ nop; nop; nop; nop; nop; nop; nop; nop; \ - nop; nop; nop; nop; nop; nop; nop; nop; + nop; nop; nop; nop; nop; nop; nop; \ + b,a,pt %xcc, fill_fixup; #define FILL_1_NORMAL FILL_1_GENERIC(ASI_AIUP) #define FILL_2_NORMAL FILL_2_GENERIC(ASI_AIUP) diff --git a/include/asm-sparc64/linux_logo.h b/include/asm-sparc64/linux_logo.h index 7787fb059..35254c6a3 100644 --- a/include/asm-sparc64/linux_logo.h +++ b/include/asm-sparc64/linux_logo.h @@ -1040,1045 +1040,3 @@ unsigned char *linux_serial_image __initdata = "\n" "'!!!!!!!W..e$$!!!!!!` %s\n" " \"~^^~ ^~~^\n" "\n"; -/* $Id: linux_logo.h,v 1.1 1997/04/16 17:51:37 jj Exp $ - * include/asm-sparc64/linux_logo.h: This is a linux logo - * to be displayed on boot. - * - * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu) - * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) - * - * You can put anything here, but: - * LINUX_LOGO_COLORS has to be less than 224 - * image size has to be 80x80 - * values have to start from 0x20 - * (i.e. RGB(linux_logo_red[0], - * linux_logo_green[0], - * linux_logo_blue[0]) is color 0x20) - * BW image has to be 80x80 as well, with MS bit - * on the left - * Serial_console ascii image can be any size, - * but should contain %s to display the version - */ - -#include <linux/init.h> -#include <linux/version.h> - -#define linux_logo_banner "Linux/UltraSPARC version " UTS_RELEASE - -#define LINUX_LOGO_COLORS 215 - -unsigned char linux_logo_red[] __initdata = { - 0x99, 0x95, 0x92, 0x8E, 0x8A, 0x86, 0x02, 0x00, - 0xA5, 0xA9, 0xA2, 0x9E, 0xAD, 0x1B, 0x3B, 0x25, - 0x71, 0x65, 0x2C, 0x82, 0x5B, 0x33, 0x13, 0xB0, - 0x0C, 0xB1, 0xD4, 0xCE, 0x04, 0x06, 0x16, 0xB6, - 0xCD, 0xB2, 0x42, 0x46, 0x4B, 0xA8, 0xF3, 0xCA, - 0xC5, 0x1C, 0xDC, 0xA0, 0xD4, 0xE6, 0xED, 0xF3, - 0xC2, 0x8E, 0xCC, 0xA5, 0x7E, 0x52, 0xF7, 0xE3, - 0x56, 0x79, 0x68, 0x8D, 0xAF, 0xFC, 0x8E, 0x3E, - 0x6B, 0x11, 0x37, 0x79, 0x5C, 0x3C, 0x3F, 0x3C, - 0x48, 0x47, 0x3D, 0xB9, 0x62, 0xE1, 0x4D, 0x57, - 0x84, 0x78, 0xA6, 0x58, 0x99, 0xCD, 0xB7, 0xE3, - 0x6D, 0x5A, 0xAF, 0x79, 0x79, 0xF2, 0x42, 0x46, - 0xDD, 0x89, 0xC3, 0xF2, 0xF0, 0xE0, 0xD1, 0x90, - 0x76, 0x6B, 0x4A, 0xBE, 0xBD, 0xE3, 0xF6, 0xE9, - 0xEC, 0xE8, 0xEC, 0xC0, 0x66, 0x63, 0xCB, 0xAB, - 0x49, 0x5C, 0xAD, 0xD6, 0xEE, 0xF5, 0xF5, 0xE9, - 0x6E, 0x00, 0x69, 0x6A, 0xA1, 0x7A, 0xB4, 0xDE, - 0xF1, 0xF6, 0xDD, 0x00, 0x73, 0xDB, 0x4C, 0x53, - 0x6A, 0xF5, 0xF5, 0xD6, 0xC3, 0x6A, 0x4B, 0x4B, - 0x60, 0xF8, 0x9B, 0xD7, 0xD7, 0x71, 0xB3, 0xA4, - 0xCA, 0xAB, 0xB4, 0xB2, 0x76, 0xBA, 0x8B, 0xA0, - 0xA5, 0xEE, 0xE7, 0x67, 0x5F, 0x08, 0x94, 0xDB, - 0xE5, 0x4F, 0x00, 0x34, 0xEE, 0xEC, 0xE2, 0x48, - 0xF3, 0xEB, 0xF4, 0xF4, 0xEF, 0xD6, 0xB6, 0xE6, - 0xE6, 0xED, 0xE7, 0xE6, 0x3D, 0xE7, 0xCD, 0x44, - 0xEF, 0xEC, 0xF5, 0x66, 0xF3, 0xA9, 0x77, 0x58, - 0x75, 0x6C, 0x53, 0x24, 0xAC, 0x0D, 0x3C -}; - -unsigned char linux_logo_green[] __initdata = { - 0x99, 0x95, 0x92, 0x8E, 0x8A, 0x86, 0x02, 0x00, - 0xA5, 0xA9, 0xA2, 0x9E, 0xAD, 0x1B, 0x3B, 0x25, - 0x71, 0x65, 0x2C, 0x82, 0x5B, 0x33, 0x13, 0xAD, - 0x0C, 0xB1, 0x92, 0xAB, 0x03, 0x06, 0x16, 0xB6, - 0xCD, 0x88, 0x42, 0x46, 0x4B, 0x94, 0xBB, 0xCA, - 0xC5, 0x1C, 0xAB, 0xA0, 0xD4, 0xE6, 0xED, 0xF3, - 0xC2, 0x73, 0xCA, 0x91, 0x7E, 0x52, 0xF7, 0xE3, - 0x56, 0x5A, 0x49, 0x56, 0x6E, 0xFC, 0x6B, 0x3E, - 0x6B, 0x0D, 0x37, 0x79, 0x51, 0x44, 0x3F, 0x43, - 0x38, 0x3D, 0x48, 0xB9, 0x62, 0xA5, 0x47, 0x48, - 0x49, 0x4A, 0x97, 0x48, 0x81, 0x95, 0x8E, 0xE3, - 0x6D, 0x57, 0x51, 0x51, 0x47, 0xB2, 0x42, 0x46, - 0xDD, 0x5B, 0x87, 0xBE, 0xC7, 0xC8, 0x56, 0x75, - 0x5D, 0x4B, 0x4D, 0xBE, 0x85, 0xA6, 0xBC, 0xC7, - 0xCA, 0xCD, 0xCC, 0xA4, 0x53, 0x4D, 0x9F, 0x55, - 0x52, 0x5E, 0x75, 0x9C, 0xB6, 0xC3, 0xD7, 0xCC, - 0x55, 0x00, 0x6A, 0x59, 0x7D, 0x55, 0x7C, 0xA3, - 0xB7, 0xBF, 0xA5, 0x00, 0x67, 0xC6, 0x47, 0x54, - 0x46, 0xB8, 0xBE, 0xB2, 0x87, 0x52, 0x4B, 0x43, - 0x41, 0xF8, 0x69, 0x96, 0x9B, 0x66, 0xB0, 0x6C, - 0x8E, 0x81, 0xB4, 0x76, 0x76, 0xB9, 0x65, 0x77, - 0x6D, 0xED, 0xE7, 0x67, 0x5F, 0x06, 0x54, 0x6C, - 0xCB, 0x4F, 0x00, 0x2F, 0xC2, 0xB5, 0xB6, 0x30, - 0xC3, 0xAE, 0xC4, 0xCA, 0xC6, 0xB4, 0x7B, 0xAD, - 0xAD, 0xB6, 0xB6, 0xAD, 0x29, 0xAB, 0x93, 0x2E, - 0xBC, 0xBC, 0xC9, 0x53, 0xBF, 0x77, 0x54, 0x3B, - 0x4B, 0x3F, 0x39, 0x19, 0x76, 0x08, 0x2C -}; - -unsigned char linux_logo_blue[] __initdata = { - 0x99, 0x95, 0x92, 0x8E, 0x8A, 0x86, 0xD6, 0x00, - 0xA5, 0xA9, 0xA2, 0x9E, 0xAD, 0x1B, 0x39, 0x25, - 0x71, 0x65, 0x2C, 0x82, 0x5B, 0x33, 0x13, 0xA7, - 0x0C, 0xB1, 0x58, 0x8A, 0x03, 0x07, 0x16, 0xB6, - 0xCD, 0x5A, 0x42, 0x46, 0x4F, 0x6F, 0x77, 0xCA, - 0xC5, 0x1C, 0x6F, 0xA5, 0xD4, 0xE6, 0xF5, 0xF3, - 0xC2, 0x4D, 0xD1, 0x64, 0x7E, 0x52, 0xF7, 0xE3, - 0x56, 0x49, 0x3C, 0x47, 0x45, 0xFE, 0x3B, 0x41, - 0x6B, 0x09, 0x37, 0x79, 0x39, 0x39, 0x3F, 0x42, - 0x3A, 0x42, 0x5F, 0xB9, 0x62, 0x4C, 0x39, 0x44, - 0x3B, 0x3A, 0xA0, 0x3D, 0x08, 0x08, 0x09, 0xDE, - 0x6D, 0x48, 0x3B, 0x3F, 0x42, 0xF3, 0x36, 0x3C, - 0xDD, 0x06, 0x16, 0x08, 0x13, 0x0A, 0x4B, 0x71, - 0x5D, 0x44, 0x47, 0xBE, 0x08, 0x0C, 0x0D, 0x0C, - 0x19, 0x29, 0x36, 0x06, 0x43, 0x44, 0xBA, 0x45, - 0x50, 0x58, 0x07, 0x07, 0x0D, 0x0E, 0x10, 0x50, - 0x06, 0x42, 0x40, 0x44, 0x79, 0x06, 0x06, 0x0C, - 0x08, 0x08, 0x07, 0x36, 0x4C, 0xE5, 0x42, 0x55, - 0x03, 0x0F, 0x12, 0x06, 0x07, 0x3C, 0x4B, 0x3D, - 0x01, 0xF8, 0x08, 0x0E, 0x0A, 0x69, 0xAC, 0x0C, - 0x0A, 0x27, 0xBB, 0x36, 0x76, 0xC0, 0x04, 0x08, - 0x08, 0xED, 0xEE, 0x68, 0x5F, 0xB2, 0x3B, 0x52, - 0xAC, 0x4F, 0x6F, 0x2D, 0x16, 0x08, 0x59, 0x04, - 0x13, 0x0E, 0x14, 0x17, 0x16, 0x2E, 0x08, 0x0D, - 0x11, 0x14, 0x0D, 0x06, 0x04, 0x08, 0x25, 0x8E, - 0x0E, 0x14, 0x25, 0x9B, 0x1C, 0x16, 0x78, 0x06, - 0x04, 0x03, 0x79, 0x8C, 0x0B, 0xC8, 0x48 -}; - -unsigned char linux_logo[] __initdata = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x21, 0x21, 0x22, 0x23, 0x24, 0x24, - 0x25, 0x24, 0x24, 0x25, 0x25, 0x25, 0x25, 0x25, - 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x23, 0x23, - 0x23, 0x22, 0x22, 0x22, 0x22, 0x21, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x26, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x26, 0x28, - 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, - 0x29, 0x28, 0x28, 0x28, 0x2A, 0x2A, 0x2B, 0x2B, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x2B, 0x2B, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, - 0x29, 0x29, 0x29, 0x2C, 0x29, 0x29, 0x29, 0x28, - 0x28, 0x2A, 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, 0x2A, 0x2A, - 0x2A, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x2D, 0x2E, 0x2F, 0x27, - 0x27, 0x26, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, - 0x28, 0x29, 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x29, - 0x29, 0x29, 0x28, 0x28, 0x2A, 0x2B, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x2F, 0x30, 0x31, 0x32, - 0x27, 0x27, 0x22, 0x22, 0x22, 0x22, 0x21, 0x20, - 0x20, 0x20, 0x2B, 0x2A, 0x28, 0x29, 0x29, 0x29, - 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x28, 0x2A, 0x2B, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x32, 0x33, 0x34, 0x35, - 0x36, 0x27, 0x27, 0x33, 0x25, 0x25, 0x24, 0x24, - 0x24, 0x24, 0x23, 0x21, 0x20, 0x20, 0x2B, 0x2A, - 0x28, 0x29, 0x29, 0x37, 0x2C, 0x2C, 0x29, 0x28, - 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, - 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2A, 0x2B, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x2F, 0x32, 0x36, 0x27, - 0x27, 0x27, 0x27, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x25, 0x25, 0x24, 0x23, 0x21, - 0x20, 0x2B, 0x2A, 0x29, 0x29, 0x2C, 0x2C, 0x2C, - 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, - 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x20, 0x21, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x38, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x23, 0x23, 0x24, 0x24, - 0x25, 0x25, 0x33, 0x33, 0x33, 0x33, 0x33, 0x25, - 0x24, 0x22, 0x20, 0x20, 0x2A, 0x28, 0x29, 0x2C, - 0x2C, 0x2C, 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2B, - 0x2B, 0x2B, 0x2B, 0x20, 0x21, 0x22, 0x23, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x2A, 0x2A, 0x2B, 0x2B, - 0x20, 0x21, 0x22, 0x24, 0x20, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x3A, 0x3B, 0x22, 0x20, 0x2A, 0x28, - 0x29, 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x2B, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, - 0x2B, 0x20, 0x21, 0x22, 0x22, 0x23, 0x24, 0x27, - 0x27, 0x27, 0x3C, 0x36, 0x3C, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x3D, 0x3E, 0x32, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x3D, 0x39, 0x3F, 0x3F, - 0x39, 0x2C, 0x20, 0x20, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x40, 0x40, 0x41, 0x22, 0x20, - 0x2A, 0x28, 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x2A, - 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2B, 0x20, 0x20, - 0x21, 0x22, 0x22, 0x22, 0x23, 0x23, 0x22, 0x27, - 0x27, 0x3C, 0x3C, 0x3D, 0x42, 0x3C, 0x27, 0x27, - 0x3C, 0x27, 0x3C, 0x43, 0x44, 0x36, 0x42, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x3D, 0x28, 0x29, 0x2C, - 0x2C, 0x45, 0x20, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x46, 0x40, 0x47, 0x40, 0x47, 0x3A, 0x40, - 0x22, 0x20, 0x2A, 0x29, 0x2C, 0x2C, 0x2C, 0x29, - 0x28, 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x2B, 0x2B, 0x2B, 0x2B, 0x20, 0x20, 0x22, - 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x20, 0x27, - 0x27, 0x44, 0x28, 0x24, 0x27, 0x2F, 0x3C, 0x27, - 0x27, 0x38, 0x24, 0x2C, 0x2C, 0x48, 0x49, 0x36, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x29, 0x29, - 0x4A, 0x20, 0x3A, 0x40, 0x47, 0x40, 0x47, 0x40, - 0x40, 0x47, 0x40, 0x40, 0x39, 0x39, 0x39, 0x4A, - 0x25, 0x24, 0x22, 0x2B, 0x28, 0x29, 0x2C, 0x2C, - 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, - 0x22, 0x22, 0x22, 0x21, 0x20, 0x2B, 0x2A, 0x27, - 0x3D, 0x4B, 0x48, 0x4C, 0x2B, 0x3C, 0x27, 0x3C, - 0x3C, 0x23, 0x4D, 0x4E, 0x4F, 0x50, 0x33, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x39, 0x3F, 0x39, - 0x51, 0x20, 0x39, 0x39, 0x47, 0x40, 0x4D, 0x4D, - 0x40, 0x52, 0x4D, 0x40, 0x47, 0x40, 0x39, 0x39, - 0x53, 0x54, 0x25, 0x24, 0x20, 0x2A, 0x29, 0x2C, - 0x2C, 0x2C, 0x29, 0x2A, 0x2B, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, - 0x22, 0x21, 0x20, 0x2B, 0x28, 0x2A, 0x20, 0x27, - 0x36, 0x4F, 0x55, 0x48, 0x56, 0x3D, 0x3C, 0x3C, - 0x32, 0x57, 0x56, 0x58, 0x49, 0x56, 0x56, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x22, 0x20, 0x20, - 0x41, 0x39, 0x39, 0x3A, 0x59, 0x5A, 0x59, 0x5B, - 0x5C, 0x3A, 0x4D, 0x5D, 0x57, 0x39, 0x39, 0x4A, - 0x5E, 0x33, 0x54, 0x33, 0x24, 0x22, 0x2B, 0x28, - 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x2B, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x21, 0x21, 0x21, 0x22, 0x22, 0x21, - 0x20, 0x2B, 0x2A, 0x2A, 0x20, 0x22, 0x22, 0x27, - 0x5F, 0x2D, 0x3C, 0x60, 0x56, 0x54, 0x61, 0x49, - 0x35, 0x56, 0x34, 0x27, 0x62, 0x27, 0x56, 0x39, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x63, 0x54, - 0x40, 0x64, 0x65, 0x66, 0x67, 0x67, 0x68, 0x5F, - 0x2E, 0x69, 0x6A, 0x67, 0x5F, 0x3A, 0x39, 0x2C, - 0x53, 0x23, 0x25, 0x54, 0x33, 0x25, 0x23, 0x20, - 0x2A, 0x29, 0x2C, 0x2C, 0x29, 0x28, 0x2B, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, - 0x2B, 0x2A, 0x20, 0x22, 0x22, 0x21, 0x2B, 0x27, - 0x62, 0x36, 0x27, 0x33, 0x6B, 0x54, 0x3D, 0x3C, - 0x49, 0x57, 0x27, 0x27, 0x27, 0x27, 0x56, 0x57, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x6C, 0x31, 0x6D, - 0x64, 0x51, 0x6E, 0x2E, 0x2E, 0x6F, 0x5A, 0x70, - 0x70, 0x71, 0x72, 0x67, 0x67, 0x69, 0x73, 0x46, - 0x4A, 0x2A, 0x21, 0x25, 0x33, 0x54, 0x33, 0x24, - 0x20, 0x2A, 0x29, 0x2C, 0x2C, 0x29, 0x28, 0x2B, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x2B, - 0x2B, 0x22, 0x22, 0x22, 0x2B, 0x28, 0x2A, 0x27, - 0x27, 0x39, 0x3C, 0x3D, 0x45, 0x74, 0x75, 0x76, - 0x76, 0x45, 0x27, 0x27, 0x27, 0x27, 0x56, 0x77, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x78, 0x78, 0x5E, - 0x79, 0x7A, 0x7B, 0x6E, 0x5A, 0x5A, 0x70, 0x7C, - 0x70, 0x5B, 0x7D, 0x5A, 0x66, 0x7E, 0x7F, 0x79, - 0x48, 0x6B, 0x2C, 0x20, 0x24, 0x33, 0x54, 0x33, - 0x24, 0x21, 0x2A, 0x29, 0x2C, 0x2C, 0x29, 0x28, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x21, 0x21, 0x20, 0x20, 0x2B, 0x2B, 0x21, - 0x22, 0x22, 0x20, 0x28, 0x2B, 0x20, 0x22, 0x27, - 0x27, 0x80, 0x27, 0x81, 0x82, 0x83, 0x84, 0x85, - 0x74, 0x85, 0x84, 0x27, 0x3C, 0x4F, 0x4F, 0x66, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x22, 0x23, 0x5E, - 0x64, 0x86, 0x79, 0x73, 0x87, 0x88, 0x7C, 0x5A, - 0x5A, 0x71, 0x7D, 0x71, 0x89, 0x79, 0x8A, 0x8A, - 0x51, 0x8B, 0x48, 0x39, 0x2A, 0x22, 0x33, 0x54, - 0x33, 0x25, 0x22, 0x2B, 0x29, 0x2C, 0x2C, 0x29, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x21, 0x20, 0x20, 0x2B, 0x2B, 0x22, 0x23, - 0x21, 0x2A, 0x2A, 0x20, 0x21, 0x23, 0x25, 0x27, - 0x27, 0x55, 0x8C, 0x8D, 0x8E, 0x83, 0x8F, 0x90, - 0x91, 0x92, 0x92, 0x85, 0x85, 0x93, 0x51, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x2A, 0x29, 0x51, - 0x79, 0x79, 0x94, 0x89, 0x89, 0x89, 0x5A, 0x95, - 0x64, 0x88, 0x96, 0x97, 0x7A, 0x73, 0x98, 0x98, - 0x99, 0x50, 0x50, 0x48, 0x6B, 0x28, 0x21, 0x25, - 0x54, 0x54, 0x25, 0x22, 0x2B, 0x29, 0x2C, 0x29, - 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x2B, 0x20, 0x22, 0x22, 0x20, - 0x2B, 0x2B, 0x20, 0x22, 0x24, 0x25, 0x33, 0x27, - 0x27, 0x9A, 0x9B, 0x9C, 0x9D, 0x83, 0x9E, 0x85, - 0x9F, 0x92, 0x85, 0x85, 0x85, 0x85, 0x92, 0xA0, - 0x27, 0x27, 0x27, 0x27, 0x27, 0xA1, 0x47, 0xA2, - 0xA2, 0x94, 0xA3, 0x94, 0x95, 0x95, 0x73, 0x73, - 0x95, 0x87, 0xA4, 0x5B, 0x97, 0x7B, 0x88, 0x98, - 0xA2, 0x50, 0x48, 0x48, 0x48, 0x8B, 0x29, 0x20, - 0x25, 0x54, 0x54, 0x25, 0x22, 0x2B, 0x29, 0x29, - 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x2B, 0x2B, - 0x20, 0x21, 0x23, 0x24, 0x25, 0x25, 0x33, 0x27, - 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x8F, 0x90, 0x90, - 0x9F, 0x90, 0x85, 0x90, 0x85, 0x74, 0xAA, 0x81, - 0x27, 0x27, 0x27, 0x27, 0x27, 0xAB, 0x40, 0xAC, - 0x79, 0xA3, 0x89, 0xAD, 0x95, 0x6F, 0xAE, 0xAE, - 0xAE, 0x5B, 0x59, 0x88, 0x7B, 0x89, 0x79, 0xAF, - 0xA2, 0x6B, 0x48, 0x48, 0x48, 0x48, 0x50, 0x2C, - 0x20, 0x24, 0x33, 0x54, 0x25, 0x22, 0x2A, 0x2A, - 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x21, 0x23, 0x22, 0x2B, 0x20, 0x20, - 0x22, 0x23, 0x24, 0x25, 0x24, 0x24, 0x22, 0x27, - 0xB0, 0x8C, 0xAA, 0xB1, 0xB2, 0x84, 0x85, 0x9F, - 0x85, 0x85, 0x85, 0xB3, 0xB4, 0xAA, 0xAA, 0xA0, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x2A, 0xB5, - 0xA3, 0xA3, 0xAC, 0x5D, 0xB6, 0xAE, 0xB7, 0x69, - 0x73, 0x5B, 0x88, 0x89, 0x95, 0x73, 0x99, 0x99, - 0x59, 0x2A, 0x39, 0x48, 0x48, 0x50, 0x48, 0x50, - 0x2C, 0x20, 0x24, 0x33, 0x54, 0x25, 0x21, 0x20, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x23, 0x21, 0x2B, 0x20, 0x20, 0x22, - 0x22, 0x24, 0x24, 0x23, 0x22, 0x20, 0x2A, 0x27, - 0x27, 0xB0, 0x8C, 0xA9, 0xB2, 0x9E, 0x91, 0x85, - 0x85, 0x93, 0xB8, 0x75, 0xAA, 0xA7, 0x8C, 0x27, - 0x27, 0x27, 0x33, 0x3C, 0x27, 0x27, 0x2C, 0x7B, - 0x55, 0x79, 0xA3, 0x5D, 0xB9, 0x43, 0x7F, 0x7E, - 0x5F, 0x5A, 0x5A, 0x95, 0x64, 0x73, 0x58, 0x64, - 0x5C, 0x25, 0x2B, 0x3F, 0x48, 0x48, 0x8B, 0x48, - 0x48, 0x2C, 0x20, 0x25, 0x54, 0x33, 0x24, 0x22, - 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x23, 0x21, 0x20, 0x20, 0x20, 0x21, 0x22, - 0x24, 0x23, 0x22, 0x21, 0x2B, 0x20, 0x54, 0x27, - 0x27, 0x8B, 0x81, 0xA5, 0x93, 0x93, 0x74, 0xA5, - 0xBA, 0x75, 0xBB, 0xBC, 0xB4, 0x6D, 0x50, 0x6B, - 0x27, 0x27, 0x30, 0x33, 0x49, 0x27, 0x27, 0x5E, - 0x6F, 0x73, 0x94, 0xBD, 0x4E, 0x5D, 0x7F, 0x7F, - 0xB7, 0x68, 0x73, 0x6E, 0xB7, 0x7F, 0x95, 0x97, - 0x47, 0x63, 0x25, 0x20, 0x3F, 0x48, 0x8B, 0x8B, - 0x48, 0x48, 0x2C, 0x20, 0x25, 0x54, 0x33, 0x25, - 0x2B, 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x21, 0x21, - 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x24, 0x24, - 0x22, 0x21, 0x20, 0x2A, 0x33, 0x30, 0x30, 0x27, - 0x27, 0x50, 0xBE, 0xBF, 0x9A, 0xB3, 0x9B, 0xBB, - 0xBB, 0xC0, 0x8C, 0xC1, 0x8B, 0xC2, 0x47, 0x8B, - 0x27, 0x27, 0x38, 0x63, 0x63, 0x27, 0x27, 0xC3, - 0xB5, 0x95, 0x72, 0x95, 0x6F, 0x69, 0x7E, 0x66, - 0x7E, 0x7F, 0x6E, 0x7E, 0x95, 0x95, 0x73, 0x70, - 0x30, 0x30, 0x30, 0x33, 0x20, 0x3F, 0x48, 0x8B, - 0x6B, 0x48, 0x50, 0x29, 0x21, 0x33, 0x54, 0x33, - 0x2A, 0x2B, 0x2B, 0x20, 0x20, 0x21, 0x21, 0x23, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x24, 0x24, 0x22, - 0x20, 0x2B, 0x21, 0xC4, 0x30, 0x60, 0x30, 0x27, - 0x27, 0xC5, 0x8B, 0x39, 0xC6, 0xC7, 0xA6, 0xA6, - 0xC8, 0x9A, 0x3B, 0x39, 0x50, 0x56, 0x56, 0x4F, - 0x33, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x48, - 0x59, 0x94, 0x73, 0xAE, 0xB7, 0xB7, 0x7E, 0x7E, - 0x7E, 0x7E, 0x7E, 0x5A, 0x70, 0x7C, 0x71, 0xC3, - 0x63, 0x30, 0x60, 0x78, 0x54, 0x20, 0x6B, 0x48, - 0x6B, 0x6B, 0x50, 0x50, 0x29, 0x22, 0x33, 0x33, - 0x2A, 0x2B, 0x20, 0x20, 0x21, 0x22, 0x22, 0x22, - 0x21, 0x20, 0x20, 0x20, 0x24, 0x24, 0x20, 0x20, - 0x2B, 0x24, 0x30, 0x60, 0x60, 0x30, 0xAB, 0x27, - 0x27, 0x40, 0x4C, 0x50, 0x39, 0x87, 0xC3, 0x53, - 0x37, 0x48, 0x37, 0x48, 0xC9, 0x56, 0xB9, 0x56, - 0xCA, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x3C, - 0x51, 0x5A, 0x6E, 0xB7, 0xB7, 0x7E, 0x7E, 0x7E, - 0x7E, 0x7E, 0x7F, 0xB7, 0x5A, 0x7C, 0x5B, 0x37, - 0x23, 0x63, 0x31, 0x6C, 0xCB, 0x63, 0x20, 0x6B, - 0x50, 0x3F, 0x39, 0x50, 0x8B, 0x28, 0x24, 0x24, - 0x2B, 0x2B, 0x20, 0x21, 0x22, 0x22, 0x22, 0x21, - 0x20, 0x20, 0x20, 0x23, 0x23, 0x20, 0x20, 0x2B, - 0x33, 0x78, 0xCB, 0x60, 0x30, 0x22, 0x3D, 0x27, - 0x2F, 0x56, 0x4E, 0x8B, 0x6B, 0x39, 0x48, 0x8B, - 0x6B, 0x8B, 0x80, 0xC9, 0xB9, 0xB9, 0x56, 0xB9, - 0x56, 0x34, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x48, 0xB5, 0xB7, 0xB7, 0x7E, 0x7E, 0x2E, 0x7E, - 0x7E, 0x7E, 0x7F, 0x7C, 0x65, 0x71, 0x3A, 0x48, - 0x2C, 0x24, 0x30, 0x6C, 0x34, 0x6C, 0xC4, 0x20, - 0x8B, 0x50, 0x39, 0x39, 0x48, 0x6B, 0x2B, 0x22, - 0x2B, 0x20, 0x21, 0x22, 0x23, 0x23, 0x22, 0x21, - 0x20, 0x2B, 0x23, 0x22, 0x20, 0x2B, 0x2B, 0x54, - 0x60, 0x31, 0xCB, 0x54, 0x20, 0x3D, 0x36, 0x27, - 0x4E, 0xB9, 0x56, 0x56, 0x8B, 0x6B, 0x50, 0x6B, - 0x40, 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, - 0x56, 0x56, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x7B, 0x6E, 0xB7, 0xB7, 0xB7, 0x7E, 0x7F, - 0xB7, 0xB7, 0x7F, 0x7E, 0x6F, 0x5B, 0x29, 0x2C, - 0x48, 0x39, 0x24, 0x60, 0x58, 0xAF, 0xCC, 0x63, - 0x20, 0x8B, 0x8B, 0x39, 0x39, 0x48, 0x3F, 0x28, - 0x20, 0x20, 0x22, 0x23, 0x23, 0x23, 0x22, 0x20, - 0x2B, 0x22, 0x22, 0x2B, 0x2B, 0x20, 0x54, 0xCB, - 0x31, 0xCB, 0x25, 0x20, 0x27, 0x27, 0x27, 0x48, - 0xB9, 0x56, 0xB9, 0x56, 0x4F, 0x48, 0x47, 0x57, - 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0x56, 0x62, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x48, 0x6F, 0x69, 0xB7, 0xB7, 0xB7, 0x7F, - 0xB7, 0xB7, 0xB7, 0x73, 0x59, 0x50, 0x29, 0x2B, - 0x28, 0x8B, 0x39, 0x25, 0x31, 0x55, 0xB6, 0x34, - 0x63, 0x2B, 0x48, 0x6B, 0x2C, 0x39, 0x47, 0x6B, - 0x22, 0x22, 0x23, 0x24, 0x23, 0x22, 0x20, 0x2B, - 0x20, 0x22, 0x2A, 0x2B, 0x20, 0x33, 0xCB, 0x31, - 0x78, 0x24, 0x21, 0xCD, 0x27, 0x27, 0x27, 0x56, - 0x56, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0x56, 0xB9, - 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0x56, 0xC9, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x41, 0x64, 0xB7, 0xB7, 0xB7, 0x7F, - 0x68, 0xB7, 0xAE, 0xA3, 0x23, 0x39, 0x8B, 0x2A, - 0x20, 0x20, 0x39, 0x6B, 0x25, 0xCC, 0x43, 0x43, - 0x34, 0x63, 0x2A, 0x48, 0x3F, 0x39, 0x6B, 0x6B, - 0x24, 0x23, 0x24, 0x24, 0x23, 0x21, 0x2B, 0x2B, - 0x22, 0x2B, 0x2B, 0x20, 0x24, 0x78, 0x31, 0x30, - 0x23, 0x21, 0x21, 0x27, 0x27, 0x27, 0x80, 0x56, - 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, - 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, - 0x56, 0xB9, 0x56, 0x3C, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xCE, 0x8A, 0xAE, 0x6F, 0xB7, - 0x6F, 0x89, 0x71, 0x78, 0x63, 0x23, 0x39, 0x6B, - 0x2B, 0x20, 0x20, 0x2C, 0x6B, 0x25, 0x34, 0x42, - 0x42, 0x34, 0x54, 0x29, 0x48, 0x3F, 0x39, 0x3F, - 0x25, 0x24, 0x25, 0x24, 0x22, 0x20, 0x2A, 0x21, - 0x2B, 0x2A, 0x20, 0x22, 0x30, 0x60, 0x30, 0x22, - 0x21, 0x22, 0x27, 0x27, 0x27, 0x2D, 0x4C, 0x56, - 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0xB9, 0x56, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0x56, 0x2E, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x40, 0x97, 0x95, 0x5A, 0x71, - 0x7C, 0xCE, 0x40, 0x60, 0x31, 0x30, 0x23, 0x3F, - 0x3F, 0x20, 0x20, 0x20, 0x29, 0x8B, 0x33, 0x58, - 0x66, 0x43, 0xCC, 0x25, 0x39, 0x50, 0x6B, 0x2C, - 0x33, 0x25, 0x25, 0x23, 0x20, 0x2A, 0x2B, 0x20, - 0x2A, 0x2B, 0x22, 0x54, 0x30, 0x30, 0x24, 0x22, - 0x21, 0x27, 0x27, 0x27, 0x27, 0xAF, 0x29, 0x4E, - 0x4F, 0xB9, 0x56, 0xB9, 0x4D, 0x4D, 0x77, 0xC9, - 0xB9, 0xB9, 0xB9, 0x56, 0xC9, 0x4D, 0x4D, 0x80, - 0x4C, 0x40, 0xC9, 0x4D, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0xCF, 0x97, 0x97, 0xCE, - 0x86, 0xD0, 0x54, 0x6C, 0x58, 0x34, 0x60, 0x23, - 0x6B, 0x39, 0x20, 0x20, 0x20, 0x28, 0x6B, 0x54, - 0xD1, 0x66, 0xB6, 0x60, 0x22, 0x6B, 0x8B, 0x2C, - 0x54, 0x33, 0x24, 0x22, 0x2B, 0x28, 0x20, 0x28, - 0x2B, 0x20, 0x25, 0xC4, 0x30, 0x25, 0x22, 0x21, - 0x26, 0x27, 0x27, 0x27, 0x27, 0x20, 0x4B, 0x52, - 0x80, 0x4F, 0xB9, 0x56, 0xB9, 0x80, 0x56, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0x4D, 0x80, 0x50, 0x48, - 0x50, 0x50, 0x50, 0x56, 0x3D, 0x27, 0x36, 0x27, - 0x27, 0x27, 0x27, 0x3C, 0x46, 0xC3, 0x86, 0x86, - 0xD0, 0x39, 0x24, 0x6C, 0xD1, 0x43, 0x43, 0x6C, - 0x24, 0x6B, 0x2C, 0x20, 0x20, 0x20, 0x29, 0x39, - 0x63, 0xD1, 0x42, 0x55, 0xC4, 0x2B, 0x8B, 0x39, - 0x54, 0x25, 0x24, 0x20, 0x2A, 0x2A, 0x28, 0x28, - 0x20, 0x22, 0x54, 0x63, 0x25, 0x24, 0x22, 0x22, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x77, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0xC9, 0x56, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x4F, - 0x77, 0x47, 0x8B, 0x40, 0x56, 0x27, 0x27, 0x49, - 0x2D, 0x27, 0x27, 0x27, 0x39, 0x40, 0x39, 0x39, - 0x28, 0x3F, 0x39, 0x33, 0x58, 0x66, 0x35, 0x2E, - 0x58, 0x24, 0x8B, 0x29, 0x20, 0x20, 0x20, 0x39, - 0x29, 0x30, 0x55, 0xB6, 0xCC, 0x25, 0x29, 0x39, - 0x54, 0x25, 0x22, 0x2B, 0x29, 0x2A, 0x29, 0x2B, - 0x22, 0x24, 0x54, 0x33, 0x25, 0x22, 0x2B, 0x54, - 0x27, 0x27, 0x62, 0x27, 0x30, 0x80, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x4D, 0x8B, 0x77, 0x36, 0x27, 0x27, - 0x3C, 0x2F, 0x27, 0x27, 0x39, 0x39, 0x39, 0x47, - 0x20, 0x2B, 0x2C, 0x39, 0x33, 0xB6, 0x35, 0x35, - 0x35, 0xAF, 0x24, 0x48, 0x2A, 0x20, 0x20, 0x20, - 0x8B, 0x2B, 0x78, 0xAF, 0x58, 0x30, 0x21, 0x28, - 0x33, 0x25, 0x21, 0x28, 0x29, 0x29, 0x28, 0x20, - 0x24, 0x33, 0x54, 0x33, 0x23, 0x20, 0x24, 0xD2, - 0x27, 0x49, 0x27, 0x27, 0x56, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0xC9, 0x50, 0x56, 0x27, 0x27, - 0x3D, 0x38, 0x3D, 0x27, 0x27, 0x47, 0x39, 0x39, - 0x28, 0x20, 0x20, 0x2A, 0x39, 0x54, 0x43, 0x35, - 0x35, 0x35, 0xAF, 0x23, 0x48, 0x2B, 0x20, 0x20, - 0x2B, 0x48, 0x22, 0x60, 0x34, 0xCB, 0x25, 0x21, - 0x33, 0x24, 0x2B, 0x29, 0x29, 0x29, 0x2B, 0x22, - 0x25, 0x54, 0x54, 0x25, 0x22, 0x2B, 0x33, 0x27, - 0x27, 0x32, 0x27, 0x30, 0x56, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x56, 0xC9, 0x4C, 0x36, 0x3C, - 0x62, 0x2F, 0x2E, 0x27, 0x27, 0x54, 0x47, 0x47, - 0x8B, 0x2B, 0x20, 0x20, 0x20, 0x3F, 0x54, 0x2E, - 0x35, 0x35, 0x35, 0x34, 0x21, 0x8B, 0x2A, 0x20, - 0x20, 0x2C, 0x6B, 0x25, 0x60, 0x60, 0x54, 0x23, - 0x25, 0x22, 0x2A, 0x2C, 0x29, 0x28, 0x20, 0x24, - 0x54, 0x63, 0x54, 0x24, 0x2B, 0x22, 0x24, 0x27, - 0x36, 0x27, 0x27, 0x56, 0x56, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0x4C, 0x36, - 0x66, 0xD3, 0x27, 0x2F, 0x27, 0x54, 0x54, 0x27, - 0x26, 0x6B, 0x20, 0x20, 0x20, 0x20, 0x6B, 0x63, - 0x35, 0x35, 0x35, 0x62, 0xCB, 0x2A, 0x3F, 0x28, - 0x2B, 0x2A, 0x50, 0x29, 0x33, 0x30, 0x54, 0x25, - 0x24, 0x20, 0x29, 0x2C, 0x2C, 0x2A, 0x21, 0x33, - 0xC4, 0xC4, 0x33, 0x21, 0x29, 0x22, 0x27, 0x27, - 0x99, 0x27, 0x31, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0x3D, - 0x3D, 0x3C, 0x3C, 0x55, 0x54, 0x54, 0x54, 0x20, - 0x27, 0x2C, 0x39, 0x20, 0x20, 0x20, 0x20, 0x48, - 0x30, 0x62, 0x35, 0x35, 0x42, 0x54, 0x39, 0x39, - 0x2C, 0x28, 0x3F, 0x8B, 0x20, 0x33, 0x54, 0x24, - 0x22, 0x2B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x54, - 0x30, 0xC4, 0x25, 0x2B, 0x28, 0x2B, 0x27, 0x3D, - 0x27, 0x27, 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x56, 0x4F, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0x27, - 0x20, 0x20, 0x20, 0x54, 0x54, 0x54, 0x54, 0x20, - 0x20, 0x2D, 0x2D, 0x29, 0x20, 0x20, 0x20, 0x20, - 0x48, 0x60, 0x66, 0x35, 0x62, 0x34, 0x22, 0x2C, - 0x2C, 0x3F, 0x6B, 0x48, 0x2C, 0x22, 0x23, 0x23, - 0x20, 0x2A, 0x2C, 0x29, 0x29, 0x20, 0x25, 0xC4, - 0x30, 0x54, 0x22, 0x29, 0x28, 0xD2, 0x27, 0x35, - 0x27, 0x49, 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x4F, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0x40, 0x20, - 0x20, 0x54, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, - 0x2D, 0x2D, 0x2D, 0x49, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x6B, 0x6C, 0x42, 0x2E, 0xB6, 0x54, 0x28, - 0x29, 0x2C, 0x6B, 0x48, 0x3F, 0x2A, 0x20, 0x22, - 0x2B, 0x28, 0x2C, 0x28, 0x29, 0x20, 0x33, 0x30, - 0x30, 0x54, 0x20, 0x2C, 0x29, 0x27, 0x27, 0x3D, - 0x27, 0x40, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x4D, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x56, 0x63, 0x56, 0x54, 0x54, - 0x54, 0x54, 0x20, 0xD3, 0x45, 0x51, 0x51, 0x49, - 0x7C, 0x2D, 0x2D, 0x49, 0x49, 0x20, 0x20, 0x20, - 0x20, 0x2A, 0x2A, 0xCC, 0xB6, 0x8A, 0x60, 0x22, - 0x28, 0x29, 0x3F, 0x6B, 0x39, 0x29, 0x2B, 0x20, - 0x28, 0x2C, 0x28, 0x2A, 0x2A, 0x24, 0xC4, 0x30, - 0xC4, 0x33, 0x2B, 0x39, 0xCD, 0x27, 0x3C, 0x27, - 0x27, 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x4D, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x63, 0x63, 0x49, 0x2D, 0x20, - 0x20, 0x2D, 0xD3, 0x49, 0x66, 0x2D, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x8B, 0x2B, 0x20, - 0x20, 0x20, 0x39, 0x23, 0x6C, 0xAF, 0xCB, 0x23, - 0x28, 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x20, - 0x29, 0x39, 0x2B, 0x2B, 0x2B, 0x25, 0x78, 0xC4, - 0x63, 0x23, 0x29, 0x39, 0x27, 0x27, 0x3D, 0x27, - 0x27, 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x80, 0x4F, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x2D, 0x49, 0x2D, 0x49, - 0x49, 0x2D, 0x49, 0x2D, 0x49, 0x2D, 0x2D, 0x2D, - 0x49, 0x49, 0x35, 0x49, 0x2D, 0x2D, 0x39, 0x28, - 0x20, 0x20, 0x2A, 0x28, 0x33, 0x60, 0xC4, 0x22, - 0x2C, 0x2A, 0x2A, 0x22, 0x23, 0x22, 0x20, 0x21, - 0x2C, 0x29, 0x20, 0x2B, 0x2B, 0x54, 0x30, 0xC4, - 0x63, 0x22, 0x2C, 0x27, 0x27, 0x27, 0x3D, 0x27, - 0x27, 0x56, 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x2D, 0x49, 0x2D, 0x49, - 0x61, 0x49, 0x2D, 0x49, 0x49, 0x2D, 0x2D, 0x49, - 0x49, 0x49, 0x2F, 0x49, 0x2D, 0x78, 0x29, 0x28, - 0x2C, 0x2A, 0x2B, 0x39, 0x2B, 0x25, 0x33, 0x20, - 0x2C, 0x20, 0x2A, 0x24, 0x54, 0x54, 0x23, 0x23, - 0x2C, 0x2A, 0x22, 0x2B, 0x20, 0x63, 0x30, 0x63, - 0xC4, 0x21, 0x39, 0x27, 0x27, 0x27, 0x35, 0x36, - 0x27, 0x56, 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x2D, 0x49, 0x49, 0x49, - 0x49, 0x27, 0x27, 0x2D, 0x38, 0x27, 0x36, 0x36, - 0x49, 0x27, 0x49, 0x2D, 0x2D, 0x44, 0x24, 0x2B, - 0x20, 0x2C, 0x3F, 0x6B, 0x2A, 0x20, 0x21, 0x28, - 0x2C, 0x20, 0x2B, 0x24, 0x30, 0xCB, 0x63, 0x54, - 0x28, 0x20, 0x24, 0x2B, 0x23, 0x78, 0xC4, 0x63, - 0x63, 0x2B, 0x3F, 0x27, 0x27, 0x27, 0x38, 0x33, - 0x3D, 0xB9, 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x63, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x3D, 0x3D, 0x27, 0x27, 0x27, 0x2D, - 0x49, 0x49, 0x49, 0x2D, 0x62, 0x5F, 0xC4, 0x20, - 0x22, 0x2A, 0x6B, 0x8B, 0x2C, 0x2B, 0x2A, 0x3F, - 0x3F, 0x2A, 0x21, 0x21, 0xCB, 0x58, 0x6C, 0x60, - 0x20, 0x23, 0x24, 0x2A, 0x25, 0x78, 0x63, 0x63, - 0x54, 0x2A, 0x28, 0x27, 0x27, 0x27, 0x27, 0x62, - 0x3C, 0xB9, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x49, 0x2D, 0x2D, - 0x2D, 0x3D, 0x2F, 0x3C, 0x2D, 0x3C, 0x27, 0x38, - 0x2D, 0x49, 0x2D, 0x2D, 0xD1, 0x43, 0x30, 0x20, - 0x24, 0x21, 0x21, 0x21, 0x2B, 0x2A, 0x29, 0x8B, - 0x6B, 0x29, 0x2B, 0x2A, 0x30, 0x55, 0x55, 0x34, - 0x22, 0x23, 0x24, 0x29, 0x54, 0x30, 0x63, 0x63, - 0x25, 0x29, 0x22, 0x3C, 0xA5, 0xD4, 0xD5, 0x27, - 0x31, 0x56, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x80, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x2D, 0x2E, - 0x3E, 0x27, 0x27, 0x27, 0x27, 0x27, 0x36, 0x44, - 0x3C, 0x27, 0x2D, 0xC4, 0x78, 0xCC, 0x54, 0x2B, - 0x25, 0x24, 0x63, 0x60, 0x63, 0x24, 0x2A, 0x6B, - 0x3F, 0x39, 0x28, 0x21, 0x33, 0xB6, 0x44, 0x58, - 0x22, 0x23, 0x24, 0x2A, 0x30, 0x30, 0x63, 0x63, - 0x24, 0x39, 0x22, 0xBB, 0x9C, 0xB2, 0x9D, 0xA8, - 0x27, 0x8B, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0xB9, - 0x56, 0xB9, 0x56, 0x80, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0xD6, 0xD6, 0xD7, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x32, - 0x3D, 0x27, 0x39, 0x33, 0xC4, 0xC4, 0x22, 0x28, - 0x25, 0x54, 0x30, 0xD1, 0xD1, 0x60, 0x23, 0x6B, - 0x3F, 0x39, 0x2C, 0x2B, 0x20, 0x58, 0x8A, 0x58, - 0x22, 0x23, 0x23, 0x2B, 0x78, 0x30, 0xC4, 0xC4, - 0x23, 0x29, 0xBB, 0xBB, 0xD8, 0xB2, 0x9D, 0xA9, - 0xA9, 0x3C, 0x60, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, - 0x56, 0xB9, 0x56, 0x80, 0xB9, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0xB9, 0x56, 0xD9, 0x85, 0x85, 0x85, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x2D, - 0xA0, 0x83, 0x2C, 0x21, 0x30, 0x33, 0x29, 0x29, - 0x21, 0x33, 0x54, 0x42, 0x66, 0x55, 0xC4, 0x29, - 0x8B, 0x2C, 0x39, 0x28, 0x29, 0x31, 0x44, 0x58, - 0x23, 0x23, 0x21, 0x20, 0x30, 0xC4, 0xC4, 0x30, - 0x21, 0x20, 0xBB, 0xBC, 0xDA, 0xDB, 0xDC, 0xB2, - 0x83, 0xB4, 0x3C, 0x2F, 0xB9, 0x56, 0x56, 0xB9, - 0x56, 0xB9, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x56, 0xA7, 0xD4, 0x85, 0x82, - 0x3C, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x61, - 0x9E, 0x90, 0xDD, 0x21, 0x33, 0x25, 0x2C, 0x39, - 0x2A, 0x24, 0x24, 0x42, 0x62, 0x43, 0x34, 0x22, - 0x50, 0x39, 0x2C, 0x2C, 0x2A, 0x54, 0xD1, 0x58, - 0x22, 0x22, 0x2B, 0x22, 0x30, 0xC4, 0x30, 0x60, - 0x20, 0xDE, 0xBB, 0xD9, 0x84, 0x84, 0xDF, 0xA9, - 0xDB, 0xDB, 0x61, 0x27, 0x38, 0x4D, 0x56, 0x56, - 0x56, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x56, 0x56, 0x8D, 0xD9, 0xD5, 0xA6, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xBB, - 0x85, 0xDB, 0xDD, 0x21, 0x22, 0x22, 0x3F, 0x39, - 0x2C, 0x2B, 0x25, 0x34, 0x62, 0x66, 0xD1, 0xC4, - 0x6B, 0x39, 0x2C, 0x39, 0x29, 0x21, 0x58, 0xCC, - 0x22, 0x21, 0x29, 0x23, 0x30, 0x30, 0x30, 0x5E, - 0x82, 0xBB, 0xE0, 0xB1, 0xE1, 0x9C, 0xD4, 0xDC, - 0x9D, 0xA9, 0xE2, 0x27, 0x27, 0x27, 0x4D, 0x56, - 0x56, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x4C, 0x48, 0xA8, 0xA8, 0xE3, 0x8C, - 0xC6, 0x3C, 0x27, 0x27, 0x27, 0xE4, 0xA6, 0xE5, - 0x83, 0xA9, 0xE6, 0xAF, 0x54, 0x2B, 0x8B, 0x39, - 0x39, 0x29, 0x20, 0x54, 0x42, 0x42, 0xB6, 0xCC, - 0x2A, 0x29, 0x39, 0x39, 0x2C, 0x2C, 0xCC, 0xCC, - 0x22, 0x20, 0x39, 0xE7, 0xC0, 0xD9, 0xA7, 0xBC, - 0x8D, 0xAA, 0x9C, 0xE8, 0x9C, 0x9D, 0xD4, 0xD4, - 0xD8, 0xA9, 0x84, 0xC7, 0x27, 0x27, 0x27, 0x2A, - 0x56, 0x56, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0x56, 0x56, 0x48, 0x50, 0xAA, 0xE3, 0xE3, 0xC0, - 0xA6, 0x9A, 0xBA, 0xC8, 0x9A, 0xDE, 0x9B, 0xD5, - 0xE8, 0xD8, 0xD5, 0x2E, 0x58, 0x33, 0x6B, 0x39, - 0x2C, 0x39, 0x29, 0x28, 0xD1, 0x43, 0xB6, 0xAF, - 0x23, 0x28, 0x2C, 0x39, 0x39, 0x8B, 0x30, 0x31, - 0x21, 0x20, 0x3F, 0xBB, 0xDF, 0xDF, 0xD5, 0xA8, - 0xD5, 0x9C, 0x8E, 0xB2, 0x9D, 0xE9, 0xD4, 0xD8, - 0x90, 0xB2, 0xA9, 0x8F, 0x27, 0x27, 0x27, 0x27, - 0x2F, 0x56, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0x56, 0xB9, 0x48, 0x48, 0x75, 0xE3, 0xAA, 0xAA, - 0xC0, 0xB4, 0xB4, 0xB4, 0x75, 0x9B, 0xD9, 0x83, - 0x9D, 0x90, 0xDF, 0xDD, 0x8A, 0x31, 0x4B, 0x2C, - 0x2C, 0x29, 0x2C, 0x3F, 0x6C, 0x55, 0xD1, 0x55, - 0x54, 0x29, 0x28, 0x39, 0x39, 0x6B, 0x24, 0x60, - 0x20, 0x2B, 0x3F, 0xA7, 0xB1, 0x9D, 0xA9, 0x8E, - 0xE5, 0xE5, 0xDF, 0xE0, 0xA9, 0x9D, 0xDF, 0xDF, - 0xEA, 0x9D, 0xB2, 0x84, 0xAA, 0x27, 0x27, 0x27, - 0x27, 0x35, 0x56, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0xB9, 0x48, 0x48, 0xA6, 0x9B, 0xE3, 0xAA, - 0xAA, 0x9B, 0x9B, 0x9B, 0xAA, 0xE3, 0xD5, 0xD4, - 0x9D, 0xA9, 0xA9, 0x9D, 0xEB, 0xAF, 0x23, 0x28, - 0x2C, 0x29, 0x28, 0x39, 0x54, 0xCC, 0xAF, 0x55, - 0x30, 0x29, 0x2B, 0x2C, 0x39, 0x39, 0x2B, 0xC4, - 0x2B, 0x29, 0x39, 0xA7, 0x8E, 0x9D, 0x83, 0xE5, - 0xB1, 0xDB, 0xDC, 0xE0, 0xDC, 0x84, 0xE9, 0x84, - 0x83, 0xD4, 0xEC, 0x83, 0x8F, 0xE4, 0x27, 0x27, - 0x27, 0x27, 0x56, 0x56, 0x56, 0x56, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0xB9, 0x56, 0x40, 0x50, 0x9A, 0x75, 0xE3, 0xE3, - 0xE3, 0xD9, 0x8D, 0xAA, 0xD9, 0xA8, 0xB2, 0xDC, - 0xB2, 0x8D, 0x84, 0xEA, 0xB1, 0xEB, 0x54, 0x29, - 0x28, 0x2C, 0x2A, 0x28, 0x2B, 0x78, 0xCC, 0x58, - 0xCB, 0x20, 0x20, 0x29, 0x39, 0x39, 0x2C, 0x25, - 0x29, 0x2C, 0x39, 0xBB, 0xD9, 0xD9, 0x9D, 0x9D, - 0xB2, 0xB1, 0xD4, 0xDB, 0xB1, 0x9D, 0xD4, 0xEA, - 0xB1, 0x8D, 0xD8, 0x8E, 0x8F, 0xAA, 0x27, 0x27, - 0x27, 0x3D, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, - 0x56, 0x56, 0x47, 0xE4, 0xA6, 0x75, 0xAA, 0xA8, - 0x9C, 0x9C, 0xE1, 0x9C, 0x9C, 0x8E, 0xD8, 0x9D, - 0xA9, 0xDB, 0xA9, 0xDC, 0xD8, 0xDA, 0xD4, 0x2B, - 0x20, 0x2C, 0x28, 0x2A, 0x28, 0x63, 0x31, 0x58, - 0xCB, 0x24, 0x20, 0x2B, 0x2C, 0x39, 0x6B, 0x21, - 0x39, 0x6B, 0x2C, 0xC0, 0xE0, 0xB1, 0xB2, 0x9D, - 0x8E, 0xD8, 0xE0, 0xD9, 0x84, 0xDB, 0xD8, 0xB1, - 0x8E, 0xB2, 0xE2, 0x9C, 0x83, 0x9E, 0xBC, 0x3D, - 0xD3, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0xB9, - 0x56, 0x4F, 0x27, 0x61, 0xA6, 0x9B, 0xE3, 0xA9, - 0xE9, 0xD4, 0xDA, 0xDB, 0x8E, 0xE1, 0xE9, 0x8E, - 0xD4, 0xA8, 0xE0, 0x84, 0xE8, 0xB1, 0xDC, 0x9D, - 0x20, 0x29, 0x29, 0x2B, 0x2C, 0x54, 0x78, 0xCC, - 0x78, 0x33, 0x2A, 0x20, 0x29, 0x39, 0x50, 0x2A, - 0x6B, 0x8B, 0x39, 0xC0, 0x8D, 0xB1, 0xE9, 0xA9, - 0xB2, 0xDC, 0x8E, 0xDC, 0xE1, 0xDA, 0xA9, 0x8E, - 0xEA, 0xE2, 0x83, 0xE8, 0x8E, 0x83, 0xE2, 0xED, - 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, - 0xC9, 0x27, 0x27, 0xE4, 0xA6, 0x9B, 0xD5, 0xA8, - 0xD4, 0xB2, 0xD8, 0xDA, 0xD9, 0xE8, 0xE9, 0xE8, - 0xD8, 0xB1, 0xDA, 0xB2, 0xE9, 0x8E, 0xEC, 0xDA, - 0x22, 0x20, 0x39, 0x2B, 0x39, 0x24, 0xC4, 0x30, - 0x30, 0x54, 0x22, 0x29, 0x29, 0x39, 0x48, 0x2C, - 0x39, 0x6B, 0x39, 0xC0, 0x8D, 0xB1, 0xE9, 0xB2, - 0xB2, 0x8E, 0xA9, 0xD8, 0xDA, 0xB1, 0xA9, 0xDA, - 0x9C, 0xDC, 0x8E, 0xD4, 0xE8, 0xE8, 0x8F, 0x9B, - 0x4F, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9, - 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x4F, 0x6B, - 0x27, 0x27, 0x27, 0xD7, 0xDE, 0xAA, 0xE3, 0xA8, - 0xB2, 0xD5, 0xE5, 0x90, 0xE2, 0xA9, 0xE9, 0xB2, - 0xDA, 0xB2, 0xE1, 0xB2, 0xE9, 0x8E, 0xDA, 0xDF, - 0x78, 0x2A, 0x2C, 0x2A, 0x6B, 0x28, 0x23, 0x54, - 0x63, 0xC4, 0x33, 0x28, 0x2C, 0x39, 0x47, 0x39, - 0x28, 0x2C, 0x29, 0xBB, 0x8D, 0x83, 0xE9, 0xD4, - 0xB2, 0xE9, 0xE9, 0xE8, 0xD4, 0xD8, 0xD4, 0xA9, - 0xDA, 0xB2, 0xE9, 0xA8, 0xB2, 0xA8, 0xD5, 0xAA, - 0xC6, 0x56, 0x56, 0x56, 0x56, 0x56, 0xB9, 0x56, - 0x56, 0x56, 0x56, 0x56, 0x56, 0xC9, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xB8, 0xB4, 0x9B, 0xE3, 0x8E, - 0x9D, 0x8E, 0xB2, 0xE8, 0xE8, 0x8E, 0xB2, 0xDA, - 0xB2, 0x8E, 0xEC, 0xB2, 0x8E, 0xB2, 0xBB, 0x58, - 0xAF, 0x33, 0x50, 0x39, 0x6B, 0x39, 0x29, 0x20, - 0x33, 0x30, 0x78, 0x23, 0x6B, 0x6B, 0x48, 0x6B, - 0x2B, 0x2A, 0x29, 0xBB, 0xE5, 0x9C, 0xB1, 0xB2, - 0xE5, 0x84, 0x8E, 0x9C, 0x84, 0xB2, 0xB2, 0x9D, - 0x84, 0xDF, 0xA9, 0x84, 0x8E, 0xA8, 0xE3, 0x9B, - 0xA6, 0xD7, 0x80, 0x4F, 0x56, 0x56, 0x56, 0x4F, - 0x4F, 0x4F, 0x4F, 0x2A, 0x2D, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xB8, 0xB4, 0xAA, 0xD5, 0xA9, - 0x9D, 0xB2, 0x90, 0xEA, 0xE9, 0xE2, 0xE1, 0x8E, - 0xB2, 0x9D, 0x8E, 0xB1, 0xA7, 0xEE, 0x63, 0xD1, - 0x2E, 0xCC, 0x28, 0x48, 0x8B, 0x47, 0x6B, 0x28, - 0x23, 0x78, 0x6C, 0x54, 0x29, 0x50, 0x50, 0x6B, - 0x23, 0x20, 0xBB, 0xBC, 0xBB, 0x8D, 0xE3, 0xDF, - 0x9C, 0xA9, 0x8D, 0xA8, 0xD9, 0x90, 0x9D, 0xA9, - 0xDC, 0xA9, 0x83, 0xB2, 0xA9, 0xD4, 0xE3, 0x9B, - 0x8C, 0xEF, 0x27, 0x27, 0x27, 0x3C, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xF0, 0xB4, 0x9B, 0xE3, 0x84, - 0x9D, 0x84, 0x90, 0xB1, 0xA9, 0x9C, 0xD9, 0xB1, - 0xB2, 0xEA, 0xBB, 0x51, 0x24, 0x30, 0x30, 0x42, - 0x66, 0x58, 0x24, 0x48, 0x50, 0x3F, 0x20, 0x25, - 0x22, 0x60, 0x34, 0x30, 0x20, 0x8B, 0x8B, 0x39, - 0x54, 0x24, 0x2B, 0xC0, 0xC0, 0xC0, 0xBB, 0x9B, - 0xBC, 0xAA, 0xAA, 0xE3, 0xE3, 0x9C, 0xB2, 0xD4, - 0x83, 0xD8, 0xE8, 0x83, 0x84, 0xE8, 0xE5, 0x75, - 0x9A, 0xF0, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xF0, 0xB4, 0x9B, 0xE3, 0xA8, - 0xA9, 0xD8, 0x8E, 0xEA, 0xA8, 0x9C, 0xD9, 0xE0, - 0xC0, 0x5E, 0x2C, 0x20, 0x54, 0x60, 0x30, 0x66, - 0xB6, 0xCC, 0x63, 0x3F, 0x8B, 0x28, 0x22, 0x33, - 0x23, 0x31, 0xAF, 0x31, 0x22, 0x6B, 0x6B, 0x29, - 0x30, 0x54, 0x22, 0x89, 0xBA, 0xED, 0xA6, 0x8C, - 0xB4, 0xC0, 0xB4, 0x75, 0x75, 0x9B, 0x9B, 0xE5, - 0xA9, 0xD5, 0x8E, 0x8E, 0x9C, 0xE3, 0x75, 0x8C, - 0xC8, 0xF1, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xF1, 0x9A, 0xB4, 0x9B, 0xE3, - 0xE3, 0xA8, 0xE3, 0xE5, 0xAA, 0xBC, 0xC0, 0x9A, - 0x26, 0x29, 0x20, 0x24, 0x63, 0x60, 0x54, 0x43, - 0x34, 0xCB, 0x30, 0x39, 0x2C, 0x20, 0x24, 0x54, - 0x22, 0x34, 0x34, 0x31, 0x24, 0x3F, 0x2C, 0x2B, - 0x31, 0x30, 0x25, 0x2A, 0x6B, 0x29, 0x20, 0xF2, - 0xBA, 0xBF, 0xC8, 0x9A, 0xA6, 0xA6, 0x8C, 0xB4, - 0x9B, 0xAA, 0xAA, 0xAA, 0x9B, 0x75, 0xDE, 0xBF, - 0x81, 0xEF, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0xEF, 0xBA, 0x9A, 0xB4, 0x75, - 0x9B, 0x9B, 0x9B, 0xC0, 0xB4, 0x9A, 0xA5, 0xC4, - 0x30, 0x28, 0x22, 0x33, 0x30, 0x30, 0x23, 0x34, - 0x31, 0x30, 0xC4, 0x2C, 0x2B, 0x22, 0x33, 0x63, - 0x21, 0x58, 0x6C, 0x60, 0x25, 0x39, 0x28, 0x2B, - 0xCC, 0x6C, 0x63, 0x20, 0x6B, 0x28, 0x2B, 0x20, - 0x63, 0x43, 0xF3, 0xEF, 0xF0, 0x81, 0xBA, 0xF4, - 0xF4, 0xA6, 0xDE, 0x8C, 0xA6, 0x9A, 0xBA, 0x81, - 0xB0, 0xE4, 0xA1, 0x20, 0x20, 0x23, 0x31, 0xC4, - 0x30, 0x24, 0x33, 0x31, 0x31, 0x60, 0x43, 0x35, - 0x35, 0x55, 0x6C, 0xEF, 0x81, 0xC8, 0x9A, 0xA6, - 0xB4, 0xB4, 0x8C, 0xA6, 0xBA, 0x68, 0x30, 0x30, - 0x30, 0x2B, 0x25, 0x54, 0xC4, 0x54, 0x24, 0x78, - 0x63, 0x63, 0x30, 0x29, 0x21, 0x24, 0x54, 0x63, - 0x23, 0x34, 0xCB, 0x30, 0x25, 0x39, 0x20, 0x20, - 0x58, 0x34, 0x60, 0x23, 0x6B, 0x29, 0x28, 0x20, - 0x22, 0xB6, 0x42, 0xB6, 0x58, 0x54, 0xF5, 0xD7, - 0xA5, 0xBA, 0xBA, 0xBA, 0xBA, 0x81, 0xA5, 0xF1, - 0xE4, 0x2A, 0x39, 0x20, 0x20, 0x20, 0x31, 0x60, - 0x54, 0x28, 0x2B, 0x22, 0x33, 0x30, 0x43, 0x35, - 0x66, 0xD1, 0x34, 0xE4, 0xEF, 0x81, 0xC8, 0x9A, - 0x9A, 0xC8, 0xC8, 0x81, 0xF6, 0x31, 0x63, 0x31, - 0x78, 0x2B, 0x54, 0x63, 0x54, 0x24, 0x23, 0x54, - 0x63, 0x54, 0x63, 0x2C, 0x23, 0x33, 0x63, 0x54, - 0x25, 0x31, 0x78, 0x30, 0x25, 0x3F, 0x20, 0x20, - 0xAF, 0x58, 0xCC, 0x33, 0x39, 0x29, 0x29, 0x2A, - 0x29, 0x58, 0x43, 0x42, 0xD1, 0xCB, 0x2C, 0x2C, - 0x37, 0xCD, 0xEF, 0xB0, 0xF0, 0xB0, 0xEF, 0xE4, - 0x63, 0x20, 0x20, 0x2C, 0x2C, 0x21, 0xCB, 0x78, - 0x54, 0x39, 0x39, 0x28, 0x2B, 0x28, 0x2B, 0xCB, - 0x55, 0xB6, 0xD1, 0x28, 0xE4, 0xD7, 0xB8, 0xF0, - 0xA5, 0xB0, 0xEF, 0x26, 0x23, 0x54, 0x31, 0x58, - 0xCB, 0x20, 0x63, 0x63, 0x25, 0x2B, 0x54, 0x78, - 0x30, 0x63, 0x54, 0x28, 0x33, 0x63, 0x63, 0x33, - 0x54, 0x78, 0xC4, 0x30, 0x24, 0x2C, 0x22, 0x22, - 0x55, 0x55, 0x34, 0x30, 0x28, 0x2C, 0x29, 0x29, - 0x28, 0x30, 0xB6, 0x42, 0x43, 0x55, 0x22, 0x29, - 0x2C, 0x2B, 0x2B, 0x3F, 0xE4, 0xE4, 0x43, 0x66, - 0x30, 0x23, 0x24, 0x2A, 0x28, 0x2B, 0x54, 0x63, - 0x33, 0x39, 0x28, 0x20, 0x20, 0x20, 0x2B, 0x31, - 0x30, 0xD1, 0x43, 0x30, 0x39, 0x28, 0xE4, 0xE4, - 0xD7, 0xF5, 0x2B, 0x6B, 0x20, 0x30, 0x34, 0xD1, - 0x60, 0x23, 0x63, 0x54, 0x22, 0x47, 0x60, 0xCB, - 0xC4, 0xC4, 0x25, 0x22, 0x54, 0xC4, 0x63, 0x23, - 0xC4, 0xC4, 0x63, 0xC4, 0x23, 0x2A, 0x24, 0x22, - 0x55, 0x55, 0xAF, 0x6C, 0x22, 0x39, 0x2C, 0x39, - 0x28, 0x23, 0xD1, 0x43, 0x42, 0x8A, 0x63, 0x39, - 0x39, 0x2A, 0x20, 0x6B, 0x33, 0xCC, 0xD1, 0xB6, - 0x30, 0x24, 0x54, 0x63, 0x31, 0xCC, 0xCC, 0xCB, - 0xC4, 0x2A, 0x39, 0x20, 0x20, 0x20, 0x39, 0x30, - 0x30, 0x6C, 0x43, 0x43, 0x6C, 0x63, 0x25, 0x24, - 0x63, 0x63, 0x63, 0x25, 0x63, 0xCC, 0xD1, 0x34, - 0x63, 0x25, 0x54, 0x25, 0x2A, 0x28, 0x31, 0xCB, - 0x63, 0x78, 0x24, 0x33, 0xC4, 0xC4, 0x33, 0x2C, - 0xC4, 0x54, 0x54, 0x30, 0x21, 0x22, 0x25, 0x23, - 0x55, 0x55, 0xD1, 0x58, 0x33, 0x6B, 0x2C, 0x39, - 0x39, 0x39, 0x34, 0x43, 0x42, 0x43, 0xCC, 0x2B, - 0x28, 0x29, 0x20, 0x28, 0x21, 0x30, 0xCC, 0xAF, - 0x54, 0x23, 0xC4, 0x54, 0x58, 0x2E, 0x35, 0x42, - 0x55, 0x54, 0x8B, 0x2A, 0x20, 0x20, 0x28, 0x22, - 0x78, 0x30, 0xD1, 0x43, 0x44, 0x6C, 0xC4, 0xC4, - 0x60, 0x31, 0x31, 0x63, 0x6C, 0xAF, 0xCC, 0xCB, - 0x24, 0x25, 0x33, 0x23, 0x2C, 0x24, 0x31, 0x30, - 0x63, 0xC4, 0x21, 0x54, 0x30, 0x63, 0x24, 0x2A, - 0x54, 0x63, 0x54, 0xC4, 0x2B, 0x24, 0x33, 0x24, - 0x34, 0x55, 0xD1, 0x55, 0x30, 0x28, 0x29, 0x39, - 0x39, 0x8B, 0x63, 0x55, 0x42, 0x66, 0xB6, 0x25, - 0x29, 0x29, 0x29, 0x28, 0x2A, 0x54, 0x78, 0x6C, - 0x23, 0x20, 0x25, 0x30, 0xCB, 0x62, 0x35, 0x35, - 0x35, 0x44, 0x24, 0x6B, 0x29, 0x20, 0x2A, 0x39, - 0x28, 0x63, 0x34, 0xB6, 0x34, 0xCB, 0x63, 0x30, - 0x31, 0x31, 0x30, 0x30, 0xCC, 0x60, 0x63, 0xC4, - 0x20, 0x33, 0x25, 0x20, 0x48, 0x33, 0x30, 0x54, - 0x78, 0x54, 0x2B, 0x63, 0x30, 0x63, 0x23, 0x22, - 0x63, 0x63, 0x63, 0x33, 0x28, 0x25, 0x54, 0x24, - 0x78, 0xAF, 0xD1, 0xD1, 0xCC, 0x22, 0x39, 0x39, - 0x2C, 0x3F, 0x2B, 0x34, 0xB6, 0x43, 0x43, 0xC4, - 0x2B, 0x28, 0x39, 0x50, 0x2C, 0x24, 0x63, 0x78, - 0x21, 0x2C, 0x2A, 0x23, 0x54, 0xD1, 0x35, 0x35, - 0x35, 0x35, 0x55, 0x22, 0x39, 0x2C, 0x2C, 0x2C, - 0x20, 0x30, 0xCC, 0x6C, 0xCB, 0x30, 0x54, 0x30, - 0x78, 0x63, 0x78, 0x30, 0x54, 0x78, 0x30, 0x23, - 0x2B, 0x33, 0x24, 0x28, 0x39, 0x24, 0x54, 0x30, - 0x78, 0x33, 0x25, 0xC4, 0xC4, 0x33, 0x39, 0x25, - 0xC4, 0x63, 0xC4, 0x24, 0x20, 0x54, 0x54, 0x25, - 0x63, 0xCC, 0xD1, 0xB6, 0x55, 0x54, 0x39, 0x29, - 0x39, 0x2C, 0x6B, 0x30, 0xAF, 0xB6, 0xB6, 0x60, - 0x22, 0x2A, 0x2C, 0x39, 0x2C, 0x21, 0x54, 0x63, - 0x21, 0x50, 0x2C, 0x2C, 0x2B, 0x25, 0x62, 0x35, - 0x35, 0x35, 0x35, 0xCC, 0x2B, 0x29, 0x2B, 0x20, - 0x23, 0x25, 0xC4, 0x30, 0xC4, 0x63, 0x63, 0x63, - 0x63, 0x33, 0x24, 0x31, 0x31, 0x31, 0x54, 0x28, - 0x24, 0x25, 0x22, 0x6B, 0x28, 0x24, 0xC4, 0x78, - 0x30, 0x24, 0x63, 0xC4, 0x54, 0x23, 0x29, 0x63, - 0xC4, 0x54, 0xC4, 0x21, 0x24, 0x54, 0x54, 0x25, - 0x30, 0xCB, 0xD1, 0xB6, 0x55, 0x63, 0x28, 0x29, - 0x39, 0x39, 0x48, 0x33, 0x58, 0x44, 0xB6, 0x60, - 0x24, 0x20, 0x2B, 0x28, 0x2A, 0x22, 0x54, 0x63, - 0x21, 0x48, 0x2A, 0x2B, 0x39, 0x21, 0xB6, 0x35, - 0x35, 0x35, 0x35, 0x42, 0x23, 0x29, 0x2A, 0x2B, - 0x23, 0x25, 0x54, 0x54, 0x54, 0x63, 0x63, 0x30, - 0x25, 0x2B, 0x31, 0x31, 0x31, 0x31, 0x21, 0x2C, - 0x33, 0x25, 0x21, 0x39, 0x20, 0x25, 0x30, 0x78, - 0xC4, 0x23, 0xC4, 0x30, 0x54, 0x20, 0x28, 0x63, - 0x63, 0x63, 0x63, 0x20, 0x25, 0x54, 0x54, 0x20, -}; - -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, - 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xA7, - 0x99, 0xF9, 0xC2, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF9, 0xF3, 0xBC, 0xF9, 0x90, 0x00, 0x1F, 0xFF, - 0xFF, 0xFF, 0xF9, 0xE3, 0xBC, 0xF9, 0xA0, 0x00, - 0x8F, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, 0x3C, 0xF9, - 0x83, 0xE0, 0x2F, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, - 0x19, 0xF0, 0x1F, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, - 0xF9, 0xC0, 0x03, 0xF0, 0x3F, 0xF7, 0x8F, 0xFF, - 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, 0x7F, 0xF7, - 0xC7, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, - 0x6F, 0xF7, 0xE7, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, - 0x01, 0xF8, 0x7F, 0xF7, 0xE7, 0xFF, 0xFF, 0xFF, - 0xF9, 0xC0, 0x21, 0xD8, 0x7F, 0xE7, 0xEF, 0xFF, - 0xFF, 0xFF, 0xF9, 0xB1, 0x80, 0xEC, 0x7B, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xF1, 0x90, 0x00, 0xE4, - 0x7B, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C, - 0xC0, 0x7C, 0x79, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0xE3, 0x80, 0x00, 0x7C, 0x7C, 0xFF, 0xCF, 0xFF, - 0xFF, 0xFF, 0xE3, 0x80, 0x00, 0x7F, 0x77, 0xFF, - 0xDF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x00, 0x3F, - 0x3F, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x0E, 0x00, - 0x00, 0x3F, 0xBF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, - 0x1E, 0x00, 0x00, 0x1F, 0x9F, 0xFF, 0x3F, 0xFF, - 0xFF, 0xFE, 0x1C, 0x00, 0x00, 0x1F, 0x9F, 0xFF, - 0x7F, 0xFF, 0xFF, 0xFE, 0x3C, 0x00, 0x00, 0x1F, - 0x8F, 0xFE, 0x7F, 0xFF, 0xFF, 0xFC, 0x7C, 0x00, - 0x00, 0x0F, 0xC7, 0xFC, 0xFF, 0xFF, 0xFF, 0xFC, - 0xF8, 0x00, 0x00, 0x0F, 0xF7, 0xF9, 0xFF, 0xFF, - 0xFF, 0xFC, 0xF8, 0x00, 0x00, 0x07, 0xFB, 0xF3, - 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x00, 0x07, - 0xFD, 0xE7, 0xFF, 0xFF, 0xFF, 0xF9, 0xF0, 0x00, - 0x00, 0x03, 0xFE, 0x8F, 0xFF, 0xFF, 0xFF, 0xF1, - 0xF0, 0x00, 0x00, 0x03, 0xFE, 0x1F, 0xFF, 0xFF, - 0xFF, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xBF, - 0xFF, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x00, 0x00, - 0xFE, 0xBF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0x00, - 0x00, 0x00, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xC7, - 0xC0, 0x00, 0x00, 0x01, 0xFE, 0xBF, 0xFF, 0xFF, - 0xFF, 0xC7, 0x80, 0x00, 0x00, 0x01, 0xFE, 0x9F, - 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0x01, - 0xFE, 0x07, 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00, - 0x00, 0x01, 0xFE, 0x87, 0xFF, 0xFF, 0xFF, 0x9F, - 0x80, 0x00, 0x00, 0x01, 0xFD, 0x33, 0xFF, 0xFF, - 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x01, 0x80, 0xF3, - 0xFF, 0xFF, 0xFF, 0x9E, 0x80, 0x00, 0x00, 0x03, - 0x8B, 0xF9, 0xFF, 0xFF, 0xFF, 0x9F, 0x80, 0x00, - 0x00, 0x02, 0x27, 0xF8, 0xFF, 0xFF, 0xFF, 0x99, - 0x80, 0x00, 0x00, 0x00, 0x07, 0xF8, 0xFF, 0xFF, - 0xFF, 0x00, 0x80, 0x00, 0x00, 0x01, 0x8F, 0xF8, - 0xFF, 0xFF, 0xFE, 0x20, 0x60, 0x00, 0x00, 0x00, - 0xE3, 0xF8, 0xFF, 0xFF, 0xF8, 0x00, 0x30, 0x00, - 0x00, 0x00, 0xF8, 0x78, 0xFF, 0xFF, 0xC0, 0x40, - 0x38, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x7F, 0xFF, - 0x81, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x20, - 0x7F, 0xFF, 0x90, 0x00, 0x1E, 0x00, 0x00, 0x00, - 0x78, 0x10, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 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, -}; - -/* Painted by Johnny Stenback <jst@uwasa.fi> */ - -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 | Sparc $9$F\n" -" '!!!!!$ !!#!`\n" -" !!!!!* .!!!!!`\n" -"'!!!!!!!W..e$$!!!!!!` %s\n" -" \"~^^~ ^~~^\n" -"\n"; diff --git a/include/asm-sparc64/mmu_context.h b/include/asm-sparc64/mmu_context.h index 76aacba13..0e8168bb5 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.7 1997/04/04 00:50:23 davem Exp $ */ +/* $Id: mmu_context.h,v 1.8 1997/05/18 20:44:23 davem Exp $ */ #ifndef __SPARC64_MMU_CONTEXT_H #define __SPARC64_MMU_CONTEXT_H @@ -63,11 +63,21 @@ extern __inline__ void get_mmu_context(struct task_struct *tsk) !(tsk->tss.flags & SPARC_FLAG_KTHREAD) && !(tsk->flags & PF_EXITING)) { unsigned long ctx = tlb_context_cache; + register unsigned long paddr asm("o5"); flushw_user(); if((mm->context ^ ctx) & CTX_VERSION_MASK) get_new_mmu_context(mm, ctx); spitfire_set_secondary_context(mm->context); + paddr = __pa(mm->pgd); + __asm__ __volatile__(" + rdpr %%pstate, %%o4 + wrpr %%o4, %1, %%pstate + mov %0, %%g7 + wrpr %%o4, 0x0, %%pstate + " : /* no outputs */ + : "r" (paddr), "i" (PSTATE_MG|PSTATE_IE) + : "o4"); } } diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h index 600ac1632..ca35d567f 100644 --- a/include/asm-sparc64/pgtable.h +++ b/include/asm-sparc64/pgtable.h @@ -1,7 +1,7 @@ -/* $Id: pgtable.h,v 1.28 1997/04/14 17:05:19 jj Exp $ +/* $Id: pgtable.h,v 1.31 1997/05/18 21:11:42 davem Exp $ * pgtable.h: SpitFire page table operations. * - * Copyright 1996 David S. Miller (davem@caip.rutgers.edu) + * Copyright 1996,1997 David S. Miller (davem@caip.rutgers.edu) */ #ifndef _SPARC64_PGTABLE_H @@ -204,13 +204,8 @@ extern __inline__ void flush_cache_all(void) unsigned long addr; flushw_all(); - for(addr = 0; addr < (PAGE_SIZE << 1); addr += 32) { + for(addr = 0; addr < (PAGE_SIZE << 1); addr += 32) spitfire_put_icache_tag(addr, 0x0UL); - membar("#Sync"); - } - - /* Kill the pipeline. */ - flushi(PAGE_OFFSET); } extern __inline__ void flush_cache_mm(struct mm_struct *mm) @@ -219,13 +214,8 @@ extern __inline__ void flush_cache_mm(struct mm_struct *mm) unsigned long addr; flushw_user(); - for(addr = 0; addr < (PAGE_SIZE << 1); addr += 32) { + for(addr = 0; addr < (PAGE_SIZE << 1); addr += 32) spitfire_put_icache_tag(addr, 0x0UL); - membar("#Sync"); - } - - /* Kill the pipeline. */ - flushi(PAGE_OFFSET); } } @@ -236,13 +226,8 @@ extern __inline__ void flush_cache_range(struct mm_struct *mm, unsigned long sta unsigned long addr; flushw_user(); - for(addr = 0; addr < (PAGE_SIZE << 1); addr += 32) { + for(addr = 0; addr < (PAGE_SIZE << 1); addr += 32) spitfire_put_icache_tag(addr, 0x0UL); - membar("#Sync"); - } - - /* Kill the pipeline. */ - flushi(PAGE_OFFSET); } } @@ -254,13 +239,8 @@ extern __inline__ void flush_cache_page(struct vm_area_struct *vma, unsigned lon unsigned long addr; flushw_user(); - for(addr = 0; addr < (PAGE_SIZE << 1); addr += 32) { + for(addr = 0; addr < (PAGE_SIZE << 1); addr += 32) spitfire_put_icache_tag(addr, 0x0UL); - membar("#Sync"); - } - - /* Kill the pipeline. */ - flushi(PAGE_OFFSET); } } @@ -290,15 +270,28 @@ extern __inline__ void flush_tlb_all(void) extern __inline__ void flush_tlb_mm(struct mm_struct *mm) { if(mm->context != NO_CONTEXT) { - unsigned long orig_ctx = spitfire_get_secondary_context(); - unsigned long flags; - - save_and_cli(flags); - spitfire_set_secondary_context(mm->context); - spitfire_flush_dtlb_secondary_context(); - spitfire_flush_itlb_secondary_context(); - spitfire_set_secondary_context(orig_ctx); - restore_flags(flags); + __asm__ __volatile__(" + /* flush_tlb_mm() */ + rdpr %%pil, %%g1 + mov %1, %%g7 + wrpr %%g0, 15, %%pil + ldxa [%%g7] %2, %%g2 + cmp %%g2, %0 + be,pt %%icc, 1f + mov 0x50, %%g3 + stxa %0, [%%g7] %2 +1: + stxa %%g0, [%%g3] %3 + stxa %%g0, [%%g3] %4 + bne,a,pn %%icc, 1f + stxa %%g2, [%%g7] %2 +1: + flush %%g4 + wrpr %%g1, 0x0, %%pil +" : /* no outputs */ + : "r" (mm->context), "i" (SECONDARY_CONTEXT), "i" (ASI_DMMU), + "i" (ASI_DMMU_DEMAP), "i" (ASI_IMMU_DEMAP) + : "g1", "g2", "g3", "g7", "cc"); } } @@ -307,17 +300,21 @@ extern __inline__ void flush_tlb_range(struct mm_struct *mm, unsigned long start { if(mm->context != NO_CONTEXT) { unsigned long old_ctx = spitfire_get_secondary_context(); + unsigned long new_ctx = mm->context; unsigned long flags; start &= PAGE_MASK; save_and_cli(flags); - spitfire_set_secondary_context(mm->context); + if(new_ctx != old_ctx) + spitfire_set_secondary_context(mm->context); while(start < end) { spitfire_flush_dtlb_secondary_page(start); spitfire_flush_itlb_secondary_page(start); start += PAGE_SIZE; } - spitfire_set_secondary_context(old_ctx); + if(new_ctx != old_ctx) + spitfire_set_secondary_context(old_ctx); + __asm__ __volatile__("flush %g4"); restore_flags(flags); } } @@ -327,17 +324,31 @@ extern __inline__ void flush_tlb_page(struct vm_area_struct *vma, unsigned long struct mm_struct *mm = vma->vm_mm; if(mm->context != NO_CONTEXT) { - unsigned long old_ctx = spitfire_get_secondary_context(); - unsigned long flags; - - page &= PAGE_MASK; - save_and_cli(flags); - spitfire_set_secondary_context(mm->context); - if(vma->vm_flags & VM_EXEC) - spitfire_flush_itlb_secondary_page(page); - spitfire_flush_dtlb_secondary_page(page); - spitfire_set_secondary_context(old_ctx); - restore_flags(flags); + __asm__ __volatile__(" + /* flush_tlb_page() */ + rdpr %%pil, %%g1 + mov %1, %%g7 + wrpr %%g0, 15, %%pil + ldxa [%%g7] %2, %%g2 + cmp %%g2, %0 + be,pt %%icc, 1f + or %5, 0x10, %5 + stxa %0, [%%g7] %2 +1: + stxa %%g0, [%5] %3 + brnz,a %6, 1f + stxa %%g0, [%5] %4 +1: + bne,a,pn %%icc, 1f + stxa %%g2, [%%g7] %2 +1: + flush %%g4 + wrpr %%g1, 0x0, %%pil +" : /* no outputs */ + : "r" (mm->context), "i" (SECONDARY_CONTEXT), "i" (ASI_DMMU), + "i" (ASI_DMMU_DEMAP), "i" (ASI_IMMU_DEMAP), "r" (page & PAGE_MASK), + "r" (vma->vm_flags & VM_EXEC) + : "g1", "g2", "g3", "g7", "cc"); } } @@ -649,7 +660,7 @@ extern inline void update_mmu_cache(struct vm_area_struct * vma, start += PAGE_SIZE; } } - } while((vmaring = vmaring->vm_next_share) != inode->i_mmap); + } while((vmaring = vmaring->vm_next_share) != NULL); if(alias_found && (pte_val(pte) & _PAGE_CV)) { pgdp = pgd_offset(vma->vm_mm, address); diff --git a/include/asm-sparc64/processor.h b/include/asm-sparc64/processor.h index 25c907ddb..8b2380a2e 100644 --- a/include/asm-sparc64/processor.h +++ b/include/asm-sparc64/processor.h @@ -1,4 +1,4 @@ -/* $Id: processor.h,v 1.21 1997/04/14 17:05:18 jj Exp $ +/* $Id: processor.h,v 1.26 1997/05/17 05:59:10 davem Exp $ * include/asm-sparc64/processor.h * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -71,7 +71,7 @@ struct thread_struct { #define SPARC_FLAG_32BIT 0x8 /* task is older 32-bit binary */ #define INIT_MMAP { &init_mm, 0xfffff80000000000, 0xfffff80001000000, \ - PAGE_SHARED , VM_READ | VM_WRITE | VM_EXEC } + PAGE_SHARED , VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap } #define INIT_TSS { \ /* FPU regs */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -115,6 +115,7 @@ do { \ regs->tpc = ((pc & (~3)) - 4); \ regs->tnpc = regs->tpc + 4; \ regs->y = 0; \ + current->tss.flags &= ~SPARC_FLAG_32BIT; \ __asm__ __volatile__( \ "stx %%g0, [%0 + %2 + 0x00]\n\t" \ "stx %%g0, [%0 + %2 + 0x08]\n\t" \ @@ -132,7 +133,7 @@ do { \ "stx %%g0, [%0 + %2 + 0x68]\n\t" \ "stx %1, [%0 + %2 + 0x70]\n\t" \ "stx %%g0, [%0 + %2 + 0x78]\n\t" \ - "wrpr %%g0, 1, %%wstate\n\t" \ + "wrpr %%g0, (1 << 3), %%wstate\n\t" \ : \ : "r" (regs), "r" (sp - REGWIN_SZ), \ "i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0]))); \ @@ -168,7 +169,7 @@ do { \ "stx %%g0, [%0 + %2 + 0x68]\n\t" \ "stx %1, [%0 + %2 + 0x70]\n\t" \ "stx %%g0, [%0 + %2 + 0x78]\n\t" \ - "wrpr %%g0, 2, %%wstate\n\t" \ + "wrpr %%g0, (2 << 3), %%wstate\n\t" \ : \ : "r" (regs), "r" (sp - REGWIN32_SZ), \ "i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0])), \ @@ -179,16 +180,13 @@ do { \ #define release_thread(tsk) do { } while(0) #ifdef __KERNEL__ -/* Allocation and freeing of basic task resources. */ +/* Allocation and freeing of task_struct and kernel stack. */ +#define alloc_task_struct() ((struct task_struct *)__get_free_pages(GFP_KERNEL, 1, 0)) +#define free_task_struct(tsk) free_pages((unsigned long)(tsk),1) + +#define init_task (init_task_union.task) +#define init_stack (init_task_union.stack) -/* XXX FIXME For task_struct must use SLAB or something other than - * XXX kmalloc() as FPU registers in TSS require that entire structure - * XXX be 64-byte aligned as well. - */ -#define alloc_kernel_stack(tsk) __get_free_page(GFP_KERNEL) -#define free_kernel_stack(stack) free_page(stack) -#define alloc_task_struct() kmalloc(sizeof(struct task_struct), GFP_KERNEL) -#define free_task_struct(tsk) kfree(tsk) #endif /* __KERNEL__ */ #endif /* !(__ASSEMBLY__) */ diff --git a/include/asm-sparc64/spitfire.h b/include/asm-sparc64/spitfire.h index 10918dc82..76232c227 100644 --- a/include/asm-sparc64/spitfire.h +++ b/include/asm-sparc64/spitfire.h @@ -1,4 +1,4 @@ -/* $Id: spitfire.h,v 1.7 1997/04/04 00:50:29 davem Exp $ +/* $Id: spitfire.h,v 1.8 1997/05/18 04:16:56 davem Exp $ * spitfire.h: SpitFire/BlackBird/Cheetah inline MMU operations. * * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) @@ -209,28 +209,28 @@ extern __inline__ void spitfire_flush_dtlb_secondary_context(void) { __asm__ __volatile__("stxa %%g0, [%0] %1" : /* No outputs */ - : "r" (0x41), "i" (ASI_DMMU_DEMAP)); + : "r" (0x50), "i" (ASI_DMMU_DEMAP)); } extern __inline__ void spitfire_flush_itlb_secondary_context(void) { __asm__ __volatile__("stxa %%g0, [%0] %1" : /* No outputs */ - : "r" (0x41), "i" (ASI_IMMU_DEMAP)); + : "r" (0x50), "i" (ASI_IMMU_DEMAP)); } extern __inline__ void spitfire_flush_dtlb_nucleus_context(void) { __asm__ __volatile__("stxa %%g0, [%0] %1" : /* No outputs */ - : "r" (0x42), "i" (ASI_DMMU_DEMAP)); + : "r" (0x60), "i" (ASI_DMMU_DEMAP)); } extern __inline__ void spitfire_flush_itlb_nucleus_context(void) { __asm__ __volatile__("stxa %%g0, [%0] %1" : /* No outputs */ - : "r" (0x42), "i" (ASI_IMMU_DEMAP)); + : "r" (0x60), "i" (ASI_IMMU_DEMAP)); } /* Page level flushes. */ diff --git a/include/asm-sparc64/string.h b/include/asm-sparc64/string.h index 1470bcfef..b420d80bb 100644 --- a/include/asm-sparc64/string.h +++ b/include/asm-sparc64/string.h @@ -1,4 +1,4 @@ -/* $Id: string.h,v 1.4 1997/04/01 09:34:41 davem Exp $ +/* $Id: string.h,v 1.5 1997/05/18 04:16:57 davem Exp $ * string.h: External definitions for optimized assembly string * routines for the Linux Kernel. * @@ -41,14 +41,18 @@ extern inline void *__constant_memcpy(void *to, const void *from, __kernel_size_ if(n <= 32) { __builtin_memcpy(to, from, n); } else { +#if 0 switch(n) { case 8192: __copy_1page(to, from); break; default: +#endif __memcpy(to, from, n); +#if 0 break; } +#endif } } return to; @@ -74,9 +78,11 @@ extern inline void *__constant_c_and_count_memset(void *s, char c, __kernel_size extern __kernel_size_t __bzero(void *, __kernel_size_t); if(!c) { +#if 0 if(count == 8192) bzero_1page(s); else +#endif __bzero(s, count); } else { __memset(s, c, count); diff --git a/include/asm-sparc64/system.h b/include/asm-sparc64/system.h index 8bc44e1c8..786cfd2af 100644 --- a/include/asm-sparc64/system.h +++ b/include/asm-sparc64/system.h @@ -1,4 +1,4 @@ -/* $Id: system.h,v 1.15 1997/04/10 23:32:49 davem Exp $ */ +/* $Id: system.h,v 1.19 1997/05/18 22:52:32 davem Exp $ */ #ifndef __SPARC64_SYSTEM_H #define __SPARC64_SYSTEM_H @@ -89,18 +89,24 @@ extern unsigned long empty_zero_page; #ifndef __ASSEMBLY__ +extern void synchronize_user_stack(void); + extern __inline__ void flushw_user(void) { __asm__ __volatile__(" rdpr %%otherwin, %%g1 + brz,pt %%g1, 2f + clr %%g2 1: - rdpr %%otherwin, %%g2 - brnz,pn %%g2, 1b - save %%sp, %0, %%sp + save %%sp, %0, %%sp + rdpr %%otherwin, %%g1 + brnz,pt %%g1, 1b + add %%g2, 1, %%g2 1: - subcc %%g1, 1, %%g1 - bne,pn %%xcc, 1b + subcc %%g2, 1, %%g2 + bne,pt %%xcc, 1b restore %%g0, %%g0, %%g0 +2: " : : "i" (-REGWIN_SZ) : "g1", "g2", "cc"); } @@ -122,9 +128,9 @@ extern __inline__ void flushw_user(void) /* See what happens when you design the chip correctly? * NOTE NOTE NOTE this is extremely non-trivial what I - * am doing here. GCC needs only two registers to stuff - * things into ('next' and ¤t_set[cpu]) So I "claim" - * that I do not clobber them, when in fact I do. Please, + * am doing here. GCC needs only one register to stuff + * things into ('next' in particular) So I "claim" that + * I do not clobber it, when in fact I do. Please, * when modifying this code inspect output of sched.s very * carefully to make sure things still work. -DaveM */ @@ -141,14 +147,12 @@ do { \ "stx %%o6, [%%g6 + %3]\n\t" \ "rdpr %%wstate, %%o5\n\t" \ "stx %%o7, [%%g6 + %4]\n\t" \ - "mov %6, %%o4\n\t" \ "stx %%o5, [%%g6 + %2]\n\t" \ - "st %%o4, [%%g6 + %7]\n\t" \ "rdpr %%cwp, %%o5\n\t" \ - "stx %%o5, [%%g6 + %8]\n\t" \ - "mov %1, %%g6\n\t" \ - "stx %%g6, [%0]\n\t" \ - "ldx [%%g6 + %8], %%g1\n\t" \ + "stx %%o5, [%%g6 + %5]\n\t" \ + "mov %0, %%g6\n\t" \ + "wr %0, 0x0, %%pic\n\t" \ + "ldx [%%g6 + %5], %%g1\n\t" \ "wrpr %%g1, %%cwp\n\t" \ "ldx [%%g6 + %2], %%o5\n\t" \ "ldx [%%g6 + %3], %%o6\n\t" \ @@ -158,15 +162,13 @@ do { \ "jmpl %%o7 + 0x8, %%g0\n\t" \ " ldx [%%sp + 2047 + 0x78], %%i7\n\t" \ : /* No outputs */ \ - : "r" (&(current_set[smp_processor_id()])), "r" (next), \ + : "r" (next), "r" (task_pc), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.wstate)), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.ksp)), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.kpc)), \ - "r" (task_pc), "i" (255), \ - "i" ((const unsigned long)(&((struct task_struct *)0)->processor)), \ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.cwp)) \ : "cc", "g1", "g2", "g3", "g5", "g7", \ - "l2", "l3", "l4", "l5", "l6", "l7", \ + "l1", "l2", "l3", "l4", "l5", "l6", "l7", \ "i0", "i1", "i2", "i3", "i4", "i5", \ "o0", "o1", "o2", "o3", "o4", "o5"); \ switch_continue: } while(0) diff --git a/include/asm-sparc64/termbits.h b/include/asm-sparc64/termbits.h index fae8ac1cc..01e8364c6 100644 --- a/include/asm-sparc64/termbits.h +++ b/include/asm-sparc64/termbits.h @@ -148,7 +148,13 @@ struct termios { #define HUPCL 0x00000400 #define CLOCAL 0x00000800 #define CBAUDEX 0x00001000 +/* We'll never see these speeds with the Zilogs, but for completeness... */ #define B57600 0x00001001 +#define B115200 0x00001002 +#define B230400 0x00001003 +#define B460800 0x00001004 +/* This is what we can do with the Zilogs. */ +#define B76800 0x00001005 #define CIBAUD 0x100f0000 /* input baud rate (not used) */ #define CMSPAR 0x40000000 /* mark or space (stick) parity */ #define CRTSCTS 0x80000000 /* flow control */ diff --git a/include/linux/affs_fs.h b/include/linux/affs_fs.h index 0067552fc..fc7c46dc8 100644 --- a/include/linux/affs_fs.h +++ b/include/linux/affs_fs.h @@ -22,9 +22,9 @@ struct DateStamp { - __u32 ds_Days; - __u32 ds_Minute; - __u32 ds_Tick; + u32 ds_Days; + u32 ds_Minute; + u32 ds_Tick; }; @@ -32,66 +32,58 @@ struct DateStamp /* amigaffs.c */ -extern int affs_get_key_entry(int bsize, void *data, int entry_pos); -extern int affs_find_next_hash_entry(int bsize, void *dir_data, int *hash_pos); -extern int affs_get_file_name(int bsize, void *fh_data, char **name); -extern unsigned int affs_checksum_block(int bsize, void *data, int *ptype, int *stype); -extern void affs_fix_checksum(int bsize, void *data, int cspos); -extern void secs_to_datestamp(int secs, struct DateStamp *ds); -extern int prot_to_mode(unsigned int prot); -extern unsigned int mode_to_prot(int mode); -extern int affs_fix_hash_pred(struct inode *startino, int startoffset, - int key, int newkey); -extern int affs_fix_link_pred(struct inode *startino, int key, int newkey); +extern int affs_get_key_entry(int bsize, void *data, int entry_pos); +extern int affs_get_file_name(int bsize, void *fh_data, char **name); +extern u32 affs_checksum_block(int bsize, void *data, s32 *ptype, s32 *stype); +extern void affs_fix_checksum(int bsize, void *data, int cspos); +extern void secs_to_datestamp(time_t secs, struct DateStamp *ds); +extern int prot_to_mode(unsigned int prot); +extern u32 mode_to_prot(int mode); +extern int affs_fix_hash_pred(struct inode *startino, int startoffset, + s32 key, s32 newkey); +extern int affs_fix_link_pred(struct inode *startino, s32 key, s32 newkey); +extern void affs_error(struct super_block *sb, const char *function, const char *fmt, ...); +extern void affs_warning(struct super_block *sb, const char *function, const char *fmt, ...); /* bitmap. c */ -extern int affs_count_free_blocks(struct super_block *s); -extern int affs_count_free_bits(int blocksize, const char *data); -extern void affs_free_block(struct super_block *sb, int block); -extern int affs_new_header(struct inode *inode); -extern int affs_new_data(struct inode *inode); -extern void affs_make_zones(struct super_block *sb); +extern int affs_count_free_blocks(struct super_block *s); +extern int affs_count_free_bits(int blocksize, const char *data); +extern void affs_free_block(struct super_block *sb, s32 block); +extern s32 affs_new_header(struct inode *inode); +extern s32 affs_new_data(struct inode *inode); +extern void affs_make_zones(struct super_block *sb); /* namei.c */ -extern int affs_hash_name(const char *name, int len, int intl, int hashsize); -extern int affs_lookup(struct inode *dir,const char *name, int len, - struct inode **result); -extern int affs_unlink(struct inode *dir, const char *name, int len); -extern int affs_create(struct inode *dir, const char *name, int len, int mode, - struct inode **result); -extern int affs_mkdir(struct inode *dir, const char *name, int len, int mode); -extern int affs_rmdir(struct inode *dir, const char *name, int len); -extern int affs_link(struct inode *oldinode, struct inode *dir, - const char *name, int len); -extern int affs_symlink(struct inode *dir, const char *name, int len, - const char *symname); -extern int affs_fixup(struct buffer_head *bh, struct inode *inode); -extern int affs_rename(struct inode *old_dir, const char *old_name, int old_len, - struct inode *new_dir, const char *new_name, int new_len, - int must_be_dir); +extern int affs_hash_name(const char *name, int len, int intl, int hashsize); +extern int affs_lookup(struct inode *dir,const char *name, int len, + struct inode **result); +extern int affs_unlink(struct inode *dir, const char *name, int len); +extern int affs_create(struct inode *dir, const char *name, int len, int mode, + struct inode **result); +extern int affs_mkdir(struct inode *dir, const char *name, int len, int mode); +extern int affs_rmdir(struct inode *dir, const char *name, int len); +extern int affs_link(struct inode *oldinode, struct inode *dir, + const char *name, int len); +extern int affs_symlink(struct inode *dir, const char *name, int len, + const char *symname); +extern int affs_rename(struct inode *old_dir, const char *old_name, int old_len, + struct inode *new_dir, const char *new_name, int new_len, + int must_be_dir); /* inode.c */ extern struct buffer_head *affs_bread(kdev_t dev, int block, int size); extern void affs_brelse(struct buffer_head *buf); -extern void affs_put_super(struct super_block *); -extern int affs_parent_ino(struct inode *dir); -extern struct super_block *affs_read_super(struct super_block *,void *, int); -extern void affs_statfs(struct super_block *, struct statfs *, int bufsiz); -extern void affs_read_inode(struct inode *); -extern void affs_write_inode(struct inode *); -extern int affs_notify_change(struct inode *inode, struct iattr *attr); -extern void affs_put_inode(struct inode *); +extern unsigned long affs_parent_ino(struct inode *dir); extern struct inode *affs_new_inode(const struct inode *dir); -extern int affs_add_entry(struct inode *dir, struct inode *link, struct inode *inode, - const char *name, int len, int type); +extern int affs_add_entry(struct inode *dir, struct inode *link, + struct inode *inode, const char *name, + int len, s32 type); /* file.c */ -extern int affs_bmap(struct inode *inode, int block); -extern struct buffer_head *affs_getblock(struct inode *inode, int block); extern void affs_truncate(struct inode *); extern void affs_truncate_ofs(struct inode *); diff --git a/include/linux/affs_fs_i.h b/include/linux/affs_fs_i.h index 40b823909..beeabb0de 100644 --- a/include/linux/affs_fs_i.h +++ b/include/linux/affs_fs_i.h @@ -9,19 +9,19 @@ struct key_cache { struct timeval kc_lru_time; /* Last time this cache was used */ - int kc_first; /* First cached key */ - int kc_last; /* Last cached key */ - int kc_this_key; /* Key of extension block this data block keys are from */ + s32 kc_first; /* First cached key */ + s32 kc_last; /* Last cached key */ + s32 kc_this_key; /* Key of extension block this data block keys are from */ int kc_this_seq; /* Sequence number of this extension block */ - int kc_next_key; /* Key of next extension block */ - int kc_keys[AFFS_KCSIZE]; /* Key cache */ + s32 kc_next_key; /* Key of next extension block */ + s32 kc_keys[AFFS_KCSIZE]; /* Key cache */ }; #define EC_SIZE (PAGE_SIZE - 4 * sizeof(struct key_cache) - 4) / 4 struct ext_cache { struct key_cache kc[4]; /* The 4 key caches */ - __s32 ec[EC_SIZE]; /* Keys of assorted extension blocks */ + s32 ec[EC_SIZE]; /* Keys of assorted extension blocks */ int max_ext; /* Index of last known extension block */ }; @@ -29,18 +29,18 @@ struct ext_cache { * affs fs inode data in memory */ struct affs_inode_info { - __u32 i_protect; /* unused attribute bits */ - __s32 i_parent; /* parent ino */ - __s32 i_original; /* if != 0, this is the key of the original */ - __s32 i_data[AFFS_MAX_PREALLOC]; /* preallocated blocks */ - struct ext_cache *i_ec; /* Cache gets allocated dynamically */ - int i_cache_users; /* Cache cannot be freed while > 0 */ - int i_lastblock; /* last allocated block */ - short i_pa_cnt; /* number of preallocated blocks */ - short i_pa_next; /* Index of next block in i_data[] */ - short i_pa_last; /* Index of next free slot in i_data[] */ - short i_zone; /* write zone */ - unsigned char i_hlink; /* This is a fake */ + u32 i_protect; /* unused attribute bits */ + s32 i_parent; /* parent ino */ + s32 i_original; /* if != 0, this is the key of the original */ + s32 i_data[AFFS_MAX_PREALLOC]; /* preallocated blocks */ + struct ext_cache *i_ec; /* Cache gets allocated dynamically */ + int i_cache_users; /* Cache cannot be freed while > 0 */ + int i_lastblock; /* last allocated block */ + short i_pa_cnt; /* number of preallocated blocks */ + short i_pa_next; /* Index of next block in i_data[] */ + short i_pa_last; /* Index of next free slot in i_data[] */ + short i_zone; /* write zone */ + unsigned char i_hlink; /* This is a fake */ unsigned char i_pad; }; diff --git a/include/linux/affs_fs_sb.h b/include/linux/affs_fs_sb.h index 0ff862d13..75af71dba 100644 --- a/include/linux/affs_fs_sb.h +++ b/include/linux/affs_fs_sb.h @@ -15,8 +15,8 @@ struct affs_bm_info { struct buffer_head *bm_bh; /* Buffer head if loaded (bm_count > 0) */ - int bm_firstblk; /* Block number of first bit in this map */ - int bm_key; /* Disk block number */ + s32 bm_firstblk; /* Block number of first bit in this map */ + s32 bm_key; /* Disk block number */ int bm_count; /* Usage counter */ }; @@ -37,11 +37,11 @@ struct affs_zone { struct affs_sb_info { int s_partition_size; /* Partition size in blocks. */ - int s_root_block; /* FFS root block number. */ + s32 s_root_block; /* FFS root block number. */ int s_hashsize; /* Size of hash table. */ unsigned long s_flags; /* See below. */ - short s_uid; /* uid to override */ - short s_gid; /* gid to override */ + s16 s_uid; /* uid to override */ + s16 s_gid; /* gid to override */ umode_t s_mode; /* mode to override */ int s_reserved; /* Number of reserved blocks. */ struct buffer_head *s_root_bh; /* Cached root block. */ diff --git a/include/linux/affs_hardblocks.h b/include/linux/affs_hardblocks.h index 33315488d..ae893e022 100644 --- a/include/linux/affs_hardblocks.h +++ b/include/linux/affs_hardblocks.h @@ -4,59 +4,59 @@ /* Just the needed definitions for the RDB of an Amiga HD. */ struct RigidDiskBlock { - __u32 rdb_ID; - __u32 rdb_SummedLongs; - __s32 rdb_ChkSum; - __u32 rdb_HostID; - __u32 rdb_BlockBytes; - __u32 rdb_Flags; - __u32 rdb_BadBlockList; - __u32 rdb_PartitionList; - __u32 rdb_FileSysHeaderList; - __u32 rdb_DriveInit; - __u32 rdb_Reserved1[6]; - __u32 rdb_Cylinders; - __u32 rdb_Sectors; - __u32 rdb_Heads; - __u32 rdb_Interleave; - __u32 rdb_Park; - __u32 rdb_Reserved2[3]; - __u32 rdb_WritePreComp; - __u32 rdb_ReducedWrite; - __u32 rdb_StepRate; - __u32 rdb_Reserved3[5]; - __u32 rdb_RDBBlocksLo; - __u32 rdb_RDBBlocksHi; - __u32 rdb_LoCylinder; - __u32 rdb_HiCylinder; - __u32 rdb_CylBlocks; - __u32 rdb_AutoParkSeconds; - __u32 rdb_HighRDSKBlock; - __u32 rdb_Reserved4; + u32 rdb_ID; + u32 rdb_SummedLongs; + s32 rdb_ChkSum; + u32 rdb_HostID; + u32 rdb_BlockBytes; + u32 rdb_Flags; + u32 rdb_BadBlockList; + u32 rdb_PartitionList; + u32 rdb_FileSysHeaderList; + u32 rdb_DriveInit; + u32 rdb_Reserved1[6]; + u32 rdb_Cylinders; + u32 rdb_Sectors; + u32 rdb_Heads; + u32 rdb_Interleave; + u32 rdb_Park; + u32 rdb_Reserved2[3]; + u32 rdb_WritePreComp; + u32 rdb_ReducedWrite; + u32 rdb_StepRate; + u32 rdb_Reserved3[5]; + u32 rdb_RDBBlocksLo; + u32 rdb_RDBBlocksHi; + u32 rdb_LoCylinder; + u32 rdb_HiCylinder; + u32 rdb_CylBlocks; + u32 rdb_AutoParkSeconds; + u32 rdb_HighRDSKBlock; + u32 rdb_Reserved4; char rdb_DiskVendor[8]; char rdb_DiskProduct[16]; char rdb_DiskRevision[4]; char rdb_ControllerVendor[8]; char rdb_ControllerProduct[16]; char rdb_ControllerRevision[4]; - __u32 rdb_Reserved5[10]; + u32 rdb_Reserved5[10]; }; #define IDNAME_RIGIDDISK 0x5244534B /* "RDSK" */ struct PartitionBlock { - __u32 pb_ID; - __u32 pb_SummedLongs; - __s32 pb_ChkSum; - __u32 pb_HostID; - __u32 pb_Next; - __u32 pb_Flags; - __u32 pb_Reserved1[2]; - __u32 pb_DevFlags; - __u8 pb_DriveName[32]; - __u32 pb_Reserved2[15]; - __u32 pb_Environment[17]; - __u32 pb_EReserved[15]; + u32 pb_ID; + u32 pb_SummedLongs; + s32 pb_ChkSum; + u32 pb_HostID; + u32 pb_Next; + u32 pb_Flags; + u32 pb_Reserved1[2]; + u32 pb_DevFlags; + u8 pb_DriveName[32]; + u32 pb_Reserved2[15]; + u32 pb_Environment[17]; + u32 pb_EReserved[15]; }; #define IDNAME_PARTITION 0x50415254 /* "PART" */ diff --git a/include/linux/amigaffs.h b/include/linux/amigaffs.h index 679f333e5..8e39a6fe2 100644 --- a/include/linux/amigaffs.h +++ b/include/linux/amigaffs.h @@ -56,131 +56,131 @@ struct root_front { - __s32 primary_type; - __s32 spare1[2]; - __s32 hash_size; - __s32 spare2; - __u32 checksum; - __s32 hashtable[0]; + s32 primary_type; + s32 spare1[2]; + s32 hash_size; + s32 spare2; + u32 checksum; + s32 hashtable[0]; }; struct root_end { - __s32 bm_flag; - __s32 bm_keys[25]; - __s32 bm_extend; + s32 bm_flag; + s32 bm_keys[25]; + s32 bm_extend; struct DateStamp dir_altered; - __u8 disk_name[40]; + u8 disk_name[40]; struct DateStamp disk_altered; struct DateStamp disk_made; - __s32 spare1[3]; - __s32 secondary_type; + s32 spare1[3]; + s32 secondary_type; }; struct dir_front { - __s32 primary_type; - __s32 own_key; - __s32 spare1[3]; - __u32 checksum; - __s32 hashtable[0]; + s32 primary_type; + s32 own_key; + s32 spare1[3]; + u32 checksum; + s32 hashtable[0]; }; struct dir_end { - __s32 spare1; - __s16 owner_uid; - __s16 owner_gid; - __u32 protect; - __s32 spare2; - __u8 comment[92]; + s32 spare1; + s16 owner_uid; + s16 owner_gid; + u32 protect; + s32 spare2; + u8 comment[92]; struct DateStamp created; - __u8 dir_name[32]; - __s32 spare3[2]; - __s32 link_chain; - __s32 spare4[5]; - __s32 hash_chain; - __s32 parent; - __s32 spare5; - __s32 secondary_type; + u8 dir_name[32]; + s32 spare3[2]; + s32 link_chain; + s32 spare4[5]; + s32 hash_chain; + s32 parent; + s32 spare5; + s32 secondary_type; }; struct file_front { - __s32 primary_type; - __s32 own_key; - __s32 block_count; - __s32 unknown1; - __s32 first_data; - __u32 checksum; - __s32 blocks[0]; + s32 primary_type; + s32 own_key; + s32 block_count; + s32 unknown1; + s32 first_data; + u32 checksum; + s32 blocks[0]; }; struct file_end { - __s32 spare1; - __s16 owner_uid; - __s16 owner_gid; - __u32 protect; - __s32 byte_size; - __u8 comment[92]; + s32 spare1; + s16 owner_uid; + s16 owner_gid; + u32 protect; + s32 byte_size; + u8 comment[92]; struct DateStamp created; - __u8 file_name[32]; - __s32 spare2; - __s32 original; /* not really in file_end */ - __s32 link_chain; - __s32 spare3[5]; - __s32 hash_chain; - __s32 parent; - __s32 extension; - __s32 secondary_type; + u8 file_name[32]; + s32 spare2; + s32 original; /* not really in file_end */ + s32 link_chain; + s32 spare3[5]; + s32 hash_chain; + s32 parent; + s32 extension; + s32 secondary_type; }; struct hlink_front { - __s32 primary_type; - __s32 own_key; - __s32 spare1[3]; - __u32 checksum; + s32 primary_type; + s32 own_key; + s32 spare1[3]; + u32 checksum; }; struct hlink_end { - __s32 spare1; - __s16 owner_uid; - __s16 owner_gid; - __u32 protect; - __u8 comment[92]; + s32 spare1; + s16 owner_uid; + s16 owner_gid; + u32 protect; + u8 comment[92]; struct DateStamp created; - __u8 link_name[32]; - __s32 spare2; - __s32 original; - __s32 link_chain; - __s32 spare3[5]; - __s32 hash_chain; - __s32 parent; - __s32 spare4; - __s32 secondary_type; + u8 link_name[32]; + s32 spare2; + s32 original; + s32 link_chain; + s32 spare3[5]; + s32 hash_chain; + s32 parent; + s32 spare4; + s32 secondary_type; }; struct slink_front { - __s32 primary_type; - __s32 own_key; - __s32 spare1[3]; - __s32 checksum; - __u8 symname[288]; /* depends on block size */ + s32 primary_type; + s32 own_key; + s32 spare1[3]; + s32 checksum; + u8 symname[288]; /* depends on block size */ }; struct data_front { - __s32 primary_type; - __s32 header_key; - __s32 sequence_number; - __s32 data_size; - __s32 next_data; - __s32 checksum; - __u8 data[488]; /* depends on block size */ + s32 primary_type; + s32 header_key; + s32 sequence_number; + s32 data_size; + s32 next_data; + s32 checksum; + u8 data[488]; /* depends on block size */ }; /* Permission bits */ diff --git a/include/linux/auto_fs.h b/include/linux/auto_fs.h index d32a6a253..2b25d2902 100644 --- a/include/linux/auto_fs.h +++ b/include/linux/auto_fs.h @@ -1,14 +1,14 @@ -/* -*- linux-c -*- --------------------------------------------------------- * - * +/* -*- linux-c -*- ------------------------------------------------------- * + * * linux/include/linux/auto_fs.h * - * Copyright 1997 Transmeta Corporation -- All Rights Reserved + * Copyright 1997 Transmeta Corporation - All Rights Reserved * * This file is part of the Linux kernel and is made available under * the terms of the GNU General Public License, version 2, or at your * option, any later version, incorporated herein by reference. * - * ------------------------------------------------------------------------- */ + * ----------------------------------------------------------------------- */ #ifndef _LINUX_AUTO_FS_H @@ -20,11 +20,11 @@ #include <linux/ioctl.h> #include <asm/types.h> -#define AUTOFS_PROTO_VERSION 2 +#define AUTOFS_PROTO_VERSION 3 enum autofs_packet_type { - autofs_ptype_missing, /* Missing entry (create wait queue) */ - /* ...need more in the future... */ + autofs_ptype_missing, /* Missing entry (mount request) */ + autofs_ptype_expire, /* Expire entry (umount request) */ }; struct autofs_packet_hdr { @@ -39,139 +39,24 @@ struct autofs_packet_missing { char name[NAME_MAX+1]; }; -#define AUTOFS_IOC_READY _IO(0x93,0x60) -#define AUTOFS_IOC_FAIL _IO(0x93,0x61) -#define AUTOFS_IOC_CATATONIC _IO(0x93,0x62) - -#ifdef __KERNEL__ - -#include <linux/wait.h> -#include <linux/sched.h> - -#if LINUX_VERSION_CODE < 0x20100 - -#include <asm/segment.h> -#define copy_to_user memcpy_tofs -#define copy_from_user memcpy_fromfs - -#else - -#include <asm/uaccess.h> -#define register_symtab(x) do { } while (0) - -#endif - -#ifndef DPRINTK -#ifdef DEBUG -#define DPRINTK(D) printk D; -#else -#define DPRINTK(D) -#endif -#endif - -#define AUTOFS_SUPER_MAGIC 0x0187 - -/* Structures associated with the root directory hash */ - -#define AUTOFS_HASH_SIZE 67 - -typedef u32 autofs_hash_t; /* Type returned by autofs_hash() */ - -struct autofs_dir_ent { - autofs_hash_t hash; - struct autofs_dir_ent *next; - struct autofs_dir_ent **back; - char *name; - int len; - ino_t ino; - time_t expiry; /* Reserved for use in failed-lookup cache */ -}; - -struct autofs_dirhash { - struct autofs_dir_ent *h[AUTOFS_HASH_SIZE]; -}; - -struct autofs_wait_queue { - unsigned long wait_queue_token; - struct wait_queue *queue; - struct autofs_wait_queue *next; - /* We use the following to see what we are waiting for */ - autofs_hash_t hash; - int len; - char *name; - /* This is for status reporting upon return */ - int status; - int wait_ctr; -}; - -struct autofs_symlink { +struct autofs_packet_expire { + struct autofs_packet_hdr hdr; int len; - char *data; - time_t mtime; + char name[NAME_MAX+1]; }; -#define AUTOFS_MAX_SYMLINKS 256 - -#define AUTOFS_ROOT_INO 1 -#define AUTOFS_FIRST_SYMLINK 2 -#define AUTOFS_FIRST_DIR_INO (AUTOFS_FIRST_SYMLINK+AUTOFS_MAX_SYMLINKS) +#define AUTOFS_IOC_READY _IO(0x93,0x60) +#define AUTOFS_IOC_FAIL _IO(0x93,0x61) +#define AUTOFS_IOC_CATATONIC _IO(0x93,0x62) +#define AUTOFS_IOC_PROTOVER _IOR(0x93,0x63,int) +#define AUTOFS_IOC_SETTIMEOUT _IOWR(0x93,0x64,unsigned long) +#define AUTOFS_IOC_EXPIRE _IOR(0x93,0x65,struct autofs_packet_expire) -#define AUTOFS_SYMLINK_BITMAP_LEN ((AUTOFS_MAX_SYMLINKS+31)/32) - -#ifndef END_OF_TIME -#define END_OF_TIME ((time_t)((unsigned long)((time_t)(~0UL)) >> 1)) -#endif - -struct autofs_sb_info { - struct file *pipe; - pid_t oz_pgrp; - int catatonic; - ino_t next_dir_ino; - struct autofs_wait_queue *queues; /* Wait queue pointer */ - struct autofs_dirhash dirhash; /* Root directory hash */ - struct autofs_symlink symlink[AUTOFS_MAX_SYMLINKS]; - u32 symlink_bitmap[AUTOFS_SYMLINK_BITMAP_LEN]; -}; - -/* autofs_oz_mode(): do we see the man behind the curtain? */ -static inline int autofs_oz_mode(struct autofs_sb_info *sbi) { - return sbi->catatonic || current->pgrp == sbi->oz_pgrp; -} +#ifdef __KERNEL__ /* Init function */ int init_autofs_fs(void); -/* Hash operations */ - -autofs_hash_t autofs_hash(const char *,int); -void autofs_initialize_hash(struct autofs_dirhash *); -struct autofs_dir_ent *autofs_hash_lookup(const struct autofs_dirhash *,autofs_hash_t,const char *,int); -void autofs_hash_insert(struct autofs_dirhash *,struct autofs_dir_ent *); -void autofs_hash_delete(struct autofs_dir_ent *); -struct autofs_dir_ent *autofs_hash_enum(const struct autofs_dirhash *,off_t *); -void autofs_hash_nuke(struct autofs_dirhash *); - -/* Operations structures */ - -extern struct inode_operations autofs_root_inode_operations; -extern struct inode_operations autofs_symlink_inode_operations; -extern struct inode_operations autofs_dir_inode_operations; - -/* Initializing function */ - -struct super_block *autofs_read_super(struct super_block *, void *,int); - -/* Queue management functions */ - -int autofs_wait(struct autofs_sb_info *,autofs_hash_t,const char *,int); -int autofs_wait_release(struct autofs_sb_info *,unsigned long,int); -void autofs_catatonic_mode(struct autofs_sb_info *); - -#ifdef DEBUG -void autofs_say(const char *name, int len); -#else -#define autofs_say(n,l) -#endif - #endif /* __KERNEL__ */ + #endif /* _LINUX_AUTO_FS_H */ diff --git a/include/linux/console.h b/include/linux/console.h index 7589ce794..16f1754ec 100644 --- a/include/linux/console.h +++ b/include/linux/console.h @@ -27,19 +27,20 @@ struct vc_data; /* DPC: 1994-04-13 !!! con_putcs is new entry !!! */ struct consw { - unsigned long (*con_startup)(unsigned long, char **); - void (*con_init)(struct vc_data *); - int (*con_deinit)(struct vc_data *); - int (*con_clear)(struct vc_data *, int, int, int, int); - int (*con_putc)(struct vc_data *, int, int, int); - int (*con_putcs)(struct vc_data *, const char *, int, int, int); - int (*con_cursor)(struct vc_data *, int); - int (*con_scroll)(struct vc_data *, int, int, int, int); - int (*con_bmove)(struct vc_data *, int, int, int, int, int, int); - int (*con_switch)(struct vc_data *); - int (*con_blank)(int); - int (*con_get_font)(struct vc_data *, int *, int *, char *); - int (*con_set_font)(struct vc_data *, int, int, char *); + unsigned long (*con_startup)(unsigned long, const char **); + void (*con_init)(struct vc_data *); + int (*con_deinit)(struct vc_data *); + int (*con_clear)(struct vc_data *, int, int, int, int); + int (*con_putc)(struct vc_data *, int, int, int); + int (*con_putcs)(struct vc_data *, const char *, int, int, int); + int (*con_cursor)(struct vc_data *, int); + int (*con_scroll)(struct vc_data *, int, int, int, int); + int (*con_bmove)(struct vc_data *, int, int, int, int, int, int); + int (*con_switch)(struct vc_data *); + int (*con_blank)(int); + int (*con_get_font)(struct vc_data *, int *, int *, char *); + int (*con_set_font)(struct vc_data *, int, int, char *); + int (*con_set_palette)(struct vc_data *, unsigned char *); }; extern struct consw *conswitchp; diff --git a/include/linux/cyclades.h b/include/linux/cyclades.h index efed32b4d..9386c17f0 100644 --- a/include/linux/cyclades.h +++ b/include/linux/cyclades.h @@ -1,4 +1,4 @@ -/* +/* $Revision: 1.7 $$Date: 1997/03/26 10:30:00 $ * linux/include/linux/cyclades.h * * This file is maintained by Marcio Saito <marcio@cyclades.com> and @@ -6,9 +6,18 @@ * * This file contains the general definitions for the cyclades.c driver *$Log: cyclades.h,v $ - * Revision 1.5 1995/11/13 21:13:31 bentson - * changes suggested by Michael Chastain <mec@duracef.shout.net> - * to support use of this file in non-kernel applications + *Revision 1.7 1997/03/26 10:30:00 daniel + *new entries at the end of cyclades_port struct to reallocate + *variables illegally allocated within card memory. + * + *Revision 1.6 1996/09/09 18:35:30 bentson + *fold in changes for Cyclom-Z -- including structures for + *communicating with board as well modest changes to original + *structures to support new features. + * + *Revision 1.5 1995/11/13 21:13:31 bentson + *changes suggested by Michael Chastain <mec@duracef.shout.net> + *to support use of this file in non-kernel applications * * */ @@ -35,14 +44,359 @@ struct cyclades_monitor { #define CYGETDEFTIMEOUT 0x435908 #define CYSETDEFTIMEOUT 0x435909 +/*************** CYCLOM-Z ADDITIONS ***************/ + +#define CZIOC ('M' << 8) +#define CZ_NBOARDS (CZIOC|0xfa) +#define CZ_BOOT_START (CZIOC|0xfb) +#define CZ_BOOT_DATA (CZIOC|0xfc) +#define CZ_BOOT_END (CZIOC|0xfd) +#define CZ_TEST (CZIOC|0xfe) + +#define MAX_BOARD 4 /* Max number of boards */ +#define MAX_PORT 128 /* Max number of ports per board */ +#define MAX_DEV 256 /* Max number of ports total */ + +#define CYZ_BOOT_NWORDS 0x100 +struct CYZ_BOOT_CTRL { + unsigned short nboard; + int status[MAX_BOARD]; + int nchannel[MAX_BOARD]; + int fw_rev[MAX_BOARD]; + unsigned long offset; + unsigned long data[CYZ_BOOT_NWORDS]; +}; + + +#ifndef DP_WINDOW_SIZE +/* #include "cyclomz.h" */ +/****************** ****************** *******************/ +/* + * The data types defined below are used in all ZFIRM interface + * data structures. They accomodate differences between HW + * architectures and compilers. + */ + +typedef unsigned long uclong; /* 32 bits, unsigned */ +typedef unsigned short ucshort; /* 16 bits, unsigned */ +typedef unsigned char ucchar; /* 8 bits, unsigned */ + +/* + * Memory Window Sizes + */ + +#define DP_WINDOW_SIZE (0x00080000) /* window size 512 Kb */ +#define CTRL_WINDOW_SIZE (0x00000100) /* runtime regs 256 bytes */ + +/* + * CUSTOM_REG - Cyclom-Z/PCI Custom Registers Set. The driver + * normally will access only interested on the fpga_id, fpga_version, + * start_cpu and stop_cpu. + */ + +struct CUSTOM_REG { + uclong fpga_id; /* FPGA Identification Register */ + uclong fpga_version; /* FPGA Version Number Register */ + uclong cpu_start; /* CPU start Register (write) */ + uclong cpu_stop; /* CPU stop Register (write) */ + uclong misc_reg; /* Miscelaneous Register */ + uclong idt_mode; /* IDT mode Register */ + uclong uart_irq_status; /* UART IRQ status Register */ + uclong clear_timer0_irq; /* Clear timer interrupt Register */ + uclong clear_timer1_irq; /* Clear timer interrupt Register */ + uclong clear_timer2_irq; /* Clear timer interrupt Register */ + uclong test_register; /* Test Register */ + uclong test_count; /* Test Count Register */ + uclong timer_select; /* Timer select register */ + uclong pr_uart_irq_status; /* Prioritized UART IRQ stat Reg */ + uclong ram_wait_state; /* RAM wait-state Register */ + uclong uart_wait_state; /* UART wait-state Register */ + uclong timer_wait_state; /* timer wait-state Register */ + uclong ack_wait_state; /* ACK wait State Register */ +}; + +/* + * RUNTIME_9060 - PLX PCI9060ES local configuration and shared runtime + * registers. This structure can be used to access the 9060 registers + * (memory mapped). + */ + +struct RUNTIME_9060 { + uclong loc_addr_range; /* 00h - Local Address Range */ + uclong loc_addr_base; /* 04h - Local Address Base */ + uclong loc_arbitr; /* 08h - Local Arbitration */ + uclong endian_descr; /* 0Ch - Big/Little Endian Descriptor */ + uclong loc_rom_range; /* 10h - Local ROM Range */ + uclong loc_rom_base; /* 14h - Local ROM Base */ + uclong loc_bus_descr; /* 18h - Local Bus descriptor */ + uclong loc_range_mst; /* 1Ch - Local Range for Master to PCI */ + uclong loc_base_mst; /* 20h - Local Base for Master PCI */ + uclong loc_range_io; /* 24h - Local Range for Master IO */ + uclong pci_base_mst; /* 28h - PCI Base for Master PCI */ + uclong pci_conf_io; /* 2Ch - PCI configuration for Master IO */ + uclong filler1; /* 30h */ + uclong filler2; /* 34h */ + uclong filler3; /* 38h */ + uclong filler4; /* 3Ch */ + uclong mail_box_0; /* 40h - Mail Box 0 */ + uclong mail_box_1; /* 44h - Mail Box 1 */ + uclong mail_box_2; /* 48h - Mail Box 2 */ + uclong mail_box_3; /* 4Ch - Mail Box 3 */ + uclong filler5; /* 50h */ + uclong filler6; /* 54h */ + uclong filler7; /* 58h */ + uclong filler8; /* 5Ch */ + uclong pci_doorbell; /* 60h - PCI to Local Doorbell */ + uclong loc_doorbell; /* 64h - Local to PCI Doorbell */ + uclong intr_ctrl_stat; /* 68h - Interrupt Control/Status */ + uclong init_ctrl; /* 6Ch - EEPROM control, Init Control, etc */ +}; + +/* Values for the Local Base Address re-map register */ + +#define WIN_RAM 0x00000001L /* set the sliding window to RAM */ +#define WIN_CREG 0x14000001L /* set the window to custom Registers */ + +/* Values timer select registers */ + +#define TIMER_BY_1M 0x00 /* clock divided by 1M */ +#define TIMER_BY_256K 0x01 /* clock divided by 256k */ +#define TIMER_BY_128K 0x02 /* clock divided by 128k */ +#define TIMER_BY_32K 0x03 /* clock divided by 32k */ + +/****************** ****************** *******************/ +#endif + +#ifndef ZFIRM_ID +/* #include "zfwint.h" */ +/****************** ****************** *******************/ +/* + * This file contains the definitions for interfacing with the + * Cyclom-Z ZFIRM Firmware. + */ + +/* General Constant definitions */ + +#define MAX_CHAN 64 /* max number of channels per board */ + +/* firmware id structure (set after boot) */ + +#define ID_ADDRESS 0x00000180L /* signature/pointer address */ +#define ZFIRM_ID 0x5557465AL /* ZFIRM/U signature */ +struct FIRM_ID { + uclong signature; /* ZFIRM/U signature */ + uclong zfwctrl_addr; /* pointer to ZFW_CTRL structure */ +}; + +/* Op. System id */ + +#define C_OS_LINUX 0x00000030 /* generic Linux system */ + +/* channel op_mode */ + +#define C_CH_DISABLE 0x00000000 /* channel is disabled */ +#define C_CH_TXENABLE 0x00000001 /* channel Tx enabled */ +#define C_CH_RXENABLE 0x00000002 /* channel Rx enabled */ +#define C_CH_ENABLE 0x00000003 /* channel Tx/Rx enabled */ +#define C_CH_LOOPBACK 0x00000004 /* Loopback mode */ + +/* comm_parity - parity */ + +#define C_PR_NONE 0x00000000 /* None */ +#define C_PR_ODD 0x00000001 /* Odd */ +#define C_PR_EVEN 0x00000002 /* Even */ +#define C_PR_MARK 0x00000004 /* Mark */ +#define C_PR_SPACE 0x00000008 /* Space */ +#define C_PR_PARITY 0x000000ff + +#define C_PR_DISCARD 0x00000100 /* discard char with frame/par error */ +#define C_PR_IGNORE 0x00000200 /* ignore frame/par error */ + +/* comm_data_l - data length and stop bits */ + +#define C_DL_CS5 0x00000001 +#define C_DL_CS6 0x00000002 +#define C_DL_CS7 0x00000004 +#define C_DL_CS8 0x00000008 +#define C_DL_CS 0x0000000f +#define C_DL_1STOP 0x00000010 +#define C_DL_15STOP 0x00000020 +#define C_DL_2STOP 0x00000040 +#define C_DL_STOP 0x000000f0 + +/* interrupt enabling/status */ + +#define C_IN_DISABLE 0x00000000 /* zero, disable interrupts */ +#define C_IN_TXBEMPTY 0x00000001 /* tx buffer empty */ +#define C_IN_TXLOWWM 0x00000002 /* tx buffer below LWM */ +#define C_IN_RXHIWM 0x00000010 /* rx buffer above HWM */ +#define C_IN_RXNNDT 0x00000020 /* rx no new data timeout */ +#define C_IN_MDCD 0x00000100 /* modem DCD change */ +#define C_IN_MDSR 0x00000200 /* modem DSR change */ +#define C_IN_MRI 0x00000400 /* modem RI change */ +#define C_IN_MCTS 0x00000800 /* modem CTS change */ +#define C_IN_RXBRK 0x00001000 /* Break received */ +#define C_IN_PR_ERROR 0x00002000 /* parity error */ +#define C_IN_FR_ERROR 0x00004000 /* frame error */ + +/* flow control */ + +#define C_FL_OXX 0x00000001 /* output Xon/Xoff flow control */ +#define C_FL_IXX 0x00000002 /* output Xon/Xoff flow control */ +#define C_FL_OIXANY 0x00000004 /* output Xon/Xoff (any xon) */ +#define C_FL_SWFLOW 0x0000000f + +/* flow status */ + +#define C_FS_TXIDLE 0x00000000 /* no Tx data in the buffer or UART */ +#define C_FS_SENDING 0x00000001 /* UART is sending data */ +#define C_FS_SWFLOW 0x00000002 /* Tx is stopped by received Xoff */ + +/* rs_control/rs_status RS-232 signals */ + +#define C_RS_DCD 0x00000100 /* CD */ +#define C_RS_DSR 0x00000200 /* DSR */ +#define C_RS_RI 0x00000400 /* RI */ +#define C_RS_CTS 0x00000800 /* CTS */ +#define C_RS_RTS 0x00000001 /* RTS */ +#define C_RS_DTR 0x00000004 /* DTR */ + +/* commands Host <-> Board */ + +#define C_CM_RESET 0x01 /* reset/flush buffers */ +#define C_CM_IOCTL 0x02 /* re-read CH_CTRL */ +#define C_CM_IOCTLW 0x03 /* re-read CH_CTRL, intr when done */ +#define C_CM_IOCTLM 0x04 /* RS-232 outputs change */ +#define C_CM_SENDXOFF 0x10 /* send Xoff */ +#define C_CM_SENDXON 0x11 /* send Xon */ +#define C_CM_CLFLOW 0x12 /* Clear flow control (resume) */ +#define C_CM_SENDBRK 0x41 /* send break */ +#define C_CM_INTBACK 0x42 /* Interrupt back */ +#define C_CM_SET_BREAK 0x43 /* Tx break on */ +#define C_CM_CLR_BREAK 0x44 /* Tx break off */ +#define C_CM_CMD_DONE 0x45 /* Previous command done */ +#define C_CM_TINACT 0x51 /* set inactivity detection */ +#define C_CM_IRQ_ENBL 0x52 /* enable generation of interrupts */ +#define C_CM_IRQ_DSBL 0x53 /* disable generation of interrupts */ +#define C_CM_ACK_ENBL 0x54 /* enable acknolowdged interrupt mode */ +#define C_CM_ACK_DSBL 0x55 /* disable acknolowdged intr mode */ +#define C_CM_FLUSH_RX 0x56 /* flushes Rx buffer */ +#define C_CM_FLUSH_TX 0x57 /* flushes Tx buffer */ + +#define C_CM_TXBEMPTY 0x60 /* Tx buffer is empty */ +#define C_CM_TXLOWWM 0x61 /* Tx buffer low water mark */ +#define C_CM_RXHIWM 0x62 /* Rx buffer high water mark */ +#define C_CM_RXNNDT 0x63 /* rx no new data timeout */ +#define C_CM_MDCD 0x70 /* modem DCD change */ +#define C_CM_MDSR 0x71 /* modem DSR change */ +#define C_CM_MRI 0x72 /* modem RI change */ +#define C_CM_MCTS 0x73 /* modem CTS change */ +#define C_CM_RXBRK 0x84 /* Break received */ +#define C_CM_PR_ERROR 0x85 /* Parity error */ +#define C_CM_FR_ERROR 0x86 /* Frame error */ +#define C_CM_CMDERROR 0x90 /* command error */ +#define C_CM_FATAL 0x91 /* fatal error */ +#define C_CM_HW_RESET 0x92 /* reset board */ + +/* + * CH_CTRL - This per port structure contains all parameters + * that control an specific port. It can be seen as the + * configuration registers of a "super-serial-controller". + */ + +struct CH_CTRL { + uclong op_mode; /* operation mode */ + uclong intr_enable; /* interrupt masking */ + uclong sw_flow; /* SW flow control */ + uclong flow_status; /* output flow status */ + uclong comm_baud; /* baud rate - numerically specified */ + uclong comm_parity; /* parity */ + uclong comm_data_l; /* data length/stop */ + uclong comm_flags; /* other flags */ + uclong hw_flow; /* HW flow control */ + uclong rs_control; /* RS-232 outputs */ + uclong rs_status; /* RS-232 inputs */ + uclong flow_xon; /* xon char */ + uclong flow_xoff; /* xoff char */ + uclong filler[3]; /* filler to align structures */ +}; + + +/* + * BUF_CTRL - This per channel structure contains + * all Tx and Rx buffer control for a given channel. + */ + +struct BUF_CTRL { + uclong flag_dma; /* buffers are in Host memory */ + uclong tx_bufaddr; /* address of the tx buffer */ + uclong tx_bufsize; /* tx buffer size */ + uclong tx_threshold; /* tx low water mark */ + uclong tx_get; /* tail index tx buf */ + uclong tx_put; /* head index tx buf */ + uclong rx_bufaddr; /* address of the rx buffer */ + uclong rx_bufsize; /* rx buffer size */ + uclong rx_threshold; /* rx high water mark */ + uclong rx_get; /* tail index rx buf */ + uclong rx_put; /* head index rx buf */ + uclong filler[5]; /* filler to align structures */ +}; + +/* + * BOARD_CTRL - This per board structure contains all global + * control fields related to the board. + */ + +struct BOARD_CTRL { + + /* static info provided by the on-board CPU */ + uclong n_channel; /* number of channels */ + uclong fw_version; /* firmware version */ + + /* static info provided by the driver */ + uclong op_system; /* op_system id */ + uclong dr_version; /* driver version */ + + /* board control area */ + uclong inactivity; /* inactivity control */ + + /* host to FW commands */ + uclong hcmd_channel; /* channel number */ + uclong *hcmd_param; /* pointer to parameters */ + + /* FW to Host commands */ + uclong fwcmd_channel; /* channel number */ + uclong *fwcmd_param; /* pointer to parameters */ + + /* filler so the structures are aligned */ + uclong filler[7]; +}; + +/* + * ZFW_CTRL - This is the data structure that includes all other + * data structures used by the Firmware. + */ + +struct ZFW_CTRL { + struct BOARD_CTRL board_ctrl; + struct CH_CTRL ch_ctrl[MAX_CHAN]; + struct BUF_CTRL buf_ctrl[MAX_CHAN]; +}; + +/****************** ****************** *******************/ +#endif + + + #ifdef __KERNEL__ /* Per card data structure */ struct cyclades_card { - int base_addr; + long base_addr; + long ctl_addr; int irq; - int num_chips; /* 0 if card is absent */ + int num_chips; /* 0 if card absent, 1 if Z/PCI, else Y */ int first_line; /* minor number of first channel on card */ int bus_index; /* address shift - 0 for ISA, 1 for PCI */ }; @@ -72,6 +426,7 @@ struct cyclades_port { int xmit_fifo_size; int cor1,cor2,cor3,cor4,cor5; int tbpr,tco,rbpr,rco; + int baud; int ignore_status_mask; int close_delay; int IER; /* Interrupt Enable Register */ @@ -95,6 +450,8 @@ struct cyclades_port { struct wait_queue *open_wait; struct wait_queue *close_wait; struct cyclades_monitor mon; + unsigned long jiffies[3]; + unsigned long rflush_count; }; /* @@ -111,6 +468,10 @@ struct cyclades_port { #define CyMaxChipsPerCard 8 +#define CyPCI_Ywin 0x4000 +#define CyPCI_Zctl 0x100 +#define CyPCI_Zwin 0x80000 + /**** CD1400 registers ****/ #define CyRegSize 0x0400 @@ -282,3 +643,4 @@ struct cyclades_port { #endif /* __KERNEL__ */ #endif /* _LINUX_CYCLADES_H */ + diff --git a/include/linux/digi1.h b/include/linux/digi1.h new file mode 100644 index 000000000..184378d23 --- /dev/null +++ b/include/linux/digi1.h @@ -0,0 +1,100 @@ +/* Definitions for DigiBoard ditty(1) command. */ + +#if !defined(TIOCMODG) +#define TIOCMODG ('d'<<8) | 250 /* get modem ctrl state */ +#define TIOCMODS ('d'<<8) | 251 /* set modem ctrl state */ +#endif + +#if !defined(TIOCMSET) +#define TIOCMSET ('d'<<8) | 252 /* set modem ctrl state */ +#define TIOCMGET ('d'<<8) | 253 /* set modem ctrl state */ +#endif + +#if !defined(TIOCMBIC) +#define TIOCMBIC ('d'<<8) | 254 /* set modem ctrl state */ +#define TIOCMBIS ('d'<<8) | 255 /* set modem ctrl state */ +#endif + +#if !defined(TIOCSDTR) +#define TIOCSDTR ('e'<<8) | 0 /* set DTR */ +#define TIOCCDTR ('e'<<8) | 1 /* clear DTR */ +#endif + +/************************************************************************ + * Ioctl command arguments for DIGI parameters. + ************************************************************************/ +#define DIGI_GETA ('e'<<8) | 94 /* Read params */ + +#define DIGI_SETA ('e'<<8) | 95 /* Set params */ +#define DIGI_SETAW ('e'<<8) | 96 /* Drain & set params */ +#define DIGI_SETAF ('e'<<8) | 97 /* Drain, flush & set params */ + +#define DIGI_GETFLOW ('e'<<8) | 99 /* Get startc/stopc flow */ + /* control characters */ +#define DIGI_SETFLOW ('e'<<8) | 100 /* Set startc/stopc flow */ + /* control characters */ +#define DIGI_GETAFLOW ('e'<<8) | 101 /* Get Aux. startc/stopc */ + /* flow control chars */ +#define DIGI_SETAFLOW ('e'<<8) | 102 /* Set Aux. startc/stopc */ + /* flow control chars */ + +#define DIGI_GETINFO ('e'<<8) | 103 /* Fill in digi_info */ +#define DIGI_POLLER ('e'<<8) | 104 /* Turn on/off poller */ +#define DIGI_INIT ('e'<<8) | 105 /* Allow things to run. */ + +struct digiflow_struct +{ + unsigned char startc; /* flow cntl start char */ + unsigned char stopc; /* flow cntl stop char */ +}; + +typedef struct digiflow_struct digiflow_t; + + +/************************************************************************ + * Values for digi_flags + ************************************************************************/ +#define DIGI_IXON 0x0001 /* Handle IXON in the FEP */ +#define DIGI_FAST 0x0002 /* Fast baud rates */ +#define RTSPACE 0x0004 /* RTS input flow control */ +#define CTSPACE 0x0008 /* CTS output flow control */ +#define DSRPACE 0x0010 /* DSR output flow control */ +#define DCDPACE 0x0020 /* DCD output flow control */ +#define DTRPACE 0x0040 /* DTR input flow control */ +#define DIGI_FORCEDCD 0x0100 /* Force carrier */ +#define DIGI_ALTPIN 0x0200 /* Alternate RJ-45 pin config */ +#define DIGI_AIXON 0x0400 /* Aux flow control in fep */ + + +/************************************************************************ + * Values for digiDload + ************************************************************************/ +#define NORMAL 0 +#define PCI_CTL 1 + +#define SIZE8 0 +#define SIZE16 1 +#define SIZE32 2 + +/************************************************************************ + * Structure used with ioctl commands for DIGI parameters. + ************************************************************************/ +struct digi_struct +{ + unsigned short digi_flags; /* Flags (see above) */ +}; + +typedef struct digi_struct digi_t; + +struct digi_info +{ + unsigned long board; /* Which board is this ? */ + unsigned char status; /* Alive or dead */ + unsigned char type; /* see epca.h */ + unsigned char subtype; /* For future XEM, XR, etc ... */ + unsigned short numports; /* Number of ports configured */ + unsigned char *port; /* I/O Address */ + unsigned char *membase; /* DPR Address */ + unsigned char *version; /* For future ... */ + unsigned short windowData; /* For future ... */ +} ; diff --git a/include/linux/digiFep1.h b/include/linux/digiFep1.h new file mode 100644 index 000000000..c47d7fcb8 --- /dev/null +++ b/include/linux/digiFep1.h @@ -0,0 +1,136 @@ + +#define CSTART 0x400L +#define CMAX 0x800L +#define ISTART 0x800L +#define IMAX 0xC00L +#define CIN 0xD10L +#define GLOBAL 0xD10L +#define EIN 0xD18L +#define FEPSTAT 0xD20L +#define CHANSTRUCT 0x1000L +#define RXTXBUF 0x4000L + + +struct global_data +{ + volatile ushort cin; + volatile ushort cout; + volatile ushort cstart; + volatile ushort cmax; + volatile ushort ein; + volatile ushort eout; + volatile ushort istart; + volatile ushort imax; +}; + + +struct board_chan +{ + int filler1; + int filler2; + volatile ushort tseg; + volatile ushort tin; + volatile ushort tout; + volatile ushort tmax; + + volatile ushort rseg; + volatile ushort rin; + volatile ushort rout; + volatile ushort rmax; + + volatile ushort tlow; + volatile ushort rlow; + volatile ushort rhigh; + volatile ushort incr; + + volatile ushort etime; + volatile ushort edelay; + volatile unchar *dev; + + volatile ushort iflag; + volatile ushort oflag; + volatile ushort cflag; + volatile ushort gmask; + + volatile ushort col; + volatile ushort delay; + volatile ushort imask; + volatile ushort tflush; + + int filler3; + int filler4; + int filler5; + int filler6; + + volatile unchar num; + volatile unchar ract; + volatile unchar bstat; + volatile unchar tbusy; + volatile unchar iempty; + volatile unchar ilow; + volatile unchar idata; + volatile unchar eflag; + + volatile unchar tflag; + volatile unchar rflag; + volatile unchar xmask; + volatile unchar xval; + volatile unchar mstat; + volatile unchar mchange; + volatile unchar mint; + volatile unchar lstat; + + volatile unchar mtran; + volatile unchar orun; + volatile unchar startca; + volatile unchar stopca; + volatile unchar startc; + volatile unchar stopc; + volatile unchar vnext; + volatile unchar hflow; + + volatile unchar fillc; + volatile unchar ochar; + volatile unchar omask; + + unchar filler7; + unchar filler8[28]; +}; + + +#define SRXLWATER 0xE0 +#define SRXHWATER 0xE1 +#define STOUT 0xE2 +#define PAUSETX 0xE3 +#define RESUMETX 0xE4 +#define SAUXONOFFC 0xE6 +#define SENDBREAK 0xE8 +#define SETMODEM 0xE9 +#define SETIFLAGS 0xEA +#define SONOFFC 0xEB +#define STXLWATER 0xEC +#define PAUSERX 0xEE +#define RESUMERX 0xEF +#define SETBUFFER 0xF2 +#define SETCOOKED 0xF3 +#define SETHFLOW 0xF4 +#define SETCTRLFLAGS 0xF5 +#define SETVNEXT 0xF6 + + + +#define BREAK_IND 0x01 +#define LOWTX_IND 0x02 +#define EMPTYTX_IND 0x04 +#define DATA_IND 0x08 +#define MODEMCHG_IND 0x20 + +#define FEP_HUPCL 0002000 +#if 0 +#define RTS 0x02 +#define CD 0x08 +#define DSR 0x10 +#define CTS 0x20 +#define RI 0x40 +#define DTR 0x80 +#endif diff --git a/include/linux/digiPCI.h b/include/linux/digiPCI.h new file mode 100644 index 000000000..6ca7819e5 --- /dev/null +++ b/include/linux/digiPCI.h @@ -0,0 +1,42 @@ +/************************************************************************* + * Defines and structure definitions for PCI BIOS Interface + *************************************************************************/ +#define PCIMAX 32 /* maximum number of PCI boards */ + + +#define PCI_VENDOR_DIGI 0x114F +#define PCI_DEVICE_EPC 0x0002 +#define PCI_DEVICE_RIGHTSWITCH 0x0003 /* For testing */ +#define PCI_DEVICE_XEM 0x0004 +#define PCI_DEVICE_XR 0x0005 +#define PCI_DEVICE_CX 0x0006 +#define PCI_DEVICE_XRJ 0x0009 /* Jupiter boards with */ +#define PCI_DEVICE_EPCJ 0x000a /* PLX 9060 chip for PCI */ + + +/* + * On the PCI boards, there is no IO space allocated + * The I/O registers will be in the first 3 bytes of the + * upper 2MB of the 4MB memory space. The board memory + * will be mapped into the low 2MB of the 4MB memory space + */ + +/* Potential location of PCI Bios from E0000 to FFFFF*/ +#define PCI_BIOS_SIZE 0x00020000 + +/* Size of Memory and I/O for PCI (4MB) */ +#define PCI_RAM_SIZE 0x00400000 + +/* Size of Memory (2MB) */ +#define PCI_MEM_SIZE 0x00200000 + +/* Offset of I/0 in Memory (2MB) */ +#define PCI_IO_OFFSET 0x00200000 + +#define MEMOUTB(basemem, pnum, setmemval) *(caddr_t)((basemem) + ( PCI_IO_OFFSET | pnum << 4 | pnum )) = (setmemval) +#define MEMINB(basemem, pnum) *(caddr_t)((basemem) + (PCI_IO_OFFSET | pnum << 4 | pnum )) /* for PCI I/O */ + + + + + diff --git a/include/linux/elf.h b/include/linux/elf.h index 17258a19b..5ca3653f1 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h @@ -3,11 +3,20 @@ #include <asm/elf.h> -typedef unsigned long Elf32_Addr; -typedef unsigned short Elf32_Half; -typedef unsigned long Elf32_Off; -typedef long Elf32_Sword; -typedef unsigned long Elf32_Word; +/* 32-bit ELF base types. */ +typedef __u32 Elf32_Addr; +typedef __u16 Elf32_Half; +typedef __u32 Elf32_Off; +typedef __s32 Elf32_Sword; +typedef __u32 Elf32_Word; + +/* 64-bit ELF base types. */ +typedef __u64 Elf64_Addr; +typedef __u16 Elf64_Half; +typedef __s16 Elf64_SHalf; +typedef __u64 Elf64_Off; +typedef __s64 Elf64_Sword; +typedef __u64 Elf64_Word; /* These constants are for the segment types stored in the image headers */ #define PT_NULL 0 @@ -152,10 +161,10 @@ typedef struct dynamic{ } Elf32_Dyn; typedef struct { - unsigned long long d_tag; /* entry tag value */ + Elf64_Word d_tag; /* entry tag value */ union { - unsigned long long d_val; - unsigned long long d_ptr; + Elf64_Word d_val; + Elf64_Word d_ptr; } d_un; } Elf64_Dyn; @@ -299,8 +308,8 @@ typedef struct elf32_rel { } Elf32_Rel; typedef struct elf64_rel { - unsigned long long r_offset; /* Location at which to apply the action */ - unsigned long long r_info; /* index and type of relocation */ + Elf64_Addr r_offset; /* Location at which to apply the action */ + Elf64_Word r_info; /* index and type of relocation */ } Elf64_Rel; typedef struct elf32_rela{ @@ -310,9 +319,9 @@ typedef struct elf32_rela{ } Elf32_Rela; typedef struct elf64_rela { - unsigned long long r_offset; /* Location at which to apply the action */ - unsigned long long r_info; /* index and type of relocation */ - unsigned long long r_addend; /* Constant addend used to compute value */ + Elf64_Addr r_offset; /* Location at which to apply the action */ + Elf64_Word r_info; /* index and type of relocation */ + Elf64_Word r_addend; /* Constant addend used to compute value */ } Elf64_Rela; typedef struct elf32_sym{ @@ -325,12 +334,12 @@ typedef struct elf32_sym{ } Elf32_Sym; typedef struct elf64_sym { - unsigned int st_name; /* Symbol name, index in string tbl */ - unsigned char st_info; /* Type and binding attributes */ - unsigned char st_other; /* No defined meaning, 0 */ - unsigned short st_shndx; /* Associated section index */ - unsigned long long st_value; /* Value of the symbol */ - unsigned long long st_size; /* Associated symbol size */ + Elf32_Word st_name; /* Symbol name, index in string tbl (yes, Elf32) */ + unsigned char st_info; /* Type and binding attributes */ + unsigned char st_other; /* No defined meaning, 0 */ + Elf64_Half st_shndx; /* Associated section index */ + Elf64_Addr st_value; /* Value of the symbol */ + Elf64_Word st_size; /* Associated symbol size */ } Elf64_Sym; @@ -355,19 +364,19 @@ typedef struct elf32_hdr{ typedef struct elf64_hdr { unsigned char e_ident[16]; /* ELF "magic number" */ - short int e_type; - short unsigned int e_machine; - int e_version; - unsigned long long e_entry; /* Entry point virtual address */ - unsigned long long e_phoff; /* Program header table file offset */ - unsigned long long e_shoff; /* Section header table file offset */ - int e_flags; - short int e_ehsize; - short int e_phentsize; - short int e_phnum; - short int e_shentsize; - short int e_shnum; - short int e_shstrndx; + Elf64_SHalf e_type; + Elf64_Half e_machine; + __s32 e_version; + Elf64_Addr e_entry; /* Entry point virtual address */ + Elf64_Off e_phoff; /* Program header table file offset */ + Elf64_Off e_shoff; /* Section header table file offset */ + __s32 e_flags; + Elf64_SHalf e_ehsize; + Elf64_SHalf e_phentsize; + Elf64_SHalf e_phnum; + Elf64_SHalf e_shentsize; + Elf64_SHalf e_shnum; + Elf64_SHalf e_shstrndx; } Elf64_Ehdr; /* These constants define the permissions on sections in the program @@ -388,14 +397,14 @@ typedef struct elf32_phdr{ } Elf32_Phdr; typedef struct elf64_phdr { - int p_type; - int p_flags; - unsigned long long p_offset; /* Segment file offset */ - unsigned long long p_vaddr; /* Segment virtual address */ - unsigned long long p_paddr; /* Segment physical address */ - unsigned long long p_filesz; /* Segment size in file */ - unsigned long long p_memsz; /* Segment size in memory */ - unsigned long long p_align; /* Segment alignment, file & memory */ + __s32 p_type; + __s32 p_flags; + Elf64_Off p_offset; /* Segment file offset */ + Elf64_Addr p_vaddr; /* Segment virtual address */ + Elf64_Addr p_paddr; /* Segment physical address */ + Elf64_Word p_filesz; /* Segment size in file */ + Elf64_Word p_memsz; /* Segment size in memory */ + Elf64_Word p_align; /* Segment alignment, file & memory */ } Elf64_Phdr; /* sh_type */ @@ -452,16 +461,16 @@ typedef struct { } Elf32_Shdr; typedef struct elf64_shdr { - unsigned int sh_name; /* Section name, index in string tbl */ - unsigned int sh_type; /* Type of section */ - unsigned long long sh_flags; /* Miscellaneous section attributes */ - unsigned long long sh_addr; /* Section virtual addr at execution */ - unsigned long long sh_offset; /* Section file offset */ - unsigned long long sh_size; /* Size of section in bytes */ - unsigned int sh_link; /* Index of another section */ - unsigned int sh_info; /* Additional section information */ - unsigned long long sh_addralign; /* Section alignment */ - unsigned long long sh_entsize; /* Entry size if section holds table */ + Elf32_Word sh_name; /* Section name, index in string tbl (yes Elf32) */ + Elf32_Word sh_type; /* Type of section (yes Elf32) */ + Elf64_Word sh_flags; /* Miscellaneous section attributes */ + Elf64_Addr sh_addr; /* Section virtual addr at execution */ + Elf64_Off sh_offset; /* Section file offset */ + Elf64_Word sh_size; /* Size of section in bytes */ + Elf32_Word sh_link; /* Index of another section (yes Elf32) */ + Elf32_Word sh_info; /* Additional section information (yes Elf32) */ + Elf64_Word sh_addralign; /* Section alignment */ + Elf64_Word sh_entsize; /* Entry size if section holds table */ } Elf64_Shdr; #define EI_MAG0 0 /* e_ident[] indexes */ @@ -513,9 +522,9 @@ typedef struct elf32_note { * is only 32 bits. */ typedef struct elf64_note { - unsigned int n_namesz; /* Name size */ - unsigned int n_descsz; /* Content size */ - unsigned int n_type; /* Content type */ + Elf32_Word n_namesz; /* Name size */ + Elf32_Word n_descsz; /* Content size */ + Elf32_Word n_type; /* Content type */ } Elf64_Nhdr; #define ELF_START_MMAP 0x80000000 diff --git a/include/linux/epca.h b/include/linux/epca.h new file mode 100644 index 000000000..504948149 --- /dev/null +++ b/include/linux/epca.h @@ -0,0 +1,170 @@ +#define XEMPORTS 0xC02 +#define XEPORTS 0xC22 + +#define MAX_ALLOC 0x100 + +#define MAXBOARDS 12 +#define FEPCODESEG 0x0200L +#define FEPCODE 0x2000L +#define BIOSCODE 0xf800L + +#define MISCGLOBAL 0x0C00L +#define NPORT 0x0C22L +#define MBOX 0x0C40L +#define PORTBASE 0x0C90L + +/* Begin code defines used for epca_setup */ + +#define INVALID_BOARD_TYPE 0x1 +#define INVALID_NUM_PORTS 0x2 +#define INVALID_MEM_BASE 0x4 +#define INVALID_PORT_BASE 0x8 +#define INVALID_BOARD_STATUS 0x10 +#define INVALID_ALTPIN 0x20 + +/* End code defines used for epca_setup */ + + +#define FEPCLR 0x00 +#define FEPMEM 0x02 +#define FEPRST 0x04 +#define FEPINT 0x08 +#define FEPMASK 0x0e +#define FEPWIN 0x80 + +#define PCXE 0 +#define PCXEVE 1 +#define PCXEM 2 +#define EISAXEM 3 +#define PC64XE 4 +#define PCXI 5 +#define PCIXEM 7 +#define PCICX 8 +#define PCIXR 9 +#define PCIXRJ 10 +#define EPCA_NUM_TYPES 6 + + +static char *board_desc[] = +{ + "PC/Xe", + "PC/Xeve", + "PC/Xem", + "EISA/Xem", + "PC/64Xe", + "PC/Xi", + "unknown", + "PCI/Xem", + "PCI/CX", + "PCI/Xr", + "PCI/Xrj", +}; + +#define STARTC 021 +#define STOPC 023 +#define IAIXON 0x2000 + + +#define TXSTOPPED 0x1 +#define LOWWAIT 0x2 +#define EMPTYWAIT 0x4 +#define RXSTOPPED 0x8 +#define TXBUSY 0x10 + +#define DISABLED 0 +#define ENABLED 1 +#define OFF 0 +#define ON 1 + +#define FEPTIMEOUT 200000 +#define SERIAL_TYPE_NORMAL 1 +#define SERIAL_TYPE_CALLOUT 2 +#define SERIAL_TYPE_INFO 3 +#define EPCA_EVENT_HANGUP 1 +#define EPCA_MAGIC 0x5c6df104L + +struct channel +{ + long magic; + unchar boardnum; + unchar channelnum; + unchar omodem; /* FEP output modem status */ + unchar imodem; /* FEP input modem status */ + unchar modemfake; /* Modem values to be forced */ + unchar modem; /* Force values */ + unchar hflow; + unchar dsr; + unchar dcd; + unchar m_rts ; /* The bits used in whatever FEP */ + unchar m_dcd ; /* is indiginous to this board to */ + unchar m_dsr ; /* represent each of the physical */ + unchar m_cts ; /* handshake lines */ + unchar m_ri ; + unchar m_dtr ; + unchar stopc; + unchar startc; + unchar stopca; + unchar startca; + unchar fepstopc; + unchar fepstartc; + unchar fepstopca; + unchar fepstartca; + unchar txwin; + unchar rxwin; + ushort fepiflag; + ushort fepcflag; + ushort fepoflag; + ushort txbufhead; + ushort txbufsize; + ushort rxbufhead; + ushort rxbufsize; + int close_delay; + int count; + int blocked_open; + int event; + int asyncflags; + uint dev; + long session; + long pgrp; + ulong statusflags; + ulong c_iflag; + ulong c_cflag; + ulong c_lflag; + ulong c_oflag; + unchar *txptr; + unchar *rxptr; + unchar *tmp_buf; + struct board_info *board; + volatile struct board_chan *brdchan; + struct digi_struct digiext; + struct tty_struct *tty; + struct termios normal_termios; + struct termios callout_termios; + struct wait_queue *open_wait; + struct wait_queue *close_wait; + struct tq_struct tqueue; + volatile struct global_data *mailbox; +}; + +struct board_info +{ + unchar status; + unchar type; + unchar altpin; + ushort numports; + unchar *port; + unchar *membase; + unchar *re_map_port; + unchar *re_map_membase; + ulong memory_seg; + void ( * memwinon ) (struct board_info *, unsigned int) ; + void ( * memwinoff ) (struct board_info *, unsigned int) ; + void ( * globalwinon ) (struct channel *) ; + void ( * txwinon ) (struct channel *) ; + void ( * rxwinon ) (struct channel *) ; + void ( * memoff ) (struct channel *) ; + void ( * assertgwinon ) (struct channel *) ; + void ( * assertmemoff ) (struct channel *) ; + unchar poller_inhibited ; +}; + diff --git a/include/linux/epcaconfig.h b/include/linux/epcaconfig.h new file mode 100644 index 000000000..c840c6735 --- /dev/null +++ b/include/linux/epcaconfig.h @@ -0,0 +1,8 @@ +#define NUMCARDS 1 +#define NBDEVS 2 + +struct board_info static_boards[NUMCARDS]={ + { ENABLED, 0, OFF, 2, (unchar*) 0x320, (unchar*) 0xd0000 }, +}; + +/* DO NOT HAND EDIT THIS FILE! */ diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h index bd87ebcf5..b5f2b5f15 100644 --- a/include/linux/ext2_fs.h +++ b/include/linux/ext2_fs.h @@ -189,6 +189,7 @@ struct ext2_group_desc #define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */ #define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */ #define EXT2_NODUMP_FL 0x00000040 /* do not dump file */ +#define EXT2_NOATIME_FL 0x00000080 /* do not update atime */ #define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ /* @@ -363,7 +364,10 @@ struct ext2_super_block { __u32 s_feature_compat; /* compatible feature set */ __u32 s_feature_incompat; /* incompatible feature set */ __u32 s_feature_ro_compat; /* readonly-compatible feature set */ - __u32 s_reserved[230]; /* Padding to the end of the block */ + __u8 s_uuid[16]; /* 128-bit uuid for volume */ + char s_volume_name[16]; /* volume name */ + char s_last_mounted[64]; /* directory where last mounted */ + __u32 s_reserved[206]; /* Padding to the end of the block */ }; /* @@ -387,6 +391,16 @@ struct ext2_super_block { #define EXT2_GOOD_OLD_INODE_SIZE 128 /* + * Feature set definitions + */ + +#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 + +#define EXT2_FEATURE_COMPAT_SUPP 0 +#define EXT2_FEATURE_INCOMPAT_SUPP 0 +#define EXT2_FEATURE_RO_COMPAT_SUPP EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER + +/* * Default values for user and/or group using reserved blocks */ #define EXT2_DEF_RESUID 0 @@ -414,13 +428,6 @@ struct ext2_dir_entry { #define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \ ~EXT2_DIR_ROUND) -/* - * Feature set definitions --- none are defined as of now - */ -#define EXT2_FEATURE_COMPAT_SUPP 0 -#define EXT2_FEATURE_INCOMPAT_SUPP 0 -#define EXT2_FEATURE_RO_COMPAT_SUPP 0 - #ifdef __KERNEL__ /* * Function prototypes diff --git a/include/linux/ext2_fs_sb.h b/include/linux/ext2_fs_sb.h index dd064b86a..9ce758116 100644 --- a/include/linux/ext2_fs_sb.h +++ b/include/linux/ext2_fs_sb.h @@ -60,6 +60,9 @@ struct ext2_sb_info { int s_desc_per_block_bits; int s_inode_size; int s_first_ino; + int s_feature_compat; + int s_feature_incompat; + int s_feature_ro_compat; }; #endif /* _LINUX_EXT2_FS_SB */ diff --git a/include/linux/fb.h b/include/linux/fb.h index f97a313c6..9ed7546d5 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -59,6 +59,7 @@ struct fb_bitfield { #define FB_ACCEL_ATARIBLITT 1 /* Atari Blitter */ #define FB_ACCEL_AMIGABLITT 2 /* Amiga Blitter */ #define FB_ACCEL_CYBERVISION 3 /* Cybervision64 (S3 Trio64) */ +#define FB_ACCEL_RETINAZ3 4 /* RetinaZ3 (NCR77C32BLT) */ #define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */ #define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */ @@ -205,6 +206,7 @@ struct fb_info { int (*switch_con)(int); /* tell fb to switch consoles */ int (*updatevar)(int); /* tell fb to update the vars */ void (*blank)(int); /* tell fb to (un)blank the screen */ + int (*setcmap)(struct fb_cmap *, int); /* tell fb to set the colormap */ }; #endif /* __KERNEL__ */ diff --git a/include/linux/file.h b/include/linux/file.h index 4ba5311e8..0cb531c0c 100644 --- a/include/linux/file.h +++ b/include/linux/file.h @@ -13,16 +13,37 @@ extern inline struct file * fget(unsigned long fd) } extern int __fput(struct file *, struct inode *); +extern void insert_file_free(struct file *file); + +/* It does not matter which list it is on. */ +extern inline void remove_filp(struct file *file) +{ + if(file->f_next) + file->f_next->f_pprev = file->f_pprev; + *file->f_pprev = file->f_next; +} extern inline int fput(struct file *file, struct inode *inode) { int count = file->f_count-1; int error = 0; - if (!count) + if (!count) { error = __fput(file, inode); - file->f_count = count; + file->f_count = 0; + remove_filp(file); + insert_file_free(file); + } else + file->f_count = count; return error; } +extern inline void put_filp(struct file *file) +{ + if(--file->f_count == 0) { + remove_filp(file); + insert_file_free(file); + } +} + #endif diff --git a/include/linux/fs.h b/include/linux/fs.h index 85e04d184..1918471ab 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -95,7 +95,6 @@ extern int max_files, nr_files; * Exception: MS_RDONLY is always applied to the entire file system. */ #define IS_RDONLY(inode) (((inode)->i_sb) && ((inode)->i_sb->s_flags & MS_RDONLY)) -#define DO_UPDATE_ATIME(inode) (!((inode)->i_flags & MS_NOATIME) && !IS_RDONLY(inode)) #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) @@ -105,6 +104,8 @@ extern int max_files, nr_files; #define IS_WRITABLE(inode) ((inode)->i_flags & S_WRITE) #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 DO_UPDATE_ATIME(inode) (!IS_NOATIME(inode) && !IS_RDONLY(inode)) /* 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. */ @@ -129,7 +130,7 @@ extern int max_files, nr_files; extern void buffer_init(void); extern void inode_init(void); -extern unsigned long file_table_init(unsigned long start, unsigned long end); +extern void file_table_init(void); extern unsigned long name_cache_init(unsigned long start, unsigned long end); typedef char buffer_block[BLOCK_SIZE]; @@ -246,6 +247,7 @@ static inline int buffer_protected(struct buffer_head * bh) #define ATTR_ATIME_SET 128 #define ATTR_MTIME_SET 256 #define ATTR_FORCE 512 /* Not a change, but a change it */ +#define ATTR_ATTR_FLAG 1024 /* * This is the Inode Attributes structure, used for notify_change(). It @@ -265,8 +267,17 @@ struct iattr { time_t ia_atime; time_t ia_mtime; time_t ia_ctime; + unsigned int ia_attr_flags; }; +/* + * This is the inode attributes flag definitions + */ +#define ATTR_FLAG_SYNCRONOUS 1 /* Syncronous write */ +#define ATTR_FLAG_NOATIME 2 /* Don't update atime */ +#define ATTR_FLAG_APPEND 4 /* Append-only file */ +#define ATTR_FLAG_IMMUTABLE 8 /* Immutable file */ + #include <linux/quota.h> struct inode { @@ -305,9 +316,8 @@ struct inode { unsigned char i_dirt; unsigned char i_pipe; unsigned char i_sock; - unsigned char i_seek; - unsigned char i_update; - unsigned short i_writecount; + int i_writecount; + unsigned int i_attr_flags; union { struct pipe_inode_info pipe_i; struct minix_inode_info minix_i; @@ -327,17 +337,21 @@ struct inode { }; struct file { - mode_t f_mode; - loff_t f_pos; - unsigned short f_flags; - unsigned short f_count; - unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin; - struct file *f_next, *f_prev; - int f_owner; /* pid or -pgrp where SIGIO should be sent */ - struct inode * f_inode; - struct file_operations * f_op; - unsigned long f_version; - void *private_data; /* needed for tty driver, and maybe others */ + struct file *f_next, **f_pprev; + struct inode *f_inode; + struct file_operations *f_op; + mode_t f_mode; + loff_t f_pos; + unsigned short f_count, f_flags; + unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin; + + /* pid or -pgrp where SIGIO should be sent */ + int f_owner; + + unsigned long f_version; + + /* needed for tty driver, and maybe others */ + void *private_data; }; #define FL_POSIX 1 @@ -584,7 +598,7 @@ extern int fs_may_mount(kdev_t dev); extern int fs_may_umount(kdev_t dev, struct inode * mount_root); extern int fs_may_remount_ro(kdev_t dev); -extern struct file *first_file; +extern struct file *inuse_filps; extern struct super_block super_blocks[NR_SUPER]; extern void refile_buffer(struct buffer_head * buf); @@ -597,15 +611,14 @@ extern int nr_buffer_heads; #define BUF_CLEAN 0 #define BUF_LOCKED 1 /* Buffers scheduled for write */ -#define BUF_LOCKED1 2 /* Supers, inodes */ -#define BUF_DIRTY 3 /* Dirty buffers, not yet scheduled for write */ -#define NR_LIST 4 +#define BUF_DIRTY 2 /* Dirty buffers, not yet scheduled for write */ +#define NR_LIST 3 void mark_buffer_uptodate(struct buffer_head * bh, int on); extern inline void mark_buffer_clean(struct buffer_head * bh) { - if (clear_bit(BH_Dirty, &bh->b_state)) { + if (test_and_clear_bit(BH_Dirty, &bh->b_state)) { if (bh->b_list == BUF_DIRTY) refile_buffer(bh); } @@ -613,7 +626,7 @@ extern inline void mark_buffer_clean(struct buffer_head * bh) extern inline void mark_buffer_dirty(struct buffer_head * bh, int flag) { - if (!set_bit(BH_Dirty, &bh->b_state)) { + if (!test_and_set_bit(BH_Dirty, &bh->b_state)) { set_writetime(bh, flag); if (bh->b_list != BUF_DIRTY) refile_buffer(bh); diff --git a/include/linux/in6.h b/include/linux/in6.h index 9a6954c29..0996e2d58 100644 --- a/include/linux/in6.h +++ b/include/linux/in6.h @@ -104,7 +104,7 @@ struct ipv6_mreq { */ #define IPV6_ADDRFORM 1 -#define IPV6_RXINFO 2 +#define IPV6_PKTINFO 2 #define IPV6_RXHOPOPTS 3 #define IPV6_RXDSTOPTS 4 #define IPV6_RXSRCRT 5 @@ -115,8 +115,6 @@ struct ipv6_mreq { /* * Alternative names */ -#define IPV6_TXINFO IPV6_RXINFO -#define SCM_SRCINFO IPV6_TXINFO #define SCM_SRCRT IPV6_RXSRCRT #define IPV6_UNICAST_HOPS 16 diff --git a/include/linux/inet.h b/include/linux/inet.h index 9bd28d56e..acb93765f 100644 --- a/include/linux/inet.h +++ b/include/linux/inet.h @@ -45,8 +45,8 @@ #ifdef __KERNEL__ extern void inet_proto_init(struct net_proto *pro); -extern char *in_ntoa(unsigned long in); -extern unsigned long in_aton(const char *str); +extern char *in_ntoa(__u32 in); +extern __u32 in_aton(const char *str); #endif #endif /* _LINUX_INET_H */ diff --git a/include/linux/keyboard.h b/include/linux/keyboard.h index 91dacb14d..d54377d96 100644 --- a/include/linux/keyboard.h +++ b/include/linux/keyboard.h @@ -302,7 +302,7 @@ extern struct wait_queue * keypress_wait; #define K_F243 K(KT_FN,252) #define K_F244 K(KT_FN,253) #define K_F245 K(KT_FN,254) -#define K_F246 K(KT_FN,255) +#define K_UNDO K(KT_FN,255) #define K_HOLE K(KT_SPEC,0) @@ -347,8 +347,10 @@ extern struct wait_queue * keypress_wait; #define K_PCOMMA K(KT_PAD,15) /* key-pad comma: kludge... */ #define K_PDOT K(KT_PAD,16) /* key-pad dot (period): kludge... */ #define K_PPLUSMINUS K(KT_PAD,17) /* key-pad plus/minus */ +#define K_PPARENL K(KT_PAD,18) /* key-pad left parenthesis */ +#define K_PPARENR K(KT_PAD,19) /* key-pad right parenthesis */ -#define NR_PAD 18 +#define NR_PAD 20 #define K_DGRAVE K(KT_DEAD,0) #define K_DACUTE K(KT_DEAD,1) diff --git a/include/linux/locks.h b/include/linux/locks.h index 37933f63e..9e32ef883 100644 --- a/include/linux/locks.h +++ b/include/linux/locks.h @@ -22,7 +22,7 @@ extern inline void wait_on_buffer(struct buffer_head * bh) extern inline void lock_buffer(struct buffer_head * bh) { - while (set_bit(BH_Lock, &bh->b_state)) + while (test_and_set_bit(BH_Lock, &bh->b_state)) __wait_on_buffer(bh); } diff --git a/include/linux/lp_m68k.h b/include/linux/lp_m68k.h index 6cd60e19d..ca8f7a31d 100644 --- a/include/linux/lp_m68k.h +++ b/include/linux/lp_m68k.h @@ -91,7 +91,8 @@ enum lp_type { LP_UNKNOWN = 0, LP_AMIGA = 1, LP_ATARI = 2, -LP_MFC = 3 +LP_MFC = 3, +LP_IOEXT = 4 }; /* @@ -105,10 +106,10 @@ struct lp_struct { int (*lp_is_busy)(int); int (*lp_has_pout)(int); int (*lp_is_online)(int); - int (*lp_my_interrupt)(int); + int (*lp_dummy)(int); int (*lp_ioctl)(int, unsigned int, unsigned long); - void (*lp_open)(void); /* for module use counter */ - void (*lp_release)(void); /* for module use counter */ + int (*lp_open)(int); /* for module use counter */ + void (*lp_release)(int); /* for module use counter */ int flags; /*for BUSY... */ unsigned int chars; /*busy timeout */ unsigned int time; /*wait time */ @@ -124,7 +125,7 @@ struct lp_struct { extern struct lp_struct *lp_table[MAX_LP]; extern unsigned int lp_irq; -void lp_interrupt(int, void *, struct pt_regs *); +void lp_interrupt(int dev); int lp_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 ee58c06f0..6e785af86 100644 --- a/include/linux/major.h +++ b/include/linux/major.h @@ -70,6 +70,7 @@ #define RISCOM8_NORMAL_MAJOR 48 #define RISCOM8_CALLOUT_MAJOR 49 #define MKISS_MAJOR 55 +#define DSP56K_MAJOR 55 /* DSP56001 processor device */ /* * Tests for SCSI devices. diff --git a/include/linux/malloc.h b/include/linux/malloc.h index 0ef085783..f3ebf1857 100644 --- a/include/linux/malloc.h +++ b/include/linux/malloc.h @@ -1,11 +1,5 @@ #ifndef _LINUX_MALLOC_H #define _LINUX_MALLOC_H -#include <linux/mm.h> - -void * kmalloc(unsigned int size, int priority); -void kfree(void * obj); - -#define kfree_s(a,b) kfree(a) - +#include <linux/slab.h> #endif /* _LINUX_MALLOC_H */ diff --git a/include/linux/mm.h b/include/linux/mm.h index 9572b3415..6ebf15a55 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -37,18 +37,15 @@ struct vm_area_struct { unsigned long vm_end; pgprot_t vm_page_prot; unsigned short vm_flags; -/* AVL tree of VM areas per task, sorted by address */ - short vm_avl_height; - struct vm_area_struct * vm_avl_left; - struct vm_area_struct * vm_avl_right; -/* linked list of VM areas per task, sorted by address */ - struct vm_area_struct * vm_next; -/* for areas with inode, the circular list inode->i_mmap */ -/* for shm areas, the circular list of attaches */ -/* otherwise unused */ - struct vm_area_struct * vm_next_share; - struct vm_area_struct * vm_prev_share; -/* more */ + struct vm_area_struct *vm_next; + struct vm_area_struct **vm_pprev; + + /* For areas with inode, the list inode->i_mmap, for shm areas, + * the list of attaches, otherwise unused. + */ + struct vm_area_struct *vm_next_share; + struct vm_area_struct **vm_pprev_share; + struct vm_operations_struct * vm_ops; unsigned long vm_offset; struct inode * vm_inode; @@ -140,6 +137,7 @@ typedef struct page { #define PG_decr_after 5 #define PG_swap_unlock_after 6 #define PG_DMA 7 +#define PG_Slab 8 #define PG_reserved 31 /* Make it prettier to test the above... */ @@ -152,8 +150,12 @@ typedef struct page { #define PageDecrAfter(page) (test_bit(PG_decr_after, &(page)->flags)) #define PageSwapUnlockAfter(page) (test_bit(PG_swap_unlock_after, &(page)->flags)) #define PageDMA(page) (test_bit(PG_DMA, &(page)->flags)) +#define PageSlab(page) (test_bit(PG_Slab, &(page)->flags)) #define PageReserved(page) (test_bit(PG_reserved, &(page)->flags)) +#define PageSetSlab(page) (set_bit(PG_Slab, &(page)->flags)) +#define PageClearSlab(page) (clear_bit(PG_Slab, &(page)->flags)) + /* * page->reserved denotes a page which must never be accessed (which * may not even be present). @@ -263,9 +265,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 void vmtruncate(struct inode * inode, unsigned long offset); -extern void handle_mm_fault(struct vm_area_struct *vma, unsigned long address, int write_access); -extern void do_wp_page(struct task_struct * tsk, struct vm_area_struct * vma, unsigned long address, int write_access); -extern void do_no_page(struct task_struct * tsk, struct vm_area_struct * vma, unsigned long address, int write_access); +extern void handle_mm_fault(struct task_struct *tsk,struct vm_area_struct *vma, unsigned long address, int write_access); extern unsigned long paging_init(unsigned long start_mem, unsigned long end_mem); extern void mem_init(unsigned long start_mem, unsigned long end_mem); @@ -279,8 +279,6 @@ extern unsigned long do_mmap(struct file * file, unsigned long addr, unsigned lo unsigned long prot, unsigned long flags, unsigned long off); extern void merge_segments(struct mm_struct *, unsigned long, unsigned long); extern void insert_vm_struct(struct mm_struct *, struct vm_area_struct *); -extern void remove_shared_vm_struct(struct vm_area_struct *); -extern void build_mmap_avl(struct mm_struct *); extern void exit_mmap(struct mm_struct *); extern int do_munmap(unsigned long, size_t); extern unsigned long get_unmapped_area(unsigned long, unsigned long); @@ -325,38 +323,30 @@ static inline int expand_stack(struct vm_area_struct * vma, unsigned long addres return 0; } -#define avl_empty (struct vm_area_struct *) NULL - /* Look up the first VMA which satisfies addr < vm_end, NULL if none. */ static inline struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr) { - struct vm_area_struct * result = NULL; + struct vm_area_struct *vma = NULL; if (mm) { - struct vm_area_struct ** next = &mm->mmap_avl; - for (;;) { - struct vm_area_struct *tree = *next; - if (tree == avl_empty) - break; - next = &tree->vm_avl_right; - if (tree->vm_end <= addr) - continue; - next = &tree->vm_avl_left; - result = tree; - if (tree->vm_start <= addr) - break; + /* Check the cache first. */ + vma = mm->mmap_cache; + if(!vma || (vma->vm_end <= addr) || (vma->vm_start > addr)) { + vma = mm->mmap; + while(vma && vma->vm_end <= addr) + vma = vma->vm_next; + mm->mmap_cache = vma; } } - return result; + return vma; } /* Look up the first VMA which intersects the interval start_addr..end_addr-1, NULL if none. Assume start_addr < end_addr. */ static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr) { - struct vm_area_struct * vma; + struct vm_area_struct * vma = find_vma(mm,start_addr); - vma = find_vma(mm,start_addr); if (vma && end_addr <= vma->vm_start) vma = NULL; return vma; diff --git a/include/linux/pci.h b/include/linux/pci.h index 58c4e026b..10c0f76b7 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -27,7 +27,7 @@ * displayed at boot time, please report * - /proc/pci * - your exact hardware description. Try to find out - * which device is unknown. It may be you mainboard chipset. + * which device is unknown. It may be your mainboard chipset. * PCI-CPU bridge or PCI-ISA bridge. * - If you can't find the actual information in your hardware * booklet, try to read the references of the chip on the board. @@ -331,6 +331,7 @@ #define PCI_VENDOR_ID_HP 0x103c #define PCI_DEVICE_ID_HP_J2585A 0x1030 +#define PCI_DEVICE_ID_HP_J2585B 0x1031 #define PCI_VENDOR_ID_PCTECH 0x1042 #define PCI_DEVICE_ID_PCTECH_RZ1000 0x1000 @@ -408,6 +409,9 @@ #define PCI_DEVICE_ID_VISION_QD8500 0x0001 #define PCI_DEVICE_ID_VISION_QD8580 0x0002 +#define PCI_VENDOR_ID_BROOKTREE 0x109e +#define PCI_DEVICE_ID_BT848 0x0350 /* 0x350 = 848 */ + #define PCI_VENDOR_ID_SIERRA 0x10a8 #define PCI_DEVICE_ID_SIERRA_STB 0x0000 @@ -595,6 +599,7 @@ #define PCI_DEVICE_ID_INTEL_82437VX 0x7030 #define PCI_DEVICE_ID_INTEL_82371AB 0x7111 #define PCI_DEVICE_ID_INTEL_P6 0x84c4 +#define PCI_DEVICE_ID_INTEL_P6_2 0x84c5 #define PCI_VENDOR_ID_KTI 0x8e2e #define PCI_DEVICE_ID_KTI_ET32P2 0x3000 diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index 0937a7bc1..48d9ae98f 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h @@ -162,12 +162,14 @@ enum scsi_directory_inos { PROC_SCSI_7000FASST, PROC_SCSI_IBMMCA, PROC_SCSI_EATA2X, + PROC_SCSI_DC390T, PROC_SCSI_AM53C974, PROC_SCSI_SSC, PROC_SCSI_NCR53C406A, PROC_SCSI_PPA, PROC_SCSI_ESP, PROC_SCSI_QLOGICPTI, + PROC_SCSI_AMIGA7XX, PROC_SCSI_A3000, PROC_SCSI_A2091, PROC_SCSI_GVP11, diff --git a/include/linux/sched.h b/include/linux/sched.h index c8ec07ab4..215774036 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1,14 +1,6 @@ #ifndef _LINUX_SCHED_H #define _LINUX_SCHED_H -/* - * define DEBUG if you want the wait-queues to have some extra - * debugging code. It's not normally used, but might catch some - * wait-queue coding errors. - * - * #define DEBUG - */ - #include <asm/param.h> /* for HZ */ extern unsigned long event; @@ -17,6 +9,8 @@ extern unsigned long event; #include <linux/personality.h> #include <linux/tasks.h> #include <linux/kernel.h> +#include <linux/types.h> +#include <linux/times.h> #include <asm/system.h> #include <asm/semaphore.h> @@ -66,9 +60,6 @@ extern unsigned long avenrun[]; /* Load averages */ extern int nr_running, nr_tasks; extern int last_pid; -#define FIRST_TASK task[0] -#define LAST_TASK task[NR_TASKS-1] - #include <linux/head.h> #include <linux/fs.h> #include <linux/signal.h> @@ -149,29 +140,28 @@ struct fs_struct { } struct mm_struct { - int count; + struct vm_area_struct *mmap, *mmap_cache; pgd_t * pgd; + int count; + struct semaphore mmap_sem; unsigned long context; unsigned long start_code, end_code, start_data, end_data; unsigned long start_brk, brk, start_stack, start_mmap; unsigned long arg_start, arg_end, env_start, env_end; unsigned long rss, total_vm, locked_vm; unsigned long def_flags; - struct vm_area_struct * mmap; - struct vm_area_struct * mmap_avl; - struct semaphore mmap_sem; + unsigned long cpu_vm_mask; }; -#define INIT_MM { \ - 1, \ - swapper_pg_dir, \ - 0, \ - 0, 0, 0, 0, \ - 0, 0, 0, 0, \ - 0, 0, 0, 0, \ - 0, 0, 0, \ - 0, \ - &init_mmap, &init_mmap, MUTEX } +#define INIT_MM { \ + &init_mmap, NULL, swapper_pg_dir, 1, \ + MUTEX, \ + 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, 0, \ + 0, 0, 0, \ + 0, 0 } struct signal_struct { atomic_t count; @@ -200,8 +190,6 @@ struct task_struct { struct linux_binfmt *binfmt; struct task_struct *next_task, *prev_task; struct task_struct *next_run, *prev_run; - unsigned long saved_kernel_stack; - unsigned long kernel_stack_page; int exit_code, exit_signal; /* ??? */ unsigned long personality; @@ -222,6 +210,14 @@ struct task_struct { * p->p_pptr->pid) */ struct task_struct *p_opptr, *p_pptr, *p_cptr, *p_ysptr, *p_osptr; + + /* PID hash table linkage. */ + struct task_struct *pidhash_next; + struct task_struct **pidhash_pprev; + + /* Pointer to task[] array linkage. */ + struct task_struct **tarray_ptr; + struct wait_queue *wait_chldexit; /* for wait4() */ unsigned short uid,euid,suid,fsuid; unsigned short gid,egid,sgid,fsgid; @@ -229,7 +225,8 @@ struct task_struct { 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; - long utime, stime, cutime, cstime, start_time; + struct tms times; + unsigned long start_time; /* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */ unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap; int swappable:1; @@ -260,6 +257,7 @@ struct task_struct { /* signal handlers */ struct signal_struct *sig; /* SMP state */ + int has_cpu; int processor; int last_processor; int lock_depth; /* Lock depth. We can context switch in and out of holding a syscall kernel lock... */ @@ -294,6 +292,16 @@ struct task_struct { #define DEF_PRIORITY (20*HZ/100) /* 200 ms time slices */ +/* Note: This is very ugly I admit. But some versions of gcc will + * dump core when an empty structure constant is parsed at + * the end of a large top level structure initialization. -DaveM + */ +#ifdef __SMP__ +#define INIT_LOCKS SPIN_LOCK_UNLOCKED +#else +#define INIT_LOCKS +#endif + /* * INIT_TASK is used to set up the first task table, touch at * your own risk!. Base=0, limit=0x1fffff (=2MB) @@ -304,15 +312,17 @@ struct task_struct { /* exec domain */&default_exec_domain, \ /* binfmt */ NULL, \ /* schedlink */ &init_task,&init_task, &init_task, &init_task, \ -/* stack */ 0,(unsigned long) &init_kernel_stack, \ /* ec,brk... */ 0,0,0,0,0, \ /* pid etc.. */ 0,0,0,0,0, \ /* suppl grps*/ 0, {0,}, \ -/* proc links*/ &init_task,&init_task,NULL,NULL,NULL,NULL, \ +/* proc links*/ &init_task,&init_task,NULL,NULL,NULL, \ +/* pidhash */ NULL, NULL, \ +/* tarray */ &task[0], \ +/* chld wait */ NULL, \ /* uid etc */ 0,0,0,0,0,0,0,0, \ /* timeout */ 0,SCHED_OTHER,0,0,0,0,0,0,0, \ /* timer */ { NULL, NULL, 0, 0, it_real_fn }, \ -/* utime */ 0,0,0,0,0, \ +/* utime */ {0,0,0,0},0, \ /* flt */ 0,0,0,0,0,0, \ /* swp */ 0,0,0,0,0, \ /* rlimits */ INIT_RLIMITS, \ @@ -326,14 +336,88 @@ struct task_struct { /* files */ &init_files, \ /* mm */ &init_mm, \ /* signals */ &init_signals, \ -/* SMP */ 0,0,0, \ +/* SMP */ 0,0,0,0, \ +/* locks */ INIT_LOCKS \ } +union task_union { + struct task_struct task; + unsigned long stack[2048]; +}; + +extern union task_union init_task_union; + extern struct mm_struct init_mm; -extern struct task_struct init_task; extern struct task_struct *task[NR_TASKS]; extern struct task_struct *last_task_used_math; +extern struct task_struct **tarray_freelist; +extern spinlock_t taskslot_lock; + +extern __inline__ void add_free_taskslot(struct task_struct **t) +{ + spin_lock(&taskslot_lock); + *t = (struct task_struct *) tarray_freelist; + tarray_freelist = t; + spin_unlock(&taskslot_lock); +} + +extern __inline__ struct task_struct **get_free_taskslot(void) +{ + struct task_struct **tslot; + + spin_lock(&taskslot_lock); + if((tslot = tarray_freelist) != NULL) + tarray_freelist = (struct task_struct **) *tslot; + spin_unlock(&taskslot_lock); + + return tslot; +} + +/* PID hashing. */ +#define PIDHASH_SZ (NR_TASKS >> 2) +extern struct task_struct *pidhash[PIDHASH_SZ]; +extern spinlock_t pidhash_lock; + +#define pid_hashfn(x) ((((x) >> 8) ^ (x)) & (PIDHASH_SZ - 1)) + +extern __inline__ void hash_pid(struct task_struct *p) +{ + struct task_struct **htable = &pidhash[pid_hashfn(p->pid)]; + + spin_lock(&pidhash_lock); + if((p->pidhash_next = *htable) != NULL) + (*htable)->pidhash_pprev = &p->pidhash_next; + *htable = p; + p->pidhash_pprev = htable; + spin_unlock(&pidhash_lock); +} + +extern __inline__ void unhash_pid(struct task_struct *p) +{ + spin_lock(&pidhash_lock); + if(p->pidhash_next) + p->pidhash_next->pidhash_pprev = p->pidhash_pprev; + *p->pidhash_pprev = p->pidhash_next; + spin_unlock(&pidhash_lock); +} + +extern __inline__ struct task_struct *find_task_by_pid(int pid) +{ + struct task_struct **htable = &pidhash[pid_hashfn(pid)]; + struct task_struct *p; + + spin_lock(&pidhash_lock); + for(p = *htable; p && p->pid != pid; p = p->pidhash_next) + ; + spin_unlock(&pidhash_lock); + + return p; +} + +/* per-UID process charging. */ +extern int charge_uid(struct task_struct *p, int count); + #include <asm/current.h> extern unsigned long volatile jiffies; @@ -425,15 +509,15 @@ extern inline void __add_wait_queue(struct wait_queue ** p, struct wait_queue * wait->next = next; } -extern spinlock_t waitqueue_lock; +extern rwlock_t waitqueue_lock; extern inline void add_wait_queue(struct wait_queue ** p, struct wait_queue * wait) { unsigned long flags; - spin_lock_irqsave(&waitqueue_lock, flags); + write_lock_irqsave(&waitqueue_lock, flags); __add_wait_queue(p, wait); - spin_unlock_irqrestore(&waitqueue_lock, flags); + write_unlock_irqrestore(&waitqueue_lock, flags); } extern inline void __remove_wait_queue(struct wait_queue ** p, struct wait_queue * wait) @@ -454,9 +538,9 @@ extern inline void remove_wait_queue(struct wait_queue ** p, struct wait_queue * { unsigned long flags; - spin_lock_irqsave(&waitqueue_lock, flags); + write_lock_irqsave(&waitqueue_lock, flags); __remove_wait_queue(p, wait); - spin_unlock_irqrestore(&waitqueue_lock, flags); + write_unlock_irqrestore(&waitqueue_lock, flags); } extern inline void poll_wait(struct wait_queue ** wait_address, poll_table * p) diff --git a/include/linux/serial.h b/include/linux/serial.h index 372a06e51..f03f33dd5 100644 --- a/include/linux/serial.h +++ b/include/linux/serial.h @@ -46,7 +46,8 @@ struct serial_struct { #define PORT_16650 6 #define PORT_16650V2 7 #define PORT_16750 8 -#define PORT_MAX 8 +#define PORT_STARTECH 9 +#define PORT_MAX 9 struct serial_uart_config { char *name; diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 86a5e6417..a2617b15c 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -123,6 +123,9 @@ struct sk_buff #endif }; +/* These are just the default values. This is run time configurable. + * FIXME: Probably the config option should go away. -- erics + */ #ifdef CONFIG_SKB_LARGE #define SK_WMEM_MAX 65535 #define SK_RMEM_MAX 65535 @@ -410,13 +413,15 @@ extern __inline__ void skb_unlink(struct sk_buff *skb) restore_flags(flags); } +extern const char skb_put_errstr[]; +extern const char skb_push_errstr[]; + /* * Add data to an sk_buff */ extern __inline__ unsigned char *skb_put(struct sk_buff *skb, unsigned int len) { - extern char *skb_put_errstr; unsigned char *tmp=skb->tail; skb->tail+=len; skb->len+=len; @@ -431,7 +436,6 @@ here: ; extern __inline__ unsigned char *skb_push(struct sk_buff *skb, unsigned int len) { - extern char *skb_push_errstr; skb->data-=len; skb->len+=len; if(skb->data<skb->head) diff --git a/include/linux/slab.h b/include/linux/slab.h index ccd2ba1d3..08be13221 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -12,6 +12,7 @@ typedef struct kmem_cache_s kmem_cache_t; #include <linux/mm.h> +#include <asm/cache.h> /* flags for kmem_cache_alloc() */ #define SLAB_BUFFER GFP_BUFFER /* 0x00 */ @@ -22,38 +23,48 @@ typedef struct kmem_cache_s kmem_cache_t; #define SLAB_NFS GFP_NFS /* 0x05 */ #define SLAB_DMA GFP_DMA /* 0x08 */ #define SLAB_LEVEL_MASK GFP_LEVEL_MASK /* 0x0f */ -#define SLAB_NO_GROW 0x00001000UL /* don't add another slab during an alloc */ +#define SLAB_NO_GROW 0x00001000UL /* don't grow a cache */ /* flags to pass to kmem_cache_create(). - * The first 3 are only valid when the allocator has been build + * The first 3 are only valid when the allocator as been build * SLAB_DEBUG_SUPPORT. */ -#define SLAB_DEBUG_FREE 0x00000100UL /* Peform time consuming ptr checks on free */ -#define SLAB_DEBUG_INITIAL 0x00000200UL /* Call constructor, on release, to conform state */ +#define SLAB_DEBUG_FREE 0x00000100UL /* Peform (expensive) checks on free */ +#define SLAB_DEBUG_INITIAL 0x00000200UL /* Call constructor (as verifier) */ #define SLAB_RED_ZONE 0x00000400UL /* Red zone objs in a cache */ -#define SLAB_HWCACHE_ALIGN 0x00000800UL /* align objs on an hw cache line */ +#define SLAB_POISION 0x00000800UL /* Poision objects */ +#define SLAB_NO_REAP 0x00001000UL /* never reap from the cache */ +#define SLAB_HWCACHE_ALIGN 0x00002000UL /* align objs on a h/w cache lines */ +#if 0 +#define SLAB_HIGH_PACK 0x00004000UL /* XXX */ +#endif /* flags passed to a constructor func */ #define SLAB_CTOR_CONSTRUCTOR 0x001UL /* if not set, then deconstructor */ #define SLAB_CTOR_ATOMIC 0x002UL /* tell constructor it can't sleep */ -#define SLAB_DTOR_ATOMIC 0x002UL /* tell deconstructor it can't sleep */ #define SLAB_CTOR_VERIFY 0x004UL /* tell constructor it's a verify call */ /* prototypes */ extern long kmem_cache_init(long, long); extern void kmem_cache_sizes_init(void); -extern struct kmem_cache_s *kmem_cache_create(const char *, unsigned long, unsigned long, unsigned long, void (*)(void *, int, unsigned long), void (*)(void *, int, unsigned long)); -extern int kmem_cache_destroy(struct kmem_cache_s *); -extern int kmem_cache_shrink(struct kmem_cache_s *, int); -extern void *kmem_cache_alloc(struct kmem_cache_s *, unsigned long); -extern void kmem_cache_free(struct kmem_cache_s *, void *); -extern void *kmem_alloc(unsigned long, unsigned long); -extern void kmem_free(void *, unsigned long); +extern kmem_cache_t *kmem_find_general_cachep(size_t); +extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long, + void (*)(void *, kmem_cache_t *, unsigned long), + void (*)(void *, kmem_cache_t *, unsigned long)); +extern int kmem_cache_shrink(kmem_cache_t *); +extern void *kmem_cache_alloc(kmem_cache_t *, int); +extern void kmem_cache_free(kmem_cache_t *, void *); + +extern void *kmalloc(size_t, int); +extern void kfree(void *); +extern void kfree_s(void *, size_t); + extern int kmem_cache_reap(int, int, int); extern int get_slabinfo(char *); -/* System wide slabs. */ -extern kmem_cache_t *vm_area_cachep; +/* System wide caches */ +extern kmem_cache_t *vm_area_cachep; +extern kmem_cache_t *mm_cachep; #endif /* __KERNEL__ */ diff --git a/include/linux/smp.h b/include/linux/smp.h index 72984f154..ff4427960 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h @@ -47,6 +47,7 @@ extern volatile int smp_msg_id; #define smp_num_cpus 1 #define smp_processor_id() 0 +#define hard_smp_processor_id() 0 #define smp_message_pass(t,m,d,w) #define smp_threads_ready 1 #define kernel_lock() diff --git a/include/linux/socket.h b/include/linux/socket.h index 756d4cca6..6d0ed9158 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h @@ -50,7 +50,6 @@ struct cmsghdr { __kernel_size_t cmsg_len; /* data byte count, including hdr */ int cmsg_level; /* originating protocol */ int cmsg_type; /* protocol-specific type */ - unsigned char cmsg_data[0]; }; /* @@ -58,17 +57,13 @@ struct cmsghdr { * Table 5-14 of POSIX 1003.1g */ -#define CMSG_DATA(cmsg) (cmsg)->cmsg_data #define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr(mhdr, cmsg) #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) ) -/* Stevens's Adv. API specifies CMSG_SPACE & CMSG_LENGTH, - * I cannot understand, what the differenece? --ANK - */ - -#define CMSG_SPACE(len) CMSG_ALIGN((len)+sizeof(struct cmsghdr)) -#define CMSG_LENGTH(len) CMSG_ALIGN((len)+sizeof(struct cmsghdr)) +#define CMSG_DATA(cmsg) ((void *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr))) +#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len)) +#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) #define CMSG_FIRSTHDR(msg) ((msg)->msg_controllen >= sizeof(struct cmsghdr) ? \ (struct cmsghdr *)(msg)->msg_control : \ @@ -136,6 +131,7 @@ struct ucred #define AF_DECNET 12 /* Reserved for DECnet project */ #define AF_NETBEUI 13 /* Reserved for 802.2LLC project*/ #define AF_SECURITY 14 /* Security callback pseudo AF */ +#define pseudo_AF_KEY 15 /* PF_KEY key management API */ #define AF_MAX 32 /* For now.. */ /* Protocol families, same as address families. */ @@ -155,6 +151,7 @@ struct ucred #define PF_DECNET AF_DECNET #define PF_NETBEUI AF_NETBEUI #define PF_SECURITY AF_SECURITY +#define PF_KEY pseudo_AF_KEY #define PF_MAX AF_MAX diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 17e80e975..60fb2d74f 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -23,7 +23,7 @@ struct rpc_portmap { __u32 pm_prog; __u32 pm_vers; __u32 pm_prot; - __u32 pm_port; + __u16 pm_port; }; /* diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index 0e01fba0f..e66f2bd87 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h @@ -104,6 +104,13 @@ enum /* /proc/sys/net/core */ +enum +{ + NET_CORE_WMEM_MAX=1, + NET_CORE_RMEM_MAX, + NET_CORE_WMEM_DEFAULT, + NET_CORE_RMEM_DEFAULT, +}; /* /proc/sys/net/ethernet */ @@ -140,6 +147,9 @@ enum NET_IPV4_ACCEPT_REDIRECTS, NET_IPV4_SECURE_REDIRECTS, NET_IPV4_RFC1620_REDIRECTS, + NET_TCP_SYN_RETRIES, + NET_IPFRAG_HIGH_THRESH, + NET_IPFRAG_LOW_THRESH, }; diff --git a/include/linux/tqueue.h b/include/linux/tqueue.h index acebad9f2..de88d20d1 100644 --- a/include/linux/tqueue.h +++ b/include/linux/tqueue.h @@ -83,7 +83,7 @@ extern spinlock_t tqueue_lock; extern __inline__ void queue_task(struct tq_struct *bh_pointer, task_queue *bh_list) { - if (!set_bit(0,&bh_pointer->sync)) { + if (!test_and_set_bit(0,&bh_pointer->sync)) { unsigned long flags; spin_lock_irqsave(&tqueue_lock, flags); bh_pointer->next = *bh_list; diff --git a/include/linux/tty.h b/include/linux/tty.h index 7546d632d..109955a8d 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -294,6 +294,7 @@ extern int lp_init(void); extern int pty_init(void); extern int tty_init(void); extern int pcxe_init(void); +extern int pc_init(void); extern int vcs_init(void); extern int cy_init(void); extern int stl_init(void); @@ -336,11 +337,15 @@ extern int n_tty_ioctl(struct tty_struct * tty, struct file * file, /* serial.c */ extern long serial_console_init(long kmem_start, long kmem_end); - + /* pcxx.c */ extern int pcxe_open(struct tty_struct *tty, struct file *filp); +/* epca.c */ + +extern int pc_open(struct tty_struct *tty, struct file *filp); + /* console.c */ extern void update_screen(int new_console); diff --git a/include/linux/zorro.h b/include/linux/zorro.h index e19289877..95148b35d 100644 --- a/include/linux/zorro.h +++ b/include/linux/zorro.h @@ -301,648 +301,6 @@ #define PROD_MASTER_CARD_SCSI (0x04) /* Master Card SCSI Controller */ #define PROD_MVD_819 (0x07) /* MVD 819 */ -#define MANUF_DELACOMP (0x0873) /* DelaComp */ -#define PROD_DELACOMP_RAM_2000 (0x01) /* RAM Expansion 2000 */ - -#define MANUF_VILLAGE_TRONIC (0x0877) /* Village Tronic */ -#define PROD_DOMINO_RAM (0x01) /* Domino Graphics Board */ -#define PROD_DOMINO_REG (0x02) -#define PROD_PICASSO_II_RAM (0x0B) /* Picasso II/II+ Graphics Board */ -#define PROD_PICASSO_II_REG (0x0C) -#define PROD_PICASSO_II_SEGM (0x0D) /* Picasso II/II+ (Segmented Mode) */ -#define PROD_PICASSO_IV (0x15) /* Picassio IV Graphics Board */ -#define PROD_PICASSO_IV_2 (0x16) -#define PROD_PICASSO_IV_3 (0x17) -#define PROD_PICASSO_IV_4 (0x18) -#define PROD_ARIADNE (0xC9) /* Ariadne Ethernet */ - -#define MANUF_UTILITIES_ULTD (0x087B) /* Utilities Unlimited */ -#define PROD_EMPLANT_DELUXE (0x15) /* Emplant Deluxe SCSI Controller */ -#define PROD_EMPLANT_DELUXE2 (0x20) /* Emplant Deluxe SCSI Controller */ - -#define MANUF_AMITRIX (0x0880) /* Amitrix */ -#define PROD_AMITRIX_MULTI_IO (0x01) /* Multi-IO */ -#define PROD_AMITRIX_CD_RAM (0x02) /* CD-RAM Memory */ - -#define MANUF_ARMAX (0x0885) /* ArMax */ -#define PROD_OMNIBUS (0x00) /* OmniBus Graphics Board */ - -#define MANUF_NEWTEK (0x088F) /* NewTek */ -#define PROD_VIDEOTOASTER (0x00) /* VideoToaster */ - -#define MANUF_MTEC (0x0890) /* M-Tech Germany */ -#define PROD_AT500 (0x01) /* AT500 IDE Controller */ -#define PROD_MTEC_68030 (0x03) /* 68030 Turbo Board */ -#define PROD_MTEC_68020I (0x06) /* 68020i Turbo Board */ -#define PROD_MTEC_T1230 (0x20) /* A1200 T68030/42 RTC Turbo Board */ -#define PROD_MTEC_RAM (0x22) /* MTEC 8MB RAM */ - -#define MANUF_GVP2 (0x0891) /* Great Valley Products */ -#define PROD_SPECTRUM_RAM (0x01) /* EGS 28/24 Spectrum Graphics Board */ -#define PROD_SPECTRUM_REG (0x02) - -#define MANUF_HELFRICH2 (0x0893) /* Helfrich */ -#define PROD_PICCOLO_RAM (0x05) /* Piccolo Graphics Board */ -#define PROD_PICCOLO_REG (0x06) -#define PROD_PEGGY_PLUS (0x07) /* PeggyPlus MPEG Decoder Board */ -#define PROD_VIDEOCRUNCHER (0x08) /* VideoCruncher */ -#define PROD_SD64_RAM (0x0A) /* SD64 Graphics Board */ -#define PROD_SD64_REG (0x0B) - -#define MANUF_MACROSYSTEMS (0x089B) /* MacroSystems USA */ -#define PROD_WARP_ENGINE (0x13) /* Warp Engine 40xx SCSI Controller */ - -#define MANUF_ELBOX (0x089E) /* ElBox Computer */ -#define PROD_ELBOX_1200 (0x06) /* Elbox 1200/4 RAM */ - -#define MANUF_HARMS_PROF (0x0A00) /* Harms Professional */ -#define PROD_HARMS_030_PLUS (0x10) /* 030 plus */ -#define PROD_3500_TURBO (0xD0) /* 3500 Turbo board */ - -#define MANUF_MICRONIK (0x0A50) /* Micronik */ -#define PROD_RCA_120 (0x0A) /* RCA 120 RAM */ - -#define MANUF_MEGA_MICRO (0x1000) /* MegaMicro */ -#define PROD_SCRAM_500_SCSI (0x03) /* SCRAM 500 SCSI Controller */ -#define PROD_SCRAM_500_RAM (0x04) /* SCRAM 500 RAM */ - -#define MANUF_IMTRONICS2 (0x1028) /* Imtronics */ -#define PROD_HURRICANE_2800_3 (0x39) /* Hurricane 2800 68030 */ -#define PROD_HURRICANE_2800_4 (0x57) /* Hurricane 2800 68030 */ - -#define MANUF_KUPKE3 (0x1248) /* Kupke */ -#define PROD_GOLEM_3000 (0x01) /* Golem HD 3000 */ - -#define MANUF_ITH (0x1388) /* ITH */ -#define PROD_ISDN_MASTER_II (0x01) /* ISDN-Master II */ - -#define MANUF_VMC (0x1389) /* VMC */ -#define PROD_ISDN_BLASTER_Z2 (0x01) /* ISDN Blaster Z2 */ -#define PROD_HYPERCOM_4 (0x02) /* HyperCom 4 */ - -#define MANUF_INFORMATION (0x157C) /* Information */ -#define PROD_ISDN_ENGINE_I (0x64) /* ISDN Engine I */ - -#define MANUF_VORTEX (0x2017) /* Vortex */ -#define PROD_GOLDEN_GATE_386SX (0x07) /* Golden Gate 80386SX Board */ -#define PROD_GOLDEN_GATE_RAM (0x08) /* Golden Gate RAM */ -#define PROD_GOLDEN_GATE_486 (0x09) /* Golden Gate 80486 Board */ - -#define MANUF_DATAFLYER (0x2062) /* DataFlyer */ -#define PROD_DATAFLYER_4000SXS (0x01) /* DataFlyer 4000SX SCSI Controller */ -#define PROD_DATAFLYER_4000SXR (0x02) /* DataFlyer 4000SX RAM */ - -#define MANUF_READYSOFT (0x2100) /* ReadySoft */ -#define PROD_AMAX (0x01) /* AMax II/IV */ - -#define MANUF_PHASE5 (0x2140) /* Phase5 */ -#define PROD_BLIZZARD_RAM (0x01) /* Blizzard RAM */ -#define PROD_BLIZZARD (0x02) /* Blizzard */ -#define PROD_BLIZZARD_1220_IV (0x06) /* Blizzard 1220-IV Turbo Board */ -#define PROD_FASTLANE_RAM (0x0A) /* FastLane RAM */ -#define PROD_FASTLANE_SCSI (0x0B) /* FastLane/Blizzard 1230-II SCSI/CyberSCSI */ -#define PROD_CYBERSTORM_SCSI (0x0C) /* Blizzard 1220/CyberStorm */ -#define PROD_BLIZZARD_1230_III (0x0D) /* Blizzard 1230-III Turbo Board */ -#define PROD_BLIZZARD_1230_IV (0x11) /* Blizzard 1230-IV/1260 Turbo Board */ -#define PROD_BLIZZARD_2060SCSI (0x18) /* Blizzard 2060 SCSI Controller */ -#define PROD_CYBERSTORM_II (0x19) /* CyberStorm Mk II */ -#define PROD_CYBERVISION (0x22) /* CyberVision64 Graphics Board */ -#define PROD_CYBERVISION3D_PRT (0x32) /* CyberVision64-3D Prototype */ -#define PROD_CYBERVISION3D (0x43) /* CyberVision64-3D Graphics Board */ - -#define MANUF_DPS (0x2169) /* DPS */ -#define PROD_DPS_PAR (0x01) /* Personal Animation Recorder */ - -#define MANUF_APOLLO2 (0x2200) /* Apollo */ -#define PROD_A620 (0x00) /* A620 68020 Accelerator */ -#define PROD_A620_2 (0x01) /* A620 68020 Accelerator */ - -#define MANUF_APOLLO (0x2222) /* Apollo */ -#define PROD_AT_APOLLO (0x22) /* AT-Apollo */ -#define PROD_APOLLO_TURBO (0x23) /* Apollo Turbo Board */ - -#define MANUF_PETSOFF (0x38A5) /* Petsoff LP */ -#define PROD_DELFINA (0x00) /* Delfina DSP */ - -#define MANUF_UWE_GERLACH (0x3FF7) /* Uwe Gerlach */ -#define PROD_UG_RAM_ROM (0xd4) /* RAM/ROM */ - -#define MANUF_MACROSYSTEMS2 (0x4754) /* MacroSystems Germany */ -#define PROD_MAESTRO (0x03) /* Maestro */ -#define PROD_VLAB (0x04) /* VLab */ -#define PROD_MAESTRO_PRO (0x05) /* Maestro Pro */ -#define PROD_RETINA_Z2 (0x06) /* Retina Z2 Graphics Board */ -#define PROD_MULTI_EVOLUTION (0x08) /* MultiEvolution */ -#define PROD_TOCCATA (0x0C) /* Toccata Sound Board */ -#define PROD_RETINA_Z3 (0x10) /* Retina Z3 Graphics Board */ -#define PROD_VLAB_MOTION (0x12) /* VLab Motion */ -#define PROD_ALTAIS (0x13) /* Altais Graphics Board */ -#define PROD_FALCON_040 (0xFD) /* Falcon '040 Turbo Board */ - -#define MANUF_COMBITEC (0x6766) /* Combitec */ - -#define MANUF_SKI (0x8000) /* SKI Peripherals */ -#define PROD_MAST_FIREBALL (0x08) /* M.A.S.T. Fireball SCSI Controller */ -#define PROD_SKI_SCSI_SERIAL (0x80) /* SCSI / Dual Serial */ - -#define MANUF_CAMERON (0xAA01) /* Cameron */ -#define PROD_PERSONAL_A4 (0x10) /* Personal A4 */ - -#define MANUF_REIS_WARE (0xAA11) /* Reis-Ware */ -#define PROD_RW_HANDYSCANNER (0x11) /* Handyscanner */ - - -/* Illegal Manufacturer IDs. These do NOT appear in arch/m68k/amiga/zorro.c! */ - -#define MANUF_HACKER_INC (0x07DB) /* Hacker Inc. */ -#define PROD_HACKER_SCSI (0x01) /* Hacker Inc. SCSI Controller */ - -#define MANUF_RES_MNGT_FORCE (0x07DB) /* Resource Management Force */ -#define PROD_QUICKNET (0x02) /* QuickNet Ethernet */ - -#define MANUF_VECTOR2 (0x07DB) /* Vector */ -#define PROD_CONNECTION_2 (0xE0) /* Vector Connection */ -#define PROD_CONNECTION_3 (0xE1) /* Vector Connection */ -#define PROD_CONNECTION_4 (0xE2) /* Vector Connection */ -#define PROD_CONNECTION_5 (0xE3) /* Vector Connection */ - - -/* - * GVP's identifies most of their product through the 'extended - * product code' (epc). The epc has to be and'ed with the GVP_PRODMASK - * before the identification. - */ - -#define GVP_PRODMASK (0xf8) -#define GVP_SCSICLKMASK (0x01) - -enum GVP_ident { - GVP_GFORCE_040 = 0x20, - GVP_GFORCE_040_SCSI = 0x30, - GVP_A1291_SCSI = 0x40, - GVP_COMBO_R4 = 0x60, - GVP_COMBO_R4_SCSI = 0x70, - GVP_PHONEPAK = 0x78, - GVP_IOEXT = 0x98, - GVP_GFORCE_030 = 0xa0, - GVP_GFORCE_030_SCSI = 0xb0, - GVP_A530 = 0xc0, - GVP_A530_SCSI = 0xd0, - GVP_COMBO_R3 = 0xe0, - GVP_COMBO_R3_SCSI = 0xf0, - GVP_SERIESII = 0xf8, -}; - -enum GVP_flags { - GVP_IO = 0x01, - GVP_ACCEL = 0x02, - GVP_SCSI = 0x04, - GVP_24BITDMA = 0x08, - GVP_25BITDMA = 0x10, - GVP_NOBANK = 0x20, - GVP_14MHZ = 0x40, -}; - - -struct Node { - struct Node *ln_Succ; /* Pointer to next (successor) */ - struct Node *ln_Pred; /* Pointer to previous (predecessor) */ - u_char ln_Type; - char ln_Pri; /* Priority, for sorting */ - char *ln_Name; /* ID string, null terminated */ -}; - -struct ExpansionRom { - /* -First 16 bytes of the expansion ROM */ - u_char er_Type; /* Board type, size and flags */ - u_char er_Product; /* Product number, assigned by manufacturer */ - u_char er_Flags; /* Flags */ - u_char er_Reserved03; /* Must be zero ($ff inverted) */ - u_short er_Manufacturer; /* Unique ID,ASSIGNED BY COMMODORE-AMIGA! */ - u_long er_SerialNumber; /* Available for use by manufacturer */ - u_short er_InitDiagVec; /* Offset to optional "DiagArea" structure */ - u_char er_Reserved0c; - u_char er_Reserved0d; - u_char er_Reserved0e; - u_char er_Reserved0f; -}; - -/* er_Type board type bits */ -#define ERT_TYPEMASK 0xc0 -#define ERT_ZORROII 0xc0 -#define ERT_ZORROIII 0x80 - -/* other bits defined in er_Type */ -#define ERTB_MEMLIST 5 /* Link RAM into free memory list */ -#define ERTF_MEMLIST (1<<5) - -struct ConfigDev { - struct Node cd_Node; - u_char cd_Flags; /* (read/write) */ - u_char cd_Pad; /* reserved */ - struct ExpansionRom cd_Rom; /* copy of board's expansion ROM */ - void *cd_BoardAddr; /* where in memory the board was placed */ - u_long cd_BoardSize; /* size of board in bytes */ - u_short cd_SlotAddr; /* which slot number (PRIVATE) */ - u_short cd_SlotSize; /* number of slots (PRIVATE) */ - void *cd_Driver; /* pointer to node of driver */ - struct ConfigDev *cd_NextCD; /* linked list of drivers to config */ - u_long cd_Unused[4]; /* for whatever the driver wants */ -}; - -#else /* __ASSEMBLY__ */ - -LN_Succ = 0 -LN_Pred = LN_Succ+4 -LN_Type = LN_Pred+4 -LN_Pri = LN_Type+1 -LN_Name = LN_Pri+1 -LN_sizeof = LN_Name+4 - -ER_Type = 0 -ER_Product = ER_Type+1 -ER_Flags = ER_Product+1 -ER_Reserved03 = ER_Flags+1 -ER_Manufacturer = ER_Reserved03+1 -ER_SerialNumber = ER_Manufacturer+2 -ER_InitDiagVec = ER_SerialNumber+4 -ER_Reserved0c = ER_InitDiagVec+2 -ER_Reserved0d = ER_Reserved0c+1 -ER_Reserved0e = ER_Reserved0d+1 -ER_Reserved0f = ER_Reserved0e+1 -ER_sizeof = ER_Reserved0f+1 - -CD_Node = 0 -CD_Flags = CD_Node+LN_sizeof -CD_Pad = CD_Flags+1 -CD_Rom = CD_Pad+1 -CD_BoardAddr = CD_Rom+ER_sizeof -CD_BoardSize = CD_BoardAddr+4 -CD_SlotAddr = CD_BoardSize+4 -CD_SlotSize = CD_SlotAddr+2 -CD_Driver = CD_SlotSize+2 -CD_NextCD = CD_Driver+4 -CD_Unused = CD_NextCD+4 -CD_sizeof = CD_Unused+(4*4) - -#endif /* __ASSEMBLY__ */ - -#ifndef __ASSEMBLY__ - -#define ZORRO_NUM_AUTO 16 - -#ifdef __KERNEL__ - -extern int zorro_num_autocon; /* # of autoconfig devices found */ -extern struct ConfigDev zorro_autocon[ZORRO_NUM_AUTO]; - - -/* - * Zorro Functions - */ - -extern int zorro_find(int manuf, int prod, int part, int index); -extern struct ConfigDev *zorro_get_board(int key); -extern void zorro_config_board(int key, int part); -extern void zorro_unconfig_board(int key, int part); - - -/* - * Bitmask indicating portions of available Zorro II RAM that are unused - * by the system. Every bit represents a 64K chunk, for a maximum of 8MB - * (128 chunks, physical 0x00200000-0x009fffff). - * - * If you want to use (= allocate) portions of this RAM, you should clear - * the corresponding bits. - */ - -extern u_long zorro_unused_z2ram[4]; - -#define Z2RAM_START (0x00200000) -#define Z2RAM_END (0x00a00000) -#define Z2RAM_SIZE (0x00800000) -#define Z2RAM_CHUNKSIZE (0x00010000) -#define Z2RAM_CHUNKMASK (0x0000ffff) -#define Z2RAM_CHUNKSHIFT (16) - - -/* - * Verbose Board Identification - */ - -extern void zorro_identify(void); -extern int zorro_get_list(char *buffer); - -#endif /* !__ASSEMBLY__ */ -#endif /* __KERNEL__ */ - -#endif /* __ZORRO_H */ -/* - * linux/zorro.h -- Amiga AutoConfig (Zorro) Expansion Device Definitions - * - * Copyright (C) 1995 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 __ZORRO_H -#define __ZORRO_H - -#ifndef __ASSEMBLY__ - -/* - * Defined Board Manufacturers - * - * Please update arch/m68k/amiga/zorro.c if you make changes here - * Many IDs were obtained from ExpName/Identify ((C) Richard Körber) - * and by looking at the NetBSD-Amiga kernel sources - */ - -#define MANUF_PACIFIC (0x00D3) /* Pacific Peripherals */ -#define PROD_SE_2000_A500 (0x00) /* SE 2000 A500 */ -#define PROD_PACIFIC_HD (0x0A) /* HD Controller */ - -#define MANUF_KUPKE (0x00DD) /* Kupke */ -#define PROD_GOLEM_BOX_2 (0x00) /* Golem RAM Box 2MB */ - -#define MANUF_MEMPHIS (0x0100) /* Memphis */ -#define PROD_STORMBRINGER (0x00) /* Stormbringer */ - -#define MANUF_3_STATE (0x0200) /* 3-State */ -#define PROD_MEGAMIX_2000 (0x02) /* Megamix 2000 RAM */ - -#define MANUF_COMMODORE2 (0x0201) /* Commodore Braunschweig */ -#define PROD_A2088 (0x01) /* CBM A2088 XT Bridgeboard */ -#define PROD_A2286 (0x02) /* CBM A2286 AT Bridgeboard */ -#define PROD_A4091_2 (0x54) /* CBM A4091 SCSI Controller */ -#define PROD_A2386SX (0x67) /* CBM A2386-SX Bridgeboard */ - -#define MANUF_COMMODORE (0x0202) /* Commodore West Chester */ -#define PROD_A2090A (0x01) /* CBM A2090/A2090A HD Controller */ -#define PROD_A590 (0x02) /* CBM A590 SCSI Controller */ -#define PROD_A2091 (0x03) /* CBM A2091 SCSI Controller */ -#define PROD_A2090B (0x04) /* CBM A2090B 2090 Autoboot Card */ -#define PROD_ARCNET (0x09) /* CBM A2060 Arcnet Card */ -#define PROD_CBMRAM (0x0A) /* CBM A2052/58.RAM | 590/2091.RAM */ -#define PROD_A560RAM (0x20) /* CBM A560 Memory Module */ -#define PROD_A2232PROTO (0x45) /* CBM A2232 Serial Prototype */ -#define PROD_A2232 (0x46) /* CBM A2232 Serial Production */ -#define PROD_A2620 (0x50) /* CBM A2620 68020/RAM Card */ -#define PROD_A2630 (0x51) /* CBM A2630 68030/RAM Card */ -#define PROD_A4091 (0x54) /* CBM A4091 SCSI Controller */ -#define PROD_A2065_2 (0x5A) /* A2065 Ethernet Card */ -#define PROD_ROMULATOR (0x60) /* CBM Romulator Card */ -#define PROD_A3000TESTFIX (0x61) /* CBM A3000 Test Fixture */ -#define PROD_A2386SX_2 (0x67) /* A2386-SX Bridgeboard */ -#define PROD_A2065 (0x70) /* CBM A2065 Ethernet Card */ - -#define MANUF_COMMODORE3 (0x0203) /* Commodore West Chester */ -#define PROD_A2090A_CM (0x03) /* A2090A Combitec/MacroSystem */ - -#define MANUF_KCS (0x02FF) /* Kolff Computer Supplies */ -#define PROD_POWER_BOARD (0x00) /* KCS Power PC Board */ - -#define MANUF_CARDCO (0x03EC) /* Cardco */ -#define PROD_KRONOS_2000_SCSI (0x04) /* Kronos 2000 SCSI Controller */ -#define PROD_A1000_SCSI (0x0C) /* A1000 SCSI Controller */ -#define PROD_ESCORT_SCSI (0x0E) /* Escort SCSI Controller */ -#define PROD_CC_A2410 (0xF5) /* Cardco A2410 Hires Graphics Card */ - -#define MANUF_A_SQUARED (0x03ED) /* A-Squared */ -#define PROD_LIVE_2000 (0x01) /* Live! 2000 */ - -#define MANUF_COMSPEC (0x03EE) /* ComSpec Communications */ -#define PROD_AX2000 (0x01) /* AX2000 */ - -#define MANUF_ANAKIN (0x03F1) /* Anakin */ -#define PROD_EASYL (0x01) /* Easyl Tablet */ - -#define MANUF_MICROBOTICS (0x03F2) /* MicroBotics */ -#define PROD_STARBOARD_II (0x00) /* StarBoard II */ -#define PROD_STARDRIVE (0x02) /* StarDrive */ -#define PROD_8_UP_A (0x03) /* 8-Up (Rev A) */ -#define PROD_8_UP_Z (0x04) /* 8-Up (Rev Z) */ -#define PROD_DELTA_RAM (0x20) /* Delta Card RAM */ -#define PROD_8_STAR_RAM (0x40) /* 8-Star RAM */ -#define PROD_8_STAR (0x41) /* 8-Star */ -#define PROD_VXL_RAM (0x44) /* VXL RAM */ -#define PROD_VXL_30 (0x45) /* VXL-30 Turbo Board */ -#define PROD_DELTA (0x60) /* Delta Card */ -#define PROD_MBX_1200 (0x81) /* MBX 1200 */ -#define PROD_HARDFRAME_2000 (0x9E) /* Hardframe 2000 */ -#define PROD_MBX_1200_2 (0xC1) /* MBX 1200 */ - -#define MANUF_ACCESS (0x03F4) /* Access Associates */ - -#define MANUF_EXPANSION_TECH (0x03F6) /* Expansion Technologies */ - -#define MANUF_ASDG (0x03FF) /* ASDG */ -#define PROD_ASDG_MEMORY (0x01) /* Memory Expansion */ -#define PROD_ASDG_MEMORY_2 (0x02) /* Memory Expansion */ -#define PROD_LAN_ROVER (0xFE) /* Lan Rover Ethernet */ -#define PROD_TWIN_X (0xFF) /* Twin-X Serial Card */ - -#define MANUF_IMTRONICS (0x0404) /* Imtronics */ -#define PROD_HURRICANE_2800 (0x39) /* Hurricane 2800 68030 */ -#define PROD_HURRICANE_2800_2 (0x57) /* Hurricane 2800 68030 */ - -#define MANUF_UNIV_OF_LOWELL (0x0406) /* University of Lowell */ -#define PROD_A2410 (0x00) /* CBM A2410 Hires Graphics Card */ - -#define MANUF_AMERISTAR (0x041D) /* Ameristar */ -#define PROD_AMERISTAR2065 (0x01) /* A2065 Ethernet Card */ -#define PROD_A560 (0x09) /* Arcnet Card */ -#define PROD_A4066 (0x0A) /* A4066 Ethernet Card */ - -#define MANUF_SUPRA (0x0420) /* Supra */ -#define PROD_SUPRADRIVE_4x4 (0x01) /* SupraDrive 4x4 SCSI Controller */ -#define PROD_SUPRA_2000 (0x03) /* 2000 DMA HD */ -#define PROD_SUPRA_500 (0x05) /* 500 HD/RAM */ -#define PROD_SUPRA_500XP (0x09) /* 500XP/2000 RAM */ -#define PROD_SUPRA_500RX (0x0A) /* 500RX/2000 RAM */ -#define PROD_SUPRA_2400ZI (0x0B) /* 2400zi Modem */ -#define PROD_WORDSYNC (0x0C) /* Supra Wordsync SCSI Controller */ -#define PROD_WORDSYNC_II (0x0D) /* Supra Wordsync II SCSI Controller */ -#define PROD_SUPRA_2400ZIPLUS (0x10) /* 2400zi+ Modem */ - -#define MANUF_CSA (0x0422) /* Computer Systems Ass. */ -#define PROD_MAGNUM (0x11) /* Magnum 40 SCSI Controller */ -#define PROD_12GAUGE (0x15) /* 12 Gauge SCSI Controller */ - -#define MANUF_MTEC2 (0x0502) /* M-Tech */ -#define PROD_AT500_2 (0x03) /* AT500 RAM */ - -#define MANUF_GVP3 (0x06E1) /* Great Valley Products */ -#define PROD_IMPACT (0x08) /* Impact SCSI/Memory */ - -#define MANUF_BYTEBOX (0x07DA) /* ByteBox */ -#define PROD_BYTEBOX_A500 (0x00) /* A500 */ - -#define MANUF_HACKER (0x07DB) /* Test only: no product definitions */ - -#define MANUF_POWER_COMPUTING (0x07DC) /* Power Computing (DKB) */ -#define PROD_DKB_3128 (0x0E) /* DKB 3128 RAM */ -#define PROD_RAPID_FIRE (0x0F) /* Rapid Fire SCSI Controller */ -#define PROD_DKB_1202 (0x10) /* DKB 1202 RAM */ -#define PROD_VIPER_II_COBRA (0x12) /* Viper II Turbo Board (DKB Cobra) */ -#define PROD_WILDFIRE_060 (0x17) /* WildFire 060 Turbo Board */ -#define PROD_WILDFIRE_060_2 (0xFF) /* WildFire 060 Turbo Board */ - -#define MANUF_GVP (0x07E1) /* Great Valley Products */ -#define PROD_IMPACT_I_4K (0x01) /* Impact Series-I SCSI 4K */ -#define PROD_IMPACT_I_16K_2 (0x02) /* Impact Series-I SCSI 16K/2 */ -#define PROD_IMPACT_I_16K_3 (0x03) /* Impact Series-I SCSI 16K/3 */ -#define PROD_IMPACT_3001_IDE (0x08) /* Impact 3001 IDE */ -#define PROD_IMPACT_3001_RAM (0x09) /* Impact 3001 RAM */ -#define PROD_GVPIISCSI (0x0B) /* GVP Series II SCSI Controller */ -#define PROD_GVPIISCSI_2 (0x09) /* evidence that the driver works - for this product code also */ -#define PROD_GVPIIRAM (0x0A) /* GVP Series II RAM */ -#define PROD_GVP (0x0B) /* This code is used by a wide range of - GVP products - use the epc to - identify it correctly */ -#define PROD_GVP_A2000_030 (0x0D) /* GVP A2000 68030 Turbo Board */ -#define PROD_IMPACT_3001_IDE_2 (0x0D) /* Impact 3001 IDE */ -#define PROD_GFORCE_040_SCSI (0x16) /* GForce 040 with SCSI (new) */ -#define PROD_GVPIV_24 (0x20) /* GVP IV-24 Graphics Board */ -#define PROD_GFORCE_040 (0xFF) /* GForce 040 Turbo Board */ -/* #define PROD_GVPIO_EXT (0xFF)*/ /* GVP I/O Extender */ - -#define MANUF_SYNERGY (0x07E5) /* Synergy */ - -#define MANUF_XETEC (0x07E6) /* Xetec */ -#define PROD_FASTCARD_SCSI (0x01) /* FastCard SCSI Controller */ -#define PROD_FASTCARD_RAM (0x02) /* FastCard RAM */ - -#define MANUF_PPI (0x07EA) /* Progressive Peripherals Inc. */ -#define PROD_MERCURY (0x00) /* Mercury Turbo Board */ -#define PROD_PPS_A3000_040 (0x01) /* PP&S A3000 68040 Turbo Board */ -#define PROD_PPS_A2000_040 (0x69) /* PP&S A2000 68040 Turbo Board */ -#define PROD_ZEUS (0x96) /* Zeus SCSI Controller */ -#define PROD_PPS_A500_040 (0xBB) /* PP&S A500 68040 Turbo Board */ - -#define MANUF_XEBEC (0x07EC) /* Xebec */ - -#define MANUF_SPIRIT (0x07F2) /* Spirit */ -#define PROD_HDA_506 (0x04) /* HDA 506 Harddisk */ -#define PROD_OCTABYTE_RAM (0x06) /* OctaByte RAM */ - -#define MANUF_BSC (0x07FE) /* BSC */ -#define PROD_ALF_3_SCSI (0x03) /* BSC ALF 3 SCSI Controller */ - -#define MANUF_BSC3 (0x0801) /* BSC */ -#define PROD_ALF_2_SCSI (0x01) /* ALF 2 SCSI Controller */ -#define PROD_ALF_2_SCSI_2 (0x02) /* ALF 2 SCSI Controller */ -#define PROD_ALF_3_SCSI_2 (0x03) /* ALF 3 SCSI Controller */ - -#define MANUF_C_LTD (0x0802) /* C Ltd. */ -#define PROD_KRONOS_SCSI (0x04) /* Kronos SCSI Controller */ -#define PROD_A1000_SCSI_2 (0x0C) /* A1000 SCSI Controller */ - -#define MANUF_JOCHHEIM (0x0804) /* Jochheim */ -#define PROD_JOCHHEIM_RAM (0x01) /* Jochheim RAM */ - -#define MANUF_CHECKPOINT (0x0807) /* Checkpoint Technologies */ -#define PROD_SERIAL_SOLUTION (0x00) /* Serial Solution */ - -#define MANUF_ICD (0x0817) /* ICD */ -#define PROD_ADVANTAGE_2000 (0x01) /* Advantage 2000 SCSI Controller */ - -#define MANUF_KUPKE2 (0x0819) /* Kupke */ -#define PROD_KUPKE_SCSI_II (0x02) /* Golem SCSI-II Controller */ -#define PROD_GOLEM_BOX (0x03) /* Golem Box */ -#define PROD_KUPKE_TURBO (0x04) /* 030/882 Turbo Board */ -#define PROD_KUPKE_SCSI_AT (0x05) /* SCSI/AT Controller */ - -#define MANUF_GVP4 (0x081D) /* Great Valley Products */ -#define PROD_A2000_RAM8 (0x09) /* A2000-RAM8/2 */ - -#define MANUF_INTERWORKS_NET (0x081E) /* Interworks Network */ - -#define MANUF_HARDITAL (0x0820) /* Hardital Synthesis */ -#define PROD_TQM (0x14) /* TQM 68030+68882 Turbo Board */ - -#define MANUF_BSC2 (0x082C) /* BSC */ -#define PROD_OKTAGON_SCSI (0x05) /* BSC Oktagon 2008 SCSI Controller */ -#define PROD_TANDEM (0x06) /* BSC Tandem AT-2008/508 IDE */ -#define PROD_ALPHA_RAM_1200 (0x07) /* Alpha RAM 1200 */ -#define PROD_OKTAGON_RAM (0x08) /* BSC Oktagon 2008 RAM */ -#define PROD_MULTIFACE_I (0x10) /* Alfa Data MultiFace I */ -#define PROD_MULTIFACE_II (0x11) /* Alfa Data MultiFace II */ -#define PROD_MULTIFACE_III (0x12) /* Alfa Data MultiFace III */ -#define PROD_BSC_FRAEMBUFFER (0x20) /* Framebuffer */ -#define PROD_GRAFFITI_RAM (0x21) /* Graffiti Graphics Board */ -#define PROD_GRAFFITI_REG (0x22) -#define PROD_ISDN_MASTERCARD (0x40) /* BSC ISDN MasterCard */ -#define PROD_ISDN_MASTERCARD_2 (0x41) /* BSC ISDN MasterCard II */ - -#define MANUF_ADV_SYS_SOFT (0x0836) /* Advanced Systems & Software */ -#define PROD_NEXUS_SCSI (0x01) /* Nexus SCSI Controller */ -#define PROD_NEXUS_RAM (0x08) /* Nexus RAM */ - -#define MANUF_IMPULSE (0x0838) /* Impulse */ -#define PROD_FIRECRACKER_24 (0x00) /* FireCracker 24 */ - -#define MANUF_IVS (0x0840) /* IVS */ -#define PROD_GRANDSLAM_PIC_2 (0x02) /* GrandSlam PIC 2 RAM */ -#define PROD_GRANDSLAM_PIC_1 (0x04) /* GrandSlam PIC 1 RAM */ -#define PROD_IVS_OVERDRIVE (0x10) /* OverDrive HD */ -#define PROD_TRUMPCARD_CLASSIC (0x30) /* Trumpcard Classic SCSI Controller */ -#define PROD_TRUMPCARD_PRO (0x34) /* Trumpcard Pro SCSI Controller */ -#define PROD_META_4 (0x40) /* Meta-4 RAM */ -#define PROD_WAVETOOLS (0xBF) /* Wavetools Sound Board */ -#define PROD_VECTOR (0xF3) /* Vector SCSI Controller */ -#define PROD_VECTOR_2 (0xF4) /* Vector SCSI Controller */ - -#define MANUF_VECTOR (0x0841) /* Vector */ -#define PROD_CONNECTION (0xE3) /* Connection Serial IO */ - -#define MANUF_XPERT_PRODEV (0x0845) /* XPert/ProDev */ -#define PROD_VISIONA_RAM (0x01) /* Visiona Graphics Board */ -#define PROD_VISIONA_REG (0x02) -#define PROD_MERLIN_RAM (0x03) /* Merlin Graphics Board */ -#define PROD_MERLIN_REG (0x04) -#define PROD_MERLIN_REG_2 (0xC9) - -#define MANUF_HYDRA_SYSTEMS (0x0849) /* Hydra Systems */ -#define PROD_AMIGANET (0x01) /* Amiganet Board */ - -#define MANUF_SUNRIZE (0x084F) /* Sunrize Industries */ -#define PROD_AD1012 (0x01) /* AD1012 Sound Board */ -#define PROD_AD516 (0x02) /* AD516 Sound Board */ -#define PROD_DD512 (0x03) /* DD512 Sound Board */ - -#define MANUF_TRICERATOPS (0x0850) /* Triceratops */ -#define PROD_TRICERATOPS (0x01) /* Triceratops Multi I/O Board */ - -#define MANUF_APPLIED_MAGIC (0x0851) /* Applied Magic Inc */ -#define PROD_DMI_RESOLVER (0x01) /* DMI Resolver Graphics Board */ -#define PROD_DIGITAL_BCASTER (0x06) /* Digital Broadcaster */ - -#define MANUF_GFX_BASE (0x085E) /* GFX-Base */ -#define PROD_GDA_1_RAM (0x00) /* GDA-1 Graphics Board */ -#define PROD_GDA_1_REG (0x01) - -#define MANUF_ROCTEC (0x0860) /* RocTec */ -#define PROD_RH_800C (0x01) /* RH 800C Hard Disk Controller */ -#define PROD_RH_800C_RAM (0x01) /* RH 800C RAM */ - -#define MANUF_HELFRICH1 (0x0861) /* Helfrich */ -#define PROD_RAINBOW3 (0x21) /* Rainbow3 Graphics Board */ - -#define MANUF_SW_RESULT_ENTS (0x0866) /* Software Result Enterprises */ -#define PROD_GG2PLUS (0x01) /* GG2+ Bus Converter */ - -#define MANUF_MASOBOSHI (0x086D) /* Masoboshi */ -#define PROD_MASTER_CARD_RAM (0x03) /* Master Card RAM */ -#define PROD_MASTER_CARD_SCSI (0x04) /* Master Card SCSI Controller */ -#define PROD_MVD_819 (0x07) /* MVD 819 */ - -#define MANUF_DELACOMP (0x0873) /* DelaComp */ -#define PROD_DELACOMP_RAM_2000 (0x01) /* RAM Expansion 2000 */ - #define MANUF_VILLAGE_TRONIC (0x0877) /* Village Tronic */ #define PROD_DOMINO_RAM (0x01) /* Domino Graphics Board */ #define PROD_DOMINO_REG (0x02) diff --git a/include/net/ip.h b/include/net/ip.h index c0e600a37..e5d59dd33 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -65,36 +65,6 @@ extern void ip_mc_dropsocket(struct sock *); extern void ip_mc_dropdevice(struct device *dev); extern int ip_mc_procinfo(char *, char **, off_t, int, int); -/* Describe an IP fragment. */ -struct ipfrag -{ - int offset; /* offset of fragment in IP datagram */ - int end; /* last byte of data in datagram */ - int len; /* length of this fragment */ - struct sk_buff *skb; /* complete received fragment */ - unsigned char *ptr; /* pointer into real fragment data */ - struct ipfrag *next; /* linked list pointers */ - struct ipfrag *prev; -}; - -/* - * Describe an entry in the "incomplete datagrams" queue. - */ - -struct ipq -{ - unsigned char *mac; /* pointer to MAC header */ - struct iphdr *iph; /* pointer to IP header */ - int len; /* total length of original datagram */ - short ihlen; /* length of the IP header */ - short maclen; /* length of the MAC header */ - struct timer_list timer; /* when will this queue expire? */ - struct ipfrag *fragments; /* linked list of received fragments */ - struct ipq *next; /* linked list pointers */ - struct ipq *prev; - struct device *dev; /* Device - for icmp replies */ -}; - /* * Functions provided by ip.c */ diff --git a/include/net/sock.h b/include/net/sock.h index 61936854f..354d8dae5 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -216,6 +216,7 @@ struct tcp_opt * Options received (usually on last packet, some only on SYN packets). */ char tstamp_ok, /* TIMESTAMP seen on SYN packet */ + wscale_ok, /* Wscale seen on SYN packet */ sack_ok; /* SACK_PERM seen on SYN packet */ char saw_tstamp; /* Saw TIMESTAMP on last packet */ __u16 in_mss; /* MSS option received from sender */ diff --git a/include/net/tcp.h b/include/net/tcp.h index 3822b461f..cedc7f3b1 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -43,6 +43,17 @@ extern struct sock *tcp_established_hash[TCP_HTABLE_SIZE]; extern struct sock *tcp_listening_hash[TCP_LHTABLE_SIZE]; extern struct sock *tcp_bound_hash[TCP_BHTABLE_SIZE]; +/* tcp_ipv4.c: These sysctl variables need to be shared between v4 and v6 + * because the v6 tcp code to intialize a connection needs to interoperate + * with the v4 code using the same variables. + * FIXME: It would be better to rewrite the connection code to be + * address family independent and just leave one copy in the ipv4 section. + * This would also clean up some code duplication. -- erics + */ +extern int sysctl_tcp_sack; +extern int sysctl_tcp_timestamps; +extern int sysctl_tcp_window_scaling; + /* These are AF independant. */ static __inline__ int tcp_bhashfn(__u16 lport) { @@ -224,8 +235,12 @@ struct open_request { __u16 rmt_port; __u16 mss; __u8 snd_wscale; + __u8 rcv_wscale; char sack_ok; char tstamp_ok; + char wscale_ok; + __u32 window_clamp; /* window clamp at creation time */ + __u32 rcv_wnd; /* rcv_wnd offered first time */ __u32 ts_recent; unsigned long expires; int retrans; @@ -452,6 +467,10 @@ struct tcp_sl_timer { extern struct tcp_sl_timer tcp_slt_array[TCP_SLT_MAX]; +/* + * FIXME: this method of choosing when to send a window update + * does not seem correct to me. -- erics + */ static __inline__ unsigned short tcp_raise_window(struct sock *sk) { struct tcp_opt *tp = &sk->tp_pinfo.af_tcp; @@ -553,9 +572,9 @@ static __inline__ void tcp_set_state(struct sock *sk, int state) * It would be especially magical to compute the checksum for this * stuff on the fly here. */ -extern __inline__ int tcp_syn_build_options(struct sk_buff *skb, int mss, int sack, int ts, int wscale) +extern __inline__ int tcp_syn_build_options(struct sk_buff *skb, int mss, int sack, int ts, int offer_wscale, int wscale) { - int count = 4 + (wscale ? 4 : 0) + ((ts || sack) ? 4 : 0) + (ts ? 8 : 0); + int count = 4 + (offer_wscale ? 4 : 0) + ((ts || sack) ? 4 : 0) + (ts ? 8 : 0); unsigned char *optr = skb_put(skb,count); __u32 *ptr = (__u32 *)optr; @@ -579,12 +598,53 @@ extern __inline__ int tcp_syn_build_options(struct sk_buff *skb, int mss, int sa *ptr++ = htonl((TCPOPT_SACK_PERM << 24) | (TCPOLEN_SACK_PERM << 16) | (TCPOPT_NOP << 8) | TCPOPT_NOP); } - if (wscale) - *ptr++ = htonl((TCPOPT_WINDOW << 24) | (TCPOLEN_WINDOW << 16) | wscale); + if (offer_wscale) + *ptr++ = htonl((TCPOPT_WINDOW << 24) | (TCPOLEN_WINDOW << 16) | (wscale << 8)); skb->csum = csum_partial(optr, count, 0); return count; } +/* Determine a window scaling and initial window to offer. + * Based on the assumption that the given amount of space + * will be offered. Store the results in the tp structure. + * NOTE: for smooth operation initial space offering should + * be a multiple of mss if possible. We assume here that mss >= 1. + * This MUST be enforced by all callers. + */ +extern __inline__ void tcp_select_initial_window(__u32 space, __u16 mss, + __u32 *rcv_wnd, + __u32 *window_clamp, + int wscale_ok, + __u8 *rcv_wscale) +{ + /* If no clamp set the clamp to the max possible scaled window */ + if (*window_clamp == 0) + (*window_clamp) = (65535<<14); + space = min(*window_clamp,space); + + /* Quantize space offering to a multiple of mss if possible. */ + if (space > mss) + space = (space/mss)*mss; + + /* NOTE: offering an initial window larger than 32767 + * will break some buggy TCP stacks. We try to be nice. + * If we are not window scaling, then this truncates + * our initial window offering to 32k. There should also + * be a sysctl option to stop being nice. + */ + (*rcv_wnd) = min(space,32767); + (*rcv_wscale) = 0; + if (wscale_ok) { + /* See RFC1323 for an explanation of the limit to 14 */ + while (space > 65535 && (*rcv_wscale) < 14) { + space >>= 1; + (*rcv_wscale)++; + } + } + /* Set the clamp no higher than max representable value */ + (*window_clamp) = min(65535<<(*rcv_wscale),*window_clamp); +} + extern __inline__ void tcp_synq_unlink(struct tcp_opt *tp, struct open_request *req) { if(req->dl_next) |