summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asm-alpha/atomic.h16
-rw-r--r--include/asm-alpha/bitops.h85
-rw-r--r--include/asm-alpha/current.h6
-rw-r--r--include/asm-alpha/io.h2
-rw-r--r--include/asm-alpha/keyboard.h200
-rw-r--r--include/asm-alpha/processor.h14
-rw-r--r--include/asm-alpha/semaphore.h4
-rw-r--r--include/asm-alpha/softirq.h4
-rw-r--r--include/asm-alpha/spinlock.h27
-rw-r--r--include/asm-alpha/system.h106
-rw-r--r--include/asm-i386/bitops.h38
-rw-r--r--include/asm-i386/current.h16
-rw-r--r--include/asm-i386/delay.h17
-rw-r--r--include/asm-i386/hardirq.h1
-rw-r--r--include/asm-i386/keyboard.h40
-rw-r--r--include/asm-i386/processor.h22
-rw-r--r--include/asm-i386/semaphore.h46
-rw-r--r--include/asm-i386/smp.h8
-rw-r--r--include/asm-i386/smp_lock.h17
-rw-r--r--include/asm-i386/spinlock.h66
-rw-r--r--include/asm-i386/system.h4
-rw-r--r--include/asm-m68k/atomic.h2
-rw-r--r--include/asm-m68k/bitops.h24
-rw-r--r--include/asm-m68k/current.h8
-rw-r--r--include/asm-m68k/dsp56k.h35
-rw-r--r--include/asm-m68k/elf.h2
-rw-r--r--include/asm-m68k/fpu.h20
-rw-r--r--include/asm-m68k/hardirq.h17
-rw-r--r--include/asm-m68k/init.h16
-rw-r--r--include/asm-m68k/keyboard.h38
-rw-r--r--include/asm-m68k/namei.h21
-rw-r--r--include/asm-m68k/pgtable.h4
-rw-r--r--include/asm-m68k/poll.h21
-rw-r--r--include/asm-m68k/processor.h14
-rw-r--r--include/asm-m68k/ptrace.h2
-rw-r--r--include/asm-m68k/semaphore.h72
-rw-r--r--include/asm-m68k/sigcontext.h4
-rw-r--r--include/asm-m68k/smp_lock.h14
-rw-r--r--include/asm-m68k/softirq.h63
-rw-r--r--include/asm-m68k/spinlock.h31
-rw-r--r--include/asm-m68k/system.h1
-rw-r--r--include/asm-m68k/unistd.h8
-rw-r--r--include/asm-mips/bitops.h155
-rw-r--r--include/asm-mips/bootinfo.h2
-rw-r--r--include/asm-mips/current.h33
-rw-r--r--include/asm-mips/delay.h12
-rw-r--r--include/asm-mips/io.h30
-rw-r--r--include/asm-mips/jazz.h2
-rw-r--r--include/asm-mips/keyboard.h198
-rw-r--r--include/asm-mips/mipsprom.h74
-rw-r--r--include/asm-mips/offset.h9
-rw-r--r--include/asm-mips/poll.h2
-rw-r--r--include/asm-mips/processor.h9
-rw-r--r--include/asm-mips/sgidefs.h24
-rw-r--r--include/asm-mips/sni.h5
-rw-r--r--include/asm-mips/spinlock.h2
-rw-r--r--include/asm-mips/system.h19
-rw-r--r--include/asm-ppc/keyboard.h49
-rw-r--r--include/asm-ppc/processor.h2
-rw-r--r--include/asm-sparc/asm_offsets.h186
-rw-r--r--include/asm-sparc/asmmacro.h14
-rw-r--r--include/asm-sparc/auxio.h47
-rw-r--r--include/asm-sparc/bitops.h27
-rw-r--r--include/asm-sparc/cache.h3
-rw-r--r--include/asm-sparc/current.h6
-rw-r--r--include/asm-sparc/hardirq.h2
-rw-r--r--include/asm-sparc/irq.h12
-rw-r--r--include/asm-sparc/linux_logo.h1045
-rw-r--r--include/asm-sparc/processor.h11
-rw-r--r--include/asm-sparc/semaphore.h26
-rw-r--r--include/asm-sparc/smp.h4
-rw-r--r--include/asm-sparc/spinlock.h106
-rw-r--r--include/asm-sparc/string.h6
-rw-r--r--include/asm-sparc/system.h71
-rw-r--r--include/asm-sparc/termbits.h8
-rw-r--r--include/asm-sparc/winmacro.h9
-rw-r--r--include/asm-sparc64/a.out.h4
-rw-r--r--include/asm-sparc64/asm_offsets.h188
-rw-r--r--include/asm-sparc64/bitops.h27
-rw-r--r--include/asm-sparc64/checksum.h12
-rw-r--r--include/asm-sparc64/current.h6
-rw-r--r--include/asm-sparc64/elf.h26
-rw-r--r--include/asm-sparc64/fs_mount.h44
-rw-r--r--include/asm-sparc64/head.h47
-rw-r--r--include/asm-sparc64/linux_logo.h1042
-rw-r--r--include/asm-sparc64/mmu_context.h12
-rw-r--r--include/asm-sparc64/pgtable.h109
-rw-r--r--include/asm-sparc64/processor.h24
-rw-r--r--include/asm-sparc64/spitfire.h10
-rw-r--r--include/asm-sparc64/string.h8
-rw-r--r--include/asm-sparc64/system.h40
-rw-r--r--include/asm-sparc64/termbits.h6
-rw-r--r--include/linux/affs_fs.h88
-rw-r--r--include/linux/affs_fs_i.h36
-rw-r--r--include/linux/affs_fs_sb.h10
-rw-r--r--include/linux/affs_hardblocks.h84
-rw-r--r--include/linux/amigaffs.h166
-rw-r--r--include/linux/auto_fs.h151
-rw-r--r--include/linux/console.h27
-rw-r--r--include/linux/cyclades.h374
-rw-r--r--include/linux/digi1.h100
-rw-r--r--include/linux/digiFep1.h136
-rw-r--r--include/linux/digiPCI.h42
-rw-r--r--include/linux/elf.h115
-rw-r--r--include/linux/epca.h170
-rw-r--r--include/linux/epcaconfig.h8
-rw-r--r--include/linux/ext2_fs.h23
-rw-r--r--include/linux/ext2_fs_sb.h3
-rw-r--r--include/linux/fb.h2
-rw-r--r--include/linux/file.h25
-rw-r--r--include/linux/fs.h57
-rw-r--r--include/linux/in6.h4
-rw-r--r--include/linux/inet.h4
-rw-r--r--include/linux/keyboard.h6
-rw-r--r--include/linux/locks.h2
-rw-r--r--include/linux/lp_m68k.h11
-rw-r--r--include/linux/major.h1
-rw-r--r--include/linux/malloc.h8
-rw-r--r--include/linux/mm.h60
-rw-r--r--include/linux/pci.h7
-rw-r--r--include/linux/proc_fs.h2
-rw-r--r--include/linux/sched.h160
-rw-r--r--include/linux/serial.h3
-rw-r--r--include/linux/skbuff.h8
-rw-r--r--include/linux/slab.h41
-rw-r--r--include/linux/smp.h1
-rw-r--r--include/linux/socket.h13
-rw-r--r--include/linux/sunrpc/clnt.h2
-rw-r--r--include/linux/sysctl.h10
-rw-r--r--include/linux/tqueue.h2
-rw-r--r--include/linux/tty.h7
-rw-r--r--include/linux/zorro.h642
-rw-r--r--include/net/ip.h30
-rw-r--r--include/net/sock.h1
-rw-r--r--include/net/tcp.h68
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) &current->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 &current_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)